[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_size = 2\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.xml]\nindent_size = 4\n\n# noinspection EditorConfigKeyCorrectness\n[*.{kt,kts}]\nindent_size = 4\nmax_line_length = 120\n\nij_kotlin_allow_trailing_comma = true\nij_kotlin_allow_trailing_comma_on_call_site = true\nij_kotlin_name_count_to_use_star_import = 2147483647\nij_kotlin_name_count_to_use_star_import_for_members = 2147483647\n\nktlint_code_style = intellij_idea\nktlint_function_naming_ignore_when_annotated_with = Composable\nktlint_standard_class-signature = disabled\nktlint_standard_discouraged-comment-location = disabled\nktlint_standard_function-expression-body = disabled\nktlint_standard_function-signature = disabled\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n* text eol=lf\n\n# Windows forced line-endings\n/.idea/* text eol=crlf\n\n# Gradle wrapper\n*.jar binary\n\n# Images\n*.webp binary\n*.png binary\n*.jpg binary\n*.jpeg binary\n*.gif binary\n*.ico binary\n*.gz binary\n*.zip binary\n*.7z binary\n*.ttf binary\n*.eot binary\n*.woff binary\n*.pyc binary\n*.swp binary\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: jmir1\nko_fi: jmir1\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: ❌ Help with Extensions\n    url: https://aniyomi.org/docs/faq/browse/extensions\n    about: For extension-related questions/issues\n  - name: 🧑‍💻 Aniyomi help discord\n    url: https://discord.gg/F32UjdJZrR\n    about: Common questions are answered here\n  - name: 🖥️ Aniyomi website\n    url: https://aniyomi.org/\n    about: Guides, troubleshooting, and answers to common questions\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/report_issue.yml",
    "content": "name: 🐞 Issue report\ndescription: Report an issue in Aniyomi\nlabels: [Bug]\nbody:\n  - type: textarea\n    id: reproduce-steps\n    attributes:\n      label: Steps to reproduce\n      description: Provide an example of the issue.\n      placeholder: |\n        Example:\n          1. First step\n          2. Second step\n          3. Issue here\n    validations:\n      required: true\n\n  - type: textarea\n    id: expected-behavior\n    attributes:\n      label: Expected behavior\n      description: Explain what you should expect to happen.\n      placeholder: |\n        Example:\n          \"This should happen...\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: actual-behavior\n    attributes:\n      label: Actual behavior\n      description: Explain what actually happens.\n      placeholder: |\n        Example:\n          \"This happened instead...\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: crash-logs\n    attributes:\n      label: Crash logs\n      description: |\n        If you're experiencing crashes, if possible, go to the app's **More → Settings → Advanced** page, press **Dump crash logs** and share the crash logs here.\n      placeholder: |\n        You can upload the crash log file as an attachment, or paste the crash logs in plain text if needed.\n\n  - type: input\n    id: aniyomi-version\n    attributes:\n      label: Aniyomi version\n      description: You can find your Aniyomi version in **More → About**.\n      placeholder: |\n        Example: \"0.18.1.2\"\n    validations:\n      required: true\n\n  - type: input\n    id: android-version\n    attributes:\n      label: Android version\n      description: You can find this somewhere in your Android settings.\n      placeholder: |\n        Example: \"Android 11\"\n    validations:\n      required: true\n\n  - type: input\n    id: device\n    attributes:\n      label: Device\n      description: List your device and model.\n      placeholder: |\n        Example: \"Google Pixel 5\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: other-details\n    attributes:\n      label: Other details\n      placeholder: |\n        Additional details and attachments.\n\n  - type: checkboxes\n    id: acknowledgements\n    attributes:\n      label: Acknowledgements\n      description: Read this carefully, we will close and ignore your issue if you skimmed through this.\n      options:\n        - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue.\n          required: true\n        - label: I have written a short but informative title.\n          required: true\n        - label: If this is an issue with an extension, I should be opening an issue in the extension's repository.\n          required: true\n        - label: I have gone through the [FAQ](https://aniyomi.org/docs/faq/general) and [troubleshooting guide](https://aniyomi.org/docs/guides/troubleshooting/).\n          required: true\n        - label: I have updated the app to version **[0.18.1.2](https://github.com/aniyomiorg/aniyomi/releases/latest)**.\n          required: true\n        - label: I have filled out all of the requested information in this form, including specific version numbers.\n          required: true\n        - label: I understand that **Aniyomi does not have or fix any extensions**, and I **will not receive help** for any issues related to sources or extensions.\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/request_feature.yml",
    "content": "name: ⭐ Feature request\ndescription: Suggest a feature to improve Aniyomi\nlabels: [Feature request]\nbody:\n  - type: textarea\n    id: feature-description\n    attributes:\n      label: Describe your suggested feature\n      description: How can Aniyomi be improved?\n      placeholder: |\n        Example:\n          \"It should work like this...\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: other-details\n    attributes:\n      label: Other details\n      placeholder: |\n        Additional details and attachments.\n\n  - type: checkboxes\n    id: acknowledgements\n    attributes:\n      label: Acknowledgements\n      description: Read this carefully, we will close and ignore your issue if you skimmed through this.\n      options:\n        - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue.\n          required: true\n        - label: I have written a short but informative title.\n          required: true\n        - label: If this is a request regarding an extension, I should be opening an issue in the extension's repository.\n          required: true\n        - label: I have updated the app to version **[0.18.1.2](https://github.com/aniyomiorg/aniyomi/releases/latest)**.\n          required: true\n        - label: I will fill out all of the requested information in this form.\n          required: true\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "<!--\n  Please include a summary of the change and which issue is fixed.\n  Also make sure you've tested your code and also done a self-review of it.\n  Don't forget to check all base themes and tablet mode for relevant changes.\n  \n  If your changes are visual, please provide images below:\n\n### Images\n| Image 1 | Image 2 |\n| ------- | ------- |\n| ![](https://github.githubassets.com/images/modules/logos_page/Octocat.png) | ![](https://github.githubassets.com/images/modules/logos_page/Octocat.png) |\n-->\n"
  },
  {
    "path": ".github/renovate.json5",
    "content": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\"config:recommended\"],\n  \"labels\": [\"Dependencies\"],\n  \"includePaths\": [\"gradle/aniyomi.versions.toml\"],\n  \"semanticCommits\": \"disabled\",\n}\n"
  },
  {
    "path": ".github/workflows/build_pull_request.yml",
    "content": "name: PR build check\non:\n  pull_request:\n    paths:\n      - '**'\n      - '!**.md'\n      - '!i18n/src/commonMain/moko-resources/**/strings-aniyomi.xml'\n      - '!i18n/src/commonMain/moko-resources/**/strings.xml'\n      - '!i18n/src/commonMain/moko-resources/**/plurals-aniyomi.xml'\n      - '!i18n/src/commonMain/moko-resources/**/plurals.xml'\n      - 'i18n/src/commonMain/moko-resources/base/strings-aniyomi.xml'\n      - 'i18n/src/commonMain/moko-resources/base/strings.xml'\n      - 'i18n/src/commonMain/moko-resources/base/plurals-aniyomi.xml'\n      - 'i18n/src/commonMain/moko-resources/base/plurals.xml'\n\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\npermissions:\n  contents: read\n\njobs:\n  build:\n    name: Build app\n    runs-on: 'ubuntu-24.04'\n\n    steps:\n      - name: Clone repo\n        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2\n\n      - name: Dependency Review\n        uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0\n\n      - name: Set up JDK\n        uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0\n        with:\n          java-version: 17\n          distribution: temurin\n\n      - name: Set up gradle\n        uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0\n\n      - name: Check code format\n        run: ./gradlew spotlessCheck\n\n      - name: Build app\n        run: ./gradlew assembleRelease\n\n      - name: Run unit tests\n        run: ./gradlew testReleaseUnitTest\n\n      - name: Upload APK\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n        with:\n          name: arm64-v8a-${{ github.sha }}\n          path: app/build/outputs/apk/release/app-arm64-v8a-release-unsigned.apk\n\n      - name: Upload mapping\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n        with:\n          name: mapping-${{ github.sha }}\n          path: app/build/outputs/mapping/release\n"
  },
  {
    "path": ".github/workflows/build_push.yml",
    "content": "name: CI\n\npermissions:\n  contents: write\n\non:\n  push:\n    branches:\n      - '*'\n    tags:\n      - v*\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  build:\n    name: Build app\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Clone repo\n        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2\n\n      - name: Set up JDK\n        uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0\n        with:\n          java-version: 17\n          distribution: temurin\n\n      - name: Set up gradle\n        uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0\n\n      - name: Check code format\n        run: ./gradlew spotlessCheck\n\n      - name: Build app\n        run: ./gradlew assembleRelease -Penable-updater\n\n      - name: Run unit tests\n        run: ./gradlew testReleaseUnitTest\n\n      - name: Upload APK\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n        with:\n          name: arm64-v8a-${{ github.sha }}\n          path: app/build/outputs/apk/release/app-arm64-v8a-release-unsigned.apk\n\n      - name: Upload mapping\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n        with:\n          name: mapping-${{ github.sha }}\n          path: app/build/outputs/mapping/release\n\n      # Sign APK and create release for tags\n\n      - name: Get tag name\n\n        if: startsWith(github.ref, 'refs/tags/') && github.repository == 'aniyomiorg/aniyomi'\n        run: |\n          set -x\n          echo \"VERSION_TAG=${GITHUB_REF/refs\\/tags\\//}\" >> $GITHUB_ENV\n\n      - name: Sign APK\n        if: startsWith(github.ref, 'refs/tags/') && github.repository == 'aniyomiorg/aniyomi'\n        uses: r0adkll/sign-android-release@f30bdd30588842ac76044ecdbd4b6d0e3e813478\n        with:\n          releaseDirectory: app/build/outputs/apk/release\n          signingKeyBase64: ${{ secrets.SIGNING_KEY }}\n          alias: ${{ secrets.ALIAS }}\n          keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}\n          keyPassword: ${{ secrets.KEY_PASSWORD }}\n        env:\n          BUILD_TOOLS_VERSION: '35.0.1'\n\n      - name: Clean up build artifacts\n        if: startsWith(github.ref, 'refs/tags/') && github.repository == 'aniyomiorg/aniyomi'\n        run: |\n          set -e\n\n          mv app/build/outputs/apk/release/app-universal-release-unsigned-signed.apk aniyomi-${{ env.VERSION_TAG }}.apk\n          sha=`sha256sum aniyomi-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`\n          echo \"APK_UNIVERSAL_SHA=$sha\" >> $GITHUB_ENV\n\n          mv app/build/outputs/apk/release/app-arm64-v8a-release-unsigned-signed.apk aniyomi-arm64-v8a-${{ env.VERSION_TAG }}.apk\n          sha=`sha256sum aniyomi-arm64-v8a-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`\n          echo \"APK_ARM64_V8A_SHA=$sha\" >> $GITHUB_ENV\n\n          mv app/build/outputs/apk/release/app-armeabi-v7a-release-unsigned-signed.apk aniyomi-armeabi-v7a-${{ env.VERSION_TAG }}.apk\n          sha=`sha256sum aniyomi-armeabi-v7a-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`\n          echo \"APK_ARMEABI_V7A_SHA=$sha\" >> $GITHUB_ENV\n\n          mv app/build/outputs/apk/release/app-x86-release-unsigned-signed.apk aniyomi-x86-${{ env.VERSION_TAG }}.apk\n          sha=`sha256sum aniyomi-x86-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`\n          echo \"APK_X86_SHA=$sha\" >> $GITHUB_ENV\n\n          mv app/build/outputs/apk/release/app-x86_64-release-unsigned-signed.apk aniyomi-x86_64-${{ env.VERSION_TAG }}.apk\n          sha=`sha256sum aniyomi-x86_64-${{ env.VERSION_TAG }}.apk | awk '{ print $1 }'`\n          echo \"APK_X86_64_SHA=$sha\" >> $GITHUB_ENV\n\n      - name: Create Release\n        if: startsWith(github.ref, 'refs/tags/') && github.repository == 'aniyomiorg/aniyomi'\n        uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1\n        with:\n          tag_name: ${{ env.VERSION_TAG }}\n          name: Aniyomi ${{ env.VERSION_TAG }}\n          body: |\n            ---\n\n            ### Checksums\n\n            | Variant | SHA-256 |\n            | ------- | ------- |\n            | Universal | ${{ env.APK_UNIVERSAL_SHA }}\n            | arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }}\n            | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }}\n            | x86 | ${{ env.APK_X86_SHA }}\n            | x86_64 | ${{ env.APK_X86_64_SHA }} |\n          files: |\n            aniyomi-${{ env.VERSION_TAG }}.apk\n            aniyomi-arm64-v8a-${{ env.VERSION_TAG }}.apk\n            aniyomi-armeabi-v7a-${{ env.VERSION_TAG }}.apk\n            aniyomi-x86-${{ env.VERSION_TAG }}.apk\n            aniyomi-x86_64-${{ env.VERSION_TAG }}.apk\n          draft: true\n          prerelease: false\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Build files\n.gradle\n.kotlin\nbuild\n\n# IDE files\n*.iml\n.idea/*\n!.idea/icon.png\n/captures\n\n# Configuration files\nlocal.properties\n\n# macOS specific files\n.DS_Store\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is a modified version of [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n- `Added` - for new features.\n- `Changed ` - for changes in existing functionality.\n- `Improved` - for enhancement or optimization in existing functionality.\n- `Removed` - for now removed features.\n- `Fixed` - for any bug fixes.\n- `Other` - for technical stuff.\n\n## Unreleased\n\n### Added\n\n- Added a description for the horizontal seek gesture setting ([@kenkoro](https://github.com/kenkoro)) ([#2224](https://github.com/aniyomiorg/aniyomi/pull/2224))\n\n### Fixed\n\n- Swapped keyEvent listeners for left and right keyboard arrow keys as they were swapped in the code causing the opposite of the desired behavior([@alphastark](https://github.com/alphastark)) ([#2219](https://github.com/aniyomiorg/aniyomi/pull/2219))\n- Fix some malformed translated strings that made the player quit when Aniskip was enabled ([@686udjie](https://github.com/686udjie)) ([#2217](https://github.com/aniyomiorg/aniyomi/pull/2217))\n\n## [v0.18.1.2] - 2025-10-28\n### Fixed\n\n- Fix Hosters feature detection (again) ([@hollowshiroyuki](https://github.com/hollowshiroyuki)) ([#2216](https://github.com/aniyomiorg/aniyomi/pull/2216))\n\n## [v0.18.1.1] - 2025-10-26\n### Fixed\n\n- Fix source Seasons/Hosters feature detection ([@hollowshiroyuki](https://github.com/hollowshiroyuki)) ([#2195](https://github.com/aniyomiorg/aniyomi/pull/2195))\n- Fix shared download cache messing up downloaded episodes detection ([@choppeh](https://github.com/choppeh)) ([#2184](https://github.com/aniyomiorg/aniyomi/pull/2184))\n- Fix Shikimori anime tracking ([@danya140](https://github.com/danya140)) ([#2205](https://github.com/aniyomiorg/aniyomi/pull/2205))\n\n### Improved\n\n- Make volume gesture the same sensitivity as brightness ([@jmir1](https://github.com/jmir1))\n\n## [v0.18.1.0] - 2025-10-02\n### Fixed\n\n- Fix list view resetting scroll upon exiting child ([@quickdesh](https://github.com/quickdesh)) ([#1982](https://github.com/aniyomiorg/aniyomi/pull/1982))\n- Fix episode number parsing ([@Secozzi](https://github.com/Secozzi)) ([#2096](https://github.com/aniyomiorg/aniyomi/pull/2096))\n- Fix tracking menu not opening on add to library ([@Secozzi](https://github.com/Secozzi)) ([#2098](https://github.com/aniyomiorg/aniyomi/pull/2098))\n- Fix stop/continue anime download button ([@Secozzi](https://github.com/Secozzi)) ([#2099](https://github.com/aniyomiorg/aniyomi/pull/2099))\n- Fix creating/restoring backups between mihon and aniyomi ([@Secozzi](https://github.com/Secozzi)) ([#2117](https://github.com/aniyomiorg/aniyomi/pull/2117))\n\n### Added\n\n- Add support for new parameters from ext lib 16 ([@quickdesh](https://github.com/quickdesh)) ([#1982](https://github.com/aniyomiorg/aniyomi/pull/1982))\n- Add player settings to the main settings screen ([@jmir1](https://github.com/jmir1)) ([#2081](https://github.com/aniyomiorg/aniyomi/pull/2081))\n- Add seasons support ([@Secozzi](https://github.com/Secozzi)) ([#2095](https://github.com/aniyomiorg/aniyomi/pull/2095))\n\n## [v0.18.0.1] - 2025-07-06\n### Fixed\n\n- Fix crash on migration ([@Secozzi](https://github.com/Secozzi)) ([#2079](https://github.com/aniyomiorg/aniyomi/pull/2079))\n\n## [v0.18.0.0] - 2025-07-05\n### Added\n\n- Set mpv's media-title property ([@Secozzi](https://github.com/Secozzi)) ([#1672](https://github.com/aniyomiorg/aniyomi/pull/1672))\n- Add mpvKt to external players ([@Secozzi](https://github.com/Secozzi)) ([#1674](https://github.com/aniyomiorg/aniyomi/pull/1674))\n- Add video filters ([@abdallahmehiz](https://github.com/abdallahmehiz)) ([#1698](https://github.com/aniyomiorg/aniyomi/pull/1698))\n- Show hours and minutes in relative time strings ([@jmir1](https://github.com/jmir1)) ([`1f3be7b`](https://github.com/aniyomiorg/aniyomi/commit/1f3be7b523136039b3b60213f2cee7959a9367d7))\n  - Fix some issues with relative date calculations ([@jmir1](https://github.com/jmir1)) ([`03e1ecd`](https://github.com/aniyomiorg/aniyomi/commit/03e1ecd75edd2ea15dc8732ffeab32c6af26b202))\n- Add better auto sub select ([@Secozzi](https://github.com/Secozzi)) ([#1706](https://github.com/aniyomiorg/aniyomi/pull/1706))\n- Copy the file location when using ext downloader ([@quickdesh](https://github.com/quickdesh)) ([#1758](https://github.com/aniyomiorg/aniyomi/pull/1758))\n- Replace player with mpvKt ([@Secozzi](https://github.com/Secozzi)) ([#1834](https://github.com/aniyomiorg/aniyomi/pull/1834), [#1855](https://github.com/aniyomiorg/aniyomi/pull/1855), [#1859](https://github.com/aniyomiorg/aniyomi/pull/1859), [#1860](https://github.com/aniyomiorg/aniyomi/pull/1860))\n  - Move player preferences to separate section ([@Secozzi](https://github.com/Secozzi)) ([#1819](https://github.com/aniyomiorg/aniyomi/pull/1819))\n- Implement video hosters ([@Secozzi](https://github.com/Secozzi)) ([#1892](https://github.com/aniyomiorg/aniyomi/pull/1892))\n- Add size slider for the \"List Display\" Mode ([@MavikBow](https://github.com/MavikBow)) ([#1906](https://github.com/aniyomiorg/aniyomi/pull/1906))\n  - Make the default list a set size and make browse list scale ([@MavikBow](https://github.com/MavikBow)) ([#1914](https://github.com/aniyomiorg/aniyomi/pull/1914))\n- Allow negative brightness values (dimming) ([@jmir1](https://github.com/jmir1)) ([#1915](https://github.com/aniyomiorg/aniyomi/pull/1915))\n- Add new lua functions for custom buttons ([@Secozzi](https://github.com/Secozzi)) ([#1980](https://github.com/aniyomiorg/aniyomi/pull/1980))\n- Use timestamps provided by extensions ([@Secozzi](https://github.com/Secozzi)) ([#1983](https://github.com/aniyomiorg/aniyomi/pull/1983))\n- Add titles to player sheets + consistency with More sheet ([@quickdesh](https://github.com/quickdesh)) ([#2015](https://github.com/aniyomiorg/aniyomi/pull/2015))\n- Add script & script-opts editor to player settings ([@Secozzi](https://github.com/Secozzi)) ([#2019](https://github.com/aniyomiorg/aniyomi/pull/2019))\n\n### Improved\n\n- Show \"Now\" instead of \"0 minutes ago\" ([@Secozzi](https://github.com/Secozzi)) ([#1715](https://github.com/aniyomiorg/aniyomi/pull/1715))\n- Add headers when using 1dm as external player ([@Secozzi](https://github.com/Secozzi)) ([#2032](https://github.com/aniyomiorg/aniyomi/pull/2032))\n\n### Fixed\n\n- Fix enhanced tracking for jellyfin ([@Secozzi](https://github.com/Secozzi)) ([#1656](https://github.com/aniyomiorg/aniyomi/pull/1656), [#1658](https://github.com/aniyomiorg/aniyomi/pull/1658))\n- Use different status strings for anime trackers ([@jmir1](https://github.com/jmir1)) ([`74b32a3`](https://github.com/aniyomiorg/aniyomi/commit/74b32a3a0b323ed2f6f7929e131dcb4901e7bf9b))\n- Fix Shikimori tracking for anime ([@jmir1](https://github.com/jmir1)) ([`58817c7`](https://github.com/aniyomiorg/aniyomi/commit/58817c724e2808072ff273329cee261d12084927))\n- Group updates by date and not time ([@jmir1](https://github.com/jmir1)) ([`c83ebf3`](https://github.com/aniyomiorg/aniyomi/commit/c83ebf322f48d41ca1ad0105262160ecb7cde991))\n- Fix airing time not showing ([@Secozzi](https://github.com/Secozzi)) ([#1720](https://github.com/aniyomiorg/aniyomi/pull/1720))\n- Don't invalidate anime downloads on startup ([@Secozzi](https://github.com/Secozzi)) ([#1753](https://github.com/aniyomiorg/aniyomi/pull/1753))\n- Fix hidden categories getting reset after delete/reorder ([@cuong-tran](https://github.com/cuong-tran)) ([#1780](https://github.com/aniyomiorg/aniyomi/pull/1780))\n- Fix episode progress not being saved and duplicate tracks ([@perokhe](https://github.com/perokhe)) ([#1784](https://github.com/aniyomiorg/aniyomi/pull/1784), [#1785](https://github.com/aniyomiorg/aniyomi/pull/1785))\n- Fix subtitle select not matching two letter language codes ([@Secozzi](https://github.com/Secozzi)) ([#1805](https://github.com/aniyomiorg/aniyomi/pull/1805))\n- Fix potential intent extra npe ([@quickdesh](https://github.com/quickdesh)) ([#1816](https://github.com/aniyomiorg/aniyomi/pull/1816))\n- Fix history date header duplication ([@quickdesh](https://github.com/quickdesh)) ([#1817](https://github.com/aniyomiorg/aniyomi/pull/1817))\n- Fix migrations not getting context correctly ([@Secozzi](https://github.com/Secozzi)) ([#1820](https://github.com/aniyomiorg/aniyomi/pull/1820))\n- Fix various issues due to replacing the player with mpvKt\n  - Fix gesture seeking not seeking to start and end ([@perokhe](https://github.com/perokhe)) ([#1865](https://github.com/aniyomiorg/aniyomi/pull/1865))\n  - Fix crash when opening player settings in tablet ui ([@Secozzi](https://github.com/Secozzi)) ([#1868](https://github.com/aniyomiorg/aniyomi/pull/1868))\n  - Fix episode list in player not respecting filters & crash when exiting while stuff is loading ([@Secozzi](https://github.com/Secozzi)) ([#1869](https://github.com/aniyomiorg/aniyomi/pull/1869))\n  - Fix episode being marked as seen at start ([@perokhe](https://github.com/perokhe)) ([#1871](https://github.com/aniyomiorg/aniyomi/pull/1871))\n  - Fix player not being paused when loading tracks after changing quality ([@Secozzi](https://github.com/Secozzi)) ([#1878](https://github.com/aniyomiorg/aniyomi/pull/1878))\n  - Fix lag when toggling player ui ([@Secozzi](https://github.com/Secozzi)) ([#1887](https://github.com/aniyomiorg/aniyomi/pull/1887))\n  - Fix audio selection not working on external audio tracks ([@Secozzi](https://github.com/Secozzi)) ([#1901](https://github.com/aniyomiorg/aniyomi/pull/1901))\n  - Reset \"hide player controls time\" when pressing custom button ([@Secozzi](https://github.com/Secozzi)) ([#1902](https://github.com/aniyomiorg/aniyomi/pull/1902))\n  - Don't unpause on share and save ([@Secozzi](https://github.com/Secozzi)) ([#1905](https://github.com/aniyomiorg/aniyomi/pull/1905))\n  - Fix player pausing with gesture seek ([@perokhe](https://github.com/perokhe)) ([#1916](https://github.com/aniyomiorg/aniyomi/pull/1916))\n  - Fix potential npe issues with mpv-lib ([@Secozzi](https://github.com/Secozzi)) ([#1921](https://github.com/aniyomiorg/aniyomi/pull/1921))\n  - Dismiss chapter sheet on chapter select ([@Secozzi](https://github.com/Secozzi)) ([#1976](https://github.com/aniyomiorg/aniyomi/pull/1976))\n  - Fix some issues caused by [`10e28cc`](https://github.com/aniyomiorg/aniyomi/commit/10e28cc4092758cf38d27cc14aadf539698738f2) ([@Secozzi](https://github.com/Secozzi)) ([#1981](https://github.com/aniyomiorg/aniyomi/pull/1981))\n  - Fix npe issue caused in player controls ([@Secozzi](https://github.com/Secozzi)) ([#1986](https://github.com/aniyomiorg/aniyomi/pull/1986))\n- Replace some manga strings with respective anime strings ([@perokhe](https://github.com/perokhe)) ([#1864](https://github.com/aniyomiorg/aniyomi/pull/1864))\n- Open correct tab from extension update notifications ([@jmir1](https://github.com/jmir1)) ([`161471d`](https://github.com/aniyomiorg/aniyomi/commit/161471d94a2350c0c983eeeccd3b7ac0dc66d429))\n- Fix sub-auto not loading all external subtitle files ([@perokhe](https://github.com/perokhe)) ([#1866](https://github.com/aniyomiorg/aniyomi/pull/1866))\n- Fix `ALSearchItem.format` nullability ([@Secozzi](https://github.com/Secozzi)) ([#1910](https://github.com/aniyomiorg/aniyomi/pull/1910))\n- Don't format mpv preferences ([@Secozzi](https://github.com/Secozzi)) ([#1939](https://github.com/aniyomiorg/aniyomi/pull/1939))\n- Prevent crash on app death when watching in external player ([@Secozzi](https://github.com/Secozzi)) ([#1945](https://github.com/aniyomiorg/aniyomi/pull/1945))\n- Don't run unnecessary stuff when exiting the player ([@Secozzi](https://github.com/Secozzi)) ([#1961](https://github.com/aniyomiorg/aniyomi/pull/1961))\n- Fix some downloader issues ([@Secozzi](https://github.com/Secozzi)) ([#1964](https://github.com/aniyomiorg/aniyomi/pull/1964))\n  - Fix downloader not working for certain types of tracks & duration sometimes not being logged ([@Secozzi](https://github.com/Secozzi)) ([#2001](https://github.com/aniyomiorg/aniyomi/pull/2001))\n- Fix some issues with intro skip length ([@jmir1](https://github.com/jmir1)) ([`72cac57`](https://github.com/aniyomiorg/aniyomi/commit/72cac57d8e66366cbc0f3106eb351c82250c460b), [`25dd3ea`](https://github.com/aniyomiorg/aniyomi/commit/25dd3ea69fb217de7b0485c29e4a9b970737fd45))\n- Force clipboard to use UI thread when copying path for external players ([@quickdesh](https://github.com/quickdesh)) ([#1994](https://github.com/aniyomiorg/aniyomi/pull/1994))\n- Use application directory for storing files used by mpv ([@Secozzi](https://github.com/Secozzi)) ([#1995](https://github.com/aniyomiorg/aniyomi/pull/1995))\n- Update backup warning string (follow Mihon) ([@cuong-tran](https://github.com/cuong-tran)) ([#2012](https://github.com/aniyomiorg/aniyomi/pull/2012))\n- Fix issues with episode deletion & more ([@quickdesh](https://github.com/quickdesh)) ([#2017](https://github.com/aniyomiorg/aniyomi/pull/2017))\n- Fix vertical slider width issues and shift boost volume value to slider ([@quickdesh](https://github.com/quickdesh)) ([#2018](https://github.com/aniyomiorg/aniyomi/pull/2018))\n- Fix MyAnimeList login ([@choppeh](https://github.com/choppeh)) ([#2035](https://github.com/aniyomiorg/aniyomi/pull/2035))\n- Call sort methods for videos and hosters ([@cuong-tran](https://github.com/cuong-tran)) ([#2058](https://github.com/aniyomiorg/aniyomi/pull/2058))\n- Invalidate preferred languages in settings ([@Secozzi](https://github.com/Secozzi)) ([#2075](https://github.com/aniyomiorg/aniyomi/pull/2075))\n- Fix crash when using sort by airing time ([@quickdesh](https://github.com/quickdesh)) ([#2076](https://github.com/aniyomiorg/aniyomi/pull/2076))\n\n### Other\n\n- Merge from mihon until 0.16.5 ([@Secozzi](https://github.com/Secozzi)) ([#1663](https://github.com/aniyomiorg/aniyomi/pull/1663))\n  - Merge until latest mihon commits ([@Secozzi](https://github.com/Secozzi)) ([#1693](https://github.com/aniyomiorg/aniyomi/pull/1693))\n  - Merge until latest mihon commits (v0.17.0) ([@Secozzi](https://github.com/Secozzi)) ([#1804](https://github.com/aniyomiorg/aniyomi/pull/1804))\n  - Merge until latest mihon commits (v0.18.0) ([@Secozzi](https://github.com/Secozzi)) ([#1863](https://github.com/aniyomiorg/aniyomi/pull/1863))\n- Remove ACRA crash report analytics ([@jmir1](https://github.com/jmir1)) ([`d3c6a15`](https://github.com/aniyomiorg/aniyomi/commit/d3c6a159d82ca239c10e8f5822c3b2046c5545f2), [`5ae35c8`](https://github.com/aniyomiorg/aniyomi/commit/5ae35c891b90ae927200185641240280effaf667))\n\n## [v0.16.4.3] - 2024-07-01\n### Fixed\n\n- Fix extensions disappearing due to errors with the ClassLoader ([@jmir1](https://github.com/jmir1)) ([`959f84a`](https://github.com/aniyomiorg/aniyomi/commit/959f84ab41859f90c458c076d83d363ae086e47f))\n\n## [v0.16.4.2] - 2024-07-01\n### Fixed\n\n- Hotfix to eliminate all proguard issues causing errors and crashes ([@jmir1](https://github.com/jmir1)) ([`a8cd723`](https://github.com/aniyomiorg/aniyomi/commit/a8cd7233dfdf26c98ff86b1871a7ac5774379b5e), [`a7644c2`](https://github.com/aniyomiorg/aniyomi/commit/a7644c268153fc0b9f10c27202591f960c6f6384), [`5045fa1`](https://github.com/aniyomiorg/aniyomi/commit/5045fa18ce5a1faa2130f1a33609e43d8453f078))\n\n## [v0.16.4.1] - 2024-07-01\n### Fixed\n\n- Hotfix release to address errors with extensions ([@jmir1](https://github.com/jmir1)) ([`98d2528`](https://github.com/aniyomiorg/aniyomi/commit/98d252866e17beba7d9a4d094797e23c05ead6c1))\n\n## [v0.16.4.0] - 2024-07-01\n### Fixed\n\n- Fix pip not broadcasting intent in A14+ ([@quickdesh](https://github.com/quickdesh)) ([#1603](https://github.com/aniyomiorg/aniyomi/pull/1603))\n- Fix advanced player settings crash in android ≤ 10 ([@perokhe](https://github.com/perokhe)) ([#1627](https://github.com/aniyomiorg/aniyomi/pull/1627))\n\n### Improved\n\n- Hide the skip intro button if the skipped amount == 0 ([@abdallahmehiz](https://github.com/abdallahmehiz)) ([#1598](https://github.com/aniyomiorg/aniyomi/pull/1598))\n\n### Other\n\n- Merge from mihon until mihon 0.16.2 ([@Secozzi](https://github.com/Secozzi)) ([#1578](https://github.com/aniyomiorg/aniyomi/pull/1578))\n  - Merge from mihon until 0.16.4 ([@Secozzi](https://github.com/Secozzi)) ([#1601](https://github.com/aniyomiorg/aniyomi/pull/1601))\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, caste, color, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the\n  overall community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or\n  advances of any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email\n  address, without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity moderators are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity moderators have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community moderators responsible for enforcement at\nthe [Tachiyomi Discord server](https://discord.gg/tachiyomi).\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community moderators are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity moderators will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community moderators, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series\nof actions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior,  harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within\nthe community.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/),\nversion 2.1, available at\n[v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).\n\nCommunity Impact Guidelines were inspired by\n[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).\n\nFor answers to common questions about this code of conduct, see the FAQ at\n[FAQ](https://www.contributor-covenant.org/faq). Translations are available\nat [translations](https://www.contributor-covenant.org/translations).\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "Looking to report an issue/bug or make a feature request? Please refer to the [README file](https://github.com/aniyomiorg/aniyomi#issues-feature-requests-and-contributing).\n\n---\n\nThanks for your interest in contributing to Aniyomi!\n\n\n# Code contributions\n\nPull requests are welcome!\n\nIf you're interested in taking on [an open issue](https://github.com/aniyomiorg/aniyomi/issues), please comment on it so others are aware.\nYou do not need to ask for permission nor an assignment.\n\n## Prerequisites\n\nBefore you start, please note that the ability to use following technologies is **required** and that existing contributors will not actively teach them to you.\n\n- Basic [Android development](https://developer.android.com/)\n- [Kotlin](https://kotlinlang.org/)\n\n### Tools\n\n- [Android Studio](https://developer.android.com/studio)\n- Emulator or phone with developer options enabled to test changes.\n\n## Getting help\n\n- Join [the Discord server](https://discord.gg/F32UjdJZrR) for online help and to ask questions while developing.\n\n# Translations\n\nTranslations are done externally via Weblate. See [our website](https://aniyomi.org/docs/contribute#translation) for more details.\n\n\n# Forks\n\nForks are allowed so long as they abide by [the project's LICENSE](https://github.com/aniyomiorg/aniyomi/blob/main/LICENSE).\n\nWhen creating a fork, remember to:\n\n- To avoid confusion with the main app:\n    - Change the app name\n    - Change the app icon\n    - Change or disable the [app update checker](https://github.com/aniyomiorg/aniyomi/blob/main/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt)\n- To avoid installation conflicts:\n    - Change the `applicationId` in [`build.gradle.kts`](https://github.com/aniyomiorg/aniyomi/blob/main/app/build.gradle.kts)\n- To avoid having your data polluting the main app's analytics and crash report services:\n    - If you want to use Firebase analytics, replace [`google-services.json`](https://github.com/aniyomiorg/aniyomi/blob/main/app/src/standard/google-services.json) with your own\n    - If you want to use ACRA crash reporting, replace the `ACRA_URI` endpoint in [`build.gradle.kts`](https://github.com/aniyomiorg/aniyomi/blob/main/app/build.gradle.kts) with your own\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n\n<a href=\"https://aniyomi.org\">\n    <img src=\"./.github/assets/logo.png\" alt=\"Aniyomi logo\" title=\"Aniyomi logo\" width=\"80\"/>\n</a>\n\n# Aniyomi [App](#)\n\n### Full-featured player and reader, based on ~~Tachiyomi~~ Mihon.\nDiscover and watch anime, cartoons, series, and more – easier than ever on your Android device.\n\n[![Discord server](https://img.shields.io/discord/841701076242530374.svg?label=&labelColor=6A7EC2&color=7389D8&logo=discord&logoColor=FFFFFF)](https://discord.gg/F32UjdJZrR)\n[![GitHub downloads](https://img.shields.io/github/downloads/aniyomiorg/aniyomi/total?label=downloads&labelColor=27303D&color=0D1117&logo=github&logoColor=FFFFFF&style=flat)](https://github.com/aniyomiorg/aniyomi/releases)\n\n[![CI](https://img.shields.io/github/actions/workflow/status/aniyomiorg/aniyomi/build_push.yml?labelColor=27303D)](https://github.com/aniyomiorg/aniyomi/actions/workflows/build_push.yml)\n[![License: Apache-2.0](https://img.shields.io/github/license/aniyomiorg/aniyomi?labelColor=27303D&color=818cf8)](/LICENSE)\n[![Translation status](https://img.shields.io/weblate/progress/aniyomi?labelColor=27303D&color=946300)](https://hosted.weblate.org/engage/aniyomi/)\n\n## Download\n\n[![Aniyomi Stable](https://img.shields.io/github/release/aniyomiorg/aniyomi.svg?maxAge=3600&label=Stable&labelColor=06599d&color=043b69)](https://github.com/aniyomiorg/aniyomi/releases)\n[![Aniyomi Preview](https://img.shields.io/github/v/release/aniyomiorg/aniyomi-preview.svg?maxAge=3600&label=Beta&labelColor=2c2c47&color=1c1c39)](https://github.com/aniyomiorg/aniyomi-preview/releases)\n\n*Requires Android 8.0 or higher.*\n\n## Features\n\n<div align=\"left\">\n\n* Local reading and watching of content.\n* A configurable reader with multiple viewers, reading directions and other settings.\n* A configurable player built on mpv-android with multiple options and settings.\n* Tracker support: [MyAnimeList](https://myanimelist.net/), [AniList](https://anilist.co/), [Kitsu](https://kitsu.app/), [MangaUpdates](https://mangaupdates.com), [Shikimori](https://shikimori.one), [Simkl](https://simkl.com/), and [Bangumi](https://bgm.tv/) support.\n* Categories to organize your library.\n* Light and dark themes.\n* Schedule updating your library for new chapters/episodes.\n* Create backups locally to read/watch offline or to your desired cloud service.\n* Plus much more...\n\n</div>\n\n## Contributing\n\n[Code of conduct](./CODE_OF_CONDUCT.md) · [Contributing guide](./CONTRIBUTING.md)\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nBefore reporting a new issue, take a look at the [FAQ](https://aniyomi.org/docs/faq/general), the [changelog](https://aniyomi.org/changelogs/) and the already opened [issues](https://github.com/aniyomiorg/aniyomi/issues); if you got any questions, join our [Discord server](https://discord.gg/F32UjdJZrR).\n\n### Repositories\n\n[![aniyomiorg/aniyomi-website - GitHub](https://github-readme-stats.vercel.app/api/pin/?username=aniyomiorg&repo=aniyomi-website&bg_color=161B22&text_color=c9d1d9&title_color=818cf8&icon_color=818cf8&border_radius=8&hide_border=true&description_lines_count=2)](https://github.com/aniyomiorg/aniyomi-website/)\n[![aniyomiorg/aniyomi-mpv-lib - GitHub](https://github-readme-stats.vercel.app/api/pin/?username=aniyomiorg&repo=aniyomi-mpv-lib&bg_color=161B22&text_color=c9d1d9&title_color=818cf8&icon_color=818cf8&border_radius=8&hide_border=true&description_lines_count=2)](https://github.com/aniyomiorg/aniyomi-mpv-lib/)\n\n### Credits\n\nThank you to all the people who have contributed!\n\n<a href=\"https://github.com/aniyomiorg/aniyomi/graphs/contributors\">\n    <img src=\"https://contrib.rocks/image?repo=aniyomiorg/aniyomi\" alt=\"Aniyomi app contributors\" title=\"Aniyomi app contributors\" width=\"800\"/>\n</a>\n\n### Disclaimer\n\nThe developer(s) of this application does not have any affiliation with the content providers available, and this application hosts zero content.\n\n### License\n\n<pre>\nCopyright © 2015 Javier Tomás\nCopyright © 2024 Mihon Open Source Project\nCopyright © 2024 Aniyomi Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n</pre>\n\n</div>\n"
  },
  {
    "path": "app/.idea/.gitignore",
    "content": "# Default ignored files\n/shelf/\n/workspace.xml\n"
  },
  {
    "path": "app/.idea/.name",
    "content": "MangaDownloader.kt"
  },
  {
    "path": "app/.idea/discord.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"DiscordProjectSettings\">\n    <option name=\"show\" value=\"PROJECT_FILES\" />\n    <option name=\"description\" value=\"\" />\n  </component>\n</project>\n"
  },
  {
    "path": "app/.idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleMigrationSettings\" migrationVersion=\"1\" />\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"gradleJvm\" value=\"jbr-17\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n          </set>\n        </option>\n        <option name=\"resolveExternalAnnotations\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>\n"
  },
  {
    "path": "app/.idea/misc.xml",
    "content": "<project version=\"4\">\n  <component name=\"ExternalStorageConfigurationManager\" enabled=\"true\" />\n</project>\n"
  },
  {
    "path": "app/.idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$/..\" vcs=\"Git\" />\n  </component>\n</project>\n"
  },
  {
    "path": "app/build.gradle.kts",
    "content": "import mihon.buildlogic.Config\nimport mihon.buildlogic.getBuildTime\nimport mihon.buildlogic.getCommitCount\nimport mihon.buildlogic.getGitSha\n\nplugins {\n    id(\"mihon.android.application\")\n    id(\"mihon.android.application.compose\")\n    id(\"com.github.zellius.shortcut-helper\")\n    kotlin(\"plugin.serialization\")\n    alias(libs.plugins.aboutLibraries)\n}\n\nshortcutHelper.setFilePath(\"./shortcuts.xml\")\n\nandroid {\n    namespace = \"eu.kanade.tachiyomi\"\n\n    defaultConfig {\n        applicationId = \"xyz.jmir.tachiyomi.mi\"\n\n        versionCode = 131\n        versionName = \"0.18.1.2\"\n\n        buildConfigField(\"String\", \"COMMIT_COUNT\", \"\\\"${getCommitCount()}\\\"\")\n        buildConfigField(\"String\", \"COMMIT_SHA\", \"\\\"${getGitSha()}\\\"\")\n        buildConfigField(\"String\", \"BUILD_TIME\", \"\\\"${getBuildTime(useLastCommitTime = false)}\\\"\")\n        buildConfigField(\"boolean\", \"UPDATER_ENABLED\", \"${Config.enableUpdater}\")\n\n        // Put these fields in acra.properties\n        // val acraProperties = Properties()\n        // rootProject.file(\"acra.properties\")\n        //     .takeIf { it.exists() }\n        //     ?.let { acraProperties.load(FileInputStream(it)) }\n        // val acraUri = acraProperties.getProperty(\"ACRA_URI\", \"\")\n        // val acraLogin = acraProperties.getProperty(\"ACRA_LOGIN\", \"\")\n        // val acraPassword = acraProperties.getProperty(\"ACRA_PASSWORD\", \"\")\n        // buildConfigField(\"String\", \"ACRA_URI\", \"\\\"$acraUri\\\"\")\n        // buildConfigField(\"String\", \"ACRA_LOGIN\", \"\\\"$acraLogin\\\"\")\n        // buildConfigField(\"String\", \"ACRA_PASSWORD\", \"\\\"$acraPassword\\\"\")\n\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        val debug by getting {\n            applicationIdSuffix = \".dev\"\n            versionNameSuffix = \"-${getCommitCount()}\"\n            isPseudoLocalesEnabled = true\n        }\n        val release by getting {\n            isMinifyEnabled = Config.enableCodeShrink\n            isShrinkResources = Config.enableCodeShrink\n\n            proguardFiles(\"proguard-android-optimize.txt\", \"proguard-rules.pro\")\n\n            buildConfigField(\"String\", \"BUILD_TIME\", \"\\\"${getBuildTime(useLastCommitTime = true)}\\\"\")\n        }\n\n        val commonMatchingFallbacks = listOf(release.name)\n\n        create(\"preview\") {\n            initWith(release)\n\n            applicationIdSuffix = \".debug\"\n\n            versionNameSuffix = debug.versionNameSuffix\n            signingConfig = debug.signingConfig\n\n            matchingFallbacks.addAll(commonMatchingFallbacks)\n\n            buildConfigField(\"String\", \"BUILD_TIME\", \"\\\"${getBuildTime(useLastCommitTime = false)}\\\"\")\n        }\n        create(\"benchmark\") {\n            initWith(release)\n\n            isDebuggable = false\n            isProfileable = true\n            versionNameSuffix = \"-benchmark\"\n            applicationIdSuffix = \".benchmark\"\n\n            signingConfig = debug.signingConfig\n\n            matchingFallbacks.addAll(commonMatchingFallbacks)\n        }\n    }\n\n    sourceSets {\n        getByName(\"preview\").res.srcDirs(\"src/debug/res\")\n        getByName(\"benchmark\").res.srcDirs(\"src/debug/res\")\n    }\n\n    splits {\n        abi {\n            isEnable = true\n            isUniversalApk = true\n            reset()\n            include(\"armeabi-v7a\", \"arm64-v8a\", \"x86\", \"x86_64\")\n        }\n    }\n\n    packaging {\n        jniLibs {\n            keepDebugSymbols += listOf(\n                \"libandroidx.graphics.path\",\n                \"libarchive-jni\",\n                \"libavcodec\",\n                \"libavdevice\",\n                \"libavfilter\",\n                \"libavformat\",\n                \"libavutil\",\n                \"libconscrypt_jni\",\n                \"libc++_shared\",\n                \"libffmpegkit_abidetect\",\n                \"libffmpegkit\",\n                \"libimagedecoder\",\n                \"libmpv\",\n                \"libplayer\",\n                \"libpostproc\",\n                \"libquickjs\",\n                \"libsqlite3x\",\n                \"libswresample\",\n                \"libswscale\",\n                \"libxml2\",\n            )\n                .map { \"**/$it.so\" }\n        }\n        resources {\n            excludes += setOf(\n                \"kotlin-tooling-metadata.json\",\n                \"LICENSE.txt\",\n                \"META-INF/**/*.properties\",\n                \"META-INF/**/LICENSE.txt\",\n                \"META-INF/*.properties\",\n                \"META-INF/*.version\",\n                \"META-INF/DEPENDENCIES\",\n                \"META-INF/LICENSE\",\n                \"META-INF/NOTICE\",\n                \"META-INF/README.md\",\n            )\n        }\n    }\n\n    dependenciesInfo {\n        includeInApk = Config.includeDependencyInfo\n        includeInBundle = Config.includeDependencyInfo\n    }\n\n    buildFeatures {\n        viewBinding = true\n        buildConfig = true\n\n        // Disable some unused things\n        aidl = false\n        renderScript = false\n        shaders = false\n    }\n\n    lint {\n        abortOnError = false\n        checkReleaseBuilds = false\n    }\n}\n\nkotlin {\n    compilerOptions {\n        freeCompilerArgs.addAll(\n            \"-opt-in=androidx.compose.animation.ExperimentalAnimationApi\",\n            \"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi\",\n            \"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi\",\n            \"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi\",\n            \"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api\",\n            \"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi\",\n            \"-opt-in=coil3.annotation.ExperimentalCoilApi\",\n            \"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi\",\n            \"-opt-in=kotlinx.coroutines.FlowPreview\",\n            \"-opt-in=kotlinx.coroutines.InternalCoroutinesApi\",\n            \"-opt-in=kotlinx.serialization.ExperimentalSerializationApi\",\n        )\n    }\n}\n\ndependencies {\n    implementation(projects.i18n)\n    implementation(projects.i18nAniyomi)\n    implementation(projects.core.archive)\n    implementation(projects.core.common)\n    implementation(projects.coreMetadata)\n    implementation(projects.sourceApi)\n    implementation(projects.sourceLocal)\n    implementation(projects.data)\n    implementation(projects.domain)\n    implementation(projects.presentationCore)\n    implementation(projects.presentationWidget)\n\n    // Compose\n    implementation(compose.activity)\n    implementation(compose.foundation)\n    implementation(compose.material3.core)\n    implementation(compose.material.icons)\n    implementation(compose.animation)\n    implementation(compose.animation.graphics)\n    debugImplementation(compose.ui.tooling)\n    implementation(compose.ui.tooling.preview)\n    implementation(compose.ui.util)\n\n    implementation(androidx.interpolator)\n\n    implementation(androidx.paging.runtime)\n    implementation(androidx.paging.compose)\n\n    implementation(libs.bundles.sqlite)\n\n    implementation(kotlinx.reflect)\n    implementation(kotlinx.immutables)\n\n    implementation(platform(kotlinx.coroutines.bom))\n    implementation(kotlinx.bundles.coroutines)\n\n    // AndroidX libraries\n    implementation(androidx.annotation)\n    implementation(androidx.appcompat)\n    implementation(androidx.biometricktx)\n    implementation(androidx.constraintlayout)\n    implementation(aniyomilibs.compose.constraintlayout)\n    implementation(androidx.corektx)\n    implementation(androidx.splashscreen)\n    implementation(androidx.recyclerview)\n    implementation(androidx.viewpager)\n    implementation(androidx.profileinstaller)\n    implementation(aniyomilibs.mediasession)\n\n    implementation(androidx.bundles.lifecycle)\n\n    // Job scheduling\n    implementation(androidx.workmanager)\n\n    // RxJava\n    implementation(libs.rxjava)\n\n    // Networking\n    implementation(libs.bundles.okhttp)\n    implementation(libs.okio)\n    implementation(libs.conscrypt.android) // TLS 1.3 support for Android < 10\n\n    // Data serialization (JSON, protobuf, xml)\n    implementation(kotlinx.bundles.serialization)\n\n    // HTML parser\n    implementation(libs.jsoup)\n\n    // Disk\n    implementation(libs.disklrucache)\n    implementation(libs.unifile)\n\n    // Preferences\n    implementation(libs.preferencektx)\n\n    // Dependency injection\n    implementation(libs.injekt)\n\n    // Image loading\n    implementation(platform(libs.coil.bom))\n    implementation(libs.bundles.coil)\n    implementation(libs.subsamplingscaleimageview) {\n        exclude(module = \"image-decoder\")\n    }\n    implementation(libs.image.decoder)\n\n    // UI libraries\n    implementation(libs.material)\n    implementation(libs.flexible.adapter.core)\n    implementation(libs.photoview)\n    implementation(libs.directionalviewpager) {\n        exclude(group = \"androidx.viewpager\", module = \"viewpager\")\n    }\n    implementation(libs.insetter)\n    implementation(libs.bundles.richtext)\n    implementation(libs.aboutLibraries.compose)\n    implementation(libs.bundles.voyager)\n    implementation(libs.compose.materialmotion)\n    implementation(libs.swipe)\n    implementation(libs.compose.webview)\n    implementation(libs.compose.grid)\n    implementation(libs.reorderable)\n\n    // Logging\n    implementation(libs.logcat)\n\n    // Shizuku\n    implementation(libs.bundles.shizuku)\n\n    // Tests\n    testImplementation(libs.bundles.test)\n\n    // For detecting memory leaks; see https://square.github.io/leakcanary/\n    // debugImplementation(libs.leakcanary.android)\n\n    implementation(libs.leakcanary.plumber)\n\n    testImplementation(kotlinx.coroutines.test)\n\n    // mpv-android\n    implementation(aniyomilibs.aniyomi.mpv)\n    // FFmpeg-kit\n    implementation(aniyomilibs.ffmpeg.kit)\n    implementation(aniyomilibs.arthenica.smartexceptions)\n    // seeker seek bar\n    implementation(aniyomilibs.seeker)\n    // true type parser\n    implementation(aniyomilibs.truetypeparser)\n}\n\nandroidComponents {\n    beforeVariants { variantBuilder ->\n        // Disables standardBenchmark\n        if (variantBuilder.buildType == \"benchmark\") {\n            variantBuilder.enable = variantBuilder.productFlavors.containsAll(\n                listOf(\"default\" to \"dev\"),\n            )\n        }\n    }\n    onVariants(selector().withFlavor(\"default\" to \"standard\")) {\n        // Only excluding in standard flavor because this breaks\n        // Layout Inspector's Compose tree\n        it.packaging.resources.excludes.add(\"META-INF/*.version\")\n    }\n}\n\nbuildscript {\n    dependencies {\n        classpath(kotlinx.gradle)\n    }\n}\n"
  },
  {
    "path": "app/proguard-android-optimize.txt",
    "content": "-dontusemixedcaseclassnames\n-ignorewarnings\n-verbose\n\n-keepattributes *Annotation*\n\n-keepclasseswithmembernames,includedescriptorclasses class * {\n    native <methods>;\n}\n\n-keepclassmembers enum * {\n    public static **[] values();\n    public static ** valueOf(java.lang.String);\n}\n\n-keepclassmembers class * implements android.os.Parcelable {\n    public static final ** CREATOR;\n}\n\n-keep class androidx.annotation.Keep\n\n-keep @androidx.annotation.Keep class * {*;}\n\n-keepclasseswithmembers class * {\n    @androidx.annotation.Keep <methods>;\n}\n\n-keepclasseswithmembers class * {\n    @androidx.annotation.Keep <fields>;\n}\n\n-keepclasseswithmembers class * {\n    @androidx.annotation.Keep <init>(...);\n}"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "-dontobfuscate\n\n-keep,allowoptimization class eu.kanade.**\n-keep,allowoptimization class tachiyomi.**\n-keep,allowoptimization class mihon.**\n\n# Keep common dependencies used in extensions\n-keep,allowoptimization class androidx.preference.** { public protected *; }\n-keep,allowoptimization class android.content.** { *; }\n-keep,allowoptimization class uy.kohesive.injekt.** { public protected *; }\n-keep,allowoptimization class android.test.base.** { *; }\n-keep,allowoptimization class kotlin.** { public protected *; }\n-keep,allowoptimization class kotlinx.coroutines.** { public protected *; }\n-keep,allowoptimization class kotlinx.serialization.** { public protected *; }\n-keep,allowoptimization class okhttp3.** { public protected *; }\n-keep,allowoptimization class okio.** { public protected *; }\n-keep,allowoptimization class org.jsoup.** { public protected *; }\n-keep,allowoptimization class rx.** { public protected *; }\n-keep,allowoptimization class app.cash.quickjs.** { public protected *; }\n-keep,allowoptimization class uy.kohesive.injekt.** { public protected *; }\n-keep,allowoptimization class is.xyz.mpv.** { public protected *; }\n-keep,allowoptimization class com.arthenica.** { public protected *; }\n\n# From extensions-lib\n-keep,allowoptimization class eu.kanade.tachiyomi.network.interceptor.RateLimitInterceptorKt { public protected *; }\n-keep,allowoptimization class eu.kanade.tachiyomi.network.interceptor.SpecificHostRateLimitInterceptorKt { public protected *; }\n-keep,allowoptimization class eu.kanade.tachiyomi.network.NetworkHelper { public protected *; }\n-keep,allowoptimization class eu.kanade.tachiyomi.network.OkHttpExtensionsKt { public protected *; }\n-keep,allowoptimization class eu.kanade.tachiyomi.network.RequestsKt { public protected *; }\n-keep,allowoptimization class eu.kanade.tachiyomi.AppInfo { public protected *; }\n\n##---------------Begin: proguard configuration for RxJava 1.x  ----------\n-dontwarn sun.misc.**\n\n-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {\n   long producerIndex;\n   long consumerIndex;\n}\n\n-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {\n    rx.internal.util.atomic.LinkedQueueNode producerNode;\n}\n\n-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {\n    rx.internal.util.atomic.LinkedQueueNode consumerNode;\n}\n\n-dontnote rx.internal.util.PlatformDependent\n##---------------End: proguard configuration for RxJava 1.x  ----------\n\n##---------------Begin: proguard configuration for okhttp  ----------\n-keepclasseswithmembers class okhttp3.MultipartBody$Builder { *; }\n##---------------End: proguard configuration for okhttp  ----------\n\n##---------------Begin: proguard configuration for kotlinx.serialization  ----------\n-keepattributes *Annotation*, InnerClasses\n-dontnote kotlinx.serialization.** # core serialization annotations\n\n# kotlinx-serialization-json specific. Add this if you have java.lang.NoClassDefFoundError kotlinx.serialization.json.JsonObjectSerializer\n-keepclassmembers class kotlinx.serialization.json.** {\n    *** Companion;\n}\n-keepclasseswithmembers class kotlinx.serialization.json.** {\n    kotlinx.serialization.KSerializer serializer(...);\n}\n\n-keep,includedescriptorclasses class eu.kanade.**$$serializer { *; }\n-keepclassmembers class eu.kanade.** {\n    *** Companion;\n}\n-keepclasseswithmembers class eu.kanade.** {\n    kotlinx.serialization.KSerializer serializer(...);\n}\n\n-keep class kotlinx.serialization.**\n-keepclassmembers class kotlinx.serialization.** {\n    <methods>;\n}\n##---------------End: proguard configuration for kotlinx.serialization  ----------\n\n# XmlUtil\n-keep public enum nl.adaptivity.xmlutil.EventType { *; }"
  },
  {
    "path": "app/shortcuts.xml",
    "content": "<shortcuts xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <shortcut\n        android:enabled=\"true\"\n        android:icon=\"@drawable/sc_collections_bookmark_48dp\"\n        android:shortcutDisabledMessage=\"@string/app_not_available\"\n        android:shortcutId=\"show_library\"\n        android:shortcutLongLabel=\"@string/label_manga_library\"\n        android:shortcutShortLabel=\"@string/label_manga_library\">\n        <intent\n            android:action=\"eu.kanade.tachiyomi.SHOW_LIBRARY\"\n            android:targetClass=\"eu.kanade.tachiyomi.ui.main.MainActivity\" />\n    </shortcut>\n    <shortcut\n        android:enabled=\"true\"\n        android:icon=\"@drawable/sc_collections_baseline_48dp\"\n        android:shortcutDisabledMessage=\"@string/app_not_available\"\n        android:shortcutId=\"show_animelib\"\n        android:shortcutLongLabel=\"@string/label_anime_library\"\n        android:shortcutShortLabel=\"@string/label_anime_library\">\n        <intent\n            android:action=\"eu.kanade.tachiyomi.SHOW_ANIMELIB\"\n            android:targetClass=\"eu.kanade.tachiyomi.ui.main.MainActivity\" />\n    </shortcut>\n    <shortcut\n        android:enabled=\"true\"\n        android:icon=\"@drawable/sc_new_releases_48dp\"\n        android:shortcutDisabledMessage=\"@string/app_not_available\"\n        android:shortcutId=\"show_recently_updated\"\n        android:shortcutLongLabel=\"@string/label_recent_updates\"\n        android:shortcutShortLabel=\"@string/label_recent_updates\">\n        <intent\n            android:action=\"eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED\"\n            android:targetClass=\"eu.kanade.tachiyomi.ui.main.MainActivity\" />\n    </shortcut>\n    <shortcut\n        android:enabled=\"true\"\n        android:icon=\"@drawable/sc_history_48dp\"\n        android:shortcutDisabledMessage=\"@string/app_not_available\"\n        android:shortcutId=\"show_recently_updated\"\n        android:shortcutLongLabel=\"@string/label_recent_manga\"\n        android:shortcutShortLabel=\"@string/label_recent_manga\">\n        <intent\n            android:action=\"eu.kanade.tachiyomi.SHOW_RECENTLY_READ\"\n            android:targetClass=\"eu.kanade.tachiyomi.ui.main.MainActivity\" />\n    </shortcut>\n    <shortcut\n        android:enabled=\"true\"\n        android:icon=\"@drawable/sc_explore_48dp\"\n        android:shortcutDisabledMessage=\"@string/app_not_available\"\n        android:shortcutId=\"show_catalogues\"\n        android:shortcutLongLabel=\"@string/browse\"\n        android:shortcutShortLabel=\"@string/browse\">\n        <intent\n            android:action=\"eu.kanade.tachiyomi.SHOW_CATALOGUES\"\n            android:targetClass=\"eu.kanade.tachiyomi.ui.main.MainActivity\" />\n    </shortcut>\n</shortcuts>\n"
  },
  {
    "path": "app/src/debug/res/drawable/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108.0\"\n    android:viewportHeight=\"108.0\">\n    <path\n        android:pathData=\"M14.5,7L86.5,7A7,7 0,0 1,93.5 14L93.5,95A7,7 0,0 1,86.5 102L14.5,102A7,7 0,0 1,7.5 95L7.5,14A7,7 0,0 1,14.5 7z\"\n        android:fillColor=\"#000\"/>\n    <path\n        android:pathData=\"M14.5,7L86.5,7A7,7 0,0 1,93.5 14L93.5,95A7,7 0,0 1,86.5 102L14.5,102A7,7 0,0 1,7.5 95L7.5,14A7,7 0,0 1,14.5 7z\"\n        android:fillColor=\"#455A64\"/>\n    <path\n        android:pathData=\"M7.5,12.01C7.5,9.24 9.74,7 12.5,7L17.5,7L17.5,102L12.5,102C9.74,102 7.5,99.77 7.5,96.99L7.5,12.01Z\"\n        android:fillColor=\"#607D8B\"/>\n    <path\n        android:pathData=\"M54,54m-25,0a25,25 0,1 1,50 0a25,25 0,1 1,-50 0\"\n        android:strokeWidth=\"0.0853242\"\n        android:fillColor=\"#C92824\"/>\n    <path\n        android:pathData=\"M54,54m-20.051,0a20.051,20.051 0,1 1,40.102 0a20.051,20.051 0,1 1,-40.102 0\"\n        android:strokeWidth=\"0.0853242\"\n        android:fillColor=\"#FFFFFF\"/>\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"m63.998,52.877 l-15.133,-8.736c-0.904,-0.521 -2.032,0.131 -2.032,1.173v17.474c0,1.044 1.13,1.695 2.032,1.173L63.997,55.224c0.904,-0.521 0.904,-1.825 0.001,-2.347z\"\n        android:strokeWidth=\"0.0853242\"/>\n\n</vector>\n"
  },
  {
    "path": "app/src/debug/res/mipmap/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=\"@android:color/transparent\"/>\n  <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n  <monochrome android:drawable=\"@drawable/ic_ani_monochrome_launcher\" />\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/debug/res/mipmap/ic_launcher_round.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=\"@android:color/transparent\"/>\n  <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n  <monochrome android:drawable=\"@drawable/ic_ani_monochrome_launcher\" />\n</adaptive-icon>\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    <!-- Internet -->\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n\n    <!-- Storage -->\n    <uses-permission\n        android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"\n        tools:ignore=\"ScopedStorage\" />\n\n    <!-- For background jobs -->\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\" />\n\n    <!-- For managing extensions -->\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.UPDATE_PACKAGES_WITHOUT_USER_ACTION\" />\n    <!-- To view extension packages in API 30+ -->\n    <uses-permission\n        android:name=\"android.permission.QUERY_ALL_PACKAGES\"\n        tools:ignore=\"QueryAllPackagesPermission\" />\n\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n    <uses-permission\n        android:name=\"android.permission.READ_APP_SPECIFIC_LOCALES\"\n        tools:ignore=\"ProtectedPermissions\" />\n\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_DATA_SYNC\" />\n\n    <application\n        android:name=\".App\"\n        android:allowBackup=\"false\"\n        android:enableOnBackInvokedCallback=\"true\"\n        android:hardwareAccelerated=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:largeHeap=\"true\"\n        android:localeConfig=\"@xml/locales_config\"\n        android:networkSecurityConfig=\"@xml/network_security_config\"\n        android:preserveLegacyExternalStorage=\"true\"\n        android:requestLegacyExternalStorage=\"true\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/Theme.Tachiyomi\">\n\n        <activity\n            android:name=\".ui.main.MainActivity\"\n            android:exported=\"true\"\n            android:launchMode=\"singleTop\"\n            android:windowSoftInputMode=\"adjustResize\"\n            android:theme=\"@style/Theme.Tachiyomi.SplashScreen\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n\n            <!-- Deep link to add manga repos -->\n            <intent-filter android:label=\"@string/action_add_repo\">\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"tachiyomi\" />\n                <data android:host=\"add-repo\" />\n            </intent-filter>\n\n            <!-- Deep link to add manga repos -->\n            <intent-filter android:label=\"@string/action_add_repo\">\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"aniyomi\" />\n                <data android:host=\"add-repo\" />\n            </intent-filter>\n\n            <!-- Open backup files -->\n            <intent-filter android:label=\"@string/pref_restore_backup\">\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"file\" />\n                <data android:scheme=\"content\" />\n                <data android:host=\"*\" />\n                <data android:mimeType=\"*/*\" />\n                <!--\n                Work around Android's ugly primitive PatternMatcher\n                implementation that can't cope with finding a . early in\n                the path unless it's explicitly matched.\n\n                See https://stackoverflow.com/a/31028507\n                -->\n                <data android:pathPattern=\".*\\\\.tachibk\" />\n                <data android:pathPattern=\".*\\\\..*\\\\.tachibk\" />\n                <data android:pathPattern=\".*\\\\..*\\\\..*\\\\.tachibk\" />\n                <data android:pathPattern=\".*\\\\..*\\\\..*\\\\..*\\\\.tachibk\" />\n                <data android:pathPattern=\".*\\\\..*\\\\..*\\\\..*\\\\..*\\\\.tachibk\" />\n                <data android:pathPattern=\".*\\\\..*\\\\..*\\\\..*\\\\..*\\\\..*\\\\.tachibk\" />\n                <data android:pathPattern=\".*\\\\..*\\\\..*\\\\..*\\\\..*\\\\..*\\\\..*\\\\.tachibk\" />\n            </intent-filter>\n\n            <!--suppress AndroidDomInspection -->\n            <meta-data\n                android:name=\"android.app.shortcuts\"\n                android:resource=\"@xml/shortcuts\" />\n        </activity>\n\n        <activity\n            android:name=\".crash.CrashActivity\"\n            android:exported=\"false\"\n            android:process=\":error_handler\" />\n\n\n        <activity\n            android:name=\".ui.deeplink.anime.DeepLinkAnimeActivity\"\n            android:exported=\"true\"\n            android:label=\"@string/action_global_anime_search\"\n            android:launchMode=\"singleTask\"\n            android:theme=\"@android:style/Theme.NoDisplay\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.SEARCH\" />\n                <action android:name=\"com.google.android.gms.actions.SEARCH_ACTION\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"eu.kanade.tachiyomi.ANIMESEARCH\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"android.intent.action.SEND\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <data android:mimeType=\"text/plain\" />\n            </intent-filter>\n\n            <meta-data\n                android:name=\"android.app.searchable\"\n                android:resource=\"@xml/searchable\" />\n        </activity>\n\n        <activity\n            android:name=\".ui.deeplink.manga.DeepLinkMangaActivity\"\n            android:exported=\"true\"\n            android:label=\"@string/action_global_manga_search\"\n            android:launchMode=\"singleTask\"\n            android:theme=\"@android:style/Theme.NoDisplay\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.SEARCH\" />\n                <action android:name=\"com.google.android.gms.actions.SEARCH_ACTION\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"eu.kanade.tachiyomi.SEARCH\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"eu.kanade.tachiyomi.ANIMESEARCH\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"android.intent.action.SEND\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <data android:mimeType=\"text/plain\" />\n            </intent-filter>\n\n            <meta-data\n                android:name=\"android.app.searchable\"\n                android:resource=\"@xml/searchable\" />\n        </activity>\n\n        <activity\n            android:name=\".ui.reader.ReaderActivity\"\n            android:exported=\"false\"\n            android:launchMode=\"singleTask\">\n            <intent-filter>\n                <action android:name=\"com.samsung.android.support.REMOTE_ACTION\" />\n            </intent-filter>\n\n            <meta-data\n                android:name=\"com.samsung.android.support.REMOTE_ACTION\"\n                android:resource=\"@xml/s_pen_actions\" />\n        </activity>\n        <activity\n            android:name=\".ui.player.PlayerActivity\"\n            android:autoRemoveFromRecents=\"true\"\n            android:configChanges=\"orientation|screenLayout|screenSize|smallestScreenSize|keyboardHidden|keyboard|uiMode\"\n            android:exported=\"false\"\n            android:launchMode=\"singleTask\"\n            android:resizeableActivity=\"true\"\n            android:supportsPictureInPicture=\"true\"\n            android:theme=\"@style/Theme.Tachiyomi\">\n            <intent-filter>\n                <action android:name=\"com.samsung.android.support.REMOTE_ACTION\" />\n            </intent-filter>\n\n            <meta-data android:name=\"com.samsung.android.support.REMOTE_ACTION\"\n                android:resource=\"@xml/s_pen_actions\"/>\n        </activity>\n        <activity\n            android:name=\".ui.security.UnlockActivity\"\n            android:exported=\"false\"\n            android:theme=\"@style/Theme.Tachiyomi\" />\n\n        <activity\n            android:name=\".ui.webview.WebViewActivity\"\n            android:configChanges=\"uiMode|orientation|screenSize\"\n            android:exported=\"false\" />\n\n        <activity\n            android:name=\".extension.manga.util.MangaExtensionInstallActivity\"\n            android:exported=\"false\"\n            android:theme=\"@android:style/Theme.Translucent.NoTitleBar\" />\n\n        <activity\n            android:name=\".extension.anime.util.AnimeExtensionInstallActivity\"\n            android:exported=\"false\"\n            android:theme=\"@android:style/Theme.Translucent.NoTitleBar\" />\n\n        <activity\n            android:name=\".ui.setting.track.TrackLoginActivity\"\n            android:exported=\"true\"\n            android:label=\"@string/track_activity_name\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"aniyomi\"/>\n\n                <data android:host=\"myanimelist-auth\" />\n                <data android:host=\"anilist-auth\" />\n                <data android:host=\"bangumi-auth\" />\n                <data android:host=\"shikimori-auth\" />\n                <data android:host=\"simkl-auth\"/>\n            </intent-filter>\n        </activity>\n\n        <receiver\n            android:name=\".data.notification.NotificationReceiver\"\n            android:exported=\"false\" />\n\n        <service\n            android:name=\".extension.manga.util.MangaExtensionInstallService\"\n            android:exported=\"false\"\n            android:foregroundServiceType=\"shortService\" />\n\n        <service\n            android:name=\".extension.anime.util.AnimeExtensionInstallService\"\n            android:exported=\"false\"\n            android:foregroundServiceType=\"shortService\" />\n        <service\n            android:name=\"androidx.appcompat.app.AppLocalesMetadataHolderService\"\n            android:enabled=\"false\"\n            android:exported=\"false\">\n            <meta-data\n                android:name=\"autoStoreLocales\"\n                android:value=\"true\" />\n        </service>\n\n        <service\n            android:name=\"androidx.work.impl.foreground.SystemForegroundService\"\n            android:foregroundServiceType=\"dataSync\"\n            tools:node=\"merge\" />\n\n        <provider\n            android:name=\"androidx.core.content.FileProvider\"\n            android:authorities=\"${applicationId}.provider\"\n            android:exported=\"false\"\n            android:grantUriPermissions=\"true\">\n            <meta-data\n                android:name=\"android.support.FILE_PROVIDER_PATHS\"\n                android:resource=\"@xml/provider_paths\" />\n        </provider>\n\n        <provider\n            android:name=\"rikka.shizuku.ShizukuProvider\"\n            android:authorities=\"${applicationId}.shizuku\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:multiprocess=\"false\"\n            android:permission=\"android.permission.INTERACT_ACROSS_USERS_FULL\" />\n\n        <meta-data\n            android:name=\"android.webkit.WebView.EnableSafeBrowsing\"\n            android:value=\"false\" />\n        <meta-data\n            android:name=\"android.webkit.WebView.MetricsOptOut\"\n            android:value=\"true\" />\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "app/src/main/assets/aniyomi.lua",
    "content": "aniyomi = {}\n-- UI\nfunction aniyomi.show_text(text)\n    mp.set_property(\"user-data/aniyomi/show_text\", text)\nend\nfunction aniyomi.hide_ui()\n    mp.set_property(\"user-data/aniyomi/toggle_ui\", \"hide\")\nend\nfunction aniyomi.show_ui()\n    mp.set_property(\"user-data/aniyomi/toggle_ui\", \"show\")\nend\nfunction aniyomi.toggle_ui()\n    mp.set_property(\"user-data/aniyomi/toggle_ui\", \"toggle\")\nend\nfunction aniyomi.show_subtitle_settings()\n    mp.set_property(\"user-data/aniyomi/show_panel\", \"subtitle_settings\")\nend\nfunction aniyomi.show_subtitle_delay()\n    mp.set_property(\"user-data/aniyomi/show_panel\", \"subtitle_delay\")\nend\nfunction aniyomi.show_audio_delay()\n    mp.set_property(\"user-data/aniyomi/show_panel\", \"audio_delay\")\nend\nfunction aniyomi.show_video_filters()\n    mp.set_property(\"user-data/aniyomi/show_panel\", \"video_filters\")\nend\nfunction aniyomi.show_software_keyboard()\n    mp.set_property(\"user-data/aniyomi/software_keyboard\", \"show\")\nend\nfunction aniyomi.hide_software_keyboard()\n    mp.set_property(\"user-data/aniyomi/software_keyboard\", \"hide\")\nend\nfunction aniyomi.toggle_software_keyboard()\n    mp.set_property(\"user-data/aniyomi/software_keyboard\", \"toggle\")\nend\n-- Custom buttons\nfunction aniyomi.set_button_title(text)\n    mp.set_property(\"user-data/aniyomi/set_button_title\", text)\nend\nfunction aniyomi.reset_button_title()\n    mp.set_property(\"user-data/aniyomi/reset_button_title\", \"unused\")\nend\nfunction aniyomi.hide_button()\n    mp.set_property(\"user-data/aniyomi/toggle_button\", \"hide\")\nend\nfunction aniyomi.show_button()\n    mp.set_property(\"user-data/aniyomi/toggle_button\", \"show\")\nend\nfunction aniyomi.toggle_button()\n    mp.set_property(\"user-data/aniyomi/toggle_button\", \"toggle\")\nend\n-- Controls\nfunction aniyomi.previous_episode()\n    mp.set_property(\"user-data/aniyomi/switch_episode\", \"p\")\nend\nfunction aniyomi.next_episode()\n    mp.set_property(\"user-data/aniyomi/switch_episode\", \"n\")\nend\nfunction aniyomi.pause()\n    mp.set_property(\"user-data/aniyomi/pause\", \"pause\")\nend\nfunction aniyomi.unpause()\n    mp.set_property(\"user-data/aniyomi/pause\", \"unpause\")\nend\nfunction aniyomi.pauseunpause()\n    mp.set_property(\"user-data/aniyomi/pause\", \"pauseunpause\")\nend\nfunction aniyomi.seek_by(value)\n    mp.set_property(\"user-data/aniyomi/seek_by\", value)\nend\nfunction aniyomi.seek_to(value)\n    mp.set_property(\"user-data/aniyomi/seek_to\", value)\nend\nfunction aniyomi.seek_by_with_text(value, text)\n    mp.set_property(\"user-data/aniyomi/seek_by_with_text\", value .. \"|\" .. text)\nend\nfunction aniyomi.seek_to_with_text(value, text)\n    mp.set_property(\"user-data/aniyomi/seek_to_with_text\", value .. \"|\" .. text)\nend\nfunction aniyomi.int_picker(title, name_format, start, stop, step, property)\n    mp.set_property(\"user-data/aniyomi/launch_int_picker\", title .. \"|\" .. name_format ..  \"|\" .. start .. \"|\" .. stop .. \"|\" .. step .. \"|\" .. property)\nend\n-- Legacy\nfunction aniyomi.left_seek_by(value)\n    aniyomi.seek_by(-value)\nend\nfunction aniyomi.right_seek_by(value)\n    aniyomi.seek_by(value)\nend\nreturn aniyomi\n"
  },
  {
    "path": "app/src/main/baseline-prof.txt",
    "content": "Landroidx/activity/Cancellable;\nLandroidx/activity/ComponentActivity;\nPLandroidx/activity/ComponentActivity;->$r8$lambda$OnwlVMZzrLePIRy-6IUDTtLLUV0(Landroidx/activity/ComponentActivity;)Landroid/os/Bundle;\nHSPLandroidx/activity/ComponentActivity;->$r8$lambda$h2i_RK2mddCIbAsGubaI4eL8_cU(Landroidx/activity/ComponentActivity;)V\nPLandroidx/activity/ComponentActivity;->$r8$lambda$h2i_RK2mddCIbAsGubaI4eL8_cU(Landroidx/activity/ComponentActivity;)V\nHSPLandroidx/activity/ComponentActivity;-><init>()V\nHPLandroidx/activity/ComponentActivity;-><init>()V\nHSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V\nPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V\nHSPLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V\nPLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V\nHSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V\nPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V\nHSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;\nPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;\nHSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;\nPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;\nHSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nHPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nHSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;\nPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;\nHSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;\nPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;\nHSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;\nPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;\nHSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V\nPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V\nPLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V\nPLandroidx/activity/ComponentActivity;->onTrimMemory(I)V\nPLandroidx/activity/ComponentActivity;->removeOnNewIntentListener(Landroidx/core/util/Consumer;)V\nLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;\nHSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;\nHSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->saveState()Landroid/os/Bundle;\nLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;\nHSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nHSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable(Landroid/content/Context;)V\nPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable(Landroid/content/Context;)V\nLandroidx/activity/ComponentActivity$1;\nHSPLandroidx/activity/ComponentActivity$1;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$1;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nLandroidx/activity/ComponentActivity$2;\nHSPLandroidx/activity/ComponentActivity$2;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$2;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nLandroidx/activity/ComponentActivity$3;\nHSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nHSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/activity/ComponentActivity$4;\nHSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nHSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/activity/ComponentActivity$5;\nHSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nHSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/activity/ComponentActivity$NonConfigurationInstances;\nLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;\nHSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/fragment/app/FragmentActivity;)V\nLandroidx/activity/ComponentDialog$$ExternalSyntheticLambda0;\nHSPLandroidx/activity/ComponentDialog$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nPLandroidx/activity/ComponentDialog$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nLandroidx/activity/FullyDrawnReporter;\nHSPLandroidx/activity/FullyDrawnReporter;-><init>(Ljava/util/concurrent/Executor;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V\nPLandroidx/activity/FullyDrawnReporter;-><init>(Ljava/util/concurrent/Executor;Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;)V\nLandroidx/activity/OnBackPressedCallback;\nHSPLandroidx/activity/OnBackPressedCallback;-><init>(Z)V\nPLandroidx/activity/OnBackPressedCallback;-><init>(Z)V\nHSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V\nHPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V\nHSPLandroidx/activity/OnBackPressedCallback;->remove()V\nHPLandroidx/activity/OnBackPressedCallback;->remove()V\nHSPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V\nHPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V\nHSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V\nPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V\nLandroidx/activity/OnBackPressedDispatcher;\nHSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Ljava/lang/Runnable;)V\nPLandroidx/activity/OnBackPressedDispatcher;-><init>(Ljava/lang/Runnable;)V\nHSPLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;\nPLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;\nHSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V\nHPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V\nHSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;\nHPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;\nLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;\nHSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V\nHPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V\nHSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V\nPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V\nHSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;\nHSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V\nHPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V\nHSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V\nPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V\nLandroidx/activity/OnBackPressedDispatcherKt;\nHSPLandroidx/activity/OnBackPressedDispatcherKt;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;\nPLandroidx/activity/OnBackPressedDispatcherKt;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;\nLandroidx/activity/OnBackPressedDispatcherOwner;\nLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;\nHSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;-><clinit>()V\nPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;-><clinit>()V\nHSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;-><init>(I)V\nPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;-><init>(I)V\nHSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/activity/compose/BackHandlerKt;\nHSPLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;-><init>(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V\nPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;-><init>(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object;\nHPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object;\nLandroidx/activity/compose/BackHandlerKt$BackHandler$2;\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V\nPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->dispose()V\nPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;\nHSPLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;-><init>(ZLandroidx/compose/runtime/MutableState;)V\nPLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;-><init>(ZLandroidx/compose/runtime/MutableState;)V\nLandroidx/activity/compose/ComponentActivityKt;\nHSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V\nPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V\nHSPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;\nHSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;-><clinit>()V\nPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;-><clinit>()V\nHSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;-><init>(I)V\nPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;-><init>(I)V\nHSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->invoke()Ljava/lang/Object;\nPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->invoke()Ljava/lang/Object;\nLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;\nHSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;-><clinit>()V\nPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;-><clinit>()V\nHSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;)Landroidx/activity/OnBackPressedDispatcherOwner;\nHPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;)Landroidx/activity/OnBackPressedDispatcherOwner;\nLandroidx/activity/contextaware/ContextAwareHelper;\nHSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V\nPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V\nHSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V\nPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V\nPLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V\nHSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V\nHPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V\nLandroidx/activity/contextaware/OnContextAvailableListener;\nLandroidx/activity/result/ActivityResult;\nLandroidx/activity/result/ActivityResultCallback;\nLandroidx/activity/result/ActivityResultLauncher;\nHSPLandroidx/activity/result/ActivityResultLauncher;-><init>()V\nPLandroidx/activity/result/ActivityResultLauncher;-><init>()V\nLandroidx/activity/result/ActivityResultRegistry;\nHSPLandroidx/activity/result/ActivityResultRegistry;-><init>()V\nPLandroidx/activity/result/ActivityResultRegistry;-><init>()V\nHPLandroidx/activity/result/ActivityResultRegistry;->onSaveInstanceState(Landroid/os/Bundle;)V\nHSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;\nPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;\nHSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V\nHPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V\nHPLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V\nLandroidx/activity/result/ActivityResultRegistry$2;\nHSPLandroidx/activity/result/ActivityResultRegistry$2;-><init>(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;I)V\nPLandroidx/activity/result/ActivityResultRegistry$2;-><init>(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;I)V\nPLandroidx/activity/result/ActivityResultRegistry$2;->unregister()V\nLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;\nHSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;-><init>(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)V\nPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;-><init>(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)V\nLandroidx/activity/result/ActivityResultRegistryOwner;\nLandroidx/activity/result/contract/ActivityResultContract;\nHSPLandroidx/activity/result/contract/ActivityResultContract;-><init>()V\nPLandroidx/activity/result/contract/ActivityResultContract;-><init>()V\nLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;\nHSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;-><init>()V\nPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;-><init>()V\nLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;\nHSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;-><init>()V\nPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;-><init>()V\nLandroidx/appcompat/R$styleable;\nHSPLandroidx/appcompat/R$styleable;-><clinit>()V\nPLandroidx/appcompat/R$styleable;-><clinit>()V\nLandroidx/appcompat/app/ActionBar;\nHSPLandroidx/appcompat/app/ActionBar;->readLocales(Landroid/content/Context;)Ljava/lang/String;\nPLandroidx/appcompat/app/ActionBar;->readLocales(Landroid/content/Context;)Ljava/lang/String;\nLandroidx/appcompat/app/AppCompatActivity;\nHSPLandroidx/appcompat/app/AppCompatActivity;-><init>()V\nPLandroidx/appcompat/app/AppCompatActivity;-><init>()V\nHSPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V\nPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V\nHSPLandroidx/appcompat/app/AppCompatActivity;->findViewById(I)Landroid/view/View;\nPLandroidx/appcompat/app/AppCompatActivity;->findViewById(I)Landroid/view/View;\nHSPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate;\nPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate;\nHSPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources;\nHPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources;\nHSPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V\nHPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V\nHSPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V\nPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V\nPLandroidx/appcompat/app/AppCompatActivity;->onDestroy()V\nHSPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V\nPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V\nHSPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V\nPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V\nHSPLandroidx/appcompat/app/AppCompatActivity;->onStart()V\nPLandroidx/appcompat/app/AppCompatActivity;->onStart()V\nPLandroidx/appcompat/app/AppCompatActivity;->onStop()V\nHSPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V\nPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V\nHSPLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V\nPLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V\nHSPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V\nPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V\nLandroidx/appcompat/app/AppCompatActivity$1;\nHSPLandroidx/appcompat/app/AppCompatActivity$1;-><init>(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V\nPLandroidx/appcompat/app/AppCompatActivity$1;-><init>(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V\nPLandroidx/appcompat/app/AppCompatActivity$1;->saveState()Landroid/os/Bundle;\nLandroidx/appcompat/app/AppCompatActivity$2;\nHSPLandroidx/appcompat/app/AppCompatActivity$2;-><init>(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V\nPLandroidx/appcompat/app/AppCompatActivity$2;-><init>(Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;)V\nHSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V\nPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V\nLandroidx/appcompat/app/AppCompatCallback;\nLandroidx/appcompat/app/AppCompatDelegate;\nHSPLandroidx/appcompat/app/AppCompatDelegate;-><clinit>()V\nPLandroidx/appcompat/app/AppCompatDelegate;-><clinit>()V\nHSPLandroidx/appcompat/app/AppCompatDelegate;-><init>()V\nPLandroidx/appcompat/app/AppCompatDelegate;-><init>()V\nHSPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V\nPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V\nHSPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I\nPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I\nHSPLandroidx/appcompat/app/AppCompatDelegate;->getRequestedAppLocales()Landroidx/core/os/LocaleListCompat;\nPLandroidx/appcompat/app/AppCompatDelegate;->getRequestedAppLocales()Landroidx/core/os/LocaleListCompat;\nHSPLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z\nPLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z\nPLandroidx/appcompat/app/AppCompatDelegate;->removeActivityDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V\nHSPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V\nPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V\nHSPLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V\nPLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V\nHSPLandroidx/appcompat/app/AppCompatDelegate;->syncRequestedAndStoredLocales(Landroid/content/Context;)V\nPLandroidx/appcompat/app/AppCompatDelegate;->syncRequestedAndStoredLocales(Landroid/content/Context;)V\nLandroidx/appcompat/app/AppCompatDelegateImpl;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;-><clinit>()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;-><clinit>()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;-><init>(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;-><init>(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;-><init>(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;-><init>(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->dismissPopups()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V\nHPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->findViewById(I)Landroid/view/View;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->findViewById(I)Landroid/view/View;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(I)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(I)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nHPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->onDestroy()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStop()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I\nPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I\nLandroidx/appcompat/app/AppCompatDelegateImpl$3;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$3;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat;\nLandroidx/appcompat/app/AppCompatDelegateImpl$4;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$4;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;I)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$4;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;I)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$4;->onDetachedFromWindow()V\nLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat;\nPLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat;\nLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;-><init>(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V\nLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;\nHSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;-><init>(I)V\nPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;-><init>(I)V\nLandroidx/appcompat/app/AppCompatViewInflater;\nHSPLandroidx/appcompat/app/AppCompatViewInflater;-><clinit>()V\nPLandroidx/appcompat/app/AppCompatViewInflater;-><clinit>()V\nHSPLandroidx/appcompat/app/AppCompatViewInflater;-><init>()V\nPLandroidx/appcompat/app/AppCompatViewInflater;-><init>()V\nHSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nHPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nLandroidx/appcompat/app/AppLocalesMetadataHolderService;\nLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;\nHSPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I\nPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I\nLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;\nHSPLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;-><init>(Ljava/util/concurrent/Executor;)V\nPLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;-><init>(Ljava/util/concurrent/Executor;)V\nLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;\nHSPLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;-><init>()V\nPLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;-><init>()V\nLandroidx/appcompat/app/ToolbarActionBar$1;\nHSPLandroidx/appcompat/app/ToolbarActionBar$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/appcompat/app/ToolbarActionBar$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/appcompat/app/ToolbarActionBar$1;->run()V\nPLandroidx/appcompat/app/ToolbarActionBar$1;->run()V\nLandroidx/appcompat/view/ContextThemeWrapper;\nHSPLandroidx/appcompat/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V\nPLandroidx/appcompat/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V\nHSPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V\nPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V\nHSPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;\nPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;\nHSPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;\nHPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;\nHSPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;\nPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;\nHSPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V\nPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V\nLandroidx/appcompat/view/WindowCallbackWrapper;\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;-><init>(Landroid/view/Window$Callback;)V\nPLandroidx/appcompat/view/WindowCallbackWrapper;-><init>(Landroid/view/Window$Callback;)V\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z\nPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z\nHPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback;\nPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback;\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V\nPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V\nPLandroidx/appcompat/view/WindowCallbackWrapper;->onDetachedFromWindow()V\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V\nHPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V\nHSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V\nPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V\nLandroidx/appcompat/view/menu/MenuBuilder$Callback;\nLandroidx/appcompat/view/menu/MenuPresenter$Callback;\nLandroidx/appcompat/widget/AppCompatBackgroundHelper;\nHSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;-><init>(Landroid/view/View;)V\nPLandroidx/appcompat/widget/AppCompatBackgroundHelper;-><init>(Landroid/view/View;)V\nHSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V\nPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V\nHSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V\nPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V\nLandroidx/appcompat/widget/AppCompatDrawableManager;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager;-><clinit>()V\nPLandroidx/appcompat/widget/AppCompatDrawableManager;-><clinit>()V\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager;-><init>()V\nPLandroidx/appcompat/widget/AppCompatDrawableManager;-><init>()V\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode;\nPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager;\nPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable$1(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable$1(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V\nPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V\nLandroidx/appcompat/widget/AppCompatDrawableManager$1;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;-><init>()V\nPLandroidx/appcompat/widget/AppCompatDrawableManager$1;-><init>()V\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains(I[I)Z\nPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains(I[I)Z\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/LayerDrawable;\nPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/LayerDrawable;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList;\nPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList;\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z\nPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z\nHSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z\nPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z\nLandroidx/appcompat/widget/AppCompatImageHelper;\nHSPLandroidx/appcompat/widget/AppCompatImageHelper;-><init>(Landroid/widget/ImageView;)V\nPLandroidx/appcompat/widget/AppCompatImageHelper;-><init>(Landroid/widget/ImageView;)V\nHSPLandroidx/appcompat/widget/AppCompatImageHelper;->applyImageLevel()V\nPLandroidx/appcompat/widget/AppCompatImageHelper;->applyImageLevel()V\nHSPLandroidx/appcompat/widget/AppCompatImageHelper;->applySupportImageTint()V\nPLandroidx/appcompat/widget/AppCompatImageHelper;->applySupportImageTint()V\nHSPLandroidx/appcompat/widget/AppCompatImageHelper;->hasOverlappingRendering()Z\nPLandroidx/appcompat/widget/AppCompatImageHelper;->hasOverlappingRendering()Z\nHSPLandroidx/appcompat/widget/AppCompatImageHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V\nPLandroidx/appcompat/widget/AppCompatImageHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V\nHSPLandroidx/appcompat/widget/AppCompatImageHelper;->obtainLevelFromDrawable(Landroid/graphics/drawable/Drawable;)V\nPLandroidx/appcompat/widget/AppCompatImageHelper;->obtainLevelFromDrawable(Landroid/graphics/drawable/Drawable;)V\nLandroidx/appcompat/widget/AppCompatImageView;\nHSPLandroidx/appcompat/widget/AppCompatImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V\nPLandroidx/appcompat/widget/AppCompatImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V\nHSPLandroidx/appcompat/widget/AppCompatImageView;->drawableStateChanged()V\nPLandroidx/appcompat/widget/AppCompatImageView;->drawableStateChanged()V\nHSPLandroidx/appcompat/widget/AppCompatImageView;->hasOverlappingRendering()Z\nPLandroidx/appcompat/widget/AppCompatImageView;->hasOverlappingRendering()Z\nHSPLandroidx/appcompat/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V\nPLandroidx/appcompat/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V\nLandroidx/appcompat/widget/ContentFrameLayout;\nHSPLandroidx/appcompat/widget/ContentFrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V\nPLandroidx/appcompat/widget/ContentFrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V\nHSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue;\nPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue;\nHSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue;\nPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue;\nHSPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V\nPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V\nPLandroidx/appcompat/widget/ContentFrameLayout;->onDetachedFromWindow()V\nHSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V\nHPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V\nHSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V\nPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V\nHSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V\nPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V\nLandroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;\nLandroidx/appcompat/widget/DrawableUtils;\nHSPLandroidx/appcompat/widget/DrawableUtils;-><clinit>()V\nPLandroidx/appcompat/widget/DrawableUtils;-><clinit>()V\nHSPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V\nHPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V\nLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I\nPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I\nHSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I\nPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I\nHSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I\nPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I\nHSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/BlendMode;\nPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/BlendMode;\nHSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I\nPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I\nLandroidx/appcompat/widget/FitWindowsFrameLayout;\nHSPLandroidx/appcompat/widget/FitWindowsFrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V\nPLandroidx/appcompat/widget/FitWindowsFrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V\nHSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z\nPLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z\nLandroidx/appcompat/widget/ResourceManagerInternal;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;-><clinit>()V\nPLandroidx/appcompat/widget/ResourceManagerInternal;-><clinit>()V\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;-><init>()V\nPLandroidx/appcompat/widget/ResourceManagerInternal;-><init>()V\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V\nPLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z\nPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z\nLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;\nHSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;-><init>()V\nPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;-><init>()V\nLandroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;\nLandroidx/appcompat/widget/ResourcesWrapper;\nLandroidx/appcompat/widget/ThemeUtils;\nHSPLandroidx/appcompat/widget/ThemeUtils;-><clinit>()V\nPLandroidx/appcompat/widget/ThemeUtils;-><clinit>()V\nHSPLandroidx/appcompat/widget/ThemeUtils;->checkAppCompatTheme(Landroid/view/View;Landroid/content/Context;)V\nPLandroidx/appcompat/widget/ThemeUtils;->checkAppCompatTheme(Landroid/view/View;Landroid/content/Context;)V\nLandroidx/appcompat/widget/TintContextWrapper;\nHSPLandroidx/appcompat/widget/TintContextWrapper;-><clinit>()V\nPLandroidx/appcompat/widget/TintContextWrapper;-><clinit>()V\nHSPLandroidx/appcompat/widget/TintContextWrapper;->wrap(Landroid/content/Context;)V\nPLandroidx/appcompat/widget/TintContextWrapper;->wrap(Landroid/content/Context;)V\nLandroidx/appcompat/widget/TintResources;\nLandroidx/appcompat/widget/TintTypedArray;\nHSPLandroidx/appcompat/widget/TintTypedArray;-><init>(Landroid/content/Context;Landroid/content/res/TypedArray;)V\nPLandroidx/appcompat/widget/TintTypedArray;-><init>(Landroid/content/Context;Landroid/content/res/TypedArray;)V\nHSPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable;\nPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/appcompat/widget/TintTypedArray;->getResourceId(II)I\nPLandroidx/appcompat/widget/TintTypedArray;->getResourceId(II)I\nHSPLandroidx/appcompat/widget/TintTypedArray;->getWrappedTypeArray()Landroid/content/res/TypedArray;\nPLandroidx/appcompat/widget/TintTypedArray;->getWrappedTypeArray()Landroid/content/res/TypedArray;\nHSPLandroidx/appcompat/widget/TintTypedArray;->hasValue(I)Z\nPLandroidx/appcompat/widget/TintTypedArray;->hasValue(I)Z\nHSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[II)Landroidx/appcompat/widget/TintTypedArray;\nPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[II)Landroidx/appcompat/widget/TintTypedArray;\nHSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V\nPLandroidx/appcompat/widget/TintTypedArray;->recycle()V\nLandroidx/appcompat/widget/VectorEnabledTintResources;\nLandroidx/appcompat/widget/ViewStubCompat;\nHSPLandroidx/appcompat/widget/ViewStubCompat;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V\nPLandroidx/appcompat/widget/ViewStubCompat;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V\nHSPLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V\nPLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V\nLandroidx/appcompat/widget/ViewUtils;\nHSPLandroidx/appcompat/widget/ViewUtils;-><clinit>()V\nPLandroidx/appcompat/widget/ViewUtils;-><clinit>()V\nLandroidx/arch/core/executor/ArchTaskExecutor;\nHSPLandroidx/arch/core/executor/ArchTaskExecutor;-><clinit>()V\nPLandroidx/arch/core/executor/ArchTaskExecutor;-><clinit>()V\nHSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V\nPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V\nHSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;\nHPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;\nHSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z\nHPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z\nHSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V\nPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V\nLandroidx/arch/core/executor/DefaultTaskExecutor;\nHSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V\nPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V\nHSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;\nPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;\nHSPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V\nPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V\nLandroidx/arch/core/executor/DefaultTaskExecutor$1;\nHSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V\nPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>()V\nLandroidx/arch/core/internal/FastSafeIterableMap;\nHSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V\nPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V\nHSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry;\nHPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry;\nHSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z\nHPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z\nHSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;\nHPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;\nHSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/arch/core/internal/SafeIterableMap;\nHSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V\nHPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V\nHSPLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;\nPLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;\nPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;\nHPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;\nPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;\nHPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry;\nPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;\nPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/arch/core/internal/SafeIterableMap;->size()I\nPLandroidx/arch/core/internal/SafeIterableMap;->size()I\nLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;\nHSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V\nPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;I)V\nLandroidx/arch/core/internal/SafeIterableMap$Entry;\nHSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;\nPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;\nHSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;\nPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;\nLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;\nHSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(Landroidx/arch/core/internal/SafeIterableMap;)V\nPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(Landroidx/arch/core/internal/SafeIterableMap;)V\nHSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z\nPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z\nHSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;\nPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;\nHSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V\nPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V\nLandroidx/arch/core/internal/SafeIterableMap$ListIterator;\nHSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V\nPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V\nHSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z\nPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z\nHSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;\nPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;\nHSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;\nPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;\nPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V\nLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;\nHSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;-><init>()V\nHPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;-><init>()V\nLandroidx/arch/core/util/Function;\nLandroidx/collection/ArrayMap;\nHSPLandroidx/collection/ArrayMap;-><init>()V\nPLandroidx/collection/ArrayMap;-><init>()V\nLandroidx/collection/ArrayMap$KeyIterator;\nHSPLandroidx/collection/ArrayMap$KeyIterator;-><init>(Landroidx/collection/ArraySet;)V\nPLandroidx/collection/ArrayMap$KeyIterator;-><init>(Landroidx/collection/ArraySet;)V\nLandroidx/collection/ArraySet;\nHSPLandroidx/collection/ArraySet;-><clinit>()V\nPLandroidx/collection/ArraySet;-><clinit>()V\nHSPLandroidx/collection/ArraySet;-><init>(I)V\nPLandroidx/collection/ArraySet;-><init>(I)V\nHSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z\nPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z\nHSPLandroidx/collection/ArraySet;->allocArrays(I)V\nPLandroidx/collection/ArraySet;->allocArrays(I)V\nHSPLandroidx/collection/ArraySet;->clear()V\nPLandroidx/collection/ArraySet;->clear()V\nHSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V\nPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V\nHSPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I\nPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I\nHSPLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator;\nPLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator;\nPLandroidx/collection/ArraySet;->removeAt(I)V\nHSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;\nPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;\nLandroidx/collection/ContainerHelpers;\nHSPLandroidx/collection/ContainerHelpers;-><clinit>()V\nPLandroidx/collection/ContainerHelpers;-><clinit>()V\nPLandroidx/collection/ContainerHelpers;->binarySearch([III)I\nHSPLandroidx/collection/ContainerHelpers;->binarySearch([JIJ)I\nHPLandroidx/collection/ContainerHelpers;->binarySearch([JIJ)I\nLandroidx/collection/IndexBasedArrayIterator;\nHSPLandroidx/collection/IndexBasedArrayIterator;-><init>(I)V\nPLandroidx/collection/IndexBasedArrayIterator;-><init>(I)V\nHSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z\nPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z\nPLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object;\nPLandroidx/collection/IndexBasedArrayIterator;->remove()V\nLandroidx/collection/LongSparseArray;\nHSPLandroidx/collection/LongSparseArray;-><clinit>()V\nPLandroidx/collection/LongSparseArray;-><clinit>()V\nHSPLandroidx/collection/LongSparseArray;-><init>()V\nPLandroidx/collection/LongSparseArray;-><init>()V\nHSPLandroidx/collection/LongSparseArray;-><init>(I)V\nHPLandroidx/collection/LongSparseArray;-><init>(I)V\nHSPLandroidx/collection/LongSparseArray;->clear()V\nPLandroidx/collection/LongSparseArray;->clear()V\nHSPLandroidx/collection/LongSparseArray;->get(JLjava/lang/Long;)Ljava/lang/Object;\nHPLandroidx/collection/LongSparseArray;->get(JLjava/lang/Long;)Ljava/lang/Object;\nHSPLandroidx/collection/LongSparseArray;->indexOfKey(J)I\nPLandroidx/collection/LongSparseArray;->indexOfKey(J)I\nHSPLandroidx/collection/LongSparseArray;->keyAt(I)J\nPLandroidx/collection/LongSparseArray;->keyAt(I)J\nHSPLandroidx/collection/LongSparseArray;->put(JLjava/lang/Object;)V\nHPLandroidx/collection/LongSparseArray;->put(JLjava/lang/Object;)V\nHSPLandroidx/collection/LongSparseArray;->remove(J)V\nPLandroidx/collection/LongSparseArray;->remove(J)V\nHSPLandroidx/collection/LongSparseArray;->size()I\nPLandroidx/collection/LongSparseArray;->size()I\nHSPLandroidx/collection/LongSparseArray;->valueAt(I)Ljava/lang/Object;\nPLandroidx/collection/LongSparseArray;->valueAt(I)Ljava/lang/Object;\nLandroidx/collection/LruCache;\nHSPLandroidx/collection/LruCache;-><init>(I)V\nPLandroidx/collection/LruCache;-><init>(I)V\nHSPLandroidx/collection/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/collection/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/collection/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/collection/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/collection/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/collection/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/collection/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I\nPLandroidx/collection/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I\nHSPLandroidx/collection/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I\nPLandroidx/collection/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I\nHSPLandroidx/collection/LruCache;->trimToSize(I)V\nPLandroidx/collection/LruCache;->trimToSize(I)V\nLandroidx/collection/SimpleArrayMap;\nHSPLandroidx/collection/SimpleArrayMap;-><init>()V\nPLandroidx/collection/SimpleArrayMap;-><init>()V\nHSPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/collection/SimpleArrayMap;->indexOf(ILjava/lang/Object;)I\nPLandroidx/collection/SimpleArrayMap;->indexOf(ILjava/lang/Object;)I\nHSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I\nPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I\nPLandroidx/collection/SimpleArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/collection/SparseArrayCompat;\nHSPLandroidx/collection/SparseArrayCompat;-><clinit>()V\nPLandroidx/collection/SparseArrayCompat;-><clinit>()V\nHSPLandroidx/collection/SparseArrayCompat;-><init>()V\nPLandroidx/collection/SparseArrayCompat;-><init>()V\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;-><clinit>()V\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;-><clinit>()V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;-><init>()V\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;-><init>()V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;-><init>(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;II)V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;-><init>(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;II)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;-><init>(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;-><init>(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$4;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;)V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;-><init>(Landroidx/compose/animation/ExitTransition;)V\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;-><init>(Landroidx/compose/animation/ExitTransition;)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;-><init>(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;I)V\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;-><init>(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;I)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V\nPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V\nHSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;\nHSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;-><clinit>()V\nPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;-><clinit>()V\nHSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;-><init>()V\nPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;-><init>()V\nHSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentMeasurePolicy;\nHSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;-><init>(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V\nPLandroidx/compose/animation/AnimatedContentMeasurePolicy;-><init>(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V\nHSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;\nPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;\nHSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;\nHSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;-><init>([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V\nPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;-><init>([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V\nHSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedContentScope;\nLandroidx/compose/animation/AnimatedContentScopeImpl;\nHSPLandroidx/compose/animation/AnimatedContentScopeImpl;-><init>()V\nPLandroidx/compose/animation/AnimatedContentScopeImpl;-><init>()V\nLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;)V\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;)V\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment$animation_release()Landroidx/compose/ui/Alignment;\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment$animation_release()Landroidx/compose/ui/Alignment;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/LinkedHashMap;\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/LinkedHashMap;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment$animation_release(Landroidx/compose/ui/Alignment;)V\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment$animation_release(Landroidx/compose/ui/Alignment;)V\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V\nLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;-><init>(Z)V\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;-><init>(Z)V\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V\nLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;-><init>(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/MutableState;)V\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;-><init>(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/MutableState;)V\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->getSizeTransform()Landroidx/compose/runtime/State;\nPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->getSizeTransform()Landroidx/compose/runtime/State;\nHSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;\nHSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;-><init>(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V\nPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;-><init>(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V\nHSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;-><clinit>()V\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;-><clinit>()V\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;-><init>()V\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;-><init>()V\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;-><init>(Landroidx/compose/animation/core/Transition;)V\nHPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;-><init>(Landroidx/compose/animation/core/Transition;)V\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;-><init>(Landroidx/compose/runtime/ProduceStateScope;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;)V\nHPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;-><init>(Landroidx/compose/runtime/ProduceStateScope;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;\nHSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;-><init>(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V\nPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;-><init>(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V\nLandroidx/compose/animation/AnimatedVisibilityScope;\nLandroidx/compose/animation/AnimatedVisibilityScopeImpl;\nHSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;-><init>()V\nPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;-><init>()V\nHSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nLandroidx/compose/animation/AnimationModifierKt;\nHSPLandroidx/compose/animation/AnimationModifierKt;-><clinit>()V\nPLandroidx/compose/animation/AnimationModifierKt;-><clinit>()V\nHSPLandroidx/compose/animation/AnimationModifierKt;->getInvalidSize()J\nPLandroidx/compose/animation/AnimationModifierKt;->getInvalidSize()J\nHSPLandroidx/compose/animation/AnimationModifierKt;->isValid-ozmzZPI(J)Z\nPLandroidx/compose/animation/AnimationModifierKt;->isValid-ozmzZPI(J)Z\nLandroidx/compose/animation/ChangeSize;\nHSPLandroidx/compose/animation/ChangeSize;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)V\nHPLandroidx/compose/animation/ChangeSize;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)V\nLandroidx/compose/animation/ColorVectorConverterKt;\nHSPLandroidx/compose/animation/ColorVectorConverterKt;-><clinit>()V\nPLandroidx/compose/animation/ColorVectorConverterKt;-><clinit>()V\nHSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/animation/ContentTransform;\nHSPLandroidx/compose/animation/ContentTransform;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V\nHPLandroidx/compose/animation/ContentTransform;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V\nHSPLandroidx/compose/animation/ContentTransform;->getInitialContentExit()Landroidx/compose/animation/ExitTransition;\nPLandroidx/compose/animation/ContentTransform;->getInitialContentExit()Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform;\nPLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform;\nHSPLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition;\nPLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F\nPLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F\nLandroidx/compose/animation/CrossfadeKt;\nHSPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/animation/CrossfadeKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/animation/CrossfadeKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/animation/CrossfadeKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/animation/CrossfadeKt;->AnimatedVisibility(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/animation/CrossfadeKt;->AnimatedVisibility(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/animation/CrossfadeKt;->access$getExitFinished(Landroidx/compose/animation/core/Transition;)Z\nHPLandroidx/compose/animation/CrossfadeKt;->access$getExitFinished(Landroidx/compose/animation/core/Transition;)Z\nHSPLandroidx/compose/animation/CrossfadeKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/EnterExitState;\nHPLandroidx/compose/animation/CrossfadeKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/EnterExitState;\nLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;-><init>(Landroidx/compose/runtime/State;I)V\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;-><init>(Landroidx/compose/runtime/State;I)V\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/EnterExitState;\nHSPLandroidx/compose/animation/EnterExitState;-><clinit>()V\nPLandroidx/compose/animation/EnterExitState;-><clinit>()V\nHSPLandroidx/compose/animation/EnterExitState;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/animation/EnterExitState;-><init>(Ljava/lang/String;I)V\nLandroidx/compose/animation/EnterExitTransitionElement;\nHSPLandroidx/compose/animation/EnterExitTransitionElement;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/animation/EnterExitTransitionElement;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/EnterExitTransitionElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/animation/EnterExitTransitionElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/animation/EnterExitTransitionElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/EnterExitTransitionElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/EnterExitTransitionElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/animation/EnterExitTransitionElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/animation/EnterExitTransitionKt;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;-><clinit>()V\nPLandroidx/compose/animation/EnterExitTransitionKt;-><clinit>()V\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/EnterTransition;\nPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/EnterTransition;\nHPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/TweenSpec;FI)Landroidx/compose/animation/EnterTransition;\nHPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/TweenSpec;FI)Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/TweenSpec;I)Landroidx/compose/animation/ExitTransition;\nHPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/TweenSpec;I)Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E$default(Landroidx/compose/animation/core/TweenSpec;F)Landroidx/compose/animation/EnterTransition;\nPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E$default(Landroidx/compose/animation/core/TweenSpec;F)Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/ExitTransition;\nPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/ExitTransition;\nHPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically$default(Landroidx/compose/animation/core/TweenSpec;Landroidx/compose/ui/BiasAlignment$Vertical;I)Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition;\nPLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition;\nPLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/TweenSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/ui/BiasAlignment;\nHPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/ui/BiasAlignment;\nLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;\nHSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;-><clinit>()V\nPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;-><clinit>()V\nHSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;-><init>()V\nPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;-><init>()V\nHSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$$inlined$animateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;\nHSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;I)V\nHPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;-><init>(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;I)V\nHSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/FiniteAnimationSpec;\nHPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/FiniteAnimationSpec;\nHSPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;\nHSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;-><clinit>()V\nPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;-><clinit>()V\nHSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;-><init>(I)V\nPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;-><init>(I)V\nHSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Z)Ljava/lang/Boolean;\nPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->invoke(Z)Ljava/lang/Boolean;\nLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;\nHSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;-><init>(ILkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;-><init>(ILkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->invoke-mHKZG7I(J)J\nLandroidx/compose/animation/EnterExitTransitionModifierNode;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getAlignment()Landroidx/compose/ui/Alignment;\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getAlignment()Landroidx/compose/ui/Alignment;\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getEnter()Landroidx/compose/animation/EnterTransition;\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getExit()Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getGraphicsLayerBlock()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getGraphicsLayerBlock()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->onAttach()V\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode;->onAttach()V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setEnter(Landroidx/compose/animation/EnterTransition;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setEnter(Landroidx/compose/animation/EnterTransition;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setExit(Landroidx/compose/animation/ExitTransition;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setExit(Landroidx/compose/animation/ExitTransition;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setGraphicsLayerBlock(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setGraphicsLayerBlock(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setOffsetAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setOffsetAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSizeAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSizeAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSlideAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSlideAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setTransition(Landroidx/compose/animation/core/Transition;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->setTransition(Landroidx/compose/animation/core/Transition;)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode;->slideTargetValueByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode;->slideTargetValueByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J\nLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;JJLandroidx/compose/animation/EnterExitTransitionModifierNode;)V\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;JJLandroidx/compose/animation/EnterExitTransitionModifierNode;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;-><init>(IJLjava/lang/Object;)V\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;-><init>(IJLjava/lang/Object;)V\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke-Bjo55l4(Landroidx/compose/animation/EnterExitState;)J\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$measure$animSize$1;->invoke-Bjo55l4(Landroidx/compose/animation/EnterExitState;)J\nLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;\nHSPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;-><init>(Landroidx/compose/animation/EnterExitTransitionModifierNode;I)V\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;-><init>(Landroidx/compose/animation/EnterExitTransitionModifierNode;I)V\nPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec;\nHPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec;\nPLandroidx/compose/animation/EnterExitTransitionModifierNode$slideSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterTransition;-><clinit>()V\nPLandroidx/compose/animation/EnterTransition;-><clinit>()V\nHSPLandroidx/compose/animation/EnterTransition;-><init>()V\nHPLandroidx/compose/animation/EnterTransition;-><init>()V\nHSPLandroidx/compose/animation/EnterTransition;->access$getNone$cp()Landroidx/compose/animation/EnterTransition;\nHPLandroidx/compose/animation/EnterTransition;->access$getNone$cp()Landroidx/compose/animation/EnterTransition;\nHSPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransition;)Landroidx/compose/animation/EnterTransition;\nHPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransition;)Landroidx/compose/animation/EnterTransition;\nLandroidx/compose/animation/EnterTransitionImpl;\nHSPLandroidx/compose/animation/EnterTransitionImpl;-><init>(Landroidx/compose/animation/TransitionData;)V\nHPLandroidx/compose/animation/EnterTransitionImpl;-><init>(Landroidx/compose/animation/TransitionData;)V\nHSPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;\nHPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;\nLandroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/ExitTransition;-><clinit>()V\nPLandroidx/compose/animation/ExitTransition;-><clinit>()V\nHSPLandroidx/compose/animation/ExitTransition;-><init>()V\nHPLandroidx/compose/animation/ExitTransition;-><init>()V\nHSPLandroidx/compose/animation/ExitTransition;->access$getNone$cp()Landroidx/compose/animation/ExitTransition;\nHPLandroidx/compose/animation/ExitTransition;->access$getNone$cp()Landroidx/compose/animation/ExitTransition;\nHSPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ExitTransition;\nHPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ExitTransition;\nLandroidx/compose/animation/ExitTransitionImpl;\nHSPLandroidx/compose/animation/ExitTransitionImpl;-><init>(Landroidx/compose/animation/TransitionData;)V\nHPLandroidx/compose/animation/ExitTransitionImpl;-><init>(Landroidx/compose/animation/TransitionData;)V\nHSPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;\nHPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;\nLandroidx/compose/animation/Fade;\nHSPLandroidx/compose/animation/Fade;-><init>(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V\nHPLandroidx/compose/animation/Fade;-><init>(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V\nHSPLandroidx/compose/animation/Fade;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/Fade;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/Fade;->getAlpha()F\nHPLandroidx/compose/animation/Fade;->getAlpha()F\nHSPLandroidx/compose/animation/Fade;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nPLandroidx/compose/animation/Fade;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nLandroidx/compose/animation/FlingCalculator;\nHSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V\nHPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V\nLandroidx/compose/animation/FlingCalculatorKt;\nHSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V\nPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V\nLandroidx/compose/animation/LayoutModifierNodeWithPassThroughIntrinsics;\nHSPLandroidx/compose/animation/LayoutModifierNodeWithPassThroughIntrinsics;-><init>()V\nHPLandroidx/compose/animation/LayoutModifierNodeWithPassThroughIntrinsics;-><init>()V\nLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;\nHSPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;-><init>()V\nPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;-><init>()V\nLandroidx/compose/animation/Scale;\nHSPLandroidx/compose/animation/Scale;-><init>(FJLandroidx/compose/animation/core/FiniteAnimationSpec;)V\nHPLandroidx/compose/animation/Scale;-><init>(FJLandroidx/compose/animation/core/FiniteAnimationSpec;)V\nHSPLandroidx/compose/animation/Scale;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/animation/Scale;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/Scale;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nPLandroidx/compose/animation/Scale;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nHSPLandroidx/compose/animation/Scale;->getScale()F\nPLandroidx/compose/animation/Scale;->getScale()F\nHSPLandroidx/compose/animation/Scale;->getTransformOrigin-SzJe1aQ()J\nHPLandroidx/compose/animation/Scale;->getTransformOrigin-SzJe1aQ()J\nLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(FFFF)F\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(FFFF)F\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(FII)I\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(II)Lkotlin/collections/IntIterator;\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(II)Lkotlin/collections/IntIterator;\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(III)I\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(III)I\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/ComposerImpl;ILkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/ComposerImpl;ILkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;I)V\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;I)V\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;II)V\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;II)V\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)I\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)I\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)J\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(JII)J\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/layout/MeasurePolicy;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Lkotlin/jvm/functions/Function2;\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/layout/MeasurePolicy;Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/Object;)V\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;I)Ljava/lang/String;\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;I)Ljava/lang/String;\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;II)I\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;II)I\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/util/List;II)I\nPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Ljava/util/List;II)I\nHSPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;\nHPLandroidx/compose/animation/Scale$$ExternalSyntheticOutline0;->m(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;\nLandroidx/compose/animation/SingleValueAnimationKt;\nHSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V\nPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V\nHSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;\nHPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;\nLandroidx/compose/animation/SizeTransform;\nLandroidx/compose/animation/SizeTransformImpl;\nHSPLandroidx/compose/animation/SizeTransformImpl;-><init>(ZLkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/animation/SizeTransformImpl;-><init>(ZLkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/animation/SizeTransformImpl;->createAnimationSpec-TemP2vQ(JJ)Landroidx/compose/animation/core/FiniteAnimationSpec;\nPLandroidx/compose/animation/SizeTransformImpl;->createAnimationSpec-TemP2vQ(JJ)Landroidx/compose/animation/core/FiniteAnimationSpec;\nHSPLandroidx/compose/animation/SizeTransformImpl;->getClip()Z\nPLandroidx/compose/animation/SizeTransformImpl;->getClip()Z\nLandroidx/compose/animation/Slide;\nHSPLandroidx/compose/animation/Slide;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/animation/Slide;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/Slide;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/animation/Slide;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nPLandroidx/compose/animation/Slide;->getSlideOffset()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;\nHSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V\nHPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V\nLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;\nHSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V\nPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V\nHSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F\nPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F\nHSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/DecayAnimationSpec;\nHPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/DecayAnimationSpec;\nLandroidx/compose/animation/TransitionData;\nHSPLandroidx/compose/animation/TransitionData;-><init>(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;Z)V\nHPLandroidx/compose/animation/TransitionData;-><init>(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;Z)V\nHSPLandroidx/compose/animation/TransitionData;-><init>(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;ZI)V\nHPLandroidx/compose/animation/TransitionData;-><init>(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;ZI)V\nHSPLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/TransitionData;->getChangeSize()Landroidx/compose/animation/ChangeSize;\nHPLandroidx/compose/animation/TransitionData;->getChangeSize()Landroidx/compose/animation/ChangeSize;\nHSPLandroidx/compose/animation/TransitionData;->getFade()Landroidx/compose/animation/Fade;\nHPLandroidx/compose/animation/TransitionData;->getFade()Landroidx/compose/animation/Fade;\nHSPLandroidx/compose/animation/TransitionData;->getHold()Z\nPLandroidx/compose/animation/TransitionData;->getHold()Z\nHSPLandroidx/compose/animation/TransitionData;->getScale()Landroidx/compose/animation/Scale;\nHPLandroidx/compose/animation/TransitionData;->getScale()Landroidx/compose/animation/Scale;\nHSPLandroidx/compose/animation/TransitionData;->getSlide()Landroidx/compose/animation/Slide;\nHPLandroidx/compose/animation/TransitionData;->getSlide()Landroidx/compose/animation/Slide;\nLandroidx/compose/animation/core/Animatable;\nHSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;I)V\nPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;I)V\nHSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V\nPLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V\nHSPLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;)V\nPLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;)V\nHSPLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V\nPLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/animation/core/AnimationState;\nPLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/animation/core/AnimationState;\nHSPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState;\nPLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState;\nHSPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Animatable;->isRunning()Z\nPLandroidx/compose/animation/core/Animatable;->isRunning()Z\nHSPLandroidx/compose/animation/core/Animatable;->updateBounds$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Float;)V\nHPLandroidx/compose/animation/core/Animatable;->updateBounds$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Float;)V\nLandroidx/compose/animation/core/Animatable$runAnimation$2;\nHSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/Animatable$runAnimation$2$1;\nHSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V\nPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V\nHSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/AnimateAsStateKt;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V\nPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V\nHSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;\nHPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;\nHPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;\nLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V\nPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;\nLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/Animation;\nHSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z\nHPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z\nLandroidx/compose/animation/core/AnimationResult;\nHSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V\nPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;I)V\nLandroidx/compose/animation/core/AnimationScope;\nHSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J\nPLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J\nHSPLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J\nPLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J\nHSPLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J\nPLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J\nHSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z\nHPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z\nHSPLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V\nPLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V\nHSPLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V\nPLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V\nHSPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release()V\nPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release()V\nHSPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V\nPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V\nLandroidx/compose/animation/core/AnimationSpec;\nLandroidx/compose/animation/core/AnimationState;\nHSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V\nHPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V\nHSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V\nHPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V\nHSPLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J\nPLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J\nHSPLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/AnimationState;->isRunning()Z\nPLandroidx/compose/animation/core/AnimationState;->isRunning()Z\nHSPLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V\nPLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V\nHSPLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V\nPLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V\nHSPLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V\nPLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V\nHSPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V\nPLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V\nLandroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/AnimationVector;-><init>()V\nHPLandroidx/compose/animation/core/AnimationVector;-><init>()V\nLandroidx/compose/animation/core/AnimationVector1D;\nHSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(F)V\nHPLandroidx/compose/animation/core/AnimationVector1D;-><init>(F)V\nHSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F\nHPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F\nHSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I\nHPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I\nHSPLandroidx/compose/animation/core/AnimationVector1D;->getValue()F\nPLandroidx/compose/animation/core/AnimationVector1D;->getValue()F\nHSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V\nHPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V\nHSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V\nHPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V\nLandroidx/compose/animation/core/AnimationVector2D;\nHSPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V\nPLandroidx/compose/animation/core/AnimationVector2D;-><init>(FF)V\nHSPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F\nPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F\nHSPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I\nPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I\nHSPLandroidx/compose/animation/core/AnimationVector2D;->getV1()F\nPLandroidx/compose/animation/core/AnimationVector2D;->getV1()F\nHSPLandroidx/compose/animation/core/AnimationVector2D;->getV2()F\nPLandroidx/compose/animation/core/AnimationVector2D;->getV2()F\nHSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/AnimationVector2D;->reset$animation_core_release()V\nPLandroidx/compose/animation/core/AnimationVector2D;->reset$animation_core_release()V\nHSPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(FI)V\nHPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(FI)V\nLandroidx/compose/animation/core/AnimationVector3D;\nHSPLandroidx/compose/animation/core/AnimationVector3D;-><init>(FFF)V\nPLandroidx/compose/animation/core/AnimationVector3D;-><init>(FFF)V\nLandroidx/compose/animation/core/AnimationVector4D;\nHSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V\nHPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V\nHSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F\nHPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F\nHSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I\nHPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I\nHSPLandroidx/compose/animation/core/AnimationVector4D;->getV1()F\nPLandroidx/compose/animation/core/AnimationVector4D;->getV1()F\nHSPLandroidx/compose/animation/core/AnimationVector4D;->getV2()F\nPLandroidx/compose/animation/core/AnimationVector4D;->getV2()F\nHSPLandroidx/compose/animation/core/AnimationVector4D;->getV3()F\nPLandroidx/compose/animation/core/AnimationVector4D;->getV3()F\nHSPLandroidx/compose/animation/core/AnimationVector4D;->getV4()F\nPLandroidx/compose/animation/core/AnimationVector4D;->getV4()F\nHSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V\nHPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V\nHSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V\nHPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V\nLandroidx/compose/animation/core/Animations;\nLandroidx/compose/animation/core/ComplexDouble;\nHSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V\nHPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V\nHSPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D\nHPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D\nHSPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D\nHPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D\nHSPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V\nHPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V\nHSPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V\nHPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V\nLandroidx/compose/animation/core/CubicBezierEasing;\nHSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFFF)V\nPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFFF)V\nHSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F\nHPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F\nLandroidx/compose/animation/core/DecayAnimationSpec;\nLandroidx/compose/animation/core/DecayAnimationSpecImpl;\nHSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V\nHPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V\nLandroidx/compose/animation/core/DurationBasedAnimationSpec;\nLandroidx/compose/animation/core/Easing;\nLandroidx/compose/animation/core/EasingKt;\nHSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V\nPLandroidx/compose/animation/core/EasingKt;-><clinit>()V\nHSPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/CubicBezierEasing;\nPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/CubicBezierEasing;\nHSPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing;\nPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing;\nHSPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing;\nPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing;\nHSPLandroidx/compose/animation/core/EasingKt;->getLinearOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing;\nPLandroidx/compose/animation/core/EasingKt;->getLinearOutSlowInEasing()Landroidx/compose/animation/core/CubicBezierEasing;\nLandroidx/compose/animation/core/EasingKt$LinearEasing$1;\nHSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><clinit>()V\nPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><clinit>()V\nHSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><init>()V\nPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><init>()V\nHSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F\nPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F\nLandroidx/compose/animation/core/FiniteAnimationSpec;\nLandroidx/compose/animation/core/FloatAnimationSpec;\nLandroidx/compose/animation/core/FloatDecayAnimationSpec;\nLandroidx/compose/animation/core/FloatSpringSpec;\nHSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V\nHPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V\nHSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J\nHPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J\nHSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F\nPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F\nLandroidx/compose/animation/core/FloatTweenSpec;\nHSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V\nHPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V\nHSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F\nHPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F\nHSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F\nHPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F\nLandroidx/compose/animation/core/InfiniteRepeatableSpec;\nHSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;-><init>(Landroidx/compose/animation/core/DurationBasedAnimationSpec;IJ)V\nPLandroidx/compose/animation/core/InfiniteRepeatableSpec;-><init>(Landroidx/compose/animation/core/DurationBasedAnimationSpec;IJ)V\nHSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nLandroidx/compose/animation/core/InfiniteTransition;\nHSPLandroidx/compose/animation/core/InfiniteTransition;-><init>()V\nPLandroidx/compose/animation/core/InfiniteTransition;-><init>()V\nHSPLandroidx/compose/animation/core/InfiniteTransition;->access$getStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;)J\nPLandroidx/compose/animation/core/InfiniteTransition;->access$getStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;)J\nHSPLandroidx/compose/animation/core/InfiniteTransition;->access$get_animations$p(Landroidx/compose/animation/core/InfiniteTransition;)Landroidx/compose/runtime/collection/MutableVector;\nPLandroidx/compose/animation/core/InfiniteTransition;->access$get_animations$p(Landroidx/compose/animation/core/InfiniteTransition;)Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/animation/core/InfiniteTransition;->access$onFrame(Landroidx/compose/animation/core/InfiniteTransition;J)V\nPLandroidx/compose/animation/core/InfiniteTransition;->access$onFrame(Landroidx/compose/animation/core/InfiniteTransition;J)V\nHSPLandroidx/compose/animation/core/InfiniteTransition;->access$setRefreshChildNeeded(Landroidx/compose/animation/core/InfiniteTransition;Z)V\nPLandroidx/compose/animation/core/InfiniteTransition;->access$setRefreshChildNeeded(Landroidx/compose/animation/core/InfiniteTransition;Z)V\nHSPLandroidx/compose/animation/core/InfiniteTransition;->access$setStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;J)V\nPLandroidx/compose/animation/core/InfiniteTransition;->access$setStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;J)V\nHSPLandroidx/compose/animation/core/InfiniteTransition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V\nPLandroidx/compose/animation/core/InfiniteTransition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V\nHSPLandroidx/compose/animation/core/InfiniteTransition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V\nPLandroidx/compose/animation/core/InfiniteTransition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V\nHSPLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V\nPLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V\nLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;-><init>(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;)V\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;-><init>(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;)V\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getInitialValue$animation_core_release()Ljava/lang/Object;\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getInitialValue$animation_core_release()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getTargetValue$animation_core_release()Ljava/lang/Object;\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getTargetValue$animation_core_release()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object;\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->isFinished$animation_core_release()Z\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->isFinished$animation_core_release()Z\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(J)V\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(J)V\nHSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->reset$animation_core_release()V\nPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->reset$animation_core_release()V\nLandroidx/compose/animation/core/InfiniteTransition$run$1;\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/animation/core/InfiniteTransition$run$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/InfiniteTransition$run$1$1;\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/InfiniteTransition$run$1$2;\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$1$2;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/animation/core/InfiniteTransition$run$1$2;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/animation/core/InfiniteTransition$run$2;\nHSPLandroidx/compose/animation/core/InfiniteTransition$run$2;-><init>(Landroidx/compose/animation/core/InfiniteTransition;I)V\nPLandroidx/compose/animation/core/InfiniteTransition$run$2;-><init>(Landroidx/compose/animation/core/InfiniteTransition;I)V\nLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;\nHSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;-><init>(Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V\nPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;-><init>(Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Number;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V\nHSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/animation/core/KeyframesSpec;\nHSPLandroidx/compose/animation/core/KeyframesSpec;-><init>(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V\nHPLandroidx/compose/animation/core/KeyframesSpec;-><init>(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V\nHSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;\nPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;\nHSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nHSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec;\nHPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec;\nLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;-><init>(Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->setEasing$animation_core_release(Landroidx/compose/animation/core/Easing;)V\nPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->setEasing$animation_core_release(Landroidx/compose/animation/core/Easing;)V\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->toPair$animation_core_release(Lkotlin/jvm/functions/Function1;)Lkotlin/Pair;\nPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->toPair$animation_core_release(Lkotlin/jvm/functions/Function1;)Lkotlin/Pair;\nLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;-><init>()V\nHPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;-><init>()V\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->at(ILjava/lang/Object;)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;\nHPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->at(ILjava/lang/Object;)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDurationMillis()I\nPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDurationMillis()I\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getKeyframes$animation_core_release()Ljava/util/LinkedHashMap;\nPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getKeyframes$animation_core_release()Ljava/util/LinkedHashMap;\nHSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->setDurationMillis(I)V\nPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->setDurationMillis(I)V\nLandroidx/compose/animation/core/Motion;\nHSPLandroidx/compose/animation/core/Motion;-><clinit>()V\nPLandroidx/compose/animation/core/Motion;-><clinit>()V\nHSPLandroidx/compose/animation/core/Motion;->Animatable$default(F)Landroidx/compose/animation/core/Animatable;\nHPLandroidx/compose/animation/core/Motion;->Animatable$default(F)Landroidx/compose/animation/core/Animatable;\nHSPLandroidx/compose/animation/core/Motion;->AnimationState$default(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Float;Ljava/lang/Float;)Landroidx/compose/animation/core/AnimationState;\nPLandroidx/compose/animation/core/Motion;->AnimationState$default(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Float;Ljava/lang/Float;)Landroidx/compose/animation/core/AnimationState;\nHSPLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D;\nPLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D;\nHSPLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D;\nPLandroidx/compose/animation/core/Motion;->access$getNegativeInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D;\nHSPLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D;\nPLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds1D$p()Landroidx/compose/animation/core/AnimationVector1D;\nHSPLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D;\nPLandroidx/compose/animation/core/Motion;->access$getPositiveInfinityBounds4D$p()Landroidx/compose/animation/core/AnimationVector4D;\nHSPLandroidx/compose/animation/core/Motion;->animateFloat(Landroidx/compose/animation/core/InfiniteTransition;FLandroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;\nPLandroidx/compose/animation/core/Motion;->animateFloat(Landroidx/compose/animation/core/InfiniteTransition;FLandroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;\nHSPLandroidx/compose/animation/core/Motion;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;\nPLandroidx/compose/animation/core/Motion;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Number;Ljava/lang/Number;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;\nHSPLandroidx/compose/animation/core/Motion;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;\nHPLandroidx/compose/animation/core/Motion;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;\nHSPLandroidx/compose/animation/core/Motion;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/Motion;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/Motion;->createChildTransitionInternal(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition;\nHPLandroidx/compose/animation/core/Motion;->createChildTransitionInternal(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition;\nHSPLandroidx/compose/animation/core/Motion;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$DeferredAnimation;\nHPLandroidx/compose/animation/core/Motion;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$DeferredAnimation;\nHSPLandroidx/compose/animation/core/Motion;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$TransitionAnimationState;\nHPLandroidx/compose/animation/core/Motion;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$TransitionAnimationState;\nHSPLandroidx/compose/animation/core/Motion;->generateDecayAnimationSpec(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec;\nPLandroidx/compose/animation/core/Motion;->generateDecayAnimationSpec(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec;\nHSPLandroidx/compose/animation/core/Motion;->infiniteRepeatable-9IiC70o$default(Landroidx/compose/animation/core/DurationBasedAnimationSpec;II)Landroidx/compose/animation/core/InfiniteRepeatableSpec;\nPLandroidx/compose/animation/core/Motion;->infiniteRepeatable-9IiC70o$default(Landroidx/compose/animation/core/DurationBasedAnimationSpec;II)Landroidx/compose/animation/core/InfiniteRepeatableSpec;\nHSPLandroidx/compose/animation/core/Motion;->keyframes(Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/KeyframesSpec;\nPLandroidx/compose/animation/core/Motion;->keyframes(Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/KeyframesSpec;\nHSPLandroidx/compose/animation/core/Motion;->rememberInfiniteTransition(Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition;\nPLandroidx/compose/animation/core/Motion;->rememberInfiniteTransition(Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition;\nHSPLandroidx/compose/animation/core/Motion;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec;\nHPLandroidx/compose/animation/core/Motion;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec;\nHSPLandroidx/compose/animation/core/Motion;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec;\nHPLandroidx/compose/animation/core/Motion;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec;\nHSPLandroidx/compose/animation/core/Motion;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition;\nHPLandroidx/compose/animation/core/Motion;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition;\nLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;\nHSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;-><clinit>()V\nPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;-><clinit>()V\nHSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;II)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;II)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Lkotlin/coroutines/CoroutineContext$Element;)V\nPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->m(Lkotlin/coroutines/CoroutineContext$Element;)V\nHSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->ordinal(I)I\nHPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->ordinal(I)I\nHSPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->values(I)[I\nPLandroidx/compose/animation/core/Motion$$ExternalSyntheticOutline0;->values(I)[I\nLandroidx/compose/animation/core/MutableTransitionState;\nHSPLandroidx/compose/animation/core/MutableTransitionState;-><init>(Ljava/lang/Object;)V\nPLandroidx/compose/animation/core/MutableTransitionState;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/MutableTransitionState;->getCurrentState()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/MutableTransitionState;->getCurrentState()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/MutableTransitionState;->getTargetState()Ljava/lang/Object;\nPLandroidx/compose/animation/core/MutableTransitionState;->getTargetState()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/MutableTransitionState;->setCurrentState$animation_core_release(Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/MutableTransitionState;->setCurrentState$animation_core_release(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/MutableTransitionState;->setRunning$animation_core_release(Z)V\nHPLandroidx/compose/animation/core/MutableTransitionState;->setRunning$animation_core_release(Z)V\nHSPLandroidx/compose/animation/core/MutableTransitionState;->setTargetState(Ljava/lang/Boolean;)V\nPLandroidx/compose/animation/core/MutableTransitionState;->setTargetState(Ljava/lang/Boolean;)V\nLandroidx/compose/animation/core/MutatorMutex;\nHSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V\nPLandroidx/compose/animation/core/MutatorMutex;-><init>()V\nHSPLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference;\nPLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference;\nHSPLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex;\nPLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex;\nHSPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V\nHPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V\nLandroidx/compose/animation/core/MutatorMutex$Mutator;\nHSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V\nPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(ILkotlinx/coroutines/Job;)V\nLandroidx/compose/animation/core/MutatorMutex$mutate$2;\nHSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/RepeatableSpec;\nLandroidx/compose/animation/core/SpringSimulation;\nHSPLandroidx/compose/animation/core/SpringSimulation;-><init>()V\nHPLandroidx/compose/animation/core/SpringSimulation;-><init>()V\nHSPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F\nPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F\nHSPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F\nPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F\nHSPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V\nHPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V\nHSPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V\nHPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V\nLandroidx/compose/animation/core/SpringSpec;\nHSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V\nHPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V\nHSPLandroidx/compose/animation/core/SpringSpec;-><init>(Ljava/lang/Object;)V\nPLandroidx/compose/animation/core/SpringSpec;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nLandroidx/compose/animation/core/SuspendAnimationKt;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt;->access$doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/animation/core/SuspendAnimationKt;->access$doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F\nHPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F\nHSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V\nHPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V\nLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;-><clinit>()V\nPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;-><clinit>()V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;-><init>(I)V\nPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;-><init>(I)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/TargetBasedAnimation;\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V\nHPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J\nHPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;\nPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z\nPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z\nLandroidx/compose/animation/core/Transition;\nHSPLandroidx/compose/animation/core/Transition;-><init>(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V\nHPLandroidx/compose/animation/core/Transition;-><init>(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V\nHSPLandroidx/compose/animation/core/Transition;->access$onChildAnimationUpdated(Landroidx/compose/animation/core/Transition;)V\nHPLandroidx/compose/animation/core/Transition;->access$onChildAnimationUpdated(Landroidx/compose/animation/core/Transition;)V\nHSPLandroidx/compose/animation/core/Transition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V\nHPLandroidx/compose/animation/core/Transition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V\nHSPLandroidx/compose/animation/core/Transition;->addTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V\nPLandroidx/compose/animation/core/Transition;->addTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V\nHSPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Transition;->getLabel()Ljava/lang/String;\nPLandroidx/compose/animation/core/Transition;->getLabel()Ljava/lang/String;\nHSPLandroidx/compose/animation/core/Transition;->getPlayTimeNanos()J\nPLandroidx/compose/animation/core/Transition;->getPlayTimeNanos()J\nHSPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment;\nHPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment;\nHSPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Transition;->isSeeking()Z\nHPLandroidx/compose/animation/core/Transition;->isSeeking()Z\nHSPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(JF)V\nHPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(JF)V\nHSPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V\nHPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V\nHSPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V\nPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V\nHSPLandroidx/compose/animation/core/Transition;->removeTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V\nPLandroidx/compose/animation/core/Transition;->removeTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)V\nHSPLandroidx/compose/animation/core/Transition;->setSeeking$animation_core_release(Z)V\nPLandroidx/compose/animation/core/Transition;->setSeeking$animation_core_release(Z)V\nHSPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nLandroidx/compose/animation/core/Transition$DeferredAnimation;\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V\nPLandroidx/compose/animation/core/Transition$DeferredAnimation;-><init>(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;\nHPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->getData$animation_core_release()Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;\nHPLandroidx/compose/animation/core/Transition$DeferredAnimation;->getData$animation_core_release()Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;\nLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;-><init>(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;-><init>(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getAnimation()Landroidx/compose/animation/core/Transition$TransitionAnimationState;\nPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getAnimation()Landroidx/compose/animation/core/Transition$TransitionAnimationState;\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTargetValueByState(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTargetValueByState(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTransitionSpec(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTransitionSpec(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V\nHPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V\nLandroidx/compose/animation/core/Transition$Segment;\nHSPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z\nLandroidx/compose/animation/core/Transition$SegmentImpl;\nHSPLandroidx/compose/animation/core/Transition$SegmentImpl;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/animation/core/Transition$SegmentImpl;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object;\nLandroidx/compose/animation/core/Transition$TransitionAnimationState;\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;)V\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;)V\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation;\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation;\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->isFinished$animation_core_release()Z\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->isFinished$animation_core_release()Z\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(JF)V\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(JF)V\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->resetAnimation$animation_core_release()V\nPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->resetAnimation$animation_core_release()V\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V\nHSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V\nHPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V\nLandroidx/compose/animation/core/Transition$animateTo$1$1;\nHSPLandroidx/compose/animation/core/Transition$animateTo$1$1;-><init>(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/animation/core/Transition$animateTo$1$1;-><init>(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/Transition$animateTo$1$1$1;\nHSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;-><init>(Landroidx/compose/animation/core/Transition;F)V\nHPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;-><init>(Landroidx/compose/animation/core/Transition;F)V\nHSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/Transition$animateTo$2;\nHSPLandroidx/compose/animation/core/Transition$animateTo$2;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;II)V\nHPLandroidx/compose/animation/core/Transition$animateTo$2;-><init>(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;II)V\nHSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/Transition$totalDurationNanos$2;\nHSPLandroidx/compose/animation/core/Transition$totalDurationNanos$2;-><init>(Landroidx/compose/animation/core/Transition;)V\nPLandroidx/compose/animation/core/Transition$totalDurationNanos$2;-><init>(Landroidx/compose/animation/core/Transition;)V\nLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;\nHSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;\nPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;\nHSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;I)V\nPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/animation/core/Transition;I)V\nHSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/animation/core/TweenSpec;\nHSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V\nHPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V\nHSPLandroidx/compose/animation/core/TweenSpec;-><init>(ILandroidx/compose/animation/core/Easing;I)V\nPLandroidx/compose/animation/core/TweenSpec;-><init>(ILandroidx/compose/animation/core/Easing;I)V\nHSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nHSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;\nPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;\nHSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nLandroidx/compose/animation/core/TwoWayConverter;\nLandroidx/compose/animation/core/TwoWayConverterImpl;\nHSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/animation/core/VectorConvertersKt;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V\nPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$1()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$1()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$2()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1$2()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$1()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$1()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$1()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$2()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2$2()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$2()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3$1()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3$1()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3()Landroidx/compose/animation/core/TwoWayConverter;\nPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter$3()Landroidx/compose/animation/core/TwoWayConverter;\nHSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter()Landroidx/compose/animation/core/TwoWayConverter;\nHPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter()Landroidx/compose/animation/core/TwoWayConverter;\nLandroidx/compose/animation/core/VectorizedAnimationSpec;\nHSPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;\nHSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nHSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z\nHPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z\nLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/Animations;)V\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/Animations;)V\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V\nPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V\nHSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;\nHPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;\nLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;\nHSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;-><init>(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;IJ)V\nPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;-><init>(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;IJ)V\nHSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J\nPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J\nLandroidx/compose/animation/core/VectorizedKeyframesSpec;\nHSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;-><init>(ILjava/util/LinkedHashMap;)V\nPLandroidx/compose/animation/core/VectorizedKeyframesSpec;-><init>(ILjava/util/LinkedHashMap;)V\nHSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I\nPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I\nHSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I\nPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I\nHSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/core/VectorizedSpringSpec;\nHSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V\nHPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V\nHSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/core/VectorizedTweenSpec;\nHSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V\nHPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V\nHSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I\nPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I\nHSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I\nPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I\nHSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/core/VisibilityThresholdsKt;\nHSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V\nPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V\nHSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThresholdMap()Ljava/util/Map;\nPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThresholdMap()Ljava/util/Map;\nLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;\nHSPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;-><init>(ZLandroidx/compose/animation/graphics/vector/AnimatedImageVector;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;-><init>(ZLandroidx/compose/animation/graphics/vector/AnimatedImageVector;ILandroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/res/AnimatedVectorPainterResources_androidKt$rememberAnimatedVectorPainter$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;\nHSPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->animatedVectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/animation/graphics/vector/AnimatedImageVector;\nHPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->animatedVectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/animation/graphics/vector/AnimatedImageVector;\nHSPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->rememberAnimatedVectorPainter(Landroidx/compose/animation/graphics/vector/AnimatedImageVector;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter;\nHPLandroidx/compose/animation/graphics/res/AnimatedVectorResources_androidKt;->rememberAnimatedVectorPainter(Landroidx/compose/animation/graphics/vector/AnimatedImageVector;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter;\nLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;-><clinit>()V\nPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->getAccelerateDecelerateEasing()Landroidx/compose/animation/core/Easing;\nPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->getAccelerateDecelerateEasing()Landroidx/compose/animation/core/Easing;\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadAnimatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/Animator;\nHPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadAnimatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/Animator;\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadInterpolatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/core/Easing;\nHPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt;->loadInterpolatorResource(Landroid/content/res/Resources;ILandroid/content/res/Resources$Theme;)Landroidx/compose/animation/core/Easing;\nLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;-><clinit>()V\nPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;-><init>(I)V\nPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;-><init>(I)V\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->transform(F)F\nHPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$AccelerateEasing$1;->transform(F)F\nLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;-><init>(Landroid/view/animation/BaseInterpolator;)V\nPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;-><init>(Landroid/view/animation/BaseInterpolator;)V\nHSPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;->transform(F)F\nPLandroidx/compose/animation/graphics/res/AnimatorResources_androidKt$toEasing$1;->transform(F)F\nLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt;\nHSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt;-><clinit>()V\nPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt;-><clinit>()V\nLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;\nHSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;-><clinit>()V\nPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;-><init>()V\nPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;-><init>()V\nHSPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/res/ComposableSingletons$AnimatedVectorPainterResources_androidKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/AnimatedImageVector;\nHSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;-><clinit>()V\nPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/util/ArrayList;)V\nHPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/util/ArrayList;)V\nHSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTargets$animation_graphics_release()Ljava/util/List;\nPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTargets$animation_graphics_release()Ljava/util/List;\nHSPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTotalDuration()I\nPLandroidx/compose/animation/graphics/vector/AnimatedImageVector;->getTotalDuration()I\nLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;\nHSPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;-><init>(Ljava/lang/String;Landroidx/compose/animation/graphics/vector/Animator;)V\nPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;-><init>(Ljava/lang/String;Landroidx/compose/animation/graphics/vector/Animator;)V\nHSPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getAnimator()Landroidx/compose/animation/graphics/vector/Animator;\nPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getAnimator()Landroidx/compose/animation/graphics/vector/Animator;\nHSPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getName()Ljava/lang/String;\nPLandroidx/compose/animation/graphics/vector/AnimatedVectorTarget;->getName()Ljava/lang/String;\nLandroidx/compose/animation/graphics/vector/Animator;\nHSPLandroidx/compose/animation/graphics/vector/Animator;-><init>()V\nHPLandroidx/compose/animation/graphics/vector/Animator;-><init>()V\nHSPLandroidx/compose/animation/graphics/vector/Animator;->Configure(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;ILandroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/animation/graphics/vector/Animator;->Configure(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;ILandroidx/compose/runtime/Composer;I)V\nLandroidx/compose/animation/graphics/vector/Animator$Configure$2;\nHSPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;-><init>(Landroidx/compose/animation/graphics/vector/Animator;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;II)V\nPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;-><init>(Landroidx/compose/animation/graphics/vector/Animator;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/graphics/vector/StateVectorConfig;II)V\nHSPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/vector/Animator$Configure$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/AnimatorSet;\nHSPLandroidx/compose/animation/graphics/vector/AnimatorSet;-><init>(Ljava/util/ArrayList;I)V\nHPLandroidx/compose/animation/graphics/vector/AnimatorSet;-><init>(Ljava/util/ArrayList;I)V\nHSPLandroidx/compose/animation/graphics/vector/AnimatorSet;->collectPropertyValues(IILjava/util/LinkedHashMap;)V\nHPLandroidx/compose/animation/graphics/vector/AnimatorSet;->collectPropertyValues(IILjava/util/LinkedHashMap;)V\nHSPLandroidx/compose/animation/graphics/vector/AnimatorSet;->getTotalDuration()I\nPLandroidx/compose/animation/graphics/vector/AnimatorSet;->getTotalDuration()I\nLandroidx/compose/animation/graphics/vector/CombinedSpec;\nHSPLandroidx/compose/animation/graphics/vector/CombinedSpec;-><init>(Ljava/util/ArrayList;)V\nPLandroidx/compose/animation/graphics/vector/CombinedSpec;-><init>(Ljava/util/ArrayList;)V\nHSPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nHSPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nHPLandroidx/compose/animation/graphics/vector/CombinedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nLandroidx/compose/animation/graphics/vector/FloatPropertyValues;\nHSPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;-><init>()V\nPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;-><init>()V\nHSPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;\nHPLandroidx/compose/animation/graphics/vector/FloatPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;\nLandroidx/compose/animation/graphics/vector/Keyframe;\nHSPLandroidx/compose/animation/graphics/vector/Keyframe;-><init>(FLjava/lang/Object;Landroidx/compose/animation/core/Easing;)V\nHPLandroidx/compose/animation/graphics/vector/Keyframe;-><init>(FLjava/lang/Object;Landroidx/compose/animation/core/Easing;)V\nHSPLandroidx/compose/animation/graphics/vector/Keyframe;->getFraction()F\nPLandroidx/compose/animation/graphics/vector/Keyframe;->getFraction()F\nHSPLandroidx/compose/animation/graphics/vector/Keyframe;->getInterpolator()Landroidx/compose/animation/core/Easing;\nPLandroidx/compose/animation/graphics/vector/Keyframe;->getInterpolator()Landroidx/compose/animation/core/Easing;\nHSPLandroidx/compose/animation/graphics/vector/Keyframe;->getValue()Ljava/lang/Object;\nPLandroidx/compose/animation/graphics/vector/Keyframe;->getValue()Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/ObjectAnimator;\nHSPLandroidx/compose/animation/graphics/vector/ObjectAnimator;-><init>(IIIILjava/util/ArrayList;)V\nPLandroidx/compose/animation/graphics/vector/ObjectAnimator;-><init>(IIIILjava/util/ArrayList;)V\nHSPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->collectPropertyValues(IILjava/util/LinkedHashMap;)V\nHPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->collectPropertyValues(IILjava/util/LinkedHashMap;)V\nHSPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->getTotalDuration()I\nPLandroidx/compose/animation/graphics/vector/ObjectAnimator;->getTotalDuration()I\nLandroidx/compose/animation/graphics/vector/PathPropertyValues;\nHSPLandroidx/compose/animation/graphics/vector/PathPropertyValues;-><init>()V\nPLandroidx/compose/animation/graphics/vector/PathPropertyValues;-><init>()V\nHSPLandroidx/compose/animation/graphics/vector/PathPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;\nHPLandroidx/compose/animation/graphics/vector/PathPropertyValues;->createState(Landroidx/compose/animation/core/Transition;Ljava/lang/String;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;\nLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;\nHSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;-><init>(Landroidx/compose/animation/graphics/vector/PathPropertyValues;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V\nPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;-><init>(Landroidx/compose/animation/graphics/vector/PathPropertyValues;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V\nHSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;\nHSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;-><init>(I)V\nPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;-><init>(I)V\nHSPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/vector/PathPropertyValues$createState$timeState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/PropertyValues;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValues;-><init>()V\nPLandroidx/compose/animation/graphics/vector/PropertyValues;-><init>()V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValues;->getTimestamps()Ljava/util/ArrayList;\nPLandroidx/compose/animation/graphics/vector/PropertyValues;->getTimestamps()Ljava/util/ArrayList;\nLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;-><init>(Landroidx/compose/animation/graphics/vector/PropertyValues;I)V\nPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;-><init>(Landroidx/compose/animation/graphics/vector/PropertyValues;I)V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/vector/PropertyValues$createAnimationSpec$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolder;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder;-><init>()V\nHPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder;-><init>()V\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;-><init>(Ljava/lang/String;)V\nPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;-><init>(Ljava/lang/String;)V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;->getPropertyName()Ljava/lang/String;\nPLandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;->getPropertyName()Ljava/lang/String;\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolder2D;\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor;\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;-><init>(ILandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;I)V\nHPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;-><init>(ILandroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;I)V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V\nHPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderColor$asKeyframeSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;-><init>(Ljava/lang/String;Ljava/util/ArrayList;)V\nPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;-><init>(Ljava/lang/String;Ljava/util/ArrayList;)V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;->getAnimatorKeyframes()Ljava/util/List;\nPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderFloat;->getAnimatorKeyframes()Ljava/util/List;\nLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;-><init>(Ljava/lang/String;Ljava/util/ArrayList;)V\nPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;-><init>(Ljava/lang/String;Ljava/util/ArrayList;)V\nHSPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;->interpolate(F)Ljava/util/ArrayList;\nHPLandroidx/compose/animation/graphics/vector/PropertyValuesHolderPath;->interpolate(F)Ljava/util/ArrayList;\nLandroidx/compose/animation/graphics/vector/ReversedSpec;\nHSPLandroidx/compose/animation/graphics/vector/ReversedSpec;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;I)V\nHPLandroidx/compose/animation/graphics/vector/ReversedSpec;-><init>(Landroidx/compose/animation/core/FiniteAnimationSpec;I)V\nHSPLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nPLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;\nHSPLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nPLandroidx/compose/animation/graphics/vector/ReversedSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;\nLandroidx/compose/animation/graphics/vector/StateVectorConfig;\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;-><init>()V\nPLandroidx/compose/animation/graphics/vector/StateVectorConfig;-><init>()V\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setPathDataState(Landroidx/compose/runtime/State;)V\nPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setPathDataState(Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setRotationState(Landroidx/compose/runtime/State;)V\nPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setRotationState(Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleXState(Landroidx/compose/runtime/State;)V\nPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleXState(Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleYState(Landroidx/compose/runtime/State;)V\nPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setScaleYState(Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setTranslateXState(Landroidx/compose/runtime/State;)V\nPLandroidx/compose/animation/graphics/vector/StateVectorConfig;->setTranslateXState(Landroidx/compose/runtime/State;)V\nLandroidx/compose/animation/graphics/vector/Timestamp;\nHSPLandroidx/compose/animation/graphics/vector/Timestamp;-><init>(IIIILandroidx/compose/animation/graphics/vector/PropertyValuesHolder;)V\nPLandroidx/compose/animation/graphics/vector/Timestamp;-><init>(IIIILandroidx/compose/animation/graphics/vector/PropertyValuesHolder;)V\nHSPLandroidx/compose/animation/graphics/vector/Timestamp;->asAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nHPLandroidx/compose/animation/graphics/vector/Timestamp;->asAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;\nHSPLandroidx/compose/animation/graphics/vector/Timestamp;->getDurationMillis()I\nPLandroidx/compose/animation/graphics/vector/Timestamp;->getDurationMillis()I\nHSPLandroidx/compose/animation/graphics/vector/Timestamp;->getHolder()Landroidx/compose/animation/graphics/vector/PropertyValuesHolder;\nPLandroidx/compose/animation/graphics/vector/Timestamp;->getHolder()Landroidx/compose/animation/graphics/vector/PropertyValuesHolder;\nHSPLandroidx/compose/animation/graphics/vector/Timestamp;->getRepeatCount()I\nPLandroidx/compose/animation/graphics/vector/Timestamp;->getRepeatCount()I\nHSPLandroidx/compose/animation/graphics/vector/Timestamp;->getTimeMillis()I\nPLandroidx/compose/animation/graphics/vector/Timestamp;->getTimeMillis()I\nLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;\nHSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;-><init>(Ljava/util/ArrayList;)V\nPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;-><init>(Ljava/util/ArrayList;)V\nHSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->chooseAnimation(J)Lkotlin/Pair;\nHPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->chooseAnimation(J)Lkotlin/Pair;\nHSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/graphics/vector/VectorizedCombinedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;\nHSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;-><init>(Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;J)V\nPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;-><init>(Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;J)V\nHSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J\nHSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHSPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nHPLandroidx/compose/animation/graphics/vector/VectorizedReversedSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;\nLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;-><clinit>()V\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getKeyframe(Landroid/content/res/TypedArray;FLandroidx/compose/animation/core/Easing;Landroidx/compose/animation/graphics/vector/compat/ValueType;I)Landroidx/compose/animation/graphics/vector/Keyframe;\nHPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getKeyframe(Landroid/content/res/TypedArray;FLandroidx/compose/animation/core/Easing;Landroidx/compose/animation/graphics/vector/compat/ValueType;I)Landroidx/compose/animation/graphics/vector/Keyframe;\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getPropertyValuesHolder1D(Landroid/content/res/TypedArray;Ljava/lang/String;IIILandroidx/compose/animation/core/Easing;Lkotlin/jvm/functions/Function2;)Landroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;\nHPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getPropertyValuesHolder1D(Landroid/content/res/TypedArray;Ljava/lang/String;IIILandroidx/compose/animation/core/Easing;Lkotlin/jvm/functions/Function2;)Landroidx/compose/animation/graphics/vector/PropertyValuesHolder1D;\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR_SET()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_ANIMATOR_SET()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_DECELERATE_INTERPOLATOR()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_DECELERATE_INTERPOLATOR()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PATH_INTERPOLATOR()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PATH_INTERPOLATOR()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PROPERTY_ANIMATOR()[I\nPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_PROPERTY_ANIMATOR()[I\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->inferValueType(I[I)Landroidx/compose/animation/graphics/vector/compat/ValueType;\nHPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->inferValueType(I[I)Landroidx/compose/animation/graphics/vector/compat/ValueType;\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseAnimatorSet(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/AnimatorSet;\nHPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseAnimatorSet(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/AnimatorSet;\nHSPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseObjectAnimator(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/ObjectAnimator;\nHPLandroidx/compose/animation/graphics/vector/compat/AndroidVectorResources;->parseObjectAnimator(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroidx/compose/animation/graphics/vector/ObjectAnimator;\nLandroidx/compose/animation/graphics/vector/compat/ValueType;\nHSPLandroidx/compose/animation/graphics/vector/compat/ValueType;-><clinit>()V\nPLandroidx/compose/animation/graphics/vector/compat/ValueType;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/vector/compat/ValueType;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/animation/graphics/vector/compat/ValueType;-><init>(Ljava/lang/String;I)V\nLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;\nHSPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;-><clinit>()V\nPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;-><clinit>()V\nHSPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;-><init>()V\nPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;-><init>()V\nHSPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/animation/graphics/vector/compat/XmlAnimatorParser_androidKt$getPropertyValuesHolder1D$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/AbstractClickableNode;\nHSPLandroidx/compose/foundation/AbstractClickableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/AbstractClickableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/foundation/AbstractClickableNode;->disposeInteractionSource()V\nHPLandroidx/compose/foundation/AbstractClickableNode;->disposeInteractionSource()V\nHSPLandroidx/compose/foundation/AbstractClickableNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData;\nPLandroidx/compose/foundation/AbstractClickableNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData;\nHSPLandroidx/compose/foundation/AbstractClickableNode;->onDetach()V\nHPLandroidx/compose/foundation/AbstractClickableNode;->onDetach()V\nHSPLandroidx/compose/foundation/AbstractClickableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nPLandroidx/compose/foundation/AbstractClickableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nHSPLandroidx/compose/foundation/AbstractClickableNode;->updateCommon-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/AbstractClickableNode;->updateCommon-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;)V\nLandroidx/compose/foundation/AbstractClickableNode$InteractionData;\nHSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;-><init>()V\nHPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;-><init>()V\nHSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getCurrentKeyPressInteractions()Ljava/util/LinkedHashMap;\nPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getCurrentKeyPressInteractions()Ljava/util/LinkedHashMap;\nHSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getPressInteraction()Landroidx/compose/foundation/interaction/PressInteraction$Press;\nPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getPressInteraction()Landroidx/compose/foundation/interaction/PressInteraction$Press;\nHSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setCentreOffset-k-4lQ0M(J)V\nPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setCentreOffset-k-4lQ0M(J)V\nHSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setPressInteraction(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V\nPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setPressInteraction(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V\nLandroidx/compose/foundation/AbstractClickablePointerInputNode;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V\nHPLandroidx/compose/foundation/AbstractClickablePointerInputNode;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getEnabled()Z\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getEnabled()Z\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData;\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getOnClick()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getOnClick()Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->handlePressInteraction-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->handlePressInteraction-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setEnabled(Z)V\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setEnabled(Z)V\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setInteractionSource(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setInteractionSource(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setOnClick(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setOnClick(Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V\nHPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerId$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/input/pointer/PointerId;)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerPosition$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/geometry/Offset;)V\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V\nHPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z\nLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;\nHSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/AndroidOverscrollKt;\nHSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V\nPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V\nHSPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/BackgroundElement;\nHSPLandroidx/compose/foundation/BackgroundElement;-><init>(JLandroidx/compose/ui/graphics/ShaderBrush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;I)V\nHPLandroidx/compose/foundation/BackgroundElement;-><init>(JLandroidx/compose/ui/graphics/ShaderBrush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;I)V\nHSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/foundation/BackgroundNode;\nHSPLandroidx/compose/foundation/BackgroundNode;-><init>(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V\nHPLandroidx/compose/foundation/BackgroundNode;-><init>(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V\nHSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/foundation/BackgroundNode;->setAlpha(F)V\nPLandroidx/compose/foundation/BackgroundNode;->setAlpha(F)V\nHSPLandroidx/compose/foundation/BackgroundNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V\nPLandroidx/compose/foundation/BackgroundNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V\nHSPLandroidx/compose/foundation/BackgroundNode;->setColor-8_81llA(J)V\nPLandroidx/compose/foundation/BackgroundNode;->setColor-8_81llA(J)V\nHSPLandroidx/compose/foundation/BackgroundNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V\nPLandroidx/compose/foundation/BackgroundNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V\nLandroidx/compose/foundation/BorderModifierNode;\nHSPLandroidx/compose/foundation/BorderModifierNode;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V\nPLandroidx/compose/foundation/BorderModifierNode;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V\nHSPLandroidx/compose/foundation/BorderModifierNode;->access$drawRoundRectBorder-JqoCqck(Landroidx/compose/foundation/BorderModifierNode;Landroidx/compose/ui/draw/CacheDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Outline$Rounded;JJZF)Landroidx/compose/ui/draw/DrawResult;\nPLandroidx/compose/foundation/BorderModifierNode;->access$drawRoundRectBorder-JqoCqck(Landroidx/compose/foundation/BorderModifierNode;Landroidx/compose/ui/draw/CacheDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Outline$Rounded;JJZF)Landroidx/compose/ui/draw/DrawResult;\nHSPLandroidx/compose/foundation/BorderModifierNode;->getBrush()Landroidx/compose/ui/graphics/Brush;\nPLandroidx/compose/foundation/BorderModifierNode;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/foundation/BorderModifierNode;->getShape()Landroidx/compose/ui/graphics/Shape;\nPLandroidx/compose/foundation/BorderModifierNode;->getShape()Landroidx/compose/ui/graphics/Shape;\nHSPLandroidx/compose/foundation/BorderModifierNode;->getWidth-D9Ej5fM()F\nPLandroidx/compose/foundation/BorderModifierNode;->getWidth-D9Ej5fM()F\nLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;\nHSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;-><init>(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;-><init>(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nHSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/BorderModifierNodeElement;\nHSPLandroidx/compose/foundation/BorderModifierNodeElement;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V\nPLandroidx/compose/foundation/BorderModifierNodeElement;-><init>(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V\nHSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/foundation/ClickableElement;\nHSPLandroidx/compose/foundation/ClickableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/ClickableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/ClickableElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/ClickableElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/foundation/ClickableKt$clickable$2;\nHSPLandroidx/compose/foundation/ClickableKt$clickable$2;-><init>(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/ClickableKt$clickable$2;-><init>(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;-><init>(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;-><init>(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;-><init>(Lkotlin/jvm/functions/Function0;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;-><init>(Lkotlin/jvm/functions/Function0;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ClickableNode;\nHSPLandroidx/compose/foundation/ClickableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/ClickableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/foundation/ClickableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)V\nHPLandroidx/compose/foundation/ClickableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)V\nHSPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/AbstractClickablePointerInputNode;\nPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/AbstractClickablePointerInputNode;\nHSPLandroidx/compose/foundation/ClickableNode;->update-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/foundation/ClickableNode;->update-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/foundation/ClickablePointerInputNode;\nHSPLandroidx/compose/foundation/ClickablePointerInputNode;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V\nHPLandroidx/compose/foundation/ClickablePointerInputNode;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V\nHSPLandroidx/compose/foundation/ClickablePointerInputNode;->pointerInput(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/foundation/ClickablePointerInputNode;->pointerInput(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;\nHSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;-><init>(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;I)V\nHPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;-><init>(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;I)V\nHSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ClickableSemanticsNode;\nHSPLandroidx/compose/foundation/ClickableSemanticsNode;-><init>(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/ClickableSemanticsNode;-><init>(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/foundation/ClickableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHPLandroidx/compose/foundation/ClickableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHSPLandroidx/compose/foundation/ClickableSemanticsNode;->getShouldMergeDescendantSemantics()Z\nHPLandroidx/compose/foundation/ClickableSemanticsNode;->getShouldMergeDescendantSemantics()Z\nHSPLandroidx/compose/foundation/ClickableSemanticsNode;->update-UMe6uN4(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/foundation/ClickableSemanticsNode;->update-UMe6uN4(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;\nHSPLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;-><init>(Landroidx/compose/foundation/ClickableSemanticsNode;I)V\nHPLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;-><init>(Landroidx/compose/foundation/ClickableSemanticsNode;I)V\nLandroidx/compose/foundation/Clickable_androidKt;\nHSPLandroidx/compose/foundation/Clickable_androidKt;-><clinit>()V\nPLandroidx/compose/foundation/Clickable_androidKt;-><clinit>()V\nPLandroidx/compose/foundation/Clickable_androidKt;->getTapIndicationDelay()J\nLandroidx/compose/foundation/ClipScrollableContainerKt;\nHSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V\nPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V\nHSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F\nPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F\nLandroidx/compose/foundation/DrawOverscrollModifier;\nHSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/FocusableElement;\nHSPLandroidx/compose/foundation/FocusableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/FocusableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/FocusableInNonTouchMode;\nHSPLandroidx/compose/foundation/FocusableInNonTouchMode;-><init>()V\nHPLandroidx/compose/foundation/FocusableInNonTouchMode;-><init>()V\nHSPLandroidx/compose/foundation/FocusableInNonTouchMode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V\nPLandroidx/compose/foundation/FocusableInNonTouchMode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V\nLandroidx/compose/foundation/FocusableInteractionNode;\nHSPLandroidx/compose/foundation/FocusableInteractionNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/FocusableInteractionNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHSPLandroidx/compose/foundation/FocusableInteractionNode;->setFocus(Z)V\nHPLandroidx/compose/foundation/FocusableInteractionNode;->setFocus(Z)V\nLandroidx/compose/foundation/FocusableKt;\nHSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V\nPLandroidx/compose/foundation/FocusableKt;-><clinit>()V\nHSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;\nHSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;-><init>()V\nPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;-><init>()V\nHSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;\nHSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V\nLandroidx/compose/foundation/FocusableNode;\nHSPLandroidx/compose/foundation/FocusableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/FocusableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHSPLandroidx/compose/foundation/FocusableNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHPLandroidx/compose/foundation/FocusableNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V\nHPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusStateImpl;)V\nHSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nLandroidx/compose/foundation/FocusablePinnableContainerNode;\nHSPLandroidx/compose/foundation/FocusablePinnableContainerNode;-><init>()V\nHPLandroidx/compose/foundation/FocusablePinnableContainerNode;-><init>()V\nHSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->setFocus(Z)V\nHPLandroidx/compose/foundation/FocusablePinnableContainerNode;->setFocus(Z)V\nLandroidx/compose/foundation/FocusableSemanticsNode;\nHSPLandroidx/compose/foundation/FocusableSemanticsNode;-><init>()V\nHPLandroidx/compose/foundation/FocusableSemanticsNode;-><init>()V\nHSPLandroidx/compose/foundation/FocusableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHPLandroidx/compose/foundation/FocusableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHSPLandroidx/compose/foundation/FocusableSemanticsNode;->setFocus(Z)V\nPLandroidx/compose/foundation/FocusableSemanticsNode;->setFocus(Z)V\nLandroidx/compose/foundation/FocusedBoundsKt;\nHSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V\nPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V\nHSPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nLandroidx/compose/foundation/FocusedBoundsNode;\nHSPLandroidx/compose/foundation/FocusedBoundsNode;-><init>()V\nHPLandroidx/compose/foundation/FocusedBoundsNode;-><init>()V\nHSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/foundation/FocusedBoundsNode;->setFocus(Z)V\nHPLandroidx/compose/foundation/FocusedBoundsNode;->setFocus(Z)V\nLandroidx/compose/foundation/FocusedBoundsObserverNode;\nHSPLandroidx/compose/foundation/FocusedBoundsObserverNode;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/FocusedBoundsObserverNode;-><init>(Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/foundation/GlowEdgeEffectCompat;\nHSPLandroidx/compose/foundation/GlowEdgeEffectCompat;-><init>(Landroid/content/Context;)V\nHPLandroidx/compose/foundation/GlowEdgeEffectCompat;-><init>(Landroid/content/Context;)V\nHSPLandroidx/compose/foundation/GlowEdgeEffectCompat;->onRelease()V\nHPLandroidx/compose/foundation/GlowEdgeEffectCompat;->onRelease()V\nLandroidx/compose/foundation/HoverableElement;\nHSPLandroidx/compose/foundation/HoverableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/HoverableElement;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHSPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/HoverableElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/HoverableElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/HoverableNode;\nHSPLandroidx/compose/foundation/HoverableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/HoverableNode;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHSPLandroidx/compose/foundation/HoverableNode;->onDetach()V\nHPLandroidx/compose/foundation/HoverableNode;->onDetach()V\nHSPLandroidx/compose/foundation/HoverableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nHPLandroidx/compose/foundation/HoverableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nHSPLandroidx/compose/foundation/HoverableNode;->tryEmitExit()V\nPLandroidx/compose/foundation/HoverableNode;->tryEmitExit()V\nLandroidx/compose/foundation/ImageKt;\nHSPLandroidx/compose/foundation/ImageKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/ImageKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/ImageKt;->access$shrink-Kibmq7A(JF)J\nPLandroidx/compose/foundation/ImageKt;->access$shrink-Kibmq7A(JF)J\nHSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;J)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/ImageKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;J)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/ImageKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V\nPLandroidx/compose/foundation/ImageKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V\nHSPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/ImageKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/ImageKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;\nHPLandroidx/compose/foundation/ImageKt;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect;\nHSPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F\nPLandroidx/compose/foundation/ImageKt;->getDistanceCompat(Landroid/widget/EdgeEffect;)F\nHSPLandroidx/compose/foundation/ImageKt;->hoverable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/ImageKt;->hoverable(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;)Z\nPLandroidx/compose/foundation/ImageKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;)Z\nHSPLandroidx/compose/foundation/ImageKt;->progressSemantics(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/ImageKt;->progressSemantics(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/ImageKt;->rememberScrollState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/ScrollState;\nHPLandroidx/compose/foundation/ImageKt;->rememberScrollState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/ScrollState;\nHSPLandroidx/compose/foundation/ImageKt;->shrink-Kibmq7A(JF)J\nPLandroidx/compose/foundation/ImageKt;->shrink-Kibmq7A(JF)J\nHSPLandroidx/compose/foundation/ImageKt;->verticalScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/ImageKt;->verticalScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;\nHSPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Boolean;\nHPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Boolean;\nHSPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/ImageKt$Image$$inlined$Layout$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;\nHSPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ImageKt$Image$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/Indication;\nLandroidx/compose/foundation/IndicationInstance;\nLandroidx/compose/foundation/IndicationKt;\nHSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V\nPLandroidx/compose/foundation/IndicationKt;-><clinit>()V\nHSPLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/IndicationKt$LocalIndication$1;\nHSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><clinit>()V\nPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><clinit>()V\nHSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><init>(I)V\nPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><init>(I)V\nHSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/IndicationKt$indication$2;\nHSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V\nHPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V\nHSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/IndicationModifier;\nHSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V\nPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V\nHSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nLandroidx/compose/foundation/MagnifierNode$draw$1$1;\nHSPLandroidx/compose/foundation/MagnifierNode$draw$1$1;-><clinit>()V\nPLandroidx/compose/foundation/MagnifierNode$draw$1$1;-><clinit>()V\nHSPLandroidx/compose/foundation/MagnifierNode$draw$1$1;-><init>(I)V\nPLandroidx/compose/foundation/MagnifierNode$draw$1$1;-><init>(I)V\nLandroidx/compose/foundation/MutatorMutex;\nHSPLandroidx/compose/foundation/MutatorMutex;-><init>()V\nHPLandroidx/compose/foundation/MutatorMutex;-><init>()V\nLandroidx/compose/foundation/NoIndication;\nHSPLandroidx/compose/foundation/NoIndication;-><clinit>()V\nPLandroidx/compose/foundation/NoIndication;-><clinit>()V\nHSPLandroidx/compose/foundation/NoIndication;-><init>()V\nPLandroidx/compose/foundation/NoIndication;-><init>()V\nHSPLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;\nPLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;\nLandroidx/compose/foundation/OverscrollConfiguration;\nHSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V\nPLandroidx/compose/foundation/OverscrollConfiguration;-><init>()V\nHSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J\nHPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J\nLandroidx/compose/foundation/OverscrollConfigurationKt;\nHSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V\nPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V\nHSPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLandroidx/compose/foundation/OverscrollEffect;\nLandroidx/compose/foundation/PlatformMagnifierFactory;\nLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;\nHSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;-><clinit>()V\nPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;-><clinit>()V\nHSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;-><init>()V\nPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;-><init>()V\nHSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;\nHSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V\nPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;-><init>(I)V\nHSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;\nHSPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;-><init>(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ScrollKt$scroll$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ScrollKt$scroll$2;\nHSPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZZ)V\nPLandroidx/compose/foundation/ScrollKt$scroll$2;-><init>(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZZ)V\nHSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;\nHSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V\nPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V\nLandroidx/compose/foundation/ScrollState;\nHSPLandroidx/compose/foundation/ScrollState;-><clinit>()V\nPLandroidx/compose/foundation/ScrollState;-><clinit>()V\nHSPLandroidx/compose/foundation/ScrollState;-><init>(I)V\nPLandroidx/compose/foundation/ScrollState;-><init>(I)V\nHSPLandroidx/compose/foundation/ScrollState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/foundation/ScrollState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/foundation/ScrollState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;\nPLandroidx/compose/foundation/ScrollState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;\nHSPLandroidx/compose/foundation/ScrollState;->getMaxValue()I\nHPLandroidx/compose/foundation/ScrollState;->getMaxValue()I\nHSPLandroidx/compose/foundation/ScrollState;->getValue()I\nHPLandroidx/compose/foundation/ScrollState;->getValue()I\nHSPLandroidx/compose/foundation/ScrollState;->setMaxValue$foundation_release(I)V\nPLandroidx/compose/foundation/ScrollState;->setMaxValue$foundation_release(I)V\nHSPLandroidx/compose/foundation/ScrollState;->setViewportSize$foundation_release(I)V\nPLandroidx/compose/foundation/ScrollState;->setViewportSize$foundation_release(I)V\nLandroidx/compose/foundation/ScrollState$Companion$Saver$1;\nHSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;-><clinit>()V\nPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;-><clinit>()V\nHSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;-><init>()V\nPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;-><init>()V\nHSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/ScrollState$canScrollForward$2;\nHSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;I)V\nHPLandroidx/compose/foundation/ScrollState$canScrollForward$2;-><init>(Landroidx/compose/foundation/ScrollState;I)V\nHSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Float;\nHPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Float;\nHSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/ScrollingLayoutElement;\nHSPLandroidx/compose/foundation/ScrollingLayoutElement;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V\nPLandroidx/compose/foundation/ScrollingLayoutElement;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V\nHSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/foundation/ScrollingLayoutElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/ScrollingLayoutNode;\nHSPLandroidx/compose/foundation/ScrollingLayoutNode;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V\nPLandroidx/compose/foundation/ScrollingLayoutNode;-><init>(Landroidx/compose/foundation/ScrollState;ZZ)V\nHSPLandroidx/compose/foundation/ScrollingLayoutNode;->getScrollerState()Landroidx/compose/foundation/ScrollState;\nPLandroidx/compose/foundation/ScrollingLayoutNode;->getScrollerState()Landroidx/compose/foundation/ScrollState;\nHSPLandroidx/compose/foundation/ScrollingLayoutNode;->isReversed()Z\nPLandroidx/compose/foundation/ScrollingLayoutNode;->isReversed()Z\nHSPLandroidx/compose/foundation/ScrollingLayoutNode;->isVertical()Z\nPLandroidx/compose/foundation/ScrollingLayoutNode;->isVertical()Z\nHSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;\nHSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;-><init>(Landroidx/compose/foundation/ScrollingLayoutNode;ILandroidx/compose/ui/layout/Placeable;)V\nPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;-><init>(Landroidx/compose/foundation/ScrollingLayoutNode;ILandroidx/compose/ui/layout/Placeable;)V\nHSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/AnchoredDragFinishedSignal;\nLandroidx/compose/foundation/gestures/AndroidConfig;\nHSPLandroidx/compose/foundation/gestures/AndroidConfig;-><clinit>()V\nPLandroidx/compose/foundation/gestures/AndroidConfig;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/AndroidConfig;-><init>()V\nPLandroidx/compose/foundation/gestures/AndroidConfig;-><init>()V\nLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;\nHSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V\nHPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V\nLandroidx/compose/foundation/gestures/BringIntoViewScroller;\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller;-><clinit>()V\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller;-><clinit>()V\nLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;-><clinit>()V\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;-><init>()V\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;-><init>()V\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultBringIntoViewScroller$foundation_release()Landroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultBringIntoViewScroller$foundation_release()Landroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion;->getDefaultScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;\nLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;-><init>()V\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;-><init>()V\nHSPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;\nPLandroidx/compose/foundation/gestures/BringIntoViewScroller$Companion$DefaultBringIntoViewScroller$1;->getScrollAnimationSpec()Landroidx/compose/animation/core/AnimationSpec;\nLandroidx/compose/foundation/gestures/ContentInViewNode;\nHSPLandroidx/compose/foundation/gestures/ContentInViewNode;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewScroller;)V\nPLandroidx/compose/foundation/gestures/ContentInViewNode;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/gestures/BringIntoViewScroller;)V\nHSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/foundation/gestures/ContentInViewNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V\nHPLandroidx/compose/foundation/gestures/ContentInViewNode;->onRemeasured-ozmzZPI(J)V\nLandroidx/compose/foundation/gestures/ContentInViewNode$Request;\nLandroidx/compose/foundation/gestures/DefaultFlingBehavior;\nHSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;)V\nHPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;)V\nHSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->setFlingDecay(Landroidx/compose/animation/core/DecayAnimationSpec;)V\nPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->setFlingDecay(Landroidx/compose/animation/core/DecayAnimationSpec;)V\nLandroidx/compose/foundation/gestures/DefaultScrollableState;\nHSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/gestures/DefaultScrollableState;->isScrollInProgress()Z\nLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;\nHSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V\nPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V\nPLandroidx/compose/foundation/gestures/DragEvent$DragCancelled;-><clinit>()V\nPLandroidx/compose/foundation/gestures/DragEvent$DragCancelled;-><init>()V\nPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;-><clinit>()V\nPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z\nPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z\nPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F\nPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;\nPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;-><init>(I)V\nLandroidx/compose/foundation/gestures/DragScope;\nPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;\nHPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;\nPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;-><init>(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V\nLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;\nHSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;-><init>(Lkotlin/coroutines/Continuation;I)V\nPLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;-><init>(Lkotlin/coroutines/Continuation;I)V\nLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;\nHSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><clinit>()V\nPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><init>(I)V\nPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><init>(I)V\nPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean;\nPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/DraggableNode;\nHSPLandroidx/compose/foundation/gestures/DraggableNode;-><init>(Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)V\nHPLandroidx/compose/foundation/gestures/DraggableNode;-><init>(Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)V\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$getCanDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getChannel$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlinx/coroutines/channels/Channel;\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$getChannel$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlinx/coroutines/channels/Channel;\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$getEnabled$p(Landroidx/compose/foundation/gestures/DraggableNode;)Z\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$getOrientation$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/foundation/gestures/Orientation;\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$getStartDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$getVelocityTracker$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/ui/input/pointer/util/VelocityTracker;\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$get_canDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/foundation/gestures/DraggableNode;->access$get_startDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V\nPLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V\nHSPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V\nHPLandroidx/compose/foundation/gestures/DraggableNode;->onAttach()V\nHSPLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V\nPLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V\nPLandroidx/compose/foundation/gestures/DraggableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;\nHSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/DraggableNode$onAttach$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;\nHSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;-><init>(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/DraggableState;\nLandroidx/compose/foundation/gestures/FlingBehavior;\nLandroidx/compose/foundation/gestures/ForEachGestureKt;\nPLandroidx/compose/foundation/gestures/ForEachGestureKt;-><init>()V\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState;\nPLandroidx/compose/foundation/gestures/ForEachGestureKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState;\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect;\nHPLandroidx/compose/foundation/gestures/ForEachGestureKt;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect;\nLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;-><init>(Lkotlin/coroutines/Continuation;)V\nLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;\nHSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>(Z)V\nPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>(Z)V\nPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nLandroidx/compose/foundation/gestures/MouseWheelScrollNode;\nHSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V\nHPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V\nHSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onAttach()V\nLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;\nHSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1$1;-><init>(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/Orientation;\nHSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V\nPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/Orientation;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/foundation/gestures/Orientation;-><init>(Ljava/lang/String;I)V\nLandroidx/compose/foundation/gestures/PressGestureScope;\nLandroidx/compose/foundation/gestures/PressGestureScopeImpl;\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;)V\nPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V\nPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/ScrollConfig;\nLandroidx/compose/foundation/gestures/ScrollDraggableState;\nHSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V\nPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;)V\nLandroidx/compose/foundation/gestures/ScrollScope;\nLandroidx/compose/foundation/gestures/ScrollableElement;\nHSPLandroidx/compose/foundation/gestures/ScrollableElement;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V\nHPLandroidx/compose/foundation/gestures/ScrollableElement;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V\nHSPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/gestures/ScrollableElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/gestures/ScrollableElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/gestures/ScrollableGesturesNode;\nHSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nHPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V\nPLandroidx/compose/foundation/gestures/ScrollableGesturesNode;->getScrollLogic()Landroidx/compose/foundation/gestures/ScrollingLogic;\nLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/ScrollableGesturesNode$onDragStopped$1;-><init>(Landroidx/compose/foundation/gestures/ScrollableGesturesNode;Lkotlin/coroutines/Continuation;)V\nLandroidx/compose/foundation/gestures/ScrollableKt;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getCanDragCalculation$p()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getCanDragCalculation$p()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpOnDragStarted$p()Lkotlin/jvm/functions/Function3;\nPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpOnDragStarted$p()Lkotlin/jvm/functions/Function3;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;\nPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getUnityDensity$p()Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;\nPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getUnityDensity$p()Landroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;\nPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;-><init>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;-><init>()V\nLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><clinit>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><init>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><init>()V\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;-><init>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;-><init>()V\nLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;-><init>()V\nPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;-><init>()V\nHSPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F\nPLandroidx/compose/foundation/gestures/ScrollableKt$UnityDensity$1;->getDensity()F\nPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;\nHSPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V\nPLandroidx/compose/foundation/gestures/ScrollableNestedScrollConnection;-><init>(Landroidx/compose/foundation/gestures/ScrollingLogic;Z)V\nLandroidx/compose/foundation/gestures/ScrollableNode;\nHSPLandroidx/compose/foundation/gestures/ScrollableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V\nHPLandroidx/compose/foundation/gestures/ScrollableNode;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/BringIntoViewScroller;)V\nHSPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V\nPLandroidx/compose/foundation/gestures/ScrollableNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V\nHSPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V\nHPLandroidx/compose/foundation/gestures/ScrollableNode;->onAttach()V\nLandroidx/compose/foundation/gestures/ScrollableNode$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableNode$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/gestures/ScrollableNode$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/gestures/ScrollableNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;\nHSPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;-><init>(ILandroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;-><init>(ILandroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()Ljava/lang/Boolean;\nHSPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()V\nPLandroidx/compose/foundation/gestures/ScrollableNode$onAttach$1;->invoke()V\nLandroidx/compose/foundation/gestures/ScrollableState;\nLandroidx/compose/foundation/gestures/ScrollingLogic;\nHSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nHPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nPLandroidx/compose/foundation/gestures/ScrollingLogic;->shouldScrollImmediately()Z\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;-><clinit>()V\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;I)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapAndPress(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapAndPress(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/gestures/UpdatableAnimationState;\nHSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V\nPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V\nHSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>(Landroidx/compose/animation/core/AnimationSpec;)V\nPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>(Landroidx/compose/animation/core/AnimationSpec;)V\nLandroidx/compose/foundation/interaction/DragInteractionKt;\nHSPLandroidx/compose/foundation/interaction/DragInteractionKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource;\nHPLandroidx/compose/foundation/interaction/DragInteractionKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource;\nHSPLandroidx/compose/foundation/interaction/DragInteractionKt;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/foundation/interaction/DragInteractionKt;->collectIsPressedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;\nLandroidx/compose/foundation/interaction/DragInteractionKt$collectIsDraggedAsState$1$1$1;\nHSPLandroidx/compose/foundation/interaction/DragInteractionKt$collectIsDraggedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V\nPLandroidx/compose/foundation/interaction/DragInteractionKt$collectIsDraggedAsState$1$1$1;-><init>(Ljava/util/ArrayList;Landroidx/compose/runtime/MutableState;I)V\nLandroidx/compose/foundation/interaction/Interaction;\nLandroidx/compose/foundation/interaction/InteractionSource;\nLandroidx/compose/foundation/interaction/MutableInteractionSource;\nLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;\nHSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V\nHPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V\nHSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow;\nPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow;\nLandroidx/compose/foundation/interaction/PressInteraction$Cancel;\nLandroidx/compose/foundation/interaction/PressInteraction$Press;\nHSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V\nHPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V\nHSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J\nPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J\nLandroidx/compose/foundation/interaction/PressInteraction$Release;\nHSPLandroidx/compose/foundation/interaction/PressInteraction$Release;-><init>(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V\nHPLandroidx/compose/foundation/interaction/PressInteraction$Release;-><init>(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V\nHSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press;\nPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press;\nLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;\nHSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/interaction/PressInteractionKt$collectIsPressedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/AddedInsets;\nHSPLandroidx/compose/foundation/layout/AddedInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nPLandroidx/compose/foundation/layout/AddedInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nHSPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/AddedInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/AddedInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/AddedInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/AddedInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;\nHSPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;-><init>(Landroidx/compose/ui/layout/AlignmentLine;FIIILandroidx/compose/ui/layout/Placeable;I)V\nPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;-><init>(Landroidx/compose/ui/layout/AlignmentLine;FIIILandroidx/compose/ui/layout/Placeable;I)V\nHSPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/AlignmentLineKt$alignmentLineOffsetMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;\nHSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;-><init>(Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;-><init>(Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;\nHSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;-><init>(Landroidx/compose/ui/layout/AlignmentLine;FF)V\nPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;-><init>(Landroidx/compose/ui/layout/AlignmentLine;FF)V\nHSPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/AlignmentLineOffsetDpNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;-><init>(ILjava/lang/String;)V\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;-><init>(ILjava/lang/String;)V\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets;\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets;\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V\nHPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V\nLandroidx/compose/foundation/layout/Arrangement;\nHSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V\nPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$Center$1;\nPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$Center$1;\nHSPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$End$1;\nPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$End$1;\nHSPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$End$1;\nPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$End$1;\nHSPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Top$1;\nPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Top$1;\nHSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V\nHPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V\nHSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V\nHPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V\nHSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V\nPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V\nHSPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;\nPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;\nLandroidx/compose/foundation/layout/Arrangement$Center$1;\nHSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>(I)V\nPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>(I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V\nPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F\nLandroidx/compose/foundation/layout/Arrangement$End$1;\nHSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>(I)V\nPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>(I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nLandroidx/compose/foundation/layout/Arrangement$Horizontal;\nHSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F\nHPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F\nLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;\nHSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V\nPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F\nLandroidx/compose/foundation/layout/Arrangement$Top$1;\nHSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>(I)V\nPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>(I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V\nPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V\nLandroidx/compose/foundation/layout/Arrangement$Vertical;\nHSPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F\nLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;\nHSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><clinit>()V\nPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><init>(I)V\nPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><init>(I)V\nLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;\nHSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J\nPLandroidx/compose/foundation/layout/Arrangement$spacedBy$2;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J\nLandroidx/compose/foundation/layout/Arrangement$spacedBy$3;\nHSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$3;-><init>(Landroidx/compose/ui/Alignment$Vertical;I)V\nPLandroidx/compose/foundation/layout/Arrangement$spacedBy$3;-><init>(Landroidx/compose/ui/Alignment$Vertical;I)V\nLandroidx/compose/foundation/layout/BoxChildDataElement;\nHSPLandroidx/compose/foundation/layout/BoxChildDataElement;-><init>(Landroidx/compose/ui/BiasAlignment;ZLkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/layout/BoxChildDataElement;-><init>(Landroidx/compose/ui/BiasAlignment;ZLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/foundation/layout/BoxChildDataNode;\nHSPLandroidx/compose/foundation/layout/BoxChildDataNode;-><init>(Landroidx/compose/ui/Alignment;Z)V\nPLandroidx/compose/foundation/layout/BoxChildDataNode;-><init>(Landroidx/compose/ui/Alignment;Z)V\nHSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getAlignment()Landroidx/compose/ui/Alignment;\nPLandroidx/compose/foundation/layout/BoxChildDataNode;->getAlignment()Landroidx/compose/ui/Alignment;\nHSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getMatchParentSize()Z\nPLandroidx/compose/foundation/layout/BoxChildDataNode;->getMatchParentSize()Z\nHSPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/BoxKt;\nHSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V\nPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z\nPLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z\nHSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V\nHPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V\nHSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;\nLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;\nHSPLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/layout/BoxKt$Box$$inlined$Layout$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/layout/BoxKt$Box$2;\nHSPLandroidx/compose/foundation/layout/BoxKt$Box$2;-><init>(Landroidx/compose/ui/Modifier;I)V\nPLandroidx/compose/foundation/layout/BoxKt$Box$2;-><init>(Landroidx/compose/ui/Modifier;I)V\nLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;\nHSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V\nPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><init>()V\nPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><init>()V\nHSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;\nHSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Landroidx/compose/ui/Alignment;Z)V\nPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(Landroidx/compose/ui/Alignment;Z)V\nHSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;\nHSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V\nHPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V\nHSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/BoxScope;\nLandroidx/compose/foundation/layout/BoxScopeInstance;\nHSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V\nPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><init>()V\nPLandroidx/compose/foundation/layout/BoxScopeInstance;-><init>()V\nHSPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;\nHSPLandroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/foundation/layout/ColumnKt;\nHSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V\nPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/BiasAlignment$Horizontal;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/BiasAlignment$Horizontal;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;\nLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;\nHSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V\nPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V\nHSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/ColumnScope;\nLandroidx/compose/foundation/layout/ColumnScopeInstance;\nHSPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><clinit>()V\nPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><init>()V\nPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><init>()V\nLandroidx/compose/foundation/layout/ConsumedInsetsModifier;\nHSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V\nHPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V\nLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;\nHSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;)I\nLandroidx/compose/foundation/layout/ExcludeInsets;\nHSPLandroidx/compose/foundation/layout/ExcludeInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nHPLandroidx/compose/foundation/layout/ExcludeInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nHSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nLandroidx/compose/foundation/layout/FillElement;\nHSPLandroidx/compose/foundation/layout/FillElement;-><init>(IF)V\nPLandroidx/compose/foundation/layout/FillElement;-><init>(IF)V\nHSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/FillElement$Companion;\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;-><clinit>()V\nPLandroidx/compose/foundation/layout/FillElement$Companion;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;-><init>()V\nPLandroidx/compose/foundation/layout/FillElement$Companion;-><init>()V\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;->access$systemInsets(ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nPLandroidx/compose/foundation/layout/FillElement$Companion;->access$systemInsets(ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;->access$valueInsetsIgnoringVisibility(ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;\nPLandroidx/compose/foundation/layout/FillElement$Companion;->access$valueInsetsIgnoringVisibility(ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;->current(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsetsHolder;\nHPLandroidx/compose/foundation/layout/FillElement$Companion;->current(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsetsHolder;\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;->height(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentElement;\nPLandroidx/compose/foundation/layout/FillElement$Companion;->height(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentElement;\nHSPLandroidx/compose/foundation/layout/FillElement$Companion;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement;\nPLandroidx/compose/foundation/layout/FillElement$Companion;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement;\nLandroidx/compose/foundation/layout/FillNode;\nHSPLandroidx/compose/foundation/layout/FillNode;-><init>(IF)V\nHPLandroidx/compose/foundation/layout/FillNode;-><init>(IF)V\nHSPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/FillNode$measure$1;\nHSPLandroidx/compose/foundation/layout/FillNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V\nPLandroidx/compose/foundation/layout/FillNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V\nHSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/FixedIntInsets;\nHSPLandroidx/compose/foundation/layout/FixedIntInsets;-><init>(IIII)V\nHPLandroidx/compose/foundation/layout/FixedIntInsets;-><init>(IIII)V\nHSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nLandroidx/compose/foundation/layout/InsetsConsumingModifier;\nHSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;-><init>()V\nPLandroidx/compose/foundation/layout/InsetsConsumingModifier;-><init>()V\nHSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nHPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nHSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V\nPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V\nLandroidx/compose/foundation/layout/InsetsListener;\nHSPLandroidx/compose/foundation/layout/InsetsListener;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V\nPLandroidx/compose/foundation/layout/InsetsListener;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V\nHSPLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/compose/foundation/layout/InsetsListener;->onViewAttachedToWindow(Landroid/view/View;)V\nPLandroidx/compose/foundation/layout/InsetsListener;->onViewAttachedToWindow(Landroid/view/View;)V\nLandroidx/compose/foundation/layout/InsetsPaddingModifier;\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;-><init>(Landroidx/compose/foundation/layout/WindowInsets;)V\nPLandroidx/compose/foundation/layout/InsetsPaddingModifier;-><init>(Landroidx/compose/foundation/layout/WindowInsets;)V\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V\nHPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V\nLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;-><init>(IILandroidx/compose/ui/layout/Placeable;)V\nPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;-><init>(IILandroidx/compose/ui/layout/Placeable;)V\nHSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/InsetsPaddingValues;\nHSPLandroidx/compose/foundation/layout/InsetsPaddingValues;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)V\nPLandroidx/compose/foundation/layout/InsetsPaddingValues;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateBottomPadding-D9Ej5fM()F\nHPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateBottomPadding-D9Ej5fM()F\nHSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nHPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nHSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nHPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nHSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F\nLandroidx/compose/foundation/layout/InsetsValues;\nHSPLandroidx/compose/foundation/layout/InsetsValues;-><init>(IIII)V\nHPLandroidx/compose/foundation/layout/InsetsValues;-><init>(IIII)V\nHSPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/LayoutWeightElement;\nHSPLandroidx/compose/foundation/layout/LayoutWeightElement;-><init>(FZ)V\nHPLandroidx/compose/foundation/layout/LayoutWeightElement;-><init>(FZ)V\nHSPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/LayoutWeightElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/LayoutWeightElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/LayoutWeightNode;\nHSPLandroidx/compose/foundation/layout/LayoutWeightNode;-><init>(FZ)V\nHPLandroidx/compose/foundation/layout/LayoutWeightNode;-><init>(FZ)V\nHSPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/LimitInsets;\nHSPLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)V\nHPLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)V\nHSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nLandroidx/compose/foundation/layout/MutableWindowInsets;\nHSPLandroidx/compose/foundation/layout/MutableWindowInsets;-><init>()V\nHPLandroidx/compose/foundation/layout/MutableWindowInsets;-><init>()V\nHSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/MutableWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/MutableWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/MutableWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nPLandroidx/compose/foundation/layout/MutableWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/MutableWindowInsets;->setInsets(Landroidx/compose/foundation/layout/WindowInsets;)V\nHPLandroidx/compose/foundation/layout/MutableWindowInsets;->setInsets(Landroidx/compose/foundation/layout/WindowInsets;)V\nLandroidx/compose/foundation/layout/OffsetKt;\nHSPLandroidx/compose/foundation/layout/OffsetKt;-><init>()V\nPLandroidx/compose/foundation/layout/OffsetKt;-><init>()V\nHSPLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-YgX7TsA$default(FFI)Landroidx/compose/foundation/layout/PaddingValuesImpl;\nPLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-YgX7TsA$default(FFI)Landroidx/compose/foundation/layout/PaddingValuesImpl;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-a9UjIt4$default(FFFFI)Landroidx/compose/foundation/layout/PaddingValuesImpl;\nPLandroidx/compose/foundation/layout/OffsetKt;->PaddingValues-a9UjIt4$default(FFFFI)Landroidx/compose/foundation/layout/PaddingValuesImpl;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/foundation/layout/OffsetKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/foundation/layout/OffsetKt;->WindowInsets$default(II)Landroidx/compose/foundation/layout/WindowInsets;\nPLandroidx/compose/foundation/layout/OffsetKt;->WindowInsets$default(II)Landroidx/compose/foundation/layout/WindowInsets;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->access$getHorizontal$cp()I\nPLandroidx/compose/foundation/layout/OffsetKt;->access$getHorizontal$cp()I\nHSPLandroidx/compose/foundation/layout/OffsetKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)Landroidx/compose/foundation/layout/PaddingValues;\nPLandroidx/compose/foundation/layout/OffsetKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)Landroidx/compose/foundation/layout/PaddingValues;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F\nPLandroidx/compose/foundation/layout/OffsetKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F\nHSPLandroidx/compose/foundation/layout/OffsetKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F\nPLandroidx/compose/foundation/layout/OffsetKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F\nHSPLandroidx/compose/foundation/layout/OffsetKt;->constructor-impl(JI)J\nHPLandroidx/compose/foundation/layout/OffsetKt;->constructor-impl(JI)J\nHSPLandroidx/compose/foundation/layout/OffsetKt;->copy-yUG9Ft0$default(JIII)J\nHPLandroidx/compose/foundation/layout/OffsetKt;->copy-yUG9Ft0$default(JIII)J\nHSPLandroidx/compose/foundation/layout/OffsetKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;\nPLandroidx/compose/foundation/layout/OffsetKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->getNavigationBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nPLandroidx/compose/foundation/layout/OffsetKt;->getNavigationBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->getSystemBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHPLandroidx/compose/foundation/layout/OffsetKt;->getSystemBars(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->offset(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/OffsetKt;->offset(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets;\nPLandroidx/compose/foundation/layout/OffsetKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/AndroidWindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/OffsetKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/OffsetKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/OffsetKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->paddingFrom-4j6BHR0$default(Landroidx/compose/ui/Modifier$Companion;Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFI)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/OffsetKt;->paddingFrom-4j6BHR0$default(Landroidx/compose/ui/Modifier$Companion;Landroidx/compose/ui/layout/HorizontalAlignmentLine;FFI)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4$default(Landroidx/compose/ui/Modifier$Companion;F)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4$default(Landroidx/compose/ui/Modifier$Companion;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4(Landroidx/compose/ui/Modifier$Companion;FF)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/OffsetKt;->paddingFromBaseline-VpY3zN4(Landroidx/compose/ui/Modifier$Companion;FF)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J\nHPLandroidx/compose/foundation/layout/OffsetKt;->toBoxConstraints-OenEA2s(JI)J\nHSPLandroidx/compose/foundation/layout/OffsetKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues;\nPLandroidx/compose/foundation/layout/OffsetKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues;\nLandroidx/compose/foundation/layout/OffsetKt$offset$1;\nHSPLandroidx/compose/foundation/layout/OffsetKt$offset$1;-><init>(FFI)V\nHPLandroidx/compose/foundation/layout/OffsetKt$offset$1;-><init>(FFI)V\nLandroidx/compose/foundation/layout/OffsetKt$offset$2;\nHSPLandroidx/compose/foundation/layout/OffsetKt$offset$2;-><init>(ILkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/layout/OffsetKt$offset$2;-><init>(ILkotlin/jvm/functions/Function1;)V\nLandroidx/compose/foundation/layout/OffsetNode$measure$1;\nHSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Landroidx/compose/foundation/layout/OffsetPxNode;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;)V\nPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Landroidx/compose/foundation/layout/OffsetPxNode;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;)V\nHSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V\nPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V\nHSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/ui/layout/MeasureScope;I)V\nHPLandroidx/compose/foundation/layout/OffsetNode$measure$1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/ui/layout/MeasureScope;I)V\nHSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHSPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/OffsetNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/OffsetPxElement;\nHSPLandroidx/compose/foundation/layout/OffsetPxElement;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)V\nPLandroidx/compose/foundation/layout/OffsetPxElement;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)V\nHSPLandroidx/compose/foundation/layout/OffsetPxElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/layout/OffsetPxElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/foundation/layout/OffsetPxNode;\nHSPLandroidx/compose/foundation/layout/OffsetPxNode;-><init>(ZLkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/layout/OffsetPxNode;-><init>(ZLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/layout/OffsetPxNode;->getOffset()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/foundation/layout/OffsetPxNode;->getOffset()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/foundation/layout/OffsetPxNode;->getRtlAware()Z\nPLandroidx/compose/foundation/layout/OffsetPxNode;->getRtlAware()Z\nHSPLandroidx/compose/foundation/layout/OffsetPxNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nPLandroidx/compose/foundation/layout/OffsetPxNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/PaddingElement;\nHSPLandroidx/compose/foundation/layout/PaddingElement;-><init>(FFFFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/foundation/layout/PaddingElement;-><init>(FFFFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/PaddingKt$padding$1;\nHSPLandroidx/compose/foundation/layout/PaddingKt$padding$1;-><init>(FFFF)V\nHPLandroidx/compose/foundation/layout/PaddingKt$padding$1;-><init>(FFFF)V\nLandroidx/compose/foundation/layout/PaddingNode;\nHSPLandroidx/compose/foundation/layout/PaddingNode;-><init>(FFFFZ)V\nHPLandroidx/compose/foundation/layout/PaddingNode;-><init>(FFFFZ)V\nHSPLandroidx/compose/foundation/layout/PaddingNode;->getRtlAware()Z\nPLandroidx/compose/foundation/layout/PaddingNode;->getRtlAware()Z\nHSPLandroidx/compose/foundation/layout/PaddingNode;->getStart-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/PaddingNode;->getStart-D9Ej5fM()F\nHSPLandroidx/compose/foundation/layout/PaddingNode;->getTop-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/PaddingNode;->getTop-D9Ej5fM()F\nHSPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/PaddingValues;\nLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;\nHSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V\nPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V\nHSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->calculateInsets(Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;\nPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->calculateInsets(Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;\nHSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/PaddingValuesElement;\nHSPLandroidx/compose/foundation/layout/PaddingValuesElement;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;)V\nHPLandroidx/compose/foundation/layout/PaddingValuesElement;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/BoxScopeInstance$align$$inlined$debugInspectorInfo$1;)V\nHSPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/PaddingValuesElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/PaddingValuesElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/PaddingValuesImpl;\nHSPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFF)V\nHPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFF)V\nHSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F\nHSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nHSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F\nHSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F\nPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F\nHSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/PaddingValuesInsets;\nHSPLandroidx/compose/foundation/layout/PaddingValuesInsets;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V\nPLandroidx/compose/foundation/layout/PaddingValuesInsets;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V\nPLandroidx/compose/foundation/layout/PaddingValuesInsets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I\nHSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nHPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getTop(Landroidx/compose/ui/unit/Density;)I\nLandroidx/compose/foundation/layout/PaddingValuesModifier;\nHSPLandroidx/compose/foundation/layout/PaddingValuesModifier;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V\nPLandroidx/compose/foundation/layout/PaddingValuesModifier;-><init>(Landroidx/compose/foundation/layout/PaddingValues;)V\nHSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues;\nPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues;\nHSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/RowColumnImplKt;\nHSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;\nPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;\nHSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F\nPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F\nLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;\nHSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/OffsetKt;)V\nPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(ILkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/OffsetKt;)V\nHSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;\nHSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(IIII[I)V\nPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(IIII[I)V\nHSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I\nPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I\nHSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I\nPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I\nHSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I\nPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I\nHSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I\nPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I\nHSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I\nPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I\nLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;\nHSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V\nHPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(ILkotlin/jvm/functions/Function5;FILandroidx/compose/foundation/layout/OffsetKt;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V\nHSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I\nPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I\nHSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;\nHPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;\nHSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V\nHPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V\nLandroidx/compose/foundation/layout/RowColumnParentData;\nHSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>()V\nPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>()V\nHSPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/OffsetKt;\nPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/OffsetKt;\nHSPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z\nPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z\nHSPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F\nPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F\nHSPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V\nPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V\nHSPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V\nPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V\nLandroidx/compose/foundation/layout/RowKt;\nHSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V\nPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/layout/MeasurePolicy;\nLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;\nHSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V\nPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>(I)V\nPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>(I)V\nHSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;\nHSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Horizontal;I)V\nPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Horizontal;I)V\nHSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V\nHSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/RowScope;\nLandroidx/compose/foundation/layout/RowScopeInstance;\nHSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V\nPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/RowScopeInstance;-><init>()V\nPLandroidx/compose/foundation/layout/RowScopeInstance;-><init>()V\nHSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/layout/SizeElement;\nHSPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFZLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFZLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFZLkotlin/jvm/functions/Function1;I)V\nHPLandroidx/compose/foundation/layout/SizeElement;-><init>(FFFFZLkotlin/jvm/functions/Function1;I)V\nHSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/SizeKt;\nHSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V\nPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;I)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;I)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/layout/SizeNode;\nHSPLandroidx/compose/foundation/layout/SizeNode;-><init>(FFFFZ)V\nHPLandroidx/compose/foundation/layout/SizeNode;-><init>(FFFFZ)V\nHSPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J\nHPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J\nHSPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/SpacerMeasurePolicy;\nHSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V\nPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><init>()V\nPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><init>()V\nHSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;\nHSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><clinit>()V\nPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><init>(I)V\nPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><init>(I)V\nHSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/UnionInsets;\nHSPLandroidx/compose/foundation/layout/UnionInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nPLandroidx/compose/foundation/layout/UnionInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nHSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;\nHSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;-><init>(FF)V\nHPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;-><init>(FF)V\nHSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;\nHSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;-><init>(FF)V\nPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;-><init>(FF)V\nHSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/ValueInsets;\nHSPLandroidx/compose/foundation/layout/ValueInsets;-><init>(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V\nHPLandroidx/compose/foundation/layout/ValueInsets;-><init>(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V\nHSPLandroidx/compose/foundation/layout/ValueInsets;->setValue$foundation_layout_release(Landroidx/compose/foundation/layout/InsetsValues;)V\nHPLandroidx/compose/foundation/layout/ValueInsets;->setValue$foundation_layout_release(Landroidx/compose/foundation/layout/InsetsValues;)V\nLandroidx/compose/foundation/layout/WindowInsets;\nHSPLandroidx/compose/foundation/layout/WindowInsets;-><clinit>()V\nPLandroidx/compose/foundation/layout/WindowInsets;-><clinit>()V\nLandroidx/compose/foundation/layout/WindowInsetsHolder;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><clinit>()V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroid/view/View;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroid/view/View;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap;\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getNavigationBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getNavigationBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getStatusBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getStatusBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update$default(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update$default(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroidx/core/view/WindowInsetsCompat;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationSource(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationSource(Landroidx/core/view/WindowInsetsCompat;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationTarget(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationTarget(Landroidx/core/view/WindowInsetsCompat;)V\nLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V\nPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V\nHPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;-><clinit>()V\nPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->consumeWindowInsets(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->consumeWindowInsets(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->onConsumedWindowInsetsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->onConsumedWindowInsetsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><clinit>()V\nPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><clinit>()V\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><init>()V\nPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><init>()V\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;I)V\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;I)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$consumeWindowInsets$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/layout/WrapContentElement;\nHSPLandroidx/compose/foundation/layout/WrapContentElement;-><init>(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;)V\nPLandroidx/compose/foundation/layout/WrapContentElement;-><init>(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;)V\nHSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/foundation/layout/WrapContentNode;\nHSPLandroidx/compose/foundation/layout/WrapContentNode;-><init>(IZLkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/foundation/layout/WrapContentNode;-><init>(IZLkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/foundation/layout/WrapContentNode;->getAlignmentCallback()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/foundation/layout/WrapContentNode;->getAlignmentCallback()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/layout/WrapContentNode$measure$1;\nHSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V\nPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V\nHSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;\nHSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><clinit>()V\nPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><init>()V\nPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><init>()V\nLandroidx/compose/foundation/lazy/LazyDslKt;\nHSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V\nHPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V\nHSPLandroidx/compose/foundation/lazy/LazyDslKt;->ScrollPositionUpdater(ILandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/foundation/lazy/LazyDslKt;->ScrollPositionUpdater(ILandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/foundation/lazy/LazyItemScopeImpl;\nHSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;-><init>()V\nPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;-><init>()V\nHSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V\nHPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V\nLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;\nHSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Z)V\nPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Z)V\nHSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;\nPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;\nPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getCanScrollForward()Z\nPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getFirstVisibleItemIndex()I\nPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getFirstVisibleItemScrollOffset()I\nLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;\nHSPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V\nPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V\nLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;\nHSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;-><init>(Landroidx/compose/foundation/lazy/LazyListState;I)V\nPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;-><init>(Landroidx/compose/foundation/lazy/LazyListState;I)V\nLandroidx/compose/foundation/lazy/LazyListInterval;\nHSPLandroidx/compose/foundation/lazy/LazyListInterval;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/foundation/lazy/LazyListInterval;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/foundation/lazy/LazyListInterval;->getItem()Lkotlin/jvm/functions/Function4;\nPLandroidx/compose/foundation/lazy/LazyListInterval;->getItem()Lkotlin/jvm/functions/Function4;\nHSPLandroidx/compose/foundation/lazy/LazyListInterval;->getKey()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/foundation/lazy/LazyListInterval;->getKey()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/foundation/lazy/LazyListInterval;->getType()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/foundation/lazy/LazyListInterval;->getType()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/foundation/lazy/LazyListIntervalContent;\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/foundation/lazy/LazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getHeaderIndexes()Ljava/util/List;\nPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getHeaderIndexes()Ljava/util/List;\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals$1()Landroidx/compose/foundation/lazy/layout/MutableIntervalList;\nHPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals$1()Landroidx/compose/foundation/lazy/layout/MutableIntervalList;\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->item(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->item(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListItemInfo;\nLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;\nHSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;-><init>()V\nHPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;-><init>()V\nHSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;ZZZ)V\nHPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;ZZZ)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V\nPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V\nLandroidx/compose/foundation/lazy/LazyListItemProvider;\nLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListIntervalContent;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListIntervalContent;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->access$getIntervalContent$p(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;)Landroidx/compose/foundation/lazy/LazyListIntervalContent;\nPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->access$getIntervalContent$p(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;)Landroidx/compose/foundation/lazy/LazyListIntervalContent;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List;\nPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I\nPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;\nPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;-><init>(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;I)V\nPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;-><init>(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;I)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;-><init>(Ljava/lang/Object;)V\nPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->get()Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->get()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V\nPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V\nHSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;\nHSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;-><init>(ILandroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;-><init>(ILandroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;ZLandroidx/compose/foundation/layout/PaddingValues;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V\nPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;ZLandroidx/compose/foundation/layout/PaddingValues;ZLkotlin/reflect/KProperty0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JII)V\nHPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;JII)V\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V\nHPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/compose/foundation/lazy/LazyListMeasuredItem;\nHPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getAndMeasure(I)Landroidx/compose/foundation/lazy/LazyListMeasuredItem;\nHSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getChildConstraints-msEJaDk()J\nPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->getChildConstraints-msEJaDk()J\nLandroidx/compose/foundation/lazy/LazyListLayoutInfo;\nLandroidx/compose/foundation/lazy/LazyListMeasureKt;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-qnDatfE(ILandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;ILjava/util/List;ZZLandroidx/compose/foundation/lazy/LazyListMeasureResult;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult;\nHPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-qnDatfE(ILandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;ILjava/util/List;ZZLandroidx/compose/foundation/lazy/LazyListMeasureResult;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult;\nLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;-><init>(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListMeasuredItem;Z)V\nHPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;-><init>(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListMeasuredItem;Z)V\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListMeasureResult;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;-><init>(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;IIILandroidx/compose/foundation/gestures/Orientation;II)V\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;-><init>(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;FLjava/util/List;IIILandroidx/compose/foundation/gestures/Orientation;II)V\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAfterContentPadding()I\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAfterContentPadding()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getBeforeContentPadding()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getBeforeContentPadding()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyListMeasuredItem;\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyListMeasuredItem;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getViewportSize-YbymL2g()J\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getViewportSize-YbymL2g()J\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;\nPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V\nHPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V\nLandroidx/compose/foundation/lazy/LazyListMeasuredItem;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getCrossAxisSize()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getCrossAxisSize()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getIndex()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getIndex()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getKey()Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getKey()Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset()I\nPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset-Bjo55l4(I)J\nPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset-Bjo55l4(I)J\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getParentData(I)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getParentData(I)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getPlaceablesCount()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getPlaceablesCount()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSize()I\nPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSize()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSizeWithSpacings()I\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSizeWithSpacings()I\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;Z)V\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;Z)V\nHSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->position(III)V\nHPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->position(III)V\nLandroidx/compose/foundation/lazy/LazyListScope;\nHSPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V\nHPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V\nLandroidx/compose/foundation/lazy/LazyListScope$items$1;\nHSPLandroidx/compose/foundation/lazy/LazyListScope$items$1;-><clinit>()V\nPLandroidx/compose/foundation/lazy/LazyListScope$items$1;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/LazyListScope$items$1;-><init>(I)V\nPLandroidx/compose/foundation/lazy/LazyListScope$items$1;-><init>(I)V\nLandroidx/compose/foundation/lazy/LazyListScrollPosition;\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;-><init>(III)V\nPLandroidx/compose/foundation/lazy/LazyListScrollPosition;-><init>(III)V\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex()I\nHPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex()I\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getNearestRangeState()Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;\nPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getNearestRangeState()Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I\nHPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update(II)V\nHPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update(II)V\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V\nPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V\nHSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I\nPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I\nLandroidx/compose/foundation/lazy/LazyListState;\nHSPLandroidx/compose/foundation/lazy/LazyListState;-><clinit>()V\nPLandroidx/compose/foundation/lazy/LazyListState;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/LazyListState;-><init>(II)V\nHPLandroidx/compose/foundation/lazy/LazyListState;-><init>(II)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement$p(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement$p(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;Z)V\nHPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;Z)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;\nPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getBeyondBoundsInfo$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;\nPLandroidx/compose/foundation/lazy/LazyListState;->getBeyondBoundsInfo$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;\nPLandroidx/compose/foundation/lazy/LazyListState;->getCanScrollForward()Z\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I\nPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I\nPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getHasLookaheadPassOccurred$foundation_release()Z\nPLandroidx/compose/foundation/lazy/LazyListState;->getHasLookaheadPassOccurred$foundation_release()Z\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;\nPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo;\nPLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getNearestRange$foundation_release()Lkotlin/ranges/IntRange;\nPLandroidx/compose/foundation/lazy/LazyListState;->getNearestRange$foundation_release()Lkotlin/ranges/IntRange;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;\nPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getPlacementAnimator$foundation_release()Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;\nPLandroidx/compose/foundation/lazy/LazyListState;->getPlacementAnimator$foundation_release()Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getPostLookaheadLayoutInfo$foundation_release()Landroidx/compose/foundation/lazy/LazyListMeasureResult;\nPLandroidx/compose/foundation/lazy/LazyListState;->getPostLookaheadLayoutInfo$foundation_release()Landroidx/compose/foundation/lazy/LazyListMeasureResult;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;\nPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier;\nPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier;\nHSPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F\nPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F\nPLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z\nHSPLandroidx/compose/foundation/lazy/LazyListState;->setCoroutineScope$foundation_release(Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/compose/foundation/lazy/LazyListState;->setCoroutineScope$foundation_release(Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V\nPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V\nPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release$default(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;)V\nHPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release$default(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;)V\nHSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I\nPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I\nLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;\nHSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><clinit>()V\nPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><init>()V\nPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><init>()V\nHSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;\nHSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V\nPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V\nHSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/node/LayoutNode;)V\nLandroidx/compose/foundation/lazy/LazyListStateKt;\nHSPLandroidx/compose/foundation/lazy/LazyListStateKt;-><clinit>()V\nPLandroidx/compose/foundation/lazy/LazyListStateKt;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(ILandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListState;\nHPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(ILandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListState;\nLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;\nHSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;-><init>(II)V\nPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;-><init>(II)V\nHSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/ParentSizeNode$measure$1;\nHSPLandroidx/compose/foundation/lazy/ParentSizeNode$measure$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/lazy/ParentSizeNode$measure$1;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;\nHSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->onGloballyPositioned()V\nPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->onGloballyPositioned()V\nLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V\nPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V\nPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I\nHPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I\nLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><clinit>()V\nPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>()V\nLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;\nHSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;-><init>()V\nLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;\nHSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V\nHPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V\nHSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I\nPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I\nHSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I\nHPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I\nHSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyAnimateScrollScope;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->hasIntervals()Z\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->hasIntervals()Z\nLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;-><clinit>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;-><init>()V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;)Ljava/util/List;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt;->calculateLazyLayoutPinnedIndices(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;)Ljava/util/List;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;Ljava/lang/Object;)Lkotlin/jvm/functions/Function2;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;Ljava/lang/Object;)Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContentType()Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContentType()Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getIndex()I\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getIndex()I\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ILjava/lang/Object;I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ILjava/lang/Object;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$2;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;-><clinit>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;-><clinit>()V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;-><init>()V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->getContentType(I)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->getContentType(I)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/reflect/KProperty0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->isLookingAhead()Z\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->isLookingAhead()Z\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I\nLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;-><clinit>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;-><init>(III)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;-><init>(III)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->onDisposed()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList$PinnedItem;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;I)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float;\nHPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float;\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V\nLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;-><init>(Lkotlin/reflect/KProperty0;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V\nPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;-><init>(Lkotlin/reflect/KProperty0;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/LinkedHashSet;\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/LinkedHashSet;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><clinit>()V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><clinit>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><init>()V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$3;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$3;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$3;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;II)V\nLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V\nPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V\nHSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/MutableIntervalList;\nHSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V\nHPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V\nHSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V\nHPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval;)V\nHSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V\nHPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V\nHSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;\nHPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;\nHSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I\nPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I\nLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;\nHSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;-><init>(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;)V\nHPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;-><init>(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;)V\nHSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeys$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)[Ljava/lang/Object;\nPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeys$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)[Ljava/lang/Object;\nHSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeysStartIndex$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)I\nPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeysStartIndex$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)I\nHSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object;\nLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;\nHSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;-><init>(IILjava/util/HashMap;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V\nHPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;-><init>(IILjava/util/HashMap;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V\nHSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/relocation/BringIntoViewChildNode;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;-><init>()V\nHPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;-><init>()V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nLandroidx/compose/foundation/relocation/BringIntoViewKt;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V\nPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nPLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><clinit>()V\nPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><clinit>()V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><init>()V\nPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><init>()V\nLandroidx/compose/foundation/relocation/BringIntoViewParent;\nLandroidx/compose/foundation/relocation/BringIntoViewRequester;\nLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V\nHPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector;\nPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector;\nLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester;\nPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester;\nLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V\nPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V\nHPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V\nHPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V\nHSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->updateRequester(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V\nHPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->updateRequester(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V\nLandroidx/compose/foundation/relocation/BringIntoViewResponder;\nLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;)V\nPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;-><init>(Landroidx/compose/foundation/gestures/ContentInViewNode;)V\nLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;\nHSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;-><init>(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V\nHPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;-><init>(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V\nLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;\nHSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;-><clinit>()V\nPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;-><clinit>()V\nHSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;-><init>()V\nPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;-><init>()V\nHSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/selection/SelectableKt;\nHSPLandroidx/compose/foundation/selection/SelectableKt;->selectable-O2vRcR0(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/foundation/selection/SelectableKt;->selectable-O2vRcR0(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/foundation/selection/SelectableKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/foundation/selection/SelectableKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;\nHSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;-><init>(Z)V\nHPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;-><init>(Z)V\nHSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/shape/CornerBasedShape;\nHSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V\nPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V\nHSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;\nHPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;\nLandroidx/compose/foundation/shape/CornerSize;\nLandroidx/compose/foundation/shape/CornerSizeKt;\nHSPLandroidx/compose/foundation/shape/CornerSizeKt;-><clinit>()V\nPLandroidx/compose/foundation/shape/CornerSizeKt;-><clinit>()V\nHSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize;\nPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize;\nHSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize;\nPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize;\nLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;\nHSPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;-><init>()V\nPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;-><init>()V\nLandroidx/compose/foundation/shape/DpCornerSize;\nHSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V\nPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V\nLandroidx/compose/foundation/shape/PercentCornerSize;\nHSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V\nPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V\nHSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F\nHPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F\nLandroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/foundation/shape/RoundedCornerShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V\nPLandroidx/compose/foundation/shape/RoundedCornerShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V\nHSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/BrushKt;\nHPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/BrushKt;\nHSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/foundation/shape/RoundedCornerShapeKt;\nHSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V\nPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V\nHSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape;\nLandroidx/compose/foundation/text/BasicTextKt;\nHSPLandroidx/compose/foundation/text/BasicTextKt;-><clinit>()V\nPLandroidx/compose/foundation/text/BasicTextKt;-><clinit>()V\nHSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-VhcvRP8(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/foundation/text/BasicTextKt;->ceilToIntPx(F)I\nHPLandroidx/compose/foundation/text/BasicTextKt;->ceilToIntPx(F)I\nHSPLandroidx/compose/foundation/text/BasicTextKt;->validateMinMaxLines(II)V\nHPLandroidx/compose/foundation/text/BasicTextKt;->validateMinMaxLines(II)V\nLandroidx/compose/foundation/text/BasicTextKt$BasicText$1;\nLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;\nHSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/text/EmptyMeasurePolicy;\nHSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><clinit>()V\nPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><clinit>()V\nHSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><init>()V\nPLandroidx/compose/foundation/text/EmptyMeasurePolicy;-><init>()V\nHSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/foundation/text/KeyMapping;\nLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;\nHSPLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;-><init>()V\nPLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;-><init>()V\nLandroidx/compose/foundation/text/TextFieldKeyInput$1;\nHSPLandroidx/compose/foundation/text/TextFieldKeyInput$1;-><clinit>()V\nPLandroidx/compose/foundation/text/TextFieldKeyInput$1;-><clinit>()V\nHSPLandroidx/compose/foundation/text/TextFieldKeyInput$1;-><init>(I)V\nPLandroidx/compose/foundation/text/TextFieldKeyInput$1;-><init>(I)V\nHSPLandroidx/compose/foundation/text/TextFieldKeyInput$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/text/TextFieldKeyInput$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZII)V\nHPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZII)V\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getDidOverflow$foundation_release()Z\nPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getDidOverflow$foundation_release()Z\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getLayoutSize-YbymL2g$foundation_release()J\nPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getLayoutSize-YbymL2g$foundation_release()J\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getObserveFontChanges$foundation_release()V\nPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getObserveFontChanges$foundation_release()V\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getParagraph$foundation_release()Landroidx/compose/ui/text/AndroidParagraph;\nPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->getParagraph$foundation_release()Landroidx/compose/ui/text/AndroidParagraph;\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/AndroidParagraph;\nHPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/AndroidParagraph;\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutWithConstraints-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Z\nHPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->layoutWithConstraints-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Z\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V\nHPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphIntrinsics;\nHPLandroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphIntrinsics;\nLandroidx/compose/foundation/text/modifiers/SelectionController;\nLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;IZIILandroidx/compose/ui/graphics/ColorProducer;)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->doInvalidations(ZZZ)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->doInvalidations(ZZZ)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/ParagraphLayoutCache;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateDraw(Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/ui/text/TextStyle;)Z\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateDraw(Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/ui/text/TextStyle;)Z\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateLayoutRelatedArgs-HuAbxIM(Landroidx/compose/ui/text/TextStyle;IIZLandroidx/compose/ui/text/font/FontFamilyResolverImpl;I)Z\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateLayoutRelatedArgs-HuAbxIM(Landroidx/compose/ui/text/TextStyle;IIZLandroidx/compose/ui/text/font/FontFamilyResolverImpl;I)Z\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateText(Ljava/lang/String;)Z\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode;->updateText(Ljava/lang/String;)Z\nLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$TextSubstitutionValue;\nLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$1;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$1;-><init>(Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode;I)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$1;-><init>(Landroidx/compose/foundation/text/modifiers/TextStringSimpleNode;I)V\nLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$4;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$4;-><init>(ILandroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$applySemantics$4;-><init>(ILandroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V\nPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHSPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/foundation/text/modifiers/TextStringSimpleNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/foundation/text/selection/SelectionRegistrarImpl;\nLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;\nHSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V\nPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V\nHSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;\nHSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><clinit>()V\nPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><clinit>()V\nHSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><init>(I)V\nPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><init>(I)V\nHSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/foundation/text/selection/TextSelectionColors;\nHSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V\nPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V\nLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;\nHSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V\nPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V\nHSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroid/view/ViewGroup;)V\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroid/view/ViewGroup;)V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V\nPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V\nPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V\nLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;-><init>(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V\nPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;-><init>(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V\nHSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/material/ripple/CommonRippleIndicationInstance;\nLandroidx/compose/material/ripple/PlatformRipple;\nHSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V\nPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V\nLandroidx/compose/material/ripple/Ripple;\nHSPLandroidx/compose/material/ripple/Ripple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V\nPLandroidx/compose/material/ripple/Ripple;-><init>(ZFLandroidx/compose/runtime/MutableState;)V\nHSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;\nHPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;\nLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;\nHSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;\nHSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;-><init>(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V\nHPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;-><init>(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/material/ripple/RippleAlpha;\nHSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V\nPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V\nHSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F\nPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F\nLandroidx/compose/material/ripple/RippleAnimationKt;\nHSPLandroidx/compose/material/ripple/RippleAnimationKt;-><clinit>()V\nPLandroidx/compose/material/ripple/RippleAnimationKt;-><clinit>()V\nHSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F\nHPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F\nLandroidx/compose/material/ripple/RippleContainer;\nHSPLandroidx/compose/material/ripple/RippleContainer;-><init>(Landroid/content/Context;)V\nHPLandroidx/compose/material/ripple/RippleContainer;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V\nHSPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;\nHPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;\nLandroidx/compose/material/ripple/RippleHostMap;\nHSPLandroidx/compose/material/ripple/RippleHostMap;-><init>()V\nPLandroidx/compose/material/ripple/RippleHostMap;-><init>()V\nHSPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;\nHPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;\nPLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V\nHSPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V\nHPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V\nLandroidx/compose/material/ripple/RippleHostView;\nPLandroidx/compose/material/ripple/RippleHostView;->$r8$lambda$4nztiuYeQHklB-09QfMAnp7Ay8E(Landroidx/compose/material/ripple/RippleHostView;)V\nHSPLandroidx/compose/material/ripple/RippleHostView;-><clinit>()V\nPLandroidx/compose/material/ripple/RippleHostView;-><clinit>()V\nHSPLandroidx/compose/material/ripple/RippleHostView;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/material/ripple/RippleHostView;-><init>(Landroid/content/Context;)V\nHSPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V\nHPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V\nHSPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V\nHPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V\nHSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V\nHPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V\nHSPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V\nPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V\nHSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V\nHPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V\nHSPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(FIJJ)V\nHPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(FIJJ)V\nLandroidx/compose/material/ripple/RippleIndicationInstance;\nHSPLandroidx/compose/material/ripple/RippleIndicationInstance;-><init>(ZLandroidx/compose/runtime/MutableState;)V\nPLandroidx/compose/material/ripple/RippleIndicationInstance;-><init>(ZLandroidx/compose/runtime/MutableState;)V\nHSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V\nPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V\nLandroidx/compose/material/ripple/RippleKt;\nHSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V\nPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V\nHSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple;\nHPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple;\nLandroidx/compose/material/ripple/RippleTheme;\nLandroidx/compose/material/ripple/RippleThemeKt;\nHSPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V\nPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V\nHSPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;\nHSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><clinit>()V\nPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><clinit>()V\nHSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><init>()V\nPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><init>()V\nLandroidx/compose/material/ripple/StateLayer;\nHSPLandroidx/compose/material/ripple/StateLayer;-><init>(ZLandroidx/compose/runtime/MutableState;)V\nHPLandroidx/compose/material/ripple/StateLayer;-><init>(ZLandroidx/compose/runtime/MutableState;)V\nHSPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V\nHPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V\nLandroidx/compose/material/ripple/UnprojectedRipple;\nHSPLandroidx/compose/material/ripple/UnprojectedRipple;-><init>(Z)V\nHPLandroidx/compose/material/ripple/UnprojectedRipple;-><init>(Z)V\nHSPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect;\nHPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect;\nHSPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z\nHPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z\nHSPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V\nHPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V\nHSPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V\nPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V\nLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;\nHSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><clinit>()V\nPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><clinit>()V\nHSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><init>()V\nPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><init>()V\nHSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V\nPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V\nLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$3;\nHSPLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$3;-><init>(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V\nPLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$3;-><init>(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V\nLandroidx/compose/material3/AppBarKt;\nHSPLandroidx/compose/material3/AppBarKt;-><clinit>()V\nPLandroidx/compose/material3/AppBarKt;-><clinit>()V\nHSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/AppBarKt;->access$SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nPLandroidx/compose/material3/AppBarKt;->access$SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F\nPLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F\nHSPLandroidx/compose/material3/AppBarKt;->rememberTopAppBarState(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarState;\nHPLandroidx/compose/material3/AppBarKt;->rememberTopAppBarState(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarState;\nLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;\nHSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/internal/ComposableLambdaImpl;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V\nHPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/internal/ComposableLambdaImpl;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V\nHSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;\nHSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nHPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nHSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/AppBarKt$TopAppBar$1;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;\nHSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;-><init>(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V\nHPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;-><init>(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V\nHSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;\nHSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V\nPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V\nHSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;\nHSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;-><init>(FFF)V\nPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;-><init>(FFF)V\nHSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/material3/BadgeKt;\nHSPLandroidx/compose/material3/BadgeKt;-><clinit>()V\nPLandroidx/compose/material3/BadgeKt;-><clinit>()V\nHSPLandroidx/compose/material3/BadgeKt;->BadgedBox(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/BadgeKt;->BadgedBox(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/BadgeKt;->getBadgeOffset()F\nPLandroidx/compose/material3/BadgeKt;->getBadgeOffset()F\nLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;-><init>(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V\nPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;-><init>(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/BadgeKt$BadgedBox$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/BadgeKt$BadgedBox$3;\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$3;-><init>(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V\nPLandroidx/compose/material3/BadgeKt$BadgedBox$3;-><init>(Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$3;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/material3/BadgeKt$BadgedBox$3;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V\nPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;Landroidx/compose/runtime/MutableFloatState;)V\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/BadgeKt$BadgedBox$3$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/BadgeKt$BadgedBox$4;\nHSPLandroidx/compose/material3/BadgeKt$BadgedBox$4;-><init>(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;III)V\nPLandroidx/compose/material3/BadgeKt$BadgedBox$4;-><init>(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;III)V\nLandroidx/compose/material3/ButtonColors;\nHSPLandroidx/compose/material3/ButtonColors;-><init>(JJJJ)V\nPLandroidx/compose/material3/ButtonColors;-><init>(JJJJ)V\nHSPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/material3/ButtonDefaults;\nHSPLandroidx/compose/material3/ButtonDefaults;-><clinit>()V\nPLandroidx/compose/material3/ButtonDefaults;-><clinit>()V\nHSPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F\nPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F\nHSPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F\nPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/ButtonDefaults;->getTextButtonContentPadding()Landroidx/compose/foundation/layout/PaddingValuesImpl;\nPLandroidx/compose/material3/ButtonDefaults;->getTextButtonContentPadding()Landroidx/compose/foundation/layout/PaddingValuesImpl;\nHSPLandroidx/compose/material3/ButtonDefaults;->getTextShape(Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape;\nPLandroidx/compose/material3/ButtonDefaults;->getTextShape(Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape;\nHSPLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ButtonColors;\nHPLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ButtonColors;\nLandroidx/compose/material3/ButtonKt$Button$3;\nHSPLandroidx/compose/material3/ButtonKt$Button$3;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V\nPLandroidx/compose/material3/ButtonKt$Button$3;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V\nHSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/ButtonKt$Button$3$1;\nHSPLandroidx/compose/material3/ButtonKt$Button$3$1;-><init>(IILandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;)V\nPLandroidx/compose/material3/ButtonKt$Button$3$1;-><init>(IILandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;)V\nHSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/ButtonKt$Button$4;\nHSPLandroidx/compose/material3/ButtonKt$Button$4;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;III)V\nPLandroidx/compose/material3/ButtonKt$Button$4;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;III)V\nLandroidx/compose/material3/CardKt;\nHSPLandroidx/compose/material3/CardKt;-><clinit>()V\nPLandroidx/compose/material3/CardKt;-><clinit>()V\nHSPLandroidx/compose/material3/CardKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->DropdownMenu-4kj-_NE(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->DropdownMenu-4kj-_NE(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/foundation/ScrollState;Landroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->FadeInFadeOutWithScale(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->FadeInFadeOutWithScale(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->HorizontalDivider-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->HorizontalDivider-9IZ8Weo(Landroidx/compose/ui/Modifier;FJLandroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->SnackbarHost(Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->SnackbarHost(Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/CardKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/CardKt;->access$getDefaultRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha;\nPLandroidx/compose/material3/CardKt;->access$getDefaultRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha;\nHSPLandroidx/compose/material3/CardKt;->getString-NWtq2-8(ILandroidx/compose/runtime/Composer;)Ljava/lang/String;\nHPLandroidx/compose/material3/CardKt;->getString-NWtq2-8(ILandroidx/compose/runtime/Composer;)Ljava/lang/String;\nHSPLandroidx/compose/material3/CardKt;->getSystemBarsForVisualComponents(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHPLandroidx/compose/material3/CardKt;->getSystemBarsForVisualComponents(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets;\nHSPLandroidx/compose/material3/CardKt;->pinnedScrollBehavior(Landroidx/compose/material3/TopAppBarState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarScrollBehavior;\nHPLandroidx/compose/material3/CardKt;->pinnedScrollBehavior(Landroidx/compose/material3/TopAppBarState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/TopAppBarScrollBehavior;\nHSPLandroidx/compose/material3/CardKt;->topAppBarColors-zjMxDiM(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors;\nHPLandroidx/compose/material3/CardKt;->topAppBarColors-zjMxDiM(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors;\nLandroidx/compose/material3/CardKt$Card$1;\nHSPLandroidx/compose/material3/CardKt$Card$1;-><init>(IILkotlin/jvm/functions/Function3;)V\nHPLandroidx/compose/material3/CardKt$Card$1;-><init>(IILkotlin/jvm/functions/Function3;)V\nHSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/CardKt$Card$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/CardKt$Card$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/ChipKt$Chip$1;\nHSPLandroidx/compose/material3/ChipKt$Chip$1;-><clinit>()V\nPLandroidx/compose/material3/ChipKt$Chip$1;-><clinit>()V\nHSPLandroidx/compose/material3/ChipKt$Chip$1;-><init>(I)V\nPLandroidx/compose/material3/ChipKt$Chip$1;-><init>(I)V\nHSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V\nPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V\nHSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/ColorScheme;\nHSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V\nHPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V\nHSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceBright-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceBright-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHigh-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHigh-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHighest-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerHighest-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLow-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLow-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLowest-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceContainerLowest-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceDim-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceDim-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J\nHPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J\nPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceBright-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceBright-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceContainer-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHigh-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHigh-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHighest-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerHighest-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLow-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLow-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLowest-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceContainerLowest-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceDim-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceDim-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V\nHSPLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V\nPLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V\nLandroidx/compose/material3/ColorSchemeKt;\nHSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V\nPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V\nHSPLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-RFCenO8(Landroidx/compose/material3/ColorScheme;JFLandroidx/compose/runtime/Composer;)J\nHPLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-RFCenO8(Landroidx/compose/material3/ColorScheme;JFLandroidx/compose/runtime/Composer;)J\nHSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J\nHPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J\nHSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J\nHPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;)J\nHSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;I)J\nHPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;I)J\nHSPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/material3/ColorSchemeKt;->getValue(ILandroidx/compose/runtime/Composer;)J\nHPLandroidx/compose/material3/ColorSchemeKt;->getValue(ILandroidx/compose/runtime/Composer;)J\nHSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-C-Xl9yA$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJI)Landroidx/compose/material3/ColorScheme;\nPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-C-Xl9yA$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJI)Landroidx/compose/material3/ColorScheme;\nHSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J\nHPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J\nLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;\nHSPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;-><clinit>()V\nPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;-><clinit>()V\nLandroidx/compose/material3/ContentColorKt;\nHSPLandroidx/compose/material3/ContentColorKt;-><clinit>()V\nPLandroidx/compose/material3/ContentColorKt;-><clinit>()V\nHSPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLandroidx/compose/material3/DateInputKt$DateInputContent$2;\nHSPLandroidx/compose/material3/DateInputKt$DateInputContent$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/material3/DateInputKt$DateInputContent$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/DateInputKt$DateInputContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/DatePickerKt$Day$1$1;\nHSPLandroidx/compose/material3/DatePickerKt$Day$1$1;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/material3/DatePickerKt$Day$1$1;-><init>(Ljava/lang/String;I)V\nHSPLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nPLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHSPLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/DatePickerKt$Day$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/DatePickerKt$WeekDays$2;\nHSPLandroidx/compose/material3/DatePickerKt$WeekDays$2;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/material3/DatePickerKt$WeekDays$2;-><init>(IILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/DatePickerKt$WeekDays$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;\nHSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;-><clinit>()V\nPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;-><clinit>()V\nHSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle;\nPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle;\nLandroidx/compose/material3/DividerDefaults;\nHSPLandroidx/compose/material3/DividerDefaults;-><clinit>()V\nPLandroidx/compose/material3/DividerDefaults;-><clinit>()V\nHSPLandroidx/compose/material3/DividerDefaults;->getColor(Landroidx/compose/runtime/Composer;)J\nPLandroidx/compose/material3/DividerDefaults;->getColor(Landroidx/compose/runtime/Composer;)J\nHSPLandroidx/compose/material3/DividerDefaults;->getThickness-D9Ej5fM()F\nPLandroidx/compose/material3/DividerDefaults;->getThickness-D9Ej5fM()F\nLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;\nHSPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;-><init>(FJI)V\nPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;-><init>(FJI)V\nHSPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHSPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/DividerKt$VerticalDivider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/DividerKt$VerticalDivider$2;\nHSPLandroidx/compose/material3/DividerKt$VerticalDivider$2;-><init>(Landroidx/compose/ui/Modifier;FJIII)V\nPLandroidx/compose/material3/DividerKt$VerticalDivider$2;-><init>(Landroidx/compose/ui/Modifier;FJIII)V\nLandroidx/compose/material3/ExposedDropdownMenuKt$expandable$2$1$1;\nHSPLandroidx/compose/material3/ExposedDropdownMenuKt$expandable$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLandroidx/compose/material3/ExposedDropdownMenuKt$expandable$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;I)V\nLandroidx/compose/material3/FadeInFadeOutState;\nHSPLandroidx/compose/material3/FadeInFadeOutState;-><init>()V\nPLandroidx/compose/material3/FadeInFadeOutState;-><init>()V\nHSPLandroidx/compose/material3/FadeInFadeOutState;->getCurrent()Ljava/lang/Object;\nPLandroidx/compose/material3/FadeInFadeOutState;->getCurrent()Ljava/lang/Object;\nHSPLandroidx/compose/material3/FadeInFadeOutState;->getItems()Ljava/util/ArrayList;\nPLandroidx/compose/material3/FadeInFadeOutState;->getItems()Ljava/util/ArrayList;\nHSPLandroidx/compose/material3/FadeInFadeOutState;->setCurrent(Ljava/lang/Object;)V\nPLandroidx/compose/material3/FadeInFadeOutState;->setCurrent(Ljava/lang/Object;)V\nHSPLandroidx/compose/material3/FadeInFadeOutState;->setScope(Landroidx/compose/runtime/RecomposeScopeImpl;)V\nPLandroidx/compose/material3/FadeInFadeOutState;->setScope(Landroidx/compose/runtime/RecomposeScopeImpl;)V\nLandroidx/compose/material3/IconButtonColors;\nHSPLandroidx/compose/material3/IconButtonColors;-><init>(JJJJ)V\nPLandroidx/compose/material3/IconButtonColors;-><init>(JJJJ)V\nHSPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nLandroidx/compose/material3/IconButtonKt$IconButton$3;\nHSPLandroidx/compose/material3/IconButtonKt$IconButton$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V\nPLandroidx/compose/material3/IconButtonKt$IconButton$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V\nLandroidx/compose/material3/IconKt;\nHSPLandroidx/compose/material3/IconKt;-><clinit>()V\nPLandroidx/compose/material3/IconKt;-><clinit>()V\nHSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V\nLandroidx/compose/material3/IconKt$Icon$1;\nHSPLandroidx/compose/material3/IconKt$Icon$1;-><init>(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;JIII)V\nPLandroidx/compose/material3/IconKt$Icon$1;-><init>(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;JIII)V\nHSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/InteractiveComponentSizeKt;\nHSPLandroidx/compose/material3/InteractiveComponentSizeKt;-><clinit>()V\nPLandroidx/compose/material3/InteractiveComponentSizeKt;-><clinit>()V\nHSPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J\nPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J\nHSPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/material3/MappedInteractionSource;\nHSPLandroidx/compose/material3/MappedInteractionSource;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;J)V\nHPLandroidx/compose/material3/MappedInteractionSource;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;J)V\nHSPLandroidx/compose/material3/MappedInteractionSource;->access$getMappedPresses$p(Landroidx/compose/material3/MappedInteractionSource;)Ljava/util/LinkedHashMap;\nPLandroidx/compose/material3/MappedInteractionSource;->access$getMappedPresses$p(Landroidx/compose/material3/MappedInteractionSource;)Ljava/util/LinkedHashMap;\nHSPLandroidx/compose/material3/MappedInteractionSource;->access$mapPress(Landroidx/compose/material3/MappedInteractionSource;Landroidx/compose/foundation/interaction/PressInteraction$Press;)Landroidx/compose/foundation/interaction/PressInteraction$Press;\nPLandroidx/compose/material3/MappedInteractionSource;->access$mapPress(Landroidx/compose/material3/MappedInteractionSource;Landroidx/compose/foundation/interaction/PressInteraction$Press;)Landroidx/compose/foundation/interaction/PressInteraction$Press;\nHSPLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow;\nPLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow;\nLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;\nHSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V\nHPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V\nHSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;\nHSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V\nPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V\nHSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;\nHSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;-><init>(Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;-><init>(Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nLandroidx/compose/material3/MaterialRippleTheme;\nHSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V\nPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V\nHSPLandroidx/compose/material3/MaterialRippleTheme;-><init>()V\nPLandroidx/compose/material3/MaterialRippleTheme;-><init>()V\nHSPLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J\nPLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J\nHSPLandroidx/compose/material3/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleAlpha;\nPLandroidx/compose/material3/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleAlpha;\nLandroidx/compose/material3/MaterialTheme;\nHSPLandroidx/compose/material3/MaterialTheme;-><clinit>()V\nPLandroidx/compose/material3/MaterialTheme;-><clinit>()V\nHSPLandroidx/compose/material3/MaterialTheme;-><init>()V\nPLandroidx/compose/material3/MaterialTheme;-><init>()V\nHSPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/Typography;\nHPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;)Landroidx/compose/material3/Typography;\nLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;\nHSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V\nPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;III)V\nLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m$1(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m$1(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ILkotlin/jvm/functions/Function2;Landroidx/compose/runtime/ComposerImpl;)V\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ILkotlin/jvm/functions/Function2;Landroidx/compose/runtime/ComposerImpl;)V\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(JII)I\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/foundation/layout/Arrangement$Top$1;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/foundation/layout/Arrangement$Top$1;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;)V\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;I)Ljava/lang/Object;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;I)Ljava/lang/Object;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;ILandroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;ILandroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/ui/graphics/vector/PathBuilder;FFFF)V\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/ui/graphics/vector/PathBuilder;FFFF)V\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)Lkotlin/reflect/KMutableProperty1;\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)Lkotlin/reflect/KMutableProperty1;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder;\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nHPLandroidx/compose/material3/MenuKt$$ExternalSyntheticOutline0;->m(ZLandroidx/compose/runtime/ComposerImpl;I)Landroidx/compose/ui/layout/MeasurePolicy;\nLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;\nHSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;-><init>(J)V\nHPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;-><init>(J)V\nHSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;\nHSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;-><init>(IILandroidx/compose/ui/layout/Placeable;)V\nPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;-><init>(IILandroidx/compose/ui/layout/Placeable;)V\nHSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/NavigationBarDefaults;\nHSPLandroidx/compose/material3/NavigationBarDefaults;-><clinit>()V\nPLandroidx/compose/material3/NavigationBarDefaults;-><clinit>()V\nHSPLandroidx/compose/material3/NavigationBarDefaults;->getElevation-D9Ej5fM()F\nPLandroidx/compose/material3/NavigationBarDefaults;->getElevation-D9Ej5fM()F\nHSPLandroidx/compose/material3/NavigationBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsets;\nPLandroidx/compose/material3/NavigationBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsets;\nLandroidx/compose/material3/NavigationBarItemColors;\nHSPLandroidx/compose/material3/NavigationBarItemColors;-><init>(JJJJJJJ)V\nHPLandroidx/compose/material3/NavigationBarItemColors;-><init>(JJJJJJJ)V\nHSPLandroidx/compose/material3/NavigationBarItemColors;->getIndicatorColor-0d7_KjU$material3_release()J\nPLandroidx/compose/material3/NavigationBarItemColors;->getIndicatorColor-0d7_KjU$material3_release()J\nHSPLandroidx/compose/material3/NavigationBarItemColors;->iconColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State;\nHPLandroidx/compose/material3/NavigationBarItemColors;->iconColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State;\nHSPLandroidx/compose/material3/NavigationBarItemColors;->textColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State;\nHPLandroidx/compose/material3/NavigationBarItemColors;->textColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State;\nLandroidx/compose/material3/NavigationBarKt;\nHSPLandroidx/compose/material3/NavigationBarKt;-><clinit>()V\nPLandroidx/compose/material3/NavigationBarKt;-><clinit>()V\nHSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F\nHPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F\nHSPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorHorizontalPadding$p()F\nPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorHorizontalPadding$p()F\nHSPLandroidx/compose/material3/NavigationBarKt;->access$placeLabelAndIcon-zUg2_y0(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;JZF)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/material3/NavigationBarKt;->access$placeLabelAndIcon-zUg2_y0(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Placeable;JZF)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/material3/NavigationBarKt;->getIndicatorVerticalPadding()F\nPLandroidx/compose/material3/NavigationBarKt;->getIndicatorVerticalPadding()F\nLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;-><init>(Landroidx/compose/runtime/MutableIntState;I)V\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;-><init>(Landroidx/compose/runtime/MutableIntState;I)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;-><init>(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;-><init>(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;-><init>(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;I)V\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;-><init>(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;I)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;-><init>(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;I)V\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;-><init>(Ljava/lang/Object;ZZILkotlin/jvm/functions/Function2;I)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;-><init>(FLkotlin/jvm/functions/Function2;ZI)V\nPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;-><init>(FLkotlin/jvm/functions/Function2;ZI)V\nHSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/material3/NavigationBarKt$NavigationBarItemLayout$3;\nLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;\nHSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;-><init>(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IFFLandroidx/compose/ui/layout/Placeable;IFLandroidx/compose/ui/layout/Placeable;IFILandroidx/compose/ui/layout/MeasureScope;I)V\nHPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;-><init>(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IFFLandroidx/compose/ui/layout/Placeable;IFLandroidx/compose/ui/layout/Placeable;IFILandroidx/compose/ui/layout/MeasureScope;I)V\nHSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/NavigationRailItemColors;\nLandroidx/compose/material3/NavigationRailKt;\nLandroidx/compose/material3/PinnedScrollBehavior;\nHSPLandroidx/compose/material3/PinnedScrollBehavior;-><init>(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/material3/PinnedScrollBehavior;-><init>(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/material3/PinnedScrollBehavior;->getNestedScrollConnection()Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;\nPLandroidx/compose/material3/PinnedScrollBehavior;->getNestedScrollConnection()Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;\nHSPLandroidx/compose/material3/PinnedScrollBehavior;->getState()Landroidx/compose/material3/TopAppBarState;\nPLandroidx/compose/material3/PinnedScrollBehavior;->getState()Landroidx/compose/material3/TopAppBarState;\nLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;\nHSPLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;-><init>(Landroidx/compose/material3/PinnedScrollBehavior;)V\nHPLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;-><init>(Landroidx/compose/material3/PinnedScrollBehavior;)V\nLandroidx/compose/material3/PlainTooltipPositionProvider;\nHSPLandroidx/compose/material3/PlainTooltipPositionProvider;-><init>(I)V\nHPLandroidx/compose/material3/PlainTooltipPositionProvider;-><init>(I)V\nLandroidx/compose/material3/PlainTooltipState;\nLandroidx/compose/material3/PlainTooltipStateImpl;\nHSPLandroidx/compose/material3/PlainTooltipStateImpl;-><init>(Landroidx/compose/foundation/MutatorMutex;)V\nHPLandroidx/compose/material3/PlainTooltipStateImpl;-><init>(Landroidx/compose/foundation/MutatorMutex;)V\nHSPLandroidx/compose/material3/PlainTooltipStateImpl;->isVisible()Z\nHPLandroidx/compose/material3/PlainTooltipStateImpl;->isVisible()Z\nHSPLandroidx/compose/material3/PlainTooltipStateImpl;->onDispose()V\nPLandroidx/compose/material3/PlainTooltipStateImpl;->onDispose()V\nLandroidx/compose/material3/ProgressIndicatorDefaults;\nHSPLandroidx/compose/material3/ProgressIndicatorDefaults;-><clinit>()V\nPLandroidx/compose/material3/ProgressIndicatorDefaults;-><clinit>()V\nHSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularIndeterminateStrokeCap-KaPHkGw()I\nPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularIndeterminateStrokeCap-KaPHkGw()I\nHSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularStrokeWidth-D9Ej5fM()F\nPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularStrokeWidth-D9Ej5fM()F\nLandroidx/compose/material3/ProgressIndicatorKt;\nHSPLandroidx/compose/material3/ProgressIndicatorKt;-><clinit>()V\nPLandroidx/compose/material3/ProgressIndicatorKt;-><clinit>()V\nHSPLandroidx/compose/material3/ProgressIndicatorKt;->CircularProgressIndicator-LxG7B9w(FIIIJJLandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V\nPLandroidx/compose/material3/ProgressIndicatorKt;->CircularProgressIndicator-LxG7B9w(FIIIJJLandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V\nHSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nHSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nHSPLandroidx/compose/material3/ProgressIndicatorKt;->access$getCircularEasing$p()Landroidx/compose/animation/core/CubicBezierEasing;\nPLandroidx/compose/material3/ProgressIndicatorKt;->access$getCircularEasing$p()Landroidx/compose/animation/core/CubicBezierEasing;\nHSPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicator-42QJj7c(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicator-42QJj7c(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V\nLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;\nHSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;-><init>(FJJLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/ui/graphics/drawscope/Stroke;)V\nPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;-><init>(FJJLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Landroidx/compose/ui/graphics/drawscope/Stroke;)V\nHSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/ProgressIndicatorKt$LinearProgressIndicator$2;\nHSPLandroidx/compose/material3/ProgressIndicatorKt$LinearProgressIndicator$2;-><init>(Landroidx/compose/ui/Modifier;JFJIII)V\nPLandroidx/compose/material3/ProgressIndicatorKt$LinearProgressIndicator$2;-><init>(Landroidx/compose/ui/Modifier;JFJIII)V\nLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;\nHSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/ShapeDefaults;\nHSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V\nPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V\nHSPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nLandroidx/compose/material3/Shapes;\nHSPLandroidx/compose/material3/Shapes;-><init>()V\nPLandroidx/compose/material3/Shapes;-><init>()V\nHSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V\nPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V\nHSPLandroidx/compose/material3/Shapes;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape;\nPLandroidx/compose/material3/Shapes;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape;\nHSPLandroidx/compose/material3/Shapes;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape;\nPLandroidx/compose/material3/Shapes;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape;\nHSPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;\nPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;\nHSPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape;\nPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape;\nHSPLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape;\nPLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape;\nLandroidx/compose/material3/ShapesKt;\nHSPLandroidx/compose/material3/ShapesKt;-><clinit>()V\nPLandroidx/compose/material3/ShapesKt;-><clinit>()V\nHSPLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/material3/ShapesKt;->getValue(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape;\nHPLandroidx/compose/material3/ShapesKt;->getValue(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape;\nLandroidx/compose/material3/ShapesKt$LocalShapes$1;\nHSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V\nPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V\nHSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>(I)V\nPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>(I)V\nHSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/material3/SnackbarData;\nLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;\nHSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;-><init>(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/platform/AccessibilityManager;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;-><init>(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/platform/AccessibilityManager;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SnackbarHostState;\nHSPLandroidx/compose/material3/SnackbarHostState;-><init>()V\nPLandroidx/compose/material3/SnackbarHostState;-><init>()V\nHSPLandroidx/compose/material3/SnackbarHostState;->getCurrentSnackbarData()Landroidx/compose/material3/SnackbarData;\nPLandroidx/compose/material3/SnackbarHostState;->getCurrentSnackbarData()Landroidx/compose/material3/SnackbarData;\nLandroidx/compose/material3/SnackbarKt$Snackbar$3;\nHSPLandroidx/compose/material3/SnackbarKt$Snackbar$3;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/material3/SnackbarKt$Snackbar$3;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/SnackbarKt$Snackbar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SurfaceKt;\nHSPLandroidx/compose/material3/SurfaceKt;-><clinit>()V\nPLandroidx/compose/material3/SurfaceKt;-><clinit>()V\nHSPLandroidx/compose/material3/SurfaceKt;->Surface-T9BRK9s(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/SurfaceKt;->Surface-T9BRK9s(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/SurfaceKt;->Surface-o_FOJdg(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/SurfaceKt;->Surface-o_FOJdg(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J\nPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J\nLandroidx/compose/material3/SurfaceKt$Surface$1;\nHSPLandroidx/compose/material3/SurfaceKt$Surface$1;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/material3/SurfaceKt$Surface$1;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SurfaceKt$Surface$1$2;\nHSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/material3/SurfaceKt$Surface$1$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SurfaceKt$Surface$3;\nHSPLandroidx/compose/material3/SurfaceKt$Surface$3;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLandroidx/compose/material3/SurfaceKt$Surface$3;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SwitchColors;\nHSPLandroidx/compose/material3/SwitchColors;-><init>(JJJJJJJJJJJJJJJJ)V\nPLandroidx/compose/material3/SwitchColors;-><init>(JJJJJJJJJJJJJJJJ)V\nHSPLandroidx/compose/material3/SwitchColors;->borderColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/SwitchColors;->borderColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/material3/SwitchColors;->thumbColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/SwitchColors;->thumbColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/material3/SwitchColors;->trackColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nPLandroidx/compose/material3/SwitchColors;->trackColor$material3_release(ZZLandroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nLandroidx/compose/material3/SwitchDefaults;\nHSPLandroidx/compose/material3/SwitchDefaults;-><clinit>()V\nPLandroidx/compose/material3/SwitchDefaults;-><clinit>()V\nLandroidx/compose/material3/SwitchKt;\nHSPLandroidx/compose/material3/SwitchKt;-><clinit>()V\nPLandroidx/compose/material3/SwitchKt;-><clinit>()V\nHSPLandroidx/compose/material3/SwitchKt;->Switch(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/SwitchKt;->Switch(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/SwitchKt;->SwitchImpl-0DmnUew(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFLandroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/SwitchKt;->SwitchImpl-0DmnUew(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFLandroidx/compose/runtime/Composer;II)V\nLandroidx/compose/material3/SwitchKt$Switch$2;\nHSPLandroidx/compose/material3/SwitchKt$Switch$2;-><init>(Ljava/lang/Object;FI)V\nHPLandroidx/compose/material3/SwitchKt$Switch$2;-><init>(Ljava/lang/Object;FI)V\nHSPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()V\nHPLandroidx/compose/material3/SwitchKt$Switch$2;->invoke()V\nLandroidx/compose/material3/SwitchKt$Switch$3;\nHSPLandroidx/compose/material3/SwitchKt$Switch$3;-><init>(Landroidx/compose/animation/core/Animatable;FLkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/compose/material3/SwitchKt$Switch$3;-><init>(Landroidx/compose/animation/core/Animatable;FLkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/material3/SwitchKt$Switch$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/SwitchKt$Switch$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;-><init>()V\nPLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;-><init>()V\nPLandroidx/compose/material3/SwitchKt$Switch$3$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/material3/SwitchKt$Switch$5;\nHSPLandroidx/compose/material3/SwitchKt$Switch$5;-><init>(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V\nPLandroidx/compose/material3/SwitchKt$Switch$5;-><init>(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/SwitchColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V\nLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;\nHSPLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;-><init>(FF)V\nPLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;-><init>(FF)V\nHSPLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/SwitchKt$Switch$valueToOffset$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;\nHSPLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;-><init>(F)V\nPLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;-><init>(F)V\nHSPLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/SwitchKt$SwitchImpl$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/SwitchKt$SwitchImpl$2;\nHSPLandroidx/compose/material3/SwitchKt$SwitchImpl$2;-><init>(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFII)V\nPLandroidx/compose/material3/SwitchKt$SwitchImpl$2;-><init>(Landroidx/compose/foundation/layout/BoxScope;ZZLandroidx/compose/material3/SwitchColors;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/ui/graphics/Shape;FFFII)V\nLandroidx/compose/material3/TabKt$TabTransition$color$2;\nHSPLandroidx/compose/material3/TabKt$TabTransition$color$2;-><clinit>()V\nPLandroidx/compose/material3/TabKt$TabTransition$color$2;-><clinit>()V\nHSPLandroidx/compose/material3/TabKt$TabTransition$color$2;-><init>(I)V\nPLandroidx/compose/material3/TabKt$TabTransition$color$2;-><init>(I)V\nHSPLandroidx/compose/material3/TabKt$TabTransition$color$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/TabKt$TabTransition$color$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/TextKt;\nHSPLandroidx/compose/material3/TextKt;-><clinit>()V\nPLandroidx/compose/material3/TextKt;-><clinit>()V\nHSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V\nHPLandroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V\nHSPLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLandroidx/compose/material3/TextKt$ProvideTextStyle$1;\nHSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;II)V\nHPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;II)V\nHSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/TextKt$Text$1;\nHSPLandroidx/compose/material3/TextKt$Text$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V\nHPLandroidx/compose/material3/TextKt$Text$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V\nHSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/TooltipDefaults;\nHSPLandroidx/compose/material3/TooltipDefaults;-><clinit>()V\nPLandroidx/compose/material3/TooltipDefaults;-><clinit>()V\nHSPLandroidx/compose/material3/TooltipDefaults;->getGlobalMutatorMutex()Landroidx/compose/foundation/MutatorMutex;\nPLandroidx/compose/material3/TooltipDefaults;->getGlobalMutatorMutex()Landroidx/compose/foundation/MutatorMutex;\nLandroidx/compose/material3/TooltipKt;\nHSPLandroidx/compose/material3/TooltipKt;-><clinit>()V\nPLandroidx/compose/material3/TooltipKt;-><clinit>()V\nHSPLandroidx/compose/material3/TooltipKt;->PlainTooltipBox-EVJuX4I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/material3/TooltipKt;->PlainTooltipBox-EVJuX4I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/material3/TooltipKt;->TooltipBox-xJj0JzU(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/TooltipKt;->TooltipBox-xJj0JzU(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V\nLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;\nHSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;-><init>(JLkotlin/jvm/functions/Function2;II)V\nHPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;-><init>(JLkotlin/jvm/functions/Function2;II)V\nHSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/TooltipKt$PlainTooltipBox$2;\nHSPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$2;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;II)V\nHPLandroidx/compose/material3/TooltipKt$PlainTooltipBox$2;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/PlainTooltipState;Landroidx/compose/ui/graphics/Shape;JJLkotlin/jvm/functions/Function3;II)V\nLandroidx/compose/material3/TooltipKt$TooltipBox$1$1;\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/PlainTooltipState;)V\nHPLandroidx/compose/material3/TooltipKt$TooltipBox$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/PlainTooltipState;)V\nLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/material3/TooltipKt$TooltipBox$2$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/material3/TooltipKt$TooltipBox$3;\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$3;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;I)V\nHPLandroidx/compose/material3/TooltipKt$TooltipBox$3;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/window/PopupPositionProvider;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/PlainTooltipState;JFFLkotlin/jvm/functions/Function3;I)V\nLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;-><init>(Landroidx/compose/material3/PlainTooltipState;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;)V\nHPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;-><init>(Landroidx/compose/material3/PlainTooltipState;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;)V\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;->tooltipTrigger(Landroidx/compose/ui/Modifier$Companion;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1;->tooltipTrigger(Landroidx/compose/ui/Modifier$Companion;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1$tooltipTrigger$1;\nHSPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1$tooltipTrigger$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/material3/TooltipKt$TooltipBox$scope$1$1$tooltipTrigger$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;\nHSPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/material3/TooltipKt$animateTooltip$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/TopAppBarColors;\nHSPLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJ)V\nPLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJ)V\nHSPLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;)J\nHPLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;)J\nPLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU()J\nPLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU()J\nHSPLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU()J\nPLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU()J\nHSPLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU()J\nPLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU()J\nLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;\nHSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;-><clinit>()V\nPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;-><clinit>()V\nHSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;-><init>()V\nPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;-><init>()V\nLandroidx/compose/material3/TopAppBarScrollBehavior;\nLandroidx/compose/material3/TopAppBarState;\nHSPLandroidx/compose/material3/TopAppBarState;-><clinit>()V\nPLandroidx/compose/material3/TopAppBarState;-><clinit>()V\nHSPLandroidx/compose/material3/TopAppBarState;-><init>(FFF)V\nPLandroidx/compose/material3/TopAppBarState;-><init>(FFF)V\nHSPLandroidx/compose/material3/TopAppBarState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/material3/TopAppBarState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/material3/TopAppBarState;->getContentOffset()F\nHPLandroidx/compose/material3/TopAppBarState;->getContentOffset()F\nHSPLandroidx/compose/material3/TopAppBarState;->getHeightOffset()F\nHPLandroidx/compose/material3/TopAppBarState;->getHeightOffset()F\nHSPLandroidx/compose/material3/TopAppBarState;->getHeightOffsetLimit()F\nHPLandroidx/compose/material3/TopAppBarState;->getHeightOffsetLimit()F\nHSPLandroidx/compose/material3/TopAppBarState;->setHeightOffsetLimit(F)V\nPLandroidx/compose/material3/TopAppBarState;->setHeightOffsetLimit(F)V\nLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;\nHSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;-><clinit>()V\nPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;-><clinit>()V\nHSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;-><init>(I)V\nPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;-><init>(I)V\nHSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/material3/Typography;\nHSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V\nPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V\nHSPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/Typography;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/Typography;->getLabelMedium()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getLabelMedium()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle;\nLandroidx/compose/material3/TypographyKt;\nHSPLandroidx/compose/material3/TypographyKt;-><clinit>()V\nPLandroidx/compose/material3/TypographyKt;-><clinit>()V\nHSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;I)Landroidx/compose/ui/text/TextStyle;\nHPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;I)Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLandroidx/compose/material3/tokens/BadgeTokens;\nHSPLandroidx/compose/material3/tokens/BadgeTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/BadgeTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/BadgeTokens;->getSize-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/BadgeTokens;->getSize-D9Ej5fM()F\nLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;\nHSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorWidth-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getSize-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getSize-D9Ej5fM()F\nLandroidx/compose/material3/tokens/ColorLightTokens;\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/ColorLightTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceBright-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceBright-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainer-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainer-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHigh-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHigh-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHighest-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerHighest-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLow-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLow-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLowest-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceContainerLowest-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceDim-0d7_KjU()J\nPLandroidx/compose/material3/tokens/ColorLightTokens;->getSurfaceDim-0d7_KjU()J\nLandroidx/compose/material3/tokens/DividerTokens;\nHSPLandroidx/compose/material3/tokens/DividerTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/DividerTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/DividerTokens;->getThickness-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/DividerTokens;->getThickness-D9Ej5fM()F\nLandroidx/compose/material3/tokens/ElevationTokens;\nHSPLandroidx/compose/material3/tokens/ElevationTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/ElevationTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F\nLandroidx/compose/material3/tokens/FilledButtonTokens;\nHSPLandroidx/compose/material3/tokens/FilledButtonTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/FilledButtonTokens;-><clinit>()V\nLandroidx/compose/material3/tokens/IconButtonTokens;\nHSPLandroidx/compose/material3/tokens/IconButtonTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/IconButtonTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()I\nPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()I\nHSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F\nLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;\nHSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->getTrackHeight-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->getTrackHeight-D9Ej5fM()F\nLandroidx/compose/material3/tokens/NavigationBarTokens;\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/NavigationBarTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorHeight-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorHeight-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorShape()I\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorShape()I\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorWidth-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveLabelTextColor()I\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveLabelTextColor()I\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerColor()I\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerColor()I\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerElevation-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerElevation-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerHeight-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerHeight-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getIconSize-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getIconSize-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveIconColor()I\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveIconColor()I\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveLabelTextColor()I\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveLabelTextColor()I\nHSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getLabelTextFont()I\nPLandroidx/compose/material3/tokens/NavigationBarTokens;->getLabelTextFont()I\nLandroidx/compose/material3/tokens/PaletteTokens;\nHSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral100-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral100-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral87-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral87-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral90-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral90-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral92-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral92-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral94-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral94-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral96-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral96-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral98-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral98-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J\nHSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J\nPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J\nLandroidx/compose/material3/tokens/ShapeTokens;\nHSPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape;\nHSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;\nLandroidx/compose/material3/tokens/SwitchTokens;\nHSPLandroidx/compose/material3/tokens/SwitchTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/SwitchTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleColor()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleWidth-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedHandleWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedIconColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedIconColor()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedTrackColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getSelectedTrackColor()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getStateLayerSize-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/SwitchTokens;->getStateLayerSize-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackHeight-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackHeight-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackOutlineWidth-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackOutlineWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackShape()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackShape()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackWidth-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/SwitchTokens;->getTrackWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedFocusTrackOutlineColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedFocusTrackOutlineColor()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleColor()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleWidth-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedHandleWidth-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedIconColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedIconColor()I\nHSPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedTrackColor()I\nPLandroidx/compose/material3/tokens/SwitchTokens;->getUnselectedTrackColor()I\nLandroidx/compose/material3/tokens/TextButtonTokens;\nHSPLandroidx/compose/material3/tokens/TextButtonTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/TextButtonTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/TextButtonTokens;->getContainerShape()I\nPLandroidx/compose/material3/tokens/TextButtonTokens;->getContainerShape()I\nHSPLandroidx/compose/material3/tokens/TextButtonTokens;->getDisabledLabelTextColor()I\nPLandroidx/compose/material3/tokens/TextButtonTokens;->getDisabledLabelTextColor()I\nHSPLandroidx/compose/material3/tokens/TextButtonTokens;->getLabelTextColor()I\nPLandroidx/compose/material3/tokens/TextButtonTokens;->getLabelTextColor()I\nLandroidx/compose/material3/tokens/TopAppBarSmallTokens;\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><clinit>()V\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()I\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()I\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()I\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()I\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()I\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()I\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F\nHSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()I\nPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()I\nLandroidx/compose/material3/tokens/TypographyTokensKt;\nHSPLandroidx/compose/material3/tokens/TypographyTokensKt;-><clinit>()V\nPLandroidx/compose/material3/tokens/TypographyTokensKt;-><clinit>()V\nHSPLandroidx/compose/material3/tokens/TypographyTokensKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/material3/tokens/TypographyTokensKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle;\nLandroidx/compose/runtime/AbstractApplier;\nHSPLandroidx/compose/runtime/AbstractApplier;-><init>(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/AbstractApplier;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/AbstractApplier;->clear()V\nHPLandroidx/compose/runtime/AbstractApplier;->clear()V\nHSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object;\nHPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object;\nPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/AbstractApplier;->up()V\nHPLandroidx/compose/runtime/AbstractApplier;->up()V\nLandroidx/compose/runtime/ActualAndroid_androidKt;\nHSPLandroidx/compose/runtime/ActualAndroid_androidKt;-><clinit>()V\nPLandroidx/compose/runtime/ActualAndroid_androidKt;-><clinit>()V\nLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;\nHSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><clinit>()V\nPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><clinit>()V\nHSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><init>()V\nPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><init>()V\nLandroidx/compose/runtime/Anchor;\nHSPLandroidx/compose/runtime/Anchor;-><init>(I)V\nHPLandroidx/compose/runtime/Anchor;-><init>(I)V\nHSPLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I\nPLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I\nHSPLandroidx/compose/runtime/Anchor;->getValid()Z\nHPLandroidx/compose/runtime/Anchor;->getValid()Z\nHSPLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V\nPLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V\nLandroidx/compose/runtime/Applier;\nHSPLandroidx/compose/runtime/Applier;->onEndChanges()V\nPLandroidx/compose/runtime/Applier;->onEndChanges()V\nLandroidx/compose/runtime/BroadcastFrameClock;\nHSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List;\nPLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List;\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object;\nPLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z\nHPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V\nHPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V\nHSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;\nHSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V\nHPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V\nLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;\nHSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;-><init>(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;-><init>(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/ComposableSingletons$CompositionKt;\nHSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V\nPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V\nLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;\nHSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><clinit>()V\nPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><clinit>()V\nHSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><init>(I)V\nPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><init>(I)V\nLandroidx/compose/runtime/ComposeNodeLifecycleCallback;\nLandroidx/compose/runtime/ComposeRuntimeError;\nLandroidx/compose/runtime/Composer;\nLandroidx/compose/runtime/Composer$Companion;\nHSPLandroidx/compose/runtime/Composer$Companion;-><clinit>()V\nPLandroidx/compose/runtime/Composer$Companion;-><clinit>()V\nHSPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Landroidx/compose/runtime/Composer$Companion$Empty$1;\nHPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Landroidx/compose/runtime/Composer$Companion$Empty$1;\nLandroidx/compose/runtime/Composer$Companion$Empty$1;\nHSPLandroidx/compose/runtime/Composer$Companion$Empty$1;-><init>()V\nPLandroidx/compose/runtime/Composer$Companion$Empty$1;-><init>()V\nLandroidx/compose/runtime/ComposerImpl;\nHSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/changelist/ChangeList;Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I\nHPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I\nHSPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext;\nPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext;\nHSPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V\nHPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V\nHSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext;\nHPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext;\nHSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z\nHPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z\nHPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z\nHPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z\nHPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V\nHPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V\nHSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V\nHPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V\nHSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I\nHPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I\nHSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V\nHPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V\nHSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V\nHPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V\nHSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V\nHPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V\nHSPLandroidx/compose/runtime/ComposerImpl;->end(Z)V\nHPLandroidx/compose/runtime/ComposerImpl;->end(Z)V\nHSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V\nHPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V\nHPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endNode()V\nHPLandroidx/compose/runtime/ComposerImpl;->endNode()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endProvider()V\nPLandroidx/compose/runtime/ComposerImpl;->endProvider()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V\nPLandroidx/compose/runtime/ComposerImpl;->endProviders()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V\nHPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;\nHPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl;\nHSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V\nPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V\nHSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V\nHPLandroidx/compose/runtime/ComposerImpl;->endRoot()V\nHSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V\nHPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier;\nHPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier;\nHSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z\nPLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z\nHSPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition;\nHPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition;\nHSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I\nPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I\nHSPLandroidx/compose/runtime/ComposerImpl;->getCurrentCompositionLocalMap()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHPLandroidx/compose/runtime/ComposerImpl;->getCurrentCompositionLocalMap()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;\nHPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;\nHSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z\nHPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z\nHSPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Landroidx/compose/runtime/changelist/ChangeList;\nPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Landroidx/compose/runtime/changelist/ChangeList;\nHSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z\nHPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z\nHSPLandroidx/compose/runtime/ComposerImpl;->getReader$runtime_release()Landroidx/compose/runtime/SlotReader;\nHPLandroidx/compose/runtime/ComposerImpl;->getReader$runtime_release()Landroidx/compose/runtime/SlotReader;\nHSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z\nHPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z\nHSPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z\nPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z\nHSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;\nHPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z\nHPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V\nHPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V\nHSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V\nHPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V\nHSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V\nHPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V\nHSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I\nHPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I\nHSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V\nHPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V\nHSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(IILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V\nHPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V\nHSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V\nHPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startNode()V\nHPLandroidx/compose/runtime/ComposerImpl;->startNode()V\nHSPLandroidx/compose/runtime/ComposerImpl;->startProvider(Landroidx/compose/runtime/ProvidedValue;)V\nHPLandroidx/compose/runtime/ComposerImpl;->startProvider(Landroidx/compose/runtime/ProvidedValue;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V\nHPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V\nHPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(Ljava/lang/Object;Z)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V\nHPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;\nHPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl;\nHSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V\nHPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V\nHSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V\nHPLandroidx/compose/runtime/ComposerImpl;->startRoot()V\nHSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V\nHPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V\nHSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V\nHPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V\nHSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V\nHPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V\nHSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I\nHPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I\nHSPLandroidx/compose/runtime/ComposerImpl;->useNode()V\nHPLandroidx/compose/runtime/ComposerImpl;->useNode()V\nLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V\nLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZLandroidx/compose/runtime/CompositionObserverHolder;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/LinkedHashSet;\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/LinkedHashSet;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V\nPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V\nLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;\nHSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;-><init>(Landroidx/compose/runtime/ComposerImpl;)V\nPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;-><init>(Landroidx/compose/runtime/ComposerImpl;)V\nHSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V\nHPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done()V\nHSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V\nHPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start()V\nLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;\nHSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;-><init>()V\nPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;-><init>()V\nHSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$40$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nLandroidx/compose/runtime/ComposerKt;\nHSPLandroidx/compose/runtime/ComposerKt;-><clinit>()V\nPLandroidx/compose/runtime/ComposerKt;-><clinit>()V\nHSPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(IILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation;\nHPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(IILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation;\nHSPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/ArrayList;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/ArrayList;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I\nHPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I\nHSPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(ILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation;\nPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(ILjava/util/ArrayList;)Landroidx/compose/runtime/Invalidation;\nHSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(IILjava/util/ArrayList;)V\nHPLandroidx/compose/runtime/ComposerKt;->access$removeRange(IILjava/util/ArrayList;)V\nHSPLandroidx/compose/runtime/ComposerKt;->findLocation(ILjava/util/List;)I\nHPLandroidx/compose/runtime/ComposerKt;->findLocation(ILjava/util/List;)I\nHSPLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Landroidx/compose/runtime/OpaqueKey;\nPLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Landroidx/compose/runtime/OpaqueKey;\nHSPLandroidx/compose/runtime/ComposerKt;->getInvocation()Landroidx/compose/runtime/OpaqueKey;\nPLandroidx/compose/runtime/ComposerKt;->getInvocation()Landroidx/compose/runtime/OpaqueKey;\nHSPLandroidx/compose/runtime/ComposerKt;->getProvider()Landroidx/compose/runtime/OpaqueKey;\nPLandroidx/compose/runtime/ComposerKt;->getProvider()Landroidx/compose/runtime/OpaqueKey;\nHSPLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Landroidx/compose/runtime/OpaqueKey;\nPLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Landroidx/compose/runtime/OpaqueKey;\nHSPLandroidx/compose/runtime/ComposerKt;->getReference()Landroidx/compose/runtime/OpaqueKey;\nPLandroidx/compose/runtime/ComposerKt;->getReference()Landroidx/compose/runtime/OpaqueKey;\nHSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V\nHPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V\nLandroidx/compose/runtime/Composition;\nLandroidx/compose/runtime/CompositionContext;\nHSPLandroidx/compose/runtime/CompositionContext;-><init>()V\nPLandroidx/compose/runtime/CompositionContext;-><init>()V\nHSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V\nPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V\nHSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap;\nHSPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;\nPLandroidx/compose/runtime/CompositionContext;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;\nHSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V\nPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V\nHSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V\nPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V\nPLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V\nLandroidx/compose/runtime/CompositionContextKt;\nHSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V\nPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V\nHSPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyPersistentCompositionLocalMap$p()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyPersistentCompositionLocalMap$p()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nLandroidx/compose/runtime/CompositionImpl;\nHSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/AbstractApplier;)V\nHPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/AbstractApplier;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet;\nHPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet;\nHSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V\nHPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V\nHSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V\nHPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V\nHSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Landroidx/compose/runtime/changelist/ChangeList;)V\nHPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Landroidx/compose/runtime/changelist/ChangeList;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V\nHPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V\nHSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V\nHPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V\nHSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V\nHPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V\nHSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->dispose()V\nHPLandroidx/compose/runtime/CompositionImpl;->dispose()V\nHSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V\nHPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V\nHSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V\nHPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V\nHSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z\nHPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z\nHSPLandroidx/compose/runtime/CompositionImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;\nPLandroidx/compose/runtime/CompositionImpl;->getObserverHolder$runtime_release()Landroidx/compose/runtime/CompositionObserverHolder;\nHSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z\nPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z\nHSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z\nPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z\nHSPLandroidx/compose/runtime/CompositionImpl;->observer()V\nHPLandroidx/compose/runtime/CompositionImpl;->observer()V\nHSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z\nHPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z\nHSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z\nHPLandroidx/compose/runtime/CompositionImpl;->recompose()Z\nHSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V\nPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased()V\nHSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V\nHPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Landroidx/compose/runtime/collection/IdentityArraySet;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->removeDerivedStateObservation$runtime_release(Landroidx/compose/runtime/DerivedState;)V\nPLandroidx/compose/runtime/CompositionImpl;->removeDerivedStateObservation$runtime_release(Landroidx/compose/runtime/DerivedState;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V\nHPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/HashSet;)V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V\nHPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V\nHPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V\nHPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V\nPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->releasing(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V\nPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->releasing(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V\nHPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V\nHSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/runtime/CompositionKt;\nHSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V\nPLandroidx/compose/runtime/CompositionKt;-><clinit>()V\nHSPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object;\nPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object;\nLandroidx/compose/runtime/CompositionLocal;\nHSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder;\nPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder;\nLandroidx/compose/runtime/CompositionLocalKt$CompositionLocalProvider$1;\nLandroidx/compose/runtime/CompositionLocalMap;\nHSPLandroidx/compose/runtime/CompositionLocalMap;-><clinit>()V\nPLandroidx/compose/runtime/CompositionLocalMap;-><clinit>()V\nLandroidx/compose/runtime/CompositionLocalMap$Companion;\nHSPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><clinit>()V\nPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><clinit>()V\nHSPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><init>()V\nPLandroidx/compose/runtime/CompositionLocalMap$Companion;-><init>()V\nHSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->getEmpty()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nPLandroidx/compose/runtime/CompositionLocalMap$Companion;->getEmpty()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nLandroidx/compose/runtime/CompositionObserverHolder;\nHSPLandroidx/compose/runtime/CompositionObserverHolder;-><init>()V\nHPLandroidx/compose/runtime/CompositionObserverHolder;-><init>()V\nHSPLandroidx/compose/runtime/CompositionObserverHolder;->getObserver()V\nPLandroidx/compose/runtime/CompositionObserverHolder;->getObserver()V\nHSPLandroidx/compose/runtime/CompositionObserverHolder;->getRoot()Z\nPLandroidx/compose/runtime/CompositionObserverHolder;->getRoot()Z\nLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;\nHSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/CoroutineScope;)V\nHPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;\nPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;\nHSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V\nHPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V\nHSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V\nHPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V\nLandroidx/compose/runtime/ControlledComposition;\nLandroidx/compose/runtime/DefaultChoreographerFrameClock;\nLandroidx/compose/runtime/DerivedSnapshotState;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->current(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHPLandroidx/compose/runtime/DerivedSnapshotState;->current(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V\nHPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object;\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getCurrentValue()Ljava/lang/Object;\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getCurrentValue()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()[Ljava/lang/Object;\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object;\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->get_dependencies()Landroidx/compose/runtime/collection/IdentityArrayMap;\nHPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->get_dependencies()Landroidx/compose/runtime/collection/IdentityArrayMap;\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z\nHPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I\nHPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotId(I)V\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotId(I)V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotWriteCount(I)V\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotWriteCount(I)V\nHSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->set_dependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V\nPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->set_dependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V\nLandroidx/compose/runtime/DerivedState;\nLandroidx/compose/runtime/DerivedStateObserver;\nLandroidx/compose/runtime/DisposableEffectImpl;\nHSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V\nHPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V\nHSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V\nHPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V\nLandroidx/compose/runtime/DisposableEffectResult;\nLandroidx/compose/runtime/DisposableEffectScope;\nHSPLandroidx/compose/runtime/DisposableEffectScope;-><init>()V\nPLandroidx/compose/runtime/DisposableEffectScope;-><init>()V\nLandroidx/compose/runtime/DynamicProvidableCompositionLocal;\nHSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;\nHPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;\nLandroidx/compose/runtime/EffectsKt;\nHSPLandroidx/compose/runtime/EffectsKt;-><clinit>()V\nPLandroidx/compose/runtime/EffectsKt;-><clinit>()V\nHSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Ljava/lang/Boolean;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Ljava/lang/Boolean;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope;\nPLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope;\nHSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/EmptyCoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope;\nHPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/EmptyCoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope;\nLandroidx/compose/runtime/GroupInfo;\nHSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V\nPLandroidx/compose/runtime/GroupInfo;-><init>(III)V\nHSPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I\nPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I\nHSPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I\nPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I\nHSPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I\nPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I\nHSPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V\nPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V\nHSPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V\nPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V\nHSPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V\nPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V\nLandroidx/compose/runtime/GroupKind$Companion;\nHSPLandroidx/compose/runtime/GroupKind$Companion;-><init>()V\nPLandroidx/compose/runtime/GroupKind$Companion;-><init>()V\nPLandroidx/compose/runtime/GroupKind$Companion;->access$removeRunning(Landroidx/compose/runtime/GroupKind$Companion;)V\nLandroidx/compose/runtime/IntStack;\nHSPLandroidx/compose/runtime/IntStack;-><init>(II)V\nHPLandroidx/compose/runtime/IntStack;-><init>(II)V\nHSPLandroidx/compose/runtime/IntStack;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nHPLandroidx/compose/runtime/IntStack;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nHSPLandroidx/compose/runtime/IntStack;->add-0FcD4WY(J)V\nPLandroidx/compose/runtime/IntStack;->add-0FcD4WY(J)V\nHSPLandroidx/compose/runtime/IntStack;->clear()V\nPLandroidx/compose/runtime/IntStack;->clear()V\nHSPLandroidx/compose/runtime/IntStack;->contains(J)Z\nPLandroidx/compose/runtime/IntStack;->contains(J)Z\nHSPLandroidx/compose/runtime/IntStack;->get-_I2yYro(I)J\nPLandroidx/compose/runtime/IntStack;->get-_I2yYro(I)J\nHSPLandroidx/compose/runtime/IntStack;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nPLandroidx/compose/runtime/IntStack;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/IntStack;->getSize()I\nHPLandroidx/compose/runtime/IntStack;->getSize()I\nHSPLandroidx/compose/runtime/IntStack;->getSizeDelta()I\nPLandroidx/compose/runtime/IntStack;->getSizeDelta()I\nHSPLandroidx/compose/runtime/IntStack;->isEmpty()Z\nPLandroidx/compose/runtime/IntStack;->isEmpty()Z\nHSPLandroidx/compose/runtime/IntStack;->peek()I\nPLandroidx/compose/runtime/IntStack;->peek()I\nHSPLandroidx/compose/runtime/IntStack;->peekOr(I)I\nPLandroidx/compose/runtime/IntStack;->peekOr(I)I\nHSPLandroidx/compose/runtime/IntStack;->pop()I\nPLandroidx/compose/runtime/IntStack;->pop()I\nHSPLandroidx/compose/runtime/IntStack;->push(I)V\nHPLandroidx/compose/runtime/IntStack;->push(I)V\nHSPLandroidx/compose/runtime/IntStack;->remove-0FcD4WY(J)V\nPLandroidx/compose/runtime/IntStack;->remove-0FcD4WY(J)V\nHSPLandroidx/compose/runtime/IntStack;->removeAt(I)V\nPLandroidx/compose/runtime/IntStack;->removeAt(I)V\nHSPLandroidx/compose/runtime/IntStack;->setNode(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V\nPLandroidx/compose/runtime/IntStack;->setNode(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V\nLandroidx/compose/runtime/Invalidation;\nHSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V\nPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V\nHSPLandroidx/compose/runtime/Invalidation;->getInstances()Landroidx/compose/runtime/collection/IdentityArraySet;\nPLandroidx/compose/runtime/Invalidation;->getInstances()Landroidx/compose/runtime/collection/IdentityArraySet;\nHSPLandroidx/compose/runtime/Invalidation;->getLocation()I\nHPLandroidx/compose/runtime/Invalidation;->getLocation()I\nHSPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl;\nPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl;\nHSPLandroidx/compose/runtime/Invalidation;->isInvalid()Z\nPLandroidx/compose/runtime/Invalidation;->isInvalid()Z\nHSPLandroidx/compose/runtime/Invalidation;->setInstances()V\nPLandroidx/compose/runtime/Invalidation;->setInstances()V\nLandroidx/compose/runtime/JoinedKey;\nHSPLandroidx/compose/runtime/JoinedKey;-><init>(Ljava/lang/Integer;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/JoinedKey;-><init>(Ljava/lang/Integer;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/JoinedKey;->hashCode()I\nHPLandroidx/compose/runtime/JoinedKey;->hashCode()I\nLandroidx/compose/runtime/KeyInfo;\nHSPLandroidx/compose/runtime/KeyInfo;-><init>(IIILjava/lang/Object;)V\nPLandroidx/compose/runtime/KeyInfo;-><init>(IIILjava/lang/Object;)V\nHSPLandroidx/compose/runtime/KeyInfo;->getKey()I\nPLandroidx/compose/runtime/KeyInfo;->getKey()I\nHSPLandroidx/compose/runtime/KeyInfo;->getLocation()I\nHPLandroidx/compose/runtime/KeyInfo;->getLocation()I\nHSPLandroidx/compose/runtime/KeyInfo;->getNodes()I\nPLandroidx/compose/runtime/KeyInfo;->getNodes()I\nHSPLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object;\nPLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object;\nLandroidx/compose/runtime/Latch;\nHSPLandroidx/compose/runtime/Latch;-><init>()V\nPLandroidx/compose/runtime/Latch;-><init>()V\nHSPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Latch;->closeLatch()V\nPLandroidx/compose/runtime/Latch;->closeLatch()V\nHSPLandroidx/compose/runtime/Latch;->openLatch()V\nPLandroidx/compose/runtime/Latch;->openLatch()V\nLandroidx/compose/runtime/Latch$await$2$2;\nHSPLandroidx/compose/runtime/Latch$await$2$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/Latch$await$2$2;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Latch$await$2$2;->invoke(Ljava/lang/Throwable;)V\nLandroidx/compose/runtime/LaunchedEffectImpl;\nHSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V\nHPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V\nHSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V\nHPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V\nLandroidx/compose/runtime/LazyValueHolder;\nHSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;\nPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;\nLandroidx/compose/runtime/LeftCompositionCancellationException;\nHSPLandroidx/compose/runtime/LeftCompositionCancellationException;-><init>()V\nHPLandroidx/compose/runtime/LeftCompositionCancellationException;-><init>()V\nHSPLandroidx/compose/runtime/LeftCompositionCancellationException;->fillInStackTrace()Ljava/lang/Throwable;\nHPLandroidx/compose/runtime/LeftCompositionCancellationException;->fillInStackTrace()Ljava/lang/Throwable;\nLandroidx/compose/runtime/MonotonicFrameClock;\nHSPLandroidx/compose/runtime/MonotonicFrameClock;-><clinit>()V\nPLandroidx/compose/runtime/MonotonicFrameClock;-><clinit>()V\nHSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nHPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nLandroidx/compose/runtime/MonotonicFrameClock$Key;\nHSPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><clinit>()V\nPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><clinit>()V\nHSPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><init>()V\nPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><init>()V\nLandroidx/compose/runtime/MonotonicFrameClockKt;\nHSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock;\nHPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock;\nHSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;\nHSPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/MonotonicFrameClockKt$withFrameMillis$2;->invoke(Ljava/lang/Object;)V\nLandroidx/compose/runtime/MovableContentStateReference;\nLandroidx/compose/runtime/MutableFloatState;\nLandroidx/compose/runtime/MutableIntState;\nLandroidx/compose/runtime/MutableLongState;\nLandroidx/compose/runtime/MutableState;\nLandroidx/compose/runtime/NeverEqualPolicy;\nHSPLandroidx/compose/runtime/NeverEqualPolicy;-><clinit>()V\nPLandroidx/compose/runtime/NeverEqualPolicy;-><clinit>()V\nHSPLandroidx/compose/runtime/NeverEqualPolicy;-><init>()V\nPLandroidx/compose/runtime/NeverEqualPolicy;-><init>()V\nHSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z\nPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z\nLandroidx/compose/runtime/OpaqueKey;\nHSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V\nPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V\nHSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I\nHPLandroidx/compose/runtime/OpaqueKey;->hashCode()I\nLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><clinit>()V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><clinit>()V\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><init>(F)V\nHPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;-><init>(F)V\nLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><clinit>()V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><clinit>()V\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><init>(I)V\nHPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;-><init>(I)V\nLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;-><init>(I)V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;-><init>(I)V\nLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;-><clinit>()V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;-><clinit>()V\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;-><init>(J)V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;-><init>(J)V\nLandroidx/compose/runtime/ParcelableSnapshotMutableState;\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V\nHPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V\nLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;\nHSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;-><init>()V\nPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;-><init>()V\nLandroidx/compose/runtime/PausableMonotonicFrameClock;\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(Landroidx/compose/runtime/MonotonicFrameClock;)V\nPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(Landroidx/compose/runtime/MonotonicFrameClock;)V\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V\nPLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V\nPLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/Pending;\nHSPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V\nHPLandroidx/compose/runtime/Pending;-><init>(ILjava/util/ArrayList;)V\nHSPLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List;\nPLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List;\nHSPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo;\nHPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo;\nHSPLandroidx/compose/runtime/Pending;->getStartIndex()I\nPLandroidx/compose/runtime/Pending;->getStartIndex()I\nHSPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I\nHPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I\nHSPLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)V\nPLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)V\nHSPLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V\nPLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V\nHSPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V\nHPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V\nHSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z\nHPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z\nLandroidx/compose/runtime/Pending$keyMap$2;\nHSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;\nLandroidx/compose/runtime/PersistentCompositionLocalMap;\nLandroidx/compose/runtime/ProduceStateScope;\nLandroidx/compose/runtime/ProduceStateScopeImpl;\nHSPLandroidx/compose/runtime/ProduceStateScopeImpl;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V\nHPLandroidx/compose/runtime/ProduceStateScopeImpl;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V\nHSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V\nLandroidx/compose/runtime/ProvidableCompositionLocal;\nHSPLandroidx/compose/runtime/ProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/ProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;\nHPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;\nLandroidx/compose/runtime/ProvidedValue;\nHSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V\nHPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V\nHSPLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z\nPLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z\nHSPLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal;\nPLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal;\nHSPLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object;\nPLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object;\nLandroidx/compose/runtime/RecomposeScope;\nLandroidx/compose/runtime/RecomposeScopeImpl;\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V\nHPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I\nPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayMap;\nPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayMap;\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap;\nPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap;\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor;\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor;\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I\nPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult$enumunboxing$(Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z\nPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope()V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope()V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed()V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed()V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V\nPLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;\nHSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V\nPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V\nHPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V\nHSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/RecomposeScopeOwner;\nLandroidx/compose/runtime/Recomposer;\nHSPLandroidx/compose/runtime/Recomposer;-><clinit>()V\nPLandroidx/compose/runtime/Recomposer;-><clinit>()V\nHSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V\nHPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V\nHSPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation;\nPLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation;\nHSPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V\nHPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V\nHSPLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock;\nPLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock;\nHSPLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList;\nPLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList;\nHSPLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList;\nPLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/ArrayList;\nHSPLandroidx/compose/runtime/Recomposer;->access$getHasBroadcastFrameClockAwaiters(Landroidx/compose/runtime/Recomposer;)Z\nHPLandroidx/compose/runtime/Recomposer;->access$getHasBroadcastFrameClockAwaiters(Landroidx/compose/runtime/Recomposer;)Z\nHSPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions(Landroidx/compose/runtime/Recomposer;)Ljava/util/List;\nPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions(Landroidx/compose/runtime/Recomposer;)Ljava/util/List;\nHSPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/GroupKind$Companion;\nPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/GroupKind$Companion;\nPLandroidx/compose/runtime/Recomposer;->access$getRunnerJob$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/Job;\nHSPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z\nHPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z\nHSPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/collection/IdentityArraySet;\nPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/collection/IdentityArraySet;\nHSPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow;\nPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLandroidx/compose/runtime/Recomposer;->access$isClosed$p(Landroidx/compose/runtime/Recomposer;)Z\nHSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl;\nHPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/CompositionImpl;\nHSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z\nHPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z\nHSPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V\nPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V\nHSPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V\nPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V\nPLandroidx/compose/runtime/Recomposer;->access$setCloseCause$p(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V\nHSPLandroidx/compose/runtime/Recomposer;->access$setCompositionsRemoved$p(Landroidx/compose/runtime/Recomposer;)V\nPLandroidx/compose/runtime/Recomposer;->access$setCompositionsRemoved$p(Landroidx/compose/runtime/Recomposer;)V\nPLandroidx/compose/runtime/Recomposer;->access$setRunnerJob$p(Landroidx/compose/runtime/Recomposer;)V\nPLandroidx/compose/runtime/Recomposer;->access$setWorkContinuation$p(Landroidx/compose/runtime/Recomposer;)V\nHSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V\nHPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V\nPLandroidx/compose/runtime/Recomposer;->cancel()V\nHSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;\nHPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;\nHSPLandroidx/compose/runtime/Recomposer;->getChangeCount()J\nPLandroidx/compose/runtime/Recomposer;->getChangeCount()J\nHSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z\nPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z\nHSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I\nPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I\nHSPLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/MutableStateFlow;\nPLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z\nPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z\nHSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z\nHPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z\nHSPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List;\nHPLandroidx/compose/runtime/Recomposer;->getKnownCompositions()Ljava/util/List;\nHSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer;->pauseCompositionFrameClock()V\nPLandroidx/compose/runtime/Recomposer;->pauseCompositionFrameClock()V\nHSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/Recomposer;->resumeCompositionFrameClock()V\nPLandroidx/compose/runtime/Recomposer;->resumeCompositionFrameClock()V\nHSPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V\nLandroidx/compose/runtime/Recomposer$State;\nHSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V\nPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V\nHSPLandroidx/compose/runtime/Recomposer$State;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/runtime/Recomposer$State;-><init>(Ljava/lang/String;I)V\nLandroidx/compose/runtime/Recomposer$effectJob$1$1;\nHSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(Landroidx/compose/runtime/Recomposer;)V\nPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(Landroidx/compose/runtime/Recomposer;)V\nPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/Recomposer$join$2;\nHSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/Recomposer$performRecompose$1$1;\nHSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V\nHPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V\nLandroidx/compose/runtime/Recomposer$recompositionRunner$2;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;)V\nHPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;)V\nLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;\nHSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V\nHPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V\nHSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;\nHSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V\nHPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V\nHSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/ReferentialEqualityPolicy;\nHSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V\nPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V\nHSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><init>()V\nPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><init>()V\nHSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z\nLandroidx/compose/runtime/RememberManager;\nLandroidx/compose/runtime/RememberObserver;\nLandroidx/compose/runtime/SkippableUpdater;\nHSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater;\nHPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater;\nHSPLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer;\nPLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer;\nLandroidx/compose/runtime/SlotReader;\nHSPLandroidx/compose/runtime/SlotReader;-><init>(Landroidx/compose/runtime/SlotTable;)V\nHPLandroidx/compose/runtime/SlotReader;-><init>(Landroidx/compose/runtime/SlotTable;)V\nHSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor;\nHPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor;\nHSPLandroidx/compose/runtime/SlotReader;->beginEmpty()V\nPLandroidx/compose/runtime/SlotReader;->beginEmpty()V\nHSPLandroidx/compose/runtime/SlotReader;->close()V\nHPLandroidx/compose/runtime/SlotReader;->close()V\nHSPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z\nPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z\nHSPLandroidx/compose/runtime/SlotReader;->endEmpty()V\nPLandroidx/compose/runtime/SlotReader;->endEmpty()V\nHSPLandroidx/compose/runtime/SlotReader;->endGroup()V\nHPLandroidx/compose/runtime/SlotReader;->endGroup()V\nHSPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/ArrayList;\nHPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/ArrayList;\nHSPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I\nHPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I\nHSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I\nPLandroidx/compose/runtime/SlotReader;->getGroupKey()I\nHSPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->getGroupSize()I\nPLandroidx/compose/runtime/SlotReader;->getGroupSize()I\nHSPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z\nPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z\nHSPLandroidx/compose/runtime/SlotReader;->getParent()I\nHPLandroidx/compose/runtime/SlotReader;->getParent()I\nHSPLandroidx/compose/runtime/SlotReader;->getParentNodes()I\nPLandroidx/compose/runtime/SlotReader;->getParentNodes()I\nHSPLandroidx/compose/runtime/SlotReader;->getSize()I\nPLandroidx/compose/runtime/SlotReader;->getSize()I\nHSPLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable;\nPLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable;\nHSPLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->groupKey(I)I\nPLandroidx/compose/runtime/SlotReader;->groupKey(I)I\nHSPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I\nHPLandroidx/compose/runtime/SlotReader;->groupSize(I)I\nHSPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z\nPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z\nHSPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z\nHPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z\nHSPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z\nPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z\nHSPLandroidx/compose/runtime/SlotReader;->isNode()Z\nPLandroidx/compose/runtime/SlotReader;->isNode()Z\nHSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z\nPLandroidx/compose/runtime/SlotReader;->isNode(I)Z\nHSPLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I\nHPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I\nHSPLandroidx/compose/runtime/SlotReader;->objectKey(I[I)Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotReader;->objectKey(I[I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotReader;->parent(I)I\nHPLandroidx/compose/runtime/SlotReader;->parent(I)I\nHSPLandroidx/compose/runtime/SlotReader;->reposition(I)V\nHPLandroidx/compose/runtime/SlotReader;->reposition(I)V\nHSPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V\nHPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V\nHSPLandroidx/compose/runtime/SlotReader;->skipGroup()I\nHPLandroidx/compose/runtime/SlotReader;->skipGroup()I\nHSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V\nPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V\nHSPLandroidx/compose/runtime/SlotReader;->startGroup()V\nHPLandroidx/compose/runtime/SlotReader;->startGroup()V\nLandroidx/compose/runtime/SlotTable;\nHSPLandroidx/compose/runtime/SlotTable;-><init>()V\nHPLandroidx/compose/runtime/SlotTable;-><init>()V\nHSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I\nHPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I\nHSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V\nHPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V\nHSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V\nHPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V\nHSPLandroidx/compose/runtime/SlotTable;->containsMark()Z\nPLandroidx/compose/runtime/SlotTable;->containsMark()Z\nHSPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList;\nPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList;\nHSPLandroidx/compose/runtime/SlotTable;->getGroups()[I\nPLandroidx/compose/runtime/SlotTable;->getGroups()[I\nHSPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I\nPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I\nHSPLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I\nHPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I\nHSPLandroidx/compose/runtime/SlotTable;->isEmpty()Z\nPLandroidx/compose/runtime/SlotTable;->isEmpty()Z\nHSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader;\nHPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader;\nHSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter;\nHPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter;\nHSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z\nHPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z\nHSPLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V\nPLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V\nLandroidx/compose/runtime/SlotWriter;\nHSPLandroidx/compose/runtime/SlotWriter;-><clinit>()V\nPLandroidx/compose/runtime/SlotWriter;-><clinit>()V\nHSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V\nHPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z\nPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z\nHSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I\nPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I\nHPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I\nHPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I\nHPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList;\nPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList;\nHSPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I\nPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I\nPLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I\nPLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I\nPLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I\nPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I\nPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I\nPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I\nHSPLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V\nPLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$insertSlots(IILandroidx/compose/runtime/SlotWriter;)V\nPLandroidx/compose/runtime/SlotWriter;->access$insertSlots(IILandroidx/compose/runtime/SlotWriter;)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V\nPLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V\nPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V\nPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V\nPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V\nPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V\nHPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V\nHSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;\nHPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;\nHSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I\nHPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I\nHSPLandroidx/compose/runtime/SlotWriter;->auxIndex(I[I)I\nHPLandroidx/compose/runtime/SlotWriter;->auxIndex(I[I)I\nHSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V\nPLandroidx/compose/runtime/SlotWriter;->beginInsert()V\nHSPLandroidx/compose/runtime/SlotWriter;->close()V\nHPLandroidx/compose/runtime/SlotWriter;->close()V\nHSPLandroidx/compose/runtime/SlotWriter;->dataIndex(I[I)I\nHPLandroidx/compose/runtime/SlotWriter;->dataIndex(I[I)I\nHSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I\nPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I\nHSPLandroidx/compose/runtime/SlotWriter;->endGroup()V\nHPLandroidx/compose/runtime/SlotWriter;->endGroup()V\nHSPLandroidx/compose/runtime/SlotWriter;->endInsert()V\nHPLandroidx/compose/runtime/SlotWriter;->endInsert()V\nHSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V\nHPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V\nHSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V\nHPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V\nHSPLandroidx/compose/runtime/SlotWriter;->getClosed()Z\nPLandroidx/compose/runtime/SlotWriter;->getClosed()Z\nHSPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I\nPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I\nHSPLandroidx/compose/runtime/SlotWriter;->getParent()I\nHPLandroidx/compose/runtime/SlotWriter;->getParent()I\nHSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I\nHPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I\nHSPLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable;\nPLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable;\nHSPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I\nHPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I\nHSPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I\nPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I\nHSPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I\nHPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I\nHSPLandroidx/compose/runtime/SlotWriter;->groupSlots()Landroidx/compose/runtime/SlotWriter$groupSlots$1;\nHPLandroidx/compose/runtime/SlotWriter;->groupSlots()Landroidx/compose/runtime/SlotWriter$groupSlots$1;\nHSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V\nHPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V\nHSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V\nHPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V\nHSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V\nHPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V\nHSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V\nHPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V\nHSPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V\nHPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V\nHSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V\nHPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V\nHSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V\nHPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V\nHSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotWriter;->parent(I)I\nHPLandroidx/compose/runtime/SlotWriter;->parent(I)I\nHSPLandroidx/compose/runtime/SlotWriter;->parent(I[I)I\nHPLandroidx/compose/runtime/SlotWriter;->parent(I[I)I\nHSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V\nHPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V\nHSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z\nHPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z\nHSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z\nHPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z\nHSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V\nHPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V\nHSPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotWriter;->set(IILjava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I\nHPLandroidx/compose/runtime/SlotWriter;->skipGroup()I\nHSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V\nPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V\nHSPLandroidx/compose/runtime/SlotWriter;->slotIndex(I[I)I\nPLandroidx/compose/runtime/SlotWriter;->slotIndex(I[I)I\nHSPLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/SlotWriter;->startGroup()V\nHPLandroidx/compose/runtime/SlotWriter;->startGroup()V\nHSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V\nPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V\nHSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;Ljava/lang/Object;Z)V\nHPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;Ljava/lang/Object;Z)V\nHSPLandroidx/compose/runtime/SlotWriter;->startNode(ILandroidx/compose/runtime/Composer$Companion$Empty$1;)V\nPLandroidx/compose/runtime/SlotWriter;->startNode(ILandroidx/compose/runtime/Composer$Companion$Empty$1;)V\nHSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V\nHPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V\nHSPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V\nHPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V\nLandroidx/compose/runtime/SlotWriter$Companion;\nHSPLandroidx/compose/runtime/SlotWriter$Companion;-><init>()V\nPLandroidx/compose/runtime/SlotWriter$Companion;-><init>()V\nHSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;)Ljava/util/List;\nPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;)Ljava/util/List;\nHSPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List;\nHPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List;\nLandroidx/compose/runtime/SlotWriter$groupSlots$1;\nHSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V\nHPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V\nHSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z\nHPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z\nHSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;\nHPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;\nLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;-><init>(F)V\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;-><init>(F)V\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFloatValue()F\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFloatValue()F\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V\nLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;-><init>(F)V\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;-><init>(F)V\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->getValue()F\nPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->getValue()F\nHSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->setValue(F)V\nPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->setValue(F)V\nLandroidx/compose/runtime/SnapshotMutableIntStateImpl;\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;-><init>(I)V\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;-><init>(I)V\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V\nLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;-><init>(I)V\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;-><init>(I)V\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->getValue()I\nPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->getValue()I\nHSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->setValue(I)V\nPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->setValue(I)V\nLandroidx/compose/runtime/SnapshotMutableLongStateImpl;\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;-><init>(J)V\nPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;-><init>(J)V\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getLongValue()J\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getLongValue()J\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->setLongValue(J)V\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->setLongValue(J)V\nLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;-><init>(J)V\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;-><init>(J)V\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->getValue()J\nPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->getValue()J\nHSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->setValue(J)V\nPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->setValue(J)V\nLandroidx/compose/runtime/SnapshotMutableStateImpl;\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V\nLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object;\nPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V\nPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V\nLandroidx/compose/runtime/SnapshotMutationPolicy;\nLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;\nHSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V\nPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V\nHSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal;\nHPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal;\nHSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;\nHPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;\nLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;\nHSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;\nHSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;-><init>(Landroidx/compose/runtime/ProduceStateScope;I)V\nPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;-><init>(Landroidx/compose/runtime/ProduceStateScope;I)V\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/SnapshotThreadLocal;\nHSPLandroidx/compose/runtime/SnapshotThreadLocal;-><init>()V\nPLandroidx/compose/runtime/SnapshotThreadLocal;-><init>()V\nHSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object;\nHPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V\nLandroidx/compose/runtime/Stack;\nHSPLandroidx/compose/runtime/Stack;-><init>()V\nPLandroidx/compose/runtime/Stack;-><init>()V\nHSPLandroidx/compose/runtime/Stack;-><init>(I)V\nHPLandroidx/compose/runtime/Stack;-><init>(I)V\nHSPLandroidx/compose/runtime/Stack;->add(I)V\nPLandroidx/compose/runtime/Stack;->add(I)V\nHSPLandroidx/compose/runtime/Stack;->clear()V\nHPLandroidx/compose/runtime/Stack;->clear()V\nHSPLandroidx/compose/runtime/Stack;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas;\nHPLandroidx/compose/runtime/Stack;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas;\nHSPLandroidx/compose/runtime/Stack;->getSize()I\nHPLandroidx/compose/runtime/Stack;->getSize()I\nHSPLandroidx/compose/runtime/Stack;->isEmpty()Z\nHPLandroidx/compose/runtime/Stack;->isEmpty()Z\nHSPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object;\nHPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;\nHPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/Stack;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult$Immutable;\nPLandroidx/compose/runtime/Stack;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult$Immutable;\nHSPLandroidx/compose/runtime/Stack;->scheduleWithDelay(JLjava/lang/Runnable;)V\nPLandroidx/compose/runtime/Stack;->scheduleWithDelay(JLjava/lang/Runnable;)V\nHSPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object;\nHPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object;\nLandroidx/compose/runtime/State;\nLandroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/StaticProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;\nHPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->updatedStateOf$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/State;\nLandroidx/compose/runtime/StaticValueHolder;\nHSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V\nPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;\nLandroidx/compose/runtime/StructuralEqualityPolicy;\nHSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V\nPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V\nHSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><init>()V\nPLandroidx/compose/runtime/StructuralEqualityPolicy;-><init>()V\nHSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z\nLandroidx/compose/runtime/Updater;\nHSPLandroidx/compose/runtime/Updater;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/runtime/Updater;->CompositionLocalProvider(Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/runtime/Updater;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/runtime/Updater;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/runtime/Updater;->access$auxIndex(I[I)I\nPLandroidx/compose/runtime/Updater;->access$auxIndex(I[I)I\nHSPLandroidx/compose/runtime/Updater;->access$containsMark(I[I)Z\nPLandroidx/compose/runtime/Updater;->access$containsMark(I[I)Z\nHSPLandroidx/compose/runtime/Updater;->access$countOneBits(I)I\nPLandroidx/compose/runtime/Updater;->access$countOneBits(I)I\nHSPLandroidx/compose/runtime/Updater;->access$groupSize(I[I)I\nHPLandroidx/compose/runtime/Updater;->access$groupSize(I[I)I\nHSPLandroidx/compose/runtime/Updater;->access$hasAux(I[I)Z\nHPLandroidx/compose/runtime/Updater;->access$hasAux(I[I)Z\nHSPLandroidx/compose/runtime/Updater;->access$intersects(Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/Set;)Z\nHPLandroidx/compose/runtime/Updater;->access$intersects(Landroidx/compose/runtime/collection/IdentityArraySet;Ljava/util/Set;)Z\nHSPLandroidx/compose/runtime/Updater;->access$isNode(I[I)Z\nHPLandroidx/compose/runtime/Updater;->access$isNode(I[I)Z\nHSPLandroidx/compose/runtime/Updater;->access$locationOf(Ljava/util/ArrayList;II)I\nHPLandroidx/compose/runtime/Updater;->access$locationOf(Ljava/util/ArrayList;II)I\nHSPLandroidx/compose/runtime/Updater;->access$nodeCount(I[I)I\nPLandroidx/compose/runtime/Updater;->access$nodeCount(I[I)I\nHSPLandroidx/compose/runtime/Updater;->access$objectKeyIndex(I[I)I\nPLandroidx/compose/runtime/Updater;->access$objectKeyIndex(I[I)I\nHSPLandroidx/compose/runtime/Updater;->access$search(Ljava/util/ArrayList;II)I\nHPLandroidx/compose/runtime/Updater;->access$search(Ljava/util/ArrayList;II)I\nHSPLandroidx/compose/runtime/Updater;->access$slotAnchor(I[I)I\nHPLandroidx/compose/runtime/Updater;->access$slotAnchor(I[I)I\nHSPLandroidx/compose/runtime/Updater;->access$updateGroupSize([III)V\nPLandroidx/compose/runtime/Updater;->access$updateGroupSize([III)V\nHSPLandroidx/compose/runtime/Updater;->access$updateNodeCount([III)V\nPLandroidx/compose/runtime/Updater;->access$updateNodeCount([III)V\nHSPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/runtime/Updater;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/runtime/Updater;->compositionLocalOf$default(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/runtime/Updater;->compositionLocalOf$default(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nHSPLandroidx/compose/runtime/Updater;->countOneBits(I)I\nPLandroidx/compose/runtime/Updater;->countOneBits(I)I\nHSPLandroidx/compose/runtime/Updater;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;\nPLandroidx/compose/runtime/Updater;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/runtime/Updater;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;\nPLandroidx/compose/runtime/Updater;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;\nHSPLandroidx/compose/runtime/Updater;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;\nHPLandroidx/compose/runtime/Updater;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;\nHSPLandroidx/compose/runtime/Updater;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;)I\nHPLandroidx/compose/runtime/Updater;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;)I\nHSPLandroidx/compose/runtime/Updater;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/Updater;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/runtime/Updater;->mutableFloatStateOf(F)Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState;\nPLandroidx/compose/runtime/Updater;->mutableFloatStateOf(F)Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState;\nHSPLandroidx/compose/runtime/Updater;->mutableIntStateOf(I)Landroidx/compose/runtime/ParcelableSnapshotMutableIntState;\nHPLandroidx/compose/runtime/Updater;->mutableIntStateOf(I)Landroidx/compose/runtime/ParcelableSnapshotMutableIntState;\nHSPLandroidx/compose/runtime/Updater;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList;\nPLandroidx/compose/runtime/Updater;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList;\nHSPLandroidx/compose/runtime/Updater;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nHPLandroidx/compose/runtime/Updater;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nHSPLandroidx/compose/runtime/Updater;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nHPLandroidx/compose/runtime/Updater;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nHSPLandroidx/compose/runtime/Updater;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nPLandroidx/compose/runtime/Updater;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nHSPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/runtime/Updater;->produceState(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/runtime/Updater;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/Updater;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/Updater;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nHPLandroidx/compose/runtime/Updater;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nHSPLandroidx/compose/runtime/Updater;->rememberCompositionContext(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/CompositionContext;\nPLandroidx/compose/runtime/Updater;->rememberCompositionContext(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/CompositionContext;\nHSPLandroidx/compose/runtime/Updater;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHPLandroidx/compose/runtime/Updater;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHSPLandroidx/compose/runtime/Updater;->search(Ljava/util/ArrayList;II)I\nHPLandroidx/compose/runtime/Updater;->search(Ljava/util/ArrayList;II)I\nHSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/runtime/Updater;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow;\nPLandroidx/compose/runtime/Updater;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow;\nHSPLandroidx/compose/runtime/Updater;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nHPLandroidx/compose/runtime/Updater;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;\nHSPLandroidx/compose/runtime/Updater;->updateChangedFlags(I)I\nHPLandroidx/compose/runtime/Updater;->updateChangedFlags(I)I\nHSPLandroidx/compose/runtime/Updater;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHPLandroidx/compose/runtime/Updater;->updateCompositionMap([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nLandroidx/compose/runtime/WeakReference;\nHSPLandroidx/compose/runtime/WeakReference;-><init>(Ljava/lang/Object;)V\nPLandroidx/compose/runtime/WeakReference;-><init>(Ljava/lang/Object;)V\nLandroidx/compose/runtime/changelist/ChangeList;\nHSPLandroidx/compose/runtime/changelist/ChangeList;-><init>()V\nHPLandroidx/compose/runtime/changelist/ChangeList;-><init>()V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->clear()V\nHPLandroidx/compose/runtime/changelist/ChangeList;->clear()V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nPLandroidx/compose/runtime/changelist/ChangeList;->executeAndFlushAllPendingChanges(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z\nPLandroidx/compose/runtime/changelist/ChangeList;->isEmpty()Z\nHSPLandroidx/compose/runtime/changelist/ChangeList;->isNotEmpty()Z\nPLandroidx/compose/runtime/changelist/ChangeList;->isNotEmpty()Z\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushAdvanceSlotsBy(I)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushAdvanceSlotsBy(I)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushDowns([Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushDowns([Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCurrentGroup()V\nPLandroidx/compose/runtime/changelist/ChangeList;->pushEndCurrentGroup()V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureGroupStarted(Landroidx/compose/runtime/Anchor;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureGroupStarted(Landroidx/compose/runtime/Anchor;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureRootStarted()V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushEnsureRootStarted()V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushInsertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushMoveCurrentGroup(I)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushMoveCurrentGroup(I)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushRemember(Landroidx/compose/runtime/RememberObserver;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushRemember(Landroidx/compose/runtime/RememberObserver;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveCurrentGroup()V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveCurrentGroup()V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveNode(II)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushRemoveNode(II)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushSideEffect(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushSideEffect(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateAuxData(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateAuxData(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateValue(ILjava/lang/Object;)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushUpdateValue(ILjava/lang/Object;)V\nHSPLandroidx/compose/runtime/changelist/ChangeList;->pushUps(I)V\nHPLandroidx/compose/runtime/changelist/ChangeList;->pushUps(I)V\nLandroidx/compose/runtime/changelist/ComposerChangeListWriter;\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;-><init>(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;-><init>(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/runtime/changelist/ChangeList;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCompositionScope(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ControlledComposition;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCurrentGroup()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endCurrentGroup()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endNodeMovement()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endNodeMovement()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endRoot()V\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->endRoot()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->finalizeComposition()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->finalizeComposition()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getChangeList()Landroidx/compose/runtime/changelist/ChangeList;\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getChangeList()Landroidx/compose/runtime/changelist/ChangeList;\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getReader()Landroidx/compose/runtime/SlotReader;\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->getReader()Landroidx/compose/runtime/SlotReader;\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->insertSlots(Landroidx/compose/runtime/Anchor;Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/changelist/FixupList;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveCurrentGroup(I)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveCurrentGroup(I)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveDown(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveDown(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveReaderRelativeTo(I)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveReaderRelativeTo(I)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->moveUp()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->pushPendingUpsAndDowns()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeNodeMovementOperations()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->realizeOperationLocation(Z)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->releaseMovableContent()V\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->releaseMovableContent()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->remember(Landroidx/compose/runtime/RememberObserver;)V\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->remember(Landroidx/compose/runtime/RememberObserver;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeCurrentGroup()V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeCurrentGroup()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->removeNode(II)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->resetTransientState()V\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->resetTransientState()V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->setChangeList(Landroidx/compose/runtime/changelist/ChangeList;)V\nPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->setChangeList(Landroidx/compose/runtime/changelist/ChangeList;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->sideEffect(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->sideEffect(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/changelist/ComposerChangeListWriter;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/runtime/changelist/FixupList;\nHSPLandroidx/compose/runtime/changelist/FixupList;-><init>()V\nPLandroidx/compose/runtime/changelist/FixupList;-><init>()V\nHSPLandroidx/compose/runtime/changelist/FixupList;->createAndInsertNode(Lkotlin/jvm/functions/Function0;ILandroidx/compose/runtime/Anchor;)V\nHPLandroidx/compose/runtime/changelist/FixupList;->createAndInsertNode(Lkotlin/jvm/functions/Function0;ILandroidx/compose/runtime/Anchor;)V\nHSPLandroidx/compose/runtime/changelist/FixupList;->endNodeInsert()V\nPLandroidx/compose/runtime/changelist/FixupList;->endNodeInsert()V\nHSPLandroidx/compose/runtime/changelist/FixupList;->executeAndFlushAllPendingFixups(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/FixupList;->executeAndFlushAllPendingFixups(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHSPLandroidx/compose/runtime/changelist/FixupList;->isEmpty()Z\nPLandroidx/compose/runtime/changelist/FixupList;->isEmpty()Z\nHSPLandroidx/compose/runtime/changelist/FixupList;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/runtime/changelist/FixupList;->updateNode(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/runtime/changelist/Operation;\nHSPLandroidx/compose/runtime/changelist/Operation;-><init>(II)V\nPLandroidx/compose/runtime/changelist/Operation;-><init>(II)V\nHSPLandroidx/compose/runtime/changelist/Operation;-><init>(III)V\nPLandroidx/compose/runtime/changelist/Operation;-><init>(III)V\nHSPLandroidx/compose/runtime/changelist/Operation;->getInts()I\nHPLandroidx/compose/runtime/changelist/Operation;->getInts()I\nHSPLandroidx/compose/runtime/changelist/Operation;->getObjects()I\nHPLandroidx/compose/runtime/changelist/Operation;->getObjects()I\nLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;\nHSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$AdvanceSlotsBy;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$Downs;\nHSPLandroidx/compose/runtime/changelist/Operation$Downs;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$Downs;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$Downs;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$Downs;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$Downs;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;\nHSPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$EndCompositionScope;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;\nHSPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$EndCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;\nHSPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$EnsureGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;\nHSPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$EnsureRootGroupStarted;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;\nHSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$InsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$InsertSlots;\nHSPLandroidx/compose/runtime/changelist/Operation$InsertSlots;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$InsertSlots;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$InsertSlots;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$InsertSlots;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$InsertSlots;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$InsertSlots;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;\nHSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$InsertSlotsWithFixups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;\nHSPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$MoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;\nHSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$PostInsertNodeFixup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$Remember;\nHSPLandroidx/compose/runtime/changelist/Operation$Remember;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$Remember;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$Remember;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$Remember;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$Remember;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;\nHSPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$RemoveCurrentGroup;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$RemoveNode;\nHSPLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$RemoveNode;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$RemoveNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$SideEffect;\nHSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$SideEffect;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$SideEffect;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$UpdateAuxData;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$UpdateNode;\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$UpdateNode;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$UpdateNode;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$UpdateValue;\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$UpdateValue;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$UpdateValue;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$Ups;\nHSPLandroidx/compose/runtime/changelist/Operation$Ups;-><clinit>()V\nPLandroidx/compose/runtime/changelist/Operation$Ups;-><clinit>()V\nHSPLandroidx/compose/runtime/changelist/Operation$Ups;-><init>()V\nPLandroidx/compose/runtime/changelist/Operation$Ups;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operation$Ups;->execute(Landroidx/compose/runtime/changelist/Operations$OpIterator;Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nLandroidx/compose/runtime/changelist/Operation$UseCurrentNode;\nLandroidx/compose/runtime/changelist/Operations;\nHSPLandroidx/compose/runtime/changelist/Operations;-><init>()V\nHPLandroidx/compose/runtime/changelist/Operations;-><init>()V\nHSPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I\nHPLandroidx/compose/runtime/changelist/Operations;->access$createExpectedArgMask(Landroidx/compose/runtime/changelist/Operations;I)I\nHSPLandroidx/compose/runtime/changelist/Operations;->access$getIntArgs$p(Landroidx/compose/runtime/changelist/Operations;)[I\nPLandroidx/compose/runtime/changelist/Operations;->access$getIntArgs$p(Landroidx/compose/runtime/changelist/Operations;)[I\nHSPLandroidx/compose/runtime/changelist/Operations;->access$getObjectArgs$p(Landroidx/compose/runtime/changelist/Operations;)[Ljava/lang/Object;\nPLandroidx/compose/runtime/changelist/Operations;->access$getObjectArgs$p(Landroidx/compose/runtime/changelist/Operations;)[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodes$p(Landroidx/compose/runtime/changelist/Operations;)[Landroidx/compose/runtime/changelist/Operation;\nHPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodes$p(Landroidx/compose/runtime/changelist/Operations;)[Landroidx/compose/runtime/changelist/Operation;\nHSPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodesSize$p(Landroidx/compose/runtime/changelist/Operations;)I\nPLandroidx/compose/runtime/changelist/Operations;->access$getOpCodesSize$p(Landroidx/compose/runtime/changelist/Operations;)I\nHSPLandroidx/compose/runtime/changelist/Operations;->access$getPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;)I\nHPLandroidx/compose/runtime/changelist/Operations;->access$getPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;)I\nHSPLandroidx/compose/runtime/changelist/Operations;->access$getPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;)I\nPLandroidx/compose/runtime/changelist/Operations;->access$getPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;)I\nHSPLandroidx/compose/runtime/changelist/Operations;->access$setPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;I)V\nHPLandroidx/compose/runtime/changelist/Operations;->access$setPushedIntMask$p(Landroidx/compose/runtime/changelist/Operations;I)V\nHSPLandroidx/compose/runtime/changelist/Operations;->access$setPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;I)V\nHPLandroidx/compose/runtime/changelist/Operations;->access$setPushedObjectMask$p(Landroidx/compose/runtime/changelist/Operations;I)V\nHSPLandroidx/compose/runtime/changelist/Operations;->access$topIntIndexOf-w8GmfQM(Landroidx/compose/runtime/changelist/Operations;I)I\nHPLandroidx/compose/runtime/changelist/Operations;->access$topIntIndexOf-w8GmfQM(Landroidx/compose/runtime/changelist/Operations;I)I\nHSPLandroidx/compose/runtime/changelist/Operations;->access$topObjectIndexOf-31yXWZQ(Landroidx/compose/runtime/changelist/Operations;I)I\nHPLandroidx/compose/runtime/changelist/Operations;->access$topObjectIndexOf-31yXWZQ(Landroidx/compose/runtime/changelist/Operations;I)I\nHSPLandroidx/compose/runtime/changelist/Operations;->clear()V\nHPLandroidx/compose/runtime/changelist/Operations;->clear()V\nHSPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHPLandroidx/compose/runtime/changelist/Operations;->executeAndFlushAllPendingOperations(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V\nHSPLandroidx/compose/runtime/changelist/Operations;->isEmpty()Z\nPLandroidx/compose/runtime/changelist/Operations;->isEmpty()Z\nHSPLandroidx/compose/runtime/changelist/Operations;->isNotEmpty()Z\nPLandroidx/compose/runtime/changelist/Operations;->isNotEmpty()Z\nHSPLandroidx/compose/runtime/changelist/Operations;->popInto(Landroidx/compose/runtime/changelist/Operations;)V\nHPLandroidx/compose/runtime/changelist/Operations;->popInto(Landroidx/compose/runtime/changelist/Operations;)V\nHSPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V\nHPLandroidx/compose/runtime/changelist/Operations;->push(Landroidx/compose/runtime/changelist/Operation;)V\nHSPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V\nHPLandroidx/compose/runtime/changelist/Operations;->pushOp(Landroidx/compose/runtime/changelist/Operation;)V\nLandroidx/compose/runtime/changelist/Operations$OpIterator;\nHSPLandroidx/compose/runtime/changelist/Operations$OpIterator;-><init>(Landroidx/compose/runtime/changelist/Operations;)V\nHPLandroidx/compose/runtime/changelist/Operations$OpIterator;-><init>(Landroidx/compose/runtime/changelist/Operations;)V\nHSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I\nHPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getInt-w8GmfQM(I)I\nHSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getObject-31yXWZQ(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getOperation()Landroidx/compose/runtime/changelist/Operation;\nHPLandroidx/compose/runtime/changelist/Operations$OpIterator;->getOperation()Landroidx/compose/runtime/changelist/Operation;\nHSPLandroidx/compose/runtime/changelist/Operations$OpIterator;->next()Z\nHPLandroidx/compose/runtime/changelist/Operations$OpIterator;->next()Z\nLandroidx/compose/runtime/collection/IdentityArrayIntMap;\nHSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V\nHPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V\nHSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayIntMap;I)V\nPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayIntMap;I)V\nHSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I\nHPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I\nHSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I\nPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I\nHSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I\nPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I\nLandroidx/compose/runtime/collection/IdentityArrayMap;\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>()V\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>()V\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayMap;I)V\nPLandroidx/compose/runtime/collection/IdentityArrayMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayMap;I)V\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->clear()V\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys()[Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize()I\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize()I\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues()[Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z\nPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V\nLandroidx/compose/runtime/collection/IdentityArraySet;\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V\nPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArraySet;I)V\nPLandroidx/compose/runtime/collection/IdentityArraySet;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArraySet;I)V\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V\nHPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V\nHPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z\nPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z\nPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;\nPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I\nPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I\nLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;\nHSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;-><init>(Landroidx/compose/runtime/collection/IdentityArraySet;)V\nHPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;-><init>(Landroidx/compose/runtime/collection/IdentityArraySet;)V\nHSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z\nPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z\nHSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object;\nLandroidx/compose/runtime/collection/IdentityScopeMap;\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;-><init>()V\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;-><init>()V\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet;\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet;\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet;\nPLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet;\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I\nPLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I\nPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V\nPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V\nLandroidx/compose/runtime/collection/IntMap;\nHSPLandroidx/compose/runtime/collection/IntMap;-><init>()V\nHPLandroidx/compose/runtime/collection/IntMap;-><init>()V\nHSPLandroidx/compose/runtime/collection/IntMap;->clear()V\nHPLandroidx/compose/runtime/collection/IntMap;->clear()V\nHSPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/IntMap;->set(ILjava/lang/Object;)V\nLandroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V\nPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V\nHSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V\nHPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V\nHSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List;\nPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List;\nHSPLandroidx/compose/runtime/collection/MutableVector;->clear()V\nHPLandroidx/compose/runtime/collection/MutableVector;->clear()V\nHSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z\nPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V\nHPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V\nHSPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/MutableVector;->getSize()I\nHPLandroidx/compose/runtime/collection/MutableVector;->getSize()I\nHSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z\nPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z\nHSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z\nHPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z\nHSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V\nHPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V\nHSPLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V\nPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V\nLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;\nHSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V\nHPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V\nHSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z\nPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z\nHSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;\nHPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;\nHSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I\nHPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I\nLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;\nHSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V\nHPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(ILjava/util/List;)V\nHSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z\nHPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z\nHSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;\nHPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;\nLandroidx/compose/runtime/collection/MutableVectorKt;\nHSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(ILjava/util/List;)V\nHPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(ILjava/util/List;)V\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;-><init>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;-><init>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership()Lorg/acra/file/CrashReportPersister;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership()Lorg/acra/file/CrashReportPersister;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOwnership(Lorg/acra/file/CrashReportPersister;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOwnership(Lorg/acra/file/CrashReportPersister;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapKeysIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;Lorg/acra/file/CrashReportPersister;)V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;Lorg/acra/file/CrashReportPersister;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)[Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILorg/acra/file/CrashReportPersister;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/IntStack;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/IntStack;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateNodeAtIndex(IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateNodeAtIndex(IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset(II[Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;-><init>(I)V\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;-><init>(I)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object;\nHPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKeysIterator;->next()Ljava/lang/Object;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasNext()Z\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasPrevious()Z\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getNext()Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getPrevious()Ljava/lang/Object;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->withNext(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->withPrevious(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V\nLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;-><clinit>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;-><clinit>()V\nHSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;-><init>()V\nPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;-><init>()V\nLandroidx/compose/runtime/internal/ComposableLambdaImpl;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V\nLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;\nHSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V\nPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V\nLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><clinit>()V\nPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><clinit>()V\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->access$getEmpty$cp()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->access$getEmpty$cp()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z\nPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->putValue(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/State;)Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;-><init>(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V\nPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;-><init>(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V\nHSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nLandroidx/compose/runtime/internal/ThreadMap;\nHSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V\nPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I\nHPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I\nHSPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object;\nHPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;\nPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;\nHSPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z\nHPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z\nLandroidx/compose/runtime/internal/ThreadMapKt;\nHSPLandroidx/compose/runtime/internal/ThreadMapKt;-><clinit>()V\nPLandroidx/compose/runtime/internal/ThreadMapKt;-><clinit>()V\nHSPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap;\nPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap;\nLandroidx/compose/runtime/saveable/MapSaverKt;\nHSPLandroidx/compose/runtime/saveable/MapSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/runtime/saveable/MapSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/saveable/SaveableStateHolder;\nHPLandroidx/compose/runtime/saveable/MapSaverKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/saveable/SaveableStateHolder;\nLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;\nHSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;\nHSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/MapSaverKt$mapSaver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;\nHSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V\nPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableHolder;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/SaveableHolder;\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;-><init>(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V\nPLandroidx/compose/runtime/saveable/SaveableHolder;-><init>(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->canBeSaved(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/saveable/SaveableHolder;->canBeSaved(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->getValueIfInputsDidntChange([Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/saveable/SaveableHolder;->getValueIfInputsDidntChange([Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object;\nPLandroidx/compose/runtime/saveable/SaveableHolder;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V\nHPLandroidx/compose/runtime/saveable/SaveableHolder;->onForgotten()V\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V\nHPLandroidx/compose/runtime/saveable/SaveableHolder;->onRemembered()V\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V\nHPLandroidx/compose/runtime/saveable/SaveableHolder;->register()V\nHSPLandroidx/compose/runtime/saveable/SaveableHolder;->update(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/saveable/SaveableHolder;->update(Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V\nLandroidx/compose/runtime/saveable/SaveableStateHolder;\nLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/LinkedHashMap;\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/LinkedHashMap;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->removeState(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V\nLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V\nLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$2;\nLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><clinit>()V\nPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><clinit>()V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><init>(I)V\nPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><init>(I)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/SaveableStateRegistry;\nLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/LinkedHashMap;\nPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/LinkedHashMap;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;\nHPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nHPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V\nHPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V\nLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V\nPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry;\nPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry;\nHSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLandroidx/compose/runtime/saveable/SaverKt;\nHSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V\nPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V\nHSPLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/runtime/saveable/SaverKt;->autoSaver()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLandroidx/compose/runtime/saveable/SaverKt;->autoSaver()Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;\nHSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><clinit>()V\nPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><clinit>()V\nHSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><init>(I)V\nPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><init>(I)V\nHSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;\nHSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><clinit>()V\nPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><clinit>()V\nHSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><init>(I)V\nPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><init>(I)V\nLandroidx/compose/runtime/saveable/SaverKt$Saver$1;\nHSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/saveable/SaverScope;\nLandroidx/compose/runtime/snapshots/GlobalSnapshot;\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V\nHPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V\nPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;\nPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;\nLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;->invoke(Ljava/lang/Object;)V\nLandroidx/compose/runtime/snapshots/MutableSnapshot;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><clinit>()V\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><clinit>()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet;\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release()V\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V\nPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;\nHSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned()V\nHPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned()V\nLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;\nHSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V\nPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V\nHSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V\nHPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V\nLandroidx/compose/runtime/snapshots/ObserverHandle;\nLandroidx/compose/runtime/snapshots/ReadonlySnapshot;\nHSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V\nHPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V\nHSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release()V\nLandroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V\nPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V\nHPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z\nHPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I\nHPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V\nPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V\nHPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release()V\nPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V\nPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I\nPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V\nPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V\nLandroidx/compose/runtime/snapshots/Snapshot$Companion;\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;-><init>()V\nPLandroidx/compose/runtime/snapshots/Snapshot$Companion;-><init>()V\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle;\nHPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle;\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle;\nPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle;\nLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;-><init>(Lkotlin/jvm/internal/Lambda;I)V\nHPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;-><init>(Lkotlin/jvm/internal/Lambda;I)V\nHSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V\nHPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V\nLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;\nLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;\nHSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V\nPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><init>()V\nPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><init>()V\nLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;\nHSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V\nPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I\nHPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I\nHSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I\nHPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I\nHSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V\nHPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V\nPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V\nLandroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/snapshots/SnapshotKt;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$checkAndOverwriteUnusedRecordsLocked()V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$checkAndOverwriteUnusedRecordsLocked()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setApplyObservers$p(Ljava/util/List;)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setApplyObservers$p(Ljava/util/List;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setGlobalWriteObservers$p(Ljava/util/List;)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setGlobalWriteObservers$p(Ljava/util/List;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/GlobalSnapshot;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/GlobalSnapshot;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object;\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;\nLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><clinit>()V\nPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><clinit>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><init>(I)V\nPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><init>(I)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V\nLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;-><init>(ILkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;-><init>(ILkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/snapshots/SnapshotMutableState;\nLandroidx/compose/runtime/snapshots/SnapshotStateList;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->clear()V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->clear()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z\nPLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z\nPLandroidx/compose/runtime/snapshots/SnapshotStateList;->iterator()Ljava/util/Iterator;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I\nPLandroidx/compose/runtime/snapshots/SnapshotStateList;->toArray()[Ljava/lang/Object;\nLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I\nHPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V\nLandroidx/compose/runtime/snapshots/SnapshotStateListKt;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V\nPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;-><clinit>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V\nLandroidx/compose/runtime/snapshots/SnapshotStateObserver;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector;\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clear()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->stop()V\nLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clear()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->done()V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->done()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->start()V\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->start()V\nLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V\nPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/runtime/snapshots/SnapshotWeakSet;\nHSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;-><init>()V\nPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;-><init>()V\nHSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->add(Ljava/lang/Object;)V\nPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->add(Ljava/lang/Object;)V\nHSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getHashes$runtime_release()[I\nPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getHashes$runtime_release()[I\nHSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getSize$runtime_release()I\nPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getSize$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getValues$runtime_release()[Landroidx/compose/runtime/WeakReference;\nPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getValues$runtime_release()[Landroidx/compose/runtime/WeakReference;\nHSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->setSize$runtime_release(I)V\nPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->setSize$runtime_release(I)V\nLandroidx/compose/runtime/snapshots/StateListIterator;\nHSPLandroidx/compose/runtime/snapshots/StateListIterator;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V\nHPLandroidx/compose/runtime/snapshots/StateListIterator;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V\nHSPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z\nHPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z\nHSPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object;\nHPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object;\nHSPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V\nHPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V\nLandroidx/compose/runtime/snapshots/StateObject;\nLandroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V\nHPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V\nHSPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord;\nHPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord;\nHSPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I\nHPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V\nHSPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V\nHPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V\nLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/Snapshot$Companion;\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V\nHSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;\nHPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;\nLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;\nLandroidx/compose/runtime/tooling/InspectionTablesKt;\nHSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V\nPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V\nHSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;\nHSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><clinit>()V\nPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><clinit>()V\nHSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><init>()V\nPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><init>()V\nHSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/ActualKt;\nHSPLandroidx/compose/ui/ActualKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/ActualKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/ActualKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/ActualKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/ActualKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/ActualKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/Alignment;\nLandroidx/compose/ui/Alignment$Companion;\nHSPLandroidx/compose/ui/Alignment$Companion;-><clinit>()V\nPLandroidx/compose/ui/Alignment$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/Alignment$Companion;->getBottom()Landroidx/compose/ui/BiasAlignment$Vertical;\nPLandroidx/compose/ui/Alignment$Companion;->getBottom()Landroidx/compose/ui/BiasAlignment$Vertical;\nHSPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/BiasAlignment;\nPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/BiasAlignment;\nHSPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/BiasAlignment;\nPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/BiasAlignment;\nHSPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/BiasAlignment$Horizontal;\nPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/BiasAlignment$Horizontal;\nHSPLandroidx/compose/ui/Alignment$Companion;->getCenterStart()Landroidx/compose/ui/BiasAlignment;\nPLandroidx/compose/ui/Alignment$Companion;->getCenterStart()Landroidx/compose/ui/BiasAlignment;\nHSPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/BiasAlignment$Vertical;\nPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/BiasAlignment$Vertical;\nHSPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/BiasAlignment$Horizontal;\nPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/BiasAlignment$Horizontal;\nHSPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/BiasAlignment$Vertical;\nPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/BiasAlignment$Vertical;\nHSPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/BiasAlignment;\nHPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/BiasAlignment;\nLandroidx/compose/ui/Alignment$Horizontal;\nLandroidx/compose/ui/Alignment$Vertical;\nLandroidx/compose/ui/BiasAlignment;\nHSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V\nPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V\nHSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J\nHPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J\nHSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/BiasAlignment$Horizontal;\nHSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V\nPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V\nHSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I\nHPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I\nHSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/BiasAlignment$Vertical;\nHSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V\nPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V\nHSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I\nHPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I\nHSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/CombinedModifier;\nHSPLandroidx/compose/ui/CombinedModifier;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V\nHPLandroidx/compose/ui/CombinedModifier;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V\nHSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z\nHPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z\nHSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/ComposedModifier;\nHSPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V\nHPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V\nHSPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3;\nPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3;\nLandroidx/compose/ui/ComposedModifierKt$materialize$1;\nHSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><clinit>()V\nPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><clinit>()V\nHSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><init>()V\nPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><init>()V\nHSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;\nHSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;-><init>(Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;-><init>(Landroidx/compose/runtime/Composer;)V\nHSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/CompositionLocalMapInjectionElement;\nLandroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/Modifier;-><clinit>()V\nPLandroidx/compose/ui/Modifier;-><clinit>()V\nHSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/Modifier$Companion;\nHSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V\nPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/Modifier$Companion;-><init>()V\nPLandroidx/compose/ui/Modifier$Companion;-><init>()V\nHSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z\nHPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z\nHSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/Modifier$Element;\nHSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z\nHPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z\nHSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nLandroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/Modifier$Node;-><init>()V\nHPLandroidx/compose/ui/Modifier$Node;-><init>()V\nHSPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I\nHPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I\nHSPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;\nHPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;\nHSPLandroidx/compose/ui/Modifier$Node;->getInsertedNodeAwaitingAttachForInvalidation$ui_release()Z\nPLandroidx/compose/ui/Modifier$Node;->getInsertedNodeAwaitingAttachForInvalidation$ui_release()Z\nHSPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I\nHPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I\nHSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/Modifier$Node;->getOwnerScope$ui_release()Landroidx/compose/ui/node/ObserverNodeOwnerScope;\nPLandroidx/compose/ui/Modifier$Node;->getOwnerScope$ui_release()Landroidx/compose/ui/node/ObserverNodeOwnerScope;\nHSPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z\nHPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z\nHSPLandroidx/compose/ui/Modifier$Node;->getUpdatedNodeAwaitingAttachForInvalidation$ui_release()Z\nPLandroidx/compose/ui/Modifier$Node;->getUpdatedNodeAwaitingAttachForInvalidation$ui_release()Z\nHSPLandroidx/compose/ui/Modifier$Node;->isAttached()Z\nHPLandroidx/compose/ui/Modifier$Node;->isAttached()Z\nHSPLandroidx/compose/ui/Modifier$Node;->isValidOwnerScope()Z\nPLandroidx/compose/ui/Modifier$Node;->isValidOwnerScope()Z\nHSPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V\nHPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V\nHSPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V\nHPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V\nHSPLandroidx/compose/ui/Modifier$Node;->onAttach()V\nHPLandroidx/compose/ui/Modifier$Node;->onAttach()V\nHSPLandroidx/compose/ui/Modifier$Node;->onDetach()V\nHPLandroidx/compose/ui/Modifier$Node;->onDetach()V\nHSPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V\nHPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V\nHSPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V\nHPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V\nHSPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V\nPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V\nHSPLandroidx/compose/ui/Modifier$Node;->setAsDelegateTo$ui_release(Landroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/ui/Modifier$Node;->setAsDelegateTo$ui_release(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/Modifier$Node;->setInsertedNodeAwaitingAttachForInvalidation$ui_release(Z)V\nHPLandroidx/compose/ui/Modifier$Node;->setInsertedNodeAwaitingAttachForInvalidation$ui_release(Z)V\nHSPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V\nPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V\nHSPLandroidx/compose/ui/Modifier$Node;->setOwnerScope$ui_release(Landroidx/compose/ui/node/ObserverNodeOwnerScope;)V\nPLandroidx/compose/ui/Modifier$Node;->setOwnerScope$ui_release(Landroidx/compose/ui/node/ObserverNodeOwnerScope;)V\nHSPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/Modifier$Node;->setUpdatedNodeAwaitingAttachForInvalidation$ui_release(Z)V\nPLandroidx/compose/ui/Modifier$Node;->setUpdatedNodeAwaitingAttachForInvalidation$ui_release(Z)V\nHSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nLandroidx/compose/ui/ModifierNodeDetachedCancellationException;\nHSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;-><init>()V\nPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;-><init>()V\nHSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->fillInStackTrace()Ljava/lang/Throwable;\nPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->fillInStackTrace()Ljava/lang/Throwable;\nLandroidx/compose/ui/MotionDurationScale;\nHSPLandroidx/compose/ui/MotionDurationScale;-><clinit>()V\nPLandroidx/compose/ui/MotionDurationScale;-><clinit>()V\nHSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nHPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nLandroidx/compose/ui/MotionDurationScale$Key;\nHSPLandroidx/compose/ui/MotionDurationScale$Key;-><clinit>()V\nPLandroidx/compose/ui/MotionDurationScale$Key;-><clinit>()V\nHSPLandroidx/compose/ui/MotionDurationScale$Key;-><init>()V\nPLandroidx/compose/ui/MotionDurationScale$Key;-><init>()V\nLandroidx/compose/ui/TempListUtilsKt;\nHSPLandroidx/compose/ui/TempListUtilsKt;->fastJoinToString$default(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;\nHPLandroidx/compose/ui/TempListUtilsKt;->fastJoinToString$default(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;\nLandroidx/compose/ui/autofill/AndroidAutofill;\nHSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V\nPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V\nHSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager;\nPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager;\nLandroidx/compose/ui/autofill/AutofillCallback;\nHSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V\nPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V\nHSPLandroidx/compose/ui/autofill/AutofillCallback;-><init>()V\nPLandroidx/compose/ui/autofill/AutofillCallback;-><init>()V\nHSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V\nPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V\nPLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V\nLandroidx/compose/ui/autofill/AutofillTree;\nHSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V\nPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V\nLandroidx/compose/ui/draw/BlurKt;\nHSPLandroidx/compose/ui/draw/BlurKt;->CacheDrawModifierNode(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/CacheDrawModifierNode;\nPLandroidx/compose/ui/draw/BlurKt;->CacheDrawModifierNode(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/CacheDrawModifierNode;\nHSPLandroidx/compose/ui/draw/BlurKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/draw/BlurKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/draw/BlurKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/draw/BlurKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/draw/BlurKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/draw/BlurKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/draw/BlurKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/draw/BlurKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/draw/BlurKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/draw/BlurKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/draw/BlurKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/draw/BlurKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/draw/BlurKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;Z)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/draw/BlurKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;Z)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/draw/BuildDrawCacheParams;\nLandroidx/compose/ui/draw/CacheDrawModifierNode;\nLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;-><init>(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;-><init>(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getBlock()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getBlock()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J\nHPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V\nLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;-><init>(Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;Landroidx/compose/ui/draw/CacheDrawScope;)V\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;-><init>(Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;Landroidx/compose/ui/draw/CacheDrawScope;)V\nHSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/draw/CacheDrawScope;\nHSPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V\nPLandroidx/compose/ui/draw/CacheDrawScope;-><init>()V\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F\nPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->getDrawResult$ui_release()Landroidx/compose/ui/draw/DrawResult;\nPLandroidx/compose/ui/draw/CacheDrawScope;->getDrawResult$ui_release()Landroidx/compose/ui/draw/DrawResult;\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/draw/CacheDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J\nPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult;\nPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult;\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->setCacheParams$ui_release(Landroidx/compose/ui/draw/BuildDrawCacheParams;)V\nPLandroidx/compose/ui/draw/CacheDrawScope;->setCacheParams$ui_release(Landroidx/compose/ui/draw/BuildDrawCacheParams;)V\nHSPLandroidx/compose/ui/draw/CacheDrawScope;->setDrawResult$ui_release()V\nPLandroidx/compose/ui/draw/CacheDrawScope;->setDrawResult$ui_release()V\nLandroidx/compose/ui/draw/DrawBackgroundModifier;\nHSPLandroidx/compose/ui/draw/DrawBackgroundModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/DrawBackgroundModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nLandroidx/compose/ui/draw/DrawBehindElement;\nHSPLandroidx/compose/ui/draw/DrawBehindElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/DrawBehindElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/ui/draw/DrawModifier;\nLandroidx/compose/ui/draw/DrawResult;\nHSPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/DrawResult;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/draw/DrawResult;->getBlock$ui_release()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/draw/DrawResult;->getBlock$ui_release()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/ui/draw/DrawWithContentElement;\nHSPLandroidx/compose/ui/draw/DrawWithContentElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/DrawWithContentElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/draw/DrawWithContentElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/draw/DrawWithContentElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/ui/draw/DrawWithContentModifier;\nHSPLandroidx/compose/ui/draw/DrawWithContentModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/DrawWithContentModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/draw/DrawWithContentModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nPLandroidx/compose/ui/draw/DrawWithContentModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/ui/draw/DrawWithContentModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/draw/DrawWithContentModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;\nHSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V\nPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><clinit>()V\nHSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><init>()V\nPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;-><init>()V\nLandroidx/compose/ui/draw/PainterElement;\nHSPLandroidx/compose/ui/draw/PainterElement;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V\nPLandroidx/compose/ui/draw/PainterElement;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/ui/draw/PainterNode;\nHSPLandroidx/compose/ui/draw/PainterNode;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V\nHPLandroidx/compose/ui/draw/PainterNode;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/ui/draw/PainterNode;->getPainter()Landroidx/compose/ui/graphics/painter/Painter;\nPLandroidx/compose/ui/draw/PainterNode;->getPainter()Landroidx/compose/ui/graphics/painter/Painter;\nHSPLandroidx/compose/ui/draw/PainterNode;->getShouldAutoInvalidate()Z\nHPLandroidx/compose/ui/draw/PainterNode;->getShouldAutoInvalidate()Z\nHSPLandroidx/compose/ui/draw/PainterNode;->getSizeToIntrinsics()Z\nPLandroidx/compose/ui/draw/PainterNode;->getSizeToIntrinsics()Z\nHSPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z\nPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z\nHSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z\nHPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z\nHSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z\nHPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z\nHSPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J\nHPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J\nHSPLandroidx/compose/ui/draw/PainterNode;->setAlignment(Landroidx/compose/ui/Alignment;)V\nPLandroidx/compose/ui/draw/PainterNode;->setAlignment(Landroidx/compose/ui/Alignment;)V\nHSPLandroidx/compose/ui/draw/PainterNode;->setAlpha(F)V\nPLandroidx/compose/ui/draw/PainterNode;->setAlpha(F)V\nHSPLandroidx/compose/ui/draw/PainterNode;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V\nPLandroidx/compose/ui/draw/PainterNode;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/draw/PainterNode;->setContentScale(Landroidx/compose/ui/layout/ContentScale;)V\nPLandroidx/compose/ui/draw/PainterNode;->setContentScale(Landroidx/compose/ui/layout/ContentScale;)V\nHSPLandroidx/compose/ui/draw/PainterNode;->setPainter(Landroidx/compose/ui/graphics/painter/Painter;)V\nPLandroidx/compose/ui/draw/PainterNode;->setPainter(Landroidx/compose/ui/graphics/painter/Painter;)V\nHSPLandroidx/compose/ui/draw/PainterNode;->setSizeToIntrinsics(Z)V\nPLandroidx/compose/ui/draw/PainterNode;->setSizeToIntrinsics(Z)V\nLandroidx/compose/ui/draw/PainterNode$measure$1;\nHSPLandroidx/compose/ui/draw/PainterNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V\nPLandroidx/compose/ui/draw/PainterNode$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V\nHSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/focus/FocusEventModifierNode;\nLandroidx/compose/ui/focus/FocusInvalidationManager;\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet;\nHPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet;\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet;\nHPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet;\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet;\nHPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/LinkedHashSet;\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V\nHPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V\nPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V\nPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V\nHPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/LinkedHashSet;Ljava/lang/Object;)V\nLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;-><init>(Landroidx/compose/ui/focus/FocusInvalidationManager;)V\nPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;-><init>(Landroidx/compose/ui/focus/FocusInvalidationManager;)V\nHSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/focus/FocusModifierKt;\nHSPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;\nHPLandroidx/compose/ui/focus/FocusModifierKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusStateImpl;\nHSPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V\nHPLandroidx/compose/ui/focus/FocusModifierKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V\nLandroidx/compose/ui/focus/FocusOwner;\nLandroidx/compose/ui/focus/FocusOwnerImpl;\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getFocusTransactionManager()Landroidx/compose/ui/focus/FocusTransactionManager;\nPLandroidx/compose/ui/focus/FocusOwnerImpl;->getFocusTransactionManager()Landroidx/compose/ui/focus/FocusTransactionManager;\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;\nPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetNode;\nPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetNode;\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V\nHPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V\nPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V\nPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V\nLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V\nPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;-><init>(Landroidx/compose/ui/focus/FocusOwnerImpl;)V\nHSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/ui/focus/FocusProperties;\nLandroidx/compose/ui/focus/FocusPropertiesModifierNode;\nLandroidx/compose/ui/focus/FocusRequester;\nHSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V\nPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V\nHSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V\nPLandroidx/compose/ui/focus/FocusRequester;-><init>()V\nLandroidx/compose/ui/focus/FocusRequesterModifierNode;\nLandroidx/compose/ui/focus/FocusState;\nLandroidx/compose/ui/focus/FocusStateImpl;\nHSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V\nPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V\nHSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(Ljava/lang/String;I)V\nHSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z\nHPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z\nLandroidx/compose/ui/focus/FocusTargetNode;\nHSPLandroidx/compose/ui/focus/FocusTargetNode;-><init>()V\nHPLandroidx/compose/ui/focus/FocusTargetNode;-><init>()V\nHSPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl;\nHPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl;\nHSPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V\nHPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V\nLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;\nHSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><clinit>()V\nPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><clinit>()V\nHSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><init>()V\nPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;-><init>()V\nHSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/focus/FocusTransactionManager;\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;-><init>()V\nPLandroidx/compose/ui/focus/FocusTransactionManager;-><init>()V\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;-><init>(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V\nHPLandroidx/compose/ui/focus/FocusTransactionManager;-><init>(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;->getChanges()Landroidx/collection/LongSparseArray;\nPLandroidx/compose/ui/focus/FocusTransactionManager;->getChanges()Landroidx/collection/LongSparseArray;\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;->getMotionEvent()Landroid/view/MotionEvent;\nPLandroidx/compose/ui/focus/FocusTransactionManager;->getMotionEvent()Landroid/view/MotionEvent;\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;->getSuppressMovementConsumption()Z\nPLandroidx/compose/ui/focus/FocusTransactionManager;->getSuppressMovementConsumption()Z\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;->getUncommittedFocusState(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusStateImpl;\nHPLandroidx/compose/ui/focus/FocusTransactionManager;->getUncommittedFocusState(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusStateImpl;\nHSPLandroidx/compose/ui/focus/FocusTransactionManager;->issuesEnterExitEvent-0FcD4WY(J)Z\nHPLandroidx/compose/ui/focus/FocusTransactionManager;->issuesEnterExitEvent-0FcD4WY(J)Z\nLandroidx/compose/ui/geometry/CornerRadius;\nHSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V\nPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V\nHSPLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J\nPLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J\nHSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F\nHPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F\nHSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F\nPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F\nLandroidx/compose/ui/geometry/MutableRect;\nHSPLandroidx/compose/ui/geometry/MutableRect;-><init>()V\nPLandroidx/compose/ui/geometry/MutableRect;-><init>()V\nHSPLandroidx/compose/ui/geometry/MutableRect;->getBottom()F\nHPLandroidx/compose/ui/geometry/MutableRect;->getBottom()F\nHSPLandroidx/compose/ui/geometry/MutableRect;->getLeft()F\nHPLandroidx/compose/ui/geometry/MutableRect;->getLeft()F\nHSPLandroidx/compose/ui/geometry/MutableRect;->getRight()F\nHPLandroidx/compose/ui/geometry/MutableRect;->getRight()F\nHSPLandroidx/compose/ui/geometry/MutableRect;->getTop()F\nHPLandroidx/compose/ui/geometry/MutableRect;->getTop()F\nHSPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V\nHPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V\nHSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z\nHPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z\nHSPLandroidx/compose/ui/geometry/MutableRect;->setBottom(F)V\nHPLandroidx/compose/ui/geometry/MutableRect;->setBottom(F)V\nHSPLandroidx/compose/ui/geometry/MutableRect;->setLeft(F)V\nHPLandroidx/compose/ui/geometry/MutableRect;->setLeft(F)V\nHSPLandroidx/compose/ui/geometry/MutableRect;->setRight(F)V\nHPLandroidx/compose/ui/geometry/MutableRect;->setRight(F)V\nHSPLandroidx/compose/ui/geometry/MutableRect;->setTop(F)V\nHPLandroidx/compose/ui/geometry/MutableRect;->setTop(F)V\nLandroidx/compose/ui/geometry/Offset;\nHSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V\nPLandroidx/compose/ui/geometry/Offset;-><clinit>()V\nHSPLandroidx/compose/ui/geometry/Offset;-><init>(J)V\nHPLandroidx/compose/ui/geometry/Offset;-><init>(J)V\nHSPLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J\nPLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J\nHSPLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J\nPLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J\nHSPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J\nHPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J\nHSPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset;\nHPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset;\nHSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F\nHPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F\nHSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F\nHPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F\nHSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F\nHPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F\nHSPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J\nHPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J\nHSPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J\nHPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J\nHSPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J\nPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J\nLandroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V\nPLandroidx/compose/ui/geometry/Rect;-><clinit>()V\nHSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V\nHPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V\nHSPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect;\nPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/geometry/Rect;->getBottom()F\nPLandroidx/compose/ui/geometry/Rect;->getBottom()F\nHSPLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J\nPLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J\nHSPLandroidx/compose/ui/geometry/Rect;->getHeight()F\nPLandroidx/compose/ui/geometry/Rect;->getHeight()F\nHSPLandroidx/compose/ui/geometry/Rect;->getLeft()F\nPLandroidx/compose/ui/geometry/Rect;->getLeft()F\nHSPLandroidx/compose/ui/geometry/Rect;->getRight()F\nPLandroidx/compose/ui/geometry/Rect;->getRight()F\nHSPLandroidx/compose/ui/geometry/Rect;->getTop()F\nPLandroidx/compose/ui/geometry/Rect;->getTop()F\nHSPLandroidx/compose/ui/geometry/Rect;->getWidth()F\nPLandroidx/compose/ui/geometry/Rect;->getWidth()F\nLandroidx/compose/ui/geometry/RoundRect;\nHSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V\nPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V\nHSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V\nHPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V\nHSPLandroidx/compose/ui/geometry/RoundRect;->getBottom()F\nPLandroidx/compose/ui/geometry/RoundRect;->getBottom()F\nHSPLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J\nPLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J\nHSPLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J\nPLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J\nHSPLandroidx/compose/ui/geometry/RoundRect;->getHeight()F\nPLandroidx/compose/ui/geometry/RoundRect;->getHeight()F\nHSPLandroidx/compose/ui/geometry/RoundRect;->getLeft()F\nPLandroidx/compose/ui/geometry/RoundRect;->getLeft()F\nHSPLandroidx/compose/ui/geometry/RoundRect;->getRight()F\nPLandroidx/compose/ui/geometry/RoundRect;->getRight()F\nHSPLandroidx/compose/ui/geometry/RoundRect;->getTop()F\nPLandroidx/compose/ui/geometry/RoundRect;->getTop()F\nHSPLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J\nPLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J\nHSPLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J\nPLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J\nHSPLandroidx/compose/ui/geometry/RoundRect;->getWidth()F\nPLandroidx/compose/ui/geometry/RoundRect;->getWidth()F\nLandroidx/compose/ui/geometry/Size;\nHSPLandroidx/compose/ui/geometry/Size;-><clinit>()V\nPLandroidx/compose/ui/geometry/Size;-><clinit>()V\nHSPLandroidx/compose/ui/geometry/Size;-><init>(J)V\nPLandroidx/compose/ui/geometry/Size;-><init>(J)V\nHSPLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J\nPLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J\nHSPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J\nPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J\nHSPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size;\nPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size;\nHSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z\nPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z\nHSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F\nHPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F\nHSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F\nHPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F\nHSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F\nHPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F\nHSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z\nHPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z\nHSPLandroidx/compose/ui/geometry/Size;->unbox-impl()J\nPLandroidx/compose/ui/geometry/Size;->unbox-impl()J\nLandroidx/compose/ui/graphics/AndroidCanvas;\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V\nPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->clipPath-mtrdD-E(Landroidx/compose/ui/graphics/Path;I)V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->clipPath-mtrdD-E(Landroidx/compose/ui/graphics/Path;I)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawArc(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V\nPLandroidx/compose/ui/graphics/AndroidCanvas;->drawArc(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/AndroidPaint;)V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/AndroidPaint;)V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V\nPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V\nPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas;\nPLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas;\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V\nPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V\nHPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V\nLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;\nHSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V\nPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas;\nPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas;\nHSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;\nHPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;\nLandroidx/compose/ui/graphics/AndroidImageBitmap;\nHSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V\nHPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V\nHSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap;\nPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap;\nHSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I\nPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I\nHSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I\nPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I\nHSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V\nPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V\nLandroidx/compose/ui/graphics/AndroidPaint;\nHSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V\nHPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint;\nPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint;\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F\nPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I\nPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J\nHPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter;\nPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter;\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I\nHPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader;\nPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader;\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I\nPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I\nPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F\nPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F\nPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V\nHPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V\nHPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V\nHPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V\nPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V\nHPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V\nPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V\nPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V\nHSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V\nPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V\nLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;\nHSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V\nPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;-><clinit>()V\nLandroidx/compose/ui/graphics/AndroidPath;\nHSPLandroidx/compose/ui/graphics/AndroidPath;-><init>(Landroid/graphics/Path;)V\nHPLandroidx/compose/ui/graphics/AndroidPath;-><init>(Landroid/graphics/Path;)V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->close()V\nPLandroidx/compose/ui/graphics/AndroidPath;->close()V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V\nHPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->getFillType-Rg-k1Os()I\nPLandroidx/compose/ui/graphics/AndroidPath;->getFillType-Rg-k1Os()I\nHSPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path;\nPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path;\nHSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V\nHPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V\nPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V\nPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V\nPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->rewind()V\nPLandroidx/compose/ui/graphics/AndroidPath;->rewind()V\nHSPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V\nPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V\nLandroidx/compose/ui/graphics/Api26Bitmap;\nHSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap;\nPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap;\nLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V\nPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V\nHSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/ColorSpace$Named;\nPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/ColorSpace$Named;\nHSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;\nHPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;\nPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V\nHSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/autofill/AutofillManager$AutofillCallback;\nPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/autofill/AutofillManager$AutofillCallback;\nLandroidx/compose/ui/graphics/BlendMode;\nHSPLandroidx/compose/ui/graphics/BlendMode;-><init>(I)V\nPLandroidx/compose/ui/graphics/BlendMode;-><init>(I)V\nHSPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode;\nPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode;\nHSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;\nHSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><clinit>()V\nPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><init>()V\nPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><init>()V\nHSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter;\nHPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter;\nLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;\nHSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/Modifier$Node;I)V\nHPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/Modifier$Node;I)V\nHSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/graphics/Brush;-><clinit>()V\nPLandroidx/compose/ui/graphics/Brush;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/Brush;-><init>()V\nHPLandroidx/compose/ui/graphics/Brush;-><init>()V\nLandroidx/compose/ui/graphics/Brush$Companion;\nHSPLandroidx/compose/ui/graphics/Brush$Companion;-><clinit>()V\nPLandroidx/compose/ui/graphics/Brush$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/Brush$Companion;-><init>()V\nPLandroidx/compose/ui/graphics/Brush$Companion;-><init>()V\nHSPLandroidx/compose/ui/graphics/Brush$Companion;->tint-xETnrds(IJ)Landroidx/compose/ui/graphics/ColorFilter;\nHPLandroidx/compose/ui/graphics/Brush$Companion;->tint-xETnrds(IJ)Landroidx/compose/ui/graphics/ColorFilter;\nLandroidx/compose/ui/graphics/BrushKt;\nHSPLandroidx/compose/ui/graphics/BrushKt;-><clinit>()V\nPLandroidx/compose/ui/graphics/BrushKt;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/BrushKt;-><init>()V\nHPLandroidx/compose/ui/graphics/BrushKt;-><init>()V\nHSPLandroidx/compose/ui/graphics/BrushKt;->Canvas(Landroidx/compose/ui/graphics/AndroidImageBitmap;)Landroidx/compose/ui/graphics/AndroidCanvas;\nPLandroidx/compose/ui/graphics/BrushKt;->Canvas(Landroidx/compose/ui/graphics/AndroidImageBitmap;)Landroidx/compose/ui/graphics/AndroidCanvas;\nHSPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J\nPLandroidx/compose/ui/graphics/BrushKt;->Color$default(III)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nHPLandroidx/compose/ui/graphics/BrushKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J\nPLandroidx/compose/ui/graphics/BrushKt;->Color(I)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J\nPLandroidx/compose/ui/graphics/BrushKt;->Color(J)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->ImageBitmap-x__-hDU$default(IIII)Landroidx/compose/ui/graphics/AndroidImageBitmap;\nHPLandroidx/compose/ui/graphics/BrushKt;->ImageBitmap-x__-hDU$default(IIII)Landroidx/compose/ui/graphics/AndroidImageBitmap;\nHSPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;\nPLandroidx/compose/ui/graphics/BrushKt;->Paint()Landroidx/compose/ui/graphics/AndroidPaint;\nHSPLandroidx/compose/ui/graphics/BrushKt;->Path()Landroidx/compose/ui/graphics/AndroidPath;\nHPLandroidx/compose/ui/graphics/BrushKt;->Path()Landroidx/compose/ui/graphics/AndroidPath;\nHSPLandroidx/compose/ui/graphics/BrushKt;->TransformOrigin(FF)J\nPLandroidx/compose/ui/graphics/BrushKt;->TransformOrigin(FF)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap;\nPLandroidx/compose/ui/graphics/BrushKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap;\nHSPLandroidx/compose/ui/graphics/BrushKt;->compositeOver--OWjLjI(JJ)J\nHPLandroidx/compose/ui/graphics/BrushKt;->compositeOver--OWjLjI(JJ)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V\nHPLandroidx/compose/ui/graphics/BrushKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/BrushKt;J)V\nHSPLandroidx/compose/ui/graphics/BrushKt;->getRectangleShape()Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;\nHPLandroidx/compose/ui/graphics/BrushKt;->getRectangleShape()Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;\nHSPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/graphics/BrushKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/graphics/BrushKt;->lerp-jxsXWHM(JJF)J\nHPLandroidx/compose/ui/graphics/BrushKt;->lerp-jxsXWHM(JJF)J\nHSPLandroidx/compose/ui/graphics/BrushKt;->luminance-8_81llA(J)F\nPLandroidx/compose/ui/graphics/BrushKt;->luminance-8_81llA(J)F\nHSPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V\nHPLandroidx/compose/ui/graphics/BrushKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V\nHSPLandroidx/compose/ui/graphics/BrushKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode;\nHPLandroidx/compose/ui/graphics/BrushKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode;\nHSPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I\nHPLandroidx/compose/ui/graphics/BrushKt;->toArgb-8_81llA(J)I\nHSPLandroidx/compose/ui/graphics/BrushKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config;\nHPLandroidx/compose/ui/graphics/BrushKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config;\nLandroidx/compose/ui/graphics/Canvas;\nLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$12()Landroid/graphics/BlendMode;\nPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$12()Landroid/graphics/BlendMode;\nHSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$9()Landroid/graphics/BlendMode;\nPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m$9()Landroid/graphics/BlendMode;\nHSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m()V\nPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m()V\nHSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;\nPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;\nHSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V\nHPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V\nLandroidx/compose/ui/graphics/Color;\nHSPLandroidx/compose/ui/graphics/Color;-><clinit>()V\nPLandroidx/compose/ui/graphics/Color;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/Color;-><init>(J)V\nHPLandroidx/compose/ui/graphics/Color;-><init>(J)V\nHSPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J\nPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J\nHSPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J\nPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J\nHSPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J\nPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J\nHSPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J\nPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J\nHSPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J\nHPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J\nHSPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color;\nHPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color;\nHSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nHPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nHSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J\nHPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J\nHSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F\nHPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F\nHSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F\nHPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F\nHSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace;\nHPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace;\nHSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F\nHPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F\nHSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F\nHPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F\nPLandroidx/compose/ui/graphics/Color;->hashCode-impl(J)I\nHPLandroidx/compose/ui/graphics/Color;->hashCode-impl(J)I\nHSPLandroidx/compose/ui/graphics/Color;->unbox-impl()J\nHPLandroidx/compose/ui/graphics/Color;->unbox-impl()J\nLandroidx/compose/ui/graphics/ColorFilter;\nHSPLandroidx/compose/ui/graphics/ColorFilter;-><init>(Landroid/graphics/ColorFilter;)V\nPLandroidx/compose/ui/graphics/ColorFilter;-><init>(Landroid/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter;\nPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter;\nLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;\nHSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->androidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace;\nHPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->androidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace;\nLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticApiModelOutline1;\nHSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;\nHPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;\nLandroidx/compose/ui/graphics/Float16;\nHSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V\nPLandroidx/compose/ui/graphics/Float16;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S\nHPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S\nHSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F\nHPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F\nLandroidx/compose/ui/graphics/GraphicsLayerElement;\nHSPLandroidx/compose/ui/graphics/GraphicsLayerElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V\nHPLandroidx/compose/ui/graphics/GraphicsLayerElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V\nHSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;\nHSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V\nPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J\nHPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J\nLandroidx/compose/ui/graphics/ImageBitmap;\nLandroidx/compose/ui/graphics/Matrix;\nHSPLandroidx/compose/ui/graphics/Matrix;-><init>([F)V\nPLandroidx/compose/ui/graphics/Matrix;-><init>([F)V\nHSPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix;\nPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix;\nHSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F\nHPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F\nHSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J\nHPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J\nHSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V\nHPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V\nHSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V\nPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V\nHSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFF)V\nHPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFF)V\nHSPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F\nPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F\nLandroidx/compose/ui/graphics/Outline$Generic;\nLandroidx/compose/ui/graphics/Outline$Rectangle;\nHSPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V\nPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V\nHSPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect;\nPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect;\nLandroidx/compose/ui/graphics/Outline$Rounded;\nHSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V\nHPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V\nHSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect;\nPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect;\nHSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/AndroidPath;\nPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/AndroidPath;\nLandroidx/compose/ui/graphics/Path;\nLandroidx/compose/ui/graphics/PathFillType;\nHSPLandroidx/compose/ui/graphics/PathFillType;-><init>(I)V\nHPLandroidx/compose/ui/graphics/PathFillType;-><init>(I)V\nHSPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType;\nHPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType;\nHSPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I\nPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I\nLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;\nHSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>()V\nPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>()V\nLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape;\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape;\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V\nHPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V\nHSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V\nPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V\nLandroidx/compose/ui/graphics/ShaderBrush;\nLandroidx/compose/ui/graphics/Shadow;\nHSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V\nPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/Shadow;-><init>(JFI)V\nPLandroidx/compose/ui/graphics/Shadow;-><init>(JFI)V\nHSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V\nPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V\nHSPLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow;\nPLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow;\nHSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/graphics/Shape;\nLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V\nHPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape;\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape;\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F\nPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V\nHPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V\nHSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/SolidColor;\nHSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V\nPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V\nHSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V\nHPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/AndroidPaint;)V\nHSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/graphics/SolidColor;->hashCode()I\nLandroidx/compose/ui/graphics/StrokeCap;\nHSPLandroidx/compose/ui/graphics/StrokeCap;-><init>(I)V\nHPLandroidx/compose/ui/graphics/StrokeCap;-><init>(I)V\nHSPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap;\nHPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap;\nHSPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I\nPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I\nLandroidx/compose/ui/graphics/StrokeJoin;\nHSPLandroidx/compose/ui/graphics/StrokeJoin;-><init>(I)V\nHPLandroidx/compose/ui/graphics/StrokeJoin;-><init>(I)V\nHSPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin;\nHPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin;\nHSPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I\nPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I\nLandroidx/compose/ui/graphics/TransformOrigin;\nHSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V\nPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/TransformOrigin;-><init>(J)V\nHPLandroidx/compose/ui/graphics/TransformOrigin;-><init>(J)V\nHSPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J\nHPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J\nHSPLandroidx/compose/ui/graphics/TransformOrigin;->box-impl(J)Landroidx/compose/ui/graphics/TransformOrigin;\nHPLandroidx/compose/ui/graphics/TransformOrigin;->box-impl(J)Landroidx/compose/ui/graphics/TransformOrigin;\nHSPLandroidx/compose/ui/graphics/TransformOrigin;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/graphics/TransformOrigin;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F\nHPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F\nHSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F\nHPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F\nHSPLandroidx/compose/ui/graphics/TransformOrigin;->unbox-impl()J\nHPLandroidx/compose/ui/graphics/TransformOrigin;->unbox-impl()J\nLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;\nHSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><clinit>()V\nPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><init>()V\nPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><init>()V\nHSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V\nHPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V\nLandroidx/compose/ui/graphics/colorspace/Adaptation;\nHSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V\nPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V\nHSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;\nPLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;\nHSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F\nPLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F\nLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;\nHSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;-><init>([F)V\nPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;-><init>([F)V\nLandroidx/compose/ui/graphics/colorspace/ColorModel;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J\nPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J\nHSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J\nPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J\nHSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J\nPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J\nHSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z\nLandroidx/compose/ui/graphics/colorspace/ColorSpace;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V\nPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I\nPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I\nPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J\nPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String;\nPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z\nPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z\nLandroidx/compose/ui/graphics/colorspace/ColorSpaces;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace;\nHPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F\nPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/Oklab;\nPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/Oklab;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb;\nHPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb;\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F\nPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F\nHSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb;\nPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb;\nLandroidx/compose/ui/graphics/colorspace/Connector;\nHSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V\nPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V\nHSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V\nPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V\nHSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;\nPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;\nHSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;\nPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;\nHSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J\nHPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J\nLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;\nHSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V\nPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V\nLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;\nLandroidx/compose/ui/graphics/colorspace/DoubleFunction;\nLandroidx/compose/ui/graphics/colorspace/Illuminant;\nHSPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nHSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nHSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nHSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nLandroidx/compose/ui/graphics/colorspace/Lab;\nHSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V\nPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>()V\nLandroidx/compose/ui/graphics/colorspace/Lab$Companion;\nHSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;-><init>()V\nPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;-><init>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z\nPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z\nHSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isWideGamut([FFF)V\nPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->access$isWideGamut([FFF)V\nHSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->area([F)F\nPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->area([F)F\nLandroidx/compose/ui/graphics/colorspace/Oklab;\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()V\nPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F\nPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F\nPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J\nHPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F\nHPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F\nHSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nHPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nLandroidx/compose/ui/graphics/colorspace/Rgb;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D\nHPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V\nPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J\nHPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F\nPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nHPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J\nLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D\nHPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D\nLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D\nHPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D\nLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>(DI)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>(DI)V\nLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;\nHSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V\nPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;I)V\nLandroidx/compose/ui/graphics/colorspace/TransferParameters;\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDD)V\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D\nHSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D\nPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D\nLandroidx/compose/ui/graphics/colorspace/WhitePoint;\nHSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V\nPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V\nHSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F\nPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F\nHSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F\nPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F\nHSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F\nPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F\nLandroidx/compose/ui/graphics/colorspace/Xyz;\nHSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V\nPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>()V\nLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/AndroidPaint;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-Q_0CZUI$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JFIFLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-Q_0CZUI$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JFIFLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/AndroidPaint;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/AndroidPaint;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/AndroidPaint;\nLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>()V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V\nLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas;\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V\nLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->clipPath-mtrdD-E$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;Landroidx/compose/ui/graphics/AndroidPath;)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->clipPath-mtrdD-E$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;Landroidx/compose/ui/graphics/AndroidPath;)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V\nHPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V\nHSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V\nPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V\nLandroidx/compose/ui/graphics/drawscope/ContentDrawScope;\nLandroidx/compose/ui/graphics/drawscope/DrawContextKt;\nHSPLandroidx/compose/ui/graphics/drawscope/DrawContextKt;-><clinit>()V\nPLandroidx/compose/ui/graphics/drawscope/DrawContextKt;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawContextKt;->getDefaultDensity()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/graphics/drawscope/DrawContextKt;->getDefaultDensity()Landroidx/compose/ui/unit/Density;\nLandroidx/compose/ui/graphics/drawscope/DrawScope;\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawArc-yD3GUKo$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V\nPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawArc-yD3GUKo$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/ColorFilter;II)V\nHPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJFLandroidx/compose/ui/graphics/ColorFilter;II)V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawLine-NGM6Ib0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFII)V\nPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawLine-NGM6Ib0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFII)V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/Stroke;I)V\nPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/Stroke;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/ColorFilter;I)V\nHPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJLandroidx/compose/ui/graphics/drawscope/Stroke;I)V\nPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJLandroidx/compose/ui/graphics/drawscope/Stroke;I)V\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J\nHPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J\nHSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J\nHPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J\nLandroidx/compose/ui/graphics/drawscope/DrawStyle;\nHSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;-><init>()V\nPLandroidx/compose/ui/graphics/drawscope/DrawStyle;-><init>()V\nLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;\nHSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;-><init>()V\nHPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;-><init>()V\nLandroidx/compose/ui/graphics/drawscope/Fill;\nHSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V\nPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/drawscope/Fill;-><init>()V\nPLandroidx/compose/ui/graphics/drawscope/Fill;-><init>()V\nLandroidx/compose/ui/graphics/drawscope/Stroke;\nHSPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V\nPLandroidx/compose/ui/graphics/drawscope/Stroke;-><init>(FFIII)V\nHSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getCap-KaPHkGw()I\nPLandroidx/compose/ui/graphics/drawscope/Stroke;->getCap-KaPHkGw()I\nHSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getJoin-LxFBmk8()I\nPLandroidx/compose/ui/graphics/drawscope/Stroke;->getJoin-LxFBmk8()I\nHSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getMiter()F\nPLandroidx/compose/ui/graphics/drawscope/Stroke;->getMiter()F\nHSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getWidth()F\nPLandroidx/compose/ui/graphics/drawscope/Stroke;->getWidth()F\nLandroidx/compose/ui/graphics/painter/Painter;\nHSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V\nPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V\nHSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V\nHPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V\nLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;\nHSPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;-><init>(Landroidx/compose/ui/graphics/painter/Painter;)V\nPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;-><init>(Landroidx/compose/ui/graphics/painter/Painter;)V\nLandroidx/compose/ui/graphics/vector/DrawCache;\nHSPLandroidx/compose/ui/graphics/vector/DrawCache;-><init>()V\nPLandroidx/compose/ui/graphics/vector/DrawCache;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V\nHPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V\nLandroidx/compose/ui/graphics/vector/FloatResult;\nHSPLandroidx/compose/ui/graphics/vector/FloatResult;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/FloatResult;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/FloatResult;->getValue()F\nHPLandroidx/compose/ui/graphics/vector/FloatResult;->getValue()F\nHSPLandroidx/compose/ui/graphics/vector/FloatResult;->isValid()Z\nHPLandroidx/compose/ui/graphics/vector/FloatResult;->isValid()Z\nHSPLandroidx/compose/ui/graphics/vector/FloatResult;->setValid(Z)V\nHPLandroidx/compose/ui/graphics/vector/FloatResult;->setValid(Z)V\nHSPLandroidx/compose/ui/graphics/vector/FloatResult;->setValue(F)V\nHPLandroidx/compose/ui/graphics/vector/FloatResult;->setValue(F)V\nLandroidx/compose/ui/graphics/vector/GroupComponent;\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setClipPathData(Ljava/util/List;)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setClipPathData(Ljava/util/List;)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setRotation(F)V\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;->setRotation(F)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationX(F)V\nHPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationX(F)V\nHSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationY(F)V\nPLandroidx/compose/ui/graphics/vector/GroupComponent;->setTranslationY(F)V\nLandroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/ImageVector;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V\nHPLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String;\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup;\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F\nPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F\nHPLandroidx/compose/ui/graphics/vector/ImageVector;->hashCode()I\nLandroidx/compose/ui/graphics/vector/ImageVector$Builder;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZ)V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZ)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZI)V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZI)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addGroup(Ljava/lang/String;FFFFFFFLjava/util/List;)V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addGroup(Ljava/lang/String;FFFFFFFLjava/util/List;)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/ArrayList;ILandroidx/compose/ui/graphics/SolidColor;FIF)V\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/ArrayList;ILandroidx/compose/ui/graphics/SolidColor;FIF)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(FFFFFFFIIILandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Brush;Ljava/lang/String;Ljava/util/List;)V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(FFFFFFFIIILandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Brush;Ljava/lang/String;Ljava/util/List;)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup;\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector;\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->clearGroup()V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->clearGroup()V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V\nLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;I)V\nHPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;I)V\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List;\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List;\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String;\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String;\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F\nHSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F\nPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F\nLandroidx/compose/ui/graphics/vector/PathBuilder;\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;-><init>()V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)V\nHPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->arcToRelative(FFZZFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/ArrayList;\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/ArrayList;\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)V\nHPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveToRelative(FF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveToRelative(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)V\nPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)V\nLandroidx/compose/ui/graphics/vector/PathComponent;\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/PathComponent;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V\nPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V\nHPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V\nLandroidx/compose/ui/graphics/vector/PathNode;\nHSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZI)V\nHPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZI)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode;->isCurve()Z\nPLandroidx/compose/ui/graphics/vector/PathNode;->isCurve()Z\nLandroidx/compose/ui/graphics/vector/PathNode$ArcTo;\nLandroidx/compose/ui/graphics/vector/PathNode$Close;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><init>()V\nPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><init>()V\nLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;-><init>(FFFFFF)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;-><init>(FFFFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX1()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX2()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX2()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX3()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX3()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY1()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY2()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY2()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY3()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY3()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;-><init>(F)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;-><init>(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F\nPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->hashCode()I\nHPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$LineTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;-><init>(FF)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;-><init>(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;-><init>(FF)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;-><init>(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F\nPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$QuadTo;\nLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;-><init>(FFFF)V\nPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;-><init>(FFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX1()F\nPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX2()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY1()F\nPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->hashCode()I\nHPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveQuadTo;\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;-><init>(FFFZZFF)V\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDx()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDx()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDy()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getArcStartDy()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getHorizontalEllipseRadius()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getHorizontalEllipseRadius()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getTheta()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getTheta()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getVerticalEllipseRadius()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->getVerticalEllipseRadius()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->hashCode()I\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isMoreThanHalf()Z\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isMoreThanHalf()Z\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isPositiveArc()Z\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->isPositiveArc()Z\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;-><init>(FFFFFF)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;-><init>(FFFFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx1()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx2()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx3()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx3()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy1()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy2()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy3()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy3()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;-><init>(F)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;-><init>(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;-><init>(FF)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;-><init>(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;-><init>(FF)V\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;-><init>(FF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDx()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDx()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDy()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDy()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->hashCode()I\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeQuadTo;\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;-><init>(FFFF)V\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;-><init>(FFFF)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx1()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx2()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy1()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy1()F\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy2()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy2()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveQuadTo;\nLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;-><init>(F)V\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;-><init>(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F\nPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F\nHPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->hashCode()I\nLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;\nHSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;-><init>(F)V\nPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;-><init>(F)V\nHSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F\nPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F\nLandroidx/compose/ui/graphics/vector/PathNodeKt;\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/PathNodeKt;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;-><init>()V\nPLandroidx/compose/ui/graphics/vector/PathNodeKt;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Group(Ljava/lang/String;FFFFFFFLjava/util/List;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Group(Ljava/lang/String;FFFFFFFLjava/util/List;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V\nHPLandroidx/compose/ui/graphics/vector/PathNodeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/ui/graphics/vector/PathNodeKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->access$getPowersOfTen$cp()[F\nHPLandroidx/compose/ui/graphics/vector/PathNodeKt;->access$getPowersOfTen$cp()[F\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter;\nHPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/VectorPainter;\nHSPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter;\nHPLandroidx/compose/ui/graphics/vector/PathNodeKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter;\nLandroidx/compose/ui/graphics/vector/PathParserKt;\nHPLandroidx/compose/ui/graphics/vector/PathParserKt;->drawArc(Landroidx/compose/ui/graphics/Path;DDDDDDDZZ)V\nHSPLandroidx/compose/ui/graphics/vector/PathParserKt;->toPath(Ljava/util/List;Landroidx/compose/ui/graphics/Path;)V\nHPLandroidx/compose/ui/graphics/vector/PathParserKt;->toPath(Ljava/util/List;Landroidx/compose/ui/graphics/Path;)V\nLandroidx/compose/ui/graphics/vector/VNode;\nHSPLandroidx/compose/ui/graphics/vector/VNode;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/VNode;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V\nHPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V\nHSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/ui/graphics/vector/VectorApplier;\nHSPLandroidx/compose/ui/graphics/vector/VectorApplier;-><init>(Landroidx/compose/ui/graphics/vector/GroupComponent;)V\nPLandroidx/compose/ui/graphics/vector/VectorApplier;-><init>(Landroidx/compose/ui/graphics/vector/GroupComponent;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent;\nPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent;\nHSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V\nPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V\nPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V\nPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V\nLandroidx/compose/ui/graphics/vector/VectorComponent;\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/VectorComponent;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V\nHPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent;\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent;\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;)V\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V\nPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V\nLandroidx/compose/ui/graphics/vector/VectorComposeKt$Group$4;\nLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><init>(I)V\nPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><init>(I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><init>(I)V\nPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><init>(I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/GroupComponent;F)V\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/GroupComponent;F)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$3;\nLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()V\nHPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()V\nLandroidx/compose/ui/graphics/vector/VectorConfig;\nHSPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/PathNodeKt;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorGroup;\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V\nHPLandroidx/compose/ui/graphics/vector/VectorGroup;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List;\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List;\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getClipPathData()Ljava/util/List;\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getClipPathData()Ljava/util/List;\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getName()Ljava/lang/String;\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getName()Ljava/lang/String;\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotX()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotX()F\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotY()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getPivotY()F\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getRotation()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getRotation()F\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleX()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleX()F\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleY()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getScaleY()F\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationX()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationX()F\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationY()F\nPLandroidx/compose/ui/graphics/vector/VectorGroup;->getTranslationY()F\nHPLandroidx/compose/ui/graphics/vector/VectorGroup;->hashCode()I\nLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;)V\nPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z\nHPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z\nHSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorKt;\nHSPLandroidx/compose/ui/graphics/vector/VectorKt;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorKt;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorKt;->addPathNodes(Ljava/lang/String;)Ljava/util/List;\nHPLandroidx/compose/ui/graphics/vector/VectorKt;->addPathNodes(Ljava/lang/String;)Ljava/util/List;\nHSPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Lkotlin/collections/EmptyList;\nPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Lkotlin/collections/EmptyList;\nLandroidx/compose/ui/graphics/vector/VectorNode;\nHSPLandroidx/compose/ui/graphics/vector/VectorNode;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/VectorNode;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorPainter;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/VectorPainter;-><init>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getDrawCount$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)I\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getDrawCount$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)I\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;)I\nHPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;)I\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent;\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;I)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setInvalidateCount(Landroidx/compose/ui/graphics/vector/VectorPainter;I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V\nLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/Composition;)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/Composition;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;-><init>(Landroidx/compose/ui/graphics/vector/VectorPainter;Ljava/lang/String;FFLkotlin/jvm/functions/Function4;I)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;-><init>(Landroidx/compose/ui/graphics/vector/VectorPainter;Ljava/lang/String;FFLkotlin/jvm/functions/Function4;I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;II)V\nHPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;II)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;-><init>()V\nHPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;\nHSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;)V\nPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/graphics/vector/VectorPath;\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V\nHPLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush;\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String;\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String;\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List;\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List;\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush;\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F\nHSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F\nPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F\nHPLandroidx/compose/ui/graphics/vector/VectorPath;->hashCode()I\nLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotX;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$PivotY;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$Rotation;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleX;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$ScaleY;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateX;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TranslateY;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><init>()V\nLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><init>()V\nPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><init>()V\nLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getDimension(Landroid/content/res/TypedArray;I)F\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getDimension(Landroid/content/res/TypedArray;I)F\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getFloat(Landroid/content/res/TypedArray;I)F\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getFloat(Landroid/content/res/TypedArray;I)F\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getInt(Landroid/content/res/TypedArray;)I\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getInt(Landroid/content/res/TypedArray;)I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedBoolean(Landroid/content/res/TypedArray;)Z\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedBoolean(Landroid/content/res/TypedArray;)Z\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedComplexColor(Landroid/content/res/TypedArray;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat;\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedComplexColor(Landroid/content/res/TypedArray;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedFloat(Landroid/content/res/TypedArray;Ljava/lang/String;IF)F\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedFloat(Landroid/content/res/TypedArray;Ljava/lang/String;IF)F\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedInt(Landroid/content/res/TypedArray;Ljava/lang/String;II)I\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedInt(Landroid/content/res/TypedArray;Ljava/lang/String;II)I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getString(Landroid/content/res/TypedArray;I)Ljava/lang/String;\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getString(Landroid/content/res/TypedArray;I)Ljava/lang/String;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getXmlParser()Lorg/xmlpull/v1/XmlPullParser;\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getXmlParser()Lorg/xmlpull/v1/XmlPullParser;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->updateConfig(I)V\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->updateConfig(I)V\nLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;-><clinit>()V\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;-><clinit>()V\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_CLIP_PATH()[I\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_CLIP_PATH()[I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_GROUP()[I\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_GROUP()[I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_PATH()[I\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_PATH()[I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_TYPE_ARRAY()[I\nPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->getSTYLEABLE_VECTOR_DRAWABLE_TYPE_ARRAY()[I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->obtainBrushFromComplexColor(Landroidx/core/content/res/ComplexColorCompat;)Landroidx/compose/ui/graphics/Brush;\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->obtainBrushFromComplexColor(Landroidx/core/content/res/ComplexColorCompat;)Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->parseCurrentVectorNode(Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;Landroidx/compose/ui/graphics/vector/ImageVector$Builder;I)I\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->parseCurrentVectorNode(Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;Landroidx/compose/ui/graphics/vector/ImageVector$Builder;I)I\nHSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V\nHPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V\nLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;\nHSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;-><init>(Landroid/view/View;)V\nPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;-><init>(Landroid/view/View;)V\nLandroidx/compose/ui/input/InputMode;\nHSPLandroidx/compose/ui/input/InputMode;-><init>(I)V\nPLandroidx/compose/ui/input/InputMode;-><init>(I)V\nHSPLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode;\nPLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode;\nHSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/input/InputMode;->unbox-impl()I\nPLandroidx/compose/ui/input/InputMode;->unbox-impl()I\nLandroidx/compose/ui/input/InputModeManagerImpl;\nHSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(ILkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(ILkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I\nPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I\nHSPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V\nPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V\nLandroidx/compose/ui/input/key/KeyInputElement;\nHSPLandroidx/compose/ui/input/key/KeyInputElement;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/input/key/KeyInputElement;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/ui/input/key/KeyInputModifierNode;\nLandroidx/compose/ui/input/key/KeyInputNode;\nHSPLandroidx/compose/ui/input/key/KeyInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/input/key/KeyInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/input/key/Key_androidKt;\nHSPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/input/key/Key_androidKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/input/nestedscroll/NestedScrollConnection;\nLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getModifierLocalNode$ui_release()Landroidx/compose/ui/modifier/ModifierLocalModifierNode;\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getModifierLocalNode$ui_release()Landroidx/compose/ui/modifier/ModifierLocalModifierNode;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setModifierLocalNode$ui_release(Landroidx/compose/ui/modifier/ModifierLocalModifierNode;)V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setModifierLocalNode$ui_release(Landroidx/compose/ui/modifier/ModifierLocalModifierNode;)V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V\nLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateNode$ui_release(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V\nLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;-><clinit>()V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;-><clinit>()V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;-><clinit>()V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;-><clinit>()V\nHSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;-><init>()V\nPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;-><init>()V\nLandroidx/compose/ui/input/pointer/AndroidPointerIconType;\nHSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;-><init>(I)V\nPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;-><init>(I)V\nLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;\nPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;)Ljava/lang/Object;\nLandroidx/compose/ui/input/pointer/ConsumedData;\nHSPLandroidx/compose/ui/input/pointer/ConsumedData;-><init>(ZZ)V\nHPLandroidx/compose/ui/input/pointer/ConsumedData;-><init>(ZZ)V\nHSPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z\nPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z\nHSPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z\nPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z\nHSPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange()V\nPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange()V\nHSPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange()V\nPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange()V\nLandroidx/compose/ui/input/pointer/MotionEventAdapter;\nHSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V\nPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V\nHSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent;\nHPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent;\nLandroidx/compose/ui/input/pointer/Node;\nHSPLandroidx/compose/ui/input/pointer/Node;-><init>(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/input/pointer/Node;-><init>(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/input/pointer/Node;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHPLandroidx/compose/ui/input/pointer/Node;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHSPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V\nHPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V\nHSPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z\nHPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z\nHSPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHSPLandroidx/compose/ui/input/pointer/Node;->getModifierNode()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/input/pointer/Node;->getModifierNode()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/IntStack;\nPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/IntStack;\nLandroidx/compose/ui/input/pointer/NodeParent;\nHSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V\nHPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V\nHSPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHSPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V\nHPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/focus/FocusTransactionManager;)V\nHSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z\nHPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/focus/FocusTransactionManager;)Z\nHSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Landroidx/collection/LongSparseArray;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHSPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector;\nPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V\nHPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V\nLandroidx/compose/ui/input/pointer/PointerEvent;\nHSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Landroidx/compose/ui/focus/FocusTransactionManager;)V\nHPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Landroidx/compose/ui/focus/FocusTransactionManager;)V\nHSPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List;\nPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List;\nHSPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent;\nPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent;\nHSPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I\nPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I\nLandroidx/compose/ui/input/pointer/PointerEventPass;\nHSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><clinit>()V\nPLandroidx/compose/ui/input/pointer/PointerEventPass;-><clinit>()V\nHSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/ui/input/pointer/PointerEventPass;-><init>(Ljava/lang/String;I)V\nLandroidx/compose/ui/input/pointer/PointerEventTimeoutCancellationException;\nLandroidx/compose/ui/input/pointer/PointerIcon;\nHSPLandroidx/compose/ui/input/pointer/PointerIcon;-><clinit>()V\nPLandroidx/compose/ui/input/pointer/PointerIcon;-><clinit>()V\nLandroidx/compose/ui/input/pointer/PointerIcon$Companion;\nHSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;-><clinit>()V\nPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;-><init>()V\nPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;-><init>()V\nLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;\nHSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/input/pointer/PointerId;\nPLandroidx/compose/ui/input/pointer/PointerId;-><init>(J)V\nPLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId;\nHSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z\nLandroidx/compose/ui/input/pointer/PointerInputChange;\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZILjava/util/List;J)V\nHPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZILjava/util/List;J)V\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJ)V\nHPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJ)V\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJLjava/util/ArrayList;)Landroidx/compose/ui/input/pointer/PointerInputChange;\nHPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJLjava/util/ArrayList;)Landroidx/compose/ui/input/pointer/PointerInputChange;\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List;\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List;\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z\nPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z\nLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;\nHSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;-><init>()V\nPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;-><init>()V\nHSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/focus/FocusTransactionManager;\nHPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/focus/FocusTransactionManager;\nLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;\nHSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZ)V\nPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZ)V\nHSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z\nPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z\nHSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J\nPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J\nPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J\nLandroidx/compose/ui/input/pointer/PointerInputEvent;\nHSPLandroidx/compose/ui/input/pointer/PointerInputEvent;-><init>(Ljava/util/ArrayList;Landroid/view/MotionEvent;)V\nHPLandroidx/compose/ui/input/pointer/PointerInputEvent;-><init>(Ljava/util/ArrayList;Landroid/view/MotionEvent;)V\nHSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent;\nPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent;\nHSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List;\nPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List;\nLandroidx/compose/ui/input/pointer/PointerInputEventData;\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/ArrayList;J)V\nHPLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/ArrayList;J)V\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List;\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List;\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J\nPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J\nLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I\nPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I\nPLandroidx/compose/ui/input/pointer/PointerInputResetException;-><init>()V\nHPLandroidx/compose/ui/input/pointer/PointerInputResetException;-><init>()V\nPLandroidx/compose/ui/input/pointer/PointerInputResetException;->fillInStackTrace()Ljava/lang/Throwable;\nHPLandroidx/compose/ui/input/pointer/PointerInputResetException;->fillInStackTrace()Ljava/lang/Throwable;\nLandroidx/compose/ui/input/pointer/PointerInputScope;\nLandroidx/compose/ui/input/pointer/PointerInteropFilter;\nLandroidx/compose/ui/input/pointer/PointerInteropFilter$pointerInputFilter$1;\nLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;\nHSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V\nPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V\nHSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;\nPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;\nHSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/input/pointer/PositionCalculator;\nLandroidx/compose/ui/input/pointer/ProcessResult;\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;-><clinit>()V\nPLandroidx/compose/ui/input/pointer/ProcessResult;-><clinit>()V\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nPLandroidx/compose/ui/input/pointer/ProcessResult;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;->getPointerIconDefault()Landroidx/compose/ui/input/pointer/AndroidPointerIconType;\nPLandroidx/compose/ui/input/pointer/ProcessResult;->getPointerIconDefault()Landroidx/compose/ui/input/pointer/AndroidPointerIconType;\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J\nPLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J\nHSPLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nPLandroidx/compose/ui/input/pointer/ProcessResult;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z\nLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;\nHSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;-><init>(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V\nHPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;-><init>(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V\nHSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode;\nLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/ui/input/pointer/PointerEvent;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/ui/input/pointer/PointerEvent;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getPointerHandlers$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getPointerInputHandler()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getPointerInputHandler()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getSize-YbymL2g()J\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getSize-YbymL2g()J\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V\nLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)V\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V\nLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/input/pointer/util/DataPointAtTime;\nPLandroidx/compose/ui/input/pointer/util/DataPointAtTime;-><init>(JF)V\nLandroidx/compose/ui/input/pointer/util/VelocityTracker;\nHSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V\nLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;\nHSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V\nHPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>()V\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->addDataPoint(JF)V\nPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->resetTracking()V\nPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;-><clinit>()V\nPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V\nPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->getVelocityTrackerAddPointsFix()Z\nLandroidx/compose/ui/input/rotary/RotaryInputElement;\nHSPLandroidx/compose/ui/input/rotary/RotaryInputElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/input/rotary/RotaryInputElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;\nHSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier$Companion;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier$Companion;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/input/rotary/RotaryInputModifierNode;\nLandroidx/compose/ui/input/rotary/RotaryInputNode;\nHSPLandroidx/compose/ui/input/rotary/RotaryInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/input/rotary/RotaryInputNode;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/layout/AlignmentLine;\nHSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/ui/layout/AlignmentLineKt;\nHSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V\nPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V\nHSPLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;\nPLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;\nHSPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;\nPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;\nLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;\nHSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V\nPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V\nHSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V\nPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V\nLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;\nHSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V\nPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V\nHSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V\nPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V\nLandroidx/compose/ui/layout/BeyondBoundsLayout;\nLandroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;\nPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V\nPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;->getModifierLocalBeyondBoundsLayout()Landroidx/compose/ui/modifier/ProvidableModifierLocal;\nLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;\nHSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V\nPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V\nLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;\nHSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><clinit>()V\nPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><clinit>()V\nHSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><init>()V\nPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><init>()V\nLandroidx/compose/ui/layout/ContentScale;\nLandroidx/compose/ui/layout/ContentScale$Companion;\nHSPLandroidx/compose/ui/layout/ContentScale$Companion;-><clinit>()V\nPLandroidx/compose/ui/layout/ContentScale$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/layout/ContentScale$Companion;-><init>()V\nPLandroidx/compose/ui/layout/ContentScale$Companion;-><init>()V\nHSPLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Lorg/acra/file/CrashReportPersister;\nPLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Lorg/acra/file/CrashReportPersister;\nLandroidx/compose/ui/layout/FixedScale;\nHSPLandroidx/compose/ui/layout/FixedScale;-><init>()V\nPLandroidx/compose/ui/layout/FixedScale;-><init>()V\nLandroidx/compose/ui/layout/HorizontalAlignmentLine;\nHSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/ui/layout/IntrinsicMeasurable;\nLandroidx/compose/ui/layout/IntrinsicMeasureScope;\nLandroidx/compose/ui/layout/LayoutCoordinates;\nLandroidx/compose/ui/layout/LayoutElement;\nHSPLandroidx/compose/ui/layout/LayoutElement;-><init>(Lkotlin/jvm/functions/Function3;)V\nPLandroidx/compose/ui/layout/LayoutElement;-><init>(Lkotlin/jvm/functions/Function3;)V\nHSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/ui/layout/LayoutIdElement;\nHSPLandroidx/compose/ui/layout/LayoutIdElement;-><init>(Ljava/lang/Object;)V\nHPLandroidx/compose/ui/layout/LayoutIdElement;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/layout/LayoutIdElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/layout/LayoutIdElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/layout/LayoutIdModifier;\nHSPLandroidx/compose/ui/layout/LayoutIdModifier;-><init>(Ljava/lang/Object;)V\nHPLandroidx/compose/ui/layout/LayoutIdModifier;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/compose/ui/layout/LayoutIdModifier;->getLayoutId()Ljava/lang/Object;\nPLandroidx/compose/ui/layout/LayoutIdModifier;->getLayoutId()Ljava/lang/Object;\nHSPLandroidx/compose/ui/layout/LayoutIdModifier;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/layout/LayoutIdModifier;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/layout/LayoutIdParentData;\nLandroidx/compose/ui/layout/LayoutKt;\nHSPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J\nHPLandroidx/compose/ui/layout/LayoutKt;->ScaleFactor(FF)J\nHSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLandroidx/compose/ui/layout/LayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLandroidx/compose/ui/layout/LayoutKt;->access$computeFillMinDimension-iLBOSCw(JJ)F\nHPLandroidx/compose/ui/layout/LayoutKt;->access$computeFillMinDimension-iLBOSCw(JJ)F\nHSPLandroidx/compose/ui/layout/LayoutKt;->boundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect;\nHPLandroidx/compose/ui/layout/LayoutKt;->boundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/layout/LayoutCoordinates;\nHPLandroidx/compose/ui/layout/LayoutKt;->findRootCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/layout/LayoutCoordinates;\nHSPLandroidx/compose/ui/layout/LayoutKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/LayoutKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/layout/LayoutKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/layout/LayoutKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/layout/LayoutKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;\nHPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;\nHSPLandroidx/compose/ui/layout/LayoutKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nPLandroidx/compose/ui/layout/LayoutKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/layout/LayoutKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/layout/LayoutKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHSPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J\nHPLandroidx/compose/ui/layout/LayoutKt;->times-UQTWf7w(JJ)J\nLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;\nHSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;I)V\nHPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;I)V\nHSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;)V\nHPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;)V\nLandroidx/compose/ui/layout/LayoutModifier;\nLandroidx/compose/ui/layout/LayoutModifierImpl;\nHSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V\nHPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V\nHSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/ui/layout/LayoutModifierImpl;->setMeasureBlock(Lkotlin/jvm/functions/Function3;)V\nPLandroidx/compose/ui/layout/LayoutModifierImpl;->setMeasureBlock(Lkotlin/jvm/functions/Function3;)V\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode;\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition;\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$PostLookaheadMeasureScopeImpl;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->isLookingAhead()Z\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->isLookingAhead()Z\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;ILandroidx/compose/ui/layout/MeasureResult;I)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map;\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getAlignmentLines()Ljava/util/Map;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getHeight()I\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I\nPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->getWidth()I\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure-3p2s80s$$inlined$createMeasureResult$1;->placeChildren()V\nLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl;\nLandroidx/compose/ui/layout/Measurable;\nLandroidx/compose/ui/layout/MeasurePolicy;\nLandroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/ui/layout/MeasureScope;\nHSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/ui/layout/MeasureScope$layout$1;\nHSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map;\nHPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map;\nHSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I\nHPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I\nHSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I\nHPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I\nHSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V\nHPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V\nLandroidx/compose/ui/layout/Measured;\nLandroidx/compose/ui/layout/OnGloballyPositionedElement;\nHSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/layout/OnGloballyPositionedElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/ui/layout/OnGloballyPositionedNode;\nHSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/layout/OnGloballyPositionedNode;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nLandroidx/compose/ui/layout/OnRemeasuredModifier;\nLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;\nHSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V\nHSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/OnRemeasuredModifierKt$onSizeChanged$$inlined$debugInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/layout/OnSizeChangedModifier;\nHSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V\nPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V\nLandroidx/compose/ui/layout/PinnableContainer;\nLandroidx/compose/ui/layout/PinnableContainer$PinnedHandle;\nLandroidx/compose/ui/layout/PinnableContainerKt;\nHSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V\nPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V\nHSPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;\nHSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><clinit>()V\nPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><clinit>()V\nHSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><init>(I)V\nPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><init>(I)V\nHSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/layout/Placeable;\nHSPLandroidx/compose/ui/layout/Placeable;-><init>()V\nHPLandroidx/compose/ui/layout/Placeable;-><init>()V\nHSPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J\nHPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J\nHSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J\nPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J\nHSPLandroidx/compose/ui/layout/Placeable;->getHeight()I\nHPLandroidx/compose/ui/layout/Placeable;->getHeight()I\nHSPLandroidx/compose/ui/layout/Placeable;->getLastMeasurementConstraints-msEJaDk$ui_release()J\nPLandroidx/compose/ui/layout/Placeable;->getLastMeasurementConstraints-msEJaDk$ui_release()J\nHSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I\nPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I\nHSPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J\nHPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J\nHSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I\nPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I\nHSPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J\nPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J\nHSPLandroidx/compose/ui/layout/Placeable;->getSize-YbymL2g()J\nPLandroidx/compose/ui/layout/Placeable;->getSize-YbymL2g()J\nHSPLandroidx/compose/ui/layout/Placeable;->getWidth()I\nHPLandroidx/compose/ui/layout/Placeable;->getWidth()I\nHSPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V\nHPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V\nHSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V\nPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V\nHSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V\nHPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V\nLandroidx/compose/ui/layout/Placeable$PlacementScope;\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()V\nPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><init>()V\nPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><init>()V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;\nPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection;\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I\nPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates;\nPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates;\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V\nPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>()V\nPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>()V\nHSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z\nHPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z\nLandroidx/compose/ui/layout/PlaceableKt;\nHSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V\nPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V\nHSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J\nPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J\nHSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/ui/layout/Remeasurement;\nLandroidx/compose/ui/layout/RemeasurementModifier;\nLandroidx/compose/ui/layout/RootMeasurePolicy;\nHSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V\nPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V\nHSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V\nPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V\nHSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;\nLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;\nHSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;-><clinit>()V\nPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;-><clinit>()V\nHSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;-><init>(I)V\nPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;-><init>(I)V\nHSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/layout/ScaleFactor;\nHSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V\nPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V\nHSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F\nPLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F\nHSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F\nHPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F\nLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/State;)V\nHPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V\nPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V\nLandroidx/compose/ui/layout/SubcomposeLayoutState;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V\nHPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V\nPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;I)V\nHSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/layout/SubcomposeMeasureScope;\nLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy;\nLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;\nHSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>()V\nHPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>()V\nLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;\nHSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V\nPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V\nHSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z\nPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z\nHSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nLandroidx/compose/ui/modifier/EmptyMap;\nHSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V\nPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V\nHSPLandroidx/compose/ui/modifier/EmptyMap;-><init>()V\nPLandroidx/compose/ui/modifier/EmptyMap;-><init>()V\nHSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z\nPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z\nLandroidx/compose/ui/modifier/ModifierLocal;\nHSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0;\nLandroidx/compose/ui/modifier/ModifierLocalConsumer;\nLandroidx/compose/ui/modifier/ModifierLocalManager;\nHSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V\nPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V\nHSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V\nPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V\nHSPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ProvidableModifierLocal;)V\nPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ProvidableModifierLocal;)V\nHSPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V\nHPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V\nLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;\nHSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;-><init>(Landroidx/compose/ui/modifier/ModifierLocalManager;)V\nPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;-><init>(Landroidx/compose/ui/modifier/ModifierLocalManager;)V\nHSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/modifier/ModifierLocalModifierNode;\nHSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nHPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nHPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nLandroidx/compose/ui/modifier/ModifierLocalProvider;\nLandroidx/compose/ui/modifier/ModifierLocalReadScope;\nLandroidx/compose/ui/modifier/ProvidableModifierLocal;\nHSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/ui/modifier/SingleLocalMap;\nHSPLandroidx/compose/ui/modifier/SingleLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocal;)V\nHPLandroidx/compose/ui/modifier/SingleLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocal;)V\nHSPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z\nPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z\nPLandroidx/compose/ui/modifier/SingleLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/modifier/SingleLocalMap;->set$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;Ljava/lang/Object;)V\nHPLandroidx/compose/ui/modifier/SingleLocalMap;->set$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;Ljava/lang/Object;)V\nLandroidx/compose/ui/node/AlignmentLines;\nHSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V\nHPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V\nHSPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/HashMap;\nPLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/HashMap;\nHSPLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;\nPLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;\nHSPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z\nPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z\nHSPLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/HashMap;\nPLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/HashMap;\nHSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z\nPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z\nHSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z\nHPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z\nHSPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z\nPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z\nHSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V\nHPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V\nHSPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V\nHPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V\nHSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V\nHPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V\nHSPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V\nPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V\nHSPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V\nPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V\nHSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V\nPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V\nHSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V\nPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V\nHSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentLayout$ui_release(Z)V\nPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentLayout$ui_release(Z)V\nHSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V\nPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V\nLandroidx/compose/ui/node/AlignmentLines$recalculate$1;\nHSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;-><init>(Landroidx/compose/ui/node/LookaheadAlignmentLines;)V\nHPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;-><init>(Landroidx/compose/ui/node/LookaheadAlignmentLines;)V\nHSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/node/AlignmentLinesOwner;\nLandroidx/compose/ui/node/BackwardsCompatNode;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element;\nPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/text/StringKt;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V\nPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V\nHPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V\nLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;I)V\nHPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;I)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()V\nHPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$2;->invoke()V\nLandroidx/compose/ui/node/BackwardsCompatNodeKt;\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;-><clinit>()V\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt;-><clinit>()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z\nHPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z\nLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;-><init>()V\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;-><init>()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object;\nLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><clinit>()V\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><clinit>()V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><init>(I)V\nPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><init>(I)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V\nHPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/node/CanFocusChecker;\nHSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V\nPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V\nHSPLandroidx/compose/ui/node/CanFocusChecker;-><init>()V\nPLandroidx/compose/ui/node/CanFocusChecker;-><init>()V\nHSPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z\nPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z\nHSPLandroidx/compose/ui/node/CanFocusChecker;->reset()V\nPLandroidx/compose/ui/node/CanFocusChecker;->reset()V\nHSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V\nPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V\nLandroidx/compose/ui/node/ComposeUiNode;\nHSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V\nPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V\nLandroidx/compose/ui/node/ComposeUiNode$Companion;\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V\nPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><init>()V\nPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><init>()V\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0;\nHPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetCompositeKeyHash()Lkotlin/jvm/functions/Function2;\nHPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetCompositeKeyHash()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2;\nHPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2;\nPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2;\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetResolvedCompositionLocals()Lkotlin/jvm/functions/Function2;\nHPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetResolvedCompositionLocals()Lkotlin/jvm/functions/Function2;\nLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><clinit>()V\nPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><clinit>()V\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><init>(I)V\nPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><init>(I)V\nHSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/node/CompositionLocalConsumerModifierNode;\nLandroidx/compose/ui/node/DelegatableNode;\nLandroidx/compose/ui/node/DelegatableNodeKt;\nHSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/DelegatableNodeKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/DelegatableNodeKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode;\nHPLandroidx/compose/ui/node/DelegatableNodeKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode;\nHSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;\nHPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;\nLandroidx/compose/ui/node/DelegatingNode;\nHSPLandroidx/compose/ui/node/DelegatingNode;-><init>()V\nHPLandroidx/compose/ui/node/DelegatingNode;-><init>()V\nHSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/DelegatingNode;->getDelegate$ui_release()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/node/DelegatingNode;->getDelegate$ui_release()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/DelegatingNode;->getSelfKindSet$ui_release()I\nPLandroidx/compose/ui/node/DelegatingNode;->getSelfKindSet$ui_release()I\nHSPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V\nHPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V\nHSPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V\nHPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V\nHSPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V\nHPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V\nHSPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V\nHPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V\nHSPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nLandroidx/compose/ui/node/DepthSortedSet;\nHSPLandroidx/compose/ui/node/DepthSortedSet;-><init>()V\nPLandroidx/compose/ui/node/DepthSortedSet;-><init>()V\nHSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/DepthSortedSet;->contains(Landroidx/compose/ui/node/LayoutNode;)Z\nHPLandroidx/compose/ui/node/DepthSortedSet;->contains(Landroidx/compose/ui/node/LayoutNode;)Z\nHSPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z\nHPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z\nHSPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode;\nPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z\nHPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z\nLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;\nHSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;-><init>()V\nPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;-><init>()V\nHSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nHPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nLandroidx/compose/ui/node/DrawModifierNode;\nHSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V\nHPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V\nLandroidx/compose/ui/node/GlobalPositionAwareModifierNode;\nLandroidx/compose/ui/node/HitTestResult;\nHSPLandroidx/compose/ui/node/HitTestResult;-><init>()V\nPLandroidx/compose/ui/node/HitTestResult;-><init>()V\nHSPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I\nPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I\nHSPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V\nPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V\nHSPLandroidx/compose/ui/node/HitTestResult;->clear()V\nPLandroidx/compose/ui/node/HitTestResult;->clear()V\nHSPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J\nHPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J\nHSPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z\nPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z\nHSPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Landroidx/compose/ui/Modifier$Node;FZLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Landroidx/compose/ui/Modifier$Node;FZLkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z\nPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z\nHSPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V\nHPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V\nHSPLandroidx/compose/ui/node/HitTestResult;->size()I\nHPLandroidx/compose/ui/node/HitTestResult;->size()I\nLandroidx/compose/ui/node/InnerNodeCoordinator;\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V\nPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I\nHPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/node/TailModifierNode;\nPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/node/TailModifierNode;\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;\nHPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/node/InnerNodeCoordinator$LookaheadDelegateImpl;\nLandroidx/compose/ui/node/IntStack;\nHSPLandroidx/compose/ui/node/IntStack;-><init>(I)V\nHPLandroidx/compose/ui/node/IntStack;-><init>(I)V\nHSPLandroidx/compose/ui/node/IntStack;->get(I)I\nPLandroidx/compose/ui/node/IntStack;->get(I)I\nHSPLandroidx/compose/ui/node/IntStack;->getSize()I\nPLandroidx/compose/ui/node/IntStack;->getSize()I\nHSPLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z\nPLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z\nHSPLandroidx/compose/ui/node/IntStack;->pop()I\nPLandroidx/compose/ui/node/IntStack;->pop()I\nHSPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V\nPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V\nHSPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V\nPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V\nHSPLandroidx/compose/ui/node/IntStack;->sortDiagonals()V\nPLandroidx/compose/ui/node/IntStack;->sortDiagonals()V\nLandroidx/compose/ui/node/IntrinsicsPolicy;\nHSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V\nHPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V\nLandroidx/compose/ui/node/LayerPositionalProperties;\nHSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V\nPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V\nHSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V\nHPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;)V\nHSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/node/LayerPositionalProperties;)V\nHPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/node/LayerPositionalProperties;)V\nHSPLandroidx/compose/ui/node/LayerPositionalProperties;->hasSameValuesAs(Landroidx/compose/ui/node/LayerPositionalProperties;)Z\nHPLandroidx/compose/ui/node/LayerPositionalProperties;->hasSameValuesAs(Landroidx/compose/ui/node/LayerPositionalProperties;)Z\nLandroidx/compose/ui/node/LayoutAwareModifierNode;\nHSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V\nPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V\nLandroidx/compose/ui/node/LayoutModifierNode;\nLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V\nPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V\nPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I\nHPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode;\nPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode;\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator;\nPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;\nHPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V\nPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V\nPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V\nLandroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$7po1rmUuVs6tXeBa5BDq-nmH7XI(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I\nHPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$7po1rmUuVs6tXeBa5BDq-nmH7XI(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I\nHSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V\nPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V\nHSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V\nHPLandroidx/compose/ui/node/LayoutNode;-><init>(IZ)V\nHSPLandroidx/compose/ui/node/LayoutNode;-><init>(IZI)V\nHPLandroidx/compose/ui/node/LayoutNode;-><init>(IZI)V\nHSPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V\nPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V\nHSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V\nHPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V\nHPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V\nHSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z\nPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;\nHPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;\nHSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List;\nHPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List;\nHSPLandroidx/compose/ui/node/LayoutNode;->getCollapsedSemantics$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration;\nHPLandroidx/compose/ui/node/LayoutNode;->getCollapsedSemantics$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration;\nHSPLandroidx/compose/ui/node/LayoutNode;->getCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap;\nPLandroidx/compose/ui/node/LayoutNode;->getCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap;\nHSPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density;\nHPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I\nHPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;\nPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;\nHSPLandroidx/compose/ui/node/LayoutNode;->getHeight()I\nPLandroidx/compose/ui/node/LayoutNode;->getHeight()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator;\nPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator;\nHSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release$enumunboxing$()I\nPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release$enumunboxing$()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;\nHPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;\nHSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z\nHPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release$enumunboxing$()I\nHPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release$enumunboxing$()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z\nPLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z\nHPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;\nPLandroidx/compose/ui/node/LayoutNode;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;\nHSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadRoot$ui_release()Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/node/LayoutNode;->getLookaheadRoot$ui_release()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z\nHPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy;\nPLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy;\nHSPLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z\nPLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain;\nPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain;\nHSPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner;\nPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner;\nHSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I\nPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I\nPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;\nHSPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;\nPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;\nHSPLandroidx/compose/ui/node/LayoutNode;->getWidth()I\nPLandroidx/compose/ui/node/LayoutNode;->getWidth()I\nHSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;\nHPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;\nHPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->invalidateParentData$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->invalidateParentData$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V\nPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V\nHSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z\nHPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z\nHPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z\nHPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z\nHSPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->onRelease()V\nHPLandroidx/compose/ui/node/LayoutNode;->onRelease()V\nHSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->place$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->place$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;)Z\nHPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;)Z\nHSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z\nHPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z\nHSPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V\nPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V\nHSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V\nPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V\nHSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZI)V\nHPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZI)V\nHSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V\nPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V\nHPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V\nHPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release()V\nPLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V\nPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V\nHPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V\nHPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V\nPLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nPLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V\nHPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V\nHSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V\nLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;\nHSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>(I)V\nPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>(I)V\nHSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nHPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;\nHSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><clinit>()V\nPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><clinit>()V\nHSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><init>(I)V\nPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><init>(I)V\nHSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;\nHSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;-><init>()V\nPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;-><init>()V\nLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;\nHSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V\nPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V\nLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;\nHSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V\nPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V\nLandroidx/compose/ui/node/LayoutNode$WhenMappings;\nHSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V\nPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V\nLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;\nHSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V\nHPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V\nLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;\nHSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;-><init>(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;-><init>(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/node/LayoutNodeDrawScope;\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()V\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>()V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawArc-yD3GUKo(JFFJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V\nHPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawDirect-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V\nHPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawDirect-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V\nHPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-NGM6Ib0(JJJFIFLandroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J\nHPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I\nHSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F\nPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F\nLandroidx/compose/ui/node/LayoutNodeKt;\nHSPLandroidx/compose/ui/node/LayoutNodeKt;-><clinit>()V\nPLandroidx/compose/ui/node/LayoutNodeKt;-><clinit>()V\nHSPLandroidx/compose/ui/node/LayoutNodeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/node/LayoutNodeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;\nHPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;\nLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)I\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringModifierPlacement()Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringModifierPlacement()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release$enumunboxing$()I\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release$enumunboxing$()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->invalidateParentData()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->invalidateParentData()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->onCoordinatesUsed()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->onCoordinatesUsed()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V\nLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate;\nLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$checkChildrenPlaceOrderForUpdates(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$checkChildrenPlaceOrderForUpdates(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$clearPlaceOrder(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$clearPlaceOrder(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/HashMap;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/HashMap;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/LookaheadAlignmentLines;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredByParent$ui_release$enumunboxing$()I\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredByParent$ui_release$enumunboxing$()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getPlaceOrder$ui_release()I\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getPlaceOrder$ui_release()I\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getZIndex$ui_release()F\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getZIndex$ui_release()F\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateParentData()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateParentData()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodeDetached()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodeDetached()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildDelegatesDirty$ui_release()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildDelegatesDirty$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setMeasuredByParent$ui_release()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setMeasuredByParent$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setPlaced$ui_release()V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setPlaced$ui_release()V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z\nLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V\nPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JI)V\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V\nHPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V\nLandroidx/compose/ui/node/LookaheadAlignmentLines;\nHSPLandroidx/compose/ui/node/LookaheadAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V\nPLandroidx/compose/ui/node/LookaheadAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;I)V\nHSPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map;\nHPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map;\nHSPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getPositionFor(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/layout/AlignmentLine;)I\nPLandroidx/compose/ui/node/LookaheadAlignmentLines;->getPositionFor(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/layout/AlignmentLine;)I\nLandroidx/compose/ui/node/LookaheadCapablePlaceable;\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;-><init>()V\nHPLandroidx/compose/ui/node/LookaheadCapablePlaceable;-><init>()V\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I\nHPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z\nPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isLookingAhead()Z\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z\nPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z\nHPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V\nHPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V\nHSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V\nPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V\nLandroidx/compose/ui/node/LookaheadDelegate;\nLandroidx/compose/ui/node/MeasureAndLayoutDelegate;\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingMeasureOrLayout()Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingMeasureOrLayout()Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingOnPositionedCallbacks()Z\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingOnPositionedCallbacks()Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V\nLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;-><init>(Landroidx/compose/ui/node/LayoutNode;ZZ)V\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;-><init>(Landroidx/compose/ui/node/LayoutNode;ZZ)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->getNode()Landroidx/compose/ui/node/LayoutNode;\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->getNode()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isForced()Z\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isForced()Z\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isLookahead()Z\nPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;->isLookahead()Z\nLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;-><init>(Z)V\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;-><init>(Z)V\nHSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/node/ModifierNodeElement;\nHSPLandroidx/compose/ui/node/ModifierNodeElement;-><init>()V\nHPLandroidx/compose/ui/node/ModifierNodeElement;-><init>()V\nLandroidx/compose/ui/node/NodeChain;\nHSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/NodeChain;->access$createAndInsertNodeAsChild(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/NodeChain;->access$createAndInsertNodeAsChild(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I\nHPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I\nHSPLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator;\nPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator;\nHSPLandroidx/compose/ui/node/NodeChain;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;\nPLandroidx/compose/ui/node/NodeChain;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeChain;->has$ui_release()Z\nHPLandroidx/compose/ui/node/NodeChain;->has$ui_release()Z\nHSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z\nHPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z\nHSPLandroidx/compose/ui/node/NodeChain;->markAsAttached()V\nHPLandroidx/compose/ui/node/NodeChain;->markAsAttached()V\nHSPLandroidx/compose/ui/node/NodeChain;->markAsDetached$ui_release()V\nPLandroidx/compose/ui/node/NodeChain;->markAsDetached$ui_release()V\nHSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V\nHPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V\nHSPLandroidx/compose/ui/node/NodeChain;->runDetachLifecycle$ui_release()V\nPLandroidx/compose/ui/node/NodeChain;->runDetachLifecycle$ui_release()V\nHSPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;Z)V\nHPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;Z)V\nHSPLandroidx/compose/ui/node/NodeChain;->syncAggregateChildKindSet()V\nHPLandroidx/compose/ui/node/NodeChain;->syncAggregateChildKindSet()V\nHSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V\nHPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V\nHSPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V\nHPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V\nHSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/ui/node/NodeChain$Differ;\nHSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V\nPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V\nHSPLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V\nHPLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V\nHSPLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V\nPLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V\nHSPLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V\nPLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V\nHSPLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/node/NodeChain$Differ;->setOffset(I)V\nPLandroidx/compose/ui/node/NodeChain$Differ;->setOffset(I)V\nHSPLandroidx/compose/ui/node/NodeChain$Differ;->setShouldAttachOnInsert(Z)V\nPLandroidx/compose/ui/node/NodeChain$Differ;->setShouldAttachOnInsert(Z)V\nLandroidx/compose/ui/node/NodeChainKt;\nHSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V\nPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V\nHSPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;\nHPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;\nHSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I\nHPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I\nLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;\nHSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;-><init>()V\nPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;-><init>()V\nLandroidx/compose/ui/node/NodeChainKt$fillVector$1;\nHSPLandroidx/compose/ui/node/NodeChainKt$fillVector$1;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V\nPLandroidx/compose/ui/node/NodeChainKt$fillVector$1;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V\nLandroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V\nPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;\nPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->access$getLayerPositionalProperties$p(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/LayerPositionalProperties;\nPLandroidx/compose/ui/node/NodeCoordinator;->access$getLayerPositionalProperties$p(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/LayerPositionalProperties;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Lorg/acra/file/CrashReportPersister;\nPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Lorg/acra/file/CrashReportPersister;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->access$getTmpLayerPositionalProperties$cp()Landroidx/compose/ui/node/LayerPositionalProperties;\nPLandroidx/compose/ui/node/NodeCoordinator;->access$getTmpLayerPositionalProperties$cp()Landroidx/compose/ui/node/LayerPositionalProperties;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nPLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J\nHPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J\nHPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F\nHPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F\nHSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J\nHPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable;\nPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;\nPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F\nHPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F\nHPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z\nHPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z\nPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J\nPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;\nPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getParentCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getParentCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J\nPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nPLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F\nPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F\nHSPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z\nHPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z\nHSPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z\nHPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z\nHSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z\nHPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z\nHSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;\nHPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J\nHPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J\nPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->localToWindow-MK-Hz9U(J)J\nPLandroidx/compose/ui/node/NodeCoordinator;->localToWindow-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V\nPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutNodeAttach()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutNodeAttach()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->onRelease()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->onRelease()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelfApparentToRealOffset-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/node/NodeCoordinator;->placeSelfApparentToRealOffset-f8xVGno(JFLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V\nHPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z\nHPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z\nHSPLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J\nHPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/node/NodeCoordinator;->touchBoundsInRoot()Landroidx/compose/ui/geometry/Rect;\nHPLandroidx/compose/ui/node/NodeCoordinator;->touchBoundsInRoot()Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock(ZLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock(ZLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters$default(Landroidx/compose/ui/node/NodeCoordinator;)V\nPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters$default(Landroidx/compose/ui/node/NodeCoordinator;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V\nHPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V\nHSPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z\nPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z\nLandroidx/compose/ui/node/NodeCoordinator$HitTestSource;\nLandroidx/compose/ui/node/NodeCoordinator$hit$1;\nHSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHPLandroidx/compose/ui/node/NodeCoordinator$hit$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V\nHSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/node/NodeCoordinator$invoke$1;\nHSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V\nHPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V\nLandroidx/compose/ui/node/NodeKindKt;\nHSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V\nHPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V\nHPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V\nHSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V\nHPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V\nHSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V\nHSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I\nHPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I\nHSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I\nHPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I\nHSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I\nHPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I\nHSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z\nHPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z\nLandroidx/compose/ui/node/ObserverModifierNode;\nLandroidx/compose/ui/node/ObserverNodeOwnerScope;\nHSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><clinit>()V\nPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><clinit>()V\nHSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><init>(Landroidx/compose/ui/node/ObserverModifierNode;)V\nHPLandroidx/compose/ui/node/ObserverNodeOwnerScope;-><init>(Landroidx/compose/ui/node/ObserverModifierNode;)V\nHSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->access$getOnObserveReadsChanged$cp()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->access$getOnObserveReadsChanged$cp()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/ui/node/OnPositionedDispatcher;\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V\nPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V\nHPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher;->isNotEmpty()Z\nPLandroidx/compose/ui/node/OnPositionedDispatcher;->isNotEmpty()Z\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onRootNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/node/OnPositionedDispatcher;->onRootNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V\nLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V\nPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><init>()V\nPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><init>()V\nHSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nHPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nLandroidx/compose/ui/node/OwnedLayer;\nLandroidx/compose/ui/node/Owner;\nHSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V\nPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;)V\nLandroidx/compose/ui/node/Owner$OnLayoutCompletedListener;\nLandroidx/compose/ui/node/OwnerScope;\nLandroidx/compose/ui/node/OwnerSnapshotObserver;\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V\nPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeSemanticsReads$ui_release(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeSemanticsReads$ui_release(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V\nPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V\nPLandroidx/compose/ui/node/OwnerSnapshotObserver;->stopObserving$ui_release()V\nLandroidx/compose/ui/node/ParentDataModifierNode;\nLandroidx/compose/ui/node/PointerInputModifierNode;\nHSPLandroidx/compose/ui/node/PointerInputModifierNode;->interceptOutOfBoundsChildEvents()V\nPLandroidx/compose/ui/node/PointerInputModifierNode;->interceptOutOfBoundsChildEvents()V\nHSPLandroidx/compose/ui/node/PointerInputModifierNode;->sharePointerInputWithSiblings()Z\nPLandroidx/compose/ui/node/PointerInputModifierNode;->sharePointerInputWithSiblings()Z\nLandroidx/compose/ui/node/SemanticsModifierNode;\nHSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldClearDescendantSemantics()Z\nHPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldClearDescendantSemantics()Z\nHSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldMergeDescendantSemantics()Z\nHPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldMergeDescendantSemantics()Z\nLandroidx/compose/ui/node/TailModifierNode;\nHSPLandroidx/compose/ui/node/TailModifierNode;-><init>()V\nHPLandroidx/compose/ui/node/TailModifierNode;-><init>()V\nHSPLandroidx/compose/ui/node/TailModifierNode;->getAttachHasBeenRun()Z\nPLandroidx/compose/ui/node/TailModifierNode;->getAttachHasBeenRun()Z\nHSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V\nHPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V\nHSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V\nHPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V\nLandroidx/compose/ui/node/TreeSet;\nHSPLandroidx/compose/ui/node/TreeSet;-><init>(Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;)V\nPLandroidx/compose/ui/node/TreeSet;-><init>(Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;)V\nLandroidx/compose/ui/node/UiApplier;\nHSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V\nPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V\nHSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V\nPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V\nHSPLandroidx/compose/ui/node/UiApplier;->onClear()V\nPLandroidx/compose/ui/node/UiApplier;->onClear()V\nHSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V\nPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V\nHSPLandroidx/compose/ui/node/UiApplier;->remove(II)V\nPLandroidx/compose/ui/node/UiApplier;->remove(II)V\nLandroidx/compose/ui/platform/AbstractComposeView;\nHSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V\nPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V\nPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V\nPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V\nPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V\nPLandroidx/compose/ui/platform/AbstractComposeView;->disposeComposition()V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V\nPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(IIIIZ)V\nHPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(IIIIZ)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V\nHPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z\nPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V\nPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V\nHPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V\nHPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V\nPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext;\nHPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext;\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V\nPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z\nPLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z\nLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;\nHSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V\nPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V\nHSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/AccessibilityManager;\nLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;\nHSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;-><clinit>()V\nPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;-><init>()V\nPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;-><init>()V\nHSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V\nHPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V\nLandroidx/compose/ui/platform/AndroidAccessibilityManager;\nHSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V\nLandroidx/compose/ui/platform/AndroidClipboardManager;\nHSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V\nLandroidx/compose/ui/platform/AndroidComposeView;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method;\nPLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent;\nPLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class;\nPLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;\nPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->calculatePositionInWindow-MK-Hz9U(J)J\nPLandroidx/compose/ui/platform/AndroidComposeView;->calculatePositionInWindow-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J\nHPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer;\nHPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler;\nHPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/AndroidAutofill;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/AndroidAutofill;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;\nHPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/platform/ViewLayer$Companion;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/platform/ViewLayer$Companion;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManagerImpl;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManagerImpl;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner;\nHPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z\nPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;\nHPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/AndroidTextToolbar;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/AndroidTextToolbar;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;\nHPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfoImpl;\nPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfoImpl;\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I\nHPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J\nHPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZZ)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZZ)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V\nPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J\nHPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I\nHPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V\nHPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V\nLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onGlobalLayout()V\nHPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onGlobalLayout()V\nLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->onTouchModeChanged(Z)V\nPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->onTouchModeChanged(Z)V\nLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V\nPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner;\nHPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner;\nPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner;\nLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V\nPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;I)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nLandroidx/compose/ui/platform/AndroidComposeView$removeAndroidView$1;\nLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()V\nHPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$createNodeInfo(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;I)Landroid/view/accessibility/AccessibilityNodeInfo;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$createNodeInfo(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;I)Landroid/view/accessibility/AccessibilityNodeInfo;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroid/os/Handler;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getSemanticsChangeChecker$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda5;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes$ui_release()Ljava/util/Map;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes$ui_release()Ljava/util/Map;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoStateDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoStateDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoText(Landroidx/compose/ui/semantics/SemanticsNode;)Landroid/text/SpannableString;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoText(Landroidx/compose/ui/semantics/SemanticsNode;)Landroid/text/SpannableString;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isScreenReaderFocusable(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isScreenReaderFocusable(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStart(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onStop(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentCaptureSession$ui_release(Landroidx/core/view/contentcapture/ContentCaptureSessionCompat;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentCaptureSession$ui_release(Landroidx/core/view/contentcapture/ContentCaptureSessionCompat;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->addPageActions(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->addPageActions(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo;\nHPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo;\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V\nLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><init>()V\nPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><init>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V\nLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;\nHSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><init>()V\nPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><init>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V\nPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V\nLandroidx/compose/ui/platform/AndroidComposeView_androidKt;\nHSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection;\nPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getPlatformTextInputServiceInterceptor()Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getPlatformTextInputServiceInterceptor()Lkotlin/jvm/functions/Function1;\nLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalImageVectorCache()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalImageVectorCache()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalLifecycleOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalLifecycleOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalSavedStateRegistryOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalSavedStateRegistryOwner()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V\nLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V\nLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;\nHSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V\nPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->onTrimMemory(I)V\nLandroidx/compose/ui/platform/AndroidTextToolbar;\nHSPLandroidx/compose/ui/platform/AndroidTextToolbar;-><init>(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/AndroidTextToolbar;-><init>(Landroid/view/View;)V\nLandroidx/compose/ui/platform/AndroidUiDispatcher;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler;\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy;\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List;\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V\nHPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nHPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer;\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/ui/platform/AndroidUiFrameClock;\nPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/ui/platform/AndroidUiFrameClock;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V\nHPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V\nLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;-><init>()V\nPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;-><init>()V\nLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V\nHPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V\nHSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V\nHPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V\nLandroidx/compose/ui/platform/AndroidUiFrameClock;\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V\nHPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V\nLandroidx/compose/ui/platform/AndroidUriHandler;\nHSPLandroidx/compose/ui/platform/AndroidUriHandler;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/ui/platform/AndroidUriHandler;-><init>(Landroid/content/Context;)V\nLandroidx/compose/ui/platform/AndroidViewConfiguration;\nHSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V\nPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V\nPLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F\nLandroidx/compose/ui/platform/AndroidViewsHandler;\nHSPLandroidx/compose/ui/platform/AndroidViewsHandler;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/ui/platform/AndroidViewsHandler;-><init>(Landroid/content/Context;)V\nHSPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap;\nHPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap;\nHSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V\nPLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V\nHSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V\nHPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V\nHSPLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V\nPLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V\nLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)I\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$10(Landroid/graphics/RenderNode;F)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$10(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;I)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;I)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;F)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V\nHPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V\nHSPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V\nPLandroidx/compose/ui/platform/Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V\nLandroidx/compose/ui/platform/CalculateMatrixToWindow;\nLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;\nHSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V\nPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V\nHSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V\nHPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V\nLandroidx/compose/ui/platform/ClipboardManager;\nLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;\nHSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V\nPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V\nLandroidx/compose/ui/platform/ComposeView;\nHSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V\nPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V\nHSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V\nPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence;\nPLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence;\nHSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z\nPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z\nHSPLandroidx/compose/ui/platform/ComposeView;->setContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLandroidx/compose/ui/platform/ComposeView;->setContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nLandroidx/compose/ui/platform/ComposeView$Content$1;\nHSPLandroidx/compose/ui/platform/ComposeView$Content$1;-><init>(Landroidx/compose/ui/platform/ComposeView;I)V\nPLandroidx/compose/ui/platform/ComposeView$Content$1;-><init>(Landroidx/compose/ui/platform/ComposeView;I)V\nLandroidx/compose/ui/platform/CompositionLocalsKt;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V\nPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAccessibilityManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAccessibilityManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalHapticFeedback()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalHapticFeedback()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalUriHandler()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalUriHandler()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><clinit>()V\nPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><clinit>()V\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><init>(I)V\nPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><init>(I)V\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;-><init>(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;II)V\nPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;-><init>(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;II)V\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;\nHSPLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;-><init>(Landroidx/compose/ui/text/input/TextInputService;)V\nPLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;-><init>(Landroidx/compose/ui/text/input/TextInputService;)V\nLandroidx/compose/ui/platform/DeviceRenderNode;\nLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;\nHSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->dispose()V\nHSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;\nLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;\nHSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;\nHSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V\nPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V\nHPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->saveState()Landroid/os/Bundle;\nLandroidx/compose/ui/platform/GlobalSnapshotManager;\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V\nPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V\nPLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V\nLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/InfiniteAnimationPolicy;\nHSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy;-><clinit>()V\nPLandroidx/compose/ui/platform/InfiniteAnimationPolicy;-><clinit>()V\nLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;\nHSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;-><clinit>()V\nPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;-><clinit>()V\nHSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;-><init>()V\nPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;-><init>()V\nLandroidx/compose/ui/platform/InspectableModifier;\nHSPLandroidx/compose/ui/platform/InspectableModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/platform/InspectableModifier;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End;\nPLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End;\nLandroidx/compose/ui/platform/InspectableModifier$End;\nHSPLandroidx/compose/ui/platform/InspectableModifier$End;-><init>()V\nHPLandroidx/compose/ui/platform/InspectableModifier$End;-><init>()V\nLandroidx/compose/ui/platform/InspectableValueKt;\nHSPLandroidx/compose/ui/platform/InspectableValueKt;-><clinit>()V\nPLandroidx/compose/ui/platform/InspectableValueKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1;\nHPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;\nHSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><clinit>()V\nPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><clinit>()V\nHSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><init>(I)V\nPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><init>(I)V\nHSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean;\nHPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean;\nHSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/InspectorValueInfo;\nHSPLandroidx/compose/ui/platform/InspectorValueInfo;-><init>(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/platform/InspectorValueInfo;-><init>(Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/platform/LayerMatrixCache;\nHSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F\nHPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F\nHSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F\nHPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F\nHSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V\nPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V\nLandroidx/compose/ui/platform/MotionDurationScaleImpl;\nHSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V\nPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V\nHSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F\nPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F\nHSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V\nPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V\nLandroidx/compose/ui/platform/OutlineResolver;\nHSPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V\nHPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;\nHPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;\nHSPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z\nPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z\nHSPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z\nPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z\nHSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z\nHPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z\nHSPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V\nPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V\nHSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V\nHPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V\nLandroidx/compose/ui/platform/RenderNodeApi29;\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>()V\nPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>()V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V\nPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z\nPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V\nPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I\nPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V\nPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V\nPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/runtime/Stack;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/runtime/Stack;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z\nPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z\nPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V\nHSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V\nHPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V\nLandroidx/compose/ui/platform/RenderNodeLayer;\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;-><clinit>()V\nPLandroidx/compose/ui/platform/RenderNodeLayer;-><clinit>()V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V\nPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V\nHSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V\nHPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V\nLandroidx/compose/ui/platform/ScrollObservationScope;\nLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;\nHSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V\nPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V\nHSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getAdjustedBounds()Landroid/graphics/Rect;\nHPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getAdjustedBounds()Landroid/graphics/Rect;\nHSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;\nHPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;\nLandroidx/compose/ui/platform/UriHandler;\nLandroidx/compose/ui/platform/ViewCompositionStrategy;\nLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V\nPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V\nLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V\nPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V\nLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;-><clinit>()V\nPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->access$isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Region;)V\nHPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Region;)V\nHSPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap(Landroidx/compose/ui/semantics/SemanticsOwner;)Ljava/util/LinkedHashMap;\nHPLandroidx/compose/ui/platform/ViewCompositionStrategy_androidKt;->getAllUncoveredSemanticsNodesToMap(Landroidx/compose/ui/semantics/SemanticsOwner;)Ljava/util/LinkedHashMap;\nLandroidx/compose/ui/platform/ViewConfiguration;\nHSPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J\nHPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J\nLandroidx/compose/ui/platform/ViewLayer;\nHSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V\nPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V\nHSPLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z\nPLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z\nLandroidx/compose/ui/platform/ViewLayer$Companion;\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion;-><clinit>()V\nPLandroidx/compose/ui/platform/ViewLayer$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion;-><init>()V\nPLandroidx/compose/ui/platform/ViewLayer$Companion;-><init>()V\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion;->access$getIsShowingLayoutBounds()Z\nPLandroidx/compose/ui/platform/ViewLayer$Companion;->access$getIsShowingLayoutBounds()Z\nLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;-><init>()V\nPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;-><init>()V\nLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;-><clinit>()V\nPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;-><clinit>()V\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;-><init>(I)V\nPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;-><init>(I)V\nHSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WeakCache;\nHSPLandroidx/compose/ui/platform/WeakCache;-><init>()V\nPLandroidx/compose/ui/platform/WeakCache;-><init>()V\nHSPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object;\nHPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V\nHPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V\nLandroidx/compose/ui/platform/WindowInfoImpl;\nHSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V\nPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V\nHSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V\nPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V\nHSPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V\nPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V\nHSPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V\nPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V\nLandroidx/compose/ui/platform/WindowRecomposerFactory;\nHSPLandroidx/compose/ui/platform/WindowRecomposerFactory;-><clinit>()V\nPLandroidx/compose/ui/platform/WindowRecomposerFactory;-><clinit>()V\nLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><clinit>()V\nPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><clinit>()V\nHSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><init>()V\nPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><init>()V\nLandroidx/compose/ui/platform/WindowRecomposerPolicy;\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;\nHPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;\nLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;-><init>(Lkotlinx/coroutines/Job;)V\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;-><init>(Lkotlinx/coroutines/Job;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V\nLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;-><init>(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;-><init>(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;\nHSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;-><init>(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V\nPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;-><init>(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V\nLandroidx/compose/ui/platform/WrappedComposition;\nHSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V\nPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V\nHSPLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle;\nPLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle;\nHSPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z\nPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z\nHSPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V\nPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V\nHSPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/platform/WrappedComposition;->dispose()V\nHSPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition;\nPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition;\nHSPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView;\nPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView;\nHSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V\nLandroidx/compose/ui/platform/WrappedComposition$setContent$1;\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)V\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;I)V\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;\nHSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V\nPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V\nHSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><init>()V\nPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><init>()V\nHSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V\nHPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V\nLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;\nHSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V\nPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V\nHSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><init>()V\nPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><init>()V\nHSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;\nPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;\nLandroidx/compose/ui/platform/Wrapper_androidKt;\nHSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V\nPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;\nPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition;\nLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;\nHSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/ArrayList;)Z\nHPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/ArrayList;)Z\nHSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z\nHSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nHPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nHSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nHPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V\nLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;\nHSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;-><clinit>()V\nPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;-><clinit>()V\nHSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;-><init>(I)V\nPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;-><init>(I)V\nLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;\nHSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;-><init>(Lkotlin/jvm/functions/Function0;)V\nLandroidx/compose/ui/res/ImageVectorCache;\nHSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V\nPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V\nPLandroidx/compose/ui/res/ImageVectorCache;->clear()V\nHSPLandroidx/compose/ui/res/ImageVectorCache;->get(Landroidx/compose/ui/res/ImageVectorCache$Key;)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;\nPLandroidx/compose/ui/res/ImageVectorCache;->get(Landroidx/compose/ui/res/ImageVectorCache$Key;)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;\nHSPLandroidx/compose/ui/res/ImageVectorCache;->set(Landroidx/compose/ui/res/ImageVectorCache$Key;Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;)V\nPLandroidx/compose/ui/res/ImageVectorCache;->set(Landroidx/compose/ui/res/ImageVectorCache$Key;Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;)V\nLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;\nHSPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;I)V\nPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;I)V\nHSPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->getImageVector()Landroidx/compose/ui/graphics/vector/ImageVector;\nLandroidx/compose/ui/res/ImageVectorCache$Key;\nHSPLandroidx/compose/ui/res/ImageVectorCache$Key;-><init>(ILandroid/content/res/Resources$Theme;)V\nPLandroidx/compose/ui/res/ImageVectorCache$Key;-><init>(ILandroid/content/res/Resources$Theme;)V\nHSPLandroidx/compose/ui/res/ImageVectorCache$Key;->hashCode()I\nPLandroidx/compose/ui/res/ImageVectorCache$Key;->hashCode()I\nLandroidx/compose/ui/semantics/AccessibilityAction;\nHSPLandroidx/compose/ui/semantics/AccessibilityAction;-><init>(Ljava/lang/String;Lkotlin/Function;)V\nHPLandroidx/compose/ui/semantics/AccessibilityAction;-><init>(Ljava/lang/String;Lkotlin/Function;)V\nHSPLandroidx/compose/ui/semantics/AccessibilityAction;->getLabel()Ljava/lang/String;\nHPLandroidx/compose/ui/semantics/AccessibilityAction;->getLabel()Ljava/lang/String;\nLandroidx/compose/ui/semantics/AppendedSemanticsElement;\nHSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;-><init>(ZLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/semantics/AppendedSemanticsElement;-><init>(ZLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V\nLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;\nHSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;\nHSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/semantics/CollectionInfo;\nHSPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V\nPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V\nPLandroidx/compose/ui/semantics/CollectionInfo;->getColumnCount()I\nPLandroidx/compose/ui/semantics/CollectionInfo;->getRowCount()I\nLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;\nHSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;-><init>(ZZLkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;-><init>(ZZLkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldClearDescendantSemantics()Z\nHPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldClearDescendantSemantics()Z\nHSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldMergeDescendantSemantics()Z\nHPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldMergeDescendantSemantics()Z\nHSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setMergeDescendants(Z)V\nPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setMergeDescendants(Z)V\nHSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setProperties(Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setProperties(Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/semantics/CustomAccessibilityAction;\nLandroidx/compose/ui/semantics/EmptySemanticsElement;\nHSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><clinit>()V\nPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><init>()V\nPLandroidx/compose/ui/semantics/EmptySemanticsElement;-><init>()V\nHSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;\nPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node;\nLandroidx/compose/ui/semantics/EmptySemanticsModifier;\nHSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;-><init>()V\nPLandroidx/compose/ui/semantics/EmptySemanticsModifier;-><init>()V\nHSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->applySemantics(Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nLandroidx/compose/ui/semantics/LiveRegionMode;\nLandroidx/compose/ui/semantics/ProgressBarRangeInfo;\nLandroidx/compose/ui/semantics/Role;\nHSPLandroidx/compose/ui/semantics/Role;-><init>(I)V\nHPLandroidx/compose/ui/semantics/Role;-><init>(I)V\nHSPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role;\nHPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role;\nHSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/semantics/Role;->unbox-impl()I\nHPLandroidx/compose/ui/semantics/Role;->unbox-impl()I\nLandroidx/compose/ui/semantics/ScrollAxisRange;\nHSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V\nPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V\nHSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getMaxValue()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/ui/semantics/ScrollAxisRange;->getMaxValue()Lkotlin/jvm/functions/Function0;\nHSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getValue()Lkotlin/jvm/functions/Function0;\nPLandroidx/compose/ui/semantics/ScrollAxisRange;->getValue()Lkotlin/jvm/functions/Function0;\nLandroidx/compose/ui/semantics/SemanticsActions;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsActions;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getClearTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getClearTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getCollapse()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getCollapse()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getCopyText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getCopyText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getCutText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getCutText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getExpand()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getExpand()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getOnImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnLongClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getOnLongClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageDown()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getPageDown()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageLeft()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getPageLeft()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageRight()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getPageRight()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageUp()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getPageUp()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getPasteText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getPasteText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetProgress()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getSetProgress()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetSelection()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getSetSelection()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsActions;->getSetText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getSetTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsActions;->getShowTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsActions;->getShowTextSubstitution()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nLandroidx/compose/ui/semantics/SemanticsConfiguration;\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V\nHPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z\nHPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;\nHPLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElse(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElse(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nHPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z\nPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isMergingSemanticsOfDescendants()Z\nHPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isMergingSemanticsOfDescendants()Z\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V\nHPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V\nPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V\nHSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V\nPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V\nLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;\nHSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;-><init>()V\nPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;-><init>()V\nLandroidx/compose/ui/semantics/SemanticsModifier;\nLandroidx/compose/ui/semantics/SemanticsModifierKt;\nHSPLandroidx/compose/ui/semantics/SemanticsModifierKt;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsModifierKt;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->generateSemanticsId()I\nHPLandroidx/compose/ui/semantics/SemanticsModifierKt;->generateSemanticsId()I\nHSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nHPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;\nLandroidx/compose/ui/semantics/SemanticsNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V\nHPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/ArrayList;)V\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getId()I\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getId()I\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutInfo()Landroidx/compose/ui/node/LayoutNode;\nPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutInfo()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutNode$ui_release()Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutNode$ui_release()Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getTouchBoundsInRoot()Landroidx/compose/ui/geometry/Rect;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getTouchBoundsInRoot()Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration;\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->isFake$ui_release()Z\nHPLandroidx/compose/ui/semantics/SemanticsNode;->isFake$ui_release()Z\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z\nPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->isUnmergedLeafNode$ui_release()Z\nHPLandroidx/compose/ui/semantics/SemanticsNode;->isUnmergedLeafNode$ui_release()Z\nHSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List;\nHPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List;\nLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;\nHSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;\nHSPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLandroidx/compose/ui/semantics/SemanticsNode$parent$1;\nHSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;-><init>(I)V\nPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;-><init>(I)V\nHSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean;\nHPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean;\nHSPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/semantics/SemanticsNode$parent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/semantics/SemanticsNodeKt;\nHSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->SemanticsNode(Landroidx/compose/ui/node/LayoutNode;Z)Landroidx/compose/ui/semantics/SemanticsNode;\nHPLandroidx/compose/ui/semantics/SemanticsNodeKt;->SemanticsNode(Landroidx/compose/ui/node/LayoutNode;Z)Landroidx/compose/ui/semantics/SemanticsNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode;\nHPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode;\nHSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;\nHPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode;\nHPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode;\nLandroidx/compose/ui/semantics/SemanticsOwner;\nHSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;\nHPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;\nLandroidx/compose/ui/semantics/SemanticsProperties;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getDisabled()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getDisabled()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getError()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getError()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHeading()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getHeading()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getInvisibleToUser()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getInvisibleToUser()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsTraversalGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsTraversalGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPassword()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getPassword()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelectableGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelectableGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nPLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nHPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;\nLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;\nLandroidx/compose/ui/semantics/SemanticsPropertiesKt;\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsConfiguration;Z)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsConfiguration;Z)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelected(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelected(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTraversalGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTraversalGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V\nLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><init>()V\nPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><init>()V\nLandroidx/compose/ui/semantics/SemanticsPropertyKey;\nHSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/Object;)V\nHPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/Object;)V\nLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;\nHSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><clinit>()V\nPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><clinit>()V\nHSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><init>(I)V\nPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><init>(I)V\nLandroidx/compose/ui/semantics/SemanticsPropertyReceiver;\nLandroidx/compose/ui/state/ToggleableState;\nLandroidx/compose/ui/text/AndroidParagraph;\nHSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V\nHPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V\nHSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;\nHPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;\nHSPLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z\nPLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z\nHSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F\nPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F\nHSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F\nPLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F\nHSPLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I\nPLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I\nHSPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;\nHPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;\nHSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F\nHPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F\nHSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V\nHPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V\nHSPLandroidx/compose/ui/text/AndroidParagraph;->paint-LG529CI(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;I)V\nHPLandroidx/compose/ui/text/AndroidParagraph;->paint-LG529CI(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;I)V\nLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;\nHSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;-><init>(Ljava/lang/Object;I)V\nHPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/ui/text/AnnotatedString;\nHSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/ArrayList;I)V\nPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/ArrayList;I)V\nHSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V\nHPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V\nHSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List;\nPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List;\nHSPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String;\nPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String;\nHSPLandroidx/compose/ui/text/AnnotatedString;->getTtsAnnotations(I)Ljava/util/List;\nHPLandroidx/compose/ui/text/AnnotatedString;->getTtsAnnotations(I)Ljava/util/List;\nHSPLandroidx/compose/ui/text/AnnotatedString;->getUrlAnnotations(I)Ljava/util/List;\nHPLandroidx/compose/ui/text/AnnotatedString;->getUrlAnnotations(I)Ljava/util/List;\nHSPLandroidx/compose/ui/text/AnnotatedString;->length()I\nHPLandroidx/compose/ui/text/AnnotatedString;->length()I\nLandroidx/compose/ui/text/AnnotatedString$Range;\nLandroidx/compose/ui/text/ParagraphIntrinsics;\nLandroidx/compose/ui/text/ParagraphStyle;\nHSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V\nHPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V\nHSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens;\nPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphensOrDefault-vmbZdU8$ui_text_release()I\nPLandroidx/compose/ui/text/ParagraphStyle;->getHyphensOrDefault-vmbZdU8$ui_text_release()I\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;\nPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreakOrDefault-rAG3T2k$ui_text_release()I\nPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreakOrDefault-rAG3T2k$ui_text_release()I\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J\nPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;\nPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle;\nPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;\nPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlignOrDefault-e0LSkKk$ui_text_release()I\nPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlignOrDefault-e0LSkKk$ui_text_release()I\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;\nPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;\nPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;\nPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;\nHSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;\nHPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;\nLandroidx/compose/ui/text/ParagraphStyleKt;\nHSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V\nPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/ParagraphStyleKt;->fastMerge-HtYhynw(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)Landroidx/compose/ui/text/ParagraphStyle;\nHPLandroidx/compose/ui/text/ParagraphStyleKt;->fastMerge-HtYhynw(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)Landroidx/compose/ui/text/ParagraphStyle;\nHSPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle;\nHPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle;\nLandroidx/compose/ui/text/PlatformParagraphStyle;\nHSPLandroidx/compose/ui/text/PlatformParagraphStyle;-><clinit>()V\nPLandroidx/compose/ui/text/PlatformParagraphStyle;-><clinit>()V\nHSPLandroidx/compose/ui/text/PlatformParagraphStyle;-><init>()V\nPLandroidx/compose/ui/text/PlatformParagraphStyle;-><init>()V\nHSPLandroidx/compose/ui/text/PlatformParagraphStyle;-><init>(ZI)V\nPLandroidx/compose/ui/text/PlatformParagraphStyle;-><init>(ZI)V\nLandroidx/compose/ui/text/PlatformTextStyle;\nHSPLandroidx/compose/ui/text/PlatformTextStyle;-><init>()V\nPLandroidx/compose/ui/text/PlatformTextStyle;-><init>()V\nHSPLandroidx/compose/ui/text/PlatformTextStyle;-><init>(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)V\nPLandroidx/compose/ui/text/PlatformTextStyle;-><init>(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)V\nHSPLandroidx/compose/ui/text/PlatformTextStyle;->getParagraphStyle()Landroidx/compose/ui/text/PlatformParagraphStyle;\nPLandroidx/compose/ui/text/PlatformTextStyle;->getParagraphStyle()Landroidx/compose/ui/text/PlatformParagraphStyle;\nHSPLandroidx/compose/ui/text/PlatformTextStyle;->getSpanStyle()Landroidx/compose/ui/text/PlatformSpanStyle;\nPLandroidx/compose/ui/text/PlatformTextStyle;->getSpanStyle()Landroidx/compose/ui/text/PlatformSpanStyle;\nLandroidx/compose/ui/text/SpanStyle;\nHSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;I)V\nHPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;I)V\nHSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V\nHPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V\nHSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V\nHPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V\nHSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F\nHPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F\nHSPLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J\nPLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J\nHSPLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift;\nPLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift;\nHSPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J\nHPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J\nHSPLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle;\nPLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle;\nHSPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nHPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nHSPLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String;\nPLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String;\nHSPLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J\nPLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J\nHSPLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;\nPLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;\nHSPLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;\nPLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;\nHSPLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;\nPLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;\nHSPLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J\nPLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J\nHSPLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;\nPLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;\nHSPLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle;\nPLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle;\nHSPLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow;\nPLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow;\nHSPLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;\nPLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;\nHSPLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle;\nPLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle;\nHSPLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform;\nPLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform;\nHSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z\nHPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z\nHSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z\nHPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z\nHSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;\nHPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;\nLandroidx/compose/ui/text/SpanStyleKt;\nHSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()V\nPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/SpanStyleKt;->fastMerge-dSHsh3o(Landroidx/compose/ui/text/SpanStyle;JLandroidx/compose/ui/graphics/Brush;FJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/text/SpanStyle;\nHPLandroidx/compose/ui/text/SpanStyleKt;->fastMerge-dSHsh3o(Landroidx/compose/ui/text/SpanStyle;JLandroidx/compose/ui/graphics/Brush;FJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/text/SpanStyle;\nHSPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;\nHPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;\nLandroidx/compose/ui/text/StringKt;\nHSPLandroidx/compose/ui/text/StringKt;-><init>()V\nHPLandroidx/compose/ui/text/StringKt;-><init>()V\nHSPLandroidx/compose/ui/text/StringKt;->checkElementIndex$runtime_release(II)V\nPLandroidx/compose/ui/text/StringKt;->checkElementIndex$runtime_release(II)V\nPLandroidx/compose/ui/text/StringKt;->getExplore()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/text/StringKt;->getFilterList()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getFilterList()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/text/StringKt;->getHelpOutline()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getHelpOutline()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/text/StringKt;->getInfo()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getInfo()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getPalette()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/text/StringKt;->getRefresh()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getRefresh()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/text/StringKt;->getSearch()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getSearch()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/compose/ui/text/StringKt;->getSettings()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getSettings()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/compose/ui/text/StringKt;->getSync()Landroidx/compose/ui/graphics/vector/ImageVector;\nLandroidx/compose/ui/text/TextRange;\nHSPLandroidx/compose/ui/text/TextRange;-><clinit>()V\nPLandroidx/compose/ui/text/TextRange;-><clinit>()V\nHSPLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J\nPLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J\nHSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I\nPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I\nLandroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V\nPLandroidx/compose/ui/text/TextStyle;-><clinit>()V\nHSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;JI)V\nHPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;JI)V\nHSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V\nHPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V\nHSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V\nHPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V\nHSPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow$default(IJJJJLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/graphics/drawscope/Stroke;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/TextAlign;)Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow$default(IJJJJLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/graphics/drawscope/Stroke;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/TextAlign;)Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/TextStyle;->getAlpha()F\nPLandroidx/compose/ui/text/TextStyle;->getAlpha()F\nHSPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;\nPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J\nHPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J\nHSPLandroidx/compose/ui/text/TextStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle;\nPLandroidx/compose/ui/text/TextStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nHPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nHSPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;\nHPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;\nHPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;\nHSPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;\nHPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;\nHSPLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J\nPLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J\nHSPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;\nPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;\nHSPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J\nPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J\nHSPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;\nPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;\nHPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;\nHSPLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle;\nPLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle;\nHPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow;\nPLandroidx/compose/ui/text/TextStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow;\nHSPLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle;\nPLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;\nPLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;\nHSPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;\nPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;\nHSPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;\nHPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;\nHSPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;\nPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;\nHSPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;\nHPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;\nHSPLandroidx/compose/ui/text/TextStyle;->hasSameDrawAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z\nHPLandroidx/compose/ui/text/TextStyle;->hasSameDrawAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z\nHSPLandroidx/compose/ui/text/TextStyle;->hasSameLayoutAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z\nHPLandroidx/compose/ui/text/TextStyle;->hasSameLayoutAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z\nHSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;\nHPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle;\nHPLandroidx/compose/ui/text/TextStyle;->merge-Z1GrekI$default(IJJJJLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDecoration;)Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle;\nPLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle;\nLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;\nHSPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;\nHPLandroidx/compose/ui/text/android/BoringLayoutFactoryDefault;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;\nLandroidx/compose/ui/text/android/LayoutCompatKt;\nHSPLandroidx/compose/ui/text/android/LayoutCompatKt;-><clinit>()V\nPLandroidx/compose/ui/text/android/LayoutCompatKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/android/LayoutCompatKt;->create(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout;\nHPLandroidx/compose/ui/text/android/LayoutCompatKt;->create(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout;\nLandroidx/compose/ui/text/android/LayoutIntrinsics;\nHSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;I)V\nHPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;I)V\nHSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics;\nHPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics;\nHSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F\nHPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F\nLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V\nHPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)V\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode;\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/RenderNode;\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()V\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()V\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)F\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I\nHPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas;\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas;\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z\nHPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V\nHPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)V\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V\nHPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V\nHPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)V\nHSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;\nPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map;\nLandroidx/compose/ui/text/android/StaticLayoutFactory23;\nHSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;-><init>()V\nPLandroidx/compose/ui/text/android/StaticLayoutFactory23;-><init>()V\nHSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;\nHPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;\nLandroidx/compose/ui/text/android/StaticLayoutFactory26;\nHSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V\nPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V\nLandroidx/compose/ui/text/android/StaticLayoutFactory28;\nHSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V\nPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V\nLandroidx/compose/ui/text/android/StaticLayoutFactory33;\nLandroidx/compose/ui/text/android/StaticLayoutFactoryImpl;\nLandroidx/compose/ui/text/android/StaticLayoutParams;\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V\nHPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment;\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment;\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt;\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt;\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint;\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint;\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence;\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence;\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic;\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic;\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z\nHSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I\nPLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I\nLandroidx/compose/ui/text/android/TextAlignmentAdapter;\nHSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()V\nPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()V\nHSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment;\nPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment;\nLandroidx/compose/ui/text/android/TextAndroidCanvas;\nHSPLandroidx/compose/ui/text/android/TextAndroidCanvas;-><init>()V\nPLandroidx/compose/ui/text/android/TextAndroidCanvas;-><init>()V\nHSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V\nHPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V\nHSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z\nHPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z\nHSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V\nPLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V\nLandroidx/compose/ui/text/android/TextLayout;\nHSPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V\nHPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IZIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V\nHSPLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z\nPLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z\nHSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I\nHPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I\nHSPLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z\nPLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z\nHSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F\nPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F\nHSPLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I\nPLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I\nHSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;\nHPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;\nHSPLandroidx/compose/ui/text/android/TextLayout;->isFallbackLinespacingApplied$ui_text_release()Z\nHPLandroidx/compose/ui/text/android/TextLayout;->isFallbackLinespacingApplied$ui_text_release()Z\nHSPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V\nHPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V\nLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;\nHSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;-><init>(Landroidx/compose/ui/text/android/TextLayout;)V\nHPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;-><init>(Landroidx/compose/ui/text/android/TextLayout;)V\nLandroidx/compose/ui/text/android/TextLayoutKt;\nHSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V\nPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings([Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J\nHPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings([Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J\nHSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getSharedTextAndroidCanvas$p()Landroidx/compose/ui/text/android/TextAndroidCanvas;\nPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getSharedTextAndroidCanvas$p()Landroidx/compose/ui/text/android/TextAndroidCanvas;\nHSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J\nHPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J\nHSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;\nHPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;\nLandroidx/compose/ui/text/android/style/LetterSpacingSpanEm;\nLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;\nLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;\nHSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;-><init>(FIZZF)V\nHPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;-><init>(FIZZF)V\nHSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V\nHPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V\nHSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getFirstAscentDiff()I\nPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getFirstAscentDiff()I\nHSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getLastDescentDiff()I\nPLandroidx/compose/ui/text/android/style/LineHeightStyleSpan;->getLastDescentDiff()I\nLandroidx/compose/ui/text/android/style/PlaceholderSpan;\nLandroidx/compose/ui/text/android/style/SkewXSpan;\nLandroidx/compose/ui/text/caches/ContainerHelpersKt;\nHSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;-><clinit>()V\nPLandroidx/compose/ui/text/caches/ContainerHelpersKt;-><clinit>()V\nLandroidx/compose/ui/text/caches/LruCache;\nHSPLandroidx/compose/ui/text/caches/LruCache;-><init>()V\nPLandroidx/compose/ui/text/caches/LruCache;-><init>()V\nHSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/compose/ui/text/caches/LruCache;->size()I\nPLandroidx/compose/ui/text/caches/LruCache;->size()I\nLandroidx/compose/ui/text/caches/SimpleArrayMap;\nHSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>()V\nPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>()V\nLandroidx/compose/ui/text/font/AndroidFontLoader;\nHSPLandroidx/compose/ui/text/font/AndroidFontLoader;-><init>(Landroid/content/Context;)V\nPLandroidx/compose/ui/text/font/AndroidFontLoader;-><init>(Landroid/content/Context;)V\nLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;\nHSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V\nPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V\nHSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;\nPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;\nLandroidx/compose/ui/text/font/AsyncTypefaceCache;\nHSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V\nPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V\nLandroidx/compose/ui/text/font/DefaultFontFamily;\nHSPLandroidx/compose/ui/text/font/DefaultFontFamily;-><init>()V\nPLandroidx/compose/ui/text/font/DefaultFontFamily;-><init>()V\nLandroidx/compose/ui/text/font/FileBasedFontFamily;\nLandroidx/compose/ui/text/font/FontFamily;\nHSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V\nPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V\nHSPLandroidx/compose/ui/text/font/FontFamily;-><init>()V\nPLandroidx/compose/ui/text/font/FontFamily;-><init>()V\nHSPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily;\nPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily;\nLandroidx/compose/ui/text/font/FontFamilyResolverImpl;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/text/font/AndroidFontLoader;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V\nPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/text/font/AndroidFontLoader;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1;\nPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;\nPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/runtime/Stack;\nPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/runtime/Stack;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/AndroidFontLoader;\nPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/AndroidFontLoader;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;\nHPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult;\nLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;-><init>(Ljava/lang/Object;Landroidx/compose/ui/text/font/TypefaceRequest;I)V\nHPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;-><init>(Ljava/lang/Object;Landroidx/compose/ui/text/font/TypefaceRequest;I)V\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/text/font/FontFamilyResolverKt;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V\nPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache;\nPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache;\nHSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache;\nPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache;\nLandroidx/compose/ui/text/font/FontKt;\nHSPLandroidx/compose/ui/text/font/FontKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces;\nPLandroidx/compose/ui/text/font/FontKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces;\nHSPLandroidx/compose/ui/text/font/FontKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl;\nPLandroidx/compose/ui/text/font/FontKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamilyResolverImpl;\nLandroidx/compose/ui/text/font/FontListFontFamily;\nLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;\nHSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V\nPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V\nHSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V\nPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V\nHSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AndroidFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;\nPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AndroidFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;\nLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;\nHSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V\nPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V\nLandroidx/compose/ui/text/font/FontStyle;\nHSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V\nHPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V\nHSPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle;\nHPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle;\nHSPLandroidx/compose/ui/text/font/FontStyle;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/font/FontStyle;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I\nPLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I\nLandroidx/compose/ui/text/font/FontStyle$Companion;\nHSPLandroidx/compose/ui/text/font/FontStyle$Companion;-><init>()V\nPLandroidx/compose/ui/text/font/FontStyle$Companion;-><init>()V\nLandroidx/compose/ui/text/font/FontSynthesis;\nHSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V\nHPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V\nHSPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis;\nHPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis;\nHSPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I\nPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I\nLandroidx/compose/ui/text/font/FontWeight;\nHSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V\nPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V\nHSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V\nPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V\nHSPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight;\nPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight;\nHSPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight;\nPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight;\nHSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I\nPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I\nHSPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I\nPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I\nLandroidx/compose/ui/text/font/GenericFontFamily;\nHSPLandroidx/compose/ui/text/font/GenericFontFamily;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nPLandroidx/compose/ui/text/font/GenericFontFamily;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nHSPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String;\nPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String;\nLandroidx/compose/ui/text/font/PlatformResolveInterceptor;\nHSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V\nPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V\nLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;\nHSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V\nPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><init>()V\nPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><init>()V\nLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;\nHSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;-><init>()V\nPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;-><init>()V\nLandroidx/compose/ui/text/font/PlatformTypefaces;\nLandroidx/compose/ui/text/font/PlatformTypefacesApi;\nHSPLandroidx/compose/ui/text/font/PlatformTypefacesApi;-><init>(I)V\nPLandroidx/compose/ui/text/font/PlatformTypefacesApi;-><init>(I)V\nHSPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;\nPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;\nHSPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;\nPLandroidx/compose/ui/text/font/PlatformTypefacesApi;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;\nLandroidx/compose/ui/text/font/SystemFontFamily;\nHSPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>()V\nPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>()V\nLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationChannel;Z)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationChannel;Z)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Z)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannel;Z)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;I)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;I)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Z)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Z)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;)V\nHPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V\nHPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel;\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel;\nLandroidx/compose/ui/text/font/TypefaceCompatApi26$toAndroidString$1;\nHSPLandroidx/compose/ui/text/font/TypefaceCompatApi26$toAndroidString$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/text/font/TypefaceCompatApi26$toAndroidString$1;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/ui/text/font/TypefaceRequest;\nHSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V\nHPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V\nHSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nHSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I\nPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I\nHSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;\nPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;\nHSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I\nHPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I\nLandroidx/compose/ui/text/font/TypefaceRequestCache;\nHSPLandroidx/compose/ui/text/font/TypefaceRequestCache;-><init>()V\nPLandroidx/compose/ui/text/font/TypefaceRequestCache;-><init>()V\nHSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;\nHPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;\nLandroidx/compose/ui/text/font/TypefaceResult;\nLandroidx/compose/ui/text/font/TypefaceResult$Immutable;\nHSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V\nPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V\nHSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z\nPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z\nHSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object;\nPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object;\nLandroidx/compose/ui/text/input/CursorAnchorInfoController;\nHSPLandroidx/compose/ui/text/input/CursorAnchorInfoController;-><init>(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V\nPLandroidx/compose/ui/text/input/CursorAnchorInfoController;-><init>(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V\nLandroidx/compose/ui/text/input/ImeOptions;\nHSPLandroidx/compose/ui/text/input/ImeOptions;-><clinit>()V\nPLandroidx/compose/ui/text/input/ImeOptions;-><clinit>()V\nHSPLandroidx/compose/ui/text/input/ImeOptions;-><init>(ZIZII)V\nPLandroidx/compose/ui/text/input/ImeOptions;-><init>(ZIZII)V\nHSPLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions;\nPLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions;\nLandroidx/compose/ui/text/input/InputMethodManager;\nLandroidx/compose/ui/text/input/InputMethodManagerImpl;\nHSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V\nPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V\nLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;\nHSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;-><init>(Ljava/lang/Object;I)V\nLandroidx/compose/ui/text/input/OffsetMapping;\nLandroidx/compose/ui/text/input/PlatformTextInputService;\nLandroidx/compose/ui/text/input/TextFieldValue;\nHSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V\nPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V\nHSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V\nPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V\nHSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Ljava/lang/String;JI)V\nPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Ljava/lang/String;JI)V\nHSPLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String;\nPLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String;\nLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;\nHSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><clinit>()V\nPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><clinit>()V\nHSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><init>()V\nPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><init>()V\nLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;\nHSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><clinit>()V\nPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><clinit>()V\nHSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><init>(I)V\nPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><init>(I)V\nLandroidx/compose/ui/text/input/TextInputService;\nHSPLandroidx/compose/ui/text/input/TextInputService;-><init>(Landroidx/compose/ui/text/input/PlatformTextInputService;)V\nPLandroidx/compose/ui/text/input/TextInputService;-><init>(Landroidx/compose/ui/text/input/PlatformTextInputService;)V\nLandroidx/compose/ui/text/input/TextInputServiceAndroid;\nHSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;)V\nPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;)V\nLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;\nLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;\nHSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;-><init>(Landroid/view/Choreographer;)V\nPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;-><init>(Landroid/view/Choreographer;)V\nLandroidx/compose/ui/text/input/VisualTransformation;\nHSPLandroidx/compose/ui/text/input/VisualTransformation;-><clinit>()V\nPLandroidx/compose/ui/text/input/VisualTransformation;-><clinit>()V\nLandroidx/compose/ui/text/input/VisualTransformation$Companion;\nHSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;-><clinit>()V\nPLandroidx/compose/ui/text/input/VisualTransformation$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;-><init>()V\nPLandroidx/compose/ui/text/input/VisualTransformation$Companion;-><init>()V\nHSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->getNone()Landroidx/compose/ui/text/input/VisualTransformation;\nPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->getNone()Landroidx/compose/ui/text/input/VisualTransformation;\nLandroidx/compose/ui/text/intl/AndroidLocale;\nHSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V\nPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V\nLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;\nHSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V\nPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V\nHSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;\nHPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;\nLandroidx/compose/ui/text/intl/Locale;\nHSPLandroidx/compose/ui/text/intl/Locale;-><clinit>()V\nPLandroidx/compose/ui/text/intl/Locale;-><clinit>()V\nHSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/AndroidLocale;)V\nPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/AndroidLocale;)V\nLandroidx/compose/ui/text/intl/LocaleList;\nHSPLandroidx/compose/ui/text/intl/LocaleList;-><clinit>()V\nPLandroidx/compose/ui/text/intl/LocaleList;-><clinit>()V\nHSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V\nPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V\nHSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/text/intl/PlatformLocaleKt;\nHSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V\nPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;\nPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;\nLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V\nPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->createCharSequence(Ljava/lang/String;FLandroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;Z)Ljava/lang/CharSequence;\nHPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->createCharSequence(Ljava/lang/String;FLandroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;Z)Ljava/lang/CharSequence;\nLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;-><init>()V\nPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;-><init>()V\nLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V\nHPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence;\nPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl;\nPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamilyResolverImpl;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z\nHPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics;\nPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F\nHPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle;\nPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I\nPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;\nHPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;\nLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V\nHPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V\nHSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/compose/ui/text/platform/AndroidTextPaint;\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(F)V\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->getBlendMode-0nO6VwU()I\nPLandroidx/compose/ui/text/platform/AndroidTextPaint;->getBlendMode-0nO6VwU()I\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBlendMode-s9anfk8(I)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBlendMode-s9anfk8(I)V\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V\nHSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V\nHPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V\nLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;\nPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;\nHSPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler;\nPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler;\nHSPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)V\nPLandroidx/compose/ui/text/platform/Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)V\nLandroidx/compose/ui/text/platform/DefaultImpl;\nHSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V\nPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V\nHSPLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V\nPLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V\nHSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;\nPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;\nHSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State;\nHPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State;\nLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;\nHSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V\nPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V\nHSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onFailed()V\nPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onFailed()V\nLandroidx/compose/ui/text/platform/EmojiCompatStatus;\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V\nPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><init>()V\nPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><init>()V\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State;\nHPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State;\nLandroidx/compose/ui/text/platform/EmojiCompatStatusDelegate;\nLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;-><clinit>()V\nPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;-><clinit>()V\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getFalsey$p()Landroidx/compose/ui/text/platform/ImmutableBool;\nPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getFalsey$p()Landroidx/compose/ui/text/platform/ImmutableBool;\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z\nHPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z\nHSPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/platform/URLSpanCache;)Landroid/text/SpannableString;\nHPLandroidx/compose/ui/text/platform/EmojiCompatStatusKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/platform/URLSpanCache;)Landroid/text/SpannableString;\nLandroidx/compose/ui/text/platform/ImmutableBool;\nHSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V\nPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V\nHSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;\nHPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;\nLandroidx/compose/ui/text/platform/URLSpanCache;\nHSPLandroidx/compose/ui/text/platform/URLSpanCache;-><init>()V\nPLandroidx/compose/ui/text/platform/URLSpanCache;-><init>()V\nLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods;\nLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;\nHSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F\nHPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F\nHSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-KmRG4DE(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/style/LineHeightStyle;)V\nHPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-KmRG4DE(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/style/LineHeightStyle;)V\nHSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyles(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;)V\nHPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyles(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;)V\nLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;\nHSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;-><init>(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V\nHPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;-><init>(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V\nLandroidx/compose/ui/text/platform/style/ShaderBrushSpan;\nLandroidx/compose/ui/text/style/BaselineShift;\nHSPLandroidx/compose/ui/text/style/BaselineShift;-><clinit>()V\nPLandroidx/compose/ui/text/style/BaselineShift;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V\nHPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V\nHSPLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift;\nPLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift;\nHSPLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F\nPLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F\nLandroidx/compose/ui/text/style/BrushStyle;\nLandroidx/compose/ui/text/style/ColorStyle;\nHSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)V\nHPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)V\nHSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F\nHPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F\nHSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J\nPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J\nLandroidx/compose/ui/text/style/Hyphens;\nHSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V\nHPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens;\nPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens;\nHSPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I\nPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I\nLandroidx/compose/ui/text/style/LineBreak;\nHSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V\nHPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I\nPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I\nHSPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak;\nPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak;\nHSPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I\nPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I\nLandroidx/compose/ui/text/style/LineBreak$Strategy;\nHSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V\nHPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy;\nPLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy;\nHSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I\nPLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I\nLandroidx/compose/ui/text/style/LineBreak$Strictness;\nHSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V\nHPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness;\nPLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness;\nHSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I\nPLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I\nLandroidx/compose/ui/text/style/LineBreak$WordBreak;\nHSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V\nHPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak;\nPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak;\nHSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I\nPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I\nLandroidx/compose/ui/text/style/LineHeightStyle;\nHSPLandroidx/compose/ui/text/style/LineHeightStyle;-><clinit>()V\nPLandroidx/compose/ui/text/style/LineHeightStyle;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/LineHeightStyle;-><init>(FI)V\nPLandroidx/compose/ui/text/style/LineHeightStyle;-><init>(FI)V\nHSPLandroidx/compose/ui/text/style/LineHeightStyle;->access$getDefault$cp()Landroidx/compose/ui/text/style/LineHeightStyle;\nPLandroidx/compose/ui/text/style/LineHeightStyle;->access$getDefault$cp()Landroidx/compose/ui/text/style/LineHeightStyle;\nHSPLandroidx/compose/ui/text/style/LineHeightStyle;->getAlignment-PIaL0Z0()F\nPLandroidx/compose/ui/text/style/LineHeightStyle;->getAlignment-PIaL0Z0()F\nHSPLandroidx/compose/ui/text/style/LineHeightStyle;->getTrim-EVpEnUU()I\nPLandroidx/compose/ui/text/style/LineHeightStyle;->getTrim-EVpEnUU()I\nLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;\nHSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;-><clinit>()V\nPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getCenter$cp()F\nPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getCenter$cp()F\nHSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getProportional$cp()F\nPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->access$getProportional$cp()F\nHSPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V\nPLandroidx/compose/ui/text/style/LineHeightStyle$Alignment;->constructor-impl(F)V\nLandroidx/compose/ui/text/style/TextAlign;\nHSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V\nHPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign;\nPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign;\nHSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z\nPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I\nPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I\nLandroidx/compose/ui/text/style/TextDecoration;\nHSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V\nPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V\nPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration;\nPLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration;\nHSPLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration;\nPLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration;\nHSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/text/style/TextDirection;\nHSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V\nHPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V\nHSPLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection;\nPLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection;\nHSPLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I\nPLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I\nLandroidx/compose/ui/text/style/TextForegroundStyle;\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle;\nHPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle;\nLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;-><clinit>()V\nPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle;\nHPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle;\nLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V\nPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><init>()V\nPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><init>()V\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F\nPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush;\nPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush;\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J\nHPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J\nLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;I)V\nHPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;I)V\nHSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;->invoke()Ljava/lang/Object;\nPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$1;->invoke()Ljava/lang/Object;\nLandroidx/compose/ui/text/style/TextGeometricTransform;\nHSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V\nPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V\nPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V\nHSPLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform;\nPLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform;\nHSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z\nLandroidx/compose/ui/text/style/TextIndent;\nHSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V\nPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V\nPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V\nHSPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent;\nPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent;\nHSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J\nPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J\nHSPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J\nPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J\nLandroidx/compose/ui/text/style/TextMotion;\nHSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V\nPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V\nHSPLandroidx/compose/ui/text/style/TextMotion;-><init>(ZI)V\nPLandroidx/compose/ui/text/style/TextMotion;-><init>(ZI)V\nHSPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion;\nPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion;\nHSPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I\nPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I\nHSPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z\nPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z\nLandroidx/compose/ui/text/style/TextOverflow;\nLandroidx/compose/ui/unit/Constraints;\nHSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V\nPLandroidx/compose/ui/unit/Constraints;-><clinit>()V\nHSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V\nHPLandroidx/compose/ui/unit/Constraints;-><init>(J)V\nHSPLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I\nPLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I\nHSPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints;\nHPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints;\nHSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J\nHPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J\nHSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(IIII)J\nHPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(IIII)J\nHSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z\nHPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z\nPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z\nHSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z\nPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z\nHSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z\nPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z\nHSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z\nPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z\nHSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I\nHPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I\nHSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I\nHPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I\nHSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I\nHPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I\nHSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I\nHPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I\nHSPLandroidx/compose/ui/unit/Constraints;->unbox-impl()J\nPLandroidx/compose/ui/unit/Constraints;->unbox-impl()J\nLandroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I\nHPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I\nHSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F\nPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F\nHSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F\nHPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F\nHSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F\nHPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F\nHSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F\nHPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F\nHSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J\nHPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J\nLandroidx/compose/ui/unit/DensityImpl;\nHSPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V\nHPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V\nHSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F\nHPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F\nHSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F\nHPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F\nLandroidx/compose/ui/unit/Dp;\nHSPLandroidx/compose/ui/unit/Dp;-><clinit>()V\nPLandroidx/compose/ui/unit/Dp;-><clinit>()V\nHSPLandroidx/compose/ui/unit/Dp;-><init>(F)V\nHPLandroidx/compose/ui/unit/Dp;-><init>(F)V\nHSPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp;\nPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp;\nHSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z\nHPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z\nHSPLandroidx/compose/ui/unit/Dp;->unbox-impl()F\nPLandroidx/compose/ui/unit/Dp;->unbox-impl()F\nLandroidx/compose/ui/unit/DpKt;\nHSPLandroidx/compose/ui/unit/DpKt;->Constraints$default(III)J\nHPLandroidx/compose/ui/unit/DpKt;->Constraints$default(III)J\nHSPLandroidx/compose/ui/unit/DpKt;->Constraints(IIII)J\nHPLandroidx/compose/ui/unit/DpKt;->Constraints(IIII)J\nHSPLandroidx/compose/ui/unit/DpKt;->Density$default()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/unit/DpKt;->Density$default()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/unit/DpKt;->Density()Landroidx/compose/ui/unit/Density;\nPLandroidx/compose/ui/unit/DpKt;->Density()Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/unit/DpKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density;\nHPLandroidx/compose/ui/unit/DpKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density;\nHSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J\nPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J\nHSPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J\nHPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J\nHSPLandroidx/compose/ui/unit/DpKt;->IntOffset(II)J\nHPLandroidx/compose/ui/unit/DpKt;->IntOffset(II)J\nHSPLandroidx/compose/ui/unit/DpKt;->IntSize(II)J\nPLandroidx/compose/ui/unit/DpKt;->IntSize(II)J\nHSPLandroidx/compose/ui/unit/DpKt;->constrain-4WqzIAM(JJ)J\nHPLandroidx/compose/ui/unit/DpKt;->constrain-4WqzIAM(JJ)J\nHSPLandroidx/compose/ui/unit/DpKt;->constrain-N9IONVI(JJ)J\nHPLandroidx/compose/ui/unit/DpKt;->constrain-N9IONVI(JJ)J\nHSPLandroidx/compose/ui/unit/DpKt;->constrainHeight-K40F9xA(IJ)I\nHPLandroidx/compose/ui/unit/DpKt;->constrainHeight-K40F9xA(IJ)I\nHSPLandroidx/compose/ui/unit/DpKt;->constrainWidth-K40F9xA(IJ)I\nHPLandroidx/compose/ui/unit/DpKt;->constrainWidth-K40F9xA(IJ)I\nHSPLandroidx/compose/ui/unit/DpKt;->getSp(I)J\nHPLandroidx/compose/ui/unit/DpKt;->getSp(I)J\nHSPLandroidx/compose/ui/unit/DpKt;->isUnspecified--R2X_6o(J)Z\nHPLandroidx/compose/ui/unit/DpKt;->isUnspecified--R2X_6o(J)Z\nHSPLandroidx/compose/ui/unit/DpKt;->offset-NN6Ew-U(JII)J\nHPLandroidx/compose/ui/unit/DpKt;->offset-NN6Ew-U(JII)J\nHSPLandroidx/compose/ui/unit/DpKt;->pack(JF)J\nHPLandroidx/compose/ui/unit/DpKt;->pack(JF)J\nHSPLandroidx/compose/ui/unit/DpKt;->toSize-ozmzZPI(J)J\nHPLandroidx/compose/ui/unit/DpKt;->toSize-ozmzZPI(J)J\nLandroidx/compose/ui/unit/DpOffset;\nHSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V\nPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V\nLandroidx/compose/ui/unit/DpSize;\nHSPLandroidx/compose/ui/unit/DpSize;-><clinit>()V\nPLandroidx/compose/ui/unit/DpSize;-><clinit>()V\nHSPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J\nPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J\nHSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F\nHPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F\nHSPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F\nHPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F\nLandroidx/compose/ui/unit/IntOffset;\nHSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V\nPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V\nHSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V\nHPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V\nHSPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J\nHPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J\nHSPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset;\nHPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset;\nHPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z\nHPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I\nHPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I\nHSPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J\nPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J\nLandroidx/compose/ui/unit/IntSize;\nHSPLandroidx/compose/ui/unit/IntSize;-><clinit>()V\nPLandroidx/compose/ui/unit/IntSize;-><clinit>()V\nHSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V\nHPLandroidx/compose/ui/unit/IntSize;-><init>(J)V\nHSPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize;\nHPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize;\nHSPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z\nHPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/compose/ui/unit/IntSize;->equals-impl(JLjava/lang/Object;)Z\nPLandroidx/compose/ui/unit/IntSize;->equals-impl(JLjava/lang/Object;)Z\nHSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I\nHPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I\nHSPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J\nPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J\nLandroidx/compose/ui/unit/LayoutDirection;\nHSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V\nPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V\nHSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(Ljava/lang/String;I)V\nPLandroidx/compose/ui/unit/LayoutDirection;-><init>(Ljava/lang/String;I)V\nLandroidx/compose/ui/unit/TextUnit;\nHSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V\nPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V\nHSPLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J\nPLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J\nHSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J\nHPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J\nHSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F\nHPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F\nLandroidx/compose/ui/unit/TextUnitType;\nHSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V\nPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V\nHSPLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType;\nPLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType;\nHSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z\nPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z\nHSPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J\nPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J\nLandroidx/compose/ui/viewinterop/AndroidViewHolder;\nLandroidx/compose/ui/window/DialogWindowProvider;\nLandroidx/compose/ui/window/PopupPositionProvider;\nLandroidx/compose/ui/window/PopupProperties;\nHSPLandroidx/compose/ui/window/PopupProperties;-><init>(ZZI)V\nPLandroidx/compose/ui/window/PopupProperties;-><init>(ZZI)V\nPLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V\nPLandroidx/concurrent/futures/AbstractResolvableFuture;-><init>()V\nPLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V\nPLandroidx/concurrent/futures/AbstractResolvableFuture;->set(Ljava/lang/Object;)Z\nPLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;-><init>()V\nPLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V\nPLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><init>(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V\nPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V\nPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z\nPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z\nPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z\nPLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V\nPLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(I)V\nPLandroidx/concurrent/futures/ResolvableFuture;-><init>()V\nPLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture;\nPLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z\nLandroidx/core/app/ActivityCompat$RequestPermissionsRequestCodeValidator;\nLandroidx/core/app/ComponentActivity;\nHSPLandroidx/core/app/ComponentActivity;-><init>()V\nPLandroidx/core/app/ComponentActivity;-><init>()V\nHSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V\nPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V\nPLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V\nLandroidx/core/app/CoreComponentFactory;\nHSPLandroidx/core/app/CoreComponentFactory;-><init>()V\nPLandroidx/core/app/CoreComponentFactory;-><init>()V\nHSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;\nPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;\nHSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;\nPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;\nHSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;\nPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;\nHSPLandroidx/core/app/CoreComponentFactory;->instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver;\nPLandroidx/core/app/CoreComponentFactory;->instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver;\nLandroidx/core/app/NavUtils;\nHSPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/content/Context;Landroid/content/ComponentName;)Ljava/lang/String;\nPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/content/Context;Landroid/content/ComponentName;)Ljava/lang/String;\nLandroidx/core/app/NotificationChannelCompat;\nHSPLandroidx/core/app/NotificationChannelCompat;-><init>(Ljava/lang/String;I)V\nPLandroidx/core/app/NotificationChannelCompat;-><init>(Ljava/lang/String;I)V\nLandroidx/core/app/NotificationChannelCompat$Api26Impl;\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->createNotificationChannel(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel;\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->createNotificationChannel(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel;\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableLights(Landroid/app/NotificationChannel;Z)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableLights(Landroid/app/NotificationChannel;Z)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableVibration(Landroid/app/NotificationChannel;Z)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->enableVibration(Landroid/app/NotificationChannel;Z)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setDescription(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setDescription(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setGroup(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setGroup(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setLightColor(Landroid/app/NotificationChannel;I)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setLightColor(Landroid/app/NotificationChannel;I)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setShowBadge(Landroid/app/NotificationChannel;Z)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setShowBadge(Landroid/app/NotificationChannel;Z)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setSound(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setSound(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setVibrationPattern(Landroid/app/NotificationChannel;[J)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl;->setVibrationPattern(Landroid/app/NotificationChannel;[J)V\nLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m$1()V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m$1()V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m()V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m()V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;I)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;I)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Z)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;Z)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;[J)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationChannel;[J)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationManager;Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationManager;Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup;\nPLandroidx/core/app/NotificationChannelCompat$Api26Impl$$ExternalSyntheticApiModelOutline1;->m(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup;\nLandroidx/core/app/NotificationChannelCompat$Builder;\nHSPLandroidx/core/app/NotificationChannelCompat$Builder;-><init>(Ljava/lang/String;I)V\nPLandroidx/core/app/NotificationChannelCompat$Builder;-><init>(Ljava/lang/String;I)V\nHSPLandroidx/core/app/NotificationChannelCompat$Builder;->build()Landroidx/core/app/NotificationChannelCompat;\nPLandroidx/core/app/NotificationChannelCompat$Builder;->build()Landroidx/core/app/NotificationChannelCompat;\nHSPLandroidx/core/app/NotificationChannelCompat$Builder;->setGroup(Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelCompat$Builder;->setGroup(Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Builder;->setName(Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelCompat$Builder;->setName(Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelCompat$Builder;->setShowBadge()V\nPLandroidx/core/app/NotificationChannelCompat$Builder;->setShowBadge()V\nHSPLandroidx/core/app/NotificationChannelCompat$Builder;->setSound()V\nPLandroidx/core/app/NotificationChannelCompat$Builder;->setSound()V\nLandroidx/core/app/NotificationChannelGroupCompat;\nHSPLandroidx/core/app/NotificationChannelGroupCompat;-><init>(Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelGroupCompat;-><init>(Ljava/lang/String;)V\nLandroidx/core/app/NotificationChannelGroupCompat$Api26Impl;\nHSPLandroidx/core/app/NotificationChannelGroupCompat$Api26Impl;->createNotificationChannelGroup(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup;\nPLandroidx/core/app/NotificationChannelGroupCompat$Api26Impl;->createNotificationChannelGroup(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/app/NotificationChannelGroup;\nLandroidx/core/app/NotificationChannelGroupCompat$Api28Impl;\nHSPLandroidx/core/app/NotificationChannelGroupCompat$Api28Impl;->setDescription(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelGroupCompat$Api28Impl;->setDescription(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V\nLandroidx/core/app/NotificationChannelGroupCompat$Builder;\nHSPLandroidx/core/app/NotificationChannelGroupCompat$Builder;-><init>(Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelGroupCompat$Builder;-><init>(Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->build()Landroidx/core/app/NotificationChannelGroupCompat;\nPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->build()Landroidx/core/app/NotificationChannelGroupCompat;\nHSPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->setName(Ljava/lang/String;)V\nPLandroidx/core/app/NotificationChannelGroupCompat$Builder;->setName(Ljava/lang/String;)V\nLandroidx/core/app/NotificationManagerCompat;\nHSPLandroidx/core/app/NotificationManagerCompat;-><clinit>()V\nPLandroidx/core/app/NotificationManagerCompat;-><clinit>()V\nHSPLandroidx/core/app/NotificationManagerCompat;-><init>(Landroid/content/Context;)V\nPLandroidx/core/app/NotificationManagerCompat;-><init>(Landroid/content/Context;)V\nHSPLandroidx/core/app/NotificationManagerCompat;->cancel(I)V\nPLandroidx/core/app/NotificationManagerCompat;->cancel(I)V\nHSPLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelGroupsCompat(Ljava/util/List;)V\nPLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelGroupsCompat(Ljava/util/List;)V\nHSPLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelsCompat(Ljava/util/List;)V\nPLandroidx/core/app/NotificationManagerCompat;->createNotificationChannelsCompat(Ljava/util/List;)V\nHSPLandroidx/core/app/NotificationManagerCompat;->deleteNotificationChannel(Ljava/lang/String;)V\nPLandroidx/core/app/NotificationManagerCompat;->deleteNotificationChannel(Ljava/lang/String;)V\nHSPLandroidx/core/app/NotificationManagerCompat;->from(Landroid/content/Context;)Landroidx/core/app/NotificationManagerCompat;\nPLandroidx/core/app/NotificationManagerCompat;->from(Landroid/content/Context;)Landroidx/core/app/NotificationManagerCompat;\nLandroidx/core/app/NotificationManagerCompat$Api26Impl;\nHSPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannelGroups(Landroid/app/NotificationManager;Ljava/util/List;)V\nPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannelGroups(Landroid/app/NotificationManager;Ljava/util/List;)V\nHSPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannels(Landroid/app/NotificationManager;Ljava/util/List;)V\nPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->createNotificationChannels(Landroid/app/NotificationManager;Ljava/util/List;)V\nHSPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->deleteNotificationChannel(Landroid/app/NotificationManager;Ljava/lang/String;)V\nPLandroidx/core/app/NotificationManagerCompat$Api26Impl;->deleteNotificationChannel(Landroid/app/NotificationManager;Ljava/lang/String;)V\nLandroidx/core/app/TaskStackBuilder$SupportParentable;\nLandroidx/core/content/ContextCompat;\nHSPLandroidx/core/content/ContextCompat;-><clinit>()V\nPLandroidx/core/content/ContextCompat;-><clinit>()V\nHSPLandroidx/core/content/ContextCompat;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nPLandroidx/core/content/ContextCompat;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nHSPLandroidx/core/content/ContextCompat;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor;\nPLandroidx/core/content/ContextCompat;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor;\nLandroidx/core/content/ContextCompat$Api21Impl;\nHSPLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nPLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;\nLandroidx/core/content/ContextCompat$Api28Impl;\nHSPLandroidx/core/content/ContextCompat$Api28Impl;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor;\nPLandroidx/core/content/ContextCompat$Api28Impl;->getMainExecutor(Landroid/content/Context;)Ljava/util/concurrent/Executor;\nLandroidx/core/content/FileProvider;\nHSPLandroidx/core/content/FileProvider;-><clinit>()V\nPLandroidx/core/content/FileProvider;-><clinit>()V\nHSPLandroidx/core/content/FileProvider;-><init>()V\nPLandroidx/core/content/FileProvider;-><init>()V\nHSPLandroidx/core/content/FileProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V\nPLandroidx/core/content/FileProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V\nHSPLandroidx/core/content/FileProvider;->onCreate()Z\nPLandroidx/core/content/FileProvider;->onCreate()Z\nLandroidx/core/content/res/ComplexColorCompat;\nHSPLandroidx/core/content/res/ComplexColorCompat;-><init>(Landroid/graphics/Shader;Landroid/content/res/ColorStateList;I)V\nHPLandroidx/core/content/res/ComplexColorCompat;-><init>(Landroid/graphics/Shader;Landroid/content/res/ColorStateList;I)V\nHSPLandroidx/core/content/res/ComplexColorCompat;->from(I)Landroidx/core/content/res/ComplexColorCompat;\nPLandroidx/core/content/res/ComplexColorCompat;->from(I)Landroidx/core/content/res/ComplexColorCompat;\nHSPLandroidx/core/content/res/ComplexColorCompat;->getColor()I\nPLandroidx/core/content/res/ComplexColorCompat;->getColor()I\nHSPLandroidx/core/content/res/ComplexColorCompat;->getShader()Landroid/graphics/Shader;\nPLandroidx/core/content/res/ComplexColorCompat;->getShader()Landroid/graphics/Shader;\nHSPLandroidx/core/content/res/ComplexColorCompat;->isGradient()Z\nPLandroidx/core/content/res/ComplexColorCompat;->isGradient()Z\nHSPLandroidx/core/content/res/ComplexColorCompat;->willDraw()Z\nPLandroidx/core/content/res/ComplexColorCompat;->willDraw()Z\nLandroidx/core/content/res/TypedArrayKt;\nHSPLandroidx/core/content/res/TypedArrayKt;-><clinit>()V\nPLandroidx/core/content/res/TypedArrayKt;-><clinit>()V\nHSPLandroidx/core/content/res/TypedArrayKt;->getColorOrThrow(Landroid/content/res/TypedArray;I)I\nHPLandroidx/core/content/res/TypedArrayKt;->getColorOrThrow(Landroid/content/res/TypedArray;I)I\nHSPLandroidx/core/content/res/TypedArrayKt;->getNamedComplexColor(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat;\nHPLandroidx/core/content/res/TypedArrayKt;->getNamedComplexColor(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat;\nHSPLandroidx/core/content/res/TypedArrayKt;->getNamedFloat(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IF)F\nHPLandroidx/core/content/res/TypedArrayKt;->getNamedFloat(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IF)F\nHSPLandroidx/core/content/res/TypedArrayKt;->getNamedInt(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;II)I\nHPLandroidx/core/content/res/TypedArrayKt;->getNamedInt(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;II)I\nHSPLandroidx/core/content/res/TypedArrayKt;->getResourceIdOrThrow(Landroid/content/res/TypedArray;I)I\nHPLandroidx/core/content/res/TypedArrayKt;->getResourceIdOrThrow(Landroid/content/res/TypedArray;I)I\nHSPLandroidx/core/content/res/TypedArrayKt;->hasAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z\nHPLandroidx/core/content/res/TypedArrayKt;->hasAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z\nHSPLandroidx/core/content/res/TypedArrayKt;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;\nHPLandroidx/core/content/res/TypedArrayKt;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;\nLandroidx/core/graphics/Insets;\nHSPLandroidx/core/graphics/Insets;-><clinit>()V\nPLandroidx/core/graphics/Insets;-><clinit>()V\nHSPLandroidx/core/graphics/Insets;-><init>(IIII)V\nHPLandroidx/core/graphics/Insets;-><init>(IIII)V\nHSPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z\nHPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets;\nPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets;\nHSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets;\nPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets;\nLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4()V\nPLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$4()V\nHSPLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets$Builder;\nPLandroidx/core/graphics/Insets$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets$Builder;\nLandroidx/core/graphics/PathParser;\nHSPLandroidx/core/graphics/PathParser;->copyOfRange([FI)[F\nHPLandroidx/core/graphics/PathParser;->copyOfRange([FI)[F\nHSPLandroidx/core/graphics/PathParser;->createNodesFromPathData(Ljava/lang/String;)[Landroidx/core/graphics/PathParser$PathDataNode;\nHPLandroidx/core/graphics/PathParser;->createNodesFromPathData(Ljava/lang/String;)[Landroidx/core/graphics/PathParser$PathDataNode;\nHSPLandroidx/core/graphics/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path;\nHPLandroidx/core/graphics/PathParser;->createPathFromPathData(Ljava/lang/String;)Landroid/graphics/Path;\nLandroidx/core/graphics/PathParser$PathDataNode;\nHSPLandroidx/core/graphics/PathParser$PathDataNode;-><init>(C[F)V\nPLandroidx/core/graphics/PathParser$PathDataNode;-><init>(C[F)V\nHSPLandroidx/core/graphics/PathParser$PathDataNode;->nodesToPath([Landroidx/core/graphics/PathParser$PathDataNode;Landroid/graphics/Path;)V\nHPLandroidx/core/graphics/PathParser$PathDataNode;->nodesToPath([Landroidx/core/graphics/PathParser$PathDataNode;Landroid/graphics/Path;)V\nLandroidx/core/math/MathUtils;\nHSPLandroidx/core/math/MathUtils;->CornerRadius(FF)J\nHPLandroidx/core/math/MathUtils;->CornerRadius(FF)J\nHSPLandroidx/core/math/MathUtils;->Offset(FF)J\nHPLandroidx/core/math/MathUtils;->Offset(FF)J\nHSPLandroidx/core/math/MathUtils;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;\nHPLandroidx/core/math/MathUtils;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/core/math/MathUtils;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;\nPLandroidx/core/math/MathUtils;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;\nHSPLandroidx/core/math/MathUtils;->Size(FF)J\nHPLandroidx/core/math/MathUtils;->Size(FF)J\nHSPLandroidx/core/math/MathUtils;->TextRange(II)J\nPLandroidx/core/math/MathUtils;->TextRange(II)J\nHSPLandroidx/core/math/MathUtils;->access$DistanceAndInLayer(FZ)J\nHPLandroidx/core/math/MathUtils;->access$DistanceAndInLayer(FZ)J\nHSPLandroidx/core/math/MathUtils;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I\nHPLandroidx/core/math/MathUtils;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I\nHSPLandroidx/core/math/MathUtils;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;\nHPLandroidx/core/math/MathUtils;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;\nHSPLandroidx/core/math/MathUtils;->access$lowestBitOf(J)I\nHPLandroidx/core/math/MathUtils;->access$lowestBitOf(J)I\nHSPLandroidx/core/math/MathUtils;->access$nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node;\nHPLandroidx/core/math/MathUtils;->access$nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node;\nPLandroidx/core/math/MathUtils;->access$removeEntryAtIndex([Ljava/lang/Object;I)[Ljava/lang/Object;\nHSPLandroidx/core/math/MathUtils;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;\nPLandroidx/core/math/MathUtils;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;\nHSPLandroidx/core/math/MathUtils;->binarySearch(I[I)I\nHPLandroidx/core/math/MathUtils;->binarySearch(I[I)I\nHSPLandroidx/core/math/MathUtils;->bitsForSlot(II)I\nPLandroidx/core/math/MathUtils;->bitsForSlot(II)I\nHSPLandroidx/core/math/MathUtils;->chromaticAdaptation([F[F[F)[F\nPLandroidx/core/math/MathUtils;->chromaticAdaptation([F[F[F)[F\nHSPLandroidx/core/math/MathUtils;->coerceIn-8ffj60Q(JI)J\nPLandroidx/core/math/MathUtils;->coerceIn-8ffj60Q(JI)J\nHSPLandroidx/core/math/MathUtils;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z\nPLandroidx/core/math/MathUtils;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z\nHSPLandroidx/core/math/MathUtils;->compareTo-S_HNhKs(JJ)I\nHPLandroidx/core/math/MathUtils;->compareTo-S_HNhKs(JJ)I\nHSPLandroidx/core/math/MathUtils;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;\nHPLandroidx/core/math/MathUtils;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;\nHSPLandroidx/core/math/MathUtils;->composableLambdaInstance(ZILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;\nHPLandroidx/core/math/MathUtils;->composableLambdaInstance(ZILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl;\nHSPLandroidx/core/math/MathUtils;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;\nHPLandroidx/core/math/MathUtils;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object;\nHSPLandroidx/core/math/MathUtils;->dataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File;\nPLandroidx/core/math/MathUtils;->dataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File;\nHSPLandroidx/core/math/MathUtils;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F\nHPLandroidx/core/math/MathUtils;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F\nHSPLandroidx/core/math/MathUtils;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F\nHPLandroidx/core/math/MathUtils;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F\nHSPLandroidx/core/math/MathUtils;->getGetApp()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/core/math/MathUtils;->getGetApp()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/core/math/MathUtils;->getLabel()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/core/math/MathUtils;->getLabel()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/core/math/MathUtils;->getMoreVert()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/core/math/MathUtils;->getMoreVert()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/core/math/MathUtils;->getQueryStats()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/core/math/MathUtils;->getQueryStats()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/core/math/MathUtils;->getSecurity()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/core/math/MathUtils;->getSettingsBackupRestore()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLandroidx/core/math/MathUtils;->getSettingsBackupRestore()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLandroidx/core/math/MathUtils;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z\nHPLandroidx/core/math/MathUtils;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z\nHSPLandroidx/core/math/MathUtils;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V\nHPLandroidx/core/math/MathUtils;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V\nHSPLandroidx/core/math/MathUtils;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V\nPLandroidx/core/math/MathUtils;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V\nHSPLandroidx/core/math/MathUtils;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V\nHPLandroidx/core/math/MathUtils;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V\nHSPLandroidx/core/math/MathUtils;->inverse3x3([F)[F\nPLandroidx/core/math/MathUtils;->inverse3x3([F)[F\nHSPLandroidx/core/math/MathUtils;->invertTo-JiSxe2E([F[F)Z\nHPLandroidx/core/math/MathUtils;->invertTo-JiSxe2E([F[F)Z\nHSPLandroidx/core/math/MathUtils;->isAtEnd(Lorg/xmlpull/v1/XmlPullParser;)Z\nHPLandroidx/core/math/MathUtils;->isAtEnd(Lorg/xmlpull/v1/XmlPullParser;)Z\nHSPLandroidx/core/math/MathUtils;->isFinite-k-4lQ0M(J)Z\nHPLandroidx/core/math/MathUtils;->isFinite-k-4lQ0M(J)Z\nHSPLandroidx/core/math/MathUtils;->isInLayer-impl(J)Z\nHPLandroidx/core/math/MathUtils;->isInLayer-impl(J)Z\nHSPLandroidx/core/math/MathUtils;->isInOutline(Landroidx/compose/ui/graphics/BrushKt;FF)Z\nHPLandroidx/core/math/MathUtils;->isInOutline(Landroidx/compose/ui/graphics/BrushKt;FF)Z\nHSPLandroidx/core/math/MathUtils;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z\nHPLandroidx/core/math/MathUtils;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z\nHSPLandroidx/core/math/MathUtils;->lerp(FFF)F\nHPLandroidx/core/math/MathUtils;->lerp(FFF)F\nHSPLandroidx/core/math/MathUtils;->loadVectorResourceInner(Landroid/content/res/Resources$Theme;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;\nHPLandroidx/core/math/MathUtils;->loadVectorResourceInner(Landroid/content/res/Resources$Theme;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;\nHSPLandroidx/core/math/MathUtils;->modifierLocalMapOf(Lkotlin/Pair;)Landroidx/compose/ui/modifier/SingleLocalMap;\nPLandroidx/core/math/MathUtils;->modifierLocalMapOf(Lkotlin/Pair;)Landroidx/compose/ui/modifier/SingleLocalMap;\nHSPLandroidx/core/math/MathUtils;->mul3x3([F[F)[F\nPLandroidx/core/math/MathUtils;->mul3x3([F[F)[F\nHSPLandroidx/core/math/MathUtils;->mul3x3Diag([F[F)[F\nPLandroidx/core/math/MathUtils;->mul3x3Diag([F[F)[F\nHSPLandroidx/core/math/MathUtils;->mul3x3Float3([F[F)V\nPLandroidx/core/math/MathUtils;->mul3x3Float3([F[F)V\nHSPLandroidx/core/math/MathUtils;->mul3x3Float3_0(FFF[F)F\nPLandroidx/core/math/MathUtils;->mul3x3Float3_0(FFF[F)F\nHSPLandroidx/core/math/MathUtils;->mul3x3Float3_1(FFF[F)F\nPLandroidx/core/math/MathUtils;->mul3x3Float3_1(FFF[F)F\nHSPLandroidx/core/math/MathUtils;->mul3x3Float3_2(FFF[F)F\nPLandroidx/core/math/MathUtils;->mul3x3Float3_2(FFF[F)F\nHSPLandroidx/core/math/MathUtils;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V\nHPLandroidx/core/math/MathUtils;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/core/math/MathUtils;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;\nHPLandroidx/core/math/MathUtils;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter;\nHSPLandroidx/core/math/MathUtils;->persistentCompositionLocalHashMapOf()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nPLandroidx/core/math/MathUtils;->persistentCompositionLocalHashMapOf()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;\nHSPLandroidx/core/math/MathUtils;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z\nHPLandroidx/core/math/MathUtils;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScopeImpl;)Z\nHSPLandroidx/core/math/MathUtils;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;\nHPLandroidx/core/math/MathUtils;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;\nHSPLandroidx/core/math/MathUtils;->resources(Landroidx/compose/runtime/Composer;)Landroid/content/res/Resources;\nHPLandroidx/core/math/MathUtils;->resources(Landroidx/compose/runtime/Composer;)Landroid/content/res/Resources;\nHSPLandroidx/core/math/MathUtils;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V\nHPLandroidx/core/math/MathUtils;->seekToStartTag(Landroid/content/res/XmlResourceParser;)V\nHSPLandroidx/core/math/MathUtils;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V\nHPLandroidx/core/math/MathUtils;->setInt-A6tL2VI(Landroidx/compose/runtime/changelist/Operations;II)V\nHSPLandroidx/core/math/MathUtils;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V\nHPLandroidx/core/math/MathUtils;->setObject-DKhxnng(Landroidx/compose/runtime/changelist/Operations;ILjava/lang/Object;)V\nHSPLandroidx/core/math/MathUtils;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V\nHPLandroidx/core/math/MathUtils;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V\nHSPLandroidx/core/math/MathUtils;->stringResource(ILandroidx/compose/runtime/Composer;)Ljava/lang/String;\nHPLandroidx/core/math/MathUtils;->stringResource(ILandroidx/compose/runtime/Composer;)Ljava/lang/String;\nHSPLandroidx/core/math/MathUtils;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect;\nPLandroidx/core/math/MathUtils;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect;\nHSPLandroidx/core/math/MathUtils;->vectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/ImageVector;\nHPLandroidx/core/math/MathUtils;->vectorResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/vector/ImageVector;\nLandroidx/core/os/BuildCompat;\nHSPLandroidx/core/os/BuildCompat;-><clinit>()V\nPLandroidx/core/os/BuildCompat;-><clinit>()V\nHSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z\nPLandroidx/core/os/BuildCompat;->isAtLeastT()Z\nLandroidx/core/os/BuildCompat$Api30Impl;\nHSPLandroidx/core/os/BuildCompat$Api30Impl;-><clinit>()V\nPLandroidx/core/os/BuildCompat$Api30Impl;-><clinit>()V\nHSPLandroidx/core/os/BuildCompat$Api30Impl;-><init>()V\nPLandroidx/core/os/BuildCompat$Api30Impl;-><init>()V\nHSPLandroidx/core/os/BuildCompat$Api30Impl;->getExtensionVersion(I)I\nPLandroidx/core/os/BuildCompat$Api30Impl;->getExtensionVersion(I)I\nLandroidx/core/os/BundleKt;\nHSPLandroidx/core/os/BundleKt;->createAsync$1(Landroid/os/Looper;)Landroid/os/Handler;\nPLandroidx/core/os/BundleKt;->createAsync$1(Landroid/os/Looper;)Landroid/os/Handler;\nLandroidx/core/os/CancellationSignal$OnCancelListener;\nLandroidx/core/os/LocaleListCompat;\nHSPLandroidx/core/os/LocaleListCompat;-><clinit>()V\nPLandroidx/core/os/LocaleListCompat;-><clinit>()V\nHSPLandroidx/core/os/LocaleListCompat;-><init>(Landroidx/core/os/LocaleListPlatformWrapper;)V\nPLandroidx/core/os/LocaleListCompat;-><init>(Landroidx/core/os/LocaleListPlatformWrapper;)V\nHSPLandroidx/core/os/LocaleListCompat;->create([Ljava/util/Locale;)Landroidx/core/os/LocaleListCompat;\nPLandroidx/core/os/LocaleListCompat;->create([Ljava/util/Locale;)Landroidx/core/os/LocaleListCompat;\nHSPLandroidx/core/os/LocaleListCompat;->forLanguageTags(Ljava/lang/String;)Landroidx/core/os/LocaleListCompat;\nPLandroidx/core/os/LocaleListCompat;->forLanguageTags(Ljava/lang/String;)Landroidx/core/os/LocaleListCompat;\nHSPLandroidx/core/os/LocaleListCompat;->isEmpty()Z\nPLandroidx/core/os/LocaleListCompat;->isEmpty()Z\nHSPLandroidx/core/os/LocaleListCompat;->wrap(Landroid/os/LocaleList;)Landroidx/core/os/LocaleListCompat;\nPLandroidx/core/os/LocaleListCompat;->wrap(Landroid/os/LocaleList;)Landroidx/core/os/LocaleListCompat;\nLandroidx/core/os/LocaleListCompat$Api21Impl;\nHSPLandroidx/core/os/LocaleListCompat$Api21Impl;-><clinit>()V\nPLandroidx/core/os/LocaleListCompat$Api21Impl;-><clinit>()V\nHSPLandroidx/core/os/LocaleListCompat$Api21Impl;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;\nPLandroidx/core/os/LocaleListCompat$Api21Impl;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;\nLandroidx/core/os/LocaleListCompat$Api24Impl;\nHSPLandroidx/core/os/LocaleListCompat$Api24Impl;->createLocaleList([Ljava/util/Locale;)Landroid/os/LocaleList;\nPLandroidx/core/os/LocaleListCompat$Api24Impl;->createLocaleList([Ljava/util/Locale;)Landroid/os/LocaleList;\nLandroidx/core/os/LocaleListInterface;\nLandroidx/core/os/LocaleListPlatformWrapper;\nHSPLandroidx/core/os/LocaleListPlatformWrapper;-><init>(Ljava/lang/Object;)V\nPLandroidx/core/os/LocaleListPlatformWrapper;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/core/os/LocaleListPlatformWrapper;->isEmpty()Z\nPLandroidx/core/os/LocaleListPlatformWrapper;->isEmpty()Z\nLandroidx/core/os/TraceCompat;\nHSPLandroidx/core/os/TraceCompat;-><clinit>()V\nPLandroidx/core/os/TraceCompat;-><clinit>()V\nHSPLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V\nPLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V\nHSPLandroidx/core/os/TraceCompat;->endSection()V\nPLandroidx/core/os/TraceCompat;->endSection()V\nLandroidx/core/os/TraceCompat$Api18Impl;\nHSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V\nPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V\nHSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V\nPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V\nLandroidx/core/splashscreen/MaskedDrawable;\nHSPLandroidx/core/splashscreen/MaskedDrawable;-><init>(Landroid/graphics/drawable/Drawable;F)V\nPLandroidx/core/splashscreen/MaskedDrawable;-><init>(Landroid/graphics/drawable/Drawable;F)V\nHSPLandroidx/core/splashscreen/MaskedDrawable;->draw(Landroid/graphics/Canvas;)V\nPLandroidx/core/splashscreen/MaskedDrawable;->draw(Landroid/graphics/Canvas;)V\nHSPLandroidx/core/splashscreen/MaskedDrawable;->getOpacity()I\nHPLandroidx/core/splashscreen/MaskedDrawable;->getOpacity()I\nHSPLandroidx/core/splashscreen/MaskedDrawable;->onBoundsChange(Landroid/graphics/Rect;)V\nPLandroidx/core/splashscreen/MaskedDrawable;->onBoundsChange(Landroid/graphics/Rect;)V\nLandroidx/core/splashscreen/SplashScreen;\nHSPLandroidx/core/splashscreen/SplashScreen;-><init>(Landroid/app/Activity;)V\nPLandroidx/core/splashscreen/SplashScreen;-><init>(Landroid/app/Activity;)V\nHSPLandroidx/core/splashscreen/SplashScreen;->access$install(Landroidx/core/splashscreen/SplashScreen;)V\nPLandroidx/core/splashscreen/SplashScreen;->access$install(Landroidx/core/splashscreen/SplashScreen;)V\nHSPLandroidx/core/splashscreen/SplashScreen;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V\nPLandroidx/core/splashscreen/SplashScreen;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V\nHSPLandroidx/core/splashscreen/SplashScreen;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V\nPLandroidx/core/splashscreen/SplashScreen;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V\nLandroidx/core/splashscreen/SplashScreen$Impl;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;-><init>(Landroid/app/Activity;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl;-><init>(Landroid/app/Activity;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->access$getMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;)Landroidx/core/splashscreen/SplashScreenViewProvider;\nPLandroidx/core/splashscreen/SplashScreen$Impl;->access$getMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;)Landroidx/core/splashscreen/SplashScreenViewProvider;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->access$setMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl;->access$setMSplashScreenViewProvider$p(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->dispatchOnExitAnimation(Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl;->dispatchOnExitAnimation(Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->getSplashScreenWaitPredicate()Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;\nPLandroidx/core/splashscreen/SplashScreen$Impl;->getSplashScreenWaitPredicate()Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->install()V\nPLandroidx/core/splashscreen/SplashScreen$Impl;->install()V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl;->setKeepOnScreenCondition(Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl;->setOnExitAnimationListener(Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V\nLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/core/splashscreen/SplashScreenViewProvider;Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;-><init>(Landroidx/core/splashscreen/SplashScreenViewProvider;Landroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->run()V\nPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->run()V\nLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;-><init>()V\nPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;-><init>()V\nLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;-><init>(Landroidx/core/splashscreen/SplashScreen$Impl;Landroid/view/View;I)V\nPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;-><init>(Landroidx/core/splashscreen/SplashScreen$Impl;Landroid/view/View;I)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;->onPreDraw()Z\nHPLandroidx/core/splashscreen/SplashScreen$Impl$setKeepOnScreenCondition$1;->onPreDraw()Z\nLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;-><init>(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nPLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;-><init>(Landroidx/core/splashscreen/SplashScreen$Impl;Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nHSPLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;->onLayoutChange(Landroid/view/View;IIIIIIII)V\nPLandroidx/core/splashscreen/SplashScreen$Impl$setOnExitAnimationListener$2;->onLayoutChange(Landroid/view/View;IIIIIIII)V\nLandroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition;\nLandroidx/core/splashscreen/SplashScreen$OnExitAnimationListener;\nLandroidx/core/splashscreen/SplashScreenViewProvider;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider;-><init>(Landroid/app/Activity;)V\nPLandroidx/core/splashscreen/SplashScreenViewProvider;-><init>(Landroid/app/Activity;)V\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider;->getIconView()Landroid/view/View;\nPLandroidx/core/splashscreen/SplashScreenViewProvider;->getIconView()Landroid/view/View;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider;->getView()Landroid/view/ViewGroup;\nPLandroidx/core/splashscreen/SplashScreenViewProvider;->getView()Landroid/view/ViewGroup;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider;->remove()V\nPLandroidx/core/splashscreen/SplashScreenViewProvider;->remove()V\nLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;-><init>(Landroid/app/Activity;)V\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;-><init>(Landroid/app/Activity;)V\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->createSplashScreenView()V\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->createSplashScreenView()V\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getActivity()Landroid/app/Activity;\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getActivity()Landroid/app/Activity;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getIconView()Landroid/view/View;\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getIconView()Landroid/view/View;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getSplashScreenView()Landroid/view/ViewGroup;\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->getSplashScreenView()Landroid/view/ViewGroup;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->remove()V\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;->remove()V\nLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;-><init>(Landroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;)V\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;-><init>(Landroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl;)V\nHSPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;->invoke()Ljava/lang/Object;\nPLandroidx/core/splashscreen/SplashScreenViewProvider$ViewImpl$_splashScreenView$2;->invoke()Ljava/lang/Object;\nLandroidx/core/text/TextUtilsCompat;\nLandroidx/core/util/Consumer;\nLandroidx/core/util/DebugUtils;\nHSPLandroidx/core/util/DebugUtils;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nPLandroidx/core/util/DebugUtils;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nLandroidx/core/view/AccessibilityDelegateCompat;\nHSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V\nPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V\nHSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V\nPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V\nHSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>(Landroid/view/View$AccessibilityDelegate;)V\nPLandroidx/core/view/AccessibilityDelegateCompat;-><init>(Landroid/view/View$AccessibilityDelegate;)V\nHSPLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate;\nPLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate;\nHSPLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nPLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nHSPLandroidx/core/view/AccessibilityDelegateCompat;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z\nPLandroidx/core/view/AccessibilityDelegateCompat;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z\nHSPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;\nHSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(Landroidx/core/view/AccessibilityDelegateCompat;)V\nPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(Landroidx/core/view/AccessibilityDelegateCompat;)V\nHSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;\nHPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;\nHSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nHSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z\nPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z\nHSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V\nLandroidx/core/view/ContentInfoCompat$Builder;\nHSPLandroidx/core/view/ContentInfoCompat$Builder;-><init>()V\nPLandroidx/core/view/ContentInfoCompat$Builder;-><init>()V\nHSPLandroidx/core/view/ContentInfoCompat$Builder;-><init>(Landroid/view/View;)V\nPLandroidx/core/view/ContentInfoCompat$Builder;-><init>(Landroid/view/View;)V\nHSPLandroidx/core/view/ContentInfoCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/ContentInfoCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat;\nLandroidx/core/view/ContentInfoCompat$Compat;\nLandroidx/core/view/DisplayCutoutCompat;\nHSPLandroidx/core/view/DisplayCutoutCompat;->wrap(Landroid/view/DisplayCutout;)Landroidx/core/view/DisplayCutoutCompat;\nPLandroidx/core/view/DisplayCutoutCompat;->wrap(Landroid/view/DisplayCutout;)Landroidx/core/view/DisplayCutoutCompat;\nLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V\nPLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationChannelGroup;Ljava/lang/String;)V\nHSPLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/Context;)Ljava/util/concurrent/Executor;\nPLandroidx/core/view/DisplayCutoutCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/Context;)Ljava/util/concurrent/Executor;\nLandroidx/core/view/KeyEventDispatcher$Component;\nLandroidx/core/view/NestedScrollingParent2;\nLandroidx/core/view/NestedScrollingParent3;\nLandroidx/core/view/OnApplyWindowInsetsListener;\nLandroidx/core/view/OnReceiveContentViewBehavior;\nLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;\nHSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;-><init>(Landroid/view/View;)V\nPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;-><init>(Landroid/view/View;)V\nLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;\nHSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;-><init>(Landroid/view/View;)V\nPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;-><init>(Landroid/view/View;)V\nLandroidx/core/view/ViewCompat;\nHSPLandroidx/core/view/ViewCompat;-><clinit>()V\nPLandroidx/core/view/ViewCompat;-><clinit>()V\nHSPLandroidx/core/view/ViewCompat;->getContentCaptureSession(Landroid/view/View;)Landroidx/core/view/contentcapture/ContentCaptureSessionCompat;\nPLandroidx/core/view/ViewCompat;->getContentCaptureSession(Landroid/view/View;)Landroidx/core/view/contentcapture/ContentCaptureSessionCompat;\nHSPLandroidx/core/view/ViewCompat;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent;\nPLandroidx/core/view/ViewCompat;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent;\nHSPLandroidx/core/view/ViewCompat;->hasOnClickListeners(Landroid/view/View;)Z\nPLandroidx/core/view/ViewCompat;->hasOnClickListeners(Landroid/view/View;)Z\nHSPLandroidx/core/view/ViewCompat;->isLaidOut(Landroid/view/View;)Z\nPLandroidx/core/view/ViewCompat;->isLaidOut(Landroid/view/View;)Z\nHSPLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V\nPLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V\nHSPLandroidx/core/view/ViewCompat;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;I)V\nPLandroidx/core/view/ViewCompat;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;I)V\nHSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V\nPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V\nHSPLandroidx/core/view/ViewCompat;->setImportantForContentCapture(Landroid/view/View;)V\nPLandroidx/core/view/ViewCompat;->setImportantForContentCapture(Landroid/view/View;)V\nHSPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V\nPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V\nHSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V\nPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V\nLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;\nHSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>()V\nPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>()V\nLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;\nHSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;-><init>()V\nPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;-><init>()V\nLandroidx/core/view/ViewCompat$Api15Impl;\nHSPLandroidx/core/view/ViewCompat$Api15Impl;->hasOnClickListeners(Landroid/view/View;)Z\nPLandroidx/core/view/ViewCompat$Api15Impl;->hasOnClickListeners(Landroid/view/View;)Z\nLandroidx/core/view/ViewCompat$Api16Impl;\nHSPLandroidx/core/view/ViewCompat$Api16Impl;->getImportantForAccessibility(Landroid/view/View;)I\nPLandroidx/core/view/ViewCompat$Api16Impl;->getImportantForAccessibility(Landroid/view/View;)I\nHSPLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent;\nPLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent;\nHSPLandroidx/core/view/ViewCompat$Api16Impl;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V\nPLandroidx/core/view/ViewCompat$Api16Impl;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V\nHSPLandroidx/core/view/ViewCompat$Api16Impl;->setImportantForAccessibility(Landroid/view/View;I)V\nPLandroidx/core/view/ViewCompat$Api16Impl;->setImportantForAccessibility(Landroid/view/View;I)V\nLandroidx/core/view/ViewCompat$Api19Impl;\nHSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z\nPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z\nHSPLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z\nPLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z\nLandroidx/core/view/ViewCompat$Api20Impl;\nHSPLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;\nPLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;\nLandroidx/core/view/ViewCompat$Api21Impl;\nHSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V\nPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V\nLandroidx/core/view/ViewCompat$Api21Impl$1;\nHSPLandroidx/core/view/ViewCompat$Api21Impl$1;-><init>(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V\nPLandroidx/core/view/ViewCompat$Api21Impl$1;-><init>(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V\nHSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;\nPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;\nLandroidx/core/view/ViewCompat$Api23Impl;\nHSPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat;\nLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationManager;Ljava/util/List;)V\nPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/NotificationManager;Ljava/util/List;)V\nHSPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Ljava/util/List;)V\nPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Ljava/util/List;)V\nLandroidx/core/view/ViewCompat$Api29Impl;\nHSPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;\nPLandroidx/core/view/ViewCompat$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;\nHSPLandroidx/core/view/ViewCompat$Api29Impl;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V\nPLandroidx/core/view/ViewCompat$Api29Impl;->saveAttributeDataForStyleable(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V\nLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$2()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m$3()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession;\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V\nHSPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets;\nPLandroidx/core/view/ViewCompat$Api29Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets;\nLandroidx/core/view/ViewCompat$Api30Impl;\nHSPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V\nPLandroidx/core/view/ViewCompat$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V\nLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m()I\nPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m()I\nHSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V\nPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V\nHSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/WindowInsetsAnimation$Callback;)V\nPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/WindowInsetsAnimation$Callback;)V\nHSPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;Z)V\nPLandroidx/core/view/ViewCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;Z)V\nLandroidx/core/view/ViewKt;\nHSPLandroidx/core/view/ViewKt;-><init>()V\nPLandroidx/core/view/ViewKt;-><init>()V\nPLandroidx/core/view/ViewKt;->getAncestors(Landroidx/compose/ui/platform/AbstractComposeView;)Lkotlin/sequences/Sequence;\nHSPLandroidx/core/view/ViewKt;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V\nPLandroidx/core/view/ViewKt;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V\nPLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V\nPLandroidx/core/view/ViewKt$ancestors$1;-><init>()V\nHPLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/core/view/ViewPropertyAnimatorListener;\nLandroidx/core/view/WindowCompat$Api30Impl;\nHSPLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V\nPLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V\nLandroidx/core/view/WindowInsetsAnimationCompat$Callback;\nHSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;-><init>(I)V\nPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;-><init>(I)V\nHSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I\nPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I\nLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;\nHSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;-><init>(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V\nPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;-><init>(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V\nLandroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/WindowInsetsCompat;-><clinit>()V\nPLandroidx/core/view/WindowInsetsCompat;-><clinit>()V\nHSPLandroidx/core/view/WindowInsetsCompat;-><init>(Landroid/view/WindowInsets;)V\nPLandroidx/core/view/WindowInsetsCompat;-><init>(Landroid/view/WindowInsets;)V\nHSPLandroidx/core/view/WindowInsetsCompat;-><init>(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/core/view/WindowInsetsCompat;-><init>(Landroidx/core/view/WindowInsetsCompat;)V\nHSPLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V\nPLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V\nHSPLandroidx/core/view/WindowInsetsCompat;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat;\nPLandroidx/core/view/WindowInsetsCompat;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat;\nHSPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets;\nPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets;\nPLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I\nPLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I\nHSPLandroidx/core/view/WindowInsetsCompat;->isVisible(I)Z\nPLandroidx/core/view/WindowInsetsCompat;->isVisible(I)Z\nHSPLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V\nPLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V\nHSPLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V\nHSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets;\nPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets;\nHSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/View;Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat;\nHPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/View;Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat;\nLandroidx/core/view/WindowInsetsCompat$BuilderImpl;\nHSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;-><init>()V\nPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;-><init>()V\nHSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;-><init>(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;-><init>(Landroidx/core/view/WindowInsetsCompat;)V\nHSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V\nPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V\nLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;\nHSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;-><init>()V\nPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;-><init>()V\nHSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat;\nLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;\nHSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;-><init>()V\nPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;-><init>()V\nLandroidx/core/view/WindowInsetsCompat$Impl;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl;-><clinit>()V\nPLandroidx/core/view/WindowInsetsCompat$Impl;-><clinit>()V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl;-><init>(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl;-><init>(Landroidx/core/view/WindowInsetsCompat;)V\nLandroidx/core/view/WindowInsetsCompat$Impl20;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl20;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl20;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets;\nPLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V\nLandroidx/core/view/WindowInsetsCompat$Impl21;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl21;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl21;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat;\nLandroidx/core/view/WindowInsetsCompat$Impl28;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl28;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl28;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat;\nPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat;\nPLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat;\nLandroidx/core/view/WindowInsetsCompat$Impl29;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl29;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl29;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nLandroidx/core/view/WindowInsetsCompat$Impl30;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30;-><clinit>()V\nPLandroidx/core/view/WindowInsetsCompat$Impl30;-><clinit>()V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl30;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets;\nHPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets;\nPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z\nHPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z\nLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()I\nHPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsets;I)Landroid/graphics/Insets;\nHPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsets;I)Landroid/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$2()I\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$2()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3()I\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/view/WindowInsetsController;)V\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/view/WindowInsetsController;)V\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$4()I\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$4()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$5()I\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$5()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$6()I\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m$6()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()I\nHPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets;\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController;\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets;\nHPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets;\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;)I\nPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;)I\nHSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V\nLandroidx/core/view/WindowInsetsCompat$TypeImpl30;\nHSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I\nHPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I\nLandroidx/core/view/WindowInsetsControllerCompat;\nHSPLandroidx/core/view/WindowInsetsControllerCompat;-><init>(Landroid/view/View;Landroid/view/Window;)V\nPLandroidx/core/view/WindowInsetsControllerCompat;-><init>(Landroid/view/View;Landroid/view/Window;)V\nHSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightNavigationBars()Z\nPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightNavigationBars()Z\nHSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightStatusBars()Z\nPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightStatusBars()Z\nHSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V\nPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V\nHSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V\nPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V\nLandroidx/core/view/WindowInsetsControllerCompat$Impl30;\nHSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;-><init>(Landroid/view/Window;Landroidx/core/view/ContentInfoCompat$Builder;)V\nPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;-><init>(Landroid/view/Window;Landroidx/core/view/ContentInfoCompat$Builder;)V\nHSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightNavigationBars()Z\nPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightNavigationBars()Z\nHSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightStatusBars()Z\nPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightStatusBars()Z\nHSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V\nPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V\nHSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V\nPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V\nLandroidx/core/view/accessibility/AccessibilityEventCompat;\nLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeInfo;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeInfo;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(I)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(I)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addChild(Landroid/view/View;I)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addChild(Landroid/view/View;I)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList;\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence;\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocusable()Z\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocusable()Z\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocused()Z\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocused()Z\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->obtain()Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->obtain()Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setAccessibilityFocused(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setAccessibilityFocused(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setBoundsInScreen(Landroid/graphics/Rect;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setBoundsInScreen(Landroid/graphics/Rect;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCheckable(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCheckable(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/CharSequence;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClickable(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClickable(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setContentDescription(Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setContentDescription(Ljava/lang/CharSequence;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEditable(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEditable(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEnabled(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEnabled(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocusable(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocusable(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocused(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocused(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setImportantForAccessibility()V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setImportantForAccessibility()V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setLongClickable(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setLongClickable(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setMovementGranularities(I)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setMovementGranularities(I)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPackageName(Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPackageName(Ljava/lang/CharSequence;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPaneTitle(Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPaneTitle(Ljava/lang/CharSequence;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;I)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;I)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPassword(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPassword(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setRoleDescription(Ljava/lang/String;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setRoleDescription(Ljava/lang/String;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setScreenReaderFocusable(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setScreenReaderFocusable(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSelected(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSelected(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSource(Landroid/view/View;I)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSource(Landroid/view/View;I)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setText(Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setText(Ljava/lang/CharSequence;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTextSelection(II)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTextSelection(II)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setVisibleToUser(Z)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setVisibleToUser(Z)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landroid/view/accessibility/AccessibilityNodeInfo;\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landroid/view/accessibility/AccessibilityNodeInfo;\nLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><clinit>()V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><clinit>()V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><init>(ILjava/lang/Class;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><init>(ILjava/lang/Class;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><init>(ILjava/lang/String;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><init>(ILjava/lang/String;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><init>(Ljava/lang/Object;ILjava/lang/String;Landroidx/core/view/accessibility/AccessibilityViewCommand;Ljava/lang/Class;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;-><init>(Ljava/lang/Object;ILjava/lang/String;Landroidx/core/view/accessibility/AccessibilityViewCommand;Ljava/lang/Class;)V\nLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;->getExtras(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/os/Bundle;\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;->getExtras(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/os/Bundle;\nLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;->setStateDescription(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V\nHPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;->setStateDescription(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V\nLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->obtain(IIIIZ)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->obtain(IIIIZ)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;\nLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;-><init>(Ljava/lang/Object;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;->obtain(III)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;\nPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;->obtain(III)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat;\nLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;\nHSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeProvider;)V\nPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Landroid/view/accessibility/AccessibilityNodeProvider;)V\nHSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->getProvider()Ljava/lang/Object;\nPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->getProvider()Ljava/lang/Object;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$MoveAtGranularityArguments;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$MoveHtmlArguments;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$MoveWindowArguments;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$ScrollToPositionArguments;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$SetProgressArguments;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$SetSelectionArguments;\nLandroidx/core/view/accessibility/AccessibilityViewCommand$SetTextArguments;\nLandroidx/customview/poolingcontainer/PoolingContainer;\nHSPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V\nPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V\nHSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;\nPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;\nLandroidx/customview/poolingcontainer/PoolingContainerListener;\nLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;\nHSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V\nPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V\nHSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V\nPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V\nLandroidx/datastore/core/CorruptionException;\nLandroidx/datastore/core/CorruptionHandler;\nLandroidx/datastore/core/Data;\nHSPLandroidx/datastore/core/Data;-><init>(Ljava/lang/Object;I)V\nPLandroidx/datastore/core/Data;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/datastore/core/Data;->getValue()Ljava/lang/Object;\nPLandroidx/datastore/core/Data;->getValue()Ljava/lang/Object;\nLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;-><init>(Ljava/util/List;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;-><init>(Ljava/util/List;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore$Companion;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore$Companion;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;-><init>(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;-><init>(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/core/DataStore;\nLandroidx/datastore/core/DataStoreFactory;\nHSPLandroidx/datastore/core/DataStoreFactory;-><clinit>()V\nPLandroidx/datastore/core/DataStoreFactory;-><clinit>()V\nHSPLandroidx/datastore/core/DataStoreFactory;->create(Landroidx/datastore/core/Serializer;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/SingleProcessDataStore;\nPLandroidx/datastore/core/DataStoreFactory;->create(Landroidx/datastore/core/Serializer;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/SingleProcessDataStore;\nLandroidx/datastore/core/Final;\nLandroidx/datastore/core/ReadException;\nLandroidx/datastore/core/Serializer;\nLandroidx/datastore/core/SimpleActor;\nHSPLandroidx/datastore/core/SimpleActor;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/datastore/core/SimpleActor;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V\nHSPLandroidx/datastore/core/SimpleActor;->access$getConsumeMessage$p(Landroidx/datastore/core/SimpleActor;)Lkotlin/jvm/functions/Function2;\nPLandroidx/datastore/core/SimpleActor;->access$getConsumeMessage$p(Landroidx/datastore/core/SimpleActor;)Lkotlin/jvm/functions/Function2;\nHSPLandroidx/datastore/core/SimpleActor;->access$getMessageQueue$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/channels/Channel;\nPLandroidx/datastore/core/SimpleActor;->access$getMessageQueue$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/channels/Channel;\nHSPLandroidx/datastore/core/SimpleActor;->access$getRemainingMessages$p(Landroidx/datastore/core/SimpleActor;)Ljava/util/concurrent/atomic/AtomicInteger;\nPLandroidx/datastore/core/SimpleActor;->access$getRemainingMessages$p(Landroidx/datastore/core/SimpleActor;)Ljava/util/concurrent/atomic/AtomicInteger;\nHSPLandroidx/datastore/core/SimpleActor;->access$getScope$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/CoroutineScope;\nPLandroidx/datastore/core/SimpleActor;->access$getScope$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/CoroutineScope;\nHSPLandroidx/datastore/core/SimpleActor;->offer(Ljava/lang/Object;)V\nPLandroidx/datastore/core/SimpleActor;->offer(Ljava/lang/Object;)V\nLandroidx/datastore/core/SimpleActor$1;\nHSPLandroidx/datastore/core/SimpleActor$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/datastore/core/SimpleActor;Lkotlin/jvm/functions/Function2;)V\nPLandroidx/datastore/core/SimpleActor$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/datastore/core/SimpleActor;Lkotlin/jvm/functions/Function2;)V\nLandroidx/datastore/core/SimpleActor$offer$2;\nHSPLandroidx/datastore/core/SimpleActor$offer$2;-><init>(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SimpleActor$offer$2;-><init>(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore;\nHSPLandroidx/datastore/core/SingleProcessDataStore;-><clinit>()V\nPLandroidx/datastore/core/SingleProcessDataStore;-><clinit>()V\nHSPLandroidx/datastore/core/SingleProcessDataStore;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/datastore/core/Serializer;Ljava/util/List;Lorg/acra/log/AndroidLogDelegate;Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/datastore/core/SingleProcessDataStore;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/datastore/core/Serializer;Ljava/util/List;Lorg/acra/log/AndroidLogDelegate;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFiles$cp()Ljava/util/LinkedHashSet;\nPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFiles$cp()Ljava/util/LinkedHashSet;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFilesLock$cp()Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFilesLock$cp()Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActor$p(Landroidx/datastore/core/SingleProcessDataStore;)Landroidx/datastore/core/SimpleActor;\nPLandroidx/datastore/core/SingleProcessDataStore;->access$getActor$p(Landroidx/datastore/core/SingleProcessDataStore;)Landroidx/datastore/core/SimpleActor;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->access$getDownstreamFlow$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLandroidx/datastore/core/SingleProcessDataStore;->access$getDownstreamFlow$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->access$getProduceFile$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlin/jvm/functions/Function0;\nPLandroidx/datastore/core/SingleProcessDataStore;->access$getProduceFile$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlin/jvm/functions/Function0;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->access$handleRead(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore;->access$handleRead(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/Flow;\nPLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/Flow;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File;\nPLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$Companion;\nHSPLandroidx/datastore/core/SingleProcessDataStore$Companion;-><init>()V\nPLandroidx/datastore/core/SingleProcessDataStore$Companion;-><init>()V\nHSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->access$runMigrations(Landroidx/datastore/core/SingleProcessDataStore$Companion;Ljava/util/List;Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$Companion;->access$runMigrations(Landroidx/datastore/core/SingleProcessDataStore$Companion;Ljava/util/List;Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$Message;\nHSPLandroidx/datastore/core/SingleProcessDataStore$Message;-><init>()V\nPLandroidx/datastore/core/SingleProcessDataStore$Message;-><init>()V\nLandroidx/datastore/core/SingleProcessDataStore$Message$Read;\nHSPLandroidx/datastore/core/SingleProcessDataStore$Message$Read;-><init>(Landroidx/datastore/core/State;)V\nPLandroidx/datastore/core/SingleProcessDataStore$Message$Read;-><init>(Landroidx/datastore/core/State;)V\nLandroidx/datastore/core/SingleProcessDataStore$actor$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;)V\nPLandroidx/datastore/core/SingleProcessDataStore$actor$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;)V\nLandroidx/datastore/core/SingleProcessDataStore$actor$2;\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;-><clinit>()V\nPLandroidx/datastore/core/SingleProcessDataStore$actor$2;-><clinit>()V\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;-><init>()V\nPLandroidx/datastore/core/SingleProcessDataStore$actor$2;-><init>()V\nLandroidx/datastore/core/SingleProcessDataStore$actor$3;\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$actor$3;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$data$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$data$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$data$1$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;-><init>(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;-><init>(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;)V\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/SingleProcessDataStore$file$2;\nHSPLandroidx/datastore/core/SingleProcessDataStore$file$2;-><init>(Landroidx/datastore/core/SingleProcessDataStore;)V\nPLandroidx/datastore/core/SingleProcessDataStore$file$2;-><init>(Landroidx/datastore/core/SingleProcessDataStore;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;-><init>(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V\nPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;-><init>(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V\nHSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/SingleProcessDataStore$readData$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$readData$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$readData$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;\nHSPLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nPLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;-><init>(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V\nLandroidx/datastore/core/State;\nHSPLandroidx/datastore/core/State;-><init>()V\nPLandroidx/datastore/core/State;-><init>()V\nLandroidx/datastore/core/UnInitialized;\nHSPLandroidx/datastore/core/UnInitialized;-><clinit>()V\nPLandroidx/datastore/core/UnInitialized;-><clinit>()V\nHSPLandroidx/datastore/core/UnInitialized;-><init>()V\nPLandroidx/datastore/core/UnInitialized;-><init>()V\nLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;\nHSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;-><clinit>()V\nPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;-><clinit>()V\nHSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;-><init>()V\nPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;-><init>()V\nHSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/datastore/preferences/PreferenceDataStoreFile;\nHSPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStore$default()Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;\nPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStore$default()Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;\nHSPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File;\nPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File;\nLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;\nHSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)V\nPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->access$getName$p(Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)Ljava/lang/String;\nPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->access$getName$p(Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)Ljava/lang/String;\nHSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;\nPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;\nLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;\nHSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;-><init>(Landroid/content/Context;Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)V\nPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;-><init>(Landroid/content/Context;Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)V\nHSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/lang/Object;\nPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/lang/Object;\nLandroidx/datastore/preferences/core/MutablePreferences;\nHSPLandroidx/datastore/preferences/core/MutablePreferences;-><init>(Ljava/util/Map;Z)V\nPLandroidx/datastore/preferences/core/MutablePreferences;-><init>(Ljava/util/Map;Z)V\nHSPLandroidx/datastore/preferences/core/MutablePreferences;-><init>(Z)V\nPLandroidx/datastore/preferences/core/MutablePreferences;-><init>(Z)V\nHSPLandroidx/datastore/preferences/core/MutablePreferences;->equals(Ljava/lang/Object;)Z\nPLandroidx/datastore/preferences/core/MutablePreferences;->equals(Ljava/lang/Object;)Z\nHSPLandroidx/datastore/preferences/core/MutablePreferences;->get(Landroidx/datastore/preferences/core/Preferences$Key;)Ljava/lang/Object;\nPLandroidx/datastore/preferences/core/MutablePreferences;->get(Landroidx/datastore/preferences/core/Preferences$Key;)Ljava/lang/Object;\nHSPLandroidx/datastore/preferences/core/MutablePreferences;->hashCode()I\nPLandroidx/datastore/preferences/core/MutablePreferences;->hashCode()I\nLandroidx/datastore/preferences/core/PreferenceDataStore;\nHSPLandroidx/datastore/preferences/core/PreferenceDataStore;-><init>(Landroidx/datastore/core/SingleProcessDataStore;)V\nPLandroidx/datastore/preferences/core/PreferenceDataStore;-><init>(Landroidx/datastore/core/SingleProcessDataStore;)V\nHSPLandroidx/datastore/preferences/core/PreferenceDataStore;->getData()Lkotlinx/coroutines/flow/Flow;\nPLandroidx/datastore/preferences/core/PreferenceDataStore;->getData()Lkotlinx/coroutines/flow/Flow;\nLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;\nHSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/lang/Object;\nPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/lang/Object;\nLandroidx/datastore/preferences/core/Preferences$Key;\nHSPLandroidx/datastore/preferences/core/Preferences$Key;-><init>(Ljava/lang/String;)V\nPLandroidx/datastore/preferences/core/Preferences$Key;-><init>(Ljava/lang/String;)V\nHSPLandroidx/datastore/preferences/core/Preferences$Key;->hashCode()I\nPLandroidx/datastore/preferences/core/Preferences$Key;->hashCode()I\nLandroidx/datastore/preferences/core/PreferencesSerializer;\nHSPLandroidx/datastore/preferences/core/PreferencesSerializer;-><clinit>()V\nPLandroidx/datastore/preferences/core/PreferencesSerializer;-><clinit>()V\nHSPLandroidx/datastore/preferences/core/PreferencesSerializer;-><init>()V\nPLandroidx/datastore/preferences/core/PreferencesSerializer;-><init>()V\nHSPLandroidx/datastore/preferences/core/PreferencesSerializer;->create(Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/preferences/core/PreferenceDataStore;\nPLandroidx/datastore/preferences/core/PreferencesSerializer;->create(Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/preferences/core/PreferenceDataStore;\nHSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Ljava/lang/Object;\nPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Ljava/lang/Object;\nLandroidx/datastore/preferences/protobuf/InvalidProtocolBufferException;\nLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;\nHSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V\nPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V\nHSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;\nPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;\nLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;\nHSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;\nPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;\nLandroidx/emoji2/text/DefaultEmojiCompatConfig;\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;-><init>()V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig;-><init>()V\nLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->$r8$lambda$2V1iWTiAwNxOBlVvz73bbuEdzIw(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->$r8$lambda$2V1iWTiAwNxOBlVvz73bbuEdzIw(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;-><init>()V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;-><init>()V\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;-><init>(Landroid/content/Context;)V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;-><init>(Landroid/content/Context;)V\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->load(Landroidx/emoji2/text/DefaultEmojiCompatConfig;)V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->load(Landroidx/emoji2/text/DefaultEmojiCompatConfig;)V\nLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;-><init>()V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;-><init>()V\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List;\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List;\nLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;\nHSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;-><init>()V\nPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;-><init>()V\nLandroidx/emoji2/text/DefaultGlyphChecker;\nHSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V\nPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V\nHSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V\nPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V\nLandroidx/emoji2/text/EmojiCompat;\nHSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V\nPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V\nHSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/EmojiCompat$Config;)V\nPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/EmojiCompat$Config;)V\nHSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;\nPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;\nHSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I\nPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I\nHSPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)V\nPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)V\nHSPLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z\nPLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z\nHSPLandroidx/emoji2/text/EmojiCompat;->load()V\nPLandroidx/emoji2/text/EmojiCompat;->load()V\nHSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadFailed(Ljava/lang/Throwable;)V\nPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadFailed(Ljava/lang/Throwable;)V\nHSPLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V\nPLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V\nLandroidx/emoji2/text/EmojiCompat$CompatInternal;\nHSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;-><init>(Landroidx/emoji2/text/EmojiCompat;)V\nPLandroidx/emoji2/text/EmojiCompat$CompatInternal;-><init>(Landroidx/emoji2/text/EmojiCompat;)V\nLandroidx/emoji2/text/EmojiCompat$CompatInternal19;\nHSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V\nPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V\nLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;\nHSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V\nPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V\nHSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onFailed(Ljava/lang/Throwable;)V\nPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onFailed(Ljava/lang/Throwable;)V\nLandroidx/emoji2/text/EmojiCompat$Config;\nHSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V\nPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V\nLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;\nHSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;-><init>()V\nPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;-><init>()V\nLandroidx/emoji2/text/EmojiCompat$GlyphChecker;\nLandroidx/emoji2/text/EmojiCompat$InitCallback;\nHSPLandroidx/emoji2/text/EmojiCompat$InitCallback;-><init>()V\nPLandroidx/emoji2/text/EmojiCompat$InitCallback;-><init>()V\nLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;\nHSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V\nPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/List;ILjava/lang/Throwable;)V\nHSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V\nPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V\nLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;\nLandroidx/emoji2/text/EmojiCompatInitializer;\nHSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()V\nPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()V\nHSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean;\nPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean;\nHSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nHSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;\nPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;\nLandroidx/emoji2/text/EmojiCompatInitializer$1;\nHSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V\nPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V\nHSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;\nHSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V\nPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;Landroidx/emoji2/text/DefaultEmojiCompatConfig;Ljava/util/concurrent/ThreadPoolExecutor;)V\nHSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V\nPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V\nLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;\nHSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;-><init>()V\nPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;-><init>()V\nHSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V\nPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V\nLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;\nLandroidx/emoji2/text/FontRequestEmojiCompatConfig;\nHSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V\nPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V\nHSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;)V\nPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;)V\nLandroidx/fragment/app/DialogFragment$1;\nHSPLandroidx/fragment/app/DialogFragment$1;-><init>(Ljava/lang/Object;I)V\nPLandroidx/fragment/app/DialogFragment$1;-><init>(Ljava/lang/Object;I)V\nLandroidx/fragment/app/FragmentActivity;\nHSPLandroidx/fragment/app/FragmentActivity;-><init>()V\nPLandroidx/fragment/app/FragmentActivity;-><init>()V\nPLandroidx/fragment/app/FragmentActivity;->getSupportFragmentManager()Landroidx/fragment/app/FragmentManager;\nPLandroidx/fragment/app/FragmentActivity;->markFragmentsCreated()V\nPLandroidx/fragment/app/FragmentActivity;->markState(Landroidx/fragment/app/FragmentManager;)Z\nHSPLandroidx/fragment/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V\nPLandroidx/fragment/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V\nHSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nHPLandroidx/fragment/app/FragmentActivity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nHSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nHPLandroidx/fragment/app/FragmentActivity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nPLandroidx/fragment/app/FragmentActivity;->onDestroy()V\nPLandroidx/fragment/app/FragmentActivity;->onPause()V\nHSPLandroidx/fragment/app/FragmentActivity;->onPostResume()V\nPLandroidx/fragment/app/FragmentActivity;->onPostResume()V\nHSPLandroidx/fragment/app/FragmentActivity;->onResume()V\nPLandroidx/fragment/app/FragmentActivity;->onResume()V\nHSPLandroidx/fragment/app/FragmentActivity;->onStart()V\nPLandroidx/fragment/app/FragmentActivity;->onStart()V\nHSPLandroidx/fragment/app/FragmentActivity;->onStateNotSaved()V\nPLandroidx/fragment/app/FragmentActivity;->onStateNotSaved()V\nPLandroidx/fragment/app/FragmentActivity;->onStop()V\nLandroidx/fragment/app/FragmentActivity$1;\nHSPLandroidx/fragment/app/FragmentActivity$1;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nPLandroidx/fragment/app/FragmentActivity$1;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nPLandroidx/fragment/app/FragmentActivity$1;->saveState()Landroid/os/Bundle;\nLandroidx/fragment/app/FragmentActivity$2;\nHSPLandroidx/fragment/app/FragmentActivity$2;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nPLandroidx/fragment/app/FragmentActivity$2;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nHSPLandroidx/fragment/app/FragmentActivity$2;->onContextAvailable(Landroid/content/Context;)V\nPLandroidx/fragment/app/FragmentActivity$2;->onContextAvailable(Landroid/content/Context;)V\nLandroidx/fragment/app/FragmentActivity$HostCallbacks;\nHSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nPLandroidx/fragment/app/FragmentActivity$HostCallbacks;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nHSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;\nPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;\nHSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nHSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;\nPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;\nHSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;\nPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;\nLandroidx/fragment/app/FragmentContainer;\nHSPLandroidx/fragment/app/FragmentContainer;-><init>()V\nPLandroidx/fragment/app/FragmentContainer;-><init>()V\nLandroidx/fragment/app/FragmentContainerView;\nLandroidx/fragment/app/FragmentController;\nHSPLandroidx/fragment/app/FragmentController;-><init>(Landroidx/fragment/app/FragmentHostCallback;)V\nPLandroidx/fragment/app/FragmentController;-><init>(Landroidx/fragment/app/FragmentHostCallback;)V\nHSPLandroidx/fragment/app/FragmentController;->attachHost()V\nPLandroidx/fragment/app/FragmentController;->attachHost()V\nHSPLandroidx/fragment/app/FragmentController;->createController(Landroidx/fragment/app/FragmentHostCallback;)Landroidx/fragment/app/FragmentController;\nPLandroidx/fragment/app/FragmentController;->createController(Landroidx/fragment/app/FragmentHostCallback;)Landroidx/fragment/app/FragmentController;\nHSPLandroidx/fragment/app/FragmentController;->dispatchActivityCreated()V\nPLandroidx/fragment/app/FragmentController;->dispatchActivityCreated()V\nHSPLandroidx/fragment/app/FragmentController;->dispatchCreate()V\nPLandroidx/fragment/app/FragmentController;->dispatchCreate()V\nPLandroidx/fragment/app/FragmentController;->dispatchDestroy()V\nPLandroidx/fragment/app/FragmentController;->dispatchPause()V\nHSPLandroidx/fragment/app/FragmentController;->dispatchResume()V\nPLandroidx/fragment/app/FragmentController;->dispatchResume()V\nHSPLandroidx/fragment/app/FragmentController;->dispatchStart()V\nPLandroidx/fragment/app/FragmentController;->dispatchStart()V\nPLandroidx/fragment/app/FragmentController;->dispatchStop()V\nHSPLandroidx/fragment/app/FragmentController;->execPendingActions()V\nPLandroidx/fragment/app/FragmentController;->execPendingActions()V\nPLandroidx/fragment/app/FragmentController;->getSupportFragmentManager()Landroidx/fragment/app/FragmentManager;\nHSPLandroidx/fragment/app/FragmentController;->noteStateNotSaved()V\nPLandroidx/fragment/app/FragmentController;->noteStateNotSaved()V\nHSPLandroidx/fragment/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nPLandroidx/fragment/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nPLandroidx/fragment/app/FragmentController;->saveAllState()Landroid/os/Parcelable;\nLandroidx/fragment/app/FragmentFactory;\nHSPLandroidx/fragment/app/FragmentFactory;-><clinit>()V\nPLandroidx/fragment/app/FragmentFactory;-><clinit>()V\nHSPLandroidx/fragment/app/FragmentFactory;-><init>()V\nPLandroidx/fragment/app/FragmentFactory;-><init>()V\nLandroidx/fragment/app/FragmentHostCallback;\nHSPLandroidx/fragment/app/FragmentHostCallback;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nPLandroidx/fragment/app/FragmentHostCallback;-><init>(Landroidx/appcompat/app/AppCompatActivity;)V\nHSPLandroidx/fragment/app/FragmentHostCallback;->getHandler()Landroid/os/Handler;\nPLandroidx/fragment/app/FragmentHostCallback;->getHandler()Landroid/os/Handler;\nLandroidx/fragment/app/FragmentLayoutInflaterFactory;\nHSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;-><init>(Landroidx/fragment/app/FragmentManager;)V\nPLandroidx/fragment/app/FragmentLayoutInflaterFactory;-><init>(Landroidx/fragment/app/FragmentManager;)V\nHSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nHPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;\nLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;\nHSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;-><init>(Landroidx/fragment/app/FragmentManager;)V\nPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;-><init>(Landroidx/fragment/app/FragmentManager;)V\nLandroidx/fragment/app/FragmentManager;\nHSPLandroidx/fragment/app/FragmentManager;-><init>()V\nHPLandroidx/fragment/app/FragmentManager;-><init>()V\nHSPLandroidx/fragment/app/FragmentManager;->attachController(Landroidx/fragment/app/FragmentHostCallback;Landroidx/fragment/app/FragmentContainer;Landroidx/fragment/app/Fragment;)V\nPLandroidx/fragment/app/FragmentManager;->attachController(Landroidx/fragment/app/FragmentHostCallback;Landroidx/fragment/app/FragmentContainer;Landroidx/fragment/app/Fragment;)V\nHSPLandroidx/fragment/app/FragmentManager;->collectAllSpecialEffectsController()Ljava/util/HashSet;\nHPLandroidx/fragment/app/FragmentManager;->collectAllSpecialEffectsController()Ljava/util/HashSet;\nHSPLandroidx/fragment/app/FragmentManager;->dispatchActivityCreated()V\nPLandroidx/fragment/app/FragmentManager;->dispatchActivityCreated()V\nHSPLandroidx/fragment/app/FragmentManager;->dispatchCreate()V\nPLandroidx/fragment/app/FragmentManager;->dispatchCreate()V\nPLandroidx/fragment/app/FragmentManager;->dispatchDestroy()V\nPLandroidx/fragment/app/FragmentManager;->dispatchPause()V\nHSPLandroidx/fragment/app/FragmentManager;->dispatchResume()V\nPLandroidx/fragment/app/FragmentManager;->dispatchResume()V\nHSPLandroidx/fragment/app/FragmentManager;->dispatchStart()V\nPLandroidx/fragment/app/FragmentManager;->dispatchStart()V\nHSPLandroidx/fragment/app/FragmentManager;->dispatchStateChange(I)V\nHPLandroidx/fragment/app/FragmentManager;->dispatchStateChange(I)V\nPLandroidx/fragment/app/FragmentManager;->dispatchStop()V\nHSPLandroidx/fragment/app/FragmentManager;->doPendingDeferredStart()V\nPLandroidx/fragment/app/FragmentManager;->doPendingDeferredStart()V\nHSPLandroidx/fragment/app/FragmentManager;->ensureExecReady(Z)V\nHPLandroidx/fragment/app/FragmentManager;->ensureExecReady(Z)V\nHSPLandroidx/fragment/app/FragmentManager;->execPendingActions(Z)Z\nHPLandroidx/fragment/app/FragmentManager;->execPendingActions(Z)Z\nPLandroidx/fragment/app/FragmentManager;->forcePostponedTransactions()V\nHSPLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I\nPLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I\nPLandroidx/fragment/app/FragmentManager;->getFragments()Ljava/util/List;\nHSPLandroidx/fragment/app/FragmentManager;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2;\nPLandroidx/fragment/app/FragmentManager;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2;\nPLandroidx/fragment/app/FragmentManager;->isLoggingEnabled(I)Z\nHSPLandroidx/fragment/app/FragmentManager;->isStateSaved()Z\nPLandroidx/fragment/app/FragmentManager;->isStateSaved()Z\nHSPLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V\nPLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V\nHSPLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V\nPLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V\nPLandroidx/fragment/app/FragmentManager;->saveAllState()Landroid/os/Parcelable;\nHSPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V\nHPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V\nHSPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V\nHPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V\nLandroidx/fragment/app/FragmentManager$1;\nHSPLandroidx/fragment/app/FragmentManager$1;-><init>(Landroidx/fragment/app/FragmentManager;)V\nPLandroidx/fragment/app/FragmentManager$1;-><init>(Landroidx/fragment/app/FragmentManager;)V\nLandroidx/fragment/app/FragmentManager$2;\nHSPLandroidx/fragment/app/FragmentManager$2;-><init>(Landroidx/fragment/app/FragmentManager;)V\nPLandroidx/fragment/app/FragmentManager$2;-><init>(Landroidx/fragment/app/FragmentManager;)V\nLandroidx/fragment/app/FragmentManager$3;\nHSPLandroidx/fragment/app/FragmentManager$3;-><init>(Landroidx/fragment/app/FragmentManager;)V\nPLandroidx/fragment/app/FragmentManager$3;-><init>(Landroidx/fragment/app/FragmentManager;)V\nLandroidx/fragment/app/FragmentManager$9;\nHSPLandroidx/fragment/app/FragmentManager$9;-><init>(Landroidx/fragment/app/FragmentManager;I)V\nPLandroidx/fragment/app/FragmentManager$9;-><init>(Landroidx/fragment/app/FragmentManager;I)V\nLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;\nHSPLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;-><init>()V\nPLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;-><init>()V\nLandroidx/fragment/app/FragmentManagerImpl;\nHSPLandroidx/fragment/app/FragmentManagerImpl;-><init>()V\nPLandroidx/fragment/app/FragmentManagerImpl;-><init>()V\nLandroidx/fragment/app/FragmentManagerViewModel;\nHSPLandroidx/fragment/app/FragmentManagerViewModel;-><clinit>()V\nPLandroidx/fragment/app/FragmentManagerViewModel;-><clinit>()V\nHSPLandroidx/fragment/app/FragmentManagerViewModel;-><init>(Z)V\nPLandroidx/fragment/app/FragmentManagerViewModel;-><init>(Z)V\nHSPLandroidx/fragment/app/FragmentManagerViewModel;->getInstance(Landroidx/lifecycle/ViewModelStore;)Landroidx/fragment/app/FragmentManagerViewModel;\nPLandroidx/fragment/app/FragmentManagerViewModel;->getInstance(Landroidx/lifecycle/ViewModelStore;)Landroidx/fragment/app/FragmentManagerViewModel;\nPLandroidx/fragment/app/FragmentManagerViewModel;->onCleared()V\nHSPLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V\nPLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V\nLandroidx/fragment/app/FragmentManagerViewModel$1;\nHSPLandroidx/fragment/app/FragmentManagerViewModel$1;-><init>()V\nPLandroidx/fragment/app/FragmentManagerViewModel$1;-><init>()V\nHSPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;\nPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;\nLandroidx/fragment/app/FragmentOnAttachListener;\nLandroidx/fragment/app/FragmentStore;\nHSPLandroidx/fragment/app/FragmentStore;-><init>()V\nPLandroidx/fragment/app/FragmentStore;-><init>()V\nHSPLandroidx/fragment/app/FragmentStore;->burpActive()V\nHPLandroidx/fragment/app/FragmentStore;->burpActive()V\nHSPLandroidx/fragment/app/FragmentStore;->dispatchStateChange(I)V\nHPLandroidx/fragment/app/FragmentStore;->dispatchStateChange(I)V\nHSPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/ArrayList;\nHPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/ArrayList;\nHSPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List;\nHPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List;\nHSPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V\nHPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V\nPLandroidx/fragment/app/FragmentStore;->saveActiveFragments()Ljava/util/ArrayList;\nHSPLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V\nPLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V\nLandroidx/glance/appwidget/GlanceAppWidget;\nHSPLandroidx/glance/appwidget/GlanceAppWidget;-><init>()V\nPLandroidx/glance/appwidget/GlanceAppWidget;-><init>()V\nLandroidx/glance/appwidget/GlanceAppWidgetKt;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetKt;->updateAll(Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget;Landroid/content/Context;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetKt;->updateAll(Ltachiyomi/presentation/widget/UpdatesGridGlanceWidget;Landroid/content/Context;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetKt$updateAll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/glance/appwidget/GlanceAppWidgetManager;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager;-><clinit>()V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager;-><clinit>()V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager;-><init>(Landroid/content/Context;)V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager;-><init>(Landroid/content/Context;)V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getOrCreateDataStore(Landroidx/glance/appwidget/GlanceAppWidgetManager;)Landroidx/datastore/core/DataStore;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getOrCreateDataStore(Landroidx/glance/appwidget/GlanceAppWidgetManager;)Landroidx/datastore/core/DataStore;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getState(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager;->access$getState(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->getGlanceIds(Ljava/lang/Class;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager;->getGlanceIds(Ljava/lang/Class;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager;->getState(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager;->getState(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;-><clinit>()V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;-><clinit>()V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;-><init>()V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$Companion;-><init>()V\nLandroidx/glance/appwidget/GlanceAppWidgetManager$State;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;-><init>()V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;-><init>()V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;-><init>(Ljava/util/Map;Ljava/util/Map;)V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;-><init>(Ljava/util/Map;Ljava/util/Map;)V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->getProviderNameToReceivers()Ljava/util/Map;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$State;->getProviderNameToReceivers()Ljava/util/Map;\nLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;-><init>(Ljava/lang/Object;I)V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;->invoke()Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$dataStore$2;->invoke()Ljava/lang/Object;\nLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;-><init>(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;-><init>(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$getGlanceIds$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;-><init>(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;-><init>(Landroidx/glance/appwidget/GlanceAppWidgetManager;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/glance/appwidget/GlanceAppWidgetManager$getState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/glance/appwidget/SizeMode;\nLandroidx/glance/appwidget/SizeMode$Exact;\nHSPLandroidx/glance/appwidget/SizeMode$Exact;-><clinit>()V\nPLandroidx/glance/appwidget/SizeMode$Exact;-><clinit>()V\nHSPLandroidx/glance/appwidget/SizeMode$Exact;-><init>()V\nPLandroidx/glance/appwidget/SizeMode$Exact;-><init>()V\nLandroidx/glance/session/Api33Impl$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/glance/session/Api33Impl$$ExternalSyntheticApiModelOutline0;->m(I)I\nPLandroidx/glance/session/Api33Impl$$ExternalSyntheticApiModelOutline0;->m(I)I\nLandroidx/glance/session/SessionManager;\nLandroidx/glance/session/SessionManagerImpl;\nHSPLandroidx/glance/session/SessionManagerImpl;-><init>()V\nPLandroidx/glance/session/SessionManagerImpl;-><init>()V\nLandroidx/glance/session/SessionManagerKt;\nHSPLandroidx/glance/session/SessionManagerKt;-><clinit>()V\nPLandroidx/glance/session/SessionManagerKt;-><clinit>()V\nHSPLandroidx/glance/session/SessionManagerKt;->getGlanceSessionManager()Landroidx/glance/session/SessionManagerImpl;\nPLandroidx/glance/session/SessionManagerKt;->getGlanceSessionManager()Landroidx/glance/session/SessionManagerImpl;\nLandroidx/glance/state/GlanceStateDefinition;\nLandroidx/glance/state/PreferencesGlanceStateDefinition;\nHSPLandroidx/glance/state/PreferencesGlanceStateDefinition;-><clinit>()V\nPLandroidx/glance/state/PreferencesGlanceStateDefinition;-><clinit>()V\nHSPLandroidx/glance/state/PreferencesGlanceStateDefinition;-><init>()V\nPLandroidx/glance/state/PreferencesGlanceStateDefinition;-><init>()V\nLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;\nHSPLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;-><clinit>()V\nPLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;-><clinit>()V\nHSPLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;-><init>()V\nPLandroidx/interpolator/view/animation/FastOutSlowInInterpolator;-><init>()V\nLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;\nHSPLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;-><clinit>()V\nPLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;-><clinit>()V\nHSPLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;-><init>()V\nPLandroidx/interpolator/view/animation/LinearOutSlowInInterpolator;-><init>()V\nLandroidx/interpolator/view/animation/LookupTableInterpolator;\nHSPLandroidx/interpolator/view/animation/LookupTableInterpolator;-><init>([F)V\nPLandroidx/interpolator/view/animation/LookupTableInterpolator;-><init>([F)V\nHSPLandroidx/interpolator/view/animation/LookupTableInterpolator;->getInterpolation(F)F\nHPLandroidx/interpolator/view/animation/LookupTableInterpolator;->getInterpolation(F)F\nLandroidx/lifecycle/DefaultLifecycleObserver;\nHSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V\nLandroidx/lifecycle/DefaultLifecycleObserverAdapter;\nHSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V\nHPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V\nHSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;\nHSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V\nPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;-><clinit>()V\nLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;\nHSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;-><init>()V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;-><init>()V\nHSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V\nHPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V\nHSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V\nLandroidx/lifecycle/HasDefaultViewModelProviderFactory;\nLandroidx/lifecycle/Lifecycle;\nHSPLandroidx/lifecycle/Lifecycle;-><init>()V\nHPLandroidx/lifecycle/Lifecycle;-><init>()V\nHSPLandroidx/lifecycle/Lifecycle;->getInternalScopeRef()Ljava/util/concurrent/atomic/AtomicReference;\nPLandroidx/lifecycle/Lifecycle;->getInternalScopeRef()Ljava/util/concurrent/atomic/AtomicReference;\nLandroidx/lifecycle/Lifecycle$Event;\nHSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V\nPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V\nHSPLandroidx/lifecycle/Lifecycle$Event;-><init>(Ljava/lang/String;I)V\nPLandroidx/lifecycle/Lifecycle$Event;-><init>(Ljava/lang/String;I)V\nHSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;\nHPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;\nHSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;\nPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;\nLandroidx/lifecycle/Lifecycle$Event$Companion;\nHSPLandroidx/lifecycle/Lifecycle$Event$Companion;-><init>()V\nPLandroidx/lifecycle/Lifecycle$Event$Companion;-><init>()V\nHSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;\nHPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;\nLandroidx/lifecycle/Lifecycle$Event$WhenMappings;\nHSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V\nPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;-><clinit>()V\nLandroidx/lifecycle/Lifecycle$State;\nHSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V\nPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V\nHSPLandroidx/lifecycle/Lifecycle$State;-><init>(Ljava/lang/String;I)V\nPLandroidx/lifecycle/Lifecycle$State;-><init>(Ljava/lang/String;I)V\nHSPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z\nHPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z\nLandroidx/lifecycle/LifecycleCoroutineScopeImpl;\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;-><init>(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V\nPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;-><init>(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getLifecycle$lifecycle_common()Landroidx/lifecycle/Lifecycle;\nPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getLifecycle$lifecycle_common()Landroidx/lifecycle/Lifecycle;\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;-><init>(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V\nPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;-><init>(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/lifecycle/LifecycleDispatcher;\nHSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V\nPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V\nHSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V\nPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V\nLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;\nHSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V\nPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V\nHSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nLandroidx/lifecycle/LifecycleEventObserver;\nLandroidx/lifecycle/LifecycleObserver;\nLandroidx/lifecycle/LifecycleOwner;\nLandroidx/lifecycle/LifecycleRegistry;\nHSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V\nHPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V\nHPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V\nHSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;\nHPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;\nHSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V\nHPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V\nHSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State;\nHPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State;\nHSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V\nPLandroidx/lifecycle/LifecycleRegistry;->markState()V\nHSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V\nHPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V\nHSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V\nHPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V\nPLandroidx/lifecycle/LifecycleRegistry;->setCurrentState()V\nHSPLandroidx/lifecycle/LifecycleRegistry;->sync()V\nHPLandroidx/lifecycle/LifecycleRegistry;->sync()V\nLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;\nHSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V\nHPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V\nHSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->getState()Landroidx/lifecycle/Lifecycle$State;\nPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->getState()Landroidx/lifecycle/Lifecycle$State;\nLandroidx/lifecycle/Lifecycling;\nHSPLandroidx/lifecycle/Lifecycling;-><clinit>()V\nPLandroidx/lifecycle/Lifecycling;-><clinit>()V\nHSPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver;\nHPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver;\nLandroidx/lifecycle/LiveData;\nHSPLandroidx/lifecycle/LiveData;-><clinit>()V\nPLandroidx/lifecycle/LiveData;-><clinit>()V\nHSPLandroidx/lifecycle/LiveData;-><init>()V\nPLandroidx/lifecycle/LiveData;-><init>()V\nHSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V\nPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V\nHSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V\nPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V\nHSPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V\nPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V\nHSPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V\nPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V\nLandroidx/lifecycle/LiveData$1;\nHSPLandroidx/lifecycle/LiveData$1;-><init>(Landroidx/lifecycle/LiveData;)V\nPLandroidx/lifecycle/LiveData$1;-><init>(Landroidx/lifecycle/LiveData;)V\nHSPLandroidx/lifecycle/LiveData$1;->run()V\nPLandroidx/lifecycle/LiveData$1;->run()V\nLandroidx/lifecycle/MutableLiveData;\nHSPLandroidx/lifecycle/MutableLiveData;-><init>()V\nPLandroidx/lifecycle/MutableLiveData;-><init>()V\nHSPLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V\nPLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V\nHSPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V\nPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V\nLandroidx/lifecycle/ProcessLifecycleInitializer;\nHSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V\nPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V\nHSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nHSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;\nPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;\nLandroidx/lifecycle/ProcessLifecycleOwner;\nPLandroidx/lifecycle/ProcessLifecycleOwner;->$r8$lambda$8RHFmaqBQY2MpEYiTr99NwPTGEU(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V\nPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V\nPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;->access$getNewInstance$cp()Landroidx/lifecycle/ProcessLifecycleOwner;\nPLandroidx/lifecycle/ProcessLifecycleOwner;->access$getNewInstance$cp()Landroidx/lifecycle/ProcessLifecycleOwner;\nPLandroidx/lifecycle/ProcessLifecycleOwner;->activityPaused$lifecycle_process_release()V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V\nPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted$lifecycle_process_release()V\nPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted$lifecycle_process_release()V\nPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStopped$lifecycle_process_release()V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach$lifecycle_process_release(Landroid/content/Context;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner;->attach$lifecycle_process_release(Landroid/content/Context;)V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;->run()V\nLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V\nLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPaused(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityStopped(Landroid/app/Activity;)V\nLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V\nLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;\nHSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V\nLandroidx/lifecycle/ReportFragment;\nHSPLandroidx/lifecycle/ReportFragment;-><init>()V\nPLandroidx/lifecycle/ReportFragment;-><init>()V\nHSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V\nPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V\nHSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ReportFragment;->onDestroy()V\nPLandroidx/lifecycle/ReportFragment;->onPause()V\nHSPLandroidx/lifecycle/ReportFragment;->onResume()V\nPLandroidx/lifecycle/ReportFragment;->onResume()V\nHSPLandroidx/lifecycle/ReportFragment;->onStart()V\nPLandroidx/lifecycle/ReportFragment;->onStart()V\nPLandroidx/lifecycle/ReportFragment;->onStop()V\nLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><clinit>()V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><clinit>()V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V\nHPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V\nHPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V\nLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;\nHSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;-><init>()V\nPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;-><init>()V\nLandroidx/lifecycle/SavedStateHandleAttacher;\nHSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V\nPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V\nHSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;\nHSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><clinit>()V\nPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><clinit>()V\nHSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><init>()V\nPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><init>()V\nLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;\nHSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><clinit>()V\nPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><clinit>()V\nHSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><init>(I)V\nPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><init>(I)V\nHSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Landroid/view/View;)Landroid/view/View;\nHPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Landroid/view/View;)Landroid/view/View;\nHSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/lifecycle/SavedStateHandlesProvider;\nHSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V\nHPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V\nHSPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V\nPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V\nHSPLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle;\nHPLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle;\nLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;\nHSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;-><init>(Landroidx/lifecycle/ViewModelStoreOwner;)V\nPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;-><init>(Landroidx/lifecycle/ViewModelStoreOwner;)V\nHSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object;\nPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object;\nLandroidx/lifecycle/SavedStateHandlesVM;\nHSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V\nPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V\nHSPLandroidx/lifecycle/SavedStateHandlesVM;->getHandles()Ljava/util/LinkedHashMap;\nPLandroidx/lifecycle/SavedStateHandlesVM;->getHandles()Ljava/util/LinkedHashMap;\nLandroidx/lifecycle/ViewModel;\nHSPLandroidx/lifecycle/ViewModel;-><init>()V\nPLandroidx/lifecycle/ViewModel;-><init>()V\nHPLandroidx/lifecycle/ViewModel;->clear()V\nPLandroidx/lifecycle/ViewModel;->onCleared()V\nLandroidx/lifecycle/ViewModelKt;\nHSPLandroidx/lifecycle/ViewModelKt;-><clinit>()V\nPLandroidx/lifecycle/ViewModelKt;-><clinit>()V\nHSPLandroidx/lifecycle/ViewModelKt;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/lifecycle/ViewModelKt;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V\nHSPLandroidx/lifecycle/ViewModelKt;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V\nHPLandroidx/lifecycle/ViewModelKt;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V\nHSPLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;\nPLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;\nHSPLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner;\nPLandroidx/lifecycle/ViewModelKt;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner;\nHSPLandroidx/lifecycle/ViewModelKt;->getLifecycleScope(Landroidx/lifecycle/LifecycleOwner;)Landroidx/lifecycle/LifecycleCoroutineScopeImpl;\nPLandroidx/lifecycle/ViewModelKt;->getLifecycleScope(Landroidx/lifecycle/LifecycleOwner;)Landroidx/lifecycle/LifecycleCoroutineScopeImpl;\nHSPLandroidx/lifecycle/ViewModelKt;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM;\nHPLandroidx/lifecycle/ViewModelKt;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM;\nHSPLandroidx/lifecycle/ViewModelKt;->injectIfNeededIn(Landroid/app/Activity;)V\nHPLandroidx/lifecycle/ViewModelKt;->injectIfNeededIn(Landroid/app/Activity;)V\nHSPLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V\nPLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V\nHSPLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V\nPLandroidx/lifecycle/ViewModelKt;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V\nLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;\nHSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;-><clinit>()V\nPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;-><clinit>()V\nLandroidx/lifecycle/ViewModelProvider$Factory;\nHSPLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel;\nPLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel;\nLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;\nHSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;-><clinit>()V\nPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;-><clinit>()V\nLandroidx/lifecycle/ViewModelStore;\nHSPLandroidx/lifecycle/ViewModelStore;-><init>()V\nPLandroidx/lifecycle/ViewModelStore;-><init>()V\nHPLandroidx/lifecycle/ViewModelStore;->clear()V\nHSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel;\nHPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel;\nHSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V\nHPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V\nLandroidx/lifecycle/ViewModelStoreOwner;\nLandroidx/lifecycle/viewmodel/CreationExtras;\nHSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V\nHPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V\nHSPLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/LinkedHashMap;\nPLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/LinkedHashMap;\nLandroidx/lifecycle/viewmodel/CreationExtras$Empty;\nHSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V\nPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V\nHSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><init>()V\nPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><init>()V\nLandroidx/lifecycle/viewmodel/CreationExtras$Key;\nLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;\nHSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;-><init>([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V\nPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;-><init>([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V\nHSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel;\nHPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel;\nLandroidx/lifecycle/viewmodel/MutableCreationExtras;\nHSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>()V\nPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>()V\nHSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V\nHPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V\nHSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V\nHPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V\nLandroidx/lifecycle/viewmodel/ViewModelInitializer;\nHSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V\nHPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V\nHSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getClazz$lifecycle_viewmodel_release()Ljava/lang/Class;\nPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getClazz$lifecycle_viewmodel_release()Ljava/lang/Class;\nHSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getInitializer$lifecycle_viewmodel_release()Lkotlin/jvm/functions/Function1;\nPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getInitializer$lifecycle_viewmodel_release()Lkotlin/jvm/functions/Function1;\nLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;\nHSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;-><clinit>()V\nPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;-><clinit>()V\nHSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->provides(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/compose/runtime/ProvidedValue;\nPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->provides(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/compose/runtime/ProvidedValue;\nLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;\nHSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;-><clinit>()V\nPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;-><clinit>()V\nHSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;-><init>()V\nPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;-><init>()V\nLandroidx/paging/ConflatedEventBus;\nHSPLandroidx/paging/ConflatedEventBus;-><init>()V\nPLandroidx/paging/ConflatedEventBus;-><init>()V\nHSPLandroidx/paging/ConflatedEventBus;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V\nPLandroidx/paging/ConflatedEventBus;-><init>(Landroidx/compose/ui/node/InnerNodeCoordinator;)V\nHSPLandroidx/paging/ConflatedEventBus;-><init>(Ljava/lang/Object;)V\nPLandroidx/paging/ConflatedEventBus;-><init>(Ljava/lang/Object;)V\nHSPLandroidx/paging/ConflatedEventBus;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLandroidx/paging/ConflatedEventBus;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLandroidx/paging/ConflatedEventBus;->access$getLookaheadSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet;\nPLandroidx/paging/ConflatedEventBus;->access$getLookaheadSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet;\nHSPLandroidx/paging/ConflatedEventBus;->access$getSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet;\nPLandroidx/paging/ConflatedEventBus;->access$getSet$p(Landroidx/paging/ConflatedEventBus;)Landroidx/compose/ui/node/DepthSortedSet;\nHSPLandroidx/paging/ConflatedEventBus;->add(ILjava/lang/Object;)V\nHPLandroidx/paging/ConflatedEventBus;->add(ILjava/lang/Object;)V\nHSPLandroidx/paging/ConflatedEventBus;->add(Landroidx/compose/ui/node/LayoutNode;Z)V\nHPLandroidx/paging/ConflatedEventBus;->add(Landroidx/compose/ui/node/LayoutNode;Z)V\nHSPLandroidx/paging/ConflatedEventBus;->addHitPath-KNwqfcY(JLandroidx/compose/ui/node/HitTestResult;)V\nHPLandroidx/paging/ConflatedEventBus;->addHitPath-KNwqfcY(JLandroidx/compose/ui/node/HitTestResult;)V\nHSPLandroidx/paging/ConflatedEventBus;->asList()Ljava/util/List;\nPLandroidx/paging/ConflatedEventBus;->asList()Ljava/util/List;\nHSPLandroidx/paging/ConflatedEventBus;->clear()V\nHPLandroidx/paging/ConflatedEventBus;->clear()V\nHSPLandroidx/paging/ConflatedEventBus;->contains(Landroidx/work/impl/model/WorkGenerationalId;)Z\nPLandroidx/paging/ConflatedEventBus;->contains(Landroidx/work/impl/model/WorkGenerationalId;)Z\nHSPLandroidx/paging/ConflatedEventBus;->dispatchChanges(Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHPLandroidx/paging/ConflatedEventBus;->dispatchChanges(Landroidx/compose/ui/focus/FocusTransactionManager;Z)Z\nHSPLandroidx/paging/ConflatedEventBus;->get(I)Ljava/lang/Object;\nHPLandroidx/paging/ConflatedEventBus;->get(I)Ljava/lang/Object;\nHSPLandroidx/paging/ConflatedEventBus;->getSize()I\nHPLandroidx/paging/ConflatedEventBus;->getSize()I\nHSPLandroidx/paging/ConflatedEventBus;->getVector()Landroidx/compose/runtime/collection/MutableVector;\nPLandroidx/paging/ConflatedEventBus;->getVector()Landroidx/compose/runtime/collection/MutableVector;\nHSPLandroidx/paging/ConflatedEventBus;->isEmpty()Z\nHPLandroidx/paging/ConflatedEventBus;->isEmpty()Z\nHSPLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;)V\nPLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;)V\nHSPLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;Z)Z\nPLandroidx/paging/ConflatedEventBus;->remove(Landroidx/compose/ui/node/LayoutNode;Z)Z\nHSPLandroidx/paging/ConflatedEventBus;->removeAt(I)Ljava/lang/Object;\nHPLandroidx/paging/ConflatedEventBus;->removeAt(I)Ljava/lang/Object;\nHSPLandroidx/paging/ConflatedEventBus;->removeDetachedPointerInputFilters()V\nPLandroidx/paging/ConflatedEventBus;->removeDetachedPointerInputFilters()V\nLandroidx/preference/PreferenceManager;\nHSPLandroidx/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;\nPLandroidx/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;\nHSPLandroidx/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;\nPLandroidx/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;\nLandroidx/profileinstaller/ProfileInstallReceiver;\nHSPLandroidx/profileinstaller/ProfileInstallReceiver;-><init>()V\nPLandroidx/profileinstaller/ProfileInstallReceiver;-><init>()V\nHSPLandroidx/profileinstaller/ProfileInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V\nHPLandroidx/profileinstaller/ProfileInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V\nLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;\nHSPLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;-><init>(Landroidx/profileinstaller/ProfileInstallReceiver;)V\nPLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;-><init>(Landroidx/profileinstaller/ProfileInstallReceiver;)V\nHSPLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->onResultReceived(ILjava/lang/Object;)V\nPLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->onResultReceived(ILjava/lang/Object;)V\nLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;\nHSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;-><init>(IILjava/lang/Object;Ljava/io/Serializable;)V\nPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;-><init>(IILjava/lang/Object;Ljava/io/Serializable;)V\nHSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;->run()V\nPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda0;->run()V\nLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;\nHSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;-><init>(I)V\nPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;-><init>(I)V\nHSPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V\nPLandroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V\nLandroidx/profileinstaller/ProfileInstaller$1;\nHSPLandroidx/profileinstaller/ProfileInstaller$1;-><init>(I)V\nPLandroidx/profileinstaller/ProfileInstaller$1;-><init>(I)V\nHSPLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V\nPLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V\nLandroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;\nLandroidx/profileinstaller/ProfileInstallerInitializer;\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$QGpANLTF0YGY0pXfe2eje4OKwkc(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V\nPLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$QGpANLTF0YGY0pXfe2eje4OKwkc(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V\nPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;\nPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;\nLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Landroid/content/Context;I)V\nPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Landroid/content/Context;I)V\nPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V\nLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V\nPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V\nLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;)V\nPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;)V\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V\nPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V\nLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;\nHSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;\nPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;\nPLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V\nPLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus;\nPLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)V\nPLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;-><init>(I)V\nLandroidx/profileinstaller/ProfileVersion;\nHSPLandroidx/profileinstaller/ProfileVersion;-><clinit>()V\nPLandroidx/profileinstaller/ProfileVersion;-><clinit>()V\nHSPLandroidx/profileinstaller/ProfileVersion;->noteProfileWrittenFor(Landroid/content/pm/PackageInfo;Ljava/io/File;)V\nPLandroidx/profileinstaller/ProfileVersion;->noteProfileWrittenFor(Landroid/content/pm/PackageInfo;Ljava/io/File;)V\nPLandroidx/profileinstaller/ProfileVersion;->writeProfile(Landroid/content/Context;)V\nPLandroidx/profileinstaller/ProfileVersion;->writeProfile(Landroid/content/Context;Landroidx/profileinstaller/ProfileInstaller$$ExternalSyntheticLambda1;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V\nLandroidx/recyclerview/widget/ListUpdateCallback;\nLandroidx/room/AutoCloser$Companion;\nHSPLandroidx/room/AutoCloser$Companion;-><init>(I)V\nPLandroidx/room/AutoCloser$Companion;-><init>(I)V\nHSPLandroidx/room/AutoCloser$Companion;-><init>(II)V\nPLandroidx/room/AutoCloser$Companion;-><init>(II)V\nHSPLandroidx/room/AutoCloser$Companion;->bitsNeedForSize(I)I\nHPLandroidx/room/AutoCloser$Companion;->bitsNeedForSize(I)I\nHSPLandroidx/room/AutoCloser$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J\nHPLandroidx/room/AutoCloser$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J\nHSPLandroidx/room/AutoCloser$Companion;->fixed-JhjzzOo(II)J\nHPLandroidx/room/AutoCloser$Companion;->fixed-JhjzzOo(II)J\nLandroidx/room/AutoClosingRoomOpenHelper;\nLandroidx/room/DatabaseConfiguration;\nHSPLandroidx/room/DatabaseConfiguration;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/ArrayList;ZLandroidx/room/RoomDatabase$JournalMode;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;ZZLjava/util/LinkedHashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;)V\nPLandroidx/room/DatabaseConfiguration;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/ArrayList;ZLandroidx/room/RoomDatabase$JournalMode;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;ZZLjava/util/LinkedHashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;)V\nLandroidx/room/DelegatingOpenHelper;\nLandroidx/room/EntityInsertionAdapter;\nHSPLandroidx/room/EntityInsertionAdapter;-><init>(Landroidx/room/RoomDatabase;I)V\nPLandroidx/room/EntityInsertionAdapter;-><init>(Landroidx/room/RoomDatabase;I)V\nHSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V\nPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V\nLandroidx/room/InvalidationLiveDataContainer;\nHSPLandroidx/room/InvalidationLiveDataContainer;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/room/InvalidationLiveDataContainer;-><init>(Landroidx/room/RoomDatabase;)V\nLandroidx/room/InvalidationTracker;\nHSPLandroidx/room/InvalidationTracker;-><clinit>()V\nPLandroidx/room/InvalidationTracker;-><clinit>()V\nHSPLandroidx/room/InvalidationTracker;-><init>(Landroidx/room/RoomDatabase;Ljava/util/HashMap;Ljava/util/HashMap;[Ljava/lang/String;)V\nPLandroidx/room/InvalidationTracker;-><init>(Landroidx/room/RoomDatabase;Ljava/util/HashMap;Ljava/util/HashMap;[Ljava/lang/String;)V\nHSPLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z\nPLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z\nHSPLandroidx/room/InvalidationTracker;->getDatabase$room_runtime_release()Landroidx/room/RoomDatabase;\nPLandroidx/room/InvalidationTracker;->getDatabase$room_runtime_release()Landroidx/room/RoomDatabase;\nHSPLandroidx/room/InvalidationTracker;->getPendingRefresh()Ljava/util/concurrent/atomic/AtomicBoolean;\nPLandroidx/room/InvalidationTracker;->getPendingRefresh()Ljava/util/concurrent/atomic/AtomicBoolean;\nHSPLandroidx/room/InvalidationTracker;->internalInit$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/InvalidationTracker;->internalInit$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/room/InvalidationTracker;->refreshVersionsAsync()V\nPLandroidx/room/InvalidationTracker;->refreshVersionsAsync()V\nHSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nLandroidx/room/InvalidationTracker$ObservedTableTracker;\nHSPLandroidx/room/InvalidationTracker$ObservedTableTracker;-><init>(I)V\nPLandroidx/room/InvalidationTracker$ObservedTableTracker;-><init>(I)V\nHSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I\nPLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I\nLandroidx/room/InvalidationTracker$refreshRunnable$1;\nHSPLandroidx/room/InvalidationTracker$refreshRunnable$1;-><init>(Landroidx/room/InvalidationTracker;)V\nPLandroidx/room/InvalidationTracker$refreshRunnable$1;-><init>(Landroidx/room/InvalidationTracker;)V\nHSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Ljava/util/Set;\nPLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Ljava/util/Set;\nHSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V\nPLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V\nLandroidx/room/RoomDatabase;\nHSPLandroidx/room/RoomDatabase;-><init>()V\nPLandroidx/room/RoomDatabase;-><init>()V\nHSPLandroidx/room/RoomDatabase;->assertNotMainThread()V\nPLandroidx/room/RoomDatabase;->assertNotMainThread()V\nHSPLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V\nPLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V\nHSPLandroidx/room/RoomDatabase;->beginTransaction()V\nPLandroidx/room/RoomDatabase;->beginTransaction()V\nHSPLandroidx/room/RoomDatabase;->endTransaction()V\nPLandroidx/room/RoomDatabase;->endTransaction()V\nHSPLandroidx/room/RoomDatabase;->getCloseLock$room_runtime_release()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;\nPLandroidx/room/RoomDatabase;->getCloseLock$room_runtime_release()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;\nHSPLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nPLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nHSPLandroidx/room/RoomDatabase;->getQueryExecutor()Ljava/util/concurrent/Executor;\nPLandroidx/room/RoomDatabase;->getQueryExecutor()Ljava/util/concurrent/Executor;\nHSPLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V\nPLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V\nHSPLandroidx/room/RoomDatabase;->internalBeginTransaction()V\nPLandroidx/room/RoomDatabase;->internalBeginTransaction()V\nHSPLandroidx/room/RoomDatabase;->internalEndTransaction()V\nPLandroidx/room/RoomDatabase;->internalEndTransaction()V\nHSPLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/room/RoomDatabase;->isOpen()Z\nPLandroidx/room/RoomDatabase;->isOpen()Z\nHSPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor;\nPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor;\nHSPLandroidx/room/RoomDatabase;->runInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object;\nPLandroidx/room/RoomDatabase;->runInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object;\nHSPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V\nPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V\nHSPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object;\nPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object;\nLandroidx/room/RoomDatabase$Builder;\nHSPLandroidx/room/RoomDatabase$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V\nPLandroidx/room/RoomDatabase$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V\nHSPLandroidx/room/RoomDatabase$Builder;->addCallback()V\nPLandroidx/room/RoomDatabase$Builder;->addCallback()V\nHSPLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)V\nPLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)V\nHSPLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase;\nPLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase;\nHSPLandroidx/room/RoomDatabase$Builder;->fallbackToDestructiveMigration()V\nPLandroidx/room/RoomDatabase$Builder;->fallbackToDestructiveMigration()V\nHSPLandroidx/room/RoomDatabase$Builder;->openHelperFactory(Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;)V\nPLandroidx/room/RoomDatabase$Builder;->openHelperFactory(Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;)V\nHSPLandroidx/room/RoomDatabase$Builder;->setQueryExecutor(Landroidx/work/impl/utils/SerialExecutorImpl;)V\nPLandroidx/room/RoomDatabase$Builder;->setQueryExecutor(Landroidx/work/impl/utils/SerialExecutorImpl;)V\nLandroidx/room/RoomDatabase$Callback;\nHSPLandroidx/room/RoomDatabase$Callback;-><init>()V\nPLandroidx/room/RoomDatabase$Callback;-><init>()V\nLandroidx/room/RoomDatabase$JournalMode;\nHSPLandroidx/room/RoomDatabase$JournalMode;-><clinit>()V\nPLandroidx/room/RoomDatabase$JournalMode;-><clinit>()V\nHSPLandroidx/room/RoomDatabase$JournalMode;-><init>(Ljava/lang/String;I)V\nPLandroidx/room/RoomDatabase$JournalMode;-><init>(Ljava/lang/String;I)V\nLandroidx/room/RoomDatabase$MigrationContainer;\nHSPLandroidx/room/RoomDatabase$MigrationContainer;-><init>()V\nPLandroidx/room/RoomDatabase$MigrationContainer;-><init>()V\nHSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V\nPLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V\nHSPLandroidx/room/RoomDatabase$MigrationContainer;->contains(II)Z\nPLandroidx/room/RoomDatabase$MigrationContainer;->contains(II)Z\nLandroidx/room/RoomOpenHelper;\nHSPLandroidx/room/RoomOpenHelper;-><init>(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;)V\nPLandroidx/room/RoomOpenHelper;-><init>(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;)V\nHSPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nLandroidx/room/RoomOpenHelper$Delegate;\nHSPLandroidx/room/RoomOpenHelper$Delegate;-><init>()V\nPLandroidx/room/RoomOpenHelper$Delegate;-><init>()V\nLandroidx/room/RoomSQLiteQuery;\nHSPLandroidx/room/RoomSQLiteQuery;-><clinit>()V\nPLandroidx/room/RoomSQLiteQuery;-><clinit>()V\nHSPLandroidx/room/RoomSQLiteQuery;-><init>(I)V\nPLandroidx/room/RoomSQLiteQuery;-><init>(I)V\nHSPLandroidx/room/RoomSQLiteQuery;->acquire(ILjava/lang/String;)Landroidx/room/RoomSQLiteQuery;\nPLandroidx/room/RoomSQLiteQuery;->acquire(ILjava/lang/String;)Landroidx/room/RoomSQLiteQuery;\nHSPLandroidx/room/RoomSQLiteQuery;->bindLong(IJ)V\nPLandroidx/room/RoomSQLiteQuery;->bindLong(IJ)V\nHSPLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V\nPLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V\nHSPLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nPLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nHSPLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String;\nPLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String;\nHSPLandroidx/room/RoomSQLiteQuery;->init(ILjava/lang/String;)V\nPLandroidx/room/RoomSQLiteQuery;->init(ILjava/lang/String;)V\nHSPLandroidx/room/RoomSQLiteQuery;->release()V\nPLandroidx/room/RoomSQLiteQuery;->release()V\nLandroidx/room/SQLiteCopyOpenHelper;\nLandroidx/room/SharedSQLiteStatement;\nHSPLandroidx/room/SharedSQLiteStatement;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/room/SharedSQLiteStatement;-><init>(Landroidx/room/RoomDatabase;)V\nHSPLandroidx/room/SharedSQLiteStatement;->access$createNewStatement(Landroidx/room/SharedSQLiteStatement;)Landroidx/sqlite/db/SupportSQLiteStatement;\nPLandroidx/room/SharedSQLiteStatement;->access$createNewStatement(Landroidx/room/SharedSQLiteStatement;)Landroidx/sqlite/db/SupportSQLiteStatement;\nHSPLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement;\nPLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement;\nHSPLandroidx/room/SharedSQLiteStatement;->createNewStatement()Landroidx/sqlite/db/SupportSQLiteStatement;\nPLandroidx/room/SharedSQLiteStatement;->createNewStatement()Landroidx/sqlite/db/SupportSQLiteStatement;\nHSPLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V\nPLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V\nLandroidx/room/SharedSQLiteStatement$stmt$2;\nHSPLandroidx/room/SharedSQLiteStatement$stmt$2;-><init>(Landroidx/room/SharedSQLiteStatement;)V\nPLandroidx/room/SharedSQLiteStatement$stmt$2;-><init>(Landroidx/room/SharedSQLiteStatement;)V\nHSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object;\nPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object;\nLandroidx/room/TransactionExecutor;\nHSPLandroidx/room/TransactionExecutor;-><init>(Ljava/util/concurrent/Executor;)V\nPLandroidx/room/TransactionExecutor;-><init>(Ljava/util/concurrent/Executor;)V\nLandroidx/room/migration/Migration;\nHSPLandroidx/room/migration/Migration;-><init>(II)V\nPLandroidx/room/migration/Migration;-><init>(II)V\nLandroidx/savedstate/Recreator;\nHSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V\nPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V\nHSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/savedstate/SavedStateRegistry;\nHSPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHSPLandroidx/savedstate/SavedStateRegistry;-><init>()V\nPLandroidx/savedstate/SavedStateRegistry;-><init>()V\nHSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;\nHPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;\nHSPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider()Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;\nPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider()Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;\nHSPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V\nPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V\nHSPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V\nPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V\nHSPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V\nHPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V\nHSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V\nHPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V\nPLandroidx/savedstate/SavedStateRegistry;->unregisterSavedStateProvider(Ljava/lang/String;)V\nLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;\nHSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V\nPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V\nHSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nHPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V\nLandroidx/savedstate/SavedStateRegistry$SavedStateProvider;\nLandroidx/savedstate/SavedStateRegistryController;\nHSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V\nPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V\nHSPLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;\nPLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;\nHSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V\nPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V\nHSPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V\nPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V\nHSPLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V\nHPLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V\nLandroidx/savedstate/SavedStateRegistryOwner;\nLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;\nHSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner;\nPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner;\nHSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V\nPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V\nLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;\nHSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><clinit>()V\nPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><clinit>()V\nHSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><init>(I)V\nPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><init>(I)V\nHSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/sqlite/db/SimpleSQLiteQuery;\nHSPLandroidx/sqlite/db/SimpleSQLiteQuery;-><init>(Ljava/lang/String;)V\nPLandroidx/sqlite/db/SimpleSQLiteQuery;-><init>(Ljava/lang/String;)V\nHSPLandroidx/sqlite/db/SimpleSQLiteQuery;-><init>(Ljava/lang/String;[Ljava/lang/Object;)V\nPLandroidx/sqlite/db/SimpleSQLiteQuery;-><init>(Ljava/lang/String;[Ljava/lang/Object;)V\nHSPLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nPLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nHSPLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String;\nPLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String;\nLandroidx/sqlite/db/SupportSQLiteDatabase;\nLandroidx/sqlite/db/SupportSQLiteOpenHelper;\nLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;-><clinit>()V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;-><clinit>()V\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;-><init>(I)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;-><init>(I)V\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;-><init>()V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;-><init>()V\nLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V\nLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;-><init>(Landroid/content/Context;)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;-><init>(Landroid/content/Context;)V\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->allowDataLossOnRecovery()V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->allowDataLossOnRecovery()V\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->build()Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->build()Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->callback(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->callback(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->name(Ljava/lang/String;)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->name(Ljava/lang/String;)V\nHSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->noBackupDirectory(Z)V\nPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->noBackupDirectory(Z)V\nLandroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;\nLandroidx/sqlite/db/SupportSQLiteProgram;\nLandroidx/sqlite/db/SupportSQLiteQuery;\nLandroidx/sqlite/db/SupportSQLiteStatement;\nLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;-><clinit>()V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;-><clinit>()V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;-><init>(Landroid/database/sqlite/SQLiteDatabase;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;-><init>(Landroid/database/sqlite/SQLiteDatabase;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isDelegate(Landroid/database/sqlite/SQLiteDatabase;)Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isDelegate(Landroid/database/sqlite/SQLiteDatabase;)Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V\nLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda0;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;\nLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;-><init>(Landroidx/sqlite/db/SupportSQLiteQuery;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;-><init>(Landroidx/sqlite/db/SupportSQLiteQuery;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getAllowDataLossOnRecovery$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getAllowDataLossOnRecovery$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getCallback$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getCallback$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getContext$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroid/content/Context;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getContext$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroid/content/Context;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getName$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Ljava/lang/String;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getName$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Ljava/lang/String;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getUseNoBackupDirectory$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getUseNoBackupDirectory$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getWriteAheadLoggingEnabled$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getWriteAheadLoggingEnabled$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V\nLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;-><init>()V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;-><init>()V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->getDb()Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->getDb()Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->setDb(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->setDb(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V\nLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V\nLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;-><init>(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;-><init>(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V\nLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$CallbackException;\nLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;-><init>(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;-><init>(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object;\nPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object;\nLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;-><init>(Landroid/database/sqlite/SQLiteProgram;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;-><init>(Landroid/database/sqlite/SQLiteProgram;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(IJ)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(IJ)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindNull(I)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindNull(I)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V\nLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteStatement;)V\nPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteStatement;)V\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J\nPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J\nHSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I\nPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I\nLandroidx/sqlite/util/ProcessLock;\nHSPLandroidx/sqlite/util/ProcessLock;-><clinit>()V\nPLandroidx/sqlite/util/ProcessLock;-><clinit>()V\nHSPLandroidx/sqlite/util/ProcessLock;-><init>(Ljava/lang/String;Ljava/io/File;Z)V\nPLandroidx/sqlite/util/ProcessLock;-><init>(Ljava/lang/String;Ljava/io/File;Z)V\nHSPLandroidx/sqlite/util/ProcessLock;->lock(Z)V\nPLandroidx/sqlite/util/ProcessLock;->lock(Z)V\nHSPLandroidx/sqlite/util/ProcessLock;->unlock()V\nPLandroidx/sqlite/util/ProcessLock;->unlock()V\nLandroidx/startup/AppInitializer;\nHSPLandroidx/startup/AppInitializer;-><clinit>()V\nPLandroidx/startup/AppInitializer;-><clinit>()V\nHSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V\nPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V\nHSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V\nPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V\nHSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;\nPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object;\nHSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;\nPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;\nHSPLandroidx/startup/AppInitializer;->initializeComponent()Ljava/lang/Object;\nPLandroidx/startup/AppInitializer;->initializeComponent()Ljava/lang/Object;\nHSPLandroidx/startup/AppInitializer;->isEagerlyInitialized()Z\nPLandroidx/startup/AppInitializer;->isEagerlyInitialized()Z\nLandroidx/startup/InitializationProvider;\nHSPLandroidx/startup/InitializationProvider;-><init>()V\nPLandroidx/startup/InitializationProvider;-><init>()V\nHSPLandroidx/startup/InitializationProvider;->onCreate()Z\nPLandroidx/startup/InitializationProvider;->onCreate()Z\nLandroidx/startup/Initializer;\nLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)V\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)V\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLParameters;[Ljava/lang/String;)V\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLParameters;[Ljava/lang/String;)V\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)V\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)V\nHSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Z\nPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljavax/net/ssl/SSLSocket;)Z\nLandroidx/vectordrawable/graphics/drawable/VectorDrawableCommon;\nLandroidx/vectordrawable/graphics/drawable/VectorDrawableCompat;\nLandroidx/work/BackoffPolicy;\nHSPLandroidx/work/BackoffPolicy;-><clinit>()V\nPLandroidx/work/BackoffPolicy;-><clinit>()V\nHSPLandroidx/work/BackoffPolicy;-><init>(Ljava/lang/String;I)V\nPLandroidx/work/BackoffPolicy;-><init>(Ljava/lang/String;I)V\nLandroidx/work/Configuration;\nHSPLandroidx/work/Configuration;-><init>(Lorg/acra/log/AndroidLogDelegate;)V\nPLandroidx/work/Configuration;-><init>(Lorg/acra/log/AndroidLogDelegate;)V\nHSPLandroidx/work/Configuration;->createDefaultExecutor(Z)Ljava/util/concurrent/ExecutorService;\nPLandroidx/work/Configuration;->createDefaultExecutor(Z)Ljava/util/concurrent/ExecutorService;\nHSPLandroidx/work/Configuration;->getMaxJobSchedulerId()I\nPLandroidx/work/Configuration;->getMaxJobSchedulerId()I\nHSPLandroidx/work/Configuration;->getMaxSchedulerLimit()I\nPLandroidx/work/Configuration;->getMaxSchedulerLimit()I\nHSPLandroidx/work/Configuration;->getMinimumLoggingLevel()I\nPLandroidx/work/Configuration;->getMinimumLoggingLevel()I\nHSPLandroidx/work/Configuration;->getRunnableScheduler()Landroidx/compose/runtime/Stack;\nPLandroidx/work/Configuration;->getRunnableScheduler()Landroidx/compose/runtime/Stack;\nHSPLandroidx/work/Configuration;->getTaskExecutor()Ljava/util/concurrent/ExecutorService;\nPLandroidx/work/Configuration;->getTaskExecutor()Ljava/util/concurrent/ExecutorService;\nLandroidx/work/Configuration$1;\nHSPLandroidx/work/Configuration$1;-><init>(Z)V\nPLandroidx/work/Configuration$1;-><init>(Z)V\nHSPLandroidx/work/Configuration$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;\nPLandroidx/work/Configuration$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;\nLandroidx/work/Constraints;\nHSPLandroidx/work/Constraints;-><clinit>()V\nPLandroidx/work/Constraints;-><clinit>()V\nHSPLandroidx/work/Constraints;-><init>(Landroidx/work/Constraints;)V\nPLandroidx/work/Constraints;-><init>(Landroidx/work/Constraints;)V\nHSPLandroidx/work/Constraints;-><init>(Landroidx/work/NetworkType;ZZI)V\nPLandroidx/work/Constraints;-><init>(Landroidx/work/NetworkType;ZZI)V\nHSPLandroidx/work/Constraints;-><init>(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;)V\nPLandroidx/work/Constraints;-><init>(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;)V\nHSPLandroidx/work/Constraints;->getContentTriggerMaxDelayMillis()J\nPLandroidx/work/Constraints;->getContentTriggerMaxDelayMillis()J\nHSPLandroidx/work/Constraints;->getContentTriggerUpdateDelayMillis()J\nPLandroidx/work/Constraints;->getContentTriggerUpdateDelayMillis()J\nHSPLandroidx/work/Constraints;->getContentUriTriggers()Ljava/util/Set;\nPLandroidx/work/Constraints;->getContentUriTriggers()Ljava/util/Set;\nHSPLandroidx/work/Constraints;->getRequiredNetworkType()Landroidx/work/NetworkType;\nPLandroidx/work/Constraints;->getRequiredNetworkType()Landroidx/work/NetworkType;\nHSPLandroidx/work/Constraints;->hasContentUriTriggers()Z\nPLandroidx/work/Constraints;->hasContentUriTriggers()Z\nHSPLandroidx/work/Constraints;->requiresBatteryNotLow()Z\nPLandroidx/work/Constraints;->requiresBatteryNotLow()Z\nHSPLandroidx/work/Constraints;->requiresCharging()Z\nPLandroidx/work/Constraints;->requiresCharging()Z\nHSPLandroidx/work/Constraints;->requiresDeviceIdle()Z\nPLandroidx/work/Constraints;->requiresDeviceIdle()Z\nHSPLandroidx/work/Constraints;->requiresStorageNotLow()Z\nPLandroidx/work/Constraints;->requiresStorageNotLow()Z\nLandroidx/work/CoroutineWorker;\nLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;\nHSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nHSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->run()V\nPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->run()V\nLandroidx/work/Data;\nHSPLandroidx/work/Data;-><clinit>()V\nPLandroidx/work/Data;-><clinit>()V\nHSPLandroidx/work/Data;-><init>(Landroidx/work/Data;)V\nPLandroidx/work/Data;-><init>(Landroidx/work/Data;)V\nHSPLandroidx/work/Data;-><init>(Ljava/util/HashMap;)V\nPLandroidx/work/Data;-><init>(Ljava/util/HashMap;)V\nHSPLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data;\nPLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data;\nHSPLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B\nPLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B\nLandroidx/work/Data$Builder;\nHSPLandroidx/work/Data$Builder;-><init>()V\nPLandroidx/work/Data$Builder;-><init>()V\nHSPLandroidx/work/Data$Builder;->build()Landroidx/work/Data;\nPLandroidx/work/Data$Builder;->build()Landroidx/work/Data;\nHSPLandroidx/work/Data$Builder;->put(Ljava/lang/Object;Ljava/lang/String;)V\nPLandroidx/work/Data$Builder;->put(Ljava/lang/Object;Ljava/lang/String;)V\nLandroidx/work/InputMergerFactory$1;\nHSPLandroidx/work/InputMergerFactory$1;-><init>()V\nPLandroidx/work/InputMergerFactory$1;-><init>()V\nLandroidx/work/ListenableWorker;\nLandroidx/work/Logger$LogcatLogger;\nHSPLandroidx/work/Logger$LogcatLogger;-><clinit>()V\nPLandroidx/work/Logger$LogcatLogger;-><clinit>()V\nHSPLandroidx/work/Logger$LogcatLogger;-><init>(I)V\nPLandroidx/work/Logger$LogcatLogger;-><init>(I)V\nHSPLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;)V\nPLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;)V\nHSPLandroidx/work/Logger$LogcatLogger;->get()Landroidx/work/Logger$LogcatLogger;\nPLandroidx/work/Logger$LogcatLogger;->get()Landroidx/work/Logger$LogcatLogger;\nHSPLandroidx/work/Logger$LogcatLogger;->setLogger(Landroidx/work/Logger$LogcatLogger;)V\nPLandroidx/work/Logger$LogcatLogger;->setLogger(Landroidx/work/Logger$LogcatLogger;)V\nHSPLandroidx/work/Logger$LogcatLogger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String;\nPLandroidx/work/Logger$LogcatLogger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String;\nLandroidx/work/NetworkType;\nHSPLandroidx/work/NetworkType;-><clinit>()V\nPLandroidx/work/NetworkType;-><clinit>()V\nHSPLandroidx/work/NetworkType;-><init>(Ljava/lang/String;I)V\nPLandroidx/work/NetworkType;-><init>(Ljava/lang/String;I)V\nLandroidx/work/Operation;\nHSPLandroidx/work/Operation;-><clinit>()V\nPLandroidx/work/Operation;-><clinit>()V\nLandroidx/work/Operation$State$FAILURE;\nLandroidx/work/Operation$State$IN_PROGRESS;\nHSPLandroidx/work/Operation$State$IN_PROGRESS;-><init>()V\nPLandroidx/work/Operation$State$IN_PROGRESS;-><init>()V\nLandroidx/work/Operation$State$SUCCESS;\nHSPLandroidx/work/Operation$State$SUCCESS;-><init>()V\nPLandroidx/work/Operation$State$SUCCESS;-><init>()V\nLandroidx/work/OutOfQuotaPolicy;\nHSPLandroidx/work/OutOfQuotaPolicy;-><clinit>()V\nPLandroidx/work/OutOfQuotaPolicy;-><clinit>()V\nHSPLandroidx/work/OutOfQuotaPolicy;-><init>(Ljava/lang/String;I)V\nPLandroidx/work/OutOfQuotaPolicy;-><init>(Ljava/lang/String;I)V\nLandroidx/work/PeriodicWorkRequest;\nHSPLandroidx/work/PeriodicWorkRequest;-><init>(Landroidx/work/PeriodicWorkRequest$Builder;)V\nPLandroidx/work/PeriodicWorkRequest;-><init>(Landroidx/work/PeriodicWorkRequest$Builder;)V\nLandroidx/work/PeriodicWorkRequest$Builder;\nHSPLandroidx/work/PeriodicWorkRequest$Builder;-><init>(Ljava/lang/Class;JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;)V\nPLandroidx/work/PeriodicWorkRequest$Builder;-><init>(Ljava/lang/Class;JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;)V\nHSPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest;\nPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest;\nHSPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder;\nPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder;\nLandroidx/work/WorkInfo$State;\nHSPLandroidx/work/WorkInfo$State;-><clinit>()V\nPLandroidx/work/WorkInfo$State;-><clinit>()V\nHSPLandroidx/work/WorkInfo$State;-><init>(Ljava/lang/String;I)V\nPLandroidx/work/WorkInfo$State;-><init>(Ljava/lang/String;I)V\nLandroidx/work/WorkManager;\nHSPLandroidx/work/WorkManager;-><init>()V\nPLandroidx/work/WorkManager;-><init>()V\nLandroidx/work/WorkManagerInitializer;\nHSPLandroidx/work/WorkManagerInitializer;-><clinit>()V\nPLandroidx/work/WorkManagerInitializer;-><clinit>()V\nHSPLandroidx/work/WorkManagerInitializer;-><init>()V\nPLandroidx/work/WorkManagerInitializer;-><init>()V\nHSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;\nHSPLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List;\nPLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List;\nLandroidx/work/WorkRequest;\nHSPLandroidx/work/WorkRequest;-><init>(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/Set;)V\nPLandroidx/work/WorkRequest;-><init>(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/Set;)V\nHSPLandroidx/work/WorkRequest;->getStringId()Ljava/lang/String;\nPLandroidx/work/WorkRequest;->getStringId()Ljava/lang/String;\nHSPLandroidx/work/WorkRequest;->getTags()Ljava/util/Set;\nPLandroidx/work/WorkRequest;->getTags()Ljava/util/Set;\nHSPLandroidx/work/WorkRequest;->getWorkSpec()Landroidx/work/impl/model/WorkSpec;\nPLandroidx/work/WorkRequest;->getWorkSpec()Landroidx/work/impl/model/WorkSpec;\nLandroidx/work/WorkRequest$Builder;\nHSPLandroidx/work/WorkRequest$Builder;-><init>(Ljava/lang/Class;)V\nPLandroidx/work/WorkRequest$Builder;-><init>(Ljava/lang/Class;)V\nHSPLandroidx/work/WorkRequest$Builder;->addTag(Ljava/lang/String;)Landroidx/work/WorkRequest$Builder;\nPLandroidx/work/WorkRequest$Builder;->addTag(Ljava/lang/String;)Landroidx/work/WorkRequest$Builder;\nHSPLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/WorkRequest;\nPLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/WorkRequest;\nHSPLandroidx/work/WorkRequest$Builder;->getBackoffCriteriaSet$work_runtime_release()Z\nPLandroidx/work/WorkRequest$Builder;->getBackoffCriteriaSet$work_runtime_release()Z\nHSPLandroidx/work/WorkRequest$Builder;->getId$work_runtime_release()Ljava/util/UUID;\nPLandroidx/work/WorkRequest$Builder;->getId$work_runtime_release()Ljava/util/UUID;\nHSPLandroidx/work/WorkRequest$Builder;->getTags$work_runtime_release()Ljava/util/Set;\nPLandroidx/work/WorkRequest$Builder;->getTags$work_runtime_release()Ljava/util/Set;\nHSPLandroidx/work/WorkRequest$Builder;->getWorkSpec$work_runtime_release()Landroidx/work/impl/model/WorkSpec;\nPLandroidx/work/WorkRequest$Builder;->getWorkSpec$work_runtime_release()Landroidx/work/impl/model/WorkSpec;\nHSPLandroidx/work/WorkRequest$Builder;->setBackoffCriteria(Lj$/time/Duration;)Landroidx/work/WorkRequest$Builder;\nPLandroidx/work/WorkRequest$Builder;->setBackoffCriteria(Lj$/time/Duration;)Landroidx/work/WorkRequest$Builder;\nHSPLandroidx/work/WorkRequest$Builder;->setInputData(Landroidx/work/Data;)Landroidx/work/WorkRequest$Builder;\nPLandroidx/work/WorkRequest$Builder;->setInputData(Landroidx/work/Data;)Landroidx/work/WorkRequest$Builder;\nLandroidx/work/WorkerFactory;\nHSPLandroidx/work/WorkerFactory;-><clinit>()V\nPLandroidx/work/WorkerFactory;-><clinit>()V\nHSPLandroidx/work/WorkerFactory;-><init>()V\nPLandroidx/work/WorkerFactory;-><init>()V\nLandroidx/work/WorkerFactory$1;\nHSPLandroidx/work/WorkerFactory$1;-><init>()V\nPLandroidx/work/WorkerFactory$1;-><init>()V\nLandroidx/work/impl/CleanupCallback;\nHSPLandroidx/work/impl/CleanupCallback;-><clinit>()V\nPLandroidx/work/impl/CleanupCallback;-><clinit>()V\nHSPLandroidx/work/impl/CleanupCallback;-><init>()V\nPLandroidx/work/impl/CleanupCallback;-><init>()V\nLandroidx/work/impl/ExecutionListener;\nLandroidx/work/impl/Migration_11_12;\nHSPLandroidx/work/impl/Migration_11_12;-><clinit>()V\nPLandroidx/work/impl/Migration_11_12;-><clinit>()V\nHSPLandroidx/work/impl/Migration_11_12;-><init>()V\nPLandroidx/work/impl/Migration_11_12;-><init>()V\nLandroidx/work/impl/Migration_12_13;\nHSPLandroidx/work/impl/Migration_12_13;-><clinit>()V\nPLandroidx/work/impl/Migration_12_13;-><clinit>()V\nHSPLandroidx/work/impl/Migration_12_13;-><init>()V\nPLandroidx/work/impl/Migration_12_13;-><init>()V\nLandroidx/work/impl/Migration_15_16;\nHSPLandroidx/work/impl/Migration_15_16;-><clinit>()V\nPLandroidx/work/impl/Migration_15_16;-><clinit>()V\nHSPLandroidx/work/impl/Migration_15_16;-><init>()V\nPLandroidx/work/impl/Migration_15_16;-><init>()V\nLandroidx/work/impl/Migration_1_2;\nHSPLandroidx/work/impl/Migration_1_2;-><clinit>()V\nPLandroidx/work/impl/Migration_1_2;-><clinit>()V\nHSPLandroidx/work/impl/Migration_1_2;-><init>()V\nPLandroidx/work/impl/Migration_1_2;-><init>()V\nLandroidx/work/impl/Migration_3_4;\nHSPLandroidx/work/impl/Migration_3_4;-><clinit>()V\nPLandroidx/work/impl/Migration_3_4;-><clinit>()V\nHSPLandroidx/work/impl/Migration_3_4;-><init>()V\nPLandroidx/work/impl/Migration_3_4;-><init>()V\nLandroidx/work/impl/Migration_4_5;\nHSPLandroidx/work/impl/Migration_4_5;-><clinit>()V\nPLandroidx/work/impl/Migration_4_5;-><clinit>()V\nHSPLandroidx/work/impl/Migration_4_5;-><init>()V\nPLandroidx/work/impl/Migration_4_5;-><init>()V\nLandroidx/work/impl/Migration_6_7;\nHSPLandroidx/work/impl/Migration_6_7;-><clinit>()V\nPLandroidx/work/impl/Migration_6_7;-><clinit>()V\nHSPLandroidx/work/impl/Migration_6_7;-><init>()V\nPLandroidx/work/impl/Migration_6_7;-><init>()V\nLandroidx/work/impl/Migration_7_8;\nHSPLandroidx/work/impl/Migration_7_8;-><clinit>()V\nPLandroidx/work/impl/Migration_7_8;-><clinit>()V\nHSPLandroidx/work/impl/Migration_7_8;-><init>()V\nPLandroidx/work/impl/Migration_7_8;-><init>()V\nLandroidx/work/impl/Migration_8_9;\nHSPLandroidx/work/impl/Migration_8_9;-><clinit>()V\nPLandroidx/work/impl/Migration_8_9;-><clinit>()V\nHSPLandroidx/work/impl/Migration_8_9;-><init>()V\nPLandroidx/work/impl/Migration_8_9;-><init>()V\nLandroidx/work/impl/OperationImpl;\nHSPLandroidx/work/impl/OperationImpl;-><init>()V\nPLandroidx/work/impl/OperationImpl;-><init>()V\nHSPLandroidx/work/impl/OperationImpl;->markState(Landroidx/work/WorkManager;)V\nPLandroidx/work/impl/OperationImpl;->markState(Landroidx/work/WorkManager;)V\nLandroidx/work/impl/Processor;\nHSPLandroidx/work/impl/Processor;-><clinit>()V\nPLandroidx/work/impl/Processor;-><clinit>()V\nHSPLandroidx/work/impl/Processor;-><init>(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V\nPLandroidx/work/impl/Processor;-><init>(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V\nHSPLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V\nPLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V\nLandroidx/work/impl/Scheduler;\nLandroidx/work/impl/Schedulers;\nHSPLandroidx/work/impl/Schedulers;-><clinit>()V\nPLandroidx/work/impl/Schedulers;-><clinit>()V\nHSPLandroidx/work/impl/Schedulers;->createBestAvailableBackgroundScheduler(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Landroidx/work/impl/background/systemjob/SystemJobScheduler;\nPLandroidx/work/impl/Schedulers;->createBestAvailableBackgroundScheduler(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Landroidx/work/impl/background/systemjob/SystemJobScheduler;\nHSPLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V\nPLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V\nLandroidx/work/impl/WorkContinuationImpl;\nHSPLandroidx/work/impl/WorkContinuationImpl;-><clinit>()V\nPLandroidx/work/impl/WorkContinuationImpl;-><clinit>()V\nHSPLandroidx/work/impl/WorkContinuationImpl;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;)V\nPLandroidx/work/impl/WorkContinuationImpl;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;)V\nHSPLandroidx/work/impl/WorkContinuationImpl;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;I)V\nPLandroidx/work/impl/WorkContinuationImpl;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;ILjava/util/List;I)V\nHSPLandroidx/work/impl/WorkContinuationImpl;->getExistingWorkPolicy$enumunboxing$()I\nPLandroidx/work/impl/WorkContinuationImpl;->getExistingWorkPolicy$enumunboxing$()I\nHSPLandroidx/work/impl/WorkContinuationImpl;->getName()Ljava/lang/String;\nPLandroidx/work/impl/WorkContinuationImpl;->getName()Ljava/lang/String;\nHSPLandroidx/work/impl/WorkContinuationImpl;->getWork()Ljava/util/List;\nPLandroidx/work/impl/WorkContinuationImpl;->getWork()Ljava/util/List;\nHSPLandroidx/work/impl/WorkContinuationImpl;->getWorkManagerImpl()Landroidx/work/impl/WorkManagerImpl;\nPLandroidx/work/impl/WorkContinuationImpl;->getWorkManagerImpl()Landroidx/work/impl/WorkManagerImpl;\nHSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles()Z\nPLandroidx/work/impl/WorkContinuationImpl;->hasCycles()Z\nHSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/HashSet;)Z\nPLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/HashSet;)Z\nHSPLandroidx/work/impl/WorkContinuationImpl;->markEnqueued()V\nPLandroidx/work/impl/WorkContinuationImpl;->markEnqueued()V\nHSPLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/HashSet;\nPLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/HashSet;\nLandroidx/work/impl/WorkDatabase;\nHSPLandroidx/work/impl/WorkDatabase;-><init>()V\nPLandroidx/work/impl/WorkDatabase;-><init>()V\nLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;\nHSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;-><init>(Landroid/content/Context;)V\nPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;-><init>(Landroid/content/Context;)V\nHSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nLandroidx/work/impl/WorkDatabaseKt;\nHSPLandroidx/work/impl/WorkDatabaseKt;-><clinit>()V\nPLandroidx/work/impl/WorkDatabaseKt;-><clinit>()V\nHSPLandroidx/work/impl/WorkDatabaseKt;->access$getPRUNE_THRESHOLD_MILLIS$p()J\nPLandroidx/work/impl/WorkDatabaseKt;->access$getPRUNE_THRESHOLD_MILLIS$p()J\nLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;\nHSPLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;-><init>()V\nPLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;-><init>()V\nLandroidx/work/impl/WorkDatabase_Impl;\nHSPLandroidx/work/impl/WorkDatabase_Impl;-><init>()V\nPLandroidx/work/impl/WorkDatabase_Impl;-><init>()V\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$1000(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->access$1000(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$300(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->access$300(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$400(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->access$400(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$500(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->access$500(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$602(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/work/impl/WorkDatabase_Impl;->access$602(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$700(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/work/impl/WorkDatabase_Impl;->access$700(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$800(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->access$800(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->access$900(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->access$900(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker;\nPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nPLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List;\nPLandroidx/work/impl/WorkDatabase_Impl;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set;\nPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map;\nPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao_Impl;\nPLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao_Impl;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao_Impl;\nPLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao_Impl;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao_Impl;\nPLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao_Impl;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao_Impl;\nPLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao_Impl;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao_Impl;\nPLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao_Impl;\nHSPLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao_Impl;\nPLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao_Impl;\nLandroidx/work/impl/WorkDatabase_Impl$1;\nHSPLandroidx/work/impl/WorkDatabase_Impl$1;-><init>(Landroidx/work/impl/WorkDatabase_Impl;)V\nPLandroidx/work/impl/WorkDatabase_Impl$1;-><init>(Landroidx/work/impl/WorkDatabase_Impl;)V\nHSPLandroidx/work/impl/WorkDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/work/impl/WorkDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/work/impl/WorkDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/work/impl/WorkDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nLandroidx/work/impl/WorkManagerImpl;\nHSPLandroidx/work/impl/WorkManagerImpl;-><clinit>()V\nPLandroidx/work/impl/WorkManagerImpl;-><clinit>()V\nHSPLandroidx/work/impl/WorkManagerImpl;-><init>(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nPLandroidx/work/impl/WorkManagerImpl;-><init>(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nHSPLandroidx/work/impl/WorkManagerImpl;->cancelUniqueWork(Ljava/lang/String;)Landroidx/work/impl/OperationImpl;\nPLandroidx/work/impl/WorkManagerImpl;->cancelUniqueWork(Ljava/lang/String;)Landroidx/work/impl/OperationImpl;\nHSPLandroidx/work/impl/WorkManagerImpl;->enqueueUniquePeriodicWork(Ljava/lang/String;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/Operation;\nPLandroidx/work/impl/WorkManagerImpl;->enqueueUniquePeriodicWork(Ljava/lang/String;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/Operation;\nHSPLandroidx/work/impl/WorkManagerImpl;->getApplicationContext()Landroid/content/Context;\nPLandroidx/work/impl/WorkManagerImpl;->getApplicationContext()Landroid/content/Context;\nHSPLandroidx/work/impl/WorkManagerImpl;->getConfiguration()Landroidx/work/Configuration;\nPLandroidx/work/impl/WorkManagerImpl;->getConfiguration()Landroidx/work/Configuration;\nHSPLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl;\nPLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl;\nHSPLandroidx/work/impl/WorkManagerImpl;->getPreferenceUtils()Landroidx/work/impl/utils/IdGenerator;\nPLandroidx/work/impl/WorkManagerImpl;->getPreferenceUtils()Landroidx/work/impl/utils/IdGenerator;\nHSPLandroidx/work/impl/WorkManagerImpl;->getProcessor()Landroidx/work/impl/Processor;\nPLandroidx/work/impl/WorkManagerImpl;->getProcessor()Landroidx/work/impl/Processor;\nHSPLandroidx/work/impl/WorkManagerImpl;->getSchedulers()Ljava/util/List;\nPLandroidx/work/impl/WorkManagerImpl;->getSchedulers()Ljava/util/List;\nHSPLandroidx/work/impl/WorkManagerImpl;->getWorkDatabase()Landroidx/work/impl/WorkDatabase;\nPLandroidx/work/impl/WorkManagerImpl;->getWorkDatabase()Landroidx/work/impl/WorkDatabase;\nHSPLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V\nPLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V\nHSPLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V\nPLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V\nLandroidx/work/impl/WorkManagerImpl$Api24Impl;\nHSPLandroidx/work/impl/WorkManagerImpl$Api24Impl;->isDeviceProtectedStorage(Landroid/content/Context;)Z\nPLandroidx/work/impl/WorkManagerImpl$Api24Impl;->isDeviceProtectedStorage(Landroid/content/Context;)Z\nLandroidx/work/impl/WorkMigration9To10;\nHSPLandroidx/work/impl/WorkMigration9To10;-><init>()V\nPLandroidx/work/impl/WorkMigration9To10;-><init>()V\nHSPLandroidx/work/impl/WorkMigration9To10;-><init>(Landroid/content/Context;)V\nPLandroidx/work/impl/WorkMigration9To10;-><init>(Landroid/content/Context;)V\nHSPLandroidx/work/impl/WorkMigration9To10;-><init>(Landroid/content/Context;II)V\nPLandroidx/work/impl/WorkMigration9To10;-><init>(Landroid/content/Context;II)V\nLandroidx/work/impl/WorkerUpdater;\nHSPLandroidx/work/impl/WorkerUpdater;->$r8$lambda$7opHgdrAWKd7YI0k0hRwdd6vZCE(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V\nPLandroidx/work/impl/WorkerUpdater;->$r8$lambda$7opHgdrAWKd7YI0k0hRwdd6vZCE(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V\nHSPLandroidx/work/impl/WorkerUpdater;->migrateDatabase(Landroid/content/Context;)V\nPLandroidx/work/impl/WorkerUpdater;->migrateDatabase(Landroid/content/Context;)V\nLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;\nHSPLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V\nPLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;Lkotlin/jvm/functions/Function0;Landroidx/work/WorkRequest;)V\nHSPLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;->run()V\nPLandroidx/work/impl/WorkerUpdater$$ExternalSyntheticLambda0;->run()V\nLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;\nHSPLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;-><init>(Landroidx/work/WorkRequest;Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;)V\nPLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;-><init>(Landroidx/work/WorkRequest;Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/impl/OperationImpl;)V\nHSPLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;->invoke()Ljava/lang/Object;\nPLandroidx/work/impl/WorkerUpdater$enqueueUniquelyNamedPeriodic$enqueueNew$1;->invoke()Ljava/lang/Object;\nLandroidx/work/impl/background/greedy/DelayedWorkTracker;\nHSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;-><clinit>()V\nPLandroidx/work/impl/background/greedy/DelayedWorkTracker;-><clinit>()V\nHSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;-><init>(Landroidx/work/impl/background/greedy/GreedyScheduler;Landroidx/compose/runtime/Stack;)V\nPLandroidx/work/impl/background/greedy/DelayedWorkTracker;-><init>(Landroidx/work/impl/background/greedy/GreedyScheduler;Landroidx/compose/runtime/Stack;)V\nHSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->schedule(Landroidx/work/impl/model/WorkSpec;)V\nPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->schedule(Landroidx/work/impl/model/WorkSpec;)V\nLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;\nHSPLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;-><init>(Landroidx/work/impl/background/greedy/DelayedWorkTracker;Landroidx/work/impl/model/WorkSpec;)V\nPLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;-><init>(Landroidx/work/impl/background/greedy/DelayedWorkTracker;Landroidx/work/impl/model/WorkSpec;)V\nLandroidx/work/impl/background/greedy/GreedyScheduler;\nHSPLandroidx/work/impl/background/greedy/GreedyScheduler;-><clinit>()V\nPLandroidx/work/impl/background/greedy/GreedyScheduler;-><clinit>()V\nHSPLandroidx/work/impl/background/greedy/GreedyScheduler;-><init>(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/WorkManagerImpl;)V\nPLandroidx/work/impl/background/greedy/GreedyScheduler;-><init>(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/WorkManagerImpl;)V\nHSPLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z\nPLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z\nHSPLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V\nPLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V\nLandroidx/work/impl/background/systemalarm/RescheduleReceiver;\nLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;\nHSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;-><clinit>()V\nPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;-><clinit>()V\nHSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;-><init>(Landroid/content/Context;)V\nPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;-><init>(Landroid/content/Context;)V\nHSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convert(Landroidx/work/impl/model/WorkSpec;I)Landroid/app/job/JobInfo;\nPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convert(Landroidx/work/impl/model/WorkSpec;I)Landroid/app/job/JobInfo;\nLandroidx/work/impl/background/systemjob/SystemJobScheduler;\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;-><clinit>()V\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;-><clinit>()V\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;-><init>(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;-><init>(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/ArrayList;\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/ArrayList;\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->reconcileJobs(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Z\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->reconcileJobs(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)Z\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V\nHSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V\nPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V\nLandroidx/work/impl/background/systemjob/SystemJobService;\nLandroidx/work/impl/constraints/WorkConstraintsCallback;\nLandroidx/work/impl/constraints/WorkConstraintsTrackerImpl;\nHSPLandroidx/work/impl/constraints/WorkConstraintsTrackerImpl;-><init>(Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/constraints/WorkConstraintsCallback;)V\nPLandroidx/work/impl/constraints/WorkConstraintsTrackerImpl;-><init>(Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/constraints/WorkConstraintsCallback;)V\nLandroidx/work/impl/constraints/controllers/BatteryNotLowController;\nHSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;-><init>(Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;)V\nPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;-><init>(Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;)V\nHSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;I)V\nPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;I)V\nLandroidx/work/impl/constraints/controllers/ConstraintController;\nHSPLandroidx/work/impl/constraints/controllers/ConstraintController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V\nPLandroidx/work/impl/constraints/controllers/ConstraintController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V\nLandroidx/work/impl/constraints/controllers/NetworkMeteredController;\nHSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;-><clinit>()V\nPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;-><clinit>()V\nHSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V\nPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V\nLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;\nHSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;-><clinit>()V\nPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;-><clinit>()V\nHSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V\nPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;-><init>(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V\nLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;\nHSPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;I)V\nPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;I)V\nLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;\nHSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;\nHSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;-><init>(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V\nPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;-><init>(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V\nLandroidx/work/impl/constraints/trackers/ConstraintTracker;\nHSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nPLandroidx/work/impl/constraints/trackers/ConstraintTracker;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nHSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->getAppContext()Landroid/content/Context;\nPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->getAppContext()Landroid/content/Context;\nLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;\nHSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;\nHSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;-><init>(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)V\nPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;-><init>(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)V\nLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;\nHSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;-><clinit>()V\nPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;-><clinit>()V\nLandroidx/work/impl/constraints/trackers/Trackers;\nHSPLandroidx/work/impl/constraints/trackers/Trackers;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nPLandroidx/work/impl/constraints/trackers/Trackers;-><init>(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nHSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryChargingTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker;\nPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryChargingTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker;\nHSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryNotLowTracker()Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;\nPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryNotLowTracker()Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;\nHSPLandroidx/work/impl/constraints/trackers/Trackers;->getNetworkStateTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker;\nPLandroidx/work/impl/constraints/trackers/Trackers;->getNetworkStateTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker;\nHSPLandroidx/work/impl/constraints/trackers/Trackers;->getStorageNotLowTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker;\nPLandroidx/work/impl/constraints/trackers/Trackers;->getStorageNotLowTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker;\nLandroidx/work/impl/foreground/ForegroundProcessor;\nLandroidx/work/impl/model/DependencyDao_Impl;\nLandroidx/work/impl/model/Preference;\nHSPLandroidx/work/impl/model/Preference;-><init>(Ljava/lang/Long;Ljava/lang/String;)V\nPLandroidx/work/impl/model/Preference;-><init>(Ljava/lang/Long;Ljava/lang/String;)V\nHSPLandroidx/work/impl/model/Preference;->getKey()Ljava/lang/String;\nPLandroidx/work/impl/model/Preference;->getKey()Ljava/lang/String;\nHSPLandroidx/work/impl/model/Preference;->getValue()Ljava/lang/Long;\nPLandroidx/work/impl/model/Preference;->getValue()Ljava/lang/Long;\nLandroidx/work/impl/model/PreferenceDao_Impl;\nHSPLandroidx/work/impl/model/PreferenceDao_Impl;-><init>(Landroidx/work/impl/WorkDatabase;)V\nPLandroidx/work/impl/model/PreferenceDao_Impl;-><init>(Landroidx/work/impl/WorkDatabase;)V\nHSPLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long;\nPLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long;\nHSPLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V\nPLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V\nLandroidx/work/impl/model/RawWorkInfoDao_Impl;\nLandroidx/work/impl/model/SystemIdInfo;\nHSPLandroidx/work/impl/model/SystemIdInfo;-><init>(Ljava/lang/String;II)V\nPLandroidx/work/impl/model/SystemIdInfo;-><init>(Ljava/lang/String;II)V\nHSPLandroidx/work/impl/model/SystemIdInfo;->getGeneration()I\nPLandroidx/work/impl/model/SystemIdInfo;->getGeneration()I\nLandroidx/work/impl/model/SystemIdInfoDao_Impl;\nHSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/work/impl/model/SystemIdInfoDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nHSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(ILjava/lang/String;)Landroidx/work/impl/model/SystemIdInfo;\nPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(ILjava/lang/String;)Landroidx/work/impl/model/SystemIdInfo;\nHSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo;\nPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo;\nHSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getWorkSpecIds()Ljava/util/ArrayList;\nPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getWorkSpecIds()Ljava/util/ArrayList;\nHSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V\nPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V\nLandroidx/work/impl/model/WorkGenerationalId;\nHSPLandroidx/work/impl/model/WorkGenerationalId;-><init>(Ljava/lang/String;I)V\nPLandroidx/work/impl/model/WorkGenerationalId;-><init>(Ljava/lang/String;I)V\nHSPLandroidx/work/impl/model/WorkGenerationalId;->getGeneration()I\nPLandroidx/work/impl/model/WorkGenerationalId;->getGeneration()I\nHSPLandroidx/work/impl/model/WorkGenerationalId;->getWorkSpecId()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkGenerationalId;->getWorkSpecId()Ljava/lang/String;\nHSPLandroidx/work/impl/model/WorkGenerationalId;->hashCode()I\nPLandroidx/work/impl/model/WorkGenerationalId;->hashCode()I\nLandroidx/work/impl/model/WorkName;\nHSPLandroidx/work/impl/model/WorkName;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nPLandroidx/work/impl/model/WorkName;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nHSPLandroidx/work/impl/model/WorkName;->getName()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkName;->getName()Ljava/lang/String;\nHSPLandroidx/work/impl/model/WorkName;->getWorkSpecId()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkName;->getWorkSpecId()Ljava/lang/String;\nLandroidx/work/impl/model/WorkNameDao_Impl;\nHSPLandroidx/work/impl/model/WorkNameDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/work/impl/model/WorkNameDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nHSPLandroidx/work/impl/model/WorkNameDao_Impl;->insert(Landroidx/work/impl/model/WorkName;)V\nPLandroidx/work/impl/model/WorkNameDao_Impl;->insert(Landroidx/work/impl/model/WorkName;)V\nLandroidx/work/impl/model/WorkProgressDao_Impl;\nHSPLandroidx/work/impl/model/WorkProgressDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/work/impl/model/WorkProgressDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nHSPLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V\nPLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V\nLandroidx/work/impl/model/WorkProgressDao_Impl$2;\nHSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;-><init>(Landroidx/room/RoomDatabase;I)V\nPLandroidx/work/impl/model/WorkProgressDao_Impl$2;-><init>(Landroidx/room/RoomDatabase;I)V\nHSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String;\nLandroidx/work/impl/model/WorkSpec;\nHSPLandroidx/work/impl/model/WorkSpec;-><clinit>()V\nPLandroidx/work/impl/model/WorkSpec;-><clinit>()V\nHSPLandroidx/work/impl/model/WorkSpec;-><init>(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;II)V\nPLandroidx/work/impl/model/WorkSpec;-><init>(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;II)V\nHSPLandroidx/work/impl/model/WorkSpec;-><init>(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;III)V\nPLandroidx/work/impl/model/WorkSpec;-><init>(Ljava/lang/String;Landroidx/work/WorkInfo$State;Ljava/lang/String;Ljava/lang/String;Landroidx/work/Data;Landroidx/work/Data;JJJLandroidx/work/Constraints;ILandroidx/work/BackoffPolicy;JJJJZLandroidx/work/OutOfQuotaPolicy;III)V\nHSPLandroidx/work/impl/model/WorkSpec;-><init>(Ljava/lang/String;Landroidx/work/impl/model/WorkSpec;)V\nPLandroidx/work/impl/model/WorkSpec;-><init>(Ljava/lang/String;Landroidx/work/impl/model/WorkSpec;)V\nHSPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J\nPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J\nHSPLandroidx/work/impl/model/WorkSpec;->getGeneration()I\nPLandroidx/work/impl/model/WorkSpec;->getGeneration()I\nHSPLandroidx/work/impl/model/WorkSpec;->getPeriodCount()I\nPLandroidx/work/impl/model/WorkSpec;->getPeriodCount()I\nHSPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z\nPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z\nHSPLandroidx/work/impl/model/WorkSpec;->setBackoffDelayDuration(J)V\nPLandroidx/work/impl/model/WorkSpec;->setBackoffDelayDuration(J)V\nHSPLandroidx/work/impl/model/WorkSpec;->setPeriodic(JJ)V\nPLandroidx/work/impl/model/WorkSpec;->setPeriodic(JJ)V\nLandroidx/work/impl/model/WorkSpec$IdAndState;\nLandroidx/work/impl/model/WorkSpecDao_Impl;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/work/impl/model/WorkSpecDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling()Ljava/util/ArrayList;\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling()Ljava/util/ArrayList;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/ArrayList;\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/ArrayList;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/ArrayList;\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/ArrayList;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getUnfinishedWorkWithName(Ljava/lang/String;)Ljava/util/ArrayList;\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->getUnfinishedWorkWithName(Ljava/lang/String;)Ljava/util/ArrayList;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec;\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/ArrayList;\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/ArrayList;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->insertWorkSpec(Landroidx/work/impl/model/WorkSpec;)V\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->insertWorkSpec(Landroidx/work/impl/model/WorkSpec;)V\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(JLjava/lang/String;)V\nPLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(JLjava/lang/String;)V\nLandroidx/work/impl/model/WorkSpecDao_Impl$2;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl$2;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/work/impl/model/WorkSpecDao_Impl$2;-><init>(Landroidx/room/RoomDatabase;)V\nLandroidx/work/impl/model/WorkSpecDao_Impl$3;\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;-><init>(Landroidx/room/RoomDatabase;I)V\nPLandroidx/work/impl/model/WorkSpecDao_Impl$3;-><init>(Landroidx/room/RoomDatabase;I)V\nHSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->createQuery()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->createQuery()Ljava/lang/String;\nLandroidx/work/impl/model/WorkTag;\nHSPLandroidx/work/impl/model/WorkTag;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nPLandroidx/work/impl/model/WorkTag;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nHSPLandroidx/work/impl/model/WorkTag;->getTag()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkTag;->getTag()Ljava/lang/String;\nHSPLandroidx/work/impl/model/WorkTag;->getWorkSpecId()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkTag;->getWorkSpecId()Ljava/lang/String;\nLandroidx/work/impl/model/WorkTagDao_Impl;\nHSPLandroidx/work/impl/model/WorkTagDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nPLandroidx/work/impl/model/WorkTagDao_Impl;-><init>(Landroidx/room/RoomDatabase;)V\nHSPLandroidx/work/impl/model/WorkTagDao_Impl;->insert(Landroidx/work/impl/model/WorkTag;)V\nPLandroidx/work/impl/model/WorkTagDao_Impl;->insert(Landroidx/work/impl/model/WorkTag;)V\nHSPLandroidx/work/impl/model/WorkTagDao_Impl;->insertTags(Ljava/lang/String;Ljava/util/Set;)V\nPLandroidx/work/impl/model/WorkTagDao_Impl;->insertTags(Ljava/lang/String;Ljava/util/Set;)V\nLandroidx/work/impl/model/WorkTagDao_Impl$1;\nHSPLandroidx/work/impl/model/WorkTagDao_Impl$1;-><init>(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V\nPLandroidx/work/impl/model/WorkTagDao_Impl$1;-><init>(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V\nHSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V\nPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V\nHSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String;\nPLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String;\nLandroidx/work/impl/model/WorkTagDao_Impl$2;\nHSPLandroidx/work/impl/model/WorkTagDao_Impl$2;-><init>(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V\nPLandroidx/work/impl/model/WorkTagDao_Impl$2;-><init>(Ljava/lang/Object;Landroidx/room/RoomDatabase;I)V\nLandroidx/work/impl/utils/Api28Impl;\nHSPLandroidx/work/impl/utils/Api28Impl;-><clinit>()V\nPLandroidx/work/impl/utils/Api28Impl;-><clinit>()V\nHSPLandroidx/work/impl/utils/Api28Impl;-><init>()V\nPLandroidx/work/impl/utils/Api28Impl;-><init>()V\nHSPLandroidx/work/impl/utils/Api28Impl;->getProcessName()Ljava/lang/String;\nPLandroidx/work/impl/utils/Api28Impl;->getProcessName()Ljava/lang/String;\nLandroidx/work/impl/utils/CancelWorkRunnable$3;\nHSPLandroidx/work/impl/utils/CancelWorkRunnable$3;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Z)V\nPLandroidx/work/impl/utils/CancelWorkRunnable$3;-><init>(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Z)V\nHSPLandroidx/work/impl/utils/CancelWorkRunnable$3;->runInternal()V\nPLandroidx/work/impl/utils/CancelWorkRunnable$3;->runInternal()V\nLandroidx/work/impl/utils/DurationApi26Impl;\nHSPLandroidx/work/impl/utils/DurationApi26Impl;->toMillisCompat(Lj$/time/Duration;)J\nPLandroidx/work/impl/utils/DurationApi26Impl;->toMillisCompat(Lj$/time/Duration;)J\nLandroidx/work/impl/utils/EnqueueRunnable;\nHSPLandroidx/work/impl/utils/EnqueueRunnable;-><clinit>()V\nPLandroidx/work/impl/utils/EnqueueRunnable;-><clinit>()V\nHSPLandroidx/work/impl/utils/EnqueueRunnable;-><init>(Landroidx/work/impl/WorkContinuationImpl;Landroidx/work/impl/OperationImpl;)V\nPLandroidx/work/impl/utils/EnqueueRunnable;-><init>(Landroidx/work/impl/WorkContinuationImpl;Landroidx/work/impl/OperationImpl;)V\nHSPLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z\nPLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z\nHSPLandroidx/work/impl/utils/EnqueueRunnable;->run()V\nPLandroidx/work/impl/utils/EnqueueRunnable;->run()V\nLandroidx/work/impl/utils/ForceStopRunnable;\nHSPLandroidx/work/impl/utils/ForceStopRunnable;-><clinit>()V\nPLandroidx/work/impl/utils/ForceStopRunnable;-><clinit>()V\nHSPLandroidx/work/impl/utils/ForceStopRunnable;-><init>(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V\nPLandroidx/work/impl/utils/ForceStopRunnable;-><init>(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V\nHSPLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V\nPLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V\nHSPLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z\nPLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z\nHSPLandroidx/work/impl/utils/ForceStopRunnable;->run()V\nPLandroidx/work/impl/utils/ForceStopRunnable;->run()V\nLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;\nHSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()Landroid/util/CloseGuard;\nPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()Landroid/util/CloseGuard;\nHSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()V\nPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m()V\nHSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ActivityManager;)Ljava/util/List;\nPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ActivityManager;)Ljava/util/List;\nHSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/InstallSourceInfo;)Ljava/lang/String;\nPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/InstallSourceInfo;)Ljava/lang/String;\nHSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;\nPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;\nHSPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/util/CloseGuard;Ljava/lang/String;)V\nPLandroidx/work/impl/utils/ForceStopRunnable$$ExternalSyntheticApiModelOutline0;->m(Landroid/util/CloseGuard;Ljava/lang/String;)V\nLandroidx/work/impl/utils/ForceStopRunnable$BroadcastReceiver;\nLandroidx/work/impl/utils/IdGenerator;\nHSPLandroidx/work/impl/utils/IdGenerator;->$r8$lambda$LyUC9fmKDw6AhARQq6V7VCdkafU(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer;\nPLandroidx/work/impl/utils/IdGenerator;->$r8$lambda$LyUC9fmKDw6AhARQq6V7VCdkafU(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer;\nHSPLandroidx/work/impl/utils/IdGenerator;-><init>(Landroidx/work/impl/WorkDatabase;I)V\nPLandroidx/work/impl/utils/IdGenerator;-><init>(Landroidx/work/impl/WorkDatabase;I)V\nHSPLandroidx/work/impl/utils/IdGenerator;->getNeedsReschedule()Z\nPLandroidx/work/impl/utils/IdGenerator;->getNeedsReschedule()Z\nHSPLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange(I)I\nPLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange(I)I\nLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;\nHSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;-><init>(Landroidx/work/impl/utils/IdGenerator;I)V\nPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;-><init>(Landroidx/work/impl/utils/IdGenerator;I)V\nHSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->call()Ljava/lang/Object;\nPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->call()Ljava/lang/Object;\nLandroidx/work/impl/utils/LiveDataUtils$1$1;\nHSPLandroidx/work/impl/utils/LiveDataUtils$1$1;-><init>(Landroidx/work/impl/utils/SerialExecutorImpl;Ljava/lang/Runnable;)V\nPLandroidx/work/impl/utils/LiveDataUtils$1$1;-><init>(Landroidx/work/impl/utils/SerialExecutorImpl;Ljava/lang/Runnable;)V\nHSPLandroidx/work/impl/utils/LiveDataUtils$1$1;->run()V\nPLandroidx/work/impl/utils/LiveDataUtils$1$1;->run()V\nLandroidx/work/impl/utils/PackageManagerHelper;\nHSPLandroidx/work/impl/utils/PackageManagerHelper;-><clinit>()V\nPLandroidx/work/impl/utils/PackageManagerHelper;-><clinit>()V\nHSPLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V\nPLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V\nLandroidx/work/impl/utils/ProcessUtils;\nHSPLandroidx/work/impl/utils/ProcessUtils;-><clinit>()V\nPLandroidx/work/impl/utils/ProcessUtils;-><clinit>()V\nHSPLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z\nPLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z\nLandroidx/work/impl/utils/RawQueries;\nHSPLandroidx/work/impl/utils/RawQueries;->access$nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I\nPLandroidx/work/impl/utils/RawQueries;->access$nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I\nLandroidx/work/impl/utils/SerialExecutorImpl;\nHSPLandroidx/work/impl/utils/SerialExecutorImpl;-><init>(Ljava/util/concurrent/ExecutorService;)V\nPLandroidx/work/impl/utils/SerialExecutorImpl;-><init>(Ljava/util/concurrent/ExecutorService;)V\nHSPLandroidx/work/impl/utils/SerialExecutorImpl;->execute(Ljava/lang/Runnable;)V\nPLandroidx/work/impl/utils/SerialExecutorImpl;->execute(Ljava/lang/Runnable;)V\nHSPLandroidx/work/impl/utils/SerialExecutorImpl;->scheduleNext()V\nPLandroidx/work/impl/utils/SerialExecutorImpl;->scheduleNext()V\nLandroidx/work/impl/utils/StatusRunnable;\nHSPLandroidx/work/impl/utils/StatusRunnable;-><init>(I)V\nPLandroidx/work/impl/utils/StatusRunnable;-><init>(I)V\nHSPLandroidx/work/impl/utils/StatusRunnable;->forName(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;)Landroidx/work/impl/utils/StatusRunnable;\nPLandroidx/work/impl/utils/StatusRunnable;->forName(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;)Landroidx/work/impl/utils/StatusRunnable;\nHSPLandroidx/work/impl/utils/StatusRunnable;->getOperation()Landroidx/work/impl/OperationImpl;\nPLandroidx/work/impl/utils/StatusRunnable;->getOperation()Landroidx/work/impl/OperationImpl;\nHSPLandroidx/work/impl/utils/StatusRunnable;->run()V\nPLandroidx/work/impl/utils/StatusRunnable;->run()V\nLandroidx/work/impl/utils/futures/AbstractFuture;\nHSPLandroidx/work/impl/utils/futures/AbstractFuture;-><clinit>()V\nPLandroidx/work/impl/utils/futures/AbstractFuture;-><clinit>()V\nHSPLandroidx/work/impl/utils/futures/AbstractFuture;-><init>()V\nPLandroidx/work/impl/utils/futures/AbstractFuture;-><init>()V\nHSPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V\nPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V\nHSPLandroidx/work/impl/utils/futures/AbstractFuture;->set(Ljava/lang/Object;)Z\nPLandroidx/work/impl/utils/futures/AbstractFuture;->set(Ljava/lang/Object;)Z\nLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;-><init>()V\nPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;-><init>()V\nLandroidx/work/impl/utils/futures/AbstractFuture$Listener;\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;-><clinit>()V\nPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;-><clinit>()V\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;-><init>(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V\nPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;-><init>(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V\nLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V\nPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casListeners(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Z\nPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casListeners(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Z\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z\nPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casWaiters(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;)Z\nPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casWaiters(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;)Z\nLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;-><clinit>()V\nPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;-><clinit>()V\nHSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;-><init>(I)V\nPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;-><init>(I)V\nLandroidx/work/impl/utils/futures/SettableFuture;\nHSPLandroidx/work/impl/utils/futures/SettableFuture;-><init>()V\nPLandroidx/work/impl/utils/futures/SettableFuture;-><init>()V\nHSPLandroidx/work/impl/utils/futures/SettableFuture;->create()Landroidx/work/impl/utils/futures/SettableFuture;\nPLandroidx/work/impl/utils/futures/SettableFuture;->create()Landroidx/work/impl/utils/futures/SettableFuture;\nHSPLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z\nPLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z\nLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;\nHSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;-><init>(Ljava/util/concurrent/ExecutorService;)V\nPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;-><init>(Ljava/util/concurrent/ExecutorService;)V\nHSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->executeOnTaskThread(Ljava/lang/Runnable;)V\nPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->executeOnTaskThread(Ljava/lang/Runnable;)V\nHSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor$1()Landroidx/work/impl/utils/SerialExecutorImpl;\nPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor$1()Landroidx/work/impl/utils/SerialExecutorImpl;\nLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;\nHSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;-><init>(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;-><init>(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V\nLapp/cash/sqldelight/ColumnAdapter;\nLapp/cash/sqldelight/ExecutableQuery;\nHSPLapp/cash/sqldelight/ExecutableQuery;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLapp/cash/sqldelight/ExecutableQuery;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLapp/cash/sqldelight/ExecutableQuery;->getMapper()Lkotlin/jvm/functions/Function1;\nPLapp/cash/sqldelight/ExecutableQuery;->getMapper()Lkotlin/jvm/functions/Function1;\nLapp/cash/sqldelight/Query;\nHSPLapp/cash/sqldelight/Query;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLapp/cash/sqldelight/Query;-><init>(Lkotlin/jvm/functions/Function1;)V\nLapp/cash/sqldelight/Query$Listener;\nLapp/cash/sqldelight/QueryKt;\nHSPLapp/cash/sqldelight/QueryKt;->Query(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/Query;\nPLapp/cash/sqldelight/QueryKt;->Query(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/Query;\nLapp/cash/sqldelight/SimpleQuery;\nHSPLapp/cash/sqldelight/SimpleQuery;-><init>(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V\nPLapp/cash/sqldelight/SimpleQuery;-><init>(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V\nHSPLapp/cash/sqldelight/SimpleQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nPLapp/cash/sqldelight/SimpleQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nHSPLapp/cash/sqldelight/SimpleQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLapp/cash/sqldelight/SimpleQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nLapp/cash/sqldelight/Transacter;\nLapp/cash/sqldelight/TransacterImpl;\nHSPLapp/cash/sqldelight/TransacterImpl;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLapp/cash/sqldelight/TransacterImpl;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nHSPLapp/cash/sqldelight/TransacterImpl;->getDriver()Lapp/cash/sqldelight/db/SqlDriver;\nPLapp/cash/sqldelight/TransacterImpl;->getDriver()Lapp/cash/sqldelight/db/SqlDriver;\nLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;\nHSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;->awaitAsList(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;->awaitAsList(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;\nHSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;-><init>(Lapp/cash/sqldelight/Query;I)V\nPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;-><init>(Lapp/cash/sqldelight/Query;I)V\nHSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult;\nPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult;\nHSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/coroutines/FlowQuery;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery;->toFlow(Lapp/cash/sqldelight/Query;)Lkotlinx/coroutines/flow/Flow;\nPLapp/cash/sqldelight/coroutines/FlowQuery;->toFlow(Lapp/cash/sqldelight/Query;)Lkotlinx/coroutines/flow/Flow;\nLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;-><init>(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V\nPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;-><init>(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;-><init>(Lkotlinx/coroutines/channels/Channel;)V\nPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;-><init>(Lkotlinx/coroutines/channels/Channel;)V\nLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;-><init>(Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;-><init>(Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;-><init>(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;-><init>(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineDispatcher;I)V\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineDispatcher;I)V\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;I)V\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;I)V\nHSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLapp/cash/sqldelight/db/AfterVersion;\nLapp/cash/sqldelight/db/QueryResult;\nHSPLapp/cash/sqldelight/db/QueryResult;-><clinit>()V\nPLapp/cash/sqldelight/db/QueryResult;-><clinit>()V\nLapp/cash/sqldelight/db/QueryResult$AsyncValue;\nLapp/cash/sqldelight/db/QueryResult$Companion;\nHSPLapp/cash/sqldelight/db/QueryResult$Companion;-><clinit>()V\nPLapp/cash/sqldelight/db/QueryResult$Companion;-><clinit>()V\nHSPLapp/cash/sqldelight/db/QueryResult$Companion;-><init>()V\nPLapp/cash/sqldelight/db/QueryResult$Companion;-><init>()V\nLapp/cash/sqldelight/db/QueryResult$Value;\nHSPLapp/cash/sqldelight/db/QueryResult$Value;-><init>(Ljava/lang/Object;)V\nPLapp/cash/sqldelight/db/QueryResult$Value;-><init>(Ljava/lang/Object;)V\nHSPLapp/cash/sqldelight/db/QueryResult$Value;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLapp/cash/sqldelight/db/QueryResult$Value;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLapp/cash/sqldelight/db/QueryResult$Value;->box-impl(Ljava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLapp/cash/sqldelight/db/QueryResult$Value;->box-impl(Ljava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult$Value;\nHSPLapp/cash/sqldelight/db/QueryResult$Value;->getValue()Ljava/lang/Object;\nPLapp/cash/sqldelight/db/QueryResult$Value;->getValue()Ljava/lang/Object;\nLapp/cash/sqldelight/db/SqlCursor;\nLapp/cash/sqldelight/db/SqlDriver;\nLapp/cash/sqldelight/db/SqlPreparedStatement;\nLapp/cash/sqldelight/db/SqlSchema;\nLapp/cash/sqldelight/driver/android/AndroidCursor;\nHSPLapp/cash/sqldelight/driver/android/AndroidCursor;-><init>(Landroid/database/Cursor;)V\nPLapp/cash/sqldelight/driver/android/AndroidCursor;-><init>(Landroid/database/Cursor;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidCursor;->getLong(I)Ljava/lang/Long;\nPLapp/cash/sqldelight/driver/android/AndroidCursor;->getLong(I)Ljava/lang/Long;\nHSPLapp/cash/sqldelight/driver/android/AndroidCursor;->getString(I)Ljava/lang/String;\nPLapp/cash/sqldelight/driver/android/AndroidCursor;->getString(I)Ljava/lang/String;\nHSPLapp/cash/sqldelight/driver/android/AndroidCursor;->next()Lapp/cash/sqldelight/db/QueryResult$Value;\nPLapp/cash/sqldelight/driver/android/AndroidCursor;->next()Lapp/cash/sqldelight/db/QueryResult$Value;\nLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;\nHSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;-><init>(Landroidx/sqlite/db/SupportSQLiteStatement;)V\nPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;-><init>(Landroidx/sqlite/db/SupportSQLiteStatement;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->close()V\nPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->close()V\nHSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->execute()J\nPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->execute()J\nLapp/cash/sqldelight/driver/android/AndroidQuery;\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;-><init>(Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery;-><init>(Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindBoolean(ILjava/lang/Boolean;)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindBoolean(ILjava/lang/Boolean;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindLong(ILjava/lang/Long;)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindLong(ILjava/lang/Long;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindString(ILjava/lang/String;)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindString(ILjava/lang/String;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;->executeQuery(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidQuery;->executeQuery(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery;->getSql()Ljava/lang/String;\nPLapp/cash/sqldelight/driver/android/AndroidQuery;->getSql()Ljava/lang/String;\nLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;-><init>(IILjava/lang/Object;)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;-><init>(IILjava/lang/Object;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Landroidx/sqlite/db/SupportSQLiteProgram;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidQuery$bindLong$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;-><init>(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;-><init>(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;-><init>(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;-><init>(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;I)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;-><init>(Ltachiyomi/data/data/DatabaseImpl$Schema;Landroid/app/Application;Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;Leu/kanade/tachiyomi/AppModule$registerInjectables$1$1;)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;-><init>(Ltachiyomi/data/data/DatabaseImpl$Schema;Landroid/app/Application;Lio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;Leu/kanade/tachiyomi/AppModule$registerInjectables$1$1;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getDatabase(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteDatabase;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getDatabase(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteDatabase;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getOpenHelper$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getOpenHelper$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->addListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->addListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute-zeHU3Mk(Ljava/lang/Integer;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute-zeHU3Mk(Ljava/lang/Integer;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->executeQuery(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->executeQuery(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;-><init>(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;-><init>(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;-><init>(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Ljava/lang/Object;I)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;-><init>(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Ljava/lang/Object;I)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Ljava/lang/Object;\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;-><clinit>()V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;-><clinit>()V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;-><init>()V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;-><init>()V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;-><init>(Ljava/lang/String;Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;I)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;-><init>(Ljava/lang/String;Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;I)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Ljava/lang/Object;\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;\nHSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;-><init>(I)V\nPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;-><init>(I)V\nLapp/cash/sqldelight/driver/android/AndroidStatement;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;-><clinit>()V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;-><clinit>()V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;-><init>()V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;-><init>()V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$LifecycleDisposableEffect(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$LifecycleDisposableEffect(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$getHooks(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;)Ljava/util/List;\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$getHooks(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroidx/compose/runtime/Composer;)Ljava/util/List;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStart(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStart(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStop(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$onStop(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$performSave(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$performSave(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$registerLifecycleListener(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->access$registerLifecycleListener(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;->onDispose(Lcafe/adriel/voyager/core/screen/Screen;)V\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion;->get(Lcafe/adriel/voyager/core/screen/Screen;)Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion;->get(Lcafe/adriel/voyager/core/screen/Screen;)Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;-><clinit>()V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;-><clinit>()V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;-><init>()V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;-><init>()V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$Companion$get$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;-><init>(IILjava/lang/Object;)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;-><init>(IILjava/lang/Object;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;-><clinit>()V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;-><clinit>()V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;-><init>()V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;-><init>()V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->invoke()Ljava/lang/Object;\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$LifecycleDisposableEffect$savedState$1;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Lkotlin/jvm/functions/Function2;I)V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Lkotlin/jvm/functions/Function2;I)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$ProvideBeforeScreenContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;-><init>(Landroidx/lifecycle/Lifecycle;Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;)V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;-><init>(Landroidx/lifecycle/Lifecycle;Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;)V\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;->invoke()Ljava/lang/Object;\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$1;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;\nHSPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;-><init>(Lcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner;Landroid/os/Bundle;)V\nPLcafe/adriel/voyager/androidx/AndroidScreenLifecycleOwner$registerLifecycleListener$observer$1;->onStop(Landroidx/lifecycle/LifecycleOwner;)V\nLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nHSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;-><init>()V\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;-><init>()V\nHSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->entrySet()Ljava/util/Set;\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->entrySet()Ljava/util/Set;\nHSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;\nHSPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;-><init>()V\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;-><init>()V\nHSPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->add(Ljava/lang/Object;)Z\nHPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->add(Ljava/lang/Object;)Z\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->iterator()Ljava/util/Iterator;\nPLcafe/adriel/voyager/core/concurrent/ThreadSafeSet;->remove(Ljava/lang/Object;)Z\nLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;\nHSPLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;-><init>(Landroid/app/Activity;)V\nPLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;-><init>(Landroid/app/Activity;)V\nPLcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;->isChangingConfigurations()Z\nLcafe/adriel/voyager/core/lifecycle/DefaultNavigatorScreenLifecycleProvider;\nHSPLcafe/adriel/voyager/core/lifecycle/DefaultNavigatorScreenLifecycleProvider;-><init>()V\nPLcafe/adriel/voyager/core/lifecycle/DefaultNavigatorScreenLifecycleProvider;-><init>()V\nLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;\nHSPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;-><clinit>()V\nPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;-><clinit>()V\nHSPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;-><init>()V\nPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;-><init>()V\nHSPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V\nHPLcafe/adriel/voyager/core/lifecycle/DefaultScreenLifecycleOwner;->ProvideBeforeScreenContent(ILandroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function4;)V\nLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;\nHSPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;-><init>(Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;Lkotlin/jvm/functions/Function1;)V\nPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;-><init>(Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;Lkotlin/jvm/functions/Function1;)V\nPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->onForgotten()V\nHSPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->onRemembered()V\nPLcafe/adriel/voyager/core/lifecycle/DisposableEffectIgnoringConfigurationImpl;->onRemembered()V\nLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;-><init>(Ljava/util/List;)V\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;-><init>(Ljava/util/List;)V\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;->invoke()Ljava/lang/Object;\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$MultipleProvideBeforeScreenContent$1;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$1;\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$1;-><init>(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/jvm/functions/Function4;)V\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$1;-><init>(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/jvm/functions/Function4;)V\nLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;-><init>(Lkotlin/jvm/functions/Function4;I)V\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;-><init>(Lkotlin/jvm/functions/Function4;I)V\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;-><init>(Lkotlin/jvm/functions/Function2;I)V\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;-><init>(Lkotlin/jvm/functions/Function2;I)V\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;-><init>(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V\nPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;-><init>(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/lifecycle/MultipleScreenLifecycleOwnerUtilKt$RecursiveProvideBeforeScreenContent$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;\nHSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;-><clinit>()V\nPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;-><clinit>()V\nHSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;->getLocalNavigatorScreenLifecycleProvider()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt;->getLocalNavigatorScreenLifecycleProvider()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;\nHSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;-><clinit>()V\nPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;-><clinit>()V\nHSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;-><init>()V\nPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;-><init>()V\nHSPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->invoke()Ljava/lang/Object;\nPLcafe/adriel/voyager/core/lifecycle/NavigatorScreenLifecycleKt$LocalNavigatorScreenLifecycleProvider$1;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;-><clinit>()V\nPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;-><clinit>()V\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->DisposableEffectIgnoringConfiguration(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V\nPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->DisposableEffectIgnoringConfiguration(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->MultipleProvideBeforeScreenContent(Ljava/util/List;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->MultipleProvideBeforeScreenContent(Ljava/util/List;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$RecursiveProvideBeforeScreenContent(Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope;\nPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope;\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->getConfigurationChecker(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;\nPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleKt;->getConfigurationChecker(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/core/lifecycle/ConfigurationChecker;\nLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;\nLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;-><clinit>()V\nPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;-><clinit>()V\nHSPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->register(Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;)Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;\nHPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->register(Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/reflect/KType;Lkotlin/jvm/functions/Function1;)Lcafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner;\nHPLcafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore;->remove(Lcafe/adriel/voyager/core/screen/Screen;)V\nLcafe/adriel/voyager/core/model/ScreenModel;\nLcafe/adriel/voyager/core/model/ScreenModelKt;\nHSPLcafe/adriel/voyager/core/model/ScreenModelKt;->getCoroutineScope(Lcafe/adriel/voyager/core/model/ScreenModel;)Lkotlinx/coroutines/CoroutineScope;\nPLcafe/adriel/voyager/core/model/ScreenModelKt;->getCoroutineScope(Lcafe/adriel/voyager/core/model/ScreenModel;)Lkotlinx/coroutines/CoroutineScope;\nLcafe/adriel/voyager/core/model/ScreenModelStore;\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore;-><clinit>()V\nPLcafe/adriel/voyager/core/model/ScreenModelStore;-><clinit>()V\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencies()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencies()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencyKey(Lcafe/adriel/voyager/core/model/ScreenModel;Ljava/lang/String;)Ljava/lang/String;\nHPLcafe/adriel/voyager/core/model/ScreenModelStore;->getDependencyKey(Lcafe/adriel/voyager/core/model/ScreenModel;Ljava/lang/String;)Ljava/lang/String;\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getLastScreenModelKey()Lkotlinx/coroutines/flow/MutableStateFlow;\nPLcafe/adriel/voyager/core/model/ScreenModelStore;->getLastScreenModelKey()Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore;->getScreenModels()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nPLcafe/adriel/voyager/core/model/ScreenModelStore;->getScreenModels()Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nPLcafe/adriel/voyager/core/model/ScreenModelStore;->onEach(Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/jvm/functions/Function1;)V\nPLcafe/adriel/voyager/core/model/ScreenModelStore;->remove(Lcafe/adriel/voyager/core/screen/Screen;)V\nPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$1;-><init>(Lcafe/adriel/voyager/core/screen/Screen;)V\nHPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;-><clinit>()V\nPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;-><clinit>()V\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;-><init>(I)V\nPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;-><init>(I)V\nHSPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/core/model/ScreenModelStore$onEach$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/core/model/StateScreenModel;\nHSPLcafe/adriel/voyager/core/model/StateScreenModel;-><init>(Ljava/lang/Object;)V\nPLcafe/adriel/voyager/core/model/StateScreenModel;-><init>(Ljava/lang/Object;)V\nHSPLcafe/adriel/voyager/core/model/StateScreenModel;->getMutableState()Lkotlinx/coroutines/flow/MutableStateFlow;\nPLcafe/adriel/voyager/core/model/StateScreenModel;->getMutableState()Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLcafe/adriel/voyager/core/model/StateScreenModel;->getState()Lkotlinx/coroutines/flow/StateFlow;\nPLcafe/adriel/voyager/core/model/StateScreenModel;->getState()Lkotlinx/coroutines/flow/StateFlow;\nLcafe/adriel/voyager/core/screen/Screen;\nLcafe/adriel/voyager/core/stack/SnapshotStateStack;\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;-><init>(Ljava/util/List;)V\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack;-><init>(Ljava/util/List;)V\nPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->clearEvent()V\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getCanPop()Z\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getCanPop()Z\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getItems()Ljava/util/List;\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getItems()Ljava/util/List;\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent;\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent;\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastItemOrNull()Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getLastItemOrNull()Ljava/lang/Object;\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getStateStack()Landroidx/compose/runtime/snapshots/SnapshotStateList;\nPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->getStateStack()Landroidx/compose/runtime/snapshots/SnapshotStateList;\nPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->push(Ljava/lang/Object;)V\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->replaceAll(Ljava/lang/Object;)V\nPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->replaceAll(Ljava/lang/Object;)V\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->setLastEvent(Lcafe/adriel/voyager/core/stack/StackEvent;)V\nPLcafe/adriel/voyager/core/stack/SnapshotStateStack;->setLastEvent(Lcafe/adriel/voyager/core/stack/StackEvent;)V\nLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;-><init>(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;)V\nPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;-><init>(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;)V\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;->invoke()Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack$canPop$2;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;-><init>(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;I)V\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;-><init>(Lcafe/adriel/voyager/core/stack/SnapshotStateStack;I)V\nHSPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;->invoke()Ljava/lang/Object;\nHPLcafe/adriel/voyager/core/stack/SnapshotStateStack$size$2;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/core/stack/StackEvent;\nHSPLcafe/adriel/voyager/core/stack/StackEvent;-><clinit>()V\nPLcafe/adriel/voyager/core/stack/StackEvent;-><clinit>()V\nHSPLcafe/adriel/voyager/core/stack/StackEvent;-><init>(Ljava/lang/String;I)V\nPLcafe/adriel/voyager/core/stack/StackEvent;-><init>(Ljava/lang/String;I)V\nLcafe/adriel/voyager/navigator/Navigator;\nHSPLcafe/adriel/voyager/navigator/Navigator;-><init>(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V\nHPLcafe/adriel/voyager/navigator/Navigator;-><init>(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLcafe/adriel/voyager/navigator/Navigator;->access$getStateHolder$p(Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaveableStateHolder;\nPLcafe/adriel/voyager/navigator/Navigator;->access$getStateHolder$p(Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaveableStateHolder;\nHSPLcafe/adriel/voyager/navigator/Navigator;->access$saveableState$provideSaveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/navigator/Navigator;->access$saveableState$provideSaveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nPLcafe/adriel/voyager/navigator/Navigator;->clearEvent()V\nPLcafe/adriel/voyager/navigator/Navigator;->dispose(Lcafe/adriel/voyager/core/screen/Screen;)V\nHSPLcafe/adriel/voyager/navigator/Navigator;->getCanPop()Z\nPLcafe/adriel/voyager/navigator/Navigator;->getCanPop()Z\nHSPLcafe/adriel/voyager/navigator/Navigator;->getDisposeBehavior()Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;\nPLcafe/adriel/voyager/navigator/Navigator;->getDisposeBehavior()Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;\nHSPLcafe/adriel/voyager/navigator/Navigator;->getItems()Ljava/util/List;\nPLcafe/adriel/voyager/navigator/Navigator;->getItems()Ljava/util/List;\nHSPLcafe/adriel/voyager/navigator/Navigator;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent;\nPLcafe/adriel/voyager/navigator/Navigator;->getLastEvent()Lcafe/adriel/voyager/core/stack/StackEvent;\nHSPLcafe/adriel/voyager/navigator/Navigator;->getLastItem()Lcafe/adriel/voyager/core/screen/Screen;\nHPLcafe/adriel/voyager/navigator/Navigator;->getLastItem()Lcafe/adriel/voyager/core/screen/Screen;\nHSPLcafe/adriel/voyager/navigator/Navigator;->getLastItemOrNull()Lcafe/adriel/voyager/core/screen/Screen;\nPLcafe/adriel/voyager/navigator/Navigator;->getLastItemOrNull()Lcafe/adriel/voyager/core/screen/Screen;\nHSPLcafe/adriel/voyager/navigator/Navigator;->getParent()Lcafe/adriel/voyager/navigator/Navigator;\nPLcafe/adriel/voyager/navigator/Navigator;->getParent()Lcafe/adriel/voyager/navigator/Navigator;\nPLcafe/adriel/voyager/navigator/Navigator;->push(Lcafe/adriel/voyager/core/screen/Screen;)V\nHSPLcafe/adriel/voyager/navigator/Navigator;->replaceAll(Lcafe/adriel/voyager/core/screen/Screen;)V\nPLcafe/adriel/voyager/navigator/Navigator;->replaceAll(Lcafe/adriel/voyager/core/screen/Screen;)V\nHSPLcafe/adriel/voyager/navigator/Navigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLcafe/adriel/voyager/navigator/Navigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/core/screen/Screen;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nPLcafe/adriel/voyager/navigator/Navigator$dispose$1;-><init>(Lcafe/adriel/voyager/core/screen/Screen;)V\nHPLcafe/adriel/voyager/navigator/Navigator$dispose$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/Navigator$last$2;\nHSPLcafe/adriel/voyager/navigator/Navigator$last$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nPLcafe/adriel/voyager/navigator/Navigator$last$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nHSPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Lcafe/adriel/voyager/core/screen/Screen;\nPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Lcafe/adriel/voyager/core/screen/Screen;\nHSPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/Navigator$last$2;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/Navigator$saveableState$1;\nHSPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;-><init>(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;-><init>(Ljava/lang/String;Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/Navigator$saveableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/Navigator$saveableState$2;\nHSPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;I)V\nPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Ljava/lang/String;Lkotlin/jvm/functions/Function2;I)V\nHSPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/Navigator$saveableState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/Navigator$saveableState$3;\nLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;\nHSPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;-><init>(ZZ)V\nPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;-><init>(ZZ)V\nPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->equals(Ljava/lang/Object;)Z\nHSPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeNestedNavigators()Z\nPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeNestedNavigators()Z\nHSPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeSteps()Z\nPLcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;->getDisposeSteps()Z\nLcafe/adriel/voyager/navigator/NavigatorKt;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt;-><clinit>()V\nPLcafe/adriel/voyager/navigator/NavigatorKt;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Lcafe/adriel/voyager/core/screen/Screen;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Lcafe/adriel/voyager/core/screen/Screen;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Ljava/util/List;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLcafe/adriel/voyager/navigator/NavigatorKt;->Navigator(Ljava/util/List;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt;->compositionUniqueId(Landroidx/compose/runtime/Composer;)Ljava/lang/String;\nHPLcafe/adriel/voyager/navigator/NavigatorKt;->compositionUniqueId(Landroidx/compose/runtime/Composer;)Ljava/lang/String;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt;->getCurrentOrThrow(Landroidx/compose/runtime/StaticProvidableCompositionLocal;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/NavigatorKt;->getCurrentOrThrow(Landroidx/compose/runtime/StaticProvidableCompositionLocal;Landroidx/compose/runtime/Composer;)Ljava/lang/Object;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt;->getLocalNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLcafe/adriel/voyager/navigator/NavigatorKt;->getLocalNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;-><clinit>()V\nPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;-><init>(I)V\nPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;-><init>(I)V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->invoke()Ljava/lang/Object;\nPLcafe/adriel/voyager/navigator/NavigatorKt$LocalNavigator$1;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;-><clinit>()V\nPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;-><init>()V\nPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$1;-><init>()V\nLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;-><init>(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V\nPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;-><init>(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;-><init>(Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function3;)V\nPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;-><init>(Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function3;)V\nHSPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/NavigatorKt$Navigator$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/NavigatorSaver;\nLcafe/adriel/voyager/navigator/NavigatorSaverKt;\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt;-><clinit>()V\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt;->getLocalNavigatorSaver()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt;->getLocalNavigatorSaver()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;-><clinit>()V\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;-><init>()V\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;-><init>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->saver(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1;->saver(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1;\nLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;-><clinit>()V\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;-><init>()V\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;-><init>()V\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$2;\nHSPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$2;-><init>(Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/NavigatorSaverKt$defaultNavigatorSaver$1$saver$2;-><init>(Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V\nLcafe/adriel/voyager/navigator/internal/ActualsKt;\nHSPLcafe/adriel/voyager/navigator/internal/ActualsKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/navigator/internal/ActualsKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/navigator/internal/ActualsKt;->NavigatorBackHandler(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/navigator/internal/ActualsKt;->NavigatorBackHandler(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$1;-><init>(Lkotlin/jvm/functions/Function1;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$1;-><init>(Lkotlin/jvm/functions/Function1;Lcafe/adriel/voyager/navigator/Navigator;)V\nLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;I)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;I)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorBackHandlerKt$NavigatorBackHandler$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;-><clinit>()V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->NavigatorDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->NavigatorDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->StepDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nHPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->StepDisposableEffect(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt;->access$getDisposableEvents$p()Ljava/util/Set;\nLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$NavigatorDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V\nLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Ljava/util/List;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V\nHPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V\nLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;II)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;II)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorDisposableKt$StepDisposableEffect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;-><clinit>()V\nPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->getLocalNavigatorStateHolder()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->getLocalNavigatorStateHolder()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->rememberNavigator(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)Lcafe/adriel/voyager/navigator/Navigator;\nHPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt;->rememberNavigator(Ljava/util/List;Ljava/lang/String;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)Lcafe/adriel/voyager/navigator/Navigator;\nLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;-><clinit>()V\nPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;-><init>()V\nPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$LocalNavigatorStateHolder$1;-><init>()V\nLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;-><init>(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;-><init>(Ljava/util/List;Ljava/lang/String;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lcafe/adriel/voyager/navigator/NavigatorDisposeBehavior;Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;->invoke()Ljava/lang/Object;\nPLcafe/adriel/voyager/navigator/internal/NavigatorSaverInternalKt$rememberNavigator$1;->invoke()Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/tab/Tab;\nLcafe/adriel/voyager/navigator/tab/TabNavigator;\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigator;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLcafe/adriel/voyager/navigator/tab/TabNavigator;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->getCurrent()Lcafe/adriel/voyager/navigator/tab/Tab;\nHPLcafe/adriel/voyager/navigator/tab/TabNavigator;->getCurrent()Lcafe/adriel/voyager/navigator/tab/Tab;\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/tab/Tab;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLcafe/adriel/voyager/navigator/tab/TabNavigator;->saveableState(Ljava/lang/String;Lcafe/adriel/voyager/navigator/tab/Tab;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigator;->setCurrent(Leu/kanade/presentation/util/Tab;)V\nPLcafe/adriel/voyager/navigator/tab/TabNavigator;->setCurrent(Leu/kanade/presentation/util/Tab;)V\nLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;-><clinit>()V\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->TabNavigator(Lcafe/adriel/voyager/navigator/tab/Tab;ZLkotlin/jvm/functions/Function3;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->TabNavigator(Lcafe/adriel/voyager/navigator/tab/Tab;ZLkotlin/jvm/functions/Function3;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->getLocalTabNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt;->getLocalTabNavigator()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;-><clinit>()V\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;-><clinit>()V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;-><init>()V\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$LocalTabNavigator$1;-><init>()V\nLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;-><init>(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;)V\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;-><init>(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;)V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;-><init>(Lkotlin/jvm/functions/Function3;Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;-><init>(Lkotlin/jvm/functions/Function3;Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nHSPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLcafe/adriel/voyager/navigator/tab/TabNavigatorKt$TabNavigator$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLcafe/adriel/voyager/navigator/tab/TabOptions;\nHSPLcafe/adriel/voyager/navigator/tab/TabOptions;-><init>(SLjava/lang/String;Landroidx/compose/ui/graphics/vector/VectorPainter;)V\nHPLcafe/adriel/voyager/navigator/tab/TabOptions;-><init>(SLjava/lang/String;Landroidx/compose/ui/graphics/vector/VectorPainter;)V\nHSPLcafe/adriel/voyager/navigator/tab/TabOptions;->getIcon()Landroidx/compose/ui/graphics/painter/Painter;\nPLcafe/adriel/voyager/navigator/tab/TabOptions;->getIcon()Landroidx/compose/ui/graphics/painter/Painter;\nHSPLcafe/adriel/voyager/navigator/tab/TabOptions;->getTitle()Ljava/lang/String;\nPLcafe/adriel/voyager/navigator/tab/TabOptions;->getTitle()Ljava/lang/String;\nLcoil/EventListener$Factory$$ExternalSyntheticLambda0;\nHSPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;-><init>(I)V\nPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;-><init>(I)V\nHSPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->invoke(D)D\nPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->invoke(D)D\nLcoil/ImageLoaderFactory;\nLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String;\nPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String;\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout;\nPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout;\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;\nPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V\nHPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V\nHSPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V\nHPLcoil/decode/ImageDecoderDecoder$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V\nLcoil/network/NetworkObserver;\nLcoil/request/RequestService;\nHSPLcoil/request/RequestService;-><init>()V\nHPLcoil/request/RequestService;-><init>()V\nHSPLcoil/request/RequestService;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V\nPLcoil/request/RequestService;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V\nHSPLcoil/request/RequestService;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V\nHPLcoil/request/RequestService;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V\nHSPLcoil/request/RequestService;-><init>(Ljava/lang/Runnable;)V\nPLcoil/request/RequestService;-><init>(Ljava/lang/Runnable;)V\nHSPLcoil/request/RequestService;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;\nPLcoil/request/RequestService;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;\nHSPLcoil/request/RequestService;->get(Ljava/lang/Class;Ljava/lang/String;)Landroidx/lifecycle/ViewModel;\nHPLcoil/request/RequestService;->get(Ljava/lang/Class;Ljava/lang/String;)Landroidx/lifecycle/ViewModel;\nHSPLcoil/request/RequestService;->parsePathString(Ljava/lang/String;)V\nHPLcoil/request/RequestService;->parsePathString(Ljava/lang/String;)V\nHSPLcoil/request/RequestService;->toNodes()Ljava/util/List;\nPLcoil/request/RequestService;->toNodes()Ljava/util/List;\nLcoil/size/-Sizes;\nHSPLcoil/size/-Sizes;->bind(Landroidx/sqlite/db/SupportSQLiteProgram;[Ljava/lang/Object;)V\nPLcoil/size/-Sizes;->bind(Landroidx/sqlite/db/SupportSQLiteProgram;[Ljava/lang/Object;)V\nHSPLcoil/size/-Sizes;->execute$default(Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/Integer;Ljava/lang/String;)V\nPLcoil/size/-Sizes;->execute$default(Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/Integer;Ljava/lang/String;)V\nHSPLcoil/size/-Sizes;->generationalId(Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkGenerationalId;\nPLcoil/size/-Sizes;->generationalId(Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkGenerationalId;\nHSPLcoil/size/-Sizes;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I\nPLcoil/size/-Sizes;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I\nHSPLcoil/size/-Sizes;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I\nPLcoil/size/-Sizes;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I\nHSPLcoil/size/-Sizes;->getKey(Lcafe/adriel/voyager/core/screen/Screen;)Ljava/lang/String;\nHPLcoil/size/-Sizes;->getKey(Lcafe/adriel/voyager/core/screen/Screen;)Ljava/lang/String;\nHSPLcoil/size/-Sizes;->getMultiplatformName(Lkotlin/reflect/KClass;)Ljava/lang/String;\nHPLcoil/size/-Sizes;->getMultiplatformName(Lkotlin/reflect/KClass;)Ljava/lang/String;\nHSPLcoil/size/-Sizes;->query(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;Z)Landroid/database/Cursor;\nPLcoil/size/-Sizes;->query(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;Z)Landroid/database/Cursor;\nLcoil/size/Scale$EnumUnboxingLocalUtility;\nHSPLcoil/size/Scale$EnumUnboxingLocalUtility;->m(Ljava/lang/String;J)Ljava/lang/String;\nPLcoil/size/Scale$EnumUnboxingLocalUtility;->m(Ljava/lang/String;J)Ljava/lang/String;\nLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;\nHSPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/job/JobInfo$Builder;Z)V\nPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/app/job/JobInfo$Builder;Z)V\nHSPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;\nHSPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobInfo$Builder;Z)V\nPLcom/github/junrar/Archive$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobInfo$Builder;Z)V\nLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;\nHSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;-><init>(Landroid/view/View;Landroid/view/Window;)V\nPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;-><init>(Landroid/view/View;Landroid/view/Window;)V\nHSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZLkotlin/jvm/functions/Function1;)V\nPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZLkotlin/jvm/functions/Function1;)V\nHSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V\nPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V\nLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;\nHSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;-><clinit>()V\nPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;-><clinit>()V\nLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;\nHSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;-><init>(Landroidx/compose/ui/text/font/FontFamily;)V\nPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;-><init>(Landroidx/compose/ui/text/font/FontFamily;)V\nHSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;)V\nHPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;)V\nHSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;\nHSPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getWeight()Landroidx/compose/ui/text/font/FontWeight;\nPLcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;->getWeight()Landroidx/compose/ui/text/font/FontWeight;\nLcom/google/accompanist/themeadapter/core/R$styleable;\nHSPLcom/google/accompanist/themeadapter/core/R$styleable;-><clinit>()V\nPLcom/google/accompanist/themeadapter/core/R$styleable;-><clinit>()V\nLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;-><clinit>()V\nPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;-><clinit>()V\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseColor-mxwnekA$default(Landroid/content/res/TypedArray;I)J\nHPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseColor-mxwnekA$default(Landroid/content/res/TypedArray;I)J\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseCornerSize(Landroid/content/res/TypedArray;I)Landroidx/compose/foundation/shape/CornerSize;\nHPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseCornerSize(Landroid/content/res/TypedArray;I)Landroidx/compose/foundation/shape/CornerSize;\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseFontFamily(Landroid/content/res/TypedArray;I)Lcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;\nHPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseFontFamily(Landroid/content/res/TypedArray;I)Lcom/google/accompanist/themeadapter/core/FontFamilyWithWeight;\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseShapeAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/shape/CornerBasedShape;)Landroidx/compose/foundation/shape/CornerBasedShape;\nHPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseShapeAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/shape/CornerBasedShape;)Landroidx/compose/foundation/shape/CornerBasedShape;\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/Density;ZLandroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle;\nHPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextAppearance(Landroid/content/Context;ILandroidx/compose/ui/unit/Density;ZLandroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle;\nHSPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextUnit-lGoEivg(Landroid/content/res/TypedArray;ILandroidx/compose/ui/unit/Density;J)J\nHPLcom/google/accompanist/themeadapter/core/ResourceUtilsKt;->parseTextUnit-lGoEivg(Landroid/content/res/TypedArray;ILandroidx/compose/ui/unit/Density;J)J\nLcom/google/accompanist/themeadapter/material3/Mdc3Theme;\nHSPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;-><clinit>()V\nPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;-><clinit>()V\nHSPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;->createMdc3Theme$default(Landroid/content/Context;Landroidx/compose/ui/unit/LayoutDirection;)Lcom/google/accompanist/themeadapter/material3/Theme3Parameters;\nHPLcom/google/accompanist/themeadapter/material3/Mdc3Theme;->createMdc3Theme$default(Landroid/content/Context;Landroidx/compose/ui/unit/LayoutDirection;)Lcom/google/accompanist/themeadapter/material3/Theme3Parameters;\nLcom/google/accompanist/themeadapter/material3/R$styleable;\nHSPLcom/google/accompanist/themeadapter/material3/R$styleable;-><clinit>()V\nPLcom/google/accompanist/themeadapter/material3/R$styleable;-><clinit>()V\nLcom/google/accompanist/themeadapter/material3/Theme3Parameters;\nHSPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;-><init>(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Typography;Landroidx/compose/material3/Shapes;)V\nPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;-><init>(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Typography;Landroidx/compose/material3/Shapes;)V\nHSPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component1()Landroidx/compose/material3/ColorScheme;\nPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component1()Landroidx/compose/material3/ColorScheme;\nHSPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component2()Landroidx/compose/material3/Typography;\nPLcom/google/accompanist/themeadapter/material3/Theme3Parameters;->component2()Landroidx/compose/material3/Typography;\nLcom/google/android/material/color/DynamicColors;\nHSPLcom/google/android/material/color/DynamicColors;-><clinit>()V\nPLcom/google/android/material/color/DynamicColors;-><clinit>()V\nHSPLcom/google/android/material/color/DynamicColors;->isDynamicColorAvailable()Z\nPLcom/google/android/material/color/DynamicColors;->isDynamicColorAvailable()Z\nLcom/google/android/material/color/DynamicColors$1;\nHSPLcom/google/android/material/color/DynamicColors$1;-><init>()V\nPLcom/google/android/material/color/DynamicColors$1;-><init>()V\nLcom/google/android/material/color/DynamicColors$2;\nHSPLcom/google/android/material/color/DynamicColors$2;-><init>()V\nPLcom/google/android/material/color/DynamicColors$2;-><init>()V\nLcom/google/android/material/color/DynamicColors$DeviceSupportCondition;\nLcom/google/android/material/theme/MaterialComponentsViewInflater;\nHSPLcom/google/android/material/theme/MaterialComponentsViewInflater;-><init>()V\nPLcom/google/android/material/theme/MaterialComponentsViewInflater;-><init>()V\nLcom/google/common/util/concurrent/ListenableFuture;\nLcom/hippo/unifile/RawFile;\nHSPLcom/hippo/unifile/RawFile;-><init>(Ljava/io/File;)V\nPLcom/hippo/unifile/RawFile;-><init>(Ljava/io/File;)V\nHSPLcom/hippo/unifile/RawFile;->exists()Z\nPLcom/hippo/unifile/RawFile;->exists()Z\nLcom/hippo/unifile/UniFile;\nHSPLcom/hippo/unifile/UniFile;-><init>()V\nPLcom/hippo/unifile/UniFile;-><init>()V\nHSPLcom/hippo/unifile/UniFile;->fromUri(Landroid/content/Context;Landroid/net/Uri;)Lcom/hippo/unifile/UniFile;\nPLcom/hippo/unifile/UniFile;->fromUri(Landroid/content/Context;Landroid/net/Uri;)Lcom/hippo/unifile/UniFile;\nLcom/jakewharton/disklrucache/DiskLruCache;\nHSPLcom/jakewharton/disklrucache/DiskLruCache;-><clinit>()V\nPLcom/jakewharton/disklrucache/DiskLruCache;-><clinit>()V\nHSPLcom/jakewharton/disklrucache/DiskLruCache;-><init>(Ljava/io/File;)V\nPLcom/jakewharton/disklrucache/DiskLruCache;-><init>(Ljava/io/File;)V\nHSPLcom/jakewharton/disklrucache/DiskLruCache;->getDirectory()Ljava/io/File;\nPLcom/jakewharton/disklrucache/DiskLruCache;->getDirectory()Ljava/io/File;\nHSPLcom/jakewharton/disklrucache/DiskLruCache;->open(Ljava/io/File;)Lcom/jakewharton/disklrucache/DiskLruCache;\nPLcom/jakewharton/disklrucache/DiskLruCache;->open(Ljava/io/File;)Lcom/jakewharton/disklrucache/DiskLruCache;\nHSPLcom/jakewharton/disklrucache/DiskLruCache;->rebuildJournal()V\nPLcom/jakewharton/disklrucache/DiskLruCache;->rebuildJournal()V\nHSPLcom/jakewharton/disklrucache/DiskLruCache;->renameTo(Ljava/io/File;Ljava/io/File;Z)V\nPLcom/jakewharton/disklrucache/DiskLruCache;->renameTo(Ljava/io/File;Ljava/io/File;Z)V\nLcom/jakewharton/disklrucache/DiskLruCache$1;\nHSPLcom/jakewharton/disklrucache/DiskLruCache$1;-><init>(Lcom/jakewharton/disklrucache/DiskLruCache;)V\nPLcom/jakewharton/disklrucache/DiskLruCache$1;-><init>(Lcom/jakewharton/disklrucache/DiskLruCache;)V\nLcom/jakewharton/disklrucache/DiskLruCache$2;\nHSPLcom/jakewharton/disklrucache/DiskLruCache$2;-><init>()V\nPLcom/jakewharton/disklrucache/DiskLruCache$2;-><init>()V\nLcom/jakewharton/disklrucache/Util;\nHSPLcom/jakewharton/disklrucache/Util;-><clinit>()V\nPLcom/jakewharton/disklrucache/Util;-><clinit>()V\nLcom/mikepenz/aboutlibraries/entity/Library;\nLeu/kanade/core/preference/PreferenceMutableState;\nHSPLeu/kanade/core/preference/PreferenceMutableState;-><init>(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)V\nPLeu/kanade/core/preference/PreferenceMutableState;-><init>(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)V\nHSPLeu/kanade/core/preference/PreferenceMutableState;->access$getState$p(Leu/kanade/core/preference/PreferenceMutableState;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nPLeu/kanade/core/preference/PreferenceMutableState;->access$getState$p(Leu/kanade/core/preference/PreferenceMutableState;)Landroidx/compose/runtime/ParcelableSnapshotMutableState;\nHSPLeu/kanade/core/preference/PreferenceMutableState;->getValue()Ljava/lang/Object;\nPLeu/kanade/core/preference/PreferenceMutableState;->getValue()Ljava/lang/Object;\nLeu/kanade/core/preference/PreferenceMutableState$1;\nHSPLeu/kanade/core/preference/PreferenceMutableState$1;-><init>(Leu/kanade/core/preference/PreferenceMutableState;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/core/preference/PreferenceMutableState$1;-><init>(Leu/kanade/core/preference/PreferenceMutableState;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/core/preference/PreferenceMutableState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/core/preference/PreferenceMutableState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/core/preference/PreferenceMutableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/core/preference/PreferenceMutableState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/core/preference/PreferenceMutableState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/core/preference/PreferenceMutableState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/core/preference/PreferenceMutableStateKt;\nHSPLeu/kanade/core/preference/PreferenceMutableStateKt;->asState(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)Leu/kanade/core/preference/PreferenceMutableState;\nPLeu/kanade/core/preference/PreferenceMutableStateKt;->asState(Ltachiyomi/core/preference/Preference;Lkotlinx/coroutines/CoroutineScope;)Leu/kanade/core/preference/PreferenceMutableState;\nLeu/kanade/core/util/CollectionUtilsKt;\nHSPLeu/kanade/core/util/CollectionUtilsKt;->insertSeparators(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function2;)Ljava/util/List;\nPLeu/kanade/core/util/CollectionUtilsKt;->insertSeparators(Ljava/util/ArrayList;Lkotlin/jvm/functions/Function2;)Ljava/util/List;\nLeu/kanade/domain/DomainModule;\nHSPLeu/kanade/domain/DomainModule;-><init>()V\nPLeu/kanade/domain/DomainModule;-><init>()V\nHSPLeu/kanade/domain/DomainModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$10;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$10;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$10;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$11;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$11;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$11;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$12;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$12;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$12;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$13;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$13;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$13;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$14;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$14;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$14;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$15;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$15;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$15;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$16;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$16;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$16;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$17;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$17;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$17;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$18;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$18;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$18;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$19;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$19;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$19;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$20;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$20;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$20;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$21;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$21;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$21;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$22;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$22;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$22;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$23;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$23;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$23;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$24;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$24;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$24;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$25;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$25;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$25;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$26;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$26;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$26;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$27;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$27;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$27;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$28;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$28;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$28;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$29;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$29;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$29;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$3;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$3;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$3;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$30;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$30;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$30;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$31;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$31;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$31;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$32;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$32;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$32;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$33;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$33;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$33;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$34;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$34;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$34;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$35;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$35;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$35;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$36;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$36;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$36;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$37;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$37;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$37;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$38;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$38;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$38;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$39;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$39;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$39;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$4;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$4;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$4;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$40;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$40;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$40;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$41;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$41;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$41;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$42;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$42;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$42;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$43;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$43;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$43;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$44;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$44;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$44;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$45;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$45;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$45;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$46;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$46;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$46;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$47;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$47;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$47;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$48;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$48;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$48;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$49;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$49;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$49;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$5;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$5;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$5;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$50;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$50;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$50;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$51;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$51;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$51;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$52;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$52;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$52;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$53;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$53;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$53;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$54;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$54;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$54;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$6;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$6;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$6;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$7;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$7;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$7;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$8;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$8;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$8;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$9;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$9;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addFactory$9;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$3;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$3;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$3;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$4;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$4;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$4;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$5;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$5;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$5;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$6;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$6;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$6;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$7;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$7;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$7;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$8;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$8;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$8;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$9;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$9;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$$inlined$addSingletonFactory$9;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$1;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$1;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$1;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$1$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$1$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$1$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$10;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$10;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$10;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$11;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$11;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$11;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$11;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$11;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$11$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$11$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$11$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$12;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$12;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$12;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$13;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$13;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$13;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$14;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$14;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$14;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$14;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$14;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$14$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$14$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$14$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$15;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$15;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$15;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$16;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$16;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$16;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$16;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$16;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$16$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$16$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$16$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$17;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$17;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$17;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$17;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$17;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$3;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$3;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$17$invoke$$inlined$get$3;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$18;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$18;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$18;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$19;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$19;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$19;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$2;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$2;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$2;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$2$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$2$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$2$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$20;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$20;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$20;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$20;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$20;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$20$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$20$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$20$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$21;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$21;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$21;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$22;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$22;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$22;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$23;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$23;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$23;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$24;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$24;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$24;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$24;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$24;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$24$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$25;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$25;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$25;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$25;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$25;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$25$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$25$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$25$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$26;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$26;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$26;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$27;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$27;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$27;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$28;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$28;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$28;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$28;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$28;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$28$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$28$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$28$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$29;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$29;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$29;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$3;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$3;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$3;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$30;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$30;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$30;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$31;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$31;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$31;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$31;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$31;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$31$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$31$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$31$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$32;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$32;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$32;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$33;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$33;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$33;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$34;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$34;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$34;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$34;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$34;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$34$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$34$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$34$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$35;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$35;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$35;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$35;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$35;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$35$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$35$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$35$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$36;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$36;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$36;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$36;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$36;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$36$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$36$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$36$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$37;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$37;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$37;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$37;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$37;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$37$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$37$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$37$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$38;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$38;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$38;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$38;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$38;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$3;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$3;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$3;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$4;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$4;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$38$invoke$$inlined$get$4;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$39;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$39;-><clinit>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$39;-><clinit>()V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$39;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$39;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$4;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$4;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$4;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$4;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$4;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$4$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$4$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$4$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$40;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$40;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$40;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$41;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$41;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$41;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$42;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$42;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$42;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$42;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$42;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$42$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$42$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$42$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$43;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$43;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$43;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$43;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$43;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$43$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$43$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$43$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$44;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$44;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$44;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$45;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$45;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$45;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$45;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$45;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$45$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$45$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$45$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$46;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$46;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$46;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$47;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$47;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$47;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$47;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$47;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$47$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$48;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$48;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$48;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$49;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$49;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$49;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$5;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$5;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$5;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$5;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$5;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$2;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$5$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$50;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$50;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$50;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$51;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$51;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$51;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$51;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$51;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$51$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$51$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$51$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$52;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$52;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$52;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$52;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$52;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$52$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$52$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$52$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$53;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$53;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$53;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$54;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$54;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$54;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/domain/DomainModule$registerInjectables$54;->invoke()Ljava/lang/Object;\nPLeu/kanade/domain/DomainModule$registerInjectables$54;->invoke()Ljava/lang/Object;\nLeu/kanade/domain/DomainModule$registerInjectables$54$invoke$$inlined$get$1;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$54$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/domain/DomainModule$registerInjectables$54$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/domain/DomainModule$registerInjectables$55;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$55;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$55;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$56;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$56;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$56;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$57;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$57;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$57;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$58;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$58;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$58;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$59;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$59;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$59;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$6;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$6;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$6;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$60;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$60;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$60;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$61;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$61;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$61;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$62;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$62;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$62;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$63;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$63;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$63;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$7;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$7;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$7;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$8;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$8;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$8;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/DomainModule$registerInjectables$9;\nHSPLeu/kanade/domain/DomainModule$registerInjectables$9;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/domain/DomainModule$registerInjectables$9;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/domain/base/BasePreferences;\nHSPLeu/kanade/domain/base/BasePreferences;-><init>(Landroid/app/Application;Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/domain/base/BasePreferences;-><init>(Landroid/app/Application;Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLeu/kanade/domain/base/BasePreferences;->downloadedOnly()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/base/BasePreferences;->downloadedOnly()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/base/BasePreferences;->incognitoMode()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/base/BasePreferences;->incognitoMode()Ltachiyomi/core/preference/Preference;\nLeu/kanade/domain/chapter/interactor/SetReadStatus;\nHSPLeu/kanade/domain/chapter/interactor/SetReadStatus;-><init>(Ltachiyomi/domain/download/service/DownloadPreferences;Leu/kanade/domain/download/interactor/DeleteDownload;Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nPLeu/kanade/domain/chapter/interactor/SetReadStatus;-><init>(Ltachiyomi/domain/download/service/DownloadPreferences;Leu/kanade/domain/download/interactor/DeleteDownload;Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;\nHSPLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;-><clinit>()V\nPLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;-><clinit>()V\nHSPLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;-><init>()V\nPLeu/kanade/domain/chapter/interactor/SetReadStatus$mapper$1;-><init>()V\nLeu/kanade/domain/chapter/interactor/SyncChaptersWithSource;\nLeu/kanade/domain/chapter/interactor/SyncChaptersWithTrackServiceTwoWay;\nLeu/kanade/domain/download/interactor/DeleteDownload;\nHSPLeu/kanade/domain/download/interactor/DeleteDownload;-><init>(Ltachiyomi/domain/source/service/SourceManager;Leu/kanade/tachiyomi/data/download/DownloadManager;)V\nPLeu/kanade/domain/download/interactor/DeleteDownload;-><init>(Ltachiyomi/domain/source/service/SourceManager;Leu/kanade/tachiyomi/data/download/DownloadManager;)V\nLeu/kanade/domain/extension/interactor/GetExtensionLanguages;\nLeu/kanade/domain/extension/interactor/GetExtensionSources;\nLeu/kanade/domain/extension/interactor/GetExtensionsByType;\nLeu/kanade/domain/manga/interactor/SetMangaViewerFlags;\nLeu/kanade/domain/manga/interactor/UpdateManga;\nHSPLeu/kanade/domain/manga/interactor/UpdateManga;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/manga/interactor/SetFetchInterval;)V\nPLeu/kanade/domain/manga/interactor/UpdateManga;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;Ltachiyomi/domain/manga/interactor/SetFetchInterval;)V\nLeu/kanade/domain/source/interactor/GetEnabledSources;\nLeu/kanade/domain/source/interactor/GetLanguagesWithSources;\nLeu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount;\nLeu/kanade/domain/source/interactor/SetMigrateSorting;\nLeu/kanade/domain/source/interactor/ToggleLanguage;\nLeu/kanade/domain/source/interactor/ToggleSource;\nLeu/kanade/domain/source/interactor/ToggleSourcePin;\nLeu/kanade/domain/source/service/SourcePreferences;\nHSPLeu/kanade/domain/source/service/SourcePreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/domain/source/service/SourcePreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLeu/kanade/domain/source/service/SourcePreferences;->enabledLanguages()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/source/service/SourcePreferences;->enabledLanguages()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/source/service/SourcePreferences;->extensionUpdatesCount()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/source/service/SourcePreferences;->extensionUpdatesCount()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/source/service/SourcePreferences;->trustedSignatures()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/source/service/SourcePreferences;->trustedSignatures()Ltachiyomi/core/preference/Preference;\nLeu/kanade/domain/track/interactor/TrackChapter;\nLeu/kanade/domain/track/service/TrackPreferences;\nHSPLeu/kanade/domain/track/service/TrackPreferences;-><clinit>()V\nPLeu/kanade/domain/track/service/TrackPreferences;-><clinit>()V\nHSPLeu/kanade/domain/track/service/TrackPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/domain/track/service/TrackPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLeu/kanade/domain/track/service/TrackPreferences;->anilistScoreType()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/track/service/TrackPreferences;->anilistScoreType()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/track/service/TrackPreferences;->trackUsername(Leu/kanade/tachiyomi/data/track/Tracker;)Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/track/service/TrackPreferences;->trackUsername(Leu/kanade/tachiyomi/data/track/Tracker;)Ltachiyomi/core/preference/Preference;\nLeu/kanade/domain/track/service/TrackPreferences$Companion;\nHSPLeu/kanade/domain/track/service/TrackPreferences$Companion;-><init>()V\nPLeu/kanade/domain/track/service/TrackPreferences$Companion;-><init>()V\nHSPLeu/kanade/domain/track/service/TrackPreferences$Companion;-><init>(I)V\nPLeu/kanade/domain/track/service/TrackPreferences$Companion;-><init>(I)V\nLeu/kanade/domain/track/store/DelayedTrackingStore;\nLeu/kanade/domain/ui/UiPreferences;\nHSPLeu/kanade/domain/ui/UiPreferences;-><clinit>()V\nPLeu/kanade/domain/ui/UiPreferences;-><clinit>()V\nHSPLeu/kanade/domain/ui/UiPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/domain/ui/UiPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLeu/kanade/domain/ui/UiPreferences;->appTheme()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/ui/UiPreferences;->appTheme()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/ui/UiPreferences;->tabletUiMode()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/ui/UiPreferences;->tabletUiMode()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/ui/UiPreferences;->themeDarkAmoled()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/ui/UiPreferences;->themeDarkAmoled()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/domain/ui/UiPreferences;->themeMode()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/domain/ui/UiPreferences;->themeMode()Ltachiyomi/core/preference/Preference;\nLeu/kanade/domain/ui/UiPreferences$Companion;\nHSPLeu/kanade/domain/ui/UiPreferences$Companion;-><init>()V\nPLeu/kanade/domain/ui/UiPreferences$Companion;-><init>()V\nHSPLeu/kanade/domain/ui/UiPreferences$Companion;-><init>(I)V\nPLeu/kanade/domain/ui/UiPreferences$Companion;-><init>(I)V\nLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;\nHSPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;-><clinit>()V\nPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;-><clinit>()V\nHSPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;-><init>()V\nPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$1;-><init>()V\nLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$2;\nHSPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$2;-><init>(Leu/kanade/domain/ui/model/AppTheme;)V\nPLeu/kanade/domain/ui/UiPreferences$appTheme$$inlined$getEnum$2;-><init>(Leu/kanade/domain/ui/model/AppTheme;)V\nLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;\nHSPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;-><clinit>()V\nPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;-><clinit>()V\nHSPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;-><init>()V\nPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$1;-><init>()V\nLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$2;\nHSPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$2;-><init>()V\nPLeu/kanade/domain/ui/UiPreferences$tabletUiMode$$inlined$getEnum$2;-><init>()V\nLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;\nHSPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;-><clinit>()V\nPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;-><clinit>()V\nHSPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;-><init>()V\nPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$1;-><init>()V\nLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$2;\nHSPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$2;-><init>(Leu/kanade/domain/ui/model/ThemeMode;)V\nPLeu/kanade/domain/ui/UiPreferences$themeMode$$inlined$getEnum$2;-><init>(Leu/kanade/domain/ui/model/ThemeMode;)V\nLeu/kanade/domain/ui/model/AppTheme;\nHSPLeu/kanade/domain/ui/model/AppTheme;-><clinit>()V\nPLeu/kanade/domain/ui/model/AppTheme;-><clinit>()V\nHSPLeu/kanade/domain/ui/model/AppTheme;-><init>(Ljava/lang/String;ILjava/lang/Integer;)V\nPLeu/kanade/domain/ui/model/AppTheme;-><init>(Ljava/lang/String;ILjava/lang/Integer;)V\nLeu/kanade/domain/ui/model/TabletUiMode;\nHSPLeu/kanade/domain/ui/model/TabletUiMode;-><clinit>()V\nPLeu/kanade/domain/ui/model/TabletUiMode;-><clinit>()V\nHSPLeu/kanade/domain/ui/model/TabletUiMode;-><init>(Ljava/lang/String;II)V\nPLeu/kanade/domain/ui/model/TabletUiMode;-><init>(Ljava/lang/String;II)V\nLeu/kanade/domain/ui/model/ThemeMode;\nHSPLeu/kanade/domain/ui/model/ThemeMode;-><clinit>()V\nPLeu/kanade/domain/ui/model/ThemeMode;-><clinit>()V\nHSPLeu/kanade/domain/ui/model/ThemeMode;-><init>(Ljava/lang/String;I)V\nPLeu/kanade/domain/ui/model/ThemeMode;-><init>(Ljava/lang/String;I)V\nLeu/kanade/domain/ui/model/ThemeModeKt;\nHSPLeu/kanade/domain/ui/model/ThemeModeKt;->setAppCompatDelegateThemeMode(Leu/kanade/domain/ui/model/ThemeMode;)V\nPLeu/kanade/domain/ui/model/ThemeModeKt;->setAppCompatDelegateThemeMode(Leu/kanade/domain/ui/model/ThemeMode;)V\nLeu/kanade/presentation/components/AppBar$Action;\nHSPLeu/kanade/presentation/components/AppBar$Action;-><init>(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function0;ZI)V\nHPLeu/kanade/presentation/components/AppBar$Action;-><init>(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/Color;Lkotlin/jvm/functions/Function0;ZI)V\nHSPLeu/kanade/presentation/components/AppBar$Action;->getEnabled()Z\nPLeu/kanade/presentation/components/AppBar$Action;->getEnabled()Z\nHSPLeu/kanade/presentation/components/AppBar$Action;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLeu/kanade/presentation/components/AppBar$Action;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLeu/kanade/presentation/components/AppBar$Action;->getIconTint-QN2ZGVo()Landroidx/compose/ui/graphics/Color;\nPLeu/kanade/presentation/components/AppBar$Action;->getIconTint-QN2ZGVo()Landroidx/compose/ui/graphics/Color;\nHSPLeu/kanade/presentation/components/AppBar$Action;->getOnClick()Lkotlin/jvm/functions/Function0;\nPLeu/kanade/presentation/components/AppBar$Action;->getOnClick()Lkotlin/jvm/functions/Function0;\nHSPLeu/kanade/presentation/components/AppBar$Action;->getTitle()Ljava/lang/String;\nPLeu/kanade/presentation/components/AppBar$Action;->getTitle()Ljava/lang/String;\nLeu/kanade/presentation/components/AppBar$AppBarAction;\nLeu/kanade/presentation/components/AppBar$OverflowAction;\nHSPLeu/kanade/presentation/components/AppBar$OverflowAction;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nHPLeu/kanade/presentation/components/AppBar$OverflowAction;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nLeu/kanade/presentation/components/AppBarKt;\nHSPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/components/AppBarKt;->AppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/components/AppBarKt;->AppBarActions(Ljava/util/List;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/components/AppBarKt;->AppBarActions(Ljava/util/List;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/presentation/components/AppBarKt;->AppBarTitle(Ljava/lang/String;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/components/AppBarKt;->AppBarTitle(Ljava/lang/String;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/components/AppBarKt;->SearchToolbar(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V\nHPLeu/kanade/presentation/components/AppBarKt;->SearchToolbar(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V\nPLeu/kanade/presentation/components/AppBarKt;->UpIcon(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/components/AppBarKt;->UpIcon(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/components/AppBarKt;->access$AppBar$lambda$1(Landroidx/compose/runtime/State;)Z\nPLeu/kanade/presentation/components/AppBarKt;->access$AppBar$lambda$1(Landroidx/compose/runtime/State;)Z\nLeu/kanade/presentation/components/AppBarKt$AppBar$2;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$2;-><init>(ILjava/lang/String;Ljava/lang/String;ILandroidx/compose/runtime/State;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$2;-><init>(ILjava/lang/String;Ljava/lang/String;ILandroidx/compose/runtime/State;)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$AppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBar$3;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$3;-><init>(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$3;-><init>(Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$AppBar$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBar$4;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$4;-><init>(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$4;-><init>(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nLeu/kanade/presentation/components/AppBarKt$AppBar$5;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$5;-><clinit>()V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$5;-><clinit>()V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$5;-><init>()V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$5;-><init>()V\nLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;-><init>(ZLkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;-><init>(ZLkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$AppBar$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBar$7;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$7;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$7;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;ZLkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;-><init>(I)V\nPLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;-><init>(I)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/presentation/components/AppBarKt$AppBar$isActionMode$2$1;->invoke()Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$1;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$1;-><init>(Leu/kanade/presentation/components/AppBar$Action;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$1;-><init>(Leu/kanade/presentation/components/AppBar$Action;)V\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;-><init>(Leu/kanade/presentation/components/AppBar$Action;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;-><init>(Leu/kanade/presentation/components/AppBar$Action;)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;-><init>(Leu/kanade/presentation/components/AppBar$Action;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;-><init>(Leu/kanade/presentation/components/AppBar$Action;)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$AppBarActions$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;-><init>(Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;-><init>(Landroidx/compose/runtime/MutableState;)V\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$2$1$1;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$3$1;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$3$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$3$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$4;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$4;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/ArrayList;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$4;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/ArrayList;)V\nLeu/kanade/presentation/components/AppBarKt$AppBarActions$5;\nHSPLeu/kanade/presentation/components/AppBarKt$AppBarActions$5;-><init>(ILjava/util/List;)V\nPLeu/kanade/presentation/components/AppBarKt$AppBarActions$5;-><init>(ILjava/util/List;)V\nLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;-><clinit>()V\nPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;-><init>()V\nPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$1;-><init>()V\nLeu/kanade/presentation/components/AppBarKt$SearchToolbar$2$1;\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$2$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$2$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILandroidx/compose/ui/focus/FocusRequester;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;ILkotlin/jvm/functions/Function1;Ljava/lang/String;)V\nHPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILandroidx/compose/ui/focus/FocusRequester;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;ILkotlin/jvm/functions/Function1;Ljava/lang/String;)V\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;-><init>(Lkotlin/jvm/functions/Function1;IZLjava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/focus/FocusRequester;)V\nHPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;-><init>(Lkotlin/jvm/functions/Function1;IZLjava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/focus/FocusRequester;)V\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$onClick$1$1;\nHSPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$onClick$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/components/AppBarKt$SearchToolbar$5$onClick$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/components/AppBarKt$UpIcon$1;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;II)V\nLeu/kanade/presentation/components/BannersKt;\nHSPLeu/kanade/presentation/components/BannersKt;->AppStateBanners(ZZZLandroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/components/BannersKt;->AppStateBanners(ZZZLandroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;-><init>(ZILandroidx/compose/foundation/layout/AndroidWindowInsets;ZIZ)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;-><init>(ZILandroidx/compose/foundation/layout/AndroidWindowInsets;ZIZ)V\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;II)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;II)V\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;-><init>(IIIZ)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;-><init>(IIIZ)V\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1$1;-><init>(II)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$downloadedOnlyPlaceable$1$1;-><init>(II)V\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;-><init>(IIIIZ)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;-><init>(IIIIZ)V\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1$1;-><init>(III)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$incognitoPlaceable$1$1;-><init>(III)V\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;-><init>(ZILandroidx/compose/foundation/layout/WindowInsets;)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;-><init>(ZILandroidx/compose/foundation/layout/WindowInsets;)V\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1$1;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$1$1$indexingPlaceable$1$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;)V\nLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;-><init>(ZZZLandroidx/compose/ui/Modifier;II)V\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;-><init>(ZZZLandroidx/compose/ui/Modifier;II)V\nHSPLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/components/BannersKt$AppStateBanners$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-1$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;-><init>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-10$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-11$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-12$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-2$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-3$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-4$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-5$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;-><init>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-7$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-8$1;-><init>()V\nLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;-><clinit>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;-><clinit>()V\nHSPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;-><init>()V\nPLeu/kanade/presentation/components/ComposableSingletons$AppBarKt$lambda-9$1;-><init>()V\nLeu/kanade/presentation/components/DropdownMenuKt;\nHSPLeu/kanade/presentation/components/DropdownMenuKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/components/DropdownMenuKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;\nHSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;-><clinit>()V\nPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;-><clinit>()V\nHSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;-><init>()V\nPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt;-><init>()V\nLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;\nHSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;-><clinit>()V\nPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;-><clinit>()V\nHSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;-><init>()V\nPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;-><init>()V\nHSPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/history/ComposableSingletons$HistoryScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/history/HistoryScreenKt;\nHSPLeu/kanade/presentation/history/HistoryScreenKt;->HistoryScreen(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Landroidx/compose/material3/SnackbarHostState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/history/HistoryScreenKt;->HistoryScreen(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Landroidx/compose/material3/SnackbarHostState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)V\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)V\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;-><init>(ILkotlin/jvm/functions/Function1;)V\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1$1$1;\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$1$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;-><init>(Landroidx/compose/material3/SnackbarHostState;I)V\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;-><init>(Landroidx/compose/material3/SnackbarHostState;I)V\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V\nHSPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/history/HistoryScreenKt$HistoryScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/library/components/LibraryToolbarKt;\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryRegularToolbar(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryRegularToolbar(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryToolbar(ZILeu/kanade/presentation/library/components/LibraryToolbarTitle;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/library/components/LibraryToolbarKt;->LibraryToolbar(ZILeu/kanade/presentation/library/components/LibraryToolbarTitle;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;-><init>(Leu/kanade/presentation/library/components/LibraryToolbarTitle;F)V\nPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;-><init>(Leu/kanade/presentation/library/components/LibraryToolbarTitle;F)V\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;-><init>(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;-><init>(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$3;\nHSPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$3;-><init>(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V\nPLeu/kanade/presentation/library/components/LibraryToolbarKt$LibraryRegularToolbar$3;-><init>(Leu/kanade/presentation/library/components/LibraryToolbarTitle;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V\nLeu/kanade/presentation/library/components/LibraryToolbarTitle;\nHSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;-><init>(Ljava/lang/String;Ljava/lang/Integer;)V\nPLeu/kanade/presentation/library/components/LibraryToolbarTitle;-><init>(Ljava/lang/String;Ljava/lang/Integer;)V\nHSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->equals(Ljava/lang/Object;)Z\nPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->equals(Ljava/lang/Object;)Z\nHSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getNumberOfManga()Ljava/lang/Integer;\nPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getNumberOfManga()Ljava/lang/Integer;\nHSPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getText()Ljava/lang/String;\nPLeu/kanade/presentation/library/components/LibraryToolbarTitle;->getText()Ljava/lang/String;\nLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;\nHSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->LibraryBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->LibraryBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->MangaBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt;->MangaBottomActionMenu(ZLandroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$LibraryBottomActionMenu$1;\nHSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$LibraryBottomActionMenu$1;-><init>(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$LibraryBottomActionMenu$1;-><init>(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$MangaBottomActionMenu$1;\nHSPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$MangaBottomActionMenu$1;-><init>(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/manga/components/MangaBottomActionMenuKt$MangaBottomActionMenu$1;-><init>(Landroidx/compose/ui/Modifier;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;-><clinit>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;-><clinit>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;-><init>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt;-><init>()V\nLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;-><clinit>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;-><clinit>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;-><init>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;-><init>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;-><clinit>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;-><clinit>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;-><init>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;-><init>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;-><clinit>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;-><clinit>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;-><init>()V\nPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;-><init>()V\nHSPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/ComposableSingletons$MoreScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/LogoHeaderKt;\nHSPLeu/kanade/presentation/more/LogoHeaderKt;->LogoHeader(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/more/LogoHeaderKt;->LogoHeader(Landroidx/compose/runtime/Composer;I)V\nLeu/kanade/presentation/more/LogoHeaderKt$LogoHeader$2;\nHSPLeu/kanade/presentation/more/LogoHeaderKt$LogoHeader$2;-><init>(I)V\nPLeu/kanade/presentation/more/LogoHeaderKt$LogoHeader$2;-><init>(I)V\nLeu/kanade/presentation/more/MoreScreenKt;\nHSPLeu/kanade/presentation/more/MoreScreenKt;->MoreScreen(Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/more/MoreScreenKt;->MoreScreen(Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;-><init>(ZLandroidx/compose/ui/platform/UriHandler;)V\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;-><init>(ZLandroidx/compose/ui/platform/UriHandler;)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;-><init>(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;-><init>(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;-><init>(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;-><init>(ZLkotlin/jvm/functions/Function1;IZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Landroidx/compose/ui/platform/UriHandler;)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;-><init>(ILkotlin/jvm/functions/Function1;Z)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;-><init>(ILkotlin/jvm/functions/Function1;Z)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;-><init>(ILkotlin/jvm/functions/Function1;Z)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;-><init>(ILkotlin/jvm/functions/Function1;Z)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;-><init>(ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;-><init>(ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;-><init>(Lkotlin/jvm/functions/Function0;I)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;-><init>(Lkotlin/jvm/functions/Function0;I)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;-><init>(Landroidx/compose/ui/platform/UriHandler;)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;-><init>(Landroidx/compose/ui/platform/UriHandler;)V\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9$1;\nHSPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9$1;-><init>(Landroidx/compose/ui/platform/UriHandler;)V\nPLeu/kanade/presentation/more/MoreScreenKt$MoreScreen$2$1$9$1;-><init>(Landroidx/compose/ui/platform/UriHandler;)V\nLeu/kanade/presentation/more/settings/PreferenceItemKt;\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt;-><clinit>()V\nPLeu/kanade/presentation/more/settings/PreferenceItemKt;-><clinit>()V\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceHighlighted()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceHighlighted()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceMinHeight()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nPLeu/kanade/presentation/more/settings/PreferenceItemKt;->getLocalPreferenceMinHeight()Landroidx/compose/runtime/DynamicProvidableCompositionLocal;\nLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;-><clinit>()V\nPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;-><clinit>()V\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;-><init>()V\nPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;-><init>()V\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceHighlighted$1;->invoke()Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;-><clinit>()V\nPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;-><clinit>()V\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;-><init>()V\nPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;-><init>()V\nHSPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/PreferenceItemKt$LocalPreferenceMinHeight$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/ComposableSingletons$SettingsMainScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsBackupScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsBackupScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsBrowseScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsBrowseScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsDownloadScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsDownloadScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsLibraryScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsLibraryScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->Content(Landroidx/compose/runtime/Composer;I)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->Content(ZLandroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->Content(ZLandroidx/compose/runtime/Composer;I)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen;->access$getItems$p()Ljava/util/List;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2;-><init>(Lkotlin/jvm/functions/Function0;Lcafe/adriel/voyager/navigator/Navigator;Z)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$1$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Z)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$2$2$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Z)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3;-><init>(ZLcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/TopAppBarState;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1;-><init>(Ljava/lang/Integer;ZLcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$1;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$1;-><init>()V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Leu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;Lcafe/adriel/voyager/navigator/Navigator;Z)V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Leu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;Z)V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$2$1$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Leu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;Z)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$1;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$2;-><init>(Ljava/util/List;)V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$3;-><init>(Ljava/util/List;Ljava/lang/Integer;ZLcafe/adriel/voyager/navigator/Navigator;)V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$3$1$invoke$$inlined$itemsIndexed$default$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Content$4;-><init>(Leu/kanade/presentation/more/settings/screen/SettingsMainScreen;ZI)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;-><init>(IILandroidx/compose/ui/graphics/vector/ImageVector;Leu/kanade/presentation/more/settings/screen/SearchableSettings;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;-><init>(IILkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/vector/ImageVector;Lcafe/adriel/voyager/core/screen/Screen;)V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->getFormatSubtitle()Lkotlin/jvm/functions/Function2;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->getTitleRes()I\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item;->hashCode()I\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item$1;-><init>(I)V\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/screen/SettingsMainScreen$items$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/more/settings/screen/SettingsReaderScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsReaderScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsSecurityScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsSecurityScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsTrackingScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/SettingsTrackingScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/about/AboutScreen;-><clinit>()V\nPLeu/kanade/presentation/more/settings/screen/about/AboutScreen;-><init>()V\nPLeu/kanade/presentation/more/settings/screen/about/AboutScreen;->getVersionName(Z)Ljava/lang/String;\nLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;-><clinit>()V\nPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;-><clinit>()V\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->BasePreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->BasePreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getPrefsHorizontalPadding()F\nPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getPrefsHorizontalPadding()F\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getTrailingWidgetBuffer()F\nPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt;->getTrailingWidgetBuffer()F\nLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$1$1;->invoke()Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$BasePreferenceWidget$3;\nLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;-><init>(Z)V\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;-><init>(Z)V\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;-><init>(ZLandroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;-><init>(ZLandroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/widget/BasePreferenceWidgetKt$highlightBackground$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt;\nHSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt;->SwitchPreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt;->SwitchPreferenceWidget(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;\nHSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;-><init>(IZ)V\nPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;-><init>(IZ)V\nHSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$2$1;\nHSPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$2$1;-><init>(ZLkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/more/settings/widget/SwitchPreferenceWidgetKt$SwitchPreferenceWidget$2$1;-><init>(ZLkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt;\nHSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt;->TextPreferenceWidget-3f6hBDE(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt;->TextPreferenceWidget-3f6hBDE(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;\nHSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;-><init>(Ljava/lang/String;I)V\nPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;-><init>(Ljava/lang/String;I)V\nHSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;\nHSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;-><init>(IJLandroidx/compose/ui/graphics/vector/ImageVector;)V\nPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;-><init>(IJLandroidx/compose/ui/graphics/vector/ImageVector;)V\nHSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$3;\nHSPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$3;-><init>(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V\nPLeu/kanade/presentation/more/settings/widget/TextPreferenceWidgetKt$TextPreferenceWidget$3;-><init>(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;II)V\nLeu/kanade/presentation/theme/TachiyomiThemeKt;\nHSPLeu/kanade/presentation/theme/TachiyomiThemeKt;->TachiyomiTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nPLeu/kanade/presentation/theme/TachiyomiThemeKt;->TachiyomiTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nLeu/kanade/presentation/updates/UpdatesScreenKt;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt;->UpdateScreen(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Landroidx/compose/material3/SnackbarHostState;JLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt;->UpdateScreen(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Landroidx/compose/material3/SnackbarHostState;JLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt;->access$UpdatesBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$1$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;-><init>(Lkotlin/jvm/functions/Function0;ILeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;-><init>(Lkotlin/jvm/functions/Function0;ILeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$1$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$2$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$2$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$2$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$3$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$3$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$3$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$4$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$4$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$2$4$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;II)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;II)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;-><init>(Landroidx/compose/material3/SnackbarHostState;I)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;-><init>(Landroidx/compose/material3/SnackbarHostState;I)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function0;JLandroid/content/Context;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Lkotlin/jvm/functions/Function0;JLandroid/content/Context;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdateScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$2;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$2;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$2;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$3;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$1;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$1;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$1;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$11;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$11;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$11;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$3;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$3;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$3;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$5;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$5;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$5;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$7;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$7;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$7;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$9;\nHSPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$9;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/presentation/updates/UpdatesScreenKt$UpdatesBottomBar$9;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;\nHSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;-><clinit>()V\nPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;-><clinit>()V\nHSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;-><init>()V\nPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt;-><init>()V\nLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;\nHSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;-><clinit>()V\nPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;-><clinit>()V\nHSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;-><init>()V\nPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;-><init>()V\nHSPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/util/ComposableSingletons$NavigatorKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/util/NavigatorKt;\nHSPLeu/kanade/presentation/util/NavigatorKt;-><clinit>()V\nPLeu/kanade/presentation/util/NavigatorKt;-><clinit>()V\nHSPLeu/kanade/presentation/util/NavigatorKt;->DefaultNavigatorScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/presentation/util/NavigatorKt;->DefaultNavigatorScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/presentation/util/NavigatorKt;->ScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V\nHPLeu/kanade/presentation/util/NavigatorKt;->ScreenTransition(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V\nPLeu/kanade/presentation/util/NavigatorKt;->getLocalBackPress()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;\nHSPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nHSPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/util/NavigatorKt$DefaultNavigatorScreenTransition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;\nHSPLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;-><clinit>()V\nPLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;-><clinit>()V\nHSPLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;-><init>()V\nPLeu/kanade/presentation/util/NavigatorKt$LocalBackPress$1;-><init>()V\nLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;\nHSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;ILkotlin/jvm/functions/Function4;)V\nPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;ILkotlin/jvm/functions/Function4;)V\nHSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;\nHSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/animation/AnimatedContentScope;Lcafe/adriel/voyager/core/screen/Screen;I)V\nHPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/animation/AnimatedContentScope;Lcafe/adriel/voyager/core/screen/Screen;I)V\nHSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;\nHSPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;II)V\nPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;II)V\nPLeu/kanade/presentation/util/NavigatorKt$ScreenTransition$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/presentation/util/Screen;\nHSPLeu/kanade/presentation/util/Screen;-><init>()V\nHPLeu/kanade/presentation/util/Screen;-><init>()V\nHSPLeu/kanade/presentation/util/Screen;->getKey()Ljava/lang/String;\nHPLeu/kanade/presentation/util/Screen;->getKey()Ljava/lang/String;\nLeu/kanade/presentation/util/Tab;\nLeu/kanade/presentation/util/WindowSizeKt;\nHSPLeu/kanade/presentation/util/WindowSizeKt;->isTabletUi(Landroidx/compose/runtime/Composer;)Z\nHPLeu/kanade/presentation/util/WindowSizeKt;->isTabletUi(Landroidx/compose/runtime/Composer;)Z\nLeu/kanade/tachiyomi/App;\nHSPLeu/kanade/tachiyomi/App;-><init>()V\nPLeu/kanade/tachiyomi/App;-><init>()V\nHSPLeu/kanade/tachiyomi/App;->access$getDisableIncognitoReceiver$p(Leu/kanade/tachiyomi/App;)Leu/kanade/tachiyomi/App$DisableIncognitoReceiver;\nPLeu/kanade/tachiyomi/App;->access$getDisableIncognitoReceiver$p(Leu/kanade/tachiyomi/App;)Leu/kanade/tachiyomi/App$DisableIncognitoReceiver;\nHSPLeu/kanade/tachiyomi/App;->getPackageName()Ljava/lang/String;\nHPLeu/kanade/tachiyomi/App;->getPackageName()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/App;->onCreate()V\nPLeu/kanade/tachiyomi/App;->onCreate()V\nHSPLeu/kanade/tachiyomi/App;->onStart(Landroidx/lifecycle/LifecycleOwner;)V\nPLeu/kanade/tachiyomi/App;->onStart(Landroidx/lifecycle/LifecycleOwner;)V\nPLeu/kanade/tachiyomi/App;->onStop(Landroidx/lifecycle/LifecycleOwner;)V\nLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;\nHSPLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;-><init>(Leu/kanade/tachiyomi/App;)V\nPLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;-><init>(Leu/kanade/tachiyomi/App;)V\nHSPLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;->unregister()V\nPLeu/kanade/tachiyomi/App$DisableIncognitoReceiver;->unregister()V\nLeu/kanade/tachiyomi/App$onCreate$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/App$onCreate$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/App$onCreate$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/App$onCreate$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/App$onCreate$1;\nHSPLeu/kanade/tachiyomi/App$onCreate$1;-><init>(Leu/kanade/tachiyomi/App;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/App$onCreate$1;-><init>(Leu/kanade/tachiyomi/App;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/App$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/App$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/App$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/App$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/App$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/App$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;-><init>()V\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1$1;\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1$1;-><init>()V\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$1$1;-><init>()V\nLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;-><clinit>()V\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;-><init>()V\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;-><init>()V\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2$1;\nHSPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2$1;-><init>()V\nPLeu/kanade/tachiyomi/App$special$$inlined$injectLazy$2$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule;\nHSPLeu/kanade/tachiyomi/AppModule;->$r8$lambda$0RHLTm-bvsDpST_-bhuVCJga1ss(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule;->$r8$lambda$0RHLTm-bvsDpST_-bhuVCJga1ss(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/AppModule;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/AppModule;->getApp()Landroid/app/Application;\nPLeu/kanade/tachiyomi/AppModule;->getApp()Landroid/app/Application;\nHSPLeu/kanade/tachiyomi/AppModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingleton$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingleton$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingleton$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$10;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$10;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$10;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$11;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$11;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$11;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$12;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$12;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$12;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$13;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$13;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$13;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$14;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$14;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$14;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$15;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$15;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$15;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$16;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$16;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$16;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$17;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$17;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$17;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$18;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$18;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$18;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$19;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$19;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$19;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$2;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$2;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$2;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$3;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$3;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$3;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$4;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$4;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$4;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$5;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$5;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$5;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$6;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$6;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$6;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$7;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$7;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$7;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$8;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$8;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$8;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$9;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$9;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$$inlined$addSingletonFactory$9;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$1;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;-><init>(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;-><init>(Ltachiyomi/data/data/DatabaseImpl$Schema;[Lapp/cash/sqldelight/db/AfterVersion;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->setPragma(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$1$1;->setPragma(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;)V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$10;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10;-><init>(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$10;-><init>(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$10;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$10$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$11;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$11;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$11;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$11;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$11;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$12;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$12;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$12;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$12;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$12;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$13;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$13;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$13;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$13;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$13;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$14;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$14;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$14;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$14;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$14;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$15;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$15;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$15;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$15;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$15;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$16;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$16;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$16;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$17;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$17;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$17;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$18;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$18;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$18;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$18;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$18;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$19;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$19;-><init>(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$19;-><init>(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$19;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$19;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$19$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$19$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$19$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$2;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$2;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$2;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$2$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$2$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$2$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$3;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$3;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$3;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$3$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$4;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;-><clinit>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;-><clinit>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;-><init>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$4;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;-><clinit>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;-><init>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$5;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;-><clinit>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;-><clinit>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;-><init>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$5;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;-><clinit>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;-><init>()V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$6;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$6;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$6;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$6;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$6;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$7;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$7;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$7;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$7;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$7;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$8;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$8;-><init>(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$8;-><init>(Leu/kanade/tachiyomi/AppModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$8;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$8;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/AppModule$registerInjectables$8$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$8$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$8$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$9;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$9;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$9;-><init>(Leu/kanade/tachiyomi/AppModule;)V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/AppModule$registerInjectables$lambda$0$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/Migrations;\nHSPLeu/kanade/tachiyomi/Migrations;-><clinit>()V\nPLeu/kanade/tachiyomi/Migrations;-><clinit>()V\nHSPLeu/kanade/tachiyomi/Migrations;-><init>()V\nPLeu/kanade/tachiyomi/Migrations;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule;\nHSPLeu/kanade/tachiyomi/PreferenceModule;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/PreferenceModule;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule;->getApplication()Landroid/app/Application;\nPLeu/kanade/tachiyomi/PreferenceModule;->getApplication()Landroid/app/Application;\nHSPLeu/kanade/tachiyomi/PreferenceModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule;->registerInjectables(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule;->registerWith(Luy/kohesive/injekt/api/InjektRegistrar;)V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$10;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$10;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$10;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$11;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$11;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$11;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$12;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$12;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$12;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$13;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$13;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$13;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$2;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$2;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$2;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$3;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$3;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$3;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$4;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$4;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$4;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$5;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$5;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$5;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$6;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$6;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$6;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$7;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$7;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$7;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$8;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$8;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$8;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$9;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$9;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$$inlined$addSingletonFactory$9;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;-><init>(Leu/kanade/tachiyomi/PreferenceModule;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;-><init>(Leu/kanade/tachiyomi/PreferenceModule;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;-><init>(Leu/kanade/tachiyomi/PreferenceModule;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;-><init>(Leu/kanade/tachiyomi/PreferenceModule;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$10;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$11$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$12$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;-><init>(Leu/kanade/tachiyomi/PreferenceModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;-><init>(Leu/kanade/tachiyomi/PreferenceModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$13$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$2$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$3$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$4$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$5$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$6$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$7$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;-><init>(Leu/kanade/tachiyomi/PreferenceModule;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;-><init>(Leu/kanade/tachiyomi/PreferenceModule;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$8;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/PreferenceModule$registerInjectables$9$invoke$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/core/security/SecurityPreferences;\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->secureScreen()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->secureScreen()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->useAuthenticator()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences;->useAuthenticator()Ltachiyomi/core/preference/Preference;\nLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;-><clinit>()V\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;-><clinit>()V\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;-><init>(Ljava/lang/String;II)V\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences$SecureScreenMode;-><init>(Ljava/lang/String;II)V\nLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;-><clinit>()V\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;-><init>()V\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$1;-><init>()V\nLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$2;\nHSPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$2;-><init>()V\nPLeu/kanade/tachiyomi/core/security/SecurityPreferences$secureScreen$$inlined$getEnum$2;-><init>()V\nLeu/kanade/tachiyomi/crash/CrashActivity;\nLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;\nHSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;-><clinit>()V\nPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;-><clinit>()V\nHSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;-><init>(Landroid/content/Context;Ljava/lang/Thread$UncaughtExceptionHandler;)V\nPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler;-><init>(Landroid/content/Context;Ljava/lang/Thread$UncaughtExceptionHandler;)V\nLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;\nHSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;-><init>()V\nPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/crash/GlobalExceptionHandler$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/backup/BackupCreateJob;\nHSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob;-><clinit>()V\nPLeu/kanade/tachiyomi/data/backup/BackupCreateJob;-><clinit>()V\nLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;\nHSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;-><init>(I)V\nHSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V\nPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V\nLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion$setupTask$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion$setupTask$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/backup/BackupCreateJob$Companion$setupTask$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/cache/ChapterCache;\nHSPLeu/kanade/tachiyomi/data/cache/ChapterCache;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/cache/ChapterCache;-><init>(Landroid/app/Application;)V\nLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/cache/ChapterCache$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/cache/CoverCache;\nHSPLeu/kanade/tachiyomi/data/cache/CoverCache;-><clinit>()V\nPLeu/kanade/tachiyomi/data/cache/CoverCache;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/cache/CoverCache;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/cache/CoverCache;-><init>(Landroid/app/Application;)V\nLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;\nHSPLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/cache/CoverCache$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/download/DownloadCache;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/download/DownloadCache;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDirectoryFromPreference(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lcom/hippo/unifile/UniFile;\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDirectoryFromPreference(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lcom/hippo/unifile/UniFile;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDiskCacheFile(Leu/kanade/tachiyomi/data/download/DownloadCache;)Ljava/io/File;\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getDiskCacheFile(Leu/kanade/tachiyomi/data/download/DownloadCache;)Ljava/io/File;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getRootDownloadsDirLock$p(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lkotlinx/coroutines/sync/Mutex;\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$getRootDownloadsDirLock$p(Leu/kanade/tachiyomi/data/download/DownloadCache;)Lkotlinx/coroutines/sync/Mutex;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$setRootDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadCache;Leu/kanade/tachiyomi/data/download/RootDirectory;)V\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->access$setRootDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadCache;Leu/kanade/tachiyomi/data/download/RootDirectory;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->getChanges()Lkotlinx/coroutines/flow/SharedFlow;\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->getChanges()Lkotlinx/coroutines/flow/SharedFlow;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->invalidateCache()V\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->invalidateCache()V\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache;->isInitializing()Lkotlinx/coroutines/flow/StateFlow;\nPLeu/kanade/tachiyomi/data/download/DownloadCache;->isInitializing()Lkotlinx/coroutines/flow/StateFlow;\nLeu/kanade/tachiyomi/data/download/DownloadCache$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;-><init>(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$1;-><init>(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadCache$2;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$2;-><init>(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$2;-><init>(Leu/kanade/tachiyomi/data/download/DownloadCache;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadCache$changes$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadCache$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadManager;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/download/DownloadManager;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager;->getQueueState()Lkotlinx/coroutines/flow/StateFlow;\nPLeu/kanade/tachiyomi/data/download/DownloadManager;->getQueueState()Lkotlinx/coroutines/flow/StateFlow;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager;->progressFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;\nPLeu/kanade/tachiyomi/data/download/DownloadManager;->progressFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager;->statusFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;\nPLeu/kanade/tachiyomi/data/download/DownloadManager;->statusFlow()Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;\nLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;-><init>(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;-><init>(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$progressFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$5;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$5;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$special$$inlined$get$5;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;-><init>(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;-><init>(Leu/kanade/tachiyomi/data/download/DownloadManager;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadManager$statusFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter;\nHSPLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter;-><init>(Landroid/app/Application;)V\nLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadPendingDeleter$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadProvider;\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/download/DownloadProvider;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$getContext$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;)Landroid/content/Context;\nPLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$getContext$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;)Landroid/content/Context;\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$setDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lcom/hippo/unifile/UniFile;)V\nPLeu/kanade/tachiyomi/data/download/DownloadProvider;->access$setDownloadsDir$p(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lcom/hippo/unifile/UniFile;)V\nLeu/kanade/tachiyomi/data/download/DownloadProvider$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;-><init>(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;-><init>(Leu/kanade/tachiyomi/data/download/DownloadProvider;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/DownloadProvider$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/DownloadProvider$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadProvider$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadProvider$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadService;\nHSPLeu/kanade/tachiyomi/data/download/DownloadService;-><clinit>()V\nPLeu/kanade/tachiyomi/data/download/DownloadService;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/download/DownloadService;->access$isRunning$cp()Lkotlinx/coroutines/flow/StateFlow;\nPLeu/kanade/tachiyomi/data/download/DownloadService;->access$isRunning$cp()Lkotlinx/coroutines/flow/StateFlow;\nLeu/kanade/tachiyomi/data/download/DownloadService$Companion;\nHSPLeu/kanade/tachiyomi/data/download/DownloadService$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadService$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/download/DownloadService$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/download/DownloadService$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/download/DownloadStore;\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/download/DownloadStore;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore;->addAll(Ljava/util/List;)V\nPLeu/kanade/tachiyomi/data/download/DownloadStore;->addAll(Ljava/util/List;)V\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore;->clear()V\nPLeu/kanade/tachiyomi/data/download/DownloadStore;->clear()V\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore;->restore()Ljava/util/ArrayList;\nPLeu/kanade/tachiyomi/data/download/DownloadStore;->restore()Ljava/util/ArrayList;\nLeu/kanade/tachiyomi/data/download/DownloadStore$restore$$inlined$sortedBy$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore$restore$$inlined$sortedBy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadStore$restore$$inlined$sortedBy$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/data/download/DownloadStore$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/data/download/Downloader;\nHSPLeu/kanade/tachiyomi/data/download/Downloader;-><clinit>()V\nPLeu/kanade/tachiyomi/data/download/Downloader;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/download/Downloader;-><init>(Landroid/app/Application;Leu/kanade/tachiyomi/data/download/DownloadProvider;Leu/kanade/tachiyomi/data/download/DownloadCache;)V\nPLeu/kanade/tachiyomi/data/download/Downloader;-><init>(Landroid/app/Application;Leu/kanade/tachiyomi/data/download/DownloadProvider;Leu/kanade/tachiyomi/data/download/DownloadCache;)V\nHSPLeu/kanade/tachiyomi/data/download/Downloader;->access$addAllToQueue(Leu/kanade/tachiyomi/data/download/Downloader;Ljava/util/List;)V\nPLeu/kanade/tachiyomi/data/download/Downloader;->access$addAllToQueue(Leu/kanade/tachiyomi/data/download/Downloader;Ljava/util/List;)V\nHSPLeu/kanade/tachiyomi/data/download/Downloader;->access$getStore$p(Leu/kanade/tachiyomi/data/download/Downloader;)Leu/kanade/tachiyomi/data/download/DownloadStore;\nPLeu/kanade/tachiyomi/data/download/Downloader;->access$getStore$p(Leu/kanade/tachiyomi/data/download/Downloader;)Leu/kanade/tachiyomi/data/download/DownloadStore;\nHSPLeu/kanade/tachiyomi/data/download/Downloader;->addAllToQueue(Ljava/util/List;)V\nPLeu/kanade/tachiyomi/data/download/Downloader;->addAllToQueue(Ljava/util/List;)V\nHSPLeu/kanade/tachiyomi/data/download/Downloader;->getQueueState()Lkotlinx/coroutines/flow/StateFlow;\nPLeu/kanade/tachiyomi/data/download/Downloader;->getQueueState()Lkotlinx/coroutines/flow/StateFlow;\nLeu/kanade/tachiyomi/data/download/Downloader$1;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1;-><init>(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/Downloader$1;-><init>(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/Downloader$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/Downloader$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/Downloader$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;-><init>(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;-><init>(Leu/kanade/tachiyomi/data/download/Downloader;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/download/Downloader$1$chapters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/download/Downloader$Companion;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/download/Downloader$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/download/Downloader$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/download/Downloader$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/download/Downloader$notifier$2;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$notifier$2;-><init>(Leu/kanade/tachiyomi/data/download/Downloader;)V\nPLeu/kanade/tachiyomi/data/download/Downloader$notifier$2;-><init>(Leu/kanade/tachiyomi/data/download/Downloader;)V\nLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$5;\nHSPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$5;-><init>()V\nPLeu/kanade/tachiyomi/data/download/Downloader$special$$inlined$get$5;-><init>()V\nLeu/kanade/tachiyomi/data/download/RootDirectory;\nHSPLeu/kanade/tachiyomi/data/download/RootDirectory;-><clinit>()V\nPLeu/kanade/tachiyomi/data/download/RootDirectory;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/download/RootDirectory;-><init>(Lcom/hippo/unifile/UniFile;)V\nPLeu/kanade/tachiyomi/data/download/RootDirectory;-><init>(Lcom/hippo/unifile/UniFile;)V\nLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;\nHSPLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/download/RootDirectory$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;\nHSPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;-><clinit>()V\nPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;-><init>()V\nPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;-><init>()V\nHSPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLeu/kanade/tachiyomi/data/download/SourceDirectory$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLeu/kanade/tachiyomi/data/library/LibraryUpdateJob;\nHSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob;-><clinit>()V\nPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob;-><clinit>()V\nLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;\nHSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;-><init>(I)V\nHSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V\nPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion;->setupTask(Landroid/content/Context;Ljava/lang/Integer;)V\nLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion$setupTask$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion$setupTask$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/data/library/LibraryUpdateJob$Companion$setupTask$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/data/notification/Notifications;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications;-><clinit>()V\nPLeu/kanade/tachiyomi/data/notification/Notifications;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications;-><init>()V\nPLeu/kanade/tachiyomi/data/notification/Notifications;-><init>()V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications;->createChannels(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications;->createChannels(Landroid/content/Context;)V\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;-><init>(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/notification/Notifications$createChannels$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/saver/ImageSaver;\nLeu/kanade/tachiyomi/data/track/DeletableTrackService;\nLeu/kanade/tachiyomi/data/track/EnhancedTrackService;\nLeu/kanade/tachiyomi/data/track/TrackerManager;\nHSPLeu/kanade/tachiyomi/data/track/TrackerManager;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/TrackerManager;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackerManager;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/track/TrackerManager;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/data/track/TrackerManager;->getServices()Ljava/util/List;\nPLeu/kanade/tachiyomi/data/track/TrackerManager;->getServices()Ljava/util/List;\nLeu/kanade/tachiyomi/data/track/TrackManager$Companion;\nHSPLeu/kanade/tachiyomi/data/track/TrackManager$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/TrackManager$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackManager$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/TrackManager$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/Tracker;\nHSPLeu/kanade/tachiyomi/data/track/Tracker;-><init>(J)V\nPLeu/kanade/tachiyomi/data/track/Tracker;-><init>(J)V\nHSPLeu/kanade/tachiyomi/data/track/Tracker;->getId()J\nPLeu/kanade/tachiyomi/data/track/Tracker;->getId()J\nHSPLeu/kanade/tachiyomi/data/track/Tracker;->getNetworkService()Leu/kanade/tachiyomi/network/NetworkHelper;\nPLeu/kanade/tachiyomi/data/track/Tracker;->getNetworkService()Leu/kanade/tachiyomi/network/NetworkHelper;\nHSPLeu/kanade/tachiyomi/data/track/Tracker;->getTrackPreferences()Leu/kanade/domain/track/service/TrackPreferences;\nPLeu/kanade/tachiyomi/data/track/Tracker;->getTrackPreferences()Leu/kanade/domain/track/service/TrackPreferences;\nHSPLeu/kanade/tachiyomi/data/track/Tracker;->getUsername()Ljava/lang/String;\nPLeu/kanade/tachiyomi/data/track/Tracker;->getUsername()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/data/track/Tracker;->isLogged()Z\nPLeu/kanade/tachiyomi/data/track/Tracker;->isLogged()Z\nLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;-><init>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2$1;\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$2$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;-><init>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3$1;\nHSPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/TrackService$special$$inlined$injectLazy$3$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/anilist/Anilist;\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist;-><init>()V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist;-><init>()V\nLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/anilist/Anilist$api$2;\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$api$2;-><init>(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist$api$2;-><init>(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V\nLeu/kanade/tachiyomi/data/track/anilist/Anilist$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/anilist/Anilist;)V\nLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/anilist/Anilist$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;-><init>()V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi;-><init>()V\nLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$api$2;\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$api$2;-><init>(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$api$2;-><init>(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V\nLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/bangumi/Bangumi;)V\nLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/bangumi/Bangumi$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/kavita/Kavita;\nHSPLeu/kanade/tachiyomi/data/track/kavita/Kavita;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/kavita/Kavita;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/kavita/Kavita;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/track/kavita/Kavita;-><init>(Landroid/app/Application;)V\nLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;\nHSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/kavita/Kavita$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/kavita/Kavita$api$2;\nHSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$api$2;-><init>(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V\nPLeu/kanade/tachiyomi/data/track/kavita/Kavita$api$2;-><init>(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V\nLeu/kanade/tachiyomi/data/track/kavita/Kavita$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/kavita/Kavita$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V\nPLeu/kanade/tachiyomi/data/track/kavita/Kavita$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/kavita/Kavita;)V\nLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;-><init>()V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu;-><init>()V\nLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$api$2;\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$api$2;-><init>(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$api$2;-><init>(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V\nLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/kitsu/Kitsu;)V\nLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/kitsu/Kitsu$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/komga/Komga;\nHSPLeu/kanade/tachiyomi/data/track/komga/Komga;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/komga/Komga;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/komga/Komga;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/data/track/komga/Komga;-><init>(Landroid/app/Application;)V\nLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;\nHSPLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/komga/Komga$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/komga/Komga$api$2;\nHSPLeu/kanade/tachiyomi/data/track/komga/Komga$api$2;-><init>(Leu/kanade/tachiyomi/data/track/komga/Komga;)V\nPLeu/kanade/tachiyomi/data/track/komga/Komga$api$2;-><init>(Leu/kanade/tachiyomi/data/track/komga/Komga;)V\nLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;\nHSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;-><init>()V\nHPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;-><init>()V\nLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;\nHSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$api$2;\nHSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$api$2;-><init>(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V\nPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$api$2;-><init>(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V\nLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V\nPLeu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates;)V\nLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;-><init>()V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;-><init>()V\nLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$api$2;\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$api$2;-><init>(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$api$2;-><init>(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V\nLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList;)V\nLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;-><init>()V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori;-><init>()V\nLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$api$2;\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$api$2;-><init>(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$api$2;-><init>(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V\nLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$interceptor$2;\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$interceptor$2;-><init>(Leu/kanade/tachiyomi/data/track/shikimori/Shikimori;)V\nLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/data/track/shikimori/Shikimori$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;\nHSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;-><init>()V\nPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi;-><init>()V\nLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;\nHSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;-><init>()V\nPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;\nHSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;-><clinit>()V\nPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;-><init>()V\nPLeu/kanade/tachiyomi/data/track/suwayomi/Suwayomi$api$2;-><init>()V\nLeu/kanade/tachiyomi/extension/ExtensionManager;\nHSPLeu/kanade/tachiyomi/extension/ExtensionManager;-><init>(Landroid/app/Application;)V\nPLeu/kanade/tachiyomi/extension/ExtensionManager;-><init>(Landroid/app/Application;)V\nHSPLeu/kanade/tachiyomi/extension/ExtensionManager;->getInstalledExtensionsFlow()Lkotlinx/coroutines/flow/StateFlow;\nPLeu/kanade/tachiyomi/extension/ExtensionManager;->getInstalledExtensionsFlow()Lkotlinx/coroutines/flow/StateFlow;\nLeu/kanade/tachiyomi/extension/ExtensionManager$InstallationListener;\nHSPLeu/kanade/tachiyomi/extension/ExtensionManager$InstallationListener;-><init>(Leu/kanade/tachiyomi/extension/ExtensionManager;)V\nPLeu/kanade/tachiyomi/extension/ExtensionManager$InstallationListener;-><init>(Leu/kanade/tachiyomi/extension/ExtensionManager;)V\nLeu/kanade/tachiyomi/extension/ExtensionManager$installer$2;\nHSPLeu/kanade/tachiyomi/extension/ExtensionManager$installer$2;-><init>(Leu/kanade/tachiyomi/extension/ExtensionManager;)V\nPLeu/kanade/tachiyomi/extension/ExtensionManager$installer$2;-><init>(Leu/kanade/tachiyomi/extension/ExtensionManager;)V\nLeu/kanade/tachiyomi/extension/ExtensionManager$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/extension/ExtensionManager$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/ExtensionManager$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getJson(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Lkotlinx/serialization/json/Json;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getJson(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Lkotlinx/serialization/json/Json;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getNetworkService(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Leu/kanade/tachiyomi/network/NetworkHelper;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getNetworkService(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Leu/kanade/tachiyomi/network/NetworkHelper;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getPreferenceStore(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Ltachiyomi/core/preference/PreferenceStore;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getPreferenceStore(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Ltachiyomi/core/preference/PreferenceStore;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getRequiresFallbackSource$p(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Z\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$getRequiresFallbackSource$p(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)Z\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$toExtensions(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Ljava/util/List;)Ljava/util/ArrayList;\nHPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->access$toExtensions(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Ljava/util/List;)Ljava/util/ArrayList;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->checkForUpdates(Landroid/content/Context;Lkotlin/coroutines/Continuation;Z)Ljava/io/Serializable;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->checkForUpdates(Landroid/content/Context;Lkotlin/coroutines/Continuation;Z)Ljava/io/Serializable;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->findExtensions(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi;->findExtensions(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;-><init>(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;-><init>(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$checkForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;-><init>(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;-><init>(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$findExtensions$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;-><init>(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;-><init>(Leu/kanade/tachiyomi/extension/api/ExtensionGithubApi;)V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$lastExtCheck$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1$1;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$1$1;-><init>()V\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2$1;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$2$1;-><init>()V\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$3;-><init>()V\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4$1;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApi$special$$inlined$injectLazy$4$1;-><init>()V\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;->access$getExtensionSourceMapper$p()Lkotlin/jvm/functions/Function1;\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt;->access$getExtensionSourceMapper$p()Lkotlin/jvm/functions/Function1;\nLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/extension/api/ExtensionGithubApiKt$extensionSourceMapper$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;IIILjava/util/List;)V\nHPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;IIILjava/util/List;)V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->access$get$childSerializers$cp()[Lkotlinx/serialization/KSerializer;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->access$get$childSerializers$cp()[Lkotlinx/serialization/KSerializer;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getApk()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getApk()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getCode()J\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getCode()J\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasChangelog()I\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasChangelog()I\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasReadme()I\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getHasReadme()I\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getLang()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getLang()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getName()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getName()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getNsfw()I\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getNsfw()I\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getPkg()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getPkg()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getSources()Ljava/util/List;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getSources()Ljava/util/List;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getVersion()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject;->getVersion()Ljava/lang/String;\nLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject;\nHPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionJsonObject;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;-><init>(I)V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->serializer()Lkotlinx/serialization/KSerializer;\nPLeu/kanade/tachiyomi/extension/api/ExtensionJsonObject$Companion;->serializer()Lkotlinx/serialization/KSerializer;\nLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;-><init>(IJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\nHPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;-><init>(IJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getBaseUrl()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getBaseUrl()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getId()J\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getId()J\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getLang()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getLang()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getName()Ljava/lang/String;\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;->getName()Ljava/lang/String;\nLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->childSerializers()[Lkotlinx/serialization/KSerializer;\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->childSerializers()[Lkotlinx/serialization/KSerializer;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;\nHPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Leu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->typeParametersSerializers()[Lkotlinx/serialization/KSerializer;\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$$serializer;->typeParametersSerializers()[Lkotlinx/serialization/KSerializer;\nLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;-><init>()V\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/extension/api/ExtensionSourceJsonObject$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/extension/model/Extension;\nHSPLeu/kanade/tachiyomi/extension/model/Extension;-><init>()V\nPLeu/kanade/tachiyomi/extension/model/Extension;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/model/Extension;-><init>(I)V\nPLeu/kanade/tachiyomi/extension/model/Extension;-><init>(I)V\nLeu/kanade/tachiyomi/extension/model/Extension$Available;\nHSPLeu/kanade/tachiyomi/extension/model/Extension$Available;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JDLjava/lang/String;ZZZLjava/util/List;Ljava/lang/String;Ljava/lang/String;)V\nHPLeu/kanade/tachiyomi/extension/model/Extension$Available;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JDLjava/lang/String;ZZZLjava/util/List;Ljava/lang/String;Ljava/lang/String;)V\nLeu/kanade/tachiyomi/extension/model/Extension$Available$Source;\nHSPLeu/kanade/tachiyomi/extension/model/Extension$Available$Source;-><init>(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\nHPLeu/kanade/tachiyomi/extension/model/Extension$Available$Source;-><init>(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\nLeu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver;\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver;-><init>(Leu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver$Listener;)V\nPLeu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver;-><init>(Leu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver$Listener;)V\nLeu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver$Listener;\nLeu/kanade/tachiyomi/extension/util/ExtensionLoader;\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;-><init>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->isPackageAnExtension(Landroid/content/pm/PackageInfo;)Z\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->isPackageAnExtension(Landroid/content/pm/PackageInfo;)Z\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->loadExtensions(Landroid/content/Context;)Ljava/util/List;\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader;->loadExtensions(Landroid/content/Context;)Ljava/util/List;\nLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;-><init>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$loadNsfwSource$2;-><init>()V\nLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;-><init>()V\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1$1;\nHSPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1$1;-><init>()V\nPLeu/kanade/tachiyomi/extension/util/ExtensionLoader$special$$inlined$injectLazy$1$1;-><init>()V\nLeu/kanade/tachiyomi/network/AndroidCookieJar;\nHSPLeu/kanade/tachiyomi/network/AndroidCookieJar;-><init>()V\nPLeu/kanade/tachiyomi/network/AndroidCookieJar;-><init>()V\nHSPLeu/kanade/tachiyomi/network/AndroidCookieJar;->get(Lokhttp3/HttpUrl;)Ljava/util/List;\nPLeu/kanade/tachiyomi/network/AndroidCookieJar;->get(Lokhttp3/HttpUrl;)Ljava/util/List;\nHSPLeu/kanade/tachiyomi/network/AndroidCookieJar;->loadForRequest(Lokhttp3/HttpUrl;)Ljava/util/List;\nPLeu/kanade/tachiyomi/network/AndroidCookieJar;->loadForRequest(Lokhttp3/HttpUrl;)Ljava/util/List;\nLeu/kanade/tachiyomi/network/JavaScriptEngine;\nLeu/kanade/tachiyomi/network/NetworkHelper;\nHSPLeu/kanade/tachiyomi/network/NetworkHelper;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/network/NetworkPreferences;)V\nPLeu/kanade/tachiyomi/network/NetworkHelper;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/network/NetworkPreferences;)V\nHSPLeu/kanade/tachiyomi/network/NetworkHelper;->defaultUserAgentProvider()Ljava/lang/String;\nPLeu/kanade/tachiyomi/network/NetworkHelper;->defaultUserAgentProvider()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/network/NetworkHelper;->getClient()Lokhttp3/OkHttpClient;\nPLeu/kanade/tachiyomi/network/NetworkHelper;->getClient()Lokhttp3/OkHttpClient;\nLeu/kanade/tachiyomi/network/NetworkHelper$client$1$1;\nHSPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$1;-><init>(Ljava/lang/Object;)V\nPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$1;-><init>(Ljava/lang/Object;)V\nLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;\nHSPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;-><init>(Ljava/lang/Object;)V\nPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;-><init>(Ljava/lang/Object;)V\nHSPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/network/NetworkHelper$client$1$builder$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/network/NetworkPreferences;\nHSPLeu/kanade/tachiyomi/network/NetworkPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/tachiyomi/network/NetworkPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLeu/kanade/tachiyomi/network/NetworkPreferences;->defaultUserAgent()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/tachiyomi/network/NetworkPreferences;->defaultUserAgent()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/tachiyomi/network/NetworkPreferences;->dohProvider()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/tachiyomi/network/NetworkPreferences;->dohProvider()Ltachiyomi/core/preference/Preference;\nHSPLeu/kanade/tachiyomi/network/NetworkPreferences;->verboseLogging()Ltachiyomi/core/preference/Preference;\nPLeu/kanade/tachiyomi/network/NetworkPreferences;->verboseLogging()Ltachiyomi/core/preference/Preference;\nLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;-><clinit>()V\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;-><clinit>()V\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->await(Lokhttp3/Call;[Ljava/lang/StackTraceElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->await(Lokhttp3/Call;[Ljava/lang/StackTraceElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->awaitSuccess(Lokhttp3/Call;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->awaitSuccess(Lokhttp3/Call;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->decodeFromJsonResponse(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokhttp3/Response;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt;->decodeFromJsonResponse(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokhttp3/Response;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$1;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$1;-><init>(Lokhttp3/Call;)V\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$1;-><init>(Lokhttp3/Call;)V\nLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;[Ljava/lang/StackTraceElement;)V\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;[Ljava/lang/StackTraceElement;)V\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;->onResponse(Lokhttp3/Call;Lokhttp3/Response;)V\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1;->onResponse(Lokhttp3/Call;Lokhttp3/Response;)V\nLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1$onResponse$1;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1$onResponse$1;-><init>(Lokhttp3/Response;)V\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$await$2$callback$1$onResponse$1;-><init>(Lokhttp3/Response;)V\nLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/network/OkHttpExtensionsKt$awaitSuccess$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/network/RequestsKt;\nHSPLeu/kanade/tachiyomi/network/RequestsKt;-><clinit>()V\nPLeu/kanade/tachiyomi/network/RequestsKt;-><clinit>()V\nHSPLeu/kanade/tachiyomi/network/RequestsKt;->GET$default(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;ILjava/lang/Object;)Lokhttp3/Request;\nPLeu/kanade/tachiyomi/network/RequestsKt;->GET$default(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;ILjava/lang/Object;)Lokhttp3/Request;\nHSPLeu/kanade/tachiyomi/network/RequestsKt;->GET(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request;\nPLeu/kanade/tachiyomi/network/RequestsKt;->GET(Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request;\nHSPLeu/kanade/tachiyomi/network/RequestsKt;->GET(Lokhttp3/HttpUrl;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request;\nPLeu/kanade/tachiyomi/network/RequestsKt;->GET(Lokhttp3/HttpUrl;Lokhttp3/Headers;Lokhttp3/CacheControl;)Lokhttp3/Request;\nLeu/kanade/tachiyomi/network/interceptor/CloudflareBypassException;\nLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;\nHSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/network/AndroidCookieJar;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/network/AndroidCookieJar;Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;->shouldIntercept(Lokhttp3/Response;)Z\nPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor;->shouldIntercept(Lokhttp3/Response;)Z\nLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;\nHSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;-><clinit>()V\nPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;-><clinit>()V\nHSPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;->access$getERROR_CODES$p()Ljava/util/List;\nPLeu/kanade/tachiyomi/network/interceptor/CloudflareInterceptorKt;->access$getERROR_CODES$p()Ljava/util/List;\nLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;\nHSPLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;-><init>()V\nPLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;-><init>()V\nHSPLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLeu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;\nHSPLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLeu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;\nHSPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;-><init>(Landroid/content/Context;Lkotlin/jvm/functions/Function0;)V\nPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;-><init>(Landroid/content/Context;Lkotlin/jvm/functions/Function0;)V\nHSPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor$initWebView$2;\nHSPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor$initWebView$2;-><init>(Leu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;)V\nPLeu/kanade/tachiyomi/network/interceptor/WebViewInterceptor$initWebView$2;-><init>(Leu/kanade/tachiyomi/network/interceptor/WebViewInterceptor;)V\nLeu/kanade/tachiyomi/source/AndroidSourceManager;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager;-><init>(Landroid/app/Application;Leu/kanade/tachiyomi/extension/ExtensionManager;Ltachiyomi/domain/source/repository/StubSourceRepository;)V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager;-><init>(Landroid/app/Application;Leu/kanade/tachiyomi/extension/ExtensionManager;Ltachiyomi/domain/source/repository/StubSourceRepository;)V\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getContext$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Landroid/content/Context;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getContext$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Landroid/content/Context;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getExtensionManager$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Leu/kanade/tachiyomi/extension/ExtensionManager;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getExtensionManager$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Leu/kanade/tachiyomi/extension/ExtensionManager;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourceRepository$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ltachiyomi/domain/source/repository/StubSourceRepository;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourceRepository$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ltachiyomi/domain/source/repository/StubSourceRepository;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourcesMapFlow$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getSourcesMapFlow$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getStubSourcesMap$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ljava/util/concurrent/ConcurrentHashMap;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager;->access$getStubSourcesMap$p(Leu/kanade/tachiyomi/source/AndroidSourceManager;)Ljava/util/concurrent/ConcurrentHashMap;\nLeu/kanade/tachiyomi/source/AndroidSourceManager$1;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$1$1$invokeSuspend$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/source/AndroidSourceManager$2;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;-><init>(Leu/kanade/tachiyomi/source/AndroidSourceManager;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$injectLazy$1;-><init>()V\nLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$map$1;\nHSPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/MutableStateFlow;)V\nPLeu/kanade/tachiyomi/source/AndroidSourceManager$special$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/MutableStateFlow;)V\nLeu/kanade/tachiyomi/source/CatalogueSource;\nLeu/kanade/tachiyomi/source/Source;\nLeu/kanade/tachiyomi/source/UnmeteredSource;\nLeu/kanade/tachiyomi/source/model/Filter;\nHSPLeu/kanade/tachiyomi/source/model/Filter;-><init>(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLeu/kanade/tachiyomi/source/model/Filter;-><init>(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLeu/kanade/tachiyomi/source/model/Filter$Sort;\nHSPLeu/kanade/tachiyomi/source/model/Filter$Sort;-><init>(Ljava/lang/String;[Ljava/lang/String;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V\nPLeu/kanade/tachiyomi/source/model/Filter$Sort;-><init>(Ljava/lang/String;[Ljava/lang/String;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V\nLeu/kanade/tachiyomi/source/model/Filter$Sort$Selection;\nHSPLeu/kanade/tachiyomi/source/model/Filter$Sort$Selection;-><init>(IZ)V\nPLeu/kanade/tachiyomi/source/model/Filter$Sort$Selection;-><init>(IZ)V\nLeu/kanade/tachiyomi/source/model/FilterList;\nHSPLeu/kanade/tachiyomi/source/model/FilterList;-><init>(Ljava/util/List;)V\nPLeu/kanade/tachiyomi/source/model/FilterList;-><init>(Ljava/util/List;)V\nHSPLeu/kanade/tachiyomi/source/model/FilterList;-><init>([Leu/kanade/tachiyomi/source/model/Filter;)V\nPLeu/kanade/tachiyomi/source/model/FilterList;-><init>([Leu/kanade/tachiyomi/source/model/Filter;)V\nLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;\nHSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->attachBaseContext(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->attachBaseContext(Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->onCreate(Landroid/os/Bundle;)V\nPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->onCreate(Landroid/os/Bundle;)V\nHSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V\nPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate;-><clinit>()V\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->onApplicationStart()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->onApplicationStart()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion;->onApplicationStopped()V\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStart$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStart$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStart$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate$Companion$onApplicationStopped$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->onResume(Landroidx/lifecycle/LifecycleOwner;)V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl;->registerSecureActivity(Landroidx/appcompat/app/AppCompatActivity;)V\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;-><init>(Landroid/view/Window;)V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;-><init>(Landroid/view/Window;)V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$setSecureScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1$1;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$1$1;-><init>()V\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2$1;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegateImpl$special$$inlined$injectLazy$2$1;-><init>()V\nLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate;-><clinit>()V\nLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->getThemeResIds(Leu/kanade/domain/ui/model/AppTheme;Z)Ljava/util/ArrayList;\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate$Companion;->getThemeResIds(Leu/kanade/domain/ui/model/AppTheme;Z)Ljava/util/ArrayList;\nLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;->applyAppTheme(Landroid/app/Activity;)V\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl;->applyAppTheme(Landroid/app/Activity;)V\nLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl$applyAppTheme$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl$applyAppTheme$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/base/delegate/ThemingDelegateImpl$applyAppTheme$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/browse/BrowseTab;\nHSPLeu/kanade/tachiyomi/ui/browse/BrowseTab;-><init>(Z)V\nPLeu/kanade/tachiyomi/ui/browse/BrowseTab;-><init>(Z)V\nHSPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->equals(Ljava/lang/Object;)Z\nPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->equals(Ljava/lang/Object;)Z\nHSPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nHPLeu/kanade/tachiyomi/ui/browse/BrowseTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;-><init>(I)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getGetHistory$p(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Ltachiyomi/domain/history/interactor/GetHistory;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getGetHistory$p(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Ltachiyomi/domain/history/interactor/GetHistory;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$3;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$1$invokeSuspend$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog$Delete;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog$DeleteAll;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;-><init>(Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;-><init>(Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;Ljava/lang/String;Ljava/util/List;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->equals(Ljava/lang/Object;)Z\nHPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->equals(Ljava/lang/Object;)Z\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/history/HistoryScreenModel$Dialog;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getList()Ljava/util/List;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getList()Ljava/util/List;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getSearchQuery()Ljava/lang/String;\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$State;->getSearchQuery()Ljava/lang/String;\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryScreenModel$toHistoryUiModels$2;-><init>()V\nLeu/kanade/tachiyomi/ui/history/HistoryTab;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab;-><init>()V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/history/HistoryTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->access$getResumeLastChapterReadEvent$p()Lkotlinx/coroutines/channels/Channel;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab;->access$getResumeLastChapterReadEvent$p()Lkotlinx/coroutines/channels/Channel;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getKey()Ljava/lang/String;\nHPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getKey()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nHPLeu/kanade/tachiyomi/ui/history/HistoryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryTab;I)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryTab;I)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$2;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$3;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$3;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$3;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$4;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$4;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$4;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;-><init>(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;-><init>(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$7;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8$1;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$8$1;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9$1;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$9$1;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$onDismissRequest$1;\nHSPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$onDismissRequest$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/history/HistoryTab$Content$onDismissRequest$1;-><init>(Leu/kanade/tachiyomi/ui/history/HistoryScreenModel;)V\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt;-><init>()V\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;-><init>(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;-><init>(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-3$1$bottomNavVisible$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-4$1;-><init>()V\nLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->Content(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen;->Content(Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationBarItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationBarItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationIconItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$NavigationIconItem(Leu/kanade/tachiyomi/ui/home/HomeScreen;Leu/kanade/presentation/util/Tab;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getLibrarySearchEvent$p()Lkotlinx/coroutines/channels/Channel;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getLibrarySearchEvent$p()Lkotlinx/coroutines/channels/Channel;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getOpenTabEvent$p()Lkotlinx/coroutines/channels/Channel;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getOpenTabEvent$p()Lkotlinx/coroutines/channels/Channel;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getShowBottomNavEvent$p()Lkotlinx/coroutines/channels/Channel;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getShowBottomNavEvent$p()Lkotlinx/coroutines/channels/Channel;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getTabs$p()Ljava/util/List;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;->access$getTabs$p()Ljava/util/List;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen;->showBottomNav(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen;->showBottomNav(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;-><init>(Lcafe/adriel/voyager/navigator/tab/Tab;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;-><init>(Lcafe/adriel/voyager/navigator/tab/Tab;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$1$1$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;-><init>(Lkotlin/jvm/functions/Function0;Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;-><init>(Lkotlin/jvm/functions/Function0;Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$2$2$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$goToLibraryTab$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$goToLibraryTab$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$Content$1$goToLibraryTab$1;-><init>(Lcafe/adriel/voyager/navigator/tab/TabNavigator;)V\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;-><init>(ZLcafe/adriel/voyager/navigator/tab/TabNavigator;Leu/kanade/presentation/util/Tab;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;-><init>(ZLcafe/adriel/voyager/navigator/tab/TabNavigator;Leu/kanade/presentation/util/Tab;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;-><init>(Leu/kanade/presentation/util/Tab;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;-><init>(Leu/kanade/presentation/util/Tab;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;-><init>(Leu/kanade/presentation/util/Tab;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;-><init>(Leu/kanade/presentation/util/Tab;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;-><init>(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;-><init>(Leu/kanade/tachiyomi/ui/home/HomeScreen;Landroidx/compose/foundation/layout/RowScope;Leu/kanade/presentation/util/Tab;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;-><init>(Leu/kanade/presentation/util/Tab;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;-><init>(Leu/kanade/presentation/util/Tab;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;-><init>(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;-><init>(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$invokeSuspend$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$invokeSuspend$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$2$invokeSuspend$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;-><init>(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;-><init>(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$invokeSuspend$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$invokeSuspend$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$1$count$4$invokeSuspend$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;-><init>(Leu/kanade/presentation/util/Tab;I)V\nPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;-><init>(Leu/kanade/presentation/util/Tab;I)V\nHSPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/home/HomeScreen$NavigationIconItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;-><init>(I)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$applyFilters(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$applyFilters(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getGetTracksPerManga$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Ltachiyomi/domain/track/interactor/GetTracksPerManga;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getGetTracksPerManga$p(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Ltachiyomi/domain/track/interactor/GetTracksPerManga;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getLibraryFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getLibraryFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getTrackingFilterFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/Flow;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->access$getTrackingFilterFlow(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)Lkotlinx/coroutines/flow/Flow;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getActiveCategoryIndex()I\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getActiveCategoryIndex()I\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getLibraryItemPreferencesFlow()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getLibraryItemPreferencesFlow()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getTrackingFilterFlow()Lkotlinx/coroutines/flow/Flow;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel;->getTrackingFilterFlow()Lkotlinx/coroutines/flow/Flow;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$1$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog$ChangeCategory;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog$DeleteManga;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog$SettingsSheet;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;-><init>(ZZZZLtachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;-><init>(ZZZZLtachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;Ltachiyomi/core/preference/TriState;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterBookmarked()Ltachiyomi/core/preference/TriState;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterBookmarked()Ltachiyomi/core/preference/TriState;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterCompleted()Ltachiyomi/core/preference/TriState;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterCompleted()Ltachiyomi/core/preference/TriState;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterDownloaded()Ltachiyomi/core/preference/TriState;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterDownloaded()Ltachiyomi/core/preference/TriState;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterStarted()Ltachiyomi/core/preference/TriState;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterStarted()Ltachiyomi/core/preference/TriState;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterUnread()Ltachiyomi/core/preference/TriState;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getFilterUnread()Ltachiyomi/core/preference/TriState;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getGlobalFilterDownloaded()Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$ItemPreferences;->getGlobalFilterDownloaded()Z\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;-><init>(I)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;-><init>(ZLjava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;-><init>(ZLjava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->access$getLibraryCount(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)I\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->access$getLibraryCount(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)I\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;Ljava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;Ljava/util/Map;Ljava/lang/String;Ljava/util/List;ZZZZLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;I)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->equals(Ljava/lang/Object;)Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->equals(Ljava/lang/Object;)Z\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getCategories()Ljava/util/List;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getCategories()Ljava/util/List;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$Dialog;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getHasActiveFilters()Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getHasActiveFilters()Z\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getLibrary()Ljava/util/Map;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getLibrary()Ljava/util/Map;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSearchQuery()Ljava/lang/String;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSearchQuery()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelection()Ljava/util/List;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelection()Ljava/util/List;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelectionMode()Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getSelectionMode()Z\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getShowCategoryTabs()Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getShowCategoryTabs()Z\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getToolbarTitle(ILjava/lang/String;Ljava/lang/String;)Leu/kanade/presentation/library/components/LibraryToolbarTitle;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->getToolbarTitle(ILjava/lang/String;Ljava/lang/String;)Leu/kanade/presentation/library/components/LibraryToolbarTitle;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLibraryEmpty()Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLibraryEmpty()Z\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLoading()Z\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;->isLoading()Z\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$isLibraryEmpty$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$State$libraryCount$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFn$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFn$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFn$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnBookmarked$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnBookmarked$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnBookmarked$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnCompleted$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnCompleted$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnCompleted$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnDownloaded$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnDownloaded$1;-><init>(Ltachiyomi/core/preference/TriState;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnDownloaded$1;-><init>(Ltachiyomi/core/preference/TriState;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnStarted$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnStarted$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnStarted$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnTracking$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnTracking$1;-><init>(ZZLjava/util/Map;Ljava/util/ArrayList;Ljava/util/ArrayList;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnTracking$1;-><init>(ZZLjava/util/Map;Ljava/util/ArrayList;Ljava/util/ArrayList;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnUnread$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnUnread$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applyFilters$filterFnUnread$1;-><init>(Ltachiyomi/core/preference/TriState;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$lambda$7$$inlined$thenComparator$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$lambda$7$$inlined$thenComparator$1;-><init>(Ljava/util/Comparator;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$lambda$7$$inlined$thenComparator$1;-><init>(Ljava/util/Comparator;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortAlphabetically$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortAlphabetically$1;-><init>(Ljava/text/Collator;Ljava/util/Locale;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortAlphabetically$1;-><init>(Ljava/text/Collator;Ljava/util/Locale;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortFn$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortFn$1;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function2;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$applySort$sortFn$1;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function2;)V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryFlow$libraryMangasFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;-><init>([Lkotlinx/coroutines/flow/Flow;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;-><init>([Lkotlinx/coroutines/flow/Flow;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;-><init>([Lkotlinx/coroutines/flow/Flow;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;-><init>([Lkotlinx/coroutines/flow/Flow;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$getLibraryItemPreferencesFlow$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$10;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$10;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$10;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$11;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$11;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$11;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$12;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$12;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$12;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$13;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$13;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$13;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$14;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$14;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$14;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$15;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$15;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$15;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$5;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$5;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$5;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$6;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$6;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$6;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$7;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$7;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$7;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$8;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$8;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$8;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$9;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$9;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryScreenModel$special$$inlined$get$9;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel;\nHSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel;-><init>(I)V\nLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$5;\nHSPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$5;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel$special$$inlined$get$5;-><init>()V\nLeu/kanade/tachiyomi/ui/library/LibraryTab;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;-><init>()V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/library/LibraryTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$Content$lambda$2(Landroidx/compose/runtime/State;)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;\nHPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$Content$lambda$2(Landroidx/compose/runtime/State;)Leu/kanade/tachiyomi/ui/library/LibraryScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getQueryEvent$p()Lkotlinx/coroutines/channels/Channel;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getQueryEvent$p()Lkotlinx/coroutines/channels/Channel;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getRequestSettingsSheetEvent$p()Lkotlinx/coroutines/channels/Channel;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab;->access$getRequestSettingsSheetEvent$p()Lkotlinx/coroutines/channels/Channel;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getKey()Ljava/lang/String;\nHPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getKey()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nHPLeu/kanade/tachiyomi/ui/library/LibraryTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$4;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$4;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$4;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$5;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$5;-><init>(Lkotlin/jvm/functions/Function1;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/State;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$5;-><init>(Lkotlin/jvm/functions/Function1;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/State;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$6$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$6$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$6$1;-><init>(Lkotlin/jvm/functions/Function1;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$7;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$7;-><init>(Lkotlinx/coroutines/CoroutineScope;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$7;-><init>(Lkotlinx/coroutines/CoroutineScope;Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/material3/SnackbarHostState;Landroid/content/Context;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$8;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$8;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$1$8;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$10;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$10;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$10;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;-><init>(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;-><init>(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$11$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;-><init>(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;-><init>(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$1$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$13$2$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryTab;I)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryTab;I)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Landroidx/compose/runtime/MutableState;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$2;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$2;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$3;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$4;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$4;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$4;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$6;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$6;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$2$6;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;-><init>(Landroidx/compose/material3/SnackbarHostState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;-><init>(Landroidx/compose/material3/SnackbarHostState;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lcafe/adriel/voyager/navigator/Navigator;Lkotlinx/coroutines/CoroutineScope;Landroid/content/Context;Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Lcafe/adriel/voyager/navigator/Navigator;Lkotlinx/coroutines/CoroutineScope;Landroid/content/Context;Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;)V\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4$1;-><init>(Landroidx/compose/ui/platform/UriHandler;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$4$1;-><init>(Landroidx/compose/ui/platform/UriHandler;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onClickRefresh$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onClickRefresh$1;-><init>(Landroid/content/Context;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/SnackbarHostState;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onClickRefresh$1;-><init>(Landroid/content/Context;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/SnackbarHostState;)V\nLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onDismissRequest$1;\nHSPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onDismissRequest$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nPLeu/kanade/tachiyomi/ui/library/LibraryTab$Content$onDismissRequest$1;-><init>(Leu/kanade/tachiyomi/ui/library/LibraryScreenModel;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$CheckForUpdates(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroidx/compose/runtime/Composer;I)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$CheckForUpdates(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$HandleOnNewIntent(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$HandleOnNewIntent(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getDownloadCache(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/tachiyomi/data/download/DownloadCache;\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getDownloadCache(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/tachiyomi/data/download/DownloadCache;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getPreferences(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/domain/base/BasePreferences;\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$getPreferences(Leu/kanade/tachiyomi/ui/main/MainActivity;)Leu/kanade/domain/base/BasePreferences;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$handleIntentAction(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Intent;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$handleIntentAction(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Intent;Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$setNavigator$p(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->access$setNavigator$p(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->getReady()Z\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->getReady()Z\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->onCreate(Landroid/os/Bundle;)V\nHPLeu/kanade/tachiyomi/ui/main/MainActivity;->onCreate(Landroid/os/Bundle;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity;->setReady()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity;->setReady()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;-><init>(Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;-><init>(Landroid/content/Context;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$CheckForUpdates$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$Companion;-><init>(I)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;-><init>(Landroidx/activity/ComponentActivity;Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;-><init>(Landroidx/activity/ComponentActivity;Leu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$$ExternalSyntheticLambda0;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$1$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$2;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$HandleOnNewIntent$1$2;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$5;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$5;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$5;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$6;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$6;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$get$6;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;ZZ)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$$inlined$setComposeContent$default$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;-><init>(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;JLkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;-><init>(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;JLkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$1$1$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;-><init>(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Landroid/content/Context;JZLkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;-><init>(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Landroid/content/Context;JZLkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$2$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;ZLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Landroid/content/Context;ZLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;ZLkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;ZLkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;-><init>(Leu/kanade/tachiyomi/ui/main/MainActivity;Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$2;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;-><init>(Lkotlinx/coroutines/flow/Flow;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;-><init>(Lkotlinx/coroutines/flow/Flow;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$1$3$4$invokeSuspend$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;-><init>(JLeu/kanade/tachiyomi/ui/main/MainActivity;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;-><init>(JLeu/kanade/tachiyomi/ui/main/MainActivity;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;->shouldKeepOnScreen()Z\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$onCreate$2;->shouldKeepOnScreen()Z\nLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;-><init>(Landroid/view/View;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;-><init>(Landroid/view/View;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;->onSplashScreenExit(Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1;->onSplashScreenExit(Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;I)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V\nHPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;-><init>(Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;-><init>(Landroidx/core/splashscreen/SplashScreenViewProvider;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationEnd(Landroid/animation/Animator;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationEnd(Landroid/animation/Animator;)V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationStart(Landroid/animation/Animator;)V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$setSplashScreenExitAnimation$1$onSplashScreenExit$lambda$4$$inlined$doOnEnd$1;->onAnimationStart(Landroid/animation/Animator;)V\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$1$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$2$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$3$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$4$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5$1;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$5$1;-><init>()V\nLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;-><init>()V\nPLeu/kanade/tachiyomi/ui/main/MainActivity$special$$inlined$injectLazy$6;-><init>()V\nLeu/kanade/tachiyomi/ui/more/DownloadQueueState;\nLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;\nHSPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;-><init>()V\nPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->equals(Ljava/lang/Object;)Z\nPLeu/kanade/tachiyomi/ui/more/DownloadQueueState$Stopped;->equals(Ljava/lang/Object;)Z\nLeu/kanade/tachiyomi/ui/more/MoreScreenModel;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;-><init>(I)V\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$get_state$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->access$get_state$p(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadQueueState()Lkotlinx/coroutines/flow/StateFlow;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadQueueState()Lkotlinx/coroutines/flow/StateFlow;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadedOnly()Z\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getDownloadedOnly()Z\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getIncognitoMode()Z\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel;->getIncognitoMode()Z\nLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/more/MoreScreenModel$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/ui/more/MoreTab;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/more/MoreTab;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab;-><init>()V\nPLeu/kanade/tachiyomi/ui/more/MoreTab;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/more/MoreTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab;->getKey()Ljava/lang/String;\nHPLeu/kanade/tachiyomi/ui/more/MoreTab;->getKey()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nHPLeu/kanade/tachiyomi/ui/more/MoreTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$1$1;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$10;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$10;-><init>(Leu/kanade/tachiyomi/ui/more/MoreTab;I)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$10;-><init>(Leu/kanade/tachiyomi/ui/more/MoreTab;I)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$2;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$2;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$2;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$3;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$3;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$3;-><init>(Leu/kanade/tachiyomi/ui/more/MoreScreenModel;)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$4;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$4;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$4;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$5;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$5;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$5;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$6;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$6;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$6;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$7;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$7;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$7;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$8;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/more/MoreTab$Content$9;\nHSPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$9;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/more/MoreTab$Content$9;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;\nHSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;\nHSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;-><init>()V\nPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen;-><init>(ZZ)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen;->Content(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/setting/SettingsScreen;->Content(Landroidx/compose/runtime/Composer;I)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Companion;-><init>()V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Companion;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;I)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$1$pop$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/setting/SettingsScreen$Content$3;-><init>(Leu/kanade/tachiyomi/ui/setting/SettingsScreen;I)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;-><init>(I)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadCache$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadCache;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getDownloadManager$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Leu/kanade/tachiyomi/data/download/DownloadManager;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getGetUpdates$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Ltachiyomi/domain/updates/interactor/GetUpdates;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getGetUpdates$p(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Ltachiyomi/domain/updates/interactor/GetUpdates;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$getMutableState(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$toUpdateItems(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Ljava/util/List;)Ljava/util/ArrayList;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->access$toUpdateItems(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Ljava/util/List;)Ljava/util/ArrayList;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getEvents()Lkotlinx/coroutines/flow/Flow;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getLastUpdated()J\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getLastUpdated()J\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getSnackbarHostState()Landroidx/compose/material3/SnackbarHostState;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->getSnackbarHostState()Landroidx/compose/material3/SnackbarHostState;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->resetNewUpdatesCount()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;->resetNewUpdatesCount()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$2;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$1;-><init>(Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$2;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$2$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog$DeleteConfirmation;\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;-><init>(I)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;-><init>(I)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;-><init>(ZLjava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;-><init>(ZLjava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Ljava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog$DeleteConfirmation;I)Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->copy$default(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;Ljava/util/List;Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog$DeleteConfirmation;I)Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->equals(Ljava/lang/Object;)Z\nHPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->equals(Ljava/lang/Object;)Z\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getDialog()Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$Dialog;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getItems()Ljava/util/List;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getItems()Ljava/util/List;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelected()Ljava/util/ArrayList;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelected()Ljava/util/ArrayList;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelectionMode()Z\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->getSelectionMode()Z\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->isLoading()Z\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$State;->isLoading()Z\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$2;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$2;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$2;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$3;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$3;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$3;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$4;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$4;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$4;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$5;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$5;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$5;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$6;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$6;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$6;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$7;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$7;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$7;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$8;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$8;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$8;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$9;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$9;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesScreenModel$special$$inlined$get$9;-><init>()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;-><clinit>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;-><clinit>()V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;-><init>()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;-><init>()V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->Content(Landroidx/compose/runtime/Composer;I)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getKey()Ljava/lang/String;\nHPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getKey()Ljava/lang/String;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nHPLeu/kanade/tachiyomi/ui/updates/UpdatesTab;->getOptions(Landroidx/compose/runtime/Composer;)Lcafe/adriel/voyager/navigator/tab/TabOptions;\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$1;-><init>(Lcafe/adriel/voyager/navigator/Navigator;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$10;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$10;-><init>(Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$10;-><init>(Landroid/content/Context;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$12$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;-><init>(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;-><init>(Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$13$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;-><init>(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;-><init>(Landroid/content/Context;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$14;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;->dispose()V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$15$invoke$$inlined$onDispose$1;->dispose()V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$16;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$16;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesTab;I)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$16;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesTab;I)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$2;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$2;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$3;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$3;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$3;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$4;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$4;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$4;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$5;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$5;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$5;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$6;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$6;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$6;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$7;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$7;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$7;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$8;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$8;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$8;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$9;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$9;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$9;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$onDismissDialog$1;\nHSPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$onDismissDialog$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nPLeu/kanade/tachiyomi/ui/updates/UpdatesTab$Content$onDismissDialog$1;-><init>(Leu/kanade/tachiyomi/ui/updates/UpdatesScreenModel;)V\nLeu/kanade/tachiyomi/util/storage/DiskUtil;\nHSPLeu/kanade/tachiyomi/util/storage/DiskUtil;-><clinit>()V\nPLeu/kanade/tachiyomi/util/storage/DiskUtil;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/storage/DiskUtil;-><init>()V\nPLeu/kanade/tachiyomi/util/storage/DiskUtil;-><init>()V\nHSPLeu/kanade/tachiyomi/util/storage/DiskUtil;->createNoMediaFile(Lcom/hippo/unifile/UniFile;Landroid/content/Context;)V\nPLeu/kanade/tachiyomi/util/storage/DiskUtil;->createNoMediaFile(Lcom/hippo/unifile/UniFile;Landroid/content/Context;)V\nLeu/kanade/tachiyomi/util/system/ContextExtensionsKt;\nHSPLeu/kanade/tachiyomi/util/system/ContextExtensionsKt;->isInstalledFromFDroid(Landroid/content/Context;)Z\nHPLeu/kanade/tachiyomi/util/system/ContextExtensionsKt;->isInstalledFromFDroid(Landroid/content/Context;)Z\nLeu/kanade/tachiyomi/util/system/DensityExtensionsKt;\nHSPLeu/kanade/tachiyomi/util/system/DensityExtensionsKt;->getDpToPx(I)I\nPLeu/kanade/tachiyomi/util/system/DensityExtensionsKt;->getDpToPx(I)I\nLeu/kanade/tachiyomi/util/system/DeviceUtil;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil;-><init>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil;->isSamsung()Z\nPLeu/kanade/tachiyomi/util/system/DeviceUtil;->isSamsung()Z\nLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$isMiui$2;-><init>()V\nLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;-><init>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$isSamsung$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$miuiMajorVersion$2;-><init>()V\nLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtil$oneUiVersion$2;-><init>()V\nLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;->isDynamicColorAvailable(Leu/kanade/tachiyomi/util/system/DeviceUtil;)Z\nPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt;->isDynamicColorAvailable(Leu/kanade/tachiyomi/util/system/DeviceUtil;)Z\nLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;-><init>()V\nHSPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->invoke()Ljava/lang/Object;\nPLeu/kanade/tachiyomi/util/system/DeviceUtilExtensionsKt$isDynamicColorAvailable$2;->invoke()Ljava/lang/Object;\nLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt;\nHSPLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt;->prepareTabletUiContext(Landroid/content/Context;)Landroid/content/Context;\nPLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt;->prepareTabletUiContext(Landroid/content/Context;)Landroid/content/Context;\nLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt$prepareTabletUiContext$$inlined$get$1;\nHSPLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt$prepareTabletUiContext$$inlined$get$1;-><init>()V\nPLeu/kanade/tachiyomi/util/system/DisplayExtensionsKt$prepareTabletUiContext$$inlined$get$1;-><init>()V\nLeu/kanade/tachiyomi/util/system/InternalResourceHelper;\nHSPLeu/kanade/tachiyomi/util/system/InternalResourceHelper;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/InternalResourceHelper;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/InternalResourceHelper;-><init>()V\nPLeu/kanade/tachiyomi/util/system/InternalResourceHelper;-><init>()V\nLeu/kanade/tachiyomi/util/system/LocaleHelper;\nHSPLeu/kanade/tachiyomi/util/system/LocaleHelper;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/LocaleHelper;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/LocaleHelper;-><init>()V\nPLeu/kanade/tachiyomi/util/system/LocaleHelper;-><init>()V\nLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;\nHSPLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;-><clinit>()V\nPLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;-><clinit>()V\nHSPLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;-><init>()V\nPLeu/kanade/tachiyomi/util/system/LocaleHelper$comparator$1;-><init>()V\nLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;\nHSPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannel(Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelCompat;\nPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannel(Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelCompat;\nHSPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannelGroup(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelGroupCompat;\nPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->buildNotificationChannelGroup(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Landroidx/core/app/NotificationChannelGroupCompat;\nHSPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->cancelNotification(Landroid/content/Context;I)V\nPLeu/kanade/tachiyomi/util/system/NotificationExtensionsKt;->cancelNotification(Landroid/content/Context;I)V\nLeu/kanade/tachiyomi/util/system/WorkManagerExtensionsKt;\nHSPLeu/kanade/tachiyomi/util/system/WorkManagerExtensionsKt;->getWorkManager(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl;\nPLeu/kanade/tachiyomi/util/system/WorkManagerExtensionsKt;->getWorkManager(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl;\nLeu/kanade/tachiyomi/util/view/WindowExtensionsKt;\nLio/requery/android/database/AbstractCursor;\nHSPLio/requery/android/database/AbstractCursor;-><init>()V\nPLio/requery/android/database/AbstractCursor;-><init>()V\nHSPLio/requery/android/database/AbstractCursor;->checkPosition()V\nPLio/requery/android/database/AbstractCursor;->checkPosition()V\nHSPLio/requery/android/database/AbstractCursor;->close()V\nPLio/requery/android/database/AbstractCursor;->close()V\nHSPLio/requery/android/database/AbstractCursor;->finalize()V\nPLio/requery/android/database/AbstractCursor;->finalize()V\nHSPLio/requery/android/database/AbstractCursor;->moveToFirst()Z\nPLio/requery/android/database/AbstractCursor;->moveToFirst()Z\nHSPLio/requery/android/database/AbstractCursor;->moveToNext()Z\nPLio/requery/android/database/AbstractCursor;->moveToNext()Z\nHSPLio/requery/android/database/AbstractCursor;->moveToPosition(I)Z\nPLio/requery/android/database/AbstractCursor;->moveToPosition(I)Z\nHSPLio/requery/android/database/AbstractCursor;->onDeactivateOrClose()V\nPLio/requery/android/database/AbstractCursor;->onDeactivateOrClose()V\nLio/requery/android/database/AbstractWindowedCursor;\nHSPLio/requery/android/database/AbstractWindowedCursor;-><init>()V\nPLio/requery/android/database/AbstractWindowedCursor;-><init>()V\nHSPLio/requery/android/database/AbstractWindowedCursor;->checkPosition()V\nPLio/requery/android/database/AbstractWindowedCursor;->checkPosition()V\nHSPLio/requery/android/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V\nPLio/requery/android/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V\nHSPLio/requery/android/database/AbstractWindowedCursor;->closeWindow()V\nPLio/requery/android/database/AbstractWindowedCursor;->closeWindow()V\nHSPLio/requery/android/database/AbstractWindowedCursor;->getLong(I)J\nPLio/requery/android/database/AbstractWindowedCursor;->getLong(I)J\nHSPLio/requery/android/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String;\nPLio/requery/android/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String;\nHSPLio/requery/android/database/AbstractWindowedCursor;->isNull(I)Z\nPLio/requery/android/database/AbstractWindowedCursor;->isNull(I)Z\nHSPLio/requery/android/database/AbstractWindowedCursor;->onDeactivateOrClose()V\nPLio/requery/android/database/AbstractWindowedCursor;->onDeactivateOrClose()V\nLio/requery/android/database/CursorWindow;\nHSPLio/requery/android/database/CursorWindow;-><init>(Ljava/lang/String;)V\nPLio/requery/android/database/CursorWindow;-><init>(Ljava/lang/String;)V\nHSPLio/requery/android/database/CursorWindow;-><init>(Ljava/lang/String;I)V\nPLio/requery/android/database/CursorWindow;-><init>(Ljava/lang/String;I)V\nHSPLio/requery/android/database/CursorWindow;->dispose()V\nPLio/requery/android/database/CursorWindow;->dispose()V\nHSPLio/requery/android/database/CursorWindow;->finalize()V\nPLio/requery/android/database/CursorWindow;->finalize()V\nHSPLio/requery/android/database/CursorWindow;->getLong(II)J\nPLio/requery/android/database/CursorWindow;->getLong(II)J\nHSPLio/requery/android/database/CursorWindow;->getNumRows()I\nPLio/requery/android/database/CursorWindow;->getNumRows()I\nHSPLio/requery/android/database/CursorWindow;->getStartPosition()I\nPLio/requery/android/database/CursorWindow;->getStartPosition()I\nHSPLio/requery/android/database/CursorWindow;->getString(II)Ljava/lang/String;\nPLio/requery/android/database/CursorWindow;->getString(II)Ljava/lang/String;\nHSPLio/requery/android/database/CursorWindow;->getType(II)I\nPLio/requery/android/database/CursorWindow;->getType(II)I\nHSPLio/requery/android/database/CursorWindow;->onAllReferencesReleased()V\nPLio/requery/android/database/CursorWindow;->onAllReferencesReleased()V\nHSPLio/requery/android/database/CursorWindow;->setStartPosition(I)V\nPLio/requery/android/database/CursorWindow;->setStartPosition(I)V\nLio/requery/android/database/DatabaseErrorHandler;\nLio/requery/android/database/sqlite/CloseGuard;\nHSPLio/requery/android/database/sqlite/CloseGuard;-><clinit>()V\nPLio/requery/android/database/sqlite/CloseGuard;-><clinit>()V\nHSPLio/requery/android/database/sqlite/CloseGuard;-><init>()V\nPLio/requery/android/database/sqlite/CloseGuard;-><init>()V\nHSPLio/requery/android/database/sqlite/CloseGuard;->get()Lio/requery/android/database/sqlite/CloseGuard;\nPLio/requery/android/database/sqlite/CloseGuard;->get()Lio/requery/android/database/sqlite/CloseGuard;\nHSPLio/requery/android/database/sqlite/CloseGuard;->open(Ljava/lang/String;)V\nPLio/requery/android/database/sqlite/CloseGuard;->open(Ljava/lang/String;)V\nLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;\nHSPLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;-><init>()V\nPLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;-><init>()V\nHSPLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;-><init>(I)V\nPLio/requery/android/database/sqlite/CloseGuard$DefaultReporter;-><init>(I)V\nLio/requery/android/database/sqlite/CloseGuard$Reporter;\nLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;-><init>()V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;-><init>()V\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;-><init>(Ljava/lang/Iterable;)V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;-><init>(Ljava/lang/Iterable;)V\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper;\nLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackDatabaseErrorHandler;\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackDatabaseErrorHandler;-><init>(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackDatabaseErrorHandler;-><init>(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)V\nLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Ljava/lang/Iterable;)V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Ljava/lang/Iterable;)V\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onConfigure(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onConfigure(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onCreate(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onCreate(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nHSPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onOpen(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nPLio/requery/android/database/sqlite/RequerySQLiteOpenHelperFactory$CallbackSQLiteOpenHelper;->onOpen(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nLio/requery/android/database/sqlite/SQLiteClosable;\nHSPLio/requery/android/database/sqlite/SQLiteClosable;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteClosable;-><init>()V\nHSPLio/requery/android/database/sqlite/SQLiteClosable;->acquireReference()V\nPLio/requery/android/database/sqlite/SQLiteClosable;->acquireReference()V\nHSPLio/requery/android/database/sqlite/SQLiteClosable;->close()V\nPLio/requery/android/database/sqlite/SQLiteClosable;->close()V\nHSPLio/requery/android/database/sqlite/SQLiteClosable;->releaseReference()V\nPLio/requery/android/database/sqlite/SQLiteClosable;->releaseReference()V\nLio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnection;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteConnection;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;-><init>(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)V\nPLio/requery/android/database/sqlite/SQLiteConnection;-><init>(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;\nPLio/requery/android/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->bindArguments(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->bindArguments(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)I\nPLio/requery/android/database/sqlite/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)I\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZLandroidx/core/os/CancellationSignal;)I\nPLio/requery/android/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZLandroidx/core/os/CancellationSignal;)I\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)J\nPLio/requery/android/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)J\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->getTypeOfObject(Ljava/lang/Object;)I\nPLio/requery/android/database/sqlite/SQLiteConnection;->getTypeOfObject(Ljava/lang/Object;)I\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->hasCodec()Z\nPLio/requery/android/database/sqlite/SQLiteConnection;->hasCodec()Z\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->isCacheable(I)Z\nPLio/requery/android/database/sqlite/SQLiteConnection;->isCacheable(I)Z\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z\nPLio/requery/android/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;\nPLio/requery/android/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->open()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->open()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->open(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)Lio/requery/android/database/sqlite/SQLiteConnection;\nPLio/requery/android/database/sqlite/SQLiteConnection;->open(Lio/requery/android/database/sqlite/SQLiteConnectionPool;Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;IZ)Lio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->releasePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->releasePreparedStatement(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setJournalSizeLimit()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setJournalSizeLimit()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setLocaleFromConfiguration()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setLocaleFromConfiguration()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setPageSize()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setPageSize()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->setWalModeFromConfiguration()V\nPLio/requery/android/database/sqlite/SQLiteConnection;->setWalModeFromConfiguration()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection;->throwIfStatementForbidden(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nPLio/requery/android/database/sqlite/SQLiteConnection;->throwIfStatementForbidden(Lio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;)V\nLio/requery/android/database/sqlite/SQLiteConnection$Operation;\nHSPLio/requery/android/database/sqlite/SQLiteConnection$Operation;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteConnection$Operation;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection$Operation;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteConnection$Operation;-><init>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection$Operation;-><init>(I)V\nPLio/requery/android/database/sqlite/SQLiteConnection$Operation;-><init>(I)V\nLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;-><init>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;-><init>(I)V\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;-><init>(I)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->getOperationLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection$Operation;\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->getOperationLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection$Operation;\nHSPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I\nPLio/requery/android/database/sqlite/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I\nLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;\nHSPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;-><init>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;-><init>(I)V\nPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatement;-><init>(I)V\nLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatementCache;\nHSPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatementCache;-><init>(Lio/requery/android/database/sqlite/SQLiteConnection;I)V\nPLio/requery/android/database/sqlite/SQLiteConnection$PreparedStatementCache;-><init>(Lio/requery/android/database/sqlite/SQLiteConnection;I)V\nLio/requery/android/database/sqlite/SQLiteConnectionPool;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;I)V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;I)V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->getPriority(I)I\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->getPriority(I)I\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->obtainConnectionWaiterLocked(Ljava/lang/Thread;JIZLjava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->obtainConnectionWaiterLocked(Ljava/lang/Thread;JIZLjava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->open()V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->open()V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->open(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)Lio/requery/android/database/sqlite/SQLiteConnectionPool;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->open(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)Lio/requery/android/database/sqlite/SQLiteConnectionPool;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->openConnectionLocked(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Z)Lio/requery/android/database/sqlite/SQLiteConnection;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->openConnectionLocked(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Z)Lio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Lio/requery/android/database/sqlite/SQLiteConnection;Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Lio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->releaseConnection(Lio/requery/android/database/sqlite/SQLiteConnection;)V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->releaseConnection(Lio/requery/android/database/sqlite/SQLiteConnection;)V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnection;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)Lio/requery/android/database/sqlite/SQLiteConnection;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V\nLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->$values()[Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;\nPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;->$values()[Lio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;-><init>(Ljava/lang/String;I)V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;-><init>(Ljava/lang/String;I)V\nLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>()V\nHSPLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>(I)V\nPLio/requery/android/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;-><init>(I)V\nLio/requery/android/database/sqlite/SQLiteCursor;\nHSPLio/requery/android/database/sqlite/SQLiteCursor;-><init>(Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)V\nPLio/requery/android/database/sqlite/SQLiteCursor;-><init>(Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)V\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->close()V\nPLio/requery/android/database/sqlite/SQLiteCursor;->close()V\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->cursorPickFillWindowStartPosition(II)I\nPLio/requery/android/database/sqlite/SQLiteCursor;->cursorPickFillWindowStartPosition(II)I\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->fillWindow(I)V\nPLio/requery/android/database/sqlite/SQLiteCursor;->fillWindow(I)V\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->finalize()V\nPLio/requery/android/database/sqlite/SQLiteCursor;->finalize()V\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->getCount()I\nPLio/requery/android/database/sqlite/SQLiteCursor;->getCount()I\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase;\nPLio/requery/android/database/sqlite/SQLiteCursor;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase;\nHSPLio/requery/android/database/sqlite/SQLiteCursor;->onMove(II)Z\nPLio/requery/android/database/sqlite/SQLiteCursor;->onMove(II)Z\nLio/requery/android/database/sqlite/SQLiteCursorDriver;\nLio/requery/android/database/sqlite/SQLiteCustomFunction;\nLio/requery/android/database/sqlite/SQLiteDatabase;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->-$$Nest$fgetmCursorFactory(Lio/requery/android/database/sqlite/SQLiteDatabase;)Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->-$$Nest$fgetmCursorFactory(Lio/requery/android/database/sqlite/SQLiteDatabase;)Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)V\nPLio/requery/android/database/sqlite/SQLiteDatabase;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;I)V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;I)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteStatement;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Lio/requery/android/database/sqlite/SQLiteStatement;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->createSession()Lio/requery/android/database/sqlite/SQLiteSession;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->createSession()Lio/requery/android/database/sqlite/SQLiteSession;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->endTransaction()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->endTransaction()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->ensureFile(Ljava/lang/String;)V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->ensureFile(Ljava/lang/String;)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I\nPLio/requery/android/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I\nPLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadSession()Lio/requery/android/database/sqlite/SQLiteSession;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->getThreadSession()Lio/requery/android/database/sqlite/SQLiteSession;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->getVersion()I\nPLio/requery/android/database/sqlite/SQLiteDatabase;->getVersion()I\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->hasCodec()Z\nPLio/requery/android/database/sqlite/SQLiteDatabase;->hasCodec()Z\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->isMainThread()Z\nPLio/requery/android/database/sqlite/SQLiteDatabase;->isMainThread()Z\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnly()Z\nPLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnly()Z\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z\nPLio/requery/android/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Lio/requery/android/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J\nPLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Lio/requery/android/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Ljava/lang/String;[Ljava/lang/String;)J\nPLio/requery/android/database/sqlite/SQLiteDatabase;->longForQuery(Ljava/lang/String;[Ljava/lang/String;)J\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->open()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->open()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->openDatabase(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)Lio/requery/android/database/sqlite/SQLiteDatabase;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->openDatabase(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Lio/requery/android/database/DatabaseErrorHandler;)Lio/requery/android/database/sqlite/SQLiteDatabase;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->openInner()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->openInner()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor;\nPLio/requery/android/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)Landroid/database/Cursor;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->setVersion(I)V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->setVersion(I)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V\nPLio/requery/android/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V\nLio/requery/android/database/sqlite/SQLiteDatabase$1;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase$1;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nPLio/requery/android/database/sqlite/SQLiteDatabase$1;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Lio/requery/android/database/sqlite/SQLiteSession;\nPLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Lio/requery/android/database/sqlite/SQLiteSession;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Ljava/lang/Object;\nPLio/requery/android/database/sqlite/SQLiteDatabase$1;->initialValue()Ljava/lang/Object;\nLio/requery/android/database/sqlite/SQLiteDatabase$4;\nHSPLio/requery/android/database/sqlite/SQLiteDatabase$4;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;)V\nPLio/requery/android/database/sqlite/SQLiteDatabase$4;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabase$4;->newCursor(Lio/requery/android/database/sqlite/SQLiteDatabase;Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;\nPLio/requery/android/database/sqlite/SQLiteDatabase$4;->newCursor(Lio/requery/android/database/sqlite/SQLiteDatabase;Lio/requery/android/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;\nLio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;\nLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;\nHSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V\nPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;-><init>(Ljava/lang/String;I)V\nPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;-><init>(Ljava/lang/String;I)V\nHSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->isInMemoryDb()Z\nPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->isInMemoryDb()Z\nHSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V\nPLio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;)V\nLio/requery/android/database/sqlite/SQLiteDebug;\nHSPLio/requery/android/database/sqlite/SQLiteDebug;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteDebug;-><clinit>()V\nLio/requery/android/database/sqlite/SQLiteDebug$PagerStats;\nLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;\nHSPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->cursorClosed()V\nPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->cursorClosed()V\nHSPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->query(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor;\nPLio/requery/android/database/sqlite/SQLiteDirectCursorDriver;->query(Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor;\nLio/requery/android/database/sqlite/SQLiteFunction;\nLio/requery/android/database/sqlite/SQLiteGlobal;\nHSPLio/requery/android/database/sqlite/SQLiteGlobal;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteGlobal;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultPageSize()I\nPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultPageSize()I\nHSPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteGlobal;->getJournalSizeLimit()I\nPLio/requery/android/database/sqlite/SQLiteGlobal;->getJournalSizeLimit()I\nHSPLio/requery/android/database/sqlite/SQLiteGlobal;->getWALAutoCheckpoint()I\nPLio/requery/android/database/sqlite/SQLiteGlobal;->getWALAutoCheckpoint()I\nLio/requery/android/database/sqlite/SQLiteOpenHelper;\nHSPLio/requery/android/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;ILio/requery/android/database/DatabaseErrorHandler;)V\nPLio/requery/android/database/sqlite/SQLiteOpenHelper;-><init>(Landroid/content/Context;Ljava/lang/String;Lio/requery/android/database/sqlite/SQLiteDatabase$CursorFactory;ILio/requery/android/database/DatabaseErrorHandler;)V\nHSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;\nPLio/requery/android/database/sqlite/SQLiteOpenHelper;->createConfiguration(Ljava/lang/String;I)Lio/requery/android/database/sqlite/SQLiteDatabaseConfiguration;\nHSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getDatabaseLocked(Z)Lio/requery/android/database/sqlite/SQLiteDatabase;\nPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getDatabaseLocked(Z)Lio/requery/android/database/sqlite/SQLiteDatabase;\nHSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase;\nPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase;\nHSPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase;\nPLio/requery/android/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase;\nLio/requery/android/database/sqlite/SQLiteProgram;\nHSPLio/requery/android/database/sqlite/SQLiteProgram;-><clinit>()V\nPLio/requery/android/database/sqlite/SQLiteProgram;-><clinit>()V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteProgram;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->bind(ILjava/lang/Object;)V\nPLio/requery/android/database/sqlite/SQLiteProgram;->bind(ILjava/lang/Object;)V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V\nPLio/requery/android/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->bindLong(IJ)V\nPLio/requery/android/database/sqlite/SQLiteProgram;->bindLong(IJ)V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->bindString(ILjava/lang/String;)V\nPLio/requery/android/database/sqlite/SQLiteProgram;->bindString(ILjava/lang/String;)V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->clearBindings()V\nPLio/requery/android/database/sqlite/SQLiteProgram;->clearBindings()V\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->getBindArgs()[Ljava/lang/Object;\nPLio/requery/android/database/sqlite/SQLiteProgram;->getBindArgs()[Ljava/lang/Object;\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->getColumnNames()[Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteProgram;->getColumnNames()[Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->getConnectionFlags()I\nPLio/requery/android/database/sqlite/SQLiteProgram;->getConnectionFlags()I\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase;\nPLio/requery/android/database/sqlite/SQLiteProgram;->getDatabase()Lio/requery/android/database/sqlite/SQLiteDatabase;\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->getSession()Lio/requery/android/database/sqlite/SQLiteSession;\nPLio/requery/android/database/sqlite/SQLiteProgram;->getSession()Lio/requery/android/database/sqlite/SQLiteSession;\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String;\nPLio/requery/android/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String;\nHSPLio/requery/android/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V\nPLio/requery/android/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V\nLio/requery/android/database/sqlite/SQLiteQuery;\nHSPLio/requery/android/database/sqlite/SQLiteQuery;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteQuery;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteQuery;->fillWindow(Lio/requery/android/database/CursorWindow;IIZ)I\nPLio/requery/android/database/sqlite/SQLiteQuery;->fillWindow(Lio/requery/android/database/CursorWindow;IIZ)I\nLio/requery/android/database/sqlite/SQLiteSession;\nHSPLio/requery/android/database/sqlite/SQLiteSession;-><init>(Lio/requery/android/database/sqlite/SQLiteConnectionPool;)V\nPLio/requery/android/database/sqlite/SQLiteSession;-><init>(Lio/requery/android/database/sqlite/SQLiteConnectionPool;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->endTransaction(Landroidx/core/os/CancellationSignal;)V\nPLio/requery/android/database/sqlite/SQLiteSession;->endTransaction(Landroidx/core/os/CancellationSignal;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroidx/core/os/CancellationSignal;Z)V\nPLio/requery/android/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroidx/core/os/CancellationSignal;Z)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)I\nPLio/requery/android/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)I\nHSPLio/requery/android/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZILandroidx/core/os/CancellationSignal;)I\nPLio/requery/android/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Lio/requery/android/database/CursorWindow;IIZILandroidx/core/os/CancellationSignal;)I\nHSPLio/requery/android/database/sqlite/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)J\nPLio/requery/android/database/sqlite/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)J\nHSPLio/requery/android/database/sqlite/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)Z\nPLio/requery/android/database/sqlite/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroidx/core/os/CancellationSignal;)Z\nHSPLio/requery/android/database/sqlite/SQLiteSession;->obtainTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;)Lio/requery/android/database/sqlite/SQLiteSession$Transaction;\nPLio/requery/android/database/sqlite/SQLiteSession;->obtainTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;)Lio/requery/android/database/sqlite/SQLiteSession$Transaction;\nHSPLio/requery/android/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V\nPLio/requery/android/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroidx/core/os/CancellationSignal;Lio/requery/android/database/sqlite/SQLiteStatementInfo;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->recycleTransaction(Lio/requery/android/database/sqlite/SQLiteSession$Transaction;)V\nPLio/requery/android/database/sqlite/SQLiteSession;->recycleTransaction(Lio/requery/android/database/sqlite/SQLiteSession$Transaction;)V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->releaseConnection()V\nPLio/requery/android/database/sqlite/SQLiteSession;->releaseConnection()V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->setTransactionSuccessful()V\nPLio/requery/android/database/sqlite/SQLiteSession;->setTransactionSuccessful()V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->throwIfNoTransaction()V\nPLio/requery/android/database/sqlite/SQLiteSession;->throwIfNoTransaction()V\nHSPLio/requery/android/database/sqlite/SQLiteSession;->throwIfTransactionMarkedSuccessful()V\nPLio/requery/android/database/sqlite/SQLiteSession;->throwIfTransactionMarkedSuccessful()V\nLio/requery/android/database/sqlite/SQLiteSession$Transaction;\nHSPLio/requery/android/database/sqlite/SQLiteSession$Transaction;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteSession$Transaction;-><init>()V\nHSPLio/requery/android/database/sqlite/SQLiteSession$Transaction;-><init>(I)V\nPLio/requery/android/database/sqlite/SQLiteSession$Transaction;-><init>(I)V\nLio/requery/android/database/sqlite/SQLiteStatement;\nHSPLio/requery/android/database/sqlite/SQLiteStatement;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V\nPLio/requery/android/database/sqlite/SQLiteStatement;-><init>(Lio/requery/android/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V\nHSPLio/requery/android/database/sqlite/SQLiteStatement;->executeUpdateDelete()I\nPLio/requery/android/database/sqlite/SQLiteStatement;->executeUpdateDelete()I\nHSPLio/requery/android/database/sqlite/SQLiteStatement;->simpleQueryForLong()J\nPLio/requery/android/database/sqlite/SQLiteStatement;->simpleQueryForLong()J\nLio/requery/android/database/sqlite/SQLiteStatementInfo;\nHSPLio/requery/android/database/sqlite/SQLiteStatementInfo;-><init>()V\nPLio/requery/android/database/sqlite/SQLiteStatementInfo;-><init>()V\nLio/requery/android/database/sqlite/SQLiteStatementType;\nHSPLio/requery/android/database/sqlite/SQLiteStatementType;->getSqlStatementType(Ljava/lang/String;)I\nHPLio/requery/android/database/sqlite/SQLiteStatementType;->getSqlStatementType(Ljava/lang/String;)I\nHSPLio/requery/android/database/sqlite/SQLiteStatementType;->stripLeadingSqlComments(Ljava/lang/String;)Ljava/lang/String;\nHPLio/requery/android/database/sqlite/SQLiteStatementType;->stripLeadingSqlComments(Ljava/lang/String;)Ljava/lang/String;\nLj$/time/Duration;\nHSPLj$/time/Duration;-><clinit>()V\nPLj$/time/Duration;-><clinit>()V\nHSPLj$/time/Duration;-><init>(JI)V\nPLj$/time/Duration;-><init>(JI)V\nHSPLj$/time/Duration;->l(JI)Lj$/time/Duration;\nPLj$/time/Duration;->l(JI)Lj$/time/Duration;\nHSPLj$/time/Duration;->ofSeconds(JJ)Lj$/time/Duration;\nPLj$/time/Duration;->ofSeconds(JJ)Lj$/time/Duration;\nHSPLj$/time/Duration;->toMillis()J\nPLj$/time/Duration;->toMillis()J\nLj$/util/DesugarTimeZone;\nHSPLj$/util/DesugarTimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;\nPLj$/util/DesugarTimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;\nLkotlin/ExceptionsKt;\nLkotlin/ExceptionsKt__ExceptionsKt;\nLkotlin/Function;\nLkotlin/InitializedLazyImpl;\nHSPLkotlin/InitializedLazyImpl;-><init>(Ljava/lang/Object;)V\nPLkotlin/InitializedLazyImpl;-><init>(Ljava/lang/Object;)V\nLkotlin/KotlinNothingValueException;\nLkotlin/KotlinVersion;\nHSPLkotlin/KotlinVersion;-><clinit>()V\nPLkotlin/KotlinVersion;-><clinit>()V\nHSPLkotlin/KotlinVersion;-><init>(III)V\nPLkotlin/KotlinVersion;-><init>(III)V\nHSPLkotlin/KotlinVersion;->compareTo(Lkotlin/KotlinVersion;)I\nPLkotlin/KotlinVersion;->compareTo(Lkotlin/KotlinVersion;)I\nLkotlin/KotlinVersion$Companion;\nHSPLkotlin/KotlinVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/KotlinVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/KotlinVersionCurrentValue;\nHSPLkotlin/KotlinVersionCurrentValue;-><clinit>()V\nPLkotlin/KotlinVersionCurrentValue;-><clinit>()V\nHSPLkotlin/KotlinVersionCurrentValue;-><init>()V\nPLkotlin/KotlinVersionCurrentValue;-><init>()V\nHSPLkotlin/KotlinVersionCurrentValue;->get()Lkotlin/KotlinVersion;\nPLkotlin/KotlinVersionCurrentValue;->get()Lkotlin/KotlinVersion;\nLkotlin/Lazy;\nLkotlin/LazyKt;\nLkotlin/LazyKt__LazyJVMKt;\nHSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;\nHPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;\nHSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;\nHPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;\nLkotlin/LazyKt__LazyJVMKt$WhenMappings;\nHSPLkotlin/LazyKt__LazyJVMKt$WhenMappings;-><clinit>()V\nPLkotlin/LazyKt__LazyJVMKt$WhenMappings;-><clinit>()V\nLkotlin/LazyKt__LazyKt;\nLkotlin/LazyThreadSafetyMode;\nHSPLkotlin/LazyThreadSafetyMode;-><clinit>()V\nPLkotlin/LazyThreadSafetyMode;-><clinit>()V\nHSPLkotlin/LazyThreadSafetyMode;-><init>(Ljava/lang/String;I)V\nPLkotlin/LazyThreadSafetyMode;-><init>(Ljava/lang/String;I)V\nHSPLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode;\nPLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode;\nLkotlin/NoWhenBranchMatchedException;\nLkotlin/Pair;\nHSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLkotlin/Pair;->component1()Ljava/lang/Object;\nPLkotlin/Pair;->component1()Ljava/lang/Object;\nHSPLkotlin/Pair;->component2()Ljava/lang/Object;\nPLkotlin/Pair;->component2()Ljava/lang/Object;\nHSPLkotlin/Pair;->getFirst()Ljava/lang/Object;\nPLkotlin/Pair;->getFirst()Ljava/lang/Object;\nHSPLkotlin/Pair;->getSecond()Ljava/lang/Object;\nPLkotlin/Pair;->getSecond()Ljava/lang/Object;\nLkotlin/Result;\nHSPLkotlin/Result;-><clinit>()V\nPLkotlin/Result;-><clinit>()V\nHSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;\nHPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;\nLkotlin/Result$Companion;\nHSPLkotlin/Result$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/Result$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/Result$Failure;\nHSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V\nPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V\nLkotlin/ResultKt;\nHSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;\nHPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;\nHSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V\nHPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V\nLkotlin/SafePublicationLazyImpl;\nHSPLkotlin/SafePublicationLazyImpl;-><clinit>()V\nPLkotlin/SafePublicationLazyImpl;-><clinit>()V\nHSPLkotlin/SafePublicationLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V\nHPLkotlin/SafePublicationLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object;\nHPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object;\nLkotlin/SafePublicationLazyImpl$Companion;\nHSPLkotlin/SafePublicationLazyImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/SafePublicationLazyImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/SynchronizedLazyImpl;\nHSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V\nHPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V\nHSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;\nHPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;\nHSPLkotlin/SynchronizedLazyImpl;->isInitialized()Z\nPLkotlin/SynchronizedLazyImpl;->isInitialized()Z\nLkotlin/UByte;\nHSPLkotlin/UByte;-><clinit>()V\nPLkotlin/UByte;-><clinit>()V\nLkotlin/UByte$Companion;\nHSPLkotlin/UByte$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/UByte$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/UByteArray;\nLkotlin/UInt;\nHSPLkotlin/UInt;-><clinit>()V\nPLkotlin/UInt;-><clinit>()V\nLkotlin/UInt$Companion;\nHSPLkotlin/UInt$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/UInt$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/UIntArray;\nLkotlin/ULong;\nHSPLkotlin/ULong;-><clinit>()V\nPLkotlin/ULong;-><clinit>()V\nHSPLkotlin/ULong;->equals-impl0(JJ)Z\nHPLkotlin/ULong;->equals-impl0(JJ)Z\nLkotlin/ULong$Companion;\nHSPLkotlin/ULong$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/ULong$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/ULongArray;\nLkotlin/UNINITIALIZED_VALUE;\nHSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V\nPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V\nHSPLkotlin/UNINITIALIZED_VALUE;-><init>()V\nPLkotlin/UNINITIALIZED_VALUE;-><init>()V\nLkotlin/UShort;\nHSPLkotlin/UShort;-><clinit>()V\nPLkotlin/UShort;-><clinit>()V\nLkotlin/UShort$Companion;\nHSPLkotlin/UShort$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/UShort$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/UShortArray;\nLkotlin/UninitializedPropertyAccessException;\nLkotlin/Unit;\nHSPLkotlin/Unit;-><clinit>()V\nPLkotlin/Unit;-><clinit>()V\nHSPLkotlin/Unit;-><init>()V\nPLkotlin/Unit;-><init>()V\nLkotlin/UnsafeLazyImpl;\nHSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V\nLkotlin/UnsignedKt;\nHSPLkotlin/UnsignedKt;->ulongToDouble(J)D\nPLkotlin/UnsignedKt;->ulongToDouble(J)D\nLkotlin/collections/AbstractCollection;\nHSPLkotlin/collections/AbstractCollection;-><init>()V\nHPLkotlin/collections/AbstractCollection;-><init>()V\nHSPLkotlin/collections/AbstractCollection;->isEmpty()Z\nPLkotlin/collections/AbstractCollection;->isEmpty()Z\nHSPLkotlin/collections/AbstractCollection;->size()I\nHPLkotlin/collections/AbstractCollection;->size()I\nLkotlin/collections/AbstractList;\nHSPLkotlin/collections/AbstractList;-><clinit>()V\nPLkotlin/collections/AbstractList;-><clinit>()V\nHSPLkotlin/collections/AbstractList;-><init>()V\nPLkotlin/collections/AbstractList;-><init>()V\nHSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z\nHPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z\nLkotlin/collections/AbstractList$Companion;\nHSPLkotlin/collections/AbstractList$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/AbstractList$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/collections/AbstractList$Companion;->checkBoundsIndexes$kotlin_stdlib(III)V\nHPLkotlin/collections/AbstractList$Companion;->checkBoundsIndexes$kotlin_stdlib(III)V\nHSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V\nPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V\nHSPLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z\nHPLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z\nLkotlin/collections/AbstractMap;\nHSPLkotlin/collections/AbstractMap;-><clinit>()V\nPLkotlin/collections/AbstractMap;-><clinit>()V\nHSPLkotlin/collections/AbstractMap;-><init>()V\nHPLkotlin/collections/AbstractMap;-><init>()V\nHSPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z\nHPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z\nHSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;\nPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;\nHSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z\nHPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/collections/AbstractMap;->size()I\nHPLkotlin/collections/AbstractMap;->size()I\nLkotlin/collections/AbstractMap$Companion;\nHSPLkotlin/collections/AbstractMap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/AbstractMap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/collections/AbstractMutableList;\nHSPLkotlin/collections/AbstractMutableList;-><init>()V\nHPLkotlin/collections/AbstractMutableList;-><init>()V\nHSPLkotlin/collections/AbstractMutableList;->size()I\nHPLkotlin/collections/AbstractMutableList;->size()I\nLkotlin/collections/AbstractMutableMap;\nHSPLkotlin/collections/AbstractMutableMap;-><init>()V\nHPLkotlin/collections/AbstractMutableMap;-><init>()V\nHSPLkotlin/collections/AbstractMutableMap;->size()I\nPLkotlin/collections/AbstractMutableMap;->size()I\nLkotlin/collections/AbstractMutableSet;\nHSPLkotlin/collections/AbstractMutableSet;-><init>()V\nPLkotlin/collections/AbstractMutableSet;-><init>()V\nLkotlin/collections/AbstractSet;\nHSPLkotlin/collections/AbstractSet;-><clinit>()V\nPLkotlin/collections/AbstractSet;-><clinit>()V\nHSPLkotlin/collections/AbstractSet;-><init>()V\nPLkotlin/collections/AbstractSet;-><init>()V\nHSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z\nPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z\nLkotlin/collections/AbstractSet$Companion;\nHSPLkotlin/collections/AbstractSet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/AbstractSet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z\nPLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z\nLkotlin/collections/ArrayAsCollection;\nHSPLkotlin/collections/ArrayAsCollection;-><init>([Ljava/lang/Object;Z)V\nPLkotlin/collections/ArrayAsCollection;-><init>([Ljava/lang/Object;Z)V\nHSPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object;\nHPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object;\nLkotlin/collections/ArrayDeque;\nHSPLkotlin/collections/ArrayDeque;-><clinit>()V\nPLkotlin/collections/ArrayDeque;-><clinit>()V\nHSPLkotlin/collections/ArrayDeque;-><init>()V\nHPLkotlin/collections/ArrayDeque;-><init>()V\nHSPLkotlin/collections/ArrayDeque;->addFirst(Ljava/lang/Object;)V\nPLkotlin/collections/ArrayDeque;->addFirst(Ljava/lang/Object;)V\nHSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V\nHPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V\nHSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V\nHPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V\nHSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object;\nHPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object;\nHSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object;\nHPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object;\nHSPLkotlin/collections/ArrayDeque;->getSize()I\nHPLkotlin/collections/ArrayDeque;->getSize()I\nHSPLkotlin/collections/ArrayDeque;->incremented(I)I\nHPLkotlin/collections/ArrayDeque;->incremented(I)I\nHSPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I\nHPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I\nHSPLkotlin/collections/ArrayDeque;->isEmpty()Z\nHPLkotlin/collections/ArrayDeque;->isEmpty()Z\nHSPLkotlin/collections/ArrayDeque;->positiveMod(I)I\nHPLkotlin/collections/ArrayDeque;->positiveMod(I)I\nHSPLkotlin/collections/ArrayDeque;->remove(Ljava/lang/Object;)Z\nPLkotlin/collections/ArrayDeque;->remove(Ljava/lang/Object;)Z\nHSPLkotlin/collections/ArrayDeque;->removeAt(I)Ljava/lang/Object;\nHPLkotlin/collections/ArrayDeque;->removeAt(I)Ljava/lang/Object;\nHSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;\nHPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;\nHSPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object;\nPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object;\nHSPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object;\nPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object;\nHSPLkotlin/collections/ArrayDeque;->removeLastOrNull()Ljava/lang/Object;\nPLkotlin/collections/ArrayDeque;->removeLastOrNull()Ljava/lang/Object;\nLkotlin/collections/ArrayDeque$Companion;\nHSPLkotlin/collections/ArrayDeque$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/ArrayDeque$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/collections/ArrayDeque$Companion;->newCapacity$kotlin_stdlib(II)I\nPLkotlin/collections/ArrayDeque$Companion;->newCapacity$kotlin_stdlib(II)I\nLkotlin/collections/ArraysKt;\nHSPLkotlin/collections/ArraysKt;->copyInto$default([B[BIII)V\nPLkotlin/collections/ArraysKt;->copyInto$default([B[BIII)V\nHSPLkotlin/collections/ArraysKt;->copyInto$default([F[F)V\nPLkotlin/collections/ArraysKt;->copyInto$default([F[F)V\nHSPLkotlin/collections/ArraysKt;->copyInto$default([I[III)V\nPLkotlin/collections/ArraysKt;->copyInto$default([I[III)V\nHSPLkotlin/collections/ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;II)[Ljava/lang/Object;\nPLkotlin/collections/ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;II)[Ljava/lang/Object;\nHSPLkotlin/collections/ArraysKt;->copyInto([C[CIII)V\nPLkotlin/collections/ArraysKt;->copyInto([C[CIII)V\nHSPLkotlin/collections/ArraysKt;->copyInto([I[IIII)V\nHPLkotlin/collections/ArraysKt;->copyInto([I[IIII)V\nHSPLkotlin/collections/ArraysKt;->fill$default([II)V\nPLkotlin/collections/ArraysKt;->fill$default([II)V\nHSPLkotlin/collections/ArraysKt;->fill$default([Ljava/lang/Object;Lkotlinx/coroutines/internal/Symbol;)V\nHPLkotlin/collections/ArraysKt;->fill$default([Ljava/lang/Object;Lkotlinx/coroutines/internal/Symbol;)V\nHSPLkotlin/collections/ArraysKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;I)V\nPLkotlin/collections/ArraysKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;I)V\nLkotlin/collections/ArraysKt__ArraysJVMKt;\nHSPLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V\nPLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V\nLkotlin/collections/ArraysKt__ArraysKt;\nLkotlin/collections/ArraysKt___ArraysJvmKt;\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List;\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([B[BIIIILjava/lang/Object;)[B\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([B[BIIIILjava/lang/Object;)[B\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object;\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object;\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([C[CIII)[C\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([C[CIII)[C\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object;\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object;\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([BII)[B\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([BII)[B\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->plus([II)[I\nPLkotlin/collections/ArraysKt___ArraysJvmKt;->plus([II)[I\nHSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V\nHPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V\nLkotlin/collections/ArraysKt___ArraysKt;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->asIterable([Ljava/lang/Object;)Ljava/lang/Iterable;\nPLkotlin/collections/ArraysKt___ArraysKt;->asIterable([Ljava/lang/Object;)Ljava/lang/Iterable;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/List;\nPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNullTo([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection;\nPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNullTo([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([I)I\nPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([I)I\nHSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I\nHPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I\nHSPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([II)Ljava/lang/Integer;\nPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([II)Ljava/lang/Integer;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object;\nPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I\nHPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I\nHSPLkotlin/collections/ArraysKt___ArraysKt;->map([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;\nPLkotlin/collections/ArraysKt___ArraysKt;->map([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/util/List;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection;\nPLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List;\nPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List;\nPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set;\nPLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set;\nHSPLkotlin/collections/ArraysKt___ArraysKt;->withIndex([Ljava/lang/Object;)Ljava/lang/Iterable;\nPLkotlin/collections/ArraysKt___ArraysKt;->withIndex([Ljava/lang/Object;)Ljava/lang/Iterable;\nLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;\nHSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;-><init>([Ljava/lang/Object;)V\nPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;-><init>([Ljava/lang/Object;)V\nHSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->iterator()Ljava/util/Iterator;\nPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->iterator()Ljava/util/Iterator;\nLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;\nHSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;-><init>([Ljava/lang/Object;)V\nPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;-><init>([Ljava/lang/Object;)V\nHSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/lang/Object;\nPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/util/Iterator;\nPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/util/Iterator;\nLkotlin/collections/CollectionsKt;\nHSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)V\nPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)V\nHSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/List;[Ljava/lang/Object;)V\nPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/List;[Ljava/lang/Object;)V\nHSPLkotlin/collections/CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;)I\nPLkotlin/collections/CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;)I\nHSPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I\nHPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;)I\nHSPLkotlin/collections/CollectionsKt;->filterNotNull(Ljava/util/List;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt;->filterNotNull(Ljava/util/List;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt;->toBooleanArray(Ljava/util/List;)[Z\nPLkotlin/collections/CollectionsKt;->toBooleanArray(Ljava/util/List;)[Z\nHSPLkotlin/collections/CollectionsKt;->toHashSet(Ljava/util/List;)Ljava/util/HashSet;\nPLkotlin/collections/CollectionsKt;->toHashSet(Ljava/util/List;)Ljava/util/HashSet;\nHSPLkotlin/collections/CollectionsKt;->toIntArray(Ljava/util/List;)[I\nPLkotlin/collections/CollectionsKt;->toIntArray(Ljava/util/List;)[I\nLkotlin/collections/CollectionsKt__CollectionsJVMKt;\nHSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->build(Ljava/util/List;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->build(Ljava/util/List;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List;\nLkotlin/collections/CollectionsKt__CollectionsKt;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList;\nPLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection;\nPLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I\nPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch(Ljava/util/List;Ljava/lang/Comparable;II)I\nPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch(Ljava/util/List;Ljava/lang/Comparable;II)I\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I\nHPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull([Ljava/lang/Object;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V\nPLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V\nLkotlin/collections/CollectionsKt__IterablesKt;\nHSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I\nHPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I\nHSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrNull(Ljava/lang/Iterable;)Ljava/lang/Integer;\nPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrNull(Ljava/lang/Iterable;)Ljava/lang/Integer;\nHSPLkotlin/collections/CollectionsKt__IterablesKt;->flatten(Ljava/lang/Iterable;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt__IterablesKt;->flatten(Ljava/lang/Iterable;)Ljava/util/List;\nLkotlin/collections/CollectionsKt__IteratorsJVMKt;\nLkotlin/collections/CollectionsKt__IteratorsKt;\nLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;\nHSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V\nPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V\nHSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V\nHPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V\nLkotlin/collections/CollectionsKt__MutableCollectionsKt;\nHSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z\nPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z\nHSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z\nPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z\nHSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirst(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirst(Ljava/util/List;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;\nLkotlin/collections/CollectionsKt__ReversedViewsKt;\nLkotlin/collections/CollectionsKt___CollectionsJvmKt;\nLkotlin/collections/CollectionsKt___CollectionsKt;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNullTo(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNullTo(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toBooleanArray(Ljava/util/Collection;)[Z\nPLkotlin/collections/CollectionsKt___CollectionsKt;->toBooleanArray(Ljava/util/Collection;)[Z\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toHashSet(Ljava/lang/Iterable;)Ljava/util/HashSet;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->toHashSet(Ljava/lang/Iterable;)Ljava/util/HashSet;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List;\nHPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List;\nHSPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set;\nPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set;\nPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;-><init>(Ljava/lang/Iterable;)V\nPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;\nLkotlin/collections/EmptyIterator;\nHSPLkotlin/collections/EmptyIterator;-><clinit>()V\nPLkotlin/collections/EmptyIterator;-><clinit>()V\nHSPLkotlin/collections/EmptyIterator;-><init>()V\nPLkotlin/collections/EmptyIterator;-><init>()V\nHSPLkotlin/collections/EmptyIterator;->hasNext()Z\nPLkotlin/collections/EmptyIterator;->hasNext()Z\nLkotlin/collections/EmptyList;\nHSPLkotlin/collections/EmptyList;-><clinit>()V\nPLkotlin/collections/EmptyList;-><clinit>()V\nHSPLkotlin/collections/EmptyList;-><init>()V\nPLkotlin/collections/EmptyList;-><init>()V\nHSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z\nPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z\nHSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z\nHPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/collections/EmptyList;->hashCode()I\nHPLkotlin/collections/EmptyList;->hashCode()I\nHSPLkotlin/collections/EmptyList;->isEmpty()Z\nHPLkotlin/collections/EmptyList;->isEmpty()Z\nHSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator;\nPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator;\nHSPLkotlin/collections/EmptyList;->size()I\nHPLkotlin/collections/EmptyList;->size()I\nHSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;\nPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object;\nLkotlin/collections/EmptyMap;\nHSPLkotlin/collections/EmptyMap;-><clinit>()V\nPLkotlin/collections/EmptyMap;-><clinit>()V\nHSPLkotlin/collections/EmptyMap;-><init>()V\nPLkotlin/collections/EmptyMap;-><init>()V\nHSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z\nPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z\nHSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set;\nPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set;\nHSPLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z\nPLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/collections/EmptyMap;->isEmpty()Z\nPLkotlin/collections/EmptyMap;->isEmpty()Z\nHSPLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set;\nPLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set;\nHSPLkotlin/collections/EmptyMap;->size()I\nHPLkotlin/collections/EmptyMap;->size()I\nHSPLkotlin/collections/EmptyMap;->values()Ljava/util/Collection;\nPLkotlin/collections/EmptyMap;->values()Ljava/util/Collection;\nLkotlin/collections/EmptySet;\nHSPLkotlin/collections/EmptySet;-><clinit>()V\nPLkotlin/collections/EmptySet;-><clinit>()V\nHSPLkotlin/collections/EmptySet;-><init>()V\nPLkotlin/collections/EmptySet;-><init>()V\nHSPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z\nPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z\nHSPLkotlin/collections/EmptySet;->hashCode()I\nPLkotlin/collections/EmptySet;->hashCode()I\nHSPLkotlin/collections/EmptySet;->isEmpty()Z\nPLkotlin/collections/EmptySet;->isEmpty()Z\nHSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator;\nPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator;\nHSPLkotlin/collections/EmptySet;->size()I\nPLkotlin/collections/EmptySet;->size()I\nLkotlin/collections/IndexedValue;\nHSPLkotlin/collections/IndexedValue;-><init>(ILjava/lang/Object;)V\nPLkotlin/collections/IndexedValue;-><init>(ILjava/lang/Object;)V\nHSPLkotlin/collections/IndexedValue;->getIndex()I\nPLkotlin/collections/IndexedValue;->getIndex()I\nHSPLkotlin/collections/IndexedValue;->getValue()Ljava/lang/Object;\nPLkotlin/collections/IndexedValue;->getValue()Ljava/lang/Object;\nLkotlin/collections/IndexingIterable;\nHSPLkotlin/collections/IndexingIterable;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLkotlin/collections/IndexingIterable;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/collections/IndexingIterable;->iterator()Ljava/util/Iterator;\nPLkotlin/collections/IndexingIterable;->iterator()Ljava/util/Iterator;\nLkotlin/collections/IndexingIterator;\nHSPLkotlin/collections/IndexingIterator;-><init>(Ljava/util/Iterator;)V\nPLkotlin/collections/IndexingIterator;-><init>(Ljava/util/Iterator;)V\nHSPLkotlin/collections/IndexingIterator;->hasNext()Z\nPLkotlin/collections/IndexingIterator;->hasNext()Z\nHSPLkotlin/collections/IndexingIterator;->next()Ljava/lang/Object;\nPLkotlin/collections/IndexingIterator;->next()Ljava/lang/Object;\nHSPLkotlin/collections/IndexingIterator;->next()Lkotlin/collections/IndexedValue;\nPLkotlin/collections/IndexingIterator;->next()Lkotlin/collections/IndexedValue;\nLkotlin/collections/IntIterator;\nHSPLkotlin/collections/IntIterator;-><init>()V\nHPLkotlin/collections/IntIterator;-><init>()V\nLkotlin/collections/MapWithDefault;\nLkotlin/collections/MapsKt;\nLkotlin/collections/MapsKt__MapWithDefaultKt;\nHSPLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/collections/MapsKt__MapsJVMKt;\nHSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I\nPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I\nHSPLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map;\nPLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map;\nLkotlin/collections/MapsKt__MapsKt;\nHSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map;\nHPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map;\nHSPLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/collections/MapsKt__MapsKt;->hashMapOf([Lkotlin/Pair;)Ljava/util/HashMap;\nPLkotlin/collections/MapsKt__MapsKt;->hashMapOf([Lkotlin/Pair;)Ljava/util/HashMap;\nHSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map;\nPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map;\nHSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V\nPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V\nHSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V\nHPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V\nHSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map;\nPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map;\nHSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map;\nPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map;\nHSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map;\nPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map;\nHSPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map;\nPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map;\nHSPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;\nHPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;\nLkotlin/collections/MapsKt___MapsJvmKt;\nLkotlin/collections/MapsKt___MapsKt;\nPLkotlin/collections/MapsKt___MapsKt;->asSequence(Ljava/util/Map;)Lkotlin/sequences/Sequence;\nLkotlin/collections/SetsKt;\nHSPLkotlin/collections/SetsKt;->build(Lkotlin/collections/builders/SetBuilder;)Ljava/util/Set;\nPLkotlin/collections/SetsKt;->build(Lkotlin/collections/builders/SetBuilder;)Ljava/util/Set;\nLkotlin/collections/SetsKt__SetsJVMKt;\nHSPLkotlin/collections/SetsKt__SetsJVMKt;->build(Ljava/util/Set;)Ljava/util/Set;\nPLkotlin/collections/SetsKt__SetsJVMKt;->build(Ljava/util/Set;)Ljava/util/Set;\nHSPLkotlin/collections/SetsKt__SetsJVMKt;->setOf(Ljava/lang/Object;)Ljava/util/Set;\nPLkotlin/collections/SetsKt__SetsJVMKt;->setOf(Ljava/lang/Object;)Ljava/util/Set;\nLkotlin/collections/SetsKt__SetsKt;\nHSPLkotlin/collections/SetsKt__SetsKt;->mutableSetOf([Ljava/lang/Object;)Ljava/util/Set;\nPLkotlin/collections/SetsKt__SetsKt;->mutableSetOf([Ljava/lang/Object;)Ljava/util/Set;\nHSPLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set;\nPLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set;\nLkotlin/collections/SetsKt___SetsKt;\nHSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set;\nPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set;\nHSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set;\nPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set;\nLkotlin/collections/builders/ListBuilder;\nHSPLkotlin/collections/builders/ListBuilder;-><clinit>()V\nPLkotlin/collections/builders/ListBuilder;-><clinit>()V\nHSPLkotlin/collections/builders/ListBuilder;-><init>()V\nPLkotlin/collections/builders/ListBuilder;-><init>()V\nHSPLkotlin/collections/builders/ListBuilder;-><init>(I)V\nPLkotlin/collections/builders/ListBuilder;-><init>(I)V\nHSPLkotlin/collections/builders/ListBuilder;-><init>([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V\nPLkotlin/collections/builders/ListBuilder;-><init>([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V\nHSPLkotlin/collections/builders/ListBuilder;->access$getArray$p(Lkotlin/collections/builders/ListBuilder;)[Ljava/lang/Object;\nPLkotlin/collections/builders/ListBuilder;->access$getArray$p(Lkotlin/collections/builders/ListBuilder;)[Ljava/lang/Object;\nHSPLkotlin/collections/builders/ListBuilder;->access$getLength$p(Lkotlin/collections/builders/ListBuilder;)I\nPLkotlin/collections/builders/ListBuilder;->access$getLength$p(Lkotlin/collections/builders/ListBuilder;)I\nHSPLkotlin/collections/builders/ListBuilder;->access$getOffset$p(Lkotlin/collections/builders/ListBuilder;)I\nPLkotlin/collections/builders/ListBuilder;->access$getOffset$p(Lkotlin/collections/builders/ListBuilder;)I\nHSPLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z\nPLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z\nHSPLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V\nPLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V\nHSPLkotlin/collections/builders/ListBuilder;->build()Ljava/util/List;\nPLkotlin/collections/builders/ListBuilder;->build()Ljava/util/List;\nHSPLkotlin/collections/builders/ListBuilder;->checkIsMutable()V\nPLkotlin/collections/builders/ListBuilder;->checkIsMutable()V\nHSPLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V\nPLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V\nHSPLkotlin/collections/builders/ListBuilder;->iterator()Ljava/util/Iterator;\nPLkotlin/collections/builders/ListBuilder;->iterator()Ljava/util/Iterator;\nLkotlin/collections/builders/ListBuilder$Companion;\nHSPLkotlin/collections/builders/ListBuilder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/builders/ListBuilder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/collections/builders/ListBuilder$Itr;\nHSPLkotlin/collections/builders/ListBuilder$Itr;-><init>(Lkotlin/collections/builders/ListBuilder;I)V\nPLkotlin/collections/builders/ListBuilder$Itr;-><init>(Lkotlin/collections/builders/ListBuilder;I)V\nHSPLkotlin/collections/builders/ListBuilder$Itr;->hasNext()Z\nPLkotlin/collections/builders/ListBuilder$Itr;->hasNext()Z\nHSPLkotlin/collections/builders/ListBuilder$Itr;->next()Ljava/lang/Object;\nPLkotlin/collections/builders/ListBuilder$Itr;->next()Ljava/lang/Object;\nLkotlin/collections/builders/ListBuilderKt;\nHSPLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object;\nPLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object;\nLkotlin/collections/builders/MapBuilder;\nHSPLkotlin/collections/builders/MapBuilder;-><clinit>()V\nPLkotlin/collections/builders/MapBuilder;-><clinit>()V\nHSPLkotlin/collections/builders/MapBuilder;-><init>()V\nPLkotlin/collections/builders/MapBuilder;-><init>()V\nHSPLkotlin/collections/builders/MapBuilder;-><init>(I)V\nPLkotlin/collections/builders/MapBuilder;-><init>(I)V\nHSPLkotlin/collections/builders/MapBuilder;->access$getEmpty$cp()Lkotlin/collections/builders/MapBuilder;\nPLkotlin/collections/builders/MapBuilder;->access$getEmpty$cp()Lkotlin/collections/builders/MapBuilder;\nHSPLkotlin/collections/builders/MapBuilder;->build()Ljava/util/Map;\nPLkotlin/collections/builders/MapBuilder;->build()Ljava/util/Map;\nHSPLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V\nPLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V\nHSPLkotlin/collections/builders/MapBuilder;->isEmpty()Z\nPLkotlin/collections/builders/MapBuilder;->isEmpty()Z\nHSPLkotlin/collections/builders/MapBuilder;->size()I\nPLkotlin/collections/builders/MapBuilder;->size()I\nLkotlin/collections/builders/MapBuilder$Companion;\nHSPLkotlin/collections/builders/MapBuilder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/builders/MapBuilder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeHashSize(Lkotlin/collections/builders/MapBuilder$Companion;I)I\nPLkotlin/collections/builders/MapBuilder$Companion;->access$computeHashSize(Lkotlin/collections/builders/MapBuilder$Companion;I)I\nHSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeShift(Lkotlin/collections/builders/MapBuilder$Companion;I)I\nPLkotlin/collections/builders/MapBuilder$Companion;->access$computeShift(Lkotlin/collections/builders/MapBuilder$Companion;I)I\nLkotlin/collections/builders/SetBuilder;\nHSPLkotlin/collections/builders/SetBuilder;-><clinit>()V\nPLkotlin/collections/builders/SetBuilder;-><clinit>()V\nHSPLkotlin/collections/builders/SetBuilder;-><init>()V\nPLkotlin/collections/builders/SetBuilder;-><init>()V\nHSPLkotlin/collections/builders/SetBuilder;-><init>(Lkotlin/collections/builders/MapBuilder;)V\nPLkotlin/collections/builders/SetBuilder;-><init>(Lkotlin/collections/builders/MapBuilder;)V\nHSPLkotlin/collections/builders/SetBuilder;->build()Ljava/util/Set;\nPLkotlin/collections/builders/SetBuilder;->build()Ljava/util/Set;\nHSPLkotlin/collections/builders/SetBuilder;->getSize()I\nPLkotlin/collections/builders/SetBuilder;->getSize()I\nHSPLkotlin/collections/builders/SetBuilder;->isEmpty()Z\nPLkotlin/collections/builders/SetBuilder;->isEmpty()Z\nLkotlin/collections/builders/SetBuilder$Companion;\nHSPLkotlin/collections/builders/SetBuilder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/collections/builders/SetBuilder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/comparisons/ComparisonsKt;\nLkotlin/comparisons/ComparisonsKt__ComparisonsKt;\nHSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I\nHPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I\nHSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->naturalOrder()Ljava/util/Comparator;\nPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->naturalOrder()Ljava/util/Comparator;\nLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;\nHSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->maxOf(F[F)F\nHPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->maxOf(F[F)F\nHSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->minOf(F[F)F\nHPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->minOf(F[F)F\nLkotlin/comparisons/ComparisonsKt___ComparisonsKt;\nLkotlin/comparisons/NaturalOrderComparator;\nHSPLkotlin/comparisons/NaturalOrderComparator;-><clinit>()V\nPLkotlin/comparisons/NaturalOrderComparator;-><clinit>()V\nHSPLkotlin/comparisons/NaturalOrderComparator;-><init>()V\nPLkotlin/comparisons/NaturalOrderComparator;-><init>()V\nHSPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I\nPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I\nHSPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nLkotlin/coroutines/AbstractCoroutineContextElement;\nHSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V\nPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V\nHSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nHPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nHSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/AbstractCoroutineContextKey;\nHSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V\nLkotlin/coroutines/CombinedContext;\nHSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V\nHPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V\nHSPLkotlin/coroutines/CombinedContext;->equals(Ljava/lang/Object;)Z\nPLkotlin/coroutines/CombinedContext;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/Continuation;\nLkotlin/coroutines/ContinuationInterceptor;\nHSPLkotlin/coroutines/ContinuationInterceptor;-><clinit>()V\nPLkotlin/coroutines/ContinuationInterceptor;-><clinit>()V\nLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;\nHSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/ContinuationInterceptor$Key;\nHSPLkotlin/coroutines/ContinuationInterceptor$Key;-><clinit>()V\nPLkotlin/coroutines/ContinuationInterceptor$Key;-><clinit>()V\nHSPLkotlin/coroutines/ContinuationInterceptor$Key;-><init>()V\nPLkotlin/coroutines/ContinuationInterceptor$Key;-><init>()V\nLkotlin/coroutines/ContinuationKt;\nHSPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nLkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/CoroutineContext$DefaultImpls;\nHSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/CoroutineContext$Element;\nLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;\nHSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/CoroutineContext$Key;\nLkotlin/coroutines/CoroutineContext$plus$1;\nHSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V\nPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V\nHSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>()V\nPLkotlin/coroutines/CoroutineContext$plus$1;-><init>()V\nHSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/EmptyCoroutineContext;\nHSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V\nPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V\nHSPLkotlin/coroutines/EmptyCoroutineContext;-><init>()V\nPLkotlin/coroutines/EmptyCoroutineContext;-><init>()V\nHSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/SafeContinuation;\nHSPLkotlin/coroutines/SafeContinuation;-><clinit>()V\nPLkotlin/coroutines/SafeContinuation;-><clinit>()V\nHSPLkotlin/coroutines/SafeContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V\nHPLkotlin/coroutines/SafeContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V\nHSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V\nHPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V\nLkotlin/coroutines/SafeContinuation$Companion;\nHSPLkotlin/coroutines/SafeContinuation$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/coroutines/SafeContinuation$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/coroutines/intrinsics/CoroutineSingletons;\nHSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V\nPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V\nHSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(Ljava/lang/String;I)V\nPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(Ljava/lang/String;I)V\nLkotlin/coroutines/intrinsics/IntrinsicsKt;\nLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;\nHSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3;\nLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4;\nLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;\nLkotlin/coroutines/jvm/internal/BaseContinuationImpl;\nHSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V\nHPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V\nHSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V\nHPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V\nLkotlin/coroutines/jvm/internal/CompletedContinuation;\nHSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V\nPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V\nHSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><init>()V\nPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><init>()V\nLkotlin/coroutines/jvm/internal/ContinuationImpl;\nHSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V\nHPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation;\nHPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation;\nHSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V\nHPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V\nLkotlin/coroutines/jvm/internal/CoroutineStackFrame;\nLkotlin/coroutines/jvm/internal/DebugProbesKt;\nHSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V\nHSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V\nLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;\nHSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;\nHPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;\nLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;\nHSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V\nLkotlin/coroutines/jvm/internal/SuspendFunction;\nLkotlin/coroutines/jvm/internal/SuspendLambda;\nHSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V\nHPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V\nHSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I\nHPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I\nLkotlin/enums/EnumEntries;\nLkotlin/enums/EnumEntriesKt;\nHSPLkotlin/enums/EnumEntriesKt;->enumEntries([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries;\nPLkotlin/enums/EnumEntriesKt;->enumEntries([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries;\nLkotlin/enums/EnumEntriesList;\nHSPLkotlin/enums/EnumEntriesList;-><init>([Ljava/lang/Enum;)V\nPLkotlin/enums/EnumEntriesList;-><init>([Ljava/lang/Enum;)V\nLkotlin/internal/PlatformImplementations;\nHSPLkotlin/internal/PlatformImplementations;-><init>()V\nPLkotlin/internal/PlatformImplementations;-><init>()V\nLkotlin/internal/PlatformImplementationsKt;\nHSPLkotlin/internal/PlatformImplementationsKt;-><clinit>()V\nPLkotlin/internal/PlatformImplementationsKt;-><clinit>()V\nLkotlin/internal/ProgressionUtilKt;\nHSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I\nHPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I\nHSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(JJJ)J\nPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(JJJ)J\nLkotlin/internal/jdk7/JDK7PlatformImplementations;\nHSPLkotlin/internal/jdk7/JDK7PlatformImplementations;-><init>()V\nPLkotlin/internal/jdk7/JDK7PlatformImplementations;-><init>()V\nLkotlin/internal/jdk8/JDK8PlatformImplementations;\nHSPLkotlin/internal/jdk8/JDK8PlatformImplementations;-><init>()V\nPLkotlin/internal/jdk8/JDK8PlatformImplementations;-><init>()V\nHSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random;\nPLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random;\nLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;\nHSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;-><clinit>()V\nPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;-><clinit>()V\nHSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;-><init>()V\nPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;-><init>()V\nLkotlin/io/CloseableKt;\nHSPLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V\nPLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V\nLkotlin/io/FileSystemException;\nLkotlin/io/FilesKt;\nLkotlin/io/FilesKt__FilePathComponentsKt;\nLkotlin/io/FilesKt__FileReadWriteKt;\nLkotlin/io/FilesKt__FileTreeWalkKt;\nLkotlin/io/FilesKt__UtilsKt;\nHSPLkotlin/io/FilesKt__UtilsKt;->getExtension(Ljava/io/File;)Ljava/lang/String;\nPLkotlin/io/FilesKt__UtilsKt;->getExtension(Ljava/io/File;)Ljava/lang/String;\nLkotlin/io/TerminateException;\nLkotlin/jvm/JvmClassMappingKt;\nHSPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class;\nPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class;\nHSPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class;\nHPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class;\nHSPLkotlin/jvm/JvmClassMappingKt;->getJavaPrimitiveType(Lkotlin/reflect/KClass;)Ljava/lang/Class;\nPLkotlin/jvm/JvmClassMappingKt;->getJavaPrimitiveType(Lkotlin/reflect/KClass;)Ljava/lang/Class;\nLkotlin/jvm/functions/Function0;\nLkotlin/jvm/functions/Function1;\nLkotlin/jvm/functions/Function10;\nLkotlin/jvm/functions/Function11;\nLkotlin/jvm/functions/Function12;\nLkotlin/jvm/functions/Function13;\nLkotlin/jvm/functions/Function14;\nLkotlin/jvm/functions/Function15;\nLkotlin/jvm/functions/Function16;\nLkotlin/jvm/functions/Function17;\nLkotlin/jvm/functions/Function18;\nLkotlin/jvm/functions/Function19;\nLkotlin/jvm/functions/Function2;\nLkotlin/jvm/functions/Function20;\nLkotlin/jvm/functions/Function21;\nLkotlin/jvm/functions/Function22;\nLkotlin/jvm/functions/Function3;\nLkotlin/jvm/functions/Function4;\nLkotlin/jvm/functions/Function5;\nLkotlin/jvm/functions/Function6;\nLkotlin/jvm/functions/Function7;\nLkotlin/jvm/functions/Function8;\nLkotlin/jvm/functions/Function9;\nLkotlin/jvm/functions/FunctionN;\nLkotlin/jvm/internal/AdaptedFunctionReference;\nHSPLkotlin/jvm/internal/AdaptedFunctionReference;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/AdaptedFunctionReference;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/ArrayIterator;\nHSPLkotlin/jvm/internal/ArrayIterator;-><init>([Ljava/lang/Object;)V\nPLkotlin/jvm/internal/ArrayIterator;-><init>([Ljava/lang/Object;)V\nHSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z\nPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z\nHSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object;\nPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object;\nLkotlin/jvm/internal/ArrayIteratorKt;\nHSPLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Ljava/util/Iterator;\nPLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Ljava/util/Iterator;\nLkotlin/jvm/internal/BooleanCompanionObject;\nHSPLkotlin/jvm/internal/BooleanCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/BooleanCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/BooleanCompanionObject;-><init>()V\nPLkotlin/jvm/internal/BooleanCompanionObject;-><init>()V\nLkotlin/jvm/internal/ByteCompanionObject;\nHSPLkotlin/jvm/internal/ByteCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/ByteCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/ByteCompanionObject;-><init>()V\nPLkotlin/jvm/internal/ByteCompanionObject;-><init>()V\nLkotlin/jvm/internal/CallableReference;\nHSPLkotlin/jvm/internal/CallableReference;-><clinit>()V\nPLkotlin/jvm/internal/CallableReference;-><clinit>()V\nHSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V\nHPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V\nHSPLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object;\nPLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object;\nHSPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String;\nHPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String;\nHSPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer;\nHPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer;\nHSPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String;\nHPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String;\nLkotlin/jvm/internal/CallableReference$NoReceiver;\nHSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V\nPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V\nHSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><init>()V\nPLkotlin/jvm/internal/CallableReference$NoReceiver;-><init>()V\nHSPLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver;\nPLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver;\nLkotlin/jvm/internal/CharCompanionObject;\nHSPLkotlin/jvm/internal/CharCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/CharCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/CharCompanionObject;-><init>()V\nPLkotlin/jvm/internal/CharCompanionObject;-><init>()V\nLkotlin/jvm/internal/ClassBasedDeclarationContainer;\nLkotlin/jvm/internal/CollectionToArray;\nHSPLkotlin/jvm/internal/CollectionToArray;-><clinit>()V\nPLkotlin/jvm/internal/CollectionToArray;-><clinit>()V\nHSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;\nPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object;\nLkotlin/jvm/internal/DefaultConstructorMarker;\nLkotlin/jvm/internal/DoubleCompanionObject;\nHSPLkotlin/jvm/internal/DoubleCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/DoubleCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/DoubleCompanionObject;-><init>()V\nPLkotlin/jvm/internal/DoubleCompanionObject;-><init>()V\nLkotlin/jvm/internal/FloatCompanionObject;\nHSPLkotlin/jvm/internal/FloatCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/FloatCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/FloatCompanionObject;-><init>()V\nPLkotlin/jvm/internal/FloatCompanionObject;-><init>()V\nLkotlin/jvm/internal/FunctionAdapter;\nLkotlin/jvm/internal/FunctionBase;\nLkotlin/jvm/internal/FunctionReference;\nHSPLkotlin/jvm/internal/FunctionReference;-><init>(I)V\nPLkotlin/jvm/internal/FunctionReference;-><init>(I)V\nHSPLkotlin/jvm/internal/FunctionReference;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHPLkotlin/jvm/internal/FunctionReference;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z\nHPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/jvm/internal/FunctionReference;->getArity()I\nHPLkotlin/jvm/internal/FunctionReference;->getArity()I\nLkotlin/jvm/internal/FunctionReferenceImpl;\nHSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/IntCompanionObject;\nHSPLkotlin/jvm/internal/IntCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/IntCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/IntCompanionObject;-><init>()V\nPLkotlin/jvm/internal/IntCompanionObject;-><init>()V\nLkotlin/jvm/internal/Intrinsics;\nHSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z\nHPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z\nHSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z\nHSPLkotlin/jvm/internal/Intrinsics;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nPLkotlin/jvm/internal/Intrinsics;->checkExpressionValueIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nHSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V\nHPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V\nHSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nHPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nHSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V\nHPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V\nHSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V\nHPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V\nHSPLkotlin/jvm/internal/Intrinsics;->checkParameterIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nPLkotlin/jvm/internal/Intrinsics;->checkParameterIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V\nHSPLkotlin/jvm/internal/Intrinsics;->compare(II)I\nHPLkotlin/jvm/internal/Intrinsics;->compare(II)I\nHSPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/String;Ljava/lang/Throwable;)V\nPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/String;Ljava/lang/Throwable;)V\nHSPLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;\nPLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;\nLkotlin/jvm/internal/KTypeBase;\nLkotlin/jvm/internal/Lambda;\nHSPLkotlin/jvm/internal/Lambda;-><init>(I)V\nHPLkotlin/jvm/internal/Lambda;-><init>(I)V\nHSPLkotlin/jvm/internal/Lambda;->getArity()I\nHPLkotlin/jvm/internal/Lambda;->getArity()I\nLkotlin/jvm/internal/LongCompanionObject;\nHSPLkotlin/jvm/internal/LongCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/LongCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/LongCompanionObject;-><init>()V\nPLkotlin/jvm/internal/LongCompanionObject;-><init>()V\nLkotlin/jvm/internal/MutablePropertyReference;\nHSPLkotlin/jvm/internal/MutablePropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/MutablePropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/MutablePropertyReference1;\nHSPLkotlin/jvm/internal/MutablePropertyReference1;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/MutablePropertyReference1;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/MutablePropertyReference1Impl;\nHSPLkotlin/jvm/internal/MutablePropertyReference1Impl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/MutablePropertyReference1Impl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHSPLkotlin/jvm/internal/MutablePropertyReference1Impl;-><init>(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V\nPLkotlin/jvm/internal/MutablePropertyReference1Impl;-><init>(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V\nLkotlin/jvm/internal/PropertyReference;\nHSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z\nHPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z\nLkotlin/jvm/internal/PropertyReference0;\nHSPLkotlin/jvm/internal/PropertyReference0;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/PropertyReference0;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nHSPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object;\nHPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object;\nLkotlin/jvm/internal/PropertyReference0Impl;\nHSPLkotlin/jvm/internal/PropertyReference0Impl;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/PropertyReference0Impl;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/PropertyReference1;\nHSPLkotlin/jvm/internal/PropertyReference1;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/PropertyReference1;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/PropertyReference1Impl;\nHSPLkotlin/jvm/internal/PropertyReference1Impl;-><init>(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V\nPLkotlin/jvm/internal/PropertyReference1Impl;-><init>(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V\nLkotlin/jvm/internal/PropertyReference2;\nHSPLkotlin/jvm/internal/PropertyReference2;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/PropertyReference2;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/PropertyReference2Impl;\nHSPLkotlin/jvm/internal/PropertyReference2Impl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nPLkotlin/jvm/internal/PropertyReference2Impl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V\nLkotlin/jvm/internal/Ref$BooleanRef;\nHSPLkotlin/jvm/internal/Ref$BooleanRef;-><init>()V\nPLkotlin/jvm/internal/Ref$BooleanRef;-><init>()V\nLkotlin/jvm/internal/Ref$FloatRef;\nHSPLkotlin/jvm/internal/Ref$FloatRef;-><init>()V\nPLkotlin/jvm/internal/Ref$FloatRef;-><init>()V\nLkotlin/jvm/internal/Ref$IntRef;\nHSPLkotlin/jvm/internal/Ref$IntRef;-><init>()V\nPLkotlin/jvm/internal/Ref$IntRef;-><init>()V\nLkotlin/jvm/internal/Ref$LongRef;\nHSPLkotlin/jvm/internal/Ref$LongRef;-><init>()V\nPLkotlin/jvm/internal/Ref$LongRef;-><init>()V\nLkotlin/jvm/internal/Ref$ObjectRef;\nHSPLkotlin/jvm/internal/Ref$ObjectRef;-><init>()V\nHPLkotlin/jvm/internal/Ref$ObjectRef;-><init>()V\nLkotlin/jvm/internal/Reflection;\nHSPLkotlin/jvm/internal/Reflection;-><clinit>()V\nPLkotlin/jvm/internal/Reflection;-><clinit>()V\nHSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;\nHPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;\nHSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer;\nPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer;\nHSPLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1;\nPLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1;\nHSPLkotlin/jvm/internal/Reflection;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1;\nPLkotlin/jvm/internal/Reflection;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1;\nHSPLkotlin/jvm/internal/Reflection;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2;\nPLkotlin/jvm/internal/Reflection;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2;\nHSPLkotlin/jvm/internal/Reflection;->typeOf(Ljava/lang/Class;)Lkotlin/reflect/KType;\nPLkotlin/jvm/internal/Reflection;->typeOf(Ljava/lang/Class;)Lkotlin/reflect/KType;\nLkotlin/jvm/internal/ReflectionFactory;\nHSPLkotlin/jvm/internal/ReflectionFactory;-><init>()V\nPLkotlin/jvm/internal/ReflectionFactory;-><init>()V\nLkotlin/jvm/internal/ShortCompanionObject;\nHSPLkotlin/jvm/internal/ShortCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/ShortCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/ShortCompanionObject;-><init>()V\nPLkotlin/jvm/internal/ShortCompanionObject;-><init>()V\nLkotlin/jvm/internal/StringCompanionObject;\nHSPLkotlin/jvm/internal/StringCompanionObject;-><clinit>()V\nPLkotlin/jvm/internal/StringCompanionObject;-><clinit>()V\nHSPLkotlin/jvm/internal/StringCompanionObject;-><init>()V\nPLkotlin/jvm/internal/StringCompanionObject;-><init>()V\nLkotlin/jvm/internal/TypeIntrinsics;\nHSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection;\nHPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection;\nHSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object;\nHPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object;\nHSPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection;\nHPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection;\nHSPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I\nHPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I\nHSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z\nHPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z\nHSPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z\nPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z\nLkotlin/jvm/internal/markers/KMappedMarker;\nLkotlin/jvm/internal/markers/KMutableCollection;\nLkotlin/jvm/internal/markers/KMutableIterable;\nLkotlin/jvm/internal/markers/KMutableIterator;\nLkotlin/jvm/internal/markers/KMutableList;\nLkotlin/jvm/internal/markers/KMutableListIterator;\nLkotlin/jvm/internal/markers/KMutableMap;\nLkotlin/jvm/internal/markers/KMutableSet;\nLkotlin/math/MathKt;\nLkotlin/math/MathKt__MathHKt;\nLkotlin/math/MathKt__MathJVMKt;\nHSPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I\nHPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I\nHSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I\nHPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I\nLkotlin/properties/ObservableProperty;\nHSPLkotlin/properties/ObservableProperty;-><init>(Ljava/lang/Object;)V\nHPLkotlin/properties/ObservableProperty;-><init>(Ljava/lang/Object;)V\nHSPLkotlin/properties/ObservableProperty;->afterChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)V\nPLkotlin/properties/ObservableProperty;->afterChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLkotlin/properties/ObservableProperty;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;\nPLkotlin/properties/ObservableProperty;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;\nHSPLkotlin/properties/ObservableProperty;->setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V\nPLkotlin/properties/ObservableProperty;->setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V\nLkotlin/properties/ReadOnlyProperty;\nLkotlin/properties/ReadWriteProperty;\nLkotlin/random/AbstractPlatformRandom;\nHSPLkotlin/random/AbstractPlatformRandom;-><init>()V\nPLkotlin/random/AbstractPlatformRandom;-><init>()V\nHSPLkotlin/random/AbstractPlatformRandom;->nextInt()I\nPLkotlin/random/AbstractPlatformRandom;->nextInt()I\nHSPLkotlin/random/AbstractPlatformRandom;->nextInt(I)I\nPLkotlin/random/AbstractPlatformRandom;->nextInt(I)I\nLkotlin/random/FallbackThreadLocalRandom;\nHSPLkotlin/random/FallbackThreadLocalRandom;-><init>()V\nPLkotlin/random/FallbackThreadLocalRandom;-><init>()V\nHSPLkotlin/random/FallbackThreadLocalRandom;->getImpl()Ljava/util/Random;\nPLkotlin/random/FallbackThreadLocalRandom;->getImpl()Ljava/util/Random;\nLkotlin/random/FallbackThreadLocalRandom$implStorage$1;\nHSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;-><init>()V\nPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;-><init>()V\nHSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->initialValue()Ljava/lang/Object;\nPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->initialValue()Ljava/lang/Object;\nLkotlin/random/Random;\nHSPLkotlin/random/Random;-><clinit>()V\nPLkotlin/random/Random;-><clinit>()V\nHSPLkotlin/random/Random;-><init>()V\nPLkotlin/random/Random;-><init>()V\nHSPLkotlin/random/Random;->access$getDefaultRandom$cp()Lkotlin/random/Random;\nPLkotlin/random/Random;->access$getDefaultRandom$cp()Lkotlin/random/Random;\nLkotlin/random/Random$Default;\nHSPLkotlin/random/Random$Default;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/random/Random$Default;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/random/Random$Default;->nextInt()I\nPLkotlin/random/Random$Default;->nextInt()I\nHSPLkotlin/random/Random$Default;->nextInt(I)I\nPLkotlin/random/Random$Default;->nextInt(I)I\nLkotlin/ranges/ClosedRange;\nLkotlin/ranges/IntProgression;\nHSPLkotlin/ranges/IntProgression;-><clinit>()V\nPLkotlin/ranges/IntProgression;-><clinit>()V\nHSPLkotlin/ranges/IntProgression;-><init>(III)V\nHPLkotlin/ranges/IntProgression;-><init>(III)V\nHSPLkotlin/ranges/IntProgression;->getFirst()I\nPLkotlin/ranges/IntProgression;->getFirst()I\nHSPLkotlin/ranges/IntProgression;->getLast()I\nPLkotlin/ranges/IntProgression;->getLast()I\nHSPLkotlin/ranges/IntProgression;->getStep()I\nPLkotlin/ranges/IntProgression;->getStep()I\nHSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;\nPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;\nHSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator;\nPLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator;\nLkotlin/ranges/IntProgression$Companion;\nHSPLkotlin/ranges/IntProgression$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/ranges/IntProgression$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/ranges/IntProgressionIterator;\nHSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V\nHPLkotlin/ranges/IntProgressionIterator;-><init>(III)V\nHSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z\nPLkotlin/ranges/IntProgressionIterator;->hasNext()Z\nHSPLkotlin/ranges/IntProgressionIterator;->nextInt()I\nPLkotlin/ranges/IntProgressionIterator;->nextInt()I\nLkotlin/ranges/IntRange;\nHSPLkotlin/ranges/IntRange;-><clinit>()V\nPLkotlin/ranges/IntRange;-><clinit>()V\nHSPLkotlin/ranges/IntRange;-><init>(II)V\nHPLkotlin/ranges/IntRange;-><init>(II)V\nHSPLkotlin/ranges/IntRange;->contains(I)Z\nPLkotlin/ranges/IntRange;->contains(I)Z\nHSPLkotlin/ranges/IntRange;->getStart()Ljava/lang/Integer;\nPLkotlin/ranges/IntRange;->getStart()Ljava/lang/Integer;\nLkotlin/ranges/IntRange$Companion;\nHSPLkotlin/ranges/IntRange$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/ranges/IntRange$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/ranges/LongProgression;\nHSPLkotlin/ranges/LongProgression;-><clinit>()V\nPLkotlin/ranges/LongProgression;-><clinit>()V\nHSPLkotlin/ranges/LongProgression;-><init>(JJJ)V\nPLkotlin/ranges/LongProgression;-><init>(JJJ)V\nHSPLkotlin/ranges/LongProgression;->getFirst()J\nPLkotlin/ranges/LongProgression;->getFirst()J\nHSPLkotlin/ranges/LongProgression;->getLast()J\nPLkotlin/ranges/LongProgression;->getLast()J\nLkotlin/ranges/LongProgression$Companion;\nHSPLkotlin/ranges/LongProgression$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/ranges/LongProgression$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/ranges/LongRange;\nHSPLkotlin/ranges/LongRange;-><clinit>()V\nPLkotlin/ranges/LongRange;-><clinit>()V\nHSPLkotlin/ranges/LongRange;-><init>(JJ)V\nPLkotlin/ranges/LongRange;-><init>(JJ)V\nHSPLkotlin/ranges/LongRange;->contains(J)Z\nPLkotlin/ranges/LongRange;->contains(J)Z\nLkotlin/ranges/LongRange$Companion;\nHSPLkotlin/ranges/LongRange$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/ranges/LongRange$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/ranges/OpenEndRange;\nLkotlin/ranges/RangesKt;\nHSPLkotlin/ranges/RangesKt;->step(Lkotlin/ranges/IntRange;I)Lkotlin/ranges/IntProgression;\nPLkotlin/ranges/RangesKt;->step(Lkotlin/ranges/IntRange;I)Lkotlin/ranges/IntProgression;\nLkotlin/ranges/RangesKt__RangesKt;\nHSPLkotlin/ranges/RangesKt__RangesKt;->checkStepIsPositive(ZLjava/lang/Number;)V\nPLkotlin/ranges/RangesKt__RangesKt;->checkStepIsPositive(ZLjava/lang/Number;)V\nLkotlin/ranges/RangesKt___RangesKt;\nHSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D\nHPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D\nHSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F\nHPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F\nHSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I\nHPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I\nHSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J\nHPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J\nHSPLkotlin/ranges/RangesKt___RangesKt;->step(Lkotlin/ranges/IntProgression;I)Lkotlin/ranges/IntProgression;\nPLkotlin/ranges/RangesKt___RangesKt;->step(Lkotlin/ranges/IntProgression;I)Lkotlin/ranges/IntProgression;\nHSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange;\nPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange;\nLkotlin/reflect/KAnnotatedElement;\nLkotlin/reflect/KCallable;\nLkotlin/reflect/KClass;\nLkotlin/reflect/KClassifier;\nLkotlin/reflect/KDeclarationContainer;\nLkotlin/reflect/KFunction;\nLkotlin/reflect/KMutableProperty;\nLkotlin/reflect/KMutableProperty1;\nLkotlin/reflect/KProperty;\nLkotlin/reflect/KProperty0;\nLkotlin/reflect/KProperty1;\nLkotlin/reflect/KProperty2;\nLkotlin/reflect/KType;\nLkotlin/reflect/full/KClassifiers;\nHSPLkotlin/reflect/full/KClassifiers;->createType(Lkotlin/reflect/KClassifier;Ljava/util/List;ZLjava/util/List;)Lkotlin/reflect/KType;\nPLkotlin/reflect/full/KClassifiers;->createType(Lkotlin/reflect/KClassifier;Ljava/util/List;ZLjava/util/List;)Lkotlin/reflect/KType;\nLkotlin/reflect/jvm/internal/CacheByClass;\nHSPLkotlin/reflect/jvm/internal/CacheByClass;-><init>()V\nPLkotlin/reflect/jvm/internal/CacheByClass;-><init>()V\nLkotlin/reflect/jvm/internal/CacheByClassKt;\nHSPLkotlin/reflect/jvm/internal/CacheByClassKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CacheByClassKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CacheByClassKt;->createCache(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/CacheByClass;\nPLkotlin/reflect/jvm/internal/CacheByClassKt;->createCache(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/CacheByClass;\nLkotlin/reflect/jvm/internal/CachesKt;\nHSPLkotlin/reflect/jvm/internal/CachesKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CachesKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKType(Ljava/lang/Class;Ljava/util/List;Z)Lkotlin/reflect/KType;\nHPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKType(Ljava/lang/Class;Ljava/util/List;Z)Lkotlin/reflect/KType;\nHSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl;\nHPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl;\nHSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer;\nPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer;\nLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;-><init>()V\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/KType;\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/KType;\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;-><init>()V\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;-><init>()V\nLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;-><init>()V\nPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;-><init>()V\nLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;-><init>()V\nPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl;\nPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl;\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;-><init>()V\nPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KPackageImpl;\nPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KPackageImpl;\nHSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;\nHSPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;->get(Ljava/lang/Class;)Ljava/lang/Object;\nHPLkotlin/reflect/jvm/internal/ConcurrentHashMapCache;->get(Ljava/lang/Class;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/KCallableImpl;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl;-><init>()V\nPLkotlin/reflect/jvm/internal/KCallableImpl;-><init>()V\nLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nPLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nPLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nPLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nPLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nPLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;\nHSPLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nPLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;-><init>(Lkotlin/reflect/jvm/internal/KCallableImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;-><init>(Ljava/lang/Class;)V\nPLkotlin/reflect/jvm/internal/KClassImpl;-><init>(Ljava/lang/Class;)V\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->access$getClassId(Lkotlin/reflect/jvm/internal/KClassImpl;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/KClassImpl;->access$getClassId(Lkotlin/reflect/jvm/internal/KClassImpl;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->equals(Ljava/lang/Object;)Z\nHPLkotlin/reflect/jvm/internal/KClassImpl;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->getData()Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;\nPLkotlin/reflect/jvm/internal/KClassImpl;->getData()Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nPLkotlin/reflect/jvm/internal/KClassImpl;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->getJClass()Ljava/lang/Class;\nPLkotlin/reflect/jvm/internal/KClassImpl;->getJClass()Ljava/lang/Class;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->getQualifiedName()Ljava/lang/String;\nHPLkotlin/reflect/jvm/internal/KClassImpl;->getQualifiedName()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->getSimpleName()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/KClassImpl;->getSimpleName()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->hashCode()I\nHPLkotlin/reflect/jvm/internal/KClassImpl;->hashCode()I\nHSPLkotlin/reflect/jvm/internal/KClassImpl;->isInstance(Ljava/lang/Object;)Z\nPLkotlin/reflect/jvm/internal/KClassImpl;->isInstance(Ljava/lang/Object;)Z\nLkotlin/reflect/jvm/internal/KClassImpl$Data;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data;-><clinit>()V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getQualifiedName()Ljava/lang/String;\nHPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getQualifiedName()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getSimpleName()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getSimpleName()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->invoke()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V\nLkotlin/reflect/jvm/internal/KClassImpl$data$1;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nPLkotlin/reflect/jvm/internal/KClassImpl$data$1;-><init>(Lkotlin/reflect/jvm/internal/KClassImpl;)V\nHSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Lkotlin/reflect/jvm/internal/KClassImpl$Data;\nPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Lkotlin/reflect/jvm/internal/KClassImpl$Data;\nLkotlin/reflect/jvm/internal/KClassifierImpl;\nLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;-><clinit>()V\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;-><init>()V\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;-><init>()V\nLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;-><clinit>()V\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->getModuleData()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->getModuleData()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nLkotlin/reflect/jvm/internal/KMutableProperty1Impl;\nHSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\nHPLkotlin/reflect/jvm/internal/KMutableProperty1Impl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\nLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;\nHSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;-><init>(Lkotlin/reflect/jvm/internal/KMutableProperty1Impl;)V\nPLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;-><init>(Lkotlin/reflect/jvm/internal/KMutableProperty1Impl;)V\nLkotlin/reflect/jvm/internal/KPackageImpl;\nHSPLkotlin/reflect/jvm/internal/KPackageImpl;-><init>(Ljava/lang/Class;)V\nPLkotlin/reflect/jvm/internal/KPackageImpl;-><init>(Ljava/lang/Class;)V\nLkotlin/reflect/jvm/internal/KPackageImpl$data$1;\nHSPLkotlin/reflect/jvm/internal/KPackageImpl$data$1;-><init>(Lkotlin/reflect/jvm/internal/KPackageImpl;)V\nPLkotlin/reflect/jvm/internal/KPackageImpl$data$1;-><init>(Lkotlin/reflect/jvm/internal/KPackageImpl;)V\nLkotlin/reflect/jvm/internal/KProperty1Impl;\nHSPLkotlin/reflect/jvm/internal/KProperty1Impl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\nHPLkotlin/reflect/jvm/internal/KProperty1Impl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\nLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;\nHSPLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V\nPLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V\nLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;\nHSPLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V\nPLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V\nLkotlin/reflect/jvm/internal/KProperty2Impl;\nHSPLkotlin/reflect/jvm/internal/KProperty2Impl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/KProperty2Impl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;)V\nLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;\nHSPLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V\nPLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V\nLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;\nHSPLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V\nPLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;-><init>(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V\nLkotlin/reflect/jvm/internal/KPropertyImpl;\nHSPLkotlin/reflect/jvm/internal/KPropertyImpl;-><clinit>()V\nPLkotlin/reflect/jvm/internal/KPropertyImpl;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/KPropertyImpl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\nHPLkotlin/reflect/jvm/internal/KPropertyImpl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V\nHSPLkotlin/reflect/jvm/internal/KPropertyImpl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Ljava/lang/Object;)V\nPLkotlin/reflect/jvm/internal/KPropertyImpl;-><init>(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Ljava/lang/Object;)V\nLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;\nHSPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;\nHSPLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;-><init>(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V\nPLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;-><init>(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V\nLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;\nHSPLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;-><init>(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V\nPLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;-><init>(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V\nLkotlin/reflect/jvm/internal/KTypeImpl;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;-><clinit>()V\nPLkotlin/reflect/jvm/internal/KTypeImpl;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/KTypeImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/KTypeImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;->access$convert(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier;\nPLkotlin/reflect/jvm/internal/KTypeImpl;->access$convert(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;->convert(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier;\nPLkotlin/reflect/jvm/internal/KTypeImpl;->convert(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/KClassifier;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;->getArguments()Ljava/util/List;\nHPLkotlin/reflect/jvm/internal/KTypeImpl;->getArguments()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;->getClassifier()Lkotlin/reflect/KClassifier;\nHPLkotlin/reflect/jvm/internal/KTypeImpl;->getClassifier()Lkotlin/reflect/KClassifier;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;->getType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType;\nPLkotlin/reflect/jvm/internal/KTypeImpl;->getType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl;->hashCode()I\nHPLkotlin/reflect/jvm/internal/KTypeImpl;->hashCode()I\nLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;-><init>(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;-><init>(Lkotlin/reflect/jvm/internal/KTypeImpl;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/KTypeImpl$arguments$2;->invoke()Ljava/util/List;\nLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;-><init>(Lkotlin/reflect/jvm/internal/KTypeImpl;)V\nPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;-><init>(Lkotlin/reflect/jvm/internal/KTypeImpl;)V\nHSPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Lkotlin/reflect/KClassifier;\nPLkotlin/reflect/jvm/internal/KTypeImpl$classifier$2;->invoke()Lkotlin/reflect/KClassifier;\nLkotlin/reflect/jvm/internal/KTypeParameterOwnerImpl;\nLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;\nHSPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->getOrCreateModule(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->getOrCreateModule(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nLkotlin/reflect/jvm/internal/ReflectProperties;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;\nPLkotlin/reflect/jvm/internal/ReflectProperties;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;\nPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;\nPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;\nLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V\nHPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object;\nHPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object;\nHPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/ReflectProperties$Val;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;-><clinit>()V\nPLkotlin/reflect/jvm/internal/ReflectProperties$Val;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;-><init>()V\nHPLkotlin/reflect/jvm/internal/ReflectProperties$Val;-><init>()V\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->escape(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->escape(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->unescape(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->unescape(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;\nHSPLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;-><init>()V\nPLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;-><init>()V\nLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;-><init>()V\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;-><init>()V\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;\nHPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinPackage(Ljava/lang/Class;Ljava/lang/String;)Lkotlin/reflect/KDeclarationContainer;\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinPackage(Ljava/lang/Class;Ljava/lang/String;)Lkotlin/reflect/KDeclarationContainer;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOwner(Lkotlin/jvm/internal/CallableReference;)Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOwner(Lkotlin/jvm/internal/CallableReference;)Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1;\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1;\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2;\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2;\nHSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->typeOf(Lkotlin/reflect/KClassifier;Ljava/util/List;Z)Lkotlin/reflect/KType;\nPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->typeOf(Lkotlin/reflect/KClassifier;Ljava/util/List;Z)Lkotlin/reflect/KType;\nLkotlin/reflect/jvm/internal/RuntimeTypeMapper;\nHSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;-><clinit>()V\nPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;-><init>()V\nPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;-><init>()V\nHSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->mapJvmClassToKotlinClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->mapJvmClassToKotlinClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/UtilKt;\nHSPLkotlin/reflect/jvm/internal/UtilKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/UtilKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/UtilKt;->toJavaClass(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)Ljava/lang/Class;\nPLkotlin/reflect/jvm/internal/UtilKt;->toJavaClass(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)Ljava/lang/Class;\nLkotlin/reflect/jvm/internal/WeakClassLoaderBox;\nHSPLkotlin/reflect/jvm/internal/WeakClassLoaderBox;-><init>(Ljava/lang/ClassLoader;)V\nPLkotlin/reflect/jvm/internal/WeakClassLoaderBox;-><init>(Ljava/lang/ClassLoader;)V\nHSPLkotlin/reflect/jvm/internal/WeakClassLoaderBox;->hashCode()I\nPLkotlin/reflect/jvm/internal/WeakClassLoaderBox;->hashCode()I\nLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->allClassesWithIntrinsicCompanions()Ljava/util/Set;\nPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->allClassesWithIntrinsicCompanions()Ljava/util/Set;\nLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$200(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$200(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$202(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->access$202(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->getBuiltInsModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->getBuiltInsModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->setBuiltInsModule(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;->setBuiltInsModule(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$1;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$1;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$1;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V\nLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V\nLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$3;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$3;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$3;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;)V\nLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Void;\nPLkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns$4;->invoke()Ljava/lang/Void;\nLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getArrayTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getArrayTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;\nLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V\nLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V\nLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$ClassLookup;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$ClassLookup;-><init>(I)V\nPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$ClassLookup;-><init>(I)V\nLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$kotlinReflectScope$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$kotlinReflectScope$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes$kotlinReflectScope$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionClassId(I)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionClassId(I)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionName(I)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionName(I)Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getPrimitiveFqName(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getPrimitiveFqName(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->annotationName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->annotationName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->collectionsFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->collectionsFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqNameUnsafe(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqNameUnsafe(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->reflect(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->reflect(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nLkotlin/reflect/jvm/internal/impl/builtins/functions/BuiltInFictitiousFunctionClassFactory;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/BuiltInFictitiousFunctionClassFactory;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/BuiltInFictitiousFunctionClassFactory;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;ZLkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;ZLkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getClassNamePrefix()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getClassNamePrefix()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;-><init>()V\nLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;-><init>()V\nLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;-><init>()V\nLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;-><init>()V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->add(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->add(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addKotlinToJava(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addKotlinToJava(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->classId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->classId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->mapJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->mapJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;-><init>(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;-><init>(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component1()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component1()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component2()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component2()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component3()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component3()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMapper;-><init>()V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$cloneable$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$cloneable$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory$cloneable$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInClassDescriptorFactory;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->getCustomizer()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->getCustomizer()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->setPostponedSettingsComputation(Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;->setPostponedSettingsComputation(Lkotlin/jvm/functions/Function0;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;-><init>(Ljava/lang/String;I)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$Kind;\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$WhenMappings;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$WhenMappings;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$WhenMappings;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2;->invoke()Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2$1;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2$1;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$customizer$2$1;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$initialize$1;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$initialize$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltIns$initialize$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Z)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$cloneableType$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$cloneableType$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$cloneableType$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$mockJavaIoPackageFragment$1;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$mockJavaIoPackageFragment$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$mockJavaIoPackageFragment$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$superTypes$1;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$superTypes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$createMockJavaIoSerializableType$superTypes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$notConsideredDeprecation$2;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$notConsideredDeprecation$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer$notConsideredDeprecation$2;-><init>(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsCustomizer;)V\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;)V\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedPackageFragment;\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedPackageFragment;\nLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JvmBuiltInsPackageFragmentProvider$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/CallableDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptorWithTypeParameters;\nLkotlin/reflect/jvm/internal/impl/descriptors/ConstructorDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorNonRoot;\nLkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;\nLkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorWithSource;\nLkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorWithVisibility;\nLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;->getDelegate()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;\nPLkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;->getDelegate()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->recordVisibilityMapping(Lkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->recordVisibilityMapping(Lkotlin/reflect/jvm/internal/impl/descriptors/DelegatedDescriptorVisibility;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$10;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$10;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$10;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$11;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$11;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$11;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$12;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$12;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$12;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$2;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$3;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$3;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$3;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$4;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$4;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$4;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$5;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$5;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$5;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$6;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$6;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$6;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$7;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$7;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$7;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$8;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$8;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$8;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$9;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$9;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibilities$9;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassifierAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/FindClassInModuleKt;->findClassifierAcrossModuleDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/FunctionDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/MemberDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/Modality;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Modality;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Modality;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;->convertFromFlags(ZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;\nPLkotlin/reflect/jvm/internal/impl/descriptors/Modality$Companion;->convertFromFlags(ZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;\nLkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;-><init>(Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;-><init>(Ljava/lang/String;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor$DefaultImpls;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor$DefaultImpls;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor$DefaultImpls;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/descriptors/Named;\nLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$classes$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$classes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$classes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$packageFragments$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$packageFragments$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses$packageFragments$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;\nLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->collectPackageFragmentsOptimizedIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->collectPackageFragmentsOptimizedIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->isEmpty(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->isEmpty(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->packageFragments(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderKt;->packageFragments(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProviderOptimized;\nLkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function1;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function1;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getKotlinTypeRefinerForOwnerModule$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getKotlinTypeRefinerForOwnerModule$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getScopeFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/jvm/functions/Function1;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->access$getScopeFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)Lkotlin/jvm/functions/Function1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->getScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;->getScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$Companion;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;\nLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/descriptors/ScopesHolderForClass$scopeForOwnerModule$2;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Substitutable;\nLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;\nLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker$EMPTY;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterUtilsKt;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterUtilsKt;->computeConstructorTypeParameters(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptorWithTypeParameters;)Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterUtilsKt;->computeConstructorTypeParameters(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptorWithTypeParameters;)Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/descriptors/ValueDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/VariableDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/VariableDescriptorWithAccessors;\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Inherited;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Internal;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$InvisibleFake;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Local;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Private;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$PrivateToThis;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Protected;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Public;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibilities$Unknown;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/Visibility;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/Visibility;-><init>(Ljava/lang/String;Z)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/Visibility;-><init>(Ljava/lang/String;Z)V\nLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotated;\nLkotlin/reflect/jvm/internal/impl/descriptors/annotations/AnnotatedImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/AnnotatedImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/AnnotatedImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;\nPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;\nLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion$EMPTY$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion$EMPTY$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations$Companion$EMPTY$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;\nLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/ClassDescriptorFactory;\nLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;\nLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;\nLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer$None;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getContextReceivers()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getContextReceivers()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getDefaultType()Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getDefaultType()Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;->invoke()Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$1;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$2;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$3;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$3;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor$3;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/AbstractClassDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ConstructorDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ConstructorDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->calculateDispatchReceiverParameter()Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->calculateDispatchReceiverParameter()Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;->initialize(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassConstructorDescriptorImpl;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;Z)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getSource()Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorBase;->getSource()Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZLkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZLkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getDeclaredTypeParameters()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getDeclaredTypeParameters()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Ljava/util/Set;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Ljava/util/Set;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->isInner()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ClassDescriptorImpl;->isInner()Z\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;-><init>(Ljava/util/List;Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;-><init>(Ljava/util/List;Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->toString(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorImpl;->toString(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/DeclarationDescriptorNonRootImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/FunctionDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/FunctionDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->setReturnType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/FunctionDescriptorImpl;->setReturnType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getEmpty()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getEmpty()Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFragments()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getFragments()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Boolean;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Boolean;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$empty$2;->invoke()Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$fragments$2;->invoke()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/LazyPackageViewDescriptorImpl$memberScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleAwareClassDescriptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;-><init>(Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;-><init>(Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;->getAllDependencies()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependenciesImpl;->getAllDependencies()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;Lkotlin/reflect/jvm/internal/impl/platform/TargetPlatform;Ljava/util/Map;Lkotlin/reflect/jvm/internal/impl/name/Name;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->accept(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptorVisitor;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getDependencies$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getDependencies$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageFragmentProviderForModuleContent$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageFragmentProviderForModuleContent$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageViewDescriptorFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getPackageViewDescriptorFactory$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getStorageManager$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$getStorageManager$p(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$isInitialized(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->access$isInitialized(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->assertValid()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->assertValid()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getBuiltIns()Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getBuiltIns()Lkotlin/reflect/jvm/internal/impl/builtins/KotlinBuiltIns;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getCapability(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getCapability(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->initialize(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;Ljava/util/Set;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Ljava/util/List;Ljava/util/Set;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDependencies;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies([Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->setDependencies([Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->toString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;->toString()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packageFragmentProviderForWholeModuleWithDependencies$2;->invoke()Lkotlin/reflect/jvm/internal/impl/descriptors/impl/CompositePackageFragmentProvider;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl$packages$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getContainingDeclaration()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageFragmentDescriptorImpl;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->getCAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Companion;->getCAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->compute(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PackageViewDescriptorFactory$Default;->compute(Lkotlin/reflect/jvm/internal/impl/descriptors/impl/ModuleDescriptorImpl;Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageViewDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->create(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;ZLkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/descriptors/CallableMemberDescriptor$Kind;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;ZZZZZZ)Lkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->setType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/PropertyDescriptorImpl;->setType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/SubpackagesScope;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/SubpackagesScope;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/SubpackagesScope;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;->setOutType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorImpl;->setOutType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorWithInitializerImpl;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorWithInitializerImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/impl/VariableDescriptorWithInitializerImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;ZLkotlin/reflect/jvm/internal/impl/descriptors/SourceElement;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->loadClassAnnotations(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass$AnnotationVisitor;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectClassStructure;->loadClassAnnotations(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass$AnnotationVisitor;)V\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;-><init>(Ljava/lang/ClassLoader;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;-><init>(Ljava/lang/ClassLoader;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findClass(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findClass(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->findPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->knownClassNamesInPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/Set;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinder;->knownClassNamesInPackage(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/util/Set;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinderKt;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinderKt;->tryLoadClass(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectJavaClassFinderKt;->tryLoadClass(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;->create(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass$Factory;->create(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClass;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;-><init>(Ljava/lang/ClassLoader;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;-><init>(Ljava/lang/ClassLoader;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findBuiltInsData(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/io/InputStream;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findBuiltInsData(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/io/InputStream;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findKotlinClassOrContent(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinder;->findKotlinClassOrContent(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinderKt;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinderKt;->access$toRuntimeFqName(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/ReflectKotlinClassFinderKt;->access$toRuntimeFqName(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeErrorReporter;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/PackagePartScopeCache;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;->create(Ljava/lang/ClassLoader;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData$Companion;->create(Ljava/lang/ClassLoader;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->source(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaElement;)Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElement;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory;->source(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaElement;)Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElement;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;->getJavaElement()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeSourceElementFactory$RuntimeSourceElement;->getJavaElement()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->initCache()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->initCache()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->loadIsSealed(Ljava/lang/Class;)Ljava/lang/Boolean;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader;->loadIsSealed(Ljava/lang/Class;)Ljava/lang/Boolean;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;-><init>(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;-><init>(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;->isSealed()Ljava/lang/reflect/Method;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/Java16SealedRecordLoader$Cache;->isSealed()Ljava/lang/reflect/Method;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getFunctionClassArity(Ljava/lang/Class;)Ljava/lang/Integer;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getFunctionClassArity(Ljava/lang/Class;)Ljava/lang/Integer;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getPrimitiveByWrapper(Ljava/lang/Class;)Ljava/lang/Class;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getPrimitiveByWrapper(Ljava/lang/Class;)Ljava/lang/Class;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getSafeClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getSafeClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getWrapperByPrimitive(Ljava/lang/Class;)Ljava/lang/Class;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getWrapperByPrimitive(Ljava/lang/Class;)Ljava/lang/Class;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaAnnotationOwner;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;-><init>(Ljava/lang/Class;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;-><init>(Ljava/lang/Class;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getElement()Ljava/lang/Class;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getElement()Ljava/lang/Class;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getLightClassOriginKind()Lkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getLightClassOriginKind()Lkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getModifiers()I\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getModifiers()I\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getOuterClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getTypeParameters()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getTypeParameters()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAbstract()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAbstract()Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAnnotationType()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isAnnotationType()Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isEnum()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isEnum()Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isFinal()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isFinal()Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isInterface()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isInterface()Z\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isSealed()Z\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaClass;->isSealed()Z\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaElement;-><init>()V\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaModifierListOwner;\nLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nHSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectJavaPackage;->getFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;\nHSPLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->record(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->record(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nHSPLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->recordPackageLookup(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Ljava/lang/String;Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/incremental/UtilsKt;->recordPackageLookup(Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;Ljava/lang/String;Ljava/lang/String;)V\nLkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;\nLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;\nLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;\nHSPLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker$DO_NOTHING;-><init>()V\nLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;\nHSPLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/incremental/components/NoLookupLocation;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V\nLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/AbstractAnnotationTypeQualifierResolver$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->getJavaTarget()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->getJavaTarget()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->values()[Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;\nPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;->values()[Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationQualifierApplicabilityType;\nLkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;)V\nLkotlin/reflect/jvm/internal/impl/load/java/ErasedOverridabilityCondition;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/ErasedOverridabilityCondition;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/ErasedOverridabilityCondition;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/FieldOverridabilityCondition;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/FieldOverridabilityCondition;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/FieldOverridabilityCondition;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$$Util;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$$Util;->findPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/name/FqName;ZILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$$Util;->findPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/name/FqName;ZILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;-><init>(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;-><init>(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;-><init>(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;-><init>(Lkotlin/reflect/jvm/internal/impl/name/ClassId;[BLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->getClassId()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder$Request;->getClassId()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->reportClass(Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker$Default;->reportClass(Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$1;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$PackageVisibility;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$2;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedStaticVisibility;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$3;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$3;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaDescriptorVisibilities$3;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/java/JavaVisibilities$ProtectedAndPackage;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaIncompatibilityRulesOverridabilityCondition$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings$default(Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings$default(Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings(Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultJsr305Settings(Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultMigrationJsr305ReportLevelForGivenGlobal(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultMigrationJsr305ReportLevelForGivenGlobal(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getDefaultReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getJSPECIFY_ANNOTATIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getJSPECIFY_ANNOTATIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation$default(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation$default(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationSettingsKt;->getReportLevelForAnnotation(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;Lkotlin/KotlinVersion;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/KotlinVersion;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getReportLevelBefore()Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getReportLevelBefore()Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getSinceVersion()Lkotlin/KotlinVersion;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus;->getSinceVersion()Lkotlin/KotlinVersion;\nLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaNullabilityAnnotationsStatus$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->access$getDEFAULT$cp()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->getDisabledDefaultAnnotations()Z\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;->getDisabledDefaultAnnotations()Z\nLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nPLkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState$Companion$DEFAULT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Lkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->isDisabled()Z\nPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;->isDisabled()Z\nLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings$description$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings$description$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings$description$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/Jsr305Settings;)V\nLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStates;\nLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;-><init>(Ljava/util/Map;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;-><init>(Ljava/util/Map;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->get(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->get(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->getStates()Ljava/util/Map;\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;->getStates()Ljava/util/Map;\nLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/NullabilityAnnotationStatesImpl$cache$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/ReportLevel$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/UtilsKt;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/UtilsKt;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nPLkotlin/reflect/jvm/internal/impl/load/java/UtilsKt;->toDescriptorVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/Visibility;)Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;\nLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator$DoNothing;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;->recordClass(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache$1;->recordClass(Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;IILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage$default(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;IILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt;->childForClassOrPackage(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt$childForClassOrPackage$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt$childForClassOrPackage$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/ContextKt$childForClassOrPackage$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassOrPackageFragmentDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/load/java/components/SignaturePropagator;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaPropertyInitializerEvaluator;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/SupertypeLoopChecker;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/builtins/ReflectionTypes;Lkotlin/reflect/jvm/internal/impl/load/java/AnnotationTypeQualifierResolver;Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;Lkotlin/reflect/jvm/internal/impl/load/java/JavaModuleAnnotationsProvider;Lkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getFinder()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getFinder()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaClassesTracker()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaClassesTracker()Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassesTracker;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaResolverCache()Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaResolverCache()Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaTypeEnhancementState()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getJavaTypeEnhancementState()Lkotlin/reflect/jvm/internal/impl/load/java/JavaTypeEnhancementState;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinClassFinder()Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinClassFinder()Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinTypeChecker()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getKotlinTypeChecker()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getLookupTracker()Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getLookupTracker()Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getSourceElementFactory()Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getSourceElementFactory()Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings$Default;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;Z)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations$annotationDescriptors$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations$annotationDescriptors$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations$annotationDescriptors$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotations;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotationsKt;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotationsKt;->resolveAnnotations(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;)Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaAnnotationsKt;->resolveAnnotations(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;)Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->getPackageFragment(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->getPackageFragment(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;->isEmpty(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider$getPackageFragment$1;->invoke()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;Lkotlin/Lazy;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;Lkotlin/Lazy;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getComponents()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getComponents()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverComponents;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getTypeParameterResolver()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;->getTypeParameterResolver()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;I)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver$resolve$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver$resolve$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver$resolve$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaTypeParameterResolver;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;->setResolver(Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/SingleModuleClassResolver;->setResolver(Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver$EMPTY;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->recordLookup(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;->recordLookup(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope$kotlinScopes$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope$kotlinScopes$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope$kotlinScopes$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/JvmPackageScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getAdditionalSupertypeClassDescriptor$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getAdditionalSupertypeClassDescriptor$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getC$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getUnsubstitutedMemberScope$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->access$getUnsubstitutedMemberScope$p(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getDeclaredTypeParameters()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getDeclaredTypeParameters()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getJClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getJClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getKind()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getKind()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getTypeConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getUnsubstitutedMemberScope(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->getVisibility()Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isExpect()Z\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isExpect()Z\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isInner()Z\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;->isInner()Z\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getDeclarationDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getDeclarationDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getParameters()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor;->getParameters()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$LazyJavaClassTypeConstructor$parameters$1;->invoke()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$declaredParameters$1;->invoke()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$moduleAnnotations$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$moduleAnnotations$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$moduleAnnotations$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassDescriptor$scopeHolder$1;->invoke(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;ZLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$constructors$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$constructors$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$constructors$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$enumEntryIndex$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$enumEntryIndex$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$enumEntryIndex$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$generatedNestedClassNames$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$generatedNestedClassNames$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$generatedNestedClassNames$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClassIndex$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClassIndex$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClassIndex$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClasses$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClasses$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope$nestedClasses$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaClassMemberScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;->getMemberScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$binaryClasses$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$binaryClasses$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$binaryClasses$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$partToFacade$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$partToFacade$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$partToFacade$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$subPackages$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$subPackages$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment$subPackages$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$getJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$getJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$resolveKotlinBinaryClass(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->access$resolveKotlinBinaryClass(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->findClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->findClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getOwnerDescriptor()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;->getOwnerDescriptor()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageFragment;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getJavaClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getJavaClass()Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->getName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;->hashCode()I\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$Found;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$NotFound;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$KotlinClassLookupResult$SyntheticClass;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$classes$1;->invoke(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$FindClassRequest;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/util/Set;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaPackageScope$knownClassNamesInPackage$1;->invoke()Ljava/util/Set;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->getC()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;->getC()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$allDescriptors$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$allDescriptors$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$allDescriptors$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$classNamesLazy$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$classNamesLazy$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$classNamesLazy$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredField$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredField$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredField$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredFunctions$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredFunctions$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredFunctions$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredMemberIndex$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredMemberIndex$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$declaredMemberIndex$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functionNamesLazy$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functionNamesLazy$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functionNamesLazy$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functions$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functions$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$functions$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$properties$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$properties$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$properties$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$propertyNamesLazy$2;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$propertyNamesLazy$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope$propertyNamesLazy$2;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaScope;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticClassScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticClassScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticClassScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;Lkotlin/reflect/jvm/internal/impl/load/java/descriptors/JavaClassDescriptor;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticScope;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/descriptors/LazyJavaStaticScope;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/JavaTypeResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/JavaTypeResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/JavaTypeResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaResolverContext;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/TypeParameterResolver;)V\nLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/RawProjectionComputer;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/RawProjectionComputer;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/lazy/types/RawProjectionComputer;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElement;\nLkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaAnnotationOwner;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClass;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaClassifier;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaElement;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaModifierListOwner;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaNamedElement;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaPackage;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/JavaTypeParameterListOwner;\nLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/load/java/structure/LightClassOriginKind;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/JavaResolverSettings;)V\nLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;\nHSPLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;)V\nPLkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/SignatureEnhancement;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/typeEnhancement/JavaTypeEnhancement;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader$storage$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader$storage$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader$storage$1;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationLoader;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationLoader;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/AbstractBinaryClassAnnotationLoader;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;->setJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;->setJvmMetadataVersion(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImplKt;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImplKt;->createBinaryClassAnnotationAndConstantLoader(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImplKt;->createBinaryClassAnnotationAndConstantLoader(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/BinaryClassAnnotationAndConstantLoaderImpl;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;->createModuleData(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion;->createModuleData(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializationComponentsForJava()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializationComponentsForJava()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava$Companion$ModuleData;->getDeserializedDescriptorResolver()Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeDeserializationComponentsForJava(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeDeserializationComponentsForJava(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider$default(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt;->makeLazyJavaPackageFragmentProvider(Lkotlin/reflect/jvm/internal/impl/load/java/JavaClassFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/load/java/sources/JavaSourceElementFactory;Lkotlin/reflect/jvm/internal/impl/load/java/lazy/ModuleClassResolver;Lkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;)Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt$makeLazyJavaPackageFragmentProvider$javaResolverComponents$1;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt$makeLazyJavaPackageFragmentProvider$javaResolverComponents$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJavaKt$makeLazyJavaPackageFragmentProvider$javaResolverComponents$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializationComponentsForJava;)V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaClassDataFinder;-><init>(Lkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;Lkotlin/reflect/jvm/internal/impl/load/kotlin/DeserializedDescriptorResolver;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/JavaFlexibleTypeDeserializer;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinClassFinder$Result$ClassFileContent;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinaryClass$AnnotationVisitor;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/KotlinJvmBinarySourceElement;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/PackagePartProvider$Empty;-><init>()V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;-><init>(Ljava/lang/String;II)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;-><init>(Ljava/lang/String;II)V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind;\nLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader$Kind$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeader(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeader(Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;)Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeaderWithDefaultMetadataVersion()Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader;\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->createHeaderWithDefaultMetadataVersion()Lkotlin/reflect/jvm/internal/impl/load/kotlin/header/KotlinClassHeader;\nHSPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->visitEnd()V\nPLkotlin/reflect/jvm/internal/impl/load/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor;->visitEnd()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;-><init>(Ljava/lang/String;II)V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$Value$Type;-><init>(Ljava/lang/String;II)V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Argument$ValueOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$AnnotationOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ClassOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ConstructorOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Contract$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ContractOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntry$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$EnumEntryOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$FunctionOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Package$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$PackageOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$PropertyOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;-><init>(Ljava/lang/String;II)V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameter$Variance;-><init>(Ljava/lang/String;II)V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeParameterOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTable$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$TypeTableOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameter$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$ValueParameterOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable;\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTable$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$VersionRequirementTableOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V\nPLkotlin/reflect/jvm/internal/impl/metadata/builtins/BuiltInsProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V\nLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;-><init>([I)V\nPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;-><init>([I)V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMajor()I\nPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMajor()I\nHSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMinor()I\nPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;->getMinor()I\nLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf;->registerAllExtensions(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature;\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignature$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmFieldSignatureOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature;\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignature$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmMethodSignatureOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->getDefaultInstance()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->initFields()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature;->initFields()V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature$1;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignature$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/JvmProtoBuf$JvmPropertySignatureOrBuilder;\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;-><init>([I)V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;-><init>([I)V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;-><init>([IZ)V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;-><init>([IZ)V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->next()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;->next()Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->getEXTENSION_REGISTRY()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->getEXTENSION_REGISTRY()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nLkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)V\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->asSingleFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->asSingleFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->createNestedClassId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->createNestedClassId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getRelativeClassName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getRelativeClassName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getShortClassName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getShortClassName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->hashCode()I\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->isLocal()Z\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->isLocal()Z\nHSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/ClassId;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/name/FqName;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;-><init>(Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/name/FqName;-><init>(Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V\nPLkotlin/reflect/jvm/internal/impl/name/FqName;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nPLkotlin/reflect/jvm/internal/impl/name/FqName;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->asString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->asString()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->equals(Ljava/lang/Object;)Z\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->hashCode()I\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->isRoot()Z\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->isRoot()Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->pathSegments()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->pathSegments()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->toString()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toUnsafe()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->toUnsafe()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqName;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/FqName;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><init>(Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><init>(Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><init>(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><init>(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;-><init>(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->asString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->asString()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->compute()V\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->compute()V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->equals(Ljava/lang/Object;)Z\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->hashCode()I\nHPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->hashCode()I\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->isRoot()Z\nHPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->isRoot()Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->pathSegments()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->pathSegments()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortNameOrSpecial()Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->startsWith(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toSafe()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toSafe()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toString()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->findValueForMostSpecificFqname(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Map;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->findValueForMostSpecificFqname(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Map;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isChildOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isChildOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->parentOrNull(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->parentOrNull(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->tail(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->tail(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nLkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;-><init>(Ljava/lang/String;Z)V\nPLkotlin/reflect/jvm/internal/impl/name/Name;-><init>(Ljava/lang/String;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->asString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/Name;->asString()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->equals(Ljava/lang/Object;)Z\nPLkotlin/reflect/jvm/internal/impl/name/Name;->equals(Ljava/lang/Object;)Z\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->getIdentifier()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/Name;->getIdentifier()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->guessByFirstCharacter(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/Name;->guessByFirstCharacter(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/name/Name;->hashCode()I\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->identifier(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/Name;->identifier(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->isSpecial()Z\nPLkotlin/reflect/jvm/internal/impl/name/Name;->isSpecial()Z\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->special(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name;\nPLkotlin/reflect/jvm/internal/impl/name/Name;->special(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name;\nHSPLkotlin/reflect/jvm/internal/impl/name/Name;->toString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/name/Name;->toString()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/name/SpecialNames;\nHSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->isSafeIdentifier(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z\nPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->isSafeIdentifier(Lkotlin/reflect/jvm/internal/impl/name/Name;)Z\nLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getArray()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getArray()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ANNOTATION_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ANNOTATION_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COLLECTIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COLLECTIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COROUTINES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COROUTINES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ENUMS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ENUMS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_KOTLIN_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_KOTLIN_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_RANGES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_RANGES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_REFLECT_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_REFLECT_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKClass()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKClass()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKFunction()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKFunction()Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$inverseMap(Ljava/util/Map;)Ljava/util/Map;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$inverseMap(Ljava/util/Map;)Ljava/util/Map;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nHSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId;\nLkotlin/reflect/jvm/internal/impl/protobuf/AbstractMessageLite;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractMessageLite;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractMessageLite;-><init>()V\nLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/AbstractParser;-><init>()V\nLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ByteString;-><init>()V\nLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;-><init>(I)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;-><init>(I)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->add(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->add(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->getEmptyRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->getEmptyRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->newInstance()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;->newInstance()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;-><init>(Ljava/lang/Object;I)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;-><init>(Ljava/lang/Object;I)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite$ObjectIntPair;->hashCode()I\nLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;-><init>(I)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;-><init>(I)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->makeImmutable()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->makeImmutable()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->newFieldSet()Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;\nPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->newFieldSet()Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;\nLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet$FieldDescriptorLite;\nLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newRepeatedGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZLjava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;\nPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newRepeatedGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZLjava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newSingularGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;\nPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite;->newSingularGeneratedExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;\nLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;-><init>()V\nLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessageOrBuilder;\nLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZZ)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLiteMap;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;ZZ)V\nLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;Ljava/lang/Class;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtensionDescriptor;Ljava/lang/Class;)V\nLkotlin/reflect/jvm/internal/impl/protobuf/Internal$EnumLite;\nLkotlin/reflect/jvm/internal/impl/protobuf/InvalidProtocolBufferException;\nLkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString;-><init>([B)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString;-><init>([B)V\nLkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;\nLkotlin/reflect/jvm/internal/impl/protobuf/MessageLiteOrBuilder;\nLkotlin/reflect/jvm/internal/impl/protobuf/Parser;\nLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;-><init>(I)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;-><init>(I)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getNumArrayEntries()I\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getNumArrayEntries()I\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getOverflowEntries()Ljava/lang/Iterable;\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getOverflowEntries()Ljava/lang/Iterable;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->isImmutable()Z\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->isImmutable()Z\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->makeImmutable()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->makeImmutable()V\nLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;-><init>(I)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;-><init>(I)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->makeImmutable()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->makeImmutable()V\nLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->access$700()Ljava/util/Iterator;\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->access$700()Ljava/util/Iterator;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->iterable()Ljava/lang/Iterable;\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet;->iterable()Ljava/lang/Iterable;\nLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->hasNext()Z\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->hasNext()Z\nLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->iterator()Ljava/util/Iterator;\nPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->iterator()Ljava/util/Iterator;\nLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;-><init>(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;I)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;-><init>(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;I)V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;-><init>(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;II)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;-><init>(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;II)V\nLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$1;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$1;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$1;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$2;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$2;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$2;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$3;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$3;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$3;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$4;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$4;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType$4;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;)V\nLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;-><init>(Ljava/lang/Object;ILjava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$JavaType;-><init>(Ljava/lang/Object;ILjava/lang/String;)V\nLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;-><init>(Ljava/lang/String;IZI)V\nPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;-><init>(Ljava/lang/String;IZI)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;-><init>(Ljava/lang/String;IZZ)V\nPLkotlin/reflect/jvm/internal/impl/renderer/AnnotationArgumentsRenderingPolicy;-><init>(Ljava/lang/String;IZZ)V\nLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy;\nLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$FULLY_QUALIFIED;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SHORT;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy$SOURCE_CODE_QUALIFIED;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;->withOptions(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion;->withOptions(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer;\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITHOUT_SUPERTYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_MODIFIERS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$COMPACT_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$DEBUG_TEXT$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$HTML$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$ONLY_NAMES_WITH_SHORT_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$Companion$SHORT_NAMES_IN_TYPES$1;->invoke(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler;\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRenderer$ValueParametersHandler$DEFAULT;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->access$renderName(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->access$renderName(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->escape(Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->escape(Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getBoldOnlyForNamesInHtml()Z\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getBoldOnlyForNamesInHtml()Z\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getWithDefinedIn()Z\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->getWithDefinedIn()Z\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->render(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->render(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/lang/StringBuilder;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/name/Name;Z)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;->renderName(Lkotlin/reflect/jvm/internal/impl/name/Name;Z)Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;-><init>(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;-><init>(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/StringBuilder;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$RenderDeclarationDescriptorVisitor;->visitModuleDeclaration(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Ljava/lang/StringBuilder;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$functionTypeAnnotationsRenderer$2;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$functionTypeAnnotationsRenderer$2;-><init>(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl$functionTypeAnnotationsRenderer$2;-><init>(Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererImpl;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;-><init>(ILjava/lang/String;Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;-><init>(ILjava/lang/String;Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->values()[Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;->values()[Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier;\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererModifier$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptions;\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getBoldOnlyForNamesInHtml()Z\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getBoldOnlyForNamesInHtml()Z\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getTextFormat()Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getWithDefinedIn()Z\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->getWithDefinedIn()Z\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->isLocked()Z\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->isLocked()Z\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->lock()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->lock()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setClassifierNamePolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setClassifierNamePolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ClassifierNamePolicy;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setDebugMode(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setDebugMode(Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setModifiers(Ljava/util/Set;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setModifiers(Ljava/util/Set;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setParameterNameRenderingPolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setParameterNameRenderingPolicy(Lkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setReceiverAfterName(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setReceiverAfterName(Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setRenderCompanionObjectName(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setRenderCompanionObjectName(Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setStartFromName(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setStartFromName(Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setTextFormat(Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setTextFormat(Lkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithDefinedIn(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithDefinedIn(Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutSuperTypes(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutSuperTypes(Z)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutTypeParameters(Z)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;->setWithoutTypeParameters(Z)V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$defaultParameterValueRenderer$2;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;-><init>(Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;-><init>(Ljava/lang/Object;Lkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl;)V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;->beforeChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)Z\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$property$$inlined$vetoable$1;->beforeChange(Lkotlin/reflect/KProperty;Ljava/lang/Object;Ljava/lang/Object;)Z\nLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/DescriptorRendererOptionsImpl$typeNormalizer$2;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->getInternalAnnotationsForResolve()Ljava/util/Set;\nPLkotlin/reflect/jvm/internal/impl/renderer/ExcludedTypeAnnotations;->getInternalAnnotationsForResolve()Ljava/util/Set;\nLkotlin/reflect/jvm/internal/impl/renderer/KeywordStringsGenerated;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/KeywordStringsGenerated;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/KeywordStringsGenerated;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/renderer/OverrideRenderingPolicy;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/renderer/ParameterNameRenderingPolicy;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/renderer/PropertyAccessorRenderingPolicy;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;-><init>(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat;-><init>(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$HTML;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$HTML;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$HTML;-><init>()V\nLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;->escape(Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/renderer/RenderingFormat$PLAIN;->escape(Ljava/lang/String;)Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/renderer/RenderingUtilsKt;\nHSPLkotlin/reflect/jvm/internal/impl/renderer/RenderingUtilsKt;->render(Lkotlin/reflect/jvm/internal/impl/name/Name;)Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/renderer/RenderingUtilsKt;->render(Lkotlin/reflect/jvm/internal/impl/name/Name;)Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModuleOrNull(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getContainingModuleOrNull(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqName(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameSafeIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameSafeIfPossible(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameUnsafe(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->getFqNameUnsafe(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isAnonymousObject(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isAnonymousObject(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isClass(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isClass(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isDescriptorWithLocalVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isDescriptorWithLocalVisibility(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isKindOf(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;)Z\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isKindOf(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ClassKind;)Z\nHSPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isLocal(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nPLkotlin/reflect/jvm/internal/impl/resolve/DescriptorUtils;->isLocal(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nLkotlin/reflect/jvm/internal/impl/resolve/ExternalOverridabilityCondition;\nLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;-><init>(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker$TypeConstructorEquality;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;-><init>(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker$TypeConstructorEquality;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->createWithTypeRefiner(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;\nPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;->createWithTypeRefiner(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil;\nLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil$1;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/OverridingUtil$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProvider;\nLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;->getResolutionAnchorIfAny(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/resolve/ResolutionAnchorProviderKt;->getResolutionAnchorIfAny(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getKotlinTypeRefiner(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getKotlinTypeRefiner(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/resolve/descriptorUtil/DescriptorUtilsKt;->getModule(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nLkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;-><init>(Ljava/util/List;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;-><init>(Ljava/util/List;)V\nLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;-><init>(Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/load/java/components/JavaResolverCache;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JavaDescriptorResolver;->getPackageFragmentProvider()Lkotlin/reflect/jvm/internal/impl/load/java/lazy/LazyJavaPackageFragmentProvider;\nLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;-><init>(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;-><init>(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->get(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->get(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getDesc()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getDesc()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getJavaKeywordName()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getJavaKeywordName()Ljava/lang/String;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getPrimitiveType()Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getPrimitiveType()Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getWrapperFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getWrapperFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;\nLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;\nPLkotlin/reflect/jvm/internal/impl/resolve/jvm/SyntheticJavaPartsProvider$Companion;->getEMPTY()Lkotlin/reflect/jvm/internal/impl/resolve/jvm/CompositeSyntheticJavaPartsProvider;\nLkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;\nLkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolverImpl;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolverImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Ljava/lang/Iterable;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolverImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Ljava/lang/Iterable;)V\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/AbstractScopeAdapter;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;-><init>(Ljava/lang/String;[Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;-><init>(Ljava/lang/String;[Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope;->getContributedClassifier(Lkotlin/reflect/jvm/internal/impl/name/Name;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupLocation;)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->create(Ljava/lang/String;Ljava/lang/Iterable;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->create(Ljava/lang/String;Ljava/lang/Iterable;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->createOrSingle$descriptors(Ljava/lang/String;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/ChainedMemberScope$Companion;->createOrSingle$descriptors(Ljava/lang/String;Ljava/util/List;)Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/InnerClassesScopeWrapper;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/InnerClassesScopeWrapper;-><init>(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/InnerClassesScopeWrapper;-><init>(Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;)V\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;->getWorkerScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter;->getWorkerScope()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/LazyScopeAdapter$lazyScope$1;->invoke()Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope$Empty;-><init>()V\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScopeImpl;\nHSPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScopeImpl;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScopeImpl;-><init>()V\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/ResolutionScope;\nLkotlin/reflect/jvm/internal/impl/resolve/scopes/receivers/ReceiverValue;\nLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;-><init>(Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;->getExtensionRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nPLkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;->getExtensionRegistry()Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->collectPackageFragments(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/util/Collection;)V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->getFinder()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->getFinder()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;->setComponents(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider;)V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AbstractDeserializedPackageFragmentProvider$fragments$1;->invoke(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentDescriptor;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoaderImpl;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoaderImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoaderImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/SerializerExtensionProtocol;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationDeserializer;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationDeserializer;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationDeserializer;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationLoader;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$classes$1;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$classes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer$classes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDeserializer;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->getDEFAULT()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion;->getDEFAULT()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion$DEFAULT$1;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion$DEFAULT$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer$Companion$DEFAULT$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;)V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassDataFinder;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotationAndConstantLoader;Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;Lkotlin/reflect/jvm/internal/impl/incremental/components/LookupTracker;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;Ljava/lang/Iterable;Lkotlin/reflect/jvm/internal/impl/descriptors/NotFoundClasses;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ContractDeserializer;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/AdditionalClassPartsProvider;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentDeclarationFilter;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;Lkotlin/reflect/jvm/internal/impl/resolve/sam/SamConversionResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/deserialization/PlatformDependentTypeTransformer;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getConfiguration()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getConfiguration()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getModuleDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getModuleDescriptor()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;->getStorageManager()Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getBinaryVersion()Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getBinaryVersion()Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedClassDataFinder;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedClassDataFinder;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializedClassDataFinder;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/PackageFragmentProvider;)V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/EnumEntriesDeserializationSupport;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter$1;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ErrorReporter$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/FlexibleTypeDeserializer$ThrowException;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/JvmEnumEntriesDeserializationSupport;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/KotlinMetadataFinder;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings;\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/LocalClassifierTypeSettings$Default;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInSerializerProtocol;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader;\nHSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader;-><init>()V\nLkotlin/reflect/jvm/internal/impl/serialization/deserialization/descriptors/DeserializedContainerSource;\nLkotlin/reflect/jvm/internal/impl/storage/CacheWithNotNullValues;\nLkotlin/reflect/jvm/internal/impl/storage/CacheWithNullableValues;\nLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;\nHSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;-><init>(Ljava/util/concurrent/locks/Lock;)V\nPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;-><init>(Ljava/util/concurrent/locks/Lock;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;-><init>(Ljava/util/concurrent/locks/Lock;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;-><init>(Ljava/util/concurrent/locks/Lock;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->lock()V\nPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->lock()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->unlock()V\nPLkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;->unlock()V\nLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;\nHSPLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;-><init>()V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><init>(Ljava/lang/String;Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><init>(Ljava/lang/String;Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><init>(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/SimpleLock;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><init>(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/SimpleLock;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->compute(Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->compute(Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNotNullValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNotNullValues;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNotNullValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNotNullValues;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNullableValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNullableValues;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createCacheWithNullableValues()Lkotlin/reflect/jvm/internal/impl/storage/CacheWithNullableValues;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValueWithPostCompute(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createLazyValueWithPostCompute(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunction(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createMemoizedFunctionWithNullableValues(Lkotlin/jvm/functions/Function1;Ljava/util/concurrent/ConcurrentMap;)Lkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createNullableLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NullableLazyValue;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createNullableLazyValue(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/impl/storage/NullableLazyValue;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createRecursionTolerantLazyValue(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;->createRecursionTolerantLazyValue(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$1;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$1;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$1;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;Lkotlin/reflect/jvm/internal/impl/storage/EmptySimpleLock;)V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$4;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$4;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$4;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$5;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$5;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$5;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNotNullValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentHashMap;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction;->computeIfAbsent(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$CacheWithNullableValuesBasedOnMemoizedFunction$1;->invoke(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy$1;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$ExceptionHandlingStrategy$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->access$400(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Lkotlin/jvm/functions/Function0;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->access$400(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;)Lkotlin/jvm/functions/Function0;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->hashCode()I\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->invoke()Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->postCompute(Ljava/lang/Object;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->postCompute(Ljava/lang/Object;)V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;->invoke()Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValue;->invoke()Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunction;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Ljava/util/concurrent/ConcurrentMap;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$MapBasedMemoizedFunctionToNotNull;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;-><init>(Ljava/lang/String;I)V\nPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$NotValue;-><init>(Ljava/lang/String;I)V\nLkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNotNull;\nLkotlin/reflect/jvm/internal/impl/storage/MemoizedFunctionToNullable;\nLkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;\nLkotlin/reflect/jvm/internal/impl/storage/NullableLazyValue;\nLkotlin/reflect/jvm/internal/impl/storage/SimpleLock;\nHSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->simpleLock(Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;\nPLkotlin/reflect/jvm/internal/impl/storage/SimpleLock$Companion;->simpleLock(Ljava/lang/Runnable;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/storage/DefaultSimpleLock;\nLkotlin/reflect/jvm/internal/impl/storage/StorageKt;\nHSPLkotlin/reflect/jvm/internal/impl/storage/StorageKt;->getValue(Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/storage/StorageKt;->getValue(Lkotlin/reflect/jvm/internal/impl/storage/NotNullLazyValue;Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/storage/StorageManager;\nLkotlin/reflect/jvm/internal/impl/types/AbstractClassTypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractClassTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractClassTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nLkotlin/reflect/jvm/internal/impl/types/AbstractStubType;\nLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$1;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$1;-><init>(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V\nLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$2;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$3;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$3;-><init>(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor$supertypes$3;-><init>(Lkotlin/reflect/jvm/internal/impl/types/AbstractTypeConstructor;)V\nLkotlin/reflect/jvm/internal/impl/types/AbstractTypePreparator;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypePreparator;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypePreparator;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/AbstractTypeRefiner;\nHSPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeRefiner;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/AbstractTypeRefiner;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;\nHSPLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Ljava/util/List;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nPLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassDescriptor;Ljava/util/List;Ljava/util/Collection;Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;->getParameters()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/types/ClassTypeConstructorImpl;->getParameters()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/types/ClassifierBasedTypeConstructor;->hashCode()I\nLkotlin/reflect/jvm/internal/impl/types/CustomTypeParameter;\nLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;\nHSPLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/DefaultTypeAttributeTranslator;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/DefinitelyNotNullType;\nLkotlin/reflect/jvm/internal/impl/types/DelegatingSimpleType;\nHSPLkotlin/reflect/jvm/internal/impl/types/DelegatingSimpleType;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/DelegatingSimpleType;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;\nHSPLkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/FlexibleType;\nLkotlin/reflect/jvm/internal/impl/types/FlexibleTypesKt;\nHSPLkotlin/reflect/jvm/internal/impl/types/FlexibleTypesKt;->isFlexible(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nPLkotlin/reflect/jvm/internal/impl/types/FlexibleTypesKt;->isFlexible(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nLkotlin/reflect/jvm/internal/impl/types/IntersectionTypeConstructor;\nLkotlin/reflect/jvm/internal/impl/types/KotlinType;\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinType;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/KotlinType;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinType;->hashCode()I\nPLkotlin/reflect/jvm/internal/impl/types/KotlinType;->hashCode()I\nLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType$default(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType$default(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleType(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleTypeWithNonTrivialMemberScope(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory;->simpleTypeWithNonTrivialMemberScope(Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeFactory$EMPTY_REFINED_TYPE_FACTORY$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/KotlinTypeKt;\nHSPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeKt;->isError(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nPLkotlin/reflect/jvm/internal/impl/types/KotlinTypeKt;->isError(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nLkotlin/reflect/jvm/internal/impl/types/LazyWrappedType;\nHSPLkotlin/reflect/jvm/internal/impl/types/LazyWrappedType;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V\nPLkotlin/reflect/jvm/internal/impl/types/LazyWrappedType;-><init>(Lkotlin/reflect/jvm/internal/impl/storage/StorageManager;Lkotlin/jvm/functions/Function0;)V\nLkotlin/reflect/jvm/internal/impl/types/SimpleType;\nHSPLkotlin/reflect/jvm/internal/impl/types/SimpleType;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/SimpleType;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;\nHSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)V\nPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Ljava/util/List;ZLkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getArguments()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getArguments()Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->getConstructor()Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->isMarkedNullable()Z\nPLkotlin/reflect/jvm/internal/impl/types/SimpleTypeImpl;->isMarkedNullable()Z\nLkotlin/reflect/jvm/internal/impl/types/SpecialTypesKt;\nHSPLkotlin/reflect/jvm/internal/impl/types/SpecialTypesKt;->isDefinitelyNotNullType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nPLkotlin/reflect/jvm/internal/impl/types/SpecialTypesKt;->isDefinitelyNotNullType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nLkotlin/reflect/jvm/internal/impl/types/TypeAttributeTranslator;\nLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;-><init>(Ljava/util/List;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;-><init>(Ljava/util/List;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->access$getEmpty$cp()Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;\nPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes;->access$getEmpty$cp()Lkotlin/reflect/jvm/internal/impl/types/TypeAttributes;\nLkotlin/reflect/jvm/internal/impl/types/TypeAttributes$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeAttributes$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/types/TypeConstructor;\nLkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;-><init>(ZZ)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;-><init>(ZZ)V\nLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;-><init>(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;-><init>(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;-><init>(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;-><init>(Lkotlin/reflect/jvm/internal/impl/types/ErasureProjectionComputer;Lkotlin/reflect/jvm/internal/impl/types/TypeParameterErasureOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$erroneousErasedBound$2;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$erroneousErasedBound$2;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$erroneousErasedBound$2;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V\nLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$getErasedUpperBound$1;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$getErasedUpperBound$1;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser$getErasedUpperBound$1;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeParameterUpperBoundEraser;)V\nLkotlin/reflect/jvm/internal/impl/types/TypeUtils;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getDefaultTypeProjections(Ljava/util/List;)Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getDefaultTypeProjections(Ljava/util/List;)Ljava/util/List;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getTypeParameterDescriptorOrNull(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterDescriptor;\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->getTypeParameterDescriptorOrNull(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Lkotlin/reflect/jvm/internal/impl/descriptors/TypeParameterDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isNullableType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isNullableType(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isTypeParameter(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->isTypeParameter(Lkotlin/reflect/jvm/internal/impl/types/KotlinType;)Z\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/descriptors/ClassifierDescriptor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils;->makeUnsubstitutedType(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/impl/types/SimpleType;\nLkotlin/reflect/jvm/internal/impl/types/TypeUtils$SpecialType;\nHSPLkotlin/reflect/jvm/internal/impl/types/TypeUtils$SpecialType;-><init>(Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/types/TypeUtils$SpecialType;-><init>(Ljava/lang/String;)V\nLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;\nHSPLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;->unwrap()Lkotlin/reflect/jvm/internal/impl/types/UnwrappedType;\nPLkotlin/reflect/jvm/internal/impl/types/UnwrappedType;->unwrap()Lkotlin/reflect/jvm/internal/impl/types/UnwrappedType;\nLkotlin/reflect/jvm/internal/impl/types/WrappedType;\nHSPLkotlin/reflect/jvm/internal/impl/types/WrappedType;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/WrappedType;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker;\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeChecker$TypeConstructorEquality;\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator$Default;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->isRefinementNeededForModule(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Z\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner$Default;->isRefinementNeededForModule(Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;)Z\nLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;->getREFINER_CAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;\nPLkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefinerKt;->getREFINER_CAPABILITY()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleCapability;\nLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker;-><clinit>()V\nLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->getDefault()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeChecker$Companion;->getDefault()Lkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;\nLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;)V\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;-><init>(Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypePreparator;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->getKotlinTypeRefiner()Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nPLkotlin/reflect/jvm/internal/impl/types/checker/NewKotlinTypeCheckerImpl;->getKotlinTypeRefiner()Lkotlin/reflect/jvm/internal/impl/types/checker/KotlinTypeRefiner;\nLkotlin/reflect/jvm/internal/impl/types/checker/NewTypeVariableConstructor;\nLkotlin/reflect/jvm/internal/impl/types/checker/Ref;\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;-><init>(Lkotlin/reflect/jvm/internal/impl/name/Name;)V\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->getDebugText()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorEntity;->getDebugText()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorModuleDescriptor$builtIns$2;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorPropertyDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorPropertyDescriptor;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorPropertyDescriptor;-><init>()V\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;-><init>(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;-><init>(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)V\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->getDebugMessage()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;->getDebugMessage()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorType;-><init>(Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;Lkotlin/reflect/jvm/internal/impl/resolve/scopes/MemberScope;Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Z[Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;-><init>(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;->toString()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;->toString()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;-><init>(Ljava/lang/String;Ljava/lang/String;IZ)V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;-><init>(Ljava/lang/String;Ljava/lang/String;IZ)V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->getDebugMessage()Ljava/lang/String;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;->getDebugMessage()Ljava/lang/String;\nLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;Z[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;Z[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorScope(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScopeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorScope;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorType(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorType(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeConstructor(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeConstructor(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeConstructor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/TypeConstructor;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->createErrorTypeWithArguments(Lkotlin/reflect/jvm/internal/impl/types/error/ErrorTypeKind;Ljava/util/List;[Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/types/error/ErrorType;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorClass()Lkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorClass()Lkotlin/reflect/jvm/internal/impl/types/error/ErrorClassDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorModule()Lkotlin/reflect/jvm/internal/impl/descriptors/ModuleDescriptor;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorPropertyType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType;\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->getErrorPropertyType()Lkotlin/reflect/jvm/internal/impl/types/KotlinType;\nHSPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->isError(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nPLkotlin/reflect/jvm/internal/impl/types/error/ErrorUtils;->isError(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;)Z\nLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;\nHSPLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;-><init>(Ljava/util/List;)V\nPLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;-><init>(Ljava/util/List;)V\nHSPLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;->getTranslators()Ljava/util/List;\nPLkotlin/reflect/jvm/internal/impl/types/extensions/TypeAttributeTranslators;->getTranslators()Ljava/util/List;\nLkotlin/reflect/jvm/internal/impl/types/model/DefinitelyNotNullTypeMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/FlexibleTypeMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/IntersectionTypeConstructorMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/KotlinTypeMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/SimpleTypeMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/TypeArgumentListMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/TypeConstructorMarker;\nLkotlin/reflect/jvm/internal/impl/types/model/TypeParameterMarker;\nLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;\nHSPLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;->isEmpty()Z\nPLkotlin/reflect/jvm/internal/impl/util/AbstractArrayMapOwner;->isEmpty()Z\nLkotlin/reflect/jvm/internal/impl/util/ArrayMap;\nHSPLkotlin/reflect/jvm/internal/impl/util/ArrayMap;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/reflect/jvm/internal/impl/util/ArrayMap;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;\nHSPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;-><init>(Lkotlin/reflect/jvm/internal/impl/util/ArrayMap;)V\nPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;-><init>(Lkotlin/reflect/jvm/internal/impl/util/ArrayMap;)V\nHSPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->getArrayMap()Lkotlin/reflect/jvm/internal/impl/util/ArrayMap;\nPLkotlin/reflect/jvm/internal/impl/util/AttributeArrayOwner;->getArrayMap()Lkotlin/reflect/jvm/internal/impl/util/ArrayMap;\nLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;\nHSPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->getSize()I\nPLkotlin/reflect/jvm/internal/impl/util/EmptyArrayMap;->getSize()I\nLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper;\nLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;\nHSPLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/util/ModuleVisibilityHelper$EMPTY;-><init>()V\nLkotlin/reflect/jvm/internal/impl/util/TypeRegistry;\nHSPLkotlin/reflect/jvm/internal/impl/util/TypeRegistry;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/util/TypeRegistry;-><init>()V\nLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;\nHSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->addIfNotNull(Ljava/util/Collection;Ljava/lang/Object;)V\nPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->addIfNotNull(Ljava/util/Collection;Ljava/lang/Object;)V\nHSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->mapToIndex(Ljava/lang/Iterable;)Ljava/util/Map;\nPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->mapToIndex(Ljava/lang/Iterable;)Ljava/util/Map;\nHSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashMapWithExpectedSize(I)Ljava/util/HashMap;\nPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashMapWithExpectedSize(I)Ljava/util/HashMap;\nHSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashSetWithExpectedSize(I)Ljava/util/HashSet;\nPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashSetWithExpectedSize(I)Ljava/util/HashSet;\nLkotlin/reflect/jvm/internal/impl/utils/DeserializationHelpersKt;\nHSPLkotlin/reflect/jvm/internal/impl/utils/DeserializationHelpersKt;->jvmMetadataVersionOrDefault(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nPLkotlin/reflect/jvm/internal/impl/utils/DeserializationHelpersKt;->jvmMetadataVersionOrDefault(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration;)Lkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmMetadataVersion;\nLkotlin/reflect/jvm/internal/impl/utils/SmartList;\nHSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/utils/SmartList;-><init>()V\nHSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->add(Ljava/lang/Object;)Z\nPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->add(Ljava/lang/Object;)Z\nHSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->size()I\nPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->size()I\nHSPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/utils/SmartList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;\nHSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;-><clinit>()V\nPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;-><clinit>()V\nHSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->escapeNull(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->escapeNull(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->unescapeThrowable(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues;->unescapeThrowable(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/reflect/jvm/internal/impl/utils/WrappedValues$1;\nHSPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues$1;-><init>()V\nPLkotlin/reflect/jvm/internal/impl/utils/WrappedValues$1;-><init>()V\nLkotlin/reflect/jvm/internal/impl/utils/WrappedValues$ThrowableWrapper;\nLkotlin/sequences/ConstrainedOnceSequence;\nHSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/Sequence;)V\nPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/Sequence;)V\nHSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;\nPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;\nLkotlin/sequences/FilteringSequence;\nHSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V\nHPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V\nHSPLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1;\nPLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1;\nHSPLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z\nPLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z\nHSPLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence;\nPLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator;\nPLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator;\nLkotlin/sequences/FilteringSequence$iterator$1;\nHSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V\nHPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V\nHSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V\nHPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V\nHSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z\nHPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z\nHSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object;\nPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object;\nLkotlin/sequences/GeneratorSequence;\nHSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V\nHPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0;\nPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0;\nHSPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1;\nPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1;\nHSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;\nPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;\nLkotlin/sequences/GeneratorSequence$iterator$1;\nHSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V\nHPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V\nHSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V\nHPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V\nHSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z\nHPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z\nHSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object;\nHPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object;\nLkotlin/sequences/Sequence;\nLkotlin/sequences/SequenceBuilderIterator;\nHSPLkotlin/sequences/SequenceBuilderIterator;-><init>()V\nPLkotlin/sequences/SequenceBuilderIterator;-><init>()V\nHSPLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;\nPLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z\nHPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z\nHSPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;\nHPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;\nHSPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V\nHPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V\nHSPLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V\nPLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V\nHSPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlin/sequences/SequenceScope;\nHSPLkotlin/sequences/SequenceScope;-><init>()V\nHPLkotlin/sequences/SequenceScope;-><init>()V\nLkotlin/sequences/SequencesKt;\nLkotlin/sequences/SequencesKt__SequenceBuilderKt;\nHSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator;\nHPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator;\nHSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;\nHPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;\nLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;\nHSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;-><init>(Lkotlin/jvm/functions/Function2;)V\nHPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;-><init>(Lkotlin/jvm/functions/Function2;)V\nHSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;\nPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;\nLkotlin/sequences/SequencesKt__SequencesJVMKt;\nLkotlin/sequences/SequencesKt__SequencesKt;\nHSPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence;\nPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;\nPLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;\nHSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(Ljava/util/Iterator;)V\nPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(Ljava/util/Iterator;)V\nHSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;\nPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;\nLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;\nHSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;-><init>(Ljava/lang/Object;)V\nHPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;-><init>(Ljava/lang/Object;)V\nHSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object;\nPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object;\nLkotlin/sequences/SequencesKt___SequencesJvmKt;\nLkotlin/sequences/SequencesKt___SequencesKt;\nHPLkotlin/sequences/SequencesKt___SequencesKt;->filter(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;\nHPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object;\nHPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object;\nHPLkotlin/sequences/SequencesKt___SequencesKt;->map(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;\nPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;\nLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;\nHSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><clinit>()V\nPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><clinit>()V\nHSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><init>()V\nPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><init>()V\nHSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;\nHPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;\nHSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlin/sequences/TransformingSequence;\nHSPLkotlin/sequences/TransformingSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V\nHPLkotlin/sequences/TransformingSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence;\nPLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence;\nHSPLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1;\nPLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1;\nHSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator;\nPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator;\nLkotlin/sequences/TransformingSequence$iterator$1;\nHSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/TransformingSequence;)V\nHPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/TransformingSequence;)V\nHSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z\nPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z\nHSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;\nPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;\nLkotlin/text/CharsKt;\nLkotlin/text/CharsKt__CharJVMKt;\nHSPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I\nHPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I\nHSPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z\nHPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z\nLkotlin/text/CharsKt__CharKt;\nLkotlin/text/Charsets;\nHSPLkotlin/text/Charsets;-><clinit>()V\nPLkotlin/text/Charsets;-><clinit>()V\nHSPLkotlin/text/Charsets;-><init>()V\nPLkotlin/text/Charsets;-><init>()V\nLkotlin/text/MatchGroup;\nHSPLkotlin/text/MatchGroup;-><init>(Ljava/lang/String;Lkotlin/ranges/IntRange;)V\nPLkotlin/text/MatchGroup;-><init>(Ljava/lang/String;Lkotlin/ranges/IntRange;)V\nHSPLkotlin/text/MatchGroup;->getValue()Ljava/lang/String;\nPLkotlin/text/MatchGroup;->getValue()Ljava/lang/String;\nLkotlin/text/MatchGroupCollection;\nLkotlin/text/MatchNamedGroupCollection;\nLkotlin/text/MatchResult;\nLkotlin/text/MatcherMatchResult;\nHSPLkotlin/text/MatcherMatchResult;-><init>(Ljava/util/regex/Matcher;Ljava/lang/CharSequence;)V\nPLkotlin/text/MatcherMatchResult;-><init>(Ljava/util/regex/Matcher;Ljava/lang/CharSequence;)V\nHSPLkotlin/text/MatcherMatchResult;->access$getMatchResult(Lkotlin/text/MatcherMatchResult;)Ljava/util/regex/MatchResult;\nPLkotlin/text/MatcherMatchResult;->access$getMatchResult(Lkotlin/text/MatcherMatchResult;)Ljava/util/regex/MatchResult;\nHSPLkotlin/text/MatcherMatchResult;->getGroupValues()Ljava/util/List;\nPLkotlin/text/MatcherMatchResult;->getGroupValues()Ljava/util/List;\nHSPLkotlin/text/MatcherMatchResult;->getGroups()Lkotlin/text/MatchGroupCollection;\nPLkotlin/text/MatcherMatchResult;->getGroups()Lkotlin/text/MatchGroupCollection;\nHSPLkotlin/text/MatcherMatchResult;->getRange()Lkotlin/ranges/IntRange;\nPLkotlin/text/MatcherMatchResult;->getRange()Lkotlin/ranges/IntRange;\nLkotlin/text/MatcherMatchResult$groupValues$1;\nHSPLkotlin/text/MatcherMatchResult$groupValues$1;-><init>(Lkotlin/text/MatcherMatchResult;)V\nPLkotlin/text/MatcherMatchResult$groupValues$1;-><init>(Lkotlin/text/MatcherMatchResult;)V\nHSPLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/Object;\nPLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/Object;\nHSPLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/String;\nPLkotlin/text/MatcherMatchResult$groupValues$1;->get(I)Ljava/lang/String;\nLkotlin/text/MatcherMatchResult$groups$1;\nHSPLkotlin/text/MatcherMatchResult$groups$1;-><init>(Lkotlin/text/MatcherMatchResult;)V\nPLkotlin/text/MatcherMatchResult$groups$1;-><init>(Lkotlin/text/MatcherMatchResult;)V\nHSPLkotlin/text/MatcherMatchResult$groups$1;->get(I)Lkotlin/text/MatchGroup;\nPLkotlin/text/MatcherMatchResult$groups$1;->get(I)Lkotlin/text/MatchGroup;\nLkotlin/text/Regex;\nHSPLkotlin/text/Regex;-><clinit>()V\nPLkotlin/text/Regex;-><clinit>()V\nHSPLkotlin/text/Regex;-><init>(Ljava/lang/String;)V\nPLkotlin/text/Regex;-><init>(Ljava/lang/String;)V\nHSPLkotlin/text/Regex;-><init>(Ljava/util/regex/Pattern;)V\nPLkotlin/text/Regex;-><init>(Ljava/util/regex/Pattern;)V\nHSPLkotlin/text/Regex;->find(Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult;\nPLkotlin/text/Regex;->find(Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult;\nHSPLkotlin/text/Regex;->matches(Ljava/lang/CharSequence;)Z\nPLkotlin/text/Regex;->matches(Ljava/lang/CharSequence;)Z\nHSPLkotlin/text/Regex;->replace(Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/text/Regex;->replace(Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/String;\nLkotlin/text/Regex$Companion;\nHSPLkotlin/text/Regex$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/text/Regex$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/text/RegexKt;\nHSPLkotlin/text/RegexKt;->access$findNext(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Lkotlin/text/MatchResult;\nPLkotlin/text/RegexKt;->access$findNext(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Lkotlin/text/MatchResult;\nHSPLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;)Lkotlin/ranges/IntRange;\nPLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;)Lkotlin/ranges/IntRange;\nHSPLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;I)Lkotlin/ranges/IntRange;\nPLkotlin/text/RegexKt;->access$range(Ljava/util/regex/MatchResult;I)Lkotlin/ranges/IntRange;\nLkotlin/text/StringsKt;\nHSPLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;C)Z\nPLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;C)Z\nHSPLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z\nPLkotlin/text/StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z\nHSPLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/CharSequence;)Z\nPLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/CharSequence;)Z\nHSPLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;)Z\nPLkotlin/text/StringsKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;)Z\nHSPLkotlin/text/StringsKt;->equals(Ljava/lang/String;Ljava/lang/String;)Z\nPLkotlin/text/StringsKt;->equals(Ljava/lang/String;Ljava/lang/String;)Z\nHSPLkotlin/text/StringsKt;->indexOf$default(Ljava/lang/CharSequence;CII)I\nPLkotlin/text/StringsKt;->indexOf$default(Ljava/lang/CharSequence;CII)I\nHSPLkotlin/text/StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CII)I\nPLkotlin/text/StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CII)I\nHSPLkotlin/text/StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/text/StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt;->repeat(Ljava/lang/String;I)Ljava/lang/String;\nPLkotlin/text/StringsKt;->repeat(Ljava/lang/String;I)Ljava/lang/String;\nHSPLkotlin/text/StringsKt;->replace$default(Ljava/lang/String;CC)Ljava/lang/String;\nPLkotlin/text/StringsKt;->replace$default(Ljava/lang/String;CC)Ljava/lang/String;\nHSPLkotlin/text/StringsKt;->split$default(Ljava/lang/CharSequence;[C)Ljava/util/List;\nPLkotlin/text/StringsKt;->split$default(Ljava/lang/CharSequence;[C)Ljava/util/List;\nHSPLkotlin/text/StringsKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;)Z\nPLkotlin/text/StringsKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;)Z\nHSPLkotlin/text/StringsKt;->startsWith(Ljava/lang/String;Ljava/lang/String;I)Z\nPLkotlin/text/StringsKt;->startsWith(Ljava/lang/String;Ljava/lang/String;I)Z\nHSPLkotlin/text/StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/text/StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt;->substringAfterLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/text/StringsKt;->substringAfterLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt;->substringBeforeLast$1(Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/text/StringsKt;->substringBeforeLast$1(Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt;->substringBeforeLast$default(Ljava/lang/String;C)Ljava/lang/String;\nPLkotlin/text/StringsKt;->substringBeforeLast$default(Ljava/lang/String;C)Ljava/lang/String;\nLkotlin/text/StringsKt__AppendableKt;\nLkotlin/text/StringsKt__IndentKt;\nLkotlin/text/StringsKt__RegexExtensionsJVMKt;\nLkotlin/text/StringsKt__RegexExtensionsKt;\nLkotlin/text/StringsKt__StringBuilderJVMKt;\nLkotlin/text/StringsKt__StringBuilderKt;\nLkotlin/text/StringsKt__StringNumberConversionsJVMKt;\nLkotlin/text/StringsKt__StringNumberConversionsKt;\nHSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;)Ljava/lang/Integer;\nPLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;)Ljava/lang/Integer;\nHSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;I)Ljava/lang/Integer;\nPLkotlin/text/StringsKt__StringNumberConversionsKt;->toIntOrNull(Ljava/lang/String;I)Ljava/lang/Integer;\nLkotlin/text/StringsKt__StringsJVMKt;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([C)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([C)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String;\nHPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z\nPLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z\nPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;Z)Z\nPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;Z)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->getCASE_INSENSITIVE_ORDER(Lkotlin/jvm/internal/StringCompanionObject;)Ljava/util/Comparator;\nPLkotlin/text/StringsKt__StringsJVMKt;->getCASE_INSENSITIVE_ORDER(Lkotlin/jvm/internal/StringCompanionObject;)Ljava/util/Comparator;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z\nHPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->regionMatches(Ljava/lang/String;ILjava/lang/String;IIZ)Z\nPLkotlin/text/StringsKt__StringsJVMKt;->regionMatches(Ljava/lang/String;ILjava/lang/String;IIZ)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->repeat(Ljava/lang/CharSequence;I)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsJVMKt;->repeat(Ljava/lang/CharSequence;I)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->replace(Ljava/lang/String;CCZ)Ljava/lang/String;\nHPLkotlin/text/StringsKt__StringsJVMKt;->replace(Ljava/lang/String;CCZ)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z\nPLkotlin/text/StringsKt__StringsJVMKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;IZ)Z\nPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;IZ)Z\nHSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z\nHPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z\nLkotlin/text/StringsKt__StringsKt;\nHSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;CZILjava/lang/Object;)Z\nPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;CZILjava/lang/Object;)Z\nHSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z\nPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z\nHSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z\nPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z\nHSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z\nPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z\nHSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z\nPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z\nHSPLkotlin/text/StringsKt__StringsKt;->endsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z\nPLkotlin/text/StringsKt__StringsKt;->endsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z\nHSPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange;\nHPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange;\nHSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I\nHPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I\nHSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I\nPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I\nHSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I\nPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I\nHSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;CIZ)I\nHPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;CIZ)I\nHSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I\nHPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I\nHSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I\nPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I\nHSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I\nPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I\nHSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I\nHPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I\nHSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I\nPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I\nHSPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->requireNonNegativeLimit(I)V\nPLkotlin/text/StringsKt__StringsKt;->requireNonNegativeLimit(I)V\nHSPLkotlin/text/StringsKt__StringsKt;->split$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/String;IZ)Ljava/util/List;\nPLkotlin/text/StringsKt__StringsKt;->split$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/String;IZ)Ljava/util/List;\nHSPLkotlin/text/StringsKt__StringsKt;->split$default(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List;\nPLkotlin/text/StringsKt__StringsKt;->split$default(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List;\nHSPLkotlin/text/StringsKt__StringsKt;->split(Ljava/lang/CharSequence;[CZI)Ljava/util/List;\nPLkotlin/text/StringsKt__StringsKt;->split(Ljava/lang/CharSequence;[CZI)Ljava/util/List;\nHSPLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z\nPLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z\nHSPLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z\nPLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z\nHSPLkotlin/text/StringsKt__StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;\nHPLkotlin/text/StringsKt__StringsKt;->substringAfter$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->substringAfter(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHPLkotlin/text/StringsKt__StringsKt;->substringAfter(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast$default(Ljava/lang/String;CLjava/lang/String;ILjava/lang/Object;)Ljava/lang/String;\nHPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast$default(Ljava/lang/String;CLjava/lang/String;ILjava/lang/Object;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String;\nHPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;\nPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;\nLkotlin/text/StringsKt___StringsJvmKt;\nLkotlin/text/StringsKt___StringsKt;\nHSPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C\nHPLkotlin/text/StringsKt___StringsKt;->last(Ljava/lang/CharSequence;)C\nLkotlin/time/Duration;\nHSPLkotlin/time/Duration;-><clinit>()V\nPLkotlin/time/Duration;-><clinit>()V\nHSPLkotlin/time/Duration;->getInWholeMilliseconds-impl(J)J\nPLkotlin/time/Duration;->getInWholeMilliseconds-impl(J)J\nHSPLkotlin/time/Duration;->getInWholeSeconds-impl(J)J\nPLkotlin/time/Duration;->getInWholeSeconds-impl(J)J\nHSPLkotlin/time/Duration;->getNanosecondsComponent-impl(J)I\nPLkotlin/time/Duration;->getNanosecondsComponent-impl(J)I\nHSPLkotlin/time/Duration;->getStorageUnit-impl(J)Lkotlin/time/DurationUnit;\nPLkotlin/time/Duration;->getStorageUnit-impl(J)Lkotlin/time/DurationUnit;\nHSPLkotlin/time/Duration;->isInfinite-impl(J)Z\nPLkotlin/time/Duration;->isInfinite-impl(J)Z\nHSPLkotlin/time/Duration;->toLong-impl(JLkotlin/time/DurationUnit;)J\nPLkotlin/time/Duration;->toLong-impl(JLkotlin/time/DurationUnit;)J\nLkotlin/time/Duration$Companion;\nHSPLkotlin/time/Duration$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlin/time/Duration$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlin/time/DurationJvmKt;\nHSPLkotlin/time/DurationJvmKt;-><clinit>()V\nPLkotlin/time/DurationJvmKt;-><clinit>()V\nLkotlin/time/DurationKt;\nHSPLkotlin/time/DurationKt;->access$durationOfMillis(J)J\nPLkotlin/time/DurationKt;->access$durationOfMillis(J)J\nHSPLkotlin/time/DurationKt;->durationOfNanos(J)J\nPLkotlin/time/DurationKt;->durationOfNanos(J)J\nHSPLkotlin/time/DurationKt;->toDuration(ILkotlin/time/DurationUnit;)J\nPLkotlin/time/DurationKt;->toDuration(ILkotlin/time/DurationUnit;)J\nHSPLkotlin/time/DurationKt;->toDuration(JLkotlin/time/DurationUnit;)J\nPLkotlin/time/DurationKt;->toDuration(JLkotlin/time/DurationUnit;)J\nLkotlin/time/DurationUnit;\nHSPLkotlin/time/DurationUnit;-><clinit>()V\nPLkotlin/time/DurationUnit;-><clinit>()V\nHSPLkotlin/time/DurationUnit;-><init>(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V\nPLkotlin/time/DurationUnit;-><init>(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V\nHSPLkotlin/time/DurationUnit;->getTimeUnit$kotlin_stdlib()Ljava/util/concurrent/TimeUnit;\nPLkotlin/time/DurationUnit;->getTimeUnit$kotlin_stdlib()Ljava/util/concurrent/TimeUnit;\nLkotlin/time/DurationUnitKt__DurationUnitJvmKt;\nHSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnit(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J\nPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnit(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J\nHSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnitOverflow(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J\nPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnitOverflow(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J\nLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;\nHSPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;-><init>(FF)V\nHPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;-><init>(FF)V\nHSPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;\nHPLkotlinx/collections/immutable/implementations/immutableList/ObjectRef;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;\nLkotlinx/coroutines/AbstractCoroutine;\nHSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;ZZ)V\nHPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;ZZ)V\nHSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;\nPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;\nHSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z\nHPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z\nHSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V\nHPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V\nHSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nHPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V\nLkotlinx/coroutines/AbstractTimeSourceKt;\nHSPLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource;\nPLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource;\nLkotlinx/coroutines/Active;\nHSPLkotlinx/coroutines/Active;-><clinit>()V\nPLkotlinx/coroutines/Active;-><clinit>()V\nHSPLkotlinx/coroutines/Active;-><init>()V\nPLkotlinx/coroutines/Active;-><init>()V\nLkotlinx/coroutines/BlockingEventLoop;\nHSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V\nPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V\nLkotlinx/coroutines/BuildersKt;\nHSPLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred;\nPLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred;\nHSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;\nHPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/BuildersKt__Builders_commonKt;\nHSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred;\nPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred;\nHSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred;\nPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred;\nHSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;\nHPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;\nHPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/CancelHandler;\nHSPLkotlinx/coroutines/CancelHandler;-><init>()V\nPLkotlinx/coroutines/CancelHandler;-><init>()V\nLkotlinx/coroutines/CancelHandlerBase;\nHSPLkotlinx/coroutines/CancelHandlerBase;-><init>()V\nHPLkotlinx/coroutines/CancelHandlerBase;-><init>()V\nLkotlinx/coroutines/CancellableContinuation;\nLkotlinx/coroutines/CancellableContinuation$DefaultImpls;\nLkotlinx/coroutines/CancellableContinuationImpl;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V\nPLkotlinx/coroutines/CancellableContinuationImpl;-><clinit>()V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;I)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;I)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z\nHPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;\nPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getState$kotlinx_coroutines_core()Ljava/lang/Object;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->getState$kotlinx_coroutines_core()Ljava/lang/Object;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z\nHPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z\nHPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$kotlinx_coroutines_core(Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$kotlinx_coroutines_core(Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V\nPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z\nHPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V\nPLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;\nHPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;\nLkotlinx/coroutines/CancellableContinuationImplKt;\nHSPLkotlinx/coroutines/CancellableContinuationImplKt;-><clinit>()V\nPLkotlinx/coroutines/CancellableContinuationImplKt;-><clinit>()V\nLkotlinx/coroutines/CancellableContinuationKt;\nHSPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V\nPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V\nHSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;\nHPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;\nLkotlinx/coroutines/CancelledContinuation;\nHSPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V\nPLkotlinx/coroutines/CancelledContinuation;-><clinit>()V\nHSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V\nHPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V\nHSPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z\nPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z\nLkotlinx/coroutines/ChildContinuation;\nHSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/ChildHandle;\nLkotlinx/coroutines/ChildHandleNode;\nHSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/ChildJob;)V\nPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/ChildJob;)V\nHSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z\nPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/ChildJob;\nLkotlinx/coroutines/CompletableJob;\nLkotlinx/coroutines/CompletedContinuation;\nHSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/CompletedContinuation;->copy$default(Lkotlinx/coroutines/CompletedContinuation;Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILjava/lang/Object;)Lkotlinx/coroutines/CompletedContinuation;\nHPLkotlinx/coroutines/CompletedContinuation;->copy$default(Lkotlinx/coroutines/CompletedContinuation;Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILjava/lang/Object;)Lkotlinx/coroutines/CompletedContinuation;\nHSPLkotlinx/coroutines/CompletedContinuation;->copy(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)Lkotlinx/coroutines/CompletedContinuation;\nHPLkotlinx/coroutines/CompletedContinuation;->copy(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)Lkotlinx/coroutines/CompletedContinuation;\nHSPLkotlinx/coroutines/CompletedContinuation;->getCancelled()Z\nPLkotlinx/coroutines/CompletedContinuation;->getCancelled()Z\nHSPLkotlinx/coroutines/CompletedContinuation;->invokeHandlers(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/CompletedContinuation;->invokeHandlers(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Throwable;)V\nLkotlinx/coroutines/CompletedExceptionally;\nHSPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V\nPLkotlinx/coroutines/CompletedExceptionally;-><clinit>()V\nHSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V\nHPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V\nHSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z\nHPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z\nHSPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z\nHPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z\nLkotlinx/coroutines/CompletedWithCancellation;\nLkotlinx/coroutines/CompletionHandlerBase;\nHSPLkotlinx/coroutines/CompletionHandlerBase;-><init>()V\nHPLkotlinx/coroutines/CompletionHandlerBase;-><init>()V\nLkotlinx/coroutines/CompletionHandlerException;\nLkotlinx/coroutines/CompletionStateKt;\nHSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object;\nLkotlinx/coroutines/CopyableThreadContextElement;\nLkotlinx/coroutines/CopyableThrowable;\nLkotlinx/coroutines/CoroutineContextKt;\nHSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nLkotlinx/coroutines/CoroutineContextKt$foldCopies$1;\nLkotlinx/coroutines/CoroutineContextKt$foldCopies$folded$1;\nLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;\nHSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><clinit>()V\nPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><clinit>()V\nHSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><init>()V\nPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><init>()V\nHSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean;\nHPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean;\nLkotlinx/coroutines/CoroutineDispatcher;\nHSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V\nPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V\nHSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V\nPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V\nHSPLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z\nHPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z\nHSPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher;\nPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher;\nHSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/CoroutineDispatcher$Key;\nHSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/coroutines/CoroutineDispatcher$Key$1;\nHSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V\nPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V\nHSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>()V\nPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>()V\nLkotlinx/coroutines/CoroutineExceptionHandler;\nHSPLkotlinx/coroutines/CoroutineExceptionHandler;-><clinit>()V\nPLkotlinx/coroutines/CoroutineExceptionHandler;-><clinit>()V\nLkotlinx/coroutines/CoroutineExceptionHandler$Key;\nHSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><clinit>()V\nPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><clinit>()V\nHSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><init>()V\nPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><init>()V\nLkotlinx/coroutines/CoroutineExceptionHandlerKt;\nLkotlinx/coroutines/CoroutineName;\nHSPLkotlinx/coroutines/CoroutineName;-><clinit>()V\nPLkotlinx/coroutines/CoroutineName;-><clinit>()V\nHSPLkotlinx/coroutines/CoroutineName;-><init>(Ljava/lang/String;)V\nPLkotlinx/coroutines/CoroutineName;-><init>(Ljava/lang/String;)V\nLkotlinx/coroutines/CoroutineName$Key;\nHSPLkotlinx/coroutines/CoroutineName$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/CoroutineName$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/coroutines/CoroutineScope;\nLkotlinx/coroutines/CoroutineScopeKt;\nHSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope;\nHPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope;\nHSPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope;\nPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope;\nHSPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V\nHPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V\nHSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/CoroutineScopeKt;->ensureActive(Lkotlinx/coroutines/CoroutineScope;)V\nPLkotlinx/coroutines/CoroutineScopeKt;->ensureActive(Lkotlinx/coroutines/CoroutineScope;)V\nHSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z\nHPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z\nHSPLkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope;\nPLkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope;\nLkotlinx/coroutines/CoroutineStart;\nHSPLkotlinx/coroutines/CoroutineStart;-><clinit>()V\nPLkotlinx/coroutines/CoroutineStart;-><clinit>()V\nHSPLkotlinx/coroutines/CoroutineStart;-><init>(Ljava/lang/String;I)V\nPLkotlinx/coroutines/CoroutineStart;-><init>(Ljava/lang/String;I)V\nHSPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/CoroutineStart;->isLazy()Z\nPLkotlinx/coroutines/CoroutineStart;->isLazy()Z\nHSPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart;\nPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart;\nLkotlinx/coroutines/CoroutineStart$WhenMappings;\nHSPLkotlinx/coroutines/CoroutineStart$WhenMappings;-><clinit>()V\nPLkotlinx/coroutines/CoroutineStart$WhenMappings;-><clinit>()V\nLkotlinx/coroutines/CoroutinesInternalError;\nLkotlinx/coroutines/DebugStringsKt;\nHSPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String;\nHPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String;\nLkotlinx/coroutines/DefaultExecutor;\nHSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V\nPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V\nHSPLkotlinx/coroutines/DefaultExecutor;-><init>()V\nPLkotlinx/coroutines/DefaultExecutor;-><init>()V\nHSPLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V\nPLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V\nHSPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread;\nHPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread;\nHSPLkotlinx/coroutines/DefaultExecutor;->invokeOnTimeout(JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle;\nPLkotlinx/coroutines/DefaultExecutor;->invokeOnTimeout(JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle;\nHSPLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z\nPLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z\nHSPLkotlinx/coroutines/DefaultExecutor;->run()V\nHPLkotlinx/coroutines/DefaultExecutor;->run()V\nLkotlinx/coroutines/DefaultExecutorKt;\nHSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V\nPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V\nHSPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay;\nPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay;\nLkotlinx/coroutines/Deferred;\nLkotlinx/coroutines/DeferredCoroutine;\nHSPLkotlinx/coroutines/DeferredCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V\nPLkotlinx/coroutines/DeferredCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V\nHSPLkotlinx/coroutines/DeferredCoroutine;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/DeferredCoroutine;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/Delay;\nLkotlinx/coroutines/DelayKt;\nHSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay;\nPLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay;\nLkotlinx/coroutines/DispatchedCoroutine;\nHSPLkotlinx/coroutines/DispatchedCoroutine;-><clinit>()V\nPLkotlinx/coroutines/DispatchedCoroutine;-><clinit>()V\nHSPLkotlinx/coroutines/DispatchedCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/DispatchedCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V\nPLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/DispatchedCoroutine;->getResult$kotlinx_coroutines_core()Ljava/lang/Object;\nPLkotlinx/coroutines/DispatchedCoroutine;->getResult$kotlinx_coroutines_core()Ljava/lang/Object;\nLkotlinx/coroutines/DispatchedTask;\nHSPLkotlinx/coroutines/DispatchedTask;-><init>(I)V\nPLkotlinx/coroutines/DispatchedTask;-><init>(I)V\nHSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;\nPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/DispatchedTask;->handleFatalException$kotlinx_coroutines_core(Ljava/lang/Throwable;Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/DispatchedTask;->handleFatalException$kotlinx_coroutines_core(Ljava/lang/Throwable;Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/DispatchedTask;->run()V\nHPLkotlinx/coroutines/DispatchedTask;->run()V\nLkotlinx/coroutines/DispatchedTaskKt;\nHSPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V\nHPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V\nHSPLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z\nPLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z\nHSPLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z\nPLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z\nHSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V\nHPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V\nLkotlinx/coroutines/Dispatchers;\nHSPLkotlinx/coroutines/Dispatchers;-><clinit>()V\nPLkotlinx/coroutines/Dispatchers;-><clinit>()V\nHSPLkotlinx/coroutines/Dispatchers;-><init>()V\nPLkotlinx/coroutines/Dispatchers;-><init>()V\nHSPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher;\nPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher;\nHSPLkotlinx/coroutines/Dispatchers;->getIO()Lkotlinx/coroutines/CoroutineDispatcher;\nPLkotlinx/coroutines/Dispatchers;->getIO()Lkotlinx/coroutines/CoroutineDispatcher;\nLkotlinx/coroutines/DisposableHandle;\nLkotlinx/coroutines/DisposeOnCancel;\nHSPLkotlinx/coroutines/DisposeOnCancel;-><init>(Lkotlinx/coroutines/DisposableHandle;)V\nPLkotlinx/coroutines/DisposeOnCancel;-><init>(Lkotlinx/coroutines/DisposableHandle;)V\nPLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/Empty;\nHSPLkotlinx/coroutines/Empty;-><init>(Z)V\nPLkotlinx/coroutines/Empty;-><init>(Z)V\nHSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;\nHPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;\nHSPLkotlinx/coroutines/Empty;->isActive()Z\nHPLkotlinx/coroutines/Empty;->isActive()Z\nLkotlinx/coroutines/EventLoop;\nHSPLkotlinx/coroutines/EventLoop;-><init>()V\nPLkotlinx/coroutines/EventLoop;-><init>()V\nHSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V\nPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V\nHSPLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V\nPLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V\nHSPLkotlinx/coroutines/EventLoop;->getNextTime()J\nPLkotlinx/coroutines/EventLoop;->getNextTime()J\nHSPLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V\nPLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V\nHSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V\nPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V\nHSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z\nPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z\nHSPLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z\nPLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z\nHSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z\nPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z\nLkotlinx/coroutines/EventLoopImplBase;\nHSPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V\nPLkotlinx/coroutines/EventLoopImplBase;-><clinit>()V\nHSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V\nPLkotlinx/coroutines/EventLoopImplBase;-><init>()V\nHSPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z\nHPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z\nHSPLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z\nPLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z\nHSPLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J\nHPLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J\nHSPLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z\nPLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z\nHSPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J\nHPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J\nHSPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V\nHPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V\nHSPLkotlinx/coroutines/EventLoopImplBase;->scheduleInvokeOnTimeout(JLjava/lang/Runnable;)Lkotlinx/coroutines/DisposableHandle;\nPLkotlinx/coroutines/EventLoopImplBase;->scheduleInvokeOnTimeout(JLjava/lang/Runnable;)Lkotlinx/coroutines/DisposableHandle;\nHSPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V\nHPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V\nLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;-><init>(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;-><init>(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V\nLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;-><init>(JLjava/lang/Runnable;)V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;-><init>(JLjava/lang/Runnable;)V\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->run()V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->run()V\nLkotlinx/coroutines/EventLoopImplBase$DelayedTask;\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;-><init>(J)V\nHPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;-><init>(J)V\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Ljava/lang/Object;)I\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Ljava/lang/Object;)I\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getHeap()Lkotlinx/coroutines/internal/ThreadSafeHeap;\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getIndex()I\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I\nHPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z\nLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;\nHSPLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;-><init>(J)V\nPLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;-><init>(J)V\nLkotlinx/coroutines/EventLoopImplPlatform;\nHSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V\nPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V\nHSPLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V\nHPLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V\nLkotlinx/coroutines/EventLoopKt;\nHSPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop;\nPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop;\nLkotlinx/coroutines/EventLoop_commonKt;\nHSPLkotlinx/coroutines/EventLoop_commonKt;-><clinit>()V\nPLkotlinx/coroutines/EventLoop_commonKt;-><clinit>()V\nHSPLkotlinx/coroutines/EventLoop_commonKt;->access$getCLOSED_EMPTY$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/EventLoop_commonKt;->access$getCLOSED_EMPTY$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J\nPLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J\nLkotlinx/coroutines/ExceptionsKt;\nPLkotlinx/coroutines/ExceptionsKt;->CancellationException(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/util/concurrent/CancellationException;\nLkotlinx/coroutines/ExecutorCoroutineDispatcher;\nHSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V\nPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V\nHSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><init>()V\nPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><init>()V\nLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;\nHSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;\nHSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V\nPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V\nHSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>()V\nPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>()V\nLkotlinx/coroutines/GlobalScope;\nHSPLkotlinx/coroutines/GlobalScope;-><clinit>()V\nPLkotlinx/coroutines/GlobalScope;-><clinit>()V\nHSPLkotlinx/coroutines/GlobalScope;-><init>()V\nPLkotlinx/coroutines/GlobalScope;-><init>()V\nHSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nLkotlinx/coroutines/InactiveNodeList;\nLkotlinx/coroutines/Incomplete;\nLkotlinx/coroutines/IncompleteStateBox;\nLkotlinx/coroutines/InvokeOnCancel;\nHSPLkotlinx/coroutines/InvokeOnCancel;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/InvokeOnCancel;-><init>(Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/InvokeOnCancelling;\nLkotlinx/coroutines/InvokeOnCompletion;\nHSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/InvokeOnCompletion;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/Job;-><clinit>()V\nPLkotlinx/coroutines/Job;-><clinit>()V\nLkotlinx/coroutines/Job$DefaultImpls;\nPLkotlinx/coroutines/Job$DefaultImpls;->cancel$default(Lkotlinx/coroutines/Job;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V\nHSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle;\nHPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle;\nLkotlinx/coroutines/Job$Key;\nHSPLkotlinx/coroutines/Job$Key;-><clinit>()V\nPLkotlinx/coroutines/Job$Key;-><clinit>()V\nHSPLkotlinx/coroutines/Job$Key;-><init>()V\nPLkotlinx/coroutines/Job$Key;-><init>()V\nLkotlinx/coroutines/JobCancellationException;\nHSPLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V\nPLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V\nPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;\nPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;\nLkotlinx/coroutines/JobCancellingNode;\nHSPLkotlinx/coroutines/JobCancellingNode;-><init>()V\nPLkotlinx/coroutines/JobCancellingNode;-><init>()V\nLkotlinx/coroutines/JobImpl;\nHSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V\nHPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V\nHSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z\nPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z\nHSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z\nHPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z\nLkotlinx/coroutines/JobKt;\nHSPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;\nPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;\nPLkotlinx/coroutines/JobKt;->cancel$default(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V\nPLkotlinx/coroutines/JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V\nPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V\nHPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V\nHSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z\nPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z\nLkotlinx/coroutines/JobKt__JobKt;\nHSPLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;\nPLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;\nPLkotlinx/coroutines/JobKt__JobKt;->cancel$default(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V\nPLkotlinx/coroutines/JobKt__JobKt;->cancel(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CancellationException;)V\nPLkotlinx/coroutines/JobKt__JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V\nHPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V\nHPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V\nHSPLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z\nHPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z\nLkotlinx/coroutines/JobNode;\nHSPLkotlinx/coroutines/JobNode;-><init>()V\nPLkotlinx/coroutines/JobNode;-><init>()V\nHSPLkotlinx/coroutines/JobNode;->dispose()V\nHPLkotlinx/coroutines/JobNode;->dispose()V\nHSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport;\nHPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport;\nHSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;\nHPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;\nHSPLkotlinx/coroutines/JobNode;->isActive()Z\nHPLkotlinx/coroutines/JobNode;->isActive()Z\nHSPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V\nPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V\nLkotlinx/coroutines/JobSupport;\nHSPLkotlinx/coroutines/JobSupport;-><clinit>()V\nPLkotlinx/coroutines/JobSupport;-><clinit>()V\nHSPLkotlinx/coroutines/JobSupport;-><init>(Z)V\nHPLkotlinx/coroutines/JobSupport;-><init>(Z)V\nHSPLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String;\nPLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String;\nHSPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V\nPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle;\nHPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle;\nHSPLkotlinx/coroutines/JobSupport;->awaitInternal(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupport;->awaitInternal(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->awaitSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupport;->awaitSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V\nHPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V\nHSPLkotlinx/coroutines/JobSupport;->cancelCoroutine(Ljava/lang/Throwable;)Z\nPLkotlinx/coroutines/JobSupport;->cancelCoroutine(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z\nHPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z\nPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;\nHSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z\nHPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V\nHPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;\nHPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException;\nHPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException;\nHSPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException;\nHPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException;\nHSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable;\nHPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nHPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nHSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z\nHPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z\nHSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList;\nHPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList;\nHSPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle;\nHPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle;\nHSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object;\nHPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V\nHPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V\nHSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;\nPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;\nHSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;\nHPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;\nHSPLkotlinx/coroutines/JobSupport;->isActive()Z\nHPLkotlinx/coroutines/JobSupport;->isActive()Z\nHSPLkotlinx/coroutines/JobSupport;->isCancelled()Z\nHPLkotlinx/coroutines/JobSupport;->isCancelled()Z\nHSPLkotlinx/coroutines/JobSupport;->isCompleted()Z\nHPLkotlinx/coroutines/JobSupport;->isCompleted()Z\nHSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z\nHPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z\nHSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode;\nHPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode;\nHSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V\nPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V\nHSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/JobSupport;->removeNode$kotlinx_coroutines_core(Lkotlinx/coroutines/JobNode;)V\nHPLkotlinx/coroutines/JobSupport;->removeNode$kotlinx_coroutines_core(Lkotlinx/coroutines/JobNode;)V\nHSPLkotlinx/coroutines/JobSupport;->setParentHandle$kotlinx_coroutines_core(Lkotlinx/coroutines/ChildHandle;)V\nHPLkotlinx/coroutines/JobSupport;->setParentHandle$kotlinx_coroutines_core(Lkotlinx/coroutines/ChildHandle;)V\nHSPLkotlinx/coroutines/JobSupport;->start()Z\nHPLkotlinx/coroutines/JobSupport;->start()Z\nHSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I\nHPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I\nHSPLkotlinx/coroutines/JobSupport;->toCancellationException$default(Lkotlinx/coroutines/JobSupport;Ljava/lang/Throwable;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/concurrent/CancellationException;\nPLkotlinx/coroutines/JobSupport;->toCancellationException$default(Lkotlinx/coroutines/JobSupport;Ljava/lang/Throwable;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/concurrent/CancellationException;\nHSPLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException;\nPLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException;\nHSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z\nPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z\nLkotlinx/coroutines/JobSupport$AwaitContinuation;\nHSPLkotlinx/coroutines/JobSupport$AwaitContinuation;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V\nPLkotlinx/coroutines/JobSupport$AwaitContinuation;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V\nLkotlinx/coroutines/JobSupport$ChildCompletion;\nHSPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V\nPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/JobSupport$Finishing;\nHSPLkotlinx/coroutines/JobSupport$Finishing;-><clinit>()V\nPLkotlinx/coroutines/JobSupport$Finishing;-><clinit>()V\nHSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V\nHPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V\nHSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;\nHPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;\nHSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;\nHPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z\nHPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z\nHSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z\nPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z\nHSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z\nPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z\nHSPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z\nPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z\nHSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List;\nHPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List;\nHSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V\nPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V\nHSPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;\nHSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V\nPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object;\nLkotlinx/coroutines/JobSupportKt;\nHSPLkotlinx/coroutines/JobSupportKt;-><clinit>()V\nPLkotlinx/coroutines/JobSupportKt;-><clinit>()V\nHSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol;\nHPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty;\nPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty;\nHSPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/LazyStandaloneCoroutine;\nLkotlinx/coroutines/MainCoroutineDispatcher;\nHSPLkotlinx/coroutines/MainCoroutineDispatcher;-><init>()V\nPLkotlinx/coroutines/MainCoroutineDispatcher;-><init>()V\nLkotlinx/coroutines/NodeList;\nHSPLkotlinx/coroutines/NodeList;-><init>()V\nPLkotlinx/coroutines/NodeList;-><init>()V\nHSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;\nHPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;\nHSPLkotlinx/coroutines/NodeList;->isActive()Z\nHPLkotlinx/coroutines/NodeList;->isActive()Z\nLkotlinx/coroutines/NonDisposableHandle;\nHSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V\nPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V\nHSPLkotlinx/coroutines/NonDisposableHandle;-><init>()V\nPLkotlinx/coroutines/NonDisposableHandle;-><init>()V\nHSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V\nPLkotlinx/coroutines/NonDisposableHandle;->dispose()V\nLkotlinx/coroutines/NotCompleted;\nLkotlinx/coroutines/ParentJob;\nLkotlinx/coroutines/ResumeAwaitOnCompletion;\nHSPLkotlinx/coroutines/ResumeAwaitOnCompletion;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nPLkotlinx/coroutines/ResumeAwaitOnCompletion;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/ResumeOnCompletion;\nHSPLkotlinx/coroutines/ResumeOnCompletion;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/ResumeOnCompletion;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/StandaloneCoroutine;\nHSPLkotlinx/coroutines/StandaloneCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V\nHPLkotlinx/coroutines/StandaloneCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V\nLkotlinx/coroutines/SupervisorJobImpl;\nHSPLkotlinx/coroutines/SupervisorJobImpl;-><init>(Lkotlinx/coroutines/Job;)V\nPLkotlinx/coroutines/SupervisorJobImpl;-><init>(Lkotlinx/coroutines/Job;)V\nPLkotlinx/coroutines/SupervisorJobImpl;->childCancelled(Ljava/lang/Throwable;)Z\nLkotlinx/coroutines/SupervisorKt;\nHSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;\nPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;\nHSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob;\nPLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob;\nLkotlinx/coroutines/ThreadContextElement;\nLkotlinx/coroutines/ThreadLocalEventLoop;\nHSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V\nPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V\nHSPLkotlinx/coroutines/ThreadLocalEventLoop;-><init>()V\nPLkotlinx/coroutines/ThreadLocalEventLoop;-><init>()V\nHSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop;\nPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop;\nHSPLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$kotlinx_coroutines_core(Lkotlinx/coroutines/EventLoop;)V\nPLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$kotlinx_coroutines_core(Lkotlinx/coroutines/EventLoop;)V\nLkotlinx/coroutines/TimeoutCancellationException;\nLkotlinx/coroutines/Unconfined;\nHSPLkotlinx/coroutines/Unconfined;-><clinit>()V\nPLkotlinx/coroutines/Unconfined;-><clinit>()V\nHSPLkotlinx/coroutines/Unconfined;-><init>()V\nPLkotlinx/coroutines/Unconfined;-><init>()V\nLkotlinx/coroutines/UndispatchedCoroutine;\nHSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V\nLkotlinx/coroutines/UndispatchedMarker;\nHSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V\nPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V\nHSPLkotlinx/coroutines/UndispatchedMarker;-><init>()V\nPLkotlinx/coroutines/UndispatchedMarker;-><init>()V\nHSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;\nHSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key;\nLkotlinx/coroutines/Waiter;\nLkotlinx/coroutines/YieldContext;\nHSPLkotlinx/coroutines/YieldContext;-><clinit>()V\nPLkotlinx/coroutines/YieldContext;-><clinit>()V\nHSPLkotlinx/coroutines/YieldContext;-><init>()V\nPLkotlinx/coroutines/YieldContext;-><init>()V\nLkotlinx/coroutines/YieldContext$Key;\nHSPLkotlinx/coroutines/YieldContext$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/YieldContext$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/coroutines/YieldKt;\nHSPLkotlinx/coroutines/YieldKt;->yield(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/YieldKt;->yield(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/android/AndroidDispatcherFactory;\nHSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V\nPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V\nHSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;\nPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;\nLkotlinx/coroutines/android/HandlerContext;\nHSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;)V\nPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;)V\nHSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V\nPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V\nHSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z\nPLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher;\nPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher;\nHSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher;\nPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher;\nHSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z\nHPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z\nLkotlinx/coroutines/android/HandlerDispatcher;\nHSPLkotlinx/coroutines/android/HandlerDispatcher;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/android/HandlerDispatcher;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/coroutines/android/HandlerDispatcherKt;\nHSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V\nPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V\nHSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler;\nPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler;\nLkotlinx/coroutines/channels/BufferOverflow;\nHSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(Ljava/lang/String;I)V\nPLkotlinx/coroutines/channels/BufferOverflow;-><init>(Ljava/lang/String;I)V\nLkotlinx/coroutines/channels/BufferedChannel;\nHSPLkotlinx/coroutines/channels/BufferedChannel;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannel;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel;-><init>(ILkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/channels/BufferedChannel;-><init>(ILkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nHPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z\nPLkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V\nPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V\nPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceive(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceive(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceiveCatching(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceiveCatching(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel;->access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$registerSelectForReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V\nHPLkotlinx/coroutines/channels/BufferedChannel;->access$registerSelectForReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I\nHPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I\nHSPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->cancel(Ljava/util/concurrent/CancellationException;)V\nPLkotlinx/coroutines/channels/BufferedChannel;->cancel(Ljava/util/concurrent/CancellationException;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z\nPLkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->close(Ljava/lang/Throwable;)Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->close(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment;\nHPLkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V\nHPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V\nHPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nHPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J\nHPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J\nHSPLkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;\nPLkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1;\nHPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1;\nHPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J\nHPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J\nHSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J\nHPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J\nHSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V\nHPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/channels/BufferedChannel;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z\nPLkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator;\nHPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V\nPLkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V\nPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V\nPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V\nPLkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V\nHSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z\nPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;J)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;J)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel;->updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I\nHSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V\nHPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V\nLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V\nHPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNextOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNextOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V\nHPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V\nLkotlinx/coroutines/channels/BufferedChannel$SendBroadcast;\nLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;-><init>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;-><init>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel$onReceive$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;-><init>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;-><init>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel$onReceive$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;-><init>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;-><init>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;-><init>()V\nPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;-><init>()V\nHSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;\nHSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;\nHSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;-><init>(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/BufferedChannelKt;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannelKt;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_RECEIVE_RESULT$p()Lkotlinx/coroutines/internal/Symbol;\nHPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_RECEIVE_RESULT$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z\nPLkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;\nHPLkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;)Z\nPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;)Z\nLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;\nHSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><clinit>()V\nPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><clinit>()V\nHSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><init>()V\nPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;-><init>()V\nHSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/Channel;\nHSPLkotlinx/coroutines/channels/Channel;-><clinit>()V\nPLkotlinx/coroutines/channels/Channel;-><clinit>()V\nLkotlinx/coroutines/channels/Channel$Factory;\nHSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V\nPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V\nHSPLkotlinx/coroutines/channels/Channel$Factory;-><init>()V\nPLkotlinx/coroutines/channels/Channel$Factory;-><init>()V\nHSPLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$kotlinx_coroutines_core()I\nPLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$kotlinx_coroutines_core()I\nLkotlinx/coroutines/channels/ChannelCoroutine;\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V\nHPLkotlinx/coroutines/channels/ChannelCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V\nHPLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancelInternal(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/channels/ChannelCoroutine;->cancelInternal(Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1;\nPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceive()Lkotlinx/coroutines/selects/SelectClause1;\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1;\nPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1;\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->get_channel()Lkotlinx/coroutines/channels/Channel;\nPLkotlinx/coroutines/channels/ChannelCoroutine;->get_channel()Lkotlinx/coroutines/channels/Channel;\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->iterator()Lkotlinx/coroutines/channels/ChannelIterator;\nPLkotlinx/coroutines/channels/ChannelCoroutine;->iterator()Lkotlinx/coroutines/channels/ChannelIterator;\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/ChannelIterator;\nLkotlinx/coroutines/channels/ChannelKt;\nHSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel;\nPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel;\nHSPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel;\nHPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel;\nLkotlinx/coroutines/channels/ChannelResult;\nHSPLkotlinx/coroutines/channels/ChannelResult;-><clinit>()V\nPLkotlinx/coroutines/channels/ChannelResult;-><clinit>()V\nHSPLkotlinx/coroutines/channels/ChannelResult;-><init>(Ljava/lang/Object;)V\nPLkotlinx/coroutines/channels/ChannelResult;-><init>(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed;\nPLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed;\nHSPLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;\nPLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;\nHSPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object;\nPLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object;\nLkotlinx/coroutines/channels/ChannelResult$Closed;\nPLkotlinx/coroutines/channels/ChannelResult$Closed;-><init>(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/channels/ChannelResult$Companion;\nHSPLkotlinx/coroutines/channels/ChannelResult$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/channels/ChannelResult$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/ChannelResult$Failed;\nHSPLkotlinx/coroutines/channels/ChannelResult$Failed;-><init>()V\nPLkotlinx/coroutines/channels/ChannelResult$Failed;-><init>()V\nLkotlinx/coroutines/channels/ChannelSegment;\nHSPLkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V\nHPLkotlinx/coroutines/channels/ChannelSegment;-><init>(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V\nHSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V\nPLkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V\nHSPLkotlinx/coroutines/channels/ChannelSegment;->getChannel()Lkotlinx/coroutines/channels/BufferedChannel;\nHPLkotlinx/coroutines/channels/ChannelSegment;->getChannel()Lkotlinx/coroutines/channels/BufferedChannel;\nHSPLkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I\nHPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I\nHSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V\nHPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V\nHPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V\nHSPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V\nPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V\nHSPLkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V\nHPLkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V\nLkotlinx/coroutines/channels/ChannelsKt;\nHSPLkotlinx/coroutines/channels/ChannelsKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/channels/ChannelsKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V\nLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;\nHSPLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V\nLkotlinx/coroutines/channels/ClosedReceiveChannelException;\nLkotlinx/coroutines/channels/ClosedSendChannelException;\nLkotlinx/coroutines/channels/ConflatedBufferedChannel;\nHSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/channels/ConflatedBufferedChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->isConflatedDropOldest()Z\nPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->isConflatedDropOldest()Z\nHSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object;\nLkotlinx/coroutines/channels/ProduceKt;\nHSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;\nPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;\nHSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;\nHPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;\nHSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel;\nPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel;\nHSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel;\nHPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel;\nLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;\nHSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;\nHSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Throwable;)V\nPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Throwable;)V\nLkotlinx/coroutines/channels/ProducerCoroutine;\nHSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V\nPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V\nHSPLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/SendChannel;\nPLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/SendChannel;\nHSPLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z\nPLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z\nHSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V\nHPLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V\nHSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Ljava/lang/Object;)V\nPLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Lkotlin/Unit;)V\nPLkotlinx/coroutines/channels/ProducerCoroutine;->onCompleted(Lkotlin/Unit;)V\nLkotlinx/coroutines/channels/ProducerScope;\nLkotlinx/coroutines/channels/ReceiveCatching;\nHSPLkotlinx/coroutines/channels/ReceiveCatching;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nPLkotlinx/coroutines/channels/ReceiveCatching;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V\nHSPLkotlinx/coroutines/channels/ReceiveCatching;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nPLkotlinx/coroutines/channels/ReceiveCatching;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nLkotlinx/coroutines/channels/ReceiveChannel;\nLkotlinx/coroutines/channels/SendChannel;\nLkotlinx/coroutines/channels/SendChannel$DefaultImpls;\nHSPLkotlinx/coroutines/channels/SendChannel$DefaultImpls;->close$default(Lkotlinx/coroutines/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z\nPLkotlinx/coroutines/channels/SendChannel$DefaultImpls;->close$default(Lkotlinx/coroutines/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z\nLkotlinx/coroutines/channels/WaiterEB;\nLkotlinx/coroutines/flow/AbstractFlow;\nHSPLkotlinx/coroutines/flow/AbstractFlow;-><init>()V\nHPLkotlinx/coroutines/flow/AbstractFlow;-><init>()V\nHSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/AbstractFlow$collect$1;\nHSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/CallbackFlowBuilder;\nHSPLkotlinx/coroutines/flow/CallbackFlowBuilder;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/CallbackFlowBuilder;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/CallbackFlowBuilder;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/flow/CallbackFlowBuilder;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;\nHSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;-><init>(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;-><init>(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/CancellableFlow;\nLkotlinx/coroutines/flow/ChannelAsFlow;\nHSPLkotlinx/coroutines/flow/ChannelAsFlow;-><clinit>()V\nPLkotlinx/coroutines/flow/ChannelAsFlow;-><clinit>()V\nHSPLkotlinx/coroutines/flow/ChannelAsFlow;-><init>(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/ChannelAsFlow;-><init>(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/ChannelAsFlow;-><init>(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/flow/ChannelAsFlow;-><init>(Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/flow/ChannelAsFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/ChannelAsFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/ChannelAsFlow;->markConsumed()V\nPLkotlinx/coroutines/flow/ChannelAsFlow;->markConsumed()V\nLkotlinx/coroutines/flow/ChannelFlowBuilder;\nHSPLkotlinx/coroutines/flow/ChannelFlowBuilder;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/ChannelFlowBuilder;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/DistinctFlowImpl;\nHSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;\nHSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;\nHSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowCollector;\nLkotlinx/coroutines/flow/FlowKt;\nHSPLkotlinx/coroutines/flow/FlowKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow;\nPLkotlinx/coroutines/flow/FlowKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow;\nHSPLkotlinx/coroutines/flow/FlowKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/flow/FlowKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/flow/FlowKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow;\nPLkotlinx/coroutines/flow/FlowKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow;\nHSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;\nPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;\nHSPLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__BuildersKt;\nHSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;\nHSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;-><init>(Ljava/lang/Iterable;)V\nPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;-><init>(Ljava/lang/Iterable;)V\nHSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3$1;\nHSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$3;Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;\nHSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;-><init>(Ljava/lang/Object;)V\nPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;-><init>(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ChannelsKt;\nHSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->receiveAsFlow(Lkotlinx/coroutines/channels/ReceiveChannel;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__CollectKt;\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__CollectKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/flow/FlowKt__CollectKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job;\nLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ContextKt;\nHSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ContextKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ContextKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__DelayKt;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker$default(Lkotlinx/coroutines/CoroutineScope;JJILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker$default(Lkotlinx/coroutines/CoroutineScope;JJILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker(Lkotlinx/coroutines/CoroutineScope;JJ)Lkotlinx/coroutines/channels/ReceiveChannel;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt;->fixedPeriodTicker(Lkotlinx/coroutines/CoroutineScope;JJ)Lkotlinx/coroutines/channels/ReceiveChannel;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt;->sample(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;-><init>(J)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;-><init>(J)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Long;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Long;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke-WpGqRn0(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke-WpGqRn0(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;-><init>(JJLkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;-><init>(JJLkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__DelayKt$fixedPeriodTicker$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;-><init>(JLkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;-><init>(JLkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nHPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1$1;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nPLkotlinx/coroutines/flow/FlowKt__DelayKt$sample$2$values$1$1;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nLkotlinx/coroutines/flow/FlowKt__DistinctKt;\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;-><clinit>()V\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt;-><clinit>()V\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><clinit>()V\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><clinit>()V\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><init>()V\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><init>()V\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean;\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean;\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><clinit>()V\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><clinit>()V\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><init>()V\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><init>()V\nHSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__EmittersKt;\nHSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V\nHPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V\nLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;\nHSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V\nHPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V\nHSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ErrorsKt;\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;-><init>(Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__LimitKt;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__LimitKt;->drop(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;I)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;I)V\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;-><init>(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;-><init>(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1$emit$1;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$drop$2$1;Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;\nHSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__MergeKt;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V\nPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ShareKt;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->launchSharing$FlowKt__ShareKt(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt;->launchSharing$FlowKt__ShareKt(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/Job;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;\nLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;\nHSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;-><clinit>()V\nPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;-><clinit>()V\nLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;\nHSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;\nHSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;\nHSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;-><init>([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;-><init>([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;-><init>([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;-><init>([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function6;)V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function6;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;-><clinit>()V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;-><clinit>()V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;-><init>()V\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;-><init>()V\nHSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object;\nPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object;\nLkotlinx/coroutines/flow/MutableSharedFlow;\nLkotlinx/coroutines/flow/MutableStateFlow;\nLkotlinx/coroutines/flow/ReadonlySharedFlow;\nHSPLkotlinx/coroutines/flow/ReadonlySharedFlow;-><init>(Lkotlinx/coroutines/flow/SharedFlow;Lkotlinx/coroutines/Job;)V\nPLkotlinx/coroutines/flow/ReadonlySharedFlow;-><init>(Lkotlinx/coroutines/flow/SharedFlow;Lkotlinx/coroutines/Job;)V\nHSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/ReadonlyStateFlow;\nHSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V\nPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V\nHSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;\nLkotlinx/coroutines/flow/SafeFlow;\nHSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/SharedFlow;\nLkotlinx/coroutines/flow/SharedFlowImpl;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V\nPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object;\nPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation;\nHPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$kotlinx_coroutines_core()J\nPLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$kotlinx_coroutines_core()J\nLkotlinx/coroutines/flow/SharedFlowImpl$Emitter;\nLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;\nHSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/SharedFlowKt;\nHSPLkotlinx/coroutines/flow/SharedFlowKt;-><clinit>()V\nPLkotlinx/coroutines/flow/SharedFlowKt;-><clinit>()V\nHSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow;\nPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow;\nHSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow;\nHPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow;\nHSPLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V\nPLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V\nLkotlinx/coroutines/flow/SharedFlowSlot;\nHSPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V\nHPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V\nHSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z\nPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z\nPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z\nHSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation;\nHPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation;\nLkotlinx/coroutines/flow/SharingCommand;\nHSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V\nPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V\nHSPLkotlinx/coroutines/flow/SharingCommand;-><init>(Ljava/lang/String;I)V\nPLkotlinx/coroutines/flow/SharingCommand;-><init>(Ljava/lang/String;I)V\nHSPLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand;\nPLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand;\nLkotlinx/coroutines/flow/SharingConfig;\nHSPLkotlinx/coroutines/flow/SharingConfig;-><init>(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V\nPLkotlinx/coroutines/flow/SharingConfig;-><init>(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V\nLkotlinx/coroutines/flow/SharingStarted;\nHSPLkotlinx/coroutines/flow/SharingStarted;-><clinit>()V\nPLkotlinx/coroutines/flow/SharingStarted;-><clinit>()V\nLkotlinx/coroutines/flow/SharingStarted$Companion;\nHSPLkotlinx/coroutines/flow/SharingStarted$Companion;-><clinit>()V\nPLkotlinx/coroutines/flow/SharingStarted$Companion;-><clinit>()V\nHSPLkotlinx/coroutines/flow/SharingStarted$Companion;-><init>()V\nPLkotlinx/coroutines/flow/SharingStarted$Companion;-><init>()V\nHSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted;\nPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted;\nHSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted;\nPLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted;\nHSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted;\nPLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted;\nLkotlinx/coroutines/flow/StartedEagerly;\nHSPLkotlinx/coroutines/flow/StartedEagerly;-><init>()V\nPLkotlinx/coroutines/flow/StartedEagerly;-><init>()V\nLkotlinx/coroutines/flow/StartedLazily;\nHSPLkotlinx/coroutines/flow/StartedLazily;-><init>()V\nPLkotlinx/coroutines/flow/StartedLazily;-><init>()V\nLkotlinx/coroutines/flow/StartedWhileSubscribed;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V\nPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J\nPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J\nPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z\nPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z\nLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/StateFlow;\nLkotlinx/coroutines/flow/StateFlowImpl;\nHSPLkotlinx/coroutines/flow/StateFlowImpl;-><clinit>()V\nPLkotlinx/coroutines/flow/StateFlowImpl;-><clinit>()V\nHSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V\nPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z\nPLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z\nLkotlinx/coroutines/flow/StateFlowImpl$collect$1;\nHSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/StateFlowKt;\nHSPLkotlinx/coroutines/flow/StateFlowKt;-><clinit>()V\nPLkotlinx/coroutines/flow/StateFlowKt;-><clinit>()V\nHSPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow;\nPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow;\nHSPLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol;\nLkotlinx/coroutines/flow/StateFlowSlot;\nHSPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V\nPLkotlinx/coroutines/flow/StateFlowSlot;-><clinit>()V\nHSPLkotlinx/coroutines/flow/StateFlowSlot;-><init>()V\nPLkotlinx/coroutines/flow/StateFlowSlot;-><init>()V\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z\nPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z\nHPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V\nHPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V\nHSPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z\nHPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z\nLkotlinx/coroutines/flow/SubscribedFlowCollector;\nLkotlinx/coroutines/flow/ThrowingCollector;\nLkotlinx/coroutines/flow/internal/AbortFlowException;\nHSPLkotlinx/coroutines/flow/internal/AbortFlowException;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nPLkotlinx/coroutines/flow/internal/AbortFlowException;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable;\nPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable;\nLkotlinx/coroutines/flow/internal/AbstractSharedFlow;\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;-><init>()V\nHPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;-><init>()V\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I\nPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V\nHPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I\nPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow;\nPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow;\nLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;-><clinit>()V\nLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;\nHSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;-><init>()V\nHPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;-><init>()V\nLkotlinx/coroutines/flow/internal/ChannelFlow;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$kotlinx_coroutines_core()Lkotlin/jvm/functions/Function2;\nPLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$kotlinx_coroutines_core()Lkotlin/jvm/functions/Function2;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$kotlinx_coroutines_core()I\nPLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$kotlinx_coroutines_core()I\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel;\nPLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel;\nLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowOperator;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V\nHPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;-><init>(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;-><init>(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;-><init>(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;-><init>(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel;\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel;\nLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/internal/SendingCollector;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/internal/SendingCollector;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/ChildCancelledException;\nHSPLkotlinx/coroutines/flow/internal/ChildCancelledException;-><init>()V\nPLkotlinx/coroutines/flow/internal/ChildCancelledException;-><init>()V\nHSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable;\nPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable;\nLkotlinx/coroutines/flow/internal/CombineKt;\nHSPLkotlinx/coroutines/flow/internal/CombineKt;->combineInternal(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/CombineKt;->combineInternal(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;-><init>([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;-><init>([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;-><init>(Lkotlinx/coroutines/channels/Channel;I)V\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;-><init>(Lkotlinx/coroutines/channels/Channel;I)V\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;\nHSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;-><init>(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V\nPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;-><init>(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V\nLkotlinx/coroutines/flow/internal/FlowCoroutine;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/FlowCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z\nHPLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z\nLkotlinx/coroutines/flow/internal/FlowCoroutineKt;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->flowScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->flowScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;-><init>(Lkotlin/jvm/functions/Function3;)V\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;-><init>(Lkotlin/jvm/functions/Function3;)V\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;\nHSPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V\nPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V\nLkotlinx/coroutines/flow/internal/FusibleFlow;\nLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;\nHSPLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;->fuse$default(Lkotlinx/coroutines/flow/internal/FusibleFlow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;\nPLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;->fuse$default(Lkotlinx/coroutines/flow/internal/FusibleFlow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;\nLkotlinx/coroutines/flow/internal/NoOpContinuation;\nHSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V\nHSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><init>()V\nPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><init>()V\nLkotlinx/coroutines/flow/internal/NopCollector;\nHSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V\nHSPLkotlinx/coroutines/flow/internal/NopCollector;-><init>()V\nPLkotlinx/coroutines/flow/internal/NopCollector;-><init>()V\nHSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/NullSurrogateKt;\nHSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/NullSurrogateKt;-><clinit>()V\nLkotlinx/coroutines/flow/internal/SafeCollector;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V\nHPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V\nHPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V\nLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><clinit>()V\nHSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><init>()V\nPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><init>()V\nHSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;\nHPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/SafeCollectorKt;\nHSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/SafeCollectorKt;-><clinit>()V\nHSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3;\nLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;\nHSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><clinit>()V\nPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><clinit>()V\nHSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><init>()V\nPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><init>()V\nHSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V\nHPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job;\nPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job;\nLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;-><init>(Lkotlinx/coroutines/flow/internal/SafeCollector;)V\nHPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;-><init>(Lkotlinx/coroutines/flow/internal/SafeCollector;)V\nHSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;\nHPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;\nHSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/SendingCollector;\nHSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/SendChannel;)V\nPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/SendChannel;)V\nHSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;\nHSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V\nPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V\nHSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z\nHPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z\nLkotlinx/coroutines/internal/AtomicKt;\nHSPLkotlinx/coroutines/internal/AtomicKt;-><clinit>()V\nPLkotlinx/coroutines/internal/AtomicKt;-><clinit>()V\nLkotlinx/coroutines/internal/AtomicOp;\nHSPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V\nPLkotlinx/coroutines/internal/AtomicOp;-><clinit>()V\nHSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V\nPLkotlinx/coroutines/internal/AtomicOp;-><init>()V\nHSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/internal/ConcurrentLinkedListKt;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;-><clinit>()V\nPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->access$getCLOSED$p()Lkotlinx/coroutines/internal/Symbol;\nHPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->access$getCLOSED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nLkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><clinit>()V\nPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><init>(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V\nHPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;-><init>(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->access$getNextOrClosed(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->access$getNextOrClosed(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V\nHPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->markAsClosed()Z\nPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->markAsClosed()Z\nHSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->trySetNext(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Z\nHPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->trySetNext(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Z\nLkotlinx/coroutines/internal/ContextScope;\nHSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V\nPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;\nLkotlinx/coroutines/internal/DispatchedContinuation;\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V\nPLkotlinx/coroutines/internal/DispatchedContinuation;-><clinit>()V\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V\nPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability$kotlinx_coroutines_core()V\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability$kotlinx_coroutines_core()V\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation$kotlinx_coroutines_core()Lkotlinx/coroutines/CancellableContinuationImpl;\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation$kotlinx_coroutines_core()Lkotlinx/coroutines/CancellableContinuationImpl;\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->dispatchYield$kotlinx_coroutines_core(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V\nPLkotlinx/coroutines/internal/DispatchedContinuation;->dispatchYield$kotlinx_coroutines_core(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;\nPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation;\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable$kotlinx_coroutines_core()Z\nPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable$kotlinx_coroutines_core()Z\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->release$kotlinx_coroutines_core()V\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->release$kotlinx_coroutines_core()V\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;\nPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object;\nHSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation$kotlinx_coroutines_core(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable;\nHPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation$kotlinx_coroutines_core(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable;\nLkotlinx/coroutines/internal/DispatchedContinuationKt;\nHSPLkotlinx/coroutines/internal/DispatchedContinuationKt;-><clinit>()V\nPLkotlinx/coroutines/internal/DispatchedContinuationKt;-><clinit>()V\nHSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith$default(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V\nPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith$default(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V\nLkotlinx/coroutines/internal/InlineList;\nHSPLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/internal/LimitedDispatcher;\nHSPLkotlinx/coroutines/internal/LimitedDispatcher;-><clinit>()V\nPLkotlinx/coroutines/internal/LimitedDispatcher;-><clinit>()V\nHSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;I)V\nPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;I)V\nHSPLkotlinx/coroutines/internal/LimitedDispatcher;->access$obtainTaskOrDeallocateWorker(Lkotlinx/coroutines/internal/LimitedDispatcher;)Ljava/lang/Runnable;\nPLkotlinx/coroutines/internal/LimitedDispatcher;->access$obtainTaskOrDeallocateWorker(Lkotlinx/coroutines/internal/LimitedDispatcher;)Ljava/lang/Runnable;\nHSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/internal/LimitedDispatcher;->obtainTaskOrDeallocateWorker()Ljava/lang/Runnable;\nHPLkotlinx/coroutines/internal/LimitedDispatcher;->obtainTaskOrDeallocateWorker()Ljava/lang/Runnable;\nLkotlinx/coroutines/internal/LimitedDispatcher$Worker;\nHSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;-><init>(Lkotlinx/coroutines/internal/LimitedDispatcher;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;-><init>(Lkotlinx/coroutines/internal/LimitedDispatcher;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->run()V\nPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->run()V\nLkotlinx/coroutines/internal/LimitedDispatcherKt;\nHSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V\nPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V\nLkotlinx/coroutines/internal/LockFreeLinkedListHead;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;-><init>()V\nHPLkotlinx/coroutines/internal/LockFreeLinkedListHead;-><init>()V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z\nHPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z\nLkotlinx/coroutines/internal/LockFreeLinkedListKt;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListKt;-><clinit>()V\nPLkotlinx/coroutines/internal/LockFreeLinkedListKt;-><clinit>()V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListKt;->unwrap(Ljava/lang/Object;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nPLkotlinx/coroutines/internal/LockFreeLinkedListKt;->unwrap(Ljava/lang/Object;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nLkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V\nPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><clinit>()V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I\nLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V\nPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V\nHPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V\nLkotlinx/coroutines/internal/LockFreeTaskQueue;\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V\nPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><clinit>()V\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>(Z)V\nPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>(Z)V\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I\nPLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object;\nLkotlinx/coroutines/internal/LockFreeTaskQueueCore;\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I\nHPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->next()Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->next()Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object;\nLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->addFailReason(J)I\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->addFailReason(J)I\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateHead(JI)J\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateHead(JI)J\nHSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateTail(JI)J\nPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateTail(JI)J\nLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Placeholder;\nLkotlinx/coroutines/internal/MainDispatcherFactory;\nLkotlinx/coroutines/internal/MainDispatcherLoader;\nHSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V\nPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V\nHSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><init>()V\nPLkotlinx/coroutines/internal/MainDispatcherLoader;-><init>()V\nLkotlinx/coroutines/internal/MainDispatchersKt;\nHSPLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;\nPLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;\nLkotlinx/coroutines/internal/OnUndeliveredElementKt;\nLkotlinx/coroutines/internal/OpDescriptor;\nHSPLkotlinx/coroutines/internal/OpDescriptor;-><init>()V\nPLkotlinx/coroutines/internal/OpDescriptor;-><init>()V\nLkotlinx/coroutines/internal/Removed;\nHSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V\nLkotlinx/coroutines/internal/ResizableAtomicArray;\nHSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V\nPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V\nHSPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object;\nHSPLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILjava/lang/Object;)V\nPLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILjava/lang/Object;)V\nLkotlinx/coroutines/internal/ScopeCoroutine;\nHSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V\nPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z\nHPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z\nLkotlinx/coroutines/internal/Segment;\nHSPLkotlinx/coroutines/internal/Segment;-><clinit>()V\nPLkotlinx/coroutines/internal/Segment;-><clinit>()V\nHSPLkotlinx/coroutines/internal/Segment;-><init>(JLkotlinx/coroutines/internal/Segment;I)V\nHPLkotlinx/coroutines/internal/Segment;-><init>(JLkotlinx/coroutines/internal/Segment;I)V\nHSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z\nPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z\nHSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z\nHPLkotlinx/coroutines/internal/Segment;->isRemoved()Z\nHSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V\nHPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V\nHSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z\nHPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z\nLkotlinx/coroutines/internal/SegmentOrClosed;\nHSPLkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;\nHPLkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment;\nHSPLkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z\nPLkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z\nLkotlinx/coroutines/internal/StackTraceRecoveryKt;\nLkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/internal/Symbol;-><init>(Ljava/lang/String;)V\nPLkotlinx/coroutines/internal/Symbol;-><init>(Ljava/lang/String;)V\nLkotlinx/coroutines/internal/SystemPropsKt;\nHSPLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I\nPLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I\nHSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I\nPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I\nHSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J\nPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J\nHSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I\nPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I\nHSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z\nPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z\nLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String;\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String;\nLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z\nPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z\nLkotlinx/coroutines/internal/ThreadContextKt;\nHSPLkotlinx/coroutines/internal/ThreadContextKt;-><clinit>()V\nPLkotlinx/coroutines/internal/ThreadContextKt;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V\nHPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;\nPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;\nHSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><clinit>()V\nPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><init>()V\nPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><init>()V\nHSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object;\nPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object;\nLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;\nHSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;-><clinit>()V\nPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;-><init>()V\nPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;-><init>()V\nLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;\nHSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;-><clinit>()V\nPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;-><init>()V\nPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;-><init>()V\nLkotlinx/coroutines/internal/ThreadSafeHeap;\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;-><clinit>()V\nPLkotlinx/coroutines/internal/ThreadSafeHeap;-><clinit>()V\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;-><init>()V\nPLkotlinx/coroutines/internal/ThreadSafeHeap;-><init>()V\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V\nHPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode;\nPLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode;\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I\nHPLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z\nPLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode;\nPLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode;\nPLkotlinx/coroutines/internal/ThreadSafeHeap;->remove(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)Z\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode;\nHPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode;\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V\nHPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V\nHSPLkotlinx/coroutines/internal/ThreadSafeHeap;->swap(II)V\nPLkotlinx/coroutines/internal/ThreadSafeHeap;->swap(II)V\nLkotlinx/coroutines/internal/ThreadSafeHeapNode;\nLkotlinx/coroutines/internal/ThreadState;\nLkotlinx/coroutines/intrinsics/CancellableKt;\nHSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V\nHPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V\nHSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V\nHPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V\nLkotlinx/coroutines/intrinsics/UndispatchedKt;\nHSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nHPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;\nLkotlinx/coroutines/scheduling/CoroutineScheduler;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->access$getControlState$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->access$getControlState$FU$p()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createTask(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;)Lkotlinx/coroutines/scheduling/Task;\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createTask(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;)Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Z\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Z\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackTopUpdate(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;II)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->runSafely(Lkotlinx/coroutines/scheduling/Task;)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->runSafely(Lkotlinx/coroutines/scheduling/Task;)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalCpuWork()V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalCpuWork()V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z\nPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z\nLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;-><clinit>()V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;-><init>(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;-><init>(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task;\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object;\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getWorkerCtl$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getWorkerCtl$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task;\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu(Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;)Z\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu(Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;)Z\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(I)Lkotlinx/coroutines/scheduling/Task;\nHPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(I)Lkotlinx/coroutines/scheduling/Task;\nLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;-><clinit>()V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;-><init>(Ljava/lang/String;I)V\nPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;-><init>(Ljava/lang/String;I)V\nLkotlinx/coroutines/scheduling/DefaultIoScheduler;\nHSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V\nPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><init>()V\nPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><init>()V\nHSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nLkotlinx/coroutines/scheduling/DefaultScheduler;\nHSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V\nPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V\nPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V\nLkotlinx/coroutines/scheduling/GlobalQueue;\nHSPLkotlinx/coroutines/scheduling/GlobalQueue;-><init>()V\nPLkotlinx/coroutines/scheduling/GlobalQueue;-><init>()V\nLkotlinx/coroutines/scheduling/NanoTimeSource;\nHSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V\nPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><init>()V\nPLkotlinx/coroutines/scheduling/NanoTimeSource;-><init>()V\nHSPLkotlinx/coroutines/scheduling/NanoTimeSource;->nanoTime()J\nHPLkotlinx/coroutines/scheduling/NanoTimeSource;->nanoTime()J\nLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;\nHSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V\nPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V\nHSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchWithContext$kotlinx_coroutines_core(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V\nPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchWithContext$kotlinx_coroutines_core(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V\nLkotlinx/coroutines/scheduling/SchedulerTimeSource;\nHSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;-><init>()V\nPLkotlinx/coroutines/scheduling/SchedulerTimeSource;-><init>()V\nLkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/Task;-><init>()V\nPLkotlinx/coroutines/scheduling/Task;-><init>()V\nHSPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlinx/coroutines/scheduling/TaskContext;)V\nHPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlinx/coroutines/scheduling/TaskContext;)V\nLkotlinx/coroutines/scheduling/TaskContext;\nLkotlinx/coroutines/scheduling/TaskContextImpl;\nHSPLkotlinx/coroutines/scheduling/TaskContextImpl;-><init>(I)V\nPLkotlinx/coroutines/scheduling/TaskContextImpl;-><init>(I)V\nHSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V\nPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V\nHSPLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I\nPLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I\nLkotlinx/coroutines/scheduling/TaskImpl;\nHSPLkotlinx/coroutines/scheduling/TaskImpl;-><init>(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V\nPLkotlinx/coroutines/scheduling/TaskImpl;-><init>(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V\nHSPLkotlinx/coroutines/scheduling/TaskImpl;->run()V\nPLkotlinx/coroutines/scheduling/TaskImpl;->run()V\nLkotlinx/coroutines/scheduling/TasksKt;\nHSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V\nPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V\nLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;\nHSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V\nPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><init>()V\nPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><init>()V\nHSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V\nHSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher;\nPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher;\nLkotlinx/coroutines/scheduling/WorkQueue;\nHSPLkotlinx/coroutines/scheduling/WorkQueue;-><clinit>()V\nPLkotlinx/coroutines/scheduling/WorkQueue;-><clinit>()V\nHSPLkotlinx/coroutines/scheduling/WorkQueue;-><init>()V\nPLkotlinx/coroutines/scheduling/WorkQueue;-><init>()V\nHSPLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task;\nPLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task;\nPLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/WorkQueue;->poll()Lkotlinx/coroutines/scheduling/Task;\nPLkotlinx/coroutines/scheduling/WorkQueue;->poll()Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task;\nHPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task;\nHSPLkotlinx/coroutines/scheduling/WorkQueue;->trySteal(ILkotlin/jvm/internal/Ref$ObjectRef;)J\nHPLkotlinx/coroutines/scheduling/WorkQueue;->trySteal(ILkotlin/jvm/internal/Ref$ObjectRef;)J\nLkotlinx/coroutines/selects/OnTimeout;\nHSPLkotlinx/coroutines/selects/OnTimeout;-><init>(J)V\nPLkotlinx/coroutines/selects/OnTimeout;-><init>(J)V\nHSPLkotlinx/coroutines/selects/OnTimeout;->access$register(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V\nPLkotlinx/coroutines/selects/OnTimeout;->access$register(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/selects/OnTimeout;->getSelectClause()Lkotlinx/coroutines/selects/SelectClause0;\nPLkotlinx/coroutines/selects/OnTimeout;->getSelectClause()Lkotlinx/coroutines/selects/SelectClause0;\nLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;\nHSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;-><init>(Lkotlinx/coroutines/selects/SelectInstance;Lkotlinx/coroutines/selects/OnTimeout;)V\nPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;-><init>(Lkotlinx/coroutines/selects/SelectInstance;Lkotlinx/coroutines/selects/OnTimeout;)V\nHSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->run()V\nPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->run()V\nLkotlinx/coroutines/selects/OnTimeout$selectClause$1;\nHSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;-><clinit>()V\nPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;-><clinit>()V\nHSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;-><init>()V\nPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;-><init>()V\nHSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/selects/OnTimeoutKt;\nHSPLkotlinx/coroutines/selects/OnTimeoutKt;->onTimeout(Lkotlinx/coroutines/selects/SelectBuilder;JLkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/selects/OnTimeoutKt;->onTimeout(Lkotlinx/coroutines/selects/SelectBuilder;JLkotlin/jvm/functions/Function1;)V\nLkotlinx/coroutines/selects/SelectBuilder;\nLkotlinx/coroutines/selects/SelectClause;\nLkotlinx/coroutines/selects/SelectClause0;\nLkotlinx/coroutines/selects/SelectClause0Impl;\nHSPLkotlinx/coroutines/selects/SelectClause0Impl;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V\nPLkotlinx/coroutines/selects/SelectClause0Impl;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V\nHSPLkotlinx/coroutines/selects/SelectClause0Impl;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/coroutines/selects/SelectClause0Impl;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/coroutines/selects/SelectClause0Impl;->getClauseObject()Ljava/lang/Object;\nPLkotlinx/coroutines/selects/SelectClause0Impl;->getClauseObject()Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectClause0Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectClause0Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3;\nHSPLkotlinx/coroutines/selects/SelectClause0Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectClause0Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3;\nHSPLkotlinx/coroutines/selects/SelectClause0Impl;->getRegFunc()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectClause0Impl;->getRegFunc()Lkotlin/jvm/functions/Function3;\nLkotlinx/coroutines/selects/SelectClause1;\nLkotlinx/coroutines/selects/SelectClause1Impl;\nHSPLkotlinx/coroutines/selects/SelectClause1Impl;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V\nHPLkotlinx/coroutines/selects/SelectClause1Impl;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V\nHSPLkotlinx/coroutines/selects/SelectClause1Impl;->getClauseObject()Ljava/lang/Object;\nPLkotlinx/coroutines/selects/SelectClause1Impl;->getClauseObject()Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectClause1Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectClause1Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3;\nHSPLkotlinx/coroutines/selects/SelectClause1Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectClause1Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3;\nHSPLkotlinx/coroutines/selects/SelectClause1Impl;->getRegFunc()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectClause1Impl;->getRegFunc()Lkotlin/jvm/functions/Function3;\nLkotlinx/coroutines/selects/SelectImplementation;\nHSPLkotlinx/coroutines/selects/SelectImplementation;-><clinit>()V\nPLkotlinx/coroutines/selects/SelectImplementation;-><clinit>()V\nHSPLkotlinx/coroutines/selects/SelectImplementation;-><init>(Lkotlin/coroutines/CoroutineContext;)V\nHPLkotlinx/coroutines/selects/SelectImplementation;-><init>(Lkotlin/coroutines/CoroutineContext;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->access$doSelectSuspend(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLkotlinx/coroutines/selects/SelectImplementation;->access$doSelectSuspend(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation;->access$getInternalResult$p(Lkotlinx/coroutines/selects/SelectImplementation;)Ljava/lang/Object;\nPLkotlinx/coroutines/selects/SelectImplementation;->access$getInternalResult$p(Lkotlinx/coroutines/selects/SelectImplementation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation;->complete(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/selects/SelectImplementation;->complete(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation;->disposeOnCompletion(Lkotlinx/coroutines/DisposableHandle;)V\nPLkotlinx/coroutines/selects/SelectImplementation;->disposeOnCompletion(Lkotlinx/coroutines/DisposableHandle;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->doSelect(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/selects/SelectImplementation;->doSelect(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation;->doSelectSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/selects/SelectImplementation;->doSelectSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation;->findClause(Ljava/lang/Object;)Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;\nHPLkotlinx/coroutines/selects/SelectImplementation;->findClause(Ljava/lang/Object;)Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;\nHSPLkotlinx/coroutines/selects/SelectImplementation;->getContext()Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/selects/SelectImplementation;->getContext()Lkotlin/coroutines/CoroutineContext;\nPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Ljava/lang/Throwable;)V\nHPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Ljava/lang/Throwable;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V\nPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V\nPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nHPLkotlinx/coroutines/selects/SelectImplementation;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->register$default(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;ZILjava/lang/Object;)V\nHPLkotlinx/coroutines/selects/SelectImplementation;->register$default(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;ZILjava/lang/Object;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->register(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;Z)V\nHPLkotlinx/coroutines/selects/SelectImplementation;->register(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;Z)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->selectInRegistrationPhase(Ljava/lang/Object;)V\nPLkotlinx/coroutines/selects/SelectImplementation;->selectInRegistrationPhase(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation;->trySelect(Ljava/lang/Object;Ljava/lang/Object;)Z\nPLkotlinx/coroutines/selects/SelectImplementation;->trySelect(Ljava/lang/Object;Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/selects/SelectImplementation;->trySelectInternal(Ljava/lang/Object;Ljava/lang/Object;)I\nHPLkotlinx/coroutines/selects/SelectImplementation;->trySelectInternal(Ljava/lang/Object;Ljava/lang/Object;)I\nHSPLkotlinx/coroutines/selects/SelectImplementation;->waitUntilSelected(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/selects/SelectImplementation;->waitUntilSelected(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLkotlinx/coroutines/selects/SelectImplementation$ClauseData;\nHSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;-><init>(Lkotlinx/coroutines/selects/SelectImplementation;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V\nHPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;-><init>(Lkotlinx/coroutines/selects/SelectImplementation;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->createOnCancellationAction(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;\nPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->createOnCancellationAction(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;\nHSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->dispose()V\nHPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->dispose()V\nHSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->invokeBlock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->invokeBlock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->processResult(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->processResult(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->tryRegisterAsWaiter(Lkotlinx/coroutines/selects/SelectImplementation;)Z\nPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->tryRegisterAsWaiter(Lkotlinx/coroutines/selects/SelectImplementation;)Z\nLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;\nHSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;-><init>(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)V\nHPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;-><init>(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)V\nHSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/selects/SelectInstance;\nLkotlinx/coroutines/selects/SelectInstanceInternal;\nLkotlinx/coroutines/selects/SelectKt;\nHSPLkotlinx/coroutines/selects/SelectKt;-><clinit>()V\nPLkotlinx/coroutines/selects/SelectKt;-><clinit>()V\nHSPLkotlinx/coroutines/selects/SelectKt;->access$getDUMMY_PROCESS_RESULT_FUNCTION$p()Lkotlin/jvm/functions/Function3;\nPLkotlinx/coroutines/selects/SelectKt;->access$getDUMMY_PROCESS_RESULT_FUNCTION$p()Lkotlin/jvm/functions/Function3;\nHSPLkotlinx/coroutines/selects/SelectKt;->access$getNO_RESULT$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/selects/SelectKt;->access$getNO_RESULT$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_CANCELLED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_COMPLETED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_COMPLETED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_REG$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_REG$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/selects/SelectKt;->access$tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z\nHPLkotlinx/coroutines/selects/SelectKt;->access$tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z\nHSPLkotlinx/coroutines/selects/SelectKt;->getPARAM_CLAUSE_0()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/selects/SelectKt;->getPARAM_CLAUSE_0()Lkotlinx/coroutines/internal/Symbol;\nLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;\nHSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;-><clinit>()V\nPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;-><clinit>()V\nHSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;-><init>()V\nPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;-><init>()V\nHSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLkotlinx/coroutines/sync/Mutex;\nLkotlinx/coroutines/sync/Mutex$DefaultImpls;\nHSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V\nPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V\nLkotlinx/coroutines/sync/MutexImpl;\nHSPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V\nPLkotlinx/coroutines/sync/MutexImpl;-><clinit>()V\nHSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V\nHPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V\nHSPLkotlinx/coroutines/sync/MutexImpl;->access$getOwner$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nPLkotlinx/coroutines/sync/MutexImpl;->access$getOwner$FU$p()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;\nHSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z\nPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z\nHSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z\nHPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z\nHSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V\nHPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V\nLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;\nHSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;)V\nHPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V\nPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V\nHSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V\nHSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nHSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Lkotlin/Unit;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Lkotlin/Unit;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;\nLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;\nHSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V\nPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V\nLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;\nHSPLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;)V\nHPLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;)V\nLkotlinx/coroutines/sync/MutexKt;\nHSPLkotlinx/coroutines/sync/MutexKt;-><clinit>()V\nPLkotlinx/coroutines/sync/MutexKt;-><clinit>()V\nHSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex;\nPLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex;\nHSPLkotlinx/coroutines/sync/MutexKt;->access$getNO_OWNER$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/sync/MutexKt;->access$getNO_OWNER$p()Lkotlinx/coroutines/internal/Symbol;\nLkotlinx/coroutines/sync/Semaphore;\nLkotlinx/coroutines/sync/SemaphoreImpl;\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;-><clinit>()V\nPLkotlinx/coroutines/sync/SemaphoreImpl;-><clinit>()V\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;-><init>(II)V\nHPLkotlinx/coroutines/sync/SemaphoreImpl;-><init>(II)V\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/CancellableContinuation;)V\nHPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/CancellableContinuation;)V\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;->addAcquireToQueue(Lkotlinx/coroutines/Waiter;)Z\nHPLkotlinx/coroutines/sync/SemaphoreImpl;->addAcquireToQueue(Lkotlinx/coroutines/Waiter;)Z\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;->getAvailablePermits()I\nHPLkotlinx/coroutines/sync/SemaphoreImpl;->getAvailablePermits()I\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V\nHPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V\nHSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryAcquire()Z\nHPLkotlinx/coroutines/sync/SemaphoreImpl;->tryAcquire()Z\nLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;\nHSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><clinit>()V\nPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><clinit>()V\nHSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><init>()V\nPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;-><init>()V\nLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;\nHSPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;-><init>(Lkotlinx/coroutines/sync/SemaphoreImpl;)V\nHPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;-><init>(Lkotlinx/coroutines/sync/SemaphoreImpl;)V\nLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;\nHSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><clinit>()V\nPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><clinit>()V\nHSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><init>()V\nPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;-><init>()V\nLkotlinx/coroutines/sync/SemaphoreKt;\nHSPLkotlinx/coroutines/sync/SemaphoreKt;-><clinit>()V\nPLkotlinx/coroutines/sync/SemaphoreKt;-><clinit>()V\nHSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getCANCELLED$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/sync/SemaphoreKt;->access$getCANCELLED$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getPERMIT$p()Lkotlinx/coroutines/internal/Symbol;\nPLkotlinx/coroutines/sync/SemaphoreKt;->access$getPERMIT$p()Lkotlinx/coroutines/internal/Symbol;\nHSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getSEGMENT_SIZE$p()I\nPLkotlinx/coroutines/sync/SemaphoreKt;->access$getSEGMENT_SIZE$p()I\nLkotlinx/coroutines/sync/SemaphoreSegment;\nHSPLkotlinx/coroutines/sync/SemaphoreSegment;-><init>(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V\nHPLkotlinx/coroutines/sync/SemaphoreSegment;-><init>(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V\nHSPLkotlinx/coroutines/sync/SemaphoreSegment;->getAcquirers()Ljava/util/concurrent/atomic/AtomicReferenceArray;\nPLkotlinx/coroutines/sync/SemaphoreSegment;->getAcquirers()Ljava/util/concurrent/atomic/AtomicReferenceArray;\nHSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I\nPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I\nLkotlinx/serialization/DeserializationStrategy;\nLkotlinx/serialization/KSerializer;\nLkotlinx/serialization/MissingFieldException;\nLkotlinx/serialization/SerialFormat;\nLkotlinx/serialization/SerializationException;\nLkotlinx/serialization/SerializationStrategy;\nLkotlinx/serialization/StringFormat;\nLkotlinx/serialization/UnknownFieldException;\nLkotlinx/serialization/builtins/BuiltinSerializersKt;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->BooleanArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->BooleanArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ByteArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ByteArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->CharArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->CharArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->DoubleArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->DoubleArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->FloatArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->FloatArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->IntArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->IntArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ListSerializer(Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ListSerializer(Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->LongArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->LongArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->MapSerializer(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->MapSerializer(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->NothingSerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->NothingSerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ShortArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ShortArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UByteArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UByteArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UIntArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UIntArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ULongArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ULongArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UShortArraySerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UShortArraySerializer()Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UByte$Companion;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UByte$Companion;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UInt$Companion;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UInt$Companion;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/ULong$Companion;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/ULong$Companion;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UShort$Companion;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UShort$Companion;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/Unit;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/Unit;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/time/Duration$Companion;)Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/time/Duration$Companion;)Lkotlinx/serialization/KSerializer;\nLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;-><init>(Ljava/lang/String;)V\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;-><init>(Ljava/lang/String;)V\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element$default(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element$default(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;Z)V\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;Z)V\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getAnnotations()Ljava/util/List;\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getAnnotations()Ljava/util/List;\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementAnnotations$kotlinx_serialization_core()Ljava/util/List;\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementAnnotations$kotlinx_serialization_core()Ljava/util/List;\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementDescriptors$kotlinx_serialization_core()Ljava/util/List;\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementDescriptors$kotlinx_serialization_core()Ljava/util/List;\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementNames$kotlinx_serialization_core()Ljava/util/List;\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementNames$kotlinx_serialization_core()Ljava/util/List;\nHSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementOptionality$kotlinx_serialization_core()Ljava/util/List;\nPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementOptionality$kotlinx_serialization_core()Ljava/util/List;\nLkotlinx/serialization/descriptors/PolymorphicKind;\nHSPLkotlinx/serialization/descriptors/PolymorphicKind;-><init>()V\nPLkotlinx/serialization/descriptors/PolymorphicKind;-><init>()V\nHSPLkotlinx/serialization/descriptors/PolymorphicKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/descriptors/PolymorphicKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;\nHSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;-><clinit>()V\nPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;-><init>()V\nPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind;-><init>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/descriptors/PrimitiveKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$INT;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$INT;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$INT;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$LONG;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;-><init>()V\nLkotlinx/serialization/descriptors/PrimitiveKind$STRING;\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;-><clinit>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;-><init>()V\nPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;-><init>()V\nLkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;\nHSPLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;->isNullable(Lkotlinx/serialization/descriptors/SerialDescriptor;)Z\nPLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;->isNullable(Lkotlinx/serialization/descriptors/SerialDescriptor;)Z\nLkotlinx/serialization/descriptors/SerialDescriptorImpl;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorImpl;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;ILjava/util/List;Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V\nPLkotlinx/serialization/descriptors/SerialDescriptorImpl;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;ILjava/util/List;Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V\nLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptorImpl;)V\nPLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptorImpl;)V\nLkotlinx/serialization/descriptors/SerialDescriptorKt;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt;->getElementDescriptors(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/lang/Iterable;\nPLkotlinx/serialization/descriptors/SerialDescriptorKt;->getElementDescriptors(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/lang/Iterable;\nLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->hasNext()Z\nPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->hasNext()Z\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Ljava/lang/Object;\nPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Ljava/lang/Object;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/descriptors/SerialDescriptorKt$elementDescriptors$1$1;->next()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;->iterator()Ljava/util/Iterator;\nPLkotlinx/serialization/descriptors/SerialDescriptorKt$special$$inlined$Iterable$1;->iterator()Ljava/util/Iterator;\nLkotlinx/serialization/descriptors/SerialDescriptorsKt;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildClassSerialDescriptor(Ljava/lang/String;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildClassSerialDescriptor(Ljava/lang/String;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/descriptors/SerialKind;\nHSPLkotlinx/serialization/descriptors/SerialKind;-><init>()V\nPLkotlinx/serialization/descriptors/SerialKind;-><init>()V\nHSPLkotlinx/serialization/descriptors/SerialKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/descriptors/SerialKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/descriptors/SerialKind;->hashCode()I\nPLkotlinx/serialization/descriptors/SerialKind;->hashCode()I\nHSPLkotlinx/serialization/descriptors/SerialKind;->toString()Ljava/lang/String;\nPLkotlinx/serialization/descriptors/SerialKind;->toString()Ljava/lang/String;\nLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;\nHSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;-><clinit>()V\nPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;-><init>()V\nPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;-><init>()V\nLkotlinx/serialization/descriptors/SerialKind$ENUM;\nLkotlinx/serialization/descriptors/StructureKind;\nHSPLkotlinx/serialization/descriptors/StructureKind;-><init>()V\nPLkotlinx/serialization/descriptors/StructureKind;-><init>()V\nHSPLkotlinx/serialization/descriptors/StructureKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/descriptors/StructureKind;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/descriptors/StructureKind$CLASS;\nHSPLkotlinx/serialization/descriptors/StructureKind$CLASS;-><clinit>()V\nPLkotlinx/serialization/descriptors/StructureKind$CLASS;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/StructureKind$CLASS;-><init>()V\nPLkotlinx/serialization/descriptors/StructureKind$CLASS;-><init>()V\nLkotlinx/serialization/descriptors/StructureKind$LIST;\nHSPLkotlinx/serialization/descriptors/StructureKind$LIST;-><clinit>()V\nPLkotlinx/serialization/descriptors/StructureKind$LIST;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/StructureKind$LIST;-><init>()V\nPLkotlinx/serialization/descriptors/StructureKind$LIST;-><init>()V\nLkotlinx/serialization/descriptors/StructureKind$MAP;\nHSPLkotlinx/serialization/descriptors/StructureKind$MAP;-><clinit>()V\nPLkotlinx/serialization/descriptors/StructureKind$MAP;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/StructureKind$MAP;-><init>()V\nPLkotlinx/serialization/descriptors/StructureKind$MAP;-><init>()V\nLkotlinx/serialization/descriptors/StructureKind$OBJECT;\nHSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;-><clinit>()V\nPLkotlinx/serialization/descriptors/StructureKind$OBJECT;-><clinit>()V\nHSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;-><init>()V\nPLkotlinx/serialization/descriptors/StructureKind$OBJECT;-><init>()V\nLkotlinx/serialization/encoding/AbstractDecoder;\nHSPLkotlinx/serialization/encoding/AbstractDecoder;-><init>()V\nPLkotlinx/serialization/encoding/AbstractDecoder;-><init>()V\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeIntElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)I\nHPLkotlinx/serialization/encoding/AbstractDecoder;->decodeIntElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)I\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeLongElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)J\nHPLkotlinx/serialization/encoding/AbstractDecoder;->decodeLongElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)J\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeNullableSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/serialization/encoding/AbstractDecoder;->decodeNullableSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()Z\nPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()Z\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeStringElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;\nHPLkotlinx/serialization/encoding/AbstractDecoder;->decodeStringElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;\nLkotlinx/serialization/encoding/ChunkedDecoder;\nLkotlinx/serialization/encoding/CompositeDecoder;\nLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;\nHSPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSequentially(Lkotlinx/serialization/encoding/CompositeDecoder;)Z\nPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSequentially(Lkotlinx/serialization/encoding/CompositeDecoder;)Z\nHSPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSerializableElement$default(Lkotlinx/serialization/encoding/CompositeDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSerializableElement$default(Lkotlinx/serialization/encoding/CompositeDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;\nLkotlinx/serialization/encoding/Decoder;\nLkotlinx/serialization/internal/AbstractCollectionSerializer;\nHSPLkotlinx/serialization/internal/AbstractCollectionSerializer;-><init>()V\nPLkotlinx/serialization/internal/AbstractCollectionSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/AbstractCollectionSerializer;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/internal/AbstractCollectionSerializer;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;\nHPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;\nHSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->readElement$default(Lkotlinx/serialization/internal/AbstractCollectionSerializer;Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;ZILjava/lang/Object;)V\nHPLkotlinx/serialization/internal/AbstractCollectionSerializer;->readElement$default(Lkotlinx/serialization/internal/AbstractCollectionSerializer;Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;ZILjava/lang/Object;)V\nLkotlinx/serialization/internal/AbstractPolymorphicSerializer;\nLkotlinx/serialization/internal/ArrayListClassDesc;\nHSPLkotlinx/serialization/internal/ArrayListClassDesc;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/internal/ArrayListClassDesc;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nLkotlinx/serialization/internal/ArrayListSerializer;\nHSPLkotlinx/serialization/internal/ArrayListSerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/ArrayListSerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/lang/Object;\nPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/lang/Object;\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/util/ArrayList;\nPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/util/ArrayList;\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/lang/Object;)I\nPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/lang/Object;)I\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/util/ArrayList;)I\nHPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/util/ArrayList;)I\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nHPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/lang/Object;ILjava/lang/Object;)V\nHPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/lang/Object;ILjava/lang/Object;)V\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/util/ArrayList;ILjava/lang/Object;)V\nHPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/util/ArrayList;ILjava/lang/Object;)V\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object;\nPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/util/ArrayList;)Ljava/util/List;\nPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/util/ArrayList;)Ljava/util/List;\nLkotlinx/serialization/internal/BooleanArraySerializer;\nHSPLkotlinx/serialization/internal/BooleanArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/BooleanArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/BooleanArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/BooleanArraySerializer;-><init>()V\nLkotlinx/serialization/internal/BooleanSerializer;\nHSPLkotlinx/serialization/internal/BooleanSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/BooleanSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/BooleanSerializer;-><init>()V\nPLkotlinx/serialization/internal/BooleanSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/ByteArraySerializer;\nHSPLkotlinx/serialization/internal/ByteArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/ByteArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/ByteArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/ByteArraySerializer;-><init>()V\nLkotlinx/serialization/internal/ByteSerializer;\nHSPLkotlinx/serialization/internal/ByteSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/ByteSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/ByteSerializer;-><init>()V\nPLkotlinx/serialization/internal/ByteSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/CachedNames;\nLkotlinx/serialization/internal/CharArraySerializer;\nHSPLkotlinx/serialization/internal/CharArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/CharArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/CharArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/CharArraySerializer;-><init>()V\nLkotlinx/serialization/internal/CharSerializer;\nHSPLkotlinx/serialization/internal/CharSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/CharSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/CharSerializer;-><init>()V\nPLkotlinx/serialization/internal/CharSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/CollectionLikeSerializer;\nHSPLkotlinx/serialization/internal/CollectionLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/CollectionLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nHSPLkotlinx/serialization/internal/CollectionLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/internal/CollectionLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/internal/CollectionLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V\nHPLkotlinx/serialization/internal/CollectionLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V\nLkotlinx/serialization/internal/CollectionSerializer;\nHSPLkotlinx/serialization/internal/CollectionSerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/CollectionSerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nLkotlinx/serialization/internal/DoubleArraySerializer;\nHSPLkotlinx/serialization/internal/DoubleArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/DoubleArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/DoubleArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/DoubleArraySerializer;-><init>()V\nLkotlinx/serialization/internal/DoubleSerializer;\nHSPLkotlinx/serialization/internal/DoubleSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/DoubleSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/DoubleSerializer;-><init>()V\nPLkotlinx/serialization/internal/DoubleSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/DurationSerializer;\nHSPLkotlinx/serialization/internal/DurationSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/DurationSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/DurationSerializer;-><init>()V\nPLkotlinx/serialization/internal/DurationSerializer;-><init>()V\nLkotlinx/serialization/internal/ElementMarker;\nHSPLkotlinx/serialization/internal/ElementMarker;-><clinit>()V\nPLkotlinx/serialization/internal/ElementMarker;-><clinit>()V\nHSPLkotlinx/serialization/internal/ElementMarker;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function2;)V\nHPLkotlinx/serialization/internal/ElementMarker;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function2;)V\nHSPLkotlinx/serialization/internal/ElementMarker;->mark(I)V\nPLkotlinx/serialization/internal/ElementMarker;->mark(I)V\nHSPLkotlinx/serialization/internal/ElementMarker;->nextUnmarkedIndex()I\nHPLkotlinx/serialization/internal/ElementMarker;->nextUnmarkedIndex()I\nLkotlinx/serialization/internal/ElementMarker$Companion;\nHSPLkotlinx/serialization/internal/ElementMarker$Companion;-><init>()V\nPLkotlinx/serialization/internal/ElementMarker$Companion;-><init>()V\nHSPLkotlinx/serialization/internal/ElementMarker$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/internal/ElementMarker$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/internal/FloatArraySerializer;\nHSPLkotlinx/serialization/internal/FloatArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/FloatArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/FloatArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/FloatArraySerializer;-><init>()V\nLkotlinx/serialization/internal/FloatSerializer;\nHSPLkotlinx/serialization/internal/FloatSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/FloatSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/FloatSerializer;-><init>()V\nPLkotlinx/serialization/internal/FloatSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/GeneratedSerializer;\nLkotlinx/serialization/internal/GeneratedSerializer$DefaultImpls;\nHSPLkotlinx/serialization/internal/GeneratedSerializer$DefaultImpls;->typeParametersSerializers(Lkotlinx/serialization/internal/GeneratedSerializer;)[Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/internal/GeneratedSerializer$DefaultImpls;->typeParametersSerializers(Lkotlinx/serialization/internal/GeneratedSerializer;)[Lkotlinx/serialization/KSerializer;\nLkotlinx/serialization/internal/InlineClassDescriptor;\nHSPLkotlinx/serialization/internal/InlineClassDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V\nPLkotlinx/serialization/internal/InlineClassDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V\nLkotlinx/serialization/internal/InlineClassDescriptorKt;\nHSPLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;\nHSPLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;-><init>(Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;-><init>(Lkotlinx/serialization/KSerializer;)V\nLkotlinx/serialization/internal/IntArraySerializer;\nHSPLkotlinx/serialization/internal/IntArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/IntArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/IntArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/IntArraySerializer;-><init>()V\nLkotlinx/serialization/internal/IntSerializer;\nHSPLkotlinx/serialization/internal/IntSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/IntSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/IntSerializer;-><init>()V\nPLkotlinx/serialization/internal/IntSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/LinkedHashMapClassDesc;\nHSPLkotlinx/serialization/internal/LinkedHashMapClassDesc;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/internal/LinkedHashMapClassDesc;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nLkotlinx/serialization/internal/LinkedHashMapSerializer;\nHSPLkotlinx/serialization/internal/LinkedHashMapSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/LinkedHashMapSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V\nHSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/LinkedHashMapSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/ListLikeDescriptor;\nHSPLkotlinx/serialization/internal/ListLikeDescriptor;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/internal/ListLikeDescriptor;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/internal/ListLikeDescriptor;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/internal/ListLikeDescriptor;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/internal/ListLikeDescriptor;->getElementsCount()I\nPLkotlinx/serialization/internal/ListLikeDescriptor;->getElementsCount()I\nHSPLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind;\nPLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind;\nHSPLkotlinx/serialization/internal/ListLikeDescriptor;->isNullable()Z\nPLkotlinx/serialization/internal/ListLikeDescriptor;->isNullable()Z\nLkotlinx/serialization/internal/LongArraySerializer;\nHSPLkotlinx/serialization/internal/LongArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/LongArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/LongArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/LongArraySerializer;-><init>()V\nLkotlinx/serialization/internal/LongSerializer;\nHSPLkotlinx/serialization/internal/LongSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/LongSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/LongSerializer;-><init>()V\nPLkotlinx/serialization/internal/LongSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/MapLikeDescriptor;\nHSPLkotlinx/serialization/internal/MapLikeDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/internal/MapLikeDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/internal/MapLikeDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/internal/MapLikeDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/internal/MapLikeSerializer;\nHSPLkotlinx/serialization/internal/MapLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/MapLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V\nHSPLkotlinx/serialization/internal/MapLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/internal/MapLikeSerializer;-><init>(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/internal/NothingSerialDescriptor;\nHSPLkotlinx/serialization/internal/NothingSerialDescriptor;-><clinit>()V\nPLkotlinx/serialization/internal/NothingSerialDescriptor;-><clinit>()V\nHSPLkotlinx/serialization/internal/NothingSerialDescriptor;-><init>()V\nPLkotlinx/serialization/internal/NothingSerialDescriptor;-><init>()V\nLkotlinx/serialization/internal/NothingSerializer;\nHSPLkotlinx/serialization/internal/NothingSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/NothingSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/NothingSerializer;-><init>()V\nPLkotlinx/serialization/internal/NothingSerializer;-><init>()V\nLkotlinx/serialization/internal/ObjectSerializer;\nHSPLkotlinx/serialization/internal/ObjectSerializer;-><init>(Ljava/lang/String;Ljava/lang/Object;)V\nPLkotlinx/serialization/internal/ObjectSerializer;-><init>(Ljava/lang/String;Ljava/lang/Object;)V\nLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;\nHSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;-><init>(Ljava/lang/String;Lkotlinx/serialization/internal/ObjectSerializer;)V\nPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;-><init>(Ljava/lang/String;Lkotlinx/serialization/internal/ObjectSerializer;)V\nLkotlinx/serialization/internal/Platform_commonKt;\nHSPLkotlinx/serialization/internal/Platform_commonKt;-><clinit>()V\nPLkotlinx/serialization/internal/Platform_commonKt;-><clinit>()V\nHSPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/PluginExceptionsKt;\nLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->access$getGeneratedSerializer$p(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)Lkotlinx/serialization/internal/GeneratedSerializer;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->access$getGeneratedSerializer$p(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)Lkotlinx/serialization/internal/GeneratedSerializer;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->buildIndices()Ljava/util/Map;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->buildIndices()Ljava/util/Map;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getChildSerializers()[Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getChildSerializers()[Lkotlinx/serialization/KSerializer;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementAnnotations(I)Ljava/util/List;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementAnnotations(I)Ljava/util/List;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I\nHPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getTypeParameterDescriptors$kotlinx_serialization_core()[Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getTypeParameterDescriptors$kotlinx_serialization_core()[Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->get_hashCode()I\nHPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->get_hashCode()I\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->hashCode()I\nHPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->hashCode()I\nLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;-><init>(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;-><init>(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Integer;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Integer;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Object;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Object;\nLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;-><init>(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;-><init>(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()Ljava/lang/Object;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()Ljava/lang/Object;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()[Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()[Lkotlinx/serialization/KSerializer;\nLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;-><init>(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;-><init>(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()Ljava/lang/Object;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()Ljava/lang/Object;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()[Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()[Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;\nHSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;->hashCodeImpl(Lkotlinx/serialization/descriptors/SerialDescriptor;[Lkotlinx/serialization/descriptors/SerialDescriptor;)I\nPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;->hashCodeImpl(Lkotlinx/serialization/descriptors/SerialDescriptor;[Lkotlinx/serialization/descriptors/SerialDescriptor;)I\nLkotlinx/serialization/internal/PluginHelperInterfacesKt;\nHSPLkotlinx/serialization/internal/PluginHelperInterfacesKt;-><clinit>()V\nPLkotlinx/serialization/internal/PluginHelperInterfacesKt;-><clinit>()V\nLkotlinx/serialization/internal/PrimitiveArrayDescriptor;\nHSPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nLkotlinx/serialization/internal/PrimitiveArraySerializer;\nHSPLkotlinx/serialization/internal/PrimitiveArraySerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/internal/PrimitiveArraySerializer;-><init>(Lkotlinx/serialization/KSerializer;)V\nLkotlinx/serialization/internal/PrimitiveSerialDescriptor;\nHSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V\nPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;-><init>(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V\nHSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/PrimitiveKind;\nPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/PrimitiveKind;\nHSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind;\nPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind;\nHSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String;\nPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String;\nLkotlinx/serialization/internal/PrimitivesKt;\nHSPLkotlinx/serialization/internal/PrimitivesKt;-><clinit>()V\nPLkotlinx/serialization/internal/PrimitivesKt;-><clinit>()V\nHSPLkotlinx/serialization/internal/PrimitivesKt;->PrimitiveDescriptorSafe(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/PrimitivesKt;->PrimitiveDescriptorSafe(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String;\nPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String;\nHSPLkotlinx/serialization/internal/PrimitivesKt;->checkName(Ljava/lang/String;)V\nPLkotlinx/serialization/internal/PrimitivesKt;->checkName(Ljava/lang/String;)V\nLkotlinx/serialization/internal/ShortArraySerializer;\nHSPLkotlinx/serialization/internal/ShortArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/ShortArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/ShortArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/ShortArraySerializer;-><init>()V\nLkotlinx/serialization/internal/ShortSerializer;\nHSPLkotlinx/serialization/internal/ShortSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/ShortSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/ShortSerializer;-><init>()V\nPLkotlinx/serialization/internal/ShortSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/StringSerializer;\nHSPLkotlinx/serialization/internal/StringSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/StringSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/StringSerializer;-><init>()V\nPLkotlinx/serialization/internal/StringSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/UByteArraySerializer;\nHSPLkotlinx/serialization/internal/UByteArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UByteArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UByteArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/UByteArraySerializer;-><init>()V\nLkotlinx/serialization/internal/UByteSerializer;\nHSPLkotlinx/serialization/internal/UByteSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UByteSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UByteSerializer;-><init>()V\nPLkotlinx/serialization/internal/UByteSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/UIntArraySerializer;\nHSPLkotlinx/serialization/internal/UIntArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UIntArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UIntArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/UIntArraySerializer;-><init>()V\nLkotlinx/serialization/internal/UIntSerializer;\nHSPLkotlinx/serialization/internal/UIntSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UIntSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UIntSerializer;-><init>()V\nPLkotlinx/serialization/internal/UIntSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/ULongArraySerializer;\nHSPLkotlinx/serialization/internal/ULongArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/ULongArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/ULongArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/ULongArraySerializer;-><init>()V\nLkotlinx/serialization/internal/ULongSerializer;\nHSPLkotlinx/serialization/internal/ULongSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/ULongSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/ULongSerializer;-><init>()V\nPLkotlinx/serialization/internal/ULongSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/UShortArraySerializer;\nHSPLkotlinx/serialization/internal/UShortArraySerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UShortArraySerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UShortArraySerializer;-><init>()V\nPLkotlinx/serialization/internal/UShortArraySerializer;-><init>()V\nLkotlinx/serialization/internal/UShortSerializer;\nHSPLkotlinx/serialization/internal/UShortSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UShortSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UShortSerializer;-><init>()V\nPLkotlinx/serialization/internal/UShortSerializer;-><init>()V\nHSPLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLkotlinx/serialization/internal/UnitSerializer;\nHSPLkotlinx/serialization/internal/UnitSerializer;-><clinit>()V\nPLkotlinx/serialization/internal/UnitSerializer;-><clinit>()V\nHSPLkotlinx/serialization/internal/UnitSerializer;-><init>()V\nPLkotlinx/serialization/internal/UnitSerializer;-><init>()V\nLkotlinx/serialization/json/Json;\nHSPLkotlinx/serialization/json/Json;-><clinit>()V\nPLkotlinx/serialization/json/Json;-><clinit>()V\nHSPLkotlinx/serialization/json/Json;-><init>(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V\nPLkotlinx/serialization/json/Json;-><init>(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V\nHSPLkotlinx/serialization/json/Json;-><init>(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/json/Json;-><init>(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/json/Json;->getConfiguration()Lkotlinx/serialization/json/JsonConfiguration;\nPLkotlinx/serialization/json/Json;->getConfiguration()Lkotlinx/serialization/json/JsonConfiguration;\nHSPLkotlinx/serialization/json/Json;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nPLkotlinx/serialization/json/Json;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nHSPLkotlinx/serialization/json/Json;->get_schemaCache$kotlinx_serialization_json()Lkotlinx/serialization/json/internal/DescriptorSchemaCache;\nPLkotlinx/serialization/json/Json;->get_schemaCache$kotlinx_serialization_json()Lkotlinx/serialization/json/internal/DescriptorSchemaCache;\nLkotlinx/serialization/json/Json$Default;\nHSPLkotlinx/serialization/json/Json$Default;-><init>()V\nPLkotlinx/serialization/json/Json$Default;-><init>()V\nHSPLkotlinx/serialization/json/Json$Default;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/json/Json$Default;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/json/JsonBuilder;\nHSPLkotlinx/serialization/json/JsonBuilder;-><init>(Lkotlinx/serialization/json/Json;)V\nPLkotlinx/serialization/json/JsonBuilder;-><init>(Lkotlinx/serialization/json/Json;)V\nHSPLkotlinx/serialization/json/JsonBuilder;->build$kotlinx_serialization_json()Lkotlinx/serialization/json/JsonConfiguration;\nPLkotlinx/serialization/json/JsonBuilder;->build$kotlinx_serialization_json()Lkotlinx/serialization/json/JsonConfiguration;\nHSPLkotlinx/serialization/json/JsonBuilder;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nPLkotlinx/serialization/json/JsonBuilder;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nHSPLkotlinx/serialization/json/JsonBuilder;->setExplicitNulls(Z)V\nPLkotlinx/serialization/json/JsonBuilder;->setExplicitNulls(Z)V\nHSPLkotlinx/serialization/json/JsonBuilder;->setIgnoreUnknownKeys(Z)V\nPLkotlinx/serialization/json/JsonBuilder;->setIgnoreUnknownKeys(Z)V\nLkotlinx/serialization/json/JsonConfiguration;\nHSPLkotlinx/serialization/json/JsonConfiguration;-><init>(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;)V\nPLkotlinx/serialization/json/JsonConfiguration;-><init>(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;)V\nHSPLkotlinx/serialization/json/JsonConfiguration;-><init>(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/json/JsonConfiguration;-><init>(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/json/JsonConfiguration;->getAllowSpecialFloatingPointValues()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getAllowSpecialFloatingPointValues()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getAllowStructuredMapKeys()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getAllowStructuredMapKeys()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getClassDiscriminator()Ljava/lang/String;\nPLkotlinx/serialization/json/JsonConfiguration;->getClassDiscriminator()Ljava/lang/String;\nHSPLkotlinx/serialization/json/JsonConfiguration;->getCoerceInputValues()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getCoerceInputValues()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getEncodeDefaults()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getEncodeDefaults()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getExplicitNulls()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getExplicitNulls()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getIgnoreUnknownKeys()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getIgnoreUnknownKeys()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getNamingStrategy()Lkotlinx/serialization/json/JsonNamingStrategy;\nPLkotlinx/serialization/json/JsonConfiguration;->getNamingStrategy()Lkotlinx/serialization/json/JsonNamingStrategy;\nHSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrint()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrint()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrintIndent()Ljava/lang/String;\nPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrintIndent()Ljava/lang/String;\nHSPLkotlinx/serialization/json/JsonConfiguration;->getUseAlternativeNames()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getUseAlternativeNames()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->getUseArrayPolymorphism()Z\nPLkotlinx/serialization/json/JsonConfiguration;->getUseArrayPolymorphism()Z\nHSPLkotlinx/serialization/json/JsonConfiguration;->isLenient()Z\nHPLkotlinx/serialization/json/JsonConfiguration;->isLenient()Z\nLkotlinx/serialization/json/JsonDecoder;\nLkotlinx/serialization/json/JsonImpl;\nHSPLkotlinx/serialization/json/JsonImpl;-><init>(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V\nPLkotlinx/serialization/json/JsonImpl;-><init>(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V\nHSPLkotlinx/serialization/json/JsonImpl;->validateConfiguration()V\nPLkotlinx/serialization/json/JsonImpl;->validateConfiguration()V\nLkotlinx/serialization/json/JsonKt;\nHSPLkotlinx/serialization/json/JsonKt;->Json$default(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/json/Json;\nPLkotlinx/serialization/json/JsonKt;->Json$default(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/json/Json;\nHSPLkotlinx/serialization/json/JsonKt;->Json(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/json/Json;\nPLkotlinx/serialization/json/JsonKt;->Json(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/json/Json;\nLkotlinx/serialization/json/JsonNames;\nLkotlinx/serialization/json/JsonSchemaCacheKt;\nHSPLkotlinx/serialization/json/JsonSchemaCacheKt;->getSchemaCache(Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/internal/DescriptorSchemaCache;\nPLkotlinx/serialization/json/JsonSchemaCacheKt;->getSchemaCache(Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/internal/DescriptorSchemaCache;\nLkotlinx/serialization/json/internal/AbstractJsonLexer;\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;-><init>()V\nPLkotlinx/serialization/json/internal/AbstractJsonLexer;-><init>()V\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNextToken(C)V\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNextToken(C)V\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNumericLiteral()J\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNumericLiteral()J\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenient()Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenient()Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->expectEof()V\nPLkotlinx/serialization/json/internal/AbstractJsonLexer;->expectEof()V\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipElement(Z)V\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipElement(Z)V\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipWhitespaces()I\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipWhitespaces()I\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;ZILjava/lang/Object;)Z\nPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;ZILjava/lang/Object;)Z\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull(Z)Z\nHPLkotlinx/serialization/json/internal/AbstractJsonLexer;->tryConsumeNull(Z)Z\nLkotlinx/serialization/json/internal/AbstractJsonLexerKt;\nHSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B\nPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B\nLkotlinx/serialization/json/internal/ArrayAsSequence;\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;-><init>([C)V\nPLkotlinx/serialization/json/internal/ArrayAsSequence;-><init>([C)V\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->access$getBuffer$p(Lkotlinx/serialization/json/internal/ArrayAsSequence;)[C\nPLkotlinx/serialization/json/internal/ArrayAsSequence;->access$getBuffer$p(Lkotlinx/serialization/json/internal/ArrayAsSequence;)[C\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C\nHPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->get(I)C\nHPLkotlinx/serialization/json/internal/ArrayAsSequence;->get(I)C\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->getLength()I\nHPLkotlinx/serialization/json/internal/ArrayAsSequence;->getLength()I\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->length()I\nHPLkotlinx/serialization/json/internal/ArrayAsSequence;->length()I\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->setLength(I)V\nPLkotlinx/serialization/json/internal/ArrayAsSequence;->setLength(I)V\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->substring(II)Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/ArrayAsSequence;->substring(II)Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/ArrayAsSequence;->trim(I)V\nPLkotlinx/serialization/json/internal/ArrayAsSequence;->trim(I)V\nLkotlinx/serialization/json/internal/ArrayPoolsKt;\nHSPLkotlinx/serialization/json/internal/ArrayPoolsKt;-><clinit>()V\nPLkotlinx/serialization/json/internal/ArrayPoolsKt;-><clinit>()V\nHSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->access$getMAX_CHARS_IN_POOL$p()I\nPLkotlinx/serialization/json/internal/ArrayPoolsKt;->access$getMAX_CHARS_IN_POOL$p()I\nLkotlinx/serialization/json/internal/CharArrayPoolBase;\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBase;-><init>()V\nPLkotlinx/serialization/json/internal/CharArrayPoolBase;-><init>()V\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->releaseImpl([C)V\nPLkotlinx/serialization/json/internal/CharArrayPoolBase;->releaseImpl([C)V\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->take(I)[C\nPLkotlinx/serialization/json/internal/CharArrayPoolBase;->take(I)[C\nLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;-><clinit>()V\nPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;-><clinit>()V\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;-><init>()V\nPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;-><init>()V\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->release([C)V\nPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->release([C)V\nHSPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->take()[C\nPLkotlinx/serialization/json/internal/CharArrayPoolBatchSize;->take()[C\nLkotlinx/serialization/json/internal/CharMappings;\nHSPLkotlinx/serialization/json/internal/CharMappings;-><clinit>()V\nPLkotlinx/serialization/json/internal/CharMappings;-><clinit>()V\nHSPLkotlinx/serialization/json/internal/CharMappings;-><init>()V\nPLkotlinx/serialization/json/internal/CharMappings;-><init>()V\nHSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CC)V\nPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CC)V\nHSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(IC)V\nPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(IC)V\nHSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(CB)V\nPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(CB)V\nHSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(IB)V\nPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(IB)V\nHSPLkotlinx/serialization/json/internal/CharMappings;->initCharToToken()V\nPLkotlinx/serialization/json/internal/CharMappings;->initCharToToken()V\nHSPLkotlinx/serialization/json/internal/CharMappings;->initEscape()V\nPLkotlinx/serialization/json/internal/CharMappings;->initEscape()V\nLkotlinx/serialization/json/internal/CreateMapForCacheKt;\nHSPLkotlinx/serialization/json/internal/CreateMapForCacheKt;->createMapForCache(I)Ljava/util/Map;\nPLkotlinx/serialization/json/internal/CreateMapForCacheKt;->createMapForCache(I)Ljava/util/Map;\nLkotlinx/serialization/json/internal/DescriptorSchemaCache;\nHSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;-><init>()V\nPLkotlinx/serialization/json/internal/DescriptorSchemaCache;-><init>()V\nHSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->get(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;)Ljava/lang/Object;\nHPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->get(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;)Ljava/lang/Object;\nHSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->getOrPut(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nHPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->getOrPut(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;\nHSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->set(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Ljava/lang/Object;)V\nPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->set(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;Ljava/lang/Object;)V\nLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;\nHSPLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;-><init>()V\nPLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;-><init>()V\nLkotlinx/serialization/json/internal/JsonElementMarker;\nHSPLkotlinx/serialization/json/internal/JsonElementMarker;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHPLkotlinx/serialization/json/internal/JsonElementMarker;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/json/internal/JsonElementMarker;->isUnmarkedNull$kotlinx_serialization_json()Z\nPLkotlinx/serialization/json/internal/JsonElementMarker;->isUnmarkedNull$kotlinx_serialization_json()Z\nHSPLkotlinx/serialization/json/internal/JsonElementMarker;->mark$kotlinx_serialization_json(I)V\nPLkotlinx/serialization/json/internal/JsonElementMarker;->mark$kotlinx_serialization_json(I)V\nHSPLkotlinx/serialization/json/internal/JsonElementMarker;->nextUnmarkedIndex$kotlinx_serialization_json()I\nPLkotlinx/serialization/json/internal/JsonElementMarker;->nextUnmarkedIndex$kotlinx_serialization_json()I\nLkotlinx/serialization/json/internal/JsonElementMarker$origin$1;\nHSPLkotlinx/serialization/json/internal/JsonElementMarker$origin$1;-><init>(Ljava/lang/Object;)V\nPLkotlinx/serialization/json/internal/JsonElementMarker$origin$1;-><init>(Ljava/lang/Object;)V\nLkotlinx/serialization/json/internal/JsonExceptionsKt;\nLkotlinx/serialization/json/internal/JsonNamesMapKt;\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;-><clinit>()V\nPLkotlinx/serialization/json/internal/JsonNamesMapKt;-><clinit>()V\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->access$buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map;\nPLkotlinx/serialization/json/internal/JsonNamesMapKt;->access$buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map;\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map;\nPLkotlinx/serialization/json/internal/JsonNamesMapKt;->buildDeserializationNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Ljava/util/Map;\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->deserializationNamesMap(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/util/Map;\nPLkotlinx/serialization/json/internal/JsonNamesMapKt;->deserializationNamesMap(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/util/Map;\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex$getJsonNameIndexSlowPath(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/lang/String;)I\nPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex$getJsonNameIndexSlowPath(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/lang/String;)I\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;Ljava/lang/String;)I\nHPLkotlinx/serialization/json/internal/JsonNamesMapKt;->getJsonNameIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;Ljava/lang/String;)I\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->namingStrategy(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/JsonNamingStrategy;\nHPLkotlinx/serialization/json/internal/JsonNamesMapKt;->namingStrategy(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/JsonNamingStrategy;\nLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)V\nPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;-><init>(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/Json;)V\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/lang/Object;\nPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/lang/Object;\nHSPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/util/Map;\nPLkotlinx/serialization/json/internal/JsonNamesMapKt$deserializationNamesMap$1;->invoke()Ljava/util/Map;\nLkotlinx/serialization/json/internal/JsonPath;\nHSPLkotlinx/serialization/json/internal/JsonPath;-><init>()V\nPLkotlinx/serialization/json/internal/JsonPath;-><init>()V\nHSPLkotlinx/serialization/json/internal/JsonPath;->popDescriptor()V\nPLkotlinx/serialization/json/internal/JsonPath;->popDescriptor()V\nHSPLkotlinx/serialization/json/internal/JsonPath;->pushDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHPLkotlinx/serialization/json/internal/JsonPath;->pushDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/json/internal/JsonPath;->updateDescriptorIndex(I)V\nPLkotlinx/serialization/json/internal/JsonPath;->updateDescriptorIndex(I)V\nLkotlinx/serialization/json/internal/JsonPath$Tombstone;\nLkotlinx/serialization/json/internal/JsonStreamsKt;\nHSPLkotlinx/serialization/json/internal/JsonStreamsKt;->decodeByReader(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lkotlinx/serialization/json/internal/SerialReader;)Ljava/lang/Object;\nPLkotlinx/serialization/json/internal/JsonStreamsKt;->decodeByReader(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lkotlinx/serialization/json/internal/SerialReader;)Ljava/lang/Object;\nLkotlinx/serialization/json/internal/PolymorphicKt;\nLkotlinx/serialization/json/internal/ReaderJsonLexer;\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;-><init>(Lkotlinx/serialization/json/internal/SerialReader;[C)V\nPLkotlinx/serialization/json/internal/ReaderJsonLexer;-><init>(Lkotlinx/serialization/json/internal/SerialReader;[C)V\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;-><init>(Lkotlinx/serialization/json/internal/SerialReader;[CILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/json/internal/ReaderJsonLexer;-><init>(Lkotlinx/serialization/json/internal/SerialReader;[CILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->canConsumeValue()Z\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->canConsumeValue()Z\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeKeyString()Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeKeyString()Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeNextToken()B\nPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeNextToken()B\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->ensureHaveChars()V\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->ensureHaveChars()V\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Ljava/lang/CharSequence;\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Ljava/lang/CharSequence;\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Lkotlinx/serialization/json/internal/ArrayAsSequence;\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Lkotlinx/serialization/json/internal/ArrayAsSequence;\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->indexOf(CI)I\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->indexOf(CI)I\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->prefetchOrEof(I)I\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->prefetchOrEof(I)I\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->preload(I)V\nPLkotlinx/serialization/json/internal/ReaderJsonLexer;->preload(I)V\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->release()V\nPLkotlinx/serialization/json/internal/ReaderJsonLexer;->release()V\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->substring(II)Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->substring(II)Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z\nHPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z\nLkotlinx/serialization/json/internal/SerialReader;\nLkotlinx/serialization/json/internal/StreamingJsonDecoder;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;-><init>(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;Lkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;-><init>(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;Lkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder;\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->checkLeadingComma()V\nPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->checkLeadingComma()V\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeElementIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeElementIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeInt()I\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeInt()I\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeListIndex()I\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeListIndex()I\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeLong()J\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeLong()J\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeNotNullMark()Z\nPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeNotNullMark()Z\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeObjectIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeObjectIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeStringKey()Ljava/lang/String;\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeStringKey()Ljava/lang/String;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->handleUnknown(Ljava/lang/String;)Z\nHPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->handleUnknown(Ljava/lang/String;)Z\nLkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;\nLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;\nHSPLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;-><clinit>()V\nPLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;-><clinit>()V\nLkotlinx/serialization/json/internal/WriteMode;\nHSPLkotlinx/serialization/json/internal/WriteMode;->$values()[Lkotlinx/serialization/json/internal/WriteMode;\nPLkotlinx/serialization/json/internal/WriteMode;->$values()[Lkotlinx/serialization/json/internal/WriteMode;\nHSPLkotlinx/serialization/json/internal/WriteMode;-><clinit>()V\nPLkotlinx/serialization/json/internal/WriteMode;-><clinit>()V\nHSPLkotlinx/serialization/json/internal/WriteMode;-><init>(Ljava/lang/String;ICC)V\nPLkotlinx/serialization/json/internal/WriteMode;-><init>(Ljava/lang/String;ICC)V\nHSPLkotlinx/serialization/json/internal/WriteMode;->values()[Lkotlinx/serialization/json/internal/WriteMode;\nPLkotlinx/serialization/json/internal/WriteMode;->values()[Lkotlinx/serialization/json/internal/WriteMode;\nLkotlinx/serialization/json/internal/WriteModeKt;\nHSPLkotlinx/serialization/json/internal/WriteModeKt;->switchMode(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/json/internal/WriteMode;\nHPLkotlinx/serialization/json/internal/WriteModeKt;->switchMode(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/json/internal/WriteMode;\nLkotlinx/serialization/json/okio/OkioStreamsKt;\nHSPLkotlinx/serialization/json/okio/OkioStreamsKt;->decodeFromBufferedSource(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokio/BufferedSource;)Ljava/lang/Object;\nPLkotlinx/serialization/json/okio/OkioStreamsKt;->decodeFromBufferedSource(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lokio/BufferedSource;)Ljava/lang/Object;\nLkotlinx/serialization/json/okio/internal/OkioSerialReader;\nHSPLkotlinx/serialization/json/okio/internal/OkioSerialReader;-><init>(Lokio/BufferedSource;)V\nPLkotlinx/serialization/json/okio/internal/OkioSerialReader;-><init>(Lokio/BufferedSource;)V\nHSPLkotlinx/serialization/json/okio/internal/OkioSerialReader;->read([CII)I\nHPLkotlinx/serialization/json/okio/internal/OkioSerialReader;->read([CII)I\nLkotlinx/serialization/modules/ContextualProvider;\nHSPLkotlinx/serialization/modules/ContextualProvider;-><init>()V\nPLkotlinx/serialization/modules/ContextualProvider;-><init>()V\nHSPLkotlinx/serialization/modules/ContextualProvider;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/modules/ContextualProvider;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/modules/ContextualProvider$Argless;\nHSPLkotlinx/serialization/modules/ContextualProvider$Argless;-><init>(Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/modules/ContextualProvider$Argless;-><init>(Lkotlinx/serialization/KSerializer;)V\nHSPLkotlinx/serialization/modules/ContextualProvider$Argless;->getSerializer()Lkotlinx/serialization/KSerializer;\nPLkotlinx/serialization/modules/ContextualProvider$Argless;->getSerializer()Lkotlinx/serialization/KSerializer;\nLkotlinx/serialization/modules/SerialModuleImpl;\nHSPLkotlinx/serialization/modules/SerialModuleImpl;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V\nPLkotlinx/serialization/modules/SerialModuleImpl;-><init>(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V\nHSPLkotlinx/serialization/modules/SerialModuleImpl;->dumpTo(Lkotlinx/serialization/modules/SerializersModuleCollector;)V\nPLkotlinx/serialization/modules/SerialModuleImpl;->dumpTo(Lkotlinx/serialization/modules/SerializersModuleCollector;)V\nLkotlinx/serialization/modules/SerializersModule;\nHSPLkotlinx/serialization/modules/SerializersModule;-><init>()V\nPLkotlinx/serialization/modules/SerializersModule;-><init>()V\nHSPLkotlinx/serialization/modules/SerializersModule;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLkotlinx/serialization/modules/SerializersModule;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLkotlinx/serialization/modules/SerializersModuleBuilder;\nHSPLkotlinx/serialization/modules/SerializersModuleBuilder;-><init>()V\nPLkotlinx/serialization/modules/SerializersModuleBuilder;-><init>()V\nHSPLkotlinx/serialization/modules/SerializersModuleBuilder;->build()Lkotlinx/serialization/modules/SerializersModule;\nPLkotlinx/serialization/modules/SerializersModuleBuilder;->build()Lkotlinx/serialization/modules/SerializersModule;\nHSPLkotlinx/serialization/modules/SerializersModuleBuilder;->contextual(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V\nPLkotlinx/serialization/modules/SerializersModuleBuilder;->contextual(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V\nHSPLkotlinx/serialization/modules/SerializersModuleBuilder;->include(Lkotlinx/serialization/modules/SerializersModule;)V\nPLkotlinx/serialization/modules/SerializersModuleBuilder;->include(Lkotlinx/serialization/modules/SerializersModule;)V\nHSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer$default(Lkotlinx/serialization/modules/SerializersModuleBuilder;Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;ZILjava/lang/Object;)V\nPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer$default(Lkotlinx/serialization/modules/SerializersModuleBuilder;Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;ZILjava/lang/Object;)V\nHSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer(Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;Z)V\nPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerSerializer(Lkotlin/reflect/KClass;Lkotlinx/serialization/modules/ContextualProvider;Z)V\nLkotlinx/serialization/modules/SerializersModuleBuildersKt;\nHSPLkotlinx/serialization/modules/SerializersModuleBuildersKt;->EmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nPLkotlinx/serialization/modules/SerializersModuleBuildersKt;->EmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nLkotlinx/serialization/modules/SerializersModuleCollector;\nLkotlinx/serialization/modules/SerializersModuleKt;\nHSPLkotlinx/serialization/modules/SerializersModuleKt;-><clinit>()V\nPLkotlinx/serialization/modules/SerializersModuleKt;-><clinit>()V\nHSPLkotlinx/serialization/modules/SerializersModuleKt;->getEmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nPLkotlinx/serialization/modules/SerializersModuleKt;->getEmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule;\nHSPLkotlinx/serialization/modules/SerializersModuleKt;->plus(Lkotlinx/serialization/modules/SerializersModule;Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/modules/SerializersModule;\nPLkotlinx/serialization/modules/SerializersModuleKt;->plus(Lkotlinx/serialization/modules/SerializersModule;Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/modules/SerializersModule;\nLleakcanary/AndroidLeakFixes;\nHSPLleakcanary/AndroidLeakFixes;-><clinit>()V\nPLleakcanary/AndroidLeakFixes;-><clinit>()V\nHSPLleakcanary/AndroidLeakFixes;-><init>(Ljava/lang/String;I)V\nPLleakcanary/AndroidLeakFixes;-><init>(Ljava/lang/String;I)V\nHSPLleakcanary/AndroidLeakFixes;->access$getApplied$p(Lleakcanary/AndroidLeakFixes;)Z\nPLleakcanary/AndroidLeakFixes;->access$getApplied$p(Lleakcanary/AndroidLeakFixes;)Z\nHSPLleakcanary/AndroidLeakFixes;->access$getBackgroundHandler$cp()Lkotlin/Lazy;\nPLleakcanary/AndroidLeakFixes;->access$getBackgroundHandler$cp()Lkotlin/Lazy;\nHSPLleakcanary/AndroidLeakFixes;->access$setApplied$p(Lleakcanary/AndroidLeakFixes;)V\nPLleakcanary/AndroidLeakFixes;->access$setApplied$p(Lleakcanary/AndroidLeakFixes;)V\nHSPLleakcanary/AndroidLeakFixes;->values()[Lleakcanary/AndroidLeakFixes;\nPLleakcanary/AndroidLeakFixes;->values()[Lleakcanary/AndroidLeakFixes;\nLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;\nHSPLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;-><init>()V\nPLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$ACCESSIBILITY_NODE_INFO;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;\nHSPLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;-><init>()V\nPLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$ACTIVITY_MANAGER;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;\nHSPLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;-><init>()V\nPLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$BUBBLE_POPUP;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;\nHSPLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;-><init>()V\nPLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$CONNECTIVITY_MANAGER;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;\nHSPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;-><clinit>()V\nPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;-><clinit>()V\nHSPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;-><init>()V\nPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->invoke()Ljava/lang/Object;\nPLleakcanary/AndroidLeakFixes$Companion$backgroundHandler$2;->invoke()Ljava/lang/Object;\nLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;\nHSPLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;-><init>(Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;)V\nPLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;-><init>(Lleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;)V\nHSPLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;->queueIdle()Z\nPLleakcanary/AndroidLeakFixes$Companion$onEachIdle$1$1;->queueIdle()Z\nLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;\nHSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;-><init>()V\nPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;\nHSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;-><init>(Ljava/lang/Object;I)V\nPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;-><init>(Ljava/lang/Object;I)V\nHSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;->run()V\nHPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1;->run()V\nLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;\nHSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;-><init>(Landroid/os/HandlerThread;Lkotlin/jvm/internal/Ref$BooleanRef;Landroid/os/Handler;)V\nPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;-><init>(Landroid/os/HandlerThread;Lkotlin/jvm/internal/Ref$BooleanRef;Landroid/os/Handler;)V\nHSPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;->invoke()Ljava/lang/Object;\nPLleakcanary/AndroidLeakFixes$FLUSH_HANDLER_THREADS$apply$flushNewHandlerThread$1$run$1$3;->invoke()Ljava/lang/Object;\nLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;\nHSPLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;-><init>()V\nPLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$IMM_CUR_ROOT_VIEW;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;\nHSPLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;-><init>()V\nPLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$IMM_FOCUSED_VIEW;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;\nHSPLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;-><init>()V\nPLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$LAST_HOVERED_VIEW;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;\nHSPLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;-><init>()V\nPLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$MEDIA_SESSION_LEGACY_HELPER;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;\nHSPLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;-><init>()V\nPLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$SAMSUNG_CLIPBOARD_MANAGER;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$SPELL_CHECKER;\nHSPLleakcanary/AndroidLeakFixes$SPELL_CHECKER;-><init>()V\nPLleakcanary/AndroidLeakFixes$SPELL_CHECKER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$SPELL_CHECKER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$SPELL_CHECKER;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;\nHSPLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;-><init>()V\nPLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$TEXT_LINE_POOL;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$USER_MANAGER;\nHSPLleakcanary/AndroidLeakFixes$USER_MANAGER;-><init>()V\nPLleakcanary/AndroidLeakFixes$USER_MANAGER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$USER_MANAGER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$USER_MANAGER;->apply(Landroid/app/Application;)V\nLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;\nHSPLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;-><init>()V\nPLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;-><init>()V\nHSPLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;->apply(Landroid/app/Application;)V\nPLleakcanary/AndroidLeakFixes$VIEW_LOCATION_HOLDER;->apply(Landroid/app/Application;)V\nLleakcanary/ViewLocationHolderLeakFix;\nHSPLleakcanary/ViewLocationHolderLeakFix;-><clinit>()V\nPLleakcanary/ViewLocationHolderLeakFix;-><clinit>()V\nHSPLleakcanary/ViewLocationHolderLeakFix;-><init>()V\nPLleakcanary/ViewLocationHolderLeakFix;-><init>()V\nHSPLleakcanary/ViewLocationHolderLeakFix;->applyFixes$default(Landroid/app/Application;)V\nPLleakcanary/ViewLocationHolderLeakFix;->applyFixes$default(Landroid/app/Application;)V\nLleakcanary/internal/HandlersKt;\nHSPLleakcanary/internal/HandlersKt;-><clinit>()V\nPLleakcanary/internal/HandlersKt;-><clinit>()V\nLleakcanary/internal/HandlersKt$mainHandler$2;\nHSPLleakcanary/internal/HandlersKt$mainHandler$2;-><clinit>()V\nPLleakcanary/internal/HandlersKt$mainHandler$2;-><clinit>()V\nHSPLleakcanary/internal/HandlersKt$mainHandler$2;-><init>(I)V\nPLleakcanary/internal/HandlersKt$mainHandler$2;-><init>(I)V\nLleakcanary/internal/PlumberInstaller;\nHSPLleakcanary/internal/PlumberInstaller;-><init>()V\nPLleakcanary/internal/PlumberInstaller;-><init>()V\nHSPLleakcanary/internal/PlumberInstaller;->onCreate()Z\nPLleakcanary/internal/PlumberInstaller;->onCreate()Z\nLlogcat/AndroidLogcatLogger;\nHSPLlogcat/AndroidLogcatLogger;-><init>()V\nPLlogcat/AndroidLogcatLogger;-><init>()V\nLlogcat/LogPriority;\nHSPLlogcat/LogPriority;-><clinit>()V\nPLlogcat/LogPriority;-><clinit>()V\nHSPLlogcat/LogPriority;-><init>(Ljava/lang/String;II)V\nPLlogcat/LogPriority;-><init>(Ljava/lang/String;II)V\nHSPLlogcat/LogPriority;->getPriorityInt()I\nPLlogcat/LogPriority;->getPriorityInt()I\nLlogcat/LogcatLogger;\nHSPLlogcat/LogcatLogger;-><clinit>()V\nPLlogcat/LogcatLogger;-><clinit>()V\nLlogcat/LogcatLogger$Companion;\nHSPLlogcat/LogcatLogger$Companion;-><clinit>()V\nPLlogcat/LogcatLogger$Companion;-><clinit>()V\nHSPLlogcat/LogcatLogger$Companion;-><init>()V\nPLlogcat/LogcatLogger$Companion;-><init>()V\nHSPLlogcat/LogcatLogger$Companion;->install(Llogcat/AndroidLogcatLogger;)V\nPLlogcat/LogcatLogger$Companion;->install(Llogcat/AndroidLogcatLogger;)V\nHSPLlogcat/LogcatLogger$Companion;->isInstalled()Z\nPLlogcat/LogcatLogger$Companion;->isInstalled()Z\nLlogcat/LogcatLogger$NoLog;\nHSPLlogcat/LogcatLogger$NoLog;-><clinit>()V\nPLlogcat/LogcatLogger$NoLog;-><clinit>()V\nHSPLlogcat/LogcatLogger$NoLog;-><init>()V\nPLlogcat/LogcatLogger$NoLog;-><init>()V\nLnl/adaptivity/xmlutil/Namespace;\nHSPLnl/adaptivity/xmlutil/Namespace;-><clinit>()V\nPLnl/adaptivity/xmlutil/Namespace;-><clinit>()V\nLnl/adaptivity/xmlutil/Namespace$Companion;\nHSPLnl/adaptivity/xmlutil/Namespace$Companion;-><clinit>()V\nPLnl/adaptivity/xmlutil/Namespace$Companion;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/Namespace$Companion;-><init>()V\nPLnl/adaptivity/xmlutil/Namespace$Companion;-><init>()V\nHSPLnl/adaptivity/xmlutil/Namespace$Companion;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLnl/adaptivity/xmlutil/Namespace$Companion;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLnl/adaptivity/xmlutil/QNameSerializer;\nHSPLnl/adaptivity/xmlutil/QNameSerializer;-><clinit>()V\nPLnl/adaptivity/xmlutil/QNameSerializer;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/QNameSerializer;-><init>()V\nPLnl/adaptivity/xmlutil/QNameSerializer;-><init>()V\nLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;\nHSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;-><clinit>()V\nPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;-><init>(I)V\nPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;-><init>(I)V\nHSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V\nPLnl/adaptivity/xmlutil/QNameSerializer$descriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V\nLnl/adaptivity/xmlutil/XmlDeclMode;\nHSPLnl/adaptivity/xmlutil/XmlDeclMode;-><clinit>()V\nPLnl/adaptivity/xmlutil/XmlDeclMode;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/XmlDeclMode;-><init>(Ljava/lang/String;I)V\nPLnl/adaptivity/xmlutil/XmlDeclMode;-><init>(Ljava/lang/String;I)V\nLnl/adaptivity/xmlutil/XmlException;\nLnl/adaptivity/xmlutil/core/XmlVersion;\nHSPLnl/adaptivity/xmlutil/core/XmlVersion;-><clinit>()V\nPLnl/adaptivity/xmlutil/core/XmlVersion;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/core/XmlVersion;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLnl/adaptivity/xmlutil/core/XmlVersion;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;\nHSPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;-><init>()V\nPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;-><init>()V\nHSPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->access$getNamespacesSerializer$p()Lkotlinx/serialization/KSerializer;\nPLnl/adaptivity/xmlutil/serialization/CompactFragmentSerializer;->access$getNamespacesSerializer$p()Lkotlinx/serialization/KSerializer;\nLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;\nHSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;-><init>(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;I)V\nPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;-><init>(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;I)V\nHSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;-><init>(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V\nPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;-><init>(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V\nHSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->copy$default(Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;Z)Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;\nPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;->copy$default(Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;Z)Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;\nLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;\nHSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;-><init>(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V\nPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;-><init>(ZZLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Ljavax/xml/namespace/QName;Z)V\nHSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->build()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;\nPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->build()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy;\nHSPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->ignoreUnknownChildren()V\nPLnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;->ignoreUnknownChildren()V\nLnl/adaptivity/xmlutil/serialization/ElementSerializer;\nHSPLnl/adaptivity/xmlutil/serialization/ElementSerializer;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/ElementSerializer;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/ElementSerializer;-><init>()V\nPLnl/adaptivity/xmlutil/serialization/ElementSerializer;-><init>()V\nHSPLnl/adaptivity/xmlutil/serialization/ElementSerializer;->access$getAttrSerializer$p()Lkotlinx/serialization/KSerializer;\nPLnl/adaptivity/xmlutil/serialization/ElementSerializer;->access$getAttrSerializer$p()Lkotlinx/serialization/KSerializer;\nLnl/adaptivity/xmlutil/serialization/NodeSerializer;\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;-><init>()V\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer;-><init>()V\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor;\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getEd()Lkotlinx/serialization/descriptors/SerialDescriptor;\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer;->getEd()Lkotlinx/serialization/descriptors/SerialDescriptor;\nLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;-><init>()V\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;-><init>()V\nHSPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLnl/adaptivity/xmlutil/serialization/NodeSerializer$ed$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLnl/adaptivity/xmlutil/serialization/UnknownChildHandler;\nLnl/adaptivity/xmlutil/serialization/XML;\nHSPLnl/adaptivity/xmlutil/serialization/XML;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/XML;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/XML;-><init>(Lkotlin/jvm/functions/Function1;)V\nPLnl/adaptivity/xmlutil/serialization/XML;-><init>(Lkotlin/jvm/functions/Function1;)V\nLnl/adaptivity/xmlutil/serialization/XML$1;\nHSPLnl/adaptivity/xmlutil/serialization/XML$1;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/XML$1;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/XML$1;-><init>(I)V\nPLnl/adaptivity/xmlutil/serialization/XML$1;-><init>(I)V\nHSPLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHSPLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V\nPLnl/adaptivity/xmlutil/serialization/XML$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V\nLnl/adaptivity/xmlutil/serialization/XMLKt;\nHSPLnl/adaptivity/xmlutil/serialization/XMLKt;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/XMLKt;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/XMLKt;->access$getDefaultXmlModule$p()Lkotlinx/serialization/modules/SerializersModule;\nPLnl/adaptivity/xmlutil/serialization/XMLKt;->access$getDefaultXmlModule$p()Lkotlinx/serialization/modules/SerializersModule;\nLnl/adaptivity/xmlutil/serialization/XmlConfig;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig;-><init>(Lnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;)V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig;-><init>(Lnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;)V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getDEFAULT_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getDEFAULT_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getIGNORING_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig;->access$getIGNORING_UNKNOWN_CHILD_HANDLER$cp()Lcoil/EventListener$Factory$$ExternalSyntheticLambda0;\nLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;-><init>(ZLnl/adaptivity/xmlutil/XmlDeclMode;Ljava/lang/String;Ljava/lang/Boolean;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;-><init>(ZLnl/adaptivity/xmlutil/XmlDeclMode;Ljava/lang/String;Ljava/lang/Boolean;Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getAutoPolymorphic()Ljava/lang/Boolean;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getAutoPolymorphic()Ljava/lang/Boolean;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getEncodeDefault()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getEncodeDefault()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getIndentString()Ljava/lang/String;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getIndentString()Ljava/lang/String;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getNilAttribute()Lkotlin/Pair;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getNilAttribute()Lkotlin/Pair;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getPolicy()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getPolicy()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getRepairNamespaces()Z\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getRepairNamespaces()Z\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getUnknownChildHandler()Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getUnknownChildHandler()Lnl/adaptivity/xmlutil/serialization/UnknownChildHandler;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlDeclMode()Lnl/adaptivity/xmlutil/XmlDeclMode;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlDeclMode()Lnl/adaptivity/xmlutil/XmlDeclMode;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlVersion()Lnl/adaptivity/xmlutil/core/XmlVersion;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->getXmlVersion()Lnl/adaptivity/xmlutil/core/XmlVersion;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isCollectingNSAttributes()Z\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isCollectingNSAttributes()Z\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isInlineCollapsed()Z\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->isInlineCollapsed()Z\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->policyBuilder()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->policyBuilder()Lnl/adaptivity/xmlutil/serialization/DefaultXmlSerializationPolicy$Builder;\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setAutoPolymorphic(Ljava/lang/Boolean;)V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setAutoPolymorphic(Ljava/lang/Boolean;)V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setIndent()V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setIndent()V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setPolicy(Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setPolicy(Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;)V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlDeclMode()V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlDeclMode()V\nHSPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlVersion()V\nPLnl/adaptivity/xmlutil/serialization/XmlConfig$Builder;->setXmlVersion()V\nLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;\nLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;\nHSPLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;-><init>(Ljava/lang/String;I)V\nPLnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$XmlEncodeDefault;-><init>(Ljava/lang/String;I)V\nLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;\nHSPLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;-><clinit>()V\nPLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;-><clinit>()V\nHSPLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;-><init>()V\nPLnl/adaptivity/xmlutil/serialization/impl/XmlQNameSerializer;-><init>()V\nLnl/adaptivity/xmlutil/util/CompactFragment;\nLnl/adaptivity/xmlutil/util/ICompactFragment;\nLokhttp3/Address;\nHSPLokhttp3/Address;-><init>(Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V\nPLokhttp3/Address;-><init>(Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V\nHSPLokhttp3/Address;->certificatePinner()Lokhttp3/CertificatePinner;\nPLokhttp3/Address;->certificatePinner()Lokhttp3/CertificatePinner;\nHSPLokhttp3/Address;->connectionSpecs()Ljava/util/List;\nPLokhttp3/Address;->connectionSpecs()Ljava/util/List;\nHSPLokhttp3/Address;->dns()Lokhttp3/Dns;\nPLokhttp3/Address;->dns()Lokhttp3/Dns;\nHSPLokhttp3/Address;->hashCode()I\nPLokhttp3/Address;->hashCode()I\nHSPLokhttp3/Address;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier;\nPLokhttp3/Address;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier;\nHSPLokhttp3/Address;->protocols()Ljava/util/List;\nPLokhttp3/Address;->protocols()Ljava/util/List;\nHSPLokhttp3/Address;->proxy()Ljava/net/Proxy;\nPLokhttp3/Address;->proxy()Ljava/net/Proxy;\nHSPLokhttp3/Address;->proxySelector()Ljava/net/ProxySelector;\nPLokhttp3/Address;->proxySelector()Ljava/net/ProxySelector;\nHSPLokhttp3/Address;->socketFactory()Ljavax/net/SocketFactory;\nPLokhttp3/Address;->socketFactory()Ljavax/net/SocketFactory;\nHSPLokhttp3/Address;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory;\nPLokhttp3/Address;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory;\nHSPLokhttp3/Address;->url()Lokhttp3/HttpUrl;\nPLokhttp3/Address;->url()Lokhttp3/HttpUrl;\nLokhttp3/Authenticator;\nHSPLokhttp3/Authenticator;-><clinit>()V\nPLokhttp3/Authenticator;-><clinit>()V\nLokhttp3/Authenticator$Companion;\nHSPLokhttp3/Authenticator$Companion;-><clinit>()V\nPLokhttp3/Authenticator$Companion;-><clinit>()V\nHSPLokhttp3/Authenticator$Companion;-><init>()V\nPLokhttp3/Authenticator$Companion;-><init>()V\nLokhttp3/Authenticator$Companion$AuthenticatorNone;\nHSPLokhttp3/Authenticator$Companion$AuthenticatorNone;-><init>()V\nPLokhttp3/Authenticator$Companion$AuthenticatorNone;-><init>()V\nLokhttp3/Cache;\nHSPLokhttp3/Cache;-><clinit>()V\nPLokhttp3/Cache;-><clinit>()V\nHSPLokhttp3/Cache;-><init>(Ljava/io/File;J)V\nPLokhttp3/Cache;-><init>(Ljava/io/File;J)V\nHSPLokhttp3/Cache;-><init>(Lokio/Path;JLokio/FileSystem;)V\nPLokhttp3/Cache;-><init>(Lokio/Path;JLokio/FileSystem;)V\nHSPLokhttp3/Cache;->get$okhttp(Lokhttp3/Request;)Lokhttp3/Response;\nPLokhttp3/Cache;->get$okhttp(Lokhttp3/Request;)Lokhttp3/Response;\nHSPLokhttp3/Cache;->getWriteSuccessCount$okhttp()I\nPLokhttp3/Cache;->getWriteSuccessCount$okhttp()I\nHSPLokhttp3/Cache;->put$okhttp(Lokhttp3/Response;)Lokhttp3/internal/cache/CacheRequest;\nPLokhttp3/Cache;->put$okhttp(Lokhttp3/Response;)Lokhttp3/internal/cache/CacheRequest;\nHSPLokhttp3/Cache;->setWriteSuccessCount$okhttp(I)V\nPLokhttp3/Cache;->setWriteSuccessCount$okhttp(I)V\nHSPLokhttp3/Cache;->trackResponse$okhttp(Lokhttp3/internal/cache/CacheStrategy;)V\nPLokhttp3/Cache;->trackResponse$okhttp(Lokhttp3/internal/cache/CacheStrategy;)V\nLokhttp3/Cache$Companion;\nHSPLokhttp3/Cache$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/Cache$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/Cache$Companion;->hasVaryAll(Lokhttp3/Response;)Z\nPLokhttp3/Cache$Companion;->hasVaryAll(Lokhttp3/Response;)Z\nHSPLokhttp3/Cache$Companion;->key(Lokhttp3/HttpUrl;)Ljava/lang/String;\nPLokhttp3/Cache$Companion;->key(Lokhttp3/HttpUrl;)Ljava/lang/String;\nHSPLokhttp3/Cache$Companion;->varyFields(Lokhttp3/Headers;)Ljava/util/Set;\nPLokhttp3/Cache$Companion;->varyFields(Lokhttp3/Headers;)Ljava/util/Set;\nHSPLokhttp3/Cache$Companion;->varyHeaders(Lokhttp3/Response;)Lokhttp3/Headers;\nPLokhttp3/Cache$Companion;->varyHeaders(Lokhttp3/Response;)Lokhttp3/Headers;\nLokhttp3/Cache$Entry;\nHSPLokhttp3/Cache$Entry;-><clinit>()V\nPLokhttp3/Cache$Entry;-><clinit>()V\nHSPLokhttp3/Cache$Entry;-><init>(Lokhttp3/Response;)V\nPLokhttp3/Cache$Entry;-><init>(Lokhttp3/Response;)V\nHSPLokhttp3/Cache$Entry;->writeCertList(Lokio/BufferedSink;Ljava/util/List;)V\nPLokhttp3/Cache$Entry;->writeCertList(Lokio/BufferedSink;Ljava/util/List;)V\nHSPLokhttp3/Cache$Entry;->writeTo(Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nPLokhttp3/Cache$Entry;->writeTo(Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nLokhttp3/Cache$Entry$Companion;\nHSPLokhttp3/Cache$Entry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/Cache$Entry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/Cache$RealCacheRequest;\nHSPLokhttp3/Cache$RealCacheRequest;-><init>(Lokhttp3/Cache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nPLokhttp3/Cache$RealCacheRequest;-><init>(Lokhttp3/Cache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nHSPLokhttp3/Cache$RealCacheRequest;->access$getEditor$p(Lokhttp3/Cache$RealCacheRequest;)Lokhttp3/internal/cache/DiskLruCache$Editor;\nPLokhttp3/Cache$RealCacheRequest;->access$getEditor$p(Lokhttp3/Cache$RealCacheRequest;)Lokhttp3/internal/cache/DiskLruCache$Editor;\nHSPLokhttp3/Cache$RealCacheRequest;->body()Lokio/Sink;\nPLokhttp3/Cache$RealCacheRequest;->body()Lokio/Sink;\nHSPLokhttp3/Cache$RealCacheRequest;->getDone()Z\nPLokhttp3/Cache$RealCacheRequest;->getDone()Z\nHSPLokhttp3/Cache$RealCacheRequest;->setDone(Z)V\nPLokhttp3/Cache$RealCacheRequest;->setDone(Z)V\nLokhttp3/Cache$RealCacheRequest$1;\nHSPLokhttp3/Cache$RealCacheRequest$1;-><init>(Lokhttp3/Cache;Lokhttp3/Cache$RealCacheRequest;Lokio/Sink;)V\nPLokhttp3/Cache$RealCacheRequest$1;-><init>(Lokhttp3/Cache;Lokhttp3/Cache$RealCacheRequest;Lokio/Sink;)V\nHSPLokhttp3/Cache$RealCacheRequest$1;->close()V\nPLokhttp3/Cache$RealCacheRequest$1;->close()V\nLokhttp3/CacheControl;\nHSPLokhttp3/CacheControl;-><clinit>()V\nPLokhttp3/CacheControl;-><clinit>()V\nHSPLokhttp3/CacheControl;-><init>(ZZIIZZZIIZZZLjava/lang/String;)V\nPLokhttp3/CacheControl;-><init>(ZZIIZZZIIZZZLjava/lang/String;)V\nHSPLokhttp3/CacheControl;->getHeaderValue$okhttp()Ljava/lang/String;\nPLokhttp3/CacheControl;->getHeaderValue$okhttp()Ljava/lang/String;\nHSPLokhttp3/CacheControl;->immutable()Z\nPLokhttp3/CacheControl;->immutable()Z\nHSPLokhttp3/CacheControl;->isPrivate()Z\nPLokhttp3/CacheControl;->isPrivate()Z\nHSPLokhttp3/CacheControl;->isPublic()Z\nPLokhttp3/CacheControl;->isPublic()Z\nHSPLokhttp3/CacheControl;->maxAgeSeconds()I\nPLokhttp3/CacheControl;->maxAgeSeconds()I\nHSPLokhttp3/CacheControl;->maxStaleSeconds()I\nPLokhttp3/CacheControl;->maxStaleSeconds()I\nHSPLokhttp3/CacheControl;->minFreshSeconds()I\nPLokhttp3/CacheControl;->minFreshSeconds()I\nHSPLokhttp3/CacheControl;->mustRevalidate()Z\nPLokhttp3/CacheControl;->mustRevalidate()Z\nHSPLokhttp3/CacheControl;->noCache()Z\nPLokhttp3/CacheControl;->noCache()Z\nHSPLokhttp3/CacheControl;->noStore()Z\nPLokhttp3/CacheControl;->noStore()Z\nHSPLokhttp3/CacheControl;->noTransform()Z\nPLokhttp3/CacheControl;->noTransform()Z\nHSPLokhttp3/CacheControl;->onlyIfCached()Z\nPLokhttp3/CacheControl;->onlyIfCached()Z\nHSPLokhttp3/CacheControl;->sMaxAgeSeconds()I\nPLokhttp3/CacheControl;->sMaxAgeSeconds()I\nHSPLokhttp3/CacheControl;->setHeaderValue$okhttp(Ljava/lang/String;)V\nPLokhttp3/CacheControl;->setHeaderValue$okhttp(Ljava/lang/String;)V\nLokhttp3/CacheControl$Builder;\nHSPLokhttp3/CacheControl$Builder;-><init>()V\nPLokhttp3/CacheControl$Builder;-><init>()V\nHSPLokhttp3/CacheControl$Builder;->getImmutable$okhttp()Z\nPLokhttp3/CacheControl$Builder;->getImmutable$okhttp()Z\nHSPLokhttp3/CacheControl$Builder;->getMaxAgeSeconds$okhttp()I\nPLokhttp3/CacheControl$Builder;->getMaxAgeSeconds$okhttp()I\nHSPLokhttp3/CacheControl$Builder;->getMaxStaleSeconds$okhttp()I\nPLokhttp3/CacheControl$Builder;->getMaxStaleSeconds$okhttp()I\nHSPLokhttp3/CacheControl$Builder;->getMinFreshSeconds$okhttp()I\nPLokhttp3/CacheControl$Builder;->getMinFreshSeconds$okhttp()I\nHSPLokhttp3/CacheControl$Builder;->getNoCache$okhttp()Z\nPLokhttp3/CacheControl$Builder;->getNoCache$okhttp()Z\nHSPLokhttp3/CacheControl$Builder;->getNoStore$okhttp()Z\nPLokhttp3/CacheControl$Builder;->getNoStore$okhttp()Z\nHSPLokhttp3/CacheControl$Builder;->getNoTransform$okhttp()Z\nPLokhttp3/CacheControl$Builder;->getNoTransform$okhttp()Z\nHSPLokhttp3/CacheControl$Builder;->getOnlyIfCached$okhttp()Z\nPLokhttp3/CacheControl$Builder;->getOnlyIfCached$okhttp()Z\nHSPLokhttp3/CacheControl$Builder;->maxAge(ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder;\nPLokhttp3/CacheControl$Builder;->maxAge(ILjava/util/concurrent/TimeUnit;)Lokhttp3/CacheControl$Builder;\nHSPLokhttp3/CacheControl$Builder;->maxStale(ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder;\nPLokhttp3/CacheControl$Builder;->maxStale(ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder;\nHSPLokhttp3/CacheControl$Builder;->setMaxStaleSeconds$okhttp(I)V\nPLokhttp3/CacheControl$Builder;->setMaxStaleSeconds$okhttp(I)V\nHSPLokhttp3/CacheControl$Builder;->setNoCache$okhttp(Z)V\nPLokhttp3/CacheControl$Builder;->setNoCache$okhttp(Z)V\nHSPLokhttp3/CacheControl$Builder;->setOnlyIfCached$okhttp(Z)V\nPLokhttp3/CacheControl$Builder;->setOnlyIfCached$okhttp(Z)V\nLokhttp3/CacheControl$Companion;\nHSPLokhttp3/CacheControl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/CacheControl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/CacheControl$Companion;->parse(Lokhttp3/Headers;)Lokhttp3/CacheControl;\nPLokhttp3/CacheControl$Companion;->parse(Lokhttp3/Headers;)Lokhttp3/CacheControl;\nLokhttp3/Call;\nLokhttp3/Call$Factory;\nLokhttp3/Callback;\nLokhttp3/CertificatePinner;\nHSPLokhttp3/CertificatePinner;-><clinit>()V\nPLokhttp3/CertificatePinner;-><clinit>()V\nHSPLokhttp3/CertificatePinner;-><init>(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V\nPLokhttp3/CertificatePinner;-><init>(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V\nHSPLokhttp3/CertificatePinner;-><init>(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/CertificatePinner;-><init>(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/CertificatePinner;->check$okhttp(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nPLokhttp3/CertificatePinner;->check$okhttp(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/CertificatePinner;->findMatchingPins(Ljava/lang/String;)Ljava/util/List;\nPLokhttp3/CertificatePinner;->findMatchingPins(Ljava/lang/String;)Ljava/util/List;\nHSPLokhttp3/CertificatePinner;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner;\nPLokhttp3/CertificatePinner;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner;\nHSPLokhttp3/CertificatePinner;->hashCode()I\nPLokhttp3/CertificatePinner;->hashCode()I\nHSPLokhttp3/CertificatePinner;->withCertificateChainCleaner$okhttp(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner;\nPLokhttp3/CertificatePinner;->withCertificateChainCleaner$okhttp(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner;\nLokhttp3/CertificatePinner$Builder;\nHSPLokhttp3/CertificatePinner$Builder;-><init>()V\nPLokhttp3/CertificatePinner$Builder;-><init>()V\nHSPLokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner;\nPLokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner;\nLokhttp3/CertificatePinner$Companion;\nHSPLokhttp3/CertificatePinner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/CertificatePinner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/CipherSuite;\nHSPLokhttp3/CipherSuite;-><clinit>()V\nPLokhttp3/CipherSuite;-><clinit>()V\nHSPLokhttp3/CipherSuite;-><init>(Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/CipherSuite;-><init>(Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/CipherSuite;->access$getINSTANCES$cp()Ljava/util/Map;\nPLokhttp3/CipherSuite;->access$getINSTANCES$cp()Ljava/util/Map;\nHSPLokhttp3/CipherSuite;->access$getORDER_BY_NAME$cp()Ljava/util/Comparator;\nPLokhttp3/CipherSuite;->access$getORDER_BY_NAME$cp()Ljava/util/Comparator;\nHSPLokhttp3/CipherSuite;->javaName()Ljava/lang/String;\nPLokhttp3/CipherSuite;->javaName()Ljava/lang/String;\nLokhttp3/CipherSuite$Companion;\nHSPLokhttp3/CipherSuite$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/CipherSuite$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;I)Lokhttp3/CipherSuite;\nPLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;I)Lokhttp3/CipherSuite;\nHSPLokhttp3/CipherSuite$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/CipherSuite;\nPLokhttp3/CipherSuite$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/CipherSuite;\nLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;\nHSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;-><init>()V\nPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;-><init>()V\nHSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nHSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/String;Ljava/lang/String;)I\nHPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/String;Ljava/lang/String;)I\nLokhttp3/Connection;\nLokhttp3/ConnectionPool;\nHSPLokhttp3/ConnectionPool;-><init>()V\nPLokhttp3/ConnectionPool;-><init>()V\nHSPLokhttp3/ConnectionPool;-><init>(IJLjava/util/concurrent/TimeUnit;)V\nPLokhttp3/ConnectionPool;-><init>(IJLjava/util/concurrent/TimeUnit;)V\nHSPLokhttp3/ConnectionPool;-><init>(Lokhttp3/internal/connection/RealConnectionPool;)V\nPLokhttp3/ConnectionPool;-><init>(Lokhttp3/internal/connection/RealConnectionPool;)V\nHSPLokhttp3/ConnectionPool;->getDelegate$okhttp()Lokhttp3/internal/connection/RealConnectionPool;\nPLokhttp3/ConnectionPool;->getDelegate$okhttp()Lokhttp3/internal/connection/RealConnectionPool;\nLokhttp3/ConnectionSpec;\nHSPLokhttp3/ConnectionSpec;-><clinit>()V\nPLokhttp3/ConnectionSpec;-><clinit>()V\nHSPLokhttp3/ConnectionSpec;-><init>(ZZ[Ljava/lang/String;[Ljava/lang/String;)V\nPLokhttp3/ConnectionSpec;-><init>(ZZ[Ljava/lang/String;[Ljava/lang/String;)V\nHSPLokhttp3/ConnectionSpec;->access$getTlsVersionsAsString$p(Lokhttp3/ConnectionSpec;)[Ljava/lang/String;\nPLokhttp3/ConnectionSpec;->access$getTlsVersionsAsString$p(Lokhttp3/ConnectionSpec;)[Ljava/lang/String;\nHSPLokhttp3/ConnectionSpec;->apply$okhttp(Ljavax/net/ssl/SSLSocket;Z)V\nPLokhttp3/ConnectionSpec;->apply$okhttp(Ljavax/net/ssl/SSLSocket;Z)V\nHSPLokhttp3/ConnectionSpec;->cipherSuites()Ljava/util/List;\nPLokhttp3/ConnectionSpec;->cipherSuites()Ljava/util/List;\nHSPLokhttp3/ConnectionSpec;->getCipherSuitesAsString$okhttp()[Ljava/lang/String;\nPLokhttp3/ConnectionSpec;->getCipherSuitesAsString$okhttp()[Ljava/lang/String;\nHSPLokhttp3/ConnectionSpec;->hashCode()I\nPLokhttp3/ConnectionSpec;->hashCode()I\nHSPLokhttp3/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z\nPLokhttp3/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z\nHSPLokhttp3/ConnectionSpec;->isTls()Z\nPLokhttp3/ConnectionSpec;->isTls()Z\nHSPLokhttp3/ConnectionSpec;->supportsTlsExtensions()Z\nPLokhttp3/ConnectionSpec;->supportsTlsExtensions()Z\nHSPLokhttp3/ConnectionSpec;->tlsVersions()Ljava/util/List;\nPLokhttp3/ConnectionSpec;->tlsVersions()Ljava/util/List;\nLokhttp3/ConnectionSpec$Builder;\nHSPLokhttp3/ConnectionSpec$Builder;-><init>(Lokhttp3/ConnectionSpec;)V\nPLokhttp3/ConnectionSpec$Builder;-><init>(Lokhttp3/ConnectionSpec;)V\nHSPLokhttp3/ConnectionSpec$Builder;-><init>(Z)V\nPLokhttp3/ConnectionSpec$Builder;-><init>(Z)V\nHSPLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec;\nPLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec;\nHSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder;\nPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder;\nHSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder;\nPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder;\nHSPLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lokhttp3/ConnectionSpec$Builder;\nPLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lokhttp3/ConnectionSpec$Builder;\nHSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder;\nPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder;\nHSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder;\nPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder;\nLokhttp3/ConnectionSpec$Companion;\nHSPLokhttp3/ConnectionSpec$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/ConnectionSpec$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/Cookie;\nHSPLokhttp3/Cookie;-><clinit>()V\nPLokhttp3/Cookie;-><clinit>()V\nLokhttp3/Cookie$Companion;\nHSPLokhttp3/Cookie$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/Cookie$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/Cookie$Companion;->parseAll(Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List;\nPLokhttp3/Cookie$Companion;->parseAll(Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List;\nLokhttp3/CookieJar;\nHSPLokhttp3/CookieJar;-><clinit>()V\nPLokhttp3/CookieJar;-><clinit>()V\nLokhttp3/CookieJar$Companion;\nHSPLokhttp3/CookieJar$Companion;-><clinit>()V\nPLokhttp3/CookieJar$Companion;-><clinit>()V\nHSPLokhttp3/CookieJar$Companion;-><init>()V\nPLokhttp3/CookieJar$Companion;-><init>()V\nLokhttp3/CookieJar$Companion$NoCookies;\nHSPLokhttp3/CookieJar$Companion$NoCookies;-><init>()V\nPLokhttp3/CookieJar$Companion$NoCookies;-><init>()V\nLokhttp3/Dispatcher;\nHSPLokhttp3/Dispatcher;-><init>()V\nPLokhttp3/Dispatcher;-><init>()V\nHSPLokhttp3/Dispatcher;->enqueue$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V\nPLokhttp3/Dispatcher;->enqueue$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V\nHSPLokhttp3/Dispatcher;->executorService()Ljava/util/concurrent/ExecutorService;\nPLokhttp3/Dispatcher;->executorService()Ljava/util/concurrent/ExecutorService;\nHSPLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V\nPLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V\nHSPLokhttp3/Dispatcher;->finished(Ljava/util/ArrayDeque;Ljava/lang/Object;)V\nPLokhttp3/Dispatcher;->finished(Ljava/util/ArrayDeque;Ljava/lang/Object;)V\nHSPLokhttp3/Dispatcher;->promoteAndExecute()Z\nPLokhttp3/Dispatcher;->promoteAndExecute()Z\nHSPLokhttp3/Dispatcher;->runningCallsCount()I\nPLokhttp3/Dispatcher;->runningCallsCount()I\nLokhttp3/Dns;\nHSPLokhttp3/Dns;-><clinit>()V\nPLokhttp3/Dns;-><clinit>()V\nLokhttp3/Dns$Companion;\nHSPLokhttp3/Dns$Companion;-><clinit>()V\nPLokhttp3/Dns$Companion;-><clinit>()V\nHSPLokhttp3/Dns$Companion;-><init>()V\nPLokhttp3/Dns$Companion;-><init>()V\nLokhttp3/Dns$Companion$DnsSystem;\nHSPLokhttp3/Dns$Companion$DnsSystem;-><init>()V\nPLokhttp3/Dns$Companion$DnsSystem;-><init>()V\nHSPLokhttp3/Dns$Companion$DnsSystem;->lookup(Ljava/lang/String;)Ljava/util/List;\nPLokhttp3/Dns$Companion$DnsSystem;->lookup(Ljava/lang/String;)Ljava/util/List;\nLokhttp3/EventListener;\nHSPLokhttp3/EventListener;-><clinit>()V\nPLokhttp3/EventListener;-><clinit>()V\nHSPLokhttp3/EventListener;-><init>()V\nPLokhttp3/EventListener;-><init>()V\nHSPLokhttp3/EventListener;->cacheMiss(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->cacheMiss(Lokhttp3/Call;)V\nHSPLokhttp3/EventListener;->callEnd(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->callEnd(Lokhttp3/Call;)V\nHSPLokhttp3/EventListener;->callStart(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->callStart(Lokhttp3/Call;)V\nHSPLokhttp3/EventListener;->connectEnd(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;)V\nPLokhttp3/EventListener;->connectEnd(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;)V\nHSPLokhttp3/EventListener;->connectFailed(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;Ljava/io/IOException;)V\nPLokhttp3/EventListener;->connectFailed(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;Lokhttp3/Protocol;Ljava/io/IOException;)V\nHSPLokhttp3/EventListener;->connectStart(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;)V\nPLokhttp3/EventListener;->connectStart(Lokhttp3/Call;Ljava/net/InetSocketAddress;Ljava/net/Proxy;)V\nHSPLokhttp3/EventListener;->connectionAcquired(Lokhttp3/Call;Lokhttp3/Connection;)V\nPLokhttp3/EventListener;->connectionAcquired(Lokhttp3/Call;Lokhttp3/Connection;)V\nHSPLokhttp3/EventListener;->connectionReleased(Lokhttp3/Call;Lokhttp3/Connection;)V\nPLokhttp3/EventListener;->connectionReleased(Lokhttp3/Call;Lokhttp3/Connection;)V\nHSPLokhttp3/EventListener;->dnsEnd(Lokhttp3/Call;Ljava/lang/String;Ljava/util/List;)V\nPLokhttp3/EventListener;->dnsEnd(Lokhttp3/Call;Ljava/lang/String;Ljava/util/List;)V\nHSPLokhttp3/EventListener;->dnsStart(Lokhttp3/Call;Ljava/lang/String;)V\nPLokhttp3/EventListener;->dnsStart(Lokhttp3/Call;Ljava/lang/String;)V\nHSPLokhttp3/EventListener;->proxySelectEnd(Lokhttp3/Call;Lokhttp3/HttpUrl;Ljava/util/List;)V\nPLokhttp3/EventListener;->proxySelectEnd(Lokhttp3/Call;Lokhttp3/HttpUrl;Ljava/util/List;)V\nHSPLokhttp3/EventListener;->proxySelectStart(Lokhttp3/Call;Lokhttp3/HttpUrl;)V\nPLokhttp3/EventListener;->proxySelectStart(Lokhttp3/Call;Lokhttp3/HttpUrl;)V\nHSPLokhttp3/EventListener;->requestHeadersEnd(Lokhttp3/Call;Lokhttp3/Request;)V\nPLokhttp3/EventListener;->requestHeadersEnd(Lokhttp3/Call;Lokhttp3/Request;)V\nHSPLokhttp3/EventListener;->requestHeadersStart(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->requestHeadersStart(Lokhttp3/Call;)V\nHSPLokhttp3/EventListener;->responseBodyEnd(Lokhttp3/Call;J)V\nPLokhttp3/EventListener;->responseBodyEnd(Lokhttp3/Call;J)V\nHSPLokhttp3/EventListener;->responseBodyStart(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->responseBodyStart(Lokhttp3/Call;)V\nHSPLokhttp3/EventListener;->responseHeadersEnd(Lokhttp3/Call;Lokhttp3/Response;)V\nPLokhttp3/EventListener;->responseHeadersEnd(Lokhttp3/Call;Lokhttp3/Response;)V\nHSPLokhttp3/EventListener;->responseHeadersStart(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->responseHeadersStart(Lokhttp3/Call;)V\nHSPLokhttp3/EventListener;->secureConnectEnd(Lokhttp3/Call;Lokhttp3/Handshake;)V\nPLokhttp3/EventListener;->secureConnectEnd(Lokhttp3/Call;Lokhttp3/Handshake;)V\nHSPLokhttp3/EventListener;->secureConnectStart(Lokhttp3/Call;)V\nPLokhttp3/EventListener;->secureConnectStart(Lokhttp3/Call;)V\nLokhttp3/EventListener$Companion;\nHSPLokhttp3/EventListener$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/EventListener$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/EventListener$Companion$NONE$1;\nHSPLokhttp3/EventListener$Companion$NONE$1;-><init>()V\nPLokhttp3/EventListener$Companion$NONE$1;-><init>()V\nLokhttp3/EventListener$Factory;\nLokhttp3/FormBody;\nHSPLokhttp3/FormBody;-><clinit>()V\nPLokhttp3/FormBody;-><clinit>()V\nHSPLokhttp3/FormBody;-><init>(Ljava/util/List;Ljava/util/List;)V\nPLokhttp3/FormBody;-><init>(Ljava/util/List;Ljava/util/List;)V\nLokhttp3/FormBody$Builder;\nHSPLokhttp3/FormBody$Builder;-><init>(Ljava/nio/charset/Charset;)V\nPLokhttp3/FormBody$Builder;-><init>(Ljava/nio/charset/Charset;)V\nHSPLokhttp3/FormBody$Builder;-><init>(Ljava/nio/charset/Charset;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/FormBody$Builder;-><init>(Ljava/nio/charset/Charset;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/FormBody$Builder;->build()Lokhttp3/FormBody;\nPLokhttp3/FormBody$Builder;->build()Lokhttp3/FormBody;\nLokhttp3/FormBody$Companion;\nHSPLokhttp3/FormBody$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/FormBody$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/Handshake;\nHSPLokhttp3/Handshake;-><clinit>()V\nPLokhttp3/Handshake;-><clinit>()V\nHSPLokhttp3/Handshake;-><init>(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V\nPLokhttp3/Handshake;-><init>(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/Handshake;->cipherSuite()Lokhttp3/CipherSuite;\nPLokhttp3/Handshake;->cipherSuite()Lokhttp3/CipherSuite;\nHSPLokhttp3/Handshake;->localCertificates()Ljava/util/List;\nPLokhttp3/Handshake;->localCertificates()Ljava/util/List;\nHSPLokhttp3/Handshake;->peerCertificates()Ljava/util/List;\nPLokhttp3/Handshake;->peerCertificates()Ljava/util/List;\nHSPLokhttp3/Handshake;->tlsVersion()Lokhttp3/TlsVersion;\nPLokhttp3/Handshake;->tlsVersion()Lokhttp3/TlsVersion;\nLokhttp3/Handshake$Companion;\nHSPLokhttp3/Handshake$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/Handshake$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake;\nPLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake;\nLokhttp3/Handshake$Companion$handshake$1;\nHSPLokhttp3/Handshake$Companion$handshake$1;-><init>(Ljava/util/List;)V\nPLokhttp3/Handshake$Companion$handshake$1;-><init>(Ljava/util/List;)V\nHSPLokhttp3/Handshake$Companion$handshake$1;->invoke()Ljava/lang/Object;\nPLokhttp3/Handshake$Companion$handshake$1;->invoke()Ljava/lang/Object;\nLokhttp3/Handshake$peerCertificates$2;\nHSPLokhttp3/Handshake$peerCertificates$2;-><init>(Lkotlin/jvm/functions/Function0;)V\nPLokhttp3/Handshake$peerCertificates$2;-><init>(Lkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/lang/Object;\nPLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/lang/Object;\nHSPLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/util/List;\nPLokhttp3/Handshake$peerCertificates$2;->invoke()Ljava/util/List;\nLokhttp3/Headers;\nHSPLokhttp3/Headers;-><clinit>()V\nPLokhttp3/Headers;-><clinit>()V\nHSPLokhttp3/Headers;-><init>([Ljava/lang/String;)V\nPLokhttp3/Headers;-><init>([Ljava/lang/String;)V\nHSPLokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String;\nHSPLokhttp3/Headers;->getNamesAndValues$okhttp()[Ljava/lang/String;\nPLokhttp3/Headers;->getNamesAndValues$okhttp()[Ljava/lang/String;\nHSPLokhttp3/Headers;->size()I\nPLokhttp3/Headers;->size()I\nHSPLokhttp3/Headers;->values(Ljava/lang/String;)Ljava/util/List;\nPLokhttp3/Headers;->values(Ljava/lang/String;)Ljava/util/List;\nLokhttp3/Headers$Builder;\nHSPLokhttp3/Headers$Builder;-><init>()V\nPLokhttp3/Headers$Builder;-><init>()V\nHSPLokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/Headers$Builder;->addLenient$okhttp(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/Headers$Builder;->addLenient$okhttp(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/Headers$Builder;->getNamesAndValues$okhttp()Ljava/util/List;\nPLokhttp3/Headers$Builder;->getNamesAndValues$okhttp()Ljava/util/List;\nHSPLokhttp3/Headers$Builder;->removeAll(Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/Headers$Builder;->removeAll(Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/Headers$Builder;->set(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/Headers$Builder;->set(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nLokhttp3/Headers$Companion;\nHSPLokhttp3/Headers$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/Headers$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers;\nPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers;\nLokhttp3/HttpUrl;\nHSPLokhttp3/HttpUrl;-><clinit>()V\nPLokhttp3/HttpUrl;-><clinit>()V\nHSPLokhttp3/HttpUrl;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V\nPLokhttp3/HttpUrl;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V\nHSPLokhttp3/HttpUrl;->encodedFragment()Ljava/lang/String;\nPLokhttp3/HttpUrl;->encodedFragment()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String;\nPLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String;\nPLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->encodedPathSegments()Ljava/util/List;\nPLokhttp3/HttpUrl;->encodedPathSegments()Ljava/util/List;\nHSPLokhttp3/HttpUrl;->encodedQuery()Ljava/lang/String;\nPLokhttp3/HttpUrl;->encodedQuery()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->encodedUsername()Ljava/lang/String;\nPLokhttp3/HttpUrl;->encodedUsername()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->hashCode()I\nPLokhttp3/HttpUrl;->hashCode()I\nHSPLokhttp3/HttpUrl;->host()Ljava/lang/String;\nPLokhttp3/HttpUrl;->host()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->isHttps()Z\nPLokhttp3/HttpUrl;->isHttps()Z\nHSPLokhttp3/HttpUrl;->newBuilder()Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl;->newBuilder()Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl;->newBuilder(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl;->newBuilder(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl;->port()I\nPLokhttp3/HttpUrl;->port()I\nHSPLokhttp3/HttpUrl;->redact()Ljava/lang/String;\nPLokhttp3/HttpUrl;->redact()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->scheme()Ljava/lang/String;\nPLokhttp3/HttpUrl;->scheme()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->toString()Ljava/lang/String;\nPLokhttp3/HttpUrl;->toString()Ljava/lang/String;\nHSPLokhttp3/HttpUrl;->uri()Ljava/net/URI;\nPLokhttp3/HttpUrl;->uri()Ljava/net/URI;\nLokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;-><clinit>()V\nPLokhttp3/HttpUrl$Builder;-><clinit>()V\nHSPLokhttp3/HttpUrl$Builder;-><init>()V\nPLokhttp3/HttpUrl$Builder;-><init>()V\nHSPLokhttp3/HttpUrl$Builder;->build()Lokhttp3/HttpUrl;\nPLokhttp3/HttpUrl$Builder;->build()Lokhttp3/HttpUrl;\nHSPLokhttp3/HttpUrl$Builder;->encodedQuery(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->encodedQuery(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->getEncodedPathSegments$okhttp()Ljava/util/List;\nPLokhttp3/HttpUrl$Builder;->getEncodedPathSegments$okhttp()Ljava/util/List;\nHSPLokhttp3/HttpUrl$Builder;->host(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->host(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->isDot(Ljava/lang/String;)Z\nPLokhttp3/HttpUrl$Builder;->isDot(Ljava/lang/String;)Z\nHSPLokhttp3/HttpUrl$Builder;->isDotDot(Ljava/lang/String;)Z\nPLokhttp3/HttpUrl$Builder;->isDotDot(Ljava/lang/String;)Z\nHSPLokhttp3/HttpUrl$Builder;->parse$okhttp(Lokhttp3/HttpUrl;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->parse$okhttp(Lokhttp3/HttpUrl;Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->password(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->password(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->port(I)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->port(I)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->push(Ljava/lang/String;IIZZ)V\nPLokhttp3/HttpUrl$Builder;->push(Ljava/lang/String;IIZZ)V\nHSPLokhttp3/HttpUrl$Builder;->reencodeForUri$okhttp()Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->reencodeForUri$okhttp()Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->resolvePath(IILjava/lang/String;)V\nPLokhttp3/HttpUrl$Builder;->resolvePath(IILjava/lang/String;)V\nHSPLokhttp3/HttpUrl$Builder;->scheme(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->scheme(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nHSPLokhttp3/HttpUrl$Builder;->setEncodedFragment$okhttp(Ljava/lang/String;)V\nPLokhttp3/HttpUrl$Builder;->setEncodedFragment$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/HttpUrl$Builder;->setEncodedPassword$okhttp(Ljava/lang/String;)V\nPLokhttp3/HttpUrl$Builder;->setEncodedPassword$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/HttpUrl$Builder;->setEncodedUsername$okhttp(Ljava/lang/String;)V\nPLokhttp3/HttpUrl$Builder;->setEncodedUsername$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/HttpUrl$Builder;->setHost$okhttp(Ljava/lang/String;)V\nPLokhttp3/HttpUrl$Builder;->setHost$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/HttpUrl$Builder;->setPort$okhttp(I)V\nPLokhttp3/HttpUrl$Builder;->setPort$okhttp(I)V\nHSPLokhttp3/HttpUrl$Builder;->setScheme$okhttp(Ljava/lang/String;)V\nPLokhttp3/HttpUrl$Builder;->setScheme$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/HttpUrl$Builder;->toString()Ljava/lang/String;\nPLokhttp3/HttpUrl$Builder;->toString()Ljava/lang/String;\nHSPLokhttp3/HttpUrl$Builder;->username(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nPLokhttp3/HttpUrl$Builder;->username(Ljava/lang/String;)Lokhttp3/HttpUrl$Builder;\nLokhttp3/HttpUrl$Builder$Companion;\nHSPLokhttp3/HttpUrl$Builder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/HttpUrl$Builder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/HttpUrl$Builder$Companion;->access$portColonOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I\nPLokhttp3/HttpUrl$Builder$Companion;->access$portColonOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I\nHSPLokhttp3/HttpUrl$Builder$Companion;->access$schemeDelimiterOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I\nPLokhttp3/HttpUrl$Builder$Companion;->access$schemeDelimiterOffset(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I\nHSPLokhttp3/HttpUrl$Builder$Companion;->access$slashCount(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I\nPLokhttp3/HttpUrl$Builder$Companion;->access$slashCount(Lokhttp3/HttpUrl$Builder$Companion;Ljava/lang/String;II)I\nLokhttp3/HttpUrl$Companion;\nHSPLokhttp3/HttpUrl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/HttpUrl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;ILjava/lang/Object;)Ljava/lang/String;\nPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;ILjava/lang/Object;)Ljava/lang/String;\nHSPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp(Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;)Ljava/lang/String;\nPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp(Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;)Ljava/lang/String;\nHSPLokhttp3/HttpUrl$Companion;->defaultPort(Ljava/lang/String;)I\nPLokhttp3/HttpUrl$Companion;->defaultPort(Ljava/lang/String;)I\nHSPLokhttp3/HttpUrl$Companion;->get(Ljava/lang/String;)Lokhttp3/HttpUrl;\nPLokhttp3/HttpUrl$Companion;->get(Ljava/lang/String;)Lokhttp3/HttpUrl;\nHSPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IIZILjava/lang/Object;)Ljava/lang/String;\nPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp$default(Lokhttp3/HttpUrl$Companion;Ljava/lang/String;IIZILjava/lang/Object;)Ljava/lang/String;\nHSPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp(Ljava/lang/String;IIZ)Ljava/lang/String;\nPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp(Ljava/lang/String;IIZ)Ljava/lang/String;\nHSPLokhttp3/HttpUrl$Companion;->toPathString$okhttp(Ljava/util/List;Ljava/lang/StringBuilder;)V\nPLokhttp3/HttpUrl$Companion;->toPathString$okhttp(Ljava/util/List;Ljava/lang/StringBuilder;)V\nLokhttp3/Interceptor;\nLokhttp3/Interceptor$Chain;\nLokhttp3/MediaType;\nHSPLokhttp3/MediaType;-><clinit>()V\nPLokhttp3/MediaType;-><clinit>()V\nHSPLokhttp3/MediaType;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V\nPLokhttp3/MediaType;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V\nLokhttp3/MediaType$Companion;\nHSPLokhttp3/MediaType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/MediaType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType;\nPLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType;\nHSPLokhttp3/MediaType$Companion;->parse(Ljava/lang/String;)Lokhttp3/MediaType;\nPLokhttp3/MediaType$Companion;->parse(Ljava/lang/String;)Lokhttp3/MediaType;\nLokhttp3/OkHttpClient;\nHSPLokhttp3/OkHttpClient;-><clinit>()V\nPLokhttp3/OkHttpClient;-><clinit>()V\nHSPLokhttp3/OkHttpClient;-><init>(Lokhttp3/OkHttpClient$Builder;)V\nPLokhttp3/OkHttpClient;-><init>(Lokhttp3/OkHttpClient$Builder;)V\nHSPLokhttp3/OkHttpClient;->access$getDEFAULT_CONNECTION_SPECS$cp()Ljava/util/List;\nPLokhttp3/OkHttpClient;->access$getDEFAULT_CONNECTION_SPECS$cp()Ljava/util/List;\nHSPLokhttp3/OkHttpClient;->access$getDEFAULT_PROTOCOLS$cp()Ljava/util/List;\nPLokhttp3/OkHttpClient;->access$getDEFAULT_PROTOCOLS$cp()Ljava/util/List;\nHSPLokhttp3/OkHttpClient;->access$getSslSocketFactoryOrNull$p(Lokhttp3/OkHttpClient;)Ljavax/net/ssl/SSLSocketFactory;\nPLokhttp3/OkHttpClient;->access$getSslSocketFactoryOrNull$p(Lokhttp3/OkHttpClient;)Ljavax/net/ssl/SSLSocketFactory;\nHSPLokhttp3/OkHttpClient;->authenticator()Lokhttp3/Authenticator;\nPLokhttp3/OkHttpClient;->authenticator()Lokhttp3/Authenticator;\nHSPLokhttp3/OkHttpClient;->cache()Lokhttp3/Cache;\nPLokhttp3/OkHttpClient;->cache()Lokhttp3/Cache;\nHSPLokhttp3/OkHttpClient;->callTimeoutMillis()I\nPLokhttp3/OkHttpClient;->callTimeoutMillis()I\nHSPLokhttp3/OkHttpClient;->certificateChainCleaner()Lokhttp3/internal/tls/CertificateChainCleaner;\nPLokhttp3/OkHttpClient;->certificateChainCleaner()Lokhttp3/internal/tls/CertificateChainCleaner;\nHSPLokhttp3/OkHttpClient;->certificatePinner()Lokhttp3/CertificatePinner;\nPLokhttp3/OkHttpClient;->certificatePinner()Lokhttp3/CertificatePinner;\nHSPLokhttp3/OkHttpClient;->connectTimeoutMillis()I\nPLokhttp3/OkHttpClient;->connectTimeoutMillis()I\nHSPLokhttp3/OkHttpClient;->connectionPool()Lokhttp3/ConnectionPool;\nPLokhttp3/OkHttpClient;->connectionPool()Lokhttp3/ConnectionPool;\nHSPLokhttp3/OkHttpClient;->connectionSpecs()Ljava/util/List;\nPLokhttp3/OkHttpClient;->connectionSpecs()Ljava/util/List;\nHSPLokhttp3/OkHttpClient;->cookieJar()Lokhttp3/CookieJar;\nPLokhttp3/OkHttpClient;->cookieJar()Lokhttp3/CookieJar;\nHSPLokhttp3/OkHttpClient;->dispatcher()Lokhttp3/Dispatcher;\nPLokhttp3/OkHttpClient;->dispatcher()Lokhttp3/Dispatcher;\nHSPLokhttp3/OkHttpClient;->dns()Lokhttp3/Dns;\nPLokhttp3/OkHttpClient;->dns()Lokhttp3/Dns;\nHSPLokhttp3/OkHttpClient;->eventListenerFactory()Lokhttp3/EventListener$Factory;\nPLokhttp3/OkHttpClient;->eventListenerFactory()Lokhttp3/EventListener$Factory;\nHSPLokhttp3/OkHttpClient;->fastFallback()Z\nPLokhttp3/OkHttpClient;->fastFallback()Z\nHSPLokhttp3/OkHttpClient;->followRedirects()Z\nPLokhttp3/OkHttpClient;->followRedirects()Z\nHSPLokhttp3/OkHttpClient;->followSslRedirects()Z\nPLokhttp3/OkHttpClient;->followSslRedirects()Z\nHSPLokhttp3/OkHttpClient;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase;\nPLokhttp3/OkHttpClient;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase;\nHSPLokhttp3/OkHttpClient;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner;\nPLokhttp3/OkHttpClient;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner;\nHSPLokhttp3/OkHttpClient;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier;\nPLokhttp3/OkHttpClient;->hostnameVerifier()Ljavax/net/ssl/HostnameVerifier;\nHSPLokhttp3/OkHttpClient;->interceptors()Ljava/util/List;\nPLokhttp3/OkHttpClient;->interceptors()Ljava/util/List;\nHSPLokhttp3/OkHttpClient;->minWebSocketMessageToCompress()J\nPLokhttp3/OkHttpClient;->minWebSocketMessageToCompress()J\nHSPLokhttp3/OkHttpClient;->networkInterceptors()Ljava/util/List;\nPLokhttp3/OkHttpClient;->networkInterceptors()Ljava/util/List;\nHSPLokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/Call;\nPLokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/Call;\nHSPLokhttp3/OkHttpClient;->pingIntervalMillis()I\nPLokhttp3/OkHttpClient;->pingIntervalMillis()I\nHSPLokhttp3/OkHttpClient;->protocols()Ljava/util/List;\nPLokhttp3/OkHttpClient;->protocols()Ljava/util/List;\nHSPLokhttp3/OkHttpClient;->proxy()Ljava/net/Proxy;\nPLokhttp3/OkHttpClient;->proxy()Ljava/net/Proxy;\nHSPLokhttp3/OkHttpClient;->proxyAuthenticator()Lokhttp3/Authenticator;\nPLokhttp3/OkHttpClient;->proxyAuthenticator()Lokhttp3/Authenticator;\nHSPLokhttp3/OkHttpClient;->proxySelector()Ljava/net/ProxySelector;\nPLokhttp3/OkHttpClient;->proxySelector()Ljava/net/ProxySelector;\nHSPLokhttp3/OkHttpClient;->readTimeoutMillis()I\nPLokhttp3/OkHttpClient;->readTimeoutMillis()I\nHSPLokhttp3/OkHttpClient;->retryOnConnectionFailure()Z\nPLokhttp3/OkHttpClient;->retryOnConnectionFailure()Z\nHSPLokhttp3/OkHttpClient;->socketFactory()Ljavax/net/SocketFactory;\nPLokhttp3/OkHttpClient;->socketFactory()Ljavax/net/SocketFactory;\nHSPLokhttp3/OkHttpClient;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory;\nPLokhttp3/OkHttpClient;->sslSocketFactory()Ljavax/net/ssl/SSLSocketFactory;\nHSPLokhttp3/OkHttpClient;->writeTimeoutMillis()I\nPLokhttp3/OkHttpClient;->writeTimeoutMillis()I\nHSPLokhttp3/OkHttpClient;->x509TrustManager()Ljavax/net/ssl/X509TrustManager;\nPLokhttp3/OkHttpClient;->x509TrustManager()Ljavax/net/ssl/X509TrustManager;\nLokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;-><init>()V\nPLokhttp3/OkHttpClient$Builder;-><init>()V\nHSPLokhttp3/OkHttpClient$Builder;-><init>(Lokhttp3/OkHttpClient;)V\nPLokhttp3/OkHttpClient$Builder;-><init>(Lokhttp3/OkHttpClient;)V\nHSPLokhttp3/OkHttpClient$Builder;->addInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->addInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->addNetworkInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->addNetworkInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->cache(Lokhttp3/Cache;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->cache(Lokhttp3/Cache;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->callTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->callTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->connectTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->connectTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->cookieJar(Lokhttp3/CookieJar;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->cookieJar(Lokhttp3/CookieJar;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->dns(Lokhttp3/Dns;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->dns(Lokhttp3/Dns;)Lokhttp3/OkHttpClient$Builder;\nHSPLokhttp3/OkHttpClient$Builder;->getAuthenticator$okhttp()Lokhttp3/Authenticator;\nPLokhttp3/OkHttpClient$Builder;->getAuthenticator$okhttp()Lokhttp3/Authenticator;\nHSPLokhttp3/OkHttpClient$Builder;->getCache$okhttp()Lokhttp3/Cache;\nPLokhttp3/OkHttpClient$Builder;->getCache$okhttp()Lokhttp3/Cache;\nHSPLokhttp3/OkHttpClient$Builder;->getCallTimeout$okhttp()I\nPLokhttp3/OkHttpClient$Builder;->getCallTimeout$okhttp()I\nHSPLokhttp3/OkHttpClient$Builder;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner;\nPLokhttp3/OkHttpClient$Builder;->getCertificateChainCleaner$okhttp()Lokhttp3/internal/tls/CertificateChainCleaner;\nHSPLokhttp3/OkHttpClient$Builder;->getCertificatePinner$okhttp()Lokhttp3/CertificatePinner;\nPLokhttp3/OkHttpClient$Builder;->getCertificatePinner$okhttp()Lokhttp3/CertificatePinner;\nHSPLokhttp3/OkHttpClient$Builder;->getConnectTimeout$okhttp()I\nPLokhttp3/OkHttpClient$Builder;->getConnectTimeout$okhttp()I\nHSPLokhttp3/OkHttpClient$Builder;->getConnectionPool$okhttp()Lokhttp3/ConnectionPool;\nPLokhttp3/OkHttpClient$Builder;->getConnectionPool$okhttp()Lokhttp3/ConnectionPool;\nHSPLokhttp3/OkHttpClient$Builder;->getConnectionSpecs$okhttp()Ljava/util/List;\nPLokhttp3/OkHttpClient$Builder;->getConnectionSpecs$okhttp()Ljava/util/List;\nHSPLokhttp3/OkHttpClient$Builder;->getCookieJar$okhttp()Lokhttp3/CookieJar;\nPLokhttp3/OkHttpClient$Builder;->getCookieJar$okhttp()Lokhttp3/CookieJar;\nHSPLokhttp3/OkHttpClient$Builder;->getDispatcher$okhttp()Lokhttp3/Dispatcher;\nPLokhttp3/OkHttpClient$Builder;->getDispatcher$okhttp()Lokhttp3/Dispatcher;\nHSPLokhttp3/OkHttpClient$Builder;->getDns$okhttp()Lokhttp3/Dns;\nPLokhttp3/OkHttpClient$Builder;->getDns$okhttp()Lokhttp3/Dns;\nHSPLokhttp3/OkHttpClient$Builder;->getEventListenerFactory$okhttp()Lokhttp3/EventListener$Factory;\nPLokhttp3/OkHttpClient$Builder;->getEventListenerFactory$okhttp()Lokhttp3/EventListener$Factory;\nHSPLokhttp3/OkHttpClient$Builder;->getFastFallback$okhttp()Z\nPLokhttp3/OkHttpClient$Builder;->getFastFallback$okhttp()Z\nHSPLokhttp3/OkHttpClient$Builder;->getFollowRedirects$okhttp()Z\nPLokhttp3/OkHttpClient$Builder;->getFollowRedirects$okhttp()Z\nHSPLokhttp3/OkHttpClient$Builder;->getFollowSslRedirects$okhttp()Z\nPLokhttp3/OkHttpClient$Builder;->getFollowSslRedirects$okhttp()Z\nHSPLokhttp3/OkHttpClient$Builder;->getHostnameVerifier$okhttp()Ljavax/net/ssl/HostnameVerifier;\nPLokhttp3/OkHttpClient$Builder;->getHostnameVerifier$okhttp()Ljavax/net/ssl/HostnameVerifier;\nHSPLokhttp3/OkHttpClient$Builder;->getInterceptors$okhttp()Ljava/util/List;\nPLokhttp3/OkHttpClient$Builder;->getInterceptors$okhttp()Ljava/util/List;\nHSPLokhttp3/OkHttpClient$Builder;->getMinWebSocketMessageToCompress$okhttp()J\nPLokhttp3/OkHttpClient$Builder;->getMinWebSocketMessageToCompress$okhttp()J\nHSPLokhttp3/OkHttpClient$Builder;->getNetworkInterceptors$okhttp()Ljava/util/List;\nPLokhttp3/OkHttpClient$Builder;->getNetworkInterceptors$okhttp()Ljava/util/List;\nHSPLokhttp3/OkHttpClient$Builder;->getPingInterval$okhttp()I\nPLokhttp3/OkHttpClient$Builder;->getPingInterval$okhttp()I\nHSPLokhttp3/OkHttpClient$Builder;->getProtocols$okhttp()Ljava/util/List;\nPLokhttp3/OkHttpClient$Builder;->getProtocols$okhttp()Ljava/util/List;\nHSPLokhttp3/OkHttpClient$Builder;->getProxy$okhttp()Ljava/net/Proxy;\nPLokhttp3/OkHttpClient$Builder;->getProxy$okhttp()Ljava/net/Proxy;\nHSPLokhttp3/OkHttpClient$Builder;->getProxyAuthenticator$okhttp()Lokhttp3/Authenticator;\nPLokhttp3/OkHttpClient$Builder;->getProxyAuthenticator$okhttp()Lokhttp3/Authenticator;\nHSPLokhttp3/OkHttpClient$Builder;->getProxySelector$okhttp()Ljava/net/ProxySelector;\nPLokhttp3/OkHttpClient$Builder;->getProxySelector$okhttp()Ljava/net/ProxySelector;\nHSPLokhttp3/OkHttpClient$Builder;->getReadTimeout$okhttp()I\nPLokhttp3/OkHttpClient$Builder;->getReadTimeout$okhttp()I\nHSPLokhttp3/OkHttpClient$Builder;->getRetryOnConnectionFailure$okhttp()Z\nPLokhttp3/OkHttpClient$Builder;->getRetryOnConnectionFailure$okhttp()Z\nHSPLokhttp3/OkHttpClient$Builder;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase;\nPLokhttp3/OkHttpClient$Builder;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase;\nHSPLokhttp3/OkHttpClient$Builder;->getSocketFactory$okhttp()Ljavax/net/SocketFactory;\nPLokhttp3/OkHttpClient$Builder;->getSocketFactory$okhttp()Ljavax/net/SocketFactory;\nHSPLokhttp3/OkHttpClient$Builder;->getSslSocketFactoryOrNull$okhttp()Ljavax/net/ssl/SSLSocketFactory;\nPLokhttp3/OkHttpClient$Builder;->getSslSocketFactoryOrNull$okhttp()Ljavax/net/ssl/SSLSocketFactory;\nHSPLokhttp3/OkHttpClient$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner;\nPLokhttp3/OkHttpClient$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner;\nHSPLokhttp3/OkHttpClient$Builder;->getWriteTimeout$okhttp()I\nPLokhttp3/OkHttpClient$Builder;->getWriteTimeout$okhttp()I\nHSPLokhttp3/OkHttpClient$Builder;->getX509TrustManagerOrNull$okhttp()Ljavax/net/ssl/X509TrustManager;\nPLokhttp3/OkHttpClient$Builder;->getX509TrustManagerOrNull$okhttp()Ljavax/net/ssl/X509TrustManager;\nHSPLokhttp3/OkHttpClient$Builder;->readTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;\nPLokhttp3/OkHttpClient$Builder;->readTimeout(JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;\nLokhttp3/OkHttpClient$Companion;\nHSPLokhttp3/OkHttpClient$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/OkHttpClient$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/Protocol;\nHSPLokhttp3/Protocol;-><clinit>()V\nPLokhttp3/Protocol;-><clinit>()V\nHSPLokhttp3/Protocol;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLokhttp3/Protocol;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nHSPLokhttp3/Protocol;->access$getProtocol$p(Lokhttp3/Protocol;)Ljava/lang/String;\nPLokhttp3/Protocol;->access$getProtocol$p(Lokhttp3/Protocol;)Ljava/lang/String;\nHSPLokhttp3/Protocol;->toString()Ljava/lang/String;\nPLokhttp3/Protocol;->toString()Ljava/lang/String;\nLokhttp3/Protocol$Companion;\nHSPLokhttp3/Protocol$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/Protocol$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol;\nPLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol;\nLokhttp3/Request;\nHSPLokhttp3/Request;-><init>(Lokhttp3/Request$Builder;)V\nPLokhttp3/Request;-><init>(Lokhttp3/Request$Builder;)V\nHSPLokhttp3/Request;->body()Lokhttp3/RequestBody;\nPLokhttp3/Request;->body()Lokhttp3/RequestBody;\nHSPLokhttp3/Request;->cacheControl()Lokhttp3/CacheControl;\nPLokhttp3/Request;->cacheControl()Lokhttp3/CacheControl;\nHSPLokhttp3/Request;->getTags$okhttp()Ljava/util/Map;\nPLokhttp3/Request;->getTags$okhttp()Ljava/util/Map;\nHSPLokhttp3/Request;->header(Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/Request;->header(Ljava/lang/String;)Ljava/lang/String;\nHSPLokhttp3/Request;->headers()Lokhttp3/Headers;\nPLokhttp3/Request;->headers()Lokhttp3/Headers;\nHSPLokhttp3/Request;->method()Ljava/lang/String;\nPLokhttp3/Request;->method()Ljava/lang/String;\nHSPLokhttp3/Request;->url()Lokhttp3/HttpUrl;\nPLokhttp3/Request;->url()Lokhttp3/HttpUrl;\nLokhttp3/Request$Builder;\nHSPLokhttp3/Request$Builder;-><init>()V\nPLokhttp3/Request$Builder;-><init>()V\nHSPLokhttp3/Request$Builder;-><init>(Lokhttp3/Request;)V\nPLokhttp3/Request$Builder;-><init>(Lokhttp3/Request;)V\nHSPLokhttp3/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nPLokhttp3/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nHSPLokhttp3/Request$Builder;->cacheControl(Lokhttp3/CacheControl;)Lokhttp3/Request$Builder;\nPLokhttp3/Request$Builder;->cacheControl(Lokhttp3/CacheControl;)Lokhttp3/Request$Builder;\nHSPLokhttp3/Request$Builder;->getBody$okhttp()Lokhttp3/RequestBody;\nPLokhttp3/Request$Builder;->getBody$okhttp()Lokhttp3/RequestBody;\nHSPLokhttp3/Request$Builder;->getHeaders$okhttp()Lokhttp3/Headers$Builder;\nPLokhttp3/Request$Builder;->getHeaders$okhttp()Lokhttp3/Headers$Builder;\nHSPLokhttp3/Request$Builder;->getMethod$okhttp()Ljava/lang/String;\nPLokhttp3/Request$Builder;->getMethod$okhttp()Ljava/lang/String;\nHSPLokhttp3/Request$Builder;->getTags$okhttp()Ljava/util/Map;\nPLokhttp3/Request$Builder;->getTags$okhttp()Ljava/util/Map;\nHSPLokhttp3/Request$Builder;->getUrl$okhttp()Lokhttp3/HttpUrl;\nPLokhttp3/Request$Builder;->getUrl$okhttp()Lokhttp3/HttpUrl;\nHSPLokhttp3/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nPLokhttp3/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nHSPLokhttp3/Request$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Request$Builder;\nPLokhttp3/Request$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Request$Builder;\nHSPLokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder;\nPLokhttp3/Request$Builder;->removeHeader(Ljava/lang/String;)Lokhttp3/Request$Builder;\nHSPLokhttp3/Request$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V\nPLokhttp3/Request$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V\nHSPLokhttp3/Request$Builder;->url(Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder;\nPLokhttp3/Request$Builder;->url(Lokhttp3/HttpUrl;)Lokhttp3/Request$Builder;\nLokhttp3/RequestBody;\nHSPLokhttp3/RequestBody;-><clinit>()V\nPLokhttp3/RequestBody;-><clinit>()V\nHSPLokhttp3/RequestBody;-><init>()V\nPLokhttp3/RequestBody;-><init>()V\nLokhttp3/RequestBody$Companion;\nHSPLokhttp3/RequestBody$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/RequestBody$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/RequestBody$Companion;->create$default(Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody;\nPLokhttp3/RequestBody$Companion;->create$default(Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody;\nHSPLokhttp3/RequestBody$Companion;->create([BLokhttp3/MediaType;II)Lokhttp3/RequestBody;\nPLokhttp3/RequestBody$Companion;->create([BLokhttp3/MediaType;II)Lokhttp3/RequestBody;\nLokhttp3/Response;\nHSPLokhttp3/Response;-><init>(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;Lkotlin/jvm/functions/Function0;)V\nPLokhttp3/Response;-><init>(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;Lkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/Response;->access$getTrailersFn$p(Lokhttp3/Response;)Lkotlin/jvm/functions/Function0;\nPLokhttp3/Response;->access$getTrailersFn$p(Lokhttp3/Response;)Lkotlin/jvm/functions/Function0;\nHSPLokhttp3/Response;->body()Lokhttp3/ResponseBody;\nPLokhttp3/Response;->body()Lokhttp3/ResponseBody;\nHSPLokhttp3/Response;->cacheResponse()Lokhttp3/Response;\nPLokhttp3/Response;->cacheResponse()Lokhttp3/Response;\nHSPLokhttp3/Response;->code()I\nPLokhttp3/Response;->code()I\nHSPLokhttp3/Response;->exchange()Lokhttp3/internal/connection/Exchange;\nPLokhttp3/Response;->exchange()Lokhttp3/internal/connection/Exchange;\nHSPLokhttp3/Response;->getLazyCacheControl$okhttp()Lokhttp3/CacheControl;\nPLokhttp3/Response;->getLazyCacheControl$okhttp()Lokhttp3/CacheControl;\nHSPLokhttp3/Response;->handshake()Lokhttp3/Handshake;\nPLokhttp3/Response;->handshake()Lokhttp3/Handshake;\nHSPLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;\nPLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;\nHSPLokhttp3/Response;->header(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/Response;->header(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLokhttp3/Response;->headers()Lokhttp3/Headers;\nPLokhttp3/Response;->headers()Lokhttp3/Headers;\nHSPLokhttp3/Response;->isSuccessful()Z\nPLokhttp3/Response;->isSuccessful()Z\nHSPLokhttp3/Response;->message()Ljava/lang/String;\nPLokhttp3/Response;->message()Ljava/lang/String;\nHSPLokhttp3/Response;->networkResponse()Lokhttp3/Response;\nPLokhttp3/Response;->networkResponse()Lokhttp3/Response;\nHSPLokhttp3/Response;->priorResponse()Lokhttp3/Response;\nPLokhttp3/Response;->priorResponse()Lokhttp3/Response;\nHSPLokhttp3/Response;->protocol()Lokhttp3/Protocol;\nPLokhttp3/Response;->protocol()Lokhttp3/Protocol;\nHSPLokhttp3/Response;->receivedResponseAtMillis()J\nPLokhttp3/Response;->receivedResponseAtMillis()J\nHSPLokhttp3/Response;->request()Lokhttp3/Request;\nPLokhttp3/Response;->request()Lokhttp3/Request;\nHSPLokhttp3/Response;->sentRequestAtMillis()J\nPLokhttp3/Response;->sentRequestAtMillis()J\nHSPLokhttp3/Response;->setLazyCacheControl$okhttp(Lokhttp3/CacheControl;)V\nPLokhttp3/Response;->setLazyCacheControl$okhttp(Lokhttp3/CacheControl;)V\nLokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;-><init>()V\nPLokhttp3/Response$Builder;-><init>()V\nHSPLokhttp3/Response$Builder;-><init>(Lokhttp3/Response;)V\nPLokhttp3/Response$Builder;-><init>(Lokhttp3/Response;)V\nHSPLokhttp3/Response$Builder;->body(Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->body(Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->build()Lokhttp3/Response;\nPLokhttp3/Response$Builder;->build()Lokhttp3/Response;\nHSPLokhttp3/Response$Builder;->handshake(Lokhttp3/Handshake;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->handshake(Lokhttp3/Handshake;)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->headers(Lokhttp3/Headers;)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->initExchange$okhttp(Lokhttp3/internal/connection/Exchange;)V\nPLokhttp3/Response$Builder;->initExchange$okhttp(Lokhttp3/internal/connection/Exchange;)V\nHSPLokhttp3/Response$Builder;->message(Ljava/lang/String;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->message(Ljava/lang/String;)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->protocol(Lokhttp3/Protocol;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->protocol(Lokhttp3/Protocol;)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->receivedResponseAtMillis(J)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->receivedResponseAtMillis(J)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->request(Lokhttp3/Request;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->request(Lokhttp3/Request;)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->sentRequestAtMillis(J)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->sentRequestAtMillis(J)Lokhttp3/Response$Builder;\nHSPLokhttp3/Response$Builder;->setBody$okhttp(Lokhttp3/ResponseBody;)V\nPLokhttp3/Response$Builder;->setBody$okhttp(Lokhttp3/ResponseBody;)V\nHSPLokhttp3/Response$Builder;->setCacheResponse$okhttp(Lokhttp3/Response;)V\nPLokhttp3/Response$Builder;->setCacheResponse$okhttp(Lokhttp3/Response;)V\nHSPLokhttp3/Response$Builder;->setCode$okhttp(I)V\nPLokhttp3/Response$Builder;->setCode$okhttp(I)V\nHSPLokhttp3/Response$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V\nPLokhttp3/Response$Builder;->setHeaders$okhttp(Lokhttp3/Headers$Builder;)V\nHSPLokhttp3/Response$Builder;->setMessage$okhttp(Ljava/lang/String;)V\nPLokhttp3/Response$Builder;->setMessage$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/Response$Builder;->setNetworkResponse$okhttp(Lokhttp3/Response;)V\nPLokhttp3/Response$Builder;->setNetworkResponse$okhttp(Lokhttp3/Response;)V\nHSPLokhttp3/Response$Builder;->setPriorResponse$okhttp(Lokhttp3/Response;)V\nPLokhttp3/Response$Builder;->setPriorResponse$okhttp(Lokhttp3/Response;)V\nHSPLokhttp3/Response$Builder;->setProtocol$okhttp(Lokhttp3/Protocol;)V\nPLokhttp3/Response$Builder;->setProtocol$okhttp(Lokhttp3/Protocol;)V\nHSPLokhttp3/Response$Builder;->setRequest$okhttp(Lokhttp3/Request;)V\nPLokhttp3/Response$Builder;->setRequest$okhttp(Lokhttp3/Request;)V\nHSPLokhttp3/Response$Builder;->setTrailersFn$okhttp(Lkotlin/jvm/functions/Function0;)V\nPLokhttp3/Response$Builder;->setTrailersFn$okhttp(Lkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/Response$Builder;->trailers(Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder;\nPLokhttp3/Response$Builder;->trailers(Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder;\nLokhttp3/Response$Builder$initExchange$1;\nHSPLokhttp3/Response$Builder$initExchange$1;-><init>(Lokhttp3/internal/connection/Exchange;)V\nPLokhttp3/Response$Builder$initExchange$1;-><init>(Lokhttp3/internal/connection/Exchange;)V\nLokhttp3/Response$Builder$trailersFn$1;\nHSPLokhttp3/Response$Builder$trailersFn$1;-><clinit>()V\nPLokhttp3/Response$Builder$trailersFn$1;-><clinit>()V\nHSPLokhttp3/Response$Builder$trailersFn$1;-><init>()V\nPLokhttp3/Response$Builder$trailersFn$1;-><init>()V\nLokhttp3/ResponseBody;\nHSPLokhttp3/ResponseBody;-><clinit>()V\nPLokhttp3/ResponseBody;-><clinit>()V\nHSPLokhttp3/ResponseBody;-><init>()V\nPLokhttp3/ResponseBody;-><init>()V\nLokhttp3/ResponseBody$Companion;\nHSPLokhttp3/ResponseBody$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/ResponseBody$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/ResponseBody$Companion;->create$default(Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody;\nPLokhttp3/ResponseBody$Companion;->create$default(Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody;\nHSPLokhttp3/ResponseBody$Companion;->create(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody;\nPLokhttp3/ResponseBody$Companion;->create(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody;\nHSPLokhttp3/ResponseBody$Companion;->create([BLokhttp3/MediaType;)Lokhttp3/ResponseBody;\nPLokhttp3/ResponseBody$Companion;->create([BLokhttp3/MediaType;)Lokhttp3/ResponseBody;\nLokhttp3/Route;\nHSPLokhttp3/Route;-><init>(Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V\nPLokhttp3/Route;-><init>(Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V\nHSPLokhttp3/Route;->address()Lokhttp3/Address;\nPLokhttp3/Route;->address()Lokhttp3/Address;\nHSPLokhttp3/Route;->hashCode()I\nPLokhttp3/Route;->hashCode()I\nHSPLokhttp3/Route;->proxy()Ljava/net/Proxy;\nPLokhttp3/Route;->proxy()Ljava/net/Proxy;\nHSPLokhttp3/Route;->requiresTunnel()Z\nPLokhttp3/Route;->requiresTunnel()Z\nHSPLokhttp3/Route;->socketAddress()Ljava/net/InetSocketAddress;\nPLokhttp3/Route;->socketAddress()Ljava/net/InetSocketAddress;\nLokhttp3/TlsVersion;\nHSPLokhttp3/TlsVersion;-><clinit>()V\nPLokhttp3/TlsVersion;-><clinit>()V\nHSPLokhttp3/TlsVersion;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nPLokhttp3/TlsVersion;-><init>(Ljava/lang/String;ILjava/lang/String;)V\nHSPLokhttp3/TlsVersion;->javaName()Ljava/lang/String;\nPLokhttp3/TlsVersion;->javaName()Ljava/lang/String;\nLokhttp3/TlsVersion$Companion;\nHSPLokhttp3/TlsVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/TlsVersion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/TlsVersion$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/TlsVersion;\nPLokhttp3/TlsVersion$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/TlsVersion;\nLokhttp3/WebSocket$Factory;\nLokhttp3/internal/Internal;\nHSPLokhttp3/internal/Internal;->effectiveCipherSuites(Lokhttp3/ConnectionSpec;[Ljava/lang/String;)[Ljava/lang/String;\nPLokhttp3/internal/Internal;->effectiveCipherSuites(Lokhttp3/ConnectionSpec;[Ljava/lang/String;)[Ljava/lang/String;\nLokhttp3/internal/UnreadableResponseBody;\nHSPLokhttp3/internal/UnreadableResponseBody;-><init>(Lokhttp3/MediaType;J)V\nPLokhttp3/internal/UnreadableResponseBody;-><init>(Lokhttp3/MediaType;J)V\nLokhttp3/internal/_CacheControlCommonKt;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonBuild(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl;\nPLokhttp3/internal/_CacheControlCommonKt;->commonBuild(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonClampToInt(J)I\nPLokhttp3/internal/_CacheControlCommonKt;->commonClampToInt(J)I\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonForceCache(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl;\nPLokhttp3/internal/_CacheControlCommonKt;->commonForceCache(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonForceNetwork(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl;\nPLokhttp3/internal/_CacheControlCommonKt;->commonForceNetwork(Lokhttp3/CacheControl$Companion;)Lokhttp3/CacheControl;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonMaxStale(Lokhttp3/CacheControl$Builder;ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder;\nPLokhttp3/internal/_CacheControlCommonKt;->commonMaxStale(Lokhttp3/CacheControl$Builder;ILkotlin/time/DurationUnit;)Lokhttp3/CacheControl$Builder;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonNoCache(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder;\nPLokhttp3/internal/_CacheControlCommonKt;->commonNoCache(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonOnlyIfCached(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder;\nPLokhttp3/internal/_CacheControlCommonKt;->commonOnlyIfCached(Lokhttp3/CacheControl$Builder;)Lokhttp3/CacheControl$Builder;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonParse(Lokhttp3/CacheControl$Companion;Lokhttp3/Headers;)Lokhttp3/CacheControl;\nPLokhttp3/internal/_CacheControlCommonKt;->commonParse(Lokhttp3/CacheControl$Companion;Lokhttp3/Headers;)Lokhttp3/CacheControl;\nHSPLokhttp3/internal/_CacheControlCommonKt;->commonToString(Lokhttp3/CacheControl;)Ljava/lang/String;\nPLokhttp3/internal/_CacheControlCommonKt;->commonToString(Lokhttp3/CacheControl;)Ljava/lang/String;\nLokhttp3/internal/_HeadersCommonKt;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonAdd(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/internal/_HeadersCommonKt;->commonAdd(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonAddLenient(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/internal/_HeadersCommonKt;->commonAddLenient(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonBuild(Lokhttp3/Headers$Builder;)Lokhttp3/Headers;\nPLokhttp3/internal/_HeadersCommonKt;->commonBuild(Lokhttp3/Headers$Builder;)Lokhttp3/Headers;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonHeadersGet([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/internal/_HeadersCommonKt;->commonHeadersGet([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonHeadersOf([Ljava/lang/String;)Lokhttp3/Headers;\nPLokhttp3/internal/_HeadersCommonKt;->commonHeadersOf([Ljava/lang/String;)Lokhttp3/Headers;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonName(Lokhttp3/Headers;I)Ljava/lang/String;\nPLokhttp3/internal/_HeadersCommonKt;->commonName(Lokhttp3/Headers;I)Ljava/lang/String;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonNewBuilder(Lokhttp3/Headers;)Lokhttp3/Headers$Builder;\nPLokhttp3/internal/_HeadersCommonKt;->commonNewBuilder(Lokhttp3/Headers;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonRemoveAll(Lokhttp3/Headers$Builder;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/internal/_HeadersCommonKt;->commonRemoveAll(Lokhttp3/Headers$Builder;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonSet(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nPLokhttp3/internal/_HeadersCommonKt;->commonSet(Lokhttp3/Headers$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonValue(Lokhttp3/Headers;I)Ljava/lang/String;\nPLokhttp3/internal/_HeadersCommonKt;->commonValue(Lokhttp3/Headers;I)Ljava/lang/String;\nHSPLokhttp3/internal/_HeadersCommonKt;->commonValues(Lokhttp3/Headers;Ljava/lang/String;)Ljava/util/List;\nPLokhttp3/internal/_HeadersCommonKt;->commonValues(Lokhttp3/Headers;Ljava/lang/String;)Ljava/util/List;\nHSPLokhttp3/internal/_HeadersCommonKt;->headersCheckName(Ljava/lang/String;)V\nPLokhttp3/internal/_HeadersCommonKt;->headersCheckName(Ljava/lang/String;)V\nHSPLokhttp3/internal/_HeadersCommonKt;->headersCheckValue(Ljava/lang/String;Ljava/lang/String;)V\nPLokhttp3/internal/_HeadersCommonKt;->headersCheckValue(Ljava/lang/String;Ljava/lang/String;)V\nLokhttp3/internal/_HostnamesCommonKt;\nHSPLokhttp3/internal/_HostnamesCommonKt;-><clinit>()V\nPLokhttp3/internal/_HostnamesCommonKt;-><clinit>()V\nHSPLokhttp3/internal/_HostnamesCommonKt;->canParseAsIpAddress(Ljava/lang/String;)Z\nPLokhttp3/internal/_HostnamesCommonKt;->canParseAsIpAddress(Ljava/lang/String;)Z\nHSPLokhttp3/internal/_HostnamesCommonKt;->containsInvalidHostnameAsciiCodes(Ljava/lang/String;)Z\nPLokhttp3/internal/_HostnamesCommonKt;->containsInvalidHostnameAsciiCodes(Ljava/lang/String;)Z\nHSPLokhttp3/internal/_HostnamesCommonKt;->containsInvalidLabelLengths(Ljava/lang/String;)Z\nPLokhttp3/internal/_HostnamesCommonKt;->containsInvalidLabelLengths(Ljava/lang/String;)Z\nLokhttp3/internal/_HostnamesJvmKt;\nHSPLokhttp3/internal/_HostnamesJvmKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/internal/_HostnamesJvmKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String;\nLokhttp3/internal/_MediaTypeCommonKt;\nHSPLokhttp3/internal/_MediaTypeCommonKt;-><clinit>()V\nPLokhttp3/internal/_MediaTypeCommonKt;-><clinit>()V\nHSPLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaType(Ljava/lang/String;)Lokhttp3/MediaType;\nPLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaType(Ljava/lang/String;)Lokhttp3/MediaType;\nHSPLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaTypeOrNull(Ljava/lang/String;)Lokhttp3/MediaType;\nPLokhttp3/internal/_MediaTypeCommonKt;->commonToMediaTypeOrNull(Ljava/lang/String;)Lokhttp3/MediaType;\nLokhttp3/internal/_RequestBodyCommonKt;\nHSPLokhttp3/internal/_RequestBodyCommonKt;->commonToRequestBody([BLokhttp3/MediaType;II)Lokhttp3/RequestBody;\nPLokhttp3/internal/_RequestBodyCommonKt;->commonToRequestBody([BLokhttp3/MediaType;II)Lokhttp3/RequestBody;\nLokhttp3/internal/_RequestBodyCommonKt$commonToRequestBody$1;\nHSPLokhttp3/internal/_RequestBodyCommonKt$commonToRequestBody$1;-><init>(Lokhttp3/MediaType;[BII)V\nPLokhttp3/internal/_RequestBodyCommonKt$commonToRequestBody$1;-><init>(Lokhttp3/MediaType;[BII)V\nLokhttp3/internal/_RequestCommonKt;\nHSPLokhttp3/internal/_RequestCommonKt;->commonAddHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nPLokhttp3/internal/_RequestCommonKt;->commonAddHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nHSPLokhttp3/internal/_RequestCommonKt;->commonCacheControl(Lokhttp3/Request$Builder;Lokhttp3/CacheControl;)Lokhttp3/Request$Builder;\nPLokhttp3/internal/_RequestCommonKt;->commonCacheControl(Lokhttp3/Request$Builder;Lokhttp3/CacheControl;)Lokhttp3/Request$Builder;\nHSPLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nPLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request$Builder;Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;\nHSPLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request;Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/internal/_RequestCommonKt;->commonHeader(Lokhttp3/Request;Ljava/lang/String;)Ljava/lang/String;\nHSPLokhttp3/internal/_RequestCommonKt;->commonHeaders(Lokhttp3/Request$Builder;Lokhttp3/Headers;)Lokhttp3/Request$Builder;\nPLokhttp3/internal/_RequestCommonKt;->commonHeaders(Lokhttp3/Request$Builder;Lokhttp3/Headers;)Lokhttp3/Request$Builder;\nHSPLokhttp3/internal/_RequestCommonKt;->commonRemoveHeader(Lokhttp3/Request$Builder;Ljava/lang/String;)Lokhttp3/Request$Builder;\nPLokhttp3/internal/_RequestCommonKt;->commonRemoveHeader(Lokhttp3/Request$Builder;Ljava/lang/String;)Lokhttp3/Request$Builder;\nLokhttp3/internal/_ResponseBodyCommonKt;\nHSPLokhttp3/internal/_ResponseBodyCommonKt;->commonAsResponseBody(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody;\nPLokhttp3/internal/_ResponseBodyCommonKt;->commonAsResponseBody(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody;\nHSPLokhttp3/internal/_ResponseBodyCommonKt;->commonToResponseBody([BLokhttp3/MediaType;)Lokhttp3/ResponseBody;\nPLokhttp3/internal/_ResponseBodyCommonKt;->commonToResponseBody([BLokhttp3/MediaType;)Lokhttp3/ResponseBody;\nLokhttp3/internal/_ResponseBodyCommonKt$commonAsResponseBody$1;\nHSPLokhttp3/internal/_ResponseBodyCommonKt$commonAsResponseBody$1;-><init>(Lokhttp3/MediaType;JLokio/BufferedSource;)V\nPLokhttp3/internal/_ResponseBodyCommonKt$commonAsResponseBody$1;-><init>(Lokhttp3/MediaType;JLokio/BufferedSource;)V\nLokhttp3/internal/_ResponseCommonKt;\nHSPLokhttp3/internal/_ResponseCommonKt;->checkSupportResponse(Lokhttp3/Response;Ljava/lang/String;)V\nPLokhttp3/internal/_ResponseCommonKt;->checkSupportResponse(Lokhttp3/Response;Ljava/lang/String;)V\nHSPLokhttp3/internal/_ResponseCommonKt;->commonBody(Lokhttp3/Response$Builder;Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonBody(Lokhttp3/Response$Builder;Lokhttp3/ResponseBody;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonCacheResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonCacheResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonCode(Lokhttp3/Response$Builder;I)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonCode(Lokhttp3/Response$Builder;I)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonHeader(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nPLokhttp3/internal/_ResponseCommonKt;->commonHeader(Lokhttp3/Response;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonHeaders(Lokhttp3/Response$Builder;Lokhttp3/Headers;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonHeaders(Lokhttp3/Response$Builder;Lokhttp3/Headers;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonMessage(Lokhttp3/Response$Builder;Ljava/lang/String;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonMessage(Lokhttp3/Response$Builder;Ljava/lang/String;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonNetworkResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonNetworkResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonNewBuilder(Lokhttp3/Response;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonNewBuilder(Lokhttp3/Response;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonPriorResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonPriorResponse(Lokhttp3/Response$Builder;Lokhttp3/Response;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonProtocol(Lokhttp3/Response$Builder;Lokhttp3/Protocol;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonProtocol(Lokhttp3/Response$Builder;Lokhttp3/Protocol;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonRequest(Lokhttp3/Response$Builder;Lokhttp3/Request;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonRequest(Lokhttp3/Response$Builder;Lokhttp3/Request;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->commonTrailers(Lokhttp3/Response$Builder;Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/_ResponseCommonKt;->commonTrailers(Lokhttp3/Response$Builder;Lkotlin/jvm/functions/Function0;)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/_ResponseCommonKt;->getCommonCacheControl(Lokhttp3/Response;)Lokhttp3/CacheControl;\nPLokhttp3/internal/_ResponseCommonKt;->getCommonCacheControl(Lokhttp3/Response;)Lokhttp3/CacheControl;\nHSPLokhttp3/internal/_ResponseCommonKt;->getCommonIsRedirect(Lokhttp3/Response;)Z\nPLokhttp3/internal/_ResponseCommonKt;->getCommonIsRedirect(Lokhttp3/Response;)Z\nHSPLokhttp3/internal/_ResponseCommonKt;->getCommonIsSuccessful(Lokhttp3/Response;)Z\nPLokhttp3/internal/_ResponseCommonKt;->getCommonIsSuccessful(Lokhttp3/Response;)Z\nHSPLokhttp3/internal/_ResponseCommonKt;->stripBody(Lokhttp3/Response;)Lokhttp3/Response;\nPLokhttp3/internal/_ResponseCommonKt;->stripBody(Lokhttp3/Response;)Lokhttp3/Response;\nLokhttp3/internal/_UtilCommonKt;\nHSPLokhttp3/internal/_UtilCommonKt;-><clinit>()V\nPLokhttp3/internal/_UtilCommonKt;-><clinit>()V\nHSPLokhttp3/internal/_UtilCommonKt;->addIfAbsent(Ljava/util/List;Ljava/lang/Object;)V\nPLokhttp3/internal/_UtilCommonKt;->addIfAbsent(Ljava/util/List;Ljava/lang/Object;)V\nHSPLokhttp3/internal/_UtilCommonKt;->checkOffsetAndCount(JJJ)V\nPLokhttp3/internal/_UtilCommonKt;->checkOffsetAndCount(JJJ)V\nHSPLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;CII)I\nPLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;CII)I\nHSPLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;Ljava/lang/String;II)I\nPLokhttp3/internal/_UtilCommonKt;->delimiterOffset(Ljava/lang/String;Ljava/lang/String;II)I\nHSPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyHeaders()Lokhttp3/Headers;\nPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyHeaders()Lokhttp3/Headers;\nHSPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyRequestBody()Lokhttp3/RequestBody;\nPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyRequestBody()Lokhttp3/RequestBody;\nHSPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyResponse()Lokhttp3/ResponseBody;\nPLokhttp3/internal/_UtilCommonKt;->getCommonEmptyResponse()Lokhttp3/ResponseBody;\nHSPLokhttp3/internal/_UtilCommonKt;->hasIntersection([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)Z\nPLokhttp3/internal/_UtilCommonKt;->hasIntersection([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)Z\nHSPLokhttp3/internal/_UtilCommonKt;->indexOf([Ljava/lang/String;Ljava/lang/String;Ljava/util/Comparator;)I\nPLokhttp3/internal/_UtilCommonKt;->indexOf([Ljava/lang/String;Ljava/lang/String;Ljava/util/Comparator;)I\nHSPLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I\nPLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I\nHSPLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace(Ljava/lang/String;II)I\nPLokhttp3/internal/_UtilCommonKt;->indexOfFirstNonAsciiWhitespace(Ljava/lang/String;II)I\nHSPLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I\nPLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace$default(Ljava/lang/String;IIILjava/lang/Object;)I\nHSPLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace(Ljava/lang/String;II)I\nPLokhttp3/internal/_UtilCommonKt;->indexOfLastNonAsciiWhitespace(Ljava/lang/String;II)I\nHSPLokhttp3/internal/_UtilCommonKt;->indexOfNonWhitespace(Ljava/lang/String;I)I\nPLokhttp3/internal/_UtilCommonKt;->indexOfNonWhitespace(Ljava/lang/String;I)I\nHSPLokhttp3/internal/_UtilCommonKt;->interleave(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List;\nPLokhttp3/internal/_UtilCommonKt;->interleave(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List;\nHSPLokhttp3/internal/_UtilCommonKt;->intersect([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)[Ljava/lang/String;\nPLokhttp3/internal/_UtilCommonKt;->intersect([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)[Ljava/lang/String;\nHSPLokhttp3/internal/_UtilCommonKt;->isCivilized(Lokio/FileSystem;Lokio/Path;)Z\nPLokhttp3/internal/_UtilCommonKt;->isCivilized(Lokio/FileSystem;Lokio/Path;)Z\nHSPLokhttp3/internal/_UtilCommonKt;->matchAtPolyfill(Lkotlin/text/Regex;Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult;\nPLokhttp3/internal/_UtilCommonKt;->matchAtPolyfill(Lkotlin/text/Regex;Ljava/lang/CharSequence;I)Lkotlin/text/MatchResult;\nHSPLokhttp3/internal/_UtilCommonKt;->readMedium(Lokio/BufferedSource;)I\nPLokhttp3/internal/_UtilCommonKt;->readMedium(Lokio/BufferedSource;)I\nHSPLokhttp3/internal/_UtilCommonKt;->toLongOrDefault(Ljava/lang/String;J)J\nPLokhttp3/internal/_UtilCommonKt;->toLongOrDefault(Ljava/lang/String;J)J\nHSPLokhttp3/internal/_UtilCommonKt;->toNonNegativeInt(Ljava/lang/String;I)I\nPLokhttp3/internal/_UtilCommonKt;->toNonNegativeInt(Ljava/lang/String;I)I\nHSPLokhttp3/internal/_UtilCommonKt;->writeMedium(Lokio/BufferedSink;I)V\nPLokhttp3/internal/_UtilCommonKt;->writeMedium(Lokio/BufferedSink;I)V\nLokhttp3/internal/_UtilJvmKt;\nHSPLokhttp3/internal/_UtilJvmKt;-><clinit>()V\nPLokhttp3/internal/_UtilJvmKt;-><clinit>()V\nHSPLokhttp3/internal/_UtilJvmKt;->asFactory(Lokhttp3/EventListener;)Lokhttp3/EventListener$Factory;\nPLokhttp3/internal/_UtilJvmKt;->asFactory(Lokhttp3/EventListener;)Lokhttp3/EventListener$Factory;\nHSPLokhttp3/internal/_UtilJvmKt;->checkDuration(Ljava/lang/String;JLjava/util/concurrent/TimeUnit;)I\nPLokhttp3/internal/_UtilJvmKt;->checkDuration(Ljava/lang/String;JLjava/util/concurrent/TimeUnit;)I\nHSPLokhttp3/internal/_UtilJvmKt;->closeQuietly(Ljava/net/Socket;)V\nPLokhttp3/internal/_UtilJvmKt;->closeQuietly(Ljava/net/Socket;)V\nHSPLokhttp3/internal/_UtilJvmKt;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;\nHPLokhttp3/internal/_UtilJvmKt;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;\nHSPLokhttp3/internal/_UtilJvmKt;->headersContentLength(Lokhttp3/Response;)J\nPLokhttp3/internal/_UtilJvmKt;->headersContentLength(Lokhttp3/Response;)J\nHSPLokhttp3/internal/_UtilJvmKt;->immutableListOf([Ljava/lang/Object;)Ljava/util/List;\nPLokhttp3/internal/_UtilJvmKt;->immutableListOf([Ljava/lang/Object;)Ljava/util/List;\nHSPLokhttp3/internal/_UtilJvmKt;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory;\nPLokhttp3/internal/_UtilJvmKt;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory;\nHSPLokhttp3/internal/_UtilJvmKt;->toHeaders(Ljava/util/List;)Lokhttp3/Headers;\nPLokhttp3/internal/_UtilJvmKt;->toHeaders(Ljava/util/List;)Lokhttp3/Headers;\nHSPLokhttp3/internal/_UtilJvmKt;->toHostHeader$default(Lokhttp3/HttpUrl;ZILjava/lang/Object;)Ljava/lang/String;\nPLokhttp3/internal/_UtilJvmKt;->toHostHeader$default(Lokhttp3/HttpUrl;ZILjava/lang/Object;)Ljava/lang/String;\nHSPLokhttp3/internal/_UtilJvmKt;->toHostHeader(Lokhttp3/HttpUrl;Z)Ljava/lang/String;\nPLokhttp3/internal/_UtilJvmKt;->toHostHeader(Lokhttp3/HttpUrl;Z)Ljava/lang/String;\nHSPLokhttp3/internal/_UtilJvmKt;->toImmutableList(Ljava/util/List;)Ljava/util/List;\nPLokhttp3/internal/_UtilJvmKt;->toImmutableList(Ljava/util/List;)Ljava/util/List;\nLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;\nHSPLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Z)V\nPLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Z)V\nHSPLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;\nPLokhttp3/internal/_UtilJvmKt$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;\nLokhttp3/internal/authenticator/JavaNetAuthenticator;\nHSPLokhttp3/internal/authenticator/JavaNetAuthenticator;-><init>(Lokhttp3/Dns;)V\nPLokhttp3/internal/authenticator/JavaNetAuthenticator;-><init>(Lokhttp3/Dns;)V\nHSPLokhttp3/internal/authenticator/JavaNetAuthenticator;-><init>(Lokhttp3/Dns;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/authenticator/JavaNetAuthenticator;-><init>(Lokhttp3/Dns;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/cache/CacheInterceptor;\nHSPLokhttp3/internal/cache/CacheInterceptor;-><clinit>()V\nPLokhttp3/internal/cache/CacheInterceptor;-><clinit>()V\nHSPLokhttp3/internal/cache/CacheInterceptor;-><init>(Lokhttp3/Cache;)V\nPLokhttp3/internal/cache/CacheInterceptor;-><init>(Lokhttp3/Cache;)V\nHSPLokhttp3/internal/cache/CacheInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLokhttp3/internal/cache/CacheInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLokhttp3/internal/cache/CacheInterceptor$Companion;\nHSPLokhttp3/internal/cache/CacheInterceptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/cache/CacheInterceptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;\nHSPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;-><init>(Lokio/BufferedSource;Lokhttp3/internal/cache/CacheRequest;Lokio/BufferedSink;)V\nPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;-><init>(Lokio/BufferedSource;Lokhttp3/internal/cache/CacheRequest;Lokio/BufferedSink;)V\nHSPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->close()V\nPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->close()V\nHSPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->read(Lokio/Buffer;J)J\nPLokhttp3/internal/cache/CacheInterceptor$cacheWritingResponse$cacheWritingSource$1;->read(Lokio/Buffer;J)J\nLokhttp3/internal/cache/CacheRequest;\nLokhttp3/internal/cache/CacheStrategy;\nHSPLokhttp3/internal/cache/CacheStrategy;-><clinit>()V\nPLokhttp3/internal/cache/CacheStrategy;-><clinit>()V\nHSPLokhttp3/internal/cache/CacheStrategy;-><init>(Lokhttp3/Request;Lokhttp3/Response;)V\nPLokhttp3/internal/cache/CacheStrategy;-><init>(Lokhttp3/Request;Lokhttp3/Response;)V\nHSPLokhttp3/internal/cache/CacheStrategy;->getCacheResponse()Lokhttp3/Response;\nPLokhttp3/internal/cache/CacheStrategy;->getCacheResponse()Lokhttp3/Response;\nHSPLokhttp3/internal/cache/CacheStrategy;->getNetworkRequest()Lokhttp3/Request;\nPLokhttp3/internal/cache/CacheStrategy;->getNetworkRequest()Lokhttp3/Request;\nLokhttp3/internal/cache/CacheStrategy$Companion;\nHSPLokhttp3/internal/cache/CacheStrategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/cache/CacheStrategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/cache/CacheStrategy$Companion;->isCacheable(Lokhttp3/Response;Lokhttp3/Request;)Z\nPLokhttp3/internal/cache/CacheStrategy$Companion;->isCacheable(Lokhttp3/Response;Lokhttp3/Request;)Z\nLokhttp3/internal/cache/CacheStrategy$Factory;\nHSPLokhttp3/internal/cache/CacheStrategy$Factory;-><init>(JLokhttp3/Request;Lokhttp3/Response;)V\nPLokhttp3/internal/cache/CacheStrategy$Factory;-><init>(JLokhttp3/Request;Lokhttp3/Response;)V\nHSPLokhttp3/internal/cache/CacheStrategy$Factory;->compute()Lokhttp3/internal/cache/CacheStrategy;\nPLokhttp3/internal/cache/CacheStrategy$Factory;->compute()Lokhttp3/internal/cache/CacheStrategy;\nLokhttp3/internal/cache/DiskLruCache;\nHSPLokhttp3/internal/cache/DiskLruCache;-><clinit>()V\nPLokhttp3/internal/cache/DiskLruCache;-><clinit>()V\nHSPLokhttp3/internal/cache/DiskLruCache;-><init>(Lokio/FileSystem;Lokio/Path;IIJLokhttp3/internal/concurrent/TaskRunner;)V\nPLokhttp3/internal/cache/DiskLruCache;-><init>(Lokio/FileSystem;Lokio/Path;IIJLokhttp3/internal/concurrent/TaskRunner;)V\nHSPLokhttp3/internal/cache/DiskLruCache;->checkNotClosed()V\nPLokhttp3/internal/cache/DiskLruCache;->checkNotClosed()V\nHSPLokhttp3/internal/cache/DiskLruCache;->completeEdit$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;Z)V\nPLokhttp3/internal/cache/DiskLruCache;->completeEdit$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;Z)V\nHSPLokhttp3/internal/cache/DiskLruCache;->edit$default(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;JILjava/lang/Object;)Lokhttp3/internal/cache/DiskLruCache$Editor;\nPLokhttp3/internal/cache/DiskLruCache;->edit$default(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;JILjava/lang/Object;)Lokhttp3/internal/cache/DiskLruCache$Editor;\nHSPLokhttp3/internal/cache/DiskLruCache;->edit(Ljava/lang/String;J)Lokhttp3/internal/cache/DiskLruCache$Editor;\nPLokhttp3/internal/cache/DiskLruCache;->edit(Ljava/lang/String;J)Lokhttp3/internal/cache/DiskLruCache$Editor;\nHSPLokhttp3/internal/cache/DiskLruCache;->get(Ljava/lang/String;)Lokhttp3/internal/cache/DiskLruCache$Snapshot;\nPLokhttp3/internal/cache/DiskLruCache;->get(Ljava/lang/String;)Lokhttp3/internal/cache/DiskLruCache$Snapshot;\nHSPLokhttp3/internal/cache/DiskLruCache;->getDirectory()Lokio/Path;\nPLokhttp3/internal/cache/DiskLruCache;->getDirectory()Lokio/Path;\nHSPLokhttp3/internal/cache/DiskLruCache;->getFileSystem$okhttp()Lokio/FileSystem;\nPLokhttp3/internal/cache/DiskLruCache;->getFileSystem$okhttp()Lokio/FileSystem;\nHSPLokhttp3/internal/cache/DiskLruCache;->getValueCount$okhttp()I\nPLokhttp3/internal/cache/DiskLruCache;->getValueCount$okhttp()I\nHSPLokhttp3/internal/cache/DiskLruCache;->initialize()V\nPLokhttp3/internal/cache/DiskLruCache;->initialize()V\nHSPLokhttp3/internal/cache/DiskLruCache;->journalRebuildRequired()Z\nPLokhttp3/internal/cache/DiskLruCache;->journalRebuildRequired()Z\nHSPLokhttp3/internal/cache/DiskLruCache;->rebuildJournal$okhttp()V\nPLokhttp3/internal/cache/DiskLruCache;->rebuildJournal$okhttp()V\nHSPLokhttp3/internal/cache/DiskLruCache;->validateKey(Ljava/lang/String;)V\nPLokhttp3/internal/cache/DiskLruCache;->validateKey(Ljava/lang/String;)V\nLokhttp3/internal/cache/DiskLruCache$Companion;\nHSPLokhttp3/internal/cache/DiskLruCache$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/cache/DiskLruCache$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/cache/DiskLruCache$Editor;\nHSPLokhttp3/internal/cache/DiskLruCache$Editor;-><init>(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Entry;)V\nPLokhttp3/internal/cache/DiskLruCache$Editor;-><init>(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Entry;)V\nHSPLokhttp3/internal/cache/DiskLruCache$Editor;->commit()V\nPLokhttp3/internal/cache/DiskLruCache$Editor;->commit()V\nHSPLokhttp3/internal/cache/DiskLruCache$Editor;->getEntry$okhttp()Lokhttp3/internal/cache/DiskLruCache$Entry;\nPLokhttp3/internal/cache/DiskLruCache$Editor;->getEntry$okhttp()Lokhttp3/internal/cache/DiskLruCache$Entry;\nHSPLokhttp3/internal/cache/DiskLruCache$Editor;->getWritten$okhttp()[Z\nPLokhttp3/internal/cache/DiskLruCache$Editor;->getWritten$okhttp()[Z\nHSPLokhttp3/internal/cache/DiskLruCache$Editor;->newSink(I)Lokio/Sink;\nPLokhttp3/internal/cache/DiskLruCache$Editor;->newSink(I)Lokio/Sink;\nLokhttp3/internal/cache/DiskLruCache$Editor$newSink$1$1;\nHSPLokhttp3/internal/cache/DiskLruCache$Editor$newSink$1$1;-><init>(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nPLokhttp3/internal/cache/DiskLruCache$Editor$newSink$1$1;-><init>(Lokhttp3/internal/cache/DiskLruCache;Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nLokhttp3/internal/cache/DiskLruCache$Entry;\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;-><init>(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V\nPLokhttp3/internal/cache/DiskLruCache$Entry;-><init>(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getCleanFiles$okhttp()Ljava/util/List;\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getCleanFiles$okhttp()Ljava/util/List;\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getCurrentEditor$okhttp()Lokhttp3/internal/cache/DiskLruCache$Editor;\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getCurrentEditor$okhttp()Lokhttp3/internal/cache/DiskLruCache$Editor;\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getDirtyFiles$okhttp()Ljava/util/List;\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getDirtyFiles$okhttp()Ljava/util/List;\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getKey$okhttp()Ljava/lang/String;\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getKey$okhttp()Ljava/lang/String;\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getLengths$okhttp()[J\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getLengths$okhttp()[J\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getReadable$okhttp()Z\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getReadable$okhttp()Z\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->getZombie$okhttp()Z\nPLokhttp3/internal/cache/DiskLruCache$Entry;->getZombie$okhttp()Z\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->setCurrentEditor$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nPLokhttp3/internal/cache/DiskLruCache$Entry;->setCurrentEditor$okhttp(Lokhttp3/internal/cache/DiskLruCache$Editor;)V\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->setReadable$okhttp(Z)V\nPLokhttp3/internal/cache/DiskLruCache$Entry;->setReadable$okhttp(Z)V\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->setSequenceNumber$okhttp(J)V\nPLokhttp3/internal/cache/DiskLruCache$Entry;->setSequenceNumber$okhttp(J)V\nHSPLokhttp3/internal/cache/DiskLruCache$Entry;->writeLengths$okhttp(Lokio/BufferedSink;)V\nPLokhttp3/internal/cache/DiskLruCache$Entry;->writeLengths$okhttp(Lokio/BufferedSink;)V\nLokhttp3/internal/cache/DiskLruCache$cleanupTask$1;\nHSPLokhttp3/internal/cache/DiskLruCache$cleanupTask$1;-><init>(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V\nPLokhttp3/internal/cache/DiskLruCache$cleanupTask$1;-><init>(Lokhttp3/internal/cache/DiskLruCache;Ljava/lang/String;)V\nLokhttp3/internal/cache/DiskLruCache$fileSystem$1;\nHSPLokhttp3/internal/cache/DiskLruCache$fileSystem$1;-><init>(Lokio/FileSystem;)V\nPLokhttp3/internal/cache/DiskLruCache$fileSystem$1;-><init>(Lokio/FileSystem;)V\nHSPLokhttp3/internal/cache/DiskLruCache$fileSystem$1;->sink(Lokio/Path;Z)Lokio/Sink;\nPLokhttp3/internal/cache/DiskLruCache$fileSystem$1;->sink(Lokio/Path;Z)Lokio/Sink;\nLokhttp3/internal/cache/DiskLruCache$newJournalWriter$faultHidingSink$1;\nHSPLokhttp3/internal/cache/DiskLruCache$newJournalWriter$faultHidingSink$1;-><init>(Lokhttp3/internal/cache/DiskLruCache;)V\nPLokhttp3/internal/cache/DiskLruCache$newJournalWriter$faultHidingSink$1;-><init>(Lokhttp3/internal/cache/DiskLruCache;)V\nLokhttp3/internal/cache/FaultHidingSink;\nHSPLokhttp3/internal/cache/FaultHidingSink;-><init>(Lokio/Sink;Lkotlin/jvm/functions/Function1;)V\nPLokhttp3/internal/cache/FaultHidingSink;-><init>(Lokio/Sink;Lkotlin/jvm/functions/Function1;)V\nHSPLokhttp3/internal/cache/FaultHidingSink;->close()V\nPLokhttp3/internal/cache/FaultHidingSink;->close()V\nHSPLokhttp3/internal/cache/FaultHidingSink;->flush()V\nPLokhttp3/internal/cache/FaultHidingSink;->flush()V\nHSPLokhttp3/internal/cache/FaultHidingSink;->write(Lokio/Buffer;J)V\nPLokhttp3/internal/cache/FaultHidingSink;->write(Lokio/Buffer;J)V\nLokhttp3/internal/concurrent/Task;\nHSPLokhttp3/internal/concurrent/Task;-><init>(Ljava/lang/String;Z)V\nPLokhttp3/internal/concurrent/Task;-><init>(Ljava/lang/String;Z)V\nHSPLokhttp3/internal/concurrent/Task;-><init>(Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/concurrent/Task;-><init>(Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/concurrent/Task;->getName()Ljava/lang/String;\nPLokhttp3/internal/concurrent/Task;->getName()Ljava/lang/String;\nHSPLokhttp3/internal/concurrent/Task;->getNextExecuteNanoTime$okhttp()J\nPLokhttp3/internal/concurrent/Task;->getNextExecuteNanoTime$okhttp()J\nHSPLokhttp3/internal/concurrent/Task;->getQueue$okhttp()Lokhttp3/internal/concurrent/TaskQueue;\nPLokhttp3/internal/concurrent/Task;->getQueue$okhttp()Lokhttp3/internal/concurrent/TaskQueue;\nHSPLokhttp3/internal/concurrent/Task;->initQueue$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V\nPLokhttp3/internal/concurrent/Task;->initQueue$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V\nHSPLokhttp3/internal/concurrent/Task;->setNextExecuteNanoTime$okhttp(J)V\nPLokhttp3/internal/concurrent/Task;->setNextExecuteNanoTime$okhttp(J)V\nLokhttp3/internal/concurrent/TaskQueue;\nHSPLokhttp3/internal/concurrent/TaskQueue;-><init>(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V\nPLokhttp3/internal/concurrent/TaskQueue;-><init>(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V\nHSPLokhttp3/internal/concurrent/TaskQueue;->execute$default(Lokhttp3/internal/concurrent/TaskQueue;Ljava/lang/String;JZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V\nPLokhttp3/internal/concurrent/TaskQueue;->execute$default(Lokhttp3/internal/concurrent/TaskQueue;Ljava/lang/String;JZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)V\nHSPLokhttp3/internal/concurrent/TaskQueue;->execute(Ljava/lang/String;JZLkotlin/jvm/functions/Function0;)V\nPLokhttp3/internal/concurrent/TaskQueue;->execute(Ljava/lang/String;JZLkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/internal/concurrent/TaskQueue;->getActiveTask$okhttp()Lokhttp3/internal/concurrent/Task;\nPLokhttp3/internal/concurrent/TaskQueue;->getActiveTask$okhttp()Lokhttp3/internal/concurrent/Task;\nHSPLokhttp3/internal/concurrent/TaskQueue;->getCancelActiveTask$okhttp()Z\nPLokhttp3/internal/concurrent/TaskQueue;->getCancelActiveTask$okhttp()Z\nHSPLokhttp3/internal/concurrent/TaskQueue;->getFutureTasks$okhttp()Ljava/util/List;\nPLokhttp3/internal/concurrent/TaskQueue;->getFutureTasks$okhttp()Ljava/util/List;\nHSPLokhttp3/internal/concurrent/TaskQueue;->getShutdown$okhttp()Z\nPLokhttp3/internal/concurrent/TaskQueue;->getShutdown$okhttp()Z\nHSPLokhttp3/internal/concurrent/TaskQueue;->schedule$default(Lokhttp3/internal/concurrent/TaskQueue;Lokhttp3/internal/concurrent/Task;JILjava/lang/Object;)V\nPLokhttp3/internal/concurrent/TaskQueue;->schedule$default(Lokhttp3/internal/concurrent/TaskQueue;Lokhttp3/internal/concurrent/Task;JILjava/lang/Object;)V\nHSPLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V\nPLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V\nHSPLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z\nPLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z\nHSPLokhttp3/internal/concurrent/TaskQueue;->setActiveTask$okhttp(Lokhttp3/internal/concurrent/Task;)V\nPLokhttp3/internal/concurrent/TaskQueue;->setActiveTask$okhttp(Lokhttp3/internal/concurrent/Task;)V\nHSPLokhttp3/internal/concurrent/TaskQueue;->setCancelActiveTask$okhttp(Z)V\nPLokhttp3/internal/concurrent/TaskQueue;->setCancelActiveTask$okhttp(Z)V\nLokhttp3/internal/concurrent/TaskQueue$execute$1;\nHSPLokhttp3/internal/concurrent/TaskQueue$execute$1;-><init>(Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V\nPLokhttp3/internal/concurrent/TaskQueue$execute$1;-><init>(Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V\nHSPLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J\nPLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J\nLokhttp3/internal/concurrent/TaskRunner;\nHSPLokhttp3/internal/concurrent/TaskRunner;-><clinit>()V\nPLokhttp3/internal/concurrent/TaskRunner;-><clinit>()V\nHSPLokhttp3/internal/concurrent/TaskRunner;-><init>(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;)V\nPLokhttp3/internal/concurrent/TaskRunner;-><init>(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;)V\nHSPLokhttp3/internal/concurrent/TaskRunner;-><init>(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/concurrent/TaskRunner;-><init>(Lokhttp3/internal/concurrent/TaskRunner$Backend;Ljava/util/logging/Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V\nPLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V\nHSPLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V\nPLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V\nHSPLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task;\nPLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task;\nHSPLokhttp3/internal/concurrent/TaskRunner;->getBackend()Lokhttp3/internal/concurrent/TaskRunner$Backend;\nPLokhttp3/internal/concurrent/TaskRunner;->getBackend()Lokhttp3/internal/concurrent/TaskRunner$Backend;\nHSPLokhttp3/internal/concurrent/TaskRunner;->getLogger$okhttp()Ljava/util/logging/Logger;\nPLokhttp3/internal/concurrent/TaskRunner;->getLogger$okhttp()Ljava/util/logging/Logger;\nHSPLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V\nPLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V\nHSPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue;\nPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue;\nLokhttp3/internal/concurrent/TaskRunner$Backend;\nLokhttp3/internal/concurrent/TaskRunner$Companion;\nHSPLokhttp3/internal/concurrent/TaskRunner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/concurrent/TaskRunner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/concurrent/TaskRunner$RealBackend;\nHSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;-><init>(Ljava/util/concurrent/ThreadFactory;)V\nPLokhttp3/internal/concurrent/TaskRunner$RealBackend;-><init>(Ljava/util/concurrent/ThreadFactory;)V\nHSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V\nPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V\nHSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V\nPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V\nHSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->decorate(Ljava/util/concurrent/BlockingQueue;)Ljava/util/concurrent/BlockingQueue;\nPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->decorate(Ljava/util/concurrent/BlockingQueue;)Ljava/util/concurrent/BlockingQueue;\nHSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/Runnable;)V\nPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/Runnable;)V\nHSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J\nPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J\nLokhttp3/internal/concurrent/TaskRunner$runnable$1;\nHSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;-><init>(Lokhttp3/internal/concurrent/TaskRunner;)V\nPLokhttp3/internal/concurrent/TaskRunner$runnable$1;-><init>(Lokhttp3/internal/concurrent/TaskRunner;)V\nHSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V\nPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V\nLokhttp3/internal/connection/ConnectInterceptor;\nHSPLokhttp3/internal/connection/ConnectInterceptor;-><clinit>()V\nPLokhttp3/internal/connection/ConnectInterceptor;-><clinit>()V\nHSPLokhttp3/internal/connection/ConnectInterceptor;-><init>()V\nPLokhttp3/internal/connection/ConnectInterceptor;-><init>()V\nHSPLokhttp3/internal/connection/ConnectInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLokhttp3/internal/connection/ConnectInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLokhttp3/internal/connection/ConnectPlan;\nHSPLokhttp3/internal/connection/ConnectPlan;-><clinit>()V\nPLokhttp3/internal/connection/ConnectPlan;-><clinit>()V\nHSPLokhttp3/internal/connection/ConnectPlan;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILokhttp3/Request;IZ)V\nPLokhttp3/internal/connection/ConnectPlan;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILokhttp3/Request;IZ)V\nHSPLokhttp3/internal/connection/ConnectPlan;->connectSocket()V\nPLokhttp3/internal/connection/ConnectPlan;->connectSocket()V\nHSPLokhttp3/internal/connection/ConnectPlan;->connectTcp()Lokhttp3/internal/connection/RoutePlanner$ConnectResult;\nPLokhttp3/internal/connection/ConnectPlan;->connectTcp()Lokhttp3/internal/connection/RoutePlanner$ConnectResult;\nHSPLokhttp3/internal/connection/ConnectPlan;->connectTls(Ljavax/net/ssl/SSLSocket;Lokhttp3/ConnectionSpec;)V\nPLokhttp3/internal/connection/ConnectPlan;->connectTls(Ljavax/net/ssl/SSLSocket;Lokhttp3/ConnectionSpec;)V\nHSPLokhttp3/internal/connection/ConnectPlan;->connectTlsEtc()Lokhttp3/internal/connection/RoutePlanner$ConnectResult;\nPLokhttp3/internal/connection/ConnectPlan;->connectTlsEtc()Lokhttp3/internal/connection/RoutePlanner$ConnectResult;\nHSPLokhttp3/internal/connection/ConnectPlan;->copy$default(Lokhttp3/internal/connection/ConnectPlan;ILokhttp3/Request;IZI)Lokhttp3/internal/connection/ConnectPlan;\nPLokhttp3/internal/connection/ConnectPlan;->copy$default(Lokhttp3/internal/connection/ConnectPlan;ILokhttp3/Request;IZI)Lokhttp3/internal/connection/ConnectPlan;\nHSPLokhttp3/internal/connection/ConnectPlan;->getRoutes$okhttp()Ljava/util/List;\nPLokhttp3/internal/connection/ConnectPlan;->getRoutes$okhttp()Ljava/util/List;\nHSPLokhttp3/internal/connection/ConnectPlan;->handleSuccess()Lokhttp3/internal/connection/RealConnection;\nPLokhttp3/internal/connection/ConnectPlan;->handleSuccess()Lokhttp3/internal/connection/RealConnection;\nHSPLokhttp3/internal/connection/ConnectPlan;->isReady()Z\nPLokhttp3/internal/connection/ConnectPlan;->isReady()Z\nHSPLokhttp3/internal/connection/ConnectPlan;->nextConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan;\nPLokhttp3/internal/connection/ConnectPlan;->nextConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan;\nHSPLokhttp3/internal/connection/ConnectPlan;->planWithCurrentOrInitialConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan;\nPLokhttp3/internal/connection/ConnectPlan;->planWithCurrentOrInitialConnectionSpec$okhttp(Ljava/util/List;Ljavax/net/ssl/SSLSocket;)Lokhttp3/internal/connection/ConnectPlan;\nLokhttp3/internal/connection/ConnectPlan$Companion;\nHSPLokhttp3/internal/connection/ConnectPlan$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/connection/ConnectPlan$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/connection/ConnectPlan$WhenMappings;\nHSPLokhttp3/internal/connection/ConnectPlan$WhenMappings;-><clinit>()V\nPLokhttp3/internal/connection/ConnectPlan$WhenMappings;-><clinit>()V\nLokhttp3/internal/connection/ConnectPlan$connectTls$1;\nHSPLokhttp3/internal/connection/ConnectPlan$connectTls$1;-><init>(Lokhttp3/Handshake;)V\nPLokhttp3/internal/connection/ConnectPlan$connectTls$1;-><init>(Lokhttp3/Handshake;)V\nLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;\nHSPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;-><init>(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V\nPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;-><init>(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V\nHSPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/lang/Object;\nPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/lang/Object;\nHSPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/util/List;\nPLokhttp3/internal/connection/ConnectPlan$connectTls$handshake$1;->invoke()Ljava/util/List;\nLokhttp3/internal/connection/Exchange;\nHSPLokhttp3/internal/connection/Exchange;-><init>(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V\nPLokhttp3/internal/connection/Exchange;-><init>(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V\nHSPLokhttp3/internal/connection/Exchange;->bodyComplete(JZZLjava/io/IOException;)Ljava/io/IOException;\nPLokhttp3/internal/connection/Exchange;->bodyComplete(JZZLjava/io/IOException;)Ljava/io/IOException;\nHSPLokhttp3/internal/connection/Exchange;->finishRequest()V\nPLokhttp3/internal/connection/Exchange;->finishRequest()V\nHSPLokhttp3/internal/connection/Exchange;->getCall$okhttp()Lokhttp3/internal/connection/RealCall;\nPLokhttp3/internal/connection/Exchange;->getCall$okhttp()Lokhttp3/internal/connection/RealCall;\nHSPLokhttp3/internal/connection/Exchange;->getConnection$okhttp()Lokhttp3/internal/connection/RealConnection;\nPLokhttp3/internal/connection/Exchange;->getConnection$okhttp()Lokhttp3/internal/connection/RealConnection;\nHSPLokhttp3/internal/connection/Exchange;->getEventListener$okhttp()Lokhttp3/EventListener;\nPLokhttp3/internal/connection/Exchange;->getEventListener$okhttp()Lokhttp3/EventListener;\nHSPLokhttp3/internal/connection/Exchange;->getFinder$okhttp()Lokhttp3/internal/connection/ExchangeFinder;\nPLokhttp3/internal/connection/Exchange;->getFinder$okhttp()Lokhttp3/internal/connection/ExchangeFinder;\nHSPLokhttp3/internal/connection/Exchange;->isDuplex$okhttp()Z\nPLokhttp3/internal/connection/Exchange;->isDuplex$okhttp()Z\nHSPLokhttp3/internal/connection/Exchange;->noRequestBody()V\nPLokhttp3/internal/connection/Exchange;->noRequestBody()V\nHSPLokhttp3/internal/connection/Exchange;->openResponseBody(Lokhttp3/Response;)Lokhttp3/ResponseBody;\nPLokhttp3/internal/connection/Exchange;->openResponseBody(Lokhttp3/Response;)Lokhttp3/ResponseBody;\nHSPLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder;\nPLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/connection/Exchange;->responseHeadersEnd(Lokhttp3/Response;)V\nPLokhttp3/internal/connection/Exchange;->responseHeadersEnd(Lokhttp3/Response;)V\nHSPLokhttp3/internal/connection/Exchange;->responseHeadersStart()V\nPLokhttp3/internal/connection/Exchange;->responseHeadersStart()V\nHSPLokhttp3/internal/connection/Exchange;->writeRequestHeaders(Lokhttp3/Request;)V\nPLokhttp3/internal/connection/Exchange;->writeRequestHeaders(Lokhttp3/Request;)V\nLokhttp3/internal/connection/Exchange$ResponseBodySource;\nHSPLokhttp3/internal/connection/Exchange$ResponseBodySource;-><init>(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V\nPLokhttp3/internal/connection/Exchange$ResponseBodySource;-><init>(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V\nHSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V\nPLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V\nHSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException;\nPLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException;\nHSPLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J\nPLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J\nLokhttp3/internal/connection/ExchangeFinder;\nLokhttp3/internal/connection/FailedPlan;\nLokhttp3/internal/connection/FastFallbackExchangeFinder;\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;-><init>(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/concurrent/TaskRunner;)V\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;-><init>(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/concurrent/TaskRunner;)V\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getConnectResults$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/BlockingQueue;\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getConnectResults$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/BlockingQueue;\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getTcpConnectsInFlight$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/CopyOnWriteArrayList;\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;->access$getTcpConnectsInFlight$p(Lokhttp3/internal/connection/FastFallbackExchangeFinder;)Ljava/util/concurrent/CopyOnWriteArrayList;\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->cancelInFlightConnects()V\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;->cancelInFlightConnects()V\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->find()Lokhttp3/internal/connection/RealConnection;\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;->find()Lokhttp3/internal/connection/RealConnection;\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->getRoutePlanner()Lokhttp3/internal/connection/RoutePlanner;\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;->getRoutePlanner()Lokhttp3/internal/connection/RoutePlanner;\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder;->launchTcpConnect()Lokhttp3/internal/connection/RoutePlanner$ConnectResult;\nPLokhttp3/internal/connection/FastFallbackExchangeFinder;->launchTcpConnect()Lokhttp3/internal/connection/RoutePlanner$ConnectResult;\nLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;-><init>(Ljava/lang/String;Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/FastFallbackExchangeFinder;)V\nPLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;-><init>(Ljava/lang/String;Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/FastFallbackExchangeFinder;)V\nHSPLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;->runOnce()J\nPLokhttp3/internal/connection/FastFallbackExchangeFinder$launchTcpConnect$1;->runOnce()J\nLokhttp3/internal/connection/InetAddressOrderKt;\nHSPLokhttp3/internal/connection/InetAddressOrderKt;->reorderForHappyEyeballs(Ljava/util/List;)Ljava/util/List;\nPLokhttp3/internal/connection/InetAddressOrderKt;->reorderForHappyEyeballs(Ljava/util/List;)Ljava/util/List;\nLokhttp3/internal/connection/RealCall;\nHSPLokhttp3/internal/connection/RealCall;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V\nPLokhttp3/internal/connection/RealCall;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V\nHSPLokhttp3/internal/connection/RealCall;->access$getTimeout$p(Lokhttp3/internal/connection/RealCall;)Lokhttp3/internal/connection/RealCall$timeout$1;\nPLokhttp3/internal/connection/RealCall;->access$getTimeout$p(Lokhttp3/internal/connection/RealCall;)Lokhttp3/internal/connection/RealCall$timeout$1;\nHSPLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V\nPLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V\nHSPLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException;\nPLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException;\nHSPLokhttp3/internal/connection/RealCall;->enqueue(Lokhttp3/Callback;)V\nPLokhttp3/internal/connection/RealCall;->enqueue(Lokhttp3/Callback;)V\nHSPLokhttp3/internal/connection/RealCall;->enterNetworkInterceptorExchange(Lokhttp3/Request;ZLokhttp3/internal/http/RealInterceptorChain;)V\nPLokhttp3/internal/connection/RealCall;->enterNetworkInterceptorExchange(Lokhttp3/Request;ZLokhttp3/internal/http/RealInterceptorChain;)V\nHSPLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V\nPLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V\nHSPLokhttp3/internal/connection/RealCall;->getClient()Lokhttp3/OkHttpClient;\nPLokhttp3/internal/connection/RealCall;->getClient()Lokhttp3/OkHttpClient;\nHSPLokhttp3/internal/connection/RealCall;->getConnection()Lokhttp3/internal/connection/RealConnection;\nPLokhttp3/internal/connection/RealCall;->getConnection()Lokhttp3/internal/connection/RealConnection;\nHSPLokhttp3/internal/connection/RealCall;->getEventListener$okhttp()Lokhttp3/EventListener;\nPLokhttp3/internal/connection/RealCall;->getEventListener$okhttp()Lokhttp3/EventListener;\nHSPLokhttp3/internal/connection/RealCall;->getForWebSocket()Z\nPLokhttp3/internal/connection/RealCall;->getForWebSocket()Z\nHSPLokhttp3/internal/connection/RealCall;->getInterceptorScopedExchange$okhttp()Lokhttp3/internal/connection/Exchange;\nPLokhttp3/internal/connection/RealCall;->getInterceptorScopedExchange$okhttp()Lokhttp3/internal/connection/Exchange;\nHSPLokhttp3/internal/connection/RealCall;->getOriginalRequest()Lokhttp3/Request;\nPLokhttp3/internal/connection/RealCall;->getOriginalRequest()Lokhttp3/Request;\nHSPLokhttp3/internal/connection/RealCall;->getPlansToCancel$okhttp()Ljava/util/concurrent/CopyOnWriteArrayList;\nPLokhttp3/internal/connection/RealCall;->getPlansToCancel$okhttp()Ljava/util/concurrent/CopyOnWriteArrayList;\nHSPLokhttp3/internal/connection/RealCall;->getResponseWithInterceptorChain$okhttp()Lokhttp3/Response;\nPLokhttp3/internal/connection/RealCall;->getResponseWithInterceptorChain$okhttp()Lokhttp3/Response;\nHSPLokhttp3/internal/connection/RealCall;->initExchange$okhttp(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/connection/Exchange;\nPLokhttp3/internal/connection/RealCall;->initExchange$okhttp(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/connection/Exchange;\nHSPLokhttp3/internal/connection/RealCall;->isCanceled()Z\nPLokhttp3/internal/connection/RealCall;->isCanceled()Z\nHSPLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException;\nPLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException;\nHSPLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException;\nPLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException;\nHSPLokhttp3/internal/connection/RealCall;->redactedUrl$okhttp()Ljava/lang/String;\nPLokhttp3/internal/connection/RealCall;->redactedUrl$okhttp()Ljava/lang/String;\nHSPLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket;\nPLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket;\nLokhttp3/internal/connection/RealCall$AsyncCall;\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;-><init>(Lokhttp3/internal/connection/RealCall;Lokhttp3/Callback;)V\nPLokhttp3/internal/connection/RealCall$AsyncCall;-><init>(Lokhttp3/internal/connection/RealCall;Lokhttp3/Callback;)V\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;->executeOn(Ljava/util/concurrent/ExecutorService;)V\nPLokhttp3/internal/connection/RealCall$AsyncCall;->executeOn(Ljava/util/concurrent/ExecutorService;)V\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;->getCall()Lokhttp3/internal/connection/RealCall;\nPLokhttp3/internal/connection/RealCall$AsyncCall;->getCall()Lokhttp3/internal/connection/RealCall;\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;->getCallsPerHost()Ljava/util/concurrent/atomic/AtomicInteger;\nPLokhttp3/internal/connection/RealCall$AsyncCall;->getCallsPerHost()Ljava/util/concurrent/atomic/AtomicInteger;\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;->getHost()Ljava/lang/String;\nPLokhttp3/internal/connection/RealCall$AsyncCall;->getHost()Ljava/lang/String;\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;->reuseCallsPerHostFrom(Lokhttp3/internal/connection/RealCall$AsyncCall;)V\nPLokhttp3/internal/connection/RealCall$AsyncCall;->reuseCallsPerHostFrom(Lokhttp3/internal/connection/RealCall$AsyncCall;)V\nHSPLokhttp3/internal/connection/RealCall$AsyncCall;->run()V\nPLokhttp3/internal/connection/RealCall$AsyncCall;->run()V\nLokhttp3/internal/connection/RealCall$CallReference;\nHSPLokhttp3/internal/connection/RealCall$CallReference;-><init>(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V\nPLokhttp3/internal/connection/RealCall$CallReference;-><init>(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V\nLokhttp3/internal/connection/RealCall$timeout$1;\nHSPLokhttp3/internal/connection/RealCall$timeout$1;-><init>(Lokhttp3/internal/connection/RealCall;)V\nPLokhttp3/internal/connection/RealCall$timeout$1;-><init>(Lokhttp3/internal/connection/RealCall;)V\nLokhttp3/internal/connection/RealConnection;\nHSPLokhttp3/internal/connection/RealConnection;-><clinit>()V\nPLokhttp3/internal/connection/RealConnection;-><clinit>()V\nHSPLokhttp3/internal/connection/RealConnection;-><init>(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Route;Ljava/net/Socket;Ljava/net/Socket;Lokhttp3/Handshake;Lokhttp3/Protocol;Lokio/BufferedSource;Lokio/BufferedSink;I)V\nPLokhttp3/internal/connection/RealConnection;-><init>(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Route;Ljava/net/Socket;Ljava/net/Socket;Lokhttp3/Handshake;Lokhttp3/Protocol;Lokio/BufferedSource;Lokio/BufferedSink;I)V\nHSPLokhttp3/internal/connection/RealConnection;->getCalls()Ljava/util/List;\nPLokhttp3/internal/connection/RealConnection;->getCalls()Ljava/util/List;\nHSPLokhttp3/internal/connection/RealConnection;->getIdleAtNs()J\nPLokhttp3/internal/connection/RealConnection;->getIdleAtNs()J\nHSPLokhttp3/internal/connection/RealConnection;->getNoNewExchanges()Z\nPLokhttp3/internal/connection/RealConnection;->getNoNewExchanges()Z\nHSPLokhttp3/internal/connection/RealConnection;->handshake()Lokhttp3/Handshake;\nPLokhttp3/internal/connection/RealConnection;->handshake()Lokhttp3/Handshake;\nHSPLokhttp3/internal/connection/RealConnection;->incrementSuccessCount$okhttp()V\nPLokhttp3/internal/connection/RealConnection;->incrementSuccessCount$okhttp()V\nHSPLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec;\nPLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec;\nHSPLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/connection/RealConnection;->protocol()Lokhttp3/Protocol;\nPLokhttp3/internal/connection/RealConnection;->protocol()Lokhttp3/Protocol;\nHSPLokhttp3/internal/connection/RealConnection;->route()Lokhttp3/Route;\nPLokhttp3/internal/connection/RealConnection;->route()Lokhttp3/Route;\nHSPLokhttp3/internal/connection/RealConnection;->setIdleAtNs(J)V\nPLokhttp3/internal/connection/RealConnection;->setIdleAtNs(J)V\nHSPLokhttp3/internal/connection/RealConnection;->start()V\nPLokhttp3/internal/connection/RealConnection;->start()V\nLokhttp3/internal/connection/RealConnection$Companion;\nHSPLokhttp3/internal/connection/RealConnection$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/connection/RealConnection$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/connection/RealConnectionPool;\nHSPLokhttp3/internal/connection/RealConnectionPool;-><clinit>()V\nPLokhttp3/internal/connection/RealConnectionPool;-><clinit>()V\nHSPLokhttp3/internal/connection/RealConnectionPool;-><init>(Lokhttp3/internal/concurrent/TaskRunner;IJLjava/util/concurrent/TimeUnit;)V\nPLokhttp3/internal/connection/RealConnectionPool;-><init>(Lokhttp3/internal/concurrent/TaskRunner;IJLjava/util/concurrent/TimeUnit;)V\nHSPLokhttp3/internal/connection/RealConnectionPool;->callAcquirePooledConnection(ZLokhttp3/Address;Lokhttp3/internal/connection/RealCall;Ljava/util/List;Z)Lokhttp3/internal/connection/RealConnection;\nPLokhttp3/internal/connection/RealConnectionPool;->callAcquirePooledConnection(ZLokhttp3/Address;Lokhttp3/internal/connection/RealCall;Ljava/util/List;Z)Lokhttp3/internal/connection/RealConnection;\nHSPLokhttp3/internal/connection/RealConnectionPool;->cleanup(J)J\nPLokhttp3/internal/connection/RealConnectionPool;->cleanup(J)J\nHSPLokhttp3/internal/connection/RealConnectionPool;->connectionBecameIdle(Lokhttp3/internal/connection/RealConnection;)Z\nPLokhttp3/internal/connection/RealConnectionPool;->connectionBecameIdle(Lokhttp3/internal/connection/RealConnection;)Z\nHSPLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I\nPLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I\nHSPLokhttp3/internal/connection/RealConnectionPool;->put(Lokhttp3/internal/connection/RealConnection;)V\nPLokhttp3/internal/connection/RealConnectionPool;->put(Lokhttp3/internal/connection/RealConnection;)V\nLokhttp3/internal/connection/RealConnectionPool$Companion;\nHSPLokhttp3/internal/connection/RealConnectionPool$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/connection/RealConnectionPool$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;\nHSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;-><init>(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V\nPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;-><init>(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V\nHSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J\nPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J\nLokhttp3/internal/connection/RealRoutePlanner;\nHSPLokhttp3/internal/connection/RealRoutePlanner;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/http/RealInterceptorChain;)V\nPLokhttp3/internal/connection/RealRoutePlanner;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Lokhttp3/internal/http/RealInterceptorChain;)V\nHSPLokhttp3/internal/connection/RealRoutePlanner;->getAddress()Lokhttp3/Address;\nPLokhttp3/internal/connection/RealRoutePlanner;->getAddress()Lokhttp3/Address;\nHSPLokhttp3/internal/connection/RealRoutePlanner;->hasNext(Lokhttp3/internal/connection/RealConnection;)Z\nPLokhttp3/internal/connection/RealRoutePlanner;->hasNext(Lokhttp3/internal/connection/RealConnection;)Z\nHSPLokhttp3/internal/connection/RealRoutePlanner;->isCanceled()Z\nPLokhttp3/internal/connection/RealRoutePlanner;->isCanceled()Z\nHSPLokhttp3/internal/connection/RealRoutePlanner;->plan()Lokhttp3/internal/connection/RoutePlanner$Plan;\nPLokhttp3/internal/connection/RealRoutePlanner;->plan()Lokhttp3/internal/connection/RoutePlanner$Plan;\nHSPLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ConnectPlan;\nPLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/Route;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ConnectPlan;\nHSPLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp(Lokhttp3/Route;Ljava/util/List;)Lokhttp3/internal/connection/ConnectPlan;\nPLokhttp3/internal/connection/RealRoutePlanner;->planConnectToRoute$okhttp(Lokhttp3/Route;Ljava/util/List;)Lokhttp3/internal/connection/ConnectPlan;\nHSPLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ReusePlan;\nPLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp$default(Lokhttp3/internal/connection/RealRoutePlanner;Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;ILjava/lang/Object;)Lokhttp3/internal/connection/ReusePlan;\nHSPLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp(Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;)Lokhttp3/internal/connection/ReusePlan;\nPLokhttp3/internal/connection/RealRoutePlanner;->planReusePooledConnection$okhttp(Lokhttp3/internal/connection/ConnectPlan;Ljava/util/List;)Lokhttp3/internal/connection/ReusePlan;\nHSPLokhttp3/internal/connection/RealRoutePlanner;->sameHostAndPort(Lokhttp3/HttpUrl;)Z\nPLokhttp3/internal/connection/RealRoutePlanner;->sameHostAndPort(Lokhttp3/HttpUrl;)Z\nLokhttp3/internal/connection/RouteDatabase;\nHSPLokhttp3/internal/connection/RouteDatabase;-><init>()V\nPLokhttp3/internal/connection/RouteDatabase;-><init>()V\nHSPLokhttp3/internal/connection/RouteDatabase;->connected(Lokhttp3/Route;)V\nPLokhttp3/internal/connection/RouteDatabase;->connected(Lokhttp3/Route;)V\nHSPLokhttp3/internal/connection/RouteDatabase;->shouldPostpone(Lokhttp3/Route;)Z\nPLokhttp3/internal/connection/RouteDatabase;->shouldPostpone(Lokhttp3/Route;)Z\nLokhttp3/internal/connection/RoutePlanner;\nHSPLokhttp3/internal/connection/RoutePlanner;->hasNext$default(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/connection/RealConnection;ILjava/lang/Object;)Z\nPLokhttp3/internal/connection/RoutePlanner;->hasNext$default(Lokhttp3/internal/connection/RoutePlanner;Lokhttp3/internal/connection/RealConnection;ILjava/lang/Object;)Z\nLokhttp3/internal/connection/RoutePlanner$ConnectResult;\nHSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;-><init>(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;)V\nPLokhttp3/internal/connection/RoutePlanner$ConnectResult;-><init>(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;)V\nHSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;-><init>(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/connection/RoutePlanner$ConnectResult;-><init>(Lokhttp3/internal/connection/RoutePlanner$Plan;Lokhttp3/internal/connection/RoutePlanner$Plan;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getNextPlan()Lokhttp3/internal/connection/RoutePlanner$Plan;\nPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getNextPlan()Lokhttp3/internal/connection/RoutePlanner$Plan;\nHSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getPlan()Lokhttp3/internal/connection/RoutePlanner$Plan;\nPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getPlan()Lokhttp3/internal/connection/RoutePlanner$Plan;\nHSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getThrowable()Ljava/lang/Throwable;\nPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->getThrowable()Ljava/lang/Throwable;\nHSPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->isSuccess()Z\nPLokhttp3/internal/connection/RoutePlanner$ConnectResult;->isSuccess()Z\nLokhttp3/internal/connection/RoutePlanner$Plan;\nLokhttp3/internal/connection/RouteSelector;\nHSPLokhttp3/internal/connection/RouteSelector;-><clinit>()V\nPLokhttp3/internal/connection/RouteSelector;-><clinit>()V\nHSPLokhttp3/internal/connection/RouteSelector;-><init>(Lokhttp3/Address;Lokhttp3/internal/connection/RouteDatabase;Lokhttp3/Call;ZLokhttp3/EventListener;)V\nPLokhttp3/internal/connection/RouteSelector;-><init>(Lokhttp3/Address;Lokhttp3/internal/connection/RouteDatabase;Lokhttp3/Call;ZLokhttp3/EventListener;)V\nHSPLokhttp3/internal/connection/RouteSelector;->hasNext()Z\nPLokhttp3/internal/connection/RouteSelector;->hasNext()Z\nHSPLokhttp3/internal/connection/RouteSelector;->next()Lokhttp3/internal/connection/RouteSelector$Selection;\nPLokhttp3/internal/connection/RouteSelector;->next()Lokhttp3/internal/connection/RouteSelector$Selection;\nLokhttp3/internal/connection/RouteSelector$Companion;\nHSPLokhttp3/internal/connection/RouteSelector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/connection/RouteSelector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/connection/RouteSelector$Selection;\nHSPLokhttp3/internal/connection/RouteSelector$Selection;-><init>(Ljava/util/List;)V\nPLokhttp3/internal/connection/RouteSelector$Selection;-><init>(Ljava/util/List;)V\nHSPLokhttp3/internal/connection/RouteSelector$Selection;->getRoutes()Ljava/util/List;\nPLokhttp3/internal/connection/RouteSelector$Selection;->getRoutes()Ljava/util/List;\nHSPLokhttp3/internal/connection/RouteSelector$Selection;->hasNext()Z\nPLokhttp3/internal/connection/RouteSelector$Selection;->hasNext()Z\nHSPLokhttp3/internal/connection/RouteSelector$Selection;->next()Lokhttp3/Route;\nPLokhttp3/internal/connection/RouteSelector$Selection;->next()Lokhttp3/Route;\nLokhttp3/internal/http/BridgeInterceptor;\nHSPLokhttp3/internal/http/BridgeInterceptor;-><init>(Lokhttp3/CookieJar;)V\nPLokhttp3/internal/http/BridgeInterceptor;-><init>(Lokhttp3/CookieJar;)V\nHSPLokhttp3/internal/http/BridgeInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLokhttp3/internal/http/BridgeInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLokhttp3/internal/http/CallServerInterceptor;\nHSPLokhttp3/internal/http/CallServerInterceptor;-><init>(Z)V\nPLokhttp3/internal/http/CallServerInterceptor;-><init>(Z)V\nHSPLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLokhttp3/internal/http/ExchangeCodec;\nLokhttp3/internal/http/ExchangeCodec$Carrier;\nLokhttp3/internal/http/HttpHeaders;\nHSPLokhttp3/internal/http/HttpHeaders;-><clinit>()V\nPLokhttp3/internal/http/HttpHeaders;-><clinit>()V\nHSPLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z\nPLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z\nHSPLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V\nPLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V\nLokhttp3/internal/http/HttpMethod;\nHSPLokhttp3/internal/http/HttpMethod;-><clinit>()V\nPLokhttp3/internal/http/HttpMethod;-><clinit>()V\nHSPLokhttp3/internal/http/HttpMethod;-><init>()V\nPLokhttp3/internal/http/HttpMethod;-><init>()V\nHSPLokhttp3/internal/http/HttpMethod;->invalidatesCache(Ljava/lang/String;)Z\nPLokhttp3/internal/http/HttpMethod;->invalidatesCache(Ljava/lang/String;)Z\nHSPLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z\nPLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z\nLokhttp3/internal/http/RealInterceptorChain;\nHSPLokhttp3/internal/http/RealInterceptorChain;-><init>(Lokhttp3/internal/connection/RealCall;Ljava/util/List;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)V\nPLokhttp3/internal/http/RealInterceptorChain;-><init>(Lokhttp3/internal/connection/RealCall;Ljava/util/List;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)V\nHSPLokhttp3/internal/http/RealInterceptorChain;->call()Lokhttp3/Call;\nPLokhttp3/internal/http/RealInterceptorChain;->call()Lokhttp3/Call;\nHSPLokhttp3/internal/http/RealInterceptorChain;->connection()Lokhttp3/Connection;\nPLokhttp3/internal/http/RealInterceptorChain;->connection()Lokhttp3/Connection;\nHSPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp$default(Lokhttp3/internal/http/RealInterceptorChain;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;IIIILjava/lang/Object;)Lokhttp3/internal/http/RealInterceptorChain;\nPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp$default(Lokhttp3/internal/http/RealInterceptorChain;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;IIIILjava/lang/Object;)Lokhttp3/internal/http/RealInterceptorChain;\nHSPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp(ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)Lokhttp3/internal/http/RealInterceptorChain;\nPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp(ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)Lokhttp3/internal/http/RealInterceptorChain;\nHSPLokhttp3/internal/http/RealInterceptorChain;->getCall$okhttp()Lokhttp3/internal/connection/RealCall;\nPLokhttp3/internal/http/RealInterceptorChain;->getCall$okhttp()Lokhttp3/internal/connection/RealCall;\nHSPLokhttp3/internal/http/RealInterceptorChain;->getExchange$okhttp()Lokhttp3/internal/connection/Exchange;\nPLokhttp3/internal/http/RealInterceptorChain;->getExchange$okhttp()Lokhttp3/internal/connection/Exchange;\nHSPLokhttp3/internal/http/RealInterceptorChain;->getReadTimeoutMillis$okhttp()I\nPLokhttp3/internal/http/RealInterceptorChain;->getReadTimeoutMillis$okhttp()I\nHSPLokhttp3/internal/http/RealInterceptorChain;->getRequest$okhttp()Lokhttp3/Request;\nPLokhttp3/internal/http/RealInterceptorChain;->getRequest$okhttp()Lokhttp3/Request;\nHSPLokhttp3/internal/http/RealInterceptorChain;->getWriteTimeoutMillis$okhttp()I\nPLokhttp3/internal/http/RealInterceptorChain;->getWriteTimeoutMillis$okhttp()I\nHSPLokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;)Lokhttp3/Response;\nPLokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;)Lokhttp3/Response;\nHSPLokhttp3/internal/http/RealInterceptorChain;->request()Lokhttp3/Request;\nPLokhttp3/internal/http/RealInterceptorChain;->request()Lokhttp3/Request;\nLokhttp3/internal/http/RealResponseBody;\nHSPLokhttp3/internal/http/RealResponseBody;-><init>(Ljava/lang/String;JLokio/BufferedSource;)V\nPLokhttp3/internal/http/RealResponseBody;-><init>(Ljava/lang/String;JLokio/BufferedSource;)V\nHSPLokhttp3/internal/http/RealResponseBody;->contentLength()J\nPLokhttp3/internal/http/RealResponseBody;->contentLength()J\nHSPLokhttp3/internal/http/RealResponseBody;->contentType()Lokhttp3/MediaType;\nPLokhttp3/internal/http/RealResponseBody;->contentType()Lokhttp3/MediaType;\nHSPLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource;\nPLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource;\nLokhttp3/internal/http/RequestLine;\nHSPLokhttp3/internal/http/RequestLine;-><clinit>()V\nPLokhttp3/internal/http/RequestLine;-><clinit>()V\nHSPLokhttp3/internal/http/RequestLine;-><init>()V\nPLokhttp3/internal/http/RequestLine;-><init>()V\nHSPLokhttp3/internal/http/RequestLine;->requestPath(Lokhttp3/HttpUrl;)Ljava/lang/String;\nPLokhttp3/internal/http/RequestLine;->requestPath(Lokhttp3/HttpUrl;)Ljava/lang/String;\nLokhttp3/internal/http/RetryAndFollowUpInterceptor;\nHSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;-><clinit>()V\nPLokhttp3/internal/http/RetryAndFollowUpInterceptor;-><clinit>()V\nHSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;-><init>(Lokhttp3/OkHttpClient;)V\nPLokhttp3/internal/http/RetryAndFollowUpInterceptor;-><init>(Lokhttp3/OkHttpClient;)V\nHSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request;\nPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request;\nHSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nLokhttp3/internal/http/RetryAndFollowUpInterceptor$Companion;\nHSPLokhttp3/internal/http/RetryAndFollowUpInterceptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http/RetryAndFollowUpInterceptor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http/StatusLine;\nHSPLokhttp3/internal/http/StatusLine;-><clinit>()V\nPLokhttp3/internal/http/StatusLine;-><clinit>()V\nHSPLokhttp3/internal/http/StatusLine;-><init>(Lokhttp3/Protocol;ILjava/lang/String;)V\nPLokhttp3/internal/http/StatusLine;-><init>(Lokhttp3/Protocol;ILjava/lang/String;)V\nHSPLokhttp3/internal/http/StatusLine;->toString()Ljava/lang/String;\nPLokhttp3/internal/http/StatusLine;->toString()Ljava/lang/String;\nLokhttp3/internal/http/StatusLine$Companion;\nHSPLokhttp3/internal/http/StatusLine$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http/StatusLine$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine;\nPLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine;\nLokhttp3/internal/http2/ErrorCode;\nHSPLokhttp3/internal/http2/ErrorCode;-><clinit>()V\nPLokhttp3/internal/http2/ErrorCode;-><clinit>()V\nHSPLokhttp3/internal/http2/ErrorCode;-><init>(Ljava/lang/String;II)V\nPLokhttp3/internal/http2/ErrorCode;-><init>(Ljava/lang/String;II)V\nLokhttp3/internal/http2/ErrorCode$Companion;\nHSPLokhttp3/internal/http2/ErrorCode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/ErrorCode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http2/Header;\nHSPLokhttp3/internal/http2/Header;-><clinit>()V\nPLokhttp3/internal/http2/Header;-><clinit>()V\nHSPLokhttp3/internal/http2/Header;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nPLokhttp3/internal/http2/Header;-><init>(Ljava/lang/String;Ljava/lang/String;)V\nHSPLokhttp3/internal/http2/Header;-><init>(Lokio/ByteString;Ljava/lang/String;)V\nPLokhttp3/internal/http2/Header;-><init>(Lokio/ByteString;Ljava/lang/String;)V\nHSPLokhttp3/internal/http2/Header;-><init>(Lokio/ByteString;Lokio/ByteString;)V\nPLokhttp3/internal/http2/Header;-><init>(Lokio/ByteString;Lokio/ByteString;)V\nLokhttp3/internal/http2/Header$Companion;\nHSPLokhttp3/internal/http2/Header$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Header$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http2/Hpack;\nHSPLokhttp3/internal/http2/Hpack;-><clinit>()V\nPLokhttp3/internal/http2/Hpack;-><clinit>()V\nHSPLokhttp3/internal/http2/Hpack;-><init>()V\nPLokhttp3/internal/http2/Hpack;-><init>()V\nHSPLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)Lokio/ByteString;\nPLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)Lokio/ByteString;\nHSPLokhttp3/internal/http2/Hpack;->getNAME_TO_FIRST_INDEX()Ljava/util/Map;\nPLokhttp3/internal/http2/Hpack;->getNAME_TO_FIRST_INDEX()Ljava/util/Map;\nHSPLokhttp3/internal/http2/Hpack;->getSTATIC_HEADER_TABLE()[Lokhttp3/internal/http2/Header;\nPLokhttp3/internal/http2/Hpack;->getSTATIC_HEADER_TABLE()[Lokhttp3/internal/http2/Header;\nLokhttp3/internal/http2/Hpack$Reader;\nHSPLokhttp3/internal/http2/Hpack$Reader;-><init>(Lokio/Source;II)V\nPLokhttp3/internal/http2/Hpack$Reader;-><init>(Lokio/Source;II)V\nHSPLokhttp3/internal/http2/Hpack$Reader;-><init>(Lokio/Source;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Hpack$Reader;-><init>(Lokio/Source;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I\nPLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I\nHSPLokhttp3/internal/http2/Hpack$Reader;->getAndResetHeaderList()Ljava/util/List;\nPLokhttp3/internal/http2/Hpack$Reader;->getAndResetHeaderList()Ljava/util/List;\nHSPLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString;\nPLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString;\nHSPLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V\nPLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V\nHSPLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString;\nPLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString;\nHSPLokhttp3/internal/http2/Hpack$Reader;->readHeaders()V\nPLokhttp3/internal/http2/Hpack$Reader;->readHeaders()V\nHSPLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I\nPLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I\nLokhttp3/internal/http2/Hpack$Writer;\nHSPLokhttp3/internal/http2/Hpack$Writer;-><init>(IZLokio/Buffer;)V\nPLokhttp3/internal/http2/Hpack$Writer;-><init>(IZLokio/Buffer;)V\nHSPLokhttp3/internal/http2/Hpack$Writer;-><init>(IZLokio/Buffer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Hpack$Writer;-><init>(IZLokio/Buffer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V\nPLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V\nHSPLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V\nPLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V\nHSPLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V\nPLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V\nHSPLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/List;)V\nPLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/List;)V\nHSPLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V\nPLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V\nLokhttp3/internal/http2/Http2;\nHSPLokhttp3/internal/http2/Http2;-><clinit>()V\nPLokhttp3/internal/http2/Http2;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2;-><init>()V\nPLokhttp3/internal/http2/Http2;-><init>()V\nLokhttp3/internal/http2/Http2Connection;\nHSPLokhttp3/internal/http2/Http2Connection;-><clinit>()V\nPLokhttp3/internal/http2/Http2Connection;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2Connection;-><init>(Lokhttp3/internal/http2/Http2Connection$Builder;)V\nPLokhttp3/internal/http2/Http2Connection;-><init>(Lokhttp3/internal/http2/Http2Connection$Builder;)V\nHSPLokhttp3/internal/http2/Http2Connection;->access$getDEFAULT_SETTINGS$cp()Lokhttp3/internal/http2/Settings;\nPLokhttp3/internal/http2/Http2Connection;->access$getDEFAULT_SETTINGS$cp()Lokhttp3/internal/http2/Settings;\nHSPLokhttp3/internal/http2/Http2Connection;->access$getSettingsListenerQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue;\nPLokhttp3/internal/http2/Http2Connection;->access$getSettingsListenerQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue;\nHSPLokhttp3/internal/http2/Http2Connection;->access$getWriterQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue;\nPLokhttp3/internal/http2/Http2Connection;->access$getWriterQueue$p(Lokhttp3/internal/http2/Http2Connection;)Lokhttp3/internal/concurrent/TaskQueue;\nHSPLokhttp3/internal/http2/Http2Connection;->access$setWriteBytesMaximum$p(Lokhttp3/internal/http2/Http2Connection;J)V\nPLokhttp3/internal/http2/Http2Connection;->access$setWriteBytesMaximum$p(Lokhttp3/internal/http2/Http2Connection;J)V\nHSPLokhttp3/internal/http2/Http2Connection;->flush()V\nPLokhttp3/internal/http2/Http2Connection;->flush()V\nHSPLokhttp3/internal/http2/Http2Connection;->getClient$okhttp()Z\nPLokhttp3/internal/http2/Http2Connection;->getClient$okhttp()Z\nHSPLokhttp3/internal/http2/Http2Connection;->getConnectionName$okhttp()Ljava/lang/String;\nPLokhttp3/internal/http2/Http2Connection;->getConnectionName$okhttp()Ljava/lang/String;\nHSPLokhttp3/internal/http2/Http2Connection;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener;\nPLokhttp3/internal/http2/Http2Connection;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener;\nHSPLokhttp3/internal/http2/Http2Connection;->getOkHttpSettings()Lokhttp3/internal/http2/Settings;\nPLokhttp3/internal/http2/Http2Connection;->getOkHttpSettings()Lokhttp3/internal/http2/Settings;\nHSPLokhttp3/internal/http2/Http2Connection;->getPeerSettings()Lokhttp3/internal/http2/Settings;\nPLokhttp3/internal/http2/Http2Connection;->getPeerSettings()Lokhttp3/internal/http2/Settings;\nHSPLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream;\nPLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream;\nHSPLokhttp3/internal/http2/Http2Connection;->getWriteBytesMaximum()J\nPLokhttp3/internal/http2/Http2Connection;->getWriteBytesMaximum()J\nHSPLokhttp3/internal/http2/Http2Connection;->getWriter()Lokhttp3/internal/http2/Http2Writer;\nPLokhttp3/internal/http2/Http2Connection;->getWriter()Lokhttp3/internal/http2/Http2Writer;\nHSPLokhttp3/internal/http2/Http2Connection;->newStream(ILjava/util/List;Z)Lokhttp3/internal/http2/Http2Stream;\nPLokhttp3/internal/http2/Http2Connection;->newStream(ILjava/util/List;Z)Lokhttp3/internal/http2/Http2Stream;\nHSPLokhttp3/internal/http2/Http2Connection;->newStream(Ljava/util/List;Z)Lokhttp3/internal/http2/Http2Stream;\nPLokhttp3/internal/http2/Http2Connection;->newStream(Ljava/util/List;Z)Lokhttp3/internal/http2/Http2Stream;\nHSPLokhttp3/internal/http2/Http2Connection;->pushedStream$okhttp(I)Z\nPLokhttp3/internal/http2/Http2Connection;->pushedStream$okhttp(I)Z\nHSPLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream;\nPLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream;\nHSPLokhttp3/internal/http2/Http2Connection;->setPeerSettings(Lokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Http2Connection;->setPeerSettings(Lokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Http2Connection;->start$default(Lokhttp3/internal/http2/Http2Connection;ZILjava/lang/Object;)V\nPLokhttp3/internal/http2/Http2Connection;->start$default(Lokhttp3/internal/http2/Http2Connection;ZILjava/lang/Object;)V\nHSPLokhttp3/internal/http2/Http2Connection;->start(Z)V\nPLokhttp3/internal/http2/Http2Connection;->start(Z)V\nHSPLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V\nPLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V\nLokhttp3/internal/http2/Http2Connection$Builder;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;-><init>(ZLokhttp3/internal/concurrent/TaskRunner;)V\nPLokhttp3/internal/http2/Http2Connection$Builder;-><init>(ZLokhttp3/internal/concurrent/TaskRunner;)V\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getClient$okhttp()Z\nPLokhttp3/internal/http2/Http2Connection$Builder;->getClient$okhttp()Z\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getConnectionName$okhttp()Ljava/lang/String;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getConnectionName$okhttp()Ljava/lang/String;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getListener$okhttp()Lokhttp3/internal/http2/Http2Connection$Listener;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getPingIntervalMillis$okhttp()I\nPLokhttp3/internal/http2/Http2Connection$Builder;->getPingIntervalMillis$okhttp()I\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getPushObserver$okhttp()Lokhttp3/internal/http2/PushObserver;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getPushObserver$okhttp()Lokhttp3/internal/http2/PushObserver;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getSink$okhttp()Lokio/BufferedSink;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getSink$okhttp()Lokio/BufferedSink;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getSocket$okhttp()Ljava/net/Socket;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getSocket$okhttp()Ljava/net/Socket;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getSource$okhttp()Lokio/BufferedSource;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getSource$okhttp()Lokio/BufferedSource;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner;\nPLokhttp3/internal/http2/Http2Connection$Builder;->getTaskRunner$okhttp()Lokhttp3/internal/concurrent/TaskRunner;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->listener(Lokhttp3/internal/http2/Http2Connection$Listener;)Lokhttp3/internal/http2/Http2Connection$Builder;\nPLokhttp3/internal/http2/Http2Connection$Builder;->listener(Lokhttp3/internal/http2/Http2Connection$Listener;)Lokhttp3/internal/http2/Http2Connection$Builder;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->pingIntervalMillis(I)Lokhttp3/internal/http2/Http2Connection$Builder;\nPLokhttp3/internal/http2/Http2Connection$Builder;->pingIntervalMillis(I)Lokhttp3/internal/http2/Http2Connection$Builder;\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->setConnectionName$okhttp(Ljava/lang/String;)V\nPLokhttp3/internal/http2/Http2Connection$Builder;->setConnectionName$okhttp(Ljava/lang/String;)V\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->setSink$okhttp(Lokio/BufferedSink;)V\nPLokhttp3/internal/http2/Http2Connection$Builder;->setSink$okhttp(Lokio/BufferedSink;)V\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->setSocket$okhttp(Ljava/net/Socket;)V\nPLokhttp3/internal/http2/Http2Connection$Builder;->setSocket$okhttp(Ljava/net/Socket;)V\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->setSource$okhttp(Lokio/BufferedSource;)V\nPLokhttp3/internal/http2/Http2Connection$Builder;->setSource$okhttp(Lokio/BufferedSource;)V\nHSPLokhttp3/internal/http2/Http2Connection$Builder;->socket(Ljava/net/Socket;Ljava/lang/String;Lokio/BufferedSource;Lokio/BufferedSink;)Lokhttp3/internal/http2/Http2Connection$Builder;\nPLokhttp3/internal/http2/Http2Connection$Builder;->socket(Ljava/net/Socket;Ljava/lang/String;Lokio/BufferedSource;Lokio/BufferedSink;)Lokhttp3/internal/http2/Http2Connection$Builder;\nLokhttp3/internal/http2/Http2Connection$Companion;\nHSPLokhttp3/internal/http2/Http2Connection$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Http2Connection$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http2/Http2Connection$Listener;\nHSPLokhttp3/internal/http2/Http2Connection$Listener;-><clinit>()V\nPLokhttp3/internal/http2/Http2Connection$Listener;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2Connection$Listener;-><init>()V\nPLokhttp3/internal/http2/Http2Connection$Listener;-><init>()V\nLokhttp3/internal/http2/Http2Connection$Listener$Companion;\nHSPLokhttp3/internal/http2/Http2Connection$Listener$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Http2Connection$Listener$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;\nHSPLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;-><init>()V\nPLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;-><init>()V\nLokhttp3/internal/http2/Http2Connection$ReaderRunnable;\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;-><init>(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;-><init>(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->applyAndAckSettings(ZLokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->applyAndAckSettings(ZLokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(ZILokio/BufferedSource;I)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(ZILokio/BufferedSource;I)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ZIILjava/util/List;)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ZIILjava/util/List;)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object;\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object;\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(ZLokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(ZLokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(IJ)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(IJ)V\nLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;-><init>(Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;-><init>(Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()Ljava/lang/Object;\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()Ljava/lang/Object;\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$1$1$2;->invoke()V\nLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;-><init>(Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;ZLokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;-><init>(Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;ZLokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()Ljava/lang/Object;\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()Ljava/lang/Object;\nHSPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()V\nPLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$1;->invoke()V\nLokhttp3/internal/http2/Http2ExchangeCodec;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;-><clinit>()V\nPLokhttp3/internal/http2/Http2ExchangeCodec;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/ExchangeCodec$Carrier;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V\nPLokhttp3/internal/http2/Http2ExchangeCodec;-><init>(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/ExchangeCodec$Carrier;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_REQUEST_HEADERS$cp()Ljava/util/List;\nPLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_REQUEST_HEADERS$cp()Ljava/util/List;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_RESPONSE_HEADERS$cp()Ljava/util/List;\nPLokhttp3/internal/http2/Http2ExchangeCodec;->access$getHTTP_2_SKIPPED_RESPONSE_HEADERS$cp()Ljava/util/List;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V\nPLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->getCarrier()Lokhttp3/internal/http/ExchangeCodec$Carrier;\nPLokhttp3/internal/http2/Http2ExchangeCodec;->getCarrier()Lokhttp3/internal/http/ExchangeCodec$Carrier;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source;\nPLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder;\nPLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J\nPLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J\nHSPLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V\nPLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V\nLokhttp3/internal/http2/Http2ExchangeCodec$Companion;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->http2HeadersList(Lokhttp3/Request;)Ljava/util/List;\nPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->http2HeadersList(Lokhttp3/Request;)Ljava/util/List;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->readHttp2HeadersList(Lokhttp3/Headers;Lokhttp3/Protocol;)Lokhttp3/Response$Builder;\nPLokhttp3/internal/http2/Http2ExchangeCodec$Companion;->readHttp2HeadersList(Lokhttp3/Headers;Lokhttp3/Protocol;)Lokhttp3/Response$Builder;\nLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;\nHSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;-><clinit>()V\nPLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;-><init>()V\nPLokhttp3/internal/http2/Http2ExchangeCodec$Companion$readHttp2HeadersList$1;-><init>()V\nLokhttp3/internal/http2/Http2Reader;\nHSPLokhttp3/internal/http2/Http2Reader;-><clinit>()V\nPLokhttp3/internal/http2/Http2Reader;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2Reader;-><init>(Lokio/BufferedSource;Z)V\nPLokhttp3/internal/http2/Http2Reader;-><init>(Lokio/BufferedSource;Z)V\nHSPLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z\nPLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z\nHSPLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V\nPLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V\nHSPLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List;\nPLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List;\nLokhttp3/internal/http2/Http2Reader$Companion;\nHSPLokhttp3/internal/http2/Http2Reader$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Http2Reader$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I\nPLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I\nLokhttp3/internal/http2/Http2Reader$ContinuationSource;\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;-><init>(Lokio/BufferedSource;)V\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;-><init>(Lokio/BufferedSource;)V\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->getLeft()I\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->getLeft()I\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setFlags(I)V\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setFlags(I)V\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLeft(I)V\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLeft(I)V\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLength(I)V\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setLength(I)V\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setPadding(I)V\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setPadding(I)V\nHSPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setStreamId(I)V\nPLokhttp3/internal/http2/Http2Reader$ContinuationSource;->setStreamId(I)V\nLokhttp3/internal/http2/Http2Reader$Handler;\nLokhttp3/internal/http2/Http2Stream;\nHSPLokhttp3/internal/http2/Http2Stream;-><clinit>()V\nPLokhttp3/internal/http2/Http2Stream;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2Stream;-><init>(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V\nPLokhttp3/internal/http2/Http2Stream;-><init>(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V\nHSPLokhttp3/internal/http2/Http2Stream;->access$doReadTimeout(Lokhttp3/internal/http2/Http2Stream;)Z\nPLokhttp3/internal/http2/Http2Stream;->access$doReadTimeout(Lokhttp3/internal/http2/Http2Stream;)Z\nHSPLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V\nPLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V\nHSPLokhttp3/internal/http2/Http2Stream;->getConnection()Lokhttp3/internal/http2/Http2Connection;\nPLokhttp3/internal/http2/Http2Stream;->getConnection()Lokhttp3/internal/http2/Http2Connection;\nHSPLokhttp3/internal/http2/Http2Stream;->getErrorCode$okhttp()Lokhttp3/internal/http2/ErrorCode;\nPLokhttp3/internal/http2/Http2Stream;->getErrorCode$okhttp()Lokhttp3/internal/http2/ErrorCode;\nHSPLokhttp3/internal/http2/Http2Stream;->getReadBytesAcknowledged()J\nPLokhttp3/internal/http2/Http2Stream;->getReadBytesAcknowledged()J\nHSPLokhttp3/internal/http2/Http2Stream;->getReadBytesTotal()J\nPLokhttp3/internal/http2/Http2Stream;->getReadBytesTotal()J\nHSPLokhttp3/internal/http2/Http2Stream;->getReadTimeout$okhttp()Lokhttp3/internal/http2/Http2Stream$StreamTimeout;\nPLokhttp3/internal/http2/Http2Stream;->getReadTimeout$okhttp()Lokhttp3/internal/http2/Http2Stream$StreamTimeout;\nHSPLokhttp3/internal/http2/Http2Stream;->getSink$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSink;\nPLokhttp3/internal/http2/Http2Stream;->getSink$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSink;\nHSPLokhttp3/internal/http2/Http2Stream;->getSink()Lokio/Sink;\nPLokhttp3/internal/http2/Http2Stream;->getSink()Lokio/Sink;\nHSPLokhttp3/internal/http2/Http2Stream;->getSource$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSource;\nPLokhttp3/internal/http2/Http2Stream;->getSource$okhttp()Lokhttp3/internal/http2/Http2Stream$FramingSource;\nHSPLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z\nPLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z\nHSPLokhttp3/internal/http2/Http2Stream;->isOpen()Z\nPLokhttp3/internal/http2/Http2Stream;->isOpen()Z\nHSPLokhttp3/internal/http2/Http2Stream;->readTimeout()Lokio/Timeout;\nPLokhttp3/internal/http2/Http2Stream;->readTimeout()Lokio/Timeout;\nHSPLokhttp3/internal/http2/Http2Stream;->receiveData(Lokio/BufferedSource;I)V\nPLokhttp3/internal/http2/Http2Stream;->receiveData(Lokio/BufferedSource;I)V\nHSPLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V\nPLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V\nHSPLokhttp3/internal/http2/Http2Stream;->setReadBytesTotal$okhttp(J)V\nPLokhttp3/internal/http2/Http2Stream;->setReadBytesTotal$okhttp(J)V\nHSPLokhttp3/internal/http2/Http2Stream;->takeHeaders(Z)Lokhttp3/Headers;\nPLokhttp3/internal/http2/Http2Stream;->takeHeaders(Z)Lokhttp3/Headers;\nHSPLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V\nPLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V\nHSPLokhttp3/internal/http2/Http2Stream;->writeTimeout()Lokio/Timeout;\nPLokhttp3/internal/http2/Http2Stream;->writeTimeout()Lokio/Timeout;\nLokhttp3/internal/http2/Http2Stream$Companion;\nHSPLokhttp3/internal/http2/Http2Stream$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Http2Stream$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http2/Http2Stream$FramingSink;\nHSPLokhttp3/internal/http2/Http2Stream$FramingSink;-><init>(Lokhttp3/internal/http2/Http2Stream;Z)V\nPLokhttp3/internal/http2/Http2Stream$FramingSink;-><init>(Lokhttp3/internal/http2/Http2Stream;Z)V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V\nPLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSink;->getClosed()Z\nPLokhttp3/internal/http2/Http2Stream$FramingSink;->getClosed()Z\nHSPLokhttp3/internal/http2/Http2Stream$FramingSink;->getFinished()Z\nPLokhttp3/internal/http2/Http2Stream$FramingSink;->getFinished()Z\nLokhttp3/internal/http2/Http2Stream$FramingSource;\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;-><init>(Lokhttp3/internal/http2/Http2Stream;JZ)V\nPLokhttp3/internal/http2/Http2Stream$FramingSource;-><init>(Lokhttp3/internal/http2/Http2Stream;JZ)V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->getClosed$okhttp()Z\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->getClosed$okhttp()Z\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->getFinished$okhttp()Z\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->getFinished$okhttp()Z\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->receive$okhttp(Lokio/BufferedSource;J)V\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->receive$okhttp(Lokio/BufferedSource;J)V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->setFinished$okhttp(Z)V\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->setFinished$okhttp(Z)V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->setTrailers(Lokhttp3/Headers;)V\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->setTrailers(Lokhttp3/Headers;)V\nHSPLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V\nPLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V\nLokhttp3/internal/http2/Http2Stream$StreamTimeout;\nHSPLokhttp3/internal/http2/Http2Stream$StreamTimeout;-><init>(Lokhttp3/internal/http2/Http2Stream;)V\nPLokhttp3/internal/http2/Http2Stream$StreamTimeout;-><init>(Lokhttp3/internal/http2/Http2Stream;)V\nHSPLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V\nPLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V\nLokhttp3/internal/http2/Http2Writer;\nHSPLokhttp3/internal/http2/Http2Writer;-><clinit>()V\nPLokhttp3/internal/http2/Http2Writer;-><clinit>()V\nHSPLokhttp3/internal/http2/Http2Writer;-><init>(Lokio/BufferedSink;Z)V\nPLokhttp3/internal/http2/Http2Writer;-><init>(Lokio/BufferedSink;Z)V\nHSPLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Http2Writer;->connectionPreface()V\nPLokhttp3/internal/http2/Http2Writer;->connectionPreface()V\nHSPLokhttp3/internal/http2/Http2Writer;->flush()V\nPLokhttp3/internal/http2/Http2Writer;->flush()V\nHSPLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V\nPLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V\nHSPLokhttp3/internal/http2/Http2Writer;->headers(ZILjava/util/List;)V\nPLokhttp3/internal/http2/Http2Writer;->headers(ZILjava/util/List;)V\nHSPLokhttp3/internal/http2/Http2Writer;->settings(Lokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Http2Writer;->settings(Lokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Http2Writer;->windowUpdate(IJ)V\nPLokhttp3/internal/http2/Http2Writer;->windowUpdate(IJ)V\nLokhttp3/internal/http2/Http2Writer$Companion;\nHSPLokhttp3/internal/http2/Http2Writer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Http2Writer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/http2/Huffman;\nHSPLokhttp3/internal/http2/Huffman;-><clinit>()V\nPLokhttp3/internal/http2/Huffman;-><clinit>()V\nHSPLokhttp3/internal/http2/Huffman;-><init>()V\nPLokhttp3/internal/http2/Huffman;-><init>()V\nHSPLokhttp3/internal/http2/Huffman;->addCode(III)V\nPLokhttp3/internal/http2/Huffman;->addCode(III)V\nHSPLokhttp3/internal/http2/Huffman;->decode(Lokio/BufferedSource;JLokio/BufferedSink;)V\nHPLokhttp3/internal/http2/Huffman;->decode(Lokio/BufferedSource;JLokio/BufferedSink;)V\nHSPLokhttp3/internal/http2/Huffman;->encode(Lokio/ByteString;Lokio/BufferedSink;)V\nPLokhttp3/internal/http2/Huffman;->encode(Lokio/ByteString;Lokio/BufferedSink;)V\nHSPLokhttp3/internal/http2/Huffman;->encodedLength(Lokio/ByteString;)I\nPLokhttp3/internal/http2/Huffman;->encodedLength(Lokio/ByteString;)I\nLokhttp3/internal/http2/Huffman$Node;\nHSPLokhttp3/internal/http2/Huffman$Node;-><init>()V\nPLokhttp3/internal/http2/Huffman$Node;-><init>()V\nHSPLokhttp3/internal/http2/Huffman$Node;-><init>(II)V\nPLokhttp3/internal/http2/Huffman$Node;-><init>(II)V\nHSPLokhttp3/internal/http2/Huffman$Node;->getChildren()[Lokhttp3/internal/http2/Huffman$Node;\nPLokhttp3/internal/http2/Huffman$Node;->getChildren()[Lokhttp3/internal/http2/Huffman$Node;\nHSPLokhttp3/internal/http2/Huffman$Node;->getSymbol()I\nPLokhttp3/internal/http2/Huffman$Node;->getSymbol()I\nHSPLokhttp3/internal/http2/Huffman$Node;->getTerminalBitCount()I\nPLokhttp3/internal/http2/Huffman$Node;->getTerminalBitCount()I\nLokhttp3/internal/http2/PushObserver;\nHSPLokhttp3/internal/http2/PushObserver;-><clinit>()V\nPLokhttp3/internal/http2/PushObserver;-><clinit>()V\nLokhttp3/internal/http2/PushObserver$Companion;\nHSPLokhttp3/internal/http2/PushObserver$Companion;-><clinit>()V\nPLokhttp3/internal/http2/PushObserver$Companion;-><clinit>()V\nHSPLokhttp3/internal/http2/PushObserver$Companion;-><init>()V\nPLokhttp3/internal/http2/PushObserver$Companion;-><init>()V\nLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;\nHSPLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;-><init>()V\nPLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;-><init>()V\nLokhttp3/internal/http2/Settings;\nHSPLokhttp3/internal/http2/Settings;-><clinit>()V\nPLokhttp3/internal/http2/Settings;-><clinit>()V\nHSPLokhttp3/internal/http2/Settings;-><init>()V\nPLokhttp3/internal/http2/Settings;-><init>()V\nHSPLokhttp3/internal/http2/Settings;->get(I)I\nPLokhttp3/internal/http2/Settings;->get(I)I\nHSPLokhttp3/internal/http2/Settings;->getHeaderTableSize()I\nPLokhttp3/internal/http2/Settings;->getHeaderTableSize()I\nHSPLokhttp3/internal/http2/Settings;->getInitialWindowSize()I\nPLokhttp3/internal/http2/Settings;->getInitialWindowSize()I\nHSPLokhttp3/internal/http2/Settings;->getMaxConcurrentStreams()I\nPLokhttp3/internal/http2/Settings;->getMaxConcurrentStreams()I\nHSPLokhttp3/internal/http2/Settings;->getMaxFrameSize(I)I\nPLokhttp3/internal/http2/Settings;->getMaxFrameSize(I)I\nHSPLokhttp3/internal/http2/Settings;->isSet(I)Z\nPLokhttp3/internal/http2/Settings;->isSet(I)Z\nHSPLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V\nPLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V\nHSPLokhttp3/internal/http2/Settings;->set(II)Lokhttp3/internal/http2/Settings;\nPLokhttp3/internal/http2/Settings;->set(II)Lokhttp3/internal/http2/Settings;\nHSPLokhttp3/internal/http2/Settings;->size()I\nPLokhttp3/internal/http2/Settings;->size()I\nLokhttp3/internal/http2/Settings$Companion;\nHSPLokhttp3/internal/http2/Settings$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/http2/Settings$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/platform/Android10Platform;\nHSPLokhttp3/internal/platform/Android10Platform;-><clinit>()V\nPLokhttp3/internal/platform/Android10Platform;-><clinit>()V\nHSPLokhttp3/internal/platform/Android10Platform;-><init>()V\nPLokhttp3/internal/platform/Android10Platform;-><init>()V\nHSPLokhttp3/internal/platform/Android10Platform;->access$isSupported$cp()Z\nPLokhttp3/internal/platform/Android10Platform;->access$isSupported$cp()Z\nHSPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner;\nPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner;\nHSPLokhttp3/internal/platform/Android10Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V\nPLokhttp3/internal/platform/Android10Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V\nHSPLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;\nPLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;\nHSPLokhttp3/internal/platform/Android10Platform;->getStackTraceForCloseable(Ljava/lang/String;)Ljava/lang/Object;\nPLokhttp3/internal/platform/Android10Platform;->getStackTraceForCloseable(Ljava/lang/String;)Ljava/lang/Object;\nLokhttp3/internal/platform/Android10Platform$Companion;\nHSPLokhttp3/internal/platform/Android10Platform$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/Android10Platform$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/platform/Android10Platform$Companion;->buildIfSupported()Lokhttp3/internal/platform/Platform;\nPLokhttp3/internal/platform/Android10Platform$Companion;->buildIfSupported()Lokhttp3/internal/platform/Platform;\nLokhttp3/internal/platform/Platform;\nHSPLokhttp3/internal/platform/Platform;-><clinit>()V\nPLokhttp3/internal/platform/Platform;-><clinit>()V\nHSPLokhttp3/internal/platform/Platform;-><init>()V\nPLokhttp3/internal/platform/Platform;-><init>()V\nHSPLokhttp3/internal/platform/Platform;->access$getPlatform$cp()Lokhttp3/internal/platform/Platform;\nPLokhttp3/internal/platform/Platform;->access$getPlatform$cp()Lokhttp3/internal/platform/Platform;\nHSPLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V\nPLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V\nHSPLokhttp3/internal/platform/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V\nPLokhttp3/internal/platform/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V\nHSPLokhttp3/internal/platform/Platform;->getPrefix()Ljava/lang/String;\nPLokhttp3/internal/platform/Platform;->getPrefix()Ljava/lang/String;\nHSPLokhttp3/internal/platform/Platform;->log$default(Lokhttp3/internal/platform/Platform;Ljava/lang/String;ILjava/lang/Throwable;ILjava/lang/Object;)V\nPLokhttp3/internal/platform/Platform;->log$default(Lokhttp3/internal/platform/Platform;Ljava/lang/String;ILjava/lang/Throwable;ILjava/lang/Object;)V\nHSPLokhttp3/internal/platform/Platform;->log(Ljava/lang/String;ILjava/lang/Throwable;)V\nPLokhttp3/internal/platform/Platform;->log(Ljava/lang/String;ILjava/lang/Throwable;)V\nHSPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext;\nPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext;\nHSPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory;\nPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory;\nHSPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager;\nPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager;\nLokhttp3/internal/platform/Platform$Companion;\nHSPLokhttp3/internal/platform/Platform$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/Platform$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/platform/Platform$Companion;->access$findPlatform(Lokhttp3/internal/platform/Platform$Companion;)Lokhttp3/internal/platform/Platform;\nPLokhttp3/internal/platform/Platform$Companion;->access$findPlatform(Lokhttp3/internal/platform/Platform$Companion;)Lokhttp3/internal/platform/Platform;\nHSPLokhttp3/internal/platform/Platform$Companion;->alpnProtocolNames(Ljava/util/List;)Ljava/util/List;\nPLokhttp3/internal/platform/Platform$Companion;->alpnProtocolNames(Ljava/util/List;)Ljava/util/List;\nHSPLokhttp3/internal/platform/Platform$Companion;->findPlatform()Lokhttp3/internal/platform/Platform;\nPLokhttp3/internal/platform/Platform$Companion;->findPlatform()Lokhttp3/internal/platform/Platform;\nHSPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z\nPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z\nLokhttp3/internal/platform/android/Android10SocketAdapter;\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter;-><clinit>()V\nPLokhttp3/internal/platform/android/Android10SocketAdapter;-><clinit>()V\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter;-><init>()V\nPLokhttp3/internal/platform/android/Android10SocketAdapter;-><init>()V\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V\nPLokhttp3/internal/platform/android/Android10SocketAdapter;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;\nPLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String;\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z\nPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter;->matchesSocket(Ljavax/net/ssl/SSLSocket;)Z\nPLokhttp3/internal/platform/android/Android10SocketAdapter;->matchesSocket(Ljavax/net/ssl/SSLSocket;)Z\nLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->buildIfSupported()Lokhttp3/internal/platform/android/SocketAdapter;\nPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->buildIfSupported()Lokhttp3/internal/platform/android/SocketAdapter;\nHSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->isSupported()Z\nPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->isSupported()Z\nLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;-><clinit>()V\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;-><clinit>()V\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;-><init>(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;-><init>(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->clean(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->clean(Ljava/util/List;Ljava/lang/String;)Ljava/util/List;\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->hashCode()I\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->hashCode()I\nLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->buildIfSupported(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner;\nPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->buildIfSupported(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner;\nLokhttp3/internal/platform/android/AndroidLog;\nHSPLokhttp3/internal/platform/android/AndroidLog;-><clinit>()V\nPLokhttp3/internal/platform/android/AndroidLog;-><clinit>()V\nHSPLokhttp3/internal/platform/android/AndroidLog;-><init>()V\nPLokhttp3/internal/platform/android/AndroidLog;-><init>()V\nHSPLokhttp3/internal/platform/android/AndroidLog;->androidLog$okhttp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V\nPLokhttp3/internal/platform/android/AndroidLog;->androidLog$okhttp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V\nHSPLokhttp3/internal/platform/android/AndroidLog;->enable()V\nPLokhttp3/internal/platform/android/AndroidLog;->enable()V\nLokhttp3/internal/platform/android/AndroidLogHandler;\nHSPLokhttp3/internal/platform/android/AndroidLogHandler;-><clinit>()V\nPLokhttp3/internal/platform/android/AndroidLogHandler;-><clinit>()V\nHSPLokhttp3/internal/platform/android/AndroidLogHandler;-><init>()V\nPLokhttp3/internal/platform/android/AndroidLogHandler;-><init>()V\nHSPLokhttp3/internal/platform/android/AndroidLogHandler;->publish(Ljava/util/logging/LogRecord;)V\nPLokhttp3/internal/platform/android/AndroidLogHandler;->publish(Ljava/util/logging/LogRecord;)V\nLokhttp3/internal/platform/android/AndroidLogKt;\nHSPLokhttp3/internal/platform/android/AndroidLogKt;->access$getAndroidLevel(Ljava/util/logging/LogRecord;)I\nPLokhttp3/internal/platform/android/AndroidLogKt;->access$getAndroidLevel(Ljava/util/logging/LogRecord;)I\nLokhttp3/internal/platform/android/AndroidSocketAdapter;\nHSPLokhttp3/internal/platform/android/AndroidSocketAdapter;-><clinit>()V\nPLokhttp3/internal/platform/android/AndroidSocketAdapter;-><clinit>()V\nHSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->access$getPlayProviderFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nPLokhttp3/internal/platform/android/AndroidSocketAdapter;->access$getPlayProviderFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;\nHSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->factory(Ljava/lang/String;)Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->factory(Ljava/lang/String;)Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;\nHSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;-><init>(Ljava/lang/String;)V\nPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;-><init>(Ljava/lang/String;)V\nLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;\nHSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;-><clinit>()V\nPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;-><clinit>()V\nHSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;\nHSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;\nHSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;-><init>()V\nPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;-><init>()V\nLokhttp3/internal/platform/android/ConscryptSocketAdapter;\nHSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;-><clinit>()V\nPLokhttp3/internal/platform/android/ConscryptSocketAdapter;-><clinit>()V\nHSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;\nHSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;\nHSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;-><init>()V\nPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;-><init>()V\nLokhttp3/internal/platform/android/DeferredSocketAdapter;\nHSPLokhttp3/internal/platform/android/DeferredSocketAdapter;-><init>(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V\nPLokhttp3/internal/platform/android/DeferredSocketAdapter;-><init>(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V\nHSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z\nPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z\nLokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;\nLokhttp3/internal/platform/android/SocketAdapter;\nLokhttp3/internal/tls/CertificateChainCleaner;\nHSPLokhttp3/internal/tls/CertificateChainCleaner;-><clinit>()V\nPLokhttp3/internal/tls/CertificateChainCleaner;-><clinit>()V\nHSPLokhttp3/internal/tls/CertificateChainCleaner;-><init>()V\nPLokhttp3/internal/tls/CertificateChainCleaner;-><init>()V\nLokhttp3/internal/tls/CertificateChainCleaner$Companion;\nHSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/internal/tls/CertificateChainCleaner$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->get(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner;\nPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->get(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner;\nLokhttp3/internal/tls/OkHostnameVerifier;\nHSPLokhttp3/internal/tls/OkHostnameVerifier;-><clinit>()V\nPLokhttp3/internal/tls/OkHostnameVerifier;-><clinit>()V\nHSPLokhttp3/internal/tls/OkHostnameVerifier;-><init>()V\nPLokhttp3/internal/tls/OkHostnameVerifier;-><init>()V\nHSPLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List;\nPLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List;\nHSPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z\nPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z\nHSPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z\nPLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z\nLokhttp3/logging/HttpLoggingInterceptor;\nHSPLokhttp3/logging/HttpLoggingInterceptor;-><init>(Lokhttp3/logging/HttpLoggingInterceptor$Logger;)V\nPLokhttp3/logging/HttpLoggingInterceptor;-><init>(Lokhttp3/logging/HttpLoggingInterceptor$Logger;)V\nHSPLokhttp3/logging/HttpLoggingInterceptor;-><init>(Lokhttp3/logging/HttpLoggingInterceptor$Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokhttp3/logging/HttpLoggingInterceptor;-><init>(Lokhttp3/logging/HttpLoggingInterceptor$Logger;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokhttp3/logging/HttpLoggingInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nPLokhttp3/logging/HttpLoggingInterceptor;->intercept(Lokhttp3/Interceptor$Chain;)Lokhttp3/Response;\nHSPLokhttp3/logging/HttpLoggingInterceptor;->level(Lokhttp3/logging/HttpLoggingInterceptor$Level;)V\nPLokhttp3/logging/HttpLoggingInterceptor;->level(Lokhttp3/logging/HttpLoggingInterceptor$Level;)V\nHSPLokhttp3/logging/HttpLoggingInterceptor;->logHeader(Lokhttp3/Headers;I)V\nPLokhttp3/logging/HttpLoggingInterceptor;->logHeader(Lokhttp3/Headers;I)V\nLokhttp3/logging/HttpLoggingInterceptor$Level;\nHSPLokhttp3/logging/HttpLoggingInterceptor$Level;-><clinit>()V\nPLokhttp3/logging/HttpLoggingInterceptor$Level;-><clinit>()V\nHSPLokhttp3/logging/HttpLoggingInterceptor$Level;-><init>(Ljava/lang/String;I)V\nPLokhttp3/logging/HttpLoggingInterceptor$Level;-><init>(Ljava/lang/String;I)V\nLokhttp3/logging/HttpLoggingInterceptor$Logger;\nHSPLokhttp3/logging/HttpLoggingInterceptor$Logger;-><clinit>()V\nPLokhttp3/logging/HttpLoggingInterceptor$Logger;-><clinit>()V\nLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;\nHSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;-><clinit>()V\nPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;-><clinit>()V\nHSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;-><init>()V\nPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion;-><init>()V\nLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;\nHSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;-><init>()V\nPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;-><init>()V\nHSPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;->log(Ljava/lang/String;)V\nPLokhttp3/logging/HttpLoggingInterceptor$Logger$Companion$DefaultLogger;->log(Ljava/lang/String;)V\nLokio/-Base64;\nHSPLokio/-Base64;-><clinit>()V\nPLokio/-Base64;-><clinit>()V\nHSPLokio/-Base64;->encodeBase64$default([B[BILjava/lang/Object;)Ljava/lang/String;\nPLokio/-Base64;->encodeBase64$default([B[BILjava/lang/Object;)Ljava/lang/String;\nHSPLokio/-Base64;->encodeBase64([B[B)Ljava/lang/String;\nPLokio/-Base64;->encodeBase64([B[B)Ljava/lang/String;\nLokio/-SegmentedByteString;\nHSPLokio/-SegmentedByteString;-><clinit>()V\nPLokio/-SegmentedByteString;-><clinit>()V\nHSPLokio/-SegmentedByteString;->arrayRangeEquals([BI[BII)Z\nHPLokio/-SegmentedByteString;->arrayRangeEquals([BI[BII)Z\nHSPLokio/-SegmentedByteString;->checkOffsetAndCount(JJJ)V\nHPLokio/-SegmentedByteString;->checkOffsetAndCount(JJJ)V\nHSPLokio/-SegmentedByteString;->getDEFAULT__ByteString_size()I\nPLokio/-SegmentedByteString;->getDEFAULT__ByteString_size()I\nHSPLokio/-SegmentedByteString;->resolveDefaultParameter(Lokio/ByteString;I)I\nPLokio/-SegmentedByteString;->resolveDefaultParameter(Lokio/ByteString;I)I\nHSPLokio/-SegmentedByteString;->resolveDefaultParameter([BI)I\nPLokio/-SegmentedByteString;->resolveDefaultParameter([BI)I\nHSPLokio/-SegmentedByteString;->reverseBytes(I)I\nPLokio/-SegmentedByteString;->reverseBytes(I)I\nLokio/AsyncTimeout;\nHSPLokio/AsyncTimeout;-><clinit>()V\nPLokio/AsyncTimeout;-><clinit>()V\nHSPLokio/AsyncTimeout;-><init>()V\nPLokio/AsyncTimeout;-><init>()V\nHSPLokio/AsyncTimeout;->access$getCondition$cp()Ljava/util/concurrent/locks/Condition;\nPLokio/AsyncTimeout;->access$getCondition$cp()Ljava/util/concurrent/locks/Condition;\nHSPLokio/AsyncTimeout;->access$getHead$cp()Lokio/AsyncTimeout;\nPLokio/AsyncTimeout;->access$getHead$cp()Lokio/AsyncTimeout;\nHSPLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_MILLIS$cp()J\nPLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_MILLIS$cp()J\nHSPLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_NANOS$cp()J\nPLokio/AsyncTimeout;->access$getIDLE_TIMEOUT_NANOS$cp()J\nHSPLokio/AsyncTimeout;->access$getInQueue$p(Lokio/AsyncTimeout;)Z\nPLokio/AsyncTimeout;->access$getInQueue$p(Lokio/AsyncTimeout;)Z\nHSPLokio/AsyncTimeout;->access$getLock$cp()Ljava/util/concurrent/locks/ReentrantLock;\nPLokio/AsyncTimeout;->access$getLock$cp()Ljava/util/concurrent/locks/ReentrantLock;\nHSPLokio/AsyncTimeout;->access$getNext$p(Lokio/AsyncTimeout;)Lokio/AsyncTimeout;\nPLokio/AsyncTimeout;->access$getNext$p(Lokio/AsyncTimeout;)Lokio/AsyncTimeout;\nHSPLokio/AsyncTimeout;->access$remainingNanos(Lokio/AsyncTimeout;J)J\nPLokio/AsyncTimeout;->access$remainingNanos(Lokio/AsyncTimeout;J)J\nHSPLokio/AsyncTimeout;->access$setHead$cp(Lokio/AsyncTimeout;)V\nPLokio/AsyncTimeout;->access$setHead$cp(Lokio/AsyncTimeout;)V\nHSPLokio/AsyncTimeout;->access$setInQueue$p(Lokio/AsyncTimeout;Z)V\nPLokio/AsyncTimeout;->access$setInQueue$p(Lokio/AsyncTimeout;Z)V\nHSPLokio/AsyncTimeout;->access$setNext$p(Lokio/AsyncTimeout;Lokio/AsyncTimeout;)V\nPLokio/AsyncTimeout;->access$setNext$p(Lokio/AsyncTimeout;Lokio/AsyncTimeout;)V\nHSPLokio/AsyncTimeout;->access$setTimeoutAt$p(Lokio/AsyncTimeout;J)V\nPLokio/AsyncTimeout;->access$setTimeoutAt$p(Lokio/AsyncTimeout;J)V\nHSPLokio/AsyncTimeout;->enter()V\nPLokio/AsyncTimeout;->enter()V\nHSPLokio/AsyncTimeout;->exit()Z\nPLokio/AsyncTimeout;->exit()Z\nHSPLokio/AsyncTimeout;->sink(Lokio/Sink;)Lokio/Sink;\nPLokio/AsyncTimeout;->sink(Lokio/Sink;)Lokio/Sink;\nHSPLokio/AsyncTimeout;->source(Lokio/Source;)Lokio/Source;\nPLokio/AsyncTimeout;->source(Lokio/Source;)Lokio/Source;\nLokio/AsyncTimeout$Companion;\nHSPLokio/AsyncTimeout$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/AsyncTimeout$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokio/AsyncTimeout$Companion;->access$cancelScheduledTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;)Z\nPLokio/AsyncTimeout$Companion;->access$cancelScheduledTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;)Z\nHSPLokio/AsyncTimeout$Companion;->access$scheduleTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;JZ)V\nPLokio/AsyncTimeout$Companion;->access$scheduleTimeout(Lokio/AsyncTimeout$Companion;Lokio/AsyncTimeout;JZ)V\nHSPLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout;\nPLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout;\nLokio/AsyncTimeout$Watchdog;\nHSPLokio/AsyncTimeout$Watchdog;-><init>()V\nPLokio/AsyncTimeout$Watchdog;-><init>()V\nHSPLokio/AsyncTimeout$Watchdog;->run()V\nPLokio/AsyncTimeout$Watchdog;->run()V\nLokio/AsyncTimeout$sink$1;\nHSPLokio/AsyncTimeout$sink$1;-><init>(Lokio/AsyncTimeout;Lokio/Sink;)V\nPLokio/AsyncTimeout$sink$1;-><init>(Lokio/AsyncTimeout;Lokio/Sink;)V\nHSPLokio/AsyncTimeout$sink$1;->flush()V\nPLokio/AsyncTimeout$sink$1;->flush()V\nHSPLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V\nPLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V\nLokio/AsyncTimeout$source$1;\nHSPLokio/AsyncTimeout$source$1;-><init>(Lokio/AsyncTimeout;Lokio/Source;)V\nPLokio/AsyncTimeout$source$1;-><init>(Lokio/AsyncTimeout;Lokio/Source;)V\nHSPLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J\nPLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J\nLokio/Buffer;\nHSPLokio/Buffer;-><init>()V\nPLokio/Buffer;-><init>()V\nHSPLokio/Buffer;->clear()V\nPLokio/Buffer;->clear()V\nHSPLokio/Buffer;->completeSegmentByteCount()J\nPLokio/Buffer;->completeSegmentByteCount()J\nHSPLokio/Buffer;->copyTo(Lokio/Buffer;JJ)Lokio/Buffer;\nPLokio/Buffer;->copyTo(Lokio/Buffer;JJ)Lokio/Buffer;\nHSPLokio/Buffer;->exhausted()Z\nHPLokio/Buffer;->exhausted()Z\nHSPLokio/Buffer;->getByte(J)B\nHPLokio/Buffer;->getByte(J)B\nHSPLokio/Buffer;->indexOfElement(Lokio/ByteString;)J\nPLokio/Buffer;->indexOfElement(Lokio/ByteString;)J\nHSPLokio/Buffer;->indexOfElement(Lokio/ByteString;J)J\nPLokio/Buffer;->indexOfElement(Lokio/ByteString;J)J\nHSPLokio/Buffer;->rangeEquals(JLokio/ByteString;)Z\nPLokio/Buffer;->rangeEquals(JLokio/ByteString;)Z\nHSPLokio/Buffer;->rangeEquals(JLokio/ByteString;II)Z\nPLokio/Buffer;->rangeEquals(JLokio/ByteString;II)Z\nHSPLokio/Buffer;->read(Lokio/Buffer;J)J\nPLokio/Buffer;->read(Lokio/Buffer;J)J\nHSPLokio/Buffer;->read([BII)I\nPLokio/Buffer;->read([BII)I\nHSPLokio/Buffer;->readByte()B\nPLokio/Buffer;->readByte()B\nHSPLokio/Buffer;->readByteArray(J)[B\nPLokio/Buffer;->readByteArray(J)[B\nHSPLokio/Buffer;->readByteString()Lokio/ByteString;\nPLokio/Buffer;->readByteString()Lokio/ByteString;\nHSPLokio/Buffer;->readByteString(J)Lokio/ByteString;\nPLokio/Buffer;->readByteString(J)Lokio/ByteString;\nHSPLokio/Buffer;->readFully([B)V\nPLokio/Buffer;->readFully([B)V\nHSPLokio/Buffer;->readInt()I\nPLokio/Buffer;->readInt()I\nHSPLokio/Buffer;->readIntLe()I\nPLokio/Buffer;->readIntLe()I\nHSPLokio/Buffer;->readShort()S\nPLokio/Buffer;->readShort()S\nHSPLokio/Buffer;->readUtf8CodePoint()I\nHPLokio/Buffer;->readUtf8CodePoint()I\nHSPLokio/Buffer;->setSize$okio(J)V\nPLokio/Buffer;->setSize$okio(J)V\nHSPLokio/Buffer;->size()J\nHPLokio/Buffer;->size()J\nHSPLokio/Buffer;->skip(J)V\nHPLokio/Buffer;->skip(J)V\nHSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment;\nHPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment;\nHSPLokio/Buffer;->write(Lokio/Buffer;J)V\nHPLokio/Buffer;->write(Lokio/Buffer;J)V\nHSPLokio/Buffer;->write(Lokio/ByteString;)Lokio/Buffer;\nPLokio/Buffer;->write(Lokio/ByteString;)Lokio/Buffer;\nHSPLokio/Buffer;->write([B)Lokio/Buffer;\nPLokio/Buffer;->write([B)Lokio/Buffer;\nHSPLokio/Buffer;->write([BII)Lokio/Buffer;\nPLokio/Buffer;->write([BII)Lokio/Buffer;\nHSPLokio/Buffer;->writeAll(Lokio/Source;)J\nPLokio/Buffer;->writeAll(Lokio/Source;)J\nHSPLokio/Buffer;->writeByte(I)Lokio/Buffer;\nPLokio/Buffer;->writeByte(I)Lokio/Buffer;\nHSPLokio/Buffer;->writeByte(I)Lokio/BufferedSink;\nPLokio/Buffer;->writeByte(I)Lokio/BufferedSink;\nHSPLokio/Buffer;->writeDecimalLong(J)Lokio/Buffer;\nPLokio/Buffer;->writeDecimalLong(J)Lokio/Buffer;\nHSPLokio/Buffer;->writeInt(I)Lokio/Buffer;\nPLokio/Buffer;->writeInt(I)Lokio/Buffer;\nHSPLokio/Buffer;->writeShort(I)Lokio/Buffer;\nPLokio/Buffer;->writeShort(I)Lokio/Buffer;\nHSPLokio/Buffer;->writeUtf8(Ljava/lang/String;)Lokio/Buffer;\nPLokio/Buffer;->writeUtf8(Ljava/lang/String;)Lokio/Buffer;\nHSPLokio/Buffer;->writeUtf8(Ljava/lang/String;II)Lokio/Buffer;\nHPLokio/Buffer;->writeUtf8(Ljava/lang/String;II)Lokio/Buffer;\nLokio/Buffer$UnsafeCursor;\nHSPLokio/Buffer$UnsafeCursor;-><init>()V\nPLokio/Buffer$UnsafeCursor;-><init>()V\nLokio/BufferedSink;\nLokio/BufferedSource;\nLokio/ByteString;\nHSPLokio/ByteString;-><clinit>()V\nPLokio/ByteString;-><clinit>()V\nHSPLokio/ByteString;-><init>([B)V\nHPLokio/ByteString;-><init>([B)V\nHSPLokio/ByteString;->base64()Ljava/lang/String;\nPLokio/ByteString;->base64()Ljava/lang/String;\nHSPLokio/ByteString;->compareTo(Ljava/lang/Object;)I\nPLokio/ByteString;->compareTo(Ljava/lang/Object;)I\nHSPLokio/ByteString;->compareTo(Lokio/ByteString;)I\nPLokio/ByteString;->compareTo(Lokio/ByteString;)I\nHSPLokio/ByteString;->digest$okio(Ljava/lang/String;)Lokio/ByteString;\nPLokio/ByteString;->digest$okio(Ljava/lang/String;)Lokio/ByteString;\nHSPLokio/ByteString;->endsWith(Lokio/ByteString;)Z\nPLokio/ByteString;->endsWith(Lokio/ByteString;)Z\nHSPLokio/ByteString;->equals(Ljava/lang/Object;)Z\nPLokio/ByteString;->equals(Ljava/lang/Object;)Z\nHSPLokio/ByteString;->getByte(I)B\nPLokio/ByteString;->getByte(I)B\nHSPLokio/ByteString;->getData$okio()[B\nPLokio/ByteString;->getData$okio()[B\nHSPLokio/ByteString;->getHashCode$okio()I\nPLokio/ByteString;->getHashCode$okio()I\nHSPLokio/ByteString;->getSize$okio()I\nPLokio/ByteString;->getSize$okio()I\nHSPLokio/ByteString;->getUtf8$okio()Ljava/lang/String;\nPLokio/ByteString;->getUtf8$okio()Ljava/lang/String;\nHSPLokio/ByteString;->hashCode()I\nPLokio/ByteString;->hashCode()I\nHSPLokio/ByteString;->hex()Ljava/lang/String;\nPLokio/ByteString;->hex()Ljava/lang/String;\nHSPLokio/ByteString;->indexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I\nPLokio/ByteString;->indexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I\nHSPLokio/ByteString;->indexOf(Lokio/ByteString;I)I\nPLokio/ByteString;->indexOf(Lokio/ByteString;I)I\nHSPLokio/ByteString;->indexOf([BI)I\nPLokio/ByteString;->indexOf([BI)I\nHSPLokio/ByteString;->internalArray$okio()[B\nPLokio/ByteString;->internalArray$okio()[B\nHSPLokio/ByteString;->internalGet$okio(I)B\nPLokio/ByteString;->internalGet$okio(I)B\nHSPLokio/ByteString;->lastIndexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I\nPLokio/ByteString;->lastIndexOf$default(Lokio/ByteString;Lokio/ByteString;IILjava/lang/Object;)I\nHSPLokio/ByteString;->lastIndexOf(Lokio/ByteString;I)I\nPLokio/ByteString;->lastIndexOf(Lokio/ByteString;I)I\nHSPLokio/ByteString;->lastIndexOf([BI)I\nPLokio/ByteString;->lastIndexOf([BI)I\nHSPLokio/ByteString;->md5()Lokio/ByteString;\nPLokio/ByteString;->md5()Lokio/ByteString;\nHSPLokio/ByteString;->rangeEquals(ILokio/ByteString;II)Z\nPLokio/ByteString;->rangeEquals(ILokio/ByteString;II)Z\nHSPLokio/ByteString;->rangeEquals(I[BII)Z\nPLokio/ByteString;->rangeEquals(I[BII)Z\nHSPLokio/ByteString;->setHashCode$okio(I)V\nPLokio/ByteString;->setHashCode$okio(I)V\nHSPLokio/ByteString;->setUtf8$okio(Ljava/lang/String;)V\nPLokio/ByteString;->setUtf8$okio(Ljava/lang/String;)V\nHSPLokio/ByteString;->size()I\nPLokio/ByteString;->size()I\nHSPLokio/ByteString;->startsWith(Lokio/ByteString;)Z\nPLokio/ByteString;->startsWith(Lokio/ByteString;)Z\nHSPLokio/ByteString;->substring$default(Lokio/ByteString;IIILjava/lang/Object;)Lokio/ByteString;\nPLokio/ByteString;->substring$default(Lokio/ByteString;IIILjava/lang/Object;)Lokio/ByteString;\nHSPLokio/ByteString;->substring(II)Lokio/ByteString;\nPLokio/ByteString;->substring(II)Lokio/ByteString;\nHSPLokio/ByteString;->toAsciiLowercase()Lokio/ByteString;\nPLokio/ByteString;->toAsciiLowercase()Lokio/ByteString;\nHSPLokio/ByteString;->utf8()Ljava/lang/String;\nPLokio/ByteString;->utf8()Ljava/lang/String;\nHSPLokio/ByteString;->write$okio(Lokio/Buffer;II)V\nPLokio/ByteString;->write$okio(Lokio/Buffer;II)V\nLokio/ByteString$Companion;\nHSPLokio/ByteString$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/ByteString$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString;\nPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString;\nHSPLokio/ByteString$Companion;->encodeUtf8(Ljava/lang/String;)Lokio/ByteString;\nPLokio/ByteString$Companion;->encodeUtf8(Ljava/lang/String;)Lokio/ByteString;\nHSPLokio/ByteString$Companion;->of$default(Lokio/ByteString$Companion;[BIIILjava/lang/Object;)Lokio/ByteString;\nPLokio/ByteString$Companion;->of$default(Lokio/ByteString$Companion;[BIIILjava/lang/Object;)Lokio/ByteString;\nHSPLokio/ByteString$Companion;->of([BII)Lokio/ByteString;\nPLokio/ByteString$Companion;->of([BII)Lokio/ByteString;\nLokio/FileMetadata;\nHSPLokio/FileMetadata;-><init>(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;)V\nPLokio/FileMetadata;-><init>(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;)V\nHSPLokio/FileMetadata;-><init>(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/FileMetadata;-><init>(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokio/FileMetadata;->getSize()Ljava/lang/Long;\nPLokio/FileMetadata;->getSize()Ljava/lang/Long;\nHSPLokio/FileMetadata;->getSymlinkTarget()Lokio/Path;\nPLokio/FileMetadata;->getSymlinkTarget()Lokio/Path;\nLokio/FileSystem;\nHSPLokio/FileSystem;-><clinit>()V\nPLokio/FileSystem;-><clinit>()V\nHSPLokio/FileSystem;-><init>()V\nPLokio/FileSystem;-><init>()V\nHSPLokio/FileSystem;->appendingSink(Lokio/Path;)Lokio/Sink;\nPLokio/FileSystem;->appendingSink(Lokio/Path;)Lokio/Sink;\nHSPLokio/FileSystem;->createDirectories(Lokio/Path;)V\nPLokio/FileSystem;->createDirectories(Lokio/Path;)V\nHSPLokio/FileSystem;->createDirectories(Lokio/Path;Z)V\nPLokio/FileSystem;->createDirectories(Lokio/Path;Z)V\nHSPLokio/FileSystem;->createDirectory(Lokio/Path;)V\nPLokio/FileSystem;->createDirectory(Lokio/Path;)V\nHSPLokio/FileSystem;->delete(Lokio/Path;)V\nPLokio/FileSystem;->delete(Lokio/Path;)V\nHSPLokio/FileSystem;->exists(Lokio/Path;)Z\nPLokio/FileSystem;->exists(Lokio/Path;)Z\nHSPLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata;\nPLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata;\nHSPLokio/FileSystem;->sink(Lokio/Path;)Lokio/Sink;\nPLokio/FileSystem;->sink(Lokio/Path;)Lokio/Sink;\nLokio/FileSystem$Companion;\nHSPLokio/FileSystem$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/FileSystem$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokio/ForwardingFileSystem;\nHSPLokio/ForwardingFileSystem;-><init>(Lokio/FileSystem;)V\nPLokio/ForwardingFileSystem;-><init>(Lokio/FileSystem;)V\nHSPLokio/ForwardingFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink;\nPLokio/ForwardingFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink;\nHSPLokio/ForwardingFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V\nPLokio/ForwardingFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V\nHSPLokio/ForwardingFileSystem;->createDirectory(Lokio/Path;Z)V\nPLokio/ForwardingFileSystem;->createDirectory(Lokio/Path;Z)V\nHSPLokio/ForwardingFileSystem;->delete(Lokio/Path;Z)V\nPLokio/ForwardingFileSystem;->delete(Lokio/Path;Z)V\nHSPLokio/ForwardingFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata;\nPLokio/ForwardingFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata;\nHSPLokio/ForwardingFileSystem;->onPathParameter(Lokio/Path;Ljava/lang/String;Ljava/lang/String;)Lokio/Path;\nPLokio/ForwardingFileSystem;->onPathParameter(Lokio/Path;Ljava/lang/String;Ljava/lang/String;)Lokio/Path;\nHSPLokio/ForwardingFileSystem;->sink(Lokio/Path;Z)Lokio/Sink;\nPLokio/ForwardingFileSystem;->sink(Lokio/Path;Z)Lokio/Sink;\nLokio/ForwardingSink;\nHSPLokio/ForwardingSink;-><init>(Lokio/Sink;)V\nPLokio/ForwardingSink;-><init>(Lokio/Sink;)V\nHSPLokio/ForwardingSink;->close()V\nPLokio/ForwardingSink;->close()V\nHSPLokio/ForwardingSink;->flush()V\nPLokio/ForwardingSink;->flush()V\nHSPLokio/ForwardingSink;->write(Lokio/Buffer;J)V\nPLokio/ForwardingSink;->write(Lokio/Buffer;J)V\nLokio/ForwardingSource;\nHSPLokio/ForwardingSource;-><init>(Lokio/Source;)V\nPLokio/ForwardingSource;-><init>(Lokio/Source;)V\nHSPLokio/ForwardingSource;->close()V\nPLokio/ForwardingSource;->close()V\nHSPLokio/ForwardingSource;->delegate()Lokio/Source;\nPLokio/ForwardingSource;->delegate()Lokio/Source;\nLokio/GzipSource;\nHSPLokio/GzipSource;-><init>(Lokio/Source;)V\nPLokio/GzipSource;-><init>(Lokio/Source;)V\nHSPLokio/GzipSource;->checkEqual(IILjava/lang/String;)V\nPLokio/GzipSource;->checkEqual(IILjava/lang/String;)V\nHSPLokio/GzipSource;->close()V\nPLokio/GzipSource;->close()V\nHSPLokio/GzipSource;->read(Lokio/Buffer;J)J\nPLokio/GzipSource;->read(Lokio/Buffer;J)J\nHSPLokio/GzipSource;->updateCrc(JLokio/Buffer;J)V\nPLokio/GzipSource;->updateCrc(JLokio/Buffer;J)V\nLokio/InflaterSource;\nHSPLokio/InflaterSource;-><init>(Lokio/BufferedSource;Ljava/util/zip/Inflater;)V\nPLokio/InflaterSource;-><init>(Lokio/BufferedSource;Ljava/util/zip/Inflater;)V\nHSPLokio/InflaterSource;->close()V\nPLokio/InflaterSource;->close()V\nHSPLokio/InflaterSource;->read(Lokio/Buffer;J)J\nPLokio/InflaterSource;->read(Lokio/Buffer;J)J\nHSPLokio/InflaterSource;->readOrInflate(Lokio/Buffer;J)J\nPLokio/InflaterSource;->readOrInflate(Lokio/Buffer;J)J\nHSPLokio/InflaterSource;->refill()Z\nPLokio/InflaterSource;->refill()Z\nLokio/InputStreamSource;\nHSPLokio/InputStreamSource;-><init>(Ljava/io/InputStream;Lokio/Timeout;)V\nPLokio/InputStreamSource;-><init>(Ljava/io/InputStream;Lokio/Timeout;)V\nHSPLokio/InputStreamSource;->read(Lokio/Buffer;J)J\nPLokio/InputStreamSource;->read(Lokio/Buffer;J)J\nLokio/JvmSystemFileSystem;\nHSPLokio/JvmSystemFileSystem;-><init>()V\nPLokio/JvmSystemFileSystem;-><init>()V\nHSPLokio/JvmSystemFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink;\nPLokio/JvmSystemFileSystem;->appendingSink(Lokio/Path;Z)Lokio/Sink;\nHSPLokio/JvmSystemFileSystem;->createDirectory(Lokio/Path;Z)V\nPLokio/JvmSystemFileSystem;->createDirectory(Lokio/Path;Z)V\nHSPLokio/JvmSystemFileSystem;->delete(Lokio/Path;Z)V\nPLokio/JvmSystemFileSystem;->delete(Lokio/Path;Z)V\nHSPLokio/JvmSystemFileSystem;->sink(Lokio/Path;Z)Lokio/Sink;\nPLokio/JvmSystemFileSystem;->sink(Lokio/Path;Z)Lokio/Sink;\nLokio/JvmSystemFileSystem$$ExternalSyntheticOutline0;\nHSPLokio/JvmSystemFileSystem$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nPLokio/JvmSystemFileSystem$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Lcafe/adriel/voyager/core/concurrent/ThreadSafeMap;\nLokio/NioSystemFileSystem;\nHSPLokio/NioSystemFileSystem;-><init>()V\nPLokio/NioSystemFileSystem;-><init>()V\nHSPLokio/NioSystemFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V\nPLokio/NioSystemFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V\nHSPLokio/NioSystemFileSystem;->metadataOrNull(Ljava/nio/file/Path;)Lokio/FileMetadata;\nPLokio/NioSystemFileSystem;->metadataOrNull(Ljava/nio/file/Path;)Lokio/FileMetadata;\nHSPLokio/NioSystemFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata;\nPLokio/NioSystemFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata;\nHSPLokio/NioSystemFileSystem;->zeroToNull(Ljava/nio/file/attribute/FileTime;)Ljava/lang/Long;\nPLokio/NioSystemFileSystem;->zeroToNull(Ljava/nio/file/attribute/FileTime;)Ljava/lang/Long;\nLokio/Okio;\nHSPLokio/Okio;->buffer(Lokio/Sink;)Lokio/BufferedSink;\nPLokio/Okio;->buffer(Lokio/Sink;)Lokio/BufferedSink;\nHSPLokio/Okio;->buffer(Lokio/Source;)Lokio/BufferedSource;\nPLokio/Okio;->buffer(Lokio/Source;)Lokio/BufferedSource;\nHSPLokio/Okio;->sink(Ljava/net/Socket;)Lokio/Sink;\nPLokio/Okio;->sink(Ljava/net/Socket;)Lokio/Sink;\nHSPLokio/Okio;->source(Ljava/net/Socket;)Lokio/Source;\nPLokio/Okio;->source(Ljava/net/Socket;)Lokio/Source;\nLokio/Okio__JvmOkioKt;\nHSPLokio/Okio__JvmOkioKt;-><clinit>()V\nPLokio/Okio__JvmOkioKt;-><clinit>()V\nHSPLokio/Okio__JvmOkioKt;->sink$default(Ljava/io/File;ZILjava/lang/Object;)Lokio/Sink;\nPLokio/Okio__JvmOkioKt;->sink$default(Ljava/io/File;ZILjava/lang/Object;)Lokio/Sink;\nHSPLokio/Okio__JvmOkioKt;->sink(Ljava/io/File;Z)Lokio/Sink;\nPLokio/Okio__JvmOkioKt;->sink(Ljava/io/File;Z)Lokio/Sink;\nHSPLokio/Okio__JvmOkioKt;->sink(Ljava/io/OutputStream;)Lokio/Sink;\nPLokio/Okio__JvmOkioKt;->sink(Ljava/io/OutputStream;)Lokio/Sink;\nHSPLokio/Okio__JvmOkioKt;->sink(Ljava/net/Socket;)Lokio/Sink;\nPLokio/Okio__JvmOkioKt;->sink(Ljava/net/Socket;)Lokio/Sink;\nHSPLokio/Okio__JvmOkioKt;->source(Ljava/net/Socket;)Lokio/Source;\nPLokio/Okio__JvmOkioKt;->source(Ljava/net/Socket;)Lokio/Source;\nLokio/Okio__OkioKt;\nHSPLokio/Okio__OkioKt;->buffer(Lokio/Sink;)Lokio/BufferedSink;\nPLokio/Okio__OkioKt;->buffer(Lokio/Sink;)Lokio/BufferedSink;\nHSPLokio/Okio__OkioKt;->buffer(Lokio/Source;)Lokio/BufferedSource;\nPLokio/Okio__OkioKt;->buffer(Lokio/Source;)Lokio/BufferedSource;\nLokio/Options;\nHSPLokio/Options;-><clinit>()V\nPLokio/Options;-><clinit>()V\nHSPLokio/Options;-><init>([Lokio/ByteString;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/Options;-><init>([Lokio/ByteString;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokio/Options$Companion;\nHSPLokio/Options$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/Options$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/List;IILjava/util/List;)V\nPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/List;IILjava/util/List;)V\nHSPLokio/Options$Companion;->of([Lokio/ByteString;)Lokio/Options;\nPLokio/Options$Companion;->of([Lokio/ByteString;)Lokio/Options;\nLokio/OutputStreamSink;\nHSPLokio/OutputStreamSink;-><init>(Ljava/io/OutputStream;Lokio/Timeout;)V\nPLokio/OutputStreamSink;-><init>(Ljava/io/OutputStream;Lokio/Timeout;)V\nHSPLokio/OutputStreamSink;->close()V\nPLokio/OutputStreamSink;->close()V\nHSPLokio/OutputStreamSink;->flush()V\nPLokio/OutputStreamSink;->flush()V\nHSPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V\nPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V\nLokio/Path;\nHSPLokio/Path;-><clinit>()V\nPLokio/Path;-><clinit>()V\nHSPLokio/Path;-><init>(Lokio/ByteString;)V\nPLokio/Path;-><init>(Lokio/ByteString;)V\nHSPLokio/Path;->getBytes$okio()Lokio/ByteString;\nPLokio/Path;->getBytes$okio()Lokio/ByteString;\nHSPLokio/Path;->isAbsolute()Z\nPLokio/Path;->isAbsolute()Z\nHSPLokio/Path;->parent()Lokio/Path;\nPLokio/Path;->parent()Lokio/Path;\nHSPLokio/Path;->resolve(Ljava/lang/String;)Lokio/Path;\nPLokio/Path;->resolve(Ljava/lang/String;)Lokio/Path;\nHSPLokio/Path;->toFile()Ljava/io/File;\nPLokio/Path;->toFile()Ljava/io/File;\nHSPLokio/Path;->toNioPath()Ljava/nio/file/Path;\nPLokio/Path;->toNioPath()Ljava/nio/file/Path;\nHSPLokio/Path;->toString()Ljava/lang/String;\nPLokio/Path;->toString()Ljava/lang/String;\nHSPLokio/Path;->volumeLetter()Ljava/lang/Character;\nPLokio/Path;->volumeLetter()Ljava/lang/Character;\nLokio/Path$$ExternalSyntheticApiModelOutline0;\nHSPLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;\nPLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;\nHSPLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/nio/file/attribute/FileTime;)J\nPLokio/Path$$ExternalSyntheticApiModelOutline0;->m(Ljava/nio/file/attribute/FileTime;)J\nLokio/Path$Companion;\nHSPLokio/Path$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/Path$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nHSPLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/io/File;ZILjava/lang/Object;)Lokio/Path;\nPLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/io/File;ZILjava/lang/Object;)Lokio/Path;\nHSPLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/lang/String;ZILjava/lang/Object;)Lokio/Path;\nPLokio/Path$Companion;->get$default(Lokio/Path$Companion;Ljava/lang/String;ZILjava/lang/Object;)Lokio/Path;\nHSPLokio/Path$Companion;->get(Ljava/io/File;Z)Lokio/Path;\nPLokio/Path$Companion;->get(Ljava/io/File;Z)Lokio/Path;\nHSPLokio/Path$Companion;->get(Ljava/lang/String;Z)Lokio/Path;\nPLokio/Path$Companion;->get(Ljava/lang/String;Z)Lokio/Path;\nLokio/RealBufferedSink;\nHSPLokio/RealBufferedSink;-><init>(Lokio/Sink;)V\nPLokio/RealBufferedSink;-><init>(Lokio/Sink;)V\nHSPLokio/RealBufferedSink;->close()V\nPLokio/RealBufferedSink;->close()V\nHSPLokio/RealBufferedSink;->emitCompleteSegments()Lokio/BufferedSink;\nPLokio/RealBufferedSink;->emitCompleteSegments()Lokio/BufferedSink;\nHSPLokio/RealBufferedSink;->flush()V\nPLokio/RealBufferedSink;->flush()V\nHSPLokio/RealBufferedSink;->getBuffer()Lokio/Buffer;\nPLokio/RealBufferedSink;->getBuffer()Lokio/Buffer;\nHSPLokio/RealBufferedSink;->write(Lokio/Buffer;J)V\nPLokio/RealBufferedSink;->write(Lokio/Buffer;J)V\nHSPLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink;\nPLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink;\nHSPLokio/RealBufferedSink;->writeByte(I)Lokio/BufferedSink;\nPLokio/RealBufferedSink;->writeByte(I)Lokio/BufferedSink;\nHSPLokio/RealBufferedSink;->writeDecimalLong(J)Lokio/BufferedSink;\nPLokio/RealBufferedSink;->writeDecimalLong(J)Lokio/BufferedSink;\nHSPLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink;\nPLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink;\nHSPLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink;\nPLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink;\nHSPLokio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lokio/BufferedSink;\nPLokio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lokio/BufferedSink;\nLokio/RealBufferedSource;\nHSPLokio/RealBufferedSource;-><init>(Lokio/Source;)V\nPLokio/RealBufferedSource;-><init>(Lokio/Source;)V\nHSPLokio/RealBufferedSource;->close()V\nPLokio/RealBufferedSource;->close()V\nHSPLokio/RealBufferedSource;->exhausted()Z\nHPLokio/RealBufferedSource;->exhausted()Z\nHSPLokio/RealBufferedSource;->getBuffer()Lokio/Buffer;\nPLokio/RealBufferedSource;->getBuffer()Lokio/Buffer;\nHSPLokio/RealBufferedSource;->read(Lokio/Buffer;J)J\nPLokio/RealBufferedSource;->read(Lokio/Buffer;J)J\nHSPLokio/RealBufferedSource;->readByte()B\nPLokio/RealBufferedSource;->readByte()B\nHSPLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString;\nPLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString;\nHSPLokio/RealBufferedSource;->readInt()I\nPLokio/RealBufferedSource;->readInt()I\nHSPLokio/RealBufferedSource;->readIntLe()I\nPLokio/RealBufferedSource;->readIntLe()I\nHSPLokio/RealBufferedSource;->readShort()S\nPLokio/RealBufferedSource;->readShort()S\nHSPLokio/RealBufferedSource;->readUtf8CodePoint()I\nHPLokio/RealBufferedSource;->readUtf8CodePoint()I\nHSPLokio/RealBufferedSource;->request(J)Z\nHPLokio/RealBufferedSource;->request(J)Z\nHSPLokio/RealBufferedSource;->require(J)V\nHPLokio/RealBufferedSource;->require(J)V\nHSPLokio/RealBufferedSource;->skip(J)V\nPLokio/RealBufferedSource;->skip(J)V\nLokio/Segment;\nHSPLokio/Segment;-><clinit>()V\nPLokio/Segment;-><clinit>()V\nHSPLokio/Segment;-><init>()V\nPLokio/Segment;-><init>()V\nHSPLokio/Segment;-><init>([BIIZZ)V\nPLokio/Segment;-><init>([BIIZZ)V\nHSPLokio/Segment;->compact()V\nPLokio/Segment;->compact()V\nHSPLokio/Segment;->pop()Lokio/Segment;\nPLokio/Segment;->pop()Lokio/Segment;\nHSPLokio/Segment;->push(Lokio/Segment;)Lokio/Segment;\nPLokio/Segment;->push(Lokio/Segment;)Lokio/Segment;\nHSPLokio/Segment;->sharedCopy()Lokio/Segment;\nPLokio/Segment;->sharedCopy()Lokio/Segment;\nHSPLokio/Segment;->split(I)Lokio/Segment;\nPLokio/Segment;->split(I)Lokio/Segment;\nHSPLokio/Segment;->writeTo(Lokio/Segment;I)V\nPLokio/Segment;->writeTo(Lokio/Segment;I)V\nLokio/Segment$Companion;\nHSPLokio/Segment$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/Segment$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokio/SegmentPool;\nHSPLokio/SegmentPool;-><clinit>()V\nPLokio/SegmentPool;-><clinit>()V\nHSPLokio/SegmentPool;-><init>()V\nPLokio/SegmentPool;-><init>()V\nHSPLokio/SegmentPool;->firstRef()Ljava/util/concurrent/atomic/AtomicReference;\nHPLokio/SegmentPool;->firstRef()Ljava/util/concurrent/atomic/AtomicReference;\nHSPLokio/SegmentPool;->recycle(Lokio/Segment;)V\nHPLokio/SegmentPool;->recycle(Lokio/Segment;)V\nHSPLokio/SegmentPool;->take()Lokio/Segment;\nHPLokio/SegmentPool;->take()Lokio/Segment;\nLokio/Sink;\nLokio/SocketAsyncTimeout;\nHSPLokio/SocketAsyncTimeout;-><init>(Ljava/net/Socket;)V\nPLokio/SocketAsyncTimeout;-><init>(Ljava/net/Socket;)V\nLokio/Source;\nLokio/Timeout;\nHSPLokio/Timeout;-><clinit>()V\nPLokio/Timeout;-><clinit>()V\nHSPLokio/Timeout;-><init>()V\nPLokio/Timeout;-><init>()V\nHSPLokio/Timeout;->hasDeadline()Z\nPLokio/Timeout;->hasDeadline()Z\nHSPLokio/Timeout;->throwIfReached()V\nPLokio/Timeout;->throwIfReached()V\nHSPLokio/Timeout;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/Timeout;\nPLokio/Timeout;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/Timeout;\nHSPLokio/Timeout;->timeoutNanos()J\nPLokio/Timeout;->timeoutNanos()J\nLokio/Timeout$Companion;\nHSPLokio/Timeout$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/Timeout$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokio/Timeout$Companion$NONE$1;\nHSPLokio/Timeout$Companion$NONE$1;-><init>()V\nPLokio/Timeout$Companion$NONE$1;-><init>()V\nLokio/Utf8;\nHSPLokio/Utf8;->size$default(Ljava/lang/String;IIILjava/lang/Object;)J\nPLokio/Utf8;->size$default(Ljava/lang/String;IIILjava/lang/Object;)J\nHSPLokio/Utf8;->size(Ljava/lang/String;II)J\nPLokio/Utf8;->size(Ljava/lang/String;II)J\nLokio/_JvmPlatformKt;\nHSPLokio/_JvmPlatformKt;->asUtf8ToByteArray(Ljava/lang/String;)[B\nPLokio/_JvmPlatformKt;->asUtf8ToByteArray(Ljava/lang/String;)[B\nHSPLokio/_JvmPlatformKt;->toUtf8String([B)Ljava/lang/String;\nPLokio/_JvmPlatformKt;->toUtf8String([B)Ljava/lang/String;\nLokio/internal/-Buffer;\nHSPLokio/internal/-Buffer;-><clinit>()V\nPLokio/internal/-Buffer;-><clinit>()V\nHSPLokio/internal/-Buffer;->getHEX_DIGIT_BYTES()[B\nPLokio/internal/-Buffer;->getHEX_DIGIT_BYTES()[B\nLokio/internal/-ByteString;\nHSPLokio/internal/-ByteString;-><clinit>()V\nPLokio/internal/-ByteString;-><clinit>()V\nHSPLokio/internal/-ByteString;->access$decodeHexDigit(C)I\nPLokio/internal/-ByteString;->access$decodeHexDigit(C)I\nHSPLokio/internal/-ByteString;->commonWrite(Lokio/ByteString;Lokio/Buffer;II)V\nPLokio/internal/-ByteString;->commonWrite(Lokio/ByteString;Lokio/Buffer;II)V\nHSPLokio/internal/-ByteString;->getHEX_DIGIT_CHARS()[C\nPLokio/internal/-ByteString;->getHEX_DIGIT_CHARS()[C\nLokio/internal/-FileSystem;\nHSPLokio/internal/-FileSystem;->commonCreateDirectories(Lokio/FileSystem;Lokio/Path;Z)V\nPLokio/internal/-FileSystem;->commonCreateDirectories(Lokio/FileSystem;Lokio/Path;Z)V\nHSPLokio/internal/-FileSystem;->commonExists(Lokio/FileSystem;Lokio/Path;)Z\nPLokio/internal/-FileSystem;->commonExists(Lokio/FileSystem;Lokio/Path;)Z\nHSPLokio/internal/-FileSystem;->commonMetadata(Lokio/FileSystem;Lokio/Path;)Lokio/FileMetadata;\nPLokio/internal/-FileSystem;->commonMetadata(Lokio/FileSystem;Lokio/Path;)Lokio/FileMetadata;\nLokio/internal/-Path;\nHSPLokio/internal/-Path;-><clinit>()V\nPLokio/internal/-Path;-><clinit>()V\nHSPLokio/internal/-Path;->access$getBACKSLASH$p()Lokio/ByteString;\nPLokio/internal/-Path;->access$getBACKSLASH$p()Lokio/ByteString;\nHSPLokio/internal/-Path;->access$getDOT$p()Lokio/ByteString;\nPLokio/internal/-Path;->access$getDOT$p()Lokio/ByteString;\nHSPLokio/internal/-Path;->access$getIndexOfLastSlash(Lokio/Path;)I\nPLokio/internal/-Path;->access$getIndexOfLastSlash(Lokio/Path;)I\nHSPLokio/internal/-Path;->access$getSLASH$p()Lokio/ByteString;\nPLokio/internal/-Path;->access$getSLASH$p()Lokio/ByteString;\nHSPLokio/internal/-Path;->access$lastSegmentIsDotDot(Lokio/Path;)Z\nPLokio/internal/-Path;->access$lastSegmentIsDotDot(Lokio/Path;)Z\nHSPLokio/internal/-Path;->access$rootLength(Lokio/Path;)I\nPLokio/internal/-Path;->access$rootLength(Lokio/Path;)I\nHSPLokio/internal/-Path;->commonResolve(Lokio/Path;Lokio/Path;Z)Lokio/Path;\nPLokio/internal/-Path;->commonResolve(Lokio/Path;Lokio/Path;Z)Lokio/Path;\nHSPLokio/internal/-Path;->commonToPath(Ljava/lang/String;Z)Lokio/Path;\nPLokio/internal/-Path;->commonToPath(Ljava/lang/String;Z)Lokio/Path;\nHSPLokio/internal/-Path;->getSlash(Lokio/Path;)Lokio/ByteString;\nPLokio/internal/-Path;->getSlash(Lokio/Path;)Lokio/ByteString;\nHSPLokio/internal/-Path;->toPath(Lokio/Buffer;Z)Lokio/Path;\nPLokio/internal/-Path;->toPath(Lokio/Buffer;Z)Lokio/Path;\nHSPLokio/internal/-Path;->toSlash(B)Lokio/ByteString;\nPLokio/internal/-Path;->toSlash(B)Lokio/ByteString;\nHSPLokio/internal/-Path;->toSlash(Ljava/lang/String;)Lokio/ByteString;\nPLokio/internal/-Path;->toSlash(Ljava/lang/String;)Lokio/ByteString;\nLokio/internal/ResourceFileSystem;\nHSPLokio/internal/ResourceFileSystem;-><clinit>()V\nPLokio/internal/ResourceFileSystem;-><clinit>()V\nHSPLokio/internal/ResourceFileSystem;-><init>(Ljava/lang/ClassLoader;Z)V\nPLokio/internal/ResourceFileSystem;-><init>(Ljava/lang/ClassLoader;Z)V\nLokio/internal/ResourceFileSystem$Companion;\nHSPLokio/internal/ResourceFileSystem$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nPLokio/internal/ResourceFileSystem$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V\nLokio/internal/ResourceFileSystem$roots$2;\nHSPLokio/internal/ResourceFileSystem$roots$2;-><init>(Ljava/lang/ClassLoader;)V\nPLokio/internal/ResourceFileSystem$roots$2;-><init>(Ljava/lang/ClassLoader;)V\nLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;\nHSPLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nPLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;-><init>(ILjava/lang/Object;Ljava/lang/Object;)V\nHSPLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;->run()V\nPLorg/acra/builder/ReportExecutor$$ExternalSyntheticLambda0;->run()V\nLorg/acra/file/CrashReportPersister;\nHSPLorg/acra/file/CrashReportPersister;-><init>(I)V\nHPLorg/acra/file/CrashReportPersister;-><init>(I)V\nHSPLorg/acra/file/CrashReportPersister;->computeScaleFactor-H7hwNQA(JJ)J\nHPLorg/acra/file/CrashReportPersister;->computeScaleFactor-H7hwNQA(JJ)J\nHSPLorg/acra/file/CrashReportPersister;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;\nHPLorg/acra/file/CrashReportPersister;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/BrushKt;\nHSPLorg/acra/file/CrashReportPersister;->entityType-OLwlOKw()I\nPLorg/acra/file/CrashReportPersister;->entityType-OLwlOKw()I\nLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;\nHSPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;-><init>(I)V\nHPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;-><init>(I)V\nHSPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nHPLorg/acra/file/ReportLocator$special$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I\nLorg/acra/log/AndroidLogDelegate;\nHSPLorg/acra/log/AndroidLogDelegate;-><init>()V\nPLorg/acra/log/AndroidLogDelegate;-><init>()V\nLorg/acra/startup/Report;\nLorg/acra/util/Installation;\nHSPLorg/acra/util/Installation;-><init>()V\nPLorg/acra/util/Installation;-><init>()V\nPLorg/acra/util/Installation;->getChromeReaderMode()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLorg/acra/util/Installation;->getCloudOff()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLorg/acra/util/Installation;->getCloudOff()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLorg/acra/util/Installation;->getCollectionsBookmark()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLorg/acra/util/Installation;->getDeleteSweep()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLorg/acra/util/Installation;->getDeleteSweep()Landroidx/compose/ui/graphics/vector/ImageVector;\nLorg/acra/util/StubCreator;\nHSPLorg/acra/util/StubCreator;->finalConstraints-tfFHcEY(JZIF)J\nHPLorg/acra/util/StubCreator;->finalConstraints-tfFHcEY(JZIF)J\nPLorg/acra/util/StubCreator;->getArrowBack()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLorg/acra/util/StubCreator;->getCode()Landroidx/compose/ui/graphics/vector/ImageVector;\nLorg/commonmark/node/SourceSpans;\nHSPLorg/commonmark/node/SourceSpans;-><init>()V\nHPLorg/commonmark/node/SourceSpans;-><init>()V\nHSPLorg/commonmark/node/SourceSpans;-><init>(I)V\nPLorg/commonmark/node/SourceSpans;-><init>(I)V\nHSPLorg/commonmark/node/SourceSpans;-><init>(Ljava/util/List;)V\nHPLorg/commonmark/node/SourceSpans;-><init>(Ljava/util/List;)V\nHSPLorg/commonmark/node/SourceSpans;->add(I)V\nHPLorg/commonmark/node/SourceSpans;->add(I)V\nHSPLorg/commonmark/node/SourceSpans;->addInitializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V\nHPLorg/commonmark/node/SourceSpans;->addInitializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V\nHSPLorg/commonmark/node/SourceSpans;->build()Landroidx/lifecycle/viewmodel/InitializerViewModelFactory;\nPLorg/commonmark/node/SourceSpans;->build()Landroidx/lifecycle/viewmodel/InitializerViewModelFactory;\nHSPLorg/commonmark/node/SourceSpans;->isNotEmpty()Z\nHPLorg/commonmark/node/SourceSpans;->isNotEmpty()Z\nHSPLorg/commonmark/node/SourceSpans;->peek()I\nHPLorg/commonmark/node/SourceSpans;->peek()I\nHSPLorg/commonmark/node/SourceSpans;->takeMax()I\nHPLorg/commonmark/node/SourceSpans;->takeMax()I\nLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;\nHSPLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;)V\nPLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;)V\nHSPLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;->create(Lokhttp3/Call;)Lokhttp3/EventListener;\nPLorg/jsoup/nodes/Element$$ExternalSyntheticLambda0;->create(Lokhttp3/Call;)Lokhttp3/EventListener;\nLorg/jsoup/select/NodeFilter;\nLorg/nibor/autolink/internal/Scanner;\nLorg/slf4j/ILoggerFactory;\nLrikka/shizuku/ShizukuProvider;\nHSPLrikka/shizuku/ShizukuProvider;-><init>()V\nPLrikka/shizuku/ShizukuProvider;-><init>()V\nHSPLrikka/shizuku/ShizukuProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V\nPLrikka/shizuku/ShizukuProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V\nHSPLrikka/shizuku/ShizukuProvider;->onCreate()Z\nPLrikka/shizuku/ShizukuProvider;->onCreate()Z\nLrikka/shizuku/SystemServiceHelper;\nHSPLrikka/shizuku/SystemServiceHelper;-><clinit>()V\nPLrikka/shizuku/SystemServiceHelper;-><clinit>()V\nHSPLrikka/shizuku/SystemServiceHelper;->getSystemService()Landroid/os/IBinder;\nPLrikka/shizuku/SystemServiceHelper;->getSystemService()Landroid/os/IBinder;\nLrikka/sui/Sui;\nHSPLrikka/sui/Sui;->byteArrayToSetOfTriggers([B)Ljava/util/LinkedHashSet;\nPLrikka/sui/Sui;->byteArrayToSetOfTriggers([B)Ljava/util/LinkedHashSet;\nHSPLrikka/sui/Sui;->init(Ljava/lang/String;)Z\nPLrikka/sui/Sui;->init(Ljava/lang/String;)Z\nHSPLrikka/sui/Sui;->intToBackoffPolicy(I)Landroidx/work/BackoffPolicy;\nPLrikka/sui/Sui;->intToBackoffPolicy(I)Landroidx/work/BackoffPolicy;\nHSPLrikka/sui/Sui;->intToNetworkType(I)Landroidx/work/NetworkType;\nPLrikka/sui/Sui;->intToNetworkType(I)Landroidx/work/NetworkType;\nHSPLrikka/sui/Sui;->intToOutOfQuotaPolicy(I)Landroidx/work/OutOfQuotaPolicy;\nPLrikka/sui/Sui;->intToOutOfQuotaPolicy(I)Landroidx/work/OutOfQuotaPolicy;\nHSPLrikka/sui/Sui;->intToState(I)Landroidx/work/WorkInfo$State;\nPLrikka/sui/Sui;->intToState(I)Landroidx/work/WorkInfo$State;\nHSPLrikka/sui/Sui;->isEnabled()Z\nPLrikka/sui/Sui;->isEnabled()Z\nHSPLrikka/sui/Sui;->isSui()Z\nPLrikka/sui/Sui;->isSui()Z\nHSPLrikka/sui/Sui;->networkTypeToInt(Landroidx/work/NetworkType;)I\nPLrikka/sui/Sui;->networkTypeToInt(Landroidx/work/NetworkType;)I\nHSPLrikka/sui/Sui;->setOfTriggersToByteArray(Ljava/util/Set;)[B\nPLrikka/sui/Sui;->setOfTriggersToByteArray(Ljava/util/Set;)[B\nHSPLrikka/sui/Sui;->stateToInt(Landroidx/work/WorkInfo$State;)I\nPLrikka/sui/Sui;->stateToInt(Landroidx/work/WorkInfo$State;)I\nLsoup/compose/material/motion/MotionConstants;\nHSPLsoup/compose/material/motion/MotionConstants;-><clinit>()V\nPLsoup/compose/material/motion/MotionConstants;-><clinit>()V\nHSPLsoup/compose/material/motion/MotionConstants;->getDefaultSlideDistance-D9Ej5fM()F\nPLsoup/compose/material/motion/MotionConstants;->getDefaultSlideDistance-D9Ej5fM()F\nLsoup/compose/material/motion/animation/MaterialSharedAxisKt;\nHSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->getForOutgoing$1()I\nPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->getForOutgoing$1()I\nHSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughIn()Landroidx/compose/animation/EnterTransition;\nHPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughIn()Landroidx/compose/animation/EnterTransition;\nHSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughOut()Landroidx/compose/animation/ExitTransition;\nHPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialFadeThroughOut()Landroidx/compose/animation/ExitTransition;\nHSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialSharedAxisX$default(ZI)Landroidx/compose/animation/ContentTransform;\nHPLsoup/compose/material/motion/animation/MaterialSharedAxisKt;->materialSharedAxisX$default(ZI)Landroidx/compose/animation/ContentTransform;\nLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;\nHSPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;-><init>(IIZ)V\nHPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;-><init>(IIZ)V\nPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(I)Ljava/lang/Integer;\nHPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(I)Ljava/lang/Integer;\nPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLsoup/compose/material/motion/animation/MaterialSharedAxisKt$materialSharedAxisXIn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference;\nHSPLtachiyomi/core/preference/AndroidPreference;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;)V\nHPLtachiyomi/core/preference/AndroidPreference;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;)V\nHSPLtachiyomi/core/preference/AndroidPreference;->access$getKey$p(Ltachiyomi/core/preference/AndroidPreference;)Ljava/lang/String;\nPLtachiyomi/core/preference/AndroidPreference;->access$getKey$p(Ltachiyomi/core/preference/AndroidPreference;)Ljava/lang/String;\nHSPLtachiyomi/core/preference/AndroidPreference;->changes()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/core/preference/AndroidPreference;->changes()Lkotlinx/coroutines/flow/Flow;\nHSPLtachiyomi/core/preference/AndroidPreference;->get()Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference;->get()Ljava/lang/Object;\nHSPLtachiyomi/core/preference/AndroidPreference;->isSet()Z\nPLtachiyomi/core/preference/AndroidPreference;->isSet()Z\nHSPLtachiyomi/core/preference/AndroidPreference;->set(Ljava/lang/Object;)V\nPLtachiyomi/core/preference/AndroidPreference;->set(Ljava/lang/Object;)V\nLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Z)V\nHPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Z)V\nHSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;\nPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;\nLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;\nHSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;-><init>(Ljava/lang/String;Z)V\nPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;-><init>(Ljava/lang/String;Z)V\nHSPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$BooleanPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$IntPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;I)V\nHPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;I)V\nHSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;\nPLtachiyomi/core/preference/AndroidPreference$IntPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;\nLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;\nHSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;-><init>(Ljava/lang/String;I)V\nPLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;-><init>(Ljava/lang/String;I)V\nHSPLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$IntPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$LongPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;J)V\nPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;J)V\nHSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;\nPLtachiyomi/core/preference/AndroidPreference$LongPrimitive;->write(Ljava/lang/Object;Ljava/lang/String;)Lkotlin/jvm/functions/Function1;\nLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;\nHSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;-><init>(JLjava/lang/String;)V\nPLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;-><init>(JLjava/lang/String;)V\nHSPLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$LongPrimitive$write$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$Object;\nHSPLtachiyomi/core/preference/AndroidPreference$Object;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHPLtachiyomi/core/preference/AndroidPreference$Object;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V\nHSPLtachiyomi/core/preference/AndroidPreference$Object;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/core/preference/AndroidPreference$Object;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$StringPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreference$StringPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/String;)V\nPLtachiyomi/core/preference/AndroidPreference$StringPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/lang/String;)V\nHSPLtachiyomi/core/preference/AndroidPreference$StringPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$StringPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/util/Set;)V\nPLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;-><init>(Landroid/content/SharedPreferences;Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Ljava/util/Set;)V\nHSPLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$StringSetPrimitive;->read(Landroid/content/SharedPreferences;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;-><init>(Lkotlinx/coroutines/flow/Flow;Ltachiyomi/core/preference/AndroidPreference;)V\nHPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;-><init>(Lkotlinx/coroutines/flow/Flow;Ltachiyomi/core/preference/AndroidPreference;)V\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V\nHPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2$1;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2$1;-><init>(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2$1;-><init>(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V\nLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Ltachiyomi/core/preference/AndroidPreference;)V\nHPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Ltachiyomi/core/preference/AndroidPreference;)V\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V\nHPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Ltachiyomi/core/preference/AndroidPreference;)V\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nHPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2$1;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2$1;-><init>(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2$1;-><init>(Ltachiyomi/core/preference/AndroidPreference$changes$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nLtachiyomi/core/preference/AndroidPreference$changes$2;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHPLtachiyomi/core/preference/AndroidPreference$changes$2;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLtachiyomi/core/preference/AndroidPreference$changes$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLtachiyomi/core/preference/AndroidPreference$changes$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreference$changes$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/core/preference/AndroidPreference$changes$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/core/preference/AndroidPreference$changes$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreferenceStore;\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;-><init>(Landroid/app/Application;)V\nPLtachiyomi/core/preference/AndroidPreferenceStore;-><init>(Landroid/app/Application;)V\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;->getBoolean(Ljava/lang/String;Z)Ltachiyomi/core/preference/AndroidPreference$BooleanPrimitive;\nHPLtachiyomi/core/preference/AndroidPreferenceStore;->getBoolean(Ljava/lang/String;Z)Ltachiyomi/core/preference/AndroidPreference$BooleanPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;->getInt(ILjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$IntPrimitive;\nPLtachiyomi/core/preference/AndroidPreferenceStore;->getInt(ILjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$IntPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;->getLong(JLjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$LongPrimitive;\nPLtachiyomi/core/preference/AndroidPreferenceStore;->getLong(JLjava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$LongPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;->getObject(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ltachiyomi/core/preference/AndroidPreference$Object;\nHPLtachiyomi/core/preference/AndroidPreferenceStore;->getObject(Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ltachiyomi/core/preference/AndroidPreference$Object;\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;->getString(Ljava/lang/String;Ljava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$StringPrimitive;\nPLtachiyomi/core/preference/AndroidPreferenceStore;->getString(Ljava/lang/String;Ljava/lang/String;)Ltachiyomi/core/preference/AndroidPreference$StringPrimitive;\nHSPLtachiyomi/core/preference/AndroidPreferenceStore;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ltachiyomi/core/preference/AndroidPreference$StringSetPrimitive;\nPLtachiyomi/core/preference/AndroidPreferenceStore;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ltachiyomi/core/preference/AndroidPreference$StringSetPrimitive;\nLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;-><init>(Landroid/content/SharedPreferences;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;-><init>(Landroid/content/SharedPreferences;Lkotlin/coroutines/Continuation;)V\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nHPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;-><init>(Lkotlinx/coroutines/channels/ProducerScope;)V\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V\nPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V\nLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;-><init>(Landroid/content/SharedPreferences;Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;)V\nHPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;-><init>(Landroid/content/SharedPreferences;Ltachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$$ExternalSyntheticLambda0;)V\nHSPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;->invoke()Ljava/lang/Object;\nPLtachiyomi/core/preference/AndroidPreferenceStoreKt$keyFlow$1$1;->invoke()Ljava/lang/Object;\nLtachiyomi/core/preference/Preference;\nLtachiyomi/core/preference/PreferenceStore;\nLtachiyomi/core/preference/TriState;\nHSPLtachiyomi/core/preference/TriState;-><clinit>()V\nPLtachiyomi/core/preference/TriState;-><clinit>()V\nHSPLtachiyomi/core/preference/TriState;-><init>(Ljava/lang/String;I)V\nPLtachiyomi/core/preference/TriState;-><init>(Ljava/lang/String;I)V\nLtachiyomi/core/provider/AndroidBackupFolderProvider;\nHSPLtachiyomi/core/provider/AndroidBackupFolderProvider;-><init>(Landroid/app/Application;)V\nPLtachiyomi/core/provider/AndroidBackupFolderProvider;-><init>(Landroid/app/Application;)V\nLtachiyomi/core/provider/AndroidDownloadFolderProvider;\nHSPLtachiyomi/core/provider/AndroidDownloadFolderProvider;-><init>(Landroid/app/Application;)V\nPLtachiyomi/core/provider/AndroidDownloadFolderProvider;-><init>(Landroid/app/Application;)V\nHSPLtachiyomi/core/provider/AndroidDownloadFolderProvider;->path()Ljava/lang/String;\nPLtachiyomi/core/provider/AndroidDownloadFolderProvider;->path()Ljava/lang/String;\nLtachiyomi/core/provider/FolderProvider;\nLtachiyomi/core/util/lang/CoroutinesExtensionsKt;\nHSPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchIO(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;\nPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchIO(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;\nHSPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchNow(Lkotlin/jvm/functions/Function2;)V\nPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->launchNow(Lkotlin/jvm/functions/Function2;)V\nHSPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->withIOContext(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLtachiyomi/core/util/lang/CoroutinesExtensionsKt;->withIOContext(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/data/AndroidDatabaseHandler;\nHSPLtachiyomi/data/AndroidDatabaseHandler;-><init>(Ltachiyomi/data/Database;Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/data/AndroidDatabaseHandler;-><init>(Ltachiyomi/data/Database;Lapp/cash/sqldelight/db/SqlDriver;)V\nHSPLtachiyomi/data/AndroidDatabaseHandler;->subscribeToList(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;\nPLtachiyomi/data/AndroidDatabaseHandler;->subscribeToList(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/coroutines/FlowQuery$mapToOne$$inlined$map$1;\nLtachiyomi/data/CategoriesQueries;\nHSPLtachiyomi/data/CategoriesQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/data/CategoriesQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nHSPLtachiyomi/data/CategoriesQueries;->getCategories(Lkotlin/jvm/functions/Function4;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/data/CategoriesQueries;->getCategories(Lkotlin/jvm/functions/Function4;)Lapp/cash/sqldelight/Query;\nLtachiyomi/data/CategoriesQueries$getCategories$1;\nHSPLtachiyomi/data/CategoriesQueries$getCategories$1;-><init>(Lkotlin/jvm/functions/Function4;)V\nPLtachiyomi/data/CategoriesQueries$getCategories$1;-><init>(Lkotlin/jvm/functions/Function4;)V\nHSPLtachiyomi/data/CategoriesQueries$getCategories$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/CategoriesQueries$getCategories$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/ChaptersQueries;\nHSPLtachiyomi/data/ChaptersQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/data/ChaptersQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nLtachiyomi/data/Database;\nHSPLtachiyomi/data/Database;-><clinit>()V\nPLtachiyomi/data/Database;-><clinit>()V\nLtachiyomi/data/Database$Companion;\nHSPLtachiyomi/data/Database$Companion;-><clinit>()V\nPLtachiyomi/data/Database$Companion;-><clinit>()V\nHSPLtachiyomi/data/Database$Companion;-><init>()V\nPLtachiyomi/data/Database$Companion;-><init>()V\nLtachiyomi/data/DatabaseHandler;\nLtachiyomi/data/DateColumnAdapter;\nHSPLtachiyomi/data/DateColumnAdapter;-><clinit>()V\nPLtachiyomi/data/DateColumnAdapter;-><clinit>()V\nHSPLtachiyomi/data/DateColumnAdapter;-><init>()V\nPLtachiyomi/data/DateColumnAdapter;-><init>()V\nLtachiyomi/data/History$Adapter;\nHSPLtachiyomi/data/History$Adapter;-><init>(Ltachiyomi/data/DateColumnAdapter;)V\nPLtachiyomi/data/History$Adapter;-><init>(Ltachiyomi/data/DateColumnAdapter;)V\nLtachiyomi/data/HistoryQueries;\nHSPLtachiyomi/data/HistoryQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V\nPLtachiyomi/data/HistoryQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V\nLtachiyomi/data/Manga_syncQueries;\nHSPLtachiyomi/data/Manga_syncQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/data/Manga_syncQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nHSPLtachiyomi/data/Manga_syncQueries;->getTracks(Lkotlin/jvm/functions/Function13;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/data/Manga_syncQueries;->getTracks(Lkotlin/jvm/functions/Function13;)Lapp/cash/sqldelight/Query;\nLtachiyomi/data/Manga_syncQueries$getTracks$1;\nHSPLtachiyomi/data/Manga_syncQueries$getTracks$1;-><init>(Lkotlin/jvm/functions/Function13;)V\nPLtachiyomi/data/Manga_syncQueries$getTracks$1;-><init>(Lkotlin/jvm/functions/Function13;)V\nLtachiyomi/data/Mangas$Adapter;\nHSPLtachiyomi/data/Mangas$Adapter;-><init>(Ltachiyomi/data/StringListColumnAdapter;Ltachiyomi/data/UpdateStrategyColumnAdapter;)V\nPLtachiyomi/data/Mangas$Adapter;-><init>(Ltachiyomi/data/StringListColumnAdapter;Ltachiyomi/data/UpdateStrategyColumnAdapter;)V\nLtachiyomi/data/MangasQueries;\nHSPLtachiyomi/data/MangasQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V\nPLtachiyomi/data/MangasQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V\nLtachiyomi/data/Mangas_categoriesQueries;\nHSPLtachiyomi/data/Mangas_categoriesQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/data/Mangas_categoriesQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nLtachiyomi/data/SourcesQueries;\nHSPLtachiyomi/data/SourcesQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/data/SourcesQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nHSPLtachiyomi/data/SourcesQueries;->findAll(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/data/SourcesQueries;->findAll(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query;\nLtachiyomi/data/SourcesQueries$findAll$1;\nHSPLtachiyomi/data/SourcesQueries$findAll$1;-><init>(Lkotlin/jvm/functions/Function3;)V\nPLtachiyomi/data/SourcesQueries$findAll$1;-><init>(Lkotlin/jvm/functions/Function3;)V\nLtachiyomi/data/StringListColumnAdapter;\nHSPLtachiyomi/data/StringListColumnAdapter;-><clinit>()V\nPLtachiyomi/data/StringListColumnAdapter;-><clinit>()V\nHSPLtachiyomi/data/StringListColumnAdapter;-><init>()V\nPLtachiyomi/data/StringListColumnAdapter;-><init>()V\nLtachiyomi/data/UpdateStrategyColumnAdapter;\nHSPLtachiyomi/data/UpdateStrategyColumnAdapter;-><clinit>()V\nPLtachiyomi/data/UpdateStrategyColumnAdapter;-><clinit>()V\nHSPLtachiyomi/data/UpdateStrategyColumnAdapter;-><init>()V\nPLtachiyomi/data/UpdateStrategyColumnAdapter;-><init>()V\nLtachiyomi/data/category/CategoryMapperKt;\nHSPLtachiyomi/data/category/CategoryMapperKt;-><clinit>()V\nPLtachiyomi/data/category/CategoryMapperKt;-><clinit>()V\nHSPLtachiyomi/data/category/CategoryMapperKt;->getCategoryMapper()Lkotlin/jvm/functions/Function4;\nPLtachiyomi/data/category/CategoryMapperKt;->getCategoryMapper()Lkotlin/jvm/functions/Function4;\nLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;\nHSPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;-><clinit>()V\nPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;-><clinit>()V\nHSPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;-><init>()V\nPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;-><init>()V\nHSPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/category/CategoryMapperKt$categoryMapper$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/category/CategoryRepositoryImpl;\nHSPLtachiyomi/data/category/CategoryRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/category/CategoryRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nHSPLtachiyomi/data/category/CategoryRepositoryImpl;->getAllAsFlow()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/category/CategoryRepositoryImpl;->getAllAsFlow()Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;\nHSPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;-><clinit>()V\nPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;-><clinit>()V\nHSPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;-><init>()V\nPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;-><init>()V\nHSPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/category/CategoryRepositoryImpl$getAllAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/chapter/ChapterRepositoryImpl;\nHSPLtachiyomi/data/chapter/ChapterRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/chapter/ChapterRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nLtachiyomi/data/data/DatabaseImpl;\nHSPLtachiyomi/data/data/DatabaseImpl;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)V\nPLtachiyomi/data/data/DatabaseImpl;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)V\nHSPLtachiyomi/data/data/DatabaseImpl;->getCategoriesQueries()Ltachiyomi/data/CategoriesQueries;\nPLtachiyomi/data/data/DatabaseImpl;->getCategoriesQueries()Ltachiyomi/data/CategoriesQueries;\nHSPLtachiyomi/data/data/DatabaseImpl;->getHistoryViewQueries()Ltachiyomi/view/HistoryViewQueries;\nPLtachiyomi/data/data/DatabaseImpl;->getHistoryViewQueries()Ltachiyomi/view/HistoryViewQueries;\nHSPLtachiyomi/data/data/DatabaseImpl;->getLibraryViewQueries()Ltachiyomi/view/LibraryViewQueries;\nPLtachiyomi/data/data/DatabaseImpl;->getLibraryViewQueries()Ltachiyomi/view/LibraryViewQueries;\nHSPLtachiyomi/data/data/DatabaseImpl;->getManga_syncQueries()Ltachiyomi/data/Manga_syncQueries;\nPLtachiyomi/data/data/DatabaseImpl;->getManga_syncQueries()Ltachiyomi/data/Manga_syncQueries;\nHSPLtachiyomi/data/data/DatabaseImpl;->getSourcesQueries()Ltachiyomi/data/SourcesQueries;\nPLtachiyomi/data/data/DatabaseImpl;->getSourcesQueries()Ltachiyomi/data/SourcesQueries;\nHSPLtachiyomi/data/data/DatabaseImpl;->getUpdatesViewQueries()Ltachiyomi/view/UpdatesViewQueries;\nPLtachiyomi/data/data/DatabaseImpl;->getUpdatesViewQueries()Ltachiyomi/view/UpdatesViewQueries;\nLtachiyomi/data/data/DatabaseImpl$Schema;\nHSPLtachiyomi/data/data/DatabaseImpl$Schema;-><clinit>()V\nPLtachiyomi/data/data/DatabaseImpl$Schema;-><clinit>()V\nHSPLtachiyomi/data/data/DatabaseImpl$Schema;-><init>()V\nPLtachiyomi/data/data/DatabaseImpl$Schema;-><init>()V\nLtachiyomi/data/data/DatabaseImplKt;\nHSPLtachiyomi/data/data/DatabaseImplKt;->newInstance(Lkotlin/reflect/KClass;Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)Ltachiyomi/data/Database;\nPLtachiyomi/data/data/DatabaseImplKt;->newInstance(Lkotlin/reflect/KClass;Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;Ltachiyomi/data/Mangas$Adapter;)Ltachiyomi/data/Database;\nLtachiyomi/data/history/HistoryMapperKt;\nHSPLtachiyomi/data/history/HistoryMapperKt;-><clinit>()V\nPLtachiyomi/data/history/HistoryMapperKt;-><clinit>()V\nHSPLtachiyomi/data/history/HistoryMapperKt;->getHistoryWithRelationsMapper()Lkotlin/jvm/functions/Function11;\nPLtachiyomi/data/history/HistoryMapperKt;->getHistoryWithRelationsMapper()Lkotlin/jvm/functions/Function11;\nLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;\nHSPLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;-><clinit>()V\nPLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;-><clinit>()V\nHSPLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;-><init>()V\nPLtachiyomi/data/history/HistoryMapperKt$historyMapper$1;-><init>()V\nLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;\nHSPLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;-><clinit>()V\nPLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;-><clinit>()V\nHSPLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;-><init>()V\nPLtachiyomi/data/history/HistoryMapperKt$historyWithRelationsMapper$1;-><init>()V\nLtachiyomi/data/history/HistoryRepositoryImpl;\nHSPLtachiyomi/data/history/HistoryRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/history/HistoryRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nHSPLtachiyomi/data/history/HistoryRepositoryImpl;->getHistory(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/history/HistoryRepositoryImpl;->getHistory(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;\nHSPLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;-><init>(Ljava/lang/String;)V\nPLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;-><init>(Ljava/lang/String;)V\nHSPLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/history/HistoryRepositoryImpl$getHistory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/manga/MangaMapperKt;\nHSPLtachiyomi/data/manga/MangaMapperKt;-><clinit>()V\nPLtachiyomi/data/manga/MangaMapperKt;-><clinit>()V\nHSPLtachiyomi/data/manga/MangaMapperKt;->getLibraryManga()Lkotlin/jvm/functions/FunctionN;\nPLtachiyomi/data/manga/MangaMapperKt;->getLibraryManga()Lkotlin/jvm/functions/FunctionN;\nLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;\nHSPLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;-><clinit>()V\nPLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;-><clinit>()V\nHSPLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;-><init>()V\nPLtachiyomi/data/manga/MangaMapperKt$libraryManga$1;-><init>()V\nLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;\nHSPLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;-><clinit>()V\nPLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;-><clinit>()V\nHSPLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;-><init>()V\nPLtachiyomi/data/manga/MangaMapperKt$mangaMapper$1;-><init>()V\nLtachiyomi/data/manga/MangaRepositoryImpl;\nHSPLtachiyomi/data/manga/MangaRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/manga/MangaRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nHSPLtachiyomi/data/manga/MangaRepositoryImpl;->getLibraryMangaAsFlow()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/manga/MangaRepositoryImpl;->getLibraryMangaAsFlow()Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;\nHSPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;-><clinit>()V\nPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;-><clinit>()V\nHSPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;-><init>()V\nPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;-><init>()V\nHSPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/manga/MangaRepositoryImpl$getLibraryMangaAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/source/SourceMapperKt;\nHSPLtachiyomi/data/source/SourceMapperKt;-><clinit>()V\nPLtachiyomi/data/source/SourceMapperKt;-><clinit>()V\nHSPLtachiyomi/data/source/SourceMapperKt;->getSourceDataMapper()Lkotlin/jvm/functions/Function3;\nPLtachiyomi/data/source/SourceMapperKt;->getSourceDataMapper()Lkotlin/jvm/functions/Function3;\nLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;\nHSPLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;-><clinit>()V\nPLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;-><clinit>()V\nHSPLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;-><init>()V\nPLtachiyomi/data/source/SourceMapperKt$sourceDataMapper$1;-><init>()V\nLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;\nHSPLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;-><clinit>()V\nPLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;-><clinit>()V\nHSPLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;-><init>()V\nPLtachiyomi/data/source/SourceMapperKt$sourceMapper$1;-><init>()V\nLtachiyomi/data/source/StubSourceRepositoryImpl;\nHSPLtachiyomi/data/source/StubSourceRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/source/StubSourceRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nHSPLtachiyomi/data/source/StubSourceRepositoryImpl;->subscribeAll()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/source/StubSourceRepositoryImpl;->subscribeAll()Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;\nHSPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;-><clinit>()V\nPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;-><clinit>()V\nHSPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;-><init>()V\nPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;-><init>()V\nHSPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/source/StubSourceRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/track/TrackMapperKt;\nHSPLtachiyomi/data/track/TrackMapperKt;-><clinit>()V\nPLtachiyomi/data/track/TrackMapperKt;-><clinit>()V\nHSPLtachiyomi/data/track/TrackMapperKt;->getTrackMapper()Lkotlin/jvm/functions/Function13;\nPLtachiyomi/data/track/TrackMapperKt;->getTrackMapper()Lkotlin/jvm/functions/Function13;\nLtachiyomi/data/track/TrackMapperKt$trackMapper$1;\nHSPLtachiyomi/data/track/TrackMapperKt$trackMapper$1;-><clinit>()V\nPLtachiyomi/data/track/TrackMapperKt$trackMapper$1;-><clinit>()V\nHSPLtachiyomi/data/track/TrackMapperKt$trackMapper$1;-><init>()V\nPLtachiyomi/data/track/TrackMapperKt$trackMapper$1;-><init>()V\nLtachiyomi/data/track/TrackRepositoryImpl;\nHSPLtachiyomi/data/track/TrackRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/track/TrackRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nHSPLtachiyomi/data/track/TrackRepositoryImpl;->getTracksAsFlow()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/track/TrackRepositoryImpl;->getTracksAsFlow()Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;\nHSPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;-><clinit>()V\nPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;-><clinit>()V\nHSPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;-><init>()V\nPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;-><init>()V\nHSPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/track/TrackRepositoryImpl$getTracksAsFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/updates/UpdatesMapperKt;\nHSPLtachiyomi/data/updates/UpdatesMapperKt;-><clinit>()V\nPLtachiyomi/data/updates/UpdatesMapperKt;-><clinit>()V\nHSPLtachiyomi/data/updates/UpdatesMapperKt;->getUpdateWithRelationMapper()Lkotlin/jvm/functions/Function14;\nPLtachiyomi/data/updates/UpdatesMapperKt;->getUpdateWithRelationMapper()Lkotlin/jvm/functions/Function14;\nLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;\nHSPLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;-><clinit>()V\nPLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;-><clinit>()V\nHSPLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;-><init>()V\nPLtachiyomi/data/updates/UpdatesMapperKt$updateWithRelationMapper$1;-><init>()V\nLtachiyomi/data/updates/UpdatesRepositoryImpl;\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nPLtachiyomi/data/updates/UpdatesRepositoryImpl;-><init>(Ltachiyomi/data/DatabaseHandler;)V\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeAll(J)Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeAll(J)Lkotlinx/coroutines/flow/Flow;\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeWithRead(J)Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/data/updates/UpdatesRepositoryImpl;->subscribeWithRead(J)Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;-><init>(J)V\nPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;-><init>(J)V\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeAll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;-><init>(J)V\nPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;-><init>(J)V\nHSPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/data/updates/UpdatesRepositoryImpl$subscribeWithRead$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/domain/backup/service/BackupPreferences;\nHSPLtachiyomi/domain/backup/service/BackupPreferences;-><init>(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V\nPLtachiyomi/domain/backup/service/BackupPreferences;-><init>(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLtachiyomi/domain/backup/service/BackupPreferences;->backupInterval()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/backup/service/BackupPreferences;->backupInterval()Ltachiyomi/core/preference/Preference;\nLtachiyomi/domain/category/interactor/CreateCategoryWithName;\nLtachiyomi/domain/category/interactor/DeleteCategory;\nLtachiyomi/domain/category/interactor/GetCategories;\nHSPLtachiyomi/domain/category/interactor/GetCategories;-><init>(Ltachiyomi/domain/category/repository/CategoryRepository;)V\nPLtachiyomi/domain/category/interactor/GetCategories;-><init>(Ltachiyomi/domain/category/repository/CategoryRepository;)V\nHSPLtachiyomi/domain/category/interactor/GetCategories;->subscribe()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/domain/category/interactor/GetCategories;->subscribe()Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/domain/category/interactor/RenameCategory;\nLtachiyomi/domain/category/interactor/ReorderCategory;\nLtachiyomi/domain/category/interactor/ResetCategoryFlags;\nLtachiyomi/domain/category/interactor/SetDisplayMode;\nHSPLtachiyomi/domain/category/interactor/SetDisplayMode;-><init>(Ltachiyomi/domain/library/service/LibraryPreferences;)V\nPLtachiyomi/domain/category/interactor/SetDisplayMode;-><init>(Ltachiyomi/domain/library/service/LibraryPreferences;)V\nLtachiyomi/domain/category/interactor/SetMangaCategories;\nHSPLtachiyomi/domain/category/interactor/SetMangaCategories;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;)V\nPLtachiyomi/domain/category/interactor/SetMangaCategories;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;)V\nLtachiyomi/domain/category/interactor/SetSortModeForCategory;\nHSPLtachiyomi/domain/category/interactor/SetSortModeForCategory;-><init>(Ltachiyomi/domain/category/repository/CategoryRepository;Ltachiyomi/domain/library/service/LibraryPreferences;)V\nPLtachiyomi/domain/category/interactor/SetSortModeForCategory;-><init>(Ltachiyomi/domain/category/repository/CategoryRepository;Ltachiyomi/domain/library/service/LibraryPreferences;)V\nLtachiyomi/domain/category/interactor/UpdateCategory;\nLtachiyomi/domain/category/model/Category;\nHSPLtachiyomi/domain/category/model/Category;-><clinit>()V\nPLtachiyomi/domain/category/model/Category;-><clinit>()V\nHSPLtachiyomi/domain/category/model/Category;-><init>(Ljava/lang/String;JJJ)V\nPLtachiyomi/domain/category/model/Category;-><init>(Ljava/lang/String;JJJ)V\nHSPLtachiyomi/domain/category/model/Category;->getFlags()J\nPLtachiyomi/domain/category/model/Category;->getFlags()J\nHSPLtachiyomi/domain/category/model/Category;->getId()J\nPLtachiyomi/domain/category/model/Category;->getId()J\nHSPLtachiyomi/domain/category/model/Category;->hashCode()I\nPLtachiyomi/domain/category/model/Category;->hashCode()I\nHSPLtachiyomi/domain/category/model/Category;->isSystemCategory()Z\nPLtachiyomi/domain/category/model/Category;->isSystemCategory()Z\nLtachiyomi/domain/category/model/Category$Companion;\nHSPLtachiyomi/domain/category/model/Category$Companion;-><init>()V\nPLtachiyomi/domain/category/model/Category$Companion;-><init>()V\nHSPLtachiyomi/domain/category/model/Category$Companion;-><init>(I)V\nPLtachiyomi/domain/category/model/Category$Companion;-><init>(I)V\nLtachiyomi/domain/category/repository/CategoryRepository;\nLtachiyomi/domain/chapter/interactor/GetChapter;\nHSPLtachiyomi/domain/chapter/interactor/GetChapter;-><init>(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nPLtachiyomi/domain/chapter/interactor/GetChapter;-><init>(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nLtachiyomi/domain/chapter/interactor/GetChapterByMangaId;\nHSPLtachiyomi/domain/chapter/interactor/GetChapterByMangaId;-><init>(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nPLtachiyomi/domain/chapter/interactor/GetChapterByMangaId;-><init>(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nLtachiyomi/domain/chapter/interactor/SetMangaDefaultChapterFlags;\nLtachiyomi/domain/chapter/interactor/ShouldUpdateDbChapter;\nLtachiyomi/domain/chapter/interactor/UpdateChapter;\nHSPLtachiyomi/domain/chapter/interactor/UpdateChapter;-><init>(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nPLtachiyomi/domain/chapter/interactor/UpdateChapter;-><init>(Ltachiyomi/domain/chapter/repository/ChapterRepository;)V\nLtachiyomi/domain/chapter/repository/ChapterRepository;\nLtachiyomi/domain/download/service/DownloadPreferences;\nHSPLtachiyomi/domain/download/service/DownloadPreferences;-><init>(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V\nPLtachiyomi/domain/download/service/DownloadPreferences;-><init>(Ltachiyomi/core/provider/FolderProvider;Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLtachiyomi/domain/download/service/DownloadPreferences;->downloadsDirectory()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/download/service/DownloadPreferences;->downloadsDirectory()Ltachiyomi/core/preference/Preference;\nLtachiyomi/domain/history/interactor/GetHistory;\nHSPLtachiyomi/domain/history/interactor/GetHistory;-><init>(Ltachiyomi/domain/history/repository/HistoryRepository;)V\nPLtachiyomi/domain/history/interactor/GetHistory;-><init>(Ltachiyomi/domain/history/repository/HistoryRepository;)V\nHSPLtachiyomi/domain/history/interactor/GetHistory;->subscribe(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/domain/history/interactor/GetHistory;->subscribe(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/domain/history/interactor/GetNextChapters;\nHSPLtachiyomi/domain/history/interactor/GetNextChapters;-><init>(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;Ltachiyomi/domain/manga/interactor/GetManga;Ltachiyomi/domain/history/repository/HistoryRepository;)V\nPLtachiyomi/domain/history/interactor/GetNextChapters;-><init>(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;Ltachiyomi/domain/manga/interactor/GetManga;Ltachiyomi/domain/history/repository/HistoryRepository;)V\nLtachiyomi/domain/history/interactor/GetTotalReadDuration;\nLtachiyomi/domain/history/interactor/RemoveHistory;\nHSPLtachiyomi/domain/history/interactor/RemoveHistory;-><init>(Ltachiyomi/domain/history/repository/HistoryRepository;)V\nPLtachiyomi/domain/history/interactor/RemoveHistory;-><init>(Ltachiyomi/domain/history/repository/HistoryRepository;)V\nLtachiyomi/domain/history/interactor/UpsertHistory;\nLtachiyomi/domain/history/repository/HistoryRepository;\nLtachiyomi/domain/library/model/Flag;\nLtachiyomi/domain/library/model/FlagWithMask;\nLtachiyomi/domain/library/model/LibrarySort;\nHSPLtachiyomi/domain/library/model/LibrarySort;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort;-><init>(Ltachiyomi/domain/library/model/LibrarySort$Type;Ltachiyomi/domain/library/model/LibrarySort$Direction;)V\nPLtachiyomi/domain/library/model/LibrarySort;-><init>(Ltachiyomi/domain/library/model/LibrarySort$Type;Ltachiyomi/domain/library/model/LibrarySort$Direction;)V\nHSPLtachiyomi/domain/library/model/LibrarySort;->access$getDirections$delegate$cp()Lkotlin/Lazy;\nPLtachiyomi/domain/library/model/LibrarySort;->access$getDirections$delegate$cp()Lkotlin/Lazy;\nHSPLtachiyomi/domain/library/model/LibrarySort;->access$getTypes$delegate$cp()Lkotlin/Lazy;\nPLtachiyomi/domain/library/model/LibrarySort;->access$getTypes$delegate$cp()Lkotlin/Lazy;\nHSPLtachiyomi/domain/library/model/LibrarySort;->isAscending()Z\nPLtachiyomi/domain/library/model/LibrarySort;->isAscending()Z\nLtachiyomi/domain/library/model/LibrarySort$Companion;\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Companion;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion;-><init>(I)V\nPLtachiyomi/domain/library/model/LibrarySort$Companion;-><init>(I)V\nLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->invoke()Ljava/lang/Object;\nPLtachiyomi/domain/library/model/LibrarySort$Companion$directions$2;->invoke()Ljava/lang/Object;\nLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->invoke()Ljava/lang/Object;\nPLtachiyomi/domain/library/model/LibrarySort$Companion$types$2;->invoke()Ljava/lang/Object;\nLtachiyomi/domain/library/model/LibrarySort$Direction;\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Direction;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction;-><init>(J)V\nPLtachiyomi/domain/library/model/LibrarySort$Direction;-><init>(J)V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction;->getFlag()J\nPLtachiyomi/domain/library/model/LibrarySort$Direction;->getFlag()J\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction;->getMask()J\nPLtachiyomi/domain/library/model/LibrarySort$Direction;->getMask()J\nLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Ascending;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;-><init>(I)V\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Companion;-><init>(I)V\nLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->equals(Ljava/lang/Object;)Z\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->equals(Ljava/lang/Object;)Z\nHSPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Direction$Descending;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type;-><init>(J)V\nPLtachiyomi/domain/library/model/LibrarySort$Type;-><init>(J)V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type;->getFlag()J\nPLtachiyomi/domain/library/model/LibrarySort$Type;->getFlag()J\nHSPLtachiyomi/domain/library/model/LibrarySort$Type;->getMask()J\nPLtachiyomi/domain/library/model/LibrarySort$Type;->getMask()J\nLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$Alphabetical;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$ChapterFetchDate;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$Companion;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$Companion;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$Companion;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$Companion;-><init>(I)V\nPLtachiyomi/domain/library/model/LibrarySort$Type$Companion;-><init>(I)V\nLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$DateAdded;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$LastRead;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$LastUpdate;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$LatestChapter;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$TotalChapters;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;-><clinit>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;-><clinit>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;-><init>()V\nPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;-><init>()V\nHSPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->hashCode()I\nPLtachiyomi/domain/library/model/LibrarySort$Type$UnreadCount;->hashCode()I\nLtachiyomi/domain/library/model/LibrarySortModeKt;\nHSPLtachiyomi/domain/library/model/LibrarySortModeKt;->getSort(Ltachiyomi/domain/category/model/Category;)Ltachiyomi/domain/library/model/LibrarySort;\nPLtachiyomi/domain/library/model/LibrarySortModeKt;->getSort(Ltachiyomi/domain/category/model/Category;)Ltachiyomi/domain/library/model/LibrarySort;\nLtachiyomi/domain/library/model/Mask;\nLtachiyomi/domain/library/service/LibraryPreferences;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;-><clinit>()V\nPLtachiyomi/domain/library/service/LibraryPreferences;-><clinit>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nPLtachiyomi/domain/library/service/LibraryPreferences;-><init>(Ltachiyomi/core/preference/PreferenceStore;)V\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->autoClearChapterCache()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->autoClearChapterCache()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->categoryNumberOfItems()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->categoryNumberOfItems()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->categoryTabs()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->categoryTabs()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->downloadBadge()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->downloadBadge()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->filterBookmarked()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->filterBookmarked()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->filterCompleted()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->filterCompleted()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->filterDownloaded()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->filterDownloaded()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->filterStarted()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->filterStarted()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->filterUnread()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->filterUnread()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->languageBadge()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->languageBadge()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->lastUsedCategory()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->lastUsedCategory()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateInterval()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateInterval()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateLastTimestamp()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->libraryUpdateLastTimestamp()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->localBadge()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->localBadge()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->newShowUpdatesCount()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->newShowUpdatesCount()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->newUpdatesCount()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->newUpdatesCount()Ltachiyomi/core/preference/Preference;\nHSPLtachiyomi/domain/library/service/LibraryPreferences;->showContinueReadingButton()Ltachiyomi/core/preference/Preference;\nPLtachiyomi/domain/library/service/LibraryPreferences;->showContinueReadingButton()Ltachiyomi/core/preference/Preference;\nLtachiyomi/domain/library/service/LibraryPreferences$Companion;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$Companion;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$Companion;-><init>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences$Companion;-><init>(I)V\nPLtachiyomi/domain/library/service/LibraryPreferences$Companion;-><init>(I)V\nLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;-><clinit>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;-><clinit>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$1;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$2;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$2;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterBookmarked$$inlined$getEnum$2;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;-><clinit>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;-><clinit>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$1;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$2;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$2;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterCompleted$$inlined$getEnum$2;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;-><clinit>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;-><clinit>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$1;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$2;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$2;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterDownloaded$$inlined$getEnum$2;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;-><clinit>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;-><clinit>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$1;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$2;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$2;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterStarted$$inlined$getEnum$2;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;-><clinit>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;-><clinit>()V\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$1;-><init>()V\nLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$2;\nHSPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$2;-><init>()V\nPLtachiyomi/domain/library/service/LibraryPreferences$filterUnread$$inlined$getEnum$2;-><init>()V\nLtachiyomi/domain/manga/interactor/GetDuplicateLibraryManga;\nLtachiyomi/domain/manga/interactor/GetFavorites;\nLtachiyomi/domain/manga/interactor/GetLibraryManga;\nHSPLtachiyomi/domain/manga/interactor/GetLibraryManga;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;)V\nPLtachiyomi/domain/manga/interactor/GetLibraryManga;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;)V\nHSPLtachiyomi/domain/manga/interactor/GetLibraryManga;->subscribe()Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/domain/manga/interactor/GetLibraryManga;->subscribe()Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/domain/manga/interactor/GetManga;\nHSPLtachiyomi/domain/manga/interactor/GetManga;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;)V\nPLtachiyomi/domain/manga/interactor/GetManga;-><init>(Ltachiyomi/domain/manga/repository/MangaRepository;)V\nLtachiyomi/domain/manga/interactor/GetMangaWithChapters;\nLtachiyomi/domain/manga/interactor/NetworkToLocalManga;\nLtachiyomi/domain/manga/interactor/ResetViewerFlags;\nLtachiyomi/domain/manga/interactor/SetFetchInterval;\nHSPLtachiyomi/domain/manga/interactor/SetFetchInterval;-><init>(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;)V\nPLtachiyomi/domain/manga/interactor/SetFetchInterval;-><init>(Ltachiyomi/domain/chapter/interactor/GetChapterByMangaId;)V\nLtachiyomi/domain/manga/interactor/SetMangaChapterFlags;\nLtachiyomi/domain/manga/repository/MangaRepository;\nLtachiyomi/domain/release/interactor/GetApplicationRelease;\nLtachiyomi/domain/release/service/ReleaseService;\nLtachiyomi/domain/source/interactor/GetRemoteManga;\nLtachiyomi/domain/source/interactor/GetSourcesWithNonLibraryManga;\nLtachiyomi/domain/source/repository/SourceRepository;\nLtachiyomi/domain/source/repository/StubSourceRepository;\nLtachiyomi/domain/source/service/SourceManager;\nLtachiyomi/domain/track/interactor/DeleteTrack;\nLtachiyomi/domain/track/interactor/GetTracks;\nLtachiyomi/domain/track/interactor/GetTracksPerManga;\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga;-><init>(Ltachiyomi/domain/track/repository/TrackRepository;)V\nPLtachiyomi/domain/track/interactor/GetTracksPerManga;-><init>(Ltachiyomi/domain/track/repository/TrackRepository;)V\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga;->subscribe()Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;\nPLtachiyomi/domain/track/interactor/GetTracksPerManga;->subscribe()Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;\nLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/Flow;)V\nPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;-><init>(Lkotlinx/coroutines/flow/Flow;)V\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\nLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;-><init>(Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;-><init>(Ltachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V\nHSPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/domain/track/interactor/GetTracksPerManga$subscribe$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/domain/track/interactor/InsertTrack;\nLtachiyomi/domain/track/repository/TrackRepository;\nLtachiyomi/domain/updates/interactor/GetUpdates;\nHSPLtachiyomi/domain/updates/interactor/GetUpdates;-><init>(Ltachiyomi/domain/updates/repository/UpdatesRepository;)V\nPLtachiyomi/domain/updates/interactor/GetUpdates;-><init>(Ltachiyomi/domain/updates/repository/UpdatesRepository;)V\nHSPLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(J)Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(J)Lkotlinx/coroutines/flow/Flow;\nHSPLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(Ljava/util/Calendar;)Lkotlinx/coroutines/flow/Flow;\nPLtachiyomi/domain/updates/interactor/GetUpdates;->subscribe(Ljava/util/Calendar;)Lkotlinx/coroutines/flow/Flow;\nLtachiyomi/domain/updates/repository/UpdatesRepository;\nLtachiyomi/presentation/core/components/ActionButtonKt;\nHSPLtachiyomi/presentation/core/components/ActionButtonKt;->ActionButton(Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nHPLtachiyomi/presentation/core/components/ActionButtonKt;->ActionButton(Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V\nLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;\nHSPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;-><init>(ILandroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;)V\nPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;-><init>(ILandroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;)V\nHSPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/ActionButtonKt$ActionButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/LazyListKt;\nHSPLtachiyomi/presentation/core/components/LazyListKt;->ScrollbarLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nHPLtachiyomi/presentation/core/components/LazyListKt;->ScrollbarLazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V\nLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;-><init>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt;-><init>()V\nLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;-><init>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;-><init>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;-><init>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;-><init>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;-><init>()V\nPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ComposableSingletons$ScaffoldKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ConstantsKt;\nHSPLtachiyomi/presentation/core/components/material/ConstantsKt;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ConstantsKt;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ConstantsKt;->getPadding()Ltachiyomi/presentation/core/components/material/Padding;\nPLtachiyomi/presentation/core/components/material/ConstantsKt;->getPadding()Ltachiyomi/presentation/core/components/material/Padding;\nLtachiyomi/presentation/core/components/material/FabPosition;\nHSPLtachiyomi/presentation/core/components/material/FabPosition;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/FabPosition;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/FabPosition;-><init>(I)V\nPLtachiyomi/presentation/core/components/material/FabPosition;-><init>(I)V\nHSPLtachiyomi/presentation/core/components/material/FabPosition;->access$getEnd$cp()I\nPLtachiyomi/presentation/core/components/material/FabPosition;->access$getEnd$cp()I\nHSPLtachiyomi/presentation/core/components/material/FabPosition;->box-impl(I)Ltachiyomi/presentation/core/components/material/FabPosition;\nPLtachiyomi/presentation/core/components/material/FabPosition;->box-impl(I)Ltachiyomi/presentation/core/components/material/FabPosition;\nPLtachiyomi/presentation/core/components/material/FabPosition;->equals(Ljava/lang/Object;)Z\nLtachiyomi/presentation/core/components/material/FabPosition$Companion;\nHSPLtachiyomi/presentation/core/components/material/FabPosition$Companion;-><init>()V\nPLtachiyomi/presentation/core/components/material/FabPosition$Companion;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/FabPosition$Companion;-><init>(I)V\nPLtachiyomi/presentation/core/components/material/FabPosition$Companion;-><init>(I)V\nLtachiyomi/presentation/core/components/material/NavigationBarKt;\nHSPLtachiyomi/presentation/core/components/material/NavigationBarKt;->NavigationBar-HsRjFd4(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nHPLtachiyomi/presentation/core/components/material/NavigationBarKt;->NavigationBar-HsRjFd4(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V\nLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;\nHSPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;I)V\nPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;I)V\nHSPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$2;\nHSPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$2;-><init>(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V\nPLtachiyomi/presentation/core/components/material/NavigationBarKt$NavigationBar$2;-><init>(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V\nLtachiyomi/presentation/core/components/material/Padding;\nHSPLtachiyomi/presentation/core/components/material/Padding;-><init>()V\nPLtachiyomi/presentation/core/components/material/Padding;-><init>()V\nHSPLtachiyomi/presentation/core/components/material/Padding;->getSmall-D9Ej5fM()F\nPLtachiyomi/presentation/core/components/material/Padding;->getSmall-D9Ej5fM()F\nLtachiyomi/presentation/core/components/material/ScaffoldKt;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ScaffoldKt;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->Scaffold-UynuKms(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt;->Scaffold-UynuKms(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->access$ScaffoldLayout-sqSdXeA(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt;->access$ScaffoldLayout-sqSdXeA(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt;->getLocalFabPlacement()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nPLtachiyomi/presentation/core/components/material/ScaffoldKt;->getLocalFabPlacement()Landroidx/compose/runtime/StaticProvidableCompositionLocal;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;-><init>()V\nPLtachiyomi/presentation/core/components/material/ScaffoldKt$LocalFabPlacement$1;-><init>()V\nLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;-><init>(Landroidx/compose/foundation/layout/MutableWindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;-><init>(Landroidx/compose/foundation/layout/MutableWindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;-><init>(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/MutableWindowInsets;Lkotlin/jvm/functions/Function2;IILkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;-><init>(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/MutableWindowInsets;Lkotlin/jvm/functions/Function2;IILkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V\nPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/material3/TopAppBarScrollBehavior;I)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$3;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$3;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;III)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$Scaffold$3;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;III)V\nLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;-><init>(IILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V\nPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;-><init>(IILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/ArrayList;ILjava/util/ArrayList;ILkotlin/jvm/functions/Function3;I)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/ArrayList;ILjava/util/ArrayList;ILkotlin/jvm/functions/Function3;I)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;-><init>(Ltachiyomi/presentation/core/components/material/FabPlacement;Lkotlin/jvm/functions/Function2;I)V\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;-><init>(Ltachiyomi/presentation/core/components/material/FabPlacement;Lkotlin/jvm/functions/Function2;I)V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/components/material/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;\nHSPLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;-><clinit>()V\nPLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;-><clinit>()V\nHSPLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;-><init>(Ljava/lang/String;I)V\nPLtachiyomi/presentation/core/components/material/ScaffoldLayoutContent;-><init>(Ljava/lang/String;I)V\nLtachiyomi/presentation/core/screens/EmptyScreenAction;\nHSPLtachiyomi/presentation/core/screens/EmptyScreenAction;-><init>(ILandroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V\nPLtachiyomi/presentation/core/screens/EmptyScreenAction;-><init>(ILandroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V\nHSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector;\nPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector;\nHSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getOnClick()Lkotlin/jvm/functions/Function0;\nPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getOnClick()Lkotlin/jvm/functions/Function0;\nHSPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getStringResId()I\nPLtachiyomi/presentation/core/screens/EmptyScreenAction;->getStringResId()I\nLtachiyomi/presentation/core/screens/EmptyScreenKt;\nHSPLtachiyomi/presentation/core/screens/EmptyScreenKt;-><clinit>()V\nPLtachiyomi/presentation/core/screens/EmptyScreenKt;-><clinit>()V\nHSPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(ILandroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V\nHPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(ILandroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V\nHSPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V\nHPLtachiyomi/presentation/core/screens/EmptyScreenKt;->EmptyScreen(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;Landroidx/compose/runtime/Composer;II)V\nLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$1;\nHSPLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$1;-><init>(ILandroidx/compose/ui/Modifier;Ljava/util/List;II)V\nPLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$1;-><init>(ILandroidx/compose/ui/Modifier;Ljava/util/List;II)V\nLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$3;\nHSPLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$3;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;II)V\nPLtachiyomi/presentation/core/screens/EmptyScreenKt$EmptyScreen$3;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/util/List;II)V\nLtachiyomi/presentation/core/screens/LoadingScreenKt;\nHSPLtachiyomi/presentation/core/screens/LoadingScreenKt;->LoadingScreen(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V\nPLtachiyomi/presentation/core/screens/LoadingScreenKt;->LoadingScreen(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V\nLtachiyomi/presentation/core/util/ModifierKt;\nHSPLtachiyomi/presentation/core/util/ModifierKt;->secondaryItemAlpha(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nHPLtachiyomi/presentation/core/util/ModifierKt;->secondaryItemAlpha(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;\nLtachiyomi/presentation/core/util/PreferenceKt;\nHSPLtachiyomi/presentation/core/util/PreferenceKt;->collectAsState(Ltachiyomi/core/preference/Preference;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nHPLtachiyomi/presentation/core/util/PreferenceKt;->collectAsState(Ltachiyomi/core/preference/Preference;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState;\nLtachiyomi/presentation/core/util/ScrollbarKt;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt;-><clinit>()V\nPLtachiyomi/presentation/core/util/ScrollbarKt;-><clinit>()V\nHSPLtachiyomi/presentation/core/util/ScrollbarKt;->drawVerticalScrollbar(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZF)Landroidx/compose/ui/Modifier;\nHPLtachiyomi/presentation/core/util/ScrollbarKt;->drawVerticalScrollbar(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZF)Landroidx/compose/ui/Modifier;\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/gestures/Orientation;F)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/gestures/Orientation;F)V\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLkotlin/jvm/functions/Function6;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLkotlin/jvm/functions/Function6;)V\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;-><init>(Lkotlinx/coroutines/flow/MutableSharedFlow;Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;-><init>(Lkotlinx/coroutines/flow/MutableSharedFlow;Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1$1;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1$1;-><init>(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$1$1;-><init>(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;-><init>(Lkotlin/jvm/functions/Function6;ZZFJLandroidx/compose/animation/core/Animatable;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;-><init>(Lkotlin/jvm/functions/Function6;ZZFJLandroidx/compose/animation/core/Animatable;)V\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2$1;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2$1;-><init>(Landroidx/compose/animation/core/Animatable;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$2$1;-><init>(Landroidx/compose/animation/core/Animatable;)V\nLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$nestedScrollConnection$1$1;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$nestedScrollConnection$1$1;-><init>(Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/flow/MutableSharedFlow;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$drawScrollbar$2$nestedScrollConnection$1$1;-><init>(Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/flow/MutableSharedFlow;)V\nLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;-><init>(ZJJJLkotlin/jvm/functions/Function0;)V\nPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;-><init>(ZJJJLkotlin/jvm/functions/Function0;)V\nHSPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nHPLtachiyomi/presentation/core/util/ScrollbarKt$onDrawScrollbar$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/widget/TachiyomiWidgetManager;\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager;-><init>(Ltachiyomi/domain/updates/interactor/GetUpdates;Leu/kanade/tachiyomi/core/security/SecurityPreferences;)V\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager;-><init>(Ltachiyomi/domain/updates/interactor/GetUpdates;Leu/kanade/tachiyomi/core/security/SecurityPreferences;)V\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager;->init(Landroid/content/Context;Landroidx/lifecycle/LifecycleCoroutineScopeImpl;)V\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager;->init(Landroid/content/Context;Landroidx/lifecycle/LifecycleCoroutineScopeImpl;)V\nLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;-><init>(Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;-><init>(Lkotlin/coroutines/Continuation;)V\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;-><init>(Landroid/content/Context;Lkotlin/coroutines/Continuation;)V\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\nHSPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/presentation/widget/TachiyomiWidgetManager$init$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;-><clinit>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;-><clinit>()V\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;-><init>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget;-><init>()V\nLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;-><init>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;-><init>()V\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;-><init>(I)V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$Companion;-><init>(I)V\nLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;-><clinit>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;-><init>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$1;-><init>()V\nLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;-><clinit>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;-><init>()V\nPLtachiyomi/presentation/widget/UpdatesGridGlanceWidget$special$$inlined$injectLazy$2;-><init>()V\nLtachiyomi/source/local/LocalSource;\nHSPLtachiyomi/source/local/LocalSource;-><clinit>()V\nPLtachiyomi/source/local/LocalSource;-><clinit>()V\nHSPLtachiyomi/source/local/LocalSource;-><init>(Landroid/content/Context;Ltachiyomi/source/local/io/LocalSourceFileSystem;Ltachiyomi/source/local/image/LocalCoverManager;)V\nPLtachiyomi/source/local/LocalSource;-><init>(Landroid/content/Context;Ltachiyomi/source/local/io/LocalSourceFileSystem;Ltachiyomi/source/local/image/LocalCoverManager;)V\nLtachiyomi/source/local/LocalSource$$ExternalSyntheticLambda0;\nHSPLtachiyomi/source/local/LocalSource$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/functions/Function2;I)V\nPLtachiyomi/source/local/LocalSource$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/functions/Function2;I)V\nLtachiyomi/source/local/LocalSource$Companion;\nHSPLtachiyomi/source/local/LocalSource$Companion;-><init>()V\nPLtachiyomi/source/local/LocalSource$Companion;-><init>()V\nHSPLtachiyomi/source/local/LocalSource$Companion;-><init>(I)V\nPLtachiyomi/source/local/LocalSource$Companion;-><init>(I)V\nLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;\nHSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;-><clinit>()V\nPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;-><clinit>()V\nHSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;-><init>()V\nPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$1;-><init>()V\nLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;\nHSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;-><clinit>()V\nPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;-><clinit>()V\nHSPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;-><init>()V\nPLtachiyomi/source/local/LocalSource$special$$inlined$injectLazy$2;-><init>()V\nLtachiyomi/source/local/filter/OrderBy;\nHSPLtachiyomi/source/local/filter/OrderBy;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V\nPLtachiyomi/source/local/filter/OrderBy;-><init>(Landroid/content/Context;Leu/kanade/tachiyomi/source/model/Filter$Sort$Selection;)V\nLtachiyomi/source/local/filter/OrderBy$Latest;\nHSPLtachiyomi/source/local/filter/OrderBy$Latest;-><init>(Landroid/content/Context;)V\nPLtachiyomi/source/local/filter/OrderBy$Latest;-><init>(Landroid/content/Context;)V\nLtachiyomi/source/local/filter/OrderBy$Popular;\nHSPLtachiyomi/source/local/filter/OrderBy$Popular;-><init>(Landroid/content/Context;)V\nPLtachiyomi/source/local/filter/OrderBy$Popular;-><init>(Landroid/content/Context;)V\nLtachiyomi/source/local/image/LocalCoverManager;\nHSPLtachiyomi/source/local/image/LocalCoverManager;-><init>(Landroid/app/Application;Ltachiyomi/source/local/io/LocalSourceFileSystem;)V\nPLtachiyomi/source/local/image/LocalCoverManager;-><init>(Landroid/app/Application;Ltachiyomi/source/local/io/LocalSourceFileSystem;)V\nLtachiyomi/source/local/io/Format$UnknownFormatException;\nLtachiyomi/source/local/io/LocalSourceFileSystem;\nHSPLtachiyomi/source/local/io/LocalSourceFileSystem;-><init>(Landroid/app/Application;)V\nPLtachiyomi/source/local/io/LocalSourceFileSystem;-><init>(Landroid/app/Application;)V\nLtachiyomi/view/HistoryViewQueries;\nHSPLtachiyomi/view/HistoryViewQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V\nPLtachiyomi/view/HistoryViewQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/History$Adapter;)V\nHSPLtachiyomi/view/HistoryViewQueries;->access$getDriver(Ltachiyomi/view/HistoryViewQueries;)Lapp/cash/sqldelight/db/SqlDriver;\nPLtachiyomi/view/HistoryViewQueries;->access$getDriver(Ltachiyomi/view/HistoryViewQueries;)Lapp/cash/sqldelight/db/SqlDriver;\nHSPLtachiyomi/view/HistoryViewQueries;->history(Ljava/lang/String;Lkotlin/jvm/functions/Function11;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/view/HistoryViewQueries;->history(Ljava/lang/String;Lkotlin/jvm/functions/Function11;)Lapp/cash/sqldelight/Query;\nLtachiyomi/view/HistoryViewQueries$HistoryQuery;\nHSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;-><init>(Ltachiyomi/view/HistoryViewQueries;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V\nPLtachiyomi/view/HistoryViewQueries$HistoryQuery;-><init>(Ltachiyomi/view/HistoryViewQueries;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V\nHSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nHSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nHSPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->getQuery()Ljava/lang/String;\nPLtachiyomi/view/HistoryViewQueries$HistoryQuery;->getQuery()Ljava/lang/String;\nLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;\nHSPLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;-><init>(Ltachiyomi/view/HistoryViewQueries$HistoryQuery;)V\nPLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;-><init>(Ltachiyomi/view/HistoryViewQueries$HistoryQuery;)V\nHSPLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/view/HistoryViewQueries$HistoryQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/view/HistoryViewQueries$history$1;\nHSPLtachiyomi/view/HistoryViewQueries$history$1;-><init>(Lkotlin/jvm/functions/Function11;Ltachiyomi/view/HistoryViewQueries;)V\nPLtachiyomi/view/HistoryViewQueries$history$1;-><init>(Lkotlin/jvm/functions/Function11;Ltachiyomi/view/HistoryViewQueries;)V\nLtachiyomi/view/LibraryViewQueries;\nHSPLtachiyomi/view/LibraryViewQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V\nPLtachiyomi/view/LibraryViewQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;Ltachiyomi/data/Mangas$Adapter;)V\nHSPLtachiyomi/view/LibraryViewQueries;->library(Lkotlin/jvm/functions/FunctionN;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/view/LibraryViewQueries;->library(Lkotlin/jvm/functions/FunctionN;)Lapp/cash/sqldelight/Query;\nLtachiyomi/view/LibraryViewQueries$library$1;\nHSPLtachiyomi/view/LibraryViewQueries$library$1;-><init>(Lkotlin/jvm/functions/FunctionN;Ltachiyomi/view/LibraryViewQueries;)V\nPLtachiyomi/view/LibraryViewQueries$library$1;-><init>(Lkotlin/jvm/functions/FunctionN;Ltachiyomi/view/LibraryViewQueries;)V\nLtachiyomi/view/UpdatesViewQueries;\nHSPLtachiyomi/view/UpdatesViewQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nPLtachiyomi/view/UpdatesViewQueries;-><init>(Lapp/cash/sqldelight/db/SqlDriver;)V\nHSPLtachiyomi/view/UpdatesViewQueries;->access$getDriver(Ltachiyomi/view/UpdatesViewQueries;)Lapp/cash/sqldelight/db/SqlDriver;\nPLtachiyomi/view/UpdatesViewQueries;->access$getDriver(Ltachiyomi/view/UpdatesViewQueries;)Lapp/cash/sqldelight/db/SqlDriver;\nHSPLtachiyomi/view/UpdatesViewQueries;->getRecentUpdates(JJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/view/UpdatesViewQueries;->getRecentUpdates(JJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query;\nHSPLtachiyomi/view/UpdatesViewQueries;->getUpdatesByReadStatus(ZJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query;\nPLtachiyomi/view/UpdatesViewQueries;->getUpdatesByReadStatus(ZJLkotlin/jvm/functions/Function14;)Lapp/cash/sqldelight/Query;\nLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;-><init>(Ltachiyomi/view/UpdatesViewQueries;JJLkotlin/jvm/functions/Function1;)V\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;-><init>(Ltachiyomi/view/UpdatesViewQueries;JJLkotlin/jvm/functions/Function1;)V\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getAfter()J\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getAfter()J\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getLimit()J\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;->getLimit()J\nLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;-><init>(Ltachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;)V\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;-><init>(Ltachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery;)V\nHSPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/view/UpdatesViewQueries$GetRecentUpdatesQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;-><init>(Ltachiyomi/view/UpdatesViewQueries;ZJLkotlin/jvm/functions/Function1;)V\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;-><init>(Ltachiyomi/view/UpdatesViewQueries;ZJLkotlin/jvm/functions/Function1;)V\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->addListener(Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;)V\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult$Value;\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getAfter()J\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getAfter()J\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getRead()Z\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;->getRead()Z\nLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;-><init>(Ltachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;)V\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;-><init>(Ltachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery;)V\nHSPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nPLtachiyomi/view/UpdatesViewQueries$GetUpdatesByReadStatusQuery$execute$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;\nLtachiyomi/view/UpdatesViewQueries$getRecentUpdates$1;\nHSPLtachiyomi/view/UpdatesViewQueries$getRecentUpdates$1;-><init>(Lkotlin/jvm/functions/Function14;)V\nPLtachiyomi/view/UpdatesViewQueries$getRecentUpdates$1;-><init>(Lkotlin/jvm/functions/Function14;)V\nLtachiyomi/view/UpdatesViewQueries$getUpdatesByReadStatus$1;\nHSPLtachiyomi/view/UpdatesViewQueries$getUpdatesByReadStatus$1;-><init>(Lkotlin/jvm/functions/Function14;)V\nPLtachiyomi/view/UpdatesViewQueries$getUpdatesByReadStatus$1;-><init>(Lkotlin/jvm/functions/Function14;)V\nLuy/kohesive/injekt/InjektKt;\nHSPLuy/kohesive/injekt/InjektKt;-><clinit>()V\nPLuy/kohesive/injekt/InjektKt;-><clinit>()V\nHSPLuy/kohesive/injekt/InjektKt;->getInjekt()Luy/kohesive/injekt/api/InjektScope;\nPLuy/kohesive/injekt/InjektKt;->getInjekt()Luy/kohesive/injekt/api/InjektScope;\nLuy/kohesive/injekt/api/FullTypeReference;\nHSPLuy/kohesive/injekt/api/FullTypeReference;-><init>()V\nHPLuy/kohesive/injekt/api/FullTypeReference;-><init>()V\nHSPLuy/kohesive/injekt/api/FullTypeReference;->getType()Ljava/lang/reflect/Type;\nPLuy/kohesive/injekt/api/FullTypeReference;->getType()Ljava/lang/reflect/Type;\nLuy/kohesive/injekt/api/InjektFactory;\nLuy/kohesive/injekt/api/InjektModule;\nLuy/kohesive/injekt/api/InjektModule$DefaultImpls;\nHSPLuy/kohesive/injekt/api/InjektModule$DefaultImpls;->registerWith(Luy/kohesive/injekt/api/InjektModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLuy/kohesive/injekt/api/InjektModule$DefaultImpls;->registerWith(Luy/kohesive/injekt/api/InjektModule;Luy/kohesive/injekt/api/InjektRegistrar;)V\nLuy/kohesive/injekt/api/InjektRegistrar;\nLuy/kohesive/injekt/api/InjektRegistrar$DefaultImpls;\nHSPLuy/kohesive/injekt/api/InjektRegistrar$DefaultImpls;->importModule(Luy/kohesive/injekt/api/InjektRegistrar;Luy/kohesive/injekt/api/InjektModule;)V\nPLuy/kohesive/injekt/api/InjektRegistrar$DefaultImpls;->importModule(Luy/kohesive/injekt/api/InjektRegistrar;Luy/kohesive/injekt/api/InjektModule;)V\nLuy/kohesive/injekt/api/InjektRegistry;\nLuy/kohesive/injekt/api/InjektScope;\nHSPLuy/kohesive/injekt/api/InjektScope;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nPLuy/kohesive/injekt/api/InjektScope;-><init>(Luy/kohesive/injekt/api/InjektRegistrar;)V\nHSPLuy/kohesive/injekt/api/InjektScope;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object;\nPLuy/kohesive/injekt/api/InjektScope;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object;\nHSPLuy/kohesive/injekt/api/InjektScope;->importModule(Luy/kohesive/injekt/api/InjektModule;)V\nPLuy/kohesive/injekt/api/InjektScope;->importModule(Luy/kohesive/injekt/api/InjektModule;)V\nLuy/kohesive/injekt/api/TypeReference;\nLuy/kohesive/injekt/registry/default/DefaultRegistrar;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;-><init>()V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;-><init>()V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getExistingValues$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Ljava/util/concurrent/ConcurrentHashMap;\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getExistingValues$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Ljava/util/concurrent/ConcurrentHashMap;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getNOKEY$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Luy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->access$getNOKEY$p(Luy/kohesive/injekt/registry/default/DefaultRegistrar;)Luy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingleton(Luy/kohesive/injekt/api/TypeReference;Ljava/lang/Object;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingleton(Luy/kohesive/injekt/api/TypeReference;Ljava/lang/Object;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingletonFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->addSingletonFactory(Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object;\nHPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->getInstance(Ljava/lang/reflect/Type;)Ljava/lang/Object;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->importModule(Luy/kohesive/injekt/api/InjektModule;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar;->importModule(Luy/kohesive/injekt/api/InjektModule;)V\nLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;-><init>(Ljava/lang/reflect/Type;Ljava/lang/Object;)V\nHPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;-><init>(Ljava/lang/reflect/Type;Ljava/lang/Object;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->equals(Ljava/lang/Object;)Z\nHPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->equals(Ljava/lang/Object;)Z\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->hashCode()I\nHPLuy/kohesive/injekt/registry/default/DefaultRegistrar$Instance;->hashCode()I\nLuy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;-><init>()V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$NOKEY$1;-><init>()V\nLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;-><init>(Ljava/lang/Object;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;-><init>(Ljava/lang/Object;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;->invoke()Ljava/lang/Object;\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingleton$1;->invoke()Ljava/lang/Object;\nLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;-><init>(Luy/kohesive/injekt/registry/default/DefaultRegistrar;Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;-><init>(Luy/kohesive/injekt/registry/default/DefaultRegistrar;Luy/kohesive/injekt/api/TypeReference;Lkotlin/jvm/functions/Function0;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;->invoke()Ljava/lang/Object;\nHPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;->invoke()Ljava/lang/Object;\nLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;-><init>(Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;)V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;-><init>(Luy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1;)V\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;->invoke()Ljava/lang/Object;\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$addSingletonFactory$1$$special$$inlined$getOrPut$lambda$1;->invoke()Ljava/lang/Object;\nLuy/kohesive/injekt/registry/default/DefaultRegistrar$threadedValues$1;\nHSPLuy/kohesive/injekt/registry/default/DefaultRegistrar$threadedValues$1;-><init>()V\nPLuy/kohesive/injekt/registry/default/DefaultRegistrar$threadedValues$1;-><init>()V"
  },
  {
    "path": "app/src/main/java/aniyomi/util/DataSaver.kt",
    "content": "package aniyomi.util\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.source.service.SourcePreferences.DataSaver.BANDWIDTH_HERO\nimport eu.kanade.domain.source.service.SourcePreferences.DataSaver.NONE\nimport eu.kanade.domain.source.service.SourcePreferences.DataSaver.RESMUSH_IT\nimport eu.kanade.domain.source.service.SourcePreferences.DataSaver.WSRV_NL\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport okhttp3.OkHttpClient\nimport okhttp3.Response\nimport tachiyomi.core.common.preference.Preference\nimport uy.kohesive.injekt.injectLazy\nimport java.net.URLEncoder\n\ninterface DataSaver {\n\n    fun compress(imageUrl: String): String\n\n    companion object {\n        val NoOp = object : DataSaver {\n            override fun compress(imageUrl: String): String {\n                return imageUrl\n            }\n        }\n\n        suspend fun HttpSource.getImage(page: Page, dataSaver: DataSaver): Response {\n            val imageUrl = page.imageUrl ?: return getImage(page)\n            page.imageUrl = dataSaver.compress(imageUrl)\n            return try {\n                getImage(page)\n            } finally {\n                page.imageUrl = imageUrl\n            }\n        }\n    }\n}\n\nfun DataSaver(source: MangaSource, preferences: SourcePreferences): DataSaver {\n    val dataSaver = preferences.dataSaver().get()\n    if (dataSaver != NONE && source.id.toString() in preferences.dataSaverExcludedSources().get()) {\n        return DataSaver.NoOp\n    }\n    return when (dataSaver) {\n        NONE -> DataSaver.NoOp\n        BANDWIDTH_HERO -> BandwidthHeroDataSaver(preferences)\n        WSRV_NL -> WsrvNlDataSaver(preferences)\n        RESMUSH_IT -> ReSmushItDataSaver(preferences)\n    }\n}\n\nprivate class BandwidthHeroDataSaver(preferences: SourcePreferences) : DataSaver {\n    private val dataSavedServer = preferences.dataSaverServer().get().trimEnd('/')\n\n    private val ignoreJpg = preferences.dataSaverIgnoreJpeg().get()\n    private val ignoreGif = preferences.dataSaverIgnoreGif().get()\n\n    private val format = preferences.dataSaverImageFormatJpeg().toIntRepresentation()\n    private val quality = preferences.dataSaverImageQuality().get()\n    private val colorBW = preferences.dataSaverColorBW().toIntRepresentation()\n\n    override fun compress(imageUrl: String): String {\n        return if (dataSavedServer.isNotBlank() && !imageUrl.contains(dataSavedServer)) {\n            when {\n                imageUrl.contains(\".jpeg\", true) || imageUrl.contains(\".jpg\", true) -> if (ignoreJpg) {\n                    imageUrl\n                } else {\n                    getUrl(\n                        imageUrl,\n                    )\n                }\n                imageUrl.contains(\".gif\", true) -> if (ignoreGif) imageUrl else getUrl(imageUrl)\n                else -> getUrl(imageUrl)\n            }\n        } else {\n            imageUrl\n        }\n    }\n\n    private fun getUrl(imageUrl: String): String {\n        val escapedUrl = URLEncoder.encode(imageUrl, \"utf-8\")\n        // Network Request sent for the Bandwidth Hero Proxy server\n        return \"$dataSavedServer/?jpg=$format&l=$quality&bw=$colorBW&url=$escapedUrl\"\n    }\n\n    private fun Preference<Boolean>.toIntRepresentation() = if (get()) \"1\" else \"0\"\n}\n\nprivate class WsrvNlDataSaver(preferences: SourcePreferences) : DataSaver {\n    private val ignoreJpg = preferences.dataSaverIgnoreJpeg().get()\n    private val ignoreGif = preferences.dataSaverIgnoreGif().get()\n\n    private val format = preferences.dataSaverImageFormatJpeg().get()\n    private val quality = preferences.dataSaverImageQuality().get()\n\n    override fun compress(imageUrl: String): String {\n        return when {\n            imageUrl.contains(\".jpeg\", true) || imageUrl.contains(\".jpg\", true) -> if (ignoreJpg) {\n                imageUrl\n            } else {\n                getUrl(\n                    imageUrl,\n                )\n            }\n            imageUrl.contains(\".gif\", true) -> if (ignoreGif) imageUrl else getUrl(imageUrl)\n            else -> getUrl(imageUrl)\n        }\n    }\n\n    private fun getUrl(imageUrl: String): String {\n        // Network Request sent to wsrv\n        return \"https://wsrv.nl/?url=$imageUrl\" + if (imageUrl.contains(\".webp\", true) ||\n            imageUrl.contains(\n                \".gif\",\n                true,\n            )\n        ) {\n            if (!format) {\n                // Preserve output image extension for animated images(.webp and .gif)\n                \"&q=$quality&n=-1\"\n            } else {\n                // Do not preserve output Extension if User asked to convert into Jpeg\n                \"&output=jpg&q=$quality&n=-1\"\n            }\n        } else {\n            if (format) {\n                \"&output=jpg&q=$quality\"\n            } else {\n                \"&output=webp&q=$quality\"\n            }\n        }\n    }\n}\n\nprivate class ReSmushItDataSaver(preferences: SourcePreferences) : DataSaver {\n\n    private val network: NetworkHelper by injectLazy()\n\n    private val client: OkHttpClient\n        get() = network.client\n\n    private val ignoreJpg = preferences.dataSaverIgnoreJpeg().get()\n    private val ignoreGif = preferences.dataSaverIgnoreGif().get()\n\n    private val quality = preferences.dataSaverImageQuality().get()\n\n    override fun compress(imageUrl: String): String {\n        return when {\n            imageUrl.contains(\".jpeg\", true) || imageUrl.contains(\".jpg\", true) -> if (ignoreJpg) {\n                imageUrl\n            } else {\n                getUrl(\n                    imageUrl,\n                )\n            }\n            imageUrl.contains(\".gif\", true) -> if (ignoreGif) imageUrl else getUrl(imageUrl)\n            else -> getUrl(imageUrl)\n        }\n    }\n\n    private fun getUrl(imageUrl: String): String {\n        // Network Request sent to resmush\n        return client.newCall(GET(\"http://api.resmush.it/ws.php?img=$imageUrl&qlty=$quality\")).execute()\n            .body.string().substringAfter(\"\\\"dest\\\":\\\"\").substringBefore(\"\\\",\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/core/preference/CheckboxState.kt",
    "content": "package eu.kanade.core.preference\n\nimport androidx.compose.ui.state.ToggleableState\nimport tachiyomi.core.common.preference.CheckboxState\n\nfun <T> CheckboxState.TriState<T>.asToggleableState(): ToggleableState = when (this) {\n    is CheckboxState.TriState.Exclude -> ToggleableState.Indeterminate\n    is CheckboxState.TriState.Include -> ToggleableState.On\n    is CheckboxState.TriState.None -> ToggleableState.Off\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/core/preference/PreferenceMutableState.kt",
    "content": "package eu.kanade.core.preference\n\nimport androidx.compose.runtime.MutableState\nimport androidx.compose.runtime.mutableStateOf\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport tachiyomi.core.common.preference.Preference\n\nclass PreferenceMutableState<T>(\n    private val preference: Preference<T>,\n    scope: CoroutineScope,\n) : MutableState<T> {\n\n    private val state = mutableStateOf(preference.get())\n\n    init {\n        preference.changes()\n            .onEach { state.value = it }\n            .launchIn(scope)\n    }\n\n    override var value: T\n        get() = state.value\n        set(value) {\n            preference.set(value)\n        }\n\n    override fun component1(): T {\n        return state.value\n    }\n\n    override fun component2(): (T) -> Unit {\n        return preference::set\n    }\n}\n\nfun <T> Preference<T>.asState(scope: CoroutineScope) = PreferenceMutableState(this, scope)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/core/util/AnimeSourceUtil.kt",
    "content": "package eu.kanade.core.util\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.remember\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun ifAnimeSourcesLoaded(): Boolean {\n    return remember { Injekt.get<AnimeSourceManager>().isInitialized }.collectAsState().value\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/core/util/CollectionUtils.kt",
    "content": "package eu.kanade.core.util\n\nimport androidx.compose.ui.util.fastFilter\nimport androidx.compose.ui.util.fastForEach\nimport kotlin.contracts.ExperimentalContracts\nimport kotlin.contracts.contract\n\nfun <T : R, R : Any> List<T>.insertSeparators(\n    generator: (before: T?, after: T?) -> R?,\n): List<R> {\n    if (isEmpty()) return emptyList()\n    val newList = mutableListOf<R>()\n    for (i in -1..lastIndex) {\n        val before = getOrNull(i)\n        before?.let(newList::add)\n        val after = getOrNull(i + 1)\n        val separator = generator.invoke(before, after)\n        separator?.let(newList::add)\n    }\n    return newList\n}\n\n/**\n * Similar to [eu.kanade.core.util.insertSeparators] but iterates from last to first element\n */\nfun <T : R, R : Any> List<T>.insertSeparatorsReversed(\n    generator: (before: T?, after: T?) -> R?,\n): List<R> {\n    if (isEmpty()) return emptyList()\n    val newList = mutableListOf<R>()\n    for (i in size downTo 0) {\n        val after = getOrNull(i)\n        after?.let(newList::add)\n        val before = getOrNull(i - 1)\n        val separator = generator.invoke(before, after)\n        separator?.let(newList::add)\n    }\n    return newList.asReversed()\n}\n\nfun <E> HashSet<E>.addOrRemove(value: E, shouldAdd: Boolean) {\n    if (shouldAdd) {\n        add(value)\n    } else {\n        remove(value)\n    }\n}\n\n/**\n * Returns a list containing all elements not matching the given [predicate].\n *\n * **Do not use for collections that come from public APIs**, since they may not support random\n * access in an efficient way, and this method may actually be a lot slower. Only use for\n * collections that are created by code we control and are known to support random access.\n */\n@OptIn(ExperimentalContracts::class)\ninline fun <T> List<T>.fastFilterNot(predicate: (T) -> Boolean): List<T> {\n    contract { callsInPlace(predicate) }\n    return fastFilter { !predicate(it) }\n}\n\n/**\n * Splits the original collection into pair of lists,\n * where *first* list contains elements for which [predicate] yielded `true`,\n * while *second* list contains elements for which [predicate] yielded `false`.\n *\n * **Do not use for collections that come from public APIs**, since they may not support random\n * access in an efficient way, and this method may actually be a lot slower. Only use for\n * collections that are created by code we control and are known to support random access.\n */\n@OptIn(ExperimentalContracts::class)\ninline fun <T> List<T>.fastPartition(predicate: (T) -> Boolean): Pair<List<T>, List<T>> {\n    contract { callsInPlace(predicate) }\n    val first = ArrayList<T>()\n    val second = ArrayList<T>()\n    fastForEach {\n        if (predicate(it)) {\n            first.add(it)\n        } else {\n            second.add(it)\n        }\n    }\n    return Pair(first, second)\n}\n\n/**\n * Returns the number of entries not matching the given [predicate].\n *\n * **Do not use for collections that come from public APIs**, since they may not support random\n * access in an efficient way, and this method may actually be a lot slower. Only use for\n * collections that are created by code we control and are known to support random access.\n */\n@OptIn(ExperimentalContracts::class)\ninline fun <T> List<T>.fastCountNot(predicate: (T) -> Boolean): Int {\n    contract { callsInPlace(predicate) }\n    var count = size\n    fastForEach { if (predicate(it)) --count }\n    return count\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/core/util/MangaSourceUtil.kt",
    "content": "package eu.kanade.core.util\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.remember\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun ifMangaSourcesLoaded(): Boolean {\n    return remember { Injekt.get<MangaSourceManager>().isInitialized }.collectAsState().value\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/core/util/RxJavaExtensions.kt",
    "content": "package eu.kanade.core.util\n\nimport kotlinx.coroutines.channels.awaitClose\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.callbackFlow\nimport rx.Observable\nimport rx.Observer\n\nfun <T : Any> Observable<T>.asFlow(): Flow<T> = callbackFlow {\n    val observer = object : Observer<T> {\n        override fun onNext(t: T) {\n            trySend(t)\n        }\n\n        override fun onError(e: Throwable) {\n            close(e)\n        }\n\n        override fun onCompleted() {\n            close()\n        }\n    }\n    val subscription = subscribe(observer)\n    awaitClose { subscription.unsubscribe() }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/DomainModule.kt",
    "content": "package eu.kanade.domain\n\nimport eu.kanade.domain.download.anime.interactor.DeleteEpisodeDownload\nimport eu.kanade.domain.download.manga.interactor.DeleteChapterDownload\nimport eu.kanade.domain.entries.anime.interactor.SetAnimeViewerFlags\nimport eu.kanade.domain.entries.anime.interactor.SyncSeasonsWithSource\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.manga.interactor.GetExcludedScanlators\nimport eu.kanade.domain.entries.manga.interactor.SetExcludedScanlators\nimport eu.kanade.domain.entries.manga.interactor.SetMangaViewerFlags\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionLanguages\nimport eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionSources\nimport eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionsByType\nimport eu.kanade.domain.extension.anime.interactor.TrustAnimeExtension\nimport eu.kanade.domain.extension.manga.interactor.GetExtensionSources\nimport eu.kanade.domain.extension.manga.interactor.GetMangaExtensionLanguages\nimport eu.kanade.domain.extension.manga.interactor.GetMangaExtensionsByType\nimport eu.kanade.domain.extension.manga.interactor.TrustMangaExtension\nimport eu.kanade.domain.items.chapter.interactor.GetAvailableScanlators\nimport eu.kanade.domain.items.chapter.interactor.SetReadStatus\nimport eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource\nimport eu.kanade.domain.items.episode.interactor.SetSeenStatus\nimport eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource\nimport eu.kanade.domain.source.anime.interactor.GetAnimeIncognitoState\nimport eu.kanade.domain.source.anime.interactor.GetAnimeSourcesWithFavoriteCount\nimport eu.kanade.domain.source.anime.interactor.GetEnabledAnimeSources\nimport eu.kanade.domain.source.anime.interactor.GetLanguagesWithAnimeSources\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeIncognito\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeSource\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeSourcePin\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.domain.source.interactor.ToggleLanguage\nimport eu.kanade.domain.source.manga.interactor.GetEnabledMangaSources\nimport eu.kanade.domain.source.manga.interactor.GetLanguagesWithMangaSources\nimport eu.kanade.domain.source.manga.interactor.GetMangaIncognitoState\nimport eu.kanade.domain.source.manga.interactor.GetMangaSourcesWithFavoriteCount\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaIncognito\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaSource\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaSourcePin\nimport eu.kanade.domain.track.anime.interactor.AddAnimeTracks\nimport eu.kanade.domain.track.anime.interactor.RefreshAnimeTracks\nimport eu.kanade.domain.track.anime.interactor.SyncEpisodeProgressWithTrack\nimport eu.kanade.domain.track.anime.interactor.TrackEpisode\nimport eu.kanade.domain.track.manga.interactor.AddMangaTracks\nimport eu.kanade.domain.track.manga.interactor.RefreshMangaTracks\nimport eu.kanade.domain.track.manga.interactor.SyncChapterProgressWithTrack\nimport eu.kanade.domain.track.manga.interactor.TrackChapter\nimport eu.kanade.tachiyomi.ui.player.utils.TrackSelect\nimport mihon.data.repository.anime.AnimeExtensionRepoRepositoryImpl\nimport mihon.data.repository.manga.MangaExtensionRepoRepositoryImpl\nimport mihon.domain.extensionrepo.anime.interactor.CreateAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.DeleteAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepoCount\nimport mihon.domain.extensionrepo.anime.interactor.ReplaceAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.UpdateAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.manga.interactor.CreateMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.DeleteMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepoCount\nimport mihon.domain.extensionrepo.manga.interactor.ReplaceMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.UpdateMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport mihon.domain.extensionrepo.service.ExtensionRepoService\nimport mihon.domain.items.chapter.interactor.FilterChaptersForDownload\nimport mihon.domain.items.episode.interactor.FilterEpisodesForDownload\nimport mihon.domain.upcoming.anime.interactor.GetUpcomingAnime\nimport mihon.domain.upcoming.manga.interactor.GetUpcomingManga\nimport tachiyomi.data.category.anime.AnimeCategoryRepositoryImpl\nimport tachiyomi.data.category.manga.MangaCategoryRepositoryImpl\nimport tachiyomi.data.custombutton.CustomButtonRepositoryImpl\nimport tachiyomi.data.entries.anime.AnimeRepositoryImpl\nimport tachiyomi.data.entries.manga.MangaRepositoryImpl\nimport tachiyomi.data.history.anime.AnimeHistoryRepositoryImpl\nimport tachiyomi.data.history.manga.MangaHistoryRepositoryImpl\nimport tachiyomi.data.items.chapter.ChapterRepositoryImpl\nimport tachiyomi.data.items.episode.EpisodeRepositoryImpl\nimport tachiyomi.data.release.ReleaseServiceImpl\nimport tachiyomi.data.source.anime.AnimeSourceRepositoryImpl\nimport tachiyomi.data.source.anime.AnimeStubSourceRepositoryImpl\nimport tachiyomi.data.source.manga.MangaSourceRepositoryImpl\nimport tachiyomi.data.source.manga.MangaStubSourceRepositoryImpl\nimport tachiyomi.data.track.anime.AnimeTrackRepositoryImpl\nimport tachiyomi.data.track.manga.MangaTrackRepositoryImpl\nimport tachiyomi.data.updates.anime.AnimeUpdatesRepositoryImpl\nimport tachiyomi.data.updates.manga.MangaUpdatesRepositoryImpl\nimport tachiyomi.domain.category.anime.interactor.CreateAnimeCategoryWithName\nimport tachiyomi.domain.category.anime.interactor.DeleteAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.GetVisibleAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.HideAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.RenameAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.ReorderAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.ResetAnimeCategoryFlags\nimport tachiyomi.domain.category.anime.interactor.SetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.SetAnimeDisplayMode\nimport tachiyomi.domain.category.anime.interactor.SetSortModeForAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.UpdateAnimeCategory\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.manga.interactor.CreateMangaCategoryWithName\nimport tachiyomi.domain.category.manga.interactor.DeleteMangaCategory\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.GetVisibleMangaCategories\nimport tachiyomi.domain.category.manga.interactor.HideMangaCategory\nimport tachiyomi.domain.category.manga.interactor.RenameMangaCategory\nimport tachiyomi.domain.category.manga.interactor.ReorderMangaCategory\nimport tachiyomi.domain.category.manga.interactor.ResetMangaCategoryFlags\nimport tachiyomi.domain.category.manga.interactor.SetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.SetMangaDisplayMode\nimport tachiyomi.domain.category.manga.interactor.SetSortModeForMangaCategory\nimport tachiyomi.domain.category.manga.interactor.UpdateMangaCategory\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.custombuttons.interactor.CreateCustomButton\nimport tachiyomi.domain.custombuttons.interactor.DeleteCustomButton\nimport tachiyomi.domain.custombuttons.interactor.GetCustomButtons\nimport tachiyomi.domain.custombuttons.interactor.ReorderCustomButton\nimport tachiyomi.domain.custombuttons.interactor.ToggleFavoriteCustomButton\nimport tachiyomi.domain.custombuttons.interactor.UpdateCustomButton\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\nimport tachiyomi.domain.entries.anime.interactor.AnimeFetchInterval\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeByUrlAndSourceId\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeFavorites\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeWithEpisodesAndSeasons\nimport tachiyomi.domain.entries.anime.interactor.GetDuplicateLibraryAnime\nimport tachiyomi.domain.entries.anime.interactor.GetLibraryAnime\nimport tachiyomi.domain.entries.anime.interactor.NetworkToLocalAnime\nimport tachiyomi.domain.entries.anime.interactor.ResetAnimeViewerFlags\nimport tachiyomi.domain.entries.anime.interactor.SetAnimeEpisodeFlags\nimport tachiyomi.domain.entries.anime.interactor.SetAnimeSeasonFlags\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.entries.manga.interactor.GetDuplicateLibraryManga\nimport tachiyomi.domain.entries.manga.interactor.GetLibraryManga\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.interactor.GetMangaByUrlAndSourceId\nimport tachiyomi.domain.entries.manga.interactor.GetMangaFavorites\nimport tachiyomi.domain.entries.manga.interactor.GetMangaWithChapters\nimport tachiyomi.domain.entries.manga.interactor.MangaFetchInterval\nimport tachiyomi.domain.entries.manga.interactor.NetworkToLocalManga\nimport tachiyomi.domain.entries.manga.interactor.ResetMangaViewerFlags\nimport tachiyomi.domain.entries.manga.interactor.SetMangaChapterFlags\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.domain.history.anime.interactor.GetAnimeHistory\nimport tachiyomi.domain.history.anime.interactor.GetNextEpisodes\nimport tachiyomi.domain.history.anime.interactor.RemoveAnimeHistory\nimport tachiyomi.domain.history.anime.interactor.UpsertAnimeHistory\nimport tachiyomi.domain.history.anime.repository.AnimeHistoryRepository\nimport tachiyomi.domain.history.manga.interactor.GetMangaHistory\nimport tachiyomi.domain.history.manga.interactor.GetNextChapters\nimport tachiyomi.domain.history.manga.interactor.GetTotalReadDuration\nimport tachiyomi.domain.history.manga.interactor.RemoveMangaHistory\nimport tachiyomi.domain.history.manga.interactor.UpsertMangaHistory\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\nimport tachiyomi.domain.items.chapter.interactor.GetChapter\nimport tachiyomi.domain.items.chapter.interactor.GetChapterByUrlAndMangaId\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.interactor.SetMangaDefaultChapterFlags\nimport tachiyomi.domain.items.chapter.interactor.ShouldUpdateDbChapter\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\nimport tachiyomi.domain.items.episode.interactor.GetEpisode\nimport tachiyomi.domain.items.episode.interactor.GetEpisodeByUrlAndAnimeId\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.SetAnimeDefaultEpisodeFlags\nimport tachiyomi.domain.items.episode.interactor.ShouldUpdateDbEpisode\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\nimport tachiyomi.domain.items.season.interactor.GetAnimeSeasonsByParentId\nimport tachiyomi.domain.items.season.interactor.SetAnimeDefaultSeasonFlags\nimport tachiyomi.domain.items.season.interactor.ShouldUpdateDbSeason\nimport tachiyomi.domain.release.interactor.GetApplicationRelease\nimport tachiyomi.domain.release.service.ReleaseService\nimport tachiyomi.domain.source.anime.interactor.GetAnimeSourcesWithNonLibraryAnime\nimport tachiyomi.domain.source.anime.interactor.GetRemoteAnime\nimport tachiyomi.domain.source.anime.repository.AnimeSourceRepository\nimport tachiyomi.domain.source.anime.repository.AnimeStubSourceRepository\nimport tachiyomi.domain.source.manga.interactor.GetMangaSourcesWithNonLibraryManga\nimport tachiyomi.domain.source.manga.interactor.GetRemoteManga\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\nimport tachiyomi.domain.source.manga.repository.MangaStubSourceRepository\nimport tachiyomi.domain.track.anime.interactor.DeleteAnimeTrack\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.interactor.GetTracksPerAnime\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport tachiyomi.domain.track.anime.repository.AnimeTrackRepository\nimport tachiyomi.domain.track.manga.interactor.DeleteMangaTrack\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.interactor.GetTracksPerManga\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\nimport tachiyomi.domain.track.manga.repository.MangaTrackRepository\nimport tachiyomi.domain.updates.anime.interactor.GetAnimeUpdates\nimport tachiyomi.domain.updates.anime.repository.AnimeUpdatesRepository\nimport tachiyomi.domain.updates.manga.interactor.GetMangaUpdates\nimport tachiyomi.domain.updates.manga.repository.MangaUpdatesRepository\nimport uy.kohesive.injekt.api.InjektModule\nimport uy.kohesive.injekt.api.InjektRegistrar\nimport uy.kohesive.injekt.api.addFactory\nimport uy.kohesive.injekt.api.addSingletonFactory\nimport uy.kohesive.injekt.api.get\n\nclass DomainModule : InjektModule {\n\n    override fun InjektRegistrar.registerInjectables() {\n        addSingletonFactory<AnimeCategoryRepository> { AnimeCategoryRepositoryImpl(get()) }\n        addFactory { GetAnimeCategories(get()) }\n        addFactory { GetVisibleAnimeCategories(get()) }\n        addFactory { ResetAnimeCategoryFlags(get(), get()) }\n        addFactory { SetAnimeDisplayMode(get()) }\n        addFactory { SetSortModeForAnimeCategory(get(), get()) }\n        addFactory { CreateAnimeCategoryWithName(get(), get()) }\n        addFactory { RenameAnimeCategory(get()) }\n        addFactory { ReorderAnimeCategory(get()) }\n        addFactory { UpdateAnimeCategory(get()) }\n        addFactory { HideAnimeCategory(get()) }\n        addFactory { DeleteAnimeCategory(get(), get(), get()) }\n\n        addSingletonFactory<MangaCategoryRepository> { MangaCategoryRepositoryImpl(get()) }\n        addFactory { GetMangaCategories(get()) }\n        addFactory { GetVisibleMangaCategories(get()) }\n        addFactory { ResetMangaCategoryFlags(get(), get()) }\n        addFactory { SetMangaDisplayMode(get()) }\n        addFactory { SetSortModeForMangaCategory(get(), get()) }\n        addFactory { CreateMangaCategoryWithName(get(), get()) }\n        addFactory { RenameMangaCategory(get()) }\n        addFactory { ReorderMangaCategory(get()) }\n        addFactory { UpdateMangaCategory(get()) }\n        addFactory { HideMangaCategory(get()) }\n        addFactory { DeleteMangaCategory(get(), get(), get()) }\n\n        addSingletonFactory<AnimeRepository> { AnimeRepositoryImpl(get()) }\n        addFactory { GetDuplicateLibraryAnime(get()) }\n        addFactory { GetAnimeFavorites(get()) }\n        addFactory { GetLibraryAnime(get()) }\n        addFactory { GetAnimeWithEpisodesAndSeasons(get(), get()) }\n        addFactory { GetAnimeByUrlAndSourceId(get()) }\n        addFactory { GetAnime(get()) }\n        addFactory { GetAnimeSeasonsByParentId(get()) }\n        addFactory { GetNextEpisodes(get(), get(), get()) }\n        addFactory { GetUpcomingAnime(get()) }\n        addFactory { ResetAnimeViewerFlags(get()) }\n        addFactory { SetAnimeEpisodeFlags(get()) }\n        addFactory { SetAnimeSeasonFlags(get()) }\n        addFactory { AnimeFetchInterval(get()) }\n        addFactory { SetAnimeDefaultEpisodeFlags(get(), get(), get()) }\n        addFactory { SetAnimeDefaultSeasonFlags(get(), get(), get()) }\n        addFactory { SetAnimeViewerFlags(get()) }\n        addFactory { NetworkToLocalAnime(get(), get()) }\n        addFactory { UpdateAnime(get(), get()) }\n        addFactory { SetAnimeCategories(get()) }\n        addFactory { ShouldUpdateDbSeason() }\n        addFactory { SyncSeasonsWithSource(get(), get(), get(), get(), get()) }\n\n        addSingletonFactory<MangaRepository> { MangaRepositoryImpl(get()) }\n        addFactory { GetDuplicateLibraryManga(get()) }\n        addFactory { GetMangaFavorites(get()) }\n        addFactory { GetLibraryManga(get()) }\n        addFactory { GetMangaWithChapters(get(), get()) }\n        addFactory { GetMangaByUrlAndSourceId(get()) }\n        addFactory { GetManga(get()) }\n        addFactory { GetNextChapters(get(), get(), get()) }\n        addFactory { GetUpcomingManga(get()) }\n        addFactory { ResetMangaViewerFlags(get()) }\n        addFactory { SetMangaChapterFlags(get()) }\n        addFactory { MangaFetchInterval(get()) }\n        addFactory {\n            SetMangaDefaultChapterFlags(\n                get(),\n                get(),\n                get(),\n            )\n        }\n        addFactory { SetMangaViewerFlags(get()) }\n        addFactory { NetworkToLocalManga(get()) }\n        addFactory { UpdateManga(get(), get()) }\n        addFactory { SetMangaCategories(get()) }\n        addFactory { GetExcludedScanlators(get()) }\n        addFactory { SetExcludedScanlators(get()) }\n\n        addSingletonFactory<ReleaseService> { ReleaseServiceImpl(get(), get()) }\n        addFactory { GetApplicationRelease(get(), get()) }\n\n        addSingletonFactory<AnimeTrackRepository> { AnimeTrackRepositoryImpl(get()) }\n        addFactory { TrackEpisode(get(), get(), get(), get()) }\n        addFactory { AddAnimeTracks(get(), get(), get(), get()) }\n        addFactory { RefreshAnimeTracks(get(), get(), get(), get()) }\n        addFactory { DeleteAnimeTrack(get()) }\n        addFactory { GetTracksPerAnime(get()) }\n        addFactory { GetAnimeTracks(get()) }\n        addFactory { InsertAnimeTrack(get()) }\n        addFactory { SyncEpisodeProgressWithTrack(get(), get(), get()) }\n\n        addSingletonFactory<MangaTrackRepository> { MangaTrackRepositoryImpl(get()) }\n        addFactory { TrackChapter(get(), get(), get(), get()) }\n        addFactory { AddMangaTracks(get(), get(), get(), get()) }\n        addFactory { RefreshMangaTracks(get(), get(), get(), get()) }\n        addFactory { DeleteMangaTrack(get()) }\n        addFactory { GetTracksPerManga(get()) }\n        addFactory { GetMangaTracks(get()) }\n        addFactory { InsertMangaTrack(get()) }\n        addFactory { SyncChapterProgressWithTrack(get(), get(), get()) }\n\n        addSingletonFactory<EpisodeRepository> { EpisodeRepositoryImpl(get()) }\n        addFactory { GetEpisode(get()) }\n        addFactory { GetEpisodesByAnimeId(get()) }\n        addFactory { GetEpisodeByUrlAndAnimeId(get()) }\n        addFactory { UpdateEpisode(get()) }\n        addFactory { SetSeenStatus(get(), get(), get(), get()) }\n        addFactory { ShouldUpdateDbEpisode() }\n        addFactory { SyncEpisodesWithSource(get(), get(), get(), get(), get(), get(), get(), get()) }\n        addFactory { FilterEpisodesForDownload(get(), get(), get()) }\n\n        addSingletonFactory<ChapterRepository> { ChapterRepositoryImpl(get()) }\n        addFactory { GetChapter(get()) }\n        addFactory { GetChaptersByMangaId(get()) }\n        addFactory { GetChapterByUrlAndMangaId(get()) }\n        addFactory { UpdateChapter(get()) }\n        addFactory { SetReadStatus(get(), get(), get(), get()) }\n        addFactory { ShouldUpdateDbChapter() }\n        addFactory { SyncChaptersWithSource(get(), get(), get(), get(), get(), get(), get(), get(), get()) }\n        addFactory { GetAvailableScanlators(get()) }\n        addFactory { FilterChaptersForDownload(get(), get(), get()) }\n\n        addSingletonFactory<AnimeHistoryRepository> { AnimeHistoryRepositoryImpl(get()) }\n        addFactory { GetAnimeHistory(get()) }\n        addFactory { UpsertAnimeHistory(get()) }\n        addFactory { RemoveAnimeHistory(get()) }\n\n        addFactory { DeleteEpisodeDownload(get(), get()) }\n\n        addFactory { GetAnimeExtensionsByType(get(), get()) }\n        addFactory { GetAnimeExtensionSources(get()) }\n        addFactory { GetAnimeExtensionLanguages(get(), get()) }\n\n        addSingletonFactory<MangaHistoryRepository> { MangaHistoryRepositoryImpl(get()) }\n        addFactory { GetMangaHistory(get()) }\n        addFactory { UpsertMangaHistory(get()) }\n        addFactory { RemoveMangaHistory(get()) }\n        addFactory { GetTotalReadDuration(get()) }\n\n        addFactory { DeleteChapterDownload(get(), get()) }\n\n        addFactory { GetMangaExtensionsByType(get(), get()) }\n        addFactory { GetExtensionSources(get()) }\n        addFactory { GetMangaExtensionLanguages(get(), get()) }\n\n        addSingletonFactory<AnimeUpdatesRepository> { AnimeUpdatesRepositoryImpl(get()) }\n        addFactory { GetAnimeUpdates(get()) }\n\n        addSingletonFactory<MangaUpdatesRepository> { MangaUpdatesRepositoryImpl(get()) }\n        addFactory { GetMangaUpdates(get()) }\n\n        addSingletonFactory<AnimeSourceRepository> { AnimeSourceRepositoryImpl(get(), get()) }\n        addSingletonFactory<AnimeStubSourceRepository> { AnimeStubSourceRepositoryImpl(get()) }\n        addFactory { GetEnabledAnimeSources(get(), get()) }\n        addFactory { GetLanguagesWithAnimeSources(get(), get()) }\n        addFactory { GetRemoteAnime(get()) }\n        addFactory { GetAnimeSourcesWithFavoriteCount(get(), get()) }\n        addFactory { GetAnimeSourcesWithNonLibraryAnime(get()) }\n        addFactory { ToggleAnimeSource(get()) }\n        addFactory { ToggleAnimeSourcePin(get()) }\n\n        addSingletonFactory<MangaSourceRepository> { MangaSourceRepositoryImpl(get(), get()) }\n        addSingletonFactory<MangaStubSourceRepository> { MangaStubSourceRepositoryImpl(get()) }\n        addFactory { GetEnabledMangaSources(get(), get()) }\n        addFactory { GetLanguagesWithMangaSources(get(), get()) }\n        addFactory { GetRemoteManga(get()) }\n        addFactory { GetMangaSourcesWithFavoriteCount(get(), get()) }\n        addFactory { GetMangaSourcesWithNonLibraryManga(get()) }\n        addFactory { SetMigrateSorting(get()) }\n        addFactory { ToggleLanguage(get()) }\n        addFactory { ToggleMangaSource(get()) }\n        addFactory { ToggleMangaSourcePin(get()) }\n        addFactory { TrustAnimeExtension(get(), get()) }\n        addFactory { TrustMangaExtension(get(), get()) }\n\n        addFactory { ExtensionRepoService(get(), get()) }\n\n        addSingletonFactory<AnimeExtensionRepoRepository> { AnimeExtensionRepoRepositoryImpl(get()) }\n        addFactory { GetAnimeExtensionRepo(get()) }\n        addFactory { GetAnimeExtensionRepoCount(get()) }\n        addFactory { CreateAnimeExtensionRepo(get(), get()) }\n        addFactory { DeleteAnimeExtensionRepo(get()) }\n        addFactory { ReplaceAnimeExtensionRepo(get()) }\n        addFactory { UpdateAnimeExtensionRepo(get(), get()) }\n        addFactory { ToggleAnimeIncognito(get()) }\n        addFactory { GetAnimeIncognitoState(get(), get(), get()) }\n\n        addSingletonFactory<MangaExtensionRepoRepository> { MangaExtensionRepoRepositoryImpl(get()) }\n        addFactory { GetMangaExtensionRepo(get()) }\n        addFactory { GetMangaExtensionRepoCount(get()) }\n        addFactory { CreateMangaExtensionRepo(get(), get()) }\n        addFactory { DeleteMangaExtensionRepo(get()) }\n        addFactory { ReplaceMangaExtensionRepo(get()) }\n        addFactory { UpdateMangaExtensionRepo(get(), get()) }\n        addFactory { ToggleMangaIncognito(get()) }\n        addFactory { GetMangaIncognitoState(get(), get(), get()) }\n\n        addSingletonFactory<CustomButtonRepository> { CustomButtonRepositoryImpl(get()) }\n        addFactory { CreateCustomButton(get()) }\n        addFactory { DeleteCustomButton(get()) }\n        addFactory { GetCustomButtons(get()) }\n        addFactory { UpdateCustomButton(get()) }\n        addFactory { ReorderCustomButton(get()) }\n        addFactory { ToggleFavoriteCustomButton(get()) }\n\n        addFactory { TrackSelect(get(), get()) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/SYDomainModule.kt",
    "content": "package eu.kanade.domain\n\nimport eu.kanade.domain.source.manga.interactor.ToggleExcludeFromMangaDataSaver\nimport uy.kohesive.injekt.api.InjektModule\nimport uy.kohesive.injekt.api.InjektRegistrar\nimport uy.kohesive.injekt.api.addFactory\nimport uy.kohesive.injekt.api.get\n\nclass SYDomainModule : InjektModule {\n\n    override fun InjektRegistrar.registerInjectables() {\n        addFactory { ToggleExcludeFromMangaDataSaver(get()) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/base/BasePreferences.kt",
    "content": "package eu.kanade.domain.base\n\nimport android.content.Context\nimport android.content.pm.PackageManager\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.util.system.GLUtil\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.i18n.MR\n\nclass BasePreferences(\n    val context: Context,\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun downloadedOnly() = preferenceStore.getBoolean(\n        Preference.appStateKey(\"pref_downloaded_only\"),\n        false,\n    )\n\n    fun incognitoMode() = preferenceStore.getBoolean(Preference.appStateKey(\"incognito_mode\"), false)\n\n    fun extensionInstaller() = ExtensionInstallerPreference(context, preferenceStore)\n\n    fun deviceHasPip() = context.packageManager.hasSystemFeature(\n        PackageManager.FEATURE_PICTURE_IN_PICTURE,\n    )\n\n    fun shownOnboardingFlow() = preferenceStore.getBoolean(Preference.appStateKey(\"onboarding_complete\"), false)\n\n    enum class ExtensionInstaller(val titleRes: StringResource, val requiresSystemPermission: Boolean) {\n        LEGACY(MR.strings.ext_installer_legacy, true),\n        PACKAGEINSTALLER(MR.strings.ext_installer_packageinstaller, true),\n        SHIZUKU(MR.strings.ext_installer_shizuku, false),\n        PRIVATE(MR.strings.ext_installer_private, false),\n    }\n\n    fun displayProfile() = preferenceStore.getString(\"pref_display_profile_key\", \"\")\n\n    fun hardwareBitmapThreshold() = preferenceStore.getInt(\"pref_hardware_bitmap_threshold\", GLUtil.SAFE_TEXTURE_LIMIT)\n\n    fun alwaysDecodeLongStripWithSSIV() = preferenceStore.getBoolean(\"pref_always_decode_long_strip_with_ssiv\", false)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/base/ExtensionInstallerPreference.kt",
    "content": "package eu.kanade.domain.base\n\nimport android.content.Context\nimport eu.kanade.domain.base.BasePreferences.ExtensionInstaller\nimport eu.kanade.tachiyomi.util.system.hasMiuiPackageInstaller\nimport eu.kanade.tachiyomi.util.system.isShizukuInstalled\nimport kotlinx.coroutines.CoroutineScope\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass ExtensionInstallerPreference(\n    private val context: Context,\n    preferenceStore: PreferenceStore,\n) : Preference<ExtensionInstaller> {\n\n    private val basePref = preferenceStore.getEnum(key(), defaultValue())\n\n    override fun key() = \"extension_installer\"\n\n    val entries get() = ExtensionInstaller.entries.run {\n        if (context.hasMiuiPackageInstaller) {\n            filter { it != ExtensionInstaller.PACKAGEINSTALLER }\n        } else {\n            toList()\n        }\n    }\n\n    override fun defaultValue() = if (context.hasMiuiPackageInstaller) {\n        ExtensionInstaller.LEGACY\n    } else {\n        ExtensionInstaller.PACKAGEINSTALLER\n    }\n\n    private fun check(value: ExtensionInstaller): ExtensionInstaller {\n        when (value) {\n            ExtensionInstaller.PACKAGEINSTALLER -> {\n                if (context.hasMiuiPackageInstaller) return ExtensionInstaller.LEGACY\n            }\n            ExtensionInstaller.SHIZUKU -> {\n                if (!context.isShizukuInstalled) return defaultValue()\n            }\n            else -> {}\n        }\n        return value\n    }\n\n    override fun get(): ExtensionInstaller {\n        val value = basePref.get()\n        val checkedValue = check(value)\n        if (value != checkedValue) {\n            basePref.set(checkedValue)\n        }\n        return checkedValue\n    }\n\n    override fun set(value: ExtensionInstaller) {\n        basePref.set(check(value))\n    }\n\n    override fun isSet() = basePref.isSet()\n\n    override fun delete() = basePref.delete()\n\n    override fun changes() = basePref.changes()\n\n    override fun stateIn(scope: CoroutineScope) = basePref.stateIn(scope)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/download/anime/interactor/DeleteEpisodeDownload.kt",
    "content": "package eu.kanade.domain.download.anime.interactor\n\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\n\nclass DeleteEpisodeDownload(\n    private val sourceManager: AnimeSourceManager,\n    private val downloadManager: AnimeDownloadManager,\n) {\n\n    suspend fun awaitAll(anime: Anime, vararg episodes: Episode) = withNonCancellableContext {\n        sourceManager.get(anime.source)?.let { source ->\n            downloadManager.deleteEpisodes(episodes.toList(), anime, source)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/download/manga/interactor/DeleteChapterDownload.kt",
    "content": "package eu.kanade.domain.download.manga.interactor\n\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\n\nclass DeleteChapterDownload(\n    private val sourceManager: MangaSourceManager,\n    private val downloadManager: MangaDownloadManager,\n) {\n\n    suspend fun awaitAll(manga: Manga, vararg chapters: Chapter) = withNonCancellableContext {\n        sourceManager.get(manga.source)?.let { source ->\n            downloadManager.deleteChapters(chapters.toList(), manga, source)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/anime/interactor/SetAnimeViewerFlags.kt",
    "content": "package eu.kanade.domain.entries.anime.interactor\n\nimport tachiyomi.core.common.util.lang.toLong\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport kotlin.math.pow\n\nclass SetAnimeViewerFlags(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun awaitSetSkipIntroLength(id: Long, flag: Long) {\n        val anime = animeRepository.getAnimeById(id)\n        animeRepository.updateAnime(\n            AnimeUpdate(\n                id = id,\n                viewerFlags = anime.viewerFlags\n                    .setFlag(flag, Anime.ANIME_INTRO_MASK)\n                    // Disable skip intro button if length is set to 0\n                    .setFlag((flag == 0L).toLong().addHexZeros(14), Anime.ANIME_INTRO_DISABLE_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetNextEpisodeAiring(id: Long, flags: Pair<Int, Long>) {\n        awaitSetNextEpisodeToAir(id, flags.first.toLong().addHexZeros(zeros = 2))\n        awaitSetNextEpisodeAiringAt(id, flags.second.addHexZeros(zeros = 6))\n    }\n\n    private suspend fun awaitSetNextEpisodeToAir(id: Long, flag: Long) {\n        val anime = animeRepository.getAnimeById(id)\n        animeRepository.updateAnime(\n            AnimeUpdate(\n                id = id,\n                viewerFlags = anime.viewerFlags.setFlag(flag, Anime.ANIME_AIRING_EPISODE_MASK),\n            ),\n        )\n    }\n\n    private suspend fun awaitSetNextEpisodeAiringAt(id: Long, flag: Long) {\n        val anime = animeRepository.getAnimeById(id)\n        animeRepository.updateAnime(\n            AnimeUpdate(\n                id = id,\n                viewerFlags = anime.viewerFlags.setFlag(flag, Anime.ANIME_AIRING_TIME_MASK),\n            ),\n        )\n    }\n\n    private fun Long.setFlag(flag: Long, mask: Long): Long {\n        return this and mask.inv() or (flag and mask)\n    }\n\n    private fun Long.addHexZeros(zeros: Int): Long {\n        val hex = 16.0\n        return this.times(hex.pow(zeros)).toLong()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/anime/interactor/SyncSeasonsWithSource.kt",
    "content": "package eu.kanade.domain.entries.anime.interactor\n\nimport eu.kanade.domain.entries.anime.model.toDomainAnime\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport tachiyomi.domain.entries.anime.interactor.NetworkToLocalAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.NoSeasonsException\nimport tachiyomi.domain.entries.anime.model.toAnimeUpdate\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.items.season.interactor.GetAnimeSeasonsByParentId\nimport tachiyomi.domain.items.season.interactor.ShouldUpdateDbSeason\nimport tachiyomi.domain.items.season.service.SeasonRecognition\nimport tachiyomi.source.local.entries.anime.isLocal\nimport java.time.ZonedDateTime\n\nclass SyncSeasonsWithSource(\n    private val updateAnime: UpdateAnime,\n    private val animeRepository: AnimeRepository,\n    private val networkToLocalAnime: NetworkToLocalAnime,\n    private val shouldUpdateDbSeason: ShouldUpdateDbSeason,\n    private val getAnimeSeasonsByParentId: GetAnimeSeasonsByParentId,\n) {\n    suspend fun await(\n        rawSourceSeasons: List<SAnime>,\n        anime: Anime,\n        source: AnimeSource,\n        manualFetch: Boolean = false,\n        fetchWindow: Pair<Long, Long> = Pair(0, 0),\n    ): List<Anime> {\n        if (rawSourceSeasons.isEmpty() && !source.isLocal()) {\n            throw NoSeasonsException()\n        }\n\n        val now = ZonedDateTime.now()\n\n        val sourceSeasons = rawSourceSeasons\n            .distinctBy { it.url }\n            .mapIndexed { i, sAnime ->\n                networkToLocalAnime.await(sAnime.toDomainAnime(source.id))\n                    .copy(parentId = anime.id, seasonSourceOrder = i.toLong())\n            }\n\n        val dbSeasons = getAnimeSeasonsByParentId.await(anime.id)\n\n        val newSeasons = mutableListOf<Anime>()\n        val updatedSeasons = mutableListOf<Anime>()\n        val removedSeasons = dbSeasons.filterNot { dbSeasons ->\n            sourceSeasons.any { sourceSeason ->\n                dbSeasons.anime.url == sourceSeason.url\n            }\n        }\n\n        for (sourceSeason in sourceSeasons) {\n            var season = sourceSeason\n\n            // Recognize season number for the season\n            val seasonNumber = SeasonRecognition.parseSeasonNumber(\n                anime.title,\n                season.title,\n                season.seasonNumber,\n            )\n            season = season.copy(seasonNumber = seasonNumber)\n\n            val dbSeason = dbSeasons.find { it.anime.url == season.url }?.anime\n            if (dbSeason == null) {\n                newSeasons.add(season)\n            } else {\n                if (shouldUpdateDbSeason.await(dbSeason, season)) {\n                    val toChangeSeason = dbSeason.copy(\n                        title = season.title,\n                        seasonNumber = season.seasonNumber,\n                        seasonSourceOrder = season.seasonSourceOrder,\n                    )\n                    updatedSeasons.add(toChangeSeason)\n                }\n            }\n        }\n\n        // Return if there's nothing to add, delete, or update to avoid unnecessary db transactions.\n        if (newSeasons.isEmpty() && removedSeasons.isEmpty() && updatedSeasons.isEmpty()) {\n            if (manualFetch || anime.fetchInterval == 0 || anime.nextUpdate < fetchWindow.first) {\n                updateAnime.awaitUpdateFetchInterval(\n                    anime,\n                    now,\n                    fetchWindow,\n                )\n            }\n            return sourceSeasons\n        }\n\n        if (removedSeasons.isNotEmpty()) {\n            val toDeleteIds = removedSeasons.map { it.id }\n            animeRepository.removeParentIdByIds(toDeleteIds)\n        }\n\n        val toUpdate = newSeasons.map { it.toAnimeUpdate() } +\n            updatedSeasons.map { it.toAnimeUpdate() }\n\n        if (toUpdate.isNotEmpty()) {\n            updateAnime.awaitAll(toUpdate)\n        }\n\n        updateAnime.awaitUpdateLastUpdate(anime.id)\n\n        return sourceSeasons\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/anime/interactor/UpdateAnime.kt",
    "content": "package eu.kanade.domain.entries.anime.interactor\n\nimport eu.kanade.domain.entries.anime.model.hasCustomBackground\nimport eu.kanade.domain.entries.anime.model.hasCustomCover\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport tachiyomi.domain.entries.anime.interactor.AnimeFetchInterval\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.ZonedDateTime\n\nclass UpdateAnime(\n    private val animeRepository: AnimeRepository,\n    private val animeFetchInterval: AnimeFetchInterval,\n) {\n\n    suspend fun await(animeUpdate: AnimeUpdate): Boolean {\n        return animeRepository.updateAnime(animeUpdate)\n    }\n\n    suspend fun awaitAll(animeUpdates: List<AnimeUpdate>): Boolean {\n        return animeRepository.updateAllAnime(animeUpdates)\n    }\n\n    suspend fun awaitUpdateFromSource(\n        localAnime: Anime,\n        remoteAnime: SAnime,\n        manualFetch: Boolean,\n        coverCache: AnimeCoverCache = Injekt.get(),\n        backgroundCache: AnimeBackgroundCache = Injekt.get(),\n    ): Boolean {\n        val remoteTitle = try {\n            remoteAnime.title\n        } catch (_: UninitializedPropertyAccessException) {\n            \"\"\n        }\n\n        // if the anime isn't a favorite, set its title from source and update in db\n        val title = if (remoteTitle.isEmpty() || localAnime.favorite) null else remoteTitle\n\n        val coverLastModified =\n            when {\n                // Never refresh covers if the url is empty to avoid \"losing\" existing covers\n                remoteAnime.thumbnail_url.isNullOrEmpty() -> null\n                !manualFetch && localAnime.thumbnailUrl == remoteAnime.thumbnail_url -> null\n                localAnime.isLocal() -> Instant.now().toEpochMilli()\n                localAnime.hasCustomCover(coverCache) -> {\n                    coverCache.deleteFromCache(localAnime, false)\n                    null\n                }\n                else -> {\n                    coverCache.deleteFromCache(localAnime, false)\n                    Instant.now().toEpochMilli()\n                }\n            }\n\n        val backgroundLastModified =\n            when {\n                // Never refresh backgrounds if the url is empty to avoid \"losing\" existing backgrounds\n                remoteAnime.background_url.isNullOrEmpty() -> null\n                !manualFetch && localAnime.backgroundUrl == remoteAnime.background_url -> null\n                localAnime.isLocal() -> Instant.now().toEpochMilli()\n                localAnime.hasCustomBackground(backgroundCache) -> {\n                    backgroundCache.deleteFromCache(localAnime, false)\n                    null\n                }\n                else -> {\n                    backgroundCache.deleteFromCache(localAnime, false)\n                    Instant.now().toEpochMilli()\n                }\n            }\n\n        val thumbnailUrl = remoteAnime.thumbnail_url?.takeIf { it.isNotEmpty() }\n\n        val backgroundUrl = remoteAnime.background_url?.takeIf { it.isNotEmpty() }\n\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = localAnime.id,\n                title = title,\n                coverLastModified = coverLastModified,\n                backgroundLastModified = backgroundLastModified,\n                author = remoteAnime.author,\n                artist = remoteAnime.artist,\n                description = remoteAnime.description,\n                genre = remoteAnime.getGenres(),\n                thumbnailUrl = thumbnailUrl,\n                backgroundUrl = backgroundUrl,\n                status = remoteAnime.status.toLong(),\n                updateStrategy = remoteAnime.update_strategy,\n                initialized = true,\n            ),\n        )\n    }\n\n    suspend fun awaitUpdateFetchInterval(\n        anime: Anime,\n        dateTime: ZonedDateTime = ZonedDateTime.now(),\n        window: Pair<Long, Long> = animeFetchInterval.getWindow(dateTime),\n    ): Boolean {\n        return animeRepository.updateAnime(\n            animeFetchInterval.toAnimeUpdate(anime, dateTime, window),\n        )\n    }\n\n    suspend fun awaitUpdateLastUpdate(animeId: Long): Boolean {\n        return animeRepository.updateAnime(AnimeUpdate(id = animeId, lastUpdate = Instant.now().toEpochMilli()))\n    }\n\n    suspend fun awaitUpdateCoverLastModified(animeId: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(id = animeId, coverLastModified = Instant.now().toEpochMilli()),\n        )\n    }\n\n    suspend fun awaitUpdateBackgroundLastModified(animeId: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(id = animeId, backgroundLastModified = Instant.now().toEpochMilli()),\n        )\n    }\n\n    suspend fun awaitUpdateFavorite(animeId: Long, favorite: Boolean): Boolean {\n        val dateAdded = when (favorite) {\n            true -> Instant.now().toEpochMilli()\n            false -> 0\n        }\n        return animeRepository.updateAnime(\n            AnimeUpdate(id = animeId, favorite = favorite, dateAdded = dateAdded),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/anime/model/Anime.kt",
    "content": "package eu.kanade.domain.entries.anime.model\n\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.domain.entries.anime.model.Anime\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n// TODO: move these into the domain model\nval Anime.downloadedFilter: TriState\n    get() {\n        if (Injekt.get<BasePreferences>().downloadedOnly().get()) return TriState.ENABLED_IS\n        return when (downloadedFilterRaw) {\n            Anime.EPISODE_SHOW_DOWNLOADED -> TriState.ENABLED_IS\n            Anime.EPISODE_SHOW_NOT_DOWNLOADED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n    }\n\nval Anime.seasonDownloadedFilter: TriState\n    get() {\n        if (Injekt.get<BasePreferences>().downloadedOnly().get()) return TriState.ENABLED_IS\n        return when (seasonDownloadedFilterRaw) {\n            Anime.SEASON_SHOW_DOWNLOADED -> TriState.ENABLED_IS\n            Anime.SEASON_SHOW_NOT_DOWNLOADED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n    }\n\nfun Anime.episodesFiltered(): Boolean {\n    return unseenFilter != TriState.DISABLED ||\n        downloadedFilter != TriState.DISABLED ||\n        bookmarkedFilter != TriState.DISABLED ||\n        fillermarkedFilter != TriState.DISABLED\n}\n\nfun Anime.seasonsFiltered(): Boolean {\n    return seasonDownloadedFilter != TriState.DISABLED ||\n        seasonUnseenFilter != TriState.DISABLED ||\n        seasonStartedFilter != TriState.DISABLED ||\n        seasonCompletedFilter != TriState.DISABLED ||\n        seasonBookmarkedFilter != TriState.DISABLED ||\n        seasonFillermarkedFilter != TriState.DISABLED\n}\n\nfun Anime.toSAnime(): SAnime = SAnime.create().also {\n    it.url = url\n    it.title = title\n    it.artist = artist\n    it.author = author\n    it.description = description\n    it.genre = genre.orEmpty().joinToString()\n    it.status = status.toInt()\n    it.thumbnail_url = thumbnailUrl\n    it.background_url = backgroundUrl\n    it.fetch_type = fetchType\n    it.season_number = seasonNumber\n    it.initialized = initialized\n}\n\nfun Anime.copyFrom(other: SAnime): Anime {\n    val author = other.author ?: author\n    val artist = other.artist ?: artist\n    val description = other.description ?: description\n    val genres = if (other.genre != null) {\n        other.getGenres()\n    } else {\n        genre\n    }\n    val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl\n    val backgroundUrl = other.background_url ?: backgroundUrl\n    return this.copy(\n        author = author,\n        artist = artist,\n        description = description,\n        genre = genres,\n        thumbnailUrl = thumbnailUrl,\n        backgroundUrl = backgroundUrl,\n        status = other.status.toLong(),\n        updateStrategy = other.update_strategy,\n        fetchType = other.fetch_type,\n        seasonNumber = other.season_number,\n        initialized = other.initialized && initialized,\n    )\n}\n\nfun SAnime.toDomainAnime(sourceId: Long): Anime {\n    return Anime.create().copy(\n        url = url,\n        title = title,\n        artist = artist,\n        author = author,\n        description = description,\n        genre = getGenres(),\n        status = status.toLong(),\n        thumbnailUrl = thumbnail_url,\n        backgroundUrl = background_url,\n        updateStrategy = update_strategy,\n        fetchType = fetch_type,\n        seasonNumber = season_number,\n        initialized = initialized,\n        source = sourceId,\n    )\n}\n\nfun Anime.hasCustomCover(coverCache: AnimeCoverCache = Injekt.get()): Boolean {\n    return coverCache.getCustomCoverFile(id).exists()\n}\n\nfun Anime.hasCustomBackground(backgroundCache: AnimeBackgroundCache = Injekt.get()): Boolean {\n    return backgroundCache.getCustomBackgroundFile(id).exists()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/manga/interactor/GetExcludedScanlators.kt",
    "content": "package eu.kanade.domain.entries.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\n\nclass GetExcludedScanlators(\n    private val handler: MangaDatabaseHandler,\n) {\n\n    suspend fun await(mangaId: Long): Set<String> {\n        return handler.awaitList {\n            excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(mangaId)\n        }\n            .toSet()\n    }\n\n    fun subscribe(mangaId: Long): Flow<Set<String>> {\n        return handler.subscribeToList {\n            excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(mangaId)\n        }\n            .map { it.toSet() }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/manga/interactor/SetExcludedScanlators.kt",
    "content": "package eu.kanade.domain.entries.manga.interactor\n\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\n\nclass SetExcludedScanlators(\n    private val handler: MangaDatabaseHandler,\n) {\n\n    suspend fun await(mangaId: Long, excludedScanlators: Set<String>) {\n        handler.await(inTransaction = true) {\n            val currentExcluded = handler.awaitList {\n                excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(mangaId)\n            }.toSet()\n            val toAdd = excludedScanlators.minus(currentExcluded)\n            for (scanlator in toAdd) {\n                excluded_scanlatorsQueries.insert(mangaId, scanlator)\n            }\n            val toRemove = currentExcluded.minus(excludedScanlators)\n            excluded_scanlatorsQueries.remove(mangaId, toRemove)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/manga/interactor/SetMangaViewerFlags.kt",
    "content": "package eu.kanade.domain.entries.manga.interactor\n\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass SetMangaViewerFlags(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun awaitSetReadingMode(id: Long, flag: Long) {\n        val manga = mangaRepository.getMangaById(id)\n        mangaRepository.updateManga(\n            MangaUpdate(\n                id = id,\n                viewerFlags = manga.viewerFlags.setFlag(flag, ReadingMode.MASK.toLong()),\n            ),\n        )\n    }\n\n    suspend fun awaitSetOrientation(id: Long, flag: Long) {\n        val manga = mangaRepository.getMangaById(id)\n        mangaRepository.updateManga(\n            MangaUpdate(\n                id = id,\n                viewerFlags = manga.viewerFlags.setFlag(flag, ReaderOrientation.MASK.toLong()),\n            ),\n        )\n    }\n\n    private fun Long.setFlag(flag: Long, mask: Long): Long {\n        return this and mask.inv() or (flag and mask)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/manga/interactor/UpdateManga.kt",
    "content": "package eu.kanade.domain.entries.manga.interactor\n\nimport eu.kanade.domain.entries.manga.model.hasCustomCover\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.source.model.SManga\nimport tachiyomi.domain.entries.manga.interactor.MangaFetchInterval\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.ZonedDateTime\n\nclass UpdateManga(\n    private val mangaRepository: MangaRepository,\n    private val mangaFetchInterval: MangaFetchInterval,\n) {\n\n    suspend fun await(mangaUpdate: MangaUpdate): Boolean {\n        return mangaRepository.updateManga(mangaUpdate)\n    }\n\n    suspend fun awaitAll(mangaUpdates: List<MangaUpdate>): Boolean {\n        return mangaRepository.updateAllManga(mangaUpdates)\n    }\n\n    suspend fun awaitUpdateFromSource(\n        localManga: Manga,\n        remoteManga: SManga,\n        manualFetch: Boolean,\n        coverCache: MangaCoverCache = Injekt.get(),\n    ): Boolean {\n        val remoteTitle = try {\n            remoteManga.title\n        } catch (_: UninitializedPropertyAccessException) {\n            \"\"\n        }\n\n        // if the manga isn't a favorite, set its title from source and update in db\n        val title = if (remoteTitle.isEmpty() || localManga.favorite) null else remoteTitle\n\n        val coverLastModified =\n            when {\n                // Never refresh covers if the url is empty to avoid \"losing\" existing covers\n                remoteManga.thumbnail_url.isNullOrEmpty() -> null\n                !manualFetch && localManga.thumbnailUrl == remoteManga.thumbnail_url -> null\n                localManga.isLocal() -> Instant.now().toEpochMilli()\n                localManga.hasCustomCover(coverCache) -> {\n                    coverCache.deleteFromCache(localManga, false)\n                    null\n                }\n                else -> {\n                    coverCache.deleteFromCache(localManga, false)\n                    Instant.now().toEpochMilli()\n                }\n            }\n\n        val thumbnailUrl = remoteManga.thumbnail_url?.takeIf { it.isNotEmpty() }\n\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = localManga.id,\n                title = title,\n                coverLastModified = coverLastModified,\n                author = remoteManga.author,\n                artist = remoteManga.artist,\n                description = remoteManga.description,\n                genre = remoteManga.getGenres(),\n                thumbnailUrl = thumbnailUrl,\n                status = remoteManga.status.toLong(),\n                updateStrategy = remoteManga.update_strategy,\n                initialized = true,\n            ),\n        )\n    }\n\n    suspend fun awaitUpdateFetchInterval(\n        manga: Manga,\n        dateTime: ZonedDateTime = ZonedDateTime.now(),\n        window: Pair<Long, Long> = mangaFetchInterval.getWindow(dateTime),\n    ): Boolean {\n        return mangaRepository.updateManga(\n            mangaFetchInterval.toMangaUpdate(manga, dateTime, window),\n        )\n    }\n\n    suspend fun awaitUpdateLastUpdate(mangaId: Long): Boolean {\n        return mangaRepository.updateManga(MangaUpdate(id = mangaId, lastUpdate = Instant.now().toEpochMilli()))\n    }\n\n    suspend fun awaitUpdateCoverLastModified(mangaId: Long): Boolean {\n        return mangaRepository.updateManga(MangaUpdate(id = mangaId, coverLastModified = Instant.now().toEpochMilli()))\n    }\n\n    suspend fun awaitUpdateFavorite(mangaId: Long, favorite: Boolean): Boolean {\n        val dateAdded = when (favorite) {\n            true -> Instant.now().toEpochMilli()\n            false -> 0\n        }\n        return mangaRepository.updateManga(\n            MangaUpdate(id = mangaId, favorite = favorite, dateAdded = dateAdded),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/entries/manga/model/Manga.kt",
    "content": "package eu.kanade.domain.entries.manga.model\n\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.metadata.comicinfo.ComicInfo\nimport tachiyomi.core.metadata.comicinfo.ComicInfoPublishingStatus\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n// TODO: move these into the domain model\nval Manga.readingMode: Long\n    get() = viewerFlags and ReadingMode.MASK.toLong()\n\nval Manga.readerOrientation: Long\n    get() = viewerFlags and ReaderOrientation.MASK.toLong()\n\nval Manga.downloadedFilter: TriState\n    get() {\n        if (Injekt.get<BasePreferences>().downloadedOnly().get()) return TriState.ENABLED_IS\n        return when (downloadedFilterRaw) {\n            Manga.CHAPTER_SHOW_DOWNLOADED -> TriState.ENABLED_IS\n            Manga.CHAPTER_SHOW_NOT_DOWNLOADED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n    }\nfun Manga.chaptersFiltered(): Boolean {\n    return unreadFilter != TriState.DISABLED ||\n        downloadedFilter != TriState.DISABLED ||\n        bookmarkedFilter != TriState.DISABLED\n}\n\nfun Manga.toSManga(): SManga = SManga.create().also {\n    it.url = url\n    it.title = title\n    it.artist = artist\n    it.author = author\n    it.description = description\n    it.genre = genre.orEmpty().joinToString()\n    it.status = status.toInt()\n    it.thumbnail_url = thumbnailUrl\n    it.initialized = initialized\n}\n\nfun Manga.copyFrom(other: SManga): Manga {\n    val author = other.author ?: author\n    val artist = other.artist ?: artist\n    val description = other.description ?: description\n    val genres = if (other.genre != null) {\n        other.getGenres()\n    } else {\n        genre\n    }\n    val thumbnailUrl = other.thumbnail_url ?: thumbnailUrl\n    return this.copy(\n        author = author,\n        artist = artist,\n        description = description,\n        genre = genres,\n        thumbnailUrl = thumbnailUrl,\n        status = other.status.toLong(),\n        updateStrategy = other.update_strategy,\n        initialized = other.initialized && initialized,\n    )\n}\n\nfun SManga.toDomainManga(sourceId: Long): Manga {\n    return Manga.create().copy(\n        url = url,\n        title = title,\n        artist = artist,\n        author = author,\n        description = description,\n        genre = getGenres(),\n        status = status.toLong(),\n        thumbnailUrl = thumbnail_url,\n        updateStrategy = update_strategy,\n        initialized = initialized,\n        source = sourceId,\n    )\n}\n\nfun Manga.hasCustomCover(coverCache: MangaCoverCache = Injekt.get()): Boolean {\n    return coverCache.getCustomCoverFile(id).exists()\n}\n\n/**\n * Creates a ComicInfo instance based on the manga and chapter metadata.\n */\nfun getComicInfo(\n    manga: Manga,\n    chapter: Chapter,\n    urls: List<String>,\n    categories: List<String>?,\n    sourceName: String,\n) = ComicInfo(\n    title = ComicInfo.Title(chapter.name),\n    series = ComicInfo.Series(manga.title),\n    number = chapter.chapterNumber.takeIf { it >= 0 }?.let {\n        if ((it.rem(1) == 0.0)) {\n            ComicInfo.Number(it.toInt().toString())\n        } else {\n            ComicInfo.Number(it.toString())\n        }\n    },\n    web = ComicInfo.Web(urls.joinToString(\" \")),\n    summary = manga.description?.let { ComicInfo.Summary(it) },\n    writer = manga.author?.let { ComicInfo.Writer(it) },\n    penciller = manga.artist?.let { ComicInfo.Penciller(it) },\n    translator = chapter.scanlator?.let { ComicInfo.Translator(it) },\n    genre = manga.genre?.let { ComicInfo.Genre(it.joinToString()) },\n    publishingStatus = ComicInfo.PublishingStatusTachiyomi(\n        ComicInfoPublishingStatus.toComicInfoValue(manga.status),\n    ),\n    categories = categories?.let { ComicInfo.CategoriesTachiyomi(it.joinToString()) },\n    source = ComicInfo.SourceAniyomi(sourceName),\n    inker = null,\n    colorist = null,\n    letterer = null,\n    coverArtist = null,\n    tags = null,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/anime/interactor/GetAnimeExtensionLanguages.kt",
    "content": "package eu.kanade.domain.extension.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\n\nclass GetAnimeExtensionLanguages(\n    private val preferences: SourcePreferences,\n    private val extensionManager: AnimeExtensionManager,\n) {\n    fun subscribe(): Flow<List<String>> {\n        return combine(\n            preferences.enabledLanguages().changes(),\n            extensionManager.availableExtensionsFlow,\n        ) { enabledLanguage, availableExtensions ->\n            availableExtensions\n                .flatMap { ext ->\n                    if (ext.sources.isEmpty()) {\n                        listOf(ext.lang)\n                    } else {\n                        ext.sources.map { it.lang }\n                    }\n                }\n                .distinct()\n                .sortedWith(\n                    compareBy<String> { it !in enabledLanguage }.then(LocaleHelper.comparator),\n                )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/anime/interactor/GetAnimeExtensionSources.kt",
    "content": "package eu.kanade.domain.extension.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\n\nclass GetAnimeExtensionSources(\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(extension: AnimeExtension.Installed): Flow<List<AnimeExtensionSourceItem>> {\n        val isMultiSource = extension.sources.size > 1\n        val isMultiLangSingleSource =\n            isMultiSource && extension.sources.map { it.name }.distinct().size == 1\n\n        return preferences.disabledAnimeSources().changes().map { disabledSources ->\n            fun AnimeSource.isEnabled() = id.toString() !in disabledSources\n\n            extension.sources\n                .map { source ->\n                    AnimeExtensionSourceItem(\n                        source = source,\n                        enabled = source.isEnabled(),\n                        labelAsName = isMultiSource && !isMultiLangSingleSource,\n                    )\n                }\n        }\n    }\n}\n\ndata class AnimeExtensionSourceItem(\n    val source: AnimeSource,\n    val enabled: Boolean,\n    val labelAsName: Boolean,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/anime/interactor/GetAnimeExtensionsByType.kt",
    "content": "package eu.kanade.domain.extension.anime.interactor\n\nimport eu.kanade.domain.extension.anime.model.AnimeExtensions\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\n\nclass GetAnimeExtensionsByType(\n    private val preferences: SourcePreferences,\n    private val extensionManager: AnimeExtensionManager,\n) {\n\n    fun subscribe(): Flow<AnimeExtensions> {\n        val showNsfwSources = preferences.showNsfwSource().get()\n\n        return combine(\n            preferences.enabledLanguages().changes(),\n            extensionManager.installedExtensionsFlow,\n            extensionManager.untrustedExtensionsFlow,\n            extensionManager.availableExtensionsFlow,\n        ) { enabledLanguages, _installed, _untrusted, _available ->\n            val (updates, installed) = _installed\n                .filter { (showNsfwSources || !it.isNsfw) }\n                .sortedWith(\n                    compareBy<AnimeExtension.Installed> { !it.isObsolete }\n                        .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name },\n                )\n                .partition { it.hasUpdate }\n\n            val untrusted = _untrusted\n                .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })\n\n            val available = _available\n                .filter { extension ->\n                    _installed.none { it.pkgName == extension.pkgName } &&\n                        _untrusted.none { it.pkgName == extension.pkgName } &&\n                        (showNsfwSources || !extension.isNsfw)\n                }\n                .flatMap { ext ->\n                    if (ext.sources.isEmpty()) {\n                        return@flatMap if (ext.lang in enabledLanguages) listOf(ext) else emptyList()\n                    }\n                    ext.sources.filter { it.lang in enabledLanguages }\n                        .map {\n                            ext.copy(\n                                name = it.name,\n                                lang = it.lang,\n                                pkgName = \"${ext.pkgName}-${it.id}\",\n                                sources = listOf(it),\n                            )\n                        }\n                }\n                .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })\n\n            AnimeExtensions(updates, installed, available, untrusted)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/anime/interactor/TrustAnimeExtension.kt",
    "content": "package eu.kanade.domain.extension.anime.interactor\n\nimport android.content.pm.PackageInfo\nimport androidx.core.content.pm.PackageInfoCompat\nimport eu.kanade.domain.source.service.SourcePreferences\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport tachiyomi.core.common.preference.getAndSet\n\nclass TrustAnimeExtension(\n    private val animeExtensionRepoRepository: AnimeExtensionRepoRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List<String>): Boolean {\n        val trustedFingerprints = animeExtensionRepoRepository.getAll().map { it.signingKeyFingerprint }.toHashSet()\n        val key = \"${pkgInfo.packageName}:${PackageInfoCompat.getLongVersionCode(pkgInfo)}:${fingerprints.last()}\"\n        return trustedFingerprints.any { fingerprints.contains(it) } || key in preferences.trustedExtensions().get()\n    }\n\n    fun trust(pkgName: String, versionCode: Long, signatureHash: String) {\n        preferences.trustedExtensions().getAndSet { exts ->\n            // Remove previously trusted versions\n            val removed = exts.filterNot { it.startsWith(\"$pkgName:\") }.toMutableSet()\n\n            removed.also { it += \"$pkgName:$versionCode:$signatureHash\" }\n        }\n    }\n\n    fun revokeAll() {\n        preferences.trustedExtensions().delete()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/anime/model/AnimeExtensions.kt",
    "content": "package eu.kanade.domain.extension.anime.model\n\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\n\ndata class AnimeExtensions(\n    val updates: List<AnimeExtension.Installed>,\n    val installed: List<AnimeExtension.Installed>,\n    val available: List<AnimeExtension.Available>,\n    val untrusted: List<AnimeExtension.Untrusted>,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/manga/interactor/GetMangaExtensionLanguages.kt",
    "content": "package eu.kanade.domain.extension.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\n\nclass GetMangaExtensionLanguages(\n    private val preferences: SourcePreferences,\n    private val extensionManager: MangaExtensionManager,\n) {\n    fun subscribe(): Flow<List<String>> {\n        return combine(\n            preferences.enabledLanguages().changes(),\n            extensionManager.availableExtensionsFlow,\n        ) { enabledLanguage, availableExtensions ->\n            availableExtensions\n                .flatMap { ext ->\n                    if (ext.sources.isEmpty()) {\n                        listOf(ext.lang)\n                    } else {\n                        ext.sources.map { it.lang }\n                    }\n                }\n                .distinct()\n                .sortedWith(\n                    compareBy<String> { it !in enabledLanguage }.then(LocaleHelper.comparator),\n                )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/manga/interactor/GetMangaExtensionSources.kt",
    "content": "package eu.kanade.domain.extension.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.source.MangaSource\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\n\nclass GetExtensionSources(\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(extension: MangaExtension.Installed): Flow<List<MangaExtensionSourceItem>> {\n        val isMultiSource = extension.sources.size > 1\n        val isMultiLangSingleSource =\n            isMultiSource && extension.sources.map { it.name }.distinct().size == 1\n\n        return preferences.disabledMangaSources().changes().map { disabledSources ->\n            fun MangaSource.isEnabled() = id.toString() !in disabledSources\n\n            extension.sources\n                .map { source ->\n                    MangaExtensionSourceItem(\n                        source = source,\n                        enabled = source.isEnabled(),\n                        labelAsName = isMultiSource && !isMultiLangSingleSource,\n                    )\n                }\n        }\n    }\n}\n\ndata class MangaExtensionSourceItem(\n    val source: MangaSource,\n    val enabled: Boolean,\n    val labelAsName: Boolean,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/manga/interactor/GetMangaExtensionsByType.kt",
    "content": "package eu.kanade.domain.extension.manga.interactor\n\nimport eu.kanade.domain.extension.manga.model.MangaExtensions\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\n\nclass GetMangaExtensionsByType(\n    private val preferences: SourcePreferences,\n    private val extensionManager: MangaExtensionManager,\n) {\n\n    fun subscribe(): Flow<MangaExtensions> {\n        val showNsfwSources = preferences.showNsfwSource().get()\n\n        return combine(\n            preferences.enabledLanguages().changes(),\n            extensionManager.installedExtensionsFlow,\n            extensionManager.untrustedExtensionsFlow,\n            extensionManager.availableExtensionsFlow,\n        ) { enabledLanguages, _installed, _untrusted, _available ->\n            val (updates, installed) = _installed\n                .filter { (showNsfwSources || !it.isNsfw) }\n                .sortedWith(\n                    compareBy<MangaExtension.Installed> { !it.isObsolete }\n                        .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name },\n                )\n                .partition { it.hasUpdate }\n\n            val untrusted = _untrusted\n                .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })\n\n            val available = _available\n                .filter { extension ->\n                    _installed.none { it.pkgName == extension.pkgName } &&\n                        _untrusted.none { it.pkgName == extension.pkgName } &&\n                        (showNsfwSources || !extension.isNsfw)\n                }\n                .flatMap { ext ->\n                    if (ext.sources.isEmpty()) {\n                        return@flatMap if (ext.lang in enabledLanguages) listOf(ext) else emptyList()\n                    }\n                    ext.sources.filter { it.lang in enabledLanguages }\n                        .map {\n                            ext.copy(\n                                name = it.name,\n                                lang = it.lang,\n                                pkgName = \"${ext.pkgName}-${it.id}\",\n                                sources = listOf(it),\n                            )\n                        }\n                }\n                .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })\n\n            MangaExtensions(updates, installed, available, untrusted)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/manga/interactor/TrustMangaExtension.kt",
    "content": "package eu.kanade.domain.extension.manga.interactor\n\nimport android.content.pm.PackageInfo\nimport androidx.core.content.pm.PackageInfoCompat\nimport eu.kanade.domain.source.service.SourcePreferences\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport tachiyomi.core.common.preference.getAndSet\n\nclass TrustMangaExtension(\n    private val mangaExtensionRepoRepository: MangaExtensionRepoRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List<String>): Boolean {\n        val trustedFingerprints = mangaExtensionRepoRepository.getAll().map { it.signingKeyFingerprint }.toHashSet()\n        val key = \"${pkgInfo.packageName}:${PackageInfoCompat.getLongVersionCode(pkgInfo)}:${fingerprints.last()}\"\n        return trustedFingerprints.any { fingerprints.contains(it) } || key in preferences.trustedExtensions().get()\n    }\n\n    fun trust(pkgName: String, versionCode: Long, signatureHash: String) {\n        preferences.trustedExtensions().getAndSet { exts ->\n            // Remove previously trusted versions\n            val removed = exts.filterNot { it.startsWith(\"$pkgName:\") }.toMutableSet()\n\n            removed.also { it += \"$pkgName:$versionCode:$signatureHash\" }\n        }\n    }\n\n    fun revokeAll() {\n        preferences.trustedExtensions().delete()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/extension/manga/model/MangaExtensions.kt",
    "content": "package eu.kanade.domain.extension.manga.model\n\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\n\ndata class MangaExtensions(\n    val updates: List<MangaExtension.Installed>,\n    val installed: List<MangaExtension.Installed>,\n    val available: List<MangaExtension.Available>,\n    val untrusted: List<MangaExtension.Untrusted>,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/chapter/interactor/GetAvailableScanlators.kt",
    "content": "package eu.kanade.domain.items.chapter.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass GetAvailableScanlators(\n    private val repository: ChapterRepository,\n) {\n\n    private fun List<String>.cleanupAvailableScanlators(): Set<String> {\n        return mapNotNull { it.ifBlank { null } }.toSet()\n    }\n\n    suspend fun await(mangaId: Long): Set<String> {\n        return repository.getScanlatorsByMangaId(mangaId)\n            .cleanupAvailableScanlators()\n    }\n\n    fun subscribe(mangaId: Long): Flow<Set<String>> {\n        return repository.getScanlatorsByMangaIdAsFlow(mangaId)\n            .map { it.cleanupAvailableScanlators() }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/chapter/interactor/SetReadStatus.kt",
    "content": "package eu.kanade.domain.items.chapter.interactor\n\nimport eu.kanade.domain.download.manga.interactor.DeleteChapterDownload\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass SetReadStatus(\n    private val downloadPreferences: DownloadPreferences,\n    private val deleteDownload: DeleteChapterDownload,\n    private val mangaRepository: MangaRepository,\n    private val chapterRepository: ChapterRepository,\n) {\n\n    private val mapper = { chapter: Chapter, read: Boolean ->\n        ChapterUpdate(\n            read = read,\n            lastPageRead = if (!read) 0 else null,\n            id = chapter.id,\n        )\n    }\n\n    suspend fun await(read: Boolean, vararg chapters: Chapter): Result = withNonCancellableContext {\n        val chaptersToUpdate = chapters.filter {\n            when (read) {\n                true -> !it.read\n                false -> it.read || it.lastPageRead > 0\n            }\n        }\n        if (chaptersToUpdate.isEmpty()) {\n            return@withNonCancellableContext Result.NoChapters\n        }\n\n        try {\n            chapterRepository.updateAllChapters(\n                chaptersToUpdate.map { mapper(it, read) },\n            )\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            return@withNonCancellableContext Result.InternalError(e)\n        }\n\n        if (read && downloadPreferences.removeAfterMarkedAsRead().get()) {\n            chaptersToUpdate\n                .groupBy { it.mangaId }\n                .forEach { (mangaId, chapters) ->\n                    deleteDownload.awaitAll(\n                        manga = mangaRepository.getMangaById(mangaId),\n                        chapters = chapters.toTypedArray(),\n                    )\n                }\n        }\n\n        Result.Success\n    }\n\n    suspend fun await(mangaId: Long, read: Boolean): Result = withNonCancellableContext {\n        await(\n            read = read,\n            chapters = chapterRepository\n                .getChapterByMangaId(mangaId)\n                .toTypedArray(),\n        )\n    }\n\n    suspend fun await(manga: Manga, read: Boolean) =\n        await(manga.id, read)\n\n    sealed interface Result {\n        data object Success : Result\n        data object NoChapters : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/chapter/interactor/SyncChaptersWithSource.kt",
    "content": "package eu.kanade.domain.items.chapter.interactor\n\nimport eu.kanade.domain.entries.manga.interactor.GetExcludedScanlators\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.domain.items.chapter.model.copyFromSChapter\nimport eu.kanade.domain.items.chapter.model.toSChapter\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadProvider\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport tachiyomi.data.items.chapter.ChapterSanitizer\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.interactor.ShouldUpdateDbChapter\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.NoChaptersException\nimport tachiyomi.domain.items.chapter.model.toChapterUpdate\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\nimport tachiyomi.domain.items.chapter.service.ChapterRecognition\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.source.local.entries.manga.isLocal\nimport java.lang.Long.max\nimport java.time.ZonedDateTime\nimport java.util.TreeSet\n\nclass SyncChaptersWithSource(\n    private val downloadManager: MangaDownloadManager,\n    private val downloadProvider: MangaDownloadProvider,\n    private val chapterRepository: ChapterRepository,\n    private val shouldUpdateDbChapter: ShouldUpdateDbChapter,\n    private val updateManga: UpdateManga,\n    private val updateChapter: UpdateChapter,\n    private val getChaptersByMangaId: GetChaptersByMangaId,\n    private val getExcludedScanlators: GetExcludedScanlators,\n    private val libraryPreferences: LibraryPreferences,\n) {\n\n    /**\n     * Method to synchronize db chapters with source ones\n     *\n     * @param rawSourceChapters the chapters from the source.\n     * @param manga the manga the chapters belong to.\n     * @param source the source the manga belongs to.\n     * @return Newly added chapters\n     */\n    suspend fun await(\n        rawSourceChapters: List<SChapter>,\n        manga: Manga,\n        source: MangaSource,\n        manualFetch: Boolean = false,\n        fetchWindow: Pair<Long, Long> = Pair(0, 0),\n    ): List<Chapter> {\n        if (rawSourceChapters.isEmpty() && !source.isLocal()) {\n            throw NoChaptersException()\n        }\n\n        val now = ZonedDateTime.now()\n        val nowMillis = now.toInstant().toEpochMilli()\n\n        val sourceChapters = rawSourceChapters\n            .distinctBy { it.url }\n            .mapIndexed { i, sChapter ->\n                Chapter.create()\n                    .copyFromSChapter(sChapter)\n                    .copy(name = with(ChapterSanitizer) { sChapter.name.sanitize(manga.title) })\n                    .copy(mangaId = manga.id, sourceOrder = i.toLong())\n            }\n\n        val dbChapters = getChaptersByMangaId.await(manga.id)\n\n        val newChapters = mutableListOf<Chapter>()\n        val updatedChapters = mutableListOf<Chapter>()\n        val removedChapters = dbChapters.filterNot { dbChapter ->\n            sourceChapters.any { sourceChapter ->\n                dbChapter.url == sourceChapter.url\n            }\n        }\n\n        // Used to not set upload date of older chapters\n        // to a higher value than newer chapters\n        var maxSeenUploadDate = 0L\n\n        for (sourceChapter in sourceChapters) {\n            var chapter = sourceChapter\n\n            // Update metadata from source if necessary.\n            if (source is HttpSource) {\n                val sChapter = chapter.toSChapter()\n                source.prepareNewChapter(sChapter, manga.toSManga())\n                chapter = chapter.copyFromSChapter(sChapter)\n            }\n\n            // Recognize chapter number for the chapter.\n            val chapterNumber = ChapterRecognition.parseChapterNumber(\n                manga.title,\n                chapter.name,\n                chapter.chapterNumber,\n            )\n            chapter = chapter.copy(chapterNumber = chapterNumber)\n\n            val dbChapter = dbChapters.find { it.url == chapter.url }\n\n            if (dbChapter == null) {\n                val toAddChapter = if (chapter.dateUpload == 0L) {\n                    val altDateUpload = if (maxSeenUploadDate == 0L) nowMillis else maxSeenUploadDate\n                    chapter.copy(dateUpload = altDateUpload)\n                } else {\n                    maxSeenUploadDate = max(maxSeenUploadDate, sourceChapter.dateUpload)\n                    chapter\n                }\n                newChapters.add(toAddChapter)\n            } else {\n                if (shouldUpdateDbChapter.await(dbChapter, chapter)) {\n                    val shouldRenameChapter = downloadProvider.isChapterDirNameChanged(\n                        dbChapter,\n                        chapter,\n                    ) &&\n                        downloadManager.isChapterDownloaded(\n                            dbChapter.name,\n                            dbChapter.scanlator,\n                            manga.title,\n                            manga.source,\n                        )\n\n                    if (shouldRenameChapter) {\n                        downloadManager.renameChapter(source, manga, dbChapter, chapter)\n                    }\n                    var toChangeChapter = dbChapter.copy(\n                        name = chapter.name,\n                        chapterNumber = chapter.chapterNumber,\n                        scanlator = chapter.scanlator,\n                        sourceOrder = chapter.sourceOrder,\n                    )\n                    if (chapter.dateUpload != 0L) {\n                        toChangeChapter = toChangeChapter.copy(dateUpload = chapter.dateUpload)\n                    }\n                    updatedChapters.add(toChangeChapter)\n                }\n            }\n        }\n\n        // Return if there's nothing to add, delete, or update to avoid unnecessary db transactions.\n        if (newChapters.isEmpty() && removedChapters.isEmpty() && updatedChapters.isEmpty()) {\n            if (manualFetch || manga.fetchInterval == 0 || manga.nextUpdate < fetchWindow.first) {\n                updateManga.awaitUpdateFetchInterval(\n                    manga,\n                    now,\n                    fetchWindow,\n                )\n            }\n            return emptyList()\n        }\n\n        val changedOrDuplicateReadUrls = mutableSetOf<String>()\n\n        val deletedChapterNumbers = TreeSet<Double>()\n        val deletedReadChapterNumbers = TreeSet<Double>()\n        val deletedBookmarkedChapterNumbers = TreeSet<Double>()\n\n        val readChapterNumbers = dbChapters\n            .asSequence()\n            .filter { it.read && it.isRecognizedNumber }\n            .map { it.chapterNumber }\n            .toSet()\n\n        removedChapters.forEach { chapter ->\n            if (chapter.read) deletedReadChapterNumbers.add(chapter.chapterNumber)\n            if (chapter.bookmark) deletedBookmarkedChapterNumbers.add(chapter.chapterNumber)\n            deletedChapterNumbers.add(chapter.chapterNumber)\n        }\n\n        val deletedChapterNumberDateFetchMap = removedChapters.sortedByDescending { it.dateFetch }\n            .associate { it.chapterNumber to it.dateFetch }\n\n        val markDuplicateAsRead = libraryPreferences.markDuplicateReadChapterAsRead().get()\n            .contains(LibraryPreferences.MARK_DUPLICATE_CHAPTER_READ_NEW)\n\n        // Date fetch is set in such a way that the upper ones will have bigger value than the lower ones\n        // Sources MUST return the chapters from most to less recent, which is common.\n        var itemCount = newChapters.size\n        var updatedToAdd = newChapters.map { toAddItem ->\n            var chapter = toAddItem.copy(dateFetch = nowMillis + itemCount--)\n\n            if (chapter.chapterNumber in readChapterNumbers && markDuplicateAsRead) {\n                changedOrDuplicateReadUrls.add(chapter.url)\n                chapter = chapter.copy(read = true)\n            }\n\n            if (!chapter.isRecognizedNumber || chapter.chapterNumber !in deletedChapterNumbers) return@map chapter\n\n            chapter = chapter.copy(\n                read = chapter.chapterNumber in deletedReadChapterNumbers,\n                bookmark = chapter.chapterNumber in deletedBookmarkedChapterNumbers,\n            )\n\n            // Try to to use the fetch date of the original entry to not pollute 'Updates' tab\n            deletedChapterNumberDateFetchMap[chapter.chapterNumber]?.let {\n                chapter = chapter.copy(dateFetch = it)\n            }\n\n            changedOrDuplicateReadUrls.add(chapter.url)\n\n            chapter\n        }\n\n        if (removedChapters.isNotEmpty()) {\n            val toDeleteIds = removedChapters.map { it.id }\n            chapterRepository.removeChaptersWithIds(toDeleteIds)\n        }\n\n        if (updatedToAdd.isNotEmpty()) {\n            updatedToAdd = chapterRepository.addAllChapters(updatedToAdd)\n        }\n\n        if (updatedChapters.isNotEmpty()) {\n            val chapterUpdates = updatedChapters.map { it.toChapterUpdate() }\n            updateChapter.awaitAll(chapterUpdates)\n        }\n        updateManga.awaitUpdateFetchInterval(manga, now, fetchWindow)\n\n        // Set this manga as updated since chapters were changed\n        // Note that last_update actually represents last time the chapter list changed at all\n        updateManga.awaitUpdateLastUpdate(manga.id)\n\n        val excludedScanlators = getExcludedScanlators.await(manga.id).toHashSet()\n\n        return updatedToAdd.filterNot {\n            it.url in changedOrDuplicateReadUrls || it.scanlator in excludedScanlators\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/chapter/model/Chapter.kt",
    "content": "package eu.kanade.domain.items.chapter.model\n\nimport eu.kanade.tachiyomi.data.database.models.manga.ChapterImpl\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport eu.kanade.tachiyomi.data.database.models.manga.Chapter as DbChapter\n\n// TODO: Remove when all deps are migrated\nfun Chapter.toSChapter(): SChapter {\n    return SChapter.create().also {\n        it.url = url\n        it.name = name\n        it.date_upload = dateUpload\n        it.chapter_number = chapterNumber.toFloat()\n        it.scanlator = scanlator\n    }\n}\n\nfun Chapter.copyFromSChapter(sChapter: SChapter): Chapter {\n    return this.copy(\n        name = sChapter.name,\n        url = sChapter.url,\n        dateUpload = sChapter.date_upload,\n        chapterNumber = sChapter.chapter_number.toDouble(),\n        scanlator = sChapter.scanlator?.ifBlank { null }?.trim(),\n    )\n}\n\nfun Chapter.toDbChapter(): DbChapter = ChapterImpl().also {\n    it.id = id\n    it.manga_id = mangaId\n    it.url = url\n    it.name = name\n    it.scanlator = scanlator\n    it.read = read\n    it.bookmark = bookmark\n    it.last_page_read = lastPageRead.toInt()\n    it.date_fetch = dateFetch\n    it.date_upload = dateUpload\n    it.chapter_number = chapterNumber.toFloat()\n    it.source_order = sourceOrder.toInt()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/chapter/model/ChapterFilter.kt",
    "content": "package eu.kanade.domain.items.chapter.model\n\nimport eu.kanade.domain.entries.manga.model.downloadedFilter\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.entries.manga.ChapterList\nimport tachiyomi.domain.entries.applyFilter\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.service.getChapterSort\nimport tachiyomi.source.local.entries.manga.isLocal\n\n/**\n * Applies the view filters to the list of chapters obtained from the database.\n * @return an observable of the list of chapters filtered and sorted.\n */\nfun List<Chapter>.applyFilters(manga: Manga, downloadManager: MangaDownloadManager): List<Chapter> {\n    val isLocalManga = manga.isLocal()\n    val unreadFilter = manga.unreadFilter\n    val downloadedFilter = manga.downloadedFilter\n    val bookmarkedFilter = manga.bookmarkedFilter\n\n    return filter { chapter -> applyFilter(unreadFilter) { !chapter.read } }\n        .filter { chapter -> applyFilter(bookmarkedFilter) { chapter.bookmark } }\n        .filter { chapter ->\n            applyFilter(downloadedFilter) {\n                val downloaded = downloadManager.isChapterDownloaded(\n                    chapter.name,\n                    chapter.scanlator,\n                    manga.title,\n                    manga.source,\n                )\n                downloaded || isLocalManga\n            }\n        }\n        .sortedWith(getChapterSort(manga))\n}\n\n/**\n * Applies the view filters to the list of chapters obtained from the database.\n * @return an observable of the list of chapters filtered and sorted.\n */\nfun List<ChapterList.Item>.applyFilters(manga: Manga): Sequence<ChapterList.Item> {\n    val isLocalManga = manga.isLocal()\n    val unreadFilter = manga.unreadFilter\n    val downloadedFilter = manga.downloadedFilter\n    val bookmarkedFilter = manga.bookmarkedFilter\n    return asSequence()\n        .filter { (chapter) -> applyFilter(unreadFilter) { !chapter.read } }\n        .filter { (chapter) -> applyFilter(bookmarkedFilter) { chapter.bookmark } }\n        .filter { applyFilter(downloadedFilter) { it.isDownloaded || isLocalManga } }\n        .sortedWith { (chapter1), (chapter2) -> getChapterSort(manga).invoke(chapter1, chapter2) }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/episode/interactor/SetSeenStatus.kt",
    "content": "package eu.kanade.domain.items.episode.interactor\n\nimport eu.kanade.domain.download.anime.interactor.DeleteEpisodeDownload\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass SetSeenStatus(\n    private val downloadPreferences: DownloadPreferences,\n    private val deleteDownload: DeleteEpisodeDownload,\n    private val animeRepository: AnimeRepository,\n    private val episodeRepository: EpisodeRepository,\n) {\n\n    private val mapper = { episode: Episode, read: Boolean ->\n        EpisodeUpdate(\n            seen = read,\n            lastSecondSeen = if (!read) 0 else null,\n            id = episode.id,\n        )\n    }\n\n    suspend fun await(seen: Boolean, vararg episodes: Episode): Result = withNonCancellableContext {\n        val episodesToUpdate = episodes.filter {\n            when (seen) {\n                true -> !it.seen\n                false -> it.seen || it.lastSecondSeen > 0\n            }\n        }\n        if (episodesToUpdate.isEmpty()) {\n            return@withNonCancellableContext Result.NoEpisodes\n        }\n\n        try {\n            episodeRepository.updateAllEpisodes(\n                episodesToUpdate.map { mapper(it, seen) },\n            )\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            return@withNonCancellableContext Result.InternalError(e)\n        }\n\n        if (seen && downloadPreferences.removeAfterMarkedAsRead().get()) {\n            episodesToUpdate\n                .groupBy { it.animeId }\n                .forEach { (animeId, episodes) ->\n                    deleteDownload.awaitAll(\n                        anime = animeRepository.getAnimeById(animeId),\n                        episodes = episodes.toTypedArray(),\n                    )\n                }\n        }\n\n        Result.Success\n    }\n\n    suspend fun await(animeId: Long, seen: Boolean): Result = withNonCancellableContext {\n        await(\n            seen = seen,\n            episodes = episodeRepository\n                .getEpisodeByAnimeId(animeId)\n                .toTypedArray(),\n        )\n    }\n\n    suspend fun await(anime: Anime, seen: Boolean) =\n        await(anime.id, seen)\n\n    sealed interface Result {\n        data object Success : Result\n        data object NoEpisodes : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/episode/interactor/SyncEpisodesWithSource.kt",
    "content": "package eu.kanade.domain.items.episode.interactor\n\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.domain.items.episode.model.copyFromSEpisode\nimport eu.kanade.domain.items.episode.model.toSEpisode\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadProvider\nimport tachiyomi.data.items.episode.EpisodeSanitizer\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.ShouldUpdateDbEpisode\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.NoEpisodesException\nimport tachiyomi.domain.items.episode.model.toEpisodeUpdate\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\nimport tachiyomi.domain.items.episode.service.EpisodeRecognition\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.source.local.entries.anime.isLocal\nimport java.lang.Long.max\nimport java.time.ZonedDateTime\nimport java.util.TreeSet\n\nclass SyncEpisodesWithSource(\n    private val downloadManager: AnimeDownloadManager,\n    private val downloadProvider: AnimeDownloadProvider,\n    private val episodeRepository: EpisodeRepository,\n    private val shouldUpdateDbEpisode: ShouldUpdateDbEpisode,\n    private val updateAnime: UpdateAnime,\n    private val updateEpisode: UpdateEpisode,\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId,\n    private val libraryPreferences: LibraryPreferences,\n) {\n\n    /**\n     * Method to synchronize db episodes with source ones\n     *\n     * @param rawSourceEpisodes the episodes from the source.\n     * @param anime the anime the episodes belong to.\n     * @param source the source the anime belongs to.\n     * @return Newly added episodes\n     */\n    suspend fun await(\n        rawSourceEpisodes: List<SEpisode>,\n        anime: Anime,\n        source: AnimeSource,\n        manualFetch: Boolean = false,\n        fetchWindow: Pair<Long, Long> = Pair(0, 0),\n    ): List<Episode> {\n        if (rawSourceEpisodes.isEmpty() && !source.isLocal()) {\n            throw NoEpisodesException()\n        }\n\n        val now = ZonedDateTime.now()\n        val nowMillis = now.toInstant().toEpochMilli()\n\n        val sourceEpisodes = rawSourceEpisodes\n            .distinctBy { it.url }\n            .mapIndexed { i, sEpisode ->\n                Episode.create()\n                    .copyFromSEpisode(sEpisode)\n                    .copy(name = with(EpisodeSanitizer) { sEpisode.name.sanitize(anime.title) })\n                    .copy(animeId = anime.id, sourceOrder = i.toLong())\n            }\n\n        val dbEpisodes = getEpisodesByAnimeId.await(anime.id)\n\n        val newEpisodes = mutableListOf<Episode>()\n        val updatedEpisodes = mutableListOf<Episode>()\n        val removedEpisodes = dbEpisodes.filterNot { dbEpisode ->\n            sourceEpisodes.any { sourceEpisode ->\n                dbEpisode.url == sourceEpisode.url\n            }\n        }\n\n        // Used to not set upload date of older episodes\n        // to a higher value than newer episodes\n        var maxSeenUploadDate = 0L\n\n        for (sourceEpisode in sourceEpisodes) {\n            var episode = sourceEpisode\n\n            // Update metadata from source if necessary.\n            if (source is AnimeHttpSource) {\n                val sEpisode = episode.toSEpisode()\n                source.prepareNewEpisode(sEpisode, anime.toSAnime())\n                episode = episode.copyFromSEpisode(sEpisode)\n            }\n\n            // Recognize episode number for the episode.\n            val episodeNumber = EpisodeRecognition.parseEpisodeNumber(\n                anime.title,\n                episode.name,\n                episode.episodeNumber,\n            )\n            episode = episode.copy(episodeNumber = episodeNumber)\n\n            val dbEpisode = dbEpisodes.find { it.url == episode.url }\n\n            if (dbEpisode == null) {\n                val toAddEpisode = if (episode.dateUpload == 0L) {\n                    val altDateUpload = if (maxSeenUploadDate == 0L) nowMillis else maxSeenUploadDate\n                    episode.copy(dateUpload = altDateUpload)\n                } else {\n                    maxSeenUploadDate = max(maxSeenUploadDate, sourceEpisode.dateUpload)\n                    episode\n                }\n                newEpisodes.add(toAddEpisode)\n            } else {\n                if (shouldUpdateDbEpisode.await(dbEpisode, episode)) {\n                    val shouldRenameEpisode = downloadProvider.isEpisodeDirNameChanged(\n                        dbEpisode,\n                        episode,\n                    ) &&\n                        downloadManager.isEpisodeDownloaded(\n                            dbEpisode.name,\n                            dbEpisode.scanlator,\n                            anime.title,\n                            anime.source,\n                        )\n\n                    if (shouldRenameEpisode) {\n                        downloadManager.renameEpisode(source, anime, dbEpisode, episode)\n                    }\n                    var toChangeEpisode = dbEpisode.copy(\n                        name = episode.name,\n                        episodeNumber = episode.episodeNumber,\n                        scanlator = episode.scanlator,\n                        summary = episode.summary,\n                        sourceOrder = episode.sourceOrder,\n                    )\n                    if (episode.dateUpload != 0L) {\n                        toChangeEpisode = toChangeEpisode.copy(\n                            dateUpload = sourceEpisode.dateUpload,\n                        )\n                    }\n                    if (!toChangeEpisode.fillermark) {\n                        toChangeEpisode = toChangeEpisode.copy(\n                            fillermark = sourceEpisode.fillermark,\n                        )\n                    }\n                    if (toChangeEpisode.previewUrl.isNullOrBlank()) {\n                        toChangeEpisode = toChangeEpisode.copy(\n                            previewUrl = sourceEpisode.previewUrl,\n                        )\n                    }\n                    updatedEpisodes.add(toChangeEpisode)\n                }\n            }\n        }\n\n        // Return if there's nothing to add, delete, or update to avoid unnecessary db transactions.\n        if (newEpisodes.isEmpty() && removedEpisodes.isEmpty() && updatedEpisodes.isEmpty()) {\n            if (manualFetch || anime.fetchInterval == 0 || anime.nextUpdate < fetchWindow.first) {\n                updateAnime.awaitUpdateFetchInterval(\n                    anime,\n                    now,\n                    fetchWindow,\n                )\n            }\n            return emptyList()\n        }\n\n        val changedOrDuplicateReadUrls = mutableSetOf<String>()\n\n        val deletedEpisodeNumbers = TreeSet<Double>()\n        val deletedSeenEpisodeNumbers = TreeSet<Double>()\n        val deletedBookmarkedEpisodeNumbers = TreeSet<Double>()\n\n        val readEpisodeNumbers = dbEpisodes\n            .asSequence()\n            .filter { it.seen && it.isRecognizedNumber }\n            .map { it.episodeNumber }\n            .toSet()\n\n        removedEpisodes.forEach { episode ->\n            if (episode.seen) deletedSeenEpisodeNumbers.add(episode.episodeNumber)\n            if (episode.bookmark) deletedBookmarkedEpisodeNumbers.add(episode.episodeNumber)\n            deletedEpisodeNumbers.add(episode.episodeNumber)\n        }\n\n        val deletedEpisodeNumberDateFetchMap = removedEpisodes.sortedByDescending { it.dateFetch }\n            .associate { it.episodeNumber to it.dateFetch }\n\n        val markDuplicateAsRead = libraryPreferences.markDuplicateSeenEpisodeAsSeen().get()\n            .contains(LibraryPreferences.MARK_DUPLICATE_EPISODE_SEEN_NEW)\n\n        // Date fetch is set in such a way that the upper ones will have bigger value than the lower ones\n        // Sources MUST return the episodes from most to less recent, which is common.\n        var itemCount = newEpisodes.size\n        var updatedToAdd = newEpisodes.map { toAddItem ->\n            var episode = toAddItem.copy(dateFetch = nowMillis + itemCount--)\n\n            if (episode.episodeNumber in readEpisodeNumbers && markDuplicateAsRead) {\n                changedOrDuplicateReadUrls.add(episode.url)\n                episode = episode.copy(seen = true)\n            }\n\n            if (!episode.isRecognizedNumber || episode.episodeNumber !in deletedEpisodeNumbers) return@map episode\n\n            episode = episode.copy(\n                seen = episode.episodeNumber in deletedSeenEpisodeNumbers,\n                bookmark = episode.episodeNumber in deletedBookmarkedEpisodeNumbers,\n            )\n\n            // Try to to use the fetch date of the original entry to not pollute 'Updates' tab\n            deletedEpisodeNumberDateFetchMap[episode.episodeNumber]?.let {\n                episode = episode.copy(dateFetch = it)\n            }\n\n            changedOrDuplicateReadUrls.add(episode.url)\n\n            episode\n        }\n\n        if (removedEpisodes.isNotEmpty()) {\n            val toDeleteIds = removedEpisodes.map { it.id }\n            episodeRepository.removeEpisodesWithIds(toDeleteIds)\n        }\n\n        if (updatedToAdd.isNotEmpty()) {\n            updatedToAdd = episodeRepository.addAllEpisodes(updatedToAdd)\n        }\n\n        if (updatedEpisodes.isNotEmpty()) {\n            val episodeUpdates = updatedEpisodes.map { it.toEpisodeUpdate() }\n            updateEpisode.awaitAll(episodeUpdates)\n        }\n        updateAnime.awaitUpdateFetchInterval(anime, now, fetchWindow)\n\n        // Set this anime as updated since episodes were changed\n        // Note that last_update actually represents last time the episode list changed at all\n        updateAnime.awaitUpdateLastUpdate(anime.id)\n\n        return updatedToAdd.filterNot { it.url in changedOrDuplicateReadUrls }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/episode/model/Episode.kt",
    "content": "package eu.kanade.domain.items.episode.model\n\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.data.database.models.anime.EpisodeImpl\nimport tachiyomi.domain.items.episode.model.Episode\nimport eu.kanade.tachiyomi.data.database.models.anime.Episode as DbEpisode\n\n// TODO: Remove when all deps are migrated\nfun Episode.toSEpisode(): SEpisode {\n    return SEpisode.create().also {\n        it.url = url\n        it.name = name\n        it.date_upload = dateUpload\n        it.episode_number = episodeNumber.toFloat()\n        it.fillermark = fillermark\n        it.scanlator = scanlator\n        it.summary = summary\n        it.preview_url = previewUrl\n    }\n}\n\nfun Episode.copyFromSEpisode(sEpisode: SEpisode): Episode {\n    return this.copy(\n        name = sEpisode.name,\n        url = sEpisode.url,\n        dateUpload = sEpisode.date_upload,\n        episodeNumber = sEpisode.episode_number.toDouble(),\n        fillermark = sEpisode.fillermark,\n        scanlator = sEpisode.scanlator?.ifBlank { null },\n        summary = sEpisode.summary?.ifBlank { null },\n        previewUrl = sEpisode.preview_url?.ifBlank { null },\n    )\n}\n\nfun Episode.toDbEpisode(): DbEpisode = EpisodeImpl().also {\n    it.id = id\n    it.anime_id = animeId\n    it.url = url\n    it.name = name\n    it.scanlator = scanlator\n    it.summary = summary\n    it.preview_url = previewUrl\n    it.seen = seen\n    it.bookmark = bookmark\n    it.fillermark = fillermark\n    it.last_second_seen = lastSecondSeen\n    it.total_seconds = totalSeconds\n    it.date_fetch = dateFetch\n    it.date_upload = dateUpload\n    it.episode_number = episodeNumber.toFloat()\n    it.source_order = sourceOrder.toInt()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/items/episode/model/EpisodeFilter.kt",
    "content": "package eu.kanade.domain.items.episode.model\n\nimport eu.kanade.domain.entries.anime.model.downloadedFilter\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.ui.entries.anime.EpisodeList\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.applyFilter\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.service.getEpisodeSort\nimport tachiyomi.source.local.entries.anime.isLocal\n\n/**\n * Applies the view filters to the list of episodes obtained from the database.\n * @return an observable of the list of episodes filtered and sorted.\n */\nfun List<Episode>.applyFilters(anime: Anime, downloadManager: AnimeDownloadManager): List<Episode> {\n    val isLocalAnime = anime.isLocal()\n    val unseenFilter = anime.unseenFilter\n    val downloadedFilter = anime.downloadedFilter\n    val bookmarkedFilter = anime.bookmarkedFilter\n    val fillermarkedFilter = anime.fillermarkedFilter\n\n    return asSequence().filter { episode -> applyFilter(unseenFilter) { !episode.seen } }\n        .filter { episode -> applyFilter(bookmarkedFilter) { episode.bookmark } }\n        .filter { episode -> applyFilter(fillermarkedFilter) { episode.fillermark } }\n        .filter { episode ->\n            applyFilter(downloadedFilter) {\n                val downloaded = downloadManager.isEpisodeDownloaded(\n                    episode.name,\n                    episode.scanlator,\n                    anime.title,\n                    anime.source,\n                )\n                downloaded || isLocalAnime\n            }\n        }\n        .sortedWith(getEpisodeSort(anime)).toList()\n}\n\n/**\n * Applies the view filters to the list of episodes obtained from the database.\n * @return an observable of the list of episodes filtered and sorted.\n */\nfun List<EpisodeList.Item>.applyFilters(anime: Anime): Sequence<EpisodeList.Item> {\n    val isLocalAnime = anime.isLocal()\n    val unseenFilter = anime.unseenFilter\n    val downloadedFilter = anime.downloadedFilter\n    val bookmarkedFilter = anime.bookmarkedFilter\n    val fillermarkedFilter = anime.fillermarkedFilter\n    return asSequence()\n        .filter { (episode) -> applyFilter(unseenFilter) { !episode.seen } }\n        .filter { (episode) -> applyFilter(bookmarkedFilter) { episode.bookmark } }\n        .filter { (episode) -> applyFilter(fillermarkedFilter) { episode.fillermark } }\n        .filter { applyFilter(downloadedFilter) { it.isDownloaded || isLocalAnime } }\n        .sortedWith { (episode1), (episode2) -> getEpisodeSort(anime).invoke(episode1, episode2) }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/GetAnimeIncognitoState.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\n\nclass GetAnimeIncognitoState(\n    private val basePreferences: BasePreferences,\n    private val sourcePreferences: SourcePreferences,\n    private val extensionManager: AnimeExtensionManager,\n) {\n    fun await(sourceId: Long?): Boolean {\n        if (basePreferences.incognitoMode().get()) return true\n        if (sourceId == null) return false\n        val extensionPackage = extensionManager.getExtensionPackage(sourceId) ?: return false\n        return extensionPackage in sourcePreferences.incognitoAnimeExtensions().get()\n    }\n\n    fun subscribe(sourceId: Long?): Flow<Boolean> {\n        if (sourceId == null) return basePreferences.incognitoMode().changes()\n        return combine(\n            basePreferences.incognitoMode().changes(),\n            sourcePreferences.incognitoAnimeExtensions().changes(),\n            extensionManager.getExtensionPackageAsFlow(sourceId),\n        ) { incognito, incognitoExtensions, extensionPackage ->\n            incognito || (extensionPackage in incognitoExtensions)\n        }\n            .distinctUntilChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/GetAnimeSourcesWithFavoriteCount.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.domain.source.anime.repository.AnimeSourceRepository\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\nimport java.util.Collections\n\nclass GetAnimeSourcesWithFavoriteCount(\n    private val repository: AnimeSourceRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(): Flow<List<Pair<AnimeSource, Long>>> {\n        return combine(\n            preferences.migrationSortingDirection().changes(),\n            preferences.migrationSortingMode().changes(),\n            repository.getAnimeSourcesWithFavoriteCount(),\n        ) { direction, mode, list ->\n            list\n                .filterNot { it.first.id == LocalAnimeSource.ID }\n                .sortedWith(sortFn(direction, mode))\n        }\n    }\n\n    private fun sortFn(\n        direction: SetMigrateSorting.Direction,\n        sorting: SetMigrateSorting.Mode,\n    ): java.util.Comparator<Pair<AnimeSource, Long>> {\n        val sortFn: (Pair<AnimeSource, Long>, Pair<AnimeSource, Long>) -> Int = { a, b ->\n            when (sorting) {\n                SetMigrateSorting.Mode.ALPHABETICAL -> {\n                    when {\n                        a.first.isStub && !b.first.isStub -> -1\n                        b.first.isStub && !a.first.isStub -> 1\n                        else -> a.first.name.lowercase().compareToWithCollator(b.first.name.lowercase())\n                    }\n                }\n                SetMigrateSorting.Mode.TOTAL -> {\n                    when {\n                        a.first.isStub && !b.first.isStub -> -1\n                        b.first.isStub && !a.first.isStub -> 1\n                        else -> a.second.compareTo(b.second)\n                    }\n                }\n            }\n        }\n\n        return when (direction) {\n            SetMigrateSorting.Direction.ASCENDING -> Comparator(sortFn)\n            SetMigrateSorting.Direction.DESCENDING -> Collections.reverseOrder(sortFn)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/GetEnabledAnimeSources.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.domain.source.anime.model.Pin\nimport tachiyomi.domain.source.anime.model.Pins\nimport tachiyomi.domain.source.anime.repository.AnimeSourceRepository\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\nclass GetEnabledAnimeSources(\n    private val repository: AnimeSourceRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(): Flow<List<AnimeSource>> {\n        return combine(\n            preferences.pinnedAnimeSources().changes(),\n            preferences.enabledLanguages().changes(),\n            preferences.disabledAnimeSources().changes(),\n            preferences.lastUsedAnimeSource().changes(),\n            repository.getAnimeSources(),\n        ) { pinnedSourceIds, enabledLanguages, disabledSources, lastUsedSource, sources ->\n            sources\n                .filter { it.lang in enabledLanguages || it.id == LocalAnimeSource.ID }\n                .filterNot { it.id.toString() in disabledSources }\n                .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })\n                .flatMap {\n                    val flag = if (\"${it.id}\" in pinnedSourceIds) Pins.pinned else Pins.unpinned\n                    val source = it.copy(pin = flag)\n                    val toFlatten = mutableListOf(source)\n                    if (source.id == lastUsedSource) {\n                        toFlatten.add(source.copy(isUsedLast = true, pin = source.pin - Pin.Actual))\n                    }\n                    toFlatten\n                }\n        }\n            .distinctUntilChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/GetLanguagesWithAnimeSources.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.domain.source.anime.repository.AnimeSourceRepository\nimport java.util.SortedMap\n\nclass GetLanguagesWithAnimeSources(\n    private val repository: AnimeSourceRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(): Flow<SortedMap<String, List<AnimeSource>>> {\n        return combine(\n            preferences.enabledLanguages().changes(),\n            preferences.disabledAnimeSources().changes(),\n            repository.getOnlineAnimeSources(),\n        ) { enabledLanguage, disabledSource, onlineSources ->\n            val sortedSources = onlineSources.sortedWith(\n                compareBy<AnimeSource> { it.id.toString() in disabledSource }\n                    .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name },\n            )\n\n            sortedSources\n                .groupBy { it.lang }\n                .toSortedMap(\n                    compareBy<String> { it !in enabledLanguage }.then(LocaleHelper.comparator),\n                )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/ToggleAnimeIncognito.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\n\nclass ToggleAnimeIncognito(\n    private val preferences: SourcePreferences,\n) {\n    fun await(extensions: String, enable: Boolean) {\n        preferences.incognitoAnimeExtensions().getAndSet {\n            if (enable) it.plus(extensions) else it.minus(extensions)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/ToggleAnimeSource.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.domain.source.anime.model.AnimeSource\n\nclass ToggleAnimeSource(\n    private val preferences: SourcePreferences,\n) {\n\n    fun await(source: AnimeSource, enable: Boolean = isEnabled(source.id)) {\n        await(source.id, enable)\n    }\n\n    fun await(sourceId: Long, enable: Boolean = isEnabled(sourceId)) {\n        preferences.disabledAnimeSources().getAndSet { disabled ->\n            if (enable) disabled.minus(\"$sourceId\") else disabled.plus(\"$sourceId\")\n        }\n    }\n\n    fun await(sourceIds: List<Long>, enable: Boolean) {\n        val transformedSourceIds = sourceIds.map { it.toString() }\n        preferences.disabledAnimeSources().getAndSet { disabled ->\n            if (enable) {\n                disabled.minus(transformedSourceIds)\n            } else {\n                disabled.plus(\n                    transformedSourceIds,\n                )\n            }\n        }\n    }\n\n    private fun isEnabled(sourceId: Long): Boolean {\n        return sourceId.toString() in preferences.disabledAnimeSources().get()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/interactor/ToggleAnimeSourcePin.kt",
    "content": "package eu.kanade.domain.source.anime.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.domain.source.anime.model.AnimeSource\n\nclass ToggleAnimeSourcePin(\n    private val preferences: SourcePreferences,\n) {\n\n    fun await(source: AnimeSource) {\n        val isPinned = source.id.toString() in preferences.pinnedAnimeSources().get()\n        preferences.pinnedAnimeSources().getAndSet { pinned ->\n            if (isPinned) pinned.minus(\"${source.id}\") else pinned.plus(\"${source.id}\")\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/anime/model/AnimeSource.kt",
    "content": "package eu.kanade.domain.source.anime.model\n\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.core.graphics.drawable.toBitmap\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nval AnimeSource.icon: ImageBitmap?\n    get() {\n        return Injekt.get<AnimeExtensionManager>().getAppIconForSource(id)\n            ?.toBitmap()\n            ?.asImageBitmap()\n    }\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/interactor/SetMigrateSorting.kt",
    "content": "package eu.kanade.domain.source.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\n\nclass SetMigrateSorting(\n    private val preferences: SourcePreferences,\n) {\n\n    fun await(mode: Mode, direction: Direction) {\n        preferences.migrationSortingMode().set(mode)\n        preferences.migrationSortingDirection().set(direction)\n    }\n\n    enum class Mode {\n        ALPHABETICAL,\n        TOTAL,\n    }\n\n    enum class Direction {\n        ASCENDING,\n        DESCENDING,\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/interactor/ToggleLanguage.kt",
    "content": "package eu.kanade.domain.source.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\n\nclass ToggleLanguage(\n    val preferences: SourcePreferences,\n) {\n\n    fun await(language: String) {\n        val isEnabled = language in preferences.enabledLanguages().get()\n        preferences.enabledLanguages().getAndSet { enabled ->\n            if (isEnabled) enabled.minus(language) else enabled.plus(language)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/GetEnabledMangaSources.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport tachiyomi.domain.source.manga.model.Pin\nimport tachiyomi.domain.source.manga.model.Pins\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\nclass GetEnabledMangaSources(\n    private val repository: MangaSourceRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(): Flow<List<Source>> {\n        return combine(\n            preferences.pinnedMangaSources().changes(),\n            preferences.enabledLanguages().changes(),\n            combine(\n                preferences.disabledMangaSources().changes(),\n                preferences.lastUsedMangaSource().changes(),\n                // SY -->\n                preferences.dataSaverExcludedSources().changes(),\n                // SY <--\n            ) { a, b, c -> Triple(a, b, c) },\n            repository.getMangaSources(),\n        ) { pinnedSourceIds, enabledLanguages, (disabledSources, lastUsedSource, excludedFromDataSaver), sources ->\n            sources\n                .filter { it.lang in enabledLanguages || it.id == LocalMangaSource.ID }\n                .filterNot { it.id.toString() in disabledSources }\n                .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })\n                .flatMap {\n                    val flag = if (\"${it.id}\" in pinnedSourceIds) Pins.pinned else Pins.unpinned\n                    val source = it.copy(\n                        pin = flag,\n                        // SY -->\n                        isExcludedFromDataSaver = it.id.toString() in excludedFromDataSaver,\n                        // SY <--\n                    )\n                    val toFlatten = mutableListOf(source)\n                    if (source.id == lastUsedSource) {\n                        toFlatten.add(source.copy(isUsedLast = true, pin = source.pin - Pin.Actual))\n                    }\n                    toFlatten\n                }\n        }\n            .distinctUntilChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/GetLanguagesWithMangaSources.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\nimport java.util.SortedMap\n\nclass GetLanguagesWithMangaSources(\n    private val repository: MangaSourceRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(): Flow<SortedMap<String, List<Source>>> {\n        return combine(\n            preferences.enabledLanguages().changes(),\n            preferences.disabledMangaSources().changes(),\n            repository.getOnlineMangaSources(),\n        ) { enabledLanguage, disabledSource, onlineSources ->\n            val sortedSources = onlineSources.sortedWith(\n                compareBy<Source> { it.id.toString() in disabledSource }\n                    .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name },\n            )\n\n            sortedSources\n                .groupBy { it.lang }\n                .toSortedMap(\n                    compareBy<String> { it !in enabledLanguage }.then(LocaleHelper.comparator),\n                )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/GetMangaIncognitoState.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\n\nclass GetMangaIncognitoState(\n    private val basePreferences: BasePreferences,\n    private val sourcePreferences: SourcePreferences,\n    private val extensionManager: MangaExtensionManager,\n) {\n    fun await(sourceId: Long?): Boolean {\n        if (basePreferences.incognitoMode().get()) return true\n        if (sourceId == null) return false\n        val extensionPackage = extensionManager.getExtensionPackage(sourceId) ?: return false\n        return extensionPackage in sourcePreferences.incognitoMangaExtensions().get()\n    }\n\n    fun subscribe(sourceId: Long?): Flow<Boolean> {\n        if (sourceId == null) return basePreferences.incognitoMode().changes()\n        return combine(\n            basePreferences.incognitoMode().changes(),\n            sourcePreferences.incognitoMangaExtensions().changes(),\n            extensionManager.getExtensionPackageAsFlow(sourceId),\n        ) { incognito, incognitoExtensions, extensionPackage ->\n            incognito || (extensionPackage in incognitoExtensions)\n        }\n            .distinctUntilChanged()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/GetMangaSourcesWithFavoriteCount.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\nimport java.util.Collections\n\nclass GetMangaSourcesWithFavoriteCount(\n    private val repository: MangaSourceRepository,\n    private val preferences: SourcePreferences,\n) {\n\n    fun subscribe(): Flow<List<Pair<Source, Long>>> {\n        return combine(\n            preferences.migrationSortingDirection().changes(),\n            preferences.migrationSortingMode().changes(),\n            repository.getMangaSourcesWithFavoriteCount(),\n        ) { direction, mode, list ->\n            list\n                .filterNot { it.first.id == LocalMangaSource.ID }\n                .sortedWith(sortFn(direction, mode))\n        }\n    }\n\n    private fun sortFn(\n        direction: SetMigrateSorting.Direction,\n        sorting: SetMigrateSorting.Mode,\n    ): java.util.Comparator<Pair<Source, Long>> {\n        val sortFn: (Pair<Source, Long>, Pair<Source, Long>) -> Int = { a, b ->\n            when (sorting) {\n                SetMigrateSorting.Mode.ALPHABETICAL -> {\n                    when {\n                        a.first.isStub && !b.first.isStub -> -1\n                        b.first.isStub && !a.first.isStub -> 1\n                        else -> a.first.name.lowercase().compareToWithCollator(b.first.name.lowercase())\n                    }\n                }\n                SetMigrateSorting.Mode.TOTAL -> {\n                    when {\n                        a.first.isStub && !b.first.isStub -> -1\n                        b.first.isStub && !a.first.isStub -> 1\n                        else -> a.second.compareTo(b.second)\n                    }\n                }\n            }\n        }\n\n        return when (direction) {\n            SetMigrateSorting.Direction.ASCENDING -> Comparator(sortFn)\n            SetMigrateSorting.Direction.DESCENDING -> Collections.reverseOrder(sortFn)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/ToggleExcludeFromMangaDataSaver.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.domain.source.manga.model.Source\n\nclass ToggleExcludeFromMangaDataSaver(\n    private val preferences: SourcePreferences,\n) {\n\n    fun await(source: Source) {\n        preferences.dataSaverExcludedSources().getAndSet {\n            if (source.id.toString() in it) {\n                it - source.id.toString()\n            } else {\n                it + source.id.toString()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/ToggleMangaIncognito.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\n\nclass ToggleMangaIncognito(\n    private val preferences: SourcePreferences,\n) {\n    fun await(extensions: String, enable: Boolean) {\n        preferences.incognitoMangaExtensions().getAndSet {\n            if (enable) it.plus(extensions) else it.minus(extensions)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/ToggleMangaSource.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.domain.source.manga.model.Source\n\nclass ToggleMangaSource(\n    private val preferences: SourcePreferences,\n) {\n\n    fun await(source: Source, enable: Boolean = isEnabled(source.id)) {\n        await(source.id, enable)\n    }\n\n    fun await(sourceId: Long, enable: Boolean = isEnabled(sourceId)) {\n        preferences.disabledMangaSources().getAndSet { disabled ->\n            if (enable) disabled.minus(\"$sourceId\") else disabled.plus(\"$sourceId\")\n        }\n    }\n\n    fun await(sourceIds: List<Long>, enable: Boolean) {\n        val transformedSourceIds = sourceIds.map { it.toString() }\n        preferences.disabledMangaSources().getAndSet { disabled ->\n            if (enable) {\n                disabled.minus(transformedSourceIds)\n            } else {\n                disabled.plus(\n                    transformedSourceIds,\n                )\n            }\n        }\n    }\n\n    private fun isEnabled(sourceId: Long): Boolean {\n        return sourceId.toString() in preferences.disabledMangaSources().get()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/interactor/ToggleMangaSourcePin.kt",
    "content": "package eu.kanade.domain.source.manga.interactor\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.domain.source.manga.model.Source\n\nclass ToggleMangaSourcePin(\n    private val preferences: SourcePreferences,\n) {\n\n    fun await(source: Source) {\n        val isPinned = source.id.toString() in preferences.pinnedMangaSources().get()\n        preferences.pinnedMangaSources().getAndSet { pinned ->\n            if (isPinned) pinned.minus(\"${source.id}\") else pinned.plus(\"${source.id}\")\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/manga/model/MangaSource.kt",
    "content": "package eu.kanade.domain.source.manga.model\n\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.core.graphics.drawable.toBitmap\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport tachiyomi.domain.source.manga.model.Source\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nval Source.icon: ImageBitmap?\n    get() {\n        return Injekt.get<MangaExtensionManager>().getAppIconForSource(id)\n            ?.toBitmap()\n            ?.asImageBitmap()\n    }\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt",
    "content": "package eu.kanade.domain.source.service\n\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\nimport tachiyomi.domain.library.model.LibraryDisplayMode\n\nclass SourcePreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    // Common options\n\n    fun sourceDisplayMode() = preferenceStore.getObject(\n        \"pref_display_mode_catalogue\",\n        LibraryDisplayMode.default,\n        LibraryDisplayMode.Serializer::serialize,\n        LibraryDisplayMode.Serializer::deserialize,\n    )\n\n    fun enabledLanguages() = preferenceStore.getStringSet(\n        \"source_languages\",\n        LocaleHelper.getDefaultEnabledLanguages(),\n    )\n\n    fun showNsfwSource() = preferenceStore.getBoolean(\"show_nsfw_source\", true)\n\n    fun migrationSortingMode() = preferenceStore.getEnum(\n        \"pref_migration_sorting\",\n        SetMigrateSorting.Mode.ALPHABETICAL,\n    )\n\n    fun migrationSortingDirection() = preferenceStore.getEnum(\n        \"pref_migration_direction\",\n        SetMigrateSorting.Direction.ASCENDING,\n    )\n\n    fun animeExtensionRepos() = preferenceStore.getStringSet(\"anime_extension_repos\", emptySet())\n\n    fun mangaExtensionRepos() = preferenceStore.getStringSet(\"extension_repos\", emptySet())\n\n    fun trustedExtensions() = preferenceStore.getStringSet(\n        Preference.appStateKey(\"trusted_extensions\"),\n        emptySet(),\n    )\n\n    fun globalSearchFilterState() = preferenceStore.getBoolean(\n        Preference.appStateKey(\"has_filters_toggle_state\"),\n        false,\n    )\n\n    // Mixture Sources\n\n    fun disabledAnimeSources() = preferenceStore.getStringSet(\"hidden_anime_catalogues\", emptySet())\n    fun disabledMangaSources() = preferenceStore.getStringSet(\"hidden_catalogues\", emptySet())\n\n    fun incognitoAnimeExtensions() = preferenceStore.getStringSet(\"incognito_anime_extensions\", emptySet())\n    fun incognitoMangaExtensions() = preferenceStore.getStringSet(\"incognito_manga_extensions\", emptySet())\n\n    fun pinnedAnimeSources() = preferenceStore.getStringSet(\"pinned_anime_catalogues\", emptySet())\n    fun pinnedMangaSources() = preferenceStore.getStringSet(\"pinned_catalogues\", emptySet())\n\n    fun lastUsedAnimeSource() = preferenceStore.getLong(\n        Preference.appStateKey(\"last_anime_catalogue_source\"),\n        -1,\n    )\n    fun lastUsedMangaSource() = preferenceStore.getLong(\n        Preference.appStateKey(\"last_catalogue_source\"),\n        -1,\n    )\n\n    fun animeExtensionUpdatesCount() = preferenceStore.getInt(\"animeext_updates_count\", 0)\n    fun mangaExtensionUpdatesCount() = preferenceStore.getInt(\"ext_updates_count\", 0)\n\n    fun hideInAnimeLibraryItems() = preferenceStore.getBoolean(\n        \"browse_hide_in_anime_library_items\",\n        false,\n    )\n\n    fun hideInMangaLibraryItems() = preferenceStore.getBoolean(\n        \"browse_hide_in_library_items\",\n        false,\n    )\n\n    // SY -->\n\n    // fun enableSourceBlacklist() = preferenceStore.getBoolean(\"eh_enable_source_blacklist\", true)\n\n    // fun sourcesTabCategories() = preferenceStore.getStringSet(\"sources_tab_categories\", mutableSetOf())\n\n    // fun sourcesTabCategoriesFilter() = preferenceStore.getBoolean(\"sources_tab_categories_filter\", false)\n\n    // fun sourcesTabSourcesInCategories() = preferenceStore.getStringSet(\"sources_tab_source_categories\", mutableSetOf())\n\n    fun dataSaver() = preferenceStore.getEnum(\"data_saver\", DataSaver.NONE)\n\n    fun dataSaverIgnoreJpeg() = preferenceStore.getBoolean(\"ignore_jpeg\", false)\n\n    fun dataSaverIgnoreGif() = preferenceStore.getBoolean(\"ignore_gif\", true)\n\n    fun dataSaverImageQuality() = preferenceStore.getInt(\"data_saver_image_quality\", 80)\n\n    fun dataSaverImageFormatJpeg() = preferenceStore.getBoolean(\n        \"data_saver_image_format_jpeg\",\n        false,\n    )\n\n    fun dataSaverServer() = preferenceStore.getString(\"data_saver_server\", \"\")\n\n    fun dataSaverColorBW() = preferenceStore.getBoolean(\"data_saver_color_bw\", false)\n\n    fun dataSaverExcludedSources() = preferenceStore.getStringSet(\"data_saver_excluded\", emptySet())\n\n    fun dataSaverDownloader() = preferenceStore.getBoolean(\"data_saver_downloader\", true)\n\n    enum class DataSaver {\n        NONE,\n        BANDWIDTH_HERO,\n        WSRV_NL,\n        RESMUSH_IT,\n    }\n    // SY <--\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/interactor/AddAnimeTracks.kt",
    "content": "package eu.kanade.domain.track.anime.interactor\n\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.domain.track.anime.model.toDomainTrack\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.util.lang.convertEpochMillisZone\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.history.anime.interactor.GetAnimeHistory\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.ZoneOffset\n\nclass AddAnimeTracks(\n    private val insertTrack: InsertAnimeTrack,\n    private val syncChapterProgressWithTrack: SyncEpisodeProgressWithTrack,\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId,\n    private val trackerManager: TrackerManager,\n) {\n\n    // TODO: update all trackers based on common data\n    suspend fun bind(tracker: AnimeTracker, item: AnimeTrack, animeId: Long) = withNonCancellableContext {\n        withIOContext {\n            val allChapters = getEpisodesByAnimeId.await(animeId)\n            val hasSeenEpisodes = allChapters.any { it.seen }\n            tracker.bind(item, hasSeenEpisodes)\n\n            var track = item.toDomainTrack(idRequired = false) ?: return@withIOContext\n\n            insertTrack.await(track)\n\n            // TODO: merge into [SyncChapterProgressWithTrack]?\n            // Update chapter progress if newer chapters marked read locally\n            if (hasSeenEpisodes) {\n                val latestLocalReadChapterNumber = allChapters\n                    .sortedBy { it.episodeNumber }\n                    .takeWhile { it.seen }\n                    .lastOrNull()\n                    ?.episodeNumber ?: -1.0\n\n                if (latestLocalReadChapterNumber > track.lastEpisodeSeen) {\n                    track = track.copy(\n                        lastEpisodeSeen = latestLocalReadChapterNumber,\n                    )\n                    tracker.setRemoteLastEpisodeSeen(track.toDbTrack(), latestLocalReadChapterNumber.toInt())\n                }\n\n                if (track.startDate <= 0) {\n                    val firstReadChapterDate = Injekt.get<GetAnimeHistory>().await(animeId)\n                        .sortedBy { it.seenAt }\n                        .firstOrNull()\n                        ?.seenAt\n\n                    firstReadChapterDate?.let {\n                        val startDate = firstReadChapterDate.time.convertEpochMillisZone(\n                            ZoneOffset.systemDefault(),\n                            ZoneOffset.UTC,\n                        )\n                        track = track.copy(\n                            startDate = startDate,\n                        )\n                        tracker.setRemoteStartDate(track.toDbTrack(), startDate)\n                    }\n                }\n            }\n\n            syncChapterProgressWithTrack.await(animeId, track, tracker)\n        }\n    }\n\n    suspend fun bindEnhancedTrackers(anime: Anime, source: AnimeSource) = withNonCancellableContext {\n        withIOContext {\n            trackerManager.loggedInTrackers()\n                .filterIsInstance<EnhancedAnimeTracker>()\n                .filter { it.accept(source) }\n                .forEach { service ->\n                    try {\n                        service.match(anime)?.let { track ->\n                            track.anime_id = anime.id\n                            (service as Tracker).animeService.bind(track)\n                            insertTrack.await(track.toDomainTrack(idRequired = false)!!)\n\n                            syncChapterProgressWithTrack.await(\n                                anime.id,\n                                track.toDomainTrack(idRequired = false)!!,\n                                service.animeService,\n                            )\n                        }\n                    } catch (e: Exception) {\n                        logcat(\n                            LogPriority.WARN,\n                            e,\n                        ) { \"Could not match anime: ${anime.title} with service $service\" }\n                    }\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/interactor/RefreshAnimeTracks.kt",
    "content": "package eu.kanade.domain.track.anime.interactor\n\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.domain.track.anime.model.toDomainTrack\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.supervisorScope\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\n\nclass RefreshAnimeTracks(\n    private val getTracks: GetAnimeTracks,\n    private val trackerManager: TrackerManager,\n    private val insertTrack: InsertAnimeTrack,\n    private val syncEpisodeProgressWithTrack: SyncEpisodeProgressWithTrack,\n) {\n\n    /**\n     * Fetches updated tracking data from all logged in trackers.\n     *\n     * @return Failed updates.\n     */\n    suspend fun await(animeId: Long): List<Pair<Tracker?, Throwable>> {\n        return supervisorScope {\n            return@supervisorScope getTracks.await(animeId)\n                .map { it to trackerManager.get(it.trackerId) }\n                .filter { (_, service) -> service?.isLoggedIn == true }\n                .map { (track, service) ->\n                    async {\n                        return@async try {\n                            val updatedTrack = service!!.animeService.refresh(track.toDbTrack()).toDomainTrack()!!\n                            insertTrack.await(updatedTrack)\n                            syncEpisodeProgressWithTrack.await(animeId, updatedTrack, service.animeService)\n                            null\n                        } catch (e: Throwable) {\n                            service to e\n                        }\n                    }\n                }\n                .awaitAll()\n                .filterNotNull()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/interactor/SyncEpisodeProgressWithTrack.kt",
    "content": "package eu.kanade.domain.track.anime.interactor\n\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.toEpisodeUpdate\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport kotlin.math.max\n\nclass SyncEpisodeProgressWithTrack(\n    private val updateEpisode: UpdateEpisode,\n    private val insertTrack: InsertAnimeTrack,\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId,\n) {\n\n    suspend fun await(\n        animeId: Long,\n        remoteTrack: AnimeTrack,\n        service: AnimeTracker,\n    ) {\n        if (service !is EnhancedAnimeTracker) {\n            return\n        }\n\n        val sortedEpisodes = getEpisodesByAnimeId.await(animeId)\n            .sortedBy { it.episodeNumber }\n            .filter { it.isRecognizedNumber }\n\n        val episodeUpdates = sortedEpisodes\n            .filter { episode -> episode.episodeNumber <= remoteTrack.lastEpisodeSeen && !episode.seen }\n            .map { it.copy(seen = true).toEpisodeUpdate() }\n\n        // only take into account continuous watching\n        val localLastSeen = sortedEpisodes.takeWhile { it.seen }.lastOrNull()?.episodeNumber ?: 0F\n        val lastSeen = max(remoteTrack.lastEpisodeSeen, localLastSeen.toDouble())\n        val updatedTrack = remoteTrack.copy(lastEpisodeSeen = lastSeen)\n\n        try {\n            service.update(updatedTrack.toDbTrack())\n            updateEpisode.awaitAll(episodeUpdates)\n            insertTrack.await(updatedTrack)\n        } catch (e: Throwable) {\n            logcat(LogPriority.WARN, e)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/interactor/TrackEpisode.kt",
    "content": "package eu.kanade.domain.track.anime.interactor\n\nimport android.content.Context\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.domain.track.anime.model.toDomainTrack\nimport eu.kanade.domain.track.anime.service.DelayedAnimeTrackingUpdateJob\nimport eu.kanade.domain.track.anime.store.DelayedAnimeTrackingStore\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.util.system.isOnline\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\n\nclass TrackEpisode(\n    private val getTracks: GetAnimeTracks,\n    private val trackerManager: TrackerManager,\n    private val insertTrack: InsertAnimeTrack,\n    private val delayedTrackingStore: DelayedAnimeTrackingStore,\n) {\n\n    suspend fun await(context: Context, animeId: Long, episodeNumber: Double, setupJobOnFailure: Boolean = true) {\n        withNonCancellableContext {\n            val tracks = getTracks.await(animeId)\n            if (tracks.isEmpty()) return@withNonCancellableContext\n\n            tracks.mapNotNull { track ->\n                val service = trackerManager.get(track.trackerId)\n                if (service == null || !service.isLoggedIn || episodeNumber <= track.lastEpisodeSeen) {\n                    return@mapNotNull null\n                }\n\n                async {\n                    runCatching {\n                        if (context.isOnline()) {\n                            val updatedTrack = service.animeService.refresh(track.toDbTrack())\n                                .toDomainTrack(idRequired = true)!!\n                                .copy(lastEpisodeSeen = episodeNumber)\n                            service.animeService.update(updatedTrack.toDbTrack(), true)\n                            insertTrack.await(updatedTrack)\n                            delayedTrackingStore.removeAnimeItem(track.id)\n                        } else {\n                            delayedTrackingStore.addAnime(track.id, episodeNumber)\n                            if (setupJobOnFailure) {\n                                DelayedAnimeTrackingUpdateJob.setupTask(context)\n                            }\n                        }\n                    }\n                }\n            }\n                .awaitAll()\n                .mapNotNull { it.exceptionOrNull() }\n                .forEach { logcat(LogPriority.INFO, it) }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/model/AnimeTrack.kt",
    "content": "package eu.kanade.domain.track.anime.model\n\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack as DbAnimeTrack\n\nfun AnimeTrack.copyPersonalFrom(other: AnimeTrack): AnimeTrack {\n    return this.copy(\n        lastEpisodeSeen = other.lastEpisodeSeen,\n        score = other.score,\n        status = other.status,\n        startDate = other.startDate,\n        finishDate = other.finishDate,\n        private = other.private,\n    )\n}\n\nfun AnimeTrack.toDbTrack(): DbAnimeTrack = DbAnimeTrack.create(trackerId).also {\n    it.id = id\n    it.anime_id = animeId\n    it.remote_id = remoteId\n    it.library_id = libraryId\n    it.title = title\n    it.last_episode_seen = lastEpisodeSeen\n    it.total_episodes = totalEpisodes\n    it.status = status\n    it.score = score\n    it.tracking_url = remoteUrl\n    it.started_watching_date = startDate\n    it.finished_watching_date = finishDate\n    it.private = private\n}\n\nfun DbAnimeTrack.toDomainTrack(idRequired: Boolean = true): AnimeTrack? {\n    val trackId = id ?: if (!idRequired) -1 else return null\n    return AnimeTrack(\n        id = trackId,\n        animeId = anime_id,\n        trackerId = tracker_id.toLong(),\n        remoteId = remote_id,\n        libraryId = library_id,\n        title = title,\n        lastEpisodeSeen = last_episode_seen,\n        totalEpisodes = total_episodes,\n        status = status,\n        score = score,\n        remoteUrl = tracking_url,\n        startDate = started_watching_date,\n        finishDate = finished_watching_date,\n        private = private,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/service/DelayedAnimeTrackingUpdateJob.kt",
    "content": "package eu.kanade.domain.track.anime.service\n\nimport android.content.Context\nimport androidx.work.BackoffPolicy\nimport androidx.work.Constraints\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.NetworkType\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkerParameters\nimport eu.kanade.domain.track.anime.interactor.TrackEpisode\nimport eu.kanade.domain.track.anime.store.DelayedAnimeTrackingStore\nimport eu.kanade.tachiyomi.util.system.workManager\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.minutes\nimport kotlin.time.toJavaDuration\n\nclass DelayedAnimeTrackingUpdateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    override suspend fun doWork(): Result {\n        if (runAttemptCount > 3) {\n            return Result.failure()\n        }\n\n        val getTracks = Injekt.get<GetAnimeTracks>()\n        val trackEpisode = Injekt.get<TrackEpisode>()\n\n        val delayedTrackingStore = Injekt.get<DelayedAnimeTrackingStore>()\n\n        withIOContext {\n            delayedTrackingStore.getAnimeItems()\n                .mapNotNull {\n                    val track = getTracks.awaitOne(it.trackId)\n                    if (track == null) {\n                        delayedTrackingStore.removeAnimeItem(it.trackId)\n                    }\n                    track?.copy(lastEpisodeSeen = it.lastEpisodeSeen.toDouble())\n                }\n                .forEach { animeTrack ->\n                    logcat(LogPriority.DEBUG) {\n                        \"Updating delayed track item: ${animeTrack.animeId}\" +\n                            \", last chapter read: ${animeTrack.lastEpisodeSeen}\"\n                    }\n                    trackEpisode.await(\n                        context,\n                        animeTrack.animeId,\n                        animeTrack.lastEpisodeSeen,\n                        setupJobOnFailure = false,\n                    )\n                }\n        }\n\n        return if (delayedTrackingStore.getAnimeItems().isEmpty()) Result.success() else Result.retry()\n    }\n\n    companion object {\n        private const val TAG = \"DelayedAnimeTrackingUpdate\"\n\n        fun setupTask(context: Context) {\n            val constraints = Constraints(\n                requiredNetworkType = NetworkType.CONNECTED,\n            )\n\n            val request = OneTimeWorkRequestBuilder<DelayedAnimeTrackingUpdateJob>()\n                .setConstraints(constraints)\n                .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 5.minutes.toJavaDuration())\n                .addTag(TAG)\n                .build()\n\n            context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/anime/store/DelayedAnimeTrackingStore.kt",
    "content": "package eu.kanade.domain.track.anime.store\n\nimport android.content.Context\nimport androidx.core.content.edit\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nclass DelayedAnimeTrackingStore(context: Context) {\n\n    /**\n     * Preference file where queued tracking updates are stored.\n     */\n    private val preferences = context.getSharedPreferences(\"tracking_queue\", Context.MODE_PRIVATE)\n\n    fun addAnime(trackId: Long, lastEpisodeSeen: Double) {\n        val previousLastEpisodeSeen = preferences.getFloat(trackId.toString(), 0f)\n        if (lastEpisodeSeen > previousLastEpisodeSeen) {\n            logcat(LogPriority.DEBUG) { \"Queuing track item: $trackId, last episode seen: $lastEpisodeSeen\" }\n            preferences.edit {\n                putFloat(trackId.toString(), lastEpisodeSeen.toFloat())\n            }\n        }\n    }\n\n    fun removeAnimeItem(trackId: Long) {\n        preferences.edit {\n            remove(trackId.toString())\n        }\n    }\n\n    fun getAnimeItems(): List<DelayedAnimeTrackingItem> {\n        return preferences.all.mapNotNull {\n            DelayedAnimeTrackingItem(\n                trackId = it.key.toLong(),\n                lastEpisodeSeen = it.value.toString().toFloat(),\n            )\n        }\n    }\n\n    data class DelayedAnimeTrackingItem(\n        val trackId: Long,\n        val lastEpisodeSeen: Float,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/interactor/AddMangaTracks.kt",
    "content": "package eu.kanade.domain.track.manga.interactor\n\nimport eu.kanade.domain.track.manga.model.toDbTrack\nimport eu.kanade.domain.track.manga.model.toDomainTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.util.lang.convertEpochMillisZone\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.history.manga.interactor.GetMangaHistory\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.ZoneOffset\n\nclass AddMangaTracks(\n    private val insertTrack: InsertMangaTrack,\n    private val syncChapterProgressWithTrack: SyncChapterProgressWithTrack,\n    private val getChaptersByMangaId: GetChaptersByMangaId,\n    private val trackerManager: TrackerManager,\n) {\n\n    // TODO: update all trackers based on common data\n    suspend fun bind(tracker: MangaTracker, item: MangaTrack, mangaId: Long) = withNonCancellableContext {\n        withIOContext {\n            val allChapters = getChaptersByMangaId.await(mangaId)\n            val hasReadChapters = allChapters.any { it.read }\n            tracker.bind(item, hasReadChapters)\n\n            var track = item.toDomainTrack(idRequired = false) ?: return@withIOContext\n\n            insertTrack.await(track)\n\n            // TODO: merge into [SyncChapterProgressWithTrack]?\n            // Update chapter progress if newer chapters marked read locally\n            if (hasReadChapters) {\n                val latestLocalReadChapterNumber = allChapters\n                    .sortedBy { it.chapterNumber }\n                    .takeWhile { it.read }\n                    .lastOrNull()\n                    ?.chapterNumber ?: -1.0\n\n                if (latestLocalReadChapterNumber > track.lastChapterRead) {\n                    track = track.copy(\n                        lastChapterRead = latestLocalReadChapterNumber,\n                    )\n                    tracker.setRemoteLastChapterRead(track.toDbTrack(), latestLocalReadChapterNumber.toInt())\n                }\n\n                if (track.startDate <= 0) {\n                    val firstReadChapterDate = Injekt.get<GetMangaHistory>().await(mangaId)\n                        .sortedBy { it.readAt }\n                        .firstOrNull()\n                        ?.readAt\n\n                    firstReadChapterDate?.let {\n                        val startDate = firstReadChapterDate.time.convertEpochMillisZone(\n                            ZoneOffset.systemDefault(),\n                            ZoneOffset.UTC,\n                        )\n                        track = track.copy(\n                            startDate = startDate,\n                        )\n                        tracker.setRemoteStartDate(track.toDbTrack(), startDate)\n                    }\n                }\n            }\n\n            syncChapterProgressWithTrack.await(mangaId, track, tracker)\n        }\n    }\n\n    suspend fun bindEnhancedTrackers(manga: Manga, source: MangaSource) = withNonCancellableContext {\n        withIOContext {\n            trackerManager.loggedInTrackers()\n                .filterIsInstance<EnhancedMangaTracker>()\n                .filter { it.accept(source) }\n                .forEach { service ->\n                    try {\n                        service.match(manga)?.let { track ->\n                            track.manga_id = manga.id\n                            (service as Tracker).mangaService.bind(track)\n                            insertTrack.await(track.toDomainTrack(idRequired = false)!!)\n\n                            syncChapterProgressWithTrack.await(\n                                manga.id,\n                                track.toDomainTrack(idRequired = false)!!,\n                                service.mangaService,\n                            )\n                        }\n                    } catch (e: Exception) {\n                        logcat(\n                            LogPriority.WARN,\n                            e,\n                        ) { \"Could not match manga: ${manga.title} with service $service\" }\n                    }\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/interactor/RefreshMangaTracks.kt",
    "content": "package eu.kanade.domain.track.manga.interactor\n\nimport eu.kanade.domain.track.manga.model.toDbTrack\nimport eu.kanade.domain.track.manga.model.toDomainTrack\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.supervisorScope\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\n\nclass RefreshMangaTracks(\n    private val getTracks: GetMangaTracks,\n    private val trackerManager: TrackerManager,\n    private val insertTrack: InsertMangaTrack,\n    private val syncChapterProgressWithTrack: SyncChapterProgressWithTrack,\n) {\n\n    /**\n     * Fetches updated tracking data from all logged in trackers.\n     *\n     * @return Failed updates.\n     */\n    suspend fun await(mangaId: Long): List<Pair<Tracker?, Throwable>> {\n        return supervisorScope {\n            return@supervisorScope getTracks.await(mangaId)\n                .map { it to trackerManager.get(it.trackerId) }\n                .filter { (_, service) -> service?.isLoggedIn == true }\n                .map { (track, service) ->\n                    async {\n                        return@async try {\n                            val updatedTrack = service!!.mangaService.refresh(track.toDbTrack()).toDomainTrack()!!\n                            insertTrack.await(updatedTrack)\n                            syncChapterProgressWithTrack.await(mangaId, updatedTrack, service.mangaService)\n                            null\n                        } catch (e: Throwable) {\n                            service to e\n                        }\n                    }\n                }\n                .awaitAll()\n                .filterNotNull()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/interactor/SyncChapterProgressWithTrack.kt",
    "content": "package eu.kanade.domain.track.manga.interactor\n\nimport eu.kanade.domain.track.manga.model.toDbTrack\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.toChapterUpdate\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport kotlin.math.max\n\nclass SyncChapterProgressWithTrack(\n    private val updateChapter: UpdateChapter,\n    private val insertTrack: InsertMangaTrack,\n    private val getChaptersByMangaId: GetChaptersByMangaId,\n) {\n\n    suspend fun await(\n        mangaId: Long,\n        remoteTrack: MangaTrack,\n        tracker: MangaTracker,\n    ) {\n        if (tracker !is EnhancedMangaTracker) {\n            return\n        }\n\n        val sortedChapters = getChaptersByMangaId.await(mangaId)\n            .sortedBy { it.chapterNumber }\n            .filter { it.isRecognizedNumber }\n\n        val chapterUpdates = sortedChapters\n            .filter { chapter -> chapter.chapterNumber <= remoteTrack.lastChapterRead && !chapter.read }\n            .map { it.copy(read = true).toChapterUpdate() }\n\n        // only take into account continuous reading\n        val localLastRead = sortedChapters.takeWhile { it.read }.lastOrNull()?.chapterNumber ?: 0F\n        val lastRead = max(remoteTrack.lastChapterRead, localLastRead.toDouble())\n        val updatedTrack = remoteTrack.copy(lastChapterRead = lastRead)\n\n        try {\n            tracker.update(updatedTrack.toDbTrack())\n            updateChapter.awaitAll(chapterUpdates)\n            insertTrack.await(updatedTrack)\n        } catch (e: Throwable) {\n            logcat(LogPriority.WARN, e)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/interactor/TrackChapter.kt",
    "content": "package eu.kanade.domain.track.manga.interactor\n\nimport android.content.Context\nimport eu.kanade.domain.track.manga.model.toDbTrack\nimport eu.kanade.domain.track.manga.model.toDomainTrack\nimport eu.kanade.domain.track.manga.service.DelayedMangaTrackingUpdateJob\nimport eu.kanade.domain.track.manga.store.DelayedMangaTrackingStore\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\n\nclass TrackChapter(\n    private val getTracks: GetMangaTracks,\n    private val trackerManager: TrackerManager,\n    private val insertTrack: InsertMangaTrack,\n    private val delayedTrackingStore: DelayedMangaTrackingStore,\n) {\n\n    suspend fun await(context: Context, mangaId: Long, chapterNumber: Double, setupJobOnFailure: Boolean = true) {\n        withNonCancellableContext {\n            val tracks = getTracks.await(mangaId)\n            if (tracks.isEmpty()) return@withNonCancellableContext\n\n            tracks.mapNotNull { track ->\n                val service = trackerManager.get(track.trackerId)\n                if (service == null || !service.isLoggedIn || chapterNumber <= track.lastChapterRead) {\n                    if (service == null || !service.isLoggedIn || chapterNumber <= track.lastChapterRead) {\n                        return@mapNotNull null\n                    }\n                }\n\n                async {\n                    runCatching {\n                        try {\n                            val updatedTrack = service.mangaService.refresh(track.toDbTrack())\n                                .toDomainTrack(idRequired = true)!!\n                                .copy(lastChapterRead = chapterNumber)\n                            service.mangaService.update(updatedTrack.toDbTrack(), true)\n                            insertTrack.await(updatedTrack)\n                            delayedTrackingStore.removeMangaItem(track.id)\n                        } catch (e: Exception) {\n                            delayedTrackingStore.addManga(track.id, chapterNumber)\n                            if (setupJobOnFailure) {\n                                DelayedMangaTrackingUpdateJob.setupTask(context)\n                            }\n                            throw e\n                        }\n                    }\n                }\n            }\n                .awaitAll()\n                .mapNotNull { it.exceptionOrNull() }\n                .forEach { logcat(LogPriority.INFO, it) }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/model/MangaTrack.kt",
    "content": "package eu.kanade.domain.track.manga.model\n\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack as DbMangaTrack\n\nfun MangaTrack.copyPersonalFrom(other: MangaTrack): MangaTrack {\n    return this.copy(\n        lastChapterRead = other.lastChapterRead,\n        score = other.score,\n        status = other.status,\n        startDate = other.startDate,\n        finishDate = other.finishDate,\n        private = other.private,\n    )\n}\n\nfun MangaTrack.toDbTrack(): DbMangaTrack = DbMangaTrack.create(trackerId).also {\n    it.id = id\n    it.manga_id = mangaId\n    it.remote_id = remoteId\n    it.library_id = libraryId\n    it.title = title\n    it.last_chapter_read = lastChapterRead\n    it.total_chapters = totalChapters\n    it.status = status\n    it.score = score\n    it.tracking_url = remoteUrl\n    it.started_reading_date = startDate\n    it.finished_reading_date = finishDate\n    it.private = private\n}\n\nfun DbMangaTrack.toDomainTrack(idRequired: Boolean = true): MangaTrack? {\n    val trackId = id ?: if (!idRequired) -1 else return null\n    return MangaTrack(\n        id = trackId,\n        mangaId = manga_id,\n        trackerId = tracker_id,\n        remoteId = remote_id,\n        libraryId = library_id,\n        title = title,\n        lastChapterRead = last_chapter_read,\n        totalChapters = total_chapters,\n        status = status,\n        score = score,\n        remoteUrl = tracking_url,\n        startDate = started_reading_date,\n        finishDate = finished_reading_date,\n        private = private,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/service/DelayedMangaTrackingUpdateJob.kt",
    "content": "package eu.kanade.domain.track.manga.service\n\nimport android.content.Context\nimport androidx.work.BackoffPolicy\nimport androidx.work.Constraints\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.NetworkType\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkerParameters\nimport eu.kanade.domain.track.manga.interactor.TrackChapter\nimport eu.kanade.domain.track.manga.store.DelayedMangaTrackingStore\nimport eu.kanade.tachiyomi.util.system.workManager\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.TimeUnit\n\nclass DelayedMangaTrackingUpdateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    override suspend fun doWork(): Result {\n        if (runAttemptCount > 3) {\n            return Result.failure()\n        }\n\n        val getTracks = Injekt.get<GetMangaTracks>()\n        val trackChapter = Injekt.get<TrackChapter>()\n\n        val delayedTrackingStore = Injekt.get<DelayedMangaTrackingStore>()\n\n        withIOContext {\n            delayedTrackingStore.getMangaItems()\n                .mapNotNull {\n                    val track = getTracks.awaitOne(it.trackId)\n                    if (track == null) {\n                        delayedTrackingStore.removeMangaItem(it.trackId)\n                    }\n                    track?.copy(lastChapterRead = it.lastChapterRead.toDouble())\n                }\n                .forEach { track ->\n                    logcat(LogPriority.DEBUG) {\n                        \"Updating delayed track item: ${track.mangaId}, last chapter read: ${track.lastChapterRead}\"\n                    }\n                    trackChapter.await(context, track.mangaId, track.lastChapterRead, setupJobOnFailure = false)\n                }\n        }\n\n        return if (delayedTrackingStore.getMangaItems().isEmpty()) Result.success() else Result.retry()\n    }\n\n    companion object {\n        private const val TAG = \"DelayedMangaTrackingUpdate\"\n\n        fun setupTask(context: Context) {\n            val constraints = Constraints(\n                requiredNetworkType = NetworkType.CONNECTED,\n            )\n\n            val request = OneTimeWorkRequestBuilder<DelayedMangaTrackingUpdateJob>()\n                .setConstraints(constraints)\n                .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 5, TimeUnit.MINUTES)\n                .addTag(TAG)\n                .build()\n\n            context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/manga/store/DelayedMangaTrackingStore.kt",
    "content": "package eu.kanade.domain.track.manga.store\n\nimport android.content.Context\nimport androidx.core.content.edit\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nclass DelayedMangaTrackingStore(context: Context) {\n\n    /**\n     * Preference file where queued tracking updates are stored.\n     */\n    private val preferences = context.getSharedPreferences(\"tracking_queue\", Context.MODE_PRIVATE)\n\n    fun addManga(trackId: Long, lastChapterRead: Double) {\n        val previousLastChapterRead = preferences.getFloat(trackId.toString(), 0f)\n        if (lastChapterRead > previousLastChapterRead) {\n            logcat(LogPriority.DEBUG) { \"Queuing track item: $trackId, last chapter read: $lastChapterRead\" }\n            preferences.edit {\n                putFloat(trackId.toString(), lastChapterRead.toFloat())\n            }\n        }\n    }\n\n    fun removeMangaItem(trackId: Long) {\n        preferences.edit {\n            remove(trackId.toString())\n        }\n    }\n\n    fun getMangaItems(): List<DelayedTrackingItem> {\n        return preferences.all.mapNotNull {\n            DelayedTrackingItem(\n                trackId = it.key.toLong(),\n                lastChapterRead = it.value.toString().toFloat(),\n            )\n        }\n    }\n\n    data class DelayedTrackingItem(\n        val trackId: Long,\n        val lastChapterRead: Float,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/model/AutoTrackState.kt",
    "content": "package eu.kanade.domain.track.model\n\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.i18n.MR\n\nenum class AutoTrackState(val titleRes: StringResource) {\n    ALWAYS(MR.strings.lock_always),\n    ASK(MR.strings.default_category_summary),\n    NEVER(MR.strings.lock_never),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt",
    "content": "package eu.kanade.domain.track.service\n\nimport eu.kanade.domain.track.model.AutoTrackState\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.anilist.Anilist\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass TrackPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun trackUsername(tracker: Tracker) = preferenceStore.getString(\n        Preference.privateKey(\"pref_mangasync_username_${tracker.id}\"),\n        \"\",\n    )\n\n    fun trackPassword(tracker: Tracker) = preferenceStore.getString(\n        Preference.privateKey(\"pref_mangasync_password_${tracker.id}\"),\n        \"\",\n    )\n\n    fun trackAuthExpired(tracker: Tracker) = preferenceStore.getBoolean(\n        Preference.privateKey(\"pref_tracker_auth_expired_${tracker.id}\"),\n        false,\n    )\n\n    fun setCredentials(tracker: Tracker, username: String, password: String) {\n        trackUsername(tracker).set(username)\n        trackPassword(tracker).set(password)\n        trackAuthExpired(tracker).set(false)\n    }\n\n    fun trackToken(tracker: Tracker) = preferenceStore.getString(Preference.privateKey(\"track_token_${tracker.id}\"), \"\")\n\n    fun anilistScoreType() = preferenceStore.getString(\"anilist_score_type\", Anilist.POINT_10)\n\n    fun autoUpdateTrack() = preferenceStore.getBoolean(\"pref_auto_update_manga_sync_key\", true)\n\n    fun trackOnAddingToLibrary() = preferenceStore.getBoolean(\"track_on_adding_to_library\", true)\n\n    fun showNextEpisodeAiringTime() = preferenceStore.getBoolean(\n        \"show_next_episode_airing_time\",\n        true,\n    )\n\n    fun autoUpdateTrackOnMarkRead() = preferenceStore.getEnum(\n        \"pref_auto_update_manga_on_mark_read\",\n        AutoTrackState.ALWAYS,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt",
    "content": "package eu.kanade.domain.ui\n\nimport eu.kanade.domain.ui.model.AppTheme\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.domain.ui.model.StartScreen\nimport eu.kanade.domain.ui.model.TabletUiMode\nimport eu.kanade.domain.ui.model.ThemeMode\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.isDynamicColorAvailable\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\nimport java.time.format.DateTimeFormatter\nimport java.time.format.FormatStyle\nimport java.util.Locale\n\nclass UiPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun themeMode() = preferenceStore.getEnum(\"pref_theme_mode_key\", ThemeMode.SYSTEM)\n\n    fun appTheme() = preferenceStore.getEnum(\n        \"pref_app_theme\",\n        if (DeviceUtil.isDynamicColorAvailable) {\n            AppTheme.MONET\n        } else {\n            AppTheme.DEFAULT\n        },\n    )\n\n    fun themeDarkAmoled() = preferenceStore.getBoolean(\"pref_theme_dark_amoled_key\", false)\n\n    fun relativeTime() = preferenceStore.getBoolean(\"relative_time_v2\", true)\n\n    fun dateFormat() = preferenceStore.getString(\"app_date_format\", \"\")\n\n    fun tabletUiMode() = preferenceStore.getEnum(\"tablet_ui_mode\", TabletUiMode.AUTOMATIC)\n\n    fun startScreen() = preferenceStore.getEnum(\"start_screen\", StartScreen.ANIME)\n\n    fun navStyle() = preferenceStore.getEnum(\"bottom_rail_nav_style\", NavStyle.MOVE_HISTORY_TO_MORE)\n\n    companion object {\n        fun dateFormat(format: String): DateTimeFormatter = when (format) {\n            \"\" -> DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)\n            else -> DateTimeFormatter.ofPattern(format, Locale.getDefault())\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt",
    "content": "package eu.kanade.domain.ui.model\n\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\nenum class AppTheme(val titleRes: StringResource?) {\n    DEFAULT(MR.strings.label_default),\n    MONET(MR.strings.theme_monet),\n    CLOUDFLARE(AYMR.strings.theme_cloudflare),\n    COTTONCANDY(AYMR.strings.theme_cottoncandy),\n    DOOM(AYMR.strings.theme_doom),\n    GREEN_APPLE(MR.strings.theme_greenapple),\n    LAVENDER(MR.strings.theme_lavender),\n    MATRIX(AYMR.strings.theme_matrix),\n    MIDNIGHT_DUSK(MR.strings.theme_midnightdusk),\n    MOCHA(AYMR.strings.theme_mocha),\n    SAPPHIRE(AYMR.strings.theme_sapphire),\n    NORD(MR.strings.theme_nord),\n    STRAWBERRY_DAIQUIRI(MR.strings.theme_strawberrydaiquiri),\n    TAKO(MR.strings.theme_tako),\n    TEALTURQUOISE(MR.strings.theme_tealturquoise),\n    TIDAL_WAVE(MR.strings.theme_tidalwave),\n    YINYANG(MR.strings.theme_yinyang),\n    YOTSUBA(MR.strings.theme_yotsuba),\n    MONOCHROME(MR.strings.theme_monochrome),\n\n    // Deprecated\n    DARK_BLUE(null),\n    HOT_PINK(null),\n    BLUE(null),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/ui/model/NavStyle.kt",
    "content": "package eu.kanade.domain.ui.model\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.CollectionsBookmark\nimport androidx.compose.material.icons.outlined.Explore\nimport androidx.compose.material.icons.outlined.History\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.vectorResource\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.browse.BrowseTab\nimport eu.kanade.tachiyomi.ui.history.HistoriesTab\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryTab\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryTab\nimport eu.kanade.tachiyomi.ui.more.MoreTab\nimport eu.kanade.tachiyomi.ui.updates.UpdatesTab\nimport tachiyomi.i18n.aniyomi.AYMR\n\nenum class NavStyle(\n    val titleRes: StringResource,\n    val moreTab: Tab,\n) {\n    MOVE_MANGA_TO_MORE(titleRes = AYMR.strings.pref_bottom_nav_no_manga, moreTab = MangaLibraryTab),\n    MOVE_UPDATES_TO_MORE(titleRes = AYMR.strings.pref_bottom_nav_no_updates, moreTab = UpdatesTab),\n    MOVE_HISTORY_TO_MORE(titleRes = AYMR.strings.pref_bottom_nav_no_history, moreTab = HistoriesTab),\n    MOVE_BROWSE_TO_MORE(titleRes = AYMR.strings.pref_bottom_nav_no_browse, moreTab = BrowseTab),\n    ;\n\n    val moreIcon: ImageVector\n        @Composable\n        get() = when (this) {\n            MOVE_MANGA_TO_MORE -> Icons.Outlined.CollectionsBookmark\n            MOVE_UPDATES_TO_MORE -> ImageVector.vectorResource(id = R.drawable.ic_updates_outline_24dp)\n            MOVE_HISTORY_TO_MORE -> Icons.Outlined.History\n            MOVE_BROWSE_TO_MORE -> Icons.Outlined.Explore\n        }\n\n    val tabs: List<Tab>\n        get() {\n            return mutableListOf(\n                AnimeLibraryTab,\n                MangaLibraryTab,\n                UpdatesTab,\n                HistoriesTab,\n                BrowseTab,\n                MoreTab,\n            ).apply { remove(this@NavStyle.moreTab) }\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/ui/model/StartScreen.kt",
    "content": "package eu.kanade.domain.ui.model\n\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.ui.browse.BrowseTab\nimport eu.kanade.tachiyomi.ui.history.HistoriesTab\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryTab\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryTab\nimport eu.kanade.tachiyomi.ui.updates.UpdatesTab\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\nenum class StartScreen(val titleRes: StringResource, val tab: Tab) {\n    ANIME(AYMR.strings.label_anime, AnimeLibraryTab),\n    MANGA(AYMR.strings.manga, MangaLibraryTab),\n    UPDATES(MR.strings.label_recent_updates, UpdatesTab),\n    HISTORY(MR.strings.label_recent_manga, HistoriesTab),\n    BROWSE(MR.strings.browse, BrowseTab),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/ui/model/TabletUiMode.kt",
    "content": "package eu.kanade.domain.ui.model\n\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.i18n.MR\n\nenum class TabletUiMode(val titleRes: StringResource) {\n    AUTOMATIC(MR.strings.automatic_background),\n    ALWAYS(MR.strings.lock_always),\n    LANDSCAPE(MR.strings.landscape),\n    NEVER(MR.strings.lock_never),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/domain/ui/model/ThemeMode.kt",
    "content": "package eu.kanade.domain.ui.model\n\nimport androidx.appcompat.app.AppCompatDelegate\n\nenum class ThemeMode {\n    LIGHT,\n    DARK,\n    SYSTEM,\n}\n\nfun setAppCompatDelegateThemeMode(themeMode: ThemeMode) {\n    AppCompatDelegate.setDefaultNightMode(\n        when (themeMode) {\n            ThemeMode.LIGHT -> AppCompatDelegate.MODE_NIGHT_NO\n            ThemeMode.DARK -> AppCompatDelegate.MODE_NIGHT_YES\n            ThemeMode.SYSTEM -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/BaseBrowseItem.kt",
    "content": "package eu.kanade.presentation.browse\n\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun BaseBrowseItem(\n    modifier: Modifier = Modifier,\n    onClickItem: () -> Unit = {},\n    onLongClickItem: () -> Unit = {},\n    icon: @Composable RowScope.() -> Unit = {},\n    action: @Composable RowScope.() -> Unit = {},\n    content: @Composable RowScope.() -> Unit = {},\n) {\n    Row(\n        modifier = modifier\n            .combinedClickable(\n                onClick = onClickItem,\n                onLongClick = onLongClickItem,\n            )\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        icon()\n        content()\n        action()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/BrowseBadges.kt",
    "content": "package eu.kanade.presentation.browse\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.CollectionsBookmark\nimport androidx.compose.runtime.Composable\nimport tachiyomi.presentation.core.components.Badge\n\n@Composable\nfun InLibraryBadge(enabled: Boolean) {\n    if (enabled) {\n        Badge(\n            imageVector = Icons.Outlined.CollectionsBookmark,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/BrowseSourceDialogs.kt",
    "content": "package eu.kanade.presentation.browse\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun RemoveEntryDialog(\n    onDismissRequest: () -> Unit,\n    onConfirm: () -> Unit,\n    entryToRemove: String,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onDismissRequest()\n                    onConfirm()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_remove))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.are_you_sure))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.remove_manga, entryToRemove))\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/BrowseSourceLoadingItem.kt",
    "content": "package eu.kanade.presentation.browse\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\ninternal fun BrowseSourceLoadingItem() {\n    Row(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(vertical = 16.dp),\n        horizontalArrangement = Arrangement.Center,\n    ) {\n        CircularProgressIndicator()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/GlobalSearchResultItems.kt",
    "content": "package eu.kanade.presentation.browse\n\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.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ArrowForward\nimport androidx.compose.material.icons.outlined.Error\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun GlobalSearchResultItem(\n    title: String,\n    subtitle: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    content: @Composable () -> Unit,\n) {\n    Column(modifier = modifier) {\n        Row(\n            modifier = Modifier\n                .padding(\n                    start = MaterialTheme.padding.medium,\n                    end = MaterialTheme.padding.extraSmall,\n                )\n                .fillMaxWidth()\n                .clickable(onClick = onClick),\n            horizontalArrangement = Arrangement.SpaceBetween,\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Column {\n                Text(\n                    text = title,\n                    style = MaterialTheme.typography.titleMedium,\n                )\n                Text(text = subtitle)\n            }\n            IconButton(onClick = onClick) {\n                Icon(imageVector = Icons.AutoMirrored.Outlined.ArrowForward, contentDescription = null)\n            }\n        }\n        content()\n    }\n}\n\n@Composable\nfun GlobalSearchLoadingResultItem() {\n    Box(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(vertical = MaterialTheme.padding.medium),\n    ) {\n        CircularProgressIndicator(\n            modifier = Modifier\n                .size(16.dp)\n                .align(Alignment.Center),\n            strokeWidth = 2.dp,\n        )\n    }\n}\n\n@Composable\nfun GlobalSearchErrorResultItem(message: String?) {\n    Column(\n        modifier = Modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            )\n            .fillMaxWidth(),\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.Center,\n    ) {\n        Icon(imageVector = Icons.Outlined.Error, contentDescription = null)\n        Spacer(Modifier.height(4.dp))\n        Text(\n            text = message ?: stringResource(MR.strings.unknown_error),\n            textAlign = TextAlign.Center,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/GlobalSerachCard.kt",
    "content": "package eu.kanade.presentation.browse\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport tachiyomi.domain.entries.EntryCover\n\n@Composable\nfun GlobalSearchCard(\n    title: String,\n    cover: EntryCover,\n    isFavorite: Boolean,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n) {\n    Box(modifier = Modifier.width(96.dp)) {\n        EntryComfortableGridItem(\n            title = title,\n            coverData = cover,\n            coverBadgeStart = {\n                InLibraryBadge(enabled = isFavorite)\n            },\n            coverAlpha = if (isFavorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n            onClick = onClick,\n            onLongClick = onLongClick,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionDetailsScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.provider.Settings\nimport android.util.DisplayMetrics\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.fillMaxWidth\nimport androidx.compose.foundation.layout.height\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.outlined.Launch\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Switch\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.VerticalDivider\nimport androidx.compose.runtime.Composable\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.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.res.vectorResource\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.domain.extension.anime.interactor.AnimeExtensionSourceItem\nimport eu.kanade.presentation.browse.anime.components.AnimeExtensionIcon\nimport eu.kanade.presentation.browse.manga.NsfwWarningDialog\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.details.AnimeExtensionDetailsScreenModel\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun AnimeExtensionDetailsScreen(\n    navigateUp: () -> Unit,\n    state: AnimeExtensionDetailsScreenModel.State,\n    onClickSourcePreferences: (sourceId: Long) -> Unit,\n    onClickEnableAll: () -> Unit,\n    onClickDisableAll: () -> Unit,\n    onClickClearCookies: () -> Unit,\n    onClickUninstall: () -> Unit,\n    onClickSource: (sourceId: Long) -> Unit,\n    onClickIncognito: (Boolean) -> Unit,\n) {\n    val uriHandler = LocalUriHandler.current\n    val url = remember(state.extension) {\n        val regex = \"\"\"https://raw.githubusercontent.com/(.+?)/(.+?)/.+\"\"\".toRegex()\n        regex.find(state.extension?.repoUrl.orEmpty())\n            ?.let {\n                val (user, repo) = it.destructured\n                \"https://github.com/$user/$repo\"\n            }\n            ?: state.extension?.repoUrl\n    }\n\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(MR.strings.label_extension_info),\n                navigateUp = navigateUp,\n                actions = {\n                    AppBarActions(\n                        actions = persistentListOf<AppBar.AppBarAction>().builder()\n                            .apply {\n                                if (url != null) {\n                                    add(\n                                        AppBar.Action(\n                                            title = stringResource(MR.strings.action_open_repo),\n                                            icon = Icons.AutoMirrored.Outlined.Launch,\n                                            onClick = {\n                                                uriHandler.openUri(url)\n                                            },\n                                        ),\n                                    )\n                                }\n                                addAll(\n                                    listOf(\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_enable_all),\n                                            onClick = onClickEnableAll,\n                                        ),\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_disable_all),\n                                            onClick = onClickDisableAll,\n                                        ),\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.pref_clear_cookies),\n                                            onClick = onClickClearCookies,\n                                        ),\n                                    ),\n                                )\n                            }\n                            .build(),\n                    )\n                },\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        if (state.extension == null) {\n            EmptyScreen(\n                MR.strings.empty_screen,\n                modifier = Modifier.padding(paddingValues),\n            )\n            return@Scaffold\n        }\n\n        AnimeExtensionDetails(\n            contentPadding = paddingValues,\n            extension = state.extension,\n            sources = state.sources,\n            incognitoMode = state.isIncognito,\n            onClickSourcePreferences = onClickSourcePreferences,\n            onClickUninstall = onClickUninstall,\n            onClickSource = onClickSource,\n            onClickIncognito = onClickIncognito,\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeExtensionDetails(\n    contentPadding: PaddingValues,\n    extension: AnimeExtension.Installed,\n    sources: ImmutableList<AnimeExtensionSourceItem>,\n    incognitoMode: Boolean,\n    onClickSourcePreferences: (sourceId: Long) -> Unit,\n    onClickUninstall: () -> Unit,\n    onClickSource: (sourceId: Long) -> Unit,\n    onClickIncognito: (Boolean) -> Unit,\n) {\n    val context = LocalContext.current\n    var showNsfwWarning by remember { mutableStateOf(false) }\n\n    ScrollbarLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        if (extension.isObsolete) {\n            item {\n                WarningBanner(MR.strings.obsolete_extension_message)\n            }\n        }\n\n        item {\n            DetailsHeader(\n                extension = extension,\n                extIncognitoMode = incognitoMode,\n                onClickUninstall = onClickUninstall,\n                onClickAppInfo = {\n                    Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {\n                        data = Uri.fromParts(\"package\", extension.pkgName, null)\n                        context.startActivity(this)\n                    }\n                    Unit\n                }.takeIf { extension.isShared },\n                onClickAgeRating = {\n                    showNsfwWarning = true\n                },\n                onExtIncognitoChange = onClickIncognito,\n            )\n        }\n\n        items(\n            items = sources,\n            key = { it.source.id },\n        ) { source ->\n            SourceSwitchPreference(\n                modifier = Modifier.animateItem(),\n                source = source,\n                onClickSourcePreferences = onClickSourcePreferences,\n                onClickSource = onClickSource,\n            )\n        }\n    }\n    if (showNsfwWarning) {\n        NsfwWarningDialog(\n            onClickConfirm = {\n                showNsfwWarning = false\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun DetailsHeader(\n    extension: AnimeExtension,\n    extIncognitoMode: Boolean,\n    onClickAgeRating: () -> Unit,\n    onClickUninstall: () -> Unit,\n    onClickAppInfo: (() -> Unit)?,\n    onExtIncognitoChange: (Boolean) -> Unit,\n) {\n    val context = LocalContext.current\n\n    Column {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(horizontal = MaterialTheme.padding.medium)\n                .padding(\n                    top = MaterialTheme.padding.medium,\n                    bottom = MaterialTheme.padding.small,\n                )\n                .clickable {\n                    val extDebugInfo = buildString {\n                        append(\n                            \"\"\"\n                            Extension name: ${extension.name} (lang: ${extension.lang}; package: ${extension.pkgName})\n                            Extension version: ${extension.versionName} (lib: ${extension.libVersion}; version code: ${extension.versionCode})\n                            NSFW: ${extension.isNsfw}\n                            \"\"\".trimIndent(),\n                        )\n\n                        if (extension is AnimeExtension.Installed) {\n                            append(\"\\n\\n\")\n                            append(\n                                \"\"\"\n                                Update available: ${extension.hasUpdate}\n                                Obsolete: ${extension.isObsolete}\n                                Shared: ${extension.isShared}\n                                Repository: ${extension.repoUrl}\n                                \"\"\".trimIndent(),\n                            )\n                        }\n                    }\n                    context.copyToClipboard(\"Extension Debug information\", extDebugInfo)\n                },\n            horizontalAlignment = Alignment.CenterHorizontally,\n        ) {\n            AnimeExtensionIcon(\n                modifier = Modifier\n                    .size(112.dp),\n                extension = extension,\n                density = DisplayMetrics.DENSITY_XXXHIGH,\n            )\n\n            Text(\n                text = extension.name,\n                style = MaterialTheme.typography.headlineSmall,\n                textAlign = TextAlign.Center,\n            )\n\n            val strippedPkgName = extension.pkgName.substringAfter(\n                \"eu.kanade.tachiyomi.animeextension.\",\n            )\n\n            Text(\n                text = strippedPkgName,\n                style = MaterialTheme.typography.bodySmall,\n            )\n        }\n\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(\n                    horizontal = MaterialTheme.padding.extraLarge,\n                    vertical = MaterialTheme.padding.small,\n                ),\n            horizontalArrangement = Arrangement.SpaceEvenly,\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            InfoText(\n                modifier = Modifier.weight(1f),\n                primaryText = extension.versionName,\n                secondaryText = stringResource(MR.strings.ext_info_version),\n            )\n\n            InfoDivider()\n\n            InfoText(\n                modifier = Modifier.weight(if (extension.isNsfw) 1.5f else 1f),\n                primaryText = LocaleHelper.getSourceDisplayName(extension.lang, context),\n                secondaryText = stringResource(MR.strings.ext_info_language),\n            )\n\n            if (extension.isNsfw) {\n                InfoDivider()\n\n                InfoText(\n                    modifier = Modifier.weight(1f),\n                    primaryText = stringResource(MR.strings.ext_nsfw_short),\n                    primaryTextStyle = MaterialTheme.typography.bodyLarge.copy(\n                        color = MaterialTheme.colorScheme.error,\n                        fontWeight = FontWeight.Medium,\n                    ),\n                    secondaryText = stringResource(MR.strings.ext_info_age_rating),\n                    onClick = onClickAgeRating,\n                )\n            }\n        }\n\n        Row(\n            modifier = Modifier\n                .padding(horizontal = MaterialTheme.padding.medium)\n                .padding(top = MaterialTheme.padding.small),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n        ) {\n            OutlinedButton(\n                modifier = Modifier.weight(1f),\n                onClick = onClickUninstall,\n            ) {\n                Text(stringResource(MR.strings.ext_uninstall))\n            }\n\n            if (onClickAppInfo != null) {\n                Button(\n                    modifier = Modifier.weight(1f),\n                    onClick = onClickAppInfo,\n                ) {\n                    Text(\n                        text = stringResource(MR.strings.ext_app_info),\n                        color = MaterialTheme.colorScheme.onPrimary,\n                    )\n                }\n            }\n        }\n\n        TextPreferenceWidget(\n            modifier = Modifier.padding(horizontal = MaterialTheme.padding.small),\n            title = stringResource(MR.strings.pref_incognito_mode),\n            subtitle = stringResource(MR.strings.pref_incognito_mode_extension_summary),\n            icon = ImageVector.vectorResource(R.drawable.ic_glasses_24dp),\n            widget = {\n                Row(\n                    verticalAlignment = Alignment.CenterVertically,\n                ) {\n                    Switch(\n                        checked = extIncognitoMode,\n                        onCheckedChange = onExtIncognitoChange,\n                        modifier = Modifier.padding(start = TrailingWidgetBuffer),\n                    )\n                }\n            },\n        )\n\n        HorizontalDivider()\n    }\n}\n\n@Composable\nprivate fun InfoText(\n    primaryText: String,\n    secondaryText: String,\n    modifier: Modifier = Modifier,\n    primaryTextStyle: TextStyle = MaterialTheme.typography.bodyLarge,\n    onClick: (() -> Unit)? = null,\n) {\n    val clickableModifier = if (onClick != null) {\n        Modifier.clickable(interactionSource = null, indication = null, onClick = onClick)\n    } else {\n        Modifier\n    }\n\n    Column(\n        modifier = modifier.then(clickableModifier),\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.Center,\n    ) {\n        Text(\n            text = primaryText,\n            textAlign = TextAlign.Center,\n            style = primaryTextStyle,\n        )\n\n        Text(\n            text = secondaryText + if (onClick != null) \" ⓘ\" else \"\",\n            textAlign = TextAlign.Center,\n            style = MaterialTheme.typography.bodyMedium,\n            color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f),\n        )\n    }\n}\n\n@Composable\nprivate fun InfoDivider() {\n    VerticalDivider(\n        modifier = Modifier.height(20.dp),\n    )\n}\n\n@Composable\nprivate fun SourceSwitchPreference(\n    source: AnimeExtensionSourceItem,\n    onClickSourcePreferences: (sourceId: Long) -> Unit,\n    onClickSource: (sourceId: Long) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val context = LocalContext.current\n\n    TextPreferenceWidget(\n        modifier = modifier,\n        title = if (source.labelAsName) {\n            source.source.toString()\n        } else {\n            LocaleHelper.getSourceDisplayName(source.source.lang, context)\n        },\n        widget = {\n            Row(\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                if (source.source is ConfigurableAnimeSource) {\n                    IconButton(onClick = { onClickSourcePreferences(source.source.id) }) {\n                        Icon(\n                            imageVector = Icons.Outlined.Settings,\n                            contentDescription = stringResource(MR.strings.label_settings),\n                            tint = MaterialTheme.colorScheme.onSurface,\n                        )\n                    }\n                }\n\n                Switch(\n                    checked = source.enabled,\n                    onCheckedChange = null,\n                    modifier = Modifier.padding(start = TrailingWidgetBuffer),\n                )\n            }\n        },\n        onPreferenceClick = { onClickSource(source.source.id) },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionFilterScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionFilterState\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun AnimeExtensionFilterScreen(\n    navigateUp: () -> Unit,\n    state: AnimeExtensionFilterState.Success,\n    onClickToggle: (String) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(MR.strings.label_extensions),\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { contentPadding ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.empty_screen,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n        AnimeExtensionFilterContent(\n            contentPadding = contentPadding,\n            state = state,\n            onClickLang = onClickToggle,\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeExtensionFilterContent(\n    contentPadding: PaddingValues,\n    state: AnimeExtensionFilterState.Success,\n    onClickLang: (String) -> Unit,\n) {\n    val context = LocalContext.current\n    LazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items(state.languages) { language ->\n            SwitchPreferenceWidget(\n                modifier = Modifier.animateItem(),\n                title = LocaleHelper.getSourceDisplayName(language, context),\n                checked = language in state.enabledLanguages,\n                onCheckedChanged = { onClickLang(language) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionsScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.animation.core.animateDpAsState\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\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.outlined.Close\nimport androidx.compose.material.icons.outlined.GetApp\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material.icons.outlined.VerifiedUser\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.BaseBrowseItem\nimport eu.kanade.presentation.browse.anime.components.AnimeExtensionIcon\nimport eu.kanade.presentation.browse.manga.ExtensionHeader\nimport eu.kanade.presentation.browse.manga.ExtensionTrustDialog\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.presentation.entries.components.DotSeparatorNoSpaceText\nimport eu.kanade.presentation.more.settings.screen.browse.AnimeExtensionReposScreen\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionUiModel\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionsScreenModel\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun AnimeExtensionScreen(\n    state: AnimeExtensionsScreenModel.State,\n    contentPadding: PaddingValues,\n    searchQuery: String?,\n    onLongClickItem: (AnimeExtension) -> Unit,\n    onClickItemCancel: (AnimeExtension) -> Unit,\n    onOpenWebView: (AnimeExtension.Available) -> Unit,\n    onInstallExtension: (AnimeExtension.Available) -> Unit,\n    onUninstallExtension: (AnimeExtension) -> Unit,\n    onUpdateExtension: (AnimeExtension.Installed) -> Unit,\n    onTrustExtension: (AnimeExtension.Untrusted) -> Unit,\n    onOpenExtension: (AnimeExtension.Installed) -> Unit,\n    onClickUpdateAll: () -> Unit,\n    onRefresh: () -> Unit,\n) {\n    val navigator = LocalNavigator.currentOrThrow\n\n    PullRefresh(\n        refreshing = state.isRefreshing,\n        onRefresh = onRefresh,\n        enabled = !state.isLoading,\n    ) {\n        when {\n            state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n            state.isEmpty -> {\n                val msg = if (!searchQuery.isNullOrEmpty()) {\n                    MR.strings.no_results_found\n                } else {\n                    MR.strings.empty_screen\n                }\n                EmptyScreen(\n                    stringRes = msg,\n                    modifier = Modifier.padding(contentPadding),\n                    actions = persistentListOf(\n                        EmptyScreenAction(\n                            stringRes = MR.strings.label_extension_repos,\n                            icon = Icons.Outlined.Settings,\n                            onClick = { navigator.push(AnimeExtensionReposScreen()) },\n                        ),\n                    ),\n                )\n            }\n            else -> {\n                AnimeExtensionContent(\n                    state = state,\n                    contentPadding = contentPadding,\n                    onLongClickItem = onLongClickItem,\n                    onClickItemCancel = onClickItemCancel,\n                    onOpenWebView = onOpenWebView,\n                    onInstallExtension = onInstallExtension,\n                    onUninstallExtension = onUninstallExtension,\n                    onUpdateExtension = onUpdateExtension,\n                    onTrustExtension = onTrustExtension,\n                    onOpenExtension = onOpenExtension,\n                    onClickUpdateAll = onClickUpdateAll,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeExtensionContent(\n    state: AnimeExtensionsScreenModel.State,\n    contentPadding: PaddingValues,\n    onLongClickItem: (AnimeExtension) -> Unit,\n    onOpenWebView: (AnimeExtension.Available) -> Unit,\n    onClickItemCancel: (AnimeExtension) -> Unit,\n    onInstallExtension: (AnimeExtension.Available) -> Unit,\n    onUninstallExtension: (AnimeExtension) -> Unit,\n    onUpdateExtension: (AnimeExtension.Installed) -> Unit,\n    onTrustExtension: (AnimeExtension.Untrusted) -> Unit,\n    onOpenExtension: (AnimeExtension.Installed) -> Unit,\n    onClickUpdateAll: () -> Unit,\n) {\n    val context = LocalContext.current\n    var trustState by remember { mutableStateOf<AnimeExtension.Untrusted?>(null) }\n    val installGranted = rememberRequestPackageInstallsPermissionState(initialValue = true)\n\n    FastScrollLazyColumn(\n        contentPadding = contentPadding + topSmallPaddingValues,\n    ) {\n        if (!installGranted && state.installer?.requiresSystemPermission == true) {\n            item(key = \"extension-permissions-warning\") {\n                WarningBanner(\n                    textRes = MR.strings.ext_permission_install_apps_warning,\n                    modifier = Modifier.clickable {\n                        context.launchRequestPackageInstallsPermission()\n                    },\n                )\n            }\n        }\n\n        state.items.forEach { (header, items) ->\n            item(\n                contentType = \"header\",\n                key = \"extensionHeader-${header.hashCode()}\",\n            ) {\n                when (header) {\n                    is AnimeExtensionUiModel.Header.Resource -> {\n                        val action: @Composable RowScope.() -> Unit =\n                            if (header.textRes == MR.strings.ext_updates_pending) {\n                                {\n                                    Button(onClick = { onClickUpdateAll() }) {\n                                        Text(\n                                            text = stringResource(MR.strings.ext_update_all),\n                                            style = LocalTextStyle.current.copy(\n                                                color = MaterialTheme.colorScheme.onPrimary,\n                                            ),\n                                        )\n                                    }\n                                }\n                            } else {\n                                {}\n                            }\n                        ExtensionHeader(\n                            textRes = header.textRes,\n                            modifier = Modifier.animateItemFastScroll(),\n                            action = action,\n                        )\n                    }\n                    is AnimeExtensionUiModel.Header.Text -> {\n                        ExtensionHeader(\n                            text = header.text,\n                            modifier = Modifier.animateItemFastScroll(),\n                        )\n                    }\n                }\n            }\n\n            items(\n                items = items,\n                contentType = { \"item\" },\n                key = { item ->\n                    when (item.extension) {\n                        is AnimeExtension.Untrusted -> \"extension-untrusted-${item.hashCode()}\"\n                        is AnimeExtension.Installed -> \"extension-installed-${item.hashCode()}\"\n                        is AnimeExtension.Available -> \"extension-available-${item.hashCode()}\"\n                    }\n                },\n            ) { item ->\n                AnimeExtensionItem(\n                    item = item,\n                    modifier = Modifier.animateItemFastScroll(),\n                    onClickItem = {\n                        when (it) {\n                            is AnimeExtension.Available -> onInstallExtension(it)\n                            is AnimeExtension.Installed -> onOpenExtension(it)\n                            is AnimeExtension.Untrusted -> {\n                                trustState = it\n                            }\n                        }\n                    },\n                    onLongClickItem = onLongClickItem,\n                    onClickItemSecondaryAction = {\n                        when (it) {\n                            is AnimeExtension.Available -> onOpenWebView(it)\n                            is AnimeExtension.Installed -> onOpenExtension(it)\n                            else -> {}\n                        }\n                    },\n                    onClickItemCancel = onClickItemCancel,\n                    onClickItemAction = {\n                        when (it) {\n                            is AnimeExtension.Available -> onInstallExtension(it)\n                            is AnimeExtension.Installed -> {\n                                if (it.hasUpdate) {\n                                    onUpdateExtension(it)\n                                } else {\n                                    onOpenExtension(it)\n                                }\n                            }\n\n                            is AnimeExtension.Untrusted -> {\n                                trustState = it\n                            }\n                        }\n                    },\n                )\n            }\n        }\n    }\n    if (trustState != null) {\n        ExtensionTrustDialog(\n            onClickConfirm = {\n                onTrustExtension(trustState!!)\n                trustState = null\n            },\n            onClickDismiss = {\n                onUninstallExtension(trustState!!)\n                trustState = null\n            },\n            onDismissRequest = {\n                trustState = null\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeExtensionItem(\n    item: AnimeExtensionUiModel.Item,\n    onClickItem: (AnimeExtension) -> Unit,\n    onLongClickItem: (AnimeExtension) -> Unit,\n    onClickItemCancel: (AnimeExtension) -> Unit,\n    onClickItemAction: (AnimeExtension) -> Unit,\n    modifier: Modifier = Modifier,\n    onClickItemSecondaryAction: (AnimeExtension) -> Unit,\n) {\n    val (extension, installStep) = item\n    BaseBrowseItem(\n        modifier = modifier\n            .combinedClickable(\n                onClick = { onClickItem(extension) },\n                onLongClick = { onLongClickItem(extension) },\n            ),\n        onClickItem = { onClickItem(extension) },\n        onLongClickItem = { onLongClickItem(extension) },\n        icon = {\n            Box(\n                modifier = Modifier\n                    .size(40.dp),\n                contentAlignment = Alignment.Center,\n            ) {\n                val idle = installStep.isCompleted()\n                if (!idle) {\n                    CircularProgressIndicator(\n                        modifier = Modifier.size(40.dp),\n                        strokeWidth = 2.dp,\n                    )\n                }\n\n                val padding by animateDpAsState(\n                    targetValue = if (idle) 0.dp else 8.dp,\n                    label = \"iconPadding\",\n                )\n                AnimeExtensionIcon(\n                    extension = extension,\n                    modifier = Modifier\n                        .matchParentSize()\n                        .padding(padding),\n                )\n            }\n        },\n        action = {\n            AnimeExtensionItemActions(\n                extension = extension,\n                installStep = installStep,\n                onClickItemCancel = onClickItemCancel,\n                onClickItemAction = onClickItemAction,\n                onClickItemSecondaryAction = onClickItemSecondaryAction,\n            )\n        },\n    ) {\n        AnimeExtensionItemContent(\n            extension = extension,\n            installStep = installStep,\n            modifier = Modifier.weight(1f),\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeExtensionItemContent(\n    extension: AnimeExtension,\n    installStep: InstallStep,\n    modifier: Modifier = Modifier,\n) {\n    Column(\n        modifier = modifier.padding(start = MaterialTheme.padding.medium),\n    ) {\n        Text(\n            text = extension.name,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        // Won't look good but it's not like we can ellipsize overflowing content\n        FlowRow(\n            modifier = Modifier.secondaryItemAlpha(),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n        ) {\n            ProvideTextStyle(value = MaterialTheme.typography.bodySmall) {\n                if (extension is AnimeExtension.Installed && extension.lang.isNotEmpty()) {\n                    Text(\n                        text = LocaleHelper.getSourceDisplayName(\n                            extension.lang,\n                            LocalContext.current,\n                        ),\n                    )\n                }\n\n                if (extension.versionName.isNotEmpty()) {\n                    Text(\n                        text = extension.versionName,\n                    )\n                }\n\n                val warning = when {\n                    extension is AnimeExtension.Untrusted -> MR.strings.ext_untrusted\n                    extension is AnimeExtension.Installed && extension.isObsolete -> MR.strings.ext_obsolete\n                    extension.isNsfw -> MR.strings.ext_nsfw_short\n                    else -> null\n                }\n                if (warning != null) {\n                    Text(\n                        text = stringResource(warning).uppercase(),\n                        color = MaterialTheme.colorScheme.error,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                    )\n                }\n\n                if (!installStep.isCompleted()) {\n                    DotSeparatorNoSpaceText()\n                    Text(\n                        text = when (installStep) {\n                            InstallStep.Pending -> stringResource(MR.strings.ext_pending)\n                            InstallStep.Downloading -> stringResource(MR.strings.ext_downloading)\n                            InstallStep.Installing -> stringResource(MR.strings.ext_installing)\n                            else -> error(\"Must not show non-install process text\")\n                        },\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeExtensionItemActions(\n    extension: AnimeExtension,\n    installStep: InstallStep,\n    modifier: Modifier = Modifier,\n    onClickItemCancel: (AnimeExtension) -> Unit = {},\n    onClickItemAction: (AnimeExtension) -> Unit = {},\n    onClickItemSecondaryAction: (AnimeExtension) -> Unit = {},\n) {\n    val isIdle = installStep.isCompleted()\n\n    Row(\n        modifier = modifier,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        when {\n            !isIdle -> {\n                IconButton(onClick = { onClickItemCancel(extension) }) {\n                    Icon(\n                        imageVector = Icons.Outlined.Close,\n                        contentDescription = stringResource(MR.strings.action_cancel),\n                    )\n                }\n            }\n            installStep == InstallStep.Error -> {\n                IconButton(onClick = { onClickItemAction(extension) }) {\n                    Icon(\n                        imageVector = Icons.Outlined.Refresh,\n                        contentDescription = stringResource(MR.strings.action_retry),\n                    )\n                }\n            }\n            installStep == InstallStep.Idle -> {\n                when (extension) {\n                    is AnimeExtension.Installed -> {\n                        IconButton(onClick = { onClickItemSecondaryAction(extension) }) {\n                            Icon(\n                                imageVector = Icons.Outlined.Settings,\n                                contentDescription = stringResource(MR.strings.action_settings),\n                            )\n                        }\n\n                        if (extension.hasUpdate) {\n                            IconButton(onClick = { onClickItemAction(extension) }) {\n                                Icon(\n                                    imageVector = Icons.Outlined.GetApp,\n                                    contentDescription = stringResource(MR.strings.ext_update),\n                                )\n                            }\n                        }\n                    }\n                    is AnimeExtension.Untrusted -> {\n                        IconButton(onClick = { onClickItemAction(extension) }) {\n                            Icon(\n                                imageVector = Icons.Outlined.VerifiedUser,\n                                contentDescription = stringResource(MR.strings.ext_trust),\n                            )\n                        }\n                    }\n                    is AnimeExtension.Available -> {\n                        if (extension.sources.isNotEmpty()) {\n                            IconButton(\n                                onClick = { onClickItemSecondaryAction(extension) },\n                            ) {\n                                Icon(\n                                    imageVector = Icons.Outlined.Public,\n                                    contentDescription = stringResource(MR.strings.action_open_in_web_view),\n                                )\n                            }\n                        }\n\n                        IconButton(onClick = { onClickItemAction(extension) }) {\n                            Icon(\n                                imageVector = Icons.Outlined.GetApp,\n                                contentDescription = stringResource(MR.strings.ext_install),\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesFilterScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.browse.anime.components.BaseAnimeSourceItem\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.tachiyomi.ui.browse.anime.source.AnimeSourcesFilterScreenModel\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun AnimeSourcesFilterScreen(\n    navigateUp: () -> Unit,\n    state: AnimeSourcesFilterScreenModel.State.Success,\n    onClickLanguage: (String) -> Unit,\n    onClickSource: (AnimeSource) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(MR.strings.label_sources),\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { contentPadding ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.source_filter_empty_screen,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n        AnimeSourcesFilterContent(\n            contentPadding = contentPadding,\n            state = state,\n            onClickLanguage = onClickLanguage,\n            onClickSource = onClickSource,\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeSourcesFilterContent(\n    contentPadding: PaddingValues,\n    state: AnimeSourcesFilterScreenModel.State.Success,\n    onClickLanguage: (String) -> Unit,\n    onClickSource: (AnimeSource) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        state.items.forEach { (language, sources) ->\n            val enabled = language in state.enabledLanguages\n            item(\n                key = language,\n                contentType = \"source-filter-header\",\n            ) {\n                AnimeSourcesFilterHeader(\n                    modifier = Modifier.animateItemFastScroll(),\n                    language = language,\n                    enabled = enabled,\n                    onClickItem = onClickLanguage,\n                )\n            }\n            if (enabled) {\n                items(\n                    items = sources,\n                    key = { \"source-filter-${it.key()}\" },\n                    contentType = { \"source-filter-item\" },\n                ) { source ->\n                    AnimeSourcesFilterItem(\n                        modifier = Modifier.animateItemFastScroll(),\n                        source = source,\n                        isEnabled = \"${source.id}\" !in state.disabledSources,\n                        onClickItem = onClickSource,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun AnimeSourcesFilterHeader(\n    language: String,\n    enabled: Boolean,\n    onClickItem: (String) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    SwitchPreferenceWidget(\n        modifier = modifier,\n        title = LocaleHelper.getSourceDisplayName(language, LocalContext.current),\n        checked = enabled,\n        onCheckedChanged = { onClickItem(language) },\n    )\n}\n\n@Composable\nprivate fun AnimeSourcesFilterItem(\n    source: AnimeSource,\n    isEnabled: Boolean,\n    onClickItem: (AnimeSource) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseAnimeSourceItem(\n        modifier = modifier,\n        source = source,\n        showLanguageInContent = false,\n        onClickItem = { onClickItem(source) },\n        action = {\n            Checkbox(checked = isEnabled, onCheckedChange = null)\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.PushPin\nimport androidx.compose.material.icons.outlined.PushPin\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.browse.anime.components.BaseAnimeSourceItem\nimport eu.kanade.tachiyomi.ui.browse.anime.source.AnimeSourcesScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreenModel.Listing\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.domain.source.anime.model.Pin\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\n@Composable\nfun AnimeSourcesScreen(\n    state: AnimeSourcesScreenModel.State,\n    contentPadding: PaddingValues,\n    onClickItem: (AnimeSource, Listing) -> Unit,\n    onClickPin: (AnimeSource) -> Unit,\n    onLongClickItem: (AnimeSource) -> Unit,\n) {\n    when {\n        state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n        state.isEmpty -> EmptyScreen(\n            stringRes = MR.strings.source_empty_screen,\n            modifier = Modifier.padding(contentPadding),\n        )\n        else -> {\n            ScrollbarLazyColumn(\n                contentPadding = contentPadding + topSmallPaddingValues,\n            ) {\n                items(\n                    items = state.items,\n                    contentType = {\n                        when (it) {\n                            is AnimeSourceUiModel.Header -> \"header\"\n                            is AnimeSourceUiModel.Item -> \"item\"\n                        }\n                    },\n                    key = {\n                        when (it) {\n                            is AnimeSourceUiModel.Header -> it.hashCode()\n                            is AnimeSourceUiModel.Item -> \"source-${it.source.key()}\"\n                        }\n                    },\n                ) { model ->\n                    when (model) {\n                        is AnimeSourceUiModel.Header -> {\n                            AnimeSourceHeader(\n                                modifier = Modifier.animateItem(),\n                                language = model.language,\n                            )\n                        }\n                        is AnimeSourceUiModel.Item -> AnimeSourceItem(\n                            modifier = Modifier.animateItem(),\n                            source = model.source,\n                            onClickItem = onClickItem,\n                            onLongClickItem = onLongClickItem,\n                            onClickPin = onClickPin,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeSourceHeader(\n    language: String,\n    modifier: Modifier = Modifier,\n) {\n    val context = LocalContext.current\n    Text(\n        text = LocaleHelper.getSourceDisplayName(language, context),\n        modifier = modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        style = MaterialTheme.typography.header,\n    )\n}\n\n@Composable\nprivate fun AnimeSourceItem(\n    source: AnimeSource,\n    onClickItem: (AnimeSource, Listing) -> Unit,\n    onLongClickItem: (AnimeSource) -> Unit,\n    onClickPin: (AnimeSource) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseAnimeSourceItem(\n        modifier = modifier,\n        source = source,\n        onClickItem = { onClickItem(source, Listing.Popular) },\n        onLongClickItem = { onLongClickItem(source) },\n        action = {\n            if (source.supportsLatest) {\n                TextButton(onClick = { onClickItem(source, Listing.Latest) }) {\n                    Text(\n                        text = stringResource(MR.strings.latest),\n                        style = LocalTextStyle.current.copy(\n                            color = MaterialTheme.colorScheme.primary,\n                        ),\n                    )\n                }\n            }\n            AnimeSourcePinButton(\n                isPinned = Pin.Pinned in source.pin,\n                onClick = { onClickPin(source) },\n            )\n        },\n    )\n}\n\n@Composable\nprivate fun AnimeSourcePinButton(\n    isPinned: Boolean,\n    onClick: () -> Unit,\n) {\n    val icon = if (isPinned) Icons.Filled.PushPin else Icons.Outlined.PushPin\n    val tint = if (isPinned) {\n        MaterialTheme.colorScheme.primary\n    } else {\n        MaterialTheme.colorScheme.onBackground.copy(\n            alpha = SECONDARY_ALPHA,\n        )\n    }\n    val description = if (isPinned) MR.strings.action_unpin else MR.strings.action_pin\n    IconButton(onClick = onClick) {\n        Icon(\n            imageVector = icon,\n            tint = tint,\n            contentDescription = stringResource(description),\n        )\n    }\n}\n\n@Composable\nfun AnimeSourceOptionsDialog(\n    source: AnimeSource,\n    onClickPin: () -> Unit,\n    onClickDisable: () -> Unit,\n    onDismiss: () -> Unit,\n) {\n    AlertDialog(\n        title = {\n            Text(text = source.visualName)\n        },\n        text = {\n            Column {\n                val textId = if (Pin.Pinned in source.pin) MR.strings.action_unpin else MR.strings.action_pin\n                Text(\n                    text = stringResource(textId),\n                    modifier = Modifier\n                        .clickable(onClick = onClickPin)\n                        .fillMaxWidth()\n                        .padding(vertical = 16.dp),\n                )\n                if (source.id != LocalAnimeSource.ID) {\n                    Text(\n                        text = stringResource(MR.strings.action_disable),\n                        modifier = Modifier\n                            .clickable(onClick = onClickDisable)\n                            .fillMaxWidth()\n                            .padding(vertical = 16.dp),\n                    )\n                }\n            }\n        },\n        onDismissRequest = onDismiss,\n        confirmButton = {},\n    )\n}\n\nsealed interface AnimeSourceUiModel {\n    data class Item(val source: AnimeSource) : AnimeSourceUiModel\n    data class Header(val language: String) : AnimeSourceUiModel\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/BrowseAnimeSourceScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material3.SnackbarDuration\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.SnackbarResult\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceComfortableGrid\nimport eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceCompactGrid\nimport eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceList\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.formattedMessage\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\n@Composable\nfun BrowseAnimeSourceContent(\n    source: AnimeSource?,\n    animeList: LazyPagingItems<StateFlow<Anime>>,\n    columns: GridCells,\n    entries: Int = 0,\n    topBarHeight: Int = 0,\n    displayMode: LibraryDisplayMode,\n    snackbarHostState: SnackbarHostState,\n    contentPadding: PaddingValues,\n    onWebViewClick: () -> Unit,\n    onHelpClick: () -> Unit,\n    onLocalAnimeSourceHelpClick: () -> Unit,\n    onAnimeClick: (Anime) -> Unit,\n    onAnimeLongClick: (Anime) -> Unit,\n) {\n    val context = LocalContext.current\n\n    val errorState = animeList.loadState.refresh.takeIf { it is LoadState.Error }\n        ?: animeList.loadState.append.takeIf { it is LoadState.Error }\n\n    val getErrorMessage: (LoadState.Error) -> String = { state ->\n        with(context) { state.error.formattedMessage }\n    }\n\n    LaunchedEffect(errorState) {\n        if (animeList.itemCount > 0 && errorState != null && errorState is LoadState.Error) {\n            val result = snackbarHostState.showSnackbar(\n                message = getErrorMessage(errorState),\n                actionLabel = context.stringResource(MR.strings.action_retry),\n                duration = SnackbarDuration.Indefinite,\n            )\n            when (result) {\n                SnackbarResult.Dismissed -> snackbarHostState.currentSnackbarData?.dismiss()\n                SnackbarResult.ActionPerformed -> animeList.retry()\n            }\n        }\n    }\n\n    if (animeList.itemCount <= 0 && errorState != null && errorState is LoadState.Error) {\n        EmptyScreen(\n            modifier = Modifier.padding(contentPadding),\n            message = getErrorMessage(errorState),\n            actions = if (source is LocalAnimeSource) {\n                persistentListOf(\n                    EmptyScreenAction(\n                        stringRes = MR.strings.local_source_help_guide,\n                        icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                        onClick = onLocalAnimeSourceHelpClick,\n                    ),\n                )\n            } else {\n                persistentListOf(\n                    EmptyScreenAction(\n                        stringRes = MR.strings.action_retry,\n                        icon = Icons.Outlined.Refresh,\n                        onClick = animeList::refresh,\n                    ),\n                    EmptyScreenAction(\n                        stringRes = MR.strings.action_open_in_web_view,\n                        icon = Icons.Outlined.Public,\n                        onClick = onWebViewClick,\n                    ),\n                    EmptyScreenAction(\n                        stringRes = MR.strings.label_help,\n                        icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                        onClick = onHelpClick,\n                    ),\n                )\n            },\n        )\n\n        return\n    }\n\n    if (animeList.itemCount == 0 && animeList.loadState.refresh is LoadState.Loading) {\n        LoadingScreen(\n            modifier = Modifier.padding(contentPadding),\n        )\n        return\n    }\n\n    when (displayMode) {\n        LibraryDisplayMode.ComfortableGrid -> {\n            BrowseAnimeSourceComfortableGrid(\n                animeList = animeList,\n                columns = columns,\n                contentPadding = contentPadding,\n                onAnimeClick = onAnimeClick,\n                onAnimeLongClick = onAnimeLongClick,\n            )\n        }\n        LibraryDisplayMode.List -> {\n            BrowseAnimeSourceList(\n                animeList = animeList,\n                entries = entries,\n                topBarHeight = topBarHeight,\n                contentPadding = contentPadding,\n                onAnimeClick = onAnimeClick,\n                onAnimeLongClick = onAnimeLongClick,\n            )\n        }\n        LibraryDisplayMode.CompactGrid, LibraryDisplayMode.CoverOnlyGrid -> {\n            BrowseAnimeSourceCompactGrid(\n                animeList = animeList,\n                columns = columns,\n                contentPadding = contentPadding,\n                onAnimeClick = onAnimeClick,\n                onAnimeLongClick = onAnimeLongClick,\n            )\n        }\n    }\n}\n\n@Composable\ninternal fun MissingSourceScreen(\n    source: StubAnimeSource,\n    navigateUp: () -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = source.name,\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        EmptyScreen(\n            message = stringResource(MR.strings.source_not_installed, source.toString()),\n            modifier = Modifier.padding(paddingValues),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/GlobalAnimeSearchScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.browse.GlobalSearchErrorResultItem\nimport eu.kanade.presentation.browse.GlobalSearchLoadingResultItem\nimport eu.kanade.presentation.browse.GlobalSearchResultItem\nimport eu.kanade.presentation.browse.anime.components.GlobalAnimeSearchCardRow\nimport eu.kanade.presentation.browse.anime.components.GlobalAnimeSearchToolbar\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSearchItemResult\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSearchScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSourceFilter\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.presentation.core.components.material.Scaffold\n\n@Composable\nfun GlobalAnimeSearchScreen(\n    state: AnimeSearchScreenModel.State,\n    navigateUp: () -> Unit,\n    onChangeSearchQuery: (String?) -> Unit,\n    onSearch: (String) -> Unit,\n    onChangeSearchFilter: (AnimeSourceFilter) -> Unit,\n    onToggleResults: () -> Unit,\n    getAnime: @Composable (Anime) -> State<Anime>,\n    onClickSource: (AnimeCatalogueSource) -> Unit,\n    onClickItem: (Anime) -> Unit,\n    onLongClickItem: (Anime) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            GlobalAnimeSearchToolbar(\n                searchQuery = state.searchQuery,\n                progress = state.progress,\n                total = state.total,\n                navigateUp = navigateUp,\n                onChangeSearchQuery = onChangeSearchQuery,\n                onSearch = onSearch,\n                sourceFilter = state.sourceFilter,\n                onChangeSearchFilter = onChangeSearchFilter,\n                onlyShowHasResults = state.onlyShowHasResults,\n                onToggleResults = onToggleResults,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        GlobalSearchContent(\n            items = state.filteredItems,\n            contentPadding = paddingValues,\n            getAnime = getAnime,\n            onClickSource = onClickSource,\n            onClickItem = onClickItem,\n            onLongClickItem = onLongClickItem,\n        )\n    }\n}\n\n@Composable\ninternal fun GlobalSearchContent(\n    items: Map<AnimeCatalogueSource, AnimeSearchItemResult>,\n    contentPadding: PaddingValues,\n    getAnime: @Composable (Anime) -> State<Anime>,\n    onClickSource: (AnimeCatalogueSource) -> Unit,\n    onClickItem: (Anime) -> Unit,\n    onLongClickItem: (Anime) -> Unit,\n    fromSourceId: Long? = null,\n) {\n    LazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items.forEach { (source, result) ->\n            item(key = source.id) {\n                GlobalSearchResultItem(\n                    title = fromSourceId?.let {\n                        \"▶ ${source.name}\".takeIf { source.id == fromSourceId }\n                    } ?: source.name,\n                    subtitle = LocaleHelper.getLocalizedDisplayName(source.lang),\n                    onClick = { onClickSource(source) },\n                    modifier = Modifier.animateItem(),\n                ) {\n                    when (result) {\n                        AnimeSearchItemResult.Loading -> {\n                            GlobalSearchLoadingResultItem()\n                        }\n                        is AnimeSearchItemResult.Success -> {\n                            GlobalAnimeSearchCardRow(\n                                titles = result.result,\n                                getAnime = getAnime,\n                                onClick = onClickItem,\n                                onLongClick = onLongClickItem,\n                            )\n                        }\n                        is AnimeSearchItemResult.Error -> {\n                            GlobalSearchErrorResultItem(message = result.throwable.message)\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.entries.anime.components.BaseAnimeListItem\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.MigrateAnimeScreenModel\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun MigrateAnimeScreen(\n    navigateUp: () -> Unit,\n    title: String?,\n    state: MigrateAnimeScreenModel.State,\n    onClickItem: (Anime) -> Unit,\n    onClickCover: (Anime) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = title,\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { contentPadding ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.empty_screen,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n\n        MigrateAnimeContent(\n            contentPadding = contentPadding,\n            state = state,\n            onClickItem = onClickItem,\n            onClickCover = onClickCover,\n        )\n    }\n}\n\n@Composable\nprivate fun MigrateAnimeContent(\n    contentPadding: PaddingValues,\n    state: MigrateAnimeScreenModel.State,\n    onClickItem: (Anime) -> Unit,\n    onClickCover: (Anime) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items(state.titles) { anime ->\n            MigrateAnimeItem(\n                anime = anime,\n                onClickItem = onClickItem,\n                onClickCover = onClickCover,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MigrateAnimeItem(\n    anime: Anime,\n    onClickItem: (Anime) -> Unit,\n    onClickCover: (Anime) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseAnimeListItem(\n        modifier = modifier,\n        anime = anime,\n        onClickItem = { onClickItem(anime) },\n        onClickCover = { onClickCover(anime) },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeSearchScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport eu.kanade.presentation.browse.anime.components.GlobalAnimeSearchToolbar\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSearchScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSourceFilter\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.presentation.core.components.material.Scaffold\n\n@Composable\nfun MigrateAnimeSearchScreen(\n    state: AnimeSearchScreenModel.State,\n    fromSourceId: Long?,\n    navigateUp: () -> Unit,\n    onChangeSearchQuery: (String?) -> Unit,\n    onSearch: (String) -> Unit,\n    onChangeSearchFilter: (AnimeSourceFilter) -> Unit,\n    onToggleResults: () -> Unit,\n    getAnime: @Composable (Anime) -> State<Anime>,\n    onClickSource: (AnimeCatalogueSource) -> Unit,\n    onClickItem: (Anime) -> Unit,\n    onLongClickItem: (Anime) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            GlobalAnimeSearchToolbar(\n                searchQuery = state.searchQuery,\n                progress = state.progress,\n                total = state.total,\n                navigateUp = navigateUp,\n                onChangeSearchQuery = onChangeSearchQuery,\n                onSearch = onSearch,\n                sourceFilter = state.sourceFilter,\n                onChangeSearchFilter = onChangeSearchFilter,\n                onlyShowHasResults = state.onlyShowHasResults,\n                onToggleResults = onToggleResults,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        GlobalSearchContent(\n            fromSourceId = fromSourceId,\n            items = state.filteredItems,\n            contentPadding = paddingValues,\n            getAnime = getAnime,\n            onClickSource = onClickSource,\n            onClickItem = onClickItem,\n            onLongClickItem = onLongClickItem,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeSourceScreen.kt",
    "content": "package eu.kanade.presentation.browse.anime\n\nimport androidx.compose.foundation.background\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.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ArrowDownward\nimport androidx.compose.material.icons.outlined.ArrowUpward\nimport androidx.compose.material.icons.outlined.Numbers\nimport androidx.compose.material.icons.outlined.SortByAlpha\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.presentation.browse.anime.components.AnimeSourceIcon\nimport eu.kanade.presentation.browse.anime.components.BaseAnimeSourceItem\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.sources.MigrateAnimeSourceScreenModel\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.Badge\nimport tachiyomi.presentation.core.components.BadgeGroup\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun MigrateAnimeSourceScreen(\n    state: MigrateAnimeSourceScreenModel.State,\n    contentPadding: PaddingValues,\n    onClickItem: (AnimeSource) -> Unit,\n    onToggleSortingDirection: () -> Unit,\n    onToggleSortingMode: () -> Unit,\n) {\n    val context = LocalContext.current\n    when {\n        state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n        state.isEmpty -> EmptyScreen(\n            stringRes = MR.strings.information_empty_library,\n            modifier = Modifier.padding(contentPadding),\n        )\n        else ->\n            MigrateAnimeSourceList(\n                list = state.items,\n                contentPadding = contentPadding,\n                onClickItem = onClickItem,\n                onLongClickItem = { source ->\n                    val sourceId = source.id.toString()\n                    context.copyToClipboard(sourceId, sourceId)\n                },\n                sortingMode = state.sortingMode,\n                onToggleSortingMode = onToggleSortingMode,\n                sortingDirection = state.sortingDirection,\n                onToggleSortingDirection = onToggleSortingDirection,\n            )\n    }\n}\n\n@Composable\nprivate fun MigrateAnimeSourceList(\n    list: ImmutableList<Pair<AnimeSource, Long>>,\n    contentPadding: PaddingValues,\n    onClickItem: (AnimeSource) -> Unit,\n    onLongClickItem: (AnimeSource) -> Unit,\n    sortingMode: SetMigrateSorting.Mode,\n    onToggleSortingMode: () -> Unit,\n    sortingDirection: SetMigrateSorting.Direction,\n    onToggleSortingDirection: () -> Unit,\n) {\n    ScrollbarLazyColumn(\n        contentPadding = contentPadding + topSmallPaddingValues,\n    ) {\n        stickyHeader(key = STICKY_HEADER_KEY_PREFIX) {\n            Row(\n                modifier = Modifier\n                    .background(MaterialTheme.colorScheme.background)\n                    .padding(start = MaterialTheme.padding.medium),\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                Text(\n                    text = stringResource(MR.strings.migration_selection_prompt),\n                    modifier = Modifier.weight(1f),\n                    style = MaterialTheme.typography.header,\n                )\n\n                IconButton(onClick = onToggleSortingMode) {\n                    when (sortingMode) {\n                        SetMigrateSorting.Mode.ALPHABETICAL -> Icon(\n                            Icons.Outlined.SortByAlpha,\n                            contentDescription = stringResource(MR.strings.action_sort_alpha),\n                        )\n                        SetMigrateSorting.Mode.TOTAL -> Icon(\n                            Icons.Outlined.Numbers,\n                            contentDescription = stringResource(MR.strings.action_sort_count),\n                        )\n                    }\n                }\n                IconButton(onClick = onToggleSortingDirection) {\n                    when (sortingDirection) {\n                        SetMigrateSorting.Direction.ASCENDING -> Icon(\n                            Icons.Outlined.ArrowUpward,\n                            contentDescription = stringResource(MR.strings.action_asc),\n                        )\n                        SetMigrateSorting.Direction.DESCENDING -> Icon(\n                            Icons.Outlined.ArrowDownward,\n                            contentDescription = stringResource(MR.strings.action_desc),\n                        )\n                    }\n                }\n            }\n        }\n\n        items(\n            items = list,\n            key = { (source, _) -> \"migrate-${source.id}\" },\n        ) { (source, count) ->\n            MigrateAnimeSourceItem(\n                modifier = Modifier.animateItem(),\n                source = source,\n                count = count,\n                onClickItem = { onClickItem(source) },\n                onLongClickItem = { onLongClickItem(source) },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MigrateAnimeSourceItem(\n    source: AnimeSource,\n    count: Long,\n    onClickItem: () -> Unit,\n    onLongClickItem: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseAnimeSourceItem(\n        modifier = modifier,\n        source = source,\n        showLanguageInContent = source.lang != \"\",\n        onClickItem = onClickItem,\n        onLongClickItem = onLongClickItem,\n        icon = { AnimeSourceIcon(source = source) },\n        action = {\n            BadgeGroup {\n                Badge(text = \"$count\")\n            }\n        },\n        content = { _, sourceLangString ->\n            Column(\n                modifier = Modifier\n                    .padding(horizontal = MaterialTheme.padding.medium)\n                    .weight(1f),\n            ) {\n                Text(\n                    text = source.name.ifBlank { source.id.toString() },\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n                Row(\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                    verticalAlignment = Alignment.CenterVertically,\n                ) {\n                    if (sourceLangString != null) {\n                        Text(\n                            modifier = Modifier.secondaryItemAlpha(),\n                            text = sourceLangString,\n                            maxLines = 1,\n                            overflow = TextOverflow.Ellipsis,\n                            style = MaterialTheme.typography.bodySmall,\n                        )\n                    }\n                    if (source.isStub) {\n                        Text(\n                            modifier = Modifier.secondaryItemAlpha(),\n                            text = stringResource(MR.strings.not_installed),\n                            maxLines = 1,\n                            overflow = TextOverflow.Ellipsis,\n                            style = MaterialTheme.typography.bodySmall,\n                            color = MaterialTheme.colorScheme.error,\n                        )\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/BaseAnimeSourceItem.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.RowScope\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport eu.kanade.presentation.browse.BaseBrowseItem\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun BaseAnimeSourceItem(\n    source: AnimeSource,\n    modifier: Modifier = Modifier,\n    showLanguageInContent: Boolean = true,\n    onClickItem: () -> Unit = {},\n    onLongClickItem: () -> Unit = {},\n    icon: @Composable RowScope.(AnimeSource) -> Unit = defaultIcon,\n    action: @Composable RowScope.(AnimeSource) -> Unit = {},\n    content: @Composable RowScope.(AnimeSource, String?) -> Unit = defaultContent,\n) {\n    val sourceLangString = LocaleHelper.getSourceDisplayName(source.lang, LocalContext.current).takeIf {\n        showLanguageInContent\n    }\n    BaseBrowseItem(\n        modifier = modifier,\n        onClickItem = onClickItem,\n        onLongClickItem = onLongClickItem,\n        icon = { icon.invoke(this, source) },\n        action = { action.invoke(this, source) },\n        content = { content.invoke(this, source, sourceLangString) },\n    )\n}\n\nprivate val defaultIcon: @Composable RowScope.(AnimeSource) -> Unit = { source ->\n    AnimeSourceIcon(source = source)\n}\n\nprivate val defaultContent: @Composable RowScope.(AnimeSource, String?) -> Unit = { source, sourceLangString ->\n    Column(\n        modifier = Modifier\n            .padding(horizontal = MaterialTheme.padding.medium)\n            .weight(1f),\n    ) {\n        Text(\n            text = source.name,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        if (sourceLangString != null) {\n            Text(\n                modifier = Modifier.secondaryItemAlpha(),\n                text = sourceLangString,\n                maxLines = 1,\n                overflow = TextOverflow.Ellipsis,\n                style = MaterialTheme.typography.bodySmall,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeIcons.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport android.util.DisplayMetrics\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.aspectRatio\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Dangerous\nimport androidx.compose.material.icons.filled.Warning\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.produceState\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.ColorFilter\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.graphics.painter.ColorPainter\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.imageResource\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport androidx.core.graphics.drawable.toBitmap\nimport coil3.compose.AsyncImage\nimport eu.kanade.domain.source.anime.model.icon\nimport eu.kanade.presentation.util.rememberResourceBitmapPainter\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionLoader\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\nprivate val defaultModifier = Modifier\n    .height(40.dp)\n    .aspectRatio(1f)\n\n@Composable\nfun AnimeSourceIcon(\n    source: AnimeSource,\n    modifier: Modifier = Modifier,\n) {\n    val icon = source.icon\n\n    when {\n        source.isStub && icon == null -> {\n            Image(\n                imageVector = Icons.Filled.Warning,\n                contentDescription = null,\n                colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.error),\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n        icon != null -> {\n            Image(\n                bitmap = icon,\n                contentDescription = null,\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n        source.id == LocalAnimeSource.ID -> {\n            Image(\n                painter = painterResource(R.mipmap.ic_local_source),\n                contentDescription = null,\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n        else -> {\n            Image(\n                painter = painterResource(R.mipmap.ic_default_source),\n                contentDescription = null,\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n    }\n}\n\n@Composable\nfun AnimeExtensionIcon(\n    extension: AnimeExtension,\n    modifier: Modifier = Modifier,\n    density: Int = DisplayMetrics.DENSITY_DEFAULT,\n) {\n    when (extension) {\n        is AnimeExtension.Available -> {\n            AsyncImage(\n                model = extension.iconUrl,\n                contentDescription = null,\n                placeholder = ColorPainter(Color(0x1F888888)),\n                error = rememberResourceBitmapPainter(id = R.drawable.cover_error),\n                modifier = modifier\n                    .clip(MaterialTheme.shapes.extraSmall),\n            )\n        }\n        is AnimeExtension.Installed -> {\n            val icon by extension.getIcon(density)\n            when (icon) {\n                is Result.Loading -> Box(modifier = modifier)\n                is Result.Success -> Image(\n                    bitmap = (icon as Result.Success<ImageBitmap>).value,\n                    contentDescription = null,\n                    modifier = modifier,\n                )\n                Result.Error -> Image(\n                    bitmap = ImageBitmap.imageResource(id = R.mipmap.ic_default_source),\n                    contentDescription = null,\n                    modifier = modifier,\n                )\n            }\n        }\n        is AnimeExtension.Untrusted -> Image(\n            imageVector = Icons.Filled.Dangerous,\n            contentDescription = null,\n            colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.error),\n            modifier = modifier.then(defaultModifier),\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeExtension.getIcon(density: Int = DisplayMetrics.DENSITY_DEFAULT): State<Result<ImageBitmap>> {\n    val context = LocalContext.current\n    return produceState<Result<ImageBitmap>>(initialValue = Result.Loading, this) {\n        withIOContext {\n            value = try {\n                val appInfo = AnimeExtensionLoader.getAnimeExtensionPackageInfoFromPkgName(\n                    context,\n                    pkgName,\n                )!!.applicationInfo!!\n                val appResources = context.packageManager.getResourcesForApplication(appInfo)\n                Result.Success(\n                    appResources.getDrawableForDensity(appInfo.icon, density, null)!!\n                        .toBitmap()\n                        .asImageBitmap(),\n                )\n            } catch (e: Exception) {\n                Result.Error\n            }\n        }\n    }\n}\n\nsealed class Result<out T> {\n    data object Loading : Result<Nothing>()\n    data object Error : Result<Nothing>()\n    data class Success<out T>(val value: T) : Result<T>()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceComfortableGrid.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.GridItemSpan\nimport androidx.compose.foundation.lazy.grid.LazyVerticalGrid\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.BrowseSourceLoadingItem\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun BrowseAnimeSourceComfortableGrid(\n    animeList: LazyPagingItems<StateFlow<Anime>>,\n    columns: GridCells,\n    contentPadding: PaddingValues,\n    onAnimeClick: (Anime) -> Unit,\n    onAnimeLongClick: (Anime) -> Unit,\n) {\n    LazyVerticalGrid(\n        columns = columns,\n        contentPadding = contentPadding + PaddingValues(8.dp),\n        verticalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridVerticalSpacer),\n        horizontalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridHorizontalSpacer),\n    ) {\n        if (animeList.loadState.prepend is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n\n        items(count = animeList.itemCount) { index ->\n            val anime by animeList[index]?.collectAsState() ?: return@items\n            BrowseAnimeSourceComfortableGridItem(\n                anime = anime,\n                onClick = { onAnimeClick(anime) },\n                onLongClick = { onAnimeLongClick(anime) },\n            )\n        }\n\n        if (animeList.loadState.refresh is LoadState.Loading || animeList.loadState.append is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BrowseAnimeSourceComfortableGridItem(\n    anime: Anime,\n    onClick: () -> Unit = {},\n    onLongClick: () -> Unit = onClick,\n) {\n    EntryComfortableGridItem(\n        title = anime.title,\n        coverData = AnimeCover(\n            animeId = anime.id,\n            sourceId = anime.source,\n            isAnimeFavorite = anime.favorite,\n            url = anime.thumbnailUrl,\n            lastModified = anime.coverLastModified,\n        ),\n        coverAlpha = if (anime.favorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n        coverBadgeStart = {\n            InLibraryBadge(enabled = anime.favorite)\n        },\n        onLongClick = onLongClick,\n        onClick = onClick,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceCompactGrid.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.GridItemSpan\nimport androidx.compose.foundation.lazy.grid.LazyVerticalGrid\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.BrowseSourceLoadingItem\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryCompactGridItem\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun BrowseAnimeSourceCompactGrid(\n    animeList: LazyPagingItems<StateFlow<Anime>>,\n    columns: GridCells,\n    contentPadding: PaddingValues,\n    onAnimeClick: (Anime) -> Unit,\n    onAnimeLongClick: (Anime) -> Unit,\n) {\n    LazyVerticalGrid(\n        columns = columns,\n        contentPadding = contentPadding + PaddingValues(8.dp),\n        verticalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridVerticalSpacer),\n        horizontalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridHorizontalSpacer),\n    ) {\n        if (animeList.loadState.prepend is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n\n        items(count = animeList.itemCount) { index ->\n            val anime by animeList[index]?.collectAsState() ?: return@items\n            BrowseAnimeSourceCompactGridItem(\n                anime = anime,\n                onClick = { onAnimeClick(anime) },\n                onLongClick = { onAnimeLongClick(anime) },\n            )\n        }\n\n        if (animeList.loadState.refresh is LoadState.Loading || animeList.loadState.append is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BrowseAnimeSourceCompactGridItem(\n    anime: Anime,\n    onClick: () -> Unit = {},\n    onLongClick: () -> Unit = onClick,\n) {\n    EntryCompactGridItem(\n        title = anime.title,\n        coverData = AnimeCover(\n            animeId = anime.id,\n            sourceId = anime.source,\n            isAnimeFavorite = anime.favorite,\n            url = anime.thumbnailUrl,\n            lastModified = anime.coverLastModified,\n        ),\n        coverAlpha = if (anime.favorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n        coverBadgeStart = {\n            InLibraryBadge(enabled = anime.favorite)\n        },\n        onLongClick = onLongClick,\n        onClick = onClick,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceList.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.BrowseSourceLoadingItem\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryListItem\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun BrowseAnimeSourceList(\n    animeList: LazyPagingItems<StateFlow<Anime>>,\n    entries: Int,\n    topBarHeight: Int,\n    contentPadding: PaddingValues,\n    onAnimeClick: (Anime) -> Unit,\n    onAnimeLongClick: (Anime) -> Unit,\n) {\n    val sourceListState = rememberLazyListState()\n    BoxWithConstraints {\n        val density = LocalDensity.current\n        val containerHeightPx = with(density) { this@BoxWithConstraints.maxHeight.roundToPx() }\n\n        LazyColumn(\n            state = sourceListState,\n            contentPadding = contentPadding + PaddingValues(vertical = 8.dp),\n        ) {\n            item {\n                if (animeList.loadState.prepend is LoadState.Loading) {\n                    BrowseSourceLoadingItem()\n                }\n            }\n\n            items(count = animeList.itemCount) { index ->\n                val anime by animeList[index]?.collectAsState() ?: return@items\n                BrowseAnimeSourceListItem(\n                    anime = anime,\n                    onClick = { onAnimeClick(anime) },\n                    onLongClick = { onAnimeLongClick(anime) },\n                    entries = entries,\n                    containerHeight = containerHeightPx - topBarHeight,\n                )\n            }\n\n            item {\n                if (animeList.loadState.refresh is LoadState.Loading ||\n                    animeList.loadState.append is LoadState.Loading\n                ) {\n                    BrowseSourceLoadingItem()\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BrowseAnimeSourceListItem(\n    anime: Anime,\n    onClick: () -> Unit = {},\n    onLongClick: () -> Unit = onClick,\n    entries: Int,\n    containerHeight: Int,\n) {\n    EntryListItem(\n        title = anime.title,\n        coverData = AnimeCover(\n            animeId = anime.id,\n            sourceId = anime.source,\n            isAnimeFavorite = anime.favorite,\n            url = anime.thumbnailUrl,\n            lastModified = anime.coverLastModified,\n        ),\n        coverAlpha = if (anime.favorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n        badge = {\n            InLibraryBadge(enabled = anime.favorite)\n        },\n        onLongClick = onLongClick,\n        onClick = onClick,\n        entries = entries,\n        containerHeight = containerHeight,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceToolbar.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ViewList\nimport androidx.compose.material.icons.filled.ViewModule\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.AppBarTitle\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.components.RadioMenuItem\nimport eu.kanade.presentation.components.SearchToolbar\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\n@Composable\nfun BrowseAnimeSourceToolbar(\n    searchQuery: String?,\n    onSearchQueryChange: (String?) -> Unit,\n    source: AnimeSource?,\n    displayMode: LibraryDisplayMode,\n    onDisplayModeChange: (LibraryDisplayMode) -> Unit,\n    navigateUp: () -> Unit,\n    onWebViewClick: () -> Unit,\n    onHelpClick: () -> Unit,\n    onSettingsClick: () -> Unit,\n    onSearch: (String) -> Unit,\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n) {\n    // Avoid capturing unstable source in actions lambda\n    val title = source?.name\n    val isLocalSource = source is LocalAnimeSource\n    val isConfigurableSource = source is ConfigurableAnimeSource\n\n    var selectingDisplayMode by remember { mutableStateOf(false) }\n\n    SearchToolbar(\n        navigateUp = navigateUp,\n        titleContent = { AppBarTitle(title) },\n        searchQuery = searchQuery,\n        onChangeSearchQuery = onSearchQueryChange,\n        onSearch = onSearch,\n        onClickCloseSearch = navigateUp,\n        actions = {\n            AppBarActions(\n                actions = persistentListOf<AppBar.AppBarAction>().builder()\n                    .apply {\n                        add(\n                            AppBar.Action(\n                                title = stringResource(MR.strings.action_display_mode),\n                                icon = if (displayMode == LibraryDisplayMode.List) {\n                                    Icons.AutoMirrored.Filled.ViewList\n                                } else {\n                                    Icons.Filled.ViewModule\n                                },\n                                onClick = { selectingDisplayMode = true },\n                            ),\n                        )\n                        if (isLocalSource) {\n                            add(\n                                AppBar.OverflowAction(\n                                    title = stringResource(MR.strings.label_help),\n                                    onClick = onHelpClick,\n                                ),\n                            )\n                        } else {\n                            add(\n                                AppBar.OverflowAction(\n                                    title = stringResource(MR.strings.action_open_in_web_view),\n                                    onClick = onWebViewClick,\n                                ),\n                            )\n                        }\n                        if (isConfigurableSource) {\n                            add(\n                                AppBar.OverflowAction(\n                                    title = stringResource(MR.strings.action_settings),\n                                    onClick = onSettingsClick,\n                                ),\n                            )\n                        }\n                    }\n                    .build(),\n            )\n\n            DropdownMenu(\n                expanded = selectingDisplayMode,\n                onDismissRequest = { selectingDisplayMode = false },\n            ) {\n                RadioMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_display_comfortable_grid)) },\n                    isChecked = displayMode == LibraryDisplayMode.ComfortableGrid,\n                ) {\n                    selectingDisplayMode = false\n                    onDisplayModeChange(LibraryDisplayMode.ComfortableGrid)\n                }\n                RadioMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_display_grid)) },\n                    isChecked = displayMode == LibraryDisplayMode.CompactGrid,\n                ) {\n                    selectingDisplayMode = false\n                    onDisplayModeChange(LibraryDisplayMode.CompactGrid)\n                }\n                RadioMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_display_list)) },\n                    isChecked = displayMode == LibraryDisplayMode.List,\n                ) {\n                    selectingDisplayMode = false\n                    onDisplayModeChange(LibraryDisplayMode.List)\n                }\n            }\n        },\n        scrollBehavior = scrollBehavior,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchCardRow.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.entries.anime.model.asAnimeCover\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun GlobalAnimeSearchCardRow(\n    titles: List<Anime>,\n    getAnime: @Composable (Anime) -> State<Anime>,\n    onClick: (Anime) -> Unit,\n    onLongClick: (Anime) -> Unit,\n) {\n    if (titles.isEmpty()) {\n        EmptyResultItem()\n        return\n    }\n\n    LazyRow(\n        contentPadding = PaddingValues(MaterialTheme.padding.small),\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        items(titles) {\n            val title by getAnime(it)\n            AnimeItem(\n                title = title.title,\n                cover = title.asAnimeCover(),\n                isFavorite = title.favorite,\n                onClick = { onClick(title) },\n                onLongClick = { onLongClick(title) },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeItem(\n    title: String,\n    cover: AnimeCover,\n    isFavorite: Boolean,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n) {\n    Box(modifier = Modifier.width(96.dp)) {\n        EntryComfortableGridItem(\n            title = title,\n            titleMaxLines = 3,\n            coverData = cover,\n            coverBadgeStart = {\n                InLibraryBadge(enabled = isFavorite)\n            },\n            coverAlpha = if (isFavorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n            onClick = onClick,\n            onLongClick = onLongClick,\n        )\n    }\n}\n\n@Composable\nprivate fun EmptyResultItem() {\n    Text(\n        text = stringResource(MR.strings.no_results_found),\n        modifier = Modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchToolbar.kt",
    "content": "package eu.kanade.presentation.browse.anime.components\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.horizontalScroll\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.fillMaxWidth\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.outlined.DoneAll\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.PushPin\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.FilterChipDefaults\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LinearProgressIndicator\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.material3.VerticalDivider\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.components.SearchToolbar\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSourceFilter\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun GlobalAnimeSearchToolbar(\n    searchQuery: String?,\n    progress: Int,\n    total: Int,\n    navigateUp: () -> Unit,\n    onChangeSearchQuery: (String?) -> Unit,\n    onSearch: (String) -> Unit,\n    sourceFilter: AnimeSourceFilter,\n    onChangeSearchFilter: (AnimeSourceFilter) -> Unit,\n    onlyShowHasResults: Boolean,\n    onToggleResults: () -> Unit,\n    scrollBehavior: TopAppBarScrollBehavior,\n) {\n    Column(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) {\n        Box {\n            SearchToolbar(\n                searchQuery = searchQuery,\n                onChangeSearchQuery = onChangeSearchQuery,\n                onSearch = onSearch,\n                onClickCloseSearch = navigateUp,\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n            if (progress in 1..<total) {\n                LinearProgressIndicator(\n                    progress = { progress / total.toFloat() },\n                    modifier = Modifier\n                        .align(Alignment.BottomStart)\n                        .fillMaxWidth(),\n                )\n            }\n        }\n\n        Row(\n            modifier = Modifier\n                .horizontalScroll(rememberScrollState())\n                .padding(horizontal = MaterialTheme.padding.small),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            // TODO: make this UX better; it only applies when triggering a new search\n            FilterChip(\n                selected = sourceFilter == AnimeSourceFilter.PinnedOnly,\n                onClick = { onChangeSearchFilter(AnimeSourceFilter.PinnedOnly) },\n                leadingIcon = {\n                    Icon(\n                        imageVector = Icons.Outlined.PushPin,\n                        contentDescription = null,\n                        modifier = Modifier\n                            .size(FilterChipDefaults.IconSize),\n                    )\n                },\n                label = {\n                    Text(text = stringResource(MR.strings.pinned_sources))\n                },\n            )\n            FilterChip(\n                selected = sourceFilter == AnimeSourceFilter.All,\n                onClick = { onChangeSearchFilter(AnimeSourceFilter.All) },\n                leadingIcon = {\n                    Icon(\n                        imageVector = Icons.Outlined.DoneAll,\n                        contentDescription = null,\n                        modifier = Modifier\n                            .size(FilterChipDefaults.IconSize),\n                    )\n                },\n                label = {\n                    Text(text = stringResource(MR.strings.all))\n                },\n            )\n\n            VerticalDivider()\n\n            FilterChip(\n                selected = onlyShowHasResults,\n                onClick = { onToggleResults() },\n                leadingIcon = {\n                    Icon(\n                        imageVector = Icons.Outlined.FilterList,\n                        contentDescription = null,\n                        modifier = Modifier\n                            .size(FilterChipDefaults.IconSize),\n                    )\n                },\n                label = {\n                    Text(text = stringResource(MR.strings.has_results))\n                },\n            )\n        }\n\n        HorizontalDivider()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/BrowseMangaSourceScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material3.SnackbarDuration\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.SnackbarResult\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.manga.components.BrowseMangaSourceComfortableGrid\nimport eu.kanade.presentation.browse.manga.components.BrowseMangaSourceCompactGrid\nimport eu.kanade.presentation.browse.manga.components.BrowseMangaSourceList\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.formattedMessage\nimport eu.kanade.tachiyomi.source.MangaSource\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\n@Composable\nfun BrowseSourceContent(\n    source: MangaSource?,\n    mangaList: LazyPagingItems<StateFlow<Manga>>,\n    columns: GridCells,\n    entries: Int = 0,\n    topBarHeight: Int = 0,\n    displayMode: LibraryDisplayMode,\n    snackbarHostState: SnackbarHostState,\n    contentPadding: PaddingValues,\n    onWebViewClick: () -> Unit,\n    onHelpClick: () -> Unit,\n    onLocalSourceHelpClick: () -> Unit,\n    onMangaClick: (Manga) -> Unit,\n    onMangaLongClick: (Manga) -> Unit,\n) {\n    val context = LocalContext.current\n\n    val errorState = mangaList.loadState.refresh.takeIf { it is LoadState.Error }\n        ?: mangaList.loadState.append.takeIf { it is LoadState.Error }\n\n    val getErrorMessage: (LoadState.Error) -> String = { state ->\n        with(context) { state.error.formattedMessage }\n    }\n\n    LaunchedEffect(errorState) {\n        if (mangaList.itemCount > 0 && errorState != null && errorState is LoadState.Error) {\n            val result = snackbarHostState.showSnackbar(\n                message = getErrorMessage(errorState),\n                actionLabel = context.stringResource(MR.strings.action_retry),\n                duration = SnackbarDuration.Indefinite,\n            )\n            when (result) {\n                SnackbarResult.Dismissed -> snackbarHostState.currentSnackbarData?.dismiss()\n                SnackbarResult.ActionPerformed -> mangaList.retry()\n            }\n        }\n    }\n\n    if (mangaList.itemCount <= 0 && errorState != null && errorState is LoadState.Error) {\n        EmptyScreen(\n            modifier = Modifier.padding(contentPadding),\n            message = getErrorMessage(errorState),\n            actions = if (source is LocalMangaSource) {\n                persistentListOf(\n                    EmptyScreenAction(\n                        stringRes = MR.strings.local_source_help_guide,\n                        icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                        onClick = onLocalSourceHelpClick,\n                    ),\n                )\n            } else {\n                persistentListOf(\n                    EmptyScreenAction(\n                        stringRes = MR.strings.action_retry,\n                        icon = Icons.Outlined.Refresh,\n                        onClick = mangaList::refresh,\n                    ),\n                    EmptyScreenAction(\n                        stringRes = MR.strings.action_open_in_web_view,\n                        icon = Icons.Outlined.Public,\n                        onClick = onWebViewClick,\n                    ),\n                    EmptyScreenAction(\n                        stringRes = MR.strings.label_help,\n                        icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                        onClick = onHelpClick,\n                    ),\n                )\n            },\n        )\n\n        return\n    }\n\n    if (mangaList.itemCount == 0 && mangaList.loadState.refresh is LoadState.Loading) {\n        LoadingScreen(\n            modifier = Modifier.padding(contentPadding),\n        )\n        return\n    }\n\n    when (displayMode) {\n        LibraryDisplayMode.ComfortableGrid -> {\n            BrowseMangaSourceComfortableGrid(\n                mangaList = mangaList,\n                columns = columns,\n                contentPadding = contentPadding,\n                onMangaClick = onMangaClick,\n                onMangaLongClick = onMangaLongClick,\n            )\n        }\n        LibraryDisplayMode.List -> {\n            BrowseMangaSourceList(\n                mangaList = mangaList,\n                entries = entries,\n                topBarHeight = topBarHeight,\n                contentPadding = contentPadding,\n                onMangaClick = onMangaClick,\n                onMangaLongClick = onMangaLongClick,\n            )\n        }\n        LibraryDisplayMode.CompactGrid, LibraryDisplayMode.CoverOnlyGrid -> {\n            BrowseMangaSourceCompactGrid(\n                mangaList = mangaList,\n                columns = columns,\n                contentPadding = contentPadding,\n                onMangaClick = onMangaClick,\n                onMangaLongClick = onMangaLongClick,\n            )\n        }\n    }\n}\n\n@Composable\ninternal fun MissingSourceScreen(\n    source: StubMangaSource,\n    navigateUp: () -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = source.name,\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        EmptyScreen(\n            message = stringResource(MR.strings.source_not_installed, source.toString()),\n            modifier = Modifier.padding(paddingValues),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/GlobalMangaSearchScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.browse.GlobalSearchErrorResultItem\nimport eu.kanade.presentation.browse.GlobalSearchLoadingResultItem\nimport eu.kanade.presentation.browse.GlobalSearchResultItem\nimport eu.kanade.presentation.browse.manga.components.GlobalMangaSearchCardRow\nimport eu.kanade.presentation.browse.manga.components.GlobalMangaSearchToolbar\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSearchItemResult\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSearchScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSourceFilter\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.presentation.core.components.material.Scaffold\n\n@Composable\nfun GlobalMangaSearchScreen(\n    state: MangaSearchScreenModel.State,\n    navigateUp: () -> Unit,\n    onChangeSearchQuery: (String?) -> Unit,\n    onSearch: (String) -> Unit,\n    onChangeSearchFilter: (MangaSourceFilter) -> Unit,\n    onToggleResults: () -> Unit,\n    getManga: @Composable (Manga) -> State<Manga>,\n    onClickSource: (CatalogueSource) -> Unit,\n    onClickItem: (Manga) -> Unit,\n    onLongClickItem: (Manga) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            GlobalMangaSearchToolbar(\n                searchQuery = state.searchQuery,\n                progress = state.progress,\n                total = state.total,\n                navigateUp = navigateUp,\n                onChangeSearchQuery = onChangeSearchQuery,\n                onSearch = onSearch,\n                sourceFilter = state.sourceFilter,\n                onChangeSearchFilter = onChangeSearchFilter,\n                onlyShowHasResults = state.onlyShowHasResults,\n                onToggleResults = onToggleResults,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        GlobalSearchContent(\n            items = state.filteredItems,\n            contentPadding = paddingValues,\n            getManga = getManga,\n            onClickSource = onClickSource,\n            onClickItem = onClickItem,\n            onLongClickItem = onLongClickItem,\n        )\n    }\n}\n\n@Composable\ninternal fun GlobalSearchContent(\n    items: Map<CatalogueSource, MangaSearchItemResult>,\n    contentPadding: PaddingValues,\n    getManga: @Composable (Manga) -> State<Manga>,\n    onClickSource: (CatalogueSource) -> Unit,\n    onClickItem: (Manga) -> Unit,\n    onLongClickItem: (Manga) -> Unit,\n    fromSourceId: Long? = null,\n) {\n    LazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items.forEach { (source, result) ->\n            item(key = source.id) {\n                GlobalSearchResultItem(\n                    title = fromSourceId?.let {\n                        \"▶ ${source.name}\".takeIf { source.id == fromSourceId }\n                    } ?: source.name,\n                    subtitle = LocaleHelper.getLocalizedDisplayName(source.lang),\n                    onClick = { onClickSource(source) },\n                    modifier = Modifier.animateItem(),\n                ) {\n                    when (result) {\n                        MangaSearchItemResult.Loading -> {\n                            GlobalSearchLoadingResultItem()\n                        }\n                        is MangaSearchItemResult.Success -> {\n                            GlobalMangaSearchCardRow(\n                                titles = result.result,\n                                getManga = getManga,\n                                onClick = onClickItem,\n                                onLongClick = onLongClickItem,\n                            )\n                        }\n                        is MangaSearchItemResult.Error -> {\n                            GlobalSearchErrorResultItem(message = result.throwable.message)\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionDetailsScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.provider.Settings\nimport android.util.DisplayMetrics\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.fillMaxWidth\nimport androidx.compose.foundation.layout.height\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.outlined.Launch\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Switch\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.VerticalDivider\nimport androidx.compose.runtime.Composable\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.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.res.vectorResource\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.domain.extension.manga.interactor.MangaExtensionSourceItem\nimport eu.kanade.presentation.browse.manga.components.MangaExtensionIcon\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.source.ConfigurableSource\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.details.MangaExtensionDetailsScreenModel\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun MangaExtensionDetailsScreen(\n    navigateUp: () -> Unit,\n    state: MangaExtensionDetailsScreenModel.State,\n    onClickSourcePreferences: (sourceId: Long) -> Unit,\n    onClickEnableAll: () -> Unit,\n    onClickDisableAll: () -> Unit,\n    onClickClearCookies: () -> Unit,\n    onClickUninstall: () -> Unit,\n    onClickSource: (sourceId: Long) -> Unit,\n    onClickIncognito: (Boolean) -> Unit,\n) {\n    val uriHandler = LocalUriHandler.current\n    val url = remember(state.extension) {\n        val regex = \"\"\"https://raw.githubusercontent.com/(.+?)/(.+?)/.+\"\"\".toRegex()\n        regex.find(state.extension?.repoUrl.orEmpty())\n            ?.let {\n                val (user, repo) = it.destructured\n                \"https://github.com/$user/$repo\"\n            }\n            ?: state.extension?.repoUrl\n    }\n\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(MR.strings.label_extension_info),\n                navigateUp = navigateUp,\n                actions = {\n                    AppBarActions(\n                        actions = persistentListOf<AppBar.AppBarAction>().builder()\n                            .apply {\n                                if (url != null) {\n                                    add(\n                                        AppBar.Action(\n                                            title = stringResource(MR.strings.action_open_repo),\n                                            icon = Icons.AutoMirrored.Outlined.Launch,\n                                            onClick = {\n                                                uriHandler.openUri(url)\n                                            },\n                                        ),\n                                    )\n                                }\n                                addAll(\n                                    listOf(\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_enable_all),\n                                            onClick = onClickEnableAll,\n                                        ),\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_disable_all),\n                                            onClick = onClickDisableAll,\n                                        ),\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.pref_clear_cookies),\n                                            onClick = onClickClearCookies,\n                                        ),\n                                    ),\n                                )\n                            }\n                            .build(),\n                    )\n                },\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        if (state.extension == null) {\n            EmptyScreen(\n                MR.strings.empty_screen,\n                modifier = Modifier.padding(paddingValues),\n            )\n            return@Scaffold\n        }\n\n        ExtensionDetails(\n            contentPadding = paddingValues,\n            extension = state.extension,\n            sources = state.sources,\n            incognitoMode = state.isIncognito,\n            onClickSourcePreferences = onClickSourcePreferences,\n            onClickUninstall = onClickUninstall,\n            onClickSource = onClickSource,\n            onClickIncognito = onClickIncognito,\n        )\n    }\n}\n\n@Composable\nprivate fun ExtensionDetails(\n    contentPadding: PaddingValues,\n    extension: MangaExtension.Installed,\n    sources: ImmutableList<MangaExtensionSourceItem>,\n    incognitoMode: Boolean,\n    onClickSourcePreferences: (sourceId: Long) -> Unit,\n    onClickUninstall: () -> Unit,\n    onClickSource: (sourceId: Long) -> Unit,\n    onClickIncognito: (Boolean) -> Unit,\n) {\n    val context = LocalContext.current\n    var showNsfwWarning by remember { mutableStateOf(false) }\n\n    ScrollbarLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        if (extension.isObsolete) {\n            item {\n                WarningBanner(MR.strings.obsolete_extension_message)\n            }\n        }\n\n        item {\n            DetailsHeader(\n                extension = extension,\n                extIncognitoMode = incognitoMode,\n                onClickUninstall = onClickUninstall,\n                onClickAppInfo = {\n                    Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {\n                        data = Uri.fromParts(\"package\", extension.pkgName, null)\n                        context.startActivity(this)\n                    }\n                    Unit\n                }.takeIf { extension.isShared },\n                onClickAgeRating = {\n                    showNsfwWarning = true\n                },\n                onExtIncognitoChange = onClickIncognito,\n            )\n        }\n\n        items(\n            items = sources,\n            key = { it.source.id },\n        ) { source ->\n            SourceSwitchPreference(\n                modifier = Modifier.animateItem(),\n                source = source,\n                onClickSourcePreferences = onClickSourcePreferences,\n                onClickSource = onClickSource,\n            )\n        }\n    }\n    if (showNsfwWarning) {\n        NsfwWarningDialog(\n            onClickConfirm = {\n                showNsfwWarning = false\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun DetailsHeader(\n    extension: MangaExtension,\n    extIncognitoMode: Boolean,\n    onClickAgeRating: () -> Unit,\n    onClickUninstall: () -> Unit,\n    onClickAppInfo: (() -> Unit)?,\n    onExtIncognitoChange: (Boolean) -> Unit,\n) {\n    val context = LocalContext.current\n\n    Column {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(horizontal = MaterialTheme.padding.medium)\n                .padding(\n                    top = MaterialTheme.padding.medium,\n                    bottom = MaterialTheme.padding.small,\n                )\n                .clickable {\n                    val extDebugInfo = buildString {\n                        append(\n                            \"\"\"\n                            Extension name: ${extension.name} (lang: ${extension.lang}; package: ${extension.pkgName})\n                            Extension version: ${extension.versionName} (lib: ${extension.libVersion}; version code: ${extension.versionCode})\n                            NSFW: ${extension.isNsfw}\n                            \"\"\".trimIndent(),\n                        )\n\n                        if (extension is MangaExtension.Installed) {\n                            append(\"\\n\\n\")\n                            append(\n                                \"\"\"\n                                Update available: ${extension.hasUpdate}\n                                Obsolete: ${extension.isObsolete}\n                                Shared: ${extension.isShared}\n                                Repository: ${extension.repoUrl}\n                                \"\"\".trimIndent(),\n                            )\n                        }\n                    }\n                    context.copyToClipboard(\"Extension Debug information\", extDebugInfo)\n                },\n            horizontalAlignment = Alignment.CenterHorizontally,\n        ) {\n            MangaExtensionIcon(\n                modifier = Modifier\n                    .size(112.dp),\n                extension = extension,\n                density = DisplayMetrics.DENSITY_XXXHIGH,\n            )\n\n            Text(\n                text = extension.name,\n                style = MaterialTheme.typography.headlineSmall,\n                textAlign = TextAlign.Center,\n            )\n\n            val strippedPkgName = extension.pkgName.substringAfter(\"eu.kanade.tachiyomi.extension.\")\n\n            Text(\n                text = strippedPkgName,\n                style = MaterialTheme.typography.bodySmall,\n            )\n        }\n\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(\n                    horizontal = MaterialTheme.padding.extraLarge,\n                    vertical = MaterialTheme.padding.small,\n                ),\n            horizontalArrangement = Arrangement.SpaceEvenly,\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            InfoText(\n                modifier = Modifier.weight(1f),\n                primaryText = extension.versionName,\n                secondaryText = stringResource(MR.strings.ext_info_version),\n            )\n\n            InfoDivider()\n\n            InfoText(\n                modifier = Modifier.weight(if (extension.isNsfw) 1.5f else 1f),\n                primaryText = LocaleHelper.getSourceDisplayName(extension.lang, context),\n                secondaryText = stringResource(MR.strings.ext_info_language),\n            )\n\n            if (extension.isNsfw) {\n                InfoDivider()\n\n                InfoText(\n                    modifier = Modifier.weight(1f),\n                    primaryText = stringResource(MR.strings.ext_nsfw_short),\n                    primaryTextStyle = MaterialTheme.typography.bodyLarge.copy(\n                        color = MaterialTheme.colorScheme.error,\n                        fontWeight = FontWeight.Medium,\n                    ),\n                    secondaryText = stringResource(MR.strings.ext_info_age_rating),\n                    onClick = onClickAgeRating,\n                )\n            }\n        }\n\n        Row(\n            modifier = Modifier\n                .padding(horizontal = MaterialTheme.padding.medium)\n                .padding(top = MaterialTheme.padding.small),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n        ) {\n            OutlinedButton(\n                modifier = Modifier.weight(1f),\n                onClick = onClickUninstall,\n            ) {\n                Text(stringResource(MR.strings.ext_uninstall))\n            }\n\n            if (onClickAppInfo != null) {\n                Button(\n                    modifier = Modifier.weight(1f),\n                    onClick = onClickAppInfo,\n                ) {\n                    Text(\n                        text = stringResource(MR.strings.ext_app_info),\n                        color = MaterialTheme.colorScheme.onPrimary,\n                    )\n                }\n            }\n        }\n\n        TextPreferenceWidget(\n            modifier = Modifier.padding(horizontal = MaterialTheme.padding.small),\n            title = stringResource(MR.strings.pref_incognito_mode),\n            subtitle = stringResource(MR.strings.pref_incognito_mode_extension_summary),\n            icon = ImageVector.vectorResource(R.drawable.ic_glasses_24dp),\n            widget = {\n                Row(\n                    verticalAlignment = Alignment.CenterVertically,\n                ) {\n                    Switch(\n                        checked = extIncognitoMode,\n                        onCheckedChange = onExtIncognitoChange,\n                        modifier = Modifier.padding(start = TrailingWidgetBuffer),\n                    )\n                }\n            },\n        )\n\n        HorizontalDivider()\n    }\n}\n\n@Composable\nprivate fun InfoText(\n    primaryText: String,\n    secondaryText: String,\n    modifier: Modifier = Modifier,\n    primaryTextStyle: TextStyle = MaterialTheme.typography.bodyLarge,\n    onClick: (() -> Unit)? = null,\n) {\n    val clickableModifier = if (onClick != null) {\n        Modifier.clickable(interactionSource = null, indication = null, onClick = onClick)\n    } else {\n        Modifier\n    }\n\n    Column(\n        modifier = modifier.then(clickableModifier),\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.Center,\n    ) {\n        Text(\n            text = primaryText,\n            textAlign = TextAlign.Center,\n            style = primaryTextStyle,\n        )\n\n        Text(\n            text = secondaryText + if (onClick != null) \" ⓘ\" else \"\",\n            textAlign = TextAlign.Center,\n            style = MaterialTheme.typography.bodyMedium,\n            color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f),\n        )\n    }\n}\n\n@Composable\nprivate fun InfoDivider() {\n    VerticalDivider(\n        modifier = Modifier.height(20.dp),\n    )\n}\n\n@Composable\nprivate fun SourceSwitchPreference(\n    source: MangaExtensionSourceItem,\n    onClickSourcePreferences: (sourceId: Long) -> Unit,\n    onClickSource: (sourceId: Long) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val context = LocalContext.current\n\n    TextPreferenceWidget(\n        modifier = modifier,\n        title = if (source.labelAsName) {\n            source.source.toString()\n        } else {\n            LocaleHelper.getSourceDisplayName(source.source.lang, context)\n        },\n        widget = {\n            Row(\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                if (source.source is ConfigurableSource) {\n                    IconButton(onClick = { onClickSourcePreferences(source.source.id) }) {\n                        Icon(\n                            imageVector = Icons.Outlined.Settings,\n                            contentDescription = stringResource(MR.strings.label_settings),\n                            tint = MaterialTheme.colorScheme.onSurface,\n                        )\n                    }\n                }\n\n                Switch(\n                    checked = source.enabled,\n                    onCheckedChange = null,\n                    modifier = Modifier.padding(start = TrailingWidgetBuffer),\n                )\n            }\n        },\n        onPreferenceClick = { onClickSource(source.source.id) },\n    )\n}\n\n@Composable\nfun NsfwWarningDialog(\n    onClickConfirm: () -> Unit,\n) {\n    AlertDialog(\n        text = {\n            Text(text = stringResource(MR.strings.ext_nsfw_warning))\n        },\n        confirmButton = {\n            TextButton(onClick = onClickConfirm) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        onDismissRequest = onClickConfirm,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionFilterScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionFilterState\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun MangaExtensionFilterScreen(\n    navigateUp: () -> Unit,\n    state: MangaExtensionFilterState.Success,\n    onClickToggle: (String) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(MR.strings.label_extensions),\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { contentPadding ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.empty_screen,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n        ExtensionFilterContent(\n            contentPadding = contentPadding,\n            state = state,\n            onClickLang = onClickToggle,\n        )\n    }\n}\n\n@Composable\nprivate fun ExtensionFilterContent(\n    contentPadding: PaddingValues,\n    state: MangaExtensionFilterState.Success,\n    onClickLang: (String) -> Unit,\n) {\n    val context = LocalContext.current\n    LazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items(state.languages) { language ->\n            SwitchPreferenceWidget(\n                modifier = Modifier.animateItem(),\n                title = LocaleHelper.getSourceDisplayName(language, context),\n                checked = language in state.enabledLanguages,\n                onCheckedChanged = { onClickLang(language) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionsScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.animation.core.animateDpAsState\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\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.outlined.Close\nimport androidx.compose.material.icons.outlined.GetApp\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material.icons.outlined.VerifiedUser\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.browse.BaseBrowseItem\nimport eu.kanade.presentation.browse.manga.components.MangaExtensionIcon\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.presentation.entries.components.DotSeparatorNoSpaceText\nimport eu.kanade.presentation.more.settings.screen.browse.MangaExtensionReposScreen\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionUiModel\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionsScreenModel\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun MangaExtensionScreen(\n    state: MangaExtensionsScreenModel.State,\n    contentPadding: PaddingValues,\n    searchQuery: String?,\n    onLongClickItem: (MangaExtension) -> Unit,\n    onClickItemCancel: (MangaExtension) -> Unit,\n    onOpenWebView: (MangaExtension.Available) -> Unit,\n    onInstallExtension: (MangaExtension.Available) -> Unit,\n    onUninstallExtension: (MangaExtension) -> Unit,\n    onUpdateExtension: (MangaExtension.Installed) -> Unit,\n    onTrustExtension: (MangaExtension.Untrusted) -> Unit,\n    onOpenExtension: (MangaExtension.Installed) -> Unit,\n    onClickUpdateAll: () -> Unit,\n    onRefresh: () -> Unit,\n) {\n    val navigator = LocalNavigator.currentOrThrow\n\n    PullRefresh(\n        refreshing = state.isRefreshing,\n        onRefresh = onRefresh,\n        enabled = !state.isLoading,\n    ) {\n        when {\n            state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n            state.isEmpty -> {\n                val msg = if (!searchQuery.isNullOrEmpty()) {\n                    MR.strings.no_results_found\n                } else {\n                    MR.strings.empty_screen\n                }\n                EmptyScreen(\n                    stringRes = msg,\n                    modifier = Modifier.padding(contentPadding),\n                    actions = persistentListOf(\n                        EmptyScreenAction(\n                            stringRes = MR.strings.label_extension_repos,\n                            icon = Icons.Outlined.Settings,\n                            onClick = { navigator.push(MangaExtensionReposScreen()) },\n                        ),\n                    ),\n                )\n            }\n            else -> {\n                ExtensionContent(\n                    state = state,\n                    contentPadding = contentPadding,\n                    onLongClickItem = onLongClickItem,\n                    onClickItemCancel = onClickItemCancel,\n                    onOpenWebView = onOpenWebView,\n                    onInstallExtension = onInstallExtension,\n                    onUninstallExtension = onUninstallExtension,\n                    onUpdateExtension = onUpdateExtension,\n                    onTrustExtension = onTrustExtension,\n                    onOpenExtension = onOpenExtension,\n                    onClickUpdateAll = onClickUpdateAll,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ExtensionContent(\n    state: MangaExtensionsScreenModel.State,\n    contentPadding: PaddingValues,\n    onLongClickItem: (MangaExtension) -> Unit,\n    onOpenWebView: (MangaExtension.Available) -> Unit,\n    onClickItemCancel: (MangaExtension) -> Unit,\n    onInstallExtension: (MangaExtension.Available) -> Unit,\n    onUninstallExtension: (MangaExtension) -> Unit,\n    onUpdateExtension: (MangaExtension.Installed) -> Unit,\n    onTrustExtension: (MangaExtension.Untrusted) -> Unit,\n    onOpenExtension: (MangaExtension.Installed) -> Unit,\n    onClickUpdateAll: () -> Unit,\n) {\n    val context = LocalContext.current\n    var trustState by remember { mutableStateOf<MangaExtension.Untrusted?>(null) }\n    val installGranted = rememberRequestPackageInstallsPermissionState(initialValue = true)\n\n    FastScrollLazyColumn(\n        contentPadding = contentPadding + topSmallPaddingValues,\n    ) {\n        if (!installGranted && state.installer?.requiresSystemPermission == true) {\n            item(key = \"extension-permissions-warning\") {\n                WarningBanner(\n                    textRes = MR.strings.ext_permission_install_apps_warning,\n                    modifier = Modifier.clickable {\n                        context.launchRequestPackageInstallsPermission()\n                    },\n                )\n            }\n        }\n\n        state.items.forEach { (header, items) ->\n            item(\n                contentType = \"header\",\n                key = \"extensionHeader-${header.hashCode()}\",\n            ) {\n                when (header) {\n                    is MangaExtensionUiModel.Header.Resource -> {\n                        val action: @Composable RowScope.() -> Unit =\n                            if (header.textRes == MR.strings.ext_updates_pending) {\n                                {\n                                    Button(onClick = { onClickUpdateAll() }) {\n                                        Text(\n                                            text = stringResource(MR.strings.ext_update_all),\n                                            style = LocalTextStyle.current.copy(\n                                                color = MaterialTheme.colorScheme.onPrimary,\n                                            ),\n                                        )\n                                    }\n                                }\n                            } else {\n                                {}\n                            }\n                        ExtensionHeader(\n                            textRes = header.textRes,\n                            modifier = Modifier.animateItemFastScroll(),\n                            action = action,\n                        )\n                    }\n                    is MangaExtensionUiModel.Header.Text -> {\n                        ExtensionHeader(\n                            text = header.text,\n                            modifier = Modifier.animateItemFastScroll(),\n                        )\n                    }\n                }\n            }\n\n            items(\n                items = items,\n                contentType = { \"item\" },\n                key = { item ->\n                    when (item.extension) {\n                        is MangaExtension.Untrusted -> \"extension-untrusted-${item.hashCode()}\"\n                        is MangaExtension.Installed -> \"extension-installed-${item.hashCode()}\"\n                        is MangaExtension.Available -> \"extension-available-${item.hashCode()}\"\n                    }\n                },\n            ) { item ->\n                ExtensionItem(\n                    modifier = Modifier.animateItemFastScroll(),\n                    item = item,\n                    onClickItem = {\n                        when (it) {\n                            is MangaExtension.Available -> onInstallExtension(it)\n                            is MangaExtension.Installed -> onOpenExtension(it)\n                            is MangaExtension.Untrusted -> {\n                                trustState = it\n                            }\n                        }\n                    },\n                    onLongClickItem = onLongClickItem,\n                    onClickItemSecondaryAction = {\n                        when (it) {\n                            is MangaExtension.Available -> onOpenWebView(it)\n                            is MangaExtension.Installed -> onOpenExtension(it)\n                            else -> {}\n                        }\n                    },\n                    onClickItemCancel = onClickItemCancel,\n                    onClickItemAction = {\n                        when (it) {\n                            is MangaExtension.Available -> onInstallExtension(it)\n                            is MangaExtension.Installed -> {\n                                if (it.hasUpdate) {\n                                    onUpdateExtension(it)\n                                } else {\n                                    onOpenExtension(it)\n                                }\n                            }\n\n                            is MangaExtension.Untrusted -> {\n                                trustState = it\n                            }\n                        }\n                    },\n                )\n            }\n        }\n    }\n    if (trustState != null) {\n        ExtensionTrustDialog(\n            onClickConfirm = {\n                onTrustExtension(trustState!!)\n                trustState = null\n            },\n            onClickDismiss = {\n                onUninstallExtension(trustState!!)\n                trustState = null\n            },\n            onDismissRequest = {\n                trustState = null\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun ExtensionItem(\n    item: MangaExtensionUiModel.Item,\n    onClickItem: (MangaExtension) -> Unit,\n    onLongClickItem: (MangaExtension) -> Unit,\n    onClickItemCancel: (MangaExtension) -> Unit,\n    onClickItemAction: (MangaExtension) -> Unit,\n    onClickItemSecondaryAction: (MangaExtension) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val (extension, installStep) = item\n    BaseBrowseItem(\n        modifier = modifier\n            .combinedClickable(\n                onClick = { onClickItem(extension) },\n                onLongClick = { onLongClickItem(extension) },\n            ),\n        onClickItem = { onClickItem(extension) },\n        onLongClickItem = { onLongClickItem(extension) },\n        icon = {\n            Box(\n                modifier = Modifier\n                    .size(40.dp),\n                contentAlignment = Alignment.Center,\n            ) {\n                val idle = installStep.isCompleted()\n                if (!idle) {\n                    CircularProgressIndicator(\n                        modifier = Modifier.size(40.dp),\n                        strokeWidth = 2.dp,\n                    )\n                }\n\n                val padding by animateDpAsState(\n                    targetValue = if (idle) 0.dp else 8.dp,\n                    label = \"iconPadding\",\n                )\n                MangaExtensionIcon(\n                    extension = extension,\n                    modifier = Modifier\n                        .matchParentSize()\n                        .padding(padding),\n                )\n            }\n        },\n        action = {\n            ExtensionItemActions(\n                extension = extension,\n                installStep = installStep,\n                onClickItemCancel = onClickItemCancel,\n                onClickItemAction = onClickItemAction,\n                onClickItemSecondaryAction = onClickItemSecondaryAction,\n            )\n        },\n    ) {\n        ExtensionItemContent(\n            extension = extension,\n            installStep = installStep,\n            modifier = Modifier.weight(1f),\n        )\n    }\n}\n\n@Composable\nprivate fun ExtensionItemContent(\n    extension: MangaExtension,\n    installStep: InstallStep,\n    modifier: Modifier = Modifier,\n) {\n    Column(\n        modifier = modifier.padding(start = MaterialTheme.padding.medium),\n    ) {\n        Text(\n            text = extension.name,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        // Won't look good but it's not like we can ellipsize overflowing content\n        FlowRow(\n            modifier = Modifier.secondaryItemAlpha(),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n        ) {\n            ProvideTextStyle(value = MaterialTheme.typography.bodySmall) {\n                if (extension is MangaExtension.Installed && extension.lang.isNotEmpty()) {\n                    Text(\n                        text = LocaleHelper.getSourceDisplayName(\n                            extension.lang,\n                            LocalContext.current,\n                        ),\n                    )\n                }\n\n                if (extension.versionName.isNotEmpty()) {\n                    Text(\n                        text = extension.versionName,\n                    )\n                }\n\n                val warning = when {\n                    extension is MangaExtension.Untrusted -> MR.strings.ext_untrusted\n                    extension is MangaExtension.Installed && extension.isObsolete -> MR.strings.ext_obsolete\n                    extension.isNsfw -> MR.strings.ext_nsfw_short\n                    else -> null\n                }\n                if (warning != null) {\n                    Text(\n                        text = stringResource(warning).uppercase(),\n                        color = MaterialTheme.colorScheme.error,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                    )\n                }\n\n                if (!installStep.isCompleted()) {\n                    DotSeparatorNoSpaceText()\n                    Text(\n                        text = when (installStep) {\n                            InstallStep.Pending -> stringResource(MR.strings.ext_pending)\n                            InstallStep.Downloading -> stringResource(MR.strings.ext_downloading)\n                            InstallStep.Installing -> stringResource(MR.strings.ext_installing)\n                            else -> error(\"Must not show non-install process text\")\n                        },\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ExtensionItemActions(\n    extension: MangaExtension,\n    installStep: InstallStep,\n    modifier: Modifier = Modifier,\n    onClickItemCancel: (MangaExtension) -> Unit = {},\n    onClickItemAction: (MangaExtension) -> Unit = {},\n    onClickItemSecondaryAction: (MangaExtension) -> Unit = {},\n) {\n    val isIdle = installStep.isCompleted()\n\n    Row(\n        modifier = modifier,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        when {\n            !isIdle -> {\n                IconButton(onClick = { onClickItemCancel(extension) }) {\n                    Icon(\n                        imageVector = Icons.Outlined.Close,\n                        contentDescription = stringResource(MR.strings.action_cancel),\n                    )\n                }\n            }\n            installStep == InstallStep.Error -> {\n                IconButton(onClick = { onClickItemAction(extension) }) {\n                    Icon(\n                        imageVector = Icons.Outlined.Refresh,\n                        contentDescription = stringResource(MR.strings.action_retry),\n                    )\n                }\n            }\n            installStep == InstallStep.Idle -> {\n                when (extension) {\n                    is MangaExtension.Installed -> {\n                        IconButton(onClick = { onClickItemSecondaryAction(extension) }) {\n                            Icon(\n                                imageVector = Icons.Outlined.Settings,\n                                contentDescription = stringResource(MR.strings.action_settings),\n                            )\n                        }\n\n                        if (extension.hasUpdate) {\n                            IconButton(onClick = { onClickItemAction(extension) }) {\n                                Icon(\n                                    imageVector = Icons.Outlined.GetApp,\n                                    contentDescription = stringResource(MR.strings.ext_update),\n                                )\n                            }\n                        }\n                    }\n                    is MangaExtension.Untrusted -> {\n                        IconButton(onClick = { onClickItemAction(extension) }) {\n                            Icon(\n                                imageVector = Icons.Outlined.VerifiedUser,\n                                contentDescription = stringResource(MR.strings.ext_trust),\n                            )\n                        }\n                    }\n                    is MangaExtension.Available -> {\n                        if (extension.sources.isNotEmpty()) {\n                            IconButton(\n                                onClick = { onClickItemSecondaryAction(extension) },\n                            ) {\n                                Icon(\n                                    imageVector = Icons.Outlined.Public,\n                                    contentDescription = stringResource(MR.strings.action_open_in_web_view),\n                                )\n                            }\n                        }\n\n                        IconButton(onClick = { onClickItemAction(extension) }) {\n                            Icon(\n                                imageVector = Icons.Outlined.GetApp,\n                                contentDescription = stringResource(MR.strings.ext_install),\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun ExtensionHeader(\n    textRes: StringResource,\n    modifier: Modifier = Modifier,\n    action: @Composable RowScope.() -> Unit = {},\n) {\n    ExtensionHeader(\n        text = stringResource(textRes),\n        modifier = modifier,\n        action = action,\n    )\n}\n\n@Composable\nfun ExtensionHeader(\n    text: String,\n    modifier: Modifier = Modifier,\n    action: @Composable RowScope.() -> Unit = {},\n) {\n    Row(\n        modifier = modifier.padding(horizontal = MaterialTheme.padding.medium),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Text(\n            text = text,\n            modifier = Modifier\n                .padding(vertical = 8.dp)\n                .weight(1f),\n            style = MaterialTheme.typography.header,\n        )\n        action()\n    }\n}\n\n@Composable\nfun ExtensionTrustDialog(\n    onClickConfirm: () -> Unit,\n    onClickDismiss: () -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    AlertDialog(\n        title = {\n            Text(text = stringResource(MR.strings.untrusted_extension))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.untrusted_extension_message))\n        },\n        confirmButton = {\n            TextButton(onClick = onClickConfirm) {\n                Text(text = stringResource(MR.strings.ext_trust))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onClickDismiss) {\n                Text(text = stringResource(MR.strings.ext_uninstall))\n            }\n        },\n        onDismissRequest = onDismissRequest,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesFilterScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.browse.manga.components.BaseMangaSourceItem\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.tachiyomi.ui.browse.manga.source.MangaSourcesFilterScreenModel\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun MangaSourcesFilterScreen(\n    navigateUp: () -> Unit,\n    state: MangaSourcesFilterScreenModel.State.Success,\n    onClickLanguage: (String) -> Unit,\n    onClickSource: (Source) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(MR.strings.label_sources),\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { contentPadding ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.source_filter_empty_screen,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n        SourcesFilterContent(\n            contentPadding = contentPadding,\n            state = state,\n            onClickLanguage = onClickLanguage,\n            onClickSource = onClickSource,\n        )\n    }\n}\n\n@Composable\nprivate fun SourcesFilterContent(\n    contentPadding: PaddingValues,\n    state: MangaSourcesFilterScreenModel.State.Success,\n    onClickLanguage: (String) -> Unit,\n    onClickSource: (Source) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        state.items.forEach { (language, sources) ->\n            val enabled = language in state.enabledLanguages\n            item(\n                key = language,\n                contentType = \"source-filter-header\",\n            ) {\n                SourcesFilterHeader(\n                    modifier = Modifier.animateItemFastScroll(),\n                    language = language,\n                    enabled = enabled,\n                    onClickItem = onClickLanguage,\n                )\n            }\n            if (enabled) {\n                items(\n                    items = sources,\n                    key = { \"source-filter-${it.key()}\" },\n                    contentType = { \"source-filter-item\" },\n                ) { source ->\n                    SourcesFilterItem(\n                        modifier = Modifier.animateItemFastScroll(),\n                        source = source,\n                        enabled = \"${source.id}\" !in state.disabledSources,\n                        onClickItem = onClickSource,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SourcesFilterHeader(\n    language: String,\n    enabled: Boolean,\n    onClickItem: (String) -> Unit,\n    modifier: Modifier = Modifier,\n\n) {\n    SwitchPreferenceWidget(\n        modifier = modifier,\n        title = LocaleHelper.getSourceDisplayName(language, LocalContext.current),\n        checked = enabled,\n        onCheckedChanged = { onClickItem(language) },\n    )\n}\n\n@Composable\nprivate fun SourcesFilterItem(\n    source: Source,\n    enabled: Boolean,\n    onClickItem: (Source) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseMangaSourceItem(\n        modifier = modifier,\n        source = source,\n        showLanguageInContent = false,\n        onClickItem = { onClickItem(source) },\n        action = {\n            Checkbox(checked = enabled, onCheckedChange = null)\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.PushPin\nimport androidx.compose.material.icons.outlined.PushPin\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.browse.manga.components.BaseMangaSourceItem\nimport eu.kanade.tachiyomi.ui.browse.manga.source.MangaSourcesScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreenModel.Listing\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.source.manga.model.Pin\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\n@Composable\nfun MangaSourcesScreen(\n    state: MangaSourcesScreenModel.State,\n    contentPadding: PaddingValues,\n    onClickItem: (Source, Listing) -> Unit,\n    onClickPin: (Source) -> Unit,\n    onLongClickItem: (Source) -> Unit,\n) {\n    when {\n        state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n        state.isEmpty -> EmptyScreen(\n            stringRes = MR.strings.source_empty_screen,\n            modifier = Modifier.padding(contentPadding),\n        )\n        else -> {\n            ScrollbarLazyColumn(\n                contentPadding = contentPadding + topSmallPaddingValues,\n            ) {\n                items(\n                    items = state.items,\n                    contentType = {\n                        when (it) {\n                            is MangaSourceUiModel.Header -> \"header\"\n                            is MangaSourceUiModel.Item -> \"item\"\n                        }\n                    },\n                    key = {\n                        when (it) {\n                            is MangaSourceUiModel.Header -> it.hashCode()\n                            is MangaSourceUiModel.Item -> \"source-${it.source.key()}\"\n                        }\n                    },\n                ) { model ->\n                    when (model) {\n                        is MangaSourceUiModel.Header -> {\n                            SourceHeader(\n                                modifier = Modifier.animateItem(),\n                                language = model.language,\n                            )\n                        }\n                        is MangaSourceUiModel.Item -> SourceItem(\n                            modifier = Modifier.animateItem(),\n                            source = model.source,\n                            onClickItem = onClickItem,\n                            onLongClickItem = onLongClickItem,\n                            onClickPin = onClickPin,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SourceHeader(\n    language: String,\n    modifier: Modifier = Modifier,\n) {\n    val context = LocalContext.current\n    Text(\n        text = LocaleHelper.getSourceDisplayName(language, context),\n        modifier = modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        style = MaterialTheme.typography.header,\n    )\n}\n\n@Composable\nprivate fun SourceItem(\n    source: Source,\n    onClickItem: (Source, Listing) -> Unit,\n    onLongClickItem: (Source) -> Unit,\n    onClickPin: (Source) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseMangaSourceItem(\n        modifier = modifier,\n        source = source,\n        onClickItem = { onClickItem(source, Listing.Popular) },\n        onLongClickItem = { onLongClickItem(source) },\n        action = {\n            if (source.supportsLatest) {\n                TextButton(onClick = { onClickItem(source, Listing.Latest) }) {\n                    Text(\n                        text = stringResource(MR.strings.latest),\n                        style = LocalTextStyle.current.copy(\n                            color = MaterialTheme.colorScheme.primary,\n                        ),\n                    )\n                }\n            }\n            SourcePinButton(\n                isPinned = Pin.Pinned in source.pin,\n                onClick = { onClickPin(source) },\n            )\n        },\n    )\n}\n\n@Composable\nprivate fun SourcePinButton(\n    isPinned: Boolean,\n    onClick: () -> Unit,\n) {\n    val icon = if (isPinned) Icons.Filled.PushPin else Icons.Outlined.PushPin\n    val tint = if (isPinned) {\n        MaterialTheme.colorScheme.primary\n    } else {\n        MaterialTheme.colorScheme.onBackground.copy(\n            alpha = SECONDARY_ALPHA,\n        )\n    }\n    val description = if (isPinned) MR.strings.action_unpin else MR.strings.action_pin\n    IconButton(onClick = onClick) {\n        Icon(\n            imageVector = icon,\n            tint = tint,\n            contentDescription = stringResource(description),\n        )\n    }\n}\n\n@Composable\nfun MangaSourceOptionsDialog(\n    source: Source,\n    onClickPin: () -> Unit,\n    onClickDisable: () -> Unit,\n    // SY -->\n    onClickToggleDataSaver: (() -> Unit)?,\n    // SY <--\n    onDismiss: () -> Unit,\n) {\n    AlertDialog(\n        title = {\n            Text(text = source.visualName)\n        },\n        text = {\n            Column {\n                val textId = if (Pin.Pinned in source.pin) MR.strings.action_unpin else MR.strings.action_pin\n                Text(\n                    text = stringResource(textId),\n                    modifier = Modifier\n                        .clickable(onClick = onClickPin)\n                        .fillMaxWidth()\n                        .padding(vertical = 16.dp),\n                )\n                if (source.id != LocalMangaSource.ID) {\n                    Text(\n                        text = stringResource(MR.strings.action_disable),\n                        modifier = Modifier\n                            .clickable(onClick = onClickDisable)\n                            .fillMaxWidth()\n                            .padding(vertical = 16.dp),\n                    )\n                }\n                // SY -->\n                if (onClickToggleDataSaver != null) {\n                    Text(\n                        text = if (source.isExcludedFromDataSaver) {\n                            stringResource(AYMR.strings.data_saver_stop_exclude)\n                        } else {\n                            stringResource(AYMR.strings.data_saver_exclude)\n                        },\n                        modifier = Modifier\n                            .clickable(onClick = onClickToggleDataSaver)\n                            .fillMaxWidth()\n                            .padding(vertical = 16.dp),\n                    )\n                }\n                // SY <--\n            }\n        },\n        onDismissRequest = onDismiss,\n        confirmButton = {},\n    )\n}\n\nsealed interface MangaSourceUiModel {\n    data class Item(val source: Source) : MangaSourceUiModel\n    data class Header(val language: String) : MangaSourceUiModel\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.entries.manga.components.BaseMangaListItem\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.manga.MigrateMangaScreenModel\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun MigrateMangaScreen(\n    navigateUp: () -> Unit,\n    title: String?,\n    state: MigrateMangaScreenModel.State,\n    onClickItem: (Manga) -> Unit,\n    onClickCover: (Manga) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = title,\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { contentPadding ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.empty_screen,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n\n        MigrateMangaContent(\n            contentPadding = contentPadding,\n            state = state,\n            onClickItem = onClickItem,\n            onClickCover = onClickCover,\n        )\n    }\n}\n\n@Composable\nprivate fun MigrateMangaContent(\n    contentPadding: PaddingValues,\n    state: MigrateMangaScreenModel.State,\n    onClickItem: (Manga) -> Unit,\n    onClickCover: (Manga) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items(state.titles) { manga ->\n            MigrateMangaItem(\n                manga = manga,\n                onClickItem = onClickItem,\n                onClickCover = onClickCover,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MigrateMangaItem(\n    manga: Manga,\n    onClickItem: (Manga) -> Unit,\n    onClickCover: (Manga) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseMangaListItem(\n        modifier = modifier,\n        manga = manga,\n        onClickItem = { onClickItem(manga) },\n        onClickCover = { onClickCover(manga) },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaSearchScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport eu.kanade.presentation.browse.manga.components.GlobalMangaSearchToolbar\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSearchScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSourceFilter\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.presentation.core.components.material.Scaffold\n\n@Composable\nfun MigrateMangaSearchScreen(\n    state: MangaSearchScreenModel.State,\n    fromSourceId: Long?,\n    navigateUp: () -> Unit,\n    onChangeSearchQuery: (String?) -> Unit,\n    onSearch: (String) -> Unit,\n    onChangeSearchFilter: (MangaSourceFilter) -> Unit,\n    onToggleResults: () -> Unit,\n    getManga: @Composable (Manga) -> State<Manga>,\n    onClickSource: (CatalogueSource) -> Unit,\n    onClickItem: (Manga) -> Unit,\n    onLongClickItem: (Manga) -> Unit,\n) {\n    Scaffold(\n        topBar = { scrollBehavior ->\n            GlobalMangaSearchToolbar(\n                searchQuery = state.searchQuery,\n                progress = state.progress,\n                total = state.total,\n                navigateUp = navigateUp,\n                onChangeSearchQuery = onChangeSearchQuery,\n                onSearch = onSearch,\n                sourceFilter = state.sourceFilter,\n                onChangeSearchFilter = onChangeSearchFilter,\n                onlyShowHasResults = state.onlyShowHasResults,\n                onToggleResults = onToggleResults,\n                scrollBehavior = scrollBehavior,\n            )\n        },\n    ) { paddingValues ->\n        GlobalSearchContent(\n            fromSourceId = fromSourceId,\n            items = state.filteredItems,\n            contentPadding = paddingValues,\n            getManga = getManga,\n            onClickSource = onClickSource,\n            onClickItem = onClickItem,\n            onLongClickItem = onLongClickItem,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaSourceScreen.kt",
    "content": "package eu.kanade.presentation.browse.manga\n\nimport androidx.compose.foundation.background\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.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ArrowDownward\nimport androidx.compose.material.icons.outlined.ArrowUpward\nimport androidx.compose.material.icons.outlined.Numbers\nimport androidx.compose.material.icons.outlined.SortByAlpha\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.presentation.browse.manga.components.BaseMangaSourceItem\nimport eu.kanade.presentation.browse.manga.components.MangaSourceIcon\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.sources.MigrateMangaSourceScreenModel\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.Badge\nimport tachiyomi.presentation.core.components.BadgeGroup\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun MigrateMangaSourceScreen(\n    state: MigrateMangaSourceScreenModel.State,\n    contentPadding: PaddingValues,\n    onClickItem: (Source) -> Unit,\n    onToggleSortingDirection: () -> Unit,\n    onToggleSortingMode: () -> Unit,\n) {\n    val context = LocalContext.current\n    when {\n        state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n        state.isEmpty -> EmptyScreen(\n            stringRes = MR.strings.information_empty_library,\n            modifier = Modifier.padding(contentPadding),\n        )\n        else ->\n            MigrateSourceList(\n                list = state.items,\n                contentPadding = contentPadding,\n                onClickItem = onClickItem,\n                onLongClickItem = { source ->\n                    val sourceId = source.id.toString()\n                    context.copyToClipboard(sourceId, sourceId)\n                },\n                sortingMode = state.sortingMode,\n                onToggleSortingMode = onToggleSortingMode,\n                sortingDirection = state.sortingDirection,\n                onToggleSortingDirection = onToggleSortingDirection,\n            )\n    }\n}\n\n@Composable\nprivate fun MigrateSourceList(\n    list: ImmutableList<Pair<Source, Long>>,\n    contentPadding: PaddingValues,\n    onClickItem: (Source) -> Unit,\n    onLongClickItem: (Source) -> Unit,\n    sortingMode: SetMigrateSorting.Mode,\n    onToggleSortingMode: () -> Unit,\n    sortingDirection: SetMigrateSorting.Direction,\n    onToggleSortingDirection: () -> Unit,\n) {\n    ScrollbarLazyColumn(\n        contentPadding = contentPadding + topSmallPaddingValues,\n    ) {\n        stickyHeader(key = STICKY_HEADER_KEY_PREFIX) {\n            Row(\n                modifier = Modifier\n                    .background(MaterialTheme.colorScheme.background)\n                    .padding(start = MaterialTheme.padding.medium),\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                Text(\n                    text = stringResource(MR.strings.migration_selection_prompt),\n                    modifier = Modifier.weight(1f),\n                    style = MaterialTheme.typography.header,\n                )\n\n                IconButton(onClick = onToggleSortingMode) {\n                    when (sortingMode) {\n                        SetMigrateSorting.Mode.ALPHABETICAL -> Icon(\n                            Icons.Outlined.SortByAlpha,\n                            contentDescription = stringResource(MR.strings.action_sort_alpha),\n                        )\n                        SetMigrateSorting.Mode.TOTAL -> Icon(\n                            Icons.Outlined.Numbers,\n                            contentDescription = stringResource(MR.strings.action_sort_count),\n                        )\n                    }\n                }\n                IconButton(onClick = onToggleSortingDirection) {\n                    when (sortingDirection) {\n                        SetMigrateSorting.Direction.ASCENDING -> Icon(\n                            Icons.Outlined.ArrowUpward,\n                            contentDescription = stringResource(MR.strings.action_asc),\n                        )\n                        SetMigrateSorting.Direction.DESCENDING -> Icon(\n                            Icons.Outlined.ArrowDownward,\n                            contentDescription = stringResource(MR.strings.action_desc),\n                        )\n                    }\n                }\n            }\n        }\n\n        items(\n            items = list,\n            key = { (source, _) -> \"migrate-${source.id}\" },\n        ) { (source, count) ->\n            MigrateSourceItem(\n                modifier = Modifier.animateItem(),\n                source = source,\n                count = count,\n                onClickItem = { onClickItem(source) },\n                onLongClickItem = { onLongClickItem(source) },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MigrateSourceItem(\n    source: Source,\n    count: Long,\n    onClickItem: () -> Unit,\n    onLongClickItem: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BaseMangaSourceItem(\n        modifier = modifier,\n        source = source,\n        showLanguageInContent = source.lang != \"\",\n        onClickItem = onClickItem,\n        onLongClickItem = onLongClickItem,\n        icon = { MangaSourceIcon(source = source) },\n        action = {\n            BadgeGroup {\n                Badge(text = \"$count\")\n            }\n        },\n        content = { _, sourceLangString ->\n            Column(\n                modifier = Modifier\n                    .padding(horizontal = MaterialTheme.padding.medium)\n                    .weight(1f),\n            ) {\n                Text(\n                    text = source.name.ifBlank { source.id.toString() },\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n                Row(\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                    verticalAlignment = Alignment.CenterVertically,\n                ) {\n                    if (sourceLangString != null) {\n                        Text(\n                            modifier = Modifier.secondaryItemAlpha(),\n                            text = sourceLangString,\n                            maxLines = 1,\n                            overflow = TextOverflow.Ellipsis,\n                            style = MaterialTheme.typography.bodySmall,\n                        )\n                    }\n                    if (source.isStub) {\n                        Text(\n                            modifier = Modifier.secondaryItemAlpha(),\n                            text = stringResource(MR.strings.not_installed),\n                            maxLines = 1,\n                            overflow = TextOverflow.Ellipsis,\n                            style = MaterialTheme.typography.bodySmall,\n                            color = MaterialTheme.colorScheme.error,\n                        )\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/BaseMangaSourceItem.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.RowScope\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport eu.kanade.presentation.browse.BaseBrowseItem\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun BaseMangaSourceItem(\n    source: Source,\n    modifier: Modifier = Modifier,\n    showLanguageInContent: Boolean = true,\n    onClickItem: () -> Unit = {},\n    onLongClickItem: () -> Unit = {},\n    icon: @Composable RowScope.(Source) -> Unit = defaultIcon,\n    action: @Composable RowScope.(Source) -> Unit = {},\n    content: @Composable RowScope.(Source, String?) -> Unit = defaultContent,\n) {\n    val sourceLangString = LocaleHelper.getSourceDisplayName(source.lang, LocalContext.current).takeIf {\n        showLanguageInContent\n    }\n    BaseBrowseItem(\n        modifier = modifier,\n        onClickItem = onClickItem,\n        onLongClickItem = onLongClickItem,\n        icon = { icon.invoke(this, source) },\n        action = { action.invoke(this, source) },\n        content = { content.invoke(this, source, sourceLangString) },\n    )\n}\n\nprivate val defaultIcon: @Composable RowScope.(Source) -> Unit = { source ->\n    MangaSourceIcon(source = source)\n}\n\nprivate val defaultContent: @Composable RowScope.(Source, String?) -> Unit = { source, sourceLangString ->\n    Column(\n        modifier = Modifier\n            .padding(horizontal = MaterialTheme.padding.medium)\n            .weight(1f),\n    ) {\n        Text(\n            text = source.name,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        if (sourceLangString != null) {\n            Text(\n                modifier = Modifier.secondaryItemAlpha(),\n                text = sourceLangString,\n                maxLines = 1,\n                overflow = TextOverflow.Ellipsis,\n                style = MaterialTheme.typography.bodySmall,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaIcons.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport android.util.DisplayMetrics\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.aspectRatio\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Dangerous\nimport androidx.compose.material.icons.filled.Warning\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.produceState\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.ColorFilter\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.graphics.painter.ColorPainter\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.imageResource\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport androidx.core.graphics.drawable.toBitmap\nimport coil3.compose.AsyncImage\nimport eu.kanade.domain.source.manga.model.icon\nimport eu.kanade.presentation.util.rememberResourceBitmapPainter\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionLoader\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\nprivate val defaultModifier = Modifier\n    .height(40.dp)\n    .aspectRatio(1f)\n\n@Composable\nfun MangaSourceIcon(\n    source: Source,\n    modifier: Modifier = Modifier,\n) {\n    val icon = source.icon\n\n    when {\n        source.isStub && icon == null -> {\n            Image(\n                imageVector = Icons.Filled.Warning,\n                contentDescription = null,\n                colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.error),\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n        icon != null -> {\n            Image(\n                bitmap = icon,\n                contentDescription = null,\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n        source.id == LocalMangaSource.ID -> {\n            Image(\n                painter = painterResource(R.mipmap.ic_local_source),\n                contentDescription = null,\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n        else -> {\n            Image(\n                painter = painterResource(R.mipmap.ic_default_source),\n                contentDescription = null,\n                modifier = modifier.then(defaultModifier),\n            )\n        }\n    }\n}\n\n@Composable\nfun MangaExtensionIcon(\n    extension: MangaExtension,\n    modifier: Modifier = Modifier,\n    density: Int = DisplayMetrics.DENSITY_DEFAULT,\n) {\n    when (extension) {\n        is MangaExtension.Available -> {\n            AsyncImage(\n                model = extension.iconUrl,\n                contentDescription = null,\n                placeholder = ColorPainter(Color(0x1F888888)),\n                error = rememberResourceBitmapPainter(id = R.drawable.cover_error),\n                modifier = modifier\n                    .clip(MaterialTheme.shapes.extraSmall),\n            )\n        }\n        is MangaExtension.Installed -> {\n            val icon by extension.getIcon(density)\n            when (icon) {\n                Result.Loading -> Box(modifier = modifier)\n                is Result.Success -> Image(\n                    bitmap = (icon as Result.Success<ImageBitmap>).value,\n                    contentDescription = null,\n                    modifier = modifier,\n                )\n                Result.Error -> Image(\n                    bitmap = ImageBitmap.imageResource(id = R.mipmap.ic_default_source),\n                    contentDescription = null,\n                    modifier = modifier,\n                )\n            }\n        }\n        is MangaExtension.Untrusted -> Image(\n            imageVector = Icons.Filled.Dangerous,\n            contentDescription = null,\n            colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.error),\n            modifier = modifier.then(defaultModifier),\n        )\n    }\n}\n\n@Composable\nprivate fun MangaExtension.getIcon(density: Int = DisplayMetrics.DENSITY_DEFAULT): State<Result<ImageBitmap>> {\n    val context = LocalContext.current\n    return produceState<Result<ImageBitmap>>(initialValue = Result.Loading, this) {\n        withIOContext {\n            value = try {\n                val appInfo = MangaExtensionLoader.getMangaExtensionPackageInfoFromPkgName(\n                    context,\n                    pkgName,\n                )!!.applicationInfo!!\n                val appResources = context.packageManager.getResourcesForApplication(appInfo)\n                Result.Success(\n                    appResources.getDrawableForDensity(appInfo.icon, density, null)!!\n                        .toBitmap()\n                        .asImageBitmap(),\n                )\n            } catch (e: Exception) {\n                Result.Error\n            }\n        }\n    }\n}\n\nsealed class Result<out T> {\n    data object Loading : Result<Nothing>()\n    data object Error : Result<Nothing>()\n    data class Success<out T>(val value: T) : Result<T>()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceComfortableGrid.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.GridItemSpan\nimport androidx.compose.foundation.lazy.grid.LazyVerticalGrid\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.BrowseSourceLoadingItem\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun BrowseMangaSourceComfortableGrid(\n    mangaList: LazyPagingItems<StateFlow<Manga>>,\n    columns: GridCells,\n    contentPadding: PaddingValues,\n    onMangaClick: (Manga) -> Unit,\n    onMangaLongClick: (Manga) -> Unit,\n) {\n    LazyVerticalGrid(\n        columns = columns,\n        contentPadding = contentPadding + PaddingValues(8.dp),\n        verticalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridVerticalSpacer),\n        horizontalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridHorizontalSpacer),\n    ) {\n        if (mangaList.loadState.prepend is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n\n        items(count = mangaList.itemCount) { index ->\n            val manga by mangaList[index]?.collectAsState() ?: return@items\n            BrowseMangaSourceComfortableGridItem(\n                manga = manga,\n                onClick = { onMangaClick(manga) },\n                onLongClick = { onMangaLongClick(manga) },\n            )\n        }\n\n        if (mangaList.loadState.refresh is LoadState.Loading || mangaList.loadState.append is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BrowseMangaSourceComfortableGridItem(\n    manga: Manga,\n    onClick: () -> Unit = {},\n    onLongClick: () -> Unit = onClick,\n) {\n    EntryComfortableGridItem(\n        title = manga.title,\n        coverData = MangaCover(\n            mangaId = manga.id,\n            sourceId = manga.source,\n            isMangaFavorite = manga.favorite,\n            url = manga.thumbnailUrl,\n            lastModified = manga.coverLastModified,\n        ),\n        coverAlpha = if (manga.favorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n        coverBadgeStart = {\n            InLibraryBadge(enabled = manga.favorite)\n        },\n        onLongClick = onLongClick,\n        onClick = onClick,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceCompactGrid.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.GridItemSpan\nimport androidx.compose.foundation.lazy.grid.LazyVerticalGrid\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.BrowseSourceLoadingItem\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryCompactGridItem\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun BrowseMangaSourceCompactGrid(\n    mangaList: LazyPagingItems<StateFlow<Manga>>,\n    columns: GridCells,\n    contentPadding: PaddingValues,\n    onMangaClick: (Manga) -> Unit,\n    onMangaLongClick: (Manga) -> Unit,\n) {\n    LazyVerticalGrid(\n        columns = columns,\n        contentPadding = contentPadding + PaddingValues(8.dp),\n        verticalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridVerticalSpacer),\n        horizontalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridHorizontalSpacer),\n    ) {\n        if (mangaList.loadState.prepend is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n\n        items(count = mangaList.itemCount) { index ->\n            val manga by mangaList[index]?.collectAsState() ?: return@items\n            BrowseMangaSourceCompactGridItem(\n                manga = manga,\n                onClick = { onMangaClick(manga) },\n                onLongClick = { onMangaLongClick(manga) },\n            )\n        }\n\n        if (mangaList.loadState.refresh is LoadState.Loading || mangaList.loadState.append is LoadState.Loading) {\n            item(span = { GridItemSpan(maxLineSpan) }) {\n                BrowseSourceLoadingItem()\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BrowseMangaSourceCompactGridItem(\n    manga: Manga,\n    onClick: () -> Unit = {},\n    onLongClick: () -> Unit = onClick,\n) {\n    EntryCompactGridItem(\n        title = manga.title,\n        coverData = MangaCover(\n            mangaId = manga.id,\n            sourceId = manga.source,\n            isMangaFavorite = manga.favorite,\n            url = manga.thumbnailUrl,\n            lastModified = manga.coverLastModified,\n        ),\n        coverAlpha = if (manga.favorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n        coverBadgeStart = {\n            InLibraryBadge(enabled = manga.favorite)\n        },\n        onLongClick = onLongClick,\n        onClick = onClick,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceList.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.LoadState\nimport androidx.paging.compose.LazyPagingItems\nimport eu.kanade.presentation.browse.BrowseSourceLoadingItem\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryListItem\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun BrowseMangaSourceList(\n    mangaList: LazyPagingItems<StateFlow<Manga>>,\n    entries: Int,\n    topBarHeight: Int,\n    contentPadding: PaddingValues,\n    onMangaClick: (Manga) -> Unit,\n    onMangaLongClick: (Manga) -> Unit,\n) {\n    val sourceListState = rememberLazyListState()\n    BoxWithConstraints {\n        val density = LocalDensity.current\n        val containerHeightPx = with(density) { this@BoxWithConstraints.maxHeight.roundToPx() }\n\n        LazyColumn(\n            state = sourceListState,\n            contentPadding = contentPadding + PaddingValues(vertical = 8.dp),\n        ) {\n            item {\n                if (mangaList.loadState.prepend is LoadState.Loading) {\n                    BrowseSourceLoadingItem()\n                }\n            }\n\n            items(count = mangaList.itemCount) { index ->\n                val manga by mangaList[index]?.collectAsState() ?: return@items\n                BrowseMangaSourceListItem(\n                    manga = manga,\n                    onClick = { onMangaClick(manga) },\n                    onLongClick = { onMangaLongClick(manga) },\n                    entries = entries,\n                    containerHeight = containerHeightPx - topBarHeight,\n                )\n            }\n\n            item {\n                if (mangaList.loadState.refresh is LoadState.Loading ||\n                    mangaList.loadState.append is LoadState.Loading\n                ) {\n                    BrowseSourceLoadingItem()\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BrowseMangaSourceListItem(\n    manga: Manga,\n    onClick: () -> Unit = {},\n    onLongClick: () -> Unit = onClick,\n    entries: Int,\n    containerHeight: Int,\n) {\n    EntryListItem(\n        title = manga.title,\n        coverData = MangaCover(\n            mangaId = manga.id,\n            sourceId = manga.source,\n            isMangaFavorite = manga.favorite,\n            url = manga.thumbnailUrl,\n            lastModified = manga.coverLastModified,\n        ),\n        coverAlpha = if (manga.favorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n        badge = {\n            InLibraryBadge(enabled = manga.favorite)\n        },\n        onLongClick = onLongClick,\n        onClick = onClick,\n        entries = entries,\n        containerHeight = containerHeight,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceToolbar.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ViewList\nimport androidx.compose.material.icons.filled.ViewModule\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.AppBarTitle\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.components.RadioMenuItem\nimport eu.kanade.presentation.components.SearchToolbar\nimport eu.kanade.tachiyomi.source.ConfigurableSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\n@Composable\nfun BrowseMangaSourceToolbar(\n    searchQuery: String?,\n    onSearchQueryChange: (String?) -> Unit,\n    source: MangaSource?,\n    displayMode: LibraryDisplayMode,\n    onDisplayModeChange: (LibraryDisplayMode) -> Unit,\n    navigateUp: () -> Unit,\n    onWebViewClick: () -> Unit,\n    onHelpClick: () -> Unit,\n    onSettingsClick: () -> Unit,\n    onSearch: (String) -> Unit,\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n) {\n    // Avoid capturing unstable source in actions lambda\n    val title = source?.name\n    val isLocalSource = source is LocalMangaSource\n    val isConfigurableSource = source is ConfigurableSource\n\n    var selectingDisplayMode by remember { mutableStateOf(false) }\n\n    SearchToolbar(\n        navigateUp = navigateUp,\n        titleContent = { AppBarTitle(title) },\n        searchQuery = searchQuery,\n        onChangeSearchQuery = onSearchQueryChange,\n        onSearch = onSearch,\n        onClickCloseSearch = navigateUp,\n        actions = {\n            AppBarActions(\n                actions = persistentListOf<AppBar.AppBarAction>().builder()\n                    .apply {\n                        add(\n                            AppBar.Action(\n                                title = stringResource(MR.strings.action_display_mode),\n                                icon = if (displayMode == LibraryDisplayMode.List) {\n                                    Icons.AutoMirrored.Filled.ViewList\n                                } else {\n                                    Icons.Filled.ViewModule\n                                },\n                                onClick = { selectingDisplayMode = true },\n                            ),\n                        )\n                        if (isLocalSource) {\n                            add(\n                                AppBar.OverflowAction(\n                                    title = stringResource(MR.strings.label_help),\n                                    onClick = onHelpClick,\n                                ),\n                            )\n                        } else {\n                            add(\n                                AppBar.OverflowAction(\n                                    title = stringResource(MR.strings.action_open_in_web_view),\n                                    onClick = onWebViewClick,\n                                ),\n                            )\n                        }\n                        if (isConfigurableSource) {\n                            add(\n                                AppBar.OverflowAction(\n                                    title = stringResource(MR.strings.action_settings),\n                                    onClick = onSettingsClick,\n                                ),\n                            )\n                        }\n                    }\n                    .build(),\n            )\n\n            DropdownMenu(\n                expanded = selectingDisplayMode,\n                onDismissRequest = { selectingDisplayMode = false },\n            ) {\n                RadioMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_display_comfortable_grid)) },\n                    isChecked = displayMode == LibraryDisplayMode.ComfortableGrid,\n                ) {\n                    selectingDisplayMode = false\n                    onDisplayModeChange(LibraryDisplayMode.ComfortableGrid)\n                }\n                RadioMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_display_grid)) },\n                    isChecked = displayMode == LibraryDisplayMode.CompactGrid,\n                ) {\n                    selectingDisplayMode = false\n                    onDisplayModeChange(LibraryDisplayMode.CompactGrid)\n                }\n                RadioMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_display_list)) },\n                    isChecked = displayMode == LibraryDisplayMode.List,\n                ) {\n                    selectingDisplayMode = false\n                    onDisplayModeChange(LibraryDisplayMode.List)\n                }\n            }\n        },\n        scrollBehavior = scrollBehavior,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchCardRow.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.browse.InLibraryBadge\nimport eu.kanade.presentation.library.components.CommonEntryItemDefaults\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.entries.manga.model.asMangaCover\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun GlobalMangaSearchCardRow(\n    titles: List<Manga>,\n    getManga: @Composable (Manga) -> State<Manga>,\n    onClick: (Manga) -> Unit,\n    onLongClick: (Manga) -> Unit,\n) {\n    if (titles.isEmpty()) {\n        EmptyResultItem()\n        return\n    }\n\n    LazyRow(\n        contentPadding = PaddingValues(MaterialTheme.padding.small),\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        items(titles) {\n            val title by getManga(it)\n            MangaItem(\n                title = title.title,\n                cover = title.asMangaCover(),\n                isFavorite = title.favorite,\n                onClick = { onClick(title) },\n                onLongClick = { onLongClick(title) },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MangaItem(\n    title: String,\n    cover: MangaCover,\n    isFavorite: Boolean,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n) {\n    Box(modifier = Modifier.width(96.dp)) {\n        EntryComfortableGridItem(\n            title = title,\n            titleMaxLines = 3,\n            coverData = cover,\n            coverBadgeStart = {\n                InLibraryBadge(enabled = isFavorite)\n            },\n            coverAlpha = if (isFavorite) CommonEntryItemDefaults.BrowseFavoriteCoverAlpha else 1f,\n            onClick = onClick,\n            onLongClick = onLongClick,\n        )\n    }\n}\n\n@Composable\nprivate fun EmptyResultItem() {\n    Text(\n        text = stringResource(MR.strings.no_results_found),\n        modifier = Modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchToolbar.kt",
    "content": "package eu.kanade.presentation.browse.manga.components\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.horizontalScroll\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.fillMaxWidth\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.outlined.DoneAll\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.PushPin\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.FilterChipDefaults\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LinearProgressIndicator\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.material3.VerticalDivider\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.components.SearchToolbar\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSourceFilter\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun GlobalMangaSearchToolbar(\n    searchQuery: String?,\n    progress: Int,\n    total: Int,\n    navigateUp: () -> Unit,\n    onChangeSearchQuery: (String?) -> Unit,\n    onSearch: (String) -> Unit,\n    sourceFilter: MangaSourceFilter,\n    onChangeSearchFilter: (MangaSourceFilter) -> Unit,\n    onlyShowHasResults: Boolean,\n    onToggleResults: () -> Unit,\n    scrollBehavior: TopAppBarScrollBehavior,\n) {\n    Column(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) {\n        Box {\n            SearchToolbar(\n                searchQuery = searchQuery,\n                onChangeSearchQuery = onChangeSearchQuery,\n                onSearch = onSearch,\n                onClickCloseSearch = navigateUp,\n                navigateUp = navigateUp,\n                scrollBehavior = scrollBehavior,\n            )\n            if (progress in 1..<total) {\n                LinearProgressIndicator(\n                    progress = progress / total.toFloat(),\n                    modifier = Modifier\n                        .align(Alignment.BottomStart)\n                        .fillMaxWidth(),\n                )\n            }\n        }\n\n        Row(\n            modifier = Modifier\n                .horizontalScroll(rememberScrollState())\n                .padding(horizontal = MaterialTheme.padding.small),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            // TODO: make this UX better; it only applies when triggering a new search\n            FilterChip(\n                selected = sourceFilter == MangaSourceFilter.PinnedOnly,\n                onClick = { onChangeSearchFilter(MangaSourceFilter.PinnedOnly) },\n                leadingIcon = {\n                    Icon(\n                        imageVector = Icons.Outlined.PushPin,\n                        contentDescription = null,\n                        modifier = Modifier\n                            .size(FilterChipDefaults.IconSize),\n                    )\n                },\n                label = {\n                    Text(text = stringResource(MR.strings.pinned_sources))\n                },\n            )\n            FilterChip(\n                selected = sourceFilter == MangaSourceFilter.All,\n                onClick = { onChangeSearchFilter(MangaSourceFilter.All) },\n                leadingIcon = {\n                    Icon(\n                        imageVector = Icons.Outlined.DoneAll,\n                        contentDescription = null,\n                        modifier = Modifier\n                            .size(FilterChipDefaults.IconSize),\n                    )\n                },\n                label = {\n                    Text(text = stringResource(MR.strings.all))\n                },\n            )\n\n            VerticalDivider()\n\n            FilterChip(\n                selected = onlyShowHasResults,\n                onClick = { onToggleResults() },\n                leadingIcon = {\n                    Icon(\n                        imageVector = Icons.Outlined.FilterList,\n                        contentDescription = null,\n                        modifier = Modifier\n                            .size(FilterChipDefaults.IconSize),\n                    )\n                },\n                label = {\n                    Text(text = stringResource(MR.strings.has_results))\n                },\n            )\n        }\n\n        HorizontalDivider()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/category/AnimeCategoryScreen.kt",
    "content": "package eu.kanade.presentation.category\n\nimport androidx.compose.foundation.layout.Arrangement\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.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.category.components.CategoryFloatingActionButton\nimport eu.kanade.presentation.category.components.CategoryListItem\nimport eu.kanade.tachiyomi.ui.category.anime.AnimeCategoryScreenState\nimport sh.calvin.reorderable.ReorderableItem\nimport sh.calvin.reorderable.rememberReorderableLazyListState\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun AnimeCategoryScreen(\n    state: AnimeCategoryScreenState.Success,\n    onClickCreate: () -> Unit,\n    onClickRename: (Category) -> Unit,\n    onClickHide: (Category) -> Unit,\n    onClickDelete: (Category) -> Unit,\n    onChangeOrder: (Category, Int) -> Unit,\n) {\n    val lazyListState = rememberLazyListState()\n    Scaffold(\n        floatingActionButton = {\n            CategoryFloatingActionButton(\n                lazyListState = lazyListState,\n                onCreate = onClickCreate,\n            )\n        },\n    ) { paddingValues ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.information_empty_category,\n                modifier = Modifier.padding(paddingValues),\n            )\n            return@Scaffold\n        }\n\n        CategoryContent(\n            categories = state.categories,\n            lazyListState = lazyListState,\n            paddingValues = paddingValues,\n            onClickRename = onClickRename,\n            onClickHide = onClickHide,\n            onClickDelete = onClickDelete,\n            onChangeOrder = onChangeOrder,\n        )\n    }\n}\n\n@Composable\nprivate fun CategoryContent(\n    categories: List<Category>,\n    lazyListState: LazyListState,\n    paddingValues: PaddingValues,\n    onClickRename: (Category) -> Unit,\n    onClickHide: (Category) -> Unit,\n    onClickDelete: (Category) -> Unit,\n    onChangeOrder: (Category, Int) -> Unit,\n) {\n    val categoriesState = remember { categories.toMutableStateList() }\n    val reorderableState = rememberReorderableLazyListState(lazyListState, paddingValues) { from, to ->\n        val item = categoriesState.removeAt(from.index)\n        categoriesState.add(to.index, item)\n        onChangeOrder(item, to.index)\n    }\n\n    LaunchedEffect(categories) {\n        if (!reorderableState.isAnyItemDragging) {\n            categoriesState.clear()\n            categoriesState.addAll(categories)\n        }\n    }\n\n    LazyColumn(\n        modifier = Modifier.fillMaxSize(),\n        state = lazyListState,\n        contentPadding = PaddingValues(MaterialTheme.padding.medium),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        items(\n            items = categoriesState,\n            key = { category -> category.key },\n        ) { category ->\n            ReorderableItem(reorderableState, category.key) {\n                CategoryListItem(\n                    modifier = Modifier.animateItem(),\n                    category = category,\n                    onRename = { onClickRename(category) },\n                    onHide = { onClickHide(category) },\n                    onDelete = { onClickDelete(category) },\n                )\n            }\n        }\n    }\n}\n\nprivate val Category.key inline get() = \"category-$id\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt",
    "content": "package eu.kanade.presentation.category\n\nimport android.content.Context\nimport androidx.compose.runtime.Composable\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\nval Category.visualName: String\n    @Composable\n    get() = when {\n        isSystemCategory -> stringResource(MR.strings.label_default)\n        else -> name\n    }\n\nfun Category.visualName(context: Context): String =\n    when {\n        isSystemCategory -> context.stringResource(MR.strings.label_default)\n        else -> name\n    }\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/category/MangaCategoryScreen.kt",
    "content": "package eu.kanade.presentation.category\n\nimport androidx.compose.foundation.layout.Arrangement\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.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.category.components.CategoryFloatingActionButton\nimport eu.kanade.presentation.category.components.CategoryListItem\nimport eu.kanade.tachiyomi.ui.category.manga.MangaCategoryScreenState\nimport sh.calvin.reorderable.ReorderableItem\nimport sh.calvin.reorderable.rememberReorderableLazyListState\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.screens.EmptyScreen\n\n@Composable\nfun MangaCategoryScreen(\n    state: MangaCategoryScreenState.Success,\n    onClickCreate: () -> Unit,\n    onClickRename: (Category) -> Unit,\n    onClickHide: (Category) -> Unit,\n    onClickDelete: (Category) -> Unit,\n    onChangeOrder: (Category, Int) -> Unit,\n) {\n    val lazyListState = rememberLazyListState()\n    Scaffold(\n        floatingActionButton = {\n            CategoryFloatingActionButton(\n                lazyListState = lazyListState,\n                onCreate = onClickCreate,\n            )\n        },\n    ) { paddingValues ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = MR.strings.information_empty_category,\n                modifier = Modifier.padding(paddingValues),\n            )\n            return@Scaffold\n        }\n\n        CategoryContent(\n            categories = state.categories,\n            lazyListState = lazyListState,\n            paddingValues = paddingValues,\n            onClickRename = onClickRename,\n            onClickHide = onClickHide,\n            onClickDelete = onClickDelete,\n            onChangeOrder = onChangeOrder,\n        )\n    }\n}\n\n@Composable\nprivate fun CategoryContent(\n    categories: List<Category>,\n    lazyListState: LazyListState,\n    paddingValues: PaddingValues,\n    onClickRename: (Category) -> Unit,\n    onClickHide: (Category) -> Unit,\n    onClickDelete: (Category) -> Unit,\n    onChangeOrder: (Category, Int) -> Unit,\n) {\n    val categoriesState = remember { categories.toMutableStateList() }\n    val reorderableState = rememberReorderableLazyListState(lazyListState, paddingValues) { from, to ->\n        val item = categoriesState.removeAt(from.index)\n        categoriesState.add(to.index, item)\n        onChangeOrder(item, to.index)\n    }\n\n    LaunchedEffect(categories) {\n        if (!reorderableState.isAnyItemDragging) {\n            categoriesState.clear()\n            categoriesState.addAll(categories)\n        }\n    }\n\n    LazyColumn(\n        modifier = Modifier.fillMaxSize(),\n        state = lazyListState,\n        contentPadding = PaddingValues(MaterialTheme.padding.medium),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        items(\n            items = categoriesState,\n            key = { category -> category.key },\n        ) { category ->\n            ReorderableItem(reorderableState, category.key) {\n                CategoryListItem(\n                    modifier = Modifier.animateItem(),\n                    category = category,\n                    onRename = { onClickRename(category) },\n                    onHide = { onClickHide(category) },\n                    onDelete = { onClickDelete(category) },\n                )\n            }\n        }\n    }\n}\n\nprivate val Category.key inline get() = \"category-$id\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt",
    "content": "package eu.kanade.presentation.category.components\n\nimport androidx.compose.foundation.clickable\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.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TriStateCheckbox\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.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport eu.kanade.core.preference.asToggleableState\nimport eu.kanade.presentation.category.visualName\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.delay\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun CategoryCreateDialog(\n    onDismissRequest: () -> Unit,\n    onCreate: (String) -> Unit,\n    categories: ImmutableList<String>,\n) {\n    var name by remember { mutableStateOf(\"\") }\n\n    val focusRequester = remember { FocusRequester() }\n    val nameAlreadyExists = remember(name) { categories.contains(name) }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                enabled = name.isNotEmpty() && !nameAlreadyExists,\n                onClick = {\n                    onCreate(name)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_add))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_add_category))\n        },\n        text = {\n            OutlinedTextField(\n                modifier = Modifier\n                    .focusRequester(focusRequester),\n                value = name,\n                onValueChange = { name = it },\n                label = {\n                    Text(text = stringResource(MR.strings.name))\n                },\n                supportingText = {\n                    val msgRes = if (name.isNotEmpty() && nameAlreadyExists) {\n                        MR.strings.error_category_exists\n                    } else {\n                        MR.strings.information_required_plain\n                    }\n                    Text(text = stringResource(msgRes))\n                },\n                isError = name.isNotEmpty() && nameAlreadyExists,\n                singleLine = true,\n            )\n        },\n    )\n\n    LaunchedEffect(focusRequester) {\n        // TODO: https://issuetracker.google.com/issues/204502668\n        delay(0.1.seconds)\n        focusRequester.requestFocus()\n    }\n}\n\n@Composable\nfun CategoryRenameDialog(\n    onDismissRequest: () -> Unit,\n    onRename: (String) -> Unit,\n    categories: ImmutableList<String>,\n    category: String,\n) {\n    var name by remember { mutableStateOf(category) }\n    var valueHasChanged by remember { mutableStateOf(false) }\n\n    val focusRequester = remember { FocusRequester() }\n    val nameAlreadyExists = remember(name) { categories.contains(name) }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                enabled = valueHasChanged && !nameAlreadyExists,\n                onClick = {\n                    onRename(name)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_rename_category))\n        },\n        text = {\n            OutlinedTextField(\n                modifier = Modifier.focusRequester(focusRequester),\n                value = name,\n                onValueChange = {\n                    valueHasChanged = name != it\n                    name = it\n                },\n                label = { Text(text = stringResource(MR.strings.name)) },\n                supportingText = {\n                    val msgRes = if (valueHasChanged && nameAlreadyExists) {\n                        MR.strings.error_category_exists\n                    } else {\n                        MR.strings.information_required_plain\n                    }\n                    Text(text = stringResource(msgRes))\n                },\n                isError = valueHasChanged && nameAlreadyExists,\n                singleLine = true,\n            )\n        },\n    )\n\n    LaunchedEffect(focusRequester) {\n        // TODO: https://issuetracker.google.com/issues/204502668\n        delay(0.1.seconds)\n        focusRequester.requestFocus()\n    }\n}\n\n@Composable\nfun CategoryDeleteDialog(\n    onDismissRequest: () -> Unit,\n    onDelete: () -> Unit,\n    category: String,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onDelete()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.delete_category))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.delete_category_confirmation, category))\n        },\n    )\n}\n\n@Composable\nfun ChangeCategoryDialog(\n    initialSelection: ImmutableList<CheckboxState<Category>>,\n    onDismissRequest: () -> Unit,\n    onEditCategories: () -> Unit,\n    onConfirm: (List<Long>, List<Long>) -> Unit,\n) {\n    if (initialSelection.isEmpty()) {\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            confirmButton = {\n                tachiyomi.presentation.core.components.material.TextButton(\n                    onClick = {\n                        onDismissRequest()\n                        onEditCategories()\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_edit_categories))\n                }\n            },\n            title = {\n                Text(text = stringResource(MR.strings.action_move_category))\n            },\n            text = {\n                Text(text = stringResource(MR.strings.information_empty_category_dialog))\n            },\n        )\n        return\n    }\n    var selection by remember { mutableStateOf(initialSelection) }\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            Row {\n                tachiyomi.presentation.core.components.material.TextButton(onClick = {\n                    onDismissRequest()\n                    onEditCategories()\n                }) {\n                    Text(text = stringResource(MR.strings.action_edit))\n                }\n                Spacer(modifier = Modifier.weight(1f))\n                tachiyomi.presentation.core.components.material.TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n                tachiyomi.presentation.core.components.material.TextButton(\n                    onClick = {\n                        onDismissRequest()\n                        onConfirm(\n                            selection\n                                .filter { it is CheckboxState.State.Checked || it is CheckboxState.TriState.Include }\n                                .map { it.value.id },\n                            selection\n                                .filter { it is CheckboxState.State.None || it is CheckboxState.TriState.None }\n                                .map { it.value.id },\n                        )\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_ok))\n                }\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_move_category))\n        },\n        text = {\n            Column(\n                modifier = Modifier.verticalScroll(rememberScrollState()),\n            ) {\n                selection.forEach { checkbox ->\n                    val onChange: (CheckboxState<Category>) -> Unit = {\n                        val index = selection.indexOf(it)\n                        if (index != -1) {\n                            val mutableList = selection.toMutableList()\n                            mutableList[index] = it.next()\n                            selection = mutableList.toList().toImmutableList()\n                        }\n                    }\n                    Row(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .clickable { onChange(checkbox) },\n                        verticalAlignment = Alignment.CenterVertically,\n                    ) {\n                        when (checkbox) {\n                            is CheckboxState.TriState -> {\n                                TriStateCheckbox(\n                                    state = checkbox.asToggleableState(),\n                                    onClick = { onChange(checkbox) },\n                                )\n                            }\n                            is CheckboxState.State -> {\n                                Checkbox(\n                                    checked = checkbox.isChecked,\n                                    onCheckedChange = { onChange(checkbox) },\n                                )\n                            }\n                        }\n\n                        Text(\n                            text = checkbox.value.visualName,\n                            modifier = Modifier.padding(horizontal = MaterialTheme.padding.medium),\n                        )\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt",
    "content": "package eu.kanade.presentation.category.components\n\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Add\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.shouldExpandFAB\n\n@Composable\nfun CategoryFloatingActionButton(\n    lazyListState: LazyListState,\n    onCreate: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    ExtendedFloatingActionButton(\n        text = { Text(text = stringResource(MR.strings.action_add)) },\n        icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = \"\") },\n        onClick = onCreate,\n        expanded = lazyListState.shouldExpandFAB(),\n        modifier = modifier,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt",
    "content": "package eu.kanade.presentation.category.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.DragHandle\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material.icons.outlined.Visibility\nimport androidx.compose.material.icons.outlined.VisibilityOff\nimport androidx.compose.material3.ElevatedCard\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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 sh.calvin.reorderable.ReorderableCollectionItemScope\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ReorderableCollectionItemScope.CategoryListItem(\n    category: Category,\n    onRename: () -> Unit,\n    onHide: () -> Unit,\n    onDelete: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    ElevatedCard(modifier = modifier) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .clickable(onClick = onRename)\n                .padding(vertical = MaterialTheme.padding.small)\n                .padding(\n                    start = MaterialTheme.padding.small,\n                    end = MaterialTheme.padding.medium,\n                ),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Outlined.DragHandle,\n                contentDescription = null,\n                modifier = Modifier\n                    .padding(MaterialTheme.padding.medium)\n                    .draggableHandle(),\n            )\n            Text(\n                text = category.name,\n                modifier = Modifier.weight(1f),\n            )\n            IconButton(onClick = onRename) {\n                Icon(\n                    imageVector = Icons.Outlined.Edit,\n                    contentDescription = stringResource(MR.strings.action_rename_category),\n                )\n            }\n            IconButton(\n                onClick = onHide,\n                content = {\n                    Icon(\n                        imageVector = if (category.hidden) {\n                            Icons.Outlined.Visibility\n                        } else {\n                            Icons.Outlined.VisibilityOff\n                        },\n                        contentDescription = stringResource(AYMR.strings.action_hide),\n                    )\n                },\n            )\n            IconButton(onClick = onDelete) {\n                Icon(\n                    imageVector = Icons.Outlined.Delete,\n                    contentDescription = stringResource(MR.strings.action_delete),\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/AdaptiveSheet.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.togetherWith\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.window.Dialog\nimport androidx.compose.ui.window.DialogProperties\nimport cafe.adriel.voyager.core.annotation.InternalVoyagerApi\nimport cafe.adriel.voyager.core.lifecycle.DisposableEffectIgnoringConfiguration\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.Navigator\nimport eu.kanade.presentation.util.ScreenTransition\nimport eu.kanade.presentation.util.isTabletUi\nimport tachiyomi.presentation.core.components.AdaptiveSheet as AdaptiveSheetImpl\n\n@OptIn(InternalVoyagerApi::class)\n@Composable\nfun NavigatorAdaptiveSheet(\n    screen: Screen,\n    enableSwipeDismiss: (Navigator) -> Boolean = { true },\n    onDismissRequest: () -> Unit,\n) {\n    Navigator(\n        screen = screen,\n        content = { sheetNavigator ->\n            AdaptiveSheet(\n                enableSwipeDismiss = enableSwipeDismiss(sheetNavigator),\n                onDismissRequest = onDismissRequest,\n            ) {\n                ScreenTransition(\n                    navigator = sheetNavigator,\n                    transition = {\n                        fadeIn(animationSpec = tween(220, delayMillis = 90)) togetherWith\n                            fadeOut(animationSpec = tween(90))\n                    },\n                )\n\n                BackHandler(\n                    enabled = sheetNavigator.size > 1,\n                    onBack = sheetNavigator::pop,\n                )\n            }\n\n            // Make sure screens are disposed no matter what\n            if (sheetNavigator.parent?.disposeBehavior?.disposeNestedNavigators == false) {\n                DisposableEffectIgnoringConfiguration {\n                    onDispose {\n                        sheetNavigator.items\n                            .asReversed()\n                            .forEach(sheetNavigator::dispose)\n                    }\n                }\n            }\n        },\n    )\n}\n\n/**\n * Sheet with adaptive position aligned to bottom on small screen, otherwise aligned to center\n * and will not be able to dismissed with swipe gesture.\n *\n * Max width of the content is set to 460 dp.\n */\n@Composable\nfun AdaptiveSheet(\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n    enableSwipeDismiss: Boolean = true,\n    content: @Composable () -> Unit,\n) {\n    val isTabletUi = isTabletUi()\n\n    Dialog(\n        onDismissRequest = onDismissRequest,\n        properties = dialogProperties,\n    ) {\n        AdaptiveSheetImpl(\n            modifier = modifier,\n            isTabletUi = isTabletUi,\n            enableSwipeDismiss = enableSwipeDismiss,\n            onDismissRequest = onDismissRequest,\n        ) {\n            content()\n        }\n    }\n}\n\nprivate val dialogProperties = DialogProperties(\n    usePlatformDefaultWidth = false,\n    decorFitsSystemWindows = true,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/AppBar.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.foundation.basicMarquee\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.isSystemInDarkTheme\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.text.BasicTextField\nimport androidx.compose.foundation.text.KeyboardActions\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ArrowBack\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material.icons.outlined.MoreVert\nimport androidx.compose.material.icons.outlined.Search\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.PlainTooltip\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextFieldDefaults\nimport androidx.compose.material3.TooltipBox\nimport androidx.compose.material3.TooltipDefaults\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.material3.rememberTooltipState\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.key\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.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalFocusManager\nimport androidx.compose.ui.platform.LocalSoftwareKeyboardController\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.input.ImeAction\nimport androidx.compose.ui.text.input.VisualTransformation\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.Pill\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide\nimport tachiyomi.presentation.core.util.runOnEnterKeyPressed\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport tachiyomi.presentation.core.util.showSoftKeyboard\n\nconst val SEARCH_DEBOUNCE_MILLIS = 250L\n\n@Composable\nfun AppBar(\n    title: String?,\n\n    modifier: Modifier = Modifier,\n    backgroundColor: Color? = null,\n    // Text\n    subtitle: String? = null,\n    // Up button\n    navigateUp: (() -> Unit)? = null,\n    navigationIcon: ImageVector? = null,\n    // Menu\n    actions: @Composable RowScope.() -> Unit = {},\n    // Action mode\n    actionModeCounter: Int = 0,\n    onCancelActionMode: () -> Unit = {},\n    actionModeActions: @Composable RowScope.() -> Unit = {},\n\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n) {\n    val isActionMode by remember(actionModeCounter) {\n        derivedStateOf { actionModeCounter > 0 }\n    }\n\n    AppBar(\n        modifier = modifier,\n        backgroundColor = backgroundColor,\n        titleContent = {\n            if (isActionMode) {\n                AppBarTitle(actionModeCounter.toString())\n            } else {\n                AppBarTitle(title, subtitle = subtitle)\n            }\n        },\n        navigateUp = navigateUp,\n        navigationIcon = navigationIcon,\n        actions = {\n            if (isActionMode) {\n                actionModeActions()\n            } else {\n                actions()\n            }\n        },\n        isActionMode = isActionMode,\n        onCancelActionMode = onCancelActionMode,\n        scrollBehavior = scrollBehavior,\n    )\n}\n\n@Composable\nfun AppBar(\n    // Title\n    titleContent: @Composable () -> Unit,\n\n    modifier: Modifier = Modifier,\n    backgroundColor: Color? = null,\n    // Up button\n    navigateUp: (() -> Unit)? = null,\n    navigationIcon: ImageVector? = null,\n    // Menu\n    actions: @Composable RowScope.() -> Unit = {},\n    // Action mode\n    isActionMode: Boolean = false,\n    onCancelActionMode: () -> Unit = {},\n\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n) {\n    Column(\n        modifier = modifier,\n    ) {\n        TopAppBar(\n            navigationIcon = {\n                if (isActionMode) {\n                    IconButton(onClick = onCancelActionMode) {\n                        Icon(\n                            imageVector = Icons.Outlined.Close,\n                            contentDescription = stringResource(MR.strings.action_cancel),\n                        )\n                    }\n                } else {\n                    navigateUp?.let {\n                        IconButton(onClick = it) {\n                            UpIcon(navigationIcon = navigationIcon)\n                        }\n                    }\n                }\n            },\n            title = titleContent,\n            actions = actions,\n            colors = TopAppBarDefaults.topAppBarColors(\n                containerColor = backgroundColor ?: MaterialTheme.colorScheme.surfaceColorAtElevation(\n                    elevation = if (isActionMode) 3.dp else 0.dp,\n                ),\n            ),\n            scrollBehavior = scrollBehavior,\n        )\n    }\n}\n\n@Composable\nfun AppBarTitle(\n    title: String?,\n    modifier: Modifier = Modifier,\n    subtitle: String? = null,\n    count: Int = 0,\n) {\n    if (count > 0) {\n        Row(verticalAlignment = Alignment.CenterVertically) {\n            Text(\n                text = title!!,\n                maxLines = 1,\n                modifier = Modifier.weight(1f, false),\n                overflow = TextOverflow.Ellipsis,\n            )\n            val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f\n            Pill(\n                text = \"$count\",\n                modifier = Modifier.padding(start = 4.dp),\n                color = MaterialTheme.colorScheme.onBackground.copy(alpha = pillAlpha),\n                fontSize = 14.sp,\n            )\n        }\n    } else {\n        Column(modifier = modifier) {\n            title?.let {\n                Text(\n                    text = it,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                )\n            }\n            subtitle?.let {\n                Text(\n                    text = it,\n                    style = MaterialTheme.typography.bodyMedium,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    modifier = Modifier.basicMarquee(\n                        repeatDelayMillis = 2_000,\n                    ),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun AppBarActions(\n    actions: ImmutableList<AppBar.AppBarAction>,\n) {\n    var showMenu by remember { mutableStateOf(false) }\n\n    actions.filterIsInstance<AppBar.Action>().map {\n        TooltipBox(\n            positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),\n            tooltip = {\n                PlainTooltip {\n                    Text(it.title)\n                }\n            },\n            state = rememberTooltipState(),\n        ) {\n            IconButton(\n                onClick = it.onClick,\n                enabled = it.enabled,\n            ) {\n                Icon(\n                    imageVector = it.icon,\n                    tint = it.iconTint ?: LocalContentColor.current,\n                    contentDescription = it.title,\n                )\n            }\n        }\n    }\n\n    val overflowActions = actions.filterIsInstance<AppBar.OverflowAction>()\n    if (overflowActions.isNotEmpty()) {\n        TooltipBox(\n            positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),\n            tooltip = {\n                PlainTooltip {\n                    Text(stringResource(MR.strings.action_menu_overflow_description))\n                }\n            },\n            state = rememberTooltipState(),\n        ) {\n            IconButton(\n                onClick = { showMenu = !showMenu },\n            ) {\n                Icon(\n                    Icons.Outlined.MoreVert,\n                    contentDescription = stringResource(\n                        MR.strings.action_menu_overflow_description,\n                    ),\n                )\n            }\n        }\n\n        DropdownMenu(\n            expanded = showMenu,\n            onDismissRequest = { showMenu = false },\n        ) {\n            overflowActions.map {\n                DropdownMenuItem(\n                    onClick = {\n                        it.onClick()\n                        showMenu = false\n                    },\n                    text = { Text(it.title, fontWeight = FontWeight.Normal) },\n                )\n            }\n        }\n    }\n}\n\n/**\n * @param searchEnabled Set to false if you don't want to show search action.\n * @param searchQuery If null, use normal toolbar.\n * @param placeholderText If null, [MR.strings.action_search_hint] is used.\n */\n@Composable\nfun SearchToolbar(\n    searchQuery: String?,\n    onChangeSearchQuery: (String?) -> Unit,\n    modifier: Modifier = Modifier,\n    titleContent: @Composable () -> Unit = {},\n    navigateUp: (() -> Unit)? = null,\n    searchEnabled: Boolean = true,\n    placeholderText: String? = null,\n    onSearch: (String) -> Unit = {},\n    onClickCloseSearch: () -> Unit = { onChangeSearchQuery(null) },\n    actions: @Composable RowScope.() -> Unit = {},\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n    visualTransformation: VisualTransformation = VisualTransformation.None,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n) {\n    val focusRequester = remember { FocusRequester() }\n\n    AppBar(\n        modifier = modifier,\n        titleContent = {\n            if (searchQuery == null) return@AppBar titleContent()\n\n            val keyboardController = LocalSoftwareKeyboardController.current\n            val focusManager = LocalFocusManager.current\n\n            val searchAndClearFocus: () -> Unit = f@{\n                if (searchQuery.isBlank()) return@f\n                onSearch(searchQuery)\n                focusManager.clearFocus()\n                keyboardController?.hide()\n            }\n\n            BasicTextField(\n                value = searchQuery,\n                onValueChange = onChangeSearchQuery,\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .focusRequester(focusRequester)\n                    .runOnEnterKeyPressed(action = searchAndClearFocus)\n                    .showSoftKeyboard(remember { searchQuery.isEmpty() })\n                    .clearFocusOnSoftKeyboardHide(),\n                textStyle = MaterialTheme.typography.titleMedium.copy(\n                    color = MaterialTheme.colorScheme.onBackground,\n                    fontWeight = FontWeight.Normal,\n                    fontSize = 18.sp,\n                ),\n                keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),\n                keyboardActions = KeyboardActions(onSearch = { searchAndClearFocus() }),\n                singleLine = true,\n                cursorBrush = SolidColor(MaterialTheme.colorScheme.onBackground),\n                visualTransformation = visualTransformation,\n                interactionSource = interactionSource,\n                decorationBox = { innerTextField ->\n                    TextFieldDefaults.DecorationBox(\n                        value = searchQuery,\n                        innerTextField = innerTextField,\n                        enabled = true,\n                        singleLine = true,\n                        visualTransformation = visualTransformation,\n                        interactionSource = interactionSource,\n                        placeholder = {\n                            Text(\n                                modifier = Modifier.secondaryItemAlpha(),\n                                text = (\n                                    placeholderText ?: stringResource(\n                                        MR.strings.action_search_hint,\n                                    )\n                                    ),\n                                maxLines = 1,\n                                overflow = TextOverflow.Ellipsis,\n                                style = MaterialTheme.typography.titleMedium.copy(\n                                    fontSize = 18.sp,\n                                    fontWeight = FontWeight.Normal,\n                                ),\n                            )\n                        },\n                        container = {},\n                    )\n                },\n            )\n        },\n        navigateUp = if (searchQuery == null) navigateUp else onClickCloseSearch,\n        actions = {\n            key(\"search\") {\n                val onClick = { onChangeSearchQuery(\"\") }\n\n                if (!searchEnabled) {\n                    // Don't show search action\n                } else if (searchQuery == null) {\n                    TooltipBox(\n                        positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),\n                        tooltip = {\n                            PlainTooltip {\n                                Text(stringResource(MR.strings.action_search))\n                            }\n                        },\n                        state = rememberTooltipState(),\n                    ) {\n                        IconButton(\n                            onClick = onClick,\n                        ) {\n                            Icon(\n                                Icons.Outlined.Search,\n                                contentDescription = stringResource(MR.strings.action_search),\n                            )\n                        }\n                    }\n                } else if (searchQuery.isNotEmpty()) {\n                    TooltipBox(\n                        positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),\n                        tooltip = {\n                            PlainTooltip {\n                                Text(stringResource(MR.strings.action_reset))\n                            }\n                        },\n                        state = rememberTooltipState(),\n                    ) {\n                        IconButton(\n                            onClick = {\n                                onClick()\n                                focusRequester.requestFocus()\n                            },\n                        ) {\n                            Icon(\n                                Icons.Outlined.Close,\n                                contentDescription = stringResource(MR.strings.action_reset),\n                            )\n                        }\n                    }\n                }\n            }\n\n            key(\"actions\") { actions() }\n        },\n        isActionMode = false,\n        scrollBehavior = scrollBehavior,\n    )\n}\n\n@Composable\nfun UpIcon(\n    modifier: Modifier = Modifier,\n    navigationIcon: ImageVector? = null,\n) {\n    val icon = navigationIcon\n        ?: Icons.AutoMirrored.Outlined.ArrowBack\n    Icon(\n        imageVector = icon,\n        contentDescription = stringResource(MR.strings.action_bar_up_description),\n        modifier = modifier,\n    )\n}\n\nsealed interface AppBar {\n    sealed interface AppBarAction\n\n    data class Action(\n        val title: String,\n        val icon: ImageVector,\n        val iconTint: Color? = null,\n        val onClick: () -> Unit,\n        val enabled: Boolean = true,\n    ) : AppBarAction\n\n    data class OverflowAction(\n        val title: String,\n        val onClick: () -> Unit,\n    ) : AppBarAction\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/Banners.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.expandVertically\nimport androidx.compose.animation.shrinkVertically\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.requiredSize\nimport androidx.compose.foundation.layout.statusBars\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.layout.SubcomposeLayout\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastForEach\nimport androidx.compose.ui.util.fastMap\nimport androidx.compose.ui.util.fastMaxBy\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\nval DownloadedOnlyBannerBackgroundColor\n    @Composable get() = MaterialTheme.colorScheme.tertiary\nval IncognitoModeBannerBackgroundColor\n    @Composable get() = MaterialTheme.colorScheme.primary\nval IndexingBannerBackgroundColor\n    @Composable get() = MaterialTheme.colorScheme.secondary\n\n@Composable\nfun WarningBanner(\n    textRes: StringResource,\n    modifier: Modifier = Modifier,\n) {\n    Text(\n        text = stringResource(textRes),\n        modifier = modifier\n            .fillMaxWidth()\n            .background(MaterialTheme.colorScheme.error)\n            .padding(16.dp),\n        color = MaterialTheme.colorScheme.onError,\n        style = MaterialTheme.typography.bodyMedium,\n        textAlign = TextAlign.Center,\n    )\n}\n\n@Composable\nfun AppStateBanners(\n    downloadedOnlyMode: Boolean,\n    incognitoMode: Boolean,\n    indexing: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    val density = LocalDensity.current\n    val mainInsets = WindowInsets.statusBars\n    val mainInsetsTop = mainInsets.getTop(density)\n    SubcomposeLayout(modifier = modifier) { constraints ->\n        val indexingPlaceable = subcompose(0) {\n            AnimatedVisibility(\n                visible = indexing,\n                enter = expandVertically(),\n                exit = shrinkVertically(),\n            ) {\n                IndexingDownloadBanner(\n                    modifier = Modifier.windowInsetsPadding(mainInsets),\n                )\n            }\n        }.fastMap { it.measure(constraints) }\n        val indexingHeight = indexingPlaceable.fastMaxBy { it.height }?.height ?: 0\n\n        val downloadedOnlyPlaceable = subcompose(1) {\n            AnimatedVisibility(\n                visible = downloadedOnlyMode,\n                enter = expandVertically(),\n                exit = shrinkVertically(),\n            ) {\n                val top = (mainInsetsTop - indexingHeight).coerceAtLeast(0)\n                DownloadedOnlyModeBanner(\n                    modifier = Modifier.windowInsetsPadding(WindowInsets(top = top)),\n                )\n            }\n        }.fastMap { it.measure(constraints) }\n        val downloadedOnlyHeight = downloadedOnlyPlaceable.fastMaxBy { it.height }?.height ?: 0\n\n        val incognitoPlaceable = subcompose(2) {\n            AnimatedVisibility(\n                visible = incognitoMode,\n                enter = expandVertically(),\n                exit = shrinkVertically(),\n            ) {\n                val top = (mainInsetsTop - indexingHeight - downloadedOnlyHeight).coerceAtLeast(0)\n                IncognitoModeBanner(\n                    modifier = Modifier.windowInsetsPadding(WindowInsets(top = top)),\n                )\n            }\n        }.fastMap { it.measure(constraints) }\n        val incognitoHeight = incognitoPlaceable.fastMaxBy { it.height }?.height ?: 0\n\n        layout(constraints.maxWidth, indexingHeight + downloadedOnlyHeight + incognitoHeight) {\n            indexingPlaceable.fastForEach {\n                it.place(0, 0)\n            }\n            downloadedOnlyPlaceable.fastForEach {\n                it.place(0, indexingHeight)\n            }\n            incognitoPlaceable.fastForEach {\n                it.place(0, indexingHeight + downloadedOnlyHeight)\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) {\n    Text(\n        text = stringResource(MR.strings.label_downloaded_only),\n        modifier = Modifier\n            .background(DownloadedOnlyBannerBackgroundColor)\n            .fillMaxWidth()\n            .padding(4.dp)\n            .then(modifier),\n        color = MaterialTheme.colorScheme.onTertiary,\n        textAlign = TextAlign.Center,\n        style = MaterialTheme.typography.labelMedium,\n    )\n}\n\n@Composable\nprivate fun IncognitoModeBanner(modifier: Modifier = Modifier) {\n    Text(\n        text = stringResource(MR.strings.pref_incognito_mode),\n        modifier = Modifier\n            .background(IncognitoModeBannerBackgroundColor)\n            .fillMaxWidth()\n            .padding(4.dp)\n            .then(modifier),\n        color = MaterialTheme.colorScheme.onPrimary,\n        textAlign = TextAlign.Center,\n        style = MaterialTheme.typography.labelMedium,\n    )\n}\n\n@Composable\nprivate fun IndexingDownloadBanner(modifier: Modifier = Modifier) {\n    val density = LocalDensity.current\n    Row(\n        modifier = Modifier\n            .background(color = IndexingBannerBackgroundColor)\n            .fillMaxWidth()\n            .padding(8.dp)\n            .then(modifier),\n        horizontalArrangement = Arrangement.Center,\n    ) {\n        var textHeight by remember { mutableStateOf(0.dp) }\n        CircularProgressIndicator(\n            modifier = Modifier.requiredSize(textHeight),\n            color = MaterialTheme.colorScheme.onSecondary,\n            strokeWidth = textHeight / 8,\n        )\n        Spacer(modifier = Modifier.width(8.dp))\n        Text(\n            text = stringResource(MR.strings.download_notifier_cache_renewal),\n            color = MaterialTheme.colorScheme.onSecondary,\n            textAlign = TextAlign.Center,\n            style = MaterialTheme.typography.labelMedium,\n            onTextLayout = {\n                with(density) {\n                    textHeight = it.size.height.toDp()\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/DateText.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.tachiyomi.util.lang.toRelativeString\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.LocalDateTime\nimport java.time.ZoneId\n\n@Composable\nfun relativeDateText(\n    dateEpochMillis: Long,\n): String {\n    return relativeDateText(\n        localDate = LocalDate.ofInstant(\n            Instant.ofEpochMilli(dateEpochMillis),\n            ZoneId.systemDefault(),\n        )\n            .takeIf { dateEpochMillis > 0L },\n    )\n}\n\n// For use in chapter/episode release time\n@Composable\nfun relativeDateTimeText(\n    dateEpochMillis: Long,\n): String {\n    return relativeDateTimeText(\n        localDateTime = LocalDateTime.ofInstant(\n            Instant.ofEpochMilli(dateEpochMillis),\n            ZoneId.systemDefault(),\n        )\n            .takeIf { dateEpochMillis > 0L },\n    )\n}\n\n@Composable\nfun relativeDateText(\n    localDate: LocalDate?,\n): String {\n    val context = LocalContext.current\n\n    val preferences = remember { Injekt.get<UiPreferences>() }\n    val relativeTime = remember { preferences.relativeTime().get() }\n    val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat().get()) }\n\n    return localDate?.toRelativeString(\n        context = context,\n        relative = relativeTime,\n        dateFormat = dateFormat,\n    )\n        ?: stringResource(MR.strings.not_applicable)\n}\n\n// For use in chapter/episode release time\n@Composable\nfun relativeDateTimeText(\n    localDateTime: LocalDateTime?,\n): String {\n    val context = LocalContext.current\n\n    val preferences = remember { Injekt.get<UiPreferences>() }\n    val relativeTime = remember { preferences.relativeTime().get() }\n    val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat().get()) }\n\n    return localDateTime?.toRelativeString(\n        context = context,\n        relative = relativeTime,\n        dateFormat = dateFormat,\n    )\n        ?: stringResource(MR.strings.not_applicable)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.foundation.ScrollState\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ArrowRight\nimport androidx.compose.material.icons.outlined.RadioButtonChecked\nimport androidx.compose.material.icons.outlined.RadioButtonUnchecked\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\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.unit.DpOffset\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.window.PopupProperties\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport androidx.compose.material3.DropdownMenu as ComposeDropdownMenu\n\n/**\n * DropdownMenu but overlaps anchor and has width constraints to better\n * match non-Compose implementation.\n */\n@Composable\nfun DropdownMenu(\n    expanded: Boolean,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n    offset: DpOffset = DpOffset(8.dp, (-56).dp),\n    scrollState: ScrollState = rememberScrollState(),\n    properties: PopupProperties = PopupProperties(focusable = true),\n    content: @Composable ColumnScope.() -> Unit,\n) {\n    ComposeDropdownMenu(\n        expanded = expanded,\n        onDismissRequest = onDismissRequest,\n        modifier = modifier.sizeIn(minWidth = 196.dp, maxWidth = 196.dp),\n        offset = offset,\n        scrollState = scrollState,\n        properties = properties,\n        content = content,\n    )\n}\n\n@Composable\nfun RadioMenuItem(\n    text: @Composable () -> Unit,\n    isChecked: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit,\n) {\n    DropdownMenuItem(\n        text = text,\n        onClick = onClick,\n        trailingIcon = {\n            if (isChecked) {\n                Icon(\n                    imageVector = Icons.Outlined.RadioButtonChecked,\n                    contentDescription = stringResource(MR.strings.selected),\n                    tint = MaterialTheme.colorScheme.primary,\n                )\n            } else {\n                Icon(\n                    imageVector = Icons.Outlined.RadioButtonUnchecked,\n                    contentDescription = stringResource(MR.strings.not_selected),\n                )\n            }\n        },\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun NestedMenuItem(\n    text: @Composable () -> Unit,\n    children: @Composable ColumnScope.(() -> Unit) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    var nestedExpanded by remember { mutableStateOf(false) }\n    val closeMenu = { nestedExpanded = false }\n\n    Box {\n        DropdownMenuItem(\n            text = text,\n            onClick = { nestedExpanded = true },\n            trailingIcon = {\n                Icon(\n                    imageVector = Icons.AutoMirrored.Outlined.ArrowRight,\n                    contentDescription = null,\n                )\n            },\n        )\n\n        DropdownMenu(\n            expanded = nestedExpanded,\n            onDismissRequest = closeMenu,\n            modifier = modifier,\n        ) {\n            children(closeMenu)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\n\n@PreviewLightDark\n@Composable\nprivate fun NoActionPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            EmptyScreen(\n                stringRes = MR.strings.empty_screen,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun WithActionPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            EmptyScreen(\n                stringRes = MR.strings.empty_screen,\n                actions = persistentListOf(\n                    EmptyScreenAction(\n                        stringRes = MR.strings.action_retry,\n                        icon = Icons.Outlined.Refresh,\n                        onClick = {},\n                    ),\n                    EmptyScreenAction(\n                        stringRes = MR.strings.getting_started_guide,\n                        icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                        onClick = {},\n                    ),\n                ),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/EntryDownloadDropdownMenu.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.entries.DownloadAction\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun EntryDownloadDropdownMenu(\n    expanded: Boolean,\n    onDismissRequest: () -> Unit,\n    onDownloadClicked: (DownloadAction) -> Unit,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    val downloadAmount = if (isManga) MR.plurals.download_amount else AYMR.plurals.download_amount_anime\n    val downloadUnviewed = if (isManga) MR.strings.download_unread else AYMR.strings.download_unseen\n    val options = persistentListOf(\n        DownloadAction.NEXT_1_ITEM to pluralStringResource(downloadAmount, 1, 1),\n        DownloadAction.NEXT_5_ITEMS to pluralStringResource(downloadAmount, 5, 5),\n        DownloadAction.NEXT_10_ITEMS to pluralStringResource(downloadAmount, 10, 10),\n        DownloadAction.NEXT_25_ITEMS to pluralStringResource(downloadAmount, 25, 25),\n        DownloadAction.UNVIEWED_ITEMS to stringResource(downloadUnviewed),\n    )\n\n    DropdownMenu(\n        expanded = expanded,\n        onDismissRequest = onDismissRequest,\n        modifier = modifier,\n    ) {\n        options.map { (downloadAction, string) ->\n            DropdownMenuItem(\n                text = { Text(text = string) },\n                onClick = {\n                    onDownloadClicked(downloadAction)\n                    onDismissRequest()\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/FloatingActionAddButton.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Add\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.shouldExpandFAB\n\n@Composable\nfun FloatingActionAddButton(\n    lazyListState: LazyListState,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    ExtendedFloatingActionButton(\n        text = { Text(text = stringResource(MR.strings.action_add)) },\n        icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = null) },\n        onClick = onClick,\n        expanded = lazyListState.shouldExpandFAB(),\n        modifier = modifier,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/ItemDownloadIndicator.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material3.ripple\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedback\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.semantics.Role\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.presentation.core.components.material.IconButtonTokens\nimport uy.kohesive.injekt.injectLazy\n\ninternal fun Modifier.commonClickable(\n    enabled: Boolean,\n    hapticFeedback: HapticFeedback,\n    onLongClick: () -> Unit,\n    onClick: () -> Unit,\n) = this.combinedClickable(\n    enabled = enabled,\n    onLongClick = {\n        onLongClick()\n        hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)\n    },\n    onClick = onClick,\n    role = Role.Button,\n    interactionSource = null,\n    indication = ripple(\n        bounded = false,\n        radius = IconButtonTokens.StateLayerSize / 2,\n    ),\n)\n\ninternal val IndicatorSize = 26.dp\ninternal val IndicatorPadding = 2.dp\n\n// To match composable parameter name when used later\ninternal val IndicatorStrokeWidth = IndicatorPadding\n\ninternal val IndicatorModifier = Modifier\n    .size(IndicatorSize)\n    .padding(IndicatorPadding)\ninternal val ArrowModifier = Modifier\n    .size(IndicatorSize - 7.dp)\n\ninternal val preferences: DownloadPreferences by injectLazy()\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.wrapContentSize\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.MoreVert\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.PrimaryTabRow\nimport androidx.compose.material3.Tab\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.graphics.vector.ImageVector\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastForEachIndexed\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.TabText\nimport tachiyomi.presentation.core.i18n.stringResource\n\nobject TabbedDialogPaddings {\n    val Horizontal = 24.dp\n    val Vertical = 8.dp\n}\n\n@Composable\nfun TabbedDialog(\n    onDismissRequest: () -> Unit,\n    tabTitles: ImmutableList<String>,\n    modifier: Modifier = Modifier,\n    tabOverflowMenuContent: (@Composable ColumnScope.(() -> Unit) -> Unit)? = null,\n    onOverflowMenuClicked: (() -> Unit)? = null,\n    overflowIcon: ImageVector? = null,\n    pagerState: PagerState = rememberPagerState { tabTitles.size },\n    content: @Composable (Int) -> Unit,\n) {\n    AdaptiveSheet(\n        modifier = modifier,\n        onDismissRequest = onDismissRequest,\n    ) {\n        val scope = rememberCoroutineScope()\n\n        Column {\n            Row {\n                PrimaryTabRow(\n                    modifier = Modifier.weight(1f),\n                    selectedTabIndex = pagerState.currentPage,\n                    containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,\n                    divider = {},\n                ) {\n                    tabTitles.fastForEachIndexed { index, tab ->\n                        Tab(\n                            selected = pagerState.currentPage == index,\n                            onClick = { scope.launch { pagerState.animateScrollToPage(index) } },\n                            text = { TabText(text = tab) },\n                            unselectedContentColor = MaterialTheme.colorScheme.onSurface,\n                        )\n                    }\n                }\n\n                MoreMenu(onOverflowMenuClicked, tabOverflowMenuContent, overflowIcon)\n            }\n            HorizontalDivider()\n\n            HorizontalPager(\n                modifier = Modifier.animateContentSize(),\n                state = pagerState,\n                verticalAlignment = Alignment.Top,\n                pageContent = { page -> content(page) },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MoreMenu(\n    onClickIcon: (() -> Unit)?,\n    content: @Composable (ColumnScope.(() -> Unit) -> Unit)?,\n    overflowIcon: ImageVector? = null,\n) {\n    if (onClickIcon == null && content == null) return\n\n    var expanded by remember { mutableStateOf(false) }\n    val onClick = onClickIcon ?: { expanded = true }\n\n    Box(modifier = Modifier.wrapContentSize(Alignment.TopStart)) {\n        IconButton(onClick = onClick) {\n            Icon(\n                imageVector = overflowIcon ?: Icons.Default.MoreVert,\n                contentDescription = stringResource(MR.strings.label_more),\n            )\n        }\n        if (onClickIcon == null) {\n            DropdownMenu(\n                expanded = expanded,\n                onDismissRequest = { expanded = false },\n            ) {\n                content!! { expanded = false }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt",
    "content": "package eu.kanade.presentation.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.PrimaryTabRow\nimport androidx.compose.material3.ScrollableTabRow\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Tab\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.zIndex\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.launch\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.TabText\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun TabbedScreen(\n    titleRes: StringResource?,\n    tabs: ImmutableList<TabContent>,\n    modifier: Modifier = Modifier,\n    state: PagerState = rememberPagerState { tabs.size },\n    mangaSearchQuery: String? = null,\n    onChangeMangaSearchQuery: (String?) -> Unit = {},\n    scrollable: Boolean = false,\n    animeSearchQuery: String? = null,\n    onChangeAnimeSearchQuery: (String?) -> Unit = {},\n\n) {\n    val scope = rememberCoroutineScope()\n    val snackbarHostState = remember { SnackbarHostState() }\n\n    Scaffold(\n        topBar = {\n            if (titleRes != null) {\n                val tab = tabs[state.currentPage]\n                val searchEnabled = tab.searchEnabled\n\n                val actualQuery = when (state.currentPage % 2) {\n                    1 -> mangaSearchQuery // History and Browse\n                    else -> animeSearchQuery\n                }\n\n                val actualOnChange = when (state.currentPage % 2) {\n                    1 -> onChangeMangaSearchQuery // History and Browse\n                    else -> onChangeAnimeSearchQuery\n                }\n\n                SearchToolbar(\n                    titleContent = {\n                        AppBarTitle(\n                            stringResource(titleRes),\n                            modifier = modifier,\n                            null,\n                            tab.numberTitle,\n                        )\n                    },\n                    searchEnabled = searchEnabled,\n                    searchQuery = if (searchEnabled) actualQuery else null,\n                    onChangeSearchQuery = actualOnChange,\n                    actions = { AppBarActions(tab.actions) },\n                    navigateUp = tab.navigateUp,\n                )\n            }\n        },\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n    ) { contentPadding ->\n        Column(\n            modifier = Modifier.padding(\n                top = contentPadding.calculateTopPadding(),\n                start = contentPadding.calculateStartPadding(LocalLayoutDirection.current),\n                end = contentPadding.calculateEndPadding(LocalLayoutDirection.current),\n            ),\n        ) {\n            FlexibleTabRow(\n                scrollable = scrollable,\n                selectedTabIndex = state.currentPage,\n            ) {\n                tabs.forEachIndexed { index, tab ->\n                    Tab(\n                        selected = state.currentPage == index,\n                        onClick = { scope.launch { state.animateScrollToPage(index) } },\n                        text = {\n                            TabText(\n                                text = stringResource(tab.titleRes),\n                                badgeCount = tab.badgeNumber,\n                            )\n                        },\n                        unselectedContentColor = MaterialTheme.colorScheme.onSurface,\n                    )\n                }\n            }\n\n            HorizontalPager(\n                modifier = Modifier.fillMaxSize(),\n                state = state,\n                verticalAlignment = Alignment.Top,\n            ) { page ->\n                tabs[page].content(\n                    PaddingValues(bottom = contentPadding.calculateBottomPadding()),\n                    snackbarHostState,\n                )\n            }\n        }\n    }\n}\n\ndata class TabContent(\n    val titleRes: StringResource,\n    val badgeNumber: Int? = null,\n    val searchEnabled: Boolean = false,\n    val actions: ImmutableList<AppBar.AppBarAction> = persistentListOf(),\n    val content: @Composable (contentPadding: PaddingValues, snackbarHostState: SnackbarHostState) -> Unit,\n    val numberTitle: Int = 0,\n    val cancelAction: () -> Unit = {},\n    val navigateUp: (() -> Unit)? = null,\n)\n\n@Composable\nprivate fun FlexibleTabRow(\n    scrollable: Boolean,\n    selectedTabIndex: Int,\n    block: @Composable () -> Unit,\n) {\n    return if (scrollable) {\n        ScrollableTabRow(\n            selectedTabIndex = selectedTabIndex,\n            edgePadding = 13.dp,\n            modifier = Modifier.zIndex(1f),\n        ) {\n            block()\n        }\n    } else {\n        PrimaryTabRow(\n            selectedTabIndex = selectedTabIndex,\n            modifier = Modifier.zIndex(1f),\n        ) {\n            block()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt",
    "content": "package eu.kanade.presentation.crash\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.BugReport\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.util.CrashLogUtil\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.InfoScreen\n\n@Composable\nfun CrashScreen(\n    exception: Throwable?,\n    onRestartClick: () -> Unit,\n) {\n    val scope = rememberCoroutineScope()\n    val context = LocalContext.current\n\n    InfoScreen(\n        icon = Icons.Outlined.BugReport,\n        headingText = stringResource(MR.strings.crash_screen_title),\n        subtitleText = stringResource(\n            MR.strings.crash_screen_description,\n            stringResource(MR.strings.app_name),\n        ),\n        acceptText = stringResource(MR.strings.pref_dump_crash_logs),\n        onAcceptClick = {\n            scope.launch {\n                CrashLogUtil(context).dumpLogs(exception)\n            }\n        },\n        rejectText = stringResource(MR.strings.crash_screen_restart_application),\n        onRejectClick = onRestartClick,\n    ) {\n        Box(\n            modifier = Modifier\n                .padding(vertical = MaterialTheme.padding.small)\n                .clip(MaterialTheme.shapes.small)\n                .fillMaxSize()\n                .background(MaterialTheme.colorScheme.surfaceVariant),\n        ) {\n            Text(\n                text = exception.toString(),\n                modifier = Modifier\n                    .padding(all = MaterialTheme.padding.small),\n                color = MaterialTheme.colorScheme.onSurfaceVariant,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun CrashScreenPreview() {\n    TachiyomiPreviewTheme {\n        CrashScreen(exception = RuntimeException(\"Dummy\")) {}\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/EntryScreenConstants.kt",
    "content": "package eu.kanade.presentation.entries\n\nenum class DownloadAction {\n    NEXT_1_ITEM,\n    NEXT_5_ITEMS,\n    NEXT_10_ITEMS,\n    NEXT_25_ITEMS,\n    UNVIEWED_ITEMS,\n}\n\nenum class EditCoverAction {\n    EDIT,\n    DELETE,\n}\n\nenum class EntryScreenItem {\n    INFO_BOX,\n    ACTION_ROW,\n    DESCRIPTION_WITH_TAG,\n    ITEM_HEADER,\n    ITEM,\n    AIRING_TIME,\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/AnimeScreen.kt",
    "content": "package eu.kanade.presentation.entries.anime\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.asPaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.GridItemSpan\nimport androidx.compose.foundation.lazy.grid.LazyGridScope\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.foundation.lazy.grid.rememberLazyGridState\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.PlayArrow\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.mutableLongStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.layout.layout\nimport androidx.compose.ui.layout.onSizeChanged\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.offset\nimport androidx.compose.ui.util.fastAll\nimport androidx.compose.ui.util.fastAny\nimport androidx.compose.ui.util.fastMap\nimport aniyomi.domain.anime.SeasonAnime\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.entries.anime.model.episodesFiltered\nimport eu.kanade.domain.entries.anime.model.seasonsFiltered\nimport eu.kanade.presentation.components.relativeDateTimeText\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.presentation.entries.EntryScreenItem\nimport eu.kanade.presentation.entries.anime.components.AnimeActionRow\nimport eu.kanade.presentation.entries.anime.components.AnimeEpisodeListItem\nimport eu.kanade.presentation.entries.anime.components.AnimeInfoBox\nimport eu.kanade.presentation.entries.anime.components.AnimeSeasonListItem\nimport eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction\nimport eu.kanade.presentation.entries.anime.components.ExpandableAnimeDescription\nimport eu.kanade.presentation.entries.anime.components.NextEpisodeAiringListItem\nimport eu.kanade.presentation.entries.components.EntryBottomActionMenu\nimport eu.kanade.presentation.entries.components.EntryToolbar\nimport eu.kanade.presentation.entries.components.ItemHeader\nimport eu.kanade.presentation.entries.components.MissingItemCountListItem\nimport eu.kanade.presentation.util.formatEpisodeNumber\nimport eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.source.anime.getNameForAnimeInfo\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.details.AnimeSourcePreferencesScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreenModel\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeSeasonItem\nimport eu.kanade.tachiyomi.ui.entries.anime.EpisodeList\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.coroutines.delay\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.service.missingEntriesCount\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.FastScrollLazyVerticalGrid\nimport tachiyomi.presentation.core.components.TwoPanelBox\nimport tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.shouldExpandFAB\nimport tachiyomi.source.local.entries.anime.isLocal\nimport java.time.Instant\nimport java.util.concurrent.TimeUnit\n\n@Composable\nfun AnimeScreen(\n    state: AnimeScreenModel.State.Success,\n    snackbarHostState: SnackbarHostState,\n    nextUpdate: Instant?,\n    isTabletUi: Boolean,\n    episodeSwipeStartAction: LibraryPreferences.EpisodeSwipeAction,\n    episodeSwipeEndAction: LibraryPreferences.EpisodeSwipeAction,\n    showNextEpisodeAirTime: Boolean,\n    alwaysUseExternalPlayer: Boolean,\n    navigateUp: () -> Unit,\n    onEpisodeClicked: (episode: Episode, alt: Boolean) -> Unit,\n    onDownloadEpisode: ((List<EpisodeList.Item>, EpisodeDownloadAction) -> Unit)?,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: (() -> Unit)?,\n\n    // For tags menu\n    onTagSearch: (String) -> Unit,\n\n    onFilterButtonClicked: () -> Unit,\n    onRefresh: () -> Unit,\n    onContinueWatching: () -> Unit,\n    onSearch: (query: String, global: Boolean) -> Unit,\n\n    // For cover dialog\n    onCoverClicked: () -> Unit,\n\n    // For top action menu\n    onShareClicked: (() -> Unit)?,\n    onDownloadActionClicked: ((DownloadAction) -> Unit)?,\n    onEditCategoryClicked: (() -> Unit)?,\n    onEditFetchIntervalClicked: (() -> Unit)?,\n    onMigrateClicked: (() -> Unit)?,\n    changeAnimeSkipIntro: (() -> Unit)?,\n\n    // For bottom action menu\n    onMultiBookmarkClicked: (List<Episode>, bookmarked: Boolean) -> Unit,\n    onMultiFillermarkClicked: (List<Episode>, fillermarked: Boolean) -> Unit,\n    onMultiMarkAsSeenClicked: (List<Episode>, markAsSeen: Boolean) -> Unit,\n    onMarkPreviousAsSeenClicked: (Episode) -> Unit,\n    onMultiDeleteClicked: (List<Episode>) -> Unit,\n\n    // For episode swipe\n    onEpisodeSwipe: (EpisodeList.Item, LibraryPreferences.EpisodeSwipeAction) -> Unit,\n\n    // Episode selection\n    onEpisodeSelected: (EpisodeList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onAllEpisodeSelected: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n\n    // Season clicked\n    onSeasonClicked: (SeasonAnime) -> Unit,\n    onContinueWatchingClicked: ((SeasonAnime) -> Unit)?,\n) {\n    val context = LocalContext.current\n    val onCopyTagToClipboard: (tag: String) -> Unit = {\n        if (it.isNotEmpty()) {\n            context.copyToClipboard(it, it)\n        }\n    }\n\n    val navigator = LocalNavigator.currentOrThrow\n    val onSettingsClicked: (() -> Unit)? = {\n        navigator.push(AnimeSourcePreferencesScreen(state.source.id))\n    }.takeIf { state.source is ConfigurableAnimeSource }\n\n    if (!isTabletUi) {\n        AnimeScreenSmallImpl(\n            state = state,\n            snackbarHostState = snackbarHostState,\n            nextUpdate = nextUpdate,\n            episodeSwipeStartAction = episodeSwipeStartAction,\n            episodeSwipeEndAction = episodeSwipeEndAction,\n            showNextEpisodeAirTime = showNextEpisodeAirTime,\n            alwaysUseExternalPlayer = alwaysUseExternalPlayer,\n            navigateUp = navigateUp,\n            onEpisodeClicked = onEpisodeClicked,\n            onDownloadEpisode = onDownloadEpisode,\n            onAddToLibraryClicked = onAddToLibraryClicked,\n            onWebViewClicked = onWebViewClicked,\n            onWebViewLongClicked = onWebViewLongClicked,\n            onTrackingClicked = onTrackingClicked,\n            onTagSearch = onTagSearch,\n            onCopyTagToClipboard = onCopyTagToClipboard,\n            onFilterClicked = onFilterButtonClicked,\n            onRefresh = onRefresh,\n            onContinueWatching = onContinueWatching,\n            onSearch = onSearch,\n            onCoverClicked = onCoverClicked,\n            onShareClicked = onShareClicked,\n            onDownloadActionClicked = onDownloadActionClicked,\n            onEditCategoryClicked = onEditCategoryClicked,\n            onEditIntervalClicked = onEditFetchIntervalClicked,\n            onMigrateClicked = onMigrateClicked,\n            changeAnimeSkipIntro = changeAnimeSkipIntro,\n            onMultiBookmarkClicked = onMultiBookmarkClicked,\n            onMultiFillermarkClicked = onMultiFillermarkClicked,\n            onMultiMarkAsSeenClicked = onMultiMarkAsSeenClicked,\n            onMarkPreviousAsSeenClicked = onMarkPreviousAsSeenClicked,\n            onMultiDeleteClicked = onMultiDeleteClicked,\n            onEpisodeSwipe = onEpisodeSwipe,\n            onEpisodeSelected = onEpisodeSelected,\n            onAllEpisodeSelected = onAllEpisodeSelected,\n            onInvertSelection = onInvertSelection,\n            onSettingsClicked = onSettingsClicked,\n            onSeasonClicked = onSeasonClicked,\n            onClickContinueWatching = onContinueWatchingClicked,\n        )\n    } else {\n        AnimeScreenLargeImpl(\n            state = state,\n            snackbarHostState = snackbarHostState,\n            nextUpdate = nextUpdate,\n            episodeSwipeStartAction = episodeSwipeStartAction,\n            episodeSwipeEndAction = episodeSwipeEndAction,\n            showNextEpisodeAirTime = showNextEpisodeAirTime,\n            alwaysUseExternalPlayer = alwaysUseExternalPlayer,\n            navigateUp = navigateUp,\n            onEpisodeClicked = onEpisodeClicked,\n            onDownloadEpisode = onDownloadEpisode,\n            onAddToLibraryClicked = onAddToLibraryClicked,\n            onWebViewClicked = onWebViewClicked,\n            onWebViewLongClicked = onWebViewLongClicked,\n            onTrackingClicked = onTrackingClicked,\n            onTagSearch = onTagSearch,\n            onCopyTagToClipboard = onCopyTagToClipboard,\n            onFilterButtonClicked = onFilterButtonClicked,\n            onRefresh = onRefresh,\n            onContinueWatching = onContinueWatching,\n            onSearch = onSearch,\n            onCoverClicked = onCoverClicked,\n            onShareClicked = onShareClicked,\n            onDownloadActionClicked = onDownloadActionClicked,\n            onEditCategoryClicked = onEditCategoryClicked,\n            onEditIntervalClicked = onEditFetchIntervalClicked,\n            changeAnimeSkipIntro = changeAnimeSkipIntro,\n            onMigrateClicked = onMigrateClicked,\n            onMultiBookmarkClicked = onMultiBookmarkClicked,\n            onMultiFillermarkClicked = onMultiFillermarkClicked,\n            onMultiMarkAsSeenClicked = onMultiMarkAsSeenClicked,\n            onMarkPreviousAsSeenClicked = onMarkPreviousAsSeenClicked,\n            onMultiDeleteClicked = onMultiDeleteClicked,\n            onEpisodeSwipe = onEpisodeSwipe,\n            onEpisodeSelected = onEpisodeSelected,\n            onAllEpisodeSelected = onAllEpisodeSelected,\n            onInvertSelection = onInvertSelection,\n            onSettingsClicked = onSettingsClicked,\n            onSeasonClicked = onSeasonClicked,\n            onClickContinueWatching = onContinueWatchingClicked,\n        )\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nprivate fun AnimeScreenSmallImpl(\n    state: AnimeScreenModel.State.Success,\n    snackbarHostState: SnackbarHostState,\n    nextUpdate: Instant?,\n    episodeSwipeStartAction: LibraryPreferences.EpisodeSwipeAction,\n    episodeSwipeEndAction: LibraryPreferences.EpisodeSwipeAction,\n    showNextEpisodeAirTime: Boolean,\n    alwaysUseExternalPlayer: Boolean,\n    navigateUp: () -> Unit,\n    onEpisodeClicked: (Episode, Boolean) -> Unit,\n    onDownloadEpisode: ((List<EpisodeList.Item>, EpisodeDownloadAction) -> Unit)?,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: (() -> Unit)?,\n\n    // For tags menu\n    onTagSearch: (String) -> Unit,\n    onCopyTagToClipboard: (tag: String) -> Unit,\n\n    onFilterClicked: () -> Unit,\n    onRefresh: () -> Unit,\n    onContinueWatching: () -> Unit,\n    onSearch: (query: String, global: Boolean) -> Unit,\n\n    // For cover dialog\n    onCoverClicked: () -> Unit,\n\n    // For top action menu\n    onShareClicked: (() -> Unit)?,\n    onDownloadActionClicked: ((DownloadAction) -> Unit)?,\n    onEditCategoryClicked: (() -> Unit)?,\n    onEditIntervalClicked: (() -> Unit)?,\n    onMigrateClicked: (() -> Unit)?,\n    changeAnimeSkipIntro: (() -> Unit)?,\n    onSettingsClicked: (() -> Unit)?,\n\n    // For bottom action menu\n    onMultiBookmarkClicked: (List<Episode>, bookmarked: Boolean) -> Unit,\n    onMultiFillermarkClicked: (List<Episode>, fillermarked: Boolean) -> Unit,\n    onMultiMarkAsSeenClicked: (List<Episode>, markAsSeen: Boolean) -> Unit,\n    onMarkPreviousAsSeenClicked: (Episode) -> Unit,\n    onMultiDeleteClicked: (List<Episode>) -> Unit,\n\n    // For episode swipe\n    onEpisodeSwipe: (EpisodeList.Item, LibraryPreferences.EpisodeSwipeAction) -> Unit,\n\n    // Episode selection\n    onEpisodeSelected: (EpisodeList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onAllEpisodeSelected: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n\n    // Season clicked\n    onSeasonClicked: (SeasonAnime) -> Unit,\n    onClickContinueWatching: ((SeasonAnime) -> Unit)?,\n) {\n    val density = LocalDensity.current\n    val offsetGridPaddingPx = with(density) { GRID_PADDING.roundToPx() }\n    val gridSize = remember(state.anime) { state.anime.seasonDisplayGridSize }\n\n    val itemListState = rememberLazyGridState()\n\n    val seasons = remember(state) { state.processedSeasons }\n    val episodes = remember(state) { state.processedEpisodes }\n    val listItem = remember(state) { state.episodeListItems }\n    val hasFilters = remember(state) {\n        when (state.anime.fetchType) {\n            FetchType.Seasons -> state.anime.seasonsFiltered()\n            FetchType.Episodes -> state.anime.episodesFiltered()\n        }\n    }\n\n    var toolbarHeight by remember { mutableIntStateOf(0) }\n\n    val isAnySelected by remember {\n        derivedStateOf {\n            episodes.fastAny { it.selected }\n        }\n    }\n\n    BackHandler(onBack = {\n        if (isAnySelected) {\n            onAllEpisodeSelected(false)\n        } else {\n            navigateUp()\n        }\n    })\n\n    BoxWithConstraints {\n        val density = LocalDensity.current\n        val containerHeightPx = with(density) { this@BoxWithConstraints.maxHeight.roundToPx() }\n        Scaffold(\n            topBar = {\n                val selectedEpisodeCount: Int = remember(episodes) {\n                    episodes.count { it.selected }\n                }\n                val isFirstItemVisible by remember {\n                    derivedStateOf { itemListState.firstVisibleItemIndex == 0 }\n                }\n                val isFirstItemScrolled by remember {\n                    derivedStateOf { itemListState.firstVisibleItemScrollOffset > 0 }\n                }\n                val titleAlpha by animateFloatAsState(\n                    if (!isFirstItemVisible) 1f else 0f,\n                    label = \"Top Bar Title\",\n                )\n                val backgroundAlpha by animateFloatAsState(\n                    if (!isFirstItemVisible || isFirstItemScrolled) 1f else 0f,\n                    label = \"Top Bar Background\",\n                )\n                EntryToolbar(\n                    title = state.anime.title,\n                    hasFilters = hasFilters,\n                    navigateUp = navigateUp,\n                    onClickFilter = onFilterClicked,\n                    onClickShare = onShareClicked,\n                    onClickDownload = onDownloadActionClicked,\n                    onClickEditCategory = onEditCategoryClicked,\n                    onClickRefresh = onRefresh,\n                    onClickMigrate = onMigrateClicked,\n                    onClickSettings = onSettingsClicked,\n                    changeAnimeSkipIntro = changeAnimeSkipIntro,\n                    actionModeCounter = selectedEpisodeCount,\n                    onCancelActionMode = { onAllEpisodeSelected(false) },\n                    onSelectAll = { onAllEpisodeSelected(true) },\n                    onInvertSelection = { onInvertSelection() },\n                    titleAlphaProvider = { titleAlpha },\n                    backgroundAlphaProvider = { backgroundAlpha },\n                    isManga = false,\n                    modifier = Modifier.onSizeChanged { toolbarHeight = it.height },\n                )\n            },\n            bottomBar = {\n                val selectedEpisodes = remember(episodes) {\n                    episodes.filter { it.selected }\n                }\n                SharedAnimeBottomActionMenu(\n                    selected = selectedEpisodes,\n                    onEpisodeClicked = onEpisodeClicked,\n                    onMultiBookmarkClicked = onMultiBookmarkClicked,\n                    onMultiFillermarkClicked = onMultiFillermarkClicked,\n                    onMultiMarkAsSeenClicked = onMultiMarkAsSeenClicked,\n                    onMarkPreviousAsSeenClicked = onMarkPreviousAsSeenClicked,\n                    onDownloadEpisode = onDownloadEpisode,\n                    onMultiDeleteClicked = onMultiDeleteClicked,\n                    fillFraction = 1f,\n                    alwaysUseExternalPlayer = alwaysUseExternalPlayer,\n                )\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n            floatingActionButton = {\n                val isFABVisible = remember(episodes) {\n                    episodes.fastAny { !it.episode.seen } && !isAnySelected\n                }\n                AnimatedVisibility(\n                    visible = isFABVisible,\n                    enter = fadeIn(),\n                    exit = fadeOut(),\n                ) {\n                    ExtendedFloatingActionButton(\n                        text = {\n                            val isWatching = remember(state.episodes) {\n                                state.episodes.fastAny { it.episode.seen }\n                            }\n                            Text(\n                                text = stringResource(\n                                    if (isWatching) MR.strings.action_resume else MR.strings.action_start,\n                                ),\n                            )\n                        },\n                        icon = {\n                            Icon(\n                                imageVector = Icons.Filled.PlayArrow,\n                                contentDescription = null,\n                            )\n                        },\n                        onClick = onContinueWatching,\n                        expanded = itemListState.shouldExpandFAB(),\n                    )\n                }\n            },\n        ) { contentPadding ->\n            val topPadding = contentPadding.calculateTopPadding()\n\n            PullRefresh(\n                refreshing = state.isRefreshingData,\n                onRefresh = onRefresh,\n                enabled = !isAnySelected,\n                indicatorPadding = PaddingValues(top = topPadding),\n            ) {\n                val layoutDirection = LocalLayoutDirection.current\n                FastScrollLazyVerticalGrid(\n                    modifier = Modifier.fillMaxHeight(),\n                    state = itemListState,\n                    columns = if (gridSize == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(gridSize),\n                    contentPadding = PaddingValues(\n                        start = GRID_PADDING + contentPadding.calculateStartPadding(layoutDirection),\n                        end = GRID_PADDING + contentPadding.calculateEndPadding(layoutDirection),\n                        bottom = contentPadding.calculateBottomPadding(),\n                    ),\n                ) {\n                    item(\n                        key = EntryScreenItem.INFO_BOX,\n                        contentType = EntryScreenItem.INFO_BOX,\n                        span = { GridItemSpan(maxLineSpan) },\n                    ) {\n                        AnimeInfoBox(\n                            isTabletUi = false,\n                            appBarPadding = topPadding,\n                            anime = state.anime,\n                            sourceName = remember { state.source.getNameForAnimeInfo() },\n                            isStubSource = remember { state.source is StubAnimeSource },\n                            onCoverClick = onCoverClicked,\n                            doSearch = onSearch,\n                            modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                        )\n                    }\n\n                    item(\n                        key = EntryScreenItem.ACTION_ROW,\n                        contentType = EntryScreenItem.ACTION_ROW,\n                        span = { GridItemSpan(maxLineSpan) },\n                    ) {\n                        AnimeActionRow(\n                            favorite = state.anime.favorite,\n                            trackingCount = state.trackingCount,\n                            nextUpdate = nextUpdate,\n                            isUserIntervalMode = state.anime.fetchInterval < 0,\n                            onAddToLibraryClicked = onAddToLibraryClicked,\n                            onWebViewClicked = onWebViewClicked,\n                            onWebViewLongClicked = onWebViewLongClicked,\n                            onTrackingClicked = onTrackingClicked,\n                            onEditIntervalClicked = onEditIntervalClicked,\n                            onEditCategory = onEditCategoryClicked,\n                            modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                        )\n                    }\n\n                    item(\n                        key = EntryScreenItem.DESCRIPTION_WITH_TAG,\n                        contentType = EntryScreenItem.DESCRIPTION_WITH_TAG,\n                        span = { GridItemSpan(maxLineSpan) },\n                    ) {\n                        ExpandableAnimeDescription(\n                            defaultExpandState = state.isFromSource,\n                            description = state.anime.description,\n                            tagsProvider = { state.anime.genre },\n                            onTagSearch = onTagSearch,\n                            onCopyTagToClipboard = onCopyTagToClipboard,\n                            modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                        )\n                    }\n\n                    item(\n                        key = EntryScreenItem.ITEM_HEADER,\n                        contentType = EntryScreenItem.ITEM_HEADER,\n                        span = { GridItemSpan(maxLineSpan) },\n                    ) {\n                        val missingEpisodesCount = remember(episodes) {\n                            episodes.map { it.episode.episodeNumber }.missingEntriesCount()\n                        }\n                        val missingSeasonsCount = remember(seasons) {\n                            seasons.map { it.seasonAnime.anime.seasonNumber }.missingEntriesCount()\n                        }\n                        ItemHeader(\n                            enabled = !isAnySelected,\n                            itemCount = when (state.anime.fetchType) {\n                                FetchType.Seasons -> seasons.size\n                                FetchType.Episodes -> episodes.size\n                            },\n                            missingItemsCount = maxOf(missingEpisodesCount, missingSeasonsCount),\n                            onClick = onFilterClicked,\n                            isManga = false,\n                            fetchType = state.anime.fetchType,\n                            modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                        )\n                    }\n\n                    when (state.anime.fetchType) {\n                        FetchType.Seasons -> {\n                            sharedSeasons(\n                                anime = state.anime,\n                                seasons = seasons,\n                                containerHeight = containerHeightPx - toolbarHeight,\n                                onSeasonClicked = onSeasonClicked,\n                                onClickContinueWatching = onClickContinueWatching,\n                                listItemModifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                            )\n                        }\n\n                        FetchType.Episodes -> {\n                            if (state.airingTime > 0L) {\n                                item(\n                                    key = EntryScreenItem.AIRING_TIME,\n                                    contentType = EntryScreenItem.AIRING_TIME,\n                                    span = { GridItemSpan(maxLineSpan) },\n                                ) {\n                                    // Handles the second by second countdown\n                                    var timer by remember { mutableLongStateOf(state.airingTime) }\n                                    LaunchedEffect(key1 = timer) {\n                                        if (timer > 0L) {\n                                            delay(1000L)\n                                            timer -= 1000L\n                                        }\n                                    }\n                                    if (timer > 0L &&\n                                        showNextEpisodeAirTime &&\n                                        state.anime.status.toInt() != SAnime.COMPLETED\n                                    ) {\n                                        NextEpisodeAiringListItem(\n                                            title = stringResource(\n                                                AYMR.strings.display_mode_episode,\n                                                formatEpisodeNumber(state.airingEpisodeNumber),\n                                            ),\n                                            date = formatTime(state.airingTime, useDayFormat = true),\n                                            modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                                        )\n                                    }\n                                }\n                            }\n\n                            sharedEpisodeItems(\n                                anime = state.anime,\n                                episodes = listItem,\n                                isAnyEpisodeSelected = episodes.fastAny { it.selected },\n                                showSummaries = state.showSummaries,\n                                showPreviews = state.showPreviews,\n                                episodeSwipeStartAction = episodeSwipeStartAction,\n                                episodeSwipeEndAction = episodeSwipeEndAction,\n                                onEpisodeClicked = onEpisodeClicked,\n                                onDownloadEpisode = onDownloadEpisode,\n                                onEpisodeSelected = onEpisodeSelected,\n                                onEpisodeSwipe = onEpisodeSwipe,\n                                itemModifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun AnimeScreenLargeImpl(\n    state: AnimeScreenModel.State.Success,\n    snackbarHostState: SnackbarHostState,\n    nextUpdate: Instant?,\n    episodeSwipeStartAction: LibraryPreferences.EpisodeSwipeAction,\n    episodeSwipeEndAction: LibraryPreferences.EpisodeSwipeAction,\n    showNextEpisodeAirTime: Boolean,\n    alwaysUseExternalPlayer: Boolean,\n    navigateUp: () -> Unit,\n    onEpisodeClicked: (Episode, Boolean) -> Unit,\n    onDownloadEpisode: ((List<EpisodeList.Item>, EpisodeDownloadAction) -> Unit)?,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: (() -> Unit)?,\n\n    // For tags menu\n    onTagSearch: (String) -> Unit,\n    onCopyTagToClipboard: (tag: String) -> Unit,\n\n    onFilterButtonClicked: () -> Unit,\n    onRefresh: () -> Unit,\n    onContinueWatching: () -> Unit,\n    onSearch: (query: String, global: Boolean) -> Unit,\n\n    // For cover dialog\n    onCoverClicked: () -> Unit,\n\n    // For top action menu\n    onShareClicked: (() -> Unit)?,\n    onDownloadActionClicked: ((DownloadAction) -> Unit)?,\n    onEditCategoryClicked: (() -> Unit)?,\n    onEditIntervalClicked: (() -> Unit)?,\n    onMigrateClicked: (() -> Unit)?,\n    changeAnimeSkipIntro: (() -> Unit)?,\n    onSettingsClicked: (() -> Unit)?,\n\n    // For bottom action menu\n    onMultiBookmarkClicked: (List<Episode>, bookmarked: Boolean) -> Unit,\n    onMultiFillermarkClicked: (List<Episode>, fillermarked: Boolean) -> Unit,\n    onMultiMarkAsSeenClicked: (List<Episode>, markAsSeen: Boolean) -> Unit,\n    onMarkPreviousAsSeenClicked: (Episode) -> Unit,\n    onMultiDeleteClicked: (List<Episode>) -> Unit,\n\n    // For swipe actions\n    onEpisodeSwipe: (EpisodeList.Item, LibraryPreferences.EpisodeSwipeAction) -> Unit,\n\n    // Episode selection\n    onEpisodeSelected: (EpisodeList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onAllEpisodeSelected: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n\n    // Season clicked\n    onSeasonClicked: (SeasonAnime) -> Unit,\n    onClickContinueWatching: ((SeasonAnime) -> Unit)?,\n) {\n    val layoutDirection = LocalLayoutDirection.current\n    val density = LocalDensity.current\n\n    val seasons = remember(state) { state.processedSeasons }\n    val episodes = remember(state) { state.processedEpisodes }\n    val listItem = remember(state) { state.episodeListItems }\n\n    val isAnySelected by remember {\n        derivedStateOf {\n            episodes.fastAny { it.selected }\n        }\n    }\n\n    val insetPadding = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal).asPaddingValues()\n    var topBarHeight by remember { mutableIntStateOf(0) }\n    val offsetGridPaddingPx = with(density) { GRID_PADDING.roundToPx() }\n    val gridSize = remember(state.anime) { state.anime.seasonDisplayGridSize }\n\n    val itemListState = rememberLazyGridState()\n    val hasFilters = remember(state) {\n        when (state.anime.fetchType) {\n            FetchType.Seasons -> state.anime.seasonsFiltered()\n            FetchType.Episodes -> state.anime.episodesFiltered()\n        }\n    }\n\n    BackHandler(onBack = {\n        if (isAnySelected) {\n            onAllEpisodeSelected(false)\n        } else {\n            navigateUp()\n        }\n    })\n\n    BoxWithConstraints {\n        val density = LocalDensity.current\n        val containerHeightPx = with(density) { this@BoxWithConstraints.maxHeight.roundToPx() }\n        Scaffold(\n            topBar = {\n                val selectedChapterCount = remember(episodes) {\n                    episodes.count { it.selected }\n                }\n                EntryToolbar(\n                    modifier = Modifier.onSizeChanged { topBarHeight = it.height },\n                    title = state.anime.title,\n                    hasFilters = hasFilters,\n                    navigateUp = navigateUp,\n                    onClickFilter = onFilterButtonClicked,\n                    onClickShare = onShareClicked,\n                    onClickDownload = onDownloadActionClicked,\n                    onClickEditCategory = onEditCategoryClicked,\n                    onClickRefresh = onRefresh,\n                    onClickMigrate = onMigrateClicked,\n                    onCancelActionMode = { onAllEpisodeSelected(false) },\n                    onClickSettings = onSettingsClicked,\n                    changeAnimeSkipIntro = changeAnimeSkipIntro,\n                    actionModeCounter = selectedChapterCount,\n                    onSelectAll = { onAllEpisodeSelected(true) },\n                    onInvertSelection = { onInvertSelection() },\n                    titleAlphaProvider = { 1f },\n                    backgroundAlphaProvider = { 1f },\n                    isManga = false,\n                )\n            },\n            bottomBar = {\n                Box(\n                    modifier = Modifier.fillMaxWidth(),\n                    contentAlignment = Alignment.BottomEnd,\n                ) {\n                    val selectedEpisodes = remember(episodes) {\n                        episodes.filter { it.selected }\n                    }\n                    SharedAnimeBottomActionMenu(\n                        selected = selectedEpisodes,\n                        onEpisodeClicked = onEpisodeClicked,\n                        onMultiBookmarkClicked = onMultiBookmarkClicked,\n                        onMultiFillermarkClicked = onMultiFillermarkClicked,\n                        onMultiMarkAsSeenClicked = onMultiMarkAsSeenClicked,\n                        onMarkPreviousAsSeenClicked = onMarkPreviousAsSeenClicked,\n                        onDownloadEpisode = onDownloadEpisode,\n                        onMultiDeleteClicked = onMultiDeleteClicked,\n                        fillFraction = 0.5f,\n                        alwaysUseExternalPlayer = alwaysUseExternalPlayer,\n                    )\n                }\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n            floatingActionButton = {\n                val isFABVisible = remember(episodes) {\n                    episodes.fastAny { !it.episode.seen } && !isAnySelected\n                }\n                AnimatedVisibility(\n                    visible = isFABVisible,\n                    enter = fadeIn(),\n                    exit = fadeOut(),\n                ) {\n                    ExtendedFloatingActionButton(\n                        text = {\n                            val isWatching = remember(state.episodes) {\n                                state.episodes.fastAny { it.episode.seen }\n                            }\n                            Text(\n                                text = stringResource(\n                                    if (isWatching) MR.strings.action_resume else MR.strings.action_start,\n                                ),\n                            )\n                        },\n                        icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },\n                        onClick = onContinueWatching,\n                        expanded = itemListState.shouldExpandFAB(),\n                    )\n                }\n            },\n        ) { contentPadding ->\n            PullRefresh(\n                refreshing = state.isRefreshingData,\n                onRefresh = onRefresh,\n                enabled = !isAnySelected,\n                indicatorPadding = PaddingValues(\n                    start = insetPadding.calculateStartPadding(layoutDirection),\n                    top = with(density) { topBarHeight.toDp() },\n                    end = insetPadding.calculateEndPadding(layoutDirection),\n                ),\n            ) {\n                TwoPanelBox(\n                    modifier = Modifier.padding(\n                        start = contentPadding.calculateStartPadding(layoutDirection),\n                        end = contentPadding.calculateEndPadding(layoutDirection),\n                    ),\n                    startContent = {\n                        Column(\n                            modifier = Modifier\n                                .verticalScroll(rememberScrollState())\n                                .padding(bottom = contentPadding.calculateBottomPadding()),\n                        ) {\n                            AnimeInfoBox(\n                                isTabletUi = true,\n                                appBarPadding = contentPadding.calculateTopPadding(),\n                                anime = state.anime,\n                                sourceName = remember { state.source.getNameForAnimeInfo() },\n                                isStubSource = remember { state.source is StubAnimeSource },\n                                onCoverClick = onCoverClicked,\n                                doSearch = onSearch,\n                            )\n                            AnimeActionRow(\n                                favorite = state.anime.favorite,\n                                trackingCount = state.trackingCount,\n                                nextUpdate = nextUpdate,\n                                isUserIntervalMode = state.anime.fetchInterval < 0,\n                                onAddToLibraryClicked = onAddToLibraryClicked,\n                                onWebViewClicked = onWebViewClicked,\n                                onWebViewLongClicked = onWebViewLongClicked,\n                                onTrackingClicked = onTrackingClicked,\n                                onEditIntervalClicked = onEditIntervalClicked,\n                                onEditCategory = onEditCategoryClicked,\n                            )\n                            ExpandableAnimeDescription(\n                                defaultExpandState = true,\n                                description = state.anime.description,\n                                tagsProvider = { state.anime.genre },\n                                onTagSearch = onTagSearch,\n                                onCopyTagToClipboard = onCopyTagToClipboard,\n                            )\n                        }\n                    },\n                    endContent = {\n                        FastScrollLazyVerticalGrid(\n                            modifier = Modifier.fillMaxHeight(),\n                            state = itemListState,\n                            columns = if (gridSize == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(gridSize),\n                            contentPadding = PaddingValues(\n                                start = GRID_PADDING,\n                                end = GRID_PADDING,\n                                top = contentPadding.calculateTopPadding(),\n                                bottom = contentPadding.calculateBottomPadding(),\n                            ),\n                        ) {\n                            item(\n                                key = EntryScreenItem.ITEM_HEADER,\n                                contentType = EntryScreenItem.ITEM_HEADER,\n                                span = { GridItemSpan(maxLineSpan) },\n                            ) {\n                                val missingEpisodesCount = remember(episodes) {\n                                    episodes.map { it.episode.episodeNumber }.missingEntriesCount()\n                                }\n                                val missingSeasonsCount = remember(seasons) {\n                                    seasons.map { it.seasonAnime.anime.seasonNumber }.missingEntriesCount()\n                                }\n                                ItemHeader(\n                                    enabled = !isAnySelected,\n                                    itemCount = when (state.anime.fetchType) {\n                                        FetchType.Seasons -> seasons.size\n                                        FetchType.Episodes -> episodes.size\n                                    },\n                                    missingItemsCount = maxOf(missingEpisodesCount, missingSeasonsCount),\n                                    onClick = onFilterButtonClicked,\n                                    isManga = false,\n                                    fetchType = state.anime.fetchType,\n                                    modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                                )\n                            }\n\n                            when (state.anime.fetchType) {\n                                FetchType.Seasons -> {\n                                    sharedSeasons(\n                                        anime = state.anime,\n                                        seasons = seasons,\n                                        containerHeight = containerHeightPx - topBarHeight,\n                                        onSeasonClicked = onSeasonClicked,\n                                        onClickContinueWatching = onClickContinueWatching,\n                                        listItemModifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                                    )\n                                }\n\n                                FetchType.Episodes -> {\n                                    if (state.airingTime > 0L) {\n                                        item(\n                                            key = EntryScreenItem.AIRING_TIME,\n                                            contentType = EntryScreenItem.AIRING_TIME,\n                                        ) {\n                                            // Handles the second by second countdown reseting\n                                            var timer by remember { mutableLongStateOf(state.airingTime) }\n                                            LaunchedEffect(key1 = timer) {\n                                                if (timer > 0L) {\n                                                    delay(1000L)\n                                                    timer -= 1000L\n                                                }\n                                            }\n                                            if (timer > 0L &&\n                                                showNextEpisodeAirTime &&\n                                                state.anime.status.toInt() != SAnime.COMPLETED\n                                            ) {\n                                                NextEpisodeAiringListItem(\n                                                    title = stringResource(\n                                                        AYMR.strings.display_mode_episode,\n                                                        formatEpisodeNumber(state.airingEpisodeNumber),\n                                                    ),\n                                                    date = formatTime(state.airingTime, useDayFormat = true),\n                                                    modifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                                                )\n                                            }\n                                        }\n                                    }\n\n                                    sharedEpisodeItems(\n                                        anime = state.anime,\n                                        episodes = listItem,\n                                        isAnyEpisodeSelected = episodes.fastAny { it.selected },\n                                        showSummaries = state.showSummaries,\n                                        showPreviews = state.showPreviews,\n                                        episodeSwipeStartAction = episodeSwipeStartAction,\n                                        episodeSwipeEndAction = episodeSwipeEndAction,\n                                        onEpisodeClicked = onEpisodeClicked,\n                                        onDownloadEpisode = onDownloadEpisode,\n                                        onEpisodeSelected = onEpisodeSelected,\n                                        onEpisodeSwipe = onEpisodeSwipe,\n                                        itemModifier = Modifier.ignorePadding(offsetGridPaddingPx),\n                                    )\n                                }\n                            }\n                        }\n                    },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SharedAnimeBottomActionMenu(\n    selected: List<EpisodeList.Item>,\n    onEpisodeClicked: (Episode, Boolean) -> Unit,\n    onMultiBookmarkClicked: (List<Episode>, bookmarked: Boolean) -> Unit,\n    onMultiFillermarkClicked: (List<Episode>, fillermarked: Boolean) -> Unit,\n    onMultiMarkAsSeenClicked: (List<Episode>, markAsSeen: Boolean) -> Unit,\n    onMarkPreviousAsSeenClicked: (Episode) -> Unit,\n    onDownloadEpisode: ((List<EpisodeList.Item>, EpisodeDownloadAction) -> Unit)?,\n    onMultiDeleteClicked: (List<Episode>) -> Unit,\n    fillFraction: Float,\n    alwaysUseExternalPlayer: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    EntryBottomActionMenu(\n        visible = selected.isNotEmpty(),\n        modifier = modifier.fillMaxWidth(fillFraction),\n        onBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected.fastMap { it.episode }, true)\n        }.takeIf { selected.fastAny { !it.episode.bookmark } },\n        onRemoveBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected.fastMap { it.episode }, false)\n        }.takeIf { selected.fastAll { it.episode.bookmark } },\n        onFillermarkClicked = {\n            onMultiFillermarkClicked.invoke(selected.fastMap { it.episode }, true)\n        }.takeIf { selected.fastAny { !it.episode.fillermark } },\n        onRemoveFillermarkClicked = {\n            onMultiFillermarkClicked.invoke(selected.fastMap { it.episode }, false)\n        }.takeIf { selected.fastAll { it.episode.fillermark } },\n        onMarkAsViewedClicked = {\n            onMultiMarkAsSeenClicked(selected.fastMap { it.episode }, true)\n        }.takeIf { selected.fastAny { !it.episode.seen } },\n        onMarkAsUnviewedClicked = {\n            onMultiMarkAsSeenClicked(selected.fastMap { it.episode }, false)\n        }.takeIf { selected.fastAny { it.episode.seen || it.episode.lastSecondSeen > 0L } },\n        onMarkPreviousAsViewedClicked = {\n            onMarkPreviousAsSeenClicked(selected[0].episode)\n        }.takeIf { selected.size == 1 },\n        onDownloadClicked = {\n            onDownloadEpisode!!(selected.toList(), EpisodeDownloadAction.START)\n        }.takeIf {\n            onDownloadEpisode != null && selected.fastAny { it.downloadState != AnimeDownload.State.DOWNLOADED }\n        },\n        onDeleteClicked = {\n            onMultiDeleteClicked(selected.fastMap { it.episode })\n        }.takeIf {\n            onDownloadEpisode != null && selected.fastAny { it.downloadState == AnimeDownload.State.DOWNLOADED }\n        },\n        onExternalClicked = {\n            onEpisodeClicked(selected.fastMap { it.episode }.first(), true)\n        }.takeIf { !alwaysUseExternalPlayer && selected.size == 1 },\n        onInternalClicked = {\n            onEpisodeClicked(selected.fastMap { it.episode }.first(), true)\n        }.takeIf { alwaysUseExternalPlayer && selected.size == 1 },\n        isManga = false,\n    )\n}\n\nprivate fun LazyGridScope.sharedSeasons(\n    anime: Anime,\n    seasons: List<AnimeSeasonItem>,\n    containerHeight: Int,\n    onSeasonClicked: (SeasonAnime) -> Unit,\n    onClickContinueWatching: ((SeasonAnime) -> Unit)?,\n    listItemModifier: Modifier = Modifier,\n) {\n    items(\n        items = seasons,\n        key = { season -> season.seasonAnime.anime },\n        span = { GridItemSpan(if (anime.seasonDisplayGridMode == SeasonDisplayMode.List) maxLineSpan else 1) },\n    ) { item ->\n        AnimeSeasonListItem(\n            anime = anime,\n            item = item,\n            containerHeight = containerHeight,\n            onSeasonClicked = onSeasonClicked,\n            onClickContinueWatching = onClickContinueWatching,\n            listItemModifier = listItemModifier,\n        )\n    }\n}\n\nprivate fun LazyGridScope.sharedEpisodeItems(\n    anime: Anime,\n    episodes: List<EpisodeList>,\n    isAnyEpisodeSelected: Boolean,\n    showSummaries: Boolean,\n    showPreviews: Boolean,\n    episodeSwipeStartAction: LibraryPreferences.EpisodeSwipeAction,\n    episodeSwipeEndAction: LibraryPreferences.EpisodeSwipeAction,\n    onEpisodeClicked: (Episode, Boolean) -> Unit,\n    onDownloadEpisode: ((List<EpisodeList.Item>, EpisodeDownloadAction) -> Unit)?,\n    onEpisodeSelected: (EpisodeList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onEpisodeSwipe: (EpisodeList.Item, LibraryPreferences.EpisodeSwipeAction) -> Unit,\n    itemModifier: Modifier = Modifier,\n) {\n    items(\n        items = episodes,\n        key = { episodeItem ->\n            when (episodeItem) {\n                is EpisodeList.MissingCount -> \"missing-count-${episodeItem.id}\"\n                is EpisodeList.Item -> \"episode-${episodeItem.id}\"\n            }\n        },\n        contentType = { EntryScreenItem.ITEM },\n        span = { GridItemSpan(maxLineSpan) },\n    ) { episodeItem ->\n        val haptic = LocalHapticFeedback.current\n\n        when (episodeItem) {\n            is EpisodeList.MissingCount -> {\n                MissingItemCountListItem(\n                    count = episodeItem.count,\n                    modifier = itemModifier,\n                )\n            }\n            is EpisodeList.Item -> {\n                AnimeEpisodeListItem(\n                    title = if (anime.displayMode == Anime.EPISODE_DISPLAY_NUMBER) {\n                        stringResource(\n                            AYMR.strings.display_mode_episode,\n                            formatEpisodeNumber(episodeItem.episode.episodeNumber),\n                        )\n                    } else {\n                        episodeItem.episode.name\n                    },\n                    date = relativeDateTimeText(episodeItem.episode.dateUpload),\n                    watchProgress = episodeItem.episode.lastSecondSeen\n                        .takeIf { !episodeItem.episode.seen && it > 0L }\n                        ?.let {\n                            stringResource(\n                                AYMR.strings.episode_progress,\n                                formatTime(it),\n                                formatTime(episodeItem.episode.totalSeconds),\n                            )\n                        },\n                    scanlator = episodeItem.episode.scanlator.takeIf { !it.isNullOrBlank() },\n                    summary = episodeItem.episode.summary.takeIf { !it.isNullOrBlank() && showSummaries },\n                    previewUrl = episodeItem.episode.previewUrl.takeIf { !it.isNullOrBlank() && showPreviews },\n                    seen = episodeItem.episode.seen,\n                    bookmark = episodeItem.episode.bookmark,\n                    fillermark = episodeItem.episode.fillermark,\n                    selected = episodeItem.selected,\n                    isAnyEpisodeSelected = isAnyEpisodeSelected,\n                    downloadIndicatorEnabled = !isAnyEpisodeSelected && !anime.isLocal(),\n                    downloadStateProvider = { episodeItem.downloadState },\n                    downloadProgressProvider = { episodeItem.downloadProgress },\n                    episodeSwipeStartAction = episodeSwipeStartAction,\n                    episodeSwipeEndAction = episodeSwipeEndAction,\n                    onLongClick = {\n                        onEpisodeSelected(episodeItem, !episodeItem.selected, true, true)\n                        haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                    },\n                    onClick = {\n                        onEpisodeItemClick(\n                            episodeItem = episodeItem,\n                            isAnyEpisodeSelected = isAnyEpisodeSelected,\n                            onToggleSelection = { onEpisodeSelected(episodeItem, !episodeItem.selected, true, false) },\n                            onEpisodeClicked = onEpisodeClicked,\n                        )\n                    },\n                    onDownloadClick = if (onDownloadEpisode != null) {\n                        { onDownloadEpisode(listOf(episodeItem), it) }\n                    } else {\n                        null\n                    },\n                    onEpisodeSwipe = {\n                        onEpisodeSwipe(episodeItem, it)\n                    },\n                    modifier = itemModifier,\n                )\n            }\n        }\n    }\n}\n\nprivate fun onEpisodeItemClick(\n    episodeItem: EpisodeList.Item,\n    isAnyEpisodeSelected: Boolean,\n    onToggleSelection: (Boolean) -> Unit,\n    onEpisodeClicked: (Episode, Boolean) -> Unit,\n) {\n    when {\n        episodeItem.selected -> onToggleSelection(false)\n        isAnyEpisodeSelected -> onToggleSelection(true)\n        else -> onEpisodeClicked(episodeItem.episode, false)\n    }\n}\n\nprivate fun formatTime(milliseconds: Long, useDayFormat: Boolean = false): String {\n    return if (useDayFormat) {\n        String.format(\n            \"Airing in %02dd %02dh %02dm %02ds\",\n            TimeUnit.MILLISECONDS.toDays(milliseconds),\n            TimeUnit.MILLISECONDS.toHours(milliseconds) -\n                TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(milliseconds)),\n            TimeUnit.MILLISECONDS.toMinutes(milliseconds) -\n                TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),\n            TimeUnit.MILLISECONDS.toSeconds(milliseconds) -\n                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)),\n        )\n    } else if (milliseconds > 3600000L) {\n        String.format(\n            \"%d:%02d:%02d\",\n            TimeUnit.MILLISECONDS.toHours(milliseconds),\n            TimeUnit.MILLISECONDS.toMinutes(milliseconds) -\n                TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),\n            TimeUnit.MILLISECONDS.toSeconds(milliseconds) -\n                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)),\n        )\n    } else {\n        String.format(\n            \"%d:%02d\",\n            TimeUnit.MILLISECONDS.toMinutes(milliseconds),\n            TimeUnit.MILLISECONDS.toSeconds(milliseconds) -\n                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)),\n        )\n    }\n}\n\nprivate val GRID_PADDING = 14.dp\nprivate fun Modifier.ignorePadding(gridPadding: Int) = layout { measurable, constraints ->\n    val looseConstraints = constraints.offset(gridPadding * 2, 0)\n    val placeable = measurable.measure(looseConstraints)\n\n    layout(placeable.width, placeable.height) {\n        placeable.placeRelative(0, 0)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/DuplicateAnimeDialog.kt",
    "content": "package eu.kanade.presentation.entries.anime\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.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Add\nimport androidx.compose.material.icons.outlined.Book\nimport androidx.compose.material.icons.outlined.SwapVert\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport eu.kanade.presentation.more.settings.LocalPreferenceMinHeight\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun DuplicateAnimeDialog(\n    onDismissRequest: () -> Unit,\n    onConfirm: () -> Unit,\n    onOpenAnime: () -> Unit,\n    onMigrate: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val minHeight = LocalPreferenceMinHeight.current\n\n    AdaptiveSheet(\n        modifier = modifier,\n        onDismissRequest = onDismissRequest,\n    ) {\n        Column(\n            modifier = Modifier\n                .padding(\n                    vertical = TabbedDialogPaddings.Vertical,\n                    horizontal = TabbedDialogPaddings.Horizontal,\n                )\n                .fillMaxWidth(),\n        ) {\n            Text(\n                modifier = Modifier.padding(TitlePadding),\n                text = stringResource(MR.strings.are_you_sure),\n                style = MaterialTheme.typography.headlineMedium,\n            )\n\n            Text(\n                text = stringResource(MR.strings.confirm_add_duplicate_manga),\n                style = MaterialTheme.typography.bodyMedium,\n            )\n\n            Spacer(Modifier.height(PaddingSize))\n\n            TextPreferenceWidget(\n                title = stringResource(AYMR.strings.action_show_anime),\n                icon = Icons.Outlined.Book,\n                onPreferenceClick = {\n                    onDismissRequest()\n                    onOpenAnime()\n                },\n            )\n\n            HorizontalDivider()\n\n            TextPreferenceWidget(\n                title = stringResource(MR.strings.action_migrate_duplicate),\n                icon = Icons.Outlined.SwapVert,\n                onPreferenceClick = {\n                    onDismissRequest()\n                    onMigrate()\n                },\n            )\n\n            HorizontalDivider()\n\n            TextPreferenceWidget(\n                title = stringResource(MR.strings.action_add_anyway),\n                icon = Icons.Outlined.Add,\n                onPreferenceClick = {\n                    onDismissRequest()\n                    onConfirm()\n                },\n            )\n\n            Row(\n                modifier = Modifier\n                    .sizeIn(minHeight = minHeight)\n                    .clickable { onDismissRequest.invoke() }\n                    .padding(ButtonPadding)\n                    .fillMaxWidth(),\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.Center,\n            ) {\n                OutlinedButton(onClick = onDismissRequest, modifier = Modifier.fillMaxWidth()) {\n                    Text(\n                        modifier = Modifier\n                            .padding(vertical = 8.dp),\n                        text = stringResource(MR.strings.action_cancel),\n                        color = MaterialTheme.colorScheme.primary,\n                        style = MaterialTheme.typography.titleLarge,\n                        fontSize = 16.sp,\n                    )\n                }\n            }\n        }\n    }\n}\n\nprivate val PaddingSize = 16.dp\n\nprivate val ButtonPadding = PaddingValues(top = 16.dp, bottom = 16.dp)\nprivate val TitlePadding = PaddingValues(bottom = 16.dp, top = 8.dp)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeOptionsDialogScreen.kt",
    "content": "package eu.kanade.presentation.entries.anime\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.animation.slideInHorizontally\nimport androidx.compose.animation.slideOutHorizontally\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.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.heightIn\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ContentCopy\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.Input\nimport androidx.compose.material.icons.outlined.NavigateNext\nimport androidx.compose.material.icons.outlined.OpenInNew\nimport androidx.compose.material.icons.outlined.SystemUpdateAlt\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalClipboardManager\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.semantics.Role\nimport androidx.compose.ui.text.AnnotatedString\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport cafe.adriel.voyager.core.screen.Screen\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.HosterState\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.QualitySheetHosterContent\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.QualitySheetVideoContent\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.getChangedAt\nimport eu.kanade.tachiyomi.ui.player.loader.EpisodeLoader\nimport eu.kanade.tachiyomi.ui.player.loader.HosterLoader\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisode\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.atomic.AtomicBoolean\nimport kotlin.coroutines.cancellation.CancellationException\n\nclass EpisodeOptionsDialogScreen(\n    private val useExternalDownloader: Boolean,\n    private val episodeTitle: String,\n    private val episodeId: Long,\n    private val animeId: Long,\n    private val sourceId: Long,\n) : Screen {\n\n    @Composable\n    override fun Content() {\n        val sm = rememberScreenModel {\n            EpisodeOptionsDialogScreenModel(\n                episodeId = episodeId,\n                animeId = animeId,\n                sourceId = sourceId,\n            )\n        }\n\n        val episode by sm.episode.collectAsState()\n        val anime by sm.anime.collectAsState()\n        val hosterState by sm.hosterState.collectAsState()\n        val hosterExpandedList by sm.hosterExpandedList.collectAsState()\n        val selectedHosterVideoIndex by sm.selectedHosterVideoIndex.collectAsState()\n        val currentVideo by sm.currentVideo.collectAsState()\n        val showAllQualities by sm.showAllQualities.collectAsState()\n\n        EpisodeOptionsDialog(\n            useExternalDownloader = useExternalDownloader,\n            episodeTitle = episodeTitle,\n            episode = episode,\n            anime = anime,\n            showAllQualities = showAllQualities,\n            resultList = hosterState,\n            expandedList = hosterExpandedList,\n            currentVideo = currentVideo,\n            selectedHosterVideoIndex = selectedHosterVideoIndex,\n            onShowAllQualities = sm::onShowAllQualities,\n            onClickHoster = sm::onClickHoster,\n            onClickVideo = sm::onClickVideo,\n            getHosterList = sm::getHosterList,\n        )\n    }\n\n    companion object {\n        var onDismissDialog: () -> Unit = {}\n    }\n}\n\nclass EpisodeOptionsDialogScreenModel(\n    episodeId: Long,\n    animeId: Long,\n    sourceId: Long,\n) : ScreenModel {\n    private val sourceManager: AnimeSourceManager = Injekt.get()\n\n    private val _hosterState = MutableStateFlow<Result<List<HosterState>>?>(null)\n    val hosterState = _hosterState.asStateFlow()\n    private val _hosterExpandedList = MutableStateFlow<List<Boolean>>(emptyList())\n    val hosterExpandedList = _hosterExpandedList.asStateFlow()\n    private val _selectedHosterVideoIndex = MutableStateFlow(Pair(-1, -1))\n    val selectedHosterVideoIndex = _selectedHosterVideoIndex.asStateFlow()\n    private val _currentVideo = MutableStateFlow<Video?>(null)\n    val currentVideo = _currentVideo.asStateFlow()\n\n    private val _episode = MutableStateFlow<Episode?>(null)\n    val episode = _episode.asStateFlow()\n    private val _anime = MutableStateFlow<Anime?>(null)\n    val anime = _anime.asStateFlow()\n\n    @Suppress(\"ktlint:standard:backing-property-naming\")\n    private val _hosterList = MutableStateFlow<List<Hoster>>(emptyList())\n\n    @Suppress(\"ktlint:standard:backing-property-naming\")\n    private val _source = MutableStateFlow<AnimeSource?>(null)\n\n    private val _showAllQualities = MutableStateFlow(false)\n    val showAllQualities = _showAllQualities.asStateFlow()\n\n    init {\n        val hasFoundPreferredVideo = AtomicBoolean(false)\n\n        screenModelScope.launchIO {\n            val episode = Injekt.get<GetEpisode>().await(episodeId)!!\n            val anime = Injekt.get<GetAnime>().await(animeId)!!\n            val source = sourceManager.getOrStub(sourceId)\n\n            _episode.update { _ -> episode }\n            _anime.update { _ -> anime }\n            _source.update { _ -> source }\n\n            val hosterListResult = withIOContext {\n                try {\n                    Result.success(EpisodeLoader.getHosters(episode, anime, source))\n                } catch (e: Exception) {\n                    Result.failure(e)\n                }\n            }\n\n            if (hosterListResult.isFailure) {\n                _hosterState.update { _ -> Result.failure(hosterListResult.exceptionOrNull()!!) }\n                return@launchIO\n            }\n\n            val hosterList = hosterListResult.getOrThrow()\n            _hosterList.update { _ -> hosterList }\n            _hosterExpandedList.update { _ ->\n                List(hosterList.size) { true }\n            }\n\n            val initialHosterState = hosterList.map { hoster ->\n                if (hoster.videoList == null) {\n                    HosterState.Loading(hoster.hosterName)\n                } else {\n                    val videoList = hoster.videoList!!\n                    HosterState.Ready(\n                        hoster.hosterName,\n                        videoList,\n                        List(videoList.size) { Video.State.LOAD_VIDEO },\n                    )\n                }\n            }\n\n            _hosterState.update { _ -> Result.success(initialHosterState) }\n\n            try {\n                hosterList.mapIndexed { hosterIdx, hoster ->\n                    async {\n                        val hosterState = EpisodeLoader.loadHosterVideos(source, hoster)\n\n                        _hosterState.updateAt(hosterIdx, hosterState)\n\n                        if (hosterState is HosterState.Ready) {\n                            val prefIndex = hosterState.videoList.indexOfFirst { it.preferred }\n                            if (prefIndex != -1) {\n                                if (hasFoundPreferredVideo.compareAndSet(false, true)) {\n                                    val success =\n                                        loadVideo(source, hosterState.videoList[prefIndex], hosterIdx, prefIndex)\n                                    if (!success) {\n                                        hasFoundPreferredVideo.set(false)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }.awaitAll()\n\n                if (hasFoundPreferredVideo.compareAndSet(false, true)) {\n                    val hosterStateList = hosterState.value!!.getOrThrow()\n                    val (hosterIdx, videoIdx) = HosterLoader.selectBestVideo(hosterStateList)\n                    if (hosterIdx == -1) {\n                        _hosterState.update { _ ->\n                            Result.failure(NoSuchElementException(\"No available videos\"))\n                        }\n                        return@launchIO\n                    }\n\n                    val video = (hosterStateList[hosterIdx] as HosterState.Ready).videoList[videoIdx]\n\n                    loadVideo(source, video, hosterIdx, videoIdx)\n                }\n            } catch (e: CancellationException) {\n                _hosterState.update { _ ->\n                    Result.success(hosterList.map { HosterState.Idle(it.hosterName) })\n                }\n\n                throw e\n            }\n        }\n    }\n\n    private suspend fun loadVideo(source: AnimeSource, video: Video, hosterIndex: Int, videoIndex: Int): Boolean {\n        val selectedHosterState = (_hosterState.value!!.getOrThrow()[hosterIndex] as? HosterState.Ready) ?: return false\n\n        val oldSelectedIndex = _selectedHosterVideoIndex.value\n        _selectedHosterVideoIndex.update { _ -> Pair(hosterIndex, videoIndex) }\n\n        _hosterState.updateAt(\n            hosterIndex,\n            selectedHosterState.getChangedAt(videoIndex, video, Video.State.LOAD_VIDEO),\n        )\n\n        val resolvedVideo = if (selectedHosterState.videoState[videoIndex] != Video.State.READY) {\n            HosterLoader.getResolvedVideo(source, video)\n        } else {\n            video\n        }\n\n        if (resolvedVideo == null || resolvedVideo.videoUrl.isEmpty()) {\n            if (currentVideo.value == null) {\n                _hosterState.updateAt(\n                    hosterIndex,\n                    selectedHosterState.getChangedAt(videoIndex, video, Video.State.ERROR),\n                )\n\n                val hosterStateList = hosterState.value?.getOrNull() ?: return false\n\n                val (newHosterIdx, newVideoIdx) = HosterLoader.selectBestVideo(hosterStateList)\n                if (newHosterIdx == -1) {\n                    _hosterState.update { _ ->\n                        Result.failure(NoSuchElementException(\"No available videos\"))\n                    }\n                    return false\n                }\n\n                val newVideo = (hosterStateList[newHosterIdx] as HosterState.Ready).videoList[newVideoIdx]\n\n                return loadVideo(source, newVideo, newHosterIdx, newVideoIdx)\n            } else {\n                _selectedHosterVideoIndex.update { _ -> oldSelectedIndex }\n                _hosterState.updateAt(\n                    hosterIndex,\n                    selectedHosterState.getChangedAt(videoIndex, video, Video.State.ERROR),\n                )\n                return false\n            }\n        }\n\n        _hosterState.updateAt(\n            hosterIndex,\n            selectedHosterState.getChangedAt(videoIndex, resolvedVideo, Video.State.READY),\n        )\n        _currentVideo.update { _ -> resolvedVideo }\n\n        return true\n    }\n\n    private fun <T> MutableStateFlow<Result<List<T>>?>.updateAt(index: Int, newValue: T) {\n        this.update { values ->\n            values?.getOrNull()?.let {\n                Result.success(\n                    it.toMutableList().apply {\n                        this[index] = newValue\n                    },\n                )\n            } ?: values\n        }\n    }\n\n    fun onShowAllQualities(value: Boolean) {\n        _showAllQualities.update { _ -> value }\n    }\n\n    fun onClickHoster(hosterIndex: Int) {\n        val hosterState = hosterState.value?.getOrNull()?.getOrNull(hosterIndex) ?: return\n\n        when (hosterState) {\n            is HosterState.Ready -> {\n                _hosterExpandedList.update { values ->\n                    values.toMutableList().apply {\n                        this[hosterIndex] = !hosterExpandedList.value[hosterIndex]\n                    }\n                }\n            }\n            is HosterState.Error, is HosterState.Idle -> {\n                val hosterName = hosterState.name\n                _hosterState.updateAt(hosterIndex, HosterState.Loading(hosterName))\n\n                screenModelScope.launchIO {\n                    val newHosterState = EpisodeLoader.loadHosterVideos(\n                        _source.value!!,\n                        _hosterList.value[hosterIndex],\n                    )\n                    _hosterState.updateAt(hosterIndex, newHosterState)\n                }\n            }\n            is HosterState.Loading -> {}\n        }\n    }\n\n    fun onClickVideo(hosterIndex: Int, videoIndex: Int) {\n        val video = (_hosterState.value?.getOrNull()?.getOrNull(hosterIndex) as? HosterState.Ready)\n            ?.videoList\n            ?.getOrNull(videoIndex)\n            ?: return\n\n        screenModelScope.launchIO {\n            val success = loadVideo(_source.value!!, video, hosterIndex, videoIndex)\n            if (success) {\n                _showAllQualities.update { _ -> false }\n            }\n        }\n    }\n\n    fun getHosterList(): List<Hoster>? {\n        val hosterStateList = hosterState.value?.getOrNull() ?: return null\n        return _hosterList.value.mapIndexed { index, h ->\n            if (hosterStateList[index] is HosterState.Ready) {\n                Hoster(\n                    hosterName = h.hosterName,\n                    hosterUrl = h.hosterUrl,\n                    videoList = (hosterStateList[index] as HosterState.Ready).videoList,\n                )\n            } else {\n                Hoster(\n                    hosterName = h.hosterName,\n                    hosterUrl = h.hosterUrl,\n                    videoList = h.videoList,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun EpisodeOptionsDialog(\n    useExternalDownloader: Boolean,\n    episodeTitle: String,\n    episode: Episode?,\n    anime: Anime?,\n    showAllQualities: Boolean,\n    resultList: Result<List<HosterState>>? = null,\n    expandedList: List<Boolean>,\n    currentVideo: Video?,\n    selectedHosterVideoIndex: Pair<Int, Int>,\n    onShowAllQualities: (Boolean) -> Unit,\n    onClickHoster: (Int) -> Unit,\n    onClickVideo: (Int, Int) -> Unit,\n    getHosterList: () -> List<Hoster>?,\n) {\n    val context = LocalContext.current\n    val scope = rememberCoroutineScope()\n\n    Column(\n        modifier = Modifier\n            .animateContentSize()\n            .fillMaxWidth()\n            .verticalScroll(rememberScrollState())\n            .padding(vertical = TabbedDialogPaddings.Vertical)\n            .windowInsetsPadding(WindowInsets.systemBars),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        Text(\n            text = episodeTitle,\n            modifier = Modifier.padding(horizontal = TabbedDialogPaddings.Horizontal),\n            fontWeight = FontWeight.Bold,\n            maxLines = 1,\n            style = MaterialTheme.typography.titleSmall,\n        )\n\n        Text(\n            text = stringResource(AYMR.strings.choose_video_quality),\n            modifier = Modifier.padding(horizontal = TabbedDialogPaddings.Horizontal),\n            fontStyle = FontStyle.Italic,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n\n        val onError: () -> Unit = {\n            logcat(LogPriority.ERROR) { \"Error getting links\" }\n            scope.launchUI { context.toast(\"No available videos\") }\n            EpisodeOptionsDialogScreen.onDismissDialog()\n        }\n        if (resultList?.isFailure == true) {\n            onError()\n        }\n\n        if (resultList == null || episode == null || anime == null || currentVideo == null) {\n            LoadingScreen()\n        } else {\n            val hosterStateList = resultList.getOrNull()\n            if (!hosterStateList.isNullOrEmpty()) {\n                VideoList(\n                    useExternalDownloader = useExternalDownloader,\n                    episode = episode,\n                    anime = anime,\n                    showAllQualities = showAllQualities,\n                    hosterStateList = hosterStateList,\n                    expandedList = expandedList,\n                    currentVideo = currentVideo,\n                    selectedHosterVideoIndex = selectedHosterVideoIndex,\n                    onShowAllQualities = onShowAllQualities,\n                    onClickHoster = onClickHoster,\n                    onClickVideo = onClickVideo,\n                    getHosterList = getHosterList,\n                )\n            } else {\n                onError()\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun VideoList(\n    useExternalDownloader: Boolean,\n    episode: Episode,\n    anime: Anime,\n    showAllQualities: Boolean,\n    hosterStateList: List<HosterState>,\n    expandedList: List<Boolean>,\n    currentVideo: Video,\n    selectedHosterVideoIndex: Pair<Int, Int>,\n    onShowAllQualities: (Boolean) -> Unit,\n    onClickHoster: (Int) -> Unit,\n    onClickVideo: (Int, Int) -> Unit,\n    getHosterList: () -> List<Hoster>?,\n) {\n    val downloadManager = Injekt.get<AnimeDownloadManager>()\n    val clipboardManager = LocalClipboardManager.current\n    val context = LocalContext.current\n    val scope = rememberCoroutineScope()\n    val copiedString = stringResource(AYMR.strings.copied_video_link_to_clipboard)\n\n    AnimatedVisibility(\n        visible = !showAllQualities,\n        enter = slideInHorizontally(),\n        exit = slideOutHorizontally(),\n    ) {\n        Column {\n            if (currentVideo.videoUrl.isNotEmpty() && !showAllQualities) {\n                ClickableRow(\n                    text = currentVideo.videoTitle,\n                    icon = null,\n                    onClick = { onShowAllQualities(true) },\n                    showDropdownArrow = true,\n                )\n\n                val downloadEpisode: (Boolean) -> Unit = {\n                    downloadManager.downloadEpisodes(\n                        anime,\n                        listOf(episode),\n                        true,\n                        it,\n                        currentVideo,\n                    )\n                }\n\n                QualityOptions(\n                    onDownloadClicked = { downloadEpisode(useExternalDownloader) },\n                    onExtDownloadClicked = { downloadEpisode(!useExternalDownloader) },\n                    onCopyClicked = {\n                        clipboardManager.setText(AnnotatedString(currentVideo.videoUrl))\n                        scope.launch { context.toast(copiedString) }\n                    },\n                    onExtPlayerClicked = {\n                        scope.launch {\n                            MainActivity.startPlayerActivity(\n                                context,\n                                anime.id,\n                                episode.id,\n                                true,\n                                currentVideo,\n                            )\n                        }\n                    },\n                    onIntPlayerClicked = {\n                        scope.launch {\n                            MainActivity.startPlayerActivity(\n                                context,\n                                anime.id,\n                                episode.id,\n                                false,\n                                currentVideo,\n                                selectedHosterVideoIndex.first,\n                                selectedHosterVideoIndex.second,\n                                getHosterList(),\n                            )\n                        }\n                    },\n                )\n            }\n        }\n    }\n\n    AnimatedVisibility(\n        visible = showAllQualities,\n        enter = slideInHorizontally(initialOffsetX = { it / 2 }),\n        exit = slideOutHorizontally(targetOffsetX = { it / 2 }),\n    ) {\n        if (showAllQualities) {\n            Box(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = TabbedDialogPaddings.Horizontal)\n                    .heightIn(max = 600.dp),\n            ) {\n                if (\n                    hosterStateList.size == 1 &&\n                    hosterStateList.first().name == Hoster.NO_HOSTER_LIST &&\n                    hosterStateList.first() is HosterState.Ready\n                ) {\n                    QualitySheetVideoContent(\n                        videoList = (hosterStateList.first() as HosterState.Ready).videoList,\n                        videoState = (hosterStateList.first() as HosterState.Ready).videoState,\n                        selectedVideoIndex = selectedHosterVideoIndex.second,\n                        onClickVideo = onClickVideo,\n                    )\n                } else {\n                    QualitySheetHosterContent(\n                        hosterState = hosterStateList,\n                        expandedState = expandedList,\n                        selectedVideoIndex = selectedHosterVideoIndex,\n                        onClickHoster = onClickHoster,\n                        onClickVideo = onClickVideo,\n                        displayHosters = Pair(false, false),\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun QualityOptions(\n    onDownloadClicked: () -> Unit = {},\n    onExtDownloadClicked: () -> Unit = {},\n    onCopyClicked: () -> Unit = {},\n    onExtPlayerClicked: () -> Unit = {},\n    onIntPlayerClicked: () -> Unit = {},\n) {\n    val closeMenu = { EpisodeOptionsDialogScreen.onDismissDialog() }\n\n    Column {\n        ClickableRow(\n            text = stringResource(MR.strings.copy),\n            icon = Icons.Outlined.ContentCopy,\n            onClick = { onCopyClicked() },\n        )\n\n        ClickableRow(\n            text = stringResource(AYMR.strings.action_start_download_internally),\n            icon = Icons.Outlined.Download,\n            onClick = {\n                onDownloadClicked()\n                closeMenu()\n            },\n        )\n\n        ClickableRow(\n            text = stringResource(AYMR.strings.action_start_download_externally),\n            icon = Icons.Outlined.SystemUpdateAlt,\n            onClick = {\n                onExtDownloadClicked()\n                closeMenu()\n            },\n        )\n\n        ClickableRow(\n            text = stringResource(AYMR.strings.action_play_externally),\n            icon = Icons.Outlined.OpenInNew,\n            onClick = {\n                onExtPlayerClicked()\n                closeMenu()\n            },\n        )\n\n        ClickableRow(\n            text = stringResource(AYMR.strings.action_play_internally),\n            icon = Icons.Outlined.Input,\n            onClick = {\n                onIntPlayerClicked()\n                closeMenu()\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun ClickableRow(\n    text: String,\n    icon: ImageVector?,\n    onClick: () -> Unit,\n    showDropdownArrow: Boolean = false,\n) {\n    Row(\n        modifier = Modifier\n            .padding(horizontal = TabbedDialogPaddings.Horizontal)\n            .clickable(role = Role.DropdownList, onClick = onClick)\n            .fillMaxWidth(),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        var textPadding = MaterialTheme.padding.medium\n\n        if (icon != null) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                modifier = Modifier.size(20.dp),\n                tint = MaterialTheme.colorScheme.onSurface,\n            )\n\n            Spacer(Modifier.width(MaterialTheme.padding.small))\n\n            textPadding = MaterialTheme.padding.small\n        }\n        Text(\n            text = text,\n            modifier = Modifier.padding(vertical = textPadding),\n            style = MaterialTheme.typography.bodyMedium,\n        )\n\n        if (showDropdownArrow) {\n            Icon(\n                imageVector = Icons.Outlined.NavigateNext,\n                contentDescription = null,\n                modifier = Modifier,\n                tint = MaterialTheme.colorScheme.onSurface,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeSettingsDialog.kt",
    "content": "package eu.kanade.presentation.entries.anime\n\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.material3.AlertDialog\nimport androidx.compose.material3.DropdownMenuItem\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.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.anime.model.downloadedFilter\nimport eu.kanade.presentation.components.TabbedDialog\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.RadioItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun EpisodeSettingsDialog(\n    onDismissRequest: () -> Unit,\n    anime: Anime? = null,\n    onDownloadFilterChanged: (TriState) -> Unit,\n    onUnseenFilterChanged: (TriState) -> Unit,\n    onBookmarkedFilterChanged: (TriState) -> Unit,\n    onFillermarkedFilterChanged: (TriState) -> Unit,\n    onSortModeChanged: (Long) -> Unit,\n    onDisplayModeChanged: (Long) -> Unit,\n    onShowPreviewsEnabled: (Long) -> Unit,\n    onShowSummariesEnabled: (Long) -> Unit,\n    onSetAsDefault: (applyToExistingAnime: Boolean) -> Unit,\n) {\n    var showSetAsDefaultDialog by rememberSaveable { mutableStateOf(false) }\n    if (showSetAsDefaultDialog) {\n        SetAsDefaultDialog(\n            onDismissRequest = { showSetAsDefaultDialog = false },\n            onConfirmed = onSetAsDefault,\n        )\n    }\n\n    val downloadedOnly = remember { Injekt.get<BasePreferences>().downloadedOnly().get() }\n\n    TabbedDialog(\n        onDismissRequest = onDismissRequest,\n        tabTitles = persistentListOf(\n            stringResource(MR.strings.action_filter),\n            stringResource(MR.strings.action_sort),\n            stringResource(MR.strings.action_display),\n        ),\n        tabOverflowMenuContent = { closeMenu ->\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) },\n                onClick = {\n                    showSetAsDefaultDialog = true\n                    closeMenu()\n                },\n            )\n        },\n    ) { page ->\n        Column(\n            modifier = Modifier\n                .padding(vertical = TabbedDialogPaddings.Vertical)\n                .verticalScroll(rememberScrollState()),\n        ) {\n            when (page) {\n                0 -> {\n                    FilterPage(\n                        downloadFilter = anime?.downloadedFilter ?: TriState.DISABLED,\n                        onDownloadFilterChanged = onDownloadFilterChanged\n                            .takeUnless { downloadedOnly },\n                        unseenFilter = anime?.unseenFilter ?: TriState.DISABLED,\n                        onUnseenFilterChanged = onUnseenFilterChanged,\n                        bookmarkedFilter = anime?.bookmarkedFilter ?: TriState.DISABLED,\n                        onBookmarkedFilterChanged = onBookmarkedFilterChanged,\n                        fillermarkedFilter = anime?.fillermarkedFilter ?: TriState.DISABLED,\n                        onFillermarkedFilterChanged = onFillermarkedFilterChanged,\n                    )\n                }\n                1 -> {\n                    SortPage(\n                        sortingMode = anime?.sorting ?: 0,\n                        sortDescending = anime?.sortDescending() ?: false,\n                        onItemSelected = onSortModeChanged,\n                    )\n                }\n                2 -> {\n                    DisplayPage(\n                        displayMode = anime?.displayMode ?: 0,\n                        onDisplayModeChanged = onDisplayModeChanged,\n                        showPreviews = anime?.showPreviews() ?: true,\n                        onShowPreviewsEnabled = onShowPreviewsEnabled,\n                        showSummaries = anime?.showSummaries() ?: true,\n                        onShowSummariesEnabled = onShowSummariesEnabled,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.FilterPage(\n    downloadFilter: TriState,\n    onDownloadFilterChanged: ((TriState) -> Unit)?,\n    unseenFilter: TriState,\n    onUnseenFilterChanged: (TriState) -> Unit,\n    bookmarkedFilter: TriState,\n    onBookmarkedFilterChanged: (TriState) -> Unit,\n    fillermarkedFilter: TriState,\n    onFillermarkedFilterChanged: (TriState) -> Unit,\n) {\n    TriStateItem(\n        label = stringResource(MR.strings.label_downloaded),\n        state = downloadFilter,\n        onClick = onDownloadFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(AYMR.strings.action_filter_unseen),\n        state = unseenFilter,\n        onClick = onUnseenFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_bookmarked),\n        state = bookmarkedFilter,\n        onClick = onBookmarkedFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(AYMR.strings.action_filter_fillermarked),\n        state = fillermarkedFilter,\n        onClick = onFillermarkedFilterChanged,\n    )\n}\n\n@Composable\nprivate fun ColumnScope.SortPage(\n    sortingMode: Long,\n    sortDescending: Boolean,\n    onItemSelected: (Long) -> Unit,\n) {\n    listOf(\n        MR.strings.sort_by_source to Anime.EPISODE_SORTING_SOURCE,\n        AYMR.strings.sort_by_episode_number to Anime.EPISODE_SORTING_NUMBER,\n        MR.strings.sort_by_upload_date to Anime.EPISODE_SORTING_UPLOAD_DATE,\n        MR.strings.action_sort_alpha to Anime.EPISODE_SORTING_ALPHABET,\n    ).map { (titleRes, mode) ->\n        SortItem(\n            label = stringResource(titleRes),\n            sortDescending = sortDescending.takeIf { sortingMode == mode },\n            onClick = { onItemSelected(mode) },\n        )\n    }\n}\n\n@Composable\nprivate fun ColumnScope.DisplayPage(\n    displayMode: Long,\n    onDisplayModeChanged: (Long) -> Unit,\n    showPreviews: Boolean,\n    onShowPreviewsEnabled: (Long) -> Unit,\n    showSummaries: Boolean,\n    onShowSummariesEnabled: (Long) -> Unit,\n) {\n    listOf(\n        MR.strings.show_title to Anime.EPISODE_DISPLAY_NAME,\n        AYMR.strings.show_episode_number to Anime.EPISODE_DISPLAY_NUMBER,\n    ).map { (titleRes, mode) ->\n        RadioItem(\n            label = stringResource(titleRes),\n            selected = displayMode == mode,\n            onClick = { onDisplayModeChanged(mode) },\n        )\n    }\n    val showPreviewsFlag = if (showPreviews) Anime.EPISODE_SHOW_NOT_PREVIEWS else Anime.EPISODE_SHOW_PREVIEWS\n    CheckboxItem(\n        label = stringResource(AYMR.strings.show_episode_previews),\n        checked = showPreviews,\n        onClick = { onShowPreviewsEnabled(showPreviewsFlag) },\n    )\n    val showSummariesFlag = if (showSummaries) Anime.EPISODE_SHOW_NOT_SUMMARIES else Anime.EPISODE_SHOW_SUMMARIES\n    CheckboxItem(\n        label = stringResource(AYMR.strings.show_episode_summaries),\n        checked = showSummaries,\n        onClick = { onShowSummariesEnabled(showSummariesFlag) },\n    )\n}\n\n@Composable\ninternal fun SetAsDefaultDialog(\n    onDismissRequest: () -> Unit,\n    isEpisode: Boolean = true,\n    onConfirmed: (optionalChecked: Boolean) -> Unit,\n) {\n    var optionalChecked by rememberSaveable { mutableStateOf(false) }\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        title = {\n            Text(\n                text = if (isEpisode) {\n                    stringResource(\n                        AYMR.strings.episode_settings,\n                    )\n                } else {\n                    stringResource(AYMR.strings.season_settings)\n                },\n            )\n        },\n        text = {\n            Column(\n                verticalArrangement = Arrangement.spacedBy(12.dp),\n            ) {\n                Text(text = stringResource(MR.strings.confirm_set_chapter_settings))\n\n                LabeledCheckbox(\n                    label = stringResource(AYMR.strings.also_set_episode_settings_for_library),\n                    checked = optionalChecked,\n                    onCheckedChange = { optionalChecked = it },\n                )\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onConfirmed(optionalChecked)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/SeasonSettingsDialog.kt",
    "content": "package eu.kanade.presentation.entries.anime\n\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.material3.DropdownMenuItem\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.MaterialTheme\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 aniyomi.domain.anime.SeasonDisplayMode\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.anime.model.seasonDownloadedFilter\nimport eu.kanade.presentation.components.TabbedDialog\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.HeadingItem\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.RadioItem\nimport tachiyomi.presentation.core.components.SettingsChipRow\nimport tachiyomi.presentation.core.components.SettingsItemsPaddings\nimport tachiyomi.presentation.core.components.SliderItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun SeasonSettingsDialog(\n    onDismissRequest: () -> Unit,\n    anime: Anime? = null,\n\n    // Filter page\n    onDownloadFilterChanged: (TriState) -> Unit,\n    onUnseenFilterChanged: (TriState) -> Unit,\n    onStartedFilterChanged: (TriState) -> Unit,\n    onCompletedFilterChanged: (TriState) -> Unit,\n    onBookmarkedFilterChanged: (TriState) -> Unit,\n    onFillermarkedFilterChanged: (TriState) -> Unit,\n\n    // Sort page\n    onSortModeChanged: (Long) -> Unit,\n\n    // Display page\n    onDisplayGridModeChanged: (SeasonDisplayMode) -> Unit,\n    onDisplayGridSizeChanged: (Int) -> Unit,\n    onOverlayDownloadedChanged: (Boolean) -> Unit,\n    onOverlayUnseenChanged: (Boolean) -> Unit,\n    onOverlayLocalChanged: (Boolean) -> Unit,\n    onOverlayLangChanged: (Boolean) -> Unit,\n    onOverlayContinueChanged: (Boolean) -> Unit,\n    onDisplayModeChanged: (Long) -> Unit,\n\n    // Overflow action\n    onSetAsDefault: (applyToExistingAnime: Boolean) -> Unit,\n) {\n    var showSetAsDefaultDialog by rememberSaveable { mutableStateOf(false) }\n    if (showSetAsDefaultDialog) {\n        SetAsDefaultDialog(\n            onDismissRequest = { showSetAsDefaultDialog = false },\n            isEpisode = false,\n            onConfirmed = onSetAsDefault,\n        )\n    }\n\n    val downloadedOnly = remember { Injekt.get<BasePreferences>().downloadedOnly().get() }\n\n    TabbedDialog(\n        onDismissRequest = onDismissRequest,\n        tabTitles = persistentListOf(\n            stringResource(MR.strings.action_filter),\n            stringResource(MR.strings.action_sort),\n            stringResource(MR.strings.action_display),\n        ),\n        tabOverflowMenuContent = { closeMenu ->\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) },\n                onClick = {\n                    showSetAsDefaultDialog = true\n                    closeMenu()\n                },\n            )\n        },\n    ) { page ->\n        Column(\n            modifier = Modifier\n                .padding(vertical = TabbedDialogPaddings.Vertical)\n                .verticalScroll(rememberScrollState()),\n        ) {\n            when (page) {\n                0 -> {\n                    SeasonFilterPage(\n                        downloadFilter = anime?.seasonDownloadedFilter ?: TriState.DISABLED,\n                        onDownloadFilterChanged = onDownloadFilterChanged\n                            .takeUnless { downloadedOnly },\n                        unseenFilter = anime?.seasonUnseenFilter ?: TriState.DISABLED,\n                        onUnseenFilterChanged = onUnseenFilterChanged,\n                        startedFilter = anime?.seasonStartedFilter ?: TriState.DISABLED,\n                        onStartedFilterChanged = onStartedFilterChanged,\n                        completedFilter = anime?.seasonCompletedFilter ?: TriState.DISABLED,\n                        onCompletedFilterChanged = onCompletedFilterChanged,\n                        bookmarkedFilter = anime?.seasonBookmarkedFilter ?: TriState.DISABLED,\n                        onBookmarkedFilterChanged = onBookmarkedFilterChanged,\n                        fillermarkedFilter = anime?.seasonFillermarkedFilter ?: TriState.DISABLED,\n                        onFillermarkedFilterChanged = onFillermarkedFilterChanged,\n                    )\n                }\n                1 -> {\n                    SeasonSortPage(\n                        sortingMode = anime?.seasonSorting ?: 0,\n                        sortDescending = anime?.seasonSortDescending() ?: false,\n                        onItemSelected = onSortModeChanged,\n                    )\n                }\n                2 -> {\n                    SeasonDisplayPage(\n                        displayGridMode = anime?.seasonDisplayGridMode ?: SeasonDisplayMode.CompactGrid,\n                        displayGridModeChange = onDisplayGridModeChanged,\n                        displayGridModeSize = anime?.seasonDisplayGridSize ?: 0,\n                        displayGridModeSizeChange = onDisplayGridSizeChanged,\n                        overlayDownloaded = anime?.seasonDownloadedOverlay ?: false,\n                        overlayDownloadedChange = onOverlayDownloadedChanged,\n                        overlayUnseen = anime?.seasonUnseenOverlay ?: true,\n                        overlayUnseenChange = onOverlayUnseenChanged,\n                        overlayLocal = anime?.seasonLocalOverlay ?: true,\n                        overlayLocalChange = onOverlayLocalChanged,\n                        overlayLang = anime?.seasonLangOverlay ?: false,\n                        overlayLangChange = onOverlayLangChanged,\n                        overlayContinue = anime?.seasonContinueOverlay ?: true,\n                        overlayContinueChange = onOverlayContinueChanged,\n                        displayMode = anime?.seasonDisplayMode ?: 0L,\n                        displayModeChange = onDisplayModeChanged,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.SeasonFilterPage(\n    downloadFilter: TriState,\n    onDownloadFilterChanged: ((TriState) -> Unit)?,\n    unseenFilter: TriState,\n    onUnseenFilterChanged: (TriState) -> Unit,\n    startedFilter: TriState,\n    onStartedFilterChanged: (TriState) -> Unit,\n    completedFilter: TriState,\n    onCompletedFilterChanged: (TriState) -> Unit,\n    bookmarkedFilter: TriState,\n    onBookmarkedFilterChanged: (TriState) -> Unit,\n    fillermarkedFilter: TriState,\n    onFillermarkedFilterChanged: (TriState) -> Unit,\n) {\n    TriStateItem(\n        label = stringResource(MR.strings.label_downloaded),\n        state = downloadFilter,\n        onClick = onDownloadFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(AYMR.strings.action_filter_unseen),\n        state = unseenFilter,\n        onClick = onUnseenFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(MR.strings.label_started),\n        state = startedFilter,\n        onClick = onStartedFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(MR.strings.completed),\n        state = completedFilter,\n        onClick = onCompletedFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_bookmarked),\n        state = bookmarkedFilter,\n        onClick = onBookmarkedFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(AYMR.strings.action_filter_fillermarked),\n        state = fillermarkedFilter,\n        onClick = onFillermarkedFilterChanged,\n    )\n}\n\n@Composable\nprivate fun ColumnScope.SeasonSortPage(\n    sortingMode: Long,\n    sortDescending: Boolean,\n    onItemSelected: (Long) -> Unit,\n) {\n    listOf(\n        MR.strings.sort_by_source to Anime.SEASON_SORT_SOURCE,\n        AYMR.strings.sort_by_season_number to Anime.SEASON_SORT_SEASON,\n        MR.strings.sort_by_upload_date to Anime.SEASON_SORT_UPLOAD,\n        MR.strings.action_sort_alpha to Anime.SEASON_SORT_ALPHABET,\n        AYMR.strings.action_sort_unseen_count to Anime.SEASON_SORT_COUNT,\n        AYMR.strings.action_sort_last_seen to Anime.SEASON_SORT_LAST_SEEN,\n        AYMR.strings.action_sort_episode_fetch_date to Anime.SEASON_SORT_FETCHED,\n    ).map { (titleRes, mode) ->\n        SortItem(\n            label = stringResource(titleRes),\n            sortDescending = sortDescending.takeIf { sortingMode == mode },\n            onClick = { onItemSelected(mode) },\n        )\n    }\n}\n\nprivate val displayModes = listOf(\n    MR.strings.action_display_grid to SeasonDisplayMode.CompactGrid,\n    MR.strings.action_display_comfortable_grid to SeasonDisplayMode.ComfortableGrid,\n    MR.strings.action_display_cover_only_grid to SeasonDisplayMode.CoverOnlyGrid,\n    MR.strings.action_display_list to SeasonDisplayMode.List,\n)\n\n@Composable\nprivate fun ColumnScope.SeasonDisplayPage(\n    displayGridMode: SeasonDisplayMode,\n    displayGridModeChange: (SeasonDisplayMode) -> Unit,\n    displayGridModeSize: Int,\n    displayGridModeSizeChange: (Int) -> Unit,\n    overlayDownloaded: Boolean,\n    overlayDownloadedChange: (Boolean) -> Unit,\n    overlayUnseen: Boolean,\n    overlayUnseenChange: (Boolean) -> Unit,\n    overlayLocal: Boolean,\n    overlayLocalChange: (Boolean) -> Unit,\n    overlayLang: Boolean,\n    overlayLangChange: (Boolean) -> Unit,\n    overlayContinue: Boolean,\n    overlayContinueChange: (Boolean) -> Unit,\n    displayMode: Long,\n    displayModeChange: (Long) -> Unit,\n) {\n    SettingsChipRow(MR.strings.action_display_mode) {\n        displayModes.map { (titleRes, mode) ->\n            FilterChip(\n                selected = displayGridMode == mode,\n                onClick = { displayGridModeChange(mode) },\n                label = { Text(stringResource(titleRes)) },\n            )\n        }\n    }\n\n    if (displayGridMode == SeasonDisplayMode.List) {\n        SliderItem(\n            value = displayGridModeSize,\n            valueRange = 0..10,\n            label = stringResource(AYMR.strings.pref_library_rows),\n            valueText = if (displayGridModeSize > 0) {\n                displayGridModeSize.toString()\n            } else {\n                stringResource(MR.strings.label_auto)\n            },\n            onChange = { displayGridModeSizeChange(it) },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    } else {\n        SliderItem(\n            value = displayGridModeSize,\n            valueRange = 0..10,\n            label = stringResource(MR.strings.pref_library_columns),\n            valueText = if (displayGridModeSize > 0) {\n                displayGridModeSize.toString()\n            } else {\n                stringResource(MR.strings.label_auto)\n            },\n            onChange = { displayGridModeSizeChange(it) },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    }\n\n    HeadingItem(MR.strings.overlay_header)\n    LabeledCheckbox(\n        label = stringResource(AYMR.strings.action_display_download_badge_anime),\n        checked = overlayDownloaded,\n        onCheckedChange = overlayDownloadedChange,\n        modifier = Modifier.padding(\n            horizontal = SettingsItemsPaddings.Horizontal,\n        ),\n    )\n    LabeledCheckbox(\n        label = stringResource(AYMR.strings.action_display_unseen_badge),\n        checked = overlayUnseen,\n        onCheckedChange = overlayUnseenChange,\n        modifier = Modifier.padding(\n            horizontal = SettingsItemsPaddings.Horizontal,\n        ),\n    )\n    LabeledCheckbox(\n        label = stringResource(MR.strings.action_display_local_badge),\n        checked = overlayLocal,\n        onCheckedChange = overlayLocalChange,\n        modifier = Modifier.padding(\n            horizontal = SettingsItemsPaddings.Horizontal,\n        ),\n    )\n    LabeledCheckbox(\n        label = stringResource(MR.strings.action_display_language_badge),\n        checked = overlayLang,\n        onCheckedChange = overlayLangChange,\n        modifier = Modifier.padding(\n            horizontal = SettingsItemsPaddings.Horizontal,\n        ),\n    )\n    LabeledCheckbox(\n        label = stringResource(AYMR.strings.action_display_show_continue_watching_button),\n        checked = overlayContinue,\n        onCheckedChange = overlayContinueChange,\n        modifier = Modifier.padding(\n            horizontal = SettingsItemsPaddings.Horizontal,\n        ),\n    )\n\n    HeadingItem(AYMR.strings.action_display_grid_mode)\n    listOf(\n        MR.strings.show_title to Anime.SEASON_DISPLAY_MODE_SOURCE,\n        AYMR.strings.show_season_number to Anime.SEASON_DISPLAY_MODE_NUMBER,\n    ).map { (titleRes, mode) ->\n        RadioItem(\n            label = stringResource(titleRes),\n            selected = displayMode == mode,\n            onClick = { displayModeChange(mode) },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeEpisodeListItem.kt",
    "content": "package eu.kanade.presentation.entries.anime.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.combinedClickable\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.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.Label\nimport androidx.compose.material.icons.automirrored.outlined.LabelOff\nimport androidx.compose.material.icons.filled.Bookmark\nimport androidx.compose.material.icons.outlined.BookmarkAdd\nimport androidx.compose.material.icons.outlined.BookmarkRemove\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.Done\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.FileDownloadOff\nimport androidx.compose.material.icons.outlined.NewLabel\nimport androidx.compose.material.icons.outlined.RemoveDone\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\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.draw.clipToBounds\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport coil3.request.ImageRequest\nimport coil3.request.crossfade\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport me.saket.swipe.SwipeableActionsBox\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport tachiyomi.presentation.core.util.selectedBackground\n\n@Composable\nfun AnimeEpisodeListItem(\n    title: String,\n    date: String?,\n    watchProgress: String?,\n    scanlator: String?,\n    summary: String?,\n    previewUrl: String?,\n    seen: Boolean,\n    bookmark: Boolean,\n    fillermark: Boolean,\n    selected: Boolean,\n    isAnyEpisodeSelected: Boolean,\n    downloadIndicatorEnabled: Boolean,\n    downloadStateProvider: () -> AnimeDownload.State,\n    downloadProgressProvider: () -> Int,\n    episodeSwipeStartAction: LibraryPreferences.EpisodeSwipeAction,\n    episodeSwipeEndAction: LibraryPreferences.EpisodeSwipeAction,\n    onLongClick: () -> Unit,\n    onClick: () -> Unit,\n    onDownloadClick: ((EpisodeDownloadAction) -> Unit)?,\n    onEpisodeSwipe: (LibraryPreferences.EpisodeSwipeAction) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val start = getSwipeAction(\n        action = episodeSwipeStartAction,\n        seen = seen,\n        bookmark = bookmark,\n        fillermark = fillermark,\n        downloadState = downloadStateProvider(),\n        background = MaterialTheme.colorScheme.primaryContainer,\n        onSwipe = { onEpisodeSwipe(episodeSwipeStartAction) },\n    )\n    val end = getSwipeAction(\n        action = episodeSwipeEndAction,\n        seen = seen,\n        bookmark = bookmark,\n        fillermark = fillermark,\n        downloadState = downloadStateProvider(),\n        background = MaterialTheme.colorScheme.primaryContainer,\n        onSwipe = { onEpisodeSwipe(episodeSwipeEndAction) },\n    )\n\n    SwipeableActionsBox(\n        modifier = modifier.clipToBounds(),\n        startActions = listOfNotNull(start),\n        endActions = listOfNotNull(end),\n        swipeThreshold = swipeActionThreshold,\n        backgroundUntilSwipeThreshold = MaterialTheme.colorScheme.surfaceContainerLowest,\n    ) {\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n            modifier = Modifier\n                .selectedBackground(selected)\n                .combinedClickable(\n                    onClick = onClick,\n                    onLongClick = onLongClick,\n                )\n                .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp),\n        ) {\n            if (previewUrl.isNullOrBlank() && summary.isNullOrBlank()) {\n                SimpleEpisodeListItemImpl(\n                    title = title,\n                    date = date,\n                    watchProgress = watchProgress,\n                    fillermark = fillermark,\n                    scanlator = scanlator,\n                    seen = seen,\n                    bookmark = bookmark,\n                    downloadIndicatorEnabled = downloadIndicatorEnabled,\n                    downloadStateProvider = downloadStateProvider,\n                    downloadProgressProvider = downloadProgressProvider,\n                    onDownloadClick = onDownloadClick,\n                )\n                return@Row\n            }\n\n            Column {\n                Row(\n                    horizontalArrangement = Arrangement.spacedBy(2.dp),\n                    verticalAlignment = Alignment.CenterVertically,\n                ) {\n                    EpisodeThumbnail(previewUrl = previewUrl)\n\n                    Column {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            horizontalArrangement = Arrangement.SpaceBetween,\n                            modifier = Modifier.fillMaxWidth(),\n                        ) {\n                            val titleLines = if (previewUrl == null) 1 else 2\n                            Text(\n                                text = title,\n                                style = MaterialTheme.typography.bodyMedium.copy(lineHeight = 14.sp),\n                                modifier = Modifier.weight(1f),\n                                maxLines = titleLines,\n                                minLines = titleLines,\n                                overflow = TextOverflow.Ellipsis,\n                                color = LocalContentColor.current.copy(alpha = if (seen) DISABLED_ALPHA else 1f),\n                            )\n\n                            if (previewUrl == null) {\n                                BookmarkDownloadIcons(\n                                    bookmark = bookmark,\n                                    downloadIndicatorEnabled = downloadIndicatorEnabled,\n                                    downloadStateProvider = downloadStateProvider,\n                                    downloadProgressProvider = downloadProgressProvider,\n                                    onDownloadClick = onDownloadClick,\n                                )\n                            }\n                        }\n\n                        EpisodeSummary(\n                            seen = seen,\n                            isAnyEpisodeSelected = isAnyEpisodeSelected,\n                            summary = summary,\n                        )\n                    }\n                }\n\n                Row(\n                    verticalAlignment = Alignment.CenterVertically,\n                    horizontalArrangement = Arrangement.SpaceBetween,\n                    modifier = Modifier.fillMaxWidth(),\n                ) {\n                    EpisodeInformation(\n                        seen = seen,\n                        date = date,\n                        watchProgress = watchProgress,\n                        fillermark = fillermark,\n                        scanlator = scanlator,\n                    )\n\n                    if (previewUrl != null) {\n                        BookmarkDownloadIcons(\n                            bookmark = bookmark,\n                            downloadIndicatorEnabled = downloadIndicatorEnabled,\n                            downloadStateProvider = downloadStateProvider,\n                            downloadProgressProvider = downloadProgressProvider,\n                            onDownloadClick = onDownloadClick,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun RowScope.SimpleEpisodeListItemImpl(\n    title: String,\n    date: String?,\n    watchProgress: String?,\n    fillermark: Boolean,\n    scanlator: String?,\n    seen: Boolean,\n    bookmark: Boolean,\n    downloadIndicatorEnabled: Boolean,\n    downloadStateProvider: () -> AnimeDownload.State,\n    downloadProgressProvider: () -> Int,\n    onDownloadClick: ((EpisodeDownloadAction) -> Unit)?,\n    modifier: Modifier = Modifier,\n) {\n    Column(\n        modifier = modifier.weight(1f),\n        verticalArrangement = Arrangement.spacedBy(if (fillermark) 0.dp else 6.dp),\n    ) {\n        Text(\n            text = title,\n            style = MaterialTheme.typography.bodyMedium,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            color = LocalContentColor.current.copy(alpha = if (seen) DISABLED_ALPHA else 1f),\n        )\n\n        EpisodeInformation(\n            seen = seen,\n            date = date,\n            watchProgress = watchProgress,\n            fillermark = fillermark,\n            scanlator = scanlator,\n        )\n    }\n\n    BookmarkDownloadIcons(\n        bookmark = bookmark,\n        downloadIndicatorEnabled = downloadIndicatorEnabled,\n        downloadStateProvider = downloadStateProvider,\n        downloadProgressProvider = downloadProgressProvider,\n        onDownloadClick = onDownloadClick,\n    )\n}\n\nprivate fun getSwipeAction(\n    action: LibraryPreferences.EpisodeSwipeAction,\n    seen: Boolean,\n    bookmark: Boolean,\n    fillermark: Boolean,\n    downloadState: AnimeDownload.State,\n    background: Color,\n    onSwipe: () -> Unit,\n): me.saket.swipe.SwipeAction? {\n    return when (action) {\n        LibraryPreferences.EpisodeSwipeAction.ToggleSeen -> swipeAction(\n            icon = if (!seen) Icons.Outlined.Done else Icons.Outlined.RemoveDone,\n            background = background,\n            isUndo = seen,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.EpisodeSwipeAction.ToggleBookmark -> swipeAction(\n            icon = if (!bookmark) Icons.Outlined.BookmarkAdd else Icons.Outlined.BookmarkRemove,\n            background = background,\n            isUndo = bookmark,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.EpisodeSwipeAction.ToggleFillermark -> swipeAction(\n            icon = if (!fillermark) Icons.Outlined.NewLabel else Icons.AutoMirrored.Outlined.LabelOff,\n            background = background,\n            isUndo = fillermark,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.EpisodeSwipeAction.Download -> swipeAction(\n            icon = when (downloadState) {\n                AnimeDownload.State.NOT_DOWNLOADED, AnimeDownload.State.ERROR -> Icons.Outlined.Download\n                AnimeDownload.State.QUEUE, AnimeDownload.State.DOWNLOADING -> Icons.Outlined.FileDownloadOff\n                AnimeDownload.State.DOWNLOADED -> Icons.Outlined.Delete\n            },\n            background = background,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.EpisodeSwipeAction.Disabled -> null\n    }\n}\n\n@Composable\nfun NextEpisodeAiringListItem(\n    title: String,\n    date: String,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier.padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp),\n    ) {\n        Column(modifier = Modifier.weight(1f)) {\n            Row(verticalAlignment = Alignment.CenterVertically) {\n                Text(\n                    text = title,\n                    style = MaterialTheme.typography.bodyMedium.copy(lineHeight = 14.sp),\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    modifier = Modifier.alpha(SECONDARY_ALPHA),\n                    color = MaterialTheme.colorScheme.primary,\n                )\n            }\n            Spacer(modifier = Modifier.height(6.dp))\n            Row(modifier = Modifier.alpha(SECONDARY_ALPHA)) {\n                ProvideTextStyle(\n                    value = MaterialTheme.typography.bodySmall,\n                ) {\n                    Text(\n                        text = date,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                        color = MaterialTheme.colorScheme.primary,\n                    )\n                }\n            }\n        }\n    }\n}\n\nprivate fun swipeAction(\n    onSwipe: () -> Unit,\n    icon: ImageVector,\n    background: Color,\n    isUndo: Boolean = false,\n): me.saket.swipe.SwipeAction {\n    return me.saket.swipe.SwipeAction(\n        icon = {\n            Icon(\n                modifier = Modifier.padding(16.dp),\n                imageVector = icon,\n                tint = contentColorFor(background),\n                contentDescription = null,\n            )\n        },\n        background = background,\n        onSwipe = onSwipe,\n        isUndo = isUndo,\n    )\n}\n\nprivate val swipeActionThreshold = 56.dp\n\n@Composable\nprivate fun EpisodeThumbnail(\n    previewUrl: String?,\n) {\n    val targetWidth = ((LocalConfiguration.current.screenWidthDp * 0.4f).coerceAtMost(250f))\n    if (previewUrl != null) {\n        ItemCover.Thumb(\n            modifier = Modifier\n                .width(targetWidth.dp)\n                .padding(end = 8.dp),\n            data = ImageRequest.Builder(LocalContext.current)\n                .data(previewUrl)\n                .crossfade(true)\n                .build(),\n        )\n    }\n}\n\n@Composable\nprivate fun EpisodeSummary(\n    seen: Boolean,\n    isAnyEpisodeSelected: Boolean,\n    summary: String?,\n) {\n    var expandSummary by remember { mutableStateOf(false) }\n    if (summary != null) {\n        Text(\n            text = summary,\n            style = MaterialTheme.typography.labelMedium,\n            maxLines = if (expandSummary) Int.MAX_VALUE else 3,\n            minLines = 3,\n            fontWeight = FontWeight.Normal,\n            fontSize = 10.sp,\n            lineHeight = 11.sp,\n            overflow = TextOverflow.Ellipsis,\n            color = LocalContentColor.current.copy(\n                alpha = if (seen) DISABLED_ALPHA else SECONDARY_ALPHA,\n            ),\n            modifier = Modifier.padding(bottom = 4.dp, start = 4.dp, end = 4.dp)\n                .then(\n                    if (isAnyEpisodeSelected) {\n                        Modifier\n                    } else {\n                        Modifier.clickable { expandSummary = !expandSummary }\n                    },\n                ),\n        )\n    }\n}\n\n@Composable\nprivate fun EpisodeInformation(\n    seen: Boolean,\n    date: String?,\n    watchProgress: String?,\n    fillermark: Boolean,\n    scanlator: String?,\n) {\n    Row(verticalAlignment = Alignment.CenterVertically) {\n        val subtitleStyle = MaterialTheme.typography.bodySmall\n            .merge(color = LocalContentColor.current.copy(alpha = if (seen) DISABLED_ALPHA else SECONDARY_ALPHA))\n        ProvideTextStyle(value = subtitleStyle) {\n            if (fillermark) {\n                Icon(\n                    imageVector = Icons.AutoMirrored.Filled.Label,\n                    contentDescription = stringResource(AYMR.strings.filler),\n                    tint = MaterialTheme.colorScheme.tertiary.copy(alpha = subtitleStyle.alpha),\n                    modifier = Modifier.padding(end = 4.dp),\n                )\n                Text(\n                    text = stringResource(AYMR.strings.filler),\n                    maxLines = 1,\n                    color = MaterialTheme.colorScheme.tertiary.copy(alpha = subtitleStyle.alpha),\n                    modifier = Modifier.padding(end = 4.dp),\n                )\n            }\n            if (date != null) {\n                Text(\n                    text = date,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                )\n                if (watchProgress != null || scanlator != null) DotSeparatorText()\n            }\n            if (watchProgress != null) {\n                Text(\n                    text = watchProgress,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    color = LocalContentColor.current.copy(alpha = DISABLED_ALPHA),\n                )\n                if (scanlator != null) DotSeparatorText()\n            }\n            if (scanlator != null) {\n                Text(\n                    text = scanlator,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun BookmarkDownloadIcons(\n    bookmark: Boolean,\n    downloadIndicatorEnabled: Boolean,\n    downloadStateProvider: () -> AnimeDownload.State,\n    downloadProgressProvider: () -> Int,\n    onDownloadClick: ((EpisodeDownloadAction) -> Unit)?,\n) {\n    Row(verticalAlignment = Alignment.CenterVertically) {\n        if (bookmark) {\n            Icon(\n                imageVector = Icons.Filled.Bookmark,\n                contentDescription = stringResource(MR.strings.action_filter_bookmarked),\n                modifier = Modifier\n                    .secondaryItemAlpha()\n                    .padding(start = 4.dp),\n                tint = MaterialTheme.colorScheme.primary,\n            )\n        }\n\n        EpisodeDownloadIndicator(\n            enabled = downloadIndicatorEnabled,\n            modifier = Modifier\n                .padding(start = 4.dp),\n            downloadStateProvider = downloadStateProvider,\n            downloadProgressProvider = downloadProgressProvider,\n            onClick = { onDownloadClick?.invoke(it) },\n        )\n    }\n}\n\n@Preview\n@Composable\nfun AnimeEpisodeListItemPreview() {\n    AnimeEpisodeListItem(\n        title = \"Ep. 1 - To You, 2000 Years in the Future: The Fall of Zhiganshina (1)\",\n        date = \"7/4/13\",\n        watchProgress = null,\n        scanlator = null,\n        summary = \"As Titans continue to rampage, the townspeople gather at the inner gate. But a new Titan breaks \" +\n            \"through and this one is unlike the others. Source: crunchyroll\",\n        previewUrl = null,\n        seen = false,\n        bookmark = false,\n        fillermark = true,\n        selected = false,\n        isAnyEpisodeSelected = false,\n        downloadIndicatorEnabled = true,\n        downloadStateProvider = { AnimeDownload.State.NOT_DOWNLOADED },\n        downloadProgressProvider = { 0 },\n        episodeSwipeStartAction = LibraryPreferences.EpisodeSwipeAction.Disabled,\n        episodeSwipeEndAction = LibraryPreferences.EpisodeSwipeAction.Disabled,\n        onLongClick = {},\n        onClick = {},\n        onDownloadClick = {},\n        onEpisodeSwipe = {},\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeImagesDialog.kt",
    "content": "package eu.kanade.presentation.entries.anime.components\n\nimport android.graphics.Bitmap\nimport android.graphics.drawable.BitmapDrawable\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\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.navigationBarsPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.KeyboardArrowLeft\nimport androidx.compose.material.icons.automirrored.outlined.KeyboardArrowRight\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material.icons.outlined.Share\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\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.rememberCoroutineScope\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.platform.LocalDensity\nimport androidx.compose.ui.unit.DpOffset\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.viewinterop.AndroidView\nimport androidx.compose.ui.window.Dialog\nimport androidx.compose.ui.window.DialogProperties\nimport androidx.core.view.updatePadding\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.CachePolicy\nimport coil3.request.ImageRequest\nimport coil3.size.Size\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.entries.EditCoverAction\nimport eu.kanade.tachiyomi.data.coil.useBackground\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.clickableNoIndication\n\n@Composable\nfun AnimeImagesDialog(\n    anime: Anime,\n    isCustomCover: Boolean,\n    isCustomBackground: Boolean,\n    snackbarHostState: SnackbarHostState,\n    pagerState: PagerState,\n    onShareClick: () -> Unit,\n    onSaveClick: () -> Unit,\n    onEditClick: ((EditCoverAction) -> Unit)?,\n    onDismissRequest: () -> Unit,\n) {\n    val scope = rememberCoroutineScope()\n    val isCover = pagerState.currentPage != 1\n\n    val arrowIcon = if (isCover) {\n        Icons.AutoMirrored.Outlined.KeyboardArrowRight\n    } else {\n        Icons.AutoMirrored.Outlined.KeyboardArrowLeft\n    }\n\n    val (editImageStringResource, alternateImageStringResource) = if (isCover) {\n        MR.strings.action_edit_cover to AYMR.strings.action_edit_background\n    } else {\n        AYMR.strings.action_edit_background to MR.strings.action_edit_cover\n    }\n\n    val onImageSwitchClicked: () -> Unit = {\n        scope.launchUI {\n            pagerState.animateScrollToPage(1 - pagerState.currentPage)\n        }\n    }\n\n    Dialog(\n        onDismissRequest = onDismissRequest,\n        properties = DialogProperties(\n            usePlatformDefaultWidth = false,\n            decorFitsSystemWindows = false, // Doesn't work https://issuetracker.google.com/issues/246909281\n        ),\n    ) {\n        Scaffold(\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n            containerColor = Color.Transparent,\n            bottomBar = {\n                Row(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .padding(4.dp)\n                        .navigationBarsPadding(),\n                ) {\n                    ActionsPill {\n                        IconButton(onClick = onDismissRequest) {\n                            Icon(\n                                imageVector = Icons.Outlined.Close,\n                                contentDescription = stringResource(MR.strings.action_close),\n                            )\n                        }\n                        IconButton(onClick = onImageSwitchClicked) {\n                            Icon(\n                                imageVector = arrowIcon,\n                                contentDescription = stringResource(alternateImageStringResource),\n                            )\n                        }\n                    }\n                    Spacer(modifier = Modifier.weight(1f))\n                    ActionsPill {\n                        AppBarActions(\n                            actions = persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_share),\n                                    icon = Icons.Outlined.Share,\n                                    onClick = onShareClick,\n                                ),\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_save),\n                                    icon = Icons.Outlined.Save,\n                                    onClick = onSaveClick,\n                                ),\n                            ),\n                        )\n                        if (onEditClick != null) {\n                            Box {\n                                var expanded by remember { mutableStateOf(false) }\n                                IconButton(\n                                    onClick = {\n                                        if ((isCover && isCustomCover) || (!isCover && isCustomBackground)) {\n                                            expanded = true\n                                        } else {\n                                            onEditClick(EditCoverAction.EDIT)\n                                        }\n                                    },\n                                ) {\n                                    Icon(\n                                        imageVector = Icons.Outlined.Edit,\n                                        contentDescription = stringResource(editImageStringResource),\n                                    )\n                                }\n                                DropdownMenu(\n                                    expanded = expanded,\n                                    onDismissRequest = { expanded = false },\n                                    offset = DpOffset(8.dp, 0.dp),\n                                ) {\n                                    DropdownMenuItem(\n                                        text = { Text(text = stringResource(MR.strings.action_edit)) },\n                                        onClick = {\n                                            onEditClick(EditCoverAction.EDIT)\n                                            expanded = false\n                                        },\n                                    )\n                                    DropdownMenuItem(\n                                        text = { Text(text = stringResource(MR.strings.action_delete)) },\n                                        onClick = {\n                                            onEditClick(EditCoverAction.DELETE)\n                                            expanded = false\n                                        },\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            },\n        ) { contentPadding ->\n            val statusBarPaddingPx = with(LocalDensity.current) { contentPadding.calculateTopPadding().roundToPx() }\n            val bottomPaddingPx = with(LocalDensity.current) { contentPadding.calculateBottomPadding().roundToPx() }\n\n            Box(\n                modifier = Modifier\n                    .fillMaxSize()\n                    .clickableNoIndication(onClick = onDismissRequest),\n            ) {\n                HorizontalPager(\n                    state = pagerState,\n                ) { page ->\n                    AndroidView(\n                        factory = {\n                            ReaderPageImageView(it).apply {\n                                onViewClicked = onDismissRequest\n                                clipToPadding = false\n                                clipChildren = false\n                            }\n                        },\n                        update = { view ->\n                            val context = view.context\n                            val request = ImageRequest.Builder(context)\n                                .data(anime)\n                                .useBackground(page == 1)\n                                .size(Size.ORIGINAL)\n                                .memoryCachePolicy(CachePolicy.DISABLED)\n                                .target { image ->\n                                    val drawable = image.asDrawable(context.resources)\n                                    // Copy bitmap in case it came from memory cache\n                                    // Because SSIV needs to thoroughly read the image\n                                    val copy = (drawable as? BitmapDrawable)?.let {\n                                        BitmapDrawable(\n                                            context.resources,\n                                            it.bitmap.copy(Bitmap.Config.HARDWARE, false),\n                                        )\n                                    } ?: drawable\n                                    view.setImage(copy, ReaderPageImageView.Config(zoomDuration = 500))\n                                }\n                                .build()\n                            context.imageLoader.enqueue(request)\n                            view.updatePadding(top = statusBarPaddingPx, bottom = bottomPaddingPx)\n                        },\n                        modifier = Modifier.fillMaxSize(),\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ActionsPill(content: @Composable () -> Unit) {\n    Row(\n        modifier = Modifier\n            .clip(MaterialTheme.shapes.extraLarge)\n            .background(MaterialTheme.colorScheme.background.copy(alpha = 0.95f)),\n    ) {\n        content()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeInfoHeader.kt",
    "content": "package eu.kanade.presentation.entries.anime.components\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.spring\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\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.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.Spacer\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.sizeIn\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.text.selection.SelectionContainer\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Brush\nimport androidx.compose.material.icons.filled.Favorite\nimport androidx.compose.material.icons.filled.HourglassEmpty\nimport androidx.compose.material.icons.filled.PersonOutline\nimport androidx.compose.material.icons.filled.Warning\nimport androidx.compose.material.icons.outlined.AttachMoney\nimport androidx.compose.material.icons.outlined.Block\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material.icons.outlined.Done\nimport androidx.compose.material.icons.outlined.DoneAll\nimport androidx.compose.material.icons.outlined.FavoriteBorder\nimport androidx.compose.material.icons.outlined.Pause\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Schedule\nimport androidx.compose.material.icons.outlined.Sync\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.LocalMinimumInteractiveComponentSize\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.SuggestionChip\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\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.alpha\nimport androidx.compose.ui.draw.blur\nimport androidx.compose.ui.draw.clipToBounds\nimport androidx.compose.ui.draw.drawWithContent\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.layout.Layout\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.Constraints\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport coil3.compose.AsyncImage\nimport coil3.request.ImageRequest\nimport coil3.request.crossfade\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.coil.useBackground\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.TextButton\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.clickableNoIndication\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport java.time.Instant\nimport java.time.temporal.ChronoUnit\nimport kotlin.math.roundToInt\n\nprivate val whitespaceLineRegex = Regex(\"[\\\\r\\\\n]{2,}\", setOf(RegexOption.MULTILINE))\n\n@Composable\nfun AnimeInfoBox(\n    isTabletUi: Boolean,\n    appBarPadding: Dp,\n    anime: Anime,\n    sourceName: String,\n    isStubSource: Boolean,\n    onCoverClick: () -> Unit,\n    doSearch: (query: String, global: Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Box(modifier = modifier) {\n        // Backdrop\n        val backdropGradientColors = listOf(\n            Color.Transparent,\n            MaterialTheme.colorScheme.background,\n        )\n        AsyncImage(\n            model = ImageRequest.Builder(LocalContext.current)\n                .data(anime)\n                .useBackground(true)\n                .crossfade(true)\n                .build(),\n            contentDescription = null,\n            contentScale = ContentScale.Crop,\n            modifier = Modifier\n                .matchParentSize()\n                .drawWithContent {\n                    drawContent()\n                    drawRect(\n                        brush = Brush.verticalGradient(colors = backdropGradientColors),\n                    )\n                }\n                .blur(4.dp)\n                .alpha(0.2f),\n        )\n\n        // Anime & source info\n        CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) {\n            if (!isTabletUi) {\n                AnimeAndSourceTitlesSmall(\n                    appBarPadding = appBarPadding,\n                    anime = anime,\n                    sourceName = sourceName,\n                    isStubSource = isStubSource,\n                    onCoverClick = onCoverClick,\n                    doSearch = doSearch,\n                )\n            } else {\n                AnimeAndSourceTitlesLarge(\n                    appBarPadding = appBarPadding,\n                    anime = anime,\n                    sourceName = sourceName,\n                    isStubSource = isStubSource,\n                    onCoverClick = onCoverClick,\n                    doSearch = doSearch,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun AnimeActionRow(\n    favorite: Boolean,\n    trackingCount: Int,\n    nextUpdate: Instant?,\n    isUserIntervalMode: Boolean,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: (() -> Unit)?,\n    onEditIntervalClicked: (() -> Unit)?,\n    onEditCategory: (() -> Unit)?,\n    modifier: Modifier = Modifier,\n) {\n    val defaultActionButtonColor = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA)\n\n    // TODO: show something better when using custom interval\n    val nextUpdateDays = remember(nextUpdate) {\n        return@remember if (nextUpdate != null) {\n            val now = Instant.now()\n            now.until(nextUpdate, ChronoUnit.DAYS).toInt().coerceAtLeast(0)\n        } else {\n            null\n        }\n    }\n\n    Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) {\n        AnimeActionButton(\n            title = if (favorite) {\n                stringResource(MR.strings.in_library)\n            } else {\n                stringResource(MR.strings.add_to_library)\n            },\n            icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder,\n            color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor,\n            onClick = onAddToLibraryClicked,\n            onLongClick = onEditCategory,\n        )\n        AnimeActionButton(\n            title = when (nextUpdateDays) {\n                null -> stringResource(MR.strings.not_applicable)\n                0 -> stringResource(MR.strings.manga_interval_expected_update_soon)\n                else -> pluralStringResource(\n                    MR.plurals.day,\n                    count = nextUpdateDays,\n                    nextUpdateDays,\n                )\n            },\n            icon = Icons.Default.HourglassEmpty,\n            color = if (isUserIntervalMode) MaterialTheme.colorScheme.primary else defaultActionButtonColor,\n            onClick = { onEditIntervalClicked?.invoke() },\n        )\n        if (onTrackingClicked != null) {\n            AnimeActionButton(\n                title = if (trackingCount == 0) {\n                    stringResource(MR.strings.manga_tracking_tab)\n                } else {\n                    pluralStringResource(MR.plurals.num_trackers, count = trackingCount, trackingCount)\n                },\n                icon = if (trackingCount == 0) Icons.Outlined.Sync else Icons.Outlined.Done,\n                color = if (trackingCount == 0) defaultActionButtonColor else MaterialTheme.colorScheme.primary,\n                onClick = onTrackingClicked,\n            )\n        }\n\n        if (onWebViewClicked != null) {\n            AnimeActionButton(\n                title = stringResource(MR.strings.action_web_view),\n                icon = Icons.Outlined.Public,\n                color = defaultActionButtonColor,\n                onClick = onWebViewClicked,\n                onLongClick = onWebViewLongClicked,\n            )\n        }\n    }\n}\n\n@Composable\nfun ExpandableAnimeDescription(\n    defaultExpandState: Boolean,\n    description: String?,\n    tagsProvider: () -> List<String>?,\n    onTagSearch: (String) -> Unit,\n    onCopyTagToClipboard: (tag: String) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Column(modifier = modifier) {\n        val (expanded, onExpanded) = rememberSaveable {\n            mutableStateOf(defaultExpandState)\n        }\n        val desc =\n            description.takeIf { !it.isNullOrBlank() } ?: stringResource(\n                MR.strings.description_placeholder,\n            )\n        val trimmedDescription = remember(desc) {\n            desc\n                .replace(whitespaceLineRegex, \"\\n\")\n                .trimEnd()\n        }\n        AnimeSummary(\n            expandedDescription = desc,\n            shrunkDescription = trimmedDescription,\n            expanded = expanded,\n            modifier = Modifier\n                .padding(top = 8.dp)\n                .padding(horizontal = 16.dp)\n                .clickableNoIndication { onExpanded(!expanded) },\n        )\n        val tags = tagsProvider()\n        if (!tags.isNullOrEmpty()) {\n            Box(\n                modifier = Modifier\n                    .padding(top = 8.dp)\n                    .padding(vertical = 12.dp)\n                    .animateContentSize(animationSpec = spring())\n                    .fillMaxWidth(),\n            ) {\n                var showMenu by remember { mutableStateOf(false) }\n                var tagSelected by remember { mutableStateOf(\"\") }\n                DropdownMenu(\n                    expanded = showMenu,\n                    onDismissRequest = { showMenu = false },\n                ) {\n                    DropdownMenuItem(\n                        text = { Text(text = stringResource(MR.strings.action_search)) },\n                        onClick = {\n                            onTagSearch(tagSelected)\n                            showMenu = false\n                        },\n                    )\n                    DropdownMenuItem(\n                        text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) },\n                        onClick = {\n                            onCopyTagToClipboard(tagSelected)\n                            showMenu = false\n                        },\n                    )\n                }\n                if (expanded) {\n                    FlowRow(\n                        modifier = Modifier.padding(horizontal = 16.dp),\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                    ) {\n                        tags.forEach {\n                            TagsChip(\n                                modifier = DefaultTagChipModifier,\n                                text = it,\n                                onClick = {\n                                    tagSelected = it\n                                    showMenu = true\n                                },\n                            )\n                        }\n                    }\n                } else {\n                    LazyRow(\n                        contentPadding = PaddingValues(horizontal = MaterialTheme.padding.medium),\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                    ) {\n                        items(items = tags) {\n                            TagsChip(\n                                modifier = DefaultTagChipModifier,\n                                text = it,\n                                onClick = {\n                                    tagSelected = it\n                                    showMenu = true\n                                },\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeAndSourceTitlesLarge(\n    appBarPadding: Dp,\n    anime: Anime,\n    sourceName: String,\n    isStubSource: Boolean,\n    onCoverClick: () -> Unit,\n    doSearch: (query: String, global: Boolean) -> Unit,\n) {\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(start = 16.dp, top = appBarPadding + 16.dp, end = 16.dp),\n        horizontalAlignment = Alignment.CenterHorizontally,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier.fillMaxWidth(0.65f),\n            data = ImageRequest.Builder(LocalContext.current)\n                .data(anime)\n                .crossfade(true)\n                .build(),\n            contentDescription = stringResource(MR.strings.manga_cover),\n            onClick = onCoverClick,\n        )\n        Spacer(modifier = Modifier.height(16.dp))\n        AnimeContentInfo(\n            title = anime.title,\n            author = anime.author,\n            artist = anime.artist,\n            status = anime.status,\n            sourceName = sourceName,\n            isStubSource = isStubSource,\n            doSearch = doSearch,\n            textAlign = TextAlign.Center,\n        )\n    }\n}\n\n@Composable\nprivate fun AnimeAndSourceTitlesSmall(\n    appBarPadding: Dp,\n    anime: Anime,\n    sourceName: String,\n    isStubSource: Boolean,\n    onCoverClick: () -> Unit,\n    doSearch: (query: String, global: Boolean) -> Unit,\n) {\n    Row(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(start = 16.dp, top = appBarPadding + 16.dp, end = 16.dp),\n        horizontalArrangement = Arrangement.spacedBy(16.dp),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier\n                .sizeIn(maxWidth = 100.dp)\n                .align(Alignment.Top),\n            data = ImageRequest.Builder(LocalContext.current)\n                .data(anime)\n                .crossfade(true)\n                .build(),\n            contentDescription = stringResource(MR.strings.manga_cover),\n            onClick = onCoverClick,\n        )\n        Column(\n            verticalArrangement = Arrangement.spacedBy(2.dp),\n        ) {\n            AnimeContentInfo(\n                title = anime.title,\n                author = anime.author,\n                artist = anime.artist,\n                status = anime.status,\n                sourceName = sourceName,\n                isStubSource = isStubSource,\n                doSearch = doSearch,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.AnimeContentInfo(\n    title: String,\n    author: String?,\n    artist: String?,\n    status: Long,\n    sourceName: String,\n    isStubSource: Boolean,\n    doSearch: (query: String, global: Boolean) -> Unit,\n    textAlign: TextAlign? = LocalTextStyle.current.textAlign,\n) {\n    val context = LocalContext.current\n    Text(\n        text = title.ifBlank { stringResource(MR.strings.unknown_title) },\n        style = MaterialTheme.typography.titleLarge,\n        modifier = Modifier.clickableNoIndication(\n            onLongClick = {\n                if (title.isNotBlank()) {\n                    context.copyToClipboard(\n                        title,\n                        title,\n                    )\n                }\n            },\n            onClick = { if (title.isNotBlank()) doSearch(title, true) },\n        ),\n        textAlign = textAlign,\n    )\n\n    Spacer(modifier = Modifier.height(2.dp))\n\n    Row(\n        modifier = Modifier.secondaryItemAlpha(),\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Icon(\n            imageVector = Icons.Filled.PersonOutline,\n            contentDescription = null,\n            modifier = Modifier.size(16.dp),\n        )\n        Text(\n            text = author?.takeIf { it.isNotBlank() }\n                ?: stringResource(MR.strings.unknown_author),\n            style = MaterialTheme.typography.titleSmall,\n            modifier = Modifier\n                .clickableNoIndication(\n                    onLongClick = {\n                        if (!author.isNullOrBlank()) {\n                            context.copyToClipboard(\n                                author,\n                                author,\n                            )\n                        }\n                    },\n                    onClick = { if (!author.isNullOrBlank()) doSearch(author, true) },\n                ),\n            textAlign = textAlign,\n        )\n    }\n\n    if (!artist.isNullOrBlank() && author != artist) {\n        Row(\n            modifier = Modifier.secondaryItemAlpha(),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Filled.Brush,\n                contentDescription = null,\n                modifier = Modifier.size(16.dp),\n            )\n            Text(\n                text = artist,\n                style = MaterialTheme.typography.titleSmall,\n                modifier = Modifier\n                    .clickableNoIndication(\n                        onLongClick = { context.copyToClipboard(artist, artist) },\n                        onClick = { doSearch(artist, true) },\n                    ),\n                textAlign = textAlign,\n            )\n        }\n    }\n\n    Spacer(modifier = Modifier.height(2.dp))\n\n    Row(\n        modifier = Modifier.secondaryItemAlpha(),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Icon(\n            imageVector = when (status) {\n                SAnime.ONGOING.toLong() -> Icons.Outlined.Schedule\n                SAnime.COMPLETED.toLong() -> Icons.Outlined.DoneAll\n                SAnime.LICENSED.toLong() -> Icons.Outlined.AttachMoney\n                SAnime.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done\n                SAnime.CANCELLED.toLong() -> Icons.Outlined.Close\n                SAnime.ON_HIATUS.toLong() -> Icons.Outlined.Pause\n                else -> Icons.Outlined.Block\n            },\n            contentDescription = null,\n            modifier = Modifier\n                .padding(end = 4.dp)\n                .size(16.dp),\n        )\n        ProvideTextStyle(MaterialTheme.typography.bodyMedium) {\n            Text(\n                text = when (status) {\n                    SAnime.ONGOING.toLong() -> stringResource(MR.strings.ongoing)\n                    SAnime.COMPLETED.toLong() -> stringResource(MR.strings.completed)\n                    SAnime.LICENSED.toLong() -> stringResource(MR.strings.licensed)\n                    SAnime.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished)\n                    SAnime.CANCELLED.toLong() -> stringResource(MR.strings.cancelled)\n                    SAnime.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus)\n                    else -> stringResource(MR.strings.unknown)\n                },\n                overflow = TextOverflow.Ellipsis,\n                maxLines = 1,\n            )\n            DotSeparatorText()\n            if (isStubSource) {\n                Icon(\n                    imageVector = Icons.Filled.Warning,\n                    contentDescription = null,\n                    modifier = Modifier\n                        .padding(end = 4.dp)\n                        .size(16.dp),\n                    tint = MaterialTheme.colorScheme.error,\n                )\n            }\n            Text(\n                text = sourceName,\n                modifier = Modifier.clickableNoIndication {\n                    doSearch(\n                        sourceName,\n                        false,\n                    )\n                },\n                overflow = TextOverflow.Ellipsis,\n                maxLines = 1,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeSummary(\n    expandedDescription: String,\n    shrunkDescription: String,\n    expanded: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    val animProgress by animateFloatAsState(if (expanded) 1f else 0f)\n    Layout(\n        modifier = modifier.clipToBounds(),\n        contents = listOf(\n            {\n                Text(\n                    text = \"\\n\\n\", // Shows at least 3 lines\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n            },\n            {\n                Text(\n                    text = expandedDescription,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n            },\n            {\n                SelectionContainer {\n                    Text(\n                        text = if (expanded) expandedDescription else shrunkDescription,\n                        maxLines = Int.MAX_VALUE,\n                        style = MaterialTheme.typography.bodyMedium,\n                        color = MaterialTheme.colorScheme.onBackground,\n                        modifier = Modifier.secondaryItemAlpha(),\n                    )\n                }\n            },\n            {\n                val colors = listOf(Color.Transparent, MaterialTheme.colorScheme.background)\n                Box(\n                    modifier = Modifier.background(Brush.verticalGradient(colors = colors)),\n                    contentAlignment = Alignment.Center,\n                ) {\n                    val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down)\n                    Icon(\n                        painter = rememberAnimatedVectorPainter(image, !expanded),\n                        contentDescription = stringResource(\n                            if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand,\n                        ),\n                        tint = MaterialTheme.colorScheme.onBackground,\n                        modifier = Modifier.background(Brush.radialGradient(colors = colors.asReversed())),\n                    )\n                }\n            },\n        ),\n    ) { (shrunk, expanded, actual, scrim), constraints ->\n        val shrunkHeight = shrunk.single()\n            .measure(constraints)\n            .height\n        val expandedHeight = expanded.single()\n            .measure(constraints)\n            .height\n        val heightDelta = expandedHeight - shrunkHeight\n        val scrimHeight = 24.dp.roundToPx()\n\n        val actualPlaceable = actual.single()\n            .measure(constraints)\n        val scrimPlaceable = scrim.single()\n            .measure(Constraints.fixed(width = constraints.maxWidth, height = scrimHeight))\n\n        val currentHeight = shrunkHeight + ((heightDelta + scrimHeight) * animProgress).roundToInt()\n        layout(constraints.maxWidth, currentHeight) {\n            actualPlaceable.place(0, 0)\n\n            val scrimY = currentHeight - scrimHeight\n            scrimPlaceable.place(0, scrimY)\n        }\n    }\n}\n\nprivate val DefaultTagChipModifier = Modifier.padding(vertical = 4.dp)\n\n@Composable\nprivate fun TagsChip(\n    text: String,\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit,\n) {\n    CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides 0.dp) {\n        SuggestionChip(\n            modifier = modifier,\n            onClick = onClick,\n            label = { Text(text = text, style = MaterialTheme.typography.bodySmall) },\n        )\n    }\n}\n\n@Composable\nprivate fun RowScope.AnimeActionButton(\n    title: String,\n    icon: ImageVector,\n    color: Color,\n    onClick: () -> Unit,\n    onLongClick: (() -> Unit)? = null,\n) {\n    TextButton(\n        onClick = onClick,\n        modifier = Modifier.weight(1f),\n        onLongClick = onLongClick,\n    ) {\n        Column(horizontalAlignment = Alignment.CenterHorizontally) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                tint = color,\n                modifier = Modifier.size(20.dp),\n            )\n            Spacer(Modifier.height(4.dp))\n            Text(\n                text = title,\n                color = color,\n                fontSize = 12.sp,\n                textAlign = TextAlign.Center,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeSeasonListItem.kt",
    "content": "package eu.kanade.presentation.entries.anime.components\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport aniyomi.domain.anime.SeasonAnime\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport eu.kanade.presentation.library.components.EntryCompactGridItem\nimport eu.kanade.presentation.library.components.EntryListItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.presentation.util.formatEpisodeNumber\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeSeasonItem\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun AnimeSeasonListItem(\n    anime: Anime,\n    item: AnimeSeasonItem,\n    containerHeight: Int,\n    onSeasonClicked: (SeasonAnime) -> Unit,\n    onClickContinueWatching: ((SeasonAnime) -> Unit)?,\n    listItemModifier: Modifier = Modifier,\n) {\n    val itemAnime = item.seasonAnime.anime\n    val title = if (anime.seasonDisplayMode == Anime.SEASON_DISPLAY_MODE_NUMBER) {\n        stringResource(\n            AYMR.strings.display_mode_season,\n            formatEpisodeNumber(itemAnime.seasonNumber),\n        )\n    } else {\n        itemAnime.title\n    }\n\n    when (anime.seasonDisplayGridMode) {\n        SeasonDisplayMode.ComfortableGrid -> {\n            EntryComfortableGridItem(\n                title = title,\n                coverData = AnimeCover(\n                    animeId = itemAnime.id,\n                    sourceId = itemAnime.source,\n                    isAnimeFavorite = itemAnime.favorite,\n                    url = itemAnime.thumbnailUrl,\n                    lastModified = itemAnime.coverLastModified,\n                ),\n                coverBadgeStart = {\n                    DownloadsBadge(count = item.downloadCount)\n                    UnviewedBadge(count = item.unseenCount)\n                },\n                coverBadgeEnd = {\n                    LanguageBadge(\n                        isLocal = item.isLocal,\n                        sourceLanguage = item.sourceLanguage,\n                    )\n                },\n                onLongClick = { onSeasonClicked(item.seasonAnime) },\n                onClick = { onSeasonClicked(item.seasonAnime) },\n                onClickContinueViewing = if (onClickContinueWatching != null && item.showContinueOverlay) {\n                    { onClickContinueWatching(item.seasonAnime) }\n                } else {\n                    null\n                },\n            )\n        }\n        SeasonDisplayMode.CompactGrid, SeasonDisplayMode.CoverOnlyGrid -> {\n            EntryCompactGridItem(\n                title = title.takeIf { anime.seasonDisplayGridMode is SeasonDisplayMode.CompactGrid },\n                coverData = AnimeCover(\n                    animeId = itemAnime.id,\n                    sourceId = itemAnime.source,\n                    isAnimeFavorite = itemAnime.favorite,\n                    url = itemAnime.thumbnailUrl,\n                    lastModified = itemAnime.coverLastModified,\n                ),\n                coverBadgeStart = {\n                    DownloadsBadge(count = item.downloadCount)\n                    UnviewedBadge(count = item.unseenCount)\n                },\n                coverBadgeEnd = {\n                    LanguageBadge(\n                        isLocal = item.isLocal,\n                        sourceLanguage = item.sourceLanguage,\n                    )\n                },\n                onLongClick = { onSeasonClicked(item.seasonAnime) },\n                onClick = { onSeasonClicked(item.seasonAnime) },\n                onClickContinueViewing = if (onClickContinueWatching != null && item.showContinueOverlay) {\n                    { onClickContinueWatching(item.seasonAnime) }\n                } else {\n                    null\n                },\n            )\n        }\n        SeasonDisplayMode.List -> {\n            EntryListItem(\n                title = title,\n                coverData = AnimeCover(\n                    animeId = itemAnime.id,\n                    sourceId = itemAnime.source,\n                    isAnimeFavorite = itemAnime.favorite,\n                    url = itemAnime.thumbnailUrl,\n                    lastModified = itemAnime.coverLastModified,\n                ),\n                badge = {\n                    DownloadsBadge(count = item.downloadCount)\n                    UnviewedBadge(count = item.unseenCount)\n                    LanguageBadge(\n                        isLocal = item.isLocal,\n                        sourceLanguage = item.sourceLanguage,\n                    )\n                },\n                onLongClick = { onSeasonClicked(item.seasonAnime) },\n                onClick = { onSeasonClicked(item.seasonAnime) },\n                onClickContinueViewing = if (onClickContinueWatching != null && item.showContinueOverlay) {\n                    { onClickContinueWatching(item.seasonAnime) }\n                } else {\n                    null\n                },\n                entries = anime.seasonDisplayGridSize,\n                containerHeight = containerHeight,\n                modifier = listItemModifier,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/components/BaseAnimeListItem.kt",
    "content": "package eu.kanade.presentation.entries.anime.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun BaseAnimeListItem(\n    anime: Anime,\n    modifier: Modifier = Modifier,\n    onClickItem: () -> Unit = {},\n    onClickCover: () -> Unit = onClickItem,\n    cover: @Composable RowScope.() -> Unit = { defaultCover(anime, onClickCover) },\n    actions: @Composable RowScope.() -> Unit = {},\n    content: @Composable RowScope.() -> Unit = { defaultContent(anime) },\n) {\n    Row(\n        modifier = modifier\n            .clickable(onClick = onClickItem)\n            .height(76.dp)\n            .padding(horizontal = MaterialTheme.padding.medium, vertical = 3.dp),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        cover()\n        content()\n        actions()\n    }\n}\n\nprivate val defaultCover: @Composable RowScope.(Anime, () -> Unit) -> Unit = { anime, onClick ->\n    ItemCover.Book(\n        modifier = Modifier\n            .fillMaxHeight(),\n        data = anime,\n        onClick = onClick,\n    )\n}\n\nprivate val defaultContent: @Composable RowScope.(Anime) -> Unit = {\n    Box(modifier = Modifier.weight(1f)) {\n        Text(\n            text = it.title,\n            modifier = Modifier\n                .padding(start = MaterialTheme.padding.medium),\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/anime/components/EpisodeDownloadIndicator.kt",
    "content": "package eu.kanade.presentation.entries.anime.components\n\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material.icons.outlined.ArrowDownward\nimport androidx.compose.material.icons.outlined.ErrorOutline\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProgressIndicatorDefaults\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.StrokeCap\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.ArrowModifier\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.components.IndicatorModifier\nimport eu.kanade.presentation.components.IndicatorSize\nimport eu.kanade.presentation.components.IndicatorStrokeWidth\nimport eu.kanade.presentation.components.commonClickable\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.IconButtonTokens\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\nenum class EpisodeDownloadAction {\n    START,\n    START_NOW,\n    CANCEL,\n    DELETE,\n    SHOW_QUALITIES,\n}\n\n@Composable\nfun EpisodeDownloadIndicator(\n    enabled: Boolean,\n    downloadStateProvider: () -> AnimeDownload.State,\n    downloadProgressProvider: () -> Int,\n    onClick: (EpisodeDownloadAction) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    when (val downloadState = downloadStateProvider()) {\n        AnimeDownload.State.NOT_DOWNLOADED -> NotDownloadedIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            onClick = onClick,\n        )\n        AnimeDownload.State.QUEUE, AnimeDownload.State.DOWNLOADING -> DownloadingIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            downloadState = downloadState,\n            downloadProgressProvider = downloadProgressProvider,\n            onClick = onClick,\n        )\n        AnimeDownload.State.DOWNLOADED -> DownloadedIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            onClick = onClick,\n        )\n        AnimeDownload.State.ERROR -> ErrorIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            onClick = onClick,\n        )\n    }\n}\n\n@Composable\nprivate fun NotDownloadedIndicator(\n    enabled: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: (EpisodeDownloadAction) -> Unit,\n) {\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { onClick(EpisodeDownloadAction.SHOW_QUALITIES) },\n                onClick = { onClick(EpisodeDownloadAction.START) },\n            )\n            .secondaryItemAlpha(),\n        contentAlignment = Alignment.Center,\n    ) {\n        Icon(\n            painter = painterResource(R.drawable.ic_download_item_24dp),\n            contentDescription = stringResource(MR.strings.manga_download),\n            modifier = Modifier.size(IndicatorSize),\n            tint = MaterialTheme.colorScheme.onSurfaceVariant,\n        )\n    }\n}\n\n@Composable\nprivate fun DownloadingIndicator(\n    enabled: Boolean,\n    downloadState: AnimeDownload.State,\n    downloadProgressProvider: () -> Int,\n    onClick: (EpisodeDownloadAction) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    var isMenuExpanded by remember { mutableStateOf(false) }\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { onClick(EpisodeDownloadAction.CANCEL) },\n                onClick = { isMenuExpanded = true },\n            ),\n        contentAlignment = Alignment.Center,\n    ) {\n        val arrowColor: Color\n        val strokeColor = MaterialTheme.colorScheme.onSurfaceVariant\n        val downloadProgress = downloadProgressProvider()\n        val indeterminate = downloadState == AnimeDownload.State.QUEUE ||\n            (downloadState == AnimeDownload.State.DOWNLOADING && downloadProgress == 0)\n        if (indeterminate) {\n            arrowColor = strokeColor\n            CircularProgressIndicator(\n                modifier = IndicatorModifier,\n                color = strokeColor,\n                strokeWidth = IndicatorStrokeWidth,\n                trackColor = Color.Transparent,\n                strokeCap = StrokeCap.Butt,\n            )\n        } else {\n            val animatedProgress by animateFloatAsState(\n                targetValue = downloadProgress / 100f,\n                animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec,\n                label = \"progress\",\n            )\n            arrowColor = if (animatedProgress < 0.5f) {\n                strokeColor\n            } else {\n                MaterialTheme.colorScheme.background\n            }\n            CircularProgressIndicator(\n                progress = { animatedProgress },\n                modifier = IndicatorModifier,\n                color = strokeColor,\n                strokeWidth = IndicatorSize / 2,\n                trackColor = Color.Transparent,\n                strokeCap = StrokeCap.Butt,\n                gapSize = 0.dp,\n            )\n        }\n        DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {\n            DropdownMenuItem(\n                text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) },\n                onClick = {\n                    onClick(EpisodeDownloadAction.START_NOW)\n                    isMenuExpanded = false\n                },\n            )\n            DropdownMenuItem(\n                text = { Text(text = stringResource(MR.strings.action_cancel)) },\n                onClick = {\n                    onClick(EpisodeDownloadAction.CANCEL)\n                    isMenuExpanded = false\n                },\n            )\n        }\n        Icon(\n            imageVector = Icons.Outlined.ArrowDownward,\n            contentDescription = null,\n            modifier = ArrowModifier,\n            tint = arrowColor,\n        )\n    }\n}\n\n@Composable\nprivate fun DownloadedIndicator(\n    enabled: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: (EpisodeDownloadAction) -> Unit,\n) {\n    var isMenuExpanded by remember { mutableStateOf(false) }\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { isMenuExpanded = true },\n                onClick = { isMenuExpanded = true },\n            ),\n        contentAlignment = Alignment.Center,\n    ) {\n        Icon(\n            imageVector = Icons.Filled.CheckCircle,\n            contentDescription = null,\n            modifier = Modifier.size(IndicatorSize),\n            tint = MaterialTheme.colorScheme.onSurfaceVariant,\n        )\n        DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {\n            DropdownMenuItem(\n                text = { Text(text = stringResource(MR.strings.action_delete)) },\n                onClick = {\n                    onClick(EpisodeDownloadAction.DELETE)\n                    isMenuExpanded = false\n                },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ErrorIndicator(\n    enabled: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: (EpisodeDownloadAction) -> Unit,\n) {\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { onClick(EpisodeDownloadAction.START) },\n                onClick = { onClick(EpisodeDownloadAction.START) },\n            ),\n        contentAlignment = Alignment.Center,\n    ) {\n        Icon(\n            imageVector = Icons.Outlined.ErrorOutline,\n            contentDescription = stringResource(AYMR.strings.download_error),\n            modifier = Modifier.size(IndicatorSize),\n            tint = MaterialTheme.colorScheme.error,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/DotSeparatorText.kt",
    "content": "package eu.kanade.presentation.entries.components\n\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\n\n@Composable\nfun DotSeparatorText(\n    modifier: Modifier = Modifier,\n) {\n    Text(\n        text = \" • \",\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun DotSeparatorNoSpaceText(\n    modifier: Modifier = Modifier,\n) {\n    Text(\n        text = \"•\",\n        modifier = modifier,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/EntryBottomActionMenu.kt",
    "content": "package eu.kanade.presentation.entries.components\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.expandVertically\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.shrinkVertically\nimport androidx.compose.foundation.combinedClickable\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.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.asPaddingValues\nimport androidx.compose.foundation.layout.navigationBars\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.shape.ZeroCornerSize\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.Label\nimport androidx.compose.material.icons.automirrored.outlined.LabelOff\nimport androidx.compose.material.icons.outlined.BookmarkAdd\nimport androidx.compose.material.icons.outlined.BookmarkRemove\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.DoneAll\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.Input\nimport androidx.compose.material.icons.outlined.NewLabel\nimport androidx.compose.material.icons.outlined.OpenInNew\nimport androidx.compose.material.icons.outlined.RemoveDone\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.ripple\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateListOf\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.graphics.vector.ImageVector\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.res.vectorResource\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.EntryDownloadDropdownMenu\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.isActive\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun EntryBottomActionMenu(\n    visible: Boolean,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n    onBookmarkClicked: (() -> Unit)? = null,\n    onRemoveBookmarkClicked: (() -> Unit)? = null,\n    onFillermarkClicked: (() -> Unit)? = null,\n    onRemoveFillermarkClicked: (() -> Unit)? = null,\n    onMarkAsViewedClicked: (() -> Unit)? = null,\n    onMarkAsUnviewedClicked: (() -> Unit)? = null,\n    onMarkPreviousAsViewedClicked: (() -> Unit)? = null,\n    onDownloadClicked: (() -> Unit)? = null,\n    onDeleteClicked: (() -> Unit)? = null,\n    onExternalClicked: (() -> Unit)? = null,\n    onInternalClicked: (() -> Unit)? = null,\n) {\n    AnimatedVisibility(\n        visible = visible,\n        enter = expandVertically(expandFrom = Alignment.Bottom),\n        exit = shrinkVertically(shrinkTowards = Alignment.Bottom),\n    ) {\n        val scope = rememberCoroutineScope()\n        val playerPreferences: PlayerPreferences = Injekt.get()\n        Surface(\n            modifier = modifier,\n            shape = MaterialTheme.shapes.large.copy(\n                bottomEnd = ZeroCornerSize,\n                bottomStart = ZeroCornerSize,\n            ),\n            color = MaterialTheme.colorScheme.surfaceContainerHigh,\n        ) {\n            val haptic = LocalHapticFeedback.current\n            val confirm =\n                remember {\n                    mutableStateListOf(false, false, false, false, false, false, false, false, false, false, false)\n                }\n            val confirmRange = 0..<11\n            var resetJob: Job? = remember { null }\n            val onLongClickItem: (Int) -> Unit = { toConfirmIndex ->\n                haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                (confirmRange).forEach { i -> confirm[i] = i == toConfirmIndex }\n                resetJob?.cancel()\n                resetJob = scope.launch {\n                    delay(1.seconds)\n                    if (isActive) confirm[toConfirmIndex] = false\n                }\n            }\n            Row(\n                modifier = Modifier\n                    .padding(\n                        WindowInsets.navigationBars\n                            .only(WindowInsetsSides.Bottom)\n                            .asPaddingValues(),\n                    )\n                    .padding(horizontal = 8.dp, vertical = 12.dp),\n            ) {\n                if (onBookmarkClicked != null) {\n                    val bookmark = if (isManga) MR.strings.action_bookmark else AYMR.strings.action_bookmark_episode\n                    Button(\n                        title = stringResource(bookmark),\n                        icon = Icons.Outlined.BookmarkAdd,\n                        toConfirm = confirm[0],\n                        onLongClick = { onLongClickItem(0) },\n                        onClick = onBookmarkClicked,\n                    )\n                }\n                if (onRemoveBookmarkClicked != null) {\n                    val removeBookmark = if (isManga) {\n                        MR.strings.action_remove_bookmark\n                    } else {\n                        AYMR.strings.action_remove_bookmark_episode\n                    }\n                    Button(\n                        title = stringResource(removeBookmark),\n                        icon = Icons.Outlined.BookmarkRemove,\n                        toConfirm = confirm[1],\n                        onLongClick = { onLongClickItem(1) },\n                        onClick = onRemoveBookmarkClicked,\n                    )\n                }\n                if (onFillermarkClicked != null) {\n                    Button(\n                        title = stringResource(AYMR.strings.action_fillermark_episode),\n                        icon = Icons.Outlined.NewLabel,\n                        toConfirm = confirm[2],\n                        onLongClick = { onLongClickItem(2) },\n                        onClick = onFillermarkClicked,\n                    )\n                }\n                if (onRemoveFillermarkClicked != null) {\n                    Button(\n                        title = stringResource(AYMR.strings.action_remove_fillermark_episode),\n                        icon = Icons.AutoMirrored.Outlined.LabelOff,\n                        toConfirm = confirm[3],\n                        onLongClick = { onLongClickItem(3) },\n                        onClick = onRemoveFillermarkClicked,\n                    )\n                }\n                if (onMarkAsViewedClicked != null) {\n                    val viewed = if (isManga) MR.strings.action_mark_as_read else AYMR.strings.action_mark_as_seen\n                    Button(\n                        title = stringResource(viewed),\n                        icon = Icons.Outlined.DoneAll,\n                        toConfirm = confirm[4],\n                        onLongClick = { onLongClickItem(4) },\n                        onClick = onMarkAsViewedClicked,\n                    )\n                }\n                if (onMarkAsUnviewedClicked != null) {\n                    val unviewed = if (isManga) MR.strings.action_mark_as_unread else AYMR.strings.action_mark_as_unseen\n                    Button(\n                        title = stringResource(unviewed),\n                        icon = Icons.Outlined.RemoveDone,\n                        toConfirm = confirm[5],\n                        onLongClick = { onLongClickItem(5) },\n                        onClick = onMarkAsUnviewedClicked,\n                    )\n                }\n                if (onMarkPreviousAsViewedClicked != null) {\n                    val previousUnviewed = if (isManga) {\n                        MR.strings.action_mark_previous_as_read\n                    } else {\n                        AYMR.strings.action_mark_previous_as_seen\n                    }\n                    Button(\n                        title = stringResource(previousUnviewed),\n                        icon = ImageVector.vectorResource(R.drawable.ic_done_prev_24dp),\n                        toConfirm = confirm[6],\n                        onLongClick = { onLongClickItem(6) },\n                        onClick = onMarkPreviousAsViewedClicked,\n                    )\n                }\n                if (onDownloadClicked != null) {\n                    Button(\n                        title = stringResource(MR.strings.action_download),\n                        icon = Icons.Outlined.Download,\n                        toConfirm = confirm[7],\n                        onLongClick = { onLongClickItem(7) },\n                        onClick = onDownloadClicked,\n                    )\n                }\n                if (onDeleteClicked != null) {\n                    Button(\n                        title = stringResource(MR.strings.action_delete),\n                        icon = Icons.Outlined.Delete,\n                        toConfirm = confirm[8],\n                        onLongClick = { onLongClickItem(8) },\n                        onClick = onDeleteClicked,\n                    )\n                }\n                if (!isManga && onExternalClicked != null && !playerPreferences.alwaysUseExternalPlayer().get()) {\n                    Button(\n                        title = stringResource(AYMR.strings.action_play_externally),\n                        icon = Icons.Outlined.OpenInNew,\n                        toConfirm = confirm[9],\n                        onLongClick = { onLongClickItem(9) },\n                        onClick = onExternalClicked,\n                    )\n                }\n                if (!isManga && onInternalClicked != null && playerPreferences.alwaysUseExternalPlayer().get()) {\n                    Button(\n                        title = stringResource(AYMR.strings.action_play_internally),\n                        icon = Icons.Outlined.Input,\n                        toConfirm = confirm[10],\n                        onLongClick = { onLongClickItem(10) },\n                        onClick = onInternalClicked,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun RowScope.Button(\n    title: String,\n    icon: ImageVector,\n    toConfirm: Boolean,\n    onLongClick: () -> Unit,\n    onClick: () -> Unit,\n    content: (@Composable () -> Unit)? = null,\n) {\n    val animatedWeight by animateFloatAsState(\n        targetValue = if (toConfirm) 2f else 1f,\n        label = \"weight\",\n    )\n    Column(\n        modifier = Modifier\n            .size(48.dp)\n            .weight(animatedWeight)\n            .combinedClickable(\n                interactionSource = null,\n                indication = ripple(bounded = false),\n                onLongClick = onLongClick,\n                onClick = onClick,\n            ),\n        verticalArrangement = Arrangement.Center,\n        horizontalAlignment = Alignment.CenterHorizontally,\n    ) {\n        Icon(\n            imageVector = icon,\n            contentDescription = title,\n        )\n        AnimatedVisibility(\n            visible = toConfirm,\n            enter = expandVertically(expandFrom = Alignment.Top) + fadeIn(),\n            exit = shrinkVertically(shrinkTowards = Alignment.Top) + fadeOut(),\n        ) {\n            Text(\n                text = title,\n                overflow = TextOverflow.Visible,\n                maxLines = 1,\n                style = MaterialTheme.typography.labelSmall,\n            )\n        }\n        content?.invoke()\n    }\n}\n\n@Composable\nfun LibraryBottomActionMenu(\n    visible: Boolean,\n    onChangeCategoryClicked: () -> Unit,\n    onMarkAsViewedClicked: () -> Unit,\n    onMarkAsUnviewedClicked: () -> Unit,\n    onDownloadClicked: ((DownloadAction) -> Unit)?,\n    onDeleteClicked: () -> Unit,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    AnimatedVisibility(\n        visible = visible,\n        enter = expandVertically(animationSpec = tween(delayMillis = 300)),\n        exit = shrinkVertically(animationSpec = tween()),\n    ) {\n        val scope = rememberCoroutineScope()\n        Surface(\n            modifier = modifier,\n            shape = MaterialTheme.shapes.large.copy(\n                bottomEnd = ZeroCornerSize,\n                bottomStart = ZeroCornerSize,\n            ),\n            color = MaterialTheme.colorScheme.surfaceContainerHigh,\n        ) {\n            val haptic = LocalHapticFeedback.current\n            val confirm = remember { mutableStateListOf(false, false, false, false, false) }\n            var resetJob: Job? = remember { null }\n            val onLongClickItem: (Int) -> Unit = { toConfirmIndex ->\n                haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                (0..<5).forEach { i -> confirm[i] = i == toConfirmIndex }\n                resetJob?.cancel()\n                resetJob = scope.launch {\n                    delay(1.seconds)\n                    if (isActive) confirm[toConfirmIndex] = false\n                }\n            }\n            Row(\n                modifier = Modifier\n                    .windowInsetsPadding(\n                        WindowInsets.navigationBars\n                            .only(WindowInsetsSides.Bottom),\n                    )\n                    .padding(horizontal = 8.dp, vertical = 12.dp),\n            ) {\n                Button(\n                    title = stringResource(MR.strings.action_move_category),\n                    icon = Icons.AutoMirrored.Outlined.Label,\n                    toConfirm = confirm[0],\n                    onLongClick = { onLongClickItem(0) },\n                    onClick = onChangeCategoryClicked,\n                )\n                val viewed = if (isManga) MR.strings.action_mark_as_read else AYMR.strings.action_mark_as_seen\n                Button(\n                    title = stringResource(viewed),\n                    icon = Icons.Outlined.DoneAll,\n                    toConfirm = confirm[1],\n                    onLongClick = { onLongClickItem(1) },\n                    onClick = onMarkAsViewedClicked,\n                )\n                val unviewed = if (isManga) MR.strings.action_mark_as_unread else AYMR.strings.action_mark_as_unseen\n                Button(\n                    title = stringResource(unviewed),\n                    icon = Icons.Outlined.RemoveDone,\n                    toConfirm = confirm[2],\n                    onLongClick = { onLongClickItem(2) },\n                    onClick = onMarkAsUnviewedClicked,\n                )\n                if (onDownloadClicked != null) {\n                    var downloadExpanded by remember { mutableStateOf(false) }\n                    Button(\n                        title = stringResource(MR.strings.action_download),\n                        icon = Icons.Outlined.Download,\n                        toConfirm = confirm[3],\n                        onLongClick = { onLongClickItem(3) },\n                        onClick = { downloadExpanded = !downloadExpanded },\n                    ) {\n                        val onDismissRequest = { downloadExpanded = false }\n                        EntryDownloadDropdownMenu(\n                            expanded = downloadExpanded,\n                            onDismissRequest = onDismissRequest,\n                            onDownloadClicked = onDownloadClicked,\n                            isManga = isManga,\n                        )\n                    }\n                }\n                Button(\n                    title = stringResource(MR.strings.action_delete),\n                    icon = Icons.Outlined.Delete,\n                    toConfirm = confirm[4],\n                    onLongClick = { onLongClickItem(4) },\n                    onClick = onDeleteClicked,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/EntryToolbar.kt",
    "content": "package eu.kanade.presentation.entries.components\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.FlipToBack\nimport androidx.compose.material.icons.outlined.SelectAll\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\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.draw.alpha\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.AppBarTitle\nimport eu.kanade.presentation.components.EntryDownloadDropdownMenu\nimport eu.kanade.presentation.entries.DownloadAction\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.theme.active\n\n@Composable\nfun EntryToolbar(\n    title: String,\n    hasFilters: Boolean,\n    navigateUp: () -> Unit,\n    onClickFilter: () -> Unit,\n    onClickShare: (() -> Unit)?,\n    onClickDownload: ((DownloadAction) -> Unit)?,\n    onClickEditCategory: (() -> Unit)?,\n    onClickRefresh: () -> Unit,\n    onClickMigrate: (() -> Unit)?,\n    onClickSettings: (() -> Unit)?,\n    // Anime only\n    changeAnimeSkipIntro: (() -> Unit)?,\n    // For action mode\n    actionModeCounter: Int,\n    onCancelActionMode: () -> Unit,\n    onSelectAll: () -> Unit,\n    onInvertSelection: () -> Unit,\n    titleAlphaProvider: () -> Float,\n    backgroundAlphaProvider: () -> Float,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    val isActionMode = actionModeCounter > 0\n    AppBar(\n        titleContent = {\n            if (isActionMode) {\n                AppBarTitle(actionModeCounter.toString())\n            } else {\n                AppBarTitle(title, modifier = Modifier.alpha(titleAlphaProvider()))\n            }\n        },\n        modifier = modifier,\n        backgroundColor = MaterialTheme.colorScheme\n            .surfaceColorAtElevation(3.dp)\n            .copy(alpha = if (isActionMode) 1f else backgroundAlphaProvider()),\n        navigateUp = navigateUp,\n        actions = {\n            var downloadExpanded by remember { mutableStateOf(false) }\n            if (onClickDownload != null) {\n                val onDismissRequest = { downloadExpanded = false }\n                EntryDownloadDropdownMenu(\n                    expanded = downloadExpanded,\n                    onDismissRequest = onDismissRequest,\n                    onDownloadClicked = onClickDownload,\n                    isManga = isManga,\n                )\n            }\n\n            val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current\n            AppBarActions(\n                actions = persistentListOf<AppBar.AppBarAction>().builder().apply {\n                    if (isActionMode) {\n                        add(\n                            AppBar.Action(\n                                title = stringResource(MR.strings.action_select_all),\n                                icon = Icons.Outlined.SelectAll,\n                                onClick = onSelectAll,\n                            ),\n                        )\n                        add(\n                            AppBar.Action(\n                                title = stringResource(MR.strings.action_select_inverse),\n                                icon = Icons.Outlined.FlipToBack,\n                                onClick = onInvertSelection,\n                            ),\n                        )\n                        return@apply\n                    }\n                    if (onClickDownload != null) {\n                        add(\n                            AppBar.Action(\n                                title = stringResource(MR.strings.manga_download),\n                                icon = Icons.Outlined.Download,\n                                onClick = { downloadExpanded = !downloadExpanded },\n                            ),\n                        )\n                    }\n                    add(\n                        AppBar.Action(\n                            title = stringResource(MR.strings.action_filter),\n                            icon = Icons.Outlined.FilterList,\n                            iconTint = filterTint,\n                            onClick = onClickFilter,\n                        ),\n                    )\n                    if (changeAnimeSkipIntro != null) {\n                        add(\n                            AppBar.OverflowAction(\n                                title = stringResource(AYMR.strings.action_change_intro_length),\n                                onClick = changeAnimeSkipIntro,\n                            ),\n                        )\n                    }\n                    add(\n                        AppBar.OverflowAction(\n                            title = stringResource(MR.strings.action_webview_refresh),\n                            onClick = onClickRefresh,\n                        ),\n                    )\n\n                    if (onClickEditCategory != null) {\n                        add(\n                            AppBar.OverflowAction(\n                                title = stringResource(MR.strings.action_edit_categories),\n                                onClick = onClickEditCategory,\n                            ),\n                        )\n                    }\n                    if (onClickMigrate != null) {\n                        add(\n                            AppBar.OverflowAction(\n                                title = stringResource(MR.strings.action_migrate),\n                                onClick = onClickMigrate,\n                            ),\n                        )\n                    }\n                    if (onClickShare != null) {\n                        add(\n                            AppBar.OverflowAction(\n                                title = stringResource(MR.strings.action_share),\n                                onClick = onClickShare,\n                            ),\n                        )\n                    }\n                    if (onClickSettings != null) {\n                        add(\n                            AppBar.OverflowAction(\n                                title = stringResource(AYMR.strings.settings),\n                                onClick = onClickSettings,\n                            ),\n                        )\n                    }\n                }\n                    .build(),\n            )\n        },\n        isActionMode = isActionMode,\n        onCancelActionMode = onCancelActionMode,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/ItemCover.kt",
    "content": "package eu.kanade.presentation.entries.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.aspectRatio\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.graphics.painter.ColorPainter\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.semantics.Role\nimport coil3.compose.AsyncImage\nimport eu.kanade.presentation.util.rememberResourceBitmapPainter\nimport eu.kanade.tachiyomi.R\n\nenum class ItemCover(val ratio: Float) {\n    Square(1f / 1f),\n    Book(2f / 3f),\n    Thumb(16f / 9f),\n    ;\n\n    @Composable\n    operator fun invoke(\n        data: Any?,\n        modifier: Modifier = Modifier,\n        contentDescription: String = \"\",\n        shape: Shape = MaterialTheme.shapes.extraSmall,\n        onClick: (() -> Unit)? = null,\n    ) {\n        AsyncImage(\n            model = data,\n            placeholder = ColorPainter(CoverPlaceholderColor),\n            error = rememberResourceBitmapPainter(id = R.drawable.cover_error),\n            contentDescription = contentDescription,\n            modifier = modifier\n                .aspectRatio(ratio)\n                .clip(shape)\n                .then(\n                    if (onClick != null) {\n                        Modifier.clickable(\n                            role = Role.Button,\n                            onClick = onClick,\n                        )\n                    } else {\n                        Modifier\n                    },\n                ),\n            contentScale = ContentScale.Crop,\n        )\n    }\n}\n\nprivate val CoverPlaceholderColor = Color(0x1F888888)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/ItemHeader.kt",
    "content": "package eu.kanade.presentation.entries.components\n\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.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.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ItemHeader(\n    enabled: Boolean,\n    itemCount: Int?,\n    missingItemsCount: Int,\n    onClick: () -> Unit,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n    fetchType: FetchType = FetchType.Episodes,\n) {\n    Column(\n        modifier = modifier\n            .fillMaxWidth()\n            .clickable(\n                enabled = enabled,\n                onClick = onClick,\n            )\n            .padding(horizontal = 16.dp, vertical = 4.dp),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        Text(\n            text = if (itemCount == null) {\n                val count = if (isManga) MR.strings.chapters else AYMR.strings.episodes\n                stringResource(count)\n            } else {\n                val pluralCount = if (isManga) {\n                    MR.plurals.manga_num_chapters\n                } else {\n                    when (fetchType) {\n                        FetchType.Seasons -> AYMR.plurals.anime_num_seasons\n                        FetchType.Episodes -> AYMR.plurals.anime_num_episodes\n                    }\n                }\n                pluralStringResource(pluralCount, count = itemCount, itemCount)\n            },\n            style = MaterialTheme.typography.titleMedium,\n            color = MaterialTheme.colorScheme.onBackground,\n        )\n\n        MissingItemsWarning(missingItemsCount)\n    }\n}\n\n@Composable\nprivate fun MissingItemsWarning(count: Int) {\n    if (count == 0) {\n        return\n    }\n\n    Text(\n        text = pluralStringResource(AYMR.plurals.missing_items, count = count, count),\n        maxLines = 1,\n        overflow = TextOverflow.Ellipsis,\n        style = MaterialTheme.typography.bodySmall,\n        color = MaterialTheme.colorScheme.error.copy(alpha = SECONDARY_ALPHA),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/ItemsDialogs.kt",
    "content": "package eu.kanade.presentation.entries.components\n\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\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.unit.DpSize\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.util.system.isReleaseBuildType\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.domain.entries.anime.interactor.AnimeFetchInterval\nimport tachiyomi.domain.entries.manga.interactor.MangaFetchInterval\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.WheelTextPicker\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.Instant\nimport java.time.temporal.ChronoUnit\nimport kotlin.math.absoluteValue\n\n@Composable\nfun DeleteItemsDialog(\n    onDismissRequest: () -> Unit,\n    onConfirm: () -> Unit,\n    isManga: Boolean,\n) {\n    val subtitle = if (isManga) MR.strings.confirm_delete_chapters else AYMR.strings.confirm_delete_episodes\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onDismissRequest()\n                    onConfirm()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.are_you_sure))\n        },\n        text = {\n            Text(text = stringResource(subtitle))\n        },\n    )\n}\n\n@Composable\nfun SetIntervalDialog(\n    interval: Int,\n    nextUpdate: Instant?,\n    onDismissRequest: () -> Unit,\n    isManga: Boolean,\n    onValueChanged: ((Int) -> Unit)? = null,\n) {\n    var selectedInterval by rememberSaveable { mutableIntStateOf(if (interval < 0) -interval else 0) }\n\n    val nextUpdateDays = remember(nextUpdate) {\n        return@remember if (nextUpdate != null) {\n            val now = Instant.now()\n            now.until(nextUpdate, ChronoUnit.DAYS).toInt().coerceAtLeast(0)\n        } else {\n            null\n        }\n    }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        title = { Text(stringResource(MR.strings.pref_library_update_smart_update)) },\n        text = {\n            Column {\n                if (nextUpdateDays != null && nextUpdateDays >= 0 && interval >= 0) {\n                    Text(\n                        stringResource(\n                            if (isManga) {\n                                MR.strings.manga_interval_expected_update\n                            } else {\n                                AYMR.strings.anime_interval_expected_update\n                            },\n                            pluralStringResource(\n                                MR.plurals.day,\n                                count = nextUpdateDays,\n                                nextUpdateDays,\n                            ),\n                            pluralStringResource(\n                                MR.plurals.day,\n                                count = interval.absoluteValue,\n                                interval.absoluteValue,\n                            ),\n                        ),\n                    )\n                } else {\n                    Text(\n                        stringResource(\n                            if (isManga) {\n                                MR.strings.manga_interval_expected_update_null\n                            } else {\n                                AYMR.strings.anime_interval_expected_update_null\n                            },\n                        ),\n                    )\n                }\n                Spacer(Modifier.height(MaterialTheme.padding.small))\n\n                if (onValueChanged != null && (!isReleaseBuildType)) {\n                    Text(stringResource(MR.strings.manga_interval_custom_amount))\n\n                    BoxWithConstraints(\n                        modifier = Modifier.fillMaxWidth(),\n                        contentAlignment = Alignment.Center,\n                    ) {\n                        val size = DpSize(width = maxWidth / 2, height = 128.dp)\n                        val maxInterval = if (isManga) {\n                            MangaFetchInterval.MAX_INTERVAL\n                        } else {\n                            AnimeFetchInterval.MAX_INTERVAL\n                        }\n                        val items = (0..maxInterval)\n                            .map {\n                                if (it == 0) {\n                                    stringResource(MR.strings.label_default)\n                                } else {\n                                    it.toString()\n                                }\n                            }\n                            .toImmutableList()\n                        WheelTextPicker(\n                            items = items,\n                            size = size,\n                            startIndex = selectedInterval,\n                            onSelectionChanged = { selectedInterval = it },\n                        )\n                    }\n                }\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(onClick = {\n                onValueChanged?.invoke(selectedInterval)\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/components/MissingItemCountListItem.kt",
    "content": "package eu.kanade.presentation.entries.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun MissingItemCountListItem(\n    count: Int,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            )\n            .secondaryItemAlpha(),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n    ) {\n        HorizontalDivider(modifier = Modifier.weight(1f))\n        Text(\n            text = pluralStringResource(AYMR.plurals.missing_items, count = count, count),\n            style = MaterialTheme.typography.labelMedium,\n        )\n        HorizontalDivider(modifier = Modifier.weight(1f))\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun Preview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            MissingItemCountListItem(count = 42)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/ChapterSettingsDialog.kt",
    "content": "package eu.kanade.presentation.entries.manga\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.Row\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.outlined.PeopleAlt\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\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.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.manga.model.downloadedFilter\nimport eu.kanade.presentation.components.TabbedDialog\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.RadioItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.theme.active\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun ChapterSettingsDialog(\n    onDismissRequest: () -> Unit,\n    manga: Manga? = null,\n    onDownloadFilterChanged: (TriState) -> Unit,\n    onUnreadFilterChanged: (TriState) -> Unit,\n    onBookmarkedFilterChanged: (TriState) -> Unit,\n    scanlatorFilterActive: Boolean,\n    onScanlatorFilterClicked: (() -> Unit),\n    onSortModeChanged: (Long) -> Unit,\n    onDisplayModeChanged: (Long) -> Unit,\n    onSetAsDefault: (applyToExistingManga: Boolean) -> Unit,\n    onResetToDefault: () -> Unit,\n) {\n    var showSetAsDefaultDialog by rememberSaveable { mutableStateOf(false) }\n    if (showSetAsDefaultDialog) {\n        SetAsDefaultDialog(\n            onDismissRequest = { showSetAsDefaultDialog = false },\n            onConfirmed = onSetAsDefault,\n        )\n    }\n\n    val downloadedOnly = remember { Injekt.get<BasePreferences>().downloadedOnly().get() }\n\n    TabbedDialog(\n        onDismissRequest = onDismissRequest,\n        tabTitles = persistentListOf(\n            stringResource(MR.strings.action_filter),\n            stringResource(MR.strings.action_sort),\n            stringResource(MR.strings.action_display),\n        ),\n        tabOverflowMenuContent = { closeMenu ->\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) },\n                onClick = {\n                    showSetAsDefaultDialog = true\n                    closeMenu()\n                },\n            )\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.action_reset)) },\n                onClick = {\n                    onResetToDefault()\n                    closeMenu()\n                },\n            )\n        },\n    ) { page ->\n        Column(\n            modifier = Modifier\n                .padding(vertical = TabbedDialogPaddings.Vertical)\n                .verticalScroll(rememberScrollState()),\n        ) {\n            when (page) {\n                0 -> {\n                    FilterPage(\n                        downloadFilter = manga?.downloadedFilter ?: TriState.DISABLED,\n                        onDownloadFilterChanged = onDownloadFilterChanged\n                            .takeUnless { downloadedOnly },\n                        unreadFilter = manga?.unreadFilter ?: TriState.DISABLED,\n                        onUnreadFilterChanged = onUnreadFilterChanged,\n                        bookmarkedFilter = manga?.bookmarkedFilter ?: TriState.DISABLED,\n                        onBookmarkedFilterChanged = onBookmarkedFilterChanged,\n                        scanlatorFilterActive = scanlatorFilterActive,\n                        onScanlatorFilterClicked = onScanlatorFilterClicked,\n                    )\n                }\n                1 -> {\n                    SortPage(\n                        sortingMode = manga?.sorting ?: 0,\n                        sortDescending = manga?.sortDescending() ?: false,\n                        onItemSelected = onSortModeChanged,\n                    )\n                }\n                2 -> {\n                    DisplayPage(\n                        displayMode = manga?.displayMode ?: 0,\n                        onItemSelected = onDisplayModeChanged,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.FilterPage(\n    downloadFilter: TriState,\n    onDownloadFilterChanged: ((TriState) -> Unit)?,\n    unreadFilter: TriState,\n    onUnreadFilterChanged: (TriState) -> Unit,\n    bookmarkedFilter: TriState,\n    onBookmarkedFilterChanged: (TriState) -> Unit,\n    scanlatorFilterActive: Boolean,\n    onScanlatorFilterClicked: (() -> Unit),\n) {\n    TriStateItem(\n        label = stringResource(MR.strings.label_downloaded),\n        state = downloadFilter,\n        onClick = onDownloadFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_unread),\n        state = unreadFilter,\n        onClick = onUnreadFilterChanged,\n    )\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_bookmarked),\n        state = bookmarkedFilter,\n        onClick = onBookmarkedFilterChanged,\n    )\n    ScanlatorFilterItem(\n        active = scanlatorFilterActive,\n        onClick = onScanlatorFilterClicked,\n    )\n}\n\n@Composable\nfun ScanlatorFilterItem(\n    active: Boolean,\n    onClick: () -> Unit,\n) {\n    Row(\n        modifier = Modifier\n            .clickable(onClick = onClick)\n            .fillMaxWidth()\n            .padding(horizontal = TabbedDialogPaddings.Horizontal, vertical = 12.dp),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(24.dp),\n    ) {\n        Icon(\n            imageVector = Icons.Outlined.PeopleAlt,\n            contentDescription = null,\n            tint = if (active) {\n                MaterialTheme.colorScheme.active\n            } else {\n                LocalContentColor.current\n            },\n        )\n        Text(\n            text = stringResource(MR.strings.scanlator),\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n\n@Composable\nprivate fun ColumnScope.SortPage(\n    sortingMode: Long,\n    sortDescending: Boolean,\n    onItemSelected: (Long) -> Unit,\n) {\n    listOf(\n        MR.strings.sort_by_source to Manga.CHAPTER_SORTING_SOURCE,\n        MR.strings.sort_by_number to Manga.CHAPTER_SORTING_NUMBER,\n        MR.strings.sort_by_upload_date to Manga.CHAPTER_SORTING_UPLOAD_DATE,\n        MR.strings.action_sort_alpha to Manga.CHAPTER_SORTING_ALPHABET,\n    ).map { (titleRes, mode) ->\n        SortItem(\n            label = stringResource(titleRes),\n            sortDescending = sortDescending.takeIf { sortingMode == mode },\n            onClick = { onItemSelected(mode) },\n        )\n    }\n}\n\n@Composable\nprivate fun ColumnScope.DisplayPage(\n    displayMode: Long,\n    onItemSelected: (Long) -> Unit,\n) {\n    listOf(\n        MR.strings.show_title to Manga.CHAPTER_DISPLAY_NAME,\n        MR.strings.show_chapter_number to Manga.CHAPTER_DISPLAY_NUMBER,\n    ).map { (titleRes, mode) ->\n        RadioItem(\n            label = stringResource(titleRes),\n            selected = displayMode == mode,\n            onClick = { onItemSelected(mode) },\n        )\n    }\n}\n\n@Composable\nprivate fun SetAsDefaultDialog(\n    onDismissRequest: () -> Unit,\n    onConfirmed: (optionalChecked: Boolean) -> Unit,\n) {\n    var optionalChecked by rememberSaveable { mutableStateOf(false) }\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        title = { Text(text = stringResource(MR.strings.chapter_settings)) },\n        text = {\n            Column(\n                verticalArrangement = Arrangement.spacedBy(12.dp),\n            ) {\n                Text(text = stringResource(MR.strings.confirm_set_chapter_settings))\n\n                LabeledCheckbox(\n                    label = stringResource(AYMR.strings.also_set_chapter_settings_for_library),\n                    checked = optionalChecked,\n                    onCheckedChange = { optionalChecked = it },\n                )\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onConfirmed(optionalChecked)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/DuplicateMangaDialog.kt",
    "content": "package eu.kanade.presentation.entries.manga\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.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Add\nimport androidx.compose.material.icons.outlined.Book\nimport androidx.compose.material.icons.outlined.SwapVert\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport eu.kanade.presentation.more.settings.LocalPreferenceMinHeight\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun DuplicateMangaDialog(\n    onDismissRequest: () -> Unit,\n    onConfirm: () -> Unit,\n    onOpenManga: () -> Unit,\n    onMigrate: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val minHeight = LocalPreferenceMinHeight.current\n\n    AdaptiveSheet(\n        modifier = modifier,\n        onDismissRequest = onDismissRequest,\n    ) {\n        Column(\n            modifier = Modifier\n                .padding(\n                    vertical = TabbedDialogPaddings.Vertical,\n                    horizontal = TabbedDialogPaddings.Horizontal,\n                )\n                .fillMaxWidth(),\n        ) {\n            Text(\n                modifier = Modifier.padding(TitlePadding),\n                text = stringResource(MR.strings.are_you_sure),\n                style = MaterialTheme.typography.headlineMedium,\n            )\n\n            Text(\n                text = stringResource(MR.strings.confirm_add_duplicate_manga),\n                style = MaterialTheme.typography.bodyMedium,\n            )\n\n            Spacer(Modifier.height(PaddingSize))\n\n            TextPreferenceWidget(\n                title = stringResource(AYMR.strings.action_show_manga),\n                icon = Icons.Outlined.Book,\n                onPreferenceClick = {\n                    onDismissRequest()\n                    onOpenManga()\n                },\n            )\n\n            HorizontalDivider()\n\n            TextPreferenceWidget(\n                title = stringResource(MR.strings.action_migrate_duplicate),\n                icon = Icons.Outlined.SwapVert,\n                onPreferenceClick = {\n                    onDismissRequest()\n                    onMigrate()\n                },\n            )\n\n            HorizontalDivider()\n\n            TextPreferenceWidget(\n                title = stringResource(MR.strings.action_add_anyway),\n                icon = Icons.Outlined.Add,\n                onPreferenceClick = {\n                    onDismissRequest()\n                    onConfirm()\n                },\n            )\n\n            Row(\n                modifier = Modifier\n                    .sizeIn(minHeight = minHeight)\n                    .clickable { onDismissRequest.invoke() }\n                    .padding(ButtonPadding)\n                    .fillMaxWidth(),\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.Center,\n            ) {\n                OutlinedButton(onClick = onDismissRequest, modifier = Modifier.fillMaxWidth()) {\n                    Text(\n                        modifier = Modifier\n                            .padding(vertical = 8.dp),\n                        text = stringResource(MR.strings.action_cancel),\n                        color = MaterialTheme.colorScheme.primary,\n                        style = MaterialTheme.typography.titleLarge,\n                        fontSize = 16.sp,\n                    )\n                }\n            }\n        }\n    }\n}\n\nprivate val PaddingSize = 16.dp\n\nprivate val ButtonPadding = PaddingValues(top = 16.dp, bottom = 16.dp)\nprivate val TitlePadding = PaddingValues(bottom = 16.dp, top = 8.dp)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/MangaScreen.kt",
    "content": "package eu.kanade.presentation.entries.manga\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.asPaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.PlayArrow\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.layout.onSizeChanged\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.util.fastAll\nimport androidx.compose.ui.util.fastAny\nimport androidx.compose.ui.util.fastMap\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.relativeDateTimeText\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.presentation.entries.EntryScreenItem\nimport eu.kanade.presentation.entries.components.EntryBottomActionMenu\nimport eu.kanade.presentation.entries.components.EntryToolbar\nimport eu.kanade.presentation.entries.components.ItemHeader\nimport eu.kanade.presentation.entries.components.MissingItemCountListItem\nimport eu.kanade.presentation.entries.manga.components.ChapterDownloadAction\nimport eu.kanade.presentation.entries.manga.components.ExpandableMangaDescription\nimport eu.kanade.presentation.entries.manga.components.MangaActionRow\nimport eu.kanade.presentation.entries.manga.components.MangaChapterListItem\nimport eu.kanade.presentation.entries.manga.components.MangaInfoBox\nimport eu.kanade.presentation.util.formatChapterNumber\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.source.ConfigurableSource\nimport eu.kanade.tachiyomi.source.manga.getNameForMangaInfo\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.details.MangaSourcePreferencesScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.ChapterList\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreenModel\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.service.missingChaptersCount\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.TwoPanelBox\nimport tachiyomi.presentation.core.components.VerticalFastScroller\nimport tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.shouldExpandFAB\nimport tachiyomi.source.local.entries.manga.isLocal\nimport java.time.Instant\n\n@Composable\nfun MangaScreen(\n    state: MangaScreenModel.State.Success,\n    snackbarHostState: SnackbarHostState,\n    nextUpdate: Instant?,\n    isTabletUi: Boolean,\n    chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction,\n    chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction,\n    navigateUp: () -> Unit,\n    onChapterClicked: (Chapter) -> Unit,\n    onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: () -> Unit,\n\n    // For tags menu\n    onTagSearch: (String) -> Unit,\n\n    onFilterButtonClicked: () -> Unit,\n    onRefresh: () -> Unit,\n    onContinueReading: () -> Unit,\n    onSearch: (query: String, global: Boolean) -> Unit,\n\n    // For cover dialog\n    onCoverClicked: () -> Unit,\n\n    // For top action menu\n    onShareClicked: (() -> Unit)?,\n    onDownloadActionClicked: ((DownloadAction) -> Unit)?,\n    onEditCategoryClicked: (() -> Unit)?,\n    onEditFetchIntervalClicked: (() -> Unit)?,\n    onMigrateClicked: (() -> Unit)?,\n\n    // For bottom action menu\n    onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit,\n    onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit,\n    onMarkPreviousAsReadClicked: (Chapter) -> Unit,\n    onMultiDeleteClicked: (List<Chapter>) -> Unit,\n\n    // For chapter swipe\n    onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit,\n\n    // Chapter selection\n    onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onAllChapterSelected: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n) {\n    val context = LocalContext.current\n    val onCopyTagToClipboard: (tag: String) -> Unit = {\n        if (it.isNotEmpty()) {\n            context.copyToClipboard(it, it)\n        }\n    }\n\n    val navigator = LocalNavigator.currentOrThrow\n    val onSettingsClicked: (() -> Unit)? = {\n        navigator.push(MangaSourcePreferencesScreen(state.source.id))\n    }.takeIf { state.source is ConfigurableSource }\n\n    if (!isTabletUi) {\n        MangaScreenSmallImpl(\n            state = state,\n            snackbarHostState = snackbarHostState,\n            nextUpdate = nextUpdate,\n            chapterSwipeStartAction = chapterSwipeStartAction,\n            chapterSwipeEndAction = chapterSwipeEndAction,\n            navigateUp = navigateUp,\n            onChapterClicked = onChapterClicked,\n            onDownloadChapter = onDownloadChapter,\n            onAddToLibraryClicked = onAddToLibraryClicked,\n            onWebViewClicked = onWebViewClicked,\n            onWebViewLongClicked = onWebViewLongClicked,\n            onTrackingClicked = onTrackingClicked,\n            onTagSearch = onTagSearch,\n            onCopyTagToClipboard = onCopyTagToClipboard,\n            onFilterClicked = onFilterButtonClicked,\n            onRefresh = onRefresh,\n            onContinueReading = onContinueReading,\n            onSearch = onSearch,\n            onCoverClicked = onCoverClicked,\n            onShareClicked = onShareClicked,\n            onDownloadActionClicked = onDownloadActionClicked,\n            onEditCategoryClicked = onEditCategoryClicked,\n            onEditIntervalClicked = onEditFetchIntervalClicked,\n            onMigrateClicked = onMigrateClicked,\n            onMultiBookmarkClicked = onMultiBookmarkClicked,\n            onMultiMarkAsReadClicked = onMultiMarkAsReadClicked,\n            onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked,\n            onMultiDeleteClicked = onMultiDeleteClicked,\n            onChapterSwipe = onChapterSwipe,\n            onChapterSelected = onChapterSelected,\n            onAllChapterSelected = onAllChapterSelected,\n            onInvertSelection = onInvertSelection,\n            onSettingsClicked = onSettingsClicked,\n        )\n    } else {\n        MangaScreenLargeImpl(\n            state = state,\n            snackbarHostState = snackbarHostState,\n            chapterSwipeStartAction = chapterSwipeStartAction,\n            chapterSwipeEndAction = chapterSwipeEndAction,\n            nextUpdate = nextUpdate,\n            navigateUp = navigateUp,\n            onChapterClicked = onChapterClicked,\n            onDownloadChapter = onDownloadChapter,\n            onAddToLibraryClicked = onAddToLibraryClicked,\n            onWebViewClicked = onWebViewClicked,\n            onWebViewLongClicked = onWebViewLongClicked,\n            onTrackingClicked = onTrackingClicked,\n            onTagSearch = onTagSearch,\n            onCopyTagToClipboard = onCopyTagToClipboard,\n            onFilterButtonClicked = onFilterButtonClicked,\n            onRefresh = onRefresh,\n            onContinueReading = onContinueReading,\n            onSearch = onSearch,\n            onCoverClicked = onCoverClicked,\n            onShareClicked = onShareClicked,\n            onDownloadActionClicked = onDownloadActionClicked,\n            onEditCategoryClicked = onEditCategoryClicked,\n            onEditIntervalClicked = onEditFetchIntervalClicked,\n            onMigrateClicked = onMigrateClicked,\n            onMultiBookmarkClicked = onMultiBookmarkClicked,\n            onMultiMarkAsReadClicked = onMultiMarkAsReadClicked,\n            onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked,\n            onMultiDeleteClicked = onMultiDeleteClicked,\n            onChapterSwipe = onChapterSwipe,\n            onChapterSelected = onChapterSelected,\n            onAllChapterSelected = onAllChapterSelected,\n            onInvertSelection = onInvertSelection,\n            onSettingsClicked = onSettingsClicked,\n        )\n    }\n}\n\n@Composable\nprivate fun MangaScreenSmallImpl(\n    state: MangaScreenModel.State.Success,\n    snackbarHostState: SnackbarHostState,\n    nextUpdate: Instant?,\n    chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction,\n    chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction,\n    navigateUp: () -> Unit,\n    onChapterClicked: (Chapter) -> Unit,\n    onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: () -> Unit,\n\n    // For tags menu\n    onTagSearch: (String) -> Unit,\n    onCopyTagToClipboard: (tag: String) -> Unit,\n\n    onFilterClicked: () -> Unit,\n    onRefresh: () -> Unit,\n    onContinueReading: () -> Unit,\n    onSearch: (query: String, global: Boolean) -> Unit,\n\n    // For cover dialog\n    onCoverClicked: () -> Unit,\n\n    // For top action menu\n    onShareClicked: (() -> Unit)?,\n    onDownloadActionClicked: ((DownloadAction) -> Unit)?,\n    onEditCategoryClicked: (() -> Unit)?,\n    onEditIntervalClicked: (() -> Unit)?,\n    onMigrateClicked: (() -> Unit)?,\n    onSettingsClicked: (() -> Unit)?,\n\n    // For bottom action menu\n    onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit,\n    onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit,\n    onMarkPreviousAsReadClicked: (Chapter) -> Unit,\n    onMultiDeleteClicked: (List<Chapter>) -> Unit,\n\n    // For chapter swipe\n    onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit,\n\n    // Chapter selection\n    onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onAllChapterSelected: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n) {\n    val chapterListState = rememberLazyListState()\n\n    val (chapters, listItem, isAnySelected) = remember(state) {\n        Triple(\n            first = state.processedChapters,\n            second = state.chapterListItems,\n            third = state.isAnySelected,\n        )\n    }\n\n    BackHandler(onBack = {\n        if (isAnySelected) {\n            onAllChapterSelected(false)\n        } else {\n            navigateUp()\n        }\n    })\n\n    Scaffold(\n        topBar = {\n            val selectedChapterCount: Int = remember(chapters) {\n                chapters.count { it.selected }\n            }\n            val isFirstItemVisible by remember {\n                derivedStateOf { chapterListState.firstVisibleItemIndex == 0 }\n            }\n            val isFirstItemScrolled by remember {\n                derivedStateOf { chapterListState.firstVisibleItemScrollOffset > 0 }\n            }\n            val titleAlpha by animateFloatAsState(\n                if (!isFirstItemVisible) 1f else 0f,\n                label = \"Top Bar Title\",\n            )\n            val backgroundAlpha by animateFloatAsState(\n                if (!isFirstItemVisible || isFirstItemScrolled) 1f else 0f,\n                label = \"Top Bar Background\",\n            )\n            EntryToolbar(\n                title = state.manga.title,\n                hasFilters = state.filterActive,\n                navigateUp = navigateUp,\n                onClickFilter = onFilterClicked,\n                onClickShare = onShareClicked,\n                onClickDownload = onDownloadActionClicked,\n                onClickEditCategory = onEditCategoryClicked,\n                onClickRefresh = onRefresh,\n                onClickMigrate = onMigrateClicked,\n                onClickSettings = onSettingsClicked,\n                changeAnimeSkipIntro = null,\n                actionModeCounter = selectedChapterCount,\n                onCancelActionMode = { onAllChapterSelected(false) },\n                onSelectAll = { onAllChapterSelected(true) },\n                onInvertSelection = { onInvertSelection() },\n                titleAlphaProvider = { titleAlpha },\n                backgroundAlphaProvider = { backgroundAlpha },\n                isManga = true,\n            )\n        },\n        bottomBar = {\n            val selectedChapters = remember(chapters) {\n                chapters.filter { it.selected }\n            }\n            SharedMangaBottomActionMenu(\n                selected = selectedChapters,\n                onMultiBookmarkClicked = onMultiBookmarkClicked,\n                onMultiMarkAsReadClicked = onMultiMarkAsReadClicked,\n                onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked,\n                onDownloadChapter = onDownloadChapter,\n                onMultiDeleteClicked = onMultiDeleteClicked,\n                fillFraction = 1f,\n            )\n        },\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        floatingActionButton = {\n            val isFABVisible = remember(chapters) {\n                chapters.fastAny { !it.chapter.read } && !isAnySelected\n            }\n            AnimatedVisibility(\n                visible = isFABVisible,\n                enter = fadeIn(),\n                exit = fadeOut(),\n            ) {\n                ExtendedFloatingActionButton(\n                    text = {\n                        val isReading = remember(state.chapters) {\n                            state.chapters.fastAny { it.chapter.read }\n                        }\n                        Text(\n                            text = stringResource(if (isReading) MR.strings.action_resume else MR.strings.action_start),\n                        )\n                    },\n                    icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },\n                    onClick = onContinueReading,\n                    expanded = chapterListState.shouldExpandFAB(),\n                )\n            }\n        },\n    ) { contentPadding ->\n        val topPadding = contentPadding.calculateTopPadding()\n\n        PullRefresh(\n            refreshing = state.isRefreshingData,\n            onRefresh = onRefresh,\n            enabled = !isAnySelected,\n            indicatorPadding = PaddingValues(top = topPadding),\n        ) {\n            val layoutDirection = LocalLayoutDirection.current\n            VerticalFastScroller(\n                listState = chapterListState,\n                topContentPadding = topPadding,\n                endContentPadding = contentPadding.calculateEndPadding(layoutDirection),\n            ) {\n                LazyColumn(\n                    modifier = Modifier.fillMaxHeight(),\n                    state = chapterListState,\n                    contentPadding = PaddingValues(\n                        start = contentPadding.calculateStartPadding(layoutDirection),\n                        end = contentPadding.calculateEndPadding(layoutDirection),\n                        bottom = contentPadding.calculateBottomPadding(),\n                    ),\n                ) {\n                    item(\n                        key = EntryScreenItem.INFO_BOX,\n                        contentType = EntryScreenItem.INFO_BOX,\n                    ) {\n                        MangaInfoBox(\n                            isTabletUi = false,\n                            appBarPadding = topPadding,\n                            manga = state.manga,\n                            sourceName = remember { state.source.getNameForMangaInfo() },\n                            isStubSource = remember { state.source is StubMangaSource },\n                            onCoverClick = onCoverClicked,\n                            doSearch = onSearch,\n                        )\n                    }\n\n                    item(\n                        key = EntryScreenItem.ACTION_ROW,\n                        contentType = EntryScreenItem.ACTION_ROW,\n                    ) {\n                        MangaActionRow(\n                            favorite = state.manga.favorite,\n                            trackingCount = state.trackingCount,\n                            nextUpdate = nextUpdate,\n                            isUserIntervalMode = state.manga.fetchInterval < 0,\n                            onAddToLibraryClicked = onAddToLibraryClicked,\n                            onWebViewClicked = onWebViewClicked,\n                            onWebViewLongClicked = onWebViewLongClicked,\n                            onTrackingClicked = onTrackingClicked,\n                            onEditIntervalClicked = onEditIntervalClicked,\n                            onEditCategory = onEditCategoryClicked,\n                        )\n                    }\n\n                    item(\n                        key = EntryScreenItem.DESCRIPTION_WITH_TAG,\n                        contentType = EntryScreenItem.DESCRIPTION_WITH_TAG,\n                    ) {\n                        ExpandableMangaDescription(\n                            defaultExpandState = state.isFromSource,\n                            description = state.manga.description,\n                            tagsProvider = { state.manga.genre },\n                            onTagSearch = onTagSearch,\n                            onCopyTagToClipboard = onCopyTagToClipboard,\n                        )\n                    }\n\n                    item(\n                        key = EntryScreenItem.ITEM_HEADER,\n                        contentType = EntryScreenItem.ITEM_HEADER,\n                    ) {\n                        val missingChaptersCount = remember(chapters) {\n                            chapters.map { it.chapter.chapterNumber }.missingChaptersCount()\n                        }\n                        ItemHeader(\n                            enabled = !isAnySelected,\n                            itemCount = chapters.size,\n                            missingItemsCount = missingChaptersCount,\n                            onClick = onFilterClicked,\n                            isManga = true,\n                        )\n                    }\n\n                    sharedChapterItems(\n                        manga = state.manga,\n                        chapters = listItem,\n                        isAnyChapterSelected = chapters.fastAny { it.selected },\n                        chapterSwipeStartAction = chapterSwipeStartAction,\n                        chapterSwipeEndAction = chapterSwipeEndAction,\n                        onChapterClicked = onChapterClicked,\n                        onDownloadChapter = onDownloadChapter,\n                        onChapterSelected = onChapterSelected,\n                        onChapterSwipe = onChapterSwipe,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun MangaScreenLargeImpl(\n    state: MangaScreenModel.State.Success,\n    snackbarHostState: SnackbarHostState,\n    nextUpdate: Instant?,\n    chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction,\n    chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction,\n    navigateUp: () -> Unit,\n    onChapterClicked: (Chapter) -> Unit,\n    onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: () -> Unit,\n\n    // For tags menu\n    onTagSearch: (String) -> Unit,\n    onCopyTagToClipboard: (tag: String) -> Unit,\n\n    onFilterButtonClicked: () -> Unit,\n    onRefresh: () -> Unit,\n    onContinueReading: () -> Unit,\n    onSearch: (query: String, global: Boolean) -> Unit,\n\n    // For cover dialog\n    onCoverClicked: () -> Unit,\n\n    // For top action menu\n    onShareClicked: (() -> Unit)?,\n    onDownloadActionClicked: ((DownloadAction) -> Unit)?,\n    onEditCategoryClicked: (() -> Unit)?,\n    onEditIntervalClicked: (() -> Unit)?,\n    onMigrateClicked: (() -> Unit)?,\n    onSettingsClicked: (() -> Unit)?,\n\n    // For bottom action menu\n    onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit,\n    onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit,\n    onMarkPreviousAsReadClicked: (Chapter) -> Unit,\n    onMultiDeleteClicked: (List<Chapter>) -> Unit,\n\n    // For swipe actions\n    onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit,\n\n    // Chapter selection\n    onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onAllChapterSelected: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n) {\n    val layoutDirection = LocalLayoutDirection.current\n    val density = LocalDensity.current\n\n    val (chapters, listItem, isAnySelected) = remember(state) {\n        Triple(\n            first = state.processedChapters,\n            second = state.chapterListItems,\n            third = state.isAnySelected,\n        )\n    }\n\n    val insetPadding = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal).asPaddingValues()\n    var topBarHeight by remember { mutableIntStateOf(0) }\n\n    val chapterListState = rememberLazyListState()\n\n    BackHandler(onBack = {\n        if (isAnySelected) {\n            onAllChapterSelected(false)\n        } else {\n            navigateUp()\n        }\n    })\n\n    Scaffold(\n        topBar = {\n            val selectedChapterCount = remember(chapters) {\n                chapters.count { it.selected }\n            }\n            EntryToolbar(\n                modifier = Modifier.onSizeChanged { topBarHeight = it.height },\n                title = state.manga.title,\n                hasFilters = state.filterActive,\n                navigateUp = navigateUp,\n                onClickFilter = onFilterButtonClicked,\n                onClickShare = onShareClicked,\n                onClickDownload = onDownloadActionClicked,\n                onClickEditCategory = onEditCategoryClicked,\n                onClickRefresh = onRefresh,\n                onClickMigrate = onMigrateClicked,\n                onCancelActionMode = { onAllChapterSelected(false) },\n                onClickSettings = onSettingsClicked,\n                changeAnimeSkipIntro = null,\n                actionModeCounter = selectedChapterCount,\n                onSelectAll = { onAllChapterSelected(true) },\n                onInvertSelection = { onInvertSelection() },\n                titleAlphaProvider = { 1f },\n                backgroundAlphaProvider = { 1f },\n                isManga = true,\n            )\n        },\n        bottomBar = {\n            Box(\n                modifier = Modifier.fillMaxWidth(),\n                contentAlignment = Alignment.BottomEnd,\n            ) {\n                val selectedChapters = remember(chapters) {\n                    chapters.filter { it.selected }\n                }\n                SharedMangaBottomActionMenu(\n                    selected = selectedChapters,\n                    onMultiBookmarkClicked = onMultiBookmarkClicked,\n                    onMultiMarkAsReadClicked = onMultiMarkAsReadClicked,\n                    onMarkPreviousAsReadClicked = onMarkPreviousAsReadClicked,\n                    onDownloadChapter = onDownloadChapter,\n                    onMultiDeleteClicked = onMultiDeleteClicked,\n                    fillFraction = 0.5f,\n                )\n            }\n        },\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        floatingActionButton = {\n            val isFABVisible = remember(chapters) {\n                chapters.fastAny { !it.chapter.read } && !isAnySelected\n            }\n            AnimatedVisibility(\n                visible = isFABVisible,\n                enter = fadeIn(),\n                exit = fadeOut(),\n            ) {\n                ExtendedFloatingActionButton(\n                    text = {\n                        val isReading = remember(state.chapters) {\n                            state.chapters.fastAny { it.chapter.read }\n                        }\n                        Text(\n                            text = stringResource(\n                                if (isReading) MR.strings.action_resume else MR.strings.action_start,\n                            ),\n                        )\n                    },\n                    icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },\n                    onClick = onContinueReading,\n                    expanded = chapterListState.shouldExpandFAB(),\n                )\n            }\n        },\n    ) { contentPadding ->\n        PullRefresh(\n            refreshing = state.isRefreshingData,\n            onRefresh = onRefresh,\n            enabled = !isAnySelected,\n            indicatorPadding = PaddingValues(\n                start = insetPadding.calculateStartPadding(layoutDirection),\n                top = with(density) { topBarHeight.toDp() },\n                end = insetPadding.calculateEndPadding(layoutDirection),\n            ),\n        ) {\n            TwoPanelBox(\n                modifier = Modifier.padding(\n                    start = contentPadding.calculateStartPadding(layoutDirection),\n                    end = contentPadding.calculateEndPadding(layoutDirection),\n                ),\n                startContent = {\n                    Column(\n                        modifier = Modifier\n                            .verticalScroll(rememberScrollState())\n                            .padding(bottom = contentPadding.calculateBottomPadding()),\n                    ) {\n                        MangaInfoBox(\n                            isTabletUi = true,\n                            appBarPadding = contentPadding.calculateTopPadding(),\n                            manga = state.manga,\n                            sourceName = remember { state.source.getNameForMangaInfo() },\n                            isStubSource = remember { state.source is StubMangaSource },\n                            onCoverClick = onCoverClicked,\n                            doSearch = onSearch,\n                        )\n                        MangaActionRow(\n                            favorite = state.manga.favorite,\n                            trackingCount = state.trackingCount,\n                            nextUpdate = nextUpdate,\n                            isUserIntervalMode = state.manga.fetchInterval < 0,\n                            onAddToLibraryClicked = onAddToLibraryClicked,\n                            onWebViewClicked = onWebViewClicked,\n                            onWebViewLongClicked = onWebViewLongClicked,\n                            onTrackingClicked = onTrackingClicked,\n                            onEditIntervalClicked = onEditIntervalClicked,\n                            onEditCategory = onEditCategoryClicked,\n                        )\n                        ExpandableMangaDescription(\n                            defaultExpandState = true,\n                            description = state.manga.description,\n                            tagsProvider = { state.manga.genre },\n                            onTagSearch = onTagSearch,\n                            onCopyTagToClipboard = onCopyTagToClipboard,\n                        )\n                    }\n                },\n                endContent = {\n                    VerticalFastScroller(\n                        listState = chapterListState,\n                        topContentPadding = contentPadding.calculateTopPadding(),\n                    ) {\n                        LazyColumn(\n                            modifier = Modifier.fillMaxHeight(),\n                            state = chapterListState,\n                            contentPadding = PaddingValues(\n                                top = contentPadding.calculateTopPadding(),\n                                bottom = contentPadding.calculateBottomPadding(),\n                            ),\n                        ) {\n                            item(\n                                key = EntryScreenItem.ITEM_HEADER,\n                                contentType = EntryScreenItem.ITEM_HEADER,\n                            ) {\n                                val missingChaptersCount = remember(chapters) {\n                                    chapters.map { it.chapter.chapterNumber }.missingChaptersCount()\n                                }\n                                ItemHeader(\n                                    enabled = !isAnySelected,\n                                    itemCount = chapters.size,\n                                    missingItemsCount = missingChaptersCount,\n                                    onClick = onFilterButtonClicked,\n                                    isManga = true,\n                                )\n                            }\n\n                            sharedChapterItems(\n                                manga = state.manga,\n                                chapters = listItem,\n                                isAnyChapterSelected = chapters.fastAny { it.selected },\n                                chapterSwipeStartAction = chapterSwipeStartAction,\n                                chapterSwipeEndAction = chapterSwipeEndAction,\n                                onChapterClicked = onChapterClicked,\n                                onDownloadChapter = onDownloadChapter,\n                                onChapterSelected = onChapterSelected,\n                                onChapterSwipe = onChapterSwipe,\n                            )\n                        }\n                    }\n                },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun SharedMangaBottomActionMenu(\n    selected: List<ChapterList.Item>,\n    onMultiBookmarkClicked: (List<Chapter>, bookmarked: Boolean) -> Unit,\n    onMultiMarkAsReadClicked: (List<Chapter>, markAsRead: Boolean) -> Unit,\n    onMarkPreviousAsReadClicked: (Chapter) -> Unit,\n    onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?,\n    onMultiDeleteClicked: (List<Chapter>) -> Unit,\n    fillFraction: Float,\n    modifier: Modifier = Modifier,\n) {\n    EntryBottomActionMenu(\n        visible = selected.isNotEmpty(),\n        modifier = modifier.fillMaxWidth(fillFraction),\n        onBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected.fastMap { it.chapter }, true)\n        }.takeIf { selected.fastAny { !it.chapter.bookmark } },\n        onRemoveBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected.fastMap { it.chapter }, false)\n        }.takeIf { selected.fastAll { it.chapter.bookmark } },\n        onMarkAsViewedClicked = {\n            onMultiMarkAsReadClicked(selected.fastMap { it.chapter }, true)\n        }.takeIf { selected.fastAny { !it.chapter.read } },\n        onMarkAsUnviewedClicked = {\n            onMultiMarkAsReadClicked(selected.fastMap { it.chapter }, false)\n        }.takeIf { selected.fastAny { it.chapter.read || it.chapter.lastPageRead > 0L } },\n        onMarkPreviousAsViewedClicked = {\n            onMarkPreviousAsReadClicked(selected[0].chapter)\n        }.takeIf { selected.size == 1 },\n        onDownloadClicked = {\n            onDownloadChapter!!(selected.toList(), ChapterDownloadAction.START)\n        }.takeIf {\n            onDownloadChapter != null && selected.fastAny { it.downloadState != MangaDownload.State.DOWNLOADED }\n        },\n        onDeleteClicked = {\n            onMultiDeleteClicked(selected.fastMap { it.chapter })\n        }.takeIf {\n            selected.fastAny { it.downloadState == MangaDownload.State.DOWNLOADED }\n        },\n        isManga = true,\n    )\n}\n\nprivate fun LazyListScope.sharedChapterItems(\n    manga: Manga,\n    chapters: List<ChapterList>,\n    isAnyChapterSelected: Boolean,\n    chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction,\n    chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction,\n    onChapterClicked: (Chapter) -> Unit,\n    onDownloadChapter: ((List<ChapterList.Item>, ChapterDownloadAction) -> Unit)?,\n    onChapterSelected: (ChapterList.Item, Boolean, Boolean, Boolean) -> Unit,\n    onChapterSwipe: (ChapterList.Item, LibraryPreferences.ChapterSwipeAction) -> Unit,\n) {\n    items(\n        items = chapters,\n        key = { item ->\n            when (item) {\n                is ChapterList.MissingCount -> \"missing-count-${item.id}\"\n                is ChapterList.Item -> \"chapter-${item.id}\"\n            }\n        },\n        contentType = { EntryScreenItem.ITEM },\n    ) { item ->\n        val haptic = LocalHapticFeedback.current\n\n        when (item) {\n            is ChapterList.MissingCount -> {\n                MissingItemCountListItem(count = item.count)\n            }\n            is ChapterList.Item -> {\n                MangaChapterListItem(\n                    title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) {\n                        stringResource(\n                            MR.strings.display_mode_chapter,\n                            formatChapterNumber(item.chapter.chapterNumber),\n                        )\n                    } else {\n                        item.chapter.name\n                    },\n                    date = relativeDateTimeText(item.chapter.dateUpload),\n                    readProgress = item.chapter.lastPageRead\n                        .takeIf { !item.chapter.read && it > 0L }\n                        ?.let {\n                            stringResource(\n                                MR.strings.chapter_progress,\n                                it + 1,\n                            )\n                        },\n                    scanlator = item.chapter.scanlator.takeIf { !it.isNullOrBlank() },\n                    read = item.chapter.read,\n                    bookmark = item.chapter.bookmark,\n                    selected = item.selected,\n                    downloadIndicatorEnabled = !isAnyChapterSelected && !manga.isLocal(),\n                    downloadStateProvider = { item.downloadState },\n                    downloadProgressProvider = { item.downloadProgress },\n                    chapterSwipeStartAction = chapterSwipeStartAction,\n                    chapterSwipeEndAction = chapterSwipeEndAction,\n                    onLongClick = {\n                        onChapterSelected(item, !item.selected, true, true)\n                        haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                    },\n                    onClick = {\n                        onChapterItemClick(\n                            chapterItem = item,\n                            isAnyChapterSelected = isAnyChapterSelected,\n                            onToggleSelection = { onChapterSelected(item, !item.selected, true, false) },\n                            onChapterClicked = onChapterClicked,\n                        )\n                    },\n                    onDownloadClick = if (onDownloadChapter != null) {\n                        { onDownloadChapter(listOf(item), it) }\n                    } else {\n                        null\n                    },\n                    onChapterSwipe = {\n                        onChapterSwipe(item, it)\n                    },\n                )\n            }\n        }\n    }\n}\n\nprivate fun onChapterItemClick(\n    chapterItem: ChapterList.Item,\n    isAnyChapterSelected: Boolean,\n    onToggleSelection: (Boolean) -> Unit,\n    onChapterClicked: (Chapter) -> Unit,\n) {\n    when {\n        chapterItem.selected -> onToggleSelection(false)\n        isAnyChapterSelected -> onToggleSelection(true)\n        else -> onChapterClicked(chapterItem.chapter)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/components/BaseMangaListItem.kt",
    "content": "package eu.kanade.presentation.entries.manga.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun BaseMangaListItem(\n    manga: Manga,\n    modifier: Modifier = Modifier,\n    onClickItem: () -> Unit = {},\n    onClickCover: () -> Unit = onClickItem,\n    cover: @Composable RowScope.() -> Unit = { defaultCover(manga, onClickCover) },\n    actions: @Composable RowScope.() -> Unit = {},\n    content: @Composable RowScope.() -> Unit = { defaultContent(manga) },\n) {\n    Row(\n        modifier = modifier\n            .clickable(onClick = onClickItem)\n            .height(76.dp)\n            .padding(horizontal = MaterialTheme.padding.medium, vertical = 3.dp),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        cover()\n        content()\n        actions()\n    }\n}\n\nprivate val defaultCover: @Composable RowScope.(Manga, () -> Unit) -> Unit = { manga, onClick ->\n    ItemCover.Book(\n        modifier = Modifier\n            .fillMaxHeight(),\n        data = manga,\n        onClick = onClick,\n    )\n}\n\nprivate val defaultContent: @Composable RowScope.(Manga) -> Unit = {\n    Box(modifier = Modifier.weight(1f)) {\n        Text(\n            text = it.title,\n            modifier = Modifier\n                .padding(start = MaterialTheme.padding.medium),\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/components/ChapterDownloadIndicator.kt",
    "content": "package eu.kanade.presentation.entries.manga.components\n\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material.icons.outlined.ArrowDownward\nimport androidx.compose.material.icons.outlined.ErrorOutline\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProgressIndicatorDefaults\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.StrokeCap\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.ArrowModifier\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.components.IndicatorModifier\nimport eu.kanade.presentation.components.IndicatorSize\nimport eu.kanade.presentation.components.IndicatorStrokeWidth\nimport eu.kanade.presentation.components.commonClickable\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.IconButtonTokens\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\nenum class ChapterDownloadAction {\n    START,\n    START_NOW,\n    CANCEL,\n    DELETE,\n}\n\n@Composable\nfun ChapterDownloadIndicator(\n    enabled: Boolean,\n    downloadStateProvider: () -> MangaDownload.State,\n    downloadProgressProvider: () -> Int,\n    onClick: (ChapterDownloadAction) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    when (val downloadState = downloadStateProvider()) {\n        MangaDownload.State.NOT_DOWNLOADED -> NotDownloadedIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            onClick = onClick,\n        )\n        MangaDownload.State.QUEUE, MangaDownload.State.DOWNLOADING -> DownloadingIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            downloadState = downloadState,\n            downloadProgressProvider = downloadProgressProvider,\n            onClick = onClick,\n        )\n        MangaDownload.State.DOWNLOADED -> DownloadedIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            onClick = onClick,\n        )\n        MangaDownload.State.ERROR -> ErrorIndicator(\n            enabled = enabled,\n            modifier = modifier,\n            onClick = onClick,\n        )\n    }\n}\n\n@Composable\nprivate fun NotDownloadedIndicator(\n    enabled: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: (ChapterDownloadAction) -> Unit,\n) {\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { onClick(ChapterDownloadAction.START_NOW) },\n                onClick = { onClick(ChapterDownloadAction.START) },\n            )\n            .secondaryItemAlpha(),\n        contentAlignment = Alignment.Center,\n    ) {\n        Icon(\n            painter = painterResource(R.drawable.ic_download_item_24dp),\n            contentDescription = stringResource(MR.strings.manga_download),\n            modifier = Modifier.size(IndicatorSize),\n            tint = MaterialTheme.colorScheme.onSurfaceVariant,\n        )\n    }\n}\n\n@Composable\nprivate fun DownloadingIndicator(\n    enabled: Boolean,\n    downloadState: MangaDownload.State,\n    downloadProgressProvider: () -> Int,\n    onClick: (ChapterDownloadAction) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    var isMenuExpanded by remember { mutableStateOf(false) }\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { onClick(ChapterDownloadAction.CANCEL) },\n                onClick = { isMenuExpanded = true },\n            ),\n        contentAlignment = Alignment.Center,\n    ) {\n        val arrowColor: Color\n        val strokeColor = MaterialTheme.colorScheme.onSurfaceVariant\n        val downloadProgress = downloadProgressProvider()\n        val indeterminate = downloadState == MangaDownload.State.QUEUE ||\n            (downloadState == MangaDownload.State.DOWNLOADING && downloadProgress == 0)\n        if (indeterminate) {\n            arrowColor = strokeColor\n            CircularProgressIndicator(\n                modifier = IndicatorModifier,\n                color = strokeColor,\n                strokeWidth = IndicatorStrokeWidth,\n                trackColor = Color.Transparent,\n                strokeCap = StrokeCap.Butt,\n            )\n        } else {\n            val animatedProgress by animateFloatAsState(\n                targetValue = downloadProgress / 100f,\n                animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec,\n                label = \"progress\",\n            )\n            arrowColor = if (animatedProgress < 0.5f) {\n                strokeColor\n            } else {\n                MaterialTheme.colorScheme.background\n            }\n            CircularProgressIndicator(\n                progress = { animatedProgress },\n                modifier = IndicatorModifier,\n                color = strokeColor,\n                strokeWidth = IndicatorSize / 2,\n                trackColor = Color.Transparent,\n                strokeCap = StrokeCap.Butt,\n                gapSize = 0.dp,\n            )\n        }\n        DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {\n            DropdownMenuItem(\n                text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) },\n                onClick = {\n                    onClick(ChapterDownloadAction.START_NOW)\n                    isMenuExpanded = false\n                },\n            )\n            DropdownMenuItem(\n                text = { Text(text = stringResource(MR.strings.action_cancel)) },\n                onClick = {\n                    onClick(ChapterDownloadAction.CANCEL)\n                    isMenuExpanded = false\n                },\n            )\n        }\n        Icon(\n            imageVector = Icons.Outlined.ArrowDownward,\n            contentDescription = null,\n            modifier = ArrowModifier,\n            tint = arrowColor,\n        )\n    }\n}\n\n@Composable\nprivate fun DownloadedIndicator(\n    enabled: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: (ChapterDownloadAction) -> Unit,\n) {\n    var isMenuExpanded by remember { mutableStateOf(false) }\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { isMenuExpanded = true },\n                onClick = { isMenuExpanded = true },\n            ),\n        contentAlignment = Alignment.Center,\n    ) {\n        Icon(\n            imageVector = Icons.Filled.CheckCircle,\n            contentDescription = null,\n            modifier = Modifier.size(IndicatorSize),\n            tint = MaterialTheme.colorScheme.onSurfaceVariant,\n        )\n        DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {\n            DropdownMenuItem(\n                text = { Text(text = stringResource(MR.strings.action_delete)) },\n                onClick = {\n                    onClick(ChapterDownloadAction.DELETE)\n                    isMenuExpanded = false\n                },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ErrorIndicator(\n    enabled: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: (ChapterDownloadAction) -> Unit,\n) {\n    Box(\n        modifier = modifier\n            .size(IconButtonTokens.StateLayerSize)\n            .commonClickable(\n                enabled = enabled,\n                hapticFeedback = LocalHapticFeedback.current,\n                onLongClick = { onClick(ChapterDownloadAction.START) },\n                onClick = { onClick(ChapterDownloadAction.START) },\n            ),\n        contentAlignment = Alignment.Center,\n    ) {\n        Icon(\n            imageVector = Icons.Outlined.ErrorOutline,\n            contentDescription = stringResource(AYMR.strings.download_error),\n            modifier = Modifier.size(IndicatorSize),\n            tint = MaterialTheme.colorScheme.error,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaChapterListItem.kt",
    "content": "package eu.kanade.presentation.entries.manga.components\n\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Bookmark\nimport androidx.compose.material.icons.filled.Circle\nimport androidx.compose.material.icons.outlined.BookmarkAdd\nimport androidx.compose.material.icons.outlined.BookmarkRemove\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.Done\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.FileDownloadOff\nimport androidx.compose.material.icons.outlined.RemoveDone\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.clipToBounds\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport me.saket.swipe.SwipeableActionsBox\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.selectedBackground\n\n@Composable\nfun MangaChapterListItem(\n    title: String,\n    date: String?,\n    readProgress: String?,\n    scanlator: String?,\n    read: Boolean,\n    bookmark: Boolean,\n    selected: Boolean,\n    downloadIndicatorEnabled: Boolean,\n    downloadStateProvider: () -> MangaDownload.State,\n    downloadProgressProvider: () -> Int,\n    chapterSwipeStartAction: LibraryPreferences.ChapterSwipeAction,\n    chapterSwipeEndAction: LibraryPreferences.ChapterSwipeAction,\n    onLongClick: () -> Unit,\n    onClick: () -> Unit,\n    onDownloadClick: ((ChapterDownloadAction) -> Unit)?,\n    onChapterSwipe: (LibraryPreferences.ChapterSwipeAction) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val start = getSwipeAction(\n        action = chapterSwipeStartAction,\n        read = read,\n        bookmark = bookmark,\n        downloadState = downloadStateProvider(),\n        background = MaterialTheme.colorScheme.primaryContainer,\n        onSwipe = { onChapterSwipe(chapterSwipeStartAction) },\n    )\n    val end = getSwipeAction(\n        action = chapterSwipeEndAction,\n        read = read,\n        bookmark = bookmark,\n        downloadState = downloadStateProvider(),\n        background = MaterialTheme.colorScheme.primaryContainer,\n        onSwipe = { onChapterSwipe(chapterSwipeEndAction) },\n    )\n\n    SwipeableActionsBox(\n        modifier = Modifier.clipToBounds(),\n        startActions = listOfNotNull(start),\n        endActions = listOfNotNull(end),\n        swipeThreshold = swipeActionThreshold,\n        backgroundUntilSwipeThreshold = MaterialTheme.colorScheme.surfaceContainerLowest,\n    ) {\n        Row(\n            modifier = modifier\n                .selectedBackground(selected)\n                .combinedClickable(\n                    onClick = onClick,\n                    onLongClick = onLongClick,\n                )\n                .padding(start = 16.dp, top = 12.dp, end = 8.dp, bottom = 12.dp),\n        ) {\n            Column(\n                modifier = Modifier.weight(1f),\n                verticalArrangement = Arrangement.spacedBy(6.dp),\n            ) {\n                Row(\n                    horizontalArrangement = Arrangement.spacedBy(2.dp),\n                    verticalAlignment = Alignment.CenterVertically,\n\n                ) {\n                    var textHeight by remember { mutableIntStateOf(0) }\n                    if (!read) {\n                        Icon(\n                            imageVector = Icons.Filled.Circle,\n                            contentDescription = stringResource(MR.strings.unread),\n                            modifier = Modifier\n                                .height(8.dp)\n                                .padding(end = 4.dp),\n                            tint = MaterialTheme.colorScheme.primary,\n                        )\n                    }\n                    if (bookmark) {\n                        Icon(\n                            imageVector = Icons.Filled.Bookmark,\n                            contentDescription = stringResource(MR.strings.action_filter_bookmarked),\n                            modifier = Modifier\n                                .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }),\n                            tint = MaterialTheme.colorScheme.primary,\n                        )\n                    }\n                    Text(\n                        text = title,\n                        style = MaterialTheme.typography.bodyMedium,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                        onTextLayout = { textHeight = it.size.height },\n                        color = LocalContentColor.current.copy(alpha = if (read) DISABLED_ALPHA else 1f),\n                    )\n                }\n\n                Row {\n                    val subtitleStyle = MaterialTheme.typography.bodySmall\n                        .merge(\n                            color = LocalContentColor.current\n                                .copy(alpha = if (read) DISABLED_ALPHA else SECONDARY_ALPHA),\n                        )\n                    ProvideTextStyle(value = subtitleStyle) {\n                        if (date != null) {\n                            Text(\n                                text = date,\n                                maxLines = 1,\n                                overflow = TextOverflow.Ellipsis,\n                            )\n                            if (readProgress != null || scanlator != null) DotSeparatorText()\n                        }\n                        if (readProgress != null) {\n                            Text(\n                                text = readProgress,\n                                maxLines = 1,\n                                overflow = TextOverflow.Ellipsis,\n                                color = LocalContentColor.current.copy(alpha = DISABLED_ALPHA),\n                            )\n                            if (scanlator != null) DotSeparatorText()\n                        }\n                        if (scanlator != null) {\n                            Text(\n                                text = scanlator,\n                                maxLines = 1,\n                                overflow = TextOverflow.Ellipsis,\n                            )\n                        }\n                    }\n                }\n            }\n\n            ChapterDownloadIndicator(\n                enabled = downloadIndicatorEnabled,\n                modifier = Modifier.padding(start = 4.dp),\n                downloadStateProvider = downloadStateProvider,\n                downloadProgressProvider = downloadProgressProvider,\n                onClick = { onDownloadClick?.invoke(it) },\n            )\n        }\n    }\n}\n\nprivate fun getSwipeAction(\n    action: LibraryPreferences.ChapterSwipeAction,\n    read: Boolean,\n    bookmark: Boolean,\n    downloadState: MangaDownload.State,\n    background: Color,\n    onSwipe: () -> Unit,\n): me.saket.swipe.SwipeAction? {\n    return when (action) {\n        LibraryPreferences.ChapterSwipeAction.ToggleRead -> swipeAction(\n            icon = if (!read) Icons.Outlined.Done else Icons.Outlined.RemoveDone,\n            background = background,\n            isUndo = read,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.ChapterSwipeAction.ToggleBookmark -> swipeAction(\n            icon = if (!bookmark) Icons.Outlined.BookmarkAdd else Icons.Outlined.BookmarkRemove,\n            background = background,\n            isUndo = bookmark,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.ChapterSwipeAction.Download -> swipeAction(\n            icon = when (downloadState) {\n                MangaDownload.State.NOT_DOWNLOADED, MangaDownload.State.ERROR -> Icons.Outlined.Download\n                MangaDownload.State.QUEUE, MangaDownload.State.DOWNLOADING -> Icons.Outlined.FileDownloadOff\n                MangaDownload.State.DOWNLOADED -> Icons.Outlined.Delete\n            },\n            background = background,\n            onSwipe = onSwipe,\n        )\n        LibraryPreferences.ChapterSwipeAction.Disabled -> null\n    }\n}\n\nprivate fun swipeAction(\n    onSwipe: () -> Unit,\n    icon: ImageVector,\n    background: Color,\n    isUndo: Boolean = false,\n): me.saket.swipe.SwipeAction {\n    return me.saket.swipe.SwipeAction(\n        icon = {\n            Icon(\n                modifier = Modifier.padding(16.dp),\n                imageVector = icon,\n                tint = contentColorFor(background),\n                contentDescription = null,\n            )\n        },\n        background = background,\n        onSwipe = onSwipe,\n        isUndo = isUndo,\n    )\n}\n\nprivate val swipeActionThreshold = 56.dp\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaCoverDialog.kt",
    "content": "package eu.kanade.presentation.entries.manga.components\n\nimport android.graphics.Bitmap\nimport android.graphics.drawable.BitmapDrawable\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\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.navigationBarsPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material.icons.outlined.Share\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\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.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.DpOffset\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.viewinterop.AndroidView\nimport androidx.compose.ui.window.Dialog\nimport androidx.compose.ui.window.DialogProperties\nimport androidx.core.view.updatePadding\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.CachePolicy\nimport coil3.request.ImageRequest\nimport coil3.size.Size\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.entries.EditCoverAction\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.clickableNoIndication\n\n@Composable\nfun MangaCoverDialog(\n    manga: Manga,\n    isCustomCover: Boolean,\n    snackbarHostState: SnackbarHostState,\n    onShareClick: () -> Unit,\n    onSaveClick: () -> Unit,\n    onEditClick: ((EditCoverAction) -> Unit)?,\n    onDismissRequest: () -> Unit,\n) {\n    Dialog(\n        onDismissRequest = onDismissRequest,\n        properties = DialogProperties(\n            usePlatformDefaultWidth = false,\n            decorFitsSystemWindows = false, // Doesn't work https://issuetracker.google.com/issues/246909281\n        ),\n    ) {\n        Scaffold(\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n            containerColor = Color.Transparent,\n            bottomBar = {\n                Row(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .padding(4.dp)\n                        .navigationBarsPadding(),\n                ) {\n                    ActionsPill {\n                        IconButton(onClick = onDismissRequest) {\n                            Icon(\n                                imageVector = Icons.Outlined.Close,\n                                contentDescription = stringResource(MR.strings.action_close),\n                            )\n                        }\n                    }\n                    Spacer(modifier = Modifier.weight(1f))\n                    ActionsPill {\n                        AppBarActions(\n                            actions = persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_share),\n                                    icon = Icons.Outlined.Share,\n                                    onClick = onShareClick,\n                                ),\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_save),\n                                    icon = Icons.Outlined.Save,\n                                    onClick = onSaveClick,\n                                ),\n                            ),\n                        )\n                        if (onEditClick != null) {\n                            Box {\n                                var expanded by remember { mutableStateOf(false) }\n                                IconButton(\n                                    onClick = {\n                                        if (isCustomCover) {\n                                            expanded = true\n                                        } else {\n                                            onEditClick(EditCoverAction.EDIT)\n                                        }\n                                    },\n                                ) {\n                                    Icon(\n                                        imageVector = Icons.Outlined.Edit,\n                                        contentDescription = stringResource(\n                                            MR.strings.action_edit_cover,\n                                        ),\n                                    )\n                                }\n                                DropdownMenu(\n                                    expanded = expanded,\n                                    onDismissRequest = { expanded = false },\n                                    offset = DpOffset(8.dp, 0.dp),\n                                ) {\n                                    DropdownMenuItem(\n                                        text = { Text(text = stringResource(MR.strings.action_edit)) },\n                                        onClick = {\n                                            onEditClick(EditCoverAction.EDIT)\n                                            expanded = false\n                                        },\n                                    )\n                                    DropdownMenuItem(\n                                        text = { Text(text = stringResource(MR.strings.action_delete)) },\n                                        onClick = {\n                                            onEditClick(EditCoverAction.DELETE)\n                                            expanded = false\n                                        },\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            },\n        ) { contentPadding ->\n            val statusBarPaddingPx = with(LocalDensity.current) { contentPadding.calculateTopPadding().roundToPx() }\n            val bottomPaddingPx = with(LocalDensity.current) { contentPadding.calculateBottomPadding().roundToPx() }\n\n            Box(\n                modifier = Modifier\n                    .fillMaxSize()\n                    .clickableNoIndication(onClick = onDismissRequest),\n            ) {\n                AndroidView(\n                    factory = {\n                        ReaderPageImageView(it).apply {\n                            onViewClicked = onDismissRequest\n                            clipToPadding = false\n                            clipChildren = false\n                        }\n                    },\n                    update = { view ->\n                        val request = ImageRequest.Builder(view.context)\n                            .data(manga)\n                            .size(Size.ORIGINAL)\n                            .memoryCachePolicy(CachePolicy.DISABLED)\n                            .target { image ->\n                                val drawable = image.asDrawable(view.context.resources)\n\n                                // Copy bitmap in case it came from memory cache\n                                // Because SSIV needs to thoroughly read the image\n                                val copy = (drawable as? BitmapDrawable)?.let {\n                                    BitmapDrawable(\n                                        view.context.resources,\n                                        it.bitmap.copy(Bitmap.Config.HARDWARE, false),\n                                    )\n                                } ?: drawable\n                                view.setImage(copy, ReaderPageImageView.Config(zoomDuration = 500))\n                            }\n                            .build()\n                        view.context.imageLoader.enqueue(request)\n\n                        view.updatePadding(top = statusBarPaddingPx, bottom = bottomPaddingPx)\n                    },\n                    modifier = Modifier.fillMaxSize(),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ActionsPill(content: @Composable () -> Unit) {\n    Row(\n        modifier = Modifier\n            .clip(MaterialTheme.shapes.extraLarge)\n            .background(MaterialTheme.colorScheme.background.copy(alpha = 0.95f)),\n    ) {\n        content()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaInfoHeader.kt",
    "content": "package eu.kanade.presentation.entries.manga.components\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.spring\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\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.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.Spacer\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.sizeIn\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.text.selection.SelectionContainer\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Brush\nimport androidx.compose.material.icons.filled.Favorite\nimport androidx.compose.material.icons.filled.HourglassEmpty\nimport androidx.compose.material.icons.filled.PersonOutline\nimport androidx.compose.material.icons.filled.Warning\nimport androidx.compose.material.icons.outlined.AttachMoney\nimport androidx.compose.material.icons.outlined.Block\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material.icons.outlined.Done\nimport androidx.compose.material.icons.outlined.DoneAll\nimport androidx.compose.material.icons.outlined.FavoriteBorder\nimport androidx.compose.material.icons.outlined.Pause\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Schedule\nimport androidx.compose.material.icons.outlined.Sync\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.LocalMinimumInteractiveComponentSize\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.SuggestionChip\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\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.alpha\nimport androidx.compose.ui.draw.blur\nimport androidx.compose.ui.draw.clipToBounds\nimport androidx.compose.ui.draw.drawWithContent\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.layout.Layout\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.Constraints\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport coil3.compose.AsyncImage\nimport coil3.request.ImageRequest\nimport coil3.request.crossfade\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.TextButton\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.clickableNoIndication\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport java.time.Instant\nimport java.time.temporal.ChronoUnit\nimport kotlin.math.roundToInt\n\nprivate val whitespaceLineRegex = Regex(\"[\\\\r\\\\n]{2,}\", setOf(RegexOption.MULTILINE))\n\n@Composable\nfun MangaInfoBox(\n    isTabletUi: Boolean,\n    appBarPadding: Dp,\n    manga: Manga,\n    sourceName: String,\n    isStubSource: Boolean,\n    onCoverClick: () -> Unit,\n    doSearch: (query: String, global: Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Box(modifier = modifier) {\n        // Backdrop\n        val backdropGradientColors = listOf(\n            Color.Transparent,\n            MaterialTheme.colorScheme.background,\n        )\n        AsyncImage(\n            model = ImageRequest.Builder(LocalContext.current)\n                .data(manga)\n                .crossfade(true)\n                .build(),\n            contentDescription = null,\n            contentScale = ContentScale.Crop,\n            modifier = Modifier\n                .matchParentSize()\n                .drawWithContent {\n                    drawContent()\n                    drawRect(\n                        brush = Brush.verticalGradient(colors = backdropGradientColors),\n                    )\n                }\n                .blur(4.dp)\n                .alpha(0.2f),\n        )\n\n        // Manga & source info\n        CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) {\n            if (!isTabletUi) {\n                MangaAndSourceTitlesSmall(\n                    appBarPadding = appBarPadding,\n                    manga = manga,\n                    sourceName = sourceName,\n                    isStubSource = isStubSource,\n                    onCoverClick = onCoverClick,\n                    doSearch = doSearch,\n                )\n            } else {\n                MangaAndSourceTitlesLarge(\n                    appBarPadding = appBarPadding,\n                    manga = manga,\n                    sourceName = sourceName,\n                    isStubSource = isStubSource,\n                    onCoverClick = onCoverClick,\n                    doSearch = doSearch,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun MangaActionRow(\n    favorite: Boolean,\n    trackingCount: Int,\n    nextUpdate: Instant?,\n    isUserIntervalMode: Boolean,\n    onAddToLibraryClicked: () -> Unit,\n    onWebViewClicked: (() -> Unit)?,\n    onWebViewLongClicked: (() -> Unit)?,\n    onTrackingClicked: () -> Unit,\n    onEditIntervalClicked: (() -> Unit)?,\n    onEditCategory: (() -> Unit)?,\n    modifier: Modifier = Modifier,\n) {\n    val defaultActionButtonColor = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA)\n\n    // TODO: show something better when using custom interval\n    val nextUpdateDays = remember(nextUpdate) {\n        return@remember if (nextUpdate != null) {\n            val now = Instant.now()\n            now.until(nextUpdate, ChronoUnit.DAYS).toInt().coerceAtLeast(0)\n        } else {\n            null\n        }\n    }\n\n    Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) {\n        MangaActionButton(\n            title = if (favorite) {\n                stringResource(MR.strings.in_library)\n            } else {\n                stringResource(MR.strings.add_to_library)\n            },\n            icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder,\n            color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor,\n            onClick = onAddToLibraryClicked,\n            onLongClick = onEditCategory,\n        )\n        MangaActionButton(\n            title = when (nextUpdateDays) {\n                null -> stringResource(MR.strings.not_applicable)\n                0 -> stringResource(MR.strings.manga_interval_expected_update_soon)\n                else -> pluralStringResource(\n                    MR.plurals.day,\n                    count = nextUpdateDays,\n                    nextUpdateDays,\n                )\n            },\n            icon = Icons.Default.HourglassEmpty,\n            color = if (isUserIntervalMode) MaterialTheme.colorScheme.primary else defaultActionButtonColor,\n            onClick = { onEditIntervalClicked?.invoke() },\n        )\n        MangaActionButton(\n            title = if (trackingCount == 0) {\n                stringResource(MR.strings.manga_tracking_tab)\n            } else {\n                pluralStringResource(MR.plurals.num_trackers, count = trackingCount, trackingCount)\n            },\n            icon = if (trackingCount == 0) Icons.Outlined.Sync else Icons.Outlined.Done,\n            color = if (trackingCount == 0) defaultActionButtonColor else MaterialTheme.colorScheme.primary,\n            onClick = onTrackingClicked,\n        )\n        if (onWebViewClicked != null) {\n            MangaActionButton(\n                title = stringResource(MR.strings.action_web_view),\n                icon = Icons.Outlined.Public,\n                color = defaultActionButtonColor,\n                onClick = onWebViewClicked,\n                onLongClick = onWebViewLongClicked,\n            )\n        }\n    }\n}\n\n@Composable\nfun ExpandableMangaDescription(\n    defaultExpandState: Boolean,\n    description: String?,\n    tagsProvider: () -> List<String>?,\n    onTagSearch: (String) -> Unit,\n    onCopyTagToClipboard: (tag: String) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Column(modifier = modifier) {\n        val (expanded, onExpanded) = rememberSaveable {\n            mutableStateOf(defaultExpandState)\n        }\n        val desc =\n            description.takeIf { !it.isNullOrBlank() } ?: stringResource(\n                MR.strings.description_placeholder,\n            )\n        val trimmedDescription = remember(desc) {\n            desc\n                .replace(whitespaceLineRegex, \"\\n\")\n                .trimEnd()\n        }\n        MangaSummary(\n            expandedDescription = desc,\n            shrunkDescription = trimmedDescription,\n            expanded = expanded,\n            modifier = Modifier\n                .padding(top = 8.dp)\n                .padding(horizontal = 16.dp)\n                .clickableNoIndication { onExpanded(!expanded) },\n        )\n        val tags = tagsProvider()\n        if (!tags.isNullOrEmpty()) {\n            Box(\n                modifier = Modifier\n                    .padding(top = 8.dp)\n                    .padding(vertical = 12.dp)\n                    .animateContentSize(animationSpec = spring())\n                    .fillMaxWidth(),\n            ) {\n                var showMenu by remember { mutableStateOf(false) }\n                var tagSelected by remember { mutableStateOf(\"\") }\n                DropdownMenu(\n                    expanded = showMenu,\n                    onDismissRequest = { showMenu = false },\n                ) {\n                    DropdownMenuItem(\n                        text = { Text(text = stringResource(MR.strings.action_search)) },\n                        onClick = {\n                            onTagSearch(tagSelected)\n                            showMenu = false\n                        },\n                    )\n                    DropdownMenuItem(\n                        text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) },\n                        onClick = {\n                            onCopyTagToClipboard(tagSelected)\n                            showMenu = false\n                        },\n                    )\n                }\n                if (expanded) {\n                    FlowRow(\n                        modifier = Modifier.padding(horizontal = 16.dp),\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                    ) {\n                        tags.forEach {\n                            TagsChip(\n                                modifier = DefaultTagChipModifier,\n                                text = it,\n                                onClick = {\n                                    tagSelected = it\n                                    showMenu = true\n                                },\n                            )\n                        }\n                    }\n                } else {\n                    LazyRow(\n                        contentPadding = PaddingValues(horizontal = MaterialTheme.padding.medium),\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                    ) {\n                        items(items = tags) {\n                            TagsChip(\n                                modifier = DefaultTagChipModifier,\n                                text = it,\n                                onClick = {\n                                    tagSelected = it\n                                    showMenu = true\n                                },\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun MangaAndSourceTitlesLarge(\n    appBarPadding: Dp,\n    manga: Manga,\n    sourceName: String,\n    isStubSource: Boolean,\n    onCoverClick: () -> Unit,\n    doSearch: (query: String, global: Boolean) -> Unit,\n) {\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(start = 16.dp, top = appBarPadding + 16.dp, end = 16.dp),\n        horizontalAlignment = Alignment.CenterHorizontally,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier.fillMaxWidth(0.65f),\n            data = ImageRequest.Builder(LocalContext.current)\n                .data(manga)\n                .crossfade(true)\n                .build(),\n            contentDescription = stringResource(MR.strings.manga_cover),\n            onClick = onCoverClick,\n        )\n        Spacer(modifier = Modifier.height(16.dp))\n        MangaContentInfo(\n            title = manga.title,\n            author = manga.author,\n            artist = manga.artist,\n            status = manga.status,\n            sourceName = sourceName,\n            isStubSource = isStubSource,\n            doSearch = doSearch,\n            textAlign = TextAlign.Center,\n        )\n    }\n}\n\n@Composable\nprivate fun MangaAndSourceTitlesSmall(\n    appBarPadding: Dp,\n    manga: Manga,\n    sourceName: String,\n    isStubSource: Boolean,\n    onCoverClick: () -> Unit,\n    doSearch: (query: String, global: Boolean) -> Unit,\n) {\n    Row(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(start = 16.dp, top = appBarPadding + 16.dp, end = 16.dp),\n        horizontalArrangement = Arrangement.spacedBy(16.dp),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier\n                .sizeIn(maxWidth = 100.dp)\n                .align(Alignment.Top),\n            data = ImageRequest.Builder(LocalContext.current)\n                .data(manga)\n                .crossfade(true)\n                .build(),\n            contentDescription = stringResource(MR.strings.manga_cover),\n            onClick = onCoverClick,\n        )\n        Column(\n            verticalArrangement = Arrangement.spacedBy(2.dp),\n        ) {\n            MangaContentInfo(\n                title = manga.title,\n                author = manga.author,\n                artist = manga.artist,\n                status = manga.status,\n                sourceName = sourceName,\n                isStubSource = isStubSource,\n                doSearch = doSearch,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.MangaContentInfo(\n    title: String,\n    author: String?,\n    artist: String?,\n    status: Long,\n    sourceName: String,\n    isStubSource: Boolean,\n    doSearch: (query: String, global: Boolean) -> Unit,\n    textAlign: TextAlign? = LocalTextStyle.current.textAlign,\n) {\n    val context = LocalContext.current\n    Text(\n        text = title.ifBlank { stringResource(MR.strings.unknown_title) },\n        style = MaterialTheme.typography.titleLarge,\n        modifier = Modifier.clickableNoIndication(\n            onLongClick = {\n                if (title.isNotBlank()) {\n                    context.copyToClipboard(\n                        title,\n                        title,\n                    )\n                }\n            },\n            onClick = { if (title.isNotBlank()) doSearch(title, true) },\n        ),\n        textAlign = textAlign,\n    )\n\n    Spacer(modifier = Modifier.height(2.dp))\n\n    Row(\n        modifier = Modifier.secondaryItemAlpha(),\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Icon(\n            imageVector = Icons.Filled.PersonOutline,\n            contentDescription = null,\n            modifier = Modifier.size(16.dp),\n        )\n        Text(\n            text = author?.takeIf { it.isNotBlank() }\n                ?: stringResource(MR.strings.unknown_author),\n            style = MaterialTheme.typography.titleSmall,\n            modifier = Modifier\n                .clickableNoIndication(\n                    onLongClick = {\n                        if (!author.isNullOrBlank()) {\n                            context.copyToClipboard(\n                                author,\n                                author,\n                            )\n                        }\n                    },\n                    onClick = { if (!author.isNullOrBlank()) doSearch(author, true) },\n                ),\n            textAlign = textAlign,\n        )\n    }\n\n    if (!artist.isNullOrBlank() && author != artist) {\n        Row(\n            modifier = Modifier.secondaryItemAlpha(),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Filled.Brush,\n                contentDescription = null,\n                modifier = Modifier.size(16.dp),\n            )\n            Text(\n                text = artist,\n                style = MaterialTheme.typography.titleSmall,\n                modifier = Modifier\n                    .clickableNoIndication(\n                        onLongClick = { context.copyToClipboard(artist, artist) },\n                        onClick = { doSearch(artist, true) },\n                    ),\n                textAlign = textAlign,\n            )\n        }\n    }\n\n    Spacer(modifier = Modifier.height(2.dp))\n\n    Row(\n        modifier = Modifier.secondaryItemAlpha(),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Icon(\n            imageVector = when (status) {\n                SManga.ONGOING.toLong() -> Icons.Outlined.Schedule\n                SManga.COMPLETED.toLong() -> Icons.Outlined.DoneAll\n                SManga.LICENSED.toLong() -> Icons.Outlined.AttachMoney\n                SManga.PUBLISHING_FINISHED.toLong() -> Icons.Outlined.Done\n                SManga.CANCELLED.toLong() -> Icons.Outlined.Close\n                SManga.ON_HIATUS.toLong() -> Icons.Outlined.Pause\n                else -> Icons.Outlined.Block\n            },\n            contentDescription = null,\n            modifier = Modifier\n                .padding(end = 4.dp)\n                .size(16.dp),\n        )\n        ProvideTextStyle(MaterialTheme.typography.bodyMedium) {\n            Text(\n                text = when (status) {\n                    SManga.ONGOING.toLong() -> stringResource(MR.strings.ongoing)\n                    SManga.COMPLETED.toLong() -> stringResource(MR.strings.completed)\n                    SManga.LICENSED.toLong() -> stringResource(MR.strings.licensed)\n                    SManga.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished)\n                    SManga.CANCELLED.toLong() -> stringResource(MR.strings.cancelled)\n                    SManga.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus)\n                    else -> stringResource(MR.strings.unknown)\n                },\n                overflow = TextOverflow.Ellipsis,\n                maxLines = 1,\n            )\n            DotSeparatorText()\n            if (isStubSource) {\n                Icon(\n                    imageVector = Icons.Filled.Warning,\n                    contentDescription = null,\n                    modifier = Modifier\n                        .padding(end = 4.dp)\n                        .size(16.dp),\n                    tint = MaterialTheme.colorScheme.error,\n                )\n            }\n            Text(\n                text = sourceName,\n                modifier = Modifier.clickableNoIndication {\n                    doSearch(\n                        sourceName,\n                        false,\n                    )\n                },\n                overflow = TextOverflow.Ellipsis,\n                maxLines = 1,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun MangaSummary(\n    expandedDescription: String,\n    shrunkDescription: String,\n    expanded: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    val animProgress by animateFloatAsState(\n        targetValue = if (expanded) 1f else 0f,\n        label = \"summary\",\n    )\n    Layout(\n        modifier = modifier.clipToBounds(),\n        contents = listOf(\n            {\n                Text(\n                    text = \"\\n\\n\", // Shows at least 3 lines\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n            },\n            {\n                Text(\n                    text = expandedDescription,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n            },\n            {\n                SelectionContainer {\n                    Text(\n                        text = if (expanded) expandedDescription else shrunkDescription,\n                        maxLines = Int.MAX_VALUE,\n                        style = MaterialTheme.typography.bodyMedium,\n                        color = MaterialTheme.colorScheme.onBackground,\n                        modifier = Modifier.secondaryItemAlpha(),\n                    )\n                }\n            },\n            {\n                val colors = listOf(Color.Transparent, MaterialTheme.colorScheme.background)\n                Box(\n                    modifier = Modifier.background(Brush.verticalGradient(colors = colors)),\n                    contentAlignment = Alignment.Center,\n                ) {\n                    val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down)\n                    Icon(\n                        painter = rememberAnimatedVectorPainter(image, !expanded),\n                        contentDescription = stringResource(\n                            if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand,\n                        ),\n                        tint = MaterialTheme.colorScheme.onBackground,\n                        modifier = Modifier.background(Brush.radialGradient(colors = colors.asReversed())),\n                    )\n                }\n            },\n        ),\n    ) { (shrunk, expanded, actual, scrim), constraints ->\n        val shrunkHeight = shrunk.single()\n            .measure(constraints)\n            .height\n        val expandedHeight = expanded.single()\n            .measure(constraints)\n            .height\n        val heightDelta = expandedHeight - shrunkHeight\n        val scrimHeight = 24.dp.roundToPx()\n\n        val actualPlaceable = actual.single()\n            .measure(constraints)\n        val scrimPlaceable = scrim.single()\n            .measure(Constraints.fixed(width = constraints.maxWidth, height = scrimHeight))\n\n        val currentHeight = shrunkHeight + ((heightDelta + scrimHeight) * animProgress).roundToInt()\n        layout(constraints.maxWidth, currentHeight) {\n            actualPlaceable.place(0, 0)\n\n            val scrimY = currentHeight - scrimHeight\n            scrimPlaceable.place(0, scrimY)\n        }\n    }\n}\n\nprivate val DefaultTagChipModifier = Modifier.padding(vertical = 4.dp)\n\n@Composable\nprivate fun TagsChip(\n    text: String,\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit,\n) {\n    CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides 0.dp) {\n        SuggestionChip(\n            modifier = modifier,\n            onClick = onClick,\n            label = { Text(text = text, style = MaterialTheme.typography.bodySmall) },\n        )\n    }\n}\n\n@Composable\nprivate fun RowScope.MangaActionButton(\n    title: String,\n    icon: ImageVector,\n    color: Color,\n    onClick: () -> Unit,\n    onLongClick: (() -> Unit)? = null,\n) {\n    TextButton(\n        onClick = onClick,\n        modifier = Modifier.weight(1f),\n        onLongClick = onLongClick,\n    ) {\n        Column(horizontalAlignment = Alignment.CenterHorizontally) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                tint = color,\n                modifier = Modifier.size(20.dp),\n            )\n            Spacer(Modifier.height(4.dp))\n            Text(\n                text = title,\n                color = color,\n                fontSize = 12.sp,\n                textAlign = TextAlign.Center,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/entries/manga/components/ScanlatorFilterDialog.kt",
    "content": "package eu.kanade.presentation.entries.manga.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.FlowRow\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.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.rounded.CheckBoxOutlineBlank\nimport androidx.compose.material.icons.rounded.DisabledByDefault\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.minimumInteractiveComponentSize\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.window.DialogProperties\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ScanlatorFilterDialog(\n    availableScanlators: Set<String>,\n    excludedScanlators: Set<String>,\n    onDismissRequest: () -> Unit,\n    onConfirm: (Set<String>) -> Unit,\n) {\n    val sortedAvailableScanlators = remember(availableScanlators) {\n        availableScanlators.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it })\n    }\n    val mutableExcludedScanlators = remember(excludedScanlators) { excludedScanlators.toMutableStateList() }\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        title = { Text(text = stringResource(MR.strings.exclude_scanlators)) },\n        text = textFunc@{\n            if (sortedAvailableScanlators.isEmpty()) {\n                Text(text = stringResource(MR.strings.no_scanlators_found))\n                return@textFunc\n            }\n            Box {\n                val state = rememberLazyListState()\n                LazyColumn(state = state) {\n                    sortedAvailableScanlators.forEach { scanlator ->\n                        item {\n                            val isExcluded = mutableExcludedScanlators.contains(scanlator)\n                            Row(\n                                verticalAlignment = Alignment.CenterVertically,\n                                modifier = Modifier\n                                    .clickable {\n                                        if (isExcluded) {\n                                            mutableExcludedScanlators.remove(scanlator)\n                                        } else {\n                                            mutableExcludedScanlators.add(scanlator)\n                                        }\n                                    }\n                                    .minimumInteractiveComponentSize()\n                                    .clip(MaterialTheme.shapes.small)\n                                    .fillMaxWidth()\n                                    .padding(horizontal = MaterialTheme.padding.small),\n                            ) {\n                                Icon(\n                                    imageVector = if (isExcluded) {\n                                        Icons.Rounded.DisabledByDefault\n                                    } else {\n                                        Icons.Rounded.CheckBoxOutlineBlank\n                                    },\n                                    tint = if (isExcluded) {\n                                        MaterialTheme.colorScheme.primary\n                                    } else {\n                                        LocalContentColor.current\n                                    },\n                                    contentDescription = null,\n                                )\n                                Text(\n                                    text = scanlator,\n                                    style = MaterialTheme.typography.bodyMedium,\n                                    modifier = Modifier.padding(start = 24.dp),\n                                )\n                            }\n                        }\n                    }\n                }\n                if (state.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter))\n                if (state.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter))\n            }\n        },\n        properties = DialogProperties(\n            usePlatformDefaultWidth = true,\n        ),\n        confirmButton = {\n            if (sortedAvailableScanlators.isEmpty()) {\n                TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            } else {\n                FlowRow {\n                    if (mutableExcludedScanlators.isEmpty()) {\n                        TextButton(onClick = { mutableExcludedScanlators.addAll(availableScanlators) }) {\n                            Text(text = stringResource(MR.strings.action_select_all))\n                        }\n                    } else {\n                        TextButton(onClick = mutableExcludedScanlators::clear) {\n                            Text(text = stringResource(MR.strings.action_reset))\n                        }\n                    }\n                    Spacer(modifier = Modifier.weight(1f))\n                    TextButton(onClick = onDismissRequest) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    TextButton(\n                        onClick = {\n                            onConfirm(mutableExcludedScanlators.toSet())\n                            onDismissRequest()\n                        },\n                    ) {\n                        Text(text = stringResource(MR.strings.action_ok))\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/HistoryDialogs.kt",
    "content": "package eu.kanade.presentation.history\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport kotlin.random.Random\n\n@Composable\nfun HistoryDeleteDialog(\n    onDismissRequest: () -> Unit,\n    onDelete: (Boolean) -> Unit,\n    isManga: Boolean,\n) {\n    var removeEverything by remember { mutableStateOf(false) }\n\n    AlertDialog(\n        title = {\n            Text(text = stringResource(MR.strings.action_remove))\n        },\n        text = {\n            Column(\n                verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                val subtitle = if (isManga) {\n                    MR.strings.dialog_with_checkbox_remove_description\n                } else {\n                    AYMR.strings.dialog_with_checkbox_remove_description_anime\n                }\n                Text(text = stringResource(subtitle))\n\n                LabeledCheckbox(\n                    label = if (isManga) {\n                        stringResource(AYMR.strings.dialog_with_checkbox_reset)\n                    } else {\n                        stringResource(AYMR.strings.dialog_with_checkbox_reset_anime)\n                    },\n                    checked = removeEverything,\n                    onCheckedChange = { removeEverything = it },\n                )\n            }\n        },\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onDelete(removeEverything)\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_remove))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n    )\n}\n\n@Composable\nfun HistoryDeleteAllDialog(\n    onDismissRequest: () -> Unit,\n    onDelete: () -> Unit,\n) {\n    AlertDialog(\n        title = {\n            Text(text = stringResource(MR.strings.action_remove_everything))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.clear_history_confirmation))\n        },\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onDelete()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n    )\n}\n\n@PreviewLightDark\n@Composable\nprivate fun HistoryDeleteDialogPreview() {\n    TachiyomiPreviewTheme {\n        HistoryDeleteDialog(\n            onDismissRequest = {},\n            onDelete = {},\n            isManga = Random.nextBoolean(),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryScreen.kt",
    "content": "package eu.kanade.presentation.history.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport eu.kanade.presentation.components.relativeDateText\nimport eu.kanade.presentation.history.anime.components.AnimeHistoryItem\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.tachiyomi.ui.history.anime.AnimeHistoryScreenModel\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.ListGroupHeader\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport java.time.LocalDate\n\n@Composable\nfun AnimeHistoryScreen(\n    state: AnimeHistoryScreenModel.State,\n    snackbarHostState: SnackbarHostState,\n    onClickCover: (animeId: Long) -> Unit,\n    onClickResume: (animeId: Long, episodeId: Long) -> Unit,\n    onClickFavorite: (animeId: Long) -> Unit,\n    onDialogChange: (AnimeHistoryScreenModel.Dialog?) -> Unit,\n    searchQuery: String? = null,\n) {\n    Scaffold(\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n    ) { contentPadding ->\n        state.list.let {\n            if (it == null) {\n                LoadingScreen(Modifier.padding(contentPadding))\n            } else if (it.isEmpty()) {\n                val msg = if (!searchQuery.isNullOrEmpty()) {\n                    MR.strings.no_results_found\n                } else {\n                    AYMR.strings.information_no_recent_anime\n                }\n                EmptyScreen(\n                    stringRes = msg,\n                    modifier = Modifier.padding(contentPadding),\n                )\n            } else {\n                AnimeHistoryScreenContent(\n                    history = it,\n                    contentPadding = contentPadding,\n                    onClickCover = { history -> onClickCover(history.animeId) },\n                    onClickResume = { history -> onClickResume(history.animeId, history.episodeId) },\n                    onClickDelete = { item -> onDialogChange(AnimeHistoryScreenModel.Dialog.Delete(item)) },\n                    onClickFavorite = { history -> onClickFavorite(history.animeId) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeHistoryScreenContent(\n    history: List<AnimeHistoryUiModel>,\n    contentPadding: PaddingValues,\n    onClickCover: (AnimeHistoryWithRelations) -> Unit,\n    onClickResume: (AnimeHistoryWithRelations) -> Unit,\n    onClickDelete: (AnimeHistoryWithRelations) -> Unit,\n    onClickFavorite: (AnimeHistoryWithRelations) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items(\n            items = history,\n            key = { \"history-${it.hashCode()}\" },\n            contentType = {\n                when (it) {\n                    is AnimeHistoryUiModel.Header -> \"header\"\n                    is AnimeHistoryUiModel.Item -> \"item\"\n                }\n            },\n        ) { item ->\n            when (item) {\n                is AnimeHistoryUiModel.Header -> {\n                    ListGroupHeader(\n                        modifier = Modifier.animateItemFastScroll(),\n                        text = relativeDateText(item.date),\n                    )\n                }\n                is AnimeHistoryUiModel.Item -> {\n                    val value = item.item\n                    AnimeHistoryItem(\n                        modifier = Modifier.animateItemFastScroll(),\n                        history = value,\n                        onClickCover = { onClickCover(value) },\n                        onClickResume = { onClickResume(value) },\n                        onClickDelete = { onClickDelete(value) },\n                        onClickFavorite = { onClickFavorite(value) },\n                    )\n                }\n            }\n        }\n    }\n}\n\nsealed interface AnimeHistoryUiModel {\n    data class Header(val date: LocalDate) : AnimeHistoryUiModel\n    data class Item(val item: AnimeHistoryWithRelations) : AnimeHistoryUiModel\n}\n\n@PreviewLightDark\n@Composable\ninternal fun HistoryScreenPreviews(\n    @PreviewParameter(AnimeHistoryScreenModelStateProvider::class)\n    historyState: AnimeHistoryScreenModel.State,\n) {\n    TachiyomiPreviewTheme {\n        AnimeHistoryScreen(\n            state = historyState,\n            snackbarHostState = SnackbarHostState(),\n            searchQuery = null,\n            onClickCover = {},\n            onClickResume = { _, _ -> run {} },\n            onDialogChange = {},\n            onClickFavorite = {},\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryScreenModelStateProvider.kt",
    "content": "package eu.kanade.presentation.history.anime\n\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport eu.kanade.tachiyomi.ui.history.anime.AnimeHistoryScreenModel\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.temporal.ChronoUnit\nimport java.util.Date\nimport kotlin.random.Random\n\nclass AnimeHistoryScreenModelStateProvider : PreviewParameterProvider<AnimeHistoryScreenModel.State> {\n\n    private val multiPage = AnimeHistoryScreenModel.State(\n        searchQuery = null,\n        list =\n        listOf(HistoryUiModelExamples.headerToday)\n            .asSequence()\n            .plus(HistoryUiModelExamples.items().take(3))\n            .plus(HistoryUiModelExamples.header { it.minus(1, ChronoUnit.DAYS) })\n            .plus(HistoryUiModelExamples.items().take(1))\n            .plus(HistoryUiModelExamples.header { it.minus(2, ChronoUnit.DAYS) })\n            .plus(HistoryUiModelExamples.items().take(7))\n            .toList(),\n        dialog = null,\n    )\n\n    private val shortRecent = AnimeHistoryScreenModel.State(\n        searchQuery = null,\n        list = listOf(\n            HistoryUiModelExamples.headerToday,\n            HistoryUiModelExamples.items().first(),\n        ),\n        dialog = null,\n    )\n\n    private val shortFuture = AnimeHistoryScreenModel.State(\n        searchQuery = null,\n        list = listOf(\n            HistoryUiModelExamples.headerTomorrow,\n            HistoryUiModelExamples.items().first(),\n        ),\n        dialog = null,\n    )\n\n    private val empty = AnimeHistoryScreenModel.State(\n        searchQuery = null,\n        list = listOf(),\n        dialog = null,\n    )\n\n    private val loadingWithSearchQuery = AnimeHistoryScreenModel.State(\n        searchQuery = \"Example Search Query\",\n    )\n\n    private val loading = AnimeHistoryScreenModel.State(\n        searchQuery = null,\n        list = null,\n        dialog = null,\n    )\n\n    override val values: Sequence<AnimeHistoryScreenModel.State> = sequenceOf(\n        multiPage,\n        shortRecent,\n        shortFuture,\n        empty,\n        loadingWithSearchQuery,\n        loading,\n    )\n\n    private object HistoryUiModelExamples {\n        val headerToday = header()\n        val headerTomorrow =\n            AnimeHistoryUiModel.Header(LocalDate.now().plusDays(1))\n\n        fun header(instantBuilder: (Instant) -> Instant = { it }) =\n            AnimeHistoryUiModel.Header(LocalDate.from(instantBuilder(Instant.now())))\n\n        fun items() = sequence {\n            var count = 1\n            while (true) {\n                yield(randItem { it.copy(title = \"Example Title $count\") })\n                count += 1\n            }\n        }\n\n        fun randItem(historyBuilder: (AnimeHistoryWithRelations) -> AnimeHistoryWithRelations = { it }) =\n            AnimeHistoryUiModel.Item(\n                historyBuilder(\n                    AnimeHistoryWithRelations(\n                        id = Random.nextLong(),\n                        episodeId = Random.nextLong(),\n                        animeId = Random.nextLong(),\n                        title = \"Test Title\",\n                        episodeNumber = Random.nextDouble(),\n                        seenAt = Date.from(Instant.now()),\n                        coverData = AnimeCover(\n                            animeId = Random.nextLong(),\n                            sourceId = Random.nextLong(),\n                            isAnimeFavorite = Random.nextBoolean(),\n                            url = \"https://example.com/cover.png\",\n                            lastModified = Random.nextLong(),\n                        ),\n                    ),\n                ),\n            )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/anime/components/AnimeHistoryItem.kt",
    "content": "package eu.kanade.presentation.history.anime.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.FavoriteBorder\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.util.formatEpisodeNumber\nimport eu.kanade.tachiyomi.util.lang.toTimestampString\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate val HistoryItemHeight = 96.dp\n\n@Composable\nfun AnimeHistoryItem(\n    history: AnimeHistoryWithRelations,\n    onClickCover: () -> Unit,\n    onClickResume: () -> Unit,\n    onClickDelete: () -> Unit,\n    onClickFavorite: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .clickable(onClick = onClickResume)\n            .height(HistoryItemHeight)\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier.fillMaxHeight(),\n            data = history.coverData,\n            onClick = onClickCover,\n        )\n        Column(\n            modifier = Modifier\n                .weight(1f)\n                .padding(start = MaterialTheme.padding.medium, end = MaterialTheme.padding.small),\n        ) {\n            val textStyle = MaterialTheme.typography.bodyMedium\n            Text(\n                text = history.title,\n                fontWeight = FontWeight.SemiBold,\n                maxLines = 2,\n                overflow = TextOverflow.Ellipsis,\n                style = textStyle,\n            )\n            val seenAt = remember { history.seenAt?.toTimestampString() ?: \"\" }\n            Text(\n                text = if (history.episodeNumber > -1) {\n                    stringResource(\n                        AYMR.strings.recent_anime_time,\n                        formatEpisodeNumber(history.episodeNumber),\n                        seenAt,\n                    )\n                } else {\n                    seenAt\n                },\n                modifier = Modifier.padding(top = 4.dp),\n                style = textStyle,\n            )\n        }\n\n        if (!history.coverData.isAnimeFavorite) {\n            IconButton(onClick = onClickFavorite) {\n                Icon(\n                    imageVector = Icons.Outlined.FavoriteBorder,\n                    contentDescription = stringResource(MR.strings.add_to_library),\n                    tint = MaterialTheme.colorScheme.onSurface,\n                )\n            }\n        }\n\n        IconButton(onClick = onClickDelete) {\n            Icon(\n                imageVector = Icons.Outlined.Delete,\n                contentDescription = stringResource(MR.strings.action_delete),\n                tint = MaterialTheme.colorScheme.onSurface,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun HistoryItemPreviews(\n    @PreviewParameter(AnimeHistoryWithRelationsProvider::class)\n    historyWithRelations: AnimeHistoryWithRelations,\n) {\n    TachiyomiPreviewTheme {\n        Surface {\n            AnimeHistoryItem(\n                history = historyWithRelations,\n                onClickCover = {},\n                onClickResume = {},\n                onClickDelete = {},\n                onClickFavorite = {},\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/anime/components/AnimeHistoryWithRelationsProvider.kt",
    "content": "package eu.kanade.presentation.history.anime.components\n\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport java.util.Date\n\ninternal class AnimeHistoryWithRelationsProvider : PreviewParameterProvider<AnimeHistoryWithRelations> {\n\n    private val simple = AnimeHistoryWithRelations(\n        id = 1L,\n        episodeId = 2L,\n        animeId = 3L,\n        title = \"Test Title\",\n        episodeNumber = 10.2,\n        seenAt = Date(1697247357L),\n        coverData = tachiyomi.domain.entries.anime.model.AnimeCover(\n            animeId = 3L,\n            sourceId = 4L,\n            isAnimeFavorite = false,\n            url = \"https://example.com/cover.png\",\n            lastModified = 5L,\n        ),\n    )\n\n    private val historyWithoutReadAt = AnimeHistoryWithRelations(\n        id = 1L,\n        episodeId = 2L,\n        animeId = 3L,\n        title = \"Test Title\",\n        episodeNumber = 10.2,\n        seenAt = null,\n        coverData = tachiyomi.domain.entries.anime.model.AnimeCover(\n            animeId = 3L,\n            sourceId = 4L,\n            isAnimeFavorite = false,\n            url = \"https://example.com/cover.png\",\n            lastModified = 5L,\n        ),\n    )\n\n    private val historyWithNegativeChapterNumber = AnimeHistoryWithRelations(\n        id = 1L,\n        episodeId = 2L,\n        animeId = 3L,\n        title = \"Test Title\",\n        episodeNumber = -2.0,\n        seenAt = Date(1697247357L),\n        coverData = tachiyomi.domain.entries.anime.model.AnimeCover(\n            animeId = 3L,\n            sourceId = 4L,\n            isAnimeFavorite = false,\n            url = \"https://example.com/cover.png\",\n            lastModified = 5L,\n        ),\n    )\n\n    override val values: Sequence<AnimeHistoryWithRelations>\n        get() = sequenceOf(simple, historyWithoutReadAt, historyWithNegativeChapterNumber)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryScreen.kt",
    "content": "package eu.kanade.presentation.history.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport eu.kanade.presentation.components.relativeDateText\nimport eu.kanade.presentation.history.manga.components.MangaHistoryItem\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.tachiyomi.ui.history.manga.MangaHistoryScreenModel\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.ListGroupHeader\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport java.time.LocalDate\n\n@Composable\nfun MangaHistoryScreen(\n    state: MangaHistoryScreenModel.State,\n    snackbarHostState: SnackbarHostState,\n    onClickCover: (mangaId: Long) -> Unit,\n    onClickResume: (mangaId: Long, chapterId: Long) -> Unit,\n    onClickFavorite: (mangaId: Long) -> Unit,\n    onDialogChange: (MangaHistoryScreenModel.Dialog?) -> Unit,\n    searchQuery: String? = null,\n) {\n    Scaffold(\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n    ) { contentPadding ->\n        state.list.let {\n            if (it == null) {\n                LoadingScreen(Modifier.padding(contentPadding))\n            } else if (it.isEmpty()) {\n                val msg = if (!searchQuery.isNullOrEmpty()) {\n                    MR.strings.no_results_found\n                } else {\n                    MR.strings.information_no_recent_manga\n                }\n                EmptyScreen(\n                    stringRes = msg,\n                    modifier = Modifier.padding(contentPadding),\n                )\n            } else {\n                MangaHistoryScreenContent(\n                    history = it,\n                    contentPadding = contentPadding,\n                    onClickCover = { history -> onClickCover(history.mangaId) },\n                    onClickResume = { history -> onClickResume(history.mangaId, history.chapterId) },\n                    onClickDelete = { item -> onDialogChange(MangaHistoryScreenModel.Dialog.Delete(item)) },\n                    onClickFavorite = { history -> onClickFavorite(history.mangaId) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun MangaHistoryScreenContent(\n    history: List<MangaHistoryUiModel>,\n    contentPadding: PaddingValues,\n    onClickCover: (MangaHistoryWithRelations) -> Unit,\n    onClickResume: (MangaHistoryWithRelations) -> Unit,\n    onClickDelete: (MangaHistoryWithRelations) -> Unit,\n    onClickFavorite: (MangaHistoryWithRelations) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = contentPadding,\n    ) {\n        items(\n            items = history,\n            key = { \"history-${it.hashCode()}\" },\n            contentType = {\n                when (it) {\n                    is MangaHistoryUiModel.Header -> \"header\"\n                    is MangaHistoryUiModel.Item -> \"item\"\n                }\n            },\n        ) { item ->\n            when (item) {\n                is MangaHistoryUiModel.Header -> {\n                    ListGroupHeader(\n                        modifier = Modifier.animateItemFastScroll(),\n                        text = relativeDateText(item.date),\n                    )\n                }\n                is MangaHistoryUiModel.Item -> {\n                    val value = item.item\n                    MangaHistoryItem(\n                        modifier = Modifier.animateItemFastScroll(),\n                        history = value,\n                        onClickCover = { onClickCover(value) },\n                        onClickResume = { onClickResume(value) },\n                        onClickDelete = { onClickDelete(value) },\n                        onClickFavorite = { onClickFavorite(value) },\n                    )\n                }\n            }\n        }\n    }\n}\n\nsealed interface MangaHistoryUiModel {\n    data class Header(val date: LocalDate) : MangaHistoryUiModel\n    data class Item(val item: MangaHistoryWithRelations) : MangaHistoryUiModel\n}\n\n@PreviewLightDark\n@Composable\ninternal fun HistoryScreenPreviews(\n    @PreviewParameter(MangaHistoryScreenModelStateProvider::class)\n    historyState: MangaHistoryScreenModel.State,\n) {\n    TachiyomiPreviewTheme {\n        MangaHistoryScreen(\n            state = historyState,\n            snackbarHostState = SnackbarHostState(),\n            searchQuery = null,\n            onClickCover = {},\n            onClickResume = { _, _ -> run {} },\n            onDialogChange = {},\n            onClickFavorite = {},\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryScreenModelStateProvider.kt",
    "content": "package eu.kanade.presentation.history.manga\n\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport eu.kanade.tachiyomi.ui.history.manga.MangaHistoryScreenModel\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.temporal.ChronoUnit\nimport java.util.Date\nimport kotlin.random.Random\n\nclass MangaHistoryScreenModelStateProvider : PreviewParameterProvider<MangaHistoryScreenModel.State> {\n\n    private val multiPage = MangaHistoryScreenModel.State(\n        searchQuery = null,\n        list =\n        listOf(HistoryUiModelExamples.headerToday)\n            .asSequence()\n            .plus(HistoryUiModelExamples.items().take(3))\n            .plus(HistoryUiModelExamples.header { it.minus(1, ChronoUnit.DAYS) })\n            .plus(HistoryUiModelExamples.items().take(1))\n            .plus(HistoryUiModelExamples.header { it.minus(2, ChronoUnit.DAYS) })\n            .plus(HistoryUiModelExamples.items().take(7))\n            .toList(),\n        dialog = null,\n    )\n\n    private val shortRecent = MangaHistoryScreenModel.State(\n        searchQuery = null,\n        list = listOf(\n            HistoryUiModelExamples.headerToday,\n            HistoryUiModelExamples.items().first(),\n        ),\n        dialog = null,\n    )\n\n    private val shortFuture = MangaHistoryScreenModel.State(\n        searchQuery = null,\n        list = listOf(\n            HistoryUiModelExamples.headerTomorrow,\n            HistoryUiModelExamples.items().first(),\n        ),\n        dialog = null,\n    )\n\n    private val empty = MangaHistoryScreenModel.State(\n        searchQuery = null,\n        list = listOf(),\n        dialog = null,\n    )\n\n    private val loadingWithSearchQuery = MangaHistoryScreenModel.State(\n        searchQuery = \"Example Search Query\",\n    )\n\n    private val loading = MangaHistoryScreenModel.State(\n        searchQuery = null,\n        list = null,\n        dialog = null,\n    )\n\n    override val values: Sequence<MangaHistoryScreenModel.State> = sequenceOf(\n        multiPage,\n        shortRecent,\n        shortFuture,\n        empty,\n        loadingWithSearchQuery,\n        loading,\n    )\n\n    private object HistoryUiModelExamples {\n        val headerToday = header()\n        val headerTomorrow =\n            MangaHistoryUiModel.Header(LocalDate.now().plusDays(1))\n\n        fun header(instantBuilder: (Instant) -> Instant = { it }) =\n            MangaHistoryUiModel.Header(LocalDate.from(instantBuilder(Instant.now())))\n\n        fun items() = sequence {\n            var count = 1\n            while (true) {\n                yield(randItem { it.copy(title = \"Example Title $count\") })\n                count += 1\n            }\n        }\n\n        fun randItem(historyBuilder: (MangaHistoryWithRelations) -> MangaHistoryWithRelations = { it }) =\n            MangaHistoryUiModel.Item(\n                historyBuilder(\n                    MangaHistoryWithRelations(\n                        id = Random.nextLong(),\n                        chapterId = Random.nextLong(),\n                        mangaId = Random.nextLong(),\n                        title = \"Test Title\",\n                        chapterNumber = Random.nextDouble(),\n                        readAt = Date.from(Instant.now()),\n                        readDuration = Random.nextLong(),\n                        coverData = MangaCover(\n                            mangaId = Random.nextLong(),\n                            sourceId = Random.nextLong(),\n                            isMangaFavorite = Random.nextBoolean(),\n                            url = \"https://example.com/cover.png\",\n                            lastModified = Random.nextLong(),\n                        ),\n                    ),\n                ),\n            )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/manga/components/MangaHistoryItem.kt",
    "content": "package eu.kanade.presentation.history.manga.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.FavoriteBorder\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.util.formatChapterNumber\nimport eu.kanade.tachiyomi.util.lang.toTimestampString\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate val HISTORY_ITEM_HEIGHT = 96.dp\n\n@Composable\nfun MangaHistoryItem(\n    history: MangaHistoryWithRelations,\n    onClickCover: () -> Unit,\n    onClickResume: () -> Unit,\n    onClickDelete: () -> Unit,\n    onClickFavorite: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .clickable(onClick = onClickResume)\n            .height(HISTORY_ITEM_HEIGHT)\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier.fillMaxHeight(),\n            data = history.coverData,\n            onClick = onClickCover,\n        )\n        Column(\n            modifier = Modifier\n                .weight(1f)\n                .padding(start = MaterialTheme.padding.medium, end = MaterialTheme.padding.small),\n        ) {\n            val textStyle = MaterialTheme.typography.bodyMedium\n            Text(\n                text = history.title,\n                fontWeight = FontWeight.SemiBold,\n                maxLines = 2,\n                overflow = TextOverflow.Ellipsis,\n                style = textStyle,\n            )\n            val readAt = remember { history.readAt?.toTimestampString() ?: \"\" }\n            Text(\n                text = if (history.chapterNumber > -1) {\n                    stringResource(\n                        MR.strings.recent_manga_time,\n                        formatChapterNumber(history.chapterNumber),\n                        readAt,\n                    )\n                } else {\n                    readAt\n                },\n                modifier = Modifier.padding(top = 4.dp),\n                style = textStyle,\n            )\n        }\n\n        if (!history.coverData.isMangaFavorite) {\n            IconButton(onClick = onClickFavorite) {\n                Icon(\n                    imageVector = Icons.Outlined.FavoriteBorder,\n                    contentDescription = stringResource(MR.strings.add_to_library),\n                    tint = MaterialTheme.colorScheme.onSurface,\n                )\n            }\n        }\n\n        IconButton(onClick = onClickDelete) {\n            Icon(\n                imageVector = Icons.Outlined.Delete,\n                contentDescription = stringResource(MR.strings.action_delete),\n                tint = MaterialTheme.colorScheme.onSurface,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\ninternal fun HistoryItemPreviews(\n    @PreviewParameter(MangaHistoryWithRelationsProvider::class)\n    historyWithRelations: MangaHistoryWithRelations,\n) {\n    TachiyomiPreviewTheme {\n        Surface {\n            MangaHistoryItem(\n                history = historyWithRelations,\n                onClickCover = {},\n                onClickResume = {},\n                onClickDelete = {},\n                onClickFavorite = {},\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/history/manga/components/MangaHistoryWithRelationsProvider.kt",
    "content": "package eu.kanade.presentation.history.manga.components\n\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport java.util.Date\n\ninternal class MangaHistoryWithRelationsProvider : PreviewParameterProvider<MangaHistoryWithRelations> {\n\n    private val simple = MangaHistoryWithRelations(\n        id = 1L,\n        chapterId = 2L,\n        mangaId = 3L,\n        title = \"Test Title\",\n        chapterNumber = 10.2,\n        readAt = Date(1697247357L),\n        readDuration = 123L,\n        coverData = tachiyomi.domain.entries.manga.model.MangaCover(\n            mangaId = 3L,\n            sourceId = 4L,\n            isMangaFavorite = false,\n            url = \"https://example.com/cover.png\",\n            lastModified = 5L,\n        ),\n    )\n\n    private val historyWithoutReadAt = MangaHistoryWithRelations(\n        id = 1L,\n        chapterId = 2L,\n        mangaId = 3L,\n        title = \"Test Title\",\n        chapterNumber = 10.2,\n        readAt = null,\n        readDuration = 123L,\n        coverData = tachiyomi.domain.entries.manga.model.MangaCover(\n            mangaId = 3L,\n            sourceId = 4L,\n            isMangaFavorite = false,\n            url = \"https://example.com/cover.png\",\n            lastModified = 5L,\n        ),\n    )\n\n    private val historyWithNegativeChapterNumber = MangaHistoryWithRelations(\n        id = 1L,\n        chapterId = 2L,\n        mangaId = 3L,\n        title = \"Test Title\",\n        chapterNumber = -2.0,\n        readAt = Date(1697247357L),\n        readDuration = 123L,\n        coverData = tachiyomi.domain.entries.manga.model.MangaCover(\n            mangaId = 3L,\n            sourceId = 4L,\n            isMangaFavorite = false,\n            url = \"https://example.com/cover.png\",\n            lastModified = 5L,\n        ),\n    )\n\n    override val values: Sequence<MangaHistoryWithRelations>\n        get() = sequenceOf(simple, historyWithoutReadAt, historyWithNegativeChapterNumber)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/DeleteLibraryEntryDialog.kt",
    "content": "package eu.kanade.presentation.library\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.material3.AlertDialog\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.setValue\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun DeleteLibraryEntryDialog(\n    containsLocalEntry: Boolean,\n    onDismissRequest: () -> Unit,\n    onConfirm: (Boolean, Boolean) -> Unit,\n    isManga: Boolean,\n) {\n    var list by remember {\n        mutableStateOf(\n            buildList<CheckboxState.State<StringResource>> {\n                val checkbox1 = if (isManga) AYMR.strings.manga_from_library else AYMR.strings.anime_from_library\n                add(CheckboxState.State.None(checkbox1))\n                if (!containsLocalEntry) {\n                    val checkbox2 = if (isManga) MR.strings.downloaded_chapters else AYMR.strings.downloaded_episodes\n                    add(CheckboxState.State.None(checkbox2))\n                }\n            },\n        )\n    }\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                enabled = list.any { it.isChecked },\n                onClick = {\n                    onDismissRequest()\n                    onConfirm(\n                        list[0].isChecked,\n                        list.getOrElse(1) { CheckboxState.State.None(0) }.isChecked,\n                    )\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_remove))\n        },\n        text = {\n            Column {\n                list.forEach { state ->\n                    LabeledCheckbox(\n                        label = stringResource(state.value),\n                        checked = state.isChecked,\n                        onCheckedChange = {\n                            val index = list.indexOf(state)\n                            if (index != -1) {\n                                val mutableList = list.toMutableList()\n                                mutableList[index] = state.next() as CheckboxState.State<StringResource>\n                                list = mutableList.toList()\n                            }\n                        },\n                    )\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryComfortableGrid.kt",
    "content": "package eu.kanade.presentation.library.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.LazyLibraryGrid\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.presentation.library.components.globalSearchItem\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryItem\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.library.anime.LibraryAnime\n\n@Composable\ninternal fun AnimeLibraryComfortableGrid(\n    items: List<AnimeLibraryItem>,\n    columns: Int,\n    contentPadding: PaddingValues,\n    selection: List<LibraryAnime>,\n    onClick: (LibraryAnime) -> Unit,\n    onLongClick: (LibraryAnime) -> Unit,\n    onClickContinueWatching: ((LibraryAnime) -> Unit)?,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    LazyLibraryGrid(\n        modifier = Modifier.fillMaxSize(),\n        columns = columns,\n        contentPadding = contentPadding,\n    ) {\n        globalSearchItem(searchQuery, onGlobalSearchClicked)\n\n        items(\n            items = items,\n            contentType = { \"anime_library_comfortable_grid_item\" },\n        ) { libraryItem ->\n            val anime = libraryItem.libraryAnime.anime\n            EntryComfortableGridItem(\n                isSelected = selection.fastAny { it.id == libraryItem.libraryAnime.id },\n                title = anime.title,\n                coverData = AnimeCover(\n                    animeId = anime.id,\n                    sourceId = anime.source,\n                    isAnimeFavorite = anime.favorite,\n                    url = anime.thumbnailUrl,\n                    lastModified = anime.coverLastModified,\n                ),\n                coverBadgeStart = {\n                    DownloadsBadge(count = libraryItem.downloadCount)\n                    UnviewedBadge(count = libraryItem.unseenCount)\n                },\n                coverBadgeEnd = {\n                    LanguageBadge(\n                        isLocal = libraryItem.isLocal,\n                        sourceLanguage = libraryItem.sourceLanguage,\n                    )\n                },\n                onLongClick = { onLongClick(libraryItem.libraryAnime) },\n                onClick = { onClick(libraryItem.libraryAnime) },\n                onClickContinueViewing = if (onClickContinueWatching != null && libraryItem.unseenCount > 0) {\n                    { onClickContinueWatching(libraryItem.libraryAnime) }\n                } else {\n                    null\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryCompactGrid.kt",
    "content": "package eu.kanade.presentation.library.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryCompactGridItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.LazyLibraryGrid\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.presentation.library.components.globalSearchItem\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryItem\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.library.anime.LibraryAnime\n\n@Composable\nfun AnimeLibraryCompactGrid(\n    items: List<AnimeLibraryItem>,\n    showTitle: Boolean,\n    columns: Int,\n    contentPadding: PaddingValues,\n    selection: List<LibraryAnime>,\n    onClick: (LibraryAnime) -> Unit,\n    onLongClick: (LibraryAnime) -> Unit,\n    onClickContinueWatching: ((LibraryAnime) -> Unit)?,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    LazyLibraryGrid(\n        modifier = Modifier.fillMaxSize(),\n        columns = columns,\n        contentPadding = contentPadding,\n    ) {\n        globalSearchItem(searchQuery, onGlobalSearchClicked)\n\n        items(\n            items = items,\n            contentType = { \"anime_library_compact_grid_item\" },\n        ) { libraryItem ->\n            val anime = libraryItem.libraryAnime.anime\n            EntryCompactGridItem(\n                isSelected = selection.fastAny { it.id == libraryItem.libraryAnime.id },\n                title = anime.title.takeIf { showTitle },\n                coverData = AnimeCover(\n                    animeId = anime.id,\n                    sourceId = anime.source,\n                    isAnimeFavorite = anime.favorite,\n                    url = anime.thumbnailUrl,\n                    lastModified = anime.coverLastModified,\n                ),\n                coverBadgeStart = {\n                    DownloadsBadge(count = libraryItem.downloadCount)\n                    UnviewedBadge(count = libraryItem.unseenCount)\n                },\n                coverBadgeEnd = {\n                    LanguageBadge(\n                        isLocal = libraryItem.isLocal,\n                        sourceLanguage = libraryItem.sourceLanguage,\n                    )\n                },\n                onLongClick = { onLongClick(libraryItem.libraryAnime) },\n                onClick = { onClick(libraryItem.libraryAnime) },\n                onClickContinueViewing = if (onClickContinueWatching != null && libraryItem.unseenCount > 0) {\n                    { onClickContinueWatching(libraryItem.libraryAnime) }\n                } else {\n                    null\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryContent.kt",
    "content": "package eu.kanade.presentation.library.anime\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.rememberPagerState\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.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport eu.kanade.core.preference.PreferenceMutableState\nimport eu.kanade.presentation.library.components.LibraryTabs\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryItem\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun AnimeLibraryContent(\n    categories: List<Category>,\n    searchQuery: String?,\n    selection: List<LibraryAnime>,\n    contentPadding: PaddingValues,\n    currentPage: () -> Int,\n    hasActiveFilters: Boolean,\n    showPageTabs: Boolean,\n    onChangeCurrentPage: (Int) -> Unit,\n    onAnimeClicked: (Long) -> Unit,\n    onContinueWatchingClicked: ((LibraryAnime) -> Unit)?,\n    onToggleSelection: (LibraryAnime) -> Unit,\n    onToggleRangeSelection: (LibraryAnime) -> Unit,\n    onRefresh: (Category?) -> Boolean,\n    onGlobalSearchClicked: () -> Unit,\n    getNumberOfAnimeForCategory: (Category) -> Int?,\n    getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>,\n    getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,\n    getAnimeLibraryForPage: (Int) -> List<AnimeLibraryItem>,\n) {\n    Column(\n        modifier = Modifier.padding(\n            top = contentPadding.calculateTopPadding(),\n            start = contentPadding.calculateStartPadding(LocalLayoutDirection.current),\n            end = contentPadding.calculateEndPadding(LocalLayoutDirection.current),\n        ),\n    ) {\n        val coercedCurrentPage = remember { currentPage().coerceAtMost(categories.lastIndex) }\n        val pagerState = rememberPagerState(coercedCurrentPage) { categories.size }\n\n        val scope = rememberCoroutineScope()\n        var isRefreshing by remember(pagerState.currentPage) { mutableStateOf(false) }\n\n        if (showPageTabs && categories.size > 1) {\n            LaunchedEffect(categories) {\n                if (categories.size <= pagerState.currentPage) {\n                    pagerState.scrollToPage(categories.size - 1)\n                }\n            }\n            LibraryTabs(\n                categories = categories,\n                pagerState = pagerState,\n                getNumberOfItemsForCategory = getNumberOfAnimeForCategory,\n            ) { scope.launch { pagerState.animateScrollToPage(it) } }\n        }\n\n        val notSelectionMode = selection.isEmpty()\n        val onClickAnime = { anime: LibraryAnime ->\n            if (notSelectionMode) {\n                onAnimeClicked(anime.anime.id)\n            } else {\n                onToggleSelection(anime)\n            }\n        }\n\n        PullRefresh(\n            refreshing = isRefreshing,\n            onRefresh = {\n                val started = onRefresh(categories[currentPage()])\n                if (!started) return@PullRefresh\n                scope.launch {\n                    // Fake refresh status but hide it after a second as it's a long running task\n                    isRefreshing = true\n                    delay(1.seconds)\n                    isRefreshing = false\n                }\n            },\n            enabled = notSelectionMode,\n        ) {\n            AnimeLibraryPager(\n                state = pagerState,\n                contentPadding = PaddingValues(bottom = contentPadding.calculateBottomPadding()),\n                hasActiveFilters = hasActiveFilters,\n                selectedAnime = selection,\n                searchQuery = searchQuery,\n                onGlobalSearchClicked = onGlobalSearchClicked,\n                getDisplayMode = getDisplayMode,\n                getColumnsForOrientation = getColumnsForOrientation,\n                getLibraryForPage = getAnimeLibraryForPage,\n                onClickAnime = onClickAnime,\n                onLongClickAnime = onToggleRangeSelection,\n                onClickContinueWatching = onContinueWatchingClicked,\n            )\n        }\n\n        LaunchedEffect(pagerState.currentPage) {\n            onChangeCurrentPage(pagerState.currentPage)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryList.kt",
    "content": "package eu.kanade.presentation.library.anime\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryListItem\nimport eu.kanade.presentation.library.components.GlobalSearchItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryItem\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\ninternal fun AnimeLibraryList(\n    items: List<AnimeLibraryItem>,\n    entries: Int,\n    containerHeight: Int,\n    contentPadding: PaddingValues,\n    selection: List<LibraryAnime>,\n    onClick: (LibraryAnime) -> Unit,\n    onLongClick: (LibraryAnime) -> Unit,\n    onClickContinueWatching: ((LibraryAnime) -> Unit)?,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    FastScrollLazyColumn(\n        modifier = Modifier.fillMaxSize(),\n        contentPadding = contentPadding + PaddingValues(vertical = 8.dp),\n    ) {\n        item {\n            if (!searchQuery.isNullOrEmpty()) {\n                GlobalSearchItem(\n                    modifier = Modifier.fillMaxWidth(),\n                    searchQuery = searchQuery,\n                    onClick = onGlobalSearchClicked,\n                )\n            }\n        }\n\n        items(\n            items = items,\n            contentType = { \"anime_library_list_item\" },\n        ) { libraryItem ->\n            val anime = libraryItem.libraryAnime.anime\n            EntryListItem(\n                isSelected = selection.fastAny { it.id == libraryItem.libraryAnime.id },\n                title = anime.title,\n                coverData = AnimeCover(\n                    animeId = anime.id,\n                    sourceId = anime.source,\n                    isAnimeFavorite = anime.favorite,\n                    url = anime.thumbnailUrl,\n                    lastModified = anime.coverLastModified,\n                ),\n                badge = {\n                    DownloadsBadge(count = libraryItem.downloadCount)\n                    UnviewedBadge(count = libraryItem.unseenCount)\n                    LanguageBadge(\n                        isLocal = libraryItem.isLocal,\n                        sourceLanguage = libraryItem.sourceLanguage,\n                    )\n                },\n                onLongClick = { onLongClick(libraryItem.libraryAnime) },\n                onClick = { onClick(libraryItem.libraryAnime) },\n                onClickContinueViewing = if (onClickContinueWatching != null && libraryItem.unseenCount > 0) {\n                    { onClickContinueWatching(libraryItem.libraryAnime) }\n                } else {\n                    null\n                },\n                entries = entries,\n                containerHeight = containerHeight,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibraryPager.kt",
    "content": "package eu.kanade.presentation.library.anime\n\nimport android.content.res.Configuration\nimport androidx.compose.foundation.layout.BoxWithConstraints\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.pager.HorizontalPager\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.core.preference.PreferenceMutableState\nimport eu.kanade.presentation.library.components.GlobalSearchItem\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryItem\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun AnimeLibraryPager(\n    state: PagerState,\n    contentPadding: PaddingValues,\n    hasActiveFilters: Boolean,\n    selectedAnime: List<LibraryAnime>,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n    getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>,\n    getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,\n    getLibraryForPage: (Int) -> List<AnimeLibraryItem>,\n    onClickAnime: (LibraryAnime) -> Unit,\n    onLongClickAnime: (LibraryAnime) -> Unit,\n    onClickContinueWatching: ((LibraryAnime) -> Unit)?,\n) {\n    BoxWithConstraints {\n        val density = LocalDensity.current\n        val containerHeightPx = with(density) { this@BoxWithConstraints.maxHeight.roundToPx() }\n\n        HorizontalPager(\n            modifier = Modifier.fillMaxSize(),\n            state = state,\n            verticalAlignment = Alignment.Top,\n        ) { page ->\n            if (page !in ((state.currentPage - 1)..(state.currentPage + 1))) {\n                // To make sure only one offscreen page is being composed\n                return@HorizontalPager\n            }\n            val library = getLibraryForPage(page)\n\n            if (library.isEmpty()) {\n                LibraryPagerEmptyScreen(\n                    searchQuery = searchQuery,\n                    hasActiveFilters = hasActiveFilters,\n                    contentPadding = contentPadding,\n                    onGlobalSearchClicked = onGlobalSearchClicked,\n                )\n                return@HorizontalPager\n            }\n\n            val displayMode by getDisplayMode(page)\n            val configuration = LocalConfiguration.current\n            val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE\n            val columns by remember(isLandscape) { getColumnsForOrientation(isLandscape) }\n\n            when (displayMode) {\n                LibraryDisplayMode.List -> {\n                    AnimeLibraryList(\n                        items = library,\n                        entries = columns,\n                        containerHeight = containerHeightPx,\n                        contentPadding = contentPadding,\n                        selection = selectedAnime,\n                        onClick = onClickAnime,\n                        onClickContinueWatching = onClickContinueWatching,\n                        onLongClick = onLongClickAnime,\n                        searchQuery = searchQuery,\n                        onGlobalSearchClicked = onGlobalSearchClicked,\n                    )\n                }\n\n                LibraryDisplayMode.CompactGrid, LibraryDisplayMode.CoverOnlyGrid -> {\n                    AnimeLibraryCompactGrid(\n                        items = library,\n                        showTitle = displayMode is LibraryDisplayMode.CompactGrid,\n                        columns = columns,\n                        contentPadding = contentPadding,\n                        selection = selectedAnime,\n                        onClick = onClickAnime,\n                        onClickContinueWatching = onClickContinueWatching,\n                        onLongClick = onLongClickAnime,\n                        searchQuery = searchQuery,\n                        onGlobalSearchClicked = onGlobalSearchClicked,\n                    )\n                }\n\n                LibraryDisplayMode.ComfortableGrid -> {\n                    AnimeLibraryComfortableGrid(\n                        items = library,\n                        columns = columns,\n                        contentPadding = contentPadding,\n                        selection = selectedAnime,\n                        onClick = onClickAnime,\n                        onLongClick = onLongClickAnime,\n                        onClickContinueWatching = onClickContinueWatching,\n                        searchQuery = searchQuery,\n                        onGlobalSearchClicked = onGlobalSearchClicked,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun LibraryPagerEmptyScreen(\n    searchQuery: String?,\n    hasActiveFilters: Boolean,\n    contentPadding: PaddingValues,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    val msg = when {\n        !searchQuery.isNullOrEmpty() -> MR.strings.no_results_found\n        hasActiveFilters -> MR.strings.error_no_match\n        else -> MR.strings.information_no_manga_category\n    }\n\n    Column(\n        modifier = Modifier\n            .padding(contentPadding + PaddingValues(8.dp))\n            .fillMaxSize()\n            .verticalScroll(rememberScrollState()),\n    ) {\n        if (!searchQuery.isNullOrEmpty()) {\n            GlobalSearchItem(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .align(Alignment.CenterHorizontally),\n                searchQuery = searchQuery,\n                onClick = onGlobalSearchClicked,\n            )\n        }\n\n        EmptyScreen(\n            stringRes = msg,\n            modifier = Modifier.weight(1f),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt",
    "content": "package eu.kanade.presentation.library.anime\n\nimport android.content.res.Configuration\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.material.icons.Icons\nimport androidx.compose.material.icons.filled.Refresh\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalConfiguration\nimport eu.kanade.presentation.components.TabbedDialog\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibrarySettingsScreenModel\nimport eu.kanade.tachiyomi.util.system.isReleaseBuildType\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.anime.model.AnimeLibrarySort\nimport tachiyomi.domain.library.anime.model.sort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.BaseSortItem\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.HeadingItem\nimport tachiyomi.presentation.core.components.SettingsChipRow\nimport tachiyomi.presentation.core.components.SliderItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\n\n@Composable\nfun AnimeLibrarySettingsDialog(\n    onDismissRequest: () -> Unit,\n    screenModel: AnimeLibrarySettingsScreenModel,\n    category: Category?,\n) {\n    TabbedDialog(\n        onDismissRequest = onDismissRequest,\n        tabTitles = persistentListOf(\n            stringResource(MR.strings.action_filter),\n            stringResource(MR.strings.action_sort),\n            stringResource(MR.strings.action_display),\n        ),\n    ) { page ->\n        Column(\n            modifier = Modifier\n                .padding(vertical = TabbedDialogPaddings.Vertical)\n                .verticalScroll(rememberScrollState()),\n        ) {\n            when (page) {\n                0 -> FilterPage(\n                    screenModel = screenModel,\n                )\n                1 -> SortPage(\n                    category = category,\n                    screenModel = screenModel,\n                )\n                2 -> DisplayPage(\n                    screenModel = screenModel,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.FilterPage(\n    screenModel: AnimeLibrarySettingsScreenModel,\n) {\n    val filterDownloaded by screenModel.libraryPreferences.filterDownloadedAnime().collectAsState()\n    val downloadedOnly by screenModel.preferences.downloadedOnly().collectAsState()\n    val autoUpdateAnimeRestrictions by screenModel.libraryPreferences.autoUpdateItemRestrictions().collectAsState()\n\n    TriStateItem(\n        label = stringResource(MR.strings.label_downloaded),\n        state = if (downloadedOnly) {\n            TriState.ENABLED_IS\n        } else {\n            filterDownloaded\n        },\n        enabled = !downloadedOnly,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterDownloadedAnime) },\n    )\n    val filterUnseen by screenModel.libraryPreferences.filterUnseen().collectAsState()\n    TriStateItem(\n        label = stringResource(AYMR.strings.action_filter_unseen),\n        state = filterUnseen,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterUnseen) },\n    )\n    val filterStarted by screenModel.libraryPreferences.filterStartedAnime().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.label_started),\n        state = filterStarted,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterStartedAnime) },\n    )\n    val filterBookmarked by screenModel.libraryPreferences.filterBookmarkedAnime().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_bookmarked),\n        state = filterBookmarked,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterBookmarkedAnime) },\n    )\n    val filterCompleted by screenModel.libraryPreferences.filterCompletedAnime().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.completed),\n        state = filterCompleted,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterCompletedAnime) },\n    )\n    // TODO: re-enable when custom intervals are ready for stable\n    if ((!isReleaseBuildType) && LibraryPreferences.ENTRY_OUTSIDE_RELEASE_PERIOD in autoUpdateAnimeRestrictions) {\n        val filterIntervalCustom by screenModel.libraryPreferences.filterIntervalCustom().collectAsState()\n        TriStateItem(\n            label = stringResource(MR.strings.action_filter_interval_custom),\n            state = filterIntervalCustom,\n            onClick = { screenModel.toggleFilter(LibraryPreferences::filterIntervalCustom) },\n        )\n    }\n\n    val trackers by screenModel.trackersFlow.collectAsState()\n    when (trackers.size) {\n        0 -> {\n            // No trackers\n        }\n        1 -> {\n            val service = trackers[0]\n            val filterTracker by screenModel.libraryPreferences.filterTrackedAnime(\n                service.id.toInt(),\n            ).collectAsState()\n            TriStateItem(\n                label = stringResource(MR.strings.action_filter_tracked),\n                state = filterTracker,\n                onClick = { screenModel.toggleTracker(service.id.toInt()) },\n            )\n        }\n        else -> {\n            HeadingItem(MR.strings.action_filter_tracked)\n            trackers.map { service ->\n                val filterTracker by screenModel.libraryPreferences.filterTrackedAnime(\n                    service.id.toInt(),\n                ).collectAsState()\n                TriStateItem(\n                    label = service.name,\n                    state = filterTracker,\n                    onClick = { screenModel.toggleTracker(service.id.toInt()) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.SortPage(\n    category: Category?,\n    screenModel: AnimeLibrarySettingsScreenModel,\n) {\n    val trackers by screenModel.trackersFlow.collectAsState()\n    val sortingMode = category.sort.type\n    val sortDescending = !category.sort.isAscending\n\n    val options = remember(trackers.isEmpty()) {\n        val trackerMeanPair = if (trackers.isNotEmpty()) {\n            MR.strings.action_sort_tracker_score to AnimeLibrarySort.Type.TrackerMean\n        } else {\n            null\n        }\n        listOfNotNull(\n            MR.strings.action_sort_alpha to AnimeLibrarySort.Type.Alphabetical,\n            AYMR.strings.action_sort_total_episodes to AnimeLibrarySort.Type.TotalEpisodes,\n            AYMR.strings.action_sort_last_seen to AnimeLibrarySort.Type.LastSeen,\n            AYMR.strings.action_sort_last_anime_update to AnimeLibrarySort.Type.LastUpdate,\n            AYMR.strings.action_sort_unseen_count to AnimeLibrarySort.Type.UnseenCount,\n            AYMR.strings.action_sort_latest_episode to AnimeLibrarySort.Type.LatestEpisode,\n            AYMR.strings.action_sort_episode_fetch_date to AnimeLibrarySort.Type.EpisodeFetchDate,\n            MR.strings.action_sort_date_added to AnimeLibrarySort.Type.DateAdded,\n            trackerMeanPair,\n            AYMR.strings.action_sort_airing_time to AnimeLibrarySort.Type.AiringTime,\n            MR.strings.action_sort_random to AnimeLibrarySort.Type.Random,\n        )\n    }\n\n    options.map { (titleRes, mode) ->\n        if (mode == AnimeLibrarySort.Type.Random) {\n            BaseSortItem(\n                label = stringResource(titleRes),\n                icon = Icons.Default.Refresh\n                    .takeIf { sortingMode == AnimeLibrarySort.Type.Random },\n                onClick = {\n                    screenModel.setSort(category, mode, AnimeLibrarySort.Direction.Ascending)\n                },\n            )\n            return@map\n        }\n        SortItem(\n            label = stringResource(titleRes),\n            sortDescending = sortDescending.takeIf { sortingMode == mode },\n            onClick = {\n                val isTogglingDirection = sortingMode == mode\n                val direction = when {\n                    isTogglingDirection -> if (sortDescending) {\n                        AnimeLibrarySort.Direction.Ascending\n                    } else {\n                        AnimeLibrarySort.Direction.Descending\n                    }\n                    else -> if (sortDescending) {\n                        AnimeLibrarySort.Direction.Descending\n                    } else {\n                        AnimeLibrarySort.Direction.Ascending\n                    }\n                }\n                screenModel.setSort(category, mode, direction)\n            },\n        )\n    }\n}\n\nprivate val displayModes = listOf(\n    MR.strings.action_display_grid to LibraryDisplayMode.CompactGrid,\n    MR.strings.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid,\n    MR.strings.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid,\n    MR.strings.action_display_list to LibraryDisplayMode.List,\n)\n\n@Composable\nprivate fun ColumnScope.DisplayPage(\n    screenModel: AnimeLibrarySettingsScreenModel,\n) {\n    val displayMode by screenModel.libraryPreferences.displayMode().collectAsState()\n    SettingsChipRow(MR.strings.action_display_mode) {\n        displayModes.map { (titleRes, mode) ->\n            FilterChip(\n                selected = displayMode == mode,\n                onClick = { screenModel.setDisplayMode(mode) },\n                label = { Text(stringResource(titleRes)) },\n            )\n        }\n    }\n\n    val configuration = LocalConfiguration.current\n    val columnPreference = remember {\n        if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {\n            screenModel.libraryPreferences.animeLandscapeColumns()\n        } else {\n            screenModel.libraryPreferences.animePortraitColumns()\n        }\n    }\n\n    val columns by columnPreference.collectAsState()\n    if (displayMode == LibraryDisplayMode.List) {\n        SliderItem(\n            value = columns,\n            valueRange = 0..10,\n            label = stringResource(AYMR.strings.pref_library_rows),\n            valueText = if (columns > 0) {\n                columns.toString()\n            } else {\n                stringResource(MR.strings.label_auto)\n            },\n            onChange = columnPreference::set,\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    } else {\n        SliderItem(\n            value = columns,\n            valueRange = 0..10,\n            label = stringResource(MR.strings.pref_library_columns),\n            valueText = if (columns > 0) {\n                columns.toString()\n            } else {\n                stringResource(MR.strings.label_auto)\n            },\n            onChange = columnPreference::set,\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    }\n\n    HeadingItem(MR.strings.overlay_header)\n    CheckboxItem(\n        label = stringResource(AYMR.strings.action_display_download_badge_anime),\n        pref = screenModel.libraryPreferences.downloadBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(AYMR.strings.action_display_unseen_badge),\n        pref = screenModel.libraryPreferences.unreadBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_local_badge),\n        pref = screenModel.libraryPreferences.localBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_language_badge),\n        pref = screenModel.libraryPreferences.languageBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(AYMR.strings.action_display_show_continue_reading_button),\n        pref = screenModel.libraryPreferences.showContinueViewingButton(),\n    )\n\n    HeadingItem(MR.strings.tabs_header)\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_show_tabs),\n        pref = screenModel.libraryPreferences.categoryTabs(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_show_number_of_items),\n        pref = screenModel.libraryPreferences.categoryNumberOfItems(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/components/CommonEntryItem.kt",
    "content": "package eu.kanade.presentation.library.components\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxScope\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.aspectRatio\nimport androidx.compose.foundation.layout.fillMaxHeight\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.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.PlayArrow\nimport androidx.compose.material3.FilledIconButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButtonDefaults\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.contentColorFor\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.alpha\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.draw.drawBehind\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shadow\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.BadgeGroup\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.selectedBackground\nimport tachiyomi.domain.entries.EntryCover as EntryCoverModel\n\nobject CommonEntryItemDefaults {\n    val GridHorizontalSpacer = 4.dp\n    val GridVerticalSpacer = 4.dp\n\n    @Suppress(\"ConstPropertyName\")\n    const val BrowseFavoriteCoverAlpha = 0.34f\n}\n\nprivate val ContinueViewingButtonSizeSmall = 28.dp\nprivate val ContinueViewingButtonSizeLarge = 32.dp\n\nprivate val ContinueViewingButtonIconSizeSmall = 16.dp\nprivate val ContinueViewingButtonIconSizeLarge = 20.dp\n\nprivate val ContinueViewingButtonGridPadding = 6.dp\nprivate val ContinueViewingButtonListSpacing = 8.dp\n\nprivate const val GRID_SELECTED_COVER_ALPHA = 0.76f\n\n/**\n * Layout of grid list item with title overlaying the cover.\n * Accepts null [title] for a cover-only view.\n */\n@Composable\nfun EntryCompactGridItem(\n    coverData: EntryCoverModel,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n    isSelected: Boolean = false,\n    title: String? = null,\n    onClickContinueViewing: (() -> Unit)? = null,\n    coverAlpha: Float = 1f,\n    coverBadgeStart: @Composable (RowScope.() -> Unit)? = null,\n    coverBadgeEnd: @Composable (RowScope.() -> Unit)? = null,\n) {\n    GridItemSelectable(\n        isSelected = isSelected,\n        onClick = onClick,\n        onLongClick = onLongClick,\n    ) {\n        EntryGridCover(\n            cover = {\n                ItemCover.Book(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .alpha(if (isSelected) GRID_SELECTED_COVER_ALPHA else coverAlpha),\n                    data = coverData,\n                )\n            },\n            badgesStart = coverBadgeStart,\n            badgesEnd = coverBadgeEnd,\n            content = {\n                if (title != null) {\n                    CoverTextOverlay(\n                        title = title,\n                        onClickContinueViewing = onClickContinueViewing,\n                    )\n                } else if (onClickContinueViewing != null) {\n                    ContinueViewingButton(\n                        size = ContinueViewingButtonSizeLarge,\n                        iconSize = ContinueViewingButtonIconSizeLarge,\n                        onClick = onClickContinueViewing,\n                        modifier = Modifier\n                            .padding(ContinueViewingButtonGridPadding)\n                            .align(Alignment.BottomEnd),\n                    )\n                }\n            },\n        )\n    }\n}\n\n/**\n * Title overlay for [EntryCompactGridItem]\n */\n@Composable\nprivate fun BoxScope.CoverTextOverlay(\n    title: String,\n    onClickContinueViewing: (() -> Unit)? = null,\n) {\n    Box(\n        modifier = Modifier\n            .clip(RoundedCornerShape(bottomStart = 4.dp, bottomEnd = 4.dp))\n            .background(\n                Brush.verticalGradient(\n                    0f to Color.Transparent,\n                    1f to Color(0xAA000000),\n                ),\n            )\n            .fillMaxHeight(0.33f)\n            .fillMaxWidth()\n            .align(Alignment.BottomCenter),\n    )\n    Row(\n        modifier = Modifier.align(Alignment.BottomStart),\n        verticalAlignment = Alignment.Bottom,\n    ) {\n        GridItemTitle(\n            modifier = Modifier\n                .weight(1f)\n                .padding(8.dp),\n            title = title,\n            style = MaterialTheme.typography.titleSmall.copy(\n                color = Color.White,\n                shadow = Shadow(\n                    color = Color.Black,\n                    blurRadius = 4f,\n                ),\n            ),\n            minLines = 1,\n        )\n        if (onClickContinueViewing != null) {\n            ContinueViewingButton(\n                size = ContinueViewingButtonSizeSmall,\n                iconSize = ContinueViewingButtonIconSizeSmall,\n                onClick = onClickContinueViewing,\n                modifier = Modifier.padding(\n                    end = ContinueViewingButtonGridPadding,\n                    bottom = ContinueViewingButtonGridPadding,\n                ),\n            )\n        }\n    }\n}\n\n/**\n * Layout of grid list item with title below the cover.\n */\n@Composable\nfun EntryComfortableGridItem(\n    isSelected: Boolean = false,\n    title: String,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n    titleMaxLines: Int = 2,\n    coverData: EntryCoverModel,\n    coverAlpha: Float = 1f,\n    coverBadgeStart: (@Composable RowScope.() -> Unit)? = null,\n    coverBadgeEnd: (@Composable RowScope.() -> Unit)? = null,\n    onClickContinueViewing: (() -> Unit)? = null,\n) {\n    GridItemSelectable(\n        isSelected = isSelected,\n        onClick = onClick,\n        onLongClick = onLongClick,\n    ) {\n        Column {\n            EntryGridCover(\n                cover = {\n                    ItemCover.Book(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .alpha(if (isSelected) GRID_SELECTED_COVER_ALPHA else coverAlpha),\n                        data = coverData,\n                    )\n                },\n                badgesStart = coverBadgeStart,\n                badgesEnd = coverBadgeEnd,\n                content = {\n                    if (onClickContinueViewing != null) {\n                        ContinueViewingButton(\n                            size = ContinueViewingButtonSizeLarge,\n                            iconSize = ContinueViewingButtonIconSizeLarge,\n                            onClick = onClickContinueViewing,\n                            modifier = Modifier\n                                .padding(ContinueViewingButtonGridPadding)\n                                .align(Alignment.BottomEnd),\n                        )\n                    }\n                },\n            )\n            GridItemTitle(\n                modifier = Modifier.padding(4.dp),\n                title = title,\n                style = MaterialTheme.typography.titleSmall,\n                minLines = 2,\n                maxLines = titleMaxLines,\n            )\n        }\n    }\n}\n\n/**\n * Common cover layout to add contents to be drawn on top of the cover.\n */\n@Composable\nprivate fun EntryGridCover(\n    modifier: Modifier = Modifier,\n    cover: @Composable BoxScope.() -> Unit = {},\n    badgesStart: (@Composable RowScope.() -> Unit)? = null,\n    badgesEnd: (@Composable RowScope.() -> Unit)? = null,\n    content: @Composable (BoxScope.() -> Unit)? = null,\n) {\n    Box(\n        modifier = modifier\n            .fillMaxWidth()\n            .aspectRatio(ItemCover.Book.ratio),\n    ) {\n        cover()\n        content?.invoke(this)\n        if (badgesStart != null) {\n            BadgeGroup(\n                modifier = Modifier\n                    .padding(4.dp)\n                    .align(Alignment.TopStart),\n                content = badgesStart,\n            )\n        }\n\n        if (badgesEnd != null) {\n            BadgeGroup(\n                modifier = Modifier\n                    .padding(4.dp)\n                    .align(Alignment.TopEnd),\n                content = badgesEnd,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun GridItemTitle(\n    title: String,\n    style: TextStyle,\n    minLines: Int,\n    modifier: Modifier = Modifier,\n    maxLines: Int = 2,\n) {\n    Text(\n        modifier = modifier,\n        text = title,\n        fontSize = 12.sp,\n        lineHeight = 18.sp,\n        minLines = minLines,\n        maxLines = maxLines,\n        overflow = TextOverflow.Ellipsis,\n        style = style,\n    )\n}\n\n/**\n * Wrapper for grid items to handle selection state, click and long click.\n */\n@Composable\nprivate fun GridItemSelectable(\n    isSelected: Boolean,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    content: @Composable () -> Unit,\n) {\n    Box(\n        modifier = modifier\n            .clip(MaterialTheme.shapes.small)\n            .combinedClickable(\n                onClick = onClick,\n                onLongClick = onLongClick,\n            )\n            .selectedOutline(isSelected = isSelected, color = MaterialTheme.colorScheme.secondary)\n            .padding(4.dp),\n    ) {\n        val contentColor = if (isSelected) {\n            MaterialTheme.colorScheme.onSecondary\n        } else {\n            LocalContentColor.current\n        }\n        CompositionLocalProvider(LocalContentColor provides contentColor) {\n            content()\n        }\n    }\n}\n\n/**\n * @see GridItemSelectable\n */\nprivate fun Modifier.selectedOutline(\n    isSelected: Boolean,\n    color: Color,\n) = drawBehind { if (isSelected) drawRect(color = color) }\n\n/**\n * Layout of list item.\n */\n@Composable\nfun EntryListItem(\n    isSelected: Boolean = false,\n    title: String,\n    coverData: EntryCoverModel,\n    coverAlpha: Float = 1f,\n    onLongClick: () -> Unit,\n    onClick: () -> Unit,\n    badge: @Composable (RowScope.() -> Unit),\n    onClickContinueViewing: (() -> Unit)? = null,\n    entries: Int = 0,\n    containerHeight: Int = 0,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .selectedBackground(isSelected)\n            .height(\n                when (entries) {\n                    0 -> 76.dp\n                    else -> {\n                        val density = LocalDensity.current\n                        with(density) { (containerHeight / entries).toDp() } - (3 / entries).dp\n                    }\n                },\n            )\n            .combinedClickable(\n                onClick = onClick,\n                onLongClick = onLongClick,\n            )\n            .padding(horizontal = 16.dp, vertical = 3.dp),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Book(\n            modifier = Modifier\n                .fillMaxHeight()\n                .alpha(coverAlpha),\n            data = coverData,\n        )\n        Text(\n            text = title,\n            modifier = Modifier\n                .padding(horizontal = 16.dp)\n                .weight(1f),\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        BadgeGroup(content = badge)\n        if (onClickContinueViewing != null) {\n            ContinueViewingButton(\n                size = ContinueViewingButtonSizeSmall,\n                iconSize = ContinueViewingButtonIconSizeSmall,\n                onClick = onClickContinueViewing,\n                modifier = Modifier.padding(start = ContinueViewingButtonListSpacing),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ContinueViewingButton(\n    size: Dp,\n    iconSize: Dp,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Box(modifier = modifier) {\n        FilledIconButton(\n            onClick = onClick,\n            shape = MaterialTheme.shapes.small,\n            colors = IconButtonDefaults.filledIconButtonColors(\n                containerColor = MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.9f),\n                contentColor = contentColorFor(MaterialTheme.colorScheme.primaryContainer),\n            ),\n            modifier = Modifier.size(size),\n        ) {\n            Icon(\n                imageVector = Icons.Filled.PlayArrow,\n                contentDescription = stringResource(MR.strings.action_resume),\n                modifier = Modifier.size(iconSize),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/components/GlobalSearchItem.kt",
    "content": "package eu.kanade.presentation.library.components\n\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.zIndex\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\ninternal fun GlobalSearchItem(\n    searchQuery: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    TextButton(\n        modifier = modifier,\n        onClick = onClick,\n    ) {\n        Text(\n            text = stringResource(MR.strings.action_global_search_query, searchQuery),\n            modifier = Modifier.zIndex(99f),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/components/LazyLibraryGrid.kt",
    "content": "package eu.kanade.presentation.library.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.GridItemSpan\nimport androidx.compose.foundation.lazy.grid.LazyGridScope\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.presentation.core.components.FastScrollLazyVerticalGrid\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\ninternal fun LazyLibraryGrid(\n    modifier: Modifier = Modifier,\n    columns: Int,\n    contentPadding: PaddingValues,\n    content: LazyGridScope.() -> Unit,\n) {\n    FastScrollLazyVerticalGrid(\n        columns = if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns),\n        modifier = modifier,\n        contentPadding = contentPadding + PaddingValues(8.dp),\n        verticalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridVerticalSpacer),\n        horizontalArrangement = Arrangement.spacedBy(CommonEntryItemDefaults.GridHorizontalSpacer),\n        content = content,\n    )\n}\n\nfun LazyGridScope.globalSearchItem(\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    if (!searchQuery.isNullOrEmpty()) {\n        item(\n            span = { GridItemSpan(maxLineSpan) },\n            contentType = { \"library_global_search_item\" },\n        ) {\n            GlobalSearchItem(\n                searchQuery = searchQuery,\n                onClick = onGlobalSearchClicked,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt",
    "content": "package eu.kanade.presentation.library.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Folder\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.presentation.core.components.Badge\n\n@Composable\ninternal fun DownloadsBadge(count: Long) {\n    if (count > 0) {\n        Badge(\n            text = \"$count\",\n            color = MaterialTheme.colorScheme.tertiary,\n            textColor = MaterialTheme.colorScheme.onTertiary,\n        )\n    }\n}\n\n@Composable\ninternal fun UnviewedBadge(count: Long) {\n    if (count > 0) {\n        Badge(text = \"$count\")\n    }\n}\n\n@Composable\ninternal fun LanguageBadge(\n    isLocal: Boolean,\n    sourceLanguage: String,\n) {\n    if (isLocal) {\n        Badge(\n            imageVector = Icons.Outlined.Folder,\n            color = MaterialTheme.colorScheme.tertiary,\n            iconColor = MaterialTheme.colorScheme.onTertiary,\n        )\n    } else if (sourceLanguage.isNotEmpty()) {\n        Badge(\n            text = sourceLanguage.uppercase(),\n            color = MaterialTheme.colorScheme.tertiary,\n            textColor = MaterialTheme.colorScheme.onTertiary,\n        )\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun BadgePreview() {\n    TachiyomiPreviewTheme {\n        Column {\n            DownloadsBadge(count = 10)\n            UnviewedBadge(count = 10)\n            LanguageBadge(isLocal = true, sourceLanguage = \"EN\")\n            LanguageBadge(isLocal = false, sourceLanguage = \"EN\")\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt",
    "content": "package eu.kanade.presentation.library.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.PrimaryScrollableTabRow\nimport androidx.compose.material3.Tab\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.zIndex\nimport eu.kanade.presentation.category.visualName\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.presentation.core.components.material.TabText\n\n@Composable\ninternal fun LibraryTabs(\n    categories: List<Category>,\n    pagerState: PagerState,\n    getNumberOfItemsForCategory: (Category) -> Int?,\n    onTabItemClick: (Int) -> Unit,\n) {\n    val currentPageIndex = pagerState.currentPage.coerceAtMost(categories.lastIndex)\n    Column(\n        modifier = Modifier.zIndex(1f),\n    ) {\n        PrimaryScrollableTabRow(\n            selectedTabIndex = currentPageIndex,\n            edgePadding = 0.dp,\n            // TODO: use default when width is fixed upstream\n            // https://issuetracker.google.com/issues/242879624\n            divider = {},\n        ) {\n            categories.forEachIndexed { index, category ->\n                Tab(\n                    selected = currentPageIndex == index,\n                    onClick = { onTabItemClick(index) },\n                    text = {\n                        TabText(\n                            text = category.visualName,\n                            badgeCount = getNumberOfItemsForCategory(category),\n                        )\n                    },\n                    unselectedContentColor = MaterialTheme.colorScheme.onSurface,\n                )\n            }\n        }\n\n        HorizontalDivider()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt",
    "content": "package eu.kanade.presentation.library.components\n\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.FlipToBack\nimport androidx.compose.material.icons.outlined.SelectAll\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.SearchToolbar\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.Pill\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.theme.active\n\n@Composable\nfun LibraryToolbar(\n    hasActiveFilters: Boolean,\n    selectedCount: Int,\n    title: LibraryToolbarTitle,\n    onClickUnselectAll: () -> Unit,\n    onClickSelectAll: () -> Unit,\n    onClickInvertSelection: () -> Unit,\n    onClickFilter: () -> Unit,\n    onClickRefresh: () -> Unit,\n    onClickGlobalUpdate: () -> Unit,\n    onClickOpenRandomEntry: () -> Unit,\n    searchQuery: String?,\n    onSearchQueryChange: (String?) -> Unit,\n    scrollBehavior: TopAppBarScrollBehavior?,\n    navigateUp: (() -> Unit)? = null,\n) = when {\n    selectedCount > 0 -> LibrarySelectionToolbar(\n        selectedCount = selectedCount,\n        onClickUnselectAll = onClickUnselectAll,\n        onClickSelectAll = onClickSelectAll,\n        onClickInvertSelection = onClickInvertSelection,\n    )\n    else -> LibraryRegularToolbar(\n        title = title,\n        hasFilters = hasActiveFilters,\n        searchQuery = searchQuery,\n        onSearchQueryChange = onSearchQueryChange,\n        onClickFilter = onClickFilter,\n        onClickRefresh = onClickRefresh,\n        onClickGlobalUpdate = onClickGlobalUpdate,\n        onClickOpenRandomEntry = onClickOpenRandomEntry,\n        scrollBehavior = scrollBehavior,\n        navigateUp = navigateUp,\n    )\n}\n\n@Composable\nprivate fun LibraryRegularToolbar(\n    title: LibraryToolbarTitle,\n    hasFilters: Boolean,\n    searchQuery: String?,\n    onSearchQueryChange: (String?) -> Unit,\n    onClickFilter: () -> Unit,\n    onClickRefresh: () -> Unit,\n    onClickGlobalUpdate: () -> Unit,\n    onClickOpenRandomEntry: () -> Unit,\n    scrollBehavior: TopAppBarScrollBehavior?,\n    navigateUp: (() -> Unit)?,\n) {\n    val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f\n    SearchToolbar(\n        titleContent = {\n            Row(verticalAlignment = Alignment.CenterVertically) {\n                Text(\n                    text = title.text,\n                    maxLines = 1,\n                    modifier = Modifier.weight(1f, false),\n                    overflow = TextOverflow.Ellipsis,\n                )\n                if (title.numberOfEntries != null) {\n                    Pill(\n                        text = \"${title.numberOfEntries}\",\n                        color = MaterialTheme.colorScheme.onBackground.copy(alpha = pillAlpha),\n                        fontSize = 14.sp,\n                    )\n                }\n            }\n        },\n        searchQuery = searchQuery,\n        onChangeSearchQuery = onSearchQueryChange,\n        actions = {\n            val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current\n            AppBarActions(\n                persistentListOf(\n                    AppBar.Action(\n                        title = stringResource(MR.strings.action_filter),\n                        icon = Icons.Outlined.FilterList,\n                        iconTint = filterTint,\n                        onClick = onClickFilter,\n                    ),\n                    AppBar.OverflowAction(\n                        title = stringResource(MR.strings.action_update_library),\n                        onClick = onClickGlobalUpdate,\n                    ),\n                    AppBar.OverflowAction(\n                        title = stringResource(MR.strings.action_update_category),\n                        onClick = onClickRefresh,\n                    ),\n                    AppBar.OverflowAction(\n                        title = stringResource(MR.strings.action_open_random_manga),\n                        onClick = onClickOpenRandomEntry,\n                    ),\n                ),\n            )\n        },\n        scrollBehavior = scrollBehavior,\n        navigateUp = navigateUp,\n    )\n}\n\n@Composable\nprivate fun LibrarySelectionToolbar(\n    selectedCount: Int,\n    onClickUnselectAll: () -> Unit,\n    onClickSelectAll: () -> Unit,\n    onClickInvertSelection: () -> Unit,\n) {\n    AppBar(\n        titleContent = { Text(text = \"$selectedCount\") },\n        actions = {\n            AppBarActions(\n                persistentListOf(\n                    AppBar.Action(\n                        title = stringResource(MR.strings.action_select_all),\n                        icon = Icons.Outlined.SelectAll,\n                        onClick = onClickSelectAll,\n                    ),\n                    AppBar.Action(\n                        title = stringResource(MR.strings.action_select_inverse),\n                        icon = Icons.Outlined.FlipToBack,\n                        onClick = onClickInvertSelection,\n                    ),\n                ),\n            )\n        },\n        isActionMode = true,\n        onCancelActionMode = onClickUnselectAll,\n    )\n}\n\n@Immutable\ndata class LibraryToolbarTitle(\n    val text: String,\n    val numberOfEntries: Int? = null,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryComfortableGrid.kt",
    "content": "package eu.kanade.presentation.library.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryComfortableGridItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.LazyLibraryGrid\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.presentation.library.components.globalSearchItem\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryItem\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.library.manga.LibraryManga\n\n@Composable\ninternal fun MangaLibraryComfortableGrid(\n    items: List<MangaLibraryItem>,\n    columns: Int,\n    contentPadding: PaddingValues,\n    selection: List<LibraryManga>,\n    onClick: (LibraryManga) -> Unit,\n    onLongClick: (LibraryManga) -> Unit,\n    onClickContinueReading: ((LibraryManga) -> Unit)?,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    LazyLibraryGrid(\n        modifier = Modifier.fillMaxSize(),\n        columns = columns,\n        contentPadding = contentPadding,\n    ) {\n        globalSearchItem(searchQuery, onGlobalSearchClicked)\n\n        items(\n            items = items,\n            contentType = { \"manga_library_comfortable_grid_item\" },\n        ) { libraryItem ->\n            val manga = libraryItem.libraryManga.manga\n            EntryComfortableGridItem(\n                isSelected = selection.fastAny { it.id == libraryItem.libraryManga.id },\n                title = manga.title,\n                coverData = MangaCover(\n                    mangaId = manga.id,\n                    sourceId = manga.source,\n                    isMangaFavorite = manga.favorite,\n                    url = manga.thumbnailUrl,\n                    lastModified = manga.coverLastModified,\n                ),\n                coverBadgeStart = {\n                    DownloadsBadge(count = libraryItem.downloadCount)\n                    UnviewedBadge(count = libraryItem.unreadCount)\n                },\n                coverBadgeEnd = {\n                    LanguageBadge(\n                        isLocal = libraryItem.isLocal,\n                        sourceLanguage = libraryItem.sourceLanguage,\n                    )\n                },\n                onLongClick = { onLongClick(libraryItem.libraryManga) },\n                onClick = { onClick(libraryItem.libraryManga) },\n                onClickContinueViewing = if (onClickContinueReading != null && libraryItem.unreadCount > 0) {\n                    { onClickContinueReading(libraryItem.libraryManga) }\n                } else {\n                    null\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryCompactGrid.kt",
    "content": "package eu.kanade.presentation.library.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryCompactGridItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.LazyLibraryGrid\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.presentation.library.components.globalSearchItem\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryItem\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.library.manga.LibraryManga\n\n@Composable\ninternal fun MangaLibraryCompactGrid(\n    items: List<MangaLibraryItem>,\n    showTitle: Boolean,\n    columns: Int,\n    contentPadding: PaddingValues,\n    selection: List<LibraryManga>,\n    onClick: (LibraryManga) -> Unit,\n    onLongClick: (LibraryManga) -> Unit,\n    onClickContinueReading: ((LibraryManga) -> Unit)?,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    LazyLibraryGrid(\n        modifier = Modifier.fillMaxSize(),\n        columns = columns,\n        contentPadding = contentPadding,\n    ) {\n        globalSearchItem(searchQuery, onGlobalSearchClicked)\n\n        items(\n            items = items,\n            contentType = { \"manga_library_compact_grid_item\" },\n        ) { libraryItem ->\n            val manga = libraryItem.libraryManga.manga\n            EntryCompactGridItem(\n                isSelected = selection.fastAny { it.id == libraryItem.libraryManga.id },\n                title = manga.title.takeIf { showTitle },\n                coverData = MangaCover(\n                    mangaId = manga.id,\n                    sourceId = manga.source,\n                    isMangaFavorite = manga.favorite,\n                    url = manga.thumbnailUrl,\n                    lastModified = manga.coverLastModified,\n                ),\n                coverBadgeStart = {\n                    DownloadsBadge(count = libraryItem.downloadCount)\n                    UnviewedBadge(count = libraryItem.unreadCount)\n                },\n                coverBadgeEnd = {\n                    LanguageBadge(\n                        isLocal = libraryItem.isLocal,\n                        sourceLanguage = libraryItem.sourceLanguage,\n                    )\n                },\n                onLongClick = { onLongClick(libraryItem.libraryManga) },\n                onClick = { onClick(libraryItem.libraryManga) },\n                onClickContinueViewing = if (onClickContinueReading != null && libraryItem.unreadCount > 0) {\n                    { onClickContinueReading(libraryItem.libraryManga) }\n                } else {\n                    null\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryContent.kt",
    "content": "package eu.kanade.presentation.library.manga\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.rememberPagerState\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.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport eu.kanade.core.preference.PreferenceMutableState\nimport eu.kanade.presentation.library.components.LibraryTabs\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryItem\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun MangaLibraryContent(\n    categories: List<Category>,\n    searchQuery: String?,\n    selection: List<LibraryManga>,\n    contentPadding: PaddingValues,\n    currentPage: () -> Int,\n    hasActiveFilters: Boolean,\n    showPageTabs: Boolean,\n    onChangeCurrentPage: (Int) -> Unit,\n    onMangaClicked: (Long) -> Unit,\n    onContinueReadingClicked: ((LibraryManga) -> Unit)?,\n    onToggleSelection: (LibraryManga) -> Unit,\n    onToggleRangeSelection: (LibraryManga) -> Unit,\n    onRefresh: (Category?) -> Boolean,\n    onGlobalSearchClicked: () -> Unit,\n    getNumberOfMangaForCategory: (Category) -> Int?,\n    getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>,\n    getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,\n    getLibraryForPage: (Int) -> List<MangaLibraryItem>,\n) {\n    Column(\n        modifier = Modifier.padding(\n            top = contentPadding.calculateTopPadding(),\n            start = contentPadding.calculateStartPadding(LocalLayoutDirection.current),\n            end = contentPadding.calculateEndPadding(LocalLayoutDirection.current),\n        ),\n    ) {\n        val coercedCurrentPage = remember { currentPage().coerceAtMost(categories.lastIndex) }\n        val pagerState = rememberPagerState(coercedCurrentPage) { categories.size }\n\n        val scope = rememberCoroutineScope()\n        var isRefreshing by remember(pagerState.currentPage) { mutableStateOf(false) }\n\n        if (showPageTabs && categories.size > 1) {\n            LaunchedEffect(categories) {\n                if (categories.size <= pagerState.currentPage) {\n                    pagerState.scrollToPage(categories.size - 1)\n                }\n            }\n            LibraryTabs(\n                categories = categories,\n                pagerState = pagerState,\n                getNumberOfItemsForCategory = getNumberOfMangaForCategory,\n            ) { scope.launch { pagerState.animateScrollToPage(it) } }\n        }\n\n        val notSelectionMode = selection.isEmpty()\n        val onClickManga = { manga: LibraryManga ->\n            if (notSelectionMode) {\n                onMangaClicked(manga.manga.id)\n            } else {\n                onToggleSelection(manga)\n            }\n        }\n\n        PullRefresh(\n            refreshing = isRefreshing,\n            onRefresh = {\n                val started = onRefresh(categories[currentPage()])\n                if (!started) return@PullRefresh\n                scope.launch {\n                    // Fake refresh status but hide it after a second as it's a long running task\n                    isRefreshing = true\n                    delay(1.seconds)\n                    isRefreshing = false\n                }\n            },\n            enabled = notSelectionMode,\n        ) {\n            MangaLibraryPager(\n                state = pagerState,\n                contentPadding = PaddingValues(bottom = contentPadding.calculateBottomPadding()),\n                hasActiveFilters = hasActiveFilters,\n                selectedManga = selection,\n                searchQuery = searchQuery,\n                onGlobalSearchClicked = onGlobalSearchClicked,\n                getDisplayMode = getDisplayMode,\n                getColumnsForOrientation = getColumnsForOrientation,\n                getLibraryForPage = getLibraryForPage,\n                onClickManga = onClickManga,\n                onLongClickManga = onToggleRangeSelection,\n                onClickContinueReading = onContinueReadingClicked,\n            )\n        }\n\n        LaunchedEffect(pagerState.currentPage) {\n            onChangeCurrentPage(pagerState.currentPage)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryList.kt",
    "content": "package eu.kanade.presentation.library.manga\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.library.components.DownloadsBadge\nimport eu.kanade.presentation.library.components.EntryListItem\nimport eu.kanade.presentation.library.components.GlobalSearchItem\nimport eu.kanade.presentation.library.components.LanguageBadge\nimport eu.kanade.presentation.library.components.UnviewedBadge\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryItem\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\ninternal fun MangaLibraryList(\n    items: List<MangaLibraryItem>,\n    entries: Int,\n    containerHeight: Int,\n    contentPadding: PaddingValues,\n    selection: List<LibraryManga>,\n    onClick: (LibraryManga) -> Unit,\n    onLongClick: (LibraryManga) -> Unit,\n    onClickContinueReading: ((LibraryManga) -> Unit)?,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    FastScrollLazyColumn(\n        modifier = Modifier.fillMaxSize(),\n        contentPadding = contentPadding + PaddingValues(vertical = 8.dp),\n    ) {\n        item {\n            if (!searchQuery.isNullOrEmpty()) {\n                GlobalSearchItem(\n                    modifier = Modifier.fillMaxWidth(),\n                    searchQuery = searchQuery,\n                    onClick = onGlobalSearchClicked,\n                )\n            }\n        }\n\n        items(\n            items = items,\n            contentType = { \"manga_library_list_item\" },\n        ) { libraryItem ->\n            val manga = libraryItem.libraryManga.manga\n            EntryListItem(\n                isSelected = selection.fastAny { it.id == libraryItem.libraryManga.id },\n                title = manga.title,\n                coverData = MangaCover(\n                    mangaId = manga.id,\n                    sourceId = manga.source,\n                    isMangaFavorite = manga.favorite,\n                    url = manga.thumbnailUrl,\n                    lastModified = manga.coverLastModified,\n                ),\n                badge = {\n                    DownloadsBadge(count = libraryItem.downloadCount)\n                    UnviewedBadge(count = libraryItem.unreadCount)\n                    LanguageBadge(\n                        isLocal = libraryItem.isLocal,\n                        sourceLanguage = libraryItem.sourceLanguage,\n                    )\n                },\n                onLongClick = { onLongClick(libraryItem.libraryManga) },\n                onClick = { onClick(libraryItem.libraryManga) },\n                onClickContinueViewing = if (onClickContinueReading != null && libraryItem.unreadCount > 0) {\n                    { onClickContinueReading(libraryItem.libraryManga) }\n                } else {\n                    null\n                },\n                entries = entries,\n                containerHeight = containerHeight,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt",
    "content": "package eu.kanade.presentation.library.manga\n\nimport android.content.res.Configuration\nimport androidx.compose.foundation.layout.BoxWithConstraints\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.pager.HorizontalPager\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.core.preference.PreferenceMutableState\nimport eu.kanade.presentation.library.components.GlobalSearchItem\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryItem\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun MangaLibraryPager(\n    state: PagerState,\n    contentPadding: PaddingValues,\n    hasActiveFilters: Boolean,\n    selectedManga: List<LibraryManga>,\n    searchQuery: String?,\n    onGlobalSearchClicked: () -> Unit,\n    getDisplayMode: (Int) -> PreferenceMutableState<LibraryDisplayMode>,\n    getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,\n    getLibraryForPage: (Int) -> List<MangaLibraryItem>,\n    onClickManga: (LibraryManga) -> Unit,\n    onLongClickManga: (LibraryManga) -> Unit,\n    onClickContinueReading: ((LibraryManga) -> Unit)?,\n) {\n    BoxWithConstraints {\n        val density = LocalDensity.current\n        val containerHeightPx = with(density) { this@BoxWithConstraints.maxHeight.roundToPx() }\n\n        HorizontalPager(\n            modifier = Modifier.fillMaxSize(),\n            state = state,\n            verticalAlignment = Alignment.Top,\n        ) { page ->\n            if (page !in ((state.currentPage - 1)..(state.currentPage + 1))) {\n                // To make sure only one offscreen page is being composed\n                return@HorizontalPager\n            }\n            val library = getLibraryForPage(page)\n\n            if (library.isEmpty()) {\n                LibraryPagerEmptyScreen(\n                    searchQuery = searchQuery,\n                    hasActiveFilters = hasActiveFilters,\n                    contentPadding = contentPadding,\n                    onGlobalSearchClicked = onGlobalSearchClicked,\n                )\n                return@HorizontalPager\n            }\n\n            val displayMode by getDisplayMode(page)\n            val configuration = LocalConfiguration.current\n            val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE\n            val columns by remember(isLandscape) { getColumnsForOrientation(isLandscape) }\n\n            when (displayMode) {\n                LibraryDisplayMode.List -> {\n                    MangaLibraryList(\n                        items = library,\n                        entries = columns,\n                        containerHeight = containerHeightPx,\n                        contentPadding = contentPadding,\n                        selection = selectedManga,\n                        onClick = onClickManga,\n                        onLongClick = onLongClickManga,\n                        onClickContinueReading = onClickContinueReading,\n                        searchQuery = searchQuery,\n                        onGlobalSearchClicked = onGlobalSearchClicked,\n                    )\n                }\n\n                LibraryDisplayMode.CompactGrid, LibraryDisplayMode.CoverOnlyGrid -> {\n                    MangaLibraryCompactGrid(\n                        items = library,\n                        showTitle = displayMode is LibraryDisplayMode.CompactGrid,\n                        columns = columns,\n                        contentPadding = contentPadding,\n                        selection = selectedManga,\n                        onClick = onClickManga,\n                        onLongClick = onLongClickManga,\n                        onClickContinueReading = onClickContinueReading,\n                        searchQuery = searchQuery,\n                        onGlobalSearchClicked = onGlobalSearchClicked,\n                    )\n                }\n\n                LibraryDisplayMode.ComfortableGrid -> {\n                    MangaLibraryComfortableGrid(\n                        items = library,\n                        columns = columns,\n                        contentPadding = contentPadding,\n                        selection = selectedManga,\n                        onClick = onClickManga,\n                        onLongClick = onLongClickManga,\n                        onClickContinueReading = onClickContinueReading,\n                        searchQuery = searchQuery,\n                        onGlobalSearchClicked = onGlobalSearchClicked,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun LibraryPagerEmptyScreen(\n    searchQuery: String?,\n    hasActiveFilters: Boolean,\n    contentPadding: PaddingValues,\n    onGlobalSearchClicked: () -> Unit,\n) {\n    val msg = when {\n        !searchQuery.isNullOrEmpty() -> MR.strings.no_results_found\n        hasActiveFilters -> MR.strings.error_no_match\n        else -> MR.strings.information_no_manga_category\n    }\n\n    Column(\n        modifier = Modifier\n            .padding(contentPadding + PaddingValues(8.dp))\n            .fillMaxSize()\n            .verticalScroll(rememberScrollState()),\n    ) {\n        if (!searchQuery.isNullOrEmpty()) {\n            GlobalSearchItem(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .align(Alignment.CenterHorizontally),\n                searchQuery = searchQuery,\n                onClick = onGlobalSearchClicked,\n            )\n        }\n\n        EmptyScreen(\n            stringRes = msg,\n            modifier = Modifier.weight(1f),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt",
    "content": "package eu.kanade.presentation.library.manga\n\nimport android.content.res.Configuration\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.material.icons.Icons\nimport androidx.compose.material.icons.filled.Refresh\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalConfiguration\nimport eu.kanade.presentation.components.TabbedDialog\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibrarySettingsScreenModel\nimport eu.kanade.tachiyomi.util.system.isReleaseBuildType\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.manga.model.MangaLibrarySort\nimport tachiyomi.domain.library.manga.model.sort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.BaseSortItem\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.HeadingItem\nimport tachiyomi.presentation.core.components.SettingsChipRow\nimport tachiyomi.presentation.core.components.SliderItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\n\n@Composable\nfun MangaLibrarySettingsDialog(\n    onDismissRequest: () -> Unit,\n    screenModel: MangaLibrarySettingsScreenModel,\n    category: Category?,\n) {\n    TabbedDialog(\n        onDismissRequest = onDismissRequest,\n        tabTitles = persistentListOf(\n            stringResource(MR.strings.action_filter),\n            stringResource(MR.strings.action_sort),\n            stringResource(MR.strings.action_display),\n        ),\n    ) { page ->\n        Column(\n            modifier = Modifier\n                .padding(vertical = TabbedDialogPaddings.Vertical)\n                .verticalScroll(rememberScrollState()),\n        ) {\n            when (page) {\n                0 -> FilterPage(\n                    screenModel = screenModel,\n                )\n                1 -> SortPage(\n                    category = category,\n                    screenModel = screenModel,\n                )\n                2 -> DisplayPage(\n                    screenModel = screenModel,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.FilterPage(\n    screenModel: MangaLibrarySettingsScreenModel,\n) {\n    val filterDownloaded by screenModel.libraryPreferences.filterDownloadedManga().collectAsState()\n    val downloadedOnly by screenModel.preferences.downloadedOnly().collectAsState()\n    val autoUpdateMangaRestrictions by screenModel.libraryPreferences.autoUpdateItemRestrictions().collectAsState()\n\n    TriStateItem(\n        label = stringResource(MR.strings.label_downloaded),\n        state = if (downloadedOnly) {\n            TriState.ENABLED_IS\n        } else {\n            filterDownloaded\n        },\n        enabled = !downloadedOnly,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterDownloadedManga) },\n    )\n    val filterUnread by screenModel.libraryPreferences.filterUnread().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_unread),\n        state = filterUnread,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterUnread) },\n    )\n    val filterStarted by screenModel.libraryPreferences.filterStartedManga().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.label_started),\n        state = filterStarted,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterStartedManga) },\n    )\n    val filterBookmarked by screenModel.libraryPreferences.filterBookmarkedManga().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.action_filter_bookmarked),\n        state = filterBookmarked,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterBookmarkedManga) },\n    )\n    val filterCompleted by screenModel.libraryPreferences.filterCompletedManga().collectAsState()\n    TriStateItem(\n        label = stringResource(MR.strings.completed),\n        state = filterCompleted,\n        onClick = { screenModel.toggleFilter(LibraryPreferences::filterCompletedManga) },\n    )\n\n    // TODO: re-enable when custom intervals are ready for stable\n    if ((!isReleaseBuildType) && LibraryPreferences.ENTRY_OUTSIDE_RELEASE_PERIOD in autoUpdateMangaRestrictions) {\n        val filterIntervalCustom by screenModel.libraryPreferences.filterIntervalCustom().collectAsState()\n        TriStateItem(\n            label = stringResource(MR.strings.action_filter_interval_custom),\n            state = filterIntervalCustom,\n            onClick = { screenModel.toggleFilter(LibraryPreferences::filterIntervalCustom) },\n        )\n    }\n\n    val trackers by screenModel.trackersFlow.collectAsState()\n    when (trackers.size) {\n        0 -> {\n            // No trackers\n        }\n        1 -> {\n            val service = trackers[0]\n            val filterTracker by screenModel.libraryPreferences.filterTrackedManga(\n                service.id.toInt(),\n            ).collectAsState()\n            TriStateItem(\n                label = stringResource(MR.strings.action_filter_tracked),\n                state = filterTracker,\n                onClick = { screenModel.toggleTracker(service.id.toInt()) },\n            )\n        }\n        else -> {\n            HeadingItem(MR.strings.action_filter_tracked)\n            trackers.map { service ->\n                val filterTracker by screenModel.libraryPreferences.filterTrackedManga(\n                    service.id.toInt(),\n                ).collectAsState()\n                TriStateItem(\n                    label = service.name,\n                    state = filterTracker,\n                    onClick = { screenModel.toggleTracker(service.id.toInt()) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ColumnScope.SortPage(\n    category: Category?,\n    screenModel: MangaLibrarySettingsScreenModel,\n) {\n    val trackers by screenModel.trackersFlow.collectAsState()\n    val sortingMode = category.sort.type\n    val sortDescending = !category.sort.isAscending\n\n    val options = remember(trackers.isEmpty()) {\n        val trackerMeanPair = if (trackers.isNotEmpty()) {\n            MR.strings.action_sort_tracker_score to MangaLibrarySort.Type.TrackerMean\n        } else {\n            null\n        }\n        listOfNotNull(\n            MR.strings.action_sort_alpha to MangaLibrarySort.Type.Alphabetical,\n            MR.strings.action_sort_total to MangaLibrarySort.Type.TotalChapters,\n            MR.strings.action_sort_last_read to MangaLibrarySort.Type.LastRead,\n            AYMR.strings.action_sort_last_manga_update to MangaLibrarySort.Type.LastUpdate,\n            MR.strings.action_sort_unread_count to MangaLibrarySort.Type.UnreadCount,\n            MR.strings.action_sort_latest_chapter to MangaLibrarySort.Type.LatestChapter,\n            MR.strings.action_sort_chapter_fetch_date to MangaLibrarySort.Type.ChapterFetchDate,\n            MR.strings.action_sort_date_added to MangaLibrarySort.Type.DateAdded,\n            trackerMeanPair,\n            MR.strings.action_sort_random to MangaLibrarySort.Type.Random,\n        )\n    }\n\n    options.map { (titleRes, mode) ->\n        if (mode == MangaLibrarySort.Type.Random) {\n            BaseSortItem(\n                label = stringResource(titleRes),\n                icon = Icons.Default.Refresh\n                    .takeIf { sortingMode == MangaLibrarySort.Type.Random },\n                onClick = {\n                    screenModel.setSort(category, mode, MangaLibrarySort.Direction.Ascending)\n                },\n            )\n            return@map\n        }\n        SortItem(\n            label = stringResource(titleRes),\n            sortDescending = sortDescending.takeIf { sortingMode == mode },\n            onClick = {\n                val isTogglingDirection = sortingMode == mode\n                val direction = when {\n                    isTogglingDirection -> if (sortDescending) {\n                        MangaLibrarySort.Direction.Ascending\n                    } else {\n                        MangaLibrarySort.Direction.Descending\n                    }\n                    else -> if (sortDescending) {\n                        MangaLibrarySort.Direction.Descending\n                    } else {\n                        MangaLibrarySort.Direction.Ascending\n                    }\n                }\n                screenModel.setSort(category, mode, direction)\n            },\n        )\n    }\n}\n\nprivate val displayModes = listOf(\n    MR.strings.action_display_grid to LibraryDisplayMode.CompactGrid,\n    MR.strings.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid,\n    MR.strings.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid,\n    MR.strings.action_display_list to LibraryDisplayMode.List,\n)\n\n@Composable\nprivate fun ColumnScope.DisplayPage(\n    screenModel: MangaLibrarySettingsScreenModel,\n) {\n    val displayMode by screenModel.libraryPreferences.displayMode().collectAsState()\n    SettingsChipRow(MR.strings.action_display_mode) {\n        displayModes.map { (titleRes, mode) ->\n            FilterChip(\n                selected = displayMode == mode,\n                onClick = { screenModel.setDisplayMode(mode) },\n                label = { Text(stringResource(titleRes)) },\n            )\n        }\n    }\n\n    val configuration = LocalConfiguration.current\n    val columnPreference = remember {\n        if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {\n            screenModel.libraryPreferences.mangaLandscapeColumns()\n        } else {\n            screenModel.libraryPreferences.mangaPortraitColumns()\n        }\n    }\n\n    val columns by columnPreference.collectAsState()\n    if (displayMode == LibraryDisplayMode.List) {\n        SliderItem(\n            value = columns,\n            valueRange = 0..10,\n            label = stringResource(AYMR.strings.pref_library_rows),\n            valueText = if (columns > 0) {\n                columns.toString()\n            } else {\n                stringResource(MR.strings.label_auto)\n            },\n            onChange = columnPreference::set,\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    } else {\n        SliderItem(\n            value = columns,\n            valueRange = 0..10,\n            label = stringResource(MR.strings.pref_library_columns),\n            valueText = if (columns > 0) {\n                columns.toString()\n            } else {\n                stringResource(MR.strings.label_auto)\n            },\n            onChange = columnPreference::set,\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    }\n\n    HeadingItem(MR.strings.overlay_header)\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_download_badge),\n        pref = screenModel.libraryPreferences.downloadBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_unread_badge),\n        pref = screenModel.libraryPreferences.unreadBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_local_badge),\n        pref = screenModel.libraryPreferences.localBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_language_badge),\n        pref = screenModel.libraryPreferences.languageBadge(),\n    )\n    CheckboxItem(\n        label = stringResource(AYMR.strings.action_display_show_continue_reading_button),\n        pref = screenModel.libraryPreferences.showContinueViewingButton(),\n    )\n\n    HeadingItem(MR.strings.tabs_header)\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_show_tabs),\n        pref = screenModel.libraryPreferences.categoryTabs(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.action_display_show_number_of_items),\n        pref = screenModel.libraryPreferences.categoryNumberOfItems(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/LogoHeader.kt",
    "content": "package eu.kanade.presentation.more\n\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.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.R\n\n@Composable\nfun LogoHeader() {\n    Column(\n        modifier = Modifier.fillMaxWidth(),\n        horizontalAlignment = Alignment.CenterHorizontally,\n    ) {\n        Icon(\n            painter = painterResource(R.drawable.ic_ani),\n            contentDescription = null,\n            tint = MaterialTheme.colorScheme.onSurface,\n            modifier = Modifier\n                .padding(vertical = 56.dp)\n                .size(64.dp),\n        )\n\n        HorizontalDivider()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt",
    "content": "package eu.kanade.presentation.more\n\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material.icons.automirrored.outlined.Label\nimport androidx.compose.material.icons.outlined.CloudOff\nimport androidx.compose.material.icons.outlined.GetApp\nimport androidx.compose.material.icons.outlined.Info\nimport androidx.compose.material.icons.outlined.QueryStats\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material.icons.outlined.Storage\nimport androidx.compose.material.icons.outlined.VideoSettings\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.res.vectorResource\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.ui.more.DownloadQueueState\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun MoreScreen(\n    downloadQueueStateProvider: () -> DownloadQueueState,\n    downloadedOnly: Boolean,\n    onDownloadedOnlyChange: (Boolean) -> Unit,\n    incognitoMode: Boolean,\n    onIncognitoModeChange: (Boolean) -> Unit,\n    navStyle: NavStyle,\n    onClickAlt: () -> Unit,\n    onClickDownloadQueue: () -> Unit,\n    onClickCategories: () -> Unit,\n    onClickStats: () -> Unit,\n    onClickStorage: () -> Unit,\n    onClickDataAndStorage: () -> Unit,\n    onClickPlayerSettings: () -> Unit,\n    onClickSettings: () -> Unit,\n    onClickAbout: () -> Unit,\n) {\n    val uriHandler = LocalUriHandler.current\n\n    Scaffold { contentPadding ->\n        ScrollbarLazyColumn(\n            modifier = Modifier.padding(contentPadding),\n        ) {\n            item {\n                LogoHeader()\n            }\n            item {\n                SwitchPreferenceWidget(\n                    title = stringResource(MR.strings.label_downloaded_only),\n                    subtitle = stringResource(MR.strings.downloaded_only_summary),\n                    icon = Icons.Outlined.CloudOff,\n                    checked = downloadedOnly,\n                    onCheckedChanged = onDownloadedOnlyChange,\n                )\n            }\n            item {\n                SwitchPreferenceWidget(\n                    title = stringResource(MR.strings.pref_incognito_mode),\n                    subtitle = stringResource(AYMR.strings.pref_incognito_mode_summary),\n                    icon = ImageVector.vectorResource(R.drawable.ic_glasses_24dp),\n                    checked = incognitoMode,\n                    onCheckedChanged = onIncognitoModeChange,\n                )\n            }\n\n            item { HorizontalDivider() }\n\n            item {\n                TextPreferenceWidget(\n                    title = navStyle.moreTab.options.title,\n                    icon = navStyle.moreIcon,\n                    onPreferenceClick = onClickAlt,\n                )\n            }\n\n            item {\n                val downloadQueueState = downloadQueueStateProvider()\n                TextPreferenceWidget(\n                    title = stringResource(MR.strings.label_download_queue),\n                    subtitle = when (downloadQueueState) {\n                        DownloadQueueState.Stopped -> null\n                        is DownloadQueueState.Paused -> {\n                            val pending = downloadQueueState.pending\n                            if (pending == 0) {\n                                stringResource(MR.strings.paused)\n                            } else {\n                                \"${stringResource(MR.strings.paused)} • ${\n                                    pluralStringResource(\n                                        MR.plurals.download_queue_summary,\n                                        count = pending,\n                                        pending,\n                                    )\n                                }\"\n                            }\n                        }\n\n                        is DownloadQueueState.Downloading -> {\n                            val pending = downloadQueueState.pending\n                            pluralStringResource(\n                                MR.plurals.download_queue_summary,\n                                count = pending,\n                                pending,\n                            )\n                        }\n                    },\n                    icon = Icons.Outlined.GetApp,\n                    onPreferenceClick = onClickDownloadQueue,\n                )\n            }\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(AYMR.strings.general_categories),\n                    icon = Icons.AutoMirrored.Outlined.Label,\n                    onPreferenceClick = onClickCategories,\n                )\n            }\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(MR.strings.label_stats),\n                    icon = Icons.Outlined.QueryStats,\n                    onPreferenceClick = onClickStats,\n                )\n            }\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(MR.strings.label_data_storage),\n                    icon = Icons.Outlined.Storage,\n                    onPreferenceClick = onClickDataAndStorage,\n                )\n            }\n\n            item { HorizontalDivider() }\n\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(MR.strings.label_settings),\n                    icon = Icons.Outlined.Settings,\n                    onPreferenceClick = onClickSettings,\n                )\n            }\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(AYMR.strings.label_player_settings),\n                    icon = Icons.Outlined.VideoSettings,\n                    onPreferenceClick = onClickPlayerSettings,\n                )\n            }\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(MR.strings.pref_category_about),\n                    icon = Icons.Outlined.Info,\n                    onPreferenceClick = onClickAbout,\n                )\n            }\n            item {\n                TextPreferenceWidget(\n                    title = stringResource(MR.strings.label_help),\n                    icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                    onPreferenceClick = { uriHandler.openUri(Constants.URL_HELP) },\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt",
    "content": "package eu.kanade.presentation.more\n\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.OpenInNew\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.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.SpanStyle\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport com.halilibo.richtext.markdown.Markdown\nimport com.halilibo.richtext.ui.RichTextStyle\nimport com.halilibo.richtext.ui.material3.RichText\nimport com.halilibo.richtext.ui.string.RichTextStringStyle\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.InfoScreen\n\n@Composable\nfun NewUpdateScreen(\n    versionName: String,\n    changelogInfo: String,\n    onOpenInBrowser: () -> Unit,\n    onRejectUpdate: () -> Unit,\n    onAcceptUpdate: () -> Unit,\n) {\n    InfoScreen(\n        icon = Icons.Outlined.NewReleases,\n        headingText = stringResource(MR.strings.update_check_notification_update_available),\n        subtitleText = versionName,\n        acceptText = stringResource(MR.strings.update_check_confirm),\n        onAcceptClick = onAcceptUpdate,\n        rejectText = stringResource(MR.strings.action_not_now),\n        onRejectClick = onRejectUpdate,\n    ) {\n        RichText(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(vertical = MaterialTheme.padding.large),\n            style = RichTextStyle(\n                stringStyle = RichTextStringStyle(\n                    linkStyle = SpanStyle(color = MaterialTheme.colorScheme.primary),\n                ),\n            ),\n        ) {\n            Markdown(content = changelogInfo)\n\n            TextButton(\n                onClick = onOpenInBrowser,\n                modifier = Modifier.padding(top = MaterialTheme.padding.small),\n            ) {\n                Text(text = stringResource(MR.strings.update_check_open))\n                Spacer(modifier = Modifier.width(MaterialTheme.padding.extraSmall))\n                Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null)\n            }\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun NewUpdateScreenPreview() {\n    TachiyomiPreviewTheme {\n        NewUpdateScreen(\n            versionName = \"v0.99.9\",\n            changelogInfo = \"\"\"\n                ## Yay\n                Foobar\n\n                ### More info\n                - Hello\n                - World\n            \"\"\".trimIndent(),\n            onOpenInBrowser = {},\n            onRejectUpdate = {},\n            onAcceptUpdate = {},\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/onboarding/GuidesStep.kt",
    "content": "package eu.kanade.presentation.more.onboarding\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.Button\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\ninternal class GuidesStep(\n    private val onRestoreBackup: () -> Unit,\n) : OnboardingStep {\n\n    override val isComplete: Boolean = true\n\n    @Composable\n    override fun Content() {\n        val handler = LocalUriHandler.current\n\n        Column(\n            modifier = Modifier.padding(16.dp),\n            verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            Text(stringResource(MR.strings.onboarding_guides_new_user, stringResource(MR.strings.app_name)))\n            Button(\n                modifier = Modifier.fillMaxWidth(),\n                onClick = { handler.openUri(GETTING_STARTED_URL) },\n            ) {\n                Text(stringResource(MR.strings.getting_started_guide))\n            }\n\n            HorizontalDivider(\n                modifier = Modifier.padding(vertical = 8.dp),\n                color = MaterialTheme.colorScheme.onPrimaryContainer,\n            )\n\n            Text(stringResource(MR.strings.onboarding_guides_returning_user, stringResource(MR.strings.app_name)))\n            Button(\n                modifier = Modifier.fillMaxWidth(),\n                onClick = onRestoreBackup,\n            ) {\n                Text(stringResource(MR.strings.pref_restore_backup))\n            }\n        }\n    }\n}\n\nconst val GETTING_STARTED_URL = \"https://aniyomi.org/docs/guides/getting-started\"\n\n@PreviewLightDark\n@Composable\nprivate fun GuidesStepPreview() {\n    TachiyomiPreviewTheme {\n        GuidesStep(\n            onRestoreBackup = {},\n        ).Content()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/onboarding/OnboardingScreen.kt",
    "content": "package eu.kanade.presentation.more.onboarding\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.RocketLaunch\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\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.draw.clip\nimport soup.compose.material.motion.animation.materialSharedAxisX\nimport soup.compose.material.motion.animation.rememberSlideDistance\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.InfoScreen\n\n@Composable\nfun OnboardingScreen(\n    onComplete: () -> Unit,\n    onRestoreBackup: () -> Unit,\n) {\n    val slideDistance = rememberSlideDistance()\n\n    var currentStep by rememberSaveable { mutableIntStateOf(0) }\n    val steps = remember {\n        listOf(\n            ThemeStep(),\n            StorageStep(),\n            PermissionStep(),\n            GuidesStep(onRestoreBackup = onRestoreBackup),\n        )\n    }\n    val isLastStep = currentStep == steps.lastIndex\n\n    BackHandler(enabled = currentStep != 0, onBack = { currentStep-- })\n\n    InfoScreen(\n        icon = Icons.Outlined.RocketLaunch,\n        headingText = stringResource(MR.strings.onboarding_heading),\n        subtitleText = stringResource(MR.strings.onboarding_description),\n        acceptText = stringResource(\n            if (isLastStep) {\n                MR.strings.onboarding_action_finish\n            } else {\n                MR.strings.onboarding_action_next\n            },\n        ),\n        canAccept = steps[currentStep].isComplete,\n        onAcceptClick = {\n            if (isLastStep) {\n                onComplete()\n            } else {\n                currentStep++\n            }\n        },\n    ) {\n        Box(\n            modifier = Modifier\n                .padding(vertical = MaterialTheme.padding.small)\n                .clip(MaterialTheme.shapes.small)\n                .fillMaxSize()\n                .background(MaterialTheme.colorScheme.surfaceVariant),\n        ) {\n            AnimatedContent(\n                targetState = currentStep,\n                transitionSpec = {\n                    materialSharedAxisX(\n                        forward = targetState > initialState,\n                        slideDistance = slideDistance,\n                    )\n                },\n                label = \"stepContent\",\n            ) {\n                steps[it].Content()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/onboarding/OnboardingStep.kt",
    "content": "package eu.kanade.presentation.more.onboarding\n\nimport androidx.compose.runtime.Composable\n\ninternal interface OnboardingStep {\n\n    val isComplete: Boolean\n\n    @Composable\n    fun Content()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/onboarding/PermissionStep.kt",
    "content": "package eu.kanade.presentation.more.onboarding\n\nimport android.Manifest\nimport android.annotation.SuppressLint\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport android.os.PowerManager\nimport android.provider.Settings\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisposableEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport androidx.core.content.getSystemService\nimport androidx.core.net.toUri\nimport androidx.lifecycle.DefaultLifecycleObserver\nimport androidx.lifecycle.LifecycleOwner\nimport androidx.lifecycle.compose.LocalLifecycleOwner\nimport eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState\nimport eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\ninternal class PermissionStep : OnboardingStep {\n\n    private var notificationGranted by mutableStateOf(false)\n    private var batteryGranted by mutableStateOf(false)\n\n    override val isComplete: Boolean = true\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val lifecycleOwner = LocalLifecycleOwner.current\n\n        val installGranted = rememberRequestPackageInstallsPermissionState()\n\n        DisposableEffect(lifecycleOwner.lifecycle) {\n            val observer = object : DefaultLifecycleObserver {\n                override fun onResume(owner: LifecycleOwner) {\n                    notificationGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        context.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) ==\n                            PackageManager.PERMISSION_GRANTED\n                    } else {\n                        true\n                    }\n                    batteryGranted = context.getSystemService<PowerManager>()!!\n                        .isIgnoringBatteryOptimizations(context.packageName)\n                }\n            }\n            lifecycleOwner.lifecycle.addObserver(observer)\n            onDispose {\n                lifecycleOwner.lifecycle.removeObserver(observer)\n            }\n        }\n\n        Column {\n            PermissionItem(\n                title = stringResource(MR.strings.onboarding_permission_install_apps),\n                subtitle = stringResource(MR.strings.onboarding_permission_install_apps_description),\n                granted = installGranted,\n                onButtonClick = {\n                    context.launchRequestPackageInstallsPermission()\n                },\n            )\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                val permissionRequester = rememberLauncherForActivityResult(\n                    contract = ActivityResultContracts.RequestPermission(),\n                    onResult = {\n                        // no-op. resulting checks is being done on resume\n                    },\n                )\n                PermissionItem(\n                    title = stringResource(MR.strings.onboarding_permission_notifications),\n                    subtitle = stringResource(MR.strings.onboarding_permission_notifications_description),\n                    granted = notificationGranted,\n                    onButtonClick = { permissionRequester.launch(Manifest.permission.POST_NOTIFICATIONS) },\n                )\n            }\n\n            PermissionItem(\n                title = stringResource(MR.strings.onboarding_permission_ignore_battery_opts),\n                subtitle = stringResource(MR.strings.onboarding_permission_ignore_battery_opts_description),\n                granted = batteryGranted,\n                onButtonClick = {\n                    @SuppressLint(\"BatteryLife\")\n                    val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {\n                        data = \"package:${context.packageName}\".toUri()\n                    }\n                    context.startActivity(intent)\n                },\n            )\n        }\n    }\n\n    @Composable\n    private fun SectionHeader(\n        text: String,\n        modifier: Modifier = Modifier,\n    ) {\n        Text(\n            text = text,\n            style = MaterialTheme.typography.titleLarge,\n            modifier = modifier\n                .padding(horizontal = 16.dp)\n                .secondaryItemAlpha(),\n        )\n    }\n\n    @Composable\n    private fun PermissionItem(\n        title: String,\n        subtitle: String,\n        granted: Boolean,\n        modifier: Modifier = Modifier,\n        onButtonClick: () -> Unit,\n    ) {\n        ListItem(\n            modifier = modifier,\n            headlineContent = { Text(text = title) },\n            supportingContent = { Text(text = subtitle) },\n            trailingContent = {\n                OutlinedButton(\n                    enabled = !granted,\n                    onClick = onButtonClick,\n                ) {\n                    if (granted) {\n                        Icon(\n                            imageVector = Icons.Default.Check,\n                            contentDescription = null,\n                            tint = MaterialTheme.colorScheme.primary,\n                        )\n                    } else {\n                        Text(stringResource(MR.strings.onboarding_permission_action_grant))\n                    }\n                }\n            },\n            colors = ListItemDefaults.colors(containerColor = Color.Transparent),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/onboarding/StorageStep.kt",
    "content": "package eu.kanade.presentation.more.onboarding\n\nimport android.content.ActivityNotFoundException\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.HorizontalDivider\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.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.more.settings.screen.SettingsDataScreen\nimport eu.kanade.tachiyomi.util.system.isTvBox\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.core.common.storage.AndroidStorageFolderProvider\nimport tachiyomi.domain.storage.service.StoragePreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Button\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ninternal class StorageStep : OnboardingStep {\n\n    private val storagePref = Injekt.get<StoragePreferences>().baseStorageDirectory()\n    private val folderProvider = Injekt.get<AndroidStorageFolderProvider>()\n\n    private var _isComplete by mutableStateOf(false)\n\n    override val isComplete: Boolean\n        get() = _isComplete\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val handler = LocalUriHandler.current\n\n        val isTvBox = isTvBox(LocalContext.current)\n\n        val pickStorageLocation = SettingsDataScreen.storageLocationPicker(storagePref)\n\n        Column(\n            modifier = Modifier.padding(16.dp),\n            verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            Text(\n                stringResource(\n                    MR.strings.onboarding_storage_info,\n                    stringResource(MR.strings.app_name),\n                    SettingsDataScreen.storageLocationText(storagePref),\n                ),\n            )\n\n            if (isTvBox) {\n                if (!storagePref.isSet()) {\n                    Button(\n                        modifier = Modifier.fillMaxWidth(),\n                        onClick = {\n                            val storage = folderProvider.directory()\n                            if (!storage.exists()) {\n                                storage.mkdirs()\n                            }\n                            storagePref.set(storagePref.get())\n                        },\n                    ) {\n                        Text(stringResource(AYMR.strings.onboarding_storage_action_create_folder))\n                    }\n                }\n            } else {\n                Button(\n                    modifier = Modifier.fillMaxWidth(),\n                    onClick = {\n                        try {\n                            pickStorageLocation.launch(null)\n                        } catch (e: ActivityNotFoundException) {\n                            context.toast(MR.strings.file_picker_error)\n                        }\n                    },\n                ) {\n                    Text(stringResource(MR.strings.onboarding_storage_action_select))\n                }\n            }\n\n            HorizontalDivider(\n                modifier = Modifier.padding(vertical = 8.dp),\n                color = MaterialTheme.colorScheme.onPrimaryContainer,\n            )\n\n            Text(stringResource(MR.strings.onboarding_storage_help_info, stringResource(MR.strings.app_name)))\n            Button(\n                modifier = Modifier.fillMaxWidth(),\n                onClick = { handler.openUri(SettingsDataScreen.HELP_URL) },\n            ) {\n                Text(stringResource(MR.strings.onboarding_storage_help_action))\n            }\n        }\n\n        LaunchedEffect(Unit) {\n            storagePref.changes()\n                .collectLatest { _isComplete = storagePref.isSet() }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/onboarding/ThemeStep.kt",
    "content": "package eu.kanade.presentation.more.onboarding\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode\nimport eu.kanade.presentation.more.settings.widget.AppThemeModePreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ninternal class ThemeStep : OnboardingStep {\n\n    override val isComplete: Boolean = true\n\n    private val uiPreferences: UiPreferences = Injekt.get()\n\n    @Composable\n    override fun Content() {\n        val themeModePref = uiPreferences.themeMode()\n        val themeMode by themeModePref.collectAsState()\n\n        val appThemePref = uiPreferences.appTheme()\n        val appTheme by appThemePref.collectAsState()\n\n        val amoledPref = uiPreferences.themeDarkAmoled()\n        val amoled by amoledPref.collectAsState()\n\n        Column {\n            AppThemeModePreferenceWidget(\n                value = themeMode,\n                onItemClick = {\n                    themeModePref.set(it)\n                    setAppCompatDelegateThemeMode(it)\n                },\n            )\n\n            AppThemePreferenceWidget(\n                value = appTheme,\n                amoled = amoled,\n                onItemClick = { appThemePref.set(it) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt",
    "content": "package eu.kanade.presentation.more.settings\n\nimport android.content.Context\nimport android.os.Build\nimport android.os.Environment\nimport androidx.annotation.IntRange\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport eu.kanade.core.preference.asState\nimport eu.kanade.presentation.more.settings.Preference.PreferenceItem\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableMap\nimport kotlinx.coroutines.CoroutineScope\nimport mihon.core.archive.openFileDescriptor\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.FileOutputStream\nimport tachiyomi.core.common.preference.Preference as PreferenceData\n\nsealed class Preference {\n    abstract val title: String\n    abstract val enabled: Boolean\n\n    sealed class PreferenceItem<T> : Preference() {\n        abstract val subtitle: String?\n        abstract val icon: ImageVector?\n        abstract val onValueChanged: suspend (value: T) -> Boolean\n\n        /**\n         * A basic [PreferenceItem] that only displays texts.\n         */\n        data class TextPreference(\n            override val title: String,\n            override val subtitle: String? = null,\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            val onClick: (() -> Unit)? = null,\n        ) : PreferenceItem<String>() {\n            override val onValueChanged: suspend (value: String) -> Boolean = { true }\n        }\n\n        /**\n         * A [PreferenceItem] that provides a two-state toggleable option.\n         */\n        data class SwitchPreference(\n            val preference: PreferenceData<Boolean>,\n            override val title: String,\n            override val subtitle: String? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: Boolean) -> Boolean = { true },\n        ) : PreferenceItem<Boolean>() {\n            override val icon: ImageVector? = null\n        }\n\n        /**\n         * A [PreferenceItem] that provides a slider to select an integer number.\n         */\n        data class SliderPreference(\n            val value: Int,\n            override val title: String,\n            val valueRange: IntProgression = 0..1,\n            @IntRange(from = 0) val steps: Int = with(valueRange) { (last - first) - 1 },\n            override val subtitle: String? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: Int) -> Boolean = { true },\n        ) : PreferenceItem<Int>() {\n            override val icon: ImageVector? = null\n        }\n\n        /**\n         * A [PreferenceItem] that displays a list of entries as a dialog.\n         */\n        @Suppress(\"UNCHECKED_CAST\")\n        data class ListPreference<T>(\n            val preference: PreferenceData<T>,\n            val entries: ImmutableMap<T, String>,\n            override val title: String,\n            override val subtitle: String? = \"%s\",\n            val subtitleProvider: @Composable (value: T, entries: ImmutableMap<T, String>) -> String? =\n                { v, e -> subtitle?.format(e[v]) },\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: T) -> Boolean = { true },\n        ) : PreferenceItem<T>() {\n            internal fun internalSet(value: Any) = preference.set(value as T)\n            internal suspend fun internalOnValueChanged(value: Any) = onValueChanged(value as T)\n\n            @Composable\n            internal fun internalSubtitleProvider(value: Any?, entries: ImmutableMap<out Any?, String>) =\n                subtitleProvider(value as T, entries as ImmutableMap<T, String>)\n        }\n\n        /**\n         * [ListPreference] but with no connection to a [PreferenceData]\n         */\n        data class BasicListPreference(\n            val value: String,\n            val entries: ImmutableMap<String, String>,\n            override val title: String,\n            override val subtitle: String? = \"%s\",\n            val subtitleProvider: @Composable (value: String, entries: ImmutableMap<String, String>) -> String? =\n                { v, e -> subtitle?.format(e[v]) },\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: String) -> Boolean = { true },\n        ) : PreferenceItem<String>()\n\n        /**\n         * A [PreferenceItem] that displays a list of entries as a dialog.\n         * Multiple entries can be selected at the same time.\n         */\n        data class MultiSelectListPreference(\n            val preference: PreferenceData<Set<String>>,\n            val entries: ImmutableMap<String, String>,\n            override val title: String,\n            override val subtitle: String? = \"%s\",\n\n            val subtitleProvider: @Composable (value: Set<String>, entries: ImmutableMap<String, String>) -> String? =\n                { v, e ->\n                    val combined = remember(v, e) {\n                        v.mapNotNull { e[it] }\n                            .joinToString()\n                            .takeUnless { it.isBlank() }\n                    }\n                        ?: stringResource(MR.strings.none)\n                    subtitle?.format(combined)\n                },\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: Set<String>) -> Boolean = { true },\n        ) : PreferenceItem<Set<String>>()\n\n        /**\n         * A [PreferenceItem] that shows a EditText in the dialog.\n         */\n        data class EditTextPreference(\n            val preference: PreferenceData<String>,\n            override val title: String,\n            override val subtitle: String? = \"%s\",\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: String) -> Boolean = { true },\n        ) : PreferenceItem<String>() {\n            override val icon: ImageVector? = null\n        }\n\n        /**\n         * A [PreferenceItem] that shows a multi-line EditText in the dialog.\n         */\n        data class MultiLineEditTextPreference(\n            val preference: PreferenceData<String>,\n            val canBeBlank: Boolean = false,\n            override val title: String,\n            override val subtitle: String? = \"%s\",\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: String) -> Boolean = { true },\n        ) : PreferenceItem<String>()\n\n        /**\n         * A [PreferenceItem] for editing MPV config files.\n         * If [fileName] is not null, it will update this file in the config directory.\n         */\n        data class MPVConfPreference(\n            val preference: PreferenceData<String>,\n            val scope: CoroutineScope,\n            val context: Context,\n            val fileName: String? = null,\n            val canBeBlank: Boolean = true,\n            override val title: String,\n            override val subtitle: String? = preference.asState(scope).value\n                .lines().take(2)\n                .joinToString(\n                    separator = \"\\n\",\n                    postfix = if (preference.asState(scope).value.lines().size > 2) \"\\n...\" else \"\",\n                ),\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: String) -> Boolean = { value ->\n                if (fileName != null) {\n                    val storageManager: StorageManager = Injekt.get()\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && Environment.isExternalStorageManager()) {\n                        val inputFile = storageManager.getMPVConfigDirectory()\n                            ?.createFile(fileName)\n                        inputFile?.openFileDescriptor(context, \"rwt\")?.fileDescriptor\n                            ?.let {\n                                FileOutputStream(it).bufferedWriter().use { writer ->\n                                    writer.write(value)\n                                }\n                            }\n                        preference.set(value)\n                    }\n                }\n                true\n            },\n        ) : PreferenceItem<String>()\n\n        /**\n         * A [PreferenceItem] that shows a EditText with a subtitle in the dialog.\n         * Unlike [EditTextPreference], empty values can be set and a subtitle in the dialog can be show.\n         */\n        data class EditTextInfoPreference(\n            val preference: PreferenceData<String>,\n            val dialogSubtitle: String?,\n            val validate: (String) -> Boolean = { true },\n            val errorMessage: @Composable ((String) -> String)? = null,\n            override val title: String,\n            override val subtitle: String? = \"%s\",\n            override val icon: ImageVector? = null,\n            override val enabled: Boolean = true,\n            override val onValueChanged: suspend (value: String) -> Boolean = { true },\n        ) : PreferenceItem<String>()\n\n        /**\n         * A [PreferenceItem] for individual tracker.\n         */\n        data class TrackerPreference(\n            val tracker: Tracker,\n            val login: () -> Unit,\n            val logout: () -> Unit,\n        ) : PreferenceItem<String>() {\n            override val title: String = \"\"\n            override val enabled: Boolean = true\n            override val subtitle: String? = null\n            override val icon: ImageVector? = null\n            override val onValueChanged: suspend (value: String) -> Boolean = { true }\n        }\n\n        data class InfoPreference(\n            override val title: String,\n            override val enabled: Boolean = true,\n        ) : PreferenceItem<String>() {\n            override val subtitle: String? = null\n            override val icon: ImageVector? = null\n            override val onValueChanged: suspend (value: String) -> Boolean = { true }\n        }\n\n        data class CustomPreference(\n            override val title: String,\n            val content: @Composable () -> Unit,\n        ) : PreferenceItem<Unit>() {\n            override val enabled: Boolean = true\n            override val subtitle: String? = null\n            override val icon: ImageVector? = null\n            override val onValueChanged: suspend (value: Unit) -> Boolean = { true }\n        }\n    }\n\n    data class PreferenceGroup(\n        override val title: String,\n        override val enabled: Boolean = true,\n\n        val preferenceItems: ImmutableList<PreferenceItem<out Any>>,\n    ) : Preference()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt",
    "content": "package eu.kanade.presentation.more.settings\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.expandVertically\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.shrinkVertically\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.compositionLocalOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.structuralEqualityPolicy\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.more.settings.widget.EditTextPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.InfoWidget\nimport eu.kanade.presentation.more.settings.widget.ListPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.MultiSelectListPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding\nimport eu.kanade.presentation.more.settings.widget.PrefsVerticalPadding\nimport eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.TitleFontSize\nimport eu.kanade.presentation.more.settings.widget.TrackingPreferenceWidget\nimport kotlinx.coroutines.launch\nimport tachiyomi.presentation.core.components.BaseSliderItem\nimport tachiyomi.presentation.core.util.collectAsState\n\nval LocalPreferenceHighlighted = compositionLocalOf(structuralEqualityPolicy()) { false }\nval LocalPreferenceMinHeight = compositionLocalOf(structuralEqualityPolicy()) { 56.dp }\n\n@Composable\nfun StatusWrapper(\n    item: Preference.PreferenceItem<*>,\n    highlightKey: String?,\n    content: @Composable () -> Unit,\n) {\n    val enabled = item.enabled\n    val highlighted = item.title == highlightKey\n    AnimatedVisibility(\n        visible = enabled,\n        enter = expandVertically() + fadeIn(),\n        exit = shrinkVertically() + fadeOut(),\n        content = {\n            CompositionLocalProvider(\n                LocalPreferenceHighlighted provides highlighted,\n                content = content,\n            )\n        },\n    )\n}\n\n@Composable\ninternal fun PreferenceItem(\n    item: Preference.PreferenceItem<*>,\n    highlightKey: String?,\n) {\n    val scope = rememberCoroutineScope()\n    StatusWrapper(\n        item = item,\n        highlightKey = highlightKey,\n    ) {\n        when (item) {\n            is Preference.PreferenceItem.SwitchPreference -> {\n                val value by item.preference.collectAsState()\n                SwitchPreferenceWidget(\n                    title = item.title,\n                    subtitle = item.subtitle,\n                    icon = item.icon,\n                    checked = value,\n                    onCheckedChanged = { newValue ->\n                        scope.launch {\n                            if (item.onValueChanged(newValue)) {\n                                item.preference.set(newValue)\n                            }\n                        }\n                    },\n                )\n            }\n            is Preference.PreferenceItem.SliderPreference -> {\n                BaseSliderItem(\n                    label = item.title,\n                    value = item.value,\n                    valueRange = item.valueRange,\n                    valueText = item.subtitle.takeUnless { it.isNullOrEmpty() } ?: item.value.toString(),\n                    steps = item.steps,\n                    labelStyle = MaterialTheme.typography.titleLarge.copy(fontSize = TitleFontSize),\n                    onChange = {\n                        scope.launch {\n                            item.onValueChanged(it)\n                        }\n                    },\n                    modifier = Modifier.padding(\n                        horizontal = PrefsHorizontalPadding,\n                        vertical = PrefsVerticalPadding,\n                    ),\n                )\n            }\n            is Preference.PreferenceItem.ListPreference<*> -> {\n                val value by item.preference.collectAsState()\n                ListPreferenceWidget(\n                    value = value,\n                    title = item.title,\n                    subtitle = item.internalSubtitleProvider(value, item.entries),\n                    icon = item.icon,\n                    entries = item.entries,\n                    onValueChange = { newValue ->\n                        scope.launch {\n                            if (item.internalOnValueChanged(newValue!!)) {\n                                item.internalSet(newValue)\n                            }\n                        }\n                    },\n                )\n            }\n            is Preference.PreferenceItem.BasicListPreference -> {\n                ListPreferenceWidget(\n                    value = item.value,\n                    title = item.title,\n                    subtitle = item.subtitleProvider(item.value, item.entries),\n                    icon = item.icon,\n                    entries = item.entries,\n                    onValueChange = { scope.launch { item.onValueChanged(it) } },\n                )\n            }\n            is Preference.PreferenceItem.MultiSelectListPreference -> {\n                val values by item.preference.collectAsState()\n                MultiSelectListPreferenceWidget(\n                    preference = item,\n                    values = values,\n                    onValuesChange = { newValues ->\n                        scope.launch {\n                            if (item.onValueChanged(newValues)) {\n                                item.preference.set(newValues.toMutableSet())\n                            }\n                        }\n                    },\n                )\n            }\n            is Preference.PreferenceItem.TextPreference -> {\n                TextPreferenceWidget(\n                    title = item.title,\n                    subtitle = item.subtitle,\n                    icon = item.icon,\n                    onPreferenceClick = item.onClick,\n                )\n            }\n            is Preference.PreferenceItem.EditTextPreference -> {\n                val values by item.preference.collectAsState()\n                EditTextPreferenceWidget(\n                    title = item.title,\n                    subtitle = item.subtitle,\n                    icon = item.icon,\n                    value = values,\n                    onConfirm = {\n                        val accepted = item.onValueChanged(it)\n                        if (accepted) item.preference.set(it)\n                        accepted\n                    },\n                )\n            }\n            is Preference.PreferenceItem.MultiLineEditTextPreference -> {\n                val values by item.preference.collectAsState()\n                EditTextPreferenceWidget(\n                    title = item.title,\n                    subtitle = item.subtitle,\n                    icon = item.icon,\n                    value = values,\n                    onConfirm = {\n                        val accepted = item.onValueChanged(it)\n                        if (accepted) item.preference.set(it)\n                        accepted\n                    },\n                    singleLine = false,\n                    canBeBlank = item.canBeBlank,\n                )\n            }\n            is Preference.PreferenceItem.MPVConfPreference -> {\n                val values by item.preference.collectAsState()\n                EditTextPreferenceWidget(\n                    title = item.title,\n                    subtitle = item.subtitle,\n                    icon = item.icon,\n                    value = values,\n                    onConfirm = {\n                        val accepted = item.onValueChanged(it)\n                        if (accepted) item.preference.set(it)\n                        accepted\n                    },\n                    singleLine = false,\n                    canBeBlank = item.canBeBlank,\n                    formatSubtitle = false,\n                )\n            }\n            is Preference.PreferenceItem.EditTextInfoPreference -> {\n                val values by item.preference.collectAsState()\n                EditTextPreferenceWidget(\n                    title = item.title,\n                    subtitle = item.subtitle,\n                    dialogSubtitle = item.dialogSubtitle,\n                    icon = item.icon,\n                    value = values,\n                    onConfirm = {\n                        val accepted = item.onValueChanged(it)\n                        if (accepted) item.preference.set(it)\n                        accepted\n                    },\n                    singleLine = true,\n                    canBeBlank = true,\n                    validate = item.validate,\n                    errorMessage = item.errorMessage,\n                )\n            }\n            is Preference.PreferenceItem.TrackerPreference -> {\n                val isLoggedIn by item.tracker.let { tracker ->\n                    tracker.isLoggedInFlow.collectAsState(tracker.isLoggedIn)\n                }\n                TrackingPreferenceWidget(\n                    tracker = item.tracker,\n                    checked = isLoggedIn,\n                    onClick = { if (isLoggedIn) item.logout() else item.login() },\n                )\n            }\n            is Preference.PreferenceItem.InfoPreference -> {\n                InfoWidget(text = item.title)\n            }\n            is Preference.PreferenceItem.CustomPreference -> {\n                item.content()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt",
    "content": "package eu.kanade.presentation.more.settings\n\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.runtime.Composable\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.components.AppBar\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun PreferenceScaffold(\n    titleRes: StringResource,\n    actions: @Composable RowScope.() -> Unit = {},\n    onBackPressed: (() -> Unit)? = null,\n    itemsProvider: @Composable () -> List<Preference>,\n) {\n    Scaffold(\n        topBar = {\n            AppBar(\n                title = stringResource(titleRes),\n                navigateUp = onBackPressed,\n                actions = actions,\n                scrollBehavior = it,\n            )\n        },\n        content = { contentPadding ->\n            PreferenceScreen(\n                items = itemsProvider(),\n                contentPadding = contentPadding,\n            )\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScreen.kt",
    "content": "package eu.kanade.presentation.more.settings\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastForEachIndexed\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.presentation.more.settings.widget.PreferenceGroupHeader\nimport kotlinx.coroutines.delay\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * Preference Screen composable which contains a list of [Preference] items\n * @param items [Preference] items which should be displayed on the preference screen. An item can be a single [PreferenceItem] or a group ([Preference.PreferenceGroup])\n * @param modifier [Modifier] to be applied to the preferenceScreen layout\n */\n@Composable\nfun PreferenceScreen(\n    items: List<Preference>,\n    modifier: Modifier = Modifier,\n    contentPadding: PaddingValues = PaddingValues(0.dp),\n) {\n    val state = rememberLazyListState()\n    val highlightKey = SearchableSettings.highlightKey\n    if (highlightKey != null) {\n        LaunchedEffect(Unit) {\n            val i = items.findHighlightedIndex(highlightKey)\n            if (i >= 0) {\n                delay(0.5.seconds)\n                state.animateScrollToItem(i)\n            }\n            SearchableSettings.highlightKey = null\n        }\n    }\n\n    ScrollbarLazyColumn(\n        modifier = modifier,\n        state = state,\n        contentPadding = contentPadding,\n    ) {\n        items.fastForEachIndexed { i, preference ->\n            when (preference) {\n                // Create Preference Group\n                is Preference.PreferenceGroup -> {\n                    if (!preference.enabled) return@fastForEachIndexed\n\n                    item {\n                        Column {\n                            PreferenceGroupHeader(title = preference.title)\n                        }\n                    }\n                    items(preference.preferenceItems) { item ->\n                        PreferenceItem(\n                            item = item,\n                            highlightKey = highlightKey,\n                        )\n                    }\n                    item {\n                        if (i < items.lastIndex) {\n                            Spacer(modifier = Modifier.height(12.dp))\n                        }\n                    }\n                }\n\n                // Create Preference Item\n                is Preference.PreferenceItem<*> -> item {\n                    PreferenceItem(\n                        item = preference,\n                        highlightKey = highlightKey,\n                    )\n                }\n            }\n        }\n    }\n}\n\nprivate fun List<Preference>.findHighlightedIndex(highlightKey: String): Int {\n    return flatMap {\n        if (it is Preference.PreferenceGroup) {\n            buildList<String?> {\n                add(null) // Header\n                addAll(it.preferenceItems.map { groupItem -> groupItem.title })\n                add(null) // Spacer\n            }\n        } else {\n            listOf(it.title)\n        }\n    }.indexOfFirst { it == highlightKey }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.category.visualName\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n/**\n * Returns a string of categories name for settings subtitle\n */\n@ReadOnlyComposable\n@Composable\nfun getCategoriesLabel(\n    allCategories: List<Category>,\n    included: Set<String>,\n    excluded: Set<String>,\n): String {\n    val context = LocalContext.current\n\n    val includedCategories = included\n        .mapNotNull { id -> allCategories.find { it.id == id.toLong() } }\n        .sortedBy { it.order }\n    val excludedCategories = excluded\n        .mapNotNull { id -> allCategories.find { it.id == id.toLong() } }\n        .sortedBy { it.order }\n    val allExcluded = excludedCategories.size == allCategories.size\n\n    val includedItemsText = when {\n        // Some selected, but not all\n        includedCategories.isNotEmpty() &&\n            includedCategories.size != allCategories.size ->\n            includedCategories.joinToString {\n                it.visualName(\n                    context,\n                )\n            }\n        // All explicitly selected\n        includedCategories.size == allCategories.size -> stringResource(MR.strings.all)\n        allExcluded -> stringResource(MR.strings.none)\n        else -> stringResource(MR.strings.all)\n    }\n    val excludedItemsText = when {\n        excludedCategories.isEmpty() -> stringResource(MR.strings.none)\n        allExcluded -> stringResource(MR.strings.all)\n        else -> excludedCategories.joinToString { it.visualName(context) }\n    }\n    return stringResource(MR.strings.include, includedItemsText) + \"\\n\" +\n        stringResource(MR.strings.exclude, excludedItemsText)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SearchableSettings.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport cafe.adriel.voyager.core.screen.Screen\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.PreferenceScaffold\nimport eu.kanade.presentation.util.LocalBackPress\n\ninterface SearchableSettings : Screen {\n\n    @Composable\n    @ReadOnlyComposable\n    fun getTitleRes(): StringResource\n\n    @Composable\n    fun getPreferences(): List<Preference>\n\n    @Composable\n    fun RowScope.AppBarAction() {\n    }\n\n    @Composable\n    override fun Content() {\n        val handleBack = LocalBackPress.current\n        PreferenceScaffold(\n            titleRes = getTitleRes(),\n            onBackPressed = if (handleBack != null) handleBack::invoke else null,\n            actions = { AppBarAction() },\n            itemsProvider = { getPreferences() },\n        )\n    }\n\n    companion object {\n        // HACK: for the background blipping thingy.\n        // The title of the target PreferenceItem\n        // Set before showing the destination screen and reset after\n        // See BasePreferenceWidget.highlightBackground\n        var highlightKey: String? = null\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport android.annotation.SuppressLint\nimport android.content.ActivityNotFoundException\nimport android.content.Intent\nimport android.provider.Settings\nimport android.webkit.WebStorage\nimport android.webkit.WebView\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\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.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.core.net.toUri\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.extension.anime.interactor.TrustAnimeExtension\nimport eu.kanade.domain.extension.manga.interactor.TrustMangaExtension\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.source.service.SourcePreferences.DataSaver\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.advanced.ClearAnimeDatabaseScreen\nimport eu.kanade.presentation.more.settings.screen.advanced.ClearDatabaseScreen\nimport eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.anime.AnimeMetadataUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaMetadataUpdateJob\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.NetworkPreferences\nimport eu.kanade.tachiyomi.network.PREF_DOH_360\nimport eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD\nimport eu.kanade.tachiyomi.network.PREF_DOH_ALIDNS\nimport eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE\nimport eu.kanade.tachiyomi.network.PREF_DOH_CONTROLD\nimport eu.kanade.tachiyomi.network.PREF_DOH_DNSPOD\nimport eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE\nimport eu.kanade.tachiyomi.network.PREF_DOH_LIBREDNS\nimport eu.kanade.tachiyomi.network.PREF_DOH_MULLVAD\nimport eu.kanade.tachiyomi.network.PREF_DOH_NJALLA\nimport eu.kanade.tachiyomi.network.PREF_DOH_QUAD101\nimport eu.kanade.tachiyomi.network.PREF_DOH_QUAD9\nimport eu.kanade.tachiyomi.network.PREF_DOH_SHECAN\nimport eu.kanade.tachiyomi.ui.more.OnboardingScreen\nimport eu.kanade.tachiyomi.util.CrashLogUtil\nimport eu.kanade.tachiyomi.util.system.GLUtil\nimport eu.kanade.tachiyomi.util.system.isReleaseBuildType\nimport eu.kanade.tachiyomi.util.system.isShizukuInstalled\nimport eu.kanade.tachiyomi.util.system.powerManager\nimport eu.kanade.tachiyomi.util.system.setDefaultSettings\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableMap\nimport kotlinx.collections.immutable.toPersistentMap\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport okhttp3.Headers\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.interactor.ResetMangaViewerFlags\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\n\nobject SettingsAdvancedScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.pref_category_advanced\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val scope = rememberCoroutineScope()\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val basePreferences = remember { Injekt.get<BasePreferences>() }\n        val networkPreferences = remember { Injekt.get<NetworkPreferences>() }\n\n        return listOf(\n            Preference.PreferenceItem.TextPreference(\n                title = stringResource(MR.strings.pref_dump_crash_logs),\n                subtitle = stringResource(MR.strings.pref_dump_crash_logs_summary),\n                onClick = {\n                    scope.launch {\n                        CrashLogUtil(context).dumpLogs()\n                    }\n                },\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = networkPreferences.verboseLogging(),\n                title = stringResource(MR.strings.pref_verbose_logging),\n                subtitle = stringResource(MR.strings.pref_verbose_logging_summary),\n                onValueChanged = {\n                    context.toast(MR.strings.requires_app_restart)\n                    true\n                },\n            ),\n            Preference.PreferenceItem.TextPreference(\n                title = stringResource(MR.strings.pref_debug_info),\n                onClick = { navigator.push(DebugInfoScreen()) },\n            ),\n            Preference.PreferenceItem.TextPreference(\n                title = stringResource(MR.strings.pref_onboarding_guide),\n                onClick = { navigator.push(OnboardingScreen()) },\n            ),\n            Preference.PreferenceItem.TextPreference(\n                title = stringResource(MR.strings.pref_manage_notifications),\n                onClick = {\n                    val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {\n                        putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)\n                    }\n                    context.startActivity(intent)\n                },\n            ),\n            getBackgroundActivityGroup(),\n            getDataGroup(),\n            getNetworkGroup(networkPreferences = networkPreferences),\n            getLibraryGroup(),\n            getReaderGroup(basePreferences = basePreferences),\n            getExtensionsGroup(basePreferences = basePreferences),\n            // SY -->\n            getDataSaverGroup(),\n            // SY <--\n        )\n    }\n\n    @Composable\n    private fun getBackgroundActivityGroup(): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val uriHandler = LocalUriHandler.current\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.label_background_activity),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_disable_battery_optimization),\n                    subtitle = stringResource(MR.strings.pref_disable_battery_optimization_summary),\n                    onClick = {\n                        val packageName: String = context.packageName\n                        if (!context.powerManager.isIgnoringBatteryOptimizations(packageName)) {\n                            try {\n                                @SuppressLint(\"BatteryLife\")\n                                val intent = Intent().apply {\n                                    action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\n                                    data = \"package:$packageName\".toUri()\n                                    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                                }\n                                context.startActivity(intent)\n                            } catch (e: ActivityNotFoundException) {\n                                context.toast(MR.strings.battery_optimization_setting_activity_not_found)\n                            }\n                        } else {\n                            context.toast(MR.strings.battery_optimization_disabled)\n                        }\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = \"Don't kill my app!\",\n                    subtitle = stringResource(MR.strings.about_dont_kill_my_app),\n                    onClick = { uriHandler.openUri(\"https://dontkillmyapp.com/\") },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDataGroup(): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.label_data),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_invalidate_download_cache),\n                    subtitle = stringResource(AYMR.strings.pref_invalidate_download_cache_summary),\n                    onClick = {\n                        Injekt.get<MangaDownloadCache>().invalidateCache()\n                        Injekt.get<AnimeDownloadCache>().invalidateCache()\n                        context.toast(MR.strings.download_cache_invalidated)\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.pref_clear_manga_database),\n                    subtitle = stringResource(AYMR.strings.pref_clear_manga_database_summary),\n                    onClick = { navigator.push(ClearDatabaseScreen()) },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.pref_clear_anime_database),\n                    subtitle = stringResource(AYMR.strings.pref_clear_anime_database_summary),\n                    onClick = { navigator.push(ClearAnimeDatabaseScreen()) },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getNetworkGroup(\n        networkPreferences: NetworkPreferences,\n    ): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val networkHelper = remember { Injekt.get<NetworkHelper>() }\n\n        val userAgentPref = networkPreferences.defaultUserAgent()\n        val userAgent by userAgentPref.collectAsState()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.label_network),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_clear_cookies),\n                    onClick = {\n                        networkHelper.cookieJar.removeAll()\n                        context.toast(MR.strings.cookies_cleared)\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_clear_webview_data),\n                    onClick = {\n                        try {\n                            WebView(context).run {\n                                setDefaultSettings()\n                                clearCache(true)\n                                clearFormData()\n                                clearHistory()\n                                clearSslPreferences()\n                            }\n                            WebStorage.getInstance().deleteAllData()\n                            context.applicationInfo?.dataDir?.let { File(\"$it/app_webview/\").deleteRecursively() }\n                            context.toast(MR.strings.webview_data_deleted)\n                        } catch (e: Throwable) {\n                            logcat(LogPriority.ERROR, e)\n                            context.toast(MR.strings.cache_delete_error)\n                        }\n                    },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = networkPreferences.dohProvider(),\n                    entries = persistentMapOf(\n                        -1 to stringResource(MR.strings.disabled),\n                        PREF_DOH_CLOUDFLARE to \"Cloudflare\",\n                        PREF_DOH_GOOGLE to \"Google\",\n                        PREF_DOH_ADGUARD to \"AdGuard\",\n                        PREF_DOH_QUAD9 to \"Quad9\",\n                        PREF_DOH_ALIDNS to \"AliDNS\",\n                        PREF_DOH_DNSPOD to \"DNSPod\",\n                        PREF_DOH_360 to \"360\",\n                        PREF_DOH_QUAD101 to \"Quad 101\",\n                        PREF_DOH_MULLVAD to \"Mullvad\",\n                        PREF_DOH_CONTROLD to \"Control D\",\n                        PREF_DOH_NJALLA to \"Njalla\",\n                        PREF_DOH_SHECAN to \"Shecan\",\n                        PREF_DOH_LIBREDNS to \"LibreDNS\",\n                    ),\n                    title = stringResource(MR.strings.pref_dns_over_https),\n                    onValueChanged = {\n                        context.toast(MR.strings.requires_app_restart)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.EditTextPreference(\n                    preference = userAgentPref,\n                    title = stringResource(MR.strings.pref_user_agent_string),\n                    onValueChanged = {\n                        try {\n                            // OkHttp checks for valid values internally\n                            Headers.Builder().add(\"User-Agent\", it)\n                            context.toast(MR.strings.requires_app_restart)\n                        } catch (_: IllegalArgumentException) {\n                            context.toast(MR.strings.error_user_agent_string_invalid)\n                            return@EditTextPreference false\n                        }\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_reset_user_agent_string),\n                    enabled = remember(userAgent) { userAgent != userAgentPref.defaultValue() },\n                    onClick = {\n                        userAgentPref.delete()\n                        context.toast(MR.strings.requires_app_restart)\n                    },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getLibraryGroup(): Preference.PreferenceGroup {\n        val scope = rememberCoroutineScope()\n        val context = LocalContext.current\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.label_library),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_refresh_library_covers),\n                    onClick = {\n                        AnimeLibraryUpdateJob.startNow(context)\n                        MangaLibraryUpdateJob.startNow(context)\n                        AnimeMetadataUpdateJob.startNow(context)\n                        MangaMetadataUpdateJob.startNow(context)\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_reset_viewer_flags),\n                    subtitle = stringResource(MR.strings.pref_reset_viewer_flags_summary),\n                    onClick = {\n                        scope.launchNonCancellable {\n                            val success = Injekt.get<ResetMangaViewerFlags>().await()\n                            withUIContext {\n                                val message = if (success) {\n                                    MR.strings.pref_reset_viewer_flags_success\n                                } else {\n                                    MR.strings.pref_reset_viewer_flags_error\n                                }\n                                context.toast(message)\n                            }\n                        }\n                    },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getReaderGroup(\n        basePreferences: BasePreferences,\n    ): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val chooseColorProfile = rememberLauncherForActivityResult(\n            contract = ActivityResultContracts.OpenDocument(),\n        ) { uri ->\n            uri?.let {\n                val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION\n                context.contentResolver.takePersistableUriPermission(uri, flags)\n                basePreferences.displayProfile().set(uri.toString())\n            }\n        }\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_reader),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = basePreferences.hardwareBitmapThreshold(),\n                    entries = GLUtil.CUSTOM_TEXTURE_LIMIT_OPTIONS\n                        .mapIndexed { index, option ->\n                            val display = if (index == 0) {\n                                stringResource(MR.strings.pref_hardware_bitmap_threshold_default, option)\n                            } else {\n                                option.toString()\n                            }\n                            option to display\n                        }\n                        .toMap()\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_hardware_bitmap_threshold),\n                    subtitleProvider = { value, options ->\n                        stringResource(MR.strings.pref_hardware_bitmap_threshold_summary, options[value].orEmpty())\n                    },\n                    enabled = !ImageUtil.HARDWARE_BITMAP_UNSUPPORTED &&\n                        GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = basePreferences.alwaysDecodeLongStripWithSSIV(),\n                    title = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv_2),\n                    subtitle = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv_summary),\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_display_profile),\n                    subtitle = basePreferences.displayProfile().get(),\n                    onClick = {\n                        chooseColorProfile.launch(arrayOf(\"*/*\"))\n                    },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getExtensionsGroup(\n        basePreferences: BasePreferences,\n    ): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val uriHandler = LocalUriHandler.current\n        val extensionInstallerPref = basePreferences.extensionInstaller()\n        var shizukuMissing by rememberSaveable { mutableStateOf(false) }\n        val trustAnimeExtension = remember { Injekt.get<TrustAnimeExtension>() }\n        val trustMangaExtension = remember { Injekt.get<TrustMangaExtension>() }\n\n        if (shizukuMissing) {\n            val dismiss = { shizukuMissing = false }\n            AlertDialog(\n                onDismissRequest = dismiss,\n                title = { Text(text = stringResource(MR.strings.ext_installer_shizuku)) },\n                text = {\n                    Text(\n                        text = stringResource(MR.strings.ext_installer_shizuku_unavailable_dialog),\n                    )\n                },\n                dismissButton = {\n                    TextButton(onClick = dismiss) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                },\n                confirmButton = {\n                    TextButton(\n                        onClick = {\n                            dismiss()\n                            uriHandler.openUri(\"https://shizuku.rikka.app/download\")\n                        },\n                    ) {\n                        Text(text = stringResource(MR.strings.action_ok))\n                    }\n                },\n            )\n        }\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.label_extensions),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = extensionInstallerPref,\n                    entries = extensionInstallerPref.entries\n                        .filter {\n                            // TODO: allow private option in stable versions once URL handling is more fleshed out\n                            if (isReleaseBuildType) {\n                                it != BasePreferences.ExtensionInstaller.PRIVATE\n                            } else {\n                                true\n                            }\n                        }\n                        .associateWith { stringResource(it.titleRes) }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.ext_installer_pref),\n                    onValueChanged = {\n                        if (it == BasePreferences.ExtensionInstaller.SHIZUKU &&\n                            !context.isShizukuInstalled\n                        ) {\n                            shizukuMissing = true\n                            false\n                        } else {\n                            true\n                        }\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.ext_revoke_trust),\n                    onClick = {\n                        trustMangaExtension.revokeAll()\n                        trustAnimeExtension.revokeAll()\n                        context.toast(MR.strings.requires_app_restart)\n                    },\n                ),\n            ),\n        )\n    }\n\n    // SY -->\n    @Composable\n    private fun getDataSaverGroup(): Preference.PreferenceGroup {\n        val sourcePreferences = remember { Injekt.get<SourcePreferences>() }\n        val dataSaver by sourcePreferences.dataSaver().collectAsState()\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.data_saver),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = sourcePreferences.dataSaver(),\n                    entries = persistentMapOf(\n                        DataSaver.NONE to stringResource(MR.strings.disabled),\n                        DataSaver.BANDWIDTH_HERO to stringResource(AYMR.strings.bandwidth_hero),\n                        DataSaver.WSRV_NL to stringResource(AYMR.strings.wsrv),\n                        DataSaver.RESMUSH_IT to stringResource(AYMR.strings.resmush),\n                    ),\n                    title = stringResource(AYMR.strings.data_saver),\n                    subtitle = stringResource(AYMR.strings.data_saver_summary),\n                ),\n                Preference.PreferenceItem.EditTextPreference(\n                    preference = sourcePreferences.dataSaverServer(),\n                    title = stringResource(AYMR.strings.bandwidth_data_saver_server),\n                    subtitle = stringResource(AYMR.strings.data_saver_server_summary),\n                    enabled = dataSaver == DataSaver.BANDWIDTH_HERO,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = sourcePreferences.dataSaverDownloader(),\n                    title = stringResource(AYMR.strings.data_saver_downloader),\n                    enabled = dataSaver != DataSaver.NONE,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = sourcePreferences.dataSaverIgnoreJpeg(),\n                    title = stringResource(AYMR.strings.data_saver_ignore_jpeg),\n                    enabled = dataSaver != DataSaver.NONE,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = sourcePreferences.dataSaverIgnoreGif(),\n                    title = stringResource(AYMR.strings.data_saver_ignore_gif),\n                    enabled = dataSaver != DataSaver.NONE,\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = sourcePreferences.dataSaverImageQuality(),\n                    entries = listOf(\n                        \"10%\",\n                        \"20%\",\n                        \"40%\",\n                        \"50%\",\n                        \"70%\",\n                        \"80%\",\n                        \"90%\",\n                        \"95%\",\n                    ).associateBy { it.trimEnd('%').toInt() }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.data_saver_image_quality),\n                    subtitle = stringResource(AYMR.strings.data_saver_image_quality_summary),\n                    enabled = dataSaver != DataSaver.NONE,\n                ),\n                kotlin.run {\n                    val dataSaverImageFormatJpeg by sourcePreferences.dataSaverImageFormatJpeg().collectAsState()\n                    Preference.PreferenceItem.SwitchPreference(\n                        preference = sourcePreferences.dataSaverImageFormatJpeg(),\n                        title = stringResource(AYMR.strings.data_saver_image_format),\n                        subtitle = if (dataSaverImageFormatJpeg) {\n                            stringResource(AYMR.strings.data_saver_image_format_summary_on)\n                        } else {\n                            stringResource(AYMR.strings.data_saver_image_format_summary_off)\n                        },\n                        enabled = dataSaver != DataSaver.NONE && dataSaver != DataSaver.RESMUSH_IT,\n                    )\n                },\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = sourcePreferences.dataSaverColorBW(),\n                    title = stringResource(AYMR.strings.data_saver_color_bw),\n                    enabled = dataSaver == DataSaver.BANDWIDTH_HERO,\n                ),\n            ),\n        )\n    }\n    // SY <--\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport android.app.Activity\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.core.app.ActivityCompat\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.domain.ui.model.StartScreen\nimport eu.kanade.domain.ui.model.TabletUiMode\nimport eu.kanade.domain.ui.model.ThemeMode\nimport eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.appearance.AppLanguageScreen\nimport eu.kanade.presentation.more.settings.widget.AppThemeModePreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableMap\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.LocalDate\n\nobject SettingsAppearanceScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.pref_category_appearance\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val uiPreferences = remember { Injekt.get<UiPreferences>() }\n\n        return listOf(\n            getThemeGroup(uiPreferences = uiPreferences),\n            getDisplayGroup(uiPreferences = uiPreferences),\n        )\n    }\n\n    @Composable\n    private fun getThemeGroup(\n        uiPreferences: UiPreferences,\n    ): Preference.PreferenceGroup {\n        val context = LocalContext.current\n\n        val themeModePref = uiPreferences.themeMode()\n        val themeMode by themeModePref.collectAsState()\n\n        val appThemePref = uiPreferences.appTheme()\n        val appTheme by appThemePref.collectAsState()\n\n        val amoledPref = uiPreferences.themeDarkAmoled()\n        val amoled by amoledPref.collectAsState()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_theme),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.CustomPreference(\n                    title = stringResource(MR.strings.pref_app_theme),\n                ) {\n                    Column {\n                        AppThemeModePreferenceWidget(\n                            value = themeMode,\n                            onItemClick = {\n                                themeModePref.set(it)\n                                setAppCompatDelegateThemeMode(it)\n                            },\n                        )\n\n                        AppThemePreferenceWidget(\n                            value = appTheme,\n                            amoled = amoled,\n                            onItemClick = { appThemePref.set(it) },\n                        )\n                    }\n                },\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = amoledPref,\n                    title = stringResource(MR.strings.pref_dark_theme_pure_black),\n                    enabled = themeMode != ThemeMode.LIGHT,\n                    onValueChanged = {\n                        (context as? Activity)?.let { ActivityCompat.recreate(it) }\n                        true\n                    },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDisplayGroup(\n        uiPreferences: UiPreferences,\n    ): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val now = remember { LocalDate.now() }\n\n        val dateFormat by uiPreferences.dateFormat().collectAsState()\n        val formattedNow = remember(dateFormat) {\n            UiPreferences.dateFormat(dateFormat).format(now)\n        }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_display),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.pref_app_language),\n                    onClick = { navigator.push(AppLanguageScreen()) },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = uiPreferences.tabletUiMode(),\n                    entries = TabletUiMode.entries\n                        .associateWith { stringResource(it.titleRes) }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_tablet_ui_mode),\n                    onValueChanged = {\n                        context.toast(MR.strings.requires_app_restart)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = uiPreferences.startScreen(),\n                    entries = StartScreen.entries\n                        .associateWith { stringResource(it.titleRes) }\n                        .toImmutableMap(),\n                    title = stringResource(AYMR.strings.pref_start_screen),\n                    onValueChanged = {\n                        context.toast(MR.strings.requires_app_restart)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = uiPreferences.navStyle(),\n                    entries = NavStyle.entries\n                        .associateWith { stringResource(it.titleRes) }\n                        .toImmutableMap(),\n                    title = \"Navigation Style\",\n                    onValueChanged = { true },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = uiPreferences.dateFormat(),\n                    entries = DateFormats\n                        .associateWith {\n                            val formattedDate = UiPreferences.dateFormat(it).format(now)\n                            \"${it.ifEmpty { stringResource(MR.strings.label_default) }} ($formattedDate)\"\n                        }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_date_format),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = uiPreferences.relativeTime(),\n                    title = stringResource(MR.strings.pref_relative_format),\n                    subtitle = stringResource(\n                        MR.strings.pref_relative_format_summary,\n                        stringResource(MR.strings.relative_time_today),\n                        formattedNow,\n                    ),\n                ),\n            ),\n        )\n    }\n}\n\nprivate val DateFormats = listOf(\n    \"\", // Default\n    \"MM/dd/yy\",\n    \"dd/MM/yy\",\n    \"yyyy-MM-dd\",\n    \"dd MMM yyyy\",\n    \"MMM dd, yyyy\",\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.fragment.app.FragmentActivity\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.browse.AnimeExtensionReposScreen\nimport eu.kanade.presentation.more.settings.screen.browse.MangaExtensionReposScreen\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate\nimport kotlinx.collections.immutable.persistentListOf\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepoCount\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepoCount\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject SettingsBrowseScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.browse\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val sourcePreferences = remember { Injekt.get<SourcePreferences>() }\n        val getMangaExtensionRepoCount = remember { Injekt.get<GetMangaExtensionRepoCount>() }\n        val getAnimeExtensionRepoCount = remember { Injekt.get<GetAnimeExtensionRepoCount>() }\n\n        val mangaReposCount by getMangaExtensionRepoCount.subscribe().collectAsState(0)\n        val animeReposCount by getAnimeExtensionRepoCount.subscribe().collectAsState(0)\n\n        return listOf(\n            Preference.PreferenceGroup(\n                title = stringResource(MR.strings.label_sources),\n                preferenceItems = persistentListOf(\n                    Preference.PreferenceItem.SwitchPreference(\n                        preference = sourcePreferences.hideInAnimeLibraryItems(),\n                        title = stringResource(AYMR.strings.pref_hide_in_anime_library_items),\n                    ),\n                    Preference.PreferenceItem.SwitchPreference(\n                        preference = sourcePreferences.hideInMangaLibraryItems(),\n                        title = stringResource(AYMR.strings.pref_hide_in_manga_library_items),\n                    ),\n                    Preference.PreferenceItem.TextPreference(\n                        title = stringResource(AYMR.strings.label_anime_extension_repos),\n                        subtitle = pluralStringResource(\n                            MR.plurals.num_repos,\n                            animeReposCount,\n                            animeReposCount,\n                        ),\n                        onClick = {\n                            navigator.push(AnimeExtensionReposScreen())\n                        },\n                    ),\n                    Preference.PreferenceItem.TextPreference(\n                        title = stringResource(AYMR.strings.label_manga_extension_repos),\n                        subtitle = pluralStringResource(\n                            MR.plurals.num_repos,\n                            mangaReposCount,\n                            mangaReposCount,\n                        ),\n                        onClick = {\n                            navigator.push(MangaExtensionReposScreen())\n                        },\n                    ),\n                ),\n            ),\n            Preference.PreferenceGroup(\n                title = stringResource(MR.strings.pref_category_nsfw_content),\n                preferenceItems = persistentListOf(\n                    Preference.PreferenceItem.SwitchPreference(\n                        preference = sourcePreferences.showNsfwSource(),\n                        title = stringResource(MR.strings.pref_show_nsfw_source),\n                        subtitle = stringResource(MR.strings.requires_app_restart),\n                        onValueChanged = {\n                            (context as FragmentActivity).authenticate(\n                                title = context.stringResource(MR.strings.pref_category_nsfw_content),\n                            )\n                        },\n                    ),\n                    Preference.PreferenceItem.InfoPreference(\n                        stringResource(MR.strings.parental_controls_info),\n                    ),\n                ),\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport android.content.ActivityNotFoundException\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport androidx.activity.compose.ManagedActivityResultLauncher\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.IntrinsicSize\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.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material.icons.outlined.Storage\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MultiChoiceSegmentedButtonRow\nimport androidx.compose.material3.SegmentedButton\nimport androidx.compose.material3.SegmentedButtonDefaults\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.core.net.toUri\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport com.hippo.unifile.UniFile\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.data.CreateBackupScreen\nimport eu.kanade.presentation.more.settings.screen.data.RestoreBackupScreen\nimport eu.kanade.presentation.more.settings.screen.data.StorageInfo\nimport eu.kanade.presentation.more.settings.widget.BasePreferenceWidget\nimport eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding\nimport eu.kanade.presentation.util.relativeTimeSpanString\nimport eu.kanade.tachiyomi.data.backup.create.BackupCreateJob\nimport eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob\nimport eu.kanade.tachiyomi.data.cache.ChapterCache\nimport eu.kanade.tachiyomi.data.export.ExportEntry\nimport eu.kanade.tachiyomi.data.export.ExportEntry.Companion.toExportEntry\nimport eu.kanade.tachiyomi.data.export.LibraryExporter\nimport eu.kanade.tachiyomi.data.export.LibraryExporter.ExportOptions\nimport eu.kanade.tachiyomi.ui.storage.StorageTab\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.displayablePath\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.backup.service.BackupPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeFavorites\nimport tachiyomi.domain.entries.manga.interactor.GetMangaFavorites\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.storage.service.StoragePreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.TextButton\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject SettingsDataScreen : SearchableSettings {\n\n    val restorePreferenceKeyString = MR.strings.label_backup\n    const val HELP_URL = \"https://aniyomi.org/docs/faq/storage\"\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.label_data_storage\n\n    @Composable\n    override fun RowScope.AppBarAction() {\n        val uriHandler = LocalUriHandler.current\n        IconButton(onClick = { uriHandler.openUri(HELP_URL) }) {\n            Icon(\n                imageVector = Icons.AutoMirrored.Outlined.HelpOutline,\n                contentDescription = stringResource(MR.strings.tracking_guide),\n            )\n        }\n    }\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val backupPreferences = Injekt.get<BackupPreferences>()\n        val storagePreferences = Injekt.get<StoragePreferences>()\n\n        return persistentListOf(\n            getStorageLocationPref(storagePreferences = storagePreferences),\n            Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.pref_storage_location_info)),\n\n            getBackupAndRestoreGroup(backupPreferences = backupPreferences),\n            getDataGroup(),\n            getExportGroup(),\n        )\n    }\n\n    @Composable\n    fun storageLocationPicker(\n        storageDirPref: tachiyomi.core.common.preference.Preference<String>,\n    ): ManagedActivityResultLauncher<Uri?, Uri?> {\n        val context = LocalContext.current\n\n        return rememberLauncherForActivityResult(\n            contract = ActivityResultContracts.OpenDocumentTree(),\n        ) { uri ->\n            if (uri != null) {\n                val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or\n                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION\n\n                // For some reason InkBook devices do not implement the SAF properly. Persistable URI grants do not\n                // work. However, simply retrieving the URI and using it works fine for these devices. Access is not\n                // revoked after the app is closed or the device is restarted.\n                // This also holds for some Samsung devices. Thus, we simply execute inside of a try-catch block and\n                // ignore the exception if it is thrown.\n                try {\n                    context.contentResolver.takePersistableUriPermission(uri, flags)\n                } catch (e: SecurityException) {\n                    logcat(LogPriority.ERROR, e)\n                    context.toast(MR.strings.file_picker_uri_permission_unsupported)\n                }\n\n                UniFile.fromUri(context, uri)?.let {\n                    storageDirPref.set(it.uri.toString())\n                }\n            }\n        }\n    }\n\n    @Composable\n    fun storageLocationText(\n        storageDirPref: tachiyomi.core.common.preference.Preference<String>,\n    ): String {\n        val context = LocalContext.current\n        val storageDir by storageDirPref.collectAsState()\n\n        if (!storageDirPref.isSet()) {\n            return stringResource(MR.strings.no_location_set)\n        }\n\n        return remember(storageDir) {\n            val file = UniFile.fromUri(context, storageDir.toUri())\n            file?.displayablePath\n        } ?: stringResource(MR.strings.invalid_location, storageDir)\n    }\n\n    @Composable\n    private fun getStorageLocationPref(\n        storagePreferences: StoragePreferences,\n    ): Preference.PreferenceItem.TextPreference {\n        val context = LocalContext.current\n        val pickStorageLocation = storageLocationPicker(storagePreferences.baseStorageDirectory())\n\n        return Preference.PreferenceItem.TextPreference(\n            title = stringResource(MR.strings.pref_storage_location),\n            subtitle = storageLocationText(storagePreferences.baseStorageDirectory()),\n            onClick = {\n                try {\n                    pickStorageLocation.launch(null)\n                } catch (e: ActivityNotFoundException) {\n                    context.toast(MR.strings.file_picker_error)\n                }\n            },\n        )\n    }\n\n    @Composable\n    private fun getBackupAndRestoreGroup(backupPreferences: BackupPreferences): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState()\n\n        val chooseBackup = rememberLauncherForActivityResult(\n            object : ActivityResultContracts.GetContent() {\n                override fun createIntent(context: Context, input: String): Intent {\n                    val intent = super.createIntent(context, input)\n                    return Intent.createChooser(intent, context.stringResource(MR.strings.file_select_backup))\n                }\n            },\n        ) {\n            if (it == null) {\n                context.toast(MR.strings.file_null_uri_error)\n                return@rememberLauncherForActivityResult\n            }\n\n            navigator.push(RestoreBackupScreen(it.toString()))\n        }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.label_backup),\n            preferenceItems = persistentListOf(\n                // Manual actions\n                Preference.PreferenceItem.CustomPreference(\n                    title = stringResource(restorePreferenceKeyString),\n                ) {\n                    BasePreferenceWidget(\n                        subcomponent = {\n                            MultiChoiceSegmentedButtonRow(\n                                modifier = Modifier\n                                    .fillMaxWidth()\n                                    .height(intrinsicSize = IntrinsicSize.Min)\n                                    .padding(horizontal = PrefsHorizontalPadding),\n                            ) {\n                                SegmentedButton(\n                                    modifier = Modifier.fillMaxHeight(),\n                                    checked = false,\n                                    onCheckedChange = { navigator.push(CreateBackupScreen()) },\n                                    shape = SegmentedButtonDefaults.itemShape(0, 2),\n                                ) {\n                                    Text(stringResource(MR.strings.pref_create_backup))\n                                }\n                                SegmentedButton(\n                                    modifier = Modifier.fillMaxHeight(),\n                                    checked = false,\n                                    onCheckedChange = {\n                                        if (!BackupRestoreJob.isRunning(context)) {\n                                            if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) {\n                                                context.toast(MR.strings.restore_miui_warning)\n                                            }\n\n                                            // no need to catch because it's wrapped with a chooser\n                                            chooseBackup.launch(\"*/*\")\n                                        } else {\n                                            context.toast(MR.strings.restore_in_progress)\n                                        }\n                                    },\n                                    shape = SegmentedButtonDefaults.itemShape(1, 2),\n                                ) {\n                                    Text(stringResource(MR.strings.pref_restore_backup))\n                                }\n                            }\n                        },\n                    )\n                },\n\n                // Automatic backups\n                Preference.PreferenceItem.ListPreference(\n                    preference = backupPreferences.backupInterval(),\n                    entries = persistentMapOf(\n                        0 to stringResource(MR.strings.off),\n                        6 to stringResource(MR.strings.update_6hour),\n                        12 to stringResource(MR.strings.update_12hour),\n                        24 to stringResource(MR.strings.update_24hour),\n                        48 to stringResource(MR.strings.update_48hour),\n                        168 to stringResource(MR.strings.update_weekly),\n                    ),\n                    title = stringResource(MR.strings.pref_backup_interval),\n                    onValueChanged = {\n                        BackupCreateJob.setupTask(context, it)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.InfoPreference(\n                    stringResource(MR.strings.backup_info) + \"\\n\\n\" +\n                        stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDataGroup(): Preference.PreferenceGroup {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val scope = rememberCoroutineScope()\n        val libraryPreferences = remember { Injekt.get<LibraryPreferences>() }\n\n        val chapterCache = remember { Injekt.get<ChapterCache>() }\n        var cacheReadableSizeSema by remember { mutableIntStateOf(0) }\n        val cacheReadableSize = remember(cacheReadableSizeSema) { chapterCache.readableSize }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_storage_usage),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.CustomPreference(\n                    title = stringResource(MR.strings.pref_storage_usage),\n                ) {\n                    BasePreferenceWidget(\n                        subcomponent = {\n                            StorageInfo(\n                                modifier = Modifier.padding(horizontal = PrefsHorizontalPadding),\n                            )\n                        },\n                    )\n                },\n\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.label_storage),\n                    icon = Icons.Outlined.Storage,\n                    onClick = {\n                        navigator.push(StorageTab)\n                    },\n                ),\n\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.pref_clear_chapter_cache),\n                    subtitle = stringResource(MR.strings.used_cache, cacheReadableSize),\n                    onClick = {\n                        scope.launchNonCancellable {\n                            try {\n                                val deletedFiles = chapterCache.clear()\n                                withUIContext {\n                                    context.toast(context.stringResource(MR.strings.cache_deleted, deletedFiles))\n                                    cacheReadableSizeSema++\n                                }\n                            } catch (e: Throwable) {\n                                logcat(LogPriority.ERROR, e)\n                                withUIContext { context.toast(MR.strings.cache_delete_error) }\n                            }\n                        }\n                    },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.autoClearItemCache(),\n                    title = stringResource(AYMR.strings.pref_auto_clear_chapter_cache),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getExportGroup(): Preference.PreferenceGroup {\n        var showDialog by remember { mutableStateOf(false) }\n        var exportOptions by remember {\n            mutableStateOf(\n                ExportOptions(\n                    includeTitle = true,\n                    includeType = true,\n                    includeAuthor = true,\n                    includeArtist = true,\n                ),\n            )\n        }\n\n        val context = LocalContext.current\n        val scope = rememberCoroutineScope()\n\n        val getAnimeFavorites = remember { Injekt.get<GetAnimeFavorites>() }\n        val getMangaFavorites = remember { Injekt.get<GetMangaFavorites>() }\n\n        var favorites by remember { mutableStateOf<List<ExportEntry>>(emptyList()) }\n        LaunchedEffect(Unit) {\n            favorites = getAnimeFavorites.await().map { it.toExportEntry() } +\n                getMangaFavorites.await().map { it.toExportEntry() }\n        }\n\n        val saveFileLauncher = rememberLauncherForActivityResult(\n            contract = ActivityResultContracts.CreateDocument(\"text/csv\"),\n        ) { uri ->\n            uri?.let {\n                scope.launch {\n                    LibraryExporter.exportToCsv(\n                        context = context,\n                        uri = it,\n                        favorites = favorites,\n                        options = exportOptions,\n                        onExportComplete = {\n                            scope.launch(Dispatchers.Main) {\n                                context.toast(MR.strings.library_exported)\n                            }\n                        },\n                    )\n                }\n            }\n        }\n\n        if (showDialog) {\n            ColumnSelectionDialog(\n                options = exportOptions,\n                onConfirm = { options ->\n                    exportOptions = options\n                    saveFileLauncher.launch(\"aniyomi_library.csv\")\n                },\n                onDismissRequest = { showDialog = false },\n            )\n        }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.export),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(MR.strings.library_list),\n                    onClick = { showDialog = true },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun ColumnSelectionDialog(\n        options: ExportOptions,\n        onConfirm: (ExportOptions) -> Unit,\n        onDismissRequest: () -> Unit,\n    ) {\n        var titleSelected by remember { mutableStateOf(options.includeTitle) }\n        var typeSelected by remember { mutableStateOf(options.includeType) }\n        var authorSelected by remember { mutableStateOf(options.includeAuthor) }\n        var artistSelected by remember { mutableStateOf(options.includeArtist) }\n\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = {\n                Text(text = stringResource(MR.strings.migration_dialog_what_to_include))\n            },\n            text = {\n                Column {\n                    Row(verticalAlignment = Alignment.CenterVertically) {\n                        Checkbox(\n                            checked = titleSelected,\n                            onCheckedChange = { checked ->\n                                titleSelected = checked\n                                if (!checked) {\n                                    authorSelected = false\n                                    artistSelected = false\n                                    typeSelected = false\n                                }\n                            },\n                        )\n                        Text(text = stringResource(MR.strings.title))\n                    }\n\n                    Row(verticalAlignment = Alignment.CenterVertically) {\n                        Checkbox(\n                            checked = typeSelected,\n                            onCheckedChange = { typeSelected = it },\n                            enabled = titleSelected,\n                        )\n                        Text(text = stringResource(AYMR.strings.type))\n                    }\n\n                    Row(verticalAlignment = Alignment.CenterVertically) {\n                        Checkbox(\n                            checked = authorSelected,\n                            onCheckedChange = { authorSelected = it },\n                            enabled = titleSelected,\n                        )\n                        Text(text = stringResource(MR.strings.author))\n                    }\n\n                    Row(verticalAlignment = Alignment.CenterVertically) {\n                        Checkbox(\n                            checked = artistSelected,\n                            onCheckedChange = { artistSelected = it },\n                            enabled = titleSelected,\n                        )\n                        Text(text = stringResource(MR.strings.artist))\n                    }\n                }\n            },\n            confirmButton = {\n                TextButton(\n                    onClick = {\n                        onConfirm(\n                            ExportOptions(\n                                includeTitle = titleSelected,\n                                includeType = typeSelected,\n                                includeAuthor = authorSelected,\n                                includeArtist = artistSelected,\n                            ),\n                        )\n                        onDismissRequest()\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_save))\n                }\n            },\n            dismissButton = {\n                TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\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.material3.AlertDialog\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.util.fastMap\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.presentation.category.visualName\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.widget.TriStateListDialog\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toImmutableMap\nimport kotlinx.collections.immutable.toPersistentMap\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.OutlinedNumericChooser\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject SettingsDownloadScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.pref_category_downloads\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val getMangaCategories = remember { Injekt.get<GetMangaCategories>() }\n        val allMangaCategories by getMangaCategories.subscribe().collectAsState(initial = emptyList())\n        val getAnimeCategories = remember { Injekt.get<GetAnimeCategories>() }\n        val allAnimeCategories by getAnimeCategories.subscribe().collectAsState(initial = emptyList())\n        val downloadPreferences = remember { Injekt.get<DownloadPreferences>() }\n        val basePreferences = remember { Injekt.get<BasePreferences>() }\n        val speedLimit by downloadPreferences.downloadSpeedLimit().collectAsState()\n        var currentSpeedLimit by remember { mutableIntStateOf(speedLimit) }\n        var showDownloadLimitDialog by rememberSaveable { mutableStateOf(false) }\n        if (showDownloadLimitDialog) {\n            DownloadLimitDialog(\n                initialValue = currentSpeedLimit,\n                onDismissRequest = { showDownloadLimitDialog = false },\n                onValueChanged = {\n                    currentSpeedLimit = it\n                },\n                onConfirm = {\n                    downloadPreferences.downloadSpeedLimit().set(currentSpeedLimit)\n                    showDownloadLimitDialog = false\n                },\n            )\n        }\n        return listOf(\n            Preference.PreferenceItem.SwitchPreference(\n                preference = downloadPreferences.downloadOnlyOverWifi(),\n                title = stringResource(MR.strings.connected_to_wifi),\n            ),\n            Preference.PreferenceItem.TextPreference(\n                title = stringResource(AYMR.strings.download_speed_limit),\n                subtitle = if (speedLimit == 0) {\n                    stringResource(MR.strings.off)\n                } else {\n                    \"$speedLimit KiB/s\"\n                },\n                onClick = { showDownloadLimitDialog = true },\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = downloadPreferences.saveChaptersAsCBZ(),\n                title = stringResource(MR.strings.save_chapter_as_cbz),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = downloadPreferences.splitTallImages(),\n                title = stringResource(MR.strings.split_tall_images),\n                subtitle = stringResource(MR.strings.split_tall_images_summary),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = downloadPreferences.numberOfDownloads(),\n                entries = (1..5).associateWith { it.toString() }.toImmutableMap(),\n                title = stringResource(AYMR.strings.pref_download_slots),\n            ),\n            Preference.PreferenceItem.InfoPreference(stringResource(AYMR.strings.download_slots_info)),\n            getDeleteChaptersGroup(\n                downloadPreferences = downloadPreferences,\n                animeCategories = allAnimeCategories.toImmutableList(),\n                mangaCategories = allMangaCategories.toImmutableList(),\n            ),\n            getAutoDownloadGroup(\n                downloadPreferences = downloadPreferences,\n                allAnimeCategories = allAnimeCategories.toImmutableList(),\n                allMangaCategories = allMangaCategories.toImmutableList(),\n            ),\n            getDownloadAheadGroup(downloadPreferences = downloadPreferences),\n            getExternalDownloaderGroup(\n                downloadPreferences = downloadPreferences,\n                basePreferences = basePreferences,\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDeleteChaptersGroup(\n        downloadPreferences: DownloadPreferences,\n        animeCategories: ImmutableList<Category>,\n        mangaCategories: ImmutableList<Category>,\n    ): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_delete_chapters),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadPreferences.removeAfterMarkedAsRead(),\n                    title = stringResource(AYMR.strings.pref_remove_after_marked_as_read),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = downloadPreferences.removeAfterReadSlots(),\n                    entries = persistentMapOf(\n                        -1 to stringResource(MR.strings.disabled),\n                        0 to stringResource(MR.strings.last_read_chapter),\n                        1 to stringResource(MR.strings.second_to_last),\n                        2 to stringResource(MR.strings.third_to_last),\n                        3 to stringResource(MR.strings.fourth_to_last),\n                        4 to stringResource(MR.strings.fifth_to_last),\n                    ),\n                    title = stringResource(AYMR.strings.pref_remove_after_read),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadPreferences.removeBookmarkedChapters(),\n                    title = stringResource(AYMR.strings.pref_remove_bookmarked_chapters),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadPreferences.downloadFillermarkedItems(),\n                    title = stringResource(AYMR.strings.pref_download_fillermarked_items),\n                ),\n                getExcludedAnimeCategoriesPreference(\n                    downloadPreferences = downloadPreferences,\n                    categories = { animeCategories },\n                ),\n                getExcludedCategoriesPreference(\n                    downloadPreferences = downloadPreferences,\n                    categories = { mangaCategories },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getExcludedCategoriesPreference(\n        downloadPreferences: DownloadPreferences,\n        categories: () -> List<Category>,\n    ): Preference.PreferenceItem.MultiSelectListPreference {\n        return Preference.PreferenceItem.MultiSelectListPreference(\n            preference = downloadPreferences.removeExcludeCategories(),\n            entries = categories()\n                .associate { it.id.toString() to it.visualName }\n                .toImmutableMap(),\n            title = stringResource(AYMR.strings.pref_remove_exclude_categories_manga),\n        )\n    }\n\n    @Composable\n    private fun getExcludedAnimeCategoriesPreference(\n        downloadPreferences: DownloadPreferences,\n        categories: () -> List<Category>,\n    ): Preference.PreferenceItem.MultiSelectListPreference {\n        return Preference.PreferenceItem.MultiSelectListPreference(\n            preference = downloadPreferences.removeExcludeAnimeCategories(),\n            entries = categories()\n                .associate { it.id.toString() to it.visualName }\n                .toImmutableMap(),\n            title = stringResource(AYMR.strings.pref_remove_exclude_categories_anime),\n        )\n    }\n\n    @Composable\n    private fun getAutoDownloadGroup(\n        downloadPreferences: DownloadPreferences,\n        allAnimeCategories: ImmutableList<Category>,\n        allMangaCategories: ImmutableList<Category>,\n    ): Preference.PreferenceGroup {\n        val downloadNewEpisodesPref = downloadPreferences.downloadNewEpisodes()\n        val downloadNewUnseenEpisodesOnlyPref = downloadPreferences.downloadNewUnseenEpisodesOnly()\n        val downloadNewEpisodeCategoriesPref = downloadPreferences.downloadNewEpisodeCategories()\n        val downloadNewEpisodeCategoriesExcludePref = downloadPreferences.downloadNewEpisodeCategoriesExclude()\n\n        val downloadNewEpisodes by downloadNewEpisodesPref.collectAsState()\n\n        val includedAnime by downloadNewEpisodeCategoriesPref.collectAsState()\n        val excludedAnime by downloadNewEpisodeCategoriesExcludePref.collectAsState()\n        var showAnimeDialog by rememberSaveable { mutableStateOf(false) }\n        if (showAnimeDialog) {\n            TriStateListDialog(\n                title = stringResource(AYMR.strings.anime_categories),\n                message = stringResource(MR.strings.pref_download_new_categories_details),\n                items = allAnimeCategories,\n                initialChecked = includedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } },\n                initialInversed = excludedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } },\n                itemLabel = { it.visualName },\n                onDismissRequest = { showAnimeDialog = false },\n                onValueChanged = { newIncluded, newExcluded ->\n                    downloadNewEpisodeCategoriesPref.set(\n                        newIncluded.fastMap { it.id.toString() }.toSet(),\n                    )\n                    downloadNewEpisodeCategoriesExcludePref.set(\n                        newExcluded.fastMap { it.id.toString() }.toSet(),\n                    )\n                    showAnimeDialog = false\n                },\n            )\n        }\n\n        val downloadNewChaptersPref = downloadPreferences.downloadNewChapters()\n        val downloadNewUnreadChaptersOnlyPref = downloadPreferences.downloadNewUnreadChaptersOnly()\n        val downloadNewChapterCategoriesPref = downloadPreferences.downloadNewChapterCategories()\n        val downloadNewChapterCategoriesExcludePref = downloadPreferences.downloadNewChapterCategoriesExclude()\n\n        val downloadNewChapters by downloadNewChaptersPref.collectAsState()\n\n        val included by downloadNewChapterCategoriesPref.collectAsState()\n        val excluded by downloadNewChapterCategoriesExcludePref.collectAsState()\n        var showDialog by rememberSaveable { mutableStateOf(false) }\n        if (showDialog) {\n            TriStateListDialog(\n                title = stringResource(AYMR.strings.manga_categories),\n                message = stringResource(MR.strings.pref_download_new_categories_details),\n                items = allMangaCategories,\n                initialChecked = included.mapNotNull { id -> allMangaCategories.find { it.id.toString() == id } },\n                initialInversed = excluded.mapNotNull { id -> allMangaCategories.find { it.id.toString() == id } },\n                itemLabel = { it.visualName },\n                onDismissRequest = { showDialog = false },\n                onValueChanged = { newIncluded, newExcluded ->\n                    downloadNewChapterCategoriesPref.set(\n                        newIncluded.fastMap { it.id.toString() }.toSet(),\n                    )\n                    downloadNewChapterCategoriesExcludePref.set(\n                        newExcluded.fastMap { it.id.toString() }.toSet(),\n                    )\n                    showDialog = false\n                },\n            )\n        }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_auto_download),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadNewEpisodesPref,\n                    title = stringResource(AYMR.strings.pref_download_new_episodes),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadNewUnseenEpisodesOnlyPref,\n                    title = stringResource(AYMR.strings.pref_download_new_unseen_episodes_only),\n                    enabled = downloadNewEpisodes,\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.anime_categories),\n                    subtitle = getCategoriesLabel(\n                        allCategories = allAnimeCategories,\n                        included = includedAnime,\n                        excluded = excludedAnime,\n                    ),\n                    enabled = downloadNewEpisodes,\n                    onClick = { showAnimeDialog = true },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadNewChaptersPref,\n                    title = stringResource(MR.strings.pref_download_new),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = downloadNewUnreadChaptersOnlyPref,\n                    title = stringResource(MR.strings.pref_download_new_unread_chapters_only),\n                    enabled = downloadNewChapters,\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.manga_categories),\n                    subtitle = getCategoriesLabel(\n                        allCategories = allMangaCategories,\n                        included = included,\n                        excluded = excluded,\n                    ),\n                    enabled = downloadNewChapters,\n                    onClick = { showDialog = true },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDownloadAheadGroup(\n        downloadPreferences: DownloadPreferences,\n    ): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.download_ahead),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = downloadPreferences.autoDownloadWhileWatching(),\n                    entries = listOf(0, 2, 3, 5, 10)\n                        .associateWith {\n                            if (it == 0) {\n                                stringResource(MR.strings.disabled)\n                            } else {\n                                pluralStringResource(AYMR.plurals.next_unseen_episodes, count = it, it)\n                            }\n                        }\n                        .toImmutableMap(),\n                    title = stringResource(AYMR.strings.auto_download_while_watching),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = downloadPreferences.autoDownloadWhileReading(),\n                    entries = listOf(0, 2, 3, 5, 10)\n                        .associateWith {\n                            if (it == 0) {\n                                stringResource(MR.strings.disabled)\n                            } else {\n                                pluralStringResource(MR.plurals.next_unread_chapters, count = it, it)\n                            }\n                        }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.auto_download_while_reading),\n                ),\n                Preference.PreferenceItem.InfoPreference(\n                    stringResource(AYMR.strings.download_ahead_info),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getExternalDownloaderGroup(\n        downloadPreferences: DownloadPreferences,\n        basePreferences: BasePreferences,\n    ): Preference.PreferenceGroup {\n        val useExternalDownloader = downloadPreferences.useExternalDownloader()\n        val externalDownloaderPreference = downloadPreferences.externalDownloaderSelection()\n\n        val pm = basePreferences.context.packageManager\n        val installedPackages = pm.getInstalledPackages(0)\n        val supportedDownloaders = installedPackages.filter {\n            when (it.packageName) {\n                \"idm.internet.download.manager\" -> true\n                \"idm.internet.download.manager.plus\" -> true\n                \"idm.internet.download.manager.adm.lite\" -> true\n                \"com.dv.adm\" -> true\n                else -> false\n            }\n        }\n        val packageNames = supportedDownloaders.map { it.packageName }\n        val packageNamesReadable = supportedDownloaders\n            .map { pm.getApplicationLabel(it.applicationInfo!!).toString() }\n\n        val packageNamesMap: Map<String, String> =\n            mapOf(\"\" to \"None\") + packageNames.zip(packageNamesReadable).toMap()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_external_downloader),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = useExternalDownloader,\n                    title = stringResource(AYMR.strings.pref_use_external_downloader),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = externalDownloaderPreference,\n                    entries = packageNamesMap.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_external_downloader_selection),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun DownloadLimitDialog(\n        initialValue: Int,\n        onDismissRequest: () -> Unit,\n        onValueChanged: (newValue: Int) -> Unit,\n        onConfirm: () -> Unit,\n    ) {\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = { Text(stringResource(AYMR.strings.download_speed_limit)) },\n            text = {\n                Column {\n                    Row(\n                        modifier = Modifier\n                            .padding(bottom = MaterialTheme.padding.medium)\n                            .fillMaxWidth(),\n                        verticalAlignment = Alignment.CenterVertically,\n                        horizontalArrangement = Arrangement.SpaceEvenly,\n                    ) {\n                        OutlinedNumericChooser(\n                            label = stringResource(AYMR.strings.download_speed_limit),\n                            placeholder = \"0\",\n                            suffix = \"KiB/s\",\n                            value = initialValue,\n                            step = 100,\n                            min = 0,\n                            onValueChanged = onValueChanged,\n                        )\n                    }\n                    Text(text = stringResource(AYMR.strings.download_speed_limit_hint))\n                }\n            },\n            dismissButton = {\n                TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            },\n            confirmButton = {\n                TextButton(\n                    onClick = {\n                        onConfirm()\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_ok))\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.collectAsState\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.platform.LocalContext\nimport androidx.compose.ui.util.fastMap\nimport androidx.core.content.ContextCompat\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.category.visualName\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.PreferenceItem\nimport eu.kanade.presentation.more.settings.widget.TriStateListDialog\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableMap\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.ResetMangaCategoryFlags\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_HAS_UNVIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_VIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_OUTSIDE_RELEASE_PERIOD\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.MARK_DUPLICATE_CHAPTER_READ_EXISTING\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.MARK_DUPLICATE_CHAPTER_READ_NEW\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.MARK_DUPLICATE_EPISODE_SEEN_EXISTING\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.MARK_DUPLICATE_EPISODE_SEEN_NEW\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject SettingsLibraryScreen : SearchableSettings {\n\n    @Composable\n    @ReadOnlyComposable\n    override fun getTitleRes() = MR.strings.pref_category_library\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val getCategories = remember { Injekt.get<GetMangaCategories>() }\n        val allCategories by getCategories.subscribe().collectAsState(initial = emptyList())\n        val getAnimeCategories = remember { Injekt.get<GetAnimeCategories>() }\n        val allAnimeCategories by getAnimeCategories.subscribe().collectAsState(initial = emptyList())\n        val libraryPreferences = remember { Injekt.get<LibraryPreferences>() }\n\n        return listOf(\n            getCategoriesGroup(\n                LocalNavigator.currentOrThrow,\n                allCategories,\n                allAnimeCategories,\n                libraryPreferences,\n            ),\n            getGlobalUpdateGroup(allCategories, allAnimeCategories, libraryPreferences),\n            getSeasonBehaviorGroup(libraryPreferences),\n            getAnimeBehaviorGroup(libraryPreferences),\n            getBehaviorGroup(libraryPreferences),\n        )\n    }\n\n    @Composable\n    private fun getCategoriesGroup(\n        navigator: Navigator,\n        allCategories: List<Category>,\n        allAnimeCategories: List<Category>,\n        libraryPreferences: LibraryPreferences,\n    ): Preference.PreferenceGroup {\n        val scope = rememberCoroutineScope()\n        val userCategoriesCount = allCategories.filterNot(Category::isSystemCategory).size\n        val userAnimeCategoriesCount = allAnimeCategories.filterNot(Category::isSystemCategory).size\n\n        // For default category\n        val mangaIds = listOf(libraryPreferences.defaultMangaCategory().defaultValue()) +\n            allCategories.fastMap { it.id.toInt() }\n        val animeIds = listOf(libraryPreferences.defaultAnimeCategory().defaultValue()) +\n            allAnimeCategories.fastMap { it.id.toInt() }\n\n        val mangaLabels = listOf(stringResource(MR.strings.default_category_summary)) +\n            allCategories.fastMap { it.visualName }\n        val animeLabels = listOf(stringResource(MR.strings.default_category_summary)) +\n            allAnimeCategories.fastMap { it.visualName }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.general_categories),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.action_edit_anime_categories),\n                    subtitle = pluralStringResource(\n                        MR.plurals.num_categories,\n                        count = userAnimeCategoriesCount,\n                        userAnimeCategoriesCount,\n                    ),\n                    onClick = { navigator.push(CategoriesTab) },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = libraryPreferences.defaultAnimeCategory(),\n                    entries = animeIds.zip(animeLabels).toMap().toImmutableMap(),\n                    title = stringResource(AYMR.strings.default_anime_category),\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.action_edit_manga_categories),\n                    subtitle = pluralStringResource(\n                        MR.plurals.num_categories,\n                        count = userCategoriesCount,\n                        userCategoriesCount,\n                    ),\n                    onClick = {\n                        navigator.push(CategoriesTab)\n                        CategoriesTab.showMangaCategory()\n                    },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = libraryPreferences.defaultMangaCategory(),\n                    entries = mangaIds.zip(mangaLabels).toMap().toImmutableMap(),\n                    title = stringResource(AYMR.strings.default_manga_category),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.categorizedDisplaySettings(),\n                    title = stringResource(MR.strings.categorized_display_settings),\n                    onValueChanged = {\n                        if (!it) {\n                            scope.launch {\n                                Injekt.get<ResetMangaCategoryFlags>().await()\n                            }\n                        }\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.hideHiddenCategoriesSettings(),\n                    title = stringResource(AYMR.strings.pref_category_hide_hidden),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getGlobalUpdateGroup(\n        allMangaCategories: List<Category>,\n        allAnimeCategories: List<Category>,\n        libraryPreferences: LibraryPreferences,\n    ): Preference.PreferenceGroup {\n        val context = LocalContext.current\n\n        val autoUpdateIntervalPref = libraryPreferences.autoUpdateInterval()\n        val autoUpdateInterval by autoUpdateIntervalPref.collectAsState()\n\n        val animeAutoUpdateCategoriesPref = libraryPreferences.animeUpdateCategories()\n        val animeAutoUpdateCategoriesExcludePref =\n            libraryPreferences.animeUpdateCategoriesExclude()\n\n        val includedAnime by animeAutoUpdateCategoriesPref.collectAsState()\n        val excludedAnime by animeAutoUpdateCategoriesExcludePref.collectAsState()\n        var showAnimeCategoriesDialog by rememberSaveable { mutableStateOf(false) }\n        if (showAnimeCategoriesDialog) {\n            TriStateListDialog(\n                title = stringResource(AYMR.strings.anime_categories),\n                message = stringResource(AYMR.strings.pref_anime_library_update_categories_details),\n                items = allAnimeCategories,\n                initialChecked = includedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } },\n                initialInversed = excludedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } },\n                itemLabel = { it.visualName },\n                onDismissRequest = { showAnimeCategoriesDialog = false },\n                onValueChanged = { newIncluded, newExcluded ->\n                    animeAutoUpdateCategoriesPref.set(newIncluded.map { it.id.toString() }.toSet())\n                    animeAutoUpdateCategoriesExcludePref.set(\n                        newExcluded.map { it.id.toString() }\n                            .toSet(),\n                    )\n                    showAnimeCategoriesDialog = false\n                },\n            )\n        }\n\n        val autoUpdateCategoriesPref = libraryPreferences.mangaUpdateCategories()\n        val autoUpdateCategoriesExcludePref =\n            libraryPreferences.mangaUpdateCategoriesExclude()\n\n        val includedManga by autoUpdateCategoriesPref.collectAsState()\n        val excludedManga by autoUpdateCategoriesExcludePref.collectAsState()\n        var showMangaCategoriesDialog by rememberSaveable { mutableStateOf(false) }\n        if (showMangaCategoriesDialog) {\n            TriStateListDialog(\n                title = stringResource(AYMR.strings.manga_categories),\n                message = stringResource(AYMR.strings.pref_manga_library_update_categories_details),\n                items = allMangaCategories,\n                initialChecked = includedManga.mapNotNull { id -> allMangaCategories.find { it.id.toString() == id } },\n                initialInversed = excludedManga.mapNotNull { id -> allMangaCategories.find { it.id.toString() == id } },\n                itemLabel = { it.visualName },\n                onDismissRequest = { showMangaCategoriesDialog = false },\n                onValueChanged = { newIncluded, newExcluded ->\n                    autoUpdateCategoriesPref.set(newIncluded.map { it.id.toString() }.toSet())\n                    autoUpdateCategoriesExcludePref.set(\n                        newExcluded.map { it.id.toString() }\n                            .toSet(),\n                    )\n                    showMangaCategoriesDialog = false\n                },\n            )\n        }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_library_update),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = autoUpdateIntervalPref,\n                    entries = persistentMapOf(\n                        0 to stringResource(MR.strings.update_never),\n                        12 to stringResource(MR.strings.update_12hour),\n                        24 to stringResource(MR.strings.update_24hour),\n                        48 to stringResource(MR.strings.update_48hour),\n                        72 to stringResource(MR.strings.update_72hour),\n                        168 to stringResource(MR.strings.update_weekly),\n                    ),\n                    title = stringResource(MR.strings.pref_library_update_interval),\n                    onValueChanged = {\n                        MangaLibraryUpdateJob.setupTask(context, it)\n                        AnimeLibraryUpdateJob.setupTask(context, it)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.MultiSelectListPreference(\n                    preference = libraryPreferences.autoUpdateDeviceRestrictions(),\n                    entries = persistentMapOf(\n                        DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi),\n                        DEVICE_NETWORK_NOT_METERED to stringResource(MR.strings.network_not_metered),\n                        DEVICE_CHARGING to stringResource(MR.strings.charging),\n                    ),\n                    title = stringResource(MR.strings.pref_library_update_restriction),\n                    subtitle = stringResource(MR.strings.restrictions),\n                    enabled = autoUpdateInterval > 0,\n                    onValueChanged = {\n                        // Post to event looper to allow the preference to be updated.\n                        ContextCompat.getMainExecutor(context).execute {\n                            MangaLibraryUpdateJob.setupTask(context)\n                            AnimeLibraryUpdateJob.setupTask(context)\n                        }\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.anime_categories),\n                    subtitle = getCategoriesLabel(\n                        allCategories = allAnimeCategories,\n                        included = includedAnime,\n                        excluded = excludedAnime,\n                    ),\n                    onClick = { showAnimeCategoriesDialog = true },\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.manga_categories),\n                    subtitle = getCategoriesLabel(\n                        allCategories = allMangaCategories,\n                        included = includedManga,\n                        excluded = excludedManga,\n                    ),\n                    onClick = { showMangaCategoriesDialog = true },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.autoUpdateMetadata(),\n                    title = stringResource(MR.strings.pref_library_update_refresh_metadata),\n                    subtitle = stringResource(MR.strings.pref_library_update_refresh_metadata_summary),\n                ),\n                Preference.PreferenceItem.MultiSelectListPreference(\n                    preference = libraryPreferences.autoUpdateItemRestrictions(),\n                    entries = persistentMapOf(\n                        ENTRY_HAS_UNVIEWED to stringResource(AYMR.strings.pref_update_only_completely_read),\n                        ENTRY_NON_VIEWED to stringResource(MR.strings.pref_update_only_started),\n                        ENTRY_NON_COMPLETED to stringResource(MR.strings.pref_update_only_non_completed),\n                        ENTRY_OUTSIDE_RELEASE_PERIOD to stringResource(MR.strings.pref_update_only_in_release_period),\n                    ),\n                    title = stringResource(MR.strings.pref_library_update_smart_update),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.newShowUpdatesCount(),\n                    title = stringResource(AYMR.strings.pref_library_update_show_tab_badge),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getSeasonBehaviorGroup(\n        libraryPreferences: LibraryPreferences,\n    ): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_library_season),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.updateSeasonOnRefresh(),\n                    title = stringResource(AYMR.strings.pref_update_seasons_refresh),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = libraryPreferences.updateSeasonOnLibraryUpdate(),\n                    title = stringResource(AYMR.strings.pref_update_seasons_update),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getBehaviorGroup(\n        libraryPreferences: LibraryPreferences,\n    ): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_behavior),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = libraryPreferences.swipeChapterStartAction(),\n                    entries = persistentMapOf(\n                        LibraryPreferences.ChapterSwipeAction.Disabled to\n                            stringResource(MR.strings.disabled),\n                        LibraryPreferences.ChapterSwipeAction.ToggleBookmark to\n                            stringResource(MR.strings.action_bookmark),\n                        LibraryPreferences.ChapterSwipeAction.ToggleRead to\n                            stringResource(MR.strings.action_mark_as_read),\n                        LibraryPreferences.ChapterSwipeAction.Download to\n                            stringResource(MR.strings.action_download),\n                    ),\n                    title = stringResource(MR.strings.pref_chapter_swipe_start),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = libraryPreferences.swipeChapterEndAction(),\n                    entries = persistentMapOf(\n                        LibraryPreferences.ChapterSwipeAction.Disabled to\n                            stringResource(MR.strings.disabled),\n                        LibraryPreferences.ChapterSwipeAction.ToggleBookmark to\n                            stringResource(MR.strings.action_bookmark),\n                        LibraryPreferences.ChapterSwipeAction.ToggleRead to\n                            stringResource(MR.strings.action_mark_as_read),\n                        LibraryPreferences.ChapterSwipeAction.Download to\n                            stringResource(MR.strings.action_download),\n                    ),\n                    title = stringResource(MR.strings.pref_chapter_swipe_end),\n                ),\n                Preference.PreferenceItem.MultiSelectListPreference(\n                    preference = libraryPreferences.markDuplicateReadChapterAsRead(),\n                    entries = persistentMapOf(\n                        MARK_DUPLICATE_CHAPTER_READ_EXISTING to\n                            stringResource(MR.strings.pref_mark_duplicate_read_chapter_read_existing),\n                        MARK_DUPLICATE_CHAPTER_READ_NEW to\n                            stringResource(MR.strings.pref_mark_duplicate_read_chapter_read_new),\n                    ),\n                    title = stringResource(MR.strings.pref_mark_duplicate_read_chapter_read),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getAnimeBehaviorGroup(\n        libraryPreferences: LibraryPreferences,\n    ): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_behavior_episode),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = libraryPreferences.swipeEpisodeStartAction(),\n                    entries = persistentMapOf(\n                        LibraryPreferences.EpisodeSwipeAction.Disabled to\n                            stringResource(MR.strings.disabled),\n                        LibraryPreferences.EpisodeSwipeAction.ToggleBookmark to\n                            stringResource(AYMR.strings.action_bookmark_episode),\n                        LibraryPreferences.EpisodeSwipeAction.ToggleFillermark to\n                            stringResource(AYMR.strings.action_fillermark_episode),\n                        LibraryPreferences.EpisodeSwipeAction.ToggleSeen to\n                            stringResource(AYMR.strings.action_mark_as_seen),\n                        LibraryPreferences.EpisodeSwipeAction.Download to\n                            stringResource(MR.strings.action_download),\n                    ),\n                    title = stringResource(AYMR.strings.pref_episode_swipe_start),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = libraryPreferences.swipeEpisodeEndAction(),\n                    entries = persistentMapOf(\n                        LibraryPreferences.EpisodeSwipeAction.Disabled to\n                            stringResource(MR.strings.disabled),\n                        LibraryPreferences.EpisodeSwipeAction.ToggleBookmark to\n                            stringResource(AYMR.strings.action_bookmark_episode),\n                        LibraryPreferences.EpisodeSwipeAction.ToggleFillermark to\n                            stringResource(AYMR.strings.action_fillermark_episode),\n                        LibraryPreferences.EpisodeSwipeAction.ToggleSeen to\n                            stringResource(AYMR.strings.action_mark_as_seen),\n                        LibraryPreferences.EpisodeSwipeAction.Download to\n                            stringResource(MR.strings.action_download),\n                    ),\n                    title = stringResource(AYMR.strings.pref_episode_swipe_end),\n                ),\n                Preference.PreferenceItem.MultiSelectListPreference(\n                    preference = libraryPreferences.markDuplicateSeenEpisodeAsSeen(),\n                    entries = persistentMapOf(\n                        MARK_DUPLICATE_EPISODE_SEEN_EXISTING to\n                            stringResource(AYMR.strings.pref_mark_duplicate_seen_episode_seen_existing),\n                        MARK_DUPLICATE_EPISODE_SEEN_NEW to\n                            stringResource(AYMR.strings.pref_mark_duplicate_seen_episode_seen_new),\n                    ),\n                    title = stringResource(AYMR.strings.pref_mark_duplicate_seen_episode_seen),\n                ),\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ChromeReaderMode\nimport androidx.compose.material.icons.outlined.Code\nimport androidx.compose.material.icons.outlined.CollectionsBookmark\nimport androidx.compose.material.icons.outlined.Explore\nimport androidx.compose.material.icons.outlined.GetApp\nimport androidx.compose.material.icons.outlined.Info\nimport androidx.compose.material.icons.outlined.Palette\nimport androidx.compose.material.icons.outlined.Search\nimport androidx.compose.material.icons.outlined.Security\nimport androidx.compose.material.icons.outlined.Storage\nimport androidx.compose.material.icons.outlined.Sync\nimport androidx.compose.material.icons.outlined.VideoSettings\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.toArgb\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.unit.dp\nimport androidx.core.graphics.ColorUtils\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.more.settings.screen.about.AboutScreen\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.presentation.util.LocalBackPress\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.setting.PlayerSettingsScreen\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport cafe.adriel.voyager.core.screen.Screen as VoyagerScreen\n\nobject SettingsMainScreen : Screen() {\n    @Composable\n    override fun Content() {\n        Content(twoPane = false)\n    }\n\n    @Composable\n    private fun getPalerSurface(): Color {\n        val surface = MaterialTheme.colorScheme.surface\n        val dark = isSystemInDarkTheme()\n        return remember(surface, dark) {\n            val arr = FloatArray(3)\n            ColorUtils.colorToHSL(surface.toArgb(), arr)\n            arr[2] = if (dark) {\n                arr[2] - 0.05f\n            } else {\n                arr[2] + 0.02f\n            }.coerceIn(0f, 1f)\n            Color.hsl(arr[0], arr[1], arr[2])\n        }\n    }\n\n    @Composable\n    fun Content(twoPane: Boolean) {\n        val navigator = LocalNavigator.currentOrThrow\n        val backPress = LocalBackPress.currentOrThrow\n        val containerColor = if (twoPane) getPalerSurface() else MaterialTheme.colorScheme.surface\n        val topBarState = rememberTopAppBarState()\n\n        Scaffold(\n            topBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topBarState),\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(MR.strings.label_settings),\n                    navigateUp = backPress::invoke,\n                    actions = {\n                        AppBarActions(\n                            persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_search),\n                                    icon = Icons.Outlined.Search,\n                                    onClick = { navigator.navigate(SettingsSearchScreen(), twoPane) },\n                                ),\n                            ),\n                        )\n                    },\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n            containerColor = containerColor,\n            content = { contentPadding ->\n                val state = rememberLazyListState()\n                val indexSelected = if (twoPane) {\n                    items.indexOfFirst { it.screen::class == navigator.items.first()::class }\n                        .also {\n                            LaunchedEffect(Unit) {\n                                state.animateScrollToItem(it)\n                                if (it > 0) {\n                                    // Lift scroll\n                                    topBarState.contentOffset = topBarState.heightOffsetLimit\n                                }\n                            }\n                        }\n                } else {\n                    null\n                }\n\n                LazyColumn(\n                    state = state,\n                    contentPadding = contentPadding,\n                ) {\n                    itemsIndexed(\n                        items = items,\n                        key = { _, item -> item.hashCode() },\n                    ) { index, item ->\n                        val selected = indexSelected == index\n                        var modifier: Modifier = Modifier\n                        var contentColor = LocalContentColor.current\n                        if (twoPane) {\n                            modifier = Modifier\n                                .padding(horizontal = 8.dp)\n                                .clip(RoundedCornerShape(24.dp))\n                                .then(\n                                    if (selected) {\n                                        Modifier.background(\n                                            MaterialTheme.colorScheme.surfaceVariant,\n                                        )\n                                    } else {\n                                        Modifier\n                                    },\n                                )\n                            if (selected) {\n                                contentColor = MaterialTheme.colorScheme.onSurfaceVariant\n                            }\n                        }\n                        CompositionLocalProvider(LocalContentColor provides contentColor) {\n                            TextPreferenceWidget(\n                                modifier = modifier,\n                                title = stringResource(item.titleRes),\n                                subtitle = item.formatSubtitle(),\n                                icon = item.icon,\n                                onPreferenceClick = { navigator.navigate(item.screen, twoPane) },\n                            )\n                        }\n                    }\n                }\n            },\n        )\n    }\n\n    private fun Navigator.navigate(screen: VoyagerScreen, twoPane: Boolean) {\n        if (twoPane) replaceAll(screen) else push(screen)\n    }\n\n    private data class Item(\n        val titleRes: StringResource,\n        val subtitleRes: StringResource? = null,\n        val formatSubtitle: @Composable () -> String? = { subtitleRes?.let { stringResource(it) } },\n        val icon: ImageVector,\n        val screen: VoyagerScreen,\n    )\n\n    private val items = listOf(\n        Item(\n            titleRes = MR.strings.pref_category_appearance,\n            subtitleRes = MR.strings.pref_appearance_summary,\n            icon = Icons.Outlined.Palette,\n            screen = SettingsAppearanceScreen,\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_library,\n            subtitleRes = AYMR.strings.pref_library_summary,\n            icon = Icons.Outlined.CollectionsBookmark,\n            screen = SettingsLibraryScreen,\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_reader,\n            subtitleRes = MR.strings.pref_reader_summary,\n            icon = Icons.AutoMirrored.Outlined.ChromeReaderMode,\n            screen = SettingsReaderScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.label_player,\n            subtitleRes = AYMR.strings.pref_player_settings_summary,\n            icon = Icons.Outlined.VideoSettings,\n            screen = PlayerSettingsScreen(mainSettings = true),\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_downloads,\n            subtitleRes = MR.strings.pref_downloads_summary,\n            icon = Icons.Outlined.GetApp,\n            screen = SettingsDownloadScreen,\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_tracking,\n            subtitleRes = MR.strings.pref_tracking_summary,\n            icon = Icons.Outlined.Sync,\n            screen = SettingsTrackingScreen,\n        ),\n        Item(\n            titleRes = MR.strings.browse,\n            subtitleRes = MR.strings.pref_browse_summary,\n            icon = Icons.Outlined.Explore,\n            screen = SettingsBrowseScreen,\n        ),\n        Item(\n            titleRes = MR.strings.label_data_storage,\n            subtitleRes = MR.strings.pref_backup_summary,\n            icon = Icons.Outlined.Storage,\n            screen = SettingsDataScreen,\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_security,\n            subtitleRes = MR.strings.pref_security_summary,\n            icon = Icons.Outlined.Security,\n            screen = SettingsSecurityScreen,\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_advanced,\n            subtitleRes = MR.strings.pref_advanced_summary,\n            icon = Icons.Outlined.Code,\n            screen = SettingsAdvancedScreen,\n        ),\n        Item(\n            titleRes = MR.strings.pref_category_about,\n            formatSubtitle = {\n                \"${stringResource(MR.strings.app_name)} ${AboutScreen.getVersionName(\n                    withBuildDate = false,\n                )}\"\n            },\n            icon = Icons.Outlined.Info,\n            screen = AboutScreen,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport android.os.Build\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalView\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableMap\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.text.NumberFormat\n\nobject SettingsReaderScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.pref_category_reader\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val readerPref = remember { Injekt.get<ReaderPreferences>() }\n\n        return listOf(\n            Preference.PreferenceItem.ListPreference(\n                preference = readerPref.defaultReadingMode(),\n                entries = ReadingMode.entries.drop(1)\n                    .associate { it.flagValue to stringResource(it.stringRes) }\n                    .toImmutableMap(),\n                title = stringResource(MR.strings.pref_viewer_type),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = readerPref.doubleTapAnimSpeed(),\n                entries = persistentMapOf(\n                    1 to stringResource(MR.strings.double_tap_anim_speed_0),\n                    500 to stringResource(MR.strings.double_tap_anim_speed_normal),\n                    250 to stringResource(MR.strings.double_tap_anim_speed_fast),\n                ),\n                title = stringResource(MR.strings.pref_double_tap_anim_speed),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = readerPref.showReadingMode(),\n                title = stringResource(MR.strings.pref_show_reading_mode),\n                subtitle = stringResource(MR.strings.pref_show_reading_mode_summary),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = readerPref.showNavigationOverlayOnStart(),\n                title = stringResource(MR.strings.pref_show_navigation_mode),\n                subtitle = stringResource(MR.strings.pref_show_navigation_mode_summary),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = readerPref.pageTransitions(),\n                title = stringResource(MR.strings.pref_page_transitions),\n            ),\n            getDisplayGroup(readerPreferences = readerPref),\n            getEInkGroup(readerPreferences = readerPref),\n            getReadingGroup(readerPreferences = readerPref),\n            getPagedGroup(readerPreferences = readerPref),\n            getWebtoonGroup(readerPreferences = readerPref),\n            getNavigationGroup(readerPreferences = readerPref),\n            getActionsGroup(readerPreferences = readerPref),\n        )\n    }\n\n    @Composable\n    private fun getDisplayGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        val fullscreenPref = readerPreferences.fullscreen()\n        val fullscreen by fullscreenPref.collectAsState()\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_display),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = readerPreferences.defaultOrientationType(),\n                    entries = ReaderOrientation.entries.drop(1)\n                        .associate { it.flagValue to stringResource(it.stringRes) }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_rotation_type),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = readerPreferences.readerTheme(),\n                    entries = persistentMapOf(\n                        1 to stringResource(MR.strings.black_background),\n                        2 to stringResource(MR.strings.gray_background),\n                        0 to stringResource(MR.strings.white_background),\n                        3 to stringResource(MR.strings.automatic_background),\n                    ),\n                    title = stringResource(MR.strings.pref_reader_theme),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = fullscreenPref,\n                    title = stringResource(MR.strings.pref_fullscreen),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.cutoutShort(),\n                    title = stringResource(MR.strings.pref_cutout_short),\n                    enabled = fullscreen &&\n                        Build.VERSION.SDK_INT >= Build.VERSION_CODES.P &&\n                        LocalView.current.rootWindowInsets?.displayCutout != null, // has cutout\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.keepScreenOn(),\n                    title = stringResource(MR.strings.pref_keep_screen_on),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.showPageNumber(),\n                    title = stringResource(MR.strings.pref_show_page_number),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getEInkGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        val flashPageState by readerPreferences.flashOnPageChange().collectAsState()\n\n        val flashMillisPref = readerPreferences.flashDurationMillis()\n        val flashMillis by flashMillisPref.collectAsState()\n\n        val flashIntervalPref = readerPreferences.flashPageInterval()\n        val flashInterval by flashIntervalPref.collectAsState()\n\n        val flashColorPref = readerPreferences.flashColor()\n\n        return Preference.PreferenceGroup(\n            title = \"E-Ink\",\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.flashOnPageChange(),\n                    title = stringResource(MR.strings.pref_flash_page),\n                    subtitle = stringResource(MR.strings.pref_flash_page_summ),\n                ),\n                Preference.PreferenceItem.SliderPreference(\n                    value = flashMillis / ReaderPreferences.MILLI_CONVERSION,\n                    valueRange = 1..15,\n                    title = stringResource(MR.strings.pref_flash_duration),\n                    subtitle = stringResource(MR.strings.pref_flash_duration_summary, flashMillis),\n                    enabled = flashPageState,\n                    onValueChanged = {\n                        flashMillisPref.set(it * ReaderPreferences.MILLI_CONVERSION)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.SliderPreference(\n                    value = flashInterval,\n                    valueRange = 1..10,\n                    title = stringResource(MR.strings.pref_flash_page_interval),\n                    subtitle = pluralStringResource(MR.plurals.pref_pages, flashInterval, flashInterval),\n                    enabled = flashPageState,\n                    onValueChanged = {\n                        flashIntervalPref.set(it)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = flashColorPref,\n                    entries = persistentMapOf(\n                        ReaderPreferences.FlashColor.BLACK to stringResource(MR.strings.pref_flash_style_black),\n                        ReaderPreferences.FlashColor.WHITE to stringResource(MR.strings.pref_flash_style_white),\n                        ReaderPreferences.FlashColor.WHITE_BLACK\n                            to stringResource(MR.strings.pref_flash_style_white_black),\n                    ),\n                    title = stringResource(MR.strings.pref_flash_with),\n                    enabled = flashPageState,\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getReadingGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_reading),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.skipRead(),\n                    title = stringResource(MR.strings.pref_skip_read_chapters),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.skipFiltered(),\n                    title = stringResource(MR.strings.pref_skip_filtered_chapters),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.skipDupe(),\n                    title = stringResource(MR.strings.pref_skip_dupe_chapters),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.alwaysShowChapterTransition(),\n                    title = stringResource(MR.strings.pref_always_show_chapter_transition),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.preserveReadingPosition(),\n                    title = stringResource(AYMR.strings.pref_preserve_reading_position),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getPagedGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        val navModePref = readerPreferences.navigationModePager()\n        val imageScaleTypePref = readerPreferences.imageScaleType()\n        val dualPageSplitPref = readerPreferences.dualPageSplitPaged()\n        val rotateToFitPref = readerPreferences.dualPageRotateToFit()\n\n        val navMode by navModePref.collectAsState()\n        val imageScaleType by imageScaleTypePref.collectAsState()\n        val dualPageSplit by dualPageSplitPref.collectAsState()\n        val rotateToFit by rotateToFitPref.collectAsState()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pager_viewer),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = navModePref,\n                    entries = ReaderPreferences.TapZones\n                        .mapIndexed { index, it -> index to stringResource(it) }\n                        .toMap()\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_viewer_nav),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = readerPreferences.pagerNavInverted(),\n                    entries = persistentListOf(\n                        ReaderPreferences.TappingInvertMode.NONE,\n                        ReaderPreferences.TappingInvertMode.HORIZONTAL,\n                        ReaderPreferences.TappingInvertMode.VERTICAL,\n                        ReaderPreferences.TappingInvertMode.BOTH,\n                    )\n                        .associateWith { stringResource(it.titleRes) }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_read_with_tapping_inverted),\n                    enabled = navMode != 5,\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = imageScaleTypePref,\n                    entries = ReaderPreferences.ImageScaleType\n                        .mapIndexed { index, it -> index + 1 to stringResource(it) }\n                        .toMap()\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_image_scale_type),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = readerPreferences.zoomStart(),\n                    entries = ReaderPreferences.ZoomStart\n                        .mapIndexed { index, it -> index + 1 to stringResource(it) }\n                        .toMap()\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_zoom_start),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.cropBorders(),\n                    title = stringResource(MR.strings.pref_crop_borders),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.landscapeZoom(),\n                    title = stringResource(MR.strings.pref_landscape_zoom),\n                    enabled = imageScaleType == 1,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.navigateToPan(),\n                    title = stringResource(MR.strings.pref_navigate_pan),\n                    enabled = navMode != 5,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = dualPageSplitPref,\n                    title = stringResource(MR.strings.pref_dual_page_split),\n                    onValueChanged = {\n                        rotateToFitPref.set(false)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.dualPageInvertPaged(),\n                    title = stringResource(MR.strings.pref_dual_page_invert),\n                    subtitle = stringResource(MR.strings.pref_dual_page_invert_summary),\n                    enabled = dualPageSplit,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = rotateToFitPref,\n                    title = stringResource(MR.strings.pref_page_rotate),\n                    onValueChanged = {\n                        dualPageSplitPref.set(false)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.dualPageRotateToFitInvert(),\n                    title = stringResource(MR.strings.pref_page_rotate_invert),\n                    enabled = rotateToFit,\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getWebtoonGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        val numberFormat = remember { NumberFormat.getPercentInstance() }\n\n        val navModePref = readerPreferences.navigationModeWebtoon()\n        val dualPageSplitPref = readerPreferences.dualPageSplitWebtoon()\n        val rotateToFitPref = readerPreferences.dualPageRotateToFitWebtoon()\n        val webtoonSidePaddingPref = readerPreferences.webtoonSidePadding()\n\n        val navMode by navModePref.collectAsState()\n        val dualPageSplit by dualPageSplitPref.collectAsState()\n        val rotateToFit by rotateToFitPref.collectAsState()\n        val webtoonSidePadding by webtoonSidePaddingPref.collectAsState()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.webtoon_viewer),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = navModePref,\n                    entries = ReaderPreferences.TapZones\n                        .mapIndexed { index, it -> index to stringResource(it) }\n                        .toMap()\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_viewer_nav),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = readerPreferences.webtoonNavInverted(),\n                    entries = persistentListOf(\n                        ReaderPreferences.TappingInvertMode.NONE,\n                        ReaderPreferences.TappingInvertMode.HORIZONTAL,\n                        ReaderPreferences.TappingInvertMode.VERTICAL,\n                        ReaderPreferences.TappingInvertMode.BOTH,\n                    )\n                        .associateWith { stringResource(it.titleRes) }\n                        .toImmutableMap(),\n                    title = stringResource(MR.strings.pref_read_with_tapping_inverted),\n                    enabled = navMode != 5,\n                ),\n                Preference.PreferenceItem.SliderPreference(\n                    value = webtoonSidePadding,\n                    valueRange = ReaderPreferences.let {\n                        it.WEBTOON_PADDING_MIN..it.WEBTOON_PADDING_MAX\n                    },\n                    title = stringResource(MR.strings.pref_webtoon_side_padding),\n                    subtitle = numberFormat.format(webtoonSidePadding / 100f),\n                    onValueChanged = {\n                        webtoonSidePaddingPref.set(it)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = readerPreferences.readerHideThreshold(),\n                    entries = persistentMapOf(\n                        ReaderPreferences.ReaderHideThreshold.HIGHEST to stringResource(MR.strings.pref_highest),\n                        ReaderPreferences.ReaderHideThreshold.HIGH to stringResource(MR.strings.pref_high),\n                        ReaderPreferences.ReaderHideThreshold.LOW to stringResource(MR.strings.pref_low),\n                        ReaderPreferences.ReaderHideThreshold.LOWEST to stringResource(MR.strings.pref_lowest),\n                    ),\n                    title = stringResource(MR.strings.pref_hide_threshold),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.cropBordersWebtoon(),\n                    title = stringResource(MR.strings.pref_crop_borders),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = dualPageSplitPref,\n                    title = stringResource(MR.strings.pref_dual_page_split),\n                    onValueChanged = {\n                        rotateToFitPref.set(false)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.dualPageInvertWebtoon(),\n                    title = stringResource(MR.strings.pref_dual_page_invert),\n                    subtitle = stringResource(MR.strings.pref_dual_page_invert_summary),\n                    enabled = dualPageSplit,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = rotateToFitPref,\n                    title = stringResource(MR.strings.pref_page_rotate),\n                    onValueChanged = {\n                        dualPageSplitPref.set(false)\n                        true\n                    },\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.dualPageRotateToFitInvertWebtoon(),\n                    title = stringResource(MR.strings.pref_page_rotate_invert),\n                    enabled = rotateToFit,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.webtoonDoubleTapZoomEnabled(),\n                    title = stringResource(MR.strings.pref_double_tap_zoom),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.webtoonDisableZoomOut(),\n                    title = stringResource(MR.strings.pref_webtoon_disable_zoom_out),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getNavigationGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        val readWithVolumeKeysPref = readerPreferences.readWithVolumeKeys()\n        val readWithVolumeKeys by readWithVolumeKeysPref.collectAsState()\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_reader_navigation),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readWithVolumeKeysPref,\n                    title = stringResource(MR.strings.pref_read_with_volume_keys),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.readWithVolumeKeysInverted(),\n                    title = stringResource(MR.strings.pref_read_with_volume_keys_inverted),\n                    enabled = readWithVolumeKeys,\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getActionsGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_reader_actions),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.readWithLongTap(),\n                    title = stringResource(MR.strings.pref_read_with_long_tap),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = readerPreferences.folderPerManga(),\n                    title = stringResource(MR.strings.pref_create_folder_per_manga),\n                    subtitle = stringResource(MR.strings.pref_create_folder_per_manga_summary),\n                ),\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.animation.Crossfade\nimport androidx.compose.foundation.clickable\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.layout.paddingFromBaseline\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.text.BasicTextField\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.foundation.text.input.TextFieldLineLimits\nimport androidx.compose.foundation.text.input.clearText\nimport androidx.compose.foundation.text.input.rememberTextFieldState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisposableEffect\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.NonRestartableComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.produceState\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\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.graphics.SolidColor\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalFocusManager\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.platform.LocalSoftwareKeyboardController\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.input.ImeAction\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.UpIcon\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsAdvancedScreen\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsAudioScreen\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsDecoderScreen\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsGesturesScreen\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsPlayerScreen\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsSubtitleScreen\nimport eu.kanade.presentation.util.Screen\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.util.runOnEnterKeyPressed\nimport cafe.adriel.voyager.core.screen.Screen as VoyagerScreen\n\nclass SettingsSearchScreen(\n    val isPlayer: Boolean = false,\n) : Screen() {\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val softKeyboardController = LocalSoftwareKeyboardController.current\n        val focusManager = LocalFocusManager.current\n        val focusRequester = remember { FocusRequester() }\n        val listState = rememberLazyListState()\n\n        // Hide keyboard on change screen\n        DisposableEffect(Unit) {\n            onDispose {\n                softKeyboardController?.hide()\n            }\n        }\n\n        // Hide keyboard on outside text field is touched\n        LaunchedEffect(listState.isScrollInProgress) {\n            if (listState.isScrollInProgress) {\n                focusManager.clearFocus()\n            }\n        }\n\n        // Request text field focus on launch\n        LaunchedEffect(focusRequester) {\n            focusRequester.requestFocus()\n        }\n\n        val textFieldState = rememberTextFieldState()\n        Scaffold(\n            topBar = {\n                Column {\n                    TopAppBar(\n                        navigationIcon = {\n                            val canPop = remember { navigator.canPop }\n                            if (canPop) {\n                                IconButton(onClick = navigator::pop) {\n                                    UpIcon()\n                                }\n                            }\n                        },\n                        title = {\n                            BasicTextField(\n                                state = textFieldState,\n                                modifier = Modifier\n                                    .fillMaxWidth()\n                                    .focusRequester(focusRequester)\n                                    .runOnEnterKeyPressed(action = focusManager::clearFocus),\n                                textStyle = MaterialTheme.typography.bodyLarge\n                                    .copy(color = MaterialTheme.colorScheme.onSurface),\n                                lineLimits = TextFieldLineLimits.SingleLine,\n                                keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),\n                                onKeyboardAction = { focusManager.clearFocus() },\n                                cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),\n                                decorator = {\n                                    if (textFieldState.text.isEmpty()) {\n                                        Text(\n                                            text = stringResource(\n                                                resource = if (isPlayer) {\n                                                    AYMR.strings.action_search_player_settings\n                                                } else {\n                                                    MR.strings.action_search_settings\n                                                },\n                                            ),\n                                            color = MaterialTheme.colorScheme.onSurfaceVariant,\n                                            style = MaterialTheme.typography.bodyLarge,\n                                        )\n                                    }\n                                    it()\n                                },\n                            )\n                        },\n                        actions = {\n                            if (textFieldState.text.isNotEmpty()) {\n                                IconButton(onClick = { textFieldState.clearText() }) {\n                                    Icon(\n                                        imageVector = Icons.Outlined.Close,\n                                        contentDescription = null,\n                                        tint = MaterialTheme.colorScheme.onSurfaceVariant,\n                                    )\n                                }\n                            }\n                        },\n                    )\n                    HorizontalDivider()\n                }\n            },\n        ) { contentPadding ->\n            SearchResult(\n                searchKey = textFieldState.text.toString(),\n                isPlayer = isPlayer,\n                listState = listState,\n                contentPadding = contentPadding,\n            ) { result ->\n                SearchableSettings.highlightKey = result.highlightKey\n                navigator.replace(result.route)\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SearchResult(\n    searchKey: String,\n    isPlayer: Boolean,\n    modifier: Modifier = Modifier,\n    listState: LazyListState = rememberLazyListState(),\n    contentPadding: PaddingValues = PaddingValues(),\n    onItemClick: (SearchResultItem) -> Unit,\n) {\n    if (searchKey.isEmpty()) return\n\n    val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr\n    val context = LocalContext.current\n\n    val index = if (isPlayer) getPlayerIndex() else getIndex() + getPlayerIndex()\n    val result by produceState<List<SearchResultItem>?>(initialValue = null, searchKey) {\n        value = index.asSequence()\n            .flatMap { settingsData ->\n                settingsData.contents.asSequence()\n                    // Only search from enabled prefs and one with valid title\n                    .filter { it.enabled && it.title.isNotBlank() }\n                    // Flatten items contained inside *enabled* PreferenceGroup\n                    .flatMap { p ->\n                        when (p) {\n                            is Preference.PreferenceGroup -> {\n                                if (p.enabled) {\n                                    p.preferenceItems.asSequence()\n                                        .filter { it.enabled && it.title.isNotBlank() }\n                                        .map { p.title to it }\n                                } else {\n                                    emptySequence()\n                                }\n                            }\n                            is Preference.PreferenceItem<*> -> sequenceOf(null to p)\n                        }\n                    }\n                    // Don't show info preference\n                    .filterNot { it.second is Preference.PreferenceItem.InfoPreference }\n                    // Filter by search query\n                    .filter { (_, p) ->\n                        val inTitle = p.title.contains(searchKey, true)\n                        val inSummary = p.subtitle?.contains(searchKey, true) ?: false\n                        inTitle || inSummary\n                    }\n                    // Map result data\n                    .map { (categoryTitle, p) ->\n                        SearchResultItem(\n                            route = settingsData.route,\n                            title = p.title,\n                            breadcrumbs = getLocalizedBreadcrumb(\n                                nodes = buildList {\n                                    if (!isPlayer && settingsData.playerSettings) {\n                                        add(AYMR.strings.label_player_settings.getString(context))\n                                    }\n                                    add(settingsData.title)\n                                    if (categoryTitle != null) add(categoryTitle)\n                                },\n                                isLtr = isLtr,\n                            ),\n                            highlightKey = p.title,\n                        )\n                    }\n            }\n            .take(10) // Just take top 10 result for quicker result\n            .toList()\n    }\n\n    Crossfade(\n        targetState = result,\n        label = \"results\",\n    ) {\n        when {\n            it == null -> {}\n            it.isEmpty() -> {\n                EmptyScreen(stringResource(MR.strings.no_results_found))\n            }\n            else -> {\n                LazyColumn(\n                    modifier = modifier.fillMaxSize(),\n                    state = listState,\n                    contentPadding = contentPadding,\n                    horizontalAlignment = Alignment.CenterHorizontally,\n                ) {\n                    items(\n                        items = it,\n                        key = { i -> i.hashCode() },\n                    ) { item ->\n                        Column(\n                            modifier = Modifier\n                                .fillMaxWidth()\n                                .clickable { onItemClick(item) }\n                                .padding(horizontal = 24.dp, vertical = 14.dp),\n                        ) {\n                            Text(\n                                text = item.title,\n                                overflow = TextOverflow.Ellipsis,\n                                maxLines = 1,\n                                fontWeight = FontWeight.Normal,\n                                style = MaterialTheme.typography.titleMedium,\n                            )\n                            Text(\n                                text = item.breadcrumbs,\n                                modifier = Modifier.paddingFromBaseline(top = 16.dp),\n                                maxLines = 1,\n                                color = MaterialTheme.colorScheme.onSurfaceVariant,\n                                style = MaterialTheme.typography.bodySmall,\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\n@NonRestartableComposable\nprivate fun getIndex() = settingScreens\n    .map { screen ->\n        SettingsData(\n            title = stringResource(screen.getTitleRes()),\n            route = screen,\n            contents = screen.getPreferences(),\n        )\n    }\n\n@Composable\n@NonRestartableComposable\nprivate fun getPlayerIndex() = playerSettingScreens\n    .map { screen ->\n        SettingsData(\n            title = stringResource(screen.getTitleRes()),\n            route = screen,\n            contents = screen.getPreferences(),\n            playerSettings = true,\n        )\n    }\n\nprivate fun getLocalizedBreadcrumb(nodes: List<String>, isLtr: Boolean): String {\n    return if (isLtr) {\n        // This locale reads left to right.\n        nodes.joinToString(\" > \")\n    } else {\n        // This locale reads right to left.\n        nodes.reversed().joinToString(\" < \")\n    }\n}\n\nprivate val playerSettingScreens = listOf(\n    PlayerSettingsPlayerScreen,\n    PlayerSettingsGesturesScreen,\n    PlayerSettingsDecoderScreen,\n    PlayerSettingsSubtitleScreen,\n    PlayerSettingsAudioScreen,\n    PlayerSettingsAdvancedScreen,\n)\n\nprivate val settingScreens = listOf(\n    SettingsAppearanceScreen,\n    SettingsLibraryScreen,\n    SettingsReaderScreen,\n    SettingsDownloadScreen,\n    SettingsTrackingScreen,\n    SettingsBrowseScreen,\n    SettingsDataScreen,\n    SettingsSecurityScreen,\n    SettingsAdvancedScreen,\n)\n\nprivate data class SettingsData(\n    val title: String,\n    val route: VoyagerScreen,\n    val contents: List<Preference>,\n    val playerSettings: Boolean = false,\n)\n\nprivate data class SearchResultItem(\n    val route: VoyagerScreen,\n    val title: String,\n    val breadcrumbs: String,\n    val highlightKey: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.fragment.app.FragmentActivity\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableMap\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject SettingsSecurityScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.pref_category_security\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val context = LocalContext.current\n        val securityPreferences = remember { Injekt.get<SecurityPreferences>() }\n        val authSupported = remember { context.isAuthenticationSupported() }\n\n        val useAuthPref = securityPreferences.useAuthenticator()\n        val useAuth by useAuthPref.collectAsState()\n\n        return listOf(\n            Preference.PreferenceItem.SwitchPreference(\n                preference = useAuthPref,\n                title = stringResource(MR.strings.lock_with_biometrics),\n                enabled = authSupported,\n                onValueChanged = {\n                    (context as FragmentActivity).authenticate(\n                        title = context.stringResource(MR.strings.lock_with_biometrics),\n                    )\n                },\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = securityPreferences.lockAppAfter(),\n                entries = LockAfterValues\n                    .associateWith {\n                        when (it) {\n                            -1 -> stringResource(MR.strings.lock_never)\n                            0 -> stringResource(MR.strings.lock_always)\n                            else -> pluralStringResource(\n                                MR.plurals.lock_after_mins,\n                                count = it,\n                                it,\n                            )\n                        }\n                    }\n                    .toImmutableMap(),\n                title = stringResource(MR.strings.lock_when_idle),\n                enabled = authSupported && useAuth,\n                onValueChanged = {\n                    (context as FragmentActivity).authenticate(\n                        title = context.stringResource(MR.strings.lock_when_idle),\n                    )\n                },\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = securityPreferences.hideNotificationContent(),\n                title = stringResource(MR.strings.hide_notification_content),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = securityPreferences.secureScreen(),\n                entries = SecurityPreferences.SecureScreenMode.entries\n                    .associateWith { stringResource(it.titleRes) }\n                    .toImmutableMap(),\n                title = stringResource(MR.strings.secure_screen),\n            ),\n            Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.secure_screen_summary)),\n        )\n    }\n}\n\nprivate val LockAfterValues = persistentListOf(\n    0, // Always\n    1,\n    2,\n    5,\n    10,\n    -1, // Never\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen\n\nimport android.content.Context\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.fillMaxWidth\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Visibility\nimport androidx.compose.material.icons.filled.VisibilityOff\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material.icons.outlined.HelpOutline\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\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.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.text.input.ImeAction\nimport androidx.compose.ui.text.input.KeyboardType\nimport androidx.compose.ui.text.input.PasswordVisualTransformation\nimport androidx.compose.ui.text.input.TextFieldValue\nimport androidx.compose.ui.text.input.VisualTransformation\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.track.model.AutoTrackState\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.anilist.AnilistApi\nimport eu.kanade.tachiyomi.data.track.bangumi.BangumiApi\nimport eu.kanade.tachiyomi.data.track.myanimelist.MyAnimeListApi\nimport eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi\nimport eu.kanade.tachiyomi.data.track.simkl.SimklApi\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toPersistentMap\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject SettingsTrackingScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = MR.strings.pref_category_tracking\n\n    @Composable\n    override fun RowScope.AppBarAction() {\n        val uriHandler = LocalUriHandler.current\n        IconButton(onClick = { uriHandler.openUri(\"https://aniyomi.org/help/guides/tracking/\") }) {\n            Icon(\n                imageVector = Icons.Outlined.HelpOutline,\n                contentDescription = stringResource(MR.strings.tracking_guide),\n            )\n        }\n    }\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val context = LocalContext.current\n        val trackPreferences = remember { Injekt.get<TrackPreferences>() }\n        val trackerManager = remember { Injekt.get<TrackerManager>() }\n        val mangaSourceManager = remember { Injekt.get<MangaSourceManager>() }\n        val animeSourceManager = remember { Injekt.get<AnimeSourceManager>() }\n        val autoTrackStatePref = trackPreferences.autoUpdateTrackOnMarkRead()\n\n        var dialog by remember { mutableStateOf<Any?>(null) }\n        dialog?.run {\n            when (this) {\n                is LoginDialog -> {\n                    TrackingLoginDialog(\n                        tracker = tracker,\n                        uNameStringRes = uNameStringRes,\n                        onDismissRequest = { dialog = null },\n                    )\n                }\n                is LogoutDialog -> {\n                    TrackingLogoutDialog(\n                        tracker = tracker,\n                        onDismissRequest = { dialog = null },\n                    )\n                }\n            }\n        }\n\n        val enhancedMangaTrackers = trackerManager.trackers\n            .filter { it is EnhancedMangaTracker }\n            .partition { service ->\n                val acceptedMangaSources = (service as EnhancedMangaTracker).getAcceptedSources()\n                mangaSourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedMangaSources }\n            }\n        val enhancedAnimeTrackers = trackerManager.trackers\n            .filter { it is EnhancedAnimeTracker }\n            .partition { service ->\n                val acceptedAnimeSources = (service as EnhancedAnimeTracker).getAcceptedSources()\n                animeSourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedAnimeSources }\n            }\n\n        var enhancedTrackerInfo = stringResource(MR.strings.enhanced_tracking_info)\n        if (enhancedMangaTrackers.second.isNotEmpty() || enhancedAnimeTrackers.second.isNotEmpty()) {\n            val missingSourcesInfo = stringResource(\n                MR.strings.enhanced_services_not_installed,\n                (enhancedMangaTrackers.second + enhancedAnimeTrackers.second).joinToString { it.name },\n            )\n            enhancedTrackerInfo += \"\\n\\n$missingSourcesInfo\"\n        }\n\n        return listOf(\n            Preference.PreferenceItem.SwitchPreference(\n                preference = trackPreferences.autoUpdateTrack(),\n                title = stringResource(AYMR.strings.pref_auto_update_manga_sync),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = trackPreferences.trackOnAddingToLibrary(),\n                title = stringResource(AYMR.strings.pref_track_on_add_library),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = trackPreferences.showNextEpisodeAiringTime(),\n                title = stringResource(AYMR.strings.pref_show_next_episode_airing_time),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = trackPreferences.autoUpdateTrackOnMarkRead(),\n                entries = AutoTrackState.entries\n                    .associateWith { stringResource(it.titleRes) }\n                    .toPersistentMap(),\n                title = stringResource(AYMR.strings.pref_auto_update_manga_on_mark_read),\n            ),\n            Preference.PreferenceGroup(\n                title = stringResource(MR.strings.services),\n                preferenceItems = persistentListOf(\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.myAnimeList,\n                        login = {\n                            context.openInBrowser(\n                                MyAnimeListApi.authUrl(),\n                                forceDefaultBrowser = true,\n                            )\n                        },\n                        logout = { dialog = LogoutDialog(trackerManager.myAnimeList) },\n                    ),\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.aniList,\n                        login = {\n                            context.openInBrowser(\n                                AnilistApi.authUrl(),\n                                forceDefaultBrowser = true,\n                            )\n                        },\n                        logout = { dialog = LogoutDialog(trackerManager.aniList) },\n                    ),\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.kitsu,\n                        login = { dialog = LoginDialog(trackerManager.kitsu, MR.strings.email) },\n                        logout = { dialog = LogoutDialog(trackerManager.kitsu) },\n                    ),\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.mangaUpdates,\n                        login = { dialog = LoginDialog(trackerManager.mangaUpdates, MR.strings.username) },\n                        logout = { dialog = LogoutDialog(trackerManager.mangaUpdates) },\n                    ),\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.shikimori,\n                        login = {\n                            context.openInBrowser(\n                                ShikimoriApi.authUrl(),\n                                forceDefaultBrowser = true,\n                            )\n                        },\n                        logout = { dialog = LogoutDialog(trackerManager.shikimori) },\n                    ),\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.simkl,\n                        login = {\n                            context.openInBrowser(\n                                SimklApi.authUrl(),\n                                forceDefaultBrowser = true,\n                            )\n                        },\n                        logout = { dialog = LogoutDialog(trackerManager.simkl) },\n                    ),\n                    Preference.PreferenceItem.TrackerPreference(\n                        tracker = trackerManager.bangumi,\n                        login = {\n                            context.openInBrowser(\n                                BangumiApi.authUrl(),\n                                forceDefaultBrowser = true,\n                            )\n                        },\n                        logout = { dialog = LogoutDialog(trackerManager.bangumi) },\n                    ),\n                    Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.tracking_info)),\n                ),\n            ),\n            Preference.PreferenceGroup(\n                title = stringResource(MR.strings.enhanced_services),\n                preferenceItems = (\n                    enhancedMangaTrackers.first\n                        .map { service ->\n                            Preference.PreferenceItem.TrackerPreference(\n                                tracker = service,\n                                login = { (service as EnhancedMangaTracker).loginNoop() },\n                                logout = service::logout,\n                            )\n                        } +\n                        enhancedAnimeTrackers.first\n                            .map { service ->\n                                Preference.PreferenceItem.TrackerPreference(\n                                    tracker = service,\n                                    login = { (service as EnhancedAnimeTracker).loginNoop() },\n                                    logout = service::logout,\n                                )\n                            } + listOf(Preference.PreferenceItem.InfoPreference(enhancedTrackerInfo))\n                    ).toImmutableList(),\n            ),\n        )\n    }\n\n    @Composable\n    private fun TrackingLoginDialog(\n        tracker: Tracker,\n        uNameStringRes: StringResource,\n        onDismissRequest: () -> Unit,\n    ) {\n        val context = LocalContext.current\n        val scope = rememberCoroutineScope()\n\n        var username by remember { mutableStateOf(TextFieldValue(tracker.getUsername())) }\n        var password by remember { mutableStateOf(TextFieldValue(tracker.getPassword())) }\n        var processing by remember { mutableStateOf(false) }\n        var inputError by remember { mutableStateOf(false) }\n\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = {\n                Row(verticalAlignment = Alignment.CenterVertically) {\n                    Text(\n                        text = stringResource(MR.strings.login_title, tracker.name),\n                        modifier = Modifier.weight(1f),\n                    )\n                    IconButton(onClick = onDismissRequest) {\n                        Icon(\n                            imageVector = Icons.Outlined.Close,\n                            contentDescription = stringResource(MR.strings.action_close),\n                        )\n                    }\n                }\n            },\n            text = {\n                Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {\n                    OutlinedTextField(\n                        modifier = Modifier.fillMaxWidth(),\n                        value = username,\n                        onValueChange = { username = it },\n                        label = { Text(text = stringResource(uNameStringRes)) },\n                        keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),\n                        singleLine = true,\n                        isError = inputError && !processing,\n                    )\n\n                    var hidePassword by remember { mutableStateOf(true) }\n                    OutlinedTextField(\n                        modifier = Modifier.fillMaxWidth(),\n                        value = password,\n                        onValueChange = { password = it },\n                        label = { Text(text = stringResource(MR.strings.password)) },\n                        trailingIcon = {\n                            IconButton(onClick = { hidePassword = !hidePassword }) {\n                                Icon(\n                                    imageVector = if (hidePassword) {\n                                        Icons.Filled.Visibility\n                                    } else {\n                                        Icons.Filled.VisibilityOff\n                                    },\n                                    contentDescription = null,\n                                )\n                            }\n                        },\n                        visualTransformation = if (hidePassword) {\n                            PasswordVisualTransformation()\n                        } else {\n                            VisualTransformation.None\n                        },\n                        keyboardOptions = KeyboardOptions(\n                            keyboardType = KeyboardType.Password,\n                            imeAction = ImeAction.Done,\n                        ),\n                        singleLine = true,\n                        isError = inputError && !processing,\n                    )\n                }\n            },\n            confirmButton = {\n                Button(\n                    modifier = Modifier.fillMaxWidth(),\n                    enabled = !processing && username.text.isNotBlank() && password.text.isNotBlank(),\n                    onClick = {\n                        scope.launchIO {\n                            processing = true\n                            val result = checkLogin(\n                                context = context,\n                                tracker = tracker,\n                                username = username.text,\n                                password = password.text,\n                            )\n                            inputError = !result\n                            if (result) onDismissRequest()\n                            processing = false\n                        }\n                    },\n                ) {\n                    val id = if (processing) MR.strings.loading else MR.strings.login\n                    Text(text = stringResource(id))\n                }\n            },\n        )\n    }\n\n    private suspend fun checkLogin(\n        context: Context,\n        tracker: Tracker,\n        username: String,\n        password: String,\n    ): Boolean {\n        return try {\n            tracker.login(username, password)\n            withUIContext { context.toast(MR.strings.login_success) }\n            true\n        } catch (e: Throwable) {\n            tracker.logout()\n            withUIContext { context.toast(e.message.toString()) }\n            false\n        }\n    }\n\n    @Composable\n    private fun TrackingLogoutDialog(\n        tracker: Tracker,\n        onDismissRequest: () -> Unit,\n    ) {\n        val context = LocalContext.current\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = {\n                Text(\n                    text = stringResource(MR.strings.logout_title, tracker.name),\n                    textAlign = TextAlign.Center,\n                    modifier = Modifier.fillMaxWidth(),\n                )\n            },\n            confirmButton = {\n                Row(horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall)) {\n                    OutlinedButton(\n                        modifier = Modifier.weight(1f),\n                        onClick = onDismissRequest,\n                    ) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    Button(\n                        modifier = Modifier.weight(1f),\n                        onClick = {\n                            tracker.logout()\n                            onDismissRequest()\n                            context.toast(MR.strings.logout_success)\n                        },\n                        colors = ButtonDefaults.buttonColors(\n                            containerColor = MaterialTheme.colorScheme.error,\n                            contentColor = MaterialTheme.colorScheme.onError,\n                        ),\n                    ) {\n                        Text(text = stringResource(MR.strings.logout))\n                    }\n                }\n            },\n        )\n    }\n}\n\nprivate data class LoginDialog(\n    val tracker: Tracker,\n    val uNameStringRes: StringResource,\n)\n\nprivate data class LogoutDialog(\n    val tracker: Tracker,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.about\n\nimport android.content.Context\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.layout.Arrangement\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.Public\nimport androidx.compose.material3.CircularProgressIndicator\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.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.more.LogoHeader\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.presentation.util.LocalBackPress\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.updater.AppUpdateChecker\nimport eu.kanade.tachiyomi.data.updater.RELEASE_URL\nimport eu.kanade.tachiyomi.ui.more.NewUpdateScreen\nimport eu.kanade.tachiyomi.util.CrashLogUtil\nimport eu.kanade.tachiyomi.util.lang.toDateTimestampString\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport eu.kanade.tachiyomi.util.system.isPreviewBuildType\nimport eu.kanade.tachiyomi.util.system.toast\nimport eu.kanade.tachiyomi.util.system.updaterEnabled\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.release.interactor.GetApplicationRelease\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.LinkIcon\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.icons.CustomIcons\nimport tachiyomi.presentation.core.icons.Discord\nimport tachiyomi.presentation.core.icons.Github\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.LocalDateTime\nimport java.time.ZoneId\n\nobject AboutScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val scope = rememberCoroutineScope()\n        val context = LocalContext.current\n        val uriHandler = LocalUriHandler.current\n        val handleBack = LocalBackPress.current\n        val navigator = LocalNavigator.currentOrThrow\n        var isCheckingUpdates by remember { mutableStateOf(false) }\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(MR.strings.pref_category_about),\n                    navigateUp = if (handleBack != null) handleBack::invoke else null,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { contentPadding ->\n            ScrollbarLazyColumn(\n                contentPadding = contentPadding,\n            ) {\n                item {\n                    LogoHeader()\n                }\n\n                item {\n                    TextPreferenceWidget(\n                        title = stringResource(MR.strings.version),\n                        subtitle = getVersionName(withBuildDate = true),\n                        onPreferenceClick = {\n                            val deviceInfo = CrashLogUtil(context).getDebugInfo()\n                            context.copyToClipboard(\"Debug information\", deviceInfo)\n                        },\n                    )\n                }\n\n                if (updaterEnabled) {\n                    item {\n                        TextPreferenceWidget(\n                            title = stringResource(MR.strings.check_for_updates),\n                            widget = {\n                                AnimatedVisibility(visible = isCheckingUpdates) {\n                                    CircularProgressIndicator(\n                                        modifier = Modifier.size(28.dp),\n                                        strokeWidth = 3.dp,\n                                    )\n                                }\n                            },\n                            onPreferenceClick = {\n                                if (!isCheckingUpdates) {\n                                    scope.launch {\n                                        isCheckingUpdates = true\n\n                                        checkVersion(\n                                            context = context,\n                                            onAvailableUpdate = { result ->\n                                                val updateScreen = NewUpdateScreen(\n                                                    versionName = result.release.version,\n                                                    changelogInfo = result.release.info,\n                                                    releaseLink = result.release.releaseLink,\n                                                    downloadLink = result.release.downloadLink,\n                                                )\n                                                navigator.push(updateScreen)\n                                            },\n                                            onFinish = {\n                                                isCheckingUpdates = false\n                                            },\n                                        )\n                                    }\n                                }\n                            },\n                        )\n                    }\n                }\n\n                if (!BuildConfig.DEBUG) {\n                    item {\n                        TextPreferenceWidget(\n                            title = stringResource(MR.strings.whats_new),\n                            onPreferenceClick = { uriHandler.openUri(RELEASE_URL) },\n                        )\n                    }\n                }\n\n                item {\n                    TextPreferenceWidget(\n                        title = stringResource(MR.strings.help_translate),\n                        onPreferenceClick = {\n                            uriHandler.openUri(\n                                \"https://aniyomi.org/docs/contribute#translation\",\n                            )\n                        },\n                    )\n                }\n\n                item {\n                    TextPreferenceWidget(\n                        title = stringResource(MR.strings.licenses),\n                        onPreferenceClick = { navigator.push(OpenSourceLicensesScreen()) },\n                    )\n                }\n\n                item {\n                    TextPreferenceWidget(\n                        title = stringResource(MR.strings.privacy_policy),\n                        onPreferenceClick = { uriHandler.openUri(\"https://aniyomi.org/privacy/\") },\n                    )\n                }\n\n                item {\n                    Row(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(vertical = 8.dp),\n                        horizontalArrangement = Arrangement.Center,\n                    ) {\n                        LinkIcon(\n                            label = stringResource(MR.strings.website),\n                            icon = Icons.Outlined.Public,\n                            url = \"https://aniyomi.org\",\n                        )\n                        LinkIcon(\n                            label = \"Discord\",\n                            icon = CustomIcons.Discord,\n                            url = \"https://discord.gg/F32UjdJZrR\",\n                        )\n                        LinkIcon(\n                            label = \"GitHub\",\n                            icon = CustomIcons.Github,\n                            url = \"https://github.com/aniyomiorg/aniyomi\",\n                        )\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Checks version and shows a user prompt if an update is available.\n     */\n    private suspend fun checkVersion(\n        context: Context,\n        onAvailableUpdate: (GetApplicationRelease.Result.NewUpdate) -> Unit,\n        onFinish: () -> Unit,\n    ) {\n        val updateChecker = AppUpdateChecker()\n        withUIContext {\n            try {\n                when (\n                    val result = withIOContext {\n                        updateChecker.checkForUpdate(\n                            context,\n                            forceCheck = true,\n                        )\n                    }\n                ) {\n                    is GetApplicationRelease.Result.NewUpdate -> {\n                        onAvailableUpdate(result)\n                    }\n                    is GetApplicationRelease.Result.NoNewUpdate -> {\n                        context.toast(MR.strings.update_check_no_new_updates)\n                    }\n                    is GetApplicationRelease.Result.OsTooOld -> {\n                        context.toast(MR.strings.update_check_eol)\n                    }\n                    else -> {}\n                }\n            } catch (e: Exception) {\n                context.toast(e.message)\n                logcat(LogPriority.ERROR, e)\n            } finally {\n                onFinish()\n            }\n        }\n    }\n\n    fun getVersionName(withBuildDate: Boolean): String {\n        return when {\n            BuildConfig.DEBUG -> {\n                \"Debug ${BuildConfig.COMMIT_SHA}\".let {\n                    if (withBuildDate) {\n                        \"$it (${getFormattedBuildTime()})\"\n                    } else {\n                        it\n                    }\n                }\n            }\n            isPreviewBuildType -> {\n                \"Preview r${BuildConfig.COMMIT_COUNT}\".let {\n                    if (withBuildDate) {\n                        \"$it (${BuildConfig.COMMIT_SHA}, ${getFormattedBuildTime()})\"\n                    } else {\n                        \"$it (${BuildConfig.COMMIT_SHA})\"\n                    }\n                }\n            }\n            else -> {\n                \"Stable ${BuildConfig.VERSION_NAME}\".let {\n                    if (withBuildDate) {\n                        \"$it (${getFormattedBuildTime()})\"\n                    } else {\n                        it\n                    }\n                }\n            }\n        }\n    }\n\n    internal fun getFormattedBuildTime(): String {\n        return try {\n            LocalDateTime.ofInstant(\n                Instant.parse(BuildConfig.BUILD_TIME),\n                ZoneId.systemDefault(),\n            )\n                .toDateTimestampString(\n                    UiPreferences.dateFormat(\n                        Injekt.get<UiPreferences>().dateFormat().get(),\n                    ),\n                )\n        } catch (e: Exception) {\n            BuildConfig.BUILD_TIME\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.about\n\nimport androidx.compose.foundation.layout.Column\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.Public\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.viewinterop.AndroidView\nimport androidx.core.text.HtmlCompat\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport com.google.android.material.textview.MaterialTextView\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.util.Screen\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\n\nclass OpenSourceLibraryLicenseScreen(\n    private val name: String,\n    private val website: String?,\n    private val license: String,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val uriHandler = LocalUriHandler.current\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = name,\n                    navigateUp = navigator::pop,\n                    actions = {\n                        if (!website.isNullOrEmpty()) {\n                            AppBarActions(\n                                persistentListOf(\n                                    AppBar.Action(\n                                        title = stringResource(MR.strings.website),\n                                        icon = Icons.Default.Public,\n                                        onClick = { uriHandler.openUri(website) },\n                                    ),\n                                ),\n                            )\n                        }\n                    },\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            Column(\n                modifier = Modifier\n                    .verticalScroll(rememberScrollState())\n                    .padding(contentPadding)\n                    .padding(16.dp),\n            ) {\n                HtmlLicenseText(html = license)\n            }\n        }\n    }\n\n    @Composable\n    private fun HtmlLicenseText(html: String) {\n        AndroidView(\n            factory = {\n                MaterialTextView(it)\n            },\n            update = {\n                it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT)\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.about\n\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer\nimport com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\n\nclass OpenSourceLicensesScreen : Screen() {\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(MR.strings.licenses),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { contentPadding ->\n            LibrariesContainer(\n                modifier = Modifier\n                    .fillMaxSize(),\n                contentPadding = contentPadding,\n                onLibraryClick = {\n                    navigator.push(\n                        OpenSourceLibraryLicenseScreen(\n                            name = it.name,\n                            website = it.website,\n                            license = it.licenses.firstOrNull()?.htmlReadyLicenseContent.orEmpty(),\n                        ),\n                    )\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearAnimeDatabaseScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.advanced\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\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.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FlipToBack\nimport androidx.compose.material.icons.outlined.SelectAll\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastMap\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.components.AnimeSourceIcon\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.data.source.anime.mapSourceToDomainSource\nimport tachiyomi.domain.source.anime.interactor.GetAnimeSourcesWithNonLibraryAnime\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.domain.source.anime.model.AnimeSourceWithIds\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.mi.data.AnimeDatabase\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.util.selectedBackground\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass ClearAnimeDatabaseScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val model = rememberScreenModel { ClearAnimeDatabaseScreenModel() }\n        val state by model.state.collectAsState()\n        val scope = rememberCoroutineScope()\n\n        when (val s = state) {\n            is ClearAnimeDatabaseScreenModel.State.Loading -> LoadingScreen()\n            is ClearAnimeDatabaseScreenModel.State.Ready -> {\n                if (s.showConfirmation) {\n                    AlertDialog(\n                        onDismissRequest = model::hideConfirmation,\n                        confirmButton = {\n                            TextButton(\n                                onClick = {\n                                    scope.launchUI {\n                                        model.removeAnimeBySourceId()\n                                        model.clearSelection()\n                                        model.hideConfirmation()\n                                        context.toast(MR.strings.clear_database_completed)\n                                    }\n                                },\n                            ) {\n                                Text(text = stringResource(MR.strings.action_ok))\n                            }\n                        },\n                        dismissButton = {\n                            TextButton(onClick = model::hideConfirmation) {\n                                Text(text = stringResource(MR.strings.action_cancel))\n                            }\n                        },\n                        text = {\n                            Text(text = stringResource(AYMR.strings.clear_database_confirmation))\n                        },\n                    )\n                }\n\n                Scaffold(\n                    topBar = { scrollBehavior ->\n                        AppBar(\n                            title = stringResource(AYMR.strings.pref_clear_anime_database),\n                            navigateUp = navigator::pop,\n                            actions = {\n                                if (s.items.isNotEmpty()) {\n                                    AppBarActions(\n                                        actions = persistentListOf(\n                                            AppBar.Action(\n                                                title = stringResource(MR.strings.action_select_all),\n                                                icon = Icons.Outlined.SelectAll,\n                                                onClick = model::selectAll,\n                                            ),\n                                            AppBar.Action(\n                                                title = stringResource(MR.strings.action_select_all),\n                                                icon = Icons.Outlined.FlipToBack,\n                                                onClick = model::invertSelection,\n                                            ),\n                                        ),\n                                    )\n                                }\n                            },\n                            scrollBehavior = scrollBehavior,\n                        )\n                    },\n                ) { contentPadding ->\n                    if (s.items.isEmpty()) {\n                        EmptyScreen(\n                            message = stringResource(MR.strings.database_clean),\n                            modifier = Modifier.padding(contentPadding),\n                        )\n                    } else {\n                        Column(\n                            modifier = Modifier\n                                .padding(contentPadding)\n                                .fillMaxSize(),\n                        ) {\n                            LazyColumn(\n                                modifier = Modifier.weight(1f),\n                            ) {\n                                items(s.items) { sourceWithCount ->\n                                    ClearDatabaseItem(\n                                        source = sourceWithCount.source,\n                                        count = sourceWithCount.count,\n                                        isSelected = s.selection.contains(sourceWithCount.id),\n                                        onClickSelect = {\n                                            model.toggleSelection(\n                                                sourceWithCount.source,\n                                            )\n                                        },\n                                    )\n                                }\n                            }\n\n                            HorizontalDivider()\n\n                            Button(\n                                modifier = Modifier\n                                    .padding(horizontal = 16.dp, vertical = 8.dp)\n                                    .fillMaxWidth(),\n                                onClick = model::showConfirmation,\n                                enabled = s.selection.isNotEmpty(),\n                            ) {\n                                Text(\n                                    text = stringResource(MR.strings.action_delete),\n                                    color = MaterialTheme.colorScheme.onPrimary,\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @Composable\n    private fun ClearDatabaseItem(\n        source: AnimeSource,\n        count: Long,\n        isSelected: Boolean,\n        onClickSelect: () -> Unit,\n    ) {\n        Row(\n            modifier = Modifier\n                .selectedBackground(isSelected)\n                .clickable(onClick = onClickSelect)\n                .padding(horizontal = 8.dp)\n                .height(56.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            AnimeSourceIcon(source = source)\n            Column(\n                modifier = Modifier\n                    .padding(start = 8.dp)\n                    .weight(1f),\n            ) {\n                Text(\n                    text = source.visualName,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n                Text(text = stringResource(MR.strings.clear_database_source_item_count, count))\n            }\n            Checkbox(\n                checked = isSelected,\n                onCheckedChange = { onClickSelect() },\n            )\n        }\n    }\n}\n\nprivate class ClearAnimeDatabaseScreenModel : StateScreenModel<ClearAnimeDatabaseScreenModel.State>(\n    State.Loading,\n) {\n    private val getSourcesWithNonLibraryAnime: GetAnimeSourcesWithNonLibraryAnime = Injekt.get()\n    private val database: AnimeDatabase = Injekt.get()\n    private val sourceManager: AnimeSourceManager = Injekt.get()\n\n    init {\n        screenModelScope.launchIO {\n            getSourcesWithNonLibraryAnime.subscribe()\n                .collectLatest { list ->\n                    val items = list.groupBy { it.sourceId }\n                        .map { (sourceId, deletableAnime) ->\n                            val source = sourceManager.getOrStub(sourceId)\n                            val domainSource = mapSourceToDomainSource(source).copy(\n                                isStub = source is StubAnimeSource,\n                            )\n\n                            val ids = mutableListOf<Long>()\n                            val orphaned = mutableListOf<Long>()\n\n                            deletableAnime.forEach {\n                                ids.add(it.animeId)\n                                if (it.fetchType == FetchType.Seasons) {\n                                    val (childrenIds, orphanedIds) = getDeletableChildren(it.animeId)\n                                    ids.addAll(childrenIds)\n                                    orphaned.addAll(orphanedIds)\n                                }\n                            }\n\n                            AnimeSourceWithIds(domainSource, ids, orphaned)\n                        }\n\n                    mutableState.update { old ->\n                        val items = items.sortedBy { it.name }\n                        when (old) {\n                            State.Loading -> State.Ready(items)\n                            is State.Ready -> old.copy(items = items)\n                        }\n                    }\n                }\n        }\n    }\n\n    /**\n     * Get all children of an anime that can be deleted, as well as any orphans.\n     * Children that are favorited needs their parentId removed or else they won't be\n     * able to be removed later.\n     */\n    private suspend fun getDeletableChildren(animeId: Long): Pair<List<Long>, List<Long>> {\n        val ids = mutableListOf<Long>()\n        val orphaned = mutableListOf<Long>()\n        val children = getSourcesWithNonLibraryAnime.getDeletableChildren(animeId)\n        children.forEach { c ->\n            if (c.favorite) {\n                orphaned.add(c.id)\n            } else {\n                ids.add(c.id)\n                if (c.fetchType == FetchType.Seasons) {\n                    val (childrenIds, orphanedIds) = getDeletableChildren(c.id)\n                    ids.addAll(childrenIds)\n                    orphaned.addAll(orphanedIds)\n                }\n            }\n        }\n        return Pair(ids, orphaned)\n    }\n\n    suspend fun removeAnimeBySourceId() = withNonCancellableContext {\n        val state = state.value as? State.Ready ?: return@withNonCancellableContext\n        val selected = state.items.filter { it.id in state.selection }\n\n        val animeIds = selected.flatMap { it.ids }\n        val orphaned = selected.flatMap { it.orphaned }\n            .filterNot { it in animeIds }\n\n        database.animesQueries.deleteAnimesNotInLibraryByAnimeIds(animeIds)\n        database.animesQueries.removeParentIdByIds(orphaned)\n        database.animehistoryQueries.removeResettedHistory()\n    }\n\n    fun toggleSelection(source: AnimeSource) = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        val mutableList = state.selection.toMutableList()\n        if (mutableList.contains(source.id)) {\n            mutableList.remove(source.id)\n        } else {\n            mutableList.add(source.id)\n        }\n        state.copy(selection = mutableList)\n    }\n\n    fun clearSelection() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(selection = emptyList())\n    }\n\n    fun selectAll() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(selection = state.items.fastMap { it.id })\n    }\n\n    fun invertSelection() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(\n            selection = state.items\n                .fastMap { it.id }\n                .filterNot { it in state.selection },\n        )\n    }\n\n    fun showConfirmation() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(showConfirmation = true)\n    }\n\n    fun hideConfirmation() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(showConfirmation = false)\n    }\n\n    sealed interface State {\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data class Ready(\n            val items: List<AnimeSourceWithIds>,\n            val selection: List<Long> = emptyList(),\n            val showConfirmation: Boolean = false,\n        ) : State\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.advanced\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FlipToBack\nimport androidx.compose.material.icons.outlined.SelectAll\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastMap\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.components.MangaSourceIcon\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.data.Database\nimport tachiyomi.domain.source.manga.interactor.GetMangaSourcesWithNonLibraryManga\nimport tachiyomi.domain.source.manga.model.MangaSourceWithCount\nimport tachiyomi.domain.source.manga.model.Source\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.LazyColumnWithAction\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.util.selectedBackground\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass ClearDatabaseScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val model = rememberScreenModel { ClearDatabaseScreenModel() }\n        val state by model.state.collectAsState()\n        val scope = rememberCoroutineScope()\n\n        when (val s = state) {\n            is ClearDatabaseScreenModel.State.Loading -> LoadingScreen()\n            is ClearDatabaseScreenModel.State.Ready -> {\n                if (s.showConfirmation) {\n                    AlertDialog(\n                        onDismissRequest = model::hideConfirmation,\n                        confirmButton = {\n                            TextButton(\n                                onClick = {\n                                    scope.launchUI {\n                                        model.removeMangaBySourceId()\n                                        model.clearSelection()\n                                        model.hideConfirmation()\n                                        context.toast(MR.strings.clear_database_completed)\n                                    }\n                                },\n                            ) {\n                                Text(text = stringResource(MR.strings.action_ok))\n                            }\n                        },\n                        dismissButton = {\n                            TextButton(onClick = model::hideConfirmation) {\n                                Text(text = stringResource(MR.strings.action_cancel))\n                            }\n                        },\n                        text = {\n                            Text(text = stringResource(AYMR.strings.clear_database_confirmation))\n                        },\n                    )\n                }\n\n                Scaffold(\n                    topBar = { scrollBehavior ->\n                        AppBar(\n                            title = stringResource(AYMR.strings.pref_clear_manga_database),\n                            navigateUp = navigator::pop,\n                            actions = {\n                                if (s.items.isNotEmpty()) {\n                                    AppBarActions(\n                                        actions = persistentListOf(\n                                            AppBar.Action(\n                                                title = stringResource(MR.strings.action_select_all),\n                                                icon = Icons.Outlined.SelectAll,\n                                                onClick = model::selectAll,\n                                            ),\n                                            AppBar.Action(\n                                                title = stringResource(MR.strings.action_select_inverse),\n                                                icon = Icons.Outlined.FlipToBack,\n                                                onClick = model::invertSelection,\n                                            ),\n                                        ),\n                                    )\n                                }\n                            },\n                            scrollBehavior = scrollBehavior,\n                        )\n                    },\n                ) { contentPadding ->\n                    if (s.items.isEmpty()) {\n                        EmptyScreen(\n                            message = stringResource(MR.strings.database_clean),\n                            modifier = Modifier.padding(contentPadding),\n                        )\n                    } else {\n                        LazyColumnWithAction(\n                            contentPadding = contentPadding,\n                            actionLabel = stringResource(MR.strings.action_delete),\n                            actionEnabled = s.selection.isNotEmpty(),\n                            onClickAction = model::showConfirmation,\n                        ) {\n                            items(s.items) { sourceWithCount ->\n                                ClearDatabaseItem(\n                                    source = sourceWithCount.source,\n                                    count = sourceWithCount.count,\n                                    isSelected = s.selection.contains(sourceWithCount.id),\n                                    onClickSelect = { model.toggleSelection(sourceWithCount.source) },\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @Composable\n    private fun ClearDatabaseItem(\n        source: Source,\n        count: Long,\n        isSelected: Boolean,\n        onClickSelect: () -> Unit,\n    ) {\n        Row(\n            modifier = Modifier\n                .selectedBackground(isSelected)\n                .clickable(onClick = onClickSelect)\n                .padding(horizontal = 8.dp)\n                .height(56.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            MangaSourceIcon(source = source)\n            Column(\n                modifier = Modifier\n                    .padding(start = 8.dp)\n                    .weight(1f),\n            ) {\n                Text(\n                    text = source.visualName,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n                Text(text = stringResource(MR.strings.clear_database_source_item_count, count))\n            }\n            Checkbox(\n                checked = isSelected,\n                onCheckedChange = { onClickSelect() },\n            )\n        }\n    }\n}\n\nprivate class ClearDatabaseScreenModel : StateScreenModel<ClearDatabaseScreenModel.State>(\n    State.Loading,\n) {\n    private val getSourcesWithNonLibraryManga: GetMangaSourcesWithNonLibraryManga = Injekt.get()\n    private val database: Database = Injekt.get()\n\n    init {\n        screenModelScope.launchIO {\n            getSourcesWithNonLibraryManga.subscribe()\n                .collectLatest { list ->\n                    mutableState.update { old ->\n                        val items = list.sortedBy { it.name }\n                        when (old) {\n                            State.Loading -> State.Ready(items)\n                            is State.Ready -> old.copy(items = items)\n                        }\n                    }\n                }\n        }\n    }\n\n    suspend fun removeMangaBySourceId() = withNonCancellableContext {\n        val state = state.value as? State.Ready ?: return@withNonCancellableContext\n        database.mangasQueries.deleteMangasNotInLibraryBySourceIds(state.selection)\n        database.historyQueries.removeResettedHistory()\n    }\n\n    fun toggleSelection(source: Source) = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        val mutableList = state.selection.toMutableList()\n        if (mutableList.contains(source.id)) {\n            mutableList.remove(source.id)\n        } else {\n            mutableList.add(source.id)\n        }\n        state.copy(selection = mutableList)\n    }\n\n    fun clearSelection() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(selection = emptyList())\n    }\n\n    fun selectAll() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(selection = state.items.fastMap { it.id })\n    }\n\n    fun invertSelection() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(\n            selection = state.items\n                .fastMap { it.id }\n                .filterNot { it in state.selection },\n        )\n    }\n\n    fun showConfirmation() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(showConfirmation = true)\n    }\n\n    fun hideConfirmation() = mutableState.update { state ->\n        if (state !is State.Ready) return@update state\n        state.copy(showConfirmation = false)\n    }\n\n    sealed interface State {\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data class Ready(\n            val items: List<MangaSourceWithCount>,\n            val selection: List<Long> = emptyList(),\n            val showConfirmation: Boolean = false,\n        ) : State\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/appearance/AppLanguageScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.appearance\n\nimport android.content.Context\nimport androidx.appcompat.app.AppCompatDelegate\nimport androidx.compose.foundation.clickable\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.filled.Check\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.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.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.core.os.LocaleListCompat\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport org.xmlpull.v1.XmlPullParser\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\n\nclass AppLanguageScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val langs = remember { getLangs(context) }\n        var currentLanguage by remember {\n            mutableStateOf(AppCompatDelegate.getApplicationLocales().get(0)?.toLanguageTag() ?: \"\")\n        }\n\n        LaunchedEffect(currentLanguage) {\n            val locale = if (currentLanguage.isEmpty()) {\n                LocaleListCompat.getEmptyLocaleList()\n            } else {\n                LocaleListCompat.forLanguageTags(currentLanguage)\n            }\n            AppCompatDelegate.setApplicationLocales(locale)\n        }\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(MR.strings.pref_app_language),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { contentPadding ->\n            LazyColumn(\n                modifier = Modifier.padding(contentPadding),\n            ) {\n                items(langs) {\n                    ListItem(\n                        modifier = Modifier.clickable {\n                            currentLanguage = it.langTag\n                        },\n                        headlineContent = { Text(it.displayName) },\n                        supportingContent = {\n                            it.localizedDisplayName?.let {\n                                Text(it)\n                            }\n                        },\n                        trailingContent = {\n                            if (currentLanguage == it.langTag) {\n                                Icon(\n                                    imageVector = Icons.Default.Check,\n                                    contentDescription = null,\n                                    tint = MaterialTheme.colorScheme.primary,\n                                )\n                            }\n                        },\n                    )\n                }\n            }\n        }\n    }\n\n    private fun getLangs(context: Context): ImmutableList<Language> {\n        val langs = mutableListOf<Language>()\n        val parser = context.resources.getXml(R.xml.locales_config)\n        var eventType = parser.eventType\n        while (eventType != XmlPullParser.END_DOCUMENT) {\n            if (eventType == XmlPullParser.START_TAG && parser.name == \"locale\") {\n                for (i in 0..<parser.attributeCount) {\n                    if (parser.getAttributeName(i) == \"name\") {\n                        val langTag = parser.getAttributeValue(i)\n                        val displayName = LocaleHelper.getLocalizedDisplayName(langTag)\n                        if (displayName.isNotEmpty()) {\n                            langs.add(Language(langTag, displayName, LocaleHelper.getDisplayName(langTag)))\n                        }\n                    }\n                }\n            }\n            eventType = parser.next()\n        }\n\n        langs.sortBy { it.displayName }\n        langs.add(0, Language(\"\", context.stringResource(MR.strings.label_default), null))\n\n        return langs.toImmutableList()\n    }\n\n    private data class Language(\n        val langTag: String,\n        val displayName: String,\n        val localizedDisplayName: String?,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/AnimeExtensionReposScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.browse\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoConfirmDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoConflictDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoCreateDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoDeleteDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionReposScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass AnimeExtensionReposScreen(\n    private val url: String? = null,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { AnimeExtensionReposScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        LaunchedEffect(url) {\n            url?.let { screenModel.showDialog(RepoDialog.Confirm(it)) }\n        }\n\n        if (state is RepoScreenState.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as RepoScreenState.Success\n\n        ExtensionReposScreen(\n            state = successState,\n            onClickCreate = { screenModel.showDialog(RepoDialog.Create) },\n            onOpenWebsite = { context.openInBrowser(it.website) },\n            onClickDelete = { screenModel.showDialog(RepoDialog.Delete(it)) },\n            onClickRefresh = { screenModel.refreshRepos() },\n            navigateUp = navigator::pop,\n        )\n\n        when (val dialog = successState.dialog) {\n            null -> {}\n            is RepoDialog.Create -> {\n                ExtensionRepoCreateDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onCreate = { screenModel.createRepo(it) },\n                    repoUrls = successState.repos.map { it.baseUrl }.toImmutableSet(),\n                )\n            }\n            is RepoDialog.Delete -> {\n                ExtensionRepoDeleteDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onDelete = { screenModel.deleteRepo(dialog.repo) },\n                    repo = dialog.repo,\n                )\n            }\n            is RepoDialog.Conflict -> {\n                ExtensionRepoConflictDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onMigrate = { screenModel.replaceRepo(dialog.newRepo) },\n                    oldRepo = dialog.oldRepo,\n                    newRepo = dialog.newRepo,\n                )\n            }\n            is RepoDialog.Confirm -> {\n                ExtensionRepoConfirmDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onCreate = { screenModel.createRepo(dialog.url) },\n                    repo = dialog.url,\n                )\n            }\n        }\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                if (event is RepoEvent.LocalizedMessage) {\n                    context.toast(event.stringRes)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/AnimeExtensionReposScreenModel.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.browse\n\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport mihon.domain.extensionrepo.anime.interactor.CreateAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.DeleteAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.ReplaceAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.UpdateAnimeExtensionRepo\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.core.common.util.lang.launchIO\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeExtensionReposScreenModel(\n    private val getExtensionRepo: GetAnimeExtensionRepo = Injekt.get(),\n    private val createExtensionRepo: CreateAnimeExtensionRepo = Injekt.get(),\n    private val deleteExtensionRepo: DeleteAnimeExtensionRepo = Injekt.get(),\n    private val replaceExtensionRepo: ReplaceAnimeExtensionRepo = Injekt.get(),\n    private val updateExtensionRepo: UpdateAnimeExtensionRepo = Injekt.get(),\n) : StateScreenModel<RepoScreenState>(RepoScreenState.Loading) {\n\n    private val _events: Channel<RepoEvent> = Channel(Int.MAX_VALUE)\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launchIO {\n            getExtensionRepo.subscribeAll()\n                .collectLatest { repos ->\n                    mutableState.update {\n                        RepoScreenState.Success(\n                            repos = repos.toImmutableSet(),\n                        )\n                    }\n                }\n        }\n    }\n\n    /**\n     * Creates and adds a new repo to the database.\n     *\n     * @param baseUrl The baseUrl of the repo to create.\n     */\n    fun createRepo(baseUrl: String) {\n        screenModelScope.launchIO {\n            when (val result = createExtensionRepo.await(baseUrl)) {\n                CreateAnimeExtensionRepo.Result.InvalidUrl -> _events.send(RepoEvent.InvalidUrl)\n                CreateAnimeExtensionRepo.Result.RepoAlreadyExists -> _events.send(RepoEvent.RepoAlreadyExists)\n                is CreateAnimeExtensionRepo.Result.DuplicateFingerprint -> {\n                    showDialog(RepoDialog.Conflict(result.oldRepo, result.newRepo))\n                }\n                else -> {}\n            }\n        }\n    }\n\n    /**\n     * Inserts a repo to the database, replace a matching repo with the same signing key fingerprint if found.\n     *\n     * @param newRepo The repo to insert\n     */\n    fun replaceRepo(newRepo: ExtensionRepo) {\n        screenModelScope.launchIO {\n            replaceExtensionRepo.await(newRepo)\n        }\n    }\n\n    /**\n     * Refreshes information for each repository.\n     */\n    fun refreshRepos() {\n        val status = state.value\n\n        if (status is RepoScreenState.Success) {\n            screenModelScope.launchIO {\n                updateExtensionRepo.awaitAll()\n            }\n        }\n    }\n\n    /**\n     * Deletes the given repo from the database\n     */\n    fun deleteRepo(baseUrl: String) {\n        screenModelScope.launchIO {\n            deleteExtensionRepo.await(baseUrl)\n        }\n    }\n\n    fun showDialog(dialog: RepoDialog) {\n        mutableState.update {\n            when (it) {\n                RepoScreenState.Loading -> it\n                is RepoScreenState.Success -> it.copy(dialog = dialog)\n            }\n        }\n    }\n\n    fun dismissDialog() {\n        mutableState.update {\n            when (it) {\n                RepoScreenState.Loading -> it\n                is RepoScreenState.Success -> it.copy(dialog = null)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/MangaExtensionReposScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.browse\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoConfirmDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoConflictDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoCreateDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionRepoDeleteDialog\nimport eu.kanade.presentation.more.settings.screen.browse.components.ExtensionReposScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass MangaExtensionReposScreen(\n    private val url: String? = null,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { MangaExtensionReposScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        LaunchedEffect(url) {\n            url?.let { screenModel.showDialog(RepoDialog.Confirm(it)) }\n        }\n\n        if (state is RepoScreenState.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as RepoScreenState.Success\n\n        ExtensionReposScreen(\n            state = successState,\n            onClickCreate = { screenModel.showDialog(RepoDialog.Create) },\n            onOpenWebsite = { context.openInBrowser(it.website) },\n            onClickDelete = { screenModel.showDialog(RepoDialog.Delete(it)) },\n            onClickRefresh = { screenModel.refreshRepos() },\n            navigateUp = navigator::pop,\n        )\n\n        when (val dialog = successState.dialog) {\n            null -> {}\n            is RepoDialog.Create -> {\n                ExtensionRepoCreateDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onCreate = { screenModel.createRepo(it) },\n                    repoUrls = successState.repos.map { it.baseUrl }.toImmutableSet(),\n                )\n            }\n            is RepoDialog.Delete -> {\n                ExtensionRepoDeleteDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onDelete = { screenModel.deleteRepo(dialog.repo) },\n                    repo = dialog.repo,\n                )\n            }\n            is RepoDialog.Conflict -> {\n                ExtensionRepoConflictDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onMigrate = { screenModel.replaceRepo(dialog.newRepo) },\n                    oldRepo = dialog.oldRepo,\n                    newRepo = dialog.newRepo,\n                )\n            }\n            is RepoDialog.Confirm -> {\n                ExtensionRepoConfirmDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onCreate = { screenModel.createRepo(dialog.url) },\n                    repo = dialog.url,\n                )\n            }\n        }\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                if (event is RepoEvent.LocalizedMessage) {\n                    context.toast(event.stringRes)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/MangaExtensionReposScreenModel.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.browse\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.ImmutableSet\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport mihon.domain.extensionrepo.manga.interactor.CreateMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.DeleteMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.ReplaceMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.UpdateMangaExtensionRepo\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaExtensionReposScreenModel(\n    private val getExtensionRepo: GetMangaExtensionRepo = Injekt.get(),\n    private val createExtensionRepo: CreateMangaExtensionRepo = Injekt.get(),\n    private val deleteExtensionRepo: DeleteMangaExtensionRepo = Injekt.get(),\n    private val replaceExtensionRepo: ReplaceMangaExtensionRepo = Injekt.get(),\n    private val updateExtensionRepo: UpdateMangaExtensionRepo = Injekt.get(),\n) : StateScreenModel<RepoScreenState>(RepoScreenState.Loading) {\n\n    private val _events: Channel<RepoEvent> = Channel(Int.MAX_VALUE)\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launchIO {\n            getExtensionRepo.subscribeAll()\n                .collectLatest { repos ->\n                    mutableState.update {\n                        RepoScreenState.Success(\n                            repos = repos.toImmutableSet(),\n                        )\n                    }\n                }\n        }\n    }\n\n    /**\n     * Creates and adds a new repo to the database.\n     *\n     * @param baseUrl The baseUrl of the repo to create.\n     */\n    fun createRepo(baseUrl: String) {\n        screenModelScope.launchIO {\n            when (val result = createExtensionRepo.await(baseUrl)) {\n                CreateMangaExtensionRepo.Result.InvalidUrl -> _events.send(RepoEvent.InvalidUrl)\n                CreateMangaExtensionRepo.Result.RepoAlreadyExists -> _events.send(RepoEvent.RepoAlreadyExists)\n                is CreateMangaExtensionRepo.Result.DuplicateFingerprint -> {\n                    showDialog(RepoDialog.Conflict(result.oldRepo, result.newRepo))\n                }\n                else -> {}\n            }\n        }\n    }\n\n    /**\n     * Inserts a repo to the database, replace a matching repo with the same signing key fingerprint if found.\n     *\n     * @param newRepo The repo to insert\n     */\n    fun replaceRepo(newRepo: ExtensionRepo) {\n        screenModelScope.launchIO {\n            replaceExtensionRepo.await(newRepo)\n        }\n    }\n\n    /**\n     * Refreshes information for each repository.\n     */\n    fun refreshRepos() {\n        val status = state.value\n\n        if (status is RepoScreenState.Success) {\n            screenModelScope.launchIO {\n                updateExtensionRepo.awaitAll()\n            }\n        }\n    }\n\n    /**\n     * Deletes the given repo from the database\n     */\n    fun deleteRepo(baseUrl: String) {\n        screenModelScope.launchIO {\n            deleteExtensionRepo.await(baseUrl)\n        }\n    }\n\n    fun showDialog(dialog: RepoDialog) {\n        mutableState.update {\n            when (it) {\n                RepoScreenState.Loading -> it\n                is RepoScreenState.Success -> it.copy(dialog = dialog)\n            }\n        }\n    }\n\n    fun dismissDialog() {\n        mutableState.update {\n            when (it) {\n                RepoScreenState.Loading -> it\n                is RepoScreenState.Success -> it.copy(dialog = null)\n            }\n        }\n    }\n}\n\nsealed class RepoEvent {\n    sealed class LocalizedMessage(val stringRes: StringResource) : RepoEvent()\n    data object InvalidUrl : LocalizedMessage(MR.strings.invalid_repo_name)\n    data object RepoAlreadyExists : LocalizedMessage(MR.strings.error_repo_exists)\n}\n\nsealed class RepoDialog {\n    data object Create : RepoDialog()\n    data class Delete(val repo: String) : RepoDialog()\n    data class Conflict(val oldRepo: ExtensionRepo, val newRepo: ExtensionRepo) : RepoDialog()\n    data class Confirm(val url: String) : RepoDialog()\n}\n\nsealed class RepoScreenState {\n\n    @Immutable\n    data object Loading : RepoScreenState()\n\n    @Immutable\n    data class Success(\n        val repos: ImmutableSet<ExtensionRepo>,\n        val oldRepos: ImmutableSet<String>? = null,\n        val dialog: RepoDialog? = null,\n    ) : RepoScreenState() {\n\n        val isEmpty: Boolean\n            get() = repos.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.browse.components\n\nimport androidx.compose.foundation.layout.Arrangement\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.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.Label\nimport androidx.compose.material.icons.automirrored.outlined.OpenInNew\nimport androidx.compose.material.icons.outlined.ContentCopy\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material3.ElevatedCard\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.platform.LocalContext\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.collections.immutable.ImmutableSet\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ExtensionReposContent(\n    repos: ImmutableSet<ExtensionRepo>,\n    lazyListState: LazyListState,\n    paddingValues: PaddingValues,\n    onOpenWebsite: (ExtensionRepo) -> Unit,\n    onClickDelete: (String) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    LazyColumn(\n        state = lazyListState,\n        contentPadding = paddingValues,\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        modifier = modifier,\n    ) {\n        repos.forEach {\n            item {\n                ExtensionRepoListItem(\n                    modifier = Modifier.animateItem(),\n                    repo = it,\n                    onOpenWebsite = { onOpenWebsite(it) },\n                    onDelete = { onClickDelete(it.baseUrl) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ExtensionRepoListItem(\n    repo: ExtensionRepo,\n    onOpenWebsite: () -> Unit,\n    onDelete: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val context = LocalContext.current\n\n    ElevatedCard(\n        modifier = modifier,\n    ) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(\n                    start = MaterialTheme.padding.medium,\n                    top = MaterialTheme.padding.medium,\n                    end = MaterialTheme.padding.medium,\n                ),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(imageVector = Icons.AutoMirrored.Outlined.Label, contentDescription = null)\n            Text(\n                text = repo.name,\n                modifier = Modifier.padding(start = MaterialTheme.padding.medium),\n                style = MaterialTheme.typography.titleMedium,\n            )\n        }\n\n        Row(\n            modifier = Modifier.fillMaxWidth(),\n            horizontalArrangement = Arrangement.End,\n        ) {\n            IconButton(onClick = onOpenWebsite) {\n                Icon(\n                    imageVector = Icons.AutoMirrored.Outlined.OpenInNew,\n                    contentDescription = stringResource(MR.strings.action_open_in_browser),\n                )\n            }\n\n            IconButton(\n                onClick = {\n                    val url = \"${repo.baseUrl}/index.min.json\"\n                    context.copyToClipboard(url, url)\n                },\n            ) {\n                Icon(\n                    imageVector = Icons.Outlined.ContentCopy,\n                    contentDescription = stringResource(MR.strings.action_copy_to_clipboard),\n                )\n            }\n\n            IconButton(onClick = onDelete) {\n                Icon(\n                    imageVector = Icons.Outlined.Delete,\n                    contentDescription = stringResource(MR.strings.action_delete),\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposDialogs.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.browse.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\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.Modifier\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.text.input.KeyboardType\nimport kotlinx.collections.immutable.ImmutableSet\nimport kotlinx.coroutines.delay\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun ExtensionRepoCreateDialog(\n    onDismissRequest: () -> Unit,\n    onCreate: (String) -> Unit,\n    repoUrls: ImmutableSet<String>,\n) {\n    var name by remember { mutableStateOf(\"\") }\n\n    val focusRequester = remember { FocusRequester() }\n    val nameAlreadyExists = remember(name) { repoUrls.contains(name) }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                enabled = name.isNotEmpty() && !nameAlreadyExists,\n                onClick = {\n                    onCreate(name)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_add))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_add_repo))\n        },\n        text = {\n            Column {\n                Text(text = stringResource(AYMR.strings.action_add_repo_message))\n\n                OutlinedTextField(\n                    modifier = Modifier\n                        .focusRequester(focusRequester),\n                    value = name,\n                    onValueChange = { name = it },\n                    label = {\n                        Text(text = stringResource(MR.strings.label_add_repo_input))\n                    },\n                    supportingText = {\n                        val msgRes = if (name.isNotEmpty() && nameAlreadyExists) {\n                            MR.strings.error_repo_exists\n                        } else {\n                            MR.strings.information_required_plain\n                        }\n                        Text(text = stringResource(msgRes))\n                    },\n                    isError = name.isNotEmpty() && nameAlreadyExists,\n                    keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Uri),\n                    singleLine = true,\n                )\n            }\n        },\n    )\n\n    LaunchedEffect(focusRequester) {\n        // TODO: https://issuetracker.google.com/issues/204502668\n        delay(0.1.seconds)\n        focusRequester.requestFocus()\n    }\n}\n\n@Composable\nfun ExtensionRepoDeleteDialog(\n    onDismissRequest: () -> Unit,\n    onDelete: () -> Unit,\n    repo: String,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onDelete()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_delete_repo))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.delete_repo_confirmation, repo))\n        },\n    )\n}\n\n@Composable\nfun ExtensionRepoConflictDialog(\n    oldRepo: ExtensionRepo,\n    newRepo: ExtensionRepo,\n    onDismissRequest: () -> Unit,\n    onMigrate: () -> Unit,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onMigrate()\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_replace_repo))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.action_replace_repo_title))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.action_replace_repo_message, newRepo.name, oldRepo.name))\n        },\n    )\n}\n\n@Composable\nfun ExtensionRepoConfirmDialog(\n    onDismissRequest: () -> Unit,\n    onCreate: () -> Unit,\n    repo: String,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        title = {\n            Text(text = stringResource(MR.strings.action_add_repo))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.add_repo_confirmation, repo))\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onCreate()\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_add))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposScreen.kt",
    "content": "@file:JvmName(\"ExtensionReposScreenKt\")\n\npackage eu.kanade.presentation.more.settings.screen.browse.components\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.category.components.CategoryFloatingActionButton\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.more.settings.screen.browse.RepoScreenState\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun ExtensionReposScreen(\n    state: RepoScreenState.Success,\n    onClickCreate: () -> Unit,\n    onOpenWebsite: (ExtensionRepo) -> Unit,\n    onClickDelete: (String) -> Unit,\n    onClickRefresh: () -> Unit,\n    navigateUp: () -> Unit,\n) {\n    val lazyListState = rememberLazyListState()\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                navigateUp = navigateUp,\n                title = stringResource(MR.strings.label_extension_repos),\n                scrollBehavior = scrollBehavior,\n                actions = {\n                    IconButton(onClick = onClickRefresh) {\n                        Icon(\n                            imageVector = Icons.Outlined.Refresh,\n                            contentDescription = stringResource(resource = MR.strings.action_webview_refresh),\n                        )\n                    }\n                },\n            )\n        },\n        floatingActionButton = {\n            CategoryFloatingActionButton(\n                lazyListState = lazyListState,\n                onCreate = onClickCreate,\n            )\n        },\n    ) { paddingValues ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                MR.strings.information_empty_repos,\n                modifier = Modifier.padding(paddingValues),\n            )\n            return@Scaffold\n        }\n\n        ExtensionReposContent(\n            repos = state.repos,\n            lazyListState = lazyListState,\n            paddingValues = paddingValues + topSmallPaddingValues +\n                PaddingValues(horizontal = MaterialTheme.padding.medium),\n            onOpenWebsite = onOpenWebsite,\n            onClickDelete = onClickDelete,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.data\n\nimport android.content.ActivityNotFoundException\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.data.backup.create.BackupCreateJob\nimport eu.kanade.tachiyomi.data.backup.create.BackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.BackupOptions\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.LazyColumnWithAction\nimport tachiyomi.presentation.core.components.SectionCard\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\n\nclass CreateBackupScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val model = rememberScreenModel { CreateBackupScreenModel() }\n        val state by model.state.collectAsState()\n\n        val chooseBackupDir = rememberLauncherForActivityResult(\n            contract = ActivityResultContracts.CreateDocument(\"application/*\"),\n        ) {\n            if (it != null) {\n                context.contentResolver.takePersistableUriPermission(\n                    it,\n                    Intent.FLAG_GRANT_READ_URI_PERMISSION or\n                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION,\n                )\n                model.createBackup(context, it)\n                navigator.pop()\n            }\n        }\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = stringResource(MR.strings.pref_create_backup),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            LazyColumnWithAction(\n                contentPadding = contentPadding,\n                actionLabel = stringResource(MR.strings.action_create),\n                actionEnabled = state.options.canCreate(),\n                onClickAction = {\n                    if (!BackupCreateJob.isManualJobRunning(context)) {\n                        try {\n                            chooseBackupDir.launch(BackupCreator.getFilename())\n                        } catch (e: ActivityNotFoundException) {\n                            context.toast(MR.strings.file_picker_error)\n                        }\n                    } else {\n                        context.toast(MR.strings.backup_in_progress)\n                    }\n                },\n            ) {\n                if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) {\n                    item {\n                        WarningBanner(MR.strings.restore_miui_warning)\n                    }\n                }\n\n                item {\n                    SectionCard(MR.strings.label_library) {\n                        Options(BackupOptions.libraryOptions, state, model)\n                    }\n                }\n\n                item {\n                    SectionCard(MR.strings.label_settings) {\n                        Options(BackupOptions.settingsOptions, state, model)\n                    }\n                }\n\n                item {\n                    SectionCard(MR.strings.label_extensions) {\n                        Options(BackupOptions.extensionOptions, state, model)\n                    }\n                }\n            }\n        }\n    }\n\n    @Composable\n    private fun Options(\n        options: ImmutableList<BackupOptions.Entry>,\n        state: CreateBackupScreenModel.State,\n        model: CreateBackupScreenModel,\n    ) {\n        options.forEach { option ->\n            LabeledCheckbox(\n                label = stringResource(option.label),\n                checked = option.getter(state.options),\n                onCheckedChange = {\n                    model.toggle(option.setter, it)\n                },\n                enabled = option.enabled(state.options),\n            )\n        }\n    }\n}\n\nprivate class CreateBackupScreenModel : StateScreenModel<CreateBackupScreenModel.State>(State()) {\n\n    fun toggle(setter: (BackupOptions, Boolean) -> BackupOptions, enabled: Boolean) {\n        mutableState.update {\n            it.copy(\n                options = setter(it.options, enabled),\n            )\n        }\n    }\n\n    fun createBackup(context: Context, uri: Uri) {\n        BackupCreateJob.startNow(context, uri, state.value.options)\n    }\n\n    @Immutable\n    data class State(\n        val options: BackupOptions = BackupOptions(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/data/RestoreBackupScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.data\n\nimport android.content.Context\nimport android.net.Uri\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.text.selection.SelectionContainer\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\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.core.net.toUri\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.data.backup.BackupFileValidator\nimport eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob\nimport eu.kanade.tachiyomi.data.backup.restore.RestoreOptions\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.LazyColumnWithAction\nimport tachiyomi.presentation.core.components.SectionCard\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\nclass RestoreBackupScreen(\n    private val uri: String,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val model = rememberScreenModel { RestoreBackupScreenModel(context, uri) }\n        val state by model.state.collectAsState()\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = stringResource(MR.strings.pref_restore_backup),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            LazyColumnWithAction(\n                contentPadding = contentPadding,\n                actionLabel = stringResource(MR.strings.action_restore),\n                actionEnabled = state.canRestore && state.options.canRestore(),\n                onClickAction = {\n                    model.startRestore()\n                    navigator.pop()\n                },\n            ) {\n                if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) {\n                    item {\n                        WarningBanner(MR.strings.restore_miui_warning)\n                    }\n                }\n\n                if (state.canRestore) {\n                    item {\n                        SectionCard {\n                            RestoreOptions.options.forEach { option ->\n                                LabeledCheckbox(\n                                    label = stringResource(option.label),\n                                    checked = option.getter(state.options),\n                                    onCheckedChange = {\n                                        model.toggle(option.setter, it)\n                                    },\n                                )\n                            }\n                        }\n                    }\n                }\n\n                if (state.error != null) {\n                    errorMessageItem(state.error)\n                }\n            }\n        }\n    }\n\n    private fun LazyListScope.errorMessageItem(\n        error: Any?,\n    ) {\n        item {\n            SectionCard {\n                Column(\n                    modifier = Modifier.padding(horizontal = MaterialTheme.padding.medium),\n                    verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                ) {\n                    val msg = buildAnnotatedString {\n                        when (error) {\n                            is MissingRestoreComponents -> {\n                                appendLine(stringResource(MR.strings.backup_restore_content_full))\n                                if (error.sources.isNotEmpty()) {\n                                    appendLine()\n                                    withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {\n                                        appendLine(stringResource(MR.strings.backup_restore_missing_sources))\n                                    }\n                                    error.sources.joinTo(\n                                        this,\n                                        separator = \"\\n- \",\n                                        prefix = \"- \",\n                                    )\n                                }\n                                if (error.trackers.isNotEmpty()) {\n                                    appendLine()\n                                    withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {\n                                        appendLine(stringResource(MR.strings.backup_restore_missing_trackers))\n                                    }\n                                    error.trackers.joinTo(\n                                        this,\n                                        separator = \"\\n- \",\n                                        prefix = \"- \",\n                                    )\n                                }\n                            }\n\n                            is InvalidRestore -> {\n                                withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {\n                                    appendLine(stringResource(MR.strings.invalid_backup_file))\n                                }\n                                appendLine(error.uri.toString())\n\n                                appendLine()\n\n                                withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {\n                                    appendLine(stringResource(MR.strings.invalid_backup_file_error))\n                                }\n                                appendLine(error.message)\n                            }\n\n                            else -> {\n                                appendLine(error.toString())\n                            }\n                        }\n                    }\n\n                    SelectionContainer {\n                        Text(text = msg)\n                    }\n                }\n            }\n        }\n    }\n}\n\nprivate class RestoreBackupScreenModel(\n    private val context: Context,\n    private val uri: String,\n) : StateScreenModel<RestoreBackupScreenModel.State>(State()) {\n\n    init {\n        validate(uri.toUri())\n    }\n\n    fun toggle(setter: (RestoreOptions, Boolean) -> RestoreOptions, enabled: Boolean) {\n        mutableState.update {\n            it.copy(\n                options = setter(it.options, enabled),\n            )\n        }\n    }\n\n    fun startRestore() {\n        BackupRestoreJob.start(\n            context = context,\n            uri = uri.toUri(),\n            options = state.value.options,\n        )\n    }\n\n    private fun validate(uri: Uri) {\n        val results = try {\n            BackupFileValidator(context).validate(uri)\n        } catch (e: Exception) {\n            setError(\n                error = InvalidRestore(uri, e.message.toString()),\n                canRestore = false,\n            )\n            return\n        }\n\n        if (results.missingSources.isNotEmpty() || results.missingTrackers.isNotEmpty()) {\n            setError(\n                error = MissingRestoreComponents(uri, results.missingSources, results.missingTrackers),\n                canRestore = true,\n            )\n            return\n        }\n\n        setError(error = null, canRestore = true)\n    }\n\n    private fun setError(error: Any?, canRestore: Boolean) {\n        mutableState.update {\n            it.copy(\n                error = error,\n                canRestore = canRestore,\n            )\n        }\n    }\n\n    @Immutable\n    data class State(\n        val error: Any? = null,\n        val canRestore: Boolean = false,\n        val options: RestoreOptions = RestoreOptions(),\n    )\n}\n\nprivate data class MissingRestoreComponents(\n    val uri: Uri,\n    val sources: List<String>,\n    val trackers: List<String>,\n)\n\nprivate data class InvalidRestore(\n    val uri: Uri? = null,\n    val message: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/data/StorageInfo.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.data\n\nimport android.text.format.Formatter\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.material3.LinearProgressIndicator\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.draw.clip\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport java.io.File\n\n@Composable\nfun StorageInfo(\n    modifier: Modifier = Modifier,\n) {\n    val context = LocalContext.current\n    val storages = remember { DiskUtil.getExternalStorages(context) }\n\n    Column(\n        modifier = modifier,\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        storages.forEach {\n            StorageInfo(it)\n        }\n    }\n}\n\n@Composable\nprivate fun StorageInfo(\n    file: File,\n) {\n    val context = LocalContext.current\n\n    val available = remember(file) { DiskUtil.getAvailableStorageSpace(file) }\n    val availableText = remember(available) { Formatter.formatFileSize(context, available) }\n    val total = remember(file) { DiskUtil.getTotalStorageSpace(file) }\n    val totalText = remember(total) { Formatter.formatFileSize(context, total) }\n\n    Column(\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        Text(\n            text = file.absolutePath,\n            style = MaterialTheme.typography.header,\n        )\n\n        LinearProgressIndicator(\n            modifier = Modifier\n                .clip(MaterialTheme.shapes.small)\n                .fillMaxWidth()\n                .height(12.dp),\n            progress = { (1 - (available / total.toFloat())) },\n        )\n\n        Text(\n            text = stringResource(MR.strings.available_disk_space_info, availableText, totalText),\n            modifier = Modifier.secondaryItemAlpha(),\n            style = MaterialTheme.typography.bodySmall,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/BackupSchemaScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.debug\n\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.ContentCopy\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.data.backup.models.Backup\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\n\nclass BackupSchemaScreen : Screen() {\n\n    companion object {\n        const val TITLE = \"Backup file schema\"\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val schema = remember {\n            ProtoBufSchemaGenerator.generateSchemaText(\n                Backup.serializer().descriptor,\n            )\n        }\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = TITLE,\n                    navigateUp = navigator::pop,\n                    actions = {\n                        AppBarActions(\n                            persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_copy_to_clipboard),\n                                    icon = Icons.Default.ContentCopy,\n                                    onClick = {\n                                        context.copyToClipboard(TITLE, schema)\n                                    },\n                                ),\n                            ),\n                        )\n                    },\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            Text(\n                text = schema,\n                modifier = Modifier\n                    .verticalScroll(rememberScrollState())\n                    .padding(contentPadding)\n                    .padding(16.dp),\n                fontFamily = FontFamily.Monospace,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.debug\n\nimport android.os.Build\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.produceState\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.profileinstaller.ProfileVerifier\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.PreferenceScaffold\nimport eu.kanade.presentation.more.settings.screen.about.AboutScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.WebViewUtil\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.guava.await\nimport tachiyomi.i18n.MR\n\nclass DebugInfoScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        PreferenceScaffold(\n            titleRes = MR.strings.pref_debug_info,\n            onBackPressed = navigator::pop,\n            itemsProvider = {\n                listOf(\n                    Preference.PreferenceItem.TextPreference(\n                        title = WorkerInfoScreen.TITLE,\n                        onClick = { navigator.push(WorkerInfoScreen()) },\n                    ),\n                    Preference.PreferenceItem.TextPreference(\n                        title = BackupSchemaScreen.TITLE,\n                        onClick = { navigator.push(BackupSchemaScreen()) },\n                    ),\n                    getAppInfoGroup(),\n                    getDeviceInfoGroup(),\n                )\n            },\n        )\n    }\n\n    @Composable\n    private fun getAppInfoGroup(): Preference.PreferenceGroup {\n        return Preference.PreferenceGroup(\n            title = \"App info\",\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.TextPreference(\n                    title = \"Version\",\n                    subtitle = AboutScreen.getVersionName(false),\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = \"Build time\",\n                    subtitle = AboutScreen.getFormattedBuildTime(),\n                ),\n                getProfileVerifierPreference(),\n                Preference.PreferenceItem.TextPreference(\n                    title = \"WebView version\",\n                    subtitle = getWebViewVersion(),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    @ReadOnlyComposable\n    private fun getWebViewVersion(): String {\n        return WebViewUtil.getVersion(LocalContext.current)\n    }\n\n    @Composable\n    private fun getProfileVerifierPreference(): Preference.PreferenceItem.TextPreference {\n        val status by produceState(initialValue = \"-\") {\n            val result = ProfileVerifier.getCompilationStatusAsync().await().profileInstallResultCode\n            value = when (result) {\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_NO_PROFILE_INSTALLED,\n                -> \"No profile installed\"\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_COMPILED_WITH_PROFILE,\n                -> \"Compiled\"\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_COMPILED_WITH_PROFILE_NON_MATCHING,\n                -> \"Compiled non-matching\"\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_ERROR_CACHE_FILE_EXISTS_BUT_CANNOT_BE_READ,\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_ERROR_CANT_WRITE_PROFILE_VERIFICATION_RESULT_CACHE_FILE,\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_ERROR_PACKAGE_NAME_DOES_NOT_EXIST,\n                -> \"Error $result\"\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_ERROR_UNSUPPORTED_API_VERSION,\n                -> \"Not supported\"\n                ProfileVerifier.CompilationStatus\n                    .RESULT_CODE_PROFILE_ENQUEUED_FOR_COMPILATION,\n                -> \"Pending compilation\"\n                ProfileVerifier.CompilationStatus.RESULT_CODE_ERROR_NO_PROFILE_EMBEDDED -> \"No profile embedded\"\n                else -> \"Unknown code $result\"\n            }\n        }\n        return Preference.PreferenceItem.TextPreference(\n            title = \"Profile compilation status\",\n            subtitle = status,\n        )\n    }\n\n    private fun getDeviceInfoGroup(): Preference.PreferenceGroup {\n        val items = persistentListOf<Preference.PreferenceItem<out Any>>().mutate {\n            it.add(\n                Preference.PreferenceItem.TextPreference(\n                    title = \"Model\",\n                    subtitle = \"${Build.MANUFACTURER} ${Build.MODEL} (${Build.DEVICE})\",\n                ),\n            )\n\n            if (DeviceUtil.oneUiVersion != null) {\n                it.add(\n                    Preference.PreferenceItem.TextPreference(\n                        title = \"OneUI version\",\n                        subtitle = \"${DeviceUtil.oneUiVersion}\",\n                    ),\n                )\n            } else if (DeviceUtil.miuiMajorVersion != null) {\n                it.add(\n                    Preference.PreferenceItem.TextPreference(\n                        title = \"MIUI version\",\n                        subtitle = \"${DeviceUtil.miuiMajorVersion}\",\n                    ),\n                )\n            }\n\n            val androidVersion = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                Build.VERSION.RELEASE_OR_PREVIEW_DISPLAY\n            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                Build.VERSION.RELEASE_OR_CODENAME\n            } else {\n                Build.VERSION.RELEASE\n            }\n            it.add(\n                Preference.PreferenceItem.TextPreference(\n                    title = \"Android version\",\n                    subtitle = \"$androidVersion (${Build.DISPLAY})\",\n                ),\n            )\n        }\n\n        return Preference.PreferenceGroup(\n            title = \"Device info\",\n            preferenceItems = items,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.debug\n\nimport android.content.Context\nimport androidx.compose.foundation.horizontalScroll\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ContentCopy\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastForEach\nimport androidx.work.WorkInfo\nimport androidx.work.WorkQuery\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.util.lang.toDateTimestampString\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport eu.kanade.tachiyomi.util.system.workManager\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.plus\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.LocalDateTime\nimport java.time.ZoneId\n\nclass WorkerInfoScreen : Screen() {\n\n    companion object {\n        const val TITLE = \"Worker info\"\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { Model(context) }\n        val enqueued by screenModel.enqueued.collectAsState()\n        val finished by screenModel.finished.collectAsState()\n        val running by screenModel.running.collectAsState()\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = TITLE,\n                    navigateUp = navigator::pop,\n                    actions = {\n                        AppBarActions(\n                            persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_copy_to_clipboard),\n                                    icon = Icons.Default.ContentCopy,\n                                    onClick = {\n                                        context.copyToClipboard(\n                                            TITLE,\n                                            enqueued + finished + running,\n                                        )\n                                    },\n                                ),\n                            ),\n                        )\n                    },\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            LazyColumn(\n                contentPadding = contentPadding + PaddingValues(horizontal = 16.dp),\n                modifier = Modifier.horizontalScroll(rememberScrollState()),\n            ) {\n                item { SectionTitle(title = \"Enqueued\") }\n                item { SectionText(text = enqueued) }\n\n                item { SectionTitle(title = \"Finished\") }\n                item { SectionText(text = finished) }\n\n                item { SectionTitle(title = \"Running\") }\n                item { SectionText(text = running) }\n            }\n        }\n    }\n\n    @Composable\n    private fun SectionTitle(title: String) {\n        Text(\n            text = title,\n            style = MaterialTheme.typography.titleMedium,\n            modifier = Modifier.padding(vertical = 8.dp),\n        )\n    }\n\n    @Composable\n    private fun SectionText(text: String) {\n        Text(\n            text = text,\n            softWrap = false,\n            fontFamily = FontFamily.Monospace,\n        )\n    }\n\n    private class Model(context: Context) : ScreenModel {\n        private val workManager = context.workManager\n\n        val finished = workManager\n            .getWorkInfosFlow(\n                WorkQuery.fromStates(WorkInfo.State.SUCCEEDED, WorkInfo.State.FAILED, WorkInfo.State.CANCELLED),\n            )\n            .map(::constructString)\n            .stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), \"\")\n\n        val running = workManager\n            .getWorkInfosFlow(WorkQuery.fromStates(WorkInfo.State.RUNNING))\n            .map(::constructString)\n            .stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), \"\")\n\n        val enqueued = workManager\n            .getWorkInfosFlow(WorkQuery.fromStates(WorkInfo.State.ENQUEUED))\n            .map(::constructString)\n            .stateIn(ioCoroutineScope, SharingStarted.WhileSubscribed(), \"\")\n\n        private fun constructString(list: List<WorkInfo>) = buildString {\n            if (list.isEmpty()) {\n                appendLine(\"-\")\n            } else {\n                list.fastForEach { workInfo ->\n                    appendLine(\"Id: ${workInfo.id}\")\n                    appendLine(\"Tags:\")\n                    workInfo.tags.forEach {\n                        appendLine(\" - $it\")\n                    }\n                    appendLine(\"State: ${workInfo.state}\")\n                    if (workInfo.state == WorkInfo.State.ENQUEUED) {\n                        val timestamp = LocalDateTime.ofInstant(\n                            Instant.ofEpochMilli(workInfo.nextScheduleTimeMillis),\n                            ZoneId.systemDefault(),\n                        )\n                            .toDateTimestampString(\n                                UiPreferences.dateFormat(\n                                    Injekt.get<UiPreferences>().dateFormat().get(),\n                                ),\n                            )\n                        appendLine(\"Next scheduled run: $timestamp\")\n                        appendLine(\"Attempt #${workInfo.runAttemptCount + 1}\")\n                    }\n                    appendLine()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAdvancedScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.tachiyomi.ui.player.settings.AdvancedPlayerPreferences\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject PlayerSettingsAdvancedScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = AYMR.strings.pref_player_advanced\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val advancedPlayerPreferences = remember { Injekt.get<AdvancedPlayerPreferences>() }\n        val scope = rememberCoroutineScope()\n        val context = LocalContext.current\n\n        val enableUserFiles = advancedPlayerPreferences.mpvUserFiles()\n        val mpvConf = advancedPlayerPreferences.mpvConf()\n        val mpvInput = advancedPlayerPreferences.mpvInput()\n\n        return listOf(\n            Preference.PreferenceItem.SwitchPreference(\n                preference = enableUserFiles,\n                title = stringResource(AYMR.strings.pref_mpv_user_files),\n                subtitle = stringResource(AYMR.strings.pref_mpv_user_files_summary),\n            ),\n            Preference.PreferenceItem.MPVConfPreference(\n                preference = mpvConf,\n                scope = scope,\n                context = context,\n                fileName = \"mpv.conf\",\n                title = stringResource(AYMR.strings.pref_mpv_conf),\n            ),\n            Preference.PreferenceItem.MPVConfPreference(\n                preference = mpvInput,\n                scope = scope,\n                context = context,\n                fileName = \"input.conf\",\n                title = stringResource(AYMR.strings.pref_mpv_input),\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAudioScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.tachiyomi.ui.player.settings.AudioChannels\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport kotlinx.collections.immutable.toImmutableMap\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.Locale\nimport java.util.MissingResourceException\n\nobject PlayerSettingsAudioScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = AYMR.strings.pref_player_audio\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val audioPreferences = remember { Injekt.get<AudioPreferences>() }\n\n        val prefLangs = audioPreferences.preferredAudioLanguages()\n        val pitchCorrection = audioPreferences.enablePitchCorrection()\n        val audioChannels = audioPreferences.audioChannels()\n        val boostCapPref = audioPreferences.volumeBoostCap()\n        val boostCap by boostCapPref.collectAsState()\n\n        return listOf(\n            Preference.PreferenceItem.EditTextInfoPreference(\n                preference = prefLangs,\n                dialogSubtitle = stringResource(AYMR.strings.pref_player_audio_lang_info),\n                title = stringResource(AYMR.strings.pref_player_audio_lang),\n                validate = { pref ->\n                    val langs = pref.split(\",\").filter(String::isNotEmpty).map(String::trim)\n                    langs.forEach {\n                        try {\n                            val locale = Locale(it)\n                            if (locale.isO3Language == locale.language &&\n                                locale.language == locale.getDisplayName(Locale.ENGLISH)\n                            ) {\n                                throw MissingResourceException(\"\", \"\", \"\")\n                            }\n                        } catch (_: MissingResourceException) {\n                            return@EditTextInfoPreference false\n                        }\n                    }\n\n                    true\n                },\n                errorMessage = { pref ->\n                    val langs = pref.split(\",\").filter(String::isNotEmpty).map(String::trim)\n                    langs.forEach {\n                        try {\n                            val locale = Locale(it)\n                            if (locale.isO3Language == locale.language &&\n                                locale.language == locale.getDisplayName(Locale.ENGLISH)\n                            ) {\n                                throw MissingResourceException(\"\", \"\", \"\")\n                            }\n                        } catch (_: MissingResourceException) {\n                            return@EditTextInfoPreference stringResource(\n                                AYMR.strings.pref_player_subtitle_invalid_lang,\n                                it,\n                            )\n                        }\n                    }\n                    \"\"\n                },\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = pitchCorrection,\n                title = stringResource(AYMR.strings.pref_player_audio_pitch_correction),\n                subtitle = stringResource(AYMR.strings.pref_player_audio_pitch_correction_summary),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = audioChannels,\n                entries = AudioChannels.entries.associateWith {\n                    stringResource(it.titleRes)\n                }.toImmutableMap(),\n                title = stringResource(AYMR.strings.pref_player_audio_channels),\n            ),\n            Preference.PreferenceItem.SliderPreference(\n                value = boostCap,\n                valueRange = 0..200,\n                title = stringResource(AYMR.strings.pref_player_audio_boost_cap),\n                subtitle = boostCap.toString(),\n                onValueChanged = {\n                    boostCapPref.set(it)\n                    true\n                },\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsDecoderScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.remember\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.tachiyomi.ui.player.Debanding\nimport eu.kanade.tachiyomi.ui.player.settings.DecoderPreferences\nimport kotlinx.collections.immutable.toImmutableMap\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject PlayerSettingsDecoderScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = AYMR.strings.pref_player_decoder\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val decoderPreferences = remember { Injekt.get<DecoderPreferences>() }\n\n        val tryHw = decoderPreferences.tryHWDecoding()\n        val useGpuNext = decoderPreferences.gpuNext()\n        val debanding = decoderPreferences.videoDebanding()\n        val yuv420p = decoderPreferences.useYUV420P()\n\n        return listOf(\n            Preference.PreferenceItem.SwitchPreference(\n                preference = tryHw,\n                title = stringResource(AYMR.strings.pref_try_hw),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = useGpuNext,\n                title = stringResource(AYMR.strings.pref_gpu_next_title),\n                subtitle = stringResource(AYMR.strings.pref_gpu_next_subtitle),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = debanding,\n                entries = Debanding.entries.associateWith {\n                    it.name\n                    // stringResource(it.)\n                }.toImmutableMap(),\n                title = stringResource(AYMR.strings.pref_debanding_title),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = yuv420p,\n                title = stringResource(AYMR.strings.pref_use_yuv420p_title),\n                subtitle = stringResource(AYMR.strings.pref_use_yuv420p_subtitle),\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsGesturesScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.collectAsState\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 eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.tachiyomi.ui.player.SingleActionGesture\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toPersistentMap\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.WheelTextPicker\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nobject PlayerSettingsGesturesScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = AYMR.strings.pref_player_gestures\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val gesturePreferences = remember { Injekt.get<GesturePreferences>() }\n\n        return listOf(\n            getSlidersGroup(gesturePreferences = gesturePreferences),\n            getSeekingGroup(gesturePreferences = gesturePreferences),\n            getDoubleTapGroup(gesturePreferences = gesturePreferences),\n            getMediaControlsGroup(gesturePreferences = gesturePreferences),\n        )\n    }\n\n    @Composable\n    private fun getSlidersGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup {\n        val enableVolumeBrightnessGestures = gesturePreferences.gestureVolumeBrightness()\n        val swapVol = gesturePreferences.swapVolumeBrightness()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_player_sliders),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enableVolumeBrightnessGestures,\n                    title = stringResource(AYMR.strings.enable_volume_brightness_gestures),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = swapVol,\n                    title = stringResource(AYMR.strings.pref_controls_swap_vol_brightness),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getSeekingGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup {\n        val scope = rememberCoroutineScope()\n        val enableHorizontalSeekGesture = gesturePreferences.gestureHorizontalSeek()\n        val showSeekbar = gesturePreferences.showSeekBar()\n        val defaultSkipIntroLength by gesturePreferences.defaultIntroLength().stateIn(scope).collectAsState()\n        val skipLengthPreference = gesturePreferences.skipLengthPreference()\n        val playerSmoothSeek = gesturePreferences.playerSmoothSeek()\n\n        var showDialog by rememberSaveable { mutableStateOf(false) }\n        if (showDialog) {\n            SkipIntroLengthDialog(\n                initialSkipIntroLength = defaultSkipIntroLength,\n                onDismissRequest = { showDialog = false },\n                onValueChanged = { skipIntroLength ->\n                    gesturePreferences.defaultIntroLength().set(skipIntroLength)\n                    showDialog = false\n                },\n            )\n        }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_player_seeking),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enableHorizontalSeekGesture,\n                    title = stringResource(AYMR.strings.enable_horizontal_seek_gesture),\n                    subtitle = stringResource(AYMR.strings.enable_horizontal_seek_gesture_summary),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = showSeekbar,\n                    title = stringResource(AYMR.strings.pref_show_seekbar),\n                ),\n                Preference.PreferenceItem.TextPreference(\n                    title = stringResource(AYMR.strings.pref_default_intro_length),\n                    subtitle = \"${defaultSkipIntroLength}s\",\n                    onClick = { showDialog = true },\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = skipLengthPreference,\n                    entries = persistentMapOf(\n                        30 to stringResource(AYMR.strings.pref_skip_30),\n                        20 to stringResource(AYMR.strings.pref_skip_20),\n                        10 to stringResource(AYMR.strings.pref_skip_10),\n                        5 to stringResource(AYMR.strings.pref_skip_5),\n                        3 to stringResource(AYMR.strings.pref_skip_3),\n                        0 to stringResource(AYMR.strings.pref_skip_disable),\n                    ),\n                    title = stringResource(AYMR.strings.pref_skip_length),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = playerSmoothSeek,\n                    title = stringResource(AYMR.strings.pref_player_smooth_seek),\n                    subtitle = stringResource(AYMR.strings.pref_player_smooth_seek_summary),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDoubleTapGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup {\n        val leftDoubleTap = gesturePreferences.leftDoubleTapGesture()\n        val centerDoubleTap = gesturePreferences.centerDoubleTapGesture()\n        val rightDoubleTap = gesturePreferences.rightDoubleTapGesture()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_double_tap),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = leftDoubleTap,\n                    entries = listOf(\n                        SingleActionGesture.None,\n                        SingleActionGesture.Seek,\n                        SingleActionGesture.PlayPause,\n                        SingleActionGesture.Switch,\n                        SingleActionGesture.Custom,\n                    ).associateWith { stringResource(it.stringRes) }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_left_double_tap),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = centerDoubleTap,\n                    entries = listOf(\n                        SingleActionGesture.None,\n                        SingleActionGesture.PlayPause,\n                        SingleActionGesture.Custom,\n                    ).associateWith { stringResource(it.stringRes) }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_center_double_tap),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = rightDoubleTap,\n                    entries = listOf(\n                        SingleActionGesture.None,\n                        SingleActionGesture.Seek,\n                        SingleActionGesture.PlayPause,\n                        SingleActionGesture.Switch,\n                        SingleActionGesture.Custom,\n                    ).associateWith { stringResource(it.stringRes) }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_right_double_tap),\n                ),\n                Preference.PreferenceItem.InfoPreference(\n                    title = stringResource(AYMR.strings.pref_double_tap_info),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getMediaControlsGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup {\n        val mediaPrevious = gesturePreferences.mediaPreviousGesture()\n        val mediaPlayPause = gesturePreferences.mediaPlayPauseGesture()\n        val mediaNext = gesturePreferences.mediaNextGesture()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_media_controls),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.ListPreference(\n                    preference = mediaPrevious,\n                    entries = listOf(\n                        SingleActionGesture.None,\n                        SingleActionGesture.Seek,\n                        SingleActionGesture.PlayPause,\n                        SingleActionGesture.Switch,\n                        SingleActionGesture.Custom,\n                    ).associateWith { stringResource(it.stringRes) }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_media_previous),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = mediaPlayPause,\n                    entries = listOf(\n                        SingleActionGesture.None,\n                        SingleActionGesture.PlayPause,\n                        SingleActionGesture.Custom,\n                    ).associateWith { stringResource(it.stringRes) }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_media_playpause),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = mediaNext,\n                    entries = listOf(\n                        SingleActionGesture.None,\n                        SingleActionGesture.Seek,\n                        SingleActionGesture.PlayPause,\n                        SingleActionGesture.Switch,\n                        SingleActionGesture.Custom,\n                    ).associateWith { stringResource(it.stringRes) }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_media_next),\n                ),\n                Preference.PreferenceItem.InfoPreference(\n                    title = stringResource(AYMR.strings.pref_media_info),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    fun SkipIntroLengthDialog(\n        initialSkipIntroLength: Int,\n        onDismissRequest: () -> Unit,\n        onValueChanged: (skipIntroLength: Int) -> Unit,\n    ) {\n        val skipIntroLengthValue by rememberSaveable { mutableStateOf(initialSkipIntroLength) }\n        var newLength = 0\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = { Text(text = stringResource(AYMR.strings.pref_intro_length)) },\n            text = {\n                Box(\n                    modifier = Modifier.fillMaxWidth(),\n                    content = {\n                        WheelTextPicker(\n                            modifier = Modifier.align(Alignment.Center),\n                            items = remember { 0..255 }.map {\n                                stringResource(\n                                    MR.strings.seconds_short,\n                                    it,\n                                )\n                            }.toImmutableList(),\n                            onSelectionChanged = {\n                                newLength = it\n                            },\n                            startIndex = skipIntroLengthValue,\n                        )\n                    },\n                )\n            },\n            dismissButton = {\n                TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            },\n            confirmButton = {\n                TextButton(onClick = { onValueChanged(newLength) }) {\n                    Text(text = stringResource(MR.strings.action_ok))\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsMainScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Audiotrack\nimport androidx.compose.material.icons.outlined.Code\nimport androidx.compose.material.icons.outlined.EditNote\nimport androidx.compose.material.icons.outlined.Gesture\nimport androidx.compose.material.icons.outlined.Memory\nimport androidx.compose.material.icons.outlined.PlayCircleOutline\nimport androidx.compose.material.icons.outlined.Search\nimport androidx.compose.material.icons.outlined.Subtitles\nimport androidx.compose.material.icons.outlined.Terminal\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.toArgb\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.unit.dp\nimport androidx.core.graphics.ColorUtils\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.more.settings.screen.SettingsSearchScreen\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.PlayerSettingsCustomButtonScreen\nimport eu.kanade.presentation.more.settings.screen.player.editor.PlayerSettingsEditorScreen\nimport eu.kanade.presentation.more.settings.widget.TextPreferenceWidget\nimport eu.kanade.presentation.util.LocalBackPress\nimport eu.kanade.presentation.util.Screen\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport cafe.adriel.voyager.core.screen.Screen as VoyagerScreen\n\nclass PlayerSettingsMainScreen(private val mainSettings: Boolean) : Screen() {\n    @Composable\n    override fun Content() {\n        Content(twoPane = false)\n    }\n\n    @Composable\n    private fun getPalerSurface(): Color {\n        val surface = MaterialTheme.colorScheme.surface\n        val dark = isSystemInDarkTheme()\n        return remember(surface, dark) {\n            val arr = FloatArray(3)\n            ColorUtils.colorToHSL(surface.toArgb(), arr)\n            arr[2] = if (dark) {\n                arr[2] - 0.05f\n            } else {\n                arr[2] + 0.02f\n            }.coerceIn(0f, 1f)\n            Color.hsl(arr[0], arr[1], arr[2])\n        }\n    }\n\n    @Composable\n    fun Content(twoPane: Boolean) {\n        val navigator = LocalNavigator.currentOrThrow\n        val backPress = LocalBackPress.currentOrThrow\n        val containerColor = if (twoPane) getPalerSurface() else MaterialTheme.colorScheme.surface\n        val topBarState = rememberTopAppBarState()\n\n        Scaffold(\n            topBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topBarState),\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(\n                        if (mainSettings) {\n                            AYMR.strings.label_player\n                        } else {\n                            AYMR.strings.label_player_settings\n                        },\n                    ),\n                    navigateUp = backPress::invoke,\n                    actions = {\n                        AppBarActions(\n                            persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_search),\n                                    icon = Icons.Outlined.Search,\n                                    onClick = { navigator.navigate(SettingsSearchScreen(true), twoPane) },\n                                ),\n                            ),\n                        )\n                    },\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n            containerColor = containerColor,\n            content = { contentPadding ->\n                val state = rememberLazyListState()\n                val indexSelected = if (twoPane) {\n                    items.indexOfFirst { it.screen::class == navigator.items.first()::class }\n                        .also {\n                            LaunchedEffect(Unit) {\n                                state.animateScrollToItem(it)\n                                if (it > 0) {\n                                    // Lift scroll\n                                    topBarState.contentOffset = topBarState.heightOffsetLimit\n                                }\n                            }\n                        }\n                } else {\n                    null\n                }\n\n                LazyColumn(\n                    state = state,\n                    contentPadding = contentPadding,\n                ) {\n                    itemsIndexed(\n                        items = items,\n                        key = { _, item -> item.hashCode() },\n                    ) { index, item ->\n                        val selected = indexSelected == index\n                        var modifier: Modifier = Modifier\n                        var contentColor = LocalContentColor.current\n                        if (twoPane) {\n                            modifier = Modifier\n                                .padding(horizontal = 8.dp)\n                                .clip(RoundedCornerShape(24.dp))\n                                .then(\n                                    if (selected) {\n                                        Modifier.background(\n                                            MaterialTheme.colorScheme.surfaceVariant,\n                                        )\n                                    } else {\n                                        Modifier\n                                    },\n                                )\n                            if (selected) {\n                                contentColor = MaterialTheme.colorScheme.onSurfaceVariant\n                            }\n                        }\n                        CompositionLocalProvider(LocalContentColor provides contentColor) {\n                            TextPreferenceWidget(\n                                modifier = modifier,\n                                title = stringResource(item.titleRes),\n                                subtitle = item.formatSubtitle(),\n                                icon = item.icon,\n                                onPreferenceClick = { navigator.navigate(item.screen, twoPane) },\n                            )\n                        }\n                    }\n                }\n            },\n        )\n    }\n\n    private fun Navigator.navigate(screen: VoyagerScreen, twoPane: Boolean) {\n        if (twoPane) replaceAll(screen) else push(screen)\n    }\n\n    private data class Item(\n        val titleRes: StringResource,\n        val subtitleRes: StringResource? = null,\n        val formatSubtitle: @Composable () -> String? = { subtitleRes?.let { stringResource(it) } },\n        val icon: ImageVector,\n        val screen: VoyagerScreen,\n    )\n\n    private val items = listOf(\n        Item(\n            titleRes = AYMR.strings.pref_player_internal,\n            subtitleRes = AYMR.strings.pref_player_internal_summary,\n            icon = Icons.Outlined.PlayCircleOutline,\n            screen = PlayerSettingsPlayerScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_gestures,\n            subtitleRes = AYMR.strings.pref_player_gestures_summary,\n            icon = Icons.Outlined.Gesture,\n            screen = PlayerSettingsGesturesScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_decoder,\n            subtitleRes = AYMR.strings.pref_player_decoder_summary,\n            icon = Icons.Outlined.Memory,\n            screen = PlayerSettingsDecoderScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_subtitle,\n            subtitleRes = AYMR.strings.pref_player_subtitle_summary,\n            icon = Icons.Outlined.Subtitles,\n            screen = PlayerSettingsSubtitleScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_audio,\n            subtitleRes = AYMR.strings.pref_player_audio_summary,\n            icon = Icons.Outlined.Audiotrack,\n            screen = PlayerSettingsAudioScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_custom_button,\n            subtitleRes = AYMR.strings.pref_player_custom_button_summary,\n            icon = Icons.Outlined.Terminal,\n            screen = PlayerSettingsCustomButtonScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_editor,\n            subtitleRes = AYMR.strings.pref_player_editor_summary,\n            icon = Icons.Outlined.EditNote,\n            screen = PlayerSettingsEditorScreen,\n        ),\n        Item(\n            titleRes = AYMR.strings.pref_player_advanced,\n            subtitleRes = AYMR.strings.pref_player_advanced_summary,\n            icon = Icons.Outlined.Code,\n            screen = PlayerSettingsAdvancedScreen,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsPlayerScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport android.os.Build\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.tachiyomi.ui.player.JUST_PLAYER\nimport eu.kanade.tachiyomi.ui.player.MPV_KT\nimport eu.kanade.tachiyomi.ui.player.MPV_KT_PREVIEW\nimport eu.kanade.tachiyomi.ui.player.MPV_PLAYER\nimport eu.kanade.tachiyomi.ui.player.MPV_REMOTE\nimport eu.kanade.tachiyomi.ui.player.MX_PLAYER\nimport eu.kanade.tachiyomi.ui.player.MX_PLAYER_FREE\nimport eu.kanade.tachiyomi.ui.player.MX_PLAYER_PRO\nimport eu.kanade.tachiyomi.ui.player.NEXT_PLAYER\nimport eu.kanade.tachiyomi.ui.player.PlayerOrientation\nimport eu.kanade.tachiyomi.ui.player.VLC_PLAYER\nimport eu.kanade.tachiyomi.ui.player.WEB_VIDEO_CASTER\nimport eu.kanade.tachiyomi.ui.player.X_PLAYER\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toPersistentMap\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.text.NumberFormat\n\nobject PlayerSettingsPlayerScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = AYMR.strings.pref_player_internal\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val playerPreferences = remember { Injekt.get<PlayerPreferences>() }\n        val basePreferences = remember { Injekt.get<BasePreferences>() }\n        val deviceSupportsPip = basePreferences.deviceHasPip()\n\n        return listOfNotNull(\n            Preference.PreferenceItem.ListPreference(\n                preference = playerPreferences.progressPreference(),\n                entries = persistentMapOf(\n                    1.00F to stringResource(AYMR.strings.pref_progress_100),\n                    0.95F to stringResource(AYMR.strings.pref_progress_95),\n                    0.90F to stringResource(AYMR.strings.pref_progress_90),\n                    0.85F to stringResource(AYMR.strings.pref_progress_85),\n                    0.80F to stringResource(AYMR.strings.pref_progress_80),\n                    0.75F to stringResource(AYMR.strings.pref_progress_75),\n                    0.70F to stringResource(AYMR.strings.pref_progress_70),\n                ),\n                title = stringResource(AYMR.strings.pref_progress_mark_as_seen),\n            ),\n            Preference.PreferenceItem.SwitchPreference(\n                preference = playerPreferences.preserveWatchingPosition(),\n                title = stringResource(AYMR.strings.pref_preserve_watching_position),\n            ),\n            Preference.PreferenceItem.ListPreference(\n                preference = playerPreferences.defaultPlayerOrientationType(),\n                entries = PlayerOrientation.entries.associateWith {\n                    stringResource(it.titleRes)\n                }.toPersistentMap(),\n                title = stringResource(AYMR.strings.pref_category_player_orientation),\n            ),\n            getControlsGroup(playerPreferences = playerPreferences),\n            getHosterGroup(playerPreferences = playerPreferences),\n            getDisplayGroup(playerPreferences = playerPreferences),\n            getIntroSkipGroup(playerPreferences = playerPreferences),\n            if (deviceSupportsPip) getPipGroup(playerPreferences = playerPreferences) else null,\n            getExternalPlayerGroup(\n                playerPreferences = playerPreferences,\n                basePreferences = basePreferences,\n            ),\n        )\n    }\n\n    @Composable\n    private fun getControlsGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup {\n        val allowGestures = playerPreferences.allowGestures()\n        val showLoading = playerPreferences.showLoadingCircle()\n        val showChapter = playerPreferences.showCurrentChapter()\n        val rememberPlayerBrightness = playerPreferences.rememberPlayerBrightness()\n        val rememberPlayerVolume = playerPreferences.rememberPlayerVolume()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_controls),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = allowGestures,\n                    title = stringResource(AYMR.strings.pref_controls_allow_gestures_in_panels),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = showLoading,\n                    title = stringResource(AYMR.strings.pref_controls_show_loading),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = showChapter,\n                    title = stringResource(AYMR.strings.pref_controls_show_chapter_indicator),\n                    subtitle = stringResource(AYMR.strings.pref_controls_show_chapter_indicator_info),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = rememberPlayerBrightness,\n                    title = stringResource(AYMR.strings.pref_remember_brightness),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = rememberPlayerVolume,\n                    title = stringResource(AYMR.strings.pref_remember_volume),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getHosterGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup {\n        val showFailure = playerPreferences.showFailedHosters()\n        val showEmpty = playerPreferences.showEmptyHosters()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_hosters),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = showFailure,\n                    title = stringResource(AYMR.strings.pref_hosters_show_failure),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = showEmpty,\n                    title = stringResource(AYMR.strings.pref_hosters_show_empty),\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getDisplayGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup {\n        val fullScreen = playerPreferences.playerFullscreen()\n        val hideControls = playerPreferences.hideControls()\n        val displayVol = playerPreferences.displayVolPer()\n        val showSystemBar = playerPreferences.showSystemStatusBar()\n        val reduceMotion = playerPreferences.reduceMotion()\n        val hideTime = playerPreferences.playerTimeToDisappear()\n\n        val panelOpacityPref = playerPreferences.panelOpacity()\n        val panelOpacity by panelOpacityPref.collectAsState()\n        val numberFormat = remember { NumberFormat.getPercentInstance() }\n\n        return Preference.PreferenceGroup(\n            title = stringResource(MR.strings.pref_category_display),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = fullScreen,\n                    title = stringResource(AYMR.strings.pref_player_fullscreen),\n                    enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = hideControls,\n                    title = stringResource(AYMR.strings.pref_player_hide_controls),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = displayVol,\n                    title = stringResource(AYMR.strings.pref_controls_display_volume_percentage),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = showSystemBar,\n                    title = stringResource(AYMR.strings.pref_show_system_bar),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = reduceMotion,\n                    title = stringResource(AYMR.strings.pref_reduce_motion),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = hideTime,\n                    entries = listOf(500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000).associateWith {\n                        stringResource(AYMR.strings.pref_player_time_to_disappear_summary, it)\n                    }.toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_player_time_to_disappear),\n                ),\n                Preference.PreferenceItem.SliderPreference(\n                    value = panelOpacity,\n                    valueRange = 0..100,\n                    title = stringResource(AYMR.strings.pref_panel_opacity),\n                    subtitle = numberFormat.format(panelOpacity / 100f),\n                    onValueChanged = {\n                        panelOpacityPref.set(it)\n                        true\n                    },\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getIntroSkipGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup {\n        val enableSkipIntro = playerPreferences.enableSkipIntro()\n        val isIntroSkipEnabled by enableSkipIntro.collectAsState()\n\n        val enableAutoAniSkip = playerPreferences.autoSkipIntro()\n        val enableNetflixAniSkip = playerPreferences.enableNetflixStyleIntroSkip()\n        val waitingTimeAniSkip = playerPreferences.waitingTimeIntroSkip()\n\n        // AniSkip\n        val enableAniSkip = playerPreferences.aniSkipEnabled()\n        val disableAniSkipChapters = playerPreferences.disableAniSkipOnChapters()\n        val isAniSkipEnabled by enableAniSkip.collectAsState()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_intro_skip),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enableSkipIntro,\n                    title = stringResource(AYMR.strings.pref_enable_intro_skip),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enableAutoAniSkip,\n                    title = stringResource(AYMR.strings.pref_enable_auto_skip_ani_skip),\n                    enabled = isIntroSkipEnabled,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enableNetflixAniSkip,\n                    title = stringResource(AYMR.strings.pref_enable_netflix_style_aniskip),\n                    enabled = isIntroSkipEnabled,\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = waitingTimeAniSkip,\n                    entries = persistentMapOf(\n                        5 to stringResource(AYMR.strings.pref_waiting_time_aniskip_5),\n                        6 to stringResource(AYMR.strings.pref_waiting_time_aniskip_6),\n                        7 to stringResource(AYMR.strings.pref_waiting_time_aniskip_7),\n                        8 to stringResource(AYMR.strings.pref_waiting_time_aniskip_8),\n                        9 to stringResource(AYMR.strings.pref_waiting_time_aniskip_9),\n                        10 to stringResource(AYMR.strings.pref_waiting_time_aniskip_10),\n                    ),\n                    title = stringResource(AYMR.strings.pref_waiting_time_aniskip),\n                    enabled = isIntroSkipEnabled,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enableAniSkip,\n                    title = stringResource(AYMR.strings.pref_enable_aniskip),\n                    enabled = isIntroSkipEnabled,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = disableAniSkipChapters,\n                    title = stringResource(AYMR.strings.pref_disable_aniskip_chapter),\n                    enabled = isIntroSkipEnabled && isAniSkipEnabled,\n                ),\n                Preference.PreferenceItem.InfoPreference(\n                    title = stringResource(AYMR.strings.pref_category_player_aniskip_info),\n                    enabled = isIntroSkipEnabled,\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getPipGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup {\n        val enablePip = playerPreferences.enablePip()\n        val pipEpisodeToasts = playerPreferences.pipEpisodeToasts()\n        val pipOnExit = playerPreferences.pipOnExit()\n        val pipReplaceWithPrevious = playerPreferences.pipReplaceWithPrevious()\n\n        val isPipEnabled by enablePip.collectAsState()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_pip),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = enablePip,\n                    title = stringResource(AYMR.strings.pref_enable_pip),\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = pipEpisodeToasts,\n                    title = stringResource(AYMR.strings.pref_pip_episode_toasts),\n                    enabled = isPipEnabled,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = pipOnExit,\n                    title = stringResource(AYMR.strings.pref_pip_on_exit),\n                    enabled = isPipEnabled,\n                ),\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = pipReplaceWithPrevious,\n                    title = stringResource(AYMR.strings.pref_pip_replace_with_previous),\n                    enabled = isPipEnabled,\n                ),\n            ),\n        )\n    }\n\n    @Composable\n    private fun getExternalPlayerGroup(\n        playerPreferences: PlayerPreferences,\n        basePreferences: BasePreferences,\n    ): Preference.PreferenceGroup {\n        val alwaysUseExternalPlayer = playerPreferences.alwaysUseExternalPlayer()\n        val externalPlayerPreference = playerPreferences.externalPlayerPreference()\n\n        val pm = basePreferences.context.packageManager\n        val installedPackages = pm.getInstalledPackages(0)\n        val supportedPlayers = installedPackages.filter { it.packageName in externalPlayers }\n\n        val packageNames = supportedPlayers.map { it.packageName }\n        val packageNamesReadable = supportedPlayers\n            .map { pm.getApplicationLabel(it.applicationInfo!!).toString() }\n\n        val packageNamesMap: Map<String, String> =\n            packageNames.zip(packageNamesReadable)\n                .toMap()\n\n        return Preference.PreferenceGroup(\n            title = stringResource(AYMR.strings.pref_category_external_player),\n            preferenceItems = persistentListOf(\n                Preference.PreferenceItem.SwitchPreference(\n                    preference = alwaysUseExternalPlayer,\n                    title = stringResource(AYMR.strings.pref_always_use_external_player),\n                ),\n                Preference.PreferenceItem.ListPreference(\n                    preference = externalPlayerPreference,\n                    entries = (mapOf(\"\" to \"None\") + packageNamesMap).toPersistentMap(),\n                    title = stringResource(AYMR.strings.pref_external_player_preference),\n                ),\n            ),\n        )\n    }\n}\n\nval externalPlayers = listOf(\n    MPV_PLAYER,\n    MX_PLAYER,\n    MX_PLAYER_FREE,\n    MX_PLAYER_PRO,\n    VLC_PLAYER,\n    MPV_KT,\n    MPV_KT_PREVIEW,\n    MPV_REMOTE,\n    JUST_PLAYER,\n    NEXT_PLAYER,\n    X_PLAYER,\n    WEB_VIDEO_CASTER,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsSubtitleScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.remember\nimport eu.kanade.presentation.more.settings.Preference\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.Locale\nimport java.util.MissingResourceException\n\nobject PlayerSettingsSubtitleScreen : SearchableSettings {\n\n    @ReadOnlyComposable\n    @Composable\n    override fun getTitleRes() = AYMR.strings.pref_player_subtitle\n\n    @Composable\n    override fun getPreferences(): List<Preference> {\n        val subtitlePreferences = remember { Injekt.get<SubtitlePreferences>() }\n\n        val langPref = subtitlePreferences.preferredSubLanguages()\n        val whitelist = subtitlePreferences.subtitleWhitelist()\n        val blacklist = subtitlePreferences.subtitleBlacklist()\n\n        return listOf(\n            Preference.PreferenceItem.EditTextInfoPreference(\n                preference = langPref,\n                dialogSubtitle = stringResource(AYMR.strings.pref_player_subtitle_lang_info),\n                title = stringResource(AYMR.strings.pref_player_subtitle_lang),\n                validate = { pref ->\n                    val langs = pref.split(\",\").filter(String::isNotEmpty).map(String::trim)\n                    langs.forEach {\n                        try {\n                            val locale = Locale(it)\n                            if (locale.isO3Language == locale.language &&\n                                locale.language == locale.getDisplayName(Locale.ENGLISH)\n                            ) {\n                                throw MissingResourceException(\"\", \"\", \"\")\n                            }\n                        } catch (_: MissingResourceException) {\n                            return@EditTextInfoPreference false\n                        }\n                    }\n\n                    true\n                },\n                errorMessage = { pref ->\n                    val langs = pref.split(\",\").filter(String::isNotEmpty).map(String::trim)\n                    langs.forEach {\n                        try {\n                            val locale = Locale(it)\n                            if (locale.isO3Language == locale.language &&\n                                locale.language == locale.getDisplayName(Locale.ENGLISH)\n                            ) {\n                                throw MissingResourceException(\"\", \"\", \"\")\n                            }\n                        } catch (_: MissingResourceException) {\n                            return@EditTextInfoPreference stringResource(\n                                AYMR.strings.pref_player_subtitle_invalid_lang,\n                                it,\n                            )\n                        }\n                    }\n                    \"\"\n                },\n            ),\n            Preference.PreferenceItem.EditTextInfoPreference(\n                preference = whitelist,\n                dialogSubtitle = stringResource(AYMR.strings.pref_player_subtitle_whitelist_info),\n                title = stringResource(AYMR.strings.pref_player_subtitle_whitelist),\n            ),\n            Preference.PreferenceItem.EditTextInfoPreference(\n                preference = blacklist,\n                dialogSubtitle = stringResource(AYMR.strings.pref_player_subtitle_blacklist_info),\n                title = stringResource(AYMR.strings.pref_player_subtitle_blacklist),\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/custombutton/PlayerSettingsCustomButtonScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.custombutton\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.util.fastMap\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.components.CustomButtonCreateDialog\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.components.CustomButtonDeleteDialog\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.components.CustomButtonEditDialog\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.components.CustomButtonScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nobject PlayerSettingsCustomButtonScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val uriHandler = LocalUriHandler.current\n        val screenModel = rememberScreenModel { PlayerSettingsCustomButtonScreenModel() }\n\n        val state by screenModel.state.collectAsState()\n\n        if (state is CustomButtonScreenState.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as CustomButtonScreenState.Success\n\n        CustomButtonScreen(\n            state = successState,\n            onClickFAQ = { uriHandler.openUri(\"https://aniyomi.org/docs/guides/player-settings/custom-buttons\") },\n            onClickCreate = { screenModel.showDialog(CustomButtonDialog.Create) },\n            onClickPrimary = { screenModel.togglePrimaryButton(it) },\n            onClickEdit = { screenModel.showDialog(CustomButtonDialog.Edit(it)) },\n            onClickDelete = { screenModel.showDialog(CustomButtonDialog.Delete(it)) },\n            onChangeOrder = screenModel::changeOrder,\n            navigateUp = navigator::pop,\n        )\n\n        when (val dialog = successState.dialog) {\n            null -> {}\n            CustomButtonDialog.Create -> {\n                CustomButtonCreateDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onCreate = screenModel::createCustomButton,\n                    buttonNames = successState.customButtons.fastMap { it.name }.toImmutableList(),\n                )\n            }\n            is CustomButtonDialog.Delete -> {\n                CustomButtonDeleteDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onDelete = { screenModel.deleteCustomButton(dialog.customButton) },\n                    buttonTitle = dialog.customButton.name,\n                )\n            }\n            is CustomButtonDialog.Edit -> {\n                CustomButtonEditDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onEdit = { title, content, longPressContent, onStartup ->\n                        screenModel.editCustomButton(\n                            CustomButtonUpdate(\n                                id = dialog.customButton.id,\n                                name = title,\n                                sortIndex = dialog.customButton.sortIndex,\n                                content = content,\n                                longPressContent = longPressContent,\n                                onStartup = onStartup,\n                            ),\n                        )\n                    },\n                    buttonNames = (successState.customButtons - dialog.customButton).fastMap {\n                        it.name\n                    }.toImmutableList(),\n                    initialState = dialog.customButton,\n                )\n            }\n        }\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                if (event is CustomButtonEvent.LocalizedMessage) {\n                    context.toast(event.stringRes)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/custombutton/PlayerSettingsCustomButtonScreenModel.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.custombutton\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.custombuttons.interactor.CreateCustomButton\nimport tachiyomi.domain.custombuttons.interactor.DeleteCustomButton\nimport tachiyomi.domain.custombuttons.interactor.GetCustomButtons\nimport tachiyomi.domain.custombuttons.interactor.ReorderCustomButton\nimport tachiyomi.domain.custombuttons.interactor.ToggleFavoriteCustomButton\nimport tachiyomi.domain.custombuttons.interactor.UpdateCustomButton\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass PlayerSettingsCustomButtonScreenModel(\n    private val getCustomButtons: GetCustomButtons = Injekt.get(),\n    private val createCustomButton: CreateCustomButton = Injekt.get(),\n    private val deleteCustomButton: DeleteCustomButton = Injekt.get(),\n    private val updateCustomButton: UpdateCustomButton = Injekt.get(),\n    private val reorderCustomButton: ReorderCustomButton = Injekt.get(),\n    private val toggleFavoriteCustomButton: ToggleFavoriteCustomButton = Injekt.get(),\n) : StateScreenModel<CustomButtonScreenState>(CustomButtonScreenState.Loading) {\n\n    private val _events: Channel<CustomButtonEvent> = Channel()\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            getCustomButtons.subscribeAll()\n                .collectLatest { customButtons ->\n                    mutableState.update {\n                        CustomButtonScreenState.Success(\n                            customButtons = customButtons.toImmutableList(),\n                        )\n                    }\n                }\n        }\n    }\n\n    fun createCustomButton(name: String, content: String, longPressContent: String, onStartup: String) {\n        screenModelScope.launch {\n            when (createCustomButton.await(name, content, longPressContent, onStartup)) {\n                is CreateCustomButton.Result.InternalError -> _events.send(\n                    CustomButtonEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun togglePrimaryButton(customButton: CustomButton) {\n        screenModelScope.launch {\n            when (toggleFavoriteCustomButton.await(customButton)) {\n                is ToggleFavoriteCustomButton.Result.InternalError -> _events.send(\n                    CustomButtonEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun editCustomButton(customButtonUpdate: CustomButtonUpdate) {\n        screenModelScope.launch {\n            when (updateCustomButton.await(customButtonUpdate)) {\n                is UpdateCustomButton.Result.InternalError -> _events.send(\n                    CustomButtonEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun deleteCustomButton(customButton: CustomButton) {\n        screenModelScope.launch {\n            when (deleteCustomButton.await(customButton.id)) {\n                is DeleteCustomButton.Result.InternalError -> _events.send(\n                    CustomButtonEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun changeOrder(customButton: CustomButton, newIndex: Int) {\n        screenModelScope.launch {\n            when (reorderCustomButton.changeOrder(customButton, newIndex)) {\n                is ReorderCustomButton.Result.InternalError -> _events.send(\n                    CustomButtonEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun showDialog(dialog: CustomButtonDialog) {\n        mutableState.update {\n            when (it) {\n                CustomButtonScreenState.Loading -> it\n                is CustomButtonScreenState.Success -> it.copy(dialog = dialog)\n            }\n        }\n    }\n\n    fun dismissDialog() {\n        mutableState.update {\n            when (it) {\n                CustomButtonScreenState.Loading -> it\n                is CustomButtonScreenState.Success -> it.copy(dialog = null)\n            }\n        }\n    }\n}\n\nsealed interface CustomButtonDialog {\n    data object Create : CustomButtonDialog\n    data class Edit(val customButton: CustomButton) : CustomButtonDialog\n    data class Delete(val customButton: CustomButton) : CustomButtonDialog\n}\n\nsealed interface CustomButtonEvent {\n    sealed class LocalizedMessage(val stringRes: StringResource) : CustomButtonEvent\n    data object InternalError : LocalizedMessage(MR.strings.internal_error)\n}\n\nsealed interface CustomButtonScreenState {\n    @Immutable\n    data object Loading : CustomButtonScreenState\n\n    @Immutable\n    data class Success(\n        val customButtons: ImmutableList<CustomButton>,\n        val dialog: CustomButtonDialog? = null,\n    ) : CustomButtonScreenState {\n        val isEmpty: Boolean\n            get() = customButtons.isEmpty()\n    }\n}\n\nsealed interface CustomButtonFetchState {\n    @Immutable\n    data object Loading : CustomButtonFetchState\n\n    @Immutable\n    data class Success(val customButtons: ImmutableList<CustomButton>) : CustomButtonFetchState\n\n    @Immutable\n    data class Error(val errorMessage: String) : CustomButtonFetchState\n}\n\nfun CustomButtonFetchState.getButtons(): ImmutableList<CustomButton> {\n    return when (this) {\n        is CustomButtonFetchState.Success -> this.customButtons\n        else -> emptyList<CustomButton>().toImmutableList()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/custombutton/components/CustomButtonDialogs.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.custombutton.components\n\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.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.AlertDialog\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.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.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.text.input.TextFieldValue\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.more.settings.screen.player.editor.codeeditor.githubTheme\nimport eu.kanade.presentation.more.settings.screen.player.editor.codeeditor.luaHighlight\nimport eu.kanade.presentation.more.settings.screen.player.editor.codeeditor.toAnnotatedString\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.delay\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun CustomButtonButtonDialog(\n    onDismissRequest: () -> Unit,\n    onAction: (String, String, String, String) -> Unit,\n    titleRes: StringResource,\n    actionRes: StringResource,\n    buttonNames: ImmutableList<String>,\n    initialState: CustomButton?,\n) {\n    var title by remember { mutableStateOf(initialState?.name ?: \"\") }\n\n    val luaHighlight = remember { luaHighlight(githubTheme) }\n    var content by remember {\n        mutableStateOf(\n            TextFieldValue(\n                annotatedString = luaHighlight.toAnnotatedString(initialState?.content ?: \"\"),\n                composition = null,\n            ),\n        )\n    }\n    var longPressContent by remember {\n        mutableStateOf(\n            TextFieldValue(\n                annotatedString = luaHighlight.toAnnotatedString(initialState?.longPressContent ?: \"\"),\n                composition = null,\n            ),\n        )\n    }\n    var startUp by remember {\n        mutableStateOf(\n            TextFieldValue(\n                annotatedString = luaHighlight.toAnnotatedString(initialState?.onStartup ?: \"\"),\n                composition = null,\n            ),\n        )\n    }\n\n    val focusRequester = remember { FocusRequester() }\n    val titleAlreadyExists = remember(title) { buttonNames.contains(title) }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                enabled = title.isNotEmpty() && content.text.isNotEmpty() && !titleAlreadyExists,\n                onClick = {\n                    onAction(title, content.text, longPressContent.text, startUp.text)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(actionRes))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Row {\n                Text(text = stringResource(titleRes))\n                initialState?.id?.let { buttonId ->\n                    Spacer(Modifier.weight(1f))\n                    Text(\n                        text = stringResource(AYMR.strings.pref_player_custom_button_id, buttonId),\n                        style = MaterialTheme.typography.bodyLarge,\n                        modifier = Modifier.alpha(alpha = DISABLED_ALPHA),\n                    )\n                }\n            }\n        },\n        text = {\n            Column(\n                verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n                modifier = Modifier.verticalScroll(rememberScrollState()),\n            ) {\n                OutlinedTextField(\n                    modifier = Modifier\n                        .focusRequester(focusRequester),\n                    value = title,\n                    onValueChange = { title = it },\n                    label = {\n                        Text(text = stringResource(AYMR.strings.pref_player_custom_button_title))\n                    },\n                    supportingText = {\n                        val msgRes = if (title.isNotEmpty() && titleAlreadyExists) {\n                            AYMR.strings.pref_player_custom_button_error_exists\n                        } else {\n                            MR.strings.information_required_plain\n                        }\n                        Text(text = stringResource(msgRes))\n                    },\n                    isError = title.isNotEmpty() && titleAlreadyExists,\n                    singleLine = true,\n                )\n\n                OutlinedTextField(\n                    value = content,\n                    onValueChange = { content = it.copy(luaHighlight.toAnnotatedString(it.text)) },\n                    label = {\n                        Text(text = stringResource(AYMR.strings.pref_player_custom_button_content))\n                    },\n                    supportingText = {\n                        Text(text = stringResource(MR.strings.information_required_plain))\n                    },\n                    minLines = 3,\n                    maxLines = 5,\n                )\n\n                OutlinedTextField(\n                    value = longPressContent,\n                    onValueChange = { longPressContent = it.copy(luaHighlight.toAnnotatedString(it.text)) },\n                    label = {\n                        Text(text = stringResource(AYMR.strings.pref_player_custom_button_content_long))\n                    },\n                    supportingText = {\n                        Text(text = stringResource(AYMR.strings.pref_player_custom_button_optional))\n                    },\n                    minLines = 3,\n                    maxLines = 5,\n                )\n\n                OutlinedTextField(\n                    value = startUp,\n                    onValueChange = { startUp = it.copy(luaHighlight.toAnnotatedString(it.text)) },\n                    label = {\n                        Text(text = stringResource(AYMR.strings.pref_player_custom_button_startup))\n                    },\n                    supportingText = {\n                        Text(text = stringResource(AYMR.strings.pref_player_custom_button_optional))\n                    },\n                    minLines = 2,\n                    maxLines = 4,\n                )\n            }\n        },\n    )\n\n    LaunchedEffect(focusRequester) {\n        // TODO: https://issuetracker.google.com/issues/204502668\n        delay(0.1.seconds)\n        focusRequester.requestFocus()\n    }\n}\n\n@Composable\nfun CustomButtonCreateDialog(\n    onDismissRequest: () -> Unit,\n    onCreate: (String, String, String, String) -> Unit,\n    buttonNames: ImmutableList<String>,\n) {\n    CustomButtonButtonDialog(\n        onDismissRequest = onDismissRequest,\n        onAction = onCreate,\n        titleRes = AYMR.strings.pref_player_custom_button_add,\n        actionRes = MR.strings.action_add,\n        buttonNames = buttonNames,\n        initialState = null,\n    )\n}\n\n@Composable\nfun CustomButtonEditDialog(\n    onDismissRequest: () -> Unit,\n    onEdit: (String, String, String, String) -> Unit,\n    buttonNames: ImmutableList<String>,\n    initialState: CustomButton,\n) {\n    CustomButtonButtonDialog(\n        onDismissRequest = onDismissRequest,\n        onAction = onEdit,\n        titleRes = AYMR.strings.pref_player_custom_button_edit,\n        actionRes = MR.strings.action_edit,\n        buttonNames = buttonNames,\n        initialState = initialState,\n    )\n}\n\n@Composable\nfun CustomButtonDeleteDialog(\n    onDismissRequest: () -> Unit,\n    onDelete: () -> Unit,\n    buttonTitle: String,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onDelete()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(AYMR.strings.pref_player_custom_button_delete))\n        },\n        text = {\n            Text(text = stringResource(AYMR.strings.pref_player_custom_button_delete_confirm, buttonTitle))\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/custombutton/components/CustomButtonListItem.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.custombutton.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.DragHandle\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material.icons.outlined.Star\nimport androidx.compose.material.icons.outlined.StarOutline\nimport androidx.compose.material3.ElevatedCard\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.Color\nimport androidx.compose.ui.text.style.TextOverflow\nimport sh.calvin.reorderable.ReorderableCollectionItemScope\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ReorderableCollectionItemScope.CustomButtonListItem(\n    customButton: CustomButton,\n    isFavorite: Boolean,\n    onTogglePrimary: () -> Unit,\n    onEdit: () -> Unit,\n    onDelete: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    ElevatedCard(\n        modifier = modifier.clickable(onClick = onEdit),\n    ) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(vertical = MaterialTheme.padding.small)\n                .padding(\n                    start = MaterialTheme.padding.small,\n                    end = MaterialTheme.padding.medium,\n                ),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Outlined.DragHandle,\n                contentDescription = null,\n                modifier = Modifier\n                    .padding(MaterialTheme.padding.medium)\n                    .draggableHandle(),\n            )\n\n            Text(\n                text = customButton.name,\n                modifier = Modifier.weight(1f),\n            )\n\n            val starColor = Color(0xFFFDD835)\n            val starImage = if (isFavorite) Icons.Outlined.Star else Icons.Outlined.StarOutline\n            IconButton(onClick = onTogglePrimary) {\n                Icon(\n                    imageVector = starImage,\n                    tint = starColor,\n                    contentDescription = null,\n                )\n            }\n            IconButton(onClick = onEdit) {\n                Icon(\n                    imageVector = Icons.Outlined.Edit,\n                    contentDescription = stringResource(MR.strings.action_edit),\n                )\n            }\n            IconButton(onClick = onDelete) {\n                Icon(\n                    imageVector = Icons.Outlined.Delete,\n                    contentDescription = stringResource(MR.strings.action_delete),\n                )\n            }\n        }\n\n        Text(\n            text = customButton.content,\n            style = MaterialTheme.typography.bodySmall,\n            color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.75f),\n            maxLines = 3,\n            overflow = TextOverflow.Ellipsis,\n            modifier = Modifier\n                .padding(\n                    bottom = MaterialTheme.padding.medium,\n                    start = MaterialTheme.padding.medium,\n                ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/custombutton/components/CustomButtonScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.custombutton.components\n\nimport androidx.compose.foundation.layout.Arrangement\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.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.FloatingActionAddButton\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.CustomButtonScreenState\nimport sh.calvin.reorderable.ReorderableItem\nimport sh.calvin.reorderable.rememberReorderableLazyListState\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.components.material.topSmallPaddingValues\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.util.plus\n\n@Composable\nfun CustomButtonScreen(\n    state: CustomButtonScreenState.Success,\n    onClickFAQ: () -> Unit,\n    onClickCreate: () -> Unit,\n    onClickPrimary: (CustomButton) -> Unit,\n    onClickEdit: (CustomButton) -> Unit,\n    onClickDelete: (CustomButton) -> Unit,\n    onChangeOrder: (CustomButton, Int) -> Unit,\n    navigateUp: () -> Unit,\n) {\n    val lazyListState = rememberLazyListState()\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                title = stringResource(AYMR.strings.pref_player_custom_button_header),\n                navigateUp = navigateUp,\n                actions = {\n                    IconButton(onClick = onClickFAQ) {\n                        Icon(\n                            imageVector = Icons.AutoMirrored.Outlined.HelpOutline,\n                            contentDescription = stringResource(AYMR.strings.pref_player_custom_button_guide),\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior,\n            )\n        },\n        floatingActionButton = {\n            FloatingActionAddButton(\n                lazyListState = lazyListState,\n                onClick = onClickCreate,\n            )\n        },\n    ) { paddingValues ->\n        if (state.isEmpty) {\n            EmptyScreen(\n                stringRes = AYMR.strings.pref_player_custom_button_empty,\n                modifier = Modifier.padding(paddingValues),\n            )\n            return@Scaffold\n        }\n\n        CustomButtonContent(\n            customButtons = state.customButtons,\n            lazyListState = lazyListState,\n            paddingValues = paddingValues,\n            onClickPrimary = onClickPrimary,\n            onClickEdit = onClickEdit,\n            onClickDelete = onClickDelete,\n            onChangeOrder = onChangeOrder,\n        )\n    }\n}\n\n@Composable\nprivate fun CustomButtonContent(\n    customButtons: List<CustomButton>,\n    lazyListState: LazyListState,\n    paddingValues: PaddingValues,\n    onClickPrimary: (CustomButton) -> Unit,\n    onClickEdit: (CustomButton) -> Unit,\n    onClickDelete: (CustomButton) -> Unit,\n    onChangeOrder: (CustomButton, Int) -> Unit,\n) {\n    val customButtonsState = remember { customButtons.toMutableStateList() }\n    val reorderableState = rememberReorderableLazyListState(lazyListState, paddingValues) { from, to ->\n        val item = customButtonsState.removeAt(from.index)\n        customButtonsState.add(to.index, item)\n        onChangeOrder(item, to.index)\n    }\n\n    LaunchedEffect(customButtons) {\n        if (!reorderableState.isAnyItemDragging) {\n            customButtonsState.clear()\n            customButtonsState.addAll(customButtons)\n        }\n    }\n\n    LazyColumn(\n        modifier = Modifier.fillMaxSize(),\n        state = lazyListState,\n        contentPadding = paddingValues +\n            topSmallPaddingValues +\n            PaddingValues(horizontal = MaterialTheme.padding.medium),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        items(\n            items = customButtonsState,\n            key = { customButton -> customButton.key },\n        ) { customButton ->\n            ReorderableItem(reorderableState, customButton.key) {\n                CustomButtonListItem(\n                    modifier = Modifier.animateItem(),\n                    customButton = customButton,\n                    isFavorite = customButton.isFavorite,\n                    onTogglePrimary = { onClickPrimary(customButton) },\n                    onEdit = { onClickEdit(customButton) },\n                    onDelete = { onClickDelete(customButton) },\n                )\n            }\n        }\n    }\n}\n\nprivate val CustomButton.key inline get() = \"custombutton-$id\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/PlayerSettingsEditorScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.screen.player.editor.codeeditor.CodeEditScreen\nimport eu.kanade.presentation.more.settings.screen.player.editor.components.EditorScreen\nimport eu.kanade.presentation.more.settings.screen.player.editor.components.FileCreateDialog\nimport eu.kanade.presentation.more.settings.screen.player.editor.components.FileDeleteDialog\nimport eu.kanade.presentation.util.Screen\n\nobject PlayerSettingsEditorScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { PlayerSettingsEditorScreenModel(context) }\n\n        val state by screenModel.state.collectAsState()\n        val dialog by screenModel.dialogShown.collectAsState()\n        val selectedType by screenModel.selectedType.collectAsState()\n\n        when (dialog) {\n            null -> {}\n            EditorFileDialog.Create -> {\n                FileCreateDialog(\n                    initialName = null,\n                    fileExtension = selectedType.fileExtension,\n                    onDismissRequest = screenModel::dismissDialog,\n                    isValid = screenModel::isValidName,\n                    onConfirm = screenModel::createFile,\n                )\n            }\n            is EditorFileDialog.Edit -> {\n                val name = (dialog as EditorFileDialog.Edit).item.name\n                FileCreateDialog(\n                    initialName = name,\n                    fileExtension = selectedType.fileExtension,\n                    onDismissRequest = screenModel::dismissDialog,\n                    isValid = screenModel::isValidName,\n                    onConfirm = { screenModel.editFile(name, it) },\n                )\n            }\n            is EditorFileDialog.Delete -> {\n                val name = (dialog as EditorFileDialog.Delete).item.name\n                FileDeleteDialog(\n                    name = name,\n                    onDismissRequest = screenModel::dismissDialog,\n                    onDelete = { screenModel.deleteFile(name) },\n                )\n            }\n        }\n\n        EditorScreen(\n            state = state,\n            selectedType = selectedType,\n            onSelectType = screenModel::onSelectType,\n            onClickItem = {\n                screenModel.getFilePath(it.name).let { filePath ->\n                    navigator.push(CodeEditScreen(filePath))\n                }\n            },\n            onRenameItem = { screenModel.showDialog(EditorFileDialog.Edit(it)) },\n            onDeleteItem = { screenModel.showDialog(EditorFileDialog.Delete(it)) },\n            onClickAdd = { screenModel.showDialog(EditorFileDialog.Create) },\n            navigateUp = navigator::pop,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/PlayerSettingsEditorScreenModel.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor\n\nimport android.content.Context\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.util.size\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.system.toast\nimport eu.kanade.tachiyomi.util.toSize\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.storage.service.SCRIPTS_PATH\nimport tachiyomi.domain.storage.service.SCRIPT_OPTS_PATH\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\n\nclass PlayerSettingsEditorScreenModel(\n    private val context: Context,\n    private val storageManager: StorageManager = Injekt.get(),\n) : StateScreenModel<EditorScreenState>(EditorScreenState.Loading) {\n    private val _selectedType = MutableStateFlow(EditorListType.SCRIPTS)\n    val selectedType = _selectedType.asStateFlow()\n\n    private val _dialogShown = MutableStateFlow<EditorFileDialog?>(null)\n    val dialogShown = _dialogShown.asStateFlow()\n\n    init {\n        screenModelScope.launchIO {\n            _selectedType.collectLatest { type ->\n                updateItems(type)\n            }\n        }\n    }\n\n    private fun updateItems(type: EditorListType) {\n        mutableState.update {\n            EditorScreenState.Success(\n                editorListItems = getEditorListItems(type),\n            )\n        }\n    }\n\n    fun createFile(fileName: String) {\n        storageManager.getMPVConfigDirectory()\n            ?.createDirectory(selectedType.value.directoryName)\n            ?.createFile(fileName)\n            ?: run {\n                context.toast(context.stringResource(AYMR.strings.editor_create_error))\n                return\n            }\n\n        updateItems(selectedType.value)\n    }\n\n    fun editFile(originalFile: String, fileName: String) {\n        val file = storageManager.getMPVConfigDirectory()\n            ?.createDirectory(selectedType.value.directoryName)\n            ?.createFile(originalFile)\n\n        if (file?.renameTo(fileName) == true) {\n            updateItems(selectedType.value)\n        } else {\n            context.toast(context.stringResource(AYMR.strings.editor_rename_error))\n        }\n    }\n\n    fun deleteFile(name: String) {\n        val file = storageManager.getMPVConfigDirectory()\n            ?.createDirectory(selectedType.value.directoryName)\n            ?.findFile(name)\n\n        if (file?.delete() == true) {\n            updateItems(selectedType.value)\n        } else {\n            context.toast(context.stringResource(AYMR.strings.editor_delete_error))\n        }\n    }\n\n    fun isValidName(name: String, initialName: String? = null): FileCreationResult {\n        val names = (mutableState.value as? EditorScreenState.Success)\n            ?.editorListItems\n            ?.map { it.name }\n            ?.filterNot { it == initialName }\n            .orEmpty()\n\n        if (names.any { it.equals(name, true) }) {\n            return FileCreationResult.Failure(AYMR.strings.editor_file_already_exists)\n        }\n\n        if (name != DiskUtil.buildValidFilename(name)) {\n            return FileCreationResult.Failure(AYMR.strings.editor_invalid_filename)\n        }\n\n        return FileCreationResult.Success\n    }\n\n    fun showDialog(dialog: EditorFileDialog) {\n        _dialogShown.update { _ -> dialog }\n    }\n\n    fun dismissDialog() {\n        _dialogShown.update { _ -> null }\n    }\n\n    fun onSelectType(type: EditorListType) {\n        _selectedType.update { _ -> type }\n    }\n\n    fun getFilePath(name: String): String {\n        return \"${selectedType.value.directoryName}/$name\"\n    }\n\n    private fun getEditorListItems(type: EditorListType): List<EditorListItem> {\n        val directory = storageManager.getMPVConfigDirectory()?.createDirectory(type.directoryName)\n            ?: return emptyList()\n\n        val dateFormat = SimpleDateFormat(\"MMMM d, yyyy HH:mm\", Locale.getDefault())\n\n        return directory.listFiles()?.mapNotNull { file ->\n            if (file.isDirectory) {\n                return@mapNotNull null\n            }\n\n            val lastModified = file.lastModified().takeIf { it != -1L }?.let {\n                dateFormat.format(Date(it))\n            }\n\n            EditorListItem(\n                name = file.name ?: \"\",\n                size = file.size().toSize(),\n                lastModified = lastModified,\n            )\n        }.orEmpty()\n    }\n}\n\nsealed interface FileCreationResult {\n    data object Success : FileCreationResult\n    data class Failure(val stringRes: StringResource) : FileCreationResult\n}\n\nsealed interface EditorFileDialog {\n    data object Create : EditorFileDialog\n    data class Edit(val item: EditorListItem) : EditorFileDialog\n    data class Delete(val item: EditorListItem) : EditorFileDialog\n}\n\nenum class EditorListType(val directoryName: String, val stringRes: StringResource, val fileExtension: String) {\n    SCRIPTS(SCRIPTS_PATH, AYMR.strings.pref_player_editor_script, \"lua\"),\n    SCRIPTS_OPTS(SCRIPT_OPTS_PATH, AYMR.strings.pref_player_editor_script_opts, \"conf\"),\n}\n\ndata class EditorListItem(\n    val name: String,\n    val size: String? = null,\n    val lastModified: String? = null,\n)\n\nsealed interface EditorScreenState {\n    @Immutable\n    data object Loading : EditorScreenState\n\n    @Immutable\n    data class Success(\n        val editorListItems: List<EditorListItem>,\n    ) : EditorScreenState {\n        val isEmpty: Boolean\n            get() = editorListItems.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/codeeditor/CodeEditScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.codeeditor\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.foundation.horizontalScroll\nimport androidx.compose.foundation.layout.Arrangement\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.imePadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.text.BasicTextField\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.input.TextFieldValue\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.more.settings.screen.player.editor.components.UnsavedChangesDialog\nimport eu.kanade.presentation.util.Screen\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass CodeEditScreen(private val filePath: String) : Screen() {\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val screenModel = rememberScreenModel { CodeEditScreenModel(context, filePath) }\n\n        val state by screenModel.state.collectAsState()\n        val dialogShown by screenModel.dialogShown.collectAsState()\n        val hasModified by screenModel.hasModified.collectAsState()\n\n        BackHandler(enabled = hasModified) {\n            screenModel.showDialog(CodeEditDialogs.GoBack)\n        }\n\n        when (dialogShown) {\n            null -> {}\n            CodeEditDialogs.GoBack -> {\n                UnsavedChangesDialog(\n                    onDismissRequest = screenModel::dismissDialog,\n                    onConfirm = { navigator.pop() },\n                )\n            }\n        }\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    navigateUp = {\n                        if (hasModified) {\n                            screenModel.showDialog(CodeEditDialogs.GoBack)\n                        } else {\n                            navigator.pop()\n                        }\n                    },\n                    titleContent = {\n                        Text(text = filePath.substringAfter(\"/\"))\n                    },\n                    actions = {\n                        AppBarActions(\n                            actions = persistentListOf(\n                                AppBar.Action(\n                                    title = stringResource(MR.strings.action_save),\n                                    icon = Icons.Outlined.Save,\n                                    onClick = screenModel::save,\n                                    enabled = hasModified,\n                                ),\n                            ),\n                        )\n                    },\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { contentPadding ->\n            when (state) {\n                CodeEditScreenState.Loading -> {\n                    LoadingScreen()\n                }\n                is CodeEditScreenState.Error -> {\n                    EmptyScreen(\n                        message = (state as CodeEditScreenState.Error).throwable.message ?: \"Unknown exception\",\n                    )\n                }\n                is CodeEditScreenState.Success -> {\n                    CodeEditorContent(\n                        state = state as CodeEditScreenState.Success,\n                        contentPadding = contentPadding,\n                        onEdit = screenModel::onEdit,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun CodeEditorContent(\n    state: CodeEditScreenState.Success,\n    contentPadding: PaddingValues,\n    onEdit: (TextFieldValue) -> Unit,\n) {\n    val layoutDirection = LocalLayoutDirection.current\n\n    val focusRequester = remember { FocusRequester() }\n    var lineCount by remember { mutableIntStateOf(1) }\n\n    val codeStyle = TextStyle(\n        color = MaterialTheme.colorScheme.onBackground,\n        fontFamily = FontFamily.Monospace,\n        fontSize = 14.sp,\n        lineHeight = 20.sp,\n    )\n\n    Row(\n        modifier = Modifier\n            .verticalScroll(rememberScrollState())\n            .imePadding(),\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        BasicTextField(\n            modifier = Modifier\n                .padding(\n                    start = contentPadding.calculateLeftPadding(layoutDirection),\n                    top = contentPadding.calculateTopPadding(),\n                    bottom = contentPadding.calculateBottomPadding(),\n                )\n                .fillMaxHeight()\n                .width(12.dp * lineCount.toString().length),\n            value = IntRange(1, lineCount).joinToString(separator = \"\\n\"),\n            readOnly = true,\n            textStyle = codeStyle.copy(\n                color = codeStyle.color.copy(alpha = DISABLED_ALPHA),\n                textAlign = TextAlign.End,\n            ),\n            onValueChange = {},\n        )\n\n        BasicTextField(\n            modifier = Modifier\n                .focusRequester(focusRequester)\n                .fillMaxSize()\n                .horizontalScroll(rememberScrollState())\n                .padding(\n                    top = contentPadding.calculateTopPadding(),\n                    bottom = contentPadding.calculateBottomPadding(),\n                ),\n            value = state.content,\n            onValueChange = { onEdit(it) },\n            onTextLayout = { result ->\n                lineCount = result.lineCount\n            },\n            textStyle = codeStyle,\n            cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),\n        )\n    }\n\n    LaunchedEffect(focusRequester) {\n        focusRequester.requestFocus()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/codeeditor/CodeEditScreenModel.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.codeeditor\n\nimport android.content.Context\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.ui.text.AnnotatedString\nimport androidx.compose.ui.text.input.TextFieldValue\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.update\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.FileOutputStream\n\nclass CodeEditScreenModel(\n    private val context: Context,\n    private val filePath: String,\n    private val storageManager: StorageManager = Injekt.get(),\n) : StateScreenModel<CodeEditScreenState>(CodeEditScreenState.Loading) {\n    private val _hasModified = MutableStateFlow(false)\n    val hasModified = _hasModified.asStateFlow()\n\n    private val _dialogShown = MutableStateFlow<CodeEditDialogs?>(null)\n    val dialogShown = _dialogShown.asStateFlow()\n\n    private val currentFile = MutableStateFlow<UniFile?>(null)\n\n    init {\n        screenModelScope.launchIO {\n            try {\n                val file = storageManager.getMPVConfigDirectory()?.findFile(filePath)\n                    ?: throw Exception(\"Unable to read file\")\n\n                currentFile.update { _ -> file }\n\n                val content = file.openInputStream().use {\n                    it.readBytes().toString(Charsets.UTF_8)\n                }\n                mutableState.update { _ ->\n                    CodeEditScreenState.Success(\n                        TextFieldValue(\n                            annotatedString = content.highlightText(),\n                            composition = null,\n                        ),\n                    )\n                }\n            } catch (e: Exception) {\n                mutableState.update { _ -> CodeEditScreenState.Error(e) }\n            }\n        }\n    }\n\n    private val luaHighlight = luaHighlight(githubTheme)\n    private val confHighlight = confHighlight(githubTheme)\n    private fun String.highlightText(): AnnotatedString {\n        return if (this.length > HIGHLIGHT_MAX_SIZE) {\n            AnnotatedString(this)\n        } else {\n            when (filePath.substringAfterLast(\".\")) {\n                \"lua\" -> luaHighlight.toAnnotatedString(this)\n                \"conf\" -> confHighlight.toAnnotatedString(this)\n                else -> AnnotatedString(this)\n            }\n        }\n    }\n\n    fun showDialog(dialog: CodeEditDialogs) {\n        _dialogShown.update { _ -> dialog }\n    }\n\n    fun dismissDialog() {\n        _dialogShown.update { _ -> null }\n    }\n\n    fun onEdit(value: TextFieldValue) {\n        mutableState.update { current ->\n            if (value.text != (current as? CodeEditScreenState.Success)?.content?.text) {\n                _hasModified.update { _ -> true }\n\n                CodeEditScreenState.Success(\n                    TextFieldValue(\n                        annotatedString = value.text.highlightText(),\n                        selection = value.selection,\n                        composition = null,\n                    ),\n                )\n            } else {\n                CodeEditScreenState.Success(\n                    TextFieldValue(\n                        annotatedString = current.content.annotatedString,\n                        selection = value.selection,\n                        composition = null,\n                    ),\n                )\n            }\n        }\n    }\n\n    fun save() {\n        val file = currentFile.value ?: kotlin.run {\n            context.toast(AYMR.strings.editor_save_error)\n            return\n        }\n\n        val content = (mutableState.value as? CodeEditScreenState.Success)\n            ?.content?.annotatedString?.text ?: kotlin.run {\n            context.toast(AYMR.strings.editor_save_error)\n            return\n        }\n\n        try {\n            file.openOutputStream()\n                .also { (it as? FileOutputStream)?.channel?.truncate(0) }\n                .use { it.write(content.toByteArray()) }\n            _hasModified.update { _ -> false }\n            context.toast(context.stringResource(AYMR.strings.editor_save_success))\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            context.toast(e.message ?: context.stringResource(AYMR.strings.editor_save_error))\n        }\n    }\n\n    companion object {\n        private const val HIGHLIGHT_MAX_SIZE = 15000\n    }\n}\n\nsealed interface CodeEditDialogs {\n    data object GoBack : CodeEditDialogs\n}\n\nsealed interface CodeEditScreenState {\n    @Immutable\n    data object Loading : CodeEditScreenState\n\n    @Immutable\n    data class Success(\n        val content: TextFieldValue,\n    ) : CodeEditScreenState\n\n    @Immutable\n    data class Error(\n        val throwable: Throwable,\n    ) : CodeEditScreenState\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/codeeditor/Highlight.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.codeeditor\n\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.text.AnnotatedString\nimport androidx.compose.ui.text.SpanStyle\n\nsealed class HighlightType(open val regex: Regex, open val isString: Boolean) {\n    data class Full(\n        override val regex: Regex,\n        override val isString: Boolean = false,\n        val color: Color,\n    ) : HighlightType(regex, isString)\n\n    data class Groups(\n        override val regex: Regex,\n        override val isString: Boolean = false,\n        val colors: List<Color>,\n    ) : HighlightType(regex, isString)\n}\n\ndata class Highlight(\n    val rules: List<HighlightType>,\n)\n\n// From https://github.com/NeoUtils/Highlight\nfun Highlight.toAnnotatedString(text: String): AnnotatedString {\n    val spanStyles = mutableListOf<AnnotatedString.Range<SpanStyle>>()\n    val stringRanges = mutableListOf<IntRange>()\n\n    for (rule in rules) {\n        for (result in rule.regex.findAll(text)) {\n            for ((index, group) in result.groups.withIndex()) {\n                if (group == null) continue\n                if (rule is HighlightType.Groups && index == 0) continue\n                if (stringRanges.any { it.contains(group.range.first) }) continue\n\n                val color = when (rule) {\n                    is HighlightType.Full -> rule.color\n                    is HighlightType.Groups -> rule.colors[index - 1]\n                }\n\n                spanStyles.add(\n                    AnnotatedString.Range(\n                        item = SpanStyle(color = color),\n                        start = group.range.first,\n                        end = group.range.last + 1,\n                    ),\n                )\n\n                if (rule.isString) {\n                    stringRanges.add(group.range)\n                }\n            }\n        }\n    }\n\n    return AnnotatedString(\n        text = text,\n        spanStyles = spanStyles,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/codeeditor/SyntaxHighlight.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.codeeditor\n\nimport androidx.compose.ui.graphics.Color\n\nval githubTheme = SyntaxColors(\n    keyword = Color(0xFFFF7B72),\n    literal = Color(0xFF79C0FF),\n    comment = Color(0xFF9198A1),\n    string = Color(0xFFA5D6FF),\n    definition = Color(0xFFD2A8FF),\n    key = Color(0xFF7EE787),\n    value = Color(0xFFD29922),\n)\n\n// From https://github.com/Qawaz/compose-code-editor\nclass SyntaxColors(\n    val keyword: Color,\n    val literal: Color,\n    val comment: Color,\n    val string: Color,\n    val definition: Color,\n    val key: Color,\n    val value: Color,\n)\n\n// Some rules taken from https://github.com/Qawaz/compose-code-editor\nfun luaHighlight(syntaxColors: SyntaxColors) = Highlight(\n    rules = listOf(\n        // Operators\n        HighlightType.Full(\n            regex = Regex(\"\"\"(?<![=<>~:/])(?:==|~=|<=|>=|\\/\\/|\\.\\.|[=+\\-*/%^#<>])\"\"\"),\n            color = syntaxColors.keyword,\n        ),\n\n        // Invocation with `:`\n        HighlightType.Full(\n            regex = Regex(\"\"\"\\b([a-zA-Z_]\\w*)(?=\\s*:)\"\"\"),\n            color = syntaxColors.definition,\n        ),\n\n        // Function calls\n        HighlightType.Groups(\n            regex = Regex(\"\"\"([a-zA-Z_]\\w*)(?=\\s*\\()\"\"\"),\n            colors = listOf(syntaxColors.literal),\n        ),\n\n        // Function definition\n        HighlightType.Groups(\n            regex = Regex(\"\"\"function\\s+([a-zA-Z_][\\w.]*)(?=\\s*\\()\"\"\"),\n            colors = listOf(syntaxColors.definition),\n        ),\n\n        // Keywords\n        HighlightType.Groups(\n            regex = Regex(\n                \"\"\"\\b(and|break|do|else|elseif|end|for|function|if|in|local|not|or|repeat|return|then|until|while)\\b\"\"\",\n            ),\n            colors = listOf(syntaxColors.keyword),\n        ),\n\n        // True/false/nil\n        HighlightType.Groups(\n            regex = Regex(\"\"\"\\b(true|false|nil)\\b\"\"\"),\n            colors = listOf(syntaxColors.literal),\n        ),\n\n        // A number is a hex integer literal, a decimal real literal, or in\n        // scientific notation.\n        HighlightType.Full(\n            regex = Regex(\n                \"\"\"(?<!\\w)[+-]?(?:0x[\\da-f]+|(?:(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:e[+\\-]?\\d+)?))\"\"\",\n                RegexOption.IGNORE_CASE,\n            ),\n            color = syntaxColors.literal,\n        ),\n\n        // A double or single quoted, possibly multi-line, string.\n        HighlightType.Full(\n            regex = Regex(\"\"\"(?<!--[^\\n]{0,120})(\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|\\'(?:[^'\\\\]|\\\\[\\s\\S])*\\')\"\"\"),\n            color = syntaxColors.string,\n            isString = true,\n        ),\n\n        // Single line comment\n        HighlightType.Full(\n            regex = Regex(\"\"\"--.*${'$'}\"\"\", RegexOption.MULTILINE),\n            color = syntaxColors.comment,\n        ),\n\n        // Multi-line comment\n        HighlightType.Full(\n            regex = Regex(\"\"\"--\\[(=*)\\[.*?--\\]\\1\\]\"\"\", RegexOption.DOT_MATCHES_ALL),\n            color = syntaxColors.comment,\n        ),\n    ),\n)\n\nfun confHighlight(syntaxColors: SyntaxColors) = Highlight(\n    rules = listOf(\n        // Key\n        HighlightType.Full(\n            regex = Regex(\"\"\"^\\s*[\\w.-]+(?=\\s*=)\"\"\", RegexOption.MULTILINE),\n            color = syntaxColors.literal,\n        ),\n\n        // Value\n        HighlightType.Full(\n            regex = Regex(\"\"\"(?<==)[ \\t]*[\\w ~,./;:-]+\"\"\"),\n            color = syntaxColors.literal,\n        ),\n\n        // Yes/No\n        HighlightType.Groups(\n            regex = Regex(\"\"\"(?<![\\w-])(yes|no)(?![\\w-])\"\"\"),\n            colors = listOf(syntaxColors.value),\n        ),\n\n        // Numbers\n        HighlightType.Full(\n            regex = Regex(\"\"\"\\b\\d+(\\.\\d+)?\\b\"\"\"),\n            color = syntaxColors.value,\n        ),\n\n        // String\n        HighlightType.Full(\n            regex = Regex(\"\"\"(?<!#[^\\n]{0,120})(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')\"\"\"),\n            color = syntaxColors.key,\n            isString = true,\n        ),\n\n        // Comment\n        HighlightType.Full(\n            regex = Regex(\"\"\"#.*\"\"\"),\n            color = syntaxColors.comment,\n        ),\n    ),\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/components/EditorDialogs.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.components\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\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.Modifier\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.text.TextRange\nimport androidx.compose.ui.text.input.TextFieldValue\nimport eu.kanade.presentation.more.settings.screen.player.editor.FileCreationResult\nimport kotlinx.coroutines.delay\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun FileCreateDialog(\n    initialName: String?,\n    fileExtension: String,\n    onDismissRequest: () -> Unit,\n    isValid: (String, String?) -> FileCreationResult,\n    onConfirm: (String) -> Unit,\n) {\n    val initialTextValue = initialName ?: \"file.$fileExtension\"\n    var fileName by remember {\n        mutableStateOf(\n            TextFieldValue(\n                text = initialTextValue,\n                selection = TextRange(\n                    0,\n                    initialTextValue.indexOfLast { it == '.' }.takeUnless { it == -1 } ?: initialTextValue.length,\n                ),\n            ),\n        )\n    }\n    val result = remember(fileName.text) {\n        isValid(fileName.text, initialName)\n    }\n\n    val focusRequester = remember { FocusRequester() }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                enabled = result is FileCreationResult.Success,\n                onClick = {\n                    onConfirm(fileName.text)\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(if (initialName == null) MR.strings.action_add else MR.strings.action_edit))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(\n                text = stringResource(\n                    if (initialName ==\n                        null\n                    ) {\n                        AYMR.strings.editor_create_file\n                    } else {\n                        AYMR.strings.editor_edit_file\n                    },\n                ),\n            )\n        },\n        text = {\n            OutlinedTextField(\n                modifier = Modifier.focusRequester(focusRequester),\n                value = fileName,\n                onValueChange = { fileName = it },\n                label = { Text(text = stringResource(AYMR.strings.editor_filename)) },\n                supportingText = {\n                    when (result) {\n                        is FileCreationResult.Failure -> {\n                            Text(text = stringResource(result.stringRes))\n                        }\n                        FileCreationResult.Success -> {}\n                    }\n                },\n                isError = result is FileCreationResult.Failure,\n                singleLine = true,\n            )\n        },\n    )\n\n    LaunchedEffect(focusRequester) {\n        // TODO: https://issuetracker.google.com/issues/204502668\n        delay(0.1.seconds)\n        focusRequester.requestFocus()\n    }\n}\n\n@Composable\nfun FileDeleteDialog(\n    name: String,\n    onDismissRequest: () -> Unit,\n    onDelete: () -> Unit,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onDelete()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(AYMR.strings.editor_delete_file))\n        },\n        text = {\n            Text(text = stringResource(AYMR.strings.editor_delete_file_confirmation, name))\n        },\n    )\n}\n\n@Composable\nfun UnsavedChangesDialog(\n    onDismissRequest: () -> Unit,\n    onConfirm: () -> Unit,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onConfirm()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        title = {\n            Text(text = stringResource(MR.strings.label_warning))\n        },\n        text = {\n            Text(text = stringResource(AYMR.strings.editor_unsaved_progress))\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/components/EditorScreen.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.MoreHoriz\nimport androidx.compose.material.icons.outlined.Description\nimport androidx.compose.material.icons.outlined.IntegrationInstructions\nimport androidx.compose.material.icons.outlined.SettingsApplications\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.ListItem\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.setValue\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.components.FloatingActionAddButton\nimport eu.kanade.presentation.more.settings.screen.player.editor.EditorListItem\nimport eu.kanade.presentation.more.settings.screen.player.editor.EditorListType\nimport eu.kanade.presentation.more.settings.screen.player.editor.EditorScreenState\nimport kotlinx.collections.immutable.toPersistentList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\n@Composable\nfun EditorScreen(\n    state: EditorScreenState,\n    selectedType: EditorListType,\n    onSelectType: (EditorListType) -> Unit,\n    onClickItem: (EditorListItem) -> Unit,\n    onRenameItem: (EditorListItem) -> Unit,\n    onDeleteItem: (EditorListItem) -> Unit,\n    onClickAdd: () -> Unit,\n    navigateUp: () -> Unit,\n) {\n    val lazyListState = rememberLazyListState()\n    Scaffold(\n        topBar = { scrollBehavior ->\n            AppBar(\n                navigateUp = navigateUp,\n                titleContent = {\n                    EditorTypeDropDown(\n                        type = selectedType,\n                        values = EditorListType.entries.toPersistentList(),\n                        onSelect = onSelectType,\n                    )\n                },\n                scrollBehavior = scrollBehavior,\n            )\n        },\n        floatingActionButton = {\n            FloatingActionAddButton(\n                lazyListState = lazyListState,\n                onClick = onClickAdd,\n            )\n        },\n    ) { paddingValues ->\n        when (state) {\n            EditorScreenState.Loading -> {\n                LoadingScreen(modifier = Modifier.padding(paddingValues))\n            }\n            is EditorScreenState.Success -> {\n                if (state.isEmpty) {\n                    EmptyScreen(\n                        stringRes = AYMR.strings.pref_player_no_items,\n                        modifier = Modifier.padding(paddingValues),\n                    )\n                    return@Scaffold\n                }\n\n                EditorListContent(\n                    items = state.editorListItems,\n                    lazyListState = lazyListState,\n                    paddingValues = paddingValues,\n                    onClickItem = onClickItem,\n                    onRenameItem = onRenameItem,\n                    onDeleteItem = onDeleteItem,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun EditorListContent(\n    items: List<EditorListItem>,\n    lazyListState: LazyListState,\n    paddingValues: PaddingValues,\n    onClickItem: (EditorListItem) -> Unit,\n    onRenameItem: (EditorListItem) -> Unit,\n    onDeleteItem: (EditorListItem) -> Unit,\n) {\n    var expandedIndex by remember { mutableStateOf<Int?>(null) }\n\n    LazyColumn(\n        state = lazyListState,\n        contentPadding = paddingValues,\n    ) {\n        itemsIndexed(\n            items = items,\n            key = { _, item -> \"editoritem-${item.name}\" },\n        ) { index, item ->\n            FileListItem(\n                item = item,\n                expanded = index == expandedIndex,\n                modifier = Modifier.animateItem(),\n                onClick = { onClickItem(item) },\n                onExpand = { expanded ->\n                    expandedIndex = index.takeIf { expanded }\n                },\n                onRename = { onRenameItem(item) },\n                onDelete = { onDeleteItem(item) },\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun FileListItem(\n    item: EditorListItem,\n    expanded: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit,\n    onExpand: (Boolean) -> Unit,\n    onRename: () -> Unit,\n    onDelete: () -> Unit,\n) {\n    ListItem(\n        modifier = modifier\n            .clickable { onClick() },\n        leadingContent = {\n            Icon(\n                imageVector = when (item.name.substringAfterLast(\".\")) {\n                    \"lua\" -> Icons.Outlined.IntegrationInstructions\n                    \"conf\" -> Icons.Outlined.SettingsApplications\n                    else -> Icons.Outlined.Description\n                },\n                null,\n            )\n        },\n        trailingContent = {\n            DropdownMenu(\n                expanded = expanded,\n                onDismissRequest = { onExpand(false) },\n            ) {\n                DropdownMenuItem(\n                    text = { Text(text = stringResource(AYMR.strings.editor_action_rename)) },\n                    onClick = {\n                        onRename()\n                        onExpand(false)\n                    },\n                )\n\n                DropdownMenuItem(\n                    text = { Text(text = stringResource(AYMR.strings.editor_action_delete)) },\n                    onClick = {\n                        onDelete()\n                        onExpand(false)\n                    },\n                )\n            }\n\n            IconButton(onClick = { onExpand(true) }) {\n                Icon(Icons.Filled.MoreHoriz, null)\n            }\n        },\n        headlineContent = {\n            Text(text = item.name)\n        },\n        supportingContent = {\n            Text(\n                text = listOfNotNull(item.size, item.lastModified).joinToString(\" - \"),\n            )\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/screen/player/editor/components/EditorTypeDropdown.kt",
    "content": "package eu.kanade.presentation.more.settings.screen.player.editor.components\n\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.material.icons.Icons\nimport androidx.compose.material.icons.filled.ArrowDropDown\nimport androidx.compose.material.icons.filled.ArrowDropUp\nimport androidx.compose.material3.DropdownMenu\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.more.settings.screen.player.editor.EditorListType\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun EditorTypeDropDown(\n    type: EditorListType,\n    values: ImmutableList<EditorListType>,\n    onSelect: (EditorListType) -> Unit,\n) {\n    val isDropDownExpanded = remember { mutableStateOf(false) }\n\n    Column(\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.Center,\n    ) {\n        Box {\n            Row(\n                horizontalArrangement = Arrangement.Center,\n                verticalAlignment = Alignment.CenterVertically,\n                modifier = Modifier.clickable {\n                    isDropDownExpanded.value = !isDropDownExpanded.value\n                },\n            ) {\n                Text(text = stringResource(type.stringRes))\n                Icon(if (isDropDownExpanded.value) Icons.Filled.ArrowDropUp else Icons.Filled.ArrowDropDown, null)\n            }\n\n            DropdownMenu(\n                expanded = isDropDownExpanded.value,\n                onDismissRequest = {\n                    isDropDownExpanded.value = false\n                },\n            ) {\n                values.forEach { item ->\n                    DropdownMenuItem(\n                        text = {\n                            Text(text = stringResource(item.stringRes))\n                        },\n                        onClick = {\n                            isDropDownExpanded.value = false\n                            onSelect(item)\n                        },\n                    )\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemeModePreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.MultiChoiceSegmentedButtonRow\nimport androidx.compose.material3.SegmentedButton\nimport androidx.compose.material3.SegmentedButtonDefaults\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport eu.kanade.domain.ui.model.ThemeMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate val options = mapOf(\n    ThemeMode.SYSTEM to MR.strings.theme_system,\n    ThemeMode.LIGHT to MR.strings.theme_light,\n    ThemeMode.DARK to MR.strings.theme_dark,\n)\n\n@Composable\ninternal fun AppThemeModePreferenceWidget(\n    value: ThemeMode,\n    onItemClick: (ThemeMode) -> Unit,\n) {\n    BasePreferenceWidget(\n        subcomponent = {\n            MultiChoiceSegmentedButtonRow(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = PrefsHorizontalPadding),\n            ) {\n                options.onEachIndexed { index, (mode, labelRes) ->\n                    SegmentedButton(\n                        checked = mode == value,\n                        onCheckedChange = { onItemClick(mode) },\n                        shape = SegmentedButtonDefaults.itemShape(\n                            index,\n                            options.size,\n                        ),\n                    ) {\n                        Text(stringResource(labelRes))\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport android.app.Activity\nimport androidx.compose.foundation.background\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.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.aspectRatio\nimport androidx.compose.foundation.layout.fillMaxHeight\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.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material3.DividerDefaults\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.dp\nimport androidx.core.app.ActivityCompat\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.AppTheme\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.theme.TachiyomiTheme\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.isDynamicColorAvailable\nimport tachiyomi.core.common.preference.InMemoryPreferenceStore\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.fullType\n\n@Composable\ninternal fun AppThemePreferenceWidget(\n    value: AppTheme,\n    amoled: Boolean,\n    onItemClick: (AppTheme) -> Unit,\n) {\n    BasePreferenceWidget(\n        subcomponent = {\n            AppThemesList(\n                currentTheme = value,\n                amoled = amoled,\n                onItemClick = onItemClick,\n            )\n        },\n    )\n}\n\n@Composable\nprivate fun AppThemesList(\n    currentTheme: AppTheme,\n    amoled: Boolean,\n    onItemClick: (AppTheme) -> Unit,\n) {\n    val context = LocalContext.current\n    val appThemes = remember {\n        AppTheme.entries\n            .filterNot { it.titleRes == null || (it == AppTheme.MONET && !DeviceUtil.isDynamicColorAvailable) }\n    }\n    LazyRow(\n        contentPadding = PaddingValues(horizontal = PrefsHorizontalPadding),\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        items(\n            items = appThemes,\n            key = { it.name },\n        ) { appTheme ->\n            Column(\n                modifier = Modifier\n                    .width(114.dp)\n                    .padding(top = 8.dp),\n            ) {\n                TachiyomiTheme(\n                    appTheme = appTheme,\n                    amoled = amoled,\n                ) {\n                    AppThemePreviewItem(\n                        selected = currentTheme == appTheme,\n                        onClick = {\n                            onItemClick(appTheme)\n                            (context as? Activity)?.let { ActivityCompat.recreate(it) }\n                        },\n                    )\n                }\n\n                Spacer(modifier = Modifier.height(8.dp))\n\n                Text(\n                    text = stringResource(appTheme.titleRes!!),\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .secondaryItemAlpha(),\n                    textAlign = TextAlign.Center,\n                    maxLines = 2,\n                    minLines = 2,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun AppThemePreviewItem(\n    selected: Boolean,\n    onClick: () -> Unit,\n) {\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .aspectRatio(9f / 16f)\n            .border(\n                width = 4.dp,\n                color = if (selected) {\n                    MaterialTheme.colorScheme.primary\n                } else {\n                    DividerDefaults.color\n                },\n                shape = RoundedCornerShape(17.dp),\n            )\n            .padding(4.dp)\n            .clip(RoundedCornerShape(13.dp))\n            .background(MaterialTheme.colorScheme.background)\n            .clickable(onClick = onClick),\n    ) {\n        // App Bar\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .height(40.dp)\n                .padding(8.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Box(\n                modifier = Modifier\n                    .fillMaxHeight(0.8f)\n                    .weight(0.7f)\n                    .padding(end = 4.dp)\n                    .background(\n                        color = MaterialTheme.colorScheme.onSurface,\n                        shape = MaterialTheme.shapes.small,\n                    ),\n            )\n\n            Box(\n                modifier = Modifier.weight(0.3f),\n                contentAlignment = Alignment.CenterEnd,\n            ) {\n                if (selected) {\n                    Icon(\n                        imageVector = Icons.Filled.CheckCircle,\n                        contentDescription = stringResource(MR.strings.selected),\n                        tint = MaterialTheme.colorScheme.primary,\n                    )\n                }\n            }\n        }\n\n        // Cover\n        Box(\n            modifier = Modifier\n                .padding(start = 8.dp, top = 2.dp)\n                .background(\n                    color = DividerDefaults.color,\n                    shape = MaterialTheme.shapes.small,\n                )\n                .fillMaxWidth(0.5f)\n                .aspectRatio(ItemCover.Book.ratio),\n        ) {\n            Row(\n                modifier = Modifier\n                    .padding(4.dp)\n                    .size(width = 24.dp, height = 16.dp)\n                    .clip(RoundedCornerShape(5.dp)),\n            ) {\n                Box(\n                    modifier = Modifier\n                        .fillMaxHeight()\n                        .width(12.dp)\n                        .background(MaterialTheme.colorScheme.tertiary),\n                )\n                Box(\n                    modifier = Modifier\n                        .fillMaxHeight()\n                        .width(12.dp)\n                        .background(MaterialTheme.colorScheme.secondary),\n                )\n            }\n        }\n\n        // Bottom bar\n        Box(\n            modifier = Modifier\n                .fillMaxWidth()\n                .weight(1f),\n            contentAlignment = Alignment.BottomCenter,\n        ) {\n            Surface(\n                color = MaterialTheme.colorScheme.surfaceContainer,\n            ) {\n                Row(\n                    modifier = Modifier\n                        .height(32.dp)\n                        .fillMaxWidth()\n                        .padding(horizontal = 8.dp),\n                    verticalAlignment = Alignment.CenterVertically,\n                ) {\n                    Box(\n                        modifier = Modifier\n                            .size(17.dp)\n                            .background(\n                                color = MaterialTheme.colorScheme.primary,\n                                shape = CircleShape,\n                            ),\n                    )\n                    Box(\n                        modifier = Modifier\n                            .padding(start = 8.dp)\n                            .alpha(0.6f)\n                            .height(17.dp)\n                            .weight(1f)\n                            .background(\n                                color = MaterialTheme.colorScheme.onSurface,\n                                shape = MaterialTheme.shapes.small,\n                            ),\n                    )\n                }\n            }\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun AppThemesListPreview() {\n    var appTheme by remember { mutableStateOf(AppTheme.DEFAULT) }\n    Injekt.addSingleton(fullType<UiPreferences>(), UiPreferences(InMemoryPreferenceStore()))\n    TachiyomiTheme(appTheme = appTheme) {\n        Surface {\n            AppThemesList(\n                currentTheme = appTheme,\n                amoled = false,\n                onItemClick = { appTheme = it },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/BasePreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.animation.animateColorAsState\nimport androidx.compose.animation.core.RepeatMode\nimport androidx.compose.animation.core.StartOffset\nimport androidx.compose.animation.core.StartOffsetType\nimport androidx.compose.animation.core.repeatable\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.composed\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.more.settings.LocalPreferenceHighlighted\nimport eu.kanade.presentation.more.settings.LocalPreferenceMinHeight\nimport kotlinx.coroutines.delay\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\ninternal fun BasePreferenceWidget(\n    modifier: Modifier = Modifier,\n    title: String? = null,\n    subcomponent: @Composable (ColumnScope.() -> Unit)? = null,\n    icon: @Composable (() -> Unit)? = null,\n    onClick: (() -> Unit)? = null,\n    widget: @Composable (() -> Unit)? = null,\n) {\n    val highlighted = LocalPreferenceHighlighted.current\n    val minHeight = LocalPreferenceMinHeight.current\n    Row(\n        modifier = modifier\n            .highlightBackground(highlighted)\n            .sizeIn(minHeight = minHeight)\n            .clickable(enabled = onClick != null, onClick = { onClick?.invoke() })\n            .fillMaxWidth(),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        if (icon != null) {\n            Box(\n                modifier = Modifier.padding(start = PrefsHorizontalPadding, end = 8.dp),\n                content = { icon() },\n            )\n        }\n        Column(\n            modifier = Modifier\n                .weight(1f)\n                .padding(vertical = PrefsVerticalPadding),\n        ) {\n            if (!title.isNullOrBlank()) {\n                Text(\n                    modifier = Modifier.padding(horizontal = PrefsHorizontalPadding),\n                    text = title,\n                    overflow = TextOverflow.Ellipsis,\n                    maxLines = 2,\n                    style = MaterialTheme.typography.titleLarge,\n                    fontSize = TitleFontSize,\n                )\n            }\n            subcomponent?.invoke(this)\n        }\n        if (widget != null) {\n            Box(\n                modifier = Modifier.padding(end = PrefsHorizontalPadding),\n                content = { widget() },\n            )\n        }\n    }\n}\n\ninternal fun Modifier.highlightBackground(highlighted: Boolean): Modifier = composed {\n    var highlightFlag by remember { mutableStateOf(false) }\n    LaunchedEffect(Unit) {\n        if (highlighted) {\n            highlightFlag = true\n            delay(3.seconds)\n            highlightFlag = false\n        }\n    }\n    val highlight by animateColorAsState(\n        targetValue = if (highlightFlag) {\n            MaterialTheme.colorScheme.surfaceTint.copy(alpha = .12f)\n        } else {\n            Color.Transparent\n        },\n        animationSpec = if (highlightFlag) {\n            repeatable(\n                iterations = 5,\n                animation = tween(durationMillis = 200),\n                repeatMode = RepeatMode.Reverse,\n                initialStartOffset = StartOffset(\n                    offsetMillis = 600,\n                    offsetType = StartOffsetType.Delay,\n                ),\n            )\n        } else {\n            tween(200)\n        },\n        label = \"highlight\",\n    )\n    Modifier.background(color = highlight)\n}\n\ninternal val TrailingWidgetBuffer = 16.dp\ninternal val PrefsHorizontalPadding = 16.dp\ninternal val PrefsVerticalPadding = 16.dp\ninternal val TitleFontSize = 16.sp\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/EditTextPreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Cancel\nimport androidx.compose.material.icons.filled.Error\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.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.text.input.TextFieldValue\nimport androidx.compose.ui.window.DialogProperties\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun EditTextPreferenceWidget(\n    title: String,\n    subtitle: String?,\n    dialogSubtitle: String? = null,\n    icon: ImageVector?,\n    value: String,\n    onConfirm: suspend (String) -> Boolean,\n    singleLine: Boolean = true,\n    canBeBlank: Boolean = false,\n    formatSubtitle: Boolean = true,\n    validate: (String) -> Boolean = { true },\n    errorMessage: @Composable ((String) -> String)? = null,\n) {\n    var isDialogShown by remember { mutableStateOf(false) }\n\n    TextPreferenceWidget(\n        title = title,\n        subtitle = if (formatSubtitle) subtitle?.format(value) else subtitle,\n        icon = icon,\n        onPreferenceClick = { isDialogShown = true },\n    )\n\n    if (isDialogShown) {\n        val scope = rememberCoroutineScope()\n        val onDismissRequest = { isDialogShown = false }\n        var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) {\n            mutableStateOf(TextFieldValue(value))\n        }\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = {\n                Column {\n                    Text(text = title)\n                    if (dialogSubtitle != null) {\n                        Text(text = dialogSubtitle, style = MaterialTheme.typography.bodyMedium)\n                    }\n                }\n            },\n            text = {\n                OutlinedTextField(\n                    value = textFieldValue,\n                    onValueChange = { textFieldValue = it },\n                    trailingIcon = {\n                        if ((textFieldValue.text.isBlank() && !canBeBlank) || !validate(textFieldValue.text)) {\n                            Icon(imageVector = Icons.Filled.Error, contentDescription = null)\n                        } else {\n                            IconButton(onClick = { textFieldValue = TextFieldValue(\"\") }) {\n                                Icon(imageVector = Icons.Filled.Cancel, contentDescription = null)\n                            }\n                        }\n                    },\n                    supportingText = {\n                        if (!validate(textFieldValue.text) && errorMessage != null) {\n                            Text(errorMessage(textFieldValue.text))\n                        }\n                    },\n                    isError = (textFieldValue.text.isBlank() && !canBeBlank) || !validate(textFieldValue.text),\n                    singleLine = singleLine,\n                    modifier = Modifier.fillMaxWidth(),\n                )\n            },\n            properties = DialogProperties(\n                usePlatformDefaultWidth = true,\n            ),\n            confirmButton = {\n                TextButton(\n                    enabled =\n                    textFieldValue.text != value &&\n                        (textFieldValue.text.isNotBlank() || canBeBlank) &&\n                        validate(textFieldValue.text),\n                    onClick = {\n                        scope.launch {\n                            if (onConfirm(textFieldValue.text)) {\n                                onDismissRequest()\n                            }\n                        }\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_ok))\n                }\n            },\n            dismissButton = {\n                TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Info\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\ninternal fun InfoWidget(text: String) {\n    Column(\n        modifier = Modifier\n            .padding(\n                horizontal = PrefsHorizontalPadding,\n                vertical = MaterialTheme.padding.medium,\n            )\n            .secondaryItemAlpha(),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n    ) {\n        Icon(\n            imageVector = Icons.Outlined.Info,\n            contentDescription = null,\n        )\n        Text(\n            text = text,\n            style = MaterialTheme.typography.bodySmall,\n        )\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun InfoWidgetPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            InfoWidget(text = stringResource(AYMR.strings.download_ahead_info))\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/ListPreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.selection.selectable\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.RadioButton\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.minimumInteractiveComponentSize\nimport androidx.compose.runtime.Composable\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.clip\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun <T> ListPreferenceWidget(\n    value: T,\n    title: String,\n    subtitle: String?,\n    icon: ImageVector?,\n    entries: Map<out T, String>,\n    onValueChange: (T) -> Unit,\n) {\n    var isDialogShown by remember { mutableStateOf(false) }\n\n    TextPreferenceWidget(\n        title = title,\n        subtitle = subtitle,\n        icon = icon,\n        onPreferenceClick = { isDialogShown = true },\n    )\n\n    if (isDialogShown) {\n        AlertDialog(\n            onDismissRequest = { isDialogShown = false },\n            title = { Text(text = title) },\n            text = {\n                Box {\n                    val state = rememberLazyListState()\n                    ScrollbarLazyColumn(state = state) {\n                        entries.forEach { current ->\n                            val isSelected = value == current.key\n                            item {\n                                DialogRow(\n                                    label = current.value,\n                                    isSelected = isSelected,\n                                    onSelected = {\n                                        onValueChange(current.key!!)\n                                        isDialogShown = false\n                                    },\n                                )\n                            }\n                        }\n                    }\n                    if (state.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter))\n                    if (state.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter))\n                }\n            },\n            confirmButton = {\n                TextButton(onClick = { isDialogShown = false }) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun DialogRow(\n    label: String,\n    isSelected: Boolean,\n    onSelected: () -> Unit,\n) {\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n        modifier = Modifier\n            .clip(MaterialTheme.shapes.small)\n            .selectable(\n                selected = isSelected,\n                onClick = { if (!isSelected) onSelected() },\n            )\n            .fillMaxWidth()\n            .minimumInteractiveComponentSize(),\n    ) {\n        RadioButton(\n            selected = isSelected,\n            onClick = null,\n        )\n        Text(\n            text = label,\n            style = MaterialTheme.typography.bodyLarge.merge(),\n            modifier = Modifier.padding(start = 24.dp),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.material3.AlertDialog\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.setValue\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.window.DialogProperties\nimport eu.kanade.presentation.more.settings.Preference\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun MultiSelectListPreferenceWidget(\n    preference: Preference.PreferenceItem.MultiSelectListPreference,\n    values: Set<String>,\n    onValuesChange: (Set<String>) -> Unit,\n) {\n    var isDialogShown by remember { mutableStateOf(false) }\n\n    TextPreferenceWidget(\n        title = preference.title,\n        subtitle = preference.subtitleProvider(values, preference.entries),\n        icon = preference.icon,\n        onPreferenceClick = { isDialogShown = true },\n    )\n\n    if (isDialogShown) {\n        val selected = remember {\n            preference.entries.keys\n                .filter { values.contains(it) }\n                .toMutableStateList()\n        }\n        AlertDialog(\n            onDismissRequest = { isDialogShown = false },\n            title = { Text(text = preference.title) },\n            text = {\n                LazyColumn {\n                    preference.entries.forEach { current ->\n                        item {\n                            val isSelected = selected.contains(current.key)\n                            LabeledCheckbox(\n                                label = current.value,\n                                checked = isSelected,\n                                onCheckedChange = {\n                                    if (it) {\n                                        selected.add(current.key)\n                                    } else {\n                                        selected.remove(current.key)\n                                    }\n                                },\n                            )\n                        }\n                    }\n                }\n            },\n            properties = DialogProperties(\n                usePlatformDefaultWidth = true,\n            ),\n            confirmButton = {\n                TextButton(\n                    onClick = {\n                        onValuesChange(selected.toMutableSet())\n                        isDialogShown = false\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_ok))\n                }\n            },\n            dismissButton = {\n                TextButton(onClick = { isDialogShown = false }) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/PreferenceGroupHeader.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxWidth\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun PreferenceGroupHeader(title: String) {\n    Box(\n        contentAlignment = Alignment.CenterStart,\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(bottom = 8.dp, top = 14.dp),\n    ) {\n        Text(\n            text = title,\n            color = MaterialTheme.colorScheme.secondary,\n            modifier = Modifier.padding(horizontal = PrefsHorizontalPadding),\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/SwitchPreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Preview\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Switch\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\n\n@Composable\nfun SwitchPreferenceWidget(\n    modifier: Modifier = Modifier,\n    title: String,\n    subtitle: String? = null,\n    icon: ImageVector? = null,\n    checked: Boolean = false,\n    onCheckedChanged: (Boolean) -> Unit,\n) {\n    TextPreferenceWidget(\n        modifier = modifier,\n        title = title,\n        subtitle = subtitle,\n        icon = icon,\n        widget = {\n            Switch(\n                checked = checked,\n                onCheckedChange = null,\n                modifier = Modifier.padding(start = TrailingWidgetBuffer),\n            )\n        },\n        onPreferenceClick = { onCheckedChanged(!checked) },\n    )\n}\n\n@PreviewLightDark\n@Composable\nprivate fun SwitchPreferenceWidgetPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            Column {\n                SwitchPreferenceWidget(\n                    title = \"Text preference with icon\",\n                    subtitle = \"Text preference summary\",\n                    icon = Icons.Filled.Preview,\n                    checked = true,\n                    onCheckedChanged = {},\n                )\n                SwitchPreferenceWidget(\n                    title = \"Text preference\",\n                    subtitle = \"Text preference summary\",\n                    checked = false,\n                    onCheckedChanged = {},\n                )\n                SwitchPreferenceWidget(\n                    title = \"Text preference no summary\",\n                    checked = false,\n                    onCheckedChanged = {},\n                )\n                SwitchPreferenceWidget(\n                    title = \"Another text preference no summary\",\n                    checked = false,\n                    onCheckedChanged = {},\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/TextPreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Preview\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun TextPreferenceWidget(\n    modifier: Modifier = Modifier,\n    title: String? = null,\n    subtitle: String? = null,\n    icon: ImageVector? = null,\n    iconTint: Color = MaterialTheme.colorScheme.primary,\n    widget: @Composable (() -> Unit)? = null,\n    onPreferenceClick: (() -> Unit)? = null,\n) {\n    BasePreferenceWidget(\n        modifier = modifier,\n        title = title,\n        subcomponent = if (!subtitle.isNullOrBlank()) {\n            {\n                Text(\n                    text = subtitle,\n                    modifier = Modifier\n                        .padding(horizontal = PrefsHorizontalPadding)\n                        .secondaryItemAlpha(),\n                    style = MaterialTheme.typography.bodySmall,\n                    maxLines = 10,\n                )\n            }\n        } else {\n            null\n        },\n        icon = if (icon != null) {\n            {\n                Icon(\n                    imageVector = icon,\n                    tint = iconTint,\n                    contentDescription = null,\n                )\n            }\n        } else {\n            null\n        },\n        onClick = onPreferenceClick,\n        widget = widget,\n    )\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TextPreferenceWidgetPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            Column {\n                TextPreferenceWidget(\n                    title = \"Text preference with icon\",\n                    subtitle = \"Text preference summary\",\n                    icon = Icons.Filled.Preview,\n                    onPreferenceClick = {},\n                )\n                TextPreferenceWidget(\n                    title = \"Text preference\",\n                    subtitle = \"Text preference summary\",\n                    onPreferenceClick = {},\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\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.Done\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.Color\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.more.settings.LocalPreferenceHighlighted\nimport eu.kanade.presentation.track.components.TrackLogoIcon\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun TrackingPreferenceWidget(\n    modifier: Modifier = Modifier,\n    tracker: Tracker,\n    checked: Boolean,\n    onClick: (() -> Unit)? = null,\n) {\n    val highlighted = LocalPreferenceHighlighted.current\n    Box(modifier = Modifier.highlightBackground(highlighted)) {\n        Row(\n            modifier = modifier\n                .clickable(enabled = onClick != null, onClick = { onClick?.invoke() })\n                .fillMaxWidth()\n                .padding(horizontal = PrefsHorizontalPadding, vertical = 8.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            TrackLogoIcon(tracker)\n            Text(\n                text = tracker.name,\n                modifier = Modifier\n                    .weight(1f)\n                    .padding(horizontal = 16.dp),\n                maxLines = 1,\n                style = MaterialTheme.typography.titleLarge,\n                fontSize = TitleFontSize,\n            )\n            if (checked) {\n                Icon(\n                    imageVector = Icons.Outlined.Done,\n                    modifier = Modifier\n                        .padding(4.dp)\n                        .size(32.dp),\n                    tint = Color(0xFF4CAF50),\n                    contentDescription = stringResource(MR.strings.login_success),\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt",
    "content": "package eu.kanade.presentation.more.settings.widget\n\nimport android.annotation.SuppressLint\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.defaultMinSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.rounded.CheckBox\nimport androidx.compose.material.icons.rounded.CheckBoxOutlineBlank\nimport androidx.compose.material.icons.rounded.DisabledByDefault\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\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.runtime.toMutableStateList\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate enum class State {\n    CHECKED,\n    INVERSED,\n    UNCHECKED,\n}\n\n@SuppressLint(\"ComposeParameterOrder\")\n@Composable\nfun <T> TriStateListDialog(\n    title: String,\n    message: String? = null,\n    items: List<T>,\n    initialChecked: List<T>,\n    initialInversed: List<T>,\n    itemLabel: @Composable (T) -> String,\n    onDismissRequest: () -> Unit,\n    onValueChanged: (newIncluded: List<T>, newExcluded: List<T>) -> Unit,\n) {\n    val selected = remember {\n        items\n            .map {\n                when (it) {\n                    in initialChecked -> State.CHECKED\n                    in initialInversed -> State.INVERSED\n                    else -> State.UNCHECKED\n                }\n            }\n            .toMutableStateList()\n    }\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        title = { Text(text = title) },\n        text = {\n            Column {\n                if (message != null) {\n                    Text(\n                        text = message,\n                        modifier = Modifier.padding(bottom = 8.dp),\n                    )\n                }\n\n                Box {\n                    val listState = rememberLazyListState()\n                    LazyColumn(state = listState) {\n                        itemsIndexed(items = items) { index, item ->\n                            val state = selected[index]\n                            Row(\n                                modifier = Modifier\n                                    .clip(MaterialTheme.shapes.small)\n                                    .clickable {\n                                        selected[index] = when (state) {\n                                            State.UNCHECKED -> State.CHECKED\n                                            State.CHECKED -> State.INVERSED\n                                            State.INVERSED -> State.UNCHECKED\n                                        }\n                                    }\n                                    .defaultMinSize(minHeight = 48.dp)\n                                    .fillMaxWidth(),\n                                verticalAlignment = Alignment.CenterVertically,\n                            ) {\n                                Icon(\n                                    modifier = Modifier.padding(end = 20.dp),\n                                    imageVector = when (state) {\n                                        State.UNCHECKED -> Icons.Rounded.CheckBoxOutlineBlank\n                                        State.CHECKED -> Icons.Rounded.CheckBox\n                                        State.INVERSED -> Icons.Rounded.DisabledByDefault\n                                    },\n                                    tint = if (state == State.UNCHECKED) {\n                                        LocalContentColor.current\n                                    } else {\n                                        MaterialTheme.colorScheme.primary\n                                    },\n                                    contentDescription = stringResource(\n                                        when (state) {\n                                            State.UNCHECKED -> MR.strings.disabled\n                                            State.CHECKED -> MR.strings.disabled\n                                            State.INVERSED -> MR.strings.disabled\n                                        },\n                                    ),\n                                )\n                                Text(text = itemLabel(item))\n                            }\n                        }\n                    }\n\n                    if (listState.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter))\n                    if (listState.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter))\n                }\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    val included = items.mapIndexedNotNull { index, category ->\n                        if (selected[index] == State.CHECKED) category else null\n                    }\n                    val excluded = items.mapIndexedNotNull { index, category ->\n                        if (selected[index] == State.INVERSED) category else null\n                    }\n                    onValueChanged(included, excluded)\n                },\n            ) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/stats/AnimeStatsScreenContent.kt",
    "content": "package eu.kanade.presentation.more.stats\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.IntrinsicSize\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyItemScope\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.CollectionsBookmark\nimport androidx.compose.material.icons.outlined.LocalLibrary\nimport androidx.compose.material.icons.outlined.Schedule\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.more.stats.components.StatsItem\nimport eu.kanade.presentation.more.stats.components.StatsOverviewItem\nimport eu.kanade.presentation.more.stats.data.StatsData\nimport eu.kanade.presentation.util.toDurationString\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.SectionCard\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.util.Locale\nimport kotlin.time.DurationUnit\nimport kotlin.time.toDuration\n\n@Composable\nfun AnimeStatsScreenContent(\n    state: StatsScreenState.SuccessAnime,\n    paddingValues: PaddingValues,\n) {\n    val statListState = rememberLazyListState()\n    LazyColumn(\n        state = statListState,\n        contentPadding = paddingValues,\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        item {\n            OverviewSection(state.overview)\n        }\n        item {\n            TitlesStats(state.titles)\n        }\n        item {\n            EpisodeStats(state.episodes)\n        }\n        item {\n            TrackerStats(state.trackers)\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.OverviewSection(\n    data: StatsData.AnimeOverview,\n) {\n    val none = stringResource(MR.strings.none)\n    val context = LocalContext.current\n    val readDurationString = remember(data.totalSeenDuration) {\n        data.totalSeenDuration\n            .toDuration(DurationUnit.MILLISECONDS)\n            .toDurationString(context, fallback = none)\n    }\n    SectionCard(MR.strings.label_overview_section) {\n        Row(\n            modifier = Modifier.height(IntrinsicSize.Min),\n        ) {\n            StatsOverviewItem(\n                title = data.libraryAnimeCount.toString(),\n                subtitle = stringResource(MR.strings.in_library),\n                icon = Icons.Outlined.CollectionsBookmark,\n            )\n            StatsOverviewItem(\n                title = readDurationString,\n                subtitle = stringResource(AYMR.strings.label_watched_duration),\n                icon = Icons.Outlined.Schedule,\n            )\n            StatsOverviewItem(\n                title = data.completedAnimeCount.toString(),\n                subtitle = stringResource(MR.strings.label_completed_titles),\n                icon = Icons.Outlined.LocalLibrary,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.TitlesStats(\n    data: StatsData.AnimeTitles,\n) {\n    SectionCard(MR.strings.label_titles_section) {\n        Row {\n            StatsItem(\n                data.globalUpdateItemCount.toString(),\n                stringResource(MR.strings.label_titles_in_global_update),\n            )\n            StatsItem(\n                data.startedAnimeCount.toString(),\n                stringResource(MR.strings.label_started),\n            )\n            StatsItem(\n                data.localAnimeCount.toString(),\n                stringResource(MR.strings.label_local),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.EpisodeStats(\n    data: StatsData.Episodes,\n) {\n    SectionCard(AYMR.strings.episodes) {\n        Row {\n            StatsItem(\n                data.totalEpisodeCount.toString(),\n                stringResource(MR.strings.label_total_chapters),\n            )\n            StatsItem(\n                data.readEpisodeCount.toString(),\n                stringResource(AYMR.strings.label_watched_episodes),\n            )\n            StatsItem(\n                data.downloadCount.toString(),\n                stringResource(MR.strings.label_downloaded),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.TrackerStats(\n    data: StatsData.Trackers,\n) {\n    val notApplicable = stringResource(MR.strings.not_applicable)\n    val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) {\n        if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) {\n            // All other numbers are localized in English\n            \"%.2f ★\".format(Locale.ENGLISH, data.meanScore)\n        } else {\n            notApplicable\n        }\n    }\n    SectionCard(MR.strings.label_tracker_section) {\n        Row {\n            StatsItem(\n                data.trackedTitleCount.toString(),\n                stringResource(MR.strings.label_tracked_titles),\n            )\n            StatsItem(\n                meanScoreStr,\n                stringResource(MR.strings.label_mean_score),\n            )\n            StatsItem(\n                data.trackerCount.toString(),\n                stringResource(MR.strings.label_used),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/stats/MangaStatsScreenContent.kt",
    "content": "package eu.kanade.presentation.more.stats\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.IntrinsicSize\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyItemScope\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.CollectionsBookmark\nimport androidx.compose.material.icons.outlined.LocalLibrary\nimport androidx.compose.material.icons.outlined.Schedule\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.presentation.more.stats.components.StatsItem\nimport eu.kanade.presentation.more.stats.components.StatsOverviewItem\nimport eu.kanade.presentation.more.stats.data.StatsData\nimport eu.kanade.presentation.util.toDurationString\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.SectionCard\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.util.Locale\nimport kotlin.time.DurationUnit\nimport kotlin.time.toDuration\n\n@Composable\nfun MangaStatsScreenContent(\n    state: StatsScreenState.SuccessManga,\n    paddingValues: PaddingValues,\n) {\n    LazyColumn(\n        contentPadding = paddingValues,\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        item {\n            OverviewSection(state.overview)\n        }\n        item {\n            TitlesStats(state.titles)\n        }\n        item {\n            ChapterStats(state.chapters)\n        }\n        item {\n            TrackerStats(state.trackers)\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.OverviewSection(\n    data: StatsData.MangaOverview,\n) {\n    val none = stringResource(MR.strings.none)\n    val context = LocalContext.current\n    val readDurationString = remember(data.totalReadDuration) {\n        data.totalReadDuration\n            .toDuration(DurationUnit.MILLISECONDS)\n            .toDurationString(context, fallback = none)\n    }\n    SectionCard(MR.strings.label_overview_section) {\n        Row(\n            modifier = Modifier.height(IntrinsicSize.Min),\n        ) {\n            StatsOverviewItem(\n                title = data.libraryMangaCount.toString(),\n                subtitle = stringResource(MR.strings.in_library),\n                icon = Icons.Outlined.CollectionsBookmark,\n            )\n            StatsOverviewItem(\n                title = readDurationString,\n                subtitle = stringResource(MR.strings.label_read_duration),\n                icon = Icons.Outlined.Schedule,\n            )\n            StatsOverviewItem(\n                title = data.completedMangaCount.toString(),\n                subtitle = stringResource(MR.strings.label_completed_titles),\n                icon = Icons.Outlined.LocalLibrary,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.TitlesStats(\n    data: StatsData.MangaTitles,\n) {\n    SectionCard(MR.strings.label_titles_section) {\n        Row {\n            StatsItem(\n                data.globalUpdateItemCount.toString(),\n                stringResource(MR.strings.label_titles_in_global_update),\n            )\n            StatsItem(\n                data.startedMangaCount.toString(),\n                stringResource(MR.strings.label_started),\n            )\n            StatsItem(\n                data.localMangaCount.toString(),\n                stringResource(MR.strings.label_local),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.ChapterStats(\n    data: StatsData.Chapters,\n) {\n    SectionCard(MR.strings.chapters) {\n        Row {\n            StatsItem(\n                data.totalChapterCount.toString(),\n                stringResource(MR.strings.label_total_chapters),\n            )\n            StatsItem(\n                data.readChapterCount.toString(),\n                stringResource(MR.strings.label_read_chapters),\n            )\n            StatsItem(\n                data.downloadCount.toString(),\n                stringResource(MR.strings.label_downloaded),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun LazyItemScope.TrackerStats(\n    data: StatsData.Trackers,\n) {\n    val notApplicable = stringResource(MR.strings.not_applicable)\n    val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) {\n        if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) {\n            // All other numbers are localized in English\n            \"%.2f ★\".format(Locale.ENGLISH, data.meanScore)\n        } else {\n            notApplicable\n        }\n    }\n    SectionCard(MR.strings.label_tracker_section) {\n        Row {\n            StatsItem(\n                data.trackedTitleCount.toString(),\n                stringResource(MR.strings.label_tracked_titles),\n            )\n            StatsItem(\n                meanScoreStr,\n                stringResource(MR.strings.label_mean_score),\n            )\n            StatsItem(\n                data.trackerCount.toString(),\n                stringResource(MR.strings.label_used),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/stats/StatsScreenState.kt",
    "content": "package eu.kanade.presentation.more.stats\n\nimport androidx.compose.runtime.Immutable\nimport eu.kanade.presentation.more.stats.data.StatsData\n\nsealed interface StatsScreenState {\n    @Immutable\n    data object Loading : StatsScreenState\n\n    @Immutable\n    data class SuccessManga(\n        val overview: StatsData.MangaOverview,\n        val titles: StatsData.MangaTitles,\n        val chapters: StatsData.Chapters,\n        val trackers: StatsData.Trackers,\n    ) : StatsScreenState\n\n    @Immutable\n    data class SuccessAnime(\n        val overview: StatsData.AnimeOverview,\n        val titles: StatsData.AnimeTitles,\n        val episodes: StatsData.Episodes,\n        val trackers: StatsData.Trackers,\n    ) : StatsScreenState\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/stats/components/StatsItem.kt",
    "content": "package eu.kanade.presentation.more.stats.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxHeight\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.TextStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun RowScope.StatsOverviewItem(\n    title: String,\n    subtitle: String,\n    icon: ImageVector,\n) {\n    BaseStatsItem(\n        title = title,\n        titleStyle = MaterialTheme.typography.titleLarge,\n        subtitle = subtitle,\n        subtitleStyle = MaterialTheme.typography.bodyMedium,\n        icon = icon,\n    )\n}\n\n@Composable\nfun RowScope.StatsItem(\n    title: String,\n    subtitle: String,\n) {\n    BaseStatsItem(\n        title = title,\n        titleStyle = MaterialTheme.typography.bodyMedium,\n        subtitle = subtitle,\n        subtitleStyle = MaterialTheme.typography.labelSmall,\n    )\n}\n\n@Composable\nprivate fun RowScope.BaseStatsItem(\n    title: String,\n    titleStyle: TextStyle,\n    subtitle: String,\n    subtitleStyle: TextStyle,\n    icon: ImageVector? = null,\n) {\n    Column(\n        modifier = Modifier\n            .weight(1f)\n            .fillMaxHeight(),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        horizontalAlignment = Alignment.CenterHorizontally,\n    ) {\n        Text(\n            text = title,\n            style = titleStyle\n                .copy(fontWeight = FontWeight.Bold),\n            textAlign = TextAlign.Center,\n            maxLines = 1,\n        )\n        Text(\n            text = subtitle,\n            style = subtitleStyle\n                .copy(\n                    color = MaterialTheme.colorScheme.onSurface\n                        .copy(alpha = SECONDARY_ALPHA),\n                ),\n            textAlign = TextAlign.Center,\n        )\n        if (icon != null) {\n            Spacer(modifier = Modifier.weight(1f))\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                tint = MaterialTheme.colorScheme.primary,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/stats/data/StatsData.kt",
    "content": "package eu.kanade.presentation.more.stats.data\n\nsealed interface StatsData {\n\n    data class MangaOverview(\n        val libraryMangaCount: Int,\n        val completedMangaCount: Int,\n        val totalReadDuration: Long,\n    ) : StatsData\n\n    data class AnimeOverview(\n        val libraryAnimeCount: Int,\n        val completedAnimeCount: Int,\n        val totalSeenDuration: Long,\n    ) : StatsData\n\n    data class MangaTitles(\n        val globalUpdateItemCount: Int,\n        val startedMangaCount: Int,\n        val localMangaCount: Int,\n    ) : StatsData\n\n    data class AnimeTitles(\n        val globalUpdateItemCount: Int,\n        val startedAnimeCount: Int,\n        val localAnimeCount: Int,\n    ) : StatsData\n\n    data class Chapters(\n        val totalChapterCount: Int,\n        val readChapterCount: Int,\n        val downloadCount: Int,\n    ) : StatsData\n\n    data class Episodes(\n        val totalEpisodeCount: Int,\n        val readEpisodeCount: Int,\n        val downloadCount: Int,\n    ) : StatsData\n\n    data class Trackers(\n        val trackedTitleCount: Int,\n        val meanScore: Double,\n        val trackerCount: Int,\n    ) : StatsData\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/storage/CumulativeStorage.kt",
    "content": "package eu.kanade.presentation.more.storage\n\nimport androidx.compose.foundation.Canvas\nimport androidx.compose.foundation.layout.aspectRatio\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.graphics.StrokeCap\nimport androidx.compose.ui.graphics.drawscope.Stroke\nimport androidx.compose.ui.graphics.drawscope.rotate\nimport androidx.compose.ui.layout.Layout\nimport eu.kanade.tachiyomi.util.toSize\n\n@Composable\nfun CumulativeStorage(\n    items: List<StorageItem>,\n    modifier: Modifier = Modifier,\n    borderWidth: Float = 15f,\n) {\n    val totalSize = remember(items) {\n        items.sumOf { it.size }.toFloat()\n    }\n    val totalSizeString = remember(totalSize) {\n        totalSize.toLong().toSize()\n    }\n    Layout(\n        modifier = modifier,\n        content = {\n            Canvas(\n                modifier = Modifier.aspectRatio(1f),\n                onDraw = {\n                    // don't bother drawing if there's no data\n                    if (totalSize == 0f) return@Canvas\n\n                    val totalAngle = 180f\n                    var currentAngle = 0f\n                    rotate(180f) {\n                        for (item in items) {\n                            val itemAngle = (item.size / totalSize) * totalAngle\n                            drawArc(\n                                color = item.color,\n                                startAngle = currentAngle,\n                                sweepAngle = itemAngle,\n                                useCenter = false,\n                                style = Stroke(width = borderWidth, cap = StrokeCap.Round),\n                            )\n                            currentAngle += itemAngle\n                        }\n                    }\n                },\n            )\n            Text(\n                text = totalSizeString,\n                style = MaterialTheme.typography.displaySmall,\n            )\n        },\n        measurePolicy = { measurables, constraints ->\n            val placeables = measurables.map { measurable ->\n                measurable.measure(constraints.copy(minWidth = 0, minHeight = 0))\n            }\n            val canvas = placeables.first()\n            val text = placeables.last()\n            // use half the height of the canvas to avoid too much extra space\n            layout(constraints.maxWidth, canvas.height / 2) {\n                canvas.placeRelative(0, 0)\n                text.placeRelative(\n                    (canvas.width / 2) - (text.width / 2),\n                    (canvas.height / 4) - (text.height / 2),\n                )\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/storage/SelectStorageCategory.kt",
    "content": "package eu.kanade.presentation.more.storage\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.SelectItem\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun SelectStorageCategory(\n    selectedCategory: Category,\n    categories: List<Category>,\n    modifier: Modifier = Modifier,\n    onCategorySelected: (Category) -> Unit,\n) {\n    val all = stringResource(AYMR.strings.label_all)\n    val default = stringResource(MR.strings.label_default)\n    val mappedCategories = remember(categories) {\n        categories.map {\n            when (it.id) {\n                -1L -> it.copy(name = all)\n                Category.UNCATEGORIZED_ID -> it.copy(name = default)\n                else -> it\n            }\n        }.toTypedArray()\n    }\n\n    SelectItem(\n        modifier = modifier,\n        label = stringResource(AYMR.strings.label_category),\n        selectedIndex = mappedCategories.indexOfFirst { it.id == selectedCategory.id },\n        options = mappedCategories,\n        onSelect = { index ->\n            onCategorySelected(mappedCategories[index])\n        },\n        toString = { it.name },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/storage/StorageItem.kt",
    "content": "package eu.kanade.presentation.more.storage\n\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.Spacer\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.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.tachiyomi.util.toSize\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata class StorageItem(\n    val id: Long,\n    val title: String,\n    val size: Long,\n    val thumbnail: String?,\n    val entriesCount: Int,\n    val color: Color,\n)\n\n@Composable\nfun StorageItem(\n    item: StorageItem,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n    onDelete: (Long) -> Unit,\n) {\n    val pluralCount = if (isManga) MR.plurals.manga_num_chapters else AYMR.plurals.anime_num_episodes\n    var showDeleteDialog by remember {\n        mutableStateOf(false)\n    }\n\n    Row(\n        modifier = modifier,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n        verticalAlignment = Alignment.CenterVertically,\n        content = {\n            ItemCover.Square(\n                modifier = Modifier.height(48.dp),\n                data = item.thumbnail,\n                contentDescription = item.title,\n            )\n            Column(\n                modifier = Modifier.weight(1f),\n                content = {\n                    Text(\n                        text = item.title,\n                        style = MaterialTheme.typography.bodyMedium,\n                        overflow = TextOverflow.Ellipsis,\n                        fontWeight = FontWeight.W700,\n                        maxLines = 1,\n                    )\n                    Row(\n                        verticalAlignment = Alignment.CenterVertically,\n                        content = {\n                            Box(\n                                modifier = Modifier\n                                    .background(item.color, CircleShape)\n                                    .size(12.dp),\n                            )\n                            Spacer(Modifier.width(MaterialTheme.padding.small))\n                            Text(\n                                text = item.size.toSize(),\n                                style = MaterialTheme.typography.bodySmall,\n                            )\n                            Box(\n                                modifier = Modifier\n                                    .padding(horizontal = MaterialTheme.padding.small / 2)\n                                    .background(MaterialTheme.colorScheme.onSurface, CircleShape)\n                                    .size(MaterialTheme.padding.small / 2),\n                            )\n                            Text(\n                                text = pluralStringResource(\n                                    pluralCount,\n                                    count = item.entriesCount,\n                                    item.entriesCount,\n                                ),\n                                style = MaterialTheme.typography.bodySmall,\n                            )\n                        },\n                    )\n                },\n            )\n            IconButton(\n                onClick = {\n                    showDeleteDialog = true\n                },\n                content = {\n                    Icon(\n                        imageVector = Icons.Default.Delete,\n                        contentDescription = stringResource(MR.strings.action_delete),\n                    )\n                },\n            )\n        },\n    )\n\n    if (showDeleteDialog) {\n        ItemDeleteDialog(\n            title = item.title,\n            isManga = isManga,\n            onDismissRequest = { showDeleteDialog = false },\n            onDelete = {\n                onDelete(item.id)\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun ItemDeleteDialog(\n    title: String,\n    isManga: Boolean,\n    onDismissRequest: () -> Unit,\n    onDelete: () -> Unit,\n) {\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onDelete()\n                    onDismissRequest()\n                },\n                content = {\n                    Text(text = stringResource(MR.strings.action_ok))\n                },\n            )\n        },\n        dismissButton = {\n            TextButton(\n                onClick = onDismissRequest,\n                content = {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                },\n            )\n        },\n        title = {\n            Text(\n                text = stringResource(\n                    if (isManga) MR.strings.delete_downloads_for_manga else AYMR.strings.delete_downloads_for_anime,\n                ),\n            )\n        },\n        text = {\n            Text(\n                text = stringResource(AYMR.strings.delete_confirmation, title),\n            )\n        },\n    )\n}\n\n@Preview(showBackground = true)\n@Composable\nprivate fun StorageItemPreview() {\n    StorageItem(\n        item = StorageItem(\n            id = 0L,\n            title = \"Manga Title\",\n            size = 123456789L,\n            thumbnail = null,\n            entriesCount = 123,\n            color = Color.Red,\n        ),\n        isManga = true,\n        onDelete = {\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/storage/StorageScreenContent.kt",
    "content": "package eu.kanade.presentation.more.storage\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.Spacer\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.material3.MaterialTheme\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.Color\nimport androidx.compose.ui.tooling.preview.Devices\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.util.isTabletUi\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport kotlin.random.Random\n\n@Composable\nfun StorageScreenContent(\n    state: StorageScreenState,\n    isManga: Boolean,\n    modifier: Modifier = Modifier,\n    contentPadding: PaddingValues,\n    onCategorySelected: (Category) -> Unit,\n    onDelete: (Long) -> Unit,\n) {\n    when (state) {\n        is StorageScreenState.Loading -> {\n            LoadingScreen(modifier)\n        }\n\n        is StorageScreenState.Success -> {\n            @Composable\n            fun Info(modifier: Modifier = Modifier) {\n                Column(\n                    modifier = modifier,\n                    horizontalAlignment = Alignment.CenterHorizontally,\n                    verticalArrangement = Arrangement.Center,\n                    content = {\n                        SelectStorageCategory(\n                            selectedCategory = state.selectedCategory,\n                            categories = state.categories,\n                            onCategorySelected = onCategorySelected,\n                        )\n                        CumulativeStorage(\n                            modifier = Modifier\n                                .padding(\n                                    horizontal = MaterialTheme.padding.small,\n                                    vertical = MaterialTheme.padding.medium,\n                                )\n                                .run {\n                                    if (isTabletUi()) {\n                                        this\n                                    } else {\n                                        padding(bottom = MaterialTheme.padding.medium)\n                                    }\n                                },\n                            items = state.items,\n                        )\n                    },\n                )\n            }\n\n            Row(\n                modifier = modifier\n                    .padding(horizontal = MaterialTheme.padding.small)\n                    .padding(contentPadding),\n                content = {\n                    if (isTabletUi()) {\n                        Info(\n                            modifier = Modifier\n                                .weight(2f)\n                                .padding(end = MaterialTheme.padding.extraLarge)\n                                .fillMaxHeight(),\n                        )\n                    }\n                    LazyColumn(\n                        modifier = Modifier.weight(3f),\n                        content = {\n                            item {\n                                Spacer(Modifier.height(MaterialTheme.padding.small))\n                            }\n                            item {\n                                if (!isTabletUi()) {\n                                    Info()\n                                }\n                            }\n                            items(\n                                state.items.size,\n                                itemContent = { index ->\n                                    StorageItem(\n                                        item = state.items[index],\n                                        isManga = isManga,\n                                        onDelete = onDelete,\n                                    )\n                                    Spacer(Modifier.height(MaterialTheme.padding.medium))\n                                },\n                            )\n                        },\n                    )\n                },\n            )\n        }\n    }\n}\n\n@Preview(showBackground = true)\n@Composable\nprivate fun StorageScreenContentPreview() {\n    val random = remember { Random(0) }\n    val categories = remember {\n        List(10) {\n            Category(\n                id = it.toLong(),\n                name = \"Category $it\",\n                0L,\n                0L,\n                false,\n            )\n        }\n    }\n    StorageScreenContent(\n        state = StorageScreenState.Success(\n            items = List(20) { index ->\n                StorageItem(\n                    id = index.toLong(),\n                    title = \"Title $index\",\n                    size = index * 10000000L,\n                    thumbnail = null,\n                    entriesCount = 100 * index,\n                    color = Color(\n                        random.nextInt(255),\n                        random.nextInt(255),\n                        random.nextInt(255),\n                    ),\n                )\n            },\n            categories = categories,\n            selectedCategory = categories[0],\n        ),\n        isManga = true,\n        contentPadding = PaddingValues(0.dp),\n        onCategorySelected = {},\n        onDelete = {},\n    )\n}\n\n@Preview(showBackground = true, device = Devices.DESKTOP)\n@Composable\nprivate fun StorageTabletUiScreenContentPreview() {\n    val random = remember { Random(0) }\n    val categories = remember {\n        List(10) {\n            Category(\n                id = it.toLong(),\n                name = \"Category $it\",\n                0L,\n                0L,\n                false,\n            )\n        }\n    }\n    StorageScreenContent(\n        state = StorageScreenState.Success(\n            items = List(20) { index ->\n                StorageItem(\n                    id = index.toLong(),\n                    title = \"Title $index\",\n                    size = index * 10000000L,\n                    thumbnail = null,\n                    entriesCount = 100 * index,\n                    color = Color(\n                        random.nextInt(255),\n                        random.nextInt(255),\n                        random.nextInt(255),\n                    ),\n                )\n            },\n            categories = categories,\n            selectedCategory = categories[0],\n        ),\n        isManga = true,\n        contentPadding = PaddingValues(0.dp),\n        onCategorySelected = {},\n        onDelete = {},\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/more/storage/StorageScreenState.kt",
    "content": "package eu.kanade.presentation.more.storage\n\nimport androidx.compose.runtime.Immutable\nimport tachiyomi.domain.category.model.Category\n\nsealed class StorageScreenState {\n    @Immutable\n    object Loading : StorageScreenState()\n\n    @Immutable\n    data class Success(\n        val selectedCategory: Category,\n        val items: List<StorageItem>,\n        val categories: List<Category>,\n    ) : StorageScreenState()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/ExpandableCard.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport android.annotation.SuppressLint\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ArrowDropDown\nimport androidx.compose.material3.Card\nimport androidx.compose.material3.CardColors\nimport androidx.compose.material3.CardDefaults\nimport androidx.compose.material3.CardElevation\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.rotate\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.tooling.preview.Preview\nimport tachiyomi.presentation.core.components.material.padding\n\n@SuppressLint(\"UnrememberedMutableState\")\n@Composable\nfun ExpandableCard(\n    isExpanded: Boolean,\n    title: @Composable (Boolean) -> Unit,\n    onExpand: (Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n    colors: CardColors = CardDefaults.cardColors(),\n    shape: Shape = CardDefaults.shape,\n    border: BorderStroke? = null,\n    elevation: CardElevation = CardDefaults.cardElevation(),\n    content: @Composable () -> Unit,\n) {\n    val rotationState by animateFloatAsState(if (isExpanded) 0f else 180f, label = \"card_rotation\")\n    Card(\n        modifier = modifier.animateContentSize(),\n        colors = colors,\n        shape = shape,\n        border = border,\n        elevation = elevation,\n    ) {\n        Row(\n            modifier = Modifier\n                .clickable(onClick = { onExpand(!isExpanded) })\n                .padding(start = MaterialTheme.padding.medium),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            title(isExpanded)\n            Spacer(Modifier.weight(1f))\n            IconButton(\n                modifier = Modifier.rotate(rotationState),\n                onClick = { onExpand(!isExpanded) },\n            ) {\n                Icon(Icons.Default.ArrowDropDown, null)\n            }\n        }\n        Box(Modifier.animateContentSize()) {\n            if (isExpanded) content()\n        }\n    }\n}\n\n@Composable\n@Preview\nprivate fun PreviewExpandableCard() {\n    var isExpanded by remember { mutableStateOf(true) }\n\n    ExpandableCard(\n        isExpanded,\n        title = { Text(\"Hello World\") },\n        content = { Text(\"SPOjao;sjd\") },\n        onExpand = { isExpanded = it },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/ExposedTextDropDownMenu.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.ExposedDropdownMenuBox\nimport androidx.compose.material3.ExposedDropdownMenuDefaults\nimport androidx.compose.material3.MenuAnchorType\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.OutlinedTextFieldDefaults\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.setValue\nimport androidx.compose.ui.Modifier\nimport kotlinx.collections.immutable.ImmutableList\n\n@Composable\nfun ExposedTextDropDownMenu(\n    selectedValue: String,\n    options: ImmutableList<String>,\n    label: String,\n    onValueChangedEvent: (String) -> Unit,\n    modifier: Modifier = Modifier,\n    leadingIcon: (@Composable () -> Unit)? = null,\n) {\n    var expanded by remember { mutableStateOf(false) }\n\n    ExposedDropdownMenuBox(\n        expanded = expanded,\n        onExpandedChange = { expanded = !expanded },\n        modifier = modifier,\n    ) {\n        OutlinedTextField(\n            readOnly = true,\n            value = selectedValue,\n            onValueChange = {},\n            label = { Text(text = label) },\n            trailingIcon = {\n                ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded)\n            },\n            leadingIcon = leadingIcon,\n            colors = OutlinedTextFieldDefaults.colors(),\n            modifier = Modifier\n                .menuAnchor(MenuAnchorType.PrimaryEditable)\n                .fillMaxWidth(),\n        )\n\n        ExposedDropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {\n            options.forEach { option: String ->\n                DropdownMenuItem(\n                    text = { Text(text = option) },\n                    onClick = {\n                        expanded = false\n                        onValueChangedEvent(option)\n                    },\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/OutlinedNumericChooser.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.AddCircle\nimport androidx.compose.material.icons.filled.RemoveCircle\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedTextField\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.input.KeyboardType\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun OutlinedNumericChooser(\n    value: Int,\n    onChange: (Int) -> Unit,\n    max: Int,\n    step: Int,\n    modifier: Modifier = Modifier,\n    min: Int = 0,\n    suffix: (@Composable () -> Unit)? = null,\n    label: (@Composable () -> Unit)? = null,\n) {\n    assert(max > min) { \"min can't be larger than max ($min > $max)\" }\n    Row(\n        modifier = modifier,\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        RepeatingIconButton(onClick = { onChange(value - step) }) {\n            Icon(Icons.Filled.RemoveCircle, null)\n        }\n        var valueString by remember { mutableStateOf(\"$value\") }\n        LaunchedEffect(value) {\n            if (valueString.isBlank() && value == 0) return@LaunchedEffect\n            valueString = value.toString()\n        }\n        OutlinedTextField(\n            label = label,\n            value = valueString,\n            onValueChange = { newValue ->\n                if (newValue.isBlank()) {\n                    valueString = newValue\n                    onChange(0)\n                }\n                runCatching {\n                    val intValue = if (newValue.trimStart() == \"-\") -0 else newValue.toInt()\n                    onChange(intValue)\n                    valueString = newValue\n                }\n            },\n            isError = value > max || value < min,\n            supportingText = {\n                if (value > max) Text(stringResource(AYMR.strings.numeric_chooser_value_too_big))\n                if (value < min) Text(stringResource(AYMR.strings.numeric_chooser_value_too_small))\n            },\n            suffix = suffix,\n            modifier = Modifier.weight(1f),\n            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),\n        )\n        RepeatingIconButton(onClick = { onChange(value + step) }) {\n            Icon(Icons.Filled.AddCircle, null)\n        }\n    }\n}\n\n@Composable\nfun OutlinedNumericChooser(\n    value: Float,\n    onChange: (Float) -> Unit,\n    max: Float,\n    step: Float,\n    modifier: Modifier = Modifier,\n    min: Float = 0f,\n    suffix: (@Composable () -> Unit)? = null,\n    label: (@Composable () -> Unit)? = null,\n) {\n    assert(max > min) { \"min can't be larger than max ($min > $max)\" }\n    Row(\n        modifier,\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        RepeatingIconButton(onClick = { onChange(value - step) }) {\n            Icon(Icons.Filled.RemoveCircle, null)\n        }\n        var valueString by remember { mutableStateOf(\"$value\") }\n        LaunchedEffect(value) {\n            if (valueString.isBlank() && value == 0f) return@LaunchedEffect\n            valueString = value.toString().dropLastWhile { it == '0' }.dropLastWhile { it == '.' }\n        }\n        OutlinedTextField(\n            value = valueString,\n            label = label,\n            onValueChange = { newValue ->\n                if (newValue.isBlank()) {\n                    valueString = newValue\n                    onChange(0f)\n                }\n                runCatching {\n                    if (newValue.startsWith('.')) return@runCatching\n                    val floatValue = if (newValue.trimStart() == \"-\") -0f else newValue.toFloat()\n                    onChange(floatValue)\n                    valueString = newValue\n                }\n            },\n            isError = value > max || value < min,\n            supportingText = {\n                if (value > max) Text(stringResource(AYMR.strings.numeric_chooser_value_too_big))\n                if (value < min) Text(stringResource(AYMR.strings.numeric_chooser_value_too_small))\n            },\n            modifier = Modifier.weight(1f),\n            maxLines = 1,\n            suffix = suffix,\n            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),\n        )\n        RepeatingIconButton(onClick = { onChange(value + step) }) {\n            Icon(Icons.Filled.AddCircle, null)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/OvalBox.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.geometry.Size\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Outline\nimport androidx.compose.ui.graphics.Path\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.Density\nimport androidx.compose.ui.unit.LayoutDirection\n\nobject RightSideOvalShape : Shape {\n    override fun createOutline(\n        size: Size,\n        layoutDirection: LayoutDirection,\n        density: Density,\n    ): Outline {\n        val path = Path().apply {\n            moveTo(size.width, size.height)\n            lineTo(size.width, 0f)\n            lineTo(size.width / 10, 0f)\n            cubicTo(\n                size.width / 10,\n                0f,\n                -30f,\n                size.height / 2,\n                size.width / 10,\n                size.height,\n            )\n            close()\n        }\n        return Outline.Generic(path)\n    }\n}\n\nobject LeftSideOvalShape : Shape {\n    override fun createOutline(\n        size: Size,\n        layoutDirection: LayoutDirection,\n        density: Density,\n    ): Outline {\n        val path = Path().apply {\n            moveTo(0f, 0f)\n            lineTo(0f, size.height)\n            lineTo(size.width - size.width / 10, size.height)\n            cubicTo(\n                size.width - size.width / 10,\n                size.height,\n                size.width,\n                size.height / 2,\n                size.width - size.width / 10,\n                0f,\n            )\n            close()\n        }\n        return Outline.Generic(path)\n    }\n}\n\n@Preview\n@Composable\nprivate fun PreviewRightSideOvalBox() {\n    Box(\n        modifier = Modifier\n            .fillMaxSize()\n            .clip(RightSideOvalShape)\n            .background(Color.Red),\n    ) {}\n}\n\n@Preview\n@Composable\nprivate fun PreviewLeftSideOvalBox() {\n    Box(\n        modifier = Modifier\n            .fillMaxSize()\n            .clip(LeftSideOvalShape)\n            .background(Color.Red),\n    ) {}\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/PlayerSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport android.content.res.Configuration.ORIENTATION_LANDSCAPE\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.rememberSplineBasedDecay\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.gestures.AnchoredDraggableState\nimport androidx.compose.foundation.gestures.DraggableAnchors\nimport androidx.compose.foundation.gestures.Orientation\nimport androidx.compose.foundation.gestures.anchoredDraggable\nimport androidx.compose.foundation.gestures.animateTo\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.shape.ZeroCornerSize\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableFloatStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.rememberUpdatedState\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.snapshotFlow\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\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.layout.onSizeChanged\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.IntOffset\nimport androidx.compose.ui.unit.Velocity\nimport androidx.compose.ui.unit.dp\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.launch\nimport kotlin.math.roundToInt\n\nprivate val sheetAnimationSpec = tween<Float>(350)\n\n@Composable\nfun PlayerSheet(\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n    tonalElevation: Dp = 1.dp,\n    dismissEvent: Boolean = false,\n    content: @Composable () -> Unit,\n) {\n    val scope = rememberCoroutineScope()\n    val density = LocalDensity.current\n    val latestOnDismissRequest by rememberUpdatedState(onDismissRequest)\n    val maxWidth = if (LocalConfiguration.current.orientation == ORIENTATION_LANDSCAPE) {\n        720.dp\n    } else {\n        420.dp\n    }\n    val maxHeight = LocalConfiguration.current.screenHeightDp.dp * .95f\n\n    var backgroundAlpha by remember { mutableFloatStateOf(0f) }\n    val alpha by animateFloatAsState(\n        backgroundAlpha,\n        animationSpec = sheetAnimationSpec,\n        label = \"alpha\",\n    )\n\n    val decayAnimationSpec = rememberSplineBasedDecay<Float>()\n    val anchoredDraggableState = remember {\n        AnchoredDraggableState(\n            initialValue = 1,\n            snapAnimationSpec = sheetAnimationSpec,\n            decayAnimationSpec = decayAnimationSpec,\n            positionalThreshold = { with(density) { 56.dp.toPx() } },\n            velocityThreshold = { with(density) { 125.dp.toPx() } },\n        )\n    }\n\n    LaunchedEffect(dismissEvent) {\n        if (dismissEvent) {\n            backgroundAlpha = 0f\n            anchoredDraggableState.animateTo(1)\n            onDismissRequest()\n        }\n    }\n\n    val internalOnDismissRequest = {\n        if (anchoredDraggableState.currentValue == 0) {\n            scope.launch {\n                backgroundAlpha = 0f\n                anchoredDraggableState.animateTo(1)\n            }\n        }\n    }\n    Box(\n        modifier = Modifier\n            .clickable(\n                interactionSource = remember { MutableInteractionSource() },\n                indication = null,\n                onClick = internalOnDismissRequest,\n            )\n            .fillMaxSize()\n            .background(Color.Black.copy(alpha))\n            .onSizeChanged {\n                val anchors = DraggableAnchors {\n                    0 at 0f\n                    1 at it.height.toFloat()\n                }\n                anchoredDraggableState.updateAnchors(anchors)\n            },\n        contentAlignment = Alignment.BottomCenter,\n    ) {\n        Surface(\n            modifier = Modifier\n                .sizeIn(maxWidth = maxWidth, maxHeight = maxHeight)\n                .clickable(\n                    interactionSource = remember { MutableInteractionSource() },\n                    indication = null,\n                    onClick = {},\n                )\n                .nestedScroll(\n                    remember(anchoredDraggableState) {\n                        anchoredDraggableState.preUpPostDownNestedScrollConnection()\n                    },\n                )\n                .then(modifier)\n                .offset {\n                    IntOffset(\n                        0,\n                        anchoredDraggableState.offset\n                            .takeIf { it.isFinite() }\n                            ?.roundToInt()\n                            ?: 0,\n                    )\n                }\n                .anchoredDraggable(\n                    state = anchoredDraggableState,\n                    orientation = Orientation.Vertical,\n                )\n                .windowInsetsPadding(\n                    WindowInsets.systemBars\n                        .only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),\n                ),\n            shape = MaterialTheme.shapes.extraLarge.copy(bottomEnd = ZeroCornerSize, bottomStart = ZeroCornerSize),\n            tonalElevation = tonalElevation,\n            content = {\n                BackHandler(\n                    enabled = anchoredDraggableState.targetValue == 0,\n                    onBack = internalOnDismissRequest,\n                )\n                content()\n            },\n        )\n\n        LaunchedEffect(true) {\n            backgroundAlpha = 0.5f\n        }\n\n        LaunchedEffect(anchoredDraggableState) {\n            scope.launch { anchoredDraggableState.animateTo(0) }\n            snapshotFlow { anchoredDraggableState.currentValue }\n                .drop(1)\n                .filter { it == 1 }\n                .collectLatest { latestOnDismissRequest() }\n        }\n    }\n}\n\nprivate fun <T> AnchoredDraggableState<T>.preUpPostDownNestedScrollConnection() = object : NestedScrollConnection {\n    override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {\n        val delta = available.toFloat()\n        return if (delta < 0 && source == NestedScrollSource.UserInput) {\n            dispatchRawDelta(delta).toOffset()\n        } else {\n            Offset.Zero\n        }\n    }\n\n    override fun onPostScroll(\n        consumed: Offset,\n        available: Offset,\n        source: NestedScrollSource,\n    ): Offset {\n        return if (source == NestedScrollSource.UserInput) {\n            dispatchRawDelta(available.toFloat()).toOffset()\n        } else {\n            Offset.Zero\n        }\n    }\n\n    override suspend fun onPreFling(available: Velocity): Velocity {\n        val toFling = available.toFloat()\n        return if (toFling < 0 && offset > anchors.minAnchor()) {\n            settle(toFling)\n            available\n        } else {\n            Velocity.Zero\n        }\n    }\n\n    override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {\n        val toFling = available.toFloat()\n        return if (toFling > 0) {\n            settle(toFling)\n            available\n        } else {\n            Velocity.Zero\n        }\n    }\n\n    private fun Float.toOffset(): Offset = Offset(0f, this)\n\n    @JvmName(\"velocityToFloat\")\n    private fun Velocity.toFloat() = y\n\n    private fun Offset.toFloat(): Float = y\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/RepeatingIconButton.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport android.view.MotionEvent\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.IconButton\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.rememberUpdatedState\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.ExperimentalComposeUiApi\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.pointer.pointerInteropFilter\nimport kotlinx.coroutines.delay\n\n@OptIn(ExperimentalComposeUiApi::class)\n@Composable\nfun RepeatingIconButton(\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    maxDelayMillis: Long = 750,\n    minDelayMillis: Long = 5,\n    delayDecayFactor: Float = .25f,\n    content: @Composable () -> Unit,\n) {\n    val currentClickListener by rememberUpdatedState(onClick)\n    var pressed by remember { mutableStateOf(false) }\n\n    IconButton(\n        modifier = modifier.pointerInteropFilter {\n            pressed = when (it.action) {\n                MotionEvent.ACTION_DOWN -> true\n\n                else -> false\n            }\n\n            true\n        },\n        onClick = {},\n        enabled = enabled,\n        interactionSource = interactionSource,\n        content = content,\n    )\n\n    LaunchedEffect(pressed, enabled) {\n        var currentDelayMillis = maxDelayMillis\n\n        while (enabled && pressed) {\n            currentClickListener()\n            delay(currentDelayMillis)\n            currentDelayMillis =\n                (currentDelayMillis - (currentDelayMillis * delayDecayFactor))\n                    .toLong().coerceAtLeast(minDelayMillis)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/SliderItem.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Slider\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.TransformOrigin\nimport androidx.compose.ui.graphics.graphicsLayer\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.layout.layout\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.Constraints\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun SliderItem(\n    label: String,\n    value: Int,\n    valueText: String,\n    onChange: (Int) -> Unit,\n    max: Int,\n    modifier: Modifier = Modifier,\n    min: Int = 0,\n    icon: @Composable () -> Unit = {},\n) {\n    val haptic = LocalHapticFeedback.current\n\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        icon()\n        Column(modifier = Modifier.weight(0.5f)) {\n            Text(\n                text = label,\n                style = MaterialTheme.typography.bodyMedium,\n            )\n            Text(valueText)\n        }\n\n        Slider(\n            value = value.toFloat(),\n            onValueChange = {\n                val newValue = it.toInt()\n                if (newValue != value) {\n                    onChange(newValue)\n                    haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n                }\n            },\n            modifier = Modifier.weight(1.5f),\n            valueRange = min.toFloat()..max.toFloat(),\n            steps = max - min,\n        )\n    }\n}\n\n@Composable\nfun SliderItem(\n    label: String,\n    value: Float,\n    valueText: String,\n    onChange: (Float) -> Unit,\n    max: Float,\n    modifier: Modifier = Modifier,\n    steps: Int = 0,\n    min: Float = 0f,\n    icon: @Composable () -> Unit = {},\n) {\n    val haptic = LocalHapticFeedback.current\n\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        icon()\n        Column(modifier = Modifier.weight(0.5f)) {\n            Text(\n                text = label,\n                style = MaterialTheme.typography.bodyMedium,\n            )\n            Text(valueText)\n        }\n\n        Slider(\n            value = value,\n            onValueChange = {\n                val newValue = it\n                if (newValue != value) {\n                    onChange(newValue)\n                    haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n                }\n            },\n            modifier = Modifier.weight(1.5f),\n            valueRange = min..max,\n            steps = steps,\n        )\n    }\n}\n\n@Composable\nfun VerticalSliderItem(\n    label: String,\n    value: Int,\n    valueText: String,\n    onChange: (Int) -> Unit,\n    max: Int,\n    modifier: Modifier = Modifier,\n    min: Int = 0,\n    icon: @Composable () -> Unit = {},\n) {\n    val haptic = LocalHapticFeedback.current\n\n    Column(\n        modifier = modifier\n            .fillMaxHeight()\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraLarge),\n        horizontalAlignment = Alignment.CenterHorizontally,\n    ) {\n        icon()\n        VerticalSlider(\n            value = value,\n            min = min,\n            max = max,\n            onValueChange = {\n                haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n                onChange(it)\n            },\n            modifier = Modifier.weight(1f),\n        )\n        Column {\n            Text(\n                text = label,\n                style = MaterialTheme.typography.bodyMedium,\n            )\n            Text(valueText)\n        }\n    }\n}\n\n@Composable\nfun VerticalSlider(\n    value: Int,\n    min: Int,\n    max: Int,\n    onValueChange: (Int) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Slider(\n        modifier = modifier\n            .graphicsLayer {\n                rotationZ = 270f\n                transformOrigin = TransformOrigin(0f, 0f)\n            }\n            .layout { measurable, constraints ->\n                val placeable = measurable.measure(\n                    Constraints(\n                        minWidth = constraints.minHeight,\n                        maxWidth = constraints.maxHeight,\n                        minHeight = constraints.minWidth,\n                        maxHeight = constraints.maxWidth,\n                    ),\n                )\n                layout(placeable.height, placeable.width) {\n                    placeable.place(-placeable.width, 0)\n                }\n            }\n            .width(180.dp)\n            .height(50.dp),\n        value = value.toFloat(),\n        valueRange = min.toFloat()..max.toFloat(),\n        onValueChange = { onValueChange(it.toInt()) },\n    )\n}\n\n@Preview\n@Composable\nprivate fun PreviewVerticalSliderItem() {\n    VerticalSliderItem(\n        \"sex\",\n        1,\n        \"2\",\n        {},\n        5,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/SwitchPreference.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.selection.toggleable\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Switch\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.semantics.Role\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun SwitchPreference(\n    value: Boolean,\n    onValueChange: (Boolean) -> Unit,\n    content: @Composable () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .toggleable(value, true, Role.Switch, onValueChange)\n            .padding(horizontal = MaterialTheme.padding.large, vertical = MaterialTheme.padding.small)\n            .fillMaxWidth(),\n        horizontalArrangement = Arrangement.SpaceBetween,\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        content()\n        Switch(\n            checked = value,\n            onCheckedChange = null,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/player/components/TintedSliderItem.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.presentation.player.components\n\nimport androidx.annotation.IntRange\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.material3.MaterialTheme\nimport androidx.compose.material3.Slider\nimport androidx.compose.material3.SliderColors\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.Color\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.tooling.preview.Preview\nimport tachiyomi.presentation.core.components.material.padding\nimport kotlin.math.max\nimport kotlin.math.min\n\n@Composable\nfun TintedSliderItem(\n    label: String,\n    value: Int,\n    valueText: String,\n    onChange: (Int) -> Unit,\n    max: Int,\n    tint: Color,\n    modifier: Modifier = Modifier,\n    min: Int = 0,\n    icon: @Composable () -> Unit = {},\n) {\n    val haptic = LocalHapticFeedback.current\n\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        icon()\n        Column(modifier = Modifier.weight(0.5f)) {\n            Text(\n                text = label,\n                style = MaterialTheme.typography.bodyMedium,\n            )\n            Text(valueText)\n        }\n\n        TintedSlider(\n            value = value.toFloat(),\n            onValueChange = {\n                val newValue = it.toInt()\n                if (newValue != value) {\n                    onChange(newValue)\n                    haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n                }\n            },\n            modifier = Modifier.weight(1.5f),\n            valueRange = min.toFloat()..max.toFloat(),\n            steps = max - min,\n            tint = tint,\n        )\n    }\n}\n\n@Composable\nfun TintedSlider(\n    value: Float,\n    onValueChange: (Float) -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    valueRange: ClosedFloatingPointRange<Float> = 0f..1f,\n    @IntRange steps: Int = 0,\n    onValueChangeFinished: (() -> Unit)? = null,\n    tint: Color = MaterialTheme.colorScheme.primaryContainer,\n    interactionSource: MutableInteractionSource = MutableInteractionSource(),\n) {\n    Slider(\n        value = value,\n        onValueChange = onValueChange,\n        modifier = modifier,\n        enabled = enabled,\n        valueRange = valueRange,\n        steps = steps,\n        onValueChangeFinished = onValueChangeFinished,\n        colors = generateSliderColors(tint),\n        interactionSource = interactionSource,\n    )\n}\n\n@Preview\n@Composable\nprivate fun PreviewTintedSliderRed() {\n    TintedSlider(\n        0.5f,\n        {},\n        tint = Color.Red,\n    )\n}\n\n@Preview\n@Composable\nprivate fun PreviewTintedSliderItemRed() {\n    TintedSliderItem(\n        \"slideritem red\",\n        1,\n        \"1\",\n        {},\n        20,\n        tint = Color.Red,\n    )\n}\n\nfun generateSliderColors(baseColor: Color): SliderColors {\n    // Utility function to darken a color\n    fun darken(color: Color, factor: Float): Color {\n        val red = max((color.red * factor), 0f)\n        val green = max((color.green * factor), 0f)\n        val blue = max((color.blue * factor), 0f)\n        return Color(red, green, blue, color.alpha)\n    }\n\n    // Utility function to lighten a color\n    fun lighten(color: Color, factor: Float): Color {\n        val red = min((color.red + (1 - color.red) * factor), 255f)\n        val green = min((color.green + (1 - color.green) * factor), 255f)\n        val blue = min((color.blue + (1 - color.blue) * factor), 255f)\n        return Color(red, green, blue, color.alpha)\n    }\n\n    return SliderColors(\n        thumbColor = baseColor,\n        activeTrackColor = lighten(baseColor, 0.2f),\n        activeTickColor = lighten(baseColor, 0.4f),\n        inactiveTrackColor = darken(baseColor, 0.2f),\n        inactiveTickColor = darken(baseColor, 0.4f),\n        disabledThumbColor = baseColor.copy(alpha = 0.5f),\n        disabledActiveTrackColor = lighten(baseColor, 0.2f).copy(alpha = 0.5f),\n        disabledActiveTickColor = lighten(baseColor, 0.4f).copy(alpha = 0.5f),\n        disabledInactiveTrackColor = darken(baseColor, 0.2f).copy(alpha = 0.5f),\n        disabledInactiveTickColor = darken(baseColor, 0.4f).copy(alpha = 0.5f),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt",
    "content": "package eu.kanade.presentation.reader\n\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.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.widthIn\nimport androidx.compose.foundation.text.InlineTextContent\nimport androidx.compose.foundation.text.appendInlineContent\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material.icons.outlined.Info\nimport androidx.compose.material.icons.outlined.Warning\nimport androidx.compose.material3.CardColors\nimport androidx.compose.material3.CardDefaults\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedCard\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.Surface\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.Color\nimport androidx.compose.ui.text.Placeholder\nimport androidx.compose.ui.text.PlaceholderVerticalAlign\nimport androidx.compose.ui.text.buildAnnotatedString\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.data.database.models.manga.toDomainChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport kotlinx.collections.immutable.persistentMapOf\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.service.calculateChapterGap\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun ChapterTransition(\n    transition: ChapterTransition,\n    currChapterDownloaded: Boolean,\n    goingToChapterDownloaded: Boolean,\n) {\n    val currChapter = transition.from.chapter.toDomainChapter()\n    val goingToChapter = transition.to?.chapter?.toDomainChapter()\n\n    ProvideTextStyle(MaterialTheme.typography.bodyMedium) {\n        when (transition) {\n            is ChapterTransition.Prev -> {\n                TransitionText(\n                    topLabel = stringResource(MR.strings.transition_previous),\n                    topChapter = goingToChapter,\n                    topChapterDownloaded = goingToChapterDownloaded,\n                    bottomLabel = stringResource(MR.strings.transition_current),\n                    bottomChapter = currChapter,\n                    bottomChapterDownloaded = currChapterDownloaded,\n                    fallbackLabel = stringResource(MR.strings.transition_no_previous),\n                    chapterGap = calculateChapterGap(currChapter, goingToChapter),\n                )\n            }\n            is ChapterTransition.Next -> {\n                TransitionText(\n                    topLabel = stringResource(MR.strings.transition_finished),\n                    topChapter = currChapter,\n                    topChapterDownloaded = currChapterDownloaded,\n                    bottomLabel = stringResource(MR.strings.transition_next),\n                    bottomChapter = goingToChapter,\n                    bottomChapterDownloaded = goingToChapterDownloaded,\n                    fallbackLabel = stringResource(MR.strings.transition_no_next),\n                    chapterGap = calculateChapterGap(goingToChapter, currChapter),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun TransitionText(\n    topLabel: String,\n    topChapter: Chapter?,\n    topChapterDownloaded: Boolean,\n    bottomLabel: String,\n    bottomChapter: Chapter?,\n    bottomChapterDownloaded: Boolean,\n    fallbackLabel: String,\n    chapterGap: Int,\n) {\n    Column(\n        modifier = Modifier\n            .widthIn(max = 460.dp)\n            .fillMaxWidth(),\n    ) {\n        if (topChapter != null) {\n            ChapterText(\n                header = topLabel,\n                name = topChapter.name,\n                scanlator = topChapter.scanlator,\n                downloaded = topChapterDownloaded,\n            )\n\n            Spacer(Modifier.height(VerticalSpacerSize))\n        } else {\n            NoChapterNotification(\n                text = fallbackLabel,\n                modifier = Modifier.align(Alignment.CenterHorizontally),\n            )\n        }\n\n        if (bottomChapter != null) {\n            if (chapterGap > 0) {\n                ChapterGapWarning(\n                    gapCount = chapterGap,\n                    modifier = Modifier.align(Alignment.CenterHorizontally),\n                )\n            }\n\n            Spacer(Modifier.height(VerticalSpacerSize))\n\n            ChapterText(\n                header = bottomLabel,\n                name = bottomChapter.name,\n                scanlator = bottomChapter.scanlator,\n                downloaded = bottomChapterDownloaded,\n            )\n        } else {\n            NoChapterNotification(\n                text = fallbackLabel,\n                modifier = Modifier.align(Alignment.CenterHorizontally),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun NoChapterNotification(\n    text: String,\n    modifier: Modifier = Modifier,\n) {\n    OutlinedCard(\n        modifier = modifier,\n        colors = CardColor,\n    ) {\n        Row(\n            modifier = Modifier\n                .padding(horizontal = 16.dp, vertical = 12.dp),\n            horizontalArrangement = Arrangement.spacedBy(16.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Outlined.Info,\n                tint = MaterialTheme.colorScheme.primary,\n                contentDescription = null,\n            )\n\n            Text(\n                text = text,\n                style = MaterialTheme.typography.bodyMedium,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ChapterGapWarning(\n    gapCount: Int,\n    modifier: Modifier = Modifier,\n) {\n    OutlinedCard(\n        modifier = modifier,\n        colors = CardColor,\n    ) {\n        Row(\n            modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp),\n            horizontalArrangement = Arrangement.spacedBy(16.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Outlined.Warning,\n                tint = MaterialTheme.colorScheme.error,\n                contentDescription = null,\n            )\n\n            Text(\n                text = pluralStringResource(\n                    MR.plurals.missing_chapters_warning,\n                    count = gapCount,\n                    gapCount,\n                ),\n                style = MaterialTheme.typography.bodyMedium,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun ChapterHeaderText(\n    text: String,\n    modifier: Modifier = Modifier,\n) {\n    Text(\n        text = text,\n        modifier = modifier,\n        style = MaterialTheme.typography.titleMedium,\n    )\n}\n\n@Composable\nprivate fun ChapterText(\n    header: String,\n    name: String,\n    scanlator: String?,\n    downloaded: Boolean,\n) {\n    Column {\n        ChapterHeaderText(\n            text = header,\n            modifier = Modifier.padding(bottom = 4.dp),\n        )\n\n        Text(\n            text = buildAnnotatedString {\n                if (downloaded) {\n                    appendInlineContent(DOWNLOADED_ICON_ID)\n                    append(' ')\n                }\n                append(name)\n            },\n            fontSize = 20.sp,\n            maxLines = 5,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.titleLarge,\n            inlineContent = persistentMapOf(\n                DOWNLOADED_ICON_ID to InlineTextContent(\n                    Placeholder(\n                        width = 22.sp,\n                        height = 22.sp,\n                        placeholderVerticalAlign = PlaceholderVerticalAlign.Center,\n                    ),\n                ) {\n                    Icon(\n                        imageVector = Icons.Filled.CheckCircle,\n                        contentDescription = stringResource(MR.strings.label_downloaded),\n                    )\n                },\n            ),\n        )\n\n        scanlator?.let {\n            Text(\n                text = it,\n                modifier = Modifier\n                    .secondaryItemAlpha()\n                    .padding(top = 2.dp),\n                maxLines = 2,\n                overflow = TextOverflow.Ellipsis,\n                style = MaterialTheme.typography.bodySmall,\n            )\n        }\n    }\n}\n\nprivate val CardColor: CardColors\n    @Composable\n    get() = CardDefaults.outlinedCardColors(\n        containerColor = Color.Transparent,\n        contentColor = MaterialTheme.colorScheme.onSurface,\n    )\n\nprivate val VerticalSpacerSize = 24.dp\nprivate const val DOWNLOADED_ICON_ID = \"downloaded\"\n\nprivate fun previewChapter(name: String, scanlator: String, chapterNumber: Double) = Chapter.create().copy(\n    id = 0L,\n    mangaId = 0L,\n    url = \"\",\n    name = name,\n    scanlator = scanlator,\n    chapterNumber = chapterNumber,\n)\nprivate val FakeChapter = previewChapter(\n    name = \"Vol.1, Ch.1 - Fake Chapter Title\",\n    scanlator = \"Scanlator Name\",\n    chapterNumber = 1.0,\n)\nprivate val FakeGapChapter = previewChapter(\n    name = \"Vol.5, Ch.44 - Fake Gap Chapter Title\",\n    scanlator = \"Scanlator Name\",\n    chapterNumber = 44.0,\n)\nprivate val FakeChapterLongTitle = previewChapter(\n    name = \"Vol.1, Ch.0 - The Mundane Musings of a Metafictional Manga: A Chapter About a Chapter, Featuring\" +\n        \" an Absurdly Long Title and a Surprisingly Normal Day in the Lives of Our Heroes, as They Grapple with the \" +\n        \"Daily Challenges of Existence, from Paying Rent to Finding Love, All While Navigating the Strange World of \" +\n        \"Fictional Realities and Reality-Bending Fiction, Where the Fourth Wall is Always in Danger of Being Broken \" +\n        \"and the Line Between Author and Character is Forever Blurred.\",\n    scanlator = \"Long Long Funny Scanlator Sniper Group Name Reborn\",\n    chapterNumber = 1.0,\n)\n\n@PreviewLightDark\n@Composable\nprivate fun TransitionTextPreview() {\n    TachiyomiPreviewTheme {\n        Surface(modifier = Modifier.padding(48.dp)) {\n            ChapterTransition(\n                transition = ChapterTransition.Next(\n                    ReaderChapter(FakeChapter),\n                    ReaderChapter(FakeChapter),\n                ),\n                currChapterDownloaded = false,\n                goingToChapterDownloaded = true,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TransitionTextLongTitlePreview() {\n    TachiyomiPreviewTheme {\n        Surface(modifier = Modifier.padding(48.dp)) {\n            ChapterTransition(\n                transition = ChapterTransition.Next(\n                    ReaderChapter(FakeChapterLongTitle),\n                    ReaderChapter(FakeChapter),\n                ),\n                currChapterDownloaded = true,\n                goingToChapterDownloaded = true,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TransitionTextWithGapPreview() {\n    TachiyomiPreviewTheme {\n        Surface(modifier = Modifier.padding(48.dp)) {\n            ChapterTransition(\n                transition = ChapterTransition.Next(\n                    ReaderChapter(FakeChapter),\n                    ReaderChapter(FakeGapChapter),\n                ),\n                currChapterDownloaded = true,\n                goingToChapterDownloaded = false,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TransitionTextNoNextPreview() {\n    TachiyomiPreviewTheme {\n        Surface(modifier = Modifier.padding(48.dp)) {\n            ChapterTransition(\n                transition = ChapterTransition.Next(ReaderChapter(FakeChapter), null),\n                currChapterDownloaded = true,\n                goingToChapterDownloaded = false,\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TransitionTextNoPreviousPreview() {\n    TachiyomiPreviewTheme {\n        Surface(modifier = Modifier.padding(48.dp)) {\n            ChapterTransition(\n                transition = ChapterTransition.Prev(ReaderChapter(FakeChapter), null),\n                currChapterDownloaded = true,\n                goingToChapterDownloaded = false,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/DisplayRefreshHost.kt",
    "content": "package eu.kanade.presentation.reader\n\nimport androidx.compose.foundation.Canvas\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.Stable\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.graphics.Color\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport kotlinx.coroutines.delay\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.milliseconds\n\n@Stable\nclass DisplayRefreshHost {\n\n    internal var currentDisplayRefresh by mutableStateOf(false)\n    private val readerPreferences = Injekt.get<ReaderPreferences>()\n\n    internal val flashMillis = readerPreferences.flashDurationMillis()\n    internal val flashMode = readerPreferences.flashColor()\n\n    internal val flashIntervalPref = readerPreferences.flashPageInterval()\n\n    // Internal State for Flash\n    private var flashInterval = flashIntervalPref.get()\n    private var timesCalled = 0\n\n    fun flash() {\n        if (timesCalled % flashInterval == 0) {\n            currentDisplayRefresh = true\n        }\n        timesCalled += 1\n    }\n\n    fun setInterval(interval: Int) {\n        flashInterval = interval\n        timesCalled = 0\n    }\n}\n\n@Composable\nfun DisplayRefreshHost(\n    hostState: DisplayRefreshHost,\n    modifier: Modifier = Modifier,\n) {\n    val currentDisplayRefresh = hostState.currentDisplayRefresh\n    val refreshDuration by hostState.flashMillis.collectAsState()\n    val flashMode by hostState.flashMode.collectAsState()\n    val flashInterval by hostState.flashIntervalPref.collectAsState()\n\n    var currentColor by remember { mutableStateOf<Color?>(null) }\n\n    LaunchedEffect(currentDisplayRefresh) {\n        if (!currentDisplayRefresh) {\n            currentColor = null\n            return@LaunchedEffect\n        }\n\n        val refreshDurationHalf = refreshDuration.milliseconds / 2\n        currentColor = if (flashMode == ReaderPreferences.FlashColor.BLACK) {\n            Color.Black\n        } else {\n            Color.White\n        }\n        delay(refreshDurationHalf)\n        if (flashMode == ReaderPreferences.FlashColor.WHITE_BLACK) {\n            currentColor = Color.Black\n        }\n        delay(refreshDurationHalf)\n        hostState.currentDisplayRefresh = false\n    }\n\n    LaunchedEffect(flashInterval) {\n        hostState.setInterval(flashInterval)\n    }\n\n    Canvas(\n        modifier = modifier.fillMaxSize(),\n    ) {\n        currentColor?.let { drawRect(it) }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt",
    "content": "package eu.kanade.presentation.reader\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\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.tooling.preview.PreviewLightDark\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.entries.manga.model.readerOrientation\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport eu.kanade.presentation.reader.components.ModeSelectionDialog\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.SettingsIconGrid\nimport tachiyomi.presentation.core.components.material.IconToggleButton\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - ReaderOrientation.DEFAULT\n\n@Composable\nfun OrientationSelectDialog(\n    onDismissRequest: () -> Unit,\n    screenModel: ReaderSettingsScreenModel,\n    onChange: (StringResource) -> Unit,\n) {\n    val manga by screenModel.mangaFlow.collectAsState()\n    val orientation = remember(manga) {\n        ReaderOrientation.fromPreference(\n            manga?.readerOrientation?.toInt(),\n        )\n    }\n\n    AdaptiveSheet(onDismissRequest = onDismissRequest) {\n        DialogContent(\n            orientation = orientation,\n            onChangeOrientation = {\n                screenModel.onChangeOrientation(it)\n                onChange(it.stringRes)\n                onDismissRequest()\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun DialogContent(\n    orientation: ReaderOrientation,\n    onChangeOrientation: (ReaderOrientation) -> Unit,\n) {\n    var selected by remember { mutableStateOf(orientation) }\n\n    ModeSelectionDialog(\n        onUseDefault = {\n            onChangeOrientation(\n                ReaderOrientation.DEFAULT,\n            )\n        }.takeIf { orientation != ReaderOrientation.DEFAULT },\n        onApply = { onChangeOrientation(selected) },\n    ) {\n        SettingsIconGrid(MR.strings.rotation_type) {\n            items(ReaderOrientationsWithoutDefault) { mode ->\n                IconToggleButton(\n                    checked = mode == selected,\n                    onCheckedChange = {\n                        selected = (mode)\n                    },\n                    modifier = Modifier.fillMaxWidth(),\n                    imageVector = mode.icon,\n                    title = stringResource(mode.stringRes),\n                )\n            }\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun DialogContentPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            Column {\n                DialogContent(\n                    orientation = ReaderOrientation.DEFAULT,\n                    onChangeOrientation = {},\n                )\n\n                DialogContent(\n                    orientation = ReaderOrientation.FREE,\n                    onChangeOrientation = {},\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/PageIndicatorText.kt",
    "content": "package eu.kanade.presentation.reader\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.drawscope.Stroke\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\n\n@Composable\nfun PageIndicatorText(\n    currentPage: Int,\n    totalPages: Int,\n) {\n    if (currentPage <= 0 || totalPages <= 0) return\n\n    val text = \"$currentPage / $totalPages\"\n\n    val style = TextStyle(\n        color = Color(235, 235, 235),\n        fontSize = MaterialTheme.typography.bodySmall.fontSize,\n        fontWeight = FontWeight.Bold,\n        letterSpacing = 1.sp,\n    )\n    val strokeStyle = style.copy(\n        color = Color(45, 45, 45),\n        drawStyle = Stroke(width = 4f),\n    )\n\n    Box(\n        contentAlignment = Alignment.Center,\n    ) {\n        Text(\n            text = text,\n            style = strokeStyle,\n        )\n\n        Text(\n            text = text,\n            style = style,\n        )\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun PageIndicatorTextPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            PageIndicatorText(currentPage = 10, totalPages = 69)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/ReaderContentOverlay.kt",
    "content": "package eu.kanade.presentation.reader\n\nimport androidx.annotation.ColorInt\nimport androidx.annotation.IntRange\nimport androidx.compose.foundation.Canvas\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.BlendMode\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.graphicsLayer\nimport kotlin.math.abs\n\n@Composable\nfun ReaderContentOverlay(\n    @IntRange(from = -100, to = 100) brightness: Int,\n    @ColorInt color: Int?,\n    colorBlendMode: BlendMode?,\n    modifier: Modifier = Modifier,\n) {\n    if (brightness < 0) {\n        val brightnessAlpha = remember(brightness) {\n            abs(brightness) / 100f\n        }\n\n        Canvas(\n            modifier = modifier\n                .fillMaxSize()\n                .graphicsLayer {\n                    alpha = brightnessAlpha\n                },\n        ) {\n            drawRect(Color.Black)\n        }\n    }\n\n    if (color != null) {\n        Canvas(\n            modifier = modifier\n                .fillMaxSize(),\n        ) {\n            drawRect(\n                color = Color(color),\n                blendMode = colorBlendMode ?: BlendMode.SrcOver,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt",
    "content": "package eu.kanade.presentation.reader\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ContentCopy\nimport androidx.compose.material.icons.outlined.Photo\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material.icons.outlined.Share\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ActionButton\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ReaderPageActionsDialog(\n    onDismissRequest: () -> Unit,\n    onSetAsCover: () -> Unit,\n    onShare: (Boolean) -> Unit,\n    onSave: () -> Unit,\n) {\n    var showSetCoverDialog by remember { mutableStateOf(false) }\n\n    AdaptiveSheet(onDismissRequest = onDismissRequest) {\n        Row(\n            modifier = Modifier.padding(vertical = 16.dp),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            ActionButton(\n                modifier = Modifier.weight(1f),\n                title = stringResource(MR.strings.set_as_cover),\n                icon = Icons.Outlined.Photo,\n                onClick = { showSetCoverDialog = true },\n            )\n            ActionButton(\n                modifier = Modifier.weight(1f),\n                title = stringResource(MR.strings.action_copy_to_clipboard),\n                icon = Icons.Outlined.ContentCopy,\n                onClick = {\n                    onShare(true)\n                    onDismissRequest()\n                },\n            )\n            ActionButton(\n                modifier = Modifier.weight(1f),\n                title = stringResource(MR.strings.action_share),\n                icon = Icons.Outlined.Share,\n                onClick = {\n                    onShare(false)\n                    onDismissRequest()\n                },\n            )\n            ActionButton(\n                modifier = Modifier.weight(1f),\n                title = stringResource(MR.strings.action_save),\n                icon = Icons.Outlined.Save,\n                onClick = {\n                    onSave()\n                    onDismissRequest()\n                },\n            )\n        }\n    }\n\n    if (showSetCoverDialog) {\n        SetCoverDialog(\n            onConfirm = {\n                onSetAsCover()\n                showSetCoverDialog = false\n            },\n            onDismiss = { showSetCoverDialog = false },\n        )\n    }\n}\n\n@Composable\nprivate fun SetCoverDialog(\n    onConfirm: () -> Unit,\n    onDismiss: () -> Unit,\n) {\n    AlertDialog(\n        text = {\n            Text(stringResource(MR.strings.confirm_set_image_as_cover))\n        },\n        confirmButton = {\n            TextButton(onClick = onConfirm) {\n                Text(stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismiss) {\n                Text(stringResource(MR.strings.action_cancel))\n            }\n        },\n        onDismissRequest = onDismiss,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt",
    "content": "package eu.kanade.presentation.reader\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.lazy.grid.items\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\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.graphics.vector.ImageVector\nimport androidx.compose.ui.res.vectorResource\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.entries.manga.model.readingMode\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport eu.kanade.presentation.reader.components.ModeSelectionDialog\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.SettingsIconGrid\nimport tachiyomi.presentation.core.components.material.IconToggleButton\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAULT\n\n@Composable\nfun ReadingModeSelectDialog(\n    onDismissRequest: () -> Unit,\n    screenModel: ReaderSettingsScreenModel,\n    onChange: (StringResource) -> Unit,\n) {\n    val manga by screenModel.mangaFlow.collectAsState()\n    val readingMode = remember(manga) {\n        ReadingMode.fromPreference(\n            manga?.readingMode?.toInt(),\n        )\n    }\n\n    AdaptiveSheet(onDismissRequest = onDismissRequest) {\n        DialogContent(\n            readingMode = readingMode,\n            onChangeReadingMode = {\n                screenModel.onChangeReadingMode(it)\n                onChange(it.stringRes)\n                onDismissRequest()\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun DialogContent(\n    readingMode: ReadingMode,\n    onChangeReadingMode: (ReadingMode) -> Unit,\n) {\n    var selected by remember { mutableStateOf(readingMode) }\n\n    ModeSelectionDialog(\n        onUseDefault = { onChangeReadingMode(ReadingMode.DEFAULT) }.takeIf { readingMode != ReadingMode.DEFAULT },\n        onApply = { onChangeReadingMode(selected) },\n    ) {\n        SettingsIconGrid(MR.strings.pref_category_reading_mode) {\n            items(ReadingModesWithoutDefault) { mode ->\n                IconToggleButton(\n                    checked = mode == selected,\n                    onCheckedChange = {\n                        selected = (mode)\n                    },\n                    modifier = Modifier.fillMaxWidth(),\n                    imageVector = ImageVector.vectorResource(mode.iconRes),\n                    title = stringResource(mode.stringRes),\n                )\n            }\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun DialogContentPreview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            Column {\n                DialogContent(\n                    readingMode = ReadingMode.DEFAULT,\n                    onChangeReadingMode = {},\n                )\n\n                DialogContent(\n                    readingMode = ReadingMode.LEFT_TO_RIGHT,\n                    onChangeReadingMode = {},\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt",
    "content": "package eu.kanade.presentation.reader.appbars\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun BottomReaderBar(\n    backgroundColor: Color,\n    readingMode: ReadingMode,\n    onClickReadingMode: () -> Unit,\n    orientation: ReaderOrientation,\n    onClickOrientation: () -> Unit,\n    cropEnabled: Boolean,\n    onClickCropBorder: () -> Unit,\n    onClickSettings: () -> Unit,\n) {\n    Row(\n        modifier = Modifier\n            .fillMaxWidth()\n            .background(backgroundColor)\n            .padding(8.dp),\n        horizontalArrangement = Arrangement.SpaceEvenly,\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        IconButton(onClick = onClickReadingMode) {\n            Icon(\n                painter = painterResource(readingMode.iconRes),\n                contentDescription = stringResource(MR.strings.viewer),\n            )\n        }\n\n        IconButton(onClick = onClickOrientation) {\n            Icon(\n                imageVector = orientation.icon,\n                contentDescription = stringResource(MR.strings.rotation_type),\n            )\n        }\n\n        IconButton(onClick = onClickCropBorder) {\n            Icon(\n                painter = painterResource(if (cropEnabled) R.drawable.ic_crop_24dp else R.drawable.ic_crop_off_24dp),\n                contentDescription = stringResource(MR.strings.pref_crop_borders),\n            )\n        }\n\n        IconButton(onClick = onClickSettings) {\n            Icon(\n                imageVector = Icons.Outlined.Settings,\n                contentDescription = stringResource(MR.strings.action_settings),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt",
    "content": "package eu.kanade.presentation.reader.appbars\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutVertically\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.systemBarsPadding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Bookmark\nimport androidx.compose.material.icons.outlined.BookmarkBorder\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.IntOffset\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.reader.components.ChapterNavigator\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport eu.kanade.tachiyomi.ui.reader.viewer.Viewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\nprivate val animationSpec = tween<IntOffset>(200)\n\n@Composable\nfun ReaderAppBars(\n    visible: Boolean,\n    fullscreen: Boolean,\n\n    mangaTitle: String?,\n    chapterTitle: String?,\n    navigateUp: () -> Unit,\n    onClickTopAppBar: () -> Unit,\n    bookmarked: Boolean,\n    onToggleBookmarked: () -> Unit,\n    onOpenInWebView: (() -> Unit)?,\n    onOpenInBrowser: (() -> Unit)?,\n    onShare: (() -> Unit)?,\n\n    viewer: Viewer?,\n    onNextChapter: () -> Unit,\n    enabledNext: Boolean,\n    onPreviousChapter: () -> Unit,\n    enabledPrevious: Boolean,\n    currentPage: Int,\n    totalPages: Int,\n    onPageIndexChange: (Int) -> Unit,\n\n    readingMode: ReadingMode,\n    onClickReadingMode: () -> Unit,\n    orientation: ReaderOrientation,\n    onClickOrientation: () -> Unit,\n    cropEnabled: Boolean,\n    onClickCropBorder: () -> Unit,\n    onClickSettings: () -> Unit,\n) {\n    val isRtl = viewer is R2LPagerViewer\n    val backgroundColor = MaterialTheme.colorScheme\n        .surfaceColorAtElevation(3.dp)\n        .copy(alpha = if (isSystemInDarkTheme()) 0.9f else 0.95f)\n\n    val modifierWithInsetsPadding = if (fullscreen) {\n        Modifier.systemBarsPadding()\n    } else {\n        Modifier\n    }\n\n    Column(\n        modifier = Modifier.fillMaxHeight(),\n        verticalArrangement = Arrangement.SpaceBetween,\n    ) {\n        AnimatedVisibility(\n            visible = visible,\n            enter = slideInVertically(\n                initialOffsetY = { -it },\n                animationSpec = animationSpec,\n            ),\n            exit = slideOutVertically(\n                targetOffsetY = { -it },\n                animationSpec = animationSpec,\n            ),\n        ) {\n            AppBar(\n                modifier = modifierWithInsetsPadding\n                    .clickable(onClick = onClickTopAppBar),\n                backgroundColor = backgroundColor,\n                title = mangaTitle,\n                subtitle = chapterTitle,\n                navigateUp = navigateUp,\n                actions = {\n                    AppBarActions(\n                        actions = persistentListOf<AppBar.AppBarAction>().builder()\n                            .apply {\n                                add(\n                                    AppBar.Action(\n                                        title = stringResource(\n                                            if (bookmarked) {\n                                                MR.strings.action_remove_bookmark\n                                            } else {\n                                                MR.strings.action_bookmark\n                                            },\n                                        ),\n                                        icon = if (bookmarked) {\n                                            Icons.Outlined.Bookmark\n                                        } else {\n                                            Icons.Outlined.BookmarkBorder\n                                        },\n                                        onClick = onToggleBookmarked,\n                                    ),\n                                )\n                                onOpenInWebView?.let {\n                                    add(\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_open_in_web_view),\n                                            onClick = it,\n                                        ),\n                                    )\n                                }\n                                onOpenInBrowser?.let {\n                                    add(\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_open_in_browser),\n                                            onClick = it,\n                                        ),\n                                    )\n                                }\n                                onShare?.let {\n                                    add(\n                                        AppBar.OverflowAction(\n                                            title = stringResource(MR.strings.action_share),\n                                            onClick = it,\n                                        ),\n                                    )\n                                }\n                            }\n                            .build(),\n                    )\n                },\n            )\n        }\n\n        Spacer(modifier = Modifier.weight(1f))\n\n        AnimatedVisibility(\n            visible = visible,\n            enter = slideInVertically(\n                initialOffsetY = { it },\n                animationSpec = animationSpec,\n            ),\n            exit = slideOutVertically(\n                targetOffsetY = { it },\n                animationSpec = animationSpec,\n            ),\n        ) {\n            Column(\n                modifier = modifierWithInsetsPadding,\n                verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                ChapterNavigator(\n                    isRtl = isRtl,\n                    onNextChapter = onNextChapter,\n                    enabledNext = enabledNext,\n                    onPreviousChapter = onPreviousChapter,\n                    enabledPrevious = enabledPrevious,\n                    currentPage = currentPage,\n                    totalPages = totalPages,\n                    onPageIndexChange = onPageIndexChange,\n                )\n                BottomReaderBar(\n                    backgroundColor = backgroundColor,\n                    readingMode = readingMode,\n                    onClickReadingMode = onClickReadingMode,\n                    orientation = orientation,\n                    onClickOrientation = onClickOrientation,\n                    cropEnabled = cropEnabled,\n                    onClickCropBorder = onClickCropBorder,\n                    onClickSettings = onClickSettings,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt",
    "content": "package eu.kanade.presentation.reader.components\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.interaction.collectIsDraggedAsState\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Box\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.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.SkipNext\nimport androidx.compose.material.icons.outlined.SkipPrevious\nimport androidx.compose.material3.FilledIconButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButtonDefaults\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.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.util.isTabletUi\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Slider\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ChapterNavigator(\n    isRtl: Boolean,\n    onNextChapter: () -> Unit,\n    enabledNext: Boolean,\n    onPreviousChapter: () -> Unit,\n    enabledPrevious: Boolean,\n    currentPage: Int,\n    totalPages: Int,\n    onPageIndexChange: (Int) -> Unit,\n) {\n    val isTabletUi = isTabletUi()\n    val horizontalPadding = if (isTabletUi) 24.dp else 8.dp\n    val layoutDirection = if (isRtl) LayoutDirection.Rtl else LayoutDirection.Ltr\n    val haptic = LocalHapticFeedback.current\n\n    // Match with toolbar background color set in ReaderActivity\n    val backgroundColor = MaterialTheme.colorScheme\n        .surfaceColorAtElevation(3.dp)\n        .copy(alpha = if (isSystemInDarkTheme()) 0.9f else 0.95f)\n    val buttonColor = IconButtonDefaults.filledIconButtonColors(\n        containerColor = backgroundColor,\n        disabledContainerColor = backgroundColor,\n    )\n\n    // We explicitly handle direction based on the reader viewer rather than the system direction\n    CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(horizontal = horizontalPadding),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            FilledIconButton(\n                enabled = if (isRtl) enabledNext else enabledPrevious,\n                onClick = if (isRtl) onNextChapter else onPreviousChapter,\n                colors = buttonColor,\n            ) {\n                Icon(\n                    imageVector = Icons.Outlined.SkipPrevious,\n                    contentDescription = stringResource(\n                        if (isRtl) MR.strings.action_next_chapter else MR.strings.action_previous_chapter,\n                    ),\n                )\n            }\n\n            if (totalPages > 1) {\n                CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {\n                    Row(\n                        modifier = Modifier\n                            .weight(1f)\n                            .clip(RoundedCornerShape(24.dp))\n                            .background(backgroundColor)\n                            .padding(horizontal = 16.dp),\n                        verticalAlignment = Alignment.CenterVertically,\n                    ) {\n                        Box(contentAlignment = Alignment.CenterEnd) {\n                            Text(text = currentPage.toString())\n                            // Taking up full length so the slider doesn't shift when 'currentPage' length changes\n                            Text(text = totalPages.toString(), color = Color.Transparent)\n                        }\n\n                        val interactionSource = remember { MutableInteractionSource() }\n                        val sliderDragged by interactionSource.collectIsDraggedAsState()\n                        LaunchedEffect(currentPage) {\n                            if (sliderDragged) {\n                                haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n                            }\n                        }\n\n                        Slider(\n                            modifier = Modifier\n                                .weight(1f)\n                                .padding(horizontal = 8.dp),\n                            value = currentPage,\n                            valueRange = 1..totalPages,\n                            onValueChange = f@{\n                                if (it == currentPage) return@f\n                                onPageIndexChange(it - 1)\n                            },\n                            interactionSource = interactionSource,\n                        )\n\n                        Text(text = totalPages.toString())\n                    }\n                }\n            } else {\n                Spacer(Modifier.weight(1f))\n            }\n\n            FilledIconButton(\n                enabled = if (isRtl) enabledPrevious else enabledNext,\n                onClick = if (isRtl) onPreviousChapter else onNextChapter,\n                colors = buttonColor,\n            ) {\n                Icon(\n                    imageVector = Icons.Outlined.SkipNext,\n                    contentDescription = stringResource(\n                        if (isRtl) MR.strings.action_previous_chapter else MR.strings.action_next_chapter,\n                    ),\n                )\n            }\n        }\n    }\n}\n\n@Preview\n@Composable\nprivate fun ChapterNavigatorPreview() {\n    var currentPage by remember { mutableIntStateOf(1) }\n    TachiyomiPreviewTheme {\n        ChapterNavigator(\n            isRtl = false,\n            onNextChapter = {},\n            enabledNext = true,\n            onPreviousChapter = {},\n            enabledPrevious = true,\n            currentPage = currentPage,\n            totalPages = 10,\n            onPageIndexChange = { currentPage = (it + 1) },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt",
    "content": "package eu.kanade.presentation.reader.components\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.Spacer\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Check\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.SettingsItemsPaddings\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ModeSelectionDialog(\n    onApply: () -> Unit,\n    onUseDefault: (() -> Unit)? = null,\n    content: @Composable () -> Unit,\n) {\n    Box(modifier = Modifier.padding(vertical = 16.dp)) {\n        Column {\n            content()\n\n            Row(\n                modifier = Modifier.padding(\n                    horizontal = SettingsItemsPaddings.Horizontal,\n                ),\n            ) {\n                onUseDefault?.let {\n                    OutlinedButton(onClick = it) {\n                        Text(text = stringResource(MR.strings.action_revert_to_default))\n                    }\n                }\n\n                Spacer(modifier = Modifier.weight(1f))\n\n                FilledTonalButton(\n                    onClick = onApply,\n                ) {\n                    Row(\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                        verticalAlignment = Alignment.CenterVertically,\n                    ) {\n                        Icon(\n                            imageVector = Icons.Outlined.Check,\n                            contentDescription = null,\n                        )\n                        Text(text = stringResource(MR.strings.action_apply))\n                    }\n                }\n            }\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun Preview() {\n    TachiyomiPreviewTheme {\n        Surface {\n            Column {\n                ModeSelectionDialog(\n                    onApply = {},\n                    onUseDefault = {},\n                ) {\n                    Text(\"Dummy content\")\n                }\n\n                ModeSelectionDialog(\n                    onApply = {},\n                ) {\n                    Text(\"Dummy content without default\")\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt",
    "content": "package eu.kanade.presentation.reader.settings\n\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.core.graphics.alpha\nimport androidx.core.graphics.blue\nimport androidx.core.graphics.green\nimport androidx.core.graphics.red\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences.Companion.ColorFilterMode\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.SettingsChipRow\nimport tachiyomi.presentation.core.components.SliderItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\n\n@Composable\ninternal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) {\n    val customBrightness by screenModel.preferences.customBrightness().collectAsState()\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_custom_brightness),\n        pref = screenModel.preferences.customBrightness(),\n    )\n\n    /**\n     * Sets the brightness of the screen. Range is [-75, 100].\n     * From -75 to -1 a semi-transparent black view is shown at the top with the minimum brightness.\n     * From 1 to 100 it sets that value as brightness.\n     * 0 sets system brightness and hides the overlay.\n     */\n    if (customBrightness) {\n        val customBrightnessValue by screenModel.preferences.customBrightnessValue().collectAsState()\n        SliderItem(\n            value = customBrightnessValue,\n            valueRange = -75..100,\n            steps = 0,\n            label = stringResource(MR.strings.pref_custom_brightness),\n            onChange = { screenModel.preferences.customBrightnessValue().set(it) },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n    }\n\n    val colorFilter by screenModel.preferences.colorFilter().collectAsState()\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_custom_color_filter),\n        pref = screenModel.preferences.colorFilter(),\n    )\n    if (colorFilter) {\n        val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState()\n        SliderItem(\n            value = colorFilterValue.red,\n            valueRange = 0..255,\n            steps = 0,\n            label = stringResource(MR.strings.color_filter_r_value),\n            onChange = { newRValue ->\n                screenModel.preferences.colorFilterValue().getAndSet {\n                    getColorValue(it, newRValue, RED_MASK, 16)\n                }\n            },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n        SliderItem(\n            value = colorFilterValue.green,\n            valueRange = 0..255,\n            steps = 0,\n            label = stringResource(MR.strings.color_filter_g_value),\n            onChange = { newGValue ->\n                screenModel.preferences.colorFilterValue().getAndSet {\n                    getColorValue(it, newGValue, GREEN_MASK, 8)\n                }\n            },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n        SliderItem(\n            value = colorFilterValue.blue,\n            valueRange = 0..255,\n            steps = 0,\n            label = stringResource(MR.strings.color_filter_b_value),\n            onChange = { newBValue ->\n                screenModel.preferences.colorFilterValue().getAndSet {\n                    getColorValue(it, newBValue, BLUE_MASK, 0)\n                }\n            },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n        SliderItem(\n            value = colorFilterValue.alpha,\n            valueRange = 0..255,\n            steps = 0,\n            label = stringResource(MR.strings.color_filter_a_value),\n            onChange = { newAValue ->\n                screenModel.preferences.colorFilterValue().getAndSet {\n                    getColorValue(it, newAValue, ALPHA_MASK, 24)\n                }\n            },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n\n        val colorFilterMode by screenModel.preferences.colorFilterMode().collectAsState()\n        SettingsChipRow(MR.strings.pref_color_filter_mode) {\n            ColorFilterMode.mapIndexed { index, it ->\n                FilterChip(\n                    selected = colorFilterMode == index,\n                    onClick = { screenModel.preferences.colorFilterMode().set(index) },\n                    label = { Text(stringResource(it.first)) },\n                )\n            }\n        }\n    }\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_grayscale),\n        pref = screenModel.preferences.grayscale(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_inverted_colors),\n        pref = screenModel.preferences.invertedColors(),\n    )\n}\n\nprivate fun getColorValue(currentColor: Int, color: Int, mask: Long, bitShift: Int): Int {\n    return (color shl bitShift) or (currentColor and mask.inv().toInt())\n}\nprivate const val ALPHA_MASK: Long = 0xFF000000\nprivate const val RED_MASK: Long = 0x00FF0000\nprivate const val GREEN_MASK: Long = 0x0000FF00\nprivate const val BLUE_MASK: Long = 0x000000FF\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt",
    "content": "package eu.kanade.presentation.reader.settings\n\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.SettingsChipRow\nimport tachiyomi.presentation.core.components.SliderItem\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\n\nprivate val themes = listOf(\n    MR.strings.black_background to 1,\n    MR.strings.gray_background to 2,\n    MR.strings.white_background to 0,\n    MR.strings.automatic_background to 3,\n)\n\nprivate val flashColors = listOf(\n    MR.strings.pref_flash_style_black to ReaderPreferences.FlashColor.BLACK,\n    MR.strings.pref_flash_style_white to ReaderPreferences.FlashColor.WHITE,\n    MR.strings.pref_flash_style_white_black to ReaderPreferences.FlashColor.WHITE_BLACK,\n)\n\n@Composable\ninternal fun ColumnScope.GeneralPage(screenModel: ReaderSettingsScreenModel) {\n    val readerTheme by screenModel.preferences.readerTheme().collectAsState()\n\n    val flashPageState by screenModel.preferences.flashOnPageChange().collectAsState()\n\n    val flashMillisPref = screenModel.preferences.flashDurationMillis()\n    val flashMillis by flashMillisPref.collectAsState()\n\n    val flashIntervalPref = screenModel.preferences.flashPageInterval()\n    val flashInterval by flashIntervalPref.collectAsState()\n\n    val flashColorPref = screenModel.preferences.flashColor()\n    val flashColor by flashColorPref.collectAsState()\n\n    SettingsChipRow(MR.strings.pref_reader_theme) {\n        themes.map { (labelRes, value) ->\n            FilterChip(\n                selected = readerTheme == value,\n                onClick = { screenModel.preferences.readerTheme().set(value) },\n                label = { Text(stringResource(labelRes)) },\n            )\n        }\n    }\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_show_page_number),\n        pref = screenModel.preferences.showPageNumber(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_fullscreen),\n        pref = screenModel.preferences.fullscreen(),\n    )\n\n    if (screenModel.hasDisplayCutout && screenModel.preferences.fullscreen().get()) {\n        CheckboxItem(\n            label = stringResource(MR.strings.pref_cutout_short),\n            pref = screenModel.preferences.cutoutShort(),\n        )\n    }\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_keep_screen_on),\n        pref = screenModel.preferences.keepScreenOn(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_read_with_long_tap),\n        pref = screenModel.preferences.readWithLongTap(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_always_show_chapter_transition),\n        pref = screenModel.preferences.alwaysShowChapterTransition(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_page_transitions),\n        pref = screenModel.preferences.pageTransitions(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_flash_page),\n        pref = screenModel.preferences.flashOnPageChange(),\n    )\n    if (flashPageState) {\n        SliderItem(\n            value = flashMillis / ReaderPreferences.MILLI_CONVERSION,\n            valueRange = 1..15,\n            label = stringResource(MR.strings.pref_flash_duration),\n            valueText = stringResource(MR.strings.pref_flash_duration_summary, flashMillis),\n            onChange = { flashMillisPref.set(it * ReaderPreferences.MILLI_CONVERSION) },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n        SliderItem(\n            value = flashInterval,\n            valueRange = 1..10,\n            label = stringResource(MR.strings.pref_flash_page_interval),\n            valueText = pluralStringResource(MR.plurals.pref_pages, flashInterval, flashInterval),\n            onChange = {\n                flashIntervalPref.set(it)\n            },\n            pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n        )\n        SettingsChipRow(MR.strings.pref_flash_with) {\n            flashColors.map { (labelRes, value) ->\n                FilterChip(\n                    selected = flashColor == value,\n                    onClick = { flashColorPref.set(value) },\n                    label = { Text(stringResource(labelRes)) },\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt",
    "content": "package eu.kanade.presentation.reader.settings\n\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.heightIn\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalView\nimport androidx.compose.ui.window.DialogWindowProvider\nimport eu.kanade.presentation.components.TabbedDialog\nimport eu.kanade.presentation.components.TabbedDialogPaddings\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ReaderSettingsDialog(\n    onDismissRequest: () -> Unit,\n    onShowMenus: () -> Unit,\n    onHideMenus: () -> Unit,\n    screenModel: ReaderSettingsScreenModel,\n) {\n    val tabTitles = persistentListOf(\n        stringResource(MR.strings.pref_category_reading_mode),\n        stringResource(MR.strings.pref_category_general),\n        stringResource(MR.strings.custom_filter),\n    )\n    val pagerState = rememberPagerState { tabTitles.size }\n\n    BoxWithConstraints {\n        TabbedDialog(\n            modifier = Modifier.heightIn(max = maxHeight * 0.75f),\n            onDismissRequest = {\n                onDismissRequest()\n                onShowMenus()\n            },\n            tabTitles = tabTitles,\n            pagerState = pagerState,\n        ) { page ->\n            val window = (LocalView.current.parent as? DialogWindowProvider)?.window\n\n            LaunchedEffect(pagerState.currentPage) {\n                if (pagerState.currentPage == 2) {\n                    window?.setDimAmount(0f)\n                    onHideMenus()\n                } else {\n                    window?.setDimAmount(0.5f)\n                    onShowMenus()\n                }\n            }\n\n            Column(\n                modifier = Modifier\n                    .padding(vertical = TabbedDialogPaddings.Vertical)\n                    .verticalScroll(rememberScrollState()),\n            ) {\n                when (page) {\n                    0 -> ReadingModePage(screenModel)\n                    1 -> GeneralPage(screenModel)\n                    2 -> ColorFilterPage(screenModel)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt",
    "content": "package eu.kanade.presentation.reader.settings\n\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport eu.kanade.domain.entries.manga.model.readerOrientation\nimport eu.kanade.domain.entries.manga.model.readingMode\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.HeadingItem\nimport tachiyomi.presentation.core.components.SettingsChipRow\nimport tachiyomi.presentation.core.components.SliderItem\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport java.text.NumberFormat\n\n@Composable\ninternal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) {\n    HeadingItem(MR.strings.pref_category_for_this_series)\n    val manga by screenModel.mangaFlow.collectAsState()\n\n    val readingMode = remember(manga) {\n        ReadingMode.fromPreference(\n            manga?.readingMode?.toInt(),\n        )\n    }\n    SettingsChipRow(MR.strings.pref_category_reading_mode) {\n        ReadingMode.entries.map {\n            FilterChip(\n                selected = it == readingMode,\n                onClick = { screenModel.onChangeReadingMode(it) },\n                label = { Text(stringResource(it.stringRes)) },\n            )\n        }\n    }\n\n    val orientation = remember(manga) {\n        ReaderOrientation.fromPreference(\n            manga?.readerOrientation?.toInt(),\n        )\n    }\n    SettingsChipRow(MR.strings.rotation_type) {\n        ReaderOrientation.entries.map {\n            FilterChip(\n                selected = it == orientation,\n                onClick = { screenModel.onChangeOrientation(it) },\n                label = { Text(stringResource(it.stringRes)) },\n            )\n        }\n    }\n\n    val viewer by screenModel.viewerFlow.collectAsState()\n    if (viewer is WebtoonViewer) {\n        WebtoonViewerSettings(screenModel)\n    } else {\n        PagerViewerSettings(screenModel)\n    }\n}\n\n@Composable\nprivate fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenModel) {\n    HeadingItem(MR.strings.pager_viewer)\n\n    val navigationModePager by screenModel.preferences.navigationModePager().collectAsState()\n    val pagerNavInverted by screenModel.preferences.pagerNavInverted().collectAsState()\n    TapZonesItems(\n        selected = navigationModePager,\n        onSelect = screenModel.preferences.navigationModePager()::set,\n        invertMode = pagerNavInverted,\n        onSelectInvertMode = screenModel.preferences.pagerNavInverted()::set,\n    )\n\n    val imageScaleType by screenModel.preferences.imageScaleType().collectAsState()\n    SettingsChipRow(MR.strings.pref_image_scale_type) {\n        ReaderPreferences.ImageScaleType.mapIndexed { index, it ->\n            FilterChip(\n                selected = imageScaleType == index + 1,\n                onClick = { screenModel.preferences.imageScaleType().set(index + 1) },\n                label = { Text(stringResource(it)) },\n            )\n        }\n    }\n\n    val zoomStart by screenModel.preferences.zoomStart().collectAsState()\n    SettingsChipRow(MR.strings.pref_zoom_start) {\n        ReaderPreferences.ZoomStart.mapIndexed { index, it ->\n            FilterChip(\n                selected = zoomStart == index + 1,\n                onClick = { screenModel.preferences.zoomStart().set(index + 1) },\n                label = { Text(stringResource(it)) },\n            )\n        }\n    }\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_crop_borders),\n        pref = screenModel.preferences.cropBorders(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_landscape_zoom),\n        pref = screenModel.preferences.landscapeZoom(),\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_navigate_pan),\n        pref = screenModel.preferences.navigateToPan(),\n    )\n\n    val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState()\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_dual_page_split),\n        pref = screenModel.preferences.dualPageInvertPaged(),\n    )\n\n    if (dualPageSplitPaged) {\n        CheckboxItem(\n            label = stringResource(MR.strings.pref_dual_page_invert),\n            pref = screenModel.preferences.dualPageRotateToFitInvert(),\n        )\n    }\n\n    val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState()\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_page_rotate),\n        pref = screenModel.preferences.dualPageRotateToFit(),\n    )\n\n    if (dualPageRotateToFit) {\n        CheckboxItem(\n            label = stringResource(MR.strings.pref_page_rotate_invert),\n            pref = screenModel.preferences.dualPageRotateToFitInvert(),\n        )\n    }\n}\n\n@Composable\nprivate fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenModel) {\n    val numberFormat = remember { NumberFormat.getPercentInstance() }\n\n    HeadingItem(MR.strings.webtoon_viewer)\n\n    val navigationModeWebtoon by screenModel.preferences.navigationModeWebtoon().collectAsState()\n    val webtoonNavInverted by screenModel.preferences.webtoonNavInverted().collectAsState()\n    TapZonesItems(\n        selected = navigationModeWebtoon,\n        onSelect = screenModel.preferences.navigationModeWebtoon()::set,\n        invertMode = webtoonNavInverted,\n        onSelectInvertMode = screenModel.preferences.webtoonNavInverted()::set,\n    )\n\n    val webtoonSidePadding by screenModel.preferences.webtoonSidePadding().collectAsState()\n    SliderItem(\n        value = webtoonSidePadding,\n        valueRange = ReaderPreferences.let { it.WEBTOON_PADDING_MIN..it.WEBTOON_PADDING_MAX },\n        label = stringResource(MR.strings.pref_webtoon_side_padding),\n        valueText = numberFormat.format(webtoonSidePadding / 100f),\n        onChange = {\n            screenModel.preferences.webtoonSidePadding().set(it)\n        },\n        pillColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n    )\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_crop_borders),\n        pref = screenModel.preferences.cropBordersWebtoon(),\n    )\n\n    val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_dual_page_split),\n        pref = screenModel.preferences.dualPageSplitWebtoon(),\n    )\n\n    if (dualPageSplitWebtoon) {\n        CheckboxItem(\n            label = stringResource(MR.strings.pref_dual_page_invert),\n            pref = screenModel.preferences.dualPageInvertWebtoon(),\n        )\n    }\n\n    val dualPageRotateToFitWebtoon by screenModel.preferences.dualPageRotateToFitWebtoon().collectAsState()\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_page_rotate),\n        pref = screenModel.preferences.dualPageRotateToFitWebtoon(),\n    )\n\n    if (dualPageRotateToFitWebtoon) {\n        CheckboxItem(\n            label = stringResource(MR.strings.pref_page_rotate_invert),\n            pref = screenModel.preferences.dualPageRotateToFitInvertWebtoon(),\n        )\n    }\n\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_double_tap_zoom),\n        pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),\n    )\n    CheckboxItem(\n        label = stringResource(MR.strings.pref_webtoon_disable_zoom_out),\n        pref = screenModel.preferences.webtoonDisableZoomOut(),\n    )\n}\n\n@Composable\nprivate fun ColumnScope.TapZonesItems(\n    selected: Int,\n    onSelect: (Int) -> Unit,\n    invertMode: ReaderPreferences.TappingInvertMode,\n    onSelectInvertMode: (ReaderPreferences.TappingInvertMode) -> Unit,\n) {\n    SettingsChipRow(MR.strings.pref_viewer_nav) {\n        ReaderPreferences.TapZones.mapIndexed { index, it ->\n            FilterChip(\n                selected = selected == index,\n                onClick = { onSelect(index) },\n                label = { Text(stringResource(it)) },\n            )\n        }\n    }\n\n    if (selected != 5) {\n        SettingsChipRow(MR.strings.pref_read_with_tapping_inverted) {\n            ReaderPreferences.TappingInvertMode.entries.map {\n                FilterChip(\n                    selected = it == invertMode,\n                    onClick = { onSelectInvertMode(it) },\n                    label = { Text(stringResource(it.titleRes)) },\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt",
    "content": "package eu.kanade.presentation.theme\n\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.material.ripple.RippleAlpha\nimport androidx.compose.material3.ColorScheme\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.RippleConfiguration\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalContext\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.AppTheme\nimport eu.kanade.presentation.theme.colorscheme.BaseColorScheme\nimport eu.kanade.presentation.theme.colorscheme.CloudflareColorScheme\nimport eu.kanade.presentation.theme.colorscheme.CottoncandyColorScheme\nimport eu.kanade.presentation.theme.colorscheme.DoomColorScheme\nimport eu.kanade.presentation.theme.colorscheme.GreenAppleColorScheme\nimport eu.kanade.presentation.theme.colorscheme.LavenderColorScheme\nimport eu.kanade.presentation.theme.colorscheme.MatrixColorScheme\nimport eu.kanade.presentation.theme.colorscheme.MidnightDuskColorScheme\nimport eu.kanade.presentation.theme.colorscheme.MochaColorScheme\nimport eu.kanade.presentation.theme.colorscheme.MonetColorScheme\nimport eu.kanade.presentation.theme.colorscheme.MonochromeColorScheme\nimport eu.kanade.presentation.theme.colorscheme.NordColorScheme\nimport eu.kanade.presentation.theme.colorscheme.SapphireColorScheme\nimport eu.kanade.presentation.theme.colorscheme.StrawberryColorScheme\nimport eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme\nimport eu.kanade.presentation.theme.colorscheme.TakoColorScheme\nimport eu.kanade.presentation.theme.colorscheme.TealTurqoiseColorScheme\nimport eu.kanade.presentation.theme.colorscheme.TidalWaveColorScheme\nimport eu.kanade.presentation.theme.colorscheme.YinYangColorScheme\nimport eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun TachiyomiTheme(\n    appTheme: AppTheme? = null,\n    amoled: Boolean? = null,\n    content: @Composable () -> Unit,\n) {\n    val uiPreferences = Injekt.get<UiPreferences>()\n    BaseTachiyomiTheme(\n        appTheme = appTheme ?: uiPreferences.appTheme().get(),\n        isAmoled = amoled ?: uiPreferences.themeDarkAmoled().get(),\n        content = content,\n    )\n}\n\n@Composable\nfun TachiyomiPreviewTheme(\n    appTheme: AppTheme = AppTheme.DEFAULT,\n    isAmoled: Boolean = false,\n    content: @Composable () -> Unit,\n) = BaseTachiyomiTheme(appTheme, isAmoled, content)\n\n@Composable\nprivate fun BaseTachiyomiTheme(\n    appTheme: AppTheme,\n    isAmoled: Boolean,\n    content: @Composable () -> Unit,\n) {\n    MaterialTheme(\n        colorScheme = getThemeColorScheme(appTheme, isAmoled),\n        content = content,\n    )\n}\n\n@Composable\n@ReadOnlyComposable\nprivate fun getThemeColorScheme(\n    appTheme: AppTheme,\n    isAmoled: Boolean,\n): ColorScheme {\n    val uiPreferences = Injekt.get<UiPreferences>()\n    val colorScheme = if (appTheme == AppTheme.MONET) {\n        MonetColorScheme(LocalContext.current)\n    } else {\n        colorSchemes.getOrDefault(appTheme, TachiyomiColorScheme)\n    }\n    return colorScheme.getColorScheme(\n        isSystemInDarkTheme(),\n        isAmoled,\n    )\n}\n\nprivate const val RIPPLE_DRAGGED_ALPHA = .1f\nprivate const val RIPPLE_FOCUSED_ALPHA = .1f\nprivate const val RIPPLE_HOVERED_ALPHA = .1f\nprivate const val RIPPLE_PRESSED_ALPHA = .1f\n\nval playerRippleConfiguration\n    @Composable get() = RippleConfiguration(\n        color = if (isSystemInDarkTheme()) Color.White else Color.Black,\n        rippleAlpha = RippleAlpha(\n            draggedAlpha = RIPPLE_DRAGGED_ALPHA,\n            focusedAlpha = RIPPLE_FOCUSED_ALPHA,\n            hoveredAlpha = RIPPLE_HOVERED_ALPHA,\n            pressedAlpha = RIPPLE_PRESSED_ALPHA,\n        ),\n    )\n\nprivate val colorSchemes: Map<AppTheme, BaseColorScheme> = mapOf(\n    AppTheme.DEFAULT to TachiyomiColorScheme,\n    AppTheme.CLOUDFLARE to CloudflareColorScheme,\n    AppTheme.COTTONCANDY to CottoncandyColorScheme,\n    AppTheme.DOOM to DoomColorScheme,\n    AppTheme.GREEN_APPLE to GreenAppleColorScheme,\n    AppTheme.LAVENDER to LavenderColorScheme,\n    AppTheme.MATRIX to MatrixColorScheme,\n    AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme,\n    AppTheme.MONOCHROME to MonochromeColorScheme,\n    AppTheme.MOCHA to MochaColorScheme,\n    AppTheme.SAPPHIRE to SapphireColorScheme,\n    AppTheme.NORD to NordColorScheme,\n    AppTheme.STRAWBERRY_DAIQUIRI to StrawberryColorScheme,\n    AppTheme.TAKO to TakoColorScheme,\n    AppTheme.TEALTURQUOISE to TealTurqoiseColorScheme,\n    AppTheme.TIDAL_WAVE to TidalWaveColorScheme,\n    AppTheme.YINYANG to YinYangColorScheme,\n    AppTheme.YOTSUBA to YotsubaColorScheme,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/BaseColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.ColorScheme\nimport androidx.compose.ui.graphics.Color\n\ninternal abstract class BaseColorScheme {\n\n    abstract val darkScheme: ColorScheme\n    abstract val lightScheme: ColorScheme\n\n    // Cannot be pure black as there's content scrolling behind it\n    // https://m3.material.io/components/navigation-bar/guidelines#90615a71-607e-485e-9e09-778bfc080563\n    private val surfaceContainer = Color(0xFF0C0C0C)\n    private val surfaceContainerHigh = Color(0xFF131313)\n    private val surfaceContainerHighest = Color(0xFF1B1B1B)\n\n    fun getColorScheme(isDark: Boolean, isAmoled: Boolean): ColorScheme {\n        if (!isDark) return lightScheme\n\n        if (!isAmoled) return darkScheme\n\n        return darkScheme.copy(\n            background = Color.Black,\n            onBackground = Color.White,\n            surface = Color.Black,\n            onSurface = Color.White,\n            surfaceVariant = surfaceContainer, // Navigation bar background (ThemePrefWidget)\n            surfaceContainerLowest = surfaceContainer,\n            surfaceContainerLow = surfaceContainer,\n            surfaceContainer = surfaceContainer, // Navigation bar background\n            surfaceContainerHigh = surfaceContainerHigh,\n            surfaceContainerHighest = surfaceContainerHighest,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/CloudflareColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Clouflare theme\n * Original color scheme by LuftVerbot\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFF38020\n * Secondary 0xFFF38020\n * Tertiary 0xFF1B1B22\n * Neutral 0xFF655C5A\n */\ninternal object CloudflareColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFF38020),\n        onPrimary = Color(0xFF1B1B22),\n        primaryContainer = Color(0xFFF38020),\n        onPrimaryContainer = Color(0xFF1B1B22),\n        inversePrimary = Color(0xFFD6BAFF), // Assuming 'inversePrimary' maps to 'cloudflare_primaryInverse'\n        secondary = Color(0xFFF38020),\n        onSecondary = Color(0xFF1B1B22),\n        secondaryContainer = Color(0xFFF38020),\n        onSecondaryContainer = Color(0xFF1B1B22),\n        tertiary = Color(0xFF1B1B22),\n        onTertiary = Color(0xFFF38020),\n        tertiaryContainer = Color(0xFF1B1B22),\n        onTertiaryContainer = Color(0xFFF38020),\n        background = Color(0xFF1B1B22),\n        onBackground = Color(0xFFEFF2F5),\n        surface = Color(0xFF1B1B22),\n        onSurface = Color(0xFFEFF2F5),\n        surfaceVariant = Color(0xFF3F3F46),\n        onSurfaceVariant = Color(0xFFD8FFFFFF),\n        surfaceTint = Color(0xFFF38020), // Assuming 'surfaceTint' maps to 'cloudflare_primary' or similar\n        inverseSurface = Color(0xFFF3EFF4),\n        inverseOnSurface = Color(0xFF313033),\n        outline = Color(0xFFF38020),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFFF38020),\n        onPrimary = Color(0xFFEFF2F5),\n        primaryContainer = Color(0xFFF38020),\n        onPrimaryContainer = Color(0xFFEFF2F5),\n        inversePrimary = Color(0xFFD6BAFF), // Assuming 'inversePrimary' maps to 'cloudflare_primaryInverse'\n        secondary = Color(0xFFF38020),\n        onSecondary = Color(0xFFEFF2F5),\n        secondaryContainer = Color(0xFFF38020),\n        onSecondaryContainer = Color(0xFFEFF2F5),\n        tertiary = Color(0xFFEFF2F5),\n        onTertiary = Color(0xFFF38020),\n        tertiaryContainer = Color(0xFFEFF2F5),\n        onTertiaryContainer = Color(0xFFF38020),\n        background = Color(0xFFEFF2F5),\n        onBackground = Color(0xFF1B1B22),\n        surface = Color(0xFFEFF2F5),\n        onSurface = Color(0xFF1B1B22),\n        surfaceVariant = Color(0xFFB9B0CC),\n        onSurfaceVariant = Color(0xFFD849454E),\n        surfaceTint = Color(0xFFF38020), // Assuming 'surfaceTint' maps to 'cloudflare_primary' or similar\n        inverseSurface = Color(0xFF313033),\n        inverseOnSurface = Color(0xFFF3EFF4),\n        outline = Color(0xFFF38020),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/CottoncandyColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Cottoncandy theme\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFF38020\n * Secondary 0xFFF38020\n * Tertiary 0xFF1B1B22\n * Neutral 0xFF655C5A\n */\ninternal object CottoncandyColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFFFB1C1),\n        onPrimary = Color(0xFF5F112B),\n        primaryContainer = Color(0xFF7C2941),\n        onPrimaryContainer = Color(0xFFFFD9DF),\n        secondary = Color(0xFF64D3FF),\n        onSecondary = Color(0xFF003546),\n        secondaryContainer = Color(0xFF004D63),\n        onSecondaryContainer = Color(0xFFBCE9FF),\n        tertiary = Color(0xFFFFB1C1),\n        onTertiary = Color(0xFF5F112B), // Note: onTertiary color is assumed\n        tertiaryContainer = Color(0xFF7C2941),\n        onTertiaryContainer = Color(0xFFFFD9DF),\n        background = Color(0xFF201A1B),\n        onBackground = Color(0xFFECE0E0),\n        surface = Color(0xFF201A1B),\n        onSurface = Color(0xFFECE0E0),\n        surfaceVariant = Color(0xFF524345),\n        onSurfaceVariant = Color(0xFFD6C2C4),\n        surfaceTint = Color(0xFFFFB1C1),\n        inverseSurface = Color(0xFFECE0E0),\n        inverseOnSurface = Color(0xFF201A1B),\n        outline = Color(0xFF9F8C8F),\n        inversePrimary = Color(0xFF9A4058),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF9A4058),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFFFD9DF),\n        onPrimaryContainer = Color(0xFF3F0017),\n        secondary = Color(0xFF5BCEFA),\n        onSecondary = Color(0xFFFFFFFF),\n        secondaryContainer = Color(0xFFBCE9FF),\n        onSecondaryContainer = Color(0xFF001F2A),\n        tertiary = Color(0xFF9A4058),\n        onTertiary = Color(0xFFFFFFFF),\n        tertiaryContainer = Color(0xFFFFD9DF),\n        onTertiaryContainer = Color(0xFF3F0017),\n        background = Color(0xFFFFFBFF),\n        onBackground = Color(0xFF201A1B),\n        surface = Color(0xFFFFFBFF),\n        onSurface = Color(0xFF201A1B),\n        surfaceVariant = Color(0xFFF3DDE0),\n        onSurfaceVariant = Color(0xFF524345),\n        surfaceTint = Color(0xFF9A4058),\n        inverseSurface = Color(0xFF352F30),\n        inverseOnSurface = Color(0xFFFAEEEF),\n        outline = Color(0xFF847375),\n        inversePrimary = Color(0xFFFFB1C1),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/DoomColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Doom theme\n * Original color scheme by LuftVerbot\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFF38020\n * Secondary 0xFFF38020\n * Tertiary 0xFF1B1B22\n * Neutral 0xFF655C5A\n */\ninternal object DoomColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFFF0000),\n        onPrimary = Color(0xFFFAFAFA),\n        primaryContainer = Color(0xFFFF0000),\n        onPrimaryContainer = Color(0xFFFAFAFA),\n        secondary = Color(0xFFFF0000),\n        onSecondary = Color(0xFFFAFAFA),\n        secondaryContainer = Color(0xFFFF0000),\n        onSecondaryContainer = Color(0xFFFAFAFA),\n        tertiary = Color(0xFFBFBFBF),\n        onTertiary = Color(0xFFFF0000),\n        tertiaryContainer = Color(0xFFBFBFBF),\n        onTertiaryContainer = Color(0xFFFF0000),\n        background = Color(0xFF1B1B1B),\n        onBackground = Color(0xFFFFFFFF),\n        surface = Color(0xFF1B1B1B),\n        onSurface = Color(0xFFFFFFFF),\n        surfaceVariant = Color(0xFF303030),\n        onSurfaceVariant = Color(0xFFD8FFFFFF),\n        surfaceTint = Color(0xFFFF0000),\n        inverseSurface = Color(0xFFFAFAFA),\n        inverseOnSurface = Color(0xFF313131),\n        outline = Color(0xFFFF0000),\n        inversePrimary = Color(0xFF6D0D0B),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFFFF0000),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFFF0000),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        inversePrimary = Color(0xFF6D0D0B), // Assuming 'inversePrimary' maps to 'doom_primaryInverse'\n        secondary = Color(0xFFFF0000),\n        onSecondary = Color(0xFFFFFFFF),\n        secondaryContainer = Color(0xFFFF0000),\n        onSecondaryContainer = Color(0xFFFFFFFF),\n        tertiary = Color(0xFFBFBFBF),\n        onTertiary = Color(0xFFFF0000),\n        tertiaryContainer = Color(0xFFBFBFBF),\n        onTertiaryContainer = Color(0xFFFF0000),\n        background = Color(0xFF212121),\n        onBackground = Color(0xFFFFFFFF),\n        surface = Color(0xFF212121),\n        onSurface = Color(0xFFFFFFFF),\n        surfaceVariant = Color(0xFF4D4D4D),\n        onSurfaceVariant = Color(0xFFD849454E),\n        surfaceTint = Color(0xFFFF0000), // Assuming 'surfaceTint' maps to 'doom_primary' or similar\n        inverseSurface = Color(0xFF424242),\n        inverseOnSurface = Color(0xFFFAFAFA),\n        outline = Color(0xFFFF0000),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/GreenAppleColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Green Apple theme\n * Original color scheme by CarlosEsco, Jays2Kings and CrepeTF\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary #188140\n * Secondary #188140\n * Tertiary #D33131\n * Neutral #5D5F5B\n */\ninternal object GreenAppleColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFF7ADB8F),\n        onPrimary = Color(0xFF003917),\n        primaryContainer = Color(0xFF017737),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        secondary = Color(0xFF7ADB8F), // Unread badge\n        onSecondary = Color(0xFF003917), // Unread badge text\n        secondaryContainer = Color(0xFF017737), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFFFFFFF), // Navigation bar selected icon\n        tertiary = Color(0xFFFFB3AC), // Downloaded badge\n        onTertiary = Color(0xFF680008), // Downloaded badge text\n        tertiaryContainer = Color(0xFFC7282A),\n        onTertiaryContainer = Color(0xFFFFFFFF),\n        error = Color(0xFFFFB4AB),\n        onError = Color(0xFF690005),\n        errorContainer = Color(0xFF93000A),\n        onErrorContainer = Color(0xFFFFDAD6),\n        background = Color(0xFF0F1510),\n        onBackground = Color(0xFFDFE4DB),\n        surface = Color(0xFF0F1510),\n        onSurface = Color(0xFFDFE4DB),\n        surfaceVariant = Color(0xFF3F493F), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFBECABC),\n        outline = Color(0xFF889487),\n        outlineVariant = Color(0xFF3F493F),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFFDFE4DB),\n        inverseOnSurface = Color(0xFF2C322C),\n        inversePrimary = Color(0xFF006D32),\n        surfaceDim = Color(0xFF0F1510),\n        surfaceBright = Color(0xFF353B35),\n        surfaceContainerLowest = Color(0xFF0A0F0B),\n        surfaceContainerLow = Color(0xFF181D18),\n        surfaceContainer = Color(0xFF1C211C), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF262B26),\n        surfaceContainerHighest = Color(0xFF313630),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF005927),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFF188140),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        secondary = Color(0xFF005927), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFF97f7a9), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF000000), // Navigation bar selected icon\n        tertiary = Color(0xFF9D0012), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFFD33131),\n        onTertiaryContainer = Color(0xFFFFFFFF),\n        error = Color(0xFFBA1A1A),\n        onError = Color(0xFFFFFFFF),\n        errorContainer = Color(0xFFFFDAD6),\n        onErrorContainer = Color(0xFF410002),\n        background = Color(0xFFF6FBF2),\n        onBackground = Color(0xFF181D18),\n        surface = Color(0xFFF6FBF2),\n        onSurface = Color(0xFF181D18),\n        surfaceVariant = Color(0xFFDAE6D7), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF3F493F),\n        outline = Color(0xFF6F7A6E),\n        outlineVariant = Color(0xFFBECABC),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFF2C322C),\n        inverseOnSurface = Color(0xFFEDF2E9),\n        inversePrimary = Color(0xFF7ADB8F),\n        surfaceDim = Color(0xFFD6DCD3),\n        surfaceBright = Color(0xFFF6FBF2),\n        surfaceContainerLowest = Color(0xFFFFFFFF),\n        surfaceContainerLow = Color(0xFFF0F5EC),\n        surfaceContainer = Color(0xFFEAEFE6), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFE4EAE1),\n        surfaceContainerHighest = Color(0xFFDFE4DB),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/LavenderColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Lavender theme\n * Color scheme by Osyx\n *\n * Key colors:\n * Primary #A177FF\n * Secondary #A177FF\n * Tertiary #5E25E1\n * Neutral #111129\n */\ninternal object LavenderColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFA177FF),\n        onPrimary = Color(0xFF3D0090),\n        primaryContainer = Color(0xFFA177FF),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        secondary = Color(0xFFA177FF), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFF423271), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFA177FF), // Navigation bar selected icon\n        tertiary = Color(0xFFCDBDFF), // Downloaded badge\n        onTertiary = Color(0xFF360096), // Downloaded badge text\n        tertiaryContainer = Color(0xFF5512D8),\n        onTertiaryContainer = Color(0xFFEFE6FF),\n        error = Color(0xFFFFB4AB),\n        onError = Color(0xFF690005),\n        errorContainer = Color(0xFF93000A),\n        onErrorContainer = Color(0xFFFFDAD6),\n        background = Color(0xFF111129),\n        onBackground = Color(0xFFE7E0EC),\n        surface = Color(0xFF111129),\n        onSurface = Color(0xFFE7E0EC),\n        surfaceVariant = Color(0xFF3D2F6B), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFCBC3D6),\n        outline = Color(0xFF958E9F),\n        outlineVariant = Color(0xFF4A4453),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFFE7E0EC),\n        inverseOnSurface = Color(0xFF322F38),\n        inversePrimary = Color(0xFF6D41C8),\n        surfaceDim = Color(0xFF111129),\n        surfaceBright = Color(0xFF3B3841),\n        surfaceContainerLowest = Color(0xFF15132d),\n        surfaceContainerLow = Color(0xFF171531),\n        surfaceContainer = Color(0xFF1D193B), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF241f41),\n        surfaceContainerHighest = Color(0xFF282446),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF6D41C8),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFF7B46AF),\n        onPrimaryContainer = Color(0xFF130038),\n        secondary = Color(0xFF7B46AF), // Unread badge\n        onSecondary = Color(0xFFEDE2FF), // Unread badge text\n        secondaryContainer = Color(0xFFC9B0E6), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF7B46AF), // Navigation bar selector icon\n        tertiary = Color(0xFFEDE2FF), // Downloaded badge\n        onTertiary = Color(0xFF7B46AF), // Downloaded badge text\n        tertiaryContainer = Color(0xFF6D3BF0),\n        onTertiaryContainer = Color(0xFFFFFFFF),\n        error = Color(0xFFBA1A1A),\n        onError = Color(0xFFFFFFFF),\n        errorContainer = Color(0xFFFFDAD6),\n        onErrorContainer = Color(0xFF410002),\n        background = Color(0xFFEDE2FF),\n        onBackground = Color(0xFF1D1A22),\n        surface = Color(0xFFEDE2FF),\n        onSurface = Color(0xFF1D1A22),\n        surfaceVariant = Color(0xFFE4D5F8), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF4A4453),\n        outline = Color(0xFF7B7485),\n        outlineVariant = Color(0xFFCBC3D6),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFF322F38),\n        inverseOnSurface = Color(0xFFF5EEFA),\n        inversePrimary = Color(0xFFA177FF),\n        surfaceDim = Color(0xFFDED7E3),\n        surfaceBright = Color(0xFFEDE2FF),\n        surfaceContainerLowest = Color(0xFFDACCEC),\n        surfaceContainerLow = Color(0xFFDED0F1),\n        surfaceContainer = Color(0xFFE4D5F8), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFEADCFD),\n        surfaceContainerHighest = Color(0xFFEEE2FF),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/MatrixColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Matrix theme\n * Original color scheme by LuftVerbot\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFF38020\n * Secondary 0xFFF38020\n * Tertiary 0xFF1B1B22\n * Neutral 0xFF655C5A\n */\ninternal object MatrixColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFF00FF00),\n        onPrimary = Color(0xFFFAFAFA),\n        primaryContainer = Color(0xFF00FF00),\n        onPrimaryContainer = Color(0xFFFAFAFA),\n        secondary = Color(0xFF00FF00),\n        onSecondary = Color(0xFFFAFAFA),\n        secondaryContainer = Color(0xFF00FF00),\n        onSecondaryContainer = Color(0xFFFAFAFA),\n        tertiary = Color(0xFFFFFFFF),\n        onTertiary = Color(0xFF00FF00),\n        tertiaryContainer = Color(0xFFFFFFFF),\n        onTertiaryContainer = Color(0xFF00FF00),\n        background = Color(0xFF111111),\n        onBackground = Color(0xFFFFFFFF),\n        surface = Color(0xFF111111),\n        onSurface = Color(0xFFFFFFFF),\n        surfaceVariant = Color(0xFF212121),\n        onSurfaceVariant = Color(0xFFD8FFFFFF),\n        surfaceTint = Color(0xFF00FF00),\n        inverseSurface = Color(0xFFFAFAFA),\n        inverseOnSurface = Color(0xFF313131),\n        outline = Color(0xFF00FF00),\n        inversePrimary = Color(0xFF007700),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF00FF00),\n        onPrimary = Color(0xFF000000),\n        primaryContainer = Color(0xFF00FF00),\n        onPrimaryContainer = Color(0xFF000000),\n        secondary = Color(0xFF00FF00),\n        onSecondary = Color(0xFF000000),\n        secondaryContainer = Color(0xFF00FF00),\n        onSecondaryContainer = Color(0xFF000000),\n        tertiary = Color(0xFF000000),\n        onTertiary = Color(0xFF00FF00),\n        tertiaryContainer = Color(0xFF000000),\n        onTertiaryContainer = Color(0xFF00FF00),\n        background = Color(0xFF000000),\n        onBackground = Color(0xFFFFFFFF),\n        surface = Color(0xFF000000),\n        onSurface = Color(0xFFFFFFFF),\n        surfaceVariant = Color(0xFF111111),\n        onSurfaceVariant = Color(0xFFD849454E),\n        surfaceTint = Color(0xFF00FF00),\n        inverseSurface = Color(0xFF424242),\n        inverseOnSurface = Color(0xFFFAFAFA),\n        outline = Color(0xFF00FF00),\n        inversePrimary = Color(0xFF007700),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/MidnightDuskColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Midnight Dusk theme\n * Original color scheme by CrepeTF\n * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary #F02475\n * Secondary #F02475\n * Tertiary #7A5733\n * Neutral #16151D\n */\ninternal object MidnightDuskColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFF02475),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFBD1C5C),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        inversePrimary = Color(0xFFF02475),\n        secondary = Color(0xFFF02475), // Unread badge\n        onSecondary = Color(0xFF16151D), // Unread badge text\n        secondaryContainer = Color(0xFF66183C), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFF02475), // Navigation bar selector icon\n        tertiary = Color(0xFF55971C), // Downloaded badge\n        onTertiary = Color(0xFF16151D), // Downloaded badge text\n        tertiaryContainer = Color(0xFF386412),\n        onTertiaryContainer = Color(0xFFE5E1E5),\n        background = Color(0xFF16151D),\n        onBackground = Color(0xFFE5E1E5),\n        surface = Color(0xFF16151D),\n        onSurface = Color(0xFFE5E1E5),\n        surfaceVariant = Color(0xFF281624), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFD6C1C4),\n        surfaceTint = Color(0xFFF02475),\n        inverseSurface = Color(0xFF333043),\n        inverseOnSurface = Color(0xFFFFFFFF),\n        outline = Color(0xFF9F8C8F),\n        surfaceContainerLowest = Color(0xFF221320),\n        surfaceContainerLow = Color(0xFF251522),\n        surfaceContainer = Color(0xFF281624), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF2D1C2A),\n        surfaceContainerHighest = Color(0xFF2F1F2C),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFFBB0054),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFFFD9E1),\n        onPrimaryContainer = Color(0xFF3F0017),\n        inversePrimary = Color(0xFFFFB1C4),\n        secondary = Color(0xFFBB0054), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFFEFBAD4), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFD1377C), // Navigation bar selector icon\n        tertiary = Color(0xFF006638), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFF00894b),\n        onTertiaryContainer = Color(0xFF2D1600),\n        background = Color(0xFFFFFBFF),\n        onBackground = Color(0xFF1C1B1F),\n        surface = Color(0xFFFFFBFF),\n        onSurface = Color(0xFF1C1B1F),\n        surfaceVariant = Color(0xFFF9E6F1), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF524346),\n        surfaceTint = Color(0xFFBB0054),\n        inverseSurface = Color(0xFF313033),\n        inverseOnSurface = Color(0xFFF4F0F4),\n        outline = Color(0xFF847376),\n        surfaceContainerLowest = Color(0xFFDAC0CD),\n        surfaceContainerLow = Color(0xFFE8D1DD),\n        surfaceContainer = Color(0xFFF9E6F1), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFFCF3F8),\n        surfaceContainerHighest = Color(0xFFFEF9FC),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/MochaColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Mocha theme\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFF38020\n * Secondary 0xFFF38020\n * Tertiary 0xFF1B1B22\n * Neutral 0xFF655C5A\n */\ninternal object MochaColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFEBC248),\n        onPrimary = Color(0xFF3D2F00),\n        primaryContainer = Color(0xFF584400),\n        onPrimaryContainer = Color(0xFFFFE08D),\n        secondary = Color(0xFFEBC248),\n        onSecondary = Color(0xFF3D2F00),\n        secondaryContainer = Color(0xFF584400),\n        onSecondaryContainer = Color(0xFFFFE08D),\n        tertiary = Color(0xFFADCFAD),\n        onTertiary = Color(0xFF19361F),\n        tertiaryContainer = Color(0xFF304D34),\n        onTertiaryContainer = Color(0xFFC9ECC8),\n        background = Color(0xFF1E1B16),\n        onBackground = Color(0xFFE8E1D9),\n        surface = Color(0xFF1E1B16),\n        onSurface = Color(0xFFE8E1D9),\n        surfaceVariant = Color(0xFF4C4639),\n        onSurfaceVariant = Color(0xFFCFC5B4),\n        surfaceTint = Color(0xFFEBC248),\n        inverseSurface = Color(0xFFEDE0DD),\n        inverseOnSurface = Color(0xFF211A18),\n        outline = Color(0xFF989080),\n        inversePrimary = Color(0xFFAE3200),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF745B00),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFFFE08D),\n        onPrimaryContainer = Color(0xFF241A00),\n        secondary = Color(0xFF745B00),\n        onSecondary = Color(0xFFFFFFFF),\n        secondaryContainer = Color(0xFFFFE08D),\n        onSecondaryContainer = Color(0xFF241A00),\n        tertiary = Color(0xFF47664A),\n        onTertiary = Color(0xFFFFFFFF),\n        tertiaryContainer = Color(0xFFC9ECC8),\n        onTertiaryContainer = Color(0xFF04210B),\n        background = Color(0xFFFFFBFF),\n        onBackground = Color(0xFF1E1B16),\n        surface = Color(0xFFFFFBFF),\n        onSurface = Color(0xFF1E1B16),\n        surfaceVariant = Color(0xFFEBE1CF),\n        onSurfaceVariant = Color(0xFF4C4639),\n        surfaceTint = Color(0xFF745B00),\n        inverseSurface = Color(0xFF362F2D),\n        inverseOnSurface = Color(0xFFFBEAEB),\n        outline = Color(0xFF7E7667),\n        inversePrimary = Color(0xFFFFB59D),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonetColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport android.annotation.SuppressLint\nimport android.app.UiModeManager\nimport android.app.WallpaperManager\nimport android.content.Context\nimport android.graphics.Bitmap\nimport android.os.Build\nimport androidx.annotation.RequiresApi\nimport androidx.compose.material3.ColorScheme\nimport androidx.compose.material3.dynamicDarkColorScheme\nimport androidx.compose.material3.dynamicLightColorScheme\nimport androidx.compose.ui.graphics.Color\nimport androidx.core.content.getSystemService\nimport com.google.android.material.color.utilities.Hct\nimport com.google.android.material.color.utilities.MaterialDynamicColors\nimport com.google.android.material.color.utilities.QuantizerCelebi\nimport com.google.android.material.color.utilities.SchemeContent\nimport com.google.android.material.color.utilities.Score\n\ninternal class MonetColorScheme(context: Context) : BaseColorScheme() {\n\n    private val monet = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n        MonetSystemColorScheme(context)\n    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {\n        val seed = WallpaperManager.getInstance(context)\n            .getWallpaperColors(WallpaperManager.FLAG_SYSTEM)\n            ?.primaryColor\n            ?.toArgb()\n        if (seed != null) {\n            MonetCompatColorScheme(context, seed)\n        } else {\n            TachiyomiColorScheme\n        }\n    } else {\n        TachiyomiColorScheme\n    }\n\n    override val darkScheme\n        get() = monet.darkScheme\n\n    override val lightScheme\n        get() = monet.lightScheme\n\n    companion object {\n        @Suppress(\"Unused\")\n        @SuppressLint(\"RestrictedApi\")\n        fun extractSeedColorFromImage(bitmap: Bitmap): Int? {\n            val width = bitmap.width\n            val height = bitmap.height\n            val bitmapPixels = IntArray(width * height)\n            bitmap.getPixels(bitmapPixels, 0, width, 0, 0, width, height)\n            return Score.score(QuantizerCelebi.quantize(bitmapPixels, 128), 1, 0)[0]\n                .takeIf { it != 0 } // Don't take fallback color\n        }\n    }\n}\n\n@RequiresApi(Build.VERSION_CODES.S)\nprivate class MonetSystemColorScheme(context: Context) : BaseColorScheme() {\n    override val lightScheme = dynamicLightColorScheme(context)\n    override val darkScheme = dynamicDarkColorScheme(context)\n}\n\nprivate class MonetCompatColorScheme(context: Context, seed: Int) : BaseColorScheme() {\n\n    override val lightScheme = generateColorSchemeFromSeed(context = context, seed = seed, dark = false)\n    override val darkScheme = generateColorSchemeFromSeed(context = context, seed = seed, dark = true)\n\n    companion object {\n        private fun Int.toComposeColor(): Color = Color(this)\n\n        @SuppressLint(\"PrivateResource\", \"RestrictedApi\")\n        private fun generateColorSchemeFromSeed(context: Context, seed: Int, dark: Boolean): ColorScheme {\n            val scheme = SchemeContent(\n                Hct.fromInt(seed),\n                dark,\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n                    context.getSystemService<UiModeManager>()?.contrast?.toDouble() ?: 0.0\n                } else {\n                    0.0\n                },\n            )\n            val dynamicColors = MaterialDynamicColors()\n            return ColorScheme(\n                primary = dynamicColors.primary().getArgb(scheme).toComposeColor(),\n                onPrimary = dynamicColors.onPrimary().getArgb(scheme).toComposeColor(),\n                primaryContainer = dynamicColors.primaryContainer().getArgb(scheme).toComposeColor(),\n                onPrimaryContainer = dynamicColors.onPrimaryContainer().getArgb(scheme).toComposeColor(),\n                inversePrimary = dynamicColors.inversePrimary().getArgb(scheme).toComposeColor(),\n                secondary = dynamicColors.secondary().getArgb(scheme).toComposeColor(),\n                onSecondary = dynamicColors.onSecondary().getArgb(scheme).toComposeColor(),\n                secondaryContainer = dynamicColors.secondaryContainer().getArgb(scheme).toComposeColor(),\n                onSecondaryContainer = dynamicColors.onSecondaryContainer().getArgb(scheme).toComposeColor(),\n                tertiary = dynamicColors.tertiary().getArgb(scheme).toComposeColor(),\n                onTertiary = dynamicColors.onTertiary().getArgb(scheme).toComposeColor(),\n                tertiaryContainer = dynamicColors.tertiary().getArgb(scheme).toComposeColor(),\n                onTertiaryContainer = dynamicColors.onTertiaryContainer().getArgb(scheme).toComposeColor(),\n                background = dynamicColors.background().getArgb(scheme).toComposeColor(),\n                onBackground = dynamicColors.onBackground().getArgb(scheme).toComposeColor(),\n                surface = dynamicColors.surface().getArgb(scheme).toComposeColor(),\n                onSurface = dynamicColors.onSurface().getArgb(scheme).toComposeColor(),\n                surfaceVariant = dynamicColors.surfaceVariant().getArgb(scheme).toComposeColor(),\n                onSurfaceVariant = dynamicColors.onSurfaceVariant().getArgb(scheme).toComposeColor(),\n                surfaceTint = dynamicColors.surfaceTint().getArgb(scheme).toComposeColor(),\n                inverseSurface = dynamicColors.inverseSurface().getArgb(scheme).toComposeColor(),\n                inverseOnSurface = dynamicColors.inverseOnSurface().getArgb(scheme).toComposeColor(),\n                error = dynamicColors.error().getArgb(scheme).toComposeColor(),\n                onError = dynamicColors.onError().getArgb(scheme).toComposeColor(),\n                errorContainer = dynamicColors.errorContainer().getArgb(scheme).toComposeColor(),\n                onErrorContainer = dynamicColors.onErrorContainer().getArgb(scheme).toComposeColor(),\n                outline = dynamicColors.outline().getArgb(scheme).toComposeColor(),\n                outlineVariant = dynamicColors.outlineVariant().getArgb(scheme).toComposeColor(),\n                scrim = Color.Black,\n                surfaceBright = dynamicColors.surfaceBright().getArgb(scheme).toComposeColor(),\n                surfaceDim = dynamicColors.surfaceDim().getArgb(scheme).toComposeColor(),\n                surfaceContainer = dynamicColors.surfaceContainer().getArgb(scheme).toComposeColor(),\n                surfaceContainerHigh = dynamicColors.surfaceContainerHigh().getArgb(scheme).toComposeColor(),\n                surfaceContainerHighest = dynamicColors.surfaceContainerHighest().getArgb(scheme).toComposeColor(),\n                surfaceContainerLow = dynamicColors.surfaceContainerLow().getArgb(scheme).toComposeColor(),\n                surfaceContainerLowest = dynamicColors.surfaceContainerLowest().getArgb(scheme).toComposeColor(),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/MonochromeColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\ninternal object MonochromeColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFFFFFFF),\n        onPrimary = Color(0xFF000000),\n        primaryContainer = Color(0xFFFFFFFF),\n        onPrimaryContainer = Color(0xFF000000),\n        secondary = Color(0xFFFFFFFF),\n        onSecondary = Color(0xFF000000),\n        secondaryContainer = Color(0xFF777777),\n        onSecondaryContainer = Color(0xFF000000),\n        tertiary = Color(0xFF777777),\n        onTertiary = Color(0xFFFFFFFF),\n        tertiaryContainer = Color(0xFFFFFFFF),\n        onTertiaryContainer = Color(0xFF000000),\n        error = Color(0xFFFFFFFF),\n        onError = Color(0xFF000000),\n        errorContainer = Color(0xFFFFFFFF),\n        onErrorContainer = Color(0xFF000000),\n        background = Color(0xFF000000),\n        onBackground = Color(0xFFFFFFFF),\n        surface = Color(0xFF000000),\n        onSurface = Color(0xFFFFFFFF),\n        surfaceVariant = Color(0xFF000000),\n        onSurfaceVariant = Color(0xFFFFFFFF),\n        outline = Color(0xFFFFFFFF),\n        outlineVariant = Color(0xFFFFFFFF),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFFFFFFFF),\n        inverseOnSurface = Color(0xFF000000),\n        inversePrimary = Color(0xFF000000),\n        surfaceDim = Color(0xFF000000),\n        surfaceBright = Color(0xFFFFFFFF),\n        surfaceContainerLowest = Color(0xFF000000),\n        surfaceContainerLow = Color(0xFF000000),\n        surfaceContainer = Color(0xFF000000),\n        surfaceContainerHigh = Color(0xFF000000),\n        surfaceContainerHighest = Color(0xFF000000),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF000000),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFF000000),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        secondary = Color(0xFF000000),\n        onSecondary = Color(0xFFFFFFFF),\n        secondaryContainer = Color(0xFF888888),\n        onSecondaryContainer = Color(0xFFFFFFFF),\n        tertiary = Color(0xFF888888),\n        onTertiary = Color(0xFFFFFFFF),\n        tertiaryContainer = Color(0xFF000000),\n        onTertiaryContainer = Color(0xFFFFFFFF),\n        error = Color(0xFF000000),\n        onError = Color(0xFFFFFFFF),\n        errorContainer = Color(0xFF000000),\n        onErrorContainer = Color(0xFFFFFFFF),\n        background = Color(0xFFFFFFFF),\n        onBackground = Color(0xFF000000),\n        surface = Color(0xFFFFFFFF),\n        onSurface = Color(0xFF000000),\n        surfaceVariant = Color(0xFFFFFFFF),\n        onSurfaceVariant = Color(0xFF000000),\n        outline = Color(0xFF000000),\n        outlineVariant = Color(0xFF000000),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFF000000),\n        inverseOnSurface = Color(0xFFFFFFFF),\n        inversePrimary = Color(0xFFFFFFFF),\n        surfaceDim = Color(0xFFFFFFFF),\n        surfaceBright = Color(0xFFFFFFFF),\n        surfaceContainerLowest = Color(0xFFFFFFFF),\n        surfaceContainerLow = Color(0xFFFFFFFF),\n        surfaceContainer = Color(0xFFFFFFFF),\n        surfaceContainerHigh = Color(0xFFFFFFFF),\n        surfaceContainerHighest = Color(0xFFFFFFFF),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/NordColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Nord theme\n * https://www.nordtheme.com/docs/colors-and-palettes\n * for the light theme, the primary color is switched with the tertiary for better contrast in some case\n */\ninternal object NordColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFF88C0D0),\n        onPrimary = Color(0xFF2E3440),\n        primaryContainer = Color(0xFF88C0D0),\n        onPrimaryContainer = Color(0xFF2E3440),\n        inversePrimary = Color(0xFF397E91),\n        secondary = Color(0xFF81A1C1), // Unread badge\n        onSecondary = Color(0xFF2E3440), // Unread badge text\n        secondaryContainer = Color(0xFF506275), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF88C0D0), // Navigation bar selector icon\n        tertiary = Color(0xFF5E81AC), // Downloaded badge\n        onTertiary = Color(0xFF000000), // Downloaded badge text\n        tertiaryContainer = Color(0xFF5E81AC),\n        onTertiaryContainer = Color(0xFF000000),\n        background = Color(0xFF2E3440),\n        onBackground = Color(0xFFECEFF4),\n        surface = Color(0xFF2E3440),\n        onSurface = Color(0xFFECEFF4),\n        surfaceVariant = Color(0xFF414C5C), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFECEFF4),\n        surfaceTint = Color(0xFF88C0D0),\n        inverseSurface = Color(0xFFD8DEE9),\n        inverseOnSurface = Color(0xFF2E3440),\n        outline = Color(0xFF6d717b),\n        outlineVariant = Color(0xFF90939a),\n        onError = Color(0xFF2E3440),\n        errorContainer = Color(0xFFBF616A),\n        onErrorContainer = Color(0xFF000000),\n        surfaceContainerLowest = Color(0xFF373F4D),\n        surfaceContainerLow = Color(0xFF3E4756),\n        surfaceContainer = Color(0xFF414C5C),\n        surfaceContainerHigh = Color(0xFF4E5766),\n        surfaceContainerHighest = Color(0xFF505968), // Navigation bar background\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF5E81AC),\n        onPrimary = Color(0xFF000000),\n        primaryContainer = Color(0xFF5E81AC),\n        onPrimaryContainer = Color(0xFF000000),\n        inversePrimary = Color(0xFF8CA8CD),\n        secondary = Color(0xFF81A1C1), // Unread badge\n        onSecondary = Color(0xFF2E3440), // Unread badge text\n        secondaryContainer = Color(0xFF91B4D7), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF2E3440), // Navigation bar selector icon\n        tertiary = Color(0xFF88C0D0), // Downloaded badge\n        onTertiary = Color(0xFF2E3440), // Downloaded badge text\n        tertiaryContainer = Color(0xFF88C0D0),\n        onTertiaryContainer = Color(0xFF2E3440),\n        background = Color(0xFFECEFF4),\n        onBackground = Color(0xFF2E3440),\n        surface = Color(0xFFE5E9F0),\n        onSurface = Color(0xFF2E3440),\n        surfaceVariant = Color(0xFFDAE0EA), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF2E3440),\n        surfaceTint = Color(0xFF5E81AC),\n        inverseSurface = Color(0xFF3B4252),\n        inverseOnSurface = Color(0xFFECEFF4),\n        outline = Color(0xFF2E3440),\n        onError = Color(0xFFECEFF4),\n        errorContainer = Color(0xFFBF616A),\n        onErrorContainer = Color(0xFF000000),\n        surfaceContainerLowest = Color(0xFFD1D7E0),\n        surfaceContainerLow = Color(0xFFD6DCE6),\n        surfaceContainer = Color(0xFFDAE0EA), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFE9EDF3),\n        surfaceContainerHighest = Color(0xFFF2F4F8),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/SapphireColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Sapphire theme\n * Original color scheme by LuftVerbot\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFF38020\n * Secondary 0xFFF38020\n * Tertiary 0xFF6B5E2F\n * Neutral 0xFF655C5A\n */\ninternal object SapphireColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFF1E88E5),\n        onPrimary = Color(0xFFFAFAFA),\n        primaryContainer = Color(0xFF1E88E5),\n        onPrimaryContainer = Color(0xFFFAFAFA),\n        inversePrimary = Color(0xFF2979FF), // Assuming 'inversePrimary' maps to 'sapphire_primaryInverse'\n        secondary = Color(0xFF1E88E5),\n        onSecondary = Color(0xFFFAFAFA),\n        secondaryContainer = Color(0xFF1E88E5),\n        onSecondaryContainer = Color(0xFFFAFAFA),\n        tertiary = Color(0xFF212121),\n        onTertiary = Color(0xFF1E88E5),\n        tertiaryContainer = Color(0xFF212121),\n        onTertiaryContainer = Color(0xFF1E88E5),\n        background = Color(0xFF212121),\n        onBackground = Color(0xFFFFFFFF),\n        surface = Color(0xFF212121),\n        onSurface = Color(0xFFFFFFFF),\n        surfaceVariant = Color(0xFF424242),\n        onSurfaceVariant = Color(0xFFD8FFFFFF),\n        surfaceTint = Color(0xFF1E88E5), // Assuming 'surfaceTint' maps to 'sapphire_primary' or similar\n        inverseSurface = Color(0xFFFAFAFA),\n        inverseOnSurface = Color(0xFF313131),\n        outline = Color(0xFF1E88E5),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF1E88E5),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFF1E88E5),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        inversePrimary = Color(0xFF2979FF), // Assuming 'inversePrimary' maps to 'sapphire_primaryInverse'\n        secondary = Color(0xFF1E88E5),\n        onSecondary = Color(0xFFFFFFFF),\n        secondaryContainer = Color(0xFF1E88E5),\n        onSecondaryContainer = Color(0xFFFFFFFF),\n        tertiary = Color(0xFFE1F5FE),\n        onTertiary = Color(0xFF1E88E5),\n        tertiaryContainer = Color(0xFFE1F5FE),\n        onTertiaryContainer = Color(0xFF1E88E5),\n        background = Color(0xFFFFFFFF),\n        onBackground = Color(0xFF212121),\n        surface = Color(0xFFFFFFFF),\n        onSurface = Color(0xFF212121),\n        surfaceVariant = Color(0xFFB3E5FC),\n        onSurfaceVariant = Color(0xFFD849454E),\n        surfaceTint = Color(0xFF1E88E5), // Assuming 'surfaceTint' maps to 'sapphire_primary' or similar\n        inverseSurface = Color(0xFF424242),\n        inverseOnSurface = Color(0xFFFAFAFA),\n        outline = Color(0xFF1E88E5),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/StrawberryColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Strawberry Daiquiri theme\n * Original color scheme by Soitora\n * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary #ED4A65\n * Secondary #ED4A65\n * Tertiary #775930\n * Neutral #655C5C\n */\ninternal object StrawberryColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFFFB2B8),\n        onPrimary = Color(0xFF67001D),\n        primaryContainer = Color(0xFFD53855),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        secondary = Color(0xFFED4A65), // Unread badge\n        onSecondary = Color(0xFF201A1A), // Unread badge text\n        secondaryContainer = Color(0xFF91002A), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFFFFFFF), // Navigation bar selector icon\n        tertiary = Color(0xFFE8C08E), // Downloaded badge\n        onTertiary = Color(0xFF201A1A), // Downloaded badge text\n        tertiaryContainer = Color(0xFF775930),\n        onTertiaryContainer = Color(0xFFFFF7F1),\n        error = Color(0xFFFFB4AB),\n        onError = Color(0xFF690005),\n        errorContainer = Color(0xFF93000A),\n        onErrorContainer = Color(0xFFFFDAD6),\n        background = Color(0xFF201A1A),\n        onBackground = Color(0xFFF7DCDD),\n        surface = Color(0xFF201A1A),\n        onSurface = Color(0xFFF7DCDD),\n        surfaceVariant = Color(0xFF322727), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFE1BEC0),\n        outline = Color(0xFFA9898B),\n        outlineVariant = Color(0xFF594042),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFFF7DCDD),\n        inverseOnSurface = Color(0xFF3D2C2D),\n        inversePrimary = Color(0xFFB61F40),\n        surfaceDim = Color(0xFF1D1011),\n        surfaceBright = Color(0xFF463536),\n        surfaceContainerLowest = Color(0xFF2C2222),\n        surfaceContainerLow = Color(0xFF302525),\n        surfaceContainer = Color(0xFF322727), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF3C2F2F),\n        surfaceContainerHighest = Color(0xFF463737),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFFA10833),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFD53855),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        secondary = Color(0xFFA10833), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFFD53855), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFF6EAED), // Navigation bar selector icon\n        tertiary = Color(0xFF5F441D), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFF87683D),\n        onTertiaryContainer = Color(0xFFFFFFFF),\n        error = Color(0xFFBA1A1A),\n        onError = Color(0xFFFFFFFF),\n        errorContainer = Color(0xFFFFDAD6),\n        onErrorContainer = Color(0xFF410002),\n        background = Color(0xFFFAFAFA),\n        onBackground = Color(0xFF261819),\n        surface = Color(0xFFFAFAFA),\n        onSurface = Color(0xFF261819),\n        surfaceVariant = Color(0xFFF6EAED), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF594042),\n        outline = Color(0xFF8D7071),\n        outlineVariant = Color(0xFFE1BEC0),\n        scrim = Color(0xFF000000),\n        inverseSurface = Color(0xFF3D2C2D),\n        inverseOnSurface = Color(0xFFFFECED),\n        inversePrimary = Color(0xFFFFB2B8),\n        surfaceDim = Color(0xFFEED4D5),\n        surfaceBright = Color(0xFFFFF8F7),\n        surfaceContainerLowest = Color(0xFFF7DCDD),\n        surfaceContainerLow = Color(0xFFFDE2E3),\n        surfaceContainer = Color(0xFFF6EAED), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFFFF0F0),\n        surfaceContainerHighest = Color(0xFFFFFFFF),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/TachiyomiColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Default theme\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary #2979FF\n * Secondary #2979FF\n * Tertiary #47A84A\n * Neutral #919094\n */\ninternal object TachiyomiColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFB0C6FF),\n        onPrimary = Color(0xFF002D6E),\n        primaryContainer = Color(0xFF00429B),\n        onPrimaryContainer = Color(0xFFD9E2FF),\n        inversePrimary = Color(0xFF0058CA),\n        secondary = Color(0xFFB0C6FF), // Unread badge\n        onSecondary = Color(0xFF002D6E), // Unread badge text\n        secondaryContainer = Color(0xFF00429B), // Navigation bar selector pill & pro\n        onSecondaryContainer = Color(0xFFD9E2FF), // Navigation bar selector icon\n        tertiary = Color(0xFF7ADC77), // Downloaded badge\n        onTertiary = Color(0xFF003909), // Downloaded badge text\n        tertiaryContainer = Color(0xFF005312),\n        onTertiaryContainer = Color(0xFF95F990),\n        background = Color(0xFF1B1B1F),\n        onBackground = Color(0xFFE3E2E6),\n        surface = Color(0xFF1B1B1F),\n        onSurface = Color(0xFFE3E2E6),\n        surfaceVariant = Color(0xFF211F26), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFC5C6D0),\n        surfaceTint = Color(0xFFB0C6FF),\n        inverseSurface = Color(0xFFE3E2E6),\n        inverseOnSurface = Color(0xFF1B1B1F),\n        error = Color(0xFFFFB4AB),\n        onError = Color(0xFF690005),\n        errorContainer = Color(0xFF93000A),\n        onErrorContainer = Color(0xFFFFDAD6),\n        outline = Color(0xFF8F9099),\n        outlineVariant = Color(0xFF44464F),\n        surfaceContainerLowest = Color(0xFF1A181D),\n        surfaceContainerLow = Color(0xFF1E1C22),\n        surfaceContainer = Color(0xFF211F26), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF292730),\n        surfaceContainerHighest = Color(0xFF302E38),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF0058CA),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFD9E2FF),\n        onPrimaryContainer = Color(0xFF001945),\n        inversePrimary = Color(0xFFB0C6FF),\n        secondary = Color(0xFF0058CA), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFFD9E2FF), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF001945), // Navigation bar selector icon\n        tertiary = Color(0xFF006E1B), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFF95F990),\n        onTertiaryContainer = Color(0xFF002203),\n        background = Color(0xFFFEFBFF),\n        onBackground = Color(0xFF1B1B1F),\n        surface = Color(0xFFFEFBFF),\n        onSurface = Color(0xFF1B1B1F),\n        surfaceVariant = Color(0xFFF3EDF7), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF44464F),\n        surfaceTint = Color(0xFF0058CA),\n        inverseSurface = Color(0xFF303034),\n        inverseOnSurface = Color(0xFFF2F0F4),\n        error = Color(0xFFBA1A1A),\n        onError = Color(0xFFFFFFFF),\n        errorContainer = Color(0xFFFFDAD6),\n        onErrorContainer = Color(0xFF410002),\n        outline = Color(0xFF757780),\n        outlineVariant = Color(0xFFC5C6D0),\n        surfaceContainerLowest = Color(0xFFF5F1F8),\n        surfaceContainerLow = Color(0xFFF7F2FA),\n        surfaceContainer = Color(0xFFF3EDF7), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFFCF7FF),\n        surfaceContainerHighest = Color(0xFFFCF7FF),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/TakoColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Tako theme\n * Original color scheme by ghostbear\n * M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary #F3B375\n * Secondary #F3B375\n * Tertiary #66577E\n * Neutral #21212E\n */\ninternal object TakoColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFF3B375),\n        onPrimary = Color(0xFF38294E),\n        primaryContainer = Color(0xFFF3B375),\n        onPrimaryContainer = Color(0xFF38294E),\n        inversePrimary = Color(0xFF84531E),\n        secondary = Color(0xFFF3B375), // Unread badge\n        onSecondary = Color(0xFF38294E), // Unread badge text\n        secondaryContainer = Color(0xFF5C4D4B), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFF3B375), // Navigation bar selector icon\n        tertiary = Color(0xFF66577E), // Downloaded badge\n        onTertiary = Color(0xFFF3B375), // Downloaded badge text\n        tertiaryContainer = Color(0xFF4E4065),\n        onTertiaryContainer = Color(0xFFEDDCFF),\n        background = Color(0xFF21212E),\n        onBackground = Color(0xFFE3E0F2),\n        surface = Color(0xFF21212E),\n        onSurface = Color(0xFFE3E0F2),\n        surfaceVariant = Color(0xFF2A2A3C), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFCBC4CE),\n        surfaceTint = Color(0xFF66577E),\n        inverseSurface = Color(0xFFE5E1E6),\n        inverseOnSurface = Color(0xFF1B1B1E),\n        outline = Color(0xFF958F99),\n        surfaceContainerLowest = Color(0xFF20202E),\n        surfaceContainerLow = Color(0xFF262636),\n        surfaceContainer = Color(0xFF2A2A3C), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF303044),\n        surfaceContainerHighest = Color(0xFF36364D),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF66577E),\n        onPrimary = Color(0xFFF3B375),\n        primaryContainer = Color(0xFF66577E),\n        onPrimaryContainer = Color(0xFFF3B375),\n        inversePrimary = Color(0xFFD6BAFF),\n        secondary = Color(0xFF66577E), // Unread badge\n        onSecondary = Color(0xFFF3B375), // Unread badge text\n        secondaryContainer = Color(0xFFC8BED0), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF66577E), // Navigation bar selector icon\n        tertiary = Color(0xFFF3B375), // Downloaded badge\n        onTertiary = Color(0xFF574360), // Downloaded badge text\n        tertiaryContainer = Color(0xFFFDD6B0),\n        onTertiaryContainer = Color(0xFF221437),\n        background = Color(0xFFF7F5FF),\n        onBackground = Color(0xFF1B1B22),\n        surface = Color(0xFFF7F5FF),\n        onSurface = Color(0xFF1B1B22),\n        surfaceVariant = Color(0xFFE8E0EB), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF49454E),\n        surfaceTint = Color(0xFF66577E),\n        inverseSurface = Color(0xFF313033),\n        inverseOnSurface = Color(0xFFF3EFF4),\n        outline = Color(0xFF7A757E),\n        surfaceContainerLowest = Color(0xFFD7D0DA),\n        surfaceContainerLow = Color(0xFFDFD8E2),\n        surfaceContainer = Color(0xFFE8E0EB), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFEEE6F1),\n        surfaceContainerHighest = Color(0xFFF7EEFA),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/TealTurqoiseColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Teal Turqoise theme\n */\ninternal object TealTurqoiseColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFF40E0D0),\n        onPrimary = Color(0xFF000000),\n        primaryContainer = Color(0xFF40E0D0),\n        onPrimaryContainer = Color(0xFF000000),\n        inversePrimary = Color(0xFF008080),\n        secondary = Color(0xFF40E0D0), // Unread badge\n        onSecondary = Color(0xFF000000), // Unread badge text\n        secondaryContainer = Color(0xFF18544E), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF40E0D0), // Navigation bar selector icon\n        tertiary = Color(0xFFBF1F2F), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFF200508),\n        onTertiaryContainer = Color(0xFFBF1F2F),\n        background = Color(0xFF202125),\n        onBackground = Color(0xFFDFDEDA),\n        surface = Color(0xFF202125),\n        onSurface = Color(0xFFDFDEDA),\n        surfaceVariant = Color(0xFF233133), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFDFDEDA),\n        surfaceTint = Color(0xFF40E0D0),\n        inverseSurface = Color(0xFFDFDEDA),\n        inverseOnSurface = Color(0xFF202125),\n        outline = Color(0xFF899391),\n        surfaceContainerLowest = Color(0xFF202C2E),\n        surfaceContainerLow = Color(0xFF222F31),\n        surfaceContainer = Color(0xFF233133), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF28383A),\n        surfaceContainerHighest = Color(0xFF2F4244),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF008080),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFF008080),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        inversePrimary = Color(0xFF40E0D0),\n        secondary = Color(0xFF008080), // Unread badge text\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFFCFE5E4), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF008080), // Navigation bar selector icon\n        tertiary = Color(0xFFFF7F7F), // Downloaded badge\n        onTertiary = Color(0xFF000000), // Downloaded badge text\n        tertiaryContainer = Color(0xFF2A1616),\n        onTertiaryContainer = Color(0xFFFF7F7F),\n        background = Color(0xFFFAFAFA),\n        onBackground = Color(0xFF050505),\n        surface = Color(0xFFFAFAFA),\n        onSurface = Color(0xFF050505),\n        surfaceVariant = Color(0xFFEBF3F1), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF050505),\n        surfaceTint = Color(0xFFBFDFDF),\n        inverseSurface = Color(0xFF050505),\n        inverseOnSurface = Color(0xFFFAFAFA),\n        outline = Color(0xFF6F7977),\n        surfaceContainerLowest = Color(0xFFE1E9E7),\n        surfaceContainerLow = Color(0xFFE6EEEC),\n        surfaceContainer = Color(0xFFEBF3F1), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFF0F8F6),\n        surfaceContainerHighest = Color(0xFFF7FFFD),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/TidalWaveColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Tidal Wave theme\n * Original color scheme by NahutabDevelop\n *\n * Key colors:\n * Primary #004152\n * Secondary #5ed4fc\n * Tertiary #92f7bc\n * Neutral #16151D\n */\ninternal object TidalWaveColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFF5ed4fc),\n        onPrimary = Color(0xFF003544),\n        primaryContainer = Color(0xFF004d61),\n        onPrimaryContainer = Color(0xFFb8eaff),\n        inversePrimary = Color(0xFFa12b03),\n        secondary = Color(0xFF5ed4fc), // Unread badge\n        onSecondary = Color(0xFF003544), // Unread badge text\n        secondaryContainer = Color(0xFF004d61), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFb8eaff), // Navigation bar selector icon\n        tertiary = Color(0xFF92f7bc), // Downloaded badge\n        onTertiary = Color(0xFF001c3b), // Downloaded badge text\n        tertiaryContainer = Color(0xFFc3fada),\n        onTertiaryContainer = Color(0xFF78ffd6),\n        background = Color(0xFF001c3b),\n        onBackground = Color(0xFFd5e3ff),\n        surface = Color(0xFF001c3b),\n        onSurface = Color(0xFFd5e3ff),\n        surfaceVariant = Color(0xFF082b4b), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFbfc8cc),\n        surfaceTint = Color(0xFF5ed4fc),\n        inverseSurface = Color(0xFFffe3c4),\n        inverseOnSurface = Color(0xFF001c3b),\n        outline = Color(0xFF8a9296),\n        surfaceContainerLowest = Color(0xFF072642),\n        surfaceContainerLow = Color(0xFF072947),\n        surfaceContainer = Color(0xFF082b4b), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF093257),\n        surfaceContainerHighest = Color(0xFF0A3861),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF006780),\n        onPrimary = Color(0xFFffffff),\n        primaryContainer = Color(0xFFB4D4DF),\n        onPrimaryContainer = Color(0xFF001f28),\n        inversePrimary = Color(0xFFff987f),\n        secondary = Color(0xFF006780), // Unread badge\n        onSecondary = Color(0xFFffffff), // Unread badge text\n        secondaryContainer = Color(0xFF9AE1FF), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF001f28), // Navigation bar selector icon\n        tertiary = Color(0xFF92f7bc), // Downloaded badge\n        onTertiary = Color(0xFF001c3b), // Downloaded badge text\n        tertiaryContainer = Color(0xFFc3fada),\n        onTertiaryContainer = Color(0xFF78ffd6),\n        background = Color(0xFFfdfbff),\n        onBackground = Color(0xFF001c3b),\n        surface = Color(0xFFfdfbff),\n        onSurface = Color(0xFF001c3b),\n        surfaceVariant = Color(0xFFe8eff5), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF40484c),\n        surfaceTint = Color(0xFF006780),\n        inverseSurface = Color(0xFF020400),\n        inverseOnSurface = Color(0xFFffe3c4),\n        outline = Color(0xFF70787c),\n        surfaceContainerLowest = Color(0xFFe2e8ec),\n        surfaceContainerLow = Color(0xFFe5ecf1),\n        surfaceContainer = Color(0xFFe8eff5), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFedf4fA),\n        surfaceContainerHighest = Color(0xFFf5faff),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/YinYangColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Yin & Yang theme\n * Original color scheme by Riztard\n * M3 colors generated by yours truly + tweaked manually\n */\ninternal object YinYangColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFFFFFFF),\n        onPrimary = Color(0xFF5A5A5A),\n        primaryContainer = Color(0xFFFFFFFF),\n        onPrimaryContainer = Color(0xFF000000),\n        inversePrimary = Color(0xFFCECECE),\n        secondary = Color(0xFFFFFFFF), // Unread badge\n        onSecondary = Color(0xFF5A5A5A), // Unread badge text\n        secondaryContainer = Color(0xFF717171), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFE4E4E4), // Navigation bar selector icon\n        tertiary = Color(0xFF000000), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFF00419E),\n        onTertiaryContainer = Color(0xFFD8E2FF),\n        background = Color(0xFF1E1E1E),\n        onBackground = Color(0xFFE6E6E6),\n        surface = Color(0xFF1E1E1E),\n        onSurface = Color(0xFFE6E6E6),\n        surfaceVariant = Color(0xFF313131), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFD1D1D1),\n        surfaceTint = Color(0xFFFFFFFF),\n        inverseSurface = Color(0xFFE6E6E6),\n        inverseOnSurface = Color(0xFF1E1E1E),\n        outline = Color(0xFF999999),\n        surfaceContainerLowest = Color(0xFF2A2A2A),\n        surfaceContainerLow = Color(0xFF2D2D2D),\n        surfaceContainer = Color(0xFF313131), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF383838),\n        surfaceContainerHighest = Color(0xFF3F3F3F),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFF000000),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFF000000),\n        onPrimaryContainer = Color(0xFFFFFFFF),\n        inversePrimary = Color(0xFFA6A6A6),\n        secondary = Color(0xFF000000), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFFDDDDDD), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF0C0C0C), // Navigation bar selector icon\n        tertiary = Color(0xFFFFFFFF), // Downloaded badge\n        onTertiary = Color(0xFF000000), // Downloaded badge text\n        tertiaryContainer = Color(0xFFD8E2FF),\n        onTertiaryContainer = Color(0xFF001947),\n        background = Color(0xFFFDFDFD),\n        onBackground = Color(0xFF222222),\n        surface = Color(0xFFFDFDFD),\n        onSurface = Color(0xFF222222),\n        surfaceVariant = Color(0xFFE8E8E8), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF515151),\n        surfaceTint = Color(0xFF000000),\n        inverseSurface = Color(0xFF333333),\n        inverseOnSurface = Color(0xFFF4F4F4),\n        outline = Color(0xFF838383),\n        surfaceContainerLowest = Color(0xFFCFCFCF),\n        surfaceContainerLow = Color(0xFFDADADA),\n        surfaceContainer = Color(0xFFE8E8E8), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFECECEC),\n        surfaceContainerHighest = Color(0xFFEFEFEF),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/theme/colorscheme/YotsubaColorScheme.kt",
    "content": "package eu.kanade.presentation.theme.colorscheme\n\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.ui.graphics.Color\n\n/**\n * Colors for Yotsuba theme\n * Original color scheme by ztimms73\n * M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n *\n * Key colors:\n * Primary 0xFFAE3200\n * Secondary 0xFFAE3200\n * Tertiary 0xFF6B5E2F\n * Neutral 0xFF655C5A\n */\ninternal object YotsubaColorScheme : BaseColorScheme() {\n\n    override val darkScheme = darkColorScheme(\n        primary = Color(0xFFFFB59D),\n        onPrimary = Color(0xFF5F1600),\n        primaryContainer = Color(0xFF862200),\n        onPrimaryContainer = Color(0xFFFFDBCF),\n        inversePrimary = Color(0xFFAE3200),\n        secondary = Color(0xFFFFB59D), // Unread badge\n        onSecondary = Color(0xFF5F1600), // Unread badge text\n        secondaryContainer = Color(0xFF862200), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFFFFDBCF), // Navigation bar selector icon\n        tertiary = Color(0xFFD7C68D), // Downloaded badge\n        onTertiary = Color(0xFF3A2F05), // Downloaded badge text\n        tertiaryContainer = Color(0xFF524619),\n        onTertiaryContainer = Color(0xFFF5E2A7),\n        background = Color(0xFF211A18),\n        onBackground = Color(0xFFEDE0DD),\n        surface = Color(0xFF211A18),\n        onSurface = Color(0xFFEDE0DD),\n        surfaceVariant = Color(0xFF332723), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFFD8C2BC),\n        surfaceTint = Color(0xFFFFB59D),\n        inverseSurface = Color(0xFFEDE0DD),\n        inverseOnSurface = Color(0xFF211A18),\n        outline = Color(0xFFA08C87),\n        surfaceContainerLowest = Color(0xFF2E221F),\n        surfaceContainerLow = Color(0xFF312521),\n        surfaceContainer = Color(0xFF332723), // Navigation bar background\n        surfaceContainerHigh = Color(0xFF413531),\n        surfaceContainerHighest = Color(0xFF4C403D),\n    )\n\n    override val lightScheme = lightColorScheme(\n        primary = Color(0xFFAE3200),\n        onPrimary = Color(0xFFFFFFFF),\n        primaryContainer = Color(0xFFFFDBCF),\n        onPrimaryContainer = Color(0xFF3B0A00),\n        inversePrimary = Color(0xFFFFB59D),\n        secondary = Color(0xFFAE3200), // Unread badge\n        onSecondary = Color(0xFFFFFFFF), // Unread badge text\n        secondaryContainer = Color(0xFFEBCDC2), // Navigation bar selector pill & progress indicator (remaining)\n        onSecondaryContainer = Color(0xFF3B0A00), // Navigation bar selector icon\n        tertiary = Color(0xFF6B5E2F), // Downloaded badge\n        onTertiary = Color(0xFFFFFFFF), // Downloaded badge text\n        tertiaryContainer = Color(0xFFF5E2A7),\n        onTertiaryContainer = Color(0xFF231B00),\n        background = Color(0xFFFCFCFC),\n        onBackground = Color(0xFF211A18),\n        surface = Color(0xFFFCFCFC),\n        onSurface = Color(0xFF211A18),\n        surfaceVariant = Color(0xFFF6EBE7), // Navigation bar background (ThemePrefWidget)\n        onSurfaceVariant = Color(0xFF53433F),\n        surfaceTint = Color(0xFFAE3200),\n        inverseSurface = Color(0xFF362F2D),\n        inverseOnSurface = Color(0xFFFBEEEB),\n        outline = Color(0xFF85736E),\n        surfaceContainerLowest = Color(0xFFECE3E0),\n        surfaceContainerLow = Color(0xFFF1E7E4),\n        surfaceContainer = Color(0xFFF6EBE7), // Navigation bar background\n        surfaceContainerHigh = Color(0xFFFAF4F2),\n        surfaceContainerHighest = Color(0xFFFBF6F4),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt",
    "content": "package eu.kanade.presentation.track\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxScope\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.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.selection.selectable\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material3.DatePicker\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.RadioButton\nimport androidx.compose.material3.SelectableDates\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.minimumInteractiveComponentSize\nimport androidx.compose.material3.rememberDatePickerState\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.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.dp\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.WheelNumberPicker\nimport tachiyomi.presentation.core.components.WheelTextPicker\nimport tachiyomi.presentation.core.components.material.AlertDialogContent\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun TrackStatusSelector(\n    selection: Long,\n    onSelectionChange: (Long) -> Unit,\n    selections: Map<Long, StringResource?>,\n    onConfirm: () -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    BaseSelector(\n        title = stringResource(MR.strings.status),\n        content = {\n            val state = rememberLazyListState()\n            ScrollbarLazyColumn(state = state) {\n                selections.forEach { (key, value) ->\n                    val isSelected = selection == key\n                    item {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            modifier = Modifier\n                                .clip(RoundedCornerShape(8.dp))\n                                .selectable(\n                                    selected = isSelected,\n                                    onClick = { onSelectionChange(key) },\n                                )\n                                .fillMaxWidth()\n                                .minimumInteractiveComponentSize(),\n                        ) {\n                            RadioButton(\n                                selected = isSelected,\n                                onClick = null,\n                            )\n                            Text(\n                                text = value?.let { stringResource(it) } ?: \"\",\n                                style = MaterialTheme.typography.bodyLarge.merge(),\n                                modifier = Modifier.padding(start = 24.dp),\n                            )\n                        }\n                    }\n                }\n            }\n            if (state.canScrollBackward) HorizontalDivider(modifier = Modifier.align(Alignment.TopCenter))\n            if (state.canScrollForward) HorizontalDivider(modifier = Modifier.align(Alignment.BottomCenter))\n        },\n        onConfirm = onConfirm,\n        onDismissRequest = onDismissRequest,\n    )\n}\n\n@Composable\nfun TrackItemSelector(\n    selection: Int,\n    onSelectionChange: (Int) -> Unit,\n    range: Iterable<Int>,\n    onConfirm: () -> Unit,\n    onDismissRequest: () -> Unit,\n    isManga: Boolean,\n) {\n    val titleText = if (isManga) MR.strings.chapters else AYMR.strings.episodes\n    BaseSelector(\n        title = stringResource(titleText),\n        content = {\n            WheelNumberPicker(\n                items = range.toImmutableList(),\n                modifier = Modifier.align(Alignment.Center),\n                startIndex = selection,\n                onSelectionChanged = { onSelectionChange(it) },\n            )\n        },\n        onConfirm = onConfirm,\n        onDismissRequest = onDismissRequest,\n    )\n}\n\n@Composable\nfun TrackScoreSelector(\n    selection: String,\n    onSelectionChange: (String) -> Unit,\n    selections: ImmutableList<String>,\n    onConfirm: () -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    BaseSelector(\n        title = stringResource(MR.strings.score),\n        content = {\n            WheelTextPicker(\n                items = selections,\n                modifier = Modifier.align(Alignment.Center),\n                startIndex = selections.indexOf(selection).takeIf { it > 0 } ?: (selections.size / 2),\n                onSelectionChanged = { onSelectionChange(selections[it]) },\n            )\n        },\n        onConfirm = onConfirm,\n        onDismissRequest = onDismissRequest,\n    )\n}\n\n@Composable\nfun TrackDateSelector(\n    title: String,\n    initialSelectedDateMillis: Long,\n    selectableDates: SelectableDates,\n    onConfirm: (Long) -> Unit,\n    onRemove: (() -> Unit)?,\n    onDismissRequest: () -> Unit,\n) {\n    val pickerState = rememberDatePickerState(\n        initialSelectedDateMillis = initialSelectedDateMillis,\n        selectableDates = selectableDates,\n    )\n    AlertDialogContent(\n        modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),\n        title = { Text(text = title) },\n        content = {\n            Column {\n                DatePicker(\n                    state = pickerState,\n                    title = null,\n                    headline = null,\n                    showModeToggle = false,\n                )\n                Row(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .padding(start = 12.dp, top = 8.dp, end = 12.dp, bottom = 24.dp),\n                    horizontalArrangement = Arrangement.spacedBy(\n                        MaterialTheme.padding.small,\n                        Alignment.End,\n                    ),\n                ) {\n                    if (onRemove != null) {\n                        TextButton(onClick = onRemove) {\n                            Text(text = stringResource(MR.strings.action_remove))\n                        }\n                        Spacer(modifier = Modifier.weight(1f))\n                    }\n                    TextButton(onClick = onDismissRequest) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    TextButton(onClick = { onConfirm(pickerState.selectedDateMillis!!) }) {\n                        Text(text = stringResource(MR.strings.action_ok))\n                    }\n                }\n            }\n        },\n    )\n}\n\n@Composable\nfun BaseSelector(\n    title: String,\n    content: @Composable BoxScope.() -> Unit,\n    onConfirm: () -> Unit,\n    onDismissRequest: () -> Unit,\n    thirdButton: @Composable (RowScope.() -> Unit)? = null,\n) {\n    AlertDialogContent(\n        modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),\n        title = { Text(text = title) },\n        text = {\n            Box(\n                modifier = Modifier.fillMaxWidth(),\n                content = content,\n            )\n        },\n        buttons = {\n            Row(\n                modifier = Modifier.fillMaxWidth(),\n                horizontalArrangement = Arrangement.spacedBy(\n                    MaterialTheme.padding.small,\n                    Alignment.End,\n                ),\n            ) {\n                if (thirdButton != null) {\n                    thirdButton()\n                    Spacer(modifier = Modifier.weight(1f))\n                }\n                TextButton(onClick = onDismissRequest) {\n                    Text(text = stringResource(MR.strings.action_cancel))\n                }\n                TextButton(onClick = onConfirm) {\n                    Text(text = stringResource(MR.strings.action_ok))\n                }\n            }\n        },\n    )\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TrackStatusSelectorPreviews() {\n    TachiyomiPreviewTheme {\n        Surface {\n            TrackStatusSelector(\n                selection = 1,\n                onSelectionChange = {},\n                selections = persistentMapOf(\n                    // Anilist values\n                    1L to MR.strings.reading,\n                    2L to MR.strings.plan_to_read,\n                    3L to MR.strings.completed,\n                    4L to MR.strings.on_hold,\n                    5L to MR.strings.dropped,\n                    6L to MR.strings.repeating,\n                    7L to AYMR.strings.watching,\n                    8L to AYMR.strings.plan_to_watch,\n                ),\n                onConfirm = {},\n                onDismissRequest = {},\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackInfoDialogHome.kt",
    "content": "package eu.kanade.presentation.track.anime\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.IntrinsicSize\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.absoluteOffset\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.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\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.filled.VisibilityOff\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.BadgedBox\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.VerticalDivider\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.track.components.TrackLogoIcon\nimport eu.kanade.presentation.track.manga.TrackDetailsItem\nimport eu.kanade.presentation.track.manga.TrackInfoItemMenu\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.ui.entries.anime.track.AnimeTrackItem\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.format.DateTimeFormatter\n\n@Composable\nfun AnimeTrackInfoDialogHome(\n    trackItems: List<AnimeTrackItem>,\n    dateFormat: DateTimeFormatter,\n    onStatusClick: (AnimeTrackItem) -> Unit,\n    onEpisodeClick: (AnimeTrackItem) -> Unit,\n    onScoreClick: (AnimeTrackItem) -> Unit,\n    onStartDateEdit: (AnimeTrackItem) -> Unit,\n    onEndDateEdit: (AnimeTrackItem) -> Unit,\n    onNewSearch: (AnimeTrackItem) -> Unit,\n    onOpenInBrowser: (AnimeTrackItem) -> Unit,\n    onRemoved: (AnimeTrackItem) -> Unit,\n    onCopyLink: (AnimeTrackItem) -> Unit,\n    onTogglePrivate: (AnimeTrackItem) -> Unit,\n) {\n    Column(\n        modifier = Modifier\n            .animateContentSize()\n            .fillMaxWidth()\n            .verticalScroll(rememberScrollState())\n            .padding(16.dp)\n            .windowInsetsPadding(WindowInsets.systemBars),\n        verticalArrangement = Arrangement.spacedBy(24.dp),\n    ) {\n        trackItems.forEach { item ->\n            if (item.track != null) {\n                val supportsScoring = item.tracker.animeService.getScoreList().isNotEmpty()\n                val supportsReadingDates = item.tracker.supportsReadingDates\n                val supportsPrivate = item.tracker.supportsPrivateTracking\n                TrackInfoItem(\n                    title = item.track.title,\n                    tracker = item.tracker,\n                    status = (item.tracker as? AnimeTracker)?.getStatusForAnime(item.track.status),\n                    onStatusClick = { onStatusClick(item) },\n                    episodes = \"${item.track.lastEpisodeSeen.toInt()}\".let {\n                        val totalEpisodes = item.track.totalEpisodes\n                        if (totalEpisodes > 0) {\n                            // Add known total episode count\n                            \"$it / $totalEpisodes\"\n                        } else {\n                            it\n                        }\n                    },\n                    onEpisodesClick = { onEpisodeClick(item) },\n                    score = item.tracker.animeService.displayScore(item.track)\n                        .takeIf { supportsScoring && item.track.score != 0.0 },\n                    onScoreClick = { onScoreClick(item) }\n                        .takeIf { supportsScoring },\n                    startDate = remember(item.track.startDate) {\n                        dateFormat.format(\n                            item.track.startDate.toLocalDate(),\n                        )\n                    }\n                        .takeIf { supportsReadingDates && item.track.startDate != 0L },\n                    onStartDateClick = { onStartDateEdit(item) } // TODO\n                        .takeIf { supportsReadingDates },\n                    endDate = dateFormat.format(item.track.finishDate.toLocalDate())\n                        .takeIf { supportsReadingDates && item.track.finishDate != 0L },\n                    onEndDateClick = { onEndDateEdit(item) }\n                        .takeIf { supportsReadingDates },\n                    onNewSearch = { onNewSearch(item) },\n                    onOpenInBrowser = { onOpenInBrowser(item) },\n                    onRemoved = { onRemoved(item) },\n                    onCopyLink = { onCopyLink(item) },\n                    private = item.track.private,\n                    onTogglePrivate = { onTogglePrivate(item) }\n                        .takeIf { supportsPrivate },\n                )\n            } else {\n                TrackInfoItemEmpty(\n                    tracker = item.tracker,\n                    onNewSearch = { onNewSearch(item) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun TrackInfoItem(\n    title: String,\n    tracker: Tracker,\n    status: StringResource?,\n    onStatusClick: () -> Unit,\n    episodes: String,\n    onEpisodesClick: () -> Unit,\n    score: String?,\n    onScoreClick: (() -> Unit)?,\n    startDate: String?,\n    onStartDateClick: (() -> Unit)?,\n    endDate: String?,\n    onEndDateClick: (() -> Unit)?,\n    onNewSearch: () -> Unit,\n    onOpenInBrowser: () -> Unit,\n    onRemoved: () -> Unit,\n    onCopyLink: () -> Unit,\n    private: Boolean,\n    onTogglePrivate: (() -> Unit)?,\n) {\n    val context = LocalContext.current\n    Column {\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            BadgedBox(\n                badge = {\n                    if (private) {\n                        Badge(\n                            containerColor = MaterialTheme.colorScheme.primary,\n                            contentColor = MaterialTheme.colorScheme.onPrimary,\n                            modifier = Modifier.absoluteOffset(x = (-5).dp),\n                        ) {\n                            Icon(\n                                imageVector = Icons.Filled.VisibilityOff,\n                                contentDescription = stringResource(MR.strings.tracked_privately),\n                                modifier = Modifier.size(14.dp),\n                            )\n                        }\n                    }\n                },\n            ) {\n                TrackLogoIcon(\n                    tracker = tracker,\n                    onClick = onOpenInBrowser,\n                    onLongClick = onCopyLink,\n                )\n            }\n            Box(\n                modifier = Modifier\n                    .height(48.dp)\n                    .weight(1f)\n                    .combinedClickable(\n                        onClick = onNewSearch,\n                        onLongClick = {\n                            context.copyToClipboard(title, title)\n                        },\n                    )\n                    .padding(start = 16.dp),\n                contentAlignment = Alignment.CenterStart,\n            ) {\n                Text(\n                    text = title,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    style = MaterialTheme.typography.titleMedium,\n                    color = MaterialTheme.colorScheme.onSurface,\n                )\n            }\n            VerticalDivider()\n            TrackInfoItemMenu(\n                onOpenInBrowser = onOpenInBrowser,\n                onRemoved = onRemoved,\n                onCopyLink = onCopyLink,\n                private = private,\n                onTogglePrivate = onTogglePrivate,\n            )\n        }\n\n        Box(\n            modifier = Modifier\n                .padding(top = 12.dp)\n                .clip(MaterialTheme.shapes.medium)\n                .background(MaterialTheme.colorScheme.surfaceContainerHighest)\n                .padding(8.dp)\n                .clip(RoundedCornerShape(6.dp)),\n        ) {\n            Column {\n                Row(modifier = Modifier.height(IntrinsicSize.Min)) {\n                    TrackDetailsItem(\n                        modifier = Modifier.weight(1f),\n                        text = status?.let { stringResource(it) } ?: \"\",\n                        onClick = onStatusClick,\n                    )\n                    VerticalDivider()\n                    TrackDetailsItem(\n                        modifier = Modifier.weight(1f),\n                        text = episodes,\n                        onClick = onEpisodesClick,\n                    )\n                    if (onScoreClick != null) {\n                        VerticalDivider()\n                        TrackDetailsItem(\n                            modifier = Modifier.weight(1f),\n                            text = score,\n                            placeholder = stringResource(MR.strings.score),\n                            onClick = onScoreClick,\n                        )\n                    }\n                }\n\n                if (onStartDateClick != null && onEndDateClick != null) {\n                    HorizontalDivider()\n                    Row(modifier = Modifier.height(IntrinsicSize.Min)) {\n                        TrackDetailsItem(\n                            modifier = Modifier.weight(1F),\n                            text = startDate,\n                            placeholder = stringResource(MR.strings.track_started_reading_date),\n                            onClick = onStartDateClick,\n                        )\n                        VerticalDivider()\n                        TrackDetailsItem(\n                            modifier = Modifier.weight(1F),\n                            text = endDate,\n                            placeholder = stringResource(MR.strings.track_finished_reading_date),\n                            onClick = onEndDateClick,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun TrackInfoItemEmpty(\n    tracker: Tracker,\n    onNewSearch: () -> Unit,\n) {\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        TrackLogoIcon(tracker)\n        TextButton(\n            onClick = onNewSearch,\n            modifier = Modifier\n                .padding(start = 16.dp)\n                .weight(1f),\n        ) {\n            Text(text = stringResource(MR.strings.add_tracking))\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TrackInfoDialogHomePreviews(\n    @PreviewParameter(AnimeTrackInfoDialogHomePreviewProvider::class)\n    content: @Composable () -> Unit,\n) {\n    TachiyomiPreviewTheme { content() }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackInfoDialogHomePreviewProvider.kt",
    "content": "package eu.kanade.presentation.track.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport eu.kanade.tachiyomi.ui.entries.anime.track.AnimeTrackItem\nimport eu.kanade.test.DummyTracker\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport java.time.format.DateTimeFormatter\nimport java.time.format.FormatStyle\n\ninternal class AnimeTrackInfoDialogHomePreviewProvider :\n    PreviewParameterProvider<@Composable () -> Unit> {\n\n    private val aTrack = AnimeTrack(\n        id = 1L,\n        animeId = 2L,\n        trackerId = 3L,\n        remoteId = 4L,\n        libraryId = null,\n        title = \"Manage Name On Tracker Site\",\n        lastEpisodeSeen = 2.0,\n        totalEpisodes = 12L,\n        status = 1L,\n        score = 2.0,\n        remoteUrl = \"https://example.com\",\n        startDate = 0L,\n        finishDate = 0L,\n        private = false,\n    )\n    private val privateTrack = aTrack.copy(private = true)\n    private val trackItemWithoutTrack = AnimeTrackItem(\n        track = null,\n        tracker = DummyTracker(\n            id = 1L,\n            name = \"Example Tracker\",\n        ),\n    )\n    private val trackItemWithTrack = AnimeTrackItem(\n        track = aTrack,\n        tracker = DummyTracker(\n            id = 2L,\n            name = \"Example Tracker 2\",\n        ),\n    )\n    private val trackItemWithPrivateTrack = AnimeTrackItem(\n        track = privateTrack,\n        tracker = DummyTracker(\n            id = 2L,\n            name = \"Example Tracker 2\",\n        ),\n    )\n\n    private val trackersWithAndWithoutTrack = @Composable {\n        AnimeTrackInfoDialogHome(\n            trackItems = listOf(\n                trackItemWithoutTrack,\n                trackItemWithTrack,\n            ),\n            dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM),\n            onStatusClick = {},\n            onEpisodeClick = {},\n            onScoreClick = {},\n            onStartDateEdit = {},\n            onEndDateEdit = {},\n            onNewSearch = {},\n            onOpenInBrowser = {},\n            onRemoved = {},\n            onCopyLink = {},\n            onTogglePrivate = {},\n        )\n    }\n\n    private val noTrackers = @Composable {\n        AnimeTrackInfoDialogHome(\n            trackItems = listOf(),\n            dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM),\n            onStatusClick = {},\n            onEpisodeClick = {},\n            onScoreClick = {},\n            onStartDateEdit = {},\n            onEndDateEdit = {},\n            onNewSearch = {},\n            onOpenInBrowser = {},\n            onRemoved = {},\n            onCopyLink = {},\n            onTogglePrivate = {},\n        )\n    }\n\n    private val trackerWithPrivateTracking = @Composable {\n        AnimeTrackInfoDialogHome(\n            trackItems = listOf(trackItemWithPrivateTrack),\n            dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM),\n            onStatusClick = {},\n            onEpisodeClick = {},\n            onScoreClick = {},\n            onStartDateEdit = {},\n            onEndDateEdit = {},\n            onNewSearch = {},\n            onOpenInBrowser = {},\n            onRemoved = {},\n            onCopyLink = {},\n            onTogglePrivate = {},\n        )\n    }\n\n    override val values: Sequence<@Composable () -> Unit>\n        get() = sequenceOf(\n            trackersWithAndWithoutTrack,\n            noTrackers,\n            trackerWithPrivateTracking,\n        )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackerSearch.kt",
    "content": "package eu.kanade.presentation.track.anime\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutVertically\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.combinedClickable\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.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.WindowInsets\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.paddingFromBaseline\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.text.BasicTextField\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.foundation.text.input.TextFieldLineLimits\nimport androidx.compose.foundation.text.input.TextFieldState\nimport androidx.compose.foundation.text.input.clearText\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ArrowBack\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.VisibilityOff\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.runtime.Composable\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.clip\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.platform.ClipboardManager\nimport androidx.compose.ui.platform.LocalClipboardManager\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalFocusManager\nimport androidx.compose.ui.text.AnnotatedString\nimport androidx.compose.ui.text.capitalize\nimport androidx.compose.ui.text.input.ImeAction\nimport androidx.compose.ui.text.intl.Locale\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.text.toLowerCase\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.presentation.core.util.runOnEnterKeyPressed\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun AnimeTrackerSearch(\n    state: TextFieldState,\n    onDispatchQuery: () -> Unit,\n    queryResult: Result<List<AnimeTrackSearch>>?,\n    selected: AnimeTrackSearch?,\n    onSelectedChange: (AnimeTrackSearch) -> Unit,\n    onConfirmSelection: (private: Boolean) -> Unit,\n    onDismissRequest: () -> Unit,\n    supportsPrivateTracking: Boolean,\n) {\n    val focusManager = LocalFocusManager.current\n    val focusRequester = remember { FocusRequester() }\n    val dispatchQueryAndClearFocus: () -> Unit = {\n        onDispatchQuery()\n        focusManager.clearFocus()\n    }\n\n    Scaffold(\n        topBar = {\n            Column {\n                TopAppBar(\n                    navigationIcon = {\n                        IconButton(onClick = onDismissRequest) {\n                            Icon(\n                                imageVector = Icons.AutoMirrored.Outlined.ArrowBack,\n                                contentDescription = null,\n                                tint = MaterialTheme.colorScheme.onSurfaceVariant,\n                            )\n                        }\n                    },\n                    title = {\n                        BasicTextField(\n                            state = state,\n                            modifier = Modifier\n                                .fillMaxWidth()\n                                .focusRequester(focusRequester)\n                                .runOnEnterKeyPressed(action = dispatchQueryAndClearFocus),\n                            textStyle = MaterialTheme.typography.bodyLarge\n                                .copy(color = MaterialTheme.colorScheme.onSurface),\n                            lineLimits = TextFieldLineLimits.SingleLine,\n                            keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),\n                            onKeyboardAction = { dispatchQueryAndClearFocus() },\n                            cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),\n                            decorator = {\n                                if (state.text.isEmpty()) {\n                                    Text(\n                                        text = stringResource(MR.strings.action_search_hint),\n                                        color = MaterialTheme.colorScheme.onSurfaceVariant,\n                                        style = MaterialTheme.typography.bodyLarge,\n                                    )\n                                }\n                                it()\n                            },\n                        )\n                    },\n                    actions = {\n                        if (state.text.isNotEmpty()) {\n                            IconButton(\n                                onClick = {\n                                    state.clearText()\n                                    focusRequester.requestFocus()\n                                },\n                            ) {\n                                Icon(\n                                    imageVector = Icons.Default.Close,\n                                    contentDescription = null,\n                                    tint = MaterialTheme.colorScheme.onSurfaceVariant,\n                                )\n                            }\n                        }\n                    },\n                )\n                HorizontalDivider()\n            }\n        },\n        bottomBar = {\n            AnimatedVisibility(\n                visible = selected != null,\n                enter = fadeIn() + slideInVertically { it / 2 },\n                exit = slideOutVertically { it / 2 } + fadeOut(),\n            ) {\n                Row(\n                    modifier = Modifier\n                        .padding(MaterialTheme.padding.small)\n                        .windowInsetsPadding(WindowInsets.navigationBars)\n                        .fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                ) {\n                    Button(\n                        onClick = { onConfirmSelection(false) },\n                        modifier = Modifier.weight(1f),\n                        elevation = ButtonDefaults.elevatedButtonElevation(),\n                    ) {\n                        Text(text = stringResource(MR.strings.action_track))\n                    }\n                    if (supportsPrivateTracking) {\n                        Button(\n                            onClick = { onConfirmSelection(true) },\n                            elevation = ButtonDefaults.elevatedButtonElevation(),\n                        ) {\n                            Icon(\n                                imageVector = Icons.Filled.VisibilityOff,\n                                contentDescription = stringResource(MR.strings.action_toggle_private_on),\n                            )\n                        }\n                    }\n                }\n            }\n        },\n    ) { innerPadding ->\n        if (queryResult == null) {\n            LoadingScreen(modifier = Modifier.padding(innerPadding))\n        } else {\n            val availableTracks = queryResult.getOrNull()\n            if (availableTracks != null) {\n                if (availableTracks.isEmpty()) {\n                    EmptyScreen(\n                        modifier = Modifier.padding(innerPadding),\n                        stringRes = MR.strings.no_results_found,\n                    )\n                } else {\n                    ScrollbarLazyColumn(\n                        contentPadding = innerPadding + PaddingValues(vertical = 12.dp),\n                        verticalArrangement = Arrangement.spacedBy(12.dp),\n                    ) {\n                        items(\n                            items = availableTracks,\n                            key = { it.hashCode() },\n                        ) {\n                            SearchResultItem(\n                                trackSearch = it,\n                                selected = it == selected,\n                                onClick = { onSelectedChange(it) },\n                            )\n                        }\n                    }\n                }\n            } else {\n                EmptyScreen(\n                    modifier = Modifier.padding(innerPadding),\n                    message = queryResult.exceptionOrNull()?.message\n                        ?: stringResource(MR.strings.unknown_error),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SearchResultItem(\n    trackSearch: AnimeTrackSearch,\n    selected: Boolean,\n    onClick: () -> Unit,\n) {\n    val context = LocalContext.current\n    val clipboardManager: ClipboardManager = LocalClipboardManager.current\n    val focusManager = LocalFocusManager.current\n    val type = trackSearch.publishing_type.toLowerCase(Locale.current).capitalize(Locale.current)\n    val status = trackSearch.publishing_status.toLowerCase(Locale.current).capitalize(Locale.current)\n    val description = trackSearch.summary.trim()\n    val shape = RoundedCornerShape(16.dp)\n    val borderColor = if (selected) MaterialTheme.colorScheme.outline else Color.Transparent\n    var dropDownMenuExpanded by remember { mutableStateOf(false) }\n    Box(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(horizontal = 12.dp)\n            .clip(shape)\n            .background(MaterialTheme.colorScheme.surface)\n            .border(\n                width = 2.dp,\n                color = borderColor,\n                shape = shape,\n            )\n            .combinedClickable(\n                onLongClick = { dropDownMenuExpanded = true },\n                onClick = {\n                    focusManager.clearFocus()\n                    onClick()\n                },\n            )\n            .padding(12.dp),\n    ) {\n        if (selected) {\n            Icon(\n                imageVector = Icons.Filled.CheckCircle,\n                contentDescription = null,\n                modifier = Modifier.align(Alignment.TopEnd),\n                tint = MaterialTheme.colorScheme.primary,\n            )\n        }\n        Column {\n            Row {\n                ItemCover.Book(\n                    data = trackSearch.cover_url,\n                    modifier = Modifier.height(96.dp),\n                )\n                Spacer(modifier = Modifier.width(12.dp))\n                Column {\n                    Text(\n                        text = trackSearch.title,\n                        modifier = Modifier.padding(end = 28.dp),\n                        maxLines = 2,\n                        overflow = TextOverflow.Ellipsis,\n                        style = MaterialTheme.typography.titleMedium,\n                    )\n                    SearchResultItemDropDownMenu(\n                        expanded = dropDownMenuExpanded,\n                        onCollapseMenu = { dropDownMenuExpanded = false },\n                        onCopyName = {\n                            clipboardManager.setText(AnnotatedString(trackSearch.title))\n                        },\n                        onOpenInBrowser = {\n                            val url = trackSearch.tracking_url\n                            if (url.isNotBlank()) {\n                                context.openInBrowser(url)\n                            }\n                        },\n                    )\n                    if (trackSearch.authors.isNotEmpty() || trackSearch.artists.isNotEmpty()) {\n                        Text(\n                            text = (trackSearch.authors + trackSearch.artists).distinct().joinToString(),\n                            modifier = Modifier.secondaryItemAlpha(),\n                            maxLines = 1,\n                            overflow = TextOverflow.Ellipsis,\n                            style = MaterialTheme.typography.bodySmall,\n                        )\n                    }\n                    if (type.isNotBlank()) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.track_type),\n                            text = type,\n                        )\n                    }\n                    if (trackSearch.start_date.isNotBlank()) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.label_started),\n                            text = trackSearch.start_date,\n                        )\n                    }\n                    if (status.isNotBlank()) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.track_status),\n                            text = status,\n                        )\n                    }\n                    if (trackSearch.score != -1.0) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.score),\n                            text = trackSearch.score.toString(),\n                        )\n                    }\n                }\n            }\n            if (description.isNotBlank()) {\n                Text(\n                    text = description,\n                    modifier = Modifier\n                        .paddingFromBaseline(top = 24.dp)\n                        .secondaryItemAlpha(),\n                    maxLines = 4,\n                    overflow = TextOverflow.Ellipsis,\n                    style = MaterialTheme.typography.bodySmall,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SearchResultItemDropDownMenu(\n    expanded: Boolean,\n    onCollapseMenu: () -> Unit,\n    onCopyName: () -> Unit,\n    onOpenInBrowser: () -> Unit,\n) {\n    DropdownMenu(\n        expanded = expanded,\n        onDismissRequest = onCollapseMenu,\n    ) {\n        DropdownMenuItem(\n            text = { Text(stringResource(MR.strings.action_copy_to_clipboard)) },\n            onClick = {\n                onCopyName()\n                onCollapseMenu()\n            },\n        )\n        DropdownMenuItem(\n            text = { Text(stringResource(MR.strings.action_open_in_browser)) },\n            onClick = {\n                onOpenInBrowser()\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun SearchResultItemDetails(\n    title: String,\n    text: String,\n) {\n    Row(horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall)) {\n        Text(\n            text = title,\n            maxLines = 1,\n            style = MaterialTheme.typography.titleSmall,\n        )\n        Text(\n            text = text,\n            modifier = Modifier\n                .weight(1f)\n                .secondaryItemAlpha(),\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TrackerSearchPreviews(\n    @PreviewParameter(AnimeTrackerSearchPreviewProvider::class)\n    content: @Composable () -> Unit,\n) {\n    TachiyomiPreviewTheme {\n        Surface {\n            content()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackerSearchPreviewProvider.kt",
    "content": "package eu.kanade.presentation.track.anime\n\nimport androidx.compose.foundation.text.input.TextFieldState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport androidx.compose.ui.tooling.preview.datasource.LoremIpsum\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport java.text.SimpleDateFormat\nimport java.time.Instant\nimport java.time.temporal.ChronoUnit\nimport java.util.Date\nimport java.util.Locale\nimport kotlin.random.Random\n\ninternal class AnimeTrackerSearchPreviewProvider : PreviewParameterProvider<@Composable () -> Unit> {\n    private val fullPageWithSecondSelected = @Composable {\n        val items = someTrackSearches().take(30).toList()\n        AnimeTrackerSearch(\n            state = TextFieldState(initialText = \"search text\"),\n            onDispatchQuery = {},\n            queryResult = Result.success(items),\n            selected = items[1],\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = false,\n        )\n    }\n    private val fullPageWithoutSelected = @Composable {\n        AnimeTrackerSearch(\n            state = TextFieldState(),\n            onDispatchQuery = {},\n            queryResult = Result.success(someTrackSearches().take(30).toList()),\n            selected = null,\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = false,\n        )\n    }\n    private val loading = @Composable {\n        AnimeTrackerSearch(\n            state = TextFieldState(),\n            onDispatchQuery = {},\n            queryResult = null,\n            selected = null,\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = false,\n        )\n    }\n    private val fullPageWithPrivateTracking = @Composable {\n        val items = someTrackSearches().take(30).toList()\n        AnimeTrackerSearch(\n            state = TextFieldState(initialText = \"search text\"),\n            onDispatchQuery = {},\n            queryResult = Result.success(items),\n            selected = items[1],\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = true,\n        )\n    }\n    override val values: Sequence<@Composable () -> Unit> = sequenceOf(\n        fullPageWithSecondSelected,\n        fullPageWithoutSelected,\n        loading,\n        fullPageWithPrivateTracking,\n    )\n\n    private fun someTrackSearches(): Sequence<AnimeTrackSearch> = sequence {\n        while (true) {\n            yield(randTrackSearch())\n        }\n    }\n\n    private val formatter: SimpleDateFormat = SimpleDateFormat(\"yyyy-MM-dd\", Locale.getDefault())\n\n    private fun randTrackSearch() = AnimeTrackSearch().let {\n        it.id = Random.nextLong()\n        it.anime_id = Random.nextLong()\n        it.tracker_id = Random.nextLong()\n        it.remote_id = Random.nextLong()\n        it.library_id = Random.nextLong()\n        it.title = lorem((1..10).random()).joinToString()\n        it.last_episode_seen = (0..100).random().toDouble()\n        it.total_episodes = (100L..1000L).random()\n        it.score = (0..10).random().toDouble()\n        it.status = Random.nextLong()\n        it.started_watching_date = 0L\n        it.finished_watching_date = 0L\n        it.tracking_url = \"https://example.com/tracker-example\"\n        it.cover_url = \"https://example.com/cover.png\"\n        it.start_date = formatter.format(Date.from(Instant.now().minus((1L..365).random(), ChronoUnit.DAYS)))\n        it.summary = lorem((0..40).random()).joinToString()\n        it.publishing_status = if (Random.nextBoolean()) \"Finished\" else \"\"\n        it.publishing_type = if (Random.nextBoolean()) \"OVA\" else \"\"\n        it.artists = randomNames()\n        it.authors = randomNames()\n        it\n    }\n\n    private fun randomNames(): List<String> = (0..(0..3).random()).map { lorem((3..5).random()).joinToString() }\n\n    private fun lorem(words: Int): Sequence<String> =\n        LoremIpsum(words).values\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIcon.kt",
    "content": "package eu.kanade.presentation.track.components\n\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\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.graphics.Color\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport tachiyomi.presentation.core.util.clickableNoIndication\n\n@Composable\nfun TrackLogoIcon(\n    tracker: Tracker,\n    onClick: (() -> Unit)? = null,\n    onLongClick: (() -> Unit)? = null,\n) {\n    val modifier = if (onClick != null) {\n        Modifier.clickableNoIndication(onClick = onClick, onLongClick = onLongClick)\n    } else {\n        Modifier\n    }\n\n    Box(\n        modifier = modifier\n            .size(48.dp)\n            .background(color = Color(tracker.getLogoColor()), shape = MaterialTheme.shapes.medium)\n            .padding(4.dp),\n        contentAlignment = Alignment.Center,\n    ) {\n        Image(\n            painter = painterResource(tracker.getLogo()),\n            contentDescription = tracker.name,\n        )\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TrackLogoIconPreviews(\n    @PreviewParameter(TrackLogoIconPreviewProvider::class)\n    tracker: Tracker,\n) {\n    TachiyomiPreviewTheme {\n        TrackLogoIcon(\n            tracker = tracker,\n            onClick = null,\n            onLongClick = null,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIconPreviewProvider.kt",
    "content": "package eu.kanade.presentation.track.components\n\nimport android.graphics.Color\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.test.DummyTracker\n\ninternal class TrackLogoIconPreviewProvider : PreviewParameterProvider<Tracker> {\n\n    override val values: Sequence<Tracker>\n        get() = sequenceOf(\n            DummyTracker(\n                id = 1L,\n                name = \"Dummy Tracker\",\n                valLogoColor = Color.rgb(18, 25, 35),\n                valLogo = R.drawable.ic_tracker_anilist,\n            ),\n        )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackInfoDialogHome.kt",
    "content": "package eu.kanade.presentation.track.manga\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.IntrinsicSize\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.absoluteOffset\nimport androidx.compose.foundation.layout.fillMaxHeight\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.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.layout.wrapContentSize\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.filled.MoreVert\nimport androidx.compose.material.icons.filled.VisibilityOff\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.BadgedBox\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.VerticalDivider\nimport androidx.compose.runtime.Composable\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.draw.clip\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.presentation.track.components.TrackLogoIcon\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.ui.entries.manga.track.MangaTrackItem\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.format.DateTimeFormatter\n\n@Composable\nfun MangaTrackInfoDialogHome(\n    trackItems: List<MangaTrackItem>,\n    dateFormat: DateTimeFormatter,\n    onStatusClick: (MangaTrackItem) -> Unit,\n    onChapterClick: (MangaTrackItem) -> Unit,\n    onScoreClick: (MangaTrackItem) -> Unit,\n    onStartDateEdit: (MangaTrackItem) -> Unit,\n    onEndDateEdit: (MangaTrackItem) -> Unit,\n    onNewSearch: (MangaTrackItem) -> Unit,\n    onOpenInBrowser: (MangaTrackItem) -> Unit,\n    onRemoved: (MangaTrackItem) -> Unit,\n    onCopyLink: (MangaTrackItem) -> Unit,\n    onTogglePrivate: (MangaTrackItem) -> Unit,\n) {\n    Column(\n        modifier = Modifier\n            .animateContentSize()\n            .fillMaxWidth()\n            .verticalScroll(rememberScrollState())\n            .padding(16.dp)\n            .windowInsetsPadding(WindowInsets.systemBars),\n        verticalArrangement = Arrangement.spacedBy(24.dp),\n    ) {\n        trackItems.forEach { item ->\n            if (item.track != null) {\n                val supportsScoring = item.tracker.mangaService.getScoreList().isNotEmpty()\n                val supportsReadingDates = item.tracker.supportsReadingDates\n                val supportsPrivate = item.tracker.supportsPrivateTracking\n                TrackInfoItem(\n                    title = item.track.title,\n                    tracker = item.tracker,\n                    status = (item.tracker as? MangaTracker)?.getStatusForManga(item.track.status),\n                    onStatusClick = { onStatusClick(item) },\n                    chapters = \"${item.track.lastChapterRead.toInt()}\".let {\n                        val totalChapters = item.track.totalChapters\n                        if (totalChapters > 0) {\n                            // Add known total chapter count\n                            \"$it / $totalChapters\"\n                        } else {\n                            it\n                        }\n                    },\n                    onChaptersClick = { onChapterClick(item) },\n                    score = item.tracker.mangaService.displayScore(item.track)\n                        .takeIf { supportsScoring && item.track.score != 0.0 },\n                    onScoreClick = { onScoreClick(item) }\n                        .takeIf { supportsScoring },\n                    startDate = remember(item.track.startDate) {\n                        dateFormat.format(\n                            item.track.startDate.toLocalDate(),\n                        )\n                    }\n                        .takeIf { supportsReadingDates && item.track.startDate != 0L },\n                    onStartDateClick = { onStartDateEdit(item) } // TODO\n                        .takeIf { supportsReadingDates },\n                    endDate = dateFormat.format(item.track.finishDate.toLocalDate())\n                        .takeIf { supportsReadingDates && item.track.finishDate != 0L },\n                    onEndDateClick = { onEndDateEdit(item) }\n                        .takeIf { supportsReadingDates },\n                    onNewSearch = { onNewSearch(item) },\n                    onOpenInBrowser = { onOpenInBrowser(item) },\n                    onRemoved = { onRemoved(item) },\n                    onCopyLink = { onCopyLink(item) },\n                    private = item.track.private,\n                    onTogglePrivate = { onTogglePrivate(item) }\n                        .takeIf { supportsPrivate },\n                )\n            } else {\n                TrackInfoItemEmpty(\n                    tracker = item.tracker,\n                    onNewSearch = { onNewSearch(item) },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun TrackInfoItem(\n    title: String,\n    tracker: Tracker,\n    status: StringResource?,\n    onStatusClick: () -> Unit,\n    chapters: String,\n    onChaptersClick: () -> Unit,\n    score: String?,\n    onScoreClick: (() -> Unit)?,\n    startDate: String?,\n    onStartDateClick: (() -> Unit)?,\n    endDate: String?,\n    onEndDateClick: (() -> Unit)?,\n    onNewSearch: () -> Unit,\n    onOpenInBrowser: () -> Unit,\n    onRemoved: () -> Unit,\n    onCopyLink: () -> Unit,\n    private: Boolean,\n    onTogglePrivate: (() -> Unit)?,\n) {\n    val context = LocalContext.current\n    Column {\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            BadgedBox(\n                badge = {\n                    if (private) {\n                        Badge(\n                            containerColor = MaterialTheme.colorScheme.primary,\n                            contentColor = MaterialTheme.colorScheme.onPrimary,\n                            modifier = Modifier.absoluteOffset(x = (-5).dp),\n                        ) {\n                            Icon(\n                                imageVector = Icons.Filled.VisibilityOff,\n                                contentDescription = stringResource(MR.strings.tracked_privately),\n                                modifier = Modifier.size(14.dp),\n                            )\n                        }\n                    }\n                },\n            ) {\n                TrackLogoIcon(\n                    tracker = tracker,\n                    onClick = onOpenInBrowser,\n                    onLongClick = onCopyLink,\n                )\n            }\n            Box(\n                modifier = Modifier\n                    .height(48.dp)\n                    .weight(1f)\n                    .combinedClickable(\n                        onClick = onNewSearch,\n                        onLongClick = {\n                            context.copyToClipboard(title, title)\n                        },\n                    )\n                    .padding(start = 16.dp),\n                contentAlignment = Alignment.CenterStart,\n            ) {\n                Text(\n                    text = title,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                    style = MaterialTheme.typography.titleMedium,\n                    color = MaterialTheme.colorScheme.onSurface,\n                )\n            }\n            VerticalDivider()\n            TrackInfoItemMenu(\n                onOpenInBrowser = onOpenInBrowser,\n                onRemoved = onRemoved,\n                onCopyLink = onCopyLink,\n                private = private,\n                onTogglePrivate = onTogglePrivate,\n            )\n        }\n\n        Box(\n            modifier = Modifier\n                .padding(top = 12.dp)\n                .clip(MaterialTheme.shapes.medium)\n                .background(MaterialTheme.colorScheme.surfaceContainerHighest)\n                .padding(8.dp)\n                .clip(RoundedCornerShape(6.dp)),\n        ) {\n            Column {\n                Row(modifier = Modifier.height(IntrinsicSize.Min)) {\n                    TrackDetailsItem(\n                        modifier = Modifier.weight(1f),\n                        text = status?.let { stringResource(it) } ?: \"\",\n                        onClick = onStatusClick,\n                    )\n                    VerticalDivider()\n                    TrackDetailsItem(\n                        modifier = Modifier.weight(1f),\n                        text = chapters,\n                        onClick = onChaptersClick,\n                    )\n                    if (onScoreClick != null) {\n                        VerticalDivider()\n                        TrackDetailsItem(\n                            modifier = Modifier.weight(1f),\n                            text = score,\n                            placeholder = stringResource(MR.strings.score),\n                            onClick = onScoreClick,\n                        )\n                    }\n                }\n\n                if (onStartDateClick != null && onEndDateClick != null) {\n                    HorizontalDivider()\n                    Row(modifier = Modifier.height(IntrinsicSize.Min)) {\n                        TrackDetailsItem(\n                            modifier = Modifier.weight(1F),\n                            text = startDate,\n                            placeholder = stringResource(MR.strings.track_started_reading_date),\n                            onClick = onStartDateClick,\n                        )\n                        VerticalDivider()\n                        TrackDetailsItem(\n                            modifier = Modifier.weight(1F),\n                            text = endDate,\n                            placeholder = stringResource(MR.strings.track_finished_reading_date),\n                            onClick = onEndDateClick,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\nprivate const val UNSET_TEXT_ALPHA = 0.5F\n\n@Composable\nfun TrackDetailsItem(\n    text: String?,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    placeholder: String = \"\",\n) {\n    Box(\n        modifier = modifier\n            .clickable(onClick = onClick)\n            .fillMaxHeight()\n            .padding(12.dp),\n        contentAlignment = Alignment.Center,\n    ) {\n        Text(\n            text = text ?: placeholder,\n            maxLines = 2,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n            textAlign = TextAlign.Center,\n            color = MaterialTheme.colorScheme.onSurface.copy(alpha = if (text == null) UNSET_TEXT_ALPHA else 1f),\n        )\n    }\n}\n\n@Composable\nprivate fun TrackInfoItemEmpty(\n    tracker: Tracker,\n    onNewSearch: () -> Unit,\n) {\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        TrackLogoIcon(tracker)\n        TextButton(\n            onClick = onNewSearch,\n            modifier = Modifier\n                .padding(start = 16.dp)\n                .weight(1f),\n        ) {\n            Text(text = stringResource(MR.strings.add_tracking))\n        }\n    }\n}\n\n@Composable\nfun TrackInfoItemMenu(\n    onOpenInBrowser: () -> Unit,\n    onRemoved: () -> Unit,\n    onCopyLink: () -> Unit,\n    private: Boolean,\n    onTogglePrivate: (() -> Unit)?,\n) {\n    var expanded by remember { mutableStateOf(false) }\n    Box(modifier = Modifier.wrapContentSize(Alignment.TopStart)) {\n        IconButton(onClick = { expanded = true }) {\n            Icon(\n                imageVector = Icons.Default.MoreVert,\n                contentDescription = stringResource(MR.strings.label_more),\n            )\n        }\n        DropdownMenu(\n            expanded = expanded,\n            onDismissRequest = { expanded = false },\n        ) {\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.action_open_in_browser)) },\n                onClick = {\n                    onOpenInBrowser()\n                    expanded = false\n                },\n            )\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.action_copy_link)) },\n                onClick = {\n                    onCopyLink()\n                    expanded = false\n                },\n            )\n            if (onTogglePrivate != null) {\n                DropdownMenuItem(\n                    text = {\n                        Text(\n                            stringResource(\n                                if (private) {\n                                    MR.strings.action_toggle_private_off\n                                } else {\n                                    MR.strings.action_toggle_private_on\n                                },\n                            ),\n                        )\n                    },\n                    onClick = {\n                        onTogglePrivate()\n                        expanded = false\n                    },\n                )\n            }\n            DropdownMenuItem(\n                text = { Text(stringResource(MR.strings.action_remove)) },\n                onClick = {\n                    onRemoved()\n                    expanded = false\n                },\n            )\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TrackInfoDialogHomePreviews(\n    @PreviewParameter(MangaTrackInfoDialogHomePreviewProvider::class)\n    content: @Composable () -> Unit,\n) {\n    TachiyomiPreviewTheme { content() }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackInfoDialogHomePreviewProvider.kt",
    "content": "package eu.kanade.presentation.track.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport eu.kanade.tachiyomi.ui.entries.manga.track.MangaTrackItem\nimport eu.kanade.test.DummyTracker\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport java.time.format.DateTimeFormatter\nimport java.time.format.FormatStyle\n\ninternal class MangaTrackInfoDialogHomePreviewProvider :\n    PreviewParameterProvider<@Composable () -> Unit> {\n\n    private val aTrack = MangaTrack(\n        id = 1L,\n        mangaId = 2L,\n        trackerId = 3L,\n        remoteId = 4L,\n        libraryId = null,\n        title = \"Manage Name On Tracker Site\",\n        lastChapterRead = 2.0,\n        totalChapters = 12L,\n        status = 1L,\n        score = 2.0,\n        remoteUrl = \"https://example.com\",\n        startDate = 0L,\n        finishDate = 0L,\n        private = false,\n    )\n    private val privateTrack = aTrack.copy(private = true)\n    private val trackItemWithoutTrack = MangaTrackItem(\n        track = null,\n        tracker = DummyTracker(\n            id = 1L,\n            name = \"Example Tracker\",\n        ),\n    )\n    private val trackItemWithTrack = MangaTrackItem(\n        track = aTrack,\n        tracker = DummyTracker(\n            id = 2L,\n            name = \"Example Tracker 2\",\n        ),\n    )\n    private val trackItemWithPrivateTrack = MangaTrackItem(\n        track = privateTrack,\n        tracker = DummyTracker(\n            id = 2L,\n            name = \"Example Tracker 2\",\n        ),\n    )\n\n    private val trackersWithAndWithoutTrack = @Composable {\n        MangaTrackInfoDialogHome(\n            trackItems = listOf(\n                trackItemWithoutTrack,\n                trackItemWithTrack,\n            ),\n            dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM),\n            onStatusClick = {},\n            onChapterClick = {},\n            onScoreClick = {},\n            onStartDateEdit = {},\n            onEndDateEdit = {},\n            onNewSearch = {},\n            onOpenInBrowser = {},\n            onRemoved = {},\n            onCopyLink = {},\n            onTogglePrivate = {},\n        )\n    }\n\n    private val noTrackers = @Composable {\n        MangaTrackInfoDialogHome(\n            trackItems = listOf(),\n            dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM),\n            onStatusClick = {},\n            onChapterClick = {},\n            onScoreClick = {},\n            onStartDateEdit = {},\n            onEndDateEdit = {},\n            onNewSearch = {},\n            onOpenInBrowser = {},\n            onRemoved = {},\n            onCopyLink = {},\n            onTogglePrivate = {},\n        )\n    }\n\n    private val trackerWithPrivateTracking = @Composable {\n        MangaTrackInfoDialogHome(\n            trackItems = listOf(trackItemWithPrivateTrack),\n            dateFormat = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM),\n            onStatusClick = {},\n            onChapterClick = {},\n            onScoreClick = {},\n            onStartDateEdit = {},\n            onEndDateEdit = {},\n            onNewSearch = {},\n            onOpenInBrowser = {},\n            onRemoved = {},\n            onCopyLink = {},\n            onTogglePrivate = {},\n        )\n    }\n\n    override val values: Sequence<@Composable () -> Unit>\n        get() = sequenceOf(\n            trackersWithAndWithoutTrack,\n            noTrackers,\n            trackerWithPrivateTracking,\n        )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackerSearch.kt",
    "content": "package eu.kanade.presentation.track.manga\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutVertically\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.combinedClickable\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.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.WindowInsets\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.paddingFromBaseline\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.text.BasicTextField\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.foundation.text.input.TextFieldLineLimits\nimport androidx.compose.foundation.text.input.TextFieldState\nimport androidx.compose.foundation.text.input.clearText\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ArrowBack\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.VisibilityOff\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.runtime.Composable\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.clip\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.platform.ClipboardManager\nimport androidx.compose.ui.platform.LocalClipboardManager\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalFocusManager\nimport androidx.compose.ui.text.AnnotatedString\nimport androidx.compose.ui.text.capitalize\nimport androidx.compose.ui.text.input.ImeAction\nimport androidx.compose.ui.text.intl.Locale\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.text.toLowerCase\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.tooling.preview.PreviewParameter\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.theme.TachiyomiPreviewTheme\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ScrollbarLazyColumn\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.presentation.core.util.plus\nimport tachiyomi.presentation.core.util.runOnEnterKeyPressed\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun MangaTrackerSearch(\n    state: TextFieldState,\n    onDispatchQuery: () -> Unit,\n    queryResult: Result<List<MangaTrackSearch>>?,\n    selected: MangaTrackSearch?,\n    onSelectedChange: (MangaTrackSearch) -> Unit,\n    onConfirmSelection: (private: Boolean) -> Unit,\n    onDismissRequest: () -> Unit,\n    supportsPrivateTracking: Boolean,\n) {\n    val focusManager = LocalFocusManager.current\n    val focusRequester = remember { FocusRequester() }\n    val dispatchQueryAndClearFocus: () -> Unit = {\n        onDispatchQuery()\n        focusManager.clearFocus()\n    }\n\n    Scaffold(\n        topBar = {\n            Column {\n                TopAppBar(\n                    navigationIcon = {\n                        IconButton(onClick = onDismissRequest) {\n                            Icon(\n                                imageVector = Icons.AutoMirrored.Outlined.ArrowBack,\n                                contentDescription = null,\n                                tint = MaterialTheme.colorScheme.onSurfaceVariant,\n                            )\n                        }\n                    },\n                    title = {\n                        BasicTextField(\n                            state = state,\n                            modifier = Modifier\n                                .fillMaxWidth()\n                                .focusRequester(focusRequester)\n                                .runOnEnterKeyPressed(action = dispatchQueryAndClearFocus),\n                            textStyle = MaterialTheme.typography.bodyLarge\n                                .copy(color = MaterialTheme.colorScheme.onSurface),\n                            lineLimits = TextFieldLineLimits.SingleLine,\n                            keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),\n                            onKeyboardAction = { dispatchQueryAndClearFocus() },\n                            cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),\n                            decorator = {\n                                if (state.text.isEmpty()) {\n                                    Text(\n                                        text = stringResource(MR.strings.action_search_hint),\n                                        color = MaterialTheme.colorScheme.onSurfaceVariant,\n                                        style = MaterialTheme.typography.bodyLarge,\n                                    )\n                                }\n                                it()\n                            },\n                        )\n                    },\n                    actions = {\n                        if (state.text.isNotEmpty()) {\n                            IconButton(\n                                onClick = {\n                                    state.clearText()\n                                    focusRequester.requestFocus()\n                                },\n                            ) {\n                                Icon(\n                                    imageVector = Icons.Default.Close,\n                                    contentDescription = null,\n                                    tint = MaterialTheme.colorScheme.onSurfaceVariant,\n                                )\n                            }\n                        }\n                    },\n                )\n                HorizontalDivider()\n            }\n        },\n        bottomBar = {\n            AnimatedVisibility(\n                visible = selected != null,\n                enter = fadeIn() + slideInVertically { it / 2 },\n                exit = slideOutVertically { it / 2 } + fadeOut(),\n            ) {\n                Row(\n                    modifier = Modifier\n                        .padding(MaterialTheme.padding.small)\n                        .windowInsetsPadding(WindowInsets.navigationBars)\n                        .fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                ) {\n                    Button(\n                        onClick = { onConfirmSelection(false) },\n                        modifier = Modifier.weight(1f),\n                        elevation = ButtonDefaults.elevatedButtonElevation(),\n                    ) {\n                        Text(text = stringResource(MR.strings.action_track))\n                    }\n                    if (supportsPrivateTracking) {\n                        Button(\n                            onClick = { onConfirmSelection(true) },\n                            elevation = ButtonDefaults.elevatedButtonElevation(),\n                        ) {\n                            Icon(\n                                imageVector = Icons.Filled.VisibilityOff,\n                                contentDescription = stringResource(MR.strings.action_toggle_private_on),\n                            )\n                        }\n                    }\n                }\n            }\n        },\n    ) { innerPadding ->\n        if (queryResult == null) {\n            LoadingScreen(modifier = Modifier.padding(innerPadding))\n        } else {\n            val availableTracks = queryResult.getOrNull()\n            if (availableTracks != null) {\n                if (availableTracks.isEmpty()) {\n                    EmptyScreen(\n                        modifier = Modifier.padding(innerPadding),\n                        stringRes = MR.strings.no_results_found,\n                    )\n                } else {\n                    ScrollbarLazyColumn(\n                        contentPadding = innerPadding + PaddingValues(vertical = 12.dp),\n                        verticalArrangement = Arrangement.spacedBy(12.dp),\n                    ) {\n                        items(\n                            items = availableTracks,\n                            key = { it.hashCode() },\n                        ) {\n                            SearchResultItem(\n                                trackSearch = it,\n                                selected = it == selected,\n                                onClick = { onSelectedChange(it) },\n                            )\n                        }\n                    }\n                }\n            } else {\n                EmptyScreen(\n                    modifier = Modifier.padding(innerPadding),\n                    message = queryResult.exceptionOrNull()?.message\n                        ?: stringResource(MR.strings.unknown_error),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SearchResultItem(\n    trackSearch: MangaTrackSearch,\n    selected: Boolean,\n    onClick: () -> Unit,\n) {\n    val context = LocalContext.current\n    val clipboardManager: ClipboardManager = LocalClipboardManager.current\n    val focusManager = LocalFocusManager.current\n    val type = trackSearch.publishing_type.toLowerCase(Locale.current).capitalize(Locale.current)\n    val status = trackSearch.publishing_status.toLowerCase(Locale.current).capitalize(Locale.current)\n    val description = trackSearch.summary.trim()\n    val shape = RoundedCornerShape(16.dp)\n    val borderColor = if (selected) MaterialTheme.colorScheme.outline else Color.Transparent\n    var dropDownMenuExpanded by remember { mutableStateOf(false) }\n    Box(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(horizontal = 12.dp)\n            .clip(shape)\n            .background(MaterialTheme.colorScheme.surface)\n            .border(\n                width = 2.dp,\n                color = borderColor,\n                shape = shape,\n            )\n            .combinedClickable(\n                onLongClick = { dropDownMenuExpanded = true },\n                onClick = {\n                    focusManager.clearFocus()\n                    onClick()\n                },\n            )\n            .padding(12.dp),\n    ) {\n        if (selected) {\n            Icon(\n                imageVector = Icons.Filled.CheckCircle,\n                contentDescription = null,\n                modifier = Modifier.align(Alignment.TopEnd),\n                tint = MaterialTheme.colorScheme.primary,\n            )\n        }\n        Column {\n            Row {\n                ItemCover.Book(\n                    data = trackSearch.cover_url,\n                    modifier = Modifier.height(96.dp),\n                )\n                Spacer(modifier = Modifier.width(12.dp))\n                Column {\n                    Text(\n                        text = trackSearch.title,\n                        modifier = Modifier.padding(end = 28.dp),\n                        maxLines = 2,\n                        overflow = TextOverflow.Ellipsis,\n                        style = MaterialTheme.typography.titleMedium,\n                    )\n                    SearchResultItemDropDownMenu(\n                        expanded = dropDownMenuExpanded,\n                        onCollapseMenu = { dropDownMenuExpanded = false },\n                        onCopyName = {\n                            clipboardManager.setText(AnnotatedString(trackSearch.title))\n                        },\n                        onOpenInBrowser = {\n                            val url = trackSearch.tracking_url\n                            if (url.isNotBlank()) {\n                                context.openInBrowser(url)\n                            }\n                        },\n                    )\n                    if (trackSearch.authors.isNotEmpty() || trackSearch.artists.isNotEmpty()) {\n                        Text(\n                            text = (trackSearch.authors + trackSearch.artists).distinct().joinToString(),\n                            modifier = Modifier.secondaryItemAlpha(),\n                            maxLines = 1,\n                            overflow = TextOverflow.Ellipsis,\n                            style = MaterialTheme.typography.bodySmall,\n                        )\n                    }\n                    if (type.isNotBlank()) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.track_type),\n                            text = type,\n                        )\n                    }\n                    if (trackSearch.start_date.isNotBlank()) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.label_started),\n                            text = trackSearch.start_date,\n                        )\n                    }\n                    if (status.isNotBlank()) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.track_status),\n                            text = status,\n                        )\n                    }\n                    if (trackSearch.score != -1.0) {\n                        SearchResultItemDetails(\n                            title = stringResource(MR.strings.score),\n                            text = trackSearch.score.toString(),\n                        )\n                    }\n                }\n            }\n            if (description.isNotBlank()) {\n                Text(\n                    text = description,\n                    modifier = Modifier\n                        .paddingFromBaseline(top = 24.dp)\n                        .secondaryItemAlpha(),\n                    maxLines = 4,\n                    overflow = TextOverflow.Ellipsis,\n                    style = MaterialTheme.typography.bodySmall,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun SearchResultItemDropDownMenu(\n    expanded: Boolean,\n    onCollapseMenu: () -> Unit,\n    onCopyName: () -> Unit,\n    onOpenInBrowser: () -> Unit,\n) {\n    DropdownMenu(\n        expanded = expanded,\n        onDismissRequest = onCollapseMenu,\n    ) {\n        DropdownMenuItem(\n            text = { Text(stringResource(MR.strings.action_copy_to_clipboard)) },\n            onClick = {\n                onCopyName()\n                onCollapseMenu()\n            },\n        )\n        DropdownMenuItem(\n            text = { Text(stringResource(MR.strings.action_open_in_browser)) },\n            onClick = {\n                onOpenInBrowser()\n            },\n        )\n    }\n}\n\n@Composable\nprivate fun SearchResultItemDetails(\n    title: String,\n    text: String,\n) {\n    Row(horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall)) {\n        Text(\n            text = title,\n            maxLines = 1,\n            style = MaterialTheme.typography.titleSmall,\n        )\n        Text(\n            text = text,\n            modifier = Modifier\n                .weight(1f)\n                .secondaryItemAlpha(),\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun TrackerSearchPreviews(\n    @PreviewParameter(MangaTrackerSearchPreviewProvider::class)\n    content: @Composable () -> Unit,\n) {\n    TachiyomiPreviewTheme {\n        Surface {\n            content()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackerSearchPreviewProvider.kt",
    "content": "package eu.kanade.presentation.track.manga\n\nimport androidx.compose.foundation.text.input.TextFieldState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.tooling.preview.PreviewParameterProvider\nimport androidx.compose.ui.tooling.preview.datasource.LoremIpsum\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport java.text.SimpleDateFormat\nimport java.time.Instant\nimport java.time.temporal.ChronoUnit\nimport java.util.Date\nimport java.util.Locale\nimport kotlin.random.Random\n\ninternal class MangaTrackerSearchPreviewProvider : PreviewParameterProvider<@Composable () -> Unit> {\n    private val fullPageWithSecondSelected = @Composable {\n        val items = someTrackSearches().take(30).toList()\n        MangaTrackerSearch(\n            state = TextFieldState(initialText = \"search text\"),\n            onDispatchQuery = {},\n            queryResult = Result.success(items),\n            selected = items[1],\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = false,\n        )\n    }\n    private val fullPageWithoutSelected = @Composable {\n        MangaTrackerSearch(\n            state = TextFieldState(),\n            onDispatchQuery = {},\n            queryResult = Result.success(someTrackSearches().take(30).toList()),\n            selected = null,\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = false,\n        )\n    }\n    private val loading = @Composable {\n        MangaTrackerSearch(\n            state = TextFieldState(),\n            onDispatchQuery = {},\n            queryResult = null,\n            selected = null,\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = false,\n        )\n    }\n    private val fullPageWithPrivateTracking = @Composable {\n        val items = someTrackSearches().take(30).toList()\n        MangaTrackerSearch(\n            state = TextFieldState(initialText = \"search text\"),\n            onDispatchQuery = {},\n            queryResult = Result.success(items),\n            selected = items[1],\n            onSelectedChange = {},\n            onConfirmSelection = {},\n            onDismissRequest = {},\n            supportsPrivateTracking = true,\n        )\n    }\n    override val values: Sequence<@Composable () -> Unit> = sequenceOf(\n        fullPageWithSecondSelected,\n        fullPageWithoutSelected,\n        loading,\n        fullPageWithPrivateTracking,\n    )\n\n    private fun someTrackSearches(): Sequence<MangaTrackSearch> = sequence {\n        while (true) {\n            yield(randTrackSearch())\n        }\n    }\n\n    private val formatter: SimpleDateFormat = SimpleDateFormat(\"yyyy-MM-dd\", Locale.getDefault())\n\n    private fun randTrackSearch() = MangaTrackSearch().let {\n        it.id = Random.nextLong()\n        it.manga_id = Random.nextLong()\n        it.tracker_id = Random.nextLong()\n        it.remote_id = Random.nextLong()\n        it.library_id = Random.nextLong()\n        it.title = lorem((1..10).random()).joinToString()\n        it.last_chapter_read = (0..100).random().toDouble()\n        it.total_chapters = (100L..1000L).random()\n        it.score = (0..10).random().toDouble()\n        it.status = Random.nextLong()\n        it.started_reading_date = 0L\n        it.finished_reading_date = 0L\n        it.tracking_url = \"https://example.com/tracker-example\"\n        it.cover_url = \"https://example.com/cover.png\"\n        it.start_date = formatter.format(Date.from(Instant.now().minus((1L..365).random(), ChronoUnit.DAYS)))\n        it.summary = lorem((0..40).random()).joinToString()\n        it.publishing_status = if (Random.nextBoolean()) \"Finished\" else \"\"\n        it.publishing_type = if (Random.nextBoolean()) \"Oneshot\" else \"\"\n        it.artists = randomNames()\n        it.authors = randomNames()\n        it\n    }\n\n    private fun randomNames(): List<String> = (0..(0..3).random()).map { lorem((3..5).random()).joinToString() }\n\n    private fun lorem(words: Int): Sequence<String> =\n        LoremIpsum(words).values\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt",
    "content": "package eu.kanade.presentation.updates\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun UpdatesDeleteConfirmationDialog(\n    onDismissRequest: () -> Unit,\n    onConfirm: () -> Unit,\n    isManga: Boolean,\n) {\n    val title = if (isManga) MR.strings.confirm_delete_chapters else AYMR.strings.confirm_delete_episodes\n    AlertDialog(\n        text = {\n            Text(text = stringResource(title))\n        },\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = {\n                onConfirm()\n                onDismissRequest()\n            }) {\n                Text(text = stringResource(MR.strings.action_ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesScreen.kt",
    "content": "package eu.kanade.presentation.updates.anime\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\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.Modifier\nimport androidx.compose.ui.util.fastAll\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction\nimport eu.kanade.presentation.entries.components.EntryBottomActionMenu\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.ui.updates.anime.AnimeUpdatesItem\nimport eu.kanade.tachiyomi.ui.updates.anime.AnimeUpdatesScreenModel\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.LocalDate\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun AnimeUpdateScreen(\n    state: AnimeUpdatesScreenModel.State,\n    snackbarHostState: SnackbarHostState,\n    lastUpdated: Long,\n    onClickCover: (AnimeUpdatesItem) -> Unit,\n    onSelectAll: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n    onUpdateLibrary: () -> Boolean,\n    onDownloadEpisode: (List<AnimeUpdatesItem>, EpisodeDownloadAction) -> Unit,\n    onMultiBookmarkClicked: (List<AnimeUpdatesItem>, bookmark: Boolean) -> Unit,\n    onMultiFillermarkClicked: (List<AnimeUpdatesItem>, fillermark: Boolean) -> Unit,\n    onMultiMarkAsSeenClicked: (List<AnimeUpdatesItem>, seen: Boolean) -> Unit,\n    onMultiDeleteClicked: (List<AnimeUpdatesItem>) -> Unit,\n    onUpdateSelected: (AnimeUpdatesItem, Boolean, Boolean, Boolean) -> Unit,\n    onOpenEpisode: (AnimeUpdatesItem, altPlayer: Boolean) -> Unit,\n) {\n    BackHandler(enabled = state.selectionMode, onBack = { onSelectAll(false) })\n\n    Scaffold(\n        bottomBar = {\n            AnimeUpdatesBottomBar(\n                selected = state.selected,\n                onDownloadEpisode = onDownloadEpisode,\n                onMultiBookmarkClicked = onMultiBookmarkClicked,\n                onMultiFillermarkClicked = onMultiFillermarkClicked,\n                onMultiMarkAsSeenClicked = onMultiMarkAsSeenClicked,\n                onMultiDeleteClicked = onMultiDeleteClicked,\n                onOpenEpisode = onOpenEpisode,\n            )\n        },\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n    ) { contentPadding ->\n        when {\n            state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n            state.items.isEmpty() -> EmptyScreen(\n                stringRes = MR.strings.information_no_recent,\n                modifier = Modifier.padding(contentPadding),\n            )\n            else -> {\n                val scope = rememberCoroutineScope()\n                var isRefreshing by remember { mutableStateOf(false) }\n\n                PullRefresh(\n                    refreshing = isRefreshing,\n                    onRefresh = {\n                        val started = onUpdateLibrary()\n                        if (!started) return@PullRefresh\n                        scope.launch {\n                            // Fake refresh status but hide it after a second as it's a long running task\n                            isRefreshing = true\n                            delay(1.seconds)\n                            isRefreshing = false\n                        }\n                    },\n                    enabled = !state.selectionMode,\n                    indicatorPadding = contentPadding,\n                ) {\n                    FastScrollLazyColumn(\n                        contentPadding = contentPadding,\n                    ) {\n                        animeUpdatesLastUpdatedItem(lastUpdated)\n\n                        animeUpdatesUiItems(\n                            uiModels = state.getUiModel(),\n                            selectionMode = state.selectionMode,\n                            onUpdateSelected = onUpdateSelected,\n                            onClickCover = onClickCover,\n                            onClickUpdate = onOpenEpisode,\n                            onDownloadEpisode = onDownloadEpisode,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeUpdatesBottomBar(\n    selected: List<AnimeUpdatesItem>,\n    onDownloadEpisode: (List<AnimeUpdatesItem>, EpisodeDownloadAction) -> Unit,\n    onMultiBookmarkClicked: (List<AnimeUpdatesItem>, bookmark: Boolean) -> Unit,\n    onMultiFillermarkClicked: (List<AnimeUpdatesItem>, fillermark: Boolean) -> Unit,\n    onMultiMarkAsSeenClicked: (List<AnimeUpdatesItem>, seen: Boolean) -> Unit,\n    onMultiDeleteClicked: (List<AnimeUpdatesItem>) -> Unit,\n    onOpenEpisode: (AnimeUpdatesItem, altPlayer: Boolean) -> Unit,\n) {\n    val playerPreferences: PlayerPreferences = Injekt.get()\n    EntryBottomActionMenu(\n        visible = selected.isNotEmpty(),\n        modifier = Modifier.fillMaxWidth(),\n        onBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected, true)\n        }.takeIf { selected.fastAny { !it.update.bookmark } },\n        onRemoveBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected, false)\n        }.takeIf { selected.fastAll { it.update.bookmark } },\n        onFillermarkClicked = {\n            onMultiFillermarkClicked.invoke(selected, true)\n        }.takeIf { selected.fastAny { !it.update.fillermark } },\n        onRemoveFillermarkClicked = {\n            onMultiFillermarkClicked.invoke(selected, false)\n        }.takeIf { selected.fastAll { it.update.fillermark } },\n        onMarkAsViewedClicked = {\n            onMultiMarkAsSeenClicked(selected, true)\n        }.takeIf { selected.fastAny { !it.update.seen } },\n        onMarkAsUnviewedClicked = {\n            onMultiMarkAsSeenClicked(selected, false)\n        }.takeIf { selected.fastAny { it.update.seen || it.update.lastSecondSeen > 0L } },\n        onDownloadClicked = {\n            onDownloadEpisode(selected, EpisodeDownloadAction.START)\n        }.takeIf {\n            selected.fastAny { it.downloadStateProvider() != AnimeDownload.State.DOWNLOADED }\n        },\n        onDeleteClicked = {\n            onMultiDeleteClicked(selected)\n        }.takeIf { selected.fastAny { it.downloadStateProvider() == AnimeDownload.State.DOWNLOADED } },\n        onExternalClicked = {\n            onOpenEpisode(selected[0], true)\n        }.takeIf { !playerPreferences.alwaysUseExternalPlayer().get() && selected.size == 1 },\n        onInternalClicked = {\n            onOpenEpisode(selected[0], true)\n        }.takeIf { playerPreferences.alwaysUseExternalPlayer().get() && selected.size == 1 },\n        isManga = false,\n    )\n}\n\nsealed interface AnimeUpdatesUiModel {\n    data class Header(val date: LocalDate) : AnimeUpdatesUiModel\n    data class Item(val item: AnimeUpdatesItem) : AnimeUpdatesUiModel\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesUiItem.kt",
    "content": "package eu.kanade.presentation.updates.anime\n\nimport androidx.compose.foundation.combinedClickable\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.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.Label\nimport androidx.compose.material.icons.filled.Bookmark\nimport androidx.compose.material.icons.filled.Circle\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.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.relativeDateText\nimport eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction\nimport eu.kanade.presentation.entries.anime.components.EpisodeDownloadIndicator\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.presentation.util.relativeTimeSpanString\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.ui.updates.anime.AnimeUpdatesItem\nimport tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.ListGroupHeader\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.selectedBackground\nimport java.util.concurrent.TimeUnit\n\ninternal fun LazyListScope.animeUpdatesLastUpdatedItem(\n    lastUpdated: Long,\n) {\n    item(key = \"animeUpdates-lastUpdated\") {\n        Box(\n            modifier = Modifier\n                .animateItem(fadeInSpec = null, fadeOutSpec = null)\n                .padding(\n                    horizontal = MaterialTheme.padding.medium,\n                    vertical = MaterialTheme.padding.small,\n                ),\n        ) {\n            Text(\n                text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)),\n                fontStyle = FontStyle.Italic,\n            )\n        }\n    }\n}\n\ninternal fun LazyListScope.animeUpdatesUiItems(\n    uiModels: List<AnimeUpdatesUiModel>,\n    selectionMode: Boolean,\n    onUpdateSelected: (AnimeUpdatesItem, Boolean, Boolean, Boolean) -> Unit,\n    onClickCover: (AnimeUpdatesItem) -> Unit,\n    onClickUpdate: (AnimeUpdatesItem, altPlayer: Boolean) -> Unit,\n    onDownloadEpisode: (List<AnimeUpdatesItem>, EpisodeDownloadAction) -> Unit,\n) {\n    items(\n        items = uiModels,\n        contentType = {\n            when (it) {\n                is AnimeUpdatesUiModel.Header -> \"header\"\n                is AnimeUpdatesUiModel.Item -> \"item\"\n            }\n        },\n        key = {\n            when (it) {\n                is AnimeUpdatesUiModel.Header -> \"animeUpdatesHeader-${it.hashCode()}\"\n                is AnimeUpdatesUiModel.Item -> \"animeUpdates-${it.item.update.animeId}-${it.item.update.episodeId}\"\n            }\n        },\n    ) { item ->\n        when (item) {\n            is AnimeUpdatesUiModel.Header -> {\n                ListGroupHeader(\n                    modifier = Modifier.animateItemFastScroll(),\n                    text = relativeDateText(item.date),\n                )\n            }\n            is AnimeUpdatesUiModel.Item -> {\n                val updatesItem = item.item\n                AnimeUpdatesUiItem(\n                    modifier = Modifier.animateItemFastScroll(),\n                    update = updatesItem.update,\n                    selected = updatesItem.selected,\n                    watchProgress = updatesItem.update.lastSecondSeen\n                        .takeIf { !updatesItem.update.seen && it > 0L }\n                        ?.let {\n                            stringResource(\n                                AYMR.strings.episode_progress,\n                                formatProgress(it),\n                                formatProgress(updatesItem.update.totalSeconds),\n                            )\n                        },\n                    onLongClick = {\n                        onUpdateSelected(updatesItem, !updatesItem.selected, true, true)\n                    },\n                    onClick = {\n                        when {\n                            selectionMode -> onUpdateSelected(\n                                updatesItem,\n                                !updatesItem.selected,\n                                true,\n                                false,\n                            )\n                            else -> onClickUpdate(updatesItem, false)\n                        }\n                    },\n                    onClickCover = { onClickCover(updatesItem) }.takeIf { !selectionMode },\n                    onDownloadEpisode = { action: EpisodeDownloadAction ->\n                        onDownloadEpisode(listOf(updatesItem), action)\n                    }.takeIf { !selectionMode },\n                    downloadStateProvider = updatesItem.downloadStateProvider,\n                    downloadProgressProvider = updatesItem.downloadProgressProvider,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun AnimeUpdatesUiItem(\n    update: AnimeUpdatesWithRelations,\n    selected: Boolean,\n    watchProgress: String?,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n    onClickCover: (() -> Unit)?,\n    onDownloadEpisode: ((EpisodeDownloadAction) -> Unit)?,\n    // Download Indicator\n    downloadStateProvider: () -> AnimeDownload.State,\n    downloadProgressProvider: () -> Int,\n    modifier: Modifier = Modifier,\n) {\n    val haptic = LocalHapticFeedback.current\n    val textAlpha = if (update.seen) DISABLED_ALPHA else 1f\n\n    Row(\n        modifier = modifier\n            .selectedBackground(selected)\n            .combinedClickable(\n                onClick = onClick,\n                onLongClick = {\n                    onLongClick()\n                    haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                },\n            )\n            .height(56.dp)\n            .padding(horizontal = MaterialTheme.padding.medium),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Square(\n            modifier = Modifier\n                .padding(vertical = 6.dp)\n                .fillMaxHeight(),\n            data = update.coverData,\n            onClick = onClickCover,\n        )\n        Column(\n            modifier = Modifier\n                .padding(horizontal = MaterialTheme.padding.medium)\n                .weight(1f),\n        ) {\n            Text(\n                text = update.animeTitle,\n                maxLines = 1,\n                style = MaterialTheme.typography.bodyMedium,\n                color = LocalContentColor.current.copy(alpha = textAlpha),\n                overflow = TextOverflow.Ellipsis,\n            )\n\n            Row(verticalAlignment = Alignment.CenterVertically) {\n                var textHeight by remember { mutableIntStateOf(0) }\n                if (!update.seen) {\n                    Icon(\n                        imageVector = Icons.Filled.Circle,\n                        contentDescription = stringResource(MR.strings.unread),\n                        modifier = Modifier\n                            .height(8.dp)\n                            .padding(end = 4.dp),\n                        tint = MaterialTheme.colorScheme.primary,\n                    )\n                }\n                if (update.bookmark) {\n                    Icon(\n                        imageVector = Icons.Filled.Bookmark,\n                        contentDescription = stringResource(MR.strings.action_filter_bookmarked),\n                        modifier = Modifier\n                            .sizeIn(\n                                maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp },\n                            ),\n                        tint = MaterialTheme.colorScheme.primary,\n                    )\n                    Spacer(modifier = Modifier.width(2.dp))\n                }\n                if (update.fillermark) {\n                    Icon(\n                        imageVector = Icons.AutoMirrored.Filled.Label,\n                        contentDescription = stringResource(AYMR.strings.action_filter_fillermarked),\n                        modifier = Modifier\n                            .sizeIn(\n                                maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp },\n                            ),\n                        tint = MaterialTheme.colorScheme.tertiary,\n                    )\n                    Spacer(modifier = Modifier.width(2.dp))\n                }\n                Text(\n                    text = update.episodeName,\n                    maxLines = 1,\n                    style = MaterialTheme.typography.bodySmall,\n                    color = LocalContentColor.current.copy(alpha = textAlpha),\n                    overflow = TextOverflow.Ellipsis,\n                    onTextLayout = { textHeight = it.size.height },\n                    modifier = Modifier\n                        .weight(weight = 1f, fill = false),\n                )\n                if (watchProgress != null) {\n                    DotSeparatorText()\n                    Text(\n                        text = watchProgress,\n                        maxLines = 1,\n                        color = LocalContentColor.current.copy(alpha = DISABLED_ALPHA),\n                        overflow = TextOverflow.Ellipsis,\n                    )\n                }\n            }\n        }\n\n        EpisodeDownloadIndicator(\n            enabled = onDownloadEpisode != null,\n            modifier = Modifier.padding(start = 4.dp),\n            downloadStateProvider = downloadStateProvider,\n            downloadProgressProvider = downloadProgressProvider,\n            onClick = { onDownloadEpisode?.invoke(it) },\n        )\n    }\n}\n\nprivate fun formatProgress(milliseconds: Long): String {\n    return if (milliseconds > 3600000L) {\n        String.format(\n            \"%d:%02d:%02d\",\n            TimeUnit.MILLISECONDS.toHours(milliseconds),\n            TimeUnit.MILLISECONDS.toMinutes(milliseconds) -\n                TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),\n            TimeUnit.MILLISECONDS.toSeconds(milliseconds) -\n                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)),\n        )\n    } else {\n        String.format(\n            \"%d:%02d\",\n            TimeUnit.MILLISECONDS.toMinutes(milliseconds),\n            TimeUnit.MILLISECONDS.toSeconds(milliseconds) -\n                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesScreen.kt",
    "content": "package eu.kanade.presentation.updates.manga\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\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.Modifier\nimport androidx.compose.ui.util.fastAll\nimport androidx.compose.ui.util.fastAny\nimport eu.kanade.presentation.entries.components.EntryBottomActionMenu\nimport eu.kanade.presentation.entries.manga.components.ChapterDownloadAction\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.ui.updates.manga.MangaUpdatesItem\nimport eu.kanade.tachiyomi.ui.updates.manga.MangaUpdatesScreenModel\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.material.PullRefresh\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport java.time.LocalDate\nimport kotlin.time.Duration.Companion.seconds\n\n@Composable\nfun MangaUpdateScreen(\n    state: MangaUpdatesScreenModel.State,\n    snackbarHostState: SnackbarHostState,\n    lastUpdated: Long,\n    onClickCover: (MangaUpdatesItem) -> Unit,\n    onSelectAll: (Boolean) -> Unit,\n    onInvertSelection: () -> Unit,\n    onUpdateLibrary: () -> Boolean,\n    onDownloadChapter: (List<MangaUpdatesItem>, ChapterDownloadAction) -> Unit,\n    onMultiBookmarkClicked: (List<MangaUpdatesItem>, bookmark: Boolean) -> Unit,\n    onMultiMarkAsReadClicked: (List<MangaUpdatesItem>, read: Boolean) -> Unit,\n    onMultiDeleteClicked: (List<MangaUpdatesItem>) -> Unit,\n    onUpdateSelected: (MangaUpdatesItem, Boolean, Boolean, Boolean) -> Unit,\n    onOpenChapter: (MangaUpdatesItem) -> Unit,\n) {\n    BackHandler(enabled = state.selectionMode, onBack = { onSelectAll(false) })\n\n    Scaffold(\n        bottomBar = {\n            MangaUpdatesBottomBar(\n                selected = state.selected,\n                onDownloadChapter = onDownloadChapter,\n                onMultiBookmarkClicked = onMultiBookmarkClicked,\n                onMultiMarkAsReadClicked = onMultiMarkAsReadClicked,\n                onMultiDeleteClicked = onMultiDeleteClicked,\n            )\n        },\n        snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n    ) { contentPadding ->\n        when {\n            state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n            state.items.isEmpty() -> EmptyScreen(\n                stringRes = MR.strings.information_no_recent,\n                modifier = Modifier.padding(contentPadding),\n            )\n            else -> {\n                val scope = rememberCoroutineScope()\n                var isRefreshing by remember { mutableStateOf(false) }\n\n                PullRefresh(\n                    refreshing = isRefreshing,\n                    onRefresh = {\n                        val started = onUpdateLibrary()\n                        if (!started) return@PullRefresh\n                        scope.launch {\n                            // Fake refresh status but hide it after a second as it's a long running task\n                            isRefreshing = true\n                            delay(1.seconds)\n                            isRefreshing = false\n                        }\n                    },\n                    enabled = !state.selectionMode,\n                    indicatorPadding = contentPadding,\n                ) {\n                    FastScrollLazyColumn(\n                        contentPadding = contentPadding,\n                    ) {\n                        mangaUpdatesLastUpdatedItem(lastUpdated)\n\n                        mangaUpdatesUiItems(\n                            uiModels = state.getUiModel(),\n                            selectionMode = state.selectionMode,\n                            onUpdateSelected = onUpdateSelected,\n                            onClickCover = onClickCover,\n                            onClickUpdate = onOpenChapter,\n                            onDownloadChapter = onDownloadChapter,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun MangaUpdatesBottomBar(\n    selected: List<MangaUpdatesItem>,\n    onDownloadChapter: (List<MangaUpdatesItem>, ChapterDownloadAction) -> Unit,\n    onMultiBookmarkClicked: (List<MangaUpdatesItem>, bookmark: Boolean) -> Unit,\n    onMultiMarkAsReadClicked: (List<MangaUpdatesItem>, read: Boolean) -> Unit,\n    onMultiDeleteClicked: (List<MangaUpdatesItem>) -> Unit,\n) {\n    EntryBottomActionMenu(\n        visible = selected.isNotEmpty(),\n        modifier = Modifier.fillMaxWidth(),\n        onBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected, true)\n        }.takeIf { selected.fastAny { !it.update.bookmark } },\n        onRemoveBookmarkClicked = {\n            onMultiBookmarkClicked.invoke(selected, false)\n        }.takeIf { selected.fastAll { it.update.bookmark } },\n        onMarkAsViewedClicked = {\n            onMultiMarkAsReadClicked(selected, true)\n        }.takeIf { selected.fastAny { !it.update.read } },\n        onMarkAsUnviewedClicked = {\n            onMultiMarkAsReadClicked(selected, false)\n        }.takeIf { selected.fastAny { it.update.read || it.update.lastPageRead > 0L } },\n        onDownloadClicked = {\n            onDownloadChapter(selected, ChapterDownloadAction.START)\n        }.takeIf {\n            selected.fastAny { it.downloadStateProvider() != MangaDownload.State.DOWNLOADED }\n        },\n        onDeleteClicked = {\n            onMultiDeleteClicked(selected)\n        }.takeIf { selected.fastAny { it.downloadStateProvider() == MangaDownload.State.DOWNLOADED } },\n        isManga = true,\n    )\n}\n\nsealed interface MangaUpdatesUiModel {\n    data class Header(val date: LocalDate) : MangaUpdatesUiModel\n    data class Item(val item: MangaUpdatesItem) : MangaUpdatesUiModel\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesUiItem.kt",
    "content": "package eu.kanade.presentation.updates.manga\n\nimport androidx.compose.foundation.combinedClickable\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.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Bookmark\nimport androidx.compose.material.icons.filled.Circle\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.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.relativeDateText\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.presentation.entries.components.ItemCover\nimport eu.kanade.presentation.entries.manga.components.ChapterDownloadAction\nimport eu.kanade.presentation.entries.manga.components.ChapterDownloadIndicator\nimport eu.kanade.presentation.util.animateItemFastScroll\nimport eu.kanade.presentation.util.relativeTimeSpanString\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.ui.updates.manga.MangaUpdatesItem\nimport tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.ListGroupHeader\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.selectedBackground\n\ninternal fun LazyListScope.mangaUpdatesLastUpdatedItem(\n    lastUpdated: Long,\n) {\n    item(key = \"mangaUpdates-lastUpdated\") {\n        Box(\n            modifier = Modifier\n                .animateItem(fadeInSpec = null, fadeOutSpec = null)\n                .padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small),\n        ) {\n            Text(\n                text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)),\n                fontStyle = FontStyle.Italic,\n            )\n        }\n    }\n}\n\ninternal fun LazyListScope.mangaUpdatesUiItems(\n    uiModels: List<MangaUpdatesUiModel>,\n    selectionMode: Boolean,\n    onUpdateSelected: (MangaUpdatesItem, Boolean, Boolean, Boolean) -> Unit,\n    onClickCover: (MangaUpdatesItem) -> Unit,\n    onClickUpdate: (MangaUpdatesItem) -> Unit,\n    onDownloadChapter: (List<MangaUpdatesItem>, ChapterDownloadAction) -> Unit,\n) {\n    items(\n        items = uiModels,\n        contentType = {\n            when (it) {\n                is MangaUpdatesUiModel.Header -> \"header\"\n                is MangaUpdatesUiModel.Item -> \"item\"\n            }\n        },\n        key = {\n            when (it) {\n                is MangaUpdatesUiModel.Header -> \"mangaUpdatesHeader-${it.hashCode()}\"\n                is MangaUpdatesUiModel.Item -> \"mangaUpdates-${it.item.update.mangaId}-${it.item.update.chapterId}\"\n            }\n        },\n    ) { item ->\n        when (item) {\n            is MangaUpdatesUiModel.Header -> {\n                ListGroupHeader(\n                    modifier = Modifier.animateItemFastScroll(),\n                    text = relativeDateText(item.date),\n                )\n            }\n            is MangaUpdatesUiModel.Item -> {\n                val updatesItem = item.item\n                MangaUpdatesUiItem(\n                    modifier = Modifier.animateItemFastScroll(),\n                    update = updatesItem.update,\n                    selected = updatesItem.selected,\n                    readProgress = updatesItem.update.lastPageRead\n                        .takeIf { !updatesItem.update.read && it > 0L }\n                        ?.let {\n                            stringResource(\n                                MR.strings.chapter_progress,\n                                it + 1,\n                            )\n                        },\n                    onLongClick = {\n                        onUpdateSelected(updatesItem, !updatesItem.selected, true, true)\n                    },\n                    onClick = {\n                        when {\n                            selectionMode -> onUpdateSelected(\n                                updatesItem,\n                                !updatesItem.selected,\n                                true,\n                                false,\n                            )\n                            else -> onClickUpdate(updatesItem)\n                        }\n                    },\n                    onClickCover = { onClickCover(updatesItem) }.takeIf { !selectionMode },\n                    onDownloadChapter = { action: ChapterDownloadAction ->\n                        onDownloadChapter(listOf(updatesItem), action)\n                    }.takeIf { !selectionMode },\n                    downloadStateProvider = updatesItem.downloadStateProvider,\n                    downloadProgressProvider = updatesItem.downloadProgressProvider,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun MangaUpdatesUiItem(\n    update: MangaUpdatesWithRelations,\n    selected: Boolean,\n    readProgress: String?,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n    onClickCover: (() -> Unit)?,\n    onDownloadChapter: ((ChapterDownloadAction) -> Unit)?,\n    // Download Indicator\n    downloadStateProvider: () -> MangaDownload.State,\n    downloadProgressProvider: () -> Int,\n    modifier: Modifier = Modifier,\n) {\n    val haptic = LocalHapticFeedback.current\n    val textAlpha = if (update.read) DISABLED_ALPHA else 1f\n\n    Row(\n        modifier = modifier\n            .selectedBackground(selected)\n            .combinedClickable(\n                onClick = onClick,\n                onLongClick = {\n                    onLongClick()\n                    haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                },\n            )\n            .height(56.dp)\n            .padding(horizontal = MaterialTheme.padding.medium),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ItemCover.Square(\n            modifier = Modifier\n                .padding(vertical = 6.dp)\n                .fillMaxHeight(),\n            data = update.coverData,\n            onClick = onClickCover,\n        )\n        Column(\n            modifier = Modifier\n                .padding(horizontal = MaterialTheme.padding.medium)\n                .weight(1f),\n        ) {\n            Text(\n                text = update.mangaTitle,\n                maxLines = 1,\n                style = MaterialTheme.typography.bodyMedium,\n                color = LocalContentColor.current.copy(alpha = textAlpha),\n                overflow = TextOverflow.Ellipsis,\n            )\n            Row(verticalAlignment = Alignment.CenterVertically) {\n                var textHeight by remember { mutableIntStateOf(0) }\n                if (!update.read) {\n                    Icon(\n                        imageVector = Icons.Filled.Circle,\n                        contentDescription = stringResource(MR.strings.unread),\n                        modifier = Modifier\n                            .height(8.dp)\n                            .padding(end = 4.dp),\n                        tint = MaterialTheme.colorScheme.primary,\n                    )\n                }\n                if (update.bookmark) {\n                    Icon(\n                        imageVector = Icons.Filled.Bookmark,\n                        contentDescription = stringResource(MR.strings.action_filter_bookmarked),\n                        modifier = Modifier\n                            .sizeIn(\n                                maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp },\n                            ),\n                        tint = MaterialTheme.colorScheme.primary,\n                    )\n                    Spacer(modifier = Modifier.width(2.dp))\n                }\n                Text(\n                    text = update.chapterName,\n                    maxLines = 1,\n                    style = MaterialTheme.typography.bodySmall,\n                    color = LocalContentColor.current.copy(alpha = textAlpha),\n                    overflow = TextOverflow.Ellipsis,\n                    onTextLayout = { textHeight = it.size.height },\n                    modifier = Modifier\n                        .weight(weight = 1f, fill = false),\n                )\n                if (readProgress != null) {\n                    DotSeparatorText()\n                    Text(\n                        text = readProgress,\n                        maxLines = 1,\n                        color = LocalContentColor.current.copy(alpha = DISABLED_ALPHA),\n                        overflow = TextOverflow.Ellipsis,\n                    )\n                }\n            }\n        }\n\n        ChapterDownloadIndicator(\n            enabled = onDownloadChapter != null,\n            modifier = Modifier.padding(start = 4.dp),\n            downloadStateProvider = downloadStateProvider,\n            downloadProgressProvider = downloadProgressProvider,\n            onClick = { onDownloadChapter?.invoke(it) },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt",
    "content": "package eu.kanade.presentation.util\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.network.HttpException\nimport eu.kanade.tachiyomi.util.system.isOnline\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.items.chapter.model.NoChaptersException\nimport tachiyomi.domain.items.episode.model.NoEpisodesException\nimport tachiyomi.domain.source.anime.model.AnimeSourceNotInstalledException\nimport tachiyomi.domain.source.manga.model.SourceNotInstalledException\nimport tachiyomi.i18n.MR\nimport java.net.UnknownHostException\n\ncontext(Context)\nval Throwable.formattedMessage: String\n    get() {\n        when (this) {\n            is HttpException -> return stringResource(MR.strings.exception_http, code)\n            is UnknownHostException -> {\n                return if (!isOnline()) {\n                    stringResource(MR.strings.exception_offline)\n                } else {\n                    stringResource(MR.strings.exception_unknown_host, message ?: \"\")\n                }\n            }\n            is NoChaptersException, is NoEpisodesException -> return stringResource(\n                MR.strings.no_results_found,\n            )\n            is SourceNotInstalledException, is AnimeSourceNotInstalledException -> return stringResource(\n                MR.strings.loader_not_implemented_error,\n            )\n        }\n        return when (val className = this::class.simpleName) {\n            \"Exception\", \"IOException\" -> message ?: className\n            else -> \"$className: $message\"\n        }\n    }\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/FastScrollAnimateItem.kt",
    "content": "package eu.kanade.presentation.util\n\nimport androidx.compose.foundation.lazy.LazyItemScope\nimport androidx.compose.ui.Modifier\n\n// https://issuetracker.google.com/352584409\ncontext(LazyItemScope)\nfun Modifier.animateItemFastScroll() = this.animateItem(fadeInSpec = null, fadeOutSpec = null)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/ItemNumberFormatter.kt",
    "content": "package eu.kanade.presentation.util\n\nimport java.text.DecimalFormat\nimport java.text.DecimalFormatSymbols\n\nprivate val formatter = DecimalFormat(\n    \"#.###\",\n    DecimalFormatSymbols().apply { decimalSeparator = '.' },\n)\n\nfun formatChapterNumber(chapterNumber: Double): String {\n    return formatter.format(chapterNumber)\n}\n\nfun formatEpisodeNumber(episodeNumber: Double): String {\n    return formatter.format(episodeNumber)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/Navigator.kt",
    "content": "package eu.kanade.presentation.util\n\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.AnimatedContentTransitionScope\nimport androidx.compose.animation.ContentTransform\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ProvidableCompositionLocal\nimport androidx.compose.runtime.staticCompositionLocalOf\nimport androidx.compose.ui.Modifier\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.ScreenModelStore\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.core.screen.ScreenKey\nimport cafe.adriel.voyager.core.screen.uniqueScreenKey\nimport cafe.adriel.voyager.core.stack.StackEvent\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.transitions.ScreenTransitionContent\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.NavStyle\nimport kotlinx.coroutines.CoroutineName\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.plus\nimport soup.compose.material.motion.animation.materialSharedAxisX\nimport soup.compose.material.motion.animation.rememberSlideDistance\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * For invoking back press to the parent activity\n */\nval LocalBackPress: ProvidableCompositionLocal<(() -> Unit)?> = staticCompositionLocalOf { null }\n\nprivate val uiPreferences: UiPreferences = Injekt.get()\n\ninterface Tab : cafe.adriel.voyager.navigator.tab.Tab {\n    suspend fun onReselect(navigator: Navigator) {}\n\n    @Composable\n    fun currentNavigationStyle(): NavStyle = uiPreferences.navStyle().collectAsState().value\n}\n\nabstract class Screen : Screen {\n\n    override val key: ScreenKey = uniqueScreenKey\n}\n\n/**\n * A variant of ScreenModel.coroutineScope except with the IO dispatcher instead of the\n * main dispatcher.\n */\nval ScreenModel.ioCoroutineScope: CoroutineScope\n    get() = ScreenModelStore.getOrPutDependency(\n        screenModel = this,\n        name = \"ScreenModelIoCoroutineScope\",\n        factory = { key -> CoroutineScope(Dispatchers.IO + SupervisorJob()) + CoroutineName(key) },\n        onDispose = { scope -> scope.cancel() },\n    )\n\ninterface AssistContentScreen {\n    fun onProvideAssistUrl(): String?\n}\n\n@Composable\nfun DefaultNavigatorScreenTransition(\n    navigator: Navigator,\n    modifier: Modifier = Modifier,\n) {\n    val slideDistance = rememberSlideDistance()\n    ScreenTransition(\n        navigator = navigator,\n        transition = {\n            materialSharedAxisX(\n                forward = navigator.lastEvent != StackEvent.Pop,\n                slideDistance = slideDistance,\n            )\n        },\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun ScreenTransition(\n    navigator: Navigator,\n    transition: AnimatedContentTransitionScope<Screen>.() -> ContentTransform,\n    modifier: Modifier = Modifier,\n    content: ScreenTransitionContent = { it.Content() },\n) {\n    AnimatedContent(\n        targetState = navigator.lastItem,\n        transitionSpec = transition,\n        modifier = modifier,\n        label = \"transition\",\n    ) { screen ->\n        navigator.saveableState(\"transition\", screen) {\n            content(screen)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/Permissions.kt",
    "content": "package eu.kanade.presentation.util\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisposableEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.lifecycle.DefaultLifecycleObserver\nimport androidx.lifecycle.LifecycleOwner\nimport androidx.lifecycle.compose.LocalLifecycleOwner\n\n@Composable\nfun rememberRequestPackageInstallsPermissionState(initialValue: Boolean = false): Boolean {\n    val context = LocalContext.current\n    val lifecycleOwner = LocalLifecycleOwner.current\n\n    var installGranted by remember { mutableStateOf(initialValue) }\n\n    DisposableEffect(lifecycleOwner.lifecycle) {\n        val observer = object : DefaultLifecycleObserver {\n            override fun onResume(owner: LifecycleOwner) {\n                installGranted = context.packageManager.canRequestPackageInstalls()\n            }\n        }\n        lifecycleOwner.lifecycle.addObserver(observer)\n        onDispose {\n            lifecycleOwner.lifecycle.removeObserver(observer)\n        }\n    }\n\n    return installGranted\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/Resources.kt",
    "content": "package eu.kanade.presentation.util\n\nimport android.content.res.Resources\nimport androidx.annotation.DrawableRes\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.graphics.painter.BitmapPainter\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.core.content.ContextCompat\nimport androidx.core.graphics.drawable.toBitmap\n\n/**\n * Create a BitmapPainter from a drawable resource.\n * Use this only if [androidx.compose.ui.res.painterResource] doesn't work.\n *\n * @param id the resource identifier\n *\n * @return the bitmap associated with the resource\n */\n@Composable\nfun rememberResourceBitmapPainter(@DrawableRes id: Int): BitmapPainter {\n    val context = LocalContext.current\n    return remember(id) {\n        val drawable = ContextCompat.getDrawable(context, id)\n            ?: throw Resources.NotFoundException()\n        BitmapPainter(drawable.toBitmap().asImageBitmap())\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt",
    "content": "package eu.kanade.presentation.util\n\nimport android.content.Context\nimport android.text.format.DateUtils\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.Instant\nimport kotlin.time.Duration\nimport kotlin.time.Duration.Companion.minutes\n\nfun Duration.toDurationString(context: Context, fallback: String): String {\n    return toComponents { days, hours, minutes, seconds, _ ->\n        buildList(4) {\n            if (days != 0L) add(context.stringResource(MR.strings.day_short, days))\n            if (hours != 0) add(context.stringResource(MR.strings.hour_short, hours))\n            if (minutes != 0 && (days == 0L || hours == 0)) {\n                add(\n                    context.stringResource(MR.strings.minute_short, minutes),\n                )\n            }\n            if (seconds != 0 && days == 0L && hours == 0) {\n                add(\n                    context.stringResource(MR.strings.seconds_short, seconds),\n                )\n            }\n        }.joinToString(\" \").ifBlank { fallback }\n    }\n}\n\n@Composable\n@ReadOnlyComposable\nfun relativeTimeSpanString(epochMillis: Long): String {\n    val now = Instant.now().toEpochMilli()\n    return when {\n        epochMillis <= 0L -> stringResource(MR.strings.relative_time_span_never)\n        now - epochMillis < 1.minutes.inWholeMilliseconds -> stringResource(\n            MR.strings.updates_last_update_info_just_now,\n        )\n        else -> DateUtils.getRelativeTimeSpanString(epochMillis, now, DateUtils.MINUTE_IN_MILLIS).toString()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/util/WindowSize.kt",
    "content": "package eu.kanade.presentation.util\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.platform.LocalConfiguration\nimport eu.kanade.tachiyomi.util.system.isTabletUi\n\n@Composable\n@ReadOnlyComposable\nfun isTabletUi(): Boolean {\n    return LocalConfiguration.current.isTabletUi()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt",
    "content": "package eu.kanade.presentation.webview\n\nimport android.content.pm.ApplicationInfo\nimport android.graphics.Bitmap\nimport android.webkit.WebResourceRequest\nimport android.webkit.WebResourceResponse\nimport android.webkit.WebView\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\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.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ArrowBack\nimport androidx.compose.material.icons.outlined.ArrowForward\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material3.LinearProgressIndicator\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\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.draw.clip\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.unit.dp\nimport com.kevinnzou.web.AccompanistWebViewClient\nimport com.kevinnzou.web.LoadingState\nimport com.kevinnzou.web.WebView\nimport com.kevinnzou.web.rememberWebViewNavigator\nimport com.kevinnzou.web.rememberWebViewState\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.WarningBanner\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.util.system.WebViewUtil\nimport eu.kanade.tachiyomi.util.system.getHtml\nimport eu.kanade.tachiyomi.util.system.setDefaultSettings\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.launch\nimport okhttp3.Request\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun WebViewScreenContent(\n    onNavigateUp: () -> Unit,\n    initialTitle: String?,\n    url: String,\n    onShare: (String) -> Unit,\n    onOpenInBrowser: (String) -> Unit,\n    onClearCookies: (String) -> Unit,\n    headers: Map<String, String> = emptyMap(),\n    onUrlChange: (String) -> Unit = {},\n) {\n    val state = rememberWebViewState(url = url, additionalHttpHeaders = headers)\n    val navigator = rememberWebViewNavigator()\n    val context = LocalContext.current\n    val uriHandler = LocalUriHandler.current\n    val scope = rememberCoroutineScope()\n    val network = remember { Injekt.get<NetworkHelper>() }\n    val spoofedPackageName = remember { WebViewUtil.spoofedPackageName(context) }\n\n    var currentUrl by remember { mutableStateOf(url) }\n    var showCloudflareHelp by remember { mutableStateOf(false) }\n\n    val webClient = remember {\n        object : AccompanistWebViewClient() {\n            override fun onPageStarted(view: WebView, url: String?, favicon: Bitmap?) {\n                super.onPageStarted(view, url, favicon)\n                url?.let {\n                    currentUrl = it\n                    onUrlChange(it)\n                }\n            }\n\n            override fun onPageFinished(view: WebView, url: String?) {\n                super.onPageFinished(view, url)\n                scope.launch {\n                    val html = view.getHtml()\n                    showCloudflareHelp = \"window._cf_chl_opt\" in html || \"Ray ID is\" in html\n                }\n            }\n\n            override fun doUpdateVisitedHistory(\n                view: WebView,\n                url: String?,\n                isReload: Boolean,\n            ) {\n                super.doUpdateVisitedHistory(view, url, isReload)\n                url?.let {\n                    currentUrl = it\n                    onUrlChange(it)\n                }\n            }\n\n            override fun shouldOverrideUrlLoading(\n                view: WebView?,\n                request: WebResourceRequest?,\n            ): Boolean {\n                request?.let {\n                    // Don't attempt to open blobs as webpages\n                    if (it.url.toString().startsWith(\"blob:http\")) {\n                        return false\n                    }\n\n                    // Ignore intents urls\n                    if (it.url.toString().startsWith(\"intent://\")) {\n                        return true\n                    }\n\n                    // Continue with request, but with custom headers\n                    view?.loadUrl(it.url.toString(), headers)\n                }\n                return super.shouldOverrideUrlLoading(view, request)\n            }\n\n            override fun shouldInterceptRequest(\n                view: WebView?,\n                request: WebResourceRequest?,\n            ): WebResourceResponse? {\n                return try {\n                    val internalRequest = Request.Builder().apply {\n                        url(request!!.url.toString())\n                        request.requestHeaders.forEach { (key, value) ->\n                            if (key == \"X-Requested-With\" && value in setOf(context.packageName, spoofedPackageName)) {\n                                return@forEach\n                            }\n                            addHeader(key, value)\n                        }\n                        method(request.method, null)\n                    }.build()\n\n                    val response = network.nonCloudflareClient.newCall(internalRequest).execute()\n\n                    val contentType = response.body.contentType()?.let { \"${it.type}/${it.subtype}\" } ?: \"text/html\"\n                    val contentEncoding = response.body.contentType()?.charset()?.name() ?: \"utf-8\"\n\n                    WebResourceResponse(\n                        contentType,\n                        contentEncoding,\n                        response.code,\n                        response.message,\n                        response.headers.associate { it.first to it.second },\n                        response.body.byteStream(),\n                    )\n                } catch (e: Throwable) {\n                    super.shouldInterceptRequest(view, request)\n                }\n            }\n        }\n    }\n\n    Scaffold(\n        topBar = {\n            Box {\n                Column {\n                    AppBar(\n                        title = state.pageTitle ?: initialTitle,\n                        subtitle = currentUrl,\n                        navigateUp = onNavigateUp,\n                        navigationIcon = Icons.Outlined.Close,\n                        actions = {\n                            AppBarActions(\n                                persistentListOf(\n                                    AppBar.Action(\n                                        title = stringResource(MR.strings.action_webview_back),\n                                        icon = Icons.Outlined.ArrowBack,\n                                        onClick = {\n                                            if (navigator.canGoBack) {\n                                                navigator.navigateBack()\n                                            }\n                                        },\n                                        enabled = navigator.canGoBack,\n                                    ),\n                                    AppBar.Action(\n                                        title = stringResource(MR.strings.action_webview_forward),\n                                        icon = Icons.Outlined.ArrowForward,\n                                        onClick = {\n                                            if (navigator.canGoForward) {\n                                                navigator.navigateForward()\n                                            }\n                                        },\n                                        enabled = navigator.canGoForward,\n                                    ),\n                                    AppBar.OverflowAction(\n                                        title = stringResource(MR.strings.action_webview_refresh),\n                                        onClick = { navigator.reload() },\n                                    ),\n                                    AppBar.OverflowAction(\n                                        title = stringResource(MR.strings.action_share),\n                                        onClick = { onShare(currentUrl) },\n                                    ),\n                                    AppBar.OverflowAction(\n                                        title = stringResource(MR.strings.action_open_in_browser),\n                                        onClick = { onOpenInBrowser(currentUrl) },\n                                    ),\n                                    AppBar.OverflowAction(\n                                        title = stringResource(MR.strings.pref_clear_cookies),\n                                        onClick = { onClearCookies(currentUrl) },\n                                    ),\n                                ),\n                            )\n                        },\n                    )\n\n                    if (showCloudflareHelp) {\n                        Surface(\n                            modifier = Modifier.padding(8.dp),\n                        ) {\n                            WarningBanner(\n                                textRes = MR.strings.information_cloudflare_help,\n                                modifier = Modifier\n                                    .clip(MaterialTheme.shapes.small)\n                                    .clickable {\n                                        uriHandler.openUri(\n                                            \"https://aniyomi.org/docs/guides/troubleshooting/#cloudflare\",\n                                        )\n                                    },\n                            )\n                        }\n                    }\n                }\n                when (val loadingState = state.loadingState) {\n                    is LoadingState.Initializing -> LinearProgressIndicator(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .align(Alignment.BottomCenter),\n                    )\n                    is LoadingState.Loading -> LinearProgressIndicator(\n                        progress = { (loadingState as? LoadingState.Loading)?.progress ?: 1f },\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .align(Alignment.BottomCenter),\n                    )\n                    else -> {}\n                }\n            }\n        },\n    ) { contentPadding ->\n        WebView(\n            state = state,\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(contentPadding),\n            navigator = navigator,\n            onCreated = { webView ->\n                webView.setDefaultSettings()\n\n                // Debug mode (chrome://inspect/#devices)\n                if (BuildConfig.DEBUG &&\n                    0 != webView.context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE\n                ) {\n                    WebView.setWebContentsDebuggingEnabled(true)\n                }\n\n                headers[\"user-agent\"]?.let {\n                    webView.settings.userAgentString = it\n                }\n            },\n            client = webClient,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/App.kt",
    "content": "package eu.kanade.tachiyomi\n\nimport android.annotation.SuppressLint\nimport android.app.Application\nimport android.app.PendingIntent\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.os.Build\nimport android.os.Looper\nimport android.webkit.WebView\nimport androidx.core.content.ContextCompat\nimport androidx.lifecycle.DefaultLifecycleObserver\nimport androidx.lifecycle.LifecycleOwner\nimport androidx.lifecycle.ProcessLifecycleOwner\nimport androidx.lifecycle.lifecycleScope\nimport coil3.ImageLoader\nimport coil3.SingletonImageLoader\nimport coil3.network.okhttp.OkHttpNetworkFetcherFactory\nimport coil3.request.allowRgb565\nimport coil3.request.crossfade\nimport coil3.util.DebugLogger\nimport dev.mihon.injekt.patchInjekt\nimport eu.kanade.domain.DomainModule\nimport eu.kanade.domain.SYDomainModule\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode\nimport eu.kanade.tachiyomi.crash.CrashActivity\nimport eu.kanade.tachiyomi.crash.GlobalExceptionHandler\nimport eu.kanade.tachiyomi.data.coil.AnimeCoverKeyer\nimport eu.kanade.tachiyomi.data.coil.AnimeImageFetcher\nimport eu.kanade.tachiyomi.data.coil.AnimeKeyer\nimport eu.kanade.tachiyomi.data.coil.BufferedSourceFetcher\nimport eu.kanade.tachiyomi.data.coil.MangaCoverFetcher\nimport eu.kanade.tachiyomi.data.coil.MangaCoverKeyer\nimport eu.kanade.tachiyomi.data.coil.MangaKeyer\nimport eu.kanade.tachiyomi.data.coil.TachiyomiImageDecoder\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.di.AppModule\nimport eu.kanade.tachiyomi.di.PreferenceModule\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.NetworkPreferences\nimport eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.GLUtil\nimport eu.kanade.tachiyomi.util.system.WebViewUtil\nimport eu.kanade.tachiyomi.util.system.animatorDurationScale\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.notify\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport logcat.AndroidLogcatLogger\nimport logcat.LogPriority\nimport logcat.LogcatLogger\nimport mihon.core.migration.Migrator\nimport mihon.core.migration.migrations.migrations\nimport org.conscrypt.Conscrypt\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.widget.entries.anime.AnimeWidgetManager\nimport tachiyomi.presentation.widget.entries.manga.MangaWidgetManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport java.security.Security\n\nclass App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factory {\n\n    private val basePreferences: BasePreferences by injectLazy()\n    private val networkPreferences: NetworkPreferences by injectLazy()\n\n    private val disableIncognitoReceiver = DisableIncognitoReceiver()\n\n    @SuppressLint(\"LaunchActivityFromNotification\")\n    override fun onCreate() {\n        super<Application>.onCreate()\n        patchInjekt()\n\n        GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java)\n\n        // TLS 1.3 support for Android < 10\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {\n            Security.insertProviderAt(Conscrypt.newProvider(), 1)\n        }\n\n        // Avoid potential crashes\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            val process = getProcessName()\n            if (packageName != process) WebView.setDataDirectorySuffix(process)\n        }\n\n        Injekt.importModule(PreferenceModule(this))\n        Injekt.importModule(AppModule(this))\n        Injekt.importModule(DomainModule())\n        // SY -->\n        Injekt.importModule(SYDomainModule())\n        // SY <--\n\n        setupNotificationChannels()\n\n        ProcessLifecycleOwner.get().lifecycle.addObserver(this)\n\n        val scope = ProcessLifecycleOwner.get().lifecycleScope\n\n        // Show notification to disable Incognito Mode when it's enabled\n        basePreferences.incognitoMode().changes()\n            .onEach { enabled ->\n                if (enabled) {\n                    disableIncognitoReceiver.register()\n                    notify(\n                        Notifications.ID_INCOGNITO_MODE,\n                        Notifications.CHANNEL_INCOGNITO_MODE,\n                    ) {\n                        setContentTitle(stringResource(MR.strings.pref_incognito_mode))\n                        setContentText(stringResource(MR.strings.notification_incognito_text))\n                        setSmallIcon(R.drawable.ic_glasses_24dp)\n                        setOngoing(true)\n\n                        val pendingIntent = PendingIntent.getBroadcast(\n                            this@App,\n                            0,\n                            Intent(ACTION_DISABLE_INCOGNITO_MODE),\n                            PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE,\n                        )\n                        setContentIntent(pendingIntent)\n                    }\n                } else {\n                    disableIncognitoReceiver.unregister()\n                    cancelNotification(Notifications.ID_INCOGNITO_MODE)\n                }\n            }\n            .launchIn(ProcessLifecycleOwner.get().lifecycleScope)\n\n        basePreferences.hardwareBitmapThreshold().let { preference ->\n            if (!preference.isSet()) preference.set(GLUtil.DEVICE_TEXTURE_LIMIT)\n        }\n\n        basePreferences.hardwareBitmapThreshold().changes()\n            .onEach { ImageUtil.hardwareBitmapThreshold = it }\n            .launchIn(scope)\n\n        setAppCompatDelegateThemeMode(Injekt.get<UiPreferences>().themeMode().get())\n\n        // Updates widget update\n        with(MangaWidgetManager(Injekt.get(), Injekt.get())) {\n            init(ProcessLifecycleOwner.get().lifecycleScope)\n        }\n\n        with(AnimeWidgetManager(Injekt.get(), Injekt.get())) {\n            init(ProcessLifecycleOwner.get().lifecycleScope)\n        }\n\n        if (!LogcatLogger.isInstalled && networkPreferences.verboseLogging().get()) {\n            LogcatLogger.install(AndroidLogcatLogger(LogPriority.VERBOSE))\n        }\n\n        initializeMigrator()\n    }\n\n    private fun initializeMigrator() {\n        val preferenceStore = Injekt.get<PreferenceStore>()\n        val preference = preferenceStore.getInt(Preference.appStateKey(\"last_version_code\"), 0)\n        logcat { \"Migration from ${preference.get()} to ${BuildConfig.VERSION_CODE}\" }\n        Migrator.initialize(\n            old = preference.get(),\n            new = BuildConfig.VERSION_CODE,\n            migrations = migrations,\n            onMigrationComplete = {\n                logcat { \"Updating last version to ${BuildConfig.VERSION_CODE}\" }\n                preference.set(BuildConfig.VERSION_CODE)\n            },\n        )\n    }\n\n    override fun newImageLoader(context: Context): ImageLoader {\n        return ImageLoader.Builder(this).apply {\n            val callFactoryLazy = lazy { Injekt.get<NetworkHelper>().client }\n            components {\n                // NetworkFetcher.Factory\n                add(OkHttpNetworkFetcherFactory(callFactoryLazy::value))\n                // Decoder.Factory\n                add(TachiyomiImageDecoder.Factory())\n                // Fetcher.Factory\n                add(BufferedSourceFetcher.Factory())\n                add(MangaCoverFetcher.MangaFactory(callFactoryLazy))\n                add(MangaCoverFetcher.MangaCoverFactory(callFactoryLazy))\n                add(AnimeImageFetcher.AnimeFactory(callFactoryLazy))\n                add(AnimeImageFetcher.AnimeCoverFactory(callFactoryLazy))\n                // Keyer\n                add(AnimeKeyer())\n                add(MangaKeyer())\n                add(AnimeCoverKeyer())\n                add(MangaCoverKeyer())\n            }\n\n            crossfade((300 * this@App.animatorDurationScale).toInt())\n            allowRgb565(DeviceUtil.isLowRamDevice(this@App))\n            if (networkPreferences.verboseLogging().get()) logger(DebugLogger())\n\n            // Coil spawns a new thread for every image load by default\n            fetcherCoroutineContext(Dispatchers.IO.limitedParallelism(8))\n            decoderCoroutineContext(Dispatchers.IO.limitedParallelism(3))\n        }\n            .build()\n    }\n\n    override fun onStart(owner: LifecycleOwner) {\n        SecureActivityDelegate.onApplicationStart()\n    }\n\n    override fun onStop(owner: LifecycleOwner) {\n        SecureActivityDelegate.onApplicationStopped()\n    }\n\n    override fun getPackageName(): String {\n        try {\n            // Override the value passed as X-Requested-With in WebView requests\n            val stackTrace = Looper.getMainLooper().thread.stackTrace\n            val isChromiumCall = stackTrace.any { trace ->\n                trace.className.equals(\"org.chromium.base.BuildInfo\", ignoreCase = true) &&\n                    setOf(\"getAll\", \"getPackageName\", \"<init>\").any { trace.methodName.equals(it, ignoreCase = true) }\n            }\n\n            if (isChromiumCall) return WebViewUtil.spoofedPackageName(applicationContext)\n        } catch (_: Exception) {\n        }\n\n        return super.getPackageName()\n    }\n\n    private fun setupNotificationChannels() {\n        try {\n            Notifications.createChannels(this)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to modify notification channels\" }\n        }\n    }\n\n    private inner class DisableIncognitoReceiver : BroadcastReceiver() {\n        private var registered = false\n\n        override fun onReceive(context: Context, intent: Intent) {\n            basePreferences.incognitoMode().set(false)\n        }\n\n        fun register() {\n            if (!registered) {\n                ContextCompat.registerReceiver(\n                    this@App,\n                    this,\n                    IntentFilter(ACTION_DISABLE_INCOGNITO_MODE),\n                    ContextCompat.RECEIVER_NOT_EXPORTED,\n                )\n                registered = true\n            }\n        }\n\n        fun unregister() {\n            if (registered) {\n                unregisterReceiver(this)\n                registered = false\n            }\n        }\n    }\n}\n\nprivate const val ACTION_DISABLE_INCOGNITO_MODE = \"tachi.action.DISABLE_INCOGNITO_MODE\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/AppInfo.kt",
    "content": "package eu.kanade.tachiyomi\n\nimport tachiyomi.core.common.util.system.ImageUtil\n\n/**\n * Used by extensions.\n */\n@Suppress(\"UNUSED\")\nobject AppInfo {\n    /**\n     * Version code of the host application. May be useful for sharing as User-Agent information.\n     * Note that this value differs between forks so logic should not rely on it.\n     *\n     * @since extension-lib 1.3\n     */\n    fun getVersionCode(): Int = BuildConfig.VERSION_CODE\n\n    /**\n     * Version name of the host application. May be useful for sharing as User-Agent information.\n     * Note that this value differs between forks so logic should not rely on it.\n     *\n     * @since extension-lib 1.3\n     */\n    fun getVersionName(): String = BuildConfig.VERSION_NAME\n\n    /**\n     * A list of supported image MIME types by the reader.\n     * e.g. [\"image/jpeg\", \"image/png\", ...]\n     *\n     * @since extension-lib 1.5\n     */\n    fun getSupportedImageMimeTypes(): List<String> = ImageUtil.ImageType.entries.map { it.mime }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/crash/CrashActivity.kt",
    "content": "package eu.kanade.tachiyomi.crash\n\nimport android.content.Intent\nimport android.os.Bundle\nimport androidx.core.view.WindowCompat\nimport eu.kanade.presentation.crash.CrashScreen\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.util.view.setComposeContent\n\nclass CrashActivity : BaseActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        WindowCompat.setDecorFitsSystemWindows(window, false)\n\n        val exception = GlobalExceptionHandler.getThrowableFromIntent(intent)\n        setComposeContent {\n            CrashScreen(\n                exception = exception,\n                onRestartClick = {\n                    finishAffinity()\n                    startActivity(Intent(this@CrashActivity, MainActivity::class.java))\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/crash/GlobalExceptionHandler.kt",
    "content": "package eu.kanade.tachiyomi.crash\n\nimport android.content.Context\nimport android.content.Intent\nimport kotlinx.serialization.KSerializer\nimport kotlinx.serialization.descriptors.PrimitiveKind\nimport kotlinx.serialization.descriptors.PrimitiveSerialDescriptor\nimport kotlinx.serialization.descriptors.SerialDescriptor\nimport kotlinx.serialization.encoding.Decoder\nimport kotlinx.serialization.encoding.Encoder\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nclass GlobalExceptionHandler private constructor(\n    private val applicationContext: Context,\n    private val defaultHandler: Thread.UncaughtExceptionHandler,\n    private val activityToBeLaunched: Class<*>,\n) : Thread.UncaughtExceptionHandler {\n\n    object ThrowableSerializer : KSerializer<Throwable> {\n        override val descriptor: SerialDescriptor =\n            PrimitiveSerialDescriptor(\"Throwable\", PrimitiveKind.STRING)\n\n        override fun deserialize(decoder: Decoder): Throwable =\n            Throwable(message = decoder.decodeString())\n\n        override fun serialize(encoder: Encoder, value: Throwable) =\n            encoder.encodeString(value.stackTraceToString())\n    }\n\n    override fun uncaughtException(thread: Thread, exception: Throwable) {\n        logcat(priority = LogPriority.ERROR, throwable = exception)\n        launchActivity(applicationContext, activityToBeLaunched, exception)\n        defaultHandler.uncaughtException(thread, exception)\n    }\n\n    private fun launchActivity(\n        applicationContext: Context,\n        activity: Class<*>,\n        exception: Throwable,\n    ) {\n        val intent = Intent(applicationContext, activity).apply {\n            putExtra(INTENT_EXTRA, Json.encodeToString(ThrowableSerializer, exception))\n            addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)\n            addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)\n        }\n        applicationContext.startActivity(intent)\n    }\n\n    companion object {\n        private const val INTENT_EXTRA = \"Throwable\"\n\n        fun initialize(\n            applicationContext: Context,\n            activityToBeLaunched: Class<*>,\n        ) {\n            val handler = GlobalExceptionHandler(\n                applicationContext,\n                Thread.getDefaultUncaughtExceptionHandler() as Thread.UncaughtExceptionHandler,\n                activityToBeLaunched,\n            )\n            Thread.setDefaultUncaughtExceptionHandler(handler)\n        }\n\n        fun getThrowableFromIntent(intent: Intent): Throwable? {\n            return try {\n                Json.decodeFromString(ThrowableSerializer, intent.getStringExtra(INTENT_EXTRA)!!)\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Wasn't able to retrieve throwable from intent\" }\n                null\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupDecoder.kt",
    "content": "package eu.kanade.tachiyomi.data.backup\n\nimport android.content.Context\nimport android.net.Uri\nimport eu.kanade.tachiyomi.data.backup.models.Backup\nimport eu.kanade.tachiyomi.data.backup.models.LegacyBackup\nimport kotlinx.serialization.SerializationException\nimport kotlinx.serialization.protobuf.ProtoBuf\nimport okio.buffer\nimport okio.gzip\nimport okio.source\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.IOException\n\nclass BackupDecoder(\n    private val context: Context,\n    private val parser: ProtoBuf = Injekt.get(),\n) {\n    /**\n     * Decode a potentially-gzipped backup.\n     */\n    fun decode(uri: Uri): Backup {\n        return context.contentResolver.openInputStream(uri)!!.use { inputStream ->\n            val source = inputStream.source().buffer()\n\n            val peeked = source.peek().apply {\n                require(2)\n            }\n            val id1id2 = peeked.readShort()\n            val backupString = when (id1id2.toInt()) {\n                0x1f8b -> source.gzip().buffer() // 0x1f8b is gzip magic bytes\n                MAGIC_JSON_SIGNATURE1, MAGIC_JSON_SIGNATURE2, MAGIC_JSON_SIGNATURE3 -> {\n                    throw IOException(context.stringResource(MR.strings.invalid_backup_file_json))\n                }\n                else -> source\n            }.use { it.readByteArray() }\n\n            try {\n                if (BackupDetector.isLegacyBackup(backupString)) {\n                    parser.decodeFromByteArray(LegacyBackup.serializer(), backupString)\n                        .toBackup()\n                } else {\n                    parser.decodeFromByteArray(Backup.serializer(), backupString)\n                }\n            } catch (_: SerializationException) {\n                throw IOException(context.stringResource(MR.strings.invalid_backup_file_unknown))\n            }\n        }\n    }\n\n    companion object {\n        private const val MAGIC_JSON_SIGNATURE1 = 0x7b7d // `{}`\n        private const val MAGIC_JSON_SIGNATURE2 = 0x7b22 // `{\"`\n        private const val MAGIC_JSON_SIGNATURE3 = 0x7b0a // `{\\n`\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupDetector.kt",
    "content": "package eu.kanade.tachiyomi.data.backup\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.SerializationException\nimport kotlinx.serialization.protobuf.ProtoBuf\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n/**\n * Try to guess if the backup is an old aniyomi backup.\n *\n * Returns true if it's (probably) an old aniyomi backup, or false if it's a mihon backup\n * or a new aniyomi backup.\n */\nobject BackupDetector {\n    @Serializable\n    data class BackupDetector(\n        @ProtoNumber(103) val backupAnimeSources: List<DetectAnimeSource> = emptyList(),\n        @ProtoNumber(500) val isLegacy: Boolean = true,\n    ) {\n        @Serializable\n        data class DetectAnimeSource(\n            @ProtoNumber(1) val name: String = \"\",\n            @ProtoNumber(2) val sourceId: Long,\n        )\n    }\n\n    fun isLegacyBackup(bytes: ByteArray): Boolean {\n        return try {\n            val detect = ProtoBuf.decodeFromByteArray(BackupDetector.serializer(), bytes)\n            detect.isLegacy && detect.backupAnimeSources.isNotEmpty()\n        } catch (_: SerializationException) {\n            false\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup\n\nimport android.content.Context\nimport android.net.Uri\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass BackupFileValidator(\n    private val context: Context,\n    private val animeSourceManager: AnimeSourceManager = Injekt.get(),\n    private val mangaSourceManager: MangaSourceManager = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n) {\n\n    /**\n     * Checks for critical backup file data.\n     *\n     * @return List of missing sources or missing trackers.\n     */\n    fun validate(uri: Uri): Results {\n        val backup = try {\n            BackupDecoder(context).decode(uri)\n        } catch (e: Exception) {\n            throw IllegalStateException(e)\n        }\n\n        val sources = backup.backupSources.associate { it.sourceId to it.name }\n        val animesources = backup.backupAnimeSources.associate { it.sourceId to it.name }\n        val missingSources = sources\n            .filter { mangaSourceManager.get(it.key) == null }\n            .values.map {\n                val id = it.toLongOrNull()\n                if (id == null) {\n                    it\n                } else {\n                    mangaSourceManager.getOrStub(id).toString()\n                }\n            }\n            .distinct()\n            .sorted() +\n            animesources\n                .filter { animeSourceManager.get(it.key) == null }\n                .values.map {\n                    val id = it.toLongOrNull()\n                    if (id == null) {\n                        it\n                    } else {\n                        animeSourceManager.getOrStub(id).toString()\n                    }\n                }\n                .distinct()\n                .sorted()\n\n        val animeTrackers = backup.backupAnime\n            .flatMap { it.tracking }\n            .map { it.syncId }\n        val mangaTrackers = backup.backupManga\n            .flatMap { it.tracking }\n            .map { it.syncId }\n        val trackers = (animeTrackers + mangaTrackers).distinct()\n        val missingTrackers = trackers\n            .mapNotNull { trackerManager.get(it.toLong()) }\n            .filter { !it.isLoggedIn }\n            .map { it.name }\n            .sorted()\n\n        return Results(missingSources, missingTrackers)\n    }\n\n    data class Results(\n        val missingSources: List<String>,\n        val missingTrackers: List<String>,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt",
    "content": "package eu.kanade.tachiyomi.data.backup\n\nimport android.content.Context\nimport android.graphics.BitmapFactory\nimport androidx.core.app.NotificationCompat\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.displayablePath\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\nimport java.util.concurrent.TimeUnit\n\nclass BackupNotifier(private val context: Context) {\n\n    private val preferences: SecurityPreferences by injectLazy()\n\n    private val progressNotificationBuilder = context.notificationBuilder(\n        Notifications.CHANNEL_BACKUP_RESTORE_PROGRESS,\n    ) {\n        setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))\n        setSmallIcon(R.drawable.ic_ani)\n        setAutoCancel(false)\n        setOngoing(true)\n        setOnlyAlertOnce(true)\n    }\n\n    private val completeNotificationBuilder = context.notificationBuilder(\n        Notifications.CHANNEL_BACKUP_RESTORE_COMPLETE,\n    ) {\n        setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))\n        setSmallIcon(R.drawable.ic_ani)\n        setAutoCancel(false)\n    }\n\n    private fun NotificationCompat.Builder.show(id: Int) {\n        context.notify(id, build())\n    }\n\n    fun showBackupProgress(): NotificationCompat.Builder {\n        val builder = with(progressNotificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.creating_backup))\n\n            setProgress(0, 0, true)\n        }\n\n        builder.show(Notifications.ID_BACKUP_PROGRESS)\n\n        return builder\n    }\n\n    fun showBackupError(error: String?) {\n        context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)\n\n        with(completeNotificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.creating_backup_error))\n            setContentText(error)\n\n            show(Notifications.ID_BACKUP_COMPLETE)\n        }\n    }\n\n    fun showBackupComplete(file: UniFile) {\n        context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)\n\n        with(completeNotificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.backup_created))\n            setContentText(file.displayablePath)\n\n            clearActions()\n            addAction(\n                R.drawable.ic_share_24dp,\n                context.stringResource(MR.strings.action_share),\n                NotificationReceiver.shareBackupPendingBroadcast(context, file.uri),\n            )\n\n            show(Notifications.ID_BACKUP_COMPLETE)\n        }\n    }\n\n    fun showRestoreProgress(\n        content: String = \"\",\n        progress: Int = 0,\n        maxAmount: Int = 100,\n        sync: Boolean = false,\n    ): NotificationCompat.Builder {\n        val builder = with(progressNotificationBuilder) {\n            val contentTitle = if (sync) {\n                context.stringResource(MR.strings.syncing_library)\n            } else {\n                context.stringResource(MR.strings.restoring_backup)\n            }\n            setContentTitle(contentTitle)\n\n            if (!preferences.hideNotificationContent().get()) {\n                setContentText(content)\n            }\n\n            setProgress(maxAmount, progress, false)\n            setOnlyAlertOnce(true)\n\n            clearActions()\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel),\n                NotificationReceiver.cancelRestorePendingBroadcast(\n                    context,\n                    Notifications.ID_RESTORE_PROGRESS,\n                ),\n            )\n        }\n\n        builder.show(Notifications.ID_RESTORE_PROGRESS)\n\n        return builder\n    }\n\n    fun showRestoreError(error: String?) {\n        context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)\n\n        with(completeNotificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.restoring_backup_error))\n            setContentText(error)\n\n            show(Notifications.ID_RESTORE_COMPLETE)\n        }\n    }\n\n    fun showRestoreComplete(\n        time: Long,\n        errorCount: Int,\n        path: String?,\n        file: String?,\n        sync: Boolean,\n    ) {\n        val contentTitle = if (sync) {\n            context.stringResource(MR.strings.library_sync_complete)\n        } else {\n            context.stringResource(MR.strings.restore_completed)\n        }\n\n        context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)\n\n        val timeString = context.stringResource(\n            MR.strings.restore_duration,\n            TimeUnit.MILLISECONDS.toMinutes(time),\n            TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(\n                TimeUnit.MILLISECONDS.toMinutes(time),\n            ),\n        )\n\n        with(completeNotificationBuilder) {\n            setContentTitle(contentTitle)\n            setContentText(\n                context.resources.getQuantityString(\n                    R.plurals.restore_completed_message,\n                    errorCount,\n                    timeString,\n                    errorCount,\n                ),\n            )\n\n            clearActions()\n            if (errorCount > 0 && !path.isNullOrEmpty() && !file.isNullOrEmpty()) {\n                val destFile = File(path, file)\n                val uri = destFile.getUriCompat(context)\n\n                val errorLogIntent = NotificationReceiver.openErrorLogPendingActivity(context, uri)\n                setContentIntent(errorLogIntent)\n                addAction(\n                    R.drawable.ic_folder_24dp,\n                    context.stringResource(MR.strings.action_show_errors),\n                    errorLogIntent,\n                )\n            }\n\n            show(Notifications.ID_RESTORE_COMPLETE)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.net.Uri\nimport android.os.Build\nimport androidx.core.net.toUri\nimport androidx.work.BackoffPolicy\nimport androidx.work.Constraints\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingPeriodicWorkPolicy\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.PeriodicWorkRequestBuilder\nimport androidx.work.WorkerParameters\nimport androidx.work.workDataOf\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.data.backup.BackupNotifier\nimport eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.isRunning\nimport eu.kanade.tachiyomi.util.system.setForegroundSafely\nimport eu.kanade.tachiyomi.util.system.workManager\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.backup.service.BackupPreferences\nimport tachiyomi.domain.storage.service.StorageManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.TimeUnit\n\nclass BackupCreateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val notifier = BackupNotifier(context)\n\n    override suspend fun doWork(): Result {\n        val isAutoBackup = inputData.getBoolean(IS_AUTO_BACKUP_KEY, true)\n\n        if (isAutoBackup && BackupRestoreJob.isRunning(context)) return Result.retry()\n\n        val uri = inputData.getString(LOCATION_URI_KEY)?.toUri()\n            ?: getAutomaticBackupLocation()\n            ?: return Result.failure()\n\n        setForegroundSafely()\n\n        val options = inputData.getBooleanArray(OPTIONS_KEY)?.let { BackupOptions.fromBooleanArray(it) }\n            ?: BackupOptions()\n\n        return try {\n            val location = BackupCreator(context, isAutoBackup).backup(uri, options)\n            if (!isAutoBackup) {\n                notifier.showBackupComplete(UniFile.fromUri(context, location.toUri())!!)\n            }\n            Result.success()\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            if (!isAutoBackup) notifier.showBackupError(e.message)\n            Result.failure()\n        } finally {\n            context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)\n        }\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        return ForegroundInfo(\n            Notifications.ID_BACKUP_PROGRESS,\n            notifier.showBackupProgress().build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    private fun getAutomaticBackupLocation(): Uri? {\n        val storageManager = Injekt.get<StorageManager>()\n        return storageManager.getAutomaticBackupsDirectory()?.uri\n    }\n\n    companion object {\n        fun isManualJobRunning(context: Context): Boolean {\n            return context.workManager.isRunning(TAG_MANUAL)\n        }\n\n        fun setupTask(context: Context, prefInterval: Int? = null) {\n            val backupPreferences = Injekt.get<BackupPreferences>()\n            val interval = prefInterval ?: backupPreferences.backupInterval().get()\n            if (interval > 0) {\n                val constraints = Constraints(\n                    requiresBatteryNotLow = true,\n                )\n\n                val request = PeriodicWorkRequestBuilder<BackupCreateJob>(\n                    interval.toLong(),\n                    TimeUnit.HOURS,\n                    10,\n                    TimeUnit.MINUTES,\n                )\n                    .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 10, TimeUnit.MINUTES)\n                    .addTag(TAG_AUTO)\n                    .setConstraints(constraints)\n                    .setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true))\n                    .build()\n\n                context.workManager.enqueueUniquePeriodicWork(TAG_AUTO, ExistingPeriodicWorkPolicy.UPDATE, request)\n            } else {\n                context.workManager.cancelUniqueWork(TAG_AUTO)\n            }\n        }\n\n        fun startNow(context: Context, uri: Uri, options: BackupOptions) {\n            val inputData = workDataOf(\n                IS_AUTO_BACKUP_KEY to false,\n                LOCATION_URI_KEY to uri.toString(),\n                OPTIONS_KEY to options.asBooleanArray(),\n            )\n            val request = OneTimeWorkRequestBuilder<BackupCreateJob>()\n                .addTag(TAG_MANUAL)\n                .setInputData(inputData)\n                .build()\n            context.workManager.enqueueUniqueWork(TAG_MANUAL, ExistingWorkPolicy.KEEP, request)\n        }\n    }\n}\n\nprivate const val TAG_AUTO = \"BackupCreator\"\nprivate const val TAG_MANUAL = \"$TAG_AUTO:manual\"\n\nprivate const val IS_AUTO_BACKUP_KEY = \"is_auto_backup\" // Boolean\nprivate const val LOCATION_URI_KEY = \"location_uri\" // String\nprivate const val OPTIONS_KEY = \"options\" // BooleanArray\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create\n\nimport android.content.Context\nimport android.net.Uri\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.backup.BackupFileValidator\nimport eu.kanade.tachiyomi.data.backup.create.creators.AnimeBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.AnimeCategoriesBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.AnimeExtensionRepoBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.AnimeSourcesBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.CustomButtonBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.ExtensionsBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.MangaBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.MangaCategoriesBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.MangaExtensionRepoBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.MangaSourcesBackupCreator\nimport eu.kanade.tachiyomi.data.backup.create.creators.PreferenceBackupCreator\nimport eu.kanade.tachiyomi.data.backup.models.Backup\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnimeSource\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.BackupCustomButtons\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtension\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos\nimport eu.kanade.tachiyomi.data.backup.models.BackupManga\nimport eu.kanade.tachiyomi.data.backup.models.BackupPreference\nimport eu.kanade.tachiyomi.data.backup.models.BackupSource\nimport eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences\nimport kotlinx.serialization.protobuf.ProtoBuf\nimport logcat.LogPriority\nimport okio.buffer\nimport okio.gzip\nimport okio.sink\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.backup.service.BackupPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeFavorites\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.entries.manga.interactor.GetMangaFavorites\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.FileOutputStream\nimport java.text.SimpleDateFormat\nimport java.time.Instant\nimport java.util.Date\nimport java.util.Locale\n\nclass BackupCreator(\n    private val context: Context,\n    private val isAutoBackup: Boolean,\n\n    private val parser: ProtoBuf = Injekt.get(),\n    private val getAnimeFavorites: GetAnimeFavorites = Injekt.get(),\n    private val getMangaFavorites: GetMangaFavorites = Injekt.get(),\n    private val backupPreferences: BackupPreferences = Injekt.get(),\n    private val mangaRepository: MangaRepository = Injekt.get(),\n    private val animeRepository: AnimeRepository = Injekt.get(),\n\n    private val animeCategoriesBackupCreator: AnimeCategoriesBackupCreator = AnimeCategoriesBackupCreator(),\n    private val mangaCategoriesBackupCreator: MangaCategoriesBackupCreator = MangaCategoriesBackupCreator(),\n    private val animeBackupCreator: AnimeBackupCreator = AnimeBackupCreator(),\n    private val mangaBackupCreator: MangaBackupCreator = MangaBackupCreator(),\n    private val preferenceBackupCreator: PreferenceBackupCreator = PreferenceBackupCreator(),\n    private val animeExtensionRepoBackupCreator: AnimeExtensionRepoBackupCreator = AnimeExtensionRepoBackupCreator(),\n    private val mangaExtensionRepoBackupCreator: MangaExtensionRepoBackupCreator = MangaExtensionRepoBackupCreator(),\n    private val customButtonBackupCreator: CustomButtonBackupCreator = CustomButtonBackupCreator(),\n    private val animeSourcesBackupCreator: AnimeSourcesBackupCreator = AnimeSourcesBackupCreator(),\n    private val mangaSourcesBackupCreator: MangaSourcesBackupCreator = MangaSourcesBackupCreator(),\n    private val extensionsBackupCreator: ExtensionsBackupCreator = ExtensionsBackupCreator(context),\n) {\n\n    suspend fun backup(uri: Uri, options: BackupOptions): String {\n        var file: UniFile? = null\n        try {\n            file = if (isAutoBackup) {\n                // Get dir of file and create\n                val dir = UniFile.fromUri(context, uri)\n                // Delete older backups\n                dir?.listFiles { _, filename -> FILENAME_REGEX.matches(filename) }\n                    .orEmpty()\n                    .sortedByDescending { it.name }\n                    .drop(MAX_AUTO_BACKUPS - 1)\n                    .forEach { it.delete() }\n                // Create new file to place backup\n                dir?.createFile(getFilename())\n            } else {\n                UniFile.fromUri(context, uri)\n            }\n\n            if (file == null || !file.isFile) {\n                throw IllegalStateException(context.stringResource(MR.strings.create_backup_file_error))\n            }\n\n            val nonFavoriteAnime = if (options.readEntries) {\n                animeRepository.getWatchedAnimeNotInLibrary()\n            } else {\n                emptyList()\n            }\n            val backupAnime = backupAnimes(getAnimeFavorites.await() + nonFavoriteAnime, options)\n            val nonFavoriteManga = if (options.readEntries) {\n                mangaRepository.getReadMangaNotInLibrary()\n            } else {\n                emptyList()\n            }\n            val backupManga = backupMangas(getMangaFavorites.await() + nonFavoriteManga, options)\n\n            val backup = Backup(\n                backupManga = backupManga,\n                backupCategories = backupMangaCategories(options),\n                backupSources = backupMangaSources(backupManga),\n                backupPreferences = backupAppPreferences(options),\n                backupSourcePreferences = backupSourcePreferences(options),\n                backupMangaExtensionRepo = backupMangaExtensionRepos(options),\n\n                isLegacy = false,\n                backupAnime = backupAnime,\n                backupAnimeCategories = backupAnimeCategories(options),\n                backupAnimeSources = backupAnimeSources(backupAnime),\n                backupExtensions = backupExtensions(options),\n                backupAnimeExtensionRepo = backupAnimeExtensionRepos(options),\n                backupCustomButton = backupCustomButtons(options),\n            )\n\n            val byteArray = parser.encodeToByteArray(Backup.serializer(), backup)\n            if (byteArray.isEmpty()) {\n                throw IllegalStateException(context.stringResource(MR.strings.empty_backup_error))\n            }\n\n            file.openOutputStream()\n                .also {\n                    // Force overwrite old file\n                    (it as? FileOutputStream)?.channel?.truncate(0)\n                }\n                .sink().gzip().buffer().use {\n                    it.write(byteArray)\n                }\n            val fileUri = file.uri\n\n            // Make sure it's a valid backup file\n            BackupFileValidator(context).validate(fileUri)\n\n            if (isAutoBackup) {\n                backupPreferences.lastAutoBackupTimestamp().set(Instant.now().toEpochMilli())\n            }\n\n            return fileUri.toString()\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            file?.delete()\n            throw e\n        }\n    }\n\n    private suspend fun backupAnimeCategories(options: BackupOptions): List<BackupCategory> {\n        if (!options.categories) return emptyList()\n\n        return animeCategoriesBackupCreator()\n    }\n\n    private suspend fun backupMangaCategories(options: BackupOptions): List<BackupCategory> {\n        if (!options.categories) return emptyList()\n\n        return mangaCategoriesBackupCreator()\n    }\n\n    private suspend fun backupMangas(mangas: List<Manga>, options: BackupOptions): List<BackupManga> {\n        if (!options.libraryEntries) return emptyList()\n\n        return mangaBackupCreator(mangas, options)\n    }\n\n    private suspend fun backupAnimes(animes: List<Anime>, options: BackupOptions): List<BackupAnime> {\n        if (!options.libraryEntries) return emptyList()\n\n        return animeBackupCreator(animes, options)\n    }\n\n    private fun backupAnimeSources(animes: List<BackupAnime>): List<BackupAnimeSource> {\n        return animeSourcesBackupCreator(animes)\n    }\n    private fun backupMangaSources(mangas: List<BackupManga>): List<BackupSource> {\n        return mangaSourcesBackupCreator(mangas)\n    }\n\n    private fun backupAppPreferences(options: BackupOptions): List<BackupPreference> {\n        if (!options.appSettings) return emptyList()\n\n        return preferenceBackupCreator.createApp(includePrivatePreferences = options.privateSettings)\n    }\n\n    private suspend fun backupAnimeExtensionRepos(options: BackupOptions): List<BackupExtensionRepos> {\n        if (!options.extensionRepoSettings) return emptyList()\n\n        return animeExtensionRepoBackupCreator()\n    }\n\n    private suspend fun backupMangaExtensionRepos(options: BackupOptions): List<BackupExtensionRepos> {\n        if (!options.extensionRepoSettings) return emptyList()\n\n        return mangaExtensionRepoBackupCreator()\n    }\n\n    private suspend fun backupCustomButtons(options: BackupOptions): List<BackupCustomButtons> {\n        if (!options.customButton) return emptyList()\n\n        return customButtonBackupCreator()\n    }\n\n    private fun backupSourcePreferences(options: BackupOptions): List<BackupSourcePreferences> {\n        if (!options.sourceSettings) return emptyList()\n\n        return preferenceBackupCreator.createSource(includePrivatePreferences = options.privateSettings)\n    }\n\n    private fun backupExtensions(options: BackupOptions): List<BackupExtension> {\n        if (!options.extensions) return emptyList()\n\n        return extensionsBackupCreator()\n    }\n\n    companion object {\n        private const val MAX_AUTO_BACKUPS: Int = 4\n        private val FILENAME_REGEX = \"\"\"${BuildConfig.APPLICATION_ID}_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}.tachibk\"\"\".toRegex()\n\n        fun getFilename(): String {\n            val date = SimpleDateFormat(\"yyyy-MM-dd_HH-mm\", Locale.ENGLISH).format(Date())\n            return \"${BuildConfig.APPLICATION_ID}_$date.tachibk\"\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create\n\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\ndata class BackupOptions(\n    val libraryEntries: Boolean = true,\n    val categories: Boolean = true,\n    val chapters: Boolean = true,\n    val tracking: Boolean = true,\n    val history: Boolean = true,\n    val readEntries: Boolean = true,\n    val appSettings: Boolean = true,\n    val extensionRepoSettings: Boolean = true,\n    val customButton: Boolean = true,\n    val sourceSettings: Boolean = true,\n    val privateSettings: Boolean = false,\n    val extensions: Boolean = false,\n) {\n\n    fun asBooleanArray() = booleanArrayOf(\n        libraryEntries,\n        categories,\n        chapters,\n        tracking,\n        history,\n        readEntries,\n        appSettings,\n        extensionRepoSettings,\n        customButton,\n        sourceSettings,\n        privateSettings,\n        extensions,\n    )\n\n    fun canCreate() = libraryEntries ||\n        categories ||\n        appSettings ||\n        extensionRepoSettings ||\n        customButton ||\n        sourceSettings\n\n    companion object {\n        val libraryOptions = persistentListOf(\n            Entry(\n                label = AYMR.strings.entries,\n                getter = BackupOptions::libraryEntries,\n                setter = { options, enabled -> options.copy(libraryEntries = enabled) },\n            ),\n            Entry(\n                label = AYMR.strings.chapters_episodes,\n                getter = BackupOptions::chapters,\n                setter = { options, enabled -> options.copy(chapters = enabled) },\n                enabled = { it.libraryEntries },\n            ),\n            Entry(\n                label = MR.strings.track,\n                getter = BackupOptions::tracking,\n                setter = { options, enabled -> options.copy(tracking = enabled) },\n                enabled = { it.libraryEntries },\n            ),\n            Entry(\n                label = MR.strings.history,\n                getter = BackupOptions::history,\n                setter = { options, enabled -> options.copy(history = enabled) },\n                enabled = { it.libraryEntries },\n            ),\n            Entry(\n                label = MR.strings.categories,\n                getter = BackupOptions::categories,\n                setter = { options, enabled -> options.copy(categories = enabled) },\n            ),\n            Entry(\n                label = AYMR.strings.non_library_settings,\n                getter = BackupOptions::readEntries,\n                setter = { options, enabled -> options.copy(readEntries = enabled) },\n                enabled = { it.libraryEntries },\n            ),\n        )\n\n        val settingsOptions = persistentListOf(\n            Entry(\n                label = MR.strings.app_settings,\n                getter = BackupOptions::appSettings,\n                setter = { options, enabled -> options.copy(appSettings = enabled) },\n            ),\n            Entry(\n                label = MR.strings.extensionRepo_settings,\n                getter = BackupOptions::extensionRepoSettings,\n                setter = { options, enabled -> options.copy(extensionRepoSettings = enabled) },\n            ),\n            Entry(\n                label = AYMR.strings.custom_button_settings,\n                getter = BackupOptions::customButton,\n                setter = { options, enabled -> options.copy(customButton = enabled) },\n            ),\n            Entry(\n                label = MR.strings.source_settings,\n                getter = BackupOptions::sourceSettings,\n                setter = { options, enabled -> options.copy(sourceSettings = enabled) },\n            ),\n            Entry(\n                label = MR.strings.private_settings,\n                getter = BackupOptions::privateSettings,\n                setter = { options, enabled -> options.copy(privateSettings = enabled) },\n                enabled = { it.appSettings || it.sourceSettings },\n            ),\n        )\n\n        val extensionOptions = persistentListOf(\n            Entry(\n                label = MR.strings.label_extensions,\n                getter = BackupOptions::extensions,\n                setter = { options, enabled -> options.copy(extensions = enabled) },\n            ),\n        )\n\n        fun fromBooleanArray(array: BooleanArray) = BackupOptions(\n            libraryEntries = array[0],\n            categories = array[1],\n            chapters = array[2],\n            tracking = array[3],\n            history = array[4],\n            readEntries = array[5],\n            appSettings = array[6],\n            extensionRepoSettings = array[7],\n            customButton = array[8],\n            sourceSettings = array[9],\n            privateSettings = array[10],\n            extensions = array[11],\n        )\n    }\n\n    data class Entry(\n        val label: StringResource,\n        val getter: (BackupOptions) -> Boolean,\n        val setter: (BackupOptions, Boolean) -> BackupOptions,\n        val enabled: (BackupOptions) -> Boolean = { true },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/AnimeBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.create.BackupOptions\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnimeHistory\nimport eu.kanade.tachiyomi.data.backup.models.BackupEpisode\nimport eu.kanade.tachiyomi.data.backup.models.backupAnimeTrackMapper\nimport eu.kanade.tachiyomi.data.backup.models.backupEpisodeMapper\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.history.anime.interactor.GetAnimeHistory\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeBackupCreator(\n    private val handler: AnimeDatabaseHandler = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val getHistory: GetAnimeHistory = Injekt.get(),\n) {\n\n    suspend operator fun invoke(animes: List<Anime>, options: BackupOptions): List<BackupAnime> {\n        return animes.map {\n            backupAnime(it, options)\n        }\n    }\n\n    private suspend fun backupAnime(anime: Anime, options: BackupOptions): BackupAnime {\n        // Entry for this anime\n        val animeObject = anime.toBackupAnime()\n\n        if (options.chapters) {\n            // Backup all the episodes\n            handler.awaitList {\n                episodesQueries.getEpisodesByAnimeId(\n                    animeId = anime.id,\n                    mapper = backupEpisodeMapper,\n                )\n            }\n                .takeUnless(List<BackupEpisode>::isEmpty)\n                ?.let { animeObject.episodes = it }\n        }\n\n        if (options.categories) {\n            // Backup categories for this anime\n            val categoriesForAnime = getCategories.await(anime.id)\n            if (categoriesForAnime.isNotEmpty()) {\n                animeObject.categories = categoriesForAnime.map { it.order }\n            }\n        }\n\n        if (options.tracking) {\n            val tracks = handler.awaitList { anime_syncQueries.getTracksByAnimeId(anime.id, backupAnimeTrackMapper) }\n            if (tracks.isNotEmpty()) {\n                animeObject.tracking = tracks\n            }\n        }\n\n        if (options.history) {\n            val historyByAnimeId = getHistory.await(anime.id)\n            if (historyByAnimeId.isNotEmpty()) {\n                val history = historyByAnimeId.map { history ->\n                    val episode = handler.awaitOne { episodesQueries.getEpisodeById(history.episodeId) }\n                    BackupAnimeHistory(episode.url, history.seenAt?.time ?: 0L)\n                }\n                if (history.isNotEmpty()) {\n                    animeObject.history = history\n                }\n            }\n        }\n\n        return animeObject\n    }\n}\n\nprivate fun Anime.toBackupAnime() =\n    BackupAnime(\n        url = this.url,\n        title = this.title,\n        artist = this.artist,\n        author = this.author,\n        description = this.description,\n        genre = this.genre.orEmpty(),\n        status = this.status.toInt(),\n        thumbnailUrl = this.thumbnailUrl,\n        favorite = this.favorite,\n        source = this.source,\n        dateAdded = this.dateAdded,\n        viewer_flags = this.viewerFlags.toInt(),\n        episodeFlags = this.episodeFlags.toInt(),\n        updateStrategy = this.updateStrategy,\n        lastModifiedAt = this.lastModifiedAt,\n        favoriteModifiedAt = this.favoriteModifiedAt,\n        version = this.version,\n        fetchType = this.fetchType,\n        parentId = this.parentId,\n        id = this.id,\n        seasonFlags = this.seasonFlags,\n        seasonNumber = this.seasonNumber,\n        seasonSourceOrder = this.seasonSourceOrder,\n    )\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/AnimeCategoriesBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.backupCategoryMapper\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.model.Category\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeCategoriesBackupCreator(\n    private val getAnimeCategories: GetAnimeCategories = Injekt.get(),\n) {\n\n    suspend operator fun invoke(): List<BackupCategory> {\n        return getAnimeCategories.await()\n            .filterNot(Category::isSystemCategory)\n            .map(backupCategoryMapper)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/AnimeExtensionRepoBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos\nimport eu.kanade.tachiyomi.data.backup.models.backupExtensionReposMapper\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepo\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeExtensionRepoBackupCreator(\n    private val getAnimeExtensionRepos: GetAnimeExtensionRepo = Injekt.get(),\n) {\n\n    suspend operator fun invoke(): List<BackupExtensionRepos> {\n        return getAnimeExtensionRepos.getAll()\n            .map(backupExtensionReposMapper)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/AnimeSourcesBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnimeSource\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeSourcesBackupCreator(\n    private val animeSourceManager: AnimeSourceManager = Injekt.get(),\n) {\n\n    operator fun invoke(animes: List<BackupAnime>): List<BackupAnimeSource> {\n        return animes\n            .asSequence()\n            .map(BackupAnime::source)\n            .distinct()\n            .map(animeSourceManager::getOrStub)\n            .map { it.toBackupSource() }\n            .toList()\n    }\n}\n\nprivate fun AnimeSource.toBackupSource() =\n    BackupAnimeSource(\n        name = this.name,\n        sourceId = this.id,\n    )\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/CustomButtonBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupCustomButtons\nimport eu.kanade.tachiyomi.data.backup.models.backupCustomButtonsMapper\nimport tachiyomi.domain.custombuttons.interactor.GetCustomButtons\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass CustomButtonBackupCreator(\n    private val getCustomButtons: GetCustomButtons = Injekt.get(),\n) {\n    suspend operator fun invoke(): List<BackupCustomButtons> {\n        return getCustomButtons.getAll()\n            .map(backupCustomButtonsMapper)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/ExtensionsBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport android.content.Context\nimport android.content.pm.PackageManager\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtension\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\n\nclass ExtensionsBackupCreator(\n    private val context: Context,\n    private val animeExtensionManager: AnimeExtensionManager = Injekt.get(),\n    private val mangaExtensionManager: MangaExtensionManager = Injekt.get(),\n) {\n\n    operator fun invoke(): List<BackupExtension> {\n        val installedExtensions = mutableListOf<BackupExtension>()\n        animeExtensionManager.installedExtensionsFlow.value.forEach {\n            val packageName = it.pkgName\n            val apk = File(\n                context.packageManager\n                    .getApplicationInfo(\n                        packageName,\n                        PackageManager.GET_META_DATA,\n                    ).publicSourceDir,\n            ).readBytes()\n            installedExtensions.add(\n                BackupExtension(packageName, apk),\n            )\n        }\n        mangaExtensionManager.installedExtensionsFlow.value.forEach {\n            val packageName = it.pkgName\n            val apk = File(\n                context.packageManager\n                    .getApplicationInfo(\n                        packageName,\n                        PackageManager.GET_META_DATA,\n                    ).publicSourceDir,\n            ).readBytes()\n            installedExtensions.add(\n                BackupExtension(packageName, apk),\n            )\n        }\n        return installedExtensions\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.create.BackupOptions\nimport eu.kanade.tachiyomi.data.backup.models.BackupChapter\nimport eu.kanade.tachiyomi.data.backup.models.BackupHistory\nimport eu.kanade.tachiyomi.data.backup.models.BackupManga\nimport eu.kanade.tachiyomi.data.backup.models.backupChapterMapper\nimport eu.kanade.tachiyomi.data.backup.models.backupMangaTrackMapper\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.history.manga.interactor.GetMangaHistory\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaBackupCreator(\n    private val handler: MangaDatabaseHandler = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val getHistory: GetMangaHistory = Injekt.get(),\n) {\n\n    suspend operator fun invoke(mangas: List<Manga>, options: BackupOptions): List<BackupManga> {\n        return mangas.map {\n            backupManga(it, options)\n        }\n    }\n\n    private suspend fun backupManga(manga: Manga, options: BackupOptions): BackupManga {\n        // Entry for this manga\n        val mangaObject = manga.toBackupManga()\n\n        mangaObject.excludedScanlators = handler.awaitList {\n            excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(manga.id)\n        }\n\n        if (options.chapters) {\n            // Backup all the chapters\n            handler.awaitList {\n                chaptersQueries.getChaptersByMangaId(\n                    mangaId = manga.id,\n                    applyScanlatorFilter = 0, // false\n                    mapper = backupChapterMapper,\n                )\n            }\n                .takeUnless(List<BackupChapter>::isEmpty)\n                ?.let { mangaObject.chapters = it }\n        }\n\n        if (options.categories) {\n            // Backup categories for this manga\n            val categoriesForManga = getCategories.await(manga.id)\n            if (categoriesForManga.isNotEmpty()) {\n                mangaObject.categories = categoriesForManga.map { it.order }\n            }\n        }\n\n        if (options.tracking) {\n            val tracks = handler.awaitList { manga_syncQueries.getTracksByMangaId(manga.id, backupMangaTrackMapper) }\n            if (tracks.isNotEmpty()) {\n                mangaObject.tracking = tracks\n            }\n        }\n\n        if (options.history) {\n            val historyByMangaId = getHistory.await(manga.id)\n            if (historyByMangaId.isNotEmpty()) {\n                val history = historyByMangaId.map { history ->\n                    val chapter = handler.awaitOne { chaptersQueries.getChapterById(history.chapterId) }\n                    BackupHistory(chapter.url, history.readAt?.time ?: 0L, history.readDuration)\n                }\n                if (history.isNotEmpty()) {\n                    mangaObject.history = history\n                }\n            }\n        }\n\n        return mangaObject\n    }\n}\n\nprivate fun Manga.toBackupManga() =\n    BackupManga(\n        url = this.url,\n        title = this.title,\n        artist = this.artist,\n        author = this.author,\n        description = this.description,\n        genre = this.genre.orEmpty(),\n        status = this.status.toInt(),\n        thumbnailUrl = this.thumbnailUrl,\n        favorite = this.favorite,\n        source = this.source,\n        dateAdded = this.dateAdded,\n        viewer = (this.viewerFlags.toInt() and ReadingMode.MASK),\n        viewer_flags = this.viewerFlags.toInt(),\n        chapterFlags = this.chapterFlags.toInt(),\n        updateStrategy = this.updateStrategy,\n        lastModifiedAt = this.lastModifiedAt,\n        favoriteModifiedAt = this.favoriteModifiedAt,\n        version = this.version,\n    )\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaCategoriesBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.backupCategoryMapper\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaCategoriesBackupCreator(\n    private val getMangaCategories: GetMangaCategories = Injekt.get(),\n) {\n\n    suspend operator fun invoke(): List<BackupCategory> {\n        return getMangaCategories.await()\n            .filterNot(Category::isSystemCategory)\n            .map(backupCategoryMapper)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaExtensionRepoBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos\nimport eu.kanade.tachiyomi.data.backup.models.backupExtensionReposMapper\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepo\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaExtensionRepoBackupCreator(\n    private val getMangaExtensionRepos: GetMangaExtensionRepo = Injekt.get(),\n) {\n\n    suspend operator fun invoke(): List<BackupExtensionRepos> {\n        return getMangaExtensionRepos.getAll()\n            .map(backupExtensionReposMapper)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaSourcesBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupManga\nimport eu.kanade.tachiyomi.data.backup.models.BackupSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaSourcesBackupCreator(\n    private val mangaSourceManager: MangaSourceManager = Injekt.get(),\n) {\n\n    operator fun invoke(mangas: List<BackupManga>): List<BackupSource> {\n        return mangas\n            .asSequence()\n            .map(BackupManga::source)\n            .distinct()\n            .map(mangaSourceManager::getOrStub)\n            .map { it.toBackupSource() }\n            .toList()\n    }\n}\n\nprivate fun MangaSource.toBackupSource() =\n    BackupSource(\n        name = this.name,\n        sourceId = this.id,\n    )\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/PreferenceBackupCreator.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.create.creators\n\nimport eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource\nimport eu.kanade.tachiyomi.animesource.preferenceKey\nimport eu.kanade.tachiyomi.animesource.sourcePreferences\nimport eu.kanade.tachiyomi.data.backup.models.BackupPreference\nimport eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences\nimport eu.kanade.tachiyomi.data.backup.models.BooleanPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.FloatPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.IntPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.LongPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.StringPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.StringSetPreferenceValue\nimport eu.kanade.tachiyomi.source.ConfigurableSource\nimport eu.kanade.tachiyomi.source.preferenceKey\nimport eu.kanade.tachiyomi.source.sourcePreferences\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass PreferenceBackupCreator(\n    private val animeSourceManager: AnimeSourceManager = Injekt.get(),\n    private val mangaSourceManager: MangaSourceManager = Injekt.get(),\n    private val preferenceStore: PreferenceStore = Injekt.get(),\n) {\n\n    fun createApp(includePrivatePreferences: Boolean): List<BackupPreference> {\n        return preferenceStore.getAll().toBackupPreferences()\n            .withPrivatePreferences(includePrivatePreferences)\n    }\n\n    fun createSource(includePrivatePreferences: Boolean): List<BackupSourcePreferences> {\n        val animePreferences = animeSourceManager.getCatalogueSources()\n            .filterIsInstance<ConfigurableAnimeSource>()\n            .map {\n                BackupSourcePreferences(\n                    it.preferenceKey(),\n                    it.sourcePreferences().all.toBackupPreferences()\n                        .withPrivatePreferences(includePrivatePreferences),\n                )\n            }\n            .filter { it.prefs.isNotEmpty() }\n        val mangaPreferences = mangaSourceManager.getCatalogueSources()\n            .filterIsInstance<ConfigurableSource>()\n            .map {\n                BackupSourcePreferences(\n                    it.preferenceKey(),\n                    it.sourcePreferences().all.toBackupPreferences()\n                        .withPrivatePreferences(includePrivatePreferences),\n                )\n            }\n            .filter { it.prefs.isNotEmpty() }\n        return animePreferences + mangaPreferences\n    }\n\n    @Suppress(\"UNCHECKED_CAST\")\n    private fun Map<String, *>.toBackupPreferences(): List<BackupPreference> {\n        return this\n            .filterKeys { !Preference.isAppState(it) }\n            .mapNotNull { (key, value) ->\n                when (value) {\n                    is Int -> BackupPreference(key, IntPreferenceValue(value))\n                    is Long -> BackupPreference(key, LongPreferenceValue(value))\n                    is Float -> BackupPreference(key, FloatPreferenceValue(value))\n                    is String -> BackupPreference(key, StringPreferenceValue(value))\n                    is Boolean -> BackupPreference(key, BooleanPreferenceValue(value))\n                    is Set<*> -> (value as? Set<String>)?.let {\n                        BackupPreference(key, StringSetPreferenceValue(it))\n                    }\n                    else -> null\n                }\n            }\n    }\n\n    private fun List<BackupPreference>.withPrivatePreferences(include: Boolean) =\n        if (include) {\n            this\n        } else {\n            this.filter { !Preference.isPrivate(it.key) }\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/Backup.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.full.models\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnimeSource\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.BackupManga\nimport eu.kanade.tachiyomi.data.backup.models.BackupSource\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class Backup(\n    @ProtoNumber(1) val backupManga: List<BackupManga> = emptyList(),\n    @ProtoNumber(2) var backupCategories: List<BackupCategory> = emptyList(),\n    @ProtoNumber(3) val backupAnime: List<BackupAnime> = emptyList(),\n    @ProtoNumber(4) var backupAnimeCategories: List<BackupCategory> = emptyList(),\n    // Bump by 100 to specify this is a 0.x value\n    // @ProtoNumber(100) var backupBrokenSources, legacy source model with non-compliant proto number,\n    @ProtoNumber(101) var backupSources: List<BackupSource> = emptyList(),\n    // @ProtoNumber(102) var backupBrokenAnimeSources, legacy source model with non-compliant proto number,\n    @ProtoNumber(103) var backupAnimeSources: List<BackupAnimeSource> = emptyList(),\n    @ProtoNumber(104) var backupPreferences: List<BackupPreference> = emptyList(),\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/BackupPreference.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.full.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class BackupPreference(\n    @ProtoNumber(1) val key: String,\n    @ProtoNumber(2) val value: PreferenceValue,\n)\n\n@Serializable\nsealed class PreferenceValue\n\n@Serializable\ndata class IntPreferenceValue(val value: Int) : PreferenceValue()\n\n@Serializable\ndata class LongPreferenceValue(val value: Long) : PreferenceValue()\n\n@Serializable\ndata class FloatPreferenceValue(val value: Float) : PreferenceValue()\n\n@Serializable\ndata class StringPreferenceValue(val value: String) : PreferenceValue()\n\n@Serializable\ndata class BooleanPreferenceValue(val value: Boolean) : PreferenceValue()\n\n@Serializable\ndata class StringSetPreferenceValue(val value: Set<String>) : PreferenceValue()\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/Backup.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class LegacyBackup(\n    @ProtoNumber(1) val backupManga: List<BackupManga> = emptyList(),\n    @ProtoNumber(2) var backupCategories: List<BackupCategory> = emptyList(),\n    @ProtoNumber(3) val backupAnime: List<BackupAnime> = emptyList(),\n    @ProtoNumber(4) var backupAnimeCategories: List<BackupCategory> = emptyList(),\n    // Bump by 100 to specify this is a 0.x value\n    // @ProtoNumber(100) var backupBrokenSources, legacy source model with non-compliant proto number,\n    @ProtoNumber(101) var backupSources: List<BackupSource> = emptyList(),\n    // @ProtoNumber(102) var backupBrokenAnimeSources, legacy source model with non-compliant proto number,\n    @ProtoNumber(103) var backupAnimeSources: List<BackupAnimeSource> = emptyList(),\n    @ProtoNumber(104) var backupPreferences: List<BackupPreference> = emptyList(),\n    @ProtoNumber(105) var backupSourcePreferences: List<BackupSourcePreferences> = emptyList(),\n    @ProtoNumber(106) var backupExtensions: List<BackupExtension> = emptyList(),\n    @ProtoNumber(107) var backupAnimeExtensionRepo: List<BackupExtensionRepos> = emptyList(),\n    @ProtoNumber(108) var backupMangaExtensionRepo: List<BackupExtensionRepos> = emptyList(),\n    @ProtoNumber(109) var backupCustomButton: List<BackupCustomButtons> = emptyList(),\n) {\n    fun toBackup(): Backup {\n        return Backup(\n            backupManga = backupManga,\n            backupCategories = backupCategories,\n            backupSources = backupSources,\n            backupPreferences = backupPreferences,\n            backupSourcePreferences = backupSourcePreferences,\n            backupMangaExtensionRepo = backupMangaExtensionRepo,\n\n            isLegacy = false, // Only used for detection\n            backupAnime = backupAnime,\n            backupAnimeCategories = backupAnimeCategories,\n            backupAnimeSources = backupAnimeSources,\n            backupExtensions = backupExtensions,\n            backupAnimeExtensionRepo = backupAnimeExtensionRepo,\n            backupCustomButton = backupCustomButton,\n        )\n    }\n}\n\n@Serializable\ndata class Backup(\n    @ProtoNumber(1) val backupManga: List<BackupManga> = emptyList(),\n    @ProtoNumber(2) var backupCategories: List<BackupCategory> = emptyList(),\n    // @ProtoNumber(100) var backupBrokenSources, legacy source model with non-compliant proto number,\n    @ProtoNumber(101) var backupSources: List<BackupSource> = emptyList(),\n    @ProtoNumber(104) var backupPreferences: List<BackupPreference> = emptyList(),\n    @ProtoNumber(105) var backupSourcePreferences: List<BackupSourcePreferences> = emptyList(),\n    @ProtoNumber(106) var backupMangaExtensionRepo: List<BackupExtensionRepos> = emptyList(),\n\n    // Aniyomi specific values\n    @ProtoNumber(500) val isLegacy: Boolean = true,\n    @ProtoNumber(501) val backupAnime: List<BackupAnime> = emptyList(),\n    @ProtoNumber(502) var backupAnimeCategories: List<BackupCategory> = emptyList(),\n    @ProtoNumber(503) var backupAnimeSources: List<BackupAnimeSource> = emptyList(),\n    @ProtoNumber(504) var backupExtensions: List<BackupExtension> = emptyList(),\n    @ProtoNumber(505) var backupAnimeExtensionRepo: List<BackupExtensionRepos> = emptyList(),\n    @ProtoNumber(506) var backupCustomButton: List<BackupCustomButtons> = emptyList(),\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupAnime.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.entries.anime.model.Anime\n\n@Suppress(\"DEPRECATION\")\n@Serializable\ndata class BackupAnime(\n    // in 1.x some of these values have different names\n    @ProtoNumber(1) var source: Long,\n    // url is called key in 1.x\n    @ProtoNumber(2) var url: String,\n    @ProtoNumber(3) var title: String = \"\",\n    @ProtoNumber(4) var artist: String? = null,\n    @ProtoNumber(5) var author: String? = null,\n    @ProtoNumber(6) var description: String? = null,\n    @ProtoNumber(7) var genre: List<String> = emptyList(),\n    @ProtoNumber(8) var status: Int = 0,\n    // thumbnailUrl is called cover in 1.x\n    @ProtoNumber(9) var thumbnailUrl: String? = null,\n    // @ProtoNumber(10) val customCover: String = \"\", 1.x value, not used in 0.x\n    // @ProtoNumber(11) val lastUpdate: Long = 0, 1.x value, not used in 0.x\n    // @ProtoNumber(12) val lastInit: Long = 0, 1.x value, not used in 0.x\n    @ProtoNumber(13) var dateAdded: Long = 0,\n    // @ProtoNumber(15) val flags: Int = 0, 1.x value, not used in 0.x\n    @ProtoNumber(16) var episodes: List<BackupEpisode> = emptyList(),\n    @ProtoNumber(17) var categories: List<Long> = emptyList(),\n    @ProtoNumber(18) var tracking: List<BackupAnimeTracking> = emptyList(),\n    // Bump by 100 for values that are not saved/implemented in 1.x but are used in 0.x\n    @ProtoNumber(100) var favorite: Boolean = true,\n    @ProtoNumber(101) var episodeFlags: Int = 0,\n    // @ProtoNumber(102) var brokenHistory, legacy history model with non-compliant proto number\n    @ProtoNumber(103) var viewer_flags: Int = 0,\n    @ProtoNumber(104) var history: List<BackupAnimeHistory> = emptyList(),\n    @ProtoNumber(105) var updateStrategy: AnimeUpdateStrategy = AnimeUpdateStrategy.ALWAYS_UPDATE,\n    @ProtoNumber(106) var lastModifiedAt: Long = 0,\n    @ProtoNumber(107) var favoriteModifiedAt: Long? = null,\n    @ProtoNumber(109) var version: Long = 0,\n\n    // Aniyomi specific values\n    @ProtoNumber(500) var backgroundUrl: String? = null,\n    // @ProtoNumber(501) Broken, do not use\n    @ProtoNumber(502) var parentId: Long? = null,\n    @ProtoNumber(503) var id: Long? = null, // Used to associate seasons with parents. Do not use for anything else.\n    @ProtoNumber(504) var seasonFlags: Long = 0,\n    @ProtoNumber(505) var seasonNumber: Double = -1.0,\n    @ProtoNumber(506) var seasonSourceOrder: Long = 0,\n    @ProtoNumber(507) var fetchType: FetchType = FetchType.Episodes,\n) {\n    fun getAnimeImpl(): Anime {\n        return Anime.create().copy(\n            url = this@BackupAnime.url,\n            title = this@BackupAnime.title,\n            artist = this@BackupAnime.artist,\n            author = this@BackupAnime.author,\n            description = this@BackupAnime.description,\n            genre = this@BackupAnime.genre,\n            status = this@BackupAnime.status.toLong(),\n            thumbnailUrl = this@BackupAnime.thumbnailUrl,\n            backgroundUrl = this@BackupAnime.backgroundUrl,\n            favorite = this@BackupAnime.favorite,\n            source = this@BackupAnime.source,\n            dateAdded = this@BackupAnime.dateAdded,\n            viewerFlags = this@BackupAnime.viewer_flags.toLong(),\n            episodeFlags = this@BackupAnime.episodeFlags.toLong(),\n            updateStrategy = this@BackupAnime.updateStrategy,\n            lastModifiedAt = this@BackupAnime.lastModifiedAt,\n            favoriteModifiedAt = this@BackupAnime.favoriteModifiedAt,\n            version = this@BackupAnime.version,\n            fetchType = this@BackupAnime.fetchType,\n            parentId = this@BackupAnime.parentId,\n            seasonFlags = this@BackupAnime.seasonFlags,\n            seasonNumber = this@BackupAnime.seasonNumber,\n            seasonSourceOrder = this@BackupAnime.seasonSourceOrder,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupAnimeHistory.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.history.anime.model.AnimeHistory\nimport java.util.Date\n\n@Serializable\ndata class BackupAnimeHistory(\n    @ProtoNumber(1) var url: String,\n    @ProtoNumber(2) var lastRead: Long,\n    @ProtoNumber(3) var readDuration: Long = 0,\n) {\n    fun getHistoryImpl(): AnimeHistory {\n        return AnimeHistory.create().copy(\n            seenAt = Date(lastRead),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupAnimeSource.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class BackupAnimeSource(\n    @ProtoNumber(1) var name: String = \"\",\n    @ProtoNumber(2) var sourceId: Long,\n)\n\n@Serializable\ndata class BrokenBackupAnimeSource(\n    @ProtoNumber(0) var name: String = \"\",\n    @ProtoNumber(1) var sourceId: Long,\n) {\n    fun toBackupSource() = BackupAnimeSource(name, sourceId)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupAnimeTracking.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.track.anime.model.AnimeTrack\n\n@Serializable\ndata class BackupAnimeTracking(\n    // in 1.x some of these values have different types or names\n    @ProtoNumber(1) var syncId: Int,\n    // LibraryId is not null in 1.x\n    @ProtoNumber(2) var libraryId: Long,\n    @Deprecated(\"Use mediaId instead\", level = DeprecationLevel.WARNING)\n    @ProtoNumber(3)\n    var mediaIdInt: Int = 0,\n    // trackingUrl is called mediaUrl in 1.x\n    @ProtoNumber(4) var trackingUrl: String = \"\",\n    @ProtoNumber(5) var title: String = \"\",\n    // lastEpisodeSeen is called last seen, and it has been changed to a float in 1.x\n    @ProtoNumber(6) var lastEpisodeSeen: Float = 0F,\n    @ProtoNumber(7) var totalEpisodes: Int = 0,\n    @ProtoNumber(8) var score: Float = 0F,\n    @ProtoNumber(9) var status: Int = 0,\n    // startedReadingDate is called startReadTime in 1.x\n    @ProtoNumber(10) var startedWatchingDate: Long = 0,\n    // finishedReadingDate is called endReadTime in 1.x\n    @ProtoNumber(11) var finishedWatchingDate: Long = 0,\n    @ProtoNumber(12) var private: Boolean = false,\n    @ProtoNumber(100) var mediaId: Long = 0,\n) {\n\n    @Suppress(\"DEPRECATION\")\n    fun getTrackImpl(): AnimeTrack {\n        return AnimeTrack(\n            id = -1,\n            animeId = -1,\n            trackerId = this@BackupAnimeTracking.syncId.toLong(),\n            remoteId = if (this@BackupAnimeTracking.mediaIdInt != 0) {\n                this@BackupAnimeTracking.mediaIdInt.toLong()\n            } else {\n                this@BackupAnimeTracking.mediaId\n            },\n            libraryId = this@BackupAnimeTracking.libraryId,\n            title = this@BackupAnimeTracking.title,\n            lastEpisodeSeen = this@BackupAnimeTracking.lastEpisodeSeen.toDouble(),\n            totalEpisodes = this@BackupAnimeTracking.totalEpisodes.toLong(),\n            score = this@BackupAnimeTracking.score.toDouble(),\n            status = this@BackupAnimeTracking.status.toLong(),\n            startDate = this@BackupAnimeTracking.startedWatchingDate,\n            finishDate = this@BackupAnimeTracking.finishedWatchingDate,\n            remoteUrl = this@BackupAnimeTracking.trackingUrl,\n            private = this@BackupAnimeTracking.private,\n        )\n    }\n}\n\nval backupAnimeTrackMapper = {\n        _id: Long,\n        anime_id: Long,\n        syncId: Long,\n        mediaId: Long,\n        libraryId: Long?,\n        title: String,\n        lastEpisodeSeen: Double,\n        totalEpisodes: Long,\n        status: Long,\n        score: Double,\n        remoteUrl: String,\n        startDate: Long,\n        finishDate: Long,\n        private: Boolean,\n    ->\n    BackupAnimeTracking(\n        syncId = syncId.toInt(),\n        mediaId = mediaId,\n        // forced not null so its compatible with 1.x backup system\n        libraryId = libraryId ?: 0,\n        title = title,\n        lastEpisodeSeen = lastEpisodeSeen.toFloat(),\n        totalEpisodes = totalEpisodes.toInt(),\n        score = score.toFloat(),\n        status = status.toInt(),\n        startedWatchingDate = startDate,\n        finishedWatchingDate = finishDate,\n        trackingUrl = remoteUrl,\n        private = private,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupCategory.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.category.model.Category\n\n@Serializable\nclass BackupCategory(\n    @ProtoNumber(1) var name: String,\n    @ProtoNumber(2) var order: Long = 0,\n    @ProtoNumber(3) var id: Long = 0,\n    // @ProtoNumber(3) val updateInterval: Int = 0, 1.x value not used in 0.x\n    // Bump by 100 to specify this is a 0.x value\n    @ProtoNumber(100) var flags: Long = 0,\n) {\n    fun toCategory(id: Long) = Category(\n        id = id,\n        name = this@BackupCategory.name,\n        flags = this@BackupCategory.flags,\n        order = this@BackupCategory.order,\n        hidden = false,\n    )\n}\n\nval backupCategoryMapper = { category: Category ->\n    BackupCategory(\n        id = category.id,\n        name = category.name,\n        order = category.order,\n        flags = category.flags,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupChapter.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.items.chapter.model.Chapter\n\n@Serializable\ndata class BackupChapter(\n    // in 1.x some of these values have different names\n    // url is called key in 1.x\n    @ProtoNumber(1) var url: String,\n    @ProtoNumber(2) var name: String,\n    @ProtoNumber(3) var scanlator: String? = null,\n    @ProtoNumber(4) var read: Boolean = false,\n    @ProtoNumber(5) var bookmark: Boolean = false,\n    // lastPageRead is called progress in 1.x\n    @ProtoNumber(6) var lastPageRead: Long = 0,\n    @ProtoNumber(7) var dateFetch: Long = 0,\n    @ProtoNumber(8) var dateUpload: Long = 0,\n    // chapterNumber is called number is 1.x\n    @ProtoNumber(9) var chapterNumber: Float = 0F,\n    @ProtoNumber(10) var sourceOrder: Long = 0,\n    @ProtoNumber(11) var lastModifiedAt: Long = 0,\n    @ProtoNumber(12) var version: Long = 0,\n) {\n    fun toChapterImpl(): Chapter {\n        return Chapter.create().copy(\n            url = this@BackupChapter.url,\n            name = this@BackupChapter.name,\n            chapterNumber = this@BackupChapter.chapterNumber.toDouble(),\n            scanlator = this@BackupChapter.scanlator,\n            read = this@BackupChapter.read,\n            bookmark = this@BackupChapter.bookmark,\n            lastPageRead = this@BackupChapter.lastPageRead,\n            dateFetch = this@BackupChapter.dateFetch,\n            dateUpload = this@BackupChapter.dateUpload,\n            sourceOrder = this@BackupChapter.sourceOrder,\n            lastModifiedAt = this@BackupChapter.lastModifiedAt,\n            version = this@BackupChapter.version,\n        )\n    }\n}\n\nval backupChapterMapper = {\n        _: Long,\n        _: Long,\n        url: String,\n        name: String,\n        scanlator: String?,\n        read: Boolean,\n        bookmark: Boolean,\n        lastPageRead: Long,\n        chapterNumber: Double,\n        source_order: Long,\n        dateFetch: Long,\n        dateUpload: Long,\n        lastModifiedAt: Long,\n        version: Long,\n        _: Long,\n    ->\n    BackupChapter(\n        url = url,\n        name = name,\n        chapterNumber = chapterNumber.toFloat(),\n        scanlator = scanlator,\n        read = read,\n        bookmark = bookmark,\n        lastPageRead = lastPageRead,\n        dateFetch = dateFetch,\n        dateUpload = dateUpload,\n        sourceOrder = source_order,\n        lastModifiedAt = lastModifiedAt,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupCustomButtons.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.custombuttons.model.CustomButton\n\n@Serializable\nclass BackupCustomButtons(\n    @ProtoNumber(1) var name: String,\n    @ProtoNumber(2) var isFavorite: Boolean,\n    @ProtoNumber(3) var sortIndex: Long,\n    @ProtoNumber(4) var content: String,\n    @ProtoNumber(5) var longPressContent: String,\n    @ProtoNumber(6) var onStartup: String,\n)\n\nval backupCustomButtonsMapper = { btn: CustomButton ->\n    BackupCustomButtons(\n        name = btn.name,\n        isFavorite = btn.isFavorite,\n        sortIndex = btn.sortIndex,\n        content = btn.content,\n        longPressContent = btn.longPressContent,\n        onStartup = btn.onStartup,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupEpisode.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.items.episode.model.Episode\n\n@Serializable\ndata class BackupEpisode(\n    // in 1.x some of these values have different names\n    // url is called key in 1.x\n    @ProtoNumber(1) var url: String,\n    @ProtoNumber(2) var name: String,\n    @ProtoNumber(3) var scanlator: String? = null,\n\n    @ProtoNumber(4) var seen: Boolean = false,\n    @ProtoNumber(5) var bookmark: Boolean = false,\n\n    // lastPageRead is called progress in 1.x\n    @ProtoNumber(6) var lastSecondSeen: Long = 0,\n    @ProtoNumber(16) var totalSeconds: Long = 0,\n    @ProtoNumber(7) var dateFetch: Long = 0,\n    @ProtoNumber(8) var dateUpload: Long = 0,\n    // episodeNumber is called number is 1.x\n    @ProtoNumber(9) var episodeNumber: Float = 0F,\n    @ProtoNumber(10) var sourceOrder: Long = 0,\n    @ProtoNumber(11) var lastModifiedAt: Long = 0,\n    @ProtoNumber(12) var version: Long = 0,\n\n    // Aniyomi specific values\n    @ProtoNumber(501) var fillermark: Boolean = false,\n    @ProtoNumber(502) var summary: String? = null,\n    @ProtoNumber(503) var previewUrl: String? = null,\n\n) {\n    fun toEpisodeImpl(): Episode {\n        return Episode.create().copy(\n            url = this@BackupEpisode.url,\n            name = this@BackupEpisode.name,\n            episodeNumber = this@BackupEpisode.episodeNumber.toDouble(),\n            scanlator = this@BackupEpisode.scanlator,\n            summary = this@BackupEpisode.summary,\n            previewUrl = this@BackupEpisode.previewUrl,\n            seen = this@BackupEpisode.seen,\n            bookmark = this@BackupEpisode.bookmark,\n            fillermark = this@BackupEpisode.fillermark,\n            lastSecondSeen = this@BackupEpisode.lastSecondSeen,\n            totalSeconds = this@BackupEpisode.totalSeconds,\n            dateFetch = this@BackupEpisode.dateFetch,\n            dateUpload = this@BackupEpisode.dateUpload,\n            sourceOrder = this@BackupEpisode.sourceOrder,\n            lastModifiedAt = this@BackupEpisode.lastModifiedAt,\n            version = this@BackupEpisode.version,\n        )\n    }\n}\n\nval backupEpisodeMapper = {\n        _: Long,\n        _: Long,\n        url: String,\n        name: String,\n        scanlator: String?,\n        seen: Boolean,\n        bookmark: Boolean,\n        lastSecondSeen: Long,\n        totalSeconds: Long,\n        episodeNumber: Double,\n        source_order: Long,\n        dateFetch: Long,\n        dateUpload: Long,\n        lastModifiedAt: Long,\n        version: Long,\n        _: Long,\n        summary: String?,\n        previewUrl: String?,\n        fillermark: Boolean,\n    ->\n    BackupEpisode(\n        url = url,\n        name = name,\n        episodeNumber = episodeNumber.toFloat(),\n        scanlator = scanlator,\n        summary = summary,\n        previewUrl = previewUrl,\n        seen = seen,\n        bookmark = bookmark,\n        fillermark = fillermark,\n        lastSecondSeen = lastSecondSeen,\n        totalSeconds = totalSeconds,\n        dateFetch = dateFetch,\n        dateUpload = dateUpload,\n        sourceOrder = source_order,\n        lastModifiedAt = lastModifiedAt,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupExtension.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class BackupExtension(\n    @ProtoNumber(1) val pkgName: String,\n    @ProtoNumber(2) val apk: ByteArray,\n) {\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (javaClass != other?.javaClass) return false\n\n        other as BackupExtension\n\n        if (pkgName != other.pkgName) return false\n        if (!apk.contentEquals(other.apk)) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = pkgName.hashCode()\n        result = 31 * result + apk.contentHashCode()\n        return result\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupExtensionPreferences.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class BackupExtensionPreferences(\n    @ProtoNumber(1) val name: String,\n    @ProtoNumber(2) val prefs: List<BackupPreference>,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupExtensionRepos.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\n@Serializable\nclass BackupExtensionRepos(\n    @ProtoNumber(1) var baseUrl: String,\n    @ProtoNumber(2) var name: String,\n    @ProtoNumber(3) var shortName: String?,\n    @ProtoNumber(4) var website: String,\n    @ProtoNumber(5) var signingKeyFingerprint: String,\n)\n\nval backupExtensionReposMapper = { repo: ExtensionRepo ->\n    BackupExtensionRepos(\n        baseUrl = repo.baseUrl,\n        name = repo.name,\n        shortName = repo.shortName,\n        website = repo.website,\n        signingKeyFingerprint = repo.signingKeyFingerprint,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupHistory.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.history.manga.model.MangaHistory\nimport java.util.Date\n\n@Serializable\ndata class BackupHistory(\n    @ProtoNumber(1) var url: String,\n    @ProtoNumber(2) var lastRead: Long,\n    @ProtoNumber(3) var readDuration: Long = 0,\n) {\n    fun getHistoryImpl(): MangaHistory {\n        return MangaHistory.create().copy(\n            readAt = Date(lastRead),\n            readDuration = readDuration,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport eu.kanade.tachiyomi.source.model.UpdateStrategy\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.entries.manga.model.Manga\n\n@Suppress(\"DEPRECATION\")\n@Serializable\ndata class BackupManga(\n    // in 1.x some of these values have different names\n    @ProtoNumber(1) var source: Long,\n    // url is called key in 1.x\n    @ProtoNumber(2) var url: String,\n    @ProtoNumber(3) var title: String = \"\",\n    @ProtoNumber(4) var artist: String? = null,\n    @ProtoNumber(5) var author: String? = null,\n    @ProtoNumber(6) var description: String? = null,\n    @ProtoNumber(7) var genre: List<String> = emptyList(),\n    @ProtoNumber(8) var status: Int = 0,\n    // thumbnailUrl is called cover in 1.x\n    @ProtoNumber(9) var thumbnailUrl: String? = null,\n    // @ProtoNumber(10) val customCover: String = \"\", 1.x value, not used in 0.x\n    // @ProtoNumber(11) val lastUpdate: Long = 0, 1.x value, not used in 0.x\n    // @ProtoNumber(12) val lastInit: Long = 0, 1.x value, not used in 0.x\n    @ProtoNumber(13) var dateAdded: Long = 0,\n    @ProtoNumber(14) var viewer: Int = 0, // Replaced by viewer_flags\n    // @ProtoNumber(15) val flags: Int = 0, 1.x value, not used in 0.x\n    @ProtoNumber(16) var chapters: List<BackupChapter> = emptyList(),\n    @ProtoNumber(17) var categories: List<Long> = emptyList(),\n    @ProtoNumber(18) var tracking: List<BackupTracking> = emptyList(),\n    // Bump by 100 for values that are not saved/implemented in 1.x but are used in 0.x\n    @ProtoNumber(100) var favorite: Boolean = true,\n    @ProtoNumber(101) var chapterFlags: Int = 0,\n    // @ProtoNumber(102) var brokenHistory, legacy history model with non-compliant proto number\n    @ProtoNumber(103) var viewer_flags: Int? = null,\n    @ProtoNumber(104) var history: List<BackupHistory> = emptyList(),\n    @ProtoNumber(105) var updateStrategy: UpdateStrategy = UpdateStrategy.ALWAYS_UPDATE,\n    @ProtoNumber(106) var lastModifiedAt: Long = 0,\n    @ProtoNumber(107) var favoriteModifiedAt: Long? = null,\n    @ProtoNumber(108) var excludedScanlators: List<String> = emptyList(),\n    @ProtoNumber(109) var version: Long = 0,\n) {\n    fun getMangaImpl(): Manga {\n        return Manga.create().copy(\n            url = this@BackupManga.url,\n            title = this@BackupManga.title,\n            artist = this@BackupManga.artist,\n            author = this@BackupManga.author,\n            description = this@BackupManga.description,\n            genre = this@BackupManga.genre,\n            status = this@BackupManga.status.toLong(),\n            thumbnailUrl = this@BackupManga.thumbnailUrl,\n            favorite = this@BackupManga.favorite,\n            source = this@BackupManga.source,\n            dateAdded = this@BackupManga.dateAdded,\n            viewerFlags = (this@BackupManga.viewer_flags ?: this@BackupManga.viewer).toLong(),\n            chapterFlags = this@BackupManga.chapterFlags.toLong(),\n            updateStrategy = this@BackupManga.updateStrategy,\n            lastModifiedAt = this@BackupManga.lastModifiedAt,\n            favoriteModifiedAt = this@BackupManga.favoriteModifiedAt,\n            version = this@BackupManga.version,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupPreference.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class BackupPreference(\n    @ProtoNumber(1) val key: String,\n    @ProtoNumber(2) val value: PreferenceValue,\n)\n\n@Serializable\ndata class BackupSourcePreferences(\n    @ProtoNumber(1) val sourceKey: String,\n    @ProtoNumber(2) val prefs: List<BackupPreference>,\n)\n\n@Serializable\nsealed class PreferenceValue\n\n@Serializable\ndata class IntPreferenceValue(val value: Int) : PreferenceValue()\n\n@Serializable\ndata class LongPreferenceValue(val value: Long) : PreferenceValue()\n\n@Serializable\ndata class FloatPreferenceValue(val value: Float) : PreferenceValue()\n\n@Serializable\ndata class StringPreferenceValue(val value: String) : PreferenceValue()\n\n@Serializable\ndata class BooleanPreferenceValue(val value: Boolean) : PreferenceValue()\n\n@Serializable\ndata class StringSetPreferenceValue(val value: Set<String>) : PreferenceValue()\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupSource.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\n\n@Serializable\ndata class BackupSource(\n    @ProtoNumber(1) var name: String = \"\",\n    @ProtoNumber(2) var sourceId: Long,\n)\n\n@Serializable\ndata class BrokenBackupSource(\n    @ProtoNumber(0) var name: String = \"\",\n    @ProtoNumber(1) var sourceId: Long,\n) {\n    fun toBackupSource() = BackupSource(name, sourceId)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupTracking.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.models\n\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.protobuf.ProtoNumber\nimport tachiyomi.domain.track.manga.model.MangaTrack\n\n@Serializable\ndata class BackupTracking(\n    // in 1.x some of these values have different types or names\n    @ProtoNumber(1) var syncId: Int,\n    // LibraryId is not null in 1.x\n    @ProtoNumber(2) var libraryId: Long,\n    @Deprecated(\"Use mediaId instead\", level = DeprecationLevel.WARNING)\n    @ProtoNumber(3)\n    var mediaIdInt: Int = 0,\n    // trackingUrl is called mediaUrl in 1.x\n    @ProtoNumber(4) var trackingUrl: String = \"\",\n    @ProtoNumber(5) var title: String = \"\",\n    // lastChapterRead is called last read, and it has been changed to a float in 1.x\n    @ProtoNumber(6) var lastChapterRead: Float = 0F,\n    @ProtoNumber(7) var totalChapters: Int = 0,\n    @ProtoNumber(8) var score: Float = 0F,\n    @ProtoNumber(9) var status: Int = 0,\n    // startedReadingDate is called startReadTime in 1.x\n    @ProtoNumber(10) var startedReadingDate: Long = 0,\n    // finishedReadingDate is called endReadTime in 1.x\n    @ProtoNumber(11) var finishedReadingDate: Long = 0,\n    @ProtoNumber(12) var private: Boolean = false,\n    @ProtoNumber(100) var mediaId: Long = 0,\n) {\n\n    @Suppress(\"DEPRECATION\")\n    fun getTrackImpl(): MangaTrack {\n        return MangaTrack(\n            id = -1,\n            mangaId = -1,\n            trackerId = this@BackupTracking.syncId.toLong(),\n            remoteId = if (this@BackupTracking.mediaIdInt != 0) {\n                this@BackupTracking.mediaIdInt.toLong()\n            } else {\n                this@BackupTracking.mediaId\n            },\n            libraryId = this@BackupTracking.libraryId,\n            title = this@BackupTracking.title,\n            lastChapterRead = this@BackupTracking.lastChapterRead.toDouble(),\n            totalChapters = this@BackupTracking.totalChapters.toLong(),\n            score = this@BackupTracking.score.toDouble(),\n            status = this@BackupTracking.status.toLong(),\n            startDate = this@BackupTracking.startedReadingDate,\n            finishDate = this@BackupTracking.finishedReadingDate,\n            remoteUrl = this@BackupTracking.trackingUrl,\n            private = this@BackupTracking.private,\n        )\n    }\n}\n\nval backupMangaTrackMapper = {\n        _: Long,\n        _: Long,\n        syncId: Long,\n        mediaId: Long,\n        libraryId: Long?,\n        title: String,\n        lastChapterRead: Double,\n        totalChapters: Long,\n        status: Long,\n        score: Double,\n        remoteUrl: String,\n        startDate: Long,\n        finishDate: Long,\n        private: Boolean,\n    ->\n    BackupTracking(\n        syncId = syncId.toInt(),\n        mediaId = mediaId,\n        // forced not null so its compatible with 1.x backup system\n        libraryId = libraryId ?: 0,\n        title = title,\n        lastChapterRead = lastChapterRead.toFloat(),\n        totalChapters = totalChapters.toInt(),\n        score = score.toFloat(),\n        status = status.toInt(),\n        startedReadingDate = startDate,\n        finishedReadingDate = finishDate,\n        trackingUrl = remoteUrl,\n        private = private,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestoreJob.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.net.Uri\nimport android.os.Build\nimport androidx.core.net.toUri\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkerParameters\nimport androidx.work.workDataOf\nimport eu.kanade.tachiyomi.data.backup.BackupNotifier\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.isRunning\nimport eu.kanade.tachiyomi.util.system.workManager\nimport kotlinx.coroutines.CancellationException\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\n\nclass BackupRestoreJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val notifier = BackupNotifier(context)\n\n    override suspend fun doWork(): Result {\n        val uri = inputData.getString(LOCATION_URI_KEY)?.toUri()\n        val options = inputData.getBooleanArray(OPTIONS_KEY)?.let { RestoreOptions.fromBooleanArray(it) }\n\n        if (uri == null || options == null) {\n            return Result.failure()\n        }\n\n        val isSync = inputData.getBoolean(SYNC_KEY, false)\n\n        try {\n            setForeground(getForegroundInfo())\n        } catch (e: IllegalStateException) {\n            logcat(LogPriority.ERROR, e) { \"Not allowed to run on foreground service\" }\n        }\n\n        return try {\n            BackupRestorer(context, notifier, isSync).restore(uri, options)\n            Result.success()\n        } catch (e: Exception) {\n            if (e is CancellationException) {\n                notifier.showRestoreError(context.stringResource(MR.strings.restoring_backup_canceled))\n                Result.success()\n            } else {\n                logcat(LogPriority.ERROR, e)\n                notifier.showRestoreError(e.message)\n                Result.failure()\n            }\n        } finally {\n            context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)\n        }\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        return ForegroundInfo(\n            Notifications.ID_RESTORE_PROGRESS,\n            notifier.showRestoreProgress().build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    companion object {\n        fun isRunning(context: Context): Boolean {\n            return context.workManager.isRunning(TAG)\n        }\n\n        fun start(\n            context: Context,\n            uri: Uri,\n            options: RestoreOptions,\n            sync: Boolean = false,\n        ) {\n            val inputData = workDataOf(\n                LOCATION_URI_KEY to uri.toString(),\n                SYNC_KEY to sync,\n                OPTIONS_KEY to options.asBooleanArray(),\n            )\n            val request = OneTimeWorkRequestBuilder<BackupRestoreJob>()\n                .addTag(TAG)\n                .setInputData(inputData)\n                .build()\n            context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, request)\n        }\n\n        fun stop(context: Context) {\n            context.workManager.cancelUniqueWork(TAG)\n        }\n    }\n}\n\nprivate const val TAG = \"BackupRestore\"\n\nprivate const val LOCATION_URI_KEY = \"location_uri\" // String\n\nprivate const val SYNC_KEY = \"sync\" // Boolean\nprivate const val OPTIONS_KEY = \"options\" // BooleanArray\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore\n\nimport android.content.Context\nimport android.net.Uri\nimport eu.kanade.tachiyomi.data.backup.BackupDecoder\nimport eu.kanade.tachiyomi.data.backup.BackupNotifier\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.BackupCustomButtons\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtension\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos\nimport eu.kanade.tachiyomi.data.backup.models.BackupManga\nimport eu.kanade.tachiyomi.data.backup.models.BackupPreference\nimport eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.AnimeCategoriesRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.AnimeExtensionRepoRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.AnimeRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.CustomButtonRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.ExtensionsRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.MangaCategoriesRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.MangaExtensionRepoRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.MangaRestorer\nimport eu.kanade.tachiyomi.data.backup.restore.restorers.PreferenceRestorer\nimport eu.kanade.tachiyomi.util.system.createFileInCacheDir\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport java.io.File\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\n\nclass BackupRestorer(\n    private val context: Context,\n    private val notifier: BackupNotifier,\n    private val isSync: Boolean,\n\n    private val animeCategoriesRestorer: AnimeCategoriesRestorer = AnimeCategoriesRestorer(),\n    private val mangaCategoriesRestorer: MangaCategoriesRestorer = MangaCategoriesRestorer(),\n    private val preferenceRestorer: PreferenceRestorer = PreferenceRestorer(context),\n    private val animeExtensionRepoRestorer: AnimeExtensionRepoRestorer = AnimeExtensionRepoRestorer(),\n    private val mangaExtensionRepoRestorer: MangaExtensionRepoRestorer = MangaExtensionRepoRestorer(),\n    private val customButtonRestorer: CustomButtonRestorer = CustomButtonRestorer(),\n    private val animeRestorer: AnimeRestorer = AnimeRestorer(),\n    private val mangaRestorer: MangaRestorer = MangaRestorer(),\n    private val extensionsRestorer: ExtensionsRestorer = ExtensionsRestorer(context),\n) {\n\n    private var restoreAmount = 0\n    private var restoreProgress = 0\n    private val errors = mutableListOf<Pair<Date, String>>()\n\n    /**\n     * Mapping of source ID to source name from backup data\n     */\n    private var animeSourceMapping: Map<Long, String> = emptyMap()\n    private var mangaSourceMapping: Map<Long, String> = emptyMap()\n\n    suspend fun restore(uri: Uri, options: RestoreOptions) {\n        val startTime = System.currentTimeMillis()\n\n        restoreFromFile(uri, options)\n\n        val time = System.currentTimeMillis() - startTime\n\n        val logFile = writeErrorLog()\n\n        notifier.showRestoreComplete(\n            time,\n            errors.size,\n            logFile.parent,\n            logFile.name,\n            isSync,\n        )\n    }\n\n    private suspend fun restoreFromFile(uri: Uri, options: RestoreOptions) {\n        val backup = BackupDecoder(context).decode(uri)\n\n        // Store source mapping for error messages\n        val backupAnimeMaps = backup.backupAnimeSources\n        mangaSourceMapping = backupAnimeMaps.associate { it.sourceId to it.name }\n        val backupMangaMaps = backup.backupSources\n        mangaSourceMapping = backupMangaMaps.associate { it.sourceId to it.name }\n\n        if (options.libraryEntries) {\n            restoreAmount += backup.backupManga.size + backup.backupAnime.size\n        }\n        if (options.categories) {\n            restoreAmount += 2 // +2 for anime and manga categories\n        }\n        if (options.appSettings) {\n            restoreAmount += 1\n        }\n        if (options.extensionRepoSettings) {\n            restoreAmount += backup.backupAnimeExtensionRepo.size + backup.backupMangaExtensionRepo.size\n        }\n        if (options.customButtons) {\n            restoreAmount += 1\n        }\n        if (options.sourceSettings) {\n            restoreAmount += 1\n        }\n        if (options.extensions) {\n            restoreAmount += 1\n        }\n\n        coroutineScope {\n            if (options.categories) {\n                restoreCategories(\n                    backupAnimeCategories = backup.backupAnimeCategories,\n                    backupMangaCategories = backup.backupCategories,\n                )\n            }\n            if (options.appSettings) {\n                restoreAppPreferences(backup.backupPreferences, backup.backupCategories.takeIf { options.categories })\n            }\n            if (options.sourceSettings) {\n                restoreSourcePreferences(backup.backupSourcePreferences)\n            }\n            if (options.libraryEntries) {\n                restoreAnime(backup.backupAnime, if (options.categories) backup.backupAnimeCategories else emptyList())\n                restoreManga(backup.backupManga, if (options.categories) backup.backupCategories else emptyList())\n            }\n            if (options.extensionRepoSettings) {\n                restoreExtensionRepos(backup.backupAnimeExtensionRepo, backup.backupMangaExtensionRepo)\n            }\n            if (options.customButtons) {\n                restoreCustomButtons(backup.backupCustomButton)\n            }\n            if (options.extensions) {\n                restoreExtensions(backup.backupExtensions)\n            }\n\n            // TODO: optionally trigger online library + tracker update\n        }\n    }\n\n    private fun CoroutineScope.restoreCategories(\n        backupAnimeCategories: List<BackupCategory>,\n        backupMangaCategories: List<BackupCategory>,\n    ) = launch {\n        ensureActive()\n        animeCategoriesRestorer(backupAnimeCategories)\n        mangaCategoriesRestorer(backupMangaCategories)\n\n        restoreProgress += 1\n        notifier.showRestoreProgress(\n            context.stringResource(MR.strings.categories),\n            restoreProgress,\n            restoreAmount,\n            isSync,\n        )\n    }\n\n    private fun CoroutineScope.restoreAnime(\n        backupAnimes: List<BackupAnime>,\n        backupAnimeCategories: List<BackupCategory>,\n    ) = launch {\n        animeRestorer.sortByNew(backupAnimes)\n            .forEach {\n                ensureActive()\n\n                val seasons = backupAnimes.filter { s -> s.parentId == it.id }\n                try {\n                    animeRestorer.restore(it, backupAnimeCategories, seasons)\n                } catch (e: Exception) {\n                    val sourceName = animeSourceMapping[it.source] ?: it.source.toString()\n                    errors.add(Date() to \"${it.title} [$sourceName]: ${e.message}\")\n                }\n\n                restoreProgress += 1\n                notifier.showRestoreProgress(it.title, restoreProgress, restoreAmount, isSync)\n            }\n    }\n\n    private fun CoroutineScope.restoreManga(\n        backupMangas: List<BackupManga>,\n        backupMangaCategories: List<BackupCategory>,\n    ) = launch {\n        mangaRestorer.sortByNew(backupMangas)\n            .forEach {\n                ensureActive()\n\n                try {\n                    mangaRestorer.restore(it, backupMangaCategories)\n                } catch (e: Exception) {\n                    val sourceName = mangaSourceMapping[it.source] ?: it.source.toString()\n                    errors.add(Date() to \"${it.title} [$sourceName]: ${e.message}\")\n                }\n\n                restoreProgress += 1\n                notifier.showRestoreProgress(it.title, restoreProgress, restoreAmount, isSync)\n            }\n    }\n\n    private fun CoroutineScope.restoreAppPreferences(\n        preferences: List<BackupPreference>,\n        categories: List<BackupCategory>?,\n    ) = launch {\n        ensureActive()\n        preferenceRestorer.restoreApp(\n            preferences,\n            categories,\n        )\n\n        restoreProgress += 1\n        notifier.showRestoreProgress(\n            context.stringResource(MR.strings.app_settings),\n            restoreProgress,\n            restoreAmount,\n            isSync,\n        )\n    }\n\n    private fun CoroutineScope.restoreSourcePreferences(preferences: List<BackupSourcePreferences>) = launch {\n        ensureActive()\n        preferenceRestorer.restoreSource(preferences)\n\n        restoreProgress += 1\n        notifier.showRestoreProgress(\n            context.stringResource(MR.strings.source_settings),\n            restoreProgress,\n            restoreAmount,\n            isSync,\n        )\n    }\n\n    private fun CoroutineScope.restoreExtensionRepos(\n        backupAnimeExtensionRepo: List<BackupExtensionRepos>,\n        backupMangaExtensionRepo: List<BackupExtensionRepos>,\n    ) = launch {\n        backupAnimeExtensionRepo\n            .forEach {\n                ensureActive()\n\n                try {\n                    animeExtensionRepoRestorer(it)\n                } catch (e: Exception) {\n                    errors.add(Date() to \"Error Adding Anime Repo: ${it.name} : ${e.message}\")\n                }\n\n                restoreProgress += 1\n                notifier.showRestoreProgress(\n                    context.stringResource(MR.strings.extensionRepo_settings),\n                    restoreProgress,\n                    restoreAmount,\n                    isSync,\n                )\n            }\n\n        backupMangaExtensionRepo\n            .forEach {\n                ensureActive()\n\n                try {\n                    mangaExtensionRepoRestorer(it)\n                } catch (e: Exception) {\n                    errors.add(Date() to \"Error Adding Manga Repo: ${it.name} : ${e.message}\")\n                }\n\n                restoreProgress += 1\n                notifier.showRestoreProgress(\n                    context.stringResource(MR.strings.extensionRepo_settings),\n                    restoreProgress,\n                    restoreAmount,\n                    isSync,\n                )\n            }\n    }\n\n    private fun CoroutineScope.restoreCustomButtons(customButtons: List<BackupCustomButtons>) = launch {\n        ensureActive()\n        customButtonRestorer(customButtons)\n\n        restoreProgress += 1\n        notifier.showRestoreProgress(\n            context.stringResource(AYMR.strings.custom_button_settings),\n            restoreProgress,\n            restoreAmount,\n            isSync,\n        )\n    }\n\n    private fun CoroutineScope.restoreExtensions(extensions: List<BackupExtension>) = launch {\n        ensureActive()\n        extensionsRestorer.restoreExtensions(extensions)\n\n        restoreProgress += 1\n        notifier.showRestoreProgress(\n            context.stringResource(MR.strings.source_settings),\n            restoreProgress,\n            restoreAmount,\n            isSync,\n        )\n    }\n\n    private fun writeErrorLog(): File {\n        try {\n            if (errors.isNotEmpty()) {\n                val file = context.createFileInCacheDir(\"aniyomi_restore_error.txt\")\n                val sdf = SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss.SSS\", Locale.getDefault())\n\n                file.bufferedWriter().use { out ->\n                    errors.forEach { (date, message) ->\n                        out.write(\"[${sdf.format(date)}] $message\\n\")\n                    }\n                }\n                return file\n            }\n        } catch (e: Exception) {\n            // Empty\n        }\n        return File(\"\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/RestoreOptions.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore\n\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\ndata class RestoreOptions(\n    val libraryEntries: Boolean = true,\n    val categories: Boolean = true,\n    val appSettings: Boolean = true,\n    val extensionRepoSettings: Boolean = true,\n    val customButtons: Boolean = true,\n    val sourceSettings: Boolean = true,\n    val extensions: Boolean = false,\n) {\n\n    fun asBooleanArray() = booleanArrayOf(\n        libraryEntries,\n        categories,\n        appSettings,\n        extensionRepoSettings,\n        customButtons,\n        sourceSettings,\n        extensions,\n    )\n\n    fun canRestore() = libraryEntries ||\n        categories ||\n        appSettings ||\n        extensionRepoSettings ||\n        customButtons ||\n        sourceSettings ||\n        extensions\n\n    companion object {\n        val options = persistentListOf(\n            Entry(\n                label = MR.strings.label_library,\n                getter = RestoreOptions::libraryEntries,\n                setter = { options, enabled -> options.copy(libraryEntries = enabled) },\n            ),\n            Entry(\n                label = MR.strings.categories,\n                getter = RestoreOptions::categories,\n                setter = { options, enabled -> options.copy(categories = enabled) },\n            ),\n            Entry(\n                label = MR.strings.app_settings,\n                getter = RestoreOptions::appSettings,\n                setter = { options, enabled -> options.copy(appSettings = enabled) },\n            ),\n            Entry(\n                label = MR.strings.extensionRepo_settings,\n                getter = RestoreOptions::extensionRepoSettings,\n                setter = { options, enabled -> options.copy(extensionRepoSettings = enabled) },\n            ),\n            Entry(\n                label = AYMR.strings.custom_button_settings,\n                getter = RestoreOptions::customButtons,\n                setter = { options, enabled -> options.copy(customButtons = enabled) },\n            ),\n            Entry(\n                label = MR.strings.source_settings,\n                getter = RestoreOptions::sourceSettings,\n                setter = { options, enabled -> options.copy(sourceSettings = enabled) },\n            ),\n            Entry(\n                label = MR.strings.label_extensions,\n                getter = RestoreOptions::extensions,\n                setter = { options, enabled -> options.copy(extensions = enabled) },\n            ),\n        )\n\n        fun fromBooleanArray(array: BooleanArray) = RestoreOptions(\n            libraryEntries = array[0],\n            categories = array[1],\n            appSettings = array[2],\n            extensionRepoSettings = array[3],\n            customButtons = array[4],\n            sourceSettings = array[5],\n            extensions = array[6],\n        )\n    }\n\n    data class Entry(\n        val label: StringResource,\n        val getter: (RestoreOptions) -> Boolean,\n        val setter: (RestoreOptions, Boolean) -> RestoreOptions,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/AnimeCategoriesRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeCategoriesRestorer(\n    private val animeHandler: AnimeDatabaseHandler = Injekt.get(),\n    private val getAnimeCategories: GetAnimeCategories = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n) {\n\n    suspend operator fun invoke(backupCategories: List<BackupCategory>) {\n        if (backupCategories.isNotEmpty()) {\n            val dbCategories = getAnimeCategories.await()\n            val dbCategoriesByName = dbCategories.associateBy { it.name }\n            var nextOrder = dbCategories.maxOfOrNull { it.order }?.plus(1) ?: 0\n\n            val categories = backupCategories\n                .sortedBy { it.order }\n                .map {\n                    val dbCategory = dbCategoriesByName[it.name]\n                    if (dbCategory != null) return@map dbCategory\n                    val order = nextOrder++\n                    animeHandler.awaitOneExecutable {\n                        categoriesQueries.insert(it.name, order, it.flags)\n                        categoriesQueries.selectLastInsertedRowId()\n                    }\n                        .let { id -> it.toCategory(id).copy(order = order) }\n                }\n\n            libraryPreferences.categorizedDisplaySettings().set(\n                (dbCategories + categories)\n                    .distinctBy { it.flags }\n                    .size > 1,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/AnimeExtensionRepoRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepo\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeExtensionRepoRestorer(\n    private val animeHandler: AnimeDatabaseHandler = Injekt.get(),\n    private val getExtensionRepos: GetAnimeExtensionRepo = Injekt.get(),\n) {\n\n    suspend operator fun invoke(\n        backupRepo: BackupExtensionRepos,\n    ) {\n        val dbRepos = getExtensionRepos.getAll()\n        val existingReposBySHA = dbRepos.associateBy { it.signingKeyFingerprint }\n        val existingReposByUrl = dbRepos.associateBy { it.baseUrl }\n        val urlExists = existingReposByUrl[backupRepo.baseUrl]\n        val shaExists = existingReposBySHA[backupRepo.signingKeyFingerprint]\n        if (urlExists != null && urlExists.signingKeyFingerprint != backupRepo.signingKeyFingerprint) {\n            error(\"Already Exists with different signing key fingerprint\")\n        } else if (shaExists != null) {\n            error(\"${shaExists.name} has the same signing key fingerprint\")\n        } else {\n            animeHandler.await {\n                extension_reposQueries.insert(\n                    backupRepo.baseUrl,\n                    backupRepo.name,\n                    backupRepo.shortName,\n                    backupRepo.website,\n                    backupRepo.signingKeyFingerprint,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/AnimeRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnime\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnimeHistory\nimport eu.kanade.tachiyomi.data.backup.models.BackupAnimeTracking\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.BackupEpisode\nimport tachiyomi.data.AnimeUpdateStrategyColumnAdapter\nimport tachiyomi.data.FetchTypeColumnAdapter\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.entries.anime.interactor.AnimeFetchInterval\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeByUrlAndSourceId\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.ZonedDateTime\nimport java.util.Date\nimport kotlin.math.max\n\nclass AnimeRestorer(\n    private val handler: AnimeDatabaseHandler = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val getAnimeByUrlAndSourceId: GetAnimeByUrlAndSourceId = Injekt.get(),\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    private val getTracks: GetAnimeTracks = Injekt.get(),\n    private val insertTrack: InsertAnimeTrack = Injekt.get(),\n    fetchInterval: AnimeFetchInterval = Injekt.get(),\n) {\n\n    private var now = ZonedDateTime.now()\n    private var currentFetchWindow = fetchInterval.getWindow(now)\n\n    init {\n        now = ZonedDateTime.now()\n        currentFetchWindow = fetchInterval.getWindow(now)\n    }\n\n    suspend fun sortByNew(backupAnimes: List<BackupAnime>): List<BackupAnime> {\n        val urlsBySource = handler.awaitList { animesQueries.getAllAnimeSourceAndUrl() }\n            .groupBy({ it.source }, { it.url })\n\n        return backupAnimes\n            .sortedWith(\n                compareBy<BackupAnime> { it.url in urlsBySource[it.source].orEmpty() }\n                    .then(compareByDescending { it.lastModifiedAt }),\n            )\n    }\n\n    suspend fun restore(\n        backupAnime: BackupAnime,\n        backupCategories: List<BackupCategory>,\n        backupSeasons: List<BackupAnime>,\n    ) {\n        handler.await(inTransaction = true) {\n            val dbAnime = findExistingAnime(backupAnime)\n            val anime = backupAnime.getAnimeImpl()\n            val restoredAnime = if (dbAnime == null) {\n                restoreNewAnime(anime)\n            } else {\n                restoreExistingAnime(anime, dbAnime)\n            }\n\n            backupSeasons.forEach { bs ->\n                val dbAnime = findExistingAnime(bs)\n                val anime = bs.getAnimeImpl().copy(\n                    parentId = restoredAnime.id,\n                )\n                if (dbAnime == null) {\n                    restoreNewAnime(anime)\n                } else {\n                    restoreExistingAnime(anime, dbAnime)\n                }\n            }\n\n            restoreAnimeDetails(\n                anime = restoredAnime,\n                episodes = backupAnime.episodes,\n                categories = backupAnime.categories,\n                backupCategories = backupCategories,\n                history = backupAnime.history,\n                tracks = backupAnime.tracking,\n            )\n        }\n    }\n\n    private suspend fun findExistingAnime(backupAnime: BackupAnime): Anime? {\n        return getAnimeByUrlAndSourceId.await(backupAnime.url, backupAnime.source)\n    }\n\n    private suspend fun restoreExistingAnime(anime: Anime, dbAnime: Anime): Anime {\n        return if (anime.version > dbAnime.version) {\n            updateAnime(dbAnime.copyFrom(anime).copy(id = dbAnime.id, parentId = anime.parentId))\n        } else {\n            updateAnime(anime.copyFrom(dbAnime).copy(id = dbAnime.id, parentId = anime.parentId))\n        }\n    }\n\n    private fun Anime.copyFrom(newer: Anime): Anime {\n        return this.copy(\n            favorite = this.favorite || newer.favorite,\n            author = newer.author,\n            artist = newer.artist,\n            description = newer.description,\n            genre = newer.genre,\n            thumbnailUrl = newer.thumbnailUrl,\n            status = newer.status,\n            initialized = this.initialized || newer.initialized,\n            version = newer.version,\n            fetchType = newer.fetchType,\n            parentId = newer.parentId,\n        )\n    }\n\n    private suspend fun updateAnime(anime: Anime): Anime {\n        handler.await(true) {\n            animesQueries.update(\n                source = anime.source,\n                url = anime.url,\n                artist = anime.artist,\n                author = anime.author,\n                description = anime.description,\n                genre = anime.genre?.joinToString(separator = \", \"),\n                title = anime.title,\n                status = anime.status,\n                thumbnailUrl = anime.thumbnailUrl,\n                favorite = anime.favorite,\n                lastUpdate = anime.lastUpdate,\n                nextUpdate = null,\n                calculateInterval = null,\n                initialized = anime.initialized,\n                viewer = anime.viewerFlags,\n                episodeFlags = anime.episodeFlags,\n                coverLastModified = anime.coverLastModified,\n                dateAdded = anime.dateAdded,\n                animeId = anime.id,\n                updateStrategy = anime.updateStrategy.let(AnimeUpdateStrategyColumnAdapter::encode),\n                version = anime.version,\n                isSyncing = 1,\n                fetchType = anime.fetchType.let(FetchTypeColumnAdapter::encode),\n                parentId = anime.parentId,\n                seasonFlags = anime.seasonFlags,\n                seasonNumber = anime.seasonNumber,\n                seasonSourceOrder = anime.seasonSourceOrder,\n                backgroundUrl = anime.backgroundUrl,\n                backgroundLastModified = anime.backgroundLastModified,\n            )\n        }\n        return anime\n    }\n\n    private suspend fun restoreNewAnime(\n        anime: Anime,\n    ): Anime {\n        return anime.copy(\n            initialized = anime.description != null,\n            id = insertAnime(anime),\n            version = anime.version,\n        )\n    }\n\n    private suspend fun restoreEpisodes(anime: Anime, backupEpisodes: List<BackupEpisode>) {\n        val dbEpisodesByUrl = getEpisodesByAnimeId.await(anime.id)\n            .associateBy { it.url }\n\n        val (existingEpisodes, newEpisodes) = backupEpisodes\n            .mapNotNull {\n                val episode = it.toEpisodeImpl().copy(animeId = anime.id)\n\n                val dbEpisode = dbEpisodesByUrl[episode.url]\n                    ?: // New episode\n                    return@mapNotNull episode\n\n                if (episode.forComparison() == dbEpisode.forComparison()) {\n                    // Same state; skip\n                    return@mapNotNull null\n                }\n\n                // Update to an existing episode\n                var updatedEpisode = episode\n                    .copyFrom(dbEpisode)\n                    .copy(\n                        id = dbEpisode.id,\n                        bookmark = episode.bookmark || dbEpisode.bookmark,\n                        fillermark = episode.fillermark || dbEpisode.fillermark,\n                    )\n                if (dbEpisode.seen && !updatedEpisode.seen) {\n                    updatedEpisode = updatedEpisode.copy(\n                        seen = true,\n                        lastSecondSeen = dbEpisode.lastSecondSeen,\n                    )\n                } else if (updatedEpisode.lastSecondSeen == 0L && dbEpisode.lastSecondSeen != 0L) {\n                    updatedEpisode = updatedEpisode.copy(\n                        lastSecondSeen = dbEpisode.lastSecondSeen,\n                    )\n                }\n                updatedEpisode\n            }\n            .partition { it.id > 0 }\n\n        insertNewEpisodes(newEpisodes)\n        updateExistingEpisodes(existingEpisodes)\n    }\n\n    private fun Episode.forComparison() =\n        this.copy(id = 0L, animeId = 0L, dateFetch = 0L, dateUpload = 0L, lastModifiedAt = 0L, version = 0L)\n\n    private suspend fun insertNewEpisodes(episodes: List<Episode>) {\n        handler.await(true) {\n            episodes.forEach { episode ->\n                episodesQueries.insert(\n                    episode.animeId,\n                    episode.url,\n                    episode.name,\n                    episode.scanlator,\n                    episode.seen,\n                    episode.bookmark,\n                    episode.lastSecondSeen,\n                    episode.totalSeconds,\n                    episode.episodeNumber,\n                    episode.sourceOrder,\n                    episode.dateFetch,\n                    episode.dateUpload,\n                    episode.version,\n                    episode.summary,\n                    episode.previewUrl,\n                    episode.fillermark,\n                )\n            }\n        }\n    }\n\n    private suspend fun updateExistingEpisodes(episodes: List<Episode>) {\n        handler.await(true) {\n            episodes.forEach { episode ->\n                episodesQueries.update(\n                    animeId = null,\n                    url = null,\n                    name = null,\n                    scanlator = null,\n                    summary = null,\n                    previewUrl = null,\n                    seen = episode.seen,\n                    bookmark = episode.bookmark,\n                    fillermark = episode.fillermark,\n                    lastSecondSeen = episode.lastSecondSeen,\n                    totalSeconds = episode.totalSeconds,\n                    episodeNumber = null,\n                    sourceOrder = null,\n                    dateFetch = null,\n                    dateUpload = null,\n                    episodeId = episode.id,\n                    version = episode.version,\n                    isSyncing = 0,\n                )\n            }\n        }\n    }\n\n    /**\n     * Inserts anime and returns id\n     *\n     * @return id of [Anime], null if not found\n     */\n    private suspend fun insertAnime(anime: Anime): Long {\n        return handler.awaitOneExecutable(true) {\n            animesQueries.insert(\n                source = anime.source,\n                url = anime.url,\n                artist = anime.artist,\n                author = anime.author,\n                description = anime.description,\n                genre = anime.genre,\n                title = anime.title,\n                status = anime.status,\n                thumbnailUrl = anime.thumbnailUrl,\n                favorite = anime.favorite,\n                lastUpdate = anime.lastUpdate,\n                nextUpdate = 0L,\n                calculateInterval = 0L,\n                initialized = anime.initialized,\n                viewerFlags = anime.viewerFlags,\n                episodeFlags = anime.episodeFlags,\n                coverLastModified = anime.coverLastModified,\n                dateAdded = anime.dateAdded,\n                updateStrategy = anime.updateStrategy,\n                version = anime.version,\n                fetchType = anime.fetchType,\n                parentId = anime.parentId,\n                seasonFlags = anime.seasonFlags,\n                seasonNumber = anime.seasonNumber,\n                seasonSourceOrder = anime.seasonSourceOrder,\n                backgroundUrl = anime.backgroundUrl,\n                backgroundLastModified = anime.backgroundLastModified,\n            )\n            animesQueries.selectLastInsertedRowId()\n        }\n    }\n\n    private suspend fun restoreAnimeDetails(\n        anime: Anime,\n        episodes: List<BackupEpisode>,\n        categories: List<Long>,\n        backupCategories: List<BackupCategory>,\n        history: List<BackupAnimeHistory>,\n        tracks: List<BackupAnimeTracking>,\n    ): Anime {\n        restoreCategories(anime, categories, backupCategories)\n        restoreEpisodes(anime, episodes)\n        restoreTracking(anime, tracks)\n        restoreHistory(history)\n        updateAnime.awaitUpdateFetchInterval(anime, now, currentFetchWindow)\n        return anime\n    }\n\n    /**\n     * Restores the categories a anime is in.\n     *\n     * @param anime the anime whose categories have to be restored.\n     * @param categories the categories to restore.\n     */\n    private suspend fun restoreCategories(\n        anime: Anime,\n        categories: List<Long>,\n        backupCategories: List<BackupCategory>,\n    ) {\n        val dbCategories = getCategories.await()\n        val dbCategoriesByName = dbCategories.associateBy { it.name }\n\n        val backupCategoriesByOrder = backupCategories.associateBy { it.order }\n\n        val animeCategoriesToUpdate = categories.mapNotNull { backupCategoryOrder ->\n            backupCategoriesByOrder[backupCategoryOrder]?.let { backupCategory ->\n                dbCategoriesByName[backupCategory.name]?.let { dbCategory ->\n                    Pair(anime.id, dbCategory.id)\n                }\n            }\n        }\n\n        if (animeCategoriesToUpdate.isNotEmpty()) {\n            handler.await(true) {\n                animes_categoriesQueries.deleteAnimeCategoryByAnimeId(anime.id)\n                animeCategoriesToUpdate.forEach { (animeId, categoryId) ->\n                    animes_categoriesQueries.insert(animeId, categoryId)\n                }\n            }\n        }\n    }\n\n    private suspend fun restoreHistory(backupHistory: List<BackupAnimeHistory>) {\n        val toUpdate = backupHistory.mapNotNull { history ->\n            val dbHistory = handler.awaitOneOrNull { animehistoryQueries.getHistoryByEpisodeUrl(history.url) }\n            val item = history.getHistoryImpl()\n\n            if (dbHistory == null) {\n                val episode = handler.awaitOneOrNull { episodesQueries.getEpisodeByUrl(history.url) }\n                return@mapNotNull if (episode == null) {\n                    // Episode doesn't exist; skip\n                    null\n                } else {\n                    // New history entry\n                    item.copy(episodeId = episode._id)\n                }\n            }\n\n            // Update history entry\n            item.copy(\n                id = dbHistory._id,\n                episodeId = dbHistory.episode_id,\n                seenAt = max(item.seenAt?.time ?: 0L, dbHistory.last_seen?.time ?: 0L)\n                    .takeIf { it > 0L }\n                    ?.let { Date(it) },\n            )\n        }\n\n        if (toUpdate.isNotEmpty()) {\n            handler.await(true) {\n                toUpdate.forEach {\n                    animehistoryQueries.upsert(\n                        it.episodeId,\n                        it.seenAt,\n                    )\n                }\n            }\n        }\n    }\n\n    private suspend fun restoreTracking(anime: Anime, backupTracks: List<BackupAnimeTracking>) {\n        val dbTrackByTrackerId = getTracks.await(anime.id).associateBy { it.trackerId }\n\n        val (existingTracks, newTracks) = backupTracks\n            .mapNotNull {\n                val track = it.getTrackImpl()\n                val dbTrack = dbTrackByTrackerId[track.trackerId]\n                    ?: // New track\n                    return@mapNotNull track.copy(\n                        id = 0, // Let DB assign new ID\n                        animeId = anime.id,\n                    )\n\n                if (track.forComparison() == dbTrack.forComparison()) {\n                    // Same state; skip\n                    return@mapNotNull null\n                }\n\n                // Update to an existing track\n                dbTrack.copy(\n                    remoteId = track.remoteId,\n                    libraryId = track.libraryId,\n                    lastEpisodeSeen = max(dbTrack.lastEpisodeSeen, track.lastEpisodeSeen),\n                )\n            }\n            .partition { it.id > 0 }\n\n        if (newTracks.isNotEmpty()) {\n            insertTrack.awaitAll(newTracks)\n        }\n        if (existingTracks.isNotEmpty()) {\n            handler.await(true) {\n                existingTracks.forEach { track ->\n                    anime_syncQueries.update(\n                        track.animeId,\n                        track.trackerId,\n                        track.remoteId,\n                        track.libraryId,\n                        track.title,\n                        track.lastEpisodeSeen,\n                        track.totalEpisodes,\n                        track.status,\n                        track.score,\n                        track.remoteUrl,\n                        track.startDate,\n                        track.finishDate,\n                        track.private,\n                        track.id,\n                    )\n                }\n            }\n        }\n    }\n\n    private fun AnimeTrack.forComparison() = this.copy(id = 0L, animeId = 0L)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CustomButtonRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupCustomButtons\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.custombuttons.interactor.GetCustomButtons\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass CustomButtonRestorer(\n    private val handler: AnimeDatabaseHandler = Injekt.get(),\n    private val getCustomButtons: GetCustomButtons = Injekt.get(),\n) {\n    suspend operator fun invoke(\n        backupCustomButtons: List<BackupCustomButtons>,\n    ) {\n        if (backupCustomButtons.isNotEmpty()) {\n            val dbCustomButtons = getCustomButtons.getAll()\n            val dbCustomButtonsByName = dbCustomButtons.associateBy { it.name }\n            var nextSortIndex = dbCustomButtons.maxOfOrNull { it.sortIndex }?.plus(1) ?: 0\n            val dbHasFavorite = dbCustomButtons.firstOrNull { it.isFavorite } != null\n\n            backupCustomButtons\n                .sortedBy { it.sortIndex }\n                .map {\n                    val dbCustomButton = dbCustomButtonsByName[it.name]\n                    if (dbCustomButton != null) return@map dbCustomButton\n                    val sortIndex = nextSortIndex++\n                    handler.awaitOneExecutable {\n                        val isFavorite = it.isFavorite && !dbHasFavorite\n                        custom_buttonsQueries.insert(\n                            it.name,\n                            isFavorite,\n                            sortIndex,\n                            it.content,\n                            it.longPressContent,\n                            it.onStartup,\n                        )\n                        custom_buttonsQueries.selectLastInsertedRowId()\n                    }\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/ExtensionsRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport android.content.Context\nimport android.content.Intent\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtension\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport uy.kohesive.injekt.api.get\nimport java.io.File\n\nclass ExtensionsRestorer(\n    private val context: Context,\n) {\n\n    fun restoreExtensions(extensions: List<BackupExtension>) {\n        extensions.forEach {\n            if (context.packageManager.getInstalledPackages(0).none { pkg -> pkg.packageName == it.pkgName }) {\n                // save apk in files dir and open installer dialog\n                val file = File(context.cacheDir, \"${it.pkgName}.apk\")\n                file.writeBytes(it.apk)\n                val intent = Intent(Intent.ACTION_VIEW)\n                    .setDataAndType(\n                        file.getUriCompat(context),\n                        \"application/vnd.android.package-archive\",\n                    )\n                    .setFlags(\n                        Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION,\n                    )\n                context.startActivity(intent)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaCategoriesRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaCategoriesRestorer(\n    private val mangaHandler: MangaDatabaseHandler = Injekt.get(),\n    private val getMangaCategories: GetMangaCategories = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n) {\n\n    suspend operator fun invoke(backupCategories: List<BackupCategory>) {\n        if (backupCategories.isNotEmpty()) {\n            val dbCategories = getMangaCategories.await()\n            val dbCategoriesByName = dbCategories.associateBy { it.name }\n            var nextOrder = dbCategories.maxOfOrNull { it.order }?.plus(1) ?: 0\n\n            val categories = backupCategories\n                .sortedBy { it.order }\n                .map {\n                    val dbCategory = dbCategoriesByName[it.name]\n                    if (dbCategory != null) return@map dbCategory\n                    val order = nextOrder++\n                    mangaHandler.awaitOneExecutable {\n                        categoriesQueries.insert(it.name, order, it.flags)\n                        categoriesQueries.selectLastInsertedRowId()\n                    }\n                        .let { id -> it.toCategory(id).copy(order = order) }\n                }\n\n            libraryPreferences.categorizedDisplaySettings().set(\n                (dbCategories + categories)\n                    .distinctBy { it.flags }\n                    .size > 1,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaExtensionRepoRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.tachiyomi.data.backup.models.BackupExtensionRepos\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepo\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaExtensionRepoRestorer(\n    private val mangaHandler: MangaDatabaseHandler = Injekt.get(),\n    private val getExtensionRepos: GetMangaExtensionRepo = Injekt.get(),\n) {\n\n    suspend operator fun invoke(\n        backupRepo: BackupExtensionRepos,\n    ) {\n        val dbRepos = getExtensionRepos.getAll()\n        val existingReposBySHA = dbRepos.associateBy { it.signingKeyFingerprint }\n        val existingReposByUrl = dbRepos.associateBy { it.baseUrl }\n        val urlExists = existingReposByUrl[backupRepo.baseUrl]\n        val shaExists = existingReposBySHA[backupRepo.signingKeyFingerprint]\n        if (urlExists != null && urlExists.signingKeyFingerprint != backupRepo.signingKeyFingerprint) {\n            error(\"Already Exists with different signing key fingerprint\")\n        } else if (shaExists != null) {\n            error(\"${shaExists.name} has the same signing key fingerprint\")\n        } else {\n            mangaHandler.await {\n                extension_reposQueries.insert(\n                    backupRepo.baseUrl,\n                    backupRepo.name,\n                    backupRepo.shortName,\n                    backupRepo.website,\n                    backupRepo.signingKeyFingerprint,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.BackupChapter\nimport eu.kanade.tachiyomi.data.backup.models.BackupHistory\nimport eu.kanade.tachiyomi.data.backup.models.BackupManga\nimport eu.kanade.tachiyomi.data.backup.models.BackupTracking\nimport tachiyomi.data.MangaUpdateStrategyColumnAdapter\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.entries.manga.interactor.GetMangaByUrlAndSourceId\nimport tachiyomi.domain.entries.manga.interactor.MangaFetchInterval\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.ZonedDateTime\nimport java.util.Date\nimport kotlin.math.max\n\nclass MangaRestorer(\n    private val handler: MangaDatabaseHandler = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val getMangaByUrlAndSourceId: GetMangaByUrlAndSourceId = Injekt.get(),\n    private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n    private val getTracks: GetMangaTracks = Injekt.get(),\n    private val insertTrack: InsertMangaTrack = Injekt.get(),\n    fetchInterval: MangaFetchInterval = Injekt.get(),\n) {\n\n    private var now = ZonedDateTime.now()\n    private var currentFetchWindow = fetchInterval.getWindow(now)\n\n    init {\n        now = ZonedDateTime.now()\n        currentFetchWindow = fetchInterval.getWindow(now)\n    }\n\n    suspend fun sortByNew(backupMangas: List<BackupManga>): List<BackupManga> {\n        val urlsBySource = handler.awaitList { mangasQueries.getAllMangaSourceAndUrl() }\n            .groupBy({ it.source }, { it.url })\n\n        return backupMangas\n            .sortedWith(\n                compareBy<BackupManga> { it.url in urlsBySource[it.source].orEmpty() }\n                    .then(compareByDescending { it.lastModifiedAt }),\n            )\n    }\n\n    suspend fun restore(\n        backupManga: BackupManga,\n        backupCategories: List<BackupCategory>,\n    ) {\n        handler.await(inTransaction = true) {\n            val dbManga = findExistingManga(backupManga)\n            val manga = backupManga.getMangaImpl()\n            val restoredManga = if (dbManga == null) {\n                restoreNewManga(manga)\n            } else {\n                restoreExistingManga(manga, dbManga)\n            }\n\n            restoreMangaDetails(\n                manga = restoredManga,\n                chapters = backupManga.chapters,\n                categories = backupManga.categories,\n                backupCategories = backupCategories,\n                history = backupManga.history,\n                tracks = backupManga.tracking,\n                excludedScanlators = backupManga.excludedScanlators,\n            )\n        }\n    }\n\n    private suspend fun findExistingManga(backupManga: BackupManga): Manga? {\n        return getMangaByUrlAndSourceId.await(backupManga.url, backupManga.source)\n    }\n\n    private suspend fun restoreExistingManga(manga: Manga, dbManga: Manga): Manga {\n        return if (manga.version > dbManga.version) {\n            updateManga(dbManga.copyFrom(manga).copy(id = dbManga.id))\n        } else {\n            updateManga(manga.copyFrom(dbManga).copy(id = dbManga.id))\n        }\n    }\n\n    private fun Manga.copyFrom(newer: Manga): Manga {\n        return this.copy(\n            favorite = this.favorite || newer.favorite,\n            author = newer.author,\n            artist = newer.artist,\n            description = newer.description,\n            genre = newer.genre,\n            thumbnailUrl = newer.thumbnailUrl,\n            status = newer.status,\n            initialized = this.initialized || newer.initialized,\n            version = newer.version,\n        )\n    }\n\n    private suspend fun updateManga(manga: Manga): Manga {\n        handler.await(true) {\n            mangasQueries.update(\n                source = manga.source,\n                url = manga.url,\n                artist = manga.artist,\n                author = manga.author,\n                description = manga.description,\n                genre = manga.genre?.joinToString(separator = \", \"),\n                title = manga.title,\n                status = manga.status,\n                thumbnailUrl = manga.thumbnailUrl,\n                favorite = manga.favorite,\n                lastUpdate = manga.lastUpdate,\n                nextUpdate = null,\n                calculateInterval = null,\n                initialized = manga.initialized,\n                viewer = manga.viewerFlags,\n                chapterFlags = manga.chapterFlags,\n                coverLastModified = manga.coverLastModified,\n                dateAdded = manga.dateAdded,\n                mangaId = manga.id,\n                updateStrategy = manga.updateStrategy.let(MangaUpdateStrategyColumnAdapter::encode),\n                version = manga.version,\n                isSyncing = 1,\n            )\n        }\n        return manga\n    }\n\n    private suspend fun restoreNewManga(\n        manga: Manga,\n    ): Manga {\n        return manga.copy(\n            initialized = manga.description != null,\n            id = insertManga(manga),\n            version = manga.version,\n        )\n    }\n\n    private suspend fun restoreChapters(manga: Manga, backupChapters: List<BackupChapter>) {\n        val dbChaptersByUrl = getChaptersByMangaId.await(manga.id)\n            .associateBy { it.url }\n\n        val (existingChapters, newChapters) = backupChapters\n            .mapNotNull {\n                val chapter = it.toChapterImpl().copy(mangaId = manga.id)\n\n                val dbChapter = dbChaptersByUrl[chapter.url]\n                    ?: // New chapter\n                    return@mapNotNull chapter\n\n                if (chapter.forComparison() == dbChapter.forComparison()) {\n                    // Same state; skip\n                    return@mapNotNull null\n                }\n\n                // Update to an existing chapter\n                var updatedChapter = chapter\n                    .copyFrom(dbChapter)\n                    .copy(\n                        id = dbChapter.id,\n                        bookmark = chapter.bookmark || dbChapter.bookmark,\n                    )\n                if (dbChapter.read && !updatedChapter.read) {\n                    updatedChapter = updatedChapter.copy(\n                        read = true,\n                        lastPageRead = dbChapter.lastPageRead,\n                    )\n                } else if (updatedChapter.lastPageRead == 0L && dbChapter.lastPageRead != 0L) {\n                    updatedChapter = updatedChapter.copy(\n                        lastPageRead = dbChapter.lastPageRead,\n                    )\n                }\n                updatedChapter\n            }\n            .partition { it.id > 0 }\n\n        insertNewChapters(newChapters)\n        updateExistingChapters(existingChapters)\n    }\n\n    private fun Chapter.forComparison() =\n        this.copy(id = 0L, mangaId = 0L, dateFetch = 0L, dateUpload = 0L, lastModifiedAt = 0L, version = 0L)\n\n    private suspend fun insertNewChapters(chapters: List<Chapter>) {\n        handler.await(true) {\n            chapters.forEach { chapter ->\n                chaptersQueries.insert(\n                    chapter.mangaId,\n                    chapter.url,\n                    chapter.name,\n                    chapter.scanlator,\n                    chapter.read,\n                    chapter.bookmark,\n                    chapter.lastPageRead,\n                    chapter.chapterNumber,\n                    chapter.sourceOrder,\n                    chapter.dateFetch,\n                    chapter.dateUpload,\n                    chapter.version,\n                )\n            }\n        }\n    }\n\n    private suspend fun updateExistingChapters(chapters: List<Chapter>) {\n        handler.await(true) {\n            chapters.forEach { chapter ->\n                chaptersQueries.update(\n                    mangaId = null,\n                    url = null,\n                    name = null,\n                    scanlator = null,\n                    read = chapter.read,\n                    bookmark = chapter.bookmark,\n                    lastPageRead = chapter.lastPageRead,\n                    chapterNumber = null,\n                    sourceOrder = null,\n                    dateFetch = null,\n                    dateUpload = null,\n                    chapterId = chapter.id,\n                    version = chapter.version,\n                    isSyncing = 0,\n                )\n            }\n        }\n    }\n\n    /**\n     * Inserts manga and returns id\n     *\n     * @return id of [Manga], null if not found\n     */\n    private suspend fun insertManga(manga: Manga): Long {\n        return handler.awaitOneExecutable(true) {\n            mangasQueries.insert(\n                source = manga.source,\n                url = manga.url,\n                artist = manga.artist,\n                author = manga.author,\n                description = manga.description,\n                genre = manga.genre,\n                title = manga.title,\n                status = manga.status,\n                thumbnailUrl = manga.thumbnailUrl,\n                favorite = manga.favorite,\n                lastUpdate = manga.lastUpdate,\n                nextUpdate = 0L,\n                calculateInterval = 0L,\n                initialized = manga.initialized,\n                viewerFlags = manga.viewerFlags,\n                chapterFlags = manga.chapterFlags,\n                coverLastModified = manga.coverLastModified,\n                dateAdded = manga.dateAdded,\n                updateStrategy = manga.updateStrategy,\n                version = manga.version,\n            )\n            mangasQueries.selectLastInsertedRowId()\n        }\n    }\n\n    private suspend fun restoreMangaDetails(\n        manga: Manga,\n        chapters: List<BackupChapter>,\n        categories: List<Long>,\n        backupCategories: List<BackupCategory>,\n        history: List<BackupHistory>,\n        tracks: List<BackupTracking>,\n        excludedScanlators: List<String>,\n    ): Manga {\n        restoreCategories(manga, categories, backupCategories)\n        restoreChapters(manga, chapters)\n        restoreTracking(manga, tracks)\n        restoreHistory(history)\n        restoreExcludedScanlators(manga, excludedScanlators)\n        updateManga.awaitUpdateFetchInterval(manga, now, currentFetchWindow)\n        return manga\n    }\n\n    /**\n     * Restores the categories a manga is in.\n     *\n     * @param manga the manga whose categories have to be restored.\n     * @param categories the categories to restore.\n     */\n    private suspend fun restoreCategories(\n        manga: Manga,\n        categories: List<Long>,\n        backupCategories: List<BackupCategory>,\n    ) {\n        val dbCategories = getCategories.await()\n        val dbCategoriesByName = dbCategories.associateBy { it.name }\n\n        val backupCategoriesByOrder = backupCategories.associateBy { it.order }\n\n        val mangaCategoriesToUpdate = categories.mapNotNull { backupCategoryOrder ->\n            backupCategoriesByOrder[backupCategoryOrder]?.let { backupCategory ->\n                dbCategoriesByName[backupCategory.name]?.let { dbCategory ->\n                    Pair(manga.id, dbCategory.id)\n                }\n            }\n        }\n\n        if (mangaCategoriesToUpdate.isNotEmpty()) {\n            handler.await(true) {\n                mangas_categoriesQueries.deleteMangaCategoryByMangaId(manga.id)\n                mangaCategoriesToUpdate.forEach { (mangaId, categoryId) ->\n                    mangas_categoriesQueries.insert(mangaId, categoryId)\n                }\n            }\n        }\n    }\n\n    private suspend fun restoreHistory(backupHistory: List<BackupHistory>) {\n        val toUpdate = backupHistory.mapNotNull { history ->\n            val dbHistory = handler.awaitOneOrNull { historyQueries.getHistoryByChapterUrl(history.url) }\n            val item = history.getHistoryImpl()\n\n            if (dbHistory == null) {\n                val chapter = handler.awaitOneOrNull { chaptersQueries.getChapterByUrl(history.url) }\n                return@mapNotNull if (chapter == null) {\n                    // Chapter doesn't exist; skip\n                    null\n                } else {\n                    // New history entry\n                    item.copy(chapterId = chapter._id)\n                }\n            }\n\n            // Update history entry\n            item.copy(\n                id = dbHistory._id,\n                chapterId = dbHistory.chapter_id,\n                readAt = max(item.readAt?.time ?: 0L, dbHistory.last_read?.time ?: 0L)\n                    .takeIf { it > 0L }\n                    ?.let { Date(it) },\n                readDuration = max(item.readDuration, dbHistory.time_read) - dbHistory.time_read,\n            )\n        }\n\n        if (toUpdate.isNotEmpty()) {\n            handler.await(true) {\n                toUpdate.forEach {\n                    historyQueries.upsert(\n                        it.chapterId,\n                        it.readAt,\n                        it.readDuration,\n                    )\n                }\n            }\n        }\n    }\n\n    private suspend fun restoreTracking(manga: Manga, backupTracks: List<BackupTracking>) {\n        val dbTrackByTrackerId = getTracks.await(manga.id).associateBy { it.trackerId }\n\n        val (existingTracks, newTracks) = backupTracks\n            .mapNotNull {\n                val track = it.getTrackImpl()\n                val dbTrack = dbTrackByTrackerId[track.trackerId]\n                    ?: // New track\n                    return@mapNotNull track.copy(\n                        id = 0, // Let DB assign new ID\n                        mangaId = manga.id,\n                    )\n\n                if (track.forComparison() == dbTrack.forComparison()) {\n                    // Same state; skip\n                    return@mapNotNull null\n                }\n\n                // Update to an existing track\n                dbTrack.copy(\n                    remoteId = track.remoteId,\n                    libraryId = track.libraryId,\n                    lastChapterRead = max(dbTrack.lastChapterRead, track.lastChapterRead),\n                )\n            }\n            .partition { it.id > 0 }\n\n        if (newTracks.isNotEmpty()) {\n            insertTrack.awaitAll(newTracks)\n        }\n        if (existingTracks.isNotEmpty()) {\n            handler.await(true) {\n                existingTracks.forEach { track ->\n                    manga_syncQueries.update(\n                        track.mangaId,\n                        track.trackerId,\n                        track.remoteId,\n                        track.libraryId,\n                        track.title,\n                        track.lastChapterRead,\n                        track.totalChapters,\n                        track.status,\n                        track.score,\n                        track.remoteUrl,\n                        track.startDate,\n                        track.finishDate,\n                        track.private,\n                        track.id,\n                    )\n                }\n            }\n        }\n    }\n\n    private fun MangaTrack.forComparison() = this.copy(id = 0L, mangaId = 0L)\n\n    /**\n     * Restores the excluded scanlators for the manga.\n     *\n     * @param manga the manga whose excluded scanlators have to be restored.\n     * @param excludedScanlators the excluded scanlators to restore.\n     */\n    private suspend fun restoreExcludedScanlators(manga: Manga, excludedScanlators: List<String>) {\n        if (excludedScanlators.isEmpty()) return\n        val existingExcludedScanlators = handler.awaitList {\n            excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(manga.id)\n        }\n        val toInsert = excludedScanlators.filter { it !in existingExcludedScanlators }\n        if (toInsert.isNotEmpty()) {\n            handler.await {\n                toInsert.forEach {\n                    excluded_scanlatorsQueries.insert(manga.id, it)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/PreferenceRestorer.kt",
    "content": "package eu.kanade.tachiyomi.data.backup.restore.restorers\n\nimport android.content.Context\nimport android.util.Log\nimport eu.kanade.tachiyomi.data.backup.create.BackupCreateJob\nimport eu.kanade.tachiyomi.data.backup.models.BackupCategory\nimport eu.kanade.tachiyomi.data.backup.models.BackupPreference\nimport eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences\nimport eu.kanade.tachiyomi.data.backup.models.BooleanPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.FloatPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.IntPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.LongPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.StringPreferenceValue\nimport eu.kanade.tachiyomi.data.backup.models.StringSetPreferenceValue\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport eu.kanade.tachiyomi.source.sourcePreferences\nimport tachiyomi.core.common.preference.AndroidPreferenceStore\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.plusAssign\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass PreferenceRestorer(\n    private val context: Context,\n    private val getMangaCategories: GetMangaCategories = Injekt.get(),\n    private val getAnimeCategories: GetAnimeCategories = Injekt.get(),\n    private val preferenceStore: PreferenceStore = Injekt.get(),\n) {\n    suspend fun restoreApp(\n        preferences: List<BackupPreference>,\n        backupCategories: List<BackupCategory>?,\n    ) {\n        restorePreferences(\n            preferences,\n            preferenceStore,\n            backupCategories,\n        )\n\n        AnimeLibraryUpdateJob.setupTask(context)\n        MangaLibraryUpdateJob.setupTask(context)\n        BackupCreateJob.setupTask(context)\n    }\n\n    suspend fun restoreSource(preferences: List<BackupSourcePreferences>) {\n        preferences.forEach {\n            val sourcePrefs = AndroidPreferenceStore(context, sourcePreferences(it.sourceKey))\n            restorePreferences(it.prefs, sourcePrefs)\n        }\n    }\n\n    private suspend fun restorePreferences(\n        toRestore: List<BackupPreference>,\n        preferenceStore: PreferenceStore,\n        backupCategories: List<BackupCategory>? = null,\n    ) {\n        val allMangaCategories = if (backupCategories != null) getMangaCategories.await() else emptyList()\n        val allAnimeCategories = if (backupCategories != null) getAnimeCategories.await() else emptyList()\n\n        val mangaCategoriesByName = allMangaCategories.associateBy { it.name }\n        val animeCategoriesByName = allAnimeCategories.associateBy { it.name }\n        val backupCategoriesById = backupCategories?.associateBy { it.id.toString() }.orEmpty()\n\n        val prefs = preferenceStore.getAll()\n        toRestore.forEach { (key, value) ->\n            try {\n                when (value) {\n                    is IntPreferenceValue -> {\n                        if (prefs[key] is Int?) {\n                            val newValue = if (key == LibraryPreferences.DEFAULT_MANGA_CATEGORY_PREF_KEY) {\n                                backupCategoriesById[value.value.toString()]\n                                    ?.let { mangaCategoriesByName[it.name]?.id?.toInt() }\n                            } else if (key == LibraryPreferences.DEFAULT_ANIME_CATEGORY_PREF_KEY) {\n                                backupCategoriesById[value.value.toString()]\n                                    ?.let { animeCategoriesByName[it.name]?.id?.toInt() }\n                            } else {\n                                value.value\n                            }\n\n                            newValue?.let { preferenceStore.getInt(key).set(it) }\n                        }\n                    }\n                    is LongPreferenceValue -> {\n                        if (prefs[key] is Long?) {\n                            preferenceStore.getLong(key).set(value.value)\n                        }\n                    }\n                    is FloatPreferenceValue -> {\n                        if (prefs[key] is Float?) {\n                            preferenceStore.getFloat(key).set(value.value)\n                        }\n                    }\n                    is StringPreferenceValue -> {\n                        if (prefs[key] is String?) {\n                            preferenceStore.getString(key).set(value.value)\n                        }\n                    }\n                    is BooleanPreferenceValue -> {\n                        if (prefs[key] is Boolean?) {\n                            preferenceStore.getBoolean(key).set(value.value)\n                        }\n                    }\n                    is StringSetPreferenceValue -> {\n                        if (prefs[key] is Set<*>?) {\n                            val restored = restoreCategoriesPreference(\n                                key,\n                                value.value,\n                                preferenceStore,\n                                backupCategoriesById,\n                                mangaCategoriesByName,\n                                animeCategoriesByName,\n                            )\n                            if (!restored) preferenceStore.getStringSet(key).set(value.value)\n                        }\n                    }\n                }\n            } catch (e: Exception) {\n                Log.e(\"PreferenceRestorer\", \"Failed to restore preference <$key>\", e)\n            }\n        }\n    }\n\n    private fun restoreCategoriesPreference(\n        key: String,\n        value: Set<String>,\n        preferenceStore: PreferenceStore,\n        backupCategoriesById: Map<String, BackupCategory>,\n        mangaCategoriesByName: Map<String, Category>,\n        animeCategoriesByName: Map<String, Category>,\n    ): Boolean {\n        val categoryPreferences = LibraryPreferences.categoryPreferenceKeys + DownloadPreferences.categoryPreferenceKeys\n        if (key !in categoryPreferences) return false\n\n        val ids = value.flatMap {\n            listOf(\n                backupCategoriesById[it]?.name?.let { name ->\n                    mangaCategoriesByName[name]?.id?.toString()\n                },\n                backupCategoriesById[it]?.name?.let { name ->\n                    animeCategoriesByName[name]?.id?.toString()\n                },\n            )\n        }.filterNotNull()\n\n        if (ids.isNotEmpty()) {\n            preferenceStore.getStringSet(key) += ids\n        }\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/cache/AnimeBackgroundCache.kt",
    "content": "package eu.kanade.tachiyomi.data.cache\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.domain.entries.anime.model.Anime\nimport java.io.File\nimport java.io.IOException\nimport java.io.InputStream\n\n/**\n * Class used to create background cache.\n * It is used to store the background of the library.\n * Names of files are created with the md5 of the background URL.\n *\n * @param context the application context.\n * @constructor creates an instance of the background cache.\n */\nclass AnimeBackgroundCache(private val context: Context) {\n\n    companion object {\n        private const val BACKGROUNDS_DIR = \"animebackgrounds\"\n        private const val CUSTOM_BACKGROUNDS_DIR = \"animebackgrounds/custom\"\n    }\n\n    /**\n     * Cache directory used for cache management.\n     */\n    private val cacheDir = getCacheDir(BACKGROUNDS_DIR)\n\n    private val customBackgroundCacheDir = getCacheDir(CUSTOM_BACKGROUNDS_DIR)\n\n    /**\n     * Returns the background from cache.\n     *\n     * @param animeBackgroundUrl the anime.\n     * @return background image.\n     */\n    fun getBackgroundFile(animeBackgroundUrl: String?): File? {\n        return animeBackgroundUrl?.let {\n            File(cacheDir, DiskUtil.hashKeyForDisk(it))\n        }\n    }\n\n    /**\n     * Returns the custom background from cache.\n     *\n     * @param animeId the anime id.\n     * @return background image.\n     */\n    fun getCustomBackgroundFile(animeId: Long?): File {\n        return File(customBackgroundCacheDir, DiskUtil.hashKeyForDisk(animeId.toString()))\n    }\n\n    /**\n     * Saves the given stream as the anime's custom background to cache.\n     *\n     * @param anime the anime.\n     * @param inputStream the stream to copy.\n     * @throws IOException if there's any error.\n     */\n    @Throws(IOException::class)\n    fun setCustomBackgroundToCache(anime: Anime, inputStream: InputStream) {\n        getCustomBackgroundFile(anime.id).outputStream().use {\n            inputStream.copyTo(it)\n        }\n    }\n\n    /**\n     * Delete the background files of the anime from the cache.\n     *\n     * @param anime the anime.\n     * @param deleteCustomBackground whether the custom background should be deleted.\n     * @return number of files that were deleted.\n     */\n    fun deleteFromCache(anime: Anime, deleteCustomBackground: Boolean = false): Int {\n        var deleted = 0\n\n        getBackgroundFile(anime.backgroundUrl)?.let {\n            if (it.exists() && it.delete()) ++deleted\n        }\n\n        if (deleteCustomBackground) {\n            if (deleteCustomBackground(anime.id)) ++deleted\n        }\n\n        return deleted\n    }\n\n    /**\n     * Delete custom background of the anime from the cache\n     *\n     * @param animeId the anime id.\n     * @return whether the background was deleted.\n     */\n    fun deleteCustomBackground(animeId: Long?): Boolean {\n        return getCustomBackgroundFile(animeId).let {\n            it.exists() && it.delete()\n        }\n    }\n\n    private fun getCacheDir(dir: String): File {\n        return context.getExternalFilesDir(dir)\n            ?: File(context.filesDir, dir).also { it.mkdirs() }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/cache/AnimeCoverCache.kt",
    "content": "package eu.kanade.tachiyomi.data.cache\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.domain.entries.anime.model.Anime\nimport java.io.File\nimport java.io.IOException\nimport java.io.InputStream\n\n/**\n * Class used to create cover cache.\n * It is used to store the covers of the library.\n * Names of files are created with the md5 of the thumbnail URL.\n *\n * @param context the application context.\n * @constructor creates an instance of the cover cache.\n */\nclass AnimeCoverCache(private val context: Context) {\n\n    companion object {\n        private const val COVERS_DIR = \"animecovers\"\n        private const val CUSTOM_COVERS_DIR = \"animecovers/custom\"\n    }\n\n    /**\n     * Cache directory used for cache management.\n     */\n    private val cacheDir = getCacheDir(COVERS_DIR)\n\n    private val customCoverCacheDir = getCacheDir(CUSTOM_COVERS_DIR)\n\n    /**\n     * Returns the cover from cache.\n     *\n     * @param animeThumbnailUrl the anime.\n     * @return cover image.\n     */\n    fun getCoverFile(animeThumbnailUrl: String?): File? {\n        return animeThumbnailUrl?.let {\n            File(cacheDir, DiskUtil.hashKeyForDisk(it))\n        }\n    }\n\n    /**\n     * Returns the custom cover from cache.\n     *\n     * @param animeId the anime id.\n     * @return cover image.\n     */\n    fun getCustomCoverFile(animeId: Long?): File {\n        return File(customCoverCacheDir, DiskUtil.hashKeyForDisk(animeId.toString()))\n    }\n\n    /**\n     * Saves the given stream as the anime's custom cover to cache.\n     *\n     * @param anime the anime.\n     * @param inputStream the stream to copy.\n     * @throws IOException if there's any error.\n     */\n    @Throws(IOException::class)\n    fun setCustomCoverToCache(anime: Anime, inputStream: InputStream) {\n        getCustomCoverFile(anime.id).outputStream().use {\n            inputStream.copyTo(it)\n        }\n    }\n\n    /**\n     * Delete the cover files of the anime from the cache.\n     *\n     * @param anime the anime.\n     * @param deleteCustomCover whether the custom cover should be deleted.\n     * @return number of files that were deleted.\n     */\n    fun deleteFromCache(anime: Anime, deleteCustomCover: Boolean = false): Int {\n        var deleted = 0\n\n        getCoverFile(anime.thumbnailUrl)?.let {\n            if (it.exists() && it.delete()) ++deleted\n        }\n\n        if (deleteCustomCover) {\n            if (deleteCustomCover(anime.id)) ++deleted\n        }\n\n        return deleted\n    }\n\n    /**\n     * Delete custom cover of the anime from the cache\n     *\n     * @param animeId the anime id.\n     * @return whether the cover was deleted.\n     */\n    fun deleteCustomCover(animeId: Long?): Boolean {\n        return getCustomCoverFile(animeId).let {\n            it.exists() && it.delete()\n        }\n    }\n\n    private fun getCacheDir(dir: String): File {\n        return context.getExternalFilesDir(dir)\n            ?: File(context.filesDir, dir).also { it.mkdirs() }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt",
    "content": "package eu.kanade.tachiyomi.data.cache\n\nimport android.content.Context\nimport android.text.format.Formatter\nimport com.jakewharton.disklrucache.DiskLruCache\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.storage.saveTo\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport okhttp3.Response\nimport okio.buffer\nimport okio.sink\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport java.io.File\nimport java.io.IOException\n\n/**\n * Class used to create chapter cache\n * For each image in a chapter a file is created\n * For each chapter a Json list is created and converted to a file.\n * The files are in format *md5key*.0\n *\n * @param context the application context.\n * @constructor creates an instance of the chapter cache.\n */\nclass ChapterCache(\n    private val context: Context,\n    private val json: Json,\n) {\n\n    /** Cache class used for cache management. */\n    private val diskCache = DiskLruCache.open(\n        File(context.cacheDir, \"chapter_disk_cache\"),\n        PARAMETER_APP_VERSION,\n        PARAMETER_VALUE_COUNT,\n        PARAMETER_CACHE_SIZE,\n    )\n\n    /**\n     * Returns directory of cache.\n     */\n    private val cacheDir: File = diskCache.directory\n\n    /**\n     * Returns real size of directory.\n     */\n    private val realSize: Long\n        get() = DiskUtil.getDirectorySize(cacheDir)\n\n    /**\n     * Returns real size of directory in human readable format.\n     */\n    val readableSize: String\n        get() = Formatter.formatFileSize(context, realSize)\n\n    /**\n     * Get page list from cache.\n     *\n     * @param chapter the chapter.\n     * @return the list of pages.\n     */\n    fun getPageListFromCache(chapter: Chapter): List<Page> {\n        // Get the key for the chapter.\n        val key = DiskUtil.hashKeyForDisk(getKey(chapter))\n\n        // Convert JSON string to list of objects. Throws an exception if snapshot is null\n        return diskCache.get(key).use {\n            json.decodeFromString(it.getString(0))\n        }\n    }\n\n    /**\n     * Add page list to disk cache.\n     *\n     * @param chapter the chapter.\n     * @param pages list of pages.\n     */\n    fun putPageListToCache(chapter: Chapter, pages: List<Page>) {\n        // Convert list of pages to json string.\n        val cachedValue = json.encodeToString(pages)\n\n        // Initialize the editor (edits the values for an entry).\n        var editor: DiskLruCache.Editor? = null\n\n        try {\n            // Get editor from md5 key.\n            val key = DiskUtil.hashKeyForDisk(getKey(chapter))\n            editor = diskCache.edit(key) ?: return\n\n            // Write chapter urls to cache.\n            editor.newOutputStream(0).sink().buffer().use {\n                it.write(cachedValue.toByteArray())\n                it.flush()\n            }\n\n            diskCache.flush()\n            editor.commit()\n            editor.abortUnlessCommitted()\n        } catch (e: Exception) {\n            logcat(LogPriority.WARN, e) { \"Failed to put page list to cache\" }\n            // Ignore.\n        } finally {\n            editor?.abortUnlessCommitted()\n        }\n    }\n\n    /**\n     * Returns true if image is in cache.\n     *\n     * @param imageUrl url of image.\n     * @return true if in cache otherwise false.\n     */\n    fun isImageInCache(imageUrl: String): Boolean {\n        return try {\n            diskCache.get(DiskUtil.hashKeyForDisk(imageUrl)).use { it != null }\n        } catch (e: IOException) {\n            false\n        }\n    }\n\n    /**\n     * Get image file from url.\n     *\n     * @param imageUrl url of image.\n     * @return path of image.\n     */\n    fun getImageFile(imageUrl: String): File {\n        // Get file from md5 key.\n        val imageName = DiskUtil.hashKeyForDisk(imageUrl) + \".0\"\n        return File(diskCache.directory, imageName)\n    }\n\n    /**\n     * Add image to cache.\n     *\n     * @param imageUrl url of image.\n     * @param response http response from page.\n     * @throws IOException image error.\n     */\n    @Throws(IOException::class)\n    fun putImageToCache(imageUrl: String, response: Response) {\n        // Initialize editor (edits the values for an entry).\n        var editor: DiskLruCache.Editor? = null\n\n        try {\n            // Get editor from md5 key.\n            val key = DiskUtil.hashKeyForDisk(imageUrl)\n            editor = diskCache.edit(key) ?: throw IOException(\"Unable to edit key\")\n\n            // Get OutputStream and write image with Okio.\n            response.body.source().saveTo(editor.newOutputStream(0))\n\n            diskCache.flush()\n            editor.commit()\n        } finally {\n            response.body.close()\n            editor?.abortUnlessCommitted()\n        }\n    }\n\n    fun clear(): Int {\n        var deletedFiles = 0\n        cacheDir.listFiles()?.forEach {\n            if (removeFileFromCache(it.name)) {\n                deletedFiles++\n            }\n        }\n        return deletedFiles\n    }\n\n    /**\n     * Remove file from cache.\n     *\n     * @param file name of file \"md5.0\".\n     * @return status of deletion for the file.\n     */\n    private fun removeFileFromCache(file: String): Boolean {\n        // Make sure we don't delete the journal file (keeps track of cache)\n        if (file == \"journal\" || file.startsWith(\"journal.\")) {\n            return false\n        }\n\n        return try {\n            // Remove the extension from the file to get the key of the cache\n            val key = file.substringBeforeLast(\".\")\n            // Remove file from cache\n            diskCache.remove(key)\n        } catch (e: Exception) {\n            logcat(LogPriority.WARN, e) { \"Failed to remove file from cache\" }\n            false\n        }\n    }\n\n    private fun getKey(chapter: Chapter): String {\n        return \"${chapter.mangaId}${chapter.url}\"\n    }\n}\n\n/** Application cache version.  */\nprivate const val PARAMETER_APP_VERSION = 1\n\n/** The number of values per cache entry. Must be positive.  */\nprivate const val PARAMETER_VALUE_COUNT = 1\n\n/** The maximum number of bytes this cache should use to store.  */\nprivate const val PARAMETER_CACHE_SIZE = 100L * 1024 * 1024\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/cache/MangaCoverCache.kt",
    "content": "package eu.kanade.tachiyomi.data.cache\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.domain.entries.manga.model.Manga\nimport java.io.File\nimport java.io.IOException\nimport java.io.InputStream\n\n/**\n * Class used to create cover cache.\n * It is used to store the covers of the library.\n * Names of files are created with the md5 of the thumbnail URL.\n *\n * @param context the application context.\n * @constructor creates an instance of the cover cache.\n */\nclass MangaCoverCache(private val context: Context) {\n\n    companion object {\n        private const val COVERS_DIR = \"covers\"\n        private const val CUSTOM_COVERS_DIR = \"covers/custom\"\n    }\n\n    /**\n     * Cache directory used for cache management.\n     */\n    private val cacheDir = getCacheDir(COVERS_DIR)\n\n    private val customCoverCacheDir = getCacheDir(CUSTOM_COVERS_DIR)\n\n    /**\n     * Returns the cover from cache.\n     *\n     * @param mangaThumbnailUrl thumbnail url for the manga.\n     * @return cover image.\n     */\n    fun getCoverFile(mangaThumbnailUrl: String?): File? {\n        return mangaThumbnailUrl?.let {\n            File(cacheDir, DiskUtil.hashKeyForDisk(it))\n        }\n    }\n\n    /**\n     * Returns the custom cover from cache.\n     *\n     * @param mangaId the manga id.\n     * @return cover image.\n     */\n    fun getCustomCoverFile(mangaId: Long?): File {\n        return File(customCoverCacheDir, DiskUtil.hashKeyForDisk(mangaId.toString()))\n    }\n\n    /**\n     * Saves the given stream as the manga's custom cover to cache.\n     *\n     * @param manga the manga.\n     * @param inputStream the stream to copy.\n     * @throws IOException if there's any error.\n     */\n    @Throws(IOException::class)\n    fun setCustomCoverToCache(manga: Manga, inputStream: InputStream) {\n        getCustomCoverFile(manga.id).outputStream().use {\n            inputStream.copyTo(it)\n        }\n    }\n\n    /**\n     * Delete the cover files of the manga from the cache.\n     *\n     * @param manga the manga.\n     * @param deleteCustomCover whether the custom cover should be deleted.\n     * @return number of files that were deleted.\n     */\n    fun deleteFromCache(manga: Manga, deleteCustomCover: Boolean = false): Int {\n        var deleted = 0\n\n        getCoverFile(manga.thumbnailUrl)?.let {\n            if (it.exists() && it.delete()) ++deleted\n        }\n\n        if (deleteCustomCover) {\n            if (deleteCustomCover(manga.id)) ++deleted\n        }\n\n        return deleted\n    }\n\n    /**\n     * Delete custom cover of the manga from the cache\n     *\n     * @param mangaId the manga id.\n     * @return whether the cover was deleted.\n     */\n    fun deleteCustomCover(mangaId: Long?): Boolean {\n        return getCustomCoverFile(mangaId).let {\n            it.exists() && it.delete()\n        }\n    }\n\n    private fun getCacheDir(dir: String): File {\n        return context.getExternalFilesDir(dir)\n            ?: File(context.filesDir, dir).also { it.mkdirs() }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/AnimeCoverKeyer.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport coil3.key.Keyer\nimport coil3.request.Options\nimport eu.kanade.domain.entries.anime.model.hasCustomBackground\nimport eu.kanade.domain.entries.anime.model.hasCustomCover\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport tachiyomi.domain.entries.anime.model.Anime as DomainAnime\n\nclass AnimeKeyer : Keyer<DomainAnime> {\n    override fun key(data: DomainAnime, options: Options): String {\n        return when {\n            options.useBackground && data.hasCustomBackground() -> \"anime;${data.id};${data.backgroundLastModified}\"\n            options.useBackground -> \"anime;${data.backgroundUrl};${data.backgroundLastModified}\"\n            data.hasCustomCover() -> \"anime;${data.id};${data.coverLastModified}\"\n            else -> \"anime;${data.thumbnailUrl};${data.coverLastModified}\"\n        }\n    }\n}\n\nclass AnimeCoverKeyer(\n    private val coverCache: AnimeCoverCache = Injekt.get(),\n) : Keyer<AnimeCover> {\n    override fun key(data: AnimeCover, options: Options): String {\n        return if (coverCache.getCustomCoverFile(data.animeId).exists()) {\n            \"anime;${data.animeId};${data.lastModified}\"\n        } else {\n            \"anime;${data.url};${data.lastModified}\"\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/AnimeImageFetcher.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport androidx.core.net.toUri\nimport coil3.Extras\nimport coil3.ImageLoader\nimport coil3.decode.DataSource\nimport coil3.decode.ImageSource\nimport coil3.disk.DiskCache\nimport coil3.fetch.FetchResult\nimport coil3.fetch.Fetcher\nimport coil3.fetch.SourceFetchResult\nimport coil3.getOrDefault\nimport coil3.request.Options\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.coil.AnimeImageFetcher.Companion.USE_CUSTOM_COVER_KEY\nimport eu.kanade.tachiyomi.network.await\nimport logcat.LogPriority\nimport okhttp3.CacheControl\nimport okhttp3.Call\nimport okhttp3.Request\nimport okhttp3.Response\nimport okio.FileSystem\nimport okio.Path.Companion.toOkioPath\nimport okio.Source\nimport okio.buffer\nimport okio.sink\nimport okio.source\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\nimport java.io.IOException\n\n/**\n * A [Fetcher] that fetches cover image for [Anime] object.\n *\n * It uses [Anime.thumbnailUrl] if custom cover is not set by the user.\n * Disk caching for library items is handled by [AnimeCoverCache], otherwise\n * handled by Coil's [DiskCache].\n *\n * Available request parameter:\n * - [USE_CUSTOM_COVER_KEY]: Use custom cover if set by user, default is true\n */\nclass AnimeImageFetcher(\n    private val url: String?,\n    private val isLibraryAnime: Boolean,\n    private val options: Options,\n    private val coverFileLazy: Lazy<File?>,\n    private val customCoverFileLazy: Lazy<File>,\n    private val diskCacheKeyLazy: Lazy<String>,\n    private val sourceLazy: Lazy<AnimeHttpSource?>,\n    private val callFactoryLazy: Lazy<Call.Factory>,\n    private val imageLoader: ImageLoader,\n) : Fetcher {\n\n    private val diskCacheKey: String\n        get() = diskCacheKeyLazy.value\n\n    override suspend fun fetch(): FetchResult {\n        // Use custom cover if exists\n        val useCustomCover = options.extras.getOrDefault(USE_CUSTOM_COVER_KEY)\n        if (useCustomCover) {\n            val customCoverFile = customCoverFileLazy.value\n            if (customCoverFile.exists()) {\n                return fileLoader(customCoverFile)\n            }\n        }\n\n        // diskCacheKey is thumbnail_url\n        if (url == null) error(\"No cover specified\")\n        return when (getResourceType(url)) {\n            Type.URL -> httpLoader()\n            Type.File -> fileLoader(File(url.substringAfter(\"file://\")))\n            Type.URI -> uniFileLoader(url)\n            null -> error(\"Invalid image\")\n        }\n    }\n\n    private fun uniFileLoader(urlString: String): FetchResult {\n        val uniFile = UniFile.fromUri(options.context, urlString.toUri())!!\n        val tempFile = uniFile.openInputStream().source().buffer()\n        return SourceFetchResult(\n            source = ImageSource(source = tempFile, fileSystem = FileSystem.SYSTEM),\n            mimeType = \"image/*\",\n            dataSource = DataSource.DISK,\n        )\n    }\n\n    private fun fileLoader(file: File): FetchResult {\n        return SourceFetchResult(\n            source = ImageSource(\n                file = file.toOkioPath(),\n                fileSystem = FileSystem.SYSTEM,\n                diskCacheKey = diskCacheKey,\n            ),\n            mimeType = \"image/*\",\n            dataSource = DataSource.DISK,\n        )\n    }\n\n    private suspend fun httpLoader(): FetchResult {\n        // Only cache separately if it's a library item\n        val libraryCoverCacheFile = if (isLibraryAnime) {\n            coverFileLazy.value ?: error(\"No cover specified\")\n        } else {\n            null\n        }\n        if (libraryCoverCacheFile?.exists() == true && options.diskCachePolicy.readEnabled) {\n            return fileLoader(libraryCoverCacheFile)\n        }\n\n        var snapshot = readFromDiskCache()\n        try {\n            // Fetch from disk cache\n            if (snapshot != null) {\n                val snapshotCoverCache = moveSnapshotToCoverCache(snapshot, libraryCoverCacheFile)\n                if (snapshotCoverCache != null) {\n                    // Read from cover cache after added to library\n                    return fileLoader(snapshotCoverCache)\n                }\n\n                // Read from snapshot\n                return SourceFetchResult(\n                    source = snapshot.toImageSource(),\n                    mimeType = \"image/*\",\n                    dataSource = DataSource.DISK,\n                )\n            }\n\n            // Fetch from network\n            val response = executeNetworkRequest()\n            val responseBody = checkNotNull(response.body) { \"Null response source\" }\n            try {\n                // Read from cover cache after library manga cover updated\n                val responseCoverCache = writeResponseToCoverCache(response, libraryCoverCacheFile)\n                if (responseCoverCache != null) {\n                    return fileLoader(responseCoverCache)\n                }\n\n                // Read from disk cache\n                snapshot = writeToDiskCache(response)\n                if (snapshot != null) {\n                    return SourceFetchResult(\n                        source = snapshot.toImageSource(),\n                        mimeType = \"image/*\",\n                        dataSource = DataSource.NETWORK,\n                    )\n                }\n\n                // Read from response if cache is unused or unusable\n                return SourceFetchResult(\n                    source = ImageSource(source = responseBody.source(), fileSystem = FileSystem.SYSTEM),\n                    mimeType = \"image/*\",\n                    dataSource = if (response.cacheResponse != null) DataSource.DISK else DataSource.NETWORK,\n                )\n            } catch (e: Exception) {\n                responseBody.close()\n                throw e\n            }\n        } catch (e: Exception) {\n            snapshot?.close()\n            throw e\n        }\n    }\n\n    private suspend fun executeNetworkRequest(): Response {\n        val client = sourceLazy.value?.client ?: callFactoryLazy.value\n        val response = client.newCall(newRequest()).await()\n        if (!response.isSuccessful && response.code != HTTP_NOT_MODIFIED) {\n            response.close()\n            throw IOException(response.message)\n        }\n        return response\n    }\n\n    private fun newRequest(): Request {\n        val request = Request.Builder().apply {\n            url(url!!)\n\n            val sourceHeaders = sourceLazy.value?.headers\n            if (sourceHeaders != null) {\n                headers(sourceHeaders)\n            }\n        }\n\n        when {\n            options.networkCachePolicy.readEnabled -> {\n                // don't take up okhttp cache\n                request.cacheControl(CACHE_CONTROL_NO_STORE)\n            }\n            else -> {\n                // This causes the request to fail with a 504 Unsatisfiable Request.\n                request.cacheControl(CACHE_CONTROL_NO_NETWORK_NO_CACHE)\n            }\n        }\n\n        return request.build()\n    }\n\n    private fun moveSnapshotToCoverCache(snapshot: DiskCache.Snapshot, cacheFile: File?): File? {\n        if (cacheFile == null) return null\n        return try {\n            imageLoader.diskCache?.run {\n                fileSystem.source(snapshot.data).use { input ->\n                    writeSourceToCoverCache(input, cacheFile)\n                }\n                remove(diskCacheKey)\n            }\n            cacheFile.takeIf { it.exists() }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to write snapshot data to cover cache ${cacheFile.name}\" }\n            null\n        }\n    }\n\n    private fun writeResponseToCoverCache(response: Response, cacheFile: File?): File? {\n        if (cacheFile == null || !options.diskCachePolicy.writeEnabled) return null\n        return try {\n            response.peekBody(Long.MAX_VALUE).source().use { input ->\n                writeSourceToCoverCache(input, cacheFile)\n            }\n            cacheFile.takeIf { it.exists() }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to write response data to cover cache ${cacheFile.name}\" }\n            null\n        }\n    }\n\n    private fun writeSourceToCoverCache(input: Source, cacheFile: File) {\n        cacheFile.parentFile?.mkdirs()\n        cacheFile.delete()\n        try {\n            cacheFile.sink().buffer().use { output ->\n                output.writeAll(input)\n            }\n        } catch (e: Exception) {\n            cacheFile.delete()\n            throw e\n        }\n    }\n\n    private fun readFromDiskCache(): DiskCache.Snapshot? {\n        return if (options.diskCachePolicy.readEnabled) {\n            imageLoader.diskCache?.openSnapshot(diskCacheKey)\n        } else {\n            null\n        }\n    }\n\n    private fun writeToDiskCache(\n        response: Response,\n    ): DiskCache.Snapshot? {\n        val diskCache = imageLoader.diskCache\n        val editor = diskCache?.openEditor(diskCacheKey) ?: return null\n        try {\n            diskCache.fileSystem.write(editor.data) {\n                response.body.source().readAll(this)\n            }\n            return editor.commitAndOpenSnapshot()\n        } catch (e: Exception) {\n            try {\n                editor.abort()\n            } catch (ignored: Exception) {\n            }\n            throw e\n        }\n    }\n\n    private fun DiskCache.Snapshot.toImageSource(): ImageSource {\n        return ImageSource(\n            file = data,\n            fileSystem = FileSystem.SYSTEM,\n            diskCacheKey = diskCacheKey,\n            closeable = this,\n        )\n    }\n\n    private fun getResourceType(cover: String?): Type? {\n        return when {\n            cover.isNullOrEmpty() -> null\n            cover.startsWith(\"http\", true) || cover.startsWith(\"Custom-\", true) -> Type.URL\n            cover.startsWith(\"/\") || cover.startsWith(\"file://\") -> Type.File\n            cover.startsWith(\"content\") -> Type.URI\n            else -> null\n        }\n    }\n\n    private enum class Type {\n        File,\n        URL,\n        URI,\n    }\n\n    class AnimeFactory(\n        private val callFactoryLazy: Lazy<Call.Factory>,\n    ) : Fetcher.Factory<Anime> {\n\n        private val coverCache: AnimeCoverCache by injectLazy()\n        private val backgroundCache: AnimeBackgroundCache by injectLazy()\n        private val sourceManager: AnimeSourceManager by injectLazy()\n\n        override fun create(data: Anime, options: Options, imageLoader: ImageLoader): Fetcher {\n            val isBackground = options.useBackground\n            val url = if (isBackground) data.backgroundUrl else data.thumbnailUrl\n\n            val coverCacheLazy = if (isBackground) {\n                lazy { backgroundCache.getBackgroundFile(url) }\n            } else {\n                lazy { coverCache.getCoverFile(url) }\n            }\n\n            val customCoverCacheLazy = if (isBackground) {\n                lazy { backgroundCache.getCustomBackgroundFile(data.id) }\n            } else {\n                lazy { coverCache.getCustomCoverFile(data.id) }\n            }\n\n            return AnimeImageFetcher(\n                url = url,\n                isLibraryAnime = data.favorite,\n                options = options,\n                coverFileLazy = coverCacheLazy,\n                customCoverFileLazy = customCoverCacheLazy,\n                diskCacheKeyLazy = lazy { imageLoader.components.key(data, options)!! },\n                sourceLazy = lazy { sourceManager.get(data.source) as? AnimeHttpSource },\n                callFactoryLazy = callFactoryLazy,\n                imageLoader = imageLoader,\n            )\n        }\n    }\n\n    class AnimeCoverFactory(\n        private val callFactoryLazy: Lazy<Call.Factory>,\n    ) : Fetcher.Factory<AnimeCover> {\n\n        private val coverCache: AnimeCoverCache by injectLazy()\n        private val sourceManager: AnimeSourceManager by injectLazy()\n\n        override fun create(data: AnimeCover, options: Options, imageLoader: ImageLoader): Fetcher {\n            return AnimeImageFetcher(\n                url = data.url,\n                isLibraryAnime = data.isAnimeFavorite,\n                options = options,\n                coverFileLazy = lazy { coverCache.getCoverFile(data.url) },\n                customCoverFileLazy = lazy { coverCache.getCustomCoverFile(data.animeId) },\n                diskCacheKeyLazy = lazy { imageLoader.components.key(data, options)!! },\n                sourceLazy = lazy { sourceManager.get(data.sourceId) as? AnimeHttpSource },\n                callFactoryLazy = callFactoryLazy,\n                imageLoader = imageLoader,\n            )\n        }\n    }\n\n    companion object {\n        val USE_CUSTOM_COVER_KEY = Extras.Key(true)\n\n        private val CACHE_CONTROL_NO_STORE = CacheControl.Builder().noStore().build()\n        private val CACHE_CONTROL_NO_NETWORK_NO_CACHE = CacheControl.Builder().noCache().onlyIfCached().build()\n\n        private const val HTTP_NOT_MODIFIED = 304\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/BufferedSourceFetcher.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport coil3.ImageLoader\nimport coil3.decode.DataSource\nimport coil3.decode.ImageSource\nimport coil3.fetch.FetchResult\nimport coil3.fetch.Fetcher\nimport coil3.fetch.SourceFetchResult\nimport coil3.request.Options\nimport okio.BufferedSource\n\nclass BufferedSourceFetcher(\n    private val data: BufferedSource,\n    private val options: Options,\n) : Fetcher {\n\n    override suspend fun fetch(): FetchResult {\n        return SourceFetchResult(\n            source = ImageSource(\n                source = data,\n                fileSystem = options.fileSystem,\n            ),\n            mimeType = null,\n            dataSource = DataSource.MEMORY,\n        )\n    }\n\n    class Factory : Fetcher.Factory<BufferedSource> {\n\n        override fun create(\n            data: BufferedSource,\n            options: Options,\n            imageLoader: ImageLoader,\n        ): Fetcher {\n            return BufferedSourceFetcher(data, options)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverFetcher.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport androidx.core.net.toUri\nimport coil3.Extras\nimport coil3.ImageLoader\nimport coil3.decode.DataSource\nimport coil3.decode.ImageSource\nimport coil3.disk.DiskCache\nimport coil3.fetch.FetchResult\nimport coil3.fetch.Fetcher\nimport coil3.fetch.SourceFetchResult\nimport coil3.getOrDefault\nimport coil3.request.Options\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.coil.MangaCoverFetcher.Companion.USE_CUSTOM_COVER_KEY\nimport eu.kanade.tachiyomi.network.await\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport logcat.LogPriority\nimport okhttp3.CacheControl\nimport okhttp3.Call\nimport okhttp3.Request\nimport okhttp3.Response\nimport okio.FileSystem\nimport okio.Path.Companion.toOkioPath\nimport okio.Source\nimport okio.buffer\nimport okio.sink\nimport okio.source\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\nimport java.io.IOException\n\n/**\n * A [Fetcher] that fetches cover image for [Manga] object.\n *\n * It uses [Manga.thumbnailUrl] if custom cover is not set by the user.\n * Disk caching for library items is handled by [MangaCoverCache], otherwise\n * handled by Coil's [DiskCache].\n *\n * Available request parameter:\n * - [USE_CUSTOM_COVER_KEY]: Use custom cover if set by user, default is true\n */\nclass MangaCoverFetcher(\n    private val url: String?,\n    private val isLibraryManga: Boolean,\n    private val options: Options,\n    private val coverFileLazy: Lazy<File?>,\n    private val customCoverFileLazy: Lazy<File>,\n    private val diskCacheKeyLazy: Lazy<String>,\n    private val sourceLazy: Lazy<HttpSource?>,\n    private val callFactoryLazy: Lazy<Call.Factory>,\n    private val imageLoader: ImageLoader,\n) : Fetcher {\n\n    private val diskCacheKey: String\n        get() = diskCacheKeyLazy.value\n\n    override suspend fun fetch(): FetchResult {\n        // Use custom cover if exists\n        val useCustomCover = options.extras.getOrDefault(USE_CUSTOM_COVER_KEY)\n        if (useCustomCover) {\n            val customCoverFile = customCoverFileLazy.value\n            if (customCoverFile.exists()) {\n                return fileLoader(customCoverFile)\n            }\n        }\n\n        // diskCacheKey is thumbnail_url\n        if (url == null) error(\"No cover specified\")\n        return when (getResourceType(url)) {\n            Type.URL -> httpLoader()\n            Type.File -> fileLoader(File(url.substringAfter(\"file://\")))\n            Type.URI -> uniFileLoader(url)\n            null -> error(\"Invalid image\")\n        }\n    }\n\n    private fun uniFileLoader(urlString: String): FetchResult {\n        val uniFile = UniFile.fromUri(options.context, urlString.toUri())!!\n        val tempFile = uniFile.openInputStream().source().buffer()\n        return SourceFetchResult(\n            source = ImageSource(source = tempFile, fileSystem = FileSystem.SYSTEM),\n            mimeType = \"image/*\",\n            dataSource = DataSource.DISK,\n        )\n    }\n\n    private fun fileLoader(file: File): FetchResult {\n        return SourceFetchResult(\n            source = ImageSource(\n                file = file.toOkioPath(),\n                fileSystem = FileSystem.SYSTEM,\n                diskCacheKey = diskCacheKey,\n            ),\n            mimeType = \"image/*\",\n            dataSource = DataSource.DISK,\n        )\n    }\n\n    private suspend fun httpLoader(): FetchResult {\n        // Only cache separately if it's a library item\n        val libraryCoverCacheFile = if (isLibraryManga) {\n            coverFileLazy.value ?: error(\"No cover specified\")\n        } else {\n            null\n        }\n        if (libraryCoverCacheFile?.exists() == true && options.diskCachePolicy.readEnabled) {\n            return fileLoader(libraryCoverCacheFile)\n        }\n\n        var snapshot = readFromDiskCache()\n        try {\n            // Fetch from disk cache\n            if (snapshot != null) {\n                val snapshotCoverCache = moveSnapshotToCoverCache(snapshot, libraryCoverCacheFile)\n                if (snapshotCoverCache != null) {\n                    // Read from cover cache after added to library\n                    return fileLoader(snapshotCoverCache)\n                }\n\n                // Read from snapshot\n                return SourceFetchResult(\n                    source = snapshot.toImageSource(),\n                    mimeType = \"image/*\",\n                    dataSource = DataSource.DISK,\n                )\n            }\n\n            // Fetch from network\n            val response = executeNetworkRequest()\n            val responseBody = checkNotNull(response.body) { \"Null response source\" }\n            try {\n                // Read from cover cache after library manga cover updated\n                val responseCoverCache = writeResponseToCoverCache(response, libraryCoverCacheFile)\n                if (responseCoverCache != null) {\n                    return fileLoader(responseCoverCache)\n                }\n\n                // Read from disk cache\n                snapshot = writeToDiskCache(response)\n                if (snapshot != null) {\n                    return SourceFetchResult(\n                        source = snapshot.toImageSource(),\n                        mimeType = \"image/*\",\n                        dataSource = DataSource.NETWORK,\n                    )\n                }\n\n                // Read from response if cache is unused or unusable\n                return SourceFetchResult(\n                    source = ImageSource(source = responseBody.source(), fileSystem = FileSystem.SYSTEM),\n                    mimeType = \"image/*\",\n                    dataSource = if (response.cacheResponse != null) DataSource.DISK else DataSource.NETWORK,\n                )\n            } catch (e: Exception) {\n                responseBody.close()\n                throw e\n            }\n        } catch (e: Exception) {\n            snapshot?.close()\n            throw e\n        }\n    }\n\n    private suspend fun executeNetworkRequest(): Response {\n        val client = sourceLazy.value?.client ?: callFactoryLazy.value\n        val response = client.newCall(newRequest()).await()\n        if (!response.isSuccessful && response.code != HTTP_NOT_MODIFIED) {\n            response.close()\n            throw IOException(response.message)\n        }\n        return response\n    }\n\n    private fun newRequest(): Request {\n        val request = Request.Builder().apply {\n            url(url!!)\n\n            val sourceHeaders = sourceLazy.value?.headers\n            if (sourceHeaders != null) {\n                headers(sourceHeaders)\n            }\n        }\n\n        when {\n            options.networkCachePolicy.readEnabled -> {\n                // don't take up okhttp cache\n                request.cacheControl(CACHE_CONTROL_NO_STORE)\n            }\n            else -> {\n                // This causes the request to fail with a 504 Unsatisfiable Request.\n                request.cacheControl(CACHE_CONTROL_NO_NETWORK_NO_CACHE)\n            }\n        }\n\n        return request.build()\n    }\n\n    private fun moveSnapshotToCoverCache(snapshot: DiskCache.Snapshot, cacheFile: File?): File? {\n        if (cacheFile == null) return null\n        return try {\n            imageLoader.diskCache?.run {\n                fileSystem.source(snapshot.data).use { input ->\n                    writeSourceToCoverCache(input, cacheFile)\n                }\n                remove(diskCacheKey)\n            }\n            cacheFile.takeIf { it.exists() }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to write snapshot data to cover cache ${cacheFile.name}\" }\n            null\n        }\n    }\n\n    private fun writeResponseToCoverCache(response: Response, cacheFile: File?): File? {\n        if (cacheFile == null || !options.diskCachePolicy.writeEnabled) return null\n        return try {\n            response.peekBody(Long.MAX_VALUE).source().use { input ->\n                writeSourceToCoverCache(input, cacheFile)\n            }\n            cacheFile.takeIf { it.exists() }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to write response data to cover cache ${cacheFile.name}\" }\n            null\n        }\n    }\n\n    private fun writeSourceToCoverCache(input: Source, cacheFile: File) {\n        cacheFile.parentFile?.mkdirs()\n        cacheFile.delete()\n        try {\n            cacheFile.sink().buffer().use { output ->\n                output.writeAll(input)\n            }\n        } catch (e: Exception) {\n            cacheFile.delete()\n            throw e\n        }\n    }\n\n    private fun readFromDiskCache(): DiskCache.Snapshot? {\n        return if (options.diskCachePolicy.readEnabled) {\n            imageLoader.diskCache?.openSnapshot(diskCacheKey)\n        } else {\n            null\n        }\n    }\n\n    private fun writeToDiskCache(\n        response: Response,\n    ): DiskCache.Snapshot? {\n        val diskCache = imageLoader.diskCache\n        val editor = diskCache?.openEditor(diskCacheKey) ?: return null\n        try {\n            diskCache.fileSystem.write(editor.data) {\n                response.body.source().readAll(this)\n            }\n            return editor.commitAndOpenSnapshot()\n        } catch (e: Exception) {\n            try {\n                editor.abort()\n            } catch (ignored: Exception) {\n            }\n            throw e\n        }\n    }\n\n    private fun DiskCache.Snapshot.toImageSource(): ImageSource {\n        return ImageSource(\n            file = data,\n            fileSystem = FileSystem.SYSTEM,\n            diskCacheKey = diskCacheKey,\n            closeable = this,\n        )\n    }\n\n    private fun getResourceType(cover: String?): Type? {\n        return when {\n            cover.isNullOrEmpty() -> null\n            cover.startsWith(\"http\", true) || cover.startsWith(\"Custom-\", true) -> Type.URL\n            cover.startsWith(\"/\") || cover.startsWith(\"file://\") -> Type.File\n            cover.startsWith(\"content\") -> Type.URI\n            else -> null\n        }\n    }\n\n    private enum class Type {\n        File,\n        URL,\n        URI,\n    }\n\n    class MangaFactory(\n        private val callFactoryLazy: Lazy<Call.Factory>,\n    ) : Fetcher.Factory<Manga> {\n\n        private val coverCache: MangaCoverCache by injectLazy()\n        private val sourceManager: MangaSourceManager by injectLazy()\n\n        override fun create(data: Manga, options: Options, imageLoader: ImageLoader): Fetcher {\n            return MangaCoverFetcher(\n                url = data.thumbnailUrl,\n                isLibraryManga = data.favorite,\n                options = options,\n                coverFileLazy = lazy { coverCache.getCoverFile(data.thumbnailUrl) },\n                customCoverFileLazy = lazy { coverCache.getCustomCoverFile(data.id) },\n                diskCacheKeyLazy = lazy { imageLoader.components.key(data, options)!! },\n                sourceLazy = lazy { sourceManager.get(data.source) as? HttpSource },\n                callFactoryLazy = callFactoryLazy,\n                imageLoader = imageLoader,\n            )\n        }\n    }\n\n    class MangaCoverFactory(\n        private val callFactoryLazy: Lazy<Call.Factory>,\n    ) : Fetcher.Factory<MangaCover> {\n\n        private val coverCache: MangaCoverCache by injectLazy()\n        private val sourceManager: MangaSourceManager by injectLazy()\n\n        override fun create(data: MangaCover, options: Options, imageLoader: ImageLoader): Fetcher {\n            return MangaCoverFetcher(\n                url = data.url,\n                isLibraryManga = data.isMangaFavorite,\n                options = options,\n                coverFileLazy = lazy { coverCache.getCoverFile(data.url) },\n                customCoverFileLazy = lazy { coverCache.getCustomCoverFile(data.mangaId) },\n                diskCacheKeyLazy = lazy { imageLoader.components.key(data, options)!! },\n                sourceLazy = lazy { sourceManager.get(data.sourceId) as? HttpSource },\n                callFactoryLazy = callFactoryLazy,\n                imageLoader = imageLoader,\n            )\n        }\n    }\n\n    companion object {\n        val USE_CUSTOM_COVER_KEY = Extras.Key(true)\n\n        private val CACHE_CONTROL_NO_STORE = CacheControl.Builder().noStore().build()\n        private val CACHE_CONTROL_NO_NETWORK_NO_CACHE = CacheControl.Builder().noCache().onlyIfCached().build()\n\n        private const val HTTP_NOT_MODIFIED = 304\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverKeyer.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport coil3.key.Keyer\nimport coil3.request.Options\nimport eu.kanade.domain.entries.manga.model.hasCustomCover\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport tachiyomi.domain.entries.manga.model.Manga as DomainManga\n\nclass MangaKeyer : Keyer<DomainManga> {\n    override fun key(data: DomainManga, options: Options): String {\n        return if (data.hasCustomCover()) {\n            \"manga;${data.id};${data.coverLastModified}\"\n        } else {\n            \"manga;${data.thumbnailUrl};${data.coverLastModified}\"\n        }\n    }\n}\n\nclass MangaCoverKeyer(\n    private val coverCache: MangaCoverCache = Injekt.get(),\n) : Keyer<MangaCover> {\n    override fun key(data: MangaCover, options: Options): String {\n        return if (coverCache.getCustomCoverFile(data.mangaId).exists()) {\n            \"manga;${data.mangaId};${data.lastModified}\"\n        } else {\n            \"manga;${data.url};${data.lastModified}\"\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport android.graphics.Bitmap\nimport coil3.ImageLoader\nimport coil3.asImage\nimport coil3.decode.DecodeResult\nimport coil3.decode.DecodeUtils\nimport coil3.decode.Decoder\nimport coil3.decode.ImageSource\nimport coil3.fetch.SourceFetchResult\nimport coil3.request.Options\nimport coil3.request.bitmapConfig\nimport okio.BufferedSource\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.decoder.ImageDecoder\n\n/**\n * A [Decoder] that uses built-in [ImageDecoder] to decode images that is not supported by the system.\n */\nclass TachiyomiImageDecoder(private val resources: ImageSource, private val options: Options) : Decoder {\n\n    override suspend fun decode(): DecodeResult {\n        val decoder = resources.sourceOrNull()?.use {\n            ImageDecoder.newInstance(it.inputStream(), options.cropBorders, displayProfile)\n        }\n\n        check(decoder != null && decoder.width > 0 && decoder.height > 0) { \"Failed to initialize decoder\" }\n\n        val srcWidth = decoder.width\n        val srcHeight = decoder.height\n\n        val dstWidth = options.size.widthPx(options.scale) { srcWidth }\n        val dstHeight = options.size.heightPx(options.scale) { srcHeight }\n\n        val sampleSize = DecodeUtils.calculateInSampleSize(\n            srcWidth = srcWidth,\n            srcHeight = srcHeight,\n            dstWidth = dstWidth,\n            dstHeight = dstHeight,\n            scale = options.scale,\n        )\n\n        var bitmap = decoder.decode(sampleSize = sampleSize)\n        decoder.recycle()\n\n        check(bitmap != null) { \"Failed to decode image\" }\n\n        if (options.bitmapConfig == Bitmap.Config.HARDWARE && ImageUtil.canUseHardwareBitmap(bitmap)) {\n            val hwBitmap = bitmap.copy(Bitmap.Config.HARDWARE, false)\n            if (hwBitmap != null) {\n                bitmap.recycle()\n                bitmap = hwBitmap\n            }\n        }\n\n        return DecodeResult(\n            image = bitmap.asImage(),\n            isSampled = sampleSize > 1,\n        )\n    }\n\n    class Factory : Decoder.Factory {\n\n        override fun create(result: SourceFetchResult, options: Options, imageLoader: ImageLoader): Decoder? {\n            return if (options.customDecoder || isApplicable(result.source.source())) {\n                TachiyomiImageDecoder(result.source, options)\n            } else {\n                null\n            }\n        }\n\n        private fun isApplicable(source: BufferedSource): Boolean {\n            val type = source.peek().inputStream().use {\n                ImageUtil.findImageType(it)\n            }\n            return when (type) {\n                ImageUtil.ImageType.AVIF, ImageUtil.ImageType.JXL, ImageUtil.ImageType.HEIF -> true\n                else -> false\n            }\n        }\n\n        override fun equals(other: Any?) = other is Factory\n\n        override fun hashCode() = javaClass.hashCode()\n    }\n\n    companion object {\n        var displayProfile: ByteArray? = null\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/coil/Utils.kt",
    "content": "package eu.kanade.tachiyomi.data.coil\n\nimport coil3.Extras\nimport coil3.getExtra\nimport coil3.request.ImageRequest\nimport coil3.request.Options\nimport coil3.size.Dimension\nimport coil3.size.Scale\nimport coil3.size.Size\nimport coil3.size.isOriginal\nimport coil3.size.pxOrElse\n\ninternal inline fun Size.widthPx(scale: Scale, original: () -> Int): Int {\n    return if (isOriginal) original() else width.toPx(scale)\n}\n\ninternal inline fun Size.heightPx(scale: Scale, original: () -> Int): Int {\n    return if (isOriginal) original() else height.toPx(scale)\n}\n\ninternal fun Dimension.toPx(scale: Scale): Int = pxOrElse {\n    when (scale) {\n        Scale.FILL -> Int.MIN_VALUE\n        Scale.FIT -> Int.MAX_VALUE\n    }\n}\n\nfun ImageRequest.Builder.cropBorders(enable: Boolean) = apply {\n    extras[cropBordersKey] = enable\n}\n\nval Options.cropBorders: Boolean\n    get() = getExtra(cropBordersKey)\n\nprivate val cropBordersKey = Extras.Key(default = false)\n\nfun ImageRequest.Builder.customDecoder(enable: Boolean) = apply {\n    extras[customDecoderKey] = enable\n}\n\nval Options.customDecoder: Boolean\n    get() = getExtra(customDecoderKey)\n\nprivate val customDecoderKey = Extras.Key(default = false)\n\nfun ImageRequest.Builder.useBackground(enable: Boolean) = apply {\n    extras[useBackgroundKey] = enable\n}\n\nval Options.useBackground: Boolean\n    get() = getExtra(useBackgroundKey)\n\nprivate val useBackgroundKey = Extras.Key(default = false)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/anime/AnimeTrack.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.anime\n\nimport java.io.Serializable\n\ninterface AnimeTrack : Serializable {\n\n    var id: Long?\n\n    var anime_id: Long\n\n    var tracker_id: Long\n\n    var remote_id: Long\n\n    var library_id: Long?\n\n    var title: String\n\n    var last_episode_seen: Double\n\n    var total_episodes: Long\n\n    var score: Double\n\n    var status: Long\n\n    var started_watching_date: Long\n\n    var finished_watching_date: Long\n\n    var tracking_url: String\n\n    var private: Boolean\n\n    fun copyPersonalFrom(other: AnimeTrack, copyRemotePrivate: Boolean = true) {\n        last_episode_seen = other.last_episode_seen\n        score = other.score\n        status = other.status\n        started_watching_date = other.started_watching_date\n        finished_watching_date = other.finished_watching_date\n        if (copyRemotePrivate) private = other.private\n    }\n\n    companion object {\n        fun create(serviceId: Long): AnimeTrack = AnimeTrackImpl().apply {\n            tracker_id = serviceId\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/anime/AnimeTrackImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.anime\n\nclass AnimeTrackImpl : AnimeTrack {\n\n    override var id: Long? = null\n\n    override var anime_id: Long = 0\n\n    override var tracker_id: Long = 0\n\n    override var remote_id: Long = 0\n\n    override var library_id: Long? = null\n\n    override lateinit var title: String\n\n    override var last_episode_seen: Double = 0.0\n\n    override var total_episodes: Long = 0\n\n    override var score: Double = 0.0\n\n    override var status: Long = 0\n\n    override var started_watching_date: Long = 0\n\n    override var finished_watching_date: Long = 0\n\n    override var tracking_url: String = \"\"\n\n    override var private: Boolean = false\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/anime/Episode.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.anime\n\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport java.io.Serializable\nimport tachiyomi.domain.items.episode.model.Episode as DomainEpisode\n\ninterface Episode : SEpisode, Serializable {\n\n    var id: Long?\n\n    var anime_id: Long?\n\n    var seen: Boolean\n\n    var bookmark: Boolean\n\n    var last_second_seen: Long\n\n    var total_seconds: Long\n\n    var date_fetch: Long\n\n    var source_order: Int\n\n    var last_modified: Long\n\n    var version: Long\n}\n\nval Episode.isRecognizedNumber: Boolean\n    get() = episode_number >= 0f\n\nfun Episode.toDomainEpisode(): DomainEpisode? {\n    if (id == null || anime_id == null) return null\n    return DomainEpisode(\n        id = id!!,\n        animeId = anime_id!!,\n        seen = seen,\n        bookmark = bookmark,\n        fillermark = fillermark,\n        lastSecondSeen = last_second_seen,\n        totalSeconds = total_seconds,\n        dateFetch = date_fetch,\n        sourceOrder = source_order.toLong(),\n        url = url,\n        name = name,\n        dateUpload = date_upload,\n        episodeNumber = episode_number.toDouble(),\n        scanlator = scanlator,\n        summary = summary,\n        previewUrl = preview_url,\n        lastModifiedAt = last_modified,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/anime/EpisodeImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.anime\n\nclass EpisodeImpl : Episode {\n\n    override var id: Long? = null\n\n    override var anime_id: Long? = null\n\n    override lateinit var url: String\n\n    override lateinit var name: String\n\n    override var scanlator: String? = null\n\n    override var summary: String? = null\n\n    override var preview_url: String? = null\n\n    override var seen: Boolean = false\n\n    override var bookmark: Boolean = false\n\n    override var fillermark: Boolean = false\n\n    override var last_second_seen: Long = 0\n\n    override var total_seconds: Long = 0\n\n    override var date_fetch: Long = 0\n\n    override var date_upload: Long = 0\n\n    override var episode_number: Float = 0f\n\n    override var source_order: Int = 0\n\n    override var last_modified: Long = 0\n\n    override var version: Long = 0\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other == null || javaClass != other.javaClass) return false\n\n        val episode = other as Episode\n        if (url != episode.url) return false\n        return id == episode.id\n    }\n\n    override fun hashCode(): Int {\n        return url.hashCode() + id.hashCode()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/manga/Chapter.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.manga\n\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport java.io.Serializable\nimport tachiyomi.domain.items.chapter.model.Chapter as DomainChapter\n\ninterface Chapter : SChapter, Serializable {\n\n    var id: Long?\n\n    var manga_id: Long?\n\n    var read: Boolean\n\n    var bookmark: Boolean\n\n    var last_page_read: Int\n\n    var date_fetch: Long\n\n    var source_order: Int\n\n    var last_modified: Long\n\n    var version: Long\n}\n\nval Chapter.isRecognizedNumber: Boolean\n    get() = chapter_number >= 0f\n\nfun Chapter.toDomainChapter(): DomainChapter? {\n    if (id == null || manga_id == null) return null\n    return DomainChapter(\n        id = id!!,\n        mangaId = manga_id!!,\n        read = read,\n        bookmark = bookmark,\n        lastPageRead = last_page_read.toLong(),\n        dateFetch = date_fetch,\n        sourceOrder = source_order.toLong(),\n        url = url,\n        name = name,\n        dateUpload = date_upload,\n        chapterNumber = chapter_number.toDouble(),\n        scanlator = scanlator,\n        lastModifiedAt = last_modified,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/manga/ChapterImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.manga\n\nclass ChapterImpl : Chapter {\n\n    override var id: Long? = null\n\n    override var manga_id: Long? = null\n\n    override lateinit var url: String\n\n    override lateinit var name: String\n\n    override var scanlator: String? = null\n\n    override var read: Boolean = false\n\n    override var bookmark: Boolean = false\n\n    override var last_page_read: Int = 0\n\n    override var date_fetch: Long = 0\n\n    override var date_upload: Long = 0\n\n    override var chapter_number: Float = 0f\n\n    override var source_order: Int = 0\n\n    override var last_modified: Long = 0\n\n    override var version: Long = 0\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other == null || javaClass != other.javaClass) return false\n\n        val chapter = other as Chapter\n        if (url != chapter.url) return false\n        return id == chapter.id\n    }\n\n    override fun hashCode(): Int {\n        return url.hashCode() + id.hashCode()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/manga/MangaTrack.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.manga\n\nimport java.io.Serializable\n\ninterface MangaTrack : Serializable {\n\n    var id: Long?\n\n    var manga_id: Long\n\n    var tracker_id: Long\n\n    var remote_id: Long\n\n    var library_id: Long?\n\n    var title: String\n\n    var last_chapter_read: Double\n\n    var total_chapters: Long\n\n    var score: Double\n\n    var status: Long\n\n    var started_reading_date: Long\n\n    var finished_reading_date: Long\n\n    var tracking_url: String\n\n    var private: Boolean\n\n    fun copyPersonalFrom(other: MangaTrack, copyRemotePrivate: Boolean = true) {\n        last_chapter_read = other.last_chapter_read\n        score = other.score\n        status = other.status\n        started_reading_date = other.started_reading_date\n        finished_reading_date = other.finished_reading_date\n        if (copyRemotePrivate) private = other.private\n    }\n\n    companion object {\n        fun create(serviceId: Long): MangaTrack = MangaTrackImpl().apply {\n            tracker_id = serviceId\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/database/models/manga/MangaTrackImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.database.models.manga\n\nclass MangaTrackImpl : MangaTrack {\n\n    override var id: Long? = null\n\n    override var manga_id: Long = 0\n\n    override var tracker_id: Long = 0\n\n    override var remote_id: Long = 0\n\n    override var library_id: Long? = null\n\n    override lateinit var title: String\n\n    override var last_chapter_read: Double = 0.0\n\n    override var total_chapters: Long = 0\n\n    override var score: Double = 0.0\n\n    override var status: Long = 0\n\n    override var started_reading_date: Long = 0\n\n    override var finished_reading_date: Long = 0\n\n    override var tracking_url: String = \"\"\n\n    override var private: Boolean = false\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadCache.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.app.Application\nimport android.content.Context\nimport androidx.core.net.toUri\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.util.size\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.shareIn\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport kotlinx.coroutines.withTimeoutOrNull\nimport kotlinx.serialization.KSerializer\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.decodeFromByteArray\nimport kotlinx.serialization.descriptors.PrimitiveKind\nimport kotlinx.serialization.descriptors.PrimitiveSerialDescriptor\nimport kotlinx.serialization.descriptors.SerialDescriptor\nimport kotlinx.serialization.encodeToByteArray\nimport kotlinx.serialization.encoding.Decoder\nimport kotlinx.serialization.encoding.Encoder\nimport kotlinx.serialization.protobuf.ProtoBuf\nimport logcat.LogPriority\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.storage.service.StorageManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport kotlin.time.Duration.Companion.hours\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * Cache where we dump the downloads directory from the filesystem. This class is needed because\n * directory checking is expensive and it slows downs the app. The cache is invalidated by the time\n * defined in [renewInterval] as we don't have any control over the filesystem and the user can\n * delete the folders at any time without the app noticing.\n */\nclass AnimeDownloadCache(\n    private val context: Context,\n    private val provider: AnimeDownloadProvider = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val extensionManager: AnimeExtensionManager = Injekt.get(),\n    private val storageManager: StorageManager = Injekt.get(),\n) {\n\n    private val scope = CoroutineScope(Dispatchers.IO)\n\n    private val _changes: Channel<Unit> = Channel(Channel.UNLIMITED)\n    val changes = _changes.receiveAsFlow()\n        .onStart { emit(Unit) }\n        .shareIn(scope, SharingStarted.Lazily, 1)\n\n    /**\n     * The interval after which this cache should be invalidated. 1 hour shouldn't cause major\n     * issues, as the cache is only used for UI feedback.\n     */\n    private val renewInterval = 1.hours.inWholeMilliseconds\n\n    /**\n     * The last time the cache was refreshed.\n     */\n    private var lastRenew = 0L\n    private var renewalJob: Job? = null\n\n    private val _isInitializing = MutableStateFlow(false)\n    val isInitializing = _isInitializing\n        .debounce(1000L) // Don't notify if it finishes quickly enough\n        .stateIn(scope, SharingStarted.WhileSubscribed(), false)\n\n    private val diskCacheFile: File\n        get() = File(context.cacheDir, \"dl_anime_index_cache_v3\")\n\n    private val rootDownloadsDirMutex = Mutex()\n    private var rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory())\n\n    init {\n        // Attempt to read cache file\n        scope.launch {\n            rootDownloadsDirMutex.withLock {\n                try {\n                    if (diskCacheFile.exists()) {\n                        val diskCache = diskCacheFile.inputStream().use {\n                            ProtoBuf.decodeFromByteArray<RootDirectory>(it.readBytes())\n                        }\n                        rootDownloadsDir = diskCache\n                        lastRenew = System.currentTimeMillis()\n                    }\n                } catch (e: Throwable) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to initialize disk cache\" }\n                    diskCacheFile.delete()\n                }\n            }\n        }\n\n        storageManager.changes\n            .onEach { invalidateCache() }\n            .launchIn(scope)\n    }\n\n    /**\n     * Returns true if the episode is downloaded.\n     *\n     * @param episodeName the name of the episode to query.\n     * @param episodeScanlator scanlator of the episode to query\n     * @param animeTitle the title of the anime to query.\n     * @param sourceId the id of the source of the episode.\n     */\n    fun isEpisodeDownloaded(\n        episodeName: String,\n        episodeScanlator: String?,\n        animeTitle: String,\n        sourceId: Long,\n        skipCache: Boolean,\n    ): Boolean {\n        if (skipCache) {\n            val source = sourceManager.getOrStub(sourceId)\n            return provider.findEpisodeDir(episodeName, episodeScanlator, animeTitle, source) != null\n        }\n\n        renewCache()\n\n        val sourceDir = rootDownloadsDir.sourceDirs[sourceId]\n        if (sourceDir != null) {\n            val animeDir = sourceDir.animeDirs[provider.getAnimeDirName(animeTitle)]\n            if (animeDir != null) {\n                return provider.getValidEpisodeDirNames(\n                    episodeName,\n                    episodeScanlator,\n                ).any { it in animeDir.episodeDirs }\n            }\n        }\n        return false\n    }\n\n    /**\n     * Returns the amount of downloaded episodes.\n     */\n    fun getTotalDownloadCount(): Int {\n        renewCache()\n\n        return rootDownloadsDir.sourceDirs.values.sumOf { sourceDir ->\n            sourceDir.animeDirs.values.sumOf { animeDir ->\n                animeDir.episodeDirs.size\n            }\n        }\n    }\n\n    /**\n     * Returns the amount of downloaded episodes for an anime.\n     *\n     * @param anime the anime to check.\n     */\n    fun getDownloadCount(anime: Anime): Int {\n        renewCache()\n\n        val sourceDir = rootDownloadsDir.sourceDirs[anime.source]\n        if (sourceDir != null) {\n            val animeDir = sourceDir.animeDirs[provider.getAnimeDirName(anime.title)]\n            if (animeDir != null) {\n                return animeDir.episodeDirs.size\n            }\n        }\n        return 0\n    }\n\n    /**\n     * Returns the total size of downloaded episodes.\n     */\n    fun getTotalDownloadSize(): Long {\n        renewCache()\n\n        return rootDownloadsDir.sourceDirs.values.sumOf { sourceDir ->\n            sourceDir.dir?.size() ?: 0L\n        }\n    }\n\n    /**\n     * Returns the total size of downloaded chapters for an anime.\n     *\n     * @param anime the anime to check.\n     */\n    fun getDownloadSize(anime: Anime): Long {\n        renewCache()\n\n        return rootDownloadsDir.sourceDirs[anime.source]?.animeDirs?.get(\n            provider.getAnimeDirName(\n                anime.title,\n            ),\n        )?.dir?.size() ?: 0\n    }\n\n    /**\n     * Adds an episode that has just been download to this cache.\n     *\n     * @param episodeDirName the downloaded episode's directory name.\n     * @param animeUniFile the directory of the anime.\n     * @param anime the anime of the episode.\n     */\n    suspend fun addEpisode(episodeDirName: String, animeUniFile: UniFile, anime: Anime) {\n        rootDownloadsDirMutex.withLock {\n            // Retrieve the cached source directory or cache a new one\n            var sourceDir = rootDownloadsDir.sourceDirs[anime.source]\n            if (sourceDir == null) {\n                val source = sourceManager.get(anime.source) ?: return\n                val sourceUniFile = provider.findSourceDir(source) ?: return\n                sourceDir = SourceDirectory(sourceUniFile)\n                rootDownloadsDir.sourceDirs += anime.source to sourceDir\n            }\n\n            // Retrieve the cached anime directory or cache a new one\n            val animeDirName = provider.getAnimeDirName(anime.title)\n            var animeDir = sourceDir.animeDirs[animeDirName]\n            if (animeDir == null) {\n                animeDir = AnimeDirectory(animeUniFile)\n                sourceDir.animeDirs += animeDirName to animeDir\n            }\n\n            // Save the chapter directory\n            animeDir.episodeDirs += episodeDirName\n        }\n\n        notifyChanges()\n    }\n\n    /**\n     * Removes an episode that has been deleted from this cache.\n     *\n     * @param episode the episode to remove.\n     * @param anime the anime of the episode.\n     */\n    suspend fun removeEpisode(episode: Episode, anime: Anime) {\n        rootDownloadsDirMutex.withLock {\n            val sourceDir = rootDownloadsDir.sourceDirs[anime.source] ?: return\n            val animeDir = sourceDir.animeDirs[provider.getAnimeDirName(anime.title)] ?: return\n            provider.getValidEpisodeDirNames(episode.name, episode.scanlator).forEach {\n                if (it in animeDir.episodeDirs) {\n                    animeDir.episodeDirs -= it\n                }\n            }\n        }\n\n        notifyChanges()\n    }\n\n    /**\n     * Removes a list of episodes that have been deleted from this cache.\n     *\n     * @param episodes the list of episode to remove.\n     * @param anime the anime of the episode.\n     */\n    suspend fun removeEpisodes(episodes: List<Episode>, anime: Anime) {\n        rootDownloadsDirMutex.withLock {\n            val sourceDir = rootDownloadsDir.sourceDirs[anime.source] ?: return\n            val animeDir = sourceDir.animeDirs[provider.getAnimeDirName(anime.title)] ?: return\n            episodes.forEach { episode ->\n                provider.getValidEpisodeDirNames(episode.name, episode.scanlator).forEach {\n                    if (it in animeDir.episodeDirs) {\n                        animeDir.episodeDirs -= it\n                    }\n                }\n            }\n        }\n\n        notifyChanges()\n    }\n\n    /**\n     * Removes an anime that has been deleted from this cache.\n     *\n     * @param anime the anime to remove.\n     */\n    suspend fun removeAnime(anime: Anime) {\n        rootDownloadsDirMutex.withLock {\n            val sourceDir = rootDownloadsDir.sourceDirs[anime.source] ?: return\n            val animeDirName = provider.getAnimeDirName(anime.title)\n            if (sourceDir.animeDirs.containsKey(animeDirName)) {\n                sourceDir.animeDirs -= animeDirName\n            }\n        }\n\n        notifyChanges()\n    }\n\n    suspend fun removeSource(source: AnimeSource) {\n        rootDownloadsDirMutex.withLock {\n            rootDownloadsDir.sourceDirs -= source.id\n        }\n\n        notifyChanges()\n    }\n\n    fun invalidateCache() {\n        lastRenew = 0L\n        renewalJob?.cancel()\n        diskCacheFile.delete()\n        renewCache()\n    }\n\n    /**\n     * Renews the downloads cache.\n     */\n    private fun renewCache() {\n        // Avoid renewing cache if in the process nor too often\n        if (lastRenew + renewInterval >= System.currentTimeMillis() || renewalJob?.isActive == true) {\n            return\n        }\n\n        renewalJob = scope.launchIO {\n            if (lastRenew == 0L) {\n                _isInitializing.emit(true)\n            }\n\n            // Try to wait until extensions and sources have loaded\n            var sources = emptyList<AnimeSource>()\n            withTimeoutOrNull(30.seconds) {\n                extensionManager.isInitialized.first { it }\n                sourceManager.isInitialized.first { it }\n\n                sources = getSources()\n            }\n\n            val sourceMap = sources.associate {\n                provider.getSourceDirName(it).lowercase() to it.id\n            }\n\n            rootDownloadsDirMutex.withLock {\n                val updatedRootDir = RootDirectory(storageManager.getDownloadsDirectory())\n\n                updatedRootDir.sourceDirs = updatedRootDir.dir?.listFiles().orEmpty()\n                    .filter { it.isDirectory && !it.name.isNullOrBlank() }\n                    .mapNotNull { dir ->\n                        val sourceId = sourceMap[dir.name!!.lowercase()]\n                        sourceId?.let { it to SourceDirectory(dir) }\n                    }\n                    .toMap()\n\n                updatedRootDir.sourceDirs.values.map { sourceDir ->\n                    async {\n                        sourceDir.animeDirs = sourceDir.dir?.listFiles().orEmpty()\n                            .filter { it.isDirectory && !it.name.isNullOrBlank() }\n                            .associate { it.name!! to AnimeDirectory(it) }\n                        sourceDir.animeDirs.values.forEach { animeDir ->\n                            val episodeDirs = animeDir.dir?.listFiles().orEmpty()\n                                .mapNotNull {\n                                    when {\n                                        // Ignore incomplete downloads\n                                        it.name?.endsWith(AnimeDownloader.TMP_DIR_SUFFIX) == true -> null\n                                        // Folder of videos\n                                        it.isDirectory -> it.name\n                                        // MP4 files\n                                        it.isFile && it.extension == \"mp4\" -> it.nameWithoutExtension\n                                        // MKV files\n                                        it.isFile && it.extension == \"mkv\" -> it.nameWithoutExtension\n                                        // Anything else is irrelevant\n                                        else -> null\n                                    }\n                                }\n                                .toMutableSet()\n\n                            animeDir.episodeDirs = episodeDirs\n                        }\n                    }\n                }\n                    .awaitAll()\n\n                rootDownloadsDir = updatedRootDir\n            }\n\n            _isInitializing.emit(false)\n        }.also {\n            it.invokeOnCompletion(onCancelling = true) { exception ->\n                if (exception != null && exception !is CancellationException) {\n                    logcat(LogPriority.ERROR, exception) { \"Failed to create download cache\" }\n                }\n                lastRenew = System.currentTimeMillis()\n                notifyChanges()\n            }\n        }\n\n        // Mainly to notify the indexing notifier UI\n        notifyChanges()\n    }\n\n    private fun getSources(): List<AnimeSource> {\n        return sourceManager.getOnlineSources() + sourceManager.getStubSources()\n    }\n\n    private fun notifyChanges() {\n        scope.launchNonCancellable {\n            _changes.send(Unit)\n        }\n        updateDiskCache()\n    }\n\n    private var updateDiskCacheJob: Job? = null\n\n    private fun updateDiskCache() {\n        updateDiskCacheJob?.cancel()\n        updateDiskCacheJob = scope.launchIO {\n            delay(1000)\n            ensureActive()\n            val bytes = ProtoBuf.encodeToByteArray(rootDownloadsDir)\n            ensureActive()\n            try {\n                diskCacheFile.writeBytes(bytes)\n            } catch (e: Throwable) {\n                logcat(\n                    priority = LogPriority.ERROR,\n                    throwable = e,\n                    message = { \"Failed to write disk cache file\" },\n                )\n            }\n        }\n    }\n}\n\n/**\n * Class to store the files under the root downloads directory.\n */\n@Serializable\nprivate class RootDirectory(\n    @Serializable(with = UniFileAsStringSerializer::class)\n    val dir: UniFile?,\n    var sourceDirs: Map<Long, SourceDirectory> = mapOf(),\n)\n\n/**\n * Class to store the files under a source directory.\n */\n@Serializable\nprivate class SourceDirectory(\n    @Serializable(with = UniFileAsStringSerializer::class)\n    val dir: UniFile?,\n    var animeDirs: Map<String, AnimeDirectory> = mapOf(),\n)\n\n/**\n * Class to store the files under a manga directory.\n */\n@Serializable\nprivate class AnimeDirectory(\n    @Serializable(with = UniFileAsStringSerializer::class)\n    val dir: UniFile?,\n    var episodeDirs: MutableSet<String> = mutableSetOf(),\n)\n\nprivate object UniFileAsStringSerializer : KSerializer<UniFile?> {\n    override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(\"UniFile\", PrimitiveKind.STRING)\n\n    override fun serialize(encoder: Encoder, value: UniFile?) {\n        return if (value == null) {\n            encoder.encodeNull()\n        } else {\n            encoder.encodeString(value.uri.toString())\n        }\n    }\n\n    override fun deserialize(decoder: Decoder): UniFile? {\n        return if (decoder.decodeNotNullMark()) {\n            UniFile.fromUri(Injekt.get<Application>(), decoder.decodeString().toUri())\n        } else {\n            decoder.decodeNull()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadJob.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.os.Build\nimport androidx.lifecycle.asFlow\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkInfo\nimport androidx.work.WorkManager\nimport androidx.work.WorkerParameters\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.NetworkState\nimport eu.kanade.tachiyomi.util.system.activeNetworkState\nimport eu.kanade.tachiyomi.util.system.networkStateFlow\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.setForegroundSafely\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combineTransform\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onEach\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This worker is used to manage the downloader. The system can decide to stop the worker, in\n * which case the downloader is also stopped. It's also stopped while there's no network available.\n */\nclass AnimeDownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) {\n\n    private val downloadManager: AnimeDownloadManager = Injekt.get()\n    private val downloadPreferences: DownloadPreferences = Injekt.get()\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        val notification = applicationContext.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {\n            setContentTitle(applicationContext.getString(R.string.download_notifier_downloader_title))\n            setSmallIcon(android.R.drawable.stat_sys_download)\n        }.build()\n        return ForegroundInfo(\n            Notifications.ID_DOWNLOAD_EPISODE_PROGRESS,\n            notification,\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    override suspend fun doWork(): Result {\n        var networkCheck = checkNetworkState(\n            applicationContext.activeNetworkState(),\n            downloadPreferences.downloadOnlyOverWifi().get(),\n        )\n        var active = networkCheck && downloadManager.downloaderStart()\n\n        if (!active) {\n            return Result.failure()\n        }\n\n        setForegroundSafely()\n\n        coroutineScope {\n            combineTransform(\n                applicationContext.networkStateFlow(),\n                downloadPreferences.downloadOnlyOverWifi().changes(),\n                transform = { a, b -> emit(checkNetworkState(a, b)) },\n            )\n                .onEach { networkCheck = it }\n                .launchIn(this)\n        }\n\n        // Keep the worker running when needed\n        while (active) {\n            active = !isStopped && downloadManager.isRunning && networkCheck\n        }\n\n        return Result.success()\n    }\n\n    private fun checkNetworkState(state: NetworkState, requireWifi: Boolean): Boolean {\n        return if (state.isOnline) {\n            val noWifi = requireWifi && !state.isWifi\n            if (noWifi) {\n                downloadManager.downloaderStop(\n                    applicationContext.getString(R.string.download_notifier_text_only_wifi),\n                )\n            }\n            !noWifi\n        } else {\n            downloadManager.downloaderStop(applicationContext.getString(R.string.download_notifier_no_network))\n            false\n        }\n    }\n\n    companion object {\n        private const val TAG = \"AnimeDownloader\"\n\n        fun start(context: Context) {\n            val request = OneTimeWorkRequestBuilder<AnimeDownloadJob>()\n                .addTag(TAG)\n                .build()\n            WorkManager.getInstance(context)\n                .enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)\n        }\n\n        fun stop(context: Context) {\n            WorkManager.getInstance(context)\n                .cancelUniqueWork(TAG)\n        }\n\n        fun isRunning(context: Context): Boolean {\n            return WorkManager.getInstance(context)\n                .getWorkInfosForUniqueWork(TAG)\n                .get()\n                .let { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }\n        }\n\n        fun isRunningFlow(context: Context): Flow<Boolean> {\n            return WorkManager.getInstance(context)\n                .getWorkInfosForUniqueWorkLiveData(TAG)\n                .asFlow()\n                .map { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadManager.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.util.size\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.asFlow\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.emitAll\nimport kotlinx.coroutines.flow.flatMapLatest\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\nimport tachiyomi.source.local.io.ArchiveAnime\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This class is used to manage episode downloads in the application. It must be instantiated once\n * and retrieved through dependency injection. You can use this class to queue new episodes or query\n * downloaded episodes.\n */\nclass AnimeDownloadManager(\n    private val context: Context,\n    private val storageManager: StorageManager = Injekt.get(),\n    private val provider: AnimeDownloadProvider = Injekt.get(),\n    private val cache: AnimeDownloadCache = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val downloadPreferences: DownloadPreferences = Injekt.get(),\n) {\n\n    /**\n     * Downloader whose only task is to download episodes.\n     */\n    private val downloader = AnimeDownloader(context, provider, cache, sourceManager)\n\n    val isRunning: Boolean\n        get() = downloader.isRunning\n\n    /**\n     * Queue to delay the deletion of a list of episodes until triggered.\n     */\n    private val pendingDeleter = AnimeDownloadPendingDeleter(context)\n\n    val queueState\n        get() = downloader.queueState\n\n    // For use by DownloadService only\n    fun downloaderStart() = downloader.start()\n    fun downloaderStop(reason: String? = null) = downloader.stop(reason)\n\n    val isDownloaderRunning\n        get() = AnimeDownloadJob.isRunningFlow(context)\n\n    /**\n     * Tells the downloader to begin downloads.\n     */\n    fun startDownloads() {\n        if (downloader.isRunning) return\n\n        if (AnimeDownloadJob.isRunning(context)) {\n            downloader.start()\n        } else {\n            AnimeDownloadJob.start(context)\n        }\n    }\n\n    /**\n     * Tells the downloader to pause downloads.\n     */\n    fun pauseDownloads() {\n        downloader.stop()\n    }\n\n    /**\n     * Empties the download queue.\n     */\n    fun clearQueue() {\n        downloader.clearQueue()\n        downloader.stop()\n    }\n\n    /**\n     * Returns the download from queue if the episode is queued for download\n     * else it will return null which means that the episode is not queued for download\n     *\n     * @param episodeId the episode to check.\n     */\n    fun getQueuedDownloadOrNull(episodeId: Long): AnimeDownload? {\n        return queueState.value.find { it.episode.id == episodeId }\n    }\n\n    fun startDownloadNow(episodeId: Long) {\n        val existingDownload = getQueuedDownloadOrNull(episodeId)\n        // If not in queue try to start a new download\n        val toAdd = existingDownload ?: runBlocking { AnimeDownload.fromEpisodeId(episodeId) } ?: return\n        queueState.value.toMutableList().apply {\n            existingDownload?.let { remove(it) }\n            add(0, toAdd)\n            reorderQueue(this)\n        }\n        startDownloads()\n    }\n\n    /**\n     * Reorders the download queue.\n     *\n     * @param downloads value to set the download queue to\n     */\n    fun reorderQueue(downloads: List<AnimeDownload>) {\n        downloader.updateQueue(downloads)\n    }\n\n    /**\n     * Tells the downloader to enqueue the given list of episodes.\n     *\n     * @param anime the anime of the episodes.\n     * @param episodes the list of episodes to enqueue.\n     * @param autoStart whether to start the downloader after enqueuing the episodes.\n     * @param alt whether to use the alternative downloader\n     */\n    fun downloadEpisodes(\n        anime: Anime,\n        episodes: List<Episode>,\n        autoStart: Boolean = true,\n        alt: Boolean = false,\n        video: Video? = null,\n    ) {\n        val filteredEpisodes = getEpisodesToDownload(episodes)\n        downloader.queueEpisodes(anime, filteredEpisodes, autoStart, alt, video)\n    }\n\n    /**\n     * Tells the downloader to enqueue the given list of downloads at the start of the queue.\n     *\n     * @param downloads the list of downloads to enqueue.\n     */\n    fun addDownloadsToStartOfQueue(downloads: List<AnimeDownload>) {\n        if (downloads.isEmpty()) return\n        queueState.value.toMutableList().apply {\n            addAll(0, downloads)\n            reorderQueue(this)\n        }\n        if (!AnimeDownloadJob.isRunning(context)) startDownloads()\n    }\n\n    /**\n     * Builds the page list of a downloaded episode.\n     *\n     * @param source the source of the episode.\n     * @param anime the anime of the episode.\n     * @param episode the downloaded episode.\n     * @return an observable containing the list of pages from the episode.\n     */\n    fun buildVideo(source: AnimeSource, anime: Anime, episode: Episode): Video {\n        val episodeDir =\n            provider.findEpisodeDir(episode.name, episode.scanlator, anime.title, source)\n        val files = episodeDir?.listFiles().orEmpty()\n            .filter { \"video\" in it.type.orEmpty() }\n\n        if (files.isEmpty()) {\n            throw Exception(context.stringResource(AYMR.strings.video_list_empty_error))\n        }\n\n        val file = files[0]\n\n        return Video(\n            videoUrl = file.uri.toString(),\n            videoTitle = \"download: \" + file.uri.toString(),\n            initialized = true,\n        ).apply { status = Video.State.READY }\n    }\n\n    /**\n     * Returns true if the episode is downloaded.\n     *\n     * @param episodeName the name of the episode to query.\n     * @param episodeScanlator scanlator of the episode to query\n     * @param animeTitle the title of the anime to query.\n     * @param sourceId the id of the source of the episode.\n     * @param skipCache whether to skip the directory cache and check in the filesystem.\n     */\n    fun isEpisodeDownloaded(\n        episodeName: String,\n        episodeScanlator: String?,\n        animeTitle: String,\n        sourceId: Long,\n        skipCache: Boolean = false,\n    ): Boolean {\n        return cache.isEpisodeDownloaded(\n            episodeName,\n            episodeScanlator,\n            animeTitle,\n            sourceId,\n            skipCache,\n        )\n    }\n\n    /**\n     * Returns the amount of downloaded episodes.\n     */\n    fun getDownloadCount(): Int {\n        return cache.getTotalDownloadCount()\n    }\n\n    /**\n     * Returns the amount of downloaded/local episodes for an anime.\n     *\n     * @param anime the anime to check.\n     */\n    fun getDownloadCount(anime: Anime): Int {\n        return if (anime.source == LocalAnimeSource.ID) {\n            LocalAnimeSourceFileSystem(storageManager).getFilesInAnimeDirectory(anime.url)\n                .count { ArchiveAnime.isSupported(it) }\n        } else {\n            cache.getDownloadCount(anime)\n        }\n    }\n\n    /**\n     * Returns the size of downloaded episodes.\n     */\n    fun getDownloadSize(): Long {\n        return cache.getTotalDownloadSize()\n    }\n\n    /**\n     * Returns the size of downloaded/local episodes for an anime.\n     *\n     * @param anime the anime to check.\n     */\n    fun getDownloadSize(anime: Anime): Long {\n        return if (anime.source == LocalAnimeSource.ID) {\n            LocalAnimeSourceFileSystem(storageManager).getAnimeDirectory(anime.url)\n                ?.size() ?: 0L\n        } else {\n            cache.getDownloadSize(anime)\n        }\n    }\n\n    fun cancelQueuedDownloads(downloads: List<AnimeDownload>) {\n        removeFromDownloadQueue(downloads.map { it.episode })\n    }\n\n    /**\n     * Deletes the directories of a list of downloaded episodes.\n     *\n     * @param episodes the list of episodes to delete.\n     * @param anime the anime of the episodes.\n     * @param source the source of the episodes.\n     */\n    fun deleteEpisodes(episodes: List<Episode>, anime: Anime, source: AnimeSource) {\n        launchIO {\n            val filteredEpisodes = getEpisodesToDelete(episodes, anime)\n            if (filteredEpisodes.isEmpty()) {\n                return@launchIO\n            }\n\n            removeFromDownloadQueue(filteredEpisodes)\n            val (animeDir, episodeDirs) = provider.findEpisodeDirs(\n                filteredEpisodes,\n                anime,\n                source,\n            )\n            episodeDirs.forEach { it.delete() }\n            cache.removeEpisodes(filteredEpisodes, anime)\n\n            // Delete anime directory if empty\n            if (animeDir?.listFiles()?.isEmpty() == true) {\n                deleteAnime(anime, source, removeQueued = false)\n            }\n        }\n    }\n\n    /**\n     * Deletes the directory of a downloaded anime.\n     *\n     * @param anime the anime to delete.\n     * @param source the source of the anime.\n     * @param removeQueued whether to also remove queued downloads.\n     */\n    fun deleteAnime(anime: Anime, source: AnimeSource, removeQueued: Boolean = true) {\n        launchIO {\n            if (removeQueued) {\n                downloader.removeFromQueue(anime)\n            }\n            provider.findAnimeDir(anime.title, source)?.delete()\n            cache.removeAnime(anime)\n            // Delete source directory if empty\n            val sourceDir = provider.findSourceDir(source)\n            if (sourceDir?.listFiles()?.isEmpty() == true) {\n                sourceDir.delete()\n                cache.removeSource(source)\n            }\n        }\n    }\n\n    private fun removeFromDownloadQueue(episodes: List<Episode>) {\n        val wasRunning = downloader.isRunning\n        if (wasRunning) {\n            downloader.pause()\n        }\n\n        downloader.removeFromQueue(episodes)\n\n        if (wasRunning) {\n            if (queueState.value.isEmpty()) {\n                downloader.stop()\n            } else if (queueState.value.isNotEmpty()) {\n                downloader.start()\n            }\n        }\n    }\n\n    /**\n     * Adds a list of episodes to be deleted later.\n     *\n     * @param episodes the list of episodes to delete.\n     * @param anime the anime of the episodes.\n     */\n    suspend fun enqueueEpisodesToDelete(episodes: List<Episode>, anime: Anime) {\n        pendingDeleter.addEpisodes(getEpisodesToDelete(episodes, anime), anime)\n    }\n\n    /**\n     * Triggers the execution of the deletion of pending episodes.\n     */\n    fun deletePendingEpisodes() {\n        val pendingEpisodes = pendingDeleter.getPendingEpisodes()\n        for ((anime, episodes) in pendingEpisodes) {\n            val source = sourceManager.get(anime.source) ?: continue\n            deleteEpisodes(episodes, anime, source)\n        }\n    }\n\n    /**\n     * Renames source download folder\n     *\n     * @param oldSource the old source.\n     * @param newSource the new source.\n     */\n    fun renameSource(oldSource: AnimeSource, newSource: AnimeSource) {\n        val oldFolder = provider.findSourceDir(oldSource) ?: return\n        val newName = provider.getSourceDirName(newSource)\n\n        if (oldFolder.name == newName) return\n\n        val capitalizationChanged = oldFolder.name.equals(newName, ignoreCase = true)\n        if (capitalizationChanged) {\n            val tempName = newName + AnimeDownloader.TMP_DIR_SUFFIX\n            if (!oldFolder.renameTo(tempName)) {\n                logcat(LogPriority.ERROR) { \"Failed to rename source download folder: ${oldFolder.name}\" }\n                return\n            }\n        }\n\n        if (!oldFolder.renameTo(newName)) {\n            logcat(LogPriority.ERROR) { \"Failed to rename source download folder: ${oldFolder.name}\" }\n        }\n    }\n\n    /**\n     * Renames an already downloaded episode\n     *\n     * @param source the source of the anime.\n     * @param anime the anime of the episode.\n     * @param oldEpisode the existing episode with the old name.\n     * @param newEpisode the target episode with the new name.\n     */\n    suspend fun renameEpisode(source: AnimeSource, anime: Anime, oldEpisode: Episode, newEpisode: Episode) {\n        val oldNames = provider.getValidEpisodeDirNames(oldEpisode.name, oldEpisode.scanlator)\n        val animeDir = provider.getAnimeDir(anime.title, source)\n\n        // Assume there's only 1 version of the episode name formats present\n        val oldFolder = oldNames.asSequence()\n            .mapNotNull { animeDir.findFile(it) }\n            .firstOrNull()\n\n        val newName = provider.getEpisodeDirName(newEpisode.name, newEpisode.scanlator)\n\n        if (oldFolder?.name == newName) return\n\n        if (oldFolder?.renameTo(newName) == true) {\n            cache.removeEpisode(oldEpisode, anime)\n            cache.addEpisode(newName, animeDir, anime)\n        } else {\n            logcat(LogPriority.ERROR) { \"Could not rename downloaded episode: ${oldNames.joinToString()}\" }\n        }\n    }\n\n    private suspend fun getEpisodesToDelete(episodes: List<Episode>, anime: Anime): List<Episode> {\n        // Retrieve the categories that are set to exclude from being deleted on read\n        val categoriesToExclude =\n            downloadPreferences.removeExcludeAnimeCategories().get().map(String::toLong)\n\n        val categoriesForAnime = getCategories.await(anime.id)\n            .map { it.id }\n            .ifEmpty { listOf(0) }\n        val filteredCategoryAnime = if (categoriesForAnime.intersect(categoriesToExclude).isNotEmpty()) {\n            episodes.filterNot { it.seen }\n        } else {\n            episodes\n        }\n\n        return if (!downloadPreferences.removeBookmarkedChapters().get()) {\n            filteredCategoryAnime.filterNot { it.bookmark }\n        } else {\n            filteredCategoryAnime\n        }\n    }\n\n    private fun getEpisodesToDownload(episodes: List<Episode>): List<Episode> {\n        return if (!downloadPreferences.downloadFillermarkedItems().get()) {\n            episodes.filterNot { it.fillermark }\n        } else {\n            episodes\n        }\n    }\n\n    fun statusFlow(): Flow<AnimeDownload> = queueState\n        .flatMapLatest { downloads ->\n            downloads\n                .map { download ->\n                    download.statusFlow.drop(1).map { download }\n                }\n                .merge()\n        }\n        .onStart {\n            emitAll(\n                queueState.value.filter { download -> download.status == AnimeDownload.State.DOWNLOADING }\n                    .asFlow(),\n            )\n        }\n\n    fun progressFlow(): Flow<AnimeDownload> = queueState\n        .flatMapLatest { downloads ->\n            downloads\n                .map { download ->\n                    download.progressFlow.drop(1).map { download }\n                }\n                .merge()\n        }\n        .onStart {\n            emitAll(\n                queueState.value.filter { download -> download.status == AnimeDownload.State.DOWNLOADING }\n                    .asFlow(),\n            )\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadNotifier.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.graphics.BitmapFactory\nimport androidx.core.app.NotificationCompat\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.lang.chop\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notificationManager\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport java.util.regex.Pattern\n\n/**\n * DownloadNotifier is used to show notifications when downloading one or multiple chapters.\n *\n * @param context context of application\n */\ninternal class AnimeDownloadNotifier(private val context: Context) {\n\n    private val preferences: SecurityPreferences by injectLazy()\n\n    private val progressNotificationBuilder by lazy {\n        context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {\n            setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))\n            setAutoCancel(false)\n            setOnlyAlertOnce(true)\n        }\n    }\n\n    private val errorNotificationBuilder by lazy {\n        context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) {\n            setAutoCancel(false)\n        }\n    }\n\n    /**\n     * Status of download. Used for correct notification icon.\n     */\n    private var isDownloading = false\n\n    /**\n     * Shows a notification from this builder.\n     *\n     * @param id the id of the notification.\n     */\n    private fun NotificationCompat.Builder.show(id: Int) {\n        context.notify(id, build())\n    }\n\n    /**\n     * Dismiss the downloader's notification. Downloader error notifications use a different id, so\n     * those can only be dismissed by the user.\n     */\n    fun dismissProgress() {\n        context.notificationManager.cancel(Notifications.ID_DOWNLOAD_EPISODE_PROGRESS)\n    }\n\n    /**\n     * Called when download progress changes.\n     *\n     * @param download download object containing download information.\n     */\n    fun onProgressChange(download: AnimeDownload) {\n        with(progressNotificationBuilder) {\n            if (!isDownloading) {\n                setSmallIcon(android.R.drawable.stat_sys_download)\n                clearActions()\n                // Open download manager when clicked\n                setContentIntent(\n                    NotificationHandler.openAnimeDownloadManagerPendingActivity(context),\n                )\n                isDownloading = true\n                // Pause action\n                addAction(\n                    R.drawable.ic_pause_24dp,\n                    context.stringResource(AYMR.strings.action_stop),\n                    NotificationReceiver.pauseAnimeDownloadsPendingBroadcast(context),\n                )\n                addAction(\n                    R.drawable.ic_book_24dp,\n                    context.stringResource(AYMR.strings.action_show_anime),\n                    NotificationReceiver.openAnimeEntryPendingActivity(context, download.anime.id),\n                )\n            }\n\n            val downloadingProgressText = if (download.progress == 0) {\n                context.stringResource(MR.strings.update_check_notification_download_in_progress)\n            } else {\n                context.stringResource(AYMR.strings.episode_downloading_progress, download.progress)\n            }\n\n            if (preferences.hideNotificationContent().get()) {\n                setContentTitle(downloadingProgressText)\n                setContentText(null)\n            } else {\n                val title = download.anime.title.chop(15)\n                val quotedTitle = Pattern.quote(title)\n                val episode = download.episode.name.replaceFirst(\n                    \"$quotedTitle[\\\\s]*[-]*[\\\\s]*\".toRegex(RegexOption.IGNORE_CASE),\n                    \"\",\n                )\n                setContentTitle(\"$title - $episode\".chop(30))\n                setContentText(downloadingProgressText)\n            }\n            if (download.progress == 0) {\n                setProgress(100, download.progress, true)\n            } else {\n                setProgress(100, download.progress, false)\n            }\n            setOngoing(true)\n\n            show(Notifications.ID_DOWNLOAD_EPISODE_PROGRESS)\n        }\n    }\n\n    /**\n     * Show notification when download is paused.\n     */\n    fun onPaused() {\n        with(progressNotificationBuilder) {\n            setContentTitle(context.stringResource(AYMR.strings.download_paused))\n            setContentText(context.stringResource(AYMR.strings.download_notifier_download_paused_episodes))\n            setSmallIcon(R.drawable.ic_pause_24dp)\n            setProgress(0, 0, false)\n            setOngoing(false)\n            clearActions()\n            // Open download manager when clicked\n            setContentIntent(NotificationHandler.openAnimeDownloadManagerPendingActivity(context))\n            // Resume action\n            addAction(\n                R.drawable.ic_play_arrow_24dp,\n                context.stringResource(MR.strings.action_resume),\n                NotificationReceiver.resumeAnimeDownloadsPendingBroadcast(context),\n            )\n            // Clear action\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel_all),\n                NotificationReceiver.clearAnimeDownloadsPendingBroadcast(context),\n            )\n\n            show(Notifications.ID_DOWNLOAD_EPISODE_PROGRESS)\n        }\n\n        // Reset initial values\n        isDownloading = false\n    }\n\n    /**\n     *  Resets the state once downloads are completed.\n     */\n    fun onComplete() {\n        dismissProgress()\n\n        // Reset states to default\n        isDownloading = false\n    }\n\n    /**\n     * Called when the downloader receives a warning.\n     *\n     * @param reason the text to show.\n     * @param timeout duration after which to automatically dismiss the notification.\n     * @param animeId the id of the entry being warned about\n     */\n    fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null, animeId: Long? = null) {\n        with(errorNotificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title))\n            setStyle(NotificationCompat.BigTextStyle().bigText(reason))\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            setAutoCancel(true)\n            clearActions()\n            setContentIntent(NotificationHandler.openAnimeDownloadManagerPendingActivity(context))\n            if (animeId != null) {\n                addAction(\n                    R.drawable.ic_book_24dp,\n                    context.stringResource(AYMR.strings.action_show_anime),\n                    NotificationReceiver.openAnimeEntryPendingActivity(context, animeId),\n                )\n            }\n            setProgress(0, 0, false)\n            timeout?.let { setTimeoutAfter(it) }\n            contentIntent?.let { setContentIntent(it) }\n\n            show(Notifications.ID_DOWNLOAD_EPISODE_ERROR)\n        }\n\n        // Reset download information\n        isDownloading = false\n    }\n\n    /**\n     * Called when the downloader receives an error. It's shown as a separate notification to avoid\n     * being overwritten.\n     *\n     * @param error string containing error information.\n     * @param episode string containing episode title.\n     * @param animeId the id of the entry that the error occurred on\n     */\n    fun onError(error: String? = null, episode: String? = null, animeTitle: String? = null, animeId: Long? = null) {\n        // Create notification\n        with(errorNotificationBuilder) {\n            setContentTitle(\n                animeTitle?.plus(\": $episode\") ?: context.stringResource(\n                    MR.strings.download_notifier_downloader_title,\n                ),\n            )\n            setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error))\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            clearActions()\n            setContentIntent(NotificationHandler.openAnimeDownloadManagerPendingActivity(context))\n            if (animeId != null) {\n                addAction(\n                    R.drawable.ic_book_24dp,\n                    context.stringResource(AYMR.strings.action_show_anime),\n                    NotificationReceiver.openAnimeEntryPendingActivity(context, animeId),\n                )\n            }\n            setProgress(0, 0, false)\n\n            show(Notifications.ID_DOWNLOAD_EPISODE_ERROR)\n        }\n\n        // Reset download information\n        isDownloading = false\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadPendingDeleter.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.content.Context\nimport androidx.core.content.edit\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Class used to keep a list of episodes for future deletion.\n *\n * @param context the application context.\n */\nclass AnimeDownloadPendingDeleter(\n    context: Context,\n    private val json: Json = Injekt.get(),\n) {\n\n    /**\n     * Preferences used to store the list of episodes to delete.\n     */\n    private val preferences = context.getSharedPreferences(\n        \"episodes_to_delete\",\n        Context.MODE_PRIVATE,\n    )\n\n    /**\n     * Last added episode, used to avoid decoding from the preference too often.\n     */\n    private var lastAddedEntry: Entry? = null\n\n    /**\n     * Adds a list of episodes for future deletion.\n     *\n     * @param episodes the episodes to be deleted.\n     * @param anime the anime of the episodes.\n     */\n    @Synchronized\n    fun addEpisodes(episodes: List<Episode>, anime: Anime) {\n        val lastEntry = lastAddedEntry\n\n        val newEntry = if (lastEntry != null && lastEntry.anime.id == anime.id) {\n            // Append new episodes\n            val newEpisodes = lastEntry.episodes.addUniqueById(episodes)\n\n            // If no episodes were added, do nothing\n            if (newEpisodes.size == lastEntry.episodes.size) return\n\n            // Last entry matches the anime, reuse it to avoid decoding json from preferences\n            lastEntry.copy(episodes = newEpisodes)\n        } else {\n            val existingEntry = preferences.getString(anime.id.toString(), null)\n            if (existingEntry != null) {\n                // Existing entry found on preferences, decode json and add the new episode\n                val savedEntry = json.decodeFromString<Entry>(existingEntry)\n\n                // Append new episodes\n                val newEpisodes = savedEntry.episodes.addUniqueById(episodes)\n\n                // If no episodes were added, do nothing\n                if (newEpisodes.size == savedEntry.episodes.size) return\n\n                savedEntry.copy(episodes = newEpisodes)\n            } else {\n                // No entry has been found yet, create a new one\n                Entry(episodes.map { it.toEntry() }, anime.toEntry())\n            }\n        }\n\n        // Save current state\n        val json = json.encodeToString(newEntry)\n        preferences.edit {\n            putString(newEntry.anime.id.toString(), json)\n        }\n        lastAddedEntry = newEntry\n    }\n\n    /**\n     * Returns the list of episodes to be deleted grouped by its anime.\n     *\n     * Note: the returned list of anime and episodes only contain basic information needed by the\n     * downloader, so don't use them for anything else.\n     */\n    @Synchronized\n    fun getPendingEpisodes(): Map<Anime, List<Episode>> {\n        val entries = decodeAll()\n        preferences.edit {\n            clear()\n        }\n        lastAddedEntry = null\n\n        return entries.associate { (episodes, anime) ->\n            anime.toModel() to episodes.map { it.toModel() }\n        }\n    }\n\n    /**\n     * Decodes all the episodes from preferences.\n     */\n    private fun decodeAll(): List<Entry> {\n        return preferences.all.values.mapNotNull { rawEntry ->\n            try {\n                (rawEntry as? String)?.let { json.decodeFromString<Entry>(it) }\n            } catch (e: Exception) {\n                null\n            }\n        }\n    }\n\n    /**\n     * Returns a copy of episode entries ensuring no duplicates by episode id.\n     */\n    private fun List<EpisodeEntry>.addUniqueById(episodes: List<Episode>): List<EpisodeEntry> {\n        val newList = toMutableList()\n        for (episode in episodes) {\n            if (none { it.id == episode.id }) {\n                newList.add(episode.toEntry())\n            }\n        }\n        return newList\n    }\n\n    /**\n     * Returns a anime entry from a anime model.\n     */\n    private fun Anime.toEntry() = AnimeEntry(id, url, title, source)\n\n    /**\n     * Returns a episode entry from a episode model.\n     */\n    private fun Episode.toEntry() = EpisodeEntry(id, url, name, scanlator)\n\n    /**\n     * Returns a anime model from a anime entry.\n     */\n    private fun AnimeEntry.toModel() = Anime.create().copy(\n        url = url,\n        title = title,\n        source = source,\n        id = id,\n    )\n\n    /**\n     * Returns a episode model from a episode entry.\n     */\n    private fun EpisodeEntry.toModel() = Episode.create().copy(\n        id = id,\n        url = url,\n        name = name,\n        scanlator = scanlator,\n    )\n\n    /**\n     * Class used to save an entry of episodes with their anime into preferences.\n     */\n    @Serializable\n    private data class Entry(\n        val episodes: List<EpisodeEntry>,\n        val anime: AnimeEntry,\n    )\n\n    /**\n     * Class used to save an entry for an episode into preferences.\n     */\n    @Serializable\n    private data class EpisodeEntry(\n        val id: Long,\n        val url: String,\n        val name: String,\n        val scanlator: String? = null,\n    )\n\n    /**\n     * Class used to save an entry for an anime into preferences.\n     */\n    @Serializable\n    private data class AnimeEntry(\n        val id: Long,\n        val url: String,\n        val title: String,\n        val source: Long,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadProvider.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.displayablePath\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This class is used to provide the directories where the downloads should be saved.\n * It uses the following path scheme: /<root downloads dir>/<source name>/<anime>/<episode>\n *\n * @param context the application context.\n */\nclass AnimeDownloadProvider(\n    private val context: Context,\n    private val storageManager: StorageManager = Injekt.get(),\n) {\n\n    private val downloadsDir: UniFile?\n        get() = storageManager.getDownloadsDirectory()\n\n    /**\n     * Returns the download directory for an anime. For internal use only.\n     *\n     * @param animeTitle the title of the anime to query.\n     * @param source the source of the anime.\n     */\n    internal fun getAnimeDir(animeTitle: String, source: AnimeSource): UniFile {\n        try {\n            return downloadsDir!!\n                .createDirectory(getSourceDirName(source))!!\n                .createDirectory(getAnimeDirName(animeTitle))!!\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e) { \"Invalid download directory\" }\n            throw Exception(\n                context.stringResource(\n                    MR.strings.invalid_location,\n                    downloadsDir?.displayablePath ?: \"\",\n                ),\n            )\n        }\n    }\n\n    /**\n     * Returns the download directory for a source if it exists.\n     *\n     * @param source the source to query.\n     */\n    fun findSourceDir(source: AnimeSource): UniFile? {\n        return downloadsDir?.findFile(getSourceDirName(source))\n    }\n\n    /**\n     * Returns the download directory for an anime if it exists.\n     *\n     * @param animeTitle the title of the anime to query.\n     * @param source the source of the anime.\n     */\n    fun findAnimeDir(animeTitle: String, source: AnimeSource): UniFile? {\n        val sourceDir = findSourceDir(source)\n        return sourceDir?.findFile(getAnimeDirName(animeTitle))\n    }\n\n    /**\n     * Returns the download directory for an episode if it exists.\n     *\n     * @param episodeName the name of the episode to query.\n     * @param episodeScanlator scanlator of the episode to query\n     * @param animeTitle the title of the anime to query.\n     * @param source the source of the episode.\n     */\n    fun findEpisodeDir(\n        episodeName: String,\n        episodeScanlator: String?,\n        animeTitle: String,\n        source: AnimeSource,\n    ): UniFile? {\n        val animeDir = findAnimeDir(animeTitle, source)\n        return getValidEpisodeDirNames(episodeName, episodeScanlator).asSequence()\n            .mapNotNull { animeDir?.findFile(it) }\n            .firstOrNull()\n    }\n\n    /**\n     * Returns a list of downloaded directories for the episodes that exist.\n     *\n     * @param episodes the episodes to query.\n     * @param anime the anime of the episode.\n     * @param source the source of the episode.\n     */\n    fun findEpisodeDirs(episodes: List<Episode>, anime: Anime, source: AnimeSource): Pair<UniFile?, List<UniFile>> {\n        val animeDir = findAnimeDir(anime.title, source) ?: return null to emptyList()\n        return animeDir to episodes.mapNotNull { episode ->\n            getValidEpisodeDirNames(episode.name, episode.scanlator).asSequence()\n                .mapNotNull { animeDir.findFile(it) }\n                .firstOrNull()\n        }\n    }\n\n    /**\n     * Returns the download directory name for a source.\n     *\n     * @param source the source to query.\n     */\n    fun getSourceDirName(source: AnimeSource): String {\n        return DiskUtil.buildValidFilename(source.toString())\n    }\n\n    /**\n     * Returns the download directory name for an anime.\n     *\n     * @param animeTitle the title of the anime to query.\n     */\n    fun getAnimeDirName(animeTitle: String): String {\n        return DiskUtil.buildValidFilename(animeTitle)\n    }\n\n    /**\n     * Returns the episode directory name for an episode.\n     *\n     * @param episodeName the name of the episode to query.\n     * @param episodeScanlator scanlator of the episode to query\n     */\n    fun getEpisodeDirName(episodeName: String, episodeScanlator: String?): String {\n        val newEpisodeName = sanitizeEpisodeName(episodeName)\n        return DiskUtil.buildValidFilename(\n            when {\n                !episodeScanlator.isNullOrBlank() -> \"${episodeScanlator}_$newEpisodeName\"\n                else -> newEpisodeName\n            },\n        )\n    }\n\n    /**\n     * Return the new name for the episode (in case it's empty or blank)\n     *\n     * @param episodeName the name of the episode\n     */\n    private fun sanitizeEpisodeName(episodeName: String): String {\n        return episodeName.ifBlank {\n            \"Episode\"\n        }\n    }\n\n    /**\n     * Returns the episode directory name for an episode.\n     *\n     * @param episodeName the name of the episode to query.\n     * @param episodeScanlator scanlator of the episode to query\n     */\n    fun getOldEpisodeDirName(episodeName: String, episodeScanlator: String?): String {\n        return DiskUtil.buildValidFilename(\n            when {\n                episodeScanlator != null -> \"${episodeScanlator}_$episodeName\"\n                else -> episodeName\n            },\n        )\n    }\n\n    fun isEpisodeDirNameChanged(oldEpisode: Episode, newEpisode: Episode): Boolean {\n        return oldEpisode.name != newEpisode.name ||\n            oldEpisode.scanlator?.takeIf { it.isNotBlank() } != newEpisode.scanlator?.takeIf { it.isNotBlank() }\n    }\n\n    /**\n     * Returns valid downloaded episode directory names.\n     *\n     * @param episodeName the name of the episode to query.\n     * @param episodeScanlator scanlator of the episode to query\n     */\n    fun getValidEpisodeDirNames(episodeName: String, episodeScanlator: String?): List<String> {\n        val episodeDirName = getEpisodeDirName(episodeName, episodeScanlator)\n        val oldEpisodeDirName = getOldEpisodeDirName(episodeName, episodeScanlator)\n        return listOf(episodeDirName, oldEpisodeDirName)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadStore.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.content.Context\nimport androidx.core.content.edit\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This class is used to persist active downloads across application restarts.\n */\nclass AnimeDownloadStore(\n    context: Context,\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val json: Json = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val getEpisode: GetEpisode = Injekt.get(),\n) {\n\n    /**\n     * Preference file where active downloads are stored.\n     */\n    private val preferences = context.getSharedPreferences(\"active_downloads\", Context.MODE_PRIVATE)\n\n    /**\n     * Counter used to keep the queue order.\n     */\n    private var counter = 0\n\n    /**\n     * Adds a list of downloads to the store.\n     *\n     * @param downloads the list of downloads to add.\n     */\n    fun addAll(downloads: List<AnimeDownload>) {\n        preferences.edit {\n            downloads.forEach { putString(getKey(it), serialize(it)) }\n        }\n    }\n\n    /**\n     * Removes a download from the store.\n     *\n     * @param download the download to remove.\n     */\n    fun remove(download: AnimeDownload) {\n        preferences.edit {\n            remove(getKey(download))\n        }\n    }\n\n    /**\n     * Removes a list of downloads from the store.\n     *\n     * @param downloads the download to remove.\n     */\n    fun removeAll(downloads: List<AnimeDownload>) {\n        preferences.edit {\n            downloads.forEach { remove(getKey(it)) }\n        }\n    }\n\n    /**\n     * Removes all the downloads from the store.\n     */\n    fun clear() {\n        preferences.edit {\n            clear()\n        }\n    }\n\n    /**\n     * Returns the preference's key for the given download.\n     *\n     * @param download the download.\n     */\n    private fun getKey(download: AnimeDownload): String {\n        return download.episode.id.toString()\n    }\n\n    /**\n     * Returns the list of downloads to restore. It should be called in a background thread.\n     */\n    fun restore(): List<AnimeDownload> {\n        val objs = preferences.all\n            .mapNotNull { it.value as? String }\n            .mapNotNull { deserialize(it) }\n            .sortedBy { it.order }\n\n        val downloads = mutableListOf<AnimeDownload>()\n        if (objs.isNotEmpty()) {\n            val cachedAnime = mutableMapOf<Long, Anime?>()\n            for ((animeId, episodeId) in objs) {\n                val anime = cachedAnime.getOrPut(animeId) {\n                    runBlocking { getAnime.await(animeId) }\n                } ?: continue\n                val source = sourceManager.get(anime.source) as? AnimeHttpSource ?: continue\n                val episode = runBlocking { getEpisode.await(episodeId) } ?: continue\n                downloads.add(AnimeDownload(source, anime, episode))\n            }\n        }\n\n        // Clear the store, downloads will be added again immediately.\n        clear()\n        return downloads\n    }\n\n    /**\n     * Converts a download to a string.\n     *\n     * @param download the download to serialize.\n     */\n    private fun serialize(download: AnimeDownload): String {\n        val obj = AnimeDownloadObject(download.anime.id, download.episode.id!!, counter++)\n        return json.encodeToString(obj)\n    }\n\n    /**\n     * Restore a download from a string.\n     *\n     * @param string the download as string.\n     */\n    private fun deserialize(string: String): AnimeDownloadObject? {\n        return try {\n            json.decodeFromString<AnimeDownloadObject>(string)\n        } catch (e: Exception) {\n            null\n        }\n    }\n}\n\n/**\n * Class used for download serialization\n *\n * @param animeId the id of the anime.\n * @param episodeId the id of the episode.\n * @param order the order of the download in the queue.\n */\n@Serializable\nprivate data class AnimeDownloadObject(val animeId: Long, val episodeId: Long, val order: Int)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloader.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Bundle\nimport androidx.core.net.toUri\nimport com.arthenica.ffmpegkit.FFmpegKit\nimport com.arthenica.ffmpegkit.FFmpegKitConfig\nimport com.arthenica.ffmpegkit.FFprobeKit\nimport com.arthenica.ffmpegkit.Level\nimport com.arthenica.ffmpegkit.LogCallback\nimport com.arthenica.ffmpegkit.LogRedirectionStrategy\nimport com.arthenica.ffmpegkit.StatisticsCallback\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.UnmeteredSource\nimport eu.kanade.tachiyomi.animesource.model.Track\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateNotifier\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.ui.player.loader.EpisodeLoader\nimport eu.kanade.tachiyomi.ui.player.loader.HosterLoader\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.storage.toFFmpegString\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.retryWhen\nimport kotlinx.coroutines.flow.transformLatest\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.supervisorScope\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport kotlin.coroutines.resume\nimport kotlin.coroutines.resumeWithException\n\n/**\n * This class is the one in charge of downloading episodes.\n *\n * Its queue contains the list of episodes to download. In order to download them, the downloader\n * subscription must be running and the list of episodes must be sent to them by [downloaderJob].\n *\n * The queue manipulation must be done in one thread (currently the main thread) to avoid unexpected\n * behavior, but it's safe to read it from multiple threads.\n */\nclass AnimeDownloader(\n    private val context: Context,\n    private val provider: AnimeDownloadProvider,\n    private val cache: AnimeDownloadCache,\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n) {\n    /**\n     * Store for persisting downloads across restarts.\n     */\n    private val store = AnimeDownloadStore(context)\n\n    /**\n     * Queue where active downloads are kept.\n     */\n    private val _queueState = MutableStateFlow<List<AnimeDownload>>(emptyList())\n    val queueState = _queueState.asStateFlow()\n\n    /**\n     * Notifier for the downloader state and progress.\n     */\n    private val notifier by lazy { AnimeDownloadNotifier(context) }\n\n    /**\n     * Coroutine scope used for download job scheduling\n     */\n    private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)\n\n    /**\n     * Job object for download queue management\n     */\n    private var downloaderJob: Job? = null\n\n    /**\n     * Preference for user's choice of external downloader\n     */\n    private val preferences: DownloadPreferences by injectLazy()\n\n    /**\n     * Whether the downloader is running.\n     */\n    val isRunning: Boolean\n        get() = downloaderJob?.isActive ?: false\n\n    init {\n        scope.launch {\n            val episodes = async { store.restore() }\n            addAllToQueue(episodes.await())\n        }\n    }\n\n    /**\n     * Starts the downloader. It doesn't do anything if it's already running or there isn't anything\n     * to download.\n     *\n     * @return true if the downloader is started, false otherwise.\n     */\n    fun start(): Boolean {\n        if (isRunning || queueState.value.isEmpty()) {\n            return false\n        }\n\n        val pending = queueState.value.filter { it.status != AnimeDownload.State.DOWNLOADED }\n        pending.forEach { if (it.status != AnimeDownload.State.QUEUE) it.status = AnimeDownload.State.QUEUE }\n\n        launchDownloaderJob()\n\n        return pending.isNotEmpty()\n    }\n\n    /**\n     * Stops the downloader.\n     */\n    fun stop(reason: String? = null) {\n        cancelDownloaderJob()\n        queueState.value\n            .filter { it.status == AnimeDownload.State.DOWNLOADING }\n            .forEach { it.status = AnimeDownload.State.ERROR }\n\n        if (reason != null) {\n            notifier.onWarning(reason)\n            return\n        }\n\n        if (queueState.value.isNotEmpty()) {\n            notifier.onPaused()\n        } else {\n            notifier.onComplete()\n        }\n\n        AnimeDownloadJob.stop(context)\n    }\n\n    /**\n     * Pauses the downloader\n     */\n    fun pause() {\n        cancelDownloaderJob()\n        queueState.value\n            .filter { it.status == AnimeDownload.State.DOWNLOADING }\n            .forEach { it.status = AnimeDownload.State.QUEUE }\n    }\n\n    /**\n     * Removes everything from the queue.\n     */\n    fun clearQueue() {\n        cancelDownloaderJob()\n\n        internalClearQueue()\n        notifier.dismissProgress()\n    }\n\n    /**\n     * Prepares the jobs to start downloading.\n     */\n    private fun launchDownloaderJob() {\n        if (isRunning) return\n\n        downloaderJob = scope.launch {\n            val activeDownloadsFlow = queueState.transformLatest { queue ->\n                while (true) {\n                    val activeDownloads = queue.asSequence()\n                        .filter {\n                            it.status.value <= AnimeDownload.State.DOWNLOADING.value\n                        } // Ignore completed downloads, leave them in the queue\n                        .groupBy { it.source }\n                        .toList().take(3) // Concurrently download from 5 different sources\n                        .map { (_, downloads) -> downloads.first() }\n                    emit(activeDownloads)\n\n                    if (activeDownloads.isEmpty()) break\n\n                    // Suspend until a download enters the ERROR state\n                    val activeDownloadsErroredFlow =\n                        combine(activeDownloads.map(AnimeDownload::statusFlow)) { states ->\n                            states.contains(AnimeDownload.State.ERROR)\n                        }.filter { it }\n                    activeDownloadsErroredFlow.first()\n                }\n\n                if (areAllAnimeDownloadsFinished()) stop()\n            }.distinctUntilChanged()\n\n            // Use supervisorScope to cancel child jobs when the downloader job is cancelled\n            supervisorScope {\n                val downloadJobs = mutableMapOf<AnimeDownload, Job>()\n\n                activeDownloadsFlow.collectLatest { activeDownloads ->\n                    val downloadJobsToStop = downloadJobs.filter { it.key !in activeDownloads }\n                    downloadJobsToStop.forEach { (download, job) ->\n                        job.cancel()\n                        downloadJobs.remove(download)\n                    }\n\n                    val downloadsToStart = activeDownloads.filter { it !in downloadJobs }\n                    downloadsToStart.forEach { download ->\n                        downloadJobs[download] = launchDownloadJob(download)\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Launch the job responsible for download a single video\n     */\n    private fun CoroutineScope.launchDownloadJob(download: AnimeDownload) = launchIO {\n        // This try-catch manages the job cancellation\n        try {\n            downloadEpisode(download)\n\n            // Remove successful download from queue\n            if (download.status == AnimeDownload.State.DOWNLOADED) {\n                removeFromQueue(download)\n            }\n        } catch (e: Throwable) {\n            if (e is CancellationException) throw e\n            logcat(LogPriority.ERROR, e)\n            notifier.onError(e.message)\n            stop()\n        }\n    }\n\n    /**\n     * Destroys the downloader subscriptions.\n     */\n    private fun cancelDownloaderJob() {\n        downloaderJob?.cancel()\n        downloaderJob = null\n    }\n\n    /**\n     * Creates a download object for every episode and adds them to the downloads queue.\n     *\n     * @param anime the anime of the episodes to download.\n     * @param episodes the list of episodes to download.\n     * @param autoStart whether to start the downloader after enqueing the episodes.\n     */\n    fun queueEpisodes(\n        anime: Anime,\n        episodes: List<Episode>,\n        autoStart: Boolean,\n        changeDownloader: Boolean = false,\n        video: Video? = null,\n    ) {\n        if (episodes.isEmpty()) return\n\n        val source = sourceManager.get(anime.source) as? AnimeHttpSource ?: return\n        val wasEmpty = queueState.value.isEmpty()\n\n        val episodesToQueue = episodes.asSequence()\n            // Filter out those already downloaded.\n            .filter { provider.findEpisodeDir(it.name, it.scanlator, anime.title, source) == null }\n            // Add episodes to queue from the start.\n            .sortedByDescending { it.sourceOrder }\n            // Filter out those already enqueued.\n            .filter { episode -> queueState.value.none { it.episode.id == episode.id } }\n            // Create a download for each one.\n            .map { AnimeDownload(source, anime, it, changeDownloader, video) }\n            .toList()\n\n        if (episodesToQueue.isNotEmpty()) {\n            addAllToQueue(episodesToQueue)\n\n            // Start downloader if needed\n            if (autoStart && wasEmpty) {\n                val queuedDownloads =\n                    queueState.value.count { it: AnimeDownload -> it.source !is UnmeteredSource }\n                val maxDownloadsFromSource = queueState.value\n                    .groupBy { it.source }\n                    .filterKeys { it !is UnmeteredSource }\n                    .maxOfOrNull { it.value.size }\n                    ?: 0\n                // TODO: show warnings in stable\n                if (\n                    queuedDownloads > DOWNLOADS_QUEUED_WARNING_THRESHOLD ||\n                    maxDownloadsFromSource > EPISODES_PER_SOURCE_QUEUE_WARNING_THRESHOLD\n                ) {\n                    notifier.onWarning(\n                        context.stringResource(AYMR.strings.download_queue_size_warning),\n                        WARNING_NOTIF_TIMEOUT_MS,\n                        NotificationHandler.openUrl(\n                            context,\n                            AnimeLibraryUpdateNotifier.HELP_WARNING_URL,\n                        ),\n                    )\n                }\n                AnimeDownloadJob.start(context)\n            }\n        }\n    }\n\n    /**\n     * Download the video associated with download object\n     *\n     * @param download the episode to be downloaded.\n     */\n    private suspend fun downloadEpisode(download: AnimeDownload) {\n        val animeDir = provider.getAnimeDir(download.anime.title, download.source)\n\n        val availSpace = DiskUtil.getAvailableStorageSpace(animeDir)\n        if (availSpace != -1L && availSpace < MIN_DISK_SPACE) {\n            download.status = AnimeDownload.State.ERROR\n            notifier.onError(\n                context.stringResource(AYMR.strings.download_insufficient_space),\n                download.episode.name,\n                download.anime.title,\n                download.anime.id,\n            )\n            return\n        }\n\n        val episodeDirname = provider.getEpisodeDirName(download.episode.name, download.episode.scanlator)\n        val tmpDir = animeDir.createDirectory(episodeDirname + TMP_DIR_SUFFIX)!!\n\n        try {\n            if (download.video == null) {\n                // Pull video from network and add them to download object\n                val hosters = EpisodeLoader.getHosters(download.episode, download.anime, download.source)\n                if (hosters.isEmpty()) {\n                    throw Exception(context.stringResource(AYMR.strings.video_list_empty_error))\n                }\n                val bestVideo = HosterLoader.getBestVideo(download.source, hosters)\n                    ?: throw Exception(context.stringResource(AYMR.strings.video_list_empty_error))\n                download.video = bestVideo\n            }\n\n            withIOContext {\n                getOrDownloadVideoFile(download, tmpDir)\n            }\n\n            if (!isDownloadSuccessful(download, tmpDir)) {\n                download.status = AnimeDownload.State.ERROR\n                return\n            }\n\n            val filename = DiskUtil.buildValidFilename(\"${download.anime.title} - ${download.episode.name}\")\n            tmpDir.findFile(\"${filename}_tmp.mkv\")?.delete()\n            tmpDir.renameTo(episodeDirname)\n\n            cache.addEpisode(episodeDirname, animeDir, download.anime)\n\n            DiskUtil.createNoMediaFile(tmpDir, context)\n\n            download.status = AnimeDownload.State.DOWNLOADED\n        } catch (error: Throwable) {\n            if (error is CancellationException) throw error\n            // If the video threw, it will resume here\n            logcat(LogPriority.ERROR, error)\n            download.status = AnimeDownload.State.ERROR\n            notifier.onError(\n                error.message,\n                download.episode.name,\n                download.anime.title,\n                download.anime.id,\n            )\n        }\n    }\n\n    /**\n     * Gets the video file if already downloaded, otherwise downloads it\n     *\n     * @param download the download of the video.\n     * @param tmpDir the temporary directory of the download.\n     */\n    private suspend fun getOrDownloadVideoFile(\n        download: AnimeDownload,\n        tmpDir: UniFile,\n    ) {\n        val video = download.video!!\n\n        video.status = Video.State.LOAD_VIDEO\n\n        var progressJob: Job? = null\n\n        // Get filename from download info\n        val filename = DiskUtil.buildValidFilename(download.episode.name)\n\n        // Delete temp file if it exists\n        tmpDir.findFile(\"$filename.tmp\")?.delete()\n\n        // Try to find the video file\n        val videoFile = tmpDir.listFiles()?.firstOrNull { it.name!!.startsWith(\"$filename.mkv\") }\n\n        try {\n            // If the video is already downloaded, do nothing. Otherwise download from network\n            val file = when {\n                videoFile != null -> videoFile\n                else -> {\n                    notifier.onProgressChange(download)\n\n                    download.status = AnimeDownload.State.DOWNLOADING\n                    download.progress = 0\n\n                    // If videoFile is not existing then download it\n                    if (preferences.useExternalDownloader().get() == download.changeDownloader) {\n                        progressJob = scope.launch {\n                            while (download.status == AnimeDownload.State.DOWNLOADING) {\n                                delay(50)\n                                notifier.onProgressChange(download)\n                            }\n                        }\n\n                        downloadVideo(download, tmpDir, filename)\n                    } else {\n                        val betterFileName = DiskUtil.buildValidFilename(\n                            \"${download.anime.title} - ${download.episode.name}\",\n                        )\n                        downloadVideoExternal(download.video!!, download.source, tmpDir, betterFileName)\n                    }\n                }\n            }\n\n            video.videoUrl = file.uri.path ?: \"\"\n            download.progress = 100\n            video.status = Video.State.READY\n            progressJob?.cancel()\n        } catch (e: Exception) {\n            if (e is CancellationException) throw e\n            video.status = Video.State.ERROR\n            notifier.onError(e.message, download.episode.name, download.anime.title, download.anime.id)\n            progressJob?.cancel()\n        }\n    }\n\n    /**\n     * Define a retry routine in order to accommodate some errors that can be raised\n     *\n     * @param download the download reference\n     * @param tmpDir the directory where placing the file\n     * @param filename the name to give to download file\n     */\n    private suspend fun downloadVideo(\n        download: AnimeDownload,\n        tmpDir: UniFile,\n        filename: String,\n    ): UniFile {\n        return flow {\n            tmpDir.findFile(\"$filename.tmp\")?.delete()\n            val videoFile = tmpDir.createFile(\"$filename.tmp\")!!\n            try {\n                ffmpegDownload(download, tmpDir, videoFile, filename)\n            } catch (e: Exception) {\n                videoFile.delete()\n                throw e\n            }\n\n            emit(videoFile)\n        }\n            // Retry 3 times, waiting 2, 4 and 8 seconds between attempts.\n            .retryWhen { _, attempt ->\n                if (attempt < 3) {\n                    delay((2L shl attempt.toInt()) * 1000)\n                    true\n                } else {\n                    false\n                }\n            }\n            .flowOn(Dispatchers.IO)\n            .first()\n    }\n\n    // ffmpeg is always on safe mode\n    private suspend fun ffmpegDownload(\n        download: AnimeDownload,\n        tmpDir: UniFile,\n        videoFile: UniFile,\n        filename: String,\n    ) {\n        val video = download.video!!\n\n        val ffmpegFilename = { videoFile.uri.toFFmpegString(context) }\n\n        val headers = video.headers ?: download.source.headers\n        val headerOptions = headers.joinToString(\"\", \"-headers '\", \"'\") {\n            \"${it.first}: ${it.second}\\r\\n\"\n        }\n\n        FFmpegKitConfig.setLogRedirectionStrategy(LogRedirectionStrategy.ALWAYS_PRINT_LOGS)\n        val ffmpegOptions = getFFmpegOptions(video, headerOptions, ffmpegFilename())\n        val ffprobeCommand = { file: String, ffprobeHeaders: String? ->\n            FFmpegKitConfig.parseArguments(\n                \"${ffprobeHeaders?.plus(\" \") ?: \"\"}-v quiet -show_entries \" +\n                    \"format=duration -of default=noprint_wrappers=1:nokey=1 \\\"$file\\\"\",\n            )\n        }\n\n        var duration = 0L\n\n        val logCallback = LogCallback { log ->\n            if (log.level <= Level.AV_LOG_WARNING) {\n                log.message?.let {\n                    logcat(LogPriority.ERROR) { it }\n                }\n            }\n        }\n\n        val statCallback = StatisticsCallback { s ->\n            val outTime = (s.time / 1000.0).toLong()\n\n            if (duration != 0L && outTime > 0) {\n                download.progress = (100 * outTime / duration).toInt()\n            }\n        }\n\n        duration = getDuration(ffprobeCommand(video.videoUrl, headerOptions))?.toLong() ?: 0L\n\n        suspendCancellableCoroutine { continuation ->\n            val session = FFmpegKit.executeWithArgumentsAsync(\n                ffmpegOptions,\n                {\n                    if (it.returnCode.isValueSuccess) {\n                        tmpDir.findFile(\"$filename.tmp\")?.apply {\n                            renameTo(\"$filename.mkv\")\n                        }\n                        continuation.resume(it)\n                    } else {\n                        continuation.resumeWithException(Exception(\"Error in ffmpeg!\"))\n                    }\n                },\n                logCallback,\n                statCallback,\n            )\n            continuation.invokeOnCancellation {\n                session.cancel()\n            }\n        }\n    }\n\n    private fun getFFmpegOptions(video: Video, headerOptions: String, ffmpegFilename: String): Array<String> {\n        fun formatInputs(tracks: List<Track>) = tracks.joinToString(\" \", postfix = \" \") {\n            buildList {\n                if (it.url.startsWith(\"http\")) {\n                    add(headerOptions)\n                }\n                add(\"-i\")\n                add(\"\\\"${it.url}\\\"\")\n            }.joinToString(\" \")\n        }\n\n        fun formatMaps(tracks: List<Track>, type: String, offset: Int = 0) = tracks.indices.joinToString(\" \") {\n            \"-map ${it + 1 + offset}:$type\"\n        }\n\n        fun formatMetadata(tracks: List<Track>, type: String) = tracks.mapIndexed { i, track ->\n            \"-metadata:s:$type:$i \\\"title=${track.lang}\\\"\"\n        }.joinToString(\" \")\n\n        val subtitleInputs = formatInputs(video.subtitleTracks)\n        val subtitleMaps = formatMaps(video.subtitleTracks, \"s\")\n        val subtitleMetadata = formatMetadata(video.subtitleTracks, \"s\")\n\n        val audioInputs = formatInputs(video.audioTracks)\n        val audioMaps = formatMaps(video.audioTracks, \"a\", video.subtitleTracks.size)\n        val audioMetadata = formatMetadata(video.audioTracks, \"a\")\n\n        val sourceStreamOptions = video.ffmpegStreamArgs.joinToString(\" \") { (key, value) ->\n            \"-$key \\\"$value\\\"\"\n        }\n        val sourceVideoOptions = video.ffmpegVideoArgs.joinToString(\" \") { (key, value) ->\n            \"-$key \\\"$value\\\"\"\n        }\n\n        val videoInput = buildList {\n            if (video.videoUrl.startsWith(\"http\")) {\n                add(headerOptions)\n            }\n            add(sourceStreamOptions)\n            add(\"-i\")\n            add(\"\\\"${video.videoUrl}\\\"\")\n        }.joinToString(\" \")\n\n        val command = listOf(\n            videoInput, subtitleInputs, audioInputs,\n            \"-map 0:v\", audioMaps, \"-map 0:a?\", subtitleMaps, \"-map 0:s? -map 0:t?\",\n            \"-f matroska -c:a copy -c:v copy -c:s copy\",\n            subtitleMetadata, audioMetadata, sourceVideoOptions,\n            \"\\\"$ffmpegFilename\\\" -y\",\n        )\n            .filter(String::isNotBlank)\n            .joinToString(\" \")\n\n        return FFmpegKitConfig.parseArguments(command)\n    }\n\n    private suspend fun getDuration(ffprobeCommand: Array<String>): Float? {\n        return suspendCancellableCoroutine { continuation ->\n            val session = FFprobeKit.executeWithArgumentsAsync(ffprobeCommand) {\n                if (it.returnCode.isValueSuccess) {\n                    continuation.resume(it)\n                } else {\n                    continuation.resumeWithException(Exception(it.output))\n                }\n            }\n            continuation.invokeOnCancellation { session.cancel() }\n        }.output.toFloatOrNull()\n    }\n\n    /**\n     * Returns the observable which downloads the video with an external downloader.\n     *\n     * @param video the video to download.\n     * @param source the source of the video.\n     * @param tmpDir the temporary directory of the download.\n     * @param filename the filename of the video.\n     */\n    private suspend fun downloadVideoExternal(\n        video: Video,\n        source: AnimeHttpSource,\n        tmpDir: UniFile,\n        filename: String,\n    ): UniFile {\n        try {\n            val file = tmpDir.createFile(\"${filename}_tmp.mkv\")!!\n            withUIContext {\n                context.copyToClipboard(\"Episode download location\", tmpDir.filePath!!.substringBeforeLast(\"_tmp\"))\n            }\n\n            // TODO: support other file formats!!\n            // start download with intent\n            val pm = context.packageManager\n            val pkgName = preferences.externalDownloaderSelection().get()\n            val intent: Intent\n            if (pkgName.isNotEmpty()) {\n                intent = pm.getLaunchIntentForPackage(pkgName) ?: throw Exception(\n                    \"Launch intent not found\",\n                )\n                when {\n                    // 1DM\n                    pkgName.startsWith(\"idm.internet.download.manager\") -> {\n                        val headers = (video.headers ?: source.headers).toMap()\n                        val bundle = Bundle()\n                        for ((key, value) in headers) {\n                            bundle.putString(key, value)\n                        }\n\n                        intent.apply {\n                            component = ComponentName(\n                                pkgName,\n                                \"idm.internet.download.manager.Downloader\",\n                            )\n                            action = Intent.ACTION_VIEW\n                            data = video.videoUrl.toUri()\n\n                            putExtra(\"extra_filename\", \"$filename.mkv\")\n                            putExtra(\"extra_headers\", bundle)\n                        }\n                    }\n                    // ADM\n                    pkgName.startsWith(\"com.dv.adm\") -> {\n                        val headers = (video.headers ?: source.headers).toList()\n                        val bundle = Bundle()\n                        headers.forEach { a ->\n                            bundle.putString(\n                                a.first,\n                                a.second.replace(\"http\", \"h_ttp\"),\n                            )\n                        }\n\n                        intent.apply {\n                            component = ComponentName(pkgName, \"$pkgName.AEditor\")\n                            action = Intent.ACTION_VIEW\n                            putExtra(\n                                \"com.dv.get.ACTION_LIST_ADD\",\n                                \"${video.videoUrl.toUri()}<info>$filename.mkv\",\n                            )\n                            putExtra(\n                                \"com.dv.get.ACTION_LIST_PATH\",\n                                tmpDir.filePath!!.substringBeforeLast(\"_\"),\n                            )\n                            putExtra(\"android.media.intent.extra.HTTP_HEADERS\", bundle)\n                        }\n                        file.delete()\n                        tmpDir.delete()\n                        queueState.value.find { anime -> anime.video == video }?.let { download ->\n                            download.status = AnimeDownload.State.DOWNLOADED\n                            // Delete successful downloads from queue\n                            if (download.status == AnimeDownload.State.DOWNLOADED) {\n                                // Remove downloaded episode from queue\n                                removeFromQueue(download)\n                            }\n                            if (areAllAnimeDownloadsFinished()) {\n                                stop()\n                            }\n                        }\n                    }\n                }\n            } else {\n                intent = Intent(Intent.ACTION_VIEW).apply {\n                    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                    setDataAndType(video.videoUrl.toUri(), \"video/*\")\n                    putExtra(\"extra_filename\", filename)\n                }\n            }\n            context.startActivity(intent)\n            return file\n        } catch (e: Exception) {\n            tmpDir.findFile(\"${filename}_tmp.mkv\")?.delete()\n            throw e\n        }\n    }\n\n    /**\n     * Checks if the download was successful.\n     *\n     * @param download the download to check.\n     * @param tmpDir the directory where the download is currently stored.\n     */\n    private fun isDownloadSuccessful(\n        download: AnimeDownload,\n        tmpDir: UniFile,\n    ): Boolean {\n        val downloadedVideo = tmpDir.listFiles().orEmpty().filterNot { it.extension == \".tmp\" }\n        return downloadedVideo.size == 1\n    }\n\n    /**\n     * Checks if the download was successful.\n     *\n     * @param download the download to check.\n     * @param animeDir the anime directory of the download.\n     * @param tmpDir the directory where the download is currently stored.\n     * @param dirname the real (non temporary) directory name of the download.\n     */\n    private suspend fun ensureSuccessfulAnimeDownload(\n        download: AnimeDownload,\n        animeDir: UniFile,\n        tmpDir: UniFile,\n        dirname: String,\n    ) {\n        // Ensure that the episode folder has the full video\n        val downloadedVideo = tmpDir.listFiles().orEmpty().filterNot { it.extension == \".tmp\" }\n\n        download.status = if (downloadedVideo.size == 1) {\n            // Only rename the directory if it's downloaded\n            val filename = DiskUtil.buildValidFilename(\"${download.anime.title} - ${download.episode.name}\")\n            tmpDir.findFile(\"${filename}_tmp.mkv\")?.delete()\n            tmpDir.renameTo(dirname)\n\n            cache.addEpisode(dirname, animeDir, download.anime)\n\n            DiskUtil.createNoMediaFile(tmpDir, context)\n            AnimeDownload.State.DOWNLOADED\n        } else {\n            throw Exception(\"Unable to finalize download\")\n        }\n    }\n\n    /**\n     * Returns true if all the queued downloads are in DOWNLOADED or ERROR state.\n     */\n    private fun areAllAnimeDownloadsFinished(): Boolean {\n        return queueState.value.none { it.status.value <= AnimeDownload.State.DOWNLOADING.value }\n    }\n\n    private fun addAllToQueue(downloads: List<AnimeDownload>) {\n        _queueState.update {\n            downloads.forEach { download ->\n                download.status = AnimeDownload.State.QUEUE\n            }\n            store.addAll(downloads)\n            it + downloads\n        }\n    }\n\n    private fun removeFromQueue(download: AnimeDownload) {\n        _queueState.update {\n            store.remove(download)\n            if (download.status == AnimeDownload.State.DOWNLOADING || download.status == AnimeDownload.State.QUEUE) {\n                download.status = AnimeDownload.State.NOT_DOWNLOADED\n            }\n            it - download\n        }\n    }\n\n    private inline fun removeFromQueueIf(predicate: (AnimeDownload) -> Boolean) {\n        _queueState.update { queue ->\n            val downloads = queue.filter { predicate(it) }\n            store.removeAll(downloads)\n            downloads.forEach { download ->\n                if (download.status == AnimeDownload.State.DOWNLOADING ||\n                    download.status == AnimeDownload.State.QUEUE\n                ) {\n                    download.status = AnimeDownload.State.NOT_DOWNLOADED\n                }\n            }\n            queue - downloads.toSet()\n        }\n    }\n\n    fun removeFromQueue(episodes: List<Episode>) {\n        val episodeIds = episodes.map { it.id }\n        removeFromQueueIf { it.episode.id in episodeIds }\n    }\n\n    fun removeFromQueue(anime: Anime) {\n        removeFromQueueIf { it.anime.id == anime.id }\n    }\n\n    private fun internalClearQueue() {\n        _queueState.update {\n            it.forEach { download ->\n                if (download.status == AnimeDownload.State.DOWNLOADING ||\n                    download.status == AnimeDownload.State.QUEUE\n                ) {\n                    download.status = AnimeDownload.State.NOT_DOWNLOADED\n                }\n            }\n            store.clear()\n            emptyList()\n        }\n    }\n\n    fun updateQueue(downloads: List<AnimeDownload>) {\n        if (queueState == downloads) return\n\n        if (downloads.isEmpty()) {\n            clearQueue()\n            stop()\n            return\n        }\n\n        val wasRunning = isRunning\n\n        pause()\n        internalClearQueue()\n        addAllToQueue(downloads)\n\n        if (wasRunning) {\n            start()\n        }\n    }\n\n    companion object {\n        const val TMP_DIR_SUFFIX = \"_tmp\"\n        const val WARNING_NOTIF_TIMEOUT_MS = 30_000L\n        const val EPISODES_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 10\n        private const val DOWNLOADS_QUEUED_WARNING_THRESHOLD = 20\n    }\n}\n\n// Arbitrary minimum required space to start a download: 200 MB\nprivate const val MIN_DISK_SPACE = 200L * 1024 * 1024\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/model/AnimeDownload.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime.model\n\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.network.ProgressListener\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisode\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ndata class AnimeDownload(\n    val source: AnimeHttpSource,\n    val anime: Anime,\n    val episode: Episode,\n    val changeDownloader: Boolean = false,\n    var video: Video? = null,\n) : ProgressListener {\n\n    @Transient\n    private val _statusFlow = MutableStateFlow(State.NOT_DOWNLOADED)\n\n    @Transient\n    val statusFlow = _statusFlow.asStateFlow()\n    var status: State\n        get() = _statusFlow.value\n        set(status) {\n            _statusFlow.value = status\n        }\n\n    @Transient\n    private val progressStateFlow = MutableStateFlow(0)\n\n    @Transient\n    val progressFlow = progressStateFlow.asStateFlow()\n    var progress: Int\n        get() = progressStateFlow.value\n        set(value) {\n            progressStateFlow.value = value\n        }\n\n    /**\n     * Updates the status of the download\n     *\n     * @param bytesRead the updated TOTAL number of bytes read (not a partial increment)\n     * @param contentLength the updated content length\n     * @param done whether progress has completed or not\n     */\n    override fun update(bytesRead: Long, contentLength: Long, done: Boolean) {\n        val newProgress = if (contentLength > 0) {\n            (100 * bytesRead / contentLength).toInt()\n        } else {\n            -1\n        }\n        if (progress != newProgress) progress = newProgress\n    }\n\n    enum class State(val value: Int) {\n        NOT_DOWNLOADED(0),\n        QUEUE(1),\n        DOWNLOADING(2),\n        DOWNLOADED(3),\n        ERROR(4),\n    }\n\n    companion object {\n        suspend fun fromEpisodeId(\n            episodeId: Long,\n            getEpisode: GetEpisode = Injekt.get(),\n            getAnimeById: GetAnime = Injekt.get(),\n            sourceManager: AnimeSourceManager = Injekt.get(),\n        ): AnimeDownload? {\n            val episode = getEpisode.await(episodeId) ?: return null\n            val anime = getAnimeById.await(episode.animeId) ?: return null\n            val source = sourceManager.get(anime.source) as? AnimeHttpSource ?: return null\n\n            return AnimeDownload(source, anime, episode)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/anime/model/AnimeDownloadPart.kt",
    "content": "package eu.kanade.tachiyomi.data.download.anime.model\n\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.network.ProgressListener\nimport okhttp3.Request\n\n/**\n * This class contains all data needed to manage the download of a http range download part\n */\nclass AnimeDownloadPart(\n    placingDir: UniFile,\n    range: Pair<Long, Long>,\n) {\n    /**\n     * Directory where to place the download file\n     */\n    private val placingDir: UniFile\n\n    /**\n     * The download file\n     */\n    private var _file: UniFile? = null\n\n    /**\n     * The range of bytes this part covers\n     */\n    var range: Pair<Long, Long>\n\n    init {\n        this.range = range\n        this.placingDir = placingDir\n    }\n\n    /**\n     * If the download of this part has been completed or not\n     */\n    @Volatile\n    var completed: Boolean = false\n\n    /**\n     * Retrieve a valid download file (creates one if there isn't yet one)\n     */\n    var file: UniFile\n        get() {\n            if (_file == null) {\n                _file = placingDir.createFile(\"${range.first}.part.tmp\")!!\n            }\n            return _file!!\n        }\n        set(value) {\n            _file = value\n        }\n\n    /**\n     * If present it the request of the not yet downloaded bytes range\n     */\n    var request: Request? = null\n\n    var listener: ProgressListener? = null\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadCache.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.app.Application\nimport android.content.Context\nimport androidx.core.net.toUri\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.util.size\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.shareIn\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport kotlinx.coroutines.withTimeoutOrNull\nimport kotlinx.serialization.KSerializer\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.decodeFromByteArray\nimport kotlinx.serialization.descriptors.PrimitiveKind\nimport kotlinx.serialization.descriptors.PrimitiveSerialDescriptor\nimport kotlinx.serialization.descriptors.SerialDescriptor\nimport kotlinx.serialization.encodeToByteArray\nimport kotlinx.serialization.encoding.Decoder\nimport kotlinx.serialization.encoding.Encoder\nimport kotlinx.serialization.protobuf.ProtoBuf\nimport logcat.LogPriority\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.storage.service.StorageManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport kotlin.time.Duration.Companion.hours\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * Cache where we dump the downloads directory from the filesystem. This class is needed because\n * directory checking is expensive and it slows down the app. The cache is invalidated by the time\n * defined in [renewInterval] as we don't have any control over the filesystem and the user can\n * delete the folders at any time without the app noticing.\n */\nclass MangaDownloadCache(\n    private val context: Context,\n    private val provider: MangaDownloadProvider = Injekt.get(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val extensionManager: MangaExtensionManager = Injekt.get(),\n    private val storageManager: StorageManager = Injekt.get(),\n) {\n\n    private val scope = CoroutineScope(Dispatchers.IO)\n\n    private val _changes: Channel<Unit> = Channel(Channel.UNLIMITED)\n    val changes = _changes.receiveAsFlow()\n        .onStart { emit(Unit) }\n        .shareIn(scope, SharingStarted.Lazily, 1)\n\n    /**\n     * The interval after which this cache should be invalidated. 1 hour shouldn't cause major\n     * issues, as the cache is only used for UI feedback.\n     */\n    private val renewInterval = 1.hours.inWholeMilliseconds\n\n    /**\n     * The last time the cache was refreshed.\n     */\n    private var lastRenew = 0L\n    private var renewalJob: Job? = null\n\n    private val _isInitializing = MutableStateFlow(false)\n    val isInitializing = _isInitializing\n        .debounce(1000L) // Don't notify if it finishes quickly enough\n        .stateIn(scope, SharingStarted.WhileSubscribed(), false)\n\n    private val diskCacheFile: File\n        get() = File(context.cacheDir, \"dl_index_cache_v3\")\n\n    private val rootDownloadsDirMutex = Mutex()\n    private var rootDownloadsDir = RootDirectory(storageManager.getDownloadsDirectory())\n\n    init {\n        // Attempt to read cache file\n        scope.launch {\n            rootDownloadsDirMutex.withLock {\n                try {\n                    if (diskCacheFile.exists()) {\n                        val diskCache = diskCacheFile.inputStream().use {\n                            ProtoBuf.decodeFromByteArray<RootDirectory>(it.readBytes())\n                        }\n                        rootDownloadsDir = diskCache\n                        lastRenew = System.currentTimeMillis()\n                    }\n                } catch (e: Throwable) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to initialize from disk cache\" }\n                    diskCacheFile.delete()\n                }\n            }\n        }\n\n        storageManager.changes\n            .onEach { invalidateCache() }\n            .launchIn(scope)\n    }\n\n    /**\n     * Returns true if the chapter is downloaded.\n     *\n     * @param chapterName the name of the chapter to query.\n     * @param chapterScanlator scanlator of the chapter to query\n     * @param mangaTitle the title of the manga to query.\n     * @param sourceId the id of the source of the chapter.\n     * @param skipCache whether to skip the directory cache and check in the filesystem.\n     */\n    fun isChapterDownloaded(\n        chapterName: String,\n        chapterScanlator: String?,\n        mangaTitle: String,\n        sourceId: Long,\n        skipCache: Boolean,\n    ): Boolean {\n        if (skipCache) {\n            val source = sourceManager.getOrStub(sourceId)\n            return provider.findChapterDir(\n                chapterName,\n                chapterScanlator,\n                mangaTitle,\n                source,\n            ) != null\n        }\n\n        renewCache()\n\n        val sourceDir = rootDownloadsDir.sourceDirs[sourceId]\n        if (sourceDir != null) {\n            val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(mangaTitle)]\n            if (mangaDir != null) {\n                return provider.getValidChapterDirNames(chapterName, chapterScanlator)\n                    .any { it in mangaDir.chapterDirs }\n            }\n        }\n        return false\n    }\n\n    /**\n     * Returns the amount of downloaded chapters.\n     */\n    fun getTotalDownloadCount(): Int {\n        renewCache()\n\n        return rootDownloadsDir.sourceDirs.values.sumOf { sourceDir ->\n            sourceDir.mangaDirs.values.sumOf { mangaDir ->\n                mangaDir.chapterDirs.size\n            }\n        }\n    }\n\n    /**\n     * Returns the amount of downloaded chapters for a manga.\n     *\n     * @param manga the manga to check.\n     */\n    fun getDownloadCount(manga: Manga): Int {\n        renewCache()\n\n        val sourceDir = rootDownloadsDir.sourceDirs[manga.source]\n        if (sourceDir != null) {\n            val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)]\n            if (mangaDir != null) {\n                return mangaDir.chapterDirs.size\n            }\n        }\n        return 0\n    }\n\n    /**\n     * Returns the total size of downloaded chapters.\n     */\n    fun getTotalDownloadSize(): Long {\n        renewCache()\n\n        return rootDownloadsDir.sourceDirs.values.sumOf { sourceDir ->\n            sourceDir.dir?.size() ?: 0L\n        }\n    }\n\n    /**\n     * Returns the total size of downloaded chapters for a manga.\n     *\n     * @param manga the manga to check.\n     */\n    fun getDownloadSize(manga: Manga): Long {\n        renewCache()\n\n        return rootDownloadsDir.sourceDirs[manga.source]?.mangaDirs?.get(\n            provider.getMangaDirName(\n                manga.title,\n            ),\n        )?.dir?.size() ?: 0\n    }\n\n    /**\n     * Adds a chapter that has just been download to this cache.\n     *\n     * @param chapterDirName the downloaded chapter's directory name.\n     * @param mangaUniFile the directory of the manga.\n     * @param manga the manga of the chapter.\n     */\n    suspend fun addChapter(chapterDirName: String, mangaUniFile: UniFile, manga: Manga) {\n        rootDownloadsDirMutex.withLock {\n            // Retrieve the cached source directory or cache a new one\n            var sourceDir = rootDownloadsDir.sourceDirs[manga.source]\n            if (sourceDir == null) {\n                val source = sourceManager.get(manga.source) ?: return\n                val sourceUniFile = provider.findSourceDir(source) ?: return\n                sourceDir = SourceDirectory(sourceUniFile)\n                rootDownloadsDir.sourceDirs += manga.source to sourceDir\n            }\n\n            // Retrieve the cached manga directory or cache a new one\n            val mangaDirName = provider.getMangaDirName(manga.title)\n            var mangaDir = sourceDir.mangaDirs[mangaDirName]\n            if (mangaDir == null) {\n                mangaDir = MangaDirectory(mangaUniFile)\n                sourceDir.mangaDirs += mangaDirName to mangaDir\n            }\n\n            // Save the chapter directory\n            mangaDir.chapterDirs += chapterDirName\n        }\n\n        notifyChanges()\n    }\n\n    /**\n     * Removes a chapter that has been deleted from this cache.\n     *\n     * @param chapter the chapter to remove.\n     * @param manga the manga of the chapter.\n     */\n    suspend fun removeChapter(chapter: Chapter, manga: Manga) {\n        rootDownloadsDirMutex.withLock {\n            val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return\n            val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return\n            provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {\n                if (it in mangaDir.chapterDirs) {\n                    mangaDir.chapterDirs -= it\n                }\n            }\n        }\n\n        notifyChanges()\n    }\n\n    /**\n     * Removes a list of chapters that have been deleted from this cache.\n     *\n     * @param chapters the list of chapter to remove.\n     * @param manga the manga of the chapter.\n     */\n    suspend fun removeChapters(chapters: List<Chapter>, manga: Manga) {\n        rootDownloadsDirMutex.withLock {\n            val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return\n            val mangaDir = sourceDir.mangaDirs[provider.getMangaDirName(manga.title)] ?: return\n            chapters.forEach { chapter ->\n                provider.getValidChapterDirNames(chapter.name, chapter.scanlator).forEach {\n                    if (it in mangaDir.chapterDirs) {\n                        mangaDir.chapterDirs -= it\n                    }\n                }\n            }\n        }\n\n        notifyChanges()\n    }\n\n    /**\n     * Removes a manga that has been deleted from this cache.\n     *\n     * @param manga the manga to remove.\n     */\n    suspend fun removeManga(manga: Manga) {\n        rootDownloadsDirMutex.withLock {\n            val sourceDir = rootDownloadsDir.sourceDirs[manga.source] ?: return\n            val mangaDirName = provider.getMangaDirName(manga.title)\n            if (sourceDir.mangaDirs.containsKey(mangaDirName)) {\n                sourceDir.mangaDirs -= mangaDirName\n            }\n        }\n\n        notifyChanges()\n    }\n\n    suspend fun removeSource(source: MangaSource) {\n        rootDownloadsDirMutex.withLock {\n            rootDownloadsDir.sourceDirs -= source.id\n        }\n\n        notifyChanges()\n    }\n\n    fun invalidateCache() {\n        lastRenew = 0L\n        renewalJob?.cancel()\n        diskCacheFile.delete()\n        renewCache()\n    }\n\n    /**\n     * Renews the downloads cache.\n     */\n    private fun renewCache() {\n        // Avoid renewing cache if in the process nor too often\n        if (lastRenew + renewInterval >= System.currentTimeMillis() || renewalJob?.isActive == true) {\n            return\n        }\n\n        renewalJob = scope.launchIO {\n            if (lastRenew == 0L) {\n                _isInitializing.emit(true)\n            }\n\n            // Try to wait until extensions and sources have loaded\n            var sources = emptyList<MangaSource>()\n            withTimeoutOrNull(30.seconds) {\n                extensionManager.isInitialized.first { it }\n                sourceManager.isInitialized.first { it }\n\n                sources = getSources()\n            }\n\n            val sourceMap = sources.associate { provider.getSourceDirName(it).lowercase() to it.id }\n\n            rootDownloadsDirMutex.withLock {\n                val updatedRootDir = RootDirectory(storageManager.getDownloadsDirectory())\n\n                updatedRootDir.sourceDirs = updatedRootDir.dir?.listFiles().orEmpty()\n                    .filter { it.isDirectory && !it.name.isNullOrBlank() }\n                    .mapNotNull { dir ->\n                        val sourceId = sourceMap[dir.name!!.lowercase()]\n                        sourceId?.let { it to SourceDirectory(dir) }\n                    }\n                    .toMap()\n\n                updatedRootDir.sourceDirs.values.map { sourceDir ->\n                    async {\n                        sourceDir.mangaDirs = sourceDir.dir?.listFiles().orEmpty()\n                            .filter { it.isDirectory && !it.name.isNullOrBlank() }\n                            .associate { it.name!! to MangaDirectory(it) }\n                        sourceDir.mangaDirs.values.forEach { mangaDir ->\n                            val chapterDirs = mangaDir.dir?.listFiles().orEmpty()\n                                .mapNotNull {\n                                    when {\n                                        // Ignore incomplete downloads\n                                        it.name?.endsWith(MangaDownloader.TMP_DIR_SUFFIX) == true -> null\n                                        // Folder of images\n                                        it.isDirectory -> it.name\n                                        // CBZ files\n                                        it.isFile && it.extension == \"cbz\" -> it.nameWithoutExtension\n                                        // Anything else is irrelevant\n                                        else -> null\n                                    }\n                                }\n                                .toMutableSet()\n\n                            mangaDir.chapterDirs = chapterDirs\n                        }\n                    }\n                }\n                    .awaitAll()\n\n                rootDownloadsDir = updatedRootDir\n            }\n\n            _isInitializing.emit(false)\n        }.also {\n            it.invokeOnCompletion(onCancelling = true) { exception ->\n                if (exception != null && exception !is CancellationException) {\n                    logcat(LogPriority.ERROR, exception) { \"DownloadCache: failed to create cache\" }\n                }\n                lastRenew = System.currentTimeMillis()\n                notifyChanges()\n            }\n        }\n\n        // Mainly to notify the indexing notifier UI\n        notifyChanges()\n    }\n\n    private fun getSources(): List<MangaSource> {\n        return sourceManager.getOnlineSources() + sourceManager.getStubSources()\n    }\n\n    private fun notifyChanges() {\n        scope.launchNonCancellable {\n            _changes.send(Unit)\n        }\n        updateDiskCache()\n    }\n\n    private var updateDiskCacheJob: Job? = null\n    private fun updateDiskCache() {\n        updateDiskCacheJob?.cancel()\n        updateDiskCacheJob = scope.launchIO {\n            delay(1000)\n            ensureActive()\n            val bytes = ProtoBuf.encodeToByteArray(rootDownloadsDir)\n            ensureActive()\n            try {\n                diskCacheFile.writeBytes(bytes)\n            } catch (e: Throwable) {\n                logcat(\n                    priority = LogPriority.ERROR,\n                    throwable = e,\n                    message = { \"Failed to write disk cache file\" },\n                )\n            }\n        }\n    }\n}\n\n/**\n * Class to store the files under the root downloads directory.\n */\n@Serializable\nprivate class RootDirectory(\n    @Serializable(with = UniFileAsStringSerializer::class)\n    val dir: UniFile?,\n    var sourceDirs: Map<Long, SourceDirectory> = mapOf(),\n)\n\n/**\n * Class to store the files under a source directory.\n */\n@Serializable\nprivate class SourceDirectory(\n    @Serializable(with = UniFileAsStringSerializer::class)\n    val dir: UniFile?,\n    var mangaDirs: Map<String, MangaDirectory> = mapOf(),\n)\n\n/**\n * Class to store the files under a manga directory.\n */\n@Serializable\nprivate class MangaDirectory(\n    @Serializable(with = UniFileAsStringSerializer::class)\n    val dir: UniFile?,\n    var chapterDirs: MutableSet<String> = mutableSetOf(),\n)\n\nprivate object UniFileAsStringSerializer : KSerializer<UniFile?> {\n    override val descriptor: SerialDescriptor =\n        PrimitiveSerialDescriptor(\"UniFile\", PrimitiveKind.STRING)\n\n    override fun serialize(encoder: Encoder, value: UniFile?) {\n        return if (value == null) {\n            encoder.encodeNull()\n        } else {\n            encoder.encodeString(value.uri.toString())\n        }\n    }\n\n    override fun deserialize(decoder: Decoder): UniFile? {\n        return if (decoder.decodeNotNullMark()) {\n            UniFile.fromUri(Injekt.get<Application>(), decoder.decodeString().toUri())\n        } else {\n            decoder.decodeNull()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadJob.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.os.Build\nimport androidx.lifecycle.asFlow\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkInfo\nimport androidx.work.WorkManager\nimport androidx.work.WorkerParameters\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.NetworkState\nimport eu.kanade.tachiyomi.util.system.activeNetworkState\nimport eu.kanade.tachiyomi.util.system.networkStateFlow\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.setForegroundSafely\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combineTransform\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onEach\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This worker is used to manage the downloader. The system can decide to stop the worker, in\n * which case the downloader is also stopped. It's also stopped while there's no network available.\n */\nclass MangaDownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) {\n\n    private val downloadManager: MangaDownloadManager = Injekt.get()\n    private val downloadPreferences: DownloadPreferences = Injekt.get()\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        val notification = applicationContext.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {\n            setContentTitle(applicationContext.getString(R.string.download_notifier_downloader_title))\n            setSmallIcon(android.R.drawable.stat_sys_download)\n        }.build()\n        return ForegroundInfo(\n            Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS,\n            notification,\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    override suspend fun doWork(): Result {\n        var networkCheck = checkNetworkState(\n            applicationContext.activeNetworkState(),\n            downloadPreferences.downloadOnlyOverWifi().get(),\n        )\n        var active = networkCheck && downloadManager.downloaderStart()\n\n        if (!active) {\n            return Result.failure()\n        }\n\n        setForegroundSafely()\n\n        coroutineScope {\n            combineTransform(\n                applicationContext.networkStateFlow(),\n                downloadPreferences.downloadOnlyOverWifi().changes(),\n                transform = { a, b -> emit(checkNetworkState(a, b)) },\n            )\n                .onEach { networkCheck = it }\n                .launchIn(this)\n        }\n\n        // Keep the worker running when needed\n        while (active) {\n            active = !isStopped && downloadManager.isRunning && networkCheck\n        }\n\n        return Result.success()\n    }\n\n    private fun checkNetworkState(state: NetworkState, requireWifi: Boolean): Boolean {\n        return if (state.isOnline) {\n            val noWifi = requireWifi && !state.isWifi\n            if (noWifi) {\n                downloadManager.downloaderStop(\n                    applicationContext.getString(R.string.download_notifier_text_only_wifi),\n                )\n            }\n            !noWifi\n        } else {\n            downloadManager.downloaderStop(applicationContext.getString(R.string.download_notifier_no_network))\n            false\n        }\n    }\n\n    companion object {\n        private const val TAG = \"MangaDownloader\"\n\n        fun start(context: Context) {\n            val request = OneTimeWorkRequestBuilder<MangaDownloadJob>()\n                .addTag(TAG)\n                .build()\n            WorkManager.getInstance(context)\n                .enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)\n        }\n\n        fun stop(context: Context) {\n            WorkManager.getInstance(context)\n                .cancelUniqueWork(TAG)\n        }\n\n        fun isRunning(context: Context): Boolean {\n            return WorkManager.getInstance(context)\n                .getWorkInfosForUniqueWork(TAG)\n                .get()\n                .let { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }\n        }\n\n        fun isRunningFlow(context: Context): Flow<Boolean> {\n            return WorkManager.getInstance(context)\n                .getWorkInfosForUniqueWorkLiveData(TAG)\n                .asFlow()\n                .map { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadManager.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.util.size\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.asFlow\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.emitAll\nimport kotlinx.coroutines.flow.flatMapLatest\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\nimport tachiyomi.source.local.io.ArchiveManga\nimport tachiyomi.source.local.io.manga.LocalMangaSourceFileSystem\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This class is used to manage chapter downloads in the application. It must be instantiated once\n * and retrieved through dependency injection. You can use this class to queue new chapters or query\n * downloaded chapters.\n */\nclass MangaDownloadManager(\n    private val context: Context,\n    private val storageManager: StorageManager = Injekt.get(),\n    private val provider: MangaDownloadProvider = Injekt.get(),\n    private val cache: MangaDownloadCache = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val downloadPreferences: DownloadPreferences = Injekt.get(),\n) {\n\n    /**\n     * Downloader whose only task is to download chapters.\n     */\n    private val downloader = MangaDownloader(context, provider, cache)\n\n    val isRunning: Boolean\n        get() = downloader.isRunning\n\n    /**\n     * Queue to delay the deletion of a list of chapters until triggered.\n     */\n    private val pendingDeleter = MangaDownloadPendingDeleter(context)\n\n    val queueState\n        get() = downloader.queueState\n\n    // For use by DownloadService only\n    fun downloaderStart() = downloader.start()\n    fun downloaderStop(reason: String? = null) = downloader.stop(reason)\n\n    val isDownloaderRunning\n        get() = MangaDownloadJob.isRunningFlow(context)\n\n    /**\n     * Tells the downloader to begin downloads.\n     */\n    fun startDownloads() {\n        if (downloader.isRunning) return\n\n        if (MangaDownloadJob.isRunning(context)) {\n            downloader.start()\n        } else {\n            MangaDownloadJob.start(context)\n        }\n    }\n\n    /**\n     * Tells the downloader to pause downloads.\n     */\n    fun pauseDownloads() {\n        downloader.pause()\n        downloader.stop()\n    }\n\n    /**\n     * Empties the download queue.\n     */\n    fun clearQueue() {\n        downloader.clearQueue()\n        downloader.stop()\n    }\n\n    /**\n     * Returns the download from queue if the chapter is queued for download\n     * else it will return null which means that the chapter is not queued for download\n     *\n     * @param chapterId the chapter to check.\n     */\n    fun getQueuedDownloadOrNull(chapterId: Long): MangaDownload? {\n        return queueState.value.find { it.chapter.id == chapterId }\n    }\n\n    fun startDownloadNow(chapterId: Long) {\n        val existingDownload = getQueuedDownloadOrNull(chapterId)\n        // If not in queue try to start a new download\n        val toAdd = existingDownload ?: runBlocking { MangaDownload.fromChapterId(chapterId) } ?: return\n        queueState.value.toMutableList().apply {\n            existingDownload?.let { remove(it) }\n            add(0, toAdd)\n            reorderQueue(this)\n        }\n        startDownloads()\n    }\n\n    /**\n     * Reorders the download queue.\n     *\n     * @param downloads value to set the download queue to\n     */\n    fun reorderQueue(downloads: List<MangaDownload>) {\n        downloader.updateQueue(downloads)\n    }\n\n    /**\n     * Tells the downloader to enqueue the given list of chapters.\n     *\n     * @param manga the manga of the chapters.\n     * @param chapters the list of chapters to enqueue.\n     * @param autoStart whether to start the downloader after enqueing the chapters.\n     */\n    fun downloadChapters(manga: Manga, chapters: List<Chapter>, autoStart: Boolean = true) {\n        downloader.queueChapters(manga, chapters, autoStart)\n    }\n\n    /**\n     * Tells the downloader to enqueue the given list of downloads at the start of the queue.\n     *\n     * @param downloads the list of downloads to enqueue.\n     */\n    fun addDownloadsToStartOfQueue(downloads: List<MangaDownload>) {\n        if (downloads.isEmpty()) return\n        queueState.value.toMutableList().apply {\n            addAll(0, downloads)\n            reorderQueue(this)\n        }\n        if (!MangaDownloadJob.isRunning(context)) startDownloads()\n    }\n\n    /**\n     * Builds the page list of a downloaded chapter.\n     *\n     * @param source the source of the chapter.\n     * @param manga the manga of the chapter.\n     * @param chapter the downloaded chapter.\n     * @return the list of pages from the chapter.\n     */\n    fun buildPageList(source: MangaSource, manga: Manga, chapter: Chapter): List<Page> {\n        val chapterDir = provider.findChapterDir(\n            chapter.name,\n            chapter.scanlator,\n            manga.title,\n            source,\n        )\n        val files = chapterDir?.listFiles().orEmpty()\n            .filter { it.isFile && ImageUtil.isImage(it.name) { it.openInputStream() } }\n\n        if (files.isEmpty()) {\n            throw Exception(context.stringResource(MR.strings.page_list_empty_error))\n        }\n        return files.sortedBy { it.name }\n            .mapIndexed { i, file ->\n                Page(i, uri = file.uri).apply { status = Page.State.READY }\n            }\n    }\n\n    /**\n     * Returns true if the chapter is downloaded.\n     *\n     * @param chapterName the name of the chapter to query.\n     * @param chapterScanlator scanlator of the chapter to query\n     * @param mangaTitle the title of the manga to query.\n     * @param sourceId the id of the source of the chapter.\n     * @param skipCache whether to skip the directory cache and check in the filesystem.\n     */\n    fun isChapterDownloaded(\n        chapterName: String,\n        chapterScanlator: String?,\n        mangaTitle: String,\n        sourceId: Long,\n        skipCache: Boolean = false,\n    ): Boolean {\n        return cache.isChapterDownloaded(\n            chapterName,\n            chapterScanlator,\n            mangaTitle,\n            sourceId,\n            skipCache,\n        )\n    }\n\n    /**\n     * Returns the amount of downloaded chapters.\n     */\n    fun getDownloadCount(): Int {\n        return cache.getTotalDownloadCount()\n    }\n\n    /**\n     * Returns the amount of downloaded/local chapters for a manga.\n     *\n     * @param manga the manga to check.\n     */\n    fun getDownloadCount(manga: Manga): Int {\n        return if (manga.source == LocalMangaSource.ID) {\n            LocalMangaSourceFileSystem(storageManager).getFilesInMangaDirectory(manga.url)\n                .count { it.isDirectory || ArchiveManga.isSupported(it) }\n        } else {\n            cache.getDownloadCount(manga)\n        }\n    }\n\n    /**\n     * Returns the size of downloaded chapters.\n     */\n    fun getDownloadSize(): Long {\n        return cache.getTotalDownloadSize()\n    }\n\n    /**\n     * Returns the size of downloaded/local episodes for an manga.\n     *\n     * @param manga the manga to check.\n     */\n    fun getDownloadSize(manga: Manga): Long {\n        return if (manga.source == LocalMangaSource.ID) {\n            LocalMangaSourceFileSystem(storageManager).getMangaDirectory(manga.url)\n                ?.size() ?: 0L\n        } else {\n            cache.getDownloadSize(manga)\n        }\n    }\n\n    fun cancelQueuedDownloads(downloads: List<MangaDownload>) {\n        removeFromDownloadQueue(downloads.map { it.chapter })\n    }\n\n    /**\n     * Deletes the directories of a list of downloaded chapters.\n     *\n     * @param chapters the list of chapters to delete.\n     * @param manga the manga of the chapters.\n     * @param source the source of the chapters.\n     */\n    fun deleteChapters(chapters: List<Chapter>, manga: Manga, source: MangaSource) {\n        launchIO {\n            val filteredChapters = getChaptersToDelete(chapters, manga)\n            if (filteredChapters.isEmpty()) {\n                return@launchIO\n            }\n\n            removeFromDownloadQueue(filteredChapters)\n\n            val (mangaDir, chapterDirs) = provider.findChapterDirs(filteredChapters, manga, source)\n            chapterDirs.forEach { it.delete() }\n            cache.removeChapters(filteredChapters, manga)\n\n            // Delete manga directory if empty\n            if (mangaDir?.listFiles()?.isEmpty() == true) {\n                deleteManga(manga, source, removeQueued = false)\n            }\n        }\n    }\n\n    /**\n     * Deletes the directory of a downloaded manga.\n     *\n     * @param manga the manga to delete.\n     * @param source the source of the manga.\n     * @param removeQueued whether to also remove queued downloads.\n     */\n    fun deleteManga(manga: Manga, source: MangaSource, removeQueued: Boolean = true) {\n        launchIO {\n            if (removeQueued) {\n                downloader.removeFromQueue(manga)\n            }\n            provider.findMangaDir(manga.title, source)?.delete()\n            cache.removeManga(manga)\n\n            // Delete source directory if empty\n            val sourceDir = provider.findSourceDir(source)\n            if (sourceDir?.listFiles()?.isEmpty() == true) {\n                sourceDir.delete()\n                cache.removeSource(source)\n            }\n        }\n    }\n\n    private fun removeFromDownloadQueue(chapters: List<Chapter>) {\n        val wasRunning = downloader.isRunning\n        if (wasRunning) {\n            downloader.pause()\n        }\n\n        downloader.removeFromQueue(chapters)\n\n        if (wasRunning) {\n            if (queueState.value.isEmpty()) {\n                downloader.stop()\n            } else if (queueState.value.isNotEmpty()) {\n                downloader.start()\n            }\n        }\n    }\n\n    /**\n     * Adds a list of chapters to be deleted later.\n     *\n     * @param chapters the list of chapters to delete.\n     * @param manga the manga of the chapters.\n     */\n    suspend fun enqueueChaptersToDelete(chapters: List<Chapter>, manga: Manga) {\n        pendingDeleter.addChapters(getChaptersToDelete(chapters, manga), manga)\n    }\n\n    /**\n     * Triggers the execution of the deletion of pending chapters.\n     */\n    fun deletePendingChapters() {\n        val pendingChapters = pendingDeleter.getPendingChapters()\n        for ((manga, chapters) in pendingChapters) {\n            val source = sourceManager.get(manga.source) ?: continue\n            deleteChapters(chapters, manga, source)\n        }\n    }\n\n    /**\n     * Renames source download folder\n     *\n     * @param oldSource the old source.\n     * @param newSource the new source.\n     */\n    fun renameSource(oldSource: MangaSource, newSource: MangaSource) {\n        val oldFolder = provider.findSourceDir(oldSource) ?: return\n        val newName = provider.getSourceDirName(newSource)\n\n        if (oldFolder.name == newName) return\n\n        val capitalizationChanged = oldFolder.name.equals(newName, ignoreCase = true)\n        if (capitalizationChanged) {\n            val tempName = newName + MangaDownloader.TMP_DIR_SUFFIX\n            if (!oldFolder.renameTo(tempName)) {\n                logcat(LogPriority.ERROR) { \"Failed to rename source download folder: ${oldFolder.name}\" }\n                return\n            }\n        }\n\n        if (!oldFolder.renameTo(newName)) {\n            logcat(LogPriority.ERROR) { \"Failed to rename source download folder: ${oldFolder.name}\" }\n        }\n    }\n\n    /**\n     * Renames an already downloaded chapter\n     *\n     * @param source the source of the manga.\n     * @param manga the manga of the chapter.\n     * @param oldChapter the existing chapter with the old name.\n     * @param newChapter the target chapter with the new name.\n     */\n    suspend fun renameChapter(\n        source: MangaSource,\n        manga: Manga,\n        oldChapter: Chapter,\n        newChapter: Chapter,\n    ) {\n        val oldNames = provider.getValidChapterDirNames(oldChapter.name, oldChapter.scanlator)\n        val mangaDir = provider.getMangaDir(manga.title, source)\n\n        // Assume there's only 1 version of the chapter name formats present\n        val oldDownload = oldNames.asSequence()\n            .mapNotNull { mangaDir.findFile(it) }\n            .firstOrNull() ?: return\n\n        var newName = provider.getChapterDirName(newChapter.name, newChapter.scanlator)\n        if (oldDownload.isFile && oldDownload.extension == \"cbz\") {\n            newName += \".cbz\"\n        }\n\n        if (oldDownload.name == newName) return\n\n        if (oldDownload.renameTo(newName)) {\n            cache.removeChapter(oldChapter, manga)\n            cache.addChapter(newName, mangaDir, manga)\n        } else {\n            logcat(LogPriority.ERROR) { \"Could not rename downloaded chapter: ${oldNames.joinToString()}\" }\n        }\n    }\n\n    private suspend fun getChaptersToDelete(chapters: List<Chapter>, manga: Manga): List<Chapter> {\n        // Retrieve the categories that are set to exclude from being deleted on read\n        val categoriesToExclude = downloadPreferences.removeExcludeCategories().get().map(\n            String::toLong,\n        )\n\n        val categoriesForManga = getCategories.await(manga.id)\n            .map { it.id }\n            .ifEmpty { listOf(0) }\n        val filteredCategoryManga = if (categoriesForManga.intersect(categoriesToExclude).isNotEmpty()) {\n            chapters.filterNot { it.read }\n        } else {\n            chapters\n        }\n\n        return if (!downloadPreferences.removeBookmarkedChapters().get()) {\n            filteredCategoryManga.filterNot { it.bookmark }\n        } else {\n            filteredCategoryManga\n        }\n    }\n\n    fun statusFlow(): Flow<MangaDownload> = queueState\n        .flatMapLatest { downloads ->\n            downloads\n                .map { download ->\n                    download.statusFlow.drop(1).map { download }\n                }\n                .merge()\n        }\n        .onStart {\n            emitAll(\n                queueState.value.filter { download -> download.status == MangaDownload.State.DOWNLOADING }.asFlow(),\n            )\n        }\n\n    fun progressFlow(): Flow<MangaDownload> = queueState\n        .flatMapLatest { downloads ->\n            downloads\n                .map { download ->\n                    download.progressFlow.drop(1).map { download }\n                }\n                .merge()\n        }\n        .onStart {\n            emitAll(\n                queueState.value.filter { download -> download.status == MangaDownload.State.DOWNLOADING }\n                    .asFlow(),\n            )\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadNotifier.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.graphics.BitmapFactory\nimport androidx.core.app.NotificationCompat\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.lang.chop\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport java.util.regex.Pattern\n\n/**\n * DownloadNotifier is used to show notifications when downloading one or multiple chapters.\n *\n * @param context context of application\n */\ninternal class MangaDownloadNotifier(private val context: Context) {\n\n    private val preferences: SecurityPreferences by injectLazy()\n\n    private val progressNotificationBuilder by lazy {\n        context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {\n            setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))\n            setAutoCancel(false)\n            setOnlyAlertOnce(true)\n        }\n    }\n\n    private val errorNotificationBuilder by lazy {\n        context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) {\n            setAutoCancel(false)\n        }\n    }\n\n    /**\n     * Status of download. Used for correct notification icon.\n     */\n    private var isDownloading = false\n\n    /**\n     * Shows a notification from this builder.\n     *\n     * @param id the id of the notification.\n     */\n    private fun NotificationCompat.Builder.show(id: Int) {\n        context.notify(id, build())\n    }\n\n    /**\n     * Dismiss the downloader's notification. Downloader error notifications use a different id, so\n     * those can only be dismissed by the user.\n     */\n    fun dismissProgress() {\n        context.cancelNotification(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)\n    }\n\n    /**\n     * Called when download progress changes.\n     *\n     * @param download download object containing download information.\n     */\n    fun onProgressChange(download: MangaDownload) {\n        with(progressNotificationBuilder) {\n            if (!isDownloading) {\n                setSmallIcon(android.R.drawable.stat_sys_download)\n                clearActions()\n                // Open download manager when clicked\n                setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))\n                isDownloading = true\n                // Pause action\n                addAction(\n                    R.drawable.ic_pause_24dp,\n                    context.stringResource(MR.strings.action_pause),\n                    NotificationReceiver.pauseDownloadsPendingBroadcast(context),\n                )\n                addAction(\n                    R.drawable.ic_book_24dp,\n                    context.stringResource(AYMR.strings.action_show_manga),\n                    NotificationReceiver.openMangaEntryPendingActivity(context, download.manga.id),\n                )\n            }\n\n            val downloadingProgressText = context.stringResource(\n                MR.strings.chapter_downloading_progress,\n                download.downloadedImages,\n                download.pages!!.size,\n            )\n\n            if (preferences.hideNotificationContent().get()) {\n                setContentTitle(downloadingProgressText)\n                setContentText(null)\n            } else {\n                val title = download.manga.title.chop(15)\n                val quotedTitle = Pattern.quote(title)\n                val chapter = download.chapter.name.replaceFirst(\n                    \"$quotedTitle[\\\\s]*[-]*[\\\\s]*\".toRegex(RegexOption.IGNORE_CASE),\n                    \"\",\n                )\n                setContentTitle(\"$title - $chapter\".chop(30))\n                setContentText(downloadingProgressText)\n            }\n\n            setProgress(download.pages!!.size, download.downloadedImages, false)\n            setOngoing(true)\n\n            show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)\n        }\n    }\n\n    /**\n     * Show notification when download is paused.\n     */\n    fun onPaused() {\n        with(progressNotificationBuilder) {\n            setContentTitle(context.stringResource(AYMR.strings.download_paused))\n            setContentText(context.stringResource(AYMR.strings.download_notifier_download_paused_chapters))\n            setSmallIcon(R.drawable.ic_pause_24dp)\n            setProgress(0, 0, false)\n            setOngoing(false)\n            clearActions()\n            // Open download manager when clicked\n            setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))\n            // Resume action\n            addAction(\n                R.drawable.ic_play_arrow_24dp,\n                context.stringResource(MR.strings.action_resume),\n                NotificationReceiver.resumeDownloadsPendingBroadcast(context),\n            )\n            // Clear action\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel_all),\n                NotificationReceiver.clearDownloadsPendingBroadcast(context),\n            )\n\n            show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)\n        }\n\n        // Reset initial values\n        isDownloading = false\n    }\n\n    /**\n     * Resets the state once downloads are completed.\n     */\n    fun onComplete() {\n        dismissProgress()\n\n        // Reset states to default\n        isDownloading = false\n    }\n\n    /**\n     * Called when the downloader receives a warning.\n     *\n     * @param reason the text to show.\n     * @param timeout duration after which to automatically dismiss the notification.\n     * @param mangaId the id of the entry being warned about\n     * Only works on Android 8+.\n     */\n    fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null, mangaId: Long? = null) {\n        with(errorNotificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title))\n            setStyle(NotificationCompat.BigTextStyle().bigText(reason))\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            setAutoCancel(true)\n            clearActions()\n            setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))\n            if (mangaId != null) {\n                addAction(\n                    R.drawable.ic_book_24dp,\n                    context.stringResource(AYMR.strings.action_show_manga),\n                    NotificationReceiver.openMangaEntryPendingActivity(context, mangaId),\n                )\n            }\n            setProgress(0, 0, false)\n            timeout?.let { setTimeoutAfter(it) }\n            contentIntent?.let { setContentIntent(it) }\n\n            show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)\n        }\n\n        // Reset download information\n        isDownloading = false\n    }\n\n    /**\n     * Called when the downloader receives an error. It's shown as a separate notification to avoid\n     * being overwritten.\n     *\n     * @param error string containing error information.\n     * @param chapter string containing chapter title.\n     * @param mangaId the id of the entry that the error occurred on\n     */\n    fun onError(error: String? = null, chapter: String? = null, mangaTitle: String? = null, mangaId: Long? = null) {\n        // Create notification\n        with(errorNotificationBuilder) {\n            setContentTitle(\n                mangaTitle?.plus(\": $chapter\") ?: context.stringResource(\n                    MR.strings.download_notifier_downloader_title,\n                ),\n            )\n            setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error))\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            clearActions()\n            setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))\n            if (mangaId != null) {\n                addAction(\n                    R.drawable.ic_book_24dp,\n                    context.stringResource(AYMR.strings.action_show_manga),\n                    NotificationReceiver.openMangaEntryPendingActivity(context, mangaId),\n                )\n            }\n            setProgress(0, 0, false)\n\n            show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)\n        }\n\n        // Reset download information\n        isDownloading = false\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadPendingDeleter.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.content.Context\nimport androidx.core.content.edit\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Class used to keep a list of chapters for future deletion.\n *\n * @param context the application context.\n */\nclass MangaDownloadPendingDeleter(\n    context: Context,\n    private val json: Json = Injekt.get(),\n) {\n\n    /**\n     * Preferences used to store the list of chapters to delete.\n     */\n    private val preferences = context.getSharedPreferences(\n        \"chapters_to_delete\",\n        Context.MODE_PRIVATE,\n    )\n\n    /**\n     * Last added chapter, used to avoid decoding from the preference too often.\n     */\n    private var lastAddedEntry: Entry? = null\n\n    /**\n     * Adds a list of chapters for future deletion.\n     *\n     * @param chapters the chapters to be deleted.\n     * @param manga the manga of the chapters.\n     */\n    @Synchronized\n    fun addChapters(chapters: List<Chapter>, manga: Manga) {\n        val lastEntry = lastAddedEntry\n\n        val newEntry = if (lastEntry != null && lastEntry.manga.id == manga.id) {\n            // Append new chapters\n            val newChapters = lastEntry.chapters.addUniqueById(chapters)\n\n            // If no chapters were added, do nothing\n            if (newChapters.size == lastEntry.chapters.size) return\n\n            // Last entry matches the manga, reuse it to avoid decoding json from preferences\n            lastEntry.copy(chapters = newChapters)\n        } else {\n            val existingEntry = preferences.getString(manga.id.toString(), null)\n            if (existingEntry != null) {\n                // Existing entry found on preferences, decode json and add the new chapter\n                val savedEntry = json.decodeFromString<Entry>(existingEntry)\n\n                // Append new chapters\n                val newChapters = savedEntry.chapters.addUniqueById(chapters)\n\n                // If no chapters were added, do nothing\n                if (newChapters.size == savedEntry.chapters.size) return\n\n                savedEntry.copy(chapters = newChapters)\n            } else {\n                // No entry has been found yet, create a new one\n                Entry(chapters.map { it.toEntry() }, manga.toEntry())\n            }\n        }\n\n        // Save current state\n        val json = json.encodeToString(newEntry)\n        preferences.edit {\n            putString(newEntry.manga.id.toString(), json)\n        }\n        lastAddedEntry = newEntry\n    }\n\n    /**\n     * Returns the list of chapters to be deleted grouped by its manga.\n     *\n     * Note: the returned list of manga and chapters only contain basic information needed by the\n     * downloader, so don't use them for anything else.\n     */\n    @Synchronized\n    fun getPendingChapters(): Map<Manga, List<Chapter>> {\n        val entries = decodeAll()\n        preferences.edit {\n            clear()\n        }\n        lastAddedEntry = null\n\n        return entries.associate { (chapters, manga) ->\n            manga.toModel() to chapters.map { it.toModel() }\n        }\n    }\n\n    /**\n     * Decodes all the chapters from preferences.\n     */\n    private fun decodeAll(): List<Entry> {\n        return preferences.all.values.mapNotNull { rawEntry ->\n            try {\n                (rawEntry as? String)?.let { json.decodeFromString<Entry>(it) }\n            } catch (e: Exception) {\n                null\n            }\n        }\n    }\n\n    /**\n     * Returns a copy of chapter entries ensuring no duplicates by chapter id.\n     */\n    private fun List<ChapterEntry>.addUniqueById(chapters: List<Chapter>): List<ChapterEntry> {\n        val newList = toMutableList()\n        for (chapter in chapters) {\n            if (none { it.id == chapter.id }) {\n                newList.add(chapter.toEntry())\n            }\n        }\n        return newList\n    }\n\n    /**\n     * Returns a manga entry from a manga model.\n     */\n    private fun Manga.toEntry() = MangaEntry(id, url, title, source)\n\n    /**\n     * Returns a chapter entry from a chapter model.\n     */\n    private fun Chapter.toEntry() = ChapterEntry(id, url, name, scanlator)\n\n    /**\n     * Returns a manga model from a manga entry.\n     */\n    private fun MangaEntry.toModel() = Manga.create().copy(\n        url = url,\n        title = title,\n        source = source,\n        id = id,\n    )\n\n    /**\n     * Returns a chapter model from a chapter entry.\n     */\n    private fun ChapterEntry.toModel() = Chapter.create().copy(\n        id = id,\n        url = url,\n        name = name,\n        scanlator = scanlator,\n    )\n\n    /**\n     * Class used to save an entry of chapters with their manga into preferences.\n     */\n    @Serializable\n    private data class Entry(\n        val chapters: List<ChapterEntry>,\n        val manga: MangaEntry,\n    )\n\n    /**\n     * Class used to save an entry for a chapter into preferences.\n     */\n    @Serializable\n    private data class ChapterEntry(\n        val id: Long,\n        val url: String,\n        val name: String,\n        val scanlator: String? = null,\n    )\n\n    /**\n     * Class used to save an entry for a manga into preferences.\n     */\n    @Serializable\n    private data class MangaEntry(\n        val id: Long,\n        val url: String,\n        val title: String,\n        val source: Long,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadProvider.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.displayablePath\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This class is used to provide the directories where the downloads should be saved.\n * It uses the following path scheme: /<root downloads dir>/<source name>/<manga>/<chapter>\n *\n * @param context the application context.\n */\nclass MangaDownloadProvider(\n    private val context: Context,\n    private val storageManager: StorageManager = Injekt.get(),\n) {\n\n    private val downloadsDir: UniFile?\n        get() = storageManager.getDownloadsDirectory()\n\n    /**\n     * Returns the download directory for a manga. For internal use only.\n     *\n     * @param mangaTitle the title of the manga to query.\n     * @param source the source of the manga.\n     */\n    internal fun getMangaDir(mangaTitle: String, source: MangaSource): UniFile {\n        try {\n            return downloadsDir!!\n                .createDirectory(getSourceDirName(source))!!\n                .createDirectory(getMangaDirName(mangaTitle))!!\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e) { \"Invalid download directory\" }\n            throw Exception(\n                context.stringResource(\n                    MR.strings.invalid_location,\n                    downloadsDir?.displayablePath ?: \"\",\n                ),\n            )\n        }\n    }\n\n    /**\n     * Returns the download directory for a source if it exists.\n     *\n     * @param source the source to query.\n     */\n    fun findSourceDir(source: MangaSource): UniFile? {\n        return downloadsDir?.findFile(getSourceDirName(source))\n    }\n\n    /**\n     * Returns the download directory for a manga if it exists.\n     *\n     * @param mangaTitle the title of the manga to query.\n     * @param source the source of the manga.\n     */\n    fun findMangaDir(mangaTitle: String, source: MangaSource): UniFile? {\n        val sourceDir = findSourceDir(source)\n        return sourceDir?.findFile(getMangaDirName(mangaTitle))\n    }\n\n    /**\n     * Returns the download directory for a chapter if it exists.\n     *\n     * @param chapterName the name of the chapter to query.\n     * @param chapterScanlator scanlator of the chapter to query\n     * @param mangaTitle the title of the manga to query.\n     * @param source the source of the chapter.\n     */\n    fun findChapterDir(\n        chapterName: String,\n        chapterScanlator: String?,\n        mangaTitle: String,\n        source: MangaSource,\n    ): UniFile? {\n        val mangaDir = findMangaDir(mangaTitle, source)\n        return getValidChapterDirNames(chapterName, chapterScanlator).asSequence()\n            .mapNotNull { mangaDir?.findFile(it) }\n            .firstOrNull()\n    }\n\n    /**\n     * Returns a list of downloaded directories for the chapters that exist.\n     *\n     * @param chapters the chapters to query.\n     * @param manga the manga of the chapter.\n     * @param source the source of the chapter.\n     */\n    fun findChapterDirs(chapters: List<Chapter>, manga: Manga, source: MangaSource): Pair<UniFile?, List<UniFile>> {\n        val mangaDir = findMangaDir(manga.title, source) ?: return null to emptyList()\n        return mangaDir to chapters.mapNotNull { chapter ->\n            getValidChapterDirNames(chapter.name, chapter.scanlator).asSequence()\n                .mapNotNull { mangaDir.findFile(it) }\n                .firstOrNull()\n        }\n    }\n\n    /**\n     * Returns the download directory name for a source.\n     *\n     * @param source the source to query.\n     */\n    fun getSourceDirName(source: MangaSource): String {\n        return DiskUtil.buildValidFilename(source.toString())\n    }\n\n    /**\n     * Returns the download directory name for a manga.\n     *\n     * @param mangaTitle the title of the manga to query.\n     */\n    fun getMangaDirName(mangaTitle: String): String {\n        return DiskUtil.buildValidFilename(mangaTitle)\n    }\n\n    /**\n     * Returns the chapter directory name for a chapter.\n     *\n     * @param chapterName the name of the chapter to query.\n     * @param chapterScanlator scanlator of the chapter to query\n     */\n    fun getChapterDirName(chapterName: String, chapterScanlator: String?): String {\n        val newChapterName = sanitizeChapterName(chapterName)\n        return DiskUtil.buildValidFilename(\n            when {\n                !chapterScanlator.isNullOrBlank() -> \"${chapterScanlator}_$newChapterName\"\n                else -> newChapterName\n            },\n        )\n    }\n\n    /**\n     * Return the new name for the chapter (in case it's empty or blank)\n     *\n     * @param chapterName the name of the chapter\n     */\n    private fun sanitizeChapterName(chapterName: String): String {\n        return chapterName.ifBlank {\n            \"Chapter\"\n        }\n    }\n\n    fun isChapterDirNameChanged(oldChapter: Chapter, newChapter: Chapter): Boolean {\n        return oldChapter.name != newChapter.name ||\n            oldChapter.scanlator?.takeIf { it.isNotBlank() } != newChapter.scanlator?.takeIf { it.isNotBlank() }\n    }\n\n    /**\n     * Returns valid downloaded chapter directory names.\n     *\n     * @param chapterName the name of the chapter to query.\n     * @param chapterScanlator scanlator of the chapter to query\n     */\n    fun getValidChapterDirNames(chapterName: String, chapterScanlator: String?): List<String> {\n        val chapterDirName = getChapterDirName(chapterName, chapterScanlator)\n        return buildList(2) {\n            // Folder of images\n            add(chapterDirName)\n\n            // Archived chapters\n            add(\"$chapterDirName.cbz\")\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadStore.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.content.Context\nimport androidx.core.content.edit\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * This class is used to persist active downloads across application restarts.\n */\nclass MangaDownloadStore(\n    context: Context,\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val json: Json = Injekt.get(),\n    private val getManga: GetManga = Injekt.get(),\n    private val getChapter: GetChapter = Injekt.get(),\n) {\n\n    /**\n     * Preference file where active downloads are stored.\n     */\n    private val preferences = context.getSharedPreferences(\"active_downloads\", Context.MODE_PRIVATE)\n\n    /**\n     * Counter used to keep the queue order.\n     */\n    private var counter = 0\n\n    /**\n     * Adds a list of downloads to the store.\n     *\n     * @param downloads the list of downloads to add.\n     */\n    fun addAll(downloads: List<MangaDownload>) {\n        preferences.edit {\n            downloads.forEach { putString(getKey(it), serialize(it)) }\n        }\n    }\n\n    /**\n     * Removes a download from the store.\n     *\n     * @param download the download to remove.\n     */\n    fun remove(download: MangaDownload) {\n        preferences.edit {\n            remove(getKey(download))\n        }\n    }\n\n    /**\n     * Removes a list of downloads from the store.\n     *\n     * @param downloads the download to remove.\n     */\n    fun removeAll(downloads: List<MangaDownload>) {\n        preferences.edit {\n            downloads.forEach { remove(getKey(it)) }\n        }\n    }\n\n    /**\n     * Removes all the downloads from the store.\n     */\n    fun clear() {\n        preferences.edit {\n            clear()\n        }\n    }\n\n    /**\n     * Returns the preference's key for the given download.\n     *\n     * @param download the download.\n     */\n    private fun getKey(download: MangaDownload): String {\n        return download.chapter.id.toString()\n    }\n\n    /**\n     * Returns the list of downloads to restore. It should be called in a background thread.\n     */\n    fun restore(): List<MangaDownload> {\n        val objs = preferences.all\n            .mapNotNull { it.value as? String }\n            .mapNotNull { deserialize(it) }\n            .sortedBy { it.order }\n\n        val downloads = mutableListOf<MangaDownload>()\n        if (objs.isNotEmpty()) {\n            val cachedManga = mutableMapOf<Long, Manga?>()\n            for ((mangaId, chapterId) in objs) {\n                val manga = cachedManga.getOrPut(mangaId) {\n                    runBlocking { getManga.await(mangaId) }\n                } ?: continue\n                val source = sourceManager.get(manga.source) as? HttpSource ?: continue\n                val chapter = runBlocking { getChapter.await(chapterId) } ?: continue\n                downloads.add(MangaDownload(source, manga, chapter))\n            }\n        }\n\n        // Clear the store, downloads will be added again immediately.\n        clear()\n        return downloads\n    }\n\n    /**\n     * Converts a download to a string.\n     *\n     * @param download the download to serialize.\n     */\n    private fun serialize(download: MangaDownload): String {\n        val obj = DownloadObject(download.manga.id, download.chapter.id, counter++)\n        return json.encodeToString(obj)\n    }\n\n    /**\n     * Restore a download from a string.\n     *\n     * @param string the download as string.\n     */\n    private fun deserialize(string: String): DownloadObject? {\n        return try {\n            json.decodeFromString<DownloadObject>(string)\n        } catch (e: Exception) {\n            null\n        }\n    }\n}\n\n/**\n * Class used for download serialization\n *\n * @param mangaId the id of the manga.\n * @param chapterId the id of the chapter.\n * @param order the order of the download in the queue.\n */\n@Serializable\nprivate data class DownloadObject(val mangaId: Long, val chapterId: Long, val order: Int)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloader.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga\n\nimport android.content.Context\nimport aniyomi.util.DataSaver\nimport aniyomi.util.DataSaver.Companion.getImage\nimport com.hippo.unifile.UniFile\nimport eu.kanade.domain.entries.manga.model.getComicInfo\nimport eu.kanade.domain.items.chapter.model.toSChapter\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.data.cache.ChapterCache\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateNotifier\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.source.UnmeteredSource\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.storage.DiskUtil.NOMEDIA_FILE\nimport eu.kanade.tachiyomi.util.storage.saveTo\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.flatMapMerge\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.retryWhen\nimport kotlinx.coroutines.flow.transformLatest\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.supervisorScope\nimport logcat.LogPriority\nimport mihon.core.archive.ZipWriter\nimport nl.adaptivity.xmlutil.serialization.XML\nimport okhttp3.Response\nimport okio.Throttler\nimport okio.buffer\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNow\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE\nimport tachiyomi.core.metadata.comicinfo.ComicInfo\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport java.util.Locale\n\n/**\n * This class is the one in charge of downloading chapters.\n *\n * Its queue contains the list of chapters to download. In order to download them, the downloader\n * subscription must be running and the list of chapters must be sent to them by [downloadsRelay].\n *\n * The queue manipulation must be done in one thread (currently the main thread) to avoid unexpected\n * behavior, but it's safe to read it from multiple threads.\n */\nclass MangaDownloader(\n    private val context: Context,\n    private val provider: MangaDownloadProvider,\n    private val cache: MangaDownloadCache,\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val chapterCache: ChapterCache = Injekt.get(),\n    private val downloadPreferences: DownloadPreferences = Injekt.get(),\n    private val xml: XML = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val getMangaTracks: GetMangaTracks = Injekt.get(),\n    // SY -->\n    private val sourcePreferences: SourcePreferences = Injekt.get(),\n    // SY <--\n) {\n\n    /**\n     * Store for persisting downloads across restarts.\n     */\n    private val store = MangaDownloadStore(context)\n\n    /**\n     * Queue where active downloads are kept.\n     */\n    private val _queueState = MutableStateFlow<List<MangaDownload>>(emptyList())\n    val queueState = _queueState.asStateFlow()\n\n    /**\n     * Notifier for the downloader state and progress.\n     */\n    private val notifier by lazy { MangaDownloadNotifier(context) }\n\n    /**\n     * The throttler used to control the download speed.\n     */\n    private val throttler = Throttler()\n\n    private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)\n    private var downloaderJob: Job? = null\n\n    /**\n     * Whether the downloader is running.\n     */\n    val isRunning: Boolean\n        get() = downloaderJob?.isActive ?: false\n\n    /**\n     * Whether the downloader is paused\n     */\n    @Volatile\n    var isPaused: Boolean = false\n\n    init {\n        launchNow {\n            val chapters = async { store.restore() }\n            addAllToQueue(chapters.await())\n        }\n    }\n\n    /**\n     * Starts the downloader. It doesn't do anything if it's already running or there isn't anything\n     * to download.\n     *\n     * @return true if the downloader is started, false otherwise.\n     */\n    fun start(): Boolean {\n        if (isRunning || queueState.value.isEmpty()) {\n            return false\n        }\n\n        val pending = queueState.value.filter { it.status != MangaDownload.State.DOWNLOADED }\n        pending.forEach { if (it.status != MangaDownload.State.QUEUE) it.status = MangaDownload.State.QUEUE }\n\n        isPaused = false\n\n        launchDownloaderJob()\n\n        return pending.isNotEmpty()\n    }\n\n    /**\n     * Stops the downloader.\n     */\n    fun stop(reason: String? = null) {\n        cancelDownloaderJob()\n        queueState.value\n            .filter { it.status == MangaDownload.State.DOWNLOADING }\n            .forEach { it.status = MangaDownload.State.ERROR }\n\n        if (reason != null) {\n            notifier.onWarning(reason)\n            return\n        }\n\n        if (isPaused && queueState.value.isNotEmpty()) {\n            notifier.onPaused()\n        } else {\n            notifier.onComplete()\n        }\n\n        isPaused = false\n\n        MangaDownloadJob.stop(context)\n    }\n\n    /**\n     * Pauses the downloader\n     */\n    fun pause() {\n        cancelDownloaderJob()\n        queueState.value\n            .filter { it.status == MangaDownload.State.DOWNLOADING }\n            .forEach { it.status = MangaDownload.State.QUEUE }\n        isPaused = true\n    }\n\n    /**\n     * Removes everything from the queue.\n     */\n    fun clearQueue() {\n        cancelDownloaderJob()\n\n        internalClearQueue()\n        notifier.dismissProgress()\n    }\n\n    /**\n     * Prepares the subscriptions to start downloading.\n     */\n    private fun launchDownloaderJob() {\n        if (isRunning) return\n\n        downloaderJob = scope.launch {\n            val activeDownloadsFlow = queueState.transformLatest { queue ->\n                while (true) {\n                    val activeDownloads = queue.asSequence()\n                        .filter {\n                            it.status.value <= MangaDownload.State.DOWNLOADING.value\n                        } // Ignore completed downloads, leave them in the queue\n                        .groupBy { it.source }\n                        .toList().take(5) // Concurrently download from 5 different sources\n                        .map { (_, downloads) -> downloads.first() }\n                    emit(activeDownloads)\n\n                    if (activeDownloads.isEmpty()) break\n                    // Suspend until a download enters the ERROR state\n                    val activeDownloadsErroredFlow =\n                        combine(activeDownloads.map(MangaDownload::statusFlow)) { states ->\n                            states.contains(MangaDownload.State.ERROR)\n                        }.filter { it }\n                    activeDownloadsErroredFlow.first()\n                }\n            }.distinctUntilChanged()\n\n            // Use supervisorScope to cancel child jobs when the downloader job is cancelled\n            supervisorScope {\n                val downloadJobs = mutableMapOf<MangaDownload, Job>()\n\n                activeDownloadsFlow.collectLatest { activeDownloads ->\n                    val downloadJobsToStop = downloadJobs.filter { it.key !in activeDownloads }\n                    downloadJobsToStop.forEach { (download, job) ->\n                        job.cancel()\n                        downloadJobs.remove(download)\n                    }\n\n                    val downloadsToStart = activeDownloads.filter { it !in downloadJobs }\n                    downloadsToStart.forEach { download ->\n                        downloadJobs[download] = launchDownloadJob(download)\n                    }\n                }\n            }\n        }\n    }\n\n    private fun CoroutineScope.launchDownloadJob(download: MangaDownload) = launchIO {\n        try {\n            downloadChapter(download)\n\n            // Remove successful download from queue\n            if (download.status == MangaDownload.State.DOWNLOADED) {\n                removeFromQueue(download)\n            }\n            if (areAllDownloadsFinished()) {\n                stop()\n            }\n        } catch (e: Throwable) {\n            if (e is CancellationException) throw e\n            logcat(LogPriority.ERROR, e)\n            notifier.onError(e.message)\n            stop()\n        }\n    }\n\n    /**\n     * Destroys the downloader subscriptions.\n     */\n    private fun cancelDownloaderJob() {\n        downloaderJob?.cancel()\n        downloaderJob = null\n    }\n\n    /**\n     * Creates a download object for every chapter and adds them to the downloads queue.\n     *\n     * @param manga the manga of the chapters to download.\n     * @param chapters the list of chapters to download.\n     * @param autoStart whether to start the downloader after enqueing the chapters.\n     */\n    fun queueChapters(manga: Manga, chapters: List<Chapter>, autoStart: Boolean) {\n        if (chapters.isEmpty()) return\n\n        val source = sourceManager.get(manga.source) as? HttpSource ?: return\n        val wasEmpty = queueState.value.isEmpty()\n        val chaptersToQueue = chapters.asSequence()\n            // Filter out those already downloaded.\n            .filter { provider.findChapterDir(it.name, it.scanlator, manga.title, source) == null }\n            // Add chapters to queue from the start.\n            .sortedByDescending { it.sourceOrder }\n            // Filter out those already enqueued.\n            .filter { chapter -> queueState.value.none { it.chapter.id == chapter.id } }\n            // Create a download for each one.\n            .map { MangaDownload(source, manga, it) }\n            .toList()\n\n        if (chaptersToQueue.isNotEmpty()) {\n            addAllToQueue(chaptersToQueue)\n\n            // Start downloader if needed\n            if (autoStart && wasEmpty) {\n                val queuedDownloads = queueState.value.count { it: MangaDownload -> it.source !is UnmeteredSource }\n                val maxDownloadsFromSource = queueState.value\n                    .groupBy { it.source }\n                    .filterKeys { it !is UnmeteredSource }\n                    .maxOfOrNull { it.value.size }\n                    ?: 0\n                if (\n                    queuedDownloads > DOWNLOADS_QUEUED_WARNING_THRESHOLD ||\n                    maxDownloadsFromSource > CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD\n                ) {\n                    notifier.onWarning(\n                        context.stringResource(AYMR.strings.download_queue_size_warning),\n                        WARNING_NOTIF_TIMEOUT_MS,\n                        NotificationHandler.openUrl(context, MangaLibraryUpdateNotifier.HELP_WARNING_URL),\n                    )\n                }\n                MangaDownloadJob.start(context)\n            }\n        }\n    }\n\n    /**\n     * Downloads a chapter.\n     *\n     * @param download the chapter to be downloaded.\n     */\n    private suspend fun downloadChapter(download: MangaDownload) {\n        val mangaDir = provider.getMangaDir(download.manga.title, download.source)\n\n        val availSpace = DiskUtil.getAvailableStorageSpace(mangaDir)\n        if (availSpace != -1L && availSpace < MIN_DISK_SPACE) {\n            download.status = MangaDownload.State.ERROR\n            notifier.onError(\n                context.stringResource(AYMR.strings.download_insufficient_space),\n                download.chapter.name,\n                download.manga.title,\n                download.manga.id,\n            )\n            return\n        }\n\n        val chapterDirname = provider.getChapterDirName(download.chapter.name, download.chapter.scanlator)\n        val tmpDir = mangaDir.createDirectory(chapterDirname + TMP_DIR_SUFFIX)!!\n\n        try {\n            // If the page list already exists, start from the file\n            val pageList = download.pages ?: run {\n                // Otherwise, pull page list from network and add them to download object\n                val pages = download.source.getPageList(download.chapter.toSChapter())\n\n                if (pages.isEmpty()) {\n                    throw Exception(context.stringResource(MR.strings.page_list_empty_error))\n                }\n                // Don't trust index from source\n                val reIndexedPages = pages.mapIndexed { index, page ->\n                    Page(\n                        index,\n                        page.url,\n                        page.imageUrl,\n                        page.uri,\n                    )\n                }\n                download.pages = reIndexedPages\n                reIndexedPages\n            }\n\n            val dataSaver = if (sourcePreferences.dataSaverDownloader().get()) {\n                DataSaver(download.source, sourcePreferences)\n            } else {\n                DataSaver.NoOp\n            }\n\n            // Delete all temporary (unfinished) files\n            tmpDir.listFiles()\n                ?.filter { it.extension == \"tmp\" }\n                ?.forEach { it.delete() }\n\n            download.status = MangaDownload.State.DOWNLOADING\n\n            // Start downloading images, consider we can have downloaded images already\n            // Concurrently do 2 pages at a time\n            pageList.asFlow()\n                .flatMapMerge(concurrency = 2) { page ->\n                    flow {\n                        // Fetch image URL if necessary\n                        if (page.imageUrl.isNullOrEmpty()) {\n                            page.status = Page.State.LOAD_PAGE\n                            try {\n                                page.imageUrl = download.source.getImageUrl(page)\n                            } catch (e: Throwable) {\n                                page.status = Page.State.ERROR\n                            }\n                        }\n\n                        withIOContext { getOrDownloadImage(page, download, tmpDir, dataSaver) }\n                        emit(page)\n                    }.flowOn(Dispatchers.IO)\n                }\n                .collect {\n                    // Do when page is downloaded.\n                    notifier.onProgressChange(download)\n                }\n\n            // Do after download completes\n            if (!isDownloadSuccessful(download, tmpDir)) {\n                download.status = MangaDownload.State.ERROR\n                return\n            }\n\n            createComicInfoFile(\n                tmpDir,\n                download.manga,\n                download.chapter,\n                download.source,\n            )\n\n            // Only rename the directory if it's downloaded\n            if (downloadPreferences.saveChaptersAsCBZ().get()) {\n                archiveChapter(mangaDir, chapterDirname, tmpDir)\n            } else {\n                tmpDir.renameTo(chapterDirname)\n            }\n            cache.addChapter(chapterDirname, mangaDir, download.manga)\n\n            DiskUtil.createNoMediaFile(tmpDir, context)\n\n            download.status = MangaDownload.State.DOWNLOADED\n        } catch (error: Throwable) {\n            if (error is CancellationException) throw error\n            // If the page list threw, it will resume here\n            logcat(LogPriority.ERROR, error)\n            download.status = MangaDownload.State.ERROR\n            notifier.onError(error.message, download.chapter.name, download.manga.title, download.manga.id)\n        }\n    }\n\n    /**\n     * Gets the image from the filesystem if it exists or downloads it otherwise.\n     *\n     * @param page the page to download.\n     * @param download the download of the page.\n     * @param tmpDir the temporary directory of the download.\n     */\n    private suspend fun getOrDownloadImage(\n        page: Page,\n        download: MangaDownload,\n        tmpDir: UniFile,\n        dataSaver: DataSaver,\n    ) {\n        // If the image URL is empty, do nothing\n        if (page.imageUrl == null) {\n            return\n        }\n\n        val digitCount = (download.pages?.size ?: 0).toString().length.coerceAtLeast(3)\n        val filename = \"%0${digitCount}d\".format(Locale.ENGLISH, page.number)\n        val tmpFile = tmpDir.findFile(\"$filename.tmp\")\n\n        // Delete temp file if it exists\n        tmpFile?.delete()\n\n        // Try to find the image file\n        val imageFile = tmpDir.listFiles()?.firstOrNull {\n            it.name!!.startsWith(\"$filename.\") ||\n                it.name!!.startsWith(\n                    \"${filename}__001\",\n                )\n        }\n\n        try {\n            // If the image is already downloaded, do nothing. Otherwise download from network\n            val file = when {\n                imageFile != null -> imageFile\n                chapterCache.isImageInCache(page.imageUrl!!) -> copyImageFromCache(\n                    chapterCache.getImageFile(page.imageUrl!!),\n                    tmpDir,\n                    filename,\n                )\n                else -> downloadImage(page, download.source, tmpDir, filename, dataSaver)\n            }\n\n            // When the page is ready, set page path, progress (just in case) and status\n            splitTallImageIfNeeded(page, tmpDir)\n            page.uri = file.uri\n            page.progress = 100\n            page.status = Page.State.READY\n        } catch (e: Throwable) {\n            if (e is CancellationException) throw e\n            // Mark this page as error and allow to download the remaining\n            page.progress = 0\n            page.status = Page.State.ERROR\n            notifier.onError(e.message, download.chapter.name, download.manga.title, download.manga.id)\n        }\n    }\n\n    /**\n     * Downloads the image from network to a file in tmpDir.\n     *\n     * @param page the page to download.\n     * @param source the source of the page.\n     * @param tmpDir the temporary directory of the download.\n     * @param filename the filename of the image.\n     */\n    private suspend fun downloadImage(\n        page: Page,\n        source: HttpSource,\n        tmpDir: UniFile,\n        filename: String,\n        dataSaver: DataSaver,\n    ): UniFile {\n        page.status = Page.State.DOWNLOAD_IMAGE\n        page.progress = 0\n        return flow {\n            val response = source.getImage(page, dataSaver)\n            val file = tmpDir.createFile(\"$filename.tmp\")!!\n            try {\n                throttler.apply {\n                    bytesPerSecond(downloadPreferences.downloadSpeedLimit().get().toLong() * 1024)\n                }\n                val throttledSource = throttler.source(response.body.source()).buffer()\n                throttledSource.saveTo(file.openOutputStream())\n                throttledSource.close()\n                val extension = getImageExtension(response, file)\n                file.renameTo(\"$filename.$extension\")\n            } catch (e: Exception) {\n                response.close()\n                file.delete()\n                throw e\n            }\n            emit(file)\n        }\n            // Retry 3 times, waiting 2, 4 and 8 seconds between attempts.\n            .retryWhen { _, attempt ->\n                if (attempt < 3) {\n                    delay((2L shl attempt.toInt()) * 1000)\n                    true\n                } else {\n                    false\n                }\n            }\n            .flowOn(Dispatchers.IO)\n            .first()\n    }\n\n    /**\n     * Copies the image from cache to file in tmpDir.\n     *\n     * @param cacheFile the file from cache.\n     * @param tmpDir the temporary directory of the download.\n     * @param filename the filename of the image.\n     */\n    private fun copyImageFromCache(cacheFile: File, tmpDir: UniFile, filename: String): UniFile {\n        val tmpFile = tmpDir.createFile(\"$filename.tmp\")!!\n        cacheFile.inputStream().use { input ->\n            tmpFile.openOutputStream().use { output ->\n                input.copyTo(output)\n            }\n        }\n        val extension = ImageUtil.findImageType(cacheFile.inputStream()) ?: return tmpFile\n        tmpFile.renameTo(\"$filename.${extension.extension}\")\n        cacheFile.delete()\n        return tmpFile\n    }\n\n    /**\n     * Returns the extension of the downloaded image from the network response, or if it's null,\n     * analyze the file. If everything fails, assume it's a jpg.\n     *\n     * @param response the network response of the image.\n     * @param file the file where the image is already downloaded.\n     */\n    private fun getImageExtension(response: Response, file: UniFile): String {\n        val mime = response.body.contentType()?.run { if (type == \"image\") \"image/$subtype\" else null }\n        return ImageUtil.getExtensionFromMimeType(mime) { file.openInputStream() }\n    }\n\n    private fun splitTallImageIfNeeded(page: Page, tmpDir: UniFile) {\n        if (!downloadPreferences.splitTallImages().get()) return\n\n        try {\n            val filenamePrefix = \"%03d\".format(Locale.ENGLISH, page.number)\n            val imageFile = tmpDir.listFiles()?.firstOrNull { it.name.orEmpty().startsWith(filenamePrefix) }\n                ?: error(context.stringResource(MR.strings.download_notifier_split_page_not_found, page.number))\n\n            // If the original page was previously split, then skip\n            if (imageFile.name.orEmpty().startsWith(\"${filenamePrefix}__\")) return\n\n            ImageUtil.splitTallImage(tmpDir, imageFile, filenamePrefix)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to split downloaded image\" }\n        }\n    }\n\n    /**\n     * Checks if the download was successful.\n     *\n     * @param download the download to check.\n     * @param tmpDir the directory where the download is currently stored.\n     */\n    private fun isDownloadSuccessful(\n        download: MangaDownload,\n        tmpDir: UniFile,\n    ): Boolean {\n        // Page list hasn't been initialized\n        val downloadPageCount = download.pages?.size ?: return false\n        // Ensure that all pages have been downloaded\n        if (download.downloadedImages != downloadPageCount) {\n            return false\n        }\n        // Ensure that the chapter folder has all the pages\n        val downloadedImagesCount = tmpDir.listFiles().orEmpty().count {\n            val fileName = it.name.orEmpty()\n            when {\n                fileName in listOf(COMIC_INFO_FILE, NOMEDIA_FILE) -> false\n                fileName.endsWith(\".tmp\") -> false\n                // Only count the first split page and not the others\n                fileName.contains(\"__\") && !fileName.endsWith(\"__001.jpg\") -> false\n                else -> true\n            }\n        }\n        return downloadedImagesCount == downloadPageCount\n    }\n\n    /**\n     * Archive the chapter pages as a CBZ.\n     */\n    private fun archiveChapter(\n        mangaDir: UniFile,\n        dirname: String,\n        tmpDir: UniFile,\n    ) {\n        val zip = mangaDir.createFile(\"$dirname.cbz$TMP_DIR_SUFFIX\")!!\n        ZipWriter(context, zip).use { writer ->\n            tmpDir.listFiles()?.forEach { file ->\n                writer.write(file)\n            }\n        }\n        zip.renameTo(\"$dirname.cbz\")\n        tmpDir.delete()\n    }\n\n    /**\n     * Creates a ComicInfo.xml file inside the given directory.\n     */\n    private suspend fun createComicInfoFile(\n        dir: UniFile,\n        manga: Manga,\n        chapter: Chapter,\n        source: HttpSource,\n    ) {\n        val categories = getCategories.await(manga.id).map { it.name.trim() }.takeUnless { it.isEmpty() }\n        val urls = getMangaTracks.await(manga.id)\n            .mapNotNull { track ->\n                track.remoteUrl.takeUnless { url -> url.isBlank() }?.trim()\n            }\n            .plus(source.getChapterUrl(chapter.toSChapter()).trim())\n            .distinct()\n\n        val comicInfo = getComicInfo(\n            manga,\n            chapter,\n            urls,\n            categories,\n            source.name,\n        )\n\n        // Remove the old file\n        dir.findFile(COMIC_INFO_FILE)?.delete()\n        dir.createFile(COMIC_INFO_FILE)!!.openOutputStream().use {\n            val comicInfoString = xml.encodeToString(ComicInfo.serializer(), comicInfo)\n            it.write(comicInfoString.toByteArray())\n        }\n    }\n\n    /**\n     * Returns true if all the queued downloads are in DOWNLOADED or ERROR state.\n     */\n    private fun areAllDownloadsFinished(): Boolean {\n        return queueState.value.none { it.status.value <= MangaDownload.State.DOWNLOADING.value }\n    }\n\n    private fun addAllToQueue(downloads: List<MangaDownload>) {\n        _queueState.update {\n            downloads.forEach { download ->\n                download.status = MangaDownload.State.QUEUE\n            }\n            store.addAll(downloads)\n            it + downloads\n        }\n    }\n\n    private fun removeFromQueue(download: MangaDownload) {\n        _queueState.update {\n            store.remove(download)\n            if (download.status == MangaDownload.State.DOWNLOADING || download.status == MangaDownload.State.QUEUE) {\n                download.status = MangaDownload.State.NOT_DOWNLOADED\n            }\n            it - download\n        }\n    }\n\n    private inline fun removeFromQueueIf(predicate: (MangaDownload) -> Boolean) {\n        _queueState.update { queue ->\n            val downloads = queue.filter { predicate(it) }\n            store.removeAll(downloads)\n            downloads.forEach { download ->\n                if (download.status == MangaDownload.State.DOWNLOADING ||\n                    download.status == MangaDownload.State.QUEUE\n                ) {\n                    download.status = MangaDownload.State.NOT_DOWNLOADED\n                }\n            }\n            queue - downloads\n        }\n    }\n\n    fun removeFromQueue(chapters: List<Chapter>) {\n        val chapterIds = chapters.map { it.id }\n        removeFromQueueIf { it.chapter.id in chapterIds }\n    }\n\n    fun removeFromQueue(manga: Manga) {\n        removeFromQueueIf { it.manga.id == manga.id }\n    }\n\n    private fun internalClearQueue() {\n        _queueState.update {\n            it.forEach { download ->\n                if (download.status == MangaDownload.State.DOWNLOADING ||\n                    download.status == MangaDownload.State.QUEUE\n                ) {\n                    download.status = MangaDownload.State.NOT_DOWNLOADED\n                }\n            }\n            store.clear()\n            emptyList()\n        }\n    }\n\n    fun updateQueue(downloads: List<MangaDownload>) {\n        val wasRunning = isRunning\n\n        if (downloads.isEmpty()) {\n            clearQueue()\n            stop()\n            return\n        }\n\n        pause()\n        internalClearQueue()\n        addAllToQueue(downloads)\n\n        if (wasRunning) {\n            start()\n        }\n    }\n\n    companion object {\n        const val TMP_DIR_SUFFIX = \"_tmp\"\n        const val WARNING_NOTIF_TIMEOUT_MS = 30_000L\n        const val CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 15\n        private const val DOWNLOADS_QUEUED_WARNING_THRESHOLD = 30\n    }\n}\n\n// Arbitrary minimum required space to start a download: 200 MB\nprivate const val MIN_DISK_SPACE = 200L * 1024 * 1024\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/download/manga/model/MangaDownload.kt",
    "content": "package eu.kanade.tachiyomi.data.download.manga.model\n\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.emitAll\nimport kotlinx.coroutines.flow.flow\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChapter\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ndata class MangaDownload(\n    val source: HttpSource,\n    val manga: Manga,\n    val chapter: Chapter,\n) {\n\n    var pages: List<Page>? = null\n\n    val totalProgress: Int\n        get() = pages?.sumOf(Page::progress) ?: 0\n\n    val downloadedImages: Int\n        get() = pages?.count { it.status == Page.State.READY } ?: 0\n\n    @Transient\n    private val _statusFlow = MutableStateFlow(State.NOT_DOWNLOADED)\n\n    @Transient\n    val statusFlow = _statusFlow.asStateFlow()\n    var status: State\n        get() = _statusFlow.value\n        set(status) {\n            _statusFlow.value = status\n        }\n\n    @Transient\n    val progressFlow = flow {\n        if (pages == null) {\n            emit(0)\n            while (pages == null) {\n                delay(50)\n            }\n        }\n\n        val progressFlows = pages!!.map(Page::progressFlow)\n        emitAll(combine(progressFlows) { it.average().toInt() })\n    }\n        .distinctUntilChanged()\n        .debounce(50)\n\n    val progress: Int\n        get() {\n            val pages = pages ?: return 0\n            return pages.map(Page::progress).average().toInt()\n        }\n\n    enum class State(val value: Int) {\n        NOT_DOWNLOADED(0),\n        QUEUE(1),\n        DOWNLOADING(2),\n        DOWNLOADED(3),\n        ERROR(4),\n    }\n\n    companion object {\n        suspend fun fromChapterId(\n            chapterId: Long,\n            getChapter: GetChapter = Injekt.get(),\n            getManga: GetManga = Injekt.get(),\n            sourceManager: MangaSourceManager = Injekt.get(),\n        ): MangaDownload? {\n            val chapter = getChapter.await(chapterId) ?: return null\n            val manga = getManga.await(chapter.mangaId) ?: return null\n            val source = sourceManager.get(manga.source) as? HttpSource ?: return null\n\n            return MangaDownload(source, manga, chapter)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/export/LibraryExporter.kt",
    "content": "package eu.kanade.tachiyomi.data.export\n\nimport android.content.Context\nimport android.net.Uri\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.manga.model.Manga\n\nenum class ExportEntryType {\n    MANGA,\n    ANIME,\n}\n\ndata class ExportEntry(\n    val type: ExportEntryType,\n    val title: String,\n    val author: String?,\n    val artist: String?,\n) {\n    companion object {\n        fun Anime.toExportEntry(): ExportEntry = ExportEntry(\n            title = this.title,\n            type = ExportEntryType.ANIME,\n            author = this.author,\n            artist = this.artist,\n        )\n\n        fun Manga.toExportEntry(): ExportEntry = ExportEntry(\n            title = this.title,\n            type = ExportEntryType.MANGA,\n            author = this.author,\n            artist = this.artist,\n        )\n    }\n}\n\nobject LibraryExporter {\n\n    data class ExportOptions(\n        val includeTitle: Boolean,\n        val includeType: Boolean,\n        val includeAuthor: Boolean,\n        val includeArtist: Boolean,\n    )\n\n    suspend fun exportToCsv(\n        context: Context,\n        uri: Uri,\n        favorites: List<ExportEntry>,\n        options: ExportOptions,\n        onExportComplete: () -> Unit,\n    ) {\n        withContext(Dispatchers.IO) {\n            context.contentResolver.openOutputStream(uri)?.use { outputStream ->\n                val csvData = generateCsvData(favorites, options)\n                outputStream.write(csvData.toByteArray())\n            }\n            onExportComplete()\n        }\n    }\n\n    private val escapeRequired = listOf(\"\\r\", \"\\n\", \"\\\"\", \",\")\n\n    private fun generateCsvData(favorites: List<ExportEntry>, options: ExportOptions): String {\n        val columnSize = listOf(\n            options.includeTitle,\n            options.includeType,\n            options.includeAuthor,\n            options.includeArtist,\n        )\n            .count { it }\n\n        val rows = buildList(favorites.size) {\n            favorites.forEach { entry ->\n                buildList(columnSize) {\n                    if (options.includeTitle) add(entry.title)\n                    if (options.includeType) add(entry.type.name.lowercase())\n                    if (options.includeAuthor) add(entry.author)\n                    if (options.includeArtist) add(entry.artist)\n                }\n                    .let(::add)\n            }\n        }\n        return rows.joinToString(\"\\r\\n\") { columns ->\n            columns.joinToString(\",\") columns@{ column ->\n                if (column.isNullOrBlank()) return@columns \"\"\n                if (escapeRequired.any { column.contains(it) }) {\n                    column.replace(\"\\\"\", \"\\\"\\\"\").let { \"\\\"$it\\\"\" }\n                } else {\n                    column\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateJob.kt",
    "content": "package eu.kanade.tachiyomi.data.library.anime\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.net.NetworkCapabilities\nimport android.net.NetworkRequest\nimport android.os.Build\nimport androidx.work.BackoffPolicy\nimport androidx.work.Constraints\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingPeriodicWorkPolicy\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.NetworkType\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.PeriodicWorkRequestBuilder\nimport androidx.work.WorkInfo\nimport androidx.work.WorkQuery\nimport androidx.work.WorkerParameters\nimport androidx.work.workDataOf\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.system.createFileInCacheDir\nimport eu.kanade.tachiyomi.util.system.isConnectedToWifi\nimport eu.kanade.tachiyomi.util.system.isRunning\nimport eu.kanade.tachiyomi.util.system.workManager\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.sync.Semaphore\nimport kotlinx.coroutines.sync.withPermit\nimport logcat.LogPriority\nimport mihon.domain.items.episode.interactor.FilterEpisodesForDownload\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.anime.interactor.AnimeFetchInterval\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.interactor.GetLibraryAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.NoEpisodesException\nimport tachiyomi.domain.items.season.interactor.GetAnimeSeasonsByParentId\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_HAS_UNVIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_VIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_OUTSIDE_RELEASE_PERIOD\nimport tachiyomi.domain.source.anime.model.AnimeSourceNotInstalledException\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport java.time.Instant\nimport java.time.ZonedDateTime\nimport java.util.concurrent.CopyOnWriteArrayList\nimport java.util.concurrent.TimeUnit\nimport java.util.concurrent.atomic.AtomicBoolean\nimport java.util.concurrent.atomic.AtomicInteger\n\nclass AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val sourceManager: AnimeSourceManager = Injekt.get()\n    private val libraryPreferences: LibraryPreferences = Injekt.get()\n    private val downloadManager: AnimeDownloadManager = Injekt.get()\n    private val coverCache: AnimeCoverCache = Injekt.get()\n    private val backgroundCache: AnimeBackgroundCache = Injekt.get()\n    private val getLibraryAnime: GetLibraryAnime = Injekt.get()\n    private val getAnime: GetAnime = Injekt.get()\n    private val updateAnime: UpdateAnime = Injekt.get()\n    private val syncEpisodesWithSource: SyncEpisodesWithSource = Injekt.get()\n    private val animeFetchInterval: AnimeFetchInterval = Injekt.get()\n    private val filterEpisodesForDownload: FilterEpisodesForDownload = Injekt.get()\n    private val getAnimeSeasonsByParentId: GetAnimeSeasonsByParentId = Injekt.get()\n\n    private val notifier = AnimeLibraryUpdateNotifier(context)\n\n    private var animeToUpdate: List<LibraryAnime> = mutableListOf()\n\n    override suspend fun doWork(): Result {\n        if (tags.contains(WORK_NAME_AUTO)) {\n            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {\n                val preferences = Injekt.get<LibraryPreferences>()\n                val restrictions = preferences.autoUpdateDeviceRestrictions().get()\n                if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) {\n                    return Result.retry()\n                }\n            }\n        }\n\n        try {\n            setForeground(getForegroundInfo())\n        } catch (e: IllegalStateException) {\n            logcat(LogPriority.ERROR, e) { \"Not allowed to set foreground job\" }\n        }\n\n        libraryPreferences.lastUpdatedTimestamp().set(Instant.now().toEpochMilli())\n\n        val categoryId = inputData.getLong(KEY_CATEGORY, -1L)\n        addAnimeToQueue(categoryId)\n\n        return withIOContext {\n            try {\n                updateEpisodeList()\n                Result.success()\n            } catch (e: Exception) {\n                if (e is CancellationException) {\n                    // Assume success although cancelled\n                    Result.success()\n                } else {\n                    logcat(LogPriority.ERROR, e)\n                    Result.failure()\n                }\n            } finally {\n                notifier.cancelProgressNotification()\n            }\n        }\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        val notifier = AnimeLibraryUpdateNotifier(context)\n        return ForegroundInfo(\n            Notifications.ID_LIBRARY_PROGRESS,\n            notifier.progressNotificationBuilder.build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n\n        )\n    }\n\n    /**\n     * Adds list of anime to be updated.\n     *\n     * @param categoryId the ID of the category to update, or -1 if no category specified.\n     */\n    private suspend fun addAnimeToQueue(categoryId: Long) {\n        val libraryAnime = getLibraryAnime.await()\n\n        val listToUpdate = if (categoryId != -1L) {\n            libraryAnime.filter { it.category == categoryId }\n        } else {\n            val categoriesToUpdate = libraryPreferences.animeUpdateCategories().get().map { it.toLong() }\n            val includedAnime = if (categoriesToUpdate.isNotEmpty()) {\n                libraryAnime.filter { it.category in categoriesToUpdate }\n            } else {\n                libraryAnime\n            }\n\n            val categoriesToExclude = libraryPreferences.animeUpdateCategoriesExclude().get().map { it.toLong() }\n            val excludedAnimeIds = if (categoriesToExclude.isNotEmpty()) {\n                libraryAnime.filter { it.category in categoriesToExclude }.map { it.anime.id }\n            } else {\n                emptyList()\n            }\n\n            includedAnime\n                .filterNot { it.anime.id in excludedAnimeIds }\n                .distinctBy { it.anime.id }\n        }\n\n        val includeSeasons = libraryPreferences.updateSeasonOnLibraryUpdate().get()\n        val lastToUpdateWithSeasons = listToUpdate.flatMap { libAnime ->\n            when (libAnime.anime.fetchType) {\n                FetchType.Seasons -> {\n                    if (includeSeasons) {\n                        val seasons = getAnimeSeasonsByParentId.await(libAnime.anime.id)\n                        seasons\n                            .filter { s ->\n                                s.anime.fetchType == FetchType.Episodes && !s.anime.favorite\n                            }\n                            .map { it.toLibraryAnime() }\n                    } else {\n                        emptyList()\n                    }\n                }\n                FetchType.Episodes -> listOf(libAnime)\n            }\n        }\n\n        val restrictions = libraryPreferences.autoUpdateItemRestrictions().get()\n        val skippedUpdates = mutableListOf<Pair<Anime, String?>>()\n        val (_, fetchWindowUpperBound) = animeFetchInterval.getWindow(ZonedDateTime.now())\n\n        animeToUpdate = lastToUpdateWithSeasons\n            .filter {\n                when {\n                    it.anime.updateStrategy != AnimeUpdateStrategy.ALWAYS_UPDATE -> {\n                        skippedUpdates.add(\n                            it.anime to context.stringResource(MR.strings.skipped_reason_not_always_update),\n                        )\n                        false\n                    }\n\n                    ENTRY_NON_COMPLETED in restrictions && it.anime.status.toInt() == SAnime.COMPLETED -> {\n                        skippedUpdates.add(\n                            it.anime to context.stringResource(MR.strings.skipped_reason_completed),\n                        )\n                        false\n                    }\n\n                    ENTRY_HAS_UNVIEWED in restrictions && it.unseenCount != 0L -> {\n                        skippedUpdates.add(\n                            it.anime to context.stringResource(MR.strings.skipped_reason_not_caught_up),\n                        )\n                        false\n                    }\n\n                    ENTRY_NON_VIEWED in restrictions && it.totalCount > 0L && !it.hasStarted -> {\n                        skippedUpdates.add(\n                            it.anime to context.stringResource(MR.strings.skipped_reason_not_started),\n                        )\n                        false\n                    }\n\n                    ENTRY_OUTSIDE_RELEASE_PERIOD in restrictions && it.anime.nextUpdate > fetchWindowUpperBound -> {\n                        skippedUpdates.add(\n                            it.anime to context.stringResource(MR.strings.skipped_reason_not_in_release_period),\n                        )\n                        false\n                    }\n                    else -> true\n                }\n            }\n            .sortedBy { it.anime.title }\n\n        notifier.showQueueSizeWarningNotificationIfNeeded(animeToUpdate)\n\n        if (skippedUpdates.isNotEmpty()) {\n            // TODO: surface skipped reasons to user?\n            logcat {\n                skippedUpdates\n                    .groupBy { it.second }\n                    .map { (reason, entries) -> \"$reason: [${entries.map { it.first.title }.sorted().joinToString()}]\" }\n                    .joinToString()\n            }\n        }\n    }\n\n    /**\n     * Method that updates anime in [animeToUpdate]. It's called in a background thread, so it's safe\n     * to do heavy operations or network calls here.\n     * For each anime it calls [updateAnime] and updates the notification showing the current\n     * progress.\n     *\n     * @return an observable delivering the progress of each update.\n     */\n    private suspend fun updateEpisodeList() {\n        val semaphore = Semaphore(5)\n        val progressCount = AtomicInteger(0)\n        val currentlyUpdatingAnime = CopyOnWriteArrayList<Anime>()\n        val newUpdates = CopyOnWriteArrayList<Pair<Anime, Array<Episode>>>()\n        val failedUpdates = CopyOnWriteArrayList<Pair<Anime, String?>>()\n        val hasDownloads = AtomicBoolean(false)\n        val fetchWindow = animeFetchInterval.getWindow(ZonedDateTime.now())\n\n        coroutineScope {\n            animeToUpdate.groupBy { it.anime.source }.values\n                .map { animeInSource ->\n                    async {\n                        semaphore.withPermit {\n                            animeInSource.forEach { libraryAnime ->\n                                val anime = libraryAnime.anime\n                                ensureActive()\n\n                                // Don't continue to update if anime is not in library\n                                if (anime.parentId == null && getAnime.await(anime.id)?.favorite != true) {\n                                    return@forEach\n                                }\n\n                                withUpdateNotification(\n                                    currentlyUpdatingAnime,\n                                    progressCount,\n                                    anime,\n                                ) {\n                                    try {\n                                        val newEpisodes = updateAnime(anime, fetchWindow)\n                                            .sortedByDescending { it.sourceOrder }\n\n                                        if (newEpisodes.isNotEmpty()) {\n                                            val episodesToDownload = filterEpisodesForDownload.await(anime, newEpisodes)\n\n                                            if (episodesToDownload.isNotEmpty()) {\n                                                hasDownloads.set(true)\n                                            }\n\n                                            libraryPreferences.newAnimeUpdatesCount()\n                                                .getAndSet { it + newEpisodes.size }\n\n                                            // Convert to the anime that contains new episodes\n                                            newUpdates.add(anime to newEpisodes.toTypedArray())\n                                        }\n                                    } catch (e: Throwable) {\n                                        val errorMessage = when (e) {\n                                            is NoEpisodesException -> context.stringResource(\n                                                AYMR.strings.no_episodes_error,\n                                            )\n                                            // failedUpdates will already have the source, don't need to copy it into the message\n                                            is AnimeSourceNotInstalledException -> context.stringResource(\n                                                MR.strings.loader_not_implemented_error,\n                                            )\n                                            else -> e.message\n                                        }\n                                        failedUpdates.add(anime to errorMessage)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                .awaitAll()\n        }\n\n        notifier.cancelProgressNotification()\n\n        if (newUpdates.isNotEmpty()) {\n            notifier.showUpdateNotifications(newUpdates)\n            if (hasDownloads.get()) {\n                downloadManager.startDownloads()\n            }\n        }\n\n        if (failedUpdates.isNotEmpty()) {\n            val errorFile = writeErrorFile(failedUpdates)\n            notifier.showUpdateErrorNotification(\n                failedUpdates.size,\n                errorFile.getUriCompat(context),\n            )\n        }\n    }\n\n    private fun downloadEpisodes(anime: Anime, episodes: List<Episode>) {\n        // We don't want to start downloading while the library is updating, because websites\n        // may don't like it and they could ban the user.\n        downloadManager.downloadEpisodes(anime, episodes, false)\n    }\n\n    /**\n     * Updates the episodes for the given anime and adds them to the database.\n     *\n     * @param anime the anime to update.\n     * @return a pair of the inserted and removed episodes.\n     */\n    private suspend fun updateAnime(anime: Anime, fetchWindow: Pair<Long, Long>): List<Episode> {\n        val source = sourceManager.getOrStub(anime.source)\n\n        // Update anime metadata if needed\n        if (libraryPreferences.autoUpdateMetadata().get()) {\n            val networkAnime = source.getAnimeDetails(anime.toSAnime())\n            updateAnime.awaitUpdateFromSource(anime, networkAnime, manualFetch = false, coverCache, backgroundCache)\n        }\n\n        val episodes = source.getEpisodeList(anime.toSAnime())\n\n        // Get anime from database to account for if it was removed during the update and\n        // to get latest data so it doesn't get overwritten later on\n        val dbAnime = getAnime.await(anime.id)?.takeIf { it.parentId != null || it.favorite } ?: return emptyList()\n\n        return syncEpisodesWithSource.await(episodes, dbAnime, source, false, fetchWindow)\n    }\n\n    private suspend fun withUpdateNotification(\n        updatingAnime: CopyOnWriteArrayList<Anime>,\n        completed: AtomicInteger,\n        anime: Anime,\n        block: suspend () -> Unit,\n    ) = coroutineScope {\n        ensureActive()\n\n        updatingAnime.add(anime)\n        notifier.showProgressNotification(\n            updatingAnime,\n            completed.get(),\n            animeToUpdate.size,\n        )\n\n        block()\n\n        ensureActive()\n\n        updatingAnime.remove(anime)\n        completed.getAndIncrement()\n        notifier.showProgressNotification(\n            updatingAnime,\n            completed.get(),\n            animeToUpdate.size,\n        )\n    }\n\n    /**\n     * Writes basic file of update errors to cache dir.\n     */\n    private fun writeErrorFile(errors: List<Pair<Anime, String?>>): File {\n        try {\n            if (errors.isNotEmpty()) {\n                val file = context.createFileInCacheDir(\"aniyomi_update_errors.txt\")\n                file.bufferedWriter().use { out ->\n                    out.write(\n                        context.stringResource(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + \"\\n\\n\",\n                    )\n                    // Error file format:\n                    // ! Error\n                    //   # Source\n                    //     - Anime\n                    errors.groupBy({ it.second }, { it.first }).forEach { (error, animes) ->\n                        out.write(\"\\n! ${error}\\n\")\n                        animes.groupBy { it.source }.forEach { (srcId, animes) ->\n                            val source = sourceManager.getOrStub(srcId)\n                            out.write(\"  # $source\\n\")\n                            animes.forEach {\n                                out.write(\"    - ${it.title}\\n\")\n                            }\n                        }\n                    }\n                }\n                return file\n            }\n        } catch (_: Exception) {}\n        return File(\"\")\n    }\n\n    companion object {\n        private const val TAG = \"AnimeLibraryUpdate\"\n        private const val WORK_NAME_AUTO = \"AnimeLibraryUpdate-auto\"\n        private const val WORK_NAME_MANUAL = \"AnimeLibraryUpdate-manual\"\n\n        private const val ERROR_LOG_HELP_URL = \"https://aniyomi.org/docs/guides/troubleshooting/\"\n\n        private const val ANIME_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60\n\n        /**\n         * Key for category to update.\n         */\n        private const val KEY_CATEGORY = \"animeCategory\"\n\n        fun cancelAllWorks(context: Context) {\n            context.workManager.cancelAllWorkByTag(TAG)\n        }\n\n        fun setupTask(\n            context: Context,\n            prefInterval: Int? = null,\n        ) {\n            val preferences = Injekt.get<LibraryPreferences>()\n            val interval = prefInterval ?: preferences.autoUpdateInterval().get()\n            if (interval > 0) {\n                val restrictions = preferences.autoUpdateDeviceRestrictions().get()\n                val networkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) {\n                    NetworkType.UNMETERED\n                } else {\n                    NetworkType.CONNECTED\n                }\n                val networkRequestBuilder = NetworkRequest.Builder()\n                if (DEVICE_ONLY_ON_WIFI in restrictions) {\n                    networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)\n                }\n                if (DEVICE_NETWORK_NOT_METERED in restrictions) {\n                    networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)\n                }\n                val constraints = Constraints.Builder()\n                    // 'networkRequest' only applies to Android 9+, otherwise 'networkType' is used\n                    .setRequiredNetworkRequest(networkRequestBuilder.build(), networkType)\n                    .setRequiresCharging(DEVICE_CHARGING in restrictions)\n                    .setRequiresBatteryNotLow(true)\n                    .build()\n\n                val request = PeriodicWorkRequestBuilder<AnimeLibraryUpdateJob>(\n                    interval.toLong(),\n                    TimeUnit.HOURS,\n                    10,\n                    TimeUnit.MINUTES,\n                )\n                    .addTag(TAG)\n                    .addTag(WORK_NAME_AUTO)\n                    .setConstraints(constraints)\n                    .setBackoffCriteria(BackoffPolicy.LINEAR, 10, TimeUnit.MINUTES)\n                    .build()\n\n                context.workManager.enqueueUniquePeriodicWork(\n                    WORK_NAME_AUTO,\n                    ExistingPeriodicWorkPolicy.UPDATE,\n                    request,\n                )\n            } else {\n                context.workManager.cancelUniqueWork(WORK_NAME_AUTO)\n            }\n        }\n        fun startNow(\n            context: Context,\n            category: Category? = null,\n        ): Boolean {\n            val wm = context.workManager\n            if (wm.isRunning(TAG)) {\n                // Already running either as a scheduled or manual job\n                return false\n            }\n\n            val inputData = workDataOf(\n                KEY_CATEGORY to category?.id,\n            )\n            val request = OneTimeWorkRequestBuilder<AnimeLibraryUpdateJob>()\n                .addTag(TAG)\n                .addTag(WORK_NAME_MANUAL)\n                .setInputData(inputData)\n                .build()\n            wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request)\n\n            return true\n        }\n\n        fun stop(context: Context) {\n            val wm = context.workManager\n            val workQuery = WorkQuery.Builder.fromTags(listOf(TAG))\n                .addStates(listOf(WorkInfo.State.RUNNING))\n                .build()\n            wm.getWorkInfos(workQuery).get()\n                // Should only return one work but just in case\n                .forEach {\n                    wm.cancelWorkById(it.id)\n\n                    // Re-enqueue cancelled scheduled work\n                    if (it.tags.contains(WORK_NAME_AUTO)) {\n                        setupTask(context)\n                    }\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateNotifier.kt",
    "content": "package eu.kanade.tachiyomi.data.library.anime\n\nimport android.app.Notification\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport android.graphics.BitmapFactory\nimport android.net.Uri\nimport androidx.core.app.NotificationCompat\nimport androidx.core.app.NotificationManagerCompat\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.ImageRequest\nimport coil3.request.transformations\nimport coil3.transform.CircleCropTransformation\nimport eu.kanade.presentation.util.formatEpisodeNumber\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloader\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.source.UnmeteredSource\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.util.lang.chop\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.getBitmapOrNull\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.math.RoundingMode\nimport java.text.NumberFormat\n\nclass AnimeLibraryUpdateNotifier(\n    private val context: Context,\n\n    private val securityPreferences: SecurityPreferences = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n) {\n\n    private val percentFormatter = NumberFormat.getPercentInstance().apply {\n        roundingMode = RoundingMode.DOWN\n        maximumFractionDigits = 0\n    }\n\n    /**\n     * Pending intent of action that cancels the library update\n     */\n    private val cancelIntent by lazy {\n        NotificationReceiver.cancelAnimelibUpdatePendingBroadcast(context)\n    }\n\n    /**\n     * Bitmap of the app for notifications.\n     */\n    private val notificationBitmap by lazy {\n        BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)\n    }\n\n    /**\n     * Cached progress notification to avoid creating a lot.\n     */\n    val progressNotificationBuilder by lazy {\n        context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) {\n            setContentTitle(context.stringResource(MR.strings.app_name))\n            setSmallIcon(R.drawable.ic_refresh_24dp)\n            setLargeIcon(notificationBitmap)\n            setOngoing(true)\n            setOnlyAlertOnce(true)\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel),\n                cancelIntent,\n            )\n        }\n    }\n\n    /**\n     * Shows the notification containing the currently updating anime and the progress.\n     *\n     * @param anime the anime that are being updated.\n     * @param current the current progress.\n     * @param total the total progress.\n     */\n    fun showProgressNotification(anime: List<Anime>, current: Int, total: Int) {\n        progressNotificationBuilder\n            .setContentTitle(\n                context.stringResource(\n                    MR.strings.notification_updating_progress,\n                    percentFormatter.format(current.toFloat() / total),\n                ),\n            )\n\n        if (!securityPreferences.hideNotificationContent().get()) {\n            val updatingText = anime.joinToString(\"\\n\") { it.title.chop(40) }\n            progressNotificationBuilder.setStyle(NotificationCompat.BigTextStyle().bigText(updatingText))\n        }\n\n        context.notify(\n            Notifications.ID_LIBRARY_PROGRESS,\n            progressNotificationBuilder\n                .setProgress(total, current, false)\n                .build(),\n        )\n    }\n\n    fun showQueueSizeWarningNotification() {\n        context.notify(\n            Notifications.ID_LIBRARY_SIZE_WARNING,\n            Notifications.CHANNEL_LIBRARY_PROGRESS,\n        ) {\n            setContentTitle(context.stringResource(MR.strings.label_warning))\n            setStyle(\n                NotificationCompat.BigTextStyle().bigText(\n                    context.stringResource(MR.strings.notification_size_warning),\n                ),\n            )\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            setTimeoutAfter(AnimeDownloader.WARNING_NOTIF_TIMEOUT_MS)\n            setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))\n        }\n    }\n\n    /**\n     * Warn when excessively checking any single source.\n     */\n    fun showQueueSizeWarningNotificationIfNeeded(animeToUpdate: List<LibraryAnime>) {\n        val maxUpdatesFromSource = animeToUpdate\n            .groupBy { it.anime.source }\n            .filterKeys { sourceManager.get(it) !is UnmeteredSource }\n            .maxOfOrNull { it.value.size } ?: 0\n\n        if (maxUpdatesFromSource <= ANIME_PER_SOURCE_QUEUE_WARNING_THRESHOLD) {\n            return\n        }\n\n        context.notify(\n            Notifications.ID_LIBRARY_SIZE_WARNING,\n            Notifications.CHANNEL_LIBRARY_PROGRESS,\n        ) {\n            setContentTitle(context.stringResource(MR.strings.label_warning))\n            setStyle(\n                NotificationCompat.BigTextStyle()\n                    .bigText(context.stringResource(MR.strings.notification_size_warning)),\n            )\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            setTimeoutAfter(AnimeDownloader.WARNING_NOTIF_TIMEOUT_MS)\n            setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))\n        }\n    }\n\n    /**\n     * Shows notification containing update entries that failed with action to open full log.\n     *\n     * @param failed Number of entries that failed to update.\n     * @param uri Uri for error log file containing all titles that failed.\n     */\n    fun showUpdateErrorNotification(failed: Int, uri: Uri) {\n        if (failed == 0) {\n            return\n        }\n\n        context.notify(\n            Notifications.ID_LIBRARY_ERROR,\n            Notifications.CHANNEL_LIBRARY_ERROR,\n        ) {\n            setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))\n            setContentText(context.stringResource(MR.strings.action_show_errors))\n            setSmallIcon(R.drawable.ic_ani)\n\n            setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))\n        }\n    }\n\n    /**\n     * Shows the notification containing the result of the update done by the service.\n     *\n     * @param updates a list of anime with new updates.\n     */\n    fun showUpdateNotifications(updates: List<Pair<Anime, Array<Episode>>>) {\n        // Parent group notification\n        context.notify(\n            Notifications.ID_NEW_EPISODES,\n            Notifications.CHANNEL_NEW_CHAPTERS_EPISODES,\n        ) {\n            setContentTitle(context.stringResource(AYMR.strings.notification_new_episodes))\n            if (updates.size == 1 && !securityPreferences.hideNotificationContent().get()) {\n                setContentText(updates.first().first.title.chop(NOTIF_TITLE_MAX_LEN))\n            } else {\n                setContentText(\n                    context.resources.getQuantityString(\n                        R.plurals.notification_new_episodes_summary,\n                        updates.size,\n                        updates.size,\n                    ),\n                )\n\n                if (!securityPreferences.hideNotificationContent().get()) {\n                    setStyle(\n                        NotificationCompat.BigTextStyle().bigText(\n                            updates.joinToString(\"\\n\") {\n                                it.first.title.chop(NOTIF_TITLE_MAX_LEN)\n                            },\n                        ),\n                    )\n                }\n            }\n\n            setSmallIcon(R.drawable.ic_ani)\n            setLargeIcon(notificationBitmap)\n\n            setGroup(Notifications.GROUP_NEW_EPISODES)\n            setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)\n            setGroupSummary(true)\n            priority = NotificationCompat.PRIORITY_HIGH\n\n            setContentIntent(getNotificationIntent())\n            setAutoCancel(true)\n        }\n\n        // Per-anime notification\n        if (!securityPreferences.hideNotificationContent().get()) {\n            launchUI {\n                context.notify(\n                    updates.map { (anime, episodes) ->\n                        NotificationManagerCompat.NotificationWithIdAndTag(\n                            anime.id.hashCode(),\n                            createNewEpisodesNotification(anime, episodes),\n                        )\n                    },\n                )\n            }\n        }\n    }\n\n    private suspend fun createNewEpisodesNotification(anime: Anime, episodes: Array<Episode>): Notification {\n        val icon = getAnimeIcon(anime)\n        return context.notificationBuilder(Notifications.CHANNEL_NEW_CHAPTERS_EPISODES) {\n            setContentTitle(anime.title)\n\n            val description = getNewEpisodesDescription(episodes)\n            setContentText(description)\n            setStyle(NotificationCompat.BigTextStyle().bigText(description))\n\n            setSmallIcon(R.drawable.ic_ani)\n\n            if (icon != null) {\n                setLargeIcon(icon)\n            }\n\n            setGroup(Notifications.GROUP_NEW_EPISODES)\n            setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)\n            priority = NotificationCompat.PRIORITY_HIGH\n\n            // Open first episode on tap\n            setContentIntent(\n                NotificationReceiver.openEpisodePendingActivity(context, anime, episodes.first()),\n            )\n            setAutoCancel(true)\n\n            // Mark episodes as read action\n            addAction(\n                R.drawable.ic_done_24dp,\n                context.stringResource(AYMR.strings.action_mark_as_seen),\n                NotificationReceiver.markAsViewedPendingBroadcast(\n                    context,\n                    anime,\n                    episodes,\n                    Notifications.ID_NEW_EPISODES,\n                ),\n            )\n            // View episodes action\n            addAction(\n                R.drawable.ic_book_24dp,\n                context.stringResource(AYMR.strings.action_view_episodes),\n                NotificationReceiver.openEpisodePendingActivity(\n                    context,\n                    anime,\n                    Notifications.ID_NEW_EPISODES,\n                ),\n            )\n            // Download chapters action\n            // Only add the action when chapters is within threshold\n            if (episodes.size <= AnimeDownloader.EPISODES_PER_SOURCE_QUEUE_WARNING_THRESHOLD) {\n                addAction(\n                    android.R.drawable.stat_sys_download_done,\n                    context.stringResource(MR.strings.action_download),\n                    NotificationReceiver.downloadEpisodesPendingBroadcast(\n                        context,\n                        anime,\n                        episodes,\n                        Notifications.ID_NEW_CHAPTERS,\n                    ),\n                )\n            }\n        }.build()\n    }\n\n    /**\n     * Cancels the progress notification.\n     */\n    fun cancelProgressNotification() {\n        context.cancelNotification(Notifications.ID_LIBRARY_PROGRESS)\n    }\n\n    private suspend fun getAnimeIcon(anime: Anime): Bitmap? {\n        val request = ImageRequest.Builder(context)\n            .data(anime)\n            .transformations(CircleCropTransformation())\n            .size(NOTIF_ICON_SIZE)\n            .build()\n        val drawable = context.imageLoader.execute(request).image?.asDrawable(context.resources)\n        return drawable?.getBitmapOrNull()\n    }\n\n    private fun getNewEpisodesDescription(episodes: Array<Episode>): String {\n        val displayableEpisodeNumbers = episodes\n            .filter { it.isRecognizedNumber }\n            .sortedBy { it.episodeNumber }\n            .map { formatEpisodeNumber(it.episodeNumber) }\n            .toSet()\n\n        return when (displayableEpisodeNumbers.size) {\n            // No sensible episode numbers to show (i.e. no episodes have parsed episode number)\n            0 -> {\n                // \"1 new episode\" or \"5 new episodes\"\n                context.resources.getQuantityString(\n                    R.plurals.notification_episodes_generic,\n                    episodes.size,\n                    episodes.size,\n                )\n            }\n            // Only 1 episode has a parsed episode number\n            1 -> {\n                val remaining = episodes.size - displayableEpisodeNumbers.size\n                if (remaining == 0) {\n                    // \"Episode 2.5\"\n                    context.stringResource(\n                        AYMR.strings.notification_episodes_single,\n                        displayableEpisodeNumbers.first(),\n                    )\n                } else {\n                    // \"Episode 2.5 and 10 more\"\n                    context.stringResource(\n                        AYMR.strings.notification_episodes_single_and_more,\n                        displayableEpisodeNumbers.first(),\n                        remaining,\n                    )\n                }\n            }\n            // Everything else (i.e. multiple parsed episode numbers)\n            else -> {\n                val shouldTruncate = displayableEpisodeNumbers.size > NOTIF_MAX_EPISODES\n                if (shouldTruncate) {\n                    // \"Episodes 1, 2.5, 3, 4, 5 and 10 more\"\n                    val remaining = displayableEpisodeNumbers.size - NOTIF_MAX_EPISODES\n                    val joinedEpisodeNumbers = displayableEpisodeNumbers.take(NOTIF_MAX_EPISODES).joinToString(\n                        \", \",\n                    )\n                    context.resources.getQuantityString(\n                        R.plurals.notification_episodes_multiple_and_more,\n                        remaining,\n                        joinedEpisodeNumbers,\n                        remaining,\n                    )\n                } else {\n                    // \"Episodes 1, 2.5, 3\"\n                    context.stringResource(\n                        AYMR.strings.notification_episodes_multiple,\n                        displayableEpisodeNumbers.joinToString(\", \"),\n                    )\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns an intent to open the main activity.\n     */\n    private fun getNotificationIntent(): PendingIntent {\n        val intent = Intent(context, MainActivity::class.java).apply {\n            flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP\n            action = Constants.SHORTCUT_UPDATES\n        }\n        return PendingIntent.getActivity(\n            context,\n            0,\n            intent,\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n        )\n    }\n\n    companion object {\n        const val HELP_WARNING_URL =\n            \"https://aniyomi.org/docs/faq/library#why-am-i-warned-about-large-bulk-updates-and-downloads\"\n    }\n}\n\nprivate const val NOTIF_MAX_EPISODES = 5\nprivate const val NOTIF_TITLE_MAX_LEN = 45\nprivate const val NOTIF_ICON_SIZE = 192\nprivate const val ANIME_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeMetadataUpdateJob.kt",
    "content": "package eu.kanade.tachiyomi.data.library.anime\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.os.Build\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkInfo\nimport androidx.work.WorkQuery\nimport androidx.work.WorkerParameters\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.copyFrom\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.prepUpdateBackground\nimport eu.kanade.tachiyomi.util.prepUpdateCover\nimport eu.kanade.tachiyomi.util.system.isRunning\nimport eu.kanade.tachiyomi.util.system.workManager\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.sync.Semaphore\nimport kotlinx.coroutines.sync.withPermit\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.interactor.GetLibraryAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.toAnimeUpdate\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.CopyOnWriteArrayList\nimport java.util.concurrent.atomic.AtomicInteger\n\nclass AnimeMetadataUpdateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val sourceManager: AnimeSourceManager = Injekt.get()\n    private val coverCache: AnimeCoverCache = Injekt.get()\n    private val backgroundCache: AnimeBackgroundCache = Injekt.get()\n    private val getLibraryAnime: GetLibraryAnime = Injekt.get()\n    private val updateAnime: UpdateAnime = Injekt.get()\n\n    private val notifier = AnimeLibraryUpdateNotifier(context)\n\n    private var animeToUpdate: List<LibraryAnime> = mutableListOf()\n\n    override suspend fun doWork(): Result {\n        try {\n            setForeground(getForegroundInfo())\n        } catch (e: IllegalStateException) {\n            logcat(LogPriority.ERROR, e) { \"Not allowed to set foreground job\" }\n        }\n\n        addAnimeToQueue()\n\n        return withIOContext {\n            try {\n                updateMetadata()\n                Result.success()\n            } catch (e: Exception) {\n                if (e is CancellationException) {\n                    // Assume success although cancelled\n                    Result.success()\n                } else {\n                    logcat(LogPriority.ERROR, e)\n                    Result.failure()\n                }\n            } finally {\n                notifier.cancelProgressNotification()\n            }\n        }\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        val notifier = AnimeLibraryUpdateNotifier(context)\n        return ForegroundInfo(\n            Notifications.ID_LIBRARY_PROGRESS,\n            notifier.progressNotificationBuilder.build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n\n        )\n    }\n\n    /**\n     * Adds list of anime to be updated.\n     */\n    private suspend fun addAnimeToQueue() {\n        animeToUpdate = getLibraryAnime.await()\n        notifier.showQueueSizeWarningNotificationIfNeeded(animeToUpdate)\n    }\n\n    private suspend fun updateMetadata() {\n        val semaphore = Semaphore(5)\n        val progressCount = AtomicInteger(0)\n        val currentlyUpdatingAnime = CopyOnWriteArrayList<Anime>()\n\n        coroutineScope {\n            animeToUpdate.groupBy { it.anime.source }\n                .values\n                .map { animeInSource ->\n                    async {\n                        semaphore.withPermit {\n                            animeInSource.forEach { libraryAnime ->\n                                val anime = libraryAnime.anime\n                                ensureActive()\n\n                                withUpdateNotification(\n                                    currentlyUpdatingAnime,\n                                    progressCount,\n                                    anime,\n                                ) {\n                                    val source = sourceManager.get(anime.source) ?: return@withUpdateNotification\n                                    try {\n                                        val networkAnime = source.getAnimeDetails(anime.toSAnime())\n                                        val updatedAnime = anime\n                                            .prepUpdateCover(coverCache, networkAnime, true)\n                                            .prepUpdateBackground(backgroundCache, networkAnime, true)\n                                            .copyFrom(networkAnime)\n                                        try {\n                                            updateAnime.await(updatedAnime.toAnimeUpdate())\n                                        } catch (e: Exception) {\n                                            logcat(LogPriority.ERROR) { \"Anime doesn't exist anymore\" }\n                                        }\n                                    } catch (e: Throwable) {\n                                        // Ignore errors and continue\n                                        logcat(LogPriority.ERROR, e)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                .awaitAll()\n        }\n\n        notifier.cancelProgressNotification()\n    }\n\n    private suspend fun withUpdateNotification(\n        updatingAnime: CopyOnWriteArrayList<Anime>,\n        completed: AtomicInteger,\n        anime: Anime,\n        block: suspend () -> Unit,\n    ) = coroutineScope {\n        ensureActive()\n\n        updatingAnime.add(anime)\n        notifier.showProgressNotification(\n            updatingAnime,\n            completed.get(),\n            animeToUpdate.size,\n        )\n\n        block()\n\n        ensureActive()\n\n        updatingAnime.remove(anime)\n        completed.getAndIncrement()\n        notifier.showProgressNotification(\n            updatingAnime,\n            completed.get(),\n            animeToUpdate.size,\n        )\n    }\n\n    companion object {\n        private const val TAG = \"MetadataUpdate\"\n        private const val WORK_NAME_MANUAL = \"MetadataUpdate\"\n\n        private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60\n\n        fun startNow(context: Context): Boolean {\n            val wm = context.workManager\n            if (wm.isRunning(TAG)) {\n                // Already running either as a scheduled or manual job\n                return false\n            }\n            val request = OneTimeWorkRequestBuilder<AnimeMetadataUpdateJob>()\n                .addTag(TAG)\n                .addTag(WORK_NAME_MANUAL)\n                .build()\n            wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request)\n\n            return true\n        }\n\n        fun stop(context: Context) {\n            val wm = context.workManager\n            val workQuery = WorkQuery.Builder.fromTags(listOf(TAG))\n                .addStates(listOf(WorkInfo.State.RUNNING))\n                .build()\n            wm.getWorkInfos(workQuery).get()\n                // Should only return one work but just in case\n                .forEach {\n                    wm.cancelWorkById(it.id)\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateJob.kt",
    "content": "package eu.kanade.tachiyomi.data.library.manga\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.net.NetworkCapabilities\nimport android.net.NetworkRequest\nimport android.os.Build\nimport androidx.work.BackoffPolicy\nimport androidx.work.Constraints\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingPeriodicWorkPolicy\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.NetworkType\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.PeriodicWorkRequestBuilder\nimport androidx.work.WorkInfo\nimport androidx.work.WorkQuery\nimport androidx.work.WorkerParameters\nimport androidx.work.workDataOf\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.source.model.UpdateStrategy\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.system.createFileInCacheDir\nimport eu.kanade.tachiyomi.util.system.isConnectedToWifi\nimport eu.kanade.tachiyomi.util.system.isRunning\nimport eu.kanade.tachiyomi.util.system.workManager\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.sync.Semaphore\nimport kotlinx.coroutines.sync.withPermit\nimport logcat.LogPriority\nimport mihon.domain.items.chapter.interactor.FilterChaptersForDownload\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.manga.interactor.GetLibraryManga\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.interactor.MangaFetchInterval\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.NoChaptersException\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_CHARGING\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_NETWORK_NOT_METERED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.DEVICE_ONLY_ON_WIFI\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_HAS_UNVIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_VIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_OUTSIDE_RELEASE_PERIOD\nimport tachiyomi.domain.source.manga.model.SourceNotInstalledException\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport java.time.Instant\nimport java.time.ZonedDateTime\nimport java.util.concurrent.CopyOnWriteArrayList\nimport java.util.concurrent.TimeUnit\nimport java.util.concurrent.atomic.AtomicBoolean\nimport java.util.concurrent.atomic.AtomicInteger\n\nclass MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val sourceManager: MangaSourceManager = Injekt.get()\n    private val libraryPreferences: LibraryPreferences = Injekt.get()\n    private val downloadManager: MangaDownloadManager = Injekt.get()\n    private val coverCache: MangaCoverCache = Injekt.get()\n    private val getLibraryManga: GetLibraryManga = Injekt.get()\n    private val getManga: GetManga = Injekt.get()\n    private val updateManga: UpdateManga = Injekt.get()\n    private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get()\n    private val mangaFetchInterval: MangaFetchInterval = Injekt.get()\n    private val filterChaptersForDownload: FilterChaptersForDownload = Injekt.get()\n\n    private val notifier = MangaLibraryUpdateNotifier(context)\n\n    private var mangaToUpdate: List<LibraryManga> = mutableListOf()\n\n    override suspend fun doWork(): Result {\n        if (tags.contains(WORK_NAME_AUTO)) {\n            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {\n                val preferences = Injekt.get<LibraryPreferences>()\n                val restrictions = preferences.autoUpdateDeviceRestrictions().get()\n                if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) {\n                    return Result.retry()\n                }\n            }\n\n            // Find a running manual worker. If exists, try again later\n            if (context.workManager.isRunning(WORK_NAME_MANUAL)) {\n                return Result.retry()\n            }\n        }\n\n        try {\n            setForeground(getForegroundInfo())\n        } catch (e: IllegalStateException) {\n            logcat(LogPriority.ERROR, e) { \"Not allowed to set foreground job\" }\n        }\n\n        libraryPreferences.lastUpdatedTimestamp().set(Instant.now().toEpochMilli())\n\n        val categoryId = inputData.getLong(KEY_CATEGORY, -1L)\n        addMangaToQueue(categoryId)\n\n        return withIOContext {\n            try {\n                updateChapterList()\n                Result.success()\n            } catch (e: Exception) {\n                if (e is CancellationException) {\n                    // Assume success although cancelled\n                    Result.success()\n                } else {\n                    logcat(LogPriority.ERROR, e)\n                    Result.failure()\n                }\n            } finally {\n                notifier.cancelProgressNotification()\n            }\n        }\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        val notifier = MangaLibraryUpdateNotifier(context)\n        return ForegroundInfo(\n            Notifications.ID_LIBRARY_PROGRESS,\n            notifier.progressNotificationBuilder.build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    /**\n     * Adds list of manga to be updated.\n     *\n     * @param categoryId the ID of the category to update, or -1 if no category specified.\n     */\n    private suspend fun addMangaToQueue(categoryId: Long) {\n        val libraryManga = getLibraryManga.await()\n\n        val listToUpdate = if (categoryId != -1L) {\n            libraryManga.filter { it.category == categoryId }\n        } else {\n            val categoriesToUpdate = libraryPreferences.mangaUpdateCategories().get().map { it.toLong() }\n            val includedManga = if (categoriesToUpdate.isNotEmpty()) {\n                libraryManga.filter { it.category in categoriesToUpdate }\n            } else {\n                libraryManga\n            }\n\n            val categoriesToExclude = libraryPreferences.mangaUpdateCategoriesExclude().get().map { it.toLong() }\n            val excludedMangaIds = if (categoriesToExclude.isNotEmpty()) {\n                libraryManga.filter { it.category in categoriesToExclude }.map { it.manga.id }\n            } else {\n                emptyList()\n            }\n\n            includedManga\n                .filterNot { it.manga.id in excludedMangaIds }\n                .distinctBy { it.manga.id }\n        }\n\n        val restrictions = libraryPreferences.autoUpdateItemRestrictions().get()\n        val skippedUpdates = mutableListOf<Pair<Manga, String?>>()\n        val (_, fetchWindowUpperBound) = mangaFetchInterval.getWindow(ZonedDateTime.now())\n\n        mangaToUpdate = listToUpdate\n            .filter {\n                when {\n                    it.manga.updateStrategy != UpdateStrategy.ALWAYS_UPDATE -> {\n                        skippedUpdates.add(\n                            it.manga to context.stringResource(MR.strings.skipped_reason_not_always_update),\n                        )\n                        false\n                    }\n\n                    ENTRY_NON_COMPLETED in restrictions && it.manga.status.toInt() == SManga.COMPLETED -> {\n                        skippedUpdates.add(\n                            it.manga to context.stringResource(MR.strings.skipped_reason_completed),\n                        )\n                        false\n                    }\n\n                    ENTRY_HAS_UNVIEWED in restrictions && it.unreadCount != 0L -> {\n                        skippedUpdates.add(\n                            it.manga to context.stringResource(MR.strings.skipped_reason_not_caught_up),\n                        )\n                        false\n                    }\n\n                    ENTRY_NON_VIEWED in restrictions && it.totalChapters > 0L && !it.hasStarted -> {\n                        skippedUpdates.add(\n                            it.manga to context.stringResource(MR.strings.skipped_reason_not_started),\n                        )\n                        false\n                    }\n\n                    ENTRY_OUTSIDE_RELEASE_PERIOD in restrictions && it.manga.nextUpdate > fetchWindowUpperBound -> {\n                        skippedUpdates.add(\n                            it.manga to context.stringResource(MR.strings.skipped_reason_not_in_release_period),\n                        )\n                        false\n                    }\n                    else -> true\n                }\n            }\n            .sortedBy { it.manga.title }\n\n        notifier.showQueueSizeWarningNotificationIfNeeded(mangaToUpdate)\n\n        if (skippedUpdates.isNotEmpty()) {\n            // TODO: surface skipped reasons to user?\n            logcat {\n                skippedUpdates\n                    .groupBy { it.second }\n                    .map { (reason, entries) -> \"$reason: [${entries.map { it.first.title }.sorted().joinToString()}]\" }\n                    .joinToString()\n            }\n        }\n    }\n\n    /**\n     * Method that updates manga in [mangaToUpdate]. It's called in a background thread, so it's safe\n     * to do heavy operations or network calls here.\n     * For each manga it calls [updateManga] and updates the notification showing the current\n     * progress.\n     *\n     * @return an observable delivering the progress of each update.\n     */\n    private suspend fun updateChapterList() {\n        val semaphore = Semaphore(5)\n        val progressCount = AtomicInteger(0)\n        val currentlyUpdatingManga = CopyOnWriteArrayList<Manga>()\n        val newUpdates = CopyOnWriteArrayList<Pair<Manga, Array<Chapter>>>()\n        val failedUpdates = CopyOnWriteArrayList<Pair<Manga, String?>>()\n        val hasDownloads = AtomicBoolean(false)\n        val fetchWindow = mangaFetchInterval.getWindow(ZonedDateTime.now())\n\n        coroutineScope {\n            mangaToUpdate.groupBy { it.manga.source }.values\n                .map { mangaInSource ->\n                    async {\n                        semaphore.withPermit {\n                            mangaInSource.forEach { libraryManga ->\n                                val manga = libraryManga.manga\n                                ensureActive()\n\n                                // Don't continue to update if manga is not in library\n                                if (getManga.await(manga.id)?.favorite != true) {\n                                    return@forEach\n                                }\n\n                                withUpdateNotification(\n                                    currentlyUpdatingManga,\n                                    progressCount,\n                                    manga,\n                                ) {\n                                    try {\n                                        val newChapters = updateManga(manga, fetchWindow)\n                                            .sortedByDescending { it.sourceOrder }\n\n                                        if (newChapters.isNotEmpty()) {\n                                            val chaptersToDownload = filterChaptersForDownload.await(manga, newChapters)\n                                            if (chaptersToDownload.isNotEmpty()) {\n                                                downloadChapters(manga, chaptersToDownload)\n                                                hasDownloads.set(true)\n                                            }\n                                            libraryPreferences.newMangaUpdatesCount()\n                                                .getAndSet { it + newChapters.size }\n\n                                            // Convert to the manga that contains new chapters\n                                            newUpdates.add(manga to newChapters.toTypedArray())\n                                        }\n                                    } catch (e: Throwable) {\n                                        val errorMessage = when (e) {\n                                            is NoChaptersException -> context.stringResource(\n                                                MR.strings.no_chapters_error,\n                                            )\n                                            // failedUpdates will already have the source, don't need to copy it into the message\n                                            is SourceNotInstalledException -> context.stringResource(\n                                                MR.strings.loader_not_implemented_error,\n                                            )\n                                            else -> e.message\n                                        }\n                                        failedUpdates.add(manga to errorMessage)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                .awaitAll()\n        }\n\n        notifier.cancelProgressNotification()\n\n        if (newUpdates.isNotEmpty()) {\n            notifier.showUpdateNotifications(newUpdates)\n            if (hasDownloads.get()) {\n                downloadManager.startDownloads()\n            }\n        }\n\n        if (failedUpdates.isNotEmpty()) {\n            val errorFile = writeErrorFile(failedUpdates)\n            notifier.showUpdateErrorNotification(\n                failedUpdates.size,\n                errorFile.getUriCompat(context),\n            )\n        }\n    }\n\n    private fun downloadChapters(manga: Manga, chapters: List<Chapter>) {\n        // We don't want to start downloading while the library is updating, because websites\n        // may don't like it and they could ban the user.\n        downloadManager.downloadChapters(manga, chapters, false)\n    }\n\n    /**\n     * Updates the chapters for the given manga and adds them to the database.\n     *\n     * @param manga the manga to update.\n     * @return a pair of the inserted and removed chapters.\n     */\n    private suspend fun updateManga(manga: Manga, fetchWindow: Pair<Long, Long>): List<Chapter> {\n        val source = sourceManager.getOrStub(manga.source)\n\n        // Update manga metadata if needed\n        if (libraryPreferences.autoUpdateMetadata().get()) {\n            val networkManga = source.getMangaDetails(manga.toSManga())\n            updateManga.awaitUpdateFromSource(manga, networkManga, manualFetch = false, coverCache)\n        }\n\n        val chapters = source.getChapterList(manga.toSManga())\n\n        // Get manga from database to account for if it was removed during the update and\n        // to get latest data so it doesn't get overwritten later on\n        val dbManga = getManga.await(manga.id)?.takeIf { it.favorite } ?: return emptyList()\n\n        return syncChaptersWithSource.await(chapters, dbManga, source, false, fetchWindow)\n    }\n\n    private suspend fun withUpdateNotification(\n        updatingManga: CopyOnWriteArrayList<Manga>,\n        completed: AtomicInteger,\n        manga: Manga,\n        block: suspend () -> Unit,\n    ) = coroutineScope {\n        ensureActive()\n\n        updatingManga.add(manga)\n        notifier.showProgressNotification(\n            updatingManga,\n            completed.get(),\n            mangaToUpdate.size,\n        )\n\n        block()\n\n        ensureActive()\n\n        updatingManga.remove(manga)\n        completed.getAndIncrement()\n        notifier.showProgressNotification(\n            updatingManga,\n            completed.get(),\n            mangaToUpdate.size,\n        )\n    }\n\n    /**\n     * Writes basic file of update errors to cache dir.\n     */\n    private fun writeErrorFile(errors: List<Pair<Manga, String?>>): File {\n        try {\n            if (errors.isNotEmpty()) {\n                val file = context.createFileInCacheDir(\"aniyomi_update_errors.txt\")\n                file.bufferedWriter().use { out ->\n                    out.write(\n                        context.stringResource(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + \"\\n\\n\",\n                    )\n                    // Error file format:\n                    // ! Error\n                    //   # Source\n                    //     - Manga\n                    errors.groupBy({ it.second }, { it.first }).forEach { (error, mangas) ->\n                        out.write(\"\\n! ${error}\\n\")\n                        mangas.groupBy { it.source }.forEach { (srcId, mangas) ->\n                            val source = sourceManager.getOrStub(srcId)\n                            out.write(\"  # $source\\n\")\n                            mangas.forEach {\n                                out.write(\"    - ${it.title}\\n\")\n                            }\n                        }\n                    }\n                }\n                return file\n            }\n        } catch (_: Exception) {}\n        return File(\"\")\n    }\n\n    companion object {\n        private const val TAG = \"LibraryUpdate\"\n        private const val WORK_NAME_AUTO = \"LibraryUpdate-auto\"\n        private const val WORK_NAME_MANUAL = \"LibraryUpdate-manual\"\n\n        private const val ERROR_LOG_HELP_URL = \"https://aniyomi.org/help/guides/troubleshooting\"\n        private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60\n\n        /**\n         * Key for category to update.\n         */\n        private const val KEY_CATEGORY = \"category\"\n\n        fun cancelAllWorks(context: Context) {\n            context.workManager.cancelAllWorkByTag(TAG)\n        }\n\n        fun setupTask(\n            context: Context,\n            prefInterval: Int? = null,\n        ) {\n            val preferences = Injekt.get<LibraryPreferences>()\n            val interval = prefInterval ?: preferences.autoUpdateInterval().get()\n            if (interval > 0) {\n                val restrictions = preferences.autoUpdateDeviceRestrictions().get()\n                val networkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) {\n                    NetworkType.UNMETERED\n                } else {\n                    NetworkType.CONNECTED\n                }\n                val networkRequestBuilder = NetworkRequest.Builder()\n                if (DEVICE_ONLY_ON_WIFI in restrictions) {\n                    networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)\n                }\n                if (DEVICE_NETWORK_NOT_METERED in restrictions) {\n                    networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)\n                }\n                val constraints = Constraints.Builder()\n                    // 'networkRequest' only applies to Android 9+, otherwise 'networkType' is used\n                    .setRequiredNetworkRequest(networkRequestBuilder.build(), networkType)\n                    .setRequiresCharging(DEVICE_CHARGING in restrictions)\n                    .setRequiresBatteryNotLow(true)\n                    .build()\n\n                val request = PeriodicWorkRequestBuilder<MangaLibraryUpdateJob>(\n                    interval.toLong(),\n                    TimeUnit.HOURS,\n                    10,\n                    TimeUnit.MINUTES,\n                )\n                    .addTag(TAG)\n                    .addTag(WORK_NAME_AUTO)\n                    .setConstraints(constraints)\n                    .setBackoffCriteria(BackoffPolicy.LINEAR, 10, TimeUnit.MINUTES)\n                    .build()\n\n                context.workManager.enqueueUniquePeriodicWork(\n                    WORK_NAME_AUTO,\n                    ExistingPeriodicWorkPolicy.UPDATE,\n                    request,\n                )\n            } else {\n                context.workManager.cancelUniqueWork(WORK_NAME_AUTO)\n            }\n        }\n\n        fun startNow(\n            context: Context,\n            category: Category? = null,\n        ): Boolean {\n            val wm = context.workManager\n            if (wm.isRunning(TAG)) {\n                // Already running either as a scheduled or manual job\n                return false\n            }\n\n            val inputData = workDataOf(\n                KEY_CATEGORY to category?.id,\n            )\n            val request = OneTimeWorkRequestBuilder<MangaLibraryUpdateJob>()\n                .addTag(TAG)\n                .addTag(WORK_NAME_MANUAL)\n                .setInputData(inputData)\n                .build()\n            wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request)\n\n            return true\n        }\n\n        fun stop(context: Context) {\n            val wm = context.workManager\n            val workQuery = WorkQuery.Builder.fromTags(listOf(TAG))\n                .addStates(listOf(WorkInfo.State.RUNNING))\n                .build()\n            wm.getWorkInfos(workQuery).get()\n                // Should only return one work but just in case\n                .forEach {\n                    wm.cancelWorkById(it.id)\n\n                    // Re-enqueue cancelled scheduled work\n                    if (it.tags.contains(WORK_NAME_AUTO)) {\n                        setupTask(context)\n                    }\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateNotifier.kt",
    "content": "package eu.kanade.tachiyomi.data.library.manga\n\nimport android.app.Notification\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport android.graphics.BitmapFactory\nimport android.net.Uri\nimport androidx.core.app.NotificationCompat\nimport androidx.core.app.NotificationManagerCompat\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.ImageRequest\nimport coil3.request.transformations\nimport coil3.transform.CircleCropTransformation\nimport eu.kanade.presentation.util.formatChapterNumber\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloader\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.source.UnmeteredSource\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.util.lang.chop\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.getBitmapOrNull\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.math.RoundingMode\nimport java.text.NumberFormat\n\nclass MangaLibraryUpdateNotifier(\n    private val context: Context,\n\n    private val securityPreferences: SecurityPreferences = Injekt.get(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n) {\n\n    private val percentFormatter = NumberFormat.getPercentInstance().apply {\n        roundingMode = RoundingMode.DOWN\n        maximumFractionDigits = 0\n    }\n\n    /**\n     * Pending intent of action that cancels the library update\n     */\n    private val cancelIntent by lazy {\n        NotificationReceiver.cancelLibraryUpdatePendingBroadcast(context)\n    }\n\n    /**\n     * Bitmap of the app for notifications.\n     */\n    private val notificationBitmap by lazy {\n        BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher)\n    }\n\n    /**\n     * Cached progress notification to avoid creating a lot.\n     */\n    val progressNotificationBuilder by lazy {\n        context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) {\n            setContentTitle(context.stringResource(MR.strings.app_name))\n            setSmallIcon(R.drawable.ic_refresh_24dp)\n            setLargeIcon(notificationBitmap)\n            setOngoing(true)\n            setOnlyAlertOnce(true)\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel),\n                cancelIntent,\n            )\n        }\n    }\n\n    /**\n     * Shows the notification containing the currently updating manga and the progress.\n     *\n     * @param manga the manga that are being updated.\n     * @param current the current progress.\n     * @param total the total progress.\n     */\n    fun showProgressNotification(manga: List<Manga>, current: Int, total: Int) {\n        progressNotificationBuilder\n            .setContentTitle(\n                context.stringResource(\n                    MR.strings.notification_updating_progress,\n                    percentFormatter.format(current.toFloat() / total),\n                ),\n            )\n\n        if (!securityPreferences.hideNotificationContent().get()) {\n            val updatingText = manga.joinToString(\"\\n\") { it.title.chop(40) }\n            progressNotificationBuilder.setStyle(NotificationCompat.BigTextStyle().bigText(updatingText))\n        }\n\n        context.notify(\n            Notifications.ID_LIBRARY_PROGRESS,\n            progressNotificationBuilder\n                .setProgress(total, current, false)\n                .build(),\n        )\n    }\n\n    /**\n     * Warn when excessively checking any single source.\n     */\n    fun showQueueSizeWarningNotificationIfNeeded(mangaToUpdate: List<LibraryManga>) {\n        val maxUpdatesFromSource = mangaToUpdate\n            .groupBy { it.manga.source }\n            .filterKeys { sourceManager.get(it) !is UnmeteredSource }\n            .maxOfOrNull { it.value.size } ?: 0\n\n        if (maxUpdatesFromSource <= MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD) {\n            return\n        }\n\n        context.notify(\n            Notifications.ID_LIBRARY_SIZE_WARNING,\n            Notifications.CHANNEL_LIBRARY_PROGRESS,\n        ) {\n            setContentTitle(context.stringResource(MR.strings.label_warning))\n            setStyle(\n                NotificationCompat.BigTextStyle()\n                    .bigText(context.stringResource(MR.strings.notification_size_warning)),\n            )\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            setTimeoutAfter(MangaDownloader.WARNING_NOTIF_TIMEOUT_MS)\n            setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))\n        }\n    }\n\n    /**\n     * Shows notification containing update entries that failed with action to open full log.\n     *\n     * @param failed Number of entries that failed to update.\n     * @param uri Uri for error log file containing all titles that failed.\n     */\n    fun showUpdateErrorNotification(failed: Int, uri: Uri) {\n        if (failed == 0) {\n            return\n        }\n\n        context.notify(\n            Notifications.ID_LIBRARY_ERROR,\n            Notifications.CHANNEL_LIBRARY_ERROR,\n        ) {\n            setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))\n            setContentText(context.stringResource(MR.strings.action_show_errors))\n            setSmallIcon(R.drawable.ic_ani)\n\n            setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))\n        }\n    }\n\n    /**\n     * Shows the notification containing the result of the update done by the service.\n     *\n     * @param updates a list of manga with new updates.\n     */\n    fun showUpdateNotifications(updates: List<Pair<Manga, Array<Chapter>>>) {\n        // Parent group notification\n        context.notify(\n            Notifications.ID_NEW_CHAPTERS,\n            Notifications.CHANNEL_NEW_CHAPTERS_EPISODES,\n        ) {\n            setContentTitle(context.stringResource(MR.strings.notification_new_chapters))\n            if (updates.size == 1 && !securityPreferences.hideNotificationContent().get()) {\n                setContentText(updates.first().first.title.chop(NOTIF_TITLE_MAX_LEN))\n            } else {\n                setContentText(\n                    context.resources.getQuantityString(\n                        R.plurals.notification_new_chapters_summary,\n                        updates.size,\n                        updates.size,\n                    ),\n                )\n\n                if (!securityPreferences.hideNotificationContent().get()) {\n                    setStyle(\n                        NotificationCompat.BigTextStyle().bigText(\n                            updates.joinToString(\"\\n\") {\n                                it.first.title.chop(NOTIF_TITLE_MAX_LEN)\n                            },\n                        ),\n                    )\n                }\n            }\n\n            setSmallIcon(R.drawable.ic_ani)\n            setLargeIcon(notificationBitmap)\n\n            setGroup(Notifications.GROUP_NEW_CHAPTERS)\n            setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)\n            setGroupSummary(true)\n            priority = NotificationCompat.PRIORITY_HIGH\n\n            setContentIntent(getNotificationIntent())\n            setAutoCancel(true)\n        }\n\n        // Per-manga notification\n        if (!securityPreferences.hideNotificationContent().get()) {\n            launchUI {\n                context.notify(\n                    updates.map { (manga, chapters) ->\n                        NotificationManagerCompat.NotificationWithIdAndTag(\n                            manga.id.hashCode(),\n                            createNewChaptersNotification(manga, chapters),\n                        )\n                    },\n                )\n            }\n        }\n    }\n\n    private suspend fun createNewChaptersNotification(manga: Manga, chapters: Array<Chapter>): Notification {\n        val icon = getMangaIcon(manga)\n        return context.notificationBuilder(Notifications.CHANNEL_NEW_CHAPTERS_EPISODES) {\n            setContentTitle(manga.title)\n\n            val description = getNewChaptersDescription(chapters)\n            setContentText(description)\n            setStyle(NotificationCompat.BigTextStyle().bigText(description))\n\n            setSmallIcon(R.drawable.ic_ani)\n\n            if (icon != null) {\n                setLargeIcon(icon)\n            }\n\n            setGroup(Notifications.GROUP_NEW_CHAPTERS)\n            setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY)\n            priority = NotificationCompat.PRIORITY_HIGH\n\n            // Open first chapter on tap\n            setContentIntent(\n                NotificationReceiver.openChapterPendingActivity(\n                    context,\n                    manga,\n                    chapters.first(),\n                ),\n            )\n            setAutoCancel(true)\n\n            // Mark chapters as read action\n            addAction(\n                R.drawable.ic_done_24dp,\n                context.stringResource(MR.strings.action_mark_as_read),\n                NotificationReceiver.markAsViewedPendingBroadcast(\n                    context,\n                    manga,\n                    chapters,\n                    Notifications.ID_NEW_CHAPTERS,\n                ),\n            )\n            // View chapters action\n            addAction(\n                R.drawable.ic_book_24dp,\n                context.stringResource(MR.strings.action_view_chapters),\n                NotificationReceiver.openChapterPendingActivity(\n                    context,\n                    manga,\n                    Notifications.ID_NEW_CHAPTERS,\n                ),\n            )\n            // Download chapters action\n            // Only add the action when chapters is within threshold\n            if (chapters.size <= MangaDownloader.CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD) {\n                addAction(\n                    android.R.drawable.stat_sys_download_done,\n                    context.stringResource(MR.strings.action_download),\n                    NotificationReceiver.downloadChaptersPendingBroadcast(\n                        context,\n                        manga,\n                        chapters,\n                        Notifications.ID_NEW_CHAPTERS,\n                    ),\n                )\n            }\n        }.build()\n    }\n\n    /**\n     * Cancels the progress notification.\n     */\n    fun cancelProgressNotification() {\n        context.cancelNotification(Notifications.ID_LIBRARY_PROGRESS)\n    }\n\n    private suspend fun getMangaIcon(manga: Manga): Bitmap? {\n        val request = ImageRequest.Builder(context)\n            .data(manga)\n            .transformations(CircleCropTransformation())\n            .size(NOTIF_ICON_SIZE)\n            .build()\n        val drawable = context.imageLoader.execute(request).image?.asDrawable(context.resources)\n        return drawable?.getBitmapOrNull()\n    }\n\n    private fun getNewChaptersDescription(chapters: Array<Chapter>): String {\n        val displayableChapterNumbers = chapters\n            .filter { it.isRecognizedNumber }\n            .sortedBy { it.chapterNumber }\n            .map { formatChapterNumber(it.chapterNumber) }\n            .toSet()\n\n        return when (displayableChapterNumbers.size) {\n            // No sensible chapter numbers to show (i.e. no chapters have parsed chapter number)\n            0 -> {\n                // \"1 new chapter\" or \"5 new chapters\"\n                context.resources.getQuantityString(\n                    R.plurals.notification_chapters_generic,\n                    chapters.size,\n                    chapters.size,\n                )\n            }\n            // Only 1 chapter has a parsed chapter number\n            1 -> {\n                val remaining = chapters.size - displayableChapterNumbers.size\n                if (remaining == 0) {\n                    // \"Chapter 2.5\"\n                    context.stringResource(\n                        MR.strings.notification_chapters_single,\n                        displayableChapterNumbers.first(),\n                    )\n                } else {\n                    // \"Chapter 2.5 and 10 more\"\n                    context.stringResource(\n                        MR.strings.notification_chapters_single_and_more,\n                        displayableChapterNumbers.first(),\n                        remaining,\n                    )\n                }\n            }\n            // Everything else (i.e. multiple parsed chapter numbers)\n            else -> {\n                val shouldTruncate = displayableChapterNumbers.size > NOTIF_MAX_CHAPTERS\n                if (shouldTruncate) {\n                    // \"Chapters 1, 2.5, 3, 4, 5 and 10 more\"\n                    val remaining = displayableChapterNumbers.size - NOTIF_MAX_CHAPTERS\n                    val joinedChapterNumbers = displayableChapterNumbers.take(NOTIF_MAX_CHAPTERS).joinToString(\n                        \", \",\n                    )\n                    context.resources.getQuantityString(\n                        R.plurals.notification_chapters_multiple_and_more,\n                        remaining,\n                        joinedChapterNumbers,\n                        remaining,\n                    )\n                } else {\n                    // \"Chapters 1, 2.5, 3\"\n                    context.stringResource(\n                        MR.strings.notification_chapters_multiple,\n                        displayableChapterNumbers.joinToString(\", \"),\n                    )\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns an intent to open the main activity.\n     */\n    private fun getNotificationIntent(): PendingIntent {\n        val intent = Intent(context, MainActivity::class.java).apply {\n            flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP\n            action = Constants.SHORTCUT_UPDATES\n        }\n        return PendingIntent.getActivity(\n            context,\n            0,\n            intent,\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n        )\n    }\n\n    companion object {\n        // TODO: Change when implemented on Aniyomi website\n        const val HELP_WARNING_URL =\n            \"https://aniyomi.org/docs/faq/library#why-am-i-warned-about-large-bulk-updates-and-downloads\"\n    }\n}\n\nprivate const val NOTIF_MAX_CHAPTERS = 5\nprivate const val NOTIF_TITLE_MAX_LEN = 45\nprivate const val NOTIF_ICON_SIZE = 192\nprivate const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaMetadataUpdateJob.kt",
    "content": "package eu.kanade.tachiyomi.data.library.manga\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.os.Build\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkInfo\nimport androidx.work.WorkQuery\nimport androidx.work.WorkerParameters\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.copyFrom\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.prepUpdateCover\nimport eu.kanade.tachiyomi.util.system.isRunning\nimport eu.kanade.tachiyomi.util.system.workManager\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.sync.Semaphore\nimport kotlinx.coroutines.sync.withPermit\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.interactor.GetLibraryManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.toMangaUpdate\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.CopyOnWriteArrayList\nimport java.util.concurrent.atomic.AtomicInteger\n\nclass MangaMetadataUpdateJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val sourceManager: MangaSourceManager = Injekt.get()\n    private val coverCache: MangaCoverCache = Injekt.get()\n    private val getLibraryManga: GetLibraryManga = Injekt.get()\n    private val updateManga: UpdateManga = Injekt.get()\n\n    private val notifier = MangaLibraryUpdateNotifier(context)\n\n    private var mangaToUpdate: List<LibraryManga> = mutableListOf()\n\n    override suspend fun doWork(): Result {\n        try {\n            setForeground(getForegroundInfo())\n        } catch (e: IllegalStateException) {\n            logcat(LogPriority.ERROR, e) { \"Not allowed to set foreground job\" }\n        }\n\n        addMangaToQueue()\n\n        return withIOContext {\n            try {\n                updateMetadata()\n                Result.success()\n            } catch (e: Exception) {\n                if (e is CancellationException) {\n                    // Assume success although cancelled\n                    Result.success()\n                } else {\n                    logcat(LogPriority.ERROR, e)\n                    Result.failure()\n                }\n            } finally {\n                notifier.cancelProgressNotification()\n            }\n        }\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        val notifier = MangaLibraryUpdateNotifier(context)\n        return ForegroundInfo(\n            Notifications.ID_LIBRARY_PROGRESS,\n            notifier.progressNotificationBuilder.build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    /**\n     * Adds list of manga to be updated.\n     */\n    private suspend fun addMangaToQueue() {\n        mangaToUpdate = getLibraryManga.await()\n        notifier.showQueueSizeWarningNotificationIfNeeded(mangaToUpdate)\n    }\n\n    private suspend fun updateMetadata() {\n        val semaphore = Semaphore(5)\n        val progressCount = AtomicInteger(0)\n        val currentlyUpdatingManga = CopyOnWriteArrayList<Manga>()\n\n        coroutineScope {\n            mangaToUpdate.groupBy { it.manga.source }\n                .values\n                .map { mangaInSource ->\n                    async {\n                        semaphore.withPermit {\n                            mangaInSource.forEach { libraryManga ->\n                                val manga = libraryManga.manga\n                                ensureActive()\n\n                                withUpdateNotification(\n                                    currentlyUpdatingManga,\n                                    progressCount,\n                                    manga,\n                                ) {\n                                    val source = sourceManager.get(manga.source) ?: return@withUpdateNotification\n                                    try {\n                                        val networkManga = source.getMangaDetails(manga.toSManga())\n                                        val updatedManga = manga.prepUpdateCover(coverCache, networkManga, true)\n                                            .copyFrom(networkManga)\n                                        try {\n                                            updateManga.await(updatedManga.toMangaUpdate())\n                                        } catch (e: Exception) {\n                                            logcat(LogPriority.ERROR) { \"Manga doesn't exist anymore\" }\n                                        }\n                                    } catch (e: Throwable) {\n                                        // Ignore errors and continue\n                                        logcat(LogPriority.ERROR, e)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                .awaitAll()\n        }\n\n        notifier.cancelProgressNotification()\n    }\n\n    private suspend fun withUpdateNotification(\n        updatingManga: CopyOnWriteArrayList<Manga>,\n        completed: AtomicInteger,\n        manga: Manga,\n        block: suspend () -> Unit,\n    ) = coroutineScope {\n        ensureActive()\n\n        updatingManga.add(manga)\n        notifier.showProgressNotification(\n            updatingManga,\n            completed.get(),\n            mangaToUpdate.size,\n        )\n\n        block()\n\n        ensureActive()\n\n        updatingManga.remove(manga)\n        completed.getAndIncrement()\n        notifier.showProgressNotification(\n            updatingManga,\n            completed.get(),\n            mangaToUpdate.size,\n        )\n    }\n\n    companion object {\n        private const val TAG = \"MetadataUpdate\"\n        private const val WORK_NAME_MANUAL = \"MetadataUpdate\"\n\n        private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60\n\n        fun startNow(context: Context): Boolean {\n            val wm = context.workManager\n            if (wm.isRunning(TAG)) {\n                // Already running either as a scheduled or manual job\n                return false\n            }\n            val request = OneTimeWorkRequestBuilder<MangaMetadataUpdateJob>()\n                .addTag(TAG)\n                .addTag(WORK_NAME_MANUAL)\n                .build()\n            wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request)\n\n            return true\n        }\n\n        fun stop(context: Context) {\n            val wm = context.workManager\n            val workQuery = WorkQuery.Builder.fromTags(listOf(TAG))\n                .addStates(listOf(WorkInfo.State.RUNNING))\n                .build()\n            wm.getWorkInfos(workQuery).get()\n                // Should only return one work but just in case\n                .forEach {\n                    wm.cancelWorkById(it.id)\n                }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationHandler.kt",
    "content": "package eu.kanade.tachiyomi.data.notification\n\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstaller\nimport eu.kanade.tachiyomi.ui.main.MainActivity\n\n/**\n * Class that manages [PendingIntent] of activity's\n */\nobject NotificationHandler {\n    /**\n     * Returns [PendingIntent] that starts a download activity.\n     *\n     * @param context context of application\n     */\n    internal fun openDownloadManagerPendingActivity(context: Context): PendingIntent {\n        val intent = Intent(context, MainActivity::class.java).apply {\n            flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP\n            action = Constants.SHORTCUT_DOWNLOADS\n        }\n        return PendingIntent.getActivity(\n            context,\n            0,\n            intent,\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n        )\n    }\n\n    /**\n     * Returns [PendingIntent] that starts a download activity.\n     *\n     * @param context context of application\n     */\n    internal fun openAnimeDownloadManagerPendingActivity(context: Context): PendingIntent {\n        val intent = Intent(context, MainActivity::class.java).apply {\n            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_REORDER_TO_FRONT\n            action = Constants.SHORTCUT_ANIME_DOWNLOADS\n        }\n        return PendingIntent.getActivity(\n            context,\n            0,\n            intent,\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n        )\n    }\n\n    /**\n     * Returns [PendingIntent] that starts a gallery activity\n     *\n     * @param context context of application\n     * @param file file containing image\n     */\n    internal fun openImagePendingActivity(context: Context, uri: Uri): PendingIntent {\n        val intent = Intent(Intent.ACTION_VIEW).apply {\n            setDataAndType(uri, \"image/*\")\n            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION\n        }\n        return PendingIntent.getActivity(\n            context,\n            0,\n            intent,\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n        )\n    }\n\n    /**\n     * Returns [PendingIntent] that prompts user with apk install intent\n     *\n     * @param context context\n     * @param uri uri of apk that is installed\n     */\n    fun installApkPendingActivity(context: Context, uri: Uri): PendingIntent {\n        val intent = Intent(Intent.ACTION_VIEW).apply {\n            setDataAndType(uri, MangaExtensionInstaller.APK_MIME)\n            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION\n        }\n        return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)\n    }\n\n    fun openUrl(context: Context, url: String): PendingIntent {\n        val notificationIntent = Intent(Intent.ACTION_VIEW, url.toUri())\n        return PendingIntent.getActivity(\n            context,\n            0,\n            notificationIntent,\n            PendingIntent.FLAG_IMMUTABLE,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt",
    "content": "package eu.kanade.tachiyomi.data.notification\n\nimport android.app.PendingIntent\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.updater.AppUpdateDownloadJob\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.player.PlayerActivity\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.getParcelableExtraCompat\nimport eu.kanade.tachiyomi.util.system.notificationManager\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.runBlocking\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChapter\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.toChapterUpdate\nimport tachiyomi.domain.items.episode.interactor.GetEpisode\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.toEpisodeUpdate\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport eu.kanade.tachiyomi.BuildConfig.APPLICATION_ID as ID\n\n/**\n * Global [BroadcastReceiver] that runs on UI thread\n * Pending Broadcasts should be made from here.\n * NOTE: Use local broadcasts if possible.\n */\nclass NotificationReceiver : BroadcastReceiver() {\n\n    private val getManga: GetManga by injectLazy()\n    private val getAnime: GetAnime by injectLazy()\n    private val getChapter: GetChapter by injectLazy()\n    private val getEpisode: GetEpisode by injectLazy()\n    private val updateChapter: UpdateChapter by injectLazy()\n    private val updateEpisode: UpdateEpisode by injectLazy()\n    private val mangaDownloadManager: MangaDownloadManager by injectLazy()\n    private val animeDownloadManager: AnimeDownloadManager by injectLazy()\n\n    override fun onReceive(context: Context, intent: Intent) {\n        when (intent.action) {\n            // Dismiss notification\n            ACTION_DISMISS_NOTIFICATION -> dismissNotification(\n                context,\n                intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1),\n            )\n            // Resume the download service\n            ACTION_RESUME_DOWNLOADS -> mangaDownloadManager.startDownloads()\n            // Pause the download service\n            ACTION_PAUSE_DOWNLOADS -> mangaDownloadManager.pauseDownloads()\n            // Clear the download queue\n            ACTION_CLEAR_DOWNLOADS -> mangaDownloadManager.clearQueue()\n            ACTION_RESUME_ANIME_DOWNLOADS -> animeDownloadManager.startDownloads()\n            // Pause the download service\n            ACTION_PAUSE_ANIME_DOWNLOADS -> animeDownloadManager.pauseDownloads()\n            // Clear the download queue\n            ACTION_CLEAR_ANIME_DOWNLOADS -> animeDownloadManager.clearQueue()\n            // Launch share activity and dismiss notification\n            ACTION_SHARE_IMAGE ->\n                shareImage(\n                    context,\n                    intent.getStringExtra(EXTRA_URI)!!.toUri(),\n                )\n            // Share backup file\n            ACTION_SHARE_BACKUP ->\n                shareFile(\n                    context,\n                    intent.getParcelableExtraCompat(EXTRA_URI)!!,\n                    \"application/x-protobuf+gzip\",\n                )\n            ACTION_CANCEL_RESTORE -> cancelRestore(context)\n            // Cancel library update and dismiss notification\n            ACTION_CANCEL_LIBRARY_UPDATE -> cancelLibraryUpdate(context)\n            ACTION_CANCEL_ANIMELIB_UPDATE -> cancelAnimelibUpdate(context)\n            // Start downloading app update\n            ACTION_START_APP_UPDATE -> startDownloadAppUpdate(context, intent)\n            // Cancel downloading app update\n            ACTION_CANCEL_APP_UPDATE_DOWNLOAD -> cancelDownloadAppUpdate(context)\n            // Open reader activity\n            ACTION_OPEN_CHAPTER -> {\n                openChapter(\n                    context,\n                    intent.getLongExtra(EXTRA_MANGA_ID, -1),\n                    intent.getLongExtra(EXTRA_CHAPTER_ID, -1),\n                )\n            }\n            // Open player activity\n            ACTION_OPEN_EPISODE -> {\n                openEpisode(\n                    context,\n                    intent.getLongExtra(EXTRA_MANGA_ID, -1),\n                    intent.getLongExtra(EXTRA_CHAPTER_ID, -1),\n                )\n            }\n            // Mark updated manga chapters as read\n            ACTION_MARK_AS_READ -> {\n                val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)\n                if (notificationId > -1) {\n                    dismissNotification(\n                        context,\n                        notificationId,\n                        intent.getIntExtra(EXTRA_GROUP_ID, 0),\n                    )\n                }\n                val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return\n                val mangaId = intent.getLongExtra(EXTRA_MANGA_ID, -1)\n                if (mangaId > -1) {\n                    markAsRead(urls, mangaId)\n                }\n            }\n            // Mark updated anime episodes as seen\n            ACTION_MARK_AS_SEEN -> {\n                val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)\n                if (notificationId > -1) {\n                    dismissNotification(\n                        context,\n                        notificationId,\n                        intent.getIntExtra(EXTRA_GROUP_ID, 0),\n                    )\n                }\n                val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return\n                val animeId = intent.getLongExtra(EXTRA_MANGA_ID, -1)\n                if (animeId > -1) {\n                    markAsSeen(urls, animeId)\n                }\n            }\n            // Download manga chapters\n            ACTION_DOWNLOAD_CHAPTER -> {\n                val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)\n                if (notificationId > -1) {\n                    dismissNotification(\n                        context,\n                        notificationId,\n                        intent.getIntExtra(EXTRA_GROUP_ID, 0),\n                    )\n                }\n                val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return\n                val mangaId = intent.getLongExtra(EXTRA_MANGA_ID, -1)\n                if (mangaId > -1) {\n                    downloadChapters(urls, mangaId)\n                }\n            }\n            // Download anime episodes\n            ACTION_DOWNLOAD_EPISODE -> {\n                val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)\n                if (notificationId > -1) {\n                    dismissNotification(\n                        context,\n                        notificationId,\n                        intent.getIntExtra(EXTRA_GROUP_ID, 0),\n                    )\n                }\n                val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return\n                val animeId = intent.getLongExtra(EXTRA_MANGA_ID, -1)\n                if (animeId > -1) {\n                    downloadEpisodes(urls, animeId)\n                }\n            }\n        }\n    }\n\n    /**\n     * Dismiss the notification\n     *\n     * @param notificationId the id of the notification\n     */\n    private fun dismissNotification(context: Context, notificationId: Int) {\n        context.cancelNotification(notificationId)\n        context.notificationManager.cancelAll()\n    }\n\n    /**\n     * Called to start share intent to share image\n     *\n     * @param context context of application\n     * @param uri path of file\n     */\n    private fun shareImage(context: Context, uri: Uri) {\n        context.startActivity(uri.toShareIntent(context))\n    }\n\n    /**\n     * Called to start share intent to share backup file\n     *\n     * @param context context of application\n     * @param path path of file\n     */\n    private fun shareFile(context: Context, uri: Uri, fileMimeType: String) {\n        context.startActivity(uri.toShareIntent(context, fileMimeType))\n    }\n\n    /**\n     * Starts reader activity\n     *\n     * @param context context of application\n     * @param mangaId id of manga\n     * @param chapterId id of chapter\n     */\n    private fun openChapter(context: Context, mangaId: Long, chapterId: Long) {\n        val manga = runBlocking { getManga.await(mangaId) }\n        val chapter = runBlocking { getChapter.await(chapterId) }\n        if (manga != null && chapter != null) {\n            val intent = ReaderActivity.newIntent(context, manga.id, chapter.id).apply {\n                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP\n            }\n            context.startActivity(intent)\n        } else {\n            context.toast(context.stringResource(AYMR.strings.download_error))\n        }\n    }\n\n    /**\n     * Starts player activity\n     *\n     * @param context context of application\n     * @param animeId id of anime\n     * @param episodeId id of episode\n     */\n    private fun openEpisode(context: Context, animeId: Long, episodeId: Long) {\n        val anime = runBlocking { getAnime.await(animeId) }\n        val episode = runBlocking { getEpisode.await(episodeId) }\n        if (anime != null && episode != null) {\n            val intent = PlayerActivity.newIntent(context, anime.id, episode.id).apply {\n                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP\n            }\n            context.startActivity(intent)\n        } else {\n            context.toast(context.stringResource(AYMR.strings.download_error))\n        }\n    }\n\n    /**\n     * Method called when user wants to stop a backup restore job.\n     *\n     * @param context context of application\n     */\n    private fun cancelRestore(context: Context) {\n        BackupRestoreJob.stop(context)\n    }\n\n    /**\n     * Method called when user wants to stop a library update\n     *\n     * @param context context of application\n     */\n    private fun cancelLibraryUpdate(context: Context) {\n        MangaLibraryUpdateJob.stop(context)\n    }\n\n    /**\n     * Method called when user wants to stop a library update\n     *\n     * @param context context of application\n     */\n    private fun cancelAnimelibUpdate(context: Context) {\n        AnimeLibraryUpdateJob.stop(context)\n    }\n\n    private fun startDownloadAppUpdate(context: Context, intent: Intent) {\n        val url = intent.getStringExtra(AppUpdateDownloadJob.EXTRA_DOWNLOAD_URL) ?: return\n        AppUpdateDownloadJob.start(context, url)\n    }\n\n    private fun cancelDownloadAppUpdate(context: Context) {\n        AppUpdateDownloadJob.stop(context)\n    }\n\n    /**\n     * Method called when user wants to mark manga chapters as read\n     *\n     * @param chapterUrls URLs of chapter to mark as read\n     * @param mangaId id of manga\n     */\n    private fun markAsRead(chapterUrls: Array<String>, mangaId: Long) {\n        val downloadPreferences: DownloadPreferences = Injekt.get()\n        val sourceManager: MangaSourceManager = Injekt.get()\n\n        launchIO {\n            val toUpdate = chapterUrls.mapNotNull { getChapter.await(it, mangaId) }\n                .map {\n                    val chapter = it.copy(read = true)\n                    if (downloadPreferences.removeAfterMarkedAsRead().get()) {\n                        val manga = getManga.await(mangaId)\n                        if (manga != null) {\n                            val source = sourceManager.get(manga.source)\n                            if (source != null) {\n                                mangaDownloadManager.deleteChapters(listOf(it), manga, source)\n                            }\n                        }\n                    }\n                    chapter.toChapterUpdate()\n                }\n            updateChapter.awaitAll(toUpdate)\n        }\n    }\n\n    /**\n     * Method called when user wants to mark anime episodes as seen\n     *\n     * @param episodeUrls URLs of episodes to mark as seen\n     * @param animeId id of anime\n     */\n    private fun markAsSeen(episodeUrls: Array<String>, animeId: Long) {\n        val downloadPreferences: DownloadPreferences = Injekt.get()\n        val sourceManager: AnimeSourceManager = Injekt.get()\n\n        launchIO {\n            val toUpdate = episodeUrls.mapNotNull { getEpisode.await(it, animeId) }\n                .map {\n                    val episode = it.copy(seen = true)\n                    if (downloadPreferences.removeAfterMarkedAsRead().get()) {\n                        val anime = getAnime.await(animeId)\n                        if (anime != null) {\n                            val source = sourceManager.get(anime.source)\n                            if (source != null) {\n                                animeDownloadManager.deleteEpisodes(listOf(it), anime, source)\n                            }\n                        }\n                    }\n                    episode.toEpisodeUpdate()\n                }\n            updateEpisode.awaitAll(toUpdate)\n        }\n    }\n\n    /**\n     * Method called when user wants to download chapters\n     *\n     * @param chapterUrls URLs of chapter to download\n     * @param mangaId id of manga\n     */\n    private fun downloadChapters(chapterUrls: Array<String>, mangaId: Long) {\n        launchIO {\n            val manga = getManga.await(mangaId) ?: return@launchIO\n            val chapters = chapterUrls.mapNotNull { getChapter.await(it, mangaId) }\n            mangaDownloadManager.downloadChapters(manga, chapters)\n        }\n    }\n\n    /**\n     * Method called when user wants to download episodes\n     *\n     * @param episodeUrls URLs of episode to download\n     * @param animeId id of manga\n     */\n    private fun downloadEpisodes(episodeUrls: Array<String>, animeId: Long) {\n        launchIO {\n            val anime = getAnime.await(animeId) ?: return@launchIO\n            val episodes = episodeUrls.mapNotNull { getEpisode.await(it, animeId) }\n            animeDownloadManager.downloadEpisodes(anime, episodes)\n        }\n    }\n\n    companion object {\n        private const val NAME = \"NotificationReceiver\"\n\n        private const val ACTION_SHARE_IMAGE = \"$ID.$NAME.SHARE_IMAGE\"\n\n        private const val ACTION_SHARE_BACKUP = \"$ID.$NAME.SEND_BACKUP\"\n\n        private const val ACTION_CANCEL_RESTORE = \"$ID.$NAME.CANCEL_RESTORE\"\n\n        private const val ACTION_CANCEL_LIBRARY_UPDATE = \"$ID.$NAME.CANCEL_LIBRARY_UPDATE\"\n        private const val ACTION_CANCEL_ANIMELIB_UPDATE = \"$ID.$NAME.CANCEL_ANIMELIB_UPDATE\"\n\n        private const val ACTION_START_APP_UPDATE = \"$ID.$NAME.ACTION_START_APP_UPDATE\"\n        private const val ACTION_CANCEL_APP_UPDATE_DOWNLOAD = \"$ID.$NAME.CANCEL_APP_UPDATE_DOWNLOAD\"\n\n        private const val ACTION_MARK_AS_READ = \"$ID.$NAME.MARK_AS_READ\"\n        private const val ACTION_MARK_AS_SEEN = \"$ID.$NAME.MARK_AS_SEEN\"\n        private const val ACTION_OPEN_CHAPTER = \"$ID.$NAME.ACTION_OPEN_CHAPTER\"\n        private const val ACTION_OPEN_EPISODE = \"$ID.$NAME.ACTION_OPEN_EPISODE\"\n        private const val ACTION_DOWNLOAD_CHAPTER = \"$ID.$NAME.ACTION_DOWNLOAD_CHAPTER\"\n        private const val ACTION_DOWNLOAD_EPISODE = \"$ID.$NAME.ACTION_DOWNLOAD_EPISODE\"\n\n        private const val ACTION_OPEN_ENTRY = \"$ID.$NAME.ACTION_OPEN_ENTRY\"\n\n        private const val ACTION_RESUME_DOWNLOADS = \"$ID.$NAME.ACTION_RESUME_DOWNLOADS\"\n        private const val ACTION_PAUSE_DOWNLOADS = \"$ID.$NAME.ACTION_PAUSE_DOWNLOADS\"\n        private const val ACTION_CLEAR_DOWNLOADS = \"$ID.$NAME.ACTION_CLEAR_DOWNLOADS\"\n\n        private const val ACTION_RESUME_ANIME_DOWNLOADS = \"$ID.$NAME.ACTION_RESUME_ANIME_DOWNLOADS\"\n        private const val ACTION_PAUSE_ANIME_DOWNLOADS = \"$ID.$NAME.ACTION_PAUSE_ANIME_DOWNLOADS\"\n        private const val ACTION_CLEAR_ANIME_DOWNLOADS = \"$ID.$NAME.ACTION_CLEAR_ANIME_DOWNLOADS\"\n\n        private const val ACTION_DISMISS_NOTIFICATION = \"$ID.$NAME.ACTION_DISMISS_NOTIFICATION\"\n\n        private const val EXTRA_URI = \"$ID.$NAME.URI\"\n        private const val EXTRA_NOTIFICATION_ID = \"$ID.$NAME.NOTIFICATION_ID\"\n        private const val EXTRA_GROUP_ID = \"$ID.$NAME.EXTRA_GROUP_ID\"\n        private const val EXTRA_MANGA_ID = \"$ID.$NAME.EXTRA_MANGA_ID\"\n        private const val EXTRA_CHAPTER_ID = \"$ID.$NAME.EXTRA_CHAPTER_ID\"\n        private const val EXTRA_CHAPTER_URL = \"$ID.$NAME.EXTRA_CHAPTER_URL\"\n\n        /**\n         * Returns a [PendingIntent] that resumes the download of a chapter\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun resumeDownloadsPendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_RESUME_DOWNLOADS\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that pauses the download queue\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun pauseDownloadsPendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_PAUSE_DOWNLOADS\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns a [PendingIntent] that clears the download queue\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun clearDownloadsPendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_CLEAR_DOWNLOADS\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns a [PendingIntent] that resumes the download of a chapter\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun resumeAnimeDownloadsPendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_RESUME_ANIME_DOWNLOADS\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that pauses the download queue\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun pauseAnimeDownloadsPendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_PAUSE_ANIME_DOWNLOADS\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns a [PendingIntent] that clears the download queue\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun clearAnimeDownloadsPendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_CLEAR_ANIME_DOWNLOADS\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a service which dismissed the notification\n         *\n         * @param context context of application\n         * @param notificationId id of notification\n         * @return [PendingIntent]\n         */\n        internal fun dismissNotificationPendingBroadcast(context: Context, notificationId: Int): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_DISMISS_NOTIFICATION\n                putExtra(EXTRA_NOTIFICATION_ID, notificationId)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a service which dismissed the notification\n         *\n         * @param context context of application\n         * @param notificationId id of notification\n         * @return [PendingIntent]\n         */\n        internal fun dismissNotification(\n            context: Context,\n            notificationId: Int,\n            groupId: Int? = null,\n        ) {\n            /*\n            Group notifications always have at least 2 notifications:\n            - Group summary notification\n            - Single manga notification\n\n            If the single notification is dismissed by the system, ie by a user swipe or tapping on the notification,\n            it will auto dismiss the group notification if there's no other single updates.\n\n            When programmatically dismissing this notification, the group notification is not automatically dismissed.\n             */\n            val groupKey = context.notificationManager.activeNotifications.find {\n                it.id == notificationId\n            }?.groupKey\n\n            if (groupId != null && groupId != 0 && !groupKey.isNullOrEmpty()) {\n                val notifications = context.notificationManager.activeNotifications.filter {\n                    it.groupKey == groupKey\n                }\n\n                if (notifications.size == 2) {\n                    context.cancelNotification(groupId)\n                    return\n                }\n            }\n\n            context.cancelNotification(notificationId)\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a share activity\n         *\n         * @param context context of application\n         * @param uri location path of file\n         * @param notificationId id of notification\n         * @return [PendingIntent]\n         */\n        internal fun shareImagePendingBroadcast(context: Context, uri: Uri): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_SHARE_IMAGE\n                putExtra(EXTRA_URI, uri.toString())\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a watcher activity containing episode.\n         *\n         * @param context context of application\n         * @param anime anime of episode\n         * @param episode episode that needs to be opened\n         */\n        internal fun openEpisodePendingActivity(context: Context, anime: Anime, episode: Episode): PendingIntent {\n            val newIntent = PlayerActivity.newIntent(context, anime.id, episode.id)\n            return PendingIntent.getActivity(\n                context,\n                anime.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the anime info controller.\n         *\n         * @param context context of application\n         * @param anime anime of episode\n         */\n        internal fun openEpisodePendingActivity(context: Context, anime: Anime, groupId: Int): PendingIntent {\n            val newIntent =\n                Intent(context, MainActivity::class.java).setAction(Constants.SHORTCUT_ANIME)\n                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n                    .putExtra(Constants.ANIME_EXTRA, anime.id)\n                    .putExtra(\"notificationId\", anime.id.hashCode())\n                    .putExtra(\"groupId\", groupId)\n            return PendingIntent.getActivity(\n                context,\n                anime.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that marks an episode as seen and deletes it if preferred\n         *\n         * @param context context of application\n         * @param anime anime of episode\n         */\n        internal fun markAsViewedPendingBroadcast(\n            context: Context,\n            anime: Anime,\n            episodes: Array<Episode>,\n            groupId: Int,\n        ): PendingIntent {\n            val newIntent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_MARK_AS_SEEN\n                putExtra(EXTRA_CHAPTER_URL, episodes.map { it.url }.toTypedArray())\n                putExtra(EXTRA_MANGA_ID, anime.id)\n                putExtra(EXTRA_NOTIFICATION_ID, anime.id.hashCode())\n                putExtra(EXTRA_GROUP_ID, groupId)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                anime.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a reader activity containing chapter.\n         *\n         * @param context context of application\n         * @param manga manga of chapter\n         * @param chapter chapter that needs to be opened\n         */\n        internal fun openChapterPendingActivity(context: Context, manga: Manga, chapter: Chapter): PendingIntent {\n            val newIntent = ReaderActivity.newIntent(context, manga.id, chapter.id)\n            return PendingIntent.getActivity(\n                context,\n                manga.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the manga info controller.\n         *\n         * @param context context of application\n         * @param manga manga of chapter\n         */\n        internal fun openChapterPendingActivity(context: Context, manga: Manga, groupId: Int): PendingIntent {\n            val newIntent =\n                Intent(context, MainActivity::class.java).setAction(Constants.SHORTCUT_MANGA)\n                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n                    .putExtra(Constants.MANGA_EXTRA, manga.id)\n                    .putExtra(\"notificationId\", manga.id.hashCode())\n                    .putExtra(\"groupId\", groupId)\n            return PendingIntent.getActivity(\n                context,\n                manga.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that marks a chapter as read and deletes it if preferred\n         *\n         * @param context context of application\n         * @param manga manga of chapter\n         */\n        internal fun markAsViewedPendingBroadcast(\n            context: Context,\n            manga: Manga,\n            chapters: Array<Chapter>,\n            groupId: Int,\n        ): PendingIntent {\n            val newIntent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_MARK_AS_READ\n                putExtra(EXTRA_CHAPTER_URL, chapters.map { it.url }.toTypedArray())\n                putExtra(EXTRA_MANGA_ID, manga.id)\n                putExtra(EXTRA_NOTIFICATION_ID, manga.id.hashCode())\n                putExtra(EXTRA_GROUP_ID, groupId)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                manga.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that downloads chapters\n         *\n         * @param context context of application\n         * @param manga manga of chapter\n         */\n        internal fun downloadChaptersPendingBroadcast(\n            context: Context,\n            manga: Manga,\n            chapters: Array<Chapter>,\n            groupId: Int,\n        ): PendingIntent {\n            val newIntent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_DOWNLOAD_CHAPTER\n                putExtra(EXTRA_CHAPTER_URL, chapters.map { it.url }.toTypedArray())\n                putExtra(EXTRA_MANGA_ID, manga.id)\n                putExtra(EXTRA_NOTIFICATION_ID, manga.id.hashCode())\n                putExtra(EXTRA_GROUP_ID, groupId)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                manga.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that downloads episodes\n         *\n         * @param context context of application\n         * @param anime anime of episode\n         */\n        internal fun downloadEpisodesPendingBroadcast(\n            context: Context,\n            anime: Anime,\n            episodes: Array<Episode>,\n            groupId: Int,\n        ): PendingIntent {\n            val newIntent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_DOWNLOAD_EPISODE\n                putExtra(EXTRA_CHAPTER_URL, episodes.map { it.url }.toTypedArray())\n                putExtra(EXTRA_MANGA_ID, anime.id)\n                putExtra(EXTRA_NOTIFICATION_ID, anime.id.hashCode())\n                putExtra(EXTRA_GROUP_ID, groupId)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                anime.id.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the manga info controller\n         *\n         * @param context context of application\n         * @param mangaId id of the entry to open\n         */\n        internal fun openMangaEntryPendingActivity(context: Context, mangaId: Long): PendingIntent {\n            val newIntent = Intent(context, MainActivity::class.java).setAction(Constants.SHORTCUT_MANGA)\n                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n                .putExtra(Constants.MANGA_EXTRA, mangaId)\n                .putExtra(\"notificationId\", mangaId.hashCode())\n            return PendingIntent.getActivity(\n                context,\n                mangaId.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the anime info controller\n         *\n         * @param context context of application\n         * @param animeId id of the entry to open\n         */\n        internal fun openAnimeEntryPendingActivity(context: Context, animeId: Long): PendingIntent {\n            val newIntent = Intent(context, MainActivity::class.java).setAction(Constants.SHORTCUT_ANIME)\n                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n                .putExtra(Constants.ANIME_EXTRA, animeId)\n                .putExtra(\"notificationId\", animeId.hashCode())\n            return PendingIntent.getActivity(\n                context,\n                animeId.hashCode(),\n                newIntent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a service which stops the library update\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun cancelLibraryUpdatePendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_CANCEL_LIBRARY_UPDATE\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a service which stops the library update\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun cancelAnimelibUpdatePendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_CANCEL_ANIMELIB_UPDATE\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts the [AppUpdateDownloadJob] to download an app update.\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun downloadAppUpdatePendingBroadcast(\n            context: Context,\n            url: String,\n            title: String? = null,\n        ): PendingIntent {\n            return Intent(context, NotificationReceiver::class.java).run {\n                action = ACTION_START_APP_UPDATE\n                putExtra(AppUpdateDownloadJob.EXTRA_DOWNLOAD_URL, url)\n                title?.let { putExtra(AppUpdateDownloadJob.EXTRA_DOWNLOAD_TITLE, it) }\n                PendingIntent.getBroadcast(\n                    context,\n                    0,\n                    this,\n                    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n                )\n            }\n        }\n\n        /**\n         *\n         */\n        internal fun cancelDownloadAppUpdatePendingBroadcast(context: Context): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_CANCEL_APP_UPDATE_DOWNLOAD\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the extensions controller.\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun openExtensionsPendingActivity(context: Context): PendingIntent {\n            val intent = Intent(context, MainActivity::class.java).apply {\n                action = Constants.SHORTCUT_EXTENSIONS\n                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n            }\n            return PendingIntent.getActivity(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the extensions controller.\n         *\n         * @param context context of application\n         * @return [PendingIntent]\n         */\n        internal fun openAnimeExtensionsPendingActivity(context: Context): PendingIntent {\n            val intent = Intent(context, MainActivity::class.java).apply {\n                action = Constants.SHORTCUT_ANIMEEXTENSIONS\n                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n            }\n            return PendingIntent.getActivity(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that starts a share activity for a backup file.\n         *\n         * @param context context of application\n         * @param uri uri of backup file\n         * @return [PendingIntent]\n         */\n        internal fun shareBackupPendingBroadcast(context: Context, uri: Uri): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_SHARE_BACKUP\n                putExtra(EXTRA_URI, uri)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        /**\n         * Returns [PendingIntent] that opens the error log file in an external viewer\n         *\n         * @param context context of application\n         * @param uri uri of error log file\n         * @return [PendingIntent]\n         */\n        internal fun openErrorLogPendingActivity(context: Context, uri: Uri): PendingIntent {\n            val intent = Intent().apply {\n                action = Intent.ACTION_VIEW\n                setDataAndType(uri, \"text/plain\")\n                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION\n            }\n            return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)\n        }\n\n        /**\n         * Returns [PendingIntent] that cancels a backup restore job.\n         *\n         * @param context context of application\n         * @param notificationId id of notification\n         * @return [PendingIntent]\n         */\n        internal fun cancelRestorePendingBroadcast(context: Context, notificationId: Int): PendingIntent {\n            val intent = Intent(context, NotificationReceiver::class.java).apply {\n                action = ACTION_CANCEL_RESTORE\n                putExtra(EXTRA_NOTIFICATION_ID, notificationId)\n            }\n            return PendingIntent.getBroadcast(\n                context,\n                0,\n                intent,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt",
    "content": "package eu.kanade.tachiyomi.data.notification\n\nimport android.content.Context\nimport androidx.core.app.NotificationManagerCompat\nimport androidx.core.app.NotificationManagerCompat.IMPORTANCE_DEFAULT\nimport androidx.core.app.NotificationManagerCompat.IMPORTANCE_HIGH\nimport androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW\nimport eu.kanade.tachiyomi.util.system.buildNotificationChannel\nimport eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\n/**\n * Class to manage the basic information of all the notifications used in the app.\n */\nobject Notifications {\n\n    /**\n     * Common notification channel and ids used anywhere.\n     */\n    const val CHANNEL_COMMON = \"common_channel\"\n    const val ID_DOWNLOAD_IMAGE = 2\n\n    /**\n     * Notification channel and ids used by the library updater.\n     */\n    private const val GROUP_LIBRARY = \"group_library\"\n    const val CHANNEL_LIBRARY_PROGRESS = \"library_progress_channel\"\n    const val ID_LIBRARY_PROGRESS = -101\n    const val ID_LIBRARY_SIZE_WARNING = -103\n    const val CHANNEL_LIBRARY_ERROR = \"library_errors_channel\"\n    const val ID_LIBRARY_ERROR = -102\n\n    /**\n     * Notification channel and ids used by the downloader.\n     */\n    private const val GROUP_DOWNLOADER = \"group_downloader\"\n    const val CHANNEL_DOWNLOADER_PROGRESS = \"downloader_progress_channel\"\n    const val ID_DOWNLOAD_CHAPTER_PROGRESS = -201\n    const val ID_DOWNLOAD_EPISODE_PROGRESS = -203\n    const val CHANNEL_DOWNLOADER_ERROR = \"downloader_error_channel\"\n    const val ID_DOWNLOAD_CHAPTER_ERROR = -202\n    const val ID_DOWNLOAD_EPISODE_ERROR = -204\n\n    /**\n     * Notification channel and ids used by the library updater.\n     */\n    const val CHANNEL_NEW_CHAPTERS_EPISODES = \"new_chapters_episodes_channel\"\n    const val ID_NEW_CHAPTERS = -301\n    const val ID_NEW_EPISODES = -1301\n    const val GROUP_NEW_CHAPTERS = \"eu.kanade.tachiyomi.NEW_CHAPTERS\"\n    const val GROUP_NEW_EPISODES = \"eu.kanade.tachiyomi.NEW_EPISODES\"\n\n    /**\n     * Notification channel and ids used by the backup/restore system.\n     */\n    private const val GROUP_BACKUP_RESTORE = \"group_backup_restore\"\n    const val CHANNEL_BACKUP_RESTORE_PROGRESS = \"backup_restore_progress_channel\"\n    const val ID_BACKUP_PROGRESS = -501\n    const val ID_RESTORE_PROGRESS = -503\n    const val CHANNEL_BACKUP_RESTORE_COMPLETE = \"backup_restore_complete_channel_v2\"\n    const val ID_BACKUP_COMPLETE = -502\n    const val ID_RESTORE_COMPLETE = -504\n\n    /**\n     * Notification channel used for Incognito Mode\n     */\n    const val CHANNEL_INCOGNITO_MODE = \"incognito_mode_channel\"\n    const val ID_INCOGNITO_MODE = -701\n\n    /**\n     * Notification channel and ids used for app and extension updates.\n     */\n    private const val GROUP_APK_UPDATES = \"group_apk_updates\"\n    const val CHANNEL_APP_UPDATE = \"app_apk_update_channel\"\n    const val ID_APP_UPDATER = 1\n    const val ID_APP_UPDATE_PROMPT = 2\n    const val ID_APP_UPDATE_ERROR = 3\n    const val CHANNEL_EXTENSIONS_UPDATE = \"ext_apk_update_channel\"\n    const val ID_UPDATES_TO_EXTS = -401\n    const val ID_EXTENSION_INSTALLER = -402\n\n    private val deprecatedChannels = listOf(\n        \"downloader_channel\",\n        \"downloader_complete_channel\",\n        \"backup_restore_complete_channel\",\n        \"library_channel\",\n        \"library_progress_channel\",\n        \"updates_ext_channel\",\n        \"downloader_cache_renewal\",\n        \"crash_logs_channel\",\n        \"library_skipped_channel\",\n    )\n\n    /**\n     * Creates the notification channels introduced in Android Oreo.\n     * This won't do anything on Android versions that don't support notification channels.\n     *\n     * @param context The application context.\n     */\n    fun createChannels(context: Context) {\n        val notificationManager = NotificationManagerCompat.from(context)\n\n        // Delete old notification channels\n        deprecatedChannels.forEach(notificationManager::deleteNotificationChannel)\n\n        notificationManager.createNotificationChannelGroupsCompat(\n            listOf(\n                buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) {\n                    setName(context.stringResource(MR.strings.label_backup))\n                },\n                buildNotificationChannelGroup(GROUP_DOWNLOADER) {\n                    setName(context.stringResource(MR.strings.download_notifier_downloader_title))\n                },\n                buildNotificationChannelGroup(GROUP_LIBRARY) {\n                    setName(context.stringResource(MR.strings.label_library))\n                },\n                buildNotificationChannelGroup(GROUP_APK_UPDATES) {\n                    setName(context.stringResource(MR.strings.label_recent_updates))\n                },\n            ),\n        )\n\n        notificationManager.createNotificationChannelsCompat(\n            listOf(\n                buildNotificationChannel(CHANNEL_COMMON, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.channel_common))\n                },\n                buildNotificationChannel(CHANNEL_LIBRARY_PROGRESS, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.channel_progress))\n                    setGroup(GROUP_LIBRARY)\n                    setShowBadge(false)\n                },\n                buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.channel_errors))\n                    setGroup(GROUP_LIBRARY)\n                    setShowBadge(false)\n                },\n                buildNotificationChannel(CHANNEL_NEW_CHAPTERS_EPISODES, IMPORTANCE_DEFAULT) {\n                    setName(context.stringResource(AYMR.strings.channel_new_chapters_episodes))\n                },\n                buildNotificationChannel(CHANNEL_DOWNLOADER_PROGRESS, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.channel_progress))\n                    setGroup(GROUP_DOWNLOADER)\n                    setShowBadge(false)\n                },\n                buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.channel_errors))\n                    setGroup(GROUP_DOWNLOADER)\n                    setShowBadge(false)\n                },\n                buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.channel_progress))\n                    setGroup(GROUP_BACKUP_RESTORE)\n                    setShowBadge(false)\n                },\n                buildNotificationChannel(CHANNEL_BACKUP_RESTORE_COMPLETE, IMPORTANCE_HIGH) {\n                    setName(context.stringResource(MR.strings.channel_complete))\n                    setGroup(GROUP_BACKUP_RESTORE)\n                    setShowBadge(false)\n                    setSound(null, null)\n                },\n                buildNotificationChannel(CHANNEL_INCOGNITO_MODE, IMPORTANCE_LOW) {\n                    setName(context.stringResource(MR.strings.pref_incognito_mode))\n                },\n                buildNotificationChannel(CHANNEL_APP_UPDATE, IMPORTANCE_DEFAULT) {\n                    setGroup(GROUP_APK_UPDATES)\n                    setName(context.stringResource(MR.strings.channel_app_updates))\n                },\n                buildNotificationChannel(CHANNEL_EXTENSIONS_UPDATE, IMPORTANCE_DEFAULT) {\n                    setGroup(GROUP_APK_UPDATES)\n                    setName(context.stringResource(MR.strings.channel_ext_updates))\n                },\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/preference/SharedPreferencesDataStore.kt",
    "content": "package eu.kanade.tachiyomi.data.preference\n\nimport android.content.SharedPreferences\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceDataStore\n\nclass SharedPreferencesDataStore(private val prefs: SharedPreferences) : PreferenceDataStore() {\n\n    override fun getBoolean(key: String?, defValue: Boolean): Boolean {\n        return prefs.getBoolean(key, defValue)\n    }\n\n    override fun putBoolean(key: String?, value: Boolean) {\n        prefs.edit {\n            putBoolean(key, value)\n        }\n    }\n\n    override fun getInt(key: String?, defValue: Int): Int {\n        return prefs.getInt(key, defValue)\n    }\n\n    override fun putInt(key: String?, value: Int) {\n        prefs.edit {\n            putInt(key, value)\n        }\n    }\n\n    override fun getLong(key: String?, defValue: Long): Long {\n        return prefs.getLong(key, defValue)\n    }\n\n    override fun putLong(key: String?, value: Long) {\n        prefs.edit {\n            putLong(key, value)\n        }\n    }\n\n    override fun getFloat(key: String?, defValue: Float): Float {\n        return prefs.getFloat(key, defValue)\n    }\n\n    override fun putFloat(key: String?, value: Float) {\n        prefs.edit {\n            putFloat(key, value)\n        }\n    }\n\n    override fun getString(key: String?, defValue: String?): String? {\n        return prefs.getString(key, defValue)\n    }\n\n    override fun putString(key: String?, value: String?) {\n        prefs.edit {\n            putString(key, value)\n        }\n    }\n\n    override fun getStringSet(key: String?, defValues: MutableSet<String>?): MutableSet<String>? {\n        return prefs.getStringSet(key, defValues)\n    }\n\n    override fun putStringSet(key: String?, values: MutableSet<String>?) {\n        prefs.edit {\n            putStringSet(key, values)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt",
    "content": "package eu.kanade.tachiyomi.data.saver\n\nimport android.content.ContentUris\nimport android.content.Context\nimport android.graphics.Bitmap\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Environment\nimport android.provider.MediaStore\nimport android.webkit.MimeTypeMap\nimport androidx.annotation.RequiresApi\nimport androidx.core.content.contentValuesOf\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.storage.cacheImageDir\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport logcat.LogPriority\nimport okio.IOException\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport java.io.ByteArrayInputStream\nimport java.io.ByteArrayOutputStream\nimport java.io.File\nimport java.io.InputStream\nimport java.time.Instant\n\ntypealias ImageBackground = Image.Cover\n\nclass ImageSaver(\n    val context: Context,\n) {\n\n    fun save(image: Image): Uri {\n        val data = image.data\n\n        val type = ImageUtil.findImageType(data) ?: throw IllegalArgumentException(\"Not an image\")\n        val filename = DiskUtil.buildValidFilename(\"${image.name}.${type.extension}\")\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || image.location !is Location.Pictures) {\n            return save(data(), image.location.directory(context), filename)\n        }\n\n        return saveApi29(image, type, filename, data)\n    }\n\n    private fun save(inputStream: InputStream, directory: File, filename: String): Uri {\n        directory.mkdirs()\n\n        val destFile = File(directory, filename)\n\n        inputStream.use { input ->\n            destFile.outputStream().use { output ->\n                input.copyTo(output)\n            }\n        }\n\n        DiskUtil.scanMedia(context, destFile.toUri())\n\n        return destFile.getUriCompat(context)\n    }\n\n    @RequiresApi(Build.VERSION_CODES.Q)\n    private fun saveApi29(\n        image: Image,\n        type: ImageUtil.ImageType,\n        filename: String,\n        data: () -> InputStream,\n    ): Uri {\n        val isMimeTypeSupported = MimeTypeMap.getSingleton().hasMimeType(type.mime)\n\n        val pictureDir = if (isMimeTypeSupported) {\n            MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)\n        } else {\n            MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)\n        }\n\n        val imageLocation = (image.location as Location.Pictures).relativePath\n        val relativePath = listOf(\n            if (isMimeTypeSupported) Environment.DIRECTORY_PICTURES else Environment.DIRECTORY_DOCUMENTS,\n            context.stringResource(MR.strings.app_name),\n            imageLocation,\n        ).joinToString(File.separator)\n\n        val contentValues = contentValuesOf(\n            MediaStore.MediaColumns.RELATIVE_PATH to relativePath,\n            MediaStore.MediaColumns.DISPLAY_NAME to if (isMimeTypeSupported) image.name else filename,\n            MediaStore.MediaColumns.MIME_TYPE to type.mime,\n            MediaStore.MediaColumns.DATE_MODIFIED to Instant.now().epochSecond,\n        )\n\n        val picture = findUriOrDefault(relativePath, filename) {\n            context.contentResolver.insert(\n                pictureDir,\n                contentValues,\n            ) ?: throw IOException(context.stringResource(MR.strings.error_saving_picture))\n        }\n\n        try {\n            data().use { input ->\n                context.contentResolver.openOutputStream(picture, \"w\").use { output ->\n                    input.copyTo(output!!)\n                }\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            throw IOException(context.stringResource(MR.strings.error_saving_picture))\n        }\n\n        DiskUtil.scanMedia(context, picture)\n\n        return picture\n    }\n\n    @RequiresApi(Build.VERSION_CODES.Q)\n    private fun findUriOrDefault(path: String, filename: String, default: () -> Uri): Uri {\n        val projection = arrayOf(\n            MediaStore.MediaColumns._ID,\n            MediaStore.MediaColumns.DISPLAY_NAME,\n            MediaStore.Images.Media.MIME_TYPE,\n            MediaStore.MediaColumns.RELATIVE_PATH,\n            MediaStore.MediaColumns.DATE_MODIFIED,\n        )\n\n        val selection = \"${MediaStore.MediaColumns.RELATIVE_PATH}=? AND ${MediaStore.MediaColumns.DISPLAY_NAME}=?\"\n\n        // Need to make sure it ends with the separator\n        val normalizedPath = \"${path.removeSuffix(File.separator)}${File.separator}\"\n\n        context.contentResolver.query(\n            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,\n            projection,\n            selection,\n            arrayOf(normalizedPath, filename),\n            null,\n        ).use { cursor ->\n            if (cursor != null && cursor.count >= 1) {\n                if (cursor.moveToFirst()) {\n                    val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))\n                    return ContentUris.withAppendedId(\n                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,\n                        id,\n                    )\n                }\n            }\n        }\n\n        return default()\n    }\n}\n\nsealed class Image(\n    open val name: String,\n    open val location: Location,\n) {\n    data class Cover(\n        val bitmap: Bitmap,\n        override val name: String,\n        override val location: Location,\n    ) : Image(name, location)\n\n    data class Page(\n        val inputStream: () -> InputStream,\n        override val name: String,\n        override val location: Location,\n    ) : Image(name, location)\n\n    val data: () -> InputStream\n        get() {\n            return when (this) {\n                is Cover -> {\n                    {\n                        val baos = ByteArrayOutputStream()\n                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)\n                        ByteArrayInputStream(baos.toByteArray())\n                    }\n                }\n                is Page -> inputStream\n            }\n        }\n}\n\nsealed interface Location {\n    @ConsistentCopyVisibility\n    data class Pictures(val relativePath: String) : Location {\n        companion object {\n            fun create(relativePath: String = \"\"): Pictures {\n                return Pictures(relativePath)\n            }\n        }\n    }\n\n    data object Cache : Location\n\n    fun directory(context: Context): File {\n        return when (this) {\n            Cache -> context.cacheImageDir\n            is Pictures -> {\n                val file = File(\n                    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),\n                    context.stringResource(MR.strings.app_name),\n                )\n                if (relativePath.isNotEmpty()) {\n                    return File(\n                        file,\n                        relativePath,\n                    )\n                }\n                file\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/AnimeTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport android.app.Application\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.track.anime.interactor.AddAnimeTracks\nimport eu.kanade.domain.track.anime.model.toDomainTrack\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\n\nprivate val addTracks: AddAnimeTracks by injectLazy()\nprivate val insertTrack: InsertAnimeTrack by injectLazy()\n\ninterface AnimeTracker {\n\n    // Common functions\n    fun getCompletionStatus(): Long\n\n    fun getScoreList(): ImmutableList<String>\n\n    fun indexToScore(index: Int): Double {\n        return index.toDouble()\n    }\n\n    // Anime specific functions\n    fun getStatusListAnime(): List<Long>\n\n    fun getWatchingStatus(): Long\n\n    fun getRewatchingStatus(): Long\n\n    // TODO: Store all scores as 10 point in the future maybe?\n    fun get10PointScore(track: DomainAnimeTrack): Double {\n        return track.score\n    }\n\n    fun displayScore(track: DomainAnimeTrack): String\n\n    suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean = false): AnimeTrack\n\n    suspend fun bind(track: AnimeTrack, hasSeenEpisodes: Boolean = false): AnimeTrack\n\n    suspend fun searchAnime(query: String): List<AnimeTrackSearch>\n\n    suspend fun refresh(track: AnimeTrack): AnimeTrack\n\n    // TODO: move this to an interactor, and update all trackers based on common data\n    suspend fun register(item: AnimeTrack, animeId: Long) {\n        item.anime_id = animeId\n        try {\n            addTracks.bind(this, item, animeId)\n        } catch (e: Throwable) {\n            withUIContext { Injekt.get<Application>().toast(e.message) }\n        }\n    }\n\n    suspend fun setRemoteAnimeStatus(track: AnimeTrack, status: Long) {\n        track.status = status\n        if (track.status == getCompletionStatus() && track.total_episodes != 0L) {\n            track.last_episode_seen = track.total_episodes.toDouble()\n        }\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteLastEpisodeSeen(track: AnimeTrack, episodeNumber: Int) {\n        if (track.last_episode_seen == 0.0 &&\n            track.last_episode_seen < episodeNumber &&\n            track.status != getRewatchingStatus()\n        ) {\n            track.status = getWatchingStatus()\n        }\n        track.last_episode_seen = episodeNumber.toDouble()\n        if (track.total_episodes != 0L && track.last_episode_seen.toLong() == track.total_episodes) {\n            track.status = getCompletionStatus()\n            track.finished_watching_date = System.currentTimeMillis()\n        }\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteScore(track: AnimeTrack, scoreString: String) {\n        track.score = indexToScore(getScoreList().indexOf(scoreString))\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteStartDate(track: AnimeTrack, epochMillis: Long) {\n        track.started_watching_date = epochMillis\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteFinishDate(track: AnimeTrack, epochMillis: Long) {\n        track.finished_watching_date = epochMillis\n        updateRemote(track)\n    }\n\n    suspend fun setRemotePrivate(track: AnimeTrack, private: Boolean) {\n        track.private = private\n        updateRemote(track)\n    }\n\n    private suspend fun updateRemote(track: AnimeTrack): Unit = withIOContext {\n        try {\n            update(track)\n            track.toDomainTrack(idRequired = false)?.let {\n                insertTrack.await(it)\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to update remote track data id=${track.id}\" }\n            withUIContext { Injekt.get<Application>().toast(e.message) }\n        }\n    }\n\n    fun getStatusForAnime(status: Long): StringResource?\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/BaseTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport androidx.annotation.CallSuper\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport okhttp3.OkHttpClient\nimport uy.kohesive.injekt.injectLazy\n\nabstract class BaseTracker(\n    override val id: Long,\n    override val name: String,\n) : Tracker {\n\n    val trackPreferences: TrackPreferences by injectLazy()\n    val networkService: NetworkHelper by injectLazy()\n\n    override val client: OkHttpClient\n        get() = networkService.client\n\n    // Application and remote support for reading dates\n    override val supportsReadingDates: Boolean = false\n\n    override val supportsPrivateTracking: Boolean = false\n\n    @CallSuper\n    override fun logout() {\n        trackPreferences.setCredentials(this, \"\", \"\")\n    }\n\n    override val isLoggedIn: Boolean\n        get() = getUsername().isNotEmpty() &&\n            getPassword().isNotEmpty()\n\n    override val isLoggedInFlow: Flow<Boolean> by lazy {\n        combine(\n            trackPreferences.trackUsername(this).changes(),\n            trackPreferences.trackPassword(this).changes(),\n        ) { username, password ->\n            username.isNotEmpty() && password.isNotEmpty()\n        }\n    }\n\n    override fun getUsername() = trackPreferences.trackUsername(this).get()\n\n    override fun getPassword() = trackPreferences.trackPassword(this).get()\n\n    override fun saveCredentials(username: String, password: String) {\n        trackPreferences.setCredentials(this, username, password)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/DeletableAnimeTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport tachiyomi.domain.track.anime.model.AnimeTrack\n\n/**\n *Tracker that support deleting am entry from a user's list\n */\ninterface DeletableAnimeTracker {\n\n    suspend fun delete(track: AnimeTrack)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/DeletableMangaTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport tachiyomi.domain.track.manga.model.MangaTrack\n\n/**\n * Tracker that support deleting am entry from a user's list\n */\ninterface DeletableMangaTracker {\n\n    suspend fun delete(track: MangaTrack)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/EnhancedAnimeTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.track.anime.model.AnimeTrack\n\n/**\n * An Enhanced Track Service will never prompt the user to match a manga with the remote.\n * It is expected that such Track Service can only work with specific sources and unique IDs.\n */\ninterface EnhancedAnimeTracker {\n    /**\n     * This Tracker will only work with the sources that are accepted by this filter function.\n     */\n    fun accept(source: AnimeSource): Boolean {\n        return source::class.qualifiedName in getAcceptedSources()\n    }\n\n    /**\n     * Fully qualified source classes that this track service is compatible with.\n     */\n    fun getAcceptedSources(): List<String>\n\n    fun loginNoop()\n\n    /**\n     * match is similar to Tracker.search, but only return zero or one match.\n     */\n    suspend fun match(anime: Anime): AnimeTrackSearch?\n\n    /**\n     * Checks whether the provided source/track/anime triplet is from this AnimeTracker\n     */\n    fun isTrackFrom(track: AnimeTrack, anime: Anime, source: AnimeSource?): Boolean\n\n    /**\n     * Migrates the given track for the anime to the newSource, if possible\n     */\n    fun migrateTrack(track: AnimeTrack, anime: Anime, newSource: AnimeSource): AnimeTrack?\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/EnhancedMangaTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.source.MangaSource\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.track.manga.model.MangaTrack\n\n/**\n * A tracker that will never prompt the user to manually bind an entry.\n * It is expected that such tracker can only work with specific sources and unique IDs.\n */\ninterface EnhancedMangaTracker {\n    /**\n     * This Tracker will only work with the sources that are accepted by this filter function.\n     */\n    fun accept(source: MangaSource): Boolean {\n        return source::class.qualifiedName in getAcceptedSources()\n    }\n\n    /**\n     * Fully qualified source classes that this track service is compatible with.\n     */\n    fun getAcceptedSources(): List<String>\n\n    fun loginNoop()\n\n    /**\n     * match is similar to Tracker.search, but only return zero or one match.\n     */\n    suspend fun match(manga: Manga): MangaTrackSearch?\n\n    /**\n     * Checks whether the provided source/track/manga triplet is from this [MangaTrack]\n     */\n    fun isTrackFrom(track: MangaTrack, manga: Manga, source: MangaSource?): Boolean\n\n    /**\n     * Migrates the given track for the manga to the newSource, if possible\n     */\n    fun migrateTrack(track: MangaTrack, manga: Manga, newSource: MangaSource): MangaTrack?\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/MangaTracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport android.app.Application\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.track.manga.interactor.AddMangaTracks\nimport eu.kanade.domain.track.manga.model.toDomainTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack\n\nprivate val addTracks: AddMangaTracks by injectLazy()\nprivate val insertTrack: InsertMangaTrack by injectLazy()\n\ninterface MangaTracker {\n\n    // Common functions\n    fun getCompletionStatus(): Long\n\n    fun getScoreList(): ImmutableList<String>\n\n    fun indexToScore(index: Int): Double {\n        return index.toDouble()\n    }\n\n    // Manga specific functions\n    fun getStatusListManga(): List<Long>\n\n    fun getReadingStatus(): Long\n\n    fun getRereadingStatus(): Long\n\n    // TODO: Store all scores as 10 point in the future maybe?\n    fun get10PointScore(track: DomainTrack): Double {\n        return track.score\n    }\n\n    fun displayScore(track: DomainTrack): String\n\n    suspend fun update(track: MangaTrack, didReadChapter: Boolean = false): MangaTrack\n\n    suspend fun bind(track: MangaTrack, hasReadChapters: Boolean = false): MangaTrack\n\n    suspend fun searchManga(query: String): List<MangaTrackSearch>\n\n    suspend fun refresh(track: MangaTrack): MangaTrack\n\n    suspend fun register(item: MangaTrack, mangaId: Long) {\n        item.manga_id = mangaId\n        try {\n            addTracks.bind(this, item, mangaId)\n        } catch (e: Throwable) {\n            withUIContext { Injekt.get<Application>().toast(e.message) }\n        }\n    }\n\n    suspend fun setRemoteMangaStatus(track: MangaTrack, status: Long) {\n        track.status = status\n        if (track.status == getCompletionStatus() && track.total_chapters != 0L) {\n            track.last_chapter_read = track.total_chapters.toDouble()\n        }\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteLastChapterRead(track: MangaTrack, chapterNumber: Int) {\n        if (track.last_chapter_read == 0.0 &&\n            track.last_chapter_read < chapterNumber &&\n            track.status != getRereadingStatus()\n        ) {\n            track.status = getReadingStatus()\n        }\n        track.last_chapter_read = chapterNumber.toDouble()\n        if (track.total_chapters != 0L &&\n            track.last_chapter_read.toLong() == track.total_chapters\n        ) {\n            track.status = getCompletionStatus()\n            track.finished_reading_date = System.currentTimeMillis()\n        }\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteScore(track: MangaTrack, scoreString: String) {\n        track.score = indexToScore(getScoreList().indexOf(scoreString))\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteStartDate(track: MangaTrack, epochMillis: Long) {\n        track.started_reading_date = epochMillis\n        updateRemote(track)\n    }\n\n    suspend fun setRemoteFinishDate(track: MangaTrack, epochMillis: Long) {\n        track.finished_reading_date = epochMillis\n        updateRemote(track)\n    }\n\n    suspend fun setRemotePrivate(track: MangaTrack, private: Boolean) {\n        track.private = private\n        updateRemote(track)\n    }\n\n    private suspend fun updateRemote(track: MangaTrack): Unit = withIOContext {\n        try {\n            update(track)\n            track.toDomainTrack(idRequired = false)?.let {\n                insertTrack.await(it)\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to update remote track data id=${track.id}\" }\n            withUIContext { Injekt.get<Application>().toast(e.message) }\n        }\n    }\n\n    fun getStatusForManga(status: Long): StringResource?\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/Tracker.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport androidx.annotation.CallSuper\nimport androidx.annotation.ColorInt\nimport androidx.annotation.DrawableRes\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.flow.Flow\nimport okhttp3.OkHttpClient\n\ninterface Tracker {\n\n    val id: Long\n\n    val name: String\n\n    val client: OkHttpClient\n\n    // Application and remote support for reading dates\n    val supportsReadingDates: Boolean\n\n    val supportsPrivateTracking: Boolean\n\n    @DrawableRes\n    fun getLogo(): Int\n\n    @ColorInt\n    fun getLogoColor(): Int\n\n    fun getCompletionStatus(): Long\n\n    fun getScoreList(): ImmutableList<String>\n\n    suspend fun login(username: String, password: String)\n\n    @CallSuper\n    fun logout()\n\n    val isLoggedIn: Boolean\n\n    val isLoggedInFlow: Flow<Boolean>\n\n    fun getUsername(): String\n\n    fun getPassword(): String\n\n    fun saveCredentials(username: String, password: String)\n\n    val animeService: AnimeTracker\n        get() = this as AnimeTracker\n\n    val mangaService: MangaTracker\n        get() = this as MangaTracker\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/TrackerManager.kt",
    "content": "package eu.kanade.tachiyomi.data.track\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.data.track.anilist.Anilist\nimport eu.kanade.tachiyomi.data.track.bangumi.Bangumi\nimport eu.kanade.tachiyomi.data.track.jellyfin.Jellyfin\nimport eu.kanade.tachiyomi.data.track.kavita.Kavita\nimport eu.kanade.tachiyomi.data.track.kitsu.Kitsu\nimport eu.kanade.tachiyomi.data.track.komga.Komga\nimport eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates\nimport eu.kanade.tachiyomi.data.track.myanimelist.MyAnimeList\nimport eu.kanade.tachiyomi.data.track.shikimori.Shikimori\nimport eu.kanade.tachiyomi.data.track.simkl.Simkl\nimport eu.kanade.tachiyomi.data.track.suwayomi.Suwayomi\nimport kotlinx.coroutines.flow.combine\n\nclass TrackerManager(context: Context) {\n\n    companion object {\n        const val ANILIST = 2L\n        const val KITSU = 3L\n        const val KAVITA = 8L\n        const val SIMKL = 101L\n        const val JELLYFIN = 102L\n    }\n\n    val myAnimeList = MyAnimeList(1L)\n    val aniList = Anilist(ANILIST)\n    val kitsu = Kitsu(KITSU)\n    val shikimori = Shikimori(4L)\n    val bangumi = Bangumi(5L)\n    val komga = Komga(6L)\n    val mangaUpdates = MangaUpdates(7L)\n    val kavita = Kavita(KAVITA)\n    val suwayomi = Suwayomi(9L)\n    val simkl = Simkl(SIMKL)\n    val jellyfin = Jellyfin(JELLYFIN)\n\n    val trackers = listOf(\n        myAnimeList, aniList, kitsu, shikimori, bangumi,\n        komga, mangaUpdates, kavita, suwayomi, simkl, jellyfin,\n    )\n\n    fun loggedInTrackers() = trackers.filter { it.isLoggedIn }\n\n    fun loggedInTrackersFlow() = combine(trackers.map { it.isLoggedInFlow }) {\n        it.mapIndexedNotNull { index, isLoggedIn ->\n            if (isLoggedIn) trackers[index] else null\n        }\n    }\n\n    fun get(id: Long) = trackers.find { it.id == id }\n\n    fun getAll(ids: Set<Long>) = trackers.filter { it.id in ids }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.domain.track.manga.model.toDbTrack\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.DeletableAnimeTracker\nimport eu.kanade.tachiyomi.data.track.DeletableMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALOAuth\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.serialization.json.Json\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass Anilist(id: Long) :\n    BaseTracker(\n        id,\n        \"AniList\",\n    ),\n    MangaTracker,\n    AnimeTracker,\n    DeletableMangaTracker,\n    DeletableAnimeTracker {\n\n    companion object {\n        const val READING = 1L\n        const val WATCHING = 11L\n        const val COMPLETED = 2L\n        const val ON_HOLD = 3L\n        const val DROPPED = 4L\n        const val PLAN_TO_READ = 5L\n        const val PLAN_TO_WATCH = 15L\n        const val REREADING = 6L\n        const val REWATCHING = 16L\n\n        const val POINT_100 = \"POINT_100\"\n        const val POINT_10 = \"POINT_10\"\n        const val POINT_10_DECIMAL = \"POINT_10_DECIMAL\"\n        const val POINT_5 = \"POINT_5\"\n        const val POINT_3 = \"POINT_3\"\n    }\n\n    private val json: Json by injectLazy()\n\n    private val interceptor by lazy { AnilistInterceptor(this, getPassword()) }\n\n    private val api by lazy { AnilistApi(client, interceptor) }\n\n    override val supportsReadingDates: Boolean = true\n\n    override val supportsPrivateTracking: Boolean = true\n\n    private val scorePreference = trackPreferences.anilistScoreType()\n\n    init {\n        // If the preference is an int from APIv1, logout user to force using APIv2\n        try {\n            scorePreference.get()\n        } catch (e: ClassCastException) {\n            logout()\n            scorePreference.delete()\n        }\n    }\n\n    override fun getLogo() = R.drawable.ic_tracker_anilist\n\n    override fun getLogoColor() = Color.rgb(18, 25, 35)\n\n    override fun getStatusListManga(): List<Long> {\n        return listOf(READING, PLAN_TO_READ, COMPLETED, REREADING, ON_HOLD, DROPPED)\n    }\n\n    override fun getStatusListAnime(): List<Long> {\n        return listOf(WATCHING, PLAN_TO_WATCH, COMPLETED, REWATCHING, ON_HOLD, DROPPED)\n    }\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        READING -> MR.strings.reading\n        PLAN_TO_READ -> MR.strings.plan_to_read\n        COMPLETED -> MR.strings.completed\n        REREADING -> MR.strings.repeating\n        ON_HOLD -> MR.strings.paused\n        DROPPED -> MR.strings.dropped\n        else -> null\n    }\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        WATCHING -> AYMR.strings.watching\n        PLAN_TO_WATCH -> AYMR.strings.plan_to_watch\n        COMPLETED -> MR.strings.completed\n        REWATCHING -> AYMR.strings.repeating_anime\n        ON_HOLD -> MR.strings.paused\n        DROPPED -> MR.strings.dropped\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getWatchingStatus(): Long = WATCHING\n\n    override fun getRereadingStatus(): Long = REREADING\n\n    override fun getRewatchingStatus(): Long = REWATCHING\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> {\n        return when (scorePreference.get()) {\n            // 10 point\n            POINT_10 -> IntRange(0, 10).map(Int::toString).toImmutableList()\n            // 100 point\n            POINT_100 -> IntRange(0, 100).map(Int::toString).toImmutableList()\n            // 5 stars\n            POINT_5 -> IntRange(0, 5).map { \"$it ★\" }.toImmutableList()\n            // Smiley\n            POINT_3 -> persistentListOf(\"-\", \"😦\", \"😐\", \"😊\")\n            // 10 point decimal\n            POINT_10_DECIMAL -> IntRange(0, 100).map { (it / 10f).toString() }.toImmutableList()\n            else -> throw Exception(\"Unknown score type\")\n        }\n    }\n\n    override fun get10PointScore(track: DomainMangaTrack): Double {\n        // Score is stored in 100 point format\n        return track.score / 10.0\n    }\n\n    override fun get10PointScore(track: DomainAnimeTrack): Double {\n        // Score is stored in 100 point format\n        return track.score / 10.0\n    }\n\n    override fun indexToScore(index: Int): Double {\n        return when (scorePreference.get()) {\n            // 10 point\n            POINT_10 -> index * 10.0\n            // 100 point\n            POINT_100 -> index.toDouble()\n            // 5 stars\n            POINT_5 -> when (index) {\n                0 -> 0.0\n                else -> index * 20.0 - 10.0\n            }\n            // Smiley\n            POINT_3 -> when (index) {\n                0 -> 0.0\n                else -> index * 25.0 + 10.0\n            }\n            // 10 point decimal\n            POINT_10_DECIMAL -> index.toDouble()\n            else -> throw Exception(\"Unknown score type\")\n        }\n    }\n\n    override fun displayScore(track: DomainMangaTrack): String {\n        val score = track.score\n\n        return when (scorePreference.get()) {\n            POINT_5 -> when (score) {\n                0.0 -> \"0 ★\"\n                else -> \"${((score + 10) / 20).toInt()} ★\"\n            }\n            POINT_3 -> when {\n                score == 0.0 -> \"0\"\n                score <= 35 -> \"😦\"\n                score <= 60 -> \"😐\"\n                else -> \"😊\"\n            }\n            else -> track.toApiScore()\n        }\n    }\n\n    override fun displayScore(track: DomainAnimeTrack): String {\n        val score = track.score\n\n        return when (scorePreference.get()) {\n            POINT_5 -> when (score) {\n                0.0 -> \"0 ★\"\n                else -> \"${((score + 10) / 20).toInt()} ★\"\n            }\n            POINT_3 -> when {\n                score == 0.0 -> \"0\"\n                score <= 35 -> \"😦\"\n                score <= 60 -> \"😐\"\n                else -> \"😊\"\n            }\n            else -> track.toApiScore()\n        }\n    }\n\n    private suspend fun add(track: MangaTrack): MangaTrack {\n        return api.addLibManga(track)\n    }\n\n    private suspend fun add(track: AnimeTrack): AnimeTrack {\n        return api.addLibAnime(track)\n    }\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        // If user was using API v1 fetch library_id\n        if (track.library_id == null || track.library_id!! == 0L) {\n            val libManga = api.findLibManga(track, getUsername().toInt())\n                ?: throw Exception(\"$track not found on user library\")\n            track.library_id = libManga.library_id\n        }\n\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                    track.finished_reading_date = System.currentTimeMillis()\n                } else if (track.status != REREADING) {\n                    track.status = READING\n                    if (track.last_chapter_read == 1.0) {\n                        track.started_reading_date = System.currentTimeMillis()\n                    }\n                }\n            }\n        }\n\n        return api.updateLibManga(track)\n    }\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        // If user was using API v1 fetch library_id\n        if (track.library_id == null || track.library_id!! == 0L) {\n            val libManga = api.findLibAnime(track, getUsername().toInt())\n                ?: throw Exception(\"$track not found on user library\")\n            track.library_id = libManga.library_id\n        }\n\n        if (track.status != COMPLETED) {\n            if (didWatchEpisode) {\n                if (track.last_episode_seen.toLong() == track.total_episodes && track.total_episodes > 0) {\n                    track.status = COMPLETED\n                    track.finished_watching_date = System.currentTimeMillis()\n                } else if (track.status != REWATCHING) {\n                    track.status = WATCHING\n                    if (track.last_episode_seen == 1.0) {\n                        track.started_watching_date = System.currentTimeMillis()\n                    }\n                }\n            }\n        }\n\n        return api.updateLibAnime(track)\n    }\n\n    override suspend fun delete(track: DomainMangaTrack) {\n        if (track.libraryId == null || track.libraryId == 0L) {\n            val libManga = api.findLibManga(track.toDbTrack(), getUsername().toInt()) ?: return\n            return api.deleteLibManga(track.copy(id = libManga.library_id!!))\n        }\n\n        api.deleteLibManga(track)\n    }\n\n    override suspend fun delete(track: DomainAnimeTrack) {\n        if (track.libraryId == null || track.libraryId!! == 0L) {\n            val libAnime = api.findLibAnime(track.toDbTrack(), getUsername().toInt()) ?: return\n            return api.deleteLibAnime(track.copy(id = libAnime.library_id!!))\n        }\n\n        api.deleteLibAnime(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        val remoteTrack = api.findLibManga(track, getUsername().toInt())\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack, copyRemotePrivate = false)\n            track.library_id = remoteTrack.library_id\n\n            if (track.status != COMPLETED) {\n                val isRereading = track.status == REREADING\n                track.status = if (!isRereading && hasReadChapters) READING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasReadChapters) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasReadChapters: Boolean): AnimeTrack {\n        val remoteTrack = api.findLibAnime(track, getUsername().toInt())\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack, copyRemotePrivate = false)\n            track.library_id = remoteTrack.library_id\n\n            if (track.status != COMPLETED) {\n                val isRereading = track.status == REWATCHING\n                track.status = if (!isRereading && hasReadChapters) WATCHING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasReadChapters) WATCHING else PLAN_TO_WATCH\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        return api.search(query)\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return api.searchAnime(query)\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val remoteTrack = api.getLibManga(track, getUsername().toInt())\n        track.copyPersonalFrom(remoteTrack)\n        track.title = remoteTrack.title\n        track.total_chapters = remoteTrack.total_chapters\n        return track\n    }\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        val remoteTrack = api.getLibAnime(track, getUsername().toInt())\n        track.copyPersonalFrom(remoteTrack)\n        track.title = remoteTrack.title\n        track.total_episodes = remoteTrack.total_episodes\n        return track\n    }\n\n    override suspend fun login(username: String, password: String) = login(password)\n\n    suspend fun login(token: String) {\n        try {\n            val oauth = api.createOAuth(token)\n            interceptor.setAuth(oauth)\n            val (username, scoreType) = api.getCurrentUser()\n            scorePreference.set(scoreType)\n            saveCredentials(username.toString(), oauth.accessToken)\n        } catch (e: Throwable) {\n            logout()\n        }\n    }\n\n    override fun logout() {\n        super.logout()\n        trackPreferences.trackToken(this).delete()\n        interceptor.setAuth(null)\n    }\n\n    fun saveOAuth(alOAuth: ALOAuth?) {\n        trackPreferences.trackToken(this).set(json.encodeToString(alOAuth))\n    }\n\n    fun loadOAuth(): ALOAuth? {\n        return try {\n            json.decodeFromString<ALOAuth>(trackPreferences.trackToken(this).get())\n        } catch (e: Exception) {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist\n\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALAddEntryResult\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALCurrentUserResult\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALOAuth\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALSearchResult\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALUserListEntryQueryResult\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.interceptor.rateLimit\nimport eu.kanade.tachiyomi.network.jsonMime\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.JsonNull\nimport kotlinx.serialization.json.JsonObject\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.injectLazy\nimport java.time.Instant\nimport java.time.ZoneId\nimport java.time.ZonedDateTime\nimport kotlin.time.Duration.Companion.minutes\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder()\n        .addInterceptor(interceptor)\n        .rateLimit(permits = 85, period = 1.minutes)\n        .build()\n\n    suspend fun addLibManga(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val query = \"\"\"\n            |mutation AddManga(${'$'}mangaId: Int, ${'$'}progress: Int, ${'$'}status: MediaListStatus, ${'$'}private: Boolean) {\n                |SaveMediaListEntry (mediaId: ${'$'}mangaId, progress: ${'$'}progress, status: ${'$'}status, private: ${'$'}private) {\n                |   id\n                |   status\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"mangaId\", track.remote_id)\n                    put(\"progress\", track.last_chapter_read.toInt())\n                    put(\"status\", track.toApiStatus())\n                    put(\"private\", track.private)\n                }\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALAddEntryResult>()\n                    .let {\n                        track\n                    }\n            }\n        }\n    }\n\n    suspend fun updateLibManga(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val query = \"\"\"\n            |mutation UpdateManga(\n                |${'$'}listId: Int, ${'$'}progress: Int, ${'$'}status: MediaListStatus, ${'$'}private: Boolean,\n                |${'$'}score: Int, ${'$'}startedAt: FuzzyDateInput, ${'$'}completedAt: FuzzyDateInput\n            |) {\n                |SaveMediaListEntry(\n                    |id: ${'$'}listId, progress: ${'$'}progress, status: ${'$'}status, private: ${'$'}private,\n                    |scoreRaw: ${'$'}score, startedAt: ${'$'}startedAt, completedAt: ${'$'}completedAt\n                |) {\n                    |id\n                    |status\n                    |progress\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"listId\", track.library_id)\n                    put(\"progress\", track.last_chapter_read.toInt())\n                    put(\"status\", track.toApiStatus())\n                    put(\"score\", track.score.toInt())\n                    put(\"startedAt\", createDate(track.started_reading_date))\n                    put(\"completedAt\", createDate(track.finished_reading_date))\n                    put(\"private\", track.private)\n                }\n            }\n            authClient.newCall(POST(API_URL, body = payload.toString().toRequestBody(jsonMime)))\n                .awaitSuccess()\n            track\n        }\n    }\n\n    suspend fun deleteLibManga(track: DomainMangaTrack) {\n        withIOContext {\n            val query = \"\"\"\n            |mutation DeleteManga(${'$'}listId: Int) {\n                |DeleteMediaListEntry(id: ${'$'}listId) {\n                    |deleted\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"listId\", track.libraryId)\n                }\n            }\n            authClient.newCall(POST(API_URL, body = payload.toString().toRequestBody(jsonMime)))\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun addLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val query = \"\"\"\n            |mutation AddAnime(${'$'}animeId: Int, ${'$'}progress: Int, ${'$'}status: MediaListStatus, ${'$'}private: Boolean) {\n                |SaveMediaListEntry (mediaId: ${'$'}animeId, progress: ${'$'}progress, status: ${'$'}status, private: ${'$'}private) {\n                |   id\n                |   status\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"animeId\", track.remote_id)\n                    put(\"progress\", track.last_episode_seen.toInt())\n                    put(\"status\", track.toApiStatus())\n                    put(\"private\", track.private)\n                }\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALAddEntryResult>()\n                    .let {\n                        track\n                    }\n            }\n        }\n    }\n\n    suspend fun updateLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val query = \"\"\"\n            |mutation UpdateAnime(\n                |${'$'}listId: Int, ${'$'}progress: Int, ${'$'}status: MediaListStatus, ${'$'}private: Boolean,\n                |${'$'}score: Int, ${'$'}startedAt: FuzzyDateInput, ${'$'}completedAt: FuzzyDateInput\n            |) {\n                |SaveMediaListEntry(\n                    |id: ${'$'}listId, progress: ${'$'}progress, status: ${'$'}status, private: ${'$'}private,\n                    |scoreRaw: ${'$'}score, startedAt: ${'$'}startedAt, completedAt: ${'$'}completedAt\n                |) {\n                    |id\n                    |status\n                    |progress\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"listId\", track.library_id)\n                    put(\"progress\", track.last_episode_seen.toInt())\n                    put(\"status\", track.toApiStatus())\n                    put(\"score\", track.score.toInt())\n                    put(\"startedAt\", createDate(track.started_watching_date))\n                    put(\"completedAt\", createDate(track.finished_watching_date))\n                    put(\"private\", track.private)\n                }\n            }\n            authClient.newCall(POST(API_URL, body = payload.toString().toRequestBody(jsonMime)))\n                .awaitSuccess()\n            track\n        }\n    }\n\n    suspend fun deleteLibAnime(track: DomainAnimeTrack) {\n        return withIOContext {\n            val query = \"\"\"\n            |mutation DeleteAnime(${'$'}listId: Int) {\n                |DeleteMediaListEntry(id: ${'$'}listId) {\n                    |deleted\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"listId\", track.libraryId)\n                }\n            }\n            authClient.newCall(POST(API_URL, body = payload.toString().toRequestBody(jsonMime)))\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun search(search: String): List<MangaTrackSearch> {\n        return withIOContext {\n            val query = \"\"\"\n            |query Search(${'$'}query: String) {\n                |Page (perPage: 50) {\n                    |media(search: ${'$'}query, type: MANGA, format_not_in: [NOVEL]) {\n                        |id\n                        |staff {\n                            |edges {\n                                |role\n                                |id\n                                |node {\n                                    |name {\n                                        |full\n                                        |userPreferred\n                                        |native\n                                    |}\n                                |}\n                            |}\n                        |}\n                        |title {\n                            |userPreferred\n                        |}\n                        |coverImage {\n                            |large\n                        |}\n                        |format\n                        |status\n                        |chapters\n                        |description\n                        |startDate {\n                            |year\n                            |month\n                            |day\n                        |}\n                        |averageScore\n                    |}\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"query\", search)\n                }\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALSearchResult>()\n                    .data.page.media\n                    .map { it.toALManga().toTrack() }\n            }\n        }\n    }\n\n    suspend fun searchAnime(search: String): List<AnimeTrackSearch> {\n        return withIOContext {\n            val query = \"\"\"\n            |query Search(${'$'}query: String) {\n                |Page (perPage: 50) {\n                    |media(search: ${'$'}query, type: ANIME) {\n                        |id\n                        |studios {\n                            |edges {\n                                |isMain\n                                |node {\n                                    |name\n                                |}\n                            |}\n                        |}\n                        |title {\n                            |userPreferred\n                        |}\n                        |coverImage {\n                            |large\n                        |}\n                        |format\n                        |status\n                        |episodes\n                        |description\n                        |startDate {\n                            |year\n                            |month\n                            |day\n                        |}\n                        |averageScore\n                    |}\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"query\", search)\n                }\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALSearchResult>()\n                    .data.page.media\n                    .map { it.toALAnime().toTrack() }\n            }\n        }\n    }\n\n    suspend fun findLibManga(track: MangaTrack, userid: Int): MangaTrack? {\n        return withIOContext {\n            val query = \"\"\"\n            |query (${'$'}id: Int!, ${'$'}manga_id: Int!) {\n                |Page {\n                    |mediaList(userId: ${'$'}id, type: MANGA, mediaId: ${'$'}manga_id) {\n                        |id\n                        |status\n                        |scoreRaw: score(format: POINT_100)\n                        |progress\n                        |private\n                        |startedAt {\n                            |year\n                            |month\n                            |day\n                        |}\n                        |completedAt {\n                            |year\n                            |month\n                            |day\n                        |}\n                        |media {\n                            |id\n                            |title {\n                                |userPreferred\n                            |}\n                            |coverImage {\n                                |large\n                            |}\n                            |format\n                            |status\n                            |chapters\n                            |description\n                            |startDate {\n                                |year\n                                |month\n                                |day\n                            |}\n                            |staff {\n                                |edges {\n                                    |role\n                                    |id\n                                    |node {\n                                        |name {\n                                            |full\n                                            |userPreferred\n                                            |native\n                                        |}\n                                    |}\n                                |}\n                            |}\n                        |}\n                    |}\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"id\", userid)\n                    put(\"manga_id\", track.remote_id)\n                }\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALUserListEntryQueryResult>()\n                    .data.page.mediaList\n                    .map { it.toALUserManga() }\n                    .firstOrNull()\n                    ?.toTrack()\n            }\n        }\n    }\n\n    suspend fun findLibAnime(track: AnimeTrack, userid: Int): AnimeTrack? {\n        return withIOContext {\n            val query = \"\"\"\n            |query (${'$'}id: Int!, ${'$'}anime_id: Int!) {\n                |Page {\n                    |mediaList(userId: ${'$'}id, type: ANIME, mediaId: ${'$'}anime_id) {\n                        |id\n                        |status\n                        |scoreRaw: score(format: POINT_100)\n                        |progress\n                        |private\n                        |startedAt {\n                            |year\n                            |month\n                            |day\n                        |}\n                        |completedAt {\n                            |year\n                            |month\n                            |day\n                        |}\n                        |media {\n                            |id\n                            |title {\n                                |userPreferred\n                            |}\n                            |coverImage {\n                                |large\n                            |}\n                            |format\n                            |status\n                            |episodes\n                            |description\n                            |startDate {\n                                |year\n                                |month\n                                |day\n                            |}\n                            |studios {\n                                |edges {\n                                    |isMain\n                                    |node {\n                                        |name\n                                    |}\n                                |}\n                            |}\n                        |}\n                    |}\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n                putJsonObject(\"variables\") {\n                    put(\"id\", userid)\n                    put(\"anime_id\", track.remote_id)\n                }\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALUserListEntryQueryResult>()\n                    .data.page.mediaList\n                    .map { it.toALUserAnime() }\n                    .firstOrNull()\n                    ?.toTrack()\n            }\n        }\n    }\n\n    suspend fun getLibManga(track: MangaTrack, userId: Int): MangaTrack {\n        return findLibManga(track, userId) ?: throw Exception(\"Could not find manga\")\n    }\n\n    suspend fun getLibAnime(track: AnimeTrack, userId: Int): AnimeTrack {\n        return findLibAnime(track, userId) ?: throw Exception(\"Could not find anime\")\n    }\n\n    fun createOAuth(token: String): ALOAuth {\n        return ALOAuth(token, \"Bearer\", System.currentTimeMillis() + 31536000000, 31536000000)\n    }\n\n    suspend fun getCurrentUser(): Pair<Int, String> {\n        return withIOContext {\n            val query = \"\"\"\n            |query User {\n                |Viewer {\n                    |id\n                    |mediaListOptions {\n                        |scoreFormat\n                    |}\n                |}\n            |}\n            |\n            \"\"\".trimMargin()\n            val payload = buildJsonObject {\n                put(\"query\", query)\n            }\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        API_URL,\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<ALCurrentUserResult>()\n                    .let {\n                        val viewer = it.data.viewer\n                        Pair(viewer.id, viewer.mediaListOptions.scoreFormat)\n                    }\n            }\n        }\n    }\n\n    private fun createDate(dateValue: Long): JsonObject {\n        if (dateValue == 0L) {\n            return buildJsonObject {\n                put(\"year\", JsonNull)\n                put(\"month\", JsonNull)\n                put(\"day\", JsonNull)\n            }\n        }\n\n        val dateTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(dateValue), ZoneId.systemDefault())\n        return buildJsonObject {\n            put(\"year\", dateTime.year)\n            put(\"month\", dateTime.monthValue)\n            put(\"day\", dateTime.dayOfMonth)\n        }\n    }\n\n    companion object {\n        private const val CLIENT_ID = \"5338\"\n        private const val API_URL = \"https://graphql.anilist.co/\"\n        private const val BASE_URL = \"https://anilist.co/api/v2/\"\n        private const val BASE_MANGA_URL = \"https://anilist.co/manga/\"\n        private const val BASE_ANIME_URL = \"https://anilist.co/anime/\"\n\n        fun mangaUrl(mediaId: Long): String {\n            return BASE_MANGA_URL + mediaId\n        }\n\n        fun animeUrl(mediaId: Long): String {\n            return BASE_ANIME_URL + mediaId\n        }\n\n        fun authUrl(): Uri = \"${BASE_URL}oauth/authorize\".toUri().buildUpon()\n            .appendQueryParameter(\"client_id\", CLIENT_ID)\n            .appendQueryParameter(\"response_type\", \"token\")\n            .build()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.track.anilist.dto.ALOAuth\nimport eu.kanade.tachiyomi.data.track.anilist.dto.isExpired\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport java.io.IOException\n\nclass AnilistInterceptor(val anilist: Anilist, private var token: String?) : Interceptor {\n\n    /**\n     * OAuth object used for authenticated requests.\n     *\n     * Anilist returns the date without milliseconds. We fix that and make the token expire 1 minute\n     * before its original expiration date.\n     */\n    private var oauth: ALOAuth? = null\n        set(value) {\n            field = value?.copy(expires = value.expires * 1000 - 60 * 1000)\n        }\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        if (token.isNullOrEmpty()) {\n            throw Exception(\"Not authenticated with Anilist\")\n        }\n        if (oauth == null) {\n            oauth = anilist.loadOAuth()\n        }\n        // Refresh access token if null or expired.\n        if (oauth!!.isExpired()) {\n            anilist.logout()\n            throw IOException(\"Token expired\")\n        }\n\n        // Throw on null auth.\n        if (oauth == null) {\n            throw IOException(\"No authentication token\")\n        }\n\n        // Add the authorization header to the original request.\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer ${oauth!!.accessToken}\")\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n\n    /**\n     * Called when the user authenticates with Anilist for the first time. Sets the refresh token\n     * and the oauth object.\n     */\n    fun setAuth(oauth: ALOAuth?) {\n        token = oauth?.accessToken\n        this.oauth = oauth\n        anilist.saveOAuth(oauth)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist\n\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nfun MangaTrack.toApiStatus() = when (status) {\n    Anilist.READING -> \"CURRENT\"\n    Anilist.COMPLETED -> \"COMPLETED\"\n    Anilist.ON_HOLD -> \"PAUSED\"\n    Anilist.DROPPED -> \"DROPPED\"\n    Anilist.PLAN_TO_READ -> \"PLANNING\"\n    Anilist.REREADING -> \"REPEATING\"\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n\nfun AnimeTrack.toApiStatus() = when (status) {\n    Anilist.WATCHING -> \"CURRENT\"\n    Anilist.COMPLETED -> \"COMPLETED\"\n    Anilist.ON_HOLD -> \"PAUSED\"\n    Anilist.DROPPED -> \"DROPPED\"\n    Anilist.PLAN_TO_WATCH -> \"PLANNING\"\n    Anilist.REWATCHING -> \"REPEATING\"\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n\nprivate val preferences: TrackPreferences by injectLazy()\n\nprivate fun Double.toApiScore(): String = when (preferences.anilistScoreType().get()) {\n    // 10 point\n    \"POINT_10\" -> (this.toInt() / 10).toString()\n    // 100 point\n    \"POINT_100\" -> this.toInt().toString()\n    // 5 stars\n    \"POINT_5\" -> when {\n        this == 0.0 -> \"0\"\n        this < 30 -> \"1\"\n        this < 50 -> \"2\"\n        this < 70 -> \"3\"\n        this < 90 -> \"4\"\n        else -> \"5\"\n    }\n    // Smiley\n    \"POINT_3\" -> when {\n        this == 0.0 -> \"0\"\n        this <= 35 -> \":(\"\n        this <= 60 -> \":|\"\n        else -> \":)\"\n    }\n    // 10 point decimal\n    \"POINT_10_DECIMAL\" -> (this / 10).toString()\n    else -> throw NotImplementedError(\"Unknown score type\")\n}\n\nfun DomainMangaTrack.toApiScore(): String = this.score.toApiScore()\nfun DomainAnimeTrack.toApiScore(): String = this.score.toApiScore()\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALAddEntry.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ALAddEntryResult(\n    val data: ALAddEntryData,\n)\n\n@Serializable\ndata class ALAddEntryData(\n    @SerialName(\"SaveMediaListEntry\")\n    val entry: ALAddEntryEntry,\n)\n\n@Serializable\ndata class ALAddEntryEntry(\n    val id: Long,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALAnime.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.anilist.Anilist\nimport eu.kanade.tachiyomi.data.track.anilist.AnilistApi\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.util.lang.htmlDecode\nimport java.text.SimpleDateFormat\nimport java.util.Locale\n\ndata class ALAnime(\n    val remoteId: Long,\n    val title: String,\n    val imageUrl: String,\n    val description: String?,\n    val format: String,\n    val publishingStatus: String,\n    val startDateFuzzy: Long,\n    val totalEpisodes: Long,\n    val averageScore: Int,\n    val studios: ALStudios,\n) {\n    fun toTrack() = AnimeTrackSearch.create(TrackerManager.ANILIST).apply {\n        remote_id = remoteId\n        title = this@ALAnime.title\n        total_episodes = totalEpisodes\n        cover_url = imageUrl\n        summary = description?.htmlDecode() ?: \"\"\n        score = averageScore.toDouble()\n        tracking_url = AnilistApi.animeUrl(remote_id)\n        publishing_status = publishingStatus\n        publishing_type = format\n        if (startDateFuzzy != 0L) {\n            start_date = try {\n                val outputDf = SimpleDateFormat(\"yyyy-MM-dd\", Locale.US)\n                outputDf.format(startDateFuzzy)\n            } catch (e: IllegalArgumentException) {\n                \"\"\n            }\n        }\n\n        authors = studios.edges\n            .filter { it.isMain }\n            .ifEmpty { studios.edges }\n            .take(3)\n            .map { it.node.name }\n    }\n}\n\ndata class ALUserAnime(\n    val libraryId: Long,\n    val listStatus: String,\n    val scoreRaw: Int,\n    val episodesSeen: Int,\n    val startDateFuzzy: Long,\n    val completedDateFuzzy: Long,\n    val anime: ALAnime,\n    val private: Boolean,\n) {\n    fun toTrack() = AnimeTrack.create(TrackerManager.ANILIST).apply {\n        remote_id = anime.remoteId\n        title = anime.title\n        status = toTrackStatus()\n        score = scoreRaw.toDouble()\n        started_watching_date = startDateFuzzy\n        finished_watching_date = completedDateFuzzy\n        last_episode_seen = episodesSeen.toDouble()\n        library_id = libraryId\n        total_episodes = anime.totalEpisodes\n        private = this@ALUserAnime.private\n    }\n\n    private fun toTrackStatus() = when (listStatus) {\n        \"CURRENT\" -> Anilist.WATCHING\n        \"COMPLETED\" -> Anilist.COMPLETED\n        \"PAUSED\" -> Anilist.ON_HOLD\n        \"DROPPED\" -> Anilist.DROPPED\n        \"PLANNING\" -> Anilist.PLAN_TO_WATCH\n        \"REPEATING\" -> Anilist.REWATCHING\n        else -> throw NotImplementedError(\"Unknown status: $listStatus\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALFuzzyDate.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.Serializable\nimport java.time.LocalDate\nimport java.time.ZoneId\n\n@Serializable\ndata class ALFuzzyDate(\n    val year: Int?,\n    val month: Int?,\n    val day: Int?,\n) {\n    fun toEpochMilli(): Long = try {\n        LocalDate.of(year!!, month!!, day!!)\n            .atStartOfDay(ZoneId.systemDefault())\n            .toInstant()\n            .toEpochMilli()\n    } catch (_: Exception) {\n        0L\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALManga.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.anilist.Anilist\nimport eu.kanade.tachiyomi.data.track.anilist.AnilistApi\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.util.lang.htmlDecode\nimport java.text.SimpleDateFormat\nimport java.util.Locale\n\ndata class ALManga(\n    val remoteId: Long,\n    val title: String,\n    val imageUrl: String,\n    val description: String?,\n    val format: String,\n    val publishingStatus: String,\n    val startDateFuzzy: Long,\n    val totalChapters: Long,\n    val averageScore: Int,\n    val staff: ALStaff,\n) {\n    fun toTrack() = MangaTrackSearch.create(TrackerManager.ANILIST).apply {\n        remote_id = remoteId\n        title = this@ALManga.title\n        total_chapters = totalChapters\n        cover_url = imageUrl\n        summary = description?.htmlDecode() ?: \"\"\n        score = averageScore.toDouble()\n        tracking_url = AnilistApi.mangaUrl(remote_id)\n        publishing_status = publishingStatus\n        publishing_type = format\n        if (startDateFuzzy != 0L) {\n            start_date = try {\n                val outputDf = SimpleDateFormat(\"yyyy-MM-dd\", Locale.US)\n                outputDf.format(startDateFuzzy)\n            } catch (e: IllegalArgumentException) {\n                \"\"\n            }\n        }\n        staff.edges.forEach {\n            val name = it.node.name() ?: return@forEach\n            if (\"Story\" in it.role) authors += name\n            if (\"Art\" in it.role) artists += name\n        }\n    }\n}\n\ndata class ALUserManga(\n    val libraryId: Long,\n    val listStatus: String,\n    val scoreRaw: Int,\n    val chaptersRead: Int,\n    val startDateFuzzy: Long,\n    val completedDateFuzzy: Long,\n    val manga: ALManga,\n    val private: Boolean,\n) {\n    fun toTrack() = MangaTrack.create(TrackerManager.ANILIST).apply {\n        remote_id = manga.remoteId\n        title = manga.title\n        status = toTrackStatus()\n        score = scoreRaw.toDouble()\n        started_reading_date = startDateFuzzy\n        finished_reading_date = completedDateFuzzy\n        last_chapter_read = chaptersRead.toDouble()\n        library_id = libraryId\n        total_chapters = manga.totalChapters\n        private = this@ALUserManga.private\n    }\n\n    private fun toTrackStatus() = when (listStatus) {\n        \"CURRENT\" -> Anilist.READING\n        \"COMPLETED\" -> Anilist.COMPLETED\n        \"PAUSED\" -> Anilist.ON_HOLD\n        \"DROPPED\" -> Anilist.DROPPED\n        \"PLANNING\" -> Anilist.PLAN_TO_READ\n        \"REPEATING\" -> Anilist.REREADING\n        else -> throw NotImplementedError(\"Unknown status: $listStatus\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALOAuth.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ALOAuth(\n    @SerialName(\"access_token\")\n    val accessToken: String,\n    @SerialName(\"token_type\")\n    val tokenType: String,\n    val expires: Long,\n    @SerialName(\"expires_in\")\n    val expiresIn: Long,\n)\n\nfun ALOAuth.isExpired() = System.currentTimeMillis() > expires\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ALSearchResult(\n    val data: ALSearchPage,\n)\n\n@Serializable\ndata class ALSearchPage(\n    @SerialName(\"Page\")\n    val page: ALSearchMedia,\n)\n\n@Serializable\ndata class ALSearchMedia(\n    val media: List<ALSearchItem>,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALSearchItem.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ALSearchItem(\n    val id: Long,\n    val title: ALItemTitle,\n    val coverImage: ItemCover,\n    val description: String?,\n    val format: String?,\n    val status: String?,\n    val startDate: ALFuzzyDate,\n    val chapters: Long?,\n    val episodes: Long?,\n    val averageScore: Int?,\n    val staff: ALStaff?,\n    val studios: ALStudios?,\n) {\n    fun toALManga(): ALManga = ALManga(\n        remoteId = id,\n        title = title.userPreferred,\n        imageUrl = coverImage.large,\n        description = description,\n        format = format?.replace(\"_\", \"-\") ?: \"\",\n        publishingStatus = status ?: \"\",\n        startDateFuzzy = startDate.toEpochMilli(),\n        totalChapters = chapters ?: 0,\n        averageScore = averageScore ?: -1,\n        staff = staff!!,\n    )\n\n    fun toALAnime(): ALAnime = ALAnime(\n        remoteId = id,\n        title = title.userPreferred,\n        imageUrl = coverImage.large,\n        description = description,\n        format = format?.replace(\"_\", \"-\") ?: \"\",\n        publishingStatus = status ?: \"\",\n        startDateFuzzy = startDate.toEpochMilli(),\n        totalEpisodes = episodes ?: 0,\n        averageScore = averageScore ?: -1,\n        studios = studios!!,\n    )\n}\n\n@Serializable\ndata class ALItemTitle(\n    val userPreferred: String,\n)\n\n@Serializable\ndata class ItemCover(\n    val large: String,\n)\n\n@Serializable\ndata class ALStaff(\n    val edges: List<ALStaffEdge>,\n)\n\n@Serializable\ndata class ALStaffEdge(\n    val role: String,\n    val id: Int,\n    val node: ALStaffNode,\n)\n\n@Serializable\ndata class ALStaffNode(\n    val name: ALStaffName,\n)\n\n@Serializable\ndata class ALStaffName(\n    val userPreferred: String?,\n    val native: String?,\n    val full: String?,\n) {\n    operator fun invoke(): String? {\n        return userPreferred ?: full ?: native\n    }\n}\n\n@Serializable\ndata class ALStudios(\n    val edges: List<ALStudiosEdge>,\n)\n\n@Serializable\ndata class ALStudiosEdge(\n    val isMain: Boolean,\n    val node: ALStudiosNode,\n)\n\n@Serializable\ndata class ALStudiosNode(\n    val name: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALUser.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ALCurrentUserResult(\n    val data: ALUserViewer,\n)\n\n@Serializable\ndata class ALUserViewer(\n    @SerialName(\"Viewer\")\n    val viewer: ALUserViewerData,\n)\n\n@Serializable\ndata class ALUserViewerData(\n    val id: Int,\n    val mediaListOptions: ALUserListOptions,\n)\n\n@Serializable\ndata class ALUserListOptions(\n    val scoreFormat: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/dto/ALUserList.kt",
    "content": "package eu.kanade.tachiyomi.data.track.anilist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ALUserListEntryQueryResult(\n    val data: ALUserListEntryPage,\n)\n\n@Serializable\ndata class ALUserListEntryPage(\n    @SerialName(\"Page\")\n    val page: ALUserListMediaList,\n)\n\n@Serializable\ndata class ALUserListMediaList(\n    val mediaList: List<ALUserListItem>,\n)\n\n@Serializable\ndata class ALUserListItem(\n    val id: Long,\n    val status: String,\n    val scoreRaw: Int,\n    val progress: Int,\n    val startedAt: ALFuzzyDate,\n    val completedAt: ALFuzzyDate,\n    val media: ALSearchItem,\n    val private: Boolean,\n) {\n    fun toALUserManga(): ALUserManga {\n        return ALUserManga(\n            libraryId = this@ALUserListItem.id,\n            listStatus = status,\n            scoreRaw = scoreRaw,\n            chaptersRead = progress,\n            startDateFuzzy = startedAt.toEpochMilli(),\n            completedDateFuzzy = completedAt.toEpochMilli(),\n            manga = media.toALManga(),\n            private = private,\n        )\n    }\n\n    fun toALUserAnime(): ALUserAnime {\n        return ALUserAnime(\n            libraryId = this@ALUserListItem.id,\n            listStatus = status,\n            scoreRaw = scoreRaw,\n            episodesSeen = progress,\n            startDateFuzzy = startedAt.toEpochMilli(),\n            completedDateFuzzy = completedAt.toEpochMilli(),\n            anime = media.toALAnime(),\n            private = private,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/Bangumi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.BGMOAuth\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass Bangumi(id: Long) : BaseTracker(id, \"Bangumi\"), MangaTracker, AnimeTracker {\n\n    private val json: Json by injectLazy()\n\n    private val interceptor by lazy { BangumiInterceptor(this) }\n\n    private val api by lazy { BangumiApi(id, client, interceptor) }\n\n    override val supportsPrivateTracking: Boolean = true\n\n    override fun getScoreList(): ImmutableList<String> = SCORE_LIST\n\n    override fun indexToScore(index: Int): Double {\n        return index.toDouble()\n    }\n\n    override fun displayScore(track: DomainMangaTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    override fun displayScore(track: DomainAnimeTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    private suspend fun add(track: MangaTrack): MangaTrack {\n        return api.addLibManga(track)\n    }\n\n    private suspend fun add(track: AnimeTrack): AnimeTrack {\n        return api.addLibAnime(track)\n    }\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                } else {\n                    track.status = READING\n                }\n            }\n        }\n\n        return api.updateLibManga(track)\n    }\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        if (track.status != COMPLETED) {\n            if (didWatchEpisode) {\n                if (track.last_episode_seen.toLong() == track.total_episodes && track.total_episodes > 0) {\n                    track.status = COMPLETED\n                } else {\n                    track.status = READING\n                }\n            }\n        }\n\n        return api.updateLibAnime(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        val statusTrack = api.statusLibManga(track, getUsername())\n        return if (statusTrack != null) {\n            track.copyPersonalFrom(statusTrack, copyRemotePrivate = false)\n            track.library_id = statusTrack.library_id\n            track.score = statusTrack.score\n            track.last_chapter_read = statusTrack.last_chapter_read\n            track.total_chapters = statusTrack.total_chapters\n\n            if (track.status != COMPLETED) {\n                track.status = if (hasReadChapters) READING else statusTrack.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasReadChapters) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasSeenEpisodes: Boolean): AnimeTrack {\n        val statusTrack = api.statusLibAnime(track, getUsername())\n        return if (statusTrack != null) {\n            track.copyPersonalFrom(statusTrack, copyRemotePrivate = false)\n            track.library_id = statusTrack.library_id\n            track.score = statusTrack.score\n            track.last_episode_seen = statusTrack.last_episode_seen\n            track.total_episodes = statusTrack.total_episodes\n\n            if (track.status != COMPLETED) {\n                track.status = if (hasSeenEpisodes) READING else statusTrack.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasSeenEpisodes) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        return api.search(query)\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return api.searchAnime(query)\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val remoteStatusTrack = api.statusLibManga(track, getUsername()) ?: throw Exception(\"Could not find manga\")\n        track.copyPersonalFrom(remoteStatusTrack)\n        return track\n    }\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        val remoteStatusTrack = api.statusLibAnime(track, getUsername()) ?: throw Exception(\"Could not find anime\")\n        track.copyPersonalFrom(remoteStatusTrack)\n        return track\n    }\n\n    override fun getLogo() = R.drawable.ic_tracker_bangumi\n\n    override fun getLogoColor() = Color.rgb(240, 145, 153)\n\n    override fun getStatusListManga(): List<Long> {\n        return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ)\n    }\n\n    override fun getStatusListAnime(): List<Long> {\n        return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ)\n    }\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        READING -> MR.strings.reading\n        PLAN_TO_READ -> MR.strings.plan_to_read\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        else -> null\n    }\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        READING -> AYMR.strings.watching\n        PLAN_TO_READ -> AYMR.strings.plan_to_watch\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getWatchingStatus(): Long = READING\n\n    override fun getRereadingStatus(): Long = -1\n\n    override fun getRewatchingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override suspend fun login(username: String, password: String) = login(password)\n\n    suspend fun login(code: String) {\n        try {\n            val oauth = api.accessToken(code)\n            interceptor.newAuth(oauth)\n            // Users can set a 'username' (not nickname) once which effectively\n            // replaces the stringified ID in certain queries.\n            // If no username is set, the API returns the user ID as a strings\n            var username = api.getUsername()\n            saveCredentials(username, oauth.accessToken)\n        } catch (_: Throwable) {\n            logout()\n        }\n    }\n\n    fun saveToken(oauth: BGMOAuth?) {\n        trackPreferences.trackToken(this).set(json.encodeToString(oauth))\n    }\n\n    fun restoreToken(): BGMOAuth? {\n        return try {\n            json.decodeFromString<BGMOAuth>(trackPreferences.trackToken(this).get())\n        } catch (_: Exception) {\n            null\n        }\n    }\n\n    override fun logout() {\n        super.logout()\n        trackPreferences.trackToken(this).delete()\n        interceptor.newAuth(null)\n    }\n\n    companion object {\n        const val PLAN_TO_READ = 1L\n        const val COMPLETED = 2L\n        const val READING = 3L\n        const val ON_HOLD = 4L\n        const val DROPPED = 5L\n\n        private val SCORE_LIST = IntRange(0, 10)\n            .map(Int::toString)\n            .toImmutableList()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi\n\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.BGMCollectionResponse\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.BGMOAuth\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.BGMSearchResult\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.BGMUser\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.HttpException\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.add\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonArray\nimport kotlinx.serialization.json.putJsonObject\nimport okhttp3.CacheControl\nimport okhttp3.FormBody\nimport okhttp3.Headers.Companion.headersOf\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.injectLazy\n\nclass BangumiApi(\n    private val trackId: Long,\n    private val client: OkHttpClient,\n    interceptor: BangumiInterceptor,\n) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder().addInterceptor(interceptor).build()\n\n    suspend fun addLibManga(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val url = \"$API_URL/v0/users/-/collections/${track.remote_id}\"\n            val body = buildJsonObject {\n                put(\"type\", track.toApiStatus())\n                put(\"rate\", track.score.toInt().coerceIn(0, 10))\n                put(\"ep_status\", track.last_chapter_read.toInt())\n                put(\"private\", track.private)\n            }\n                .toString()\n                .toRequestBody()\n            // Returns with 202 Accepted on success with no body\n            authClient.newCall(POST(url, body = body, headers = headersOf(\"Content-Type\", APP_JSON)))\n                .awaitSuccess()\n            track\n        }\n    }\n\n    suspend fun addLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val url = \"$API_URL/v0/users/-/collections/${track.remote_id}\"\n            val body = buildJsonObject {\n                put(\"type\", track.toApiStatus())\n                put(\"rate\", track.score.toInt().coerceIn(0, 10))\n                put(\"ep_status\", track.last_episode_seen.toInt())\n                put(\"private\", track.private)\n            }\n                .toString()\n                .toRequestBody()\n            // Returns with 202 Accepted on success with no body\n            authClient.newCall(POST(url, body = body, headers = headersOf(\"Content-Type\", APP_JSON)))\n                .awaitSuccess()\n            track\n        }\n    }\n\n    suspend fun updateLibManga(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val url = \"$API_URL/v0/users/-/collections/${track.remote_id}\"\n            val body = buildJsonObject {\n                put(\"type\", track.toApiStatus())\n                put(\"rate\", track.score.toInt().coerceIn(0, 10))\n                put(\"ep_status\", track.last_chapter_read.toInt())\n                put(\"private\", track.private)\n            }\n                .toString()\n                .toRequestBody()\n\n            val request = Request.Builder()\n                .url(url)\n                .patch(body)\n                .headers(headersOf(\"Content-Type\", APP_JSON))\n                .build()\n            // Returns with 204 No Content\n            authClient.newCall(request)\n                .awaitSuccess()\n\n            track\n        }\n    }\n\n    suspend fun updateLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val url = \"$API_URL/v0/users/-/collections/${track.remote_id}\"\n            val body = buildJsonObject {\n                put(\"type\", track.toApiStatus())\n                put(\"rate\", track.score.toInt().coerceIn(0, 10))\n                put(\"ep_status\", track.last_episode_seen.toInt())\n                put(\"private\", track.private)\n            }\n                .toString()\n                .toRequestBody()\n\n            val request = Request.Builder()\n                .url(url)\n                .patch(body)\n                .headers(headersOf(\"Content-Type\", APP_JSON))\n                .build()\n            // Returns with 204 No Content\n            authClient.newCall(request)\n                .awaitSuccess()\n\n            track\n        }\n    }\n\n    suspend fun search(search: String): List<MangaTrackSearch> {\n        // This API is marked as experimental in the documentation\n        // but that has been the case since 2022 with few significant\n        // changes to the schema for this endpoint since\n        // \"实验性 API， 本 schema 和实际的 API 行为都可能随时发生改动\"\n        return withIOContext {\n            val url = \"$API_URL/v0/search/subjects?limit=20\"\n            val body = buildJsonObject {\n                put(\"keyword\", search)\n                put(\"sort\", \"match\")\n                putJsonObject(\"filter\") {\n                    putJsonArray(\"type\") {\n                        add(1) // \"Book\" (书籍) type\n                    }\n                }\n            }\n                .toString()\n                .toRequestBody()\n            with(json) {\n                authClient.newCall(POST(url, body = body, headers = headersOf(\"Content-Type\", APP_JSON)))\n                    .awaitSuccess()\n                    .parseAs<BGMSearchResult>()\n                    .data\n                    .filter { it.platform == null || it.platform == \"漫画\" }\n                    .map { it.toMangaTrackSearch(trackId) }\n            }\n        }\n    }\n\n    suspend fun searchAnime(search: String): List<AnimeTrackSearch> {\n        // This API is marked as experimental in the documentation\n        // but that has been the case since 2022 with few significant\n        // changes to the schema for this endpoint since\n        // \"实验性 API， 本 schema 和实际的 API 行为都可能随时发生改动\"\n        return withIOContext {\n            val url = \"$API_URL/v0/search/subjects?limit=20\"\n            val body = buildJsonObject {\n                put(\"keyword\", search)\n                put(\"sort\", \"match\")\n                putJsonObject(\"filter\") {\n                    putJsonArray(\"type\") {\n                        add(2) // \"Anime\" (动画) type\n                    }\n                }\n            }\n                .toString()\n                .toRequestBody()\n            with(json) {\n                authClient.newCall(POST(url, body = body, headers = headersOf(\"Content-Type\", APP_JSON)))\n                    .awaitSuccess()\n                    .parseAs<BGMSearchResult>()\n                    .data\n                    .map { it.toAnimeTrackSearch(trackId) }\n            }\n        }\n    }\n\n    suspend fun statusLibManga(track: MangaTrack, username: String): MangaTrack? {\n        return withIOContext {\n            val url = \"$API_URL/v0/users/$username/collections/${track.remote_id}\"\n            with(json) {\n                try {\n                    authClient.newCall(GET(url, cache = CacheControl.FORCE_NETWORK))\n                        .awaitSuccess()\n                        .parseAs<BGMCollectionResponse>()\n                        .let {\n                            track.status = it.getStatus()\n                            track.last_chapter_read = it.epStatus?.toDouble() ?: 0.0\n                            track.score = it.rate?.toDouble() ?: 0.0\n                            track.total_chapters = it.subject?.eps?.toLong() ?: 0L\n                            track\n                        }\n                } catch (e: HttpException) {\n                    if (e.code == 404) { // \"subject is not collected by user\"\n                        null\n                    } else {\n                        throw e\n                    }\n                }\n            }\n        }\n    }\n\n    suspend fun statusLibAnime(track: AnimeTrack, username: String): AnimeTrack? {\n        return withIOContext {\n            val url = \"$API_URL/v0/users/$username/collections/${track.remote_id}\"\n            with(json) {\n                try {\n                    authClient.newCall(GET(url, cache = CacheControl.FORCE_NETWORK))\n                        .awaitSuccess()\n                        .parseAs<BGMCollectionResponse>()\n                        .let {\n                            track.status = it.getStatus()\n                            track.last_episode_seen = it.epStatus?.toDouble() ?: 0.0\n                            track.score = it.rate?.toDouble() ?: 0.0\n                            track.total_episodes = it.subject?.eps?.toLong() ?: 0L\n                            track\n                        }\n                } catch (e: HttpException) {\n                    if (e.code == 404) { // \"subject is not collected by user\"\n                        null\n                    } else {\n                        throw e\n                    }\n                }\n            }\n        }\n    }\n\n    suspend fun accessToken(code: String): BGMOAuth {\n        return withIOContext {\n            val body = FormBody.Builder()\n                .add(\"grant_type\", \"authorization_code\")\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"client_secret\", CLIENT_SECRET)\n                .add(\"code\", code)\n                .add(\"redirect_uri\", REDIRECT_URL)\n                .build()\n\n            with(json) {\n                client.newCall(POST(OAUTH_URL, body = body))\n                    .awaitSuccess()\n                    .parseAs<BGMOAuth>()\n            }\n        }\n    }\n\n    suspend fun getUsername(): String {\n        return withIOContext {\n            with(json) {\n                authClient.newCall(GET(\"$API_URL/v0/me\"))\n                    .awaitSuccess()\n                    .parseAs<BGMUser>()\n                    .username\n            }\n        }\n    }\n\n    companion object {\n        private const val CLIENT_ID = \"bgm293165b66d7e58156\"\n        private const val CLIENT_SECRET = \"21d5f5c19ac24b4bc9c855ffa2387030\"\n\n        private const val API_URL = \"https://api.bgm.tv\"\n        private const val OAUTH_URL = \"https://bgm.tv/oauth/access_token\"\n        private const val LOGIN_URL = \"https://bgm.tv/oauth/authorize\"\n\n        private const val REDIRECT_URL = \"aniyomi://bangumi-auth\"\n\n        private const val APP_JSON = \"application/json\"\n\n        fun authUrl(): Uri =\n            LOGIN_URL.toUri().buildUpon()\n                .appendQueryParameter(\"client_id\", CLIENT_ID)\n                .appendQueryParameter(\"response_type\", \"code\")\n                .appendQueryParameter(\"redirect_uri\", REDIRECT_URL)\n                .build()\n\n        fun refreshTokenRequest(token: String) = POST(\n            OAUTH_URL,\n            body = FormBody.Builder()\n                .add(\"grant_type\", \"refresh_token\")\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"client_secret\", CLIENT_SECRET)\n                .add(\"refresh_token\", token)\n                .add(\"redirect_uri\", REDIRECT_URL)\n                .build(),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.BGMOAuth\nimport eu.kanade.tachiyomi.data.track.bangumi.dto.isExpired\nimport kotlinx.serialization.json.Json\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport uy.kohesive.injekt.injectLazy\n\nclass BangumiInterceptor(private val bangumi: Bangumi) : Interceptor {\n\n    private val json: Json by injectLazy()\n\n    /**\n     * OAuth object used for authenticated requests.\n     */\n    private var oauth: BGMOAuth? = bangumi.restoreToken()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        var currAuth: BGMOAuth = oauth ?: throw Exception(\"Not authenticated with Bangumi\")\n\n        if (currAuth.isExpired()) {\n            val response = chain.proceed(BangumiApi.refreshTokenRequest(currAuth.refreshToken!!))\n            if (response.isSuccessful) {\n                currAuth = json.decodeFromString<BGMOAuth>(response.body.string())\n                newAuth(currAuth)\n            } else {\n                response.close()\n            }\n        }\n\n        return originalRequest.newBuilder()\n            .header(\n                \"User-Agent\",\n                \"jmir1/Aniyomi/v${BuildConfig.VERSION_NAME} (Android) (https://github.com/aniyomiorg/aniyomi)\",\n            )\n            .apply {\n                addHeader(\"Authorization\", \"Bearer ${currAuth.accessToken}\")\n            }\n            .build()\n            .let(chain::proceed)\n    }\n\n    fun newAuth(oauth: BGMOAuth?) {\n        this.oauth = if (oauth == null) {\n            null\n        } else {\n            BGMOAuth(\n                oauth.accessToken,\n                oauth.tokenType,\n                System.currentTimeMillis() / 1000,\n                oauth.expiresIn,\n                oauth.refreshToken,\n                this.oauth?.userId,\n            )\n        }\n\n        bangumi.saveToken(oauth)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiUtils.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\n\nfun MangaTrack.toApiStatus() = when (status) {\n    Bangumi.PLAN_TO_READ -> 1\n    Bangumi.COMPLETED -> 2\n    Bangumi.READING -> 3\n    Bangumi.ON_HOLD -> 4\n    Bangumi.DROPPED -> 5\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n\nfun AnimeTrack.toApiStatus() = when (status) {\n    Bangumi.PLAN_TO_READ -> 1\n    Bangumi.COMPLETED -> 2\n    Bangumi.READING -> 3\n    Bangumi.ON_HOLD -> 4\n    Bangumi.DROPPED -> 5\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMCollectionResponse.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi.dto\n\nimport eu.kanade.tachiyomi.data.track.bangumi.Bangumi\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class BGMCollectionResponse(\n    val rate: Int?,\n    val type: Int?,\n    @SerialName(\"ep_status\")\n    val epStatus: Int? = 0,\n    @SerialName(\"vol_status\")\n    val volStatus: Int? = 0,\n    val private: Boolean = false,\n    val subject: BGMSlimSubject? = null,\n) {\n    fun getStatus(): Long = when (type) {\n        1 -> Bangumi.PLAN_TO_READ\n        2 -> Bangumi.COMPLETED\n        3 -> Bangumi.READING\n        4 -> Bangumi.ON_HOLD\n        5 -> Bangumi.DROPPED\n        else -> throw NotImplementedError(\"Unknown status: $type\")\n    }\n}\n\n@Serializable\n// Incomplete DTO with only our needed attributes\ndata class BGMSlimSubject(\n    val volumes: Int?,\n    val eps: Int?,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi.dto\n\nimport kotlinx.serialization.EncodeDefault\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class BGMOAuth(\n    @SerialName(\"access_token\")\n    val accessToken: String,\n    @SerialName(\"token_type\")\n    val tokenType: String,\n    @SerialName(\"created_at\")\n    @EncodeDefault\n    val createdAt: Long = System.currentTimeMillis() / 1000,\n    @SerialName(\"expires_in\")\n    val expiresIn: Long,\n    @SerialName(\"refresh_token\")\n    val refreshToken: String?,\n    @SerialName(\"user_id\")\n    val userId: Long?,\n)\n\n// Access token refresh before expired\nfun BGMOAuth.isExpired() = (System.currentTimeMillis() / 1000) > (createdAt + expiresIn - 3600)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi.dto\n\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class BGMSearchResult(\n    val total: Int,\n    val limit: Int,\n    val offset: Int,\n    val data: List<BGMSubject> = emptyList(),\n)\n\n@Serializable\n// Incomplete DTO with only our needed attributes\ndata class BGMSubject(\n    val id: Long,\n    @SerialName(\"name_cn\")\n    val nameCn: String,\n    val name: String,\n    val summary: String?,\n    val date: String?, // YYYY-MM-DD\n    val images: BGMSubjectImages?,\n    val volumes: Long = 0,\n    val eps: Long = 0,\n    val rating: BGMSubjectRating?,\n    val platform: String?,\n) {\n    fun toMangaTrackSearch(trackId: Long): MangaTrackSearch = MangaTrackSearch.create(trackId).apply {\n        remote_id = this@BGMSubject.id\n        title = nameCn.ifBlank { name }\n        cover_url = images?.common.orEmpty()\n        summary = if (nameCn.isNotBlank()) {\n            \"作品原名：$name\" + this@BGMSubject.summary?.let { \"\\n${it.trim()}\" }.orEmpty()\n        } else {\n            this@BGMSubject.summary?.trim().orEmpty()\n        }\n        score = rating?.score ?: -1.0\n        tracking_url = \"https://bangumi.tv/subject/${this@BGMSubject.id}\"\n        total_chapters = eps\n        start_date = date ?: \"\"\n    }\n\n    fun toAnimeTrackSearch(trackId: Long): AnimeTrackSearch = AnimeTrackSearch.create(trackId).apply {\n        remote_id = this@BGMSubject.id\n        title = nameCn.ifBlank { name }\n        cover_url = images?.common.orEmpty()\n        summary = if (nameCn.isNotBlank()) {\n            \"作品原名：$name\" + this@BGMSubject.summary?.let { \"\\n${it.trim()}\" }.orEmpty()\n        } else {\n            this@BGMSubject.summary?.trim().orEmpty()\n        }\n        score = rating?.score ?: -1.0\n        tracking_url = \"https://bangumi.tv/subject/${this@BGMSubject.id}\"\n        total_episodes = eps\n        start_date = date ?: \"\"\n    }\n}\n\n@Serializable\n// Incomplete DTO with only our needed attributes\ndata class BGMSubjectImages(\n    val common: String?,\n)\n\n@Serializable\n// Incomplete DTO with only our needed attributes\ndata class BGMSubjectRating(\n    val score: Double?,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMUser.kt",
    "content": "package eu.kanade.tachiyomi.data.track.bangumi.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\n// Incomplete DTO with only our needed attributes\ndata class BGMUser(\n    val username: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/jellyfin/Jellyfin.kt",
    "content": "package eu.kanade.tachiyomi.data.track.jellyfin\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport okhttp3.Dns\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainTrack\n\nclass Jellyfin(id: Long) : BaseTracker(id, \"Jellyfin\"), EnhancedAnimeTracker, AnimeTracker {\n\n    companion object {\n        const val UNSEEN = 1L\n        const val WATCHING = 2L\n        const val COMPLETED = 3L\n    }\n\n    override val client by lazy {\n        networkService.client.newBuilder()\n            .addInterceptor(JellyfinInterceptor())\n            .dns(Dns.SYSTEM) // don't use DNS over HTTPS as it breaks IP addressing\n            .build()\n    }\n\n    val api by lazy { JellyfinApi(id, client) }\n\n    override fun getLogo() = R.drawable.ic_tracker_jellyfin\n\n    override fun getLogoColor() = Color.rgb(0, 11, 37)\n\n    override fun getStatusListAnime(): List<Long> = listOf(UNSEEN, WATCHING, COMPLETED)\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        UNSEEN -> AYMR.strings.unseen\n        WATCHING -> AYMR.strings.watching\n        COMPLETED -> MR.strings.completed\n        else -> null\n    }\n\n    override fun getWatchingStatus(): Long = WATCHING\n\n    override fun getRewatchingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> = persistentListOf()\n\n    override fun displayScore(track: DomainTrack): String = \"\"\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        return api.updateProgress(track)\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasSeenEpisodes: Boolean): AnimeTrack {\n        return track\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> =\n        throw Exception(\"Not used\")\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        val remoteTrack = api.getTrackSearch(track.tracking_url)\n        track.copyPersonalFrom(remoteTrack)\n        track.total_episodes = remoteTrack.total_episodes\n        return track\n    }\n\n    override suspend fun login(username: String, password: String) {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    override fun loginNoop() {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    override fun getAcceptedSources() = listOf(\"eu.kanade.tachiyomi.animeextension.all.jellyfin.Jellyfin\")\n\n    override suspend fun match(anime: Anime): AnimeTrackSearch? =\n        try {\n            api.getTrackSearch(anime.url)\n        } catch (e: Exception) {\n            null\n        }\n\n    override fun isTrackFrom(track: DomainTrack, anime: Anime, source: AnimeSource?): Boolean =\n        track.remoteUrl == anime.url && source?.let { accept(it) } == true\n\n    override fun migrateTrack(track: DomainTrack, anime: Anime, newSource: AnimeSource): DomainTrack? {\n        return if (accept(newSource)) {\n            track.copy(remoteUrl = anime.url)\n        } else {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/jellyfin/JellyfinApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.jellyfin\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.jellyfin.dto.JFItem\nimport eu.kanade.tachiyomi.data.track.jellyfin.dto.JFItemList\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport okhttp3.HttpUrl\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport okhttp3.OkHttpClient\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\nimport kotlin.math.abs\n\nclass JellyfinApi(\n    private val trackId: Long,\n    private val client: OkHttpClient,\n) {\n    private val json: Json by injectLazy()\n\n    suspend fun getTrackSearch(url: String): AnimeTrackSearch =\n        withIOContext {\n            try {\n                val httpUrl = url.toHttpUrl()\n                val fragment = httpUrl.fragment!!\n\n                val track = with(json) {\n                    client.newCall(GET(url))\n                        .awaitSuccess()\n                        .parseAs<JFItem>()\n                        .toTrack()\n                }.apply { tracking_url = url }\n\n                when {\n                    fragment.startsWith(\"seriesId\") -> {\n                        getTrackFromSeries(track, httpUrl)\n                    }\n                    else -> track\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.WARN, e) { \"Could not get item: $url\" }\n                throw e\n            }\n        }\n\n    private fun JFItem.toTrack(): AnimeTrackSearch = AnimeTrackSearch.create(\n        trackId,\n    ).also {\n        it.title = name\n        it.total_episodes = 1\n        if (userData.played) {\n            it.last_episode_seen = 1.0\n            it.status = Jellyfin.COMPLETED\n        } else {\n            it.last_episode_seen = 0.0\n            it.status = Jellyfin.UNSEEN\n        }\n    }\n\n    private fun getEpisodesUrl(url: HttpUrl): HttpUrl {\n        val fragment = url.fragment!!\n\n        return url.newBuilder().apply {\n            encodedPath(\"/\")\n            fragment(null)\n            encodedQuery(null)\n\n            addPathSegment(\"Shows\")\n            addPathSegment(fragment.split(\",\").last())\n            addPathSegment(\"Episodes\")\n            addQueryParameter(\"seasonId\", url.pathSegments.last())\n            addQueryParameter(\"userId\", url.pathSegments[1])\n            addQueryParameter(\"Fields\", \"Overview,MediaSources\")\n        }.build()\n    }\n\n    private suspend fun getTrackFromSeries(track: AnimeTrackSearch, url: HttpUrl): AnimeTrackSearch {\n        val episodesUrl = getEpisodesUrl(url)\n\n        val episodes = with(json) {\n            client.newCall(GET(episodesUrl))\n                .awaitSuccess()\n                .parseAs<JFItemList>()\n        }.items\n\n        val totalEpisodes = episodes.last().indexNumber!!\n        val firstUnwatched = episodes.indexOfFirst { !it.userData.played }\n\n        if (firstUnwatched == 0) {\n            return track.apply {\n                this.total_episodes = totalEpisodes\n                this.last_episode_seen = 0.0\n                this.status = Jellyfin.UNSEEN\n            }\n        }\n\n        if (firstUnwatched == -1) {\n            return track.apply {\n                this.total_episodes = totalEpisodes\n                this.last_episode_seen = totalEpisodes.toDouble()\n                this.status = Jellyfin.COMPLETED\n            }\n        }\n\n        val lastContinuousSeen = episodes[firstUnwatched - 1].indexNumber!!\n\n        return track.apply {\n            this.total_episodes = totalEpisodes\n            this.last_episode_seen = lastContinuousSeen.toDouble()\n            this.status = Jellyfin.WATCHING\n        }\n    }\n\n    suspend fun updateProgress(track: AnimeTrack): AnimeTrack {\n        val httpUrl = track.tracking_url.toHttpUrl()\n        val fragment = httpUrl.fragment!!\n\n        val itemId = if (fragment.startsWith(\"movie\")) {\n            httpUrl.pathSegments.last()\n        } else {\n            val episodesUrl = getEpisodesUrl(httpUrl)\n            val episodes = with(json) {\n                client.newCall(GET(episodesUrl))\n                    .awaitSuccess()\n                    .parseAs<JFItemList>()\n            }.items\n\n            episodes.firstOrNull {\n                it.indexNumber!!.equalsTo(track.last_episode_seen)\n            }?.id\n        }\n\n        if (itemId != null) {\n            val time = DATE_FORMATTER.format(Date())\n            val postUrl = httpUrl.newBuilder().apply {\n                fragment(null)\n                removePathSegment(3)\n                removePathSegment(2)\n                addPathSegment(\"PlayedItems\")\n                addPathSegment(itemId)\n                addQueryParameter(\"DatePlayed\", time)\n            }.build().toString()\n\n            client.newCall(\n                POST(postUrl),\n            ).awaitSuccess()\n        }\n\n        return getTrackSearch(track.tracking_url)\n    }\n\n    private fun Long.equalsTo(other: Double): Boolean {\n        return abs(this - other) < 0.001\n    }\n\n    companion object {\n        private val DATE_FORMATTER = SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", Locale.US)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/jellyfin/JellyfinInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.jellyfin\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource\nimport eu.kanade.tachiyomi.animesource.sourcePreferences\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.injectLazy\nimport java.io.IOException\nimport java.security.MessageDigest\n\nclass JellyfinInterceptor : Interceptor {\n\n    private val sourceManager: AnimeSourceManager by injectLazy()\n\n    private val apiKeys = mutableMapOf<String, String>()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        // Add the User-Agent header to the original request.\n        val uaRequest = originalRequest.newBuilder()\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        // Check api keys\n        if (originalRequest.url.queryParameter(\"api_key\") != null) {\n            return chain.proceed(uaRequest)\n        }\n\n        val userId = originalRequest.url.queryParameter(\"userId\") ?: originalRequest.url.pathSegments[1]\n        val apiKey = apiKeys[userId] ?: getApiKey(userId)?.also { apiKeys[userId] = it }\n            ?: throw IOException(\"Please log in through the extension\")\n\n        val authUrl = originalRequest.url.newBuilder()\n            .addQueryParameter(\"api_key\", apiKey)\n            .build()\n\n        val authRequest = uaRequest.newBuilder().url(authUrl).build()\n        return chain.proceed(authRequest)\n    }\n\n    private fun getId(suffix: Int): Long {\n        val key = \"jellyfin\" + (if (suffix == 1) \"\" else \" ($suffix)\") + \"/all/$JELLYFIN_VERSION_ID\"\n        val bytes = MessageDigest.getInstance(\"MD5\").digest(key.toByteArray())\n        return (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }\n            .reduce(Long::or) and Long.MAX_VALUE\n    }\n\n    private fun getApiKey(userId: String): String? {\n        for (i in 1..MAX_JELLYFIN_SOURCES) {\n            val sourceId = getId(i)\n            val preferences = (sourceManager.get(sourceId) as ConfigurableAnimeSource).sourcePreferences()\n            val sourceUserId = preferences.getString(\"user_id\", \"\")\n\n            if (sourceUserId.isNullOrEmpty()) {\n                continue // Source not configured\n            }\n\n            if (sourceUserId == userId) {\n                return preferences.getString(\"api_key\", \"\")\n            }\n        }\n\n        return null\n    }\n\n    companion object {\n        private const val JELLYFIN_VERSION_ID = 1\n        private const val MAX_JELLYFIN_SOURCES = 10\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/jellyfin/dto/JFItem.kt",
    "content": "package eu.kanade.tachiyomi.data.track.jellyfin.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class JFItem(\n    @SerialName(\"Name\") val name: String,\n    @SerialName(\"Id\") val id: String,\n    @SerialName(\"UserData\") val userData: JFUserData,\n    @SerialName(\"IndexNumber\") val indexNumber: Long? = null,\n)\n\n@Serializable\ndata class JFUserData(\n    @SerialName(\"Played\") val played: Boolean,\n)\n\n@Serializable\ndata class JFItemList(\n    @SerialName(\"Items\") val items: List<JFItem>,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/Kavita.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kavita\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.source.ConfigurableSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.sourcePreferences\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.injectLazy\nimport java.security.MessageDigest\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack\n\nclass Kavita(id: Long) : BaseTracker(id, \"Kavita\"), EnhancedMangaTracker, MangaTracker {\n\n    companion object {\n        const val UNREAD = 1L\n        const val READING = 2L\n        const val COMPLETED = 3L\n    }\n\n    var authentications: OAuth? = null\n\n    private val interceptor by lazy { KavitaInterceptor(this) }\n    val api by lazy { KavitaApi(client, interceptor) }\n\n    private val sourceManager: MangaSourceManager by injectLazy()\n\n    override fun getLogo(): Int = R.drawable.ic_tracker_kavita\n\n    override fun getLogoColor() = Color.rgb(74, 198, 148)\n\n    override fun getStatusListManga(): List<Long> = listOf(UNREAD, READING, COMPLETED)\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        UNREAD -> MR.strings.unread\n        READING -> MR.strings.reading\n        COMPLETED -> MR.strings.completed\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getRereadingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> = persistentListOf()\n\n    override fun displayScore(track: DomainTrack): String = \"\"\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                } else {\n                    track.status = READING\n                }\n            }\n        }\n        return api.updateProgress(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        return track\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        TODO(\"Not yet implemented: search\")\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val remoteTrack = api.getTrackSearch(track.tracking_url)\n        track.copyPersonalFrom(remoteTrack)\n        track.total_chapters = remoteTrack.total_chapters\n        return track\n    }\n\n    override suspend fun login(username: String, password: String) {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    // [Tracker].isLogged works by checking that credentials are saved.\n    // By saving dummy, unused credentials, we can activate the tracker simply by login/logout\n    override fun loginNoop() {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    override fun getAcceptedSources() = listOf(\"eu.kanade.tachiyomi.extension.all.kavita.Kavita\")\n\n    override suspend fun match(manga: Manga): MangaTrackSearch? =\n        try {\n            api.getTrackSearch(manga.url)\n        } catch (e: Exception) {\n            null\n        }\n\n    override fun isTrackFrom(track: DomainTrack, manga: Manga, source: MangaSource?): Boolean =\n        track.remoteUrl == manga.url && source?.let { accept(it) } == true\n\n    override fun migrateTrack(track: DomainTrack, manga: Manga, newSource: MangaSource): DomainTrack? =\n        if (accept(newSource)) {\n            track.copy(remoteUrl = manga.url)\n        } else {\n            null\n        }\n\n    fun loadOAuth() {\n        val oauth = OAuth()\n        for (id in 1..3) {\n            val authentication = oauth.authentications[id - 1]\n            val sourceId by lazy {\n                val key = \"kavita_$id/all/1\" // Hardcoded versionID to 1\n                val bytes = MessageDigest.getInstance(\"MD5\").digest(key.toByteArray())\n                (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }\n                    .reduce(Long::or) and Long.MAX_VALUE\n            }\n            val preferences = (sourceManager.get(sourceId) as ConfigurableSource).sourcePreferences()\n\n            val prefApiUrl = preferences.getString(\"APIURL\", \"\")\n            val prefApiKey = preferences.getString(\"APIKEY\", \"\")\n            if (prefApiUrl.isNullOrEmpty() || prefApiKey.isNullOrEmpty()) {\n                // Source not configured. Skip\n                continue\n            }\n\n            val token = api.getNewToken(apiUrl = prefApiUrl, apiKey = prefApiKey)\n            if (token.isNullOrEmpty()) {\n                // Source is not accessible. Skip\n                continue\n            }\n\n            authentication.apiUrl = prefApiUrl\n            authentication.jwtToken = token.toString()\n        }\n        authentications = oauth\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kavita\n\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport okhttp3.Dns\nimport okhttp3.MediaType.Companion.toMediaTypeOrNull\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport java.io.IOException\nimport java.net.SocketTimeoutException\n\nclass KavitaApi(private val client: OkHttpClient, interceptor: KavitaInterceptor) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder()\n        .dns(Dns.SYSTEM)\n        .addInterceptor(interceptor)\n        .build()\n\n    fun getApiFromUrl(url: String): String {\n        return url.split(\"/api/\").first() + \"/api\"\n    }\n\n    /*\n     * Uses url to compare against each source APIURL's to get the correct custom source preference.\n     * Now having source preference we can do getString(\"APIKEY\")\n     * Authenticates to get the token\n     * Saves the token in the var jwtToken\n     */\n    fun getNewToken(apiUrl: String, apiKey: String): String? {\n        val request = POST(\n            \"$apiUrl/Plugin/authenticate?apiKey=$apiKey&pluginName=Tachiyomi-Kavita\",\n            body = \"{}\".toRequestBody(\"application/json; charset=utf-8\".toMediaTypeOrNull()),\n        )\n        try {\n            with(json) {\n                client.newCall(request).execute().use {\n                    when (it.code) {\n                        200 -> return it.parseAs<AuthenticationDto>().token\n                        401 -> {\n                            logcat(LogPriority.WARN) {\n                                \"Unauthorized / api key not valid: Cleaned api URL: \" +\n                                    \"$apiUrl, Api key is empty: ${apiKey.isEmpty()}\"\n                            }\n                            throw IOException(\"Unauthorized / api key not valid\")\n                        }\n                        500 -> {\n                            logcat(\n                                LogPriority.WARN,\n                            ) {\n                                \"Error fetching JWT token. Cleaned api URL: \" +\n                                    \"$apiUrl, Api key is empty: ${apiKey.isEmpty()}\"\n                            }\n                            throw IOException(\"Error fetching JWT token\")\n                        }\n                        else -> {}\n                    }\n                }\n            }\n            // Not sure which one to catch\n        } catch (e: SocketTimeoutException) {\n            logcat(LogPriority.WARN) {\n                \"Could not fetch JWT token. Probably due to connectivity \" +\n                    \"issue or the url '$apiUrl' is not available, skipping\"\n            }\n            return null\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR) {\n                \"Unhandled exception fetching JWT token for url: '$apiUrl'\"\n            }\n            throw IOException(e)\n        }\n\n        return null\n    }\n\n    private fun getApiVolumesUrl(url: String): String {\n        return \"${getApiFromUrl(url)}/Series/volumes?seriesId=${getIdFromUrl(url)}\"\n    }\n\n    /* Strips serie id from URL */\n    private fun getIdFromUrl(url: String): Int {\n        return url.substringAfterLast(\"/\").toInt()\n    }\n\n    /*\n     * Returns total chapters in the series.\n     * Ignores volumes.\n     * Volumes consisting of 1 file treated as chapter\n     */\n    private fun getTotalChapters(url: String): Long {\n        val requestUrl = getApiVolumesUrl(url)\n        try {\n            val listVolumeDto = with(json) {\n                authClient.newCall(GET(requestUrl))\n                    .execute()\n                    .parseAs<List<VolumeDto>>()\n            }\n            var volumeNumber = 0L\n            var maxChapterNumber = 0L\n            for (volume in listVolumeDto) {\n                if (volume.chapters.maxOf { it.number!!.toFloat() } == 0f) {\n                    volumeNumber++\n                } else if (maxChapterNumber < volume.chapters.maxOf { it.number!!.toFloat() }) {\n                    maxChapterNumber = volume.chapters.maxOf { it.number!!.toFloat().toLong() }\n                }\n            }\n\n            return if (maxChapterNumber > volumeNumber) maxChapterNumber else volumeNumber\n        } catch (e: Exception) {\n            logcat(LogPriority.WARN, e) { \"Exception fetching Total Chapters. Request:$requestUrl\" }\n            throw e\n        }\n    }\n\n    private fun getLatestChapterRead(url: String): Double {\n        val seriesId = getIdFromUrl(url)\n        val requestUrl = \"${getApiFromUrl(url)}/Tachiyomi/latest-chapter?seriesId=$seriesId\"\n        try {\n            with(json) {\n                authClient.newCall(GET(requestUrl)).execute().use {\n                    if (it.code == 200) {\n                        return it.parseAs<ChapterDto>().number!!.replace(\",\", \".\").toDouble()\n                    }\n                    if (it.code == 204) {\n                        return 0.0\n                    }\n                }\n            }\n        } catch (e: Exception) {\n            logcat(\n                LogPriority.WARN,\n                e,\n            ) { \"Exception getting latest chapter read. Could not get itemRequest: $requestUrl\" }\n            throw e\n        }\n        return 0.0\n    }\n\n    suspend fun getTrackSearch(url: String): MangaTrackSearch = withIOContext {\n        try {\n            val seriesDto: SeriesDto = with(json) {\n                authClient.newCall(GET(url))\n                    .awaitSuccess()\n                    .parseAs()\n            }\n\n            val track = seriesDto.toTrack()\n            track.apply {\n                cover_url = seriesDto.thumbnail_url.toString()\n                tracking_url = url\n                total_chapters = getTotalChapters(url)\n\n                title = seriesDto.name\n                status = when (seriesDto.pagesRead) {\n                    seriesDto.pages -> Kavita.COMPLETED\n                    0 -> Kavita.UNREAD\n                    else -> Kavita.READING\n                }\n                last_chapter_read = getLatestChapterRead(url)\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.WARN, e) { \"Could not get item: $url\" }\n            throw e\n        }\n    }\n\n    suspend fun updateProgress(track: MangaTrack): MangaTrack {\n        val requestUrl = \"${getApiFromUrl(\n            track.tracking_url,\n        )}/Tachiyomi/mark-chapter-until-as-read?seriesId=${getIdFromUrl(\n            track.tracking_url,\n        )}&chapterNumber=${track.last_chapter_read}\"\n        authClient.newCall(\n            POST(\n                requestUrl,\n                body = \"{}\".toRequestBody(\"application/json; charset=utf-8\".toMediaTypeOrNull()),\n            ),\n        )\n            .awaitSuccess()\n        return getTrackSearch(track.tracking_url)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kavita\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport okhttp3.Interceptor\nimport okhttp3.Response\n\nclass KavitaInterceptor(private val kavita: Kavita) : Interceptor {\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n        if (kavita.authentications == null) {\n            kavita.loadOAuth()\n        }\n        val jwtToken = kavita.authentications?.getToken(\n            kavita.api.getApiFromUrl(originalRequest.url.toString()),\n        )\n\n        // Add the authorization header to the original request.\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer $jwtToken\")\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaModels.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kavita\n\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SeriesDto(\n    val id: Int,\n    val name: String,\n    val originalName: String = \"\",\n    val thumbnail_url: String? = \"\",\n    val stringResourcedName: String? = \"\",\n    val sortName: String? = \"\",\n    val pages: Int,\n    val coverImageLocked: Boolean = true,\n    val pagesRead: Int,\n    val userRating: Int? = 0,\n    val userReview: String? = \"\",\n    val format: Int,\n    val created: String? = \"\",\n    val libraryId: Int,\n    val libraryName: String? = \"\",\n) {\n    fun toTrack(): MangaTrackSearch = MangaTrackSearch.create(TrackerManager.KAVITA).also {\n        it.title = name\n        it.summary = \"\"\n    }\n}\n\n@Serializable\ndata class VolumeDto(\n    val id: Int,\n    val number: Int,\n    val name: String,\n    val pages: Int,\n    val pagesRead: Int,\n    val lastModified: String,\n    val created: String,\n    val seriesId: Int,\n    val chapters: List<ChapterDto> = emptyList(),\n)\n\n@Serializable\ndata class ChapterDto(\n    val id: Int? = -1,\n    val range: String? = \"\",\n    val number: String? = \"-1\",\n    val pages: Int? = 0,\n    val isSpecial: Boolean? = false,\n    val title: String? = \"\",\n    val pagesRead: Int? = 0,\n    val coverImageLocked: Boolean? = false,\n    val volumeId: Int? = -1,\n    val created: String? = \"\",\n)\n\n@Serializable\ndata class AuthenticationDto(\n    val username: String,\n    val token: String,\n    val apiKey: String,\n)\n\nclass OAuth(\n    val authentications: List<SourceAuth> = listOf(\n        SourceAuth(1),\n        SourceAuth(2),\n        SourceAuth(3),\n    ),\n) {\n    fun getToken(apiUrl: String): String? {\n        for (authentication in authentications) {\n            if (authentication.apiUrl == apiUrl) {\n                return authentication.jwtToken\n            }\n        }\n        return null\n    }\n}\n\ndata class SourceAuth(\n    var sourceId: Int,\n    var apiUrl: String = \"\",\n    var jwtToken: String = \"\",\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.DeletableAnimeTracker\nimport eu.kanade.tachiyomi.data.track.DeletableMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuOAuth\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport java.text.DecimalFormat\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass Kitsu(id: Long) :\n    BaseTracker(\n        id,\n        \"Kitsu\",\n    ),\n    AnimeTracker,\n    MangaTracker,\n    DeletableMangaTracker,\n    DeletableAnimeTracker {\n\n    companion object {\n        const val READING = 1L\n        const val WATCHING = 11L\n        const val COMPLETED = 2L\n        const val ON_HOLD = 3L\n        const val DROPPED = 4L\n        const val PLAN_TO_READ = 5L\n        const val PLAN_TO_WATCH = 15L\n    }\n\n    override val supportsReadingDates: Boolean = true\n\n    override val supportsPrivateTracking: Boolean = true\n\n    private val json: Json by injectLazy()\n\n    private val interceptor by lazy { KitsuInterceptor(this) }\n\n    private val api by lazy { KitsuApi(client, interceptor) }\n\n    override fun getLogo() = R.drawable.ic_tracker_kitsu\n\n    override fun getLogoColor() = Color.rgb(51, 37, 50)\n\n    override fun getStatusListManga(): List<Long> {\n        return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ)\n    }\n\n    override fun getStatusListAnime(): List<Long> {\n        return listOf(WATCHING, PLAN_TO_WATCH, COMPLETED, ON_HOLD, DROPPED)\n    }\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        READING -> AYMR.strings.currently_reading\n        PLAN_TO_READ -> AYMR.strings.want_to_read\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        else -> null\n    }\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        WATCHING -> AYMR.strings.currently_watching\n        PLAN_TO_WATCH -> AYMR.strings.want_to_watch\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getWatchingStatus(): Long = WATCHING\n\n    override fun getRereadingStatus(): Long = -1\n\n    override fun getRewatchingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> {\n        val df = DecimalFormat(\"0.#\")\n        return (listOf(\"0\") + IntRange(2, 20).map { df.format(it / 2f) }).toImmutableList()\n    }\n\n    override fun indexToScore(index: Int): Double {\n        return if (index > 0) (index + 1) / 2.0 else 0.0\n    }\n\n    override fun displayScore(track: DomainMangaTrack): String {\n        val df = DecimalFormat(\"0.#\")\n        return df.format(track.score)\n    }\n\n    override fun displayScore(track: DomainAnimeTrack): String {\n        val df = DecimalFormat(\"0.#\")\n        return df.format(track.score)\n    }\n\n    private suspend fun add(track: MangaTrack): MangaTrack {\n        return api.addLibManga(track, getUserId())\n    }\n\n    private suspend fun add(track: AnimeTrack): AnimeTrack {\n        return api.addLibAnime(track, getUserId())\n    }\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                    track.finished_reading_date = System.currentTimeMillis()\n                } else {\n                    track.status = READING\n                    if (track.last_chapter_read == 1.0) {\n                        track.started_reading_date = System.currentTimeMillis()\n                    }\n                }\n            }\n        }\n\n        return api.updateLibManga(track)\n    }\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        if (track.status != COMPLETED) {\n            if (didWatchEpisode) {\n                if (track.last_episode_seen.toLong() == track.total_episodes && track.total_episodes > 0) {\n                    track.status = COMPLETED\n                    track.finished_watching_date = System.currentTimeMillis()\n                } else {\n                    track.status = WATCHING\n                    if (track.last_episode_seen == 1.0) {\n                        track.started_watching_date = System.currentTimeMillis()\n                    }\n                }\n            }\n        }\n\n        return api.updateLibAnime(track)\n    }\n\n    override suspend fun delete(track: DomainMangaTrack) {\n        api.removeLibManga(track)\n    }\n\n    override suspend fun delete(track: DomainAnimeTrack) {\n        api.removeLibAnime(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        val remoteTrack = api.findLibManga(track, getUserId())\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack, copyRemotePrivate = false)\n            track.remote_id = remoteTrack.remote_id\n\n            if (track.status != COMPLETED) {\n                track.status = if (hasReadChapters) READING else track.status\n            }\n\n            update(track)\n        } else {\n            track.status = if (hasReadChapters) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasWatchedEpisodes: Boolean): AnimeTrack {\n        val remoteTrack = api.findLibAnime(track, getUserId())\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack, copyRemotePrivate = false)\n            track.remote_id = remoteTrack.remote_id\n\n            if (track.status != COMPLETED) {\n                track.status = if (hasWatchedEpisodes) WATCHING else track.status\n            }\n\n            update(track)\n        } else {\n            track.status = if (hasWatchedEpisodes) WATCHING else PLAN_TO_WATCH\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        return api.search(query)\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return api.searchAnime(query)\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val remoteTrack = api.getLibManga(track)\n        track.copyPersonalFrom(remoteTrack)\n        track.total_chapters = remoteTrack.total_chapters\n        return track\n    }\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        val remoteTrack = api.getLibAnime(track)\n        track.copyPersonalFrom(remoteTrack)\n        track.total_episodes = remoteTrack.total_episodes\n        return track\n    }\n\n    override suspend fun login(username: String, password: String) {\n        val token = api.login(username, password)\n        interceptor.newAuth(token)\n        val userId = api.getCurrentUser()\n        saveCredentials(username, userId)\n    }\n\n    override fun logout() {\n        super.logout()\n        interceptor.newAuth(null)\n    }\n\n    private fun getUserId(): String {\n        return getPassword()\n    }\n\n    fun saveToken(oauth: KitsuOAuth?) {\n        trackPreferences.trackToken(this).set(json.encodeToString(oauth))\n    }\n\n    fun restoreToken(): KitsuOAuth? {\n        return try {\n            json.decodeFromString<KitsuOAuth>(trackPreferences.trackToken(this).get())\n        } catch (_: Exception) {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu\n\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuAddEntryResult\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuAlgoliaSearchResult\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuCurrentUserResult\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuListSearchResult\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuOAuth\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuSearchResult\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.network.DELETE\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.jsonMime\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.jsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport okhttp3.FormBody\nimport okhttp3.Headers.Companion.headersOf\nimport okhttp3.MediaType.Companion.toMediaType\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.RequestBody\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.injectLazy\nimport java.net.URLEncoder\nimport java.nio.charset.StandardCharsets\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass KitsuApi(private val client: OkHttpClient, interceptor: KitsuInterceptor) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder().addInterceptor(interceptor).build()\n\n    suspend fun addLibManga(track: MangaTrack, userId: String): MangaTrack {\n        return withIOContext {\n            val data = buildJsonObject {\n                putJsonObject(\"data\") {\n                    put(\"type\", \"libraryEntries\")\n                    putJsonObject(\"attributes\") {\n                        put(\"status\", track.toApiStatus())\n                        put(\"progress\", track.last_chapter_read.toInt())\n                        put(\"private\", track.private)\n                    }\n                    putJsonObject(\"relationships\") {\n                        putJsonObject(\"user\") {\n                            putJsonObject(\"data\") {\n                                put(\"id\", userId)\n                                put(\"type\", \"users\")\n                            }\n                        }\n                        putJsonObject(\"media\") {\n                            putJsonObject(\"data\") {\n                                put(\"id\", track.remote_id)\n                                put(\"type\", \"manga\")\n                            }\n                        }\n                    }\n                }\n            }\n\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        \"${BASE_URL}library-entries\",\n                        headers = headersOf(\"Content-Type\", VND_API_JSON),\n                        body = data.toString().toRequestBody(VND_JSON_MEDIA_TYPE),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<KitsuAddEntryResult>()\n                    .let {\n                        track.remote_id = it.data.id\n                        track\n                    }\n            }\n        }\n    }\n\n    suspend fun addLibAnime(track: AnimeTrack, userId: String): AnimeTrack {\n        return withIOContext {\n            val data = buildJsonObject {\n                putJsonObject(\"data\") {\n                    put(\"type\", \"libraryEntries\")\n                    putJsonObject(\"attributes\") {\n                        put(\"status\", track.toApiStatus())\n                        put(\"progress\", track.last_episode_seen.toInt())\n                        put(\"private\", track.private)\n                    }\n                    putJsonObject(\"relationships\") {\n                        putJsonObject(\"user\") {\n                            putJsonObject(\"data\") {\n                                put(\"id\", userId)\n                                put(\"type\", \"users\")\n                            }\n                        }\n                        putJsonObject(\"media\") {\n                            putJsonObject(\"data\") {\n                                put(\"id\", track.remote_id)\n                                put(\"type\", \"anime\")\n                            }\n                        }\n                    }\n                }\n            }\n\n            with(json) {\n                authClient.newCall(\n                    POST(\n                        \"${BASE_URL}library-entries\",\n                        headers = headersOf(\"Content-Type\", VND_API_JSON),\n                        body = data.toString().toRequestBody(VND_JSON_MEDIA_TYPE),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<KitsuAddEntryResult>()\n                    .let {\n                        track.remote_id = it.data.id\n                        track\n                    }\n            }\n        }\n    }\n\n    suspend fun updateLibManga(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val data = buildJsonObject {\n                putJsonObject(\"data\") {\n                    put(\"type\", \"libraryEntries\")\n                    put(\"id\", track.remote_id)\n                    putJsonObject(\"attributes\") {\n                        put(\"status\", track.toApiStatus())\n                        put(\"progress\", track.last_chapter_read.toInt())\n                        put(\"ratingTwenty\", track.toApiScore())\n                        put(\"startedAt\", KitsuDateHelper.convert(track.started_reading_date))\n                        put(\"finishedAt\", KitsuDateHelper.convert(track.finished_reading_date))\n                        put(\"private\", track.private)\n                    }\n                }\n            }\n\n            authClient.newCall(\n                Request.Builder()\n                    .url(\"${BASE_URL}library-entries/${track.remote_id}\")\n                    .headers(\n                        headersOf(\"Content-Type\", VND_API_JSON),\n                    )\n                    .patch(data.toString().toRequestBody(VND_JSON_MEDIA_TYPE))\n                    .build(),\n            )\n                .awaitSuccess()\n\n            track\n        }\n    }\n\n    suspend fun updateLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val data = buildJsonObject {\n                putJsonObject(\"data\") {\n                    put(\"type\", \"libraryEntries\")\n                    put(\"id\", track.remote_id)\n                    putJsonObject(\"attributes\") {\n                        put(\"status\", track.toApiStatus())\n                        put(\"progress\", track.last_episode_seen.toInt())\n                        put(\"ratingTwenty\", track.toApiScore())\n                        put(\"startedAt\", KitsuDateHelper.convert(track.started_watching_date))\n                        put(\"finishedAt\", KitsuDateHelper.convert(track.finished_watching_date))\n                        put(\"private\", track.private)\n                    }\n                }\n            }\n\n            authClient.newCall(\n                Request.Builder()\n                    .url(\"${BASE_URL}library-entries/${track.remote_id}\")\n                    .headers(\n                        headersOf(\"Content-Type\", VND_API_JSON),\n                    )\n                    .patch(data.toString().toRequestBody(VND_JSON_MEDIA_TYPE))\n                    .build(),\n            )\n                .awaitSuccess()\n\n            track\n        }\n    }\n\n    suspend fun removeLibManga(track: DomainMangaTrack) {\n        withIOContext {\n            authClient.newCall(\n                DELETE(\n                    \"${BASE_URL}library-entries/${track.remoteId}\",\n                    headers = headersOf(\"Content-Type\", VND_API_JSON),\n                ),\n            )\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun removeLibAnime(track: DomainAnimeTrack) {\n        withIOContext {\n            authClient.newCall(\n                DELETE(\n                    \"${BASE_URL}library-entries/${track.remoteId}\",\n                    headers = headersOf(\"Content-Type\", VND_API_JSON),\n                ),\n            )\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun search(query: String): List<MangaTrackSearch> {\n        return withIOContext {\n            with(json) {\n                authClient.newCall(GET(ALGOLIA_KEY_URL))\n                    .awaitSuccess()\n                    .parseAs<KitsuSearchResult>()\n                    .let {\n                        algoliaSearch(it.media.key, query)\n                    }\n            }\n        }\n    }\n\n    suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return withIOContext {\n            with(json) {\n                authClient.newCall(GET(ALGOLIA_KEY_URL))\n                    .awaitSuccess()\n                    .parseAs<KitsuSearchResult>()\n                    .let {\n                        algoliaSearchAnime(it.media.key, query)\n                    }\n            }\n        }\n    }\n\n    private suspend fun algoliaSearch(key: String, query: String): List<MangaTrackSearch> {\n        return withIOContext {\n            val jsonObject = buildJsonObject {\n                put(\n                    \"params\",\n                    \"query=${URLEncoder.encode(query, StandardCharsets.UTF_8.name())}$ALGOLIA_FILTER\",\n                )\n            }\n\n            with(json) {\n                client.newCall(\n                    POST(\n                        ALGOLIA_URL,\n                        headers = headersOf(\n                            \"X-Algolia-Application-Id\",\n                            ALGOLIA_APP_ID,\n                            \"X-Algolia-API-Key\",\n                            key,\n                        ),\n                        body = jsonObject.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<KitsuAlgoliaSearchResult>()\n                    .hits\n                    .filter { it.subtype != \"novel\" }\n                    .map { it.toMangaTrack() }\n            }\n        }\n    }\n\n    private suspend fun algoliaSearchAnime(key: String, query: String): List<AnimeTrackSearch> {\n        return withIOContext {\n            val jsonObject = buildJsonObject {\n                put(\n                    \"params\",\n                    \"query=${URLEncoder.encode(query, StandardCharsets.UTF_8.name())}$ALGOLIA_FILTER_ANIME\",\n                )\n            }\n\n            with(json) {\n                client.newCall(\n                    POST(\n                        ALGOLIA_URL,\n                        headers = headersOf(\n                            \"X-Algolia-Application-Id\",\n                            ALGOLIA_APP_ID,\n                            \"X-Algolia-API-Key\",\n                            key,\n                        ),\n                        body = jsonObject.toString().toRequestBody(jsonMime),\n                    ),\n                )\n                    .awaitSuccess()\n                    .parseAs<KitsuAlgoliaSearchResult>()\n                    .hits\n                    .filter { it.subtype != \"novel\" }\n                    .map { it.toAnimeTrack() }\n            }\n        }\n    }\n\n    suspend fun findLibManga(track: MangaTrack, userId: String): MangaTrack? {\n        return withIOContext {\n            val url = \"${BASE_URL}library-entries\".toUri().buildUpon()\n                .encodedQuery(\"filter[manga_id]=${track.remote_id}&filter[user_id]=$userId\")\n                .appendQueryParameter(\"include\", \"manga\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<KitsuListSearchResult>()\n                    .let {\n                        if (it.data.isNotEmpty() && it.included.isNotEmpty()) {\n                            it.firstToMangaTrack()\n                        } else {\n                            null\n                        }\n                    }\n            }\n        }\n    }\n\n    suspend fun findLibAnime(track: AnimeTrack, userId: String): AnimeTrack? {\n        return withIOContext {\n            val url = \"${BASE_URL}library-entries\".toUri().buildUpon()\n                .encodedQuery(\"filter[anime_id]=${track.remote_id}&filter[user_id]=$userId\")\n                .appendQueryParameter(\"include\", \"anime\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<KitsuListSearchResult>()\n                    .let {\n                        if (it.data.isNotEmpty() && it.included.isNotEmpty()) {\n                            it.firstToAnimeTrack()\n                        } else {\n                            null\n                        }\n                    }\n            }\n        }\n    }\n\n    suspend fun getLibManga(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val url = \"${BASE_URL}library-entries\".toUri().buildUpon()\n                .encodedQuery(\"filter[id]=${track.remote_id}\")\n                .appendQueryParameter(\"include\", \"manga\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<KitsuListSearchResult>()\n                    .let {\n                        if (it.data.isNotEmpty() && it.included.isNotEmpty()) {\n                            it.firstToMangaTrack()\n                        } else {\n                            throw Exception(\"Could not find manga\")\n                        }\n                    }\n            }\n        }\n    }\n\n    suspend fun getLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val url = \"${BASE_URL}library-entries\".toUri().buildUpon()\n                .encodedQuery(\"filter[id]=${track.remote_id}\")\n                .appendQueryParameter(\"include\", \"anime\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<KitsuListSearchResult>()\n                    .let {\n                        if (it.data.isNotEmpty() && it.included.isNotEmpty()) {\n                            it.firstToAnimeTrack()\n                        } else {\n                            throw Exception(\"Could not find manga\")\n                        }\n                    }\n            }\n        }\n    }\n\n    suspend fun login(username: String, password: String): KitsuOAuth {\n        return withIOContext {\n            val formBody: RequestBody = FormBody.Builder()\n                .add(\"username\", username)\n                .add(\"password\", password)\n                .add(\"grant_type\", \"password\")\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"client_secret\", CLIENT_SECRET)\n                .build()\n            with(json) {\n                client.newCall(POST(LOGIN_URL, body = formBody))\n                    .awaitSuccess()\n                    .parseAs()\n            }\n        }\n    }\n\n    suspend fun getCurrentUser(): String {\n        return withIOContext {\n            val url = \"${BASE_URL}users\".toUri().buildUpon()\n                .encodedQuery(\"filter[self]=true\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<KitsuCurrentUserResult>()\n                    .data[0]\n                    .id\n            }\n        }\n    }\n\n    companion object {\n        private const val CLIENT_ID =\n            \"dd031b32d2f56c990b1425efe6c42ad847e7fe3ab46bf1299f05ecd856bdb7dd\"\n        private const val CLIENT_SECRET =\n            \"54d7307928f63414defd96399fc31ba847961ceaecef3a5fd93144e960c0e151\"\n\n        private const val BASE_URL = \"https://kitsu.app/api/edge/\"\n        private const val LOGIN_URL = \"https://kitsu.app/api/oauth/token\"\n        private const val BASE_MANGA_URL = \"https://kitsu.app/manga/\"\n        private const val BASE_ANIME_URL = \"https://kitsu.app/anime/\"\n        private const val ALGOLIA_KEY_URL = \"https://kitsu.app/api/edge/algolia-keys/media/\"\n\n        private const val ALGOLIA_URL =\n            \"https://AWQO5J657S-dsn.algolia.net/1/indexes/production_media/query/\"\n        private const val ALGOLIA_APP_ID = \"AWQO5J657S\"\n        private const val ALGOLIA_FILTER =\n            \"&facetFilters=%5B%22kind%3Amanga%22%5D&attributesToRetrieve=\" +\n                \"%5B%22synopsis%22%2C%22averageRating%22%2C%22canonicalTitle%22%2C%22chapterCount%22%2C%22\" +\n                \"posterImage%22%2C%22startDate%22%2C%22subtype%22%2C%22endDate%22%2C%20%22id%22%5D\"\n        private const val ALGOLIA_FILTER_ANIME =\n            \"&facetFilters=%5B%22kind%3Aanime%22%5D&attributesToRetrieve=\" +\n                \"%5B%22synopsis%22%2C%22averageRating%22%2C%22canonicalTitle%22%2C%22episodeCount%22%2C%22\" +\n                \"posterImage%22%2C%22startDate%22%2C%22subtype%22%2C%22endDate%22%2C%20%22id%22%5D\"\n\n        private const val VND_API_JSON = \"application/vnd.api+json\"\n        private val VND_JSON_MEDIA_TYPE = VND_API_JSON.toMediaType()\n\n        fun mangaUrl(remoteId: Long): String {\n            return BASE_MANGA_URL + remoteId\n        }\n\n        fun animeUrl(remoteId: Long): String {\n            return BASE_ANIME_URL + remoteId\n        }\n\n        fun refreshTokenRequest(token: String) = POST(\n            LOGIN_URL,\n            body = FormBody.Builder()\n                .add(\"grant_type\", \"refresh_token\")\n                .add(\"refresh_token\", token)\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"client_secret\", CLIENT_SECRET)\n                .build(),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuDateHelper.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu\n\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\n\nobject KitsuDateHelper {\n\n    private const val PATTERN = \"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\"\n    private val formatter = SimpleDateFormat(PATTERN, Locale.ENGLISH)\n\n    fun convert(dateValue: Long): String? {\n        if (dateValue == 0L) return null\n\n        return formatter.format(Date(dateValue))\n    }\n\n    fun parse(dateString: String?): Long {\n        if (dateString == null) return 0L\n\n        val dateValue = formatter.parse(dateString)\n\n        return dateValue?.time ?: return 0\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.KitsuOAuth\nimport eu.kanade.tachiyomi.data.track.kitsu.dto.isExpired\nimport kotlinx.serialization.json.Json\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport uy.kohesive.injekt.injectLazy\n\nclass KitsuInterceptor(private val kitsu: Kitsu) : Interceptor {\n\n    private val json: Json by injectLazy()\n\n    /**\n     * OAuth object used for authenticated requests.\n     */\n    private var oauth: KitsuOAuth? = kitsu.restoreToken()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        val currAuth = oauth ?: throw Exception(\"Not authenticated with Kitsu\")\n\n        val refreshToken = currAuth.refreshToken!!\n\n        // Refresh access token if expired.\n        if (currAuth.isExpired()) {\n            val response = chain.proceed(KitsuApi.refreshTokenRequest(refreshToken))\n            if (response.isSuccessful) {\n                newAuth(json.decodeFromString(response.body.string()))\n            } else {\n                response.close()\n            }\n        }\n\n        // Add the authorization header to the original request.\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer ${oauth!!.accessToken}\")\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .header(\"Accept\", \"application/vnd.api+json\")\n            .header(\"Content-Type\", \"application/vnd.api+json\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n\n    fun newAuth(oauth: KitsuOAuth?) {\n        this.oauth = oauth\n        kitsu.saveToken(oauth)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuUtils.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\n\nfun MangaTrack.toApiStatus() = when (status) {\n    Kitsu.READING -> \"current\"\n    Kitsu.COMPLETED -> \"completed\"\n    Kitsu.ON_HOLD -> \"on_hold\"\n    Kitsu.DROPPED -> \"dropped\"\n    Kitsu.PLAN_TO_READ -> \"planned\"\n    else -> throw Exception(\"Unknown status\")\n}\n\nfun AnimeTrack.toApiStatus() = when (status) {\n    Kitsu.WATCHING -> \"current\"\n    Kitsu.COMPLETED -> \"completed\"\n    Kitsu.ON_HOLD -> \"on_hold\"\n    Kitsu.DROPPED -> \"dropped\"\n    Kitsu.PLAN_TO_WATCH -> \"planned\"\n    else -> throw Exception(\"Unknown status\")\n}\n\nfun MangaTrack.toApiScore(): String? {\n    return if (score > 0) (score * 2).toInt().toString() else null\n}\n\nfun AnimeTrack.toApiScore(): String? {\n    return if (score > 0) (score * 2).toInt().toString() else null\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuAddEntry.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class KitsuAddEntryResult(\n    val data: KitsuAddEntryItem,\n)\n\n@Serializable\ndata class KitsuAddEntryItem(\n    val id: Long,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuListSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu.dto\n\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.kitsu.Kitsu\nimport eu.kanade.tachiyomi.data.track.kitsu.KitsuApi\nimport eu.kanade.tachiyomi.data.track.kitsu.KitsuDateHelper\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class KitsuListSearchResult(\n    val data: List<KitsuListSearchItemData>,\n    val included: List<KitsuListSearchItemIncluded> = emptyList(),\n) {\n    fun firstToMangaTrack(): MangaTrackSearch {\n        require(data.isNotEmpty()) { \"Missing User data from Kitsu\" }\n        require(included.isNotEmpty()) { \"Missing Manga data from Kitsu\" }\n\n        val userData = data[0]\n        val userDataAttrs = userData.attributes\n        val manga = included[0].attributes\n\n        return MangaTrackSearch.create(TrackerManager.KITSU).apply {\n            remote_id = userData.id\n            title = manga.canonicalTitle\n            total_chapters = manga.chapterCount ?: 0\n            cover_url = manga.posterImage?.original ?: \"\"\n            summary = manga.synopsis ?: \"\"\n            tracking_url = KitsuApi.mangaUrl(remote_id)\n            publishing_status = manga.status\n            publishing_type = manga.mangaType ?: \"\"\n            start_date = userDataAttrs.startedAt ?: \"\"\n            started_reading_date = KitsuDateHelper.parse(userDataAttrs.startedAt)\n            finished_reading_date = KitsuDateHelper.parse(userDataAttrs.finishedAt)\n            status = when (userDataAttrs.status) {\n                \"current\" -> Kitsu.READING\n                \"completed\" -> Kitsu.COMPLETED\n                \"on_hold\" -> Kitsu.ON_HOLD\n                \"dropped\" -> Kitsu.DROPPED\n                \"planned\" -> Kitsu.PLAN_TO_READ\n                else -> throw Exception(\"Unknown status\")\n            }\n            score = userDataAttrs.ratingTwenty?.let { it / 2.0 } ?: 0.0\n            last_chapter_read = userDataAttrs.progress.toDouble()\n            private = userDataAttrs.private\n        }\n    }\n\n    fun firstToAnimeTrack(): AnimeTrackSearch {\n        require(data.isNotEmpty()) { \"Missing User data from Kitsu\" }\n        require(included.isNotEmpty()) { \"Missing Manga data from Kitsu\" }\n\n        val userData = data[0]\n        val userDataAttrs = userData.attributes\n        val anime = included[0].attributes\n\n        return AnimeTrackSearch.create(TrackerManager.KITSU).apply {\n            remote_id = userData.id\n            title = anime.canonicalTitle\n            total_episodes = anime.episodeCount ?: 0\n            cover_url = anime.posterImage?.original ?: \"\"\n            summary = anime.synopsis ?: \"\"\n            tracking_url = KitsuApi.animeUrl(remote_id)\n            publishing_status = anime.status\n            publishing_type = anime.showType ?: \"\"\n            start_date = userDataAttrs.startedAt ?: \"\"\n            started_watching_date = KitsuDateHelper.parse(userDataAttrs.startedAt)\n            finished_watching_date = KitsuDateHelper.parse(userDataAttrs.finishedAt)\n            status = when (userDataAttrs.status) {\n                \"current\" -> Kitsu.WATCHING\n                \"completed\" -> Kitsu.COMPLETED\n                \"on_hold\" -> Kitsu.ON_HOLD\n                \"dropped\" -> Kitsu.DROPPED\n                \"planned\" -> Kitsu.PLAN_TO_WATCH\n                else -> throw Exception(\"Unknown status\")\n            }\n            score = userDataAttrs.ratingTwenty?.let { it / 2.0 } ?: 0.0\n            last_episode_seen = userDataAttrs.progress.toDouble()\n            private = userDataAttrs.private\n        }\n    }\n}\n\n@Serializable\ndata class KitsuListSearchItemData(\n    val id: Long,\n    val attributes: KitsuListSearchItemDataAttributes,\n)\n\n@Serializable\ndata class KitsuListSearchItemDataAttributes(\n    val status: String,\n    val startedAt: String?,\n    val finishedAt: String?,\n    val ratingTwenty: Int?,\n    val progress: Int,\n    val private: Boolean,\n)\n\n@Serializable\ndata class KitsuListSearchItemIncluded(\n    val id: Long,\n    val attributes: KitsuListSearchItemIncludedAttributes,\n)\n\n@Serializable\ndata class KitsuListSearchItemIncludedAttributes(\n    val canonicalTitle: String,\n    val chapterCount: Long?,\n    val episodeCount: Long?,\n    val mangaType: String?,\n    val showType: String?,\n    val posterImage: KitsuSearchItemCover?,\n    val synopsis: String?,\n    val startDate: String?,\n    val status: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuOAuth.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class KitsuOAuth(\n    @SerialName(\"access_token\")\n    val accessToken: String,\n    @SerialName(\"token_type\")\n    val tokenType: String,\n    @SerialName(\"created_at\")\n    val createdAt: Long,\n    @SerialName(\"expires_in\")\n    val expiresIn: Long,\n    @SerialName(\"refresh_token\")\n    val refreshToken: String?,\n)\n\nfun KitsuOAuth.isExpired() = (System.currentTimeMillis() / 1000) > (createdAt + expiresIn - 3600)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu.dto\n\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.kitsu.KitsuApi\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.serialization.Serializable\nimport java.text.SimpleDateFormat\nimport java.util.Date\nimport java.util.Locale\n\n@Serializable\ndata class KitsuSearchResult(\n    val media: KitsuSearchResultData,\n)\n\n@Serializable\ndata class KitsuSearchResultData(\n    val key: String,\n)\n\n@Serializable\ndata class KitsuAlgoliaSearchResult(\n    val hits: List<KitsuAlgoliaSearchItem>,\n)\n\n@Serializable\ndata class KitsuAlgoliaSearchItem(\n    val id: Long,\n    val canonicalTitle: String,\n    val chapterCount: Long?,\n    val episodeCount: Long?,\n    val subtype: String?,\n    val posterImage: KitsuSearchItemCover?,\n    val synopsis: String?,\n    val averageRating: Double?,\n    val startDate: Long?,\n    val endDate: Long?,\n) {\n    fun toMangaTrack(): MangaTrackSearch {\n        return MangaTrackSearch.create(TrackerManager.KITSU).apply {\n            remote_id = this@KitsuAlgoliaSearchItem.id\n            title = canonicalTitle\n            total_chapters = chapterCount ?: 0\n            cover_url = posterImage?.original ?: \"\"\n            summary = synopsis ?: \"\"\n            tracking_url = KitsuApi.mangaUrl(remote_id)\n            score = averageRating ?: -1.0\n            publishing_status = if (endDate == null) \"Publishing\" else \"Finished\"\n            publishing_type = subtype ?: \"\"\n            start_date = startDate?.let {\n                val outputDf = SimpleDateFormat(\"yyyy-MM-dd\", Locale.US)\n                outputDf.format(Date(it * 1000))\n            } ?: \"\"\n        }\n    }\n\n    fun toAnimeTrack(): AnimeTrackSearch {\n        return AnimeTrackSearch.create(TrackerManager.KITSU).apply {\n            remote_id = this@KitsuAlgoliaSearchItem.id\n            title = canonicalTitle\n            total_episodes = episodeCount ?: 0\n            cover_url = posterImage?.original ?: \"\"\n            summary = synopsis ?: \"\"\n            tracking_url = KitsuApi.animeUrl(remote_id)\n            score = averageRating ?: -1.0\n            publishing_status = if (endDate == null) \"Publishing\" else \"Finished\"\n            publishing_type = subtype ?: \"\"\n            start_date = startDate?.let {\n                val outputDf = SimpleDateFormat(\"yyyy-MM-dd\", Locale.US)\n                outputDf.format(Date(it * 1000))\n            } ?: \"\"\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuSearchItemCover.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class KitsuSearchItemCover(\n    val original: String?,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/dto/KitsuUser.kt",
    "content": "package eu.kanade.tachiyomi.data.track.kitsu.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class KitsuCurrentUserResult(\n    val data: List<KitsuUser>,\n)\n\n@Serializable\ndata class KitsuUser(\n    val id: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/komga/Komga.kt",
    "content": "package eu.kanade.tachiyomi.data.track.komga\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.source.MangaSource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport okhttp3.Dns\nimport okhttp3.OkHttpClient\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack\n\nclass Komga(id: Long) : BaseTracker(id, \"Komga\"), EnhancedMangaTracker, MangaTracker {\n\n    companion object {\n        const val UNREAD = 1L\n        const val READING = 2L\n        const val COMPLETED = 3L\n    }\n\n    override val client: OkHttpClient =\n        networkService.client.newBuilder()\n            .dns(Dns.SYSTEM) // don't use DNS over HTTPS as it breaks IP addressing\n            .build()\n\n    val api by lazy { KomgaApi(id, client) }\n\n    override fun getLogo() = R.drawable.ic_tracker_komga\n\n    override fun getLogoColor() = Color.rgb(51, 37, 50)\n\n    override fun getStatusListManga(): List<Long> = listOf(UNREAD, READING, COMPLETED)\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        UNREAD -> MR.strings.unread\n        READING -> MR.strings.reading\n        COMPLETED -> MR.strings.completed\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getRereadingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> = persistentListOf()\n\n    override fun displayScore(track: DomainTrack): String = \"\"\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                } else {\n                    track.status = READING\n                }\n            }\n        }\n\n        return api.updateProgress(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        return track\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> = throw Exception(\n        \"Not used\",\n    )\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val remoteTrack = api.getTrackSearch(track.tracking_url)\n        track.copyPersonalFrom(remoteTrack)\n        track.total_chapters = remoteTrack.total_chapters\n        return track\n    }\n\n    override suspend fun login(username: String, password: String) {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    // [Tracker].isLogged works by checking that credentials are saved.\n    // By saving dummy, unused credentials, we can activate the tracker simply by login/logout\n    override fun loginNoop() {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    override fun getAcceptedSources() = listOf(\"eu.kanade.tachiyomi.extension.all.komga.Komga\")\n\n    override suspend fun match(manga: Manga): MangaTrackSearch? =\n        try {\n            api.getTrackSearch(manga.url)\n        } catch (e: Exception) {\n            null\n        }\n\n    override fun isTrackFrom(track: DomainTrack, manga: Manga, source: MangaSource?): Boolean =\n        track.remoteUrl == manga.url && source?.let { accept(it) } == true\n\n    override fun migrateTrack(track: DomainTrack, manga: Manga, newSource: MangaSource): DomainTrack? =\n        if (accept(newSource)) {\n            track.copy(remoteUrl = manga.url)\n        } else {\n            null\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/komga/KomgaApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.komga\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport okhttp3.Headers\nimport okhttp3.MediaType.Companion.toMediaType\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\n\nprivate const val READLIST_API = \"/api/v1/readlists\"\n\nclass KomgaApi(\n    private val trackId: Long,\n    private val client: OkHttpClient,\n) {\n\n    private val headers: Headers by lazy {\n        Headers.Builder()\n            .add(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n    }\n\n    private val json: Json by injectLazy()\n\n    suspend fun getTrackSearch(url: String): MangaTrackSearch =\n        withIOContext {\n            try {\n                val track = with(json) {\n                    if (url.contains(READLIST_API)) {\n                        client.newCall(GET(url, headers))\n                            .awaitSuccess()\n                            .parseAs<ReadListDto>()\n                            .toTrack()\n                    } else {\n                        client.newCall(GET(url, headers))\n                            .awaitSuccess()\n                            .parseAs<SeriesDto>()\n                            .toTrack()\n                    }\n                }\n\n                val progress = client\n                    .newCall(\n                        GET(\"${url.replace(\"/api/v1/series/\", \"/api/v2/series/\")}/read-progress/tachiyomi\", headers),\n                    )\n                    .awaitSuccess().let {\n                        with(json) {\n                            if (url.contains(\"/api/v1/series/\")) {\n                                it.parseAs<ReadProgressV2Dto>()\n                            } else {\n                                it.parseAs<ReadProgressDto>().toV2()\n                            }\n                        }\n                    }\n\n                track.apply {\n                    cover_url = \"$url/thumbnail\"\n                    tracking_url = url\n                    total_chapters = progress.maxNumberSort.toLong()\n                    status = when (progress.booksCount) {\n                        progress.booksUnreadCount -> Komga.UNREAD\n                        progress.booksReadCount -> Komga.COMPLETED\n                        else -> Komga.READING\n                    }\n                    last_chapter_read = progress.lastReadContinuousNumberSort\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.WARN, e) { \"Could not get item: $url\" }\n                throw e\n            }\n        }\n\n    suspend fun updateProgress(track: MangaTrack): MangaTrack {\n        val payload = if (track.tracking_url.contains(\"/api/v1/series/\")) {\n            json.encodeToString(ReadProgressUpdateV2Dto(track.last_chapter_read))\n        } else {\n            json.encodeToString(ReadProgressUpdateDto(track.last_chapter_read.toInt()))\n        }\n        client.newCall(\n            Request.Builder()\n                .url(\n                    \"${track.tracking_url.replace(\"/api/v1/series/\", \"/api/v2/series/\")}/read-progress/tachiyomi\",\n                )\n                .headers(headers)\n                .put(payload.toRequestBody(\"application/json\".toMediaType()))\n                .build(),\n        )\n            .awaitSuccess()\n        return getTrackSearch(track.tracking_url)\n    }\n\n    private fun SeriesDto.toTrack(): MangaTrackSearch = MangaTrackSearch.create(trackId).also {\n        it.title = metadata.title\n        it.summary = metadata.summary\n        it.publishing_status = metadata.status\n    }\n\n    private fun ReadListDto.toTrack(): MangaTrackSearch = MangaTrackSearch.create(\n        trackId,\n    ).also {\n        it.title = name\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/komga/KomgaModels.kt",
    "content": "package eu.kanade.tachiyomi.data.track.komga\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SeriesDto(\n    val id: String,\n    val libraryId: String,\n    val name: String,\n    val created: String?,\n    val lastModified: String?,\n    val fileLastModified: String,\n    val booksCount: Int,\n    val booksReadCount: Int,\n    val booksUnreadCount: Int,\n    val booksInProgressCount: Int,\n    val metadata: SeriesMetadataDto,\n    val booksMetadata: BookMetadataAggregationDto,\n)\n\n@Serializable\ndata class SeriesMetadataDto(\n    val status: String,\n    val created: String?,\n    val lastModified: String?,\n    val title: String,\n    val titleSort: String,\n    val summary: String,\n    val summaryLock: Boolean,\n    val readingDirection: String,\n    val readingDirectionLock: Boolean,\n    val publisher: String,\n    val publisherLock: Boolean,\n    val ageRating: Int?,\n    val ageRatingLock: Boolean,\n    val language: String,\n    val languageLock: Boolean,\n    val genres: Set<String>,\n    val genresLock: Boolean,\n    val tags: Set<String>,\n    val tagsLock: Boolean,\n)\n\n@Serializable\ndata class BookMetadataAggregationDto(\n    val authors: List<AuthorDto> = emptyList(),\n    val releaseDate: String?,\n    val summary: String,\n    val summaryNumber: String,\n\n    val created: String,\n    val lastModified: String,\n)\n\n@Serializable\ndata class AuthorDto(\n    val name: String,\n    val role: String,\n)\n\n@Serializable\ndata class ReadProgressUpdateDto(\n    val lastBookRead: Int,\n)\n\n@Serializable\ndata class ReadProgressUpdateV2Dto(\n    val lastBookNumberSortRead: Double,\n)\n\n@Serializable\ndata class ReadListDto(\n    val id: String,\n    val name: String,\n    val bookIds: List<String>,\n    val createdDate: String,\n    val lastModifiedDate: String,\n    val filtered: Boolean,\n)\n\n@Serializable\ndata class ReadProgressDto(\n    val booksCount: Int,\n    val booksReadCount: Int,\n    val booksUnreadCount: Int,\n    val booksInProgressCount: Int,\n    val lastReadContinuousIndex: Int,\n) {\n    fun toV2() = ReadProgressV2Dto(\n        booksCount,\n        booksReadCount,\n        booksUnreadCount,\n        booksInProgressCount,\n        lastReadContinuousIndex.toDouble(),\n        booksCount.toFloat(),\n    )\n}\n\n@Serializable\ndata class ReadProgressV2Dto(\n    val booksCount: Int,\n    val booksReadCount: Int,\n    val booksUnreadCount: Int,\n    val booksInProgressCount: Int,\n    val lastReadContinuousNumberSort: Double,\n    val maxNumberSort: Float,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.DeletableMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUListItem\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURating\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.copyTo\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.toTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.i18n.MR\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack\n\nclass MangaUpdates(id: Long) : BaseTracker(id, \"MangaUpdates\"), MangaTracker, DeletableMangaTracker {\n\n    companion object {\n        const val READING_LIST = 0L\n        const val WISH_LIST = 1L\n        const val COMPLETE_LIST = 2L\n        const val UNFINISHED_LIST = 3L\n        const val ON_HOLD_LIST = 4L\n\n        private val SCORE_LIST = (0..10)\n            .flatMap { decimal ->\n                when (decimal) {\n                    0 -> listOf(\"-\")\n                    10 -> listOf(\"10.0\")\n                    else -> (0..9).map { fraction ->\n                        \"$decimal.$fraction\"\n                    }\n                }\n            }\n            .toImmutableList()\n    }\n\n    private val interceptor by lazy { MangaUpdatesInterceptor(this) }\n\n    private val api by lazy { MangaUpdatesApi(interceptor, client) }\n\n    override fun getLogo(): Int = R.drawable.ic_manga_updates\n\n    override fun getLogoColor(): Int = Color.rgb(146, 160, 173)\n\n    override fun getStatusListManga(): List<Long> {\n        return listOf(READING_LIST, COMPLETE_LIST, ON_HOLD_LIST, UNFINISHED_LIST, WISH_LIST)\n    }\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        READING_LIST -> MR.strings.reading_list\n        WISH_LIST -> MR.strings.wish_list\n        COMPLETE_LIST -> MR.strings.complete_list\n        ON_HOLD_LIST -> MR.strings.on_hold_list\n        UNFINISHED_LIST -> MR.strings.unfinished_list\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING_LIST\n\n    override fun getRereadingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETE_LIST\n\n    override fun getScoreList(): ImmutableList<String> = SCORE_LIST\n\n    override fun indexToScore(index: Int): Double = if (index == 0) 0.0 else SCORE_LIST[index].toDouble()\n\n    override fun displayScore(track: DomainTrack): String = track.score.toString()\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETE_LIST && didReadChapter) {\n            track.status = READING_LIST\n        }\n        api.updateSeriesListItem(track)\n        return track\n    }\n\n    override suspend fun delete(track: DomainTrack) {\n        api.deleteSeriesFromList(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        return try {\n            val (series, rating) = api.getSeriesListItem(track)\n            track.copyFrom(series, rating)\n        } catch (e: Exception) {\n            track.score = 0.0\n            api.addSeriesToList(track, hasReadChapters)\n            track\n        }\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        return api.search(query)\n            .map {\n                it.toTrackSearch(id)\n            }\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val (series, rating) = api.getSeriesListItem(track)\n        return track.copyFrom(series, rating)\n    }\n\n    private fun MangaTrack.copyFrom(item: MUListItem, rating: MURating?): MangaTrack = apply {\n        item.copyTo(this)\n        score = rating?.rating ?: 0.0\n    }\n\n    override suspend fun login(username: String, password: String) {\n        val authenticated = api.authenticate(username, password) ?: throw Throwable(\n            \"Unable to login\",\n        )\n        saveCredentials(authenticated.uid.toString(), authenticated.sessionToken)\n        interceptor.newAuth(authenticated.sessionToken)\n    }\n\n    fun restoreSession(): String? {\n        return trackPreferences.trackPassword(this).get().ifBlank { null }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdatesApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates\n\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates.Companion.READING_LIST\nimport eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates.Companion.WISH_LIST\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUContext\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUListItem\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MULoginResponse\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURating\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURecord\nimport eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUSearchResult\nimport eu.kanade.tachiyomi.network.DELETE\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.PUT\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.add\nimport kotlinx.serialization.json.addJsonObject\nimport kotlinx.serialization.json.buildJsonArray\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport okhttp3.MediaType.Companion.toMediaType\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack\n\nclass MangaUpdatesApi(\n    interceptor: MangaUpdatesInterceptor,\n    private val client: OkHttpClient,\n) {\n    private val json: Json by injectLazy()\n\n    private val authClient by lazy {\n        client.newBuilder()\n            .addInterceptor(interceptor)\n            .build()\n    }\n\n    suspend fun getSeriesListItem(track: MangaTrack): Pair<MUListItem, MURating?> {\n        val listItem = with(json) {\n            authClient.newCall(GET(\"$BASE_URL/v1/lists/series/${track.remote_id}\"))\n                .awaitSuccess()\n                .parseAs<MUListItem>()\n        }\n\n        val rating = getSeriesRating(track)\n\n        return listItem to rating\n    }\n\n    suspend fun addSeriesToList(track: MangaTrack, hasReadChapters: Boolean) {\n        val status = if (hasReadChapters) READING_LIST else WISH_LIST\n        val body = buildJsonArray {\n            addJsonObject {\n                putJsonObject(\"series\") {\n                    put(\"id\", track.remote_id)\n                }\n                put(\"list_id\", status)\n            }\n        }\n        authClient.newCall(\n            POST(\n                url = \"$BASE_URL/v1/lists/series\",\n                body = body.toString().toRequestBody(CONTENT_TYPE),\n            ),\n        )\n            .awaitSuccess()\n            .let {\n                if (it.code == 200) {\n                    track.status = status\n                    track.last_chapter_read = 1.0\n                }\n            }\n    }\n\n    suspend fun updateSeriesListItem(track: MangaTrack) {\n        val body = buildJsonArray {\n            addJsonObject {\n                putJsonObject(\"series\") {\n                    put(\"id\", track.remote_id)\n                }\n                put(\"list_id\", track.status)\n                putJsonObject(\"status\") {\n                    put(\"chapter\", track.last_chapter_read.toInt())\n                }\n            }\n        }\n        authClient.newCall(\n            POST(\n                url = \"$BASE_URL/v1/lists/series/update\",\n                body = body.toString().toRequestBody(CONTENT_TYPE),\n            ),\n        )\n            .awaitSuccess()\n\n        updateSeriesRating(track)\n    }\n\n    suspend fun deleteSeriesFromList(track: DomainTrack) {\n        val body = buildJsonArray {\n            add(track.remoteId)\n        }\n        authClient.newCall(\n            POST(\n                url = \"$BASE_URL/v1/lists/series/delete\",\n                body = body.toString().toRequestBody(CONTENT_TYPE),\n            ),\n        )\n            .awaitSuccess()\n    }\n\n    private suspend fun getSeriesRating(track: MangaTrack): MURating? {\n        return try {\n            with(json) {\n                authClient.newCall(GET(\"$BASE_URL/v1/series/${track.remote_id}/rating\"))\n                    .awaitSuccess()\n                    .parseAs<MURating>()\n            }\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    private suspend fun updateSeriesRating(track: MangaTrack) {\n        if (track.score < 0.0) return\n        if (track.score != 0.0) {\n            val body = buildJsonObject {\n                put(\"rating\", track.score)\n            }\n            authClient.newCall(\n                PUT(\n                    url = \"$BASE_URL/v1/series/${track.remote_id}/rating\",\n                    body = body.toString().toRequestBody(CONTENT_TYPE),\n                ),\n            )\n                .awaitSuccess()\n        } else {\n            authClient.newCall(\n                DELETE(url = \"$BASE_URL/v1/series/${track.remote_id}/rating\"),\n            )\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun search(query: String): List<MURecord> {\n        val body = buildJsonObject {\n            put(\"search\", query)\n            put(\n                \"filter_types\",\n                buildJsonArray {\n                    add(\"drama cd\")\n                    add(\"novel\")\n                },\n            )\n        }\n\n        return with(json) {\n            client.newCall(\n                POST(\n                    url = \"$BASE_URL/v1/series/search\",\n                    body = body.toString().toRequestBody(CONTENT_TYPE),\n                ),\n            )\n                .awaitSuccess()\n                .parseAs<MUSearchResult>()\n                .results\n                .map { it.record }\n        }\n    }\n\n    suspend fun authenticate(username: String, password: String): MUContext? {\n        val body = buildJsonObject {\n            put(\"username\", username)\n            put(\"password\", password)\n        }\n        return with(json) {\n            client.newCall(\n                PUT(\n                    url = \"$BASE_URL/v1/account/login\",\n                    body = body.toString().toRequestBody(CONTENT_TYPE),\n                ),\n            )\n                .awaitSuccess()\n                .parseAs<MULoginResponse>()\n                .context\n        }\n    }\n\n    companion object {\n        private const val BASE_URL = \"https://api.mangaupdates.com\"\n        private val CONTENT_TYPE = \"application/vnd.api+json\".toMediaType()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdatesInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport java.io.IOException\n\nclass MangaUpdatesInterceptor(\n    mangaUpdates: MangaUpdates,\n) : Interceptor {\n\n    private var token: String? = mangaUpdates.restoreSession()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        val token = token ?: throw IOException(\"Not authenticated with MangaUpdates\")\n\n        // Add the authorization header to the original request.\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer $token\")\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n\n    fun newAuth(token: String?) {\n        this.token = token\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUContext.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUContext(\n    @SerialName(\"session_token\")\n    val sessionToken: String,\n    val uid: Long,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUImage.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUImage(\n    val url: MUUrl? = null,\n    val height: Int? = null,\n    val width: Int? = null,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUListItem.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.mangaupdates.MangaUpdates.Companion.READING_LIST\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUListItem(\n    val series: MUSeries? = null,\n    @SerialName(\"list_id\")\n    val listId: Long? = null,\n    val status: MUStatus? = null,\n    val priority: Int? = null,\n)\n\nfun MUListItem.copyTo(track: MangaTrack): MangaTrack {\n    return track.apply {\n        this.status = listId ?: READING_LIST\n        this.last_chapter_read = this@copyTo.status?.chapter?.toDouble() ?: 0.0\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MULoginResponse.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MULoginResponse(\n    val context: MUContext,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURating.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MURating(\n    val rating: Double? = null,\n)\n\nfun MURating.copyTo(track: MangaTrack): MangaTrack {\n    return track.apply {\n        this.score = rating ?: 0.0\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURecord.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.util.lang.htmlDecode\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MURecord(\n    @SerialName(\"series_id\")\n    val seriesId: Long? = null,\n    val title: String? = null,\n    val url: String? = null,\n    val description: String? = null,\n    val image: MUImage? = null,\n    val type: String? = null,\n    val year: String? = null,\n    @SerialName(\"bayesian_rating\")\n    val bayesianRating: Double? = null,\n    @SerialName(\"rating_votes\")\n    val ratingVotes: Int? = null,\n    @SerialName(\"latest_chapter\")\n    val latestChapter: Int? = null,\n)\n\nfun MURecord.toTrackSearch(id: Long): MangaTrackSearch {\n    return MangaTrackSearch.create(id).apply {\n        remote_id = this@toTrackSearch.seriesId ?: 0L\n        title = this@toTrackSearch.title?.htmlDecode() ?: \"\"\n        total_chapters = 0\n        cover_url = this@toTrackSearch.image?.url?.original ?: \"\"\n        summary = this@toTrackSearch.description?.htmlDecode() ?: \"\"\n        tracking_url = this@toTrackSearch.url ?: \"\"\n        publishing_status = \"\"\n        publishing_type = this@toTrackSearch.type.toString()\n        start_date = this@toTrackSearch.year.toString()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUSearchResult(\n    val results: List<MUSearchResultItem>,\n)\n\n@Serializable\ndata class MUSearchResultItem(\n    val record: MURecord,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUSeries.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUSeries(\n    val id: Long? = null,\n    val title: String? = null,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUStatus.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUStatus(\n    val volume: Int? = null,\n    val chapter: Int? = null,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUUrl.kt",
    "content": "package eu.kanade.tachiyomi.data.track.mangaupdates.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MUUrl(\n    val original: String? = null,\n    val thumb: String? = null,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/model/AnimeTrackSearch.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.track.model\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\n\nclass AnimeTrackSearch : AnimeTrack {\n\n    override var id: Long? = null\n\n    override var anime_id: Long = 0\n\n    override var tracker_id: Long = 0\n\n    override var remote_id: Long = 0\n\n    override var library_id: Long? = null\n\n    override lateinit var title: String\n\n    override var last_episode_seen: Double = 0.0\n\n    override var total_episodes: Long = 0\n\n    override var score: Double = -1.0\n\n    override var status: Long = 0\n\n    override var started_watching_date: Long = 0\n\n    override var finished_watching_date: Long = 0\n\n    override var private: Boolean = false\n\n    override lateinit var tracking_url: String\n\n    var authors: List<String> = emptyList()\n\n    var artists: List<String> = emptyList()\n\n    var cover_url: String = \"\"\n\n    var summary: String = \"\"\n\n    var publishing_status: String = \"\"\n\n    var publishing_type: String = \"\"\n\n    var start_date: String = \"\"\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (javaClass != other?.javaClass) return false\n\n        other as AnimeTrackSearch\n\n        if (anime_id != other.anime_id) return false\n        if (tracker_id != other.tracker_id) return false\n        if (remote_id != other.remote_id) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = anime_id.hashCode()\n        result = 31 * result + tracker_id.hashCode()\n        result = 31 * result + remote_id.hashCode()\n        return result\n    }\n\n    companion object {\n        fun create(serviceId: Long): AnimeTrackSearch = AnimeTrackSearch().apply {\n            tracker_id = serviceId\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/model/MangaTrackSearch.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.data.track.model\n\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\n\nclass MangaTrackSearch : MangaTrack {\n\n    override var id: Long? = null\n\n    override var manga_id: Long = 0\n\n    override var tracker_id: Long = 0\n\n    override var remote_id: Long = 0\n\n    override var library_id: Long? = null\n\n    override lateinit var title: String\n\n    override var last_chapter_read: Double = 0.0\n\n    override var total_chapters: Long = 0\n\n    override var score: Double = -1.0\n\n    override var status: Long = 0\n\n    override var started_reading_date: Long = 0\n\n    override var finished_reading_date: Long = 0\n\n    override var private: Boolean = false\n\n    override lateinit var tracking_url: String\n\n    var authors: List<String> = emptyList()\n\n    var artists: List<String> = emptyList()\n\n    var cover_url: String = \"\"\n\n    var summary: String = \"\"\n\n    var publishing_status: String = \"\"\n\n    var publishing_type: String = \"\"\n\n    var start_date: String = \"\"\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (javaClass != other?.javaClass) return false\n\n        other as MangaTrackSearch\n\n        if (manga_id != other.manga_id) return false\n        if (tracker_id != other.tracker_id) return false\n        if (remote_id != other.remote_id) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = manga_id.hashCode()\n        result = 31 * result + tracker_id.hashCode()\n        result = 31 * result + remote_id.hashCode()\n        return result\n    }\n\n    companion object {\n        fun create(serviceId: Long): MangaTrackSearch = MangaTrackSearch().apply {\n            tracker_id = serviceId\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.DeletableAnimeTracker\nimport eu.kanade.tachiyomi.data.track.DeletableMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALOAuth\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.serialization.json.Json\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass MyAnimeList(id: Long) :\n    BaseTracker(\n        id,\n        \"MyAnimeList\",\n    ),\n    MangaTracker,\n    AnimeTracker,\n    DeletableMangaTracker,\n    DeletableAnimeTracker {\n\n    companion object {\n        const val READING = 1L\n        const val WATCHING = 11L\n        const val COMPLETED = 2L\n        const val ON_HOLD = 3L\n        const val DROPPED = 4L\n        const val PLAN_TO_READ = 6L\n        const val PLAN_TO_WATCH = 16L\n        const val REREADING = 7L\n        const val REWATCHING = 17L\n\n        private const val SEARCH_ID_PREFIX = \"id:\"\n        private const val SEARCH_LIST_PREFIX = \"my:\"\n\n        private val SCORE_LIST = IntRange(0, 10)\n            .map(Int::toString)\n            .toImmutableList()\n    }\n\n    private val json: Json by injectLazy()\n\n    private val interceptor by lazy { MyAnimeListInterceptor(this) }\n    private val api by lazy { MyAnimeListApi(id, client, interceptor) }\n\n    override val supportsReadingDates: Boolean = true\n\n    override fun getLogo() = R.drawable.ic_tracker_mal\n\n    override fun getLogoColor() = Color.rgb(46, 81, 162)\n\n    override fun getStatusListManga(): List<Long> {\n        return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING)\n    }\n\n    override fun getStatusListAnime(): List<Long> {\n        return listOf(WATCHING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_WATCH, REWATCHING)\n    }\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        READING -> MR.strings.reading\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        PLAN_TO_READ -> MR.strings.plan_to_read\n        REREADING -> MR.strings.repeating\n        else -> null\n    }\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        WATCHING -> AYMR.strings.watching\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        PLAN_TO_WATCH -> AYMR.strings.plan_to_watch\n        REWATCHING -> AYMR.strings.repeating_anime\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getWatchingStatus(): Long = WATCHING\n\n    override fun getRereadingStatus(): Long = REREADING\n\n    override fun getRewatchingStatus(): Long = REWATCHING\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> = SCORE_LIST\n\n    override fun indexToScore(index: Int): Double {\n        return index.toDouble()\n    }\n\n    override fun displayScore(track: DomainMangaTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    override fun displayScore(track: DomainAnimeTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    private suspend fun add(track: MangaTrack): MangaTrack {\n        return api.updateItem(track)\n    }\n\n    private suspend fun add(track: AnimeTrack): AnimeTrack {\n        return api.updateItem(track)\n    }\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                    track.finished_reading_date = System.currentTimeMillis()\n                } else if (track.status != REREADING) {\n                    track.status = READING\n                    if (track.last_chapter_read == 1.0) {\n                        track.started_reading_date = System.currentTimeMillis()\n                    }\n                }\n            }\n        }\n\n        return api.updateItem(track)\n    }\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        if (track.status != COMPLETED) {\n            if (didWatchEpisode) {\n                if (track.last_episode_seen.toLong() == track.total_episodes && track.total_episodes > 0) {\n                    track.status = COMPLETED\n                    track.finished_watching_date = System.currentTimeMillis()\n                } else if (track.status != REWATCHING) {\n                    track.status = WATCHING\n                    if (track.last_episode_seen == 1.0) {\n                        track.started_watching_date = System.currentTimeMillis()\n                    }\n                }\n            }\n        }\n\n        return api.updateItem(track)\n    }\n\n    override suspend fun delete(track: DomainMangaTrack) {\n        api.deleteMangaItem(track)\n    }\n\n    override suspend fun delete(track: DomainAnimeTrack) {\n        api.deleteAnimeItem(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        val remoteTrack = api.findListItem(track)\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack)\n            track.remote_id = remoteTrack.remote_id\n\n            if (track.status != COMPLETED) {\n                val isRereading = track.status == REREADING\n                track.status = if (!isRereading && hasReadChapters) READING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasReadChapters) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasSeenEpisodes: Boolean): AnimeTrack {\n        val remoteTrack = api.findListItem(track)\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack)\n            track.remote_id = remoteTrack.remote_id\n\n            if (track.status != COMPLETED) {\n                val isRewatching = track.status == REWATCHING\n                track.status = if (!isRewatching && hasSeenEpisodes) WATCHING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasSeenEpisodes) WATCHING else PLAN_TO_WATCH\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        if (query.startsWith(SEARCH_ID_PREFIX)) {\n            query.substringAfter(SEARCH_ID_PREFIX).toIntOrNull()?.let { id ->\n                return listOf(api.getMangaDetails(id))\n            }\n        }\n\n        if (query.startsWith(SEARCH_LIST_PREFIX)) {\n            query.substringAfter(SEARCH_LIST_PREFIX).let { title ->\n                return api.findListItems(title)\n            }\n        }\n\n        return api.search(query)\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        if (query.startsWith(SEARCH_ID_PREFIX)) {\n            query.substringAfter(SEARCH_ID_PREFIX).toIntOrNull()?.let { id ->\n                return listOf(api.getAnimeDetails(id))\n            }\n        }\n\n        if (query.startsWith(SEARCH_LIST_PREFIX)) {\n            query.substringAfter(SEARCH_LIST_PREFIX).let { title ->\n                return api.findListItemsAnime(title)\n            }\n        }\n\n        return api.searchAnime(query)\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        return api.findListItem(track) ?: add(track)\n    }\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        return api.findListItem(track) ?: add(track)\n    }\n\n    override suspend fun login(username: String, password: String) = login(password)\n\n    suspend fun login(authCode: String) {\n        try {\n            val oauth = api.getAccessToken(authCode)\n            interceptor.setAuth(oauth)\n            val username = api.getCurrentUser()\n            saveCredentials(username, oauth.accessToken)\n        } catch (e: Throwable) {\n            logout()\n        }\n    }\n\n    override fun logout() {\n        super.logout()\n        trackPreferences.trackToken(this).delete()\n        interceptor.setAuth(null)\n    }\n\n    fun getIfAuthExpired(): Boolean {\n        return trackPreferences.trackAuthExpired(this).get()\n    }\n\n    fun setAuthExpired() {\n        trackPreferences.trackAuthExpired(this).set(true)\n    }\n\n    fun saveOAuth(oAuth: MALOAuth?) {\n        trackPreferences.trackToken(this).set(json.encodeToString(oAuth))\n    }\n\n    fun loadOAuth(): MALOAuth? {\n        return try {\n            json.decodeFromString<MALOAuth>(trackPreferences.trackToken(this).get())\n        } catch (e: Exception) {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist\n\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALAnime\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALListAnimeItem\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALListAnimeItemStatus\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALListMangaItem\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALListMangaItemStatus\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALManga\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALOAuth\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALSearchResult\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALUser\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALUserSearchResult\nimport eu.kanade.tachiyomi.network.DELETE\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport eu.kanade.tachiyomi.util.PkceUtil\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.serialization.json.Json\nimport okhttp3.FormBody\nimport okhttp3.Headers\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.RequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.injectLazy\nimport java.text.SimpleDateFormat\nimport java.util.Locale\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass MyAnimeListApi(\n    private val trackId: Long,\n    private val client: OkHttpClient,\n    interceptor: MyAnimeListInterceptor,\n) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder().addInterceptor(interceptor).build()\n\n    suspend fun getAccessToken(authCode: String): MALOAuth {\n        return withIOContext {\n            val formBody: RequestBody = FormBody.Builder()\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"code\", authCode)\n                .add(\"code_verifier\", codeVerifier)\n                .add(\"grant_type\", \"authorization_code\")\n                .build()\n            with(json) {\n                client.newCall(POST(\"$BASE_OAUTH_URL/token\", body = formBody))\n                    .awaitSuccess()\n                    .parseAs()\n            }\n        }\n    }\n\n    suspend fun getCurrentUser(): String {\n        return withIOContext {\n            val request = Request.Builder()\n                .url(\"$BASE_API_URL/users/@me\")\n                .get()\n                .build()\n            with(json) {\n                authClient.newCall(request)\n                    .awaitSuccess()\n                    .parseAs<MALUser>()\n                    .name\n            }\n        }\n    }\n\n    suspend fun search(query: String): List<MangaTrackSearch> {\n        return withIOContext {\n            val url = \"$BASE_API_URL/manga\".toUri().buildUpon()\n                // MAL API throws a 400 when the query is over 64 characters...\n                .appendQueryParameter(\"q\", query.take(64))\n                .appendQueryParameter(\"nsfw\", \"true\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<MALSearchResult>()\n                    .data\n                    .map { async { getMangaDetails(it.node.id) } }\n                    .awaitAll()\n                    .filter { !it.publishing_type.contains(\"novel\") }\n            }\n        }\n    }\n\n    suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return withIOContext {\n            val url = \"$BASE_API_URL/anime\".toUri().buildUpon()\n                // MAL API throws a 400 when the query is over 64 characters...\n                .appendQueryParameter(\"q\", query.take(64))\n                .appendQueryParameter(\"q\", query)\n                .appendQueryParameter(\"nsfw\", \"true\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<MALSearchResult>()\n                    .data\n                    .map { async { getAnimeDetails(it.node.id) } }\n                    .awaitAll()\n            }\n        }\n    }\n\n    suspend fun getMangaDetails(id: Int): MangaTrackSearch {\n        return withIOContext {\n            val url = \"$BASE_API_URL/manga\".toUri().buildUpon()\n                .appendPath(id.toString())\n                .appendQueryParameter(\n                    \"fields\",\n                    \"id,title,synopsis,num_chapters,mean,main_picture,status,media_type,start_date\",\n                )\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<MALManga>()\n                    .let {\n                        MangaTrackSearch.create(trackId).apply {\n                            remote_id = it.id\n                            title = it.title\n                            summary = it.synopsis\n                            total_chapters = it.numChapters\n                            score = it.mean\n                            cover_url = it.covers?.large.orEmpty()\n                            tracking_url = \"https://myanimelist.net/manga/$remote_id\"\n                            publishing_status = it.status.replace(\"_\", \" \")\n                            publishing_type = it.mediaType.replace(\"_\", \" \")\n                            start_date = it.startDate ?: \"\"\n                        }\n                    }\n            }\n        }\n    }\n\n    suspend fun getAnimeDetails(id: Int): AnimeTrackSearch {\n        return withIOContext {\n            val url = \"$BASE_API_URL/anime\".toUri().buildUpon()\n                .appendPath(id.toString())\n                .appendQueryParameter(\n                    \"fields\",\n                    \"id,title,synopsis,num_episodes,mean,main_picture,status,media_type,start_date\",\n                )\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<MALAnime>()\n                    .let {\n                        AnimeTrackSearch.create(trackId).apply {\n                            remote_id = it.id\n                            title = it.title\n                            summary = it.synopsis\n                            total_episodes = it.numEpisodes\n                            score = it.mean\n                            cover_url = it.covers?.large.orEmpty()\n                            tracking_url = \"https://myanimelist.net/anime/$remote_id\"\n                            publishing_status = it.status.replace(\"_\", \" \")\n                            publishing_type = it.mediaType.replace(\"_\", \" \")\n                            start_date = it.startDate ?: \"\"\n                        }\n                    }\n            }\n        }\n    }\n\n    suspend fun updateItem(track: MangaTrack): MangaTrack {\n        return withIOContext {\n            val formBodyBuilder = FormBody.Builder()\n                .add(\"status\", track.toMyAnimeListStatus() ?: \"reading\")\n                .add(\"is_rereading\", (track.status == MyAnimeList.REREADING).toString())\n                .add(\"score\", track.score.toString())\n                .add(\"num_chapters_read\", track.last_chapter_read.toInt().toString())\n            convertToIsoDate(track.started_reading_date)?.let {\n                formBodyBuilder.add(\"start_date\", it)\n            }\n            convertToIsoDate(track.finished_reading_date)?.let {\n                formBodyBuilder.add(\"finish_date\", it)\n            }\n\n            val request = Request.Builder()\n                .url(mangaUrl(track.remote_id).toString())\n                .put(formBodyBuilder.build())\n                .build()\n            with(json) {\n                authClient.newCall(request)\n                    .awaitSuccess()\n                    .parseAs<MALListMangaItemStatus>()\n                    .let { parseMangaItem(it, track) }\n            }\n        }\n    }\n\n    suspend fun updateItem(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val formBodyBuilder = FormBody.Builder()\n                .add(\"status\", track.toMyAnimeListStatus() ?: \"watching\")\n                .add(\"is_rewatching\", (track.status == MyAnimeList.REWATCHING).toString())\n                .add(\"score\", track.score.toString())\n                .add(\"num_watched_episodes\", track.last_episode_seen.toInt().toString())\n            convertToIsoDate(track.started_watching_date)?.let {\n                formBodyBuilder.add(\"start_date\", it)\n            }\n            convertToIsoDate(track.finished_watching_date)?.let {\n                formBodyBuilder.add(\"finish_date\", it)\n            }\n\n            val request = Request.Builder()\n                .url(animeUrl(track.remote_id).toString())\n                .put(formBodyBuilder.build())\n                .build()\n            with(json) {\n                authClient.newCall(request)\n                    .awaitSuccess()\n                    .parseAs<MALListAnimeItemStatus>()\n                    .let { parseAnimeItem(it, track) }\n            }\n        }\n    }\n\n    suspend fun deleteMangaItem(track: DomainMangaTrack) {\n        withIOContext {\n            authClient\n                .newCall(DELETE(mangaUrl(track.remoteId).toString()))\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun deleteAnimeItem(track: DomainAnimeTrack) {\n        withIOContext {\n            authClient\n                .newCall(DELETE(animeUrl(track.remoteId).toString()))\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun findListItem(track: MangaTrack): MangaTrack? {\n        return withIOContext {\n            val uri = \"$BASE_API_URL/manga\".toUri().buildUpon()\n                .appendPath(track.remote_id.toString())\n                .appendQueryParameter(\"fields\", \"num_chapters,my_list_status{start_date,finish_date}\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(uri.toString()))\n                    .awaitSuccess()\n                    .parseAs<MALListMangaItem>()\n                    .let { item ->\n                        track.total_chapters = item.numChapters\n                        item.myListStatus?.let { parseMangaItem(it, track) }\n                    }\n            }\n        }\n    }\n\n    suspend fun findListItem(track: AnimeTrack): AnimeTrack? {\n        return withIOContext {\n            val uri = \"$BASE_API_URL/anime\".toUri().buildUpon()\n                .appendPath(track.remote_id.toString())\n                .appendQueryParameter(\"fields\", \"num_episodes,my_list_status{start_date,finish_date}\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(uri.toString()))\n                    .awaitSuccess()\n                    .parseAs<MALListAnimeItem>()\n                    .let { item ->\n                        track.total_episodes = item.numEpisodes\n                        item.myListStatus?.let { parseAnimeItem(it, track) }\n                    }\n            }\n        }\n    }\n\n    suspend fun findListItems(query: String, offset: Int = 0): List<MangaTrackSearch> {\n        return withIOContext {\n            val myListSearchResult = getListPage(offset)\n\n            val matches = myListSearchResult.data\n                .filter { it.node.title.contains(query, ignoreCase = true) }\n                .map { async { getMangaDetails(it.node.id) } }\n                .awaitAll()\n\n            // Check next page if there's more\n            if (!myListSearchResult.paging.next.isNullOrBlank()) {\n                matches + findListItems(query, offset + LIST_PAGINATION_AMOUNT)\n            } else {\n                matches\n            }\n        }\n    }\n\n    suspend fun findListItemsAnime(query: String, offset: Int = 0): List<AnimeTrackSearch> {\n        return withIOContext {\n            val myListSearchResult = getListPage(offset)\n\n            val matches = myListSearchResult.data\n                .filter { it.node.title.contains(query, ignoreCase = true) }\n                .map { async { getAnimeDetails(it.node.id) } }\n                .awaitAll()\n\n            // Check next page if there's more\n            if (!myListSearchResult.paging.next.isNullOrBlank()) {\n                matches + findListItemsAnime(query, offset + LIST_PAGINATION_AMOUNT)\n            } else {\n                matches\n            }\n        }\n    }\n\n    private suspend fun getListPage(offset: Int): MALUserSearchResult {\n        return withIOContext {\n            val urlBuilder = \"$BASE_API_URL/users/@me/mangalist\".toUri().buildUpon()\n                .appendQueryParameter(\"fields\", \"list_status{start_date,finish_date}\")\n                .appendQueryParameter(\"limit\", LIST_PAGINATION_AMOUNT.toString())\n            if (offset > 0) {\n                urlBuilder.appendQueryParameter(\"offset\", offset.toString())\n            }\n\n            val request = Request.Builder()\n                .url(urlBuilder.build().toString())\n                .get()\n                .build()\n            with(json) {\n                authClient.newCall(request)\n                    .awaitSuccess()\n                    .parseAs()\n            }\n        }\n    }\n\n    private fun parseMangaItem(listStatus: MALListMangaItemStatus, track: MangaTrack): MangaTrack {\n        return track.apply {\n            val isRereading = listStatus.isRereading\n            status = if (isRereading) MyAnimeList.REREADING else getStatus(listStatus.status)\n            last_chapter_read = listStatus.numChaptersRead\n            score = listStatus.score.toDouble()\n            listStatus.startDate?.let { started_reading_date = parseDate(it) }\n            listStatus.finishDate?.let { finished_reading_date = parseDate(it) }\n        }\n    }\n\n    private fun parseAnimeItem(listStatus: MALListAnimeItemStatus, track: AnimeTrack): AnimeTrack {\n        return track.apply {\n            val isRewatching = listStatus.isRewatching\n            status = if (isRewatching) MyAnimeList.REWATCHING else getStatus(listStatus.status)\n            last_episode_seen = listStatus.numEpisodesWatched\n            score = listStatus.score.toDouble()\n            listStatus.startDate?.let { started_watching_date = parseDate(it) }\n            listStatus.finishDate?.let { finished_watching_date = parseDate(it) }\n        }\n    }\n\n    private fun parseDate(isoDate: String): Long {\n        return SimpleDateFormat(\"yyyy-MM-dd\", Locale.US).parse(isoDate)?.time ?: 0L\n    }\n\n    private fun convertToIsoDate(epochTime: Long): String? {\n        if (epochTime == 0L) {\n            return \"\"\n        }\n        return try {\n            val outputDf = SimpleDateFormat(\"yyyy-MM-dd\", Locale.US)\n            outputDf.format(epochTime)\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    companion object {\n        private const val CLIENT_ID = \"686b980ff4240fccce7f6a654cea07ce\"\n\n        private const val BASE_OAUTH_URL = \"https://myanimelist.net/v1/oauth2\"\n        private const val BASE_API_URL = \"https://api.myanimelist.net/v2\"\n\n        private const val LIST_PAGINATION_AMOUNT = 250\n\n        private var codeVerifier: String = \"\"\n\n        fun authUrl(): Uri = \"$BASE_OAUTH_URL/authorize\".toUri().buildUpon()\n            .appendQueryParameter(\"client_id\", CLIENT_ID)\n            .appendQueryParameter(\"code_challenge\", getPkceChallengeCode())\n            .appendQueryParameter(\"response_type\", \"code\")\n            .build()\n\n        fun mangaUrl(id: Long): Uri = \"$BASE_API_URL/manga\".toUri().buildUpon()\n            .appendPath(id.toString())\n            .appendPath(\"my_list_status\")\n            .build()\n\n        fun animeUrl(id: Long): Uri = \"$BASE_API_URL/anime\".toUri().buildUpon()\n            .appendPath(id.toString())\n            .appendPath(\"my_list_status\")\n            .build()\n\n        fun refreshTokenRequest(oauth: MALOAuth): Request {\n            val formBody: RequestBody = FormBody.Builder()\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"refresh_token\", oauth.refreshToken)\n                .add(\"grant_type\", \"refresh_token\")\n                .build()\n\n            // Add the Authorization header manually as this particular\n            // request is called by the interceptor itself so it doesn't reach\n            // the part where the token is added automatically.\n            val headers = Headers.Builder()\n                .add(\"Authorization\", \"Bearer ${oauth.accessToken}\")\n                .build()\n\n            return POST(\"$BASE_OAUTH_URL/token\", body = formBody, headers = headers)\n        }\n\n        private fun getPkceChallengeCode(): String {\n            codeVerifier = PkceUtil.generateCodeVerifier()\n            return codeVerifier\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist\n\nimport eu.kanade.tachiyomi.data.track.myanimelist.dto.MALOAuth\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport uy.kohesive.injekt.injectLazy\nimport java.io.IOException\n\nclass MyAnimeListInterceptor(private val myanimelist: MyAnimeList) : Interceptor {\n\n    private val json: Json by injectLazy()\n\n    private var oauth: MALOAuth? = myanimelist.loadOAuth()\n    private val tokenExpired get() = myanimelist.getIfAuthExpired()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        if (tokenExpired) {\n            throw MALTokenExpired()\n        }\n        val originalRequest = chain.request()\n\n        if (oauth?.isExpired() == true) {\n            refreshToken(chain)\n        }\n\n        if (oauth == null) {\n            throw IOException(\"MAL: User is not authenticated\")\n        }\n\n        // Add the authorization header to the original request\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer ${oauth!!.accessToken}\")\n            // .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n\n    /**\n     * Called when the user authenticates with MyAnimeList for the first time. Sets the refresh token\n     * and the oauth object.\n     */\n    fun setAuth(oauth: MALOAuth?) {\n        this.oauth = oauth\n        myanimelist.saveOAuth(oauth)\n    }\n\n    private fun refreshToken(chain: Interceptor.Chain): MALOAuth = synchronized(this) {\n        if (tokenExpired) throw MALTokenExpired()\n        oauth?.takeUnless { it.isExpired() }?.let { return@synchronized it }\n\n        val response = try {\n            chain.proceed(MyAnimeListApi.refreshTokenRequest(oauth!!))\n        } catch (_: Throwable) {\n            throw MALTokenRefreshFailed()\n        }\n\n        if (response.code == 401) {\n            myanimelist.setAuthExpired()\n            throw MALTokenExpired()\n        }\n\n        return runCatching {\n            if (response.isSuccessful) {\n                with(json) { response.parseAs<MALOAuth>() }\n            } else {\n                response.close()\n                null\n            }\n        }\n            .getOrNull()\n            ?.also {\n                this.oauth = it\n                myanimelist.saveOAuth(it)\n            }\n            ?: throw MALTokenRefreshFailed()\n    }\n}\n\nclass MALTokenRefreshFailed : IOException(\"MAL: Failed to refresh account token\")\nclass MALTokenExpired : IOException(\"MAL: Login has expired\")\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListUtils.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\n\nfun MangaTrack.toMyAnimeListStatus() = when (status) {\n    MyAnimeList.READING -> \"reading\"\n    MyAnimeList.COMPLETED -> \"completed\"\n    MyAnimeList.ON_HOLD -> \"on_hold\"\n    MyAnimeList.DROPPED -> \"dropped\"\n    MyAnimeList.PLAN_TO_READ -> \"plan_to_read\"\n    MyAnimeList.REREADING -> \"reading\"\n    else -> null\n}\n\nfun AnimeTrack.toMyAnimeListStatus() = when (status) {\n    MyAnimeList.WATCHING -> \"watching\"\n    MyAnimeList.READING -> \"watching\"\n    MyAnimeList.COMPLETED -> \"completed\"\n    MyAnimeList.ON_HOLD -> \"on_hold\"\n    MyAnimeList.DROPPED -> \"dropped\"\n    MyAnimeList.PLAN_TO_READ -> \"plan_to_watch\"\n    MyAnimeList.REREADING -> \"watching\"\n    MyAnimeList.PLAN_TO_WATCH -> \"plan_to_watch\"\n    MyAnimeList.REWATCHING -> \"watching\"\n    else -> null\n}\n\nfun getStatus(status: String?) = when (status) {\n    \"reading\" -> MyAnimeList.READING\n    \"watching\" -> MyAnimeList.WATCHING\n    \"completed\" -> MyAnimeList.COMPLETED\n    \"on_hold\" -> MyAnimeList.ON_HOLD\n    \"dropped\" -> MyAnimeList.DROPPED\n    \"plan_to_read\" -> MyAnimeList.PLAN_TO_READ\n    \"plan_to_watch\" -> MyAnimeList.PLAN_TO_WATCH\n    else -> MyAnimeList.READING\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALAnime.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALAnime(\n    val id: Long,\n    val title: String,\n    val synopsis: String = \"\",\n    @SerialName(\"num_episodes\")\n    val numEpisodes: Long,\n    val mean: Double = -1.0,\n    @SerialName(\"main_picture\")\n    val covers: MALAnimeCovers?,\n    val status: String,\n    @SerialName(\"media_type\")\n    val mediaType: String,\n    @SerialName(\"start_date\")\n    val startDate: String?,\n)\n\n@Serializable\ndata class MALAnimeCovers(\n    val large: String = \"\",\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALList.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALListAnimeItem(\n    @SerialName(\"num_episodes\")\n    val numEpisodes: Long,\n    @SerialName(\"my_list_status\")\n    val myListStatus: MALListAnimeItemStatus?,\n)\n\n@Serializable\ndata class MALListAnimeItemStatus(\n    @SerialName(\"is_rewatching\")\n    val isRewatching: Boolean,\n    val status: String,\n    @SerialName(\"num_episodes_watched\")\n    val numEpisodesWatched: Double,\n    val score: Int,\n    @SerialName(\"start_date\")\n    val startDate: String?,\n    @SerialName(\"finish_date\")\n    val finishDate: String?,\n)\n\n@Serializable\ndata class MALListMangaItem(\n    @SerialName(\"num_chapters\")\n    val numChapters: Long,\n    @SerialName(\"my_list_status\")\n    val myListStatus: MALListMangaItemStatus?,\n)\n\n@Serializable\ndata class MALListMangaItemStatus(\n    @SerialName(\"is_rereading\")\n    val isRereading: Boolean,\n    val status: String,\n    @SerialName(\"num_chapters_read\")\n    val numChaptersRead: Double,\n    val score: Int,\n    @SerialName(\"start_date\")\n    val startDate: String?,\n    @SerialName(\"finish_date\")\n    val finishDate: String?,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALManga.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALManga(\n    val id: Long,\n    val title: String,\n    val synopsis: String = \"\",\n    @SerialName(\"num_chapters\")\n    val numChapters: Long,\n    val mean: Double = -1.0,\n    @SerialName(\"main_picture\")\n    val covers: MALMangaCovers?,\n    val status: String,\n    @SerialName(\"media_type\")\n    val mediaType: String,\n    @SerialName(\"start_date\")\n    val startDate: String?,\n)\n\n@Serializable\ndata class MALMangaCovers(\n    val large: String = \"\",\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALOAuth.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.EncodeDefault\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALOAuth(\n    @SerialName(\"token_type\")\n    val tokenType: String,\n    @SerialName(\"refresh_token\")\n    val refreshToken: String,\n    @SerialName(\"access_token\")\n    val accessToken: String,\n    @SerialName(\"expires_in\")\n    val expiresIn: Long,\n    @SerialName(\"created_at\")\n    @EncodeDefault\n    val createdAt: Long = System.currentTimeMillis() / 1000,\n) {\n    // Assumes expired a minute earlier\n    private val adjustedExpiresIn: Long = (expiresIn - 60)\n\n    fun isExpired() = createdAt + adjustedExpiresIn < System.currentTimeMillis() / 1000\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALSearchResult(\n    val data: List<MALSearchResultNode>,\n)\n\n@Serializable\ndata class MALSearchResultNode(\n    val node: MALSearchResultItem,\n)\n\n@Serializable\ndata class MALSearchResultItem(\n    val id: Int,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALUser.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALUser(\n    val name: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/dto/MALUserListSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.myanimelist.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class MALUserSearchResult(\n    val data: List<MALUserSearchItem>,\n    val paging: MALUserSearchPaging,\n)\n\n@Serializable\ndata class MALUserSearchItem(\n    val node: MALUserSearchItemNode,\n)\n\n@Serializable\ndata class MALUserSearchPaging(\n    val next: String?,\n)\n\n@Serializable\ndata class MALUserSearchItemNode(\n    val id: Int,\n    val title: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/Shikimori.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.DeletableAnimeTracker\nimport eu.kanade.tachiyomi.data.track.DeletableMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMOAuth\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass Shikimori(id: Long) :\n    BaseTracker(\n        id,\n        \"Shikimori\",\n    ),\n    MangaTracker,\n    AnimeTracker,\n    DeletableMangaTracker,\n    DeletableAnimeTracker {\n\n    companion object {\n        const val READING = 1L\n        const val COMPLETED = 2L\n        const val ON_HOLD = 3L\n        const val DROPPED = 4L\n        const val PLAN_TO_READ = 5L\n        const val REREADING = 6L\n\n        private val SCORE_LIST = IntRange(0, 10)\n            .map(Int::toString)\n            .toImmutableList()\n    }\n\n    private val json: Json by injectLazy()\n\n    private val interceptor by lazy { ShikimoriInterceptor(this) }\n\n    private val api by lazy { ShikimoriApi(id, client, interceptor) }\n\n    override fun getScoreList(): ImmutableList<String> = SCORE_LIST\n\n    override fun indexToScore(index: Int): Double {\n        return index.toDouble()\n    }\n\n    override fun displayScore(track: DomainMangaTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    override fun displayScore(track: DomainAnimeTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    private suspend fun add(track: MangaTrack): MangaTrack {\n        return api.addLibManga(track, getUsername())\n    }\n\n    private suspend fun add(track: AnimeTrack): AnimeTrack {\n        return api.addLibAnime(track, getUsername())\n    }\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                } else if (track.status != REREADING) {\n                    track.status = READING\n                }\n            }\n        }\n\n        return api.updateLibManga(track, getUsername())\n    }\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        if (track.status != COMPLETED) {\n            if (didWatchEpisode) {\n                if (track.last_episode_seen.toLong() == track.total_episodes && track.total_episodes > 0) {\n                    track.status = COMPLETED\n                } else if (track.status != REREADING) {\n                    track.status = READING\n                }\n            }\n        }\n\n        return api.updateLibAnime(track, getUsername())\n    }\n\n    override suspend fun delete(track: DomainMangaTrack) {\n        api.deleteLibManga(track)\n    }\n\n    override suspend fun delete(track: DomainAnimeTrack) {\n        api.deleteLibAnime(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        val remoteTrack = api.findLibManga(track, getUsername())\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack)\n            track.library_id = remoteTrack.library_id\n\n            if (track.status != COMPLETED) {\n                val isRereading = track.status == REREADING\n                track.status = if (!isRereading && hasReadChapters) READING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasReadChapters) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasReadChapters: Boolean): AnimeTrack {\n        val remoteTrack = api.findLibAnime(track, getUsername())\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack)\n            track.library_id = remoteTrack.library_id\n\n            if (track.status != COMPLETED) {\n                val isRereading = track.status == REREADING\n                track.status = if (!isRereading && hasReadChapters) READING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasReadChapters) READING else PLAN_TO_READ\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        return api.search(query)\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return api.searchAnime(query)\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        api.findLibManga(track, getUsername())?.let { remoteTrack ->\n            track.library_id = remoteTrack.library_id\n            track.copyPersonalFrom(remoteTrack)\n            track.total_chapters = remoteTrack.total_chapters\n        } ?: throw Exception(\"Could not find manga\")\n        return track\n    }\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        api.findLibAnime(track, getUsername())?.let { remoteTrack ->\n            track.library_id = remoteTrack.library_id\n            track.copyPersonalFrom(remoteTrack)\n            track.total_episodes = remoteTrack.total_episodes\n        } ?: throw Exception(\"Could not find anime\")\n        return track\n    }\n\n    override fun getLogo() = R.drawable.ic_tracker_shikimori\n\n    override fun getLogoColor() = Color.rgb(40, 40, 40)\n\n    override fun getStatusListManga(): List<Long> {\n        return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING)\n    }\n\n    override fun getStatusListAnime(): List<Long> {\n        return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING)\n    }\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        READING -> MR.strings.reading\n        PLAN_TO_READ -> MR.strings.plan_to_read\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        REREADING -> MR.strings.repeating\n        else -> null\n    }\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        READING -> AYMR.strings.watching\n        PLAN_TO_READ -> AYMR.strings.plan_to_watch\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        DROPPED -> MR.strings.dropped\n        REREADING -> AYMR.strings.repeating_anime\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getWatchingStatus(): Long = READING\n\n    override fun getRereadingStatus(): Long = REREADING\n\n    override fun getRewatchingStatus(): Long = REREADING\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override suspend fun login(username: String, password: String) = login(password)\n\n    suspend fun login(code: String) {\n        try {\n            val oauth = api.accessToken(code)\n            interceptor.newAuth(oauth)\n            val user = api.getCurrentUser()\n            saveCredentials(user.toString(), oauth.accessToken)\n        } catch (e: Throwable) {\n            logout()\n        }\n    }\n\n    fun saveToken(oauth: SMOAuth?) {\n        trackPreferences.trackToken(this).set(json.encodeToString(oauth))\n    }\n\n    fun restoreToken(): SMOAuth? {\n        return try {\n            json.decodeFromString<SMOAuth>(trackPreferences.trackToken(this).get())\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    override fun logout() {\n        super.logout()\n        trackPreferences.trackToken(this).delete()\n        interceptor.newAuth(null)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori\n\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMAddEntryResponse\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMEntry\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMOAuth\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMUser\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMUserListEntry\nimport eu.kanade.tachiyomi.network.DELETE\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.jsonMime\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonObject\nimport okhttp3.FormBody\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainMangaTrack\n\nclass ShikimoriApi(\n    private val trackId: Long,\n    private val client: OkHttpClient,\n    interceptor: ShikimoriInterceptor,\n) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder().addInterceptor(interceptor).build()\n\n    suspend fun addLibManga(track: MangaTrack, userId: String): MangaTrack {\n        return withIOContext {\n            with(json) {\n                val payload = buildJsonObject {\n                    putJsonObject(\"user_rate\") {\n                        put(\"user_id\", userId)\n                        put(\"target_id\", track.remote_id)\n                        put(\"target_type\", \"Manga\")\n                        put(\"chapters\", track.last_chapter_read.toInt())\n                        put(\"score\", track.score.toInt())\n                        put(\"status\", track.toShikimoriStatus())\n                    }\n                }\n                authClient.newCall(\n                    POST(\n                        \"$API_URL/v2/user_rates\",\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                ).awaitSuccess()\n                    .parseAs<SMAddEntryResponse>()\n                    .let {\n                        track.library_id = it.id\n                    }\n                track\n            }\n        }\n    }\n\n    suspend fun updateLibManga(track: MangaTrack, userId: String): MangaTrack = addLibManga(\n        track,\n        userId,\n    )\n\n    suspend fun deleteLibManga(track: DomainMangaTrack) {\n        withIOContext {\n            authClient\n                .newCall(DELETE(\"$API_URL/v2/user_rates/${track.libraryId}\"))\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun addLibAnime(track: AnimeTrack, userId: String): AnimeTrack {\n        return withIOContext {\n            with(json) {\n                val payload = buildJsonObject {\n                    putJsonObject(\"user_rate\") {\n                        put(\"user_id\", userId)\n                        put(\"target_id\", track.remote_id)\n                        put(\"target_type\", \"Anime\")\n                        put(\"episodes\", track.last_episode_seen.toInt())\n                        put(\"score\", track.score.toInt())\n                        put(\"status\", track.toShikimoriStatus())\n                    }\n                }\n                authClient.newCall(\n                    POST(\n                        \"$API_URL/v2/user_rates\",\n                        body = payload.toString().toRequestBody(jsonMime),\n                    ),\n                ).awaitSuccess()\n                    .parseAs<SMAddEntryResponse>()\n                    .let {\n                        track.library_id = it.id\n                    }\n                track\n            }\n        }\n    }\n\n    suspend fun updateLibAnime(track: AnimeTrack, userId: String): AnimeTrack = addLibAnime(\n        track,\n        userId,\n    )\n\n    suspend fun deleteLibAnime(track: DomainAnimeTrack) {\n        withIOContext {\n            authClient\n                .newCall(DELETE(\"$API_URL/v2/user_rates/${track.libraryId}\"))\n                .awaitSuccess()\n        }\n    }\n\n    suspend fun search(search: String): List<MangaTrackSearch> {\n        return withIOContext {\n            val url = \"$API_URL/mangas\".toUri().buildUpon()\n                .appendQueryParameter(\"order\", \"popularity\")\n                .appendQueryParameter(\"search\", search)\n                .appendQueryParameter(\"limit\", \"20\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<List<SMEntry>>()\n                    .map { it.toMangaTrack(trackId) }\n            }\n        }\n    }\n\n    suspend fun searchAnime(search: String): List<AnimeTrackSearch> {\n        return withIOContext {\n            val url = \"$API_URL/animes\".toUri().buildUpon()\n                .appendQueryParameter(\"order\", \"popularity\")\n                .appendQueryParameter(\"search\", search)\n                .appendQueryParameter(\"limit\", \"20\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<List<SMEntry>>()\n                    .map { it.toAnimeTrack(trackId) }\n            }\n        }\n    }\n\n    suspend fun findLibManga(track: MangaTrack, userId: String): MangaTrack? {\n        return withIOContext {\n            val urlMangas = \"$API_URL/mangas\".toUri().buildUpon()\n                .appendPath(track.remote_id.toString())\n                .build()\n            val manga = with(json) {\n                authClient.newCall(GET(urlMangas.toString()))\n                    .awaitSuccess()\n                    .parseAs<SMEntry>()\n            }\n\n            val url = \"$API_URL/v2/user_rates\".toUri().buildUpon()\n                .appendQueryParameter(\"user_id\", userId)\n                .appendQueryParameter(\"target_id\", track.remote_id.toString())\n                .appendQueryParameter(\"target_type\", \"Manga\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<List<SMUserListEntry>>()\n                    .let { entries ->\n                        if (entries.size > 1) {\n                            throw Exception(\"Too many manga in response\")\n                        }\n                        entries\n                            .map { it.toMangaTrack(trackId, manga) }\n                            .firstOrNull()\n                    }\n            }\n        }\n    }\n\n    suspend fun findLibAnime(track: AnimeTrack, user_id: String): AnimeTrack? {\n        return withIOContext {\n            val urlAnimes = \"$API_URL/animes\".toUri().buildUpon()\n                .appendPath(track.remote_id.toString())\n                .build()\n            val anime = with(json) {\n                authClient.newCall(GET(urlAnimes.toString()))\n                    .awaitSuccess()\n                    .parseAs<SMEntry>()\n            }\n\n            val url = \"$API_URL/v2/user_rates\".toUri().buildUpon()\n                .appendQueryParameter(\"user_id\", user_id)\n                .appendQueryParameter(\"target_id\", track.remote_id.toString())\n                .appendQueryParameter(\"target_type\", \"Anime\")\n                .build()\n            with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<List<SMUserListEntry>>()\n                    .let { entries ->\n                        if (entries.size > 1) {\n                            throw Exception(\"Too many manga in response\")\n                        }\n                        entries\n                            .map { it.toAnimeTrack(trackId, anime) }\n                            .firstOrNull()\n                    }\n            }\n        }\n    }\n\n    suspend fun getCurrentUser(): Int {\n        return with(json) {\n            authClient.newCall(GET(\"$API_URL/users/whoami\"))\n                .awaitSuccess()\n                .parseAs<SMUser>()\n                .id\n        }\n    }\n\n    suspend fun accessToken(code: String): SMOAuth {\n        return withIOContext {\n            with(json) {\n                client.newCall(accessTokenRequest(code))\n                    .awaitSuccess()\n                    .parseAs()\n            }\n        }\n    }\n\n    private fun accessTokenRequest(code: String) = POST(\n        OAUTH_URL,\n        body = FormBody.Builder()\n            .add(\"grant_type\", \"authorization_code\")\n            .add(\"client_id\", CLIENT_ID)\n            .add(\"client_secret\", CLIENT_SECRET)\n            .add(\"code\", code)\n            .add(\"redirect_uri\", REDIRECT_URL)\n            .build(),\n    )\n\n    companion object {\n        const val BASE_URL = \"https://shikimori.one\"\n        private const val API_URL = \"$BASE_URL/api\"\n        private const val OAUTH_URL = \"$BASE_URL/oauth/token\"\n        private const val LOGIN_URL = \"$BASE_URL/oauth/authorize\"\n\n        private const val REDIRECT_URL = \"aniyomi://shikimori-auth\"\n\n        private const val CLIENT_ID = \"aOAYRqOLwxpA8skpcQIXetNy4cw2rn2fRzScawlcQ5U\"\n        private const val CLIENT_SECRET = \"jqjmORn6bh2046ulkm4lHEwJ3OA1RmO3FD2sR9f6Clw\"\n\n        fun authUrl(): Uri = LOGIN_URL.toUri().buildUpon()\n            .appendQueryParameter(\"client_id\", CLIENT_ID)\n            .appendQueryParameter(\"redirect_uri\", REDIRECT_URL)\n            .appendQueryParameter(\"response_type\", \"code\")\n            .build()\n\n        fun refreshTokenRequest(token: String) = POST(\n            OAUTH_URL,\n            body = FormBody.Builder()\n                .add(\"grant_type\", \"refresh_token\")\n                .add(\"client_id\", CLIENT_ID)\n                .add(\"client_secret\", CLIENT_SECRET)\n                .add(\"refresh_token\", token)\n                .build(),\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.SMOAuth\nimport eu.kanade.tachiyomi.data.track.shikimori.dto.isExpired\nimport kotlinx.serialization.json.Json\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport uy.kohesive.injekt.injectLazy\n\nclass ShikimoriInterceptor(private val shikimori: Shikimori) : Interceptor {\n\n    private val json: Json by injectLazy()\n\n    /**\n     * OAuth object used for authenticated requests.\n     */\n    private var oauth: SMOAuth? = shikimori.restoreToken()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        val currAuth = oauth ?: throw Exception(\"Not authenticated with Shikimori\")\n\n        val refreshToken = currAuth.refreshToken!!\n\n        // Refresh access token if expired.\n        if (currAuth.isExpired()) {\n            val response = chain.proceed(ShikimoriApi.refreshTokenRequest(refreshToken))\n            if (response.isSuccessful) {\n                newAuth(json.decodeFromString<SMOAuth>(response.body.string()))\n            } else {\n                response.close()\n            }\n        }\n        // Add the authorization header to the original request.\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer ${oauth!!.accessToken}\")\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n\n    fun newAuth(oauth: SMOAuth?) {\n        this.oauth = oauth\n        shikimori.saveToken(oauth)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriUtils.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\n\nfun MangaTrack.toShikimoriStatus() = when (status) {\n    Shikimori.READING -> \"watching\"\n    Shikimori.COMPLETED -> \"completed\"\n    Shikimori.ON_HOLD -> \"on_hold\"\n    Shikimori.DROPPED -> \"dropped\"\n    Shikimori.PLAN_TO_READ -> \"planned\"\n    Shikimori.REREADING -> \"rewatching\"\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n\nfun AnimeTrack.toShikimoriStatus() = when (status) {\n    Shikimori.READING -> \"watching\"\n    Shikimori.COMPLETED -> \"completed\"\n    Shikimori.ON_HOLD -> \"on_hold\"\n    Shikimori.DROPPED -> \"dropped\"\n    Shikimori.PLAN_TO_READ -> \"planned\"\n    Shikimori.REREADING -> \"rewatching\"\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n\nfun toTrackStatus(status: String) = when (status) {\n    \"watching\" -> Shikimori.READING\n    \"completed\" -> Shikimori.COMPLETED\n    \"on_hold\" -> Shikimori.ON_HOLD\n    \"dropped\" -> Shikimori.DROPPED\n    \"planned\" -> Shikimori.PLAN_TO_READ\n    \"rewatching\" -> Shikimori.REREADING\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMAddEntryResponse.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SMAddEntryResponse(\n    val id: Long,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMEntry.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori.dto\n\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SMEntry(\n    val id: Long,\n    val name: String,\n    val chapters: Long?,\n    val episodes: Long?,\n    val image: SUEntryCover,\n    val score: Double,\n    val url: String,\n    val status: String,\n    val kind: String,\n    @SerialName(\"aired_on\")\n    val airedOn: String?,\n) {\n    fun toMangaTrack(trackId: Long): MangaTrackSearch {\n        return MangaTrackSearch.create(trackId).apply {\n            remote_id = this@SMEntry.id\n            title = name\n            total_chapters = chapters!!\n            cover_url = ShikimoriApi.BASE_URL + image.preview\n            summary = \"\"\n            score = this@SMEntry.score\n            tracking_url = ShikimoriApi.BASE_URL + url\n            publishing_status = this@SMEntry.status\n            publishing_type = kind\n            start_date = airedOn ?: \"\"\n        }\n    }\n\n    fun toAnimeTrack(trackId: Long): AnimeTrackSearch {\n        return AnimeTrackSearch.create(trackId).apply {\n            remote_id = this@SMEntry.id\n            title = name\n            total_episodes = episodes!!\n            cover_url = ShikimoriApi.BASE_URL + image.preview\n            summary = \"\"\n            score = this@SMEntry.score\n            tracking_url = ShikimoriApi.BASE_URL + url\n            publishing_status = this@SMEntry.status\n            publishing_type = kind\n            start_date = airedOn ?: \"\"\n        }\n    }\n}\n\n@Serializable\ndata class SUEntryCover(\n    val preview: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMOAuth.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SMOAuth(\n    @SerialName(\"access_token\")\n    val accessToken: String,\n    @SerialName(\"token_type\")\n    val tokenType: String,\n    @SerialName(\"created_at\")\n    val createdAt: Long,\n    @SerialName(\"expires_in\")\n    val expiresIn: Long,\n    @SerialName(\"refresh_token\")\n    val refreshToken: String?,\n)\n\n// Access token lives 1 day\nfun SMOAuth.isExpired() = (System.currentTimeMillis() / 1000) > (createdAt + expiresIn - 3600)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMUser.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SMUser(\n    val id: Int,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/dto/SMUserListEntry.kt",
    "content": "package eu.kanade.tachiyomi.data.track.shikimori.dto\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi\nimport eu.kanade.tachiyomi.data.track.shikimori.toTrackStatus\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SMUserListEntry(\n    val id: Long,\n    val chapters: Double,\n    val episodes: Double,\n    val score: Int,\n    val status: String,\n) {\n    fun toMangaTrack(trackId: Long, manga: SMEntry): MangaTrack {\n        return MangaTrack.create(trackId).apply {\n            title = manga.name\n            remote_id = this@SMUserListEntry.id\n            total_chapters = manga.chapters!!\n            library_id = this@SMUserListEntry.id\n            last_chapter_read = this@SMUserListEntry.chapters\n            score = this@SMUserListEntry.score.toDouble()\n            status = toTrackStatus(this@SMUserListEntry.status)\n            tracking_url = ShikimoriApi.BASE_URL + manga.url\n        }\n    }\n\n    fun toAnimeTrack(trackId: Long, anime: SMEntry): AnimeTrack {\n        return AnimeTrack.create(trackId).apply {\n            title = anime.name\n            remote_id = this@SMUserListEntry.id\n            total_episodes = anime.episodes!!\n            library_id = this@SMUserListEntry.id\n            last_episode_seen = this@SMUserListEntry.episodes\n            score = this@SMUserListEntry.score.toDouble()\n            status = toTrackStatus(this@SMUserListEntry.status)\n            tracking_url = ShikimoriApi.BASE_URL + anime.url\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/Simkl.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklOAuth\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack\n\nclass Simkl(id: Long) : BaseTracker(id, \"Simkl\"), AnimeTracker {\n\n    companion object {\n        const val WATCHING = 1L\n        const val COMPLETED = 2L\n        const val ON_HOLD = 3L\n        const val NOT_INTERESTING = 4L\n        const val PLAN_TO_WATCH = 5L\n\n        private val SCORE_LIST = IntRange(0, 10)\n            .map(Int::toString)\n            .toImmutableList()\n    }\n\n    private val json: Json by injectLazy()\n\n    private val interceptor by lazy { SimklInterceptor(this) }\n\n    private val api by lazy { SimklApi(client, interceptor) }\n\n    override fun getScoreList(): ImmutableList<String> = SCORE_LIST\n\n    override fun displayScore(track: DomainAnimeTrack): String {\n        return track.score.toInt().toString()\n    }\n\n    private suspend fun add(track: AnimeTrack): AnimeTrack {\n        return api.addLibAnime(track)\n    }\n\n    override suspend fun update(track: AnimeTrack, didWatchEpisode: Boolean): AnimeTrack {\n        if (track.status != COMPLETED) {\n            if (didWatchEpisode) {\n                if (track.last_episode_seen.toLong() == track.total_episodes && track.total_episodes > 0) {\n                    track.status = COMPLETED\n                } else {\n                    track.status = WATCHING\n                }\n            }\n        }\n\n        return api.updateLibAnime(track)\n    }\n\n    override suspend fun bind(track: AnimeTrack, hasSeenEpisodes: Boolean): AnimeTrack {\n        val remoteTrack = api.findLibAnime(track)\n        return if (remoteTrack != null) {\n            track.copyPersonalFrom(remoteTrack)\n            track.library_id = remoteTrack.library_id\n\n            if (track.status != COMPLETED) {\n                track.status = if (hasSeenEpisodes) WATCHING else track.status\n            }\n\n            update(track)\n        } else {\n            // Set default fields if it's not found in the list\n            track.status = if (hasSeenEpisodes) WATCHING else PLAN_TO_WATCH\n            track.score = 0.0\n            add(track)\n        }\n    }\n\n    override suspend fun searchAnime(query: String): List<AnimeTrackSearch> {\n        return api.searchAnime(query, \"anime\") +\n            api.searchAnime(query, \"tv\") +\n            api.searchAnime(query, \"movie\")\n    }\n\n    override suspend fun refresh(track: AnimeTrack): AnimeTrack {\n        api.findLibAnime(track)?.let { remoteTrack ->\n            track.copyPersonalFrom(remoteTrack)\n            track.total_episodes = remoteTrack.total_episodes\n        }\n        return track\n    }\n\n    override fun getLogo() = R.drawable.ic_tracker_simkl\n\n    override fun getLogoColor() = Color.rgb(0, 0, 0)\n\n    override fun getStatusListAnime(): List<Long> {\n        return listOf(WATCHING, COMPLETED, ON_HOLD, NOT_INTERESTING, PLAN_TO_WATCH)\n    }\n\n    override fun getStatusForAnime(status: Long): StringResource? = when (status) {\n        WATCHING -> AYMR.strings.watching\n        PLAN_TO_WATCH -> AYMR.strings.plan_to_watch\n        COMPLETED -> MR.strings.completed\n        ON_HOLD -> MR.strings.on_hold\n        NOT_INTERESTING -> AYMR.strings.not_interesting\n        else -> null\n    }\n\n    override fun getWatchingStatus(): Long = WATCHING\n\n    override fun getRewatchingStatus(): Long = 0\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override suspend fun login(username: String, password: String) = login(password)\n\n    suspend fun login(code: String) {\n        try {\n            val oauth = api.accessToken(code)\n            interceptor.newAuth(oauth)\n            val user = api.getCurrentUser()\n            saveCredentials(user.toString(), oauth.accessToken)\n        } catch (e: Throwable) {\n            logout()\n        }\n    }\n\n    fun saveToken(oauth: SimklOAuth?) {\n        trackPreferences.trackToken(this).set(json.encodeToString(oauth))\n    }\n\n    fun restoreToken(): SimklOAuth? {\n        return try {\n            json.decodeFromString<SimklOAuth>(trackPreferences.trackToken(this).get())\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    override fun logout() {\n        super.logout()\n        trackPreferences.trackToken(this).delete()\n        interceptor.newAuth(null)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/SimklApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl\n\nimport android.net.Uri\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklOAuth\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklSearchResult\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklSyncResult\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklSyncWatched\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklUser\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.jsonMime\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.addJsonObject\nimport kotlinx.serialization.json.buildJsonArray\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport kotlinx.serialization.json.putJsonArray\nimport kotlinx.serialization.json.putJsonObject\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.injectLazy\n\nclass SimklApi(private val client: OkHttpClient, interceptor: SimklInterceptor) {\n\n    private val json: Json by injectLazy()\n\n    private val authClient = client.newBuilder().addInterceptor(interceptor).build()\n\n    suspend fun addLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            val type = track.tracking_url\n                .substringAfter(\"/\")\n                .substringBefore(\"/\")\n            val mediaType = if (type == \"movies\") \"movies\" else \"shows\"\n            addToList(track, mediaType)\n\n            track\n        }\n    }\n\n    private suspend fun addToList(track: AnimeTrack, mediaType: String) {\n        val payload = buildJsonObject {\n            putJsonArray(mediaType) {\n                addJsonObject {\n                    putJsonObject(\"ids\") {\n                        put(\"simkl\", track.remote_id)\n                    }\n                    put(\"to\", track.toSimklStatus())\n                }\n            }\n        }.toString().toRequestBody(jsonMime)\n        authClient.newCall(\n            POST(\"$API_URL/sync/add-to-list\", body = payload),\n        ).awaitSuccess()\n    }\n\n    private suspend fun updateRating(track: AnimeTrack, mediaType: String) {\n        val payload = buildJsonObject {\n            putJsonArray(mediaType) {\n                addJsonObject {\n                    putJsonObject(\"ids\") {\n                        put(\"simkl\", track.remote_id)\n                    }\n                    put(\"rating\", track.score.toInt())\n                }\n            }\n        }.toString().toRequestBody(jsonMime)\n\n        if (track.score == 0.0) {\n            authClient.newCall(\n                POST(\"$API_URL/sync/ratings/remove\", body = payload),\n            ).awaitSuccess()\n        } else {\n            authClient.newCall(\n                POST(\"$API_URL/sync/ratings\", body = payload),\n            ).awaitSuccess()\n        }\n    }\n\n    private suspend fun updateProgress(track: AnimeTrack) {\n        // first remove\n        authClient.newCall(\n            POST(\"$API_URL/sync/history/remove\", body = buildProgressObject(track, false)),\n        ).awaitSuccess()\n        // then add again\n        authClient.newCall(\n            POST(\"$API_URL/sync/history\", body = buildProgressObject(track, true)),\n        ).awaitSuccess()\n    }\n\n    private fun buildProgressObject(track: AnimeTrack, add: Boolean = true) = buildJsonObject {\n        putJsonArray(\"shows\") {\n            addJsonObject {\n                putJsonObject(\"ids\") {\n                    put(\"simkl\", track.remote_id)\n                }\n                putJsonArray(\"seasons\") {\n                    addJsonObject {\n                        put(\"number\", 1)\n                        if (add) {\n                            putJsonArray(\"episodes\") {\n                                for (epNum in 1..track.last_episode_seen.toInt()) {\n                                    addJsonObject {\n                                        put(\"number\", epNum)\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }.toString().toRequestBody(jsonMime)\n\n    suspend fun updateLibAnime(track: AnimeTrack): AnimeTrack {\n        return withIOContext {\n            // determine media type\n            val type = track.tracking_url\n                .substringAfter(\"/\")\n                .substringBefore(\"/\")\n            val mediaType = if (type == \"movies\") \"movies\" else \"shows\"\n            // update progress only for shows\n            if (type != \"movies\") {\n                updateProgress(track)\n            }\n            // add to correct list\n            addToList(track, mediaType)\n            // update rating\n            updateRating(track, mediaType)\n\n            track\n        }\n    }\n\n    suspend fun searchAnime(search: String, type: String): List<AnimeTrackSearch> {\n        return withIOContext {\n            val searchUrl = \"$API_URL/search/$type\".toUri().buildUpon()\n                .appendQueryParameter(\"q\", search)\n                .appendQueryParameter(\"extended\", \"full\")\n                .appendQueryParameter(\"client_id\", CLIENT_ID)\n                .build()\n            with(json) {\n                client.newCall(GET(searchUrl.toString()))\n                    .awaitSuccess()\n                    .parseAs<List<SimklSearchResult>>()\n                    .map { it.toTrackSearch(type) }\n            }\n        }\n    }\n\n    /**\n     * Checks if the given [track] exists in the user's list and\n     * returns all info about it or null if it isn't found.\n     */\n    suspend fun findLibAnime(track: AnimeTrack): AnimeTrack? {\n        return withIOContext {\n            val payload = buildJsonArray {\n                addJsonObject {\n                    put(\"simkl\", track.remote_id)\n                }\n            }.toString().toRequestBody(jsonMime)\n            val foundAnime = with(json) {\n                authClient.newCall(\n                    POST(\"$API_URL/sync/watched\", body = payload),\n                )\n                    .awaitSuccess()\n                    .parseAs<List<SimklSyncWatched>>()\n                    .firstOrNull() ?: return@withIOContext null\n            }\n\n            if (foundAnime.result != true) return@withIOContext null\n            val lastWatched = foundAnime.lastWatched ?: return@withIOContext null\n            val status = foundAnime.list ?: return@withIOContext null\n            val type = track.tracking_url\n                .substringAfter(\"/\")\n                .substringBefore(\"/\")\n            val queryType = if (type == \"tv\") \"shows\" else type\n            val url = \"$API_URL/sync/all-items/$queryType/$status\".toUri().buildUpon()\n                .appendQueryParameter(\"date_from\", lastWatched)\n                .build()\n\n            val typeName = if (type == \"movies\") \"movie\" else \"show\"\n            val listAnime = with(json) {\n                authClient.newCall(GET(url.toString()))\n                    .awaitSuccess()\n                    .parseAs<SimklSyncResult>()\n                    .getFromType(queryType)\n                    ?.firstOrNull { item ->\n                        item.getFromType(typeName).ids.simkl == track.remote_id\n                    } ?: return@withIOContext null\n            }\n\n            listAnime.toAnimeTrack(typeName, type, status)\n        }\n    }\n\n    fun getCurrentUser(): Int {\n        return runBlocking {\n            with(json) {\n                authClient.newCall(GET(\"$API_URL/users/settings\"))\n                    .awaitSuccess()\n                    .parseAs<SimklUser>()\n                    .account.id\n            }\n        }\n    }\n\n    suspend fun accessToken(code: String): SimklOAuth {\n        return withIOContext {\n            with(json) {\n                client.newCall(accessTokenRequest(code))\n                    .awaitSuccess()\n                    .parseAs()\n            }\n        }\n    }\n\n    private fun accessTokenRequest(code: String) = POST(\n        OAUTH_URL,\n        body = buildJsonObject {\n            put(\"code\", code)\n            put(\"client_id\", CLIENT_ID)\n            put(\"client_secret\", CLIENT_SECRET)\n            put(\"redirect_uri\", REDIRECT_URL)\n            put(\"grant_type\", \"authorization_code\")\n        }.toString().toRequestBody(jsonMime),\n    )\n\n    companion object {\n        const val CLIENT_ID = \"aa62a7da32518aae5d5049a658b87fa4837c3b739e06ed250b315aab6af82b0e\"\n        private const val CLIENT_SECRET = \"2bec9c1d0c00a1e9b0e9e096a71f88d555a6f52da7923df07906df3b21351783\"\n\n        private const val BASE_URL = \"https://simkl.com\"\n        private const val API_URL = \"https://api.simkl.com\"\n        private const val OAUTH_URL = \"$API_URL/oauth/token\"\n        private const val LOGIN_URL = \"$BASE_URL/oauth/authorize\"\n        const val POSTERS_URL = \"https://simkl.in/posters/\"\n\n        private const val REDIRECT_URL = \"aniyomi://simkl-auth\"\n\n        fun authUrl(): Uri =\n            LOGIN_URL.toUri().buildUpon()\n                .appendQueryParameter(\"response_type\", \"code\")\n                .appendQueryParameter(\"client_id\", CLIENT_ID)\n                .appendQueryParameter(\"redirect_uri\", REDIRECT_URL)\n                .build()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/SimklInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl\n\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.track.simkl.SimklApi.Companion.CLIENT_ID\nimport eu.kanade.tachiyomi.data.track.simkl.dto.SimklOAuth\nimport okhttp3.Interceptor\nimport okhttp3.Response\n\nclass SimklInterceptor(val simkl: Simkl) : Interceptor {\n\n    /**\n     * OAuth object used for authenticated requests.\n     */\n    private var oauth: SimklOAuth? = simkl.restoreToken()\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        val oauth = oauth ?: throw Exception(\"Not authenticated with Simkl\")\n\n        // Add the authorization header to the original request.\n        val authRequest = originalRequest.newBuilder()\n            .addHeader(\"Authorization\", \"Bearer ${oauth.accessToken}\")\n            .addHeader(\"simkl-api-key\", CLIENT_ID)\n            .header(\"User-Agent\", \"Aniyomi v${BuildConfig.VERSION_NAME} (${BuildConfig.APPLICATION_ID})\")\n            .build()\n\n        return chain.proceed(authRequest)\n    }\n\n    fun newAuth(oauth: SimklOAuth?) {\n        this.oauth = oauth\n        simkl.saveToken(oauth)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/SimklUtils.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\n\nfun AnimeTrack.toSimklStatus() = when (status) {\n    Simkl.WATCHING -> \"watching\"\n    Simkl.COMPLETED -> \"completed\"\n    Simkl.ON_HOLD -> \"hold\"\n    Simkl.NOT_INTERESTING -> \"notinteresting\"\n    Simkl.PLAN_TO_WATCH -> \"plantowatch\"\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n\nfun toTrackStatus(status: String) = when (status) {\n    \"watching\" -> Simkl.WATCHING\n    \"completed\" -> Simkl.COMPLETED\n    \"hold\" -> Simkl.ON_HOLD\n    \"dropped\", \"notinteresting\" -> Simkl.NOT_INTERESTING\n    \"plantowatch\" -> Simkl.PLAN_TO_WATCH\n    else -> throw NotImplementedError(\"Unknown status: $status\")\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/dto/SimklOAuth.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SimklOAuth(\n    @SerialName(\"access_token\")\n    val accessToken: String,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/dto/SimklSearch.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl.dto\n\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.simkl.SimklApi.Companion.POSTERS_URL\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SimklSearchResult(\n    val ids: SimlkSearchResultIds,\n    @SerialName(\"title_romaji\")\n    val titleRomaji: String?,\n    val title: String?,\n    @SerialName(\"ep_count\")\n    val epCount: Long?,\n    val poster: String?,\n    @SerialName(\"all_titles\")\n    val allTitles: List<String>?,\n    val url: String,\n    val status: String?,\n    val type: String?,\n    val year: Int?,\n) {\n    fun toTrackSearch(fallbackType: String): AnimeTrackSearch {\n        return AnimeTrackSearch.create(TrackerManager.SIMKL).apply {\n            remote_id = ids.simklId\n            title = titleRomaji ?: this@SimklSearchResult.title!!\n            total_episodes = epCount ?: 1\n            cover_url = poster?.let { \"$POSTERS_URL${it}_m.webp\" } ?: \"\"\n            summary = allTitles?.joinToString(\"\\n\", prefix = \"All titles:\\n\") ?: \"\"\n            tracking_url = url\n            publishing_status = this@SimklSearchResult.status ?: \"ended\"\n            publishing_type = type ?: fallbackType\n            start_date = year?.toString() ?: \"\"\n        }\n    }\n}\n\n@Serializable\ndata class SimlkSearchResultIds(\n    @SerialName(\"simkl_id\")\n    val simklId: Long,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/dto/SimklSyncItem.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl.dto\n\nimport eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.simkl.toTrackStatus\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SimklSyncResult(\n    val anime: List<SimklSyncItem>?,\n    val tv: List<SimklSyncItem>?,\n    val movies: List<SimklSyncItem>?,\n) {\n    fun getFromType(type: String): List<SimklSyncItem>? {\n        return when (type) {\n            \"anime\" -> anime\n            \"tv\" -> tv\n            \"movies\" -> movies\n            else -> throw Exception(\"Unknown type: $type\")\n        }\n    }\n}\n\n@Serializable\ndata class SimklSyncItem(\n    val show: SimklSyncResultItem?,\n    val movie: SimklSyncResultItem?,\n    @SerialName(\"total_episodes_count\")\n    val totalEpisodesCount: Long?,\n    @SerialName(\"watched_episodes_count\")\n    val watchedEpisodesCount: Double?,\n    @SerialName(\"user_rating\")\n    val userRating: Int?,\n) {\n    fun toAnimeTrack(typeName: String, type: String, statusString: String): AnimeTrack {\n        val resultData = getFromType(typeName)\n\n        return AnimeTrack.create(TrackerManager.SIMKL).apply {\n            title = resultData.title\n            remote_id = resultData.ids.simkl\n            if (typeName != \"movie\") {\n                total_episodes = totalEpisodesCount!!\n                last_episode_seen = watchedEpisodesCount!!\n            } else {\n                total_episodes = 1\n                last_episode_seen = if (statusString == \"completed\") 1.0 else 0.0\n            }\n            score = userRating?.toDouble() ?: 0.0\n            status = toTrackStatus(statusString)\n            tracking_url = \"/$type/${resultData.ids.simkl}\"\n        }\n    }\n\n    fun getFromType(typeName: String): SimklSyncResultItem {\n        return when (typeName) {\n            \"show\" -> show!!\n            \"movie\" -> movie!!\n            else -> throw Exception(\"Unknown type: $typeName\")\n        }\n    }\n}\n\n@Serializable\ndata class SimklSyncResultItem(\n    val title: String,\n    val ids: SimklSyncResultIds,\n)\n\n@Serializable\ndata class SimklSyncResultIds(\n    val simkl: Long,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/dto/SimklSyncWatched.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SimklSyncWatched(\n    val result: Boolean?,\n    @SerialName(\"last_watched\")\n    val lastWatched: String?,\n    val list: String?,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/dto/SimklUser.kt",
    "content": "package eu.kanade.tachiyomi.data.track.simkl.dto\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SimklUser(\n    val account: SimklUserAccount,\n)\n\n@Serializable\ndata class SimklUserAccount(\n    val id: Int,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/Suwayomi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.suwayomi\n\nimport android.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.BaseTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.source.MangaSource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.domain.entries.manga.model.Manga as DomainManga\nimport tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack\n\nclass Suwayomi(id: Long) : BaseTracker(id, \"Suwayomi\"), EnhancedMangaTracker, MangaTracker {\n\n    val api by lazy { SuwayomiApi(id) }\n\n    override fun getLogo() = R.drawable.ic_tracker_suwayomi\n\n    override fun getLogoColor() = Color.rgb(255, 35, 35) // TODO\n\n    companion object {\n        const val UNREAD = 1L\n        const val READING = 2L\n        const val COMPLETED = 3L\n    }\n\n    override fun getStatusListManga(): List<Long> = listOf(UNREAD, READING, COMPLETED)\n\n    override fun getStatusForManga(status: Long): StringResource? = when (status) {\n        UNREAD -> MR.strings.unread\n        READING -> MR.strings.reading\n        COMPLETED -> MR.strings.completed\n        else -> null\n    }\n\n    override fun getReadingStatus(): Long = READING\n\n    override fun getRereadingStatus(): Long = -1\n\n    override fun getCompletionStatus(): Long = COMPLETED\n\n    override fun getScoreList(): ImmutableList<String> = persistentListOf()\n\n    override fun displayScore(track: DomainTrack): String = \"\"\n\n    override suspend fun update(track: MangaTrack, didReadChapter: Boolean): MangaTrack {\n        if (track.status != COMPLETED) {\n            if (didReadChapter) {\n                if (track.last_chapter_read.toLong() == track.total_chapters && track.total_chapters > 0) {\n                    track.status = COMPLETED\n                } else {\n                    track.status = READING\n                }\n            }\n        }\n\n        return api.updateProgress(track)\n    }\n\n    override suspend fun bind(track: MangaTrack, hasReadChapters: Boolean): MangaTrack {\n        return track\n    }\n\n    override suspend fun searchManga(query: String): List<MangaTrackSearch> {\n        TODO(\"Not yet implemented\")\n    }\n\n    override suspend fun refresh(track: MangaTrack): MangaTrack {\n        val remoteTrack = api.getTrackSearch(track.tracking_url)\n        track.copyPersonalFrom(remoteTrack)\n        track.total_chapters = remoteTrack.total_chapters\n        return track\n    }\n\n    override suspend fun login(username: String, password: String) {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    override fun loginNoop() {\n        saveCredentials(\"user\", \"pass\")\n    }\n\n    override fun getAcceptedSources(): List<String> = listOf(\n        \"eu.kanade.tachiyomi.extension.all.tachidesk.Tachidesk\",\n    )\n\n    override suspend fun match(manga: DomainManga): MangaTrackSearch? =\n        try {\n            api.getTrackSearch(manga.url)\n        } catch (e: Exception) {\n            null\n        }\n\n    override fun isTrackFrom(track: DomainTrack, manga: DomainManga, source: MangaSource?): Boolean = source?.let {\n        accept(\n            it,\n        )\n    } == true\n\n    override fun migrateTrack(track: DomainTrack, manga: DomainManga, newSource: MangaSource): DomainTrack? =\n        if (accept(newSource)) {\n            track.copy(remoteUrl = manga.url)\n        } else {\n            null\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/SuwayomiApi.kt",
    "content": "package eu.kanade.tachiyomi.data.track.suwayomi\n\nimport android.app.Application\nimport android.content.SharedPreferences\nimport eu.kanade.tachiyomi.data.database.models.manga.MangaTrack\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.PUT\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport okhttp3.Credentials\nimport okhttp3.Dns\nimport okhttp3.FormBody\nimport okhttp3.Headers\nimport okhttp3.OkHttpClient\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport java.nio.charset.Charset\nimport java.security.MessageDigest\n\nclass SuwayomiApi(private val trackId: Long) {\n\n    private val network by injectLazy<NetworkHelper>()\n    private val json: Json by injectLazy()\n\n    private val client: OkHttpClient =\n        network.client.newBuilder()\n            .dns(Dns.SYSTEM) // don't use DNS over HTTPS as it breaks IP addressing\n            .build()\n\n    private fun headersBuilder(): Headers.Builder = Headers.Builder().apply {\n        add(\"User-Agent\", network.defaultUserAgentProvider())\n        if (basePassword.isNotEmpty() && baseLogin.isNotEmpty()) {\n            val credentials = Credentials.basic(baseLogin, basePassword)\n            add(\"Authorization\", credentials)\n        }\n    }\n\n    private val headers: Headers by lazy { headersBuilder().build() }\n\n    private val baseUrl by lazy { getPrefBaseUrl() }\n    private val baseLogin by lazy { getPrefBaseLogin() }\n    private val basePassword by lazy { getPrefBasePassword() }\n\n    suspend fun getTrackSearch(trackUrl: String): MangaTrackSearch = withIOContext {\n        val url = try {\n            // test if getting api url or manga id\n            val mangaId = trackUrl.toLong()\n            \"$baseUrl/api/v1/manga/$mangaId\"\n        } catch (e: NumberFormatException) {\n            trackUrl\n        }\n\n        val manga = with(json) {\n            client.newCall(GET(\"$url/full\", headers))\n                .awaitSuccess()\n                .parseAs<MangaDataClass>()\n        }\n\n        MangaTrackSearch.create(trackId).apply {\n            title = manga.title\n            cover_url = \"$url/thumbnail\"\n            summary = manga.description.orEmpty()\n            tracking_url = url\n            total_chapters = manga.chapterCount\n            publishing_status = manga.status\n            last_chapter_read = manga.lastChapterRead?.chapterNumber ?: 0.0\n            status = when (manga.unreadCount) {\n                manga.chapterCount -> Suwayomi.UNREAD\n                0L -> Suwayomi.COMPLETED\n                else -> Suwayomi.READING\n            }\n        }\n    }\n\n    suspend fun updateProgress(track: MangaTrack): MangaTrack {\n        val url = track.tracking_url\n        val chapters = with(json) {\n            client.newCall(GET(\"$url/chapters\", headers))\n                .awaitSuccess()\n                .parseAs<List<ChapterDataClass>>()\n        }\n        val lastChapterIndex = chapters.first { it.chapterNumber == track.last_chapter_read }.index\n\n        client.newCall(\n            PUT(\n                \"$url/chapter/$lastChapterIndex\",\n                headers,\n                FormBody.Builder(Charset.forName(\"utf8\"))\n                    .add(\"markPrevRead\", \"true\")\n                    .add(\"read\", \"true\")\n                    .build(),\n            ),\n        ).awaitSuccess()\n\n        return getTrackSearch(track.tracking_url)\n    }\n\n    private val sourceId by lazy {\n        val key = \"tachidesk/en/1\"\n        val bytes = MessageDigest.getInstance(\"MD5\").digest(key.toByteArray())\n        (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE\n    }\n\n    private val preferences: SharedPreferences by lazy {\n        Injekt.get<Application>().getSharedPreferences(\"source_$sourceId\", 0x0000)\n    }\n\n    private fun getPrefBaseUrl(): String = preferences.getString(ADDRESS_TITLE, ADDRESS_DEFAULT)!!\n    private fun getPrefBaseLogin(): String = preferences.getString(LOGIN_TITLE, LOGIN_DEFAULT)!!\n    private fun getPrefBasePassword(): String = preferences.getString(\n        PASSWORD_TITLE,\n        PASSWORD_DEFAULT,\n    )!!\n}\n\nprivate const val ADDRESS_TITLE = \"Server URL Address\"\nprivate const val ADDRESS_DEFAULT = \"\"\nprivate const val LOGIN_TITLE = \"Login (Basic Auth)\"\nprivate const val LOGIN_DEFAULT = \"\"\nprivate const val PASSWORD_TITLE = \"Password (Basic Auth)\"\nprivate const val PASSWORD_DEFAULT = \"\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/SuwayomiModels.kt",
    "content": "package eu.kanade.tachiyomi.data.track.suwayomi\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class SourceDataClass(\n    val id: String,\n    val name: String,\n    val lang: String,\n    val iconUrl: String,\n\n    /** The Source provides a latest listing */\n    val supportsLatest: Boolean,\n\n    /** The Source implements [ConfigurableSource] */\n    val isConfigurable: Boolean,\n\n    /** The Source class has a @Nsfw annotation */\n    val isNsfw: Boolean,\n\n    /** A nicer version of [name] */\n    val displayName: String,\n)\n\n@Serializable\ndata class MangaDataClass(\n    val id: Int,\n    val sourceId: String,\n\n    val url: String,\n    val title: String,\n    val thumbnailUrl: String?,\n\n    val initialized: Boolean,\n\n    val artist: String?,\n    val author: String?,\n    val description: String?,\n    val genre: List<String>,\n    val status: String,\n    val inLibrary: Boolean,\n    val inLibraryAt: Long,\n    val source: SourceDataClass?,\n\n    val meta: Map<String, String>,\n\n    val realUrl: String?,\n    val lastFetchedAt: Long?,\n    val chaptersLastFetchedAt: Long?,\n\n    val freshData: Boolean,\n    val unreadCount: Long?,\n    val downloadCount: Long?,\n    val chapterCount: Long, // actually is nullable server side, but should be set at this time\n    val lastChapterRead: ChapterDataClass?,\n\n    val age: Long?,\n    val chaptersAge: Long?,\n)\n\n@Serializable\ndata class ChapterDataClass(\n    val id: Int,\n    val url: String,\n    val name: String,\n    val uploadDate: Long,\n    val chapterNumber: Double,\n    val scanlator: String?,\n    val mangaId: Int,\n\n    /** chapter is read */\n    val read: Boolean,\n\n    /** chapter is bookmarked */\n    val bookmarked: Boolean,\n\n    /** last read page, zero means not read/no data */\n    val lastPageRead: Int,\n\n    /** last read page, zero means not read/no data */\n    val lastReadAt: Long,\n\n    /** this chapter's index, starts with 1 */\n    val index: Int,\n\n    /** the date we fist saw this chapter*/\n    val fetchedAt: Long,\n\n    /** is chapter downloaded */\n    val downloaded: Boolean,\n\n    /** used to construct pages in the front-end */\n    val pageCount: Int,\n\n    /** total chapter count, used to calculate if there's a next and prev chapter */\n    val chapterCount: Int?,\n\n    /** used to store client specific values */\n    val meta: Map<String, String>,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt",
    "content": "package eu.kanade.tachiyomi.data.updater\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.util.system.isPreviewBuildType\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.release.interactor.GetApplicationRelease\nimport uy.kohesive.injekt.injectLazy\n\nclass AppUpdateChecker {\n\n    private val getApplicationRelease: GetApplicationRelease by injectLazy()\n\n    suspend fun checkForUpdate(context: Context, forceCheck: Boolean = false): GetApplicationRelease.Result {\n        // Disabling app update checks for older Android versions that we're going to drop support for\n        // if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {\n        //    return GetApplicationRelease.Result.OsTooOld\n        // }\n\n        return withIOContext {\n            val result = getApplicationRelease.await(\n                GetApplicationRelease.Arguments(\n                    isPreviewBuildType,\n                    BuildConfig.COMMIT_COUNT.toInt(),\n                    BuildConfig.VERSION_NAME,\n                    GITHUB_REPO,\n                    forceCheck,\n                ),\n            )\n\n            when (result) {\n                is GetApplicationRelease.Result.NewUpdate -> AppUpdateNotifier(context).promptUpdate(\n                    result.release,\n                )\n                else -> {}\n            }\n\n            result\n        }\n    }\n}\n\nval GITHUB_REPO: String by lazy {\n    if (isPreviewBuildType) {\n        \"aniyomiorg/aniyomi-preview\"\n    } else {\n        \"aniyomiorg/aniyomi\"\n    }\n}\n\nval RELEASE_TAG: String by lazy {\n    if (isPreviewBuildType) {\n        \"r${BuildConfig.COMMIT_COUNT}\"\n    } else {\n        \"v${BuildConfig.VERSION_NAME}\"\n    }\n}\n\nval RELEASE_URL = \"https://github.com/$GITHUB_REPO/releases/tag/$RELEASE_TAG\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt",
    "content": "package eu.kanade.tachiyomi.data.updater\n\nimport android.content.Context\nimport android.content.pm.ServiceInfo\nimport android.os.Build\nimport androidx.work.Constraints\nimport androidx.work.CoroutineWorker\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.ForegroundInfo\nimport androidx.work.NetworkType\nimport androidx.work.OneTimeWorkRequestBuilder\nimport androidx.work.WorkerParameters\nimport androidx.work.workDataOf\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.ProgressListener\nimport eu.kanade.tachiyomi.network.await\nimport eu.kanade.tachiyomi.network.newCachelessCallWithProgress\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.storage.saveTo\nimport eu.kanade.tachiyomi.util.system.workManager\nimport logcat.LogPriority\nimport okhttp3.internal.http2.ErrorCode\nimport okhttp3.internal.http2.StreamResetException\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\nimport kotlin.coroutines.cancellation.CancellationException\n\nclass AppUpdateDownloadJob(private val context: Context, workerParams: WorkerParameters) :\n    CoroutineWorker(context, workerParams) {\n\n    private val notifier = AppUpdateNotifier(context)\n    private val network: NetworkHelper by injectLazy()\n\n    override suspend fun doWork(): Result {\n        val url = inputData.getString(EXTRA_DOWNLOAD_URL)\n        val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.stringResource(MR.strings.app_name)\n\n        if (url.isNullOrEmpty()) {\n            return Result.failure()\n        }\n\n        try {\n            setForeground(getForegroundInfo())\n        } catch (e: IllegalStateException) {\n            logcat(LogPriority.ERROR, e) { \"Not allowed to run on foreground service\" }\n        }\n\n        withIOContext {\n            downloadApk(title, url)\n        }\n\n        return Result.success()\n    }\n\n    override suspend fun getForegroundInfo(): ForegroundInfo {\n        return ForegroundInfo(\n            Notifications.ID_APP_UPDATER,\n            notifier.onDownloadStarted().build(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC\n            } else {\n                0\n            },\n        )\n    }\n\n    /**\n     * Called to start downloading apk of new update\n     *\n     * @param url url location of file\n     */\n    private suspend fun downloadApk(title: String, url: String) {\n        // Show notification download starting.\n        notifier.onDownloadStarted(title)\n\n        val progressListener = object : ProgressListener {\n            // Progress of the download\n            var savedProgress = 0\n\n            // Keep track of the last notification sent to avoid posting too many.\n            var lastTick = 0L\n\n            override fun update(bytesRead: Long, contentLength: Long, done: Boolean) {\n                val progress = (100 * (bytesRead.toFloat() / contentLength)).toInt()\n                val currentTime = System.currentTimeMillis()\n                if (progress > savedProgress && currentTime - 200 > lastTick) {\n                    savedProgress = progress\n                    lastTick = currentTime\n                    notifier.onProgressChange(progress)\n                }\n            }\n        }\n\n        try {\n            // Download the new update.\n            val response = network.client.newCachelessCallWithProgress(GET(url), progressListener)\n                .await()\n\n            // File where the apk will be saved.\n            val apkFile = File(context.externalCacheDir, \"update.apk\")\n\n            if (response.isSuccessful) {\n                response.body.source().saveTo(apkFile)\n            } else {\n                response.close()\n                throw Exception(\"Unsuccessful response\")\n            }\n            notifier.cancel()\n            notifier.promptInstall(apkFile.getUriCompat(context))\n        } catch (e: Exception) {\n            val shouldCancel = e is CancellationException ||\n                (e is StreamResetException && e.errorCode == ErrorCode.CANCEL)\n            if (shouldCancel) {\n                notifier.cancel()\n            } else {\n                notifier.onDownloadError(url)\n            }\n        }\n    }\n\n    companion object {\n        private const val TAG = \"AppUpdateDownload\"\n\n        const val EXTRA_DOWNLOAD_URL = \"DOWNLOAD_URL\"\n        const val EXTRA_DOWNLOAD_TITLE = \"DOWNLOAD_TITLE\"\n\n        fun start(context: Context, url: String, title: String? = null) {\n            val constraints = Constraints(\n                requiredNetworkType = NetworkType.CONNECTED,\n            )\n\n            val request = OneTimeWorkRequestBuilder<AppUpdateDownloadJob>()\n                .setConstraints(constraints)\n                .addTag(TAG)\n                .setInputData(\n                    workDataOf(\n                        EXTRA_DOWNLOAD_URL to url,\n                        EXTRA_DOWNLOAD_TITLE to title,\n                    ),\n                )\n                .build()\n\n            context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)\n        }\n\n        fun stop(context: Context) {\n            context.workManager.cancelUniqueWork(TAG)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt",
    "content": "package eu.kanade.tachiyomi.data.updater\n\nimport android.annotation.SuppressLint\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport androidx.core.app.NotificationCompat\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.release.model.Release\nimport tachiyomi.i18n.MR\n\ninternal class AppUpdateNotifier(private val context: Context) {\n\n    private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_APP_UPDATE)\n\n    /**\n     * Call to show notification.\n     *\n     * @param id id of the notification channel.\n     */\n    private fun NotificationCompat.Builder.show(id: Int = Notifications.ID_APP_UPDATER) {\n        context.notify(id, build())\n    }\n\n    fun cancel() {\n        NotificationReceiver.dismissNotification(context, Notifications.ID_APP_UPDATER)\n    }\n\n    @SuppressLint(\"LaunchActivityFromNotification\")\n    fun promptUpdate(release: Release) {\n        val updateIntent = NotificationReceiver.downloadAppUpdatePendingBroadcast(\n            context,\n            release.downloadLink,\n            release.version,\n        )\n\n        val releaseIntent = Intent(Intent.ACTION_VIEW, release.releaseLink.toUri()).run {\n            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP\n            PendingIntent.getActivity(\n                context,\n                release.hashCode(),\n                this,\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,\n            )\n        }\n\n        with(notificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available))\n            setContentText(release.version)\n            setSmallIcon(android.R.drawable.stat_sys_download_done)\n            setContentIntent(updateIntent)\n\n            clearActions()\n            addAction(\n                android.R.drawable.stat_sys_download_done,\n                context.stringResource(MR.strings.action_download),\n                updateIntent,\n            )\n            addAction(\n                R.drawable.ic_info_24dp,\n                context.stringResource(MR.strings.whats_new),\n                releaseIntent,\n            )\n        }\n        notificationBuilder.show()\n    }\n\n    /**\n     * Call when apk download starts.\n     *\n     * @param title tile of notification.\n     */\n    fun onDownloadStarted(title: String? = null): NotificationCompat.Builder {\n        with(notificationBuilder) {\n            title?.let { setContentTitle(title) }\n            setContentText(\n                context.stringResource(MR.strings.update_check_notification_download_in_progress),\n            )\n            setSmallIcon(android.R.drawable.stat_sys_download)\n            setOngoing(true)\n\n            clearActions()\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel),\n                NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context),\n            )\n        }\n        notificationBuilder.show()\n        return notificationBuilder\n    }\n\n    /**\n     * Call when apk download progress changes.\n     *\n     * @param progress progress of download (xx%/100).\n     */\n    fun onProgressChange(progress: Int) {\n        with(notificationBuilder) {\n            setProgress(100, progress, false)\n            setOnlyAlertOnce(true)\n        }\n        notificationBuilder.show()\n    }\n\n    /**\n     * Call when apk download is finished.\n     *\n     * @param uri path location of apk.\n     */\n    fun promptInstall(uri: Uri) {\n        val installIntent = NotificationHandler.installApkPendingActivity(context, uri)\n        with(notificationBuilder) {\n            setContentText(context.stringResource(MR.strings.update_check_notification_download_complete))\n            setSmallIcon(android.R.drawable.stat_sys_download_done)\n            setOnlyAlertOnce(false)\n            setProgress(0, 0, false)\n            setContentIntent(installIntent)\n            setOngoing(true)\n\n            clearActions()\n            addAction(\n                R.drawable.ic_system_update_alt_white_24dp,\n                context.stringResource(MR.strings.action_install),\n                installIntent,\n            )\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel),\n                NotificationReceiver.dismissNotificationPendingBroadcast(\n                    context,\n                    Notifications.ID_APP_UPDATE_PROMPT,\n                ),\n            )\n        }\n        notificationBuilder.show(Notifications.ID_APP_UPDATE_PROMPT)\n    }\n\n    /**\n     * Call when apk download throws a error\n     *\n     * @param url web location of apk to download.\n     */\n    fun onDownloadError(url: String) {\n        with(notificationBuilder) {\n            setContentText(context.stringResource(MR.strings.update_check_notification_download_error))\n            setSmallIcon(R.drawable.ic_warning_white_24dp)\n            setOnlyAlertOnce(false)\n            setProgress(0, 0, false)\n\n            clearActions()\n            addAction(\n                R.drawable.ic_refresh_24dp,\n                context.stringResource(MR.strings.action_retry),\n                NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url),\n            )\n            addAction(\n                R.drawable.ic_close_24dp,\n                context.stringResource(MR.strings.action_cancel),\n                NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_ERROR),\n            )\n        }\n        notificationBuilder.show(Notifications.ID_APP_UPDATE_ERROR)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt",
    "content": "package eu.kanade.tachiyomi.di\n\nimport android.app.Application\nimport android.os.Build\nimport androidx.core.content.ContextCompat\nimport androidx.sqlite.db.SupportSQLiteDatabase\nimport androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory\nimport app.cash.sqldelight.driver.android.AndroidSqliteDriver\nimport data.History\nimport data.Mangas\nimport dataanime.Animehistory\nimport dataanime.Animes\nimport eu.kanade.domain.track.anime.store.DelayedAnimeTrackingStore\nimport eu.kanade.domain.track.manga.store.DelayedMangaTrackingStore\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.cache.ChapterCache\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadProvider\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadProvider\nimport eu.kanade.tachiyomi.data.saver.ImageSaver\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.network.JavaScriptEngine\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.source.anime.AndroidAnimeSourceManager\nimport eu.kanade.tachiyomi.source.manga.AndroidMangaSourceManager\nimport eu.kanade.tachiyomi.ui.player.ExternalIntents\nimport io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.protobuf.ProtoBuf\nimport nl.adaptivity.xmlutil.XmlDeclMode.Charset\nimport nl.adaptivity.xmlutil.core.XmlVersion\nimport nl.adaptivity.xmlutil.serialization.XML\nimport tachiyomi.core.common.storage.AndroidStorageFolderProvider\nimport tachiyomi.data.AnimeUpdateStrategyColumnAdapter\nimport tachiyomi.data.Database\nimport tachiyomi.data.DateColumnAdapter\nimport tachiyomi.data.FetchTypeColumnAdapter\nimport tachiyomi.data.MangaUpdateStrategyColumnAdapter\nimport tachiyomi.data.StringListColumnAdapter\nimport tachiyomi.data.handlers.anime.AndroidAnimeDatabaseHandler\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.data.handlers.manga.AndroidMangaDatabaseHandler\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.mi.data.AnimeDatabase\nimport tachiyomi.source.local.entries.anime.LocalAnimeFetchTypeManager\nimport tachiyomi.source.local.image.anime.LocalAnimeBackgroundManager\nimport tachiyomi.source.local.image.anime.LocalAnimeCoverManager\nimport tachiyomi.source.local.image.anime.LocalEpisodeThumbnailManager\nimport tachiyomi.source.local.image.manga.LocalMangaCoverManager\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport tachiyomi.source.local.io.manga.LocalMangaSourceFileSystem\nimport uy.kohesive.injekt.api.InjektModule\nimport uy.kohesive.injekt.api.InjektRegistrar\nimport uy.kohesive.injekt.api.addSingleton\nimport uy.kohesive.injekt.api.addSingletonFactory\nimport uy.kohesive.injekt.api.get\n\nclass AppModule(val app: Application) : InjektModule {\n\n    override fun InjektRegistrar.registerInjectables() {\n        addSingleton(app)\n\n        val sqlDriverManga = AndroidSqliteDriver(\n            schema = Database.Schema,\n            context = app,\n            name = \"tachiyomi.db\",\n            factory = if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                // Support database inspector in Android Studio\n                FrameworkSQLiteOpenHelperFactory()\n            } else {\n                RequerySQLiteOpenHelperFactory()\n            },\n            callback = object : AndroidSqliteDriver.Callback(Database.Schema) {\n                override fun onOpen(db: SupportSQLiteDatabase) {\n                    super.onOpen(db)\n                    setPragma(db, \"foreign_keys = ON\")\n                    setPragma(db, \"journal_mode = WAL\")\n                    setPragma(db, \"synchronous = NORMAL\")\n                }\n                private fun setPragma(db: SupportSQLiteDatabase, pragma: String) {\n                    val cursor = db.query(\"PRAGMA $pragma\")\n                    cursor.moveToFirst()\n                    cursor.close()\n                }\n            },\n        )\n\n        val sqlDriverAnime = AndroidSqliteDriver(\n            schema = AnimeDatabase.Schema,\n            context = app,\n            name = \"tachiyomi.animedb\",\n            factory = if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                // Support database inspector in Android Studio\n                FrameworkSQLiteOpenHelperFactory()\n            } else {\n                RequerySQLiteOpenHelperFactory()\n            },\n            callback = object : AndroidSqliteDriver.Callback(AnimeDatabase.Schema) {\n                override fun onOpen(db: SupportSQLiteDatabase) {\n                    super.onOpen(db)\n                    setPragma(db, \"foreign_keys = ON\")\n                    setPragma(db, \"journal_mode = WAL\")\n                    setPragma(db, \"synchronous = NORMAL\")\n                }\n                private fun setPragma(db: SupportSQLiteDatabase, pragma: String) {\n                    val cursor = db.query(\"PRAGMA $pragma\")\n                    cursor.moveToFirst()\n                    cursor.close()\n                }\n            },\n        )\n\n        addSingletonFactory {\n            Database(\n                driver = sqlDriverManga,\n                historyAdapter = History.Adapter(\n                    last_readAdapter = DateColumnAdapter,\n                ),\n                mangasAdapter = Mangas.Adapter(\n                    genreAdapter = StringListColumnAdapter,\n                    update_strategyAdapter = MangaUpdateStrategyColumnAdapter,\n                ),\n            )\n        }\n\n        addSingletonFactory {\n            AnimeDatabase(\n                driver = sqlDriverAnime,\n                animehistoryAdapter = Animehistory.Adapter(\n                    last_seenAdapter = DateColumnAdapter,\n                ),\n                animesAdapter = Animes.Adapter(\n                    genreAdapter = StringListColumnAdapter,\n                    update_strategyAdapter = AnimeUpdateStrategyColumnAdapter,\n                    fetch_typeAdapter = FetchTypeColumnAdapter,\n                ),\n            )\n        }\n\n        addSingletonFactory<MangaDatabaseHandler> {\n            AndroidMangaDatabaseHandler(\n                get(),\n                sqlDriverManga,\n            )\n        }\n\n        addSingletonFactory<AnimeDatabaseHandler> {\n            AndroidAnimeDatabaseHandler(\n                get(),\n                sqlDriverAnime,\n            )\n        }\n\n        addSingletonFactory {\n            Json {\n                ignoreUnknownKeys = true\n                explicitNulls = false\n            }\n        }\n        addSingletonFactory {\n            XML {\n                defaultPolicy {\n                    ignoreUnknownChildren()\n                }\n                autoPolymorphic = true\n                xmlDeclMode = Charset\n                indent = 2\n                xmlVersion = XmlVersion.XML10\n            }\n        }\n        addSingletonFactory<ProtoBuf> {\n            ProtoBuf\n        }\n\n        addSingletonFactory { ChapterCache(app, get()) }\n\n        addSingletonFactory { MangaCoverCache(app) }\n        addSingletonFactory { AnimeCoverCache(app) }\n        addSingletonFactory { AnimeBackgroundCache(app) }\n\n        addSingletonFactory { NetworkHelper(app, get()) }\n        addSingletonFactory { JavaScriptEngine(app) }\n\n        addSingletonFactory<MangaSourceManager> { AndroidMangaSourceManager(app, get(), get()) }\n        addSingletonFactory<AnimeSourceManager> { AndroidAnimeSourceManager(app, get(), get()) }\n\n        addSingletonFactory { MangaExtensionManager(app) }\n        addSingletonFactory { AnimeExtensionManager(app) }\n\n        addSingletonFactory { MangaDownloadProvider(app) }\n        addSingletonFactory { MangaDownloadManager(app) }\n        addSingletonFactory { MangaDownloadCache(app) }\n\n        addSingletonFactory { AnimeDownloadProvider(app) }\n        addSingletonFactory { AnimeDownloadManager(app) }\n        addSingletonFactory { AnimeDownloadCache(app) }\n\n        addSingletonFactory { TrackerManager(app) }\n        addSingletonFactory { DelayedAnimeTrackingStore(app) }\n        addSingletonFactory { DelayedMangaTrackingStore(app) }\n\n        addSingletonFactory { ImageSaver(app) }\n\n        addSingletonFactory { AndroidStorageFolderProvider(app) }\n\n        addSingletonFactory { LocalMangaSourceFileSystem(get()) }\n        addSingletonFactory { LocalMangaCoverManager(app, get()) }\n\n        addSingletonFactory { LocalAnimeSourceFileSystem(get()) }\n        addSingletonFactory { LocalAnimeBackgroundManager(app, get()) }\n        addSingletonFactory { LocalAnimeCoverManager(app, get()) }\n        addSingletonFactory { LocalAnimeFetchTypeManager(app, get()) }\n        addSingletonFactory { LocalEpisodeThumbnailManager(app, get()) }\n\n        addSingletonFactory { StorageManager(app, get()) }\n\n        addSingletonFactory { ExternalIntents() }\n\n        // Asynchronously init expensive components for a faster cold start\n        ContextCompat.getMainExecutor(app).execute {\n            get<NetworkHelper>()\n\n            get<MangaSourceManager>()\n            get<AnimeSourceManager>()\n\n            get<Database>()\n            get<AnimeDatabase>()\n\n            get<MangaDownloadManager>()\n            get<AnimeDownloadManager>()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt",
    "content": "package eu.kanade.tachiyomi.di\n\nimport android.app.Application\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.network.NetworkPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.AdvancedPlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.DecoderPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.util.system.isDebugBuildType\nimport tachiyomi.core.common.preference.AndroidPreferenceStore\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.storage.AndroidStorageFolderProvider\nimport tachiyomi.domain.backup.service.BackupPreferences\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.storage.service.StoragePreferences\nimport uy.kohesive.injekt.api.InjektModule\nimport uy.kohesive.injekt.api.InjektRegistrar\nimport uy.kohesive.injekt.api.addSingletonFactory\nimport uy.kohesive.injekt.api.get\n\nclass PreferenceModule(val app: Application) : InjektModule {\n    override fun InjektRegistrar.registerInjectables() {\n        addSingletonFactory<PreferenceStore> {\n            AndroidPreferenceStore(app)\n        }\n        addSingletonFactory {\n            NetworkPreferences(\n                preferenceStore = get(),\n                verboseLogging = isDebugBuildType,\n            )\n        }\n        addSingletonFactory {\n            SourcePreferences(get())\n        }\n        addSingletonFactory {\n            SecurityPreferences(get())\n        }\n        addSingletonFactory {\n            LibraryPreferences(get())\n        }\n        addSingletonFactory {\n            ReaderPreferences(get())\n        }\n        addSingletonFactory {\n            PlayerPreferences(get())\n        }\n        addSingletonFactory {\n            GesturePreferences(get())\n        }\n        addSingletonFactory {\n            DecoderPreferences(get())\n        }\n        addSingletonFactory {\n            SubtitlePreferences(get())\n        }\n        addSingletonFactory {\n            AudioPreferences(get())\n        }\n        addSingletonFactory {\n            AdvancedPlayerPreferences(get())\n        }\n        addSingletonFactory {\n            TrackPreferences(get())\n        }\n        addSingletonFactory {\n            DownloadPreferences(get())\n        }\n        addSingletonFactory {\n            BackupPreferences(get())\n        }\n        addSingletonFactory {\n            StoragePreferences(\n                folderProvider = get<AndroidStorageFolderProvider>(),\n                preferenceStore = get(),\n            )\n        }\n        addSingletonFactory {\n            UiPreferences(get())\n        }\n        addSingletonFactory {\n            BasePreferences(app, get())\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateNotifier.kt",
    "content": "package eu.kanade.tachiyomi.extension\n\nimport android.content.Context\nimport androidx.core.app.NotificationCompat\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.notify\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass ExtensionUpdateNotifier(\n    private val context: Context,\n    private val securityPreferences: SecurityPreferences = Injekt.get(),\n) {\n\n    fun promptUpdates(names: List<String>, anime: Boolean = false) {\n        context.notify(\n            Notifications.ID_UPDATES_TO_EXTS,\n            Notifications.CHANNEL_EXTENSIONS_UPDATE,\n        ) {\n            setContentTitle(\n                context.resources.getQuantityString(\n                    R.plurals.update_check_notification_ext_updates,\n                    names.size,\n                    names.size,\n                ),\n            )\n            if (!securityPreferences.hideNotificationContent().get()) {\n                val extNames = names.joinToString(\", \")\n                setContentText(extNames)\n                setStyle(NotificationCompat.BigTextStyle().bigText(extNames))\n            }\n            setSmallIcon(R.drawable.ic_extension_24dp)\n            if (!anime) {\n                setContentIntent(NotificationReceiver.openExtensionsPendingActivity(context))\n            } else {\n                setContentIntent(NotificationReceiver.openAnimeExtensionsPendingActivity(context))\n            }\n            setAutoCancel(true)\n        }\n    }\n\n    fun dismiss() {\n        context.cancelNotification(Notifications.ID_UPDATES_TO_EXTS)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/InstallStep.kt",
    "content": "package eu.kanade.tachiyomi.extension\n\nenum class InstallStep {\n    Idle,\n    Pending,\n    Downloading,\n    Installing,\n    Installed,\n    Error,\n    ;\n\n    fun isCompleted(): Boolean {\n        return this == Installed || this == Error || this == Idle\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/AnimeExtensionManager.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport eu.kanade.domain.extension.anime.interactor.TrustAnimeExtension\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.ExtensionUpdateNotifier\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.anime.api.AnimeExtensionApi\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeLoadResult\nimport eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionInstallReceiver\nimport eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionInstaller\nimport eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionLoader\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.emptyFlow\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.Locale\n\n/**\n * The manager of anime extensions installed as another apk which extend the available sources. It handles\n * the retrieval of remotely available anime extensions as well as installing, updating and removing them.\n * To avoid malicious distribution, every anime extension must be signed and it will only be loaded if its\n * signature is trusted, otherwise the user will be prompted with a warning to trust it before being\n * loaded.\n *\n * @param context The application context.\n * @param preferences The application preferences.\n */\nclass AnimeExtensionManager(\n    private val context: Context,\n    private val preferences: SourcePreferences = Injekt.get(),\n    private val trustExtension: TrustAnimeExtension = Injekt.get(),\n) {\n\n    val scope = CoroutineScope(SupervisorJob())\n\n    private val _isInitialized = MutableStateFlow(false)\n    val isInitialized: StateFlow<Boolean> = _isInitialized.asStateFlow()\n\n    /**\n     * API where all the available anime extensions can be found.\n     */\n    private val api = AnimeExtensionApi()\n\n    /**\n     * The installer which installs, updates and uninstalls the anime extensions.\n     */\n    private val installer by lazy { AnimeExtensionInstaller(context) }\n\n    private val iconMap = mutableMapOf<String, Drawable>()\n\n    private val installedExtensionsMapFlow = MutableStateFlow(emptyMap<String, AnimeExtension.Installed>())\n    val installedExtensionsFlow = installedExtensionsMapFlow.mapExtensions(scope)\n\n    private val availableExtensionsMapFlow = MutableStateFlow(emptyMap<String, AnimeExtension.Available>())\n    val availableExtensionsFlow = availableExtensionsMapFlow.mapExtensions(scope)\n\n    private val untrustedExtensionsMapFlow = MutableStateFlow(emptyMap<String, AnimeExtension.Untrusted>())\n    val untrustedExtensionsFlow = untrustedExtensionsMapFlow.mapExtensions(scope)\n\n    init {\n        initAnimeExtensions()\n        AnimeExtensionInstallReceiver(AnimeInstallationListener()).register(context)\n    }\n\n    private var subLanguagesEnabledOnFirstRun = preferences.enabledLanguages().isSet()\n\n    fun getExtensionPackage(sourceId: Long): String? {\n        return installedExtensionsFlow.value.find { extension ->\n            extension.sources.any { it.id == sourceId }\n        }\n            ?.pkgName\n    }\n\n    fun getExtensionPackageAsFlow(sourceId: Long): Flow<String?> {\n        return installedExtensionsFlow.map { extensions ->\n            extensions.find { extension ->\n                extension.sources.any { it.id == sourceId }\n            }\n                ?.pkgName\n        }\n    }\n\n    fun getAppIconForSource(sourceId: Long): Drawable? {\n        val pkgName = installedExtensionsMapFlow.value.values\n            .find { ext ->\n                ext.sources.any { it.id == sourceId }\n            }\n            ?.pkgName\n            ?: return null\n\n        return iconMap[pkgName] ?: iconMap.getOrPut(pkgName) {\n            AnimeExtensionLoader.getAnimeExtensionPackageInfoFromPkgName(context, pkgName)!!.applicationInfo!!\n                .loadIcon(context.packageManager)\n        }\n    }\n\n    private var availableAnimeExtensionsSourcesData: Map<Long, StubAnimeSource> = emptyMap()\n\n    private fun setupAvailableAnimeExtensionsSourcesDataMap(\n        animeextensions: List<AnimeExtension.Available>,\n    ) {\n        if (animeextensions.isEmpty()) return\n        availableAnimeExtensionsSourcesData = animeextensions\n            .flatMap { ext -> ext.sources.map { it.toStubSource() } }\n            .associateBy { it.id }\n    }\n\n    fun getSourceData(id: Long) = availableAnimeExtensionsSourcesData[id]\n\n    /**\n     * Loads and registers the installed animeextensions.\n     */\n    private fun initAnimeExtensions() {\n        val animeextensions = AnimeExtensionLoader.loadExtensions(context)\n\n        installedExtensionsMapFlow.value = animeextensions\n            .filterIsInstance<AnimeLoadResult.Success>()\n            .associate { it.extension.pkgName to it.extension }\n\n        untrustedExtensionsMapFlow.value = animeextensions\n            .filterIsInstance<AnimeLoadResult.Untrusted>()\n            .associate { it.extension.pkgName to it.extension }\n\n        _isInitialized.value = true\n    }\n\n    /**\n     * Finds the available anime extensions in the [api] and updates [availableExtensionsMapFlow].\n     */\n    suspend fun findAvailableExtensions() {\n        val extensions: List<AnimeExtension.Available> = try {\n            api.findExtensions()\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            withUIContext { context.toast(MR.strings.extension_api_error) }\n            emptyList()\n        }\n\n        enableAdditionalSubLanguages(extensions)\n\n        availableExtensionsMapFlow.value = extensions.associateBy { it.pkgName }\n        updatedInstalledAnimeExtensionsStatuses(extensions)\n        setupAvailableAnimeExtensionsSourcesDataMap(extensions)\n    }\n\n    /**\n     * Enables the additional sub-languages in the app first run. This addresses\n     * the issue where users still need to enable some specific languages even when\n     * the device language is inside that major group. As an example, if a user\n     * has a zh device language, the app will also enable zh-Hans and zh-Hant.\n     *\n     * If the user have already changed the enabledLanguages preference value once,\n     * the new languages will not be added to respect the user enabled choices.\n     */\n    private fun enableAdditionalSubLanguages(animeextensions: List<AnimeExtension.Available>) {\n        if (subLanguagesEnabledOnFirstRun || animeextensions.isEmpty()) {\n            return\n        }\n\n        // Use the source lang as some aren't present on the animeextension level.\n        val availableLanguages = animeextensions\n            .flatMap(AnimeExtension.Available::sources)\n            .distinctBy(AnimeExtension.Available.AnimeSource::lang)\n            .map(AnimeExtension.Available.AnimeSource::lang)\n\n        val deviceLanguage = Locale.getDefault().language\n        val defaultLanguages = preferences.enabledLanguages().defaultValue()\n        val languagesToEnable = availableLanguages.filter {\n            it != deviceLanguage && it.startsWith(deviceLanguage)\n        }\n\n        preferences.enabledLanguages().set(defaultLanguages + languagesToEnable)\n        subLanguagesEnabledOnFirstRun = true\n    }\n\n    /**\n     * Sets the update field of the installed animeextensions with the given [availableExtensions].\n     *\n     * @param availableExtensions The list of animeextensions given by the [api].\n     */\n    private fun updatedInstalledAnimeExtensionsStatuses(\n        availableExtensions: List<AnimeExtension.Available>,\n    ) {\n        if (availableExtensions.isEmpty()) {\n            preferences.animeExtensionUpdatesCount().set(0)\n            return\n        }\n\n        val installedExtensionsMap = installedExtensionsMapFlow.value.toMutableMap()\n        var changed = false\n\n        for ((pkgName, extension) in installedExtensionsMap) {\n            val availableExt = availableExtensions.find { it.pkgName == pkgName }\n\n            if (availableExt == null && !extension.isObsolete) {\n                installedExtensionsMap[pkgName] = extension.copy(isObsolete = true)\n                changed = true\n            } else if (availableExt != null) {\n                val hasUpdate = extension.updateExists(availableExt)\n                if (extension.hasUpdate != hasUpdate) {\n                    installedExtensionsMap[pkgName] = extension.copy(\n                        hasUpdate = hasUpdate,\n                        repoUrl = availableExt.repoUrl,\n                    )\n                } else {\n                    installedExtensionsMap[pkgName] = extension.copy(\n                        repoUrl = availableExt.repoUrl,\n                    )\n                }\n                changed = true\n            }\n        }\n        if (changed) {\n            installedExtensionsMapFlow.value = installedExtensionsMap\n        }\n        updatePendingUpdatesCount()\n    }\n\n    /**\n     * Returns a flow of the installation process for the given anime extension. It will complete\n     * once the anime extension is installed or throws an error. The process will be canceled if\n     * unsubscribed before its completion.\n     *\n     * @param extension The anime extension to be installed.\n     */\n    fun installExtension(extension: AnimeExtension.Available): Flow<InstallStep> {\n        return installer.downloadAndInstall(api.getApkUrl(extension), extension)\n    }\n\n    /**\n     * Returns a flow of the installation process for the given anime extension. It will complete\n     * once the anime extension is updated or throws an error. The process will be canceled if\n     * unsubscribed before its completion.\n     *\n     * @param extension The anime extension to be updated.\n     */\n    fun updateExtension(extension: AnimeExtension.Installed): Flow<InstallStep> {\n        val availableExt = availableExtensionsMapFlow.value[extension.pkgName] ?: return emptyFlow()\n        return installExtension(availableExt)\n    }\n\n    fun cancelInstallUpdateExtension(extension: AnimeExtension) {\n        installer.cancelInstall(extension.pkgName)\n    }\n\n    /**\n     * Sets to \"installing\" status of an anime extension installation.\n     *\n     * @param downloadId The id of the download.\n     */\n    fun setInstalling(downloadId: Long) {\n        installer.updateInstallStep(downloadId, InstallStep.Installing)\n    }\n\n    fun updateInstallStep(downloadId: Long, step: InstallStep) {\n        installer.updateInstallStep(downloadId, step)\n    }\n\n    /**\n     * Uninstalls the anime extension that matches the given package name.\n     *\n     * @param extension The extension to uninstall.\n     */\n    fun uninstallExtension(extension: AnimeExtension) {\n        installer.uninstallApk(extension.pkgName)\n    }\n\n    /**\n     * Adds the given extension to the list of trusted extensions. It also loads in background the\n     * now trusted extensions.\n     *\n     * @param extension the extension to trust\n     */\n    suspend fun trust(extension: AnimeExtension.Untrusted) {\n        untrustedExtensionsMapFlow.value[extension.pkgName] ?: return\n\n        trustExtension.trust(extension.pkgName, extension.versionCode, extension.signatureHash)\n\n        untrustedExtensionsMapFlow.value -= extension.pkgName\n\n        AnimeExtensionLoader.loadExtensionFromPkgName(context, extension.pkgName)\n            .let { it as? AnimeLoadResult.Success }\n            ?.let { registerNewExtension(it.extension) }\n    }\n\n    /**\n     * Registers the given anime extension in this and the source managers.\n     *\n     * @param extension The anime extension to be registered.\n     */\n    private fun registerNewExtension(extension: AnimeExtension.Installed) {\n        installedExtensionsMapFlow.value += extension\n    }\n\n    /**\n     * Registers the given updated anime extension in this and the source managers previously removing\n     * the outdated ones.\n     *\n     * @param extension The anime extension to be registered.\n     */\n    private fun registerUpdatedExtension(extension: AnimeExtension.Installed) {\n        installedExtensionsMapFlow.value += extension\n    }\n\n    /**\n     * Unregisters the animeextension in this and the source managers given its package name. Note this\n     * method is called for every uninstalled application in the system.\n     *\n     * @param pkgName The package name of the uninstalled application.\n     */\n    private fun unregisterAnimeExtension(pkgName: String) {\n        installedExtensionsMapFlow.value -= pkgName\n        untrustedExtensionsMapFlow.value -= pkgName\n    }\n\n    /**\n     * Listener which receives events of the anime extensions being installed, updated or removed.\n     */\n    private inner class AnimeInstallationListener : AnimeExtensionInstallReceiver.Listener {\n\n        override fun onExtensionInstalled(extension: AnimeExtension.Installed) {\n            registerNewExtension(extension.withUpdateCheck())\n            updatePendingUpdatesCount()\n        }\n\n        override fun onExtensionUpdated(extension: AnimeExtension.Installed) {\n            registerUpdatedExtension(extension.withUpdateCheck())\n            updatePendingUpdatesCount()\n        }\n\n        override fun onExtensionUntrusted(extension: AnimeExtension.Untrusted) {\n            installedExtensionsMapFlow.value -= extension.pkgName\n            untrustedExtensionsMapFlow.value += extension\n            updatePendingUpdatesCount()\n        }\n\n        override fun onPackageUninstalled(pkgName: String) {\n            AnimeExtensionLoader.uninstallPrivateExtension(context, pkgName)\n            unregisterAnimeExtension(pkgName)\n            updatePendingUpdatesCount()\n        }\n    }\n\n    /**\n     * AnimeExtension method to set the update field of an installed anime extension.\n     */\n    private fun AnimeExtension.Installed.withUpdateCheck(): AnimeExtension.Installed {\n        return if (updateExists()) {\n            copy(hasUpdate = true)\n        } else {\n            this\n        }\n    }\n\n    private fun AnimeExtension.Installed.updateExists(\n        availableExtension: AnimeExtension.Available? = null,\n    ): Boolean {\n        val availableExt = availableExtension\n            ?: availableExtensionsMapFlow.value[pkgName]\n            ?: return false\n\n        return (availableExt.versionCode > versionCode || availableExt.libVersion > libVersion)\n    }\n\n    private fun updatePendingUpdatesCount() {\n        val pendingUpdateCount = installedExtensionsMapFlow.value.values.count { it.hasUpdate }\n        preferences.animeExtensionUpdatesCount().set(pendingUpdateCount)\n        if (pendingUpdateCount == 0) {\n            ExtensionUpdateNotifier(context).dismiss()\n        }\n    }\n\n    private operator fun <T : AnimeExtension> Map<String, T>.plus(extension: T) = plus(extension.pkgName to extension)\n\n    private fun <T : AnimeExtension> StateFlow<Map<String, T>>.mapExtensions(\n        scope: CoroutineScope,\n    ): StateFlow<List<T>> {\n        return map { it.values.toList() }.stateIn(scope, SharingStarted.Lazily, value.values.toList())\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/api/AnimeExtensionApi.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.api\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.extension.ExtensionUpdateNotifier\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeLoadResult\nimport eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionLoader\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport mihon.domain.extensionrepo.anime.interactor.GetAnimeExtensionRepo\nimport mihon.domain.extensionrepo.anime.interactor.UpdateAnimeExtensionRepo\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport java.time.Instant\nimport kotlin.time.Duration.Companion.days\n\ninternal class AnimeExtensionApi {\n\n    private val networkService: NetworkHelper by injectLazy()\n    private val preferenceStore: PreferenceStore by injectLazy()\n    private val getExtensionRepo: GetAnimeExtensionRepo by injectLazy()\n    private val updateExtensionRepo: UpdateAnimeExtensionRepo by injectLazy()\n    private val animeExtensionManager: AnimeExtensionManager by injectLazy()\n    private val json: Json by injectLazy()\n\n    private val lastExtCheck: Preference<Long> by lazy {\n        preferenceStore.getLong(\"last_ext_check\", 0)\n    }\n\n    suspend fun findExtensions(): List<AnimeExtension.Available> {\n        return withIOContext {\n            getExtensionRepo.getAll()\n                .map { async { getExtensions(it) } }\n                .awaitAll()\n                .flatten()\n        }\n    }\n\n    private suspend fun getExtensions(extRepo: ExtensionRepo): List<AnimeExtension.Available> {\n        val repoBaseUrl = extRepo.baseUrl\n        return try {\n            val response = networkService.client\n                .newCall(GET(\"$repoBaseUrl/index.min.json\"))\n                .awaitSuccess()\n\n            with(json) {\n                response\n                    .parseAs<List<AnimeExtensionJsonObject>>()\n                    .toExtensions(repoBaseUrl)\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e) { \"Failed to get extensions from $repoBaseUrl\" }\n            emptyList()\n        }\n    }\n\n    suspend fun checkForUpdates(\n        context: Context,\n        fromAvailableExtensionList: Boolean = false,\n    ): List<AnimeExtension.Installed>? {\n        // Limit checks to once a day at most\n        if (fromAvailableExtensionList &&\n            Instant.now().toEpochMilli() < lastExtCheck.get() + 1.days.inWholeMilliseconds\n        ) {\n            return null\n        }\n\n        // Update extension repo details\n        updateExtensionRepo.awaitAll()\n\n        val extensions = if (fromAvailableExtensionList) {\n            animeExtensionManager.availableExtensionsFlow.value\n        } else {\n            findExtensions().also { lastExtCheck.set(Instant.now().toEpochMilli()) }\n        }\n\n        val installedExtensions = AnimeExtensionLoader.loadExtensions(context)\n            .filterIsInstance<AnimeLoadResult.Success>()\n            .map { it.extension }\n\n        val extensionsWithUpdate = mutableListOf<AnimeExtension.Installed>()\n        for (installedExt in installedExtensions) {\n            val pkgName = installedExt.pkgName\n            val availableExt = extensions.find { it.pkgName == pkgName } ?: continue\n\n            val hasUpdatedVer = availableExt.versionCode > installedExt.versionCode\n            val hasUpdatedLib = availableExt.libVersion > installedExt.libVersion\n            val hasUpdate = hasUpdatedVer || hasUpdatedLib\n            if (hasUpdate) {\n                extensionsWithUpdate.add(installedExt)\n            }\n        }\n\n        if (extensionsWithUpdate.isNotEmpty()) {\n            ExtensionUpdateNotifier(context).promptUpdates(\n                names = extensionsWithUpdate.map { it.name },\n                anime = true,\n            )\n        }\n\n        return extensionsWithUpdate\n    }\n\n    private fun List<AnimeExtensionJsonObject>.toExtensions(repoUrl: String): List<AnimeExtension.Available> {\n        return this\n            .filter {\n                val libVersion = it.extractLibVersion()\n                libVersion >= AnimeExtensionLoader.LIB_VERSION_MIN && libVersion <= AnimeExtensionLoader.LIB_VERSION_MAX\n            }\n            .map {\n                AnimeExtension.Available(\n                    name = it.name.substringAfter(\"Aniyomi: \"),\n                    pkgName = it.pkg,\n                    versionName = it.version,\n                    versionCode = it.code,\n                    libVersion = it.extractLibVersion(),\n                    lang = it.lang,\n                    isNsfw = it.nsfw == 1,\n                    sources = it.sources?.map(extensionAnimeSourceMapper).orEmpty(),\n                    apkName = it.apk,\n                    iconUrl = \"$repoUrl/icon/${it.pkg}.png\",\n                    repoUrl = repoUrl,\n                )\n            }\n    }\n\n    fun getApkUrl(extension: AnimeExtension.Available): String {\n        return \"${extension.repoUrl}/apk/${extension.apkName}\"\n    }\n\n    private fun AnimeExtensionJsonObject.extractLibVersion(): Double {\n        return version.substringBeforeLast('.').toDouble()\n    }\n}\n\n@Serializable\nprivate data class AnimeExtensionJsonObject(\n    val name: String,\n    val pkg: String,\n    val apk: String,\n    val lang: String,\n    val code: Long,\n    val version: String,\n    val nsfw: Int,\n    val sources: List<AnimeExtensionSourceJsonObject>?,\n)\n\n@Serializable\nprivate data class AnimeExtensionSourceJsonObject(\n    val id: Long,\n    val lang: String,\n    val name: String,\n    val baseUrl: String,\n)\n\nprivate val extensionAnimeSourceMapper: (AnimeExtensionSourceJsonObject) -> AnimeExtension.Available.AnimeSource = {\n    AnimeExtension.Available.AnimeSource(\n        id = it.id,\n        lang = it.lang,\n        name = it.name,\n        baseUrl = it.baseUrl,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/InstallerAnime.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.installer\n\nimport android.app.Service\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.net.Uri\nimport androidx.annotation.CallSuper\nimport androidx.localbroadcastmanager.content.LocalBroadcastManager\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport uy.kohesive.injekt.injectLazy\nimport java.util.Collections\nimport java.util.concurrent.atomic.AtomicReference\n\n/**\n * Base implementation class for extension installer. To be used inside a foreground [Service].\n */\nabstract class InstallerAnime(private val service: Service) {\n\n    private val extensionManager: AnimeExtensionManager by injectLazy()\n\n    private var waitingInstall = AtomicReference<Entry>(null)\n    private val queue = Collections.synchronizedList(mutableListOf<Entry>())\n\n    private val cancelReceiver = object : BroadcastReceiver() {\n        override fun onReceive(context: Context, intent: Intent) {\n            val downloadId = intent.getLongExtra(EXTRA_DOWNLOAD_ID, -1).takeIf { it >= 0 } ?: return\n            cancelQueue(downloadId)\n        }\n    }\n\n    /**\n     * Installer readiness. If false, queue check will not run.\n     *\n     * @see checkQueue\n     */\n    abstract var ready: Boolean\n\n    /**\n     * Add an item to install queue.\n     *\n     * @param downloadId Download ID as known by [ExtensionManager]\n     * @param uri Uri of APK to install\n     */\n    fun addToQueue(downloadId: Long, uri: Uri) {\n        queue.add(Entry(downloadId, uri))\n        checkQueue()\n    }\n\n    /**\n     * Proceeds to install the APK of this entry inside this method. Call [continueQueue]\n     * when the install process for this entry is finished to continue the queue.\n     *\n     * @param entry The [Entry] of item to process\n     * @see continueQueue\n     */\n    @CallSuper\n    open fun processEntry(entry: Entry) {\n        extensionManager.setInstalling(entry.downloadId)\n    }\n\n    /**\n     * Called before queue continues. Override this to handle when the removed entry is\n     * currently being processed.\n     *\n     * @return true if this entry can be removed from queue.\n     */\n    open fun cancelEntry(entry: Entry): Boolean {\n        return true\n    }\n\n    /**\n     * Tells the queue to continue processing the next entry and updates the install step\n     * of the completed entry ([waitingInstall]) to [ExtensionManager].\n     *\n     * @param resultStep new install step for the processed entry.\n     * @see waitingInstall\n     */\n    fun continueQueue(resultStep: InstallStep) {\n        val completedEntry = waitingInstall.getAndSet(null)\n        if (completedEntry != null) {\n            extensionManager.updateInstallStep(completedEntry.downloadId, resultStep)\n            checkQueue()\n        }\n    }\n\n    /**\n     * Checks the queue. The provided service will be stopped if the queue is empty.\n     * Will not be run when not ready.\n     *\n     * @see ready\n     */\n    fun checkQueue() {\n        if (!ready) {\n            return\n        }\n        if (queue.isEmpty()) {\n            service.stopSelf()\n            return\n        }\n        val nextEntry = queue.first()\n        if (waitingInstall.compareAndSet(null, nextEntry)) {\n            queue.removeAt(0)\n            processEntry(nextEntry)\n        }\n    }\n\n    /**\n     * Call this method when the provided service is destroyed.\n     */\n    @CallSuper\n    open fun onDestroy() {\n        LocalBroadcastManager.getInstance(service).unregisterReceiver(cancelReceiver)\n        queue.forEach { extensionManager.updateInstallStep(it.downloadId, InstallStep.Error) }\n        queue.clear()\n        waitingInstall.set(null)\n    }\n\n    protected fun getActiveEntry(): Entry? = waitingInstall.get()\n\n    /**\n     * Cancels queue for the provided download ID if exists.\n     *\n     * @param downloadId Download ID as known by [ExtensionManager]\n     */\n    private fun cancelQueue(downloadId: Long) {\n        val waitingInstall = this.waitingInstall.get()\n        val toCancel = queue.find { it.downloadId == downloadId } ?: waitingInstall ?: return\n        if (cancelEntry(toCancel)) {\n            queue.remove(toCancel)\n            if (waitingInstall == toCancel) {\n                // Currently processing removed entry, continue queue\n                this.waitingInstall.set(null)\n                checkQueue()\n            }\n            extensionManager.updateInstallStep(downloadId, InstallStep.Idle)\n        }\n    }\n\n    /**\n     * Install item to queue.\n     *\n     * @param downloadId Download ID as known by [ExtensionManager]\n     * @param uri Uri of APK to install\n     */\n    data class Entry(val downloadId: Long, val uri: Uri)\n\n    init {\n        val filter = IntentFilter(ACTION_CANCEL_QUEUE)\n        LocalBroadcastManager.getInstance(service).registerReceiver(cancelReceiver, filter)\n    }\n\n    companion object {\n        private const val ACTION_CANCEL_QUEUE = \"InstallerAnime.action.CANCEL_QUEUE\"\n        private const val EXTRA_DOWNLOAD_ID = \"InstallerAnime.extra.DOWNLOAD_ID\"\n\n        /**\n         * Attempts to cancel the installation entry for the provided download ID.\n         *\n         * @param downloadId Download ID as known by [ExtensionManager]\n         */\n        fun cancelInstallQueue(context: Context, downloadId: Long) {\n            val intent = Intent(ACTION_CANCEL_QUEUE)\n            intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId)\n            LocalBroadcastManager.getInstance(context).sendBroadcast(intent)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/PackageInstallerInstallerAnime.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.installer\n\nimport android.app.PendingIntent\nimport android.app.Service\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.content.pm.PackageInstaller\nimport android.os.Build\nimport androidx.core.content.ContextCompat\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.util.lang.use\nimport eu.kanade.tachiyomi.util.system.getParcelableExtraCompat\nimport eu.kanade.tachiyomi.util.system.getUriSize\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nclass PackageInstallerInstallerAnime(private val service: Service) : InstallerAnime(service) {\n\n    private val packageInstaller = service.packageManager.packageInstaller\n\n    private val packageActionReceiver = object : BroadcastReceiver() {\n        override fun onReceive(context: Context, intent: Intent) {\n            when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE)) {\n                PackageInstaller.STATUS_PENDING_USER_ACTION -> {\n                    val userAction = intent.getParcelableExtraCompat<Intent>(Intent.EXTRA_INTENT)\n                    if (userAction == null) {\n                        logcat(LogPriority.ERROR) { \"Fatal error for $intent\" }\n                        continueQueue(InstallStep.Error)\n                        return\n                    }\n                    userAction.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                    service.startActivity(userAction)\n                }\n                PackageInstaller.STATUS_FAILURE_ABORTED -> {\n                    continueQueue(InstallStep.Idle)\n                }\n                PackageInstaller.STATUS_SUCCESS -> continueQueue(InstallStep.Installed)\n                else -> continueQueue(InstallStep.Error)\n            }\n        }\n    }\n\n    private var activeSession: Pair<Entry, Int>? = null\n\n    // Always ready\n    override var ready = true\n\n    override fun processEntry(entry: Entry) {\n        super.processEntry(entry)\n        activeSession = null\n        try {\n            val installParams = PackageInstaller.SessionParams(\n                PackageInstaller.SessionParams.MODE_FULL_INSTALL,\n            )\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                installParams.setRequireUserAction(\n                    PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED,\n                )\n            }\n            activeSession = entry to packageInstaller.createSession(installParams)\n            val fileSize = service.getUriSize(entry.uri) ?: throw IllegalStateException()\n            installParams.setSize(fileSize)\n\n            val inputStream = service.contentResolver.openInputStream(entry.uri) ?: throw IllegalStateException()\n            val session = packageInstaller.openSession(activeSession!!.second)\n            val outputStream = session.openWrite(entry.downloadId.toString(), 0, fileSize)\n            session.use {\n                arrayOf(inputStream, outputStream).use {\n                    inputStream.copyTo(outputStream)\n                    session.fsync(outputStream)\n                }\n\n                val intentSender = PendingIntent.getBroadcast(\n                    service,\n                    activeSession!!.second,\n                    Intent(INSTALL_ACTION).setPackage(service.packageName),\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0,\n                ).intentSender\n                session.commit(intentSender)\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to install extension ${entry.downloadId} ${entry.uri}\" }\n            activeSession?.let { (_, sessionId) ->\n                packageInstaller.abandonSession(sessionId)\n            }\n            continueQueue(InstallStep.Error)\n        }\n    }\n\n    override fun cancelEntry(entry: Entry): Boolean {\n        activeSession?.let { (activeEntry, sessionId) ->\n            if (activeEntry == entry) {\n                packageInstaller.abandonSession(sessionId)\n                return false\n            }\n        }\n        return true\n    }\n\n    override fun onDestroy() {\n        service.unregisterReceiver(packageActionReceiver)\n        super.onDestroy()\n    }\n\n    init {\n        ContextCompat.registerReceiver(\n            service,\n            packageActionReceiver,\n            IntentFilter(INSTALL_ACTION),\n            ContextCompat.RECEIVER_EXPORTED,\n        )\n    }\n}\n\nprivate const val INSTALL_ACTION = \"PackageInstallerInstaller.INSTALL_ACTION\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/ShizukuInstallerAnime.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.installer\n\nimport android.app.Service\nimport android.content.pm.PackageManager\nimport android.os.Process\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.util.system.getUriSize\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport rikka.shizuku.Shizuku\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport java.io.BufferedReader\nimport java.io.InputStream\n\nclass ShizukuInstallerAnime(private val service: Service) : InstallerAnime(service) {\n\n    private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)\n\n    private val shizukuDeadListener = Shizuku.OnBinderDeadListener {\n        logcat(LogPriority.ERROR) { \"Shizuku was killed prematurely\" }\n        service.stopSelf()\n    }\n\n    private val shizukuPermissionListener = object : Shizuku.OnRequestPermissionResultListener {\n        override fun onRequestPermissionResult(requestCode: Int, grantResult: Int) {\n            if (requestCode == SHIZUKU_PERMISSION_REQUEST_CODE) {\n                if (grantResult == PackageManager.PERMISSION_GRANTED) {\n                    ready = true\n                    checkQueue()\n                } else {\n                    service.stopSelf()\n                }\n                Shizuku.removeRequestPermissionResultListener(this)\n            }\n        }\n    }\n\n    override var ready = false\n\n    override fun processEntry(entry: Entry) {\n        super.processEntry(entry)\n        scope.launch {\n            var sessionId: String? = null\n            try {\n                val size = service.getUriSize(entry.uri) ?: throw IllegalStateException()\n                service.contentResolver.openInputStream(entry.uri)!!.use {\n                    val userId = Process.myUserHandle().hashCode()\n                    val createCommand = \"pm install-create --user $userId -r -i ${service.packageName} -S $size\"\n                    val createResult = exec(createCommand)\n                    sessionId = SESSION_ID_REGEX.find(createResult.out)?.value\n                        ?: throw RuntimeException(\"Failed to create install session\")\n\n                    val writeResult = exec(\"pm install-write -S $size $sessionId base -\", it)\n                    if (writeResult.resultCode != 0) {\n                        throw RuntimeException(\"Failed to write APK to session $sessionId\")\n                    }\n\n                    val commitResult = exec(\"pm install-commit $sessionId\")\n                    if (commitResult.resultCode != 0) {\n                        throw RuntimeException(\"Failed to commit install session $sessionId\")\n                    }\n\n                    continueQueue(InstallStep.Installed)\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to install extension ${entry.downloadId} ${entry.uri}\" }\n                if (sessionId != null) {\n                    exec(\"pm install-abandon $sessionId\")\n                }\n                continueQueue(InstallStep.Error)\n            }\n        }\n    }\n\n    // Don't cancel if entry is already started installing\n    override fun cancelEntry(entry: Entry): Boolean = getActiveEntry() != entry\n\n    override fun onDestroy() {\n        Shizuku.removeBinderDeadListener(shizukuDeadListener)\n        Shizuku.removeRequestPermissionResultListener(shizukuPermissionListener)\n        scope.cancel()\n        super.onDestroy()\n    }\n\n    private fun exec(command: String, stdin: InputStream? = null): ShellResult {\n        @Suppress(\"DEPRECATION\")\n        val process = Shizuku.newProcess(arrayOf(\"sh\", \"-c\", command), null, null)\n        if (stdin != null) {\n            process.outputStream.use { stdin.copyTo(it) }\n        }\n        val output = process.inputStream.bufferedReader().use(BufferedReader::readText)\n        val resultCode = process.waitFor()\n        return ShellResult(resultCode, output)\n    }\n\n    private data class ShellResult(val resultCode: Int, val out: String)\n\n    init {\n        Shizuku.addBinderDeadListener(shizukuDeadListener)\n        ready = if (Shizuku.pingBinder()) {\n            if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {\n                true\n            } else {\n                Shizuku.addRequestPermissionResultListener(shizukuPermissionListener)\n                Shizuku.requestPermission(SHIZUKU_PERMISSION_REQUEST_CODE)\n                false\n            }\n        } else {\n            logcat(LogPriority.ERROR) { \"Shizuku is not ready to use\" }\n            service.toast(MR.strings.ext_installer_shizuku_stopped)\n            service.stopSelf()\n            false\n        }\n    }\n}\n\nprivate const val SHIZUKU_PERMISSION_REQUEST_CODE = 14045\nprivate val SESSION_ID_REGEX = Regex(\"(?<=\\\\[).+?(?=])\")\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/model/AnimeExtension.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.model\n\nimport android.graphics.drawable.Drawable\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\n\nsealed class AnimeExtension {\n\n    abstract val name: String\n    abstract val pkgName: String\n    abstract val versionName: String\n    abstract val versionCode: Long\n    abstract val libVersion: Double\n    abstract val lang: String?\n    abstract val isNsfw: Boolean\n\n    data class Installed(\n        override val name: String,\n        override val pkgName: String,\n        override val versionName: String,\n        override val versionCode: Long,\n        override val libVersion: Double,\n        override val lang: String,\n        override val isNsfw: Boolean,\n        val pkgFactory: String?,\n        val sources: List<AnimeSource>,\n        val icon: Drawable?,\n        val hasUpdate: Boolean = false,\n        val isObsolete: Boolean = false,\n        val isShared: Boolean,\n        val repoUrl: String? = null,\n    ) : AnimeExtension()\n\n    data class Available(\n        override val name: String,\n        override val pkgName: String,\n        override val versionName: String,\n        override val versionCode: Long,\n        override val libVersion: Double,\n        override val lang: String,\n        override val isNsfw: Boolean,\n        val sources: List<AnimeSource>,\n        val apkName: String,\n        val iconUrl: String,\n        val repoUrl: String,\n    ) : AnimeExtension() {\n\n        data class AnimeSource(\n            val id: Long,\n            val lang: String,\n            val name: String,\n            val baseUrl: String,\n        ) {\n            fun toStubSource(): StubAnimeSource {\n                return StubAnimeSource(\n                    id = this.id,\n                    lang = this.lang,\n                    name = this.name,\n                )\n            }\n        }\n    }\n\n    data class Untrusted(\n        override val name: String,\n        override val pkgName: String,\n        override val versionName: String,\n        override val versionCode: Long,\n        override val libVersion: Double,\n        val signatureHash: String,\n        override val lang: String? = null,\n        override val isNsfw: Boolean = false,\n    ) : AnimeExtension()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/model/AnimeLoadResult.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.model\n\nsealed interface AnimeLoadResult {\n    data class Success(val extension: AnimeExtension.Installed) : AnimeLoadResult\n    data class Untrusted(val extension: AnimeExtension.Untrusted) : AnimeLoadResult\n    data object Error : AnimeLoadResult\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallActivity.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.util\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.util.system.hasMiuiPackageInstaller\nimport eu.kanade.tachiyomi.util.system.toast\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * Activity used to install extensions, because we can only receive the result of the installation\n * with [startActivityForResult], which we need to update the UI.\n */\nclass AnimeExtensionInstallActivity : Activity() {\n\n    // MIUI package installer bug workaround\n    private var ignoreUntil = 0L\n    private var ignoreResult = false\n    private var hasIgnoredResult = false\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        @Suppress(\"DEPRECATION\")\n        val installIntent = Intent(Intent.ACTION_INSTALL_PACKAGE)\n            .setDataAndType(intent.data, intent.type)\n            .putExtra(Intent.EXTRA_RETURN_RESULT, true)\n            .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)\n\n        if (hasMiuiPackageInstaller) {\n            ignoreResult = true\n            ignoreUntil = System.nanoTime() + 1.seconds.inWholeNanoseconds\n        }\n\n        try {\n            startActivityForResult(installIntent, INSTALL_REQUEST_CODE)\n        } catch (error: Exception) {\n            // Either install package can't be found (probably bots) or there's a security exception\n            // with the download manager. Nothing we can workaround.\n            toast(error.message)\n        }\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        if (ignoreResult && System.nanoTime() < ignoreUntil) {\n            hasIgnoredResult = true\n            return\n        }\n        if (requestCode == INSTALL_REQUEST_CODE) {\n            checkInstallationResult(resultCode)\n        }\n        finish()\n    }\n\n    override fun onStart() {\n        super.onStart()\n        if (hasIgnoredResult) {\n            checkInstallationResult(RESULT_CANCELED)\n            finish()\n        }\n    }\n\n    private fun checkInstallationResult(resultCode: Int) {\n        val downloadId = intent.extras!!.getLong(AnimeExtensionInstaller.EXTRA_DOWNLOAD_ID)\n        val extensionManager = Injekt.get<AnimeExtensionManager>()\n        val newStep = when (resultCode) {\n            RESULT_OK -> InstallStep.Installed\n            RESULT_CANCELED -> InstallStep.Idle\n            else -> InstallStep.Error\n        }\n        extensionManager.updateInstallStep(downloadId, newStep)\n    }\n}\n\nprivate const val INSTALL_REQUEST_CODE = 500\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallReceiver.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.util\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport androidx.core.content.ContextCompat\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeLoadResult\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\n/**\n * Broadcast receiver that listens for the system's packages installed, updated or removed, and only\n * notifies the given [listener] when the package is an extension.\n *\n * @param listener The listener that should be notified of extension installation events.\n */\ninternal class AnimeExtensionInstallReceiver(private val listener: Listener) : BroadcastReceiver() {\n\n    val scope = CoroutineScope(SupervisorJob())\n\n    fun register(context: Context) {\n        ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_NOT_EXPORTED)\n    }\n\n    private val filter = IntentFilter().apply {\n        addAction(Intent.ACTION_PACKAGE_ADDED)\n        addAction(Intent.ACTION_PACKAGE_REPLACED)\n        addAction(Intent.ACTION_PACKAGE_REMOVED)\n        addAction(ACTION_EXTENSION_ADDED)\n        addAction(ACTION_EXTENSION_REPLACED)\n        addAction(ACTION_EXTENSION_REMOVED)\n        addDataScheme(\"package\")\n    }\n\n    /**\n     * Called when one of the events of the [filter] is received. When the package is an extension,\n     * it's loaded in background and it notifies the [listener] when finished.\n     */\n    override fun onReceive(context: Context, intent: Intent?) {\n        if (intent == null) return\n\n        when (intent.action) {\n            Intent.ACTION_PACKAGE_ADDED, ACTION_EXTENSION_ADDED -> {\n                if (isReplacing(intent)) return\n\n                scope.launch {\n                    when (val result = getExtensionFromIntent(context, intent)) {\n                        is AnimeLoadResult.Success -> listener.onExtensionInstalled(result.extension)\n                        is AnimeLoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension)\n                        else -> {}\n                    }\n                }\n            }\n            Intent.ACTION_PACKAGE_REPLACED, ACTION_EXTENSION_REPLACED -> {\n                scope.launch {\n                    when (val result = getExtensionFromIntent(context, intent)) {\n                        is AnimeLoadResult.Success -> listener.onExtensionUpdated(result.extension)\n                        is AnimeLoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension)\n                        else -> {}\n                    }\n                }\n            }\n            Intent.ACTION_PACKAGE_REMOVED, ACTION_EXTENSION_REMOVED -> {\n                if (isReplacing(intent)) return\n\n                val pkgName = getPackageNameFromIntent(intent)\n                if (pkgName != null) {\n                    listener.onPackageUninstalled(pkgName)\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns true if this package is performing an update.\n     *\n     * @param intent The intent that triggered the event.\n     */\n    private fun isReplacing(intent: Intent): Boolean {\n        return intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)\n    }\n\n    /**\n     * Returns the extension triggered by the given intent.\n     *\n     * @param context The application context.\n     * @param intent The intent containing the package name of the extension.\n     */\n    private suspend fun getExtensionFromIntent(context: Context, intent: Intent?): AnimeLoadResult {\n        val pkgName = getPackageNameFromIntent(intent)\n        if (pkgName == null) {\n            logcat(LogPriority.WARN) { \"Package name not found\" }\n            return AnimeLoadResult.Error\n        }\n        return AnimeExtensionLoader.loadExtensionFromPkgName(context, pkgName)\n    }\n\n    /**\n     * Returns the package name of the installed, updated or removed application.\n     */\n    private fun getPackageNameFromIntent(intent: Intent?): String? {\n        return intent?.data?.encodedSchemeSpecificPart ?: return null\n    }\n\n    /**\n     * Listener that receives extension installation events.\n     */\n    interface Listener {\n        fun onExtensionInstalled(extension: AnimeExtension.Installed)\n        fun onExtensionUpdated(extension: AnimeExtension.Installed)\n        fun onExtensionUntrusted(extension: AnimeExtension.Untrusted)\n        fun onPackageUninstalled(pkgName: String)\n    }\n\n    companion object {\n        private const val ACTION_EXTENSION_ADDED = \"${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_ADDED\"\n        private const val ACTION_EXTENSION_REPLACED = \"${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_REPLACED\"\n        private const val ACTION_EXTENSION_REMOVED = \"${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_REMOVED\"\n\n        fun notifyAdded(context: Context, pkgName: String) {\n            notify(context, pkgName, ACTION_EXTENSION_ADDED)\n        }\n\n        fun notifyReplaced(context: Context, pkgName: String) {\n            notify(context, pkgName, ACTION_EXTENSION_REPLACED)\n        }\n\n        fun notifyRemoved(context: Context, pkgName: String) {\n            notify(context, pkgName, ACTION_EXTENSION_REMOVED)\n        }\n\n        private fun notify(context: Context, pkgName: String, action: String) {\n            Intent(action).apply {\n                data = \"package:$pkgName\".toUri()\n                `package` = context.packageName\n                context.sendBroadcast(this)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallService.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.util\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.IBinder\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.extension.anime.installer.InstallerAnime\nimport eu.kanade.tachiyomi.extension.anime.installer.PackageInstallerInstallerAnime\nimport eu.kanade.tachiyomi.extension.anime.installer.ShizukuInstallerAnime\nimport eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionInstaller.Companion.EXTRA_DOWNLOAD_ID\nimport eu.kanade.tachiyomi.util.system.getSerializableExtraCompat\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\n\nclass AnimeExtensionInstallService : Service() {\n\n    private var installer: InstallerAnime? = null\n\n    override fun onCreate() {\n        val notification = notificationBuilder(Notifications.CHANNEL_EXTENSIONS_UPDATE) {\n            setSmallIcon(R.drawable.ic_ani)\n            setAutoCancel(false)\n            setOngoing(true)\n            setShowWhen(false)\n            setContentTitle(stringResource(MR.strings.ext_install_service_notif))\n            setProgress(100, 100, true)\n        }.build()\n        startForeground(Notifications.ID_EXTENSION_INSTALLER, notification)\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val uri = intent?.data\n        val id = intent?.getLongExtra(EXTRA_DOWNLOAD_ID, -1)?.takeIf { it != -1L }\n        val installerUsed = intent?.getSerializableExtraCompat<BasePreferences.ExtensionInstaller>(\n            EXTRA_INSTALLER,\n        )\n        if (uri == null || id == null || installerUsed == null) {\n            stopSelf()\n            return START_NOT_STICKY\n        }\n\n        if (installer == null) {\n            installer = when (installerUsed) {\n                BasePreferences.ExtensionInstaller.PACKAGEINSTALLER -> PackageInstallerInstallerAnime(\n                    this,\n                )\n                BasePreferences.ExtensionInstaller.SHIZUKU -> ShizukuInstallerAnime(this)\n                else -> {\n                    logcat(LogPriority.ERROR) { \"Not implemented for installer $installerUsed\" }\n                    stopSelf()\n                    return START_NOT_STICKY\n                }\n            }\n        }\n        installer!!.addToQueue(id, uri)\n        return START_NOT_STICKY\n    }\n\n    override fun onDestroy() {\n        installer?.onDestroy()\n        installer = null\n    }\n\n    override fun onBind(i: Intent?): IBinder? = null\n\n    companion object {\n        private const val EXTRA_INSTALLER = \"EXTRA_INSTALLER\"\n\n        fun getIntent(\n            context: Context,\n            downloadId: Long,\n            uri: Uri,\n            installer: BasePreferences.ExtensionInstaller,\n        ): Intent {\n            return Intent(context, AnimeExtensionInstallService::class.java)\n                .setDataAndType(uri, AnimeExtensionInstaller.APK_MIME)\n                .putExtra(EXTRA_DOWNLOAD_ID, downloadId)\n                .putExtra(EXTRA_INSTALLER, installer)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstaller.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.util\n\nimport android.app.DownloadManager\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.net.Uri\nimport android.os.Environment\nimport androidx.core.content.ContextCompat\nimport androidx.core.content.getSystemService\nimport androidx.core.net.toUri\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.anime.installer.InstallerAnime\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.system.isPackageInstalled\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.mapNotNull\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.transformWhile\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * The installer which installs, updates and uninstalls the extensions.\n *\n * @param context The application context.\n */\ninternal class AnimeExtensionInstaller(private val context: Context) {\n\n    /**\n     * The system's download manager\n     */\n    private val downloadManager = context.getSystemService<DownloadManager>()!!\n\n    /**\n     * The broadcast receiver which listens to download completion events.\n     */\n    private val downloadReceiver = DownloadCompletionReceiver()\n\n    /**\n     * The currently requested downloads, with the package name (unique id) as key, and the id\n     * returned by the download manager.\n     */\n    private val activeDownloads = hashMapOf<String, Long>()\n\n    private val downloadsStateFlows = hashMapOf<Long, MutableStateFlow<InstallStep>>()\n\n    private val extensionInstaller = Injekt.get<BasePreferences>().extensionInstaller()\n\n    /**\n     * Adds the given extension to the downloads queue and returns an observable containing its\n     * step in the installation process.\n     *\n     * @param url The url of the apk.\n     * @param extension The extension to install.\n     */\n    fun downloadAndInstall(url: String, extension: AnimeExtension): Flow<InstallStep> {\n        val pkgName = extension.pkgName\n\n        val oldDownload = activeDownloads[pkgName]\n        if (oldDownload != null) {\n            deleteDownload(pkgName)\n        }\n\n        // Register the receiver after removing (and unregistering) the previous download\n        downloadReceiver.register()\n\n        val downloadUri = url.toUri()\n        val request = DownloadManager.Request(downloadUri)\n            .setTitle(extension.name)\n            .setMimeType(APK_MIME)\n            .setDestinationInExternalFilesDir(\n                context,\n                Environment.DIRECTORY_DOWNLOADS,\n                downloadUri.lastPathSegment,\n            )\n            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)\n\n        val id = downloadManager.enqueue(request)\n        activeDownloads[pkgName] = id\n\n        val downloadStateFlow = MutableStateFlow(InstallStep.Pending)\n        downloadsStateFlows[id] = downloadStateFlow\n\n        // Poll download status\n        val pollStatusFlow = downloadStatusFlow(id).mapNotNull { downloadStatus ->\n            // Map to our model\n            when (downloadStatus) {\n                DownloadManager.STATUS_PENDING -> InstallStep.Pending\n                DownloadManager.STATUS_RUNNING -> InstallStep.Downloading\n                else -> null\n            }\n        }\n\n        return merge(downloadStateFlow, pollStatusFlow).transformWhile {\n            emit(it)\n            // Stop when the application is installed or errors\n            !it.isCompleted()\n        }.onCompletion {\n            // Always notify on main thread\n            withUIContext {\n                // Always remove the download when unsubscribed\n                deleteDownload(pkgName)\n            }\n        }\n    }\n\n    /**\n     * Returns a flow that polls the given download id for its status every second, as the\n     * manager doesn't have any notification system. It'll stop once the download finishes.\n     *\n     * @param id The id of the download to poll.\n     */\n    private fun downloadStatusFlow(id: Long): Flow<Int> = flow {\n        val query = DownloadManager.Query().setFilterById(id)\n\n        while (true) {\n            // Get the current download status\n            val downloadStatus = downloadManager.query(query).use { cursor ->\n                if (!cursor.moveToFirst()) return@flow\n                cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS))\n            }\n\n            emit(downloadStatus)\n\n            // Stop polling when the download fails or finishes\n            if (downloadStatus == DownloadManager.STATUS_SUCCESSFUL ||\n                downloadStatus == DownloadManager.STATUS_FAILED\n            ) {\n                return@flow\n            }\n\n            delay(1.seconds)\n        }\n    }\n        // Ignore duplicate results\n        .distinctUntilChanged()\n\n    /**\n     * Starts an intent to install the extension at the given uri.\n     *\n     * @param uri The uri of the extension to install.\n     */\n    fun installApk(downloadId: Long, uri: Uri) {\n        when (val installer = extensionInstaller.get()) {\n            BasePreferences.ExtensionInstaller.LEGACY -> {\n                val intent = Intent(context, AnimeExtensionInstallActivity::class.java)\n                    .setDataAndType(uri, APK_MIME)\n                    .putExtra(EXTRA_DOWNLOAD_ID, downloadId)\n                    .setFlags(\n                        Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION,\n                    )\n\n                context.startActivity(intent)\n            }\n            BasePreferences.ExtensionInstaller.PRIVATE -> {\n                val extensionManager = Injekt.get<AnimeExtensionManager>()\n                val tempFile = File(context.cacheDir, \"temp_$downloadId\")\n\n                if (tempFile.exists() && !tempFile.delete()) {\n                    // Unlikely but just in case\n                    extensionManager.updateInstallStep(downloadId, InstallStep.Error)\n                    return\n                }\n\n                try {\n                    context.contentResolver.openInputStream(uri)?.use { input ->\n                        tempFile.outputStream().use { output ->\n                            input.copyTo(output)\n                        }\n                    }\n\n                    if (AnimeExtensionLoader.installPrivateExtensionFile(context, tempFile)) {\n                        extensionManager.updateInstallStep(downloadId, InstallStep.Installed)\n                    } else {\n                        extensionManager.updateInstallStep(downloadId, InstallStep.Error)\n                    }\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to read downloaded extension file.\" }\n                    extensionManager.updateInstallStep(downloadId, InstallStep.Error)\n                }\n\n                tempFile.delete()\n            }\n            else -> {\n                val intent =\n                    AnimeExtensionInstallService.getIntent(context, downloadId, uri, installer)\n                ContextCompat.startForegroundService(context, intent)\n            }\n        }\n    }\n\n    /**\n     * Cancels extension install and remove from download manager and installer.\n     */\n    fun cancelInstall(pkgName: String) {\n        val downloadId = activeDownloads.remove(pkgName) ?: return\n        downloadManager.remove(downloadId)\n        InstallerAnime.cancelInstallQueue(context, downloadId)\n    }\n\n    /**\n     * Starts an intent to uninstall the extension by the given package name.\n     *\n     * @param pkgName The package name of the extension to uninstall\n     */\n    fun uninstallApk(pkgName: String) {\n        if (context.isPackageInstalled(pkgName)) {\n            @Suppress(\"DEPRECATION\")\n            val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE, \"package:$pkgName\".toUri())\n                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n            context.startActivity(intent)\n        } else {\n            AnimeExtensionLoader.uninstallPrivateExtension(context, pkgName)\n            AnimeExtensionInstallReceiver.notifyRemoved(context, pkgName)\n        }\n    }\n\n    /**\n     * Sets the step of the installation of an extension.\n     *\n     * @param downloadId The id of the download.\n     * @param step New install step.\n     */\n    fun updateInstallStep(downloadId: Long, step: InstallStep) {\n        downloadsStateFlows[downloadId]?.let { it.value = step }\n    }\n\n    /**\n     * Deletes the download for the given package name.\n     *\n     * @param pkgName The package name of the download to delete.\n     */\n    private fun deleteDownload(pkgName: String) {\n        val downloadId = activeDownloads.remove(pkgName)\n        if (downloadId != null) {\n            downloadManager.remove(downloadId)\n            downloadsStateFlows.remove(downloadId)\n        }\n        if (activeDownloads.isEmpty()) {\n            downloadReceiver.unregister()\n        }\n    }\n\n    /**\n     * Receiver that listens to download status events.\n     */\n    private inner class DownloadCompletionReceiver : BroadcastReceiver() {\n\n        /**\n         * Whether this receiver is currently registered.\n         */\n        private var isRegistered = false\n\n        /**\n         * Registers this receiver if it's not already.\n         */\n        fun register() {\n            if (isRegistered) return\n            isRegistered = true\n\n            val filter = IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)\n            ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_EXPORTED)\n        }\n\n        /**\n         * Unregisters this receiver if it's not already.\n         */\n        fun unregister() {\n            if (!isRegistered) return\n            isRegistered = false\n\n            context.unregisterReceiver(this)\n        }\n\n        /**\n         * Called when a download event is received. It looks for the download in the current active\n         * downloads and notifies its installation step.\n         */\n        override fun onReceive(context: Context, intent: Intent?) {\n            val id = intent?.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0) ?: return\n\n            // Avoid events for downloads we didn't request\n            if (id !in activeDownloads.values) return\n\n            val uri = downloadManager.getUriForDownloadedFile(id)\n\n            // Set next installation step\n            if (uri == null) {\n                logcat(LogPriority.ERROR) { \"Couldn't locate downloaded APK\" }\n                updateInstallStep(id, InstallStep.Error)\n                return\n            }\n\n            val query = DownloadManager.Query().setFilterById(id)\n            downloadManager.query(query).use { cursor ->\n                if (cursor.moveToFirst()) {\n                    val localUri = cursor.getString(\n                        cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI),\n                    ).removePrefix(FILE_SCHEME)\n\n                    installApk(id, File(localUri).getUriCompat(context))\n                }\n            }\n        }\n    }\n\n    companion object {\n        const val APK_MIME = \"application/vnd.android.package-archive\"\n        const val EXTRA_DOWNLOAD_ID = \"AnimeExtensionInstaller.extra.DOWNLOAD_ID\"\n        const val FILE_SCHEME = \"file://\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionLoader.kt",
    "content": "package eu.kanade.tachiyomi.extension.anime.util\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.pm.ApplicationInfo\nimport android.content.pm.PackageInfo\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport androidx.core.content.pm.PackageInfoCompat\nimport dalvik.system.PathClassLoader\nimport eu.kanade.domain.extension.anime.interactor.TrustAnimeExtension\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.AnimeSourceFactory\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeLoadResult\nimport eu.kanade.tachiyomi.util.lang.Hash\nimport eu.kanade.tachiyomi.util.storage.copyAndSetReadOnlyTo\nimport eu.kanade.tachiyomi.util.system.ChildFirstPathClassLoader\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\n\n/**\n * Class that handles the loading of the extensions installed in the system.\n */\n@SuppressLint(\"PackageManagerGetSignatures\")\ninternal object AnimeExtensionLoader {\n\n    private val preferences: SourcePreferences by injectLazy()\n    private val trustExtension: TrustAnimeExtension by injectLazy()\n    private val loadNsfwSource by lazy {\n        preferences.showNsfwSource().get()\n    }\n\n    private const val EXTENSION_FEATURE = \"tachiyomi.animeextension\"\n    private const val METADATA_SOURCE_CLASS = \"tachiyomi.animeextension.class\"\n    private const val METADATA_SOURCE_FACTORY = \"tachiyomi.animeextension.factory\"\n    private const val METADATA_NSFW = \"tachiyomi.animeextension.nsfw\"\n    private const val METADATA_HAS_README = \"tachiyomi.animeextension.hasReadme\"\n    private const val METADATA_HAS_CHANGELOG = \"tachiyomi.animeextension.hasChangelog\"\n    const val LIB_VERSION_MIN = 12\n    const val LIB_VERSION_MAX = 16\n\n    @Suppress(\"DEPRECATION\")\n    private val PACKAGE_FLAGS = PackageManager.GET_CONFIGURATIONS or\n        PackageManager.GET_META_DATA or\n        PackageManager.GET_SIGNATURES or\n        (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) PackageManager.GET_SIGNING_CERTIFICATES else 0)\n\n    private const val PRIVATE_EXTENSION_EXTENSION = \"ext\"\n\n    private fun getPrivateExtensionDir(context: Context) = File(context.filesDir, \"exts\")\n\n    fun installPrivateExtensionFile(context: Context, file: File): Boolean {\n        val extension = context.packageManager.getPackageArchiveInfo(\n            file.absolutePath,\n            PACKAGE_FLAGS,\n        )\n            ?.takeIf { isPackageAnExtension(it) } ?: return false\n        val currentExtension = getAnimeExtensionPackageInfoFromPkgName(\n            context,\n            extension.packageName,\n        )\n\n        if (currentExtension != null) {\n            if (PackageInfoCompat.getLongVersionCode(extension) <\n                PackageInfoCompat.getLongVersionCode(currentExtension)\n            ) {\n                logcat(LogPriority.ERROR) { \"Installed extension version is higher. Downgrading is not allowed.\" }\n                return false\n            }\n\n            val extensionSignatures = getSignatures(extension)\n            if (extensionSignatures.isNullOrEmpty()) {\n                logcat(LogPriority.ERROR) { \"Extension to be installed is not signed.\" }\n                return false\n            }\n\n            if (!extensionSignatures.containsAll(getSignatures(currentExtension)!!)) {\n                logcat(LogPriority.ERROR) { \"Installed extension signature is not matched.\" }\n                return false\n            }\n        }\n\n        val target = File(\n            getPrivateExtensionDir(context),\n            \"${extension.packageName}.$PRIVATE_EXTENSION_EXTENSION\",\n        )\n        return try {\n            target.delete()\n            file.copyAndSetReadOnlyTo(target, overwrite = true)\n            if (currentExtension != null) {\n                AnimeExtensionInstallReceiver.notifyReplaced(context, extension.packageName)\n            } else {\n                AnimeExtensionInstallReceiver.notifyAdded(context, extension.packageName)\n            }\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to copy extension file.\" }\n            target.delete()\n            false\n        }\n    }\n\n    fun uninstallPrivateExtension(context: Context, pkgName: String) {\n        File(getPrivateExtensionDir(context), \"$pkgName.$PRIVATE_EXTENSION_EXTENSION\").delete()\n    }\n\n    /**\n     * Return a list of all the available extensions initialized concurrently.\n     *\n     * @param context The application context.\n     */\n    fun loadExtensions(context: Context): List<AnimeLoadResult> {\n        val pkgManager = context.packageManager\n\n        val installedPkgs = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n            pkgManager.getInstalledPackages(\n                PackageManager.PackageInfoFlags.of(PACKAGE_FLAGS.toLong()),\n            )\n        } else {\n            pkgManager.getInstalledPackages(PACKAGE_FLAGS)\n        }\n\n        val sharedExtPkgs = installedPkgs\n            .asSequence()\n            .filter { isPackageAnExtension(it) }\n            .map { AnimeExtensionInfo(packageInfo = it, isShared = true) }\n\n        val privateExtPkgs = getPrivateExtensionDir(context)\n            .listFiles()\n            ?.asSequence()\n            ?.filter { it.isFile && it.extension == PRIVATE_EXTENSION_EXTENSION }\n            ?.mapNotNull {\n                // Just in case, since Android 14+ requires them to be read-only\n                if (it.canWrite()) {\n                    it.setReadOnly()\n                }\n\n                val path = it.absolutePath\n                pkgManager.getPackageArchiveInfo(path, PACKAGE_FLAGS)\n                    ?.apply { applicationInfo!!.fixBasePaths(path) }\n            }\n            ?.filter { isPackageAnExtension(it) }\n            ?.map { AnimeExtensionInfo(packageInfo = it, isShared = false) }\n            ?: emptySequence()\n\n        val extPkgs = (sharedExtPkgs + privateExtPkgs)\n            // Remove duplicates. Shared takes priority than private by default\n            .distinctBy { it.packageInfo.packageName }\n            // Compare version number\n            .mapNotNull { sharedPkg ->\n                val privatePkg = privateExtPkgs\n                    .singleOrNull { it.packageInfo.packageName == sharedPkg.packageInfo.packageName }\n                selectExtensionPackage(sharedPkg, privatePkg)\n            }\n            .toList()\n\n        if (extPkgs.isEmpty()) return emptyList()\n\n        // Load each extension concurrently and wait for completion\n        return runBlocking {\n            val deferred = extPkgs.map {\n                async { loadExtension(context, it) }\n            }\n            deferred.awaitAll()\n        }\n    }\n\n    /**\n     * Attempts to load an extension from the given package name. It checks if the extension\n     * contains the required feature flag before trying to load it.\n     */\n    suspend fun loadExtensionFromPkgName(context: Context, pkgName: String): AnimeLoadResult {\n        val extensionPackage = getAnimeExtensionInfoFromPkgName(context, pkgName)\n        if (extensionPackage == null) {\n            logcat(LogPriority.ERROR) { \"Extension package is not found ($pkgName)\" }\n            return AnimeLoadResult.Error\n        }\n        return loadExtension(context, extensionPackage)\n    }\n\n    fun getAnimeExtensionPackageInfoFromPkgName(context: Context, pkgName: String): PackageInfo? {\n        return getAnimeExtensionInfoFromPkgName(context, pkgName)?.packageInfo\n    }\n\n    private fun getAnimeExtensionInfoFromPkgName(context: Context, pkgName: String): AnimeExtensionInfo? {\n        val privateExtensionFile = File(\n            getPrivateExtensionDir(context),\n            \"$pkgName.$PRIVATE_EXTENSION_EXTENSION\",\n        )\n        val privatePkg = if (privateExtensionFile.isFile) {\n            context.packageManager.getPackageArchiveInfo(\n                privateExtensionFile.absolutePath,\n                PACKAGE_FLAGS,\n            )\n                ?.takeIf { isPackageAnExtension(it) }\n                ?.let {\n                    it.applicationInfo!!.fixBasePaths(privateExtensionFile.absolutePath)\n                    AnimeExtensionInfo(\n                        packageInfo = it,\n                        isShared = false,\n                    )\n                }\n        } else {\n            null\n        }\n\n        val sharedPkg = try {\n            context.packageManager.getPackageInfo(pkgName, PACKAGE_FLAGS)\n                .takeIf { isPackageAnExtension(it) }\n                ?.let {\n                    AnimeExtensionInfo(\n                        packageInfo = it,\n                        isShared = true,\n                    )\n                }\n        } catch (error: PackageManager.NameNotFoundException) {\n            null\n        }\n\n        return selectExtensionPackage(sharedPkg, privatePkg)\n    }\n\n    /**\n     * Loads an extension\n     *\n     * @param context The application context.\n     * @param extensionInfo The extension to load.\n     */\n    private suspend fun loadExtension(context: Context, extensionInfo: AnimeExtensionInfo): AnimeLoadResult {\n        val pkgManager = context.packageManager\n\n        val pkgInfo = extensionInfo.packageInfo\n        val appInfo = pkgInfo.applicationInfo!!\n        val pkgName = pkgInfo.packageName\n\n        val extName = pkgManager.getApplicationLabel(appInfo).toString().substringAfter(\"Aniyomi: \")\n        val versionName = pkgInfo.versionName\n        val versionCode = PackageInfoCompat.getLongVersionCode(pkgInfo)\n\n        if (versionName.isNullOrEmpty()) {\n            logcat(LogPriority.WARN) { \"Missing versionName for extension $extName\" }\n            return AnimeLoadResult.Error\n        }\n\n        // Validate lib version\n        val libVersion = versionName.substringBeforeLast('.').toDoubleOrNull()\n        if (libVersion == null || libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) {\n            logcat(LogPriority.WARN) {\n                \"Lib version is $libVersion, while only versions \" +\n                    \"$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed\"\n            }\n            return AnimeLoadResult.Error\n        }\n\n        val signatures = getSignatures(pkgInfo)\n        if (signatures.isNullOrEmpty()) {\n            logcat(LogPriority.WARN) { \"Package $pkgName isn't signed\" }\n            return AnimeLoadResult.Error\n        } else if (!trustExtension.isTrusted(pkgInfo, signatures)) {\n            val extension = AnimeExtension.Untrusted(\n                extName,\n                pkgName,\n                versionName,\n                versionCode,\n                libVersion,\n                signatures.last(),\n            )\n            logcat(LogPriority.WARN, message = { \"Extension $pkgName isn't trusted\" })\n            return AnimeLoadResult.Untrusted(extension)\n        }\n\n        val isNsfw = appInfo.metaData.getInt(METADATA_NSFW) == 1\n        if (!loadNsfwSource && isNsfw) {\n            logcat(LogPriority.WARN) { \"NSFW extension $pkgName not allowed\" }\n            return AnimeLoadResult.Error\n        }\n\n        val classLoader = try {\n            ChildFirstPathClassLoader(appInfo.sourceDir, null, context.classLoader)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Extension load error: $extName ($pkgName)\" }\n            return AnimeLoadResult.Error\n        }\n\n        val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!!\n            .split(\";\")\n            .map {\n                val sourceClass = it.trim()\n                if (sourceClass.startsWith(\".\")) {\n                    pkgInfo.packageName + sourceClass\n                } else {\n                    sourceClass\n                }\n            }\n            .flatMap {\n                try {\n                    when (val obj = Class.forName(it, false, classLoader).getDeclaredConstructor().newInstance()) {\n                        is AnimeSource -> listOf(obj)\n                        is AnimeSourceFactory -> obj.createSources()\n                        else -> throw Exception(\"Unknown source class type: ${obj.javaClass}\")\n                    }\n                } catch (e: LinkageError) {\n                    try {\n                        val fallBackClassLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader)\n                        when (\n                            val obj = Class.forName(\n                                it,\n                                false,\n                                fallBackClassLoader,\n                            ).getDeclaredConstructor().newInstance()\n                        ) {\n                            is AnimeSource -> {\n                                listOf(obj)\n                            }\n                            is AnimeSourceFactory -> obj.createSources()\n                            else -> throw Exception(\"Unknown source class type: ${obj.javaClass}\")\n                        }\n                    } catch (e: Throwable) {\n                        logcat(LogPriority.ERROR, e) { \"Extension load error: $extName ($it)\" }\n                        return AnimeLoadResult.Error\n                    }\n                } catch (e: Throwable) {\n                    logcat(LogPriority.ERROR, e) { \"Extension load error: $extName ($it)\" }\n                    return AnimeLoadResult.Error\n                }\n            }\n\n        val langs = sources.filterIsInstance<AnimeCatalogueSource>()\n            .map { it.lang }\n            .toSet()\n        val lang = when (langs.size) {\n            0 -> \"\"\n            1 -> langs.first()\n            else -> \"all\"\n        }\n\n        val extension = AnimeExtension.Installed(\n            name = extName,\n            pkgName = pkgName,\n            versionName = versionName,\n            versionCode = versionCode,\n            libVersion = libVersion,\n            lang = lang,\n            isNsfw = isNsfw,\n            sources = sources,\n            pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY),\n            icon = appInfo.loadIcon(pkgManager),\n            isShared = extensionInfo.isShared,\n        )\n        return AnimeLoadResult.Success(extension)\n    }\n\n    /**\n     * Choose which extension package to use based on version code\n     *\n     * @param shared extension installed to system\n     * @param private extension installed to data directory\n     */\n    private fun selectExtensionPackage(shared: AnimeExtensionInfo?, private: AnimeExtensionInfo?): AnimeExtensionInfo? {\n        when {\n            private == null && shared != null -> return shared\n            shared == null && private != null -> return private\n            shared == null && private == null -> return null\n        }\n\n        return if (PackageInfoCompat.getLongVersionCode(shared!!.packageInfo) >=\n            PackageInfoCompat.getLongVersionCode(private!!.packageInfo)\n        ) {\n            shared\n        } else {\n            private\n        }\n    }\n\n    /**\n     * Returns true if the given package is an extension.\n     *\n     * @param pkgInfo The package info of the application.\n     */\n    private fun isPackageAnExtension(pkgInfo: PackageInfo): Boolean {\n        return pkgInfo.reqFeatures.orEmpty().any { it.name == EXTENSION_FEATURE }\n    }\n\n    /**\n     * Returns the signatures of the package or null if it's not signed.\n     *\n     * @param pkgInfo The package info of the application.\n     * @return List SHA256 digest of the signatures\n     */\n    private fun getSignatures(pkgInfo: PackageInfo): List<String>? {\n        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            val signingInfo = pkgInfo.signingInfo!!\n            if (signingInfo.hasMultipleSigners()) {\n                signingInfo.apkContentsSigners\n            } else {\n                signingInfo.signingCertificateHistory\n            }\n        } else {\n            @Suppress(\"DEPRECATION\")\n            pkgInfo.signatures\n        }\n            ?.map { Hash.sha256(it.toByteArray()) }\n            ?.toList()\n    }\n\n    /**\n     * On Android 13+ the ApplicationInfo generated by getPackageArchiveInfo doesn't\n     * have sourceDir which breaks assets loading (used for getting icon here).\n     */\n    private fun ApplicationInfo.fixBasePaths(apkPath: String) {\n        if (sourceDir == null) {\n            sourceDir = apkPath\n        }\n        if (publicSourceDir == null) {\n            publicSourceDir = apkPath\n        }\n    }\n\n    private data class AnimeExtensionInfo(\n        val packageInfo: PackageInfo,\n        val isShared: Boolean,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/MangaExtensionManager.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport eu.kanade.domain.extension.manga.interactor.TrustMangaExtension\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.ExtensionUpdateNotifier\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.manga.api.MangaExtensionApi\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.extension.manga.model.MangaLoadResult\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstallReceiver\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstaller\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionLoader\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.emptyFlow\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.Locale\n\n/**\n * The manager of extensions installed as another apk which extend the available sources. It handles\n * the retrieval of remotely available extensions as well as installing, updating and removing them.\n * To avoid malicious distribution, every extension must be signed and it will only be loaded if its\n * signature is trusted, otherwise the user will be prompted with a warning to trust it before being\n * loaded.\n */\nclass MangaExtensionManager(\n    private val context: Context,\n    private val preferences: SourcePreferences = Injekt.get(),\n    private val trustExtension: TrustMangaExtension = Injekt.get(),\n) {\n\n    val scope = CoroutineScope(SupervisorJob())\n\n    private val _isInitialized = MutableStateFlow(false)\n    val isInitialized: StateFlow<Boolean> = _isInitialized.asStateFlow()\n\n    /**\n     * API where all the available extensions can be found.\n     */\n    private val api = MangaExtensionApi()\n\n    /**\n     * The installer which installs, updates and uninstalls the extensions.\n     */\n    private val installer by lazy { MangaExtensionInstaller(context) }\n\n    private val iconMap = mutableMapOf<String, Drawable>()\n\n    private val installedExtensionsMapFlow = MutableStateFlow(emptyMap<String, MangaExtension.Installed>())\n    val installedExtensionsFlow = installedExtensionsMapFlow.mapExtensions(scope)\n\n    private val availableExtensionsMapFlow = MutableStateFlow(emptyMap<String, MangaExtension.Available>())\n    val availableExtensionsFlow = availableExtensionsMapFlow.mapExtensions(scope)\n\n    private val untrustedExtensionsMapFlow = MutableStateFlow(emptyMap<String, MangaExtension.Untrusted>())\n    val untrustedExtensionsFlow = untrustedExtensionsMapFlow.mapExtensions(scope)\n\n    init {\n        initExtensions()\n        MangaExtensionInstallReceiver(InstallationListener()).register(context)\n    }\n\n    private var subLanguagesEnabledOnFirstRun = preferences.enabledLanguages().isSet()\n\n    fun getExtensionPackage(sourceId: Long): String? {\n        return installedExtensionsFlow.value.find { extension ->\n            extension.sources.any { it.id == sourceId }\n        }\n            ?.pkgName\n    }\n\n    fun getExtensionPackageAsFlow(sourceId: Long): Flow<String?> {\n        return installedExtensionsFlow.map { extensions ->\n            extensions.find { extension ->\n                extension.sources.any { it.id == sourceId }\n            }\n                ?.pkgName\n        }\n    }\n\n    fun getAppIconForSource(sourceId: Long): Drawable? {\n        val pkgName = installedExtensionsMapFlow.value.values\n            .find { ext ->\n                ext.sources.any { it.id == sourceId }\n            }\n            ?.pkgName\n            ?: return null\n\n        return iconMap[pkgName] ?: iconMap.getOrPut(pkgName) {\n            MangaExtensionLoader.getMangaExtensionPackageInfoFromPkgName(context, pkgName)!!.applicationInfo!!\n                .loadIcon(context.packageManager)\n        }\n    }\n\n    private var availableExtensionsSourcesData: Map<Long, StubMangaSource> = emptyMap()\n\n    private fun setupAvailableExtensionsSourcesDataMap(extensions: List<MangaExtension.Available>) {\n        if (extensions.isEmpty()) return\n        availableExtensionsSourcesData = extensions\n            .flatMap { ext -> ext.sources.map { it.toStubSource() } }\n            .associateBy { it.id }\n    }\n\n    fun getSourceData(id: Long) = availableExtensionsSourcesData[id]\n\n    /**\n     * Loads and registers the installed extensions.\n     */\n    private fun initExtensions() {\n        val extensions = MangaExtensionLoader.loadMangaExtensions(context)\n\n        installedExtensionsMapFlow.value = extensions\n            .filterIsInstance<MangaLoadResult.Success>()\n            .associate { it.extension.pkgName to it.extension }\n\n        untrustedExtensionsMapFlow.value = extensions\n            .filterIsInstance<MangaLoadResult.Untrusted>()\n            .associate { it.extension.pkgName to it.extension }\n\n        _isInitialized.value = true\n    }\n\n    /**\n     * Finds the available extensions in the [api] and updates [availableExtensionsMapFlow].\n     */\n    suspend fun findAvailableExtensions() {\n        val extensions: List<MangaExtension.Available> = try {\n            api.findExtensions()\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            withUIContext { context.toast(MR.strings.extension_api_error) }\n            emptyList()\n        }\n\n        enableAdditionalSubLanguages(extensions)\n\n        availableExtensionsMapFlow.value = extensions.associateBy { it.pkgName }\n        updatedInstalledExtensionsStatuses(extensions)\n        setupAvailableExtensionsSourcesDataMap(extensions)\n    }\n\n    /**\n     * Enables the additional sub-languages in the app first run. This addresses\n     * the issue where users still need to enable some specific languages even when\n     * the device language is inside that major group. As an example, if a user\n     * has a zh device language, the app will also enable zh-Hans and zh-Hant.\n     *\n     * If the user have already changed the enabledLanguages preference value once,\n     * the new languages will not be added to respect the user enabled choices.\n     */\n    private fun enableAdditionalSubLanguages(extensions: List<MangaExtension.Available>) {\n        if (subLanguagesEnabledOnFirstRun || extensions.isEmpty()) {\n            return\n        }\n\n        // Use the source lang as some aren't present on the extension level.\n        val availableLanguages = extensions\n            .flatMap(MangaExtension.Available::sources)\n            .distinctBy(MangaExtension.Available.MangaSource::lang)\n            .map(MangaExtension.Available.MangaSource::lang)\n\n        val deviceLanguage = Locale.getDefault().language\n        val defaultLanguages = preferences.enabledLanguages().defaultValue()\n        val languagesToEnable = availableLanguages.filter {\n            it != deviceLanguage && it.startsWith(deviceLanguage)\n        }\n\n        preferences.enabledLanguages().set(defaultLanguages + languagesToEnable)\n        subLanguagesEnabledOnFirstRun = true\n    }\n\n    /**\n     * Sets the update field of the installed extensions with the given [availableExtensions].\n     *\n     * @param availableExtensions The list of extensions given by the [api].\n     */\n    private fun updatedInstalledExtensionsStatuses(\n        availableExtensions: List<MangaExtension.Available>,\n    ) {\n        if (availableExtensions.isEmpty()) {\n            preferences.mangaExtensionUpdatesCount().set(0)\n            return\n        }\n\n        val installedExtensionsMap = installedExtensionsMapFlow.value.toMutableMap()\n        var changed = false\n\n        for ((pkgName, extension) in installedExtensionsMap) {\n            val availableExt = availableExtensions.find { it.pkgName == pkgName }\n\n            if (availableExt == null && !extension.isObsolete) {\n                installedExtensionsMap[pkgName] = extension.copy(isObsolete = true)\n                changed = true\n            } else if (availableExt != null) {\n                val hasUpdate = extension.updateExists(availableExt)\n                if (extension.hasUpdate != hasUpdate) {\n                    installedExtensionsMap[pkgName] = extension.copy(\n                        hasUpdate = hasUpdate,\n                        repoUrl = availableExt.repoUrl,\n                    )\n                } else {\n                    installedExtensionsMap[pkgName] = extension.copy(\n                        repoUrl = availableExt.repoUrl,\n                    )\n                }\n                changed = true\n            }\n        }\n        if (changed) {\n            installedExtensionsMapFlow.value = installedExtensionsMap\n        }\n        updatePendingUpdatesCount()\n    }\n\n    /**\n     * Returns a flow of the installation process for the given extension. It will complete\n     * once the extension is installed or throws an error. The process will be canceled if\n     * unsubscribed before its completion.\n     *\n     * @param extension The extension to be installed.\n     */\n    fun installExtension(extension: MangaExtension.Available): Flow<InstallStep> {\n        return installer.downloadAndInstall(api.getApkUrl(extension), extension)\n    }\n\n    /**\n     * Returns a flow of the installation process for the given extension. It will complete\n     * once the extension is updated or throws an error. The process will be canceled if\n     * unsubscribed before its completion.\n     *\n     * @param extension The extension to be updated.\n     */\n    fun updateExtension(extension: MangaExtension.Installed): Flow<InstallStep> {\n        val availableExt = availableExtensionsMapFlow.value[extension.pkgName] ?: return emptyFlow()\n        return installExtension(availableExt)\n    }\n\n    fun cancelInstallUpdateExtension(extension: MangaExtension) {\n        installer.cancelInstall(extension.pkgName)\n    }\n\n    /**\n     * Sets to \"installing\" status of an extension installation.\n     *\n     * @param downloadId The id of the download.\n     */\n    fun setInstalling(downloadId: Long) {\n        installer.updateInstallStep(downloadId, InstallStep.Installing)\n    }\n\n    fun updateInstallStep(downloadId: Long, step: InstallStep) {\n        installer.updateInstallStep(downloadId, step)\n    }\n\n    /**\n     * Uninstalls the extension that matches the given package name.\n     *\n     * @param extension The extension to uninstall.\n     */\n    fun uninstallExtension(extension: MangaExtension) {\n        installer.uninstallApk(extension.pkgName)\n    }\n\n    /**\n     * Adds the given extension to the list of trusted extensions. It also loads in background the\n     * now trusted extensions.\n     *\n     * @param extension the extension to trust\n     */\n    suspend fun trust(extension: MangaExtension.Untrusted) {\n        untrustedExtensionsMapFlow.value[extension.pkgName] ?: return\n\n        trustExtension.trust(extension.pkgName, extension.versionCode, extension.signatureHash)\n\n        untrustedExtensionsMapFlow.value -= extension.pkgName\n\n        MangaExtensionLoader.loadMangaExtensionFromPkgName(context, extension.pkgName)\n            .let { it as? MangaLoadResult.Success }\n            ?.let { registerNewExtension(it.extension) }\n    }\n\n    /**\n     * Registers the given extension in this and the source managers.\n     *\n     * @param extension The extension to be registered.\n     */\n    private fun registerNewExtension(extension: MangaExtension.Installed) {\n        installedExtensionsMapFlow.value += extension\n    }\n\n    /**\n     * Registers the given updated extension in this and the source managers previously removing\n     * the outdated ones.\n     *\n     * @param extension The extension to be registered.\n     */\n    private fun registerUpdatedExtension(extension: MangaExtension.Installed) {\n        installedExtensionsMapFlow.value += extension\n    }\n\n    /**\n     * Unregisters the extension in this and the source managers given its package name. Note this\n     * method is called for every uninstalled application in the system.\n     *\n     * @param pkgName The package name of the uninstalled application.\n     */\n    private fun unregisterExtension(pkgName: String) {\n        installedExtensionsMapFlow.value -= pkgName\n        untrustedExtensionsMapFlow.value -= pkgName\n    }\n\n    /**\n     * Listener which receives events of the extensions being installed, updated or removed.\n     */\n    private inner class InstallationListener : MangaExtensionInstallReceiver.Listener {\n\n        override fun onExtensionInstalled(extension: MangaExtension.Installed) {\n            registerNewExtension(extension.withUpdateCheck())\n            updatePendingUpdatesCount()\n        }\n\n        override fun onExtensionUpdated(extension: MangaExtension.Installed) {\n            registerUpdatedExtension(extension.withUpdateCheck())\n            updatePendingUpdatesCount()\n        }\n\n        override fun onExtensionUntrusted(extension: MangaExtension.Untrusted) {\n            installedExtensionsMapFlow.value -= extension.pkgName\n            untrustedExtensionsMapFlow.value += extension\n            updatePendingUpdatesCount()\n        }\n\n        override fun onPackageUninstalled(pkgName: String) {\n            MangaExtensionLoader.uninstallPrivateExtension(context, pkgName)\n            unregisterExtension(pkgName)\n            updatePendingUpdatesCount()\n        }\n    }\n\n    /**\n     * Extension method to set the update field of an installed extension.\n     */\n    private fun MangaExtension.Installed.withUpdateCheck(): MangaExtension.Installed {\n        return if (updateExists()) {\n            copy(hasUpdate = true)\n        } else {\n            this\n        }\n    }\n\n    private fun MangaExtension.Installed.updateExists(\n        availableExtension: MangaExtension.Available? = null,\n    ): Boolean {\n        val availableExt = availableExtension\n            ?: availableExtensionsMapFlow.value[pkgName]\n            ?: return false\n\n        return (availableExt.versionCode > versionCode || availableExt.libVersion > libVersion)\n    }\n\n    private fun updatePendingUpdatesCount() {\n        val pendingUpdateCount = installedExtensionsMapFlow.value.values.count { it.hasUpdate }\n        preferences.mangaExtensionUpdatesCount().set(pendingUpdateCount)\n        if (pendingUpdateCount == 0) {\n            ExtensionUpdateNotifier(context).dismiss()\n        }\n    }\n\n    private operator fun <T : MangaExtension> Map<String, T>.plus(extension: T) = plus(extension.pkgName to extension)\n\n    private fun <T : MangaExtension> StateFlow<Map<String, T>>.mapExtensions(\n        scope: CoroutineScope,\n    ): StateFlow<List<T>> {\n        return map { it.values.toList() }.stateIn(scope, SharingStarted.Lazily, value.values.toList())\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/api/MangaExtensionApi.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.api\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.extension.ExtensionUpdateNotifier\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.extension.manga.model.MangaLoadResult\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionLoader\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport mihon.domain.extensionrepo.manga.interactor.GetMangaExtensionRepo\nimport mihon.domain.extensionrepo.manga.interactor.UpdateMangaExtensionRepo\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport java.time.Instant\nimport kotlin.time.Duration.Companion.days\n\ninternal class MangaExtensionApi {\n\n    private val networkService: NetworkHelper by injectLazy()\n    private val preferenceStore: PreferenceStore by injectLazy()\n    private val getExtensionRepo: GetMangaExtensionRepo by injectLazy()\n    private val updateExtensionRepo: UpdateMangaExtensionRepo by injectLazy()\n    private val extensionManager: MangaExtensionManager by injectLazy()\n    private val json: Json by injectLazy()\n\n    private val lastExtCheck: Preference<Long> by lazy {\n        preferenceStore.getLong(\"last_ext_check\", 0)\n    }\n\n    suspend fun findExtensions(): List<MangaExtension.Available> {\n        return withIOContext {\n            getExtensionRepo.getAll()\n                .map { async { getExtensions(it) } }\n                .awaitAll()\n                .flatten()\n        }\n    }\n\n    private suspend fun getExtensions(extRepo: ExtensionRepo): List<MangaExtension.Available> {\n        val repoBaseUrl = extRepo.baseUrl\n        return try {\n            val response = networkService.client\n                .newCall(GET(\"$repoBaseUrl/index.min.json\"))\n                .awaitSuccess()\n\n            with(json) {\n                response\n                    .parseAs<List<ExtensionJsonObject>>()\n                    .toExtensions(repoBaseUrl)\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e) { \"Failed to get extensions from $repoBaseUrl\" }\n            emptyList()\n        }\n    }\n\n    suspend fun checkForUpdates(\n        context: Context,\n        fromAvailableExtensionList: Boolean = false,\n    ): List<MangaExtension.Installed>? {\n        // Limit checks to once a day at most\n        if (fromAvailableExtensionList &&\n            Instant.now().toEpochMilli() < lastExtCheck.get() + 1.days.inWholeMilliseconds\n        ) {\n            return null\n        }\n\n        // Update extension repo details\n        updateExtensionRepo.awaitAll()\n\n        val extensions = if (fromAvailableExtensionList) {\n            extensionManager.availableExtensionsFlow.value\n        } else {\n            findExtensions().also { lastExtCheck.set(Instant.now().toEpochMilli()) }\n        }\n\n        val installedExtensions = MangaExtensionLoader.loadMangaExtensions(context)\n            .filterIsInstance<MangaLoadResult.Success>()\n            .map { it.extension }\n\n        val extensionsWithUpdate = mutableListOf<MangaExtension.Installed>()\n        for (installedExt in installedExtensions) {\n            val pkgName = installedExt.pkgName\n            val availableExt = extensions.find { it.pkgName == pkgName } ?: continue\n            val hasUpdatedVer = availableExt.versionCode > installedExt.versionCode\n            val hasUpdatedLib = availableExt.libVersion > installedExt.libVersion\n            val hasUpdate = hasUpdatedVer || hasUpdatedLib\n            if (hasUpdate) {\n                extensionsWithUpdate.add(installedExt)\n            }\n        }\n\n        if (extensionsWithUpdate.isNotEmpty()) {\n            ExtensionUpdateNotifier(context).promptUpdates(extensionsWithUpdate.map { it.name })\n        }\n\n        return extensionsWithUpdate\n    }\n\n    private fun List<ExtensionJsonObject>.toExtensions(repoUrl: String): List<MangaExtension.Available> {\n        return this\n            .filter {\n                val libVersion = it.extractLibVersion()\n                libVersion >= MangaExtensionLoader.LIB_VERSION_MIN && libVersion <= MangaExtensionLoader.LIB_VERSION_MAX\n            }\n            .map {\n                MangaExtension.Available(\n                    name = it.name.substringAfter(\"Tachiyomi: \"),\n                    pkgName = it.pkg,\n                    versionName = it.version,\n                    versionCode = it.code,\n                    libVersion = it.extractLibVersion(),\n                    lang = it.lang,\n                    isNsfw = it.nsfw == 1,\n                    sources = it.sources?.map(extensionSourceMapper).orEmpty(),\n                    apkName = it.apk,\n                    iconUrl = \"$repoUrl/icon/${it.pkg}.png\",\n                    repoUrl = repoUrl,\n                )\n            }\n    }\n\n    fun getApkUrl(extension: MangaExtension.Available): String {\n        return \"${extension.repoUrl}/apk/${extension.apkName}\"\n    }\n\n    private fun ExtensionJsonObject.extractLibVersion(): Double {\n        return version.substringBeforeLast('.').toDouble()\n    }\n}\n\n@Serializable\nprivate data class ExtensionJsonObject(\n    val name: String,\n    val pkg: String,\n    val apk: String,\n    val lang: String,\n    val code: Long,\n    val version: String,\n    val nsfw: Int,\n    val sources: List<ExtensionSourceJsonObject>?,\n)\n\n@Serializable\nprivate data class ExtensionSourceJsonObject(\n    val id: Long,\n    val lang: String,\n    val name: String,\n    val baseUrl: String,\n)\n\nprivate val extensionSourceMapper: (ExtensionSourceJsonObject) -> MangaExtension.Available.MangaSource = {\n    MangaExtension.Available.MangaSource(\n        id = it.id,\n        lang = it.lang,\n        name = it.name,\n        baseUrl = it.baseUrl,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/InstallerManga.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.installer\n\nimport android.app.Service\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.net.Uri\nimport androidx.annotation.CallSuper\nimport androidx.localbroadcastmanager.content.LocalBroadcastManager\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport uy.kohesive.injekt.injectLazy\nimport java.util.Collections\nimport java.util.concurrent.atomic.AtomicReference\n\n/**\n * Base implementation class for extension installer. To be used inside a foreground [Service].\n */\nabstract class InstallerManga(private val service: Service) {\n\n    private val extensionManager: MangaExtensionManager by injectLazy()\n\n    private var waitingInstall = AtomicReference<Entry>(null)\n    private val queue = Collections.synchronizedList(mutableListOf<Entry>())\n\n    private val cancelReceiver = object : BroadcastReceiver() {\n        override fun onReceive(context: Context, intent: Intent) {\n            val downloadId = intent.getLongExtra(EXTRA_DOWNLOAD_ID, -1).takeIf { it >= 0 } ?: return\n            cancelQueue(downloadId)\n        }\n    }\n\n    /**\n     * Installer readiness. If false, queue check will not run.\n     *\n     * @see checkQueue\n     */\n    abstract var ready: Boolean\n\n    /**\n     * Add an item to install queue.\n     *\n     * @param downloadId Download ID as known by [MangaExtensionManager]\n     * @param uri Uri of APK to install\n     */\n    fun addToQueue(downloadId: Long, uri: Uri) {\n        queue.add(Entry(downloadId, uri))\n        checkQueue()\n    }\n\n    /**\n     * Proceeds to install the APK of this entry inside this method. Call [continueQueue]\n     * when the install process for this entry is finished to continue the queue.\n     *\n     * @param entry The [Entry] of item to process\n     * @see continueQueue\n     */\n    @CallSuper\n    open fun processEntry(entry: Entry) {\n        extensionManager.setInstalling(entry.downloadId)\n    }\n\n    /**\n     * Called before queue continues. Override this to handle when the removed entry is\n     * currently being processed.\n     *\n     * @return true if this entry can be removed from queue.\n     */\n    open fun cancelEntry(entry: Entry): Boolean {\n        return true\n    }\n\n    /**\n     * Tells the queue to continue processing the next entry and updates the install step\n     * of the completed entry ([waitingInstall]) to [MangaExtensionManager].\n     *\n     * @param resultStep new install step for the processed entry.\n     * @see waitingInstall\n     */\n    fun continueQueue(resultStep: InstallStep) {\n        val completedEntry = waitingInstall.getAndSet(null)\n        if (completedEntry != null) {\n            extensionManager.updateInstallStep(completedEntry.downloadId, resultStep)\n            checkQueue()\n        }\n    }\n\n    /**\n     * Checks the queue. The provided service will be stopped if the queue is empty.\n     * Will not be run when not ready.\n     *\n     * @see ready\n     */\n    fun checkQueue() {\n        if (!ready) {\n            return\n        }\n        if (queue.isEmpty()) {\n            service.stopSelf()\n            return\n        }\n        val nextEntry = queue.first()\n        if (waitingInstall.compareAndSet(null, nextEntry)) {\n            queue.removeAt(0)\n            processEntry(nextEntry)\n        }\n    }\n\n    /**\n     * Call this method when the provided service is destroyed.\n     */\n    @CallSuper\n    open fun onDestroy() {\n        LocalBroadcastManager.getInstance(service).unregisterReceiver(cancelReceiver)\n        queue.forEach { extensionManager.updateInstallStep(it.downloadId, InstallStep.Error) }\n        queue.clear()\n        waitingInstall.set(null)\n    }\n\n    protected fun getActiveEntry(): Entry? = waitingInstall.get()\n\n    /**\n     * Cancels queue for the provided download ID if exists.\n     *\n     * @param downloadId Download ID as known by [MangaExtensionManager]\n     */\n    private fun cancelQueue(downloadId: Long) {\n        val waitingInstall = this.waitingInstall.get()\n        val toCancel = queue.find { it.downloadId == downloadId } ?: waitingInstall ?: return\n        if (cancelEntry(toCancel)) {\n            queue.remove(toCancel)\n            if (waitingInstall == toCancel) {\n                // Currently processing removed entry, continue queue\n                this.waitingInstall.set(null)\n                checkQueue()\n            }\n            extensionManager.updateInstallStep(downloadId, InstallStep.Idle)\n        }\n    }\n\n    /**\n     * Install item to queue.\n     *\n     * @param downloadId Download ID as known by [MangaExtensionManager]\n     * @param uri Uri of APK to install\n     */\n    data class Entry(val downloadId: Long, val uri: Uri)\n\n    init {\n        val filter = IntentFilter(ACTION_CANCEL_QUEUE)\n        LocalBroadcastManager.getInstance(service).registerReceiver(cancelReceiver, filter)\n    }\n\n    companion object {\n        private const val ACTION_CANCEL_QUEUE = \"Installer.action.CANCEL_QUEUE\"\n        private const val EXTRA_DOWNLOAD_ID = \"Installer.extra.DOWNLOAD_ID\"\n\n        /**\n         * Attempts to cancel the installation entry for the provided download ID.\n         *\n         * @param downloadId Download ID as known by [MangaExtensionManager]\n         */\n        fun cancelInstallQueue(context: Context, downloadId: Long) {\n            val intent = Intent(ACTION_CANCEL_QUEUE)\n            intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId)\n            LocalBroadcastManager.getInstance(context).sendBroadcast(intent)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/PackageInstallerInstallerManga.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.installer\n\nimport android.app.PendingIntent\nimport android.app.Service\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.content.pm.PackageInstaller\nimport android.os.Build\nimport androidx.core.content.ContextCompat\nimport androidx.core.content.IntentSanitizer\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.util.lang.use\nimport eu.kanade.tachiyomi.util.system.getParcelableExtraCompat\nimport eu.kanade.tachiyomi.util.system.getUriSize\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nclass PackageInstallerInstallerManga(private val service: Service) : InstallerManga(service) {\n\n    private val packageInstaller = service.packageManager.packageInstaller\n\n    private val packageActionReceiver = object : BroadcastReceiver() {\n        override fun onReceive(context: Context, intent: Intent) {\n            when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE)) {\n                PackageInstaller.STATUS_PENDING_USER_ACTION -> {\n                    val userAction = intent.getParcelableExtraCompat<Intent>(Intent.EXTRA_INTENT)\n                        ?.run {\n                            // Doesn't actually needed as the receiver is actually not exported\n                            // But the warnings can't be suppressed without this\n                            IntentSanitizer.Builder()\n                                .allowAction(this.action!!)\n                                .allowExtra(PackageInstaller.EXTRA_SESSION_ID) { id -> id == activeSession?.second }\n                                .allowAnyComponent()\n                                .allowPackage {\n                                    // There is no way to check the actual installer name so allow all.\n                                    true\n                                }\n                                .build()\n                                .sanitizeByFiltering(this)\n                        }\n                    if (userAction == null) {\n                        logcat(LogPriority.ERROR) { \"Fatal error for $intent\" }\n                        continueQueue(InstallStep.Error)\n                        return\n                    }\n                    userAction.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                    service.startActivity(userAction)\n                }\n                PackageInstaller.STATUS_FAILURE_ABORTED -> {\n                    continueQueue(InstallStep.Idle)\n                }\n                PackageInstaller.STATUS_SUCCESS -> continueQueue(InstallStep.Installed)\n                else -> continueQueue(InstallStep.Error)\n            }\n        }\n    }\n\n    private var activeSession: Pair<Entry, Int>? = null\n\n    // Always ready\n    override var ready = true\n\n    override fun processEntry(entry: Entry) {\n        super.processEntry(entry)\n        activeSession = null\n        try {\n            val installParams = PackageInstaller.SessionParams(\n                PackageInstaller.SessionParams.MODE_FULL_INSTALL,\n            )\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                installParams.setRequireUserAction(\n                    PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED,\n                )\n            }\n            activeSession = entry to packageInstaller.createSession(installParams)\n            val fileSize = service.getUriSize(entry.uri) ?: throw IllegalStateException()\n            installParams.setSize(fileSize)\n\n            val inputStream = service.contentResolver.openInputStream(entry.uri) ?: throw IllegalStateException()\n            val session = packageInstaller.openSession(activeSession!!.second)\n            val outputStream = session.openWrite(entry.downloadId.toString(), 0, fileSize)\n            session.use {\n                arrayOf(inputStream, outputStream).use {\n                    inputStream.copyTo(outputStream)\n                    session.fsync(outputStream)\n                }\n\n                val intentSender = PendingIntent.getBroadcast(\n                    service,\n                    activeSession!!.second,\n                    Intent(INSTALL_ACTION).setPackage(service.packageName),\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0,\n                ).intentSender\n                session.commit(intentSender)\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to install extension ${entry.downloadId} ${entry.uri}\" }\n            activeSession?.let { (_, sessionId) ->\n                packageInstaller.abandonSession(sessionId)\n            }\n            continueQueue(InstallStep.Error)\n        }\n    }\n\n    override fun cancelEntry(entry: Entry): Boolean {\n        activeSession?.let { (activeEntry, sessionId) ->\n            if (activeEntry == entry) {\n                packageInstaller.abandonSession(sessionId)\n                return false\n            }\n        }\n        return true\n    }\n\n    override fun onDestroy() {\n        service.unregisterReceiver(packageActionReceiver)\n        super.onDestroy()\n    }\n\n    init {\n        ContextCompat.registerReceiver(\n            service,\n            packageActionReceiver,\n            IntentFilter(INSTALL_ACTION),\n            ContextCompat.RECEIVER_NOT_EXPORTED,\n        )\n    }\n}\n\nprivate const val INSTALL_ACTION = \"PackageInstallerInstaller.INSTALL_ACTION\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/ShizukuInstallerManga.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.installer\n\nimport android.app.Service\nimport android.content.pm.PackageManager\nimport android.os.Process\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.util.system.getUriSize\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport rikka.shizuku.Shizuku\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport java.io.BufferedReader\nimport java.io.InputStream\n\nclass ShizukuInstallerManga(private val service: Service) : InstallerManga(service) {\n\n    private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)\n\n    private val shizukuDeadListener = Shizuku.OnBinderDeadListener {\n        logcat { \"Shizuku was killed prematurely\" }\n        service.stopSelf()\n    }\n\n    private val shizukuPermissionListener = object : Shizuku.OnRequestPermissionResultListener {\n        override fun onRequestPermissionResult(requestCode: Int, grantResult: Int) {\n            if (requestCode == SHIZUKU_PERMISSION_REQUEST_CODE) {\n                if (grantResult == PackageManager.PERMISSION_GRANTED) {\n                    ready = true\n                    checkQueue()\n                } else {\n                    service.stopSelf()\n                }\n                Shizuku.removeRequestPermissionResultListener(this)\n            }\n        }\n    }\n\n    override var ready = false\n\n    override fun processEntry(entry: Entry) {\n        super.processEntry(entry)\n        scope.launch {\n            var sessionId: String? = null\n            try {\n                val size = service.getUriSize(entry.uri) ?: throw IllegalStateException()\n                service.contentResolver.openInputStream(entry.uri)!!.use {\n                    val userId = Process.myUserHandle().hashCode()\n                    val createCommand = \"pm install-create --user $userId -r -i ${service.packageName} -S $size\"\n                    val createResult = exec(createCommand)\n                    sessionId = SESSION_ID_REGEX.find(createResult.out)?.value\n                        ?: throw RuntimeException(\"Failed to create install session\")\n\n                    val writeResult = exec(\"pm install-write -S $size $sessionId base -\", it)\n                    if (writeResult.resultCode != 0) {\n                        throw RuntimeException(\"Failed to write APK to session $sessionId\")\n                    }\n\n                    val commitResult = exec(\"pm install-commit $sessionId\")\n                    if (commitResult.resultCode != 0) {\n                        throw RuntimeException(\"Failed to commit install session $sessionId\")\n                    }\n\n                    continueQueue(InstallStep.Installed)\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to install extension ${entry.downloadId} ${entry.uri}\" }\n                if (sessionId != null) {\n                    exec(\"pm install-abandon $sessionId\")\n                }\n                continueQueue(InstallStep.Error)\n            }\n        }\n    }\n\n    // Don't cancel if entry is already started installing\n    override fun cancelEntry(entry: Entry): Boolean = getActiveEntry() != entry\n\n    override fun onDestroy() {\n        Shizuku.removeBinderDeadListener(shizukuDeadListener)\n        Shizuku.removeRequestPermissionResultListener(shizukuPermissionListener)\n        scope.cancel()\n        super.onDestroy()\n    }\n\n    private fun exec(command: String, stdin: InputStream? = null): ShellResult {\n        @Suppress(\"DEPRECATION\")\n        val process = Shizuku.newProcess(arrayOf(\"sh\", \"-c\", command), null, null)\n        if (stdin != null) {\n            process.outputStream.use { stdin.copyTo(it) }\n        }\n        val output = process.inputStream.bufferedReader().use(BufferedReader::readText)\n        val resultCode = process.waitFor()\n        return ShellResult(resultCode, output)\n    }\n\n    private data class ShellResult(val resultCode: Int, val out: String)\n\n    init {\n        Shizuku.addBinderDeadListener(shizukuDeadListener)\n        ready = if (Shizuku.pingBinder()) {\n            if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {\n                true\n            } else {\n                Shizuku.addRequestPermissionResultListener(shizukuPermissionListener)\n                Shizuku.requestPermission(SHIZUKU_PERMISSION_REQUEST_CODE)\n                false\n            }\n        } else {\n            logcat(LogPriority.ERROR) { \"Shizuku is not ready to use\" }\n            service.toast(MR.strings.ext_installer_shizuku_stopped)\n            service.stopSelf()\n            false\n        }\n    }\n}\n\nprivate const val SHIZUKU_PERMISSION_REQUEST_CODE = 14045\nprivate val SESSION_ID_REGEX = Regex(\"(?<=\\\\[).+?(?=])\")\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/model/MangaExtension.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.model\n\nimport android.graphics.drawable.Drawable\nimport eu.kanade.tachiyomi.source.MangaSource\nimport tachiyomi.domain.source.manga.model.StubMangaSource\n\nsealed class MangaExtension {\n\n    abstract val name: String\n    abstract val pkgName: String\n    abstract val versionName: String\n    abstract val versionCode: Long\n    abstract val libVersion: Double\n    abstract val lang: String?\n    abstract val isNsfw: Boolean\n\n    data class Installed(\n        override val name: String,\n        override val pkgName: String,\n        override val versionName: String,\n        override val versionCode: Long,\n        override val libVersion: Double,\n        override val lang: String,\n        override val isNsfw: Boolean,\n        val pkgFactory: String?,\n        val sources: List<MangaSource>,\n        val icon: Drawable?,\n        val hasUpdate: Boolean = false,\n        val isObsolete: Boolean = false,\n        val isShared: Boolean,\n        val repoUrl: String? = null,\n    ) : MangaExtension()\n\n    data class Available(\n        override val name: String,\n        override val pkgName: String,\n        override val versionName: String,\n        override val versionCode: Long,\n        override val libVersion: Double,\n        override val lang: String,\n        override val isNsfw: Boolean,\n        val sources: List<MangaSource>,\n        val apkName: String,\n        val iconUrl: String,\n        val repoUrl: String,\n    ) : MangaExtension() {\n\n        data class MangaSource(\n            val id: Long,\n            val lang: String,\n            val name: String,\n            val baseUrl: String,\n        ) {\n            fun toStubSource(): StubMangaSource {\n                return StubMangaSource(\n                    id = this.id,\n                    lang = this.lang,\n                    name = this.name,\n                )\n            }\n        }\n    }\n\n    data class Untrusted(\n        override val name: String,\n        override val pkgName: String,\n        override val versionName: String,\n        override val versionCode: Long,\n        override val libVersion: Double,\n        val signatureHash: String,\n        override val lang: String? = null,\n        override val isNsfw: Boolean = false,\n    ) : MangaExtension()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/model/MangaLoadResult.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.model\n\nsealed interface MangaLoadResult {\n    data class Success(val extension: MangaExtension.Installed) : MangaLoadResult\n    data class Untrusted(val extension: MangaExtension.Untrusted) : MangaLoadResult\n    data object Error : MangaLoadResult\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallActivity.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.util\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.util.system.hasMiuiPackageInstaller\nimport eu.kanade.tachiyomi.util.system.toast\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * Activity used to install extensions, because we can only receive the result of the installation\n * with [startActivityForResult], which we need to update the UI.\n */\nclass MangaExtensionInstallActivity : Activity() {\n\n    // MIUI package installer bug workaround\n    private var ignoreUntil = 0L\n    private var ignoreResult = false\n    private var hasIgnoredResult = false\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        @Suppress(\"DEPRECATION\")\n        val installIntent = Intent(Intent.ACTION_INSTALL_PACKAGE)\n            .setDataAndType(intent.data, intent.type)\n            .putExtra(Intent.EXTRA_RETURN_RESULT, true)\n            .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)\n\n        if (hasMiuiPackageInstaller) {\n            ignoreResult = true\n            ignoreUntil = System.nanoTime() + 1.seconds.inWholeNanoseconds\n        }\n\n        try {\n            startActivityForResult(installIntent, INSTALL_REQUEST_CODE)\n        } catch (error: Exception) {\n            // Either install package can't be found (probably bots) or there's a security exception\n            // with the download manager. Nothing we can workaround.\n            toast(error.message)\n        }\n    }\n\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        if (ignoreResult && System.nanoTime() < ignoreUntil) {\n            hasIgnoredResult = true\n            return\n        }\n        if (requestCode == INSTALL_REQUEST_CODE) {\n            checkInstallationResult(resultCode)\n        }\n        finish()\n    }\n\n    override fun onStart() {\n        super.onStart()\n        if (hasIgnoredResult) {\n            checkInstallationResult(RESULT_CANCELED)\n            finish()\n        }\n    }\n\n    private fun checkInstallationResult(resultCode: Int) {\n        val downloadId = intent.extras!!.getLong(MangaExtensionInstaller.EXTRA_DOWNLOAD_ID)\n        val extensionManager = Injekt.get<MangaExtensionManager>()\n        val newStep = when (resultCode) {\n            RESULT_OK -> InstallStep.Installed\n            RESULT_CANCELED -> InstallStep.Idle\n            else -> InstallStep.Error\n        }\n        extensionManager.updateInstallStep(downloadId, newStep)\n    }\n}\n\nprivate const val INSTALL_REQUEST_CODE = 500\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallReceiver.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.util\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport androidx.core.content.ContextCompat\nimport androidx.core.net.toUri\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.extension.manga.model.MangaLoadResult\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\n/**\n * Broadcast receiver that listens for the system's packages installed, updated or removed, and only\n * notifies the given [listener] when the package is an extension.\n *\n * @param listener The listener that should be notified of extension installation events.\n */\ninternal class MangaExtensionInstallReceiver(private val listener: Listener) : BroadcastReceiver() {\n\n    val scope = CoroutineScope(SupervisorJob())\n\n    fun register(context: Context) {\n        ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_NOT_EXPORTED)\n    }\n\n    private val filter = IntentFilter().apply {\n        addAction(Intent.ACTION_PACKAGE_ADDED)\n        addAction(Intent.ACTION_PACKAGE_REPLACED)\n        addAction(Intent.ACTION_PACKAGE_REMOVED)\n        addAction(ACTION_EXTENSION_ADDED)\n        addAction(ACTION_EXTENSION_REPLACED)\n        addAction(ACTION_EXTENSION_REMOVED)\n        addDataScheme(\"package\")\n    }\n\n    /**\n     * Called when one of the events of the [filter] is received. When the package is an extension,\n     * it's loaded in background and it notifies the [listener] when finished.\n     */\n    override fun onReceive(context: Context, intent: Intent?) {\n        if (intent == null) return\n\n        when (intent.action) {\n            Intent.ACTION_PACKAGE_ADDED, ACTION_EXTENSION_ADDED -> {\n                if (isReplacing(intent)) return\n\n                scope.launch {\n                    when (val result = getExtensionFromIntent(context, intent)) {\n                        is MangaLoadResult.Success -> listener.onExtensionInstalled(result.extension)\n                        is MangaLoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension)\n                        else -> {}\n                    }\n                }\n            }\n            Intent.ACTION_PACKAGE_REPLACED, ACTION_EXTENSION_REPLACED -> {\n                scope.launch {\n                    when (val result = getExtensionFromIntent(context, intent)) {\n                        is MangaLoadResult.Success -> listener.onExtensionUpdated(result.extension)\n                        is MangaLoadResult.Untrusted -> listener.onExtensionUntrusted(result.extension)\n                        else -> {}\n                    }\n                }\n            }\n            Intent.ACTION_PACKAGE_REMOVED, ACTION_EXTENSION_REMOVED -> {\n                if (isReplacing(intent)) return\n\n                val pkgName = getPackageNameFromIntent(intent)\n                if (pkgName != null) {\n                    listener.onPackageUninstalled(pkgName)\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns true if this package is performing an update.\n     *\n     * @param intent The intent that triggered the event.\n     */\n    private fun isReplacing(intent: Intent): Boolean {\n        return intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)\n    }\n\n    /**\n     * Returns the extension triggered by the given intent.\n     *\n     * @param context The application context.\n     * @param intent The intent containing the package name of the extension.\n     */\n    private suspend fun getExtensionFromIntent(context: Context, intent: Intent?): MangaLoadResult {\n        val pkgName = getPackageNameFromIntent(intent)\n        if (pkgName == null) {\n            logcat(LogPriority.WARN) { \"Package name not found\" }\n            return MangaLoadResult.Error\n        }\n        return MangaExtensionLoader.loadMangaExtensionFromPkgName(context, pkgName)\n    }\n\n    /**\n     * Returns the package name of the installed, updated or removed application.\n     */\n    private fun getPackageNameFromIntent(intent: Intent?): String? {\n        return intent?.data?.encodedSchemeSpecificPart ?: return null\n    }\n\n    /**\n     * Listener that receives extension installation events.\n     */\n    interface Listener {\n        fun onExtensionInstalled(extension: MangaExtension.Installed)\n        fun onExtensionUpdated(extension: MangaExtension.Installed)\n        fun onExtensionUntrusted(extension: MangaExtension.Untrusted)\n        fun onPackageUninstalled(pkgName: String)\n    }\n\n    companion object {\n        private const val ACTION_EXTENSION_ADDED = \"${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_ADDED\"\n        private const val ACTION_EXTENSION_REPLACED = \"${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_REPLACED\"\n        private const val ACTION_EXTENSION_REMOVED = \"${BuildConfig.APPLICATION_ID}.ACTION_EXTENSION_REMOVED\"\n\n        fun notifyAdded(context: Context, pkgName: String) {\n            notify(context, pkgName, ACTION_EXTENSION_ADDED)\n        }\n\n        fun notifyReplaced(context: Context, pkgName: String) {\n            notify(context, pkgName, ACTION_EXTENSION_REPLACED)\n        }\n\n        fun notifyRemoved(context: Context, pkgName: String) {\n            notify(context, pkgName, ACTION_EXTENSION_REMOVED)\n        }\n\n        private fun notify(context: Context, pkgName: String, action: String) {\n            Intent(action).apply {\n                data = \"package:$pkgName\".toUri()\n                `package` = context.packageName\n                context.sendBroadcast(this)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallService.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.util\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.IBinder\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.extension.manga.installer.InstallerManga\nimport eu.kanade.tachiyomi.extension.manga.installer.PackageInstallerInstallerManga\nimport eu.kanade.tachiyomi.extension.manga.installer.ShizukuInstallerManga\nimport eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstaller.Companion.EXTRA_DOWNLOAD_ID\nimport eu.kanade.tachiyomi.util.system.getSerializableExtraCompat\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\n\nclass MangaExtensionInstallService : Service() {\n\n    private var installer: InstallerManga? = null\n\n    override fun onCreate() {\n        val notification = notificationBuilder(Notifications.CHANNEL_EXTENSIONS_UPDATE) {\n            setSmallIcon(R.drawable.ic_ani)\n            setAutoCancel(false)\n            setOngoing(true)\n            setShowWhen(false)\n            setContentTitle(stringResource(MR.strings.ext_install_service_notif))\n            setProgress(100, 100, true)\n        }.build()\n        startForeground(Notifications.ID_EXTENSION_INSTALLER, notification)\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val uri = intent?.data\n        val id = intent?.getLongExtra(EXTRA_DOWNLOAD_ID, -1)?.takeIf { it != -1L }\n        val installerUsed = intent?.getSerializableExtraCompat<BasePreferences.ExtensionInstaller>(\n            EXTRA_INSTALLER,\n        )\n        if (uri == null || id == null || installerUsed == null) {\n            stopSelf()\n            return START_NOT_STICKY\n        }\n\n        if (installer == null) {\n            installer = when (installerUsed) {\n                BasePreferences.ExtensionInstaller.PACKAGEINSTALLER -> PackageInstallerInstallerManga(\n                    this,\n                )\n                BasePreferences.ExtensionInstaller.SHIZUKU -> ShizukuInstallerManga(this)\n                else -> {\n                    logcat(LogPriority.ERROR) { \"Not implemented for installer $installerUsed\" }\n                    stopSelf()\n                    return START_NOT_STICKY\n                }\n            }\n        }\n        installer!!.addToQueue(id, uri)\n        return START_NOT_STICKY\n    }\n\n    override fun onDestroy() {\n        installer?.onDestroy()\n        installer = null\n    }\n\n    override fun onBind(i: Intent?): IBinder? = null\n\n    companion object {\n        private const val EXTRA_INSTALLER = \"EXTRA_INSTALLER\"\n\n        fun getIntent(\n            context: Context,\n            downloadId: Long,\n            uri: Uri,\n            installer: BasePreferences.ExtensionInstaller,\n        ): Intent {\n            return Intent(context, MangaExtensionInstallService::class.java)\n                .setDataAndType(uri, MangaExtensionInstaller.APK_MIME)\n                .putExtra(EXTRA_DOWNLOAD_ID, downloadId)\n                .putExtra(EXTRA_INSTALLER, installer)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstaller.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.util\n\nimport android.app.DownloadManager\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.net.Uri\nimport android.os.Environment\nimport androidx.core.content.ContextCompat\nimport androidx.core.content.getSystemService\nimport androidx.core.net.toUri\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.installer.InstallerManga\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.system.isPackageInstalled\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.mapNotNull\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.transformWhile\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport kotlin.time.Duration.Companion.seconds\n\n/**\n * The installer which installs, updates and uninstalls the extensions.\n *\n * @param context The application context.\n */\ninternal class MangaExtensionInstaller(private val context: Context) {\n\n    /**\n     * The system's download manager\n     */\n    private val downloadManager = context.getSystemService<DownloadManager>()!!\n\n    /**\n     * The broadcast receiver which listens to download completion events.\n     */\n    private val downloadReceiver = DownloadCompletionReceiver()\n\n    /**\n     * The currently requested downloads, with the package name (unique id) as key, and the id\n     * returned by the download manager.\n     */\n    private val activeDownloads = hashMapOf<String, Long>()\n\n    private val downloadsStateFlows = hashMapOf<Long, MutableStateFlow<InstallStep>>()\n\n    private val extensionInstaller = Injekt.get<BasePreferences>().extensionInstaller()\n\n    /**\n     * Adds the given extension to the downloads queue and returns an observable containing its\n     * step in the installation process.\n     *\n     * @param url The url of the apk.\n     * @param extension The extension to install.\n     */\n    fun downloadAndInstall(url: String, extension: MangaExtension): Flow<InstallStep> {\n        val pkgName = extension.pkgName\n\n        val oldDownload = activeDownloads[pkgName]\n        if (oldDownload != null) {\n            deleteDownload(pkgName)\n        }\n\n        // Register the receiver after removing (and unregistering) the previous download\n        downloadReceiver.register()\n\n        val downloadUri = url.toUri()\n        val request = DownloadManager.Request(downloadUri)\n            .setTitle(extension.name)\n            .setMimeType(APK_MIME)\n            .setDestinationInExternalFilesDir(\n                context,\n                Environment.DIRECTORY_DOWNLOADS,\n                downloadUri.lastPathSegment,\n            )\n            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)\n\n        val id = downloadManager.enqueue(request)\n        activeDownloads[pkgName] = id\n\n        val downloadStateFlow = MutableStateFlow(InstallStep.Pending)\n        downloadsStateFlows[id] = downloadStateFlow\n\n        // Poll download status\n        val pollStatusFlow = downloadStatusFlow(id).mapNotNull { downloadStatus ->\n            // Map to our model\n            when (downloadStatus) {\n                DownloadManager.STATUS_PENDING -> InstallStep.Pending\n                DownloadManager.STATUS_RUNNING -> InstallStep.Downloading\n                else -> null\n            }\n        }\n\n        return merge(downloadStateFlow, pollStatusFlow).transformWhile {\n            emit(it)\n            // Stop when the application is installed or errors\n            !it.isCompleted()\n        }.onCompletion {\n            // Always notify on main thread\n            withUIContext {\n                // Always remove the download when unsubscribed\n                deleteDownload(pkgName)\n            }\n        }\n    }\n\n    /**\n     * Returns a flow that polls the given download id for its status every second, as the\n     * manager doesn't have any notification system. It'll stop once the download finishes.\n     *\n     * @param id The id of the download to poll.\n     */\n    private fun downloadStatusFlow(id: Long): Flow<Int> = flow {\n        val query = DownloadManager.Query().setFilterById(id)\n\n        while (true) {\n            // Get the current download status\n            val downloadStatus = downloadManager.query(query).use { cursor ->\n                if (!cursor.moveToFirst()) return@flow\n                cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS))\n            }\n\n            emit(downloadStatus)\n\n            // Stop polling when the download fails or finishes\n            if (downloadStatus == DownloadManager.STATUS_SUCCESSFUL ||\n                downloadStatus == DownloadManager.STATUS_FAILED\n            ) {\n                return@flow\n            }\n\n            delay(1.seconds)\n        }\n    }\n        // Ignore duplicate results\n        .distinctUntilChanged()\n\n    /**\n     * Starts an intent to install the extension at the given uri.\n     *\n     * @param uri The uri of the extension to install.\n     */\n    fun installApk(downloadId: Long, uri: Uri) {\n        when (val installer = extensionInstaller.get()) {\n            BasePreferences.ExtensionInstaller.LEGACY -> {\n                val intent = Intent(context, MangaExtensionInstallActivity::class.java)\n                    .setDataAndType(uri, APK_MIME)\n                    .putExtra(EXTRA_DOWNLOAD_ID, downloadId)\n                    .setFlags(\n                        Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION,\n                    )\n\n                context.startActivity(intent)\n            }\n            BasePreferences.ExtensionInstaller.PRIVATE -> {\n                val extensionManager = Injekt.get<MangaExtensionManager>()\n                val tempFile = File(context.cacheDir, \"temp_$downloadId\")\n\n                if (tempFile.exists() && !tempFile.delete()) {\n                    // Unlikely but just in case\n                    extensionManager.updateInstallStep(downloadId, InstallStep.Error)\n                    return\n                }\n\n                try {\n                    context.contentResolver.openInputStream(uri)?.use { input ->\n                        tempFile.outputStream().use { output ->\n                            input.copyTo(output)\n                        }\n                    }\n\n                    if (MangaExtensionLoader.installPrivateExtensionFile(context, tempFile)) {\n                        extensionManager.updateInstallStep(downloadId, InstallStep.Installed)\n                    } else {\n                        extensionManager.updateInstallStep(downloadId, InstallStep.Error)\n                    }\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to read downloaded extension file.\" }\n                    extensionManager.updateInstallStep(downloadId, InstallStep.Error)\n                }\n\n                tempFile.delete()\n            }\n            else -> {\n                val intent =\n                    MangaExtensionInstallService.getIntent(context, downloadId, uri, installer)\n                ContextCompat.startForegroundService(context, intent)\n            }\n        }\n    }\n\n    /**\n     * Cancels extension install and remove from download manager and installer.\n     */\n    fun cancelInstall(pkgName: String) {\n        val downloadId = activeDownloads.remove(pkgName) ?: return\n        downloadManager.remove(downloadId)\n        InstallerManga.cancelInstallQueue(context, downloadId)\n    }\n\n    /**\n     * Starts an intent to uninstall the extension by the given package name.\n     *\n     * @param pkgName The package name of the extension to uninstall\n     */\n    fun uninstallApk(pkgName: String) {\n        if (context.isPackageInstalled(pkgName)) {\n            @Suppress(\"DEPRECATION\")\n            val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE, \"package:$pkgName\".toUri())\n                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n            context.startActivity(intent)\n        } else {\n            MangaExtensionLoader.uninstallPrivateExtension(context, pkgName)\n            MangaExtensionInstallReceiver.notifyRemoved(context, pkgName)\n        }\n    }\n\n    /**\n     * Sets the step of the installation of an extension.\n     *\n     * @param downloadId The id of the download.\n     * @param step New install step.\n     */\n    fun updateInstallStep(downloadId: Long, step: InstallStep) {\n        downloadsStateFlows[downloadId]?.let { it.value = step }\n    }\n\n    /**\n     * Deletes the download for the given package name.\n     *\n     * @param pkgName The package name of the download to delete.\n     */\n    private fun deleteDownload(pkgName: String) {\n        val downloadId = activeDownloads.remove(pkgName)\n        if (downloadId != null) {\n            downloadManager.remove(downloadId)\n            downloadsStateFlows.remove(downloadId)\n        }\n        if (activeDownloads.isEmpty()) {\n            downloadReceiver.unregister()\n        }\n    }\n\n    /**\n     * Receiver that listens to download status events.\n     */\n    private inner class DownloadCompletionReceiver : BroadcastReceiver() {\n\n        /**\n         * Whether this receiver is currently registered.\n         */\n        private var isRegistered = false\n\n        /**\n         * Registers this receiver if it's not already.\n         */\n        fun register() {\n            if (isRegistered) return\n            isRegistered = true\n\n            val filter = IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)\n            ContextCompat.registerReceiver(context, this, filter, ContextCompat.RECEIVER_EXPORTED)\n        }\n\n        /**\n         * Unregisters this receiver if it's not already.\n         */\n        fun unregister() {\n            if (!isRegistered) return\n            isRegistered = false\n\n            context.unregisterReceiver(this)\n        }\n\n        /**\n         * Called when a download event is received. It looks for the download in the current active\n         * downloads and notifies its installation step.\n         */\n        override fun onReceive(context: Context, intent: Intent?) {\n            val id = intent?.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0) ?: return\n\n            // Avoid events for downloads we didn't request\n            if (id !in activeDownloads.values) return\n\n            val uri = downloadManager.getUriForDownloadedFile(id)\n\n            // Set next installation step\n            if (uri == null) {\n                logcat(LogPriority.ERROR) { \"Couldn't locate downloaded APK\" }\n                updateInstallStep(id, InstallStep.Error)\n                return\n            }\n\n            val query = DownloadManager.Query().setFilterById(id)\n            downloadManager.query(query).use { cursor ->\n                if (cursor.moveToFirst()) {\n                    val localUri = cursor.getString(\n                        cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI),\n                    ).removePrefix(FILE_SCHEME)\n\n                    installApk(id, File(localUri).getUriCompat(context))\n                }\n            }\n        }\n    }\n\n    companion object {\n        const val APK_MIME = \"application/vnd.android.package-archive\"\n        const val EXTRA_DOWNLOAD_ID = \"ExtensionInstaller.extra.DOWNLOAD_ID\"\n        const val FILE_SCHEME = \"file://\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt",
    "content": "package eu.kanade.tachiyomi.extension.manga.util\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.pm.ApplicationInfo\nimport android.content.pm.PackageInfo\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport androidx.core.content.pm.PackageInfoCompat\nimport dalvik.system.PathClassLoader\nimport eu.kanade.domain.extension.manga.interactor.TrustMangaExtension\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.extension.manga.model.MangaLoadResult\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.SourceFactory\nimport eu.kanade.tachiyomi.util.lang.Hash\nimport eu.kanade.tachiyomi.util.storage.copyAndSetReadOnlyTo\nimport eu.kanade.tachiyomi.util.system.ChildFirstPathClassLoader\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\n\n/**\n * Class that handles the loading of the extensions. Supports two kinds of extensions:\n *\n * 1. Shared extension: This extension is installed to the system with package\n * installer, so other variants of Tachiyomi/Aniyomi and its forks can also use this extension.\n *\n * 2. Private extension: This extension is put inside private data directory of the\n * running app, so this extension can only be used by the running app and not shared\n * with other apps.\n *\n * When both kinds of extensions are installed with a same package name, shared\n * extension will be used unless the version codes are different. In that case the\n * one with higher version code will be used.\n */\n@SuppressLint(\"PackageManagerGetSignatures\")\ninternal object MangaExtensionLoader {\n\n    private val preferences: SourcePreferences by injectLazy()\n    private val trustExtension: TrustMangaExtension by injectLazy()\n    private val loadNsfwSource by lazy {\n        preferences.showNsfwSource().get()\n    }\n\n    private const val EXTENSION_FEATURE = \"tachiyomi.extension\"\n    private const val METADATA_SOURCE_CLASS = \"tachiyomi.extension.class\"\n    private const val METADATA_SOURCE_FACTORY = \"tachiyomi.extension.factory\"\n    private const val METADATA_NSFW = \"tachiyomi.extension.nsfw\"\n    const val LIB_VERSION_MIN = 1.4\n    const val LIB_VERSION_MAX = 1.5\n\n    @Suppress(\"DEPRECATION\")\n    private val PACKAGE_FLAGS = PackageManager.GET_CONFIGURATIONS or\n        PackageManager.GET_META_DATA or\n        PackageManager.GET_SIGNATURES or\n        (if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) PackageManager.GET_SIGNING_CERTIFICATES else 0)\n\n    private const val PRIVATE_EXTENSION_EXTENSION = \"ext\"\n\n    private fun getPrivateExtensionDir(context: Context) = File(context.filesDir, \"exts\")\n\n    fun installPrivateExtensionFile(context: Context, file: File): Boolean {\n        val extension = context.packageManager.getPackageArchiveInfo(\n            file.absolutePath,\n            PACKAGE_FLAGS,\n        )\n            ?.takeIf { isPackageAnExtension(it) } ?: return false\n        val currentExtension = getMangaExtensionPackageInfoFromPkgName(\n            context,\n            extension.packageName,\n        )\n\n        if (currentExtension != null) {\n            if (PackageInfoCompat.getLongVersionCode(extension) <\n                PackageInfoCompat.getLongVersionCode(currentExtension)\n            ) {\n                logcat(LogPriority.ERROR) { \"Installed extension version is higher. Downgrading is not allowed.\" }\n                return false\n            }\n\n            val extensionSignatures = getSignatures(extension)\n            if (extensionSignatures.isNullOrEmpty()) {\n                logcat(LogPriority.ERROR) { \"Extension to be installed is not signed.\" }\n                return false\n            }\n\n            if (!extensionSignatures.containsAll(getSignatures(currentExtension)!!)) {\n                logcat(LogPriority.ERROR) { \"Installed extension signature is not matched.\" }\n                return false\n            }\n        }\n\n        val target = File(\n            getPrivateExtensionDir(context),\n            \"${extension.packageName}.$PRIVATE_EXTENSION_EXTENSION\",\n        )\n        return try {\n            target.delete()\n            file.copyAndSetReadOnlyTo(target, overwrite = true)\n            if (currentExtension != null) {\n                MangaExtensionInstallReceiver.notifyReplaced(context, extension.packageName)\n            } else {\n                MangaExtensionInstallReceiver.notifyAdded(context, extension.packageName)\n            }\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to copy extension file.\" }\n            target.delete()\n            false\n        }\n    }\n\n    fun uninstallPrivateExtension(context: Context, pkgName: String) {\n        File(getPrivateExtensionDir(context), \"$pkgName.$PRIVATE_EXTENSION_EXTENSION\").delete()\n    }\n\n    /**\n     * Return a list of all the available extensions initialized concurrently.\n     *\n     * @param context The application context.\n     */\n    fun loadMangaExtensions(context: Context): List<MangaLoadResult> {\n        val pkgManager = context.packageManager\n\n        val installedPkgs = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n            pkgManager.getInstalledPackages(\n                PackageManager.PackageInfoFlags.of(PACKAGE_FLAGS.toLong()),\n            )\n        } else {\n            pkgManager.getInstalledPackages(PACKAGE_FLAGS)\n        }\n\n        val sharedExtPkgs = installedPkgs\n            .asSequence()\n            .filter { isPackageAnExtension(it) }\n            .map { MangaExtensionInfo(packageInfo = it, isShared = true) }\n\n        val privateExtPkgs = getPrivateExtensionDir(context)\n            .listFiles()\n            ?.asSequence()\n            ?.filter { it.isFile && it.extension == PRIVATE_EXTENSION_EXTENSION }\n            ?.mapNotNull {\n                // Just in case, since Android 14+ requires them to be read-only\n                if (it.canWrite()) {\n                    it.setReadOnly()\n                }\n\n                val path = it.absolutePath\n                pkgManager.getPackageArchiveInfo(path, PACKAGE_FLAGS)\n                    ?.apply { applicationInfo!!.fixBasePaths(path) }\n            }\n            ?.filter { isPackageAnExtension(it) }\n            ?.map { MangaExtensionInfo(packageInfo = it, isShared = false) }\n            ?: emptySequence()\n\n        val extPkgs = (sharedExtPkgs + privateExtPkgs)\n            // Remove duplicates. Shared takes priority than private by default\n            .distinctBy { it.packageInfo.packageName }\n            // Compare version number\n            .mapNotNull { sharedPkg ->\n                val privatePkg = privateExtPkgs\n                    .singleOrNull { it.packageInfo.packageName == sharedPkg.packageInfo.packageName }\n                selectExtensionPackage(sharedPkg, privatePkg)\n            }\n            .toList()\n\n        if (extPkgs.isEmpty()) return emptyList()\n\n        // Load each extension concurrently and wait for completion\n        return runBlocking {\n            val deferred = extPkgs.map {\n                async { loadMangaExtension(context, it) }\n            }\n            deferred.awaitAll()\n        }\n    }\n\n    /**\n     * Attempts to load an extension from the given package name. It checks if the extension\n     * contains the required feature flag before trying to load it.\n     */\n    suspend fun loadMangaExtensionFromPkgName(context: Context, pkgName: String): MangaLoadResult {\n        val extensionPackage = getMangaExtensionInfoFromPkgName(context, pkgName)\n        if (extensionPackage == null) {\n            logcat(LogPriority.ERROR) { \"Extension package is not found ($pkgName)\" }\n            return MangaLoadResult.Error\n        }\n        return loadMangaExtension(context, extensionPackage)\n    }\n\n    fun getMangaExtensionPackageInfoFromPkgName(context: Context, pkgName: String): PackageInfo? {\n        return getMangaExtensionInfoFromPkgName(context, pkgName)?.packageInfo\n    }\n\n    private fun getMangaExtensionInfoFromPkgName(context: Context, pkgName: String): MangaExtensionInfo? {\n        val privateExtensionFile = File(\n            getPrivateExtensionDir(context),\n            \"$pkgName.$PRIVATE_EXTENSION_EXTENSION\",\n        )\n        val privatePkg = if (privateExtensionFile.isFile) {\n            context.packageManager.getPackageArchiveInfo(\n                privateExtensionFile.absolutePath,\n                PACKAGE_FLAGS,\n            )\n                ?.takeIf { isPackageAnExtension(it) }\n                ?.let {\n                    it.applicationInfo!!.fixBasePaths(privateExtensionFile.absolutePath)\n                    MangaExtensionInfo(\n                        packageInfo = it,\n                        isShared = false,\n                    )\n                }\n        } else {\n            null\n        }\n\n        val sharedPkg = try {\n            context.packageManager.getPackageInfo(pkgName, PACKAGE_FLAGS)\n                .takeIf { isPackageAnExtension(it) }\n                ?.let {\n                    MangaExtensionInfo(\n                        packageInfo = it,\n                        isShared = true,\n                    )\n                }\n        } catch (error: PackageManager.NameNotFoundException) {\n            null\n        }\n\n        return selectExtensionPackage(sharedPkg, privatePkg)\n    }\n\n    /**\n     * Loads an extension\n     *\n     * @param context The application context.\n     * @param extensionInfo The extension to load.\n     */\n    private suspend fun loadMangaExtension(context: Context, extensionInfo: MangaExtensionInfo): MangaLoadResult {\n        val pkgManager = context.packageManager\n        val pkgInfo = extensionInfo.packageInfo\n        val appInfo = pkgInfo.applicationInfo!!\n        val pkgName = pkgInfo.packageName\n\n        val extName = pkgManager.getApplicationLabel(appInfo).toString().substringAfter(\n            \"Tachiyomi: \",\n        )\n        val versionName = pkgInfo.versionName\n        val versionCode = PackageInfoCompat.getLongVersionCode(pkgInfo)\n\n        if (versionName.isNullOrEmpty()) {\n            logcat(LogPriority.WARN) { \"Missing versionName for extension $extName\" }\n            return MangaLoadResult.Error\n        }\n\n        // Validate lib version\n        val libVersion = versionName.substringBeforeLast('.').toDoubleOrNull()\n        if (libVersion == null || libVersion < LIB_VERSION_MIN || libVersion > LIB_VERSION_MAX) {\n            logcat(LogPriority.WARN) {\n                \"Lib version is $libVersion, while only versions \" +\n                    \"$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed\"\n            }\n            return MangaLoadResult.Error\n        }\n\n        val signatures = getSignatures(pkgInfo)\n        if (signatures.isNullOrEmpty()) {\n            logcat(LogPriority.WARN) { \"Package $pkgName isn't signed\" }\n            return MangaLoadResult.Error\n        } else if (!trustExtension.isTrusted(pkgInfo, signatures)) {\n            val extension = MangaExtension.Untrusted(\n                extName,\n                pkgName,\n                versionName,\n                versionCode,\n                libVersion,\n                signatures.last(),\n            )\n            logcat(LogPriority.WARN) { \"Extension $pkgName isn't trusted\" }\n            return MangaLoadResult.Untrusted(extension)\n        }\n\n        val isNsfw = appInfo.metaData.getInt(METADATA_NSFW) == 1\n        if (!loadNsfwSource && isNsfw) {\n            logcat(LogPriority.WARN) { \"NSFW extension $pkgName not allowed\" }\n            return MangaLoadResult.Error\n        }\n\n        val classLoader = try {\n            ChildFirstPathClassLoader(appInfo.sourceDir, null, context.classLoader)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Extension load error: $extName ($pkgName)\" }\n            return MangaLoadResult.Error\n        }\n\n        val sources = appInfo.metaData.getString(METADATA_SOURCE_CLASS)!!\n            .split(\";\")\n            .map {\n                val sourceClass = it.trim()\n                if (sourceClass.startsWith(\".\")) {\n                    pkgInfo.packageName + sourceClass\n                } else {\n                    sourceClass\n                }\n            }\n            .flatMap {\n                try {\n                    when (val obj = Class.forName(it, false, classLoader).getDeclaredConstructor().newInstance()) {\n                        is MangaSource -> listOf(obj)\n                        is SourceFactory -> obj.createSources()\n                        else -> throw Exception(\"Unknown source class type: ${obj.javaClass}\")\n                    }\n                } catch (e: LinkageError) {\n                    try {\n                        val fallBackClassLoader = PathClassLoader(appInfo.sourceDir, null, context.classLoader)\n                        when (\n                            val obj = Class.forName(\n                                it,\n                                false,\n                                fallBackClassLoader,\n                            ).getDeclaredConstructor().newInstance()\n                        ) {\n                            is MangaSource -> {\n                                listOf(obj)\n                            }\n                            is SourceFactory -> obj.createSources()\n                            else -> throw Exception(\"Unknown source class type: ${obj.javaClass}\")\n                        }\n                    } catch (e: Throwable) {\n                        logcat(LogPriority.ERROR, e) { \"Extension load error: $extName ($it)\" }\n                        return MangaLoadResult.Error\n                    }\n                } catch (e: Throwable) {\n                    logcat(LogPriority.ERROR, e) { \"Extension load error: $extName ($it)\" }\n                    return MangaLoadResult.Error\n                }\n            }\n\n        val langs = sources.filterIsInstance<CatalogueSource>()\n            .map { it.lang }\n            .toSet()\n        val lang = when (langs.size) {\n            0 -> \"\"\n            1 -> langs.first()\n            else -> \"all\"\n        }\n\n        val extension = MangaExtension.Installed(\n            name = extName,\n            pkgName = pkgName,\n            versionName = versionName,\n            versionCode = versionCode,\n            libVersion = libVersion,\n            lang = lang,\n            isNsfw = isNsfw,\n            sources = sources,\n            pkgFactory = appInfo.metaData.getString(METADATA_SOURCE_FACTORY),\n            icon = appInfo.loadIcon(pkgManager),\n            isShared = extensionInfo.isShared,\n        )\n        return MangaLoadResult.Success(extension)\n    }\n\n    /**\n     * Choose which extension package to use based on version code\n     *\n     * @param shared extension installed to system\n     * @param private extension installed to data directory\n     */\n    private fun selectExtensionPackage(shared: MangaExtensionInfo?, private: MangaExtensionInfo?): MangaExtensionInfo? {\n        when {\n            private == null && shared != null -> return shared\n            shared == null && private != null -> return private\n            shared == null && private == null -> return null\n        }\n\n        return if (PackageInfoCompat.getLongVersionCode(shared!!.packageInfo) >=\n            PackageInfoCompat.getLongVersionCode(private!!.packageInfo)\n        ) {\n            shared\n        } else {\n            private\n        }\n    }\n\n    /**\n     * Returns true if the given package is an extension.\n     *\n     * @param pkgInfo The package info of the application.\n     */\n    private fun isPackageAnExtension(pkgInfo: PackageInfo): Boolean {\n        return pkgInfo.reqFeatures.orEmpty().any { it.name == EXTENSION_FEATURE }\n    }\n\n    /**\n     * Returns the signatures of the package or null if it's not signed.\n     *\n     * @param pkgInfo The package info of the application.\n     * @return List SHA256 digest of the signatures\n     */\n    private fun getSignatures(pkgInfo: PackageInfo): List<String>? {\n        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            val signingInfo = pkgInfo.signingInfo!!\n            if (signingInfo.hasMultipleSigners()) {\n                signingInfo.apkContentsSigners\n            } else {\n                signingInfo.signingCertificateHistory\n            }\n        } else {\n            @Suppress(\"DEPRECATION\")\n            pkgInfo.signatures\n        }\n            ?.map { Hash.sha256(it.toByteArray()) }\n            ?.toList()\n    }\n\n    /**\n     * On Android 13+ the ApplicationInfo generated by getPackageArchiveInfo doesn't\n     * have sourceDir which breaks assets loading (used for getting icon here).\n     */\n    private fun ApplicationInfo.fixBasePaths(apkPath: String) {\n        if (sourceDir == null) {\n            sourceDir = apkPath\n        }\n        if (publicSourceDir == null) {\n            publicSourceDir = apkPath\n        }\n    }\n\n    private data class MangaExtensionInfo(\n        val packageInfo: PackageInfo,\n        val isShared: Boolean,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/source/anime/AndroidAnimeSourceManager.kt",
    "content": "package eu.kanade.tachiyomi.source.anime\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.domain.source.anime.repository.AnimeStubSourceRepository\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport java.util.concurrent.ConcurrentHashMap\n\nclass AndroidAnimeSourceManager(\n    private val context: Context,\n    private val extensionManager: AnimeExtensionManager,\n    private val sourceRepository: AnimeStubSourceRepository,\n) : AnimeSourceManager {\n\n    private val _isInitialized = MutableStateFlow(false)\n    override val isInitialized: StateFlow<Boolean> = _isInitialized.asStateFlow()\n\n    private val downloadManager: AnimeDownloadManager by injectLazy()\n\n    private val scope = CoroutineScope(Job() + Dispatchers.IO)\n\n    private val sourcesMapFlow = MutableStateFlow(ConcurrentHashMap<Long, AnimeSource>())\n\n    private val stubSourcesMap = ConcurrentHashMap<Long, StubAnimeSource>()\n\n    override val catalogueSources: Flow<List<AnimeCatalogueSource>> = sourcesMapFlow.map {\n        it.values.filterIsInstance<AnimeCatalogueSource>()\n    }\n\n    init {\n        scope.launch {\n            extensionManager.installedExtensionsFlow\n                .collectLatest { extensions ->\n                    val mutableMap = ConcurrentHashMap<Long, AnimeSource>(\n                        mapOf(\n                            LocalAnimeSource.ID to LocalAnimeSource(\n                                context,\n                                Injekt.get(),\n                                Injekt.get(),\n                                Injekt.get(),\n                                Injekt.get(),\n                                Injekt.get(),\n                            ),\n                        ),\n                    )\n                    extensions.forEach { extension ->\n                        extension.sources.forEach {\n                            mutableMap[it.id] = it\n                            registerStubSource(StubAnimeSource.from(it))\n                        }\n                    }\n                    sourcesMapFlow.value = mutableMap\n                    _isInitialized.value = true\n                }\n        }\n\n        scope.launch {\n            sourceRepository.subscribeAllAnime()\n                .collectLatest { sources ->\n                    val mutableMap = stubSourcesMap.toMutableMap()\n                    sources.forEach {\n                        mutableMap[it.id] = it\n                    }\n                }\n        }\n    }\n\n    override fun get(sourceKey: Long): AnimeSource? {\n        return sourcesMapFlow.value[sourceKey]\n    }\n\n    override fun getOrStub(sourceKey: Long): AnimeSource {\n        return sourcesMapFlow.value[sourceKey] ?: stubSourcesMap.getOrPut(sourceKey) {\n            runBlocking { createStubSource(sourceKey) }\n        }\n    }\n\n    override fun getOnlineSources() = sourcesMapFlow.value.values.filterIsInstance<AnimeHttpSource>()\n\n    override fun getCatalogueSources() = sourcesMapFlow.value.values.filterIsInstance<AnimeCatalogueSource>()\n\n    override fun getStubSources(): List<StubAnimeSource> {\n        val onlineSourceIds = getOnlineSources().map { it.id }\n        return stubSourcesMap.values.filterNot { it.id in onlineSourceIds }\n    }\n\n    private fun registerStubSource(source: StubAnimeSource) {\n        scope.launch {\n            val dbSource = sourceRepository.getStubAnimeSource(source.id)\n            if (dbSource == source) return@launch\n            sourceRepository.upsertStubAnimeSource(source.id, source.lang, source.name)\n            if (dbSource != null) {\n                downloadManager.renameSource(dbSource, source)\n            }\n        }\n    }\n\n    private suspend fun createStubSource(id: Long): StubAnimeSource {\n        sourceRepository.getStubAnimeSource(id)?.let {\n            return it\n        }\n        extensionManager.getSourceData(id)?.let {\n            registerStubSource(it)\n            return it\n        }\n        return StubAnimeSource(id = id, lang = \"\", name = \"\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/source/anime/AnimeSourceExtensions.kt",
    "content": "package eu.kanade.tachiyomi.source.anime\n\nimport android.graphics.drawable.Drawable\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nfun AnimeSource.icon(): Drawable? = Injekt.get<AnimeExtensionManager>().getAppIconForSource(this.id)\n\nfun AnimeSource.getPreferenceKey(): String = \"source_$id\"\n\nfun AnimeSource.toStubSource(): StubAnimeSource = StubAnimeSource(id = id, lang = lang, name = name)\n\nfun AnimeSource.getNameForAnimeInfo(): String {\n    val preferences = Injekt.get<SourcePreferences>()\n    val enabledLanguages = preferences.enabledLanguages().get()\n        .filterNot { it in listOf(\"all\", \"other\") }\n    val hasOneActiveLanguages = enabledLanguages.size == 1\n    val isInEnabledLanguages = lang in enabledLanguages\n    return when {\n        // For edge cases where user disables a source they got manga of in their library.\n        hasOneActiveLanguages && !isInEnabledLanguages -> toString()\n        // Hide the language tag when only one language is used.\n        hasOneActiveLanguages && isInEnabledLanguages -> name\n        else -> toString()\n    }\n}\n\nfun AnimeSource.isLocalOrStub(): Boolean = isLocal() || this is StubAnimeSource\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/source/manga/AndroidMangaSourceManager.kt",
    "content": "package eu.kanade.tachiyomi.source.manga\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.domain.source.manga.repository.MangaStubSourceRepository\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport java.util.concurrent.ConcurrentHashMap\n\nclass AndroidMangaSourceManager(\n    private val context: Context,\n    private val extensionManager: MangaExtensionManager,\n    private val sourceRepository: MangaStubSourceRepository,\n) : MangaSourceManager {\n\n    private val _isInitialized = MutableStateFlow(false)\n    override val isInitialized: StateFlow<Boolean> = _isInitialized.asStateFlow()\n\n    private val downloadManager: MangaDownloadManager by injectLazy()\n\n    private val scope = CoroutineScope(Job() + Dispatchers.IO)\n\n    private val sourcesMapFlow = MutableStateFlow(ConcurrentHashMap<Long, MangaSource>())\n\n    private val stubSourcesMap = ConcurrentHashMap<Long, StubMangaSource>()\n\n    override val catalogueSources: Flow<List<CatalogueSource>> = sourcesMapFlow.map {\n        it.values.filterIsInstance<CatalogueSource>()\n    }\n\n    init {\n        scope.launch {\n            extensionManager.installedExtensionsFlow\n                .collectLatest { extensions ->\n                    val mutableMap = ConcurrentHashMap<Long, MangaSource>(\n                        mapOf(\n                            LocalMangaSource.ID to LocalMangaSource(\n                                context,\n                                Injekt.get(),\n                                Injekt.get(),\n                            ),\n                        ),\n                    )\n                    extensions.forEach { extension ->\n                        extension.sources.forEach {\n                            mutableMap[it.id] = it\n                            registerStubSource(StubMangaSource.from(it))\n                        }\n                    }\n                    sourcesMapFlow.value = mutableMap\n                    _isInitialized.value = true\n                }\n        }\n\n        scope.launch {\n            sourceRepository.subscribeAllManga()\n                .collectLatest { sources ->\n                    val mutableMap = stubSourcesMap.toMutableMap()\n                    sources.forEach {\n                        mutableMap[it.id] = it\n                    }\n                }\n        }\n    }\n\n    override fun get(sourceKey: Long): MangaSource? {\n        return sourcesMapFlow.value[sourceKey]\n    }\n\n    override fun getOrStub(sourceKey: Long): MangaSource {\n        return sourcesMapFlow.value[sourceKey] ?: stubSourcesMap.getOrPut(sourceKey) {\n            runBlocking { createStubSource(sourceKey) }\n        }\n    }\n\n    override fun getOnlineSources() = sourcesMapFlow.value.values.filterIsInstance<HttpSource>()\n\n    override fun getCatalogueSources() = sourcesMapFlow.value.values.filterIsInstance<CatalogueSource>()\n\n    override fun getStubSources(): List<StubMangaSource> {\n        val onlineSourceIds = getOnlineSources().map { it.id }\n        return stubSourcesMap.values.filterNot { it.id in onlineSourceIds }\n    }\n\n    private fun registerStubSource(source: StubMangaSource) {\n        scope.launch {\n            val dbSource = sourceRepository.getStubMangaSource(source.id)\n            if (dbSource == source) return@launch\n            sourceRepository.upsertStubMangaSource(source.id, source.lang, source.name)\n            if (dbSource != null) {\n                downloadManager.renameSource(dbSource, source)\n            }\n        }\n    }\n\n    private suspend fun createStubSource(id: Long): StubMangaSource {\n        sourceRepository.getStubMangaSource(id)?.let {\n            return it\n        }\n        extensionManager.getSourceData(id)?.let {\n            registerStubSource(it)\n            return it\n        }\n        return StubMangaSource(id = id, lang = \"\", name = \"\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/source/manga/MangaSourceExtensions.kt",
    "content": "package eu.kanade.tachiyomi.source.manga\n\nimport android.graphics.drawable.Drawable\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.source.MangaSource\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nfun MangaSource.icon(): Drawable? = Injekt.get<MangaExtensionManager>().getAppIconForSource(this.id)\n\nfun MangaSource.getPreferenceKey(): String = \"source_$id\"\n\nfun MangaSource.toStubSource(): StubMangaSource = StubMangaSource(id = id, lang = lang, name = name)\n\nfun MangaSource.getNameForMangaInfo(): String {\n    val preferences = Injekt.get<SourcePreferences>()\n    val enabledLanguages = preferences.enabledLanguages().get()\n        .filterNot { it in listOf(\"all\", \"other\") }\n    val hasOneActiveLanguages = enabledLanguages.size == 1\n    val isInEnabledLanguages = lang in enabledLanguages\n    return when {\n        // For edge cases where user disables a source they got manga of in their library.\n        hasOneActiveLanguages && !isInEnabledLanguages -> toString()\n        // Hide the language tag when only one language is used.\n        hasOneActiveLanguages && isInEnabledLanguages -> name\n        else -> toString()\n    }\n}\n\nfun MangaSource.isLocalOrStub(): Boolean = isLocal() || this is StubMangaSource\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.base.activity\n\nimport android.content.Context\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate\nimport eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegateImpl\nimport eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate\nimport eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegateImpl\nimport eu.kanade.tachiyomi.util.system.prepareTabletUiContext\n\nopen class BaseActivity :\n    AppCompatActivity(),\n    SecureActivityDelegate by SecureActivityDelegateImpl(),\n    ThemingDelegate by ThemingDelegateImpl() {\n\n    override fun attachBaseContext(newBase: Context) {\n        super.attachBaseContext(newBase.prepareTabletUiContext())\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        applyAppTheme(this)\n        super.onCreate(savedInstanceState)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt",
    "content": "package eu.kanade.tachiyomi.ui.base.delegate\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Build\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.lifecycle.DefaultLifecycleObserver\nimport androidx.lifecycle.LifecycleOwner\nimport androidx.lifecycle.lifecycleScope\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.ui.security.UnlockActivity\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported\nimport eu.kanade.tachiyomi.util.view.setSecureScreen\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\n\ninterface SecureActivityDelegate {\n    fun registerSecureActivity(activity: AppCompatActivity)\n\n    companion object {\n        /**\n         * Set to true if we need the first activity to authenticate.\n         *\n         * Always require unlock if app is killed.\n         */\n        var requireUnlock = true\n\n        fun onApplicationStopped() {\n            val preferences = Injekt.get<SecurityPreferences>()\n            if (!preferences.useAuthenticator().get()) return\n\n            if (!AuthenticatorUtil.isAuthenticating) {\n                // Return if app is closed in locked state\n                if (requireUnlock) return\n                // Save app close time if lock is delayed\n                if (preferences.lockAppAfter().get() > 0) {\n                    preferences.lastAppClosed().set(System.currentTimeMillis())\n                }\n            }\n        }\n\n        /**\n         * Checks if unlock is needed when app comes foreground.\n         */\n        fun onApplicationStart() {\n            val preferences = Injekt.get<SecurityPreferences>()\n            if (!preferences.useAuthenticator().get()) return\n\n            val lastClosedPref = preferences.lastAppClosed()\n\n            // `requireUnlock` can be true on process start or if app was closed in locked state\n            if (!AuthenticatorUtil.isAuthenticating && !requireUnlock) {\n                requireUnlock = when (val lockDelay = preferences.lockAppAfter().get()) {\n                    -1 -> false // Never\n                    0 -> true // Always\n                    else -> lastClosedPref.get() + lockDelay * 60_000 <= System.currentTimeMillis()\n                }\n            }\n\n            lastClosedPref.delete()\n        }\n\n        fun unlock() {\n            requireUnlock = false\n        }\n    }\n}\n\nclass SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObserver {\n\n    private lateinit var activity: AppCompatActivity\n\n    private val preferences: BasePreferences by injectLazy()\n    private val securityPreferences: SecurityPreferences by injectLazy()\n\n    override fun registerSecureActivity(activity: AppCompatActivity) {\n        this.activity = activity\n        activity.lifecycle.addObserver(this)\n    }\n\n    override fun onCreate(owner: LifecycleOwner) {\n        setSecureScreen()\n    }\n\n    override fun onResume(owner: LifecycleOwner) {\n        setAppLock()\n    }\n\n    private fun setSecureScreen() {\n        val secureScreenFlow = securityPreferences.secureScreen().changes()\n        val incognitoModeFlow = preferences.incognitoMode().changes()\n        combine(secureScreenFlow, incognitoModeFlow) { secureScreen, incognitoMode ->\n            secureScreen == SecurityPreferences.SecureScreenMode.ALWAYS ||\n                secureScreen == SecurityPreferences.SecureScreenMode.INCOGNITO &&\n                incognitoMode\n        }\n            .onEach(activity.window::setSecureScreen)\n            .launchIn(activity.lifecycleScope)\n    }\n\n    private fun setAppLock() {\n        if (!securityPreferences.useAuthenticator().get()) return\n        if (activity.isAuthenticationSupported()) {\n            if (!SecureActivityDelegate.requireUnlock) return\n            activity.startActivity(Intent(activity, UnlockActivity::class.java))\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n                activity.overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, 0, 0)\n            } else {\n                @Suppress(\"DEPRECATION\")\n                activity.overridePendingTransition(0, 0)\n            }\n        } else {\n            securityPreferences.useAuthenticator().set(false)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt",
    "content": "package eu.kanade.tachiyomi.ui.base.delegate\n\nimport android.app.Activity\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.AppTheme\nimport eu.kanade.tachiyomi.R\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ninterface ThemingDelegate {\n    fun applyAppTheme(activity: Activity)\n\n    companion object {\n        fun getThemeResIds(appTheme: AppTheme, isAmoled: Boolean): List<Int> {\n            return buildList(2) {\n                add(themeResources.getOrDefault(appTheme, R.style.Theme_Tachiyomi))\n                if (isAmoled) add(R.style.ThemeOverlay_Tachiyomi_Amoled)\n            }\n        }\n    }\n}\n\nclass ThemingDelegateImpl : ThemingDelegate {\n    override fun applyAppTheme(activity: Activity) {\n        val uiPreferences = Injekt.get<UiPreferences>()\n        ThemingDelegate.getThemeResIds(\n            uiPreferences.appTheme().get(),\n            uiPreferences.themeDarkAmoled().get(),\n        )\n            .forEach(activity::setTheme)\n    }\n}\n\nprivate val themeResources: Map<AppTheme, Int> = mapOf(\n    AppTheme.MONET to R.style.Theme_Tachiyomi_Monet,\n    AppTheme.COTTONCANDY to R.style.Theme_Tachiyomi_CottonCandy,\n    AppTheme.GREEN_APPLE to R.style.Theme_Tachiyomi_GreenApple,\n    AppTheme.LAVENDER to R.style.Theme_Tachiyomi_Lavender,\n    AppTheme.MIDNIGHT_DUSK to R.style.Theme_Tachiyomi_MidnightDusk,\n    AppTheme.MONOCHROME to R.style.Theme_Tachiyomi_Monochrome,\n    AppTheme.MOCHA to R.style.Theme_Tachiyomi_Mocha,\n    AppTheme.NORD to R.style.Theme_Tachiyomi_Nord,\n    AppTheme.STRAWBERRY_DAIQUIRI to R.style.Theme_Tachiyomi_StrawberryDaiquiri,\n    AppTheme.TAKO to R.style.Theme_Tachiyomi_Tako,\n    AppTheme.TEALTURQUOISE to R.style.Theme_Tachiyomi_TealTurquoise,\n    AppTheme.YINYANG to R.style.Theme_Tachiyomi_YinYang,\n    AppTheme.YOTSUBA to R.style.Theme_Tachiyomi_Yotsuba,\n    AppTheme.CLOUDFLARE to R.style.Theme_Tachiyomi_Cloudflare,\n    AppTheme.SAPPHIRE to R.style.Theme_Tachiyomi_Sapphire,\n    AppTheme.DOOM to R.style.Theme_Tachiyomi_Doom,\n    AppTheme.MATRIX to R.style.Theme_Tachiyomi_Matrix,\n    AppTheme.TIDAL_WAVE to R.style.Theme_Tachiyomi_TidalWave,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.presentation.components.TabbedScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionsScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.animeExtensionsTab\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.sources.migrateAnimeSourceTab\nimport eu.kanade.tachiyomi.ui.browse.anime.source.animeSourcesTab\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionsScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.mangaExtensionsTab\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.sources.migrateMangaSourceTab\nimport eu.kanade.tachiyomi.ui.browse.manga.source.mangaSourcesTab\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.channels.BufferOverflow\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object BrowseTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current is BrowseTab\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_browse_enter)\n            return TabOptions(\n                index = 3u,\n                title = stringResource(MR.strings.browse),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    // TODO: Find a way to let it open Global Anime/Manga Search depending on what Tab(e.g. Anime/Manga Source Tab) is open\n    override suspend fun onReselect(navigator: Navigator) {\n        navigator.push(GlobalAnimeSearchScreen())\n    }\n\n    private val switchToTabNumberChannel = Channel<Int>(1, BufferOverflow.DROP_OLDEST)\n\n    fun showExtension() {\n        switchToTabNumberChannel.trySend(3) // Manga extensions: tab no. 3\n    }\n\n    fun showAnimeExtension() {\n        switchToTabNumberChannel.trySend(2) // Anime extensions: tab no. 2\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n\n        // Hoisted for extensions tab's search bar\n        val mangaExtensionsScreenModel = rememberScreenModel { MangaExtensionsScreenModel() }\n        val mangaExtensionsState by mangaExtensionsScreenModel.state.collectAsState()\n\n        val animeExtensionsScreenModel = rememberScreenModel { AnimeExtensionsScreenModel() }\n        val animeExtensionsState by animeExtensionsScreenModel.state.collectAsState()\n\n        val tabs = persistentListOf(\n            animeSourcesTab(),\n            mangaSourcesTab(),\n            animeExtensionsTab(animeExtensionsScreenModel),\n            mangaExtensionsTab(mangaExtensionsScreenModel),\n            migrateAnimeSourceTab(),\n            migrateMangaSourceTab(),\n        )\n\n        val state = rememberPagerState { tabs.size }\n\n        TabbedScreen(\n            titleRes = MR.strings.browse,\n            tabs = tabs,\n            state = state,\n            mangaSearchQuery = mangaExtensionsState.searchQuery,\n            onChangeMangaSearchQuery = mangaExtensionsScreenModel::search,\n            animeSearchQuery = animeExtensionsState.searchQuery,\n            onChangeAnimeSearchQuery = animeExtensionsScreenModel::search,\n            scrollable = true,\n        )\n        LaunchedEffect(Unit) {\n            switchToTabNumberChannel.receiveAsFlow()\n                .collectLatest { state.scrollToPage(it) }\n        }\n\n        LaunchedEffect(Unit) {\n            (context as? MainActivity)?.ready = true\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionFilterScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.AnimeExtensionFilterScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass AnimeExtensionFilterScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { AnimeExtensionFilterScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        if (state is AnimeExtensionFilterState.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as AnimeExtensionFilterState.Success\n\n        AnimeExtensionFilterScreen(\n            navigateUp = navigator::pop,\n            state = successState,\n            onClickToggle = screenModel::toggle,\n        )\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest {\n                when (it) {\n                    AnimeExtensionFilterEvent.FailedFetchingLanguages -> {\n                        context.toast(MR.strings.internal_error)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionFilterScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionLanguages\nimport eu.kanade.domain.source.interactor.ToggleLanguage\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableSet\nimport kotlinx.collections.immutable.persistentSetOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeExtensionFilterScreenModel(\n    private val preferences: SourcePreferences = Injekt.get(),\n    private val getExtensionLanguages: GetAnimeExtensionLanguages = Injekt.get(),\n    private val toggleLanguage: ToggleLanguage = Injekt.get(),\n) : StateScreenModel<AnimeExtensionFilterState>(AnimeExtensionFilterState.Loading) {\n\n    private val _events: Channel<AnimeExtensionFilterEvent> = Channel()\n    val events: Flow<AnimeExtensionFilterEvent> = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            combine(\n                getExtensionLanguages.subscribe(),\n                preferences.enabledLanguages().changes(),\n            ) { a, b -> a to b }\n                .catch { throwable ->\n                    logcat(LogPriority.ERROR, throwable)\n                    _events.send(AnimeExtensionFilterEvent.FailedFetchingLanguages)\n                }\n                .collectLatest { (extensionLanguages, enabledLanguages) ->\n                    mutableState.update {\n                        AnimeExtensionFilterState.Success(\n                            languages = extensionLanguages.toImmutableList(),\n                            enabledLanguages = enabledLanguages.toImmutableSet(),\n                        )\n                    }\n                }\n        }\n    }\n\n    fun toggle(language: String) {\n        toggleLanguage.await(language)\n    }\n}\n\nsealed interface AnimeExtensionFilterEvent {\n    data object FailedFetchingLanguages : AnimeExtensionFilterEvent\n}\n\nsealed interface AnimeExtensionFilterState {\n\n    @Immutable\n    data object Loading : AnimeExtensionFilterState\n\n    @Immutable\n    data class Success(\n        val languages: ImmutableList<String>,\n        val enabledLanguages: ImmutableSet<String> = persistentSetOf(),\n    ) : AnimeExtensionFilterState {\n\n        val isEmpty: Boolean\n            get() = languages.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension\n\nimport android.app.Application\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionsByType\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\nclass AnimeExtensionsScreenModel(\n    preferences: SourcePreferences = Injekt.get(),\n    basePreferences: BasePreferences = Injekt.get(),\n    private val extensionManager: AnimeExtensionManager = Injekt.get(),\n    private val getExtensions: GetAnimeExtensionsByType = Injekt.get(),\n) : StateScreenModel<AnimeExtensionsScreenModel.State>(State()) {\n\n    private val currentDownloads = MutableStateFlow<Map<String, InstallStep>>(hashMapOf())\n\n    init {\n        val context = Injekt.get<Application>()\n        val extensionMapper: (Map<String, InstallStep>) -> ((AnimeExtension) -> AnimeExtensionUiModel.Item) = { map ->\n            {\n                AnimeExtensionUiModel.Item(it, map[it.pkgName] ?: InstallStep.Idle)\n            }\n        }\n        val queryFilter: (String) -> ((AnimeExtension) -> Boolean) = { query ->\n            filter@{ extension ->\n                if (query.isEmpty()) return@filter true\n                query.split(\",\").any { _input ->\n                    val input = _input.trim()\n                    if (input.isEmpty()) return@any false\n                    when (extension) {\n                        is AnimeExtension.Available -> {\n                            extension.sources.any {\n                                it.name.contains(input, ignoreCase = true) ||\n                                    it.baseUrl.contains(input, ignoreCase = true) ||\n                                    it.id == input.toLongOrNull()\n                            } ||\n                                extension.name.contains(input, ignoreCase = true)\n                        }\n                        is AnimeExtension.Installed -> {\n                            extension.sources.any {\n                                it.name.contains(input, ignoreCase = true) ||\n                                    it.id == input.toLongOrNull() ||\n                                    if (it is AnimeHttpSource) {\n                                        it.baseUrl.contains(\n                                            input,\n                                            ignoreCase = true,\n                                        )\n                                    } else {\n                                        false\n                                    }\n                            } ||\n                                extension.name.contains(input, ignoreCase = true)\n                        }\n                        is AnimeExtension.Untrusted -> extension.name.contains(\n                            input,\n                            ignoreCase = true,\n                        )\n                    }\n                }\n            }\n        }\n\n        screenModelScope.launchIO {\n            combine(\n                state.map { it.searchQuery }.distinctUntilChanged().debounce(SEARCH_DEBOUNCE_MILLIS),\n                currentDownloads,\n                getExtensions.subscribe(),\n            ) { query, downloads, (_updates, _installed, _available, _untrusted) ->\n                val searchQuery = query ?: \"\"\n\n                val itemsGroups: ItemGroups = mutableMapOf()\n\n                val updates = _updates.filter(queryFilter(searchQuery)).map(\n                    extensionMapper(downloads),\n                )\n                if (updates.isNotEmpty()) {\n                    itemsGroups[AnimeExtensionUiModel.Header.Resource(MR.strings.ext_updates_pending)] = updates\n                }\n\n                val installed = _installed.filter(queryFilter(searchQuery)).map(\n                    extensionMapper(downloads),\n                )\n                val untrusted = _untrusted.filter(queryFilter(searchQuery)).map(\n                    extensionMapper(downloads),\n                )\n                if (installed.isNotEmpty() || untrusted.isNotEmpty()) {\n                    itemsGroups[AnimeExtensionUiModel.Header.Resource(MR.strings.ext_installed)] = installed + untrusted\n                }\n\n                val languagesWithExtensions = _available\n                    .filter(queryFilter(searchQuery))\n                    .groupBy { it.lang }\n                    .toSortedMap(LocaleHelper.comparator)\n                    .map { (lang, exts) ->\n                        AnimeExtensionUiModel.Header.Text(\n                            LocaleHelper.getSourceDisplayName(lang, context),\n                        ) to exts.map(extensionMapper(downloads))\n                    }\n\n                if (languagesWithExtensions.isNotEmpty()) {\n                    itemsGroups.putAll(languagesWithExtensions)\n                }\n\n                itemsGroups\n            }\n                .collectLatest {\n                    mutableState.update { state ->\n                        state.copy(\n                            isLoading = false,\n                            items = it,\n                        )\n                    }\n                }\n        }\n        screenModelScope.launchIO { findAvailableExtensions() }\n\n        preferences.animeExtensionUpdatesCount().changes()\n            .onEach { mutableState.update { state -> state.copy(updates = it) } }\n            .launchIn(screenModelScope)\n\n        basePreferences.extensionInstaller().changes()\n            .onEach { mutableState.update { state -> state.copy(installer = it) } }\n            .launchIn(screenModelScope)\n    }\n\n    fun search(query: String?) {\n        mutableState.update {\n            it.copy(searchQuery = query)\n        }\n    }\n\n    fun updateAllExtensions() {\n        screenModelScope.launchIO {\n            state.value.items.values.flatten()\n                .map { it.extension }\n                .filterIsInstance<AnimeExtension.Installed>()\n                .filter { it.hasUpdate }\n                .forEach(::updateExtension)\n        }\n    }\n\n    fun installExtension(extension: AnimeExtension.Available) {\n        screenModelScope.launchIO {\n            extensionManager.installExtension(extension).collectToInstallUpdate(extension)\n        }\n    }\n\n    fun updateExtension(extension: AnimeExtension.Installed) {\n        screenModelScope.launchIO {\n            extensionManager.updateExtension(extension).collectToInstallUpdate(extension)\n        }\n    }\n\n    fun cancelInstallUpdateExtension(extension: AnimeExtension) {\n        extensionManager.cancelInstallUpdateExtension(extension)\n    }\n\n    private fun addDownloadState(extension: AnimeExtension, installStep: InstallStep) {\n        currentDownloads.update { it + Pair(extension.pkgName, installStep) }\n    }\n\n    private fun removeDownloadState(extension: AnimeExtension) {\n        currentDownloads.update { it - extension.pkgName }\n    }\n\n    private suspend fun Flow<InstallStep>.collectToInstallUpdate(extension: AnimeExtension) =\n        this\n            .onEach { installStep -> addDownloadState(extension, installStep) }\n            .onCompletion { removeDownloadState(extension) }\n            .collect()\n\n    fun uninstallExtension(extension: AnimeExtension) {\n        extensionManager.uninstallExtension(extension)\n    }\n\n    fun findAvailableExtensions() {\n        screenModelScope.launchIO {\n            mutableState.update { it.copy(isRefreshing = true) }\n            extensionManager.findAvailableExtensions()\n\n            // Fake slower refresh so it doesn't seem like it's not doing anything\n            delay(1.seconds)\n\n            mutableState.update { it.copy(isRefreshing = false) }\n        }\n    }\n\n    fun trustExtension(extension: AnimeExtension.Untrusted) {\n        screenModelScope.launch {\n            extensionManager.trust(extension)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val isRefreshing: Boolean = false,\n        val items: ItemGroups = mutableMapOf(),\n        val updates: Int = 0,\n        val installer: BasePreferences.ExtensionInstaller? = null,\n        val searchQuery: String? = null,\n    ) {\n        val isEmpty = items.isEmpty()\n    }\n}\n\ntypealias ItemGroups = MutableMap<AnimeExtensionUiModel.Header, List<AnimeExtensionUiModel.Item>>\n\nobject AnimeExtensionUiModel {\n    sealed interface Header {\n        data class Resource(val textRes: StringResource) : Header\n        data class Text(val text: String) : Header\n    }\n    data class Item(\n        val extension: AnimeExtension,\n        val installStep: InstallStep,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionsTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.AnimeExtensionScreen\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.more.settings.screen.browse.AnimeExtensionReposScreen\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.details.AnimeExtensionDetailsScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport eu.kanade.tachiyomi.util.system.isPackageInstalled\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun animeExtensionsTab(\n    extensionsScreenModel: AnimeExtensionsScreenModel,\n): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val context = LocalContext.current\n\n    val state by extensionsScreenModel.state.collectAsState()\n    var privateExtensionToUninstall by remember { mutableStateOf<AnimeExtension?>(null) }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime_extensions,\n        badgeNumber = state.updates.takeIf { it > 0 },\n        searchEnabled = true,\n        actions = persistentListOf(\n            AppBar.OverflowAction(\n                title = stringResource(MR.strings.action_filter),\n                onClick = {\n                    navigator.push(\n                        AnimeExtensionFilterScreen(),\n                    )\n                },\n            ),\n            AppBar.OverflowAction(\n                title = stringResource(MR.strings.label_extension_repos),\n                onClick = { navigator.push(AnimeExtensionReposScreen()) },\n            ),\n        ),\n        content = { contentPadding, _ ->\n            AnimeExtensionScreen(\n                state = state,\n                contentPadding = contentPadding,\n                searchQuery = state.searchQuery,\n                onLongClickItem = { extension ->\n                    when (extension) {\n                        is AnimeExtension.Available -> extensionsScreenModel.installExtension(\n                            extension,\n                        )\n                        else -> {\n                            if (context.isPackageInstalled(extension.pkgName)) {\n                                extensionsScreenModel.uninstallExtension(extension)\n                            } else {\n                                privateExtensionToUninstall = extension\n                            }\n                        }\n                    }\n                },\n                onClickItemCancel = extensionsScreenModel::cancelInstallUpdateExtension,\n                onClickUpdateAll = extensionsScreenModel::updateAllExtensions,\n                onOpenWebView = { extension ->\n                    extension.sources.getOrNull(0)?.let {\n                        navigator.push(\n                            WebViewScreen(\n                                url = it.baseUrl,\n                                initialTitle = it.name,\n                                sourceId = it.id,\n                            ),\n                        )\n                    }\n                },\n                onInstallExtension = extensionsScreenModel::installExtension,\n                onOpenExtension = { navigator.push(AnimeExtensionDetailsScreen(it.pkgName)) },\n                onTrustExtension = { extensionsScreenModel.trustExtension(it) },\n                onUninstallExtension = { extensionsScreenModel.uninstallExtension(it) },\n                onUpdateExtension = extensionsScreenModel::updateExtension,\n                onRefresh = extensionsScreenModel::findAvailableExtensions,\n            )\n\n            privateExtensionToUninstall?.let { extension ->\n                AnimeExtensionUninstallConfirmation(\n                    extensionName = extension.name,\n                    onClickConfirm = {\n                        extensionsScreenModel.uninstallExtension(extension)\n                    },\n                    onDismissRequest = {\n                        privateExtensionToUninstall = null\n                    },\n                )\n            }\n        },\n    )\n}\n\n@Composable\nprivate fun AnimeExtensionUninstallConfirmation(\n    extensionName: String,\n    onClickConfirm: () -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    AlertDialog(\n        title = {\n            Text(text = stringResource(MR.strings.ext_confirm_remove))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.remove_private_extension_message, extensionName))\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onClickConfirm()\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.ext_remove))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        onDismissRequest = onDismissRequest,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/details/AnimeExtensionDetailsScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension.details\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.AnimeExtensionDetailsScreen\nimport eu.kanade.presentation.util.Screen\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\ndata class AnimeExtensionDetailsScreen(\n    private val pkgName: String,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val screenModel = rememberScreenModel {\n            AnimeExtensionDetailsScreenModel(\n                pkgName = pkgName,\n                context = context,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        if (state.isLoading) {\n            LoadingScreen()\n            return\n        }\n\n        val navigator = LocalNavigator.currentOrThrow\n\n        AnimeExtensionDetailsScreen(\n            navigateUp = navigator::pop,\n            state = state,\n            onClickSourcePreferences = { navigator.push(AnimeSourcePreferencesScreen(it)) },\n            onClickEnableAll = { screenModel.toggleSources(true) },\n            onClickDisableAll = { screenModel.toggleSources(false) },\n            onClickClearCookies = screenModel::clearCookies,\n            onClickUninstall = screenModel::uninstallExtension,\n            onClickSource = screenModel::toggleSource,\n            onClickIncognito = screenModel::toggleIncognito,\n        )\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                if (event is AnimeExtensionDetailsEvent.Uninstalled) {\n                    navigator.pop()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/details/AnimeExtensionDetailsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension.details\n\nimport android.content.Context\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.extension.anime.interactor.AnimeExtensionSourceItem\nimport eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionSources\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeIncognito\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeSource\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.anime.model.AnimeExtension\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeExtensionDetailsScreenModel(\n    pkgName: String,\n    context: Context,\n    private val network: NetworkHelper = Injekt.get(),\n    private val extensionManager: AnimeExtensionManager = Injekt.get(),\n    private val getExtensionSources: GetAnimeExtensionSources = Injekt.get(),\n    private val toggleSource: ToggleAnimeSource = Injekt.get(),\n    private val toggleIncognito: ToggleAnimeIncognito = Injekt.get(),\n    private val preferences: SourcePreferences = Injekt.get(),\n) : StateScreenModel<AnimeExtensionDetailsScreenModel.State>(State()) {\n\n    private val _events: Channel<AnimeExtensionDetailsEvent> = Channel()\n    val events: Flow<AnimeExtensionDetailsEvent> = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            launch {\n                extensionManager.installedExtensionsFlow\n                    .map { it.firstOrNull { extension -> extension.pkgName == pkgName } }\n                    .collectLatest { extension ->\n                        if (extension == null) {\n                            _events.send(AnimeExtensionDetailsEvent.Uninstalled)\n                            return@collectLatest\n                        }\n                        mutableState.update { state ->\n                            state.copy(extension = extension)\n                        }\n                    }\n            }\n            launch {\n                state.collectLatest { state ->\n                    if (state.extension == null) return@collectLatest\n                    getExtensionSources.subscribe(state.extension)\n                        .map {\n                            it.sortedWith(\n                                compareBy(\n                                    { !it.enabled },\n                                    { item ->\n                                        item.source.name.takeIf { item.labelAsName }\n                                            ?: LocaleHelper.getSourceDisplayName(\n                                                item.source.lang,\n                                                context,\n                                            ).lowercase()\n                                    },\n                                ),\n                            )\n                        }\n                        .catch { throwable ->\n                            logcat(LogPriority.ERROR, throwable)\n                            mutableState.update { it.copy(_sources = persistentListOf()) }\n                        }\n                        .collectLatest { sources ->\n                            mutableState.update { it.copy(_sources = sources.toImmutableList()) }\n                        }\n                }\n            }\n            launch {\n                preferences.incognitoAnimeExtensions()\n                    .changes()\n                    .map { pkgName in it }\n                    .distinctUntilChanged()\n                    .collectLatest { isIncognito ->\n                        mutableState.update { it.copy(isIncognito = isIncognito) }\n                    }\n            }\n        }\n    }\n\n    fun clearCookies() {\n        val extension = state.value.extension ?: return\n\n        val urls = extension.sources\n            .filterIsInstance<HttpSource>()\n            .mapNotNull { it.baseUrl.takeUnless { url -> url.isEmpty() } }\n            .distinct()\n\n        val cleared = urls.sumOf {\n            try {\n                network.cookieJar.remove(it.toHttpUrl())\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to clear cookies for $it\" }\n                0\n            }\n        }\n\n        logcat { \"Cleared $cleared cookies for: ${urls.joinToString()}\" }\n    }\n\n    fun uninstallExtension() {\n        val extension = state.value.extension ?: return\n        extensionManager.uninstallExtension(extension)\n    }\n\n    fun toggleSource(sourceId: Long) {\n        toggleSource.await(sourceId)\n    }\n\n    fun toggleSources(enable: Boolean) {\n        state.value.extension?.sources\n            ?.map { it.id }\n            ?.let { toggleSource.await(it, enable) }\n    }\n\n    fun toggleIncognito(enable: Boolean) {\n        state.value.extension?.pkgName?.let { packageName ->\n            toggleIncognito.await(packageName, enable)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val extension: AnimeExtension.Installed? = null,\n        val isIncognito: Boolean = false,\n        private val _sources: ImmutableList<AnimeExtensionSourceItem>? = null,\n    ) {\n\n        val sources: ImmutableList<AnimeExtensionSourceItem>\n            get() = _sources ?: persistentListOf()\n\n        val isLoading: Boolean\n            get() = extension == null || _sources == null\n    }\n}\n\nsealed interface AnimeExtensionDetailsEvent {\n    data object Uninstalled : AnimeExtensionDetailsEvent\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/details/AnimeSourcePreferencesScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.extension.details\n\nimport android.content.Context\nimport android.os.Bundle\nimport android.util.TypedValue\nimport android.view.View\nimport androidx.appcompat.view.ContextThemeWrapper\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.viewinterop.AndroidView\nimport androidx.core.os.bundleOf\nimport androidx.fragment.app.FragmentActivity\nimport androidx.fragment.app.FragmentContainerView\nimport androidx.fragment.app.FragmentManager\nimport androidx.fragment.app.FragmentTransaction\nimport androidx.fragment.app.commit\nimport androidx.lifecycle.lifecycleScope\nimport androidx.preference.DialogPreference\nimport androidx.preference.EditTextPreference\nimport androidx.preference.PreferenceFragmentCompat\nimport androidx.preference.PreferenceScreen\nimport androidx.preference.forEach\nimport androidx.preference.getOnBindEditTextListener\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifAnimeSourcesLoaded\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource\nimport eu.kanade.tachiyomi.animesource.sourcePreferences\nimport eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore\nimport eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText.Companion.setIncognito\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeSourcePreferencesScreen(val sourceId: Long) : Screen() {\n\n    @Composable\n    override fun Content() {\n        if (!ifAnimeSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = Injekt.get<AnimeSourceManager>().getOrStub(sourceId).toString(),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            FragmentContainer(\n                fragmentManager = (context as FragmentActivity).supportFragmentManager,\n                modifier = Modifier\n                    .fillMaxSize()\n                    .padding(contentPadding),\n            ) {\n                add(it, SourcePreferencesFragment.getInstance(sourceId), null)\n            }\n        }\n    }\n\n    /**\n     * From https://stackoverflow.com/questions/60520145/fragment-container-in-jetpack-compose/70817794#70817794\n     */\n    @Composable\n    private fun FragmentContainer(\n        fragmentManager: FragmentManager,\n        modifier: Modifier = Modifier,\n        commit: FragmentTransaction.(containerId: Int) -> Unit,\n    ) {\n        val containerId by rememberSaveable {\n            mutableIntStateOf(View.generateViewId())\n        }\n        var initialized by rememberSaveable { mutableStateOf(false) }\n        AndroidView(\n            modifier = modifier,\n            factory = { context ->\n                FragmentContainerView(context)\n                    .apply { id = containerId }\n            },\n            update = { view ->\n                if (!initialized) {\n                    fragmentManager.commit { commit(view.id) }\n                    initialized = true\n                } else {\n                    fragmentManager.onContainerAvailable(view)\n                }\n            },\n        )\n    }\n\n    /** Access to package-private method in FragmentManager through reflection */\n    private fun FragmentManager.onContainerAvailable(view: FragmentContainerView) {\n        val method = FragmentManager::class.java.getDeclaredMethod(\n            \"onContainerAvailable\",\n            FragmentContainerView::class.java,\n        )\n        method.isAccessible = true\n        method.invoke(this, view)\n    }\n}\n\nclass SourcePreferencesFragment : PreferenceFragmentCompat() {\n\n    override fun getContext(): Context? {\n        val superCtx = super.getContext() ?: return null\n        val tv = TypedValue()\n        superCtx.theme.resolveAttribute(R.attr.preferenceTheme, tv, true)\n        return ContextThemeWrapper(superCtx, tv.resourceId)\n    }\n\n    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {\n        preferenceScreen = populateScreen()\n    }\n\n    private fun populateScreen(): PreferenceScreen {\n        val sourceId = requireArguments().getLong(SOURCE_ID)\n        val source = Injekt.get<AnimeSourceManager>().getOrStub(sourceId)\n        val sourceScreen = preferenceManager.createPreferenceScreen(requireContext())\n\n        if (source is ConfigurableAnimeSource) {\n            val dataStore = SharedPreferencesDataStore(source.sourcePreferences())\n            preferenceManager.preferenceDataStore = dataStore\n\n            source.setupPreferenceScreen(sourceScreen)\n            sourceScreen.forEach { pref ->\n                pref.isIconSpaceReserved = false\n                pref.isSingleLineTitle = false\n                if (pref is DialogPreference && pref.dialogTitle.isNullOrEmpty()) {\n                    pref.dialogTitle = pref.title\n                }\n\n                // Apply incognito IME for EditTextPreference\n                if (pref is EditTextPreference) {\n                    val setListener = pref.getOnBindEditTextListener()\n                    pref.setOnBindEditTextListener {\n                        setListener?.onBindEditText(it)\n                        it.setIncognito(lifecycleScope)\n                    }\n                }\n            }\n        }\n\n        return sourceScreen\n    }\n\n    companion object {\n        private const val SOURCE_ID = \"source_id\"\n\n        fun getInstance(sourceId: Long): SourcePreferencesFragment {\n            return SourcePreferencesFragment().apply {\n                arguments = bundleOf(SOURCE_ID to sourceId)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/AnimeMigrationFlags.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration\n\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.entries.anime.model.hasCustomBackground\nimport eu.kanade.domain.entries.anime.model.hasCustomCover\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.injectLazy\n\ndata class AnimeMigrationFlag(\n    val flag: Int,\n    val isDefaultSelected: Boolean,\n    val titleId: StringResource,\n) {\n    companion object {\n        fun create(flag: Int, defaultSelectionMap: Int, titleId: StringResource): AnimeMigrationFlag {\n            return AnimeMigrationFlag(\n                flag = flag,\n                isDefaultSelected = defaultSelectionMap and flag != 0,\n                titleId = titleId,\n            )\n        }\n    }\n}\n\nobject AnimeMigrationFlags {\n\n    private const val EPISODES = 0b00001\n    private const val CATEGORIES = 0b00010\n    private const val CUSTOM_BACKGROUND = 0b00100\n    private const val CUSTOM_COVER = 0b01000\n    private const val DELETE_DOWNLOADED = 0b10000\n\n    private val coverCache: AnimeCoverCache by injectLazy()\n    private val backgroundCache: AnimeBackgroundCache by injectLazy()\n    private val downloadCache: AnimeDownloadCache by injectLazy()\n\n    fun hasEpisodes(value: Int): Boolean {\n        return value and EPISODES != 0\n    }\n\n    fun hasCategories(value: Int): Boolean {\n        return value and CATEGORIES != 0\n    }\n\n    fun hasCustomCover(value: Int): Boolean {\n        return value and CUSTOM_COVER != 0\n    }\n\n    fun hasCustomBackground(value: Int): Boolean {\n        return value and CUSTOM_BACKGROUND != 0\n    }\n\n    fun hasDeleteDownloaded(value: Int): Boolean {\n        return value and DELETE_DOWNLOADED != 0\n    }\n\n    /** Returns information about applicable flags with default selections. */\n    fun getFlags(anime: Anime?, defaultSelectedBitMap: Int): List<AnimeMigrationFlag> {\n        val flags = mutableListOf<AnimeMigrationFlag>()\n\n        if (anime?.fetchType == FetchType.Episodes) {\n            flags += AnimeMigrationFlag.create(EPISODES, defaultSelectedBitMap, AYMR.strings.episodes)\n        }\n        flags += AnimeMigrationFlag.create(CATEGORIES, defaultSelectedBitMap, MR.strings.categories)\n\n        if (anime != null) {\n            if (anime.hasCustomCover(coverCache)) {\n                flags += AnimeMigrationFlag.create(\n                    CUSTOM_COVER,\n                    defaultSelectedBitMap,\n                    MR.strings.custom_cover,\n                )\n            }\n            if (anime.hasCustomBackground(backgroundCache)) {\n                flags += AnimeMigrationFlag.create(\n                    CUSTOM_BACKGROUND,\n                    defaultSelectedBitMap,\n                    AYMR.strings.custom_background,\n                )\n            }\n            if (downloadCache.getDownloadCount(anime) > 0) {\n                flags += AnimeMigrationFlag.create(\n                    DELETE_DOWNLOADED,\n                    defaultSelectedBitMap,\n                    MR.strings.delete_downloaded,\n                )\n            }\n        }\n        return flags\n    }\n\n    /** Returns a bit map of selected flags. */\n    fun getSelectedFlagsBitMap(\n        selectedFlags: List<Boolean>,\n        flags: List<AnimeMigrationFlag>,\n    ): Int {\n        return selectedFlags\n            .zip(flags)\n            .filter { (isSelected, _) -> isSelected }\n            .map { (_, flag) -> flag.flag }\n            .reduceOrNull { acc, mask -> acc or mask } ?: 0\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.MigrateAnimeScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\ndata class MigrateAnimeScreen(\n    private val sourceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { MigrateAnimeScreenModel(sourceId) }\n\n        val state by screenModel.state.collectAsState()\n\n        if (state.isLoading) {\n            LoadingScreen()\n            return\n        }\n\n        MigrateAnimeScreen(\n            navigateUp = navigator::pop,\n            title = state.source!!.name,\n            state = state,\n            onClickItem = { navigator.push(MigrateAnimeSearchScreen(it.id)) },\n            onClickCover = { navigator.push(AnimeScreen(it.id)) },\n        )\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                when (event) {\n                    MigrationAnimeEvent.FailedFetchingFavorites -> {\n                        context.toast(MR.strings.internal_error)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.anime\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeFavorites\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateAnimeScreenModel(\n    private val sourceId: Long,\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val getFavorites: GetAnimeFavorites = Injekt.get(),\n) : StateScreenModel<MigrateAnimeScreenModel.State>(State()) {\n\n    private val _events: Channel<MigrationAnimeEvent> = Channel()\n    val events: Flow<MigrationAnimeEvent> = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            mutableState.update { state ->\n                state.copy(source = sourceManager.getOrStub(sourceId))\n            }\n\n            getFavorites.subscribe(sourceId)\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _events.send(MigrationAnimeEvent.FailedFetchingFavorites)\n                    mutableState.update { state ->\n                        state.copy(titleList = persistentListOf())\n                    }\n                }\n                .map { anime ->\n                    anime\n                        .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.title })\n                        .toImmutableList()\n                }\n                .collectLatest { list ->\n                    mutableState.update { it.copy(titleList = list) }\n                }\n        }\n    }\n\n    @Immutable\n    data class State(\n        val source: AnimeSource? = null,\n        private val titleList: ImmutableList<Anime>? = null,\n    ) {\n\n        val titles: ImmutableList<Anime>\n            get() = titleList ?: persistentListOf()\n\n        val isLoading: Boolean\n            get() = source == null || titleList == null\n\n        val isEmpty: Boolean\n            get() = titles.isEmpty()\n    }\n}\n\nsealed interface MigrationAnimeEvent {\n    data object FailedFetchingFavorites : MigrationAnimeEvent\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/season/MigrateSeasonSelectScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season\n\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifAnimeSourcesLoaded\nimport eu.kanade.presentation.browse.anime.BrowseAnimeSourceContent\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialog\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialogScreenModel\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport mihon.presentation.core.util.collectAsLazyPagingItems\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\ndata class MigrateSeasonSelectScreen(\n    private val oldAnime: Anime,\n    private val anime: Anime,\n) : Screen() {\n    @Composable\n    override fun Content() {\n        if (!ifAnimeSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val uriHandler = LocalUriHandler.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { MigrateSeasonSelectScreenModel(anime) }\n        val state by screenModel.state.collectAsState()\n\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = anime.title,\n                    navigateUp = navigator::pop,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { paddingValues ->\n            val openMigrateDialog: (Anime) -> Unit = {\n                screenModel.setDialog(MigrateSeasonSelectScreenModel.Dialog.Migrate(newAnime = it, oldAnime = oldAnime))\n            }\n            BrowseAnimeSourceContent(\n                source = screenModel.source,\n                animeList = screenModel.seasonPagerFlowFlow.collectAsLazyPagingItems(),\n                columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),\n                displayMode = screenModel.displayMode,\n                snackbarHostState = snackbarHostState,\n                contentPadding = paddingValues,\n                onWebViewClick = {\n                    val source = screenModel.source as? AnimeHttpSource ?: return@BrowseAnimeSourceContent\n                    navigator.push(\n                        WebViewScreen(\n                            url = source.baseUrl,\n                            initialTitle = source.name,\n                            sourceId = source.id,\n                        ),\n                    )\n                },\n                onHelpClick = { uriHandler.openUri(Constants.URL_HELP) },\n                onLocalAnimeSourceHelpClick = { uriHandler.openUri(LocalAnimeSource.HELP_URL) },\n                onAnimeClick = openMigrateDialog,\n                onAnimeLongClick = { navigator.push(AnimeScreen(it.id, true)) },\n            )\n        }\n\n        val onDismissRequest = { screenModel.setDialog(null) }\n        when (val dialog = state.dialog) {\n            is MigrateSeasonSelectScreenModel.Dialog.Migrate -> {\n                MigrateAnimeDialog(\n                    oldAnime = dialog.oldAnime,\n                    newAnime = dialog.newAnime,\n                    screenModel = rememberScreenModel { MigrateAnimeDialogScreenModel() },\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(AnimeScreen(dialog.newAnime.id)) },\n                    onClickSeasons = { navigator.push(MigrateSeasonSelectScreen(oldAnime, dialog.newAnime)) },\n                    onPopScreen = {\n                        onDismissRequest()\n                    },\n                )\n            }\n            else -> {}\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/season/MigrateSeasonSelectScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season\n\nimport android.content.res.Configuration\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.Pager\nimport androidx.paging.PagingConfig\nimport androidx.paging.PagingSource\nimport androidx.paging.PagingState\nimport androidx.paging.cachedIn\nimport androidx.paging.filter\nimport androidx.paging.map\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.asState\nimport eu.kanade.domain.entries.anime.model.toDomainAnime\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.emptyFlow\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.interactor.NetworkToLocalAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateSeasonSelectScreenModel(\n    private val anime: Anime,\n    sourceManager: AnimeSourceManager = Injekt.get(),\n    sourcePreferences: SourcePreferences = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val networkToLocalAnime: NetworkToLocalAnime = Injekt.get(),\n) : StateScreenModel<MigrateSeasonSelectScreenModel.State>(State()) {\n\n    var displayMode by sourcePreferences.sourceDisplayMode().asState(screenModelScope)\n    val source = sourceManager.getOrStub(anime.source)\n\n    fun getColumnsPreference(orientation: Int): GridCells {\n        val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE\n        val columns = if (isLandscape) {\n            libraryPreferences.animeLandscapeColumns()\n        } else {\n            libraryPreferences.animePortraitColumns()\n        }.get()\n        return if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns)\n    }\n\n    private val hideInLibraryItems = sourcePreferences.hideInAnimeLibraryItems().get()\n    val seasonPagerFlowFlow = flow { emit(anime) }\n        .map { anime ->\n            Pager(\n                config = PagingConfig(pageSize = 25),\n                pagingSourceFactory = {\n                    SeasonListPagingSource {\n                        source.getSeasonList(anime.toSAnime())\n                    }\n                },\n            ).flow.map { pagingData ->\n                pagingData.map {\n                    networkToLocalAnime.await(it.toDomainAnime(anime.source))\n                        .let { localAnime -> getAnime.subscribe(localAnime.url, localAnime.source) }\n                        .filterNotNull()\n                        .stateIn(ioCoroutineScope)\n                }\n                    .filter { !hideInLibraryItems || !it.value.favorite }\n            }\n                .cachedIn(ioCoroutineScope)\n        }\n        .stateIn(ioCoroutineScope, SharingStarted.Lazily, emptyFlow())\n\n    private class SeasonListPagingSource(\n        private val loadSeasonList: suspend () -> List<SAnime>,\n    ) : PagingSource<Int, SAnime>() {\n        override suspend fun load(params: LoadParams<Int>): LoadResult<Int, SAnime> {\n            return try {\n                val seasonList = loadSeasonList()\n\n                LoadResult.Page(\n                    data = seasonList,\n                    prevKey = null,\n                    nextKey = null,\n                )\n            } catch (e: Exception) {\n                LoadResult.Error(e)\n            }\n        }\n\n        override fun getRefreshKey(state: PagingState<Int, SAnime>): Int? {\n            return null\n        }\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    sealed interface Dialog {\n        data class Migrate(val newAnime: Anime, val oldAnime: Anime) : Dialog\n    }\n\n    @Immutable\n    data class State(\n        val dialog: Dialog? = null,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/AnimeMigrateSearchScreenDialogScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.search\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeMigrateSearchScreenDialogScreenModel(\n    val animeId: Long,\n    getAnime: GetAnime = Injekt.get(),\n) : StateScreenModel<AnimeMigrateSearchScreenDialogScreenModel.State>(State()) {\n\n    init {\n        screenModelScope.launch {\n            val anime = getAnime.await(animeId)!!\n\n            mutableState.update {\n                it.copy(anime = anime)\n            }\n        }\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update {\n            it.copy(dialog = dialog)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val anime: Anime? = null,\n        val dialog: Dialog? = null,\n    )\n\n    sealed interface Dialog {\n        data class Migrate(val anime: Anime) : Dialog\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/AnimeSourceSearchScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.search\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifAnimeSourcesLoaded\nimport eu.kanade.presentation.browse.anime.BrowseAnimeSourceContent\nimport eu.kanade.presentation.components.SearchToolbar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season.MigrateSeasonSelectScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.SourceFilterAnimeDialog\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport kotlinx.coroutines.launch\nimport mihon.presentation.core.util.collectAsLazyPagingItems\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\ndata class AnimeSourceSearchScreen(\n    private val oldAnime: Anime,\n    private val sourceId: Long,\n    private val query: String?,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        if (!ifAnimeSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val uriHandler = LocalUriHandler.current\n        val navigator = LocalNavigator.currentOrThrow\n        val scope = rememberCoroutineScope()\n\n        val screenModel = rememberScreenModel { BrowseAnimeSourceScreenModel(sourceId, query) }\n        val state by screenModel.state.collectAsState()\n\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                SearchToolbar(\n                    searchQuery = state.toolbarQuery ?: \"\",\n                    onChangeSearchQuery = screenModel::setToolbarQuery,\n                    onClickCloseSearch = navigator::pop,\n                    onSearch = screenModel::search,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n            floatingActionButton = {\n                AnimatedVisibility(visible = state.filters.isNotEmpty()) {\n                    ExtendedFloatingActionButton(\n                        text = { Text(text = stringResource(MR.strings.action_filter)) },\n                        icon = { Icon(Icons.Outlined.FilterList, contentDescription = \"\") },\n                        onClick = screenModel::openFilterSheet,\n                    )\n                }\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        ) { paddingValues ->\n            val openMigrateDialog: (Anime) -> Unit = {\n                screenModel.setDialog(BrowseAnimeSourceScreenModel.Dialog.Migrate(newAnime = it, oldAnime = oldAnime))\n            }\n            BrowseAnimeSourceContent(\n                source = screenModel.source,\n                animeList = screenModel.animePagerFlowFlow.collectAsLazyPagingItems(),\n                columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),\n                displayMode = screenModel.displayMode,\n                snackbarHostState = snackbarHostState,\n                contentPadding = paddingValues,\n                onWebViewClick = {\n                    val source = screenModel.source as? AnimeHttpSource ?: return@BrowseAnimeSourceContent\n                    navigator.push(\n                        WebViewScreen(\n                            url = source.baseUrl,\n                            initialTitle = source.name,\n                            sourceId = source.id,\n                        ),\n                    )\n                },\n                onHelpClick = { uriHandler.openUri(Constants.URL_HELP) },\n                onLocalAnimeSourceHelpClick = { uriHandler.openUri(LocalAnimeSource.HELP_URL) },\n                onAnimeClick = openMigrateDialog,\n                onAnimeLongClick = { navigator.push(AnimeScreen(it.id, true)) },\n            )\n        }\n\n        val onDismissRequest = { screenModel.setDialog(null) }\n        when (val dialog = state.dialog) {\n            is BrowseAnimeSourceScreenModel.Dialog.Filter -> {\n                SourceFilterAnimeDialog(\n                    onDismissRequest = onDismissRequest,\n                    filters = state.filters,\n                    onReset = screenModel::resetFilters,\n                    onFilter = { screenModel.search(filters = state.filters) },\n                    onUpdate = screenModel::setFilters,\n                )\n            }\n            is BrowseAnimeSourceScreenModel.Dialog.Migrate -> {\n                MigrateAnimeDialog(\n                    oldAnime = oldAnime,\n                    newAnime = dialog.newAnime,\n                    screenModel = rememberScreenModel { MigrateAnimeDialogScreenModel() },\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(AnimeScreen(dialog.newAnime.id)) },\n                    onClickSeasons = { navigator.push(MigrateSeasonSelectScreen(oldAnime, dialog.newAnime)) },\n                    onPopScreen = {\n                        scope.launch {\n                            navigator.popUntilRoot()\n                            HomeScreen.openTab(HomeScreen.Tab.Browse())\n                            navigator.push(AnimeScreen(dialog.newAnime.id))\n                        }\n                    },\n                )\n            }\n            else -> {}\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.search\n\nimport androidx.compose.foundation.background\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.size\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ErrorOutline\nimport androidx.compose.material3.AlertDialog\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.Immutable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.hasCustomBackground\nimport eu.kanade.domain.entries.anime.model.hasCustomCover\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource\nimport eu.kanade.presentation.components.IndicatorSize\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.AnimeMigrationFlags\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.SetAnimeCategories\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.toEpisodeUpdate\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\n\n@Composable\ninternal fun MigrateAnimeDialog(\n    oldAnime: Anime,\n    newAnime: Anime,\n    screenModel: MigrateAnimeDialogScreenModel,\n    onDismissRequest: () -> Unit,\n    onClickTitle: () -> Unit,\n    onClickSeasons: () -> Unit,\n    onPopScreen: () -> Unit,\n) {\n    val scope = rememberCoroutineScope()\n    val state by screenModel.state.collectAsState()\n\n    val flags = remember { AnimeMigrationFlags.getFlags(oldAnime, screenModel.migrateFlags.get()) }\n    val selectedFlags = remember { flags.map { it.isDefaultSelected }.toMutableStateList() }\n    val canMigrate = remember { oldAnime.fetchType == newAnime.fetchType }\n\n    if (state.isMigrating) {\n        LoadingScreen(\n            modifier = Modifier\n                .background(MaterialTheme.colorScheme.background.copy(alpha = 0.7f)),\n        )\n    } else {\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = {\n                Text(text = stringResource(MR.strings.migration_dialog_what_to_include))\n            },\n            text = {\n                Column(\n                    modifier = Modifier.verticalScroll(rememberScrollState()),\n                ) {\n                    if (canMigrate) {\n                        flags.forEachIndexed { index, flag ->\n                            LabeledCheckbox(\n                                label = stringResource(flag.titleId),\n                                checked = selectedFlags[index],\n                                onCheckedChange = { selectedFlags[index] = it },\n                            )\n                        }\n                    } else {\n                        val message = if (oldAnime.fetchType == FetchType.Seasons) {\n                            AYMR.strings.label_cant_migrate_season\n                        } else {\n                            AYMR.strings.label_cant_migrate_episode\n                        }\n\n                        Row(\n                            horizontalArrangement = Arrangement.spacedBy(8.dp),\n                            verticalAlignment = Alignment.CenterVertically,\n                        ) {\n                            Icon(\n                                imageVector = Icons.Outlined.ErrorOutline,\n                                contentDescription = null,\n                                modifier = Modifier.size(IndicatorSize),\n                                tint = MaterialTheme.colorScheme.error,\n                            )\n                            Text(\n                                text = stringResource(message),\n                                style = MaterialTheme.typography.bodyMedium,\n                                color = MaterialTheme.colorScheme.error,\n                            )\n                        }\n                    }\n                }\n            },\n            confirmButton = {\n                FlowRow(\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                ) {\n                    TextButton(\n                        onClick = {\n                            onDismissRequest()\n                            onClickTitle()\n                        },\n                    ) {\n                        Text(text = stringResource(AYMR.strings.action_show_anime))\n                    }\n\n                    if (newAnime.fetchType != FetchType.Episodes) {\n                        TextButton(\n                            onClick = {\n                                onDismissRequest()\n                                onClickSeasons()\n                            },\n                        ) {\n                            Text(text = stringResource(AYMR.strings.label_show_seasons))\n                        }\n                    }\n\n                    Spacer(modifier = Modifier.weight(1f))\n\n                    if (canMigrate) {\n                        TextButton(\n                            onClick = {\n                                scope.launchIO {\n                                    screenModel.migrateAnime(\n                                        oldAnime,\n                                        newAnime,\n                                        false,\n                                        AnimeMigrationFlags.getSelectedFlagsBitMap(selectedFlags, flags),\n                                    )\n                                    withUIContext { onPopScreen() }\n                                }\n                            },\n                        ) {\n                            Text(text = stringResource(MR.strings.copy))\n                        }\n                        TextButton(\n                            onClick = {\n                                scope.launchIO {\n                                    screenModel.migrateAnime(\n                                        oldAnime,\n                                        newAnime,\n                                        true,\n                                        AnimeMigrationFlags.getSelectedFlagsBitMap(selectedFlags, flags),\n                                    )\n\n                                    withUIContext { onPopScreen() }\n                                }\n                            },\n                        ) {\n                            Text(text = stringResource(MR.strings.migrate))\n                        }\n                    }\n                }\n            },\n        )\n    }\n}\n\ninternal class MigrateAnimeDialogScreenModel(\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get(),\n    private val syncEpisodesWithSource: SyncEpisodesWithSource = Injekt.get(),\n    private val updateEpisode: UpdateEpisode = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val setAnimeCategories: SetAnimeCategories = Injekt.get(),\n    private val getTracks: GetAnimeTracks = Injekt.get(),\n    private val insertTrack: InsertAnimeTrack = Injekt.get(),\n    private val coverCache: AnimeCoverCache = Injekt.get(),\n    private val backgroundCache: AnimeBackgroundCache = Injekt.get(),\n    private val preferenceStore: PreferenceStore = Injekt.get(),\n) : StateScreenModel<MigrateAnimeDialogScreenModel.State>(State()) {\n\n    val migrateFlags: Preference<Int> by lazy {\n        preferenceStore.getInt(\"migrate_flags\", Int.MAX_VALUE)\n    }\n\n    private val enhancedServices by lazy {\n        Injekt.get<TrackerManager>().trackers.filterIsInstance<EnhancedAnimeTracker>()\n    }\n\n    suspend fun migrateAnime(\n        oldAnime: Anime,\n        newAnime: Anime,\n        replace: Boolean,\n        flags: Int,\n    ) {\n        migrateFlags.set(flags)\n        val source = sourceManager.get(newAnime.source) ?: return\n        val prevSource = sourceManager.get(oldAnime.source)\n\n        mutableState.update { it.copy(isMigrating = true) }\n\n        try {\n            val episodes = source.getEpisodeList(newAnime.toSAnime())\n\n            migrateAnimeInternal(\n                oldSource = prevSource,\n                newSource = source,\n                oldAnime = oldAnime,\n                newAnime = newAnime,\n                sourceEpisodes = episodes,\n                replace = replace,\n                flags = flags,\n            )\n        } catch (_: Throwable) {\n            // Explicitly stop if an error occurred; the dialog normally gets popped at the end\n            // anyway\n            mutableState.update { it.copy(isMigrating = false) }\n        }\n    }\n\n    private suspend fun migrateAnimeInternal(\n        oldSource: AnimeSource?,\n        newSource: AnimeSource,\n        oldAnime: Anime,\n        newAnime: Anime,\n        sourceEpisodes: List<SEpisode>,\n        replace: Boolean,\n        flags: Int,\n    ) {\n        val migrateEpisodes = AnimeMigrationFlags.hasEpisodes(flags)\n        val migrateCategories = AnimeMigrationFlags.hasCategories(flags)\n        val migrateCustomCover = AnimeMigrationFlags.hasCustomCover(flags)\n        val migrateCustomBackground = AnimeMigrationFlags.hasCustomBackground(flags)\n        val deleteDownloaded = AnimeMigrationFlags.hasDeleteDownloaded(flags)\n\n        try {\n            syncEpisodesWithSource.await(sourceEpisodes, newAnime, newSource)\n        } catch (_: Exception) {\n            // Worst case, chapters won't be synced\n        }\n\n        // Update chapters read, bookmark and dateFetch\n        if (migrateEpisodes) {\n            val prevAnimeEpisodes = getEpisodesByAnimeId.await(oldAnime.id)\n            val animeEpisodes = getEpisodesByAnimeId.await(newAnime.id)\n\n            val maxEpisodeSeen = prevAnimeEpisodes\n                .filter { it.seen }\n                .maxOfOrNull { it.episodeNumber }\n\n            val updatedAnimeEpisodes = animeEpisodes.map { animeEpisode ->\n                var updatedEpisode = animeEpisode\n                if (updatedEpisode.isRecognizedNumber) {\n                    val prevEpisode = prevAnimeEpisodes\n                        .find { it.isRecognizedNumber && it.episodeNumber == updatedEpisode.episodeNumber }\n\n                    if (prevEpisode != null) {\n                        updatedEpisode = updatedEpisode.copy(\n                            dateFetch = prevEpisode.dateFetch,\n                            bookmark = prevEpisode.bookmark,\n                        )\n                    }\n\n                    if (maxEpisodeSeen != null && updatedEpisode.episodeNumber <= maxEpisodeSeen) {\n                        updatedEpisode = updatedEpisode.copy(seen = true)\n                    }\n                }\n\n                updatedEpisode\n            }\n\n            val episodeUpdates = updatedAnimeEpisodes.map { it.toEpisodeUpdate() }\n            updateEpisode.awaitAll(episodeUpdates)\n        }\n\n        // Update categories\n        if (migrateCategories) {\n            val categoryIds = getCategories.await(oldAnime.id).map { it.id }\n            setAnimeCategories.await(newAnime.id, categoryIds)\n        }\n\n        // Update track\n        getTracks.await(oldAnime.id).mapNotNull { track ->\n            val updatedTrack = track.copy(animeId = newAnime.id)\n\n            val service = enhancedServices\n                .firstOrNull { it.isTrackFrom(updatedTrack, oldAnime, oldSource) }\n\n            if (service != null) {\n                service.migrateTrack(updatedTrack, newAnime, newSource)\n            } else {\n                updatedTrack\n            }\n        }\n            .takeIf { it.isNotEmpty() }\n            ?.let { insertTrack.awaitAll(it) }\n\n        // Delete downloaded\n        if (deleteDownloaded) {\n            if (oldSource != null) {\n                downloadManager.deleteAnime(oldAnime, oldSource)\n            }\n        }\n\n        if (replace) {\n            updateAnime.awaitUpdateFavorite(oldAnime.id, favorite = false)\n        }\n\n        // Update custom cover (recheck if custom cover exists)\n        if (migrateCustomCover && oldAnime.hasCustomCover()) {\n            coverCache.setCustomCoverToCache(\n                newAnime,\n                coverCache.getCustomCoverFile(oldAnime.id).inputStream(),\n            )\n        }\n\n        // Update custom background (recheck if custom background exists)\n        if (migrateCustomBackground && oldAnime.hasCustomBackground()) {\n            backgroundCache.setCustomBackgroundToCache(\n                newAnime,\n                backgroundCache.getCustomBackgroundFile(oldAnime.id).inputStream(),\n            )\n        }\n\n        updateAnime.await(\n            AnimeUpdate(\n                id = newAnime.id,\n                favorite = true,\n                episodeFlags = oldAnime.episodeFlags,\n                viewerFlags = oldAnime.viewerFlags,\n                dateAdded = if (replace) oldAnime.dateAdded else Instant.now().toEpochMilli(),\n            ),\n        )\n    }\n\n    @Immutable\n    data class State(\n        val isMigrating: Boolean = false,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeSearchScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.search\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.MigrateAnimeSearchScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season.MigrateSeasonSelectScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\n\nclass MigrateAnimeSearchScreen(private val animeId: Long) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { MigrateAnimeSearchScreenModel(animeId = animeId) }\n        val state by screenModel.state.collectAsState()\n\n        val dialogScreenModel = rememberScreenModel {\n            AnimeMigrateSearchScreenDialogScreenModel(\n                animeId = animeId,\n            )\n        }\n        val dialogState by dialogScreenModel.state.collectAsState()\n\n        MigrateAnimeSearchScreen(\n            state = state,\n            fromSourceId = dialogState.anime?.source,\n            navigateUp = navigator::pop,\n            onChangeSearchQuery = screenModel::updateSearchQuery,\n            onSearch = { screenModel.search() },\n            getAnime = { screenModel.getAnime(it) },\n            onChangeSearchFilter = screenModel::setSourceFilter,\n            onToggleResults = screenModel::toggleFilterResults,\n            onClickSource = {\n                navigator.push(\n                    AnimeSourceSearchScreen(dialogState.anime!!, it.id, state.searchQuery),\n                )\n            },\n            onClickItem = {\n                dialogScreenModel.setDialog(\n                    (AnimeMigrateSearchScreenDialogScreenModel.Dialog.Migrate(it)),\n                )\n            },\n            onLongClickItem = { navigator.push(AnimeScreen(it.id, true)) },\n        )\n\n        when (val dialog = dialogState.dialog) {\n            is AnimeMigrateSearchScreenDialogScreenModel.Dialog.Migrate -> {\n                MigrateAnimeDialog(\n                    oldAnime = dialogState.anime!!,\n                    newAnime = dialog.anime,\n                    screenModel = rememberScreenModel { MigrateAnimeDialogScreenModel() },\n                    onDismissRequest = { dialogScreenModel.setDialog(null) },\n                    onClickTitle = {\n                        navigator.push(AnimeScreen(dialog.anime.id, true))\n                    },\n                    onClickSeasons = { navigator.push(MigrateSeasonSelectScreen(dialogState.anime!!, dialog.anime)) },\n                    onPopScreen = {\n                        if (navigator.lastItem is AnimeScreen) {\n                            val lastItem = navigator.lastItem\n                            navigator.popUntil { navigator.items.contains(lastItem) }\n                            navigator.push(AnimeScreen(dialog.anime.id))\n                        } else {\n                            navigator.replace(AnimeScreen(dialog.anime.id))\n                        }\n                    },\n                )\n            }\n            else -> {}\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeSearchScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.search\n\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSearchScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSourceFilter\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateAnimeSearchScreenModel(\n    val animeId: Long,\n    initialExtensionFilter: String = \"\",\n    getAnime: GetAnime = Injekt.get(),\n) : AnimeSearchScreenModel() {\n\n    init {\n        extensionFilter = initialExtensionFilter\n        screenModelScope.launch {\n            val anime = getAnime.await(animeId)!!\n            mutableState.update {\n                it.copy(\n                    fromSourceId = anime.source,\n                    searchQuery = anime.title,\n                )\n            }\n\n            search()\n        }\n    }\n\n    override fun getEnabledSources(): List<AnimeCatalogueSource> {\n        return super.getEnabledSources()\n            .filter { state.value.sourceFilter != AnimeSourceFilter.PinnedOnly || \"${it.id}\" in pinnedSources }\n            .sortedWith(\n                compareBy(\n                    { it.id != state.value.fromSourceId },\n                    { \"${it.id}\" !in pinnedSources },\n                    { \"${it.name.lowercase()} (${it.lang})\" },\n                ),\n            )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/sources/MigrateAnimeSourceScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.sources\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.source.anime.interactor.GetAnimeSourcesWithFavoriteCount\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateAnimeSourceScreenModel(\n    preferences: SourcePreferences = Injekt.get(),\n    private val getSourcesWithFavoriteCount: GetAnimeSourcesWithFavoriteCount = Injekt.get(),\n    private val setMigrateSorting: SetMigrateSorting = Injekt.get(),\n) : StateScreenModel<MigrateAnimeSourceScreenModel.State>(State()) {\n\n    private val _channel = Channel<Event>(Int.MAX_VALUE)\n    val channel = _channel.receiveAsFlow()\n\n    init {\n        screenModelScope.launchIO {\n            getSourcesWithFavoriteCount.subscribe()\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _channel.send(Event.FailedFetchingSourcesWithCount)\n                }\n                .collectLatest { sources ->\n                    mutableState.update {\n                        it.copy(\n                            isLoading = false,\n                            items = sources.toImmutableList(),\n                        )\n                    }\n                }\n        }\n\n        preferences.migrationSortingDirection().changes()\n            .onEach { mutableState.update { state -> state.copy(sortingDirection = it) } }\n            .launchIn(screenModelScope)\n\n        preferences.migrationSortingMode().changes()\n            .onEach { mutableState.update { state -> state.copy(sortingMode = it) } }\n            .launchIn(screenModelScope)\n    }\n\n    fun toggleSortingMode() {\n        with(state.value) {\n            val newMode = when (sortingMode) {\n                SetMigrateSorting.Mode.ALPHABETICAL -> SetMigrateSorting.Mode.TOTAL\n                SetMigrateSorting.Mode.TOTAL -> SetMigrateSorting.Mode.ALPHABETICAL\n            }\n\n            setMigrateSorting.await(newMode, sortingDirection)\n        }\n    }\n\n    fun toggleSortingDirection() {\n        with(state.value) {\n            val newDirection = when (sortingDirection) {\n                SetMigrateSorting.Direction.ASCENDING -> SetMigrateSorting.Direction.DESCENDING\n                SetMigrateSorting.Direction.DESCENDING -> SetMigrateSorting.Direction.ASCENDING\n            }\n\n            setMigrateSorting.await(sortingMode, newDirection)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val items: ImmutableList<Pair<AnimeSource, Long>> = persistentListOf(),\n        val sortingMode: SetMigrateSorting.Mode = SetMigrateSorting.Mode.ALPHABETICAL,\n        val sortingDirection: SetMigrateSorting.Direction = SetMigrateSorting.Direction.ASCENDING,\n    ) {\n        val isEmpty = items.isEmpty()\n    }\n\n    sealed interface Event {\n        data object FailedFetchingSourcesWithCount : Event\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/sources/MigrateAnimeSourceTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.migration.sources\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.MigrateAnimeSourceScreen\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.MigrateAnimeScreen\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun Screen.migrateAnimeSourceTab(): TabContent {\n    val uriHandler = LocalUriHandler.current\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { MigrateAnimeSourceScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_migration_anime,\n        actions = persistentListOf(\n            AppBar.Action(\n                title = stringResource(MR.strings.migration_help_guide),\n                icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                onClick = {\n                    uriHandler.openUri(\"https://aniyomi.org/help/guides/source-migration/\")\n                },\n            ),\n        ),\n        content = { contentPadding, _ ->\n            MigrateAnimeSourceScreen(\n                state = state,\n                contentPadding = contentPadding,\n                onClickItem = { source ->\n                    navigator.push(MigrateAnimeScreen(source.id))\n                },\n                onToggleSortingDirection = screenModel::toggleSortingDirection,\n                onToggleSortingMode = screenModel::toggleSortingMode,\n            )\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesFilterScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.AnimeSourcesFilterScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.toast\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass AnimeSourcesFilterScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { AnimeSourcesFilterScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        if (state is AnimeSourcesFilterScreenModel.State.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        if (state is AnimeSourcesFilterScreenModel.State.Error) {\n            val context = LocalContext.current\n            LaunchedEffect(Unit) {\n                context.toast(MR.strings.internal_error)\n                navigator.pop()\n            }\n            return\n        }\n\n        val successState = state as AnimeSourcesFilterScreenModel.State.Success\n\n        AnimeSourcesFilterScreen(\n            navigateUp = navigator::pop,\n            state = successState,\n            onClickLanguage = screenModel::toggleLanguage,\n            onClickSource = screenModel::toggleSource,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesFilterScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.source.anime.interactor.GetLanguagesWithAnimeSources\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeSource\nimport eu.kanade.domain.source.interactor.ToggleLanguage\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.SortedMap\n\nclass AnimeSourcesFilterScreenModel(\n    private val preferences: SourcePreferences = Injekt.get(),\n    private val getLanguagesWithSources: GetLanguagesWithAnimeSources = Injekt.get(),\n    private val toggleSource: ToggleAnimeSource = Injekt.get(),\n    private val toggleLanguage: ToggleLanguage = Injekt.get(),\n) : StateScreenModel<AnimeSourcesFilterScreenModel.State>(State.Loading) {\n\n    init {\n        screenModelScope.launch {\n            combine(\n                getLanguagesWithSources.subscribe(),\n                preferences.enabledLanguages().changes(),\n                preferences.disabledAnimeSources().changes(),\n            ) { a, b, c -> Triple(a, b, c) }\n                .catch { throwable ->\n                    mutableState.update {\n                        State.Error(\n                            throwable = throwable,\n                        )\n                    }\n                }\n                .collectLatest { (languagesWithSources, enabledLanguages, disabledSources) ->\n                    mutableState.update {\n                        State.Success(\n                            items = languagesWithSources,\n                            enabledLanguages = enabledLanguages,\n                            disabledSources = disabledSources,\n                        )\n                    }\n                }\n        }\n    }\n\n    fun toggleSource(source: AnimeSource) {\n        toggleSource.await(source)\n    }\n\n    fun toggleLanguage(language: String) {\n        toggleLanguage.await(language)\n    }\n\n    sealed interface State {\n\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data class Error(\n            val throwable: Throwable,\n        ) : State\n\n        @Immutable\n        data class Success(\n            val items: SortedMap<String, List<AnimeSource>>,\n            val enabledLanguages: Set<String>,\n            val disabledSources: Set<String>,\n        ) : State {\n\n            val isEmpty: Boolean\n                get() = items.isEmpty()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.source.anime.interactor.GetEnabledAnimeSources\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeSource\nimport eu.kanade.domain.source.anime.interactor.ToggleAnimeSourcePin\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.browse.anime.AnimeSourceUiModel\nimport eu.kanade.tachiyomi.util.system.LAST_USED_KEY\nimport eu.kanade.tachiyomi.util.system.PINNED_KEY\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.anime.model.AnimeSource\nimport tachiyomi.domain.source.anime.model.Pin\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.TreeMap\n\nclass AnimeSourcesScreenModel(\n    private val preferences: BasePreferences = Injekt.get(),\n    private val sourcePreferences: SourcePreferences = Injekt.get(),\n    private val getEnabledAnimeSources: GetEnabledAnimeSources = Injekt.get(),\n    private val toggleSource: ToggleAnimeSource = Injekt.get(),\n    private val toggleSourcePin: ToggleAnimeSourcePin = Injekt.get(),\n) : StateScreenModel<AnimeSourcesScreenModel.State>(State()) {\n\n    private val _events = Channel<Event>(Int.MAX_VALUE)\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launchIO {\n            getEnabledAnimeSources.subscribe()\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _events.send(Event.FailedFetchingSources)\n                }\n                .collectLatest(::collectLatestAnimeSources)\n        }\n    }\n\n    private fun collectLatestAnimeSources(sources: List<AnimeSource>) {\n        mutableState.update { state ->\n            val map = TreeMap<String, MutableList<AnimeSource>> { d1, d2 ->\n                // Sources without a lang defined will be placed at the end\n                when {\n                    d1 == LAST_USED_KEY && d2 != LAST_USED_KEY -> -1\n                    d2 == LAST_USED_KEY && d1 != LAST_USED_KEY -> 1\n                    d1 == PINNED_KEY && d2 != PINNED_KEY -> -1\n                    d2 == PINNED_KEY && d1 != PINNED_KEY -> 1\n                    d1 == \"\" && d2 != \"\" -> 1\n                    d2 == \"\" && d1 != \"\" -> -1\n                    else -> d1.compareTo(d2)\n                }\n            }\n            val byLang = sources.groupByTo(map) {\n                when {\n                    it.isUsedLast -> LAST_USED_KEY\n                    Pin.Actual in it.pin -> PINNED_KEY\n                    else -> it.lang\n                }\n            }\n\n            state.copy(\n                isLoading = false,\n                items = byLang\n                    .flatMap {\n                        listOf(\n                            AnimeSourceUiModel.Header(it.key),\n                            *it.value.map { source ->\n                                AnimeSourceUiModel.Item(source)\n                            }.toTypedArray(),\n                        )\n                    }\n                    .toImmutableList(),\n            )\n        }\n    }\n\n    fun toggleSource(source: AnimeSource) {\n        toggleSource.await(source)\n    }\n\n    fun togglePin(source: AnimeSource) {\n        toggleSourcePin.await(source)\n    }\n\n    fun showSourceDialog(source: AnimeSource) {\n        mutableState.update { it.copy(dialog = Dialog(source)) }\n    }\n\n    fun closeDialog() {\n        mutableState.update { it.copy(dialog = null) }\n    }\n\n    sealed interface Event {\n        data object FailedFetchingSources : Event\n    }\n\n    data class Dialog(val source: AnimeSource)\n\n    @Immutable\n    data class State(\n        val dialog: Dialog? = null,\n        val isLoading: Boolean = true,\n        val items: ImmutableList<AnimeSourceUiModel> = persistentListOf(),\n    ) {\n        val isEmpty = items.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.TravelExplore\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.anime.AnimeSourceOptionsDialog\nimport eu.kanade.presentation.browse.anime.AnimeSourcesScreen\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun Screen.animeSourcesTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { AnimeSourcesScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime_sources,\n        actions = persistentListOf(\n            AppBar.Action(\n                title = stringResource(MR.strings.action_global_search),\n                icon = Icons.Outlined.TravelExplore,\n                onClick = { navigator.push(GlobalAnimeSearchScreen()) },\n            ),\n            AppBar.Action(\n                title = stringResource(MR.strings.action_filter),\n                icon = Icons.Outlined.FilterList,\n                onClick = { navigator.push(AnimeSourcesFilterScreen()) },\n            ),\n        ),\n        content = { contentPadding, snackbarHostState ->\n            AnimeSourcesScreen(\n                state = state,\n                contentPadding = contentPadding,\n                onClickItem = { source, listing ->\n                    navigator.push(BrowseAnimeSourceScreen(source.id, listing.query))\n                },\n                onClickPin = screenModel::togglePin,\n                onLongClickItem = screenModel::showSourceDialog,\n            )\n\n            state.dialog?.let { dialog ->\n                val source = dialog.source\n                AnimeSourceOptionsDialog(\n                    source = source,\n                    onClickPin = {\n                        screenModel.togglePin(source)\n                        screenModel.closeDialog()\n                    },\n                    onClickDisable = {\n                        screenModel.toggleSource(source)\n                        screenModel.closeDialog()\n                    },\n                    onDismiss = screenModel::closeDialog,\n                )\n            }\n\n            val internalErrString = stringResource(MR.strings.internal_error)\n            LaunchedEffect(Unit) {\n                screenModel.events.collectLatest { event ->\n                    when (event) {\n                        AnimeSourcesScreenModel.Event.FailedFetchingSources -> {\n                            launch { snackbarHostState.showSnackbar(internalErrString) }\n                        }\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/BrowseAnimeSourceScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source.browse\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.horizontalScroll\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\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.outlined.Favorite\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.NewReleases\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.FilterChipDefaults\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.layout.onSizeChanged\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifAnimeSourcesLoaded\nimport eu.kanade.presentation.browse.RemoveEntryDialog\nimport eu.kanade.presentation.browse.anime.BrowseAnimeSourceContent\nimport eu.kanade.presentation.browse.anime.MissingSourceScreen\nimport eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceToolbar\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.entries.anime.DuplicateAnimeDialog\nimport eu.kanade.presentation.util.AssistContentScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.ui.browse.anime.extension.details.AnimeSourcePreferencesScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season.MigrateSeasonSelectScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialog\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialogScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreenModel.Listing\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport mihon.presentation.core.util.collectAsLazyPagingItems\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\n\ndata class BrowseAnimeSourceScreen(\n    val sourceId: Long,\n    private val listingQuery: String?,\n) : Screen(), AssistContentScreen {\n\n    private var assistUrl: String? = null\n\n    override fun onProvideAssistUrl() = assistUrl\n\n    @Composable\n    override fun Content() {\n        if (!ifAnimeSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val screenModel = rememberScreenModel { BrowseAnimeSourceScreenModel(sourceId, listingQuery) }\n        val state by screenModel.state.collectAsState()\n\n        val navigator = LocalNavigator.currentOrThrow\n        val navigateUp: () -> Unit = {\n            when {\n                !state.isUserQuery && state.toolbarQuery != null -> screenModel.setToolbarQuery(\n                    null,\n                )\n                else -> navigator.pop()\n            }\n        }\n\n        if (screenModel.source is StubAnimeSource) {\n            MissingSourceScreen(\n                source = screenModel.source,\n                navigateUp = navigateUp,\n            )\n            return\n        }\n\n        val scope = rememberCoroutineScope()\n        val haptic = LocalHapticFeedback.current\n        val uriHandler = LocalUriHandler.current\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        val onHelpClick = { uriHandler.openUri(LocalAnimeSource.HELP_URL) }\n        val onWebViewClick = f@{\n            val source = screenModel.source as? AnimeHttpSource ?: return@f\n            navigator.push(\n                WebViewScreen(\n                    url = source.baseUrl,\n                    initialTitle = source.name,\n                    sourceId = source.id,\n                ),\n            )\n        }\n\n        LaunchedEffect(screenModel.source) {\n            assistUrl = (screenModel.source as? AnimeHttpSource)?.baseUrl\n        }\n\n        var topBarHeight by remember { mutableIntStateOf(0) }\n        Scaffold(\n            topBar = {\n                Column(\n                    modifier = Modifier\n                        .background(MaterialTheme.colorScheme.surface)\n                        .onSizeChanged { topBarHeight = it.height },\n                ) {\n                    BrowseAnimeSourceToolbar(\n                        searchQuery = state.toolbarQuery,\n                        onSearchQueryChange = screenModel::setToolbarQuery,\n                        source = screenModel.source,\n                        displayMode = screenModel.displayMode,\n                        onDisplayModeChange = { screenModel.displayMode = it },\n                        navigateUp = navigateUp,\n                        onWebViewClick = onWebViewClick,\n                        onHelpClick = onHelpClick,\n                        onSettingsClick = { navigator.push(AnimeSourcePreferencesScreen(sourceId)) },\n                        onSearch = screenModel::search,\n                    )\n\n                    Row(\n                        modifier = Modifier\n                            .horizontalScroll(rememberScrollState())\n                            .padding(horizontal = MaterialTheme.padding.small),\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                    ) {\n                        FilterChip(\n                            selected = state.listing == Listing.Popular,\n                            onClick = {\n                                screenModel.resetFilters()\n                                screenModel.setListing(Listing.Popular)\n                            },\n                            leadingIcon = {\n                                Icon(\n                                    imageVector = Icons.Outlined.Favorite,\n                                    contentDescription = null,\n                                    modifier = Modifier\n                                        .size(FilterChipDefaults.IconSize),\n                                )\n                            },\n                            label = {\n                                Text(text = stringResource(MR.strings.popular))\n                            },\n                        )\n                        if ((screenModel.source as AnimeCatalogueSource).supportsLatest) {\n                            FilterChip(\n                                selected = state.listing == Listing.Latest,\n                                onClick = {\n                                    screenModel.resetFilters()\n                                    screenModel.setListing(Listing.Latest)\n                                },\n                                leadingIcon = {\n                                    Icon(\n                                        imageVector = Icons.Outlined.NewReleases,\n                                        contentDescription = null,\n                                        modifier = Modifier\n                                            .size(FilterChipDefaults.IconSize),\n                                    )\n                                },\n                                label = {\n                                    Text(text = stringResource(MR.strings.latest))\n                                },\n                            )\n                        }\n                        if (state.filters.isNotEmpty()) {\n                            FilterChip(\n                                selected = state.listing is Listing.Search,\n                                onClick = screenModel::openFilterSheet,\n                                leadingIcon = {\n                                    Icon(\n                                        imageVector = Icons.Outlined.FilterList,\n                                        contentDescription = null,\n                                        modifier = Modifier\n                                            .size(FilterChipDefaults.IconSize),\n                                    )\n                                },\n                                label = {\n                                    Text(text = stringResource(MR.strings.action_filter))\n                                },\n                            )\n                        }\n                    }\n\n                    HorizontalDivider()\n                }\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        ) { paddingValues ->\n            BrowseAnimeSourceContent(\n                source = screenModel.source,\n                animeList = screenModel.animePagerFlowFlow.collectAsLazyPagingItems(),\n                columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),\n                entries = screenModel.getColumnsPreferenceForCurrentOrientation(LocalConfiguration.current.orientation),\n                topBarHeight = topBarHeight,\n                displayMode = screenModel.displayMode,\n                snackbarHostState = snackbarHostState,\n                contentPadding = paddingValues,\n                onWebViewClick = onWebViewClick,\n                onHelpClick = { uriHandler.openUri(Constants.URL_HELP) },\n                onLocalAnimeSourceHelpClick = onHelpClick,\n                onAnimeClick = { navigator.push((AnimeScreen(it.id, true))) },\n                onAnimeLongClick = { anime ->\n                    scope.launchIO {\n                        val duplicateAnime = screenModel.getDuplicateAnimelibAnime(anime)\n                        when {\n                            anime.favorite -> screenModel.setDialog(\n                                BrowseAnimeSourceScreenModel.Dialog.RemoveAnime(anime),\n                            )\n                            duplicateAnime != null -> screenModel.setDialog(\n                                BrowseAnimeSourceScreenModel.Dialog.AddDuplicateAnime(\n                                    anime,\n                                    duplicateAnime,\n                                ),\n                            )\n                            else -> screenModel.addFavorite(anime)\n                        }\n                        haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                    }\n                },\n            )\n        }\n\n        val onDismissRequest = { screenModel.setDialog(null) }\n        when (val dialog = state.dialog) {\n            is BrowseAnimeSourceScreenModel.Dialog.Filter -> {\n                SourceFilterAnimeDialog(\n                    onDismissRequest = onDismissRequest,\n                    filters = state.filters,\n                    onReset = screenModel::resetFilters,\n                    onFilter = { screenModel.search(filters = state.filters) },\n                    onUpdate = screenModel::setFilters,\n                )\n            }\n            is BrowseAnimeSourceScreenModel.Dialog.AddDuplicateAnime -> {\n                DuplicateAnimeDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = { screenModel.addFavorite(dialog.anime) },\n                    onOpenAnime = { navigator.push(AnimeScreen(dialog.duplicate.id)) },\n                    onMigrate = {\n                        screenModel.setDialog(\n                            BrowseAnimeSourceScreenModel.Dialog.Migrate(dialog.anime, dialog.duplicate),\n                        )\n                    },\n                )\n            }\n\n            is BrowseAnimeSourceScreenModel.Dialog.Migrate -> {\n                MigrateAnimeDialog(\n                    oldAnime = dialog.oldAnime,\n                    newAnime = dialog.newAnime,\n                    screenModel = MigrateAnimeDialogScreenModel(),\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(AnimeScreen(dialog.oldAnime.id)) },\n                    onClickSeasons = { navigator.push(MigrateSeasonSelectScreen(dialog.oldAnime, dialog.newAnime)) },\n                    onPopScreen = {\n                        onDismissRequest()\n                    },\n                )\n            }\n            is BrowseAnimeSourceScreenModel.Dialog.RemoveAnime -> {\n                RemoveEntryDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = {\n                        screenModel.changeAnimeFavorite(dialog.anime)\n                    },\n                    entryToRemove = dialog.anime.title,\n                )\n            }\n            is BrowseAnimeSourceScreenModel.Dialog.ChangeAnimeCategory -> {\n                ChangeCategoryDialog(\n                    initialSelection = dialog.initialSelection,\n                    onDismissRequest = onDismissRequest,\n                    onEditCategories = { navigator.push(CategoriesTab) },\n                    onConfirm = { include, _ ->\n                        screenModel.changeAnimeFavorite(dialog.anime)\n                        screenModel.moveAnimeToCategories(dialog.anime, include)\n                    },\n                )\n            }\n            else -> {}\n        }\n\n        LaunchedEffect(Unit) {\n            queryEvent.receiveAsFlow()\n                .collectLatest {\n                    when (it) {\n                        is SearchType.Genre -> screenModel.searchGenre(it.txt)\n                        is SearchType.Text -> screenModel.search(it.txt)\n                    }\n                }\n        }\n    }\n\n    suspend fun search(query: String) = queryEvent.send(SearchType.Text(query))\n    suspend fun searchGenre(name: String) = queryEvent.send(SearchType.Genre(name))\n\n    companion object {\n        private val queryEvent = Channel<SearchType>()\n    }\n\n    sealed class SearchType(val txt: String) {\n        class Text(txt: String) : SearchType(txt)\n        class Genre(txt: String) : SearchType(txt)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/BrowseAnimeSourceScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source.browse\n\nimport android.content.res.Configuration\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.Pager\nimport androidx.paging.PagingConfig\nimport androidx.paging.cachedIn\nimport androidx.paging.filter\nimport androidx.paging.map\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.asState\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.toDomainAnime\nimport eu.kanade.domain.source.anime.interactor.GetAnimeIncognitoState\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.track.anime.interactor.AddAnimeTracks\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.util.removeBackgrounds\nimport eu.kanade.tachiyomi.util.removeCovers\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.emptyFlow\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.firstOrNull\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.mapAsCheckboxState\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.SetAnimeCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.interactor.GetDuplicateLibraryAnime\nimport tachiyomi.domain.entries.anime.interactor.NetworkToLocalAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.toAnimeUpdate\nimport tachiyomi.domain.items.episode.interactor.SetAnimeDefaultEpisodeFlags\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.interactor.GetRemoteAnime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilter as AnimeSourceModelFilter\n\nclass BrowseAnimeSourceScreenModel(\n    private val sourceId: Long,\n    listingQuery: String?,\n    sourceManager: AnimeSourceManager = Injekt.get(),\n    sourcePreferences: SourcePreferences = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val coverCache: AnimeCoverCache = Injekt.get(),\n    private val backgroundCache: AnimeBackgroundCache = Injekt.get(),\n    private val getRemoteAnime: GetRemoteAnime = Injekt.get(),\n    private val getDuplicateAnimelibAnime: GetDuplicateLibraryAnime = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val setAnimeCategories: SetAnimeCategories = Injekt.get(),\n    private val setAnimeDefaultEpisodeFlags: SetAnimeDefaultEpisodeFlags = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val networkToLocalAnime: NetworkToLocalAnime = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    private val addTracks: AddAnimeTracks = Injekt.get(),\n    private val getIncognitoState: GetAnimeIncognitoState = Injekt.get(),\n) : StateScreenModel<BrowseAnimeSourceScreenModel.State>(State(Listing.valueOf(listingQuery))) {\n\n    var displayMode by sourcePreferences.sourceDisplayMode().asState(screenModelScope)\n\n    val source = sourceManager.getOrStub(sourceId)\n\n    init {\n        if (source is AnimeCatalogueSource) {\n            mutableState.update {\n                var query: String? = null\n                var listing = it.listing\n\n                if (listing is Listing.Search) {\n                    query = listing.query\n                    listing = Listing.Search(query, source.getFilterList())\n                }\n\n                it.copy(\n                    listing = listing,\n                    filters = source.getFilterList(),\n                    toolbarQuery = query,\n                )\n            }\n        }\n\n        if (!getIncognitoState.await(source.id)) {\n            sourcePreferences.lastUsedAnimeSource().set(source.id)\n        }\n    }\n\n    /**\n     * Flow of Pager flow tied to [State.listing]\n     */\n    private val hideInLibraryItems = sourcePreferences.hideInAnimeLibraryItems().get()\n    val animePagerFlowFlow = state.map { it.listing }\n        .distinctUntilChanged()\n        .map { listing ->\n            Pager(PagingConfig(pageSize = 25)) {\n                getRemoteAnime.subscribe(sourceId, listing.query ?: \"\", listing.filters)\n            }.flow.map { pagingData ->\n                pagingData.map {\n                    networkToLocalAnime.await(it.toDomainAnime(sourceId))\n                        .let { localAnime -> getAnime.subscribe(localAnime.url, localAnime.source) }\n                        .filterNotNull()\n                        .stateIn(ioCoroutineScope)\n                }\n                    .filter { !hideInLibraryItems || !it.value.favorite }\n            }\n                .cachedIn(ioCoroutineScope)\n        }\n        .stateIn(ioCoroutineScope, SharingStarted.Lazily, emptyFlow())\n\n    fun getColumnsPreference(orientation: Int): GridCells {\n        val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE\n        val columns = if (isLandscape) {\n            libraryPreferences.animeLandscapeColumns()\n        } else {\n            libraryPreferences.animePortraitColumns()\n        }.get()\n        return if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns)\n    }\n\n    // returns the number from the size slider\n    fun getColumnsPreferenceForCurrentOrientation(orientation: Int): Int {\n        val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE\n        return if (isLandscape) {\n            libraryPreferences.animeLandscapeColumns()\n        } else {\n            libraryPreferences.animePortraitColumns()\n        }.get()\n    }\n\n    fun resetFilters() {\n        if (source !is AnimeCatalogueSource) return\n\n        mutableState.update { it.copy(filters = source.getFilterList()) }\n    }\n\n    fun setListing(listing: Listing) {\n        mutableState.update { it.copy(listing = listing, toolbarQuery = null) }\n    }\n\n    fun setFilters(filters: AnimeFilterList) {\n        if (source !is AnimeCatalogueSource) return\n\n        mutableState.update {\n            it.copy(\n                filters = filters,\n            )\n        }\n    }\n\n    fun search(query: String? = null, filters: AnimeFilterList? = null) {\n        if (source !is AnimeCatalogueSource) return\n\n        val input = state.value.listing as? Listing.Search\n            ?: Listing.Search(query = null, filters = source.getFilterList())\n\n        mutableState.update {\n            it.copy(\n                listing = input.copy(\n                    query = query ?: input.query,\n                    filters = filters ?: input.filters,\n                ),\n                toolbarQuery = query ?: input.query,\n            )\n        }\n    }\n\n    fun searchGenre(genreName: String) {\n        if (source !is AnimeCatalogueSource) return\n\n        val defaultFilters = source.getFilterList()\n        var genreExists = false\n\n        filter@ for (sourceFilter in defaultFilters) {\n            if (sourceFilter is AnimeSourceModelFilter.Group<*>) {\n                for (filter in sourceFilter.state) {\n                    if (filter is AnimeSourceModelFilter<*> && filter.name.equals(genreName, true)) {\n                        when (filter) {\n                            is AnimeSourceModelFilter.TriState -> filter.state = 1\n                            is AnimeSourceModelFilter.CheckBox -> filter.state = true\n                            else -> {}\n                        }\n                        genreExists = true\n                        break@filter\n                    }\n                }\n            } else if (sourceFilter is AnimeSourceModelFilter.Select<*>) {\n                val index = sourceFilter.values.filterIsInstance<String>()\n                    .indexOfFirst { it.equals(genreName, true) }\n\n                if (index != -1) {\n                    sourceFilter.state = index\n                    genreExists = true\n                    break\n                }\n            }\n        }\n        mutableState.update {\n            val listing = if (genreExists) {\n                Listing.Search(query = null, filters = defaultFilters)\n            } else {\n                Listing.Search(query = genreName, filters = defaultFilters)\n            }\n            it.copy(\n                filters = defaultFilters,\n                listing = listing,\n                toolbarQuery = listing.query,\n            )\n        }\n    }\n\n    /**\n     * Adds or removes an anime from the library.\n     *\n     * @param anime the anime to update.\n     */\n    fun changeAnimeFavorite(anime: Anime) {\n        screenModelScope.launch {\n            var new = anime.copy(\n                favorite = !anime.favorite,\n                dateAdded = when (anime.favorite) {\n                    true -> 0\n                    false -> Instant.now().toEpochMilli()\n                },\n            )\n\n            if (!new.favorite) {\n                new = new.removeCovers(coverCache)\n                new = new.removeBackgrounds(backgroundCache)\n            } else {\n                setAnimeDefaultEpisodeFlags.await(anime)\n                addTracks.bindEnhancedTrackers(anime, source)\n            }\n\n            updateAnime.await(new.toAnimeUpdate())\n        }\n    }\n\n    fun addFavorite(anime: Anime) {\n        screenModelScope.launch {\n            val categories = getCategories()\n            val defaultCategoryId = libraryPreferences.defaultAnimeCategory().get()\n            val defaultCategory = categories.find { it.id == defaultCategoryId.toLong() }\n\n            when {\n                // Default category set\n                defaultCategory != null -> {\n                    moveAnimeToCategories(anime, defaultCategory)\n\n                    changeAnimeFavorite(anime)\n                }\n                // Automatic 'Default' or no categories\n                defaultCategoryId == 0 || categories.isEmpty() -> {\n                    moveAnimeToCategories(anime)\n\n                    changeAnimeFavorite(anime)\n                }\n\n                // Choose a category\n                else -> {\n                    val preselectedIds = getCategories.await(anime.id).map { it.id }\n                    setDialog(\n                        Dialog.ChangeAnimeCategory(\n                            anime,\n                            categories.mapAsCheckboxState { it.id in preselectedIds }.toImmutableList(),\n                        ),\n                    )\n                }\n            }\n        }\n    }\n\n    /**\n     * Get user categories.\n     *\n     * @return List of categories, not including the default category\n     */\n    suspend fun getCategories(): List<Category> {\n        return getCategories.subscribe()\n            .firstOrNull()\n            ?.filterNot { it.isSystemCategory }\n            .orEmpty()\n    }\n\n    suspend fun getDuplicateAnimelibAnime(anime: Anime): Anime? {\n        return getDuplicateAnimelibAnime.await(anime).getOrNull(0)\n    }\n\n    private fun moveAnimeToCategories(anime: Anime, vararg categories: Category) {\n        moveAnimeToCategories(anime, categories.filter { it.id != 0L }.map { it.id })\n    }\n\n    fun moveAnimeToCategories(anime: Anime, categoryIds: List<Long>) {\n        screenModelScope.launchIO {\n            setAnimeCategories.await(\n                animeId = anime.id,\n                categoryIds = categoryIds.toList(),\n            )\n        }\n    }\n\n    fun openFilterSheet() {\n        setDialog(Dialog.Filter)\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    fun setToolbarQuery(query: String?) {\n        mutableState.update { it.copy(toolbarQuery = query) }\n    }\n\n    sealed class Listing(open val query: String?, open val filters: AnimeFilterList) {\n        data object Popular : Listing(\n            query = GetRemoteAnime.QUERY_POPULAR,\n            filters = AnimeFilterList(),\n        )\n        data object Latest : Listing(\n            query = GetRemoteAnime.QUERY_LATEST,\n            filters = AnimeFilterList(),\n        )\n        data class Search(override val query: String?, override val filters: AnimeFilterList) : Listing(\n            query = query,\n            filters = filters,\n        )\n\n        companion object {\n            fun valueOf(query: String?): Listing {\n                return when (query) {\n                    GetRemoteAnime.QUERY_POPULAR -> Popular\n                    GetRemoteAnime.QUERY_LATEST -> Latest\n                    else -> Search(query = query, filters = AnimeFilterList()) // filters are filled in later\n                }\n            }\n        }\n    }\n\n    sealed interface Dialog {\n        data object Filter : Dialog\n        data class RemoveAnime(val anime: Anime) : Dialog\n        data class AddDuplicateAnime(val anime: Anime, val duplicate: Anime) : Dialog\n        data class ChangeAnimeCategory(\n            val anime: Anime,\n            val initialSelection: ImmutableList<CheckboxState.State<Category>>,\n        ) : Dialog\n        data class Migrate(val newAnime: Anime, val oldAnime: Anime) : Dialog\n    }\n\n    @Immutable\n    data class State(\n        val listing: Listing,\n        val filters: AnimeFilterList = AnimeFilterList(),\n        val toolbarQuery: String? = null,\n        val dialog: Dialog? = null,\n    ) {\n        val isUserQuery get() = listing is Listing.Search && !listing.query.isNullOrEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/SourceFilterAnimeDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source.browse\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilter\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.CollapsibleBox\nimport tachiyomi.presentation.core.components.HeadingItem\nimport tachiyomi.presentation.core.components.SelectItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TextItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun SourceFilterAnimeDialog(\n    onDismissRequest: () -> Unit,\n    filters: AnimeFilterList,\n    onReset: () -> Unit,\n    onFilter: () -> Unit,\n    onUpdate: (AnimeFilterList) -> Unit,\n) {\n    val updateFilters = { onUpdate(filters) }\n\n    AdaptiveSheet(onDismissRequest = onDismissRequest) {\n        LazyColumn {\n            stickyHeader {\n                Row(\n                    modifier = Modifier\n                        .background(MaterialTheme.colorScheme.background)\n                        .padding(8.dp),\n                ) {\n                    TextButton(onClick = onReset) {\n                        Text(\n                            text = stringResource(MR.strings.action_reset),\n                            style = LocalTextStyle.current.copy(\n                                color = MaterialTheme.colorScheme.primary,\n                            ),\n                        )\n                    }\n\n                    Spacer(modifier = Modifier.weight(1f))\n\n                    Button(onClick = {\n                        onFilter()\n                        onDismissRequest()\n                    }) {\n                        Text(stringResource(MR.strings.action_filter))\n                    }\n                }\n                HorizontalDivider()\n            }\n\n            items(filters) {\n                FilterItem(it, updateFilters)\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun FilterItem(filter: AnimeFilter<*>, onUpdate: () -> Unit) {\n    when (filter) {\n        is AnimeFilter.Header -> {\n            HeadingItem(filter.name)\n        }\n        is AnimeFilter.Separator -> {\n            HorizontalDivider()\n        }\n        is AnimeFilter.CheckBox -> {\n            CheckboxItem(\n                label = filter.name,\n                checked = filter.state,\n            ) {\n                filter.state = !filter.state\n                onUpdate()\n            }\n        }\n        is AnimeFilter.TriState -> {\n            TriStateItem(\n                label = filter.name,\n                state = filter.state.toTriStateFilter(),\n            ) {\n                filter.state = filter.state.toTriStateFilter().next().toTriStateInt()\n                onUpdate()\n            }\n        }\n        is AnimeFilter.Text -> {\n            TextItem(\n                label = filter.name,\n                value = filter.state,\n            ) {\n                filter.state = it\n                onUpdate()\n            }\n        }\n        is AnimeFilter.Select<*> -> {\n            SelectItem(\n                label = filter.name,\n                options = filter.values,\n                selectedIndex = filter.state,\n                onSelect = {\n                    filter.state = it\n                    onUpdate()\n                },\n            )\n        }\n        is AnimeFilter.Sort -> {\n            CollapsibleBox(\n                heading = filter.name,\n            ) {\n                Column {\n                    filter.values.mapIndexed { index, item ->\n                        SortItem(\n                            label = item,\n                            sortDescending = filter.state?.ascending?.not()\n                                ?.takeIf { index == filter.state?.index },\n                        ) {\n                            val ascending = if (index == filter.state?.index) {\n                                !filter.state!!.ascending\n                            } else {\n                                filter.state!!.ascending\n                            }\n                            filter.state = AnimeFilter.Sort.Selection(\n                                index = index,\n                                ascending = ascending,\n                            )\n                            onUpdate()\n                        }\n                    }\n                }\n            }\n        }\n        is AnimeFilter.Group<*> -> {\n            CollapsibleBox(\n                heading = filter.name,\n            ) {\n                Column {\n                    filter.state\n                        .filterIsInstance<AnimeFilter<*>>()\n                        .map { FilterItem(filter = it, onUpdate = onUpdate) }\n                }\n            }\n        }\n    }\n}\n\nprivate fun Int.toTriStateFilter(): TriState {\n    return when (this) {\n        AnimeFilter.TriState.STATE_IGNORE -> TriState.DISABLED\n        AnimeFilter.TriState.STATE_INCLUDE -> TriState.ENABLED_IS\n        AnimeFilter.TriState.STATE_EXCLUDE -> TriState.ENABLED_NOT\n        else -> throw IllegalStateException(\"Unknown TriState state: $this\")\n    }\n}\n\nprivate fun TriState.toTriStateInt(): Int {\n    return when (this) {\n        TriState.DISABLED -> AnimeFilter.TriState.STATE_IGNORE\n        TriState.ENABLED_IS -> AnimeFilter.TriState.STATE_INCLUDE\n        TriState.ENABLED_NOT -> AnimeFilter.TriState.STATE_EXCLUDE\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/AnimeSearchScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.produceState\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.entries.anime.model.toDomainAnime\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport kotlinx.collections.immutable.PersistentMap\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toPersistentMap\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.asCoroutineDispatcher\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.isActive\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport tachiyomi.core.common.preference.toggle\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.interactor.NetworkToLocalAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.Executors\n\nabstract class AnimeSearchScreenModel(\n    initialState: State = State(),\n    sourcePreferences: SourcePreferences = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val extensionManager: AnimeExtensionManager = Injekt.get(),\n    private val networkToLocalAnime: NetworkToLocalAnime = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val preferences: SourcePreferences = Injekt.get(),\n) : StateScreenModel<AnimeSearchScreenModel.State>(initialState) {\n\n    private val coroutineDispatcher = Executors.newFixedThreadPool(5).asCoroutineDispatcher()\n    private var searchJob: Job? = null\n\n    private val enabledLanguages = sourcePreferences.enabledLanguages().get()\n    private val disabledSources = sourcePreferences.disabledAnimeSources().get()\n    protected val pinnedSources = sourcePreferences.pinnedAnimeSources().get()\n\n    private var lastQuery: String? = null\n    private var lastSourceFilter: AnimeSourceFilter? = null\n\n    protected var extensionFilter: String? = null\n\n    private val sortComparator = { map: Map<AnimeCatalogueSource, AnimeSearchItemResult> ->\n        compareBy<AnimeCatalogueSource>(\n            { (map[it] as? AnimeSearchItemResult.Success)?.isEmpty ?: true },\n            { \"${it.id}\" !in pinnedSources },\n            { \"${it.name.lowercase()} (${it.lang})\" },\n        )\n    }\n\n    init {\n        screenModelScope.launch {\n            preferences.globalSearchFilterState().changes().collectLatest { state ->\n                mutableState.update { it.copy(onlyShowHasResults = state) }\n            }\n        }\n    }\n\n    @Composable\n    fun getAnime(initialAnime: Anime): androidx.compose.runtime.State<Anime> {\n        return produceState(initialValue = initialAnime) {\n            getAnime.subscribe(initialAnime.url, initialAnime.source)\n                .filterNotNull()\n                .collectLatest { anime ->\n                    value = anime\n                }\n        }\n    }\n\n    open fun getEnabledSources(): List<AnimeCatalogueSource> {\n        return sourceManager.getCatalogueSources()\n            .filter { it.lang in enabledLanguages && \"${it.id}\" !in disabledSources }\n            .sortedWith(\n                compareBy(\n                    { \"${it.id}\" !in pinnedSources },\n                    { \"${it.name.lowercase()} (${it.lang})\" },\n                ),\n            )\n    }\n\n    private fun getSelectedSources(): List<AnimeCatalogueSource> {\n        val enabledSources = getEnabledSources()\n\n        val filter = extensionFilter\n        if (filter.isNullOrEmpty()) {\n            return enabledSources\n        }\n\n        return extensionManager.installedExtensionsFlow.value\n            .filter { it.pkgName == filter }\n            .flatMap { it.sources }\n            .filterIsInstance<AnimeCatalogueSource>()\n            .filter { it in enabledSources }\n    }\n\n    fun updateSearchQuery(query: String?) {\n        mutableState.update { it.copy(searchQuery = query) }\n    }\n\n    fun setSourceFilter(filter: AnimeSourceFilter) {\n        mutableState.update { it.copy(sourceFilter = filter) }\n        search()\n    }\n\n    fun toggleFilterResults() {\n        preferences.globalSearchFilterState().toggle()\n    }\n\n    fun search() {\n        val query = state.value.searchQuery\n        val sourceFilter = state.value.sourceFilter\n\n        if (query.isNullOrBlank()) return\n        val sameQuery = this.lastQuery == query\n        if (sameQuery && this.lastSourceFilter == sourceFilter) return\n\n        this.lastQuery = query\n        this.lastSourceFilter = sourceFilter\n\n        val sources = getSelectedSources()\n\n        // Reuse previous results if possible\n        if (sameQuery) {\n            val existingResults = state.value.items\n            updateItems(\n                sources\n                    .associateWith { existingResults[it] ?: AnimeSearchItemResult.Loading }\n                    .toPersistentMap(),\n            )\n        } else {\n            updateItems(\n                sources\n                    .associateWith { AnimeSearchItemResult.Loading }\n                    .toPersistentMap(),\n            )\n        }\n\n        searchJob = ioCoroutineScope.launch {\n            sources.map { source ->\n                async {\n                    if (state.value.items[source] !is AnimeSearchItemResult.Loading) {\n                        return@async\n                    }\n                    try {\n                        val page = withContext(coroutineDispatcher) {\n                            source.getSearchAnime(1, query, source.getFilterList())\n                        }\n\n                        val titles = page.animes.map {\n                            networkToLocalAnime.await(it.toDomainAnime(source.id))\n                        }\n\n                        if (isActive) {\n                            updateItem(source, AnimeSearchItemResult.Success(titles))\n                        }\n                    } catch (e: Exception) {\n                        if (isActive) {\n                            updateItem(source, AnimeSearchItemResult.Error(e))\n                        }\n                    }\n                }\n            }\n                .awaitAll()\n        }\n    }\n\n    private fun updateItems(items: PersistentMap<AnimeCatalogueSource, AnimeSearchItemResult>) {\n        mutableState.update {\n            it.copy(\n                items = items\n                    .toSortedMap(sortComparator(items))\n                    .toPersistentMap(),\n            )\n        }\n    }\n\n    private fun updateItem(source: AnimeCatalogueSource, result: AnimeSearchItemResult) {\n        val newItems = state.value.items.mutate {\n            it[source] = result\n        }\n        updateItems(newItems)\n    }\n\n    @Immutable\n    data class State(\n        val fromSourceId: Long? = null,\n        val searchQuery: String? = null,\n        val sourceFilter: AnimeSourceFilter = AnimeSourceFilter.PinnedOnly,\n        val onlyShowHasResults: Boolean = false,\n        val items: PersistentMap<AnimeCatalogueSource, AnimeSearchItemResult> = persistentMapOf(),\n    ) {\n        val progress: Int = items.count { it.value !is AnimeSearchItemResult.Loading }\n        val total: Int = items.size\n        val filteredItems = items.filter { (_, result) -> result.isVisible(onlyShowHasResults) }\n    }\n}\n\nenum class AnimeSourceFilter {\n    All,\n    PinnedOnly,\n}\n\nsealed interface AnimeSearchItemResult {\n    data object Loading : AnimeSearchItemResult\n\n    data class Error(\n        val throwable: Throwable,\n    ) : AnimeSearchItemResult\n\n    data class Success(\n        val result: List<Anime>,\n    ) : AnimeSearchItemResult {\n        val isEmpty: Boolean\n            get() = result.isEmpty()\n    }\n\n    fun isVisible(onlyShowHasResults: Boolean): Boolean {\n        return !onlyShowHasResults || (this is Success && !this.isEmpty)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/GlobalAnimeSearchScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifAnimeSourcesLoaded\nimport eu.kanade.presentation.browse.anime.GlobalAnimeSearchScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass GlobalAnimeSearchScreen(\n    val searchQuery: String = \"\",\n    private val extensionFilter: String? = null,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        if (!ifAnimeSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel {\n            GlobalAnimeSearchScreenModel(\n                initialQuery = searchQuery,\n                initialExtensionFilter = extensionFilter,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n        var showSingleLoadingScreen by remember {\n            mutableStateOf(\n                searchQuery.isNotEmpty() && !extensionFilter.isNullOrEmpty() && state.total == 1,\n            )\n        }\n\n        if (showSingleLoadingScreen) {\n            LoadingScreen()\n\n            LaunchedEffect(state.items) {\n                when (val result = state.items.values.singleOrNull()) {\n                    AnimeSearchItemResult.Loading -> return@LaunchedEffect\n                    is AnimeSearchItemResult.Success -> {\n                        val anime = result.result.singleOrNull()\n                        if (anime != null) {\n                            navigator.replace(AnimeScreen(anime.id, true))\n                        } else {\n                            // Backoff to result screen\n                            showSingleLoadingScreen = false\n                        }\n                    }\n                    else -> showSingleLoadingScreen = false\n                }\n            }\n        } else {\n            GlobalAnimeSearchScreen(\n                state = state,\n                navigateUp = navigator::pop,\n                onChangeSearchQuery = screenModel::updateSearchQuery,\n                onSearch = { screenModel.search() },\n                getAnime = { screenModel.getAnime(it) },\n                onChangeSearchFilter = screenModel::setSourceFilter,\n                onToggleResults = screenModel::toggleFilterResults,\n                onClickSource = {\n                    navigator.push(BrowseAnimeSourceScreen(it.id, state.searchQuery))\n                },\n                onClickItem = { navigator.push(AnimeScreen(it.id, true)) },\n                onLongClickItem = { navigator.push(AnimeScreen(it.id, true)) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/GlobalAnimeSearchScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch\n\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\n\nclass GlobalAnimeSearchScreenModel(\n    initialQuery: String = \"\",\n    initialExtensionFilter: String? = null,\n) : AnimeSearchScreenModel(\n    State(\n        searchQuery = initialQuery,\n    ),\n) {\n\n    init {\n        extensionFilter = initialExtensionFilter\n        if (initialQuery.isNotBlank() || !initialExtensionFilter.isNullOrBlank()) {\n            if (extensionFilter != null) {\n                // we're going to use custom extension filter instead\n                setSourceFilter(AnimeSourceFilter.All)\n            }\n            search()\n        }\n    }\n\n    override fun getEnabledSources(): List<AnimeCatalogueSource> {\n        return super.getEnabledSources()\n            .filter { state.value.sourceFilter != AnimeSourceFilter.PinnedOnly || \"${it.id}\" in pinnedSources }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionFilterScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MangaExtensionFilterScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass MangaExtensionFilterScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { MangaExtensionFilterScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        if (state is MangaExtensionFilterState.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as MangaExtensionFilterState.Success\n\n        MangaExtensionFilterScreen(\n            navigateUp = navigator::pop,\n            state = successState,\n            onClickToggle = screenModel::toggle,\n        )\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest {\n                when (it) {\n                    MangaExtensionFilterEvent.FailedFetchingLanguages -> {\n                        context.toast(MR.strings.internal_error)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionFilterScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.extension.manga.interactor.GetMangaExtensionLanguages\nimport eu.kanade.domain.source.interactor.ToggleLanguage\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableSet\nimport kotlinx.collections.immutable.persistentSetOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaExtensionFilterScreenModel(\n    private val preferences: SourcePreferences = Injekt.get(),\n    private val getExtensionLanguages: GetMangaExtensionLanguages = Injekt.get(),\n    private val toggleLanguage: ToggleLanguage = Injekt.get(),\n) : StateScreenModel<MangaExtensionFilterState>(MangaExtensionFilterState.Loading) {\n\n    private val _events: Channel<MangaExtensionFilterEvent> = Channel()\n    val events: Flow<MangaExtensionFilterEvent> = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            combine(\n                getExtensionLanguages.subscribe(),\n                preferences.enabledLanguages().changes(),\n            ) { a, b -> a to b }\n                .catch { throwable ->\n                    logcat(LogPriority.ERROR, throwable)\n                    _events.send(MangaExtensionFilterEvent.FailedFetchingLanguages)\n                }\n                .collectLatest { (extensionLanguages, enabledLanguages) ->\n                    mutableState.update {\n                        MangaExtensionFilterState.Success(\n                            languages = extensionLanguages.toImmutableList(),\n                            enabledLanguages = enabledLanguages.toImmutableSet(),\n                        )\n                    }\n                }\n        }\n    }\n\n    fun toggle(language: String) {\n        toggleLanguage.await(language)\n    }\n}\n\nsealed interface MangaExtensionFilterEvent {\n    data object FailedFetchingLanguages : MangaExtensionFilterEvent\n}\n\nsealed interface MangaExtensionFilterState {\n\n    @Immutable\n    data object Loading : MangaExtensionFilterState\n\n    @Immutable\n    data class Success(\n        val languages: ImmutableList<String>,\n        val enabledLanguages: ImmutableSet<String> = persistentSetOf(),\n    ) : MangaExtensionFilterState {\n\n        val isEmpty: Boolean\n            get() = languages.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension\n\nimport android.app.Application\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.extension.manga.interactor.GetMangaExtensionsByType\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS\nimport eu.kanade.tachiyomi.extension.InstallStep\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\nclass MangaExtensionsScreenModel(\n    preferences: SourcePreferences = Injekt.get(),\n    basePreferences: BasePreferences = Injekt.get(),\n    private val extensionManager: MangaExtensionManager = Injekt.get(),\n    private val getExtensions: GetMangaExtensionsByType = Injekt.get(),\n) : StateScreenModel<MangaExtensionsScreenModel.State>(State()) {\n\n    private val currentDownloads = MutableStateFlow<Map<String, InstallStep>>(hashMapOf())\n\n    init {\n        val context = Injekt.get<Application>()\n        val extensionMapper: (Map<String, InstallStep>) -> ((MangaExtension) -> MangaExtensionUiModel.Item) = { map ->\n            {\n                MangaExtensionUiModel.Item(it, map[it.pkgName] ?: InstallStep.Idle)\n            }\n        }\n        val queryFilter: (String) -> ((MangaExtension) -> Boolean) = { query ->\n            filter@{ extension ->\n                if (query.isEmpty()) return@filter true\n                query.split(\",\").any { _input ->\n                    val input = _input.trim()\n                    if (input.isEmpty()) return@any false\n                    when (extension) {\n                        is MangaExtension.Available -> {\n                            extension.sources.any {\n                                it.name.contains(input, ignoreCase = true) ||\n                                    it.baseUrl.contains(input, ignoreCase = true) ||\n                                    it.id == input.toLongOrNull()\n                            } ||\n                                extension.name.contains(input, ignoreCase = true)\n                        }\n                        is MangaExtension.Installed -> {\n                            extension.sources.any {\n                                it.name.contains(input, ignoreCase = true) ||\n                                    it.id == input.toLongOrNull() ||\n                                    if (it is HttpSource) {\n                                        it.baseUrl.contains(\n                                            input,\n                                            ignoreCase = true,\n                                        )\n                                    } else {\n                                        false\n                                    }\n                            } ||\n                                extension.name.contains(input, ignoreCase = true)\n                        }\n                        is MangaExtension.Untrusted -> extension.name.contains(\n                            input,\n                            ignoreCase = true,\n                        )\n                    }\n                }\n            }\n        }\n\n        screenModelScope.launchIO {\n            combine(\n                state.map { it.searchQuery }.distinctUntilChanged().debounce(SEARCH_DEBOUNCE_MILLIS),\n                currentDownloads,\n                getExtensions.subscribe(),\n            ) { query, downloads, (_updates, _installed, _available, _untrusted) ->\n                val searchQuery = query ?: \"\"\n\n                val itemsGroups: ItemGroups = mutableMapOf()\n\n                val updates = _updates.filter(queryFilter(searchQuery)).map(\n                    extensionMapper(downloads),\n                )\n                if (updates.isNotEmpty()) {\n                    itemsGroups[MangaExtensionUiModel.Header.Resource(MR.strings.ext_updates_pending)] = updates\n                }\n\n                val installed = _installed.filter(queryFilter(searchQuery)).map(\n                    extensionMapper(downloads),\n                )\n                val untrusted = _untrusted.filter(queryFilter(searchQuery)).map(\n                    extensionMapper(downloads),\n                )\n                if (installed.isNotEmpty() || untrusted.isNotEmpty()) {\n                    itemsGroups[MangaExtensionUiModel.Header.Resource(MR.strings.ext_installed)] = installed + untrusted\n                }\n\n                val languagesWithExtensions = _available\n                    .filter(queryFilter(searchQuery))\n                    .groupBy { it.lang }\n                    .toSortedMap(LocaleHelper.comparator)\n                    .map { (lang, exts) ->\n                        MangaExtensionUiModel.Header.Text(\n                            LocaleHelper.getSourceDisplayName(lang, context),\n                        ) to exts.map(extensionMapper(downloads))\n                    }\n\n                if (languagesWithExtensions.isNotEmpty()) {\n                    itemsGroups.putAll(languagesWithExtensions)\n                }\n\n                itemsGroups\n            }\n                .collectLatest {\n                    mutableState.update { state ->\n                        state.copy(\n                            isLoading = false,\n                            items = it,\n                        )\n                    }\n                }\n        }\n\n        screenModelScope.launchIO { findAvailableExtensions() }\n\n        preferences.mangaExtensionUpdatesCount().changes()\n            .onEach { mutableState.update { state -> state.copy(updates = it) } }\n            .launchIn(screenModelScope)\n\n        basePreferences.extensionInstaller().changes()\n            .onEach { mutableState.update { state -> state.copy(installer = it) } }\n            .launchIn(screenModelScope)\n    }\n\n    fun search(query: String?) {\n        mutableState.update {\n            it.copy(searchQuery = query)\n        }\n    }\n\n    fun updateAllExtensions() {\n        screenModelScope.launchIO {\n            state.value.items.values.flatten()\n                .map { it.extension }\n                .filterIsInstance<MangaExtension.Installed>()\n                .filter { it.hasUpdate }\n                .forEach(::updateExtension)\n        }\n    }\n\n    fun installExtension(extension: MangaExtension.Available) {\n        screenModelScope.launchIO {\n            extensionManager.installExtension(extension).collectToInstallUpdate(extension)\n        }\n    }\n\n    fun updateExtension(extension: MangaExtension.Installed) {\n        screenModelScope.launchIO {\n            extensionManager.updateExtension(extension).collectToInstallUpdate(extension)\n        }\n    }\n\n    fun cancelInstallUpdateExtension(extension: MangaExtension) {\n        extensionManager.cancelInstallUpdateExtension(extension)\n    }\n\n    private fun addDownloadState(extension: MangaExtension, installStep: InstallStep) {\n        currentDownloads.update { it + Pair(extension.pkgName, installStep) }\n    }\n\n    private fun removeDownloadState(extension: MangaExtension) {\n        currentDownloads.update { it - extension.pkgName }\n    }\n\n    private suspend fun Flow<InstallStep>.collectToInstallUpdate(extension: MangaExtension) =\n        this\n            .onEach { installStep -> addDownloadState(extension, installStep) }\n            .onCompletion { removeDownloadState(extension) }\n            .collect()\n\n    fun uninstallExtension(extension: MangaExtension) {\n        extensionManager.uninstallExtension(extension)\n    }\n\n    fun findAvailableExtensions() {\n        screenModelScope.launchIO {\n            mutableState.update { it.copy(isRefreshing = true) }\n\n            extensionManager.findAvailableExtensions()\n\n            // Fake slower refresh so it doesn't seem like it's not doing anything\n            delay(1.seconds)\n\n            mutableState.update { it.copy(isRefreshing = false) }\n        }\n    }\n\n    fun trustExtension(extension: MangaExtension.Untrusted) {\n        screenModelScope.launch {\n            extensionManager.trust(extension)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val isRefreshing: Boolean = false,\n        val items: ItemGroups = mutableMapOf(),\n        val updates: Int = 0,\n        val installer: BasePreferences.ExtensionInstaller? = null,\n        val searchQuery: String? = null,\n    ) {\n        val isEmpty = items.isEmpty()\n    }\n}\n\ntypealias ItemGroups = MutableMap<MangaExtensionUiModel.Header, List<MangaExtensionUiModel.Item>>\n\nobject MangaExtensionUiModel {\n    sealed interface Header {\n        data class Resource(val textRes: StringResource) : Header\n        data class Text(val text: String) : Header\n    }\n\n    data class Item(\n        val extension: MangaExtension,\n        val installStep: InstallStep,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionsTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MangaExtensionScreen\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.more.settings.screen.browse.MangaExtensionReposScreen\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.details.MangaExtensionDetailsScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport eu.kanade.tachiyomi.util.system.isPackageInstalled\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun mangaExtensionsTab(\n    extensionsScreenModel: MangaExtensionsScreenModel,\n): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val context = LocalContext.current\n\n    val state by extensionsScreenModel.state.collectAsState()\n    var privateExtensionToUninstall by remember { mutableStateOf<MangaExtension?>(null) }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_manga_extensions,\n        badgeNumber = state.updates.takeIf { it > 0 },\n        searchEnabled = true,\n        actions = persistentListOf(\n            AppBar.OverflowAction(\n                title = stringResource(MR.strings.action_filter),\n                onClick = { navigator.push(MangaExtensionFilterScreen()) },\n            ),\n            AppBar.OverflowAction(\n                title = stringResource(MR.strings.label_extension_repos),\n                onClick = { navigator.push(MangaExtensionReposScreen()) },\n            ),\n        ),\n        content = { contentPadding, _ ->\n            MangaExtensionScreen(\n                state = state,\n                contentPadding = contentPadding,\n                searchQuery = state.searchQuery,\n                onLongClickItem = { extension ->\n                    when (extension) {\n                        is MangaExtension.Available -> extensionsScreenModel.installExtension(\n                            extension,\n                        )\n                        else -> {\n                            if (context.isPackageInstalled(extension.pkgName)) {\n                                extensionsScreenModel.uninstallExtension(extension)\n                            } else {\n                                privateExtensionToUninstall = extension\n                            }\n                        }\n                    }\n                },\n                onClickItemCancel = extensionsScreenModel::cancelInstallUpdateExtension,\n                onClickUpdateAll = extensionsScreenModel::updateAllExtensions,\n                onOpenWebView = { extension ->\n                    extension.sources.getOrNull(0)?.let {\n                        navigator.push(\n                            WebViewScreen(\n                                url = it.baseUrl,\n                                initialTitle = it.name,\n                                sourceId = it.id,\n                            ),\n                        )\n                    }\n                },\n                onInstallExtension = extensionsScreenModel::installExtension,\n                onOpenExtension = { navigator.push(MangaExtensionDetailsScreen(it.pkgName)) },\n                onTrustExtension = { extensionsScreenModel.trustExtension(it) },\n                onUninstallExtension = { extensionsScreenModel.uninstallExtension(it) },\n                onUpdateExtension = extensionsScreenModel::updateExtension,\n                onRefresh = extensionsScreenModel::findAvailableExtensions,\n            )\n\n            privateExtensionToUninstall?.let { extension ->\n                MangaExtensionUninstallConfirmation(\n                    extensionName = extension.name,\n                    onClickConfirm = {\n                        extensionsScreenModel.uninstallExtension(extension)\n                    },\n                    onDismissRequest = {\n                        privateExtensionToUninstall = null\n                    },\n                )\n            }\n        },\n    )\n}\n\n@Composable\nprivate fun MangaExtensionUninstallConfirmation(\n    extensionName: String,\n    onClickConfirm: () -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    AlertDialog(\n        title = {\n            Text(text = stringResource(MR.strings.ext_confirm_remove))\n        },\n        text = {\n            Text(text = stringResource(MR.strings.remove_private_extension_message, extensionName))\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onClickConfirm()\n                    onDismissRequest()\n                },\n            ) {\n                Text(text = stringResource(MR.strings.ext_remove))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest) {\n                Text(text = stringResource(MR.strings.action_cancel))\n            }\n        },\n        onDismissRequest = onDismissRequest,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/details/MangaExtensionDetailsScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension.details\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MangaExtensionDetailsScreen\nimport eu.kanade.presentation.util.Screen\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\ndata class MangaExtensionDetailsScreen(\n    private val pkgName: String,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val screenModel = rememberScreenModel {\n            MangaExtensionDetailsScreenModel(\n                pkgName = pkgName,\n                context = context,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        if (state.isLoading) {\n            LoadingScreen()\n            return\n        }\n\n        val navigator = LocalNavigator.currentOrThrow\n\n        MangaExtensionDetailsScreen(\n            navigateUp = navigator::pop,\n            state = state,\n            onClickSourcePreferences = { navigator.push(MangaSourcePreferencesScreen(it)) },\n            onClickEnableAll = { screenModel.toggleSources(true) },\n            onClickDisableAll = { screenModel.toggleSources(false) },\n            onClickClearCookies = screenModel::clearCookies,\n            onClickUninstall = screenModel::uninstallExtension,\n            onClickSource = screenModel::toggleSource,\n            onClickIncognito = screenModel::toggleIncognito,\n        )\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                if (event is MangaExtensionDetailsEvent.Uninstalled) {\n                    navigator.pop()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/details/MangaExtensionDetailsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension.details\n\nimport android.content.Context\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.extension.manga.interactor.GetExtensionSources\nimport eu.kanade.domain.extension.manga.interactor.MangaExtensionSourceItem\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaIncognito\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaSource\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.model.MangaExtension\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaExtensionDetailsScreenModel(\n    pkgName: String,\n    context: Context,\n    private val network: NetworkHelper = Injekt.get(),\n    private val extensionManager: MangaExtensionManager = Injekt.get(),\n    private val getExtensionSources: GetExtensionSources = Injekt.get(),\n    private val toggleSource: ToggleMangaSource = Injekt.get(),\n    private val toggleIncognito: ToggleMangaIncognito = Injekt.get(),\n    private val preferences: SourcePreferences = Injekt.get(),\n) : StateScreenModel<MangaExtensionDetailsScreenModel.State>(State()) {\n\n    private val _events: Channel<MangaExtensionDetailsEvent> = Channel()\n    val events: Flow<MangaExtensionDetailsEvent> = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            launch {\n                extensionManager.installedExtensionsFlow\n                    .map { it.firstOrNull { extension -> extension.pkgName == pkgName } }\n                    .collectLatest { extension ->\n                        if (extension == null) {\n                            _events.send(MangaExtensionDetailsEvent.Uninstalled)\n                            return@collectLatest\n                        }\n                        mutableState.update { state ->\n                            state.copy(extension = extension)\n                        }\n                    }\n            }\n            launch {\n                state.collectLatest { state ->\n                    if (state.extension == null) return@collectLatest\n                    getExtensionSources.subscribe(state.extension)\n                        .map {\n                            it.sortedWith(\n                                compareBy(\n                                    { !it.enabled },\n                                    { item ->\n                                        item.source.name.takeIf { item.labelAsName }\n                                            ?: LocaleHelper.getSourceDisplayName(\n                                                item.source.lang,\n                                                context,\n                                            ).lowercase()\n                                    },\n                                ),\n                            )\n                        }\n                        .catch { throwable ->\n                            logcat(LogPriority.ERROR, throwable)\n                            mutableState.update { it.copy(_sources = persistentListOf()) }\n                        }\n                        .collectLatest { sources ->\n                            mutableState.update { it.copy(_sources = sources.toImmutableList()) }\n                        }\n                }\n            }\n            launch {\n                preferences.incognitoMangaExtensions()\n                    .changes()\n                    .map { pkgName in it }\n                    .distinctUntilChanged()\n                    .collectLatest { isIncognito ->\n                        mutableState.update { it.copy(isIncognito = isIncognito) }\n                    }\n            }\n        }\n    }\n\n    fun clearCookies() {\n        val extension = state.value.extension ?: return\n\n        val urls = extension.sources\n            .filterIsInstance<HttpSource>()\n            .mapNotNull { it.baseUrl.takeUnless { url -> url.isEmpty() } }\n            .distinct()\n\n        val cleared = urls.sumOf {\n            try {\n                network.cookieJar.remove(it.toHttpUrl())\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to clear cookies for $it\" }\n                0\n            }\n        }\n\n        logcat { \"Cleared $cleared cookies for: ${urls.joinToString()}\" }\n    }\n\n    fun uninstallExtension() {\n        val extension = state.value.extension ?: return\n        extensionManager.uninstallExtension(extension)\n    }\n\n    fun toggleSource(sourceId: Long) {\n        toggleSource.await(sourceId)\n    }\n\n    fun toggleSources(enable: Boolean) {\n        state.value.extension?.sources\n            ?.map { it.id }\n            ?.let { toggleSource.await(it, enable) }\n    }\n\n    fun toggleIncognito(enable: Boolean) {\n        state.value.extension?.pkgName?.let { packageName ->\n            toggleIncognito.await(packageName, enable)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val extension: MangaExtension.Installed? = null,\n        val isIncognito: Boolean = false,\n        private val _sources: ImmutableList<MangaExtensionSourceItem>? = null,\n    ) {\n\n        val sources: ImmutableList<MangaExtensionSourceItem>\n            get() = _sources ?: persistentListOf()\n\n        val isLoading: Boolean\n            get() = extension == null || _sources == null\n    }\n}\n\nsealed interface MangaExtensionDetailsEvent {\n    data object Uninstalled : MangaExtensionDetailsEvent\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/details/MangaSourcePreferencesScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.extension.details\n\nimport android.content.Context\nimport android.os.Bundle\nimport android.util.TypedValue\nimport android.view.View\nimport androidx.appcompat.view.ContextThemeWrapper\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.viewinterop.AndroidView\nimport androidx.core.os.bundleOf\nimport androidx.fragment.app.FragmentActivity\nimport androidx.fragment.app.FragmentContainerView\nimport androidx.fragment.app.FragmentManager\nimport androidx.fragment.app.FragmentTransaction\nimport androidx.fragment.app.commit\nimport androidx.lifecycle.lifecycleScope\nimport androidx.preference.DialogPreference\nimport androidx.preference.EditTextPreference\nimport androidx.preference.PreferenceFragmentCompat\nimport androidx.preference.PreferenceScreen\nimport androidx.preference.forEach\nimport androidx.preference.getOnBindEditTextListener\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifMangaSourcesLoaded\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore\nimport eu.kanade.tachiyomi.source.ConfigurableSource\nimport eu.kanade.tachiyomi.source.sourcePreferences\nimport eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText.Companion.setIncognito\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaSourcePreferencesScreen(val sourceId: Long) : Screen() {\n\n    @Composable\n    override fun Content() {\n        if (!ifMangaSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    title = Injekt.get<MangaSourceManager>().getOrStub(sourceId).toString(),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = it,\n                )\n            },\n        ) { contentPadding ->\n            FragmentContainer(\n                fragmentManager = (context as FragmentActivity).supportFragmentManager,\n                modifier = Modifier\n                    .fillMaxSize()\n                    .padding(contentPadding),\n            ) {\n                add(it, MangaSourcePreferencesFragment.getInstance(sourceId), null)\n            }\n        }\n    }\n\n    /**\n     * From https://stackoverflow.com/questions/60520145/fragment-container-in-jetpack-compose/70817794#70817794\n     */\n    @Composable\n    private fun FragmentContainer(\n        fragmentManager: FragmentManager,\n        modifier: Modifier = Modifier,\n        commit: FragmentTransaction.(containerId: Int) -> Unit,\n    ) {\n        val containerId by rememberSaveable {\n            mutableIntStateOf(View.generateViewId())\n        }\n        var initialized by rememberSaveable { mutableStateOf(false) }\n        AndroidView(\n            modifier = modifier,\n            factory = { context ->\n                FragmentContainerView(context)\n                    .apply { id = containerId }\n            },\n            update = { view ->\n                if (!initialized) {\n                    fragmentManager.commit { commit(view.id) }\n                    initialized = true\n                } else {\n                    fragmentManager.onContainerAvailable(view)\n                }\n            },\n        )\n    }\n\n    /** Access to package-private method in FragmentManager through reflection */\n    private fun FragmentManager.onContainerAvailable(view: FragmentContainerView) {\n        val method = FragmentManager::class.java.getDeclaredMethod(\n            \"onContainerAvailable\",\n            FragmentContainerView::class.java,\n        )\n        method.isAccessible = true\n        method.invoke(this, view)\n    }\n}\n\nclass MangaSourcePreferencesFragment : PreferenceFragmentCompat() {\n\n    override fun getContext(): Context? {\n        val superCtx = super.getContext() ?: return null\n        val tv = TypedValue()\n        superCtx.theme.resolveAttribute(R.attr.preferenceTheme, tv, true)\n        return ContextThemeWrapper(superCtx, tv.resourceId)\n    }\n\n    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {\n        preferenceScreen = populateScreen()\n    }\n\n    private fun populateScreen(): PreferenceScreen {\n        val sourceId = requireArguments().getLong(SOURCE_ID)\n        val source = Injekt.get<MangaSourceManager>().getOrStub(sourceId)\n        val sourceScreen = preferenceManager.createPreferenceScreen(requireContext())\n\n        if (source is ConfigurableSource) {\n            val dataStore = SharedPreferencesDataStore(source.sourcePreferences())\n            preferenceManager.preferenceDataStore = dataStore\n\n            source.setupPreferenceScreen(sourceScreen)\n            sourceScreen.forEach { pref ->\n                pref.isIconSpaceReserved = false\n                pref.isSingleLineTitle = false\n                if (pref is DialogPreference && pref.dialogTitle.isNullOrEmpty()) {\n                    pref.dialogTitle = pref.title\n                }\n\n                // Apply incognito IME for EditTextPreference\n                if (pref is EditTextPreference) {\n                    val setListener = pref.getOnBindEditTextListener()\n                    pref.setOnBindEditTextListener {\n                        setListener?.onBindEditText(it)\n                        it.setIncognito(lifecycleScope)\n                    }\n                }\n            }\n        }\n\n        return sourceScreen\n    }\n\n    companion object {\n        private const val SOURCE_ID = \"source_id\"\n\n        fun getInstance(sourceId: Long): MangaSourcePreferencesFragment {\n            val fragment = MangaSourcePreferencesFragment()\n            fragment.arguments = bundleOf(SOURCE_ID to sourceId)\n            return fragment\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/MangaMigrationFlags.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration\n\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.entries.manga.model.hasCustomCover\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.injectLazy\n\ndata class MangaMigrationFlag(\n    val flag: Int,\n    val isDefaultSelected: Boolean,\n    val titleId: StringResource,\n) {\n    companion object {\n        fun create(flag: Int, defaultSelectionMap: Int, titleId: StringResource): MangaMigrationFlag {\n            return MangaMigrationFlag(\n                flag = flag,\n                isDefaultSelected = defaultSelectionMap and flag != 0,\n                titleId = titleId,\n            )\n        }\n    }\n}\n\nobject MangaMigrationFlags {\n\n    private const val CHAPTERS = 0b00001\n    private const val CATEGORIES = 0b00010\n    private const val CUSTOM_COVER = 0b01000\n    private const val DELETE_DOWNLOADED = 0b10000\n\n    private val coverCache: MangaCoverCache by injectLazy()\n    private val downloadCache: MangaDownloadCache by injectLazy()\n\n    fun hasChapters(value: Int): Boolean {\n        return value and CHAPTERS != 0\n    }\n\n    fun hasCategories(value: Int): Boolean {\n        return value and CATEGORIES != 0\n    }\n\n    fun hasCustomCover(value: Int): Boolean {\n        return value and CUSTOM_COVER != 0\n    }\n\n    fun hasDeleteDownloaded(value: Int): Boolean {\n        return value and DELETE_DOWNLOADED != 0\n    }\n\n    /** Returns information about applicable flags with default selections. */\n    fun getFlags(manga: Manga?, defaultSelectedBitMap: Int): List<MangaMigrationFlag> {\n        val flags = mutableListOf<MangaMigrationFlag>()\n        flags += MangaMigrationFlag.create(CHAPTERS, defaultSelectedBitMap, MR.strings.chapters)\n        flags += MangaMigrationFlag.create(CATEGORIES, defaultSelectedBitMap, MR.strings.categories)\n\n        if (manga != null) {\n            if (manga.hasCustomCover(coverCache)) {\n                flags += MangaMigrationFlag.create(\n                    CUSTOM_COVER,\n                    defaultSelectedBitMap,\n                    MR.strings.custom_cover,\n                )\n            }\n            if (downloadCache.getDownloadCount(manga) > 0) {\n                flags += MangaMigrationFlag.create(\n                    DELETE_DOWNLOADED,\n                    defaultSelectedBitMap,\n                    MR.strings.delete_downloaded,\n                )\n            }\n        }\n        return flags\n    }\n\n    /** Returns a bit map of selected flags. */\n    fun getSelectedFlagsBitMap(\n        selectedFlags: List<Boolean>,\n        flags: List<MangaMigrationFlag>,\n    ): Int {\n        return selectedFlags\n            .zip(flags)\n            .filter { (isSelected, _) -> isSelected }\n            .map { (_, flag) -> flag.flag }\n            .reduceOrNull { acc, mask -> acc or mask } ?: 0\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MigrateMangaScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaSearchScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.flow.collectLatest\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\ndata class MigrateMangaScreen(\n    private val sourceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { MigrateMangaScreenModel(sourceId) }\n\n        val state by screenModel.state.collectAsState()\n\n        if (state.isLoading) {\n            LoadingScreen()\n            return\n        }\n\n        MigrateMangaScreen(\n            navigateUp = navigator::pop,\n            title = state.source!!.name,\n            state = state,\n            onClickItem = { navigator.push(MigrateMangaSearchScreen(it.id)) },\n            onClickCover = { navigator.push(MangaScreen(it.id)) },\n        )\n\n        LaunchedEffect(Unit) {\n            screenModel.events.collectLatest { event ->\n                when (event) {\n                    MigrationMangaEvent.FailedFetchingFavorites -> {\n                        context.toast(MR.strings.internal_error)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.manga\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.source.MangaSource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.interactor.GetMangaFavorites\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateMangaScreenModel(\n    private val sourceId: Long,\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val getFavorites: GetMangaFavorites = Injekt.get(),\n) : StateScreenModel<MigrateMangaScreenModel.State>(State()) {\n\n    private val _events: Channel<MigrationMangaEvent> = Channel()\n    val events: Flow<MigrationMangaEvent> = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            mutableState.update { state ->\n                state.copy(source = sourceManager.getOrStub(sourceId))\n            }\n\n            getFavorites.subscribe(sourceId)\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _events.send(MigrationMangaEvent.FailedFetchingFavorites)\n                    mutableState.update { state ->\n                        state.copy(titleList = persistentListOf())\n                    }\n                }\n                .map { manga ->\n                    manga\n                        .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.title })\n                        .toImmutableList()\n                }\n                .collectLatest { list ->\n                    mutableState.update { it.copy(titleList = list) }\n                }\n        }\n    }\n\n    @Immutable\n    data class State(\n        val source: MangaSource? = null,\n        private val titleList: ImmutableList<Manga>? = null,\n    ) {\n\n        val titles: ImmutableList<Manga>\n            get() = titleList ?: persistentListOf()\n\n        val isLoading: Boolean\n            get() = source == null || titleList == null\n\n        val isEmpty: Boolean\n            get() = titles.isEmpty()\n    }\n}\n\nsealed interface MigrationMangaEvent {\n    data object FailedFetchingFavorites : MigrationMangaEvent\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MangaMigrateSearchScreenDialogScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.search\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaMigrateSearchScreenDialogScreenModel(\n    val mangaId: Long,\n    getManga: GetManga = Injekt.get(),\n) : StateScreenModel<MangaMigrateSearchScreenDialogScreenModel.State>(State()) {\n\n    init {\n        screenModelScope.launch {\n            val manga = getManga.await(mangaId)!!\n\n            mutableState.update {\n                it.copy(manga = manga)\n            }\n        }\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update {\n            it.copy(dialog = dialog)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val manga: Manga? = null,\n        val dialog: Dialog? = null,\n    )\n\n    sealed interface Dialog {\n        data class Migrate(val manga: Manga) : Dialog\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MangaSourceSearchScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.search\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifMangaSourcesLoaded\nimport eu.kanade.presentation.browse.manga.BrowseSourceContent\nimport eu.kanade.presentation.components.SearchToolbar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.SourceFilterMangaDialog\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport kotlinx.coroutines.launch\nimport mihon.presentation.core.util.collectAsLazyPagingItems\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\ndata class MangaSourceSearchScreen(\n    private val oldManga: Manga,\n    private val sourceId: Long,\n    private val query: String?,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        if (!ifMangaSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val uriHandler = LocalUriHandler.current\n        val navigator = LocalNavigator.currentOrThrow\n        val scope = rememberCoroutineScope()\n\n        val screenModel = rememberScreenModel { BrowseMangaSourceScreenModel(sourceId, query) }\n        val state by screenModel.state.collectAsState()\n\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                SearchToolbar(\n                    searchQuery = state.toolbarQuery ?: \"\",\n                    onChangeSearchQuery = screenModel::setToolbarQuery,\n                    onClickCloseSearch = navigator::pop,\n                    onSearch = screenModel::search,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n            floatingActionButton = {\n                AnimatedVisibility(visible = state.filters.isNotEmpty()) {\n                    ExtendedFloatingActionButton(\n                        text = { Text(text = stringResource(MR.strings.action_filter)) },\n                        icon = { Icon(Icons.Outlined.FilterList, contentDescription = \"\") },\n                        onClick = screenModel::openFilterSheet,\n                    )\n                }\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        ) { paddingValues ->\n            val openMigrateDialog: (Manga) -> Unit = {\n                screenModel.setDialog(BrowseMangaSourceScreenModel.Dialog.Migrate(newManga = it, oldManga = oldManga))\n            }\n            BrowseSourceContent(\n                source = screenModel.source,\n                mangaList = screenModel.mangaPagerFlowFlow.collectAsLazyPagingItems(),\n                columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),\n                displayMode = screenModel.displayMode,\n                snackbarHostState = snackbarHostState,\n                contentPadding = paddingValues,\n                onWebViewClick = {\n                    val source = screenModel.source as? HttpSource ?: return@BrowseSourceContent\n                    navigator.push(\n                        WebViewScreen(\n                            url = source.baseUrl,\n                            initialTitle = source.name,\n                            sourceId = source.id,\n                        ),\n                    )\n                },\n                onHelpClick = { uriHandler.openUri(Constants.URL_HELP) },\n                onLocalSourceHelpClick = { uriHandler.openUri(LocalMangaSource.HELP_URL) },\n                onMangaClick = openMigrateDialog,\n                onMangaLongClick = { navigator.push(MangaScreen(it.id, true)) },\n            )\n        }\n\n        val onDismissRequest = { screenModel.setDialog(null) }\n        when (val dialog = state.dialog) {\n            is BrowseMangaSourceScreenModel.Dialog.Filter -> {\n                SourceFilterMangaDialog(\n                    onDismissRequest = onDismissRequest,\n                    filters = state.filters,\n                    onReset = screenModel::resetFilters,\n                    onFilter = { screenModel.search(filters = state.filters) },\n                    onUpdate = screenModel::setFilters,\n                )\n            }\n            is BrowseMangaSourceScreenModel.Dialog.Migrate -> {\n                MigrateMangaDialog(\n                    oldManga = oldManga,\n                    newManga = dialog.newManga,\n                    screenModel = rememberScreenModel { MigrateMangaDialogScreenModel() },\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(MangaScreen(dialog.newManga.id)) },\n                    onPopScreen = {\n                        scope.launch {\n                            navigator.popUntilRoot()\n                            HomeScreen.openTab(HomeScreen.Tab.Browse())\n                            navigator.push(MangaScreen(dialog.newManga.id))\n                        }\n                    },\n                )\n            }\n            else -> {}\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.search\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Modifier\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.hasCustomCover\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.MangaMigrationFlags\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.SetMangaCategories\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.toChapterUpdate\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.interactor.InsertMangaTrack\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\n\n@Composable\ninternal fun MigrateMangaDialog(\n    oldManga: Manga,\n    newManga: Manga,\n    screenModel: MigrateMangaDialogScreenModel,\n    onDismissRequest: () -> Unit,\n    onClickTitle: () -> Unit,\n    onPopScreen: () -> Unit,\n) {\n    val scope = rememberCoroutineScope()\n    val state by screenModel.state.collectAsState()\n\n    val flags = remember { MangaMigrationFlags.getFlags(oldManga, screenModel.migrateFlags.get()) }\n    val selectedFlags = remember { flags.map { it.isDefaultSelected }.toMutableStateList() }\n\n    if (state.isMigrating) {\n        LoadingScreen(\n            modifier = Modifier\n                .background(MaterialTheme.colorScheme.background.copy(alpha = 0.7f)),\n        )\n    } else {\n        AlertDialog(\n            onDismissRequest = onDismissRequest,\n            title = {\n                Text(text = stringResource(MR.strings.migration_dialog_what_to_include))\n            },\n            text = {\n                Column(\n                    modifier = Modifier.verticalScroll(rememberScrollState()),\n                ) {\n                    flags.forEachIndexed { index, flag ->\n                        LabeledCheckbox(\n                            label = stringResource(flag.titleId),\n                            checked = selectedFlags[index],\n                            onCheckedChange = { selectedFlags[index] = it },\n                        )\n                    }\n                }\n            },\n            confirmButton = {\n                FlowRow(\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                ) {\n                    TextButton(\n                        onClick = {\n                            onDismissRequest()\n                            onClickTitle()\n                        },\n                    ) {\n                        Text(text = stringResource(AYMR.strings.action_show_manga))\n                    }\n\n                    Spacer(modifier = Modifier.weight(1f))\n\n                    TextButton(\n                        onClick = {\n                            scope.launchIO {\n                                screenModel.migrateManga(\n                                    oldManga,\n                                    newManga,\n                                    false,\n                                    MangaMigrationFlags.getSelectedFlagsBitMap(selectedFlags, flags),\n                                )\n                                withUIContext { onPopScreen() }\n                            }\n                        },\n                    ) {\n                        Text(text = stringResource(MR.strings.copy))\n                    }\n                    TextButton(\n                        onClick = {\n                            scope.launchIO {\n                                screenModel.migrateManga(\n                                    oldManga,\n                                    newManga,\n                                    true,\n                                    MangaMigrationFlags.getSelectedFlagsBitMap(selectedFlags, flags),\n                                )\n\n                                withUIContext { onPopScreen() }\n                            }\n                        },\n                    ) {\n                        Text(text = stringResource(MR.strings.migrate))\n                    }\n                }\n            },\n        )\n    }\n}\n\ninternal class MigrateMangaDialogScreenModel(\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n    private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(),\n    private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(),\n    private val updateChapter: UpdateChapter = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val setMangaCategories: SetMangaCategories = Injekt.get(),\n    private val getTracks: GetMangaTracks = Injekt.get(),\n    private val insertTrack: InsertMangaTrack = Injekt.get(),\n    private val coverCache: MangaCoverCache = Injekt.get(),\n    private val preferenceStore: PreferenceStore = Injekt.get(),\n) : StateScreenModel<MigrateMangaDialogScreenModel.State>(State()) {\n\n    val migrateFlags: Preference<Int> by lazy {\n        preferenceStore.getInt(\"migrate_flags\", Int.MAX_VALUE)\n    }\n\n    private val enhancedServices by lazy {\n        Injekt.get<TrackerManager>().trackers.filterIsInstance<EnhancedMangaTracker>()\n    }\n\n    suspend fun migrateManga(\n        oldManga: Manga,\n        newManga: Manga,\n        replace: Boolean,\n        flags: Int,\n    ) {\n        migrateFlags.set(flags)\n        val source = sourceManager.get(newManga.source) ?: return\n        val prevSource = sourceManager.get(oldManga.source)\n\n        mutableState.update { it.copy(isMigrating = true) }\n\n        try {\n            val chapters = source.getChapterList(newManga.toSManga())\n\n            migrateMangaInternal(\n                oldSource = prevSource,\n                newSource = source,\n                oldManga = oldManga,\n                newManga = newManga,\n                sourceChapters = chapters,\n                replace = replace,\n                flags = flags,\n            )\n        } catch (_: Throwable) {\n            // Explicitly stop if an error occurred; the dialog normally gets popped at the end\n            // anyway\n            mutableState.update { it.copy(isMigrating = false) }\n        }\n    }\n\n    private suspend fun migrateMangaInternal(\n        oldSource: MangaSource?,\n        newSource: MangaSource,\n        oldManga: Manga,\n        newManga: Manga,\n        sourceChapters: List<SChapter>,\n        replace: Boolean,\n        flags: Int,\n    ) {\n        val migrateChapters = MangaMigrationFlags.hasChapters(flags)\n        val migrateCategories = MangaMigrationFlags.hasCategories(flags)\n        val migrateCustomCover = MangaMigrationFlags.hasCustomCover(flags)\n        val deleteDownloaded = MangaMigrationFlags.hasDeleteDownloaded(flags)\n\n        try {\n            syncChaptersWithSource.await(sourceChapters, newManga, newSource)\n        } catch (_: Exception) {\n            // Worst case, chapters won't be synced\n        }\n\n        // Update chapters read, bookmark and dateFetch\n        if (migrateChapters) {\n            val prevMangaChapters = getChaptersByMangaId.await(oldManga.id)\n            val mangaChapters = getChaptersByMangaId.await(newManga.id)\n\n            val maxChapterRead = prevMangaChapters\n                .filter { it.read }\n                .maxOfOrNull { it.chapterNumber }\n\n            val updatedMangaChapters = mangaChapters.map { mangaChapter ->\n                var updatedChapter = mangaChapter\n                if (updatedChapter.isRecognizedNumber) {\n                    val prevChapter = prevMangaChapters\n                        .find { it.isRecognizedNumber && it.chapterNumber == updatedChapter.chapterNumber }\n\n                    if (prevChapter != null) {\n                        updatedChapter = updatedChapter.copy(\n                            dateFetch = prevChapter.dateFetch,\n                            bookmark = prevChapter.bookmark,\n                        )\n                    }\n\n                    if (maxChapterRead != null && updatedChapter.chapterNumber <= maxChapterRead) {\n                        updatedChapter = updatedChapter.copy(read = true)\n                    }\n                }\n\n                updatedChapter\n            }\n\n            val chapterUpdates = updatedMangaChapters.map { it.toChapterUpdate() }\n            updateChapter.awaitAll(chapterUpdates)\n        }\n\n        // Update categories\n        if (migrateCategories) {\n            val categoryIds = getCategories.await(oldManga.id).map { it.id }\n            setMangaCategories.await(newManga.id, categoryIds)\n        }\n\n        // Update track\n        getTracks.await(oldManga.id).mapNotNull { track ->\n            val updatedTrack = track.copy(mangaId = newManga.id)\n\n            val service = enhancedServices\n                .firstOrNull { it.isTrackFrom(updatedTrack, oldManga, oldSource) }\n\n            if (service != null) {\n                service.migrateTrack(updatedTrack, newManga, newSource)\n            } else {\n                updatedTrack\n            }\n        }\n            .takeIf { it.isNotEmpty() }\n            ?.let { insertTrack.awaitAll(it) }\n\n        // Delete downloaded\n        if (deleteDownloaded) {\n            if (oldSource != null) {\n                downloadManager.deleteManga(oldManga, oldSource)\n            }\n        }\n\n        if (replace) {\n            updateManga.awaitUpdateFavorite(oldManga.id, favorite = false)\n        }\n\n        // Update custom cover (recheck if custom cover exists)\n        if (migrateCustomCover && oldManga.hasCustomCover()) {\n            coverCache.setCustomCoverToCache(\n                newManga,\n                coverCache.getCustomCoverFile(oldManga.id).inputStream(),\n            )\n        }\n\n        updateManga.await(\n            MangaUpdate(\n                id = newManga.id,\n                favorite = true,\n                chapterFlags = oldManga.chapterFlags,\n                viewerFlags = oldManga.viewerFlags,\n                dateAdded = if (replace) oldManga.dateAdded else Instant.now().toEpochMilli(),\n            ),\n        )\n    }\n\n    @Immutable\n    data class State(\n        val isMigrating: Boolean = false,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaSearchScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.search\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MigrateMangaSearchScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\n\nclass MigrateMangaSearchScreen(private val mangaId: Long) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { MigrateMangaSearchScreenModel(mangaId = mangaId) }\n        val state by screenModel.state.collectAsState()\n\n        val dialogScreenModel = rememberScreenModel {\n            MangaMigrateSearchScreenDialogScreenModel(\n                mangaId = mangaId,\n            )\n        }\n        val dialogState by dialogScreenModel.state.collectAsState()\n\n        MigrateMangaSearchScreen(\n            state = state,\n            fromSourceId = dialogState.manga?.source,\n            navigateUp = navigator::pop,\n            onChangeSearchQuery = screenModel::updateSearchQuery,\n            onSearch = { screenModel.search() },\n            getManga = { screenModel.getManga(it) },\n            onChangeSearchFilter = screenModel::setSourceFilter,\n            onToggleResults = screenModel::toggleFilterResults,\n            onClickSource = {\n                navigator.push(\n                    MangaSourceSearchScreen(dialogState.manga!!, it.id, state.searchQuery),\n                )\n            },\n            onClickItem = {\n                dialogScreenModel.setDialog(\n                    MangaMigrateSearchScreenDialogScreenModel.Dialog.Migrate(it),\n                )\n            },\n            onLongClickItem = { navigator.push(MangaScreen(it.id, true)) },\n        )\n\n        when (val dialog = dialogState.dialog) {\n            is MangaMigrateSearchScreenDialogScreenModel.Dialog.Migrate -> {\n                MigrateMangaDialog(\n                    oldManga = dialogState.manga!!,\n                    newManga = dialog.manga,\n                    screenModel = rememberScreenModel { MigrateMangaDialogScreenModel() },\n                    onDismissRequest = { dialogScreenModel.setDialog(null) },\n                    onClickTitle = {\n                        navigator.push(MangaScreen(dialog.manga.id, true))\n                    },\n                    onPopScreen = {\n                        if (navigator.lastItem is MangaScreen) {\n                            val lastItem = navigator.lastItem\n                            navigator.popUntil { navigator.items.contains(lastItem) }\n                            navigator.push(MangaScreen(dialog.manga.id))\n                        } else {\n                            navigator.replace(MangaScreen(dialog.manga.id))\n                        }\n                    },\n                )\n            }\n            else -> {}\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaSearchScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.search\n\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSearchScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSourceFilter\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateMangaSearchScreenModel(\n    val mangaId: Long,\n    initialExtensionFilter: String = \"\",\n    getManga: GetManga = Injekt.get(),\n) : MangaSearchScreenModel() {\n\n    init {\n        extensionFilter = initialExtensionFilter\n        screenModelScope.launch {\n            val manga = getManga.await(mangaId)!!\n            mutableState.update {\n                it.copy(\n                    fromSourceId = manga.source,\n                    searchQuery = manga.title,\n                )\n            }\n\n            search()\n        }\n    }\n\n    override fun getEnabledSources(): List<CatalogueSource> {\n        return super.getEnabledSources()\n            .filter { state.value.sourceFilter != MangaSourceFilter.PinnedOnly || \"${it.id}\" in pinnedSources }\n            .sortedWith(\n                compareBy(\n                    { it.id != state.value.fromSourceId },\n                    { \"${it.id}\" !in pinnedSources },\n                    { \"${it.name.lowercase()} (${it.lang})\" },\n                ),\n            )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/sources/MigrateMangaSourceScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.sources\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.source.interactor.SetMigrateSorting\nimport eu.kanade.domain.source.manga.interactor.GetMangaSourcesWithFavoriteCount\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.manga.model.Source\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MigrateMangaSourceScreenModel(\n    preferences: SourcePreferences = Injekt.get(),\n    private val getSourcesWithFavoriteCount: GetMangaSourcesWithFavoriteCount = Injekt.get(),\n    private val setMigrateSorting: SetMigrateSorting = Injekt.get(),\n) : StateScreenModel<MigrateMangaSourceScreenModel.State>(State()) {\n\n    private val _channel = Channel<Event>(Int.MAX_VALUE)\n    val channel = _channel.receiveAsFlow()\n\n    init {\n        screenModelScope.launchIO {\n            getSourcesWithFavoriteCount.subscribe()\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _channel.send(Event.FailedFetchingSourcesWithCount)\n                }\n                .collectLatest { sources ->\n                    mutableState.update {\n                        it.copy(\n                            isLoading = false,\n                            items = sources.toImmutableList(),\n                        )\n                    }\n                }\n        }\n\n        preferences.migrationSortingDirection().changes()\n            .onEach { mutableState.update { state -> state.copy(sortingDirection = it) } }\n            .launchIn(screenModelScope)\n\n        preferences.migrationSortingMode().changes()\n            .onEach { mutableState.update { state -> state.copy(sortingMode = it) } }\n            .launchIn(screenModelScope)\n    }\n\n    fun toggleSortingMode() {\n        with(state.value) {\n            val newMode = when (sortingMode) {\n                SetMigrateSorting.Mode.ALPHABETICAL -> SetMigrateSorting.Mode.TOTAL\n                SetMigrateSorting.Mode.TOTAL -> SetMigrateSorting.Mode.ALPHABETICAL\n            }\n\n            setMigrateSorting.await(newMode, sortingDirection)\n        }\n    }\n\n    fun toggleSortingDirection() {\n        with(state.value) {\n            val newDirection = when (sortingDirection) {\n                SetMigrateSorting.Direction.ASCENDING -> SetMigrateSorting.Direction.DESCENDING\n                SetMigrateSorting.Direction.DESCENDING -> SetMigrateSorting.Direction.ASCENDING\n            }\n\n            setMigrateSorting.await(sortingMode, newDirection)\n        }\n    }\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val items: ImmutableList<Pair<Source, Long>> = persistentListOf(),\n        val sortingMode: SetMigrateSorting.Mode = SetMigrateSorting.Mode.ALPHABETICAL,\n        val sortingDirection: SetMigrateSorting.Direction = SetMigrateSorting.Direction.ASCENDING,\n    ) {\n        val isEmpty = items.isEmpty()\n    }\n\n    sealed interface Event {\n        data object FailedFetchingSourcesWithCount : Event\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/sources/MigrateMangaSourceTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.migration.sources\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MigrateMangaSourceScreen\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.manga.MigrateMangaScreen\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun Screen.migrateMangaSourceTab(): TabContent {\n    val uriHandler = LocalUriHandler.current\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { MigrateMangaSourceScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = MR.strings.label_migration,\n        actions = persistentListOf(\n            AppBar.Action(\n                title = stringResource(MR.strings.migration_help_guide),\n                icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                onClick = {\n                    uriHandler.openUri(\"https://aniyomi.org/help/guides/source-migration/\")\n                },\n            ),\n        ),\n        content = { contentPadding, _ ->\n            MigrateMangaSourceScreen(\n                state = state,\n                contentPadding = contentPadding,\n                onClickItem = { source ->\n                    navigator.push(MigrateMangaScreen(source.id))\n                },\n                onToggleSortingDirection = screenModel::toggleSortingDirection,\n                onToggleSortingMode = screenModel::toggleSortingMode,\n            )\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesFilterScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MangaSourcesFilterScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.util.system.toast\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass MangaSourcesFilterScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { MangaSourcesFilterScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        if (state is MangaSourcesFilterScreenModel.State.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        if (state is MangaSourcesFilterScreenModel.State.Error) {\n            val context = LocalContext.current\n            LaunchedEffect(Unit) {\n                context.toast(MR.strings.internal_error)\n                navigator.pop()\n            }\n            return\n        }\n\n        val successState = state as MangaSourcesFilterScreenModel.State.Success\n\n        MangaSourcesFilterScreen(\n            navigateUp = navigator::pop,\n            state = successState,\n            onClickLanguage = screenModel::toggleLanguage,\n            onClickSource = screenModel::toggleSource,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesFilterScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.source.interactor.ToggleLanguage\nimport eu.kanade.domain.source.manga.interactor.GetLanguagesWithMangaSources\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaSource\nimport eu.kanade.domain.source.service.SourcePreferences\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.source.manga.model.Source\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.SortedMap\n\nclass MangaSourcesFilterScreenModel(\n    private val preferences: SourcePreferences = Injekt.get(),\n    private val getLanguagesWithSources: GetLanguagesWithMangaSources = Injekt.get(),\n    private val toggleSource: ToggleMangaSource = Injekt.get(),\n    private val toggleLanguage: ToggleLanguage = Injekt.get(),\n) : StateScreenModel<MangaSourcesFilterScreenModel.State>(State.Loading) {\n\n    init {\n        screenModelScope.launch {\n            combine(\n                getLanguagesWithSources.subscribe(),\n                preferences.enabledLanguages().changes(),\n                preferences.disabledMangaSources().changes(),\n            ) { a, b, c -> Triple(a, b, c) }\n                .catch { throwable ->\n                    mutableState.update {\n                        State.Error(\n                            throwable = throwable,\n                        )\n                    }\n                }\n                .collectLatest { (languagesWithSources, enabledLanguages, disabledSources) ->\n                    mutableState.update {\n                        State.Success(\n                            items = languagesWithSources,\n                            enabledLanguages = enabledLanguages,\n                            disabledSources = disabledSources,\n                        )\n                    }\n                }\n        }\n    }\n\n    fun toggleSource(source: Source) {\n        toggleSource.await(source)\n    }\n\n    fun toggleLanguage(language: String) {\n        toggleLanguage.await(language)\n    }\n\n    sealed interface State {\n\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data class Error(\n            val throwable: Throwable,\n        ) : State\n\n        @Immutable\n        data class Success(\n            val items: SortedMap<String, List<Source>>,\n            val enabledLanguages: Set<String>,\n            val disabledSources: Set<String>,\n        ) : State {\n\n            val isEmpty: Boolean\n                get() = items.isEmpty()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.source.manga.interactor.GetEnabledMangaSources\nimport eu.kanade.domain.source.manga.interactor.ToggleExcludeFromMangaDataSaver\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaSource\nimport eu.kanade.domain.source.manga.interactor.ToggleMangaSourcePin\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.source.service.SourcePreferences.DataSaver\nimport eu.kanade.presentation.browse.manga.MangaSourceUiModel\nimport eu.kanade.tachiyomi.util.system.LAST_USED_KEY\nimport eu.kanade.tachiyomi.util.system.PINNED_KEY\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.manga.model.Pin\nimport tachiyomi.domain.source.manga.model.Source\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.TreeMap\n\nclass MangaSourcesScreenModel(\n    private val preferences: BasePreferences = Injekt.get(),\n    private val sourcePreferences: SourcePreferences = Injekt.get(),\n    private val getEnabledSources: GetEnabledMangaSources = Injekt.get(),\n    private val toggleSource: ToggleMangaSource = Injekt.get(),\n    private val toggleSourcePin: ToggleMangaSourcePin = Injekt.get(),\n    // SY -->\n    private val toggleExcludeFromMangaDataSaver: ToggleExcludeFromMangaDataSaver = Injekt.get(),\n    // SY <--\n) : StateScreenModel<MangaSourcesScreenModel.State>(State()) {\n\n    private val _events = Channel<Event>(Int.MAX_VALUE)\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launchIO {\n            getEnabledSources.subscribe()\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _events.send(Event.FailedFetchingSources)\n                }\n                .collectLatest(::collectLatestSources)\n        }\n        // SY -->\n        sourcePreferences.dataSaver().changes()\n            .onEach {\n                mutableState.update {\n                    it.copy(\n                        dataSaverEnabled = sourcePreferences.dataSaver().get() != DataSaver.NONE,\n                    )\n                }\n            }\n            .launchIn(screenModelScope)\n        // SY <--\n    }\n\n    private fun collectLatestSources(sources: List<Source>) {\n        mutableState.update { state ->\n            val map = TreeMap<String, MutableList<Source>> { d1, d2 ->\n                // Sources without a lang defined will be placed at the end\n                when {\n                    d1 == LAST_USED_KEY && d2 != LAST_USED_KEY -> -1\n                    d2 == LAST_USED_KEY && d1 != LAST_USED_KEY -> 1\n                    d1 == PINNED_KEY && d2 != PINNED_KEY -> -1\n                    d2 == PINNED_KEY && d1 != PINNED_KEY -> 1\n                    d1 == \"\" && d2 != \"\" -> 1\n                    d2 == \"\" && d1 != \"\" -> -1\n                    else -> d1.compareTo(d2)\n                }\n            }\n            val byLang = sources.groupByTo(map) {\n                when {\n                    it.isUsedLast -> LAST_USED_KEY\n                    Pin.Actual in it.pin -> PINNED_KEY\n                    else -> it.lang\n                }\n            }\n\n            state.copy(\n                isLoading = false,\n                items = byLang\n                    .flatMap {\n                        listOf(\n                            MangaSourceUiModel.Header(it.key),\n                            *it.value.map { source ->\n                                MangaSourceUiModel.Item(source)\n                            }.toTypedArray(),\n                        )\n                    }\n                    .toImmutableList(),\n            )\n        }\n    }\n\n    fun toggleSource(source: Source) {\n        toggleSource.await(source)\n    }\n\n    fun togglePin(source: Source) {\n        toggleSourcePin.await(source)\n    }\n\n    // SY -->\n    fun toggleExcludeFromMangaDataSaver(source: Source) {\n        toggleExcludeFromMangaDataSaver.await(source)\n    }\n    // SY <--\n\n    fun showSourceDialog(source: Source) {\n        mutableState.update { it.copy(dialog = Dialog(source)) }\n    }\n\n    fun closeDialog() {\n        mutableState.update { it.copy(dialog = null) }\n    }\n\n    sealed interface Event {\n        data object FailedFetchingSources : Event\n    }\n\n    data class Dialog(val source: Source)\n\n    @Immutable\n    data class State(\n        val dialog: Dialog? = null,\n        val isLoading: Boolean = true,\n        val items: ImmutableList<MangaSourceUiModel> = persistentListOf(),\n        // SY -->\n        val dataSaverEnabled: Boolean = false,\n        // SY <--\n    ) {\n        val isEmpty = items.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.TravelExplore\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.browse.manga.MangaSourceOptionsDialog\nimport eu.kanade.presentation.browse.manga.MangaSourcesScreen\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun Screen.mangaSourcesTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { MangaSourcesScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_manga_sources,\n        actions = persistentListOf(\n            AppBar.Action(\n                title = stringResource(MR.strings.action_global_search),\n                icon = Icons.Outlined.TravelExplore,\n                onClick = { navigator.push(GlobalMangaSearchScreen()) },\n            ),\n            AppBar.Action(\n                title = stringResource(MR.strings.action_filter),\n                icon = Icons.Outlined.FilterList,\n                onClick = { navigator.push(MangaSourcesFilterScreen()) },\n            ),\n        ),\n        content = { contentPadding, snackbarHostState ->\n            MangaSourcesScreen(\n                state = state,\n                contentPadding = contentPadding,\n                onClickItem = { source, listing ->\n                    navigator.push(BrowseMangaSourceScreen(source.id, listing.query))\n                },\n                onClickPin = screenModel::togglePin,\n                onLongClickItem = screenModel::showSourceDialog,\n            )\n\n            state.dialog?.let { dialog ->\n                val source = dialog.source\n                MangaSourceOptionsDialog(\n                    source = source,\n                    onClickPin = {\n                        screenModel.togglePin(source)\n                        screenModel.closeDialog()\n                    },\n                    onClickDisable = {\n                        screenModel.toggleSource(source)\n                        screenModel.closeDialog()\n                    },\n                    onClickToggleDataSaver = {\n                        screenModel.toggleExcludeFromMangaDataSaver(source)\n                        screenModel.closeDialog()\n                    }.takeIf { state.dataSaverEnabled },\n                    onDismiss = screenModel::closeDialog,\n                )\n            }\n\n            val internalErrString = stringResource(MR.strings.internal_error)\n            LaunchedEffect(Unit) {\n                screenModel.events.collectLatest { event ->\n                    when (event) {\n                        MangaSourcesScreenModel.Event.FailedFetchingSources -> {\n                            launch { snackbarHostState.showSnackbar(internalErrString) }\n                        }\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/BrowseMangaSourceScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source.browse\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.horizontalScroll\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\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.outlined.Favorite\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.NewReleases\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.FilterChipDefaults\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.layout.onSizeChanged\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalUriHandler\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifMangaSourcesLoaded\nimport eu.kanade.presentation.browse.RemoveEntryDialog\nimport eu.kanade.presentation.browse.manga.BrowseSourceContent\nimport eu.kanade.presentation.browse.manga.MissingSourceScreen\nimport eu.kanade.presentation.browse.manga.components.BrowseMangaSourceToolbar\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.entries.manga.DuplicateMangaDialog\nimport eu.kanade.presentation.util.AssistContentScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.browse.manga.extension.details.MangaSourcePreferencesScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaDialog\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaDialogScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreenModel.Listing\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport mihon.presentation.core.util.collectAsLazyPagingItems\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\n\ndata class BrowseMangaSourceScreen(\n    val sourceId: Long,\n    private val listingQuery: String?,\n) : Screen(), AssistContentScreen {\n\n    private var assistUrl: String? = null\n\n    override fun onProvideAssistUrl() = assistUrl\n\n    @Composable\n    override fun Content() {\n        if (!ifMangaSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val screenModel = rememberScreenModel { BrowseMangaSourceScreenModel(sourceId, listingQuery) }\n        val state by screenModel.state.collectAsState()\n\n        val navigator = LocalNavigator.currentOrThrow\n        val navigateUp: () -> Unit = {\n            when {\n                !state.isUserQuery && state.toolbarQuery != null -> screenModel.setToolbarQuery(\n                    null,\n                )\n                else -> navigator.pop()\n            }\n        }\n\n        if (screenModel.source is StubMangaSource) {\n            MissingSourceScreen(\n                source = screenModel.source,\n                navigateUp = navigateUp,\n            )\n            return\n        }\n\n        val scope = rememberCoroutineScope()\n        val haptic = LocalHapticFeedback.current\n        val uriHandler = LocalUriHandler.current\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        val onHelpClick = { uriHandler.openUri(LocalMangaSource.HELP_URL) }\n        val onWebViewClick = f@{\n            val source = screenModel.source as? HttpSource ?: return@f\n            navigator.push(\n                WebViewScreen(\n                    url = source.baseUrl,\n                    initialTitle = source.name,\n                    sourceId = source.id,\n                ),\n            )\n        }\n\n        LaunchedEffect(screenModel.source) {\n            assistUrl = (screenModel.source as? HttpSource)?.baseUrl\n        }\n\n        var topBarHeight by remember { mutableIntStateOf(0) }\n        Scaffold(\n            topBar = {\n                Column(\n                    modifier = Modifier\n                        .background(MaterialTheme.colorScheme.surface)\n                        .onSizeChanged { topBarHeight = it.height },\n                ) {\n                    BrowseMangaSourceToolbar(\n                        searchQuery = state.toolbarQuery,\n                        onSearchQueryChange = screenModel::setToolbarQuery,\n                        source = screenModel.source,\n                        displayMode = screenModel.displayMode,\n                        onDisplayModeChange = { screenModel.displayMode = it },\n                        navigateUp = navigateUp,\n                        onWebViewClick = onWebViewClick,\n                        onHelpClick = onHelpClick,\n                        onSettingsClick = { navigator.push(MangaSourcePreferencesScreen(sourceId)) },\n                        onSearch = screenModel::search,\n                    )\n\n                    Row(\n                        modifier = Modifier\n                            .horizontalScroll(rememberScrollState())\n                            .padding(horizontal = MaterialTheme.padding.small),\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                    ) {\n                        FilterChip(\n                            selected = state.listing == Listing.Popular,\n                            onClick = {\n                                screenModel.resetFilters()\n                                screenModel.setListing(Listing.Popular)\n                            },\n                            leadingIcon = {\n                                Icon(\n                                    imageVector = Icons.Outlined.Favorite,\n                                    contentDescription = null,\n                                    modifier = Modifier\n                                        .size(FilterChipDefaults.IconSize),\n                                )\n                            },\n                            label = {\n                                Text(text = stringResource(MR.strings.popular))\n                            },\n                        )\n                        if ((screenModel.source as CatalogueSource).supportsLatest) {\n                            FilterChip(\n                                selected = state.listing == Listing.Latest,\n                                onClick = {\n                                    screenModel.resetFilters()\n                                    screenModel.setListing(Listing.Latest)\n                                },\n                                leadingIcon = {\n                                    Icon(\n                                        imageVector = Icons.Outlined.NewReleases,\n                                        contentDescription = null,\n                                        modifier = Modifier\n                                            .size(FilterChipDefaults.IconSize),\n                                    )\n                                },\n                                label = {\n                                    Text(text = stringResource(MR.strings.latest))\n                                },\n                            )\n                        }\n                        if (state.filters.isNotEmpty()) {\n                            FilterChip(\n                                selected = state.listing is Listing.Search,\n                                onClick = screenModel::openFilterSheet,\n                                leadingIcon = {\n                                    Icon(\n                                        imageVector = Icons.Outlined.FilterList,\n                                        contentDescription = null,\n                                        modifier = Modifier\n                                            .size(FilterChipDefaults.IconSize),\n                                    )\n                                },\n                                label = {\n                                    Text(text = stringResource(MR.strings.action_filter))\n                                },\n                            )\n                        }\n                    }\n\n                    HorizontalDivider()\n                }\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        ) { paddingValues ->\n            BrowseSourceContent(\n                source = screenModel.source,\n                mangaList = screenModel.mangaPagerFlowFlow.collectAsLazyPagingItems(),\n                columns = screenModel.getColumnsPreference(LocalConfiguration.current.orientation),\n                entries = screenModel.getColumnsPreferenceForCurrentOrientation(LocalConfiguration.current.orientation),\n                topBarHeight = topBarHeight,\n                displayMode = screenModel.displayMode,\n                snackbarHostState = snackbarHostState,\n                contentPadding = paddingValues,\n                onWebViewClick = onWebViewClick,\n                onHelpClick = { uriHandler.openUri(Constants.URL_HELP) },\n                onLocalSourceHelpClick = onHelpClick,\n                onMangaClick = { navigator.push((MangaScreen(it.id, true))) },\n                onMangaLongClick = { manga ->\n                    scope.launchIO {\n                        val duplicateManga = screenModel.getDuplicateLibraryManga(manga)\n                        when {\n                            manga.favorite -> screenModel.setDialog(\n                                BrowseMangaSourceScreenModel.Dialog.RemoveManga(manga),\n                            )\n                            duplicateManga != null -> screenModel.setDialog(\n                                BrowseMangaSourceScreenModel.Dialog.AddDuplicateManga(\n                                    manga,\n                                    duplicateManga,\n                                ),\n                            )\n                            else -> screenModel.addFavorite(manga)\n                        }\n                        haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                    }\n                },\n            )\n        }\n\n        val onDismissRequest = { screenModel.setDialog(null) }\n        when (val dialog = state.dialog) {\n            is BrowseMangaSourceScreenModel.Dialog.Filter -> {\n                SourceFilterMangaDialog(\n                    onDismissRequest = onDismissRequest,\n                    filters = state.filters,\n                    onReset = screenModel::resetFilters,\n                    onFilter = { screenModel.search(filters = state.filters) },\n                    onUpdate = screenModel::setFilters,\n                )\n            }\n            is BrowseMangaSourceScreenModel.Dialog.AddDuplicateManga -> {\n                DuplicateMangaDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = { screenModel.addFavorite(dialog.manga) },\n                    onOpenManga = { navigator.push(MangaScreen(dialog.duplicate.id)) },\n                    onMigrate = {\n                        screenModel.setDialog(\n                            BrowseMangaSourceScreenModel.Dialog.Migrate(dialog.manga, dialog.duplicate),\n                        )\n                    },\n                )\n            }\n\n            is BrowseMangaSourceScreenModel.Dialog.Migrate -> {\n                MigrateMangaDialog(\n                    oldManga = dialog.oldManga,\n                    newManga = dialog.newManga,\n                    screenModel = MigrateMangaDialogScreenModel(),\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(MangaScreen(dialog.oldManga.id)) },\n                    onPopScreen = {\n                        onDismissRequest()\n                    },\n                )\n            }\n            is BrowseMangaSourceScreenModel.Dialog.RemoveManga -> {\n                RemoveEntryDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = {\n                        screenModel.changeMangaFavorite(dialog.manga)\n                    },\n                    entryToRemove = dialog.manga.title,\n                )\n            }\n            is BrowseMangaSourceScreenModel.Dialog.ChangeMangaCategory -> {\n                ChangeCategoryDialog(\n                    initialSelection = dialog.initialSelection,\n                    onDismissRequest = onDismissRequest,\n                    onEditCategories = {\n                        navigator.push(CategoriesTab)\n                        CategoriesTab.showMangaCategory()\n                    },\n                    onConfirm = { include, _ ->\n                        screenModel.changeMangaFavorite(dialog.manga)\n                        screenModel.moveMangaToCategories(dialog.manga, include)\n                    },\n                )\n            }\n            else -> {}\n        }\n\n        LaunchedEffect(Unit) {\n            queryEvent.receiveAsFlow()\n                .collectLatest {\n                    when (it) {\n                        is SearchType.Genre -> screenModel.searchGenre(it.txt)\n                        is SearchType.Text -> screenModel.search(it.txt)\n                    }\n                }\n        }\n    }\n\n    suspend fun search(query: String) = queryEvent.send(SearchType.Text(query))\n    suspend fun searchGenre(name: String) = queryEvent.send(SearchType.Genre(name))\n\n    companion object {\n        private val queryEvent = Channel<SearchType>()\n    }\n\n    sealed class SearchType(val txt: String) {\n        class Text(txt: String) : SearchType(txt)\n        class Genre(txt: String) : SearchType(txt)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/BrowseMangaSourceScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source.browse\n\nimport android.content.res.Configuration\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.unit.dp\nimport androidx.paging.Pager\nimport androidx.paging.PagingConfig\nimport androidx.paging.cachedIn\nimport androidx.paging.filter\nimport androidx.paging.map\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.asState\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.toDomainManga\nimport eu.kanade.domain.source.manga.interactor.GetMangaIncognitoState\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.track.manga.interactor.AddMangaTracks\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.util.removeCovers\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.emptyFlow\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.firstOrNull\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.mapAsCheckboxState\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.SetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.manga.interactor.GetDuplicateLibraryManga\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.interactor.NetworkToLocalManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.toMangaUpdate\nimport tachiyomi.domain.items.chapter.interactor.SetMangaDefaultChapterFlags\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.interactor.GetRemoteManga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport eu.kanade.tachiyomi.source.model.Filter as SourceModelFilter\n\nclass BrowseMangaSourceScreenModel(\n    private val sourceId: Long,\n    listingQuery: String?,\n    sourceManager: MangaSourceManager = Injekt.get(),\n    sourcePreferences: SourcePreferences = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val coverCache: MangaCoverCache = Injekt.get(),\n    private val getRemoteManga: GetRemoteManga = Injekt.get(),\n    private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val setMangaCategories: SetMangaCategories = Injekt.get(),\n    private val setMangaDefaultChapterFlags: SetMangaDefaultChapterFlags = Injekt.get(),\n    private val getManga: GetManga = Injekt.get(),\n    private val networkToLocalManga: NetworkToLocalManga = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n    private val addTracks: AddMangaTracks = Injekt.get(),\n    private val getIncognitoState: GetMangaIncognitoState = Injekt.get(),\n) : StateScreenModel<BrowseMangaSourceScreenModel.State>(State(Listing.valueOf(listingQuery))) {\n\n    var displayMode by sourcePreferences.sourceDisplayMode().asState(screenModelScope)\n\n    val source = sourceManager.getOrStub(sourceId)\n\n    init {\n        if (source is CatalogueSource) {\n            mutableState.update {\n                var query: String? = null\n                var listing = it.listing\n\n                if (listing is Listing.Search) {\n                    query = listing.query\n                    listing = Listing.Search(query, source.getFilterList())\n                }\n\n                it.copy(\n                    listing = listing,\n                    filters = source.getFilterList(),\n                    toolbarQuery = query,\n                )\n            }\n        }\n\n        if (!getIncognitoState.await(source.id)) {\n            sourcePreferences.lastUsedMangaSource().set(source.id)\n        }\n    }\n\n    /**\n     * Flow of Pager flow tied to [State.listing]\n     */\n    private val hideInLibraryItems = sourcePreferences.hideInMangaLibraryItems().get()\n    val mangaPagerFlowFlow = state.map { it.listing }\n        .distinctUntilChanged()\n        .map { listing ->\n            Pager(PagingConfig(pageSize = 25)) {\n                getRemoteManga.subscribe(sourceId, listing.query ?: \"\", listing.filters)\n            }.flow.map { pagingData ->\n                pagingData.map {\n                    networkToLocalManga.await(it.toDomainManga(sourceId))\n                        .let { localManga -> getManga.subscribe(localManga.url, localManga.source) }\n                        .filterNotNull()\n                        .stateIn(ioCoroutineScope)\n                }\n                    .filter { !hideInLibraryItems || !it.value.favorite }\n            }\n                .cachedIn(ioCoroutineScope)\n        }\n        .stateIn(ioCoroutineScope, SharingStarted.Lazily, emptyFlow())\n\n    fun getColumnsPreference(orientation: Int): GridCells {\n        val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE\n        val columns = if (isLandscape) {\n            libraryPreferences.mangaLandscapeColumns()\n        } else {\n            libraryPreferences.mangaPortraitColumns()\n        }.get()\n        return if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns)\n    }\n\n    // returns the number from the size slider\n    fun getColumnsPreferenceForCurrentOrientation(orientation: Int): Int {\n        val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE\n        return if (isLandscape) {\n            libraryPreferences.mangaLandscapeColumns()\n        } else {\n            libraryPreferences.mangaPortraitColumns()\n        }.get()\n    }\n\n    fun resetFilters() {\n        if (source !is CatalogueSource) return\n\n        mutableState.update { it.copy(filters = source.getFilterList()) }\n    }\n\n    fun setListing(listing: Listing) {\n        mutableState.update { it.copy(listing = listing, toolbarQuery = null) }\n    }\n\n    fun setFilters(filters: FilterList) {\n        if (source !is CatalogueSource) return\n\n        mutableState.update {\n            it.copy(\n                filters = filters,\n            )\n        }\n    }\n\n    fun search(query: String? = null, filters: FilterList? = null) {\n        if (source !is CatalogueSource) return\n\n        val input = state.value.listing as? Listing.Search\n            ?: Listing.Search(query = null, filters = source.getFilterList())\n\n        mutableState.update {\n            it.copy(\n                listing = input.copy(\n                    query = query ?: input.query,\n                    filters = filters ?: input.filters,\n                ),\n                toolbarQuery = query ?: input.query,\n            )\n        }\n    }\n\n    fun searchGenre(genreName: String) {\n        if (source !is CatalogueSource) return\n\n        val defaultFilters = source.getFilterList()\n        var genreExists = false\n\n        filter@ for (sourceFilter in defaultFilters) {\n            if (sourceFilter is SourceModelFilter.Group<*>) {\n                for (filter in sourceFilter.state) {\n                    if (filter is SourceModelFilter<*> && filter.name.equals(genreName, true)) {\n                        when (filter) {\n                            is SourceModelFilter.TriState -> filter.state = 1\n                            is SourceModelFilter.CheckBox -> filter.state = true\n                            else -> {}\n                        }\n                        genreExists = true\n                        break@filter\n                    }\n                }\n            } else if (sourceFilter is SourceModelFilter.Select<*>) {\n                val index = sourceFilter.values.filterIsInstance<String>()\n                    .indexOfFirst { it.equals(genreName, true) }\n\n                if (index != -1) {\n                    sourceFilter.state = index\n                    genreExists = true\n                    break\n                }\n            }\n        }\n\n        mutableState.update {\n            val listing = if (genreExists) {\n                Listing.Search(query = null, filters = defaultFilters)\n            } else {\n                Listing.Search(query = genreName, filters = defaultFilters)\n            }\n            it.copy(\n                filters = defaultFilters,\n                listing = listing,\n                toolbarQuery = listing.query,\n            )\n        }\n    }\n\n    /**\n     * Adds or removes a manga from the library.\n     *\n     * @param manga the manga to update.\n     */\n    fun changeMangaFavorite(manga: Manga) {\n        screenModelScope.launch {\n            var new = manga.copy(\n                favorite = !manga.favorite,\n                dateAdded = when (manga.favorite) {\n                    true -> 0\n                    false -> Instant.now().toEpochMilli()\n                },\n            )\n\n            if (!new.favorite) {\n                new = new.removeCovers(coverCache)\n            } else {\n                setMangaDefaultChapterFlags.await(manga)\n                addTracks.bindEnhancedTrackers(manga, source)\n            }\n\n            updateManga.await(new.toMangaUpdate())\n        }\n    }\n\n    fun addFavorite(manga: Manga) {\n        screenModelScope.launch {\n            val categories = getCategories()\n            val defaultCategoryId = libraryPreferences.defaultMangaCategory().get()\n            val defaultCategory = categories.find { it.id == defaultCategoryId.toLong() }\n\n            when {\n                // Default category set\n                defaultCategory != null -> {\n                    moveMangaToCategories(manga, defaultCategory)\n\n                    changeMangaFavorite(manga)\n                }\n\n                // Automatic 'Default' or no categories\n                defaultCategoryId == 0 || categories.isEmpty() -> {\n                    moveMangaToCategories(manga)\n\n                    changeMangaFavorite(manga)\n                }\n\n                // Choose a category\n                else -> {\n                    val preselectedIds = getCategories.await(manga.id).map { it.id }\n                    setDialog(\n                        Dialog.ChangeMangaCategory(\n                            manga,\n                            categories.mapAsCheckboxState { it.id in preselectedIds }.toImmutableList(),\n                        ),\n                    )\n                }\n            }\n        }\n    }\n\n    /**\n     * Get user categories.\n     *\n     * @return List of categories, not including the default category\n     */\n    suspend fun getCategories(): List<Category> {\n        return getCategories.subscribe()\n            .firstOrNull()\n            ?.filterNot { it.isSystemCategory }\n            .orEmpty()\n    }\n\n    suspend fun getDuplicateLibraryManga(manga: Manga): Manga? {\n        return getDuplicateLibraryManga.await(manga).getOrNull(0)\n    }\n\n    private fun moveMangaToCategories(manga: Manga, vararg categories: Category) {\n        moveMangaToCategories(manga, categories.filter { it.id != 0L }.map { it.id })\n    }\n\n    fun moveMangaToCategories(manga: Manga, categoryIds: List<Long>) {\n        screenModelScope.launchIO {\n            setMangaCategories.await(\n                mangaId = manga.id,\n                categoryIds = categoryIds.toList(),\n            )\n        }\n    }\n\n    fun openFilterSheet() {\n        setDialog(Dialog.Filter)\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    fun setToolbarQuery(query: String?) {\n        mutableState.update { it.copy(toolbarQuery = query) }\n    }\n\n    sealed class Listing(open val query: String?, open val filters: FilterList) {\n        data object Popular : Listing(query = GetRemoteManga.QUERY_POPULAR, filters = FilterList())\n        data object Latest : Listing(query = GetRemoteManga.QUERY_LATEST, filters = FilterList())\n        data class Search(override val query: String?, override val filters: FilterList) : Listing(\n            query = query,\n            filters = filters,\n        )\n\n        companion object {\n            fun valueOf(query: String?): Listing {\n                return when (query) {\n                    GetRemoteManga.QUERY_POPULAR -> Popular\n                    GetRemoteManga.QUERY_LATEST -> Latest\n                    else -> Search(query = query, filters = FilterList()) // filters are filled in later\n                }\n            }\n        }\n    }\n\n    sealed interface Dialog {\n        data object Filter : Dialog\n        data class RemoveManga(val manga: Manga) : Dialog\n        data class AddDuplicateManga(val manga: Manga, val duplicate: Manga) : Dialog\n        data class ChangeMangaCategory(\n            val manga: Manga,\n            val initialSelection: ImmutableList<CheckboxState.State<Category>>,\n        ) : Dialog\n        data class Migrate(val newManga: Manga, val oldManga: Manga) : Dialog\n    }\n\n    @Immutable\n    data class State(\n        val listing: Listing,\n        val filters: FilterList = FilterList(),\n        val toolbarQuery: String? = null,\n        val dialog: Dialog? = null,\n    ) {\n        val isUserQuery get() = listing is Listing.Search && !listing.query.isNullOrEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/SourceFilterMangaDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source.browse\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.components.AdaptiveSheet\nimport eu.kanade.tachiyomi.source.model.Filter\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.CheckboxItem\nimport tachiyomi.presentation.core.components.CollapsibleBox\nimport tachiyomi.presentation.core.components.HeadingItem\nimport tachiyomi.presentation.core.components.SelectItem\nimport tachiyomi.presentation.core.components.SortItem\nimport tachiyomi.presentation.core.components.TextItem\nimport tachiyomi.presentation.core.components.TriStateItem\nimport tachiyomi.presentation.core.components.material.Button\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun SourceFilterMangaDialog(\n    onDismissRequest: () -> Unit,\n    filters: FilterList,\n    onReset: () -> Unit,\n    onFilter: () -> Unit,\n    onUpdate: (FilterList) -> Unit,\n) {\n    val updateFilters = { onUpdate(filters) }\n\n    AdaptiveSheet(onDismissRequest = onDismissRequest) {\n        LazyColumn {\n            stickyHeader {\n                Row(\n                    modifier = Modifier\n                        .background(MaterialTheme.colorScheme.background)\n                        .padding(8.dp),\n                ) {\n                    TextButton(onClick = onReset) {\n                        Text(\n                            text = stringResource(MR.strings.action_reset),\n                            style = LocalTextStyle.current.copy(\n                                color = MaterialTheme.colorScheme.primary,\n                            ),\n                        )\n                    }\n\n                    Spacer(modifier = Modifier.weight(1f))\n\n                    Button(onClick = {\n                        onFilter()\n                        onDismissRequest()\n                    }) {\n                        Text(stringResource(MR.strings.action_filter))\n                    }\n                }\n                HorizontalDivider()\n            }\n\n            items(filters) {\n                FilterItem(it, updateFilters)\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun FilterItem(filter: Filter<*>, onUpdate: () -> Unit) {\n    when (filter) {\n        is Filter.Header -> {\n            HeadingItem(filter.name)\n        }\n        is Filter.Separator -> {\n            HorizontalDivider()\n        }\n        is Filter.CheckBox -> {\n            CheckboxItem(\n                label = filter.name,\n                checked = filter.state,\n            ) {\n                filter.state = !filter.state\n                onUpdate()\n            }\n        }\n        is Filter.TriState -> {\n            TriStateItem(\n                label = filter.name,\n                state = filter.state.toTriStateFilter(),\n            ) {\n                filter.state = filter.state.toTriStateFilter().next().toTriStateInt()\n                onUpdate()\n            }\n        }\n        is Filter.Text -> {\n            TextItem(\n                label = filter.name,\n                value = filter.state,\n            ) {\n                filter.state = it\n                onUpdate()\n            }\n        }\n        is Filter.Select<*> -> {\n            SelectItem(\n                label = filter.name,\n                options = filter.values,\n                selectedIndex = filter.state,\n                onSelect = {\n                    filter.state = it\n                    onUpdate()\n                },\n            )\n        }\n        is Filter.Sort -> {\n            CollapsibleBox(\n                heading = filter.name,\n            ) {\n                Column {\n                    filter.values.mapIndexed { index, item ->\n                        SortItem(\n                            label = item,\n                            sortDescending = filter.state?.ascending?.not()\n                                ?.takeIf { index == filter.state?.index },\n                        ) {\n                            val ascending = if (index == filter.state?.index) {\n                                !filter.state!!.ascending\n                            } else {\n                                filter.state!!.ascending\n                            }\n                            filter.state = Filter.Sort.Selection(\n                                index = index,\n                                ascending = ascending,\n                            )\n                            onUpdate()\n                        }\n                    }\n                }\n            }\n        }\n        is Filter.Group<*> -> {\n            CollapsibleBox(\n                heading = filter.name,\n            ) {\n                Column {\n                    filter.state\n                        .filterIsInstance<Filter<*>>()\n                        .map { FilterItem(filter = it, onUpdate = onUpdate) }\n                }\n            }\n        }\n    }\n}\n\nprivate fun Int.toTriStateFilter(): TriState {\n    return when (this) {\n        Filter.TriState.STATE_IGNORE -> TriState.DISABLED\n        Filter.TriState.STATE_INCLUDE -> TriState.ENABLED_IS\n        Filter.TriState.STATE_EXCLUDE -> TriState.ENABLED_NOT\n        else -> throw IllegalStateException(\"Unknown TriState state: $this\")\n    }\n}\n\nprivate fun TriState.toTriStateInt(): Int {\n    return when (this) {\n        TriState.DISABLED -> Filter.TriState.STATE_IGNORE\n        TriState.ENABLED_IS -> Filter.TriState.STATE_INCLUDE\n        TriState.ENABLED_NOT -> Filter.TriState.STATE_EXCLUDE\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/GlobalMangaSearchScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifMangaSourcesLoaded\nimport eu.kanade.presentation.browse.manga.GlobalMangaSearchScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass GlobalMangaSearchScreen(\n    val searchQuery: String = \"\",\n    private val extensionFilter: String? = null,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        if (!ifMangaSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel {\n            GlobalMangaSearchScreenModel(\n                initialQuery = searchQuery,\n                initialExtensionFilter = extensionFilter,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n        var showSingleLoadingScreen by remember {\n            mutableStateOf(\n                searchQuery.isNotEmpty() && !extensionFilter.isNullOrEmpty() && state.total == 1,\n            )\n        }\n\n        if (showSingleLoadingScreen) {\n            LoadingScreen()\n\n            LaunchedEffect(state.items) {\n                when (val result = state.items.values.singleOrNull()) {\n                    MangaSearchItemResult.Loading -> return@LaunchedEffect\n                    is MangaSearchItemResult.Success -> {\n                        val manga = result.result.singleOrNull()\n                        if (manga != null) {\n                            navigator.replace(MangaScreen(manga.id, true))\n                        } else {\n                            // Backoff to result screen\n                            showSingleLoadingScreen = false\n                        }\n                    }\n                    else -> showSingleLoadingScreen = false\n                }\n            }\n        } else {\n            GlobalMangaSearchScreen(\n                state = state,\n                navigateUp = navigator::pop,\n                onChangeSearchQuery = screenModel::updateSearchQuery,\n                onSearch = { screenModel.search() },\n                getManga = { screenModel.getManga(it) },\n                onChangeSearchFilter = screenModel::setSourceFilter,\n                onToggleResults = screenModel::toggleFilterResults,\n                onClickSource = {\n                    navigator.push(BrowseMangaSourceScreen(it.id, state.searchQuery))\n                },\n                onClickItem = { navigator.push(MangaScreen(it.id, true)) },\n                onLongClickItem = { navigator.push(MangaScreen(it.id, true)) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/GlobalMangaSearchScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch\n\nimport eu.kanade.tachiyomi.source.CatalogueSource\n\nclass GlobalMangaSearchScreenModel(\n    initialQuery: String = \"\",\n    initialExtensionFilter: String? = null,\n) : MangaSearchScreenModel(\n    State(\n        searchQuery = initialQuery,\n    ),\n) {\n\n    init {\n        extensionFilter = initialExtensionFilter\n        if (initialQuery.isNotBlank() || !initialExtensionFilter.isNullOrBlank()) {\n            if (extensionFilter != null) {\n                // we're going to use custom extension filter instead\n                setSourceFilter(MangaSourceFilter.All)\n            }\n            search()\n        }\n    }\n\n    override fun getEnabledSources(): List<CatalogueSource> {\n        return super.getEnabledSources()\n            .filter { state.value.sourceFilter != MangaSourceFilter.PinnedOnly || \"${it.id}\" in pinnedSources }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/MangaSearchScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.produceState\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.entries.manga.model.toDomainManga\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport kotlinx.collections.immutable.PersistentMap\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toPersistentMap\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.asCoroutineDispatcher\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.isActive\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport tachiyomi.core.common.preference.toggle\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.interactor.NetworkToLocalManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.Executors\n\nabstract class MangaSearchScreenModel(\n    initialState: State = State(),\n    sourcePreferences: SourcePreferences = Injekt.get(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val extensionManager: MangaExtensionManager = Injekt.get(),\n    private val networkToLocalManga: NetworkToLocalManga = Injekt.get(),\n    private val getManga: GetManga = Injekt.get(),\n    private val preferences: SourcePreferences = Injekt.get(),\n) : StateScreenModel<MangaSearchScreenModel.State>(initialState) {\n\n    private val coroutineDispatcher = Executors.newFixedThreadPool(5).asCoroutineDispatcher()\n    private var searchJob: Job? = null\n\n    private val enabledLanguages = sourcePreferences.enabledLanguages().get()\n    private val disabledSources = sourcePreferences.disabledMangaSources().get()\n    protected val pinnedSources = sourcePreferences.pinnedMangaSources().get()\n\n    private var lastQuery: String? = null\n    private var lastSourceFilter: MangaSourceFilter? = null\n\n    protected var extensionFilter: String? = null\n\n    private val sortComparator = { map: Map<CatalogueSource, MangaSearchItemResult> ->\n        compareBy<CatalogueSource>(\n            { (map[it] as? MangaSearchItemResult.Success)?.isEmpty ?: true },\n            { \"${it.id}\" !in pinnedSources },\n            { \"${it.name.lowercase()} (${it.lang})\" },\n        )\n    }\n\n    init {\n        screenModelScope.launch {\n            preferences.globalSearchFilterState().changes().collectLatest { state ->\n                mutableState.update { it.copy(onlyShowHasResults = state) }\n            }\n        }\n    }\n\n    @Composable\n    fun getManga(initialManga: Manga): androidx.compose.runtime.State<Manga> {\n        return produceState(initialValue = initialManga) {\n            getManga.subscribe(initialManga.url, initialManga.source)\n                .filterNotNull()\n                .collectLatest { manga ->\n                    value = manga\n                }\n        }\n    }\n\n    open fun getEnabledSources(): List<CatalogueSource> {\n        return sourceManager.getCatalogueSources()\n            .filter { it.lang in enabledLanguages && \"${it.id}\" !in disabledSources }\n            .sortedWith(\n                compareBy(\n                    { \"${it.id}\" !in pinnedSources },\n                    { \"${it.name.lowercase()} (${it.lang})\" },\n                ),\n            )\n    }\n\n    private fun getSelectedSources(): List<CatalogueSource> {\n        val enabledSources = getEnabledSources()\n\n        val filter = extensionFilter\n        if (filter.isNullOrEmpty()) {\n            return enabledSources\n        }\n\n        return extensionManager.installedExtensionsFlow.value\n            .filter { it.pkgName == filter }\n            .flatMap { it.sources }\n            .filterIsInstance<CatalogueSource>()\n            .filter { it in enabledSources }\n    }\n\n    fun updateSearchQuery(query: String?) {\n        mutableState.update { it.copy(searchQuery = query) }\n    }\n\n    fun setSourceFilter(filter: MangaSourceFilter) {\n        mutableState.update { it.copy(sourceFilter = filter) }\n        search()\n    }\n\n    fun toggleFilterResults() {\n        preferences.globalSearchFilterState().toggle()\n    }\n\n    fun search() {\n        val query = state.value.searchQuery\n        val sourceFilter = state.value.sourceFilter\n\n        if (query.isNullOrBlank()) return\n        val sameQuery = this.lastQuery == query\n        if (sameQuery && this.lastSourceFilter == sourceFilter) return\n\n        this.lastQuery = query\n        this.lastSourceFilter = sourceFilter\n\n        searchJob?.cancel()\n        val sources = getSelectedSources()\n\n        // Reuse previous results if possible\n        if (sameQuery) {\n            val existingResults = state.value.items\n            updateItems(\n                sources\n                    .associateWith { existingResults[it] ?: MangaSearchItemResult.Loading }\n                    .toPersistentMap(),\n            )\n        } else {\n            updateItems(\n                sources\n                    .associateWith { MangaSearchItemResult.Loading }\n                    .toPersistentMap(),\n            )\n        }\n        searchJob = ioCoroutineScope.launch {\n            sources.map { source ->\n                async {\n                    if (state.value.items[source] !is MangaSearchItemResult.Loading) {\n                        return@async\n                    }\n                    try {\n                        val page = withContext(coroutineDispatcher) {\n                            source.getSearchManga(1, query, source.getFilterList())\n                        }\n\n                        val titles = page.mangas.map {\n                            networkToLocalManga.await(it.toDomainManga(source.id))\n                        }\n\n                        if (isActive) {\n                            updateItem(source, MangaSearchItemResult.Success(titles))\n                        }\n                    } catch (e: Exception) {\n                        if (isActive) {\n                            updateItem(source, MangaSearchItemResult.Error(e))\n                        }\n                    }\n                }\n            }\n                .awaitAll()\n        }\n    }\n\n    private fun updateItems(items: PersistentMap<CatalogueSource, MangaSearchItemResult>) {\n        mutableState.update {\n            it.copy(\n                items = items\n                    .toSortedMap(sortComparator(items))\n                    .toPersistentMap(),\n            )\n        }\n    }\n\n    private fun updateItem(source: CatalogueSource, result: MangaSearchItemResult) {\n        val newItems = state.value.items.mutate {\n            it[source] = result\n        }\n        updateItems(newItems)\n    }\n\n    @Immutable\n    data class State(\n        val fromSourceId: Long? = null,\n        val searchQuery: String? = null,\n        val sourceFilter: MangaSourceFilter = MangaSourceFilter.PinnedOnly,\n        val onlyShowHasResults: Boolean = false,\n        val items: PersistentMap<CatalogueSource, MangaSearchItemResult> = persistentMapOf(),\n    ) {\n        val progress: Int = items.count { it.value !is MangaSearchItemResult.Loading }\n        val total: Int = items.size\n        val filteredItems = items.filter { (_, result) -> result.isVisible(onlyShowHasResults) }\n    }\n}\n\nenum class MangaSourceFilter {\n    All,\n    PinnedOnly,\n}\n\nsealed interface MangaSearchItemResult {\n    data object Loading : MangaSearchItemResult\n\n    data class Error(\n        val throwable: Throwable,\n    ) : MangaSearchItemResult\n\n    data class Success(\n        val result: List<Manga>,\n    ) : MangaSearchItemResult {\n        val isEmpty: Boolean\n            get() = result.isEmpty()\n    }\n\n    fun isVisible(onlyShowHasResults: Boolean): Boolean {\n        return !onlyShowHasResults || (this is Success && !this.isEmpty)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoriesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.category\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.presentation.components.TabbedScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.category.anime.AnimeCategoryEvent\nimport eu.kanade.tachiyomi.ui.category.anime.AnimeCategoryScreenModel\nimport eu.kanade.tachiyomi.ui.category.anime.animeCategoryTab\nimport eu.kanade.tachiyomi.ui.category.manga.MangaCategoryEvent\nimport eu.kanade.tachiyomi.ui.category.manga.MangaCategoryScreenModel\nimport eu.kanade.tachiyomi.ui.category.manga.mangaCategoryTab\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.channels.BufferOverflow\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object CategoriesTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter)\n            return TabOptions(\n                index = 7u,\n                title = stringResource(AYMR.strings.general_categories),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    private val switchToMangaCategoryTabChannel = Channel<Unit>(1, BufferOverflow.DROP_OLDEST)\n\n    fun showMangaCategory() {\n        switchToMangaCategoryTabChannel.trySend(Unit)\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n\n        val animeCategoryScreenModel = rememberScreenModel { AnimeCategoryScreenModel() }\n        val mangaCategoryScreenModel = rememberScreenModel { MangaCategoryScreenModel() }\n\n        val tabs = persistentListOf(\n            animeCategoryTab(),\n            mangaCategoryTab(),\n        )\n\n        val state = rememberPagerState { tabs.size }\n\n        TabbedScreen(\n            titleRes = AYMR.strings.general_categories,\n            tabs = tabs,\n            state = state,\n        )\n        LaunchedEffect(Unit) {\n            switchToMangaCategoryTabChannel.receiveAsFlow()\n                .collectLatest { state.scrollToPage(1) }\n        }\n\n        LaunchedEffect(Unit) {\n            (context as? MainActivity)?.ready = true\n        }\n\n        LaunchedEffect(Unit) {\n            mangaCategoryScreenModel.events.collectLatest { event ->\n                if (event is MangaCategoryEvent.LocalizedMessage) {\n                    context.toast(event.stringRes)\n                }\n            }\n            animeCategoryScreenModel.events.collectLatest { event ->\n                if (event is AnimeCategoryEvent.LocalizedMessage) {\n                    context.toast(event.stringRes)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.category.anime\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.category.anime.interactor.CreateAnimeCategoryWithName\nimport tachiyomi.domain.category.anime.interactor.DeleteAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.GetVisibleAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.HideAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.RenameAnimeCategory\nimport tachiyomi.domain.category.anime.interactor.ReorderAnimeCategory\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeCategoryScreenModel(\n    private val getAllCategories: GetAnimeCategories = Injekt.get(),\n    private val getVisibleCategories: GetVisibleAnimeCategories = Injekt.get(),\n    private val createCategoryWithName: CreateAnimeCategoryWithName = Injekt.get(),\n    private val hideCategory: HideAnimeCategory = Injekt.get(),\n    private val deleteCategory: DeleteAnimeCategory = Injekt.get(),\n    private val reorderCategory: ReorderAnimeCategory = Injekt.get(),\n    private val renameCategory: RenameAnimeCategory = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n) : StateScreenModel<AnimeCategoryScreenState>(AnimeCategoryScreenState.Loading) {\n\n    private val _events: Channel<AnimeCategoryEvent> = Channel()\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            val allCategories = if (libraryPreferences.hideHiddenCategoriesSettings().get()) {\n                getVisibleCategories.subscribe()\n            } else {\n                getAllCategories.subscribe()\n            }\n\n            allCategories.collectLatest { categories ->\n                mutableState.update {\n                    AnimeCategoryScreenState.Success(\n                        categories = categories\n                            .filterNot(Category::isSystemCategory)\n                            .toImmutableList(),\n                    )\n                }\n            }\n        }\n    }\n\n    fun createCategory(name: String) {\n        screenModelScope.launch {\n            when (createCategoryWithName.await(name)) {\n                is CreateAnimeCategoryWithName.Result.InternalError -> _events.send(\n                    AnimeCategoryEvent.InternalError,\n                )\n\n                else -> {}\n            }\n        }\n    }\n\n    fun hideCategory(category: Category) {\n        screenModelScope.launch {\n            when (hideCategory.await(category)) {\n                is HideAnimeCategory.Result.InternalError -> _events.send(\n                    AnimeCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun deleteCategory(categoryId: Long) {\n        screenModelScope.launch {\n            when (deleteCategory.await(categoryId = categoryId)) {\n                is DeleteAnimeCategory.Result.InternalError -> _events.send(\n                    AnimeCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun changeOrder(category: Category, newIndex: Int) {\n        screenModelScope.launch {\n            when (reorderCategory.await(category, newIndex)) {\n                is ReorderAnimeCategory.Result.InternalError -> _events.send(\n                    AnimeCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun renameCategory(category: Category, name: String) {\n        screenModelScope.launch {\n            when (renameCategory.await(category, name)) {\n                is RenameAnimeCategory.Result.InternalError -> _events.send(\n                    AnimeCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun showDialog(dialog: AnimeCategoryDialog) {\n        mutableState.update {\n            when (it) {\n                AnimeCategoryScreenState.Loading -> it\n                is AnimeCategoryScreenState.Success -> it.copy(dialog = dialog)\n            }\n        }\n    }\n\n    fun dismissDialog() {\n        mutableState.update {\n            when (it) {\n                AnimeCategoryScreenState.Loading -> it\n                is AnimeCategoryScreenState.Success -> it.copy(dialog = null)\n            }\n        }\n    }\n}\n\nsealed interface AnimeCategoryDialog {\n    data object Create : AnimeCategoryDialog\n    data class Rename(val category: Category) : AnimeCategoryDialog\n    data class Delete(val category: Category) : AnimeCategoryDialog\n}\n\nsealed interface AnimeCategoryEvent {\n    sealed class LocalizedMessage(val stringRes: StringResource) : AnimeCategoryEvent\n    data object InternalError : LocalizedMessage(MR.strings.internal_error)\n}\n\nsealed interface AnimeCategoryScreenState {\n\n    @Immutable\n    data object Loading : AnimeCategoryScreenState\n\n    @Immutable\n    data class Success(\n        val categories: ImmutableList<Category>,\n        val dialog: AnimeCategoryDialog? = null,\n    ) : AnimeCategoryScreenState {\n\n        val isEmpty: Boolean\n            get() = categories.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.category.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.util.fastMap\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.category.AnimeCategoryScreen\nimport eu.kanade.presentation.category.components.CategoryCreateDialog\nimport eu.kanade.presentation.category.components.CategoryDeleteDialog\nimport eu.kanade.presentation.category.components.CategoryRenameDialog\nimport eu.kanade.presentation.components.TabContent\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\n@Composable\nfun Screen.animeCategoryTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { AnimeCategoryScreenModel() }\n\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime,\n        searchEnabled = false,\n        content = { contentPadding, _ ->\n            if (state is AnimeCategoryScreenState.Loading) {\n                LoadingScreen()\n            } else {\n                val successState = state as AnimeCategoryScreenState.Success\n\n                AnimeCategoryScreen(\n                    state = successState,\n                    onClickCreate = { screenModel.showDialog(AnimeCategoryDialog.Create) },\n                    onClickRename = { screenModel.showDialog(AnimeCategoryDialog.Rename(it)) },\n                    onClickHide = screenModel::hideCategory,\n                    onClickDelete = { screenModel.showDialog(AnimeCategoryDialog.Delete(it)) },\n                    onChangeOrder = screenModel::changeOrder,\n                )\n\n                when (val dialog = successState.dialog) {\n                    null -> {}\n                    AnimeCategoryDialog.Create -> {\n                        CategoryCreateDialog(\n                            onDismissRequest = screenModel::dismissDialog,\n                            onCreate = screenModel::createCategory,\n                            categories = successState.categories.fastMap { it.name }.toImmutableList(),\n                        )\n                    }\n                    is AnimeCategoryDialog.Rename -> {\n                        CategoryRenameDialog(\n                            onDismissRequest = screenModel::dismissDialog,\n                            onRename = { screenModel.renameCategory(dialog.category, it) },\n                            categories = successState.categories.fastMap { it.name }.toImmutableList(),\n                            category = dialog.category.name,\n                        )\n                    }\n                    is AnimeCategoryDialog.Delete -> {\n                        CategoryDeleteDialog(\n                            onDismissRequest = screenModel::dismissDialog,\n                            onDelete = { screenModel.deleteCategory(dialog.category.id) },\n                            category = dialog.category.name,\n                        )\n                    }\n                }\n            }\n        },\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.category.manga\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport tachiyomi.domain.category.manga.interactor.CreateMangaCategoryWithName\nimport tachiyomi.domain.category.manga.interactor.DeleteMangaCategory\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.GetVisibleMangaCategories\nimport tachiyomi.domain.category.manga.interactor.HideMangaCategory\nimport tachiyomi.domain.category.manga.interactor.RenameMangaCategory\nimport tachiyomi.domain.category.manga.interactor.ReorderMangaCategory\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaCategoryScreenModel(\n    private val getAllCategories: GetMangaCategories = Injekt.get(),\n    private val getVisibleCategories: GetVisibleMangaCategories = Injekt.get(),\n    private val createCategoryWithName: CreateMangaCategoryWithName = Injekt.get(),\n    private val hideCategory: HideMangaCategory = Injekt.get(),\n    private val deleteCategory: DeleteMangaCategory = Injekt.get(),\n    private val reorderCategory: ReorderMangaCategory = Injekt.get(),\n    private val renameCategory: RenameMangaCategory = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n) : StateScreenModel<MangaCategoryScreenState>(MangaCategoryScreenState.Loading) {\n\n    private val _events: Channel<MangaCategoryEvent> = Channel()\n    val events = _events.receiveAsFlow()\n\n    init {\n        screenModelScope.launch {\n            val allCategories = if (libraryPreferences.hideHiddenCategoriesSettings().get()) {\n                getVisibleCategories.subscribe()\n            } else {\n                getAllCategories.subscribe()\n            }\n\n            allCategories.collectLatest { categories ->\n                mutableState.update {\n                    MangaCategoryScreenState.Success(\n                        categories = categories\n                            .filterNot(Category::isSystemCategory)\n                            .toImmutableList(),\n                    )\n                }\n            }\n        }\n    }\n\n    fun createCategory(name: String) {\n        screenModelScope.launch {\n            when (createCategoryWithName.await(name)) {\n                is CreateMangaCategoryWithName.Result.InternalError -> _events.send(\n                    MangaCategoryEvent.InternalError,\n                )\n\n                else -> {}\n            }\n        }\n    }\n\n    fun hideCategory(category: Category) {\n        screenModelScope.launch {\n            when (hideCategory.await(category)) {\n                is HideMangaCategory.Result.InternalError -> _events.send(\n                    MangaCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun deleteCategory(categoryId: Long) {\n        screenModelScope.launch {\n            when (deleteCategory.await(categoryId = categoryId)) {\n                is DeleteMangaCategory.Result.InternalError -> _events.send(\n                    MangaCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun changeOrder(category: Category, newIndex: Int) {\n        screenModelScope.launch {\n            when (reorderCategory.await(category, newIndex)) {\n                is ReorderMangaCategory.Result.InternalError -> _events.send(\n                    MangaCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun renameCategory(category: Category, name: String) {\n        screenModelScope.launch {\n            when (renameCategory.await(category, name)) {\n                is RenameMangaCategory.Result.InternalError -> _events.send(\n                    MangaCategoryEvent.InternalError,\n                )\n                else -> {}\n            }\n        }\n    }\n\n    fun showDialog(dialog: MangaCategoryDialog) {\n        mutableState.update {\n            when (it) {\n                MangaCategoryScreenState.Loading -> it\n                is MangaCategoryScreenState.Success -> it.copy(dialog = dialog)\n            }\n        }\n    }\n\n    fun dismissDialog() {\n        mutableState.update {\n            when (it) {\n                MangaCategoryScreenState.Loading -> it\n                is MangaCategoryScreenState.Success -> it.copy(dialog = null)\n            }\n        }\n    }\n}\n\nsealed interface MangaCategoryDialog {\n    data object Create : MangaCategoryDialog\n    data class Rename(val category: Category) : MangaCategoryDialog\n    data class Delete(val category: Category) : MangaCategoryDialog\n}\n\nsealed interface MangaCategoryEvent {\n    sealed class LocalizedMessage(val stringRes: StringResource) : MangaCategoryEvent\n    data object InternalError : LocalizedMessage(MR.strings.internal_error)\n}\n\nsealed interface MangaCategoryScreenState {\n\n    @Immutable\n    data object Loading : MangaCategoryScreenState\n\n    @Immutable\n    data class Success(\n        val categories: ImmutableList<Category>,\n        val dialog: MangaCategoryDialog? = null,\n    ) : MangaCategoryScreenState {\n\n        val isEmpty: Boolean\n            get() = categories.isEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.category.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.util.fastMap\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.category.MangaCategoryScreen\nimport eu.kanade.presentation.category.components.CategoryCreateDialog\nimport eu.kanade.presentation.category.components.CategoryDeleteDialog\nimport eu.kanade.presentation.category.components.CategoryRenameDialog\nimport eu.kanade.presentation.components.TabContent\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\n@Composable\nfun Screen.mangaCategoryTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { MangaCategoryScreenModel() }\n\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_manga,\n        searchEnabled = false,\n        content = { contentPadding, _ ->\n            if (state is MangaCategoryScreenState.Loading) {\n                LoadingScreen()\n            } else {\n                val successState = state as MangaCategoryScreenState.Success\n\n                MangaCategoryScreen(\n                    state = successState,\n                    onClickCreate = { screenModel.showDialog(MangaCategoryDialog.Create) },\n                    onClickRename = { screenModel.showDialog(MangaCategoryDialog.Rename(it)) },\n                    onClickHide = screenModel::hideCategory,\n                    onClickDelete = { screenModel.showDialog(MangaCategoryDialog.Delete(it)) },\n                    onChangeOrder = screenModel::changeOrder,\n                )\n\n                when (val dialog = successState.dialog) {\n                    null -> {}\n                    MangaCategoryDialog.Create -> {\n                        CategoryCreateDialog(\n                            onDismissRequest = screenModel::dismissDialog,\n                            onCreate = screenModel::createCategory,\n                            categories = successState.categories.fastMap { it.name }.toImmutableList(),\n                        )\n                    }\n                    is MangaCategoryDialog.Rename -> {\n                        CategoryRenameDialog(\n                            onDismissRequest = screenModel::dismissDialog,\n                            onRename = { screenModel.renameCategory(dialog.category, it) },\n                            categories = successState.categories.fastMap { it.name }.toImmutableList(),\n                            category = dialog.category.name,\n                        )\n                    }\n                    is MangaCategoryDialog.Delete -> {\n                        CategoryDeleteDialog(\n                            onDismissRequest = screenModel::dismissDialog,\n                            onDelete = { screenModel.deleteCategory(dialog.category.id) },\n                            category = dialog.category.name,\n                        )\n                    }\n                }\n            }\n        },\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/DeepLinkScreenType.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink\n\nenum class DeepLinkScreenType {\n    ANIME,\n    MANGA,\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink.anime\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport eu.kanade.tachiyomi.ui.deeplink.DeepLinkScreenType\nimport eu.kanade.tachiyomi.ui.main.MainActivity\n\nclass DeepLinkAnimeActivity : Activity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        intent.apply {\n            flags = flags or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK\n            putExtra(MainActivity.INTENT_SEARCH_TYPE, DeepLinkScreenType.ANIME.toString())\n            setClass(applicationContext, MainActivity::class.java)\n        }\n        startActivity(intent)\n        finish()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink.anime\n\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.player.PlayerActivity\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass DeepLinkAnimeScreen(\n    val query: String = \"\",\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel {\n            DeepLinkAnimeScreenModel(query = query)\n        }\n        val state by screenModel.state.collectAsState()\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(MR.strings.action_search_hint),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { contentPadding ->\n            when (state) {\n                is DeepLinkAnimeScreenModel.State.Loading -> {\n                    LoadingScreen(Modifier.padding(contentPadding))\n                }\n                is DeepLinkAnimeScreenModel.State.NoResults -> {\n                    navigator.replace(GlobalAnimeSearchScreen(query))\n                }\n                is DeepLinkAnimeScreenModel.State.Result -> {\n                    val resultState = state as DeepLinkAnimeScreenModel.State.Result\n                    if (resultState.episodeId == null) {\n                        navigator.replace(\n                            AnimeScreen(\n                                resultState.anime.id,\n                                true,\n                            ),\n                        )\n                    } else {\n                        navigator.pop()\n                        PlayerActivity.newIntent(\n                            context,\n                            resultState.anime.id,\n                            resultState.episodeId,\n                        ).also(context::startActivity)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink.anime\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.entries.anime.model.toDomainAnime\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.online.ResolvableAnimeSource\nimport eu.kanade.tachiyomi.animesource.online.UriType\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeByUrlAndSourceId\nimport tachiyomi.domain.entries.anime.interactor.NetworkToLocalAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisodeByUrlAndAnimeId\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass DeepLinkAnimeScreenModel(\n    query: String = \"\",\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val networkToLocalAnime: NetworkToLocalAnime = Injekt.get(),\n    private val getEpisodeByUrlAndAnimeId: GetEpisodeByUrlAndAnimeId = Injekt.get(),\n    private val getAnimeByUrlAndSourceId: GetAnimeByUrlAndSourceId = Injekt.get(),\n    private val syncEpisodesWithSource: SyncEpisodesWithSource = Injekt.get(),\n) : StateScreenModel<DeepLinkAnimeScreenModel.State>(State.Loading) {\n\n    init {\n        screenModelScope.launchIO {\n            val source = sourceManager.getCatalogueSources()\n                .filterIsInstance<ResolvableAnimeSource>()\n                .firstOrNull { it.getUriType(query) != UriType.Unknown }\n\n            val anime = source?.getAnime(query)?.let {\n                getAnimeFromSAnime(it, source.id)\n            }\n\n            val episode = if (source?.getUriType(query) == UriType.Episode && anime != null) {\n                source.getEpisode(query)?.let { getEpisodeFromSEpisode(it, anime, source) }\n            } else {\n                null\n            }\n\n            mutableState.update {\n                if (anime == null) {\n                    State.NoResults\n                } else {\n                    if (episode == null) {\n                        State.Result(anime)\n                    } else {\n                        State.Result(anime, episode.id)\n                    }\n                }\n            }\n        }\n    }\n\n    private suspend fun getEpisodeFromSEpisode(sEpisode: SEpisode, anime: Anime, source: AnimeSource): Episode? {\n        val localEpisode = getEpisodeByUrlAndAnimeId.await(sEpisode.url, anime.id)\n\n        return if (localEpisode == null) {\n            val sourceEpisodes = source.getEpisodeList(anime.toSAnime())\n            val newEpisodes = syncEpisodesWithSource.await(sourceEpisodes, anime, source, false)\n            newEpisodes.find { it.url == sEpisode.url }\n        } else {\n            localEpisode\n        }\n    }\n\n    private suspend fun getAnimeFromSAnime(sAnime: SAnime, sourceId: Long): Anime {\n        return getAnimeByUrlAndSourceId.await(sAnime.url, sourceId)\n            ?: networkToLocalAnime.await(sAnime.toDomainAnime(sourceId))\n    }\n\n    sealed interface State {\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data object NoResults : State\n\n        @Immutable\n        data class Result(val anime: Anime, val episodeId: Long? = null) : State\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink.manga\n\nimport android.app.Activity\nimport android.content.Intent\nimport android.os.Bundle\nimport eu.kanade.tachiyomi.ui.deeplink.DeepLinkScreenType\nimport eu.kanade.tachiyomi.ui.main.MainActivity\n\nclass DeepLinkMangaActivity : Activity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        intent.apply {\n            flags = flags or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK\n            putExtra(MainActivity.INTENT_SEARCH_TYPE, DeepLinkScreenType.MANGA.toString())\n            setClass(applicationContext, MainActivity::class.java)\n        }\n        startActivity(intent)\n        finish()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink.manga\n\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass DeepLinkMangaScreen(\n    val query: String = \"\",\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel {\n            DeepLinkMangaScreenModel(query = query)\n        }\n        val state by screenModel.state.collectAsState()\n        Scaffold(\n            topBar = { scrollBehavior ->\n                AppBar(\n                    title = stringResource(MR.strings.action_search_hint),\n                    navigateUp = navigator::pop,\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n        ) { contentPadding ->\n            when (state) {\n                is DeepLinkMangaScreenModel.State.Loading -> {\n                    LoadingScreen(Modifier.padding(contentPadding))\n                }\n                is DeepLinkMangaScreenModel.State.NoResults -> {\n                    navigator.replace(GlobalMangaSearchScreen(query))\n                }\n                is DeepLinkMangaScreenModel.State.Result -> {\n                    val resultState = state as DeepLinkMangaScreenModel.State.Result\n                    if (resultState.chapterId == null) {\n                        navigator.replace(\n                            MangaScreen(\n                                resultState.manga.id,\n                                true,\n                            ),\n                        )\n                    } else {\n                        navigator.pop()\n                        ReaderActivity.newIntent(\n                            context,\n                            resultState.manga.id,\n                            resultState.chapterId,\n                        ).also(context::startActivity)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.deeplink.manga\n\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.entries.manga.model.toDomainManga\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.source.online.ResolvableSource\nimport eu.kanade.tachiyomi.source.online.UriType\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.entries.manga.interactor.GetMangaByUrlAndSourceId\nimport tachiyomi.domain.entries.manga.interactor.NetworkToLocalManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChapterByUrlAndMangaId\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass DeepLinkMangaScreenModel(\n    query: String = \"\",\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val networkToLocalManga: NetworkToLocalManga = Injekt.get(),\n    private val getChapterByUrlAndMangaId: GetChapterByUrlAndMangaId = Injekt.get(),\n    private val getMangaByUrlAndSourceId: GetMangaByUrlAndSourceId = Injekt.get(),\n    private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(),\n) : StateScreenModel<DeepLinkMangaScreenModel.State>(State.Loading) {\n\n    init {\n        screenModelScope.launchIO {\n            val source = sourceManager.getCatalogueSources()\n                .filterIsInstance<ResolvableSource>()\n                .firstOrNull { it.getUriType(query) != UriType.Unknown }\n\n            val manga = source?.getManga(query)?.let {\n                getMangaFromSManga(it, source.id)\n            }\n\n            val chapter = if (source?.getUriType(query) == UriType.Chapter && manga != null) {\n                source.getChapter(query)?.let { getChapterFromSChapter(it, manga, source) }\n            } else {\n                null\n            }\n\n            mutableState.update {\n                if (manga == null) {\n                    State.NoResults\n                } else {\n                    if (chapter == null) {\n                        State.Result(manga)\n                    } else {\n                        State.Result(manga, chapter.id)\n                    }\n                }\n            }\n        }\n    }\n\n    private suspend fun getChapterFromSChapter(sChapter: SChapter, manga: Manga, source: MangaSource): Chapter? {\n        val localChapter = getChapterByUrlAndMangaId.await(sChapter.url, manga.id)\n\n        return if (localChapter == null) {\n            val sourceChapters = source.getChapterList(manga.toSManga())\n            val newChapters = syncChaptersWithSource.await(sourceChapters, manga, source, false)\n            newChapters.find { it.url == sChapter.url }\n        } else {\n            localChapter\n        }\n    }\n\n    private suspend fun getMangaFromSManga(sManga: SManga, sourceId: Long): Manga {\n        return getMangaByUrlAndSourceId.await(sManga.url, sourceId)\n            ?: networkToLocalManga.await(sManga.toDomainManga(sourceId))\n    }\n\n    sealed interface State {\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data object NoResults : State\n\n        @Immutable\n        data class Result(val manga: Manga, val chapterId: Long? = null) : State\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadsTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.download\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.Sort\nimport androidx.compose.material.icons.filled.PlayArrow\nimport androidx.compose.material.icons.outlined.Pause\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.ExtendedFloatingActionButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.PrimaryTabRow\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Tab\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.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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.input.nestedscroll.NestedScrollConnection\nimport androidx.compose.ui.input.nestedscroll.NestedScrollSource\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.Velocity\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport androidx.compose.ui.zIndex\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.AppBarActions\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.components.NestedMenuItem\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.download.anime.AnimeDownloadHeaderItem\nimport eu.kanade.tachiyomi.ui.download.anime.AnimeDownloadQueueScreenModel\nimport eu.kanade.tachiyomi.ui.download.anime.animeDownloadTab\nimport eu.kanade.tachiyomi.ui.download.manga.MangaDownloadHeaderItem\nimport eu.kanade.tachiyomi.ui.download.manga.MangaDownloadQueueScreenModel\nimport eu.kanade.tachiyomi.ui.download.manga.mangaDownloadTab\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.launch\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.Pill\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.TabText\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object DownloadsTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_history_enter)\n            return TabOptions(\n                index = 6u,\n                title = stringResource(MR.strings.label_download_queue),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val scope = rememberCoroutineScope()\n        val animeScreenModel = rememberScreenModel { AnimeDownloadQueueScreenModel() }\n        val mangaScreenModel = rememberScreenModel { MangaDownloadQueueScreenModel() }\n        val animeDownloadList by animeScreenModel.state.collectAsState()\n        val mangaDownloadList by mangaScreenModel.state.collectAsState()\n        val animeDownloadCount by remember {\n            derivedStateOf { animeDownloadList.sumOf { it.subItems.size } }\n        }\n        val mangaDownloadCount by remember {\n            derivedStateOf { mangaDownloadList.sumOf { it.subItems.size } }\n        }\n\n        val state = rememberPagerState { 2 }\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n        var fabExpanded by remember { mutableStateOf(true) }\n        val nestedScrollConnection = remember {\n            // All this lines just for fab state :/\n            object : NestedScrollConnection {\n                override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {\n                    fabExpanded = available.y >= 0\n                    return scrollBehavior.nestedScrollConnection.onPreScroll(available, source)\n                }\n\n                override fun onPostScroll(consumed: Offset, available: Offset, source: NestedScrollSource): Offset {\n                    return scrollBehavior.nestedScrollConnection.onPostScroll(consumed, available, source)\n                }\n\n                override suspend fun onPreFling(available: Velocity): Velocity {\n                    return scrollBehavior.nestedScrollConnection.onPreFling(available)\n                }\n\n                override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {\n                    return scrollBehavior.nestedScrollConnection.onPostFling(consumed, available)\n                }\n            }\n        }\n\n        Scaffold(\n            topBar = {\n                AppBar(\n                    titleContent = {\n                        Row(verticalAlignment = Alignment.CenterVertically) {\n                            Text(\n                                text = stringResource(MR.strings.label_download_queue),\n                                maxLines = 1,\n                                modifier = Modifier.weight(1f, false),\n                                overflow = TextOverflow.Ellipsis,\n                            )\n                            if (animeDownloadCount > 0) {\n                                val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f\n                                Pill(\n                                    text = \"$animeDownloadCount\",\n                                    modifier = Modifier.padding(start = 4.dp),\n                                    color = MaterialTheme.colorScheme.onBackground\n                                        .copy(alpha = pillAlpha),\n                                    fontSize = 14.sp,\n                                )\n                            }\n                        }\n                    },\n                    navigateUp = navigator::pop,\n                    actions = {\n                        when (state.currentPage) {\n                            0 -> AnimeActions(animeScreenModel, animeDownloadList)\n                            1 -> MangaActions(mangaScreenModel, mangaDownloadList)\n                        }\n                    },\n                    scrollBehavior = scrollBehavior,\n                )\n            },\n            floatingActionButton = {\n                AnimatedVisibility(\n                    visible = when (state.currentPage) {\n                        0 -> animeDownloadList.isNotEmpty()\n                        1 -> mangaDownloadList.isNotEmpty()\n                        else -> false\n                    },\n                    enter = fadeIn(),\n                    exit = fadeOut(),\n                ) {\n                    val animeIsRunning by animeScreenModel.isDownloaderRunning.collectAsState()\n                    val mangaIsRunning by mangaScreenModel.isDownloaderRunning.collectAsState()\n                    ExtendedFloatingActionButton(\n                        text = {\n                            val id = when (state.currentPage) {\n                                0 -> if (animeIsRunning) {\n                                    AYMR.strings.action_stop\n                                } else {\n                                    AYMR.strings.action_continue\n                                }\n                                1 -> if (mangaIsRunning) {\n                                    MR.strings.action_pause\n                                } else {\n                                    MR.strings.action_resume\n                                }\n                                else -> MR.strings.action_pause\n                            }\n                            Text(text = stringResource(id))\n                        },\n                        icon = {\n                            val icon = when (state.currentPage) {\n                                0 -> if (animeIsRunning) {\n                                    Icons.Outlined.Pause\n                                } else {\n                                    Icons.Filled.PlayArrow\n                                }\n                                1 -> if (mangaIsRunning) {\n                                    Icons.Outlined.Pause\n                                } else {\n                                    Icons.Filled.PlayArrow\n                                }\n                                else -> Icons.Filled.PlayArrow\n                            }\n                            Icon(imageVector = icon, contentDescription = null)\n                        },\n                        onClick = {\n                            when (state.currentPage) {\n                                0 -> if (animeIsRunning) {\n                                    animeScreenModel.pauseDownloads()\n                                } else {\n                                    animeScreenModel.startDownloads()\n                                }\n\n                                1 -> if (mangaIsRunning) {\n                                    mangaScreenModel.pauseDownloads()\n                                } else {\n                                    mangaScreenModel.startDownloads()\n                                }\n                            }\n                        },\n                        expanded = fabExpanded,\n                    )\n                }\n            },\n        ) { contentPadding ->\n            Column(\n                modifier = Modifier.padding(\n                    top = contentPadding.calculateTopPadding(),\n                    start = contentPadding.calculateStartPadding(LocalLayoutDirection.current),\n                    end = contentPadding.calculateEndPadding(LocalLayoutDirection.current),\n                ),\n            ) {\n                PrimaryTabRow(\n                    selectedTabIndex = state.currentPage,\n                    modifier = Modifier.zIndex(1f),\n                ) {\n                    listOf(\n                        Tab(\n                            selected = state.currentPage == 0,\n                            onClick = { scope.launch { state.animateScrollToPage(0) } },\n                            text = {\n                                TabText(\n                                    text = stringResource(AYMR.strings.label_anime),\n                                    badgeCount = animeDownloadCount,\n                                )\n                            },\n                            unselectedContentColor = MaterialTheme.colorScheme.onSurface,\n                        ),\n                        Tab(\n                            selected = state.currentPage == 1,\n                            onClick = { scope.launch { state.animateScrollToPage(1) } },\n                            text = {\n                                TabText(\n                                    text = stringResource(AYMR.strings.manga),\n                                    badgeCount = mangaDownloadCount,\n                                )\n                            },\n                            unselectedContentColor = MaterialTheme.colorScheme.onSurface,\n                        ),\n                    )\n                }\n\n                HorizontalPager(\n                    modifier = Modifier.fillMaxSize(),\n                    state = state,\n                    verticalAlignment = Alignment.Top,\n                    pageNestedScrollConnection = nestedScrollConnection,\n                ) { page ->\n                    when (page) {\n                        0 -> animeDownloadTab(\n                            nestedScrollConnection,\n                        ).content(\n                            PaddingValues(bottom = contentPadding.calculateBottomPadding()),\n                            snackbarHostState,\n                        )\n                        1 -> mangaDownloadTab(\n                            nestedScrollConnection,\n                        ).content(\n                            PaddingValues(bottom = contentPadding.calculateBottomPadding()),\n                            snackbarHostState,\n                        )\n                    }\n                }\n            }\n        }\n    }\n\n    @Composable\n    private fun AnimeActions(\n        animeScreenModel: AnimeDownloadQueueScreenModel,\n        animeDownloadList: List<AnimeDownloadHeaderItem>,\n    ) {\n        if (animeDownloadList.isNotEmpty()) {\n            var sortExpanded by remember { mutableStateOf(false) }\n            val onDismissRequest = { sortExpanded = false }\n            DropdownMenu(\n                expanded = sortExpanded,\n                onDismissRequest = onDismissRequest,\n            ) {\n                NestedMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_order_by_upload_date)) },\n                    children = { closeMenu ->\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_newest)) },\n                            onClick = {\n                                animeScreenModel.reorderQueue(\n                                    { it.download.episode.dateUpload },\n                                    true,\n                                )\n                                closeMenu()\n                            },\n                        )\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_oldest)) },\n                            onClick = {\n                                animeScreenModel.reorderQueue(\n                                    { it.download.episode.dateUpload },\n                                    false,\n                                )\n                                closeMenu()\n                            },\n                        )\n                    },\n                )\n                NestedMenuItem(\n                    text = {\n                        Text(\n                            text = stringResource(AYMR.strings.action_order_by_episode_number),\n                        )\n                    },\n                    children = { closeMenu ->\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_asc)) },\n                            onClick = {\n                                animeScreenModel.reorderQueue(\n                                    { it.download.episode.episodeNumber },\n                                    false,\n                                )\n                                closeMenu()\n                            },\n                        )\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_desc)) },\n                            onClick = {\n                                animeScreenModel.reorderQueue(\n                                    { it.download.episode.episodeNumber },\n                                    true,\n                                )\n                                closeMenu()\n                            },\n                        )\n                    },\n                )\n            }\n\n            AppBarActions(\n                persistentListOf(\n                    AppBar.Action(\n                        title = stringResource(MR.strings.action_sort),\n                        icon = Icons.AutoMirrored.Outlined.Sort,\n                        onClick = { sortExpanded = true },\n                    ),\n                    AppBar.OverflowAction(\n                        title = stringResource(MR.strings.action_cancel_all),\n                        onClick = { animeScreenModel.clearQueue() },\n                    ),\n                ),\n            )\n        }\n    }\n\n    @Composable\n    private fun MangaActions(\n        mangaScreenModel: MangaDownloadQueueScreenModel,\n        mangaDownloadList: List<MangaDownloadHeaderItem>,\n    ) {\n        if (mangaDownloadList.isNotEmpty()) {\n            var sortExpanded by remember { mutableStateOf(false) }\n            val onDismissRequest = { sortExpanded = false }\n            DropdownMenu(\n                expanded = sortExpanded,\n                onDismissRequest = onDismissRequest,\n            ) {\n                NestedMenuItem(\n                    text = { Text(text = stringResource(MR.strings.action_order_by_upload_date)) },\n                    children = { closeMenu ->\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_newest)) },\n                            onClick = {\n                                mangaScreenModel.reorderQueue(\n                                    { it.download.chapter.dateUpload },\n                                    true,\n                                )\n                                closeMenu()\n                            },\n                        )\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_oldest)) },\n                            onClick = {\n                                mangaScreenModel.reorderQueue(\n                                    { it.download.chapter.dateUpload },\n                                    false,\n                                )\n                                closeMenu()\n                            },\n                        )\n                    },\n                )\n                NestedMenuItem(\n                    text = {\n                        Text(\n                            text = stringResource(MR.strings.action_order_by_chapter_number),\n                        )\n                    },\n                    children = { closeMenu ->\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_asc)) },\n                            onClick = {\n                                mangaScreenModel.reorderQueue(\n                                    { it.download.chapter.chapterNumber },\n                                    false,\n                                )\n                                closeMenu()\n                            },\n                        )\n                        DropdownMenuItem(\n                            text = { Text(text = stringResource(MR.strings.action_desc)) },\n                            onClick = {\n                                mangaScreenModel.reorderQueue(\n                                    { it.download.chapter.chapterNumber },\n                                    true,\n                                )\n                                closeMenu()\n                            },\n                        )\n                    },\n                )\n            }\n\n            AppBarActions(\n                persistentListOf(\n                    AppBar.Action(\n                        title = stringResource(MR.strings.action_sort),\n                        icon = Icons.AutoMirrored.Outlined.Sort,\n                        onClick = { sortExpanded = true },\n                    ),\n                    AppBar.OverflowAction(\n                        title = stringResource(MR.strings.action_cancel_all),\n                        onClick = { mangaScreenModel.clearQueue() },\n                    ),\n                ),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadAdapter.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.view.MenuItem\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.flexibleadapter.items.AbstractFlexibleItem\n\n/**\n * Adapter storing a list of downloads.\n *\n * @param downloadItemListener Listener called when an item of the list is released.\n */\nclass AnimeDownloadAdapter(val downloadItemListener: DownloadItemListener) : FlexibleAdapter<AbstractFlexibleItem<*>>(\n    null,\n    downloadItemListener,\n    true,\n) {\n\n    override fun shouldMove(fromPosition: Int, toPosition: Int): Boolean {\n        // Don't let sub-items changing group\n        return getHeaderOf(getItem(fromPosition)) == getHeaderOf(getItem(toPosition))\n    }\n\n    interface DownloadItemListener {\n        fun onItemReleased(position: Int)\n        fun onMenuItemClick(position: Int, menuItem: MenuItem)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHeaderHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.annotation.SuppressLint\nimport android.view.View\nimport androidx.recyclerview.widget.ItemTouchHelper\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.viewholders.ExpandableViewHolder\nimport eu.kanade.tachiyomi.databinding.DownloadHeaderBinding\n\nclass AnimeDownloadHeaderHolder(view: View, adapter: FlexibleAdapter<*>) : ExpandableViewHolder(\n    view,\n    adapter,\n) {\n\n    private val binding = DownloadHeaderBinding.bind(view)\n\n    @SuppressLint(\"SetTextI18n\")\n    fun bind(item: AnimeDownloadHeaderItem) {\n        setDragHandleView(binding.reorder)\n        binding.title.text = \"${item.name} (${item.size})\"\n    }\n\n    override fun onActionStateChanged(position: Int, actionState: Int) {\n        super.onActionStateChanged(position, actionState)\n        if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {\n            binding.container.isDragged = true\n            mAdapter.collapseAll()\n        }\n    }\n\n    override fun onItemReleased(position: Int) {\n        super.onItemReleased(position)\n        binding.container.isDragged = false\n        mAdapter.expandAll()\n        (mAdapter as AnimeDownloadAdapter).downloadItemListener.onItemReleased(position)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHeaderItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.view.View\nimport androidx.recyclerview.widget.RecyclerView\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem\nimport eu.davidea.flexibleadapter.items.IFlexible\nimport eu.kanade.tachiyomi.R\n\ndata class AnimeDownloadHeaderItem(\n    val id: Long,\n    val name: String,\n    val size: Int,\n) : AbstractExpandableHeaderItem<AnimeDownloadHeaderHolder, AnimeDownloadItem>() {\n\n    override fun getLayoutRes(): Int {\n        return R.layout.download_header\n    }\n\n    override fun createViewHolder(\n        view: View,\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n    ): AnimeDownloadHeaderHolder {\n        return AnimeDownloadHeaderHolder(view, adapter)\n    }\n\n    override fun bindViewHolder(\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n        holder: AnimeDownloadHeaderHolder,\n        position: Int,\n        payloads: List<Any?>?,\n    ) {\n        holder.bind(this)\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (javaClass != other?.javaClass) return false\n\n        other as AnimeDownloadHeaderItem\n\n        if (id != other.id) return false\n        if (name != other.name) return false\n        if (size != other.size) return false\n        if (subItemsCount != other.subItemsCount) return false\n        if (subItems !== other.subItems) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = id.hashCode()\n        result = 31 * result + name.hashCode()\n        result = 31 * result + size\n        result = 31 * result + subItems.hashCode()\n        return result\n    }\n\n    init {\n        isHidden = false\n        isExpanded = true\n        isSelectable = false\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.view.View\nimport androidx.recyclerview.widget.ItemTouchHelper\nimport eu.davidea.viewholders.FlexibleViewHolder\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.databinding.DownloadItemBinding\nimport eu.kanade.tachiyomi.util.view.popupMenu\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\n/**\n * Class used to hold the data of a download.\n * All the elements from the layout file \"download_item\" are available in this class.\n *\n * @param view the inflated view for this holder.\n * @constructor creates a new download holder.\n */\nclass AnimeDownloadHolder(private val view: View, val adapter: AnimeDownloadAdapter) :\n    FlexibleViewHolder(view, adapter) {\n\n    private val binding = DownloadItemBinding.bind(view)\n\n    init {\n        setDragHandleView(binding.reorder)\n        binding.menu.setOnClickListener { it.post { showPopupMenu(it) } }\n    }\n\n    private lateinit var download: AnimeDownload\n\n    /**\n     * Binds this holder with the given category.\n     *\n     * @param download the download to bind.\n     */\n    fun bind(download: AnimeDownload) {\n        this.download = download\n        // Update the chapter name.\n        binding.chapterTitle.text = download.episode.name\n\n        // Update the manga title\n        binding.mangaFullTitle.text = download.anime.title\n\n        // Update the progress bar and the number of downloaded pages\n        val video = download.video\n        if (video == null) {\n            binding.downloadProgress.progress = 0\n            binding.downloadProgress.max = 1\n            binding.downloadProgressText.text = \"\"\n        } else {\n            binding.downloadProgress.max = 100\n            notifyProgress()\n            notifyDownloadedPages()\n        }\n    }\n\n    /**\n     * Updates the progress bar of the download.\n     */\n    fun notifyProgress() {\n        if (binding.downloadProgress.max == 1) {\n            binding.downloadProgress.max = 100\n        }\n        if (download.progress == 0) {\n            binding.downloadProgress.isIndeterminate = true\n        } else {\n            binding.downloadProgress.isIndeterminate = false\n            binding.downloadProgress.setProgressCompat(download.progress, true)\n        }\n    }\n\n    /**\n     * Updates the text field of the number of downloaded pages.\n     */\n    fun notifyDownloadedPages() {\n        binding.downloadProgressText.text = if (download.progress == 0) {\n            view.context.stringResource(MR.strings.update_check_notification_download_in_progress)\n        } else {\n            view.context.stringResource(AYMR.strings.episode_download_progress, download.progress)\n        }\n    }\n\n    override fun onItemReleased(position: Int) {\n        super.onItemReleased(position)\n        adapter.downloadItemListener.onItemReleased(position)\n        binding.container.isDragged = false\n    }\n\n    override fun onActionStateChanged(position: Int, actionState: Int) {\n        super.onActionStateChanged(position, actionState)\n        if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {\n            binding.container.isDragged = true\n        }\n    }\n\n    private fun showPopupMenu(view: View) {\n        view.popupMenu(\n            menuRes = R.menu.download_single,\n            initMenu = {\n                findItem(R.id.move_to_top).isVisible = bindingAdapterPosition > 1\n                findItem(R.id.move_to_bottom).isVisible =\n                    bindingAdapterPosition != adapter.itemCount - 1\n            },\n            onMenuItemClick = {\n                adapter.downloadItemListener.onMenuItemClick(bindingAdapterPosition, this)\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.view.View\nimport androidx.recyclerview.widget.RecyclerView\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.flexibleadapter.items.AbstractSectionableItem\nimport eu.davidea.flexibleadapter.items.IFlexible\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\n\nclass AnimeDownloadItem(\n    val download: AnimeDownload,\n    header: AnimeDownloadHeaderItem,\n) : AbstractSectionableItem<AnimeDownloadHolder, AnimeDownloadHeaderItem>(header) {\n\n    override fun getLayoutRes(): Int {\n        return R.layout.download_item\n    }\n\n    /**\n     * Returns a new view holder for this item.\n     *\n     * @param view The view of this item.\n     * @param adapter The adapter of this item.\n     */\n    override fun createViewHolder(\n        view: View,\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n    ): AnimeDownloadHolder {\n        return AnimeDownloadHolder(view, adapter as AnimeDownloadAdapter)\n    }\n\n    /**\n     * Binds the given view holder with this item.\n     *\n     * @param adapter The adapter of this item.\n     * @param holder The holder to bind.\n     * @param position The position of this item in the adapter.\n     * @param payloads List of partial changes.\n     */\n    override fun bindViewHolder(\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n        holder: AnimeDownloadHolder,\n        position: Int,\n        payloads: MutableList<Any>,\n    ) {\n        holder.bind(download)\n    }\n\n    /**\n     * Returns true if this item is draggable.\n     */\n    override fun isDraggable(): Boolean {\n        return true\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other is AnimeDownloadItem) {\n            return download.episode.id == other.download.episode.id\n        }\n        return false\n    }\n\n    override fun hashCode(): Int {\n        return download.episode.id.toInt()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.view.LayoutInflater\nimport androidx.compose.foundation.layout.Box\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.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.NestedScrollConnection\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.viewinterop.AndroidView\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.updatePadding\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport eu.kanade.tachiyomi.databinding.DownloadListBinding\nimport kotlinx.coroutines.CoroutineScope\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport kotlin.math.roundToInt\n\n@Composable\nfun AnimeDownloadQueueScreen(\n    contentPadding: PaddingValues,\n    scope: CoroutineScope,\n    screenModel: AnimeDownloadQueueScreenModel,\n    downloadList: List<AnimeDownloadHeaderItem>,\n    nestedScrollConnection: NestedScrollConnection,\n) {\n    Scaffold {\n        if (downloadList.isEmpty()) {\n            EmptyScreen(\n                stringRes = MR.strings.information_no_downloads,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n\n        val density = LocalDensity.current\n        val layoutDirection = LocalLayoutDirection.current\n        val left = with(density) { contentPadding.calculateLeftPadding(layoutDirection).toPx().roundToInt() }\n        val top = with(density) { contentPadding.calculateTopPadding().toPx().roundToInt() }\n        val right = with(density) { contentPadding.calculateRightPadding(layoutDirection).toPx().roundToInt() }\n        val bottom = with(density) { contentPadding.calculateBottomPadding().toPx().roundToInt() }\n\n        Box(modifier = Modifier.nestedScroll(nestedScrollConnection)) {\n            AndroidView(\n                modifier = Modifier.fillMaxWidth(),\n                factory = { context ->\n                    screenModel.controllerBinding = DownloadListBinding.inflate(\n                        LayoutInflater.from(context),\n                    )\n                    screenModel.adapter = AnimeDownloadAdapter(screenModel.listener)\n                    screenModel.controllerBinding.root.adapter = screenModel.adapter\n                    screenModel.adapter?.isHandleDragEnabled = true\n                    screenModel.controllerBinding.root.layoutManager = LinearLayoutManager(\n                        context,\n                    )\n\n                    ViewCompat.setNestedScrollingEnabled(screenModel.controllerBinding.root, true)\n\n                    scope.launchUI {\n                        screenModel.getDownloadStatusFlow()\n                            .collect(screenModel::onStatusChange)\n                    }\n                    scope.launchUI {\n                        screenModel.getDownloadProgressFlow()\n                            .collect(screenModel::onUpdateDownloadedPages)\n                    }\n\n                    screenModel.controllerBinding.root\n                },\n                update = {\n                    screenModel.controllerBinding.root\n                        .updatePadding(\n                            left = left,\n                            top = top,\n                            right = right,\n                            bottom = bottom,\n                        )\n\n                    screenModel.adapter?.updateDataSet(downloadList)\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport android.view.MenuItem\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.databinding.DownloadListBinding\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeDownloadQueueScreenModel(\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n) : ScreenModel {\n\n    private val _state = MutableStateFlow(emptyList<AnimeDownloadHeaderItem>())\n    val state = _state.asStateFlow()\n\n    lateinit var controllerBinding: DownloadListBinding\n\n    /**\n     * Adapter containing the active downloads.\n     */\n    var adapter: AnimeDownloadAdapter? = null\n\n    /**\n     * Map of jobs for active downloads.\n     */\n    private val progressJobs = mutableMapOf<AnimeDownload, Job>()\n\n    val listener = object : AnimeDownloadAdapter.DownloadItemListener {\n        /**\n         * Called when an item is released from a drag.\n         *\n         * @param position The position of the released item.\n         */\n        override fun onItemReleased(position: Int) {\n            val adapter = adapter ?: return\n            val downloads = adapter.headerItems.flatMap { header ->\n                adapter.getSectionItems(header).map { item ->\n                    (item as AnimeDownloadItem).download\n                }\n            }\n            reorder(downloads)\n        }\n\n        /**\n         * Called when the menu item of a download is pressed\n         *\n         * @param position The position of the item\n         * @param menuItem The menu Item pressed\n         */\n        override fun onMenuItemClick(position: Int, menuItem: MenuItem) {\n            val item = adapter?.getItem(position) ?: return\n            if (item is AnimeDownloadItem) {\n                when (menuItem.itemId) {\n                    R.id.move_to_top, R.id.move_to_bottom -> {\n                        val headerItems = adapter?.headerItems ?: return\n                        val newAnimeDownloads = mutableListOf<AnimeDownload>()\n                        headerItems.forEach { headerItem ->\n                            headerItem as AnimeDownloadHeaderItem\n                            if (headerItem == item.header) {\n                                headerItem.removeSubItem(item)\n                                if (menuItem.itemId == R.id.move_to_top) {\n                                    headerItem.addSubItem(0, item)\n                                } else {\n                                    headerItem.addSubItem(item)\n                                }\n                            }\n                            newAnimeDownloads.addAll(headerItem.subItems.map { it.download })\n                        }\n                        reorder(newAnimeDownloads)\n                    }\n                    R.id.move_to_top_series, R.id.move_to_bottom_series -> {\n                        val (selectedSeries, otherSeries) = adapter?.currentItems\n                            ?.filterIsInstance<AnimeDownloadItem>()\n                            ?.map(AnimeDownloadItem::download)\n                            ?.partition { item.download.anime.id == it.anime.id }\n                            ?: Pair(emptyList(), emptyList())\n                        if (menuItem.itemId == R.id.move_to_top_series) {\n                            reorder(selectedSeries + otherSeries)\n                        } else {\n                            reorder(otherSeries + selectedSeries)\n                        }\n                    }\n                    R.id.cancel_download -> {\n                        cancel(listOf(item.download))\n                    }\n                    R.id.cancel_series -> {\n                        val allAnimeDownloadsForSeries = adapter?.currentItems\n                            ?.filterIsInstance<AnimeDownloadItem>()\n                            ?.filter { item.download.anime.id == it.download.anime.id }\n                            ?.map(AnimeDownloadItem::download)\n                        if (!allAnimeDownloadsForSeries.isNullOrEmpty()) {\n                            cancel(allAnimeDownloadsForSeries)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    init {\n        screenModelScope.launch {\n            downloadManager.queueState\n                .map { downloads ->\n                    downloads\n                        .groupBy { it.source }\n                        .map { entry ->\n                            AnimeDownloadHeaderItem(entry.key.id, entry.key.name, entry.value.size).apply {\n                                addSubItems(0, entry.value.map { AnimeDownloadItem(it, this) })\n                            }\n                        }\n                }\n                .collect { newList -> _state.update { newList } }\n        }\n    }\n\n    override fun onDispose() {\n        for (job in progressJobs.values) {\n            job.cancel()\n        }\n        progressJobs.clear()\n        adapter = null\n    }\n\n    val isDownloaderRunning = downloadManager.isDownloaderRunning\n        .stateIn(screenModelScope, SharingStarted.WhileSubscribed(5000), false)\n\n    fun getDownloadStatusFlow() = downloadManager.statusFlow()\n    fun getDownloadProgressFlow() = downloadManager.progressFlow()\n\n    fun startDownloads() {\n        downloadManager.startDownloads()\n    }\n\n    fun pauseDownloads() {\n        downloadManager.pauseDownloads()\n    }\n\n    fun clearQueue() {\n        downloadManager.clearQueue()\n    }\n\n    fun reorder(downloads: List<AnimeDownload>) {\n        downloadManager.reorderQueue(downloads)\n    }\n\n    fun cancel(downloads: List<AnimeDownload>) {\n        downloadManager.cancelQueuedDownloads(downloads)\n    }\n\n    fun <R : Comparable<R>> reorderQueue(\n        selector: (AnimeDownloadItem) -> R,\n        reverse: Boolean = false,\n    ) {\n        val adapter = adapter ?: return\n        val newAnimeDownloads = mutableListOf<AnimeDownload>()\n        adapter.headerItems.forEach { headerItem ->\n            headerItem as AnimeDownloadHeaderItem\n            headerItem.subItems = headerItem.subItems.sortedBy(selector).toMutableList().apply {\n                if (reverse) {\n                    reverse()\n                }\n            }\n            newAnimeDownloads.addAll(headerItem.subItems.map { it.download })\n        }\n        reorder(newAnimeDownloads)\n    }\n\n    /**\n     * Called when the status of a download changes.\n     *\n     * @param download the download whose status has changed.\n     */\n    fun onStatusChange(download: AnimeDownload) {\n        when (download.status) {\n            AnimeDownload.State.DOWNLOADING -> {\n                // Initial update of the downloaded pages\n                onUpdateProgress(download)\n                onUpdateDownloadedPages(download)\n            }\n            AnimeDownload.State.DOWNLOADED -> {\n                cancelProgressJob(download)\n                onUpdateProgress(download)\n                onUpdateDownloadedPages(download)\n            }\n            AnimeDownload.State.ERROR -> cancelProgressJob(download)\n            else -> {\n                /* unused */\n            }\n        }\n    }\n\n    /**\n     * Unsubscribes the given download from the progress subscriptions.\n     *\n     * @param download the download to unsubscribe.\n     */\n    private fun cancelProgressJob(download: AnimeDownload) {\n        progressJobs.remove(download)?.cancel()\n    }\n\n    /**\n     * Called when the progress of a download changes.\n     *\n     * @param download the download whose progress has changed.\n     */\n    private fun onUpdateProgress(download: AnimeDownload) {\n        getHolder(download)?.notifyProgress()\n        getHolder(download)?.notifyDownloadedPages()\n    }\n\n    /**\n     * Called when a page of a download is downloaded.\n     *\n     * @param download the download whose page has been downloaded.\n     */\n    fun onUpdateDownloadedPages(download: AnimeDownload) {\n        getHolder(download)?.notifyDownloadedPages()\n        getHolder(download)?.notifyProgress()\n    }\n\n    /**\n     * Returns the holder for the given download.\n     *\n     * @param download the download to find.\n     * @return the holder of the download or null if it's not bound.\n     */\n    private fun getHolder(download: AnimeDownload): AnimeDownloadHolder? {\n        return controllerBinding.root.findViewHolderForItemId(download.episode.id) as? AnimeDownloadHolder\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.input.nestedscroll.NestedScrollConnection\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.TabContent\nimport tachiyomi.i18n.aniyomi.AYMR\n\n@Composable\nfun Screen.animeDownloadTab(\n    nestedScrollConnection: NestedScrollConnection,\n): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val scope = rememberCoroutineScope()\n    val screenModel = rememberScreenModel { AnimeDownloadQueueScreenModel() }\n    val downloadList by screenModel.state.collectAsState()\n    val downloadCount by remember {\n        derivedStateOf { downloadList.sumOf { it.subItems.size } }\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime,\n        searchEnabled = false,\n        content = { contentPadding, _ ->\n            AnimeDownloadQueueScreen(\n                contentPadding = contentPadding,\n                scope = scope,\n                screenModel = screenModel,\n                downloadList = downloadList,\n                nestedScrollConnection = nestedScrollConnection,\n            )\n        },\n        numberTitle = downloadCount,\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadAdapter.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.view.MenuItem\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.flexibleadapter.items.AbstractFlexibleItem\n\n/**\n * Adapter storing a list of downloads.\n *\n * @param downloadItemListener Listener called when an item of the list is released.\n */\nclass MangaDownloadAdapter(val downloadItemListener: DownloadItemListener) : FlexibleAdapter<AbstractFlexibleItem<*>>(\n    null,\n    downloadItemListener,\n    true,\n) {\n\n    override fun shouldMove(fromPosition: Int, toPosition: Int): Boolean {\n        // Don't let sub-items changing group\n        return getHeaderOf(getItem(fromPosition)) == getHeaderOf(getItem(toPosition))\n    }\n\n    interface DownloadItemListener {\n        fun onItemReleased(position: Int)\n        fun onMenuItemClick(position: Int, menuItem: MenuItem)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadHeaderHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.annotation.SuppressLint\nimport android.view.View\nimport androidx.recyclerview.widget.ItemTouchHelper\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.viewholders.ExpandableViewHolder\nimport eu.kanade.tachiyomi.databinding.DownloadHeaderBinding\n\nclass MangaDownloadHeaderHolder(view: View, adapter: FlexibleAdapter<*>) : ExpandableViewHolder(\n    view,\n    adapter,\n) {\n\n    private val binding = DownloadHeaderBinding.bind(view)\n\n    @SuppressLint(\"SetTextI18n\")\n    fun bind(item: MangaDownloadHeaderItem) {\n        setDragHandleView(binding.reorder)\n        binding.title.text = \"${item.name} (${item.size})\"\n    }\n\n    override fun onActionStateChanged(position: Int, actionState: Int) {\n        super.onActionStateChanged(position, actionState)\n        if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {\n            binding.container.isDragged = true\n            mAdapter.collapseAll()\n        }\n    }\n\n    override fun onItemReleased(position: Int) {\n        super.onItemReleased(position)\n        binding.container.isDragged = false\n        mAdapter.expandAll()\n        (mAdapter as MangaDownloadAdapter).downloadItemListener.onItemReleased(position)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadHeaderItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.view.View\nimport androidx.recyclerview.widget.RecyclerView\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem\nimport eu.davidea.flexibleadapter.items.IFlexible\nimport eu.kanade.tachiyomi.R\n\ndata class MangaDownloadHeaderItem(\n    val id: Long,\n    val name: String,\n    val size: Int,\n) : AbstractExpandableHeaderItem<MangaDownloadHeaderHolder, MangaDownloadItem>() {\n\n    override fun getLayoutRes(): Int {\n        return R.layout.download_header\n    }\n\n    override fun createViewHolder(\n        view: View,\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n    ): MangaDownloadHeaderHolder {\n        return MangaDownloadHeaderHolder(view, adapter)\n    }\n\n    override fun bindViewHolder(\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n        holder: MangaDownloadHeaderHolder,\n        position: Int,\n        payloads: List<Any?>?,\n    ) {\n        holder.bind(this)\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (javaClass != other?.javaClass) return false\n\n        other as MangaDownloadHeaderItem\n\n        if (id != other.id) return false\n        if (name != other.name) return false\n        if (size != other.size) return false\n        if (subItemsCount != other.subItemsCount) return false\n        if (subItems !== other.subItems) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = id.hashCode()\n        result = 31 * result + name.hashCode()\n        result = 31 * result + size\n        result = 31 * result + subItems.hashCode()\n        return result\n    }\n\n    init {\n        isHidden = false\n        isExpanded = true\n        isSelectable = false\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.view.View\nimport androidx.recyclerview.widget.ItemTouchHelper\nimport eu.davidea.viewholders.FlexibleViewHolder\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.databinding.DownloadItemBinding\nimport eu.kanade.tachiyomi.util.view.popupMenu\n\n/**\n * Class used to hold the data of a download.\n * All the elements from the layout file \"download_item\" are available in this class.\n *\n * @param view the inflated view for this holder.\n * @constructor creates a new download holder.\n */\nclass MangaDownloadHolder(private val view: View, val adapter: MangaDownloadAdapter) :\n    FlexibleViewHolder(view, adapter) {\n\n    private val binding = DownloadItemBinding.bind(view)\n\n    init {\n        setDragHandleView(binding.reorder)\n        binding.menu.setOnClickListener { it.post { showPopupMenu(it) } }\n    }\n\n    private lateinit var download: MangaDownload\n\n    /**\n     * Binds this holder with the given category.\n     *\n     * @param category The category to bind.\n     */\n    fun bind(download: MangaDownload) {\n        this.download = download\n        // Update the chapter name.\n        binding.chapterTitle.text = download.chapter.name\n\n        // Update the manga title\n        binding.mangaFullTitle.text = download.manga.title\n\n        // Update the progress bar and the number of downloaded pages\n        val pages = download.pages\n        if (pages == null) {\n            binding.downloadProgress.progress = 0\n            binding.downloadProgress.max = 1\n            binding.downloadProgressText.text = \"\"\n        } else {\n            binding.downloadProgress.max = pages.size * 100\n            notifyProgress()\n            notifyDownloadedPages()\n        }\n    }\n\n    /**\n     * Updates the progress bar of the download.\n     */\n    fun notifyProgress() {\n        val pages = download.pages ?: return\n        if (binding.downloadProgress.max == 1) {\n            binding.downloadProgress.max = pages.size * 100\n        }\n        binding.downloadProgress.setProgressCompat(download.totalProgress, true)\n    }\n\n    /**\n     * Updates the text field of the number of downloaded pages.\n     */\n    fun notifyDownloadedPages() {\n        val pages = download.pages ?: return\n        binding.downloadProgressText.text = \"${download.downloadedImages}/${pages.size}\"\n    }\n\n    override fun onItemReleased(position: Int) {\n        super.onItemReleased(position)\n        adapter.downloadItemListener.onItemReleased(position)\n        binding.container.isDragged = false\n    }\n\n    override fun onActionStateChanged(position: Int, actionState: Int) {\n        super.onActionStateChanged(position, actionState)\n        if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) {\n            binding.container.isDragged = true\n        }\n    }\n\n    private fun showPopupMenu(view: View) {\n        view.popupMenu(\n            menuRes = R.menu.download_single,\n            initMenu = {\n                findItem(R.id.move_to_top).isVisible = bindingAdapterPosition > 1\n                findItem(R.id.move_to_bottom).isVisible =\n                    bindingAdapterPosition != adapter.itemCount - 1\n            },\n            onMenuItemClick = {\n                adapter.downloadItemListener.onMenuItemClick(bindingAdapterPosition, this)\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.view.View\nimport androidx.recyclerview.widget.RecyclerView\nimport eu.davidea.flexibleadapter.FlexibleAdapter\nimport eu.davidea.flexibleadapter.items.AbstractSectionableItem\nimport eu.davidea.flexibleadapter.items.IFlexible\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\n\nclass MangaDownloadItem(\n    val download: MangaDownload,\n    header: MangaDownloadHeaderItem,\n) : AbstractSectionableItem<MangaDownloadHolder, MangaDownloadHeaderItem>(header) {\n\n    override fun getLayoutRes(): Int {\n        return R.layout.download_item\n    }\n\n    /**\n     * Returns a new view holder for this item.\n     *\n     * @param view The view of this item.\n     * @param adapter The adapter of this item.\n     */\n    override fun createViewHolder(\n        view: View,\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n    ): MangaDownloadHolder {\n        return MangaDownloadHolder(view, adapter as MangaDownloadAdapter)\n    }\n\n    /**\n     * Binds the given view holder with this item.\n     *\n     * @param adapter The adapter of this item.\n     * @param holder The holder to bind.\n     * @param position The position of this item in the adapter.\n     * @param payloads List of partial changes.\n     */\n    override fun bindViewHolder(\n        adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>,\n        holder: MangaDownloadHolder,\n        position: Int,\n        payloads: MutableList<Any>,\n    ) {\n        holder.bind(download)\n    }\n\n    /**\n     * Returns true if this item is draggable.\n     */\n    override fun isDraggable(): Boolean {\n        return true\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other is MangaDownloadItem) {\n            return download.chapter.id == other.download.chapter.id\n        }\n        return false\n    }\n\n    override fun hashCode(): Int {\n        return download.chapter.id.toInt()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.view.LayoutInflater\nimport androidx.compose.foundation.layout.Box\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.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.NestedScrollConnection\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.viewinterop.AndroidView\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.updatePadding\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport eu.kanade.tachiyomi.databinding.DownloadListBinding\nimport kotlinx.coroutines.CoroutineScope\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport kotlin.math.roundToInt\n\n@Composable\nfun DownloadQueueScreen(\n    contentPadding: PaddingValues,\n    scope: CoroutineScope,\n    screenModel: MangaDownloadQueueScreenModel,\n    downloadList: List<MangaDownloadHeaderItem>,\n    nestedScrollConnection: NestedScrollConnection,\n) {\n    Scaffold {\n        if (downloadList.isEmpty()) {\n            EmptyScreen(\n                stringRes = MR.strings.information_no_downloads,\n                modifier = Modifier.padding(contentPadding),\n            )\n            return@Scaffold\n        }\n\n        val density = LocalDensity.current\n        val layoutDirection = LocalLayoutDirection.current\n        val left = with(density) { contentPadding.calculateLeftPadding(layoutDirection).toPx().roundToInt() }\n        val top = with(density) { contentPadding.calculateTopPadding().toPx().roundToInt() }\n        val right = with(density) { contentPadding.calculateRightPadding(layoutDirection).toPx().roundToInt() }\n        val bottom = with(density) { contentPadding.calculateBottomPadding().toPx().roundToInt() }\n\n        Box(modifier = Modifier.nestedScroll(nestedScrollConnection)) {\n            AndroidView(\n                modifier = Modifier.fillMaxWidth(),\n                factory = { context ->\n                    screenModel.controllerBinding = DownloadListBinding.inflate(\n                        LayoutInflater.from(context),\n                    )\n                    screenModel.adapter = MangaDownloadAdapter(screenModel.listener)\n                    screenModel.controllerBinding.root.adapter = screenModel.adapter\n                    screenModel.adapter?.isHandleDragEnabled = true\n                    screenModel.controllerBinding.root.layoutManager = LinearLayoutManager(\n                        context,\n                    )\n\n                    ViewCompat.setNestedScrollingEnabled(screenModel.controllerBinding.root, true)\n\n                    scope.launchUI {\n                        screenModel.getDownloadStatusFlow()\n                            .collect(screenModel::onStatusChange)\n                    }\n                    scope.launchUI {\n                        screenModel.getDownloadProgressFlow()\n                            .collect(screenModel::onUpdateDownloadedPages)\n                    }\n\n                    screenModel.controllerBinding.root\n                },\n                update = {\n                    screenModel.controllerBinding.root\n                        .updatePadding(\n                            left = left,\n                            top = top,\n                            right = right,\n                            bottom = bottom,\n                        )\n\n                    screenModel.adapter?.updateDataSet(downloadList)\n                },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport android.view.MenuItem\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.databinding.DownloadListBinding\nimport eu.kanade.tachiyomi.source.model.Page\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaDownloadQueueScreenModel(\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n) : ScreenModel {\n\n    private val _state = MutableStateFlow(emptyList<MangaDownloadHeaderItem>())\n    val state = _state.asStateFlow()\n\n    lateinit var controllerBinding: DownloadListBinding\n\n    /**\n     * Adapter containing the active downloads.\n     */\n    var adapter: MangaDownloadAdapter? = null\n\n    /**\n     * Map of jobs for active downloads.\n     */\n    private val progressJobs = mutableMapOf<MangaDownload, Job>()\n\n    val listener = object : MangaDownloadAdapter.DownloadItemListener {\n        /**\n         * Called when an item is released from a drag.\n         *\n         * @param position The position of the released item.\n         */\n        override fun onItemReleased(position: Int) {\n            val adapter = adapter ?: return\n            val downloads = adapter.headerItems.flatMap { header ->\n                adapter.getSectionItems(header).map { item ->\n                    (item as MangaDownloadItem).download\n                }\n            }\n            reorder(downloads)\n        }\n\n        /**\n         * Called when the menu item of a download is pressed\n         *\n         * @param position The position of the item\n         * @param menuItem The menu Item pressed\n         */\n        override fun onMenuItemClick(position: Int, menuItem: MenuItem) {\n            val item = adapter?.getItem(position) ?: return\n            if (item is MangaDownloadItem) {\n                when (menuItem.itemId) {\n                    R.id.move_to_top, R.id.move_to_bottom -> {\n                        val headerItems = adapter?.headerItems ?: return\n                        val newDownloads = mutableListOf<MangaDownload>()\n                        headerItems.forEach { headerItem ->\n                            headerItem as MangaDownloadHeaderItem\n                            if (headerItem == item.header) {\n                                headerItem.removeSubItem(item)\n                                if (menuItem.itemId == R.id.move_to_top) {\n                                    headerItem.addSubItem(0, item)\n                                } else {\n                                    headerItem.addSubItem(item)\n                                }\n                            }\n                            newDownloads.addAll(headerItem.subItems.map { it.download })\n                        }\n                        reorder(newDownloads)\n                    }\n                    R.id.move_to_top_series, R.id.move_to_bottom_series -> {\n                        val (selectedSeries, otherSeries) = adapter?.currentItems\n                            ?.filterIsInstance<MangaDownloadItem>()\n                            ?.map(MangaDownloadItem::download)\n                            ?.partition { item.download.manga.id == it.manga.id }\n                            ?: Pair(emptyList(), emptyList())\n                        if (menuItem.itemId == R.id.move_to_top_series) {\n                            reorder(selectedSeries + otherSeries)\n                        } else {\n                            reorder(otherSeries + selectedSeries)\n                        }\n                    }\n                    R.id.cancel_download -> {\n                        cancel(listOf(item.download))\n                    }\n                    R.id.cancel_series -> {\n                        val allDownloadsForSeries = adapter?.currentItems\n                            ?.filterIsInstance<MangaDownloadItem>()\n                            ?.filter { item.download.manga.id == it.download.manga.id }\n                            ?.map(MangaDownloadItem::download)\n                        if (!allDownloadsForSeries.isNullOrEmpty()) {\n                            cancel(allDownloadsForSeries)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    init {\n        screenModelScope.launch {\n            downloadManager.queueState\n                .map { downloads ->\n                    downloads\n                        .groupBy { it.source }\n                        .map { entry ->\n                            MangaDownloadHeaderItem(entry.key.id, entry.key.name, entry.value.size).apply {\n                                addSubItems(0, entry.value.map { MangaDownloadItem(it, this) })\n                            }\n                        }\n                }\n                .collect { newList -> _state.update { newList } }\n        }\n    }\n\n    override fun onDispose() {\n        for (job in progressJobs.values) {\n            job.cancel()\n        }\n        progressJobs.clear()\n        adapter = null\n    }\n\n    val isDownloaderRunning = downloadManager.isDownloaderRunning\n        .stateIn(screenModelScope, SharingStarted.WhileSubscribed(5000), false)\n\n    fun getDownloadStatusFlow() = downloadManager.statusFlow()\n    fun getDownloadProgressFlow() = downloadManager.progressFlow()\n\n    fun startDownloads() {\n        downloadManager.startDownloads()\n    }\n\n    fun pauseDownloads() {\n        downloadManager.pauseDownloads()\n    }\n\n    fun clearQueue() {\n        downloadManager.clearQueue()\n    }\n\n    fun reorder(downloads: List<MangaDownload>) {\n        downloadManager.reorderQueue(downloads)\n    }\n\n    fun cancel(downloads: List<MangaDownload>) {\n        downloadManager.cancelQueuedDownloads(downloads)\n    }\n\n    fun <R : Comparable<R>> reorderQueue(\n        selector: (MangaDownloadItem) -> R,\n        reverse: Boolean = false,\n    ) {\n        val adapter = adapter ?: return\n        val newDownloads = mutableListOf<MangaDownload>()\n        adapter.headerItems.forEach { headerItem ->\n            headerItem as MangaDownloadHeaderItem\n            headerItem.subItems = headerItem.subItems.sortedBy(selector).toMutableList().apply {\n                if (reverse) {\n                    reverse()\n                }\n            }\n            newDownloads.addAll(headerItem.subItems.map { it.download })\n        }\n        reorder(newDownloads)\n    }\n\n    /**\n     * Called when the status of a download changes.\n     *\n     * @param download the download whose status has changed.\n     */\n    fun onStatusChange(download: MangaDownload) {\n        when (download.status) {\n            MangaDownload.State.DOWNLOADING -> {\n                launchProgressJob(download)\n                // Initial update of the downloaded pages\n                onUpdateDownloadedPages(download)\n            }\n            MangaDownload.State.DOWNLOADED -> {\n                cancelProgressJob(download)\n                onUpdateProgress(download)\n                onUpdateDownloadedPages(download)\n            }\n            MangaDownload.State.ERROR -> cancelProgressJob(download)\n            else -> {\n                /* unused */\n            }\n        }\n    }\n\n    /**\n     * Observe the progress of a download and notify the view.\n     *\n     * @param download the download to observe its progress.\n     */\n    private fun launchProgressJob(download: MangaDownload) {\n        val job = screenModelScope.launch {\n            while (download.pages == null) {\n                delay(50)\n            }\n\n            val progressFlows = download.pages!!.map(Page::progressFlow)\n            combine(progressFlows, Array<Int>::sum)\n                .distinctUntilChanged()\n                .debounce(50)\n                .collectLatest {\n                    onUpdateProgress(download)\n                }\n        }\n\n        // Avoid leaking jobs\n        progressJobs.remove(download)?.cancel()\n\n        progressJobs[download] = job\n    }\n\n    /**\n     * Unsubscribes the given download from the progress subscriptions.\n     *\n     * @param download the download to unsubscribe.\n     */\n    private fun cancelProgressJob(download: MangaDownload) {\n        progressJobs.remove(download)?.cancel()\n    }\n\n    /**\n     * Called when the progress of a download changes.\n     *\n     * @param download the download whose progress has changed.\n     */\n    private fun onUpdateProgress(download: MangaDownload) {\n        getHolder(download)?.notifyProgress()\n    }\n\n    /**\n     * Called when a page of a download is downloaded.\n     *\n     * @param download the download whose page has been downloaded.\n     */\n    fun onUpdateDownloadedPages(download: MangaDownload) {\n        getHolder(download)?.notifyDownloadedPages()\n    }\n\n    /**\n     * Returns the holder for the given download.\n     *\n     * @param download the download to find.\n     * @return the holder of the download or null if it's not bound.\n     */\n    private fun getHolder(download: MangaDownload): MangaDownloadHolder? {\n        return controllerBinding.root.findViewHolderForItemId(download.chapter.id) as? MangaDownloadHolder\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.download.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.input.nestedscroll.NestedScrollConnection\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.TabContent\nimport tachiyomi.i18n.aniyomi.AYMR\n\n@Composable\nfun Screen.mangaDownloadTab(\n    nestedScrollConnection: NestedScrollConnection,\n): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val scope = rememberCoroutineScope()\n    val screenModel = rememberScreenModel { MangaDownloadQueueScreenModel() }\n    val downloadList by screenModel.state.collectAsState()\n    val downloadCount by remember {\n        derivedStateOf { downloadList.sumOf { it.subItems.size } }\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_manga,\n        searchEnabled = false,\n        content = { contentPadding, _ ->\n            DownloadQueueScreen(\n                contentPadding = contentPadding,\n                scope = scope,\n                screenModel = screenModel,\n                downloadList = downloadList,\n                nestedScrollConnection = nestedScrollConnection,\n            )\n        },\n        numberTitle = downloadCount,\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeImageScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.anime\n\nimport android.content.Context\nimport android.net.Uri\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.material3.SnackbarHostState\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.ImageRequest\nimport coil3.size.Size\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.saver.Image\nimport eu.kanade.tachiyomi.data.saver.ImageSaver\nimport eu.kanade.tachiyomi.data.saver.Location\nimport eu.kanade.tachiyomi.util.editBackground\nimport eu.kanade.tachiyomi.util.editCover\nimport eu.kanade.tachiyomi.util.system.getBitmapOrNull\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeImageScreenModel(\n    private val animeId: Long,\n    private val getAnime: GetAnime = Injekt.get(),\n    private val imageSaver: ImageSaver = Injekt.get(),\n    private val coverCache: AnimeCoverCache = Injekt.get(),\n    private val backgroundCache: AnimeBackgroundCache = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n    val pagerState: PagerState = PagerState(pageCount = { 2 }),\n) : StateScreenModel<Anime?>(null) {\n\n    private val isCover: Boolean\n        get() = pagerState.currentPage != 1\n\n    init {\n        screenModelScope.launchIO {\n            getAnime.subscribe(animeId)\n                .collect { newAnime -> mutableState.update { newAnime } }\n        }\n    }\n\n    fun saveImage(context: Context) {\n        val savedStringResource = if (isCover) {\n            MR.strings.cover_saved\n        } else {\n            AYMR.strings.background_saved\n        }\n        val errorSavingStringResource = if (isCover) {\n            MR.strings.error_saving_cover\n        } else {\n            AYMR.strings.error_saving_background\n        }\n        screenModelScope.launch {\n            try {\n                saveImageInternal(context, temp = false)\n                snackbarHostState.showSnackbar(\n                    context.stringResource(savedStringResource),\n                    withDismissAction = true,\n                )\n            } catch (e: Throwable) {\n                logcat(LogPriority.ERROR, e)\n                snackbarHostState.showSnackbar(\n                    context.stringResource(errorSavingStringResource),\n                    withDismissAction = true,\n                )\n            }\n        }\n    }\n\n    fun shareImage(context: Context) {\n        val errorSharingStringResource = if (isCover) {\n            MR.strings.error_sharing_cover\n        } else {\n            AYMR.strings.error_sharing_background\n        }\n        screenModelScope.launch {\n            try {\n                val uri = saveImageInternal(context, temp = true) ?: return@launch\n                withUIContext {\n                    context.startActivity(uri.toShareIntent(context))\n                }\n            } catch (e: Throwable) {\n                logcat(LogPriority.ERROR, e)\n                snackbarHostState.showSnackbar(\n                    context.stringResource(errorSharingStringResource),\n                    withDismissAction = true,\n                )\n            }\n        }\n    }\n\n    /**\n     * Save anime image Bitmap to picture or temporary share directory.\n     *\n     * @param context The context for building and executing the ImageRequest\n     * @return the uri to saved file\n     */\n    private suspend fun saveImageInternal(context: Context, temp: Boolean): Uri? {\n        val anime = state.value ?: return null\n        val req = ImageRequest.Builder(context)\n            .data(anime)\n            .size(Size.ORIGINAL)\n            .build()\n\n        return withIOContext {\n            val result = context.imageLoader.execute(req).image?.asDrawable(context.resources)\n\n            // TODO: Handle animated image\n            val bitmap = result?.getBitmapOrNull() ?: return@withIOContext null\n            imageSaver.save(\n                Image.Cover(\n                    bitmap = bitmap,\n                    name = if (isCover) \"cover\" else \"background\",\n                    location = if (temp) Location.Cache else Location.Pictures(anime.title),\n                ),\n            )\n        }\n    }\n\n    /**\n     * Update image with local file.\n     *\n     * @param context Context.\n     * @param data uri of the image resource.\n     */\n    fun editImage(context: Context, data: Uri) {\n        val anime = state.value ?: return\n        screenModelScope.launchIO {\n            context.contentResolver.openInputStream(data)?.use {\n                try {\n                    if (isCover) {\n                        anime.editCover(Injekt.get(), it, updateAnime, coverCache)\n                    } else {\n                        anime.editBackground(Injekt.get(), it, updateAnime, backgroundCache)\n                    }\n                    notifyImageUpdated(context)\n                } catch (e: Exception) {\n                    notifyFailedImageUpdate(context, e)\n                }\n            }\n        }\n    }\n\n    fun deleteCustomImage(context: Context) {\n        val animeId = state.value?.id ?: return\n        screenModelScope.launchIO {\n            try {\n                if (isCover) {\n                    coverCache.deleteCustomCover(animeId)\n                    updateAnime.awaitUpdateCoverLastModified(animeId)\n                } else {\n                    backgroundCache.deleteCustomBackground(animeId)\n                    updateAnime.awaitUpdateBackgroundLastModified(animeId)\n                }\n                notifyImageUpdated(context)\n            } catch (e: Exception) {\n                notifyFailedImageUpdate(context, e)\n            }\n        }\n    }\n\n    private fun notifyImageUpdated(context: Context) {\n        val updatedStringResource = if (isCover) {\n            MR.strings.cover_updated\n        } else {\n            AYMR.strings.background_updated\n        }\n        screenModelScope.launch {\n            snackbarHostState.showSnackbar(\n                context.stringResource(updatedStringResource),\n                withDismissAction = true,\n            )\n        }\n    }\n\n    private fun notifyFailedImageUpdate(context: Context, e: Throwable) {\n        val updateFailedStringResource = if (isCover) {\n            MR.strings.notification_cover_update_failed\n        } else {\n            AYMR.strings.notification_background_update_failed\n        }\n        screenModelScope.launch {\n            snackbarHostState.showSnackbar(\n                context.stringResource(updateFailedStringResource),\n                withDismissAction = true,\n            )\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.anime\n\nimport android.content.Context\nimport android.content.Intent\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.layout.systemBarsPadding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.core.net.toUri\nimport androidx.lifecycle.compose.LocalLifecycleOwner\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifAnimeSourcesLoaded\nimport eu.kanade.domain.entries.anime.model.hasCustomBackground\nimport eu.kanade.domain.entries.anime.model.hasCustomCover\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.components.NavigatorAdaptiveSheet\nimport eu.kanade.presentation.entries.EditCoverAction\nimport eu.kanade.presentation.entries.anime.AnimeScreen\nimport eu.kanade.presentation.entries.anime.DuplicateAnimeDialog\nimport eu.kanade.presentation.entries.anime.EpisodeOptionsDialogScreen\nimport eu.kanade.presentation.entries.anime.EpisodeSettingsDialog\nimport eu.kanade.presentation.entries.anime.SeasonSettingsDialog\nimport eu.kanade.presentation.entries.anime.components.AnimeImagesDialog\nimport eu.kanade.presentation.entries.components.DeleteItemsDialog\nimport eu.kanade.presentation.entries.components.SetIntervalDialog\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsGesturesScreen.SkipIntroLengthDialog\nimport eu.kanade.presentation.util.AssistContentScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.util.formatEpisodeNumber\nimport eu.kanade.presentation.util.isTabletUi\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.source.anime.isLocalOrStub\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season.MigrateSeasonSelectScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialog\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialogScreenModel\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.anime.track.AnimeTrackInfoDialogHomeScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryTab\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.setting.SettingsScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass AnimeScreen(\n    private val animeId: Long,\n    val fromSource: Boolean = false,\n) : Screen(), AssistContentScreen {\n\n    private var assistUrl: String? = null\n\n    override fun onProvideAssistUrl() = assistUrl\n\n    @Composable\n    override fun Content() {\n        if (!ifAnimeSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val haptic = LocalHapticFeedback.current\n        val scope = rememberCoroutineScope()\n        val lifecycleOwner = LocalLifecycleOwner.current\n        val screenModel =\n            rememberScreenModel { AnimeScreenModel(context, lifecycleOwner.lifecycle, animeId, fromSource) }\n\n        val state by screenModel.state.collectAsStateWithLifecycle()\n\n        if (state is AnimeScreenModel.State.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as AnimeScreenModel.State.Success\n        val isAnimeHttpSource = remember { successState.source is AnimeHttpSource }\n\n        LaunchedEffect(successState.anime, screenModel.source) {\n            if (isAnimeHttpSource) {\n                try {\n                    withIOContext {\n                        assistUrl = getAnimeUrl(screenModel.anime, screenModel.source)\n                    }\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to get anime URL\" }\n                }\n            }\n        }\n\n        AnimeScreen(\n            state = successState,\n            snackbarHostState = screenModel.snackbarHostState,\n            nextUpdate = successState.anime.expectedNextUpdate,\n            isTabletUi = isTabletUi(),\n            episodeSwipeStartAction = screenModel.episodeSwipeStartAction,\n            episodeSwipeEndAction = screenModel.episodeSwipeEndAction,\n            showNextEpisodeAirTime = screenModel.showNextEpisodeAirTime,\n            alwaysUseExternalPlayer = screenModel.alwaysUseExternalPlayer,\n            navigateUp = navigator::pop,\n            onEpisodeClicked = { episode, alt ->\n                scope.launchIO {\n                    val extPlayer = screenModel.alwaysUseExternalPlayer != alt\n                    openEpisode(context, episode, extPlayer)\n                }\n            },\n            onDownloadEpisode = screenModel::runEpisodeDownloadActions.takeIf {\n                !successState.source.isLocalOrStub() && successState.anime.fetchType == FetchType.Episodes\n            },\n            onAddToLibraryClicked = {\n                screenModel.toggleFavorite()\n                haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n            },\n            onWebViewClicked = {\n                openAnimeInWebView(\n                    navigator,\n                    screenModel.anime,\n                    screenModel.source,\n                )\n            }.takeIf { isAnimeHttpSource },\n            onWebViewLongClicked = {\n                copyAnimeUrl(\n                    context,\n                    screenModel.anime,\n                    screenModel.source,\n                )\n            }.takeIf { isAnimeHttpSource },\n            onTrackingClicked = {\n                if (!successState.hasLoggedInTrackers) {\n                    navigator.push(SettingsScreen(SettingsScreen.Destination.Tracking))\n                } else {\n                    screenModel.showTrackDialog()\n                }\n            }.takeIf { successState.anime.fetchType == FetchType.Episodes },\n            onTagSearch = { scope.launch { performGenreSearch(navigator, it, screenModel.source!!) } },\n            onFilterButtonClicked = screenModel::showSettingsDialog,\n            onRefresh = screenModel::fetchAllFromSource,\n            onContinueWatching = {\n                scope.launchIO {\n                    val extPlayer = screenModel.alwaysUseExternalPlayer\n                    continueWatching(context, screenModel.getNextUnseenEpisode(), extPlayer)\n                }\n            },\n            onSearch = { query, global -> scope.launch { performSearch(navigator, query, global) } },\n            onCoverClicked = screenModel::showImagesDialog,\n            onShareClicked = {\n                shareAnime(\n                    context,\n                    screenModel.anime,\n                    screenModel.source,\n                )\n            }.takeIf { isAnimeHttpSource },\n            onDownloadActionClicked = screenModel::runDownloadAction.takeIf {\n                !successState.source.isLocalOrStub() && successState.anime.fetchType == FetchType.Episodes\n            },\n            onEditCategoryClicked = screenModel::showChangeCategoryDialog.takeIf { successState.anime.favorite },\n            onEditFetchIntervalClicked = screenModel::showSetAnimeFetchIntervalDialog.takeIf {\n                successState.anime.favorite\n            },\n            onMigrateClicked = {\n                navigator.push(MigrateAnimeSearchScreen(successState.anime.id))\n            }.takeIf { successState.anime.favorite },\n            changeAnimeSkipIntro = screenModel::showAnimeSkipIntroDialog\n                .takeIf { successState.anime.favorite && successState.anime.fetchType == FetchType.Episodes },\n            onMultiBookmarkClicked = screenModel::bookmarkEpisodes,\n            onMultiFillermarkClicked = screenModel::fillermarkEpisodes,\n            onMultiMarkAsSeenClicked = screenModel::markEpisodesSeen,\n            onMarkPreviousAsSeenClicked = screenModel::markPreviousEpisodeSeen,\n            onMultiDeleteClicked = screenModel::showDeleteEpisodeDialog,\n            onEpisodeSwipe = screenModel::episodeSwipe,\n            onEpisodeSelected = screenModel::toggleSelection,\n            onAllEpisodeSelected = screenModel::toggleAllSelection,\n            onInvertSelection = screenModel::invertSelection,\n            onSeasonClicked = {\n                navigator.push(AnimeScreen(it.id))\n            },\n            onContinueWatchingClicked = {\n                scope.launchIO {\n                    val episode = screenModel.getNextUnseenEpisode(it.anime)\n                    episode?.let { ep ->\n                        openEpisode(context, ep, screenModel.alwaysUseExternalPlayer)\n                    }\n                }\n            },\n        )\n\n        val onDismissRequest = {\n            screenModel.dismissDialog()\n            if (screenModel.autoOpenTrack && screenModel.isFromChangeCategory) {\n                screenModel.isFromChangeCategory = false\n                screenModel.showTrackDialog()\n            }\n        }\n        when (val dialog = successState.dialog) {\n            null -> {}\n            is AnimeScreenModel.Dialog.ChangeCategory -> {\n                ChangeCategoryDialog(\n                    initialSelection = dialog.initialSelection,\n                    onDismissRequest = onDismissRequest,\n                    onEditCategories = { navigator.push(CategoriesTab) },\n                    onConfirm = { include, _ ->\n                        screenModel.moveAnimeToCategoriesAndAddToLibrary(dialog.anime, include)\n                    },\n                )\n            }\n            is AnimeScreenModel.Dialog.DeleteEpisodes -> {\n                DeleteItemsDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = {\n                        screenModel.toggleAllSelection(false)\n                        screenModel.deleteEpisodes(dialog.episodes)\n                    },\n                    isManga = false,\n                )\n            }\n\n            is AnimeScreenModel.Dialog.DuplicateAnime -> {\n                DuplicateAnimeDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = { screenModel.toggleFavorite(onRemoved = {}, checkDuplicate = false) },\n                    onOpenAnime = { navigator.push(AnimeScreen(dialog.duplicate.id)) },\n                    onMigrate = {\n                        screenModel.showMigrateDialog(dialog.duplicate)\n                    },\n                )\n            }\n\n            is AnimeScreenModel.Dialog.Migrate -> {\n                MigrateAnimeDialog(\n                    oldAnime = dialog.oldAnime,\n                    newAnime = dialog.newAnime,\n                    screenModel = MigrateAnimeDialogScreenModel(),\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(AnimeScreen(dialog.oldAnime.id)) },\n                    onClickSeasons = { navigator.push(MigrateSeasonSelectScreen(dialog.oldAnime, dialog.newAnime)) },\n                    onPopScreen = { navigator.replace(AnimeScreen(dialog.newAnime.id)) },\n                )\n            }\n            AnimeScreenModel.Dialog.EpisodeSettingsSheet -> EpisodeSettingsDialog(\n                onDismissRequest = onDismissRequest,\n                anime = successState.anime,\n                onDownloadFilterChanged = screenModel::setDownloadedFilter,\n                onUnseenFilterChanged = screenModel::setUnseenFilter,\n                onBookmarkedFilterChanged = screenModel::setBookmarkedFilter,\n                onFillermarkedFilterChanged = screenModel::setFillermarkedFilter,\n                onSortModeChanged = screenModel::setSorting,\n                onDisplayModeChanged = screenModel::setDisplayMode,\n                onShowPreviewsEnabled = screenModel::showEpisodePreviews,\n                onShowSummariesEnabled = screenModel::showEpisodeSummaries,\n                onSetAsDefault = screenModel::setCurrentSettingsAsDefault,\n            )\n            AnimeScreenModel.Dialog.SeasonSettingsSheet -> SeasonSettingsDialog(\n                onDismissRequest = onDismissRequest,\n                anime = successState.anime,\n                onDownloadFilterChanged = screenModel::setSeasonDownloadedFilter,\n                onUnseenFilterChanged = screenModel::setSeasonUnseenFilter,\n                onStartedFilterChanged = screenModel::setSeasonStartedFilter,\n                onCompletedFilterChanged = screenModel::setSeasonCompletedFilter,\n                onBookmarkedFilterChanged = screenModel::setSeasonBookmarkedFilter,\n                onFillermarkedFilterChanged = screenModel::setSeasonFillermarkedFilter,\n                onSortModeChanged = screenModel::setSeasonSorting,\n                onDisplayGridModeChanged = screenModel::setSeasonDisplayGridMode,\n                onDisplayGridSizeChanged = screenModel::setSeasonDisplayGridSize,\n                onOverlayDownloadedChanged = screenModel::setSeasonDownloadOverlay,\n                onOverlayUnseenChanged = screenModel::setSeasonUnseenOverlay,\n                onOverlayLocalChanged = screenModel::setSeasonLocalOverlay,\n                onOverlayLangChanged = screenModel::setSeasonLangOverlay,\n                onOverlayContinueChanged = screenModel::setSeasonContinueOverlay,\n                onDisplayModeChanged = screenModel::setSeasonDisplayMode,\n                onSetAsDefault = screenModel::setSeasonCurrentSettingsAsDefault,\n            )\n            AnimeScreenModel.Dialog.TrackSheet -> {\n                NavigatorAdaptiveSheet(\n                    screen = AnimeTrackInfoDialogHomeScreen(\n                        animeId = successState.anime.id,\n                        animeTitle = successState.anime.title,\n                        sourceId = successState.source.id,\n                    ),\n                    enableSwipeDismiss = { it.lastItem is AnimeTrackInfoDialogHomeScreen },\n                    onDismissRequest = onDismissRequest,\n                )\n            }\n            AnimeScreenModel.Dialog.FullImages -> {\n                val sm = rememberScreenModel { AnimeImageScreenModel(successState.anime.id) }\n                val anime by sm.state.collectAsState()\n                if (anime != null) {\n                    val getContent = rememberLauncherForActivityResult(\n                        ActivityResultContracts.GetContent(),\n                    ) {\n                        if (it == null) return@rememberLauncherForActivityResult\n                        sm.editImage(context, it)\n                    }\n                    AnimeImagesDialog(\n                        anime = anime!!,\n                        snackbarHostState = sm.snackbarHostState,\n                        pagerState = sm.pagerState,\n                        isCustomCover = remember(anime) { anime!!.hasCustomCover() },\n                        isCustomBackground = remember(anime) { anime!!.hasCustomBackground() },\n                        onShareClick = { sm.shareImage(context) },\n                        onSaveClick = { sm.saveImage(context) },\n                        onEditClick = {\n                            when (it) {\n                                EditCoverAction.EDIT -> getContent.launch(\"image/*\")\n                                EditCoverAction.DELETE -> sm.deleteCustomImage(context)\n                            }\n                        },\n                        onDismissRequest = onDismissRequest,\n                    )\n                } else {\n                    LoadingScreen(Modifier.systemBarsPadding())\n                }\n            }\n            is AnimeScreenModel.Dialog.SetAnimeFetchInterval -> {\n                SetIntervalDialog(\n                    interval = dialog.anime.fetchInterval,\n                    nextUpdate = dialog.anime.expectedNextUpdate,\n                    onDismissRequest = onDismissRequest,\n                    isManga = false,\n                    onValueChanged = { interval: Int -> screenModel.setFetchInterval(dialog.anime, interval) }\n                        .takeIf { screenModel.isUpdateIntervalEnabled },\n                )\n            }\n            AnimeScreenModel.Dialog.ChangeAnimeSkipIntro -> {\n                fun updateSkipIntroLength(newLength: Long) {\n                    scope.launchIO {\n                        screenModel.setAnimeViewerFlags.awaitSetSkipIntroLength(animeId, newLength)\n                    }\n                }\n                SkipIntroLengthDialog(\n                    initialSkipIntroLength = if (!successState.anime.skipIntroDisable &&\n                        successState.anime.skipIntroLength == 0\n                    ) {\n                        screenModel.gesturePreferences.defaultIntroLength().get()\n                    } else {\n                        successState.anime.skipIntroLength\n                    },\n                    onDismissRequest = onDismissRequest,\n                    onValueChanged = {\n                        updateSkipIntroLength(it.toLong())\n                        onDismissRequest()\n                    },\n                )\n            }\n            is AnimeScreenModel.Dialog.ShowQualities -> {\n                EpisodeOptionsDialogScreen.onDismissDialog = onDismissRequest\n                val episodeTitle = if (dialog.anime.displayMode == Anime.EPISODE_DISPLAY_NUMBER) {\n                    stringResource(\n                        AYMR.strings.display_mode_episode,\n                        formatEpisodeNumber(dialog.episode.episodeNumber),\n                    )\n                } else {\n                    dialog.episode.name\n                }\n                NavigatorAdaptiveSheet(\n                    screen = EpisodeOptionsDialogScreen(\n                        useExternalDownloader = screenModel.useExternalDownloader,\n                        episodeTitle = episodeTitle,\n                        episodeId = dialog.episode.id,\n                        animeId = dialog.anime.id,\n                        sourceId = dialog.source.id,\n                    ),\n                    onDismissRequest = onDismissRequest,\n                )\n            }\n        }\n    }\n\n    private suspend fun continueWatching(\n        context: Context,\n        unseenEpisode: Episode?,\n        useExternalPlayer: Boolean,\n    ) {\n        if (unseenEpisode != null) openEpisode(context, unseenEpisode, useExternalPlayer)\n    }\n\n    private suspend fun openEpisode(context: Context, episode: Episode, useExternalPlayer: Boolean) {\n        withIOContext {\n            MainActivity.startPlayerActivity(\n                context,\n                episode.animeId,\n                episode.id,\n                useExternalPlayer,\n            )\n        }\n    }\n\n    private fun getAnimeUrl(anime_: Anime?, source_: AnimeSource?): String? {\n        val anime = anime_ ?: return null\n        val source = source_ as? AnimeHttpSource ?: return null\n\n        return try {\n            source.getAnimeUrl(anime.toSAnime())\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    private fun openAnimeInWebView(navigator: Navigator, anime_: Anime?, source_: AnimeSource?) {\n        getAnimeUrl(anime_, source_)?.let { url ->\n            navigator.push(\n                WebViewScreen(\n                    url = url,\n                    initialTitle = anime_?.title,\n                    sourceId = source_?.id,\n                ),\n            )\n        }\n    }\n\n    private fun shareAnime(context: Context, anime_: Anime?, source_: AnimeSource?) {\n        try {\n            getAnimeUrl(anime_, source_)?.let { url ->\n                val intent = url.toUri().toShareIntent(context, type = \"text/plain\")\n                context.startActivity(\n                    Intent.createChooser(\n                        intent,\n                        context.stringResource(MR.strings.action_share),\n                    ),\n                )\n            }\n        } catch (e: Exception) {\n            context.toast(e.message)\n        }\n    }\n\n    /**\n     * Perform a search using the provided query.\n     *\n     * @param query the search query to the parent controller\n     */\n    private suspend fun performSearch(navigator: Navigator, query: String, global: Boolean) {\n        if (global) {\n            navigator.push(GlobalAnimeSearchScreen(query))\n            return\n        }\n\n        if (navigator.size < 2) {\n            return\n        }\n\n        when (val previousController = navigator.items[navigator.size - 2]) {\n            is HomeScreen -> {\n                navigator.pop()\n                AnimeLibraryTab.search(query)\n            }\n            is BrowseAnimeSourceScreen -> {\n                navigator.pop()\n                previousController.search(query)\n            }\n        }\n    }\n\n    /**\n     * Performs a genre search using the provided genre name.\n     *\n     * @param genreName the search genre to the parent controller\n     */\n    private suspend fun performGenreSearch(\n        navigator: Navigator,\n        genreName: String,\n        source: AnimeSource,\n    ) {\n        if (navigator.size < 2) {\n            return\n        }\n\n        val previousController = navigator.items[navigator.size - 2]\n        if (previousController is BrowseAnimeSourceScreen && source is AnimeHttpSource) {\n            navigator.pop()\n            previousController.searchGenre(genreName)\n        } else {\n            performSearch(navigator, genreName, global = false)\n        }\n    }\n\n    /**\n     * Copy Anime URL to Clipboard\n     */\n    private fun copyAnimeUrl(context: Context, anime_: Anime?, source_: AnimeSource?) {\n        val anime = anime_ ?: return\n        val source = source_ as? AnimeHttpSource ?: return\n        val url = source.getAnimeUrl(anime.toSAnime())\n        context.copyToClipboard(url, url)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.anime\n\nimport android.content.Context\nimport androidx.compose.material3.SnackbarDuration\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.SnackbarResult\nimport androidx.compose.runtime.Immutable\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.flowWithLifecycle\nimport aniyomi.domain.anime.SeasonAnime\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.addOrRemove\nimport eu.kanade.core.util.insertSeparators\nimport eu.kanade.domain.entries.anime.interactor.SetAnimeViewerFlags\nimport eu.kanade.domain.entries.anime.interactor.SyncSeasonsWithSource\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.downloadedFilter\nimport eu.kanade.domain.entries.anime.model.seasonDownloadedFilter\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.domain.items.episode.interactor.SetSeenStatus\nimport eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource\nimport eu.kanade.domain.track.anime.interactor.AddAnimeTracks\nimport eu.kanade.domain.track.anime.interactor.RefreshAnimeTracks\nimport eu.kanade.domain.track.anime.interactor.TrackEpisode\nimport eu.kanade.domain.track.model.AutoTrackState\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction\nimport eu.kanade.presentation.util.formattedMessage\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.UnmeteredSource\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.network.HttpException\nimport eu.kanade.tachiyomi.ui.entries.anime.track.AnimeTrackItem\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.util.AniChartApi\nimport eu.kanade.tachiyomi.util.episode.getNextUnseen\nimport eu.kanade.tachiyomi.util.removeCovers\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.isActive\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport mihon.domain.items.episode.interactor.FilterEpisodesForDownload\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.mapAsCheckboxState\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.SetAnimeCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeWithEpisodesAndSeasons\nimport tachiyomi.domain.entries.anime.interactor.GetDuplicateLibraryAnime\nimport tachiyomi.domain.entries.anime.interactor.SetAnimeEpisodeFlags\nimport tachiyomi.domain.entries.anime.interactor.SetAnimeSeasonFlags\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.NoSeasonsException\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.entries.applyFilter\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.SetAnimeDefaultEpisodeFlags\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.items.episode.model.NoEpisodesException\nimport tachiyomi.domain.items.episode.service.calculateEpisodeGap\nimport tachiyomi.domain.items.episode.service.getEpisodeSort\nimport tachiyomi.domain.items.season.interactor.SetAnimeDefaultSeasonFlags\nimport tachiyomi.domain.items.season.service.getSeasonSortComparator\nimport tachiyomi.domain.items.season.service.seasonSortAlphabetically\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.Calendar\nimport kotlin.math.floor\n\nclass AnimeScreenModel(\n    private val context: Context,\n    private val lifecycle: Lifecycle,\n    private val animeId: Long,\n    private val isFromSource: Boolean,\n    private val downloadPreferences: DownloadPreferences = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val trackPreferences: TrackPreferences = Injekt.get(),\n    internal val playerPreferences: PlayerPreferences = Injekt.get(),\n    internal val gesturePreferences: GesturePreferences = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n    private val trackEpisode: TrackEpisode = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val downloadCache: AnimeDownloadCache = Injekt.get(),\n    private val getAnimeAndEpisodesAndSeasons: GetAnimeWithEpisodesAndSeasons = Injekt.get(),\n    private val getDuplicateLibraryAnime: GetDuplicateLibraryAnime = Injekt.get(),\n    private val setAnimeEpisodeFlags: SetAnimeEpisodeFlags = Injekt.get(),\n    private val setAnimeDefaultEpisodeFlags: SetAnimeDefaultEpisodeFlags = Injekt.get(),\n    private val setAnimeSeasonFlags: SetAnimeSeasonFlags = Injekt.get(),\n    private val setAnimeDefaultSeasonFlags: SetAnimeDefaultSeasonFlags = Injekt.get(),\n    private val setSeenStatus: SetSeenStatus = Injekt.get(),\n    private val updateEpisode: UpdateEpisode = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    private val syncEpisodesWithSource: SyncEpisodesWithSource = Injekt.get(),\n    private val syncSeasonsWithSource: SyncSeasonsWithSource = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val getTracks: GetAnimeTracks = Injekt.get(),\n    private val addTracks: AddAnimeTracks = Injekt.get(),\n    private val setAnimeCategories: SetAnimeCategories = Injekt.get(),\n    private val animeRepository: AnimeRepository = Injekt.get(),\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get(),\n    private val filterEpisodesForDownload: FilterEpisodesForDownload = Injekt.get(),\n    internal val setAnimeViewerFlags: SetAnimeViewerFlags = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n) : StateScreenModel<AnimeScreenModel.State>(State.Loading) {\n\n    private val successState: State.Success?\n        get() = state.value as? State.Success\n\n    val anime: Anime?\n        get() = successState?.anime\n\n    val source: AnimeSource?\n        get() = successState?.source\n\n    private val isFavorited: Boolean\n        get() = anime?.favorite ?: false\n\n    private val processedEpisodes: List<EpisodeList.Item>?\n        get() = successState?.processedEpisodes\n\n    val episodeSwipeStartAction = libraryPreferences.swipeEpisodeEndAction().get()\n    val episodeSwipeEndAction = libraryPreferences.swipeEpisodeStartAction().get()\n    var autoTrackState = trackPreferences.autoUpdateTrackOnMarkRead().get()\n\n    val showNextEpisodeAirTime = trackPreferences.showNextEpisodeAiringTime().get()\n    val alwaysUseExternalPlayer = playerPreferences.alwaysUseExternalPlayer().get()\n    val useExternalDownloader = downloadPreferences.useExternalDownloader().get()\n\n    val isUpdateIntervalEnabled =\n        LibraryPreferences.ENTRY_OUTSIDE_RELEASE_PERIOD in libraryPreferences.autoUpdateItemRestrictions().get()\n\n    private val selectedPositions: Array<Int> = arrayOf(-1, -1) // first and last selected index in list\n    private val selectedEpisodeIds: HashSet<Long> = HashSet()\n\n    internal var isFromChangeCategory: Boolean = false\n\n    internal val autoOpenTrack: Boolean\n        get() = successState?.hasLoggedInTrackers == true && trackPreferences.trackOnAddingToLibrary().get()\n\n    /**\n     * Helper function to update the UI state only if it's currently in success state\n     */\n    private inline fun updateSuccessState(func: (State.Success) -> State.Success) {\n        mutableState.update {\n            when (it) {\n                State.Loading -> it\n                is State.Success -> func(it)\n            }\n        }\n    }\n\n    init {\n        screenModelScope.launchIO {\n            combine(\n                getAnimeAndEpisodesAndSeasons.subscribe(animeId).distinctUntilChanged(),\n                downloadCache.changes,\n                downloadManager.queueState,\n            ) { animeAndEpisodesAndSeasons, _, _ -> animeAndEpisodesAndSeasons }\n                .flowWithLifecycle(lifecycle)\n                .collectLatest { (anime, episodes, seasons) ->\n                    updateSuccessState {\n                        it.copy(\n                            anime = anime,\n                            episodes = episodes.toEpisodeListItems(anime),\n                            seasons = seasons.toAnimeSeasonItems(),\n                        )\n                    }\n                }\n        }\n\n        observeDownloads()\n\n        screenModelScope.launchIO {\n            val anime = getAnimeAndEpisodesAndSeasons.awaitAnime(animeId)\n            val source = sourceManager.getOrStub(anime.source)\n\n            val episodes = if (anime.fetchType == FetchType.Seasons) {\n                emptyList()\n            } else {\n                getAnimeAndEpisodesAndSeasons.awaitEpisodes(animeId)\n                    .toEpisodeListItems(anime)\n            }\n\n            val seasons = if (anime.fetchType == FetchType.Episodes) {\n                emptyList()\n            } else {\n                getAnimeAndEpisodesAndSeasons.awaitSeasons(animeId)\n                    .toAnimeSeasonItems()\n            }\n\n            if (!anime.favorite) {\n                setAnimeDefaultEpisodeFlags.await(anime)\n                setAnimeDefaultSeasonFlags.await(anime)\n            }\n\n            val needRefreshInfo = !anime.initialized\n            val needRefreshEpisode = episodes.isEmpty() && anime.fetchType == FetchType.Episodes\n            val needRefreshSeason = seasons.isEmpty() && anime.fetchType == FetchType.Seasons\n\n            // Show what we have earlier\n            mutableState.update {\n                State.Success(\n                    anime = anime,\n                    source = source,\n                    isFromSource = isFromSource,\n                    episodes = episodes,\n                    seasons = seasons,\n                    isRefreshingData = needRefreshInfo || needRefreshEpisode || needRefreshSeason,\n                    dialog = null,\n                )\n            }\n            // Start observe tracking since it only needs animeId\n            observeTrackers()\n\n            // Fetch info-episodes when needed\n            if (screenModelScope.isActive) {\n                val fetchFromSourceTasks = listOf(\n                    async { if (needRefreshInfo) fetchAnimeFromSource() },\n                    async { if (needRefreshEpisode || needRefreshSeason) fetchEpisodesAndSeasonsFromSource() },\n                )\n                fetchFromSourceTasks.awaitAll()\n            }\n\n            // Initial loading finished\n            updateSuccessState { it.copy(isRefreshingData = false) }\n        }\n    }\n\n    fun fetchAllFromSource(manualFetch: Boolean = true) {\n        screenModelScope.launch {\n            updateSuccessState { it.copy(isRefreshingData = true) }\n            val fetchFromSourceTasks = listOf(\n                async { fetchAnimeFromSource(manualFetch) },\n                async { fetchEpisodesAndSeasonsFromSource(manualFetch) },\n            )\n            fetchFromSourceTasks.awaitAll()\n            updateSuccessState { it.copy(isRefreshingData = false) }\n            successState?.let { updateAiringTime(it.anime, it.trackItems, manualFetch) }\n        }\n    }\n\n    // Anime info - start\n\n    /**\n     * Fetch anime information from source.\n     */\n    private suspend fun fetchAnimeFromSource(manualFetch: Boolean = false) {\n        val state = successState ?: return\n        try {\n            withIOContext {\n                val networkAnime = state.source.getAnimeDetails(state.anime.toSAnime())\n                updateAnime.awaitUpdateFromSource(state.anime, networkAnime, manualFetch)\n            }\n        } catch (e: Throwable) {\n            // Ignore early hints \"errors\" that aren't handled by OkHttp\n            if (e is HttpException && e.code == 103) return\n\n            logcat(LogPriority.ERROR, e)\n            screenModelScope.launch {\n                snackbarHostState.showSnackbar(message = with(context) { e.formattedMessage })\n            }\n        }\n    }\n\n    fun toggleFavorite() {\n        toggleFavorite(\n            onRemoved = {\n                screenModelScope.launch {\n                    if (!hasDownloads()) return@launch\n                    val result = snackbarHostState.showSnackbar(\n                        message = context.stringResource(AYMR.strings.delete_downloads_for_anime),\n                        actionLabel = context.stringResource(MR.strings.action_delete),\n                        withDismissAction = true,\n                    )\n                    if (result == SnackbarResult.ActionPerformed) {\n                        deleteDownloads()\n                    }\n                }\n            },\n        )\n    }\n\n    /**\n     * Update favorite status of anime, (removes / adds) anime (to / from) library.\n     */\n    fun toggleFavorite(\n        onRemoved: () -> Unit,\n        checkDuplicate: Boolean = true,\n    ) {\n        val state = successState ?: return\n        screenModelScope.launchIO {\n            val anime = state.anime\n\n            if (isFavorited) {\n                // Remove from library\n                if (updateAnime.awaitUpdateFavorite(anime.id, false)) {\n                    // Remove covers and update last modified in db\n                    if (anime.removeCovers() != anime) {\n                        updateAnime.awaitUpdateCoverLastModified(anime.id)\n                    }\n                    withUIContext { onRemoved() }\n                }\n            } else {\n                // Add to library\n                // First, check if duplicate exists if callback is provided\n                if (checkDuplicate) {\n                    val duplicate = getDuplicateLibraryAnime.await(anime).getOrNull(0)\n                    if (duplicate != null) {\n                        updateSuccessState {\n                            it.copy(\n                                dialog = Dialog.DuplicateAnime(anime, duplicate),\n                            )\n                        }\n                        return@launchIO\n                    }\n                }\n\n                // Now check if user previously set categories, when available\n                val categories = getCategories()\n                val defaultCategoryId = libraryPreferences.defaultAnimeCategory().get().toLong()\n                val defaultCategory = categories.find { it.id == defaultCategoryId }\n                when {\n                    // Default category set\n                    defaultCategory != null -> {\n                        val result = updateAnime.awaitUpdateFavorite(anime.id, true)\n                        if (!result) return@launchIO\n                        moveAnimeToCategory(defaultCategory)\n                    }\n\n                    // Automatic 'Default' or no categories\n                    defaultCategoryId == 0L || categories.isEmpty() -> {\n                        val result = updateAnime.awaitUpdateFavorite(anime.id, true)\n                        if (!result) return@launchIO\n                        moveAnimeToCategory(null)\n                    }\n\n                    // Choose a category\n                    else -> {\n                        isFromChangeCategory = true\n                        showChangeCategoryDialog()\n                    }\n                }\n\n                // Finally match with enhanced tracking when available\n                addTracks.bindEnhancedTrackers(anime, state.source)\n                if (autoOpenTrack) {\n                    showTrackDialog()\n                }\n            }\n        }\n    }\n\n    fun showChangeCategoryDialog() {\n        val anime = successState?.anime ?: return\n        screenModelScope.launch {\n            val categories = getCategories()\n            val selection = getAnimeCategoryIds(anime)\n            updateSuccessState { successState ->\n                successState.copy(\n                    dialog = Dialog.ChangeCategory(\n                        anime = anime,\n                        initialSelection = categories.mapAsCheckboxState { it.id in selection }.toImmutableList(),\n                    ),\n                )\n            }\n        }\n    }\n\n    fun showSetAnimeFetchIntervalDialog() {\n        val anime = successState?.anime ?: return\n        updateSuccessState {\n            it.copy(dialog = Dialog.SetAnimeFetchInterval(anime))\n        }\n    }\n\n    fun setFetchInterval(anime: Anime, interval: Int) {\n        screenModelScope.launchIO {\n            if (\n                updateAnime.awaitUpdateFetchInterval(\n                    // Custom intervals are negative\n                    anime.copy(fetchInterval = -interval),\n                )\n            ) {\n                val updatedAnime = animeRepository.getAnimeById(anime.id)\n                updateSuccessState { it.copy(anime = updatedAnime) }\n            }\n        }\n    }\n\n    /**\n     * Returns true if the anime has any downloads.\n     */\n    private fun hasDownloads(): Boolean {\n        val anime = successState?.anime ?: return false\n        return downloadManager.getDownloadCount(anime) > 0\n    }\n\n    /**\n     * Deletes all the downloads for the anime.\n     */\n    private fun deleteDownloads() {\n        val state = successState ?: return\n        downloadManager.deleteAnime(state.anime, state.source)\n    }\n\n    /**\n     * Get user categories.\n     *\n     * @return List of categories, not including the default category\n     */\n    suspend fun getCategories(): List<Category> {\n        return getCategories.await().filterNot { it.isSystemCategory }\n    }\n\n    /**\n     * Gets the category id's the anime is in, if the anime is not in a category, returns the default id.\n     *\n     * @param anime the anime to get categories from.\n     * @return Array of category ids the anime is in, if none returns default id\n     */\n    private suspend fun getAnimeCategoryIds(anime: Anime): List<Long> {\n        return getCategories.await(anime.id)\n            .map { it.id }\n    }\n\n    fun moveAnimeToCategoriesAndAddToLibrary(anime: Anime, categories: List<Long>) {\n        moveAnimeToCategory(categories)\n        if (anime.favorite) return\n\n        screenModelScope.launchIO {\n            updateAnime.awaitUpdateFavorite(anime.id, true)\n        }\n    }\n\n    /**\n     * Move the given anime to categories.\n     *\n     * @param categories the selected categories.\n     */\n    private fun moveAnimeToCategories(categories: List<Category>) {\n        val categoryIds = categories.map { it.id }\n        moveAnimeToCategory(categoryIds)\n    }\n\n    private fun moveAnimeToCategory(categoryIds: List<Long>) {\n        screenModelScope.launchIO {\n            setAnimeCategories.await(animeId, categoryIds)\n        }\n    }\n\n    /**\n     * Move the given anime to the category.\n     *\n     * @param category the selected category, or null for default category.\n     */\n    private fun moveAnimeToCategory(category: Category?) {\n        moveAnimeToCategories(listOfNotNull(category))\n    }\n\n    // Anime info - end\n\n    // Episodes list - start\n\n    private fun observeDownloads() {\n        screenModelScope.launchIO {\n            downloadManager.statusFlow()\n                .filter { it.anime.id == successState?.anime?.id }\n                .catch { error -> logcat(LogPriority.ERROR, error) }\n                .flowWithLifecycle(lifecycle)\n                .collect {\n                    withUIContext {\n                        updateDownloadState(it)\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            downloadManager.progressFlow()\n                .filter { it.anime.id == successState?.anime?.id }\n                .catch { error -> logcat(LogPriority.ERROR, error) }\n                .flowWithLifecycle(lifecycle)\n                .collect {\n                    withUIContext {\n                        updateDownloadState(it)\n                    }\n                }\n        }\n    }\n\n    private fun updateDownloadState(download: AnimeDownload) {\n        updateSuccessState { successState ->\n            val modifiedIndex = successState.episodes.indexOfFirst { it.id == download.episode.id }\n            if (modifiedIndex < 0) return@updateSuccessState successState\n\n            val newEpisodes = successState.episodes.toMutableList().apply {\n                val item = removeAt(modifiedIndex)\n                    .copy(downloadState = download.status, downloadProgress = download.progress)\n                add(modifiedIndex, item)\n            }\n            successState.copy(episodes = newEpisodes)\n        }\n    }\n\n    private fun List<Episode>.toEpisodeListItems(anime: Anime): List<EpisodeList.Item> {\n        val isLocal = anime.isLocal()\n        return map { episode ->\n            val activeDownload = if (isLocal) {\n                null\n            } else {\n                downloadManager.getQueuedDownloadOrNull(episode.id)\n            }\n            val downloaded = if (isLocal) {\n                true\n            } else {\n                downloadManager.isEpisodeDownloaded(\n                    episode.name,\n                    episode.scanlator,\n                    anime.title,\n                    anime.source,\n                )\n            }\n            val downloadState = when {\n                activeDownload != null -> activeDownload.status\n                downloaded -> AnimeDownload.State.DOWNLOADED\n                else -> AnimeDownload.State.NOT_DOWNLOADED\n            }\n\n            EpisodeList.Item(\n                episode = episode,\n                downloadState = downloadState,\n                downloadProgress = activeDownload?.progress ?: 0,\n                selected = episode.id in selectedEpisodeIds,\n            )\n        }\n    }\n\n    private fun List<SeasonAnime>.toAnimeSeasonItems(): List<AnimeSeasonItem> {\n        return map { seasonAnime ->\n            AnimeSeasonItem(\n                seasonAnime = seasonAnime,\n                downloadCount = downloadManager.getDownloadCount(seasonAnime.anime).toLong(),\n                unseenCount = seasonAnime.unseenCount,\n                isLocal = seasonAnime.anime.isLocal(),\n                sourceLanguage = sourceManager.getOrStub(seasonAnime.anime.source).lang,\n                showContinueOverlay = false,\n            )\n        }\n    }\n\n    private suspend fun fetchEpisodesFromSource(manualFetch: Boolean = false) {\n        val state = successState ?: return\n        try {\n            withIOContext {\n                updateEpisodesFromSource(state.anime, state.source, manualFetch)\n            }\n        } catch (e: Throwable) {\n            val message = if (e is NoEpisodesException) {\n                context.stringResource(AYMR.strings.no_episodes_error)\n            } else {\n                logcat(LogPriority.ERROR, e)\n                with(context) { e.formattedMessage }\n            }\n\n            screenModelScope.launch {\n                snackbarHostState.showSnackbar(message = message)\n            }\n            val newAnime = animeRepository.getAnimeById(animeId)\n            updateSuccessState { it.copy(anime = newAnime, isRefreshingData = false) }\n        }\n    }\n\n    private suspend fun updateEpisodesFromSource(\n        anime: Anime,\n        source: AnimeSource,\n        manualFetch: Boolean = false,\n    ) {\n        val episodes = source.getEpisodeList(anime.toSAnime())\n\n        val newEpisodes = syncEpisodesWithSource.await(\n            episodes,\n            anime,\n            source,\n            manualFetch,\n        )\n\n        if (manualFetch) {\n            downloadNewEpisodes(newEpisodes)\n        }\n    }\n\n    private suspend fun fetchSeasonsFromSource(manualFetch: Boolean = false) {\n        val state = successState ?: return\n        try {\n            withIOContext {\n                val seasons = state.source.getSeasonList(state.anime.toSAnime())\n\n                val newSeasons = syncSeasonsWithSource.await(\n                    seasons,\n                    state.anime,\n                    state.source,\n                )\n\n                if (libraryPreferences.updateSeasonOnRefresh().get()) {\n                    fetchEpisodesFromSeasons(newSeasons, manualFetch)\n                }\n            }\n        } catch (e: Throwable) {\n            val message = if (e is NoSeasonsException) {\n                context.stringResource(AYMR.strings.no_seasons_error)\n            } else {\n                logcat(LogPriority.ERROR, e)\n                with(context) { e.formattedMessage }\n            }\n\n            screenModelScope.launch {\n                snackbarHostState.showSnackbar(message = message)\n            }\n            val newAnime = animeRepository.getAnimeById(animeId)\n            updateSuccessState { it.copy(anime = newAnime, isRefreshingData = false) }\n        }\n    }\n\n    /**\n     * Requests an updated list of episodes and seasons from the source.\n     */\n    private suspend fun fetchEpisodesAndSeasonsFromSource(manualFetch: Boolean = false) {\n        val state = successState ?: return\n\n        when (state.anime.fetchType) {\n            FetchType.Seasons -> fetchSeasonsFromSource(manualFetch)\n            FetchType.Episodes -> fetchEpisodesFromSource(manualFetch)\n        }\n    }\n\n    /**\n     * Fetch episodes from all seasons of an anime.\n     */\n    private suspend fun CoroutineScope.fetchEpisodesFromSeasons(seasons: List<Anime>, manualFetch: Boolean) {\n        val state = successState ?: return\n\n        val fetch: suspend (Anime) -> Unit = { s ->\n            // Only fetch seasons with `Episodes` fetch type and only for non completed, unless they\n            // haven't been fetched at all.\n            if (s.fetchType === FetchType.Episodes && (s.lastUpdate == 0L || s.status.toInt() != SAnime.COMPLETED)) {\n                try {\n                    updateEpisodesFromSource(s, state.source, manualFetch)\n                } catch (e: Throwable) {\n                    logcat(LogPriority.ERROR, e)\n                }\n            }\n        }\n\n        if (state.source is UnmeteredSource) {\n            seasons.map { s ->\n                async(Dispatchers.IO) {\n                    fetch(s)\n                }\n            }.awaitAll()\n        } else {\n            seasons.forEach { s ->\n                ensureActive()\n                fetch(s)\n            }\n        }\n    }\n\n    /**\n     * @throws IllegalStateException if the swipe action is [LibraryPreferences.EpisodeSwipeAction.Disabled]\n     */\n    fun episodeSwipe(episodeItem: EpisodeList.Item, swipeAction: LibraryPreferences.EpisodeSwipeAction) {\n        screenModelScope.launch {\n            executeEpisodeSwipeAction(episodeItem, swipeAction)\n        }\n    }\n\n    /**\n     * @throws IllegalStateException if the swipe action is [LibraryPreferences.EpisodeSwipeAction.Disabled]\n     */\n    private fun executeEpisodeSwipeAction(\n        episodeItem: EpisodeList.Item,\n        swipeAction: LibraryPreferences.EpisodeSwipeAction,\n    ) {\n        val episode = episodeItem.episode\n        when (swipeAction) {\n            LibraryPreferences.EpisodeSwipeAction.ToggleSeen -> {\n                markEpisodesSeen(listOf(episode), !episode.seen)\n            }\n            LibraryPreferences.EpisodeSwipeAction.ToggleBookmark -> {\n                bookmarkEpisodes(listOf(episode), !episode.bookmark)\n            }\n            LibraryPreferences.EpisodeSwipeAction.ToggleFillermark -> {\n                fillermarkEpisodes(listOf(episode), !episode.fillermark)\n            }\n            LibraryPreferences.EpisodeSwipeAction.Download -> {\n                val downloadAction: EpisodeDownloadAction = when (episodeItem.downloadState) {\n                    AnimeDownload.State.ERROR,\n                    AnimeDownload.State.NOT_DOWNLOADED,\n                    -> EpisodeDownloadAction.START_NOW\n                    AnimeDownload.State.QUEUE,\n                    AnimeDownload.State.DOWNLOADING,\n                    -> EpisodeDownloadAction.CANCEL\n                    AnimeDownload.State.DOWNLOADED -> EpisodeDownloadAction.DELETE\n                }\n                runEpisodeDownloadActions(\n                    items = listOf(episodeItem),\n                    action = downloadAction,\n                )\n            }\n            LibraryPreferences.EpisodeSwipeAction.Disabled -> throw IllegalStateException()\n        }\n    }\n\n    suspend fun getNextUnseenEpisode(anime: Anime): Episode? {\n        return getEpisodesByAnimeId.await(anime.id).getNextUnseen(anime, downloadManager)\n    }\n\n    /**\n     * Returns the next unseen episode or null if everything is seen.\n     */\n    fun getNextUnseenEpisode(): Episode? {\n        val successState = successState ?: return null\n        return successState.episodes.getNextUnseen(successState.anime)\n    }\n\n    private fun getUnseenEpisodes(): List<Episode> {\n        return successState?.processedEpisodes\n            ?.filter { (episode, dlStatus) -> !episode.seen && dlStatus == AnimeDownload.State.NOT_DOWNLOADED }\n            ?.map { it.episode }\n            ?.toList()\n            ?: emptyList()\n    }\n\n    private fun getUnseenEpisodesSorted(): List<Episode> {\n        val anime = successState?.anime ?: return emptyList()\n        val episodes = getUnseenEpisodes().sortedWith(getEpisodeSort(anime))\n        return if (anime.sortDescending()) episodes.reversed() else episodes\n    }\n\n    private fun startDownload(\n        episodes: List<Episode>,\n        startNow: Boolean,\n        video: Video? = null,\n    ) {\n        val successState = successState ?: return\n\n        screenModelScope.launchNonCancellable {\n            if (startNow) {\n                val episodeId = episodes.singleOrNull()?.id ?: return@launchNonCancellable\n                downloadManager.startDownloadNow(episodeId)\n            } else {\n                downloadEpisodes(episodes, false, video)\n            }\n            if (!isFavorited && !successState.hasPromptedToAddBefore) {\n                updateSuccessState { state ->\n                    state.copy(hasPromptedToAddBefore = true)\n                }\n                val result = snackbarHostState.showSnackbar(\n                    message = context.stringResource(AYMR.strings.snack_add_to_anime_library),\n                    actionLabel = context.stringResource(MR.strings.action_add),\n                    withDismissAction = true,\n                )\n                if (result == SnackbarResult.ActionPerformed && !isFavorited) {\n                    toggleFavorite()\n                }\n            }\n        }\n    }\n\n    fun runEpisodeDownloadActions(\n        items: List<EpisodeList.Item>,\n        action: EpisodeDownloadAction,\n    ) {\n        when (action) {\n            EpisodeDownloadAction.START -> {\n                startDownload(items.map { it.episode }, false)\n                if (items.any { it.downloadState == AnimeDownload.State.ERROR }) {\n                    downloadManager.startDownloads()\n                }\n            }\n            EpisodeDownloadAction.START_NOW -> {\n                val episode = items.singleOrNull()?.episode ?: return\n                startDownload(listOf(episode), true)\n            }\n            EpisodeDownloadAction.CANCEL -> {\n                val episodeId = items.singleOrNull()?.id ?: return\n                cancelDownload(episodeId)\n            }\n            EpisodeDownloadAction.DELETE -> {\n                deleteEpisodes(items.map { it.episode })\n            }\n            EpisodeDownloadAction.SHOW_QUALITIES -> {\n                val episode = items.singleOrNull()?.episode ?: return\n                showQualitiesDialog(episode)\n            }\n        }\n    }\n\n    fun runDownloadAction(action: DownloadAction) {\n        val episodesToDownload = when (action) {\n            DownloadAction.NEXT_1_ITEM -> getUnseenEpisodesSorted().take(1)\n            DownloadAction.NEXT_5_ITEMS -> getUnseenEpisodesSorted().take(5)\n            DownloadAction.NEXT_10_ITEMS -> getUnseenEpisodesSorted().take(10)\n            DownloadAction.NEXT_25_ITEMS -> getUnseenEpisodesSorted().take(25)\n\n            DownloadAction.UNVIEWED_ITEMS -> getUnseenEpisodes()\n        }\n        if (episodesToDownload.isNotEmpty()) {\n            startDownload(episodesToDownload, false)\n        }\n    }\n\n    private fun cancelDownload(episodeId: Long) {\n        val activeDownload = downloadManager.getQueuedDownloadOrNull(episodeId) ?: return\n        downloadManager.cancelQueuedDownloads(listOf(activeDownload))\n        updateDownloadState(activeDownload.apply { status = AnimeDownload.State.NOT_DOWNLOADED })\n    }\n\n    fun markPreviousEpisodeSeen(pointer: Episode) {\n        val anime = successState?.anime ?: return\n        val episodes = processedEpisodes.orEmpty().map { it.episode }.toList()\n        val prevEpisodes = if (anime.sortDescending()) episodes.asReversed() else episodes\n        val pointerPos = prevEpisodes.indexOf(pointer)\n        if (pointerPos != -1) markEpisodesSeen(prevEpisodes.take(pointerPos), true)\n    }\n\n    /**\n     * Mark the selected episode list as seen/unseen.\n     * @param episodes the list of selected episodes.\n     * @param seen whether to mark episodes as seen or unseen.\n     */\n    fun markEpisodesSeen(episodes: List<Episode>, seen: Boolean) {\n        toggleAllSelection(false)\n        if (episodes.isEmpty()) return\n        screenModelScope.launchIO {\n            setSeenStatus.await(\n                seen = seen,\n                episodes = episodes.toTypedArray(),\n            )\n\n            if (!seen || successState?.hasLoggedInTrackers == false || autoTrackState == AutoTrackState.NEVER) {\n                return@launchIO\n            }\n\n            refreshTrackers()\n\n            val tracks = getTracks.await(animeId)\n            val maxEpisodeNumber = episodes.maxOf { it.episodeNumber }\n            val shouldPromptTrackingUpdate = tracks.any { track -> maxEpisodeNumber > track.lastEpisodeSeen }\n\n            if (!shouldPromptTrackingUpdate) return@launchIO\n\n            if (autoTrackState == AutoTrackState.ALWAYS) {\n                trackEpisode.await(context, animeId, maxEpisodeNumber)\n                withUIContext {\n                    context.toast(\n                        context.stringResource(AYMR.strings.trackers_updated_summary_anime, maxEpisodeNumber.toInt()),\n                    )\n                }\n                return@launchIO\n            }\n\n            val result = snackbarHostState.showSnackbar(\n                message = context.stringResource(AYMR.strings.confirm_tracker_update_anime, maxEpisodeNumber.toInt()),\n                actionLabel = context.stringResource(MR.strings.action_ok),\n                duration = SnackbarDuration.Short,\n                withDismissAction = true,\n            )\n\n            if (result == SnackbarResult.ActionPerformed) {\n                trackEpisode.await(context, animeId, maxEpisodeNumber)\n            }\n        }\n    }\n\n    private suspend fun refreshTrackers(\n        refreshTracks: RefreshAnimeTracks = Injekt.get(),\n    ) {\n        refreshTracks.await(animeId)\n            .filter { it.first != null }\n            .forEach { (track, e) ->\n                logcat(LogPriority.ERROR, e) {\n                    \"Failed to refresh track data animeId=$animeId for service ${track!!.id}\"\n                }\n                withUIContext {\n                    context.toast(\n                        context.stringResource(\n                            MR.strings.track_error,\n                            track!!.name,\n                            e.message ?: \"\",\n                        ),\n                    )\n                }\n            }\n    }\n\n    /**\n     * Downloads the given list of episodes with the manager.\n     * @param episodes the list of episodes to download.\n     */\n    private fun downloadEpisodes(\n        episodes: List<Episode>,\n        alt: Boolean = false,\n        video: Video? = null,\n    ) {\n        val anime = successState?.anime ?: return\n        downloadManager.downloadEpisodes(anime, episodes, true, alt, video)\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Bookmarks the given list of episodes.\n     * @param episodes the list of episodes to bookmark.\n     */\n    fun bookmarkEpisodes(episodes: List<Episode>, bookmarked: Boolean) {\n        screenModelScope.launchIO {\n            episodes\n                .filterNot { it.bookmark == bookmarked }\n                .map { EpisodeUpdate(id = it.id, bookmark = bookmarked) }\n                .let { updateEpisode.awaitAll(it) }\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Fillermarks the given list of episodes.\n     * @param episodes the list of episodes to fillermark.\n     */\n    fun fillermarkEpisodes(episodes: List<Episode>, fillermarked: Boolean) {\n        screenModelScope.launchIO {\n            episodes\n                .filterNot { it.fillermark == fillermarked }\n                .map { EpisodeUpdate(id = it.id, fillermark = fillermarked) }\n                .let { updateEpisode.awaitAll(it) }\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Deletes the given list of episode.\n     *\n     * @param episodes the list of episodes to delete.\n     */\n    fun deleteEpisodes(episodes: List<Episode>) {\n        screenModelScope.launchNonCancellable {\n            try {\n                successState?.let { state ->\n                    downloadManager.deleteEpisodes(\n                        episodes,\n                        state.anime,\n                        state.source,\n                    )\n                }\n            } catch (e: Throwable) {\n                logcat(LogPriority.ERROR, e)\n            }\n        }\n    }\n\n    private fun downloadNewEpisodes(episodes: List<Episode>) {\n        screenModelScope.launchNonCancellable {\n            val anime = successState?.anime ?: return@launchNonCancellable\n            val episodesToDownload = filterEpisodesForDownload.await(anime, episodes)\n\n            if (episodesToDownload.isNotEmpty()) {\n                downloadEpisodes(episodesToDownload)\n            }\n        }\n    }\n\n    /**\n     * Sets the seen filter and requests an UI update.\n     * @param state whether to display only unseen episodes or all episodes.\n     */\n    fun setUnseenFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.EPISODE_SHOW_UNSEEN\n            TriState.ENABLED_NOT -> Anime.EPISODE_SHOW_SEEN\n        }\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitSetUnseenFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the download filter and requests an UI update.\n     * @param state whether to display only downloaded episodes or all episodes.\n     */\n    fun setDownloadedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.EPISODE_SHOW_DOWNLOADED\n            TriState.ENABLED_NOT -> Anime.EPISODE_SHOW_NOT_DOWNLOADED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitSetDownloadedFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the bookmark filter and requests an UI update.\n     * @param state whether to display only bookmarked episodes or all episodes.\n     */\n    fun setBookmarkedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.EPISODE_SHOW_BOOKMARKED\n            TriState.ENABLED_NOT -> Anime.EPISODE_SHOW_NOT_BOOKMARKED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitSetBookmarkFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the fillermark filter and requests an UI update.\n     * @param state whether to display only fillermarked episodes or all episodes.\n     */\n    fun setFillermarkedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.EPISODE_SHOW_FILLERMARKED\n            TriState.ENABLED_NOT -> Anime.EPISODE_SHOW_NOT_FILLERMARKED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitSetFillermarkFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the active display mode.\n     * @param mode the mode to set.\n     */\n    fun setDisplayMode(mode: Long) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitSetDisplayMode(anime, mode)\n        }\n    }\n\n    /**\n     * Sets the sorting method and requests an UI update.\n     * @param sort the sorting mode.\n     */\n    fun setSorting(sort: Long) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitSetSortingModeOrFlipOrder(anime, sort)\n        }\n    }\n\n    /**\n     * Sets whether previews are to be shown or not.\n     * @param flag to show previews.\n     */\n    fun showEpisodePreviews(flag: Long) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitShowEpisodePreviews(anime, flag)\n        }\n    }\n\n    /**\n     * Sets whether summaries are to be shown or not.\n     * @param flag to show summaries.\n     */\n    fun showEpisodeSummaries(flag: Long) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeEpisodeFlags.awaitShowEpisodeSummaries(anime, flag)\n        }\n    }\n\n    fun setCurrentSettingsAsDefault(applyToExisting: Boolean) {\n        val anime = successState?.anime ?: return\n        screenModelScope.launchNonCancellable {\n            libraryPreferences.setEpisodeSettingsDefault(anime)\n            if (applyToExisting) {\n                setAnimeDefaultEpisodeFlags.awaitAll()\n            }\n            snackbarHostState.showSnackbar(\n                message = context.stringResource(AYMR.strings.episode_settings_updated),\n            )\n        }\n    }\n\n    /**\n     * Sets the season download filter and requests an UI update.\n     * @param state whether to display only downloaded seasons or all seasons.\n     */\n    fun setSeasonDownloadedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.SEASON_SHOW_DOWNLOADED\n            TriState.ENABLED_NOT -> Anime.SEASON_SHOW_NOT_DOWNLOADED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetDownloadedFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the season seen filter and requests an UI update.\n     * @param state whether to display only unseen seasons or all seasons.\n     */\n    fun setSeasonUnseenFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.SEASON_SHOW_UNSEEN\n            TriState.ENABLED_NOT -> Anime.SEASON_SHOW_SEEN\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetUnseenFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the season started filter and requests an UI update.\n     * @param state whether to display only started seasons or all seasons.\n     */\n    fun setSeasonStartedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.SEASON_SHOW_STARTED\n            TriState.ENABLED_NOT -> Anime.SEASON_SHOW_NOT_STARTED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetStartedFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the season bookmarked filter and requests an UI update.\n     * @param state whether to display only bookmarked seasons or all seasons.\n     */\n    fun setSeasonBookmarkedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.SEASON_SHOW_BOOKMARKED\n            TriState.ENABLED_NOT -> Anime.SEASON_SHOW_NOT_BOOKMARKED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetBookmarkedFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the season fillermarked filter and requests an UI update.\n     * @param state whether to display only fillermarked seasons or all seasons.\n     */\n    fun setSeasonFillermarkedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.SEASON_SHOW_FILLERMARKED\n            TriState.ENABLED_NOT -> Anime.SEASON_SHOW_NOT_FILLERMARKED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetFillermarkedFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the season completed filter and requests an UI update.\n     * @param state whether to display only completed seasons or all seasons.\n     */\n    fun setSeasonCompletedFilter(state: TriState) {\n        val anime = successState?.anime ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Anime.SHOW_ALL\n            TriState.ENABLED_IS -> Anime.SEASON_SHOW_COMPLETED\n            TriState.ENABLED_NOT -> Anime.SEASON_SHOW_NOT_COMPLETED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetCompletedFilter(anime, flag)\n        }\n    }\n\n    /**\n     * Sets the season sorting method and requests an UI update.\n     * @param sort the sorting mode.\n     */\n    fun setSeasonSorting(sort: Long) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetSortingModeOrFlipOrder(anime, sort)\n        }\n    }\n\n    /**\n     * Sets the season grid display method and requests an UI update.\n     * @param mode the display mode.\n     */\n    fun setSeasonDisplayGridMode(mode: SeasonDisplayMode) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetGridMode(anime, mode)\n        }\n    }\n\n    /**\n     * Sets the season grid size and requests an UI update.\n     * @param size the size.\n     */\n    fun setSeasonDisplayGridSize(size: Int) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetGridSize(anime, size)\n        }\n    }\n\n    /**\n     * Sets the season download overlay and requests an UI update.\n     * @param visible the visibility.\n     */\n    fun setSeasonDownloadOverlay(visible: Boolean) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetDownloadedOverlay(anime, visible)\n        }\n    }\n\n    /**\n     * Sets the season unseen overlay and requests an UI update.\n     * @param visible the visibility.\n     */\n    fun setSeasonUnseenOverlay(visible: Boolean) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetUnseenOverlay(anime, visible)\n        }\n    }\n\n    /**\n     * Sets the season local overlay and requests an UI update.\n     * @param visible the visibility.\n     */\n    fun setSeasonLocalOverlay(visible: Boolean) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetLocalOverlay(anime, visible)\n        }\n    }\n\n    /**\n     * Sets the season lang overlay and requests an UI update.\n     * @param visible the visibility.\n     */\n    fun setSeasonLangOverlay(visible: Boolean) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetLangOverlay(anime, visible)\n        }\n    }\n\n    /**\n     * Sets the season continue overlay and requests an UI update.\n     * @param visible the visibility.\n     */\n    fun setSeasonContinueOverlay(visible: Boolean) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetContinueOverlay(anime, visible)\n        }\n    }\n\n    /**\n     * Sets the active season display mode.\n     * @param mode the mode to set.\n     */\n    fun setSeasonDisplayMode(mode: Long) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            setAnimeSeasonFlags.awaitSetDisplayMode(anime, mode)\n        }\n    }\n\n    fun setSeasonCurrentSettingsAsDefault(applyToExisting: Boolean) {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchNonCancellable {\n            libraryPreferences.setSeasonSettingsDefault(anime)\n            if (applyToExisting) {\n                setAnimeDefaultSeasonFlags.awaitAll()\n            }\n            snackbarHostState.showSnackbar(\n                message = context.stringResource(AYMR.strings.season_settings_updated),\n            )\n        }\n    }\n\n    fun toggleSelection(\n        item: EpisodeList.Item,\n        selected: Boolean,\n        userSelected: Boolean = false,\n        fromLongPress: Boolean = false,\n    ) {\n        updateSuccessState { successState ->\n            val newEpisodes = successState.processedEpisodes.toMutableList().apply {\n                val selectedIndex = successState.processedEpisodes.indexOfFirst { it.id == item.episode.id }\n                if (selectedIndex < 0) return@apply\n\n                val selectedItem = get(selectedIndex)\n                if ((selectedItem.selected && selected) || (!selectedItem.selected && !selected)) return@apply\n\n                val firstSelection = none { it.selected }\n                set(selectedIndex, selectedItem.copy(selected = selected))\n                selectedEpisodeIds.addOrRemove(item.id, selected)\n\n                if (selected && userSelected && fromLongPress) {\n                    if (firstSelection) {\n                        selectedPositions[0] = selectedIndex\n                        selectedPositions[1] = selectedIndex\n                    } else {\n                        // Try to select the items in-between when possible\n                        val range: IntRange\n                        if (selectedIndex < selectedPositions[0]) {\n                            range = selectedIndex + 1..<selectedPositions[0]\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            range = (selectedPositions[1] + 1)..<selectedIndex\n                            selectedPositions[1] = selectedIndex\n                        } else {\n                            // Just select itself\n                            range = IntRange.EMPTY\n                        }\n\n                        range.forEach {\n                            val inbetweenItem = get(it)\n                            if (!inbetweenItem.selected) {\n                                selectedEpisodeIds.add(inbetweenItem.id)\n                                set(it, inbetweenItem.copy(selected = true))\n                            }\n                        }\n                    }\n                } else if (userSelected && !fromLongPress) {\n                    if (!selected) {\n                        if (selectedIndex == selectedPositions[0]) {\n                            selectedPositions[0] = indexOfFirst { it.selected }\n                        } else if (selectedIndex == selectedPositions[1]) {\n                            selectedPositions[1] = indexOfLast { it.selected }\n                        }\n                    } else {\n                        if (selectedIndex < selectedPositions[0]) {\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            selectedPositions[1] = selectedIndex\n                        }\n                    }\n                }\n            }\n            successState.copy(episodes = newEpisodes)\n        }\n    }\n\n    fun toggleAllSelection(selected: Boolean) {\n        updateSuccessState { successState ->\n            val newEpisodes = successState.episodes.map {\n                selectedEpisodeIds.addOrRemove(it.id, selected)\n                it.copy(selected = selected)\n            }\n            selectedPositions[0] = -1\n            selectedPositions[1] = -1\n            successState.copy(episodes = newEpisodes)\n        }\n    }\n\n    fun invertSelection() {\n        updateSuccessState { successState ->\n            val newEpisodes = successState.episodes.map {\n                selectedEpisodeIds.addOrRemove(it.id, !it.selected)\n                it.copy(selected = !it.selected)\n            }\n            selectedPositions[0] = -1\n            selectedPositions[1] = -1\n            successState.copy(episodes = newEpisodes)\n        }\n    }\n\n    // Episodes list - end\n\n    // Track sheet - start\n\n    private fun observeTrackers() {\n        val anime = successState?.anime ?: return\n\n        screenModelScope.launchIO {\n            combine(\n                getTracks.subscribe(anime.id).catch { logcat(LogPriority.ERROR, it) },\n                trackerManager.loggedInTrackersFlow(),\n            ) { animeTracks, loggedInTrackers ->\n                // Show only if the service supports this manga's source\n                val supportedTrackers = loggedInTrackers.filter {\n                    (it as? EnhancedAnimeTracker)?.accept(source!!) ?: true\n                }\n                val supportedTrackerIds = supportedTrackers.map { it.id }.toHashSet()\n                val supportedTrackerTracks = animeTracks.filter { it.trackerId in supportedTrackerIds }\n                supportedTrackerTracks.size to supportedTrackers.isNotEmpty()\n            }\n                .flowWithLifecycle(lifecycle)\n                .distinctUntilChanged()\n                .collectLatest { (trackingCount, hasLoggedInTrackers) ->\n                    updateSuccessState {\n                        it.copy(\n                            trackingCount = trackingCount,\n                            hasLoggedInTrackers = hasLoggedInTrackers,\n                        )\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            combine(\n                getTracks.subscribe(anime.id).catch { logcat(LogPriority.ERROR, it) },\n                trackerManager.loggedInTrackersFlow(),\n            ) { animeTracks, loggedInTrackers ->\n                loggedInTrackers\n                    .map { service -> AnimeTrackItem(animeTracks.find { it.trackerId == service.id }, service) }\n            }\n                .distinctUntilChanged()\n                .collectLatest { trackItems ->\n                    updateAiringTime(anime, trackItems, manualFetch = false)\n                }\n        }\n    }\n\n    private suspend fun updateAiringTime(\n        anime: Anime,\n        trackItems: List<AnimeTrackItem>,\n        manualFetch: Boolean,\n    ) {\n        val airingEpisodeData = AniChartApi().loadAiringTime(anime, trackItems, manualFetch)\n        setAnimeViewerFlags.awaitSetNextEpisodeAiring(anime.id, airingEpisodeData)\n        updateSuccessState { it.copy(nextAiringEpisode = airingEpisodeData) }\n    }\n\n    // Track sheet - end\n\n    sealed interface Dialog {\n        data class ChangeCategory(\n            val anime: Anime,\n            val initialSelection: ImmutableList<CheckboxState<Category>>,\n        ) : Dialog\n        data class DeleteEpisodes(val episodes: List<Episode>) : Dialog\n        data class DuplicateAnime(val anime: Anime, val duplicate: Anime) : Dialog\n        data class Migrate(val newAnime: Anime, val oldAnime: Anime) : Dialog\n        data class SetAnimeFetchInterval(val anime: Anime) : Dialog\n        data class ShowQualities(val episode: Episode, val anime: Anime, val source: AnimeSource) : Dialog\n        data object ChangeAnimeSkipIntro : Dialog\n        data object EpisodeSettingsSheet : Dialog\n        data object SeasonSettingsSheet : Dialog\n        data object TrackSheet : Dialog\n        data object FullImages : Dialog\n    }\n\n    fun dismissDialog() {\n        updateSuccessState { it.copy(dialog = null) }\n    }\n\n    fun showDeleteEpisodeDialog(episodes: List<Episode>) {\n        updateSuccessState { it.copy(dialog = Dialog.DeleteEpisodes(episodes)) }\n    }\n\n    fun showSettingsDialog() {\n        updateSuccessState {\n            when (it.anime.fetchType) {\n                FetchType.Seasons -> it.copy(dialog = Dialog.SeasonSettingsSheet)\n                FetchType.Episodes -> it.copy(dialog = Dialog.EpisodeSettingsSheet)\n            }\n        }\n    }\n\n    fun showTrackDialog() {\n        updateSuccessState { it.copy(dialog = Dialog.TrackSheet) }\n    }\n\n    fun showImagesDialog() {\n        updateSuccessState { it.copy(dialog = Dialog.FullImages) }\n    }\n\n    fun showMigrateDialog(duplicate: Anime) {\n        val anime = successState?.anime ?: return\n        updateSuccessState { it.copy(dialog = Dialog.Migrate(newAnime = anime, oldAnime = duplicate)) }\n    }\n\n    fun showAnimeSkipIntroDialog() {\n        updateSuccessState { it.copy(dialog = Dialog.ChangeAnimeSkipIntro) }\n    }\n\n    private fun showQualitiesDialog(episode: Episode) {\n        updateSuccessState { it.copy(dialog = Dialog.ShowQualities(episode, it.anime, it.source)) }\n    }\n\n    sealed interface State {\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data class Success(\n            val anime: Anime,\n            val source: AnimeSource,\n            val isFromSource: Boolean,\n            val episodes: List<EpisodeList.Item>,\n            val seasons: List<AnimeSeasonItem>,\n            val trackingCount: Int = 0,\n            val hasLoggedInTrackers: Boolean = false,\n            val isRefreshingData: Boolean = false,\n            val dialog: Dialog? = null,\n            val hasPromptedToAddBefore: Boolean = false,\n            val trackItems: List<AnimeTrackItem> = emptyList(),\n            val nextAiringEpisode: Pair<Int, Long> = Pair(\n                anime.nextEpisodeToAir,\n                anime.nextEpisodeAiringAt,\n            ),\n        ) : State {\n\n            val processedSeasons by lazy {\n                seasons.applySeasonFilters(anime).toList()\n            }\n\n            val processedEpisodes by lazy {\n                episodes.applyFilters(anime).toList()\n            }\n\n            val episodeListItems by lazy {\n                processedEpisodes.insertSeparators { before, after ->\n                    val (lowerEpisode, higherEpisode) = if (anime.sortDescending()) {\n                        after to before\n                    } else {\n                        before to after\n                    }\n                    if (higherEpisode == null) return@insertSeparators null\n\n                    if (lowerEpisode == null) {\n                        floor(higherEpisode.episode.episodeNumber)\n                            .toInt()\n                            .minus(1)\n                            .coerceAtLeast(0)\n                    } else {\n                        calculateEpisodeGap(higherEpisode.episode, lowerEpisode.episode)\n                    }\n                        .takeIf { it > 0 }\n                        ?.let { missingCount ->\n                            EpisodeList.MissingCount(\n                                id = \"${lowerEpisode?.id}-${higherEpisode.id}\",\n                                count = missingCount,\n                            )\n                        }\n                }\n            }\n\n            val trackingAvailable: Boolean\n                get() = trackItems.isNotEmpty()\n\n            val airingEpisodeNumber: Double\n                get() = nextAiringEpisode.first.toDouble()\n\n            val airingTime: Long\n                get() = nextAiringEpisode.second.times(1000L).minus(\n                    Calendar.getInstance().timeInMillis,\n                )\n            val showPreviews: Boolean\n                get() = anime.showPreviews()\n\n            val showSummaries: Boolean\n                get() = anime.showSummaries()\n\n            /**\n             * Applies the view filters to the list of episodes obtained from the database.\n             * @return an observable of the list of episodes filtered and sorted.\n             */\n            private fun List<EpisodeList.Item>.applyFilters(anime: Anime): Sequence<EpisodeList.Item> {\n                val isLocalAnime = anime.isLocal()\n                val unseenFilter = anime.unseenFilter\n                val downloadedFilter = anime.downloadedFilter\n                val bookmarkedFilter = anime.bookmarkedFilter\n                val fillermarkedFilter = anime.fillermarkedFilter\n                return asSequence()\n                    .filter { (episode) -> applyFilter(unseenFilter) { !episode.seen } }\n                    .filter { (episode) -> applyFilter(bookmarkedFilter) { episode.bookmark } }\n                    .filter { (episode) -> applyFilter(fillermarkedFilter) { episode.fillermark } }\n                    .filter { applyFilter(downloadedFilter) { it.isDownloaded || isLocalAnime } }\n                    .sortedWith { (episode1), (episode2) ->\n                        getEpisodeSort(anime).invoke(\n                            episode1,\n                            episode2,\n                        )\n                    }\n            }\n\n            private fun List<AnimeSeasonItem>.applySeasonFilters(anime: Anime): Sequence<AnimeSeasonItem> {\n                val unseenFilter = anime.seasonUnseenFilter\n                val downloadedFilter = anime.seasonDownloadedFilter\n                val startedFilter = anime.seasonStartedFilter\n                val completedFilter = anime.seasonCompletedFilter\n                val bookmarkedFilter = anime.seasonBookmarkedFilter\n                val fillermarkedFilter = anime.seasonFillermarkedFilter\n\n                val comparator = getSeasonSortComparator(anime)\n                    .let { if (anime.seasonSortDescending()) it.reversed() else it }\n                    .thenComparator(seasonSortAlphabetically)\n\n                return asSequence()\n                    .filter { (season) -> applyFilter(unseenFilter) { !season.seen } }\n                    .filter { (season) -> applyFilter(startedFilter) { season.hasStarted } }\n                    .filter { (season) ->\n                        applyFilter(completedFilter) { season.anime.status.toInt() == SAnime.COMPLETED }\n                    }\n                    .filter { (season) -> applyFilter(bookmarkedFilter) { season.hasBookmarks } }\n                    .filter { (season) -> applyFilter(fillermarkedFilter) { season.hasFillermarks } }\n                    .filter { applyFilter(downloadedFilter) { it.downloadCount > 0 || it.seasonAnime.anime.isLocal() } }\n                    .sortedWith(compareBy(comparator) { it.seasonAnime })\n                    .map {\n                        val itemAnime = it.seasonAnime.anime\n                        AnimeSeasonItem(\n                            seasonAnime = it.seasonAnime,\n                            downloadCount = if (anime.seasonDownloadedOverlay) it.downloadCount else -1L,\n                            unseenCount = if (anime.seasonUnseenOverlay) it.unseenCount else -1L,\n                            isLocal = anime.seasonLocalOverlay && it.isLocal,\n                            sourceLanguage = if (anime.seasonLangOverlay) it.sourceLanguage else \"\",\n                            showContinueOverlay =\n                            anime.seasonContinueOverlay &&\n                                it.unseenCount > 0 &&\n                                itemAnime.fetchType == FetchType.Episodes,\n                        )\n                    }\n            }\n        }\n    }\n}\n\n@Immutable\nsealed class EpisodeList {\n    @Immutable\n    data class MissingCount(\n        val id: String,\n        val count: Int,\n    ) : EpisodeList()\n\n    @Immutable\n    data class Item(\n        val episode: Episode,\n        val downloadState: AnimeDownload.State,\n        val downloadProgress: Int,\n        val selected: Boolean = false,\n    ) : EpisodeList() {\n        val id = episode.id\n        val isDownloaded = downloadState == AnimeDownload.State.DOWNLOADED\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeSeasonItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.anime\n\nimport aniyomi.domain.anime.SeasonAnime\n\ndata class AnimeSeasonItem(\n    val seasonAnime: SeasonAnime,\n    val downloadCount: Long = -1L,\n    val unseenCount: Long = -1L,\n    val isLocal: Boolean = false,\n    val sourceLanguage: String = \"\",\n    val showContinueOverlay: Boolean = false,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/track/AnimeTrackInfoDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.anime.track\n\nimport android.app.Application\nimport android.content.Context\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.text.input.rememberTextFieldState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SelectableDates\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextAlign\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.track.anime.interactor.RefreshAnimeTracks\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.presentation.track.TrackDateSelector\nimport eu.kanade.presentation.track.TrackItemSelector\nimport eu.kanade.presentation.track.TrackScoreSelector\nimport eu.kanade.presentation.track.TrackStatusSelector\nimport eu.kanade.presentation.track.anime.AnimeTrackInfoDialogHome\nimport eu.kanade.presentation.track.anime.AnimeTrackerSearch\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.DeletableAnimeTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.util.lang.convertEpochMillisZone\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.track.anime.interactor.DeleteAnimeTrack\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.material.AlertDialogContent\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.ZoneId\nimport java.time.ZoneOffset\nimport tachiyomi.domain.track.anime.model.AnimeTrack as DbAnimeTrack\n\ndata class AnimeTrackInfoDialogHomeScreen(\n    private val animeId: Long,\n    private val animeTitle: String,\n    private val sourceId: Long,\n) : Screen() {\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val screenModel = rememberScreenModel { Model(animeId, sourceId) }\n\n        val dateFormat = remember {\n            UiPreferences.dateFormat(\n                Injekt.get<UiPreferences>().dateFormat().get(),\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        AnimeTrackInfoDialogHome(\n            trackItems = state.trackItems,\n            dateFormat = dateFormat,\n            onStatusClick = {\n                navigator.push(\n                    TrackStatusSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onEpisodeClick = {\n                navigator.push(\n                    TrackEpisodeSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onScoreClick = {\n                navigator.push(\n                    TrackScoreSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onStartDateEdit = {\n                navigator.push(\n                    TrackDateSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                        start = true,\n                    ),\n                )\n            },\n            onEndDateEdit = {\n                navigator.push(\n                    TrackDateSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                        start = false,\n                    ),\n                )\n            },\n            onNewSearch = {\n                if (it.tracker is EnhancedAnimeTracker) {\n                    screenModel.registerEnhancedTracking(it)\n                } else {\n                    navigator.push(\n                        TrackServiceSearchScreen(\n                            animeId = animeId,\n                            initialQuery = it.track?.title ?: animeTitle,\n                            currentUrl = it.track?.remoteUrl,\n                            serviceId = it.tracker.id,\n                        ),\n                    )\n                }\n            },\n            onOpenInBrowser = { openTrackerInBrowser(context, it) },\n            onRemoved = {\n                navigator.push(\n                    TrackerAnimeRemoveScreen(\n                        animeId = animeId,\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onCopyLink = { context.copyTrackerLink(it) },\n            onTogglePrivate = screenModel::togglePrivate,\n        )\n    }\n\n    /**\n     * Opens registered tracker url in browser\n     */\n    private fun openTrackerInBrowser(context: Context, trackItem: AnimeTrackItem) {\n        val url = trackItem.track?.remoteUrl ?: return\n        if (url.isNotBlank()) {\n            context.openInBrowser(url)\n        }\n    }\n\n    private fun Context.copyTrackerLink(trackItem: AnimeTrackItem) {\n        val url = trackItem.track?.remoteUrl ?: return\n        if (url.isNotBlank()) {\n            copyToClipboard(url, url)\n        }\n    }\n\n    private class Model(\n        private val animeId: Long,\n        private val sourceId: Long,\n        private val getTracks: GetAnimeTracks = Injekt.get(),\n    ) : StateScreenModel<Model.State>(State()) {\n\n        init {\n            screenModelScope.launch {\n                refreshTrackers()\n            }\n\n            screenModelScope.launch {\n                getTracks.subscribe(animeId)\n                    .catch { logcat(LogPriority.ERROR, it) }\n                    .distinctUntilChanged()\n                    .map { it.mapToTrackItem() }\n                    .collectLatest { trackItems ->\n                        mutableState.update {\n                            it.copy(\n                                trackItems = trackItems,\n                            )\n                        }\n                    }\n            }\n        }\n\n        fun registerEnhancedTracking(item: AnimeTrackItem) {\n            item.tracker as EnhancedAnimeTracker\n            screenModelScope.launchNonCancellable {\n                val anime = Injekt.get<GetAnime>().await(animeId) ?: return@launchNonCancellable\n                try {\n                    val matchResult = item.tracker.match(anime) ?: throw Exception()\n                    item.tracker.animeService.register(matchResult, animeId)\n                } catch (e: Exception) {\n                    withUIContext { Injekt.get<Application>().toast(MR.strings.error_no_match) }\n                }\n            }\n        }\n\n        private suspend fun refreshTrackers() {\n            val refreshTracks = Injekt.get<RefreshAnimeTracks>()\n            val context = Injekt.get<Application>()\n\n            refreshTracks.await(animeId)\n                .filter { it.first != null }\n                .forEach { (track, e) ->\n                    logcat(LogPriority.ERROR, e) {\n                        \"Failed to refresh track data mangaId=$animeId for service ${track!!.id}\"\n                    }\n                    withUIContext {\n                        context.toast(\n                            context.stringResource(\n                                MR.strings.track_error,\n                                track!!.name,\n                                e.message ?: \"\",\n                            ),\n                        )\n                    }\n                }\n        }\n\n        fun togglePrivate(item: AnimeTrackItem) {\n            screenModelScope.launchNonCancellable {\n                (item.tracker as? AnimeTracker)?.setRemotePrivate(item.track!!.toDbTrack(), !item.track.private)\n            }\n        }\n\n        private fun List<AnimeTrack>.mapToTrackItem(): List<AnimeTrackItem> {\n            val loggedInTrackers = Injekt.get<TrackerManager>().loggedInTrackers().filter {\n                it is AnimeTracker\n            }\n            val source = Injekt.get<AnimeSourceManager>().getOrStub(sourceId)\n            return loggedInTrackers\n                // Map to TrackItem\n                .map { service -> AnimeTrackItem(find { it.trackerId == service.id }, service) }\n                // Show only if the service supports this anime's source\n                .filter { (it.tracker as? EnhancedAnimeTracker)?.accept(source) ?: true }\n        }\n\n        @Immutable\n        data class State(\n            val trackItems: List<AnimeTrackItem> = emptyList(),\n        )\n    }\n}\n\nprivate data class TrackStatusSelectorScreen(\n    private val track: DbAnimeTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n        TrackStatusSelector(\n            selection = state.selection,\n            onSelectionChange = screenModel::setSelection,\n            selections = remember { screenModel.getSelections() },\n            onConfirm = {\n                screenModel.setStatus()\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n        )\n    }\n\n    private class Model(\n        private val track: DbAnimeTrack,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State(track.status)) {\n\n        fun getSelections(): Map<Long, StringResource?> {\n            return tracker.animeService.getStatusListAnime().associateWith {\n                (tracker as? AnimeTracker)?.getStatusForAnime(it)\n            }\n        }\n\n        fun setSelection(selection: Long) {\n            mutableState.update { it.copy(selection = selection) }\n        }\n\n        fun setStatus() {\n            screenModelScope.launchNonCancellable {\n                tracker.animeService.setRemoteAnimeStatus(track.toDbTrack(), state.value.selection)\n            }\n        }\n\n        @Immutable\n        data class State(\n            val selection: Long,\n        )\n    }\n}\n\nprivate data class TrackEpisodeSelectorScreen(\n    private val track: DbAnimeTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        TrackItemSelector(\n            selection = state.selection,\n            onSelectionChange = screenModel::setSelection,\n            range = remember { screenModel.getRange() },\n            onConfirm = {\n                screenModel.setEpisode()\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n            isManga = false,\n        )\n    }\n\n    private class Model(\n        private val track: DbAnimeTrack,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State(track.lastEpisodeSeen.toInt())) {\n\n        fun getRange(): Iterable<Int> {\n            val endRange = if (track.totalEpisodes > 0) {\n                track.totalEpisodes\n            } else {\n                10000\n            }\n            return 0..endRange.toInt()\n        }\n\n        fun setSelection(selection: Int) {\n            mutableState.update { it.copy(selection = selection) }\n        }\n\n        fun setEpisode() {\n            screenModelScope.launchNonCancellable {\n                tracker.animeService.setRemoteLastEpisodeSeen(\n                    track.toDbTrack(),\n                    state.value.selection,\n                )\n            }\n        }\n\n        @Immutable\n        data class State(\n            val selection: Int,\n        )\n    }\n}\n\nprivate data class TrackScoreSelectorScreen(\n    private val track: DbAnimeTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        TrackScoreSelector(\n            selection = state.selection,\n            onSelectionChange = screenModel::setSelection,\n            selections = remember { screenModel.getSelections() },\n            onConfirm = {\n                screenModel.setScore()\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n        )\n    }\n\n    private class Model(\n        private val track: DbAnimeTrack,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State(tracker.animeService.displayScore(track))) {\n\n        fun getSelections(): ImmutableList<String> {\n            return tracker.animeService.getScoreList()\n        }\n\n        fun setSelection(selection: String) {\n            mutableState.update { it.copy(selection = selection) }\n        }\n\n        fun setScore() {\n            screenModelScope.launchNonCancellable {\n                tracker.animeService.setRemoteScore(track.toDbTrack(), state.value.selection)\n            }\n        }\n\n        @Immutable\n        data class State(\n            val selection: String,\n        )\n    }\n}\n\nprivate data class TrackDateSelectorScreen(\n    private val track: DbAnimeTrack,\n    private val serviceId: Long,\n    private val start: Boolean,\n) : Screen() {\n\n    @Transient\n    private val selectableDates = object : SelectableDates {\n        override fun isSelectableDate(utcTimeMillis: Long): Boolean {\n            val dateToCheck = Instant.ofEpochMilli(utcTimeMillis)\n                .atZone(ZoneOffset.systemDefault())\n                .toLocalDate()\n\n            if (dateToCheck > LocalDate.now()) {\n                // Disallow future dates\n                return false\n            }\n\n            return if (start && track.finishDate > 0) {\n                // Disallow start date to be set later than finish date\n                val dateFinished = Instant.ofEpochMilli(track.finishDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                dateToCheck <= dateFinished\n            } else if (!start && track.startDate > 0) {\n                // Disallow end date to be set earlier than start date\n                val dateStarted = Instant.ofEpochMilli(track.startDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                dateToCheck >= dateStarted\n            } else {\n                // Nothing set before\n                true\n            }\n        }\n\n        override fun isSelectableYear(year: Int): Boolean {\n            if (year > LocalDate.now().year) {\n                // Disallow future dates\n                return false\n            }\n\n            return if (start && track.finishDate > 0) {\n                // Disallow start date to be set later than finish date\n                val dateFinished = Instant.ofEpochMilli(track.finishDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                    .year\n                year <= dateFinished\n            } else if (!start && track.startDate > 0) {\n                // Disallow end date to be set earlier than start date\n                val dateStarted = Instant.ofEpochMilli(track.startDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                    .year\n                year >= dateStarted\n            } else {\n                // Nothing set before\n                true\n            }\n        }\n    }\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n                start = start,\n            )\n        }\n\n        val canRemove = if (start) {\n            track.startDate > 0\n        } else {\n            track.finishDate > 0\n        }\n        TrackDateSelector(\n            title = if (start) {\n                stringResource(MR.strings.track_started_reading_date)\n            } else {\n                stringResource(MR.strings.track_finished_reading_date)\n            },\n            initialSelectedDateMillis = screenModel.initialSelection,\n            selectableDates = selectableDates,\n            onConfirm = {\n                screenModel.setDate(it)\n                navigator.pop()\n            },\n            onRemove = { screenModel.confirmRemoveDate(navigator) }.takeIf { canRemove },\n            onDismissRequest = navigator::pop,\n        )\n    }\n\n    private class Model(\n        private val track: DbAnimeTrack,\n        private val tracker: Tracker,\n        private val start: Boolean,\n    ) : ScreenModel {\n\n        // In UTC\n        val initialSelection: Long\n            get() {\n                val millis =\n                    (if (start) track.startDate else track.finishDate)\n                        .takeIf { it != 0L }\n                        ?: Instant.now().toEpochMilli()\n                return millis.convertEpochMillisZone(ZoneOffset.systemDefault(), ZoneOffset.UTC)\n            }\n\n        // In UTC\n        fun setDate(millis: Long) {\n            // Convert to local time\n            val localMillis =\n                millis.convertEpochMillisZone(ZoneOffset.UTC, ZoneOffset.systemDefault())\n            screenModelScope.launchNonCancellable {\n                if (start) {\n                    tracker.animeService.setRemoteStartDate(track.toDbTrack(), localMillis)\n                } else {\n                    tracker.animeService.setRemoteFinishDate(track.toDbTrack(), localMillis)\n                }\n            }\n        }\n\n        fun confirmRemoveDate(navigator: Navigator) {\n            navigator.push(TrackDateRemoverScreen(track, tracker.id, start))\n        }\n    }\n}\n\nprivate data class TrackDateRemoverScreen(\n    private val track: DbAnimeTrack,\n    private val serviceId: Long,\n    private val start: Boolean,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n                start = start,\n            )\n        }\n        AlertDialogContent(\n            modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),\n            icon = {\n                Icon(\n                    imageVector = Icons.Default.Delete,\n                    contentDescription = null,\n                )\n            },\n            title = {\n                Text(\n                    text = stringResource(MR.strings.track_remove_date_conf_title),\n                    textAlign = TextAlign.Center,\n                )\n            },\n            text = {\n                val serviceName = screenModel.getName()\n                Text(\n                    text = if (start) {\n                        stringResource(MR.strings.track_remove_start_date_conf_text, serviceName)\n                    } else {\n                        stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName)\n                    },\n                )\n            },\n            buttons = {\n                Row(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(\n                        MaterialTheme.padding.small,\n                        Alignment.End,\n                    ),\n                ) {\n                    TextButton(onClick = navigator::pop) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    FilledTonalButton(\n                        onClick = {\n                            screenModel.removeDate()\n                            navigator.popUntil { it is AnimeTrackInfoDialogHomeScreen }\n                        },\n                        colors = ButtonDefaults.filledTonalButtonColors(\n                            containerColor = MaterialTheme.colorScheme.errorContainer,\n                            contentColor = MaterialTheme.colorScheme.onErrorContainer,\n                        ),\n                    ) {\n                        Text(text = stringResource(MR.strings.action_remove))\n                    }\n                }\n            },\n        )\n    }\n\n    private class Model(\n        private val track: DbAnimeTrack,\n        private val tracker: Tracker,\n        private val start: Boolean,\n    ) : ScreenModel {\n\n        fun getName() = tracker.name\n\n        fun removeDate() {\n            screenModelScope.launchNonCancellable {\n                if (start) {\n                    tracker.animeService.setRemoteStartDate(track.toDbTrack(), 0)\n                } else {\n                    tracker.animeService.setRemoteFinishDate(track.toDbTrack(), 0)\n                }\n            }\n        }\n    }\n}\n\ndata class TrackServiceSearchScreen(\n    private val animeId: Long,\n    private val initialQuery: String,\n    private val currentUrl: String?,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                animeId = animeId,\n                currentUrl = currentUrl,\n                initialQuery = initialQuery,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n\n        val state by screenModel.state.collectAsState()\n\n        val textFieldState = rememberTextFieldState(initialQuery)\n        AnimeTrackerSearch(\n            state = textFieldState,\n            onDispatchQuery = { screenModel.trackingSearch(textFieldState.text.toString()) },\n            queryResult = state.queryResult,\n            selected = state.selected,\n            onSelectedChange = screenModel::updateSelection,\n            onConfirmSelection = f@{ private: Boolean ->\n                val selected = state.selected ?: return@f\n                selected.private = private\n                screenModel.registerTracking(selected)\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n            supportsPrivateTracking = screenModel.supportsPrivateTracking,\n        )\n    }\n\n    private class Model(\n        private val animeId: Long,\n        private val currentUrl: String? = null,\n        initialQuery: String,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State()) {\n\n        val supportsPrivateTracking = tracker.supportsPrivateTracking\n\n        init {\n            // Run search on first launch\n            if (initialQuery.isNotBlank()) {\n                trackingSearch(initialQuery)\n            }\n        }\n\n        fun trackingSearch(query: String) {\n            screenModelScope.launch {\n                // To show loading state\n                mutableState.update { it.copy(queryResult = null, selected = null) }\n\n                val result = withIOContext {\n                    try {\n                        val results = tracker.animeService.searchAnime(query)\n                        Result.success(results)\n                    } catch (e: Throwable) {\n                        Result.failure(e)\n                    }\n                }\n                mutableState.update { oldState ->\n                    oldState.copy(\n                        queryResult = result,\n                        selected = result.getOrNull()?.find { it.tracking_url == currentUrl },\n                    )\n                }\n            }\n        }\n\n        fun registerTracking(item: AnimeTrackSearch) {\n            screenModelScope.launchNonCancellable { tracker.animeService.register(item, animeId) }\n        }\n\n        fun updateSelection(selected: AnimeTrackSearch) {\n            mutableState.update { it.copy(selected = selected) }\n        }\n\n        @Immutable\n        data class State(\n            val queryResult: Result<List<AnimeTrackSearch>>? = null,\n            val selected: AnimeTrackSearch? = null,\n        )\n    }\n}\n\nprivate data class TrackerAnimeRemoveScreen(\n    private val animeId: Long,\n    private val track: AnimeTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                animeId = animeId,\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val serviceName = screenModel.getName()\n        var removeRemoteTrack by remember { mutableStateOf(false) }\n        AlertDialogContent(\n            modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),\n            icon = {\n                Icon(\n                    imageVector = Icons.Default.Delete,\n                    contentDescription = null,\n                )\n            },\n            title = {\n                Text(\n                    text = stringResource(MR.strings.track_delete_title, serviceName),\n                    textAlign = TextAlign.Center,\n                )\n            },\n            text = {\n                Column(\n                    verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                ) {\n                    Text(\n                        text = stringResource(MR.strings.track_delete_text, serviceName),\n                    )\n                    if (screenModel.isDeletable()) {\n                        LabeledCheckbox(\n                            label = stringResource(MR.strings.track_delete_remote_text, serviceName),\n                            checked = removeRemoteTrack,\n                            onCheckedChange = { removeRemoteTrack = it },\n                        )\n                    }\n                }\n            },\n            buttons = {\n                Row(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(\n                        MaterialTheme.padding.small,\n                        Alignment.End,\n                    ),\n                ) {\n                    TextButton(onClick = navigator::pop) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    FilledTonalButton(\n                        onClick = {\n                            screenModel.unregisterTracking(serviceId)\n                            if (removeRemoteTrack) screenModel.deleteAnimeFromService()\n                            navigator.pop()\n                        },\n                        colors = ButtonDefaults.filledTonalButtonColors(\n                            containerColor = MaterialTheme.colorScheme.errorContainer,\n                            contentColor = MaterialTheme.colorScheme.onErrorContainer,\n                        ),\n                    ) {\n                        Text(text = stringResource(MR.strings.action_ok))\n                    }\n                }\n            },\n        )\n    }\n\n    private class Model(\n        private val animeId: Long,\n        private val track: AnimeTrack,\n        private val tracker: Tracker,\n        private val deleteTrack: DeleteAnimeTrack = Injekt.get(),\n    ) : ScreenModel {\n\n        fun getName() = tracker.name\n\n        fun isDeletable() = tracker is DeletableAnimeTracker\n\n        fun deleteAnimeFromService() {\n            screenModelScope.launchNonCancellable {\n                try {\n                    (tracker as DeletableAnimeTracker).delete(track)\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to delete anime entry from service\" }\n                }\n            }\n        }\n\n        fun unregisterTracking(serviceId: Long) {\n            screenModelScope.launchNonCancellable { deleteTrack.await(animeId, serviceId) }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/track/AnimeTrackItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.anime.track\n\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport tachiyomi.domain.track.anime.model.AnimeTrack\n\ndata class AnimeTrackItem(val track: AnimeTrack?, val tracker: Tracker)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaCoverScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.manga\n\nimport android.content.Context\nimport android.net.Uri\nimport androidx.compose.material3.SnackbarHostState\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.ImageRequest\nimport coil3.size.Size\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.saver.Image\nimport eu.kanade.tachiyomi.data.saver.ImageSaver\nimport eu.kanade.tachiyomi.data.saver.Location\nimport eu.kanade.tachiyomi.util.editCover\nimport eu.kanade.tachiyomi.util.system.getBitmapOrNull\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaCoverScreenModel(\n    private val mangaId: Long,\n    private val getManga: GetManga = Injekt.get(),\n    private val imageSaver: ImageSaver = Injekt.get(),\n    private val coverCache: MangaCoverCache = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n) : StateScreenModel<Manga?>(null) {\n\n    init {\n        screenModelScope.launchIO {\n            getManga.subscribe(mangaId)\n                .collect { newManga -> mutableState.update { newManga } }\n        }\n    }\n\n    fun saveCover(context: Context) {\n        screenModelScope.launch {\n            try {\n                saveCoverInternal(context, temp = false)\n                snackbarHostState.showSnackbar(\n                    context.stringResource(MR.strings.cover_saved),\n                    withDismissAction = true,\n                )\n            } catch (e: Throwable) {\n                logcat(LogPriority.ERROR, e)\n                snackbarHostState.showSnackbar(\n                    context.stringResource(MR.strings.error_saving_cover),\n                    withDismissAction = true,\n                )\n            }\n        }\n    }\n\n    fun shareCover(context: Context) {\n        screenModelScope.launch {\n            try {\n                val uri = saveCoverInternal(context, temp = true) ?: return@launch\n                withUIContext {\n                    context.startActivity(uri.toShareIntent(context))\n                }\n            } catch (e: Throwable) {\n                logcat(LogPriority.ERROR, e)\n                snackbarHostState.showSnackbar(\n                    context.stringResource(MR.strings.error_sharing_cover),\n                    withDismissAction = true,\n                )\n            }\n        }\n    }\n\n    /**\n     * Save manga cover Bitmap to picture or temporary share directory.\n     *\n     * @param context The context for building and executing the ImageRequest\n     * @return the uri to saved file\n     */\n    private suspend fun saveCoverInternal(context: Context, temp: Boolean): Uri? {\n        val manga = state.value ?: return null\n        val req = ImageRequest.Builder(context)\n            .data(manga)\n            .size(Size.ORIGINAL)\n            .build()\n\n        return withIOContext {\n            val result = context.imageLoader.execute(req).image?.asDrawable(context.resources)\n\n            // TODO: Handle animated cover\n            val bitmap = result?.getBitmapOrNull() ?: return@withIOContext null\n            imageSaver.save(\n                Image.Cover(\n                    bitmap = bitmap,\n                    name = manga.title,\n                    location = if (temp) Location.Cache else Location.Pictures.create(),\n                ),\n            )\n        }\n    }\n\n    /**\n     * Update cover with local file.\n     *\n     * @param context Context.\n     * @param data uri of the cover resource.\n     */\n    fun editCover(context: Context, data: Uri) {\n        val manga = state.value ?: return\n        screenModelScope.launchIO {\n            context.contentResolver.openInputStream(data)?.use {\n                try {\n                    manga.editCover(Injekt.get(), it, updateManga, coverCache)\n                    notifyCoverUpdated(context)\n                } catch (e: Exception) {\n                    notifyFailedCoverUpdate(context, e)\n                }\n            }\n        }\n    }\n\n    fun deleteCustomCover(context: Context) {\n        val mangaId = state.value?.id ?: return\n        screenModelScope.launchIO {\n            try {\n                coverCache.deleteCustomCover(mangaId)\n                updateManga.awaitUpdateCoverLastModified(mangaId)\n                notifyCoverUpdated(context)\n            } catch (e: Exception) {\n                notifyFailedCoverUpdate(context, e)\n            }\n        }\n    }\n\n    private fun notifyCoverUpdated(context: Context) {\n        screenModelScope.launch {\n            snackbarHostState.showSnackbar(\n                context.stringResource(MR.strings.cover_updated),\n                withDismissAction = true,\n            )\n        }\n    }\n\n    private fun notifyFailedCoverUpdate(context: Context, e: Throwable) {\n        screenModelScope.launch {\n            snackbarHostState.showSnackbar(\n                context.stringResource(MR.strings.notification_cover_update_failed),\n                withDismissAction = true,\n            )\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.manga\n\nimport android.content.Context\nimport android.content.Intent\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.layout.systemBarsPadding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\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.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.core.net.toUri\nimport androidx.lifecycle.compose.LocalLifecycleOwner\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.core.util.ifMangaSourcesLoaded\nimport eu.kanade.domain.entries.manga.model.hasCustomCover\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.components.NavigatorAdaptiveSheet\nimport eu.kanade.presentation.entries.EditCoverAction\nimport eu.kanade.presentation.entries.components.DeleteItemsDialog\nimport eu.kanade.presentation.entries.components.SetIntervalDialog\nimport eu.kanade.presentation.entries.manga.ChapterSettingsDialog\nimport eu.kanade.presentation.entries.manga.DuplicateMangaDialog\nimport eu.kanade.presentation.entries.manga.MangaScreen\nimport eu.kanade.presentation.entries.manga.components.MangaCoverDialog\nimport eu.kanade.presentation.entries.manga.components.ScanlatorFilterDialog\nimport eu.kanade.presentation.util.AssistContentScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.util.isTabletUi\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.manga.isLocalOrStub\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaDialog\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaDialogScreenModel\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaSearchScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.manga.track.MangaTrackInfoDialogHomeScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryTab\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport eu.kanade.tachiyomi.ui.setting.SettingsScreen\nimport eu.kanade.tachiyomi.ui.webview.WebViewScreen\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\nclass MangaScreen(\n    private val mangaId: Long,\n    val fromSource: Boolean = false,\n) : Screen(), AssistContentScreen {\n\n    private var assistUrl: String? = null\n\n    override fun onProvideAssistUrl() = assistUrl\n\n    @Composable\n    override fun Content() {\n        if (!ifMangaSourcesLoaded()) {\n            LoadingScreen()\n            return\n        }\n\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val haptic = LocalHapticFeedback.current\n        val scope = rememberCoroutineScope()\n        val lifecycleOwner = LocalLifecycleOwner.current\n        val screenModel =\n            rememberScreenModel { MangaScreenModel(context, lifecycleOwner.lifecycle, mangaId, fromSource) }\n\n        val state by screenModel.state.collectAsStateWithLifecycle()\n\n        if (state is MangaScreenModel.State.Loading) {\n            LoadingScreen()\n            return\n        }\n\n        val successState = state as MangaScreenModel.State.Success\n        val isHttpSource = remember { successState.source is HttpSource }\n\n        LaunchedEffect(successState.manga, screenModel.source) {\n            if (isHttpSource) {\n                try {\n                    withIOContext {\n                        assistUrl = getMangaUrl(screenModel.manga, screenModel.source)\n                    }\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to get manga URL\" }\n                }\n            }\n        }\n\n        MangaScreen(\n            state = successState,\n            snackbarHostState = screenModel.snackbarHostState,\n            nextUpdate = successState.manga.expectedNextUpdate,\n            isTabletUi = isTabletUi(),\n            chapterSwipeStartAction = screenModel.chapterSwipeStartAction,\n            chapterSwipeEndAction = screenModel.chapterSwipeEndAction,\n            navigateUp = navigator::pop,\n            onChapterClicked = { openChapter(context, it) },\n            onDownloadChapter = screenModel::runChapterDownloadActions.takeIf { !successState.source.isLocalOrStub() },\n            onAddToLibraryClicked = {\n                screenModel.toggleFavorite()\n                haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n            },\n            onWebViewClicked = {\n                openMangaInWebView(\n                    navigator,\n                    screenModel.manga,\n                    screenModel.source,\n                )\n            }.takeIf { isHttpSource },\n            onWebViewLongClicked = {\n                copyMangaUrl(\n                    context,\n                    screenModel.manga,\n                    screenModel.source,\n                )\n            }.takeIf { isHttpSource },\n            onTrackingClicked = {\n                if (!successState.hasLoggedInTrackers) {\n                    navigator.push(SettingsScreen(SettingsScreen.Destination.Tracking))\n                } else {\n                    screenModel.showTrackDialog()\n                }\n            },\n            onTagSearch = { scope.launch { performGenreSearch(navigator, it, screenModel.source!!) } },\n            onFilterButtonClicked = screenModel::showSettingsDialog,\n            onRefresh = screenModel::fetchAllFromSource,\n            onContinueReading = { continueReading(context, screenModel.getNextUnreadChapter()) },\n            onSearch = { query, global -> scope.launch { performSearch(navigator, query, global) } },\n            onCoverClicked = screenModel::showCoverDialog,\n            onShareClicked = { shareManga(context, screenModel.manga, screenModel.source) }.takeIf { isHttpSource },\n            onDownloadActionClicked = screenModel::runDownloadAction.takeIf { !successState.source.isLocalOrStub() },\n            onEditCategoryClicked = screenModel::showChangeCategoryDialog.takeIf { successState.manga.favorite },\n            onEditFetchIntervalClicked = screenModel::showSetMangaFetchIntervalDialog.takeIf {\n                successState.manga.favorite\n            },\n            onMigrateClicked = {\n                navigator.push(MigrateMangaSearchScreen(successState.manga.id))\n            }.takeIf { successState.manga.favorite },\n            onMultiBookmarkClicked = screenModel::bookmarkChapters,\n            onMultiMarkAsReadClicked = screenModel::markChaptersRead,\n            onMarkPreviousAsReadClicked = screenModel::markPreviousChapterRead,\n            onMultiDeleteClicked = screenModel::showDeleteChapterDialog,\n            onChapterSwipe = screenModel::chapterSwipe,\n            onChapterSelected = screenModel::toggleSelection,\n            onAllChapterSelected = screenModel::toggleAllSelection,\n            onInvertSelection = screenModel::invertSelection,\n        )\n\n        var showScanlatorsDialog by remember { mutableStateOf(false) }\n\n        val onDismissRequest = {\n            screenModel.dismissDialog()\n            if (screenModel.autoOpenTrack && screenModel.isFromChangeCategory) {\n                screenModel.isFromChangeCategory = false\n                screenModel.showTrackDialog()\n            }\n        }\n        when (val dialog = successState.dialog) {\n            null -> {}\n            is MangaScreenModel.Dialog.ChangeCategory -> {\n                ChangeCategoryDialog(\n                    initialSelection = dialog.initialSelection,\n                    onDismissRequest = onDismissRequest,\n                    onEditCategories = {\n                        navigator.push(CategoriesTab)\n                        CategoriesTab.showMangaCategory()\n                    },\n                    onConfirm = { include, _ ->\n                        screenModel.moveMangaToCategoriesAndAddToLibrary(dialog.manga, include)\n                    },\n                )\n            }\n            is MangaScreenModel.Dialog.DeleteChapters -> {\n                DeleteItemsDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = {\n                        screenModel.toggleAllSelection(false)\n                        screenModel.deleteChapters(dialog.chapters)\n                    },\n                    isManga = true,\n                )\n            }\n\n            is MangaScreenModel.Dialog.DuplicateManga -> {\n                DuplicateMangaDialog(\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = { screenModel.toggleFavorite(onRemoved = {}, checkDuplicate = false) },\n                    onOpenManga = { navigator.push(MangaScreen(dialog.duplicate.id)) },\n                    onMigrate = {\n                        screenModel.showMigrateDialog(dialog.duplicate)\n                    },\n                )\n            }\n\n            is MangaScreenModel.Dialog.Migrate -> {\n                MigrateMangaDialog(\n                    oldManga = dialog.oldManga,\n                    newManga = dialog.newManga,\n                    screenModel = MigrateMangaDialogScreenModel(),\n                    onDismissRequest = onDismissRequest,\n                    onClickTitle = { navigator.push(MangaScreen(dialog.oldManga.id)) },\n                    onPopScreen = { navigator.replace(MangaScreen(dialog.newManga.id)) },\n                )\n            }\n            MangaScreenModel.Dialog.SettingsSheet -> ChapterSettingsDialog(\n                onDismissRequest = onDismissRequest,\n                manga = successState.manga,\n                onDownloadFilterChanged = screenModel::setDownloadedFilter,\n                onUnreadFilterChanged = screenModel::setUnreadFilter,\n                onBookmarkedFilterChanged = screenModel::setBookmarkedFilter,\n                onSortModeChanged = screenModel::setSorting,\n                onDisplayModeChanged = screenModel::setDisplayMode,\n                onSetAsDefault = screenModel::setCurrentSettingsAsDefault,\n                onResetToDefault = screenModel::resetToDefaultSettings,\n                scanlatorFilterActive = successState.scanlatorFilterActive,\n                onScanlatorFilterClicked = { showScanlatorsDialog = true },\n            )\n            MangaScreenModel.Dialog.TrackSheet -> {\n                NavigatorAdaptiveSheet(\n                    screen = MangaTrackInfoDialogHomeScreen(\n                        mangaId = successState.manga.id,\n                        mangaTitle = successState.manga.title,\n                        sourceId = successState.source.id,\n                    ),\n                    enableSwipeDismiss = { it.lastItem is MangaTrackInfoDialogHomeScreen },\n                    onDismissRequest = onDismissRequest,\n                )\n            }\n            MangaScreenModel.Dialog.FullCover -> {\n                val sm = rememberScreenModel { MangaCoverScreenModel(successState.manga.id) }\n                val manga by sm.state.collectAsState()\n                if (manga != null) {\n                    val getContent = rememberLauncherForActivityResult(\n                        ActivityResultContracts.GetContent(),\n                    ) {\n                        if (it == null) return@rememberLauncherForActivityResult\n                        sm.editCover(context, it)\n                    }\n                    MangaCoverDialog(\n                        manga = manga!!,\n                        snackbarHostState = sm.snackbarHostState,\n                        isCustomCover = remember(manga) { manga!!.hasCustomCover() },\n                        onShareClick = { sm.shareCover(context) },\n                        onSaveClick = { sm.saveCover(context) },\n                        onEditClick = {\n                            when (it) {\n                                EditCoverAction.EDIT -> getContent.launch(\"image/*\")\n                                EditCoverAction.DELETE -> sm.deleteCustomCover(context)\n                            }\n                        },\n                        onDismissRequest = onDismissRequest,\n                    )\n                } else {\n                    LoadingScreen(Modifier.systemBarsPadding())\n                }\n            }\n            is MangaScreenModel.Dialog.SetMangaFetchInterval -> {\n                SetIntervalDialog(\n                    interval = dialog.manga.fetchInterval,\n                    nextUpdate = dialog.manga.expectedNextUpdate,\n                    onDismissRequest = onDismissRequest,\n                    isManga = true,\n                    onValueChanged = { interval: Int -> screenModel.setFetchInterval(dialog.manga, interval) }\n                        .takeIf { screenModel.isUpdateIntervalEnabled },\n                )\n            }\n        }\n\n        if (showScanlatorsDialog) {\n            ScanlatorFilterDialog(\n                availableScanlators = successState.availableScanlators,\n                excludedScanlators = successState.excludedScanlators,\n                onDismissRequest = { showScanlatorsDialog = false },\n                onConfirm = screenModel::setExcludedScanlators,\n            )\n        }\n    }\n\n    private fun continueReading(context: Context, unreadChapter: Chapter?) {\n        if (unreadChapter != null) openChapter(context, unreadChapter)\n    }\n\n    private fun openChapter(context: Context, chapter: Chapter) {\n        context.startActivity(ReaderActivity.newIntent(context, chapter.mangaId, chapter.id))\n    }\n\n    private fun getMangaUrl(manga_: Manga?, source_: MangaSource?): String? {\n        val manga = manga_ ?: return null\n        val source = source_ as? HttpSource ?: return null\n\n        return try {\n            source.getMangaUrl(manga.toSManga())\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    private fun openMangaInWebView(navigator: Navigator, manga_: Manga?, source_: MangaSource?) {\n        getMangaUrl(manga_, source_)?.let { url ->\n            navigator.push(\n                WebViewScreen(\n                    url = url,\n                    initialTitle = manga_?.title,\n                    sourceId = source_?.id,\n                ),\n            )\n        }\n    }\n\n    private fun shareManga(context: Context, manga_: Manga?, source_: MangaSource?) {\n        try {\n            getMangaUrl(manga_, source_)?.let { url ->\n                val intent = url.toUri().toShareIntent(context, type = \"text/plain\")\n                context.startActivity(\n                    Intent.createChooser(\n                        intent,\n                        context.stringResource(MR.strings.action_share),\n                    ),\n                )\n            }\n        } catch (e: Exception) {\n            context.toast(e.message)\n        }\n    }\n\n    /**\n     * Perform a search using the provided query.\n     *\n     * @param query the search query to the parent controller\n     */\n    private suspend fun performSearch(navigator: Navigator, query: String, global: Boolean) {\n        if (global) {\n            navigator.push(GlobalMangaSearchScreen(query))\n            return\n        }\n\n        if (navigator.size < 2) {\n            return\n        }\n\n        when (val previousController = navigator.items[navigator.size - 2]) {\n            is HomeScreen -> {\n                navigator.pop()\n                MangaLibraryTab.search(query)\n            }\n            is BrowseMangaSourceScreen -> {\n                navigator.pop()\n                previousController.search(query)\n            }\n        }\n    }\n\n    /**\n     * Performs a genre search using the provided genre name.\n     *\n     * @param genreName the search genre to the parent controller\n     */\n    private suspend fun performGenreSearch(\n        navigator: Navigator,\n        genreName: String,\n        source: MangaSource,\n    ) {\n        if (navigator.size < 2) {\n            return\n        }\n\n        val previousController = navigator.items[navigator.size - 2]\n        if (previousController is BrowseMangaSourceScreen && source is HttpSource) {\n            navigator.pop()\n            previousController.searchGenre(genreName)\n        } else {\n            performSearch(navigator, genreName, global = false)\n        }\n    }\n\n    /**\n     * Copy Manga URL to Clipboard\n     */\n    private fun copyMangaUrl(context: Context, manga_: Manga?, source_: MangaSource?) {\n        val manga = manga_ ?: return\n        val source = source_ as? HttpSource ?: return\n        val url = source.getMangaUrl(manga.toSManga())\n        context.copyToClipboard(url, url)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.manga\n\nimport android.content.Context\nimport androidx.compose.material3.SnackbarDuration\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.SnackbarResult\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.util.fastAny\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.flowWithLifecycle\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.asState\nimport eu.kanade.core.util.addOrRemove\nimport eu.kanade.core.util.insertSeparators\nimport eu.kanade.domain.entries.manga.interactor.GetExcludedScanlators\nimport eu.kanade.domain.entries.manga.interactor.SetExcludedScanlators\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.chaptersFiltered\nimport eu.kanade.domain.entries.manga.model.downloadedFilter\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.domain.items.chapter.interactor.GetAvailableScanlators\nimport eu.kanade.domain.items.chapter.interactor.SetReadStatus\nimport eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource\nimport eu.kanade.domain.track.manga.interactor.AddMangaTracks\nimport eu.kanade.domain.track.manga.interactor.RefreshMangaTracks\nimport eu.kanade.domain.track.manga.interactor.TrackChapter\nimport eu.kanade.domain.track.model.AutoTrackState\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.presentation.entries.manga.components.ChapterDownloadAction\nimport eu.kanade.presentation.util.formattedMessage\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.network.HttpException\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.util.chapter.getNextUnread\nimport eu.kanade.tachiyomi.util.removeCovers\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.isActive\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport mihon.domain.items.chapter.interactor.FilterChaptersForDownload\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.mapAsCheckboxState\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.SetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.applyFilter\nimport tachiyomi.domain.entries.manga.interactor.GetDuplicateLibraryManga\nimport tachiyomi.domain.entries.manga.interactor.GetMangaWithChapters\nimport tachiyomi.domain.entries.manga.interactor.SetMangaChapterFlags\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.domain.items.chapter.interactor.SetMangaDefaultChapterFlags\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\nimport tachiyomi.domain.items.chapter.model.NoChaptersException\nimport tachiyomi.domain.items.chapter.service.calculateChapterGap\nimport tachiyomi.domain.items.chapter.service.getChapterSort\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.math.floor\n\nclass MangaScreenModel(\n    private val context: Context,\n    private val lifecycle: Lifecycle,\n    private val mangaId: Long,\n    private val isFromSource: Boolean,\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val trackPreferences: TrackPreferences = Injekt.get(),\n    readerPreferences: ReaderPreferences = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n    private val trackChapter: TrackChapter = Injekt.get(),\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val downloadCache: MangaDownloadCache = Injekt.get(),\n    private val getMangaAndChapters: GetMangaWithChapters = Injekt.get(),\n    private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(),\n    private val getAvailableScanlators: GetAvailableScanlators = Injekt.get(),\n    private val getExcludedScanlators: GetExcludedScanlators = Injekt.get(),\n    private val setExcludedScanlators: SetExcludedScanlators = Injekt.get(),\n    private val setMangaChapterFlags: SetMangaChapterFlags = Injekt.get(),\n    private val setMangaDefaultChapterFlags: SetMangaDefaultChapterFlags = Injekt.get(),\n    private val setReadStatus: SetReadStatus = Injekt.get(),\n    private val updateChapter: UpdateChapter = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n    private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val getTracks: GetMangaTracks = Injekt.get(),\n    private val addTracks: AddMangaTracks = Injekt.get(),\n    private val setMangaCategories: SetMangaCategories = Injekt.get(),\n    private val mangaRepository: MangaRepository = Injekt.get(),\n    private val filterChaptersForDownload: FilterChaptersForDownload = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n) : StateScreenModel<MangaScreenModel.State>(State.Loading) {\n\n    private val successState: State.Success?\n        get() = state.value as? State.Success\n\n    val manga: Manga?\n        get() = successState?.manga\n\n    val source: MangaSource?\n        get() = successState?.source\n\n    private val isFavorited: Boolean\n        get() = manga?.favorite ?: false\n\n    private val allChapters: List<ChapterList.Item>?\n        get() = successState?.chapters\n\n    private val filteredChapters: List<ChapterList.Item>?\n        get() = successState?.processedChapters\n\n    val chapterSwipeStartAction = libraryPreferences.swipeChapterEndAction().get()\n    val chapterSwipeEndAction = libraryPreferences.swipeChapterStartAction().get()\n    var autoTrackState = trackPreferences.autoUpdateTrackOnMarkRead().get()\n\n    private val skipFiltered by readerPreferences.skipFiltered().asState(screenModelScope)\n\n    val isUpdateIntervalEnabled =\n        LibraryPreferences.ENTRY_OUTSIDE_RELEASE_PERIOD in libraryPreferences.autoUpdateItemRestrictions().get()\n\n    private val selectedPositions: Array<Int> = arrayOf(-1, -1) // first and last selected index in list\n    private val selectedChapterIds: HashSet<Long> = HashSet()\n\n    internal var isFromChangeCategory: Boolean = false\n\n    internal val autoOpenTrack: Boolean\n        get() = successState?.trackingAvailable == true && trackPreferences.trackOnAddingToLibrary().get()\n\n    /**\n     * Helper function to update the UI state only if it's currently in success state\n     */\n    private inline fun updateSuccessState(func: (State.Success) -> State.Success) {\n        mutableState.update {\n            when (it) {\n                State.Loading -> it\n                is State.Success -> func(it)\n            }\n        }\n    }\n\n    init {\n        screenModelScope.launchIO {\n            combine(\n                getMangaAndChapters.subscribe(mangaId, applyScanlatorFilter = true).distinctUntilChanged(),\n                downloadCache.changes,\n                downloadManager.queueState,\n            ) { mangaAndChapters, _, _ -> mangaAndChapters }\n                .flowWithLifecycle(lifecycle)\n                .collectLatest { (manga, chapters) ->\n                    updateSuccessState {\n                        it.copy(\n                            manga = manga,\n                            chapters = chapters.toChapterListItems(manga),\n                        )\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            getExcludedScanlators.subscribe(mangaId)\n                .flowWithLifecycle(lifecycle)\n                .distinctUntilChanged()\n                .collectLatest { excludedScanlators ->\n                    updateSuccessState {\n                        it.copy(excludedScanlators = excludedScanlators)\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            getAvailableScanlators.subscribe(mangaId)\n                .flowWithLifecycle(lifecycle)\n                .distinctUntilChanged()\n                .collectLatest { availableScanlators ->\n                    updateSuccessState {\n                        it.copy(availableScanlators = availableScanlators)\n                    }\n                }\n        }\n\n        observeDownloads()\n\n        screenModelScope.launchIO {\n            val manga = getMangaAndChapters.awaitManga(mangaId)\n            val chapters = getMangaAndChapters.awaitChapters(mangaId, applyScanlatorFilter = true)\n                .toChapterListItems(manga)\n\n            if (!manga.favorite) {\n                setMangaDefaultChapterFlags.await(manga)\n            }\n\n            val needRefreshInfo = !manga.initialized\n            val needRefreshChapter = chapters.isEmpty()\n\n            // Show what we have earlier\n            mutableState.update {\n                State.Success(\n                    manga = manga,\n                    source = Injekt.get<MangaSourceManager>().getOrStub(manga.source),\n                    isFromSource = isFromSource,\n                    chapters = chapters,\n                    availableScanlators = getAvailableScanlators.await(mangaId),\n                    excludedScanlators = getExcludedScanlators.await(mangaId),\n                    isRefreshingData = needRefreshInfo || needRefreshChapter,\n                    dialog = null,\n                )\n            }\n\n            // Start observe tracking since it only needs mangaId\n            observeTrackers()\n\n            // Fetch info-chapters when needed\n            if (screenModelScope.isActive) {\n                val fetchFromSourceTasks = listOf(\n                    async { if (needRefreshInfo) fetchMangaFromSource() },\n                    async { if (needRefreshChapter) fetchChaptersFromSource() },\n                )\n                fetchFromSourceTasks.awaitAll()\n            }\n\n            // Initial loading finished\n            updateSuccessState { it.copy(isRefreshingData = false) }\n        }\n    }\n\n    fun fetchAllFromSource(manualFetch: Boolean = true) {\n        screenModelScope.launch {\n            updateSuccessState { it.copy(isRefreshingData = true) }\n            val fetchFromSourceTasks = listOf(\n                async { fetchMangaFromSource(manualFetch) },\n                async { fetchChaptersFromSource(manualFetch) },\n            )\n            fetchFromSourceTasks.awaitAll()\n            updateSuccessState { it.copy(isRefreshingData = false) }\n        }\n    }\n\n    // Manga info - start\n\n    /**\n     * Fetch manga information from source.\n     */\n    private suspend fun fetchMangaFromSource(manualFetch: Boolean = false) {\n        val state = successState ?: return\n        try {\n            withIOContext {\n                val networkManga = state.source.getMangaDetails(state.manga.toSManga())\n                updateManga.awaitUpdateFromSource(state.manga, networkManga, manualFetch)\n            }\n        } catch (e: Throwable) {\n            // Ignore early hints \"errors\" that aren't handled by OkHttp\n            if (e is HttpException && e.code == 103) return\n\n            logcat(LogPriority.ERROR, e)\n            screenModelScope.launch {\n                snackbarHostState.showSnackbar(message = with(context) { e.formattedMessage })\n            }\n        }\n    }\n\n    fun toggleFavorite() {\n        toggleFavorite(\n            onRemoved = {\n                screenModelScope.launch {\n                    if (!hasDownloads()) return@launch\n                    val result = snackbarHostState.showSnackbar(\n                        message = context.stringResource(MR.strings.delete_downloads_for_manga),\n                        actionLabel = context.stringResource(MR.strings.action_delete),\n                        withDismissAction = true,\n                    )\n                    if (result == SnackbarResult.ActionPerformed) {\n                        deleteDownloads()\n                    }\n                }\n            },\n        )\n    }\n\n    /**\n     * Update favorite status of manga, (removes / adds) manga (to / from) library.\n     */\n    fun toggleFavorite(\n        onRemoved: () -> Unit,\n        checkDuplicate: Boolean = true,\n    ) {\n        val state = successState ?: return\n        screenModelScope.launchIO {\n            val manga = state.manga\n\n            if (isFavorited) {\n                // Remove from library\n                if (updateManga.awaitUpdateFavorite(manga.id, false)) {\n                    // Remove covers and update last modified in db\n                    if (manga.removeCovers() != manga) {\n                        updateManga.awaitUpdateCoverLastModified(manga.id)\n                    }\n                    withUIContext { onRemoved() }\n                }\n            } else {\n                // Add to library\n                // First, check if duplicate exists if callback is provided\n                if (checkDuplicate) {\n                    val duplicate = getDuplicateLibraryManga.await(manga).getOrNull(0)\n\n                    if (duplicate != null) {\n                        updateSuccessState {\n                            it.copy(\n                                dialog = Dialog.DuplicateManga(manga, duplicate),\n                            )\n                        }\n                        return@launchIO\n                    }\n                }\n\n                // Now check if user previously set categories, when available\n                val categories = getCategories()\n                val defaultCategoryId = libraryPreferences.defaultMangaCategory().get().toLong()\n                val defaultCategory = categories.find { it.id == defaultCategoryId }\n                when {\n                    // Default category set\n                    defaultCategory != null -> {\n                        val result = updateManga.awaitUpdateFavorite(manga.id, true)\n                        if (!result) return@launchIO\n                        moveMangaToCategory(defaultCategory)\n                    }\n\n                    // Automatic 'Default' or no categories\n                    defaultCategoryId == 0L || categories.isEmpty() -> {\n                        val result = updateManga.awaitUpdateFavorite(manga.id, true)\n                        if (!result) return@launchIO\n                        moveMangaToCategory(null)\n                    }\n\n                    // Choose a category\n                    else -> {\n                        isFromChangeCategory = true\n                        showChangeCategoryDialog()\n                    }\n                }\n\n                // Finally match with enhanced tracking when available\n                addTracks.bindEnhancedTrackers(manga, state.source)\n                if (autoOpenTrack) {\n                    showTrackDialog()\n                }\n            }\n        }\n    }\n\n    fun showChangeCategoryDialog() {\n        val manga = successState?.manga ?: return\n        screenModelScope.launch {\n            val categories = getCategories()\n            val selection = getMangaCategoryIds(manga)\n            updateSuccessState { successState ->\n                successState.copy(\n                    dialog = Dialog.ChangeCategory(\n                        manga = manga,\n                        initialSelection = categories.mapAsCheckboxState { it.id in selection }.toImmutableList(),\n                    ),\n                )\n            }\n        }\n    }\n\n    fun showSetMangaFetchIntervalDialog() {\n        val manga = successState?.manga ?: return\n        updateSuccessState {\n            it.copy(dialog = Dialog.SetMangaFetchInterval(manga))\n        }\n    }\n\n    fun setFetchInterval(manga: Manga, interval: Int) {\n        screenModelScope.launchIO {\n            if (\n                updateManga.awaitUpdateFetchInterval(\n                    // Custom intervals are negative\n                    manga.copy(fetchInterval = -interval),\n                )\n            ) {\n                val updatedManga = mangaRepository.getMangaById(manga.id)\n                updateSuccessState { it.copy(manga = updatedManga) }\n            }\n        }\n    }\n\n    /**\n     * Returns true if the manga has any downloads.\n     */\n    private fun hasDownloads(): Boolean {\n        val manga = successState?.manga ?: return false\n        return downloadManager.getDownloadCount(manga) > 0\n    }\n\n    /**\n     * Deletes all the downloads for the manga.\n     */\n    private fun deleteDownloads() {\n        val state = successState ?: return\n        downloadManager.deleteManga(state.manga, state.source)\n    }\n\n    /**\n     * Get user categories.\n     *\n     * @return List of categories, not including the default category\n     */\n    suspend fun getCategories(): List<Category> {\n        return getCategories.await().filterNot { it.isSystemCategory }\n    }\n\n    /**\n     * Gets the category id's the manga is in, if the manga is not in a category, returns the default id.\n     *\n     * @param manga the manga to get categories from.\n     * @return Array of category ids the manga is in, if none returns default id\n     */\n    private suspend fun getMangaCategoryIds(manga: Manga): List<Long> {\n        return getCategories.await(manga.id)\n            .map { it.id }\n    }\n\n    fun moveMangaToCategoriesAndAddToLibrary(manga: Manga, categories: List<Long>) {\n        moveMangaToCategory(categories)\n        if (manga.favorite) return\n\n        screenModelScope.launchIO {\n            updateManga.awaitUpdateFavorite(manga.id, true)\n        }\n    }\n\n    /**\n     * Move the given manga to categories.\n     *\n     * @param categories the selected categories.\n     */\n    private fun moveMangaToCategories(categories: List<Category>) {\n        val categoryIds = categories.map { it.id }\n        moveMangaToCategory(categoryIds)\n    }\n\n    private fun moveMangaToCategory(categoryIds: List<Long>) {\n        screenModelScope.launchIO {\n            setMangaCategories.await(mangaId, categoryIds)\n        }\n    }\n\n    /**\n     * Move the given manga to the category.\n     *\n     * @param category the selected category, or null for default category.\n     */\n    private fun moveMangaToCategory(category: Category?) {\n        moveMangaToCategories(listOfNotNull(category))\n    }\n\n    // Manga info - end\n\n    // Chapters list - start\n\n    private fun observeDownloads() {\n        screenModelScope.launchIO {\n            downloadManager.statusFlow()\n                .filter { it.manga.id == successState?.manga?.id }\n                .catch { error -> logcat(LogPriority.ERROR, error) }\n                .flowWithLifecycle(lifecycle)\n                .collect {\n                    withUIContext {\n                        updateDownloadState(it)\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            downloadManager.progressFlow()\n                .filter { it.manga.id == successState?.manga?.id }\n                .catch { error -> logcat(LogPriority.ERROR, error) }\n                .flowWithLifecycle(lifecycle)\n                .collect {\n                    withUIContext {\n                        updateDownloadState(it)\n                    }\n                }\n        }\n    }\n\n    private fun updateDownloadState(download: MangaDownload) {\n        updateSuccessState { successState ->\n            val modifiedIndex = successState.chapters.indexOfFirst { it.id == download.chapter.id }\n            if (modifiedIndex < 0) return@updateSuccessState successState\n\n            val newChapters = successState.chapters.toMutableList().apply {\n                val item = removeAt(modifiedIndex)\n                    .copy(downloadState = download.status, downloadProgress = download.progress)\n                add(modifiedIndex, item)\n            }\n            successState.copy(chapters = newChapters)\n        }\n    }\n\n    private fun List<Chapter>.toChapterListItems(manga: Manga): List<ChapterList.Item> {\n        val isLocal = manga.isLocal()\n        return map { chapter ->\n            val activeDownload = if (isLocal) {\n                null\n            } else {\n                downloadManager.getQueuedDownloadOrNull(chapter.id)\n            }\n            val downloaded = if (isLocal) {\n                true\n            } else {\n                downloadManager.isChapterDownloaded(\n                    chapter.name,\n                    chapter.scanlator,\n                    manga.title,\n                    manga.source,\n                )\n            }\n            val downloadState = when {\n                activeDownload != null -> activeDownload.status\n                downloaded -> MangaDownload.State.DOWNLOADED\n                else -> MangaDownload.State.NOT_DOWNLOADED\n            }\n\n            ChapterList.Item(\n                chapter = chapter,\n                downloadState = downloadState,\n                downloadProgress = activeDownload?.progress ?: 0,\n                selected = chapter.id in selectedChapterIds,\n            )\n        }\n    }\n\n    /**\n     * Requests an updated list of chapters from the source.\n     */\n    private suspend fun fetchChaptersFromSource(manualFetch: Boolean = false) {\n        val state = successState ?: return\n        try {\n            withIOContext {\n                val chapters = state.source.getChapterList(state.manga.toSManga())\n\n                val newChapters = syncChaptersWithSource.await(\n                    chapters,\n                    state.manga,\n                    state.source,\n                    manualFetch,\n                )\n\n                if (manualFetch) {\n                    downloadNewChapters(newChapters)\n                }\n            }\n        } catch (e: Throwable) {\n            val message = if (e is NoChaptersException) {\n                context.stringResource(MR.strings.no_chapters_error)\n            } else {\n                logcat(LogPriority.ERROR, e)\n                with(context) { e.formattedMessage }\n            }\n\n            screenModelScope.launch {\n                snackbarHostState.showSnackbar(message = message)\n            }\n            val newManga = mangaRepository.getMangaById(mangaId)\n            updateSuccessState { it.copy(manga = newManga, isRefreshingData = false) }\n        }\n    }\n\n    /**\n     * @throws IllegalStateException if the swipe action is [LibraryPreferences.ChapterSwipeAction.Disabled]\n     */\n    fun chapterSwipe(chapterItem: ChapterList.Item, swipeAction: LibraryPreferences.ChapterSwipeAction) {\n        screenModelScope.launch {\n            executeChapterSwipeAction(chapterItem, swipeAction)\n        }\n    }\n\n    /**\n     * @throws IllegalStateException if the swipe action is [LibraryPreferences.ChapterSwipeAction.Disabled]\n     */\n    private fun executeChapterSwipeAction(\n        chapterItem: ChapterList.Item,\n        swipeAction: LibraryPreferences.ChapterSwipeAction,\n    ) {\n        val chapter = chapterItem.chapter\n        when (swipeAction) {\n            LibraryPreferences.ChapterSwipeAction.ToggleRead -> {\n                markChaptersRead(listOf(chapter), !chapter.read)\n            }\n            LibraryPreferences.ChapterSwipeAction.ToggleBookmark -> {\n                bookmarkChapters(listOf(chapter), !chapter.bookmark)\n            }\n            LibraryPreferences.ChapterSwipeAction.Download -> {\n                val downloadAction: ChapterDownloadAction = when (chapterItem.downloadState) {\n                    MangaDownload.State.ERROR,\n                    MangaDownload.State.NOT_DOWNLOADED,\n                    -> ChapterDownloadAction.START_NOW\n                    MangaDownload.State.QUEUE,\n                    MangaDownload.State.DOWNLOADING,\n                    -> ChapterDownloadAction.CANCEL\n                    MangaDownload.State.DOWNLOADED -> ChapterDownloadAction.DELETE\n                }\n                runChapterDownloadActions(\n                    items = listOf(chapterItem),\n                    action = downloadAction,\n                )\n            }\n            LibraryPreferences.ChapterSwipeAction.Disabled -> throw IllegalStateException()\n        }\n    }\n\n    /**\n     * Returns the next unread chapter or null if everything is read.\n     */\n    fun getNextUnreadChapter(): Chapter? {\n        val successState = successState ?: return null\n        return successState.chapters.getNextUnread(successState.manga)\n    }\n\n    private fun getUnreadChapters(): List<Chapter> {\n        val chapterItems = if (skipFiltered) filteredChapters.orEmpty() else allChapters.orEmpty()\n        return chapterItems\n            .filter { (chapter, dlStatus) -> !chapter.read && dlStatus == MangaDownload.State.NOT_DOWNLOADED }\n            .map { it.chapter }\n    }\n\n    private fun getUnreadChaptersSorted(): List<Chapter> {\n        val manga = successState?.manga ?: return emptyList()\n        val chaptersSorted = getUnreadChapters().sortedWith(getChapterSort(manga))\n        return if (manga.sortDescending()) chaptersSorted.reversed() else chaptersSorted\n    }\n\n    private fun startDownload(\n        chapters: List<Chapter>,\n        startNow: Boolean,\n    ) {\n        val successState = successState ?: return\n\n        screenModelScope.launchNonCancellable {\n            if (startNow) {\n                val chapterId = chapters.singleOrNull()?.id ?: return@launchNonCancellable\n                downloadManager.startDownloadNow(chapterId)\n            } else {\n                downloadChapters(chapters)\n            }\n\n            if (!isFavorited && !successState.hasPromptedToAddBefore) {\n                updateSuccessState { state ->\n                    state.copy(hasPromptedToAddBefore = true)\n                }\n                val result = snackbarHostState.showSnackbar(\n                    message = context.stringResource(AYMR.strings.snack_add_to_manga_library),\n                    actionLabel = context.stringResource(MR.strings.action_add),\n                    withDismissAction = true,\n                )\n                if (result == SnackbarResult.ActionPerformed && !isFavorited) {\n                    toggleFavorite()\n                }\n            }\n        }\n    }\n\n    fun runChapterDownloadActions(\n        items: List<ChapterList.Item>,\n        action: ChapterDownloadAction,\n    ) {\n        when (action) {\n            ChapterDownloadAction.START -> {\n                startDownload(items.map { it.chapter }, false)\n                if (items.any { it.downloadState == MangaDownload.State.ERROR }) {\n                    downloadManager.startDownloads()\n                }\n            }\n            ChapterDownloadAction.START_NOW -> {\n                val chapter = items.singleOrNull()?.chapter ?: return\n                startDownload(listOf(chapter), true)\n            }\n            ChapterDownloadAction.CANCEL -> {\n                val chapterId = items.singleOrNull()?.id ?: return\n                cancelDownload(chapterId)\n            }\n            ChapterDownloadAction.DELETE -> {\n                deleteChapters(items.map { it.chapter })\n            }\n        }\n    }\n\n    fun runDownloadAction(action: DownloadAction) {\n        val chaptersToDownload = when (action) {\n            DownloadAction.NEXT_1_ITEM -> getUnreadChaptersSorted().take(1)\n            DownloadAction.NEXT_5_ITEMS -> getUnreadChaptersSorted().take(5)\n            DownloadAction.NEXT_10_ITEMS -> getUnreadChaptersSorted().take(10)\n            DownloadAction.NEXT_25_ITEMS -> getUnreadChaptersSorted().take(25)\n\n            DownloadAction.UNVIEWED_ITEMS -> getUnreadChapters()\n        }\n        if (chaptersToDownload.isNotEmpty()) {\n            startDownload(chaptersToDownload, false)\n        }\n    }\n\n    private fun cancelDownload(chapterId: Long) {\n        val activeDownload = downloadManager.getQueuedDownloadOrNull(chapterId) ?: return\n        downloadManager.cancelQueuedDownloads(listOf(activeDownload))\n        updateDownloadState(activeDownload.apply { status = MangaDownload.State.NOT_DOWNLOADED })\n    }\n\n    fun markPreviousChapterRead(pointer: Chapter) {\n        val manga = successState?.manga ?: return\n        val chapters = filteredChapters.orEmpty().map { it.chapter }\n        val prevChapters = if (manga.sortDescending()) chapters.asReversed() else chapters\n        val pointerPos = prevChapters.indexOf(pointer)\n        if (pointerPos != -1) markChaptersRead(prevChapters.take(pointerPos), true)\n    }\n\n    /**\n     * Mark the selected chapter list as read/unread.\n     * @param chapters the list of selected chapters.\n     * @param read whether to mark chapters as read or unread.\n     */\n    fun markChaptersRead(chapters: List<Chapter>, read: Boolean) {\n        toggleAllSelection(false)\n        if (chapters.isEmpty()) return\n        screenModelScope.launchIO {\n            setReadStatus.await(\n                read = read,\n                chapters = chapters.toTypedArray(),\n            )\n\n            if (!read || successState?.hasLoggedInTrackers == false || autoTrackState == AutoTrackState.NEVER) {\n                return@launchIO\n            }\n\n            refreshTrackers()\n\n            val tracks = getTracks.await(mangaId)\n            val maxChapterNumber = chapters.maxOf { it.chapterNumber }\n            val shouldPromptTrackingUpdate = tracks.any { track -> maxChapterNumber > track.lastChapterRead }\n\n            if (!shouldPromptTrackingUpdate) return@launchIO\n\n            if (autoTrackState == AutoTrackState.ALWAYS) {\n                trackChapter.await(context, mangaId, maxChapterNumber)\n                withUIContext {\n                    context.toast(\n                        context.stringResource(AYMR.strings.trackers_updated_summary_manga, maxChapterNumber.toInt()),\n                    )\n                }\n                return@launchIO\n            }\n\n            val result = snackbarHostState.showSnackbar(\n                message = context.stringResource(MR.strings.confirm_tracker_update, maxChapterNumber.toInt()),\n                actionLabel = context.stringResource(MR.strings.action_ok),\n                duration = SnackbarDuration.Short,\n                withDismissAction = true,\n            )\n            if (result == SnackbarResult.ActionPerformed) {\n                trackChapter.await(context, mangaId, maxChapterNumber)\n            }\n        }\n    }\n\n    private suspend fun refreshTrackers(\n        refreshTracks: RefreshMangaTracks = Injekt.get(),\n    ) {\n        refreshTracks.await(mangaId)\n            .filter { it.first != null }\n            .forEach { (track, e) ->\n                logcat(LogPriority.ERROR, e) {\n                    \"Failed to refresh track data mangaId=$mangaId for service ${track!!.id}\"\n                }\n                withUIContext {\n                    context.toast(\n                        context.stringResource(\n                            MR.strings.track_error,\n                            track!!.name,\n                            e.message ?: \"\",\n                        ),\n                    )\n                }\n            }\n    }\n\n    /**\n     * Downloads the given list of chapters with the manager.\n     * @param chapters the list of chapters to download.\n     */\n    private fun downloadChapters(chapters: List<Chapter>) {\n        val manga = successState?.manga ?: return\n        downloadManager.downloadChapters(manga, chapters)\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Bookmarks the given list of chapters.\n     * @param chapters the list of chapters to bookmark.\n     */\n    fun bookmarkChapters(chapters: List<Chapter>, bookmarked: Boolean) {\n        screenModelScope.launchIO {\n            chapters\n                .filterNot { it.bookmark == bookmarked }\n                .map { ChapterUpdate(id = it.id, bookmark = bookmarked) }\n                .let { updateChapter.awaitAll(it) }\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Deletes the given list of chapter.\n     *\n     * @param chapters the list of chapters to delete.\n     */\n    fun deleteChapters(chapters: List<Chapter>) {\n        screenModelScope.launchNonCancellable {\n            try {\n                successState?.let { state ->\n                    downloadManager.deleteChapters(\n                        chapters,\n                        state.manga,\n                        state.source,\n                    )\n                }\n            } catch (e: Throwable) {\n                logcat(LogPriority.ERROR, e)\n            }\n        }\n    }\n\n    private fun downloadNewChapters(chapters: List<Chapter>) {\n        screenModelScope.launchNonCancellable {\n            val manga = successState?.manga ?: return@launchNonCancellable\n            val chaptersToDownload = filterChaptersForDownload.await(manga, chapters)\n\n            if (chaptersToDownload.isNotEmpty()) {\n                downloadChapters(chaptersToDownload)\n            }\n        }\n    }\n\n    /**\n     * Sets the read filter and requests an UI update.\n     * @param state whether to display only unread chapters or all chapters.\n     */\n    fun setUnreadFilter(state: TriState) {\n        val manga = successState?.manga ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Manga.SHOW_ALL\n            TriState.ENABLED_IS -> Manga.CHAPTER_SHOW_UNREAD\n            TriState.ENABLED_NOT -> Manga.CHAPTER_SHOW_READ\n        }\n        screenModelScope.launchNonCancellable {\n            setMangaChapterFlags.awaitSetUnreadFilter(manga, flag)\n        }\n    }\n\n    /**\n     * Sets the download filter and requests an UI update.\n     * @param state whether to display only downloaded chapters or all chapters.\n     */\n    fun setDownloadedFilter(state: TriState) {\n        val manga = successState?.manga ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Manga.SHOW_ALL\n            TriState.ENABLED_IS -> Manga.CHAPTER_SHOW_DOWNLOADED\n            TriState.ENABLED_NOT -> Manga.CHAPTER_SHOW_NOT_DOWNLOADED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setMangaChapterFlags.awaitSetDownloadedFilter(manga, flag)\n        }\n    }\n\n    /**\n     * Sets the bookmark filter and requests an UI update.\n     * @param state whether to display only bookmarked chapters or all chapters.\n     */\n    fun setBookmarkedFilter(state: TriState) {\n        val manga = successState?.manga ?: return\n\n        val flag = when (state) {\n            TriState.DISABLED -> Manga.SHOW_ALL\n            TriState.ENABLED_IS -> Manga.CHAPTER_SHOW_BOOKMARKED\n            TriState.ENABLED_NOT -> Manga.CHAPTER_SHOW_NOT_BOOKMARKED\n        }\n\n        screenModelScope.launchNonCancellable {\n            setMangaChapterFlags.awaitSetBookmarkFilter(manga, flag)\n        }\n    }\n\n    /**\n     * Sets the active display mode.\n     * @param mode the mode to set.\n     */\n    fun setDisplayMode(mode: Long) {\n        val manga = successState?.manga ?: return\n\n        screenModelScope.launchNonCancellable {\n            setMangaChapterFlags.awaitSetDisplayMode(manga, mode)\n        }\n    }\n\n    /**\n     * Sets the sorting method and requests an UI update.\n     * @param sort the sorting mode.\n     */\n    fun setSorting(sort: Long) {\n        val manga = successState?.manga ?: return\n\n        screenModelScope.launchNonCancellable {\n            setMangaChapterFlags.awaitSetSortingModeOrFlipOrder(manga, sort)\n        }\n    }\n\n    fun setCurrentSettingsAsDefault(applyToExisting: Boolean) {\n        val manga = successState?.manga ?: return\n        screenModelScope.launchNonCancellable {\n            libraryPreferences.setChapterSettingsDefault(manga)\n            if (applyToExisting) {\n                setMangaDefaultChapterFlags.awaitAll()\n            }\n            snackbarHostState.showSnackbar(\n                message = context.stringResource(MR.strings.chapter_settings_updated),\n            )\n        }\n    }\n\n    fun resetToDefaultSettings() {\n        val manga = successState?.manga ?: return\n        screenModelScope.launchNonCancellable {\n            setMangaDefaultChapterFlags.await(manga)\n        }\n    }\n\n    fun toggleSelection(\n        item: ChapterList.Item,\n        selected: Boolean,\n        userSelected: Boolean = false,\n        fromLongPress: Boolean = false,\n    ) {\n        updateSuccessState { successState ->\n            val newChapters = successState.processedChapters.toMutableList().apply {\n                val selectedIndex = successState.processedChapters.indexOfFirst { it.id == item.chapter.id }\n                if (selectedIndex < 0) return@apply\n\n                val selectedItem = get(selectedIndex)\n                if ((selectedItem.selected && selected) || (!selectedItem.selected && !selected)) return@apply\n\n                val firstSelection = none { it.selected }\n                set(selectedIndex, selectedItem.copy(selected = selected))\n                selectedChapterIds.addOrRemove(item.id, selected)\n\n                if (selected && userSelected && fromLongPress) {\n                    if (firstSelection) {\n                        selectedPositions[0] = selectedIndex\n                        selectedPositions[1] = selectedIndex\n                    } else {\n                        // Try to select the items in-between when possible\n                        val range: IntRange\n                        if (selectedIndex < selectedPositions[0]) {\n                            range = selectedIndex + 1..<selectedPositions[0]\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            range = (selectedPositions[1] + 1)..<selectedIndex\n                            selectedPositions[1] = selectedIndex\n                        } else {\n                            // Just select itself\n                            range = IntRange.EMPTY\n                        }\n\n                        range.forEach {\n                            val inbetweenItem = get(it)\n                            if (!inbetweenItem.selected) {\n                                selectedChapterIds.add(inbetweenItem.id)\n                                set(it, inbetweenItem.copy(selected = true))\n                            }\n                        }\n                    }\n                } else if (userSelected && !fromLongPress) {\n                    if (!selected) {\n                        if (selectedIndex == selectedPositions[0]) {\n                            selectedPositions[0] = indexOfFirst { it.selected }\n                        } else if (selectedIndex == selectedPositions[1]) {\n                            selectedPositions[1] = indexOfLast { it.selected }\n                        }\n                    } else {\n                        if (selectedIndex < selectedPositions[0]) {\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            selectedPositions[1] = selectedIndex\n                        }\n                    }\n                }\n            }\n            successState.copy(chapters = newChapters)\n        }\n    }\n\n    fun toggleAllSelection(selected: Boolean) {\n        updateSuccessState { successState ->\n            val newChapters = successState.chapters.map {\n                selectedChapterIds.addOrRemove(it.id, selected)\n                it.copy(selected = selected)\n            }\n            selectedPositions[0] = -1\n            selectedPositions[1] = -1\n            successState.copy(chapters = newChapters)\n        }\n    }\n\n    fun invertSelection() {\n        updateSuccessState { successState ->\n            val newChapters = successState.chapters.map {\n                selectedChapterIds.addOrRemove(it.id, !it.selected)\n                it.copy(selected = !it.selected)\n            }\n            selectedPositions[0] = -1\n            selectedPositions[1] = -1\n            successState.copy(chapters = newChapters)\n        }\n    }\n\n    // Chapters list - end\n\n    // Track sheet - start\n\n    private fun observeTrackers() {\n        val manga = successState?.manga ?: return\n\n        screenModelScope.launchIO {\n            combine(\n                getTracks.subscribe(manga.id).catch { logcat(LogPriority.ERROR, it) },\n                trackerManager.loggedInTrackersFlow(),\n            ) { mangaTracks, loggedInTrackers ->\n                // Show only if the service supports this manga's source\n                val supportedTrackers = loggedInTrackers.filter {\n                    (it as? EnhancedMangaTracker)?.accept(source!!) ?: true\n                }\n                val supportedTrackerIds = supportedTrackers.map { it.id }.toHashSet()\n                val supportedTrackerTracks = mangaTracks.filter { it.trackerId in supportedTrackerIds }\n                supportedTrackerTracks.size to supportedTrackers.isNotEmpty()\n            }\n                .flowWithLifecycle(lifecycle)\n                .distinctUntilChanged()\n                .collectLatest { (trackingCount, hasLoggedInTrackers) ->\n                    updateSuccessState {\n                        it.copy(\n                            trackingCount = trackingCount,\n                            hasLoggedInTrackers = hasLoggedInTrackers,\n                        )\n                    }\n                }\n        }\n    }\n\n    // Track sheet - end\n\n    sealed interface Dialog {\n        data class ChangeCategory(\n            val manga: Manga,\n            val initialSelection: ImmutableList<CheckboxState<Category>>,\n        ) : Dialog\n        data class DeleteChapters(val chapters: List<Chapter>) : Dialog\n        data class DuplicateManga(val manga: Manga, val duplicate: Manga) : Dialog\n        data class Migrate(val newManga: Manga, val oldManga: Manga) : Dialog\n        data class SetMangaFetchInterval(val manga: Manga) : Dialog\n        data object SettingsSheet : Dialog\n        data object TrackSheet : Dialog\n        data object FullCover : Dialog\n    }\n\n    fun dismissDialog() {\n        updateSuccessState { it.copy(dialog = null) }\n    }\n\n    fun showDeleteChapterDialog(chapters: List<Chapter>) {\n        updateSuccessState { it.copy(dialog = Dialog.DeleteChapters(chapters)) }\n    }\n\n    fun showSettingsDialog() {\n        updateSuccessState { it.copy(dialog = Dialog.SettingsSheet) }\n    }\n\n    fun showTrackDialog() {\n        updateSuccessState { it.copy(dialog = Dialog.TrackSheet) }\n    }\n\n    fun showCoverDialog() {\n        updateSuccessState { it.copy(dialog = Dialog.FullCover) }\n    }\n\n    fun showMigrateDialog(duplicate: Manga) {\n        val manga = successState?.manga ?: return\n        updateSuccessState { it.copy(dialog = Dialog.Migrate(newManga = manga, oldManga = duplicate)) }\n    }\n\n    fun setExcludedScanlators(excludedScanlators: Set<String>) {\n        screenModelScope.launchIO {\n            setExcludedScanlators.await(mangaId, excludedScanlators)\n        }\n    }\n\n    sealed interface State {\n        @Immutable\n        data object Loading : State\n\n        @Immutable\n        data class Success(\n            val manga: Manga,\n            val source: MangaSource,\n            val isFromSource: Boolean,\n            val chapters: List<ChapterList.Item>,\n            val availableScanlators: Set<String>,\n            val excludedScanlators: Set<String>,\n            val trackingCount: Int = 0,\n            val hasLoggedInTrackers: Boolean = false,\n            val isRefreshingData: Boolean = false,\n            val dialog: Dialog? = null,\n            val hasPromptedToAddBefore: Boolean = false,\n        ) : State {\n            val processedChapters by lazy {\n                chapters.applyFilters(manga).toList()\n            }\n\n            val isAnySelected by lazy {\n                chapters.fastAny { it.selected }\n            }\n\n            val chapterListItems by lazy {\n                processedChapters.insertSeparators { before, after ->\n                    val (lowerChapter, higherChapter) = if (manga.sortDescending()) {\n                        after to before\n                    } else {\n                        before to after\n                    }\n                    if (higherChapter == null) return@insertSeparators null\n\n                    if (lowerChapter == null) {\n                        floor(higherChapter.chapter.chapterNumber)\n                            .toInt()\n                            .minus(1)\n                            .coerceAtLeast(0)\n                    } else {\n                        calculateChapterGap(higherChapter.chapter, lowerChapter.chapter)\n                    }\n                        .takeIf { it > 0 }\n                        ?.let { missingCount ->\n                            ChapterList.MissingCount(\n                                id = \"${lowerChapter?.id}-${higherChapter.id}\",\n                                count = missingCount,\n                            )\n                        }\n                }\n            }\n\n            val scanlatorFilterActive: Boolean\n                get() = excludedScanlators.intersect(availableScanlators).isNotEmpty()\n\n            val filterActive: Boolean\n                get() = scanlatorFilterActive || manga.chaptersFiltered()\n\n            val trackingAvailable: Boolean\n                get() = trackingCount > 0\n\n            /**\n             * Applies the view filters to the list of chapters obtained from the database.\n             * @return an observable of the list of chapters filtered and sorted.\n             */\n            private fun List<ChapterList.Item>.applyFilters(manga: Manga): Sequence<ChapterList.Item> {\n                val isLocalManga = manga.isLocal()\n                val unreadFilter = manga.unreadFilter\n                val downloadedFilter = manga.downloadedFilter\n                val bookmarkedFilter = manga.bookmarkedFilter\n                return asSequence()\n                    .filter { (chapter) -> applyFilter(unreadFilter) { !chapter.read } }\n                    .filter { (chapter) -> applyFilter(bookmarkedFilter) { chapter.bookmark } }\n                    .filter { applyFilter(downloadedFilter) { it.isDownloaded || isLocalManga } }\n                    .sortedWith { (chapter1), (chapter2) ->\n                        getChapterSort(manga).invoke(\n                            chapter1,\n                            chapter2,\n                        )\n                    }\n            }\n        }\n    }\n}\n\n@Immutable\nsealed class ChapterList {\n    @Immutable\n    data class MissingCount(\n        val id: String,\n        val count: Int,\n    ) : ChapterList()\n\n    @Immutable\n    data class Item(\n        val chapter: Chapter,\n        val downloadState: MangaDownload.State,\n        val downloadProgress: Int,\n        val selected: Boolean = false,\n    ) : ChapterList() {\n        val id = chapter.id\n        val isDownloaded = downloadState == MangaDownload.State.DOWNLOADED\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/track/MangaTrackInfoDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.manga.track\n\nimport android.app.Application\nimport android.content.Context\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.text.input.rememberTextFieldState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SelectableDates\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.collectAsState\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.platform.LocalContext\nimport androidx.compose.ui.text.style.TextAlign\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.track.manga.interactor.RefreshMangaTracks\nimport eu.kanade.domain.track.manga.model.toDbTrack\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.presentation.track.TrackDateSelector\nimport eu.kanade.presentation.track.TrackItemSelector\nimport eu.kanade.presentation.track.TrackScoreSelector\nimport eu.kanade.presentation.track.TrackStatusSelector\nimport eu.kanade.presentation.track.manga.MangaTrackInfoDialogHome\nimport eu.kanade.presentation.track.manga.MangaTrackerSearch\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.data.track.DeletableMangaTracker\nimport eu.kanade.tachiyomi.data.track.EnhancedMangaTracker\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport eu.kanade.tachiyomi.util.lang.convertEpochMillisZone\nimport eu.kanade.tachiyomi.util.system.copyToClipboard\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.track.manga.interactor.DeleteMangaTrack\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.LabeledCheckbox\nimport tachiyomi.presentation.core.components.material.AlertDialogContent\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.ZoneId\nimport java.time.ZoneOffset\nimport tachiyomi.domain.track.manga.model.MangaTrack as DbMangaTrack\n\ndata class MangaTrackInfoDialogHomeScreen(\n    private val mangaId: Long,\n    private val mangaTitle: String,\n    private val sourceId: Long,\n) : Screen() {\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val screenModel = rememberScreenModel { Model(mangaId, sourceId) }\n\n        val dateFormat = remember {\n            UiPreferences.dateFormat(\n                Injekt.get<UiPreferences>().dateFormat().get(),\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        MangaTrackInfoDialogHome(\n            trackItems = state.trackItems,\n            dateFormat = dateFormat,\n            onStatusClick = {\n                navigator.push(\n                    TrackStatusSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onChapterClick = {\n                navigator.push(\n                    TrackChapterSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onScoreClick = {\n                navigator.push(\n                    TrackScoreSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onStartDateEdit = {\n                navigator.push(\n                    TrackDateSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                        start = true,\n                    ),\n                )\n            },\n            onEndDateEdit = {\n                navigator.push(\n                    TrackDateSelectorScreen(\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                        start = false,\n                    ),\n                )\n            },\n            onNewSearch = {\n                if (it.tracker is EnhancedMangaTracker) {\n                    screenModel.registerEnhancedTracking(it)\n                } else {\n                    navigator.push(\n                        TrackServiceSearchScreen(\n                            mangaId = mangaId,\n                            initialQuery = it.track?.title ?: mangaTitle,\n                            currentUrl = it.track?.remoteUrl,\n                            serviceId = it.tracker.id,\n                        ),\n                    )\n                }\n            },\n            onOpenInBrowser = { openTrackerInBrowser(context, it) },\n            onRemoved = {\n                navigator.push(\n                    TrackerMangaRemoveScreen(\n                        mangaId = mangaId,\n                        track = it.track!!,\n                        serviceId = it.tracker.id,\n                    ),\n                )\n            },\n            onCopyLink = { context.copyTrackerLink(it) },\n            onTogglePrivate = screenModel::togglePrivate,\n        )\n    }\n\n    /**\n     * Opens registered tracker url in browser\n     */\n    private fun openTrackerInBrowser(context: Context, trackItem: MangaTrackItem) {\n        val url = trackItem.track?.remoteUrl ?: return\n        if (url.isNotBlank()) {\n            context.openInBrowser(url)\n        }\n    }\n\n    private fun Context.copyTrackerLink(trackItem: MangaTrackItem) {\n        val url = trackItem.track?.remoteUrl ?: return\n        if (url.isNotBlank()) {\n            copyToClipboard(url, url)\n        }\n    }\n\n    private class Model(\n        private val mangaId: Long,\n        private val sourceId: Long,\n        private val getTracks: GetMangaTracks = Injekt.get(),\n    ) : StateScreenModel<Model.State>(State()) {\n\n        init {\n            screenModelScope.launch {\n                refreshTrackers()\n            }\n\n            screenModelScope.launch {\n                getTracks.subscribe(mangaId)\n                    .catch { logcat(LogPriority.ERROR, it) }\n                    .distinctUntilChanged()\n                    .map { it.mapToTrackItem() }\n                    .collectLatest { trackItems ->\n                        mutableState.update {\n                            it.copy(\n                                trackItems = trackItems,\n                            )\n                        }\n                    }\n            }\n        }\n\n        fun registerEnhancedTracking(item: MangaTrackItem) {\n            item.tracker as EnhancedMangaTracker\n            screenModelScope.launchNonCancellable {\n                val manga = Injekt.get<GetManga>().await(mangaId) ?: return@launchNonCancellable\n                try {\n                    val matchResult = item.tracker.match(manga) ?: throw Exception()\n                    item.tracker.mangaService.register(matchResult, mangaId)\n                } catch (e: Exception) {\n                    withUIContext { Injekt.get<Application>().toast(MR.strings.error_no_match) }\n                }\n            }\n        }\n\n        private suspend fun refreshTrackers() {\n            val refreshTracks = Injekt.get<RefreshMangaTracks>()\n            val context = Injekt.get<Application>()\n\n            refreshTracks.await(mangaId)\n                .filter { it.first != null }\n                .forEach { (track, e) ->\n                    logcat(LogPriority.ERROR, e) {\n                        \"Failed to refresh track data mangaId=$mangaId for service ${track!!.name}\"\n                    }\n                    withUIContext {\n                        context.toast(\n                            context.stringResource(\n                                MR.strings.track_error,\n                                track!!.name,\n                                e.message ?: \"\",\n                            ),\n                        )\n                    }\n                }\n        }\n\n        fun togglePrivate(item: MangaTrackItem) {\n            screenModelScope.launchNonCancellable {\n                (item.tracker as? MangaTracker)?.setRemotePrivate(item.track!!.toDbTrack(), !item.track.private)\n            }\n        }\n\n        private fun List<MangaTrack>.mapToTrackItem(): List<MangaTrackItem> {\n            val loggedInTrackers = Injekt.get<TrackerManager>().loggedInTrackers().filter {\n                it is MangaTracker\n            }\n            val source = Injekt.get<MangaSourceManager>().getOrStub(sourceId)\n            return loggedInTrackers\n                // Map to TrackItem\n                .map { service -> MangaTrackItem(find { it.trackerId == service.id }, service) }\n                // Show only if the service supports this manga's source\n                .filter { (it.tracker as? EnhancedMangaTracker)?.accept(source) ?: true }\n        }\n\n        @Immutable\n        data class State(\n            val trackItems: List<MangaTrackItem> = emptyList(),\n        )\n    }\n}\n\nprivate data class TrackStatusSelectorScreen(\n    private val track: DbMangaTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n        TrackStatusSelector(\n            selection = state.selection,\n            onSelectionChange = screenModel::setSelection,\n            selections = remember { screenModel.getSelections() },\n            onConfirm = {\n                screenModel.setStatus()\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n        )\n    }\n\n    private class Model(\n        private val track: DbMangaTrack,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State(track.status)) {\n\n        fun getSelections(): Map<Long, StringResource?> {\n            return tracker.mangaService.getStatusListManga().associateWith {\n                (tracker as? MangaTracker)?.getStatusForManga(it)\n            }\n        }\n\n        fun setSelection(selection: Long) {\n            mutableState.update { it.copy(selection = selection) }\n        }\n\n        fun setStatus() {\n            screenModelScope.launchNonCancellable {\n                tracker.mangaService.setRemoteMangaStatus(track.toDbTrack(), state.value.selection)\n            }\n        }\n\n        @Immutable\n        data class State(\n            val selection: Long,\n        )\n    }\n}\n\nprivate data class TrackChapterSelectorScreen(\n    private val track: DbMangaTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        TrackItemSelector(\n            selection = state.selection,\n            onSelectionChange = screenModel::setSelection,\n            range = remember { screenModel.getRange() },\n            onConfirm = {\n                screenModel.setChapter()\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n            isManga = true,\n        )\n    }\n\n    private class Model(\n        private val track: DbMangaTrack,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State(track.lastChapterRead.toInt())) {\n\n        fun getRange(): Iterable<Int> {\n            val endRange = if (track.totalChapters > 0) {\n                track.totalChapters\n            } else {\n                10000\n            }\n            return 0..endRange.toInt()\n        }\n\n        fun setSelection(selection: Int) {\n            mutableState.update { it.copy(selection = selection) }\n        }\n\n        fun setChapter() {\n            screenModelScope.launchNonCancellable {\n                tracker.mangaService.setRemoteLastChapterRead(\n                    track.toDbTrack(),\n                    state.value.selection,\n                )\n            }\n        }\n\n        @Immutable\n        data class State(\n            val selection: Int,\n        )\n    }\n}\n\nprivate data class TrackScoreSelectorScreen(\n    private val track: DbMangaTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val state by screenModel.state.collectAsState()\n\n        TrackScoreSelector(\n            selection = state.selection,\n            onSelectionChange = screenModel::setSelection,\n            selections = remember { screenModel.getSelections() },\n            onConfirm = {\n                screenModel.setScore()\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n        )\n    }\n\n    private class Model(\n        private val track: DbMangaTrack,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State(tracker.mangaService.displayScore(track))) {\n\n        fun getSelections(): ImmutableList<String> {\n            return tracker.mangaService.getScoreList()\n        }\n\n        fun setSelection(selection: String) {\n            mutableState.update { it.copy(selection = selection) }\n        }\n\n        fun setScore() {\n            screenModelScope.launchNonCancellable {\n                tracker.mangaService.setRemoteScore(track.toDbTrack(), state.value.selection)\n            }\n        }\n\n        @Immutable\n        data class State(\n            val selection: String,\n        )\n    }\n}\n\nprivate data class TrackDateSelectorScreen(\n    private val track: DbMangaTrack,\n    private val serviceId: Long,\n    private val start: Boolean,\n) : Screen() {\n\n    @Transient\n    private val selectableDates = object : SelectableDates {\n        override fun isSelectableDate(utcTimeMillis: Long): Boolean {\n            val dateToCheck = Instant.ofEpochMilli(utcTimeMillis)\n                .atZone(ZoneOffset.systemDefault())\n                .toLocalDate()\n\n            if (dateToCheck > LocalDate.now()) {\n                // Disallow future dates\n                return false\n            }\n\n            return if (start && track.finishDate > 0) {\n                // Disallow start date to be set later than finish date\n                val dateFinished = Instant.ofEpochMilli(track.finishDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                dateToCheck <= dateFinished\n            } else if (!start && track.startDate > 0) {\n                // Disallow end date to be set earlier than start date\n                val dateStarted = Instant.ofEpochMilli(track.startDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                dateToCheck >= dateStarted\n            } else {\n                // Nothing set before\n                true\n            }\n        }\n\n        override fun isSelectableYear(year: Int): Boolean {\n            if (year > LocalDate.now().year) {\n                // Disallow future dates\n                return false\n            }\n\n            return if (start && track.finishDate > 0) {\n                // Disallow start date to be set later than finish date\n                val dateFinished = Instant.ofEpochMilli(track.finishDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                    .year\n                year <= dateFinished\n            } else if (!start && track.startDate > 0) {\n                // Disallow end date to be set earlier than start date\n                val dateStarted = Instant.ofEpochMilli(track.startDate)\n                    .atZone(ZoneId.systemDefault())\n                    .toLocalDate()\n                    .year\n                year >= dateStarted\n            } else {\n                // Nothing set before\n                true\n            }\n        }\n    }\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n                start = start,\n            )\n        }\n\n        val canRemove = if (start) {\n            track.startDate > 0\n        } else {\n            track.finishDate > 0\n        }\n        TrackDateSelector(\n            title = if (start) {\n                stringResource(MR.strings.track_started_reading_date)\n            } else {\n                stringResource(MR.strings.track_finished_reading_date)\n            },\n            initialSelectedDateMillis = screenModel.initialSelection,\n            selectableDates = selectableDates,\n            onConfirm = {\n                screenModel.setDate(it)\n                navigator.pop()\n            },\n            onRemove = { screenModel.confirmRemoveDate(navigator) }.takeIf { canRemove },\n            onDismissRequest = navigator::pop,\n        )\n    }\n\n    private class Model(\n        private val track: DbMangaTrack,\n        private val tracker: Tracker,\n        private val start: Boolean,\n    ) : ScreenModel {\n\n        // In UTC\n        val initialSelection: Long\n            get() {\n                val millis =\n                    (if (start) track.startDate else track.finishDate)\n                        .takeIf { it != 0L }\n                        ?: Instant.now().toEpochMilli()\n                return millis.convertEpochMillisZone(ZoneOffset.systemDefault(), ZoneOffset.UTC)\n            }\n\n        // In UTC\n        fun setDate(millis: Long) {\n            // Convert to local time\n            val localMillis =\n                millis.convertEpochMillisZone(ZoneOffset.UTC, ZoneOffset.systemDefault())\n            screenModelScope.launchNonCancellable {\n                if (start) {\n                    tracker.mangaService.setRemoteStartDate(track.toDbTrack(), localMillis)\n                } else {\n                    tracker.mangaService.setRemoteFinishDate(track.toDbTrack(), localMillis)\n                }\n            }\n        }\n\n        fun confirmRemoveDate(navigator: Navigator) {\n            navigator.push(TrackDateRemoverScreen(track, tracker.id, start))\n        }\n    }\n}\n\nprivate data class TrackDateRemoverScreen(\n    private val track: DbMangaTrack,\n    private val serviceId: Long,\n    private val start: Boolean,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n                start = start,\n            )\n        }\n        AlertDialogContent(\n            modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),\n            icon = {\n                Icon(\n                    imageVector = Icons.Default.Delete,\n                    contentDescription = null,\n                )\n            },\n            title = {\n                Text(\n                    text = stringResource(MR.strings.track_remove_date_conf_title),\n                    textAlign = TextAlign.Center,\n                )\n            },\n            text = {\n                val serviceName = screenModel.getName()\n                Text(\n                    text = if (start) {\n                        stringResource(MR.strings.track_remove_start_date_conf_text, serviceName)\n                    } else {\n                        stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName)\n                    },\n                )\n            },\n            buttons = {\n                Row(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(\n                        MaterialTheme.padding.small,\n                        Alignment.End,\n                    ),\n                ) {\n                    TextButton(onClick = navigator::pop) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    FilledTonalButton(\n                        onClick = {\n                            screenModel.removeDate()\n                            navigator.popUntil { it is MangaTrackInfoDialogHomeScreen }\n                        },\n                        colors = ButtonDefaults.filledTonalButtonColors(\n                            containerColor = MaterialTheme.colorScheme.errorContainer,\n                            contentColor = MaterialTheme.colorScheme.onErrorContainer,\n                        ),\n                    ) {\n                        Text(text = stringResource(MR.strings.action_remove))\n                    }\n                }\n            },\n        )\n    }\n\n    private class Model(\n        private val track: DbMangaTrack,\n        private val tracker: Tracker,\n        private val start: Boolean,\n    ) : ScreenModel {\n\n        fun getName() = tracker.name\n\n        fun removeDate() {\n            screenModelScope.launchNonCancellable {\n                if (start) {\n                    tracker.mangaService.setRemoteStartDate(track.toDbTrack(), 0)\n                } else {\n                    tracker.mangaService.setRemoteFinishDate(track.toDbTrack(), 0)\n                }\n            }\n        }\n    }\n}\n\ndata class TrackServiceSearchScreen(\n    private val mangaId: Long,\n    private val initialQuery: String,\n    private val currentUrl: String?,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                mangaId = mangaId,\n                currentUrl = currentUrl,\n                initialQuery = initialQuery,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n\n        val state by screenModel.state.collectAsState()\n\n        val textFieldState = rememberTextFieldState(initialQuery)\n        MangaTrackerSearch(\n            state = textFieldState,\n            onDispatchQuery = { screenModel.trackingSearch(textFieldState.text.toString()) },\n            queryResult = state.queryResult,\n            selected = state.selected,\n            onSelectedChange = screenModel::updateSelection,\n            onConfirmSelection = f@{ private: Boolean ->\n                val selected = state.selected ?: return@f\n                selected.private = private\n                screenModel.registerTracking(selected)\n                navigator.pop()\n            },\n            onDismissRequest = navigator::pop,\n            supportsPrivateTracking = screenModel.supportsPrivateTracking,\n        )\n    }\n\n    private class Model(\n        private val mangaId: Long,\n        private val currentUrl: String? = null,\n        initialQuery: String,\n        private val tracker: Tracker,\n    ) : StateScreenModel<Model.State>(State()) {\n\n        val supportsPrivateTracking = tracker.supportsPrivateTracking\n\n        init {\n            // Run search on first launch\n            if (initialQuery.isNotBlank()) {\n                trackingSearch(initialQuery)\n            }\n        }\n\n        fun trackingSearch(query: String) {\n            screenModelScope.launch {\n                // To show loading state\n                mutableState.update { it.copy(queryResult = null, selected = null) }\n\n                val result = withIOContext {\n                    try {\n                        val results = tracker.mangaService.searchManga(query)\n                        Result.success(results)\n                    } catch (e: Throwable) {\n                        Result.failure(e)\n                    }\n                }\n                mutableState.update { oldState ->\n                    oldState.copy(\n                        queryResult = result,\n                        selected = result.getOrNull()?.find { it.tracking_url == currentUrl },\n                    )\n                }\n            }\n        }\n\n        fun registerTracking(item: MangaTrackSearch) {\n            screenModelScope.launchNonCancellable { tracker.mangaService.register(item, mangaId) }\n        }\n\n        fun updateSelection(selected: MangaTrackSearch) {\n            mutableState.update { it.copy(selected = selected) }\n        }\n\n        @Immutable\n        data class State(\n            val queryResult: Result<List<MangaTrackSearch>>? = null,\n            val selected: MangaTrackSearch? = null,\n        )\n    }\n}\n\nprivate data class TrackerMangaRemoveScreen(\n    private val mangaId: Long,\n    private val track: MangaTrack,\n    private val serviceId: Long,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel {\n            Model(\n                mangaId = mangaId,\n                track = track,\n                tracker = Injekt.get<TrackerManager>().get(serviceId)!!,\n            )\n        }\n        val serviceName = screenModel.getName()\n        var removeRemoteTrack by remember { mutableStateOf(false) }\n        AlertDialogContent(\n            modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),\n            icon = {\n                Icon(\n                    imageVector = Icons.Default.Delete,\n                    contentDescription = null,\n                )\n            },\n            title = {\n                Text(\n                    text = stringResource(MR.strings.track_delete_title, serviceName),\n                    textAlign = TextAlign.Center,\n                )\n            },\n            text = {\n                Column(\n                    verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                ) {\n                    Text(\n                        text = stringResource(MR.strings.track_delete_text, serviceName),\n                    )\n                    if (screenModel.isDeletable()) {\n                        LabeledCheckbox(\n                            label = stringResource(MR.strings.track_delete_remote_text, serviceName),\n                            checked = removeRemoteTrack,\n                            onCheckedChange = { removeRemoteTrack = it },\n                        )\n                    }\n                }\n            },\n            buttons = {\n                Row(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(\n                        MaterialTheme.padding.small,\n                        Alignment.End,\n                    ),\n                ) {\n                    TextButton(onClick = navigator::pop) {\n                        Text(text = stringResource(MR.strings.action_cancel))\n                    }\n                    FilledTonalButton(\n                        onClick = {\n                            screenModel.unregisterTracking(serviceId)\n                            if (removeRemoteTrack) screenModel.deleteMangaFromService()\n                            navigator.pop()\n                        },\n                        colors = ButtonDefaults.filledTonalButtonColors(\n                            containerColor = MaterialTheme.colorScheme.errorContainer,\n                            contentColor = MaterialTheme.colorScheme.onErrorContainer,\n                        ),\n                    ) {\n                        Text(text = stringResource(MR.strings.action_ok))\n                    }\n                }\n            },\n        )\n    }\n\n    private class Model(\n        private val mangaId: Long,\n        private val track: MangaTrack,\n        private val tracker: Tracker,\n        private val deleteTrack: DeleteMangaTrack = Injekt.get(),\n    ) : ScreenModel {\n\n        fun getName() = tracker.name\n\n        fun isDeletable() = tracker is DeletableMangaTracker\n\n        fun deleteMangaFromService() {\n            screenModelScope.launchNonCancellable {\n                try {\n                    (tracker as DeletableMangaTracker).delete(track)\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to delete manga entry from service\" }\n                }\n            }\n        }\n\n        fun unregisterTracking(serviceId: Long) {\n            screenModelScope.launchNonCancellable { deleteTrack.await(mangaId, serviceId) }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/track/MangaTrackItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.entries.manga.track\n\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport tachiyomi.domain.track.manga.model.MangaTrack\n\ndata class MangaTrackItem(val track: MangaTrack?, val tracker: Tracker)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoriesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.history\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.presentation.components.TabbedScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.history.anime.AnimeHistoryScreenModel\nimport eu.kanade.tachiyomi.ui.history.anime.animeHistoryTab\nimport eu.kanade.tachiyomi.ui.history.anime.resumeLastEpisodeSeenEvent\nimport eu.kanade.tachiyomi.ui.history.manga.MangaHistoryScreenModel\nimport eu.kanade.tachiyomi.ui.history.manga.mangaHistoryTab\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object HistoriesTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_history_enter)\n            val index: UShort = when (currentNavigationStyle()) {\n                NavStyle.MOVE_HISTORY_TO_MORE -> 5u\n                NavStyle.MOVE_BROWSE_TO_MORE -> 3u\n                else -> 2u\n            }\n            return TabOptions(\n                index = index,\n                title = stringResource(MR.strings.history),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    override suspend fun onReselect(navigator: Navigator) {\n        resumeLastEpisodeSeenEvent.send(Unit)\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val fromMore = currentNavigationStyle() == NavStyle.MOVE_HISTORY_TO_MORE\n        // Hoisted for history tab's search bar\n        val mangaHistoryScreenModel = rememberScreenModel { MangaHistoryScreenModel() }\n        val mangaSearchQuery by mangaHistoryScreenModel.query.collectAsState()\n\n        val animeHistoryScreenModel = rememberScreenModel { AnimeHistoryScreenModel() }\n        val animeSearchQuery by animeHistoryScreenModel.query.collectAsState()\n\n        TabbedScreen(\n            titleRes = MR.strings.label_recent_manga,\n            tabs = persistentListOf(\n                animeHistoryTab(context, fromMore),\n                mangaHistoryTab(context, fromMore),\n            ),\n            mangaSearchQuery = mangaSearchQuery,\n            onChangeMangaSearchQuery = mangaHistoryScreenModel::search,\n            animeSearchQuery = animeSearchQuery,\n            onChangeAnimeSearchQuery = animeHistoryScreenModel::search,\n        )\n\n        LaunchedEffect(Unit) {\n            (context as? MainActivity)?.ready = true\n        }\n    }\n}\n\nprivate const val TAB_ANIME = 0\nprivate const val TAB_MANGA = 1\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/history/anime/AnimeHistoryScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.history.anime\n\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.insertSeparators\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.track.anime.interactor.AddAnimeTracks\nimport eu.kanade.presentation.history.anime.AnimeHistoryUiModel\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.mapAsCheckboxState\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.SetAnimeCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.interactor.GetDuplicateLibraryAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.history.anime.interactor.GetAnimeHistory\nimport tachiyomi.domain.history.anime.interactor.GetNextEpisodes\nimport tachiyomi.domain.history.anime.interactor.RemoveAnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeHistoryScreenModel(\n    private val addTracks: AddAnimeTracks = Injekt.get(),\n    private val getCategories: GetAnimeCategories = Injekt.get(),\n    private val getDuplicateLibraryAnime: GetDuplicateLibraryAnime = Injekt.get(),\n    private val getHistory: GetAnimeHistory = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val getNextEpisodes: GetNextEpisodes = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val removeHistory: RemoveAnimeHistory = Injekt.get(),\n    private val setAnimeCategories: SetAnimeCategories = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n) : StateScreenModel<AnimeHistoryScreenModel.State>(State()) {\n\n    private val _events: Channel<Event> = Channel(Channel.UNLIMITED)\n    val events: Flow<Event> = _events.receiveAsFlow()\n\n    private val _query: MutableStateFlow<String?> = MutableStateFlow(null)\n    val query: StateFlow<String?> = _query.asStateFlow()\n\n    init {\n        screenModelScope.launch {\n            _query.collectLatest { query ->\n                getHistory.subscribe(query ?: \"\")\n                    .distinctUntilChanged()\n                    .catch { error ->\n                        logcat(LogPriority.ERROR, error)\n                        _events.send(Event.InternalError)\n                    }\n                    .map { it.toAnimeHistoryUiModels() }\n                    .flowOn(Dispatchers.IO)\n                    .collect { newList -> mutableState.update { it.copy(list = newList) } }\n            }\n        }\n    }\n\n    fun search(query: String?) {\n        screenModelScope.launchIO {\n            _query.emit(query)\n        }\n    }\n\n    private fun List<AnimeHistoryWithRelations>.toAnimeHistoryUiModels(): List<AnimeHistoryUiModel> {\n        return map { AnimeHistoryUiModel.Item(it) }\n            .insertSeparators { before, after ->\n                val beforeDate = before?.item?.seenAt?.time?.toLocalDate()\n                val afterDate = after?.item?.seenAt?.time?.toLocalDate()\n                when {\n                    beforeDate != afterDate && afterDate != null -> AnimeHistoryUiModel.Header(afterDate)\n                    // Return null to avoid adding a separator between two items.\n                    else -> null\n                }\n            }\n    }\n\n    suspend fun getNextEpisode(): Episode? {\n        return withIOContext { getNextEpisodes.await(onlyUnseen = false).firstOrNull() }\n    }\n\n    fun getNextEpisodeForAnime(animeId: Long, episodeId: Long) {\n        screenModelScope.launchIO {\n            sendNextEpisodeEvent(getNextEpisodes.await(animeId, episodeId, onlyUnseen = false))\n        }\n    }\n\n    private suspend fun sendNextEpisodeEvent(episodes: List<Episode>) {\n        val episode = episodes.firstOrNull()\n        _events.send(Event.OpenEpisode(episode))\n    }\n\n    fun removeFromHistory(history: AnimeHistoryWithRelations) {\n        screenModelScope.launchIO {\n            removeHistory.await(history)\n        }\n    }\n\n    fun removeAllFromHistory(animeId: Long) {\n        screenModelScope.launchIO {\n            removeHistory.await(animeId)\n        }\n    }\n\n    fun removeAllHistory() {\n        screenModelScope.launchIO {\n            val result = removeHistory.awaitAll()\n            if (!result) return@launchIO\n            _events.send(Event.HistoryCleared)\n        }\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    /**\n     * Get user categories.\n     *\n     * @return List of categories, not including the default category\n     */\n    suspend fun getCategories(): List<Category> {\n        return getCategories.await().filterNot { it.isSystemCategory }\n    }\n\n    private fun moveAnimeToCategory(animeId: Long, categories: Category?) {\n        val categoryIds = listOfNotNull(categories).map { it.id }\n        moveAnimeToCategory(animeId, categoryIds)\n    }\n\n    private fun moveAnimeToCategory(animeId: Long, categoryIds: List<Long>) {\n        screenModelScope.launchIO {\n            setAnimeCategories.await(animeId, categoryIds)\n        }\n    }\n\n    fun moveAnimeToCategoriesAndAddToLibrary(anime: Anime, categories: List<Long>) {\n        moveAnimeToCategory(anime.id, categories)\n        if (anime.favorite) return\n\n        screenModelScope.launchIO {\n            updateAnime.awaitUpdateFavorite(anime.id, true)\n        }\n    }\n\n    private suspend fun getAnimeCategoryIds(anime: Anime): List<Long> {\n        return getCategories.await(anime.id)\n            .map { it.id }\n    }\n\n    fun addFavorite(animeId: Long) {\n        screenModelScope.launchIO {\n            val anime = getAnime.await(animeId) ?: return@launchIO\n\n            val duplicate = getDuplicateLibraryAnime.await(anime).getOrNull(0)\n            if (duplicate != null) {\n                mutableState.update { it.copy(dialog = Dialog.DuplicateAnime(anime, duplicate)) }\n                return@launchIO\n            }\n\n            addFavorite(anime)\n        }\n    }\n\n    fun addFavorite(anime: Anime) {\n        screenModelScope.launchIO {\n            // Move to default category if applicable\n            val categories = getCategories()\n            val defaultCategoryId = libraryPreferences.defaultAnimeCategory().get().toLong()\n            val defaultCategory = categories.find { it.id == defaultCategoryId }\n\n            when {\n                // Default category set\n                defaultCategory != null -> {\n                    val result = updateAnime.awaitUpdateFavorite(anime.id, true)\n                    if (!result) return@launchIO\n                    moveAnimeToCategory(anime.id, defaultCategory)\n                }\n\n                // Automatic 'Default' or no categories\n                defaultCategoryId == 0L || categories.isEmpty() -> {\n                    val result = updateAnime.awaitUpdateFavorite(anime.id, true)\n                    if (!result) return@launchIO\n                    moveAnimeToCategory(anime.id, null)\n                }\n\n                // Choose a category\n                else -> showChangeCategoryDialog(anime)\n            }\n\n            // Sync with tracking services if applicable\n            addTracks.bindEnhancedTrackers(anime, sourceManager.getOrStub(anime.source))\n        }\n    }\n\n    fun showMigrateDialog(currentAnime: Anime, duplicate: Anime) {\n        mutableState.update { currentState ->\n            currentState.copy(dialog = Dialog.Migrate(newAnime = currentAnime, oldAnime = duplicate))\n        }\n    }\n\n    fun showChangeCategoryDialog(anime: Anime) {\n        screenModelScope.launch {\n            val categories = getCategories()\n            val selection = getAnimeCategoryIds(anime)\n            mutableState.update { currentState ->\n                currentState.copy(\n                    dialog = Dialog.ChangeCategory(\n                        anime = anime,\n                        initialSelection = categories.mapAsCheckboxState { it.id in selection }.toImmutableList(),\n                    ),\n                )\n            }\n        }\n    }\n\n    @Immutable\n    data class State(\n        val searchQuery: String? = null,\n        val list: List<AnimeHistoryUiModel>? = null,\n        val dialog: Dialog? = null,\n    )\n\n    sealed interface Dialog {\n        data object DeleteAll : Dialog\n        data class Delete(val history: AnimeHistoryWithRelations) : Dialog\n        data class DuplicateAnime(val anime: Anime, val duplicate: Anime) : Dialog\n        data class ChangeCategory(\n            val anime: Anime,\n            val initialSelection: ImmutableList<CheckboxState<Category>>,\n        ) : Dialog\n        data class Migrate(val newAnime: Anime, val oldAnime: Anime) : Dialog\n    }\n\n    sealed interface Event {\n        data class OpenEpisode(val episode: Episode?) : Event\n        data object InternalError : Event\n        data object HistoryCleared : Event\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/history/anime/AnimeHistoryTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.history.anime\n\nimport android.content.Context\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.DeleteSweep\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.entries.anime.DuplicateAnimeDialog\nimport eu.kanade.presentation.history.HistoryDeleteAllDialog\nimport eu.kanade.presentation.history.HistoryDeleteDialog\nimport eu.kanade.presentation.history.anime.AnimeHistoryScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.anime.season.MigrateSeasonSelectScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialog\nimport eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeDialogScreenModel\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.injectLazy\n\nval resumeLastEpisodeSeenEvent = Channel<Unit>()\n\n@Composable\nfun Screen.animeHistoryTab(\n    context: Context,\n    fromMore: Boolean,\n): TabContent {\n    val snackbarHostState = SnackbarHostState()\n\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { AnimeHistoryScreenModel() }\n    val state by screenModel.state.collectAsState()\n    val searchQuery by screenModel.query.collectAsState()\n\n    suspend fun openEpisode(context: Context, episode: Episode?) {\n        val playerPreferences: PlayerPreferences by injectLazy()\n        val extPlayer = playerPreferences.alwaysUseExternalPlayer().get()\n        if (episode != null) {\n            MainActivity.startPlayerActivity(context, episode.animeId, episode.id, extPlayer)\n        } else {\n            snackbarHostState.showSnackbar(context.stringResource(AYMR.strings.no_next_episode))\n        }\n    }\n\n    val scope = rememberCoroutineScope()\n    val navigateUp: (() -> Unit)? = if (fromMore) {\n        {\n            if (navigator.lastItem == HomeScreen) {\n                scope.launch { HomeScreen.openTab(HomeScreen.Tab.AnimeLib()) }\n            } else {\n                navigator.pop()\n            }\n        }\n    } else {\n        null\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime_history,\n        searchEnabled = true,\n        content = { contentPadding, _ ->\n            AnimeHistoryScreen(\n                state = state,\n                searchQuery = searchQuery,\n                snackbarHostState = snackbarHostState,\n                onClickCover = { navigator.push(AnimeScreen(it)) },\n                onClickResume = screenModel::getNextEpisodeForAnime,\n                onDialogChange = screenModel::setDialog,\n                onClickFavorite = screenModel::addFavorite,\n            )\n\n            val onDismissRequest = { screenModel.setDialog(null) }\n            when (val dialog = state.dialog) {\n                is AnimeHistoryScreenModel.Dialog.Delete -> {\n                    HistoryDeleteDialog(\n                        onDismissRequest = onDismissRequest,\n                        onDelete = { all ->\n                            if (all) {\n                                screenModel.removeAllFromHistory(dialog.history.animeId)\n                            } else {\n                                screenModel.removeFromHistory(dialog.history)\n                            }\n                        },\n                        isManga = false,\n                    )\n                }\n                is AnimeHistoryScreenModel.Dialog.DeleteAll -> {\n                    HistoryDeleteAllDialog(\n                        onDismissRequest = onDismissRequest,\n                        onDelete = screenModel::removeAllHistory,\n                    )\n                }\n                is AnimeHistoryScreenModel.Dialog.DuplicateAnime -> {\n                    DuplicateAnimeDialog(\n                        onDismissRequest = onDismissRequest,\n                        onConfirm = {\n                            screenModel.addFavorite(dialog.anime)\n                        },\n                        onOpenAnime = { navigator.push(AnimeScreen(dialog.duplicate.id)) },\n                        onMigrate = {\n                            screenModel.showMigrateDialog(dialog.anime, dialog.duplicate)\n                        },\n                    )\n                }\n                is AnimeHistoryScreenModel.Dialog.ChangeCategory -> {\n                    ChangeCategoryDialog(\n                        initialSelection = dialog.initialSelection,\n                        onDismissRequest = onDismissRequest,\n                        onEditCategories = { navigator.push(CategoriesTab) },\n                        onConfirm = { include, _ ->\n                            screenModel.moveAnimeToCategoriesAndAddToLibrary(dialog.anime, include)\n                        },\n                    )\n                }\n                is AnimeHistoryScreenModel.Dialog.Migrate -> {\n                    MigrateAnimeDialog(\n                        oldAnime = dialog.oldAnime,\n                        newAnime = dialog.newAnime,\n                        screenModel = MigrateAnimeDialogScreenModel(),\n                        onDismissRequest = onDismissRequest,\n                        onClickTitle = { navigator.push(AnimeScreen(dialog.oldAnime.id)) },\n                        onClickSeasons = {\n                            navigator.push(MigrateSeasonSelectScreen(dialog.oldAnime, dialog.newAnime))\n                        },\n                        onPopScreen = { navigator.replace(AnimeScreen(dialog.oldAnime.id)) },\n                    )\n                }\n                null -> {}\n            }\n\n            LaunchedEffect(state.list) {\n                if (state.list != null) {\n                    (context as? MainActivity)?.ready = true\n                }\n            }\n\n            LaunchedEffect(Unit) {\n                screenModel.events.collectLatest { e ->\n                    when (e) {\n                        AnimeHistoryScreenModel.Event.InternalError ->\n                            snackbarHostState.showSnackbar(context.stringResource(MR.strings.internal_error))\n                        AnimeHistoryScreenModel.Event.HistoryCleared ->\n                            snackbarHostState.showSnackbar(context.stringResource(MR.strings.clear_history_completed))\n                        is AnimeHistoryScreenModel.Event.OpenEpisode -> openEpisode(context, e.episode)\n                    }\n                }\n            }\n\n            LaunchedEffect(Unit) {\n                resumeLastEpisodeSeenEvent.receiveAsFlow().collectLatest {\n                    openEpisode(context, screenModel.getNextEpisode())\n                }\n            }\n        },\n        actions =\n        persistentListOf(\n            AppBar.Action(\n                title = stringResource(MR.strings.pref_clear_history),\n                icon = Icons.Outlined.DeleteSweep,\n                onClick = { screenModel.setDialog(AnimeHistoryScreenModel.Dialog.DeleteAll) },\n            ),\n        ),\n        navigateUp = navigateUp,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/history/manga/MangaHistoryScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.history.manga\n\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Immutable\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.insertSeparators\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.track.manga.interactor.AddMangaTracks\nimport eu.kanade.presentation.history.manga.MangaHistoryUiModel\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.mapAsCheckboxState\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.SetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.manga.interactor.GetDuplicateLibraryManga\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.history.manga.interactor.GetMangaHistory\nimport tachiyomi.domain.history.manga.interactor.GetNextChapters\nimport tachiyomi.domain.history.manga.interactor.RemoveMangaHistory\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaHistoryScreenModel(\n    private val addTracks: AddMangaTracks = Injekt.get(),\n    private val getCategories: GetMangaCategories = Injekt.get(),\n    private val getDuplicateLibraryManga: GetDuplicateLibraryManga = Injekt.get(),\n    private val getHistory: GetMangaHistory = Injekt.get(),\n    private val getManga: GetManga = Injekt.get(),\n    private val getNextChapters: GetNextChapters = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val removeHistory: RemoveMangaHistory = Injekt.get(),\n    private val setMangaCategories: SetMangaCategories = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n) : StateScreenModel<MangaHistoryScreenModel.State>(State()) {\n\n    private val _events: Channel<Event> = Channel(Channel.UNLIMITED)\n    val events: Flow<Event> = _events.receiveAsFlow()\n\n    private val _query: MutableStateFlow<String?> = MutableStateFlow(null)\n    val query: StateFlow<String?> = _query.asStateFlow()\n\n    init {\n        screenModelScope.launch {\n            _query.collectLatest { query ->\n                getHistory.subscribe(query ?: \"\")\n                    .distinctUntilChanged()\n                    .catch { error ->\n                        logcat(LogPriority.ERROR, error)\n                        _events.send(Event.InternalError)\n                    }\n                    .map { it.toHistoryUiModels() }\n                    .flowOn(Dispatchers.IO)\n                    .collect { newList -> mutableState.update { it.copy(list = newList) } }\n            }\n        }\n    }\n\n    fun search(query: String?) {\n        screenModelScope.launchIO {\n            _query.emit(query)\n        }\n    }\n\n    private fun List<MangaHistoryWithRelations>.toHistoryUiModels(): List<MangaHistoryUiModel> {\n        return map { MangaHistoryUiModel.Item(it) }\n            .insertSeparators { before, after ->\n                val beforeDate = before?.item?.readAt?.time?.toLocalDate()\n                val afterDate = after?.item?.readAt?.time?.toLocalDate()\n                when {\n                    beforeDate != afterDate && afterDate != null -> MangaHistoryUiModel.Header(afterDate)\n                    // Return null to avoid adding a separator between two items.\n                    else -> null\n                }\n            }\n    }\n\n    suspend fun getNextChapter(): Chapter? {\n        return withIOContext { getNextChapters.await(onlyUnread = false).firstOrNull() }\n    }\n\n    fun getNextChapterForManga(mangaId: Long, chapterId: Long) {\n        screenModelScope.launchIO {\n            sendNextChapterEvent(getNextChapters.await(mangaId, chapterId, onlyUnread = false))\n        }\n    }\n\n    private suspend fun sendNextChapterEvent(chapters: List<Chapter>) {\n        val chapter = chapters.firstOrNull()\n        _events.send(Event.OpenChapter(chapter))\n    }\n\n    fun removeFromHistory(history: MangaHistoryWithRelations) {\n        screenModelScope.launchIO {\n            removeHistory.await(history)\n        }\n    }\n\n    fun removeAllFromHistory(mangaId: Long) {\n        screenModelScope.launchIO {\n            removeHistory.await(mangaId)\n        }\n    }\n\n    fun removeAllHistory() {\n        screenModelScope.launchIO {\n            val result = removeHistory.awaitAll()\n            if (!result) return@launchIO\n            _events.send(Event.HistoryCleared)\n        }\n    }\n\n    fun updateSearchQuery(query: String?) {\n        mutableState.update { it.copy(searchQuery = query) }\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    /**\n     * Get user categories.\n     *\n     * @return List of categories, not including the default category\n     */\n    suspend fun getCategories(): List<Category> {\n        return getCategories.await().filterNot { it.isSystemCategory }\n    }\n\n    private fun moveMangaToCategory(mangaId: Long, categories: Category?) {\n        val categoryIds = listOfNotNull(categories).map { it.id }\n        moveMangaToCategory(mangaId, categoryIds)\n    }\n\n    private fun moveMangaToCategory(mangaId: Long, categoryIds: List<Long>) {\n        screenModelScope.launchIO {\n            setMangaCategories.await(mangaId, categoryIds)\n        }\n    }\n\n    fun moveMangaToCategoriesAndAddToLibrary(manga: Manga, categories: List<Long>) {\n        moveMangaToCategory(manga.id, categories)\n\n        if (manga.favorite) return\n\n        screenModelScope.launchIO {\n            updateManga.awaitUpdateFavorite(manga.id, true)\n        }\n    }\n\n    private suspend fun getMangaCategoryIds(manga: Manga): List<Long> {\n        return getCategories.await(manga.id)\n            .map { it.id }\n    }\n\n    fun addFavorite(mangaId: Long) {\n        screenModelScope.launchIO {\n            val manga = getManga.await(mangaId) ?: return@launchIO\n\n            val duplicate = getDuplicateLibraryManga.await(manga).getOrNull(0)\n            if (duplicate != null) {\n                mutableState.update { it.copy(dialog = Dialog.DuplicateManga(manga, duplicate)) }\n                return@launchIO\n            }\n\n            addFavorite(manga)\n        }\n    }\n\n    fun addFavorite(manga: Manga) {\n        screenModelScope.launchIO {\n            // Move to default category if applicable\n            val categories = getCategories()\n            val defaultCategoryId = libraryPreferences.defaultMangaCategory().get().toLong()\n            val defaultCategory = categories.find { it.id == defaultCategoryId }\n\n            when {\n                // Default category set\n                defaultCategory != null -> {\n                    val result = updateManga.awaitUpdateFavorite(manga.id, true)\n                    if (!result) return@launchIO\n                    moveMangaToCategory(manga.id, defaultCategory)\n                }\n\n                // Automatic 'Default' or no categories\n                defaultCategoryId == 0L || categories.isEmpty() -> {\n                    val result = updateManga.awaitUpdateFavorite(manga.id, true)\n                    if (!result) return@launchIO\n                    moveMangaToCategory(manga.id, null)\n                }\n\n                // Choose a category\n                else -> showChangeCategoryDialog(manga)\n            }\n\n            // Sync with tracking services if applicable\n            addTracks.bindEnhancedTrackers(manga, sourceManager.getOrStub(manga.source))\n        }\n    }\n\n    fun showMigrateDialog(currentManga: Manga, duplicate: Manga) {\n        mutableState.update { currentState ->\n            currentState.copy(dialog = Dialog.Migrate(newManga = currentManga, oldManga = duplicate))\n        }\n    }\n\n    fun showChangeCategoryDialog(manga: Manga) {\n        screenModelScope.launch {\n            val categories = getCategories()\n            val selection = getMangaCategoryIds(manga)\n            mutableState.update { currentState ->\n                currentState.copy(\n                    dialog = Dialog.ChangeCategory(\n                        manga = manga,\n                        initialSelection = categories.mapAsCheckboxState { it.id in selection }.toImmutableList(),\n                    ),\n                )\n            }\n        }\n    }\n\n    @Immutable\n    data class State(\n        val searchQuery: String? = null,\n        val list: List<MangaHistoryUiModel>? = null,\n        val dialog: Dialog? = null,\n    )\n\n    sealed interface Dialog {\n        data object DeleteAll : Dialog\n        data class Delete(val history: MangaHistoryWithRelations) : Dialog\n        data class DuplicateManga(val manga: Manga, val duplicate: Manga) : Dialog\n        data class ChangeCategory(\n            val manga: Manga,\n            val initialSelection: ImmutableList<CheckboxState<Category>>,\n        ) : Dialog\n        data class Migrate(val newManga: Manga, val oldManga: Manga) : Dialog\n    }\n\n    sealed interface Event {\n        data class OpenChapter(val chapter: Chapter?) : Event\n        data object InternalError : Event\n        data object HistoryCleared : Event\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/history/manga/MangaHistoryTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.history.manga\n\nimport android.content.Context\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.DeleteSweep\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.entries.manga.DuplicateMangaDialog\nimport eu.kanade.presentation.history.HistoryDeleteAllDialog\nimport eu.kanade.presentation.history.HistoryDeleteDialog\nimport eu.kanade.presentation.history.manga.MangaHistoryScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaDialog\nimport eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaDialogScreenModel\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\nval resumeLastChapterReadEvent = Channel<Unit>()\n\n@Composable\nfun Screen.mangaHistoryTab(\n    context: Context,\n    fromMore: Boolean,\n): TabContent {\n    val snackbarHostState = SnackbarHostState()\n\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { MangaHistoryScreenModel() }\n    val state by screenModel.state.collectAsState()\n    val searchQuery by screenModel.query.collectAsState()\n\n    suspend fun openChapter(context: Context, chapter: Chapter?) {\n        if (chapter != null) {\n            val intent = ReaderActivity.newIntent(context, chapter.mangaId, chapter.id)\n            context.startActivity(intent)\n        } else {\n            snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter))\n        }\n    }\n\n    val scope = rememberCoroutineScope()\n    val navigateUp: (() -> Unit)? = if (fromMore) {\n        {\n            if (navigator.lastItem == HomeScreen) {\n                scope.launch { HomeScreen.openTab(HomeScreen.Tab.AnimeLib()) }\n            } else {\n                navigator.pop()\n            }\n        }\n    } else {\n        null\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_history,\n        searchEnabled = true,\n        content = { contentPadding, _ ->\n            MangaHistoryScreen(\n                state = state,\n                searchQuery = searchQuery,\n                snackbarHostState = snackbarHostState,\n                onClickCover = { navigator.push(MangaScreen(it)) },\n                onClickResume = screenModel::getNextChapterForManga,\n                onDialogChange = screenModel::setDialog,\n                onClickFavorite = screenModel::addFavorite,\n            )\n\n            val onDismissRequest = { screenModel.setDialog(null) }\n            when (val dialog = state.dialog) {\n                is MangaHistoryScreenModel.Dialog.Delete -> {\n                    HistoryDeleteDialog(\n                        onDismissRequest = onDismissRequest,\n                        onDelete = { all ->\n                            if (all) {\n                                screenModel.removeAllFromHistory(dialog.history.mangaId)\n                            } else {\n                                screenModel.removeFromHistory(dialog.history)\n                            }\n                        },\n                        isManga = true,\n                    )\n                }\n                is MangaHistoryScreenModel.Dialog.DeleteAll -> {\n                    HistoryDeleteAllDialog(\n                        onDismissRequest = onDismissRequest,\n                        onDelete = screenModel::removeAllHistory,\n                    )\n                }\n                is MangaHistoryScreenModel.Dialog.DuplicateManga -> {\n                    DuplicateMangaDialog(\n                        onDismissRequest = onDismissRequest,\n                        onConfirm = {\n                            screenModel.addFavorite(dialog.manga)\n                        },\n                        onOpenManga = { navigator.push(MangaScreen(dialog.duplicate.id)) },\n                        onMigrate = {\n                            screenModel.showMigrateDialog(dialog.manga, dialog.duplicate)\n                        },\n                    )\n                }\n                is MangaHistoryScreenModel.Dialog.ChangeCategory -> {\n                    ChangeCategoryDialog(\n                        initialSelection = dialog.initialSelection,\n                        onDismissRequest = onDismissRequest,\n                        onEditCategories = {\n                            navigator.push(CategoriesTab)\n                            CategoriesTab.showMangaCategory()\n                        },\n                        onConfirm = { include, _ ->\n                            screenModel.moveMangaToCategoriesAndAddToLibrary(dialog.manga, include)\n                        },\n                    )\n                }\n                is MangaHistoryScreenModel.Dialog.Migrate -> {\n                    MigrateMangaDialog(\n                        oldManga = dialog.oldManga,\n                        newManga = dialog.newManga,\n                        screenModel = MigrateMangaDialogScreenModel(),\n                        onDismissRequest = onDismissRequest,\n                        onClickTitle = { navigator.push(MangaScreen(dialog.oldManga.id)) },\n                        onPopScreen = { navigator.replace(MangaScreen(dialog.newManga.id)) },\n                    )\n                }\n                null -> {}\n            }\n\n            LaunchedEffect(state.list) {\n                if (state.list != null) {\n                    (context as? MainActivity)?.ready = true\n                }\n            }\n\n            LaunchedEffect(Unit) {\n                screenModel.events.collectLatest { e ->\n                    when (e) {\n                        MangaHistoryScreenModel.Event.InternalError ->\n                            snackbarHostState.showSnackbar(context.stringResource(MR.strings.internal_error))\n                        MangaHistoryScreenModel.Event.HistoryCleared ->\n                            snackbarHostState.showSnackbar(context.stringResource(MR.strings.clear_history_completed))\n                        is MangaHistoryScreenModel.Event.OpenChapter -> openChapter(context, e.chapter)\n                    }\n                }\n            }\n\n            LaunchedEffect(Unit) {\n                resumeLastChapterReadEvent.receiveAsFlow().collectLatest {\n                    openChapter(context, screenModel.getNextChapter())\n                }\n            }\n        },\n        actions =\n        persistentListOf(\n            AppBar.Action(\n                title = stringResource(MR.strings.pref_clear_history),\n                icon = Icons.Outlined.DeleteSweep,\n                onClick = { screenModel.setDialog(MangaHistoryScreenModel.Dialog.DeleteAll) },\n            ),\n        ),\n        navigateUp = navigateUp,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.home\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.expandVertically\nimport androidx.compose.animation.shrinkVertically\nimport androidx.compose.animation.togetherWith\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.consumeWindowInsets\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.BadgedBox\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.NavigationBarItem\nimport androidx.compose.material3.NavigationRailItem\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.produceState\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.semantics.contentDescription\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.util.fastForEach\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabNavigator\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.util.isTabletUi\nimport eu.kanade.tachiyomi.ui.browse.BrowseTab\nimport eu.kanade.tachiyomi.ui.download.DownloadsTab\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.history.HistoriesTab\nimport eu.kanade.tachiyomi.ui.library.anime.AnimeLibraryTab\nimport eu.kanade.tachiyomi.ui.library.manga.MangaLibraryTab\nimport eu.kanade.tachiyomi.ui.more.MoreTab\nimport eu.kanade.tachiyomi.ui.updates.UpdatesTab\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport soup.compose.material.motion.animation.materialFadeThroughIn\nimport soup.compose.material.motion.animation.materialFadeThroughOut\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.NavigationBar\nimport tachiyomi.presentation.core.components.material.NavigationRail\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\n\nobject HomeScreen : Screen() {\n\n    private val librarySearchEvent = Channel<String>()\n    private val openTabEvent = Channel<Tab>()\n    private val showBottomNavEvent = Channel<Boolean>()\n\n    private const val TAB_FADE_DURATION = 200\n    private const val TAB_NAVIGATOR_KEY = \"HomeTabs\"\n\n    private val uiPreferences: UiPreferences by injectLazy()\n    private val defaultTab = uiPreferences.startScreen().get().tab\n    private val moreTab = uiPreferences.navStyle().get().moreTab\n\n    @Composable\n    override fun Content() {\n        val navStyle by uiPreferences.navStyle().collectAsState()\n        val navigator = LocalNavigator.currentOrThrow\n        TabNavigator(\n            tab = defaultTab,\n            key = TAB_NAVIGATOR_KEY,\n        ) { tabNavigator ->\n            // Provide usable navigator to content screen\n            CompositionLocalProvider(LocalNavigator provides navigator) {\n                Scaffold(\n                    startBar = {\n                        if (isTabletUi()) {\n                            NavigationRail {\n                                navStyle.tabs.fastForEach {\n                                    NavigationRailItem(it)\n                                }\n                            }\n                        }\n                    },\n                    bottomBar = {\n                        if (!isTabletUi()) {\n                            val bottomNavVisible by produceState(initialValue = true) {\n                                showBottomNavEvent.receiveAsFlow().collectLatest { value = it }\n                            }\n                            AnimatedVisibility(\n                                visible = bottomNavVisible && tabNavigator.current != navStyle.moreTab,\n                                enter = expandVertically(),\n                                exit = shrinkVertically(),\n                            ) {\n                                NavigationBar {\n                                    navStyle.tabs.fastForEach {\n                                        NavigationBarItem(it)\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    contentWindowInsets = WindowInsets(0),\n                ) { contentPadding ->\n                    Box(\n                        modifier = Modifier\n                            .padding(contentPadding)\n                            .consumeWindowInsets(contentPadding),\n                    ) {\n                        AnimatedContent(\n                            targetState = tabNavigator.current,\n                            transitionSpec = {\n                                materialFadeThroughIn(\n                                    initialScale = 1f,\n                                    durationMillis = TAB_FADE_DURATION,\n                                ) togetherWith\n                                    materialFadeThroughOut(durationMillis = TAB_FADE_DURATION)\n                            },\n                            label = \"tabContent\",\n                        ) {\n                            tabNavigator.saveableState(key = \"currentTab\", it) {\n                                it.Content()\n                            }\n                        }\n                    }\n                }\n            }\n\n            val goToStartScreen = {\n                if (defaultTab != moreTab) {\n                    tabNavigator.current = defaultTab\n                } else {\n                    tabNavigator.current = AnimeLibraryTab\n                }\n            }\n            BackHandler(\n                enabled = (tabNavigator.current == moreTab || tabNavigator.current != defaultTab) &&\n                    (tabNavigator.current != AnimeLibraryTab || defaultTab != moreTab),\n                onBack = goToStartScreen,\n            )\n\n            LaunchedEffect(Unit) {\n                launch {\n                    librarySearchEvent.receiveAsFlow().collectLatest {\n                        goToStartScreen()\n                        when (defaultTab) {\n                            AnimeLibraryTab -> AnimeLibraryTab.search(it)\n                            MangaLibraryTab -> MangaLibraryTab.search(it)\n                            else -> {}\n                        }\n                    }\n                }\n                launch {\n                    openTabEvent.receiveAsFlow().collectLatest {\n                        tabNavigator.current = when (it) {\n                            is Tab.AnimeLib -> AnimeLibraryTab\n                            is Tab.Library -> MangaLibraryTab\n                            is Tab.Updates -> UpdatesTab\n                            is Tab.History -> HistoriesTab\n                            is Tab.Browse -> {\n                                if (it.toExtensions) {\n                                    if (!it.anime) {\n                                        BrowseTab.showExtension()\n                                    } else {\n                                        BrowseTab.showAnimeExtension()\n                                    }\n                                }\n                                BrowseTab\n                            }\n                            is Tab.More -> MoreTab\n                        }\n\n                        if (it is Tab.AnimeLib && it.animeIdToOpen != null) {\n                            navigator.push(AnimeScreen(it.animeIdToOpen))\n                        }\n                        if (it is Tab.Library && it.mangaIdToOpen != null) {\n                            navigator.push(MangaScreen(it.mangaIdToOpen))\n                        }\n                        if (it is Tab.More && it.toDownloads) {\n                            navigator.push(DownloadsTab)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @Composable\n    private fun RowScope.NavigationBarItem(tab: eu.kanade.presentation.util.Tab) {\n        val tabNavigator = LocalTabNavigator.current\n        val navigator = LocalNavigator.currentOrThrow\n        val scope = rememberCoroutineScope()\n        val selected = tabNavigator.current::class == tab::class\n        NavigationBarItem(\n            selected = selected,\n            onClick = {\n                if (!selected) {\n                    tabNavigator.current = tab\n                } else {\n                    scope.launch { tab.onReselect(navigator) }\n                }\n            },\n            icon = { NavigationIconItem(tab) },\n            label = {\n                Text(\n                    text = tab.options.title,\n                    style = MaterialTheme.typography.labelLarge,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                )\n            },\n            alwaysShowLabel = true,\n        )\n    }\n\n    @Composable\n    fun NavigationRailItem(tab: eu.kanade.presentation.util.Tab) {\n        val tabNavigator = LocalTabNavigator.current\n        val navigator = LocalNavigator.currentOrThrow\n        val scope = rememberCoroutineScope()\n        val selected = tabNavigator.current::class == tab::class\n        NavigationRailItem(\n            selected = selected,\n            onClick = {\n                if (!selected) {\n                    tabNavigator.current = tab\n                } else {\n                    scope.launch { tab.onReselect(navigator) }\n                }\n            },\n            icon = { NavigationIconItem(tab) },\n            label = {\n                Text(\n                    text = tab.options.title,\n                    style = MaterialTheme.typography.labelLarge,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis,\n                )\n            },\n            alwaysShowLabel = true,\n        )\n    }\n\n    @Composable\n    private fun NavigationIconItem(tab: eu.kanade.presentation.util.Tab) {\n        BadgedBox(\n            badge = {\n                when {\n                    UpdatesTab::class.isInstance(tab) -> {\n                        val count by produceState(initialValue = 0) {\n                            val pref = Injekt.get<LibraryPreferences>()\n                            combine(\n                                pref.newAnimeUpdatesCount().changes(),\n                                pref.newMangaUpdatesCount().changes(),\n                            ) { countAnime, countManga -> countAnime + countManga }\n                                .collectLatest { value = if (pref.newShowUpdatesCount().get()) it else 0 }\n                        }\n                        if (count > 0) {\n                            Badge {\n                                val desc = pluralStringResource(\n                                    MR.plurals.notification_chapters_generic,\n                                    count = count,\n                                    count,\n                                )\n                                Text(\n                                    text = count.toString(),\n                                    modifier = Modifier.semantics { contentDescription = desc },\n                                )\n                            }\n                        }\n                    }\n                    BrowseTab::class.isInstance(tab) -> {\n                        val count by produceState(initialValue = 0) {\n                            val pref = Injekt.get<SourcePreferences>()\n                            combine(\n                                pref.mangaExtensionUpdatesCount().changes(),\n                                pref.animeExtensionUpdatesCount().changes(),\n                            ) { extCount, animeExtCount -> extCount + animeExtCount }\n                                .collectLatest { value = it }\n                        }\n                        if (count > 0) {\n                            Badge {\n                                val desc = pluralStringResource(\n                                    MR.plurals.update_check_notification_ext_updates,\n                                    count = count,\n                                    count,\n                                )\n                                Text(\n                                    text = count.toString(),\n                                    modifier = Modifier.semantics { contentDescription = desc },\n                                )\n                            }\n                        }\n                    }\n                }\n            },\n        ) {\n            Icon(\n                painter = tab.options.icon!!,\n                contentDescription = tab.options.title,\n                // TODO: https://issuetracker.google.com/u/0/issues/316327367\n                tint = LocalContentColor.current,\n            )\n        }\n    }\n\n    suspend fun search(query: String) {\n        librarySearchEvent.send(query)\n    }\n\n    suspend fun openTab(tab: Tab) {\n        openTabEvent.send(tab)\n    }\n\n    suspend fun showBottomNav(show: Boolean) {\n        showBottomNavEvent.send(show)\n    }\n\n    sealed interface Tab {\n        data class AnimeLib(val animeIdToOpen: Long? = null) : Tab\n        data class Library(val mangaIdToOpen: Long? = null) : Tab\n        data object Updates : Tab\n        data object History : Tab\n        data class Browse(val toExtensions: Boolean = false, val anime: Boolean = false) : Tab\n        data class More(val toDownloads: Boolean) : Tab\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.anime\n\nimport eu.kanade.tachiyomi.source.anime.getNameForAnimeInfo\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ndata class AnimeLibraryItem(\n    val libraryAnime: LibraryAnime,\n    var downloadCount: Long = -1,\n    var unseenCount: Long = -1,\n    var isLocal: Boolean = false,\n    var sourceLanguage: String = \"\",\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n) {\n    /**\n     * Checks if a query matches the anime\n     *\n     * @param constraint the query to check.\n     * @return true if the anime matches the query, false otherwise.\n     */\n    fun matches(constraint: String): Boolean {\n        val sourceName by lazy { sourceManager.getOrStub(libraryAnime.anime.source).getNameForAnimeInfo() }\n        if (constraint.startsWith(\"id:\", true)) {\n            val id = constraint.substringAfter(\"id:\").toLongOrNull()\n            return libraryAnime.id == id\n        }\n        return libraryAnime.anime.title.contains(constraint, true) ||\n            (libraryAnime.anime.author?.contains(constraint, true) ?: false) ||\n            (libraryAnime.anime.artist?.contains(constraint, true) ?: false) ||\n            (libraryAnime.anime.description?.contains(constraint, true) ?: false) ||\n            constraint.split(\",\").map { it.trim() }.all { subconstraint ->\n                checkNegatableConstraint(subconstraint) {\n                    sourceName.contains(it, true) ||\n                        (libraryAnime.anime.genre?.any { genre -> genre.equals(it, true) } ?: false)\n                }\n            }\n    }\n\n    /**\n     * Checks a predicate on a negatable constraint. If the constraint starts with a minus character,\n     * the minus is stripped and the result of the predicate is inverted.\n     *\n     * @param constraint the argument to the predicate. Inverts the predicate if it starts with '-'.\n     * @param predicate the check to be run against the constraint.\n     * @return !predicate(x) if constraint = \"-x\", otherwise predicate(constraint)\n     */\n    private fun checkNegatableConstraint(\n        constraint: String,\n        predicate: (String) -> Boolean,\n    ): Boolean {\n        return if (constraint.startsWith(\"-\")) {\n            !predicate(constraint.substringAfter(\"-\").trimStart())\n        } else {\n            predicate(constraint)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.anime\n\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.util.fastAny\nimport androidx.compose.ui.util.fastDistinctBy\nimport androidx.compose.ui.util.fastFilter\nimport androidx.compose.ui.util.fastMap\nimport androidx.compose.ui.util.fastMapNotNull\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.PreferenceMutableState\nimport eu.kanade.core.preference.asState\nimport eu.kanade.core.util.fastFilterNot\nimport eu.kanade.core.util.fastPartition\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.items.episode.interactor.SetSeenStatus\nimport eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.presentation.library.components.LibraryToolbarTitle\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.util.episode.getNextUnseen\nimport eu.kanade.tachiyomi.util.removeBackgrounds\nimport eu.kanade.tachiyomi.util.removeCovers\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.PersistentList\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.flatMapLatest\nimport kotlinx.coroutines.flow.flowOf\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.category.anime.interactor.GetVisibleAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.SetAnimeCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.anime.interactor.GetLibraryAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.entries.applyFilter\nimport tachiyomi.domain.history.anime.interactor.GetNextEpisodes\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.library.anime.model.AnimeLibrarySort\nimport tachiyomi.domain.library.anime.model.sort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.track.anime.interactor.GetTracksPerAnime\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.random.Random\n\n/**\n * Typealias for the library anime, using the category as keys, and list of anime as values.\n */\ntypealias AnimeLibraryMap = Map<Category, List<AnimeLibraryItem>>\n\nclass AnimeLibraryScreenModel(\n    private val getLibraryAnime: GetLibraryAnime = Injekt.get(),\n    private val getCategories: GetVisibleAnimeCategories = Injekt.get(),\n    private val getTracksPerAnime: GetTracksPerAnime = Injekt.get(),\n    private val getNextEpisodes: GetNextEpisodes = Injekt.get(),\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get(),\n    private val setSeenStatus: SetSeenStatus = Injekt.get(),\n    private val updateAnime: UpdateAnime = Injekt.get(),\n    private val setAnimeCategories: SetAnimeCategories = Injekt.get(),\n    private val preferences: BasePreferences = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val coverCache: AnimeCoverCache = Injekt.get(),\n    private val backgroundCache: AnimeBackgroundCache = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val downloadCache: AnimeDownloadCache = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n) : StateScreenModel<AnimeLibraryScreenModel.State>(State()) {\n\n    var activeCategoryIndex: Int by libraryPreferences.lastUsedAnimeCategory().asState(\n        screenModelScope,\n    )\n\n    init {\n        screenModelScope.launchIO {\n            combine(\n                state.map { it.searchQuery }.debounce(SEARCH_DEBOUNCE_MILLIS),\n                getLibraryFlow(),\n                getTracksPerAnime.subscribe(),\n                getTrackingFilterFlow(),\n                downloadCache.changes,\n            ) { searchQuery, library, tracks, trackingFilter, _ ->\n                library\n                    .applyFilters(tracks, trackingFilter)\n                    .applySort(tracks, trackingFilter.keys)\n                    .mapValues { (_, value) ->\n                        if (searchQuery != null) {\n                            value.filter { it.matches(searchQuery) }\n                        } else {\n                            value\n                        }\n                    }\n            }\n                .collectLatest {\n                    mutableState.update { state ->\n                        state.copy(\n                            isLoading = false,\n                            library = it,\n                        )\n                    }\n                }\n        }\n\n        combine(\n            libraryPreferences.categoryTabs().changes(),\n            libraryPreferences.categoryNumberOfItems().changes(),\n            libraryPreferences.showContinueViewingButton().changes(),\n        ) { a, b, c -> arrayOf(a, b, c) }\n            .onEach { (showCategoryTabs, showAnimeCount, showAnimeContinueButton) ->\n                mutableState.update { state ->\n                    state.copy(\n                        showCategoryTabs = showCategoryTabs,\n                        showAnimeCount = showAnimeCount,\n                        showAnimeContinueButton = showAnimeContinueButton,\n                    )\n                }\n            }\n            .launchIn(screenModelScope)\n\n        combine(\n            getAnimelibItemPreferencesFlow(),\n            getTrackingFilterFlow(),\n        ) { prefs, trackFilter ->\n            (\n                listOf(\n                    prefs.filterDownloaded,\n                    prefs.filterUnseen,\n                    prefs.filterStarted,\n                    prefs.filterBookmarked,\n                    prefs.filterCompleted,\n                    prefs.filterIntervalCustom,\n                ) + trackFilter.values\n                ).any { it != TriState.DISABLED }\n        }\n            .distinctUntilChanged()\n            .onEach {\n                mutableState.update { state ->\n                    state.copy(hasActiveFilters = it)\n                }\n            }\n            .launchIn(screenModelScope)\n    }\n\n    private suspend fun AnimeLibraryMap.applyFilters(\n        trackMap: Map<Long, List<AnimeTrack>>,\n        trackingFilter: Map<Long, TriState>,\n    ): AnimeLibraryMap {\n        val prefs = getAnimelibItemPreferencesFlow().first()\n        val downloadedOnly = prefs.globalFilterDownloaded\n        val skipOutsideReleasePeriod = prefs.skipOutsideReleasePeriod\n        val filterDownloaded = if (downloadedOnly) TriState.ENABLED_IS else prefs.filterDownloaded\n        val filterUnseen = prefs.filterUnseen\n        val filterStarted = prefs.filterStarted\n        val filterBookmarked = prefs.filterBookmarked\n        val filterCompleted = prefs.filterCompleted\n        val filterIntervalCustom = prefs.filterIntervalCustom\n\n        val isNotLoggedInAnyTrack = trackingFilter.isEmpty()\n\n        val excludedTracks = trackingFilter.mapNotNull { if (it.value == TriState.ENABLED_NOT) it.key else null }\n        val includedTracks = trackingFilter.mapNotNull { if (it.value == TriState.ENABLED_IS) it.key else null }\n        val trackFiltersIsIgnored = includedTracks.isEmpty() && excludedTracks.isEmpty()\n\n        val filterFnDownloaded: (AnimeLibraryItem) -> Boolean = {\n            applyFilter(filterDownloaded) {\n                it.libraryAnime.anime.isLocal() ||\n                    it.downloadCount > 0 ||\n                    downloadManager.getDownloadCount(it.libraryAnime.anime) > 0\n            }\n        }\n\n        val filterFnUnseen: (AnimeLibraryItem) -> Boolean = {\n            applyFilter(filterUnseen) { it.libraryAnime.unseenCount > 0 }\n        }\n\n        val filterFnStarted: (AnimeLibraryItem) -> Boolean = {\n            applyFilter(filterStarted) { it.libraryAnime.hasStarted }\n        }\n\n        val filterFnBookmarked: (AnimeLibraryItem) -> Boolean = {\n            applyFilter(filterBookmarked) { it.libraryAnime.hasBookmarks }\n        }\n\n        val filterFnCompleted: (AnimeLibraryItem) -> Boolean = {\n            applyFilter(filterCompleted) { it.libraryAnime.anime.status.toInt() == SAnime.COMPLETED }\n        }\n\n        val filterFnIntervalCustom: (AnimeLibraryItem) -> Boolean = {\n            if (skipOutsideReleasePeriod) {\n                applyFilter(filterIntervalCustom) { it.libraryAnime.anime.fetchInterval < 0 }\n            } else {\n                true\n            }\n        }\n\n        val filterFnTracking: (AnimeLibraryItem) -> Boolean = tracking@{ item ->\n            if (isNotLoggedInAnyTrack || trackFiltersIsIgnored) return@tracking true\n\n            val animeTracks = trackMap\n                .mapValues { entry -> entry.value.map { it.trackerId } }[item.libraryAnime.id]\n                .orEmpty()\n\n            val isExcluded = excludedTracks.isNotEmpty() && animeTracks.fastAny { it in excludedTracks }\n            val isIncluded = includedTracks.isEmpty() || animeTracks.fastAny { it in includedTracks }\n\n            !isExcluded && isIncluded\n        }\n\n        val filterFn: (AnimeLibraryItem) -> Boolean = {\n            filterFnDownloaded(it) &&\n                filterFnUnseen(it) &&\n                filterFnStarted(it) &&\n                filterFnBookmarked(it) &&\n                filterFnCompleted(it) &&\n                filterFnIntervalCustom(it) &&\n                filterFnTracking(it)\n        }\n\n        return mapValues { (_, value) -> value.fastFilter(filterFn) }\n    }\n\n    private fun AnimeLibraryMap.applySort(\n        trackMap: Map<Long, List<AnimeTrack>>,\n        loggedInTrackerIds: Set<Long>,\n    ): AnimeLibraryMap {\n        val sortAlphabetically: (AnimeLibraryItem, AnimeLibraryItem) -> Int = { i1, i2 ->\n            i1.libraryAnime.anime.title.lowercase().compareToWithCollator(i2.libraryAnime.anime.title.lowercase())\n        }\n\n        val defaultTrackerScoreSortValue = -1.0\n        val trackerScores by lazy {\n            val trackerMap = trackerManager.getAll(loggedInTrackerIds).associateBy { e -> e.id }\n            trackMap.mapValues { entry ->\n                when {\n                    entry.value.isEmpty() -> null\n                    else ->\n                        entry.value\n                            .mapNotNull { trackerMap[it.trackerId]?.animeService?.get10PointScore(it) }\n                            .average()\n                }\n            }\n        }\n\n        fun AnimeLibrarySort.comparator(): Comparator<AnimeLibraryItem> = Comparator { i1, i2 ->\n            when (this.type) {\n                AnimeLibrarySort.Type.Alphabetical -> {\n                    sortAlphabetically(i1, i2)\n                }\n                AnimeLibrarySort.Type.LastSeen -> {\n                    i1.libraryAnime.lastSeen.compareTo(i2.libraryAnime.lastSeen)\n                }\n                AnimeLibrarySort.Type.LastUpdate -> {\n                    i1.libraryAnime.anime.lastUpdate.compareTo(i2.libraryAnime.anime.lastUpdate)\n                }\n                AnimeLibrarySort.Type.UnseenCount -> when {\n                    // Ensure unseen content comes first\n                    i1.libraryAnime.unseenCount == i2.libraryAnime.unseenCount -> 0\n                    i1.libraryAnime.unseenCount == 0L -> if (this.isAscending) 1 else -1\n                    i2.libraryAnime.unseenCount == 0L -> if (this.isAscending) -1 else 1\n                    else -> i1.libraryAnime.unseenCount.compareTo(i2.libraryAnime.unseenCount)\n                }\n                AnimeLibrarySort.Type.TotalEpisodes -> {\n                    i1.libraryAnime.totalCount.compareTo(i2.libraryAnime.totalCount)\n                }\n                AnimeLibrarySort.Type.LatestEpisode -> {\n                    i1.libraryAnime.latestUpload.compareTo(i2.libraryAnime.latestUpload)\n                }\n                AnimeLibrarySort.Type.EpisodeFetchDate -> {\n                    i1.libraryAnime.episodeFetchedAt.compareTo(i2.libraryAnime.episodeFetchedAt)\n                }\n                AnimeLibrarySort.Type.DateAdded -> {\n                    i1.libraryAnime.anime.dateAdded.compareTo(i2.libraryAnime.anime.dateAdded)\n                }\n                AnimeLibrarySort.Type.TrackerMean -> {\n                    val item1Score = trackerScores[i1.libraryAnime.id] ?: defaultTrackerScoreSortValue\n                    val item2Score = trackerScores[i2.libraryAnime.id] ?: defaultTrackerScoreSortValue\n                    item1Score.compareTo(item2Score)\n                }\n                AnimeLibrarySort.Type.AiringTime -> when {\n                    i1.libraryAnime.unseenCount != i2.libraryAnime.unseenCount ->\n                        i1.libraryAnime.unseenCount.compareTo(i2.libraryAnime.unseenCount)\n                    i1.libraryAnime.anime.nextEpisodeAiringAt == i2.libraryAnime.anime.nextEpisodeAiringAt -> 0\n                    i1.libraryAnime.anime.nextEpisodeAiringAt == 0L -> if (this.isAscending) 1 else -1\n                    i2.libraryAnime.anime.nextEpisodeAiringAt == 0L -> if (this.isAscending) -1 else 1\n                    else -> i1.libraryAnime.anime.nextEpisodeAiringAt.compareTo(\n                        i2.libraryAnime.anime.nextEpisodeAiringAt,\n                    )\n                }\n                AnimeLibrarySort.Type.Random -> {\n                    error(\"Why Are We Still Here? Just To Suffer?\")\n                }\n            }\n        }\n\n        return mapValues { (key, value) ->\n            if (key.sort.type == AnimeLibrarySort.Type.Random) {\n                return@mapValues value.shuffled(Random(libraryPreferences.randomAnimeSortSeed().get()))\n            }\n\n            val comparator = key.sort.comparator()\n                .let { if (key.sort.isAscending) it else it.reversed() }\n                .thenComparator(sortAlphabetically)\n\n            value.sortedWith(comparator)\n        }\n    }\n\n    private fun getAnimelibItemPreferencesFlow(): Flow<ItemPreferences> {\n        return combine(\n            libraryPreferences.downloadBadge().changes(),\n            libraryPreferences.unreadBadge().changes(),\n            libraryPreferences.localBadge().changes(),\n            libraryPreferences.languageBadge().changes(),\n            libraryPreferences.autoUpdateItemRestrictions().changes(),\n\n            preferences.downloadedOnly().changes(),\n            libraryPreferences.filterDownloadedAnime().changes(),\n            libraryPreferences.filterUnseen().changes(),\n            libraryPreferences.filterStartedAnime().changes(),\n            libraryPreferences.filterBookmarkedAnime().changes(),\n            libraryPreferences.filterCompletedAnime().changes(),\n            libraryPreferences.filterIntervalCustom().changes(),\n            transform = {\n                ItemPreferences(\n                    downloadBadge = it[0] as Boolean,\n                    unseenBadge = it[1] as Boolean,\n                    localBadge = it[2] as Boolean,\n                    languageBadge = it[3] as Boolean,\n                    skipOutsideReleasePeriod = LibraryPreferences.ENTRY_OUTSIDE_RELEASE_PERIOD in (it[4] as Set<*>),\n                    globalFilterDownloaded = it[5] as Boolean,\n                    filterDownloaded = it[6] as TriState,\n                    filterUnseen = it[7] as TriState,\n                    filterStarted = it[8] as TriState,\n                    filterBookmarked = it[9] as TriState,\n                    filterCompleted = it[10] as TriState,\n                    filterIntervalCustom = it[11] as TriState,\n                )\n            },\n        )\n    }\n\n    /**\n     * Get the categories and all its anime from the database.\n     */\n    private fun getLibraryFlow(): Flow<AnimeLibraryMap> {\n        val animelibAnimesFlow = combine(\n            getLibraryAnime.subscribe(),\n            getAnimelibItemPreferencesFlow(),\n            downloadCache.changes,\n        ) { animelibAnimeList, prefs, _ ->\n            animelibAnimeList\n                .map { animelibAnime ->\n                    // Display mode based on user preference: take it from global library setting or category\n                    AnimeLibraryItem(\n                        animelibAnime,\n                        downloadCount = if (prefs.downloadBadge) {\n                            downloadManager.getDownloadCount(animelibAnime.anime).toLong()\n                        } else {\n                            0\n                        },\n                        unseenCount = if (prefs.unseenBadge) animelibAnime.unseenCount else 0,\n                        isLocal = if (prefs.localBadge) animelibAnime.anime.isLocal() else false,\n                        sourceLanguage = if (prefs.languageBadge) {\n                            sourceManager.getOrStub(animelibAnime.anime.source).lang\n                        } else {\n                            \"\"\n                        },\n                    )\n                }\n                .groupBy { it.libraryAnime.category }\n        }\n\n        return combine(getCategories.subscribe(), animelibAnimesFlow) { categories, animelibAnime ->\n            val displayCategories = if (animelibAnime.isNotEmpty() && !animelibAnime.containsKey(0)) {\n                categories.fastFilterNot { it.isSystemCategory }\n            } else {\n                categories\n            }\n\n            displayCategories.associateWith { animelibAnime[it.id].orEmpty() }\n        }\n    }\n\n    /**\n     * Flow of tracking filter preferences\n     *\n     * @return map of track id with the filter value\n     */\n    private fun getTrackingFilterFlow(): Flow<Map<Long, TriState>> {\n        return trackerManager.loggedInTrackersFlow().flatMapLatest { loggedInTrackers ->\n            if (loggedInTrackers.isEmpty()) return@flatMapLatest flowOf(emptyMap())\n\n            val prefFlows = loggedInTrackers.map { tracker ->\n                libraryPreferences.filterTrackedAnime(tracker.id.toInt()).changes()\n            }\n            combine(prefFlows) {\n                loggedInTrackers\n                    .mapIndexed { index, tracker -> tracker.id to it[index] }\n                    .toMap()\n            }\n        }\n    }\n\n    /**\n     * Returns the common categories for the given list of anime.\n     *\n     * @param animes the list of anime.\n     */\n    private suspend fun getCommonCategories(animes: List<Anime>): Collection<Category> {\n        if (animes.isEmpty()) return emptyList()\n        return animes\n            .map { getCategories.await(it.id).toSet() }\n            .reduce { set1, set2 -> set1.intersect(set2) }\n    }\n\n    suspend fun getNextUnseenEpisode(anime: Anime): Episode? {\n        return getEpisodesByAnimeId.await(anime.id).getNextUnseen(anime, downloadManager)\n    }\n\n    /**\n     * Returns the mix (non-common) categories for the given list of anime.\n     *\n     * @param animes the list of anime.\n     */\n    private suspend fun getMixCategories(animes: List<Anime>): Collection<Category> {\n        if (animes.isEmpty()) return emptyList()\n        val nimeCategories = animes.map { getCategories.await(it.id).toSet() }\n        val common = nimeCategories.reduce { set1, set2 -> set1.intersect(set2) }\n        return nimeCategories.flatten().distinct().subtract(common)\n    }\n\n    fun runDownloadActionSelection(action: DownloadAction) {\n        val selection = state.value.selection\n        val animes = selection.map { it.anime }.toList()\n        when (action) {\n            DownloadAction.NEXT_1_ITEM -> downloadUnseenEpisodes(animes, 1)\n            DownloadAction.NEXT_5_ITEMS -> downloadUnseenEpisodes(animes, 5)\n            DownloadAction.NEXT_10_ITEMS -> downloadUnseenEpisodes(animes, 10)\n            DownloadAction.NEXT_25_ITEMS -> downloadUnseenEpisodes(animes, 25)\n            DownloadAction.UNVIEWED_ITEMS -> downloadUnseenEpisodes(animes, null)\n        }\n        clearSelection()\n    }\n\n    /**\n     * Queues the amount specified of unseen episodes from the list of animes given.\n     *\n     * @param animes the list of anime.\n     * @param amount the amount to queue or null to queue all\n     */\n    private fun downloadUnseenEpisodes(animes: List<Anime>, amount: Int?) {\n        screenModelScope.launchNonCancellable {\n            animes.forEach { anime ->\n                val episodes = getNextEpisodes.await(anime.id)\n                    .fastFilterNot { episode ->\n                        downloadManager.getQueuedDownloadOrNull(episode.id) != null ||\n                            downloadManager.isEpisodeDownloaded(\n                                episode.name,\n                                episode.scanlator,\n                                anime.title,\n                                anime.source,\n                            )\n                    }\n                    .let { if (amount != null) it.take(amount) else it }\n\n                downloadManager.downloadEpisodes(anime, episodes)\n            }\n        }\n    }\n\n    /**\n     * Marks animes' episodes seen status.\n     */\n    fun markSeenSelection(seen: Boolean) {\n        val animes = state.value.selection.toList()\n        screenModelScope.launchNonCancellable {\n            animes.forEach { anime ->\n                setSeenStatus.await(\n                    anime = anime.anime,\n                    seen = seen,\n                )\n            }\n        }\n        clearSelection()\n    }\n\n    /**\n     * Remove the selected anime.\n     *\n     * @param animeList the list of anime to delete.\n     * @param deleteFromLibrary whether to delete anime from library.\n     * @param deleteEpisodes whether to delete downloaded episodes.\n     */\n    fun removeAnimes(animeList: List<Anime>, deleteFromLibrary: Boolean, deleteEpisodes: Boolean) {\n        screenModelScope.launchNonCancellable {\n            val animeToDelete = animeList.distinctBy { it.id }\n\n            if (deleteFromLibrary) {\n                val toDelete = animeToDelete.map {\n                    it.removeCovers(coverCache)\n                    it.removeBackgrounds(backgroundCache)\n                    AnimeUpdate(\n                        favorite = false,\n                        id = it.id,\n                    )\n                }\n                updateAnime.awaitAll(toDelete)\n            }\n\n            if (deleteEpisodes) {\n                animeToDelete.forEach { anime ->\n                    val source = sourceManager.get(anime.source) as? AnimeHttpSource\n                    if (source != null) {\n                        downloadManager.deleteAnime(anime, source)\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Bulk update categories of anime using old and new common categories.\n     *\n     * @param animeList the list of anime to move.\n     * @param addCategories the categories to add for all animes.\n     * @param removeCategories the categories to remove in all animes.\n     */\n    fun setAnimeCategories(\n        animeList: List<Anime>,\n        addCategories: List<Long>,\n        removeCategories: List<Long>,\n    ) {\n        screenModelScope.launchNonCancellable {\n            animeList.forEach { anime ->\n                val categoryIds = getCategories.await(anime.id)\n                    .map { it.id }\n                    .subtract(removeCategories.toSet())\n                    .plus(addCategories)\n                    .toList()\n\n                setAnimeCategories.await(anime.id, categoryIds)\n            }\n        }\n    }\n\n    fun getDisplayMode(): PreferenceMutableState<LibraryDisplayMode> {\n        return libraryPreferences.displayMode().asState(screenModelScope)\n    }\n\n    fun getColumnsPreferenceForCurrentOrientation(isLandscape: Boolean): PreferenceMutableState<Int> {\n        return (\n            if (isLandscape) {\n                libraryPreferences.animeLandscapeColumns()\n            } else {\n                libraryPreferences.animePortraitColumns()\n            }\n            ).asState(\n            screenModelScope,\n        )\n    }\n\n    suspend fun getRandomAnimelibItemForCurrentCategory(): AnimeLibraryItem? {\n        if (state.value.categories.isEmpty()) return null\n\n        return withIOContext {\n            state.value\n                .getAnimelibItemsByCategoryId(state.value.categories[activeCategoryIndex].id)\n                ?.randomOrNull()\n        }\n    }\n\n    fun showSettingsDialog() {\n        mutableState.update { it.copy(dialog = Dialog.SettingsSheet) }\n    }\n\n    fun clearSelection() {\n        mutableState.update { it.copy(selection = persistentListOf()) }\n    }\n\n    fun toggleSelection(anime: LibraryAnime) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                if (list.fastAny { it.id == anime.id }) {\n                    list.removeAll { it.id == anime.id }\n                } else {\n                    list.add(anime)\n                }\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    /**\n     * Selects all nimes between and including the given anime and the last pressed anime from the\n     * same category as the given anime\n     */\n    fun toggleRangeSelection(anime: LibraryAnime) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                val lastSelected = list.lastOrNull()\n                if (lastSelected?.category != anime.category) {\n                    list.add(anime)\n                    return@mutate\n                }\n\n                val items = state.getAnimelibItemsByCategoryId(anime.category)\n                    ?.fastMap { it.libraryAnime }.orEmpty()\n                val lastAnimeIndex = items.indexOf(lastSelected)\n                val curAnimeIndex = items.indexOf(anime)\n\n                val selectedIds = list.fastMap { it.id }\n                val selectionRange = when {\n                    lastAnimeIndex < curAnimeIndex -> IntRange(lastAnimeIndex, curAnimeIndex)\n                    curAnimeIndex < lastAnimeIndex -> IntRange(curAnimeIndex, lastAnimeIndex)\n                    // We shouldn't reach this point\n                    else -> return@mutate\n                }\n                val newSelections = selectionRange.mapNotNull { index ->\n                    items[index].takeUnless { it.id in selectedIds }\n                }\n                list.addAll(newSelections)\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    fun selectAll(index: Int) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                val categoryId = state.categories.getOrNull(index)?.id ?: -1\n                val selectedIds = list.fastMap { it.id }\n                state.getAnimelibItemsByCategoryId(categoryId)\n                    ?.fastMapNotNull { item ->\n                        item.libraryAnime.takeUnless { it.id in selectedIds }\n                    }\n                    ?.let { list.addAll(it) }\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    fun invertSelection(index: Int) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                val categoryId = state.categories[index].id\n                val items = state.getAnimelibItemsByCategoryId(categoryId)?.fastMap { it.libraryAnime }.orEmpty()\n                val selectedIds = list.fastMap { it.id }\n                val (toRemove, toAdd) = items.fastPartition { it.id in selectedIds }\n                val toRemoveIds = toRemove.fastMap { it.id }\n                list.removeAll { it.id in toRemoveIds }\n                list.addAll(toAdd)\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    fun search(query: String?) {\n        mutableState.update { it.copy(searchQuery = query) }\n    }\n\n    fun openChangeCategoryDialog() {\n        screenModelScope.launchIO {\n            // Create a copy of selected anime\n            val animeList = state.value.selection.map { it.anime }\n\n            // Hide the default category because it has a different behavior than the ones from db.\n            val categories = state.value.categories.filter { it.id != 0L }\n\n            // Get indexes of the common categories to preselect.\n            val common = getCommonCategories(animeList)\n            // Get indexes of the mix categories to preselect.\n            val mix = getMixCategories(animeList)\n            val preselected = categories\n                .map {\n                    when (it) {\n                        in common -> CheckboxState.State.Checked(it)\n                        in mix -> CheckboxState.TriState.Exclude(it)\n                        else -> CheckboxState.State.None(it)\n                    }\n                }\n                .toImmutableList()\n            mutableState.update { it.copy(dialog = Dialog.ChangeCategory(animeList, preselected)) }\n        }\n    }\n\n    fun openDeleteAnimeDialog() {\n        val nimeList = state.value.selection.map { it.anime }\n        mutableState.update { it.copy(dialog = Dialog.DeleteAnime(nimeList)) }\n    }\n\n    fun closeDialog() {\n        mutableState.update { it.copy(dialog = null) }\n    }\n\n    sealed interface Dialog {\n        data object SettingsSheet : Dialog\n        data class ChangeCategory(\n            val anime: List<Anime>,\n            val initialSelection: ImmutableList<CheckboxState<Category>>,\n        ) : Dialog\n        data class DeleteAnime(val anime: List<Anime>) : Dialog\n    }\n\n    @Immutable\n    private data class ItemPreferences(\n        val downloadBadge: Boolean,\n        val unseenBadge: Boolean,\n        val localBadge: Boolean,\n        val languageBadge: Boolean,\n        val skipOutsideReleasePeriod: Boolean,\n\n        val globalFilterDownloaded: Boolean,\n        val filterDownloaded: TriState,\n        val filterUnseen: TriState,\n        val filterStarted: TriState,\n        val filterBookmarked: TriState,\n        val filterCompleted: TriState,\n        val filterIntervalCustom: TriState,\n    )\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val library: AnimeLibraryMap = emptyMap(),\n        val searchQuery: String? = null,\n        val selection: PersistentList<LibraryAnime> = persistentListOf(),\n        val hasActiveFilters: Boolean = false,\n        val showCategoryTabs: Boolean = false,\n        val showAnimeCount: Boolean = false,\n        val showAnimeContinueButton: Boolean = false,\n        val dialog: Dialog? = null,\n    ) {\n        private val libraryCount by lazy {\n            library.values\n                .flatten()\n                .fastDistinctBy { it.libraryAnime.anime.id }\n                .size\n        }\n\n        val isLibraryEmpty by lazy { libraryCount == 0 }\n\n        val selectionMode = selection.isNotEmpty()\n\n        val categories = library.keys.toList()\n\n        fun getAnimelibItemsByCategoryId(categoryId: Long): List<AnimeLibraryItem>? {\n            return library.firstNotNullOfOrNull { (k, v) -> v.takeIf { k.id == categoryId } }\n        }\n\n        fun getAnimelibItemsByPage(page: Int): List<AnimeLibraryItem> {\n            return library.values.toTypedArray().getOrNull(page).orEmpty()\n        }\n\n        fun getAnimeCountForCategory(category: Category): Int? {\n            return if (showAnimeCount || !searchQuery.isNullOrEmpty()) library[category]?.size else null\n        }\n\n        fun getToolbarTitle(\n            defaultTitle: String,\n            defaultCategoryTitle: String,\n            page: Int,\n        ): LibraryToolbarTitle {\n            val category = categories.getOrNull(page) ?: return LibraryToolbarTitle(defaultTitle)\n            val categoryName = category.let {\n                if (it.isSystemCategory) defaultCategoryTitle else it.name\n            }\n            val title = if (showCategoryTabs) defaultTitle else categoryName\n            val count = when {\n                !showAnimeCount -> null\n                !showCategoryTabs -> getAnimeCountForCategory(category)\n                // Whole library count\n                else -> libraryCount\n            }\n\n            return LibraryToolbarTitle(title, count)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibrarySettingsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.anime\n\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.stateIn\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.anime.interactor.SetAnimeDisplayMode\nimport tachiyomi.domain.category.anime.interactor.SetSortModeForAnimeCategory\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.anime.model.AnimeLibrarySort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\nclass AnimeLibrarySettingsScreenModel(\n    val preferences: BasePreferences = Injekt.get(),\n    val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val setAnimeDisplayMode: SetAnimeDisplayMode = Injekt.get(),\n    private val setSortModeForCategory: SetSortModeForAnimeCategory = Injekt.get(),\n    trackerManager: TrackerManager = Injekt.get(),\n) : ScreenModel {\n\n    val trackersFlow = trackerManager.loggedInTrackersFlow()\n        .stateIn(\n            scope = screenModelScope,\n            started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds),\n            initialValue = trackerManager.loggedInTrackers(),\n        )\n\n    fun toggleFilter(preference: (LibraryPreferences) -> Preference<TriState>) {\n        preference(libraryPreferences).getAndSet {\n            it.next()\n        }\n    }\n\n    fun toggleTracker(id: Int) {\n        toggleFilter { libraryPreferences.filterTrackedAnime(id) }\n    }\n\n    fun setDisplayMode(mode: LibraryDisplayMode) {\n        setAnimeDisplayMode.await(mode)\n    }\n\n    fun setSort(\n        category: Category?,\n        mode: AnimeLibrarySort.Type,\n        direction: AnimeLibrarySort.Direction,\n    ) {\n        screenModelScope.launchIO {\n            setSortModeForCategory.await(category, mode, direction)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.anime\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.util.fastAll\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.entries.components.LibraryBottomActionMenu\nimport eu.kanade.presentation.library.DeleteLibraryEntryDialog\nimport eu.kanade.presentation.library.anime.AnimeLibraryContent\nimport eu.kanade.presentation.library.anime.AnimeLibrarySettingsDialog\nimport eu.kanade.presentation.library.components.LibraryToolbar\nimport eu.kanade.presentation.more.onboarding.GETTING_STARTED_URL\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.injectLazy\n\ndata object AnimeLibraryTab : Tab {\n\n    @OptIn(ExperimentalAnimationGraphicsApi::class)\n    override val options: TabOptions\n        @Composable\n        get() {\n            val title = AYMR.strings.label_anime_library\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(\n                R.drawable.anim_animelibrary_leave,\n            )\n            return TabOptions(\n                index = 0u,\n                title = stringResource(title),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    override suspend fun onReselect(navigator: Navigator) {\n        requestOpenSettingsSheet()\n    }\n\n    @OptIn(ExperimentalMaterial3Api::class)\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val scope = rememberCoroutineScope()\n        val haptic = LocalHapticFeedback.current\n\n        val screenModel = rememberScreenModel { AnimeLibraryScreenModel() }\n        val settingsScreenModel = rememberScreenModel { AnimeLibrarySettingsScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        val onClickRefresh: (Category?) -> Boolean = { category ->\n            val started = AnimeLibraryUpdateJob.startNow(context, category)\n            scope.launch {\n                val msgRes = if (started) MR.strings.updating_category else MR.strings.update_already_running\n                snackbarHostState.showSnackbar(context.stringResource(msgRes))\n            }\n            started\n        }\n\n        suspend fun openEpisode(episode: Episode) {\n            val playerPreferences: PlayerPreferences by injectLazy()\n            val extPlayer = playerPreferences.alwaysUseExternalPlayer().get()\n            MainActivity.startPlayerActivity(context, episode.animeId, episode.id, extPlayer)\n        }\n\n        val defaultTitle = stringResource(AYMR.strings.label_anime_library)\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                val title = state.getToolbarTitle(\n                    defaultTitle = defaultTitle,\n                    defaultCategoryTitle = stringResource(MR.strings.label_default),\n                    page = screenModel.activeCategoryIndex,\n                )\n                val tabVisible = state.showCategoryTabs && state.categories.size > 1\n                LibraryToolbar(\n                    hasActiveFilters = state.hasActiveFilters,\n                    selectedCount = state.selection.size,\n                    title = title,\n                    onClickUnselectAll = screenModel::clearSelection,\n                    onClickSelectAll = { screenModel.selectAll(screenModel.activeCategoryIndex) },\n                    onClickInvertSelection = {\n                        screenModel.invertSelection(\n                            screenModel.activeCategoryIndex,\n                        )\n                    },\n                    onClickFilter = screenModel::showSettingsDialog,\n                    onClickRefresh = {\n                        onClickRefresh(\n                            state.categories[screenModel.activeCategoryIndex],\n                        )\n                    },\n                    onClickGlobalUpdate = { onClickRefresh(null) },\n                    onClickOpenRandomEntry = {\n                        scope.launch {\n                            val randomItem = screenModel.getRandomAnimelibItemForCurrentCategory()\n                            if (randomItem != null) {\n                                navigator.push(AnimeScreen(randomItem.libraryAnime.anime.id))\n                            } else {\n                                snackbarHostState.showSnackbar(\n                                    context.stringResource(MR.strings.information_no_entries_found),\n                                )\n                            }\n                        }\n                    },\n                    searchQuery = state.searchQuery,\n                    onSearchQueryChange = screenModel::search,\n                    scrollBehavior = scrollBehavior.takeIf { !tabVisible }, // For scroll overlay when no tab\n                )\n            },\n            bottomBar = {\n                LibraryBottomActionMenu(\n                    visible = state.selectionMode,\n                    onChangeCategoryClicked = screenModel::openChangeCategoryDialog,\n                    onMarkAsViewedClicked = { screenModel.markSeenSelection(true) },\n                    onMarkAsUnviewedClicked = { screenModel.markSeenSelection(false) },\n                    onDownloadClicked = screenModel::runDownloadActionSelection\n                        .takeIf { state.selection.fastAll { !it.anime.isLocal() } },\n                    onDeleteClicked = screenModel::openDeleteAnimeDialog,\n                    isManga = false,\n                )\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        ) { contentPadding ->\n            when {\n                state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n                state.searchQuery.isNullOrEmpty() && !state.hasActiveFilters && state.isLibraryEmpty -> {\n                    val handler = LocalUriHandler.current\n                    EmptyScreen(\n                        stringRes = MR.strings.information_empty_library,\n                        modifier = Modifier.padding(contentPadding),\n                        actions = persistentListOf(\n                            EmptyScreenAction(\n                                stringRes = MR.strings.getting_started_guide,\n                                icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                                onClick = { handler.openUri(GETTING_STARTED_URL) },\n                            ),\n                        ),\n                    )\n                }\n                else -> {\n                    AnimeLibraryContent(\n                        categories = state.categories,\n                        searchQuery = state.searchQuery,\n                        selection = state.selection,\n                        contentPadding = contentPadding,\n                        currentPage = { screenModel.activeCategoryIndex },\n                        hasActiveFilters = state.hasActiveFilters,\n                        showPageTabs = state.showCategoryTabs || !state.searchQuery.isNullOrEmpty(),\n                        onChangeCurrentPage = { screenModel.activeCategoryIndex = it },\n                        onAnimeClicked = { navigator.push(AnimeScreen(it)) },\n                        onContinueWatchingClicked = { it: LibraryAnime ->\n                            scope.launchIO {\n                                val episode = screenModel.getNextUnseenEpisode(it.anime)\n                                if (episode != null) openEpisode(episode)\n                            }\n                            Unit\n                        }.takeIf { state.showAnimeContinueButton },\n                        onToggleSelection = screenModel::toggleSelection,\n                        onToggleRangeSelection = {\n                            screenModel.toggleRangeSelection(it)\n                            haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                        },\n                        onRefresh = onClickRefresh,\n                        onGlobalSearchClicked = {\n                            navigator.push(\n                                GlobalAnimeSearchScreen(screenModel.state.value.searchQuery ?: \"\"),\n                            )\n                        },\n                        getNumberOfAnimeForCategory = { state.getAnimeCountForCategory(it) },\n                        getDisplayMode = { screenModel.getDisplayMode() },\n                        getColumnsForOrientation = {\n                            screenModel.getColumnsPreferenceForCurrentOrientation(\n                                it,\n                            )\n                        },\n                    ) { state.getAnimelibItemsByPage(it) }\n                }\n            }\n        }\n\n        val onDismissRequest = screenModel::closeDialog\n        when (val dialog = state.dialog) {\n            is AnimeLibraryScreenModel.Dialog.SettingsSheet -> run {\n                val category = state.categories.getOrNull(screenModel.activeCategoryIndex)\n                if (category == null) {\n                    onDismissRequest()\n                    return@run\n                }\n                AnimeLibrarySettingsDialog(\n                    onDismissRequest = onDismissRequest,\n                    screenModel = settingsScreenModel,\n                    category = category,\n                )\n            }\n            is AnimeLibraryScreenModel.Dialog.ChangeCategory -> {\n                ChangeCategoryDialog(\n                    initialSelection = dialog.initialSelection,\n                    onDismissRequest = onDismissRequest,\n                    onEditCategories = {\n                        screenModel.clearSelection()\n                        navigator.push(CategoriesTab)\n                    },\n                    onConfirm = { include, exclude ->\n                        screenModel.clearSelection()\n                        screenModel.setAnimeCategories(dialog.anime, include, exclude)\n                    },\n                )\n            }\n            is AnimeLibraryScreenModel.Dialog.DeleteAnime -> {\n                DeleteLibraryEntryDialog(\n                    containsLocalEntry = dialog.anime.any(Anime::isLocal),\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = { deleteAnime, deleteEpisode ->\n                        screenModel.removeAnimes(dialog.anime, deleteAnime, deleteEpisode)\n                        screenModel.clearSelection()\n                    },\n                    isManga = false,\n                )\n            }\n            null -> {}\n        }\n\n        BackHandler(enabled = state.selectionMode || state.searchQuery != null) {\n            when {\n                state.selectionMode -> screenModel.clearSelection()\n                state.searchQuery != null -> screenModel.search(null)\n            }\n        }\n\n        LaunchedEffect(state.selectionMode, state.dialog) {\n            HomeScreen.showBottomNav(!state.selectionMode)\n        }\n\n        LaunchedEffect(state.isLoading) {\n            if (!state.isLoading) {\n                (context as? MainActivity)?.ready = true\n            }\n        }\n\n        LaunchedEffect(Unit) {\n            launch { queryEvent.receiveAsFlow().collect(screenModel::search) }\n            launch { requestSettingsSheetEvent.receiveAsFlow().collectLatest { screenModel.showSettingsDialog() } }\n        }\n    }\n\n    // For invoking search from other screen\n    private val queryEvent = Channel<String>()\n    suspend fun search(query: String) = queryEvent.send(query)\n\n    // For opening settings sheet in LibraryController\n    private val requestSettingsSheetEvent = Channel<Unit>()\n    private suspend fun requestOpenSettingsSheet() = requestSettingsSheetEvent.send(Unit)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryItem.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.manga\n\nimport eu.kanade.tachiyomi.source.manga.getNameForMangaInfo\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaLibraryItem(\n    val libraryManga: LibraryManga,\n    var downloadCount: Long = -1,\n    var unreadCount: Long = -1,\n    var isLocal: Boolean = false,\n    var sourceLanguage: String = \"\",\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n) {\n    /**\n     * Checks if a query matches the manga\n     *\n     * @param constraint the query to check.\n     * @return true if the manga matches the query, false otherwise.\n     */\n    fun matches(constraint: String): Boolean {\n        val sourceName by lazy { sourceManager.getOrStub(libraryManga.manga.source).getNameForMangaInfo() }\n        if (constraint.startsWith(\"id:\", true)) {\n            val id = constraint.substringAfter(\"id:\").toLongOrNull()\n            return libraryManga.id == id\n        }\n        return libraryManga.manga.title.contains(constraint, true) ||\n            (libraryManga.manga.author?.contains(constraint, true) ?: false) ||\n            (libraryManga.manga.artist?.contains(constraint, true) ?: false) ||\n            (libraryManga.manga.description?.contains(constraint, true) ?: false) ||\n            constraint.split(\",\").map { it.trim() }.all { subconstraint ->\n                checkNegatableConstraint(subconstraint) {\n                    sourceName.contains(it, true) ||\n                        (libraryManga.manga.genre?.any { genre -> genre.equals(it, true) } ?: false)\n                }\n            }\n    }\n\n    /**\n     * Checks a predicate on a negatable constraint. If the constraint starts with a minus character,\n     * the minus is stripped and the result of the predicate is inverted.\n     *\n     * @param constraint the argument to the predicate. Inverts the predicate if it starts with '-'.\n     * @param predicate the check to be run against the constraint.\n     * @return !predicate(x) if constraint = \"-x\", otherwise predicate(constraint)\n     */\n    private fun checkNegatableConstraint(\n        constraint: String,\n        predicate: (String) -> Boolean,\n    ): Boolean {\n        return if (constraint.startsWith(\"-\")) {\n            !predicate(constraint.substringAfter(\"-\").trimStart())\n        } else {\n            predicate(constraint)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.manga\n\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.util.fastAny\nimport androidx.compose.ui.util.fastDistinctBy\nimport androidx.compose.ui.util.fastFilter\nimport androidx.compose.ui.util.fastMap\nimport androidx.compose.ui.util.fastMapNotNull\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.PreferenceMutableState\nimport eu.kanade.core.preference.asState\nimport eu.kanade.core.util.fastFilterNot\nimport eu.kanade.core.util.fastPartition\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.items.chapter.interactor.SetReadStatus\nimport eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS\nimport eu.kanade.presentation.entries.DownloadAction\nimport eu.kanade.presentation.library.components.LibraryToolbarTitle\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.util.chapter.getNextUnread\nimport eu.kanade.tachiyomi.util.removeCovers\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.PersistentList\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.debounce\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.flatMapLatest\nimport kotlinx.coroutines.flow.flowOf\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.preference.CheckboxState\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.category.manga.interactor.GetVisibleMangaCategories\nimport tachiyomi.domain.category.manga.interactor.SetMangaCategories\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.applyFilter\nimport tachiyomi.domain.entries.manga.interactor.GetLibraryManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.history.manga.interactor.GetNextChapters\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.library.manga.model.MangaLibrarySort\nimport tachiyomi.domain.library.manga.model.sort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.track.manga.interactor.GetTracksPerManga\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.random.Random\n\n/**\n * Typealias for the library manga, using the category as keys, and list of manga as values.\n */\ntypealias MangaLibraryMap = Map<Category, List<MangaLibraryItem>>\n\nclass MangaLibraryScreenModel(\n    private val getLibraryManga: GetLibraryManga = Injekt.get(),\n    private val getCategories: GetVisibleMangaCategories = Injekt.get(),\n    private val getTracksPerManga: GetTracksPerManga = Injekt.get(),\n    private val getNextChapters: GetNextChapters = Injekt.get(),\n    private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(),\n    private val setReadStatus: SetReadStatus = Injekt.get(),\n    private val updateManga: UpdateManga = Injekt.get(),\n    private val setMangaCategories: SetMangaCategories = Injekt.get(),\n    private val preferences: BasePreferences = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val coverCache: MangaCoverCache = Injekt.get(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val downloadCache: MangaDownloadCache = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n) : StateScreenModel<MangaLibraryScreenModel.State>(State()) {\n\n    var activeCategoryIndex: Int by libraryPreferences.lastUsedMangaCategory().asState(\n        screenModelScope,\n    )\n\n    init {\n        screenModelScope.launchIO {\n            combine(\n                state.map { it.searchQuery }.debounce(SEARCH_DEBOUNCE_MILLIS),\n                getLibraryFlow(),\n                getTracksPerManga.subscribe(),\n                getTrackingFilterFlow(),\n                downloadCache.changes,\n            ) { searchQuery, library, tracks, trackingFilter, _ ->\n                library\n                    .applyFilters(tracks, trackingFilter)\n                    .applySort(tracks, trackingFilter.keys)\n                    .mapValues { (_, value) ->\n                        if (searchQuery != null) {\n                            value.filter { it.matches(searchQuery) }\n                        } else {\n                            value\n                        }\n                    }\n            }\n                .collectLatest {\n                    mutableState.update { state ->\n                        state.copy(\n                            isLoading = false,\n                            library = it,\n                        )\n                    }\n                }\n        }\n\n        combine(\n            libraryPreferences.categoryTabs().changes(),\n            libraryPreferences.categoryNumberOfItems().changes(),\n            libraryPreferences.showContinueViewingButton().changes(),\n        ) { a, b, c -> arrayOf(a, b, c) }\n            .onEach { (showCategoryTabs, showMangaCount, showMangaContinueButton) ->\n                mutableState.update { state ->\n                    state.copy(\n                        showCategoryTabs = showCategoryTabs,\n                        showMangaCount = showMangaCount,\n                        showMangaContinueButton = showMangaContinueButton,\n                    )\n                }\n            }\n            .launchIn(screenModelScope)\n\n        combine(\n            getLibraryItemPreferencesFlow(),\n            getTrackingFilterFlow(),\n        ) { prefs, trackFilter ->\n            (\n                listOf(\n                    prefs.filterDownloaded,\n                    prefs.filterUnread,\n                    prefs.filterStarted,\n                    prefs.filterBookmarked,\n                    prefs.filterCompleted,\n                    prefs.filterIntervalCustom,\n                ) + trackFilter.values\n                ).any { it != TriState.DISABLED }\n        }\n            .distinctUntilChanged()\n            .onEach {\n                mutableState.update { state ->\n                    state.copy(hasActiveFilters = it)\n                }\n            }\n            .launchIn(screenModelScope)\n    }\n\n    private suspend fun MangaLibraryMap.applyFilters(\n        trackMap: Map<Long, List<MangaTrack>>,\n        trackingFilter: Map<Long, TriState>,\n    ): MangaLibraryMap {\n        val prefs = getLibraryItemPreferencesFlow().first()\n        val downloadedOnly = prefs.globalFilterDownloaded\n        val skipOutsideReleasePeriod = prefs.skipOutsideReleasePeriod\n        val filterDownloaded = if (downloadedOnly) TriState.ENABLED_IS else prefs.filterDownloaded\n        val filterUnread = prefs.filterUnread\n        val filterStarted = prefs.filterStarted\n        val filterBookmarked = prefs.filterBookmarked\n        val filterCompleted = prefs.filterCompleted\n        val filterIntervalCustom = prefs.filterIntervalCustom\n\n        val isNotLoggedInAnyTrack = trackingFilter.isEmpty()\n\n        val excludedTracks = trackingFilter.mapNotNull { if (it.value == TriState.ENABLED_NOT) it.key else null }\n        val includedTracks = trackingFilter.mapNotNull { if (it.value == TriState.ENABLED_IS) it.key else null }\n        val trackFiltersIsIgnored = includedTracks.isEmpty() && excludedTracks.isEmpty()\n\n        val filterFnDownloaded: (MangaLibraryItem) -> Boolean = {\n            applyFilter(filterDownloaded) {\n                it.libraryManga.manga.isLocal() ||\n                    it.downloadCount > 0 ||\n                    downloadManager.getDownloadCount(it.libraryManga.manga) > 0\n            }\n        }\n\n        val filterFnUnread: (MangaLibraryItem) -> Boolean = {\n            applyFilter(filterUnread) { it.libraryManga.unreadCount > 0 }\n        }\n\n        val filterFnStarted: (MangaLibraryItem) -> Boolean = {\n            applyFilter(filterStarted) { it.libraryManga.hasStarted }\n        }\n\n        val filterFnBookmarked: (MangaLibraryItem) -> Boolean = {\n            applyFilter(filterBookmarked) { it.libraryManga.hasBookmarks }\n        }\n\n        val filterFnCompleted: (MangaLibraryItem) -> Boolean = {\n            applyFilter(filterCompleted) { it.libraryManga.manga.status.toInt() == SManga.COMPLETED }\n        }\n\n        val filterFnIntervalCustom: (MangaLibraryItem) -> Boolean = {\n            if (skipOutsideReleasePeriod) {\n                applyFilter(filterIntervalCustom) { it.libraryManga.manga.fetchInterval < 0 }\n            } else {\n                true\n            }\n        }\n\n        val filterFnTracking: (MangaLibraryItem) -> Boolean = tracking@{ item ->\n            if (isNotLoggedInAnyTrack || trackFiltersIsIgnored) return@tracking true\n\n            val mangaTracks = trackMap\n                .mapValues { entry -> entry.value.map { it.trackerId } }[item.libraryManga.id]\n                .orEmpty()\n\n            val isExcluded = excludedTracks.isNotEmpty() && mangaTracks.fastAny { it in excludedTracks }\n            val isIncluded = includedTracks.isEmpty() || mangaTracks.fastAny { it in includedTracks }\n\n            !isExcluded && isIncluded\n        }\n\n        val filterFn: (MangaLibraryItem) -> Boolean = {\n            filterFnDownloaded(it) &&\n                filterFnUnread(it) &&\n                filterFnStarted(it) &&\n                filterFnBookmarked(it) &&\n                filterFnCompleted(it) &&\n                filterFnIntervalCustom(it) &&\n                filterFnTracking(it)\n        }\n\n        return mapValues { (_, value) -> value.fastFilter(filterFn) }\n    }\n\n    private fun MangaLibraryMap.applySort(\n        trackMap: Map<Long, List<MangaTrack>>,\n        loggedInTrackerIds: Set<Long>,\n    ): MangaLibraryMap {\n        val sortAlphabetically: (MangaLibraryItem, MangaLibraryItem) -> Int = { i1, i2 ->\n            i1.libraryManga.manga.title.lowercase().compareToWithCollator(i2.libraryManga.manga.title.lowercase())\n        }\n\n        val defaultTrackerScoreSortValue = -1.0\n        val trackerScores by lazy {\n            val trackerMap = trackerManager.getAll(loggedInTrackerIds).associateBy { e -> e.id }\n            trackMap.mapValues { entry ->\n                when {\n                    entry.value.isEmpty() -> null\n                    else ->\n                        entry.value\n                            .mapNotNull { trackerMap[it.trackerId]?.mangaService?.get10PointScore(it) }\n                            .average()\n                }\n            }\n        }\n\n        fun MangaLibrarySort.comparator(): Comparator<MangaLibraryItem> = Comparator { i1, i2 ->\n            when (this.type) {\n                MangaLibrarySort.Type.Alphabetical -> {\n                    sortAlphabetically(i1, i2)\n                }\n                MangaLibrarySort.Type.LastRead -> {\n                    i1.libraryManga.lastRead.compareTo(i2.libraryManga.lastRead)\n                }\n                MangaLibrarySort.Type.LastUpdate -> {\n                    i1.libraryManga.manga.lastUpdate.compareTo(i2.libraryManga.manga.lastUpdate)\n                }\n                MangaLibrarySort.Type.UnreadCount -> when {\n                    // Ensure unread content comes first\n                    i1.libraryManga.unreadCount == i2.libraryManga.unreadCount -> 0\n                    i1.libraryManga.unreadCount == 0L -> if (this.isAscending) 1 else -1\n                    i2.libraryManga.unreadCount == 0L -> if (this.isAscending) -1 else 1\n                    else -> i1.libraryManga.unreadCount.compareTo(i2.libraryManga.unreadCount)\n                }\n                MangaLibrarySort.Type.TotalChapters -> {\n                    i1.libraryManga.totalChapters.compareTo(i2.libraryManga.totalChapters)\n                }\n                MangaLibrarySort.Type.LatestChapter -> {\n                    i1.libraryManga.latestUpload.compareTo(i2.libraryManga.latestUpload)\n                }\n                MangaLibrarySort.Type.ChapterFetchDate -> {\n                    i1.libraryManga.chapterFetchedAt.compareTo(i2.libraryManga.chapterFetchedAt)\n                }\n                MangaLibrarySort.Type.DateAdded -> {\n                    i1.libraryManga.manga.dateAdded.compareTo(i2.libraryManga.manga.dateAdded)\n                }\n                MangaLibrarySort.Type.TrackerMean -> {\n                    val item1Score = trackerScores[i1.libraryManga.id] ?: defaultTrackerScoreSortValue\n                    val item2Score = trackerScores[i2.libraryManga.id] ?: defaultTrackerScoreSortValue\n                    item1Score.compareTo(item2Score)\n                }\n                MangaLibrarySort.Type.Random -> {\n                    error(\"Why Are We Still Here? Just To Suffer?\")\n                }\n            }\n        }\n\n        return mapValues { (key, value) ->\n            if (key.sort.type == MangaLibrarySort.Type.Random) {\n                return@mapValues value.shuffled(Random(libraryPreferences.randomMangaSortSeed().get()))\n            }\n\n            val comparator = key.sort.comparator()\n                .let { if (key.sort.isAscending) it else it.reversed() }\n                .thenComparator(sortAlphabetically)\n\n            value.sortedWith(comparator)\n        }\n    }\n\n    private fun getLibraryItemPreferencesFlow(): Flow<ItemPreferences> {\n        return combine(\n            libraryPreferences.downloadBadge().changes(),\n            libraryPreferences.unreadBadge().changes(),\n            libraryPreferences.localBadge().changes(),\n            libraryPreferences.languageBadge().changes(),\n            libraryPreferences.autoUpdateItemRestrictions().changes(),\n\n            preferences.downloadedOnly().changes(),\n            libraryPreferences.filterDownloadedManga().changes(),\n            libraryPreferences.filterUnread().changes(),\n            libraryPreferences.filterStartedManga().changes(),\n            libraryPreferences.filterBookmarkedManga().changes(),\n            libraryPreferences.filterCompletedManga().changes(),\n            libraryPreferences.filterIntervalCustom().changes(),\n        ) {\n            ItemPreferences(\n                downloadBadge = it[0] as Boolean,\n                unreadBadge = it[1] as Boolean,\n                localBadge = it[2] as Boolean,\n                languageBadge = it[3] as Boolean,\n                skipOutsideReleasePeriod = LibraryPreferences.ENTRY_OUTSIDE_RELEASE_PERIOD in (it[4] as Set<*>),\n                globalFilterDownloaded = it[5] as Boolean,\n                filterDownloaded = it[6] as TriState,\n                filterUnread = it[7] as TriState,\n                filterStarted = it[8] as TriState,\n                filterBookmarked = it[9] as TriState,\n                filterCompleted = it[10] as TriState,\n                filterIntervalCustom = it[11] as TriState,\n            )\n        }\n    }\n\n    /**\n     * Get the categories and all its manga from the database.\n     */\n    private fun getLibraryFlow(): Flow<MangaLibraryMap> {\n        val libraryMangasFlow = combine(\n            getLibraryManga.subscribe(),\n            getLibraryItemPreferencesFlow(),\n            downloadCache.changes,\n        ) { libraryMangaList, prefs, _ ->\n            libraryMangaList\n                .map { libraryManga ->\n                    // Display mode based on user preference: take it from global library setting or category\n                    MangaLibraryItem(\n                        libraryManga,\n                        downloadCount = if (prefs.downloadBadge) {\n                            downloadManager.getDownloadCount(libraryManga.manga).toLong()\n                        } else {\n                            0\n                        },\n                        unreadCount = if (prefs.unreadBadge) libraryManga.unreadCount else 0,\n                        isLocal = if (prefs.localBadge) libraryManga.manga.isLocal() else false,\n                        sourceLanguage = if (prefs.languageBadge) {\n                            sourceManager.getOrStub(libraryManga.manga.source).lang\n                        } else {\n                            \"\"\n                        },\n                    )\n                }\n                .groupBy { it.libraryManga.category }\n        }\n\n        return combine(getCategories.subscribe(), libraryMangasFlow) { categories, libraryManga ->\n            val displayCategories = if (libraryManga.isNotEmpty() && !libraryManga.containsKey(0)) {\n                categories.fastFilterNot { it.isSystemCategory }\n            } else {\n                categories\n            }\n\n            displayCategories.associateWith { libraryManga[it.id].orEmpty() }\n        }\n    }\n\n    /**\n     * Flow of tracking filter preferences\n     *\n     * @return map of track id with the filter value\n     */\n    private fun getTrackingFilterFlow(): Flow<Map<Long, TriState>> {\n        return trackerManager.loggedInTrackersFlow().flatMapLatest { loggedInTrackers ->\n            if (loggedInTrackers.isEmpty()) return@flatMapLatest flowOf(emptyMap())\n\n            val prefFlows = loggedInTrackers.map { tracker ->\n                libraryPreferences.filterTrackedManga(tracker.id.toInt()).changes()\n            }\n            combine(prefFlows) {\n                loggedInTrackers\n                    .mapIndexed { index, tracker -> tracker.id to it[index] }\n                    .toMap()\n            }\n        }\n    }\n\n    /**\n     * Returns the common categories for the given list of manga.\n     *\n     * @param mangas the list of manga.\n     */\n    private suspend fun getCommonCategories(mangas: List<Manga>): Collection<Category> {\n        if (mangas.isEmpty()) return emptyList()\n        return mangas\n            .map { getCategories.await(it.id).toSet() }\n            .reduce { set1, set2 -> set1.intersect(set2) }\n    }\n\n    suspend fun getNextUnreadChapter(manga: Manga): Chapter? {\n        return getChaptersByMangaId.await(manga.id, applyScanlatorFilter = true).getNextUnread(manga, downloadManager)\n    }\n\n    /**\n     * Returns the mix (non-common) categories for the given list of manga.\n     *\n     * @param mangas the list of manga.\n     */\n    private suspend fun getMixCategories(mangas: List<Manga>): Collection<Category> {\n        if (mangas.isEmpty()) return emptyList()\n        val mangaCategories = mangas.map { getCategories.await(it.id).toSet() }\n        val common = mangaCategories.reduce { set1, set2 -> set1.intersect(set2) }\n        return mangaCategories.flatten().distinct().subtract(common)\n    }\n\n    fun runDownloadActionSelection(action: DownloadAction) {\n        val selection = state.value.selection\n        val mangas = selection.map { it.manga }.toList()\n        when (action) {\n            DownloadAction.NEXT_1_ITEM -> downloadUnreadChapters(mangas, 1)\n            DownloadAction.NEXT_5_ITEMS -> downloadUnreadChapters(mangas, 5)\n            DownloadAction.NEXT_10_ITEMS -> downloadUnreadChapters(mangas, 10)\n            DownloadAction.NEXT_25_ITEMS -> downloadUnreadChapters(mangas, 25)\n            DownloadAction.UNVIEWED_ITEMS -> downloadUnreadChapters(mangas, null)\n        }\n        clearSelection()\n    }\n\n    /**\n     * Queues the amount specified of unread chapters from the list of mangas given.\n     *\n     * @param mangas the list of manga.\n     * @param amount the amount to queue or null to queue all\n     */\n    private fun downloadUnreadChapters(mangas: List<Manga>, amount: Int?) {\n        screenModelScope.launchNonCancellable {\n            mangas.forEach { manga ->\n                val chapters = getNextChapters.await(manga.id)\n                    .fastFilterNot { chapter ->\n                        downloadManager.getQueuedDownloadOrNull(chapter.id) != null ||\n                            downloadManager.isChapterDownloaded(\n                                chapter.name,\n                                chapter.scanlator,\n                                manga.title,\n                                manga.source,\n                            )\n                    }\n                    .let { if (amount != null) it.take(amount) else it }\n\n                downloadManager.downloadChapters(manga, chapters)\n            }\n        }\n    }\n\n    /**\n     * Marks mangas' chapters read status.\n     */\n    fun markReadSelection(read: Boolean) {\n        val mangas = state.value.selection.toList()\n        screenModelScope.launchNonCancellable {\n            mangas.forEach { manga ->\n                setReadStatus.await(\n                    manga = manga.manga,\n                    read = read,\n                )\n            }\n        }\n        clearSelection()\n    }\n\n    /**\n     * Remove the selected manga.\n     *\n     * @param mangaList the list of manga to delete.\n     * @param deleteFromLibrary whether to delete manga from library.\n     * @param deleteChapters whether to delete downloaded chapters.\n     */\n    fun removeMangas(mangaList: List<Manga>, deleteFromLibrary: Boolean, deleteChapters: Boolean) {\n        screenModelScope.launchNonCancellable {\n            val mangaToDelete = mangaList.distinctBy { it.id }\n\n            if (deleteFromLibrary) {\n                val toDelete = mangaToDelete.map {\n                    it.removeCovers(coverCache)\n                    MangaUpdate(\n                        favorite = false,\n                        id = it.id,\n                    )\n                }\n                updateManga.awaitAll(toDelete)\n            }\n\n            if (deleteChapters) {\n                mangaToDelete.forEach { manga ->\n                    val source = sourceManager.get(manga.source) as? HttpSource\n                    if (source != null) {\n                        downloadManager.deleteManga(manga, source)\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Bulk update categories of manga using old and new common categories.\n     *\n     * @param mangaList the list of manga to move.\n     * @param addCategories the categories to add for all mangas.\n     * @param removeCategories the categories to remove in all mangas.\n     */\n    fun setMangaCategories(\n        mangaList: List<Manga>,\n        addCategories: List<Long>,\n        removeCategories: List<Long>,\n    ) {\n        screenModelScope.launchNonCancellable {\n            mangaList.forEach { manga ->\n                val categoryIds = getCategories.await(manga.id)\n                    .map { it.id }\n                    .subtract(removeCategories.toSet())\n                    .plus(addCategories)\n                    .toList()\n\n                setMangaCategories.await(manga.id, categoryIds)\n            }\n        }\n    }\n\n    fun getDisplayMode(): PreferenceMutableState<LibraryDisplayMode> {\n        return libraryPreferences.displayMode().asState(screenModelScope)\n    }\n\n    fun getColumnsPreferenceForCurrentOrientation(isLandscape: Boolean): PreferenceMutableState<Int> {\n        return (\n            if (isLandscape) {\n                libraryPreferences.mangaLandscapeColumns()\n            } else {\n                libraryPreferences.mangaPortraitColumns()\n            }\n            ).asState(\n            screenModelScope,\n        )\n    }\n\n    suspend fun getRandomLibraryItemForCurrentCategory(): MangaLibraryItem? {\n        if (state.value.categories.isEmpty()) return null\n\n        return withIOContext {\n            state.value\n                .getLibraryItemsByCategoryId(state.value.categories[activeCategoryIndex].id)\n                ?.randomOrNull()\n        }\n    }\n\n    fun showSettingsDialog() {\n        mutableState.update { it.copy(dialog = Dialog.SettingsSheet) }\n    }\n\n    fun clearSelection() {\n        mutableState.update { it.copy(selection = persistentListOf()) }\n    }\n\n    fun toggleSelection(manga: LibraryManga) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                if (list.fastAny { it.id == manga.id }) {\n                    list.removeAll { it.id == manga.id }\n                } else {\n                    list.add(manga)\n                }\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    /**\n     * Selects all mangas between and including the given manga and the last pressed manga from the\n     * same category as the given manga\n     */\n    fun toggleRangeSelection(manga: LibraryManga) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                val lastSelected = list.lastOrNull()\n                if (lastSelected?.category != manga.category) {\n                    list.add(manga)\n                    return@mutate\n                }\n\n                val items = state.getLibraryItemsByCategoryId(manga.category)\n                    ?.fastMap { it.libraryManga }.orEmpty()\n                val lastMangaIndex = items.indexOf(lastSelected)\n                val curMangaIndex = items.indexOf(manga)\n\n                val selectedIds = list.fastMap { it.id }\n                val selectionRange = when {\n                    lastMangaIndex < curMangaIndex -> IntRange(lastMangaIndex, curMangaIndex)\n                    curMangaIndex < lastMangaIndex -> IntRange(curMangaIndex, lastMangaIndex)\n                    // We shouldn't reach this point\n                    else -> return@mutate\n                }\n                val newSelections = selectionRange.mapNotNull { index ->\n                    items[index].takeUnless { it.id in selectedIds }\n                }\n                list.addAll(newSelections)\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    fun selectAll(index: Int) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                val categoryId = state.categories.getOrNull(index)?.id ?: -1\n                val selectedIds = list.fastMap { it.id }\n                state.getLibraryItemsByCategoryId(categoryId)\n                    ?.fastMapNotNull { item ->\n                        item.libraryManga.takeUnless { it.id in selectedIds }\n                    }\n                    ?.let { list.addAll(it) }\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    fun invertSelection(index: Int) {\n        mutableState.update { state ->\n            val newSelection = state.selection.mutate { list ->\n                val categoryId = state.categories[index].id\n                val items = state.getLibraryItemsByCategoryId(categoryId)?.fastMap { it.libraryManga }.orEmpty()\n                val selectedIds = list.fastMap { it.id }\n                val (toRemove, toAdd) = items.fastPartition { it.id in selectedIds }\n                val toRemoveIds = toRemove.fastMap { it.id }\n                list.removeAll { it.id in toRemoveIds }\n                list.addAll(toAdd)\n            }\n            state.copy(selection = newSelection)\n        }\n    }\n\n    fun search(query: String?) {\n        mutableState.update { it.copy(searchQuery = query) }\n    }\n\n    fun openChangeCategoryDialog() {\n        screenModelScope.launchIO {\n            // Create a copy of selected manga\n            val mangaList = state.value.selection.map { it.manga }\n\n            // Hide the default category because it has a different behavior than the ones from db.\n            val categories = state.value.categories.filter { it.id != 0L }\n\n            // Get indexes of the common categories to preselect.\n            val common = getCommonCategories(mangaList)\n            // Get indexes of the mix categories to preselect.\n            val mix = getMixCategories(mangaList)\n            val preselected = categories\n                .map {\n                    when (it) {\n                        in common -> CheckboxState.State.Checked(it)\n                        in mix -> CheckboxState.TriState.Exclude(it)\n                        else -> CheckboxState.State.None(it)\n                    }\n                }\n                .toImmutableList()\n            mutableState.update { it.copy(dialog = Dialog.ChangeCategory(mangaList, preselected)) }\n        }\n    }\n\n    fun openDeleteMangaDialog() {\n        val mangaList = state.value.selection.map { it.manga }\n        mutableState.update { it.copy(dialog = Dialog.DeleteManga(mangaList)) }\n    }\n\n    fun closeDialog() {\n        mutableState.update { it.copy(dialog = null) }\n    }\n\n    sealed interface Dialog {\n        data object SettingsSheet : Dialog\n        data class ChangeCategory(\n            val manga: List<Manga>,\n            val initialSelection: ImmutableList<CheckboxState<Category>>,\n        ) : Dialog\n        data class DeleteManga(val manga: List<Manga>) : Dialog\n    }\n\n    @Immutable\n    private data class ItemPreferences(\n        val downloadBadge: Boolean,\n        val unreadBadge: Boolean,\n        val localBadge: Boolean,\n        val languageBadge: Boolean,\n        val skipOutsideReleasePeriod: Boolean,\n\n        val globalFilterDownloaded: Boolean,\n        val filterDownloaded: TriState,\n        val filterUnread: TriState,\n        val filterStarted: TriState,\n        val filterBookmarked: TriState,\n        val filterCompleted: TriState,\n        val filterIntervalCustom: TriState,\n    )\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val library: MangaLibraryMap = emptyMap(),\n        val searchQuery: String? = null,\n        val selection: PersistentList<LibraryManga> = persistentListOf(),\n        val hasActiveFilters: Boolean = false,\n        val showCategoryTabs: Boolean = false,\n        val showMangaCount: Boolean = false,\n        val showMangaContinueButton: Boolean = false,\n        val dialog: Dialog? = null,\n    ) {\n        private val libraryCount by lazy {\n            library.values\n                .flatten()\n                .fastDistinctBy { it.libraryManga.manga.id }\n                .size\n        }\n\n        val isLibraryEmpty by lazy { libraryCount == 0 }\n\n        val selectionMode = selection.isNotEmpty()\n\n        val categories = library.keys.toList()\n\n        fun getLibraryItemsByCategoryId(categoryId: Long): List<MangaLibraryItem>? {\n            return library.firstNotNullOfOrNull { (k, v) -> v.takeIf { k.id == categoryId } }\n        }\n\n        fun getLibraryItemsByPage(page: Int): List<MangaLibraryItem> {\n            return library.values.toTypedArray().getOrNull(page).orEmpty()\n        }\n\n        fun getMangaCountForCategory(category: Category): Int? {\n            return if (showMangaCount || !searchQuery.isNullOrEmpty()) library[category]?.size else null\n        }\n\n        fun getToolbarTitle(\n            defaultTitle: String,\n            defaultCategoryTitle: String,\n            page: Int,\n        ): LibraryToolbarTitle {\n            val category = categories.getOrNull(page) ?: return LibraryToolbarTitle(defaultTitle)\n            val categoryName = category.let {\n                if (it.isSystemCategory) defaultCategoryTitle else it.name\n            }\n            val title = if (showCategoryTabs) defaultTitle else categoryName\n            val count = when {\n                !showMangaCount -> null\n                !showCategoryTabs -> getMangaCountForCategory(category)\n                // Whole library count\n                else -> libraryCount\n            }\n\n            return LibraryToolbarTitle(title, count)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibrarySettingsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.manga\n\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.stateIn\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.manga.interactor.SetMangaDisplayMode\nimport tachiyomi.domain.category.manga.interactor.SetSortModeForMangaCategory\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.manga.model.MangaLibrarySort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.time.Duration.Companion.seconds\n\nclass MangaLibrarySettingsScreenModel(\n    val preferences: BasePreferences = Injekt.get(),\n    val libraryPreferences: LibraryPreferences = Injekt.get(),\n    private val setMangaDisplayMode: SetMangaDisplayMode = Injekt.get(),\n    private val setSortModeForCategory: SetSortModeForMangaCategory = Injekt.get(),\n    trackerManager: TrackerManager = Injekt.get(),\n) : ScreenModel {\n\n    val trackersFlow = trackerManager.loggedInTrackersFlow()\n        .stateIn(\n            scope = screenModelScope,\n            started = SharingStarted.WhileSubscribed(5.seconds.inWholeMilliseconds),\n            initialValue = trackerManager.loggedInTrackers(),\n        )\n\n    fun toggleFilter(preference: (LibraryPreferences) -> Preference<TriState>) {\n        preference(libraryPreferences).getAndSet {\n            it.next()\n        }\n    }\n\n    fun toggleTracker(id: Int) {\n        toggleFilter { libraryPreferences.filterTrackedManga(id) }\n    }\n\n    fun setDisplayMode(mode: LibraryDisplayMode) {\n        setMangaDisplayMode.await(mode)\n    }\n\n    fun setSort(\n        category: Category?,\n        mode: MangaLibrarySort.Type,\n        direction: MangaLibrarySort.Direction,\n    ) {\n        screenModelScope.launchIO {\n            setSortModeForCategory.await(category, mode, direction)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.library.manga\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.util.fastAll\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.presentation.category.components.ChangeCategoryDialog\nimport eu.kanade.presentation.entries.components.LibraryBottomActionMenu\nimport eu.kanade.presentation.library.DeleteLibraryEntryDialog\nimport eu.kanade.presentation.library.components.LibraryToolbar\nimport eu.kanade.presentation.library.manga.MangaLibraryContent\nimport eu.kanade.presentation.library.manga.MangaLibrarySettingsDialog\nimport eu.kanade.presentation.more.onboarding.GETTING_STARTED_URL\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.screens.EmptyScreen\nimport tachiyomi.presentation.core.screens.EmptyScreenAction\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport tachiyomi.source.local.entries.manga.isLocal\n\ndata object MangaLibraryTab : Tab {\n\n    @OptIn(ExperimentalAnimationGraphicsApi::class)\n    override val options: TabOptions\n        @Composable\n        get() {\n            val fromMore = currentNavigationStyle() == NavStyle.MOVE_MANGA_TO_MORE\n            val title = AYMR.strings.label_manga_library\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter)\n            val index: UShort = if (fromMore) 5u else 1u\n            return TabOptions(\n                index = index,\n                title = stringResource(title),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    override suspend fun onReselect(navigator: Navigator) {\n        requestOpenSettingsSheet()\n    }\n\n    @OptIn(ExperimentalMaterial3Api::class)\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val scope = rememberCoroutineScope()\n        val haptic = LocalHapticFeedback.current\n\n        val screenModel = rememberScreenModel { MangaLibraryScreenModel() }\n        val settingsScreenModel = rememberScreenModel { MangaLibrarySettingsScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        val snackbarHostState = remember { SnackbarHostState() }\n\n        val onClickRefresh: (Category?) -> Boolean = { category ->\n            val started = MangaLibraryUpdateJob.startNow(context, category)\n            scope.launch {\n                val msgRes = if (started) MR.strings.updating_category else MR.strings.update_already_running\n                snackbarHostState.showSnackbar(context.stringResource(msgRes))\n            }\n            started\n        }\n\n        val fromMore = currentNavigationStyle() == NavStyle.MOVE_MANGA_TO_MORE\n\n        val navigateUp: (() -> Unit)? = if (fromMore) {\n            {\n                if (navigator.lastItem == HomeScreen) {\n                    scope.launch { HomeScreen.openTab(HomeScreen.Tab.AnimeLib()) }\n                } else {\n                    navigator.pop()\n                }\n            }\n        } else {\n            null\n        }\n\n        val defaultTitle = stringResource(AYMR.strings.label_manga_library)\n\n        Scaffold(\n            topBar = { scrollBehavior ->\n                val title = state.getToolbarTitle(\n                    defaultTitle = defaultTitle,\n                    defaultCategoryTitle = stringResource(MR.strings.label_default),\n                    page = screenModel.activeCategoryIndex,\n                )\n                val tabVisible = state.showCategoryTabs && state.categories.size > 1\n                LibraryToolbar(\n                    hasActiveFilters = state.hasActiveFilters,\n                    selectedCount = state.selection.size,\n                    title = title,\n                    onClickUnselectAll = screenModel::clearSelection,\n                    onClickSelectAll = { screenModel.selectAll(screenModel.activeCategoryIndex) },\n                    onClickInvertSelection = {\n                        screenModel.invertSelection(\n                            screenModel.activeCategoryIndex,\n                        )\n                    },\n                    onClickFilter = screenModel::showSettingsDialog,\n                    onClickRefresh = {\n                        onClickRefresh(\n                            state.categories[screenModel.activeCategoryIndex],\n                        )\n                    },\n                    onClickGlobalUpdate = { onClickRefresh(null) },\n                    onClickOpenRandomEntry = {\n                        scope.launch {\n                            val randomItem = screenModel.getRandomLibraryItemForCurrentCategory()\n                            if (randomItem != null) {\n                                navigator.push(MangaScreen(randomItem.libraryManga.manga.id))\n                            } else {\n                                snackbarHostState.showSnackbar(\n                                    context.stringResource(MR.strings.information_no_entries_found),\n                                )\n                            }\n                        }\n                    },\n                    searchQuery = state.searchQuery,\n                    onSearchQueryChange = screenModel::search,\n                    scrollBehavior = scrollBehavior.takeIf { !tabVisible }, // For scroll overlay when no tab\n                    navigateUp = navigateUp,\n                )\n            },\n            bottomBar = {\n                LibraryBottomActionMenu(\n                    visible = state.selectionMode,\n                    onChangeCategoryClicked = screenModel::openChangeCategoryDialog,\n                    onMarkAsViewedClicked = { screenModel.markReadSelection(true) },\n                    onMarkAsUnviewedClicked = { screenModel.markReadSelection(false) },\n                    onDownloadClicked = screenModel::runDownloadActionSelection\n                        .takeIf { state.selection.fastAll { !it.manga.isLocal() } },\n                    onDeleteClicked = screenModel::openDeleteMangaDialog,\n                    isManga = true,\n                )\n            },\n            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },\n        ) { contentPadding ->\n            when {\n                state.isLoading -> LoadingScreen(Modifier.padding(contentPadding))\n                state.searchQuery.isNullOrEmpty() && !state.hasActiveFilters && state.isLibraryEmpty -> {\n                    val handler = LocalUriHandler.current\n                    EmptyScreen(\n                        stringRes = MR.strings.information_empty_library,\n                        modifier = Modifier.padding(contentPadding),\n                        actions = persistentListOf(\n                            EmptyScreenAction(\n                                stringRes = MR.strings.getting_started_guide,\n                                icon = Icons.AutoMirrored.Outlined.HelpOutline,\n                                onClick = { handler.openUri(GETTING_STARTED_URL) },\n                            ),\n                        ),\n                    )\n                }\n                else -> {\n                    MangaLibraryContent(\n                        categories = state.categories,\n                        searchQuery = state.searchQuery,\n                        selection = state.selection,\n                        contentPadding = contentPadding,\n                        currentPage = { screenModel.activeCategoryIndex },\n                        hasActiveFilters = state.hasActiveFilters,\n                        showPageTabs = state.showCategoryTabs || !state.searchQuery.isNullOrEmpty(),\n                        onChangeCurrentPage = { screenModel.activeCategoryIndex = it },\n                        onMangaClicked = { navigator.push(MangaScreen(it)) },\n                        onContinueReadingClicked = { it: LibraryManga ->\n                            scope.launchIO {\n                                val chapter = screenModel.getNextUnreadChapter(it.manga)\n                                if (chapter != null) {\n                                    context.startActivity(\n                                        ReaderActivity.newIntent(\n                                            context,\n                                            chapter.mangaId,\n                                            chapter.id,\n                                        ),\n                                    )\n                                } else {\n                                    snackbarHostState.showSnackbar(\n                                        context.stringResource(MR.strings.no_next_chapter),\n                                    )\n                                }\n                            }\n                            Unit\n                        }.takeIf { state.showMangaContinueButton },\n                        onToggleSelection = screenModel::toggleSelection,\n                        onToggleRangeSelection = {\n                            screenModel.toggleRangeSelection(it)\n                            haptic.performHapticFeedback(HapticFeedbackType.LongPress)\n                        },\n                        onRefresh = onClickRefresh,\n                        onGlobalSearchClicked = {\n                            navigator.push(\n                                GlobalMangaSearchScreen(screenModel.state.value.searchQuery ?: \"\"),\n                            )\n                        },\n                        getNumberOfMangaForCategory = { state.getMangaCountForCategory(it) },\n                        getDisplayMode = { screenModel.getDisplayMode() },\n                        getColumnsForOrientation = {\n                            screenModel.getColumnsPreferenceForCurrentOrientation(\n                                it,\n                            )\n                        },\n                    ) { state.getLibraryItemsByPage(it) }\n                }\n            }\n        }\n\n        val onDismissRequest = screenModel::closeDialog\n        when (val dialog = state.dialog) {\n            is MangaLibraryScreenModel.Dialog.SettingsSheet -> run {\n                val category = state.categories.getOrNull(screenModel.activeCategoryIndex)\n                if (category == null) {\n                    onDismissRequest()\n                    return@run\n                }\n                MangaLibrarySettingsDialog(\n                    onDismissRequest = onDismissRequest,\n                    screenModel = settingsScreenModel,\n                    category = category,\n                )\n            }\n            is MangaLibraryScreenModel.Dialog.ChangeCategory -> {\n                ChangeCategoryDialog(\n                    initialSelection = dialog.initialSelection,\n                    onDismissRequest = onDismissRequest,\n                    onEditCategories = {\n                        screenModel.clearSelection()\n                        navigator.push(CategoriesTab)\n                        CategoriesTab.showMangaCategory()\n                    },\n                    onConfirm = { include, exclude ->\n                        screenModel.clearSelection()\n                        screenModel.setMangaCategories(dialog.manga, include, exclude)\n                    },\n                )\n            }\n            is MangaLibraryScreenModel.Dialog.DeleteManga -> {\n                DeleteLibraryEntryDialog(\n                    containsLocalEntry = dialog.manga.any(Manga::isLocal),\n                    onDismissRequest = onDismissRequest,\n                    onConfirm = { deleteManga, deleteChapter ->\n                        screenModel.removeMangas(dialog.manga, deleteManga, deleteChapter)\n                        screenModel.clearSelection()\n                    },\n                    isManga = true,\n                )\n            }\n            null -> {}\n        }\n\n        BackHandler(enabled = state.selectionMode || state.searchQuery != null) {\n            when {\n                state.selectionMode -> screenModel.clearSelection()\n                state.searchQuery != null -> screenModel.search(null)\n            }\n        }\n\n        LaunchedEffect(state.selectionMode, state.dialog) {\n            HomeScreen.showBottomNav(!state.selectionMode)\n        }\n\n        LaunchedEffect(state.isLoading) {\n            if (!state.isLoading) {\n                (context as? MainActivity)?.ready = true\n            }\n        }\n\n        LaunchedEffect(Unit) {\n            launch { queryEvent.receiveAsFlow().collect(screenModel::search) }\n            launch { requestSettingsSheetEvent.receiveAsFlow().collectLatest { screenModel.showSettingsDialog() } }\n        }\n    }\n\n    // For invoking search from other screen\n    private val queryEvent = Channel<String>()\n    suspend fun search(query: String) = queryEvent.send(query)\n\n    // For opening settings sheet in LibraryController\n    private val requestSettingsSheetEvent = Channel<Unit>()\n    private suspend fun requestOpenSettingsSheet() = requestSettingsSheetEvent.send(Unit)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.main\n\nimport android.animation.ValueAnimator\nimport android.app.Activity\nimport android.app.Application\nimport android.app.SearchManager\nimport android.app.assist.AssistContent\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Color\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport androidx.activity.ComponentActivity\nimport androidx.activity.SystemBarStyle\nimport androidx.activity.enableEdgeToEdge\nimport androidx.activity.result.ActivityResult\nimport androidx.activity.result.ActivityResultLauncher\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.consumeWindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.navigationBars\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.windowInsetsBottomHeight\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\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.luminance\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.core.animation.doOnEnd\nimport androidx.core.net.toUri\nimport androidx.core.splashscreen.SplashScreen\nimport androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen\nimport androidx.core.util.Consumer\nimport androidx.interpolator.view.animation.FastOutSlowInInterpolator\nimport androidx.interpolator.view.animation.LinearOutSlowInInterpolator\nimport androidx.lifecycle.lifecycleScope\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.NavigatorDisposeBehavior\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.source.anime.interactor.GetAnimeIncognitoState\nimport eu.kanade.domain.source.manga.interactor.GetMangaIncognitoState\nimport eu.kanade.presentation.components.AppStateBanners\nimport eu.kanade.presentation.components.DownloadedOnlyBannerBackgroundColor\nimport eu.kanade.presentation.components.IncognitoModeBannerBackgroundColor\nimport eu.kanade.presentation.components.IndexingBannerBackgroundColor\nimport eu.kanade.presentation.more.settings.screen.browse.AnimeExtensionReposScreen\nimport eu.kanade.presentation.more.settings.screen.browse.MangaExtensionReposScreen\nimport eu.kanade.presentation.more.settings.screen.data.RestoreBackupScreen\nimport eu.kanade.presentation.util.AssistContentScreen\nimport eu.kanade.presentation.util.DefaultNavigatorScreenTransition\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.data.cache.ChapterCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.updater.AppUpdateChecker\nimport eu.kanade.tachiyomi.data.updater.RELEASE_URL\nimport eu.kanade.tachiyomi.extension.anime.api.AnimeExtensionApi\nimport eu.kanade.tachiyomi.extension.manga.api.MangaExtensionApi\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreen\nimport eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreen\nimport eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen\nimport eu.kanade.tachiyomi.ui.deeplink.DeepLinkScreenType\nimport eu.kanade.tachiyomi.ui.deeplink.anime.DeepLinkAnimeScreen\nimport eu.kanade.tachiyomi.ui.deeplink.manga.DeepLinkMangaScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.more.NewUpdateScreen\nimport eu.kanade.tachiyomi.ui.more.OnboardingScreen\nimport eu.kanade.tachiyomi.ui.player.ExternalIntents\nimport eu.kanade.tachiyomi.ui.player.PlayerActivity\nimport eu.kanade.tachiyomi.util.system.dpToPx\nimport eu.kanade.tachiyomi.util.system.isNavigationBarNeedsScrim\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toast\nimport eu.kanade.tachiyomi.util.system.updaterEnabled\nimport eu.kanade.tachiyomi.util.view.setComposeContent\nimport kotlinx.coroutines.channels.awaitClose\nimport kotlinx.coroutines.flow.callbackFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport mihon.core.migration.Migrator\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.release.interactor.GetApplicationRelease\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\n\nclass MainActivity : BaseActivity() {\n\n    private val libraryPreferences: LibraryPreferences by injectLazy()\n    private val preferences: BasePreferences by injectLazy()\n\n    private val animeDownloadCache: AnimeDownloadCache by injectLazy()\n    private val downloadCache: MangaDownloadCache by injectLazy()\n    private val chapterCache: ChapterCache by injectLazy()\n\n    private val getAnimeIncognitoState: GetAnimeIncognitoState by injectLazy()\n    private val getMangaIncognitoState: GetMangaIncognitoState by injectLazy()\n\n    // To be checked by splash screen. If true then splash screen will be removed.\n    var ready = false\n\n    private var navigator: Navigator? = null\n\n    init {\n        registerSecureActivity(this)\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        val isLaunch = savedInstanceState == null\n\n        // Prevent splash screen showing up on configuration changes\n        val splashScreen = if (isLaunch) installSplashScreen() else null\n\n        super.onCreate(savedInstanceState)\n\n        val didMigration = Migrator.awaitAndRelease()\n\n        // Do not let the launcher create a new activity http://stackoverflow.com/questions/16283079\n        if (!isTaskRoot) {\n            finish()\n            return\n        }\n\n        setComposeContent {\n            val context = LocalContext.current\n\n            var incognito by remember { mutableStateOf(getMangaIncognitoState.await(null)) }\n            var incognitoAnime by remember { mutableStateOf(getAnimeIncognitoState.await(null)) }\n            val downloadOnly by preferences.downloadedOnly().collectAsState()\n            val indexing by downloadCache.isInitializing.collectAsState()\n            val indexingAnime by animeDownloadCache.isInitializing.collectAsState()\n\n            val isSystemInDarkTheme = isSystemInDarkTheme()\n            val statusBarBackgroundColor = when {\n                indexing || indexingAnime -> IndexingBannerBackgroundColor\n                downloadOnly -> DownloadedOnlyBannerBackgroundColor\n                incognito || incognitoAnime -> IncognitoModeBannerBackgroundColor\n                else -> MaterialTheme.colorScheme.surface\n            }\n            LaunchedEffect(isSystemInDarkTheme, statusBarBackgroundColor) {\n                // Draw edge-to-edge and set system bars color to transparent\n                val lightStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.BLACK)\n                val darkStyle = SystemBarStyle.dark(Color.TRANSPARENT)\n                enableEdgeToEdge(\n                    statusBarStyle = if (statusBarBackgroundColor.luminance() > 0.5) lightStyle else darkStyle,\n                    navigationBarStyle = if (isSystemInDarkTheme) darkStyle else lightStyle,\n                )\n            }\n\n            Navigator(\n                screen = HomeScreen,\n                disposeBehavior = NavigatorDisposeBehavior(\n                    disposeNestedNavigators = false,\n                    disposeSteps = true,\n                ),\n            ) { navigator ->\n\n                LaunchedEffect(navigator) {\n                    this@MainActivity.navigator = navigator\n\n                    if (isLaunch) {\n                        // Set start screen\n                        handleIntentAction(intent, navigator)\n\n                        // Reset Incognito Mode on relaunch\n                        preferences.incognitoMode().set(false)\n                    }\n                }\n                LaunchedEffect(navigator.lastItem) {\n                    (navigator.lastItem as? BrowseMangaSourceScreen)?.sourceId\n                        .let(getMangaIncognitoState::subscribe)\n                        .collectLatest { incognito = it }\n                }\n\n                LaunchedEffect(navigator.lastItem) {\n                    (navigator.lastItem as? BrowseAnimeSourceScreen)?.sourceId\n                        .let(getAnimeIncognitoState::subscribe)\n                        .collectLatest { incognitoAnime = it }\n                }\n\n                val scaffoldInsets = WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)\n                Scaffold(\n                    topBar = {\n                        AppStateBanners(\n                            downloadedOnlyMode = downloadOnly,\n                            incognitoMode = incognito || incognitoAnime,\n                            indexing = indexing || indexingAnime,\n                            modifier = Modifier.windowInsetsPadding(scaffoldInsets),\n                        )\n                    },\n                    contentWindowInsets = scaffoldInsets,\n                ) { contentPadding ->\n                    // Consume insets already used by app state banners\n                    Box {\n                        // Shows current screen\n                        DefaultNavigatorScreenTransition(\n                            navigator = navigator,\n                            modifier = Modifier\n                                .padding(contentPadding)\n                                .consumeWindowInsets(contentPadding),\n                        )\n                        // Draw navigation bar scrim when needed\n                        if (remember { isNavigationBarNeedsScrim() }) {\n                            Spacer(\n                                modifier = Modifier\n                                    .align(Alignment.BottomCenter)\n                                    .fillMaxWidth()\n                                    .windowInsetsBottomHeight(WindowInsets.navigationBars)\n                                    .alpha(0.8f)\n                                    .background(MaterialTheme.colorScheme.surfaceContainer),\n                            )\n                        }\n                    }\n                }\n\n                // Pop source-related screens when incognito mode is turned off\n                LaunchedEffect(Unit) {\n                    preferences.incognitoMode().changes()\n                        .drop(1)\n                        .filter { !it }\n                        .onEach {\n                            val currentScreen = navigator.lastItem\n                            if ((\n                                    currentScreen is BrowseMangaSourceScreen ||\n                                        (currentScreen is MangaScreen && currentScreen.fromSource)\n                                    ) ||\n                                (\n                                    currentScreen is BrowseAnimeSourceScreen ||\n                                        (currentScreen is AnimeScreen && currentScreen.fromSource)\n                                    )\n                            ) {\n                                navigator.popUntilRoot()\n                            }\n                        }\n                        .launchIn(this)\n                }\n\n                HandleOnNewIntent(context = context, navigator = navigator)\n\n                CheckForUpdates()\n                ShowOnboarding()\n            }\n\n            var showChangelog by remember { mutableStateOf(didMigration && !BuildConfig.DEBUG) }\n            if (showChangelog) {\n                AlertDialog(\n                    onDismissRequest = { showChangelog = false },\n                    title = {\n                        Text(\n                            text = stringResource(MR.strings.updated_version, BuildConfig.VERSION_NAME),\n                        )\n                    },\n                    dismissButton = {\n                        TextButton(onClick = { openInBrowser(RELEASE_URL) }) {\n                            Text(text = stringResource(MR.strings.whats_new))\n                        }\n                    },\n                    confirmButton = {\n                        TextButton(onClick = { showChangelog = false }) {\n                            Text(text = stringResource(MR.strings.action_ok))\n                        }\n                    },\n                )\n            }\n        }\n\n        val startTime = System.currentTimeMillis()\n        splashScreen?.setKeepOnScreenCondition {\n            val elapsed = System.currentTimeMillis() - startTime\n            elapsed <= SPLASH_MIN_DURATION || !ready && elapsed <= SPLASH_MAX_DURATION\n        }\n        setSplashScreenExitAnimation(splashScreen)\n\n        if (isLaunch && libraryPreferences.autoClearItemCache().get()) {\n            lifecycleScope.launchIO {\n                chapterCache.clear()\n            }\n        }\n\n        externalPlayerResult = registerForActivityResult(\n            ActivityResultContracts.StartActivityForResult(),\n        ) { result: ActivityResult ->\n            if (result.resultCode == Activity.RESULT_OK) {\n                val animeId = savedInstanceState?.getLong(SAVED_STATE_ANIME_KEY)\n                val episodeId = savedInstanceState?.getLong(SAVED_STATE_EPISODE_KEY)\n\n                if (animeId != null && episodeId != null) {\n                    runBlocking {\n                        ExternalIntents.externalIntents.initAnime(animeId, episodeId)\n                    }\n                }\n\n                ExternalIntents.externalIntents.onActivityResult(result.data)\n            }\n        }\n    }\n\n    override fun onProvideAssistContent(outContent: AssistContent) {\n        super.onProvideAssistContent(outContent)\n        when (val screen = navigator?.lastItem) {\n            is AssistContentScreen -> {\n                screen.onProvideAssistUrl()?.let { outContent.webUri = it.toUri() }\n            }\n        }\n    }\n\n    @Composable\n    private fun HandleOnNewIntent(context: Context, navigator: Navigator) {\n        LaunchedEffect(Unit) {\n            callbackFlow {\n                val componentActivity = context as ComponentActivity\n                val consumer = Consumer<Intent> { trySend(it) }\n                componentActivity.addOnNewIntentListener(consumer)\n                awaitClose { componentActivity.removeOnNewIntentListener(consumer) }\n            }\n                .collectLatest { handleIntentAction(it, navigator) }\n        }\n    }\n\n    @Composable\n    private fun CheckForUpdates() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n\n        // App updates\n        LaunchedEffect(Unit) {\n            if (updaterEnabled) {\n                try {\n                    val result = AppUpdateChecker().checkForUpdate(context)\n                    if (result is GetApplicationRelease.Result.NewUpdate) {\n                        val updateScreen = NewUpdateScreen(\n                            versionName = result.release.version,\n                            changelogInfo = result.release.info,\n                            releaseLink = result.release.releaseLink,\n                            downloadLink = result.release.downloadLink,\n                        )\n                        navigator.push(updateScreen)\n                    }\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e)\n                }\n            }\n        }\n\n        // Extensions updates\n        LaunchedEffect(Unit) {\n            try {\n                AnimeExtensionApi().checkForUpdates(context)\n                MangaExtensionApi().checkForUpdates(context)\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e)\n            }\n        }\n    }\n\n    @Composable\n    private fun ShowOnboarding() {\n        val navigator = LocalNavigator.currentOrThrow\n\n        LaunchedEffect(Unit) {\n            if (!preferences.shownOnboardingFlow().get() && navigator.lastItem !is OnboardingScreen) {\n                navigator.push(OnboardingScreen())\n            }\n        }\n    }\n\n    /**\n     * Sets custom splash screen exit animation on devices prior to Android 12.\n     *\n     * When custom animation is used, status and navigation bar color will be set to transparent and will be restored\n     * after the animation is finished.\n     */\n    @Suppress(\"Deprecation\")\n    private fun setSplashScreenExitAnimation(splashScreen: SplashScreen?) {\n        val root = findViewById<View>(android.R.id.content)\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S && splashScreen != null) {\n            window.statusBarColor = Color.TRANSPARENT\n            window.navigationBarColor = Color.TRANSPARENT\n\n            splashScreen.setOnExitAnimationListener { splashProvider ->\n                // For some reason the SplashScreen applies (incorrect) Y translation to the iconView\n                splashProvider.iconView.translationY = 0F\n\n                val activityAnim = ValueAnimator.ofFloat(1F, 0F).apply {\n                    interpolator = LinearOutSlowInInterpolator()\n                    duration = SPLASH_EXIT_ANIM_DURATION\n                    addUpdateListener { va ->\n                        val value = va.animatedValue as Float\n                        root.translationY = value * 16.dpToPx\n                    }\n                }\n\n                val splashAnim = ValueAnimator.ofFloat(1F, 0F).apply {\n                    interpolator = FastOutSlowInInterpolator()\n                    duration = SPLASH_EXIT_ANIM_DURATION\n                    addUpdateListener { va ->\n                        val value = va.animatedValue as Float\n                        splashProvider.view.alpha = value\n                    }\n                    doOnEnd {\n                        splashProvider.remove()\n                    }\n                }\n\n                activityAnim.start()\n                splashAnim.start()\n            }\n        }\n    }\n\n    private fun handleIntentAction(intent: Intent, navigator: Navigator): Boolean {\n        val notificationId = intent.getIntExtra(\"notificationId\", -1)\n        if (notificationId > -1) {\n            NotificationReceiver.dismissNotification(\n                applicationContext,\n                notificationId,\n                intent.getIntExtra(\"groupId\", 0),\n            )\n        }\n\n        val tabToOpen = when (intent.action) {\n            Constants.SHORTCUT_ANIMELIB -> HomeScreen.Tab.AnimeLib()\n            Constants.SHORTCUT_LIBRARY -> HomeScreen.Tab.Library()\n            Constants.SHORTCUT_MANGA -> {\n                val idToOpen = intent.extras?.getLong(Constants.MANGA_EXTRA) ?: return false\n                navigator.popUntilRoot()\n                HomeScreen.Tab.Library(idToOpen)\n            }\n            Constants.SHORTCUT_ANIME -> {\n                val idToOpen = intent.extras?.getLong(Constants.ANIME_EXTRA) ?: return false\n                navigator.popUntilRoot()\n                HomeScreen.Tab.AnimeLib(idToOpen)\n            }\n            Constants.SHORTCUT_UPDATES -> HomeScreen.Tab.Updates\n            Constants.SHORTCUT_HISTORY -> HomeScreen.Tab.History\n            Constants.SHORTCUT_SOURCES -> HomeScreen.Tab.Browse(false)\n            Constants.SHORTCUT_ANIMEEXTENSIONS -> HomeScreen.Tab.Browse(true, true)\n            Constants.SHORTCUT_EXTENSIONS -> HomeScreen.Tab.Browse(true)\n            Constants.SHORTCUT_DOWNLOADS -> {\n                navigator.popUntilRoot()\n                HomeScreen.Tab.More(toDownloads = true)\n            }\n            Constants.SHORTCUT_ANIME_DOWNLOADS -> {\n                navigator.popUntilRoot()\n                HomeScreen.Tab.More(toDownloads = true)\n            }\n            Intent.ACTION_SEARCH, Intent.ACTION_SEND, \"com.google.android.gms.actions.SEARCH_ACTION\" -> {\n                // If the intent match the \"standard\" Android search intent\n                // or the Google-specific search intent (triggered by saying or typing \"search *query* on *Tachiyomi*\" in Google Search/Google Assistant)\n\n                // Get the search query provided in extras, and if not null, perform a global search with it.\n                val query = intent.getStringExtra(SearchManager.QUERY)\n                    ?: intent.getStringExtra(Intent.EXTRA_TEXT)\n\n                if (!query.isNullOrEmpty()) {\n                    navigator.popUntilRoot()\n\n                    val screenType = intent.getStringExtra(INTENT_SEARCH_TYPE).orEmpty()\n                        .ifBlank { \"ANIME\" }\n                        .let(DeepLinkScreenType::valueOf)\n\n                    when (screenType) {\n                        DeepLinkScreenType.MANGA -> {\n                            navigator.push(GlobalMangaSearchScreen(query))\n                            navigator.push(DeepLinkMangaScreen(query))\n                        }\n                        DeepLinkScreenType.ANIME -> {\n                            navigator.push(GlobalAnimeSearchScreen(query))\n                            navigator.push(DeepLinkAnimeScreen(query))\n                        }\n                    }\n                }\n                null\n            }\n            INTENT_SEARCH -> { // Used by extensions (url intent handlers)\n                val query = intent.getStringExtra(INTENT_SEARCH_QUERY)\n                if (!query.isNullOrEmpty()) {\n                    val filter = intent.getStringExtra(INTENT_SEARCH_FILTER)\n                    navigator.popUntilRoot()\n                    navigator.push(GlobalMangaSearchScreen(query, filter))\n                }\n                null\n            }\n            INTENT_ANIMESEARCH -> { // Same as above\n                val query = intent.getStringExtra(INTENT_SEARCH_QUERY)\n                if (!query.isNullOrEmpty()) {\n                    val filter = intent.getStringExtra(INTENT_SEARCH_FILTER)\n                    navigator.popUntilRoot()\n                    navigator.push(GlobalAnimeSearchScreen(query, filter))\n                }\n                null\n            }\n            Intent.ACTION_VIEW -> {\n                // Handling opening of backup files\n                if (intent.data.toString().endsWith(\".tachibk\")) {\n                    navigator.popUntilRoot()\n                    navigator.push(RestoreBackupScreen(intent.data.toString()))\n                }\n                // Deep link to add anime extension repo\n                else if (intent.scheme == \"aniyomi\" && intent.data?.host == \"add-repo\") {\n                    intent.data?.getQueryParameter(\"url\")?.let { repoUrl ->\n                        navigator.popUntilRoot()\n                        navigator.push(AnimeExtensionReposScreen(repoUrl))\n                    }\n                } // Deep link to add extension repo\n                else if (intent.scheme == \"tachiyomi\" && intent.data?.host == \"add-repo\") {\n                    intent.data?.getQueryParameter(\"url\")?.let { repoUrl ->\n                        navigator.popUntilRoot()\n                        navigator.push(MangaExtensionReposScreen(repoUrl))\n                    }\n                }\n                null\n            }\n            else -> return false\n        }\n\n        if (tabToOpen != null) {\n            lifecycleScope.launch { HomeScreen.openTab(tabToOpen) }\n        }\n\n        ready = true\n        return true\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(outState)\n\n        ExternalIntents.externalIntents.animeId?.let {\n            outState.putLong(SAVED_STATE_ANIME_KEY, it)\n        }\n        ExternalIntents.externalIntents.episodeId?.let {\n            outState.putLong(SAVED_STATE_EPISODE_KEY, it)\n        }\n    }\n\n    companion object {\n        const val INTENT_SEARCH = \"eu.kanade.tachiyomi.SEARCH\"\n        const val INTENT_ANIMESEARCH = \"eu.kanade.tachiyomi.ANIMESEARCH\"\n        const val INTENT_SEARCH_QUERY = \"query\"\n        const val INTENT_SEARCH_FILTER = \"filter\"\n        const val INTENT_SEARCH_TYPE = \"type\"\n\n        const val SAVED_STATE_ANIME_KEY = \"saved_state_anime_key\"\n        const val SAVED_STATE_EPISODE_KEY = \"saved_state_episode_key\"\n\n        private var externalPlayerResult: ActivityResultLauncher<Intent>? = null\n\n        suspend fun startPlayerActivity(\n            context: Context,\n            animeId: Long,\n            episodeId: Long,\n            extPlayer: Boolean,\n            video: Video? = null,\n            hosterIndex: Int = -1,\n            videoIndex: Int = -1,\n            hosterList: List<Hoster>? = null,\n        ) {\n            if (extPlayer) {\n                val intent = try {\n                    ExternalIntents.newIntent(context, animeId, episodeId, video)\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e)\n                    withUIContext { Injekt.get<Application>().toast(e.message) }\n                    null\n                } ?: return\n                externalPlayerResult?.launch(intent) ?: return\n            } else {\n                context.startActivity(\n                    PlayerActivity.newIntent(\n                        context,\n                        animeId,\n                        episodeId,\n                        hosterList,\n                        hosterIndex,\n                        videoIndex,\n                    ),\n                )\n            }\n        }\n    }\n}\n\n// Splash screen\nprivate const val SPLASH_MIN_DURATION = 500 // ms\nprivate const val SPLASH_MAX_DURATION = 5000 // ms\nprivate const val SPLASH_EXIT_ANIM_DURATION = 400L // ms\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.more\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.core.preference.asState\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.presentation.more.MoreScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.category.CategoriesTab\nimport eu.kanade.tachiyomi.ui.download.DownloadsTab\nimport eu.kanade.tachiyomi.ui.setting.PlayerSettingsScreen\nimport eu.kanade.tachiyomi.ui.setting.SettingsScreen\nimport eu.kanade.tachiyomi.ui.stats.StatsTab\nimport eu.kanade.tachiyomi.ui.storage.StorageTab\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ndata object MoreTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter)\n            return TabOptions(\n                index = 4u,\n                title = stringResource(MR.strings.label_more),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    override suspend fun onReselect(navigator: Navigator) {\n        navigator.push(SettingsScreen())\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val navigator = LocalNavigator.currentOrThrow\n        val screenModel = rememberScreenModel { MoreScreenModel() }\n        val downloadQueueState by screenModel.downloadQueueState.collectAsState()\n        val navStyle = currentNavigationStyle()\n        MoreScreen(\n            downloadQueueStateProvider = { downloadQueueState },\n            downloadedOnly = screenModel.downloadedOnly,\n            onDownloadedOnlyChange = { screenModel.downloadedOnly = it },\n            incognitoMode = screenModel.incognitoMode,\n            onIncognitoModeChange = { screenModel.incognitoMode = it },\n            navStyle = navStyle,\n            onClickAlt = { navigator.push(navStyle.moreTab) },\n            onClickDownloadQueue = { navigator.push(DownloadsTab) },\n            onClickCategories = { navigator.push(CategoriesTab) },\n            onClickStats = { navigator.push(StatsTab) },\n            onClickStorage = { navigator.push(StorageTab) },\n            onClickDataAndStorage = { navigator.push(SettingsScreen(SettingsScreen.Destination.DataAndStorage)) },\n            onClickPlayerSettings = { navigator.push(PlayerSettingsScreen(mainSettings = false)) },\n            onClickSettings = { navigator.push(SettingsScreen()) },\n            onClickAbout = { navigator.push(SettingsScreen(SettingsScreen.Destination.About)) },\n        )\n    }\n}\n\nprivate class MoreScreenModel(\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val animeDownloadManager: AnimeDownloadManager = Injekt.get(),\n    preferences: BasePreferences = Injekt.get(),\n) : ScreenModel {\n\n    var downloadedOnly by preferences.downloadedOnly().asState(screenModelScope)\n    var incognitoMode by preferences.incognitoMode().asState(screenModelScope)\n\n    private var _downloadQueueState: MutableStateFlow<DownloadQueueState> = MutableStateFlow(\n        DownloadQueueState.Stopped,\n    )\n    val downloadQueueState: StateFlow<DownloadQueueState> = _downloadQueueState.asStateFlow()\n\n    init {\n        // Handle running/paused status change and queue progress updating\n        screenModelScope.launchIO {\n            combine(\n                downloadManager.isDownloaderRunning,\n                downloadManager.queueState,\n            ) { isRunningManga, mangaDownloadQueue -> Pair(isRunningManga, mangaDownloadQueue.size) }\n                .collectLatest { (isDownloadingManga, mangaDownloadQueueSize) ->\n                    combine(\n                        animeDownloadManager.isDownloaderRunning,\n                        animeDownloadManager.queueState,\n                    ) { isRunningAnime, animeDownloadQueue ->\n                        Pair(\n                            isRunningAnime,\n                            animeDownloadQueue.size,\n                        )\n                    }\n                        .collectLatest { (isDownloadingAnime, animeDownloadQueueSize) ->\n                            val isDownloading = isDownloadingAnime || isDownloadingManga\n                            val downloadQueueSize = mangaDownloadQueueSize + animeDownloadQueueSize\n                            val pendingDownloadExists = downloadQueueSize != 0\n                            _downloadQueueState.value = when {\n                                !pendingDownloadExists -> DownloadQueueState.Stopped\n                                !isDownloading -> DownloadQueueState.Paused(downloadQueueSize)\n                                else -> DownloadQueueState.Downloading(downloadQueueSize)\n                            }\n                        }\n                }\n        }\n    }\n}\n\nsealed interface DownloadQueueState {\n    data object Stopped : DownloadQueueState\n    data class Paused(val pending: Int) : DownloadQueueState\n    data class Downloading(val pending: Int) : DownloadQueueState\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/more/NewUpdateScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.more\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.NewUpdateScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.data.updater.AppUpdateDownloadJob\nimport eu.kanade.tachiyomi.util.system.openInBrowser\n\nclass NewUpdateScreen(\n    private val versionName: String,\n    private val changelogInfo: String,\n    private val releaseLink: String,\n    private val downloadLink: String,\n) : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val changelogInfoNoChecksum = remember {\n            changelogInfo.replace(\"\"\"---(\\R|.)*Checksums(\\R|.)*\"\"\".toRegex(), \"\")\n        }\n\n        NewUpdateScreen(\n            versionName = versionName,\n            changelogInfo = changelogInfoNoChecksum,\n            onOpenInBrowser = { context.openInBrowser(releaseLink) },\n            onRejectUpdate = navigator::pop,\n            onAcceptUpdate = {\n                AppUpdateDownloadJob.start(\n                    context = context,\n                    url = downloadLink,\n                    title = versionName,\n                )\n                navigator.pop()\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/more/OnboardingScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.more\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.presentation.more.onboarding.OnboardingScreen\nimport eu.kanade.presentation.more.settings.screen.SearchableSettings\nimport eu.kanade.presentation.more.settings.screen.SettingsDataScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.setting.SettingsScreen\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass OnboardingScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n\n        val basePreferences = remember { Injekt.get<BasePreferences>() }\n        val shownOnboardingFlow by basePreferences.shownOnboardingFlow().collectAsState()\n\n        val finishOnboarding: () -> Unit = {\n            basePreferences.shownOnboardingFlow().set(true)\n            navigator.pop()\n        }\n\n        val restoreSettingKey = stringResource(SettingsDataScreen.restorePreferenceKeyString)\n\n        BackHandler(\n            enabled = !shownOnboardingFlow,\n            onBack = {\n                // Prevent exiting if onboarding hasn't been completed\n            },\n        )\n\n        OnboardingScreen(\n            onComplete = finishOnboarding,\n            onRestoreBackup = {\n                finishOnboarding()\n                SearchableSettings.highlightKey = restoreSettingKey\n                navigator.push(SettingsScreen(SettingsScreen.Destination.DataAndStorage))\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/AniyomiMPVView.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player\n\nimport android.content.Context\nimport android.os.Build\nimport android.os.Environment\nimport android.util.AttributeSet\nimport android.view.KeyCharacterMap\nimport android.view.KeyEvent\nimport eu.kanade.tachiyomi.network.NetworkPreferences\nimport eu.kanade.tachiyomi.ui.player.controls.components.panels.toColorHexString\nimport eu.kanade.tachiyomi.ui.player.settings.AdvancedPlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.DecoderPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport `is`.xyz.mpv.BaseMPVView\nimport `is`.xyz.mpv.KeyMapping\nimport `is`.xyz.mpv.MPVLib\nimport logcat.LogPriority\nimport logcat.logcat\nimport uy.kohesive.injekt.injectLazy\nimport kotlin.reflect.KProperty\n\nclass AniyomiMPVView(context: Context, attributes: AttributeSet) : BaseMPVView(context, attributes) {\n\n    private val playerPreferences: PlayerPreferences by injectLazy()\n    private val decoderPreferences: DecoderPreferences by injectLazy()\n    private val subtitlePreferences: SubtitlePreferences by injectLazy()\n    private val audioPreferences: AudioPreferences by injectLazy()\n    private val advancedPreferences: AdvancedPlayerPreferences by injectLazy()\n    private val networkPreferences: NetworkPreferences by injectLazy()\n\n    var isExiting = false\n\n    private fun getPropertyInt(property: String): Int? {\n        return MPVLib.getPropertyInt(property) as Int?\n    }\n\n    private fun getPropertyBoolean(property: String): Boolean? {\n        return MPVLib.getPropertyBoolean(property) as Boolean?\n    }\n\n    private fun getPropertyDouble(property: String): Double? {\n        return MPVLib.getPropertyDouble(property) as Double?\n    }\n\n    private fun getPropertyString(property: String): String? {\n        return MPVLib.getPropertyString(property) as String?\n    }\n\n    val duration: Int?\n        get() = getPropertyInt(\"duration\")\n\n    var timePos: Int?\n        get() = getPropertyInt(\"time-pos\")\n        set(position) = MPVLib.setPropertyInt(\"time-pos\", position!!)\n\n    var paused: Boolean?\n        get() = getPropertyBoolean(\"pause\")\n        set(paused) = MPVLib.setPropertyBoolean(\"pause\", paused!!)\n\n    val hwdecActive: String\n        get() = getPropertyString(\"hwdec-current\") ?: \"no\"\n\n    val videoH: Int?\n        get() = getPropertyInt(\"video-params/h\")\n\n    /**\n     * Returns the video aspect ratio. Rotation is taken into account.\n     */\n    fun getVideoOutAspect(): Double? {\n        return getPropertyDouble(\"video-params/aspect\")?.let {\n            if (it < 0.001) return 0.0\n            if ((getPropertyInt(\"video-params/rotate\") ?: 0) % 180 == 90) 1.0 / it else it\n        }\n    }\n\n    inner class TrackDelegate(private val name: String) {\n        operator fun getValue(thisRef: Any?, property: KProperty<*>): Int {\n            val v = getPropertyString(name)\n            // we can get null here for \"no\" or other invalid value\n            return v?.toIntOrNull() ?: -1\n        }\n        operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) {\n            if (value == -1) {\n                MPVLib.setPropertyString(name, \"no\")\n            } else {\n                MPVLib.setPropertyInt(name, value)\n            }\n        }\n    }\n\n    var sid: Int by TrackDelegate(\"sid\")\n    var secondarySid: Int by TrackDelegate(\"secondary-sid\")\n    var aid: Int by TrackDelegate(\"aid\")\n\n    override fun initOptions(vo: String) {\n        setVo(if (decoderPreferences.gpuNext().get()) \"gpu-next\" else \"gpu\")\n        MPVLib.setPropertyBoolean(\"pause\", true)\n        MPVLib.setOptionString(\"profile\", \"fast\")\n        MPVLib.setOptionString(\"hwdec\", if (decoderPreferences.tryHWDecoding().get()) \"auto\" else \"no\")\n        when (decoderPreferences.videoDebanding().get()) {\n            Debanding.None -> {}\n            Debanding.CPU -> MPVLib.setOptionString(\"vf\", \"gradfun=radius=12\")\n            Debanding.GPU -> MPVLib.setOptionString(\"deband\", \"yes\")\n        }\n\n        if (decoderPreferences.useYUV420P().get()) {\n            MPVLib.setOptionString(\"vf\", \"format=yuv420p\")\n        }\n        MPVLib.setOptionString(\"msg-level\", \"all=\" + if (networkPreferences.verboseLogging().get()) \"v\" else \"warn\")\n\n        MPVLib.setPropertyBoolean(\"keep-open\", true)\n        MPVLib.setPropertyBoolean(\"input-default-bindings\", true)\n\n        MPVLib.setOptionString(\"ytdl\", \"no\")\n        MPVLib.setOptionString(\"tls-verify\", \"yes\")\n        MPVLib.setOptionString(\"tls-ca-file\", \"${context.filesDir.path}/${PlayerActivity.MPV_DIR}/cacert.pem\")\n\n        // Limit demuxer cache since the defaults are too high for mobile devices\n        val cacheMegs = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) 64 else 32\n        MPVLib.setOptionString(\"demuxer-max-bytes\", \"${cacheMegs * 1024 * 1024}\")\n        MPVLib.setOptionString(\"demuxer-max-back-bytes\", \"${cacheMegs * 1024 * 1024}\")\n        //\n        val screenshotDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)\n        screenshotDir.mkdirs()\n        MPVLib.setOptionString(\"screenshot-directory\", screenshotDir.path)\n\n        VideoFilters.entries.forEach {\n            MPVLib.setOptionString(it.mpvProperty, it.preference(decoderPreferences).get().toString())\n        }\n\n        MPVLib.setOptionString(\"speed\", playerPreferences.playerSpeed().get().toString())\n        // workaround for <https://github.com/mpv-player/mpv/issues/14651>\n        MPVLib.setOptionString(\"vd-lavc-film-grain\", \"cpu\")\n\n        setupSubtitlesOptions()\n        setupAudioOptions()\n    }\n\n    override fun observeProperties() {\n        for ((name, format) in observedProps) MPVLib.observeProperty(name, format)\n    }\n\n    override fun postInitOptions() {\n        advancedPreferences.playerStatisticsPage().get().let {\n            if (it != 0) {\n                MPVLib.command(arrayOf(\"script-binding\", \"stats/display-stats-toggle\"))\n                MPVLib.command(arrayOf(\"script-binding\", \"stats/display-page-$it\"))\n            }\n        }\n    }\n\n    fun onKey(event: KeyEvent): Boolean {\n        if (event.action == KeyEvent.ACTION_MULTIPLE || KeyEvent.isModifierKey(event.keyCode)) {\n            return false\n        }\n\n        var mapped = KeyMapping.map.get(event.keyCode)\n        if (mapped == null) {\n            // Fallback to produced glyph\n            if (!event.isPrintingKey) {\n                if (event.repeatCount == 0) {\n                    logcat(LogPriority.DEBUG) { \"Unmapped non-printable key ${event.keyCode}\" }\n                }\n                return false\n            }\n\n            val ch = event.unicodeChar\n            if (ch.and(KeyCharacterMap.COMBINING_ACCENT) != 0) {\n                return false // dead key\n            }\n            mapped = ch.toChar().toString()\n        }\n\n        if (event.repeatCount > 0) {\n            return true // eat event but ignore it, mpv has its own key repeat\n        }\n\n        val mod: MutableList<String> = mutableListOf()\n        event.isShiftPressed && mod.add(\"shift\")\n        event.isCtrlPressed && mod.add(\"ctrl\")\n        event.isAltPressed && mod.add(\"alt\")\n        event.isMetaPressed && mod.add(\"meta\")\n\n        val action = if (event.action == KeyEvent.ACTION_DOWN) \"keydown\" else \"keyup\"\n        mod.add(mapped)\n        MPVLib.command(arrayOf(action, mod.joinToString(\"+\")))\n\n        return true\n    }\n\n    private val observedProps = mapOf(\n        \"chapter\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n        \"chapter-list\" to MPVLib.mpvFormat.MPV_FORMAT_NONE,\n        \"track-list\" to MPVLib.mpvFormat.MPV_FORMAT_NONE,\n\n        \"time-pos\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n        \"demuxer-cache-time\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n        \"duration\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n        \"volume\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n        \"volume-max\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n\n        \"sid\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"secondary-sid\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"aid\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n\n        \"speed\" to MPVLib.mpvFormat.MPV_FORMAT_DOUBLE,\n        \"video-params/aspect\" to MPVLib.mpvFormat.MPV_FORMAT_DOUBLE,\n\n        \"hwdec-current\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"hwdec\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n\n        \"pause\" to MPVLib.mpvFormat.MPV_FORMAT_FLAG,\n        \"paused-for-cache\" to MPVLib.mpvFormat.MPV_FORMAT_FLAG,\n        \"seeking\" to MPVLib.mpvFormat.MPV_FORMAT_FLAG,\n        \"eof-reached\" to MPVLib.mpvFormat.MPV_FORMAT_FLAG,\n\n        \"user-data/aniyomi/show_text\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/toggle_ui\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/show_panel\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/software_keyboard\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/set_button_title\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/reset_button_title\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/toggle_button\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/switch_episode\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/pause\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/seek_by\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/seek_to\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/seek_by_with_text\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/seek_to_with_text\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n        \"user-data/aniyomi/launch_int_picker\" to MPVLib.mpvFormat.MPV_FORMAT_STRING,\n\n        \"user-data/current-anime/intro-length\" to MPVLib.mpvFormat.MPV_FORMAT_INT64,\n    )\n\n    private fun setupAudioOptions() {\n        MPVLib.setOptionString(\"alang\", audioPreferences.preferredAudioLanguages().get())\n        MPVLib.setOptionString(\"audio-delay\", (audioPreferences.audioDelay().get() / 1000.0).toString())\n        MPVLib.setOptionString(\"audio-pitch-correction\", audioPreferences.enablePitchCorrection().get().toString())\n        MPVLib.setOptionString(\"volume-max\", (audioPreferences.volumeBoostCap().get() + 100).toString())\n    }\n\n    private fun setupSubtitlesOptions() {\n        MPVLib.setOptionString(\"sub-delay\", (subtitlePreferences.subtitlesDelay().get() / 1000.0).toString())\n        MPVLib.setOptionString(\"sub-speed\", subtitlePreferences.subtitlesSpeed().get().toString())\n        MPVLib.setOptionString(\n            \"secondary-sub-delay\",\n            (subtitlePreferences.subtitlesSecondaryDelay().get() / 1000.0).toString(),\n        )\n\n        MPVLib.setOptionString(\"sub-font\", subtitlePreferences.subtitleFont().get())\n        if (subtitlePreferences.overrideSubsASS().get()) {\n            MPVLib.setOptionString(\"sub-ass-override\", \"force\")\n            MPVLib.setOptionString(\"sub-ass-justify\", \"yes\")\n        }\n        MPVLib.setOptionString(\"sub-font-size\", subtitlePreferences.subtitleFontSize().get().toString())\n        MPVLib.setOptionString(\"sub-bold\", if (subtitlePreferences.boldSubtitles().get()) \"yes\" else \"no\")\n        MPVLib.setOptionString(\"sub-italic\", if (subtitlePreferences.italicSubtitles().get()) \"yes\" else \"no\")\n        MPVLib.setOptionString(\"sub-justify\", subtitlePreferences.subtitleJustification().get().value)\n        MPVLib.setOptionString(\"sub-color\", subtitlePreferences.textColorSubtitles().get().toColorHexString())\n        MPVLib.setOptionString(\n            \"sub-back-color\",\n            subtitlePreferences.backgroundColorSubtitles().get().toColorHexString(),\n        )\n        MPVLib.setOptionString(\"sub-border-color\", subtitlePreferences.borderColorSubtitles().get().toColorHexString())\n        MPVLib.setOptionString(\"sub-border-size\", subtitlePreferences.subtitleBorderSize().get().toString())\n        MPVLib.setOptionString(\"sub-border-style\", subtitlePreferences.borderStyleSubtitles().get().value)\n        MPVLib.setOptionString(\"sub-shadow-offset\", subtitlePreferences.shadowOffsetSubtitles().get().toString())\n        MPVLib.setOptionString(\"sub-pos\", subtitlePreferences.subtitlePos().get().toString())\n        MPVLib.setOptionString(\"sub-scale\", subtitlePreferences.subtitleFontScale().get().toString())\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt",
    "content": "package eu.kanade.tachiyomi.ui.player\n\nimport android.app.Application\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Bundle\nimport androidx.core.content.FileProvider\nimport androidx.core.net.toUri\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.track.anime.model.toDbTrack\nimport eu.kanade.domain.track.anime.service.DelayedAnimeTrackingUpdateJob\nimport eu.kanade.domain.track.anime.store.DelayedAnimeTrackingStore\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.ui.player.loader.EpisodeLoader\nimport eu.kanade.tachiyomi.ui.player.loader.HosterLoader\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.util.system.LocaleHelper\nimport eu.kanade.tachiyomi.util.system.isOnline\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.DelicateCoroutinesApi\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.history.anime.interactor.UpsertAnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryUpdate\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.interactor.InsertAnimeTrack\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\nimport java.util.Date\n\nclass ExternalIntents {\n\n    /**\n     * The common variables\n     * Used to dictate what video is sent an external player.\n     */\n    lateinit var anime: Anime\n    lateinit var source: AnimeSource\n    lateinit var episode: Episode\n\n    var animeId: Long? = null\n    var episodeId: Long? = null\n\n    /**\n     * Returns the [Intent] to be sent to an external player.\n     *\n     * @param context the application context.\n     * @param animeId the id of the anime.\n     * @param episodeId the id of the episode.\n     */\n    suspend fun getExternalIntent(\n        context: Context,\n        animeId: Long,\n        episodeId: Long,\n        chosenVideo: Video?,\n    ): Intent? {\n        if (!initAnime(animeId, episodeId)) return null\n        val hosters = EpisodeLoader.getHosters(episode, anime, source)\n\n        val video = chosenVideo\n            ?: HosterLoader.getBestVideo(source, hosters)\n            ?: throw Exception(\"Video list is empty\")\n\n        val videoUrl = getVideoUrl(source, context, video) ?: return null\n\n        val pkgName = playerPreferences.externalPlayerPreference().get()\n\n        return if (pkgName.isEmpty()) {\n            Intent(Intent.ACTION_VIEW).apply {\n                setDataAndTypeAndNormalize(videoUrl, getMime(videoUrl))\n                addExtrasAndFlags(false, this)\n                addVideoHeaders(false, video, this)\n            }\n        } else {\n            getIntentForPackage(pkgName, context, videoUrl, video)\n        }\n    }\n\n    suspend fun initAnime(animeId: Long, episodeId: Long): Boolean {\n        anime = getAnime.await(animeId) ?: return false\n        source = sourceManager.get(anime.source) ?: return false\n        episode = getEpisodesByAnimeId.await(anime.id).find { it.id == episodeId } ?: return false\n\n        this.animeId = animeId\n        this.episodeId = episodeId\n\n        return true\n    }\n\n    /**\n     * Returns the [Uri] of the given video.\n     *\n     * @param context the application context.\n     * @param video the video being sent to the external player.\n     */\n    private suspend fun getVideoUrl(source: AnimeSource, context: Context, video: Video): Uri? {\n        val resolvedVideo = HosterLoader.getResolvedVideo(source, video)\n\n        if (resolvedVideo == null || resolvedVideo.videoUrl.isEmpty()) {\n            makeErrorToast(context, Exception(\"Video URL is empty.\"))\n            return null\n        } else {\n            val uri = resolvedVideo.videoUrl.toUri()\n\n            val isOnDevice = if (anime.source == LocalAnimeSource.ID) {\n                true\n            } else {\n                downloadManager.isEpisodeDownloaded(\n                    episodeName = episode.name,\n                    episodeScanlator = episode.scanlator,\n                    animeTitle = anime.title,\n                    sourceId = anime.source,\n                    skipCache = true,\n                )\n            }\n\n            return if (isOnDevice && uri.scheme != \"content\") {\n                FileProvider.getUriForFile(\n                    context,\n                    context.applicationContext.packageName + \".provider\",\n                    File(uri.path!!),\n                )\n            } else {\n                uri\n            }\n        }\n    }\n\n    /**\n     * Returns the second to start the external player at.\n     */\n    private fun getLastSecondSeen(): Long {\n        val preserveWatchPos = playerPreferences.preserveWatchingPosition().get()\n        val isEpisodeWatched = episode.lastSecondSeen == episode.totalSeconds\n\n        return if (episode.seen && (!preserveWatchPos || (preserveWatchPos && isEpisodeWatched))) {\n            1L\n        } else {\n            episode.lastSecondSeen\n        }\n    }\n\n    /**\n     * Display an error toast in this [context].\n     *\n     * @param context the application context.\n     * @param e the exception error to be displayed.\n     */\n    private suspend fun makeErrorToast(context: Context, e: Exception?) {\n        withUIContext { context.toast(e?.message ?: \"Cannot open episode\") }\n    }\n\n    /**\n     * Returns the [Intent] with added data to send to the given external player.\n     *\n     * @param pkgName the name of the package to send the [Intent] to.\n     * @param context the application context.\n     * @param uri the path data of the video.\n     * @param video the video being sent to the external player.\n     */\n    private fun getIntentForPackage(pkgName: String, context: Context, uri: Uri, video: Video): Intent {\n        return when (pkgName) {\n            WEB_VIDEO_CASTER -> webVideoCasterIntent(pkgName, context, uri, video)\n            else -> standardIntentForPackage(pkgName, context, uri, video)\n        }\n    }\n\n    private fun webVideoCasterIntent(pkgName: String, context: Context, uri: Uri, video: Video): Intent {\n        return Intent(Intent.ACTION_VIEW).apply {\n            setDataAndType(uri, \"video/*\")\n            if (isPackageInstalled(pkgName, context.packageManager)) setPackage(WEB_VIDEO_CASTER)\n            addExtrasAndFlags(true, this)\n\n            val headers = Bundle()\n            video.headers?.forEach {\n                headers.putString(it.first, it.second)\n            }\n\n            val localLangName = LocaleHelper.getSimpleLocaleDisplayName()\n            video.subtitleTracks.firstOrNull {\n                it.lang.contains(localLangName, true)\n            }?.let {\n                putExtra(\"subtitle\", it.url)\n            } ?: video.subtitleTracks.firstOrNull()?.let {\n                putExtra(\"subtitle\", it.url)\n            }\n\n            putExtra(\"android.media.intent.extra.HTTP_HEADERS\", headers)\n            putExtra(\"secure_uri\", true)\n        }\n    }\n\n    /**\n     * Returns the [Intent] with added data to send to the given external player.\n     *\n     * @param pkgName the name of the package to send the [Intent] to.\n     * @param context the application context.\n     * @param uri the path data of the video.\n     * @param video the video being sent to the external player.\n     */\n    private fun standardIntentForPackage(pkgName: String, context: Context, uri: Uri, video: Video): Intent {\n        return Intent(Intent.ACTION_VIEW).apply {\n            if (isPackageInstalled(pkgName, context.packageManager)) {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && pkgName.contains(\"vlc\")) {\n                    setPackage(pkgName)\n                } else {\n                    component = getComponent(pkgName)\n                }\n            }\n            setDataAndType(uri, \"video/*\")\n            addExtrasAndFlags(true, this)\n            addVideoHeaders(true, video, this)\n\n            // Add support for Subtitles to external players\n\n            val localLangName = LocaleHelper.getSimpleLocaleDisplayName()\n            val langIndex = video.subtitleTracks.indexOfFirst {\n                it.lang.contains(localLangName, true)\n            }\n            val requestedLanguage = if (langIndex == -1) 0 else langIndex\n            val requestedUrl = video.subtitleTracks.getOrNull(requestedLanguage)?.url\n\n            // Just, Next, MX Player, mpv\n            putExtra(\"subs\", video.subtitleTracks.map { it.url.toUri() }.toTypedArray())\n            putExtra(\"subs.name\", video.subtitleTracks.map { it.lang }.toTypedArray())\n            putExtra(\"subs.enable\", requestedUrl?.let { arrayOf(it.toUri()) } ?: emptyArray())\n\n            // VLC - seems to only work for local sub files\n            requestedUrl?.let { putExtra(\"subtitles_location\", it) }\n        }\n    }\n\n    /**\n     * Adds extras and flags to the given [Intent].\n     *\n     * @param isSupportedPlayer is it a supported external player.\n     * @param intent the [Intent] that the extras and flags are added to.\n     */\n    private fun addExtrasAndFlags(isSupportedPlayer: Boolean, intent: Intent): Intent {\n        return intent.apply {\n            putExtra(\"title\", anime.title + \" - \" + episode.name)\n            putExtra(\"position\", getLastSecondSeen().toInt())\n            putExtra(\"return_result\", true)\n            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)\n            if (isSupportedPlayer) putExtra(\"secure_uri\", true)\n        }\n    }\n\n    /**\n     * Adds the headers of the video to the given [Intent].\n     *\n     * @param isSupportedPlayer is it a supported external player.\n     * @param video the [Video] to get the headers from.\n     * @param intent the [Intent] that the headers are added to.\n     */\n    private fun addVideoHeaders(isSupportedPlayer: Boolean, video: Video, intent: Intent): Intent {\n        return intent.apply {\n            val headers = video.headers ?: (source as? AnimeHttpSource)?.headers\n            if (headers != null) {\n                var headersArray = arrayOf<String>()\n                for (header in headers) {\n                    headersArray += arrayOf(header.first, header.second)\n                }\n                putExtra(\"headers\", headersArray)\n                val headersString = headersArray.drop(2).joinToString(\": \")\n                if (!isSupportedPlayer) putExtra(\"http-header-fields\", headersString)\n            }\n        }\n    }\n\n    /**\n     * Returns the MIME type based on the video's extension.\n     *\n     * @param uri the path data of the video.\n     */\n    private fun getMime(uri: Uri): String {\n        return when (uri.path?.substringAfterLast(\".\")) {\n            \"mp4\" -> \"video/mp4\"\n            \"mkv\" -> \"video/x-matroska\"\n            \"m3u8\" -> \"application/x-mpegURL\"\n            else -> \"video/any\"\n        }\n    }\n\n    /**\n     * Returns the specific activity to be called.\n     * If the package is a part of the supported external players\n     *\n     * @param packageName the name of the package.\n     */\n    private fun getComponent(packageName: String): ComponentName? {\n        return when (packageName) {\n            MPV_PLAYER -> ComponentName(packageName, \"$packageName.MPVActivity\")\n            MX_PLAYER, MX_PLAYER_FREE, MX_PLAYER_PRO -> ComponentName(\n                packageName,\n                \"$packageName.ActivityScreen\",\n            )\n            VLC_PLAYER -> ComponentName(packageName, \"$packageName.gui.video.VideoPlayerActivity\")\n            MPV_KT, MPV_KT_PREVIEW -> ComponentName(packageName, \"live.mehiz.mpvkt.ui.player.PlayerActivity\")\n            MPV_REMOTE -> ComponentName(packageName, \"$packageName.MainActivity\")\n            JUST_PLAYER -> ComponentName(packageName, \"$packageName.PlayerActivity\")\n            NEXT_PLAYER -> ComponentName(packageName, \"$packageName.feature.player.PlayerActivity\")\n            X_PLAYER -> ComponentName(packageName, \"com.inshot.xplayer.activities.PlayerActivity\")\n            else -> null\n        }\n    }\n\n    /**\n     * Returns true if the given package is installed on the device.\n     *\n     * @param packageName the name of the package to be found.\n     * @param packageManager the instance of the package manager provided by the device.\n     */\n    private fun isPackageInstalled(packageName: String, packageManager: PackageManager): Boolean {\n        return try {\n            packageManager.getPackageInfo(packageName, 0)\n            true\n        } catch (e: PackageManager.NameNotFoundException) {\n            false\n        }\n    }\n\n    /**\n     * Saves the episode's data based on whats returned by the external player.\n     *\n     * @param intent the [Intent] that contains the episode's position and duration.\n     */\n    @OptIn(DelicateCoroutinesApi::class)\n    @Suppress(\"DEPRECATION\")\n    fun onActivityResult(intent: Intent?) {\n        val data = intent ?: return\n        if (animeId == null || episodeId == null) return\n\n        val anime = anime\n        val currentExtEpisode = episode\n        val currentPosition: Long\n        val duration: Long\n        val cause = data.getStringExtra(\"end_by\") ?: \"\"\n\n        // Check for position and duration as Long values\n        if (cause.isNotEmpty()) {\n            val positionExtra = data.extras?.get(\"position\")\n            currentPosition = if (positionExtra is Int) {\n                positionExtra.toLong()\n            } else {\n                positionExtra as? Long ?: 0L\n            }\n            val durationExtra = data.extras?.get(\"duration\")\n            duration = if (durationExtra is Int) {\n                durationExtra.toLong()\n            } else {\n                durationExtra as? Long ?: 0L\n            }\n        } else {\n            if (data.extras?.get(\"extra_position\") != null) {\n                currentPosition = data.getLongExtra(\"extra_position\", 0L)\n                duration = data.getLongExtra(\"extra_duration\", 0L)\n            } else {\n                currentPosition = data.getIntExtra(\"position\", 0).toLong()\n                duration = data.getIntExtra(\"duration\", 0).toLong()\n            }\n        }\n\n        // Update the episode's progress and history\n        launchIO {\n            if (cause == \"playback_completion\" || (currentPosition == duration && duration == 0L)) {\n                saveEpisodeProgress(\n                    currentExtEpisode,\n                    anime,\n                    currentExtEpisode.totalSeconds,\n                    currentExtEpisode.totalSeconds,\n                )\n            } else {\n                saveEpisodeProgress(currentExtEpisode, anime, currentPosition, duration)\n            }\n            saveEpisodeHistory(currentExtEpisode)\n        }\n    }\n\n    // List of all the required Injectable classes\n    private val upsertHistory: UpsertAnimeHistory = Injekt.get()\n    private val updateEpisode: UpdateEpisode = Injekt.get()\n    private val getAnime: GetAnime = Injekt.get()\n    private val sourceManager: AnimeSourceManager = Injekt.get()\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get()\n    private val getTracks: GetAnimeTracks = Injekt.get()\n    private val insertTrack: InsertAnimeTrack = Injekt.get()\n    private val downloadManager: AnimeDownloadManager by injectLazy()\n    private val delayedTrackingStore: DelayedAnimeTrackingStore = Injekt.get()\n    private val playerPreferences: PlayerPreferences = Injekt.get()\n    private val downloadPreferences: DownloadPreferences = Injekt.get()\n    private val trackPreferences: TrackPreferences = Injekt.get()\n    private val basePreferences: BasePreferences by injectLazy()\n\n    /**\n     * Saves this episode's last seen history if incognito mode isn't on.\n     *\n     * @param currentEpisode the episode to update.\n     */\n    private suspend fun saveEpisodeHistory(currentEpisode: Episode) {\n        if (basePreferences.incognitoMode().get()) return\n        upsertHistory.await(\n            AnimeHistoryUpdate(currentEpisode.id, Date()),\n        )\n    }\n\n    /**\n     * Saves this episode's progress (last seen second and whether it's seen).\n     * Only if incognito mode isn't on\n     *\n     * @param currentEpisode the episode to update.\n     * @param anime the anime of the episode.\n     * @param lastSecondSeen the position of the episode.\n     * @param totalSeconds the duration of the episode.\n     */\n    private suspend fun saveEpisodeProgress(\n        currentEpisode: Episode?,\n        anime: Anime,\n        lastSecondSeen: Long,\n        totalSeconds: Long,\n    ) {\n        if (basePreferences.incognitoMode().get()) return\n        val currEp = currentEpisode ?: return\n\n        if (totalSeconds > 0L) {\n            val progress = playerPreferences.progressPreference().get()\n            val seen = if (!currEp.seen) lastSecondSeen >= totalSeconds * progress else true\n            updateEpisode.await(\n                EpisodeUpdate(\n                    id = currEp.id,\n                    seen = seen,\n                    bookmark = currEp.bookmark,\n                    fillermark = currEp.fillermark,\n                    lastSecondSeen = lastSecondSeen,\n                    totalSeconds = totalSeconds,\n                ),\n            )\n            if (trackPreferences.autoUpdateTrack().get() && currEp.seen) {\n                updateTrackEpisodeSeen(currEp.episodeNumber.toDouble(), anime)\n            }\n            if (seen) {\n                deleteEpisodeIfNeeded(currentEpisode, anime)\n            }\n        }\n    }\n\n    /**\n     * Determines if deleting option is enabled and nth to last episode actually exists.\n     * If both conditions are satisfied enqueues episode for delete\n     *\n     * @param episode the episode, which is going to be marked as seen.\n     * @param anime the anime of the episode.\n     */\n    private suspend fun deleteEpisodeIfNeeded(episode: Episode, anime: Anime) {\n        // Determine which episode should be deleted and enqueue\n        val sortFunction: (Episode, Episode) -> Int = when (anime.sorting) {\n            Anime.EPISODE_SORTING_SOURCE -> { c1, c2 -> c2.sourceOrder.compareTo(c1.sourceOrder) }\n            Anime.EPISODE_SORTING_NUMBER -> { c1, c2 -> c1.episodeNumber.compareTo(c2.episodeNumber) }\n            Anime.EPISODE_SORTING_UPLOAD_DATE -> { c1, c2 -> c1.dateUpload.compareTo(c2.dateUpload) }\n            else -> throw NotImplementedError(\"Unknown sorting method\")\n        }\n\n        val episodes = getEpisodesByAnimeId.await(anime.id)\n            .sortedWith { e1, e2 -> sortFunction(e1, e2) }\n\n        val currentEpisodePosition = episodes.indexOf(episode)\n        val removeAfterSeenSlots = downloadPreferences.removeAfterReadSlots().get()\n        val episodeToDelete = episodes.getOrNull(currentEpisodePosition - removeAfterSeenSlots)\n\n        // Check if deleting option is enabled and episode exists\n        if (removeAfterSeenSlots != -1 && episodeToDelete != null) {\n            enqueueDeleteSeenEpisodes(episodeToDelete, anime)\n        }\n    }\n\n    /**\n     * Starts the service that updates the last episode seen in sync services.\n     * This operation will run in a background thread and errors are ignored.\n     *\n     * @param episodeNumber the episode number to be updated.\n     * @param anime the anime of the episode.\n     */\n    private suspend fun updateTrackEpisodeSeen(episodeNumber: Double, anime: Anime) {\n        if (!trackPreferences.autoUpdateTrack().get()) return\n\n        val trackerManager = Injekt.get<TrackerManager>()\n        val context = Injekt.get<Application>()\n\n        withIOContext {\n            getTracks.await(anime.id)\n                .mapNotNull { track ->\n                    val tracker = trackerManager.get(track.trackerId)\n                    if (tracker != null &&\n                        tracker.isLoggedIn &&\n                        tracker is AnimeTracker &&\n                        episodeNumber > track.lastEpisodeSeen\n                    ) {\n                        val updatedTrack = track.copy(lastEpisodeSeen = episodeNumber)\n\n                        // We want these to execute even if the presenter is destroyed and leaks\n                        // for a while. The view can still be garbage collected.\n                        async {\n                            runCatching {\n                                if (context.isOnline()) {\n                                    tracker.animeService.update(updatedTrack.toDbTrack(), true)\n                                    insertTrack.await(updatedTrack)\n                                } else {\n                                    delayedTrackingStore.addAnime(track.animeId, lastEpisodeSeen = episodeNumber)\n                                    DelayedAnimeTrackingUpdateJob.setupTask(context)\n                                }\n                            }\n                        }\n                    } else {\n                        null\n                    }\n                }\n                .awaitAll()\n                .mapNotNull { it.exceptionOrNull() }\n                .forEach { logcat(LogPriority.INFO, it) }\n        }\n    }\n\n    /**\n     * Enqueues an [Episode] to be deleted later.\n     *\n     * @param episode the episode being deleted.\n     * @param anime the anime of the episode.\n     */\n    private suspend fun enqueueDeleteSeenEpisodes(episode: Episode, anime: Anime) {\n        if (episode.seen) {\n            withIOContext {\n                downloadManager.enqueueEpisodesToDelete(\n                    listOf(episode),\n                    anime,\n                )\n            }\n        }\n    }\n\n    companion object {\n\n        val externalIntents: ExternalIntents by injectLazy()\n\n        /**\n         * Used to direct the [Intent] of a chosen episode to an external player.\n         *\n         * @param context the application context.\n         * @param animeId the id of the anime.\n         * @param episodeId the id of the episode.\n         */\n        suspend fun newIntent(context: Context, animeId: Long, episodeId: Long, video: Video?): Intent? {\n            return externalIntents.getExternalIntent(context, animeId, episodeId, video)\n        }\n    }\n}\n\n// List of supported external players and their packages\nconst val MPV_PLAYER = \"is.xyz.mpv\"\nconst val MX_PLAYER = \"com.mxtech.videoplayer\"\nconst val MX_PLAYER_FREE = \"com.mxtech.videoplayer.ad\"\nconst val MX_PLAYER_PRO = \"com.mxtech.videoplayer.pro\"\nconst val VLC_PLAYER = \"org.videolan.vlc\"\nconst val MPV_KT = \"live.mehiz.mpvkt\"\nconst val MPV_KT_PREVIEW = \"live.mehiz.mpvkt.preview\"\nconst val MPV_REMOTE = \"com.husudosu.mpvremote\"\nconst val JUST_PLAYER = \"com.brouken.player\"\nconst val NEXT_PLAYER = \"dev.anilbeesetti.nextplayer\"\nconst val X_PLAYER = \"video.player.videoplayer\"\nconst val WEB_VIDEO_CASTER = \"com.instantbits.cast.webvideo\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/PipActions.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player\n\nimport android.app.PendingIntent\nimport android.app.RemoteAction\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.drawable.Icon\nimport androidx.annotation.DrawableRes\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\nfun createPipActions(\n    context: Context,\n    isPaused: Boolean,\n    replaceWithPrevious: Boolean,\n    playlistCount: Int,\n    playlistPosition: Int,\n): ArrayList<RemoteAction> = arrayListOf(\n    if (replaceWithPrevious) {\n        createPipAction(\n            context,\n            R.drawable.ic_skip_previous_24dp,\n            AYMR.strings.action_previous_episode,\n            PIP_PREVIOUS,\n            PIP_PREVIOUS,\n            playlistPosition != 0,\n        )\n    } else {\n        createPipAction(\n            context,\n            R.drawable.ic_forward_10_24dp,\n            AYMR.strings.pref_skip_10,\n            PIP_SKIP,\n            PIP_SKIP,\n        )\n    },\n    if (isPaused) {\n        createPipAction(\n            context,\n            R.drawable.ic_play_arrow_24dp,\n            AYMR.strings.action_play,\n            PIP_PLAY,\n            PIP_PLAY,\n        )\n    } else {\n        createPipAction(\n            context,\n            R.drawable.ic_pause_24dp,\n            MR.strings.action_pause,\n            PIP_PAUSE,\n            PIP_PAUSE,\n        )\n    },\n    createPipAction(\n        context,\n        R.drawable.ic_skip_next_24dp,\n        AYMR.strings.action_next_episode,\n        PIP_NEXT,\n        PIP_NEXT,\n        playlistPosition != playlistCount - 1,\n    ),\n)\n\nfun createPipAction(\n    context: Context,\n    @DrawableRes icon: Int,\n    titleRes: StringResource,\n    requestCode: Int,\n    controlType: Int,\n    isEnabled: Boolean = true,\n): RemoteAction {\n    val action = RemoteAction(\n        Icon.createWithResource(context, icon),\n        context.stringResource(titleRes),\n        context.stringResource(titleRes),\n        PendingIntent.getBroadcast(\n            context,\n            requestCode,\n            Intent(PIP_INTENTS_FILTER).putExtra(PIP_INTENT_ACTION, controlType).setPackage(context.packageName),\n            PendingIntent.FLAG_IMMUTABLE,\n        ),\n    )\n    action.isEnabled = isEnabled\n    return action\n}\n\nconst val PIP_INTENTS_FILTER = \"pip_control\"\nconst val PIP_INTENT_ACTION = \"media_control\"\nconst val PIP_PAUSE = 1\nconst val PIP_PLAY = 2\nconst val PIP_PREVIOUS = 3\nconst val PIP_NEXT = 4\nconst val PIP_SKIP = 5\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Code is a mix between PlayerActivity from mpvKt and the former\n * PlayerActivity from Aniyomi.\n */\n\npackage eu.kanade.tachiyomi.ui.player\n\nimport android.annotation.SuppressLint\nimport android.app.PictureInPictureParams\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.content.pm.ActivityInfo\nimport android.content.pm.PackageManager\nimport android.content.res.AssetManager\nimport android.content.res.Configuration\nimport android.graphics.Rect\nimport android.media.AudioManager\nimport android.media.session.MediaSession\nimport android.media.session.PlaybackState\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Bundle\nimport android.util.Rational\nimport android.view.KeyEvent\nimport android.view.View\nimport android.view.WindowManager\nimport androidx.activity.enableEdgeToEdge\nimport androidx.activity.viewModels\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.layout.boundsInWindow\nimport androidx.compose.ui.layout.onGloballyPositioned\nimport androidx.core.net.toUri\nimport androidx.core.view.WindowCompat\nimport androidx.core.view.WindowInsetsCompat\nimport androidx.core.view.WindowInsetsControllerCompat\nimport androidx.lifecycle.lifecycleScope\nimport androidx.lifecycle.viewModelScope\nimport androidx.media.AudioAttributesCompat\nimport androidx.media.AudioFocusRequestCompat\nimport androidx.media.AudioManagerCompat\nimport com.hippo.unifile.UniFile\nimport eu.kanade.presentation.theme.TachiyomiTheme\nimport eu.kanade.tachiyomi.animesource.model.ChapterType\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.SerializableHoster.Companion.serialize\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.databinding.PlayerLayoutBinding\nimport eu.kanade.tachiyomi.network.NetworkPreferences\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.ui.player.controls.PlayerControls\nimport eu.kanade.tachiyomi.ui.player.settings.AdvancedPlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.utils.ChapterUtils\nimport eu.kanade.tachiyomi.ui.player.utils.ChapterUtils.Companion.getStringRes\nimport eu.kanade.tachiyomi.util.system.powerManager\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport `is`.xyz.mpv.MPVLib\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.IOException\nimport java.io.InputStream\nimport java.io.OutputStream\nimport kotlin.math.ceil\nimport kotlin.math.floor\n\nclass PlayerActivity : BaseActivity() {\n    private val viewModel by viewModels<PlayerViewModel>(factoryProducer = { PlayerViewModelProviderFactory(this) })\n    private val binding by lazy { PlayerLayoutBinding.inflate(layoutInflater) }\n    private val playerObserver by lazy { PlayerObserver(this) }\n    val player by lazy { binding.player }\n    val windowInsetsController by lazy { WindowCompat.getInsetsController(window, window.decorView) }\n    val audioManager by lazy { getSystemService(Context.AUDIO_SERVICE) as AudioManager }\n\n    private var mediaSession: MediaSession? = null\n    private val gesturePreferences: GesturePreferences by lazy { viewModel.gesturePreferences }\n    private val playerPreferences: PlayerPreferences by lazy { viewModel.playerPreferences }\n    private val audioPreferences: AudioPreferences = Injekt.get()\n    private val advancedPlayerPreferences: AdvancedPlayerPreferences = Injekt.get()\n    private val networkPreferences: NetworkPreferences = Injekt.get()\n    private val storageManager: StorageManager = Injekt.get()\n\n    private var audioFocusRequest: AudioFocusRequestCompat? = null\n    private var restoreAudioFocus: () -> Unit = {}\n\n    private var pipRect: Rect? = null\n    val isPipSupportedAndEnabled by lazy {\n        packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) &&\n            playerPreferences.enablePip().get()\n    }\n\n    private var pipReceiver: BroadcastReceiver? = null\n\n    private val noisyReceiver = object : BroadcastReceiver() {\n        var initialized = false\n        override fun onReceive(context: Context?, intent: Intent?) {\n            if (intent?.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) {\n                viewModel.pause()\n                window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n            }\n        }\n    }\n\n    companion object {\n        fun newIntent(\n            context: Context,\n            animeId: Long?,\n            episodeId: Long?,\n            hostList: List<Hoster>? = null,\n            hostIndex: Int? = null,\n            vidIndex: Int? = null,\n        ): Intent {\n            return Intent(context, PlayerActivity::class.java).apply {\n                putExtra(\"animeId\", animeId)\n                putExtra(\"episodeId\", episodeId)\n                hostIndex?.let { putExtra(\"hostIndex\", it) }\n                vidIndex?.let { putExtra(\"vidIndex\", it) }\n                hostList?.let { putExtra(\"hostList\", it.serialize()) }\n                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n            }\n        }\n\n        internal const val MPV_DIR = \"mpv\"\n        private const val MPV_FONTS_DIR = \"fonts\"\n        private const val MPV_SCRIPTS_DIR = \"scripts\"\n        private const val MPV_SCRIPTS_OPTS_DIR = \"script-opts\"\n        private const val MPV_SHADERS_DIR = \"shaders\"\n    }\n\n    override fun onNewIntent(intent: Intent) {\n        super.onNewIntent(intent)\n\n        val animeId = intent.extras?.getLong(\"animeId\") ?: -1\n        val episodeId = intent.extras?.getLong(\"episodeId\") ?: -1\n        val hostList = intent.extras?.getString(\"hostList\") ?: \"\"\n        val hostIndex = intent.extras?.getInt(\"hostIndex\") ?: -1\n        val vidIndex = intent.extras?.getInt(\"vidIndex\") ?: -1\n        if (animeId == -1L || episodeId == -1L) {\n            finish()\n            return\n        }\n        NotificationReceiver.dismissNotification(\n            this,\n            animeId.hashCode(),\n            Notifications.ID_NEW_EPISODES,\n        )\n\n        viewModel.saveCurrentEpisodeWatchingProgress()\n\n        lifecycleScope.launchNonCancellable {\n            viewModel.updateIsLoadingEpisode(true)\n            viewModel.updateIsLoadingHosters(true)\n\n            val initResult = viewModel.init(animeId, episodeId, hostList, hostIndex, vidIndex)\n            if (!initResult.second.getOrDefault(false)) {\n                val exception = initResult.second.exceptionOrNull() ?: IllegalStateException(\n                    \"Unknown error\",\n                )\n                withUIContext {\n                    setInitialEpisodeError(exception)\n                }\n            }\n\n            viewModel.updateIsLoadingHosters(false)\n\n            lifecycleScope.launch {\n                viewModel.loadHosters(\n                    source = viewModel.currentSource.value!!,\n                    hosterList = initResult.first.hosterList ?: emptyList(),\n                    hosterIndex = initResult.first.videoIndex.first,\n                    videoIndex = initResult.first.videoIndex.second,\n                )\n            }\n        }\n\n        setIntent(intent)\n    }\n\n    @SuppressLint(\"ClickableViewAccessibility\")\n    override fun onCreate(savedInstanceState: Bundle?) {\n        enableEdgeToEdge()\n        registerSecureActivity(this)\n        super.onCreate(savedInstanceState)\n        setContentView(binding.root)\n\n        setupPlayerMPV()\n        setupPlayerAudio()\n        setupMediaSession()\n        setupPlayerOrientation()\n\n        Thread.setDefaultUncaughtExceptionHandler { _, throwable ->\n            runOnUiThread {\n                toast(throwable.message)\n            }\n            logcat(LogPriority.ERROR, throwable)\n            finish()\n        }\n\n        viewModel.eventFlow\n            .onEach { event ->\n                when (event) {\n                    is PlayerViewModel.Event.SavedImage -> {\n                        onSaveImageResult(event.result)\n                    }\n                    is PlayerViewModel.Event.ShareImage -> {\n                        onShareImageResult(event.uri, event.seconds)\n                    }\n                    is PlayerViewModel.Event.SetArtResult -> {\n                        onSetAsArtResult(event.result, event.artType)\n                    }\n                }\n            }\n            .launchIn(lifecycleScope)\n\n        binding.controls.setContent {\n            TachiyomiTheme {\n                PlayerControls(\n                    viewModel = viewModel,\n                    onBackPress = {\n                        if (isPipSupportedAndEnabled && player.paused == false && playerPreferences.pipOnExit().get()) {\n                            enterPictureInPictureMode(createPipParams())\n                        } else {\n                            finish()\n                        }\n                    },\n                    modifier = Modifier.onGloballyPositioned {\n                        pipRect = run {\n                            val boundsInWindow = it.boundsInWindow()\n                            Rect(\n                                boundsInWindow.left.toInt(),\n                                boundsInWindow.top.toInt(),\n                                boundsInWindow.right.toInt(),\n                                boundsInWindow.bottom.toInt(),\n                            )\n                        }\n                    },\n                )\n            }\n        }\n\n        onNewIntent(this.intent)\n    }\n\n    override fun onDestroy() {\n        player.isExiting = true\n\n        audioFocusRequest?.let {\n            AudioManagerCompat.abandonAudioFocusRequest(audioManager, it)\n        }\n        audioFocusRequest = null\n\n        mediaSession?.let {\n            it.isActive = false\n            it.release()\n        }\n\n        if (noisyReceiver.initialized) {\n            unregisterReceiver(noisyReceiver)\n            noisyReceiver.initialized = false\n        }\n\n        MPVLib.removeLogObserver(playerObserver)\n        MPVLib.removeObserver(playerObserver)\n        player.destroy()\n\n        super.onDestroy()\n    }\n\n    override fun onPause() {\n        viewModel.saveCurrentEpisodeWatchingProgress()\n\n        if (isInPictureInPictureMode) {\n            super.onPause()\n            return\n        }\n\n        player.isExiting = true\n        if (isFinishing) {\n            viewModel.deletePendingEpisodes()\n            MPVLib.command(arrayOf(\"stop\"))\n        } else {\n            viewModel.pause()\n        }\n\n        super.onPause()\n    }\n\n    override fun onStop() {\n        window.attributes.screenBrightness.let {\n            if (playerPreferences.rememberPlayerBrightness().get() && it != -1f) {\n                playerPreferences.playerBrightnessValue().set(it)\n            }\n        }\n\n        if (isInPictureInPictureMode && powerManager.isInteractive) {\n            viewModel.deletePendingEpisodes()\n        }\n\n        super.onStop()\n    }\n\n    override fun onUserLeaveHint() {\n        if (isPipSupportedAndEnabled && player.paused == false && playerPreferences.pipOnExit().get()) {\n            enterPictureInPictureMode()\n        }\n        super.onUserLeaveHint()\n    }\n\n    @Deprecated(\"Deprecated in Java\")\n    override fun onBackPressed() {\n        if (isPipSupportedAndEnabled && player.paused == false && playerPreferences.pipOnExit().get()) {\n            if (viewModel.sheetShown.value == Sheets.None &&\n                viewModel.panelShown.value == Panels.None &&\n                viewModel.dialogShown.value == Dialogs.None\n            ) {\n                enterPictureInPictureMode()\n            }\n        } else {\n            super.onBackPressed()\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n        setPictureInPictureParams(createPipParams())\n        WindowCompat.setDecorFitsSystemWindows(window, false)\n        window.setFlags(\n            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,\n            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,\n        )\n        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n        binding.root.systemUiVisibility =\n            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or\n            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or\n            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or\n            View.SYSTEM_UI_FLAG_LOW_PROFILE\n        windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())\n        windowInsetsController.hide(WindowInsetsCompat.Type.navigationBars())\n        windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE\n        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            window.attributes.layoutInDisplayCutoutMode = if (playerPreferences.playerFullscreen().get()) {\n                WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES\n            } else {\n                WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER\n            }\n        }\n\n        if (playerPreferences.rememberPlayerBrightness().get()) {\n            playerPreferences.playerBrightnessValue().get().let {\n                if (it != -1f) viewModel.changeBrightnessTo(it)\n            }\n        }\n    }\n\n    private fun executeMPVCommand(commands: Array<String>) {\n        if (!player.isExiting) {\n            MPVLib.command(commands)\n        }\n    }\n\n    private fun UniFile.writeText(text: String) {\n        this.openOutputStream().use {\n            it.write(text.toByteArray())\n        }\n    }\n\n    private fun setupPlayerMPV() {\n        val logLevel = if (networkPreferences.verboseLogging().get()) \"info\" else \"warn\"\n\n        val mpvDir = UniFile.fromFile(applicationContext.filesDir)!!.createDirectory(MPV_DIR)!!\n\n        val mpvConfFile = mpvDir.createFile(\"mpv.conf\")!!\n        advancedPlayerPreferences.mpvConf().get().let { mpvConfFile.writeText(it) }\n        val mpvInputFile = mpvDir.createFile(\"input.conf\")!!\n        advancedPlayerPreferences.mpvInput().get().let { mpvInputFile.writeText(it) }\n\n        copyUserFiles(mpvDir)\n        copyAssets(mpvDir)\n        copyFontsDirectory(mpvDir)\n\n        MPVLib.setOptionString(\"sub-ass-force-margins\", \"yes\")\n        MPVLib.setOptionString(\"sub-use-margins\", \"yes\")\n\n        player.initialize(\n            configDir = mpvDir.filePath!!,\n            cacheDir = applicationContext.cacheDir.path,\n            logLvl = logLevel,\n        )\n        MPVLib.addLogObserver(playerObserver)\n        MPVLib.addObserver(playerObserver)\n    }\n\n    private fun copyUserFiles(mpvDir: UniFile) {\n        // First, delete all present scripts\n        val scriptsDir = { mpvDir.createDirectory(MPV_SCRIPTS_DIR) }\n        val scriptOptsDir = { mpvDir.createDirectory(MPV_SCRIPTS_OPTS_DIR) }\n        val shadersDir = { mpvDir.createDirectory(MPV_SHADERS_DIR) }\n\n        scriptsDir()?.delete()\n        scriptOptsDir()?.delete()\n        shadersDir()?.delete()\n\n        // Then, copy the user files from the Aniyomi directory\n        if (advancedPlayerPreferences.mpvUserFiles().get()) {\n            storageManager.getScriptsDirectory()?.listFiles()?.forEach { file ->\n                val outFile = scriptsDir()?.createFile(file.name)\n                outFile?.let {\n                    file.openInputStream().copyTo(it.openOutputStream())\n                }\n            }\n            storageManager.getScriptOptsDirectory()?.listFiles()?.forEach { file ->\n                val outFile = scriptOptsDir()?.createFile(file.name)\n                outFile?.let {\n                    file.openInputStream().copyTo(it.openOutputStream())\n                }\n            }\n            storageManager.getShadersDirectory()?.listFiles()?.forEach { file ->\n                val outFile = shadersDir()?.createFile(file.name)\n                outFile?.let {\n                    file.openInputStream().copyTo(it.openOutputStream())\n                }\n            }\n        }\n\n        // Copy over the bridge file\n        val luaFile = scriptsDir()?.createFile(\"aniyomi.lua\")\n        val luaBridge = assets.open(\"aniyomi.lua\")\n        luaFile?.openOutputStream()?.bufferedWriter()?.use { scriptLua ->\n            luaBridge.bufferedReader().use { scriptLua.write(it.readText()) }\n        }\n    }\n\n    private fun copyAssets(mpvDir: UniFile) {\n        val assetManager = this.assets\n        val files = arrayOf(\"subfont.ttf\", \"cacert.pem\")\n        for (filename in files) {\n            var ins: InputStream? = null\n            var out: OutputStream? = null\n            try {\n                ins = assetManager.open(filename, AssetManager.ACCESS_STREAMING)\n                val outFile = mpvDir.createFile(filename)!!\n                // Note that .available() officially returns an *estimated* number of bytes available\n                // this is only true for generic streams, asset streams return the full file size\n                if (outFile.length() == ins.available().toLong()) {\n                    logcat(LogPriority.VERBOSE) { \"Skipping copy of asset file (exists same size): $filename\" }\n                    continue\n                }\n                out = outFile.openOutputStream()\n                ins.copyTo(out)\n                logcat(LogPriority.WARN) { \"Copied asset file: $filename\" }\n            } catch (e: IOException) {\n                logcat(LogPriority.ERROR, e) { \"Failed to copy asset file: $filename\" }\n            } finally {\n                ins?.close()\n                out?.close()\n            }\n        }\n    }\n\n    private fun copyFontsDirectory(mpvDir: UniFile) {\n        // TODO: I think this is a bad hack.\n        //  We need to find a way to let MPV directly access our fonts directory.\n        CoroutineScope(Dispatchers.IO).launchIO {\n            val fontsDirectory = mpvDir.createDirectory(MPV_FONTS_DIR)!!\n\n            storageManager.getFontsDirectory()?.listFiles()?.forEach { font ->\n                val outFile = fontsDirectory.createFile(font.name)\n                outFile?.let {\n                    font.openInputStream().copyTo(it.openOutputStream())\n                }\n            }\n\n            MPVLib.setPropertyString(\"sub-fonts-dir\", fontsDirectory.filePath!!)\n            MPVLib.setPropertyString(\"osd-fonts-dir\", fontsDirectory.filePath!!)\n        }\n    }\n\n    fun setupCustomButtons(buttons: List<CustomButton>) {\n        CoroutineScope(Dispatchers.IO).launchIO {\n            val scriptsDir = {\n                UniFile.fromFile(applicationContext.filesDir)\n                    ?.createDirectory(MPV_DIR)\n                    ?.createDirectory(MPV_SCRIPTS_DIR)\n            }\n\n            val primaryButtonId = viewModel.primaryButton.value?.id ?: 0L\n\n            val customButtonsContent = buildString {\n                append(\n                    \"\"\"\n                        local lua_modules = mp.find_config_file('scripts')\n                        if lua_modules then\n                            package.path = package.path .. ';' .. lua_modules .. '/?.lua;' .. lua_modules .. '/?/init.lua;' .. '${scriptsDir()!!.filePath}' .. '/?.lua'\n                        end\n                        local aniyomi = require 'aniyomi'\n                    \"\"\".trimIndent(),\n                )\n\n                buttons.forEach { button ->\n                    append(\n                        \"\"\"\n                            ${button.getButtonOnStartup(primaryButtonId)}\n                            function button${button.id}()\n                                ${button.getButtonContent(primaryButtonId)}\n                            end\n                            mp.register_script_message('call_button_${button.id}', button${button.id})\n                            function button${button.id}long()\n                                ${button.getButtonLongPressContent(primaryButtonId)}\n                            end\n                            mp.register_script_message('call_button_${button.id}_long', button${button.id}long)\n                        \"\"\".trimIndent(),\n                    )\n                }\n            }\n\n            val file = scriptsDir()?.createFile(\"custombuttons.lua\")\n            file?.openOutputStream()?.bufferedWriter()?.use {\n                it.write(customButtonsContent)\n            }\n\n            file?.let {\n                MPVLib.command(arrayOf(\"load-script\", it.filePath))\n            }\n        }\n    }\n\n    private fun setupPlayerAudio() {\n        with(audioPreferences) {\n            audioChannels().get().let { MPVLib.setPropertyString(it.property, it.value) }\n\n            val request = AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN).also {\n                it.setAudioAttributes(\n                    AudioAttributesCompat.Builder().setUsage(AudioAttributesCompat.USAGE_MEDIA)\n                        .setContentType(AudioAttributesCompat.CONTENT_TYPE_MUSIC).build(),\n                )\n                it.setOnAudioFocusChangeListener(audioFocusChangeListener)\n            }.build()\n            AudioManagerCompat.requestAudioFocus(audioManager, request).let {\n                if (it == AudioManager.AUDIOFOCUS_REQUEST_FAILED) return@let\n                audioFocusRequest = request\n            }\n        }\n    }\n\n    private val audioFocusChangeListener = AudioManager.OnAudioFocusChangeListener {\n        when (it) {\n            AudioManager.AUDIOFOCUS_LOSS,\n            AudioManager.AUDIOFOCUS_LOSS_TRANSIENT,\n            -> {\n                val oldRestore = restoreAudioFocus\n                val wasPlayerPaused = player.paused ?: false\n                viewModel.pause()\n                restoreAudioFocus = {\n                    oldRestore()\n                    if (!wasPlayerPaused) viewModel.unpause()\n                }\n            }\n\n            AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {\n                MPVLib.command(arrayOf(\"multiply\", \"volume\", \"0.5\"))\n                restoreAudioFocus = {\n                    MPVLib.command(arrayOf(\"multiply\", \"volume\", \"2\"))\n                }\n            }\n\n            AudioManager.AUDIOFOCUS_GAIN -> {\n                restoreAudioFocus()\n                restoreAudioFocus = {}\n            }\n\n            AudioManager.AUDIOFOCUS_REQUEST_FAILED -> {\n                logcat(LogPriority.DEBUG) { \"didn't get audio focus\" }\n            }\n        }\n    }\n\n    override fun onResume() {\n        if (!player.isExiting) {\n            super.onResume()\n            return\n        }\n\n        player.isExiting = false\n        super.onResume()\n\n        viewModel.currentVolume.update {\n            audioManager.getStreamVolume(AudioManager.STREAM_MUSIC).also {\n                if (it < viewModel.maxVolume) viewModel.changeMPVVolumeTo(100)\n            }\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        if (!isInPictureInPictureMode) {\n            viewModel.changeVideoAspect(playerPreferences.aspectState().get())\n        } else {\n            viewModel.hideControls()\n        }\n        super.onConfigurationChanged(newConfig)\n    }\n\n    fun showToast(message: String) {\n        runOnUiThread { toast(message) }\n    }\n\n    // A bunch of observers\n\n    internal fun onObserverEvent(property: String, value: Long) {\n        if (player.isExiting) return\n        when (property) {\n            \"time-pos\" -> {\n                viewModel.updatePlayBackPos(value.toFloat())\n                viewModel.setChapter(value.toFloat())\n            }\n            \"demuxer-cache-time\" -> viewModel.updateReadAhead(value = value)\n            \"volume\" -> viewModel.setMPVVolume(value.toInt())\n            \"volume-max\" -> viewModel.volumeBoostCap = value.toInt() - 100\n            // \"chapter\" -> viewModel.updateChapter(value)\n            \"duration\" -> viewModel.duration.update { value.toFloat() }\n            \"user-data/current-anime/intro-length\" -> viewModel.setAnimeSkipIntroLength(value)\n        }\n    }\n\n    internal fun onObserverEvent(property: String) {\n        if (player.isExiting) return\n        when (property) {\n            \"chapter-list\" -> {\n                viewModel.loadChapters()\n                viewModel.updateChapter(0)\n            }\n            \"track-list\" -> viewModel.loadTracks()\n        }\n    }\n\n    internal fun onObserverEvent(property: String, value: Boolean) {\n        if (player.isExiting) return\n        when (property) {\n            \"pause\" -> {\n                if (value && player.paused == true) {\n                    viewModel.pause()\n                    window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n                } else if (!value && player.paused == false) {\n                    viewModel.unpause()\n                    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n                }\n\n                runCatching {\n                    setPictureInPictureParams(createPipParams())\n                }\n            }\n\n            \"paused-for-cache\" -> {\n                viewModel.isLoading.update { value }\n            }\n\n            \"seeking\" -> {\n                viewModel.isLoading.update { value }\n            }\n\n            \"eof-reached\" -> {\n                endFile(value)\n            }\n        }\n    }\n\n    val trackId: (String) -> Int? = {\n        when (it) {\n            \"auto\" -> null\n            \"no\" -> -1\n            else -> it.toInt()\n        }\n    }\n\n    internal fun onObserverEvent(property: String, value: String) {\n        if (player.isExiting) return\n        when (property.substringBeforeLast(\"/\")) {\n            \"aid\" -> trackId(value)?.let { viewModel.updateAudio(it) }\n            \"sid\" -> trackId(value)?.let { viewModel.updateSubtitle(it, viewModel.selectedSubtitles.value.second) }\n            \"secondary-sid\" -> trackId(value)?.let {\n                viewModel.updateSubtitle(viewModel.selectedSubtitles.value.first, it)\n            }\n            \"hwdec\", \"hwdec-current\" -> viewModel.getDecoder()\n            \"user-data/aniyomi\" -> viewModel.handleLuaInvocation(property, value)\n        }\n    }\n\n    @SuppressLint(\"NewApi\")\n    internal fun onObserverEvent(property: String, value: Double) {\n        if (player.isExiting) return\n        when (property) {\n            \"speed\" -> viewModel.playbackSpeed.update { value.toFloat() }\n            \"video-params/aspect\" -> if (isPipSupportedAndEnabled) createPipParams()\n        }\n    }\n\n    internal fun event(eventId: Int) {\n        if (player.isExiting) return\n        when (eventId) {\n            MPVLib.mpvEventId.MPV_EVENT_FILE_LOADED -> {\n                viewModel.viewModelScope.launchIO { fileLoaded() }\n            }\n            MPVLib.mpvEventId.MPV_EVENT_SEEK -> viewModel.isLoading.update { true }\n            MPVLib.mpvEventId.MPV_EVENT_PLAYBACK_RESTART -> player.isExiting = false\n        }\n    }\n\n    fun createPipParams(): PictureInPictureParams {\n        val builder = PictureInPictureParams.Builder()\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n            val anime = viewModel.currentAnime.value\n            val episode = viewModel.currentEpisode.value\n\n            if (anime != null && episode != null) {\n                builder.setTitle(anime.title).setSubtitle(episode.name)\n            }\n        }\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n            val autoEnter = playerPreferences.pipOnExit().get()\n            builder.setAutoEnterEnabled(player.paused == false && autoEnter)\n            builder.setSeamlessResizeEnabled(player.paused == false && autoEnter)\n        }\n        builder.setActions(\n            createPipActions(\n                context = this,\n                isPaused = player.paused ?: true,\n                replaceWithPrevious = playerPreferences.pipReplaceWithPrevious().get(),\n                playlistCount = viewModel.currentPlaylist.value.size,\n                playlistPosition = viewModel.getCurrentEpisodeIndex(),\n            ),\n        )\n        builder.setSourceRectHint(pipRect)\n        player.videoH?.let {\n            val height = it\n            val width = it * player.getVideoOutAspect()!!\n            val rational = Rational(height, width.toInt()).toFloat()\n            if (rational in 0.42..2.38) builder.setAspectRatio(Rational(width.toInt(), height))\n        }\n        return builder.build()\n    }\n\n    @SuppressLint(\"UnspecifiedRegisterReceiverFlag\")\n    override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) {\n        if (!isInPictureInPictureMode) {\n            pipReceiver?.let {\n                unregisterReceiver(pipReceiver)\n                pipReceiver = null\n            }\n        } else {\n            setPictureInPictureParams(createPipParams())\n            viewModel.hideControls()\n            viewModel.hideSeekBar()\n            viewModel.isBrightnessSliderShown.update { false }\n            viewModel.isVolumeSliderShown.update { false }\n            viewModel.sheetShown.update { Sheets.None }\n            pipReceiver = object : BroadcastReceiver() {\n                override fun onReceive(context: Context?, intent: Intent?) {\n                    if (intent == null || intent.action != PIP_INTENTS_FILTER) return\n                    when (intent.getIntExtra(PIP_INTENT_ACTION, 0)) {\n                        PIP_PAUSE -> viewModel.pause()\n                        PIP_PLAY -> viewModel.unpause()\n                        PIP_NEXT -> viewModel.changeEpisode(false)\n                        PIP_PREVIOUS -> viewModel.changeEpisode(true)\n                        PIP_SKIP -> viewModel.seekBy(10)\n                    }\n                    setPictureInPictureParams(createPipParams())\n                }\n            }\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                registerReceiver(pipReceiver, IntentFilter(PIP_INTENTS_FILTER), RECEIVER_NOT_EXPORTED)\n            } else {\n                registerReceiver(pipReceiver, IntentFilter(PIP_INTENTS_FILTER))\n            }\n        }\n\n        super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)\n    }\n\n    private fun setupPlayerOrientation() {\n        if (player.isExiting) return\n        requestedOrientation = when (playerPreferences.defaultPlayerOrientationType().get()) {\n            PlayerOrientation.Free -> ActivityInfo.SCREEN_ORIENTATION_SENSOR\n            PlayerOrientation.Video -> if ((player.getVideoOutAspect() ?: 0.0) > 1.0) {\n                ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE\n            } else {\n                ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT\n            }\n\n            PlayerOrientation.Portrait -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT\n            PlayerOrientation.ReversePortrait -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT\n            PlayerOrientation.SensorPortrait -> ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT\n            PlayerOrientation.Landscape -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE\n            PlayerOrientation.ReverseLandscape -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT\n            PlayerOrientation.SensorLandscape -> ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE\n        }\n    }\n\n    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {\n        when (keyCode) {\n            KeyEvent.KEYCODE_VOLUME_UP -> {\n                viewModel.changeVolumeBy(1)\n                viewModel.displayVolumeSlider()\n            }\n            KeyEvent.KEYCODE_VOLUME_DOWN -> {\n                viewModel.changeVolumeBy(-1)\n                viewModel.displayVolumeSlider()\n            }\n            KeyEvent.KEYCODE_DPAD_LEFT -> viewModel.handleLeftDoubleTap()\n            KeyEvent.KEYCODE_DPAD_RIGHT -> viewModel.handleRightDoubleTap()\n            KeyEvent.KEYCODE_SPACE -> viewModel.pauseUnpause()\n            KeyEvent.KEYCODE_MEDIA_STOP -> finishAndRemoveTask()\n\n            KeyEvent.KEYCODE_MEDIA_REWIND -> viewModel.handleLeftDoubleTap()\n            KeyEvent.KEYCODE_MEDIA_FAST_FORWARD -> viewModel.handleRightDoubleTap()\n\n            // other keys should be bound by the user in input.conf ig\n            else -> {\n                event?.let { player.onKey(it) }\n                super.onKeyDown(keyCode, event)\n            }\n        }\n        return true\n    }\n\n    override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {\n        if (player.onKey(event!!)) return true\n        return super.onKeyUp(keyCode, event)\n    }\n\n    private fun setupMediaSession() {\n        val previousAction = gesturePreferences.mediaPreviousGesture().get()\n        val playAction = gesturePreferences.mediaPlayPauseGesture().get()\n        val nextAction = gesturePreferences.mediaNextGesture().get()\n\n        mediaSession = MediaSession(this, \"PlayerActivity\").apply {\n            setCallback(\n                object : MediaSession.Callback() {\n                    override fun onPlay() {\n                        when (playAction) {\n                            SingleActionGesture.None -> {}\n                            SingleActionGesture.Seek -> {}\n                            SingleActionGesture.PlayPause -> {\n                                super.onPlay()\n                                viewModel.unpause()\n                                window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n                            }\n                            SingleActionGesture.Custom -> {\n                                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.MediaPlay.keyCode))\n                            }\n\n                            SingleActionGesture.Switch -> {}\n                        }\n                    }\n\n                    override fun onPause() {\n                        when (playAction) {\n                            SingleActionGesture.None -> {}\n                            SingleActionGesture.Seek -> {}\n                            SingleActionGesture.PlayPause -> {\n                                super.onPause()\n                                viewModel.pause()\n                                window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n                            }\n                            SingleActionGesture.Custom -> {\n                                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.MediaPlay.keyCode))\n                            }\n\n                            SingleActionGesture.Switch -> {}\n                        }\n                    }\n\n                    override fun onSkipToPrevious() {\n                        when (previousAction) {\n                            SingleActionGesture.None -> {}\n                            SingleActionGesture.Seek -> {\n                                viewModel.leftSeek()\n                            }\n                            SingleActionGesture.PlayPause -> {\n                                viewModel.pauseUnpause()\n                            }\n                            SingleActionGesture.Custom -> {\n                                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.MediaPrevious.keyCode))\n                            }\n\n                            SingleActionGesture.Switch -> viewModel.changeEpisode(true)\n                        }\n                    }\n\n                    override fun onSkipToNext() {\n                        when (nextAction) {\n                            SingleActionGesture.None -> {}\n                            SingleActionGesture.Seek -> {\n                                viewModel.rightSeek()\n                            }\n                            SingleActionGesture.PlayPause -> {\n                                viewModel.pauseUnpause()\n                            }\n                            SingleActionGesture.Custom -> {\n                                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.MediaNext.keyCode))\n                            }\n\n                            SingleActionGesture.Switch -> viewModel.changeEpisode(false)\n                        }\n                    }\n\n                    override fun onStop() {\n                        super.onStop()\n                        isActive = false\n                        this@PlayerActivity.onStop()\n                    }\n                },\n            )\n            setPlaybackState(\n                PlaybackState.Builder()\n                    .setActions(\n                        PlaybackState.ACTION_PLAY or\n                            PlaybackState.ACTION_PAUSE or\n                            PlaybackState.ACTION_STOP or\n                            PlaybackState.ACTION_SKIP_TO_PREVIOUS or\n                            PlaybackState.ACTION_SKIP_TO_NEXT,\n                    )\n                    .build(),\n            )\n            isActive = true\n        }\n\n        val filter = IntentFilter().apply { addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY) }\n        registerReceiver(noisyReceiver, filter)\n        noisyReceiver.initialized = true\n    }\n\n    // ==== END MPVKT ====\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        if (!isChangingConfigurations) {\n            viewModel.onSaveInstanceStateNonConfigurationChange()\n        }\n        super.onSaveInstanceState(outState)\n    }\n\n    /**\n     * Switches to the episode based on [episodeId],\n     * @param episodeId id of the episode to switch the player to\n     * @param autoPlay whether the episode is switching due to auto play\n     */\n    internal fun changeEpisode(episodeId: Long?, autoPlay: Boolean = false) {\n        viewModel.sheetShown.update { _ -> Sheets.None }\n        viewModel.panelShown.update { _ -> Panels.None }\n        viewModel.pause()\n        viewModel.isLoading.update { _ -> true }\n        viewModel.resetHosterState()\n\n        lifecycleScope.launch {\n            viewModel.updateIsLoadingEpisode(true)\n            viewModel.updateIsLoadingHosters(true)\n            viewModel.cancelHosterVideoLinksJob()\n\n            val pipEpisodeToasts = playerPreferences.pipEpisodeToasts().get()\n            val switchMethod = viewModel.loadEpisode(episodeId)\n\n            viewModel.updateIsLoadingHosters(false)\n\n            when (switchMethod) {\n                null -> {\n                    if (viewModel.currentAnime.value != null && !autoPlay) {\n                        launchUI { toast(AYMR.strings.no_next_episode) }\n                    }\n                    viewModel.isLoading.update { _ -> false }\n                }\n\n                else -> {\n                    if (switchMethod.hosterList != null) {\n                        when {\n                            switchMethod.hosterList.isEmpty() -> setInitialEpisodeError(\n                                PlayerViewModel.ExceptionWithStringResource(\n                                    \"Hoster list is empty\",\n                                    AYMR.strings.no_hosters,\n                                ),\n                            )\n                            else -> {\n                                viewModel.loadHosters(\n                                    source = switchMethod.source,\n                                    hosterList = switchMethod.hosterList,\n                                    hosterIndex = -1,\n                                    videoIndex = -1,\n                                )\n                            }\n                        }\n                    } else {\n                        logcat(LogPriority.ERROR) { \"Error getting links\" }\n                    }\n\n                    if (isInPictureInPictureMode && pipEpisodeToasts) {\n                        launchUI { toast(switchMethod.episodeTitle) }\n                    }\n                }\n            }\n        }\n\n        viewModel.updateHasPreviousEpisode(\n            viewModel.getCurrentEpisodeIndex() != 0,\n        )\n        viewModel.updateHasNextEpisode(\n            viewModel.getCurrentEpisodeIndex() != viewModel.currentPlaylist.value.size - 1,\n        )\n    }\n\n    fun setVideo(video: Video?, position: Long? = null) {\n        if (player.isExiting) return\n        if (video == null) return\n\n        setHttpOptions(video)\n\n        if (viewModel.isLoadingEpisode.value) {\n            viewModel.currentEpisode.value?.let { episode ->\n                val preservePos = playerPreferences.preserveWatchingPosition().get()\n                val resumePosition = position\n                    ?: if (episode.seen && !preservePos) {\n                        0L\n                    } else {\n                        episode.last_second_seen\n                    }\n                MPVLib.command(arrayOf(\"set\", \"start\", \"${resumePosition / 1000F}\"))\n            }\n        } else {\n            player.timePos?.let {\n                MPVLib.command(arrayOf(\"set\", \"start\", \"${player.timePos}\"))\n            }\n        }\n\n        val videoOptions = video.mpvArgs.joinToString(\",\") { (option, value) ->\n            \"$option=\\\"$value\\\"\"\n        }\n\n        MPVLib.command(\n            arrayOf(\n                \"loadfile\",\n                parseVideoUrl(video.videoUrl),\n                \"replace\",\n                \"0\",\n                videoOptions,\n            ),\n        )\n    }\n\n    /**\n     * Called from the presenter if the initial load couldn't load the videos of the episode. In\n     * this case the activity is closed and a toast is shown to the user.\n     */\n    private fun setInitialEpisodeError(error: Throwable) {\n        if (error is PlayerViewModel.ExceptionWithStringResource) {\n            toast(error.stringResource)\n        } else {\n            toast(error.message)\n        }\n        logcat(LogPriority.ERROR, error)\n        finish()\n    }\n\n    fun parseVideoUrl(videoUrl: String?): String? {\n        return videoUrl?.toUri()?.resolveUri(this)\n            ?: videoUrl\n    }\n\n    fun setHttpOptions(video: Video) {\n        if (viewModel.isEpisodeOnline() != true) return\n        val source = viewModel.currentSource.value as? AnimeHttpSource ?: return\n\n        val headers = (video.headers ?: source.headers)\n            .toMultimap()\n            .mapValues { it.value.firstOrNull() ?: \"\" }\n            .toMutableMap()\n\n        val httpHeaderString = headers.map {\n            it.key + \": \" + it.value.replace(\",\", \"\\\\,\")\n        }.joinToString(\",\")\n\n        MPVLib.setOptionString(\"http-header-fields\", httpHeaderString)\n\n        // need to fix the cache\n        // MPVLib.setOptionString(\"cache-on-disk\", \"yes\")\n        // val cacheDir = File(applicationContext.filesDir, \"media\").path\n        // MPVLib.setOptionString(\"cache-dir\", cacheDir)\n    }\n\n    /**\n     * Called from the presenter when a screenshot is ready to be shared. It shows Android's\n     * default sharing tool.\n     */\n    private fun onShareImageResult(uri: Uri, seconds: String) {\n        val anime = viewModel.currentAnime.value ?: return\n        val episode = viewModel.currentEpisode.value ?: return\n\n        val intent = uri.toShareIntent(\n            context = applicationContext,\n            message = stringResource(AYMR.strings.share_screenshot_info, anime.title, episode.name, seconds),\n        )\n        startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share)))\n    }\n\n    /**\n     * Called from the presenter when a screenshot is saved or fails. It shows a message\n     * or logs the event depending on the [result].\n     */\n    private fun onSaveImageResult(result: PlayerViewModel.SaveImageResult) {\n        when (result) {\n            is PlayerViewModel.SaveImageResult.Success -> {\n                toast(MR.strings.picture_saved)\n            }\n            is PlayerViewModel.SaveImageResult.Error -> {\n                logcat(LogPriority.ERROR, result.error)\n            }\n        }\n    }\n\n    /**\n     * Called from the presenter when a screenshot is set as art or fails.\n     * It shows a different message depending on the [result].\n     */\n    private fun onSetAsArtResult(result: SetAsArt, artType: ArtType) {\n        toast(\n            when (result) {\n                SetAsArt.Success ->\n                    when (artType) {\n                        ArtType.Cover -> MR.strings.cover_updated\n                        ArtType.Background -> AYMR.strings.background_updated\n                        ArtType.Thumbnail -> AYMR.strings.thumbnail_updated\n                    }\n                SetAsArt.AddToLibraryFirst -> MR.strings.notification_first_add_to_library\n                SetAsArt.Error -> MR.strings.notification_cover_update_failed\n            },\n        )\n    }\n\n    // TODO: exception java.util.ConcurrentModificationException:\n    //  UPDATE: MAY HAVE BEEN FIXED\n    // at java.lang.Object java.util.ArrayList$Itr.next() (ArrayList.java:860)\n    // at void eu.kanade.tachiyomi.ui.player.PlayerActivity.fileLoaded() (PlayerActivity.kt:1874)\n    // at void eu.kanade.tachiyomi.ui.player.PlayerActivity.event(int) (PlayerActivity.kt:1566)\n    // at void is.xyz.mpv.MPVLib.event(int) (MPVLib.java:86)\n    private fun fileLoaded() {\n        if (player.isExiting) return\n        setMpvOptions()\n        setMpvMediaTitle()\n        setupPlayerOrientation()\n        setupChapters()\n        setupTracks()\n\n        // aniSkip stuff\n        viewModel.waitingSkipIntro = playerPreferences.waitingTimeIntroSkip().get()\n        runBlocking {\n            if (\n                viewModel.introSkipEnabled &&\n                playerPreferences.aniSkipEnabled().get() &&\n                !(playerPreferences.disableAniSkipOnChapters().get() && viewModel.chapters.value.isNotEmpty())\n            ) {\n                viewModel.aniSkipResponse(player.duration)?.let {\n                    viewModel.updateChapters(\n                        ChapterUtils.mergeChapters(\n                            currentChapters = viewModel.chapters.value,\n                            stamps = it,\n                            duration = player.duration,\n                        ),\n                    )\n                    viewModel.setChapter(viewModel.pos.value)\n                }\n            }\n        }\n    }\n\n    private fun setMpvOptions() {\n        if (player.isExiting) return\n        val video = viewModel.currentVideo.value ?: return\n\n        // Only check for `MPV_ARGS_TAG` on downloaded videos\n        if (listOf(\"file\", \"content\", \"data\").none { video.videoUrl.startsWith(it) }) {\n            return\n        }\n\n        try {\n            val metadata = Json.decodeFromString<Map<String, String>>(\n                MPVLib.getPropertyString(\"metadata\"),\n            )\n\n            val opts = metadata[Video.MPV_ARGS_TAG]\n                ?.split(\";\")\n                ?.map { it.split(\"=\", limit = 2) }\n                ?: return\n\n            opts.forEach { (option, value) ->\n                MPVLib.setPropertyString(option, value)\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e) { \"Failed to read video metadata\" }\n        }\n    }\n\n    private fun setupTracks() {\n        if (player.isExiting) return\n        viewModel.isLoadingTracks.update { _ -> true }\n\n        val audioTracks = viewModel.currentVideo.value?.audioTracks?.takeIf { it.isNotEmpty() }\n        val subtitleTracks = viewModel.currentVideo.value?.subtitleTracks?.takeIf { it.isNotEmpty() }\n\n        // If no external audio or subtitle tracks are present, loadTracks() won't be\n        // called and we need to call onFinishLoadingTracks() manually\n        if (audioTracks == null && subtitleTracks == null) {\n            viewModel.onFinishLoadingTracks()\n            return\n        }\n\n        audioTracks?.forEach { audio ->\n            executeMPVCommand(arrayOf(\"audio-add\", audio.url, \"auto\", audio.lang))\n        }\n        subtitleTracks?.forEach { sub ->\n            executeMPVCommand(arrayOf(\"sub-add\", sub.url, \"auto\", sub.lang))\n        }\n\n        viewModel.isLoadingTracks.update { _ -> false }\n    }\n\n    private fun setupChapters() {\n        if (player.isExiting) return\n\n        val timestamps = viewModel.currentVideo.value?.timestamps?.takeIf { it.isNotEmpty() }\n            ?.map { timestamp ->\n                if (timestamp.name.isEmpty() && timestamp.type != ChapterType.Other) {\n                    timestamp.copy(\n                        name = timestamp.type.getStringRes()?.let(::stringResource) ?: \"\",\n                    )\n                } else {\n                    timestamp\n                }\n            }\n            ?: return\n\n        viewModel.updateChapters(\n            ChapterUtils.mergeChapters(\n                currentChapters = viewModel.chapters.value,\n                stamps = timestamps,\n                duration = player.duration,\n            ),\n        )\n        viewModel.setChapter(viewModel.pos.value)\n    }\n\n    private fun setMpvMediaTitle() {\n        if (player.isExiting) return\n        val anime = viewModel.currentAnime.value ?: return\n        val episode = viewModel.currentEpisode.value ?: return\n\n        // Write to mpv table\n        MPVLib.setPropertyString(\"user-data/current-anime/episode-title\", episode.name)\n\n        val epNumber = episode.episode_number.let { number ->\n            if (ceil(number) == floor(number)) number.toInt() else number\n        }.toString().padStart(2, '0')\n\n        val title = stringResource(\n            AYMR.strings.mpv_media_title,\n            anime.title,\n            epNumber,\n            episode.name,\n        )\n\n        MPVLib.setPropertyString(\"force-media-title\", title)\n    }\n\n    private fun endFile(eofReached: Boolean) {\n        if (eofReached && playerPreferences.autoplayEnabled().get()) {\n            viewModel.changeEpisode(previous = false, autoPlay = true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerEnums.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player\n\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.ui.player.settings.DecoderPreferences\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\n\n/**\n * Results of the set as art feature.\n */\nenum class SetAsArt {\n    Success,\n    AddToLibraryFirst,\n    Error,\n}\n\nenum class ArtType {\n    Cover,\n    Background,\n    Thumbnail,\n}\n\nenum class PlayerOrientation(val titleRes: StringResource) {\n    Free(MR.strings.rotation_free),\n    Video(AYMR.strings.rotation_video),\n    Portrait(MR.strings.rotation_portrait),\n    ReversePortrait(MR.strings.rotation_reverse_portrait),\n    SensorPortrait(AYMR.strings.rotation_sensor_portrait),\n    Landscape(MR.strings.rotation_landscape),\n    ReverseLandscape(AYMR.strings.rotation_reverse_landscape),\n    SensorLandscape(AYMR.strings.rotation_sensor_landscape),\n}\n\nenum class VideoAspect(val titleRes: StringResource) {\n    Crop(AYMR.strings.video_crop_screen),\n    Fit(AYMR.strings.video_fit_screen),\n    Stretch(AYMR.strings.video_stretch_screen),\n}\n\n/**\n * Action performed by a button, like double tap or media controls\n */\nenum class SingleActionGesture(val stringRes: StringResource) {\n    None(stringRes = AYMR.strings.single_action_none),\n    Seek(stringRes = AYMR.strings.single_action_seek),\n    PlayPause(stringRes = AYMR.strings.single_action_playpause),\n    Switch(stringRes = AYMR.strings.single_action_switch),\n    Custom(stringRes = AYMR.strings.single_action_custom),\n}\n\n/**\n * Key codes sent through the `Custom` option in gestures\n */\nenum class CustomKeyCodes(val keyCode: String) {\n    DoubleTapLeft(\"0x10001\"),\n    DoubleTapCenter(\"0x10002\"),\n    DoubleTapRight(\"0x10003\"),\n    MediaPrevious(\"0x10004\"),\n    MediaPlay(\"0x10005\"),\n    MediaNext(\"0x10006\"),\n}\n\nenum class Decoder(val title: String, val value: String) {\n    AutoCopy(\"Auto\", \"auto-copy\"),\n    Auto(\"Auto\", \"auto\"),\n    SW(\"SW\", \"no\"),\n    HW(\"HW\", \"mediacodec-copy\"),\n    HWPlus(\"HW+\", \"mediacodec\"),\n}\n\nfun getDecoderFromValue(value: String): Decoder {\n    return Decoder.entries.first { it.value == value }\n}\n\nenum class Debanding {\n    None,\n    CPU,\n    GPU,\n}\n\nenum class Sheets {\n    None,\n    PlaybackSpeed,\n    SubtitleTracks,\n    AudioTracks,\n    QualityTracks,\n    Chapters,\n    More,\n    Screenshot,\n}\n\nenum class Panels {\n    None,\n    SubtitleSettings,\n    SubtitleDelay,\n    AudioDelay,\n    VideoFilters,\n}\n\nsealed class Dialogs {\n    data object None : Dialogs()\n    data object EpisodeList : Dialogs()\n    data class IntegerPicker(\n        val defaultValue: Int,\n        val minValue: Int,\n        val maxValue: Int,\n        val step: Int,\n        val nameFormat: String,\n        val title: String,\n        val onChange: (Int) -> Unit,\n        val onDismissRequest: () -> Unit,\n    ) : Dialogs()\n}\n\nsealed class PlayerUpdates {\n    data object None : PlayerUpdates()\n    data object DoubleSpeed : PlayerUpdates()\n    data object AspectRatio : PlayerUpdates()\n    data class ShowText(val value: String) : PlayerUpdates()\n    data class ShowTextResource(val textResource: StringResource) : PlayerUpdates()\n}\n\nenum class VideoFilters(\n    val titleRes: StringResource,\n    val preference: (DecoderPreferences) -> Preference<Int>,\n    val mpvProperty: String,\n) {\n    BRIGHTNESS(\n        AYMR.strings.player_sheets_filters_brightness,\n        { it.brightnessFilter() },\n        \"brightness\",\n    ),\n    SATURATION(\n        AYMR.strings.player_sheets_filters_Saturation,\n        { it.saturationFilter() },\n        \"saturation\",\n    ),\n    CONTRAST(\n        AYMR.strings.player_sheets_filters_contrast,\n        { it.contrastFilter() },\n        \"contrast\",\n    ),\n    GAMMA(\n        AYMR.strings.player_sheets_filters_gamma,\n        { it.gammaFilter() },\n        \"gamma\",\n    ),\n    HUE(\n        AYMR.strings.player_sheets_filters_hue,\n        { it.hueFilter() },\n        \"hue\",\n    ),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerObserver.kt",
    "content": "package eu.kanade.tachiyomi.ui.player\n\nimport android.widget.Toast\nimport eu.kanade.tachiyomi.util.system.toast\nimport `is`.xyz.mpv.MPVLib\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nclass PlayerObserver(val activity: PlayerActivity) :\n    MPVLib.EventObserver,\n    MPVLib.LogObserver {\n\n    override fun eventProperty(property: String) {\n        activity.runOnUiThread { activity.onObserverEvent(property) }\n    }\n\n    override fun eventProperty(property: String, value: Long) {\n        activity.runOnUiThread { activity.onObserverEvent(property, value) }\n    }\n\n    override fun eventProperty(property: String, value: Boolean) {\n        activity.runOnUiThread { activity.onObserverEvent(property, value) }\n    }\n\n    override fun eventProperty(property: String, value: String) {\n        activity.runOnUiThread { activity.onObserverEvent(property, value) }\n    }\n\n    override fun eventProperty(property: String, value: Double) {\n        activity.runOnUiThread { activity.onObserverEvent(property, value) }\n    }\n\n    override fun event(eventId: Int) {\n        activity.runOnUiThread { activity.event(eventId) }\n    }\n\n    override fun efEvent(err: String?) {\n        var errorMessage = err ?: \"Error: File ended\"\n        if (!httpError.isNullOrEmpty()) {\n            errorMessage += \": $httpError\"\n            httpError = null\n        }\n        logcat(LogPriority.ERROR) { errorMessage }\n        activity.runOnUiThread {\n            activity.toast(errorMessage, Toast.LENGTH_LONG)\n        }\n    }\n\n    private var httpError: String? = null\n\n    override fun logMessage(prefix: String, level: Int, text: String) {\n        val logPriority = when (level) {\n            MPVLib.mpvLogLevel.MPV_LOG_LEVEL_FATAL, MPVLib.mpvLogLevel.MPV_LOG_LEVEL_ERROR -> LogPriority.ERROR\n            MPVLib.mpvLogLevel.MPV_LOG_LEVEL_WARN -> LogPriority.WARN\n            MPVLib.mpvLogLevel.MPV_LOG_LEVEL_INFO -> LogPriority.INFO\n            else -> LogPriority.VERBOSE\n        }\n        if (text.contains(\"HTTP error\")) httpError = text\n        logcat.logcat(\"mpv/$prefix\", logPriority) { text }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerUtils.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player\n\nimport android.content.Context\nimport android.net.Uri\nimport android.os.ParcelFileDescriptor\nimport android.provider.OpenableColumns\nimport `is`.xyz.mpv.Utils\nimport logcat.LogPriority\nimport logcat.logcat\n\ninternal fun Uri.openContentFd(context: Context): String? {\n    return context.contentResolver.openFileDescriptor(this, \"r\")?.detachFd()?.let {\n        Utils.findRealPath(it)?.also { _ ->\n            ParcelFileDescriptor.adoptFd(it).close()\n        } ?: \"fd://$it\"\n    }\n}\n\ninternal fun Uri.resolveUri(context: Context): String? {\n    val filepath = when (scheme) {\n        \"file\" -> path\n        \"content\" -> openContentFd(context)\n        \"data\" -> \"data://$schemeSpecificPart\"\n        in Utils.PROTOCOLS -> toString()\n        else -> null\n    }\n\n    if (filepath == null) logcat(LogPriority.ERROR) { \"unknown scheme: $scheme\" }\n    return filepath\n}\n\ninternal fun Uri.getFileName(context: Context): String? {\n    return context.contentResolver.query(this, null, null, null, null)?.use { cursor ->\n        val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)\n        cursor.moveToFirst()\n        cursor.getString(nameIndex)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Code is a mix between PlayerViewModel from mpvKt and the former\n * PlayerViewModel from Aniyomi.\n */\n\npackage eu.kanade.tachiyomi.ui.player\n\nimport android.app.Application\nimport android.content.Context\nimport android.content.pm.ActivityInfo\nimport android.media.AudioManager\nimport android.net.Uri\nimport android.provider.Settings\nimport android.util.DisplayMetrics\nimport android.view.inputmethod.InputMethodManager\nimport androidx.compose.runtime.Immutable\nimport androidx.core.view.WindowInsetsCompat\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.lifecycle.createSavedStateHandle\nimport androidx.lifecycle.viewModelScope\nimport androidx.lifecycle.viewmodel.CreationExtras\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.anime.interactor.SetAnimeViewerFlags\nimport eu.kanade.domain.items.episode.model.toDbEpisode\nimport eu.kanade.domain.source.anime.interactor.GetAnimeIncognitoState\nimport eu.kanade.domain.track.anime.interactor.TrackEpisode\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.CustomButtonFetchState\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.getButtons\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.ChapterType\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.SerializableHoster.Companion.toHosterList\nimport eu.kanade.tachiyomi.animesource.model.TimeStamp\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.data.database.models.anime.Episode\nimport eu.kanade.tachiyomi.data.database.models.anime.isRecognizedNumber\nimport eu.kanade.tachiyomi.data.database.models.anime.toDomainEpisode\nimport eu.kanade.tachiyomi.data.database.models.manga.isRecognizedNumber\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.data.saver.Image\nimport eu.kanade.tachiyomi.data.saver.ImageSaver\nimport eu.kanade.tachiyomi.data.saver.Location\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.data.track.anilist.Anilist\nimport eu.kanade.tachiyomi.data.track.myanimelist.MyAnimeList\nimport eu.kanade.tachiyomi.ui.player.controls.components.IndexedSegment\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.HosterState\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.getChangedAt\nimport eu.kanade.tachiyomi.ui.player.loader.EpisodeLoader\nimport eu.kanade.tachiyomi.ui.player.loader.HosterLoader\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.utils.AniSkipApi\nimport eu.kanade.tachiyomi.ui.player.utils.ChapterUtils.Companion.getStringRes\nimport eu.kanade.tachiyomi.ui.player.utils.TrackSelect\nimport eu.kanade.tachiyomi.ui.reader.SaveImageNotifier\nimport eu.kanade.tachiyomi.util.editBackground\nimport eu.kanade.tachiyomi.util.editCover\nimport eu.kanade.tachiyomi.util.editThumbnail\nimport eu.kanade.tachiyomi.util.episode.filterDownloadedEpisodes\nimport eu.kanade.tachiyomi.util.lang.byteSize\nimport eu.kanade.tachiyomi.util.lang.takeBytes\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.storage.cacheImageDir\nimport eu.kanade.tachiyomi.util.system.toast\nimport `is`.xyz.mpv.MPVLib\nimport `is`.xyz.mpv.Utils\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.custombuttons.interactor.GetCustomButtons\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.history.anime.interactor.GetNextEpisodes\nimport tachiyomi.domain.history.anime.interactor.UpsertAnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryUpdate\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.items.episode.service.getEpisodeSort\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\nimport java.io.InputStream\nimport java.util.Date\nimport java.util.concurrent.atomic.AtomicBoolean\nimport kotlin.coroutines.cancellation.CancellationException\n\nclass PlayerViewModelProviderFactory(\n    private val activity: PlayerActivity,\n) : ViewModelProvider.Factory {\n    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {\n        return PlayerViewModel(activity, extras.createSavedStateHandle()) as T\n    }\n}\n\nclass PlayerViewModel @JvmOverloads constructor(\n    private val activity: PlayerActivity,\n    private val savedState: SavedStateHandle,\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val imageSaver: ImageSaver = Injekt.get(),\n    private val downloadPreferences: DownloadPreferences = Injekt.get(),\n    private val trackPreferences: TrackPreferences = Injekt.get(),\n    private val trackEpisode: TrackEpisode = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val getNextEpisodes: GetNextEpisodes = Injekt.get(),\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get(),\n    private val getAnimeCategories: GetAnimeCategories = Injekt.get(),\n    private val getTracks: GetAnimeTracks = Injekt.get(),\n    private val upsertHistory: UpsertAnimeHistory = Injekt.get(),\n    private val updateEpisode: UpdateEpisode = Injekt.get(),\n    private val setAnimeViewerFlags: SetAnimeViewerFlags = Injekt.get(),\n    internal val playerPreferences: PlayerPreferences = Injekt.get(),\n    internal val gesturePreferences: GesturePreferences = Injekt.get(),\n    private val basePreferences: BasePreferences = Injekt.get(),\n    private val getCustomButtons: GetCustomButtons = Injekt.get(),\n    private val trackSelect: TrackSelect = Injekt.get(),\n    private val getIncognitoState: GetAnimeIncognitoState = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    uiPreferences: UiPreferences = Injekt.get(),\n) : ViewModel() {\n\n    private val _currentPlaylist = MutableStateFlow<List<Episode>>(emptyList())\n    val currentPlaylist = _currentPlaylist.asStateFlow()\n\n    private val _hasPreviousEpisode = MutableStateFlow(false)\n    val hasPreviousEpisode = _hasPreviousEpisode.asStateFlow()\n\n    private val _hasNextEpisode = MutableStateFlow(false)\n    val hasNextEpisode = _hasNextEpisode.asStateFlow()\n\n    private val _currentEpisode = MutableStateFlow<Episode?>(null)\n    val currentEpisode = _currentEpisode.asStateFlow()\n\n    private val _currentAnime = MutableStateFlow<Anime?>(null)\n    val currentAnime = _currentAnime.asStateFlow()\n\n    private val _currentSource = MutableStateFlow<AnimeSource?>(null)\n    val currentSource = _currentSource.asStateFlow()\n\n    private val _isEpisodeOnline = MutableStateFlow(false)\n    val isEpisodeOnline = _isEpisodeOnline.asStateFlow()\n\n    private val _isLoadingEpisode = MutableStateFlow(false)\n    val isLoadingEpisode = _isLoadingEpisode.asStateFlow()\n\n    private val _currentDecoder = MutableStateFlow(getDecoderFromValue(MPVLib.getPropertyString(\"hwdec\")))\n    val currentDecoder = _currentDecoder.asStateFlow()\n\n    val mediaTitle = MutableStateFlow(\"\")\n    val animeTitle = MutableStateFlow(\"\")\n\n    val isLoading = MutableStateFlow(true)\n    val playbackSpeed = MutableStateFlow(playerPreferences.playerSpeed().get())\n\n    private val _subtitleTracks = MutableStateFlow<List<VideoTrack>>(emptyList())\n    val subtitleTracks = _subtitleTracks.asStateFlow()\n    private val _selectedSubtitles = MutableStateFlow(Pair(-1, -1))\n    val selectedSubtitles = _selectedSubtitles.asStateFlow()\n\n    private val _audioTracks = MutableStateFlow<List<VideoTrack>>(emptyList())\n    val audioTracks = _audioTracks.asStateFlow()\n    private val _selectedAudio = MutableStateFlow(-1)\n    val selectedAudio = _selectedAudio.asStateFlow()\n\n    val isLoadingTracks = MutableStateFlow(true)\n\n    private val _hosterList = MutableStateFlow<List<Hoster>>(emptyList())\n    val hosterList = _hosterList.asStateFlow()\n    private val _isLoadingHosters = MutableStateFlow(true)\n    val isLoadingHosters = _isLoadingHosters.asStateFlow()\n    private val _hosterState = MutableStateFlow<List<HosterState>>(emptyList())\n    val hosterState = _hosterState.asStateFlow()\n    private val _hosterExpandedList = MutableStateFlow<List<Boolean>>(emptyList())\n    val hosterExpandedList = _hosterExpandedList.asStateFlow()\n    private val _selectedHosterVideoIndex = MutableStateFlow(Pair(-1, -1))\n    val selectedHosterVideoIndex = _selectedHosterVideoIndex.asStateFlow()\n    private val _currentVideo = MutableStateFlow<Video?>(null)\n    val currentVideo = _currentVideo.asStateFlow()\n\n    private val _chapters = MutableStateFlow<List<IndexedSegment>>(emptyList())\n    val chapters = _chapters.asStateFlow()\n    private val _currentChapter = MutableStateFlow<IndexedSegment?>(null)\n    val currentChapter = _currentChapter.asStateFlow()\n    private val _skipIntroText = MutableStateFlow<String?>(null)\n    val skipIntroText = _skipIntroText.asStateFlow()\n\n    private val _pos = MutableStateFlow(0f)\n    val pos = _pos.asStateFlow()\n\n    val duration = MutableStateFlow(0f)\n\n    private val _readAhead = MutableStateFlow(0f)\n    val readAhead = _readAhead.asStateFlow()\n\n    private val _paused = MutableStateFlow(false)\n    val paused = _paused.asStateFlow()\n\n    // False because the video shouldn't start paused\n    private val _pausedState = MutableStateFlow<Boolean?>(false)\n    val pausedState = _pausedState.asStateFlow()\n\n    private val _controlsShown = MutableStateFlow(!playerPreferences.hideControls().get())\n    val controlsShown = _controlsShown.asStateFlow()\n    private val _seekBarShown = MutableStateFlow(!playerPreferences.hideControls().get())\n    val seekBarShown = _seekBarShown.asStateFlow()\n    private val _areControlsLocked = MutableStateFlow(false)\n    val areControlsLocked = _areControlsLocked.asStateFlow()\n\n    val playerUpdate = MutableStateFlow<PlayerUpdates>(PlayerUpdates.None)\n    val isBrightnessSliderShown = MutableStateFlow(false)\n    val isVolumeSliderShown = MutableStateFlow(false)\n    val currentBrightness = MutableStateFlow(\n        runCatching {\n            Settings.System.getFloat(activity.contentResolver, Settings.System.SCREEN_BRIGHTNESS)\n                .normalize(0f, 255f, 0f, 1f)\n        }.getOrElse { 0f },\n    )\n    val currentVolume = MutableStateFlow(activity.audioManager.getStreamVolume(AudioManager.STREAM_MUSIC))\n    val currentMPVVolume = MutableStateFlow(MPVLib.getPropertyInt(\"volume\"))\n    var volumeBoostCap: Int = MPVLib.getPropertyInt(\"volume-max\")\n\n    // Pair(startingPosition, seekAmount)\n    val gestureSeekAmount = MutableStateFlow<Pair<Int, Int>?>(null)\n\n    val sheetShown = MutableStateFlow(Sheets.None)\n    val panelShown = MutableStateFlow(Panels.None)\n    val dialogShown = MutableStateFlow<Dialogs>(Dialogs.None)\n\n    private val _dismissSheet = MutableStateFlow(false)\n    val dismissSheet = _dismissSheet.asStateFlow()\n\n    private val _seekText = MutableStateFlow<String?>(null)\n    val seekText = _seekText.asStateFlow()\n    private val _doubleTapSeekAmount = MutableStateFlow(0)\n    val doubleTapSeekAmount = _doubleTapSeekAmount.asStateFlow()\n    private val _isSeekingForwards = MutableStateFlow(false)\n    val isSeekingForwards = _isSeekingForwards.asStateFlow()\n\n    private var timerJob: Job? = null\n    private val _remainingTime = MutableStateFlow(0)\n    val remainingTime = _remainingTime.asStateFlow()\n\n    val cachePath: String = activity.cacheDir.path\n\n    private val _customButtons = MutableStateFlow<CustomButtonFetchState>(CustomButtonFetchState.Loading)\n    val customButtons = _customButtons.asStateFlow()\n\n    private val _primaryButtonTitle = MutableStateFlow(\"\")\n    val primaryButtonTitle = _primaryButtonTitle.asStateFlow()\n\n    private val _primaryButton = MutableStateFlow<CustomButton?>(null)\n    val primaryButton = _primaryButton.asStateFlow()\n\n    init {\n        viewModelScope.launchIO {\n            try {\n                val buttons = getCustomButtons.getAll()\n                buttons.firstOrNull { it.isFavorite }?.let {\n                    _primaryButton.update { _ -> it }\n                    // If the button text is not empty, it has been set buy a lua script in which\n                    // case we don't want to override it\n                    if (_primaryButtonTitle.value.isEmpty()) {\n                        setPrimaryCustomButtonTitle(it)\n                    }\n                }\n                activity.setupCustomButtons(buttons)\n                _customButtons.update { _ -> CustomButtonFetchState.Success(buttons.toImmutableList()) }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e)\n                _customButtons.update { _ -> CustomButtonFetchState.Error(e.message ?: \"Unable to fetch buttons\") }\n            }\n        }\n    }\n\n    /**\n     * Starts a sleep timer/cancels the current timer if [seconds] is less than 1.\n     */\n    fun startTimer(seconds: Int) {\n        timerJob?.cancel()\n        _remainingTime.value = seconds\n        if (seconds < 1) return\n        timerJob = viewModelScope.launch {\n            for (time in seconds downTo 0) {\n                _remainingTime.value = time\n                delay(1000)\n            }\n            pause()\n            withUIContext { Injekt.get<Application>().toast(AYMR.strings.toast_sleep_timer_ended) }\n        }\n    }\n\n    fun isEpisodeOnline(): Boolean? {\n        val anime = currentAnime.value ?: return null\n        val episode = currentEpisode.value ?: return null\n        val source = currentSource.value ?: return null\n        return source is AnimeHttpSource &&\n            !EpisodeLoader.isDownload(\n                episode.toDomainEpisode()!!,\n                anime,\n            )\n    }\n\n    fun updateIsLoadingEpisode(value: Boolean) {\n        _isLoadingEpisode.update { _ -> value }\n    }\n\n    private fun updateEpisodeList(episodeList: List<Episode>) {\n        _currentPlaylist.update { _ -> filterEpisodeList(episodeList) }\n    }\n\n    fun getDecoder() {\n        _currentDecoder.update { getDecoderFromValue(activity.player.hwdecActive) }\n    }\n\n    fun updateDecoder(decoder: Decoder) {\n        MPVLib.setPropertyString(\"hwdec\", decoder.value)\n    }\n\n    val getTrackLanguage: (Int) -> String = {\n        if (it != -1) {\n            MPVLib.getPropertyString(\"track-list/$it/lang\") ?: \"\"\n        } else {\n            activity.stringResource(MR.strings.off)\n        }\n    }\n    val getTrackTitle: (Int) -> String = {\n        if (it != -1) {\n            MPVLib.getPropertyString(\"track-list/$it/title\") ?: \"\"\n        } else {\n            activity.stringResource(MR.strings.off)\n        }\n    }\n    val getTrackMPVId: (Int) -> Int = {\n        if (it != -1) {\n            MPVLib.getPropertyInt(\"track-list/$it/id\")\n        } else {\n            -1\n        }\n    }\n    val getTrackType: (Int) -> String? = {\n        MPVLib.getPropertyString(\"track-list/$it/type\")\n    }\n\n    private var trackLoadingJob: Job? = null\n    fun loadTracks() {\n        trackLoadingJob?.cancel()\n        trackLoadingJob = viewModelScope.launch {\n            val possibleTrackTypes = listOf(\"audio\", \"sub\")\n            val subTracks = mutableListOf<VideoTrack>()\n            val audioTracks = mutableListOf(\n                VideoTrack(-1, activity.stringResource(MR.strings.off), null),\n            )\n            try {\n                val tracksCount = MPVLib.getPropertyInt(\"track-list/count\") ?: 0\n                for (i in 0..<tracksCount) {\n                    val type = getTrackType(i)\n                    if (!possibleTrackTypes.contains(type) || type == null) continue\n                    when (type) {\n                        \"sub\" -> subTracks.add(VideoTrack(getTrackMPVId(i), getTrackTitle(i), getTrackLanguage(i)))\n                        \"audio\" -> audioTracks.add(VideoTrack(getTrackMPVId(i), getTrackTitle(i), getTrackLanguage(i)))\n                        else -> error(\"Unrecognized track type\")\n                    }\n                }\n            } catch (e: NullPointerException) {\n                logcat(LogPriority.ERROR) { \"Couldn't load tracks, probably cause mpv was destroyed\" }\n                return@launch\n            }\n            _subtitleTracks.update { subTracks }\n            _audioTracks.update { audioTracks }\n\n            if (!isLoadingTracks.value) {\n                onFinishLoadingTracks()\n            }\n        }\n    }\n\n    /**\n     * When all subtitle/audio tracks are loaded, select the preferred one based on preferences,\n     * or select the first one in the list if trackSelect fails.\n     */\n    fun onFinishLoadingTracks() {\n        val preferredSubtitle = trackSelect.getPreferredTrackIndex(subtitleTracks.value)\n        (preferredSubtitle ?: subtitleTracks.value.firstOrNull())?.let {\n            activity.player.sid = it.id\n            activity.player.secondarySid = -1\n        }\n\n        val preferredAudio = trackSelect.getPreferredTrackIndex(audioTracks.value, subtitle = false)\n        (preferredAudio ?: audioTracks.value.getOrNull(1))?.let {\n            activity.player.aid = it.id\n        }\n\n        isLoadingTracks.update { _ -> true }\n        updateIsLoadingEpisode(false)\n        setPausedState()\n    }\n\n    @Immutable\n    data class VideoTrack(\n        val id: Int,\n        val name: String,\n        val language: String?,\n    )\n\n    fun loadChapters() {\n        val chapters = mutableListOf<IndexedSegment>()\n        val count = MPVLib.getPropertyInt(\"chapter-list/count\")!!\n        for (i in 0 until count) {\n            val title = MPVLib.getPropertyString(\"chapter-list/$i/title\")\n            val time = MPVLib.getPropertyInt(\"chapter-list/$i/time\")!!\n            chapters.add(\n                IndexedSegment(\n                    name = title,\n                    start = time.toFloat(),\n                    index = 0,\n                ),\n            )\n        }\n        updateChapters(chapters.sortedBy { it.start })\n    }\n\n    fun updateChapters(chapters: List<IndexedSegment>) {\n        _chapters.update { _ -> chapters }\n    }\n\n    fun selectChapter(index: Int) {\n        val time = chapters.value[index].start\n        seekTo(time.toInt())\n    }\n\n    fun updateChapter(index: Long) {\n        if (chapters.value.isEmpty() || index == -1L) return\n        _currentChapter.update { chapters.value.getOrNull(index.toInt()) ?: return }\n    }\n\n    fun addAudio(uri: Uri) {\n        val url = uri.toString()\n        val isContentUri = url.startsWith(\"content://\")\n        val path = (if (isContentUri) uri.openContentFd(activity) else url)\n            ?: return\n        val name = if (isContentUri) uri.getFileName(activity) else null\n        if (name == null) {\n            MPVLib.command(arrayOf(\"audio-add\", path, \"cached\"))\n        } else {\n            MPVLib.command(arrayOf(\"audio-add\", path, \"cached\", name))\n        }\n    }\n\n    fun selectAudio(id: Int) {\n        activity.player.aid = id\n    }\n\n    fun updateAudio(id: Int) {\n        _selectedAudio.update { id }\n    }\n\n    fun addSubtitle(uri: Uri) {\n        val url = uri.toString()\n        val isContentUri = url.startsWith(\"content://\")\n        val path = (if (isContentUri) uri.openContentFd(activity) else url)\n            ?: return\n        val name = if (isContentUri) uri.getFileName(activity) else null\n        if (name == null) {\n            MPVLib.command(arrayOf(\"sub-add\", path, \"cached\"))\n        } else {\n            MPVLib.command(arrayOf(\"sub-add\", path, \"cached\", name))\n        }\n    }\n\n    fun selectSub(id: Int) {\n        val selectedSubs = selectedSubtitles.value\n        _selectedSubtitles.update {\n            when (id) {\n                selectedSubs.first -> Pair(selectedSubs.second, -1)\n                selectedSubs.second -> Pair(selectedSubs.first, -1)\n                else -> {\n                    if (selectedSubs.first != -1) {\n                        Pair(selectedSubs.first, id)\n                    } else {\n                        Pair(id, -1)\n                    }\n                }\n            }\n        }\n        activity.player.secondarySid = _selectedSubtitles.value.second\n        activity.player.sid = _selectedSubtitles.value.first\n    }\n\n    fun updateSubtitle(sid: Int, secondarySid: Int) {\n        _selectedSubtitles.update { Pair(sid, secondarySid) }\n    }\n\n    fun updatePlayBackPos(pos: Float) {\n        onSecondReached(pos.toInt(), duration.value.toInt())\n        _pos.update { pos }\n    }\n\n    fun updateReadAhead(value: Long) {\n        _readAhead.update { value.toFloat() }\n    }\n\n    private fun updatePausedState() {\n        if (pausedState.value == null) {\n            _pausedState.update { _ -> paused.value }\n        }\n    }\n\n    private fun setPausedState() {\n        pausedState.value?.let {\n            if (it) {\n                pause()\n            } else {\n                unpause()\n            }\n\n            _pausedState.update { _ -> null }\n        }\n    }\n\n    fun pauseUnpause() {\n        if (paused.value) {\n            unpause()\n        } else {\n            pause()\n        }\n    }\n\n    fun pause() {\n        activity.player.paused = true\n        _paused.update { true }\n        runCatching {\n            activity.setPictureInPictureParams(activity.createPipParams())\n        }\n    }\n\n    fun unpause() {\n        activity.player.paused = false\n        _paused.update { false }\n    }\n\n    private val showStatusBar = playerPreferences.showSystemStatusBar().get()\n    fun showControls() {\n        if (sheetShown.value != Sheets.None ||\n            panelShown.value != Panels.None ||\n            dialogShown.value != Dialogs.None\n        ) {\n            return\n        }\n        if (showStatusBar) {\n            activity.windowInsetsController.show(WindowInsetsCompat.Type.statusBars())\n        }\n        _controlsShown.update { true }\n    }\n\n    fun hideControls() {\n        activity.windowInsetsController.hide(WindowInsetsCompat.Type.statusBars())\n        _controlsShown.update { false }\n    }\n\n    fun hideSeekBar() {\n        _seekBarShown.update { false }\n    }\n\n    fun showSeekBar() {\n        if (sheetShown.value != Sheets.None) return\n        _seekBarShown.update { true }\n    }\n\n    fun lockControls() {\n        _areControlsLocked.update { true }\n    }\n\n    fun unlockControls() {\n        _areControlsLocked.update { false }\n    }\n\n    fun dismissSheet() {\n        _dismissSheet.update { _ -> true }\n    }\n\n    private fun resetDismissSheet() {\n        _dismissSheet.update { _ -> false }\n    }\n\n    fun showSheet(sheet: Sheets) {\n        sheetShown.update { sheet }\n        if (sheet == Sheets.None) {\n            resetDismissSheet()\n            showControls()\n        } else {\n            hideControls()\n            panelShown.update { Panels.None }\n            dialogShown.update { Dialogs.None }\n        }\n    }\n\n    fun showPanel(panel: Panels) {\n        panelShown.update { panel }\n        if (panel == Panels.None) {\n            showControls()\n        } else {\n            hideControls()\n            sheetShown.update { Sheets.None }\n            dialogShown.update { Dialogs.None }\n        }\n    }\n\n    fun showDialog(dialog: Dialogs) {\n        dialogShown.update { dialog }\n        if (dialog == Dialogs.None) {\n            showControls()\n        } else {\n            hideControls()\n            sheetShown.update { Sheets.None }\n            panelShown.update { Panels.None }\n        }\n    }\n\n    fun seekBy(offset: Int, precise: Boolean = false) {\n        MPVLib.command(arrayOf(\"seek\", offset.toString(), if (precise) \"relative+exact\" else \"relative\"))\n    }\n\n    fun seekTo(position: Int, precise: Boolean = true) {\n        if (position !in 0..(activity.player.duration ?: 0)) return\n        MPVLib.command(arrayOf(\"seek\", position.toString(), if (precise) \"absolute\" else \"absolute+keyframes\"))\n    }\n\n    fun changeBrightnessTo(\n        brightness: Float,\n    ) {\n        currentBrightness.update { _ -> brightness.coerceIn(-0.75f, 1f) }\n        activity.window.attributes = activity.window.attributes.apply {\n            screenBrightness = brightness.coerceIn(0f, 1f)\n        }\n    }\n\n    fun displayBrightnessSlider() {\n        isBrightnessSliderShown.update { true }\n    }\n\n    val maxVolume = activity.audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)\n    fun changeVolumeBy(change: Int) {\n        val mpvVolume = MPVLib.getPropertyInt(\"volume\")\n        if (volumeBoostCap > 0 && currentVolume.value == maxVolume) {\n            if (mpvVolume == 100 && change < 0) changeVolumeTo(currentVolume.value + change)\n            val finalMPVVolume = (mpvVolume + change).coerceAtLeast(100)\n            if (finalMPVVolume in 100..volumeBoostCap + 100) {\n                changeMPVVolumeTo(finalMPVVolume)\n                return\n            }\n        }\n        changeVolumeTo(currentVolume.value + change)\n    }\n\n    fun changeVolumeTo(volume: Int) {\n        val newVolume = volume.coerceIn(0..maxVolume)\n        activity.audioManager.setStreamVolume(\n            AudioManager.STREAM_MUSIC,\n            newVolume,\n            0,\n        )\n        currentVolume.update { newVolume }\n    }\n\n    fun changeMPVVolumeTo(volume: Int) {\n        MPVLib.setPropertyInt(\"volume\", volume)\n    }\n\n    fun setMPVVolume(volume: Int) {\n        if (volume != currentMPVVolume.value) displayVolumeSlider()\n        currentMPVVolume.update { volume }\n    }\n\n    fun displayVolumeSlider() {\n        isVolumeSliderShown.update { true }\n    }\n\n    fun setAutoPlay(value: Boolean) {\n        val textRes = if (value) {\n            AYMR.strings.enable_auto_play\n        } else {\n            AYMR.strings.disable_auto_play\n        }\n        playerUpdate.update { PlayerUpdates.ShowTextResource(textRes) }\n        playerPreferences.autoplayEnabled().set(value)\n    }\n\n    @Suppress(\"DEPRECATION\")\n    fun changeVideoAspect(aspect: VideoAspect) {\n        var ratio = -1.0\n        var pan = 1.0\n        when (aspect) {\n            VideoAspect.Crop -> {\n                pan = 1.0\n            }\n\n            VideoAspect.Fit -> {\n                pan = 0.0\n                MPVLib.setPropertyDouble(\"panscan\", 0.0)\n            }\n\n            VideoAspect.Stretch -> {\n                val dm = DisplayMetrics()\n                activity.windowManager.defaultDisplay.getRealMetrics(dm)\n                ratio = dm.widthPixels / dm.heightPixels.toDouble()\n                pan = 0.0\n            }\n        }\n        MPVLib.setPropertyDouble(\"panscan\", pan)\n        MPVLib.setPropertyDouble(\"video-aspect-override\", ratio)\n        playerPreferences.aspectState().set(aspect)\n        playerUpdate.update { PlayerUpdates.AspectRatio }\n    }\n\n    fun cycleScreenRotations() {\n        activity.requestedOrientation = when (activity.requestedOrientation) {\n            ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,\n            ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE,\n            ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE,\n            -> {\n                playerPreferences.defaultPlayerOrientationType().set(PlayerOrientation.SensorPortrait)\n                ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT\n            }\n\n            else -> {\n                playerPreferences.defaultPlayerOrientationType().set(PlayerOrientation.SensorLandscape)\n                ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE\n            }\n        }\n    }\n\n    fun handleLuaInvocation(property: String, value: String) {\n        val data = value\n            .removePrefix(\"\\\"\")\n            .removeSuffix(\"\\\"\")\n            .ifEmpty { return }\n\n        when (property.substringAfterLast(\"/\")) {\n            \"show_text\" -> playerUpdate.update { PlayerUpdates.ShowText(data) }\n            \"toggle_ui\" -> {\n                when (data) {\n                    \"show\" -> showControls()\n                    \"toggle\" -> {\n                        if (controlsShown.value) hideControls() else showControls()\n                    }\n                    \"hide\" -> {\n                        sheetShown.update { Sheets.None }\n                        panelShown.update { Panels.None }\n                        dialogShown.update { Dialogs.None }\n                        hideControls()\n                    }\n                }\n            }\n            \"show_panel\" -> {\n                when (data) {\n                    \"subtitle_settings\" -> showPanel(Panels.SubtitleSettings)\n                    \"subtitle_delay\" -> showPanel(Panels.SubtitleDelay)\n                    \"audio_delay\" -> showPanel(Panels.AudioDelay)\n                    \"video_filters\" -> showPanel(Panels.VideoFilters)\n                }\n            }\n            \"set_button_title\" -> {\n                _primaryButtonTitle.update { _ -> data }\n            }\n            \"reset_button_title\" -> {\n                _customButtons.value.getButtons().firstOrNull { it.isFavorite }?.let {\n                    setPrimaryCustomButtonTitle(it)\n                }\n            }\n            \"switch_episode\" -> {\n                when (data) {\n                    \"n\" -> changeEpisode(false)\n                    \"p\" -> changeEpisode(true)\n                }\n            }\n            \"launch_int_picker\" -> {\n                val (title, nameFormat, start, stop, step, pickerProperty) = data.split(\"|\")\n                val defaultValue = MPVLib.getPropertyInt(pickerProperty)\n                showDialog(\n                    Dialogs.IntegerPicker(\n                        defaultValue = defaultValue,\n                        minValue = start.toInt(),\n                        maxValue = stop.toInt(),\n                        step = step.toInt(),\n                        nameFormat = nameFormat,\n                        title = title,\n                        onChange = { MPVLib.setPropertyInt(pickerProperty, it) },\n                        onDismissRequest = { showDialog(Dialogs.None) },\n                    ),\n                )\n            }\n            \"pause\" -> {\n                when (data) {\n                    \"pause\" -> pause()\n                    \"unpause\" -> unpause()\n                    \"pauseunpause\" -> pauseUnpause()\n                }\n            }\n            \"seek_to_with_text\" -> {\n                val (seekValue, text) = data.split(\"|\", limit = 2)\n                seekToWithText(seekValue.toInt(), text)\n            }\n            \"seek_by_with_text\" -> {\n                val (seekValue, text) = data.split(\"|\", limit = 2)\n                seekByWithText(seekValue.toInt(), text)\n            }\n            \"seek_by\" -> seekByWithText(data.toInt(), null)\n            \"seek_to\" -> seekToWithText(data.toInt(), null)\n            \"toggle_button\" -> {\n                fun showButton() {\n                    if (_primaryButton.value == null) {\n                        _primaryButton.update {\n                            customButtons.value.getButtons().firstOrNull { it.isFavorite }\n                        }\n                    }\n                }\n\n                when (data) {\n                    \"show\" -> showButton()\n                    \"hide\" -> _primaryButton.update { null }\n                    \"toggle\" -> if (_primaryButton.value == null) showButton() else _primaryButton.update { null }\n                }\n            }\n\n            \"software_keyboard\" -> when (data) {\n                \"show\" -> forceShowSoftwareKeyboard()\n                \"hide\" -> forceHideSoftwareKeyboard()\n                \"toggle\" -> if (inputMethodManager.isActive) {\n                    forceHideSoftwareKeyboard()\n                } else {\n                    forceShowSoftwareKeyboard()\n                }\n            }\n        }\n\n        MPVLib.setPropertyString(property, \"\")\n    }\n\n    private operator fun <T> List<T>.component6(): T = get(5)\n\n    private val inputMethodManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager\n    private fun forceShowSoftwareKeyboard() {\n        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)\n    }\n\n    private fun forceHideSoftwareKeyboard() {\n        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0)\n    }\n\n    private val doubleTapToSeekDuration = gesturePreferences.skipLengthPreference().get()\n    private val preciseSeek = gesturePreferences.playerSmoothSeek().get()\n    private val showSeekBar = gesturePreferences.showSeekBar().get()\n\n    private fun seekToWithText(seekValue: Int, text: String?) {\n        _isSeekingForwards.value = seekValue > 0\n        _doubleTapSeekAmount.value = seekValue - pos.value.toInt()\n        _seekText.update { _ -> text }\n        seekTo(seekValue, preciseSeek)\n        if (showSeekBar) showSeekBar()\n    }\n\n    private fun seekByWithText(value: Int, text: String?) {\n        _doubleTapSeekAmount.update { if (value < 0 && it < 0 || pos.value + value > duration.value) 0 else it + value }\n        _seekText.update { text }\n        _isSeekingForwards.value = value > 0\n        seekBy(value, preciseSeek)\n        if (showSeekBar) showSeekBar()\n    }\n\n    fun updateSeekAmount(amount: Int) {\n        _doubleTapSeekAmount.update { _ -> amount }\n    }\n\n    fun updateSeekText(value: String?) {\n        _seekText.update { _ -> value }\n    }\n\n    fun leftSeek() {\n        if (pos.value > 0) {\n            _doubleTapSeekAmount.value -= doubleTapToSeekDuration\n        }\n        _isSeekingForwards.value = false\n        seekBy(-doubleTapToSeekDuration, preciseSeek)\n        if (showSeekBar) showSeekBar()\n    }\n\n    fun rightSeek() {\n        if (pos.value < duration.value) {\n            _doubleTapSeekAmount.value += doubleTapToSeekDuration\n        }\n        _isSeekingForwards.value = true\n        seekBy(doubleTapToSeekDuration, preciseSeek)\n        if (showSeekBar) showSeekBar()\n    }\n\n    fun resetHosterState() {\n        _pausedState.update { _ -> false }\n        _hosterState.update { _ -> emptyList() }\n        _hosterList.update { _ -> emptyList() }\n        _hosterExpandedList.update { _ -> emptyList() }\n        _selectedHosterVideoIndex.update { _ -> Pair(-1, -1) }\n    }\n\n    fun changeEpisode(previous: Boolean, autoPlay: Boolean = false) {\n        if (previous && !hasPreviousEpisode.value) {\n            activity.showToast(activity.stringResource(AYMR.strings.no_prev_episode))\n            return\n        }\n\n        if (!previous && !hasNextEpisode.value) {\n            activity.showToast(activity.stringResource(AYMR.strings.no_next_episode))\n            return\n        }\n\n        activity.changeEpisode(\n            episodeId = getAdjacentEpisodeId(previous = previous),\n            autoPlay = autoPlay,\n        )\n    }\n\n    fun handleLeftDoubleTap() {\n        when (gesturePreferences.leftDoubleTapGesture().get()) {\n            SingleActionGesture.Seek -> {\n                leftSeek()\n            }\n            SingleActionGesture.PlayPause -> {\n                pauseUnpause()\n            }\n            SingleActionGesture.Custom -> {\n                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.DoubleTapLeft.keyCode))\n            }\n            SingleActionGesture.None -> {}\n            SingleActionGesture.Switch -> changeEpisode(true)\n        }\n    }\n\n    fun handleCenterDoubleTap() {\n        when (gesturePreferences.centerDoubleTapGesture().get()) {\n            SingleActionGesture.PlayPause -> {\n                pauseUnpause()\n            }\n            SingleActionGesture.Custom -> {\n                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.DoubleTapCenter.keyCode))\n            }\n            SingleActionGesture.Seek -> {}\n            SingleActionGesture.None -> {}\n            SingleActionGesture.Switch -> {}\n        }\n    }\n\n    fun handleRightDoubleTap() {\n        when (gesturePreferences.rightDoubleTapGesture().get()) {\n            SingleActionGesture.Seek -> {\n                rightSeek()\n            }\n            SingleActionGesture.PlayPause -> {\n                pauseUnpause()\n            }\n            SingleActionGesture.Custom -> {\n                MPVLib.command(arrayOf(\"keypress\", CustomKeyCodes.DoubleTapRight.keyCode))\n            }\n            SingleActionGesture.None -> {}\n            SingleActionGesture.Switch -> changeEpisode(false)\n        }\n    }\n\n    override fun onCleared() {\n        if (currentEpisode.value != null) {\n            saveWatchingProgress(currentEpisode.value!!)\n            episodeToDownload?.let {\n                downloadManager.addDownloadsToStartOfQueue(listOf(it))\n            }\n        }\n    }\n\n    // ====== OLD ======\n\n    private val eventChannel = Channel<Event>()\n    val eventFlow = eventChannel.receiveAsFlow()\n\n    private val incognitoMode: Boolean by lazy { getIncognitoState.await(currentAnime.value?.source) }\n    private val downloadAheadAmount = downloadPreferences.autoDownloadWhileWatching().get()\n\n    internal val relativeTime = uiPreferences.relativeTime().get()\n    internal val dateFormat = UiPreferences.dateFormat(uiPreferences.dateFormat().get())\n\n    /**\n     * The position in the current video. Used to restore from process kill.\n     */\n    private var episodePosition = savedState.get<Long>(\"episode_position\")\n        set(value) {\n            savedState[\"episode_position\"] = value\n            field = value\n        }\n\n    /**\n     * The current video's quality index. Used to restore from process kill.\n     */\n    private var qualityIndex = savedState.get<Pair<Int, Int>>(\"quality_index\") ?: Pair(-1, -1)\n        set(value) {\n            savedState[\"quality_index\"] = value\n            field = value\n        }\n\n    /**\n     * The episode id of the currently loaded episode. Used to restore from process kill.\n     */\n    private var episodeId = savedState.get<Long>(\"episode_id\") ?: -1L\n        set(value) {\n            savedState[\"episode_id\"] = value\n            field = value\n        }\n\n    private var episodeToDownload: AnimeDownload? = null\n\n    private fun filterEpisodeList(episodes: List<Episode>): List<Episode> {\n        val anime = currentAnime.value ?: return episodes\n        val selectedEpisode = episodes.find { it.id == episodeId }\n            ?: error(\"Requested episode of id $episodeId not found in episode list\")\n\n        val episodesForPlayer = episodes.filterNot {\n            anime.unseenFilterRaw == Anime.EPISODE_SHOW_SEEN &&\n                !it.seen ||\n                anime.unseenFilterRaw == Anime.EPISODE_SHOW_UNSEEN &&\n                it.seen ||\n                anime.downloadedFilterRaw == Anime.EPISODE_SHOW_DOWNLOADED &&\n                !downloadManager.isEpisodeDownloaded(\n                    it.name,\n                    it.scanlator,\n                    anime.title,\n                    anime.source,\n                ) ||\n                anime.downloadedFilterRaw == Anime.EPISODE_SHOW_NOT_DOWNLOADED &&\n                downloadManager.isEpisodeDownloaded(\n                    it.name,\n                    it.scanlator,\n                    anime.title,\n                    anime.source,\n                ) ||\n                anime.bookmarkedFilterRaw == Anime.EPISODE_SHOW_BOOKMARKED &&\n                !it.bookmark ||\n                anime.bookmarkedFilterRaw == Anime.EPISODE_SHOW_NOT_BOOKMARKED &&\n                it.bookmark ||\n                anime.fillermarkedFilterRaw == Anime.EPISODE_SHOW_FILLERMARKED &&\n                !it.fillermark ||\n                anime.fillermarkedFilterRaw == Anime.EPISODE_SHOW_NOT_FILLERMARKED &&\n                it.fillermark\n        }.toMutableList()\n\n        if (episodesForPlayer.all { it.id != episodeId }) {\n            episodesForPlayer += listOf(selectedEpisode)\n        }\n\n        return episodesForPlayer\n    }\n\n    fun getCurrentEpisodeIndex(): Int {\n        return currentPlaylist.value.indexOfFirst { currentEpisode.value?.id == it.id }\n    }\n\n    private fun getAdjacentEpisodeId(previous: Boolean): Long {\n        val newIndex = if (previous) getCurrentEpisodeIndex() - 1 else getCurrentEpisodeIndex() + 1\n\n        return when {\n            previous && getCurrentEpisodeIndex() == 0 -> -1L\n            !previous && currentPlaylist.value.lastIndex == getCurrentEpisodeIndex() -> -1L\n            else -> currentPlaylist.value.getOrNull(newIndex)?.id ?: -1L\n        }\n    }\n\n    fun updateHasNextEpisode(value: Boolean) {\n        _hasNextEpisode.update { _ -> value }\n    }\n\n    fun updateHasPreviousEpisode(value: Boolean) {\n        _hasPreviousEpisode.update { _ -> value }\n    }\n\n    fun showEpisodeListDialog() {\n        if (currentAnime.value != null) {\n            showDialog(Dialogs.EpisodeList)\n        }\n    }\n\n    /**\n     * Called when the activity is saved and not changing configurations. It updates the database\n     * to persist the current progress of the active episode.\n     */\n    fun onSaveInstanceStateNonConfigurationChange() {\n        val currentEpisode = currentEpisode.value ?: return\n        viewModelScope.launchNonCancellable {\n            saveEpisodeProgress(currentEpisode)\n        }\n    }\n\n    // ====== Initialize anime, episode, hoster, and video list ======\n\n    fun updateIsLoadingHosters(value: Boolean) {\n        _isLoadingHosters.update { _ -> value }\n    }\n\n    /**\n     * Whether this viewModel is initialized with the correct episode.\n     */\n    private fun needsInit(animeId: Long, episodeId: Long): Boolean {\n        return currentAnime.value?.id != animeId || currentEpisode.value?.id != episodeId\n    }\n\n    data class InitResult(\n        val hosterList: List<Hoster>?,\n        val videoIndex: Pair<Int, Int>,\n        val position: Long?,\n    )\n\n    private var currentHosterList: List<Hoster>? = null\n\n    class ExceptionWithStringResource(\n        message: String,\n        val stringResource: StringResource,\n    ) : Exception(message)\n\n    suspend fun init(\n        animeId: Long,\n        initialEpisodeId: Long,\n        hostList: String,\n        hostIndex: Int,\n        vidIndex: Int,\n    ): Pair<InitResult, Result<Boolean>> {\n        val defaultResult = InitResult(currentHosterList, qualityIndex, null)\n        if (!needsInit(animeId, initialEpisodeId)) return Pair(defaultResult, Result.success(true))\n        return try {\n            val anime = getAnime.await(animeId)\n            if (anime != null) {\n                _currentAnime.update { _ -> anime }\n                animeTitle.update { _ -> anime.title }\n                sourceManager.isInitialized.first { it }\n                episodeId = initialEpisodeId\n\n                checkTrackers(anime)\n\n                updateEpisodeList(initEpisodeList(anime))\n\n                val episode = currentPlaylist.value.first { it.id == episodeId }\n                val source = sourceManager.getOrStub(anime.source)\n\n                _currentEpisode.update { _ -> episode }\n                _currentSource.update { _ -> source }\n\n                updateEpisode(episode)\n\n                _hasPreviousEpisode.update { _ -> getCurrentEpisodeIndex() != 0 }\n                _hasNextEpisode.update { _ -> getCurrentEpisodeIndex() != currentPlaylist.value.size - 1 }\n\n                // Write to mpv table\n                MPVLib.setPropertyString(\"user-data/current-anime/anime-title\", anime.title)\n                MPVLib.setPropertyInt(\"user-data/current-anime/intro-length\", getAnimeSkipIntroLength())\n                MPVLib.setPropertyString(\n                    \"user-data/current-anime/category\",\n                    getAnimeCategories.await(anime.id).joinToString {\n                        it.name\n                    },\n                )\n\n                val currentEp = currentEpisode.value\n                    ?: throw ExceptionWithStringResource(\"No episode loaded\", AYMR.strings.no_episode_loaded)\n                if (hostList.isNotBlank()) {\n                    currentHosterList = hostList.toHosterList().ifEmpty {\n                        currentHosterList = null\n                        throw ExceptionWithStringResource(\n                            \"Hoster selected from empty list\",\n                            AYMR.strings.select_hoster_from_empty_list,\n                        )\n                    }\n                    qualityIndex = Pair(hostIndex, vidIndex)\n                } else {\n                    EpisodeLoader.getHosters(currentEp.toDomainEpisode()!!, anime, source)\n                        .takeIf { it.isNotEmpty() }\n                        ?.also { currentHosterList = it }\n                        ?: run {\n                            currentHosterList = null\n                            throw ExceptionWithStringResource(\"Hoster list is empty\", AYMR.strings.no_hosters)\n                        }\n                }\n\n                val result = InitResult(\n                    hosterList = currentHosterList,\n                    videoIndex = qualityIndex,\n                    position = episodePosition,\n                )\n                Pair(result, Result.success(true))\n            } else {\n                // Unlikely but okay\n                Pair(defaultResult, Result.success(false))\n            }\n        } catch (e: Throwable) {\n            Pair(defaultResult, Result.failure(e))\n        }\n    }\n\n    private fun updateEpisode(episode: Episode) {\n        mediaTitle.update { _ -> episode.name }\n        _isEpisodeOnline.update { _ -> isEpisodeOnline() == true }\n        MPVLib.setPropertyDouble(\"user-data/current-anime/episode-number\", episode.episode_number.toDouble())\n    }\n\n    private fun initEpisodeList(anime: Anime): List<Episode> {\n        val episodes = runBlocking { getEpisodesByAnimeId.await(anime.id) }\n\n        return episodes\n            .sortedWith(getEpisodeSort(anime, sortDescending = false))\n            .run {\n                if (basePreferences.downloadedOnly().get()) {\n                    filterDownloadedEpisodes(anime)\n                } else {\n                    this\n                }\n            }\n            .map { it.toDbEpisode() }\n    }\n\n    private var hasTrackers: Boolean = false\n    private val checkTrackers: (Anime) -> Unit = { anime ->\n        val tracks = runBlocking { getTracks.await(anime.id) }\n        hasTrackers = tracks.isNotEmpty()\n    }\n\n    private var getHosterVideoLinksJob: Job? = null\n\n    fun cancelHosterVideoLinksJob() {\n        getHosterVideoLinksJob?.cancel()\n    }\n\n    /**\n     * Set the video list for hosters.\n     */\n    fun loadHosters(source: AnimeSource, hosterList: List<Hoster>, hosterIndex: Int, videoIndex: Int) {\n        val hasFoundPreferredVideo = AtomicBoolean(false)\n\n        _hosterList.update { _ -> hosterList }\n        _hosterExpandedList.update { _ ->\n            List(hosterList.size) { true }\n        }\n\n        getHosterVideoLinksJob?.cancel()\n        getHosterVideoLinksJob = viewModelScope.launchIO {\n            _hosterState.update { _ ->\n                hosterList.map { hoster ->\n                    if (hoster.lazy) {\n                        HosterState.Idle(hoster.hosterName)\n                    } else if (hoster.videoList == null) {\n                        HosterState.Loading(hoster.hosterName)\n                    } else {\n                        val videoList = hoster.videoList!!\n                        HosterState.Ready(\n                            hoster.hosterName,\n                            videoList,\n                            List(videoList.size) { Video.State.QUEUE },\n                        )\n                    }\n                }\n            }\n\n            try {\n                coroutineScope {\n                    hosterList.mapIndexed { hosterIdx, hoster ->\n                        async {\n                            val hosterState = EpisodeLoader.loadHosterVideos(source, hoster)\n\n                            _hosterState.updateAt(hosterIdx, hosterState)\n\n                            if (hosterState is HosterState.Ready) {\n                                if (hosterIdx == hosterIndex) {\n                                    hosterState.videoList.getOrNull(videoIndex)?.let {\n                                        hasFoundPreferredVideo.set(true)\n                                        val success = loadVideo(source, it, hosterIndex, videoIndex)\n                                        if (!success) {\n                                            hasFoundPreferredVideo.set(false)\n                                        }\n                                    }\n                                }\n\n                                val prefIndex = hosterState.videoList.indexOfFirst { it.preferred }\n                                if (prefIndex != -1 && hosterIndex == -1) {\n                                    if (hasFoundPreferredVideo.compareAndSet(false, true)) {\n                                        if (selectedHosterVideoIndex.value == Pair(-1, -1)) {\n                                            val success =\n                                                loadVideo(\n                                                    source,\n                                                    hosterState.videoList[prefIndex],\n                                                    hosterIdx,\n                                                    prefIndex,\n                                                )\n                                            if (!success) {\n                                                hasFoundPreferredVideo.set(false)\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }.awaitAll()\n\n                    if (hasFoundPreferredVideo.compareAndSet(false, true)) {\n                        val (hosterIdx, videoIdx) = HosterLoader.selectBestVideo(hosterState.value)\n                        if (hosterIdx == -1) {\n                            throw ExceptionWithStringResource(\"No available videos\", AYMR.strings.no_available_videos)\n                        }\n\n                        val video = (hosterState.value[hosterIdx] as HosterState.Ready).videoList[videoIdx]\n\n                        loadVideo(source, video, hosterIdx, videoIdx)\n                    }\n                }\n            } catch (e: CancellationException) {\n                _hosterState.update { _ ->\n                    hosterList.map { HosterState.Idle(it.hosterName) }\n                }\n\n                throw e\n            }\n        }\n    }\n\n    private suspend fun loadVideo(source: AnimeSource?, video: Video, hosterIndex: Int, videoIndex: Int): Boolean {\n        val selectedHosterState = (_hosterState.value[hosterIndex] as? HosterState.Ready) ?: return false\n        updateIsLoadingEpisode(true)\n\n        val oldSelectedIndex = _selectedHosterVideoIndex.value\n        _selectedHosterVideoIndex.update { _ -> Pair(hosterIndex, videoIndex) }\n\n        _hosterState.updateAt(\n            hosterIndex,\n            selectedHosterState.getChangedAt(videoIndex, video, Video.State.LOAD_VIDEO),\n        )\n\n        // Pause until everything has loaded\n        updatePausedState()\n        pause()\n\n        val resolvedVideo = if (selectedHosterState.videoState[videoIndex] != Video.State.READY) {\n            HosterLoader.getResolvedVideo(source, video)\n        } else {\n            video\n        }\n\n        if (resolvedVideo == null || resolvedVideo.videoUrl.isEmpty()) {\n            if (currentVideo.value == null) {\n                _hosterState.updateAt(\n                    hosterIndex,\n                    selectedHosterState.getChangedAt(videoIndex, video, Video.State.ERROR),\n                )\n\n                val (newHosterIdx, newVideoIdx) = HosterLoader.selectBestVideo(hosterState.value)\n                if (newHosterIdx == -1) {\n                    if (_hosterState.value.any { it is HosterState.Loading }) {\n                        _selectedHosterVideoIndex.update { _ -> Pair(-1, -1) }\n                        return false\n                    } else {\n                        throw ExceptionWithStringResource(\"No available videos\", AYMR.strings.no_available_videos)\n                    }\n                }\n\n                val newVideo = (hosterState.value[newHosterIdx] as HosterState.Ready).videoList[newVideoIdx]\n\n                return loadVideo(source, newVideo, newHosterIdx, newVideoIdx)\n            } else {\n                _selectedHosterVideoIndex.update { _ -> oldSelectedIndex }\n                _hosterState.updateAt(\n                    hosterIndex,\n                    selectedHosterState.getChangedAt(videoIndex, video, Video.State.ERROR),\n                )\n                return false\n            }\n        }\n\n        _hosterState.updateAt(\n            hosterIndex,\n            selectedHosterState.getChangedAt(videoIndex, resolvedVideo, Video.State.READY),\n        )\n\n        _currentVideo.update { _ -> resolvedVideo }\n\n        qualityIndex = Pair(hosterIndex, videoIndex)\n\n        activity.setVideo(resolvedVideo)\n        return true\n    }\n\n    fun onVideoClicked(hosterIndex: Int, videoIndex: Int) {\n        val hosterState = _hosterState.value[hosterIndex] as? HosterState.Ready\n        val video = hosterState?.videoList\n            ?.getOrNull(videoIndex)\n            ?: return // Shouldn't happen, but just in case™\n\n        val videoState = hosterState.videoState\n            .getOrNull(videoIndex)\n            ?: return\n\n        if (videoState == Video.State.ERROR) {\n            return\n        }\n\n        viewModelScope.launchIO {\n            val success = loadVideo(currentSource.value, video, hosterIndex, videoIndex)\n            if (success) {\n                if (sheetShown.value == Sheets.QualityTracks) {\n                    dismissSheet()\n                }\n            } else {\n                updateIsLoadingEpisode(false)\n            }\n        }\n    }\n\n    fun onHosterClicked(index: Int) {\n        when (hosterState.value[index]) {\n            is HosterState.Ready -> {\n                _hosterExpandedList.updateAt(index, !_hosterExpandedList.value[index])\n            }\n            is HosterState.Idle -> {\n                val hosterName = hosterList.value[index].hosterName\n                _hosterState.updateAt(index, HosterState.Loading(hosterName))\n\n                viewModelScope.launchIO {\n                    val hosterState = EpisodeLoader.loadHosterVideos(\n                        source = currentSource.value!!,\n                        hoster = hosterList.value[index],\n                        force = true,\n                    )\n                    _hosterState.updateAt(index, hosterState)\n                }\n            }\n            is HosterState.Loading, is HosterState.Error -> {}\n        }\n    }\n\n    private fun <T> MutableStateFlow<List<T>>.updateAt(index: Int, newValue: T) {\n        this.update { values ->\n            values.toMutableList().apply {\n                this[index] = newValue\n            }\n        }\n    }\n\n    data class EpisodeLoadResult(\n        val hosterList: List<Hoster>?,\n        val episodeTitle: String,\n        val source: AnimeSource,\n    )\n\n    suspend fun loadEpisode(episodeId: Long?): EpisodeLoadResult? {\n        val anime = currentAnime.value ?: return null\n        val source = sourceManager.getOrStub(anime.source)\n\n        val chosenEpisode = currentPlaylist.value.firstOrNull { ep -> ep.id == episodeId } ?: return null\n\n        _currentEpisode.update { _ -> chosenEpisode }\n        updateEpisode(chosenEpisode)\n\n        return withIOContext {\n            try {\n                val currentEpisode =\n                    currentEpisode.value\n                        ?: throw ExceptionWithStringResource(\"No episode loaded\", AYMR.strings.no_episode_loaded)\n                currentHosterList = EpisodeLoader.getHosters(\n                    currentEpisode.toDomainEpisode()!!,\n                    anime,\n                    source,\n                )\n\n                this@PlayerViewModel.episodeId = currentEpisode.id!!\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { e.message ?: \"Error getting links\" }\n            }\n\n            EpisodeLoadResult(\n                hosterList = currentHosterList,\n                episodeTitle = anime.title + \" - \" + chosenEpisode.name,\n                source = source,\n            )\n        }\n    }\n\n    /**\n     * Called every time a second is reached in the player. Used to mark the flag of episode being\n     * seen, update tracking services, enqueue downloaded episode deletion and download next episode.\n     */\n    private fun onSecondReached(position: Int, duration: Int) {\n        if (isLoadingEpisode.value) return\n        val currentEp = currentEpisode.value ?: return\n        if (episodeId == -1L) return\n        if (duration == 0) return\n\n        val seconds = position * 1000L\n        val totalSeconds = duration * 1000L\n        // Save last second seen and mark as seen if needed\n        currentEp.last_second_seen = seconds\n        currentEp.total_seconds = totalSeconds\n\n        episodePosition = seconds\n\n        val progress = playerPreferences.progressPreference().get()\n        val shouldTrack = !incognitoMode || hasTrackers\n        if (seconds >= totalSeconds * progress && shouldTrack) {\n            viewModelScope.launchNonCancellable {\n                updateEpisodeProgressOnComplete(currentEp)\n            }\n        }\n\n        saveWatchingProgress(currentEp)\n\n        val inDownloadRange = seconds.toDouble() / totalSeconds > 0.35\n        if (inDownloadRange) {\n            downloadNextEpisodes()\n        }\n    }\n\n    private suspend fun updateEpisodeProgressOnComplete(currentEp: Episode) {\n        currentEp.seen = true\n        updateTrackEpisodeSeen(currentEp)\n        deleteEpisodeIfNeeded(currentEp)\n\n        val markDuplicateAsSeen = libraryPreferences.markDuplicateSeenEpisodeAsSeen().get()\n            .contains(LibraryPreferences.MARK_DUPLICATE_EPISODE_SEEN_EXISTING)\n        if (!markDuplicateAsSeen) return\n\n        val duplicateUnseenEpisodes = currentPlaylist.value\n            .mapNotNull { episode ->\n                if (\n                    !episode.seen &&\n                    episode.isRecognizedNumber &&\n                    episode.episode_number == currentEp.episode_number\n                ) {\n                    EpisodeUpdate(id = episode.id!!, seen = true)\n                } else {\n                    null\n                }\n            }\n        updateEpisode.awaitAll(duplicateUnseenEpisodes)\n    }\n\n    private fun downloadNextEpisodes() {\n        if (downloadAheadAmount == 0) return\n        val anime = currentAnime.value ?: return\n\n        // Only download ahead if current + next episode is already downloaded too to avoid jank\n        if (getCurrentEpisodeIndex() == currentPlaylist.value.lastIndex) return\n        val currentEpisode = currentEpisode.value ?: return\n\n        val nextEpisode = currentPlaylist.value[getCurrentEpisodeIndex() + 1]\n        val episodesAreDownloaded =\n            EpisodeLoader.isDownload(currentEpisode.toDomainEpisode()!!, anime) &&\n                EpisodeLoader.isDownload(nextEpisode.toDomainEpisode()!!, anime)\n\n        viewModelScope.launchIO {\n            if (!episodesAreDownloaded) {\n                return@launchIO\n            }\n            val episodesToDownload = getNextEpisodes.await(anime.id, nextEpisode.id!!)\n                .take(downloadAheadAmount)\n            downloadManager.downloadEpisodes(anime, episodesToDownload)\n        }\n    }\n\n    /**\n     * Determines if deleting option is enabled and nth to last episode actually exists.\n     * If both conditions are satisfied enqueues episode for delete\n     * @param chosenEpisode current episode, which is going to be marked as seen.\n     */\n    private fun deleteEpisodeIfNeeded(chosenEpisode: Episode) {\n        // Determine which episode should be deleted and enqueue\n        val currentEpisodePosition = currentPlaylist.value.indexOf(chosenEpisode)\n        val removeAfterSeenSlots = downloadPreferences.removeAfterReadSlots().get()\n        val episodeToDelete = currentPlaylist.value.getOrNull(\n            currentEpisodePosition - removeAfterSeenSlots,\n        )\n        // If episode is completely seen no need to download it\n        episodeToDownload = null\n\n        // Check if deleting option is enabled and episode exists\n        if (removeAfterSeenSlots != -1 && episodeToDelete != null) {\n            enqueueDeleteSeenEpisodes(episodeToDelete)\n        }\n    }\n\n    fun saveCurrentEpisodeWatchingProgress() {\n        currentEpisode.value?.let { saveWatchingProgress(it) }\n    }\n\n    /**\n     * Called when episode is changed in player or when activity is paused.\n     */\n    private fun saveWatchingProgress(episode: Episode) {\n        viewModelScope.launchNonCancellable {\n            saveEpisodeProgress(episode)\n            saveEpisodeHistory(episode)\n        }\n    }\n\n    /**\n     * Saves this [episode] progress (last second seen and whether it's seen).\n     * If incognito mode isn't on or has at least 1 tracker\n     */\n    private suspend fun saveEpisodeProgress(episode: Episode) {\n        if (!incognitoMode || hasTrackers) {\n            updateEpisode.await(\n                EpisodeUpdate(\n                    id = episode.id!!,\n                    seen = episode.seen,\n                    bookmark = episode.bookmark,\n                    fillermark = episode.fillermark,\n                    lastSecondSeen = episode.last_second_seen,\n                    totalSeconds = episode.total_seconds,\n                ),\n            )\n        }\n    }\n\n    /**\n     * Saves this [episode] last seen history if incognito mode isn't on.\n     */\n    private suspend fun saveEpisodeHistory(episode: Episode) {\n        if (!incognitoMode) {\n            val episodeId = episode.id!!\n            val seenAt = Date()\n            upsertHistory.await(\n                AnimeHistoryUpdate(episodeId, seenAt),\n            )\n        }\n    }\n\n    /**\n     * Bookmarks the currently active episode.\n     */\n    fun bookmarkEpisode(episodeId: Long?, bookmarked: Boolean) {\n        viewModelScope.launchNonCancellable {\n            updateEpisode.await(\n                EpisodeUpdate(\n                    id = episodeId!!,\n                    bookmark = bookmarked,\n                ),\n            )\n        }\n    }\n\n    /**\n     * Fillermarks the currently active episode.\n     */\n    fun fillermarkEpisode(episodeId: Long?, fillermarked: Boolean) {\n        viewModelScope.launchNonCancellable {\n            updateEpisode.await(\n                EpisodeUpdate(\n                    id = episodeId!!,\n                    fillermark = fillermarked,\n                ),\n            )\n        }\n    }\n\n    fun takeScreenshot(cachePath: String, showSubtitles: Boolean): InputStream? {\n        val filename = cachePath + \"/${System.currentTimeMillis()}_mpv_screenshot_tmp.png\"\n        val subtitleFlag = if (showSubtitles) \"subtitles\" else \"video\"\n\n        MPVLib.command(arrayOf(\"screenshot-to-file\", filename, subtitleFlag))\n        val tempFile = File(filename).takeIf { it.exists() } ?: return null\n        val newFile = File(\"$cachePath/mpv_screenshot.png\")\n\n        newFile.delete()\n        tempFile.renameTo(newFile)\n        return newFile.takeIf { it.exists() }?.inputStream()\n    }\n\n    /**\n     * Saves the screenshot on the pictures directory and notifies the UI of the result.\n     * There's also a notification to allow sharing the image somewhere else or deleting it.\n     */\n    fun saveImage(imageStream: () -> InputStream, timePos: Int?) {\n        val anime = currentAnime.value ?: return\n\n        val context = Injekt.get<Application>()\n        val notifier = SaveImageNotifier(context)\n        notifier.onClear()\n\n        val seconds = timePos?.let { Utils.prettyTime(it) } ?: return\n        val filename = generateFilename(anime, seconds) ?: return\n\n        // Pictures directory.\n        val relativePath = DiskUtil.buildValidFilename(anime.title)\n\n        // Copy file in background.\n        viewModelScope.launchNonCancellable {\n            try {\n                val uri = imageSaver.save(\n                    image = Image.Page(\n                        inputStream = imageStream,\n                        name = filename,\n                        location = Location.Pictures(relativePath),\n                    ),\n                )\n                notifier.onComplete(uri)\n                eventChannel.send(Event.SavedImage(SaveImageResult.Success(uri)))\n            } catch (e: Throwable) {\n                notifier.onError(e.message)\n                eventChannel.send(Event.SavedImage(SaveImageResult.Error(e)))\n            }\n        }\n    }\n\n    /**\n     * Shares the screenshot and notifies the UI with the path of the file to share.\n     * The image must be first copied to the internal partition because there are many possible\n     * formats it can come from, like a zipped chapter, in which case it's not possible to directly\n     * get a path to the file and it has to be decompressed somewhere first. Only the last shared\n     * image will be kept so it won't be taking lots of internal disk space.\n     */\n    fun shareImage(imageStream: () -> InputStream, timePos: Int?) {\n        val anime = currentAnime.value ?: return\n\n        val context = Injekt.get<Application>()\n        val destDir = context.cacheImageDir\n\n        val seconds = timePos?.let { Utils.prettyTime(it) } ?: return\n        val filename = generateFilename(anime, seconds) ?: return\n\n        try {\n            viewModelScope.launchIO {\n                destDir.deleteRecursively()\n                val uri = imageSaver.save(\n                    image = Image.Page(\n                        inputStream = imageStream,\n                        name = filename,\n                        location = Location.Cache,\n                    ),\n                )\n                eventChannel.send(Event.ShareImage(uri, seconds))\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    /**\n     * Sets the screenshot as art and notifies the UI of the result.\n     */\n    fun setAsArt(artType: ArtType, imageStream: () -> InputStream) {\n        val anime = currentAnime.value ?: return\n        val episode = currentEpisode.value ?: return\n\n        viewModelScope.launchNonCancellable {\n            val result = try {\n                when (artType) {\n                    ArtType.Cover -> anime.editCover(Injekt.get(), imageStream())\n                    ArtType.Background -> anime.editBackground(Injekt.get(), imageStream())\n                    ArtType.Thumbnail -> episode.editThumbnail(anime, Injekt.get(), imageStream())\n                }\n\n                if (anime.isLocal() || anime.favorite) {\n                    SetAsArt.Success\n                } else {\n                    SetAsArt.AddToLibraryFirst\n                }\n            } catch (e: Exception) {\n                SetAsArt.Error\n            }\n            eventChannel.send(Event.SetArtResult(result, artType))\n        }\n    }\n\n    /**\n     * Results of the save image feature.\n     */\n    sealed class SaveImageResult {\n        class Success(val uri: Uri) : SaveImageResult()\n        class Error(val error: Throwable) : SaveImageResult()\n    }\n\n    private fun updateTrackEpisodeSeen(episode: Episode) {\n        if (basePreferences.incognitoMode().get() || !hasTrackers) return\n        if (!trackPreferences.autoUpdateTrack().get()) return\n\n        val anime = currentAnime.value ?: return\n        val context = Injekt.get<Application>()\n\n        viewModelScope.launchNonCancellable {\n            trackEpisode.await(context, anime.id, episode.episode_number.toDouble())\n        }\n    }\n\n    /**\n     * Enqueues this [episode] to be deleted when [deletePendingEpisodes] is called. The download\n     * manager handles persisting it across process deaths.\n     */\n    private fun enqueueDeleteSeenEpisodes(episode: Episode) {\n        if (!episode.seen) return\n        val anime = currentAnime.value ?: return\n        viewModelScope.launchNonCancellable {\n            downloadManager.enqueueEpisodesToDelete(listOf(episode.toDomainEpisode()!!), anime)\n        }\n    }\n\n    /**\n     * Deletes all the pending episodes. This operation will run in a background thread and errors\n     * are ignored.\n     */\n    fun deletePendingEpisodes() {\n        viewModelScope.launchNonCancellable {\n            downloadManager.deletePendingEpisodes()\n        }\n    }\n\n    /**\n     * Returns the skipIntroLength used by this anime or the default one.\n     */\n    fun getAnimeSkipIntroLength(): Int {\n        val default = gesturePreferences.defaultIntroLength().get()\n        val anime = currentAnime.value ?: return default\n        val skipIntroLength = anime.skipIntroLength\n        val skipIntroDisable = anime.skipIntroDisable\n        return when {\n            skipIntroDisable -> 0\n            skipIntroLength <= 0 -> default\n            else -> anime.skipIntroLength\n        }\n    }\n\n    /**\n     * Updates the skipIntroLength for the open anime.\n     */\n    fun setAnimeSkipIntroLength(skipIntroLength: Long) {\n        val anime = currentAnime.value ?: return\n        if (!anime.favorite) return\n        // Skip unnecessary database operation\n        if (skipIntroLength == getAnimeSkipIntroLength().toLong()) return\n        viewModelScope.launchIO {\n            setAnimeViewerFlags.awaitSetSkipIntroLength(anime.id, skipIntroLength)\n            _currentAnime.update { _ -> getAnime.await(anime.id) }\n        }\n    }\n\n    /**\n     * Generate a filename for the given [anime] and [timePos]\n     */\n    private fun generateFilename(\n        anime: Anime,\n        timePos: String,\n    ): String? {\n        val episode = currentEpisode.value ?: return null\n        val filenameSuffix = \" - $timePos\"\n        return DiskUtil.buildValidFilename(\n            \"${anime.title} - ${episode.name}\".takeBytes(\n                DiskUtil.MAX_FILE_NAME_BYTES - filenameSuffix.byteSize(),\n            ),\n        ) + filenameSuffix\n    }\n\n    /**\n     * Returns the response of the AniSkipApi for this episode.\n     * just works if tracking is enabled.\n     */\n    suspend fun aniSkipResponse(playerDuration: Int?): List<TimeStamp>? {\n        val animeId = currentAnime.value?.id ?: return null\n        val trackerManager = Injekt.get<TrackerManager>()\n        var malId: Long?\n        val episodeNumber = currentEpisode.value?.episode_number?.toInt() ?: return null\n        if (getTracks.await(animeId).isEmpty()) {\n            logcat { \"AniSkip: No tracks found for anime $animeId\" }\n            return null\n        }\n\n        getTracks.await(animeId).map { track ->\n            val tracker = trackerManager.get(track.trackerId)\n            malId = when (tracker) {\n                is MyAnimeList -> track.remoteId\n                is Anilist -> AniSkipApi().getMalIdFromAL(track.remoteId)\n                else -> null\n            }\n            val duration = playerDuration ?: return null\n            return malId?.let {\n                AniSkipApi().getResult(it.toInt(), episodeNumber, duration.toLong())\n            }\n        }\n        return null\n    }\n\n    val introSkipEnabled = playerPreferences.enableSkipIntro().get()\n    private val autoSkip = playerPreferences.autoSkipIntro().get()\n    private val netflixStyle = playerPreferences.enableNetflixStyleIntroSkip().get()\n\n    private val defaultWaitingTime = playerPreferences.waitingTimeIntroSkip().get()\n    var waitingSkipIntro = defaultWaitingTime\n\n    fun setChapter(position: Float) {\n        getCurrentChapter(position)?.let { (chapterIndex, chapter) ->\n            if (currentChapter.value != chapter) {\n                _currentChapter.update { _ -> chapter }\n            }\n\n            if (!introSkipEnabled) {\n                return\n            }\n\n            if (chapter.chapterType == ChapterType.Other) {\n                _skipIntroText.update { _ -> null }\n                waitingSkipIntro = defaultWaitingTime\n            } else {\n                val nextChapterPos = chapters.value.getOrNull(chapterIndex + 1)?.start ?: pos.value\n\n                if (netflixStyle) {\n                    // show a toast with the seconds before the skip\n                    if (waitingSkipIntro == defaultWaitingTime) {\n                        activity.showToast(\n                            \"Skip Intro: ${activity.stringResource(\n                                AYMR.strings.player_aniskip_dontskip_toast,\n                                chapter.name,\n                                waitingSkipIntro,\n                            )}\",\n                        )\n                    }\n                    showSkipIntroButton(chapter, nextChapterPos, waitingSkipIntro)\n                    waitingSkipIntro--\n                } else if (autoSkip) {\n                    seekToWithText(\n                        seekValue = nextChapterPos.toInt(),\n                        text = activity.stringResource(AYMR.strings.player_intro_skipped, chapter.name),\n                    )\n                } else {\n                    updateSkipIntroButton(chapter.chapterType)\n                }\n            }\n        }\n    }\n\n    private fun updateSkipIntroButton(chapterType: ChapterType) {\n        val skipButtonString = chapterType.getStringRes()\n\n        _skipIntroText.update { _ ->\n            skipButtonString?.let {\n                activity.stringResource(\n                    AYMR.strings.player_skip_action,\n                    activity.stringResource(skipButtonString),\n                )\n            }\n        }\n    }\n\n    private fun showSkipIntroButton(chapter: IndexedSegment, nextChapterPos: Float, waitingTime: Int) {\n        if (waitingTime > -1) {\n            if (waitingTime > 0) {\n                _skipIntroText.update { _ -> activity.stringResource(AYMR.strings.player_aniskip_dontskip) }\n            } else {\n                seekToWithText(\n                    seekValue = nextChapterPos.toInt(),\n                    text = activity.stringResource(AYMR.strings.player_aniskip_skip, chapter.name),\n                )\n            }\n        } else {\n            // when waitingTime is -1, it means that the user cancelled the skip\n            updateSkipIntroButton(chapter.chapterType)\n        }\n    }\n\n    fun onSkipIntro() {\n        getCurrentChapter()?.let { (chapterIndex, chapter) ->\n            // this stops the counter\n            if (waitingSkipIntro > 0 && netflixStyle) {\n                waitingSkipIntro = -1\n                return\n            }\n\n            val nextChapterPos = chapters.value.getOrNull(chapterIndex + 1)?.start ?: pos.value\n\n            seekToWithText(\n                seekValue = nextChapterPos.toInt(),\n                text = activity.stringResource(AYMR.strings.player_aniskip_skip, chapter.name),\n            )\n        }\n    }\n\n    private fun getCurrentChapter(position: Float? = null): IndexedValue<IndexedSegment>? {\n        return chapters.value.withIndex()\n            .filter { it.value.start <= (position ?: pos.value) }\n            .maxByOrNull { it.value.start }\n    }\n\n    fun setPrimaryCustomButtonTitle(button: CustomButton) {\n        _primaryButtonTitle.update { _ -> button.name }\n    }\n\n    sealed class Event {\n        data class SetArtResult(val result: SetAsArt, val artType: ArtType) : Event()\n        data class SavedImage(val result: SaveImageResult) : Event()\n        data class ShareImage(val uri: Uri, val seconds: String) : Event()\n    }\n}\n\nfun CustomButton.execute() {\n    MPVLib.command(arrayOf(\"script-message\", \"call_button_$id\"))\n}\n\nfun CustomButton.executeLongPress() {\n    MPVLib.command(arrayOf(\"script-message\", \"call_button_${id}_long\"))\n}\n\nfun Float.normalize(inMin: Float, inMax: Float, outMin: Float, outMax: Float): Float {\n    return (this - inMin) * (outMax - outMin) / (inMax - inMin) + outMin\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/BottomLeftPlayerControls.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.LockOpen\nimport androidx.compose.material.icons.filled.ScreenRotation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport dev.vivvvek.seeker.Segment\nimport eu.kanade.tachiyomi.ui.player.Sheets\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport eu.kanade.tachiyomi.ui.player.controls.components.CurrentChapter\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun BottomLeftPlayerControls(\n    playbackSpeed: Float,\n    currentChapter: Segment?,\n    onLockControls: () -> Unit,\n    onCycleRotation: () -> Unit,\n    onPlaybackSpeedChange: (Float) -> Unit,\n    onOpenSheet: (Sheets) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val playerPreferences = remember { Injekt.get<PlayerPreferences>() }\n\n    Row(\n        modifier = modifier.fillMaxWidth(),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        ControlsButton(\n            Icons.Default.LockOpen,\n            onClick = onLockControls,\n        )\n        ControlsButton(\n            icon = Icons.Default.ScreenRotation,\n            onClick = onCycleRotation,\n        )\n        ControlsButton(\n            text = stringResource(AYMR.strings.player_speed, playbackSpeed),\n            onClick = {\n                val newSpeed = if (playbackSpeed >= 2) 0.25f else playbackSpeed + 0.25f\n                onPlaybackSpeedChange(newSpeed)\n                playerPreferences.playerSpeed().set(newSpeed)\n            },\n            onLongClick = { onOpenSheet(Sheets.PlaybackSpeed) },\n        )\n        AnimatedVisibility(\n            currentChapter != null && playerPreferences.showCurrentChapter().get(),\n            enter = fadeIn(),\n            exit = fadeOut(),\n        ) {\n            CurrentChapter(\n                chapter = currentChapter!!,\n                onClick = { onOpenSheet(Sheets.Chapters) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/BottomRightPlayerControls.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.AspectRatio\nimport androidx.compose.material.icons.filled.PictureInPictureAlt\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport eu.kanade.tachiyomi.ui.player.controls.components.FilledControlsButton\nimport eu.kanade.tachiyomi.ui.player.execute\nimport eu.kanade.tachiyomi.ui.player.executeLongPress\nimport tachiyomi.domain.custombuttons.model.CustomButton\n\n@Composable\nfun BottomRightPlayerControls(\n    customButton: CustomButton?,\n    customButtonTitle: String,\n    skipIntroButton: String?,\n    onPressSkipIntroButton: () -> Unit,\n    isPipAvailable: Boolean,\n    onAspectClick: () -> Unit,\n    onPipClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(modifier) {\n        if (skipIntroButton != null) {\n            FilledControlsButton(\n                text = skipIntroButton,\n                onClick = onPressSkipIntroButton,\n                onLongClick = {},\n            )\n        } else if (customButton != null) {\n            FilledControlsButton(\n                text = customButtonTitle,\n                onClick = customButton::execute,\n                onLongClick = customButton::executeLongPress,\n            )\n        }\n\n        if (isPipAvailable) {\n            ControlsButton(\n                Icons.Default.PictureInPictureAlt,\n                onClick = onPipClick,\n            )\n        }\n\n        ControlsButton(\n            Icons.Default.AspectRatio,\n            onClick = onAspectClick,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/GestureHandler.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.gestures.detectHorizontalDragGestures\nimport androidx.compose.foundation.gestures.detectTapGestures\nimport androidx.compose.foundation.gestures.detectVerticalDragGestures\nimport androidx.compose.foundation.indication\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.interaction.PressInteraction\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.safeGestures\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.material3.LocalRippleConfiguration\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.ripple\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\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.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.input.pointer.pointerInput\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.presentation.player.components.LeftSideOvalShape\nimport eu.kanade.presentation.player.components.RightSideOvalShape\nimport eu.kanade.presentation.theme.playerRippleConfiguration\nimport eu.kanade.tachiyomi.ui.player.Panels\nimport eu.kanade.tachiyomi.ui.player.PlayerUpdates\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel\nimport eu.kanade.tachiyomi.ui.player.Sheets\nimport eu.kanade.tachiyomi.ui.player.controls.components.DoubleTapSeekTriangles\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport `is`.xyz.mpv.MPVLib\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun GestureHandler(\n    viewModel: PlayerViewModel,\n    interactionSource: MutableInteractionSource,\n    modifier: Modifier = Modifier,\n) {\n    val playerPreferences = remember { Injekt.get<PlayerPreferences>() }\n    val gesturePreferences = remember { Injekt.get<GesturePreferences>() }\n    val audioPreferences = remember { Injekt.get<AudioPreferences>() }\n\n    val panelShown by viewModel.panelShown.collectAsState()\n    val allowGesturesInPanels by playerPreferences.allowGestures().collectAsState()\n    val duration by viewModel.duration.collectAsState()\n    val position by viewModel.pos.collectAsState()\n    val controlsShown by viewModel.controlsShown.collectAsState()\n    val areControlsLocked by viewModel.areControlsLocked.collectAsState()\n    val seekAmount by viewModel.doubleTapSeekAmount.collectAsState()\n    val isSeekingForwards by viewModel.isSeekingForwards.collectAsState()\n    var isDoubleTapSeeking by remember { mutableStateOf(false) }\n\n    LaunchedEffect(seekAmount) {\n        delay(800)\n        isDoubleTapSeeking = false\n        viewModel.updateSeekAmount(0)\n        viewModel.updateSeekText(null)\n        delay(100)\n        viewModel.hideSeekBar()\n    }\n\n    val gestureVolumeBrightness = gesturePreferences.gestureVolumeBrightness().get()\n    val swapVolumeBrightness by gesturePreferences.swapVolumeBrightness().collectAsState()\n    val seekGesture by gesturePreferences.gestureHorizontalSeek().collectAsState()\n    val preciseSeeking by gesturePreferences.playerSmoothSeek().collectAsState()\n    val showSeekbar by gesturePreferences.showSeekBar().collectAsState()\n    var isLongPressing by remember { mutableStateOf(false) }\n    val currentVolume by viewModel.currentVolume.collectAsState()\n    val currentMPVVolume by viewModel.currentMPVVolume.collectAsState()\n    val currentBrightness by viewModel.currentBrightness.collectAsState()\n    val volumeBoostingCap = audioPreferences.volumeBoostCap().get()\n    val haptics = LocalHapticFeedback.current\n\n    Box(\n        modifier = modifier\n            .fillMaxSize()\n            .windowInsetsPadding(WindowInsets.safeGestures)\n            .pointerInput(Unit) {\n                val originalSpeed = viewModel.playbackSpeed.value\n                detectTapGestures(\n                    onTap = {\n                        if (controlsShown) viewModel.hideControls() else viewModel.showControls()\n                    },\n                    onDoubleTap = {\n                        if (areControlsLocked || isDoubleTapSeeking) return@detectTapGestures\n                        if (it.x > size.width * 3 / 5) {\n                            if (!isSeekingForwards) viewModel.updateSeekAmount(0)\n                            viewModel.handleRightDoubleTap()\n                            isDoubleTapSeeking = true\n                        } else if (it.x < size.width * 2 / 5) {\n                            if (isSeekingForwards) viewModel.updateSeekAmount(0)\n                            viewModel.handleLeftDoubleTap()\n                            isDoubleTapSeeking = true\n                        } else {\n                            viewModel.handleCenterDoubleTap()\n                        }\n                    },\n                    onPress = {\n                        if (panelShown != Panels.None && !allowGesturesInPanels) {\n                            viewModel.panelShown.update { Panels.None }\n                        }\n                        val press = PressInteraction.Press(\n                            it.copy(x = if (it.x > size.width * 3 / 5) it.x - size.width * 0.6f else it.x),\n                        )\n                        if (!areControlsLocked && isDoubleTapSeeking && seekAmount != 0) {\n                            if (it.x > size.width * 3 / 5) {\n                                if (!isSeekingForwards) viewModel.updateSeekAmount(0)\n                                viewModel.handleRightDoubleTap()\n                            } else if (it.x < size.width * 2 / 5) {\n                                if (isSeekingForwards) viewModel.updateSeekAmount(0)\n                                viewModel.handleLeftDoubleTap()\n                            } else {\n                                viewModel.handleCenterDoubleTap()\n                            }\n                        } else {\n                            isDoubleTapSeeking = false\n                        }\n                        interactionSource.emit(press)\n                        tryAwaitRelease()\n                        if (isLongPressing) {\n                            isLongPressing = false\n                            MPVLib.setPropertyDouble(\"speed\", originalSpeed.toDouble())\n                            viewModel.playerUpdate.update { PlayerUpdates.None }\n                        }\n                        interactionSource.emit(PressInteraction.Release(press))\n                    },\n                    onLongPress = {\n                        if (areControlsLocked) return@detectTapGestures\n                        if (!isLongPressing) {\n                            haptics.performHapticFeedback(HapticFeedbackType.LongPress)\n                            isLongPressing = true\n                            viewModel.pause()\n                            viewModel.sheetShown.update { Sheets.Screenshot }\n                        }\n                    },\n                )\n            }\n            .pointerInput(areControlsLocked) {\n                if (!seekGesture || areControlsLocked) return@pointerInput\n                var startingPosition = position.toInt()\n                var startingX = 0f\n                var wasPlayerAlreadyPause = false\n                detectHorizontalDragGestures(\n                    onDragStart = {\n                        startingPosition = position.toInt()\n                        startingX = it.x\n                        wasPlayerAlreadyPause = viewModel.paused.value\n                        viewModel.pause()\n                    },\n                    onDragEnd = {\n                        viewModel.gestureSeekAmount.update { null }\n                        viewModel.hideSeekBar()\n                        if (!wasPlayerAlreadyPause) viewModel.unpause()\n                    },\n                ) { change, dragAmount ->\n                    if (position <= 0f && dragAmount < 0) return@detectHorizontalDragGestures\n                    if (position >= duration && dragAmount > 0) return@detectHorizontalDragGestures\n                    calculateNewHorizontalGestureValue(startingPosition, startingX, change.position.x, 0.15f).let {\n                        viewModel.gestureSeekAmount.update { _ ->\n                            Pair(\n                                startingPosition,\n                                (it - startingPosition)\n                                    .coerceIn(0 - startingPosition, (duration - startingPosition).toInt()),\n                            )\n                        }\n                        viewModel.seekTo(it.coerceIn(0, duration.toInt()), preciseSeeking)\n                    }\n\n                    if (showSeekbar) viewModel.showSeekBar()\n                }\n            }\n            .pointerInput(areControlsLocked) {\n                if (!gestureVolumeBrightness || areControlsLocked) return@pointerInput\n                var startingY = 0f\n                var mpvVolumeStartingY = 0f\n                var originalVolume = currentVolume\n                var originalMPVVolume = currentMPVVolume\n                var originalBrightness = currentBrightness\n                val brightnessGestureSens = 0.001f\n                val volumeGestureSens = 0.001f * viewModel.maxVolume\n                val mpvVolumeGestureSens = 0.001f * volumeBoostingCap\n                val isIncreasingVolumeBoost: (Float) -> Boolean = {\n                    volumeBoostingCap > 0 &&\n                        currentVolume == viewModel.maxVolume &&\n                        currentMPVVolume - 100 < volumeBoostingCap &&\n                        it < 0\n                }\n                val isDecreasingVolumeBoost: (Float) -> Boolean = {\n                    volumeBoostingCap > 0 &&\n                        currentVolume == viewModel.maxVolume &&\n                        currentMPVVolume - 100 in 1..volumeBoostingCap &&\n                        it > 0\n                }\n                detectVerticalDragGestures(\n                    onDragEnd = { startingY = 0f },\n                    onDragStart = {\n                        startingY = 0f\n                        mpvVolumeStartingY = 0f\n                        originalVolume = currentVolume\n                        originalMPVVolume = currentMPVVolume\n                        originalBrightness = currentBrightness\n                    },\n                ) { change, amount ->\n                    val changeVolume: () -> Unit = {\n                        if (isIncreasingVolumeBoost(amount) || isDecreasingVolumeBoost(amount)) {\n                            if (mpvVolumeStartingY == 0f) {\n                                startingY = 0f\n                                originalVolume = currentVolume\n                                mpvVolumeStartingY = change.position.y\n                            }\n                            viewModel.changeMPVVolumeTo(\n                                calculateNewVerticalGestureValue(\n                                    originalMPVVolume,\n                                    mpvVolumeStartingY,\n                                    change.position.y,\n                                    mpvVolumeGestureSens,\n                                )\n                                    .coerceIn(100..volumeBoostingCap + 100),\n                            )\n                        } else {\n                            if (startingY == 0f) {\n                                mpvVolumeStartingY = 0f\n                                originalMPVVolume = currentMPVVolume\n                                startingY = change.position.y\n                            }\n                            viewModel.changeVolumeTo(\n                                calculateNewVerticalGestureValue(\n                                    originalVolume,\n                                    startingY,\n                                    change.position.y,\n                                    volumeGestureSens,\n                                ),\n                            )\n                        }\n                        viewModel.displayVolumeSlider()\n                    }\n                    val changeBrightness: () -> Unit = {\n                        if (startingY == 0f) startingY = change.position.y\n                        viewModel.changeBrightnessTo(\n                            calculateNewVerticalGestureValue(\n                                originalBrightness,\n                                startingY,\n                                change.position.y,\n                                brightnessGestureSens,\n                            ),\n                        )\n                        viewModel.displayBrightnessSlider()\n                    }\n                    if (swapVolumeBrightness) {\n                        if (change.position.x > size.width / 2) changeBrightness() else changeVolume()\n                    } else {\n                        if (change.position.x < size.width / 2) changeBrightness() else changeVolume()\n                    }\n                }\n            },\n    )\n}\n\n@Composable\nfun DoubleTapToSeekOvals(\n    amount: Int,\n    text: String?,\n    interactionSource: MutableInteractionSource,\n    modifier: Modifier = Modifier,\n) {\n    val alpha by animateFloatAsState(if (amount == 0) 0f else 0.2f, label = \"double_tap_animation_alpha\")\n    Box(\n        modifier = modifier.fillMaxSize(),\n        contentAlignment = if (amount > 0) Alignment.CenterEnd else Alignment.CenterStart,\n    ) {\n        CompositionLocalProvider(\n            LocalRippleConfiguration provides playerRippleConfiguration,\n        ) {\n            if (amount != 0 || text != null) {\n                Box(\n                    modifier = Modifier\n                        .fillMaxHeight()\n                        .fillMaxWidth(0.4f), // 2 fifths\n                    contentAlignment = Alignment.Center,\n                ) {\n                    Box(\n                        modifier = Modifier\n                            .fillMaxSize()\n                            .clip(if (amount > 0) RightSideOvalShape else LeftSideOvalShape)\n                            .background(Color.White.copy(alpha))\n                            .indication(interactionSource, ripple()),\n                    )\n                    Column(horizontalAlignment = Alignment.CenterHorizontally) {\n                        DoubleTapSeekTriangles(isForward = amount > 0)\n                        Text(\n                            text = text ?: pluralStringResource(AYMR.plurals.seconds, amount, amount),\n                            fontSize = 12.sp,\n                            textAlign = TextAlign.Center,\n                            color = Color.White,\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\nfun calculateNewVerticalGestureValue(originalValue: Int, startingY: Float, newY: Float, sensitivity: Float): Int {\n    return originalValue + ((startingY - newY) * sensitivity).toInt()\n}\n\nfun calculateNewVerticalGestureValue(originalValue: Float, startingY: Float, newY: Float, sensitivity: Float): Float {\n    return originalValue + ((startingY - newY) * sensitivity)\n}\n\nfun calculateNewHorizontalGestureValue(originalValue: Int, startingX: Float, newX: Float, sensitivity: Float): Int {\n    return originalValue + ((newX - startingX) * sensitivity).toInt()\n}\n\nfun calculateNewHorizontalGestureValue(originalValue: Float, startingX: Float, newX: Float, sensitivity: Float): Float {\n    return originalValue + ((newX - startingX) * sensitivity)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/MiddlePlayerControls.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.EnterTransition\nimport androidx.compose.animation.ExitTransition\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.SkipNext\nimport androidx.compose.material.icons.filled.SkipPrevious\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.ripple\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.Color\nimport androidx.compose.ui.graphics.Shadow\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport `is`.xyz.mpv.Utils\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport kotlin.math.abs\n\n@Composable\nfun MiddlePlayerControls(\n    // previous\n    hasPrevious: Boolean,\n    onSkipPrevious: () -> Unit,\n\n    // middle\n    isLoading: Boolean,\n    isLoadingEpisode: Boolean,\n    controlsShown: Boolean,\n    areControlsLocked: Boolean,\n    showLoadingCircle: Boolean,\n    paused: Boolean,\n    gestureSeekAmount: Pair<Int, Int>?,\n    onPlayPauseClick: () -> Unit,\n\n    // next\n    hasNext: Boolean,\n    onSkipNext: () -> Unit,\n\n    enter: EnterTransition,\n    exit: ExitTransition,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier,\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        AnimatedVisibility(\n            visible = controlsShown && !areControlsLocked,\n            enter = enter,\n            exit = exit,\n        ) {\n            if (gestureSeekAmount == null) {\n                ControlsButton(\n                    Icons.Filled.SkipPrevious,\n                    onClick = onSkipPrevious,\n                    iconSize = 48.dp,\n                    enabled = hasPrevious,\n                )\n            }\n        }\n\n        val icon = AnimatedImageVector.animatedVectorResource(R.drawable.anim_play_to_pause)\n        val interaction = remember { MutableInteractionSource() }\n        when {\n            gestureSeekAmount != null -> {\n                Text(\n                    stringResource(\n                        AYMR.strings.player_gesture_seek_indicator,\n                        if (gestureSeekAmount.second >= 0) '+' else '-',\n                        Utils.prettyTime(abs(gestureSeekAmount.second)),\n                        Utils.prettyTime(gestureSeekAmount.first + gestureSeekAmount.second),\n                    ),\n                    style = MaterialTheme.typography.headlineMedium.copy(\n                        shadow = Shadow(Color.Black, blurRadius = 5f),\n                    ),\n                    fontWeight = FontWeight.Bold,\n                    textAlign = TextAlign.Center,\n                )\n            }\n\n            (isLoading || isLoadingEpisode) && showLoadingCircle -> CircularProgressIndicator(Modifier.size(96.dp))\n            else -> {\n                AnimatedVisibility(\n                    visible = controlsShown && !areControlsLocked,\n                    enter = enter,\n                    exit = exit,\n                ) {\n                    Image(\n                        painter = rememberAnimatedVectorPainter(icon, !paused),\n                        modifier = Modifier\n                            .size(96.dp)\n                            .clip(CircleShape)\n                            .clickable(\n                                interaction,\n                                ripple(),\n                                onClick = onPlayPauseClick,\n                            )\n                            .padding(MaterialTheme.padding.medium),\n                        contentDescription = null,\n                    )\n                }\n            }\n        }\n\n        AnimatedVisibility(\n            visible = controlsShown && !areControlsLocked,\n            enter = enter,\n            exit = exit,\n        ) {\n            if (gestureSeekAmount == null) {\n                ControlsButton(\n                    Icons.Filled.SkipNext,\n                    onClick = onSkipNext,\n                    iconSize = 48.dp,\n                    enabled = hasNext,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerControls.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.core.FastOutSlowInEasing\nimport androidx.compose.animation.core.FiniteAnimationSpec\nimport androidx.compose.animation.core.LinearOutSlowInEasing\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInHorizontally\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutHorizontally\nimport androidx.compose.animation.slideOutVertically\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Lock\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.LocalRippleConfiguration\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.staticCompositionLocalOf\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport androidx.constraintlayout.compose.Dimension\nimport eu.kanade.presentation.more.settings.screen.player.custombutton.getButtons\nimport eu.kanade.presentation.theme.playerRippleConfiguration\nimport eu.kanade.tachiyomi.ui.player.Dialogs\nimport eu.kanade.tachiyomi.ui.player.Panels\nimport eu.kanade.tachiyomi.ui.player.PlayerActivity\nimport eu.kanade.tachiyomi.ui.player.PlayerUpdates\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel\nimport eu.kanade.tachiyomi.ui.player.Sheets\nimport eu.kanade.tachiyomi.ui.player.VideoAspect\nimport eu.kanade.tachiyomi.ui.player.controls.components.BrightnessOverlay\nimport eu.kanade.tachiyomi.ui.player.controls.components.BrightnessSlider\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport eu.kanade.tachiyomi.ui.player.controls.components.SeekbarWithTimers\nimport eu.kanade.tachiyomi.ui.player.controls.components.TextPlayerUpdate\nimport eu.kanade.tachiyomi.ui.player.controls.components.VolumeSlider\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.toFixed\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport `is`.xyz.mpv.MPVLib\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Suppress(\"CompositionLocalAllowlist\")\nval LocalPlayerButtonsClickEvent = staticCompositionLocalOf { {} }\n\n@Composable\nfun PlayerControls(\n    viewModel: PlayerViewModel,\n    onBackPress: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val spacing = MaterialTheme.padding\n    val playerPreferences = remember { Injekt.get<PlayerPreferences>() }\n    val gesturePreferences = remember { Injekt.get<GesturePreferences>() }\n    val audioPreferences = remember { Injekt.get<AudioPreferences>() }\n    val subtitlePreferences = remember { Injekt.get<SubtitlePreferences>() }\n    val interactionSource = remember { MutableInteractionSource() }\n\n    val controlsShown by viewModel.controlsShown.collectAsState()\n    val areControlsLocked by viewModel.areControlsLocked.collectAsState()\n    val seekBarShown by viewModel.seekBarShown.collectAsState()\n    val isLoading by viewModel.isLoading.collectAsState()\n    val isLoadingEpisode by viewModel.isLoadingEpisode.collectAsState()\n    val duration by viewModel.duration.collectAsState()\n    val position by viewModel.pos.collectAsState()\n    val paused by viewModel.paused.collectAsState()\n    val gestureSeekAmount by viewModel.gestureSeekAmount.collectAsState()\n    val doubleTapSeekAmount by viewModel.doubleTapSeekAmount.collectAsState()\n    val seekText by viewModel.seekText.collectAsState()\n    val currentChapter by viewModel.currentChapter.collectAsState()\n    val chapters by viewModel.chapters.collectAsState()\n    val currentBrightness by viewModel.currentBrightness.collectAsState()\n\n    val playerTimeToDisappear by playerPreferences.playerTimeToDisappear().collectAsState()\n    var isSeeking by remember { mutableStateOf(false) }\n    var resetControls by remember { mutableStateOf(true) }\n\n    val customButtons by viewModel.customButtons.collectAsState()\n    val customButton by viewModel.primaryButton.collectAsState()\n\n    LaunchedEffect(\n        controlsShown,\n        paused,\n        isSeeking,\n        resetControls,\n    ) {\n        if (controlsShown && !paused && !isSeeking) {\n            delay(playerTimeToDisappear.toLong())\n            viewModel.hideControls()\n        }\n    }\n\n    val transparentOverlay by animateFloatAsState(\n        if (controlsShown && !areControlsLocked) .8f else 0f,\n        animationSpec = playerControlsExitAnimationSpec(),\n        label = \"controls_transparent_overlay\",\n    )\n    GestureHandler(\n        viewModel = viewModel,\n        interactionSource = interactionSource,\n    )\n    DoubleTapToSeekOvals(doubleTapSeekAmount, seekText, interactionSource)\n    CompositionLocalProvider(\n        LocalRippleConfiguration provides playerRippleConfiguration,\n        LocalPlayerButtonsClickEvent provides { resetControls = !resetControls },\n        LocalContentColor provides Color.White,\n    ) {\n        CompositionLocalProvider(\n            LocalLayoutDirection provides LayoutDirection.Ltr,\n        ) {\n            ConstraintLayout(\n                modifier = modifier\n                    .fillMaxSize()\n                    .background(\n                        Brush.verticalGradient(\n                            Pair(0f, Color.Black),\n                            Pair(.2f, Color.Transparent),\n                            Pair(.7f, Color.Transparent),\n                            Pair(1f, Color.Black),\n                        ),\n                        alpha = transparentOverlay,\n                    )\n                    .padding(horizontal = MaterialTheme.padding.medium),\n            ) {\n                val (topLeftControls, topRightControls) = createRefs()\n                val (volumeSlider, brightnessSlider) = createRefs()\n                val unlockControlsButton = createRef()\n                val (bottomRightControls, bottomLeftControls) = createRefs()\n                val centerControls = createRef()\n                val seekbar = createRef()\n                val (playerUpdates) = createRefs()\n\n                val hasPreviousEpisode by viewModel.hasPreviousEpisode.collectAsState()\n                val hasNextEpisode by viewModel.hasNextEpisode.collectAsState()\n                val isBrightnessSliderShown by viewModel.isBrightnessSliderShown.collectAsState()\n                val isVolumeSliderShown by viewModel.isVolumeSliderShown.collectAsState()\n                val brightness by viewModel.currentBrightness.collectAsState()\n                val volume by viewModel.currentVolume.collectAsState()\n                val mpvVolume by viewModel.currentMPVVolume.collectAsState()\n                val swapVolumeAndBrightness by gesturePreferences.swapVolumeBrightness().collectAsState()\n                val reduceMotion by playerPreferences.reduceMotion().collectAsState()\n\n                LaunchedEffect(volume, mpvVolume, isVolumeSliderShown) {\n                    delay(2000)\n                    if (isVolumeSliderShown) viewModel.isVolumeSliderShown.update { false }\n                }\n                LaunchedEffect(brightness, isBrightnessSliderShown) {\n                    delay(2000)\n                    if (isBrightnessSliderShown) viewModel.isBrightnessSliderShown.update { false }\n                }\n                AnimatedVisibility(\n                    isBrightnessSliderShown,\n                    enter =\n                    if (!reduceMotion) {\n                        slideInHorizontally(playerControlsEnterAnimationSpec()) {\n                            if (swapVolumeAndBrightness) -it else it\n                        } +\n                            fadeIn(\n                                playerControlsEnterAnimationSpec(),\n                            )\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit =\n                    if (!reduceMotion) {\n                        slideOutHorizontally(playerControlsExitAnimationSpec()) {\n                            if (swapVolumeAndBrightness) -it else it\n                        } +\n                            fadeOut(\n                                playerControlsExitAnimationSpec(),\n                            )\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(brightnessSlider) {\n                        if (swapVolumeAndBrightness) {\n                            start.linkTo(parent.start, spacing.medium)\n                        } else {\n                            end.linkTo(parent.end, spacing.medium)\n                        }\n                        top.linkTo(parent.top)\n                        bottom.linkTo(parent.bottom)\n                    },\n                ) {\n                    BrightnessSlider(\n                        brightness = brightness,\n                        positiveRange = 0f..1f,\n                        negativeRange = 0f..0.75f,\n                    )\n                }\n\n                AnimatedVisibility(\n                    isVolumeSliderShown,\n                    enter =\n                    if (!reduceMotion) {\n                        slideInHorizontally(playerControlsEnterAnimationSpec()) {\n                            if (swapVolumeAndBrightness) it else -it\n                        } +\n                            fadeIn(\n                                playerControlsEnterAnimationSpec(),\n                            )\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit =\n                    if (!reduceMotion) {\n                        slideOutHorizontally(playerControlsExitAnimationSpec()) {\n                            if (swapVolumeAndBrightness) it else -it\n                        } +\n                            fadeOut(\n                                playerControlsExitAnimationSpec(),\n                            )\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(volumeSlider) {\n                        if (swapVolumeAndBrightness) {\n                            end.linkTo(parent.end, spacing.medium)\n                        } else {\n                            start.linkTo(parent.start, spacing.medium)\n                        }\n                        top.linkTo(parent.top)\n                        bottom.linkTo(parent.bottom)\n                    },\n                ) {\n                    val boostCap by audioPreferences.volumeBoostCap().collectAsState()\n                    val displayVolumeAsPercentage by playerPreferences.displayVolPer().collectAsState()\n                    VolumeSlider(\n                        volume = volume,\n                        mpvVolume = mpvVolume,\n                        range = 0..viewModel.maxVolume,\n                        boostRange = if (boostCap > 0) 0..audioPreferences.volumeBoostCap().get() else null,\n                        displayAsPercentage = displayVolumeAsPercentage,\n                    )\n                }\n\n                val currentPlayerUpdate by viewModel.playerUpdate.collectAsState()\n                val aspectRatio by playerPreferences.aspectState().collectAsState()\n                LaunchedEffect(currentPlayerUpdate, aspectRatio) {\n                    if (currentPlayerUpdate is PlayerUpdates.DoubleSpeed || currentPlayerUpdate is PlayerUpdates.None) {\n                        return@LaunchedEffect\n                    }\n                    delay(2000)\n                    viewModel.playerUpdate.update { PlayerUpdates.None }\n                }\n                AnimatedVisibility(\n                    currentPlayerUpdate !is PlayerUpdates.None,\n                    enter = fadeIn(playerControlsEnterAnimationSpec()),\n                    exit = fadeOut(playerControlsExitAnimationSpec()),\n                    modifier = Modifier.constrainAs(playerUpdates) {\n                        linkTo(parent.start, parent.end)\n                        linkTo(parent.top, parent.bottom, bias = 0.2f)\n                    },\n                ) {\n                    when (currentPlayerUpdate) {\n                        // is PlayerUpdates.DoubleSpeed -> DoubleSpeedPlayerUpdate()\n                        is PlayerUpdates.AspectRatio -> TextPlayerUpdate(stringResource(aspectRatio.titleRes))\n                        is PlayerUpdates.ShowText -> TextPlayerUpdate(\n                            (currentPlayerUpdate as PlayerUpdates.ShowText).value,\n                        )\n                        is PlayerUpdates.ShowTextResource -> TextPlayerUpdate(\n                            stringResource((currentPlayerUpdate as PlayerUpdates.ShowTextResource).textResource),\n                        )\n                        else -> {}\n                    }\n                }\n\n                AnimatedVisibility(\n                    controlsShown && areControlsLocked,\n                    enter = fadeIn(),\n                    exit = fadeOut(),\n                    modifier = Modifier.constrainAs(unlockControlsButton) {\n                        top.linkTo(parent.top, spacing.medium)\n                        start.linkTo(parent.start, spacing.medium)\n                    },\n                ) {\n                    ControlsButton(\n                        Icons.Filled.Lock,\n                        onClick = { viewModel.unlockControls() },\n                    )\n                }\n                AnimatedVisibility(\n                    visible =\n                    (controlsShown && !areControlsLocked || gestureSeekAmount != null) ||\n                        isLoading ||\n                        isLoadingEpisode,\n                    enter = fadeIn(playerControlsEnterAnimationSpec()),\n                    exit = fadeOut(playerControlsExitAnimationSpec()),\n                    modifier = Modifier.constrainAs(centerControls) {\n                        end.linkTo(parent.absoluteRight)\n                        start.linkTo(parent.absoluteLeft)\n                        top.linkTo(parent.top)\n                        bottom.linkTo(parent.bottom)\n                    },\n                ) {\n                    val showLoadingCircle by playerPreferences.showLoadingCircle().collectAsState()\n                    MiddlePlayerControls(\n                        hasPrevious = hasPreviousEpisode,\n                        onSkipPrevious = { viewModel.changeEpisode(true) },\n                        hasNext = hasNextEpisode,\n                        onSkipNext = { viewModel.changeEpisode(false) },\n                        isLoading = isLoading,\n                        isLoadingEpisode = isLoadingEpisode,\n                        controlsShown = controlsShown,\n                        areControlsLocked = areControlsLocked,\n                        showLoadingCircle = showLoadingCircle,\n                        paused = paused,\n                        gestureSeekAmount = gestureSeekAmount,\n                        onPlayPauseClick = viewModel::pauseUnpause,\n                        enter = fadeIn(playerControlsEnterAnimationSpec()),\n                        exit = fadeOut(playerControlsExitAnimationSpec()),\n                    )\n                }\n                AnimatedVisibility(\n                    visible = (controlsShown || seekBarShown) && !areControlsLocked,\n                    enter = if (!reduceMotion) {\n                        slideInVertically(playerControlsEnterAnimationSpec()) { it } +\n                            fadeIn(playerControlsEnterAnimationSpec())\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit = if (!reduceMotion) {\n                        slideOutVertically(playerControlsExitAnimationSpec()) { it } +\n                            fadeOut(playerControlsExitAnimationSpec())\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(seekbar) {\n                        bottom.linkTo(parent.bottom, spacing.medium)\n                    },\n                ) {\n                    val invertDuration by playerPreferences.invertDuration().collectAsState()\n                    val readAhead by viewModel.readAhead.collectAsState()\n                    val preciseSeeking by gesturePreferences.playerSmoothSeek().collectAsState()\n                    SeekbarWithTimers(\n                        position = position,\n                        duration = duration,\n                        readAheadValue = readAhead,\n                        onValueChange = {\n                            isSeeking = true\n                            viewModel.updatePlayBackPos(it)\n                            viewModel.seekTo(it.toInt(), preciseSeeking)\n                        },\n                        onValueChangeFinished = { isSeeking = false },\n                        timersInverted = Pair(false, invertDuration),\n                        durationTimerOnCLick = { playerPreferences.invertDuration().set(!invertDuration) },\n                        positionTimerOnClick = {},\n                        chapters = chapters.map { it.toSegment() }.toImmutableList(),\n                    )\n                }\n                val mediaTitle by viewModel.mediaTitle.collectAsState()\n                val animeTitle by viewModel.animeTitle.collectAsState()\n                AnimatedVisibility(\n                    controlsShown && !areControlsLocked,\n                    enter = if (!reduceMotion) {\n                        slideInHorizontally(playerControlsEnterAnimationSpec()) { -it } +\n                            fadeIn(playerControlsEnterAnimationSpec())\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit = if (!reduceMotion) {\n                        slideOutHorizontally(playerControlsExitAnimationSpec()) { -it } +\n                            fadeOut(playerControlsExitAnimationSpec())\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(topLeftControls) {\n                        top.linkTo(parent.top, spacing.medium)\n                        start.linkTo(parent.start)\n                        width = Dimension.fillToConstraints\n                        end.linkTo(topRightControls.start)\n                    },\n                ) {\n                    TopLeftPlayerControls(\n                        animeTitle = animeTitle,\n                        mediaTitle = mediaTitle,\n                        onTitleClick = { viewModel.showEpisodeListDialog() },\n                        onBackClick = onBackPress,\n                    )\n                }\n                // Top right controls\n                val autoPlayEnabled by playerPreferences.autoplayEnabled().collectAsState()\n                val isEpisodeOnline by viewModel.isEpisodeOnline.collectAsState()\n                AnimatedVisibility(\n                    controlsShown && !areControlsLocked,\n                    enter = if (!reduceMotion) {\n                        slideInHorizontally(playerControlsEnterAnimationSpec()) { it } +\n                            fadeIn(playerControlsEnterAnimationSpec())\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit = if (!reduceMotion) {\n                        slideOutHorizontally(playerControlsExitAnimationSpec()) { it } +\n                            fadeOut(playerControlsExitAnimationSpec())\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(topRightControls) {\n                        top.linkTo(parent.top, spacing.medium)\n                        end.linkTo(parent.end)\n                    },\n                ) {\n                    TopRightPlayerControls(\n                        autoPlayEnabled = autoPlayEnabled,\n                        onToggleAutoPlay = { viewModel.setAutoPlay(it) },\n                        onSubtitlesClick = { viewModel.showSheet(Sheets.SubtitleTracks) },\n                        onSubtitlesLongClick = { viewModel.showPanel(Panels.SubtitleSettings) },\n                        onAudioClick = { viewModel.showSheet(Sheets.AudioTracks) },\n                        onAudioLongClick = { viewModel.showPanel(Panels.AudioDelay) },\n                        onQualityClick = { viewModel.showSheet(Sheets.QualityTracks) },\n                        isEpisodeOnline = isEpisodeOnline,\n                        onMoreClick = { viewModel.showSheet(Sheets.More) },\n                        onMoreLongClick = { viewModel.showPanel(Panels.VideoFilters) },\n                    )\n                }\n                // Bottom right controls\n                val skipIntroButton by viewModel.skipIntroText.collectAsState()\n                val customButtonTitle by viewModel.primaryButtonTitle.collectAsState()\n                AnimatedVisibility(\n                    controlsShown && !areControlsLocked,\n                    enter = if (!reduceMotion) {\n                        slideInHorizontally(playerControlsEnterAnimationSpec()) { it } +\n                            fadeIn(playerControlsEnterAnimationSpec())\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit = if (!reduceMotion) {\n                        slideOutHorizontally(playerControlsExitAnimationSpec()) { it } +\n                            fadeOut(playerControlsExitAnimationSpec())\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(bottomRightControls) {\n                        bottom.linkTo(seekbar.top)\n                        end.linkTo(seekbar.end)\n                    },\n                ) {\n                    val activity = LocalContext.current as PlayerActivity\n                    BottomRightPlayerControls(\n                        customButton = customButton,\n                        customButtonTitle = customButtonTitle,\n                        skipIntroButton = skipIntroButton,\n                        onPressSkipIntroButton = viewModel::onSkipIntro,\n                        isPipAvailable = activity.isPipSupportedAndEnabled,\n                        onPipClick = {\n                            if (!viewModel.isLoadingEpisode.value) {\n                                activity.enterPictureInPictureMode(activity.createPipParams())\n                            }\n                        },\n                        onAspectClick = {\n                            viewModel.changeVideoAspect(\n                                when (aspectRatio) {\n                                    VideoAspect.Fit -> VideoAspect.Stretch\n                                    VideoAspect.Stretch -> VideoAspect.Crop\n                                    VideoAspect.Crop -> VideoAspect.Fit\n                                },\n                            )\n                        },\n                    )\n                }\n                // Bottom left controls\n                val playbackSpeed by viewModel.playbackSpeed.collectAsState()\n                AnimatedVisibility(\n                    controlsShown && !areControlsLocked,\n                    enter = if (!reduceMotion) {\n                        slideInHorizontally(playerControlsEnterAnimationSpec()) { -it } +\n                            fadeIn(playerControlsEnterAnimationSpec())\n                    } else {\n                        fadeIn(playerControlsEnterAnimationSpec())\n                    },\n                    exit = if (!reduceMotion) {\n                        slideOutHorizontally(playerControlsExitAnimationSpec()) { -it } +\n                            fadeOut(playerControlsExitAnimationSpec())\n                    } else {\n                        fadeOut(playerControlsExitAnimationSpec())\n                    },\n                    modifier = Modifier.constrainAs(bottomLeftControls) {\n                        bottom.linkTo(seekbar.top)\n                        start.linkTo(seekbar.start)\n                        width = Dimension.fillToConstraints\n                        end.linkTo(bottomRightControls.start)\n                    },\n                ) {\n                    BottomLeftPlayerControls(\n                        playbackSpeed,\n                        currentChapter = currentChapter?.toSegment(),\n                        onLockControls = viewModel::lockControls,\n                        onCycleRotation = viewModel::cycleScreenRotations,\n                        onPlaybackSpeedChange = {\n                            MPVLib.setPropertyDouble(\"speed\", it.toDouble())\n                        },\n                        onOpenSheet = viewModel::showSheet,\n                    )\n                }\n            }\n        }\n\n        val sheetShown by viewModel.sheetShown.collectAsState()\n        val dismissSheet by viewModel.dismissSheet.collectAsState()\n        val subtitles by viewModel.subtitleTracks.collectAsState()\n        val selectedSubtitles by viewModel.selectedSubtitles.collectAsState()\n        val audioTracks by viewModel.audioTracks.collectAsState()\n        val selectedAudio by viewModel.selectedAudio.collectAsState()\n        val isLoadingHosters by viewModel.isLoadingHosters.collectAsState()\n        val hosterState by viewModel.hosterState.collectAsState()\n        val expandedState by viewModel.hosterExpandedList.collectAsState()\n        val selectedHosterVideoIndex by viewModel.selectedHosterVideoIndex.collectAsState()\n        val decoder by viewModel.currentDecoder.collectAsState()\n        val speed by viewModel.playbackSpeed.collectAsState()\n        val sleepTimerTimeRemaining by viewModel.remainingTime.collectAsState()\n        val showSubtitles by subtitlePreferences.screenshotSubtitles().collectAsState()\n        val currentSource by viewModel.currentSource.collectAsState()\n        val showFailedHosters by playerPreferences.showFailedHosters().collectAsState()\n        val emptyHosters by playerPreferences.showEmptyHosters().collectAsState()\n\n        PlayerSheets(\n            sheetShown = sheetShown,\n            subtitles = subtitles.toImmutableList(),\n            selectedSubtitles = selectedSubtitles.toList().toImmutableList(),\n            onAddSubtitle = viewModel::addSubtitle,\n            onSelectSubtitle = viewModel::selectSub,\n            audioTracks = audioTracks.toImmutableList(),\n            selectedAudio = selectedAudio,\n            onAddAudio = viewModel::addAudio,\n            onSelectAudio = viewModel::selectAudio,\n\n            isLoadingHosters = isLoadingHosters,\n\n            hosterState = hosterState,\n            expandedState = expandedState,\n            selectedVideoIndex = selectedHosterVideoIndex,\n            onClickHoster = viewModel::onHosterClicked,\n            onClickVideo = viewModel::onVideoClicked,\n            displayHosters = Pair(showFailedHosters, emptyHosters),\n\n            chapter = currentChapter?.toSegment(),\n            chapters = chapters.map { it.toSegment() }.toImmutableList(),\n            onSeekToChapter = {\n                viewModel.selectChapter(it)\n                viewModel.dismissSheet()\n                viewModel.unpause()\n            },\n            decoder = decoder,\n            onUpdateDecoder = viewModel::updateDecoder,\n            speed = speed,\n            onSpeedChange = { MPVLib.setPropertyDouble(\"speed\", it.toFixed(2).toDouble()) },\n            sleepTimerTimeRemaining = sleepTimerTimeRemaining,\n            onStartSleepTimer = viewModel::startTimer,\n            buttons = customButtons.getButtons().toImmutableList(),\n\n            isLocalSource = currentSource?.id == LocalAnimeSource.ID,\n            showSubtitles = showSubtitles,\n            onToggleShowSubtitles = { subtitlePreferences.screenshotSubtitles().set(it) },\n            cachePath = viewModel.cachePath,\n            onSetAsArt = viewModel::setAsArt,\n            onShare = { viewModel.shareImage(it, viewModel.pos.value.toInt()) },\n            onSave = { viewModel.saveImage(it, viewModel.pos.value.toInt()) },\n            takeScreenshot = viewModel::takeScreenshot,\n            onDismissScreenshot = {\n                viewModel.showSheet(Sheets.None)\n                viewModel.unpause()\n            },\n            onOpenPanel = viewModel::showPanel,\n            onDismissRequest = { viewModel.showSheet(Sheets.None) },\n            dismissSheet = dismissSheet,\n        )\n        val panel by viewModel.panelShown.collectAsState()\n        PlayerPanels(\n            panelShown = panel,\n            onDismissRequest = { viewModel.showPanel(Panels.None) },\n        )\n\n        val activity = LocalContext.current as PlayerActivity\n        val dialog by viewModel.dialogShown.collectAsState()\n        val anime by viewModel.currentAnime.collectAsState()\n        val playlist by viewModel.currentPlaylist.collectAsState()\n\n        PlayerDialogs(\n            dialogShown = dialog,\n            episodeDisplayMode = anime?.displayMode,\n            episodeList = playlist,\n            currentEpisodeIndex = viewModel.getCurrentEpisodeIndex(),\n            dateRelativeTime = viewModel.relativeTime,\n            dateFormat = viewModel.dateFormat,\n            onBookmarkClicked = viewModel::bookmarkEpisode,\n            onFillermarkClicked = viewModel::fillermarkEpisode,\n            onEpisodeClicked = {\n                viewModel.showDialog(Dialogs.None)\n                activity.changeEpisode(it)\n            },\n            onDismissRequest = { viewModel.showDialog(Dialogs.None) },\n        )\n\n        BrightnessOverlay(\n            brightness = currentBrightness,\n        )\n    }\n}\n\nfun <T> playerControlsExitAnimationSpec(): FiniteAnimationSpec<T> = tween(\n    durationMillis = 300,\n    easing = FastOutSlowInEasing,\n)\n\nfun <T> playerControlsEnterAnimationSpec(): FiniteAnimationSpec<T> = tween(\n    durationMillis = 100,\n    easing = LinearOutSlowInEasing,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerDialogs.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.runtime.Composable\nimport eu.kanade.tachiyomi.data.database.models.anime.Episode\nimport eu.kanade.tachiyomi.ui.player.Dialogs\nimport eu.kanade.tachiyomi.ui.player.controls.components.dialogs.EpisodeListDialog\nimport eu.kanade.tachiyomi.ui.player.controls.components.dialogs.IntegerPickerDialog\nimport java.time.format.DateTimeFormatter\n\n@Composable\nfun PlayerDialogs(\n    dialogShown: Dialogs,\n\n    // Episode list\n    episodeDisplayMode: Long?,\n    currentEpisodeIndex: Int,\n    episodeList: List<Episode>,\n    dateRelativeTime: Boolean,\n    dateFormat: DateTimeFormatter,\n    onBookmarkClicked: (Long?, Boolean) -> Unit,\n    onFillermarkClicked: (Long?, Boolean) -> Unit,\n    onEpisodeClicked: (Long?) -> Unit,\n\n    onDismissRequest: () -> Unit,\n) {\n    when (dialogShown) {\n        Dialogs.None -> {}\n        Dialogs.EpisodeList -> {\n            EpisodeListDialog(\n                displayMode = episodeDisplayMode,\n                currentEpisodeIndex = currentEpisodeIndex,\n                episodeList = episodeList,\n                dateRelativeTime = dateRelativeTime,\n                dateFormat = dateFormat,\n                onBookmarkClicked = onBookmarkClicked,\n                onFillermarkClicked = onFillermarkClicked,\n                onEpisodeClicked = onEpisodeClicked,\n                onDismissRequest = onDismissRequest,\n            )\n        }\n        is Dialogs.IntegerPicker -> {\n            IntegerPickerDialog(\n                defaultValue = dialogShown.defaultValue,\n                minValue = dialogShown.minValue,\n                maxValue = dialogShown.maxValue,\n                step = dialogShown.step,\n                nameFormat = dialogShown.nameFormat,\n                title = dialogShown.title,\n                onChange = dialogShown.onChange,\n                onDismissRequest = dialogShown.onDismissRequest,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerPanels.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\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.layout.Box\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.material3.CardColors\nimport androidx.compose.material3.CardDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.ui.player.Panels\nimport eu.kanade.tachiyomi.ui.player.controls.components.panels.AudioDelayPanel\nimport eu.kanade.tachiyomi.ui.player.controls.components.panels.SubtitleDelayPanel\nimport eu.kanade.tachiyomi.ui.player.controls.components.panels.SubtitleSettingsPanel\nimport eu.kanade.tachiyomi.ui.player.controls.components.panels.VideoFiltersPanel\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun PlayerPanels(\n    panelShown: Panels,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    AnimatedContent(\n        targetState = panelShown,\n        label = \"panels\",\n        contentAlignment = Alignment.CenterEnd,\n        contentKey = { it.name },\n        transitionSpec = {\n            fadeIn() + slideInHorizontally { it / 3 } togetherWith fadeOut() + slideOutHorizontally { it / 2 }\n        },\n        modifier = modifier,\n    ) { currentPanel ->\n        when (currentPanel) {\n            Panels.None -> {\n                Box(Modifier.fillMaxHeight())\n            }\n            Panels.SubtitleSettings -> {\n                SubtitleSettingsPanel(onDismissRequest)\n            }\n            Panels.SubtitleDelay -> {\n                SubtitleDelayPanel(onDismissRequest)\n            }\n            Panels.AudioDelay -> {\n                AudioDelayPanel(onDismissRequest)\n            }\n            Panels.VideoFilters -> {\n                VideoFiltersPanel(onDismissRequest)\n            }\n        }\n    }\n}\n\nval CARDS_MAX_WIDTH = 420.dp\nval panelCardsColors: @Composable () -> CardColors = {\n    val playerPreferences = remember { Injekt.get<PlayerPreferences>() }\n\n    val colors = CardDefaults.cardColors()\n    colors.copy(\n        containerColor = MaterialTheme.colorScheme.surface.copy(playerPreferences.panelOpacity().get() / 100f),\n        disabledContainerColor = MaterialTheme.colorScheme.surfaceDim.copy(\n            playerPreferences.panelOpacity().get() / 100f,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerSheets.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport android.net.Uri\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.runtime.Composable\nimport dev.vivvvek.seeker.Segment\nimport eu.kanade.tachiyomi.ui.player.ArtType\nimport eu.kanade.tachiyomi.ui.player.Decoder\nimport eu.kanade.tachiyomi.ui.player.Panels\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel.VideoTrack\nimport eu.kanade.tachiyomi.ui.player.Sheets\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.AudioTracksSheet\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.ChaptersSheet\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.HosterState\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.MoreSheet\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.PlaybackSpeedSheet\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.QualitySheet\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.ScreenshotSheet\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.SubtitlesSheet\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport java.io.InputStream\n\n@Composable\nfun PlayerSheets(\n    sheetShown: Sheets,\n\n    // subtitles sheet\n    subtitles: ImmutableList<VideoTrack>,\n    selectedSubtitles: ImmutableList<Int>,\n    onAddSubtitle: (Uri) -> Unit,\n    onSelectSubtitle: (Int) -> Unit,\n\n    // audio sheet\n    audioTracks: ImmutableList<VideoTrack>,\n    selectedAudio: Int,\n    onAddAudio: (Uri) -> Unit,\n    onSelectAudio: (Int) -> Unit,\n\n    // video sheet\n    isLoadingHosters: Boolean,\n    hosterState: List<HosterState>,\n    expandedState: List<Boolean>,\n    selectedVideoIndex: Pair<Int, Int>,\n    onClickHoster: (Int) -> Unit,\n    onClickVideo: (Int, Int) -> Unit,\n    displayHosters: Pair<Boolean, Boolean>,\n\n    // chapters sheet\n    chapter: Segment?,\n    chapters: ImmutableList<Segment>,\n    onSeekToChapter: (Int) -> Unit,\n\n    // Decoders sheet\n    decoder: Decoder,\n    onUpdateDecoder: (Decoder) -> Unit,\n\n    // Speed sheet\n    speed: Float,\n    onSpeedChange: (Float) -> Unit,\n\n    // More sheet\n    sleepTimerTimeRemaining: Int,\n    onStartSleepTimer: (Int) -> Unit,\n    buttons: ImmutableList<CustomButton>,\n\n    // Screenshot sheet\n    isLocalSource: Boolean,\n    showSubtitles: Boolean,\n    onToggleShowSubtitles: (Boolean) -> Unit,\n    cachePath: String,\n    onSetAsArt: (ArtType, (() -> InputStream)) -> Unit,\n    onShare: (() -> InputStream) -> Unit,\n    onSave: (() -> InputStream) -> Unit,\n    takeScreenshot: (String, Boolean) -> InputStream?,\n    onDismissScreenshot: () -> Unit,\n\n    onOpenPanel: (Panels) -> Unit,\n    onDismissRequest: () -> Unit,\n    dismissSheet: Boolean,\n) {\n    when (sheetShown) {\n        Sheets.None -> {}\n        Sheets.SubtitleTracks -> {\n            val subtitlesPicker = rememberLauncherForActivityResult(\n                ActivityResultContracts.OpenDocument(),\n            ) {\n                if (it == null) return@rememberLauncherForActivityResult\n                onAddSubtitle(it)\n            }\n            SubtitlesSheet(\n                tracks = subtitles.toImmutableList(),\n                selectedTracks = selectedSubtitles,\n                onSelect = onSelectSubtitle,\n                onAddSubtitle = { subtitlesPicker.launch(arrayOf(\"*/*\")) },\n                onOpenSubtitleSettings = { onOpenPanel(Panels.SubtitleSettings) },\n                onOpenSubtitleDelay = { onOpenPanel(Panels.SubtitleDelay) },\n                onDismissRequest = onDismissRequest,\n            )\n        }\n\n        Sheets.AudioTracks -> {\n            val audioPicker = rememberLauncherForActivityResult(\n                ActivityResultContracts.OpenDocument(),\n            ) {\n                if (it == null) return@rememberLauncherForActivityResult\n                onAddAudio(it)\n            }\n            AudioTracksSheet(\n                tracks = audioTracks,\n                selectedId = selectedAudio,\n                onSelect = onSelectAudio,\n                onAddAudioTrack = { audioPicker.launch(arrayOf(\"*/*\")) },\n                onOpenDelayPanel = { onOpenPanel(Panels.AudioDelay) },\n                onDismissRequest = onDismissRequest,\n            )\n        }\n\n        Sheets.QualityTracks -> {\n            QualitySheet(\n                isLoadingHosters = isLoadingHosters,\n                hosterState = hosterState,\n                expandedState = expandedState,\n                selectedVideoIndex = selectedVideoIndex,\n                onClickHoster = onClickHoster,\n                onClickVideo = onClickVideo,\n                displayHosters = displayHosters,\n                onDismissRequest = onDismissRequest,\n                dismissSheet = dismissSheet,\n            )\n        }\n\n        Sheets.Chapters -> {\n            if (chapter == null) return\n            ChaptersSheet(\n                chapters = chapters,\n                currentChapter = chapter,\n                onClick = { onSeekToChapter(chapters.indexOf(it)) },\n                onDismissRequest = onDismissRequest,\n                dismissSheet = dismissSheet,\n            )\n        }\n\n        Sheets.More -> {\n            MoreSheet(\n                selectedDecoder = decoder,\n                onSelectDecoder = onUpdateDecoder,\n                remainingTime = sleepTimerTimeRemaining,\n                onStartTimer = onStartSleepTimer,\n                onDismissRequest = onDismissRequest,\n                onEnterFiltersPanel = { onOpenPanel(Panels.VideoFilters) },\n                customButtons = buttons,\n            )\n        }\n\n        Sheets.PlaybackSpeed -> {\n            PlaybackSpeedSheet(\n                speed,\n                onSpeedChange = onSpeedChange,\n                onDismissRequest = onDismissRequest,\n            )\n        }\n\n        Sheets.Screenshot -> {\n            ScreenshotSheet(\n                isLocalSource = isLocalSource,\n                hasSubTracks = subtitles.isNotEmpty(),\n                showSubtitles = showSubtitles,\n                onToggleShowSubtitles = onToggleShowSubtitles,\n                cachePath = cachePath,\n                onSetAsArt = onSetAsArt,\n                onShare = onShare,\n                onSave = onSave,\n                takeScreenshot = takeScreenshot,\n                onDismissRequest = onDismissScreenshot,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/TopLeftPlayerControls.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\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.Color\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.sp\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun TopLeftPlayerControls(\n    animeTitle: String,\n    mediaTitle: String,\n    onTitleClick: () -> Unit,\n    onBackClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier,\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.mediumSmall),\n    ) {\n        ControlsButton(\n            icon = Icons.AutoMirrored.Default.ArrowBack,\n            onClick = onBackClick,\n        )\n        Column(\n            verticalArrangement = Arrangement.spacedBy(-MaterialTheme.padding.extraSmall),\n            modifier = Modifier\n                .clickable(onClick = onTitleClick),\n        ) {\n            Text(\n                animeTitle,\n                fontSize = 16.sp,\n                maxLines = 1,\n                overflow = TextOverflow.Ellipsis,\n                color = Color.White,\n                style = MaterialTheme.typography.bodyLarge,\n            )\n            Text(\n                mediaTitle,\n                fontSize = 14.sp,\n                maxLines = 1,\n                overflow = TextOverflow.Ellipsis,\n                color = Color.White.copy(alpha = 0.5f),\n                style = MaterialTheme.typography.bodyLarge,\n                fontStyle = FontStyle.Italic,\n            )\n        }\n    }\n}\n\n@Preview\n@Composable\nfun TopLeftPlayerControlsPreview() {\n    TopLeftPlayerControls(\n        animeTitle = \"Bleach\",\n        mediaTitle = \"Episode 1 - A Shinigami is born\",\n        onTitleClick = {},\n        onBackClick = {},\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/TopRightPlayerControls.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Audiotrack\nimport androidx.compose.material.icons.filled.HighQuality\nimport androidx.compose.material.icons.filled.MoreVert\nimport androidx.compose.material.icons.filled.Subtitles\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\nimport eu.kanade.tachiyomi.ui.player.controls.components.AutoPlaySwitch\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun TopRightPlayerControls(\n    // auto-play\n    autoPlayEnabled: Boolean,\n    onToggleAutoPlay: (Boolean) -> Unit,\n\n    // subtitles\n    onSubtitlesClick: () -> Unit,\n    onSubtitlesLongClick: () -> Unit,\n\n    // audio\n    onAudioClick: () -> Unit,\n    onAudioLongClick: () -> Unit,\n\n    // video\n    onQualityClick: () -> Unit,\n    isEpisodeOnline: Boolean?,\n\n    // more\n    onMoreClick: () -> Unit,\n    onMoreLongClick: () -> Unit,\n\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier,\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.Absolute.SpaceEvenly,\n    ) {\n        AutoPlaySwitch(\n            isChecked = autoPlayEnabled,\n            onToggleAutoPlay = onToggleAutoPlay,\n            modifier = Modifier\n                .padding(vertical = MaterialTheme.padding.medium, horizontal = MaterialTheme.padding.mediumSmall)\n                .size(width = 48.dp, height = 24.dp),\n        )\n        ControlsButton(\n            icon = Icons.Default.Subtitles,\n            onClick = onSubtitlesClick,\n            onLongClick = onSubtitlesLongClick,\n            horizontalSpacing = MaterialTheme.padding.mediumSmall,\n        )\n        ControlsButton(\n            icon = Icons.Default.Audiotrack,\n            onClick = onAudioClick,\n            onLongClick = onAudioLongClick,\n            horizontalSpacing = MaterialTheme.padding.mediumSmall,\n        )\n        if (isEpisodeOnline == true) {\n            ControlsButton(\n                icon = Icons.Default.HighQuality,\n                onClick = onQualityClick,\n                onLongClick = onQualityClick,\n                horizontalSpacing = MaterialTheme.padding.mediumSmall,\n            )\n        }\n        ControlsButton(\n            icon = Icons.Default.MoreVert,\n            onClick = onMoreClick,\n            onLongClick = onMoreLongClick,\n            horizontalSpacing = MaterialTheme.padding.mediumSmall,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/AutoPlaySwitch.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.animation.core.Animatable\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.indication\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.PauseCircle\nimport androidx.compose.material.icons.filled.PlayCircle\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ShapeDefaults\nimport androidx.compose.material3.ripple\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.BiasAlignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.ui.player.controls.LocalPlayerButtonsClickEvent\n\n@Composable\nfun AutoPlaySwitch(\n    isChecked: Boolean,\n    onToggleAutoPlay: (Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n    iconSize: Dp = 24.dp,\n) {\n    val interactionSource = remember { MutableInteractionSource() }\n    val clickEvent = LocalPlayerButtonsClickEvent.current\n\n    val alignment = remember { Animatable(if (isChecked) 1f else -1f) }\n\n    LaunchedEffect(isChecked) {\n        alignment.animateTo(\n            targetValue = if (isChecked) 1f else -1f,\n            animationSpec = tween(durationMillis = 250),\n        )\n    }\n\n    val (thumbIcon, thumbColor, trackColor) = if (isChecked) {\n        Triple(\n            Icons.Filled.PlayCircle,\n            MaterialTheme.colorScheme.primary,\n            MaterialTheme.colorScheme.secondaryContainer,\n\n        )\n    } else {\n        Triple(\n            Icons.Filled.PauseCircle,\n            Color.White,\n            Color.LightGray,\n        )\n    }\n\n    Box(\n        modifier = modifier.clickable(\n            interactionSource = interactionSource,\n            indication = null,\n        ) {\n            clickEvent()\n            onToggleAutoPlay(!isChecked)\n        },\n        contentAlignment = Alignment.Center,\n    ) {\n        Box(\n            modifier = Modifier\n                .fillMaxWidth(fraction = 5 / 6f)\n                .fillMaxHeight(fraction = 2 / 3f)\n                .background(color = trackColor, shape = ShapeDefaults.ExtraLarge),\n        )\n\n        Icon(\n            imageVector = thumbIcon,\n            contentDescription = null,\n            modifier = Modifier\n                .size(iconSize)\n                .background(color = Color.Unspecified, shape = CircleShape)\n                .indication(interactionSource, ripple(bounded = false, radius = iconSize * 2 / 3))\n                .align(BiasAlignment(horizontalBias = alignment.value, verticalBias = 0f)),\n            tint = thumbColor,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/BrightnessOverlay.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.annotation.FloatRange\nimport androidx.compose.foundation.Canvas\nimport androidx.compose.foundation.layout.fillMaxSize\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.graphicsLayer\nimport kotlin.math.abs\n\n@Composable\nfun BrightnessOverlay(\n    @FloatRange(from = -0.75, to = 1.0) brightness: Float,\n    modifier: Modifier = Modifier,\n) {\n    if (brightness < 0) {\n        val brightnessAlpha = remember(brightness) {\n            abs(brightness)\n        }\n\n        Canvas(\n            modifier = modifier\n                .fillMaxSize()\n                .graphicsLayer {\n                    alpha = brightnessAlpha\n                },\n        ) {\n            drawRect(Color.Black)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/ControlsButton.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.indication\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.CatchingPokemon\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.ripple\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\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.tooling.preview.Preview\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.ui.player.controls.LocalPlayerButtonsClickEvent\nimport tachiyomi.presentation.core.components.material.Button\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun ControlsButton(\n    icon: ImageVector,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit = {},\n    title: String? = null,\n    color: Color = Color.White,\n    horizontalSpacing: Dp = MaterialTheme.padding.medium,\n    iconSize: Dp = 20.dp,\n    enabled: Boolean = true,\n    modifier: Modifier = Modifier,\n) {\n    val interactionSource = remember { MutableInteractionSource() }\n    val clickEvent = LocalPlayerButtonsClickEvent.current\n    val iconColor = if (enabled) color else color.copy(alpha = DISABLED_ALPHA)\n\n    Box(\n        modifier = modifier\n            .combinedClickable(\n                enabled = enabled,\n                onClick = {\n                    clickEvent()\n                    onClick()\n                },\n                onLongClick = onLongClick,\n                interactionSource = interactionSource,\n                indication = null,\n            )\n            .clip(CircleShape)\n            .indication(\n                interactionSource,\n                ripple(),\n            )\n            .padding(\n                vertical = MaterialTheme.padding.medium,\n                horizontal = horizontalSpacing,\n            ),\n    ) {\n        Icon(\n            icon,\n            title,\n            tint = iconColor,\n            modifier = Modifier.size(iconSize),\n        )\n    }\n}\n\n@Composable\nfun ControlsButton(\n    text: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    onLongClick: () -> Unit = {},\n    color: Color = Color.White,\n) {\n    val interactionSource = remember { MutableInteractionSource() }\n\n    val clickEvent = LocalPlayerButtonsClickEvent.current\n    Box(\n        modifier = modifier\n            .combinedClickable(\n                onClick = {\n                    clickEvent()\n                    onClick()\n                },\n                onLongClick = onLongClick,\n                interactionSource = interactionSource,\n                indication = null,\n\n            )\n            .clip(CircleShape)\n            .indication(\n                interactionSource,\n                ripple(),\n            )\n            .padding(MaterialTheme.padding.medium),\n    ) {\n        Text(\n            text,\n            color = color,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n\n@Composable\nfun FilledControlsButton(\n    text: String,\n    onClick: () -> Unit,\n    onLongClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val interactionSource = remember { MutableInteractionSource() }\n    val clickEvent = LocalPlayerButtonsClickEvent.current\n\n    Box(\n        modifier = modifier.padding(end = MaterialTheme.padding.small),\n    ) {\n        Button(onClick = {}) {\n            Text(text = text)\n        }\n        Box(\n            modifier = Modifier\n                .matchParentSize()\n                .combinedClickable(\n                    onClick = {\n                        clickEvent()\n                        onClick()\n                    },\n                    onLongClick = onLongClick,\n                    interactionSource = interactionSource,\n                    indication = null,\n                ),\n        )\n    }\n}\n\n@Preview\n@Composable\nprivate fun PreviewControlsButton() {\n    ControlsButton(\n        Icons.Default.CatchingPokemon,\n        onClick = {},\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/CurrentChapter.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.SizeTransform\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutVertically\nimport androidx.compose.animation.togetherWith\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.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Bookmarks\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.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport dev.vivvvek.seeker.Segment\nimport `is`.xyz.mpv.Utils\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun CurrentChapter(\n    chapter: Segment,\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit = {},\n) {\n    Box(\n        modifier = modifier\n            .clip(RoundedCornerShape(25))\n            .background(MaterialTheme.colorScheme.background.copy(alpha = 0.6F))\n            .clickable(onClick = onClick)\n            .padding(horizontal = MaterialTheme.padding.mediumSmall, vertical = MaterialTheme.padding.small),\n    ) {\n        AnimatedContent(\n            targetState = chapter,\n            transitionSpec = {\n                if (targetState.start > initialState.start) {\n                    (slideInVertically { height -> height } + fadeIn())\n                        .togetherWith(slideOutVertically { height -> -height } + fadeOut())\n                } else {\n                    (slideInVertically { height -> -height } + fadeIn())\n                        .togetherWith(slideOutVertically { height -> height } + fadeOut())\n                }.using(\n                    SizeTransform(clip = false),\n                )\n            },\n            label = \"Chapter\",\n        ) { currentChapter ->\n            Row(\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            ) {\n                Icon(\n                    imageVector = Icons.Default.Bookmarks,\n                    contentDescription = null,\n                    modifier = Modifier\n                        .padding(end = MaterialTheme.padding.extraSmall)\n                        .size(16.dp),\n                    tint = MaterialTheme.colorScheme.onBackground,\n                )\n                Text(\n                    text = Utils.prettyTime(currentChapter.start.toInt()),\n                    fontWeight = FontWeight.ExtraBold,\n                    style = MaterialTheme.typography.bodyMedium,\n                    maxLines = 1,\n                    overflow = TextOverflow.Clip,\n                    color = MaterialTheme.colorScheme.tertiary,\n                )\n                currentChapter.name.let {\n                    Text(\n                        text = Typography.bullet.toString(),\n                        textAlign = TextAlign.Center,\n                        style = MaterialTheme.typography.bodyMedium,\n                        maxLines = 1,\n                        color = MaterialTheme.colorScheme.onSurface,\n                        overflow = TextOverflow.Clip,\n                    )\n                    Text(\n                        text = it,\n                        textAlign = TextAlign.Center,\n                        style = MaterialTheme.typography.bodyMedium,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                        fontWeight = FontWeight.Bold,\n                        color = MaterialTheme.colorScheme.onBackground,\n                    )\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/DoubleTapSeekTriangles.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.animation.core.Animatable\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material3.Icon\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.draw.alpha\nimport androidx.compose.ui.draw.rotate\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.tachiyomi.R\n\n@Composable\nfun DoubleTapSeekTriangles(isForward: Boolean) {\n    val animationDuration = 750L\n\n    val alpha1 = remember { Animatable(0f) }\n    val alpha2 = remember { Animatable(0f) }\n    val alpha3 = remember { Animatable(0f) }\n\n    LaunchedEffect(animationDuration) {\n        while (true) {\n            alpha1.animateTo(1f, animationSpec = tween((animationDuration / 5).toInt()))\n            alpha2.animateTo(1f, animationSpec = tween((animationDuration / 5).toInt()))\n            alpha3.animateTo(1f, animationSpec = tween((animationDuration / 5).toInt()))\n            alpha1.animateTo(0f, animationSpec = tween((animationDuration / 5).toInt()))\n            alpha2.animateTo(0f, animationSpec = tween((animationDuration / 5).toInt()))\n            alpha3.animateTo(0f, animationSpec = tween((animationDuration / 5).toInt()))\n        }\n    }\n\n    val rotation = if (isForward) 0f else 180f\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n        modifier = Modifier.rotate(rotation),\n    ) {\n        DoubleTapArrow(alpha1.value)\n        DoubleTapArrow(alpha2.value)\n        DoubleTapArrow(alpha3.value)\n    }\n}\n\n@Composable\nprivate fun DoubleTapArrow(\n    alpha: Float,\n) {\n    Icon(\n        painter = painterResource(R.drawable.ic_play_seek_triangle),\n        contentDescription = null,\n        modifier = Modifier\n            .size(width = 16.dp, height = 20.dp)\n            .alpha(alpha = alpha),\n        tint = Color.White,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/PlayerUpdates.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.shape.RoundedCornerShape\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.unit.dp\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun PlayerUpdate(\n    modifier: Modifier = Modifier,\n    content: @Composable () -> Unit = {},\n) {\n    Box(\n        modifier = modifier\n            .clip(RoundedCornerShape(16.dp))\n            .background(Color.Black.copy(0.4f))\n            .padding(vertical = MaterialTheme.padding.small, horizontal = MaterialTheme.padding.medium)\n            .animateContentSize(),\n        contentAlignment = Alignment.Center,\n    ) { content() }\n}\n\n@Composable\nfun TextPlayerUpdate(\n    text: String,\n    modifier: Modifier = Modifier,\n) {\n    PlayerUpdate(modifier) {\n        Text(text)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/SeekBar.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.layout.wrapContentHeight\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.ripple\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport dev.vivvvek.seeker.Seeker\nimport dev.vivvvek.seeker.SeekerDefaults\nimport dev.vivvvek.seeker.Segment\nimport eu.kanade.tachiyomi.animesource.model.ChapterType\nimport eu.kanade.tachiyomi.ui.player.controls.LocalPlayerButtonsClickEvent\nimport `is`.xyz.mpv.Utils\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.presentation.core.components.material.padding\n\n@Immutable\ndata class IndexedSegment(\n    val name: String,\n    val start: Float,\n    val color: Color = Color.Unspecified,\n    val index: Int = 0,\n    val chapterType: ChapterType = ChapterType.Other,\n) {\n    companion object {\n        val Unspecified = IndexedSegment(name = \"\", start = 0f)\n    }\n\n    fun toSegment(): Segment = Segment(name, start, color)\n}\n\n@Composable\nfun SeekbarWithTimers(\n    position: Float,\n    duration: Float,\n    readAheadValue: Float,\n    onValueChange: (Float) -> Unit,\n    onValueChangeFinished: () -> Unit,\n    timersInverted: Pair<Boolean, Boolean>,\n    positionTimerOnClick: () -> Unit,\n    durationTimerOnCLick: () -> Unit,\n    chapters: ImmutableList<Segment>,\n    modifier: Modifier = Modifier,\n) {\n    val clickEvent = LocalPlayerButtonsClickEvent.current\n    Row(\n        modifier = modifier.height(48.dp),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        VideoTimer(\n            value = position,\n            timersInverted.first,\n            onClick = {\n                clickEvent()\n                positionTimerOnClick()\n            },\n            modifier = Modifier.width(92.dp),\n        )\n        Seeker(\n            value = position.coerceIn(0f, duration),\n            range = 0f..duration,\n            onValueChange = onValueChange,\n            onValueChangeFinished = onValueChangeFinished,\n            readAheadValue = readAheadValue,\n            segments = chapters\n                .filter { it.start in 0f..duration }\n                .let {\n                    // add an extra segment at 0 if it doesn't exist.\n                    if (it.isNotEmpty() && it[0].start != 0f) {\n                        persistentListOf(Segment(\"\", 0f)) + it\n                    } else {\n                        it\n                    } + it\n                },\n            modifier = Modifier.weight(1f),\n            colors = SeekerDefaults.seekerColors(\n                progressColor = MaterialTheme.colorScheme.primary,\n                thumbColor = MaterialTheme.colorScheme.primary,\n                trackColor = MaterialTheme.colorScheme.background,\n                readAheadColor = MaterialTheme.colorScheme.inversePrimary,\n            ),\n        )\n        VideoTimer(\n            value = if (timersInverted.second) position - duration else duration,\n            isInverted = timersInverted.second,\n            onClick = {\n                clickEvent()\n                durationTimerOnCLick()\n            },\n            modifier = Modifier.width(92.dp),\n        )\n    }\n}\n\n@Composable\nfun VideoTimer(\n    value: Float,\n    isInverted: Boolean,\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit = {},\n) {\n    val interactionSource = remember { MutableInteractionSource() }\n    Text(\n        modifier = modifier\n            .fillMaxHeight()\n            .clickable(\n                interactionSource = interactionSource,\n                indication = ripple(),\n                onClick = onClick,\n            )\n            .wrapContentHeight(Alignment.CenterVertically),\n        text = Utils.prettyTime(value.toInt(), isInverted),\n        color = Color.White,\n        textAlign = TextAlign.Center,\n    )\n}\n\n@Preview\n@Composable\nprivate fun PreviewSeekBar() {\n    SeekbarWithTimers(\n        5f,\n        20f,\n        4f,\n        {},\n        {},\n        Pair(false, true),\n        {},\n        {},\n        persistentListOf(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/VerticalSliders.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components\n\nimport androidx.compose.animation.core.animateFloatAsState\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.aspectRatio\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\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.VolumeDown\nimport androidx.compose.material.icons.automirrored.filled.VolumeMute\nimport androidx.compose.material.icons.automirrored.filled.VolumeOff\nimport androidx.compose.material.icons.automirrored.filled.VolumeUp\nimport androidx.compose.material.icons.filled.BrightnessHigh\nimport androidx.compose.material.icons.filled.BrightnessLow\nimport androidx.compose.material.icons.filled.BrightnessMedium\nimport androidx.compose.material.icons.filled.ModeNight\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\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.clip\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shadow\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.presentation.core.components.material.padding\nimport java.text.NumberFormat\nimport kotlin.math.roundToInt\n\nprivate fun percentage(value: Float, range: ClosedFloatingPointRange<Float>): Float {\n    return ((value - range.start) / (range.endInclusive - range.start)).coerceIn(0f, 1f)\n}\n\nprivate fun percentage(value: Int, range: ClosedRange<Int>): Float {\n    return ((value - range.start).toFloat() / (range.endInclusive - range.start)).coerceIn(0f, 1f)\n}\n\n@Composable\nfun VerticalSlider(\n    value: Float,\n    range: ClosedFloatingPointRange<Float>,\n    modifier: Modifier = Modifier,\n    overflowValue: Float? = null,\n    overflowRange: ClosedFloatingPointRange<Float>? = null,\n) {\n    require(range.contains(value)) { \"Value must be within the provided range\" }\n    VerticalSliderInternal(\n        percentage = percentage(value, range),\n        overflowPercentage = overflowValue?.let { ov -> overflowRange?.let { or -> percentage(ov, or) } },\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun VerticalSlider(\n    value: Int,\n    range: ClosedRange<Int>,\n    modifier: Modifier = Modifier,\n    overflowValue: Int? = null,\n    overflowRange: ClosedRange<Int>? = null,\n) {\n    require(range.contains(value)) { \"Value must be within the provided range\" }\n    VerticalSliderInternal(\n        percentage = percentage(value, range),\n        overflowPercentage = overflowValue?.let { ov -> overflowRange?.let { or -> percentage(ov, or) } },\n        modifier = modifier,\n    )\n}\n\n@Composable\nprivate fun VerticalSliderInternal(\n    percentage: Float,\n    modifier: Modifier = Modifier,\n    overflowPercentage: Float? = null,\n) {\n    Box(\n        modifier = modifier.height(120.dp).aspectRatio(0.45f),\n        contentAlignment = Alignment.BottomCenter,\n    ) {\n        Box(\n            modifier = modifier\n                .fillMaxWidth(fraction = 0.5f)\n                .fillMaxHeight()\n                .clip(RoundedCornerShape(16.dp))\n                .background(MaterialTheme.colorScheme.background),\n            contentAlignment = Alignment.BottomCenter,\n        ) {\n            val targetHeight by animateFloatAsState(percentage, label = \"vsliderheight\")\n            Box(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .fillMaxHeight(targetHeight)\n                    .background(MaterialTheme.colorScheme.tertiary),\n            )\n            if (overflowPercentage != null) {\n                val overflowHeight by animateFloatAsState(\n                    targetValue = overflowPercentage,\n                    label = \"vslideroverflowheight\",\n                )\n                Box(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .fillMaxHeight(overflowHeight)\n                        .background(MaterialTheme.colorScheme.errorContainer),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun BrightnessSlider(\n    brightness: Float,\n    positiveRange: ClosedFloatingPointRange<Float>,\n    negativeRange: ClosedFloatingPointRange<Float>,\n    modifier: Modifier = Modifier,\n) {\n    Column(\n        modifier = modifier,\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        Text(\n            text = (brightness * 100).toInt().toString(),\n            style = MaterialTheme.typography.bodySmall,\n            textAlign = TextAlign.Center,\n        )\n        VerticalSlider(\n            value = brightness.coerceIn(0f, 1f),\n            range = positiveRange,\n            overflowRange = negativeRange,\n            overflowValue = (-brightness).coerceIn(0f..0.75f),\n        )\n        Icon(\n            imageVector = when (percentage(brightness, positiveRange)) {\n                in -1f..0f -> Icons.Default.ModeNight\n                in 0f..0.3f -> Icons.Default.BrightnessLow\n                in 0.3f..0.6f -> Icons.Default.BrightnessMedium\n                in 0.6f..1f -> Icons.Default.BrightnessHigh\n                else -> Icons.Default.BrightnessMedium\n            },\n            contentDescription = null,\n        )\n    }\n}\n\n@Composable\nfun VolumeSlider(\n    volume: Int,\n    mpvVolume: Int,\n    range: ClosedRange<Int>,\n    boostRange: ClosedRange<Int>?,\n    modifier: Modifier = Modifier,\n    displayAsPercentage: Boolean = false,\n) {\n    val percentage = (percentage(volume, range) * 100).roundToInt()\n    Column(\n        modifier = modifier,\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n    ) {\n        val boostVolume = mpvVolume - 100\n        val (deviceVolumeString, boostVolumeString) = getVolumeSliderText(\n            volume,\n            boostVolume,\n            percentage,\n            displayAsPercentage,\n        )\n        Text(\n            text = deviceVolumeString,\n            style = MaterialTheme.typography.bodySmall,\n            textAlign = TextAlign.Center,\n        )\n        Box {\n            VerticalSlider(\n                value = if (displayAsPercentage) percentage else volume,\n                range = if (displayAsPercentage) 0..100 else range,\n                overflowValue = boostVolume,\n                overflowRange = boostRange,\n            )\n\n            Text(\n                text = boostVolumeString,\n                style = MaterialTheme.typography.labelSmall.copy(\n                    shadow = Shadow(\n                        color = Color.Black,\n                        offset = Offset(1f, 1f),\n                        blurRadius = 4f,\n                    ),\n                ),\n                modifier = Modifier\n                    .align(Alignment.TopCenter)\n                    .padding(horizontal = 4.dp, vertical = 4.dp),\n            )\n        }\n        Icon(\n            imageVector = when (percentage) {\n                0 -> Icons.AutoMirrored.Default.VolumeOff\n                in 0..30 -> Icons.AutoMirrored.Default.VolumeMute\n                in 30..60 -> Icons.AutoMirrored.Default.VolumeDown\n                in 60..100 -> Icons.AutoMirrored.Default.VolumeUp\n                else -> Icons.AutoMirrored.Default.VolumeOff\n            },\n            contentDescription = null,\n        )\n    }\n}\n\nval getVolumeSliderText: @Composable (Int, Int, Int, Boolean) -> Pair<String, String> =\n    { volume, boostVolume, percentageInt, displayAsPercentage ->\n        val percentFormat = remember { NumberFormat.getPercentInstance() }\n        val integerFormat = remember { NumberFormat.getIntegerInstance() }\n        val percentage = percentageInt / 100f\n\n        val deviceVolumeString = if (displayAsPercentage) {\n            percentFormat.format(percentage)\n        } else {\n            integerFormat.format(volume)\n        }\n\n        val boostVolumeString = when (boostVolume) {\n            0 -> \"\"\n            in 0..1000 -> \"+${integerFormat.format(boostVolume)}\"\n            in -100..-1 -> \"-${integerFormat.format(-boostVolume)}\"\n            else -> integerFormat.format(boostVolume)\n        }\n\n        Pair(deviceVolumeString, boostVolumeString)\n    }\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/dialogs/EpisodeListDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components.dialogs\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyColumn\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.Label\nimport androidx.compose.material.icons.filled.Bookmark\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.DotSeparatorText\nimport eu.kanade.presentation.util.formatEpisodeNumber\nimport eu.kanade.tachiyomi.data.database.models.anime.Episode\nimport eu.kanade.tachiyomi.util.lang.toRelativeString\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.VerticalFastScroller\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.ZoneId\nimport java.time.format.DateTimeFormatter\n\n@Composable\nfun EpisodeListDialog(\n    displayMode: Long?,\n    currentEpisodeIndex: Int,\n    episodeList: List<Episode>,\n    dateRelativeTime: Boolean,\n    dateFormat: DateTimeFormatter,\n    onBookmarkClicked: (Long?, Boolean) -> Unit,\n    onFillermarkClicked: (Long?, Boolean) -> Unit,\n    onEpisodeClicked: (Long?) -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    val context = LocalContext.current\n    val itemScrollIndex = (episodeList.size - currentEpisodeIndex) - 1\n    val episodeListState = rememberLazyListState(initialFirstVisibleItemIndex = itemScrollIndex)\n\n    PlayerDialog(\n        title = stringResource(AYMR.strings.episodes),\n        modifier = Modifier.fillMaxHeight(fraction = 0.8F).fillMaxWidth(fraction = 0.8F),\n        onDismissRequest = onDismissRequest,\n    ) {\n        VerticalFastScroller(\n            listState = episodeListState,\n        ) {\n            LazyColumn(\n                modifier = Modifier.fillMaxHeight(),\n                state = episodeListState,\n            ) {\n                items(\n                    items = episodeList.reversed(),\n                    key = { \"episode-${it.id}\" },\n                    contentType = { \"episode\" },\n                ) { episode ->\n\n                    val isCurrentEpisode = episode.id == episodeList[currentEpisodeIndex].id\n\n                    val title = if (displayMode == Anime.EPISODE_DISPLAY_NUMBER) {\n                        stringResource(\n                            AYMR.strings.display_mode_episode,\n                            formatEpisodeNumber(episode.episode_number.toDouble()),\n                        )\n                    } else {\n                        episode.name\n                    }\n\n                    val date = episode.date_upload\n                        .takeIf { it > 0L }\n                        ?.let {\n                            LocalDate.ofInstant(\n                                Instant.ofEpochMilli(it),\n                                ZoneId.systemDefault(),\n                            ).toRelativeString(\n                                context = context,\n                                relative = dateRelativeTime,\n                                dateFormat = dateFormat,\n                            )\n                        } ?: \"\"\n\n                    EpisodeListItem(\n                        episode = episode,\n                        isCurrentEpisode = isCurrentEpisode,\n                        title = title,\n                        date = date,\n                        onBookmarkClicked = onBookmarkClicked,\n                        onFillermarkClicked = onFillermarkClicked,\n                        onEpisodeClicked = onEpisodeClicked,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun EpisodeListItem(\n    episode: Episode,\n    isCurrentEpisode: Boolean,\n    title: String,\n    date: String?,\n    onBookmarkClicked: (Long?, Boolean) -> Unit,\n    onFillermarkClicked: (Long?, Boolean) -> Unit,\n    onEpisodeClicked: (Long?) -> Unit,\n) {\n    var isBookmarked by remember { mutableStateOf(episode.bookmark) }\n    var isFillermarked by remember { mutableStateOf(episode.fillermark) }\n    var textHeight by remember { mutableStateOf(0) }\n\n    val defaultColor = MaterialTheme.colorScheme.onSurface\n    val bookmarkAlpha = if (isBookmarked) 1f else DISABLED_ALPHA\n    val bookmarkColor = if (isBookmarked) MaterialTheme.colorScheme.primary else defaultColor\n    val fillermarkAlpha = if (isFillermarked) 1f else DISABLED_ALPHA\n    val fillermarkColor = if (isFillermarked) MaterialTheme.colorScheme.tertiary else defaultColor\n    val episodeColor = if (isBookmarked) {\n        bookmarkColor\n    } else if (isFillermarked) {\n        fillermarkColor\n    } else {\n        defaultColor\n    }\n    val textAlpha = if (episode.seen) DISABLED_ALPHA else 1f\n    val textWeight = if (isCurrentEpisode) FontWeight.Bold else FontWeight.Normal\n    val textStyle = if (isCurrentEpisode) FontStyle.Italic else FontStyle.Normal\n\n    val clickBookmark: (Boolean) -> Unit = { bookmarked ->\n        episode.bookmark = bookmarked\n        isBookmarked = bookmarked\n        onBookmarkClicked(episode.id, bookmarked)\n    }\n\n    val clickFillermark: (Boolean) -> Unit = { fillermarked ->\n        episode.fillermark = fillermarked\n        isFillermarked = fillermarked\n        onFillermarkClicked(episode.id, fillermarked)\n    }\n\n    Row(\n        modifier = Modifier\n            .fillMaxWidth()\n            .clickable(onClick = { onEpisodeClicked(episode.id) })\n            .padding(vertical = MaterialTheme.padding.extraSmall),\n    ) {\n        IconButton(onClick = { clickBookmark(!isBookmarked) }) {\n            Icon(\n                imageVector = Icons.Filled.Bookmark,\n                contentDescription = null,\n                tint = bookmarkColor,\n                modifier = Modifier\n                    .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp })\n                    .alpha(bookmarkAlpha),\n            )\n        }\n\n        IconButton(onClick = { clickFillermark(!isFillermarked) }) {\n            Icon(\n                imageVector = Icons.AutoMirrored.Filled.Label,\n                contentDescription = null,\n                tint = fillermarkColor,\n                modifier = Modifier\n                    .sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp })\n                    .alpha(fillermarkAlpha),\n            )\n        }\n\n        Spacer(modifier = Modifier.width(2.dp))\n\n        Column {\n            Text(\n                text = title,\n                style = MaterialTheme.typography.bodyMedium,\n                maxLines = 1,\n                overflow = TextOverflow.Ellipsis,\n                color = episodeColor,\n                modifier = Modifier.alpha(textAlpha),\n                onTextLayout = { textHeight = it.size.height },\n                fontWeight = textWeight,\n                fontStyle = textStyle,\n            )\n\n            Row(\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                if (date != null) {\n                    Text(\n                        text = date,\n                        style = MaterialTheme.typography.labelMedium,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                        color = episodeColor,\n                        modifier = Modifier.alpha(textAlpha),\n                        fontWeight = textWeight,\n                        fontStyle = textStyle,\n                    )\n                    if (episode.scanlator != null) {\n                        DotSeparatorText(\n                            modifier = Modifier.alpha(textAlpha),\n                        )\n                    }\n                }\n                if (episode.scanlator != null) {\n                    Text(\n                        text = episode.scanlator!!,\n                        style = MaterialTheme.typography.labelMedium,\n                        maxLines = 1,\n                        overflow = TextOverflow.Ellipsis,\n                        color = episodeColor,\n                        modifier = Modifier.alpha(textAlpha),\n                        fontWeight = textWeight,\n                        fontStyle = textStyle,\n                    )\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/dialogs/IntegerPickerDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components.dialogs\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport kotlinx.collections.immutable.toImmutableList\nimport tachiyomi.presentation.core.components.WheelTextPicker\n\n@Composable\nfun IntegerPickerDialog(\n    defaultValue: Int,\n    minValue: Int,\n    maxValue: Int,\n    step: Int,\n    nameFormat: String,\n    title: String,\n    onChange: (Int) -> Unit,\n    onDismissRequest: () -> Unit,\n) {\n    var newValue = defaultValue\n    val values = (minValue..maxValue step step).toList()\n    val items = values.map { String.format(nameFormat, it) }.toImmutableList()\n\n    PlayerDialog(\n        title = title,\n        modifier = Modifier.fillMaxWidth(fraction = 0.5f),\n        onConfirmRequest = null,\n        onDismissRequest = {\n            onChange(newValue)\n            onDismissRequest()\n        },\n    ) {\n        Box(\n            modifier = Modifier.fillMaxWidth(),\n        ) {\n            WheelTextPicker(\n                modifier = Modifier.align(Alignment.Center),\n                items = items,\n                onSelectionChanged = { newValue = values[it] },\n                startIndex = values.indexOfFirst { it == defaultValue }.coerceAtLeast(0),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/dialogs/PlayerDialog.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components.dialogs\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.material3.BasicAlertDialog\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.window.DialogProperties\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.material.TextButton\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun PlayerDialog(\n    title: String,\n    modifier: Modifier = Modifier,\n    onConfirmRequest: (() -> Unit)? = null,\n    onDismissRequest: () -> Unit,\n    content: @Composable (() -> Unit)? = null,\n) {\n    val onConfirm = {\n        onConfirmRequest?.invoke()\n        onDismissRequest()\n    }\n\n    BasicAlertDialog(\n        onDismissRequest = onDismissRequest,\n        modifier = modifier,\n        properties = DialogProperties(\n            dismissOnBackPress = true,\n            dismissOnClickOutside = true,\n            usePlatformDefaultWidth = false,\n            decorFitsSystemWindows = false,\n        ),\n    ) {\n        Surface(\n            shape = MaterialTheme.shapes.large,\n            modifier = Modifier.fillMaxWidth(),\n            tonalElevation = 1.dp,\n        ) {\n            Column(modifier = Modifier.padding(16.dp)) {\n                Text(\n                    text = title,\n                    style = MaterialTheme.typography.titleLarge,\n                    color = MaterialTheme.colorScheme.onSurface,\n                )\n\n                content?.invoke()\n\n                if (onConfirmRequest != null) {\n                    Row(\n                        modifier = Modifier.fillMaxWidth(),\n                        horizontalArrangement = Arrangement.SpaceBetween,\n                    ) {\n                        TextButton(onClick = onDismissRequest) {\n                            Text(stringResource(MR.strings.action_cancel))\n                        }\n\n                        TextButton(onClick = onConfirm) {\n                            Text(stringResource(MR.strings.action_ok))\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/AudioDelayPanel.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\n\nimport androidx.compose.foundation.layout.Arrangement\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.filled.Close\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport `is`.xyz.mpv.MPVLib\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun AudioDelayPanel(\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val preferences = remember { Injekt.get<AudioPreferences>() }\n\n    ConstraintLayout(\n        modifier = modifier\n            .fillMaxSize()\n            .padding(MaterialTheme.padding.medium),\n    ) {\n        val delayControlCard = createRef()\n\n        var delay by remember { mutableIntStateOf((MPVLib.getPropertyDouble(\"audio-delay\") * 1000).toInt()) }\n        LaunchedEffect(delay) {\n            MPVLib.setPropertyDouble(\"audio-delay\", delay / 1000.0)\n        }\n        DelayCard(\n            delay = delay,\n            onDelayChange = { delay = it },\n            onApply = { preferences.audioDelay().set(delay) },\n            onReset = { delay = 0 },\n            title = { AudioDelayCardTitle(onClose = onDismissRequest) },\n            delayType = DelayType.Audio,\n            modifier = Modifier.constrainAs(delayControlCard) {\n                linkTo(parent.top, parent.bottom, bias = 0.8f)\n                end.linkTo(parent.end)\n            },\n        )\n    }\n}\n\n@Composable\nfun AudioDelayCardTitle(\n    onClose: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier.fillMaxWidth(),\n        horizontalArrangement = Arrangement.SpaceBetween,\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Text(\n            stringResource(AYMR.strings.player_sheets_audio_delay_title),\n            style = MaterialTheme.typography.headlineMedium,\n        )\n        IconButton(onClose) {\n            Icon(\n                Icons.Default.Close,\n                null,\n                modifier = Modifier.size(32.dp),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleDelayPanel.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\n\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\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.widthIn\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ArrowDropDown\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.Refresh\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.Card\nimport androidx.compose.material3.DropdownMenu\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.FilledIconButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\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.mutableFloatStateOf\nimport androidx.compose.runtime.mutableIntStateOf\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.unit.dp\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.player.components.OutlinedNumericChooser\nimport eu.kanade.tachiyomi.ui.player.controls.CARDS_MAX_WIDTH\nimport eu.kanade.tachiyomi.ui.player.controls.panelCardsColors\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport `is`.xyz.mpv.MPVLib\nimport kotlinx.coroutines.delay\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.math.round\nimport kotlin.math.roundToInt\n\n@Composable\nfun SubtitleDelayPanel(\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val preferences = remember { Injekt.get<SubtitlePreferences>() }\n\n    ConstraintLayout(\n        modifier = modifier\n            .fillMaxSize()\n            .padding(MaterialTheme.padding.medium),\n    ) {\n        val delayControlCard = createRef()\n\n        var affectedSubtitle by remember { mutableStateOf(SubtitleDelayType.Primary) }\n        var delay by remember { mutableIntStateOf((MPVLib.getPropertyDouble(\"sub-delay\") * 1000).roundToInt()) }\n        var secondaryDelay by remember {\n            mutableIntStateOf((MPVLib.getPropertyDouble(\"secondary-sub-delay\") * 1000).roundToInt())\n        }\n        var speed by remember { mutableFloatStateOf(MPVLib.getPropertyDouble(\"sub-speed\").toFloat()) }\n        LaunchedEffect(speed) {\n            if (speed in 0.1f..1f) MPVLib.setPropertyDouble(\"sub-speed\", speed.toDouble())\n        }\n        LaunchedEffect(delay, secondaryDelay) {\n            val finalDelay = (if (affectedSubtitle == SubtitleDelayType.Secondary) secondaryDelay else delay) / 1000.0\n            when (affectedSubtitle) {\n                SubtitleDelayType.Primary -> MPVLib.setPropertyDouble(\"sub-delay\", finalDelay)\n                SubtitleDelayType.Secondary -> MPVLib.setPropertyDouble(\"secondary-sub-delay\", finalDelay)\n                else -> {\n                    MPVLib.setPropertyDouble(\"sub-delay\", finalDelay)\n                    MPVLib.setPropertyDouble(\"secondary-sub-delay\", finalDelay)\n                }\n            }\n        }\n        LaunchedEffect(affectedSubtitle) {\n            secondaryDelay = (\n                MPVLib.getPropertyDouble(\n                    if (affectedSubtitle == SubtitleDelayType.Both) \"sub-delay\" else \"secondary-sub-delay\",\n                ) * 1000\n                ).toInt()\n            delay = (MPVLib.getPropertyDouble(\"sub-delay\") * 1000).toInt()\n        }\n        SubtitleDelayCard(\n            delay = if (affectedSubtitle == SubtitleDelayType.Secondary) secondaryDelay else delay,\n            onDelayChange = {\n                if (affectedSubtitle == SubtitleDelayType.Secondary) {\n                    secondaryDelay = it\n                } else {\n                    delay = it\n                }\n            },\n            speed = speed,\n            onSpeedChange = { speed = round(it * 1000) / 1000f },\n            affectedSubtitle = affectedSubtitle,\n            onTypeChange = { affectedSubtitle = it },\n            onApply = {\n                preferences.subtitlesDelay().set(delay)\n                if (speed in 0.1f..10f) preferences.subtitlesSpeed().set(speed)\n            },\n            onReset = {\n                delay = 0\n                secondaryDelay = 0\n                speed = 1f\n            },\n            onClose = onDismissRequest,\n            modifier = Modifier.constrainAs(delayControlCard) {\n                linkTo(parent.top, parent.bottom, bias = 0.8f)\n                end.linkTo(parent.end)\n            },\n        )\n    }\n}\n\n@Composable\nfun SubtitleDelayCard(\n    delay: Int,\n    onDelayChange: (Int) -> Unit,\n    speed: Float,\n    onSpeedChange: (Float) -> Unit,\n    affectedSubtitle: SubtitleDelayType,\n    onTypeChange: (SubtitleDelayType) -> Unit,\n    onApply: () -> Unit,\n    onReset: () -> Unit,\n    onClose: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    DelayCard(\n        delay = delay,\n        onDelayChange = onDelayChange,\n        onApply = onApply,\n        onReset = onReset,\n        title = {\n            SubtitleDelayTitle(\n                affectedSubtitle = affectedSubtitle,\n                onClose = onClose,\n                onTypeChange = onTypeChange,\n            )\n        },\n        extraSettings = {\n            when (affectedSubtitle) {\n                SubtitleDelayType.Primary -> {\n                    OutlinedNumericChooser(\n                        label = { Text(stringResource(AYMR.strings.player_sheets_sub_delay_speed)) },\n                        value = speed,\n                        onChange = onSpeedChange,\n                        max = 10f,\n                        step = .01f,\n                        min = .1f,\n                    )\n                }\n\n                else -> {}\n            }\n        },\n        delayType = DelayType.Subtitle,\n        modifier = modifier,\n    )\n}\n\nenum class SubtitleDelayType(\n    val title: StringResource,\n) {\n    Primary(AYMR.strings.player_sheets_sub_delay_subtitle_type_primary),\n    Secondary(AYMR.strings.player_sheets_sub_delay_subtitle_type_secondary),\n    Both(AYMR.strings.player_sheets_sub_delay_subtitle_type_primary_and_secondary),\n}\n\n@Suppress(\"LambdaParameterInRestartableEffect\") // Intentional\n@Composable\nfun DelayCard(\n    delay: Int,\n    onDelayChange: (Int) -> Unit,\n    onApply: () -> Unit,\n    onReset: () -> Unit,\n    title: @Composable () -> Unit,\n    delayType: DelayType,\n    modifier: Modifier = Modifier,\n    extraSettings: @Composable ColumnScope.() -> Unit = {},\n) {\n    Card(\n        modifier = modifier\n            .widthIn(max = CARDS_MAX_WIDTH)\n            .animateContentSize(),\n        colors = panelCardsColors(),\n    ) {\n        Column(\n            Modifier\n                .verticalScroll(rememberScrollState())\n                .padding(\n                    horizontal = MaterialTheme.padding.medium,\n                    vertical = MaterialTheme.padding.small,\n                ),\n            verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            title()\n            OutlinedNumericChooser(\n                label = { Text(stringResource(AYMR.strings.player_sheets_sub_delay_delay)) },\n                value = delay,\n                onChange = onDelayChange,\n                step = 50,\n                min = Int.MIN_VALUE,\n                max = Int.MAX_VALUE,\n                suffix = { Text(stringResource(AYMR.strings.player_generic_unit_ms)) },\n            )\n            Column(\n                modifier = Modifier.animateContentSize(),\n            ) { extraSettings() }\n            // true (heard -> spotted), false (spotted -> heard)\n            var isDirectionPositive by remember { mutableStateOf<Boolean?>(null) }\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                var timerStart by remember { mutableStateOf<Long?>(null) }\n                var finalDelay by remember { mutableIntStateOf(delay) }\n                LaunchedEffect(isDirectionPositive) {\n                    if (isDirectionPositive == null) {\n                        onDelayChange(finalDelay)\n                        return@LaunchedEffect\n                    }\n                    finalDelay = delay\n                    timerStart = System.currentTimeMillis()\n                    val startingDelay: Int = finalDelay\n                    while (isDirectionPositive != null && timerStart != null) {\n                        val elapsed = System.currentTimeMillis() - timerStart!!\n                        finalDelay = startingDelay + (if (isDirectionPositive!!) elapsed else -elapsed).toInt()\n                        // Arbitrary delay of 20ms\n                        delay(20)\n                    }\n                }\n                Button(\n                    onClick = {\n                        isDirectionPositive = if (isDirectionPositive == null) delayType == DelayType.Audio else null\n                    },\n                    modifier = Modifier.weight(1f),\n                    enabled = isDirectionPositive != (delayType == DelayType.Audio),\n                ) {\n                    Text(\n                        stringResource(\n                            if (delayType == DelayType.Audio) {\n                                AYMR.strings.player_sheets_sub_delay_audio_sound_heard\n                            } else {\n                                AYMR.strings.player_sheets_sub_delay_subtitle_voice_heard\n                            },\n                        ),\n                    )\n                }\n                Button(\n                    onClick = {\n                        isDirectionPositive = if (isDirectionPositive == null) delayType != DelayType.Audio else null\n                    },\n                    modifier = Modifier.weight(1f),\n                    enabled = isDirectionPositive != (delayType == DelayType.Subtitle),\n                ) {\n                    Text(\n                        stringResource(\n                            if (delayType == DelayType.Audio) {\n                                AYMR.strings.player_sheets_sub_delay_sound_sound_spotted\n                            } else {\n                                AYMR.strings.player_sheets_sub_delay_subtitle_text_seen\n                            },\n                        ),\n                    )\n                }\n            }\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                Button(\n                    onClick = onApply,\n                    modifier = Modifier.weight(1f),\n                    enabled = isDirectionPositive == null,\n                ) {\n                    Text(stringResource(AYMR.strings.player_sheets_delay_set_as_default))\n                }\n                FilledIconButton(\n                    onClick = onReset,\n                    enabled = isDirectionPositive == null,\n                ) {\n                    Icon(Icons.Default.Refresh, null)\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun SubtitleDelayTitle(\n    affectedSubtitle: SubtitleDelayType,\n    onClose: () -> Unit,\n    onTypeChange: (SubtitleDelayType) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        verticalAlignment = Alignment.Bottom,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n        modifier = modifier.fillMaxWidth(),\n    ) {\n        Text(\n            stringResource(AYMR.strings.player_sheets_sub_delay_title),\n            style = MaterialTheme.typography.headlineMedium,\n        )\n        var showDropDownMenu by remember { mutableStateOf(false) }\n        Row(modifier = Modifier.clickable { showDropDownMenu = true }) {\n            Text(\n                stringResource(affectedSubtitle.title),\n                color = MaterialTheme.colorScheme.onSurfaceVariant,\n                style = MaterialTheme.typography.bodyMedium,\n            )\n            Icon(Icons.Default.ArrowDropDown, null)\n            DropdownMenu(\n                expanded = showDropDownMenu,\n                onDismissRequest = { showDropDownMenu = false },\n            ) {\n                SubtitleDelayType.entries.forEach {\n                    DropdownMenuItem(\n                        text = { Text(stringResource(it.title)) },\n                        onClick = {\n                            onTypeChange(it)\n                            showDropDownMenu = false\n                        },\n                    )\n                }\n            }\n        }\n        Spacer(Modifier.weight(1f))\n        IconButton(onClose) {\n            Icon(\n                Icons.Default.Close,\n                null,\n                modifier = Modifier.size(32.dp),\n            )\n        }\n    }\n}\n\nenum class DelayType {\n    Audio,\n    Subtitle,\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsColorsCard.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\n\nimport androidx.compose.foundation.horizontalScroll\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.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.widthIn\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.BorderColor\nimport androidx.compose.material.icons.filled.FormatColorFill\nimport androidx.compose.material.icons.filled.FormatColorReset\nimport androidx.compose.material.icons.filled.FormatColorText\nimport androidx.compose.material.icons.filled.Palette\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconToggleButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\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.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.core.graphics.alpha\nimport androidx.core.graphics.blue\nimport androidx.core.graphics.green\nimport androidx.core.graphics.red\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.player.components.ExpandableCard\nimport eu.kanade.presentation.player.components.TintedSliderItem\nimport eu.kanade.tachiyomi.ui.player.controls.CARDS_MAX_WIDTH\nimport eu.kanade.tachiyomi.ui.player.controls.panelCardsColors\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport `is`.xyz.mpv.MPVLib\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.deleteAndGet\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun SubtitleSettingsColorsCard(\n    modifier: Modifier = Modifier,\n) {\n    val preferences = remember { Injekt.get<SubtitlePreferences>() }\n    var isExpanded by remember { mutableStateOf(true) }\n    ExpandableCard(\n        isExpanded = isExpanded,\n        onExpand = { isExpanded = !isExpanded },\n        title = {\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n            ) {\n                Icon(Icons.Default.Palette, null)\n                Text(stringResource(AYMR.strings.player_sheets_sub_colors_title))\n            }\n        },\n        modifier = modifier.widthIn(max = CARDS_MAX_WIDTH),\n        colors = panelCardsColors(),\n    ) {\n        Column {\n            var currentColorType by remember { mutableStateOf(SubColorType.Text) }\n            var currentColor by remember { mutableIntStateOf(getCurrentMPVColor(currentColorType)) }\n            LaunchedEffect(currentColorType) {\n                currentColor = getCurrentMPVColor(currentColorType)\n            }\n            Row(\n                horizontalArrangement = Arrangement.Center,\n                verticalAlignment = Alignment.CenterVertically,\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .horizontalScroll(rememberScrollState())\n                    .padding(start = MaterialTheme.padding.extraSmall, end = MaterialTheme.padding.medium),\n            ) {\n                SubColorType.entries.forEach { type ->\n                    IconToggleButton(\n                        checked = currentColorType == type,\n                        onCheckedChange = { currentColorType = type },\n                    ) {\n                        Icon(\n                            when (type) {\n                                SubColorType.Text -> Icons.Default.FormatColorText\n                                SubColorType.Border -> Icons.Default.BorderColor\n                                SubColorType.Background -> Icons.Default.FormatColorFill\n                            },\n                            null,\n                        )\n                    }\n                }\n                Text(stringResource(currentColorType.titleRes))\n                Spacer(Modifier.weight(1f))\n                TextButton(\n                    onClick = {\n                        resetColors(preferences, currentColorType)\n                        currentColor = getCurrentMPVColor(currentColorType)\n                    },\n                ) {\n                    Row(\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        verticalAlignment = Alignment.CenterVertically,\n                    ) {\n                        Icon(Icons.Default.FormatColorReset, null)\n                        Text(stringResource(MR.strings.action_reset))\n                    }\n                }\n            }\n            SubtitlesColorPicker(\n                currentColor,\n                onColorChange = {\n                    currentColor = it\n                    currentColorType.preference(preferences).set(it)\n                    MPVLib.setPropertyString(currentColorType.property, it.toColorHexString())\n                },\n            )\n        }\n    }\n}\n\nfun Int.copyAsArgb(\n    alpha: Int = this.alpha,\n    red: Int = this.red,\n    green: Int = this.green,\n    blue: Int = this.blue,\n) = (alpha shl 24) or (red shl 16) or (green shl 8) or blue\n\n@OptIn(ExperimentalStdlibApi::class)\nfun Int.toColorHexString() = \"#\" + this.toHexString().uppercase()\n\nenum class SubColorType(\n    val titleRes: StringResource,\n    val property: String,\n    val preference: (SubtitlePreferences) -> Preference<Int>,\n) {\n    Text(\n        AYMR.strings.player_sheets_subtitles_color_text,\n        \"sub-color\",\n        preference = SubtitlePreferences::textColorSubtitles,\n    ),\n    Border(\n        AYMR.strings.player_sheets_subtitles_color_border,\n        \"sub-border-color\",\n        preference = SubtitlePreferences::borderColorSubtitles,\n    ),\n    Background(\n        AYMR.strings.player_sheets_subtitles_color_background,\n        \"sub-back-color\",\n        preference = SubtitlePreferences::backgroundColorSubtitles,\n    ),\n}\n\nfun resetColors(preferences: SubtitlePreferences, type: SubColorType) {\n    when (type) {\n        SubColorType.Text -> {\n            MPVLib.setPropertyString(\"sub-color\", preferences.textColorSubtitles().deleteAndGet().toColorHexString())\n        }\n\n        SubColorType.Border -> {\n            MPVLib.setPropertyString(\n                \"sub-border-color\",\n                preferences.borderColorSubtitles().deleteAndGet().toColorHexString(),\n            )\n        }\n\n        SubColorType.Background -> {\n            MPVLib.setPropertyString(\n                \"sub-back-color\",\n                preferences.backgroundColorSubtitles().deleteAndGet().toColorHexString(),\n            )\n        }\n    }\n}\n\nval getCurrentMPVColor: (SubColorType) -> Int = { colorType ->\n    MPVLib.getPropertyString(colorType.property)?.let {\n        android.graphics.Color.parseColor(it.uppercase())\n    }!!\n}\n\n@Composable\nfun SubtitlesColorPicker(\n    color: Int,\n    onColorChange: (Int) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Column(modifier) {\n        TintedSliderItem(\n            stringResource(AYMR.strings.player_sheets_sub_color_red),\n            color.red,\n            color.red.toString(),\n            onChange = { onColorChange(color.copyAsArgb(red = it)) },\n            max = 255,\n            tint = Color.Red,\n        )\n\n        TintedSliderItem(\n            stringResource(AYMR.strings.player_sheets_sub_color_green),\n            color.green,\n            color.green.toString(),\n            onChange = { onColorChange(color.copyAsArgb(green = it)) },\n            max = 255,\n            tint = Color.Green,\n        )\n\n        TintedSliderItem(\n            stringResource(AYMR.strings.player_sheets_sub_color_blue),\n            color.blue,\n            color.blue.toString(),\n            onChange = { onColorChange(color.copyAsArgb(blue = it)) },\n            max = 255,\n            tint = Color.Blue,\n        )\n\n        TintedSliderItem(\n            stringResource(AYMR.strings.player_sheets_sub_color_alpha),\n            color.alpha,\n            color.alpha.toString(),\n            onChange = { onColorChange(color.copyAsArgb(alpha = it)) },\n            max = 255,\n            tint = Color.White,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsMiscellaneousCard.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\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.widthIn\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.AlignVerticalCenter\nimport androidx.compose.material.icons.filled.EditOff\nimport androidx.compose.material.icons.filled.FormatSize\nimport androidx.compose.material.icons.filled.Tune\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.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.player.components.ExpandableCard\nimport eu.kanade.presentation.player.components.SliderItem\nimport eu.kanade.presentation.player.components.SwitchPreference\nimport eu.kanade.tachiyomi.ui.player.controls.CARDS_MAX_WIDTH\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.toFixed\nimport eu.kanade.tachiyomi.ui.player.controls.panelCardsColors\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport `is`.xyz.mpv.MPVLib\nimport tachiyomi.core.common.preference.deleteAndGet\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun SubtitlesMiscellaneousCard(modifier: Modifier = Modifier) {\n    val preferences = remember { Injekt.get<SubtitlePreferences>() }\n    var isExpanded by remember { mutableStateOf(true) }\n    ExpandableCard(\n        isExpanded,\n        title = {\n            Row(horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium)) {\n                Icon(Icons.Default.Tune, null)\n                Text(stringResource(AYMR.strings.player_sheets_sub_misc_title))\n            }\n        },\n        onExpand = { isExpanded = !isExpanded },\n        modifier.widthIn(max = CARDS_MAX_WIDTH),\n        colors = panelCardsColors(),\n    ) {\n        Column {\n            var overrideAssSubs by remember {\n                mutableStateOf(MPVLib.getPropertyString(\"sub-ass-override\").also { println(it) } == \"force\")\n            }\n            SwitchPreference(\n                overrideAssSubs,\n                onValueChange = {\n                    overrideAssSubs = it\n                    preferences.overrideSubsASS().set(it)\n                    MPVLib.setPropertyString(\"sub-ass-override\", if (it) \"force\" else \"scale\")\n                },\n                content = { Text(stringResource(AYMR.strings.player_sheets_sub_override_ass)) },\n                modifier = Modifier\n                    .fillMaxWidth(),\n            )\n            var subScale by remember {\n                mutableStateOf(MPVLib.getPropertyDouble(\"sub-scale\").toFloat())\n            }\n            var subPos by remember {\n                mutableStateOf(MPVLib.getPropertyInt(\"sub-pos\"))\n            }\n            SliderItem(\n                label = stringResource(AYMR.strings.player_sheets_sub_scale),\n                value = subScale,\n                valueText = subScale.toFixed(2).toString(),\n                onChange = {\n                    subScale = it\n                    preferences.subtitleFontScale().set(it)\n                    MPVLib.setPropertyDouble(\"sub-scale\", it.toDouble())\n                },\n                max = 5f,\n                icon = {\n                    Icon(\n                        Icons.Default.FormatSize,\n                        null,\n                    )\n                },\n            )\n            SliderItem(\n                label = stringResource(AYMR.strings.player_sheets_sub_position),\n                value = subPos,\n                valueText = subPos.toString(),\n                onChange = {\n                    subPos = it\n                    preferences.subtitlePos().set(it)\n                    MPVLib.setPropertyInt(\"sub-pos\", it)\n                },\n                max = 150,\n                icon = {\n                    Icon(\n                        Icons.Default.AlignVerticalCenter,\n                        null,\n                    )\n                },\n            )\n            Row(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(end = MaterialTheme.padding.medium, bottom = MaterialTheme.padding.medium),\n                horizontalArrangement = Arrangement.End,\n            ) {\n                TextButton(\n                    onClick = {\n                        preferences.subtitlePos().deleteAndGet().let {\n                            subPos = it\n                            MPVLib.setPropertyInt(\"sub-pos\", it)\n                        }\n                        preferences.subtitleFontScale().deleteAndGet().let {\n                            subScale = it\n                            MPVLib.setPropertyDouble(\"sub-scale\", it.toDouble())\n                        }\n                        preferences.overrideSubsASS().deleteAndGet().let { overrideAssSubs = it }\n                        MPVLib.setPropertyString(\"sub-ass-override\", \"scale\") // mpv's default is 'scale'\n                    },\n                ) {\n                    Row {\n                        Icon(Icons.Default.EditOff, null)\n                        Text(stringResource(MR.strings.action_reset))\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsPanel.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\n\nimport android.content.res.Configuration.ORIENTATION_PORTRAIT\nimport androidx.activity.compose.BackHandler\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.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.PageSize\nimport androidx.compose.foundation.pager.rememberPagerState\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.filled.Close\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\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.Shadow\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.unit.dp\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport eu.kanade.tachiyomi.ui.player.controls.CARDS_MAX_WIDTH\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun SubtitleSettingsPanel(\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    BackHandler(onBack = onDismissRequest)\n    val orientation = LocalConfiguration.current.orientation\n\n    ConstraintLayout(modifier = modifier.fillMaxSize()) {\n        val subSettingsCards = createRef()\n        val cards: @Composable (Int, Modifier) -> Unit = { value, cardsModifier ->\n            when (value) {\n                0 -> SubtitleSettingsTypographyCard(cardsModifier)\n                1 -> SubtitleSettingsColorsCard(cardsModifier)\n                2 -> SubtitlesMiscellaneousCard(cardsModifier)\n                else -> {}\n            }\n        }\n\n        val pagerState = rememberPagerState { 3 }\n        if (orientation == ORIENTATION_PORTRAIT) {\n            Column(\n                modifier = Modifier.constrainAs(subSettingsCards) {\n                    top.linkTo(parent.top, 32.dp)\n                    start.linkTo(parent.start)\n                },\n                verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            ) {\n                TopAppBar(\n                    title = {\n                        Text(\n                            text = stringResource(AYMR.strings.player_sheets_subtitles_settings_title),\n                            style = MaterialTheme.typography.headlineMedium.copy(shadow = Shadow(blurRadius = 20f)),\n                        )\n                    },\n                    navigationIcon = {\n                        IconButton(onClick = onDismissRequest) {\n                            Icon(imageVector = Icons.AutoMirrored.Default.ArrowBack, contentDescription = null)\n                        }\n                    },\n                    colors = TopAppBarDefaults.topAppBarColors().copy(containerColor = Color.Transparent),\n                )\n                HorizontalPager(\n                    state = pagerState,\n                    pageSize = PageSize.Fixed(LocalConfiguration.current.screenWidthDp.dp * 0.9f),\n                    verticalAlignment = Alignment.Top,\n                    pageSpacing = MaterialTheme.padding.small,\n                    contentPadding = PaddingValues(horizontal = MaterialTheme.padding.small),\n                    beyondViewportPageCount = 1,\n                ) { page ->\n                    cards(page, Modifier.fillMaxWidth())\n                }\n            }\n        } else {\n            Column(\n                horizontalAlignment = Alignment.Start,\n                verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                modifier = Modifier\n                    .constrainAs(subSettingsCards) {\n                        top.linkTo(parent.top)\n                        end.linkTo(parent.end, 32.dp)\n                    }\n                    .verticalScroll(rememberScrollState()),\n            ) {\n                Spacer(Modifier.height(16.dp))\n                Row(\n                    Modifier\n                        .width(CARDS_MAX_WIDTH),\n                    horizontalArrangement = Arrangement.SpaceBetween,\n                ) {\n                    Text(\n                        text = stringResource(AYMR.strings.player_sheets_subtitles_settings_title),\n                        style = MaterialTheme.typography.headlineMedium.copy(\n                            shadow = Shadow(blurRadius = 20f),\n                        ),\n                    )\n                    IconButton(onDismissRequest) {\n                        Icon(imageVector = Icons.Default.Close, contentDescription = null)\n                    }\n                }\n                repeat(3) { cards(it, Modifier) }\n                Spacer(Modifier.height(16.dp))\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsTypographyCard.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\n\nimport android.annotation.SuppressLint\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.horizontalScroll\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.foundation.layout.widthIn\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.BorderColor\nimport androidx.compose.material.icons.filled.BorderStyle\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material.icons.filled.FormatBold\nimport androidx.compose.material.icons.filled.FormatClear\nimport androidx.compose.material.icons.filled.FormatColorText\nimport androidx.compose.material.icons.filled.FormatItalic\nimport androidx.compose.material.icons.filled.FormatSize\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconToggleButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\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.res.painterResource\nimport androidx.compose.ui.unit.dp\nimport com.yubyf.truetypeparser.TTFFile\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.presentation.components.DropdownMenu\nimport eu.kanade.presentation.player.components.ExpandableCard\nimport eu.kanade.presentation.player.components.ExposedTextDropDownMenu\nimport eu.kanade.presentation.player.components.SliderItem\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.player.controls.CARDS_MAX_WIDTH\nimport eu.kanade.tachiyomi.ui.player.controls.panelCardsColors\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitleJustification\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport `is`.xyz.mpv.MPVLib\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport tachiyomi.core.common.preference.deleteAndGet\nimport tachiyomi.domain.storage.service.StorageManager\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@SuppressLint(\"MutableCollectionMutableState\")\n@Composable\nfun SubtitleSettingsTypographyCard(\n    modifier: Modifier = Modifier,\n) {\n    val preferences = remember { Injekt.get<SubtitlePreferences>() }\n    val storageManager = remember { Injekt.get<StorageManager>() }\n    var isExpanded by remember { mutableStateOf(true) }\n\n    val fontsDir = storageManager.getFontsDirectory()\n    val fonts by remember { mutableStateOf(mutableListOf(preferences.subtitleFont().defaultValue())) }\n    var fontsLoadingIndicator: (@Composable () -> Unit)? by remember {\n        val indicator: (@Composable () -> Unit) = {\n            CircularProgressIndicator(Modifier.size(32.dp))\n        }\n        mutableStateOf(indicator)\n    }\n    LaunchedEffect(Unit) {\n        if (fontsDir == null) {\n            fontsLoadingIndicator = null\n            return@LaunchedEffect\n        }\n        withContext(Dispatchers.IO) {\n            fontsDir.listFiles()?.filter { file ->\n                file.name?.lowercase()?.matches(FONT_EXTENSION_REGEX) == true\n            }?.mapNotNull {\n                runCatching { TTFFile.open(it.openInputStream()).families.values.first() }.getOrNull()\n            }?.let {\n                fonts.addAll(\n                    it.distinct(),\n                )\n            }\n            fontsLoadingIndicator = null\n        }\n    }\n\n    ExpandableCard(\n        isExpanded = isExpanded,\n        onExpand = { isExpanded = !isExpanded },\n        title = {\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n            ) {\n                Icon(Icons.Default.FormatColorText, null)\n                Text(stringResource(AYMR.strings.player_sheets_sub_typography_title))\n            }\n        },\n        modifier = modifier.widthIn(max = CARDS_MAX_WIDTH),\n        colors = panelCardsColors(),\n    ) {\n        Column {\n            var isBold by remember { mutableStateOf(MPVLib.getPropertyBoolean(\"sub-bold\")) }\n            var isItalic by remember { mutableStateOf(MPVLib.getPropertyBoolean(\"sub-italic\")) }\n            var justify by remember {\n                mutableStateOf(\n                    SubtitleJustification.entries.first {\n                        it.value == MPVLib.getPropertyString(\"sub-justify\")\n                    },\n                )\n            }\n            var font by remember { mutableStateOf(MPVLib.getPropertyString(\"sub-font\")) }\n            var fontSize by remember {\n                mutableStateOf(MPVLib.getPropertyInt(\"sub-font-size\"))\n            }\n            var borderStyle by remember {\n                mutableStateOf(\n                    SubtitlesBorderStyle.entries.first { it.value == MPVLib.getPropertyString(\"sub-border-style\") },\n                )\n            }\n            var borderSize by remember {\n                mutableStateOf(\n                    MPVLib.getPropertyInt(\"sub-border-size\"),\n                )\n            }\n            var shadowOffset by remember {\n                mutableStateOf(\n                    MPVLib.getPropertyInt(\"sub-shadow-offset\"),\n                )\n            }\n            Row(\n                Modifier\n                    .fillMaxWidth()\n                    .horizontalScroll(rememberScrollState())\n                    .padding(start = MaterialTheme.padding.extraSmall, end = MaterialTheme.padding.medium),\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                IconToggleButton(\n                    checked = isBold,\n                    onCheckedChange = {\n                        isBold = it\n                        preferences.boldSubtitles().set(it)\n                        MPVLib.setPropertyBoolean(\"sub-bold\", it)\n                    },\n                ) {\n                    Icon(\n                        Icons.Default.FormatBold,\n                        null,\n                        modifier = Modifier.size(32.dp),\n                    )\n                }\n                IconToggleButton(\n                    checked = isItalic,\n                    onCheckedChange = {\n                        isItalic = it\n                        preferences.italicSubtitles().set(it)\n                        MPVLib.setPropertyBoolean(\"sub-italic\", it)\n                    },\n                ) {\n                    Icon(\n                        Icons.Default.FormatItalic,\n                        null,\n                        modifier = Modifier.size(32.dp),\n                    )\n                }\n                SubtitleJustification.entries.minus(SubtitleJustification.Auto).forEach { justification ->\n                    IconToggleButton(\n                        checked = justify == justification,\n                        onCheckedChange = {\n                            justify = justification\n                            MPVLib.setPropertyBoolean(\"sub-ass-justify\", it)\n                            if (it) {\n                                preferences.subtitleJustification().set(justification)\n                                MPVLib.setPropertyString(\"sub-justify\", justification.value)\n                            } else {\n                                preferences.subtitleJustification().set(SubtitleJustification.Auto)\n                                MPVLib.setPropertyString(\"sub-justify\", SubtitleJustification.Auto.value)\n                            }\n                        },\n                    ) {\n                        Icon(justification.icon, null)\n                    }\n                }\n                Spacer(Modifier.weight(1f))\n                TextButton(onClick = {\n                    resetTypography(preferences)\n                    isBold = MPVLib.getPropertyBoolean(\"sub-bold\")\n                    isItalic = MPVLib.getPropertyBoolean(\"sub-italic\")\n                    justify =\n                        SubtitleJustification.entries.first { it.value == MPVLib.getPropertyString(\"sub-justify\") }\n                    font = MPVLib.getPropertyString(\"sub-font\")\n                    fontSize = MPVLib.getPropertyInt(\"sub-font-size\")\n                    borderStyle =\n                        SubtitlesBorderStyle.entries.first { it.value == MPVLib.getPropertyString(\"sub-border-style\") }\n                    borderSize = MPVLib.getPropertyInt(\"sub-border-size\")\n                    shadowOffset = MPVLib.getPropertyInt(\"sub-shadow-offset\")\n                }) {\n                    Row(\n                        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        verticalAlignment = Alignment.CenterVertically,\n                    ) {\n                        Icon(Icons.Default.FormatClear, null)\n                        Text(stringResource(MR.strings.action_reset))\n                    }\n                }\n            }\n            Row(\n                modifier = Modifier.padding(horizontal = MaterialTheme.padding.medium),\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                Icon(\n                    painterResource(R.drawable.outline_brand_family_24),\n                    null,\n                    modifier = Modifier.size(32.dp),\n                )\n                ExposedTextDropDownMenu(\n                    selectedValue = font,\n                    options = fonts.toImmutableList(),\n                    label = stringResource(AYMR.strings.player_sheets_sub_typography_font),\n                    onValueChangedEvent = {\n                        font = it\n                        preferences.subtitleFont().set(it)\n                        MPVLib.setPropertyString(\"sub-font\", it)\n                    },\n                    leadingIcon = fontsLoadingIndicator,\n                )\n            }\n            SliderItem(\n                label = stringResource(AYMR.strings.player_sheets_sub_typography_font_size),\n                max = 100,\n                min = 1,\n                value = fontSize,\n                valueText = fontSize.toString(),\n                onChange = {\n                    fontSize = it\n                    preferences.subtitleFontSize().set(it)\n                    MPVLib.setPropertyInt(\"sub-font-size\", it)\n                },\n            ) {\n                Icon(Icons.Default.FormatSize, null)\n            }\n\n            var selectingBorderStyle by remember { mutableStateOf(false) }\n            Box {\n                Row(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .clickable(\n                            onClick = {\n                                selectingBorderStyle = !selectingBorderStyle\n                            },\n                        )\n                        .padding(\n                            horizontal = MaterialTheme.padding.medium,\n                            vertical = MaterialTheme.padding.small,\n                        ),\n                    verticalAlignment = Alignment.CenterVertically,\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n                ) {\n                    Icon(Icons.Default.BorderStyle, null)\n                    Column {\n                        Text(\n                            text = stringResource(AYMR.strings.player_sheets_sub_typography_border_style),\n                            style = MaterialTheme.typography.bodyLarge,\n                        )\n                        Text(\n                            text = stringResource(borderStyle.titleRes),\n                            style = MaterialTheme.typography.bodyMedium,\n                        )\n                    }\n                }\n                DropdownMenu(expanded = selectingBorderStyle, onDismissRequest = { selectingBorderStyle = false }) {\n                    SubtitlesBorderStyle.entries.map {\n                        DropdownMenuItem(\n                            text = { Text(stringResource(it.titleRes)) },\n                            onClick = {\n                                borderStyle = it\n                                preferences.borderStyleSubtitles().set(it)\n                                MPVLib.setPropertyString(\"sub-border-style\", it.value)\n                                selectingBorderStyle = false\n                            },\n                            trailingIcon = {\n                                if (borderStyle == it) {\n                                    Icon(\n                                        imageVector = Icons.Default.Check,\n                                        contentDescription = null,\n                                    )\n                                }\n                            },\n                        )\n                    }\n                }\n            }\n            SliderItem(\n                stringResource(AYMR.strings.player_sheets_sub_typography_border_size),\n                value = borderSize,\n                valueText = borderSize.toString(),\n                onChange = {\n                    borderSize = it\n                    preferences.subtitleBorderSize().set(it)\n                    MPVLib.setPropertyInt(\"sub-border-size\", it)\n                },\n                max = 100,\n                icon = { Icon(Icons.Default.BorderColor, null) },\n            )\n            SliderItem(\n                stringResource(AYMR.strings.player_sheets_subtitles_shadow_offset),\n                value = shadowOffset,\n                valueText = shadowOffset.toString(),\n                onChange = {\n                    shadowOffset = it\n                    preferences.shadowOffsetSubtitles().set(it)\n                    MPVLib.setPropertyInt(\"sub-shadow-offset\", it)\n                },\n                max = 100,\n                icon = { Icon(painterResource(R.drawable.sharp_shadow_24), null) },\n            )\n        }\n    }\n}\n\nprivate val FONT_EXTENSION_REGEX = Regex(\"\"\".*\\.[ot]tf${'$'}\"\"\")\n\nfun resetTypography(preferences: SubtitlePreferences) {\n    MPVLib.setPropertyBoolean(\"sub-bold\", preferences.boldSubtitles().deleteAndGet())\n    MPVLib.setPropertyBoolean(\"sub-italic\", preferences.italicSubtitles().deleteAndGet())\n    MPVLib.setPropertyBoolean(\"sub-ass-justify\", preferences.overrideSubsASS().deleteAndGet())\n    MPVLib.setPropertyString(\"sub-justify\", preferences.subtitleJustification().deleteAndGet().value)\n    MPVLib.setPropertyString(\"sub-font\", preferences.subtitleFont().deleteAndGet())\n    MPVLib.setPropertyInt(\"sub-font-size\", preferences.subtitleFontSize().deleteAndGet())\n    MPVLib.setPropertyInt(\"sub-border-size\", preferences.subtitleBorderSize().deleteAndGet())\n    MPVLib.setPropertyInt(\"sub-shadow-offset\", preferences.shadowOffsetSubtitles().deleteAndGet())\n    MPVLib.setPropertyString(\"sub-border-style\", preferences.borderStyleSubtitles().deleteAndGet().value)\n}\n\nenum class SubtitlesBorderStyle(\n    val value: String,\n    val titleRes: StringResource,\n) {\n    OutlineAndShadow(\"outline-and-shadow\", AYMR.strings.player_sheets_subtitles_border_style_outline_and_shadow),\n    OpaqueBox(\"opaque-box\", AYMR.strings.player_sheets_subtitles_border_style_opaque_box),\n    BackgroundBox(\"background-box\", AYMR.strings.player_sheets_subtitles_border_style_background_box),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/VideoFiltersPanel.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.panels\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\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.widthIn\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.outlined.Info\nimport androidx.compose.material3.Card\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.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport eu.kanade.presentation.player.components.SliderItem\nimport eu.kanade.tachiyomi.ui.player.VideoFilters\nimport eu.kanade.tachiyomi.ui.player.controls.CARDS_MAX_WIDTH\nimport eu.kanade.tachiyomi.ui.player.controls.components.ControlsButton\nimport eu.kanade.tachiyomi.ui.player.controls.panelCardsColors\nimport eu.kanade.tachiyomi.ui.player.settings.DecoderPreferences\nimport `is`.xyz.mpv.MPVLib\nimport tachiyomi.core.common.preference.deleteAndGet\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun VideoFiltersPanel(\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    ConstraintLayout(\n        modifier = modifier\n            .fillMaxSize()\n            .padding(MaterialTheme.padding.medium),\n    ) {\n        val filtersCard = createRef()\n\n        FiltersCard(\n            Modifier.constrainAs(filtersCard) {\n                linkTo(parent.top, parent.bottom, bias = 0.8f)\n                end.linkTo(parent.end)\n            },\n            onClose = onDismissRequest,\n        )\n    }\n}\n\n@Composable\nfun FiltersCard(\n    modifier: Modifier = Modifier,\n    onClose: () -> Unit,\n) {\n    val decoderPreferences = remember { Injekt.get<DecoderPreferences>() }\n    Card(\n        colors = panelCardsColors(),\n        modifier = modifier\n            .widthIn(max = CARDS_MAX_WIDTH),\n    ) {\n        Row(\n            Modifier\n                .fillMaxWidth()\n                .padding(start = MaterialTheme.padding.medium),\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.SpaceBetween,\n        ) {\n            Text(\n                stringResource(AYMR.strings.player_sheets_filters_title),\n                style = MaterialTheme.typography.headlineMedium,\n            )\n            Row(\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            ) {\n                TextButton(\n                    onClick = {\n                        VideoFilters.entries.forEach {\n                            MPVLib.setPropertyInt(it.mpvProperty, it.preference(decoderPreferences).deleteAndGet())\n                        }\n                    },\n                ) {\n                    Text(text = stringResource(MR.strings.action_reset))\n                }\n                ControlsButton(Icons.Default.Close, onClose)\n            }\n        }\n        LazyColumn {\n            items(VideoFilters.entries) { filter ->\n                val value by filter.preference(decoderPreferences).collectAsState()\n                SliderItem(\n                    label = stringResource(filter.titleRes),\n                    value = value,\n                    valueText = value.toString(),\n                    onChange = {\n                        filter.preference(decoderPreferences).set(it)\n                        MPVLib.setPropertyInt(filter.mpvProperty, it)\n                    },\n                    max = 100,\n                    min = -100,\n                )\n            }\n            item {\n                if (decoderPreferences.gpuNext().get()) return@item\n                Column(\n                    modifier = Modifier\n                        .padding(MaterialTheme.padding.medium)\n                        .fillMaxWidth(),\n                    verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n                    horizontalAlignment = Alignment.Start,\n                ) {\n                    Icon(Icons.Outlined.Info, null)\n                    Text(stringResource(AYMR.strings.player_sheets_filters_warning))\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/AudioTracksSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.MoreTime\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.RadioButton\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel.VideoTrack\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun AudioTracksSheet(\n    tracks: ImmutableList<VideoTrack>,\n    selectedId: Int,\n    onSelect: (Int) -> Unit,\n    onAddAudioTrack: () -> Unit,\n    onOpenDelayPanel: () -> Unit,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    GenericTracksSheet(\n        tracks = tracks,\n        onDismissRequest = onDismissRequest,\n        header = {\n            TrackSheetTitle(\n                title = stringResource(AYMR.strings.pref_player_audio),\n                actions = {\n                    TextButton(onClick = onOpenDelayPanel) {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        ) {\n                            Icon(imageVector = Icons.Default.MoreTime, contentDescription = null)\n                            Text(text = stringResource(AYMR.strings.player_sheets_track_delay))\n                        }\n                    }\n                },\n            )\n\n            AddTrackRow(\n                title = stringResource(AYMR.strings.player_sheets_add_ext_audio),\n                onClick = onAddAudioTrack,\n            )\n        },\n        track = {\n            AudioTrackRow(\n                title = getTrackTitle(it),\n                isSelected = selectedId == it.id,\n                onClick = { onSelect(it.id) },\n            )\n        },\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun AudioTrackRow(\n    title: String,\n    isSelected: Boolean,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .clickable(onClick = onClick)\n            .padding(start = MaterialTheme.padding.small, end = MaterialTheme.padding.medium),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        RadioButton(\n            selected = isSelected,\n            onClick = onClick,\n        )\n        Text(\n            title,\n            fontWeight = if (isSelected) FontWeight.ExtraBold else FontWeight.Normal,\n            fontStyle = if (isSelected) FontStyle.Italic else FontStyle.Normal,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/ChaptersSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\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.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport dev.vivvvek.seeker.Segment\nimport `is`.xyz.mpv.Utils\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun ChaptersSheet(\n    chapters: ImmutableList<Segment>,\n    currentChapter: Segment,\n    onClick: (Segment) -> Unit,\n    onDismissRequest: () -> Unit,\n    dismissSheet: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    GenericTracksSheet(\n        tracks = chapters,\n        header = {\n            TrackSheetTitle(\n                title = stringResource(AYMR.strings.player_sheets_chapters_title),\n                modifier = modifier.padding(top = MaterialTheme.padding.small),\n            )\n        },\n        track = {\n            ChapterTrack(\n                chapter = it,\n                index = chapters.indexOf(it),\n                selected = currentChapter == it,\n                onClick = { onClick(it) },\n            )\n        },\n        onDismissRequest = onDismissRequest,\n        dismissEvent = dismissSheet,\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun ChapterTrack(\n    chapter: Segment,\n    index: Int,\n    selected: Boolean,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .clickable(onClick = onClick)\n            .padding(vertical = MaterialTheme.padding.small, horizontal = MaterialTheme.padding.medium),\n        horizontalArrangement = Arrangement.SpaceBetween,\n    ) {\n        Text(\n            stringResource(AYMR.strings.player_sheets_track_title_wo_lang, index + 1, chapter.name),\n            fontStyle = if (selected) FontStyle.Italic else FontStyle.Normal,\n            fontWeight = if (selected) FontWeight.ExtraBold else FontWeight.Normal,\n            maxLines = 1,\n            modifier = Modifier.weight(1f),\n            overflow = TextOverflow.Ellipsis,\n        )\n        Text(\n            Utils.prettyTime(chapter.start.toInt()),\n            fontStyle = if (selected) FontStyle.Italic else FontStyle.Normal,\n            fontWeight = if (selected) FontWeight.ExtraBold else FontWeight.Normal,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/GenericTracksSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport androidx.compose.foundation.clickable\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.fillMaxHeight\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.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Add\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.unit.dp\nimport eu.kanade.presentation.player.components.PlayerSheet\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel.VideoTrack\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun <T> GenericTracksSheet(\n    tracks: ImmutableList<T>,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n    dismissEvent: Boolean = false,\n    header: @Composable () -> Unit = {},\n    track: @Composable (T) -> Unit = {},\n    footer: @Composable () -> Unit = {},\n) {\n    PlayerSheet(onDismissRequest, dismissEvent = dismissEvent) {\n        Column(modifier) {\n            header()\n            LazyColumn {\n                items(tracks) {\n                    track(it)\n                }\n                item {\n                    footer()\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun AddTrackRow(\n    title: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    actions: @Composable RowScope.() -> Unit = {},\n) {\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .clickable(onClick = onClick)\n            .height(48.dp),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        Row(\n            modifier = Modifier\n                .clickable(onClick = onClick)\n                .fillMaxHeight()\n                .weight(1f)\n                .padding(start = MaterialTheme.padding.medium),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = Icons.Default.Add,\n                contentDescription = null,\n                modifier = Modifier.size(32.dp),\n            )\n            Text(text = title)\n        }\n        actions()\n    }\n}\n\n@Composable\nfun getTrackTitle(track: VideoTrack): String {\n    return when {\n        track.id == -1 -> {\n            track.name\n        }\n\n        track.language.isNullOrBlank() && track.name.isNotBlank() -> {\n            stringResource(AYMR.strings.player_sheets_track_title_wo_lang, track.id, track.name)\n        }\n\n        !track.language.isNullOrBlank() && track.name.isNotBlank() -> {\n            stringResource(AYMR.strings.player_sheets_track_title_w_lang, track.id, track.name, track.language)\n        }\n\n        !track.language.isNullOrBlank() && track.name.isBlank() -> {\n            stringResource(AYMR.strings.player_sheets_track_lang_wo_title, track.id, track.language)\n        }\n\n        else -> stringResource(AYMR.strings.player_sheets_track_title_wo_lang, track.id, track.name)\n    }\n}\n\n@Composable\nfun TrackSheetTitle(\n    title: String,\n    modifier: Modifier = Modifier,\n    actions: @Composable RowScope.() -> Unit = {},\n) {\n    Row(\n        modifier = modifier.fillMaxWidth()\n            .padding(\n                start = MaterialTheme.padding.medium,\n                end = MaterialTheme.padding.medium,\n                top = MaterialTheme.padding.small,\n                bottom = MaterialTheme.padding.extraSmall,\n            ),\n        horizontalArrangement = Arrangement.SpaceBetween,\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Text(\n            text = title,\n            style = MaterialTheme.typography.headlineMedium,\n        )\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n        ) {\n            actions()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/MoreSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport android.text.format.DateUtils\nimport androidx.compose.animation.animateContentSize\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.IntrinsicSize\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.width\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.KeyboardAlt\nimport androidx.compose.material.icons.filled.Tune\nimport androidx.compose.material.icons.outlined.Schedule\nimport androidx.compose.material.icons.outlined.Timer\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TimeInput\nimport androidx.compose.material3.TimePicker\nimport androidx.compose.material3.rememberTimePickerState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\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.unit.dp\nimport androidx.compose.ui.window.Dialog\nimport androidx.compose.ui.window.DialogProperties\nimport eu.kanade.presentation.player.components.PlayerSheet\nimport eu.kanade.tachiyomi.ui.player.Decoder\nimport eu.kanade.tachiyomi.ui.player.execute\nimport eu.kanade.tachiyomi.ui.player.executeLongPress\nimport eu.kanade.tachiyomi.ui.player.settings.AdvancedPlayerPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.AudioChannels\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport `is`.xyz.mpv.MPVLib\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n@Composable\nfun MoreSheet(\n    selectedDecoder: Decoder,\n    onSelectDecoder: (Decoder) -> Unit,\n    remainingTime: Int,\n    onStartTimer: (Int) -> Unit,\n    onDismissRequest: () -> Unit,\n    onEnterFiltersPanel: () -> Unit,\n    customButtons: ImmutableList<CustomButton>,\n    modifier: Modifier = Modifier,\n) {\n    val advancedPreferences = remember { Injekt.get<AdvancedPlayerPreferences>() }\n    val audioPreferences = remember { Injekt.get<AudioPreferences>() }\n    val statisticsPage by advancedPreferences.playerStatisticsPage().collectAsState()\n\n    PlayerSheet(\n        onDismissRequest = onDismissRequest,\n        modifier = modifier,\n    ) {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(MaterialTheme.padding.medium)\n                .verticalScroll(rememberScrollState()),\n            verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            Row(\n                modifier = Modifier.fillMaxWidth(),\n                horizontalArrangement = Arrangement.SpaceBetween,\n                verticalAlignment = Alignment.CenterVertically,\n            ) {\n                Text(\n                    text = stringResource(AYMR.strings.player_sheets_more_title),\n                    style = MaterialTheme.typography.headlineMedium,\n                )\n                Row(\n                    verticalAlignment = Alignment.CenterVertically,\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                ) {\n                    var isSleepTimerDialogShown by remember { mutableStateOf(false) }\n                    TextButton(onClick = { isSleepTimerDialogShown = true }) {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        ) {\n                            Icon(imageVector = Icons.Outlined.Timer, contentDescription = null)\n                            Text(\n                                text =\n                                if (remainingTime == 0) {\n                                    stringResource(AYMR.strings.timer_title)\n                                } else {\n                                    stringResource(\n                                        AYMR.strings.timer_remaining,\n                                        DateUtils.formatElapsedTime(remainingTime.toLong()),\n                                    )\n                                },\n                            )\n                            if (isSleepTimerDialogShown) {\n                                TimePickerDialog(\n                                    remainingTime = remainingTime,\n                                    onDismissRequest = { isSleepTimerDialogShown = false },\n                                    onTimeSelect = onStartTimer,\n                                )\n                            }\n                        }\n                    }\n                    TextButton(onClick = onEnterFiltersPanel) {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        ) {\n                            Icon(imageVector = Icons.Default.Tune, contentDescription = null)\n                            Text(text = stringResource(AYMR.strings.player_sheets_filters_title))\n                        }\n                    }\n                }\n            }\n\n            Text(stringResource(AYMR.strings.player_hwdec_mode))\n            LazyRow(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                items(Decoder.entries.minus(Decoder.Auto)) { decoder ->\n                    FilterChip(\n                        selected = decoder == selectedDecoder,\n                        onClick = { onSelectDecoder(decoder) },\n                        label = { Text(text = decoder.title) },\n                    )\n                }\n            }\n\n            Text(stringResource(AYMR.strings.player_sheets_stats_page_title))\n            LazyRow(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                items(6) { page ->\n                    FilterChip(\n                        label = {\n                            Text(\n                                stringResource(\n                                    if (page ==\n                                        0\n                                    ) {\n                                        AYMR.strings.player_sheets_tracks_off\n                                    } else {\n                                        AYMR.strings.player_sheets_stats_page_chip\n                                    },\n                                    page,\n                                ),\n                            )\n                        },\n                        onClick = {\n                            if ((page == 0) xor (statisticsPage == 0)) {\n                                MPVLib.command(arrayOf(\"script-binding\", \"stats/display-stats-toggle\"))\n                            }\n                            if (page != 0) {\n                                MPVLib.command(arrayOf(\"script-binding\", \"stats/display-page-$page\"))\n                            }\n                            advancedPreferences.playerStatisticsPage().set(page)\n                        },\n                        selected = statisticsPage == page,\n                    )\n                }\n            }\n\n            if (customButtons.isNotEmpty()) {\n                Text(text = stringResource(AYMR.strings.player_sheets_custom_buttons_title))\n                FlowRow(\n                    verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.mediumSmall),\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n                    maxItemsInEachRow = Int.MAX_VALUE,\n                ) {\n                    customButtons.forEach { button ->\n\n                        val inputChipInteractionSource = remember { MutableInteractionSource() }\n\n                        Box {\n                            FilterChip(\n                                onClick = {},\n                                label = { Text(text = button.name) },\n                                selected = false,\n                                interactionSource = inputChipInteractionSource,\n                            )\n                            Box(\n                                modifier = Modifier\n                                    .matchParentSize()\n                                    .combinedClickable(\n                                        onClick = { button.execute() },\n                                        onLongClick = { button.executeLongPress() },\n                                        interactionSource = inputChipInteractionSource,\n                                        indication = null,\n                                    ),\n                            )\n                        }\n                    }\n                }\n            }\n            Text(text = stringResource(AYMR.strings.pref_audio_channels))\n            val audioChannels by audioPreferences.audioChannels().collectAsState()\n            LazyRow(\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                items(AudioChannels.entries) {\n                    FilterChip(\n                        selected = audioChannels == it,\n                        onClick = {\n                            audioPreferences.audioChannels().set(it)\n                            if (it == AudioChannels.ReverseStereo) {\n                                MPVLib.setPropertyString(AudioChannels.AutoSafe.property, AudioChannels.AutoSafe.value)\n                            } else {\n                                MPVLib.setPropertyString(AudioChannels.ReverseStereo.property, \"\")\n                            }\n                            MPVLib.setPropertyString(it.property, it.value)\n                        },\n                        label = { Text(text = stringResource(it.titleRes)) },\n                    )\n                }\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun TimePickerDialog(\n    onDismissRequest: () -> Unit,\n    onTimeSelect: (Int) -> Unit,\n    modifier: Modifier = Modifier,\n    remainingTime: Int = 0,\n) {\n    Dialog(\n        onDismissRequest = onDismissRequest,\n        properties = DialogProperties(usePlatformDefaultWidth = false),\n    ) {\n        Surface(\n            shape = MaterialTheme.shapes.medium,\n            color = MaterialTheme.colorScheme.surface,\n            modifier = modifier.padding(MaterialTheme.padding.medium),\n        ) {\n            Column(\n                modifier = Modifier\n                    .verticalScroll(rememberScrollState())\n                    .width(IntrinsicSize.Max)\n                    .animateContentSize()\n                    .padding(MaterialTheme.padding.medium),\n            ) {\n                var currentLayoutType by rememberSaveable { mutableIntStateOf(0) }\n                Text(\n                    text = stringResource(\n                        if (currentLayoutType == 1) {\n                            AYMR.strings.timer_picker_pick_time\n                        } else {\n                            AYMR.strings.timer_picker_enter_timer\n                        },\n                    ),\n                )\n\n                val state = rememberTimePickerState(\n                    remainingTime / 3600,\n                    (remainingTime % 3600) / 60,\n                    is24Hour = true,\n                )\n                Box(\n                    contentAlignment = Alignment.Center,\n                ) {\n                    if (currentLayoutType == 1) {\n                        TimePicker(state = state)\n                    } else {\n                        TimeInput(state = state)\n                    }\n                }\n                Row(\n                    horizontalArrangement = Arrangement.SpaceBetween,\n                    modifier = Modifier.fillMaxWidth(),\n                ) {\n                    IconButton(onClick = { currentLayoutType = if (currentLayoutType == 0) 1 else 0 }) {\n                        Icon(\n                            imageVector = if (currentLayoutType ==\n                                0\n                            ) {\n                                Icons.Outlined.Schedule\n                            } else {\n                                Icons.Default.KeyboardAlt\n                            },\n                            contentDescription = null,\n                        )\n                    }\n                    Row {\n                        if (remainingTime > 0) {\n                            TextButton(onClick = {\n                                onTimeSelect(0)\n                                onDismissRequest()\n                            }) {\n                                Text(stringResource(AYMR.strings.timer_cancel_timer))\n                            }\n                        }\n                        Spacer(modifier = Modifier.width(8.dp))\n                        TextButton(\n                            onClick = {\n                                onTimeSelect(state.hour * 3600 + state.minute * 60)\n                                onDismissRequest()\n                            },\n                        ) {\n                            Text(stringResource(MR.strings.action_ok))\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/PlaybackSpeedSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport androidx.compose.foundation.clickable\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.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Add\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.RestartAlt\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.FilledIconButton\nimport androidx.compose.material3.FilledTonalIconButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.InputChip\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.player.components.PlayerSheet\nimport eu.kanade.presentation.player.components.SliderItem\nimport eu.kanade.presentation.player.components.SwitchPreference\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport `is`.xyz.mpv.MPVLib\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.math.pow\nimport kotlin.math.roundToInt\n\n@Composable\nfun PlaybackSpeedSheet(\n    speed: Float,\n    onSpeedChange: (Float) -> Unit,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val preferences = remember { Injekt.get<PlayerPreferences>() }\n    val audioPreferences = remember { Injekt.get<AudioPreferences>() }\n    PlayerSheet(onDismissRequest = onDismissRequest) {\n        Column(\n            modifier\n                .verticalScroll(rememberScrollState())\n                .padding(vertical = MaterialTheme.padding.medium),\n        ) {\n            SliderItem(\n                label = stringResource(AYMR.strings.player_sheets_speed_slider_label),\n                value = speed,\n                valueText = stringResource(AYMR.strings.player_speed, speed),\n                onChange = onSpeedChange,\n                max = 6f,\n                min = 0.01f,\n            )\n            val playbackSpeedPresets by preferences.speedPresets().collectAsState()\n            Row(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = MaterialTheme.padding.medium),\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n            ) {\n                FilledTonalIconButton(onClick = {\n                    preferences.speedPresets().delete()\n                }) {\n                    Icon(Icons.Default.RestartAlt, null)\n                }\n                LazyRow(\n                    modifier = Modifier\n                        .weight(1f),\n                    horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                ) {\n                    items(\n                        playbackSpeedPresets.map { it.toFloat() }.sorted(),\n                        key = { it },\n                    ) {\n                        InputChip(\n                            selected = speed == it,\n                            onClick = { onSpeedChange(it) },\n                            label = { Text(stringResource(AYMR.strings.player_speed, it)) },\n                            modifier = Modifier\n                                .animateItem(),\n                            trailingIcon = {\n                                Icon(\n                                    Icons.Default.Close,\n                                    null,\n                                    modifier = Modifier\n                                        .clickable {\n                                            preferences.speedPresets().set(\n                                                playbackSpeedPresets.minus(it.toFixed(2).toString()),\n                                            )\n                                        },\n                                )\n                            },\n                        )\n                    }\n                }\n                FilledTonalIconButton(\n                    onClick = {\n                        preferences.speedPresets().set(playbackSpeedPresets.plus(speed.toFixed(2).toString()))\n                    },\n                ) {\n                    Icon(Icons.Default.Add, null)\n                }\n            }\n            val pitchCorrection by audioPreferences.enablePitchCorrection().collectAsState()\n            SwitchPreference(\n                value = pitchCorrection,\n                onValueChange = {\n                    audioPreferences.enablePitchCorrection().set(it)\n                    MPVLib.setPropertyBoolean(\"audio-pitch-correction\", it)\n                },\n                content = {\n                    Column(\n                        modifier = Modifier.weight(1f),\n                    ) {\n                        Text(text = stringResource(AYMR.strings.pref_audio_pitch_correction_title))\n                        Text(\n                            text = stringResource(AYMR.strings.pref_audio_pitch_correction_summary),\n                            style = MaterialTheme.typography.bodyMedium,\n                        )\n                    }\n                },\n            )\n            Row(\n                modifier = Modifier\n                    .padding(horizontal = MaterialTheme.padding.medium),\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                Button(\n                    modifier = Modifier.weight(1f),\n                    onClick = { preferences.playerSpeed().set(speed) },\n                ) {\n                    Text(text = stringResource(AYMR.strings.player_sheets_speed_make_default))\n                }\n                FilledIconButton(\n                    onClick = {\n                        preferences.playerSpeed().delete()\n                        onSpeedChange(1f)\n                    },\n                ) {\n                    Icon(imageVector = Icons.Default.RestartAlt, contentDescription = null)\n                }\n            }\n        }\n    }\n}\n\nfun Float.toFixed(precision: Int = 1): Float {\n    val factor = 10.0f.pow(precision)\n    return (this * factor).roundToInt() / factor\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/QualitySheet.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.expandVertically\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.shrinkVertically\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutVertically\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.Row\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.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ErrorOutline\nimport androidx.compose.material.icons.filled.KeyboardArrowDown\nimport androidx.compose.material.icons.filled.KeyboardArrowUp\nimport androidx.compose.material3.CircularProgressIndicator\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.Color\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.player.components.PlayerSheet\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.pluralStringResource\nimport tachiyomi.presentation.core.i18n.stringResource\n\nsealed class HosterState(open val name: String) {\n    data class Idle(override val name: String) : HosterState(name)\n    data class Loading(override val name: String) : HosterState(name)\n    data class Error(override val name: String) : HosterState(name)\n    data class Ready(\n        override val name: String,\n        val videoList: List<Video>,\n        val videoState: List<Video.State>,\n    ) : HosterState(name)\n}\n\nfun HosterState.Ready.getChangedAt(index: Int, newVideo: Video, newState: Video.State): HosterState.Ready {\n    return HosterState.Ready(\n        name = this.name,\n        videoList = this.videoList.mapIndexed { idx, video ->\n            if (idx == index) newVideo else video\n        },\n        videoState = this.videoState.mapIndexed { idx, state ->\n            if (idx == index) newState else state\n        },\n    )\n}\n\n@Composable\nfun QualitySheet(\n    isLoadingHosters: Boolean,\n    hosterState: List<HosterState>,\n    expandedState: List<Boolean>,\n    selectedVideoIndex: Pair<Int, Int>,\n    onClickHoster: (Int) -> Unit,\n    onClickVideo: (Int, Int) -> Unit,\n    displayHosters: Pair<Boolean, Boolean>,\n    onDismissRequest: () -> Unit,\n    dismissSheet: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    PlayerSheet(\n        onDismissRequest = {\n            onDismissRequest()\n        },\n        dismissEvent = dismissSheet,\n        modifier = modifier,\n    ) {\n        Column {\n            Text(\n                text = stringResource(AYMR.strings.player_sheets_qualities_title),\n                style = MaterialTheme.typography.headlineMedium,\n                modifier = Modifier.padding(\n                    top = MaterialTheme.padding.medium,\n                    start = MaterialTheme.padding.medium,\n                    bottom = MaterialTheme.padding.extraSmall,\n                ),\n            )\n\n            AnimatedVisibility(\n                visible = isLoadingHosters,\n                enter = fadeIn() + slideInVertically(initialOffsetY = { it / 2 }),\n                exit = fadeOut() + slideOutVertically(targetOffsetY = { it / 2 }),\n            ) {\n                Box(\n                    modifier = modifier\n                        .fillMaxWidth()\n                        .padding(vertical = MaterialTheme.padding.medium),\n                    contentAlignment = Alignment.Center,\n                ) {\n                    CircularProgressIndicator()\n                }\n            }\n\n            val qualitySheetPadding = PaddingValues(\n                bottom = MaterialTheme.padding.medium,\n                start = MaterialTheme.padding.medium,\n                end = MaterialTheme.padding.medium,\n            )\n\n            AnimatedVisibility(\n                visible = !isLoadingHosters,\n                enter = fadeIn() + slideInVertically(\n                    initialOffsetY = { it / 2 },\n                ),\n                exit = fadeOut() + slideOutVertically(\n                    targetOffsetY = { it / 2 },\n                ),\n            ) {\n                if (hosterState.size == 1 &&\n                    hosterState.first().name == Hoster.NO_HOSTER_LIST &&\n                    hosterState.first() is HosterState.Ready\n                ) {\n                    QualitySheetVideoContent(\n                        videoList = (hosterState.first() as HosterState.Ready).videoList,\n                        videoState = (hosterState.first() as HosterState.Ready).videoState,\n                        selectedVideoIndex = selectedVideoIndex.second,\n                        onClickVideo = onClickVideo,\n                        modifier = modifier.padding(paddingValues = qualitySheetPadding),\n                    )\n                } else {\n                    QualitySheetHosterContent(\n                        hosterState = hosterState,\n                        expandedState = expandedState,\n                        selectedVideoIndex = selectedVideoIndex,\n                        onClickHoster = onClickHoster,\n                        onClickVideo = onClickVideo,\n                        displayHosters = displayHosters,\n                        modifier = modifier.padding(paddingValues = qualitySheetPadding),\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun QualitySheetVideoContent(\n    videoList: List<Video>,\n    videoState: List<Video.State>,\n    selectedVideoIndex: Int,\n    onClickVideo: (Int, Int) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    LazyColumn(modifier = modifier.fillMaxWidth()) {\n        itemsIndexed(videoList) { videoIdx, video ->\n            VideoTrack(\n                video = video,\n                videoState = videoState[videoIdx],\n                selected = selectedVideoIndex == videoIdx,\n                onClick = { onClickVideo(0, videoIdx) },\n                noHoster = true,\n            )\n        }\n    }\n}\n\n@Composable\nfun QualitySheetHosterContent(\n    hosterState: List<HosterState>,\n    expandedState: List<Boolean>,\n    selectedVideoIndex: Pair<Int, Int>,\n    onClickHoster: (Int) -> Unit,\n    onClickVideo: (Int, Int) -> Unit,\n    displayHosters: Pair<Boolean, Boolean>,\n    modifier: Modifier = Modifier,\n) {\n    val validHosters = hosterState.withIndex().filter { (_, state) ->\n        state is HosterState.Idle ||\n            state is HosterState.Loading ||\n            (state is HosterState.Ready && state.videoList.isNotEmpty())\n    }\n    val failedHosters = hosterState.withIndex().filter { (_, state) ->\n        state is HosterState.Error\n    }\n    val emptyHosters = hosterState.withIndex().filter { (_, state) ->\n        state is HosterState.Ready && state.videoList.isEmpty()\n    }\n\n    LazyColumn(modifier = modifier.fillMaxWidth()) {\n        hosterContent(\n            hosters = validHosters,\n            expandedState = expandedState,\n            selectedVideoIndex = selectedVideoIndex,\n            onClickHoster = onClickHoster,\n            onClickVideo = onClickVideo,\n        )\n\n        if (displayHosters.first) {\n            hosterContent(\n                hosters = failedHosters,\n                expandedState = expandedState,\n                selectedVideoIndex = selectedVideoIndex,\n                onClickHoster = onClickHoster,\n                onClickVideo = onClickVideo,\n            )\n        }\n\n        if (displayHosters.second) {\n            hosterContent(\n                hosters = emptyHosters,\n                expandedState = expandedState,\n                selectedVideoIndex = selectedVideoIndex,\n                onClickHoster = onClickHoster,\n                onClickVideo = onClickVideo,\n            )\n        }\n    }\n}\n\ninternal fun LazyListScope.hosterContent(\n    hosters: List<IndexedValue<HosterState>>,\n    expandedState: List<Boolean>,\n    selectedVideoIndex: Pair<Int, Int>,\n    onClickHoster: (Int) -> Unit,\n    onClickVideo: (Int, Int) -> Unit,\n) {\n    hosters.forEach { (hosterIdx, hoster) ->\n        val isExpanded = expandedState.getOrNull(hosterIdx) ?: false\n\n        item {\n            HosterTrack(\n                hoster = hoster,\n                selected = selectedVideoIndex.first == hosterIdx,\n                isExpanded = isExpanded,\n                onClick = { onClickHoster(hosterIdx) },\n            )\n\n            AnimatedVisibility(\n                visible = hoster is HosterState.Ready && isExpanded,\n                enter = expandVertically(),\n                exit = shrinkVertically(),\n            ) {\n                (hoster as? HosterState.Ready)?.let {\n                    Column(\n                        modifier = Modifier.fillMaxWidth(),\n                    ) {\n                        it.videoList.forEachIndexed { videoIdx, video ->\n                            VideoTrack(\n                                video = video,\n                                videoState = hoster.videoState[videoIdx],\n                                selected = selectedVideoIndex == Pair(hosterIdx, videoIdx),\n                                onClick = { onClickVideo(hosterIdx, videoIdx) },\n                                noHoster = false,\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun HosterTrack(\n    hoster: HosterState,\n    selected: Boolean,\n    isExpanded: Boolean,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .height(32.dp)\n            .clickable(onClick = onClick),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Text(\n            text = hoster.name,\n            fontStyle = if (selected) FontStyle.Italic else FontStyle.Normal,\n            fontWeight = if (selected) FontWeight.ExtraBold else FontWeight.Normal,\n            style = MaterialTheme.typography.bodyMedium,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            modifier = Modifier.padding(end = MaterialTheme.padding.small),\n        )\n\n        when (hoster) {\n            is HosterState.Idle -> {\n                Text(\n                    text = stringResource(AYMR.strings.player_hoster_tap_to_load),\n                    modifier = Modifier.alpha(DISABLED_ALPHA),\n                )\n            }\n            is HosterState.Error -> {\n                Text(\n                    text = stringResource(AYMR.strings.player_hoster_failed),\n                    modifier = Modifier.alpha(DISABLED_ALPHA),\n                )\n                Spacer(modifier = Modifier.weight(1f))\n                Icon(Icons.Default.ErrorOutline, null, tint = MaterialTheme.colorScheme.error)\n            }\n            is HosterState.Loading -> {\n                Spacer(modifier = Modifier.weight(1f))\n                CircularProgressIndicator(\n                    modifier = Modifier.then(Modifier.size(24.dp)),\n                    strokeWidth = 2.dp,\n                )\n            }\n            is HosterState.Ready -> {\n                Text(\n                    text = pluralStringResource(\n                        AYMR.plurals.hoster_video_count,\n                        hoster.videoList.size,\n                        hoster.videoList.size,\n                    ),\n                    modifier = Modifier.alpha(DISABLED_ALPHA),\n                )\n                Spacer(modifier = Modifier.weight(1f))\n                if (isExpanded) {\n                    Icon(Icons.Default.KeyboardArrowUp, null)\n                } else {\n                    Icon(Icons.Default.KeyboardArrowDown, null)\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun VideoTrack(\n    video: Video,\n    videoState: Video.State,\n    selected: Boolean,\n    onClick: () -> Unit,\n    noHoster: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .clickable(onClick = onClick),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        if (noHoster) {\n            VideoText(\n                video = video,\n                selected = selected,\n                noHoster = true,\n                modifier = Modifier.weight(1f),\n            )\n            VideoIcon(\n                videoState = videoState,\n                noHoster = true,\n            )\n        } else {\n            VideoIcon(\n                videoState = videoState,\n                noHoster = false,\n            )\n            VideoText(\n                video = video,\n                selected = selected,\n                noHoster = false,\n                modifier = Modifier.weight(1f),\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun VideoIcon(\n    videoState: Video.State,\n    noHoster: Boolean,\n) {\n    Box(\n        modifier = Modifier.size(if (noHoster) 28.dp else 20.dp),\n        contentAlignment = Alignment.Center,\n    ) {\n        when (videoState) {\n            Video.State.QUEUE, Video.State.READY -> {}\n            Video.State.LOAD_VIDEO -> {\n                CircularProgressIndicator(\n                    modifier = Modifier.fillMaxSize(),\n                    strokeWidth = 2.dp,\n                )\n            }\n            Video.State.ERROR -> {\n                Icon(\n                    Icons.Default.ErrorOutline,\n                    null,\n                    tint = MaterialTheme.colorScheme.error,\n                    modifier = Modifier.fillMaxWidth(),\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun VideoText(\n    video: Video,\n    selected: Boolean,\n    noHoster: Boolean,\n    modifier: Modifier = Modifier,\n) {\n    Text(\n        text = video.videoTitle,\n        fontStyle = if (selected) FontStyle.Italic else FontStyle.Normal,\n        fontWeight = if (selected) FontWeight.ExtraBold else FontWeight.Normal,\n        style = MaterialTheme.typography.bodyMedium,\n        color = if (selected) MaterialTheme.colorScheme.primary else Color.Unspecified,\n        maxLines = 6,\n        overflow = TextOverflow.Ellipsis,\n        modifier = modifier\n            .padding(\n                vertical = if (noHoster) MaterialTheme.padding.small else MaterialTheme.padding.extraSmall,\n            ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/ScreenshotSheet.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.controls.components.sheets\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.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Photo\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material.icons.outlined.Share\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Modifier\nimport eu.kanade.presentation.player.components.PlayerSheet\nimport eu.kanade.presentation.player.components.SwitchPreference\nimport eu.kanade.tachiyomi.ui.player.ArtType\nimport eu.kanade.tachiyomi.ui.player.controls.components.dialogs.PlayerDialog\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.ActionButton\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.io.InputStream\n\n@Composable\nfun ScreenshotSheet(\n    isLocalSource: Boolean,\n    hasSubTracks: Boolean,\n    showSubtitles: Boolean,\n    onToggleShowSubtitles: (Boolean) -> Unit,\n\n    cachePath: String,\n    onSetAsArt: (ArtType, (() -> InputStream)) -> Unit,\n    onShare: (() -> InputStream) -> Unit,\n    onSave: (() -> InputStream) -> Unit,\n    takeScreenshot: (String, Boolean) -> InputStream?,\n\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    var setArtTypeAs: ArtType? by remember { mutableStateOf(null) }\n\n    PlayerSheet(\n        onDismissRequest = onDismissRequest,\n        modifier = modifier,\n    ) {\n        Column {\n            Row(\n                modifier = Modifier.padding(top = MaterialTheme.padding.medium),\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                ActionButton(\n                    modifier = Modifier.weight(1f),\n                    title = stringResource(MR.strings.set_as_cover),\n                    icon = Icons.Outlined.Photo,\n                    onClick = { setArtTypeAs = ArtType.Cover },\n                )\n                ActionButton(\n                    modifier = Modifier.weight(1f),\n                    title = stringResource(AYMR.strings.set_as_background),\n                    icon = Icons.Outlined.Photo,\n                    onClick = { setArtTypeAs = ArtType.Background },\n                )\n                if (isLocalSource) {\n                    ActionButton(\n                        modifier = Modifier.weight(1f),\n                        title = stringResource(AYMR.strings.set_as_thumbnail),\n                        icon = Icons.Outlined.Photo,\n                        onClick = { setArtTypeAs = ArtType.Thumbnail },\n                    )\n                }\n                ActionButton(\n                    modifier = Modifier.weight(1f),\n                    title = stringResource(MR.strings.action_share),\n                    icon = Icons.Outlined.Share,\n                    onClick = {\n                        onShare { takeScreenshot(cachePath, showSubtitles)!! }\n                    },\n                )\n                ActionButton(\n                    modifier = Modifier.weight(1f),\n                    title = stringResource(MR.strings.action_save),\n                    icon = Icons.Outlined.Save,\n                    onClick = {\n                        onSave { takeScreenshot(cachePath, showSubtitles)!! }\n                    },\n                )\n            }\n\n            if (hasSubTracks) {\n                SwitchPreference(\n                    value = showSubtitles,\n                    onValueChange = onToggleShowSubtitles,\n                    modifier = Modifier.padding(bottom = MaterialTheme.padding.medium),\n                    content = {\n                        Text(\n                            text = stringResource(AYMR.strings.screenshot_show_subs),\n                            style = MaterialTheme.typography.labelLarge,\n                            color = MaterialTheme.colorScheme.primary,\n                        )\n                    },\n                )\n            }\n        }\n    }\n\n    if (setArtTypeAs != null) {\n        PlayerDialog(\n            title = stringResource(MR.strings.confirm_set_image_as_cover),\n            modifier = Modifier.fillMaxWidth(fraction = 0.6F).padding(MaterialTheme.padding.medium),\n            onConfirmRequest = {\n                onSetAsArt(setArtTypeAs!!) {\n                    takeScreenshot(\n                        cachePath,\n                        showSubtitles,\n                    )!!\n                }\n            },\n            onDismissRequest = { setArtTypeAs = null },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/sheets/SubtitleTracksSheet.kt",
    "content": "/*\n * Copyright 2024 Abdallah Mehiz\n * https://github.com/abdallahmehiz/mpvKt\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage eu.kanade.tachiyomi.ui.player.controls.components.sheets\n\nimport androidx.compose.foundation.clickable\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.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.MoreTime\nimport androidx.compose.material.icons.filled.Palette\nimport androidx.compose.material.icons.outlined.Info\nimport androidx.compose.material3.Checkbox\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel.VideoTrack\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun SubtitlesSheet(\n    tracks: ImmutableList<VideoTrack>,\n    selectedTracks: ImmutableList<Int>,\n    onSelect: (Int) -> Unit,\n    onAddSubtitle: () -> Unit,\n    onOpenSubtitleSettings: () -> Unit,\n    onOpenSubtitleDelay: () -> Unit,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    GenericTracksSheet(\n        tracks = tracks,\n        onDismissRequest = onDismissRequest,\n        header = {\n            TrackSheetTitle(\n                title = stringResource(AYMR.strings.pref_player_subtitle),\n                actions = {\n                    TextButton(onClick = onOpenSubtitleSettings) {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        ) {\n                            Icon(imageVector = Icons.Default.Palette, contentDescription = null)\n                            Text(text = stringResource(AYMR.strings.player_sheets_track_palette))\n                        }\n                    }\n                    TextButton(onClick = onOpenSubtitleDelay) {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically,\n                            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n                        ) {\n                            Icon(imageVector = Icons.Default.MoreTime, contentDescription = null)\n                            Text(text = stringResource(AYMR.strings.player_sheets_track_delay))\n                        }\n                    }\n                },\n            )\n            AddTrackRow(\n                title = stringResource(AYMR.strings.player_sheets_add_ext_sub),\n                onClick = onAddSubtitle,\n            )\n        },\n        track = { track ->\n            SubtitleTrackRow(\n                title = getTrackTitle(track),\n                selected = selectedTracks.indexOf(track.id),\n                onClick = { onSelect(track.id) },\n            )\n        },\n        footer = {\n            Column(\n                modifier = modifier\n                    .padding(MaterialTheme.padding.medium)\n                    .fillMaxWidth(),\n                verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),\n                horizontalAlignment = Alignment.Start,\n            ) {\n                Icon(Icons.Outlined.Info, null)\n                Text(stringResource(AYMR.strings.player_sheets_subtitles_footer_secondary_sid_no_styles))\n            }\n        },\n        modifier = modifier,\n    )\n}\n\n@Composable\nfun SubtitleTrackRow(\n    title: String,\n    selected: Int, // -1 unselected, otherwise return 0 and 1 for the selected indices\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .fillMaxWidth()\n            .clickable(onClick = onClick)\n            .padding(start = MaterialTheme.padding.small, end = MaterialTheme.padding.medium),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Checkbox(\n            checked = selected > -1,\n            onCheckedChange = { _ -> onClick() },\n        )\n        Text(\n            text = title,\n            fontStyle = if (selected > -1) FontStyle.Italic else FontStyle.Normal,\n            fontWeight = if (selected > -1) FontWeight.ExtraBold else FontWeight.Normal,\n        )\n        Spacer(modifier = Modifier.weight(1f))\n        if (selected != -1) {\n            Text(\n                text = \"#${selected + 1}\",\n                fontStyle = if (selected > -1) FontStyle.Italic else FontStyle.Normal,\n                fontWeight = if (selected > -1) FontWeight.ExtraBold else FontWeight.Normal,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/loader/EpisodeLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.loader\n\nimport eu.kanade.domain.items.episode.model.toSEpisode\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.Hoster.Companion.toHosterList\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.HosterState\nimport kotlinx.coroutines.CancellationException\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.source.local.entries.anime.LocalAnimeSource\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Loader used to retrieve the hosters for a given episode.\n */\nclass EpisodeLoader {\n    companion object {\n\n        /**\n         * Returns a list of hosters of an [episode] based on the type of [source] used.\n         *\n         * @param episode the episode being parsed.\n         * @param anime the anime of the episode.\n         * @param source the source of the anime.\n         */\n        suspend fun getHosters(episode: Episode, anime: Anime, source: AnimeSource): List<Hoster> {\n            val isDownloaded = isDownload(episode, anime)\n            return when {\n                isDownloaded -> getHostersOnDownloaded(episode, anime, source)\n                source is AnimeHttpSource -> getHostersOnHttp(episode, source)\n                source is LocalAnimeSource -> getHostersOnLocal(episode)\n                else -> error(\"source not supported\")\n            }\n        }\n\n        /**\n         * Returns true if the given [episode] is downloaded.\n         *\n         * @param episode the episode being parsed.\n         * @param anime the anime of the episode.\n         */\n        fun isDownload(episode: Episode, anime: Anime): Boolean {\n            val downloadManager: AnimeDownloadManager = Injekt.get()\n            return downloadManager.isEpisodeDownloaded(\n                episode.name,\n                episode.scanlator,\n                anime.title,\n                anime.source,\n                skipCache = true,\n            )\n        }\n\n        private fun checkHasHosters(source: AnimeHttpSource): Boolean {\n            var current: Class<in AnimeHttpSource> = source.javaClass\n            while (true) {\n                if (current == ParsedAnimeHttpSource::class.java ||\n                    current == AnimeHttpSource::class.java ||\n                    current == AnimeSource::class.java\n                ) {\n                    return false\n                }\n                if (current.declaredMethods.any {\n                        it.name in\n                            listOf(\"getHosterList\", \"hosterListRequest\", \"hosterListParse\")\n                    }\n                ) {\n                    return true\n                }\n                current = current.superclass ?: return false\n            }\n        }\n\n        /**\n         * Returns a list of hosters when the [episode] is online.\n         *\n         * @param episode the episode being parsed.\n         * @param source the online source of the episode.\n         */\n        private suspend fun getHostersOnHttp(episode: Episode, source: AnimeHttpSource): List<Hoster> {\n            // TODO(1.6): Remove else block when dropping support for ext lib <1.6\n            return if (checkHasHosters(source)) {\n                source.getHosterList(episode.toSEpisode())\n                    .let { source.run { it.sortHosters() } }\n            } else {\n                source.getVideoList(episode.toSEpisode())\n                    .let { source.run { it.sortVideos() } }\n                    .toHosterList()\n            }\n        }\n\n        /**\n         * Returns the hoster when the [episode] is downloaded.\n         *\n         * @param episode the episode being parsed.\n         * @param anime the anime of the episode.\n         * @param source the source of the anime.\n         */\n        private fun getHostersOnDownloaded(\n            episode: Episode,\n            anime: Anime,\n            source: AnimeSource,\n        ): List<Hoster> {\n            val downloadManager: AnimeDownloadManager = Injekt.get()\n            return try {\n                val video = downloadManager.buildVideo(source, anime, episode)\n                listOf(video).toHosterList()\n            } catch (e: Throwable) {\n                emptyList()\n            }\n        }\n\n        /**\n         * Returns the hoster when the [episode] is from local source.\n         *\n         * @param episode the episode being parsed.\n         */\n        private fun getHostersOnLocal(\n            episode: Episode,\n        ): List<Hoster> {\n            return try {\n                val (animeDirName, episodeName) = episode.url.split('/', limit = 2)\n                val fileSystem: LocalAnimeSourceFileSystem = Injekt.get()\n                val videoFile = fileSystem.getBaseDirectory()\n                    ?.findFile(animeDirName)\n                    ?.findFile(episodeName)\n                val videoUri = videoFile!!.uri\n\n                val video = Video(\n                    videoUri.toString(),\n                    \"Local source: ${episode.url}\",\n                )\n                listOf(video).toHosterList()\n            } catch (e: Exception) {\n                emptyList()\n            }\n        }\n\n        /**\n         * Returns a list of videos of a [hoster] based on the type of [source] used.\n         * Note that for every type of episode except non-downloaded online, `videoList`\n         * will be set to null.\n         *\n         * @param source the source of the anime.\n         * @param hoster the hoster.\n         */\n        private suspend fun getVideos(source: AnimeSource, hoster: Hoster): List<Video> {\n            val videos = when {\n                hoster.videoList != null && source is AnimeHttpSource -> hoster.videoList!!.parseVideoUrls(source)\n                hoster.videoList != null -> hoster.videoList!!\n                source is AnimeHttpSource -> getVideosOnHttp(source, hoster)\n                else -> error(\"source not supported\")\n            }\n\n            return if (source is AnimeHttpSource) {\n                source.run { videos.sortVideos() }\n            } else {\n                videos\n            }\n        }\n\n        /**\n         * Returns a list of hosters when the [episode] is online.\n         *\n         * @param source the online source of the episode.\n         * @param hoster the hoster.\n         */\n        private suspend fun getVideosOnHttp(source: AnimeHttpSource, hoster: Hoster): List<Video> {\n            return source.getVideoList(hoster)\n                .parseVideoUrls(source)\n        }\n\n        // TODO(1.6): Remove after ext lib bump\n        private suspend fun List<Video>.parseVideoUrls(source: AnimeHttpSource): List<Video> {\n            return this.map { video ->\n                if (video.videoUrl != \"null\") return@map video\n\n                val newVideoUrl = source.getVideoUrl(video)\n                video.copy(videoUrl = newVideoUrl)\n            }\n        }\n\n        suspend fun loadHosterVideos(source: AnimeSource, hoster: Hoster, force: Boolean = false): HosterState {\n            if (!force && hoster.lazy) {\n                return HosterState.Idle(hoster.hosterName)\n            }\n\n            return try {\n                val videos = getVideos(source, hoster)\n                HosterState.Ready(hoster.hosterName, videos, List(videos.size) { Video.State.QUEUE })\n            } catch (e: Exception) {\n                if (e is CancellationException) {\n                    throw e\n                }\n\n                HosterState.Error(hoster.hosterName)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/loader/HosterLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.loader\n\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.HosterState\nimport eu.kanade.tachiyomi.ui.player.controls.components.sheets.getChangedAt\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.cancelChildren\nimport kotlinx.coroutines.withContext\nimport kotlin.coroutines.cancellation.CancellationException\n\nclass HosterLoader {\n    companion object {\n        /**\n         * Check for the best video from the current hosterState.\n         *\n         * The first video with the `preferred` attribute is selected, however\n         * if no such video is selected the first video with a non-empty url is selected.\n         * If there are no viable videos at all, an error is thrown.\n         *\n         * @return the indices of the hoster & video\n         */\n        fun selectBestVideo(hosterState: List<HosterState>): Pair<Int, Int> {\n            val availableHosters = hosterState.withIndex()\n                .filter { (_, state) -> state is HosterState.Ready }\n\n            // Check for first preferred\n            val isPreferred: (Pair<Video, Video.State>) -> Boolean = { (v, s) ->\n                v.preferred && (s == Video.State.READY || s == Video.State.QUEUE)\n            }\n            val prefHosterIdx = availableHosters.indexOfFirst {\n                (it.value as HosterState.Ready).let { hoster ->\n                    hoster.videoList zip hoster.videoState\n                }.any(isPreferred)\n            }\n            if (prefHosterIdx != -1) {\n                val videoList = (availableHosters[prefHosterIdx].value as HosterState.Ready).let { hoster ->\n                    hoster.videoList zip hoster.videoState\n                }\n                val prefVideoIdx = videoList.indexOfFirst(isPreferred)\n                return availableHosters[prefHosterIdx].index to prefVideoIdx\n            }\n\n            // Check for first video with non-empty url\n            val firstValid: (Pair<Video, Video.State>) -> Boolean = { (v, s) ->\n                v.videoUrl.isNotEmpty() && (s == Video.State.READY || s == Video.State.QUEUE)\n            }\n            val firstAvailableHosterIdx = availableHosters.indexOfFirst {\n                (it.value as HosterState.Ready).let { hoster ->\n                    hoster.videoList zip hoster.videoState\n                }.any(firstValid)\n            }\n            if (firstAvailableHosterIdx != -1) {\n                val videoList = (availableHosters[firstAvailableHosterIdx].value as HosterState.Ready).let { hoster ->\n                    hoster.videoList zip hoster.videoState\n                }\n                val firstVideoIdx = videoList.indexOfFirst(firstValid)\n                return availableHosters[firstAvailableHosterIdx].index to firstVideoIdx\n            }\n\n            // No success\n            return Pair(-1, -1)\n        }\n\n        class EarlyReturnException(val video: Video) : Exception()\n\n        /**\n         * Return the first loaded and valid \"best\" video, based on the criteria in the function `selectBestVideo` above.\n         *\n         * @param source The source for the episode\n         * @param hosterList the list of hosters\n         * @return the video, or null if no valid video was found\n         */\n        suspend fun getBestVideo(source: AnimeSource, hosterList: List<Hoster>): Video? {\n            val hosterStates = MutableList<HosterState>(hosterList.size) { HosterState.Idle(\"\") }\n\n            return try {\n                withContext(Dispatchers.IO) {\n                    hosterList.mapIndexed { hosterIdx, hoster ->\n                        async {\n                            val hosterState = EpisodeLoader.loadHosterVideos(source, hoster)\n                            hosterStates[hosterIdx] = hosterState\n\n                            if (hosterState is HosterState.Ready) {\n                                val prefIndex = hosterState.videoList.indexOfFirst { it.preferred && !it.initialized }\n                                if (prefIndex != -1) {\n                                    val video = hosterState.videoList[prefIndex]\n                                    hosterStates[hosterIdx] =\n                                        (hosterStates[hosterIdx] as HosterState.Ready).getChangedAt(\n                                            prefIndex,\n                                            video,\n                                            Video.State.LOAD_VIDEO,\n                                        )\n\n                                    val resolvedVideo = getResolvedVideo(source, video)\n                                    if (resolvedVideo?.videoUrl?.isNotEmpty() == true) {\n                                        coroutineContext.cancelChildren()\n                                        throw EarlyReturnException(resolvedVideo)\n                                    }\n\n                                    hosterStates[hosterIdx] =\n                                        (hosterStates[hosterIdx] as HosterState.Ready).getChangedAt(\n                                            prefIndex,\n                                            video,\n                                            Video.State.ERROR,\n                                        )\n                                }\n                            }\n                        }\n                    }.awaitAll()\n\n                    var (hosterIdx, videoIdx) = selectBestVideo(hosterStates)\n                    while (hosterIdx != -1) {\n                        val hosterState = hosterStates[hosterIdx] as HosterState.Ready\n                        val video = hosterState.videoList[videoIdx]\n                        hosterStates[hosterIdx] =\n                            (hosterStates[hosterIdx] as HosterState.Ready).getChangedAt(\n                                videoIdx,\n                                video,\n                                Video.State.LOAD_VIDEO,\n                            )\n\n                        val resolvedVideo = getResolvedVideo(source, video)\n                        if (resolvedVideo?.videoUrl?.isNotEmpty() == true) {\n                            coroutineContext.cancelChildren()\n                            return@withContext resolvedVideo\n                        }\n\n                        hosterStates[hosterIdx] =\n                            (hosterStates[hosterIdx] as HosterState.Ready).getChangedAt(\n                                videoIdx,\n                                video,\n                                Video.State.ERROR,\n                            )\n                        val newResult = selectBestVideo(hosterStates)\n                        hosterIdx = newResult.first\n                        videoIdx = newResult.second\n                    }\n\n                    coroutineContext.cancelChildren()\n                    return@withContext null\n                }\n            } catch (e: EarlyReturnException) {\n                e.video\n            }\n        }\n\n        suspend fun getResolvedVideo(source: AnimeSource?, video: Video): Video? {\n            val resolvedVideo = if (source is AnimeHttpSource && !video.initialized) {\n                try {\n                    source.resolveVideo(video)\n                } catch (e: Exception) {\n                    if (e is CancellationException) {\n                        throw e\n                    }\n\n                    null\n                }\n            } else {\n                video\n            }\n\n            return resolvedVideo?.copy(initialized = true)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AdvancedPlayerPreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.settings\n\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass AdvancedPlayerPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n    fun mpvUserFiles() = preferenceStore.getBoolean(\"mpv_scripts\", false)\n    fun mpvConf() = preferenceStore.getString(\"pref_mpv_conf\", \"\")\n    fun mpvInput() = preferenceStore.getString(\"pref_mpv_input\", \"\")\n\n    // Non-preference\n\n    fun playerStatisticsPage() = preferenceStore.getInt(\"pref_player_statistics_page\", 0)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AudioPreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.settings\n\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\nimport tachiyomi.i18n.aniyomi.AYMR\n\nclass AudioPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n    fun preferredAudioLanguages() = preferenceStore.getString(\"pref_audio_lang\", \"\")\n    fun enablePitchCorrection() = preferenceStore.getBoolean(\"pref_audio_pitch_correction\", true)\n    fun audioChannels() = preferenceStore.getEnum(\"pref_audio_config\", AudioChannels.AutoSafe)\n    fun volumeBoostCap() = preferenceStore.getInt(\"pref_audio_volume_boost_cap\", 30)\n\n    // Non-preferences\n\n    fun audioDelay() = preferenceStore.getInt(\"pref_audio_delay\", 0)\n}\n\nenum class AudioChannels(val titleRes: StringResource, val property: String, val value: String) {\n    Auto(AYMR.strings.pref_player_audio_channels_auto, \"audio-channels\", \"auto-safe\"),\n    AutoSafe(AYMR.strings.pref_player_audio_channels_auto_safe, \"audio-channels\", \"auto\"),\n    Mono(AYMR.strings.pref_player_audio_channels_mono, \"audio-channels\", \"mono\"),\n    Stereo(AYMR.strings.pref_player_audio_channels_stereo, \"audio-channels\", \"stereo\"),\n    ReverseStereo(AYMR.strings.pref_player_audio_channels_reverse_stereo, \"af\", \"pan=[stereo|c0=c1|c1=c0]\"),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/DecoderPreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.settings\n\nimport eu.kanade.tachiyomi.ui.player.Debanding\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass DecoderPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n    fun tryHWDecoding() = preferenceStore.getBoolean(\"pref_try_hwdec\", true)\n    fun gpuNext() = preferenceStore.getBoolean(\"pref_gpu_next\", false)\n    fun videoDebanding() = preferenceStore.getEnum(\"pref_video_debanding\", Debanding.None)\n    fun useYUV420P() = preferenceStore.getBoolean(\"use_yuv420p\", true)\n\n    // Non-preferences\n\n    fun brightnessFilter() = preferenceStore.getInt(\"pref_player_filter_brightness\")\n    fun saturationFilter() = preferenceStore.getInt(\"pref_player_filter_saturation\")\n    fun contrastFilter() = preferenceStore.getInt(\"pref_player_filter_contrast\")\n    fun gammaFilter() = preferenceStore.getInt(\"pref_player_filter_gamma\")\n    fun hueFilter() = preferenceStore.getInt(\"pref_player_filter_hue\")\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/GesturePreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.settings\n\nimport eu.kanade.tachiyomi.ui.player.SingleActionGesture\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass GesturePreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n    // Sliders\n    fun gestureVolumeBrightness() = preferenceStore.getBoolean(\n        \"pref_gesture_volume_brightness\",\n        true,\n    )\n    fun swapVolumeBrightness() = preferenceStore.getBoolean(\"pref_swap_volume_and_brightness\", false)\n\n    // Seeking\n\n    fun gestureHorizontalSeek() = preferenceStore.getBoolean(\"pref_gesture_horizontal_seek\", true)\n    fun showSeekBar() = preferenceStore.getBoolean(\"pref_show_seekbar\", false)\n    fun defaultIntroLength() = preferenceStore.getInt(\"pref_default_intro_length\", 85)\n    fun skipLengthPreference() = preferenceStore.getInt(\"pref_skip_length_preference\", 10)\n    fun playerSmoothSeek() = preferenceStore.getBoolean(\"pref_player_smooth_seek\", false)\n\n    // Double tap\n\n    fun leftDoubleTapGesture() = preferenceStore.getEnum(\"pref_left_double_tap\", SingleActionGesture.Seek)\n    fun centerDoubleTapGesture() = preferenceStore.getEnum(\"pref_center_double_tap\", SingleActionGesture.PlayPause)\n    fun rightDoubleTapGesture() = preferenceStore.getEnum(\"pref_right_double_tap\", SingleActionGesture.Seek)\n\n    // Media controls\n\n    fun mediaPreviousGesture() = preferenceStore.getEnum(\"pref_media_previous\", SingleActionGesture.Switch)\n    fun mediaPlayPauseGesture() = preferenceStore.getEnum(\"pref_media_playpause\", SingleActionGesture.PlayPause)\n    fun mediaNextGesture() = preferenceStore.getEnum(\"pref_media_next\", SingleActionGesture.Switch)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.settings\n\nimport eu.kanade.tachiyomi.ui.player.PlayerOrientation\nimport eu.kanade.tachiyomi.ui.player.VideoAspect\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass PlayerPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n    fun preserveWatchingPosition() = preferenceStore.getBoolean(\n        \"pref_preserve_watching_position\",\n        false,\n    )\n    fun progressPreference() = preferenceStore.getFloat(\"pref_progress_preference\", 0.85F)\n    fun defaultPlayerOrientationType() = preferenceStore.getEnum(\n        \"pref_default_player_orientation_type_key\",\n        PlayerOrientation.SensorLandscape,\n    )\n\n    // Controls\n\n    fun allowGestures() = preferenceStore.getBoolean(\"pref_allow_gestures_in_panels\", false)\n    fun showLoadingCircle() = preferenceStore.getBoolean(\"pref_show_loading\", true)\n    fun showCurrentChapter() = preferenceStore.getBoolean(\"pref_show_current_chapter\", true)\n    fun rememberPlayerBrightness() = preferenceStore.getBoolean(\"pref_remember_brightness\", false)\n    fun playerBrightnessValue() = preferenceStore.getFloat(\"player_brightness_value\", -1.0F)\n    fun rememberPlayerVolume() = preferenceStore.getBoolean(\"pref_remember_volume\", false)\n    fun playerVolumeValue() = preferenceStore.getFloat(\"player_volume_value\", -1.0F)\n\n    // Hoster\n\n    fun showFailedHosters() = preferenceStore.getBoolean(\"pref_show_failed_hosters\", false)\n    fun showEmptyHosters() = preferenceStore.getBoolean(\"pref_show_empty_hosters\", false)\n\n    // Display\n\n    fun playerFullscreen() = preferenceStore.getBoolean(\"player_fullscreen\", true)\n    fun hideControls() = preferenceStore.getBoolean(\"player_hide_controls\", false)\n    fun displayVolPer() = preferenceStore.getBoolean(\"pref_display_vol_as_per\", true)\n    fun showSystemStatusBar() = preferenceStore.getBoolean(\"pref_show_system_status_bar\", false)\n    fun reduceMotion() = preferenceStore.getBoolean(\"pref_reduce_motion\", false)\n    fun playerTimeToDisappear() = preferenceStore.getInt(\"pref_player_time_to_disappear\", 4000)\n    fun panelOpacity() = preferenceStore.getInt(\"pref_panel_opacity\", 60)\n\n    // Skip intro button\n\n    fun enableSkipIntro() = preferenceStore.getBoolean(\"pref_enable_skip_intro\", true)\n    fun autoSkipIntro() = preferenceStore.getBoolean(\"pref_enable_auto_skip_ani_skip\", false)\n    fun enableNetflixStyleIntroSkip() = preferenceStore.getBoolean(\n        \"pref_enable_netflixStyle_aniskip\",\n        false,\n    )\n    fun waitingTimeIntroSkip() = preferenceStore.getInt(\"pref_waiting_time_aniskip\", 5)\n    fun aniSkipEnabled() = preferenceStore.getBoolean(\"pref_enable_ani_skip\", false)\n    fun disableAniSkipOnChapters() = preferenceStore.getBoolean(\"pref_disabled_ani_skip_chapters\", true)\n\n    // PiP\n\n    fun enablePip() = preferenceStore.getBoolean(\"pref_enable_pip\", true)\n    fun pipEpisodeToasts() = preferenceStore.getBoolean(\"pref_pip_episode_toasts\", true)\n    fun pipOnExit() = preferenceStore.getBoolean(\"pref_pip_on_exit\", false)\n    fun pipReplaceWithPrevious() = preferenceStore.getBoolean(\"pip_replace_with_previous\", false)\n\n    // External player\n\n    fun alwaysUseExternalPlayer() = preferenceStore.getBoolean(\n        \"pref_always_use_external_player\",\n        false,\n    )\n    fun externalPlayerPreference() = preferenceStore.getString(\"external_player_preference\", \"\")\n\n    // Non-preferences\n\n    fun playerSpeed() = preferenceStore.getFloat(\"pref_player_speed\", 1f)\n    fun speedPresets() = preferenceStore.getStringSet(\n        \"default_speed_presets\",\n        setOf(\"0.25\", \"0.5\", \"0.75\", \"1.0\", \"1.25\", \"1.5\", \"1.75\", \"2.0\", \"2.5\", \"3.0\", \"3.5\", \"4.0\"),\n    )\n    fun invertDuration() = preferenceStore.getBoolean(\"invert_duration\", false)\n    fun aspectState() = preferenceStore.getEnum(\"pref_player_aspect_state\", VideoAspect.Fit)\n\n    // Old\n\n    fun autoplayEnabled() = preferenceStore.getBoolean(\"pref_auto_play_enabled\", false)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/SubtitlePreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.settings\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.FormatAlignLeft\nimport androidx.compose.material.icons.automirrored.filled.FormatAlignRight\nimport androidx.compose.material.icons.filled.FormatAlignCenter\nimport androidx.compose.material.icons.filled.FormatAlignJustify\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.toArgb\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport eu.kanade.tachiyomi.ui.player.controls.components.panels.SubtitlesBorderStyle\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass SubtitlePreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n    fun preferredSubLanguages() = preferenceStore.getString(\"pref_subtitle_lang\", \"\")\n    fun subtitleWhitelist() = preferenceStore.getString(\"pref_subtitle_whitelist\", \"\")\n    fun subtitleBlacklist() = preferenceStore.getString(\"pref_subtitle_blacklist\", \"\")\n\n    // Non-preferences\n\n    fun screenshotSubtitles() = preferenceStore.getBoolean(\"pref_screenshot_subtitles\", false)\n\n    fun subtitleFont() = preferenceStore.getString(\"pref_subtitle_font\", \"Sans Serif\")\n    fun subtitleFontSize() = preferenceStore.getInt(\"pref_subtitles_font_size\", 55)\n    fun subtitleFontScale() = preferenceStore.getFloat(\"pref_sub_scale\", 1f)\n    fun subtitleBorderSize() = preferenceStore.getInt(\"pref_sub_border_size\", 3)\n    fun boldSubtitles() = preferenceStore.getBoolean(\"pref_bold_subtitles\", false)\n    fun italicSubtitles() = preferenceStore.getBoolean(\"pref_italic_subtitles\", false)\n\n    fun textColorSubtitles() = preferenceStore.getInt(\"pref_text_color_subtitles\", Color.White.toArgb())\n\n    fun borderColorSubtitles() = preferenceStore.getInt(\"pref_border_color_subtitles\", Color.Black.toArgb())\n    fun borderStyleSubtitles() = preferenceStore.getEnum(\n        \"pref_border_style_subtitles\",\n        SubtitlesBorderStyle.OutlineAndShadow,\n    )\n    fun shadowOffsetSubtitles() = preferenceStore.getInt(\"sub_shadow_offset\", 0)\n    fun backgroundColorSubtitles() = preferenceStore.getInt(\n        \"pref_background_color_subtitles\",\n        Color.Transparent.toArgb(),\n    )\n\n    fun subtitleJustification() = preferenceStore.getEnum(\"pref_sub_justify\", SubtitleJustification.Auto)\n    fun subtitlePos() = preferenceStore.getInt(\"pref_sub_pos\", 100)\n\n    fun overrideSubsASS() = preferenceStore.getBoolean(\"pref_override_subtitles_ass\", false)\n\n    fun subtitlesDelay() = preferenceStore.getInt(\"pref_subtitles_delay\", 0)\n    fun subtitlesSpeed() = preferenceStore.getFloat(\"pref_subtitles_speed\", 1f)\n    fun subtitlesSecondaryDelay() = preferenceStore.getInt(\"pref_subtitles_secondary_delay\", 0)\n}\n\nenum class SubtitleJustification(\n    val value: String,\n    val icon: ImageVector,\n) {\n    Left(\"left\", Icons.AutoMirrored.Default.FormatAlignLeft),\n    Center(\"center\", Icons.Default.FormatAlignCenter),\n    Right(\"right\", Icons.AutoMirrored.Default.FormatAlignRight),\n    Auto(\"auto\", Icons.Default.FormatAlignJustify),\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/utils/AniSkipApi.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.utils\n\nimport eu.kanade.tachiyomi.animesource.model.ChapterType\nimport eu.kanade.tachiyomi.animesource.model.TimeStamp\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.jsonMime\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport uy.kohesive.injekt.injectLazy\n\nclass AniSkipApi {\n    private val client = OkHttpClient()\n    private val json: Json by injectLazy()\n\n    // credits: https://github.com/saikou-app/saikou/blob/main/app/src/main/java/ani/saikou/others/AniSkip.kt\n    fun getResult(malId: Int, episodeNumber: Int, episodeLength: Long): List<TimeStamp>? {\n        val url =\n            \"https://api.aniskip.com/v2/skip-times/$malId/$episodeNumber?types[]=ed\" +\n                \"&types[]=mixed-ed&types[]=mixed-op&types[]=op&types[]=recap&episodeLength=$episodeLength\"\n        return try {\n            val a = client.newCall(GET(url)).execute().body.string()\n            val res = json.decodeFromString<AniSkipResponse>(a)\n            if (res.found) {\n                res.results?.map {\n                    TimeStamp(\n                        start = it.interval.startTime,\n                        end = it.interval.endTime,\n                        name = it.skipType.getString(),\n                        type = it.skipType.toChapterType(),\n                    )\n                }\n            } else {\n                null\n            }\n        } catch (_: Exception) {\n            null\n        }\n    }\n\n    fun getMalIdFromAL(id: Long): Long {\n        val query = \"\"\"\n                query{\n                Media(id:$id){idMal}\n                }\n        \"\"\".trimMargin()\n        val response = try {\n            client.newCall(\n                POST(\n                    \"https://graphql.anilist.co\",\n                    body = buildJsonObject { put(\"query\", query) }.toString()\n                        .toRequestBody(jsonMime),\n                ),\n            ).execute()\n        } catch (_: Exception) {\n            return 0\n        }\n        return response.body.string().substringAfter(\"idMal\\\":\").substringBefore(\"}\")\n            .toLongOrNull() ?: 0\n    }\n}\n\n@Serializable\ndata class AniSkipResponse(\n    val found: Boolean,\n    val results: List<Stamp>?,\n)\n\n@Serializable\ndata class Stamp(\n    val interval: AniSkipInterval,\n    val skipType: SkipType,\n)\n\n@Serializable\nenum class SkipType {\n    @SerialName(\"op\")\n    OP,\n\n    @SerialName(\"ed\")\n    ED,\n\n    @SerialName(\"recap\")\n    RECAP,\n\n    @SerialName(\"mixed-op\")\n    MIXED_OP, ;\n\n    fun getString(): String {\n        return when (this) {\n            OP -> \"Opening\"\n            ED -> \"Ending\"\n            RECAP -> \"Recap\"\n            MIXED_OP -> \"Mixed-op\"\n        }\n    }\n\n    fun toChapterType(): ChapterType {\n        return when (this) {\n            OP -> ChapterType.Opening\n            ED -> ChapterType.Ending\n            RECAP -> ChapterType.Recap\n            MIXED_OP -> ChapterType.MixedOp\n        }\n    }\n}\n\n@Serializable\ndata class AniSkipInterval(\n    val startTime: Double,\n    val endTime: Double,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/utils/ChapterUtils.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.utils\n\nimport androidx.compose.ui.graphics.Color\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.animesource.model.ChapterType\nimport eu.kanade.tachiyomi.animesource.model.TimeStamp\nimport eu.kanade.tachiyomi.ui.player.controls.components.IndexedSegment\nimport tachiyomi.i18n.aniyomi.AYMR\nimport kotlin.math.abs\n\nclass ChapterUtils {\n    companion object {\n        fun ChapterType.getStringRes(): StringResource? = when (this) {\n            ChapterType.Opening -> AYMR.strings.player_chapter_type_opening\n            ChapterType.Ending -> AYMR.strings.player_chapter_type_ending\n            ChapterType.Recap -> AYMR.strings.player_chapter_type_recap\n            ChapterType.MixedOp -> AYMR.strings.player_chapter_type_mixedop\n            ChapterType.Other -> null\n        }\n\n        fun mergeChapters(\n            currentChapters: List<IndexedSegment>,\n            stamps: List<TimeStamp>,\n            duration: Int? = null,\n        ): List<IndexedSegment> {\n            val sortedStamps = stamps.sortedBy { it.start }\n            val chapters = sortedStamps.mapIndexed { i, it ->\n                val startTime = if (i == 0 && it.start < 1.0) {\n                    0.0\n                } else {\n                    it.start\n                }\n                val startChapter = IndexedSegment(\n                    index = -2, // Index -2 is used to indicate that this is an external chapter\n                    name = it.name,\n                    start = startTime.toFloat(),\n                    color = if (it.type == ChapterType.Other) Color.Unspecified else Color(0xFFD8BBDF),\n                    chapterType = it.type,\n                )\n                val nextStart = sortedStamps.getOrNull(i + 1)?.start\n                val isNotLastChapter = abs(it.end - (duration?.toDouble() ?: -2.0)) > 1.0\n                val isNotAdjacent = nextStart == null || (abs(it.end - nextStart) > 1.0)\n                if (isNotLastChapter && isNotAdjacent) {\n                    val endChapter = IndexedSegment(\n                        index = -1,\n                        name = \"\",\n                        start = it.end.toFloat(),\n                    )\n                    return@mapIndexed listOf(startChapter, endChapter)\n                } else {\n                    listOf(startChapter)\n                }\n            }.flatten()\n            val playerChapters = currentChapters.filter { playerChapter ->\n                chapters.none { chapter ->\n                    abs(chapter.start - playerChapter.start) < 1.0 && chapter.index == -2\n                }\n            }.map {\n                IndexedSegment(it.name, it.start, it.color, chapterType = it.chapterType)\n            }.sortedBy { it.start }.mapIndexed { i, it ->\n                if (i == 0 && it.start < 1.0) {\n                    IndexedSegment(\n                        it.name,\n                        0.0f,\n                        index = it.index,\n                        chapterType = it.chapterType,\n                    )\n                } else {\n                    it\n                }\n            }\n            val filteredChapters = chapters.filter { chapter ->\n                playerChapters.none { playerChapter ->\n                    abs(chapter.start - playerChapter.start) < 1.0 && chapter.index != -2\n                }\n            }\n            val startChapter = if ((playerChapters + filteredChapters).isNotEmpty() &&\n                playerChapters.none { it.start == 0.0f } &&\n                filteredChapters.none { it.start == 0.0f }\n            ) {\n                listOf(\n                    IndexedSegment(\n                        index = -1,\n                        name = \"\",\n                        start = 0.0f,\n                    ),\n                )\n            } else {\n                emptyList()\n            }\n\n            val combined = (startChapter + playerChapters + filteredChapters).sortedBy { it.start }\n\n            // Remove any adjacent \"empty\" chapters\n            return combined.filterIndexed { index, segment ->\n                if (index == 0) {\n                    true\n                } else {\n                    val previousSegment = combined[index - 1]\n                    !(segment.name.isEmpty() && previousSegment.name.isEmpty())\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/player/utils/TrackSelect.kt",
    "content": "package eu.kanade.tachiyomi.ui.player.utils\n\nimport androidx.core.os.LocaleListCompat\nimport eu.kanade.tachiyomi.ui.player.PlayerViewModel.VideoTrack\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.Locale\n\nclass TrackSelect(\n    private val subtitlePreferences: SubtitlePreferences = Injekt.get(),\n    private val audioPreferences: AudioPreferences = Injekt.get(),\n) {\n\n    fun getPreferredTrackIndex(tracks: List<VideoTrack>, subtitle: Boolean = true): VideoTrack? {\n        val prefLangs = if (subtitle) {\n            subtitlePreferences.preferredSubLanguages().get()\n        } else {\n            audioPreferences.preferredAudioLanguages().get()\n        }.split(\",\").filter(String::isNotEmpty).map(String::trim)\n\n        val whitelist = if (subtitle) {\n            subtitlePreferences.subtitleWhitelist().get()\n        } else {\n            \"\"\n        }.split(\",\").filter(String::isNotEmpty).map(String::trim)\n\n        val blacklist = if (subtitle) {\n            subtitlePreferences.subtitleBlacklist().get()\n        } else {\n            \"\"\n        }.split(\",\").filter(String::isNotEmpty).map(String::trim)\n\n        val locales = prefLangs.map(::Locale).ifEmpty {\n            listOf(LocaleListCompat.getDefault()[0]!!)\n        }\n\n        val chosenLocale = locales.firstOrNull { locale ->\n            tracks.any { t -> containsLang(t, locale) }\n        } ?: return null\n\n        val filtered = tracks.withIndex()\n            .filterNot { (_, track) ->\n                blacklist.any { track.name.contains(it, true) }\n            }\n            .filter { (_, track) ->\n                containsLang(track, chosenLocale)\n            }\n\n        return filtered.firstOrNull { (_, track) ->\n            whitelist.any { track.name.contains(it, true) }\n        }?.value ?: filtered.getOrNull(0)?.value\n    }\n\n    private fun containsLang(track: VideoTrack, locale: Locale): Boolean {\n        val localName = locale.getDisplayName(locale)\n        val englishName = locale.getDisplayName(Locale.ENGLISH).substringBefore(\" (\")\n        val langRegex = Regex(\"\"\"\\b${locale.isO3Language}|${locale.language}\\b\"\"\", RegexOption.IGNORE_CASE)\n\n        return track.name.contains(localName, true) ||\n            track.name.contains(englishName, true) ||\n            track.language?.let { langRegex.find(it) != null } == true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.app.assist.AssistContent\nimport android.content.ClipData\nimport android.content.ClipboardManager\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Color\nimport android.graphics.ColorMatrix\nimport android.graphics.ColorMatrixColorFilter\nimport android.graphics.Paint\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.KeyEvent\nimport android.view.MotionEvent\nimport android.view.View.LAYER_TYPE_HARDWARE\nimport android.view.WindowManager\nimport android.widget.Toast\nimport androidx.activity.viewModels\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.unit.dp\nimport androidx.core.content.getSystemService\nimport androidx.core.graphics.ColorUtils\nimport androidx.core.net.toUri\nimport androidx.core.transition.doOnEnd\nimport androidx.core.view.WindowCompat\nimport androidx.core.view.WindowInsetsCompat\nimport androidx.core.view.WindowInsetsControllerCompat\nimport androidx.lifecycle.lifecycleScope\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView\nimport com.google.android.material.elevation.SurfaceColors\nimport com.google.android.material.transition.platform.MaterialContainerTransform\nimport com.hippo.unifile.UniFile\nimport dev.chrisbanes.insetter.applyInsetter\nimport eu.kanade.core.util.ifMangaSourcesLoaded\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.presentation.reader.DisplayRefreshHost\nimport eu.kanade.presentation.reader.OrientationSelectDialog\nimport eu.kanade.presentation.reader.PageIndicatorText\nimport eu.kanade.presentation.reader.ReaderContentOverlay\nimport eu.kanade.presentation.reader.ReaderPageActionsDialog\nimport eu.kanade.presentation.reader.ReadingModeSelectDialog\nimport eu.kanade.presentation.reader.appbars.ReaderAppBars\nimport eu.kanade.presentation.reader.settings.ReaderSettingsDialog\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.core.common.Constants\nimport eu.kanade.tachiyomi.data.coil.TachiyomiImageDecoder\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.databinding.ReaderActivityBinding\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.reader.ReaderViewModel.SetAsCoverResult.AddToLibraryFirst\nimport eu.kanade.tachiyomi.ui.reader.ReaderViewModel.SetAsCoverResult.Error\nimport eu.kanade.tachiyomi.ui.reader.ReaderViewModel.SetAsCoverResult.Success\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator\nimport eu.kanade.tachiyomi.ui.webview.WebViewActivity\nimport eu.kanade.tachiyomi.util.system.hasDisplayCutout\nimport eu.kanade.tachiyomi.util.system.isNightMode\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport eu.kanade.tachiyomi.util.view.setComposeContent\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.sample\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.util.collectAsState\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.ByteArrayOutputStream\n\nclass ReaderActivity : BaseActivity() {\n\n    companion object {\n        fun newIntent(context: Context, mangaId: Long?, chapterId: Long?): Intent {\n            return Intent(context, ReaderActivity::class.java).apply {\n                putExtra(\"manga\", mangaId)\n                putExtra(\"chapter\", chapterId)\n                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n            }\n        }\n    }\n\n    private val readerPreferences = Injekt.get<ReaderPreferences>()\n    private val preferences = Injekt.get<BasePreferences>()\n\n    lateinit var binding: ReaderActivityBinding\n\n    val viewModel by viewModels<ReaderViewModel>()\n    private var assistUrl: String? = null\n\n    private val hasCutout by lazy { hasDisplayCutout() }\n\n    /**\n     * Configuration at reader level, like background color or forced orientation.\n     */\n    private var config: ReaderConfig? = null\n\n    private var menuToggleToast: Toast? = null\n    private var readingModeToast: Toast? = null\n    private val displayRefreshHost = DisplayRefreshHost()\n\n    private val windowInsetsController by lazy { WindowInsetsControllerCompat(window, binding.root) }\n\n    private var loadingIndicator: ReaderProgressIndicator? = null\n\n    var isScrollingThroughPages = false\n        private set\n\n    /**\n     * Called when the activity is created. Initializes the presenter and configuration.\n     */\n    override fun onCreate(savedInstanceState: Bundle?) {\n        registerSecureActivity(this)\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            overrideActivityTransition(\n                Activity.OVERRIDE_TRANSITION_OPEN,\n                R.anim.shared_axis_x_push_enter,\n                R.anim.shared_axis_x_push_exit,\n            )\n        } else {\n            @Suppress(\"DEPRECATION\")\n            overridePendingTransition(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit)\n        }\n\n        super.onCreate(savedInstanceState)\n\n        binding = ReaderActivityBinding.inflate(layoutInflater)\n        setContentView(binding.root)\n\n        if (viewModel.needsInit()) {\n            val manga = intent.extras?.getLong(\"manga\", -1) ?: -1L\n            val chapter = intent.extras?.getLong(\"chapter\", -1) ?: -1L\n            if (manga == -1L || chapter == -1L) {\n                finish()\n                return\n            }\n            NotificationReceiver.dismissNotification(\n                this,\n                manga.hashCode(),\n                Notifications.ID_NEW_CHAPTERS,\n            )\n\n            lifecycleScope.launchNonCancellable {\n                val initResult = viewModel.init(manga, chapter)\n                if (!initResult.getOrDefault(false)) {\n                    val exception = initResult.exceptionOrNull() ?: IllegalStateException(\n                        \"Unknown err\",\n                    )\n                    withUIContext {\n                        setInitialChapterError(exception)\n                    }\n                }\n            }\n        }\n\n        config = ReaderConfig()\n        initializeMenu()\n\n        // Finish when incognito mode is disabled\n        preferences.incognitoMode().changes()\n            .drop(1)\n            .onEach { if (!it) finish() }\n            .launchIn(lifecycleScope)\n\n        viewModel.state\n            .map { it.isLoadingAdjacentChapter }\n            .distinctUntilChanged()\n            .onEach(::setProgressDialog)\n            .launchIn(lifecycleScope)\n\n        viewModel.state\n            .map { it.manga }\n            .distinctUntilChanged()\n            .filterNotNull()\n            .onEach { updateViewer() }\n            .launchIn(lifecycleScope)\n\n        viewModel.state\n            .map { it.viewerChapters }\n            .distinctUntilChanged()\n            .filterNotNull()\n            .onEach(::setChapters)\n            .launchIn(lifecycleScope)\n\n        viewModel.eventFlow\n            .onEach { event ->\n                when (event) {\n                    ReaderViewModel.Event.ReloadViewerChapters -> {\n                        viewModel.state.value.viewerChapters?.let(::setChapters)\n                    }\n                    ReaderViewModel.Event.PageChanged -> {\n                        displayRefreshHost.flash()\n                    }\n                    is ReaderViewModel.Event.SetOrientation -> {\n                        setOrientation(event.orientation)\n                    }\n                    is ReaderViewModel.Event.SavedImage -> {\n                        onSaveImageResult(event.result)\n                    }\n                    is ReaderViewModel.Event.ShareImage -> {\n                        onShareImageResult(event.uri, event.page)\n                    }\n                    is ReaderViewModel.Event.CopyImage -> {\n                        onCopyImageResult(event.uri)\n                    }\n                    is ReaderViewModel.Event.SetCoverResult -> {\n                        onSetAsCoverResult(event.result)\n                    }\n                }\n            }\n            .launchIn(lifecycleScope)\n    }\n\n    /**\n     * Called when the activity is destroyed. Cleans up the viewer, configuration and any view.\n     */\n    override fun onDestroy() {\n        super.onDestroy()\n        viewModel.state.value.viewer?.destroy()\n        config = null\n        menuToggleToast?.cancel()\n        readingModeToast?.cancel()\n    }\n\n    override fun onPause() {\n        viewModel.flushReadTimer()\n        super.onPause()\n    }\n\n    /**\n     * Set menu visibility again on activity resume to apply immersive mode again if needed.\n     * Helps with rotations.\n     */\n    override fun onResume() {\n        super.onResume()\n        viewModel.restartReadTimer()\n        setMenuVisibility(viewModel.state.value.menuVisible)\n    }\n\n    /**\n     * Called when the window focus changes. It sets the menu visibility to the last known state\n     * to apply immersive mode again if needed.\n     */\n    override fun onWindowFocusChanged(hasFocus: Boolean) {\n        super.onWindowFocusChanged(hasFocus)\n        if (hasFocus) {\n            setMenuVisibility(viewModel.state.value.menuVisible)\n        }\n    }\n\n    override fun onProvideAssistContent(outContent: AssistContent) {\n        super.onProvideAssistContent(outContent)\n        assistUrl?.let { outContent.webUri = it.toUri() }\n    }\n\n    /**\n     * Called when the user clicks the back key or the button on the toolbar. The call is\n     * delegated to the presenter.\n     */\n    override fun finish() {\n        viewModel.onActivityFinish()\n        super.finish()\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            overrideActivityTransition(\n                Activity.OVERRIDE_TRANSITION_CLOSE,\n                R.anim.shared_axis_x_pop_enter,\n                R.anim.shared_axis_x_pop_exit,\n            )\n        } else {\n            @Suppress(\"DEPRECATION\")\n            overridePendingTransition(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit)\n        }\n    }\n\n    override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {\n        if (keyCode == KeyEvent.KEYCODE_N) {\n            loadNextChapter()\n            return true\n        } else if (keyCode == KeyEvent.KEYCODE_P) {\n            loadPreviousChapter()\n            return true\n        }\n        return super.onKeyUp(keyCode, event)\n    }\n\n    /**\n     * Dispatches a key event. If the viewer doesn't handle it, call the default implementation.\n     */\n    override fun dispatchKeyEvent(event: KeyEvent): Boolean {\n        val handled = viewModel.state.value.viewer?.handleKeyEvent(event) ?: false\n        return handled || super.dispatchKeyEvent(event)\n    }\n\n    /**\n     * Dispatches a generic motion event. If the viewer doesn't handle it, call the default\n     * implementation.\n     */\n    override fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {\n        val handled = viewModel.state.value.viewer?.handleGenericMotionEvent(event) ?: false\n        return handled || super.dispatchGenericMotionEvent(event)\n    }\n\n    /**\n     * Initializes the reader menu. It sets up click listeners and the initial visibility.\n     */\n    private fun initializeMenu() {\n        binding.pageNumber.setComposeContent {\n            val state by viewModel.state.collectAsState()\n            val showPageNumber by viewModel.readerPreferences.showPageNumber().collectAsState()\n\n            if (!state.menuVisible && showPageNumber) {\n                PageIndicatorText(\n                    currentPage = state.currentPage,\n                    totalPages = state.totalPages,\n                )\n            }\n        }\n\n        binding.dialogRoot.setComposeContent {\n            val state by viewModel.state.collectAsState()\n            val settingsScreenModel = remember {\n                ReaderSettingsScreenModel(\n                    readerState = viewModel.state,\n                    hasDisplayCutout = hasCutout,\n                    onChangeReadingMode = viewModel::setMangaReadingMode,\n                    onChangeOrientation = viewModel::setMangaOrientationType,\n                )\n            }\n\n            if (!ifMangaSourcesLoaded()) {\n                return@setComposeContent\n            }\n\n            val isHttpSource = viewModel.getSource() is HttpSource\n            val isFullscreen by readerPreferences.fullscreen().collectAsState()\n            val flashOnPageChange by readerPreferences.flashOnPageChange().collectAsState()\n\n            val colorOverlayEnabled by readerPreferences.colorFilter().collectAsState()\n            val colorOverlay by readerPreferences.colorFilterValue().collectAsState()\n            val colorOverlayMode by readerPreferences.colorFilterMode().collectAsState()\n            val colorOverlayBlendMode = remember(colorOverlayMode) {\n                ReaderPreferences.ColorFilterMode.getOrNull(colorOverlayMode)?.second\n            }\n\n            val cropBorderPaged by readerPreferences.cropBorders().collectAsState()\n            val cropBorderWebtoon by readerPreferences.cropBordersWebtoon().collectAsState()\n            val isPagerType = ReadingMode.isPagerType(viewModel.getMangaReadingMode())\n            val cropEnabled = if (isPagerType) cropBorderPaged else cropBorderWebtoon\n\n            ReaderContentOverlay(\n                brightness = state.brightnessOverlayValue,\n                color = colorOverlay.takeIf { colorOverlayEnabled },\n                colorBlendMode = colorOverlayBlendMode,\n            )\n\n            ReaderAppBars(\n                visible = state.menuVisible,\n                fullscreen = isFullscreen,\n\n                mangaTitle = state.manga?.title,\n                chapterTitle = state.currentChapter?.chapter?.name,\n                navigateUp = onBackPressedDispatcher::onBackPressed,\n                onClickTopAppBar = ::openMangaScreen,\n                bookmarked = state.bookmarked,\n                onToggleBookmarked = viewModel::toggleChapterBookmark,\n                onOpenInWebView = ::openChapterInWebView.takeIf { isHttpSource },\n                onOpenInBrowser = ::openChapterInBrowser.takeIf { isHttpSource },\n                onShare = ::shareChapter.takeIf { isHttpSource },\n\n                viewer = state.viewer,\n\n                onNextChapter = ::loadNextChapter,\n                enabledNext = state.viewerChapters?.nextChapter != null,\n                onPreviousChapter = ::loadPreviousChapter,\n                enabledPrevious = state.viewerChapters?.prevChapter != null,\n                currentPage = state.currentPage,\n                totalPages = state.totalPages,\n                onPageIndexChange = {\n                    isScrollingThroughPages = true\n                    moveToPageIndex(it)\n                },\n\n                readingMode = ReadingMode.fromPreference(\n                    viewModel.getMangaReadingMode(resolveDefault = false),\n                ),\n                onClickReadingMode = viewModel::openReadingModeSelectDialog,\n                orientation = ReaderOrientation.fromPreference(\n                    viewModel.getMangaOrientation(resolveDefault = false),\n                ),\n                onClickOrientation = viewModel::openOrientationModeSelectDialog,\n                cropEnabled = cropEnabled,\n                onClickCropBorder = {\n                    val enabled = viewModel.toggleCropBorders()\n                    menuToggleToast?.cancel()\n                    menuToggleToast = toast(if (enabled) MR.strings.on else MR.strings.off)\n                },\n                onClickSettings = viewModel::openSettingsDialog,\n            )\n\n            if (flashOnPageChange) {\n                DisplayRefreshHost(\n                    hostState = displayRefreshHost,\n                )\n            }\n\n            val onDismissRequest = viewModel::closeDialog\n            when (state.dialog) {\n                is ReaderViewModel.Dialog.Loading -> {\n                    AlertDialog(\n                        onDismissRequest = {},\n                        confirmButton = {},\n                        text = {\n                            Row(\n                                horizontalArrangement = Arrangement.spacedBy(16.dp),\n                                verticalAlignment = Alignment.CenterVertically,\n                            ) {\n                                CircularProgressIndicator()\n                                Text(stringResource(MR.strings.loading))\n                            }\n                        },\n                    )\n                }\n                is ReaderViewModel.Dialog.Settings -> {\n                    ReaderSettingsDialog(\n                        onDismissRequest = onDismissRequest,\n                        onShowMenus = { setMenuVisibility(true) },\n                        onHideMenus = { setMenuVisibility(false) },\n                        screenModel = settingsScreenModel,\n                    )\n                }\n                is ReaderViewModel.Dialog.ReadingModeSelect -> {\n                    ReadingModeSelectDialog(\n                        onDismissRequest = onDismissRequest,\n                        screenModel = settingsScreenModel,\n                        onChange = { stringRes ->\n                            menuToggleToast?.cancel()\n                            if (!readerPreferences.showReadingMode().get()) {\n                                menuToggleToast = toast(stringRes)\n                            }\n                        },\n                    )\n                }\n                is ReaderViewModel.Dialog.OrientationModeSelect -> {\n                    OrientationSelectDialog(\n                        onDismissRequest = onDismissRequest,\n                        screenModel = settingsScreenModel,\n                        onChange = { stringRes ->\n                            menuToggleToast?.cancel()\n                            menuToggleToast = toast(stringRes)\n                        },\n                    )\n                }\n                is ReaderViewModel.Dialog.PageActions -> {\n                    ReaderPageActionsDialog(\n                        onDismissRequest = onDismissRequest,\n                        onSetAsCover = viewModel::setAsCover,\n                        onShare = viewModel::shareImage,\n                        onSave = viewModel::saveImage,\n                    )\n                }\n                null -> {}\n            }\n        }\n\n        val toolbarColor = ColorUtils.setAlphaComponent(\n            SurfaceColors.SURFACE_2.getColor(this),\n            if (isNightMode()) 230 else 242, // 90% dark 95% light\n        )\n        @Suppress(\"DEPRECATION\")\n        window.statusBarColor = toolbarColor\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {\n            @Suppress(\"DEPRECATION\")\n            window.navigationBarColor = toolbarColor\n        }\n\n        // Set initial visibility\n        setMenuVisibility(viewModel.state.value.menuVisible)\n    }\n\n    /**\n     * Sets the visibility of the menu according to [visible].\n     */\n    private fun setMenuVisibility(visible: Boolean) {\n        viewModel.showMenus(visible)\n        if (visible) {\n            windowInsetsController.show(WindowInsetsCompat.Type.systemBars())\n            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n        } else {\n            if (readerPreferences.fullscreen().get()) {\n                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())\n                windowInsetsController.systemBarsBehavior =\n                    WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE\n            }\n        }\n    }\n\n    /**\n     * Called from the presenter when a manga is ready. Used to instantiate the appropriate viewer.\n     */\n    private fun updateViewer() {\n        val prevViewer = viewModel.state.value.viewer\n        val newViewer = ReadingMode.toViewer(viewModel.getMangaReadingMode(), this)\n\n        if (window.sharedElementEnterTransition is MaterialContainerTransform) {\n            // Wait until transition is complete to avoid crash on API 26\n            window.sharedElementEnterTransition.doOnEnd {\n                setOrientation(viewModel.getMangaOrientation())\n            }\n        } else {\n            setOrientation(viewModel.getMangaOrientation())\n        }\n\n        // Destroy previous viewer if there was one\n        if (prevViewer != null) {\n            prevViewer.destroy()\n            binding.viewerContainer.removeAllViews()\n        }\n        viewModel.onViewerLoaded(newViewer)\n        updateViewerInset(readerPreferences.fullscreen().get())\n        binding.viewerContainer.addView(newViewer.getView())\n\n        if (readerPreferences.showReadingMode().get()) {\n            showReadingModeToast(viewModel.getMangaReadingMode())\n        }\n\n        loadingIndicator = ReaderProgressIndicator(this)\n        binding.readerContainer.addView(loadingIndicator)\n\n        startPostponedEnterTransition()\n    }\n\n    private fun openMangaScreen() {\n        viewModel.manga?.id?.let { id ->\n            startActivity(\n                Intent(this, MainActivity::class.java).apply {\n                    action = Constants.SHORTCUT_MANGA\n                    putExtra(Constants.MANGA_EXTRA, id)\n                    addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n                },\n            )\n        }\n    }\n\n    private fun openChapterInWebView() {\n        val manga = viewModel.manga ?: return\n        val source = viewModel.getSource() ?: return\n        assistUrl?.let {\n            val intent = WebViewActivity.newIntent(this@ReaderActivity, it, source.id, manga.title)\n            startActivity(intent)\n        }\n    }\n\n    private fun openChapterInBrowser() {\n        assistUrl?.let {\n            openInBrowser(it.toUri(), forceDefaultBrowser = false)\n        }\n    }\n\n    private fun shareChapter() {\n        assistUrl?.let {\n            val intent = it.toUri().toShareIntent(this, type = \"text/plain\")\n            startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share)))\n        }\n    }\n\n    private fun showReadingModeToast(mode: Int) {\n        try {\n            readingModeToast?.cancel()\n            readingModeToast = toast(ReadingMode.fromPreference(mode).stringRes)\n        } catch (e: ArrayIndexOutOfBoundsException) {\n            logcat(LogPriority.ERROR) { \"Unknown reading mode: $mode\" }\n        }\n    }\n\n    /**\n     * Called from the presenter whenever a new [viewerChapters] have been set. It delegates the\n     * method to the current viewer, but also set the subtitle on the toolbar, and\n     * hides or disables the reader prev/next buttons if there's a prev or next chapter\n     */\n    @SuppressLint(\"RestrictedApi\")\n    private fun setChapters(viewerChapters: ViewerChapters) {\n        binding.readerContainer.removeView(loadingIndicator)\n        viewModel.state.value.viewer?.setChapters(viewerChapters)\n\n        lifecycleScope.launchIO {\n            viewModel.getChapterUrl()?.let { url ->\n                assistUrl = url\n            }\n        }\n    }\n\n    /**\n     * Called from the presenter if the initial load couldn't load the pages of the chapter. In\n     * this case the activity is closed and a toast is shown to the user.\n     */\n    private fun setInitialChapterError(error: Throwable) {\n        logcat(LogPriority.ERROR, error)\n        finish()\n        toast(error.message)\n    }\n\n    /**\n     * Called from the presenter whenever it's loading the next or previous chapter. It shows or\n     * dismisses a non-cancellable dialog to prevent user interaction according to the value of\n     * [show]. This is only used when the next/previous buttons on the toolbar are clicked; the\n     * other cases are handled with chapter transitions on the viewers and chapter preloading.\n     */\n    private fun setProgressDialog(show: Boolean) {\n        if (show) {\n            viewModel.showLoadingDialog()\n        } else {\n            viewModel.closeDialog()\n        }\n    }\n\n    /**\n     * Moves the viewer to the given page [index]. It does nothing if the viewer is null or the\n     * page is not found.\n     */\n    private fun moveToPageIndex(index: Int) {\n        val viewer = viewModel.state.value.viewer ?: return\n        val currentChapter = viewModel.state.value.currentChapter ?: return\n        val page = currentChapter.pages?.getOrNull(index) ?: return\n        viewer.moveToPage(page)\n    }\n\n    /**\n     * Tells the presenter to load the next chapter and mark it as active. The progress dialog\n     * should be automatically shown.\n     */\n    private fun loadNextChapter() {\n        lifecycleScope.launch {\n            viewModel.loadNextChapter()\n            moveToPageIndex(0)\n        }\n    }\n\n    /**\n     * Tells the presenter to load the previous chapter and mark it as active. The progress dialog\n     * should be automatically shown.\n     */\n    private fun loadPreviousChapter() {\n        lifecycleScope.launch {\n            viewModel.loadPreviousChapter()\n            moveToPageIndex(0)\n        }\n    }\n\n    /**\n     * Called from the viewer whenever a [page] is marked as active. It updates the values of the\n     * bottom menu and delegates the change to the presenter.\n     */\n    fun onPageSelected(page: ReaderPage) {\n        viewModel.onPageSelected(page)\n    }\n\n    /**\n     * Called from the viewer whenever a [page] is long clicked. A bottom sheet with a list of\n     * actions to perform is shown.\n     */\n    fun onPageLongTap(page: ReaderPage) {\n        viewModel.openPageDialog(page)\n    }\n\n    /**\n     * Called from the viewer when the given [chapter] should be preloaded. It should be called when\n     * the viewer is reaching the beginning or end of a chapter or the transition page is active.\n     */\n    fun requestPreloadChapter(chapter: ReaderChapter) {\n        lifecycleScope.launchIO { viewModel.preload(chapter) }\n    }\n\n    /**\n     * Called from the viewer to toggle the visibility of the menu. It's implemented on the\n     * viewer because each one implements its own touch and key events.\n     */\n    fun toggleMenu() {\n        setMenuVisibility(!viewModel.state.value.menuVisible)\n    }\n\n    /**\n     * Called from the viewer to show the menu.\n     */\n    fun showMenu() {\n        if (!viewModel.state.value.menuVisible) {\n            setMenuVisibility(true)\n        }\n    }\n\n    /**\n     * Called from the viewer to hide the menu.\n     */\n    fun hideMenu() {\n        if (viewModel.state.value.menuVisible) {\n            setMenuVisibility(false)\n        }\n    }\n\n    /**\n     * Called from the presenter when a page is ready to be shared. It shows Android's default\n     * sharing tool.\n     */\n    private fun onShareImageResult(uri: Uri, page: ReaderPage) {\n        val manga = viewModel.manga ?: return\n        val chapter = page.chapter.chapter\n\n        val intent = uri.toShareIntent(\n            context = applicationContext,\n            message = stringResource(MR.strings.share_page_info, manga.title, chapter.name, page.number),\n        )\n        startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share)))\n    }\n\n    private fun onCopyImageResult(uri: Uri) {\n        val clipboardManager = applicationContext.getSystemService<ClipboardManager>() ?: return\n        val clipData = ClipData.newUri(applicationContext.contentResolver, \"\", uri)\n        clipboardManager.setPrimaryClip(clipData)\n    }\n\n    /**\n     * Called from the presenter when a page is saved or fails. It shows a message or logs the\n     * event depending on the [result].\n     */\n    private fun onSaveImageResult(result: ReaderViewModel.SaveImageResult) {\n        when (result) {\n            is ReaderViewModel.SaveImageResult.Success -> {\n                toast(MR.strings.picture_saved)\n            }\n            is ReaderViewModel.SaveImageResult.Error -> {\n                logcat(LogPriority.ERROR, result.error)\n            }\n        }\n    }\n\n    /**\n     * Called from the presenter when a page is set as cover or fails. It shows a different message\n     * depending on the [result].\n     */\n    private fun onSetAsCoverResult(result: ReaderViewModel.SetAsCoverResult) {\n        toast(\n            when (result) {\n                Success -> MR.strings.cover_updated\n                AddToLibraryFirst -> MR.strings.notification_first_add_to_library\n                Error -> MR.strings.notification_cover_update_failed\n            },\n        )\n    }\n\n    /**\n     * Forces the user preferred [orientation] on the activity.\n     */\n    private fun setOrientation(orientation: Int) {\n        val newOrientation = ReaderOrientation.fromPreference(orientation)\n        if (newOrientation.flag != requestedOrientation) {\n            requestedOrientation = newOrientation.flag\n        }\n    }\n\n    /**\n     * Updates viewer inset depending on fullscreen reader preferences.\n     */\n    private fun updateViewerInset(fullscreen: Boolean) {\n        viewModel.state.value.viewer?.getView()?.applyInsetter {\n            if (!fullscreen) {\n                type(navigationBars = true, statusBars = true) {\n                    padding()\n                }\n            }\n        }\n    }\n\n    /**\n     * Class that handles the user preferences of the reader.\n     */\n    private inner class ReaderConfig {\n\n        private fun getCombinedPaint(grayscale: Boolean, invertedColors: Boolean): Paint {\n            return Paint().apply {\n                colorFilter = ColorMatrixColorFilter(\n                    ColorMatrix().apply {\n                        if (grayscale) {\n                            setSaturation(0f)\n                        }\n                        if (invertedColors) {\n                            postConcat(\n                                ColorMatrix(\n                                    floatArrayOf(\n                                        -1f, 0f, 0f, 0f, 255f,\n                                        0f, -1f, 0f, 0f, 255f,\n                                        0f, 0f, -1f, 0f, 255f,\n                                        0f, 0f, 0f, 1f, 0f,\n                                    ),\n                                ),\n                            )\n                        }\n                    },\n                )\n            }\n        }\n\n        private val grayBackgroundColor = Color.rgb(0x20, 0x21, 0x25)\n\n        /**\n         * Initializes the reader subscriptions.\n         */\n        init {\n            readerPreferences.readerTheme().changes()\n                .onEach { theme ->\n                    binding.readerContainer.setBackgroundColor(\n                        when (theme) {\n                            0 -> Color.WHITE\n                            2 -> grayBackgroundColor\n                            3 -> automaticBackgroundColor()\n                            else -> Color.BLACK\n                        },\n                    )\n                }\n                .launchIn(lifecycleScope)\n\n            preferences.displayProfile().changes()\n                .onEach { setDisplayProfile(it) }\n                .launchIn(lifecycleScope)\n\n            readerPreferences.cutoutShort().changes()\n                .onEach(::setCutoutShort)\n                .launchIn(lifecycleScope)\n\n            readerPreferences.keepScreenOn().changes()\n                .onEach(::setKeepScreenOn)\n                .launchIn(lifecycleScope)\n\n            readerPreferences.customBrightness().changes()\n                .onEach(::setCustomBrightness)\n                .launchIn(lifecycleScope)\n\n            merge(readerPreferences.grayscale().changes(), readerPreferences.invertedColors().changes())\n                .onEach { setLayerPaint(readerPreferences.grayscale().get(), readerPreferences.invertedColors().get()) }\n                .launchIn(lifecycleScope)\n\n            readerPreferences.fullscreen().changes()\n                .onEach {\n                    WindowCompat.setDecorFitsSystemWindows(window, !it)\n                    updateViewerInset(it)\n                }\n                .launchIn(lifecycleScope)\n        }\n\n        /**\n         * Picks background color for [ReaderActivity] based on light/dark theme preference\n         */\n        private fun automaticBackgroundColor(): Int {\n            return if (baseContext.isNightMode()) {\n                grayBackgroundColor\n            } else {\n                Color.WHITE\n            }\n        }\n\n        /**\n         * Sets the display profile to [path].\n         */\n        private fun setDisplayProfile(path: String) {\n            val file = UniFile.fromUri(baseContext, path.toUri())\n            if (file != null && file.exists()) {\n                val inputStream = file.openInputStream()\n                val outputStream = ByteArrayOutputStream()\n                inputStream.use { input ->\n                    outputStream.use { output ->\n                        input.copyTo(output)\n                    }\n                }\n                val data = outputStream.toByteArray()\n                SubsamplingScaleImageView.setDisplayProfile(data)\n                TachiyomiImageDecoder.displayProfile = data\n            }\n        }\n\n        private fun setCutoutShort(enabled: Boolean) {\n            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) return\n\n            window.attributes.layoutInDisplayCutoutMode = when (enabled) {\n                true -> WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES\n                false -> WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER\n            }\n\n            // Trigger relayout\n            setMenuVisibility(viewModel.state.value.menuVisible)\n        }\n\n        /**\n         * Sets the keep screen on mode according to [enabled].\n         */\n        private fun setKeepScreenOn(enabled: Boolean) {\n            if (enabled) {\n                window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n            } else {\n                window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n            }\n        }\n\n        /**\n         * Sets the custom brightness overlay according to [enabled].\n         */\n        private fun setCustomBrightness(enabled: Boolean) {\n            if (enabled) {\n                readerPreferences.customBrightnessValue().changes()\n                    .sample(100)\n                    .onEach(::setCustomBrightnessValue)\n                    .launchIn(lifecycleScope)\n            } else {\n                setCustomBrightnessValue(0)\n            }\n        }\n\n        /**\n         * Sets the brightness of the screen. Range is [-75, 100].\n         * From -75 to -1 a semi-transparent black view is overlaid with the minimum brightness.\n         * From 1 to 100 it sets that value as brightness.\n         * 0 sets system brightness and hides the overlay.\n         */\n        private fun setCustomBrightnessValue(value: Int) {\n            // Calculate and set reader brightness.\n            val readerBrightness = when {\n                value > 0 -> {\n                    value / 100f\n                }\n                value < 0 -> {\n                    0.01f\n                }\n                else -> WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE\n            }\n            window.attributes = window.attributes.apply { screenBrightness = readerBrightness }\n\n            viewModel.setBrightnessOverlayValue(value)\n        }\n        private fun setLayerPaint(grayscale: Boolean, invertedColors: Boolean) {\n            val paint = if (grayscale || invertedColors) getCombinedPaint(grayscale, invertedColors) else null\n            binding.viewerContainer.setLayerType(LAYER_TYPE_HARDWARE, paint)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Paint\nimport android.util.AttributeSet\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewPropertyAnimator\nimport androidx.core.graphics.withScale\nimport androidx.core.graphics.withTranslation\nimport androidx.core.view.isVisible\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation\nimport tachiyomi.core.common.i18n.stringResource\nimport kotlin.math.abs\n\nclass ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) : View(\n    context,\n    attributeSet,\n) {\n\n    private var viewPropertyAnimator: ViewPropertyAnimator? = null\n\n    private var navigation: ViewerNavigation? = null\n\n    fun setNavigation(navigation: ViewerNavigation, showOnStart: Boolean) {\n        val firstLaunch = this.navigation == null\n        this.navigation = navigation\n        invalidate()\n\n        if (isVisible || (!showOnStart && firstLaunch) || navigation is DisabledNavigation) {\n            return\n        }\n\n        viewPropertyAnimator = animate()\n            .alpha(1f)\n            .setDuration(FADE_DURATION)\n            .withStartAction {\n                isVisible = true\n            }\n            .withEndAction {\n                viewPropertyAnimator = null\n            }\n        viewPropertyAnimator?.start()\n    }\n\n    private val regionPaint = Paint()\n\n    private val textPaint = Paint().apply {\n        textAlign = Paint.Align.CENTER\n        color = Color.WHITE\n        textSize = 64f\n    }\n\n    private val textBorderPaint = Paint().apply {\n        textAlign = Paint.Align.CENTER\n        color = Color.BLACK\n        textSize = 64f\n        style = Paint.Style.STROKE\n        strokeWidth = 8f\n    }\n\n    override fun onDraw(canvas: Canvas) {\n        if (navigation == null) return\n\n        navigation?.getRegions()?.forEach { region ->\n            val rect = region.rectF\n\n            // Scale rect from 1f,1f to screen width and height\n            canvas.withScale(width.toFloat(), height.toFloat()) {\n                regionPaint.color = region.type.color\n                drawRect(rect, regionPaint)\n            }\n\n            // Don't want scale anymore because it messes with drawText\n            // Translate origin to rect start (left, top)\n            canvas.withTranslation(x = (width * rect.left), y = (height * rect.top)) {\n                // Calculate center of rect width on screen\n                val x = width * (abs(rect.left - rect.right) / 2)\n\n                // Calculate center of rect height on screen\n                val y = height * (abs(rect.top - rect.bottom) / 2)\n\n                drawText(context.stringResource(region.type.nameRes), x, y, textBorderPaint)\n                drawText(context.stringResource(region.type.nameRes), x, y, textPaint)\n            }\n        }\n    }\n\n    override fun performClick(): Boolean {\n        super.performClick()\n\n        if (viewPropertyAnimator == null && isVisible) {\n            viewPropertyAnimator = animate()\n                .alpha(0f)\n                .setDuration(FADE_DURATION)\n                .withEndAction {\n                    isVisible = false\n                    viewPropertyAnimator = null\n                }\n            viewPropertyAnimator?.start()\n        }\n\n        return true\n    }\n\n    override fun onTouchEvent(event: MotionEvent?): Boolean {\n        // Hide overlay if user start tapping or swiping\n        performClick()\n        return super.onTouchEvent(event)\n    }\n}\n\nprivate const val FADE_DURATION = 1000L\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader\n\nimport android.app.Application\nimport android.net.Uri\nimport androidx.annotation.IntRange\nimport androidx.compose.runtime.Immutable\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.domain.entries.manga.interactor.SetMangaViewerFlags\nimport eu.kanade.domain.entries.manga.model.readerOrientation\nimport eu.kanade.domain.entries.manga.model.readingMode\nimport eu.kanade.domain.items.chapter.model.toDbChapter\nimport eu.kanade.domain.source.manga.interactor.GetMangaIncognitoState\nimport eu.kanade.domain.track.manga.interactor.TrackChapter\nimport eu.kanade.domain.track.service.TrackPreferences\nimport eu.kanade.tachiyomi.data.database.models.manga.isRecognizedNumber\nimport eu.kanade.tachiyomi.data.database.models.manga.toDomainChapter\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadProvider\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.data.saver.Image\nimport eu.kanade.tachiyomi.data.saver.ImageSaver\nimport eu.kanade.tachiyomi.data.saver.Location\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader\nimport eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader\nimport eu.kanade.tachiyomi.ui.reader.model.InsertPage\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.setting.ReadingMode\nimport eu.kanade.tachiyomi.ui.reader.viewer.Viewer\nimport eu.kanade.tachiyomi.util.chapter.filterDownloadedChapters\nimport eu.kanade.tachiyomi.util.chapter.removeDuplicates\nimport eu.kanade.tachiyomi.util.editCover\nimport eu.kanade.tachiyomi.util.lang.byteSize\nimport eu.kanade.tachiyomi.util.lang.takeBytes\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport eu.kanade.tachiyomi.util.storage.cacheImageDir\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.runBlocking\nimport logcat.LogPriority\nimport tachiyomi.core.common.preference.toggle\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.history.manga.interactor.GetNextChapters\nimport tachiyomi.domain.history.manga.interactor.UpsertMangaHistory\nimport tachiyomi.domain.history.manga.model.MangaHistoryUpdate\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\nimport tachiyomi.domain.items.chapter.service.getChapterSort\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.util.Date\n\n/**\n * Presenter used by the activity to perform background operations.\n */\nclass ReaderViewModel @JvmOverloads constructor(\n    private val savedState: SavedStateHandle,\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val downloadProvider: MangaDownloadProvider = Injekt.get(),\n    private val imageSaver: ImageSaver = Injekt.get(),\n    val readerPreferences: ReaderPreferences = Injekt.get(),\n    private val basePreferences: BasePreferences = Injekt.get(),\n    private val downloadPreferences: DownloadPreferences = Injekt.get(),\n    private val trackPreferences: TrackPreferences = Injekt.get(),\n    private val trackChapter: TrackChapter = Injekt.get(),\n    private val getManga: GetManga = Injekt.get(),\n    private val getChaptersByMangaId: GetChaptersByMangaId = Injekt.get(),\n    private val getNextChapters: GetNextChapters = Injekt.get(),\n    private val upsertHistory: UpsertMangaHistory = Injekt.get(),\n    private val updateChapter: UpdateChapter = Injekt.get(),\n    private val setMangaViewerFlags: SetMangaViewerFlags = Injekt.get(),\n    private val getIncognitoState: GetMangaIncognitoState = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n) : ViewModel() {\n\n    private val mutableState = MutableStateFlow(State())\n    val state = mutableState.asStateFlow()\n\n    private val eventChannel = Channel<Event>()\n    val eventFlow = eventChannel.receiveAsFlow()\n\n    /**\n     * The manga loaded in the reader. It can be null when instantiated for a short time.\n     */\n    val manga: Manga?\n        get() = state.value.manga\n\n    /**\n     * The chapter id of the currently loaded chapter. Used to restore from process kill.\n     */\n    private var chapterId = savedState.get<Long>(\"chapter_id\") ?: -1L\n        set(value) {\n            savedState[\"chapter_id\"] = value\n            field = value\n        }\n\n    /**\n     * The visible page index of the currently loaded chapter. Used to restore from process kill.\n     */\n    private var chapterPageIndex = savedState.get<Int>(\"page_index\") ?: -1\n        set(value) {\n            savedState[\"page_index\"] = value\n            field = value\n        }\n\n    /**\n     * The chapter loader for the loaded manga. It'll be null until [manga] is set.\n     */\n    private var loader: ChapterLoader? = null\n\n    /**\n     * The time the chapter was started reading\n     */\n    private var chapterReadStartTime: Long? = null\n\n    private var chapterToDownload: MangaDownload? = null\n\n    /**\n     * Chapter list for the active manga. It's retrieved lazily and should be accessed for the first\n     * time in a background thread to avoid blocking the UI.\n     */\n    private val chapterList by lazy {\n        val manga = manga!!\n        val chapters = runBlocking { getChaptersByMangaId.await(manga.id, applyScanlatorFilter = true) }\n\n        val selectedChapter = chapters.find { it.id == chapterId }\n            ?: error(\"Requested chapter of id $chapterId not found in chapter list\")\n\n        val chaptersForReader = when {\n            (readerPreferences.skipRead().get() || readerPreferences.skipFiltered().get()) -> {\n                val filteredChapters = chapters.filterNot {\n                    when {\n                        readerPreferences.skipRead().get() && it.read -> true\n                        readerPreferences.skipFiltered().get() -> {\n                            (manga.unreadFilterRaw == Manga.CHAPTER_SHOW_READ && !it.read) ||\n                                (manga.unreadFilterRaw == Manga.CHAPTER_SHOW_UNREAD && it.read) ||\n                                (\n                                    manga.downloadedFilterRaw ==\n                                        Manga.CHAPTER_SHOW_DOWNLOADED &&\n                                        !downloadManager.isChapterDownloaded(\n                                            it.name,\n                                            it.scanlator,\n                                            manga.title,\n                                            manga.source,\n                                        )\n                                    ) ||\n                                (\n                                    manga.downloadedFilterRaw ==\n                                        Manga.CHAPTER_SHOW_NOT_DOWNLOADED &&\n                                        downloadManager.isChapterDownloaded(\n                                            it.name,\n                                            it.scanlator,\n                                            manga.title,\n                                            manga.source,\n                                        )\n                                    ) ||\n                                (manga.bookmarkedFilterRaw == Manga.CHAPTER_SHOW_BOOKMARKED && !it.bookmark) ||\n                                (manga.bookmarkedFilterRaw == Manga.CHAPTER_SHOW_NOT_BOOKMARKED && it.bookmark)\n                        }\n                        else -> false\n                    }\n                }\n\n                if (filteredChapters.any { it.id == chapterId }) {\n                    filteredChapters\n                } else {\n                    filteredChapters + listOf(selectedChapter)\n                }\n            }\n            else -> chapters\n        }\n\n        chaptersForReader\n            .sortedWith(getChapterSort(manga, sortDescending = false))\n            .run {\n                if (readerPreferences.skipDupe().get()) {\n                    removeDuplicates(selectedChapter)\n                } else {\n                    this\n                }\n            }\n            .run {\n                if (basePreferences.downloadedOnly().get()) {\n                    filterDownloadedChapters(manga)\n                } else {\n                    this\n                }\n            }\n            .map { it.toDbChapter() }\n            .map(::ReaderChapter)\n    }\n\n    private val incognitoMode: Boolean by lazy { getIncognitoState.await(manga?.source) }\n    private val downloadAheadAmount = downloadPreferences.autoDownloadWhileReading().get()\n\n    init {\n        // To save state\n        state.map { it.viewerChapters?.currChapter }\n            .distinctUntilChanged()\n            .filterNotNull()\n            .onEach { currentChapter ->\n                if (chapterPageIndex >= 0) {\n                    // Restore from SavedState\n                    currentChapter.requestedPage = chapterPageIndex\n                } else if (!currentChapter.chapter.read) {\n                    currentChapter.requestedPage = currentChapter.chapter.last_page_read\n                }\n                chapterId = currentChapter.chapter.id!!\n            }\n            .launchIn(viewModelScope)\n    }\n\n    override fun onCleared() {\n        val currentChapters = state.value.viewerChapters\n        if (currentChapters != null) {\n            currentChapters.unref()\n            chapterToDownload?.let {\n                downloadManager.addDownloadsToStartOfQueue(listOf(it))\n            }\n        }\n    }\n\n    /**\n     * Called when the user pressed the back button and is going to leave the reader. Used to\n     * trigger deletion of the downloaded chapters.\n     */\n    fun onActivityFinish() {\n        deletePendingChapters()\n    }\n\n    /**\n     * Whether this presenter is initialized yet.\n     */\n    fun needsInit(): Boolean {\n        return manga == null\n    }\n\n    /**\n     * Initializes this presenter with the given [mangaId] and [initialChapterId]. This method will\n     * fetch the manga from the database and initialize the initial chapter.\n     */\n    suspend fun init(mangaId: Long, initialChapterId: Long): Result<Boolean> {\n        if (!needsInit()) return Result.success(true)\n        return withIOContext {\n            try {\n                val manga = getManga.await(mangaId)\n                if (manga != null) {\n                    sourceManager.isInitialized.first { it }\n                    mutableState.update { it.copy(manga = manga) }\n                    if (chapterId == -1L) chapterId = initialChapterId\n\n                    val context = Injekt.get<Application>()\n                    val source = sourceManager.getOrStub(manga.source)\n                    loader = ChapterLoader(context, downloadManager, downloadProvider, manga, source)\n\n                    loadChapter(loader!!, chapterList.first { chapterId == it.chapter.id })\n                    Result.success(true)\n                } else {\n                    // Unlikely but okay\n                    Result.success(false)\n                }\n            } catch (e: Throwable) {\n                if (e is CancellationException) {\n                    throw e\n                }\n                Result.failure(e)\n            }\n        }\n    }\n\n    /**\n     * Loads the given [chapter] with this [loader] and updates the currently active chapters.\n     * Callers must handle errors.\n     */\n    private suspend fun loadChapter(\n        loader: ChapterLoader,\n        chapter: ReaderChapter,\n    ): ViewerChapters {\n        loader.loadChapter(chapter)\n\n        val chapterPos = chapterList.indexOf(chapter)\n        val newChapters = ViewerChapters(\n            chapter,\n            chapterList.getOrNull(chapterPos - 1),\n            chapterList.getOrNull(chapterPos + 1),\n        )\n\n        withUIContext {\n            mutableState.update {\n                // Add new references first to avoid unnecessary recycling\n                newChapters.ref()\n                it.viewerChapters?.unref()\n\n                chapterToDownload = cancelQueuedDownloads(newChapters.currChapter)\n                it.copy(\n                    viewerChapters = newChapters,\n                    bookmarked = newChapters.currChapter.chapter.bookmark,\n                )\n            }\n        }\n        return newChapters\n    }\n\n    /**\n     * Called when the user changed to the given [chapter] when changing pages from the viewer.\n     * It's used only to set this chapter as active.\n     */\n    private fun loadNewChapter(chapter: ReaderChapter) {\n        val loader = loader ?: return\n\n        viewModelScope.launchIO {\n            logcat { \"Loading ${chapter.chapter.url}\" }\n\n            flushReadTimer()\n            restartReadTimer()\n\n            try {\n                loadChapter(loader, chapter)\n            } catch (e: Throwable) {\n                if (e is CancellationException) {\n                    throw e\n                }\n                logcat(LogPriority.ERROR, e)\n            }\n        }\n    }\n\n    /**\n     * Called when the user is going to load the prev/next chapter through the toolbar buttons.\n     */\n    private suspend fun loadAdjacent(chapter: ReaderChapter) {\n        val loader = loader ?: return\n\n        logcat { \"Loading adjacent ${chapter.chapter.url}\" }\n\n        mutableState.update { it.copy(isLoadingAdjacentChapter = true) }\n        try {\n            withIOContext {\n                loadChapter(loader, chapter)\n            }\n        } catch (e: Throwable) {\n            if (e is CancellationException) {\n                throw e\n            }\n            logcat(LogPriority.ERROR, e)\n        } finally {\n            mutableState.update { it.copy(isLoadingAdjacentChapter = false) }\n        }\n    }\n\n    /**\n     * Called when the viewers decide it's a good time to preload a [chapter] and improve the UX so\n     * that the user doesn't have to wait too long to continue reading.\n     */\n    suspend fun preload(chapter: ReaderChapter) {\n        if (chapter.state is ReaderChapter.State.Loaded || chapter.state == ReaderChapter.State.Loading) {\n            return\n        }\n\n        if (chapter.pageLoader?.isLocal == false) {\n            val manga = manga ?: return\n            val dbChapter = chapter.chapter\n            val isDownloaded = downloadManager.isChapterDownloaded(\n                dbChapter.name,\n                dbChapter.scanlator,\n                manga.title,\n                manga.source,\n                skipCache = true,\n            )\n            if (isDownloaded) {\n                chapter.state = ReaderChapter.State.Wait\n            }\n        }\n\n        if (chapter.state != ReaderChapter.State.Wait && chapter.state !is ReaderChapter.State.Error) {\n            return\n        }\n\n        val loader = loader ?: return\n        try {\n            logcat { \"Preloading ${chapter.chapter.url}\" }\n            loader.loadChapter(chapter)\n        } catch (e: Throwable) {\n            if (e is CancellationException) {\n                throw e\n            }\n            return\n        }\n        eventChannel.trySend(Event.ReloadViewerChapters)\n    }\n\n    fun onViewerLoaded(viewer: Viewer?) {\n        mutableState.update {\n            it.copy(viewer = viewer)\n        }\n    }\n\n    /**\n     * Called every time a page changes on the reader. Used to mark the flag of chapters being\n     * read, update tracking services, enqueue downloaded chapter deletion, and updating the active chapter if this\n     * [page]'s chapter is different from the currently active.\n     */\n    fun onPageSelected(page: ReaderPage) {\n        // InsertPage doesn't change page progress\n        if (page is InsertPage) {\n            return\n        }\n\n        val selectedChapter = page.chapter\n        val pages = selectedChapter.pages ?: return\n\n        // Save last page read and mark as read if needed\n        viewModelScope.launchNonCancellable {\n            updateChapterProgress(selectedChapter, page)\n        }\n\n        if (selectedChapter != getCurrentChapter()) {\n            logcat { \"Setting ${selectedChapter.chapter.url} as active\" }\n            loadNewChapter(selectedChapter)\n        }\n\n        val inDownloadRange = page.number.toDouble() / pages.size > 0.25\n        if (inDownloadRange) {\n            downloadNextChapters()\n        }\n\n        eventChannel.trySend(Event.PageChanged)\n    }\n\n    private fun downloadNextChapters() {\n        if (downloadAheadAmount == 0) return\n        val manga = manga ?: return\n\n        // Only download ahead if current + next chapter is already downloaded too to avoid jank\n        if (getCurrentChapter()?.pageLoader !is DownloadPageLoader) return\n        val nextChapter = state.value.viewerChapters?.nextChapter?.chapter ?: return\n\n        viewModelScope.launchIO {\n            val isNextChapterDownloaded = downloadManager.isChapterDownloaded(\n                nextChapter.name,\n                nextChapter.scanlator,\n                manga.title,\n                manga.source,\n            )\n            if (!isNextChapterDownloaded) return@launchIO\n\n            val chaptersToDownload = getNextChapters.await(manga.id, nextChapter.id!!).run {\n                if (readerPreferences.skipDupe().get()) {\n                    removeDuplicates(nextChapter.toDomainChapter()!!)\n                } else {\n                    this\n                }\n            }.take(downloadAheadAmount)\n            downloadManager.downloadChapters(\n                manga,\n                chaptersToDownload,\n            )\n        }\n    }\n\n    /**\n     * Removes [currentChapter] from download queue\n     * if setting is enabled and [currentChapter] is queued for download\n     */\n    private fun cancelQueuedDownloads(currentChapter: ReaderChapter): MangaDownload? {\n        return downloadManager.getQueuedDownloadOrNull(currentChapter.chapter.id!!.toLong())?.also {\n            downloadManager.cancelQueuedDownloads(listOf(it))\n        }\n    }\n\n    /**\n     * Determines if deleting option is enabled and nth to last chapter actually exists.\n     * If both conditions are satisfied enqueues chapter for delete\n     * @param currentChapter current chapter, which is going to be marked as read.\n     */\n    private fun deleteChapterIfNeeded(currentChapter: ReaderChapter) {\n        val removeAfterReadSlots = downloadPreferences.removeAfterReadSlots().get()\n        if (removeAfterReadSlots == -1) return\n\n        // Determine which chapter should be deleted and enqueue\n        val currentChapterPosition = chapterList.indexOf(currentChapter)\n        val chapterToDelete = chapterList.getOrNull(currentChapterPosition - removeAfterReadSlots)\n\n        // If chapter is completely read, no need to download it\n        chapterToDownload = null\n\n        if (chapterToDelete != null) {\n            enqueueDeleteReadChapters(chapterToDelete)\n        }\n    }\n\n    /**\n     * Saves the chapter progress (last read page and whether it's read)\n     * if incognito mode isn't on.\n     */\n    private suspend fun updateChapterProgress(readerChapter: ReaderChapter, page: Page) {\n        val pageIndex = page.index\n\n        mutableState.update {\n            it.copy(currentPage = pageIndex + 1)\n        }\n        readerChapter.requestedPage = pageIndex\n        chapterPageIndex = pageIndex\n\n        if (!incognitoMode && page.status != Page.State.ERROR) {\n            readerChapter.chapter.last_page_read = pageIndex\n\n            if (readerChapter.pages?.lastIndex == pageIndex) {\n                updateChapterProgressOnComplete(readerChapter)\n            }\n\n            updateChapter.await(\n                ChapterUpdate(\n                    id = readerChapter.chapter.id!!,\n                    read = readerChapter.chapter.read,\n                    lastPageRead = readerChapter.chapter.last_page_read.toLong(),\n                ),\n            )\n        }\n    }\n\n    private suspend fun updateChapterProgressOnComplete(readerChapter: ReaderChapter) {\n        readerChapter.chapter.read = true\n        updateTrackChapterRead(readerChapter)\n        deleteChapterIfNeeded(readerChapter)\n\n        val markDuplicateAsRead = libraryPreferences.markDuplicateReadChapterAsRead().get()\n            .contains(LibraryPreferences.MARK_DUPLICATE_CHAPTER_READ_EXISTING)\n        if (!markDuplicateAsRead) return\n\n        val duplicateUnreadChapters = chapterList\n            .mapNotNull {\n                val chapter = it.chapter\n                if (\n                    !chapter.read &&\n                    chapter.isRecognizedNumber &&\n                    chapter.chapter_number == readerChapter.chapter.chapter_number\n                ) {\n                    ChapterUpdate(id = chapter.id!!, read = true)\n                } else {\n                    null\n                }\n            }\n        updateChapter.awaitAll(duplicateUnreadChapters)\n    }\n\n    fun restartReadTimer() {\n        chapterReadStartTime = Instant.now().toEpochMilli()\n    }\n\n    fun flushReadTimer() {\n        getCurrentChapter()?.let {\n            viewModelScope.launchNonCancellable {\n                updateHistory(it)\n            }\n        }\n    }\n\n    /**\n     * Saves the chapter last read history if incognito mode isn't on.\n     */\n    private suspend fun updateHistory(readerChapter: ReaderChapter) {\n        if (incognitoMode) return\n\n        val chapterId = readerChapter.chapter.id!!\n        val readAt = Date()\n        val sessionReadDuration = chapterReadStartTime?.let { readAt.time - it } ?: 0\n\n        upsertHistory.await(MangaHistoryUpdate(chapterId, readAt, sessionReadDuration))\n        chapterReadStartTime = null\n    }\n\n    /**\n     * Called from the activity to load and set the next chapter as active.\n     */\n    suspend fun loadNextChapter() {\n        val nextChapter = state.value.viewerChapters?.nextChapter ?: return\n        loadAdjacent(nextChapter)\n    }\n\n    /**\n     * Called from the activity to load and set the previous chapter as active.\n     */\n    suspend fun loadPreviousChapter() {\n        val prevChapter = state.value.viewerChapters?.prevChapter ?: return\n        loadAdjacent(prevChapter)\n    }\n\n    /**\n     * Returns the currently active chapter.\n     */\n    private fun getCurrentChapter(): ReaderChapter? {\n        return state.value.currentChapter\n    }\n\n    fun getSource() = manga?.source?.let { sourceManager.getOrStub(it) } as? HttpSource\n\n    fun getChapterUrl(): String? {\n        val sChapter = getCurrentChapter()?.chapter ?: return null\n        val source = getSource() ?: return null\n\n        return try {\n            source.getChapterUrl(sChapter)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    /**\n     * Bookmarks the currently active chapter.\n     */\n    fun toggleChapterBookmark() {\n        val chapter = getCurrentChapter()?.chapter ?: return\n        val bookmarked = !chapter.bookmark\n        chapter.bookmark = bookmarked\n\n        viewModelScope.launchNonCancellable {\n            updateChapter.await(\n                ChapterUpdate(\n                    id = chapter.id!!.toLong(),\n                    bookmark = bookmarked,\n                ),\n            )\n        }\n\n        mutableState.update {\n            it.copy(\n                bookmarked = bookmarked,\n            )\n        }\n    }\n\n    /**\n     * Returns the viewer position used by this manga or the default one.\n     */\n    fun getMangaReadingMode(resolveDefault: Boolean = true): Int {\n        val default = readerPreferences.defaultReadingMode().get()\n        val readingMode = ReadingMode.fromPreference(manga?.readingMode?.toInt())\n        return when {\n            resolveDefault && readingMode == ReadingMode.DEFAULT -> default\n            else -> manga?.readingMode?.toInt() ?: default\n        }\n    }\n\n    /**\n     * Updates the viewer position for the open manga.\n     */\n    fun setMangaReadingMode(readingMode: ReadingMode) {\n        val manga = manga ?: return\n        runBlocking(Dispatchers.IO) {\n            setMangaViewerFlags.awaitSetReadingMode(\n                manga.id,\n                readingMode.flagValue.toLong(),\n            )\n            val currChapters = state.value.viewerChapters\n            if (currChapters != null) {\n                // Save current page\n                val currChapter = currChapters.currChapter\n                currChapter.requestedPage = currChapter.chapter.last_page_read\n\n                mutableState.update {\n                    it.copy(\n                        manga = getManga.await(manga.id),\n                        viewerChapters = currChapters,\n                    )\n                }\n                eventChannel.send(Event.ReloadViewerChapters)\n            }\n        }\n    }\n\n    /**\n     * Returns the orientation type used by this manga or the default one.\n     */\n    fun getMangaOrientation(resolveDefault: Boolean = true): Int {\n        val default = readerPreferences.defaultOrientationType().get()\n        val orientation = ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt())\n        return when {\n            resolveDefault && orientation == ReaderOrientation.DEFAULT -> default\n            else -> manga?.readerOrientation?.toInt() ?: default\n        }\n    }\n\n    /**\n     * Updates the orientation type for the open manga.\n     */\n    fun setMangaOrientationType(orientation: ReaderOrientation) {\n        val manga = manga ?: return\n        viewModelScope.launchIO {\n            setMangaViewerFlags.awaitSetOrientation(manga.id, orientation.flagValue.toLong())\n            val currChapters = state.value.viewerChapters\n            if (currChapters != null) {\n                // Save current page\n                val currChapter = currChapters.currChapter\n                currChapter.requestedPage = currChapter.chapter.last_page_read\n\n                mutableState.update {\n                    it.copy(\n                        manga = getManga.await(manga.id),\n                        viewerChapters = currChapters,\n                    )\n                }\n                eventChannel.send(Event.SetOrientation(getMangaOrientation()))\n                eventChannel.send(Event.ReloadViewerChapters)\n            }\n        }\n    }\n\n    fun toggleCropBorders(): Boolean {\n        val isPagerType = ReadingMode.isPagerType(getMangaReadingMode())\n        return if (isPagerType) {\n            readerPreferences.cropBorders().toggle()\n        } else {\n            readerPreferences.cropBordersWebtoon().toggle()\n        }\n    }\n\n    /**\n     * Generate a filename for the given [manga] and [page]\n     */\n    private fun generateFilename(\n        manga: Manga,\n        page: ReaderPage,\n    ): String {\n        val chapter = page.chapter.chapter\n        val filenameSuffix = \" - ${page.number}\"\n        return DiskUtil.buildValidFilename(\n            \"${manga.title} - ${chapter.name}\".takeBytes(\n                DiskUtil.MAX_FILE_NAME_BYTES - filenameSuffix.byteSize(),\n            ),\n        ) + filenameSuffix\n    }\n\n    fun showMenus(visible: Boolean) {\n        mutableState.update { it.copy(menuVisible = visible) }\n    }\n\n    fun showLoadingDialog() {\n        mutableState.update { it.copy(dialog = Dialog.Loading) }\n    }\n\n    fun openReadingModeSelectDialog() {\n        mutableState.update { it.copy(dialog = Dialog.ReadingModeSelect) }\n    }\n\n    fun openOrientationModeSelectDialog() {\n        mutableState.update { it.copy(dialog = Dialog.OrientationModeSelect) }\n    }\n\n    fun openPageDialog(page: ReaderPage) {\n        mutableState.update { it.copy(dialog = Dialog.PageActions(page)) }\n    }\n\n    fun openSettingsDialog() {\n        mutableState.update { it.copy(dialog = Dialog.Settings) }\n    }\n\n    fun closeDialog() {\n        mutableState.update { it.copy(dialog = null) }\n    }\n\n    fun setBrightnessOverlayValue(value: Int) {\n        mutableState.update { it.copy(brightnessOverlayValue = value) }\n    }\n\n    /**\n     * Saves the image of this the selected page on the pictures directory and notifies the UI of the result.\n     * There's also a notification to allow sharing the image somewhere else or deleting it.\n     */\n    fun saveImage() {\n        val page = (state.value.dialog as? Dialog.PageActions)?.page\n        if (page?.status != Page.State.READY) return\n        val manga = manga ?: return\n\n        val context = Injekt.get<Application>()\n        val notifier = SaveImageNotifier(context)\n        notifier.onClear()\n\n        val filename = generateFilename(manga, page)\n\n        // Pictures directory.\n        val relativePath = if (readerPreferences.folderPerManga().get()) {\n            DiskUtil.buildValidFilename(\n                manga.title,\n            )\n        } else {\n            \"\"\n        }\n\n        // Copy file in background.\n        viewModelScope.launchNonCancellable {\n            try {\n                val uri = imageSaver.save(\n                    image = Image.Page(\n                        inputStream = page.stream!!,\n                        name = filename,\n                        location = Location.Pictures.create(relativePath),\n                    ),\n                )\n                withUIContext {\n                    notifier.onComplete(uri)\n                    eventChannel.send(Event.SavedImage(SaveImageResult.Success(uri)))\n                }\n            } catch (e: Throwable) {\n                notifier.onError(e.message)\n                eventChannel.send(Event.SavedImage(SaveImageResult.Error(e)))\n            }\n        }\n    }\n\n    /**\n     * Shares the image of this the selected page and notifies the UI with the path of the file to share.\n     * The image must be first copied to the internal partition because there are many possible\n     * formats it can come from, like a zipped chapter, in which case it's not possible to directly\n     * get a path to the file and it has to be decompressed somewhere first. Only the last shared\n     * image will be kept so it won't be taking lots of internal disk space.\n     */\n    fun shareImage(copyToClipboard: Boolean) {\n        val page = (state.value.dialog as? Dialog.PageActions)?.page\n        if (page?.status != Page.State.READY) return\n        val manga = manga ?: return\n\n        val context = Injekt.get<Application>()\n        val destDir = context.cacheImageDir\n\n        val filename = generateFilename(manga, page)\n\n        try {\n            viewModelScope.launchNonCancellable {\n                destDir.deleteRecursively()\n                val uri = imageSaver.save(\n                    image = Image.Page(\n                        inputStream = page.stream!!,\n                        name = filename,\n                        location = Location.Cache,\n                    ),\n                )\n                eventChannel.send(if (copyToClipboard) Event.CopyImage(uri) else Event.ShareImage(uri, page))\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    /**\n     * Sets the image of this the selected page as cover and notifies the UI of the result.\n     */\n    fun setAsCover() {\n        val page = (state.value.dialog as? Dialog.PageActions)?.page\n        if (page?.status != Page.State.READY) return\n        val manga = manga ?: return\n        val stream = page.stream ?: return\n\n        viewModelScope.launchNonCancellable {\n            val result = try {\n                manga.editCover(Injekt.get(), stream())\n                if (manga.isLocal() || manga.favorite) {\n                    SetAsCoverResult.Success\n                } else {\n                    SetAsCoverResult.AddToLibraryFirst\n                }\n            } catch (e: Exception) {\n                SetAsCoverResult.Error\n            }\n            eventChannel.send(Event.SetCoverResult(result))\n        }\n    }\n\n    enum class SetAsCoverResult {\n        Success,\n        AddToLibraryFirst,\n        Error,\n    }\n\n    sealed interface SaveImageResult {\n        class Success(val uri: Uri) : SaveImageResult\n        class Error(val error: Throwable) : SaveImageResult\n    }\n\n    /**\n     * Starts the service that updates the last chapter read in sync services. This operation\n     * will run in a background thread and errors are ignored.\n     */\n    private fun updateTrackChapterRead(readerChapter: ReaderChapter) {\n        if (incognitoMode) return\n        if (!trackPreferences.autoUpdateTrack().get()) return\n\n        val manga = manga ?: return\n        val context = Injekt.get<Application>()\n\n        viewModelScope.launchNonCancellable {\n            trackChapter.await(context, manga.id, readerChapter.chapter.chapter_number.toDouble())\n        }\n    }\n\n    /**\n     * Enqueues this [chapter] to be deleted when [deletePendingChapters] is called. The download\n     * manager handles persisting it across process deaths.\n     */\n    private fun enqueueDeleteReadChapters(chapter: ReaderChapter) {\n        if (!chapter.chapter.read) return\n        val manga = manga ?: return\n\n        viewModelScope.launchNonCancellable {\n            downloadManager.enqueueChaptersToDelete(\n                listOf(chapter.chapter.toDomainChapter()!!),\n                manga,\n            )\n        }\n    }\n\n    /**\n     * Deletes all the pending chapters. This operation will run in a background thread and errors\n     * are ignored.\n     */\n    private fun deletePendingChapters() {\n        viewModelScope.launchNonCancellable {\n            downloadManager.deletePendingChapters()\n        }\n    }\n\n    @Immutable\n    data class State(\n        val manga: Manga? = null,\n        val viewerChapters: ViewerChapters? = null,\n        val bookmarked: Boolean = false,\n        val isLoadingAdjacentChapter: Boolean = false,\n        val currentPage: Int = -1,\n\n        /**\n         * Viewer used to display the pages (pager, webtoon, ...).\n         */\n        val viewer: Viewer? = null,\n        val dialog: Dialog? = null,\n        val menuVisible: Boolean = false,\n        @IntRange(from = -100, to = 100) val brightnessOverlayValue: Int = 0,\n    ) {\n        val currentChapter: ReaderChapter?\n            get() = viewerChapters?.currChapter\n\n        val totalPages: Int\n            get() = currentChapter?.pages?.size ?: -1\n    }\n\n    sealed interface Dialog {\n        data object Loading : Dialog\n        data object Settings : Dialog\n        data object ReadingModeSelect : Dialog\n        data object OrientationModeSelect : Dialog\n        data class PageActions(val page: ReaderPage) : Dialog\n    }\n\n    sealed interface Event {\n        data object ReloadViewerChapters : Event\n        data object PageChanged : Event\n        data class SetOrientation(val orientation: Int) : Event\n        data class SetCoverResult(val result: SetAsCoverResult) : Event\n\n        data class SavedImage(val result: SaveImageResult) : Event\n        data class ShareImage(val uri: Uri, val page: ReaderPage) : Event\n        data class CopyImage(val uri: Uri) : Event\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader\n\nimport android.content.Context\nimport android.graphics.Bitmap\nimport android.net.Uri\nimport androidx.core.app.NotificationCompat\nimport coil3.asDrawable\nimport coil3.imageLoader\nimport coil3.request.CachePolicy\nimport coil3.request.ImageRequest\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.notification.NotificationHandler\nimport eu.kanade.tachiyomi.data.notification.NotificationReceiver\nimport eu.kanade.tachiyomi.data.notification.Notifications\nimport eu.kanade.tachiyomi.util.system.cancelNotification\nimport eu.kanade.tachiyomi.util.system.getBitmapOrNull\nimport eu.kanade.tachiyomi.util.system.notificationBuilder\nimport eu.kanade.tachiyomi.util.system.notify\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\n\n/**\n * Class used to show BigPictureStyle notifications\n */\nclass SaveImageNotifier(private val context: Context) {\n\n    private val notificationBuilder = context.notificationBuilder(Notifications.CHANNEL_COMMON)\n    private val notificationId: Int = Notifications.ID_DOWNLOAD_IMAGE\n\n    /**\n     * Called when image download/copy is complete.\n     *\n     * @param uri image file containing downloaded page image.\n     */\n    fun onComplete(uri: Uri) {\n        val request = ImageRequest.Builder(context)\n            .data(uri)\n            .memoryCachePolicy(CachePolicy.DISABLED)\n            .size(720, 1280)\n            .target(\n                onSuccess = { showCompleteNotification(uri, it.asDrawable(context.resources).getBitmapOrNull()) },\n                onError = { onError(null) },\n            )\n            .build()\n        context.imageLoader.enqueue(request)\n    }\n\n    /**\n     * Clears the notification message.\n     */\n    fun onClear() {\n        context.cancelNotification(notificationId)\n    }\n\n    /**\n     * Called on error while downloading image.\n     * @param error string containing error information.\n     */\n    fun onError(error: String?) {\n        // Create notification\n        with(notificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.download_notifier_title_error))\n            setContentText(error ?: context.stringResource(MR.strings.unknown_error))\n            setSmallIcon(android.R.drawable.ic_menu_report_image)\n        }\n        updateNotification()\n    }\n\n    private fun showCompleteNotification(uri: Uri, image: Bitmap?) {\n        with(notificationBuilder) {\n            setContentTitle(context.stringResource(MR.strings.picture_saved))\n            setSmallIcon(R.drawable.ic_photo_24dp)\n            image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) }\n            setLargeIcon(image)\n            setAutoCancel(true)\n\n            // Clear old actions if they exist\n            clearActions()\n\n            setContentIntent(NotificationHandler.openImagePendingActivity(context, uri))\n            // Share action\n            addAction(\n                R.drawable.ic_share_24dp,\n                context.stringResource(MR.strings.action_share),\n                NotificationReceiver.shareImagePendingBroadcast(context, uri),\n            )\n\n            updateNotification()\n        }\n    }\n\n    private fun updateNotification() {\n        // Displays the progress bar on notification\n        context.notify(notificationId, notificationBuilder.build())\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ArchivePageLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder\nimport mihon.core.archive.ArchiveReader\nimport tachiyomi.core.common.util.system.ImageUtil\n\n/**\n * Loader used to load a chapter from an archive file.\n */\ninternal class ArchivePageLoader(private val reader: ArchiveReader) : PageLoader() {\n    override var isLocal: Boolean = true\n\n    override suspend fun getPages(): List<ReaderPage> = reader.useEntries { entries ->\n        entries\n            .filter { it.isFile && ImageUtil.isImage(it.name) { reader.getInputStream(it.name)!! } }\n            .sortedWith { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) }\n            .mapIndexed { i, entry ->\n                ReaderPage(i).apply {\n                    stream = { reader.getInputStream(entry.name)!! }\n                    status = Page.State.READY\n                }\n            }\n            .toList()\n    }\n\n    override suspend fun loadPage(page: ReaderPage) {\n        check(!isRecycled)\n    }\n\n    override fun recycle() {\n        super.recycle()\n        reader.close()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadProvider\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport mihon.core.archive.archiveReader\nimport mihon.core.archive.epubReader\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.i18n.MR\nimport tachiyomi.source.local.entries.manga.LocalMangaSource\nimport tachiyomi.source.local.io.Format\nimport uy.kohesive.injekt.injectLazy\n\n/**\n * Loader used to retrieve the [PageLoader] for a given chapter.\n */\nclass ChapterLoader(\n    private val context: Context,\n    private val downloadManager: MangaDownloadManager,\n    private val downloadProvider: MangaDownloadProvider,\n    private val manga: Manga,\n    private val source: MangaSource,\n) {\n\n    private val readerPreferences: ReaderPreferences by injectLazy()\n\n    /**\n     * Assigns the chapter's page loader and loads the its pages. Returns immediately if the chapter\n     * is already loaded.\n     */\n    suspend fun loadChapter(chapter: ReaderChapter) {\n        if (chapterIsReady(chapter)) {\n            return\n        }\n\n        chapter.state = ReaderChapter.State.Loading\n        withIOContext {\n            logcat { \"Loading pages for ${chapter.chapter.name}\" }\n            try {\n                val loader = getPageLoader(chapter)\n                chapter.pageLoader = loader\n\n                val pages = loader.getPages()\n                    .onEach { it.chapter = chapter }\n                if (pages.isEmpty()) {\n                    throw Exception(context.stringResource(MR.strings.page_list_empty_error))\n                }\n\n                // If the chapter is partially read, set the starting page to the last the user read\n                // otherwise use the requested page.\n                if (!chapter.chapter.read || readerPreferences.preserveReadingPosition().get()) {\n                    chapter.requestedPage = chapter.chapter.last_page_read\n                }\n\n                chapter.state = ReaderChapter.State.Loaded(pages)\n            } catch (e: Throwable) {\n                chapter.state = ReaderChapter.State.Error(e)\n                throw e\n            }\n        }\n    }\n\n    /**\n     * Checks [chapter] to be loaded based on present pages and loader in addition to state.\n     */\n    private fun chapterIsReady(chapter: ReaderChapter): Boolean {\n        return chapter.state is ReaderChapter.State.Loaded && chapter.pageLoader != null\n    }\n\n    /**\n     * Returns the page loader to use for this [chapter].\n     */\n    private fun getPageLoader(chapter: ReaderChapter): PageLoader {\n        val dbChapter = chapter.chapter\n        val isDownloaded = downloadManager.isChapterDownloaded(\n            dbChapter.name,\n            dbChapter.scanlator,\n            manga.title,\n            manga.source,\n            skipCache = true,\n        )\n        return when {\n            isDownloaded -> DownloadPageLoader(\n                chapter,\n                manga,\n                source,\n                downloadManager,\n                downloadProvider,\n            )\n            source is LocalMangaSource -> source.getFormat(chapter.chapter).let { format ->\n                when (format) {\n                    is Format.Directory -> DirectoryPageLoader(format.file)\n                    is Format.Archive -> ArchivePageLoader(format.file.archiveReader(context))\n                    is Format.Epub -> EpubPageLoader(format.file.epubReader(context))\n                }\n            }\n            source is HttpSource -> HttpPageLoader(chapter, source)\n            source is StubMangaSource -> error(\n                context.stringResource(MR.strings.source_not_installed, source.toString()),\n            )\n            else -> error(context.stringResource(MR.strings.loader_not_implemented_error))\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DirectoryPageLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder\nimport tachiyomi.core.common.util.system.ImageUtil\n\n/**\n * Loader used to load a chapter from a directory given on [file].\n */\ninternal class DirectoryPageLoader(val file: UniFile) : PageLoader() {\n\n    override var isLocal: Boolean = true\n\n    override suspend fun getPages(): List<ReaderPage> {\n        return file.listFiles()\n            ?.filter { !it.isDirectory && ImageUtil.isImage(it.name) { it.openInputStream() } }\n            ?.sortedWith { f1, f2 -> f1.name.orEmpty().compareToCaseInsensitiveNaturalOrder(f2.name.orEmpty()) }\n            ?.mapIndexed { i, file ->\n                val streamFn = { file.openInputStream() }\n                ReaderPage(i).apply {\n                    stream = streamFn\n                    status = Page.State.READY\n                }\n            }\n            .orEmpty()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/DownloadPageLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport android.app.Application\nimport android.net.Uri\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.data.database.models.manga.toDomainChapter\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadProvider\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport mihon.core.archive.archiveReader\nimport tachiyomi.domain.entries.manga.model.Manga\nimport uy.kohesive.injekt.injectLazy\n\n/**\n * Loader used to load a chapter from the downloaded chapters.\n */\ninternal class DownloadPageLoader(\n    private val chapter: ReaderChapter,\n    private val manga: Manga,\n    private val source: MangaSource,\n    private val downloadManager: MangaDownloadManager,\n    private val downloadProvider: MangaDownloadProvider,\n) : PageLoader() {\n\n    private val context: Application by injectLazy()\n\n    private var archivePageLoader: ArchivePageLoader? = null\n\n    override var isLocal: Boolean = true\n\n    override suspend fun getPages(): List<ReaderPage> {\n        val dbChapter = chapter.chapter\n        val chapterPath = downloadProvider.findChapterDir(\n            dbChapter.name,\n            dbChapter.scanlator,\n            manga.title,\n            source,\n        )\n        return if (chapterPath?.isFile == true) {\n            getPagesFromArchive(chapterPath)\n        } else {\n            getPagesFromDirectory()\n        }\n    }\n\n    override fun recycle() {\n        super.recycle()\n        archivePageLoader?.recycle()\n    }\n\n    private suspend fun getPagesFromArchive(file: UniFile): List<ReaderPage> {\n        val loader = ArchivePageLoader(file.archiveReader(context)).also { archivePageLoader = it }\n        return loader.getPages()\n    }\n\n    private fun getPagesFromDirectory(): List<ReaderPage> {\n        val pages = downloadManager.buildPageList(\n            source,\n            manga,\n            chapter.chapter.toDomainChapter()!!,\n        )\n        return pages.map { page ->\n            ReaderPage(page.index, page.url, page.imageUrl) {\n                context.contentResolver.openInputStream(page.uri ?: Uri.EMPTY)!!\n            }.apply {\n                status = Page.State.READY\n            }\n        }\n    }\n\n    override suspend fun loadPage(page: ReaderPage) {\n        archivePageLoader?.loadPage(page)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/EpubPageLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport mihon.core.archive.EpubReader\n\n/**\n * Loader used to load a chapter from a .epub file.\n */\ninternal class EpubPageLoader(private val reader: EpubReader) : PageLoader() {\n\n    override var isLocal: Boolean = true\n\n    override suspend fun getPages(): List<ReaderPage> {\n        return reader.getImagesFromPages().mapIndexed { i, path ->\n            ReaderPage(i).apply {\n                stream = { reader.getInputStream(path)!! }\n                status = Page.State.READY\n            }\n        }\n    }\n\n    override suspend fun loadPage(page: ReaderPage) {\n        check(!isRecycled)\n    }\n\n    override fun recycle() {\n        super.recycle()\n        reader.close()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport aniyomi.util.DataSaver\nimport aniyomi.util.DataSaver.Companion.getImage\nimport eu.kanade.domain.source.service.SourcePreferences\nimport eu.kanade.tachiyomi.data.cache.ChapterCache\nimport eu.kanade.tachiyomi.data.database.models.manga.toDomainChapter\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.runInterruptible\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.util.concurrent.PriorityBlockingQueue\nimport java.util.concurrent.atomic.AtomicInteger\nimport kotlin.math.min\n\n/**\n * Loader used to load chapters from an online source.\n */\ninternal class HttpPageLoader(\n    private val chapter: ReaderChapter,\n    private val source: HttpSource,\n    private val chapterCache: ChapterCache = Injekt.get(),\n    // SY -->\n    private val sourcePreferences: SourcePreferences = Injekt.get(),\n    // SY <--\n) : PageLoader() {\n\n    private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)\n\n    /**\n     * A queue used to manage requests one by one while allowing priorities.\n     */\n    private val queue = PriorityBlockingQueue<PriorityPage>()\n\n    private val preloadSize = 4\n\n    // SY -->\n    private val dataSaver = DataSaver(source, sourcePreferences)\n    // SY <--\n\n    init {\n        scope.launchIO {\n            flow {\n                while (true) {\n                    emit(runInterruptible { queue.take() }.page)\n                }\n            }\n                .filter { it.status == Page.State.QUEUE }\n                .collect(::internalLoadPage)\n        }\n    }\n\n    override var isLocal: Boolean = false\n\n    /**\n     * Returns the page list for a chapter. It tries to return the page list from the local cache,\n     * otherwise fallbacks to network.\n     */\n    override suspend fun getPages(): List<ReaderPage> {\n        val pages = try {\n            chapterCache.getPageListFromCache(chapter.chapter.toDomainChapter()!!)\n        } catch (e: Throwable) {\n            if (e is CancellationException) {\n                throw e\n            }\n            source.getPageList(chapter.chapter)\n        }\n        return pages.mapIndexed { index, page ->\n            // Don't trust sources and use our own indexing\n            ReaderPage(index, page.url, page.imageUrl)\n        }\n    }\n\n    /**\n     * Loads a page through the queue. Handles re-enqueueing pages if they were evicted from the cache.\n     */\n    override suspend fun loadPage(page: ReaderPage) = withIOContext {\n        val imageUrl = page.imageUrl\n\n        // Check if the image has been deleted\n        if (page.status == Page.State.READY &&\n            imageUrl != null &&\n            !chapterCache.isImageInCache(\n                imageUrl,\n            )\n        ) {\n            page.status = Page.State.QUEUE\n        }\n\n        // Automatically retry failed pages when subscribed to this page\n        if (page.status == Page.State.ERROR) {\n            page.status = Page.State.QUEUE\n        }\n\n        val queuedPages = mutableListOf<PriorityPage>()\n        if (page.status == Page.State.QUEUE) {\n            queuedPages += PriorityPage(page, 1).also { queue.offer(it) }\n        }\n        queuedPages += preloadNextPages(page, preloadSize)\n\n        suspendCancellableCoroutine<Nothing> { continuation ->\n            continuation.invokeOnCancellation {\n                queuedPages.forEach {\n                    if (it.page.status == Page.State.QUEUE) {\n                        queue.remove(it)\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Retries a page. This method is only called from user interaction on the viewer.\n     */\n    override fun retryPage(page: ReaderPage) {\n        if (page.status == Page.State.ERROR) {\n            page.status = Page.State.QUEUE\n        }\n        queue.offer(PriorityPage(page, 2))\n    }\n\n    override fun recycle() {\n        super.recycle()\n        scope.cancel()\n        queue.clear()\n\n        // Cache current page list progress for online chapters to allow a faster reopen\n        chapter.pages?.let { pages ->\n            launchIO {\n                try {\n                    // Convert to pages without reader information\n                    val pagesToSave = pages.map { Page(it.index, it.url, it.imageUrl) }\n                    chapterCache.putPageListToCache(\n                        chapter.chapter.toDomainChapter()!!,\n                        pagesToSave,\n                    )\n                } catch (e: Throwable) {\n                    if (e is CancellationException) {\n                        throw e\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Preloads the given [amount] of pages after the [currentPage] with a lower priority.\n     *\n     * @return a list of [PriorityPage] that were added to the [queue]\n     */\n    private fun preloadNextPages(currentPage: ReaderPage, amount: Int): List<PriorityPage> {\n        val pageIndex = currentPage.index\n        val pages = currentPage.chapter.pages ?: return emptyList()\n        if (pageIndex == pages.lastIndex) return emptyList()\n\n        return pages\n            .subList(pageIndex + 1, min(pageIndex + 1 + amount, pages.size))\n            .mapNotNull {\n                if (it.status == Page.State.QUEUE) {\n                    PriorityPage(it, 0).apply { queue.offer(this) }\n                } else {\n                    null\n                }\n            }\n    }\n\n    /**\n     * Loads the page, retrieving the image URL and downloading the image if necessary.\n     * Downloaded images are stored in the chapter cache.\n     *\n     * @param page the page whose source image has to be downloaded.\n     */\n    private suspend fun internalLoadPage(page: ReaderPage) {\n        try {\n            if (page.imageUrl.isNullOrEmpty()) {\n                page.status = Page.State.LOAD_PAGE\n                page.imageUrl = source.getImageUrl(page)\n            }\n            val imageUrl = page.imageUrl!!\n\n            if (!chapterCache.isImageInCache(imageUrl)) {\n                page.status = Page.State.DOWNLOAD_IMAGE\n                val imageResponse = source.getImage(page, dataSaver)\n                chapterCache.putImageToCache(imageUrl, imageResponse)\n            }\n\n            page.stream = { chapterCache.getImageFile(imageUrl).inputStream() }\n            page.status = Page.State.READY\n        } catch (e: Throwable) {\n            page.status = Page.State.ERROR\n            if (e is CancellationException) {\n                throw e\n            }\n        }\n    }\n}\n\n/**\n * Data class used to keep ordering of pages in order to maintain priority.\n */\nprivate class PriorityPage(\n    val page: ReaderPage,\n    val priority: Int,\n) : Comparable<PriorityPage> {\n    companion object {\n        private val idGenerator = AtomicInteger()\n    }\n\n    private val identifier = idGenerator.incrementAndGet()\n\n    override fun compareTo(other: PriorityPage): Int {\n        val p = other.priority.compareTo(priority)\n        return if (p != 0) p else identifier.compareTo(other.identifier)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.loader\n\nimport androidx.annotation.CallSuper\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\n\n/**\n * A loader used to load pages into the reader. Any open resources must be cleaned up when the\n * method [recycle] is called.\n */\nabstract class PageLoader {\n\n    /**\n     * Whether this loader has been already recycled.\n     */\n    var isRecycled = false\n        private set\n\n    abstract var isLocal: Boolean\n\n    /**\n     * Returns the list of pages of a chapter.\n     */\n    abstract suspend fun getPages(): List<ReaderPage>\n\n    /**\n     * Loads the page. May also preload other pages.\n     * Progress of the page loading should be followed via [page.statusFlow].\n     * [loadPage] is not currently guaranteed to complete, so it should be launched asynchronously.\n     */\n    open suspend fun loadPage(page: ReaderPage) {}\n\n    /**\n     * Retries the given [page] in case it failed to load. This method only makes sense when an\n     * online source is used.\n     */\n    open fun retryPage(page: ReaderPage) {}\n\n    /**\n     * Recycles this loader. Implementations must override this method to clean up any active\n     * resources.\n     */\n    @CallSuper\n    open fun recycle() {\n        isRecycled = true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ChapterTransition.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.model\n\nsealed class ChapterTransition {\n\n    abstract val from: ReaderChapter\n    abstract val to: ReaderChapter?\n\n    class Prev(\n        override val from: ReaderChapter,\n        override val to: ReaderChapter?,\n    ) : ChapterTransition()\n\n    class Next(\n        override val from: ReaderChapter,\n        override val to: ReaderChapter?,\n    ) : ChapterTransition()\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other !is ChapterTransition) return false\n        if (from == other.from && to == other.to) return true\n        if (from == other.to && to == other.from) return true\n        return false\n    }\n\n    override fun hashCode(): Int {\n        var result = from.hashCode()\n        result = 31 * result + (to?.hashCode() ?: 0)\n        return result\n    }\n\n    override fun toString(): String {\n        return \"${javaClass.simpleName}(from=${from.chapter.url}, to=${to?.chapter?.url})\"\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/InsertPage.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.model\n\nclass InsertPage(val parent: ReaderPage) : ReaderPage(parent.index, parent.url, parent.imageUrl) {\n\n    override var chapter: ReaderChapter = parent.chapter\n\n    init {\n        status = State.READY\n        stream = parent.stream\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ReaderChapter.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.model\n\nimport eu.kanade.domain.items.chapter.model.toDbChapter\nimport eu.kanade.tachiyomi.data.database.models.manga.Chapter\nimport eu.kanade.tachiyomi.ui.reader.loader.PageLoader\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport tachiyomi.core.common.util.system.logcat\n\ndata class ReaderChapter(val chapter: Chapter) {\n\n    val stateFlow = MutableStateFlow<State>(State.Wait)\n    var state: State\n        get() = stateFlow.value\n        set(value) {\n            stateFlow.value = value\n        }\n\n    val pages: List<ReaderPage>?\n        get() = (state as? State.Loaded)?.pages\n\n    var pageLoader: PageLoader? = null\n\n    var requestedPage: Int = 0\n\n    private var references = 0\n\n    constructor(chapter: tachiyomi.domain.items.chapter.model.Chapter) : this(chapter.toDbChapter())\n\n    fun ref() {\n        references++\n    }\n\n    fun unref() {\n        references--\n        if (references == 0) {\n            if (pageLoader != null) {\n                logcat { \"Recycling chapter ${chapter.name}\" }\n            }\n            pageLoader?.recycle()\n            pageLoader = null\n            state = State.Wait\n        }\n    }\n\n    sealed interface State {\n        data object Wait : State\n        data object Loading : State\n        data class Error(val error: Throwable) : State\n        data class Loaded(val pages: List<ReaderPage>) : State\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ReaderPage.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.model\n\nimport eu.kanade.tachiyomi.source.model.Page\nimport java.io.InputStream\n\nopen class ReaderPage(\n    index: Int,\n    url: String = \"\",\n    imageUrl: String? = null,\n    var stream: (() -> InputStream)? = null,\n) : Page(index, url, imageUrl, null) {\n\n    open lateinit var chapter: ReaderChapter\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/model/ViewerChapters.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.model\n\ndata class ViewerChapters(\n    val currChapter: ReaderChapter,\n    val prevChapter: ReaderChapter?,\n    val nextChapter: ReaderChapter?,\n) {\n\n    fun ref() {\n        currChapter.ref()\n        prevChapter?.ref()\n        nextChapter?.ref()\n    }\n\n    fun unref() {\n        currChapter.unref()\n        prevChapter?.unref()\n        nextChapter?.unref()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.setting\n\nimport android.content.pm.ActivityInfo\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ScreenLockLandscape\nimport androidx.compose.material.icons.filled.ScreenLockPortrait\nimport androidx.compose.material.icons.filled.ScreenRotation\nimport androidx.compose.material.icons.filled.StayCurrentLandscape\nimport androidx.compose.material.icons.filled.StayCurrentPortrait\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.i18n.MR\n\nenum class ReaderOrientation(\n    val flag: Int,\n    val stringRes: StringResource,\n    val icon: ImageVector,\n    val flagValue: Int,\n) {\n    DEFAULT(\n        ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,\n        MR.strings.label_default,\n        Icons.Default.ScreenRotation,\n        0x00000000,\n    ),\n    FREE(\n        ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED,\n        MR.strings.rotation_free,\n        Icons.Default.ScreenRotation,\n        0x00000008,\n    ),\n    PORTRAIT(\n        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT,\n        MR.strings.rotation_portrait,\n        Icons.Default.StayCurrentPortrait,\n        0x00000010,\n    ),\n    LANDSCAPE(\n        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE,\n        MR.strings.rotation_landscape,\n        Icons.Default.StayCurrentLandscape,\n        0x00000018,\n    ),\n    LOCKED_PORTRAIT(\n        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT,\n        MR.strings.rotation_force_portrait,\n        Icons.Default.ScreenLockPortrait,\n        0x00000020,\n    ),\n    LOCKED_LANDSCAPE(\n        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,\n        MR.strings.rotation_force_landscape,\n        Icons.Default.ScreenLockLandscape,\n        0x00000028,\n    ),\n    REVERSE_PORTRAIT(\n        ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT,\n        MR.strings.rotation_reverse_portrait,\n        Icons.Default.StayCurrentPortrait,\n        0x00000030,\n    ),\n    ;\n\n    companion object {\n        const val MASK = 0x00000038\n\n        fun fromPreference(preference: Int?): ReaderOrientation = entries.find { it.flagValue == preference } ?: DEFAULT\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.setting\n\nimport android.os.Build\nimport androidx.compose.ui.graphics.BlendMode\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\nimport tachiyomi.i18n.MR\n\nclass ReaderPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    // region General\n\n    fun pageTransitions() = preferenceStore.getBoolean(\"pref_enable_transitions_key\", true)\n\n    fun flashOnPageChange() = preferenceStore.getBoolean(\"pref_reader_flash\", false)\n\n    fun flashDurationMillis() = preferenceStore.getInt(\"pref_reader_flash_duration\", MILLI_CONVERSION)\n\n    fun flashPageInterval() = preferenceStore.getInt(\"pref_reader_flash_interval\", 1)\n\n    fun flashColor() = preferenceStore.getEnum(\"pref_reader_flash_mode\", FlashColor.BLACK)\n\n    fun doubleTapAnimSpeed() = preferenceStore.getInt(\"pref_double_tap_anim_speed\", 500)\n\n    fun showPageNumber() = preferenceStore.getBoolean(\"pref_show_page_number_key\", true)\n\n    fun showReadingMode() = preferenceStore.getBoolean(\"pref_show_reading_mode\", true)\n\n    fun fullscreen() = preferenceStore.getBoolean(\"fullscreen\", true)\n\n    fun cutoutShort() = preferenceStore.getBoolean(\"cutout_short\", true)\n\n    fun keepScreenOn() = preferenceStore.getBoolean(\"pref_keep_screen_on_key\", true)\n\n    fun defaultReadingMode() = preferenceStore.getInt(\n        \"pref_default_reading_mode_key\",\n        ReadingMode.RIGHT_TO_LEFT.flagValue,\n    )\n\n    fun defaultOrientationType() = preferenceStore.getInt(\n        \"pref_default_orientation_type_key\",\n        ReaderOrientation.FREE.flagValue,\n    )\n\n    fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean(\n        \"pref_enable_double_tap_zoom_webtoon\",\n        true,\n    )\n\n    fun imageScaleType() = preferenceStore.getInt(\"pref_image_scale_type_key\", 1)\n\n    fun zoomStart() = preferenceStore.getInt(\"pref_zoom_start_key\", 1)\n\n    fun readerTheme() = preferenceStore.getInt(\"pref_reader_theme_key\", 1)\n\n    fun alwaysShowChapterTransition() = preferenceStore.getBoolean(\n        \"always_show_chapter_transition\",\n        true,\n    )\n\n    fun preserveReadingPosition() = preferenceStore.getBoolean(\n        \"pref_preserve_reading_position\",\n        false,\n    )\n\n    fun cropBorders() = preferenceStore.getBoolean(\"crop_borders\", false)\n\n    fun navigateToPan() = preferenceStore.getBoolean(\"navigate_pan\", true)\n\n    fun landscapeZoom() = preferenceStore.getBoolean(\"landscape_zoom\", true)\n\n    fun cropBordersWebtoon() = preferenceStore.getBoolean(\"crop_borders_webtoon\", false)\n\n    fun webtoonSidePadding() = preferenceStore.getInt(\"webtoon_side_padding\", WEBTOON_PADDING_MIN)\n\n    fun readerHideThreshold() = preferenceStore.getEnum(\"reader_hide_threshold\", ReaderHideThreshold.LOW)\n\n    fun folderPerManga() = preferenceStore.getBoolean(\"create_folder_per_manga\", false)\n\n    fun skipRead() = preferenceStore.getBoolean(\"skip_read\", false)\n\n    fun skipFiltered() = preferenceStore.getBoolean(\"skip_filtered\", true)\n\n    fun skipDupe() = preferenceStore.getBoolean(\"skip_dupe\", false)\n\n    fun webtoonDisableZoomOut() = preferenceStore.getBoolean(\"webtoon_disable_zoom_out\", false)\n\n    // endregion\n\n    // region Split two page spread\n\n    fun dualPageSplitPaged() = preferenceStore.getBoolean(\"pref_dual_page_split\", false)\n\n    fun dualPageInvertPaged() = preferenceStore.getBoolean(\"pref_dual_page_invert\", false)\n\n    fun dualPageSplitWebtoon() = preferenceStore.getBoolean(\"pref_dual_page_split_webtoon\", false)\n\n    fun dualPageInvertWebtoon() = preferenceStore.getBoolean(\"pref_dual_page_invert_webtoon\", false)\n\n    fun dualPageRotateToFit() = preferenceStore.getBoolean(\"pref_dual_page_rotate\", false)\n\n    fun dualPageRotateToFitInvert() = preferenceStore.getBoolean(\n        \"pref_dual_page_rotate_invert\",\n        false,\n    )\n\n    fun dualPageRotateToFitWebtoon() = preferenceStore.getBoolean(\n        \"pref_dual_page_rotate_webtoon\",\n        false,\n    )\n\n    fun dualPageRotateToFitInvertWebtoon() = preferenceStore.getBoolean(\n        \"pref_dual_page_rotate_invert_webtoon\",\n        false,\n    )\n\n    // endregion\n\n    // region Color filter\n\n    fun customBrightness() = preferenceStore.getBoolean(\"pref_custom_brightness_key\", false)\n\n    fun customBrightnessValue() = preferenceStore.getInt(\"custom_brightness_value\", 0)\n\n    fun colorFilter() = preferenceStore.getBoolean(\"pref_color_filter_key\", false)\n\n    fun colorFilterValue() = preferenceStore.getInt(\"color_filter_value\", 0)\n\n    fun colorFilterMode() = preferenceStore.getInt(\"color_filter_mode\", 0)\n\n    fun grayscale() = preferenceStore.getBoolean(\"pref_grayscale\", false)\n\n    fun invertedColors() = preferenceStore.getBoolean(\"pref_inverted_colors\", false)\n\n    // endregion\n\n    // region Controls\n\n    fun readWithLongTap() = preferenceStore.getBoolean(\"reader_long_tap\", true)\n\n    fun readWithVolumeKeys() = preferenceStore.getBoolean(\"reader_volume_keys\", false)\n\n    fun readWithVolumeKeysInverted() = preferenceStore.getBoolean(\n        \"reader_volume_keys_inverted\",\n        false,\n    )\n\n    fun navigationModePager() = preferenceStore.getInt(\"reader_navigation_mode_pager\", 0)\n\n    fun navigationModeWebtoon() = preferenceStore.getInt(\"reader_navigation_mode_webtoon\", 0)\n\n    fun pagerNavInverted() = preferenceStore.getEnum(\n        \"reader_tapping_inverted\",\n        TappingInvertMode.NONE,\n    )\n\n    fun webtoonNavInverted() = preferenceStore.getEnum(\n        \"reader_tapping_inverted_webtoon\",\n        TappingInvertMode.NONE,\n    )\n\n    fun showNavigationOverlayNewUser() = preferenceStore.getBoolean(\n        \"reader_navigation_overlay_new_user\",\n        true,\n    )\n\n    fun showNavigationOverlayOnStart() = preferenceStore.getBoolean(\n        \"reader_navigation_overlay_on_start\",\n        false,\n    )\n\n    // endregion\n\n    enum class FlashColor {\n        BLACK,\n        WHITE,\n        WHITE_BLACK,\n    }\n\n    enum class TappingInvertMode(\n        val titleRes: StringResource,\n        val shouldInvertHorizontal: Boolean = false,\n        val shouldInvertVertical: Boolean = false,\n    ) {\n        NONE(MR.strings.tapping_inverted_none),\n        HORIZONTAL(MR.strings.tapping_inverted_horizontal, shouldInvertHorizontal = true),\n        VERTICAL(MR.strings.tapping_inverted_vertical, shouldInvertVertical = true),\n        BOTH(\n            MR.strings.tapping_inverted_both,\n            shouldInvertHorizontal = true,\n            shouldInvertVertical = true,\n        ),\n    }\n\n    enum class ReaderHideThreshold(val threshold: Int) {\n        HIGHEST(5),\n        HIGH(13),\n        LOW(31),\n        LOWEST(47),\n    }\n\n    companion object {\n        const val WEBTOON_PADDING_MIN = 0\n        const val WEBTOON_PADDING_MAX = 25\n\n        const val MILLI_CONVERSION = 100\n\n        val TapZones = listOf(\n            MR.strings.label_default,\n            MR.strings.l_nav,\n            MR.strings.kindlish_nav,\n            MR.strings.edge_nav,\n            MR.strings.right_and_left_nav,\n            MR.strings.disabled_nav,\n        )\n\n        val ImageScaleType = listOf(\n            MR.strings.scale_type_fit_screen,\n            MR.strings.scale_type_stretch,\n            MR.strings.scale_type_fit_width,\n            MR.strings.scale_type_fit_height,\n            MR.strings.scale_type_original_size,\n            MR.strings.scale_type_smart_fit,\n        )\n\n        val ZoomStart = listOf(\n            MR.strings.zoom_start_automatic,\n            MR.strings.zoom_start_left,\n            MR.strings.zoom_start_right,\n            MR.strings.zoom_start_center,\n        )\n\n        val ColorFilterMode = buildList {\n            addAll(\n                listOf(\n                    MR.strings.label_default to BlendMode.SrcOver,\n                    MR.strings.filter_mode_multiply to BlendMode.Modulate,\n                    MR.strings.filter_mode_screen to BlendMode.Screen,\n                ),\n            )\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n                addAll(\n                    listOf(\n                        MR.strings.filter_mode_overlay to BlendMode.Overlay,\n                        MR.strings.filter_mode_lighten to BlendMode.Lighten,\n                        MR.strings.filter_mode_darken to BlendMode.Darken,\n                    ),\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderSettingsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.setting\n\nimport cafe.adriel.voyager.core.model.ScreenModel\nimport eu.kanade.presentation.util.ioCoroutineScope\nimport eu.kanade.tachiyomi.ui.reader.ReaderViewModel\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.stateIn\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass ReaderSettingsScreenModel(\n    readerState: StateFlow<ReaderViewModel.State>,\n    val hasDisplayCutout: Boolean,\n    val onChangeReadingMode: (ReadingMode) -> Unit,\n    val onChangeOrientation: (ReaderOrientation) -> Unit,\n    val preferences: ReaderPreferences = Injekt.get(),\n) : ScreenModel {\n\n    val viewerFlow = readerState\n        .map { it.viewer }\n        .distinctUntilChanged()\n        .stateIn(ioCoroutineScope, SharingStarted.Lazily, null)\n\n    val mangaFlow = readerState\n        .map { it.manga }\n        .distinctUntilChanged()\n        .stateIn(ioCoroutineScope, SharingStarted.Lazily, null)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingMode.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.setting\n\nimport androidx.annotation.DrawableRes\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport eu.kanade.tachiyomi.ui.reader.viewer.Viewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.pager.L2RPagerViewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer\nimport tachiyomi.i18n.MR\n\nenum class ReadingMode(\n    val stringRes: StringResource,\n    @DrawableRes val iconRes: Int,\n    val flagValue: Int,\n    val direction: Direction? = null,\n    val type: ViewerType? = null,\n) {\n    DEFAULT(MR.strings.label_default, R.drawable.ic_reader_default_24dp, 0x00000000),\n    LEFT_TO_RIGHT(\n        MR.strings.left_to_right_viewer,\n        R.drawable.ic_reader_ltr_24dp,\n        0x00000001,\n        Direction.Horizontal,\n        ViewerType.Pager,\n    ),\n    RIGHT_TO_LEFT(\n        MR.strings.right_to_left_viewer,\n        R.drawable.ic_reader_rtl_24dp,\n        0x00000002,\n        Direction.Horizontal,\n        ViewerType.Pager,\n    ),\n    VERTICAL(\n        MR.strings.vertical_viewer,\n        R.drawable.ic_reader_vertical_24dp,\n        0x00000003,\n        Direction.Vertical,\n        ViewerType.Pager,\n    ),\n    WEBTOON(\n        MR.strings.webtoon_viewer,\n        R.drawable.ic_reader_webtoon_24dp,\n        0x00000004,\n        Direction.Vertical,\n        ViewerType.Webtoon,\n    ),\n    CONTINUOUS_VERTICAL(\n        MR.strings.vertical_plus_viewer,\n        R.drawable.ic_reader_continuous_vertical_24dp,\n        0x00000005,\n        Direction.Vertical,\n        ViewerType.Webtoon,\n    ),\n    ;\n\n    companion object {\n        const val MASK = 0x00000007\n\n        fun fromPreference(preference: Int?): ReadingMode = entries.find { it.flagValue == preference } ?: DEFAULT\n\n        fun isPagerType(preference: Int): Boolean {\n            val mode = fromPreference(preference)\n            return mode.type is ViewerType.Pager\n        }\n\n        fun toViewer(preference: Int?, activity: ReaderActivity): Viewer {\n            return when (fromPreference(preference)) {\n                LEFT_TO_RIGHT -> L2RPagerViewer(activity)\n                RIGHT_TO_LEFT -> R2LPagerViewer(activity)\n                VERTICAL -> VerticalPagerViewer(activity)\n                WEBTOON -> WebtoonViewer(activity)\n                CONTINUOUS_VERTICAL -> WebtoonViewer(activity, isContinuous = false)\n                DEFAULT -> throw IllegalStateException(\n                    \"Preference value must be resolved: $preference\",\n                )\n            }\n        }\n    }\n\n    sealed interface Direction {\n        data object Horizontal : Direction\n        data object Vertical : Direction\n    }\n\n    sealed interface ViewerType {\n        data object Pager : ViewerType\n        data object Webtoon : ViewerType\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/GestureDetectorWithLongTap.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.content.Context\nimport android.os.Handler\nimport android.os.Looper\nimport android.view.GestureDetector\nimport android.view.MotionEvent\nimport android.view.ViewConfiguration\nimport kotlin.math.abs\n\n/**\n * A custom gesture detector that also implements an on long tap confirmed, because the built-in\n * one conflicts with the quick scale feature.\n */\nopen class GestureDetectorWithLongTap(\n    context: Context,\n    listener: Listener,\n) : GestureDetector(context, listener) {\n\n    private val handler = Handler(Looper.getMainLooper())\n    private val slop = ViewConfiguration.get(context).scaledTouchSlop\n    private val longTapTime = ViewConfiguration.getLongPressTimeout().toLong()\n    private val doubleTapTime = ViewConfiguration.getDoubleTapTimeout().toLong()\n\n    private var downX = 0f\n    private var downY = 0f\n    private var lastUp = 0L\n    private var lastDownEvent: MotionEvent? = null\n\n    /**\n     * Runnable to execute when a long tap is confirmed.\n     */\n    private val longTapFn = Runnable { listener.onLongTapConfirmed(lastDownEvent!!) }\n\n    override fun onTouchEvent(ev: MotionEvent): Boolean {\n        when (ev.actionMasked) {\n            MotionEvent.ACTION_DOWN -> {\n                lastDownEvent?.recycle()\n                lastDownEvent = MotionEvent.obtain(ev)\n\n                // This is the key difference with the built-in detector. We have to ignore the\n                // event if the last up and current down are too close in time (double tap).\n                if (ev.downTime - lastUp > doubleTapTime) {\n                    downX = ev.x\n                    downY = ev.y\n                    handler.postDelayed(longTapFn, longTapTime)\n                }\n            }\n            MotionEvent.ACTION_MOVE -> {\n                if (abs(ev.x - downX) > slop || abs(ev.y - downY) > slop) {\n                    handler.removeCallbacks(longTapFn)\n                }\n            }\n            MotionEvent.ACTION_UP -> {\n                lastUp = ev.eventTime\n                handler.removeCallbacks(longTapFn)\n            }\n            MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_POINTER_DOWN -> {\n                handler.removeCallbacks(longTapFn)\n            }\n        }\n        return super.onTouchEvent(ev)\n    }\n\n    /**\n     * Custom listener to also include a long tap confirmed\n     */\n    open class Listener : SimpleOnGestureListener() {\n        /**\n         * Notified when a long tap occurs with the initial on down [ev] that triggered it.\n         */\n        open fun onLongTapConfirmed(ev: MotionEvent) {\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/MissingChapters.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport eu.kanade.tachiyomi.data.database.models.manga.toDomainChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport tachiyomi.domain.items.chapter.service.calculateChapterGap as domainCalculateChapterGap\n\nfun calculateChapterGap(higherReaderChapter: ReaderChapter?, lowerReaderChapter: ReaderChapter?): Int {\n    return domainCalculateChapterGap(\n        higherReaderChapter?.chapter?.toDomainChapter(),\n        lowerReaderChapter?.chapter?.toDomainChapter(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderButton.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.MotionEvent\nimport com.google.android.material.button.MaterialButton\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer\n\n/**\n * A button class to be used by child views of the pager viewer. All tap gestures are handled by\n * the pager, but this class disables that behavior to allow clickable buttons.\n */\nclass ReaderButton @JvmOverloads constructor(\n    context: Context,\n    attrs: AttributeSet? = null,\n    defStyleAttr: Int = R.attr.materialButtonStyle,\n) : MaterialButton(context, attrs, defStyleAttr) {\n\n    var viewer: PagerViewer? = null\n\n    override fun onTouchEvent(event: MotionEvent): Boolean {\n        viewer?.pager?.setGestureDetectorEnabled(false)\n        if (event.actionMasked == MotionEvent.ACTION_UP) {\n            viewer?.pager?.setGestureDetectorEnabled(true)\n        }\n        return super.onTouchEvent(event)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.content.Context\nimport android.graphics.PointF\nimport android.graphics.RectF\nimport android.graphics.drawable.Animatable\nimport android.graphics.drawable.BitmapDrawable\nimport android.graphics.drawable.Drawable\nimport android.util.AttributeSet\nimport android.view.GestureDetector\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport android.widget.FrameLayout\nimport androidx.annotation.AttrRes\nimport androidx.annotation.CallSuper\nimport androidx.annotation.StyleRes\nimport androidx.appcompat.widget.AppCompatImageView\nimport androidx.core.os.postDelayed\nimport androidx.core.view.isVisible\nimport coil3.BitmapImage\nimport coil3.asDrawable\nimport coil3.dispose\nimport coil3.imageLoader\nimport coil3.request.CachePolicy\nimport coil3.request.ImageRequest\nimport coil3.request.crossfade\nimport coil3.size.Precision\nimport coil3.size.ViewSizeResolver\nimport com.davemorrissey.labs.subscaleview.ImageSource\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.EASE_IN_OUT_QUAD\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.EASE_OUT_QUAD\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE\nimport com.github.chrisbanes.photoview.PhotoView\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.data.coil.cropBorders\nimport eu.kanade.tachiyomi.data.coil.customDecoder\nimport eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonSubsamplingImageView\nimport eu.kanade.tachiyomi.util.system.animatorDurationScale\nimport eu.kanade.tachiyomi.util.view.isVisibleOnScreen\nimport okio.BufferedSource\nimport tachiyomi.core.common.util.system.ImageUtil\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * A wrapper view for showing page image.\n *\n * Animated image will be drawn by [PhotoView] while [SubsamplingScaleImageView] will take non-animated image.\n *\n * @param isWebtoon if true, [WebtoonSubsamplingImageView] will be used instead of [SubsamplingScaleImageView]\n * and [AppCompatImageView] will be used instead of [PhotoView]\n */\nopen class ReaderPageImageView @JvmOverloads constructor(\n    context: Context,\n    attrs: AttributeSet? = null,\n    @AttrRes defStyleAttrs: Int = 0,\n    @StyleRes defStyleRes: Int = 0,\n    private val isWebtoon: Boolean = false,\n) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes) {\n\n    private val alwaysDecodeLongStripWithSSIV by lazy {\n        Injekt.get<BasePreferences>().alwaysDecodeLongStripWithSSIV().get()\n    }\n\n    private var pageView: View? = null\n\n    private var config: Config? = null\n\n    var onImageLoaded: (() -> Unit)? = null\n    var onImageLoadError: (() -> Unit)? = null\n    var onScaleChanged: ((newScale: Float) -> Unit)? = null\n    var onViewClicked: (() -> Unit)? = null\n\n    /**\n     * For automatic background. Will be set as background color when [onImageLoaded] is called.\n     */\n    var pageBackground: Drawable? = null\n\n    @CallSuper\n    open fun onImageLoaded() {\n        onImageLoaded?.invoke()\n        background = pageBackground\n    }\n\n    @CallSuper\n    open fun onImageLoadError() {\n        onImageLoadError?.invoke()\n    }\n\n    @CallSuper\n    open fun onScaleChanged(newScale: Float) {\n        onScaleChanged?.invoke(newScale)\n    }\n\n    @CallSuper\n    open fun onViewClicked() {\n        onViewClicked?.invoke()\n    }\n\n    open fun onPageSelected(forward: Boolean) {\n        with(pageView as? SubsamplingScaleImageView) {\n            if (this == null) return\n            if (isReady) {\n                landscapeZoom(forward)\n            } else {\n                setOnImageEventListener(\n                    object : SubsamplingScaleImageView.DefaultOnImageEventListener() {\n                        override fun onReady() {\n                            setupZoom(config)\n                            landscapeZoom(forward)\n                            this@ReaderPageImageView.onImageLoaded()\n                        }\n\n                        override fun onImageLoadError(e: Exception) {\n                            onImageLoadError()\n                        }\n                    },\n                )\n            }\n        }\n    }\n\n    private fun SubsamplingScaleImageView.landscapeZoom(forward: Boolean) {\n        if (config != null &&\n            config!!.landscapeZoom &&\n            config!!.minimumScaleType == SCALE_TYPE_CENTER_INSIDE &&\n            sWidth > sHeight &&\n            scale == minScale\n        ) {\n            handler?.postDelayed(500) {\n                val point = when (config!!.zoomStartPosition) {\n                    ZoomStartPosition.LEFT -> if (forward) {\n                        PointF(0F, 0F)\n                    } else {\n                        PointF(\n                            sWidth.toFloat(),\n                            0F,\n                        )\n                    }\n                    ZoomStartPosition.RIGHT -> if (forward) {\n                        PointF(sWidth.toFloat(), 0F)\n                    } else {\n                        PointF(\n                            0F,\n                            0F,\n                        )\n                    }\n                    ZoomStartPosition.CENTER -> center\n                }\n\n                val targetScale = height.toFloat() / sHeight.toFloat()\n                animateScaleAndCenter(targetScale, point)!!\n                    .withDuration(500)\n                    .withEasing(EASE_IN_OUT_QUAD)\n                    .withInterruptible(true)\n                    .start()\n            }\n        }\n    }\n\n    fun setImage(drawable: Drawable, config: Config) {\n        this.config = config\n        if (drawable is Animatable) {\n            prepareAnimatedImageView()\n            setAnimatedImage(drawable, config)\n        } else {\n            prepareNonAnimatedImageView()\n            setNonAnimatedImage(drawable, config)\n        }\n    }\n\n    fun setImage(source: BufferedSource, isAnimated: Boolean, config: Config) {\n        this.config = config\n        if (isAnimated) {\n            prepareAnimatedImageView()\n            setAnimatedImage(source, config)\n        } else {\n            prepareNonAnimatedImageView()\n            setNonAnimatedImage(source, config)\n        }\n    }\n\n    fun recycle() = pageView?.let {\n        when (it) {\n            is SubsamplingScaleImageView -> it.recycle()\n            is AppCompatImageView -> it.dispose()\n        }\n        it.isVisible = false\n    }\n\n    /**\n     * Check if the image can be panned to the left\n     */\n    fun canPanLeft(): Boolean = canPan { it.left }\n\n    /**\n     * Check if the image can be panned to the right\n     */\n    fun canPanRight(): Boolean = canPan { it.right }\n\n    /**\n     * Check whether the image can be panned.\n     * @param fn a function that returns the direction to check for\n     */\n    private fun canPan(fn: (RectF) -> Float): Boolean {\n        (pageView as? SubsamplingScaleImageView)?.let { view ->\n            RectF().let {\n                view.getPanRemaining(it)\n                return fn(it) > 1\n            }\n        }\n        return false\n    }\n\n    /**\n     * Pans the image to the left by a screen's width worth.\n     */\n    fun panLeft() {\n        pan { center, view -> center.also { it.x -= view.width / view.scale } }\n    }\n\n    /**\n     * Pans the image to the right by a screen's width worth.\n     */\n    fun panRight() {\n        pan { center, view -> center.also { it.x += view.width / view.scale } }\n    }\n\n    /**\n     * Pans the image.\n     * @param fn a function that computes the new center of the image\n     */\n    private fun pan(fn: (PointF, SubsamplingScaleImageView) -> PointF) {\n        (pageView as? SubsamplingScaleImageView)?.let { view ->\n\n            val target = fn(view.center ?: return, view)\n            view.animateCenter(target)!!\n                .withEasing(EASE_OUT_QUAD)\n                .withDuration(250)\n                .withInterruptible(true)\n                .start()\n        }\n    }\n\n    private fun prepareNonAnimatedImageView() {\n        if (pageView is SubsamplingScaleImageView) return\n        removeView(pageView)\n\n        pageView = if (isWebtoon) {\n            WebtoonSubsamplingImageView(context)\n        } else {\n            SubsamplingScaleImageView(context)\n        }.apply {\n            setMaxTileSize(ImageUtil.hardwareBitmapThreshold)\n            setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER)\n            setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE)\n            setMinimumTileDpi(180)\n            setOnStateChangedListener(\n                object : SubsamplingScaleImageView.OnStateChangedListener {\n                    override fun onScaleChanged(newScale: Float, origin: Int) {\n                        this@ReaderPageImageView.onScaleChanged(newScale)\n                    }\n\n                    override fun onCenterChanged(newCenter: PointF?, origin: Int) {\n                        // Not used\n                    }\n                },\n            )\n            setOnClickListener { this@ReaderPageImageView.onViewClicked() }\n        }\n        addView(pageView, MATCH_PARENT, MATCH_PARENT)\n    }\n\n    private fun SubsamplingScaleImageView.setupZoom(config: Config?) {\n        // 5x zoom\n        maxScale = scale * MAX_ZOOM_SCALE\n        setDoubleTapZoomScale(scale * 2)\n\n        when (config?.zoomStartPosition) {\n            ZoomStartPosition.LEFT -> setScaleAndCenter(scale, PointF(0F, 0F))\n            ZoomStartPosition.RIGHT -> setScaleAndCenter(scale, PointF(sWidth.toFloat(), 0F))\n            ZoomStartPosition.CENTER -> setScaleAndCenter(scale, center)\n            null -> {}\n        }\n    }\n\n    private fun setNonAnimatedImage(\n        data: Any,\n        config: Config,\n    ) = (pageView as? SubsamplingScaleImageView)?.apply {\n        setDoubleTapZoomDuration(config.zoomDuration.getSystemScaledDuration())\n        setMinimumScaleType(config.minimumScaleType)\n        setMinimumDpi(1) // Just so that very small image will be fit for initial load\n        setCropBorders(config.cropBorders)\n        setOnImageEventListener(\n            object : SubsamplingScaleImageView.DefaultOnImageEventListener() {\n                override fun onReady() {\n                    setupZoom(config)\n                    if (isVisibleOnScreen()) landscapeZoom(true)\n                    this@ReaderPageImageView.onImageLoaded()\n                }\n\n                override fun onImageLoadError(e: Exception) {\n                    this@ReaderPageImageView.onImageLoadError()\n                }\n            },\n        )\n\n        when (data) {\n            is BitmapDrawable -> {\n                setImage(ImageSource.bitmap(data.bitmap))\n                isVisible = true\n            }\n            is BufferedSource -> {\n                if (!isWebtoon || alwaysDecodeLongStripWithSSIV) {\n                    setHardwareConfig(ImageUtil.canUseHardwareBitmap(data))\n                    setImage(ImageSource.inputStream(data.inputStream()))\n                    isVisible = true\n                    return@apply\n                }\n\n                ImageRequest.Builder(context)\n                    .data(data)\n                    .memoryCachePolicy(CachePolicy.DISABLED)\n                    .diskCachePolicy(CachePolicy.DISABLED)\n                    .target(\n                        onSuccess = { result ->\n                            val image = result as BitmapImage\n                            setImage(ImageSource.bitmap(image.bitmap))\n                            isVisible = true\n                        },\n                        onError = {\n                            onImageLoadError()\n                        },\n                    )\n                    .size(ViewSizeResolver(this@ReaderPageImageView))\n                    .precision(Precision.INEXACT)\n                    .cropBorders(config.cropBorders)\n                    .customDecoder(true)\n                    .crossfade(false)\n                    .build()\n                    .let(context.imageLoader::enqueue)\n            }\n            else -> {\n                throw IllegalArgumentException(\"Not implemented for class ${data::class.simpleName}\")\n            }\n        }\n    }\n\n    private fun prepareAnimatedImageView() {\n        if (pageView is AppCompatImageView) return\n        removeView(pageView)\n\n        pageView = if (isWebtoon) {\n            AppCompatImageView(context)\n        } else {\n            PhotoView(context)\n        }.apply {\n            adjustViewBounds = true\n\n            if (this is PhotoView) {\n                setScaleLevels(1F, 2F, MAX_ZOOM_SCALE)\n                // Force 2 scale levels on double tap\n                setOnDoubleTapListener(\n                    object : GestureDetector.SimpleOnGestureListener() {\n                        override fun onDoubleTap(e: MotionEvent): Boolean {\n                            if (scale > 1F) {\n                                setScale(1F, e.x, e.y, true)\n                            } else {\n                                setScale(2F, e.x, e.y, true)\n                            }\n                            return true\n                        }\n\n                        override fun onSingleTapConfirmed(e: MotionEvent): Boolean {\n                            this@ReaderPageImageView.onViewClicked()\n                            return super.onSingleTapConfirmed(e)\n                        }\n                    },\n                )\n                setOnScaleChangeListener { _, _, _ ->\n                    this@ReaderPageImageView.onScaleChanged(scale)\n                }\n            }\n        }\n        addView(pageView, MATCH_PARENT, MATCH_PARENT)\n    }\n\n    private fun setAnimatedImage(\n        data: Any,\n        config: Config,\n    ) = (pageView as? AppCompatImageView)?.apply {\n        if (this is PhotoView) {\n            setZoomTransitionDuration(config.zoomDuration.getSystemScaledDuration())\n        }\n\n        val request = ImageRequest.Builder(context)\n            .data(data)\n            .memoryCachePolicy(CachePolicy.DISABLED)\n            .diskCachePolicy(CachePolicy.DISABLED)\n            .target(\n                onSuccess = { result ->\n                    val drawable = result.asDrawable(context.resources)\n                    setImageDrawable(drawable)\n                    (drawable as? Animatable)?.start()\n                    isVisible = true\n                    this@ReaderPageImageView.onImageLoaded()\n                },\n                onError = {\n                    this@ReaderPageImageView.onImageLoadError()\n                },\n            )\n            .crossfade(false)\n            .build()\n        context.imageLoader.enqueue(request)\n    }\n\n    private fun Int.getSystemScaledDuration(): Int {\n        return (this * context.animatorDurationScale).toInt().coerceAtLeast(1)\n    }\n\n    /**\n     * All of the config except [zoomDuration] will only be used for non-animated image.\n     */\n    data class Config(\n        val zoomDuration: Int,\n        val minimumScaleType: Int = SCALE_TYPE_CENTER_INSIDE,\n        val cropBorders: Boolean = false,\n        val zoomStartPosition: ZoomStartPosition = ZoomStartPosition.CENTER,\n        val landscapeZoom: Boolean = false,\n    )\n\n    enum class ZoomStartPosition {\n        LEFT,\n        CENTER,\n        RIGHT,\n    }\n}\n\nprivate const val MAX_ZOOM_SCALE = 5F\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderProgressIndicator.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.Gravity\nimport android.view.ViewGroup.LayoutParams.WRAP_CONTENT\nimport android.widget.FrameLayout\nimport androidx.annotation.IntRange\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableFloatStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.AbstractComposeView\nimport androidx.compose.ui.platform.ViewCompositionStrategy\nimport androidx.core.view.isVisible\nimport com.google.android.material.progressindicator.CircularProgressIndicator\nimport eu.kanade.presentation.theme.TachiyomiTheme\nimport tachiyomi.presentation.core.components.CombinedCircularProgressIndicator\n\n/**\n * A wrapper for [CircularProgressIndicator] that always rotates.\n *\n * By always rotating we give the feedback to the user that the application isn't 'stuck'.\n */\nclass ReaderProgressIndicator @JvmOverloads constructor(\n    context: Context,\n    attrs: AttributeSet? = null,\n    defStyleAttr: Int = 0,\n) : AbstractComposeView(context, attrs, defStyleAttr) {\n\n    init {\n        layoutParams = FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER)\n        setViewCompositionStrategy(\n            ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool,\n        )\n    }\n\n    private var progress by mutableFloatStateOf(0f)\n\n    @Composable\n    override fun Content() {\n        TachiyomiTheme {\n            CombinedCircularProgressIndicator(progress = { progress })\n        }\n    }\n\n    fun show() {\n        isVisible = true\n    }\n\n    fun hide() {\n        isVisible = false\n    }\n\n    fun setProgress(@IntRange(from = 0, to = 100) progress: Int) {\n        this.progress = progress / 100f\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.platform.AbstractComposeView\nimport eu.kanade.presentation.reader.ChapterTransition\nimport eu.kanade.presentation.theme.TachiyomiTheme\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.source.local.entries.manga.isLocal\n\nclass ReaderTransitionView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :\n    AbstractComposeView(context, attrs) {\n\n    private var data: Data? by mutableStateOf(null)\n\n    init {\n        layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)\n    }\n\n    fun bind(transition: ChapterTransition, downloadManager: MangaDownloadManager, manga: Manga?) {\n        data = if (manga != null) {\n            Data(\n                transition = transition,\n                currChapterDownloaded = transition.from.pageLoader?.isLocal == true,\n                goingToChapterDownloaded = manga.isLocal() ||\n                    transition.to?.chapter?.let { goingToChapter ->\n                        downloadManager.isChapterDownloaded(\n                            chapterName = goingToChapter.name,\n                            chapterScanlator = goingToChapter.scanlator,\n                            mangaTitle = manga.title,\n                            sourceId = manga.source,\n                            skipCache = true,\n                        )\n                    } ?: false,\n            )\n        } else {\n            null\n        }\n    }\n\n    @Composable\n    override fun Content() {\n        data?.let {\n            TachiyomiTheme {\n                CompositionLocalProvider(\n                    LocalTextStyle provides MaterialTheme.typography.bodySmall,\n                    LocalContentColor provides MaterialTheme.colorScheme.onBackground,\n                ) {\n                    ChapterTransition(\n                        transition = it.transition,\n                        currChapterDownloaded = it.currChapterDownloaded,\n                        goingToChapterDownloaded = it.goingToChapterDownloaded,\n                    )\n                }\n            }\n        }\n    }\n    private data class Data(\n        val transition: ChapterTransition,\n        val currChapterDownloaded: Boolean,\n        val goingToChapterDownloaded: Boolean,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/Viewer.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.view.KeyEvent\nimport android.view.MotionEvent\nimport android.view.View\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\n\n/**\n * Interface for implementing a viewer.\n */\ninterface Viewer {\n\n    /**\n     * Returns the view this viewer uses.\n     */\n    fun getView(): View\n\n    /**\n     * Destroys this viewer. Called when leaving the reader or swapping viewers.\n     */\n    fun destroy() {}\n\n    /**\n     * Tells this viewer to set the given [chapters] as active.\n     */\n    fun setChapters(chapters: ViewerChapters)\n\n    /**\n     * Tells this viewer to move to the given [page].\n     */\n    fun moveToPage(page: ReaderPage)\n\n    /**\n     * Called from the containing activity when a key [event] is received. It should return true\n     * if the event was handled, false otherwise.\n     */\n    fun handleKeyEvent(event: KeyEvent): Boolean\n\n    /**\n     * Called from the containing activity when a generic motion [event] is received. It should\n     * return true if the event was handled, false otherwise.\n     */\n    fun handleGenericMotionEvent(event: MotionEvent): Boolean\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport tachiyomi.core.common.preference.Preference\n\n/**\n * Common configuration for all viewers.\n */\nabstract class ViewerConfig(readerPreferences: ReaderPreferences, private val scope: CoroutineScope) {\n\n    var imagePropertyChangedListener: (() -> Unit)? = null\n\n    var navigationModeChangedListener: (() -> Unit)? = null\n\n    var tappingInverted = ReaderPreferences.TappingInvertMode.NONE\n    var longTapEnabled = true\n    var usePageTransitions = false\n    var doubleTapAnimDuration = 500\n    var volumeKeysEnabled = false\n    var volumeKeysInverted = false\n    var alwaysShowChapterTransition = true\n    var navigationMode = 0\n        protected set\n\n    var forceNavigationOverlay = false\n\n    var navigationOverlayOnStart = false\n\n    var dualPageSplit = false\n        protected set\n\n    var dualPageInvert = false\n        protected set\n\n    var dualPageRotateToFit = false\n        protected set\n\n    var dualPageRotateToFitInvert = false\n        protected set\n\n    abstract var navigator: ViewerNavigation\n        protected set\n\n    init {\n        readerPreferences.readWithLongTap()\n            .register({ longTapEnabled = it })\n\n        readerPreferences.pageTransitions()\n            .register({ usePageTransitions = it })\n\n        readerPreferences.doubleTapAnimSpeed()\n            .register({ doubleTapAnimDuration = it })\n\n        readerPreferences.readWithVolumeKeys()\n            .register({ volumeKeysEnabled = it })\n\n        readerPreferences.readWithVolumeKeysInverted()\n            .register({ volumeKeysInverted = it })\n\n        readerPreferences.alwaysShowChapterTransition()\n            .register({ alwaysShowChapterTransition = it })\n\n        forceNavigationOverlay = readerPreferences.showNavigationOverlayNewUser().get()\n        if (forceNavigationOverlay) {\n            readerPreferences.showNavigationOverlayNewUser().set(false)\n        }\n\n        readerPreferences.showNavigationOverlayOnStart()\n            .register({ navigationOverlayOnStart = it })\n    }\n\n    protected abstract fun defaultNavigation(): ViewerNavigation\n\n    abstract fun updateNavigation(navigationMode: Int)\n\n    fun <T> Preference<T>.register(\n        valueAssignment: (T) -> Unit,\n        onChanged: (T) -> Unit = {},\n    ) {\n        changes()\n            .onEach { valueAssignment(it) }\n            .distinctUntilChanged()\n            .onEach { onChanged(it) }\n            .launchIn(scope)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerNavigation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer\n\nimport android.graphics.Color\nimport android.graphics.PointF\nimport android.graphics.RectF\nimport dev.icerock.moko.resources.StringResource\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.util.lang.invert\nimport tachiyomi.i18n.MR\n\nabstract class ViewerNavigation {\n\n    sealed class NavigationRegion(val nameRes: StringResource, val color: Int) {\n        data object MENU : NavigationRegion(\n            MR.strings.action_menu,\n            Color.argb(0xCC, 0x95, 0x81, 0x8D),\n        )\n        data object PREV : NavigationRegion(\n            MR.strings.nav_zone_prev,\n            Color.argb(0xCC, 0xFF, 0x77, 0x33),\n        )\n        data object NEXT : NavigationRegion(\n            MR.strings.nav_zone_next,\n            Color.argb(0xCC, 0x84, 0xE2, 0x96),\n        )\n        data object LEFT : NavigationRegion(\n            MR.strings.nav_zone_left,\n            Color.argb(0xCC, 0x7D, 0x11, 0x28),\n        )\n        data object RIGHT : NavigationRegion(\n            MR.strings.nav_zone_right,\n            Color.argb(0xCC, 0xA6, 0xCF, 0xD5),\n        )\n    }\n\n    data class Region(\n        val rectF: RectF,\n        val type: NavigationRegion,\n    ) {\n        fun invert(invertMode: ReaderPreferences.TappingInvertMode): Region {\n            if (invertMode == ReaderPreferences.TappingInvertMode.NONE) return this\n            return this.copy(\n                rectF = this.rectF.invert(invertMode),\n            )\n        }\n    }\n\n    private var constantMenuRegion: RectF = RectF(0f, 0f, 1f, 0.05f)\n\n    var invertMode: ReaderPreferences.TappingInvertMode = ReaderPreferences.TappingInvertMode.NONE\n\n    protected abstract var regionList: List<Region>\n\n    /** Returns regions with applied inversion. */\n    fun getRegions(): List<Region> {\n        return regionList.map { it.invert(invertMode) }\n    }\n\n    fun getAction(pos: PointF): NavigationRegion {\n        val x = pos.x\n        val y = pos.y\n        val region = getRegions().find { it.rectF.contains(x, y) }\n        return when {\n            region != null -> region.type\n            constantMenuRegion.contains(x, y) -> NavigationRegion.MENU\n            else -> NavigationRegion.MENU\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/DisabledNavigation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.navigation\n\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\n\n/**\n * Visualization of default state without any inversion\n * +---+---+---+\n * | M | M | M |   P: Previous\n * +---+---+---+\n * | M | M | M |   M: Menu\n * +---+---+---+\n * | M | M | M |   N: Next\n * +---+---+---+\n*/\nclass DisabledNavigation : ViewerNavigation() {\n\n    override var regionList: List<Region> = emptyList()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/EdgeNavigation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.navigation\n\nimport android.graphics.RectF\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\n\n/**\n * Visualization of default state without any inversion\n * +---+---+---+\n * | N | N | N |   P: Previous\n * +---+---+---+\n * | N | M | N |   M: Menu\n * +---+---+---+\n * | N | P | N |   N: Next\n * +---+---+---+\n*/\nclass EdgeNavigation : ViewerNavigation() {\n\n    override var regionList: List<Region> = listOf(\n        Region(\n            rectF = RectF(0f, 0f, 0.33f, 1f),\n            type = NavigationRegion.NEXT,\n        ),\n        Region(\n            rectF = RectF(0.33f, 0.66f, 0.66f, 1f),\n            type = NavigationRegion.PREV,\n        ),\n        Region(\n            rectF = RectF(0.66f, 0f, 1f, 1f),\n            type = NavigationRegion.NEXT,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/KindlishNavigation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.navigation\n\nimport android.graphics.RectF\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\n\n/**\n * Visualization of default state without any inversion\n * +---+---+---+\n * | M | M | M |   P: Previous\n * +---+---+---+\n * | P | N | N |   M: Menu\n * +---+---+---+\n * | P | N | N |   N: Next\n * +---+---+---+\n*/\nclass KindlishNavigation : ViewerNavigation() {\n\n    override var regionList: List<Region> = listOf(\n        Region(\n            rectF = RectF(0.33f, 0.33f, 1f, 1f),\n            type = NavigationRegion.NEXT,\n        ),\n        Region(\n            rectF = RectF(0f, 0.33f, 0.33f, 1f),\n            type = NavigationRegion.PREV,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/LNavigation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.navigation\n\nimport android.graphics.RectF\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\n\n/**\n * Visualization of default state without any inversion\n * +---+---+---+\n * | P | P | P |   P: Previous\n * +---+---+---+\n * | P | M | N |   M: Menu\n * +---+---+---+\n * | N | N | N |   N: Next\n * +---+---+---+\n */\nopen class LNavigation : ViewerNavigation() {\n\n    override var regionList: List<Region> = listOf(\n        Region(\n            rectF = RectF(0f, 0.33f, 0.33f, 0.66f),\n            type = NavigationRegion.PREV,\n        ),\n        Region(\n            rectF = RectF(0f, 0f, 1f, 0.33f),\n            type = NavigationRegion.PREV,\n        ),\n        Region(\n            rectF = RectF(0.66f, 0.33f, 1f, 0.66f),\n            type = NavigationRegion.NEXT,\n        ),\n        Region(\n            rectF = RectF(0f, 0.66f, 1f, 1f),\n            type = NavigationRegion.NEXT,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/navigation/RightAndLeftNavigation.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.navigation\n\nimport android.graphics.RectF\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\n\n/**\n * Visualization of default state without any inversion\n * +---+---+---+\n * | N | M | P |   P: Move Right\n * +---+---+---+\n * | N | M | P |   M: Menu\n * +---+---+---+\n * | N | M | P |   N: Move Left\n * +---+---+---+\n */\nclass RightAndLeftNavigation : ViewerNavigation() {\n\n    override var regionList: List<Region> = listOf(\n        Region(\n            rectF = RectF(0f, 0f, 0.33f, 1f),\n            type = NavigationRegion.LEFT,\n        ),\n        Region(\n            rectF = RectF(0.66f, 0f, 1f, 1f),\n            type = NavigationRegion.RIGHT,\n        ),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/Pager.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport android.content.Context\nimport android.view.HapticFeedbackConstants\nimport android.view.KeyEvent\nimport android.view.MotionEvent\nimport androidx.viewpager.widget.DirectionalViewPager\nimport eu.kanade.tachiyomi.ui.reader.viewer.GestureDetectorWithLongTap\n\n/**\n * Pager implementation that listens for tap and long tap and allows temporarily disabling touch\n * events in order to work with child views that need to disable touch events on this parent. The\n * pager can also be declared to be vertical by creating it with [isHorizontal] to false.\n */\nopen class Pager(\n    context: Context,\n    isHorizontal: Boolean = true,\n) : DirectionalViewPager(context, isHorizontal) {\n\n    /**\n     * Tap listener function to execute when a tap is detected.\n     */\n    var tapListener: ((MotionEvent) -> Unit)? = null\n\n    /**\n     * Long tap listener function to execute when a long tap is detected.\n     */\n    var longTapListener: ((MotionEvent) -> Boolean)? = null\n\n    /**\n     * Gesture listener that implements tap and long tap events.\n     */\n    private val gestureListener = object : GestureDetectorWithLongTap.Listener() {\n        override fun onSingleTapConfirmed(ev: MotionEvent): Boolean {\n            tapListener?.invoke(ev)\n            return true\n        }\n\n        override fun onLongTapConfirmed(ev: MotionEvent) {\n            val listener = longTapListener\n            if (listener != null && listener.invoke(ev)) {\n                performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)\n            }\n        }\n    }\n\n    /**\n     * Gesture detector which handles motion events.\n     */\n    private val gestureDetector = GestureDetectorWithLongTap(context, gestureListener)\n\n    /**\n     * Whether the gesture detector is currently enabled.\n     */\n    private var isGestureDetectorEnabled = true\n\n    /**\n     * Dispatches a touch event.\n     */\n    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {\n        val handled = super.dispatchTouchEvent(ev)\n        if (isGestureDetectorEnabled) {\n            gestureDetector.onTouchEvent(ev)\n        }\n        return handled\n    }\n\n    /**\n     * Whether the given [ev] should be intercepted. Only used to prevent crashes when child\n     * views manipulate [requestDisallowInterceptTouchEvent].\n     */\n    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {\n        return try {\n            super.onInterceptTouchEvent(ev)\n        } catch (e: IllegalArgumentException) {\n            false\n        }\n    }\n\n    /**\n     * Handles a touch event. Only used to prevent crashes when child views manipulate\n     * [requestDisallowInterceptTouchEvent].\n     */\n    override fun onTouchEvent(ev: MotionEvent): Boolean {\n        return try {\n            super.onTouchEvent(ev)\n        } catch (e: NullPointerException) {\n            false\n        } catch (e: IndexOutOfBoundsException) {\n            false\n        } catch (e: IllegalArgumentException) {\n            false\n        }\n    }\n\n    /**\n     * Executes the given key event when this pager has focus. Just do nothing because the reader\n     * already dispatches key events to the viewer and has more control than this method.\n     */\n    override fun executeKeyEvent(event: KeyEvent): Boolean {\n        // Disable viewpager's default key event handling\n        return false\n    }\n\n    /**\n     * Enables or disables the gesture detector.\n     */\n    fun setGestureDetectorEnabled(enabled: Boolean) {\n        isGestureDetectorEnabled = enabled\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.EdgeNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.KindlishNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.LNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.RightAndLeftNavigation\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Configuration used by pager viewers.\n */\nclass PagerConfig(\n    private val viewer: PagerViewer,\n    scope: CoroutineScope,\n    readerPreferences: ReaderPreferences = Injekt.get(),\n) : ViewerConfig(readerPreferences, scope) {\n\n    var theme = readerPreferences.readerTheme().get()\n        private set\n\n    var automaticBackground = false\n        private set\n\n    var dualPageSplitChangedListener: ((Boolean) -> Unit)? = null\n\n    var imageScaleType = 1\n        private set\n\n    var imageZoomType = ReaderPageImageView.ZoomStartPosition.LEFT\n        private set\n\n    var imageCropBorders = false\n        private set\n\n    var navigateToPan = false\n        private set\n\n    var landscapeZoom = false\n        private set\n\n    init {\n        readerPreferences.readerTheme()\n            .register(\n                {\n                    theme = it\n                    automaticBackground = it == 3\n                },\n                { imagePropertyChangedListener?.invoke() },\n            )\n\n        readerPreferences.imageScaleType()\n            .register({ imageScaleType = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.zoomStart()\n            .register({ zoomTypeFromPreference(it) }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.cropBorders()\n            .register({ imageCropBorders = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.navigateToPan()\n            .register({ navigateToPan = it })\n\n        readerPreferences.landscapeZoom()\n            .register({ landscapeZoom = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.navigationModePager()\n            .register({ navigationMode = it }, { updateNavigation(navigationMode) })\n\n        readerPreferences.pagerNavInverted()\n            .register({ tappingInverted = it }, { navigator.invertMode = it })\n        readerPreferences.pagerNavInverted().changes()\n            .drop(1)\n            .onEach { navigationModeChangedListener?.invoke() }\n            .launchIn(scope)\n\n        readerPreferences.dualPageSplitPaged()\n            .register(\n                { dualPageSplit = it },\n                {\n                    imagePropertyChangedListener?.invoke()\n                    dualPageSplitChangedListener?.invoke(it)\n                },\n            )\n\n        readerPreferences.dualPageInvertPaged()\n            .register({ dualPageInvert = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.dualPageRotateToFit()\n            .register(\n                { dualPageRotateToFit = it },\n                { imagePropertyChangedListener?.invoke() },\n            )\n\n        readerPreferences.dualPageRotateToFitInvert()\n            .register(\n                { dualPageRotateToFitInvert = it },\n                { imagePropertyChangedListener?.invoke() },\n            )\n    }\n\n    private fun zoomTypeFromPreference(value: Int) {\n        imageZoomType = when (value) {\n            // Auto\n            1 -> when (viewer) {\n                is L2RPagerViewer -> ReaderPageImageView.ZoomStartPosition.LEFT\n                is R2LPagerViewer -> ReaderPageImageView.ZoomStartPosition.RIGHT\n                else -> ReaderPageImageView.ZoomStartPosition.CENTER\n            }\n            // Left\n            2 -> ReaderPageImageView.ZoomStartPosition.LEFT\n            // Right\n            3 -> ReaderPageImageView.ZoomStartPosition.RIGHT\n            // Center\n            else -> ReaderPageImageView.ZoomStartPosition.CENTER\n        }\n    }\n\n    override var navigator: ViewerNavigation = defaultNavigation()\n        set(value) {\n            field = value.also { it.invertMode = this.tappingInverted }\n        }\n\n    override fun defaultNavigation(): ViewerNavigation {\n        return when (viewer) {\n            is VerticalPagerViewer -> LNavigation()\n            else -> RightAndLeftNavigation()\n        }\n    }\n\n    override fun updateNavigation(navigationMode: Int) {\n        navigator = when (navigationMode) {\n            0 -> defaultNavigation()\n            1 -> LNavigation()\n            2 -> KindlishNavigation()\n            3 -> EdgeNavigation()\n            4 -> RightAndLeftNavigation()\n            5 -> DisabledNavigation()\n            else -> defaultNavigation()\n        }\n        navigationModeChangedListener?.invoke()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.view.LayoutInflater\nimport androidx.core.view.isVisible\nimport eu.kanade.tachiyomi.databinding.ReaderErrorBinding\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.ui.reader.model.InsertPage\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator\nimport eu.kanade.tachiyomi.ui.webview.WebViewActivity\nimport eu.kanade.tachiyomi.widget.ViewPagerAdapter\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.supervisorScope\nimport logcat.LogPriority\nimport okio.Buffer\nimport okio.BufferedSource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\n\n/**\n * View of the ViewPager that contains a page of a chapter.\n */\n@SuppressLint(\"ViewConstructor\")\nclass PagerPageHolder(\n    readerThemedContext: Context,\n    val viewer: PagerViewer,\n    val page: ReaderPage,\n) : ReaderPageImageView(readerThemedContext), ViewPagerAdapter.PositionableView {\n\n    /**\n     * Item that identifies this view. Needed by the adapter to not recreate views.\n     */\n    override val item\n        get() = page\n\n    /**\n     * Loading progress bar to indicate the current progress.\n     */\n    private var progressIndicator: ReaderProgressIndicator? = null // = ReaderProgressIndicator(readerThemedContext)\n\n    /**\n     * Error layout to show when the image fails to load.\n     */\n    private var errorLayout: ReaderErrorBinding? = null\n\n    private val scope = MainScope()\n\n    /**\n     * Job for loading the page and processing changes to the page's status.\n     */\n    private var loadJob: Job? = null\n\n    init {\n        loadJob = scope.launch { loadPageAndProcessStatus() }\n    }\n\n    /**\n     * Called when this view is detached from the window. Unsubscribes any active subscription.\n     */\n    @SuppressLint(\"ClickableViewAccessibility\")\n    override fun onDetachedFromWindow() {\n        super.onDetachedFromWindow()\n        loadJob?.cancel()\n        loadJob = null\n    }\n\n    private fun initProgressIndicator() {\n        if (progressIndicator == null) {\n            progressIndicator = ReaderProgressIndicator(context)\n            addView(progressIndicator)\n        }\n    }\n\n    /**\n     * Loads the page and processes changes to the page's status.\n     *\n     * Returns immediately if the page has no PageLoader.\n     * Otherwise, this function does not return. It will continue to process status changes until\n     * the Job is cancelled.\n     */\n    private suspend fun loadPageAndProcessStatus() {\n        val loader = page.chapter.pageLoader ?: return\n\n        supervisorScope {\n            launchIO {\n                loader.loadPage(page)\n            }\n            page.statusFlow.collectLatest { state ->\n                when (state) {\n                    Page.State.QUEUE -> setQueued()\n                    Page.State.LOAD_PAGE -> setLoading()\n                    Page.State.DOWNLOAD_IMAGE -> {\n                        setDownloading()\n                        page.progressFlow.collectLatest { value ->\n                            progressIndicator?.setProgress(value)\n                        }\n                    }\n                    Page.State.READY -> setImage()\n                    Page.State.ERROR -> setError()\n                }\n            }\n        }\n    }\n\n    /**\n     * Called when the page is queued.\n     */\n    private fun setQueued() {\n        initProgressIndicator()\n        progressIndicator?.show()\n        removeErrorLayout()\n    }\n\n    /**\n     * Called when the page is loading.\n     */\n    private fun setLoading() {\n        initProgressIndicator()\n        progressIndicator?.show()\n        removeErrorLayout()\n    }\n\n    /**\n     * Called when the page is downloading.\n     */\n    private fun setDownloading() {\n        initProgressIndicator()\n        progressIndicator?.show()\n        removeErrorLayout()\n    }\n\n    /**\n     * Called when the page is ready.\n     */\n    private suspend fun setImage() {\n        progressIndicator?.setProgress(0)\n\n        val streamFn = page.stream ?: return\n\n        try {\n            val (source, isAnimated, background) = withIOContext {\n                val source = streamFn().use { process(item, Buffer().readFrom(it)) }\n                val isAnimated = ImageUtil.isAnimatedAndSupported(source)\n                val background = if (!isAnimated && viewer.config.automaticBackground) {\n                    ImageUtil.chooseBackground(context, source.peek().inputStream())\n                } else {\n                    null\n                }\n                Triple(source, isAnimated, background)\n            }\n            withUIContext {\n                setImage(\n                    source,\n                    isAnimated,\n                    Config(\n                        zoomDuration = viewer.config.doubleTapAnimDuration,\n                        minimumScaleType = viewer.config.imageScaleType,\n                        cropBorders = viewer.config.imageCropBorders,\n                        zoomStartPosition = viewer.config.imageZoomType,\n                        landscapeZoom = viewer.config.landscapeZoom,\n                    ),\n                )\n                if (!isAnimated) {\n                    pageBackground = background\n                }\n                removeErrorLayout()\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e)\n            withUIContext {\n                setError()\n            }\n        }\n    }\n\n    private fun process(page: ReaderPage, imageSource: BufferedSource): BufferedSource {\n        if (viewer.config.dualPageRotateToFit) {\n            return rotateDualPage(imageSource)\n        }\n\n        if (!viewer.config.dualPageSplit) {\n            return imageSource\n        }\n\n        if (page is InsertPage) {\n            return splitInHalf(imageSource)\n        }\n\n        val isDoublePage = ImageUtil.isWideImage(imageSource)\n        if (!isDoublePage) {\n            return imageSource\n        }\n\n        onPageSplit(page)\n\n        return splitInHalf(imageSource)\n    }\n\n    private fun rotateDualPage(imageSource: BufferedSource): BufferedSource {\n        val isDoublePage = ImageUtil.isWideImage(imageSource)\n        return if (isDoublePage) {\n            val rotation = if (viewer.config.dualPageRotateToFitInvert) -90f else 90f\n            ImageUtil.rotateImage(imageSource, rotation)\n        } else {\n            imageSource\n        }\n    }\n\n    private fun splitInHalf(imageSource: BufferedSource): BufferedSource {\n        var side = when {\n            viewer is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.RIGHT\n            viewer !is L2RPagerViewer && page is InsertPage -> ImageUtil.Side.LEFT\n            viewer is L2RPagerViewer && page !is InsertPage -> ImageUtil.Side.LEFT\n            viewer !is L2RPagerViewer && page !is InsertPage -> ImageUtil.Side.RIGHT\n            else -> error(\"We should choose a side!\")\n        }\n\n        if (viewer.config.dualPageInvert) {\n            side = when (side) {\n                ImageUtil.Side.RIGHT -> ImageUtil.Side.LEFT\n                ImageUtil.Side.LEFT -> ImageUtil.Side.RIGHT\n            }\n        }\n\n        return ImageUtil.splitInHalf(imageSource, side)\n    }\n\n    private fun onPageSplit(page: ReaderPage) {\n        val newPage = InsertPage(page)\n        viewer.onPageSplit(page, newPage)\n    }\n\n    /**\n     * Called when the page has an error.\n     */\n    private fun setError() {\n        progressIndicator?.hide()\n        showErrorLayout()\n    }\n\n    override fun onImageLoaded() {\n        super.onImageLoaded()\n        progressIndicator?.hide()\n    }\n\n    /**\n     * Called when an image fails to decode.\n     */\n    override fun onImageLoadError() {\n        super.onImageLoadError()\n        setError()\n    }\n\n    /**\n     * Called when an image is zoomed in/out.\n     */\n    override fun onScaleChanged(newScale: Float) {\n        super.onScaleChanged(newScale)\n        viewer.activity.hideMenu()\n    }\n\n    private fun showErrorLayout(): ReaderErrorBinding {\n        if (errorLayout == null) {\n            errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), this, true)\n            errorLayout?.actionRetry?.viewer = viewer\n            errorLayout?.actionRetry?.setOnClickListener {\n                page.chapter.pageLoader?.retryPage(page)\n            }\n        }\n\n        val imageUrl = page.imageUrl\n        errorLayout?.actionOpenInWebView?.isVisible = imageUrl != null\n        if (imageUrl != null) {\n            if (imageUrl.startsWith(\"http\", true)) {\n                errorLayout?.actionOpenInWebView?.viewer = viewer\n                errorLayout?.actionOpenInWebView?.setOnClickListener {\n                    val intent = WebViewActivity.newIntent(context, imageUrl)\n                    context.startActivity(intent)\n                }\n            }\n        }\n\n        errorLayout?.root?.isVisible = true\n        return errorLayout!!\n    }\n\n    /**\n     * Removes the decode error layout from the holder, if found.\n     */\n    private fun removeErrorLayout() {\n        errorLayout?.root?.isVisible = false\n        errorLayout = null\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.view.Gravity\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport android.view.ViewGroup.LayoutParams.WRAP_CONTENT\nimport android.widget.LinearLayout\nimport androidx.appcompat.widget.AppCompatTextView\nimport com.google.android.material.progressindicator.CircularProgressIndicator\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderButton\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderTransitionView\nimport eu.kanade.tachiyomi.util.system.dpToPx\nimport eu.kanade.tachiyomi.widget.ViewPagerAdapter\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\n\n/**\n * View of the ViewPager that contains a chapter transition.\n */\n@SuppressLint(\"ViewConstructor\")\nclass PagerTransitionHolder(\n    readerThemedContext: Context,\n    val viewer: PagerViewer,\n    val transition: ChapterTransition,\n) : LinearLayout(readerThemedContext), ViewPagerAdapter.PositionableView {\n\n    private val scope = MainScope()\n    private var stateJob: Job? = null\n\n    /**\n     * Item that identifies this view. Needed by the adapter to not recreate views.\n     */\n    override val item: Any\n        get() = transition\n\n    /**\n     * View container of the current status of the transition page. Child views will be added\n     * dynamically.\n     */\n    private var pagesContainer = LinearLayout(context).apply {\n        layoutParams = LayoutParams(MATCH_PARENT, WRAP_CONTENT)\n        orientation = VERTICAL\n        gravity = Gravity.CENTER\n    }\n\n    init {\n        orientation = VERTICAL\n        gravity = Gravity.CENTER\n        val sidePadding = 64.dpToPx\n        setPadding(sidePadding, 0, sidePadding, 0)\n\n        val transitionView = ReaderTransitionView(context)\n        addView(transitionView)\n        addView(pagesContainer)\n\n        transitionView.bind(transition, viewer.downloadManager, viewer.activity.viewModel.manga)\n\n        transition.to?.let(::observeStatus)\n    }\n\n    /**\n     * Called when this view is detached from the window. Unsubscribes any active subscription.\n     */\n    override fun onDetachedFromWindow() {\n        super.onDetachedFromWindow()\n        stateJob?.cancel()\n    }\n\n    /**\n     * Observes the status of the page list of the next/previous chapter. Whenever there's a new\n     * state, the pages container is cleaned up before setting the new state.\n     */\n    private fun observeStatus(chapter: ReaderChapter) {\n        stateJob?.cancel()\n        stateJob = scope.launch {\n            chapter.stateFlow\n                .collectLatest { state ->\n                    pagesContainer.removeAllViews()\n                    when (state) {\n                        is ReaderChapter.State.Loading -> setLoading()\n                        is ReaderChapter.State.Error -> setError(state.error)\n                        is ReaderChapter.State.Wait, is ReaderChapter.State.Loaded -> {\n                            // No additional view is added\n                        }\n                    }\n                }\n        }\n    }\n\n    /**\n     * Sets the loading state on the pages container.\n     */\n    private fun setLoading() {\n        val progress = CircularProgressIndicator(context)\n        progress.isIndeterminate = true\n\n        val textView = AppCompatTextView(context).apply {\n            wrapContent()\n            text = context.stringResource(MR.strings.transition_pages_loading)\n        }\n\n        pagesContainer.addView(progress)\n        pagesContainer.addView(textView)\n    }\n\n    /**\n     * Sets the error state on the pages container.\n     */\n    private fun setError(error: Throwable) {\n        val textView = AppCompatTextView(context).apply {\n            wrapContent()\n            text = context.stringResource(MR.strings.transition_pages_error, error.message ?: \"\")\n        }\n\n        val retryBtn = ReaderButton(context).apply {\n            viewer = this@PagerTransitionHolder.viewer\n            wrapContent()\n            text = context.stringResource(MR.strings.action_retry)\n            setOnClickListener {\n                val toChapter = transition.to\n                if (toChapter != null) {\n                    this@PagerTransitionHolder.viewer.activity.requestPreloadChapter(toChapter)\n                }\n            }\n        }\n\n        pagesContainer.addView(textView)\n        pagesContainer.addView(retryBtn)\n    }\n\n    /**\n     * Extension method to set layout params to wrap content on this view.\n     */\n    private fun View.wrapContent() {\n        layoutParams = ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport android.graphics.PointF\nimport android.view.InputDevice\nimport android.view.KeyEvent\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewGroup.LayoutParams\nimport androidx.core.view.children\nimport androidx.core.view.isGone\nimport androidx.core.view.isVisible\nimport androidx.viewpager.widget.ViewPager\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.InsertPage\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\nimport eu.kanade.tachiyomi.ui.reader.viewer.Viewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation.NavigationRegion\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.cancel\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.injectLazy\nimport kotlin.math.min\n\n/**\n * Implementation of a [Viewer] to display pages with a [ViewPager].\n */\n@Suppress(\"LeakingThis\")\nabstract class PagerViewer(val activity: ReaderActivity) : Viewer {\n\n    val downloadManager: MangaDownloadManager by injectLazy()\n\n    private val scope = MainScope()\n\n    /**\n     * View pager used by this viewer. It's abstract to implement L2R, R2L and vertical pagers on\n     * top of this class.\n     */\n    val pager = createPager()\n\n    /**\n     * Configuration used by the pager, like allow taps, scale mode on images, page transitions...\n     */\n    val config = PagerConfig(this, scope)\n\n    /**\n     * Adapter of the pager.\n     */\n    private val adapter = PagerViewerAdapter(this)\n\n    /**\n     * Currently active item. It can be a chapter page or a chapter transition.\n     */\n    private var currentPage: Any? = null\n\n    /**\n     * Viewer chapters to set when the pager enters idle mode. Otherwise, if the view was settling\n     * or dragging, there'd be a noticeable and annoying jump.\n     */\n    private var awaitingIdleViewerChapters: ViewerChapters? = null\n\n    /**\n     * Whether the view pager is currently in idle mode. It sets the awaiting chapters if setting\n     * this field to true.\n     */\n    private var isIdle = true\n        set(value) {\n            field = value\n            if (value) {\n                awaitingIdleViewerChapters?.let { viewerChapters ->\n                    setChaptersInternal(viewerChapters)\n                    awaitingIdleViewerChapters = null\n                    if (viewerChapters.currChapter.pages?.size == 1) {\n                        adapter.nextTransition?.to?.let(activity::requestPreloadChapter)\n                    }\n                }\n            }\n        }\n\n    init {\n        pager.isVisible = false // Don't layout the pager yet\n        pager.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)\n        pager.isFocusable = false\n        pager.offscreenPageLimit = 1\n        pager.id = R.id.reader_pager\n        pager.adapter = adapter\n        pager.addOnPageChangeListener(\n            object : ViewPager.SimpleOnPageChangeListener() {\n                override fun onPageSelected(position: Int) {\n                    if (!activity.isScrollingThroughPages) {\n                        activity.hideMenu()\n                    }\n                    onPageChange(position)\n                }\n\n                override fun onPageScrollStateChanged(state: Int) {\n                    isIdle = state == ViewPager.SCROLL_STATE_IDLE\n                }\n            },\n        )\n        pager.tapListener = { event ->\n            val viewPosition = IntArray(2)\n            pager.getLocationOnScreen(viewPosition)\n            val viewPositionRelativeToWindow = IntArray(2)\n            pager.getLocationInWindow(viewPositionRelativeToWindow)\n            val pos = PointF(\n                (event.rawX - viewPosition[0] + viewPositionRelativeToWindow[0]) / pager.width,\n                (event.rawY - viewPosition[1] + viewPositionRelativeToWindow[1]) / pager.height,\n            )\n            when (config.navigator.getAction(pos)) {\n                NavigationRegion.MENU -> activity.toggleMenu()\n                NavigationRegion.NEXT -> moveToNext()\n                NavigationRegion.PREV -> moveToPrevious()\n                NavigationRegion.RIGHT -> moveRight()\n                NavigationRegion.LEFT -> moveLeft()\n            }\n        }\n        pager.longTapListener = f@{\n            if (activity.viewModel.state.value.menuVisible || config.longTapEnabled) {\n                val item = adapter.items.getOrNull(pager.currentItem)\n                if (item is ReaderPage) {\n                    activity.onPageLongTap(item)\n                    return@f true\n                }\n            }\n            false\n        }\n\n        config.dualPageSplitChangedListener = { enabled ->\n            if (!enabled) {\n                cleanupPageSplit()\n            }\n        }\n\n        config.imagePropertyChangedListener = {\n            refreshAdapter()\n        }\n\n        config.navigationModeChangedListener = {\n            val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay\n            activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart)\n        }\n    }\n\n    override fun destroy() {\n        super.destroy()\n        scope.cancel()\n    }\n\n    /**\n     * Creates a new ViewPager.\n     */\n    abstract fun createPager(): Pager\n\n    /**\n     * Returns the view this viewer uses.\n     */\n    override fun getView(): View {\n        return pager\n    }\n\n    /**\n     * Returns the PagerPageHolder for the provided page\n     */\n    private fun getPageHolder(page: ReaderPage): PagerPageHolder? =\n        pager.children\n            .filterIsInstance(PagerPageHolder::class.java)\n            .firstOrNull { it.item == page }\n\n    /**\n     * Called when a new page (either a [ReaderPage] or [ChapterTransition]) is marked as active\n     */\n    private fun onPageChange(position: Int) {\n        val page = adapter.items.getOrNull(position)\n        if (page != null && currentPage != page) {\n            val allowPreload = checkAllowPreload(page as? ReaderPage)\n            val forward = when {\n                currentPage is ReaderPage && page is ReaderPage -> {\n                    // if both pages have the same number, it's a split page with an InsertPage\n                    if (page.number == (currentPage as ReaderPage).number) {\n                        // the InsertPage is always the second in the reading direction\n                        page is InsertPage\n                    } else {\n                        page.number > (currentPage as ReaderPage).number\n                    }\n                }\n                currentPage is ChapterTransition.Prev && page is ReaderPage ->\n                    false\n                else -> true\n            }\n            currentPage = page\n            when (page) {\n                is ReaderPage -> onReaderPageSelected(page, allowPreload, forward)\n                is ChapterTransition -> onTransitionSelected(page)\n            }\n        }\n    }\n\n    private fun checkAllowPreload(page: ReaderPage?): Boolean {\n        // Page is transition page - preload allowed\n        page ?: return true\n\n        // Initial opening - preload allowed\n        currentPage ?: return true\n\n        // Allow preload for\n        // 1. Going to next chapter from chapter transition\n        // 2. Going between pages of same chapter\n        // 3. Next chapter page\n        return when (page.chapter) {\n            (currentPage as? ChapterTransition.Next)?.to -> true\n            (currentPage as? ReaderPage)?.chapter -> true\n            adapter.nextTransition?.to -> true\n            else -> false\n        }\n    }\n\n    /**\n     * Called when a [ReaderPage] is marked as active. It notifies the\n     * activity of the change and requests the preload of the next chapter if this is the last page.\n     */\n    private fun onReaderPageSelected(page: ReaderPage, allowPreload: Boolean, forward: Boolean) {\n        val pages = page.chapter.pages ?: return\n        logcat { \"onReaderPageSelected: ${page.number}/${pages.size}\" }\n        activity.onPageSelected(page)\n\n        // Notify holder of page change\n        getPageHolder(page)?.onPageSelected(forward)\n\n        // Skip preload on inserts it causes unwanted page jumping\n        if (page is InsertPage) {\n            return\n        }\n\n        // Preload next chapter once we're within the last 5 pages of the current chapter\n        val inPreloadRange = pages.size - page.number < 5\n        if (inPreloadRange && allowPreload && page.chapter == adapter.currentChapter) {\n            logcat { \"Request preload next chapter because we're at page ${page.number} of ${pages.size}\" }\n            adapter.nextTransition?.to?.let(activity::requestPreloadChapter)\n        }\n    }\n\n    /**\n     * Called when a [ChapterTransition] is marked as active. It request the\n     * preload of the destination chapter of the transition.\n     */\n    private fun onTransitionSelected(transition: ChapterTransition) {\n        logcat { \"onTransitionSelected: $transition\" }\n        val toChapter = transition.to\n        if (toChapter != null) {\n            logcat { \"Request preload destination chapter because we're on the transition\" }\n            activity.requestPreloadChapter(toChapter)\n        } else if (transition is ChapterTransition.Next) {\n            // No more chapters, show menu because the user is probably going to close the reader\n            activity.showMenu()\n        }\n    }\n\n    /**\n     * Tells this viewer to set the given [chapters] as active. If the pager is currently idle,\n     * it sets the chapters immediately, otherwise they are saved and set when it becomes idle.\n     */\n    override fun setChapters(chapters: ViewerChapters) {\n        if (isIdle) {\n            setChaptersInternal(chapters)\n        } else {\n            awaitingIdleViewerChapters = chapters\n        }\n    }\n\n    /**\n     * Sets the active [chapters] on this pager.\n     */\n    private fun setChaptersInternal(chapters: ViewerChapters) {\n        val forceTransition = config.alwaysShowChapterTransition ||\n            adapter.items.getOrNull(\n                pager.currentItem,\n            ) is ChapterTransition\n        adapter.setChapters(chapters, forceTransition)\n\n        // Layout the pager once a chapter is being set\n        if (pager.isGone) {\n            logcat { \"Pager first layout\" }\n            val pages = chapters.currChapter.pages ?: return\n            moveToPage(pages[min(chapters.currChapter.requestedPage, pages.lastIndex)])\n            pager.isVisible = true\n        }\n    }\n\n    /**\n     * Tells this viewer to move to the given [page].\n     */\n    override fun moveToPage(page: ReaderPage) {\n        val position = adapter.items.indexOf(page)\n        if (position != -1) {\n            val currentPosition = pager.currentItem\n            pager.setCurrentItem(position, true)\n            // manually call onPageChange since ViewPager listener is not triggered in this case\n            if (currentPosition == position) {\n                onPageChange(position)\n            }\n        } else {\n            logcat { \"Page $page not found in adapter\" }\n        }\n    }\n\n    /**\n     * Moves to the next page.\n     */\n    open fun moveToNext() {\n        moveRight()\n    }\n\n    /**\n     * Moves to the previous page.\n     */\n    open fun moveToPrevious() {\n        moveLeft()\n    }\n\n    /**\n     * Moves to the page at the right.\n     */\n    protected open fun moveRight() {\n        if (pager.currentItem != adapter.count - 1) {\n            val holder = (currentPage as? ReaderPage)?.let(::getPageHolder)\n            if (holder != null && config.navigateToPan && holder.canPanRight()) {\n                holder.panRight()\n            } else {\n                pager.setCurrentItem(pager.currentItem + 1, config.usePageTransitions)\n            }\n        }\n    }\n\n    /**\n     * Moves to the page at the left.\n     */\n    protected open fun moveLeft() {\n        if (pager.currentItem != 0) {\n            val holder = (currentPage as? ReaderPage)?.let(::getPageHolder)\n            if (holder != null && config.navigateToPan && holder.canPanLeft()) {\n                holder.panLeft()\n            } else {\n                pager.setCurrentItem(pager.currentItem - 1, config.usePageTransitions)\n            }\n        }\n    }\n\n    /**\n     * Moves to the page at the top (or previous).\n     */\n    protected open fun moveUp() {\n        moveToPrevious()\n    }\n\n    /**\n     * Moves to the page at the bottom (or next).\n     */\n    protected open fun moveDown() {\n        moveToNext()\n    }\n\n    /**\n     * Resets the adapter in order to recreate all the views. Used when a image configuration is\n     * changed.\n     */\n    private fun refreshAdapter() {\n        val currentItem = pager.currentItem\n        adapter.refresh()\n        pager.adapter = adapter\n        pager.setCurrentItem(currentItem, false)\n    }\n\n    /**\n     * Called from the containing activity when a key [event] is received. It should return true\n     * if the event was handled, false otherwise.\n     */\n    override fun handleKeyEvent(event: KeyEvent): Boolean {\n        val isUp = event.action == KeyEvent.ACTION_UP\n        val ctrlPressed = event.metaState.and(KeyEvent.META_CTRL_ON) > 0\n\n        when (event.keyCode) {\n            KeyEvent.KEYCODE_VOLUME_DOWN -> {\n                if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) {\n                    return false\n                } else if (isUp) {\n                    if (!config.volumeKeysInverted) moveDown() else moveUp()\n                }\n            }\n            KeyEvent.KEYCODE_VOLUME_UP -> {\n                if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) {\n                    return false\n                } else if (isUp) {\n                    if (!config.volumeKeysInverted) moveUp() else moveDown()\n                }\n            }\n            KeyEvent.KEYCODE_DPAD_RIGHT -> {\n                if (isUp) {\n                    if (ctrlPressed) moveToNext() else moveRight()\n                }\n            }\n            KeyEvent.KEYCODE_DPAD_LEFT -> {\n                if (isUp) {\n                    if (ctrlPressed) moveToPrevious() else moveLeft()\n                }\n            }\n            KeyEvent.KEYCODE_DPAD_DOWN -> if (isUp) moveDown()\n            KeyEvent.KEYCODE_DPAD_UP -> if (isUp) moveUp()\n            KeyEvent.KEYCODE_PAGE_DOWN -> if (isUp) moveDown()\n            KeyEvent.KEYCODE_PAGE_UP -> if (isUp) moveUp()\n            KeyEvent.KEYCODE_MENU -> if (isUp) activity.toggleMenu()\n            else -> return false\n        }\n        return true\n    }\n\n    /**\n     * Called from the containing activity when a generic motion [event] is received. It should\n     * return true if the event was handled, false otherwise.\n     */\n    override fun handleGenericMotionEvent(event: MotionEvent): Boolean {\n        if (event.source and InputDevice.SOURCE_CLASS_POINTER != 0) {\n            when (event.action) {\n                MotionEvent.ACTION_SCROLL -> {\n                    if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f) {\n                        moveDown()\n                    } else {\n                        moveUp()\n                    }\n                    return true\n                }\n            }\n        }\n        return false\n    }\n\n    fun onPageSplit(currentPage: ReaderPage, newPage: InsertPage) {\n        activity.runOnUiThread {\n            // Need to insert on UI thread else images will go blank\n            adapter.onPageSplit(currentPage, newPage)\n        }\n    }\n\n    private fun cleanupPageSplit() {\n        adapter.cleanupPageSplit()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewerAdapter.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport android.view.View\nimport android.view.ViewGroup\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.InsertPage\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\nimport eu.kanade.tachiyomi.ui.reader.viewer.calculateChapterGap\nimport eu.kanade.tachiyomi.util.system.createReaderThemeContext\nimport eu.kanade.tachiyomi.widget.ViewPagerAdapter\nimport tachiyomi.core.common.util.system.logcat\n\n/**\n * Pager adapter used by this [viewer] to where [ViewerChapters] updates are posted.\n */\nclass PagerViewerAdapter(private val viewer: PagerViewer) : ViewPagerAdapter() {\n\n    /**\n     * List of currently set items.\n     */\n    var items: MutableList<Any> = mutableListOf()\n        private set\n\n    /**\n     * Holds preprocessed items so they don't get removed when changing chapter\n     */\n    private var preprocessed: MutableMap<Int, InsertPage> = mutableMapOf()\n\n    var nextTransition: ChapterTransition.Next? = null\n        private set\n\n    var currentChapter: ReaderChapter? = null\n\n    /**\n     * Context that has been wrapped to use the correct theme values based on the\n     * current app theme and reader background color\n     */\n    private var readerThemedContext = viewer.activity.createReaderThemeContext()\n\n    /**\n     * Updates this adapter with the given [chapters]. It handles setting a few pages of the\n     * next/previous chapter to allow seamless transitions and inverting the pages if the viewer\n     * has R2L direction.\n     */\n    fun setChapters(chapters: ViewerChapters, forceTransition: Boolean) {\n        val newItems = mutableListOf<Any>()\n\n        // Forces chapter transition if there is missing chapters\n        val prevHasMissingChapters = calculateChapterGap(chapters.currChapter, chapters.prevChapter) > 0\n        val nextHasMissingChapters = calculateChapterGap(chapters.nextChapter, chapters.currChapter) > 0\n\n        // Add previous chapter pages and transition.\n        if (chapters.prevChapter != null) {\n            // We only need to add the last few pages of the previous chapter, because it'll be\n            // selected as the current chapter when one of those pages is selected.\n            val prevPages = chapters.prevChapter.pages\n            if (prevPages != null) {\n                newItems.addAll(prevPages.takeLast(2))\n            }\n        }\n\n        // Skip transition page if the chapter is loaded & current page is not a transition page\n        if (prevHasMissingChapters || forceTransition || chapters.prevChapter?.state !is ReaderChapter.State.Loaded) {\n            newItems.add(ChapterTransition.Prev(chapters.currChapter, chapters.prevChapter))\n        }\n\n        var insertPageLastPage: InsertPage? = null\n\n        // Add current chapter.\n        val currPages = chapters.currChapter.pages\n        if (currPages != null) {\n            val pages = currPages.toMutableList()\n\n            val lastPage = pages.last()\n\n            // Insert preprocessed pages into current page list\n            preprocessed.keys.sortedDescending()\n                .forEach { key ->\n                    if (lastPage.index == key) {\n                        insertPageLastPage = preprocessed[key]\n                    }\n                    preprocessed[key]?.let { pages.add(key + 1, it) }\n                }\n\n            newItems.addAll(pages)\n        }\n\n        currentChapter = chapters.currChapter\n\n        // Add next chapter transition and pages.\n        nextTransition = ChapterTransition.Next(chapters.currChapter, chapters.nextChapter)\n            .also {\n                if (nextHasMissingChapters ||\n                    forceTransition ||\n                    chapters.nextChapter?.state !is ReaderChapter.State.Loaded\n                ) {\n                    newItems.add(it)\n                }\n            }\n\n        if (chapters.nextChapter != null) {\n            // Add at most two pages, because this chapter will be selected before the user can\n            // swap more pages.\n            val nextPages = chapters.nextChapter.pages\n            if (nextPages != null) {\n                newItems.addAll(nextPages.take(2))\n            }\n        }\n\n        // Resets double-page splits, else insert pages get misplaced\n        items.filterIsInstance<InsertPage>().also { items.removeAll(it) }\n\n        if (viewer is R2LPagerViewer) {\n            newItems.reverse()\n        }\n\n        preprocessed = mutableMapOf()\n        items = newItems\n        notifyDataSetChanged()\n\n        // Will skip insert page otherwise\n        if (insertPageLastPage != null) {\n            viewer.moveToPage(insertPageLastPage!!)\n        }\n    }\n\n    /**\n     * Returns the amount of items of the adapter.\n     */\n    override fun getCount(): Int {\n        return items.size\n    }\n\n    /**\n     * Creates a new view for the item at the given [position].\n     */\n    override fun createView(container: ViewGroup, position: Int): View {\n        return when (val item = items[position]) {\n            is ReaderPage -> PagerPageHolder(readerThemedContext, viewer, item)\n            is ChapterTransition -> PagerTransitionHolder(readerThemedContext, viewer, item)\n            else -> throw NotImplementedError(\"Holder for ${item.javaClass} not implemented\")\n        }\n    }\n\n    /**\n     * Returns the current position of the given [view] on the adapter.\n     */\n    override fun getItemPosition(view: Any): Int {\n        if (view is PositionableView) {\n            val position = items.indexOf(view.item)\n            if (position != -1) {\n                return position\n            } else {\n                logcat { \"Position for ${view.item} not found\" }\n            }\n        }\n        return POSITION_NONE\n    }\n\n    fun onPageSplit(currentPage: Any?, newPage: InsertPage) {\n        if (currentPage !is ReaderPage) return\n\n        val currentIndex = items.indexOf(currentPage)\n\n        // Put aside preprocessed pages for next chapter so they don't get removed when changing chapter\n        if (currentPage.chapter.chapter.id != currentChapter?.chapter?.id) {\n            preprocessed[newPage.index] = newPage\n            return\n        }\n\n        val placeAtIndex = when (viewer) {\n            is L2RPagerViewer,\n            is VerticalPagerViewer,\n            -> currentIndex + 1\n            else -> currentIndex\n        }\n\n        // It will enter a endless cycle of insert pages\n        if (viewer is R2LPagerViewer && placeAtIndex - 1 >= 0 && items[placeAtIndex - 1] is InsertPage) {\n            return\n        }\n\n        // Same here it will enter a endless cycle of insert pages\n        if (items[placeAtIndex] is InsertPage) {\n            return\n        }\n\n        items.add(placeAtIndex, newPage)\n\n        notifyDataSetChanged()\n    }\n\n    fun cleanupPageSplit() {\n        val insertPages = items.filterIsInstance(InsertPage::class.java)\n        items.removeAll(insertPages)\n        notifyDataSetChanged()\n    }\n\n    fun refresh() {\n        readerThemedContext = viewer.activity.createReaderThemeContext()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewers.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.pager\n\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\n\n/**\n * Implementation of a left to right PagerViewer.\n */\nclass L2RPagerViewer(activity: ReaderActivity) : PagerViewer(activity) {\n    /**\n     * Creates a new left to right pager.\n     */\n    override fun createPager(): Pager {\n        return Pager(activity)\n    }\n}\n\n/**\n * Implementation of a right to left PagerViewer.\n */\nclass R2LPagerViewer(activity: ReaderActivity) : PagerViewer(activity) {\n    /**\n     * Creates a new right to left pager.\n     */\n    override fun createPager(): Pager {\n        return Pager(activity)\n    }\n\n    /**\n     * Moves to the next page. On a R2L pager the next page is the one at the left.\n     */\n    override fun moveToNext() {\n        moveLeft()\n    }\n\n    /**\n     * Moves to the previous page. On a R2L pager the previous page is the one at the right.\n     */\n    override fun moveToPrevious() {\n        moveRight()\n    }\n}\n\n/**\n * Implementation of a vertical (top to bottom) PagerViewer.\n */\nclass VerticalPagerViewer(activity: ReaderActivity) : PagerViewer(activity) {\n    /**\n     * Creates a new vertical pager.\n     */\n    override fun createPager(): Pager {\n        return Pager(activity, isHorizontal = false)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonAdapter.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport androidx.recyclerview.widget.DiffUtil\nimport androidx.recyclerview.widget.RecyclerView\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView\nimport eu.kanade.tachiyomi.ui.reader.viewer.calculateChapterGap\nimport eu.kanade.tachiyomi.util.system.createReaderThemeContext\n\n/**\n * RecyclerView Adapter used by this [viewer] to where [ViewerChapters] updates are posted.\n */\nclass WebtoonAdapter(val viewer: WebtoonViewer) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {\n\n    /**\n     * List of currently set items.\n     */\n    var items: List<Any> = emptyList()\n        private set\n\n    var currentChapter: ReaderChapter? = null\n\n    /**\n     * Context that has been wrapped to use the correct theme values based on the\n     * current app theme and reader background color\n     */\n    private var readerThemedContext = viewer.activity.createReaderThemeContext()\n\n    /**\n     * Updates this adapter with the given [chapters]. It handles setting a few pages of the\n     * next/previous chapter to allow seamless transitions.\n     */\n    fun setChapters(chapters: ViewerChapters, forceTransition: Boolean) {\n        val newItems = mutableListOf<Any>()\n\n        // Forces chapter transition if there is missing chapters\n        val prevHasMissingChapters = calculateChapterGap(chapters.currChapter, chapters.prevChapter) > 0\n        val nextHasMissingChapters = calculateChapterGap(chapters.nextChapter, chapters.currChapter) > 0\n\n        // Add previous chapter pages and transition.\n        if (chapters.prevChapter != null) {\n            // We only need to add the last few pages of the previous chapter, because it'll be\n            // selected as the current chapter when one of those pages is selected.\n            val prevPages = chapters.prevChapter.pages\n            if (prevPages != null) {\n                newItems.addAll(prevPages.takeLast(2))\n            }\n        }\n\n        // Skip transition page if the chapter is loaded & current page is not a transition page\n        if (prevHasMissingChapters || forceTransition || chapters.prevChapter?.state !is ReaderChapter.State.Loaded) {\n            newItems.add(ChapterTransition.Prev(chapters.currChapter, chapters.prevChapter))\n        }\n\n        // Add current chapter.\n        val currPages = chapters.currChapter.pages\n        if (currPages != null) {\n            newItems.addAll(currPages)\n        }\n\n        currentChapter = chapters.currChapter\n\n        // Add next chapter transition and pages.\n        if (nextHasMissingChapters || forceTransition || chapters.nextChapter?.state !is ReaderChapter.State.Loaded) {\n            newItems.add(ChapterTransition.Next(chapters.currChapter, chapters.nextChapter))\n        }\n\n        if (chapters.nextChapter != null) {\n            // Add at most two pages, because this chapter will be selected before the user can\n            // swap more pages.\n            val nextPages = chapters.nextChapter.pages\n            if (nextPages != null) {\n                newItems.addAll(nextPages.take(2))\n            }\n        }\n\n        updateItems(newItems)\n    }\n\n    private fun updateItems(newItems: List<Any>) {\n        val result = DiffUtil.calculateDiff(Callback(items, newItems))\n        items = newItems\n        result.dispatchUpdatesTo(this)\n    }\n\n    fun refresh() {\n        readerThemedContext = viewer.activity.createReaderThemeContext()\n    }\n\n    /**\n     * Returns the amount of items of the adapter.\n     */\n    override fun getItemCount(): Int {\n        return items.size\n    }\n\n    /**\n     * Returns the view type for the item at the given [position].\n     */\n    override fun getItemViewType(position: Int): Int {\n        return when (val item = items[position]) {\n            is ReaderPage -> PAGE_VIEW\n            is ChapterTransition -> TRANSITION_VIEW\n            else -> error(\"Unknown view type for ${item.javaClass}\")\n        }\n    }\n\n    /**\n     * Creates a new view holder for an item with the given [viewType].\n     */\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {\n        return when (viewType) {\n            PAGE_VIEW -> {\n                val view = ReaderPageImageView(readerThemedContext, isWebtoon = true)\n                WebtoonPageHolder(view, viewer)\n            }\n            TRANSITION_VIEW -> {\n                val view = LinearLayout(readerThemedContext)\n                WebtoonTransitionHolder(view, viewer)\n            }\n            else -> error(\"Unknown view type\")\n        }\n    }\n\n    /**\n     * Binds an existing view [holder] with the item at the given [position].\n     */\n    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {\n        val item = items[position]\n        when (holder) {\n            is WebtoonPageHolder -> holder.bind(item as ReaderPage)\n            is WebtoonTransitionHolder -> holder.bind(item as ChapterTransition)\n        }\n    }\n\n    /**\n     * Recycles an existing view [holder] before adding it to the view pool.\n     */\n    override fun onViewRecycled(holder: RecyclerView.ViewHolder) {\n        when (holder) {\n            is WebtoonPageHolder -> holder.recycle()\n            is WebtoonTransitionHolder -> holder.recycle()\n        }\n    }\n\n    /**\n     * Diff util callback used to dispatch delta updates instead of full dataset changes.\n     */\n    private class Callback(\n        private val oldItems: List<Any>,\n        private val newItems: List<Any>,\n    ) : DiffUtil.Callback() {\n\n        /**\n         * Returns true if these two items are the same.\n         */\n        override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {\n            val oldItem = oldItems[oldItemPosition]\n            val newItem = newItems[newItemPosition]\n\n            return oldItem == newItem\n        }\n\n        /**\n         * Returns true if the contents of the items are the same.\n         */\n        override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {\n            return true\n        }\n\n        /**\n         * Returns the size of the old list.\n         */\n        override fun getOldListSize(): Int {\n            return oldItems.size\n        }\n\n        /**\n         * Returns the size of the new list.\n         */\n        override fun getNewListSize(): Int {\n            return newItems.size\n        }\n    }\n}\n\n/**\n * View holder type of a chapter page view.\n */\nprivate const val PAGE_VIEW = 0\n\n/**\n * View holder type of a chapter transition view.\n */\nprivate const val TRANSITION_VIEW = 1\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonBaseHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.content.Context\nimport android.view.View\nimport android.view.ViewGroup.LayoutParams\nimport androidx.recyclerview.widget.RecyclerView\n\nabstract class WebtoonBaseHolder(\n    view: View,\n    protected val viewer: WebtoonViewer,\n) : RecyclerView.ViewHolder(view) {\n\n    /**\n     * Context getter because it's used often.\n     */\n    val context: Context get() = itemView.context\n\n    /**\n     * Called when the view is recycled and being added to the view pool.\n     */\n    open fun recycle() {}\n\n    /**\n     * Extension method to set layout params to wrap content on this view.\n     */\n    protected fun View.wrapContent() {\n        layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.EdgeNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.KindlishNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.LNavigation\nimport eu.kanade.tachiyomi.ui.reader.viewer.navigation.RightAndLeftNavigation\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Configuration used by webtoon viewers.\n */\nclass WebtoonConfig(\n    scope: CoroutineScope,\n    readerPreferences: ReaderPreferences = Injekt.get(),\n) : ViewerConfig(readerPreferences, scope) {\n\n    var themeChangedListener: (() -> Unit)? = null\n\n    var imageCropBorders = false\n        private set\n\n    var zoomOutDisabled = false\n        private set\n\n    var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null\n\n    var sidePadding = 0\n        private set\n\n    var doubleTapZoom = true\n        private set\n\n    var doubleTapZoomChangedListener: ((Boolean) -> Unit)? = null\n\n    val theme = readerPreferences.readerTheme().get()\n\n    init {\n        readerPreferences.cropBordersWebtoon()\n            .register({ imageCropBorders = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.webtoonSidePadding()\n            .register({ sidePadding = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.navigationModeWebtoon()\n            .register({ navigationMode = it }, { updateNavigation(it) })\n\n        readerPreferences.webtoonNavInverted()\n            .register({ tappingInverted = it }, { navigator.invertMode = it })\n        readerPreferences.webtoonNavInverted().changes()\n            .drop(1)\n            .onEach { navigationModeChangedListener?.invoke() }\n            .launchIn(scope)\n\n        readerPreferences.dualPageSplitWebtoon()\n            .register({ dualPageSplit = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.dualPageInvertWebtoon()\n            .register({ dualPageInvert = it }, { imagePropertyChangedListener?.invoke() })\n\n        readerPreferences.dualPageRotateToFitWebtoon()\n            .register(\n                { dualPageRotateToFit = it },\n                { imagePropertyChangedListener?.invoke() },\n            )\n\n        readerPreferences.dualPageRotateToFitInvertWebtoon()\n            .register(\n                { dualPageRotateToFitInvert = it },\n                { imagePropertyChangedListener?.invoke() },\n            )\n\n        readerPreferences.webtoonDisableZoomOut()\n            .register(\n                { zoomOutDisabled = it },\n                { zoomPropertyChangedListener?.invoke(it) },\n            )\n\n        readerPreferences.webtoonDoubleTapZoomEnabled()\n            .register(\n                { doubleTapZoom = it },\n                { doubleTapZoomChangedListener?.invoke(it) },\n            )\n\n        readerPreferences.readerTheme().changes()\n            .drop(1)\n            .distinctUntilChanged()\n            .onEach { themeChangedListener?.invoke() }\n            .launchIn(scope)\n    }\n\n    override var navigator: ViewerNavigation = defaultNavigation()\n        set(value) {\n            field = value.also { it.invertMode = tappingInverted }\n        }\n\n    override fun defaultNavigation(): ViewerNavigation {\n        return LNavigation()\n    }\n\n    override fun updateNavigation(navigationMode: Int) {\n        this.navigator = when (navigationMode) {\n            0 -> defaultNavigation()\n            1 -> LNavigation()\n            2 -> KindlishNavigation()\n            3 -> EdgeNavigation()\n            4 -> RightAndLeftNavigation()\n            5 -> DisabledNavigation()\n            else -> defaultNavigation()\n        }\n        navigationModeChangedListener?.invoke()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.content.Context\nimport android.graphics.Rect\nimport android.view.GestureDetector\nimport android.view.MotionEvent\nimport android.view.ScaleGestureDetector\nimport android.widget.FrameLayout\n\n/**\n * Frame layout which contains a [WebtoonRecyclerView]. It's needed to handle touch events,\n * because the recyclerview is scaled and its touch events are translated, which breaks the\n * detectors.\n *\n * TODO consider integrating this class into [WebtoonViewer].\n */\nclass WebtoonFrame(context: Context) : FrameLayout(context) {\n\n    /**\n     * Scale detector, either with pinch or quick scale.\n     */\n    private val scaleDetector = ScaleGestureDetector(context, ScaleListener())\n\n    /**\n     * Fling detector.\n     */\n    private val flingDetector = GestureDetector(context, FlingListener())\n\n    var doubleTapZoom = true\n        set(value) {\n            field = value\n            recycler?.doubleTapZoom = value\n            scaleDetector.isQuickScaleEnabled = value\n        }\n\n    var zoomOutDisabled = false\n        set(value) {\n            field = value\n            recycler?.zoomOutDisabled = value\n        }\n\n    /**\n     * Recycler view added in this frame.\n     */\n    private val recycler: WebtoonRecyclerView?\n        get() = getChildAt(0) as? WebtoonRecyclerView\n\n    /**\n     * Dispatches a touch event to the detectors.\n     */\n    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {\n        scaleDetector.onTouchEvent(ev)\n        flingDetector.onTouchEvent(ev)\n\n        // Get the bounding box of the recyclerview and translate any motion events to be within it.\n        // Used to allow scrolling outside the recyclerview.\n        val recyclerRect = Rect()\n        recycler?.getHitRect(recyclerRect) ?: return super.dispatchTouchEvent(ev)\n        // Shrink the box to account for any rounding issues.\n        recyclerRect.inset(1, 1)\n\n        if (recyclerRect.right < recyclerRect.left || recyclerRect.bottom < recyclerRect.top) {\n            return super.dispatchTouchEvent(ev)\n        }\n\n        ev.setLocation(\n            ev.x.coerceIn(recyclerRect.left.toFloat(), recyclerRect.right.toFloat()),\n            ev.y.coerceIn(recyclerRect.top.toFloat(), recyclerRect.bottom.toFloat()),\n        )\n        return super.dispatchTouchEvent(ev)\n    }\n\n    /**\n     * Scale listener used to delegate events to the recycler view.\n     */\n    inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {\n        override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {\n            recycler?.onScaleBegin()\n            return true\n        }\n\n        override fun onScale(detector: ScaleGestureDetector): Boolean {\n            recycler?.onScale(detector.scaleFactor)\n            return true\n        }\n\n        override fun onScaleEnd(detector: ScaleGestureDetector) {\n            recycler?.onScaleEnd()\n        }\n    }\n\n    /**\n     * Fling listener used to delegate events to the recycler view.\n     */\n    inner class FlingListener : GestureDetector.SimpleOnGestureListener() {\n        override fun onDown(e: MotionEvent): Boolean {\n            return true\n        }\n\n        override fun onFling(\n            e1: MotionEvent?,\n            e2: MotionEvent,\n            velocityX: Float,\n            velocityY: Float,\n        ): Boolean {\n            return recycler?.zoomFling(velocityX.toInt(), velocityY.toInt()) ?: false\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonLayoutManager.kt",
    "content": "@file:Suppress(\"PackageDirectoryMismatch\")\n\npackage androidx.recyclerview.widget\n\nimport android.content.Context\nimport androidx.recyclerview.widget.RecyclerView.NO_POSITION\n\n/**\n * Layout manager used by the webtoon viewer. Item prefetch is disabled because the extra layout\n * space feature is used which allows setting the image even if the holder is not visible,\n * avoiding (in most cases) black views when they are visible.\n *\n * This layout manager uses the same package name as the support library in order to use a package\n * protected method.\n */\nclass WebtoonLayoutManager(context: Context, private val extraLayoutSpace: Int) : LinearLayoutManager(context) {\n\n    init {\n        isItemPrefetchEnabled = false\n    }\n\n    /**\n     * Returns the custom extra layout space.\n     */\n    @Deprecated(\"Deprecated in Java\")\n    override fun getExtraLayoutSpace(state: RecyclerView.State): Int {\n        return extraLayoutSpace\n    }\n\n    /**\n     * Returns the position of the last item whose end side is visible on screen.\n     */\n    fun findLastEndVisibleItemPosition(): Int {\n        ensureLayoutState()\n        val callback = if (mOrientation == HORIZONTAL) {\n            mHorizontalBoundCheck\n        } else {\n            mVerticalBoundCheck\n        }.mCallback\n        val start = callback.parentStart\n        val end = callback.parentEnd\n        for (i in childCount - 1 downTo 0) {\n            val child = getChildAt(i)!!\n            val childStart = callback.getChildStart(child)\n            val childEnd = callback.getChildEnd(child)\n            if (childEnd <= end || childStart < start) {\n                return getPosition(child)\n            }\n        }\n\n        return NO_POSITION\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.content.res.Resources\nimport android.view.LayoutInflater\nimport android.view.ViewGroup\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport android.view.ViewGroup.LayoutParams.WRAP_CONTENT\nimport android.widget.FrameLayout\nimport androidx.core.view.isVisible\nimport androidx.core.view.updateLayoutParams\nimport androidx.core.view.updateMargins\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView\nimport eu.kanade.tachiyomi.databinding.ReaderErrorBinding\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator\nimport eu.kanade.tachiyomi.ui.webview.WebViewActivity\nimport eu.kanade.tachiyomi.util.system.dpToPx\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.supervisorScope\nimport logcat.LogPriority\nimport okio.Buffer\nimport okio.BufferedSource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\n\n/**\n * Holder of the webtoon reader for a single page of a chapter.\n *\n * @param frame the root view for this holder.\n * @param viewer the webtoon viewer.\n * @constructor creates a new webtoon holder.\n */\nclass WebtoonPageHolder(\n    private val frame: ReaderPageImageView,\n    viewer: WebtoonViewer,\n) : WebtoonBaseHolder(frame, viewer) {\n\n    /**\n     * Loading progress bar to indicate the current progress.\n     */\n    private val progressIndicator = createProgressIndicator()\n\n    /**\n     * Progress bar container. Needed to keep a minimum height size of the holder, otherwise the\n     * adapter would create more views to fill the screen, which is not wanted.\n     */\n    private lateinit var progressContainer: ViewGroup\n\n    /**\n     * Error layout to show when the image fails to load.\n     */\n    private var errorLayout: ReaderErrorBinding? = null\n\n    /**\n     * Getter to retrieve the height of the recycler view.\n     */\n    private val parentHeight\n        get() = viewer.recycler.height\n\n    /**\n     * Page of a chapter.\n     */\n    private var page: ReaderPage? = null\n\n    private val scope = MainScope()\n\n    /**\n     * Job for loading the page.\n     */\n    private var loadJob: Job? = null\n\n    init {\n        refreshLayoutParams()\n\n        frame.onImageLoaded = { onImageDecoded() }\n        frame.onImageLoadError = { setError() }\n        frame.onScaleChanged = { viewer.activity.hideMenu() }\n    }\n\n    /**\n     * Binds the given [page] with this view holder, subscribing to its state.\n     */\n    fun bind(page: ReaderPage) {\n        this.page = page\n        loadJob?.cancel()\n        loadJob = scope.launch { loadPageAndProcessStatus() }\n        refreshLayoutParams()\n    }\n\n    private fun refreshLayoutParams() {\n        frame.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply {\n            if (!viewer.isContinuous) {\n                bottomMargin = 15.dpToPx\n            }\n\n            val margin = Resources.getSystem().displayMetrics.widthPixels * (viewer.config.sidePadding / 100f)\n            marginEnd = margin.toInt()\n            marginStart = margin.toInt()\n        }\n    }\n\n    /**\n     * Called when the view is recycled and added to the view pool.\n     */\n    override fun recycle() {\n        loadJob?.cancel()\n        loadJob = null\n\n        removeErrorLayout()\n        frame.recycle()\n        progressIndicator.setProgress(0)\n        progressContainer.isVisible = true\n    }\n\n    /**\n     * Loads the page and processes changes to the page's status.\n     *\n     * Returns immediately if there is no page or the page has no PageLoader.\n     * Otherwise, this function does not return. It will continue to process status changes until\n     * the Job is cancelled.\n     */\n    private suspend fun loadPageAndProcessStatus() {\n        val page = page ?: return\n        val loader = page.chapter.pageLoader ?: return\n        supervisorScope {\n            launchIO {\n                loader.loadPage(page)\n            }\n            page.statusFlow.collectLatest { state ->\n                when (state) {\n                    Page.State.QUEUE -> setQueued()\n                    Page.State.LOAD_PAGE -> setLoading()\n                    Page.State.DOWNLOAD_IMAGE -> {\n                        setDownloading()\n                        page.progressFlow.collectLatest { value ->\n                            progressIndicator.setProgress(value)\n                        }\n                    }\n                    Page.State.READY -> setImage()\n                    Page.State.ERROR -> setError()\n                }\n            }\n        }\n    }\n\n    /**\n     * Called when the page is queued.\n     */\n    private fun setQueued() {\n        progressContainer.isVisible = true\n        progressIndicator.show()\n        removeErrorLayout()\n    }\n\n    /**\n     * Called when the page is loading.\n     */\n    private fun setLoading() {\n        progressContainer.isVisible = true\n        progressIndicator.show()\n        removeErrorLayout()\n    }\n\n    /**\n     * Called when the page is downloading\n     */\n    private fun setDownloading() {\n        progressContainer.isVisible = true\n        progressIndicator.show()\n        removeErrorLayout()\n    }\n\n    /**\n     * Called when the page is ready.\n     */\n    private suspend fun setImage() {\n        progressIndicator.setProgress(0)\n\n        val streamFn = page?.stream ?: return\n\n        try {\n            val (source, isAnimated) = withIOContext {\n                val source = streamFn().use { process(Buffer().readFrom(it)) }\n                val isAnimated = ImageUtil.isAnimatedAndSupported(source)\n                Pair(source, isAnimated)\n            }\n            withUIContext {\n                frame.setImage(\n                    source,\n                    isAnimated,\n                    ReaderPageImageView.Config(\n                        zoomDuration = viewer.config.doubleTapAnimDuration,\n                        minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH,\n                        cropBorders = viewer.config.imageCropBorders,\n                    ),\n                )\n                removeErrorLayout()\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e)\n            withUIContext {\n                setError()\n            }\n        }\n    }\n\n    private fun process(imageSource: BufferedSource): BufferedSource {\n        if (viewer.config.dualPageRotateToFit) {\n            return rotateDualPage(imageSource)\n        }\n\n        if (viewer.config.dualPageSplit) {\n            val isDoublePage = ImageUtil.isWideImage(imageSource)\n            if (isDoublePage) {\n                val upperSide = if (viewer.config.dualPageInvert) ImageUtil.Side.LEFT else ImageUtil.Side.RIGHT\n                return ImageUtil.splitAndMerge(imageSource, upperSide)\n            }\n        }\n\n        return imageSource\n    }\n\n    private fun rotateDualPage(imageSource: BufferedSource): BufferedSource {\n        val isDoublePage = ImageUtil.isWideImage(imageSource)\n        return if (isDoublePage) {\n            val rotation = if (viewer.config.dualPageRotateToFitInvert) -90f else 90f\n            ImageUtil.rotateImage(imageSource, rotation)\n        } else {\n            imageSource\n        }\n    }\n\n    /**\n     * Called when the page has an error.\n     */\n    private fun setError() {\n        progressContainer.isVisible = false\n        initErrorLayout()\n    }\n\n    /**\n     * Called when the image is decoded and going to be displayed.\n     */\n    private fun onImageDecoded() {\n        progressContainer.isVisible = false\n        removeErrorLayout()\n    }\n\n    /**\n     * Creates a new progress bar.\n     */\n    private fun createProgressIndicator(): ReaderProgressIndicator {\n        progressContainer = FrameLayout(context)\n        frame.addView(progressContainer, MATCH_PARENT, parentHeight)\n\n        val progress = ReaderProgressIndicator(context).apply {\n            updateLayoutParams<FrameLayout.LayoutParams> {\n                updateMargins(top = parentHeight / 4)\n            }\n        }\n        progressContainer.addView(progress)\n        return progress\n    }\n\n    /**\n     * Initializes a button to retry pages.\n     */\n    private fun initErrorLayout(): ReaderErrorBinding {\n        if (errorLayout == null) {\n            errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), frame, true)\n            errorLayout?.root?.layoutParams = FrameLayout.LayoutParams(\n                MATCH_PARENT,\n                (parentHeight * 0.8).toInt(),\n            )\n            errorLayout?.actionRetry?.setOnClickListener {\n                page?.let { it.chapter.pageLoader?.retryPage(it) }\n            }\n        }\n\n        val imageUrl = page?.imageUrl\n        errorLayout?.actionOpenInWebView?.isVisible = imageUrl != null\n        if (imageUrl != null) {\n            if (imageUrl.startsWith(\"http\", true)) {\n                errorLayout?.actionOpenInWebView?.setOnClickListener {\n                    val intent = WebViewActivity.newIntent(context, imageUrl)\n                    context.startActivity(intent)\n                }\n            }\n        }\n\n        return errorLayout!!\n    }\n\n    /**\n     * Removes the decode error layout from the holder, if found.\n     */\n    private fun removeErrorLayout() {\n        errorLayout?.let {\n            frame.removeView(it.root)\n            errorLayout = null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.animation.AnimatorSet\nimport android.animation.ValueAnimator\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.HapticFeedbackConstants\nimport android.view.MotionEvent\nimport android.view.ViewConfiguration\nimport android.view.animation.DecelerateInterpolator\nimport androidx.core.animation.doOnEnd\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport eu.kanade.tachiyomi.ui.reader.viewer.GestureDetectorWithLongTap\nimport kotlin.math.abs\n\n/**\n * Implementation of a [RecyclerView] used by the webtoon reader.\n */\nclass WebtoonRecyclerView @JvmOverloads constructor(\n    context: Context,\n    attrs: AttributeSet? = null,\n    defStyle: Int = 0,\n) : RecyclerView(context, attrs, defStyle) {\n\n    private var isZooming = false\n    private var atLastPosition = false\n    private var atFirstPosition = false\n    private var halfWidth = 0\n    private var halfHeight = 0\n    var originalHeight = 0\n        private set\n    private var heightSet = false\n    private var firstVisibleItemPosition = 0\n    private var lastVisibleItemPosition = 0\n    private var currentScale = DEFAULT_RATE\n    var zoomOutDisabled = false\n        set(value) {\n            field = value\n            if (value && currentScale < DEFAULT_RATE) {\n                zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f)\n            }\n        }\n    private val minRate\n        get() = if (zoomOutDisabled) DEFAULT_RATE else MIN_RATE\n\n    private val listener = GestureListener()\n    private val detector = Detector()\n\n    var doubleTapZoom = true\n\n    var tapListener: ((MotionEvent) -> Unit)? = null\n    var longTapListener: ((MotionEvent) -> Boolean)? = null\n\n    override fun onMeasure(widthSpec: Int, heightSpec: Int) {\n        halfWidth = MeasureSpec.getSize(widthSpec) / 2\n        halfHeight = MeasureSpec.getSize(heightSpec) / 2\n        if (!heightSet) {\n            originalHeight = MeasureSpec.getSize(heightSpec)\n            heightSet = true\n        }\n        super.onMeasure(widthSpec, heightSpec)\n    }\n\n    override fun onTouchEvent(e: MotionEvent): Boolean {\n        detector.onTouchEvent(e)\n        return super.onTouchEvent(e)\n    }\n\n    override fun onScrolled(dx: Int, dy: Int) {\n        super.onScrolled(dx, dy)\n        val layoutManager = layoutManager\n        lastVisibleItemPosition =\n            (layoutManager as LinearLayoutManager).findLastVisibleItemPosition()\n        firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition()\n    }\n\n    override fun onScrollStateChanged(state: Int) {\n        super.onScrollStateChanged(state)\n        val layoutManager = layoutManager\n        val visibleItemCount = layoutManager?.childCount ?: 0\n        val totalItemCount = layoutManager?.itemCount ?: 0\n        atLastPosition = visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1\n        atFirstPosition = firstVisibleItemPosition == 0\n    }\n\n    private fun getPositionX(positionX: Float): Float {\n        if (currentScale < 1) {\n            return 0f\n        }\n        val maxPositionX = halfWidth * (currentScale - 1)\n        return positionX.coerceIn(-maxPositionX, maxPositionX)\n    }\n\n    private fun getPositionY(positionY: Float): Float {\n        if (currentScale < 1) {\n            return (originalHeight / 2 - halfHeight).toFloat()\n        }\n        val maxPositionY = halfHeight * (currentScale - 1)\n        return positionY.coerceIn(-maxPositionY, maxPositionY)\n    }\n\n    private fun zoom(\n        fromRate: Float,\n        toRate: Float,\n        fromX: Float,\n        toX: Float,\n        fromY: Float,\n        toY: Float,\n    ) {\n        isZooming = true\n        val animatorSet = AnimatorSet()\n        val translationXAnimator = ValueAnimator.ofFloat(fromX, toX)\n        translationXAnimator.addUpdateListener { animation -> x = animation.animatedValue as Float }\n\n        val translationYAnimator = ValueAnimator.ofFloat(fromY, toY)\n        translationYAnimator.addUpdateListener { animation -> y = animation.animatedValue as Float }\n\n        val scaleAnimator = ValueAnimator.ofFloat(fromRate, toRate)\n        scaleAnimator.addUpdateListener { animation ->\n            currentScale = animation.animatedValue as Float\n            setScaleRate(currentScale)\n        }\n        animatorSet.playTogether(translationXAnimator, translationYAnimator, scaleAnimator)\n        animatorSet.duration = ANIMATOR_DURATION_TIME.toLong()\n        animatorSet.interpolator = DecelerateInterpolator()\n        animatorSet.start()\n        animatorSet.doOnEnd {\n            isZooming = false\n            currentScale = toRate\n        }\n    }\n\n    fun zoomFling(velocityX: Int, velocityY: Int): Boolean {\n        if (currentScale <= 1f) return false\n\n        val distanceTimeFactor = 0.4f\n        val animatorSet = AnimatorSet()\n\n        if (velocityX != 0) {\n            val dx = distanceTimeFactor * velocityX / 2\n            val newX = getPositionX(x + dx)\n            val translationXAnimator = ValueAnimator.ofFloat(x, newX)\n            translationXAnimator.addUpdateListener { animation ->\n                x = getPositionX(\n                    animation.animatedValue as Float,\n                )\n            }\n            animatorSet.play(translationXAnimator)\n        }\n        if (velocityY != 0 && (atFirstPosition || atLastPosition)) {\n            val dy = distanceTimeFactor * velocityY / 2\n            val newY = getPositionY(y + dy)\n            val translationYAnimator = ValueAnimator.ofFloat(y, newY)\n            translationYAnimator.addUpdateListener { animation ->\n                y = getPositionY(\n                    animation.animatedValue as Float,\n                )\n            }\n            animatorSet.play(translationYAnimator)\n        }\n\n        animatorSet.duration = 400\n        animatorSet.interpolator = DecelerateInterpolator()\n        animatorSet.start()\n\n        return true\n    }\n\n    private fun zoomScrollBy(dx: Int, dy: Int) {\n        if (dx != 0) {\n            x = getPositionX(x + dx)\n        }\n        if (dy != 0) {\n            y = getPositionY(y + dy)\n        }\n    }\n\n    private fun setScaleRate(rate: Float) {\n        scaleX = rate\n        scaleY = rate\n    }\n\n    fun onScale(scaleFactor: Float) {\n        currentScale *= scaleFactor\n        currentScale = currentScale.coerceIn(\n            minRate,\n            MAX_SCALE_RATE,\n        )\n\n        setScaleRate(currentScale)\n\n        layoutParams.height = if (currentScale < 1) {\n            (originalHeight / currentScale).toInt()\n        } else {\n            originalHeight\n        }\n        halfHeight = layoutParams.height / 2\n\n        if (currentScale != DEFAULT_RATE) {\n            x = getPositionX(x)\n            y = getPositionY(y)\n        } else {\n            x = 0f\n            y = 0f\n        }\n\n        requestLayout()\n    }\n\n    fun onScaleBegin() {\n        if (detector.isDoubleTapping) {\n            detector.isQuickScaling = true\n        }\n    }\n\n    fun onScaleEnd() {\n        if (scaleX < minRate) {\n            zoom(currentScale, minRate, x, 0f, y, 0f)\n        }\n    }\n\n    inner class GestureListener : GestureDetectorWithLongTap.Listener() {\n\n        override fun onSingleTapConfirmed(ev: MotionEvent): Boolean {\n            tapListener?.invoke(ev)\n            return false\n        }\n\n        override fun onDoubleTap(ev: MotionEvent): Boolean {\n            detector.isDoubleTapping = true\n            return false\n        }\n\n        fun onDoubleTapConfirmed(ev: MotionEvent) {\n            if (!isZooming && doubleTapZoom) {\n                if (scaleX != DEFAULT_RATE) {\n                    zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f)\n                    layoutParams.height = originalHeight\n                    halfHeight = layoutParams.height / 2\n                    requestLayout()\n                } else {\n                    val toScale = 2f\n                    val toX = (halfWidth - ev.x) * (toScale - 1)\n                    val toY = (halfHeight - ev.y) * (toScale - 1)\n                    zoom(DEFAULT_RATE, toScale, 0f, toX, 0f, toY)\n                }\n            }\n        }\n\n        override fun onLongTapConfirmed(ev: MotionEvent) {\n            if (longTapListener?.invoke(ev) == true) {\n                performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)\n            }\n        }\n    }\n\n    inner class Detector : GestureDetectorWithLongTap(context, listener) {\n\n        private var scrollPointerId = 0\n        private var downX = 0\n        private var downY = 0\n        private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop\n        private var isZoomDragging = false\n        var isDoubleTapping = false\n        var isQuickScaling = false\n\n        override fun onTouchEvent(ev: MotionEvent): Boolean {\n            val action = ev.actionMasked\n            val actionIndex = ev.actionIndex\n\n            when (action) {\n                MotionEvent.ACTION_DOWN -> {\n                    scrollPointerId = ev.getPointerId(0)\n                    downX = (ev.x + 0.5f).toInt()\n                    downY = (ev.y + 0.5f).toInt()\n                }\n                MotionEvent.ACTION_POINTER_DOWN -> {\n                    scrollPointerId = ev.getPointerId(actionIndex)\n                    downX = (ev.getX(actionIndex) + 0.5f).toInt()\n                    downY = (ev.getY(actionIndex) + 0.5f).toInt()\n                }\n                MotionEvent.ACTION_MOVE -> {\n                    if (isDoubleTapping && isQuickScaling) {\n                        return true\n                    }\n\n                    val index = ev.findPointerIndex(scrollPointerId)\n                    if (index < 0) {\n                        return false\n                    }\n\n                    val x = (ev.getX(index) + 0.5f).toInt()\n                    val y = (ev.getY(index) + 0.5f).toInt()\n                    var dx = x - downX\n                    var dy = if (atFirstPosition || atLastPosition) y - downY else 0\n\n                    if (!isZoomDragging && currentScale > 1f) {\n                        var startScroll = false\n\n                        if (abs(dx) > touchSlop) {\n                            if (dx < 0) {\n                                dx += touchSlop\n                            } else {\n                                dx -= touchSlop\n                            }\n                            startScroll = true\n                        }\n                        if (abs(dy) > touchSlop) {\n                            if (dy < 0) {\n                                dy += touchSlop\n                            } else {\n                                dy -= touchSlop\n                            }\n                            startScroll = true\n                        }\n\n                        if (startScroll) {\n                            isZoomDragging = true\n                        }\n                    }\n\n                    if (isZoomDragging) {\n                        zoomScrollBy(dx, dy)\n                    }\n                }\n                MotionEvent.ACTION_UP -> {\n                    if (isDoubleTapping && !isQuickScaling) {\n                        listener.onDoubleTapConfirmed(ev)\n                    }\n                    isZoomDragging = false\n                    isDoubleTapping = false\n                    isQuickScaling = false\n                }\n                MotionEvent.ACTION_CANCEL -> {\n                    isZoomDragging = false\n                    isDoubleTapping = false\n                    isQuickScaling = false\n                }\n            }\n            return super.onTouchEvent(ev)\n        }\n    }\n}\n\nprivate const val ANIMATOR_DURATION_TIME = 200\nprivate const val MIN_RATE = 0.5f\nprivate const val DEFAULT_RATE = 1f\nprivate const val MAX_SCALE_RATE = 3f\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonSubsamplingImageView.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.MotionEvent\nimport com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView\n\n/**\n * Implementation of subsampling scale image view that ignores all touch events, because the\n * webtoon viewer handles all the gestures.\n */\nclass WebtoonSubsamplingImageView @JvmOverloads constructor(\n    context: Context,\n    attrs: AttributeSet? = null,\n) : SubsamplingScaleImageView(context, attrs) {\n\n    override fun onTouchEvent(event: MotionEvent): Boolean {\n        return false\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.view.Gravity\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport android.view.ViewGroup.LayoutParams.WRAP_CONTENT\nimport android.widget.LinearLayout\nimport androidx.appcompat.widget.AppCompatButton\nimport androidx.appcompat.widget.AppCompatTextView\nimport androidx.core.view.isNotEmpty\nimport androidx.core.view.isVisible\nimport com.google.android.material.progressindicator.CircularProgressIndicator\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderChapter\nimport eu.kanade.tachiyomi.ui.reader.viewer.ReaderTransitionView\nimport eu.kanade.tachiyomi.util.system.dpToPx\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\n\n/**\n * Holder of the webtoon viewer that contains a chapter transition.\n */\nclass WebtoonTransitionHolder(\n    val layout: LinearLayout,\n    viewer: WebtoonViewer,\n) : WebtoonBaseHolder(layout, viewer) {\n\n    private val scope = MainScope()\n    private var stateJob: Job? = null\n\n    private val transitionView = ReaderTransitionView(context)\n\n    /**\n     * View container of the current status of the transition page. Child views will be added\n     * dynamically.\n     */\n    private var pagesContainer = LinearLayout(context).apply {\n        orientation = LinearLayout.VERTICAL\n        gravity = Gravity.CENTER\n    }\n\n    init {\n        layout.layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)\n        layout.orientation = LinearLayout.VERTICAL\n        layout.gravity = Gravity.CENTER\n\n        val paddingVertical = 128.dpToPx\n        val paddingHorizontal = 32.dpToPx\n        layout.setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical)\n\n        val childMargins = 16.dpToPx\n        val childParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply {\n            setMargins(0, childMargins, 0, childMargins)\n        }\n\n        layout.addView(transitionView)\n        layout.addView(pagesContainer, childParams)\n    }\n\n    /**\n     * Binds the given [transition] with this view holder, subscribing to its state.\n     */\n    fun bind(transition: ChapterTransition) {\n        transitionView.bind(transition, viewer.downloadManager, viewer.activity.viewModel.manga)\n\n        transition.to?.let { observeStatus(it, transition) }\n    }\n\n    /**\n     * Called when the view is recycled and being added to the view pool.\n     */\n    override fun recycle() {\n        stateJob?.cancel()\n    }\n\n    /**\n     * Observes the status of the page list of the next/previous chapter. Whenever there's a new\n     * state, the pages container is cleaned up before setting the new state.\n     */\n    private fun observeStatus(chapter: ReaderChapter, transition: ChapterTransition) {\n        stateJob?.cancel()\n        stateJob = scope.launch {\n            chapter.stateFlow\n                .collectLatest { state ->\n                    pagesContainer.removeAllViews()\n                    when (state) {\n                        is ReaderChapter.State.Loading -> setLoading()\n                        is ReaderChapter.State.Error -> setError(state.error, transition)\n                        is ReaderChapter.State.Wait, is ReaderChapter.State.Loaded -> {\n                            // No additional view is added\n                        }\n                    }\n                    pagesContainer.isVisible = pagesContainer.isNotEmpty()\n                }\n        }\n    }\n\n    /**\n     * Sets the loading state on the pages container.\n     */\n    private fun setLoading() {\n        val progress = CircularProgressIndicator(context)\n        progress.isIndeterminate = true\n\n        val textView = AppCompatTextView(context).apply {\n            wrapContent()\n            text = context.stringResource(MR.strings.transition_pages_loading)\n        }\n\n        pagesContainer.addView(progress)\n        pagesContainer.addView(textView)\n    }\n\n    /**\n     * Sets the error state on the pages container.\n     */\n    private fun setError(error: Throwable, transition: ChapterTransition) {\n        val textView = AppCompatTextView(context).apply {\n            wrapContent()\n            text = context.stringResource(MR.strings.transition_pages_error, error.message ?: \"\")\n        }\n\n        val retryBtn = AppCompatButton(context).apply {\n            wrapContent()\n            text = context.stringResource(MR.strings.action_retry)\n            setOnClickListener {\n                val toChapter = transition.to\n                if (toChapter != null) {\n                    viewer.activity.requestPreloadChapter(toChapter)\n                }\n            }\n        }\n\n        pagesContainer.addView(textView)\n        pagesContainer.addView(retryBtn)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt",
    "content": "package eu.kanade.tachiyomi.ui.reader.viewer.webtoon\n\nimport android.graphics.PointF\nimport android.view.KeyEvent\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport androidx.core.app.ActivityCompat\nimport androidx.core.view.isGone\nimport androidx.core.view.isVisible\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.recyclerview.widget.WebtoonLayoutManager\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport eu.kanade.tachiyomi.ui.reader.model.ChapterTransition\nimport eu.kanade.tachiyomi.ui.reader.model.ReaderPage\nimport eu.kanade.tachiyomi.ui.reader.model.ViewerChapters\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.ui.reader.viewer.Viewer\nimport eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation.NavigationRegion\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.cancel\nimport tachiyomi.core.common.util.system.logcat\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport uy.kohesive.injekt.injectLazy\nimport kotlin.math.max\nimport kotlin.math.min\n\n/**\n * Implementation of a [Viewer] to display pages with a [RecyclerView].\n */\nclass WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = true) : Viewer {\n\n    val downloadManager: MangaDownloadManager by injectLazy()\n\n    private val scope = MainScope()\n\n    /**\n     * Recycler view used by this viewer.\n     */\n    val recycler = WebtoonRecyclerView(activity)\n\n    /**\n     * Frame containing the recycler view.\n     */\n    private val frame = WebtoonFrame(activity)\n\n    /**\n     * Distance to scroll when the user taps on one side of the recycler view.\n     */\n    private val scrollDistance = activity.resources.displayMetrics.heightPixels * 3 / 4\n\n    /**\n     * Layout manager of the recycler view.\n     */\n    private val layoutManager = WebtoonLayoutManager(activity, scrollDistance)\n\n    /**\n     * Configuration used by this viewer, like allow taps, or crop image borders.\n     */\n    val config = WebtoonConfig(scope)\n\n    /**\n     * Adapter of the recycler view.\n     */\n    private val adapter = WebtoonAdapter(this)\n\n    /**\n     * Currently active item. It can be a chapter page or a chapter transition.\n     */\n    private var currentPage: Any? = null\n\n    private val threshold: Int =\n        Injekt.get<ReaderPreferences>()\n            .readerHideThreshold()\n            .get()\n            .threshold\n\n    init {\n        recycler.setItemViewCacheSize(RECYCLER_VIEW_CACHE_SIZE)\n        recycler.isVisible = false // Don't let the recycler layout yet\n        recycler.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)\n        recycler.isFocusable = false\n        recycler.itemAnimator = null\n        recycler.layoutManager = layoutManager\n        recycler.adapter = adapter\n        recycler.addOnScrollListener(\n            object : RecyclerView.OnScrollListener() {\n                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {\n                    onScrolled()\n\n                    if ((dy > threshold || dy < -threshold) && activity.viewModel.state.value.menuVisible) {\n                        activity.hideMenu()\n                    }\n\n                    if (dy < 0) {\n                        val firstIndex = layoutManager.findFirstVisibleItemPosition()\n                        val firstItem = adapter.items.getOrNull(firstIndex)\n                        if (firstItem is ChapterTransition.Prev && firstItem.to != null) {\n                            activity.requestPreloadChapter(firstItem.to)\n                        }\n                    }\n\n                    val lastIndex = layoutManager.findLastEndVisibleItemPosition()\n                    val lastItem = adapter.items.getOrNull(lastIndex)\n                    if (lastItem is ChapterTransition.Next && lastItem.to == null) {\n                        activity.showMenu()\n                    }\n                }\n            },\n        )\n        recycler.tapListener = { event ->\n            val viewPosition = IntArray(2)\n            recycler.getLocationOnScreen(viewPosition)\n            val viewPositionRelativeToWindow = IntArray(2)\n            recycler.getLocationInWindow(viewPositionRelativeToWindow)\n            val pos = PointF(\n                (event.rawX - viewPosition[0] + viewPositionRelativeToWindow[0]) / recycler.width,\n                (event.rawY - viewPosition[1] + viewPositionRelativeToWindow[1]) / recycler.originalHeight,\n            )\n            when (config.navigator.getAction(pos)) {\n                NavigationRegion.MENU -> activity.toggleMenu()\n                NavigationRegion.NEXT, NavigationRegion.RIGHT -> scrollDown()\n                NavigationRegion.PREV, NavigationRegion.LEFT -> scrollUp()\n            }\n        }\n        recycler.longTapListener = f@{ event ->\n            if (activity.viewModel.state.value.menuVisible || config.longTapEnabled) {\n                val child = recycler.findChildViewUnder(event.x, event.y)\n                if (child != null) {\n                    val position = recycler.getChildAdapterPosition(child)\n                    val item = adapter.items.getOrNull(position)\n                    if (item is ReaderPage) {\n                        activity.onPageLongTap(item)\n                        return@f true\n                    }\n                }\n            }\n            false\n        }\n\n        config.imagePropertyChangedListener = {\n            refreshAdapter()\n        }\n\n        config.themeChangedListener = {\n            ActivityCompat.recreate(activity)\n        }\n\n        config.doubleTapZoomChangedListener = {\n            frame.doubleTapZoom = it\n        }\n\n        config.zoomPropertyChangedListener = {\n            frame.zoomOutDisabled = it\n        }\n\n        config.navigationModeChangedListener = {\n            val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay\n            activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart)\n        }\n\n        frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)\n        frame.addView(recycler)\n    }\n\n    private fun checkAllowPreload(page: ReaderPage?): Boolean {\n        // Page is transition page - preload allowed\n        page ?: return true\n\n        // Initial opening - preload allowed\n        currentPage ?: return true\n\n        val nextItem = adapter.items.getOrNull(adapter.items.size - 1)\n        val nextChapter = (nextItem as? ChapterTransition.Next)?.to ?: (nextItem as? ReaderPage)?.chapter\n\n        // Allow preload for\n        // 1. Going between pages of same chapter\n        // 2. Next chapter page\n        return when (page.chapter) {\n            (currentPage as? ReaderPage)?.chapter -> true\n            nextChapter -> true\n            else -> false\n        }\n    }\n\n    /**\n     * Returns the view this viewer uses.\n     */\n    override fun getView(): View {\n        return frame\n    }\n\n    /**\n     * Destroys this viewer. Called when leaving the reader or swapping viewers.\n     */\n    override fun destroy() {\n        super.destroy()\n        scope.cancel()\n    }\n\n    /**\n     * Called from the RecyclerView listener when a [page] is marked as active. It notifies the\n     * activity of the change and requests the preload of the next chapter if this is the last page.\n     */\n    private fun onPageSelected(page: ReaderPage, allowPreload: Boolean) {\n        val pages = page.chapter.pages ?: return\n        logcat { \"onPageSelected: ${page.number}/${pages.size}\" }\n        activity.onPageSelected(page)\n\n        // Preload next chapter once we're within the last 5 pages of the current chapter\n        val inPreloadRange = pages.size - page.number < 5\n        if (inPreloadRange && allowPreload && page.chapter == adapter.currentChapter) {\n            logcat { \"Request preload next chapter because we're at page ${page.number} of ${pages.size}\" }\n            val nextItem = adapter.items.getOrNull(adapter.items.size - 1)\n            val transitionChapter = (nextItem as? ChapterTransition.Next)?.to ?: (nextItem as?ReaderPage)?.chapter\n            if (transitionChapter != null) {\n                logcat { \"Requesting to preload chapter ${transitionChapter.chapter.chapter_number}\" }\n                activity.requestPreloadChapter(transitionChapter)\n            }\n        }\n    }\n\n    /**\n     * Called from the RecyclerView listener when a [transition] is marked as active. It request the\n     * preload of the destination chapter of the transition.\n     */\n    private fun onTransitionSelected(transition: ChapterTransition) {\n        logcat { \"onTransitionSelected: $transition\" }\n        val toChapter = transition.to\n        if (toChapter != null) {\n            logcat { \"Request preload destination chapter because we're on the transition\" }\n            activity.requestPreloadChapter(toChapter)\n        }\n    }\n\n    /**\n     * Tells this viewer to set the given [chapters] as active.\n     */\n    override fun setChapters(chapters: ViewerChapters) {\n        val forceTransition = config.alwaysShowChapterTransition || currentPage is ChapterTransition\n        adapter.setChapters(chapters, forceTransition)\n\n        if (recycler.isGone) {\n            logcat { \"Recycler first layout\" }\n            val pages = chapters.currChapter.pages ?: return\n            moveToPage(pages[min(chapters.currChapter.requestedPage, pages.lastIndex)])\n            recycler.isVisible = true\n        }\n    }\n\n    /**\n     * Tells this viewer to move to the given [page].\n     */\n    override fun moveToPage(page: ReaderPage) {\n        val position = adapter.items.indexOf(page)\n        if (position != -1) {\n            layoutManager.scrollToPositionWithOffset(position, 0)\n            if (layoutManager.findLastEndVisibleItemPosition() == -1) {\n                onScrolled(pos = position)\n            }\n        } else {\n            logcat { \"Page $page not found in adapter\" }\n        }\n    }\n\n    fun onScrolled(pos: Int? = null) {\n        val position = pos ?: layoutManager.findLastEndVisibleItemPosition()\n        val item = adapter.items.getOrNull(position)\n        val allowPreload = checkAllowPreload(item as? ReaderPage)\n        if (item != null && currentPage != item) {\n            currentPage = item\n            when (item) {\n                is ReaderPage -> onPageSelected(item, allowPreload)\n                is ChapterTransition -> onTransitionSelected(item)\n            }\n        }\n    }\n\n    /**\n     * Scrolls up by [scrollDistance].\n     */\n    private fun scrollUp() {\n        if (config.usePageTransitions) {\n            recycler.smoothScrollBy(0, -scrollDistance)\n        } else {\n            recycler.scrollBy(0, -scrollDistance)\n        }\n    }\n\n    /**\n     * Scrolls down by [scrollDistance].\n     */\n    private fun scrollDown() {\n        if (config.usePageTransitions) {\n            recycler.smoothScrollBy(0, scrollDistance)\n        } else {\n            recycler.scrollBy(0, scrollDistance)\n        }\n    }\n\n    /**\n     * Called from the containing activity when a key [event] is received. It should return true\n     * if the event was handled, false otherwise.\n     */\n    override fun handleKeyEvent(event: KeyEvent): Boolean {\n        val isUp = event.action == KeyEvent.ACTION_UP\n\n        when (event.keyCode) {\n            KeyEvent.KEYCODE_VOLUME_DOWN -> {\n                if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) {\n                    return false\n                } else if (isUp) {\n                    if (!config.volumeKeysInverted) scrollDown() else scrollUp()\n                }\n            }\n            KeyEvent.KEYCODE_VOLUME_UP -> {\n                if (!config.volumeKeysEnabled || activity.viewModel.state.value.menuVisible) {\n                    return false\n                } else if (isUp) {\n                    if (!config.volumeKeysInverted) scrollUp() else scrollDown()\n                }\n            }\n            KeyEvent.KEYCODE_MENU -> if (isUp) activity.toggleMenu()\n\n            KeyEvent.KEYCODE_DPAD_LEFT,\n            KeyEvent.KEYCODE_DPAD_UP,\n            KeyEvent.KEYCODE_PAGE_UP,\n            -> if (isUp) scrollUp()\n\n            KeyEvent.KEYCODE_DPAD_RIGHT,\n            KeyEvent.KEYCODE_DPAD_DOWN,\n            KeyEvent.KEYCODE_PAGE_DOWN,\n            -> if (isUp) scrollDown()\n            else -> return false\n        }\n        return true\n    }\n\n    /**\n     * Called from the containing activity when a generic motion [event] is received. It should\n     * return true if the event was handled, false otherwise.\n     */\n    override fun handleGenericMotionEvent(event: MotionEvent): Boolean {\n        return false\n    }\n\n    /**\n     * Notifies adapter of changes around the current page to trigger a relayout in the recycler.\n     * Used when an image configuration is changed.\n     */\n    private fun refreshAdapter() {\n        val position = layoutManager.findLastEndVisibleItemPosition()\n        adapter.refresh()\n        adapter.notifyItemRangeChanged(\n            max(0, position - 3),\n            min(position + 3, adapter.itemCount - 1),\n        )\n    }\n}\n\n// Double the cache size to reduce rebinds/recycles incurred by the extra layout space on scroll direction changes\nprivate const val RECYCLER_VIEW_CACHE_SIZE = 4\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.security\n\nimport android.os.Bundle\nimport androidx.biometric.BiometricPrompt\nimport androidx.fragment.app.FragmentActivity\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil\nimport eu.kanade.tachiyomi.util.system.AuthenticatorUtil.startAuthentication\nimport logcat.LogPriority\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\n\n/**\n * Blank activity with a BiometricPrompt.\n */\nclass UnlockActivity : BaseActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        startAuthentication(\n            stringResource(MR.strings.unlock_app_title, stringResource(MR.strings.app_name)),\n            confirmationRequired = false,\n            callback = object : AuthenticatorUtil.AuthenticationCallback() {\n                override fun onAuthenticationError(\n                    activity: FragmentActivity?,\n                    errorCode: Int,\n                    errString: CharSequence,\n                ) {\n                    super.onAuthenticationError(activity, errorCode, errString)\n                    logcat(LogPriority.ERROR) { errString.toString() }\n                    finishAffinity()\n                }\n\n                override fun onAuthenticationSucceeded(\n                    activity: FragmentActivity?,\n                    result: BiometricPrompt.AuthenticationResult,\n                ) {\n                    super.onAuthenticationSucceeded(activity, result)\n                    SecureActivityDelegate.unlock()\n                    finish()\n                }\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/setting/PlayerSettingsScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.setting\n\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.consumeWindowInsets\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.ui.Modifier\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsMainScreen\nimport eu.kanade.presentation.more.settings.screen.player.PlayerSettingsPlayerScreen\nimport eu.kanade.presentation.util.DefaultNavigatorScreenTransition\nimport eu.kanade.presentation.util.LocalBackPress\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.util.isTabletUi\nimport tachiyomi.presentation.core.components.TwoPanelBox\n\nclass PlayerSettingsScreen(private val mainSettings: Boolean) : Screen() {\n    @Composable\n    override fun Content() {\n        val parentNavigator = LocalNavigator.currentOrThrow\n        if (!isTabletUi()) {\n            Navigator(\n                screen = PlayerSettingsMainScreen(mainSettings),\n                content = {\n                    val pop: () -> Unit = {\n                        if (it.canPop) {\n                            it.pop()\n                        } else {\n                            parentNavigator.pop()\n                        }\n                    }\n                    CompositionLocalProvider(LocalBackPress provides pop) {\n                        DefaultNavigatorScreenTransition(navigator = it)\n                    }\n                },\n            )\n        } else {\n            Navigator(\n                screen = PlayerSettingsPlayerScreen,\n            ) {\n                val insets = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal)\n                TwoPanelBox(\n                    modifier = Modifier\n                        .windowInsetsPadding(insets)\n                        .consumeWindowInsets(insets),\n                    startContent = {\n                        CompositionLocalProvider(LocalBackPress provides parentNavigator::pop) {\n                            PlayerSettingsMainScreen(mainSettings).Content(twoPane = true)\n                        }\n                    },\n                    endContent = { DefaultNavigatorScreenTransition(navigator = it) },\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.setting\n\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.consumeWindowInsets\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.ui.Modifier\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.more.settings.screen.SettingsAppearanceScreen\nimport eu.kanade.presentation.more.settings.screen.SettingsDataScreen\nimport eu.kanade.presentation.more.settings.screen.SettingsMainScreen\nimport eu.kanade.presentation.more.settings.screen.SettingsTrackingScreen\nimport eu.kanade.presentation.more.settings.screen.about.AboutScreen\nimport eu.kanade.presentation.util.DefaultNavigatorScreenTransition\nimport eu.kanade.presentation.util.LocalBackPress\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.util.isTabletUi\nimport tachiyomi.presentation.core.components.TwoPanelBox\n\nclass SettingsScreen(\n    private val destination: Int? = null,\n) : Screen() {\n\n    constructor(destination: Destination) : this(destination.id)\n\n    @Composable\n    override fun Content() {\n        val parentNavigator = LocalNavigator.currentOrThrow\n        if (!isTabletUi()) {\n            Navigator(\n                screen = when (destination) {\n                    Destination.About.id -> AboutScreen\n                    Destination.DataAndStorage.id -> SettingsDataScreen\n                    Destination.Tracking.id -> SettingsTrackingScreen\n                    else -> SettingsMainScreen\n                },\n                content = {\n                    val pop: () -> Unit = {\n                        if (it.canPop) {\n                            it.pop()\n                        } else {\n                            parentNavigator.pop()\n                        }\n                    }\n                    CompositionLocalProvider(LocalBackPress provides pop) {\n                        DefaultNavigatorScreenTransition(navigator = it)\n                    }\n                },\n            )\n        } else {\n            Navigator(\n                screen = when (destination) {\n                    Destination.About.id -> AboutScreen\n                    Destination.DataAndStorage.id -> SettingsDataScreen\n                    Destination.Tracking.id -> SettingsTrackingScreen\n                    else -> SettingsAppearanceScreen\n                },\n            ) {\n                val insets = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal)\n                TwoPanelBox(\n                    modifier = Modifier\n                        .windowInsetsPadding(insets)\n                        .consumeWindowInsets(insets),\n                    startContent = {\n                        CompositionLocalProvider(LocalBackPress provides parentNavigator::pop) {\n                            SettingsMainScreen.Content(twoPane = true)\n                        }\n                    },\n                    endContent = { DefaultNavigatorScreenTransition(navigator = it) },\n                )\n            }\n        }\n    }\n\n    sealed class Destination(val id: Int) {\n        data object About : Destination(0)\n        data object DataAndStorage : Destination(1)\n        data object Tracking : Destination(2)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/BaseOAuthLoginActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.setting.track\n\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.util.view.setComposeContent\nimport tachiyomi.presentation.core.screens.LoadingScreen\nimport uy.kohesive.injekt.injectLazy\n\nabstract class BaseOAuthLoginActivity : BaseActivity() {\n\n    internal val trackerManager: TrackerManager by injectLazy()\n\n    abstract fun handleResult(data: Uri?)\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        setComposeContent {\n            LoadingScreen()\n        }\n\n        handleResult(intent.data)\n    }\n\n    internal fun returnToSettings() {\n        finish()\n\n        val intent = Intent(this, MainActivity::class.java).apply {\n            addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)\n        }\n        startActivity(intent)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/setting/track/TrackLoginActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.setting.track\n\nimport android.net.Uri\nimport androidx.lifecycle.lifecycleScope\nimport tachiyomi.core.common.util.lang.launchIO\n\nclass TrackLoginActivity : BaseOAuthLoginActivity() {\n\n    override fun handleResult(data: Uri?) {\n        when (data?.host) {\n            \"anilist-auth\" -> handleAnilist(data)\n            \"bangumi-auth\" -> handleBangumi(data)\n            \"myanimelist-auth\" -> handleMyAnimeList(data)\n            \"shikimori-auth\" -> handleShikimori(data)\n            \"simkl-auth\" -> handleSimkl(data)\n        }\n    }\n\n    private fun handleAnilist(data: Uri) {\n        val regex = \"(?:access_token=)(.*?)(?:&)\".toRegex()\n        val matchResult = regex.find(data.fragment.toString())\n        if (matchResult?.groups?.get(1) != null) {\n            lifecycleScope.launchIO {\n                trackerManager.aniList.login(matchResult.groups[1]!!.value)\n                returnToSettings()\n            }\n        } else {\n            trackerManager.aniList.logout()\n            returnToSettings()\n        }\n    }\n\n    private fun handleBangumi(data: Uri) {\n        val code = data.getQueryParameter(\"code\")\n        if (code != null) {\n            lifecycleScope.launchIO {\n                trackerManager.bangumi.login(code)\n                returnToSettings()\n            }\n        } else {\n            trackerManager.bangumi.logout()\n            returnToSettings()\n        }\n    }\n\n    private fun handleMyAnimeList(data: Uri) {\n        val code = data.getQueryParameter(\"code\")\n        if (code != null) {\n            lifecycleScope.launchIO {\n                trackerManager.myAnimeList.login(code)\n                returnToSettings()\n            }\n        } else {\n            trackerManager.myAnimeList.logout()\n            returnToSettings()\n        }\n    }\n\n    private fun handleShikimori(data: Uri) {\n        val code = data.getQueryParameter(\"code\")\n        if (code != null) {\n            lifecycleScope.launchIO {\n                trackerManager.shikimori.login(code)\n                returnToSettings()\n            }\n        } else {\n            trackerManager.shikimori.logout()\n            returnToSettings()\n        }\n    }\n\n    private fun handleSimkl(data: Uri?) {\n        val code = data?.getQueryParameter(\"code\")\n        if (code != null) {\n            lifecycleScope.launchIO {\n                trackerManager.simkl.login(code)\n                returnToSettings()\n            }\n        } else {\n            trackerManager.simkl.logout()\n            returnToSettings()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.stats\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.presentation.components.TabbedScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.stats.anime.animeStatsTab\nimport eu.kanade.tachiyomi.ui.stats.manga.mangaStatsTab\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object StatsTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter)\n            return TabOptions(\n                index = 8u,\n                title = stringResource(MR.strings.label_stats),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n\n        val tabs = persistentListOf(\n            animeStatsTab(),\n            mangaStatsTab(),\n        )\n        val state = rememberPagerState { tabs.size }\n\n        TabbedScreen(\n            titleRes = MR.strings.label_stats,\n            tabs = tabs,\n            state = state,\n        )\n\n        LaunchedEffect(Unit) {\n            (context as? MainActivity)?.ready = true\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/stats/anime/AnimeStatsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.stats.anime\n\nimport androidx.compose.ui.util.fastDistinctBy\nimport androidx.compose.ui.util.fastFilter\nimport androidx.compose.ui.util.fastMapNotNull\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.fastCountNot\nimport eu.kanade.core.util.fastFilterNot\nimport eu.kanade.presentation.more.stats.StatsScreenState\nimport eu.kanade.presentation.more.stats.data.StatsData\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.track.AnimeTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.entries.anime.interactor.GetLibraryAnime\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_HAS_UNVIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_VIEWED\nimport tachiyomi.domain.track.anime.interactor.GetAnimeTracks\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeStatsScreenModel(\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val getAnimelibAnime: GetLibraryAnime = Injekt.get(),\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId = Injekt.get(),\n    private val getTracks: GetAnimeTracks = Injekt.get(),\n    private val preferences: LibraryPreferences = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n) : StateScreenModel<StatsScreenState>(StatsScreenState.Loading) {\n\n    private val loggedInTrackers by lazy { trackerManager.loggedInTrackers().filter { it is AnimeTracker } }\n\n    init {\n        screenModelScope.launchIO {\n            val animelibAnime = getAnimelibAnime.await()\n\n            val distinctLibraryAnime = animelibAnime.fastDistinctBy { it.id }\n\n            val animeTrackMap = getAnimeTrackMap(distinctLibraryAnime)\n            val scoredAnimeTrackerMap = getScoredAnimeTrackMap(animeTrackMap)\n\n            val meanScore = getTrackMeanScore(scoredAnimeTrackerMap)\n\n            val overviewStatData = StatsData.AnimeOverview(\n                libraryAnimeCount = distinctLibraryAnime.size,\n                completedAnimeCount = distinctLibraryAnime.count {\n                    it.anime.status.toInt() == SAnime.COMPLETED && it.unseenCount == 0L\n                },\n                totalSeenDuration = getWatchTime(distinctLibraryAnime),\n            )\n\n            val titlesStatData = StatsData.AnimeTitles(\n                globalUpdateItemCount = getGlobalUpdateItemCount(animelibAnime),\n                startedAnimeCount = distinctLibraryAnime.count { it.hasStarted },\n                localAnimeCount = distinctLibraryAnime.count { it.anime.isLocal() },\n            )\n\n            val chaptersStatData = StatsData.Episodes(\n                totalEpisodeCount = distinctLibraryAnime.sumOf { it.totalCount }.toInt(),\n                readEpisodeCount = distinctLibraryAnime.sumOf { it.seenCount }.toInt(),\n                downloadCount = downloadManager.getDownloadCount(),\n            )\n\n            val trackersStatData = StatsData.Trackers(\n                trackedTitleCount = animeTrackMap.count { it.value.isNotEmpty() },\n                meanScore = meanScore,\n                trackerCount = loggedInTrackers.size,\n            )\n\n            mutableState.update {\n                StatsScreenState.SuccessAnime(\n                    overview = overviewStatData,\n                    titles = titlesStatData,\n                    episodes = chaptersStatData,\n                    trackers = trackersStatData,\n                )\n            }\n        }\n    }\n\n    private fun getGlobalUpdateItemCount(libraryAnime: List<LibraryAnime>): Int {\n        val includedCategories = preferences.animeUpdateCategories().get().map { it.toLong() }\n        val includedAnime = if (includedCategories.isNotEmpty()) {\n            libraryAnime.filter { it.category in includedCategories }\n        } else {\n            libraryAnime\n        }\n\n        val excludedCategories = preferences.animeUpdateCategoriesExclude().get().map { it.toLong() }\n        val excludedMangaIds = if (excludedCategories.isNotEmpty()) {\n            libraryAnime.fastMapNotNull { anime ->\n                anime.id.takeIf { anime.category in excludedCategories }\n            }\n        } else {\n            emptyList()\n        }\n\n        val updateRestrictions = preferences.autoUpdateItemRestrictions().get()\n        return includedAnime\n            .fastFilterNot { it.anime.id in excludedMangaIds }\n            .fastDistinctBy { it.anime.id }\n            .fastCountNot {\n                (ENTRY_NON_COMPLETED in updateRestrictions && it.anime.status.toInt() == SAnime.COMPLETED) ||\n                    (ENTRY_HAS_UNVIEWED in updateRestrictions && it.unseenCount != 0L) ||\n                    (ENTRY_NON_VIEWED in updateRestrictions && it.totalCount > 0 && !it.hasStarted)\n            }\n    }\n\n    private suspend fun getAnimeTrackMap(libraryAnime: List<LibraryAnime>): Map<Long, List<AnimeTrack>> {\n        val loggedInTrackerIds = loggedInTrackers.map { it.id }.toHashSet()\n        return libraryAnime.associate { anime ->\n            val tracks = getTracks.await(anime.id)\n                .fastFilter { it.trackerId in loggedInTrackerIds }\n\n            anime.id to tracks\n        }\n    }\n\n    private suspend fun getWatchTime(libraryAnimeList: List<LibraryAnime>): Long {\n        var watchTime = 0L\n        libraryAnimeList.forEach { libraryAnime ->\n            getEpisodesByAnimeId.await(libraryAnime.anime.id).forEach { episode ->\n                watchTime += if (episode.seen) {\n                    episode.totalSeconds\n                } else {\n                    episode.lastSecondSeen\n                }\n            }\n        }\n\n        return watchTime\n    }\n\n    private fun getScoredAnimeTrackMap(animeTrackMap: Map<Long, List<AnimeTrack>>): Map<Long, List<AnimeTrack>> {\n        return animeTrackMap.mapNotNull { (animeId, tracks) ->\n            val trackList = tracks.mapNotNull { track ->\n                track.takeIf { it.score > 0.0 }\n            }\n            if (trackList.isEmpty()) return@mapNotNull null\n            animeId to trackList\n        }.toMap()\n    }\n\n    private fun getTrackMeanScore(scoredAnimeTrackMap: Map<Long, List<AnimeTrack>>): Double {\n        return scoredAnimeTrackMap\n            .map { (_, tracks) ->\n                tracks.map(::get10PointScore).average()\n            }\n            .fastFilter { !it.isNaN() }\n            .average()\n    }\n\n    private fun get10PointScore(track: AnimeTrack): Double {\n        val service = trackerManager.get(track.trackerId)!!\n        return service.animeService.get10PointScore(track)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/stats/anime/AnimeStatsTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.stats.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.more.stats.AnimeStatsScreenContent\nimport eu.kanade.presentation.more.stats.StatsScreenState\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\n@Composable\nfun Screen.animeStatsTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n\n    val screenModel = rememberScreenModel { AnimeStatsScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    if (state is StatsScreenState.Loading) {\n        LoadingScreen()\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime,\n        content = { contentPadding, _ ->\n\n            if (state is StatsScreenState.Loading) {\n                LoadingScreen()\n            } else {\n                AnimeStatsScreenContent(\n                    state = state as StatsScreenState.SuccessAnime,\n                    paddingValues = contentPadding,\n                )\n            }\n        },\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/stats/manga/MangaStatsScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.stats.manga\n\nimport androidx.compose.ui.util.fastDistinctBy\nimport androidx.compose.ui.util.fastFilter\nimport androidx.compose.ui.util.fastMapNotNull\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.fastCountNot\nimport eu.kanade.core.util.fastFilterNot\nimport eu.kanade.presentation.more.stats.StatsScreenState\nimport eu.kanade.presentation.more.stats.data.StatsData\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.track.MangaTracker\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport eu.kanade.tachiyomi.source.model.SManga\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.entries.manga.interactor.GetLibraryManga\nimport tachiyomi.domain.history.manga.interactor.GetTotalReadDuration\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_HAS_UNVIEWED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_VIEWED\nimport tachiyomi.domain.track.manga.interactor.GetMangaTracks\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaStatsScreenModel(\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val getLibraryManga: GetLibraryManga = Injekt.get(),\n    private val getTotalReadDuration: GetTotalReadDuration = Injekt.get(),\n    private val getTracks: GetMangaTracks = Injekt.get(),\n    private val preferences: LibraryPreferences = Injekt.get(),\n    private val trackerManager: TrackerManager = Injekt.get(),\n) : StateScreenModel<StatsScreenState>(StatsScreenState.Loading) {\n\n    private val loggedInTrackers by lazy { trackerManager.loggedInTrackers().filter { it is MangaTracker } }\n\n    init {\n        screenModelScope.launchIO {\n            val libraryManga = getLibraryManga.await()\n\n            val distinctLibraryManga = libraryManga.fastDistinctBy { it.id }\n\n            val mangaTrackMap = getMangaTrackMap(distinctLibraryManga)\n            val scoredMangaTrackerMap = getScoredMangaTrackMap(mangaTrackMap)\n\n            val meanScore = getTrackMeanScore(scoredMangaTrackerMap)\n\n            val overviewStatData = StatsData.MangaOverview(\n                libraryMangaCount = distinctLibraryManga.size,\n                completedMangaCount = distinctLibraryManga.count {\n                    it.manga.status.toInt() == SManga.COMPLETED && it.unreadCount == 0L\n                },\n                totalReadDuration = getTotalReadDuration.await(),\n            )\n\n            val titlesStatData = StatsData.MangaTitles(\n                globalUpdateItemCount = getGlobalUpdateItemCount(libraryManga),\n                startedMangaCount = distinctLibraryManga.count { it.hasStarted },\n                localMangaCount = distinctLibraryManga.count { it.manga.isLocal() },\n            )\n\n            val chaptersStatData = StatsData.Chapters(\n                totalChapterCount = distinctLibraryManga.sumOf { it.totalChapters }.toInt(),\n                readChapterCount = distinctLibraryManga.sumOf { it.readCount }.toInt(),\n                downloadCount = downloadManager.getDownloadCount(),\n            )\n\n            val trackersStatData = StatsData.Trackers(\n                trackedTitleCount = mangaTrackMap.count { it.value.isNotEmpty() },\n                meanScore = meanScore,\n                trackerCount = loggedInTrackers.size,\n            )\n\n            mutableState.update {\n                StatsScreenState.SuccessManga(\n                    overview = overviewStatData,\n                    titles = titlesStatData,\n                    chapters = chaptersStatData,\n                    trackers = trackersStatData,\n                )\n            }\n        }\n    }\n\n    private fun getGlobalUpdateItemCount(libraryManga: List<LibraryManga>): Int {\n        val includedCategories = preferences.mangaUpdateCategories().get().map { it.toLong() }\n        val includedManga = if (includedCategories.isNotEmpty()) {\n            libraryManga.filter { it.category in includedCategories }\n        } else {\n            libraryManga\n        }\n\n        val excludedCategories = preferences.mangaUpdateCategoriesExclude().get().map { it.toLong() }\n        val excludedMangaIds = if (excludedCategories.isNotEmpty()) {\n            libraryManga.fastMapNotNull { manga ->\n                manga.id.takeIf { manga.category in excludedCategories }\n            }\n        } else {\n            emptyList()\n        }\n\n        val updateRestrictions = preferences.autoUpdateItemRestrictions().get()\n        return includedManga\n            .fastFilterNot { it.manga.id in excludedMangaIds }\n            .fastDistinctBy { it.manga.id }\n            .fastCountNot {\n                (ENTRY_NON_COMPLETED in updateRestrictions && it.manga.status.toInt() == SManga.COMPLETED) ||\n                    (ENTRY_HAS_UNVIEWED in updateRestrictions && it.unreadCount != 0L) ||\n                    (ENTRY_NON_VIEWED in updateRestrictions && it.totalChapters > 0 && !it.hasStarted)\n            }\n    }\n\n    private suspend fun getMangaTrackMap(libraryManga: List<LibraryManga>): Map<Long, List<MangaTrack>> {\n        val loggedInTrackerIds = loggedInTrackers.map { it.id }.toHashSet()\n        return libraryManga.associate { manga ->\n            val tracks = getTracks.await(manga.id)\n                .fastFilter { it.trackerId in loggedInTrackerIds }\n\n            manga.id to tracks\n        }\n    }\n\n    private fun getScoredMangaTrackMap(mangaTrackMap: Map<Long, List<MangaTrack>>): Map<Long, List<MangaTrack>> {\n        return mangaTrackMap.mapNotNull { (mangaId, tracks) ->\n            val trackList = tracks.mapNotNull { track ->\n                track.takeIf { it.score > 0.0 }\n            }\n            if (trackList.isEmpty()) return@mapNotNull null\n            mangaId to trackList\n        }.toMap()\n    }\n\n    private fun getTrackMeanScore(scoredMangaTrackMap: Map<Long, List<MangaTrack>>): Double {\n        return scoredMangaTrackMap\n            .map { (_, tracks) ->\n                tracks.map(::get10PointScore).average()\n            }\n            .fastFilter { !it.isNaN() }\n            .average()\n    }\n\n    private fun get10PointScore(track: MangaTrack): Double {\n        val service = trackerManager.get(track.trackerId)!!\n        return service.mangaService.get10PointScore(track)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/stats/manga/MangaStatsTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.stats.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.more.stats.MangaStatsScreenContent\nimport eu.kanade.presentation.more.stats.StatsScreenState\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.screens.LoadingScreen\n\n@Composable\nfun Screen.mangaStatsTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n\n    val screenModel = rememberScreenModel { MangaStatsScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    if (state is StatsScreenState.Loading) {\n        LoadingScreen()\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_manga,\n        content = { contentPadding, _ ->\n\n            if (state is StatsScreenState.Loading) {\n                LoadingScreen()\n            } else {\n                MangaStatsScreenContent(\n                    state = state as StatsScreenState.SuccessManga,\n                    paddingValues = contentPadding,\n                )\n            }\n        },\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/storage/CommonStorageScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.storage\n\nimport androidx.compose.ui.graphics.Color\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.presentation.more.storage.StorageItem\nimport eu.kanade.presentation.more.storage.StorageScreenState\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharedFlow\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.update\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport kotlin.random.Random\n\nabstract class CommonStorageScreenModel<T>(\n    private val downloadCacheChanges: SharedFlow<Unit>,\n    private val downloadCacheIsInitializing: StateFlow<Boolean>,\n    private val libraries: Flow<List<T>>,\n    private val categories: (Boolean) -> Flow<List<Category>>,\n    private val getDownloadSize: T.() -> Long,\n    private val getDownloadCount: T.() -> Int,\n    private val getId: T.() -> Long,\n    private val getCategoryId: T.() -> Long,\n    private val getTitle: T.() -> String,\n    private val getThumbnail: T.() -> String?,\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n) : StateScreenModel<StorageScreenState>(StorageScreenState.Loading) {\n\n    private val selectedCategory = MutableStateFlow(AllCategory)\n\n    init {\n        screenModelScope.launchIO {\n            val hideHiddenCategories = libraryPreferences.hideHiddenCategoriesSettings().get()\n\n            combine(\n                flow = downloadCacheChanges,\n                flow2 = downloadCacheIsInitializing,\n                flow3 = libraries,\n                flow4 = categories(hideHiddenCategories),\n                flow5 = selectedCategory,\n                transform = { _, _, libraries, categories, selectedCategory ->\n                    // initialize the screen with an empty state\n                    mutableState.update {\n                        StorageScreenState.Success(\n                            selectedCategory = selectedCategory,\n                            categories = listOf(AllCategory, *categories.toTypedArray()),\n                            items = emptyList(),\n                        )\n                    }\n\n                    val distinctLibraries = libraries.distinctBy {\n                        it.getId()\n                    }.filter { item ->\n                        val categoryId = item.getCategoryId()\n                        when {\n                            // if all is selected, we want to make sure to include all entries\n                            // from only visible categories\n                            selectedCategory == AllCategory -> categories.find {\n                                it.id == categoryId\n                            } != null\n\n                            // else include only entries from the selected category\n                            else -> categoryId == selectedCategory.id\n                        }\n                    }\n\n                    distinctLibraries.forEach { library ->\n                        val random = Random(library.getId())\n                        val item = StorageItem(\n                            id = library.getId(),\n                            title = library.getTitle(),\n                            size = library.getDownloadSize(),\n                            thumbnail = library.getThumbnail(),\n                            entriesCount = library.getDownloadCount(),\n                            color = Color(\n                                random.nextInt(255),\n                                random.nextInt(255),\n                                random.nextInt(255),\n                            ),\n                        )\n\n                        mutableState.update { state ->\n                            when (state) {\n                                is StorageScreenState.Success -> state.copy(\n                                    items = (state.items + item).sortedByDescending { it.size },\n                                )\n\n                                else -> state\n                            }\n                        }\n                    }\n                },\n            ).collectLatest {}\n        }\n    }\n\n    fun setSelectedCategory(category: Category) {\n        selectedCategory.update { category }\n    }\n\n    abstract fun deleteEntry(id: Long)\n\n    companion object {\n        /**\n         * A dummy category used to display all entries irrespective of the category.\n         */\n        private val AllCategory = Category(\n            id = -1L,\n            name = \"All\",\n            order = 0L,\n            flags = 0L,\n            hidden = false,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.storage\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.presentation.components.TabbedScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.storage.anime.animeStorageTab\nimport eu.kanade.tachiyomi.ui.storage.manga.mangaStorageTab\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object StorageTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter)\n            return TabOptions(\n                index = 8u,\n                title = stringResource(AYMR.strings.label_storage),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n\n        val tabs = persistentListOf(\n            animeStorageTab(),\n            mangaStorageTab(),\n        )\n        val state = rememberPagerState { tabs.size }\n\n        TabbedScreen(\n            titleRes = AYMR.strings.label_storage,\n            tabs = tabs,\n            state = state,\n        )\n\n        LaunchedEffect(Unit) {\n            (context as? MainActivity)?.ready = true\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/storage/anime/AnimeStorageScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.storage.anime\n\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.ui.storage.CommonStorageScreenModel\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.anime.interactor.GetVisibleAnimeCategories\nimport tachiyomi.domain.entries.anime.interactor.GetLibraryAnime\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass AnimeStorageScreenModel(\n    downloadCache: AnimeDownloadCache = Injekt.get(),\n    private val getLibraries: GetLibraryAnime = Injekt.get(),\n    getCategories: GetAnimeCategories = Injekt.get(),\n    getVisibleCategories: GetVisibleAnimeCategories = Injekt.get(),\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n) : CommonStorageScreenModel<LibraryAnime>(\n    downloadCacheChanges = downloadCache.changes,\n    downloadCacheIsInitializing = downloadCache.isInitializing,\n    libraries = getLibraries.subscribe(),\n    categories = { hideHiddenCategories ->\n        if (hideHiddenCategories) {\n            getVisibleCategories.subscribe()\n        } else {\n            getCategories.subscribe()\n        }\n    },\n    getDownloadSize = { downloadManager.getDownloadSize(anime) },\n    getDownloadCount = { downloadManager.getDownloadCount(anime) },\n    getId = { id },\n    getCategoryId = { category },\n    getTitle = { anime.title },\n    getThumbnail = { anime.thumbnailUrl },\n) {\n    override fun deleteEntry(id: Long) {\n        screenModelScope.launchNonCancellable {\n            val anime = getLibraries.await().find {\n                it.id == id\n            }?.anime ?: return@launchNonCancellable\n            val source = sourceManager.get(anime.source) ?: return@launchNonCancellable\n            downloadManager.deleteAnime(anime, source)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/storage/anime/AnimeStorageTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.storage.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.more.storage.StorageScreenContent\nimport tachiyomi.i18n.aniyomi.AYMR\n\n@Composable\nfun Screen.animeStorageTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n\n    val screenModel = rememberScreenModel { AnimeStorageScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime,\n        content = { contentPadding, _ ->\n            StorageScreenContent(\n                state = state,\n                isManga = false,\n                contentPadding = contentPadding,\n                onCategorySelected = screenModel::setSelectedCategory,\n                onDelete = screenModel::deleteEntry,\n            )\n        },\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/storage/manga/MangaStorageScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.storage.manga\n\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.storage.CommonStorageScreenModel\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.category.manga.interactor.GetVisibleMangaCategories\nimport tachiyomi.domain.entries.manga.interactor.GetLibraryManga\nimport tachiyomi.domain.library.manga.LibraryManga\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass MangaStorageScreenModel(\n    downloadCache: MangaDownloadCache = Injekt.get(),\n    private val getLibraries: GetLibraryManga = Injekt.get(),\n    getCategories: GetMangaCategories = Injekt.get(),\n    getVisibleCategories: GetVisibleMangaCategories = Injekt.get(),\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n) : CommonStorageScreenModel<LibraryManga>(\n    downloadCacheChanges = downloadCache.changes,\n    downloadCacheIsInitializing = downloadCache.isInitializing,\n    libraries = getLibraries.subscribe(),\n    categories = { hideHiddenCategories ->\n        if (hideHiddenCategories) {\n            getVisibleCategories.subscribe()\n        } else {\n            getCategories.subscribe()\n        }\n    },\n    getDownloadSize = { downloadManager.getDownloadSize(manga) },\n    getDownloadCount = { downloadManager.getDownloadCount(manga) },\n    getId = { id },\n    getCategoryId = { category },\n    getTitle = { manga.title },\n    getThumbnail = { manga.thumbnailUrl },\n) {\n    override fun deleteEntry(id: Long) {\n        screenModelScope.launchNonCancellable {\n            val manga = getLibraries.await().find {\n                it.id == id\n            }?.manga ?: return@launchNonCancellable\n            val source = sourceManager.get(manga.source) ?: return@launchNonCancellable\n            downloadManager.deleteManga(manga, source)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/storage/manga/MangaStorageTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.storage.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.more.storage.StorageScreenContent\nimport tachiyomi.i18n.aniyomi.AYMR\n\n@Composable\nfun Screen.mangaStorageTab(): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n\n    val screenModel = rememberScreenModel { MangaStorageScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    return TabContent(\n        titleRes = AYMR.strings.label_manga,\n        content = { contentPadding, _ ->\n            StorageScreenContent(\n                state = state,\n                isManga = true,\n                contentPadding = contentPadding,\n                onCategorySelected = screenModel::setSelectedCategory,\n                onDelete = screenModel::deleteEntry,\n            )\n        },\n        navigateUp = navigator::pop,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.updates\n\nimport androidx.compose.animation.graphics.res.animatedVectorResource\nimport androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter\nimport androidx.compose.animation.graphics.vector.AnimatedImageVector\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.navigator.Navigator\nimport cafe.adriel.voyager.navigator.tab.LocalTabNavigator\nimport cafe.adriel.voyager.navigator.tab.TabOptions\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.presentation.components.TabbedScreen\nimport eu.kanade.presentation.util.Tab\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.download.DownloadsTab\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.updates.anime.animeUpdatesTab\nimport eu.kanade.tachiyomi.ui.updates.manga.mangaUpdatesTab\nimport kotlinx.collections.immutable.persistentListOf\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\ndata object UpdatesTab : Tab {\n\n    override val options: TabOptions\n        @Composable\n        get() {\n            val isSelected = LocalTabNavigator.current.current.key == key\n            val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter)\n            val index: UShort = when (currentNavigationStyle()) {\n                NavStyle.MOVE_UPDATES_TO_MORE -> 5u\n                NavStyle.MOVE_HISTORY_TO_MORE -> 2u\n                NavStyle.MOVE_BROWSE_TO_MORE -> 2u\n                NavStyle.MOVE_MANGA_TO_MORE -> 1u\n            }\n            return TabOptions(\n                index = index,\n                title = stringResource(MR.strings.label_recent_updates),\n                icon = rememberAnimatedVectorPainter(image, isSelected),\n            )\n        }\n    override suspend fun onReselect(navigator: Navigator) {\n        navigator.push(DownloadsTab)\n    }\n\n    @Composable\n    override fun Content() {\n        val context = LocalContext.current\n        val fromMore = currentNavigationStyle() == NavStyle.MOVE_UPDATES_TO_MORE\n\n        TabbedScreen(\n            titleRes = MR.strings.label_recent_updates,\n            tabs = persistentListOf(\n                animeUpdatesTab(context, fromMore),\n                mangaUpdatesTab(context, fromMore),\n            ),\n        )\n\n        LaunchedEffect(Unit) {\n            (context as? MainActivity)?.ready = true\n        }\n    }\n}\n\nprivate const val TAB_ANIME = 0\nprivate const val TAB_MANGA = 1\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/updates/anime/AnimeUpdatesScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.updates.anime\n\nimport android.app.Application\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.asState\nimport eu.kanade.core.util.addOrRemove\nimport eu.kanade.core.util.insertSeparators\nimport eu.kanade.domain.items.episode.interactor.SetSeenStatus\nimport eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction\nimport eu.kanade.presentation.updates.anime.AnimeUpdatesUiModel\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport kotlinx.collections.immutable.PersistentList\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toPersistentList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.items.episode.interactor.GetEpisode\nimport tachiyomi.domain.items.episode.interactor.UpdateEpisode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.updates.anime.interactor.GetAnimeUpdates\nimport tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.ZonedDateTime\n\nclass AnimeUpdatesScreenModel(\n    private val sourceManager: AnimeSourceManager = Injekt.get(),\n    private val downloadManager: AnimeDownloadManager = Injekt.get(),\n    private val downloadCache: AnimeDownloadCache = Injekt.get(),\n    private val updateEpisode: UpdateEpisode = Injekt.get(),\n    private val setSeenStatus: SetSeenStatus = Injekt.get(),\n    private val getUpdates: GetAnimeUpdates = Injekt.get(),\n    private val getAnime: GetAnime = Injekt.get(),\n    private val getEpisode: GetEpisode = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n    downloadPreferences: DownloadPreferences = Injekt.get(),\n) : StateScreenModel<AnimeUpdatesScreenModel.State>(State()) {\n\n    private val _events: Channel<Event> = Channel(Int.MAX_VALUE)\n    val events: Flow<Event> = _events.receiveAsFlow()\n\n    val lastUpdated by libraryPreferences.lastUpdatedTimestamp().asState(screenModelScope)\n\n    val useExternalDownloader = downloadPreferences.useExternalDownloader().get()\n\n    // First and last selected index in list\n    private val selectedPositions: Array<Int> = arrayOf(-1, -1)\n    private val selectedEpisodeIds: HashSet<Long> = HashSet()\n\n    init {\n        screenModelScope.launchIO {\n            // Set date limit for recent episodes\n\n            val limit = ZonedDateTime.now().minusMonths(3).toInstant()\n            combine(\n                getUpdates.subscribe(limit).distinctUntilChanged(),\n                downloadCache.changes,\n                downloadManager.queueState,\n            ) { updates, _, _ -> updates }\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _events.send(Event.InternalError)\n                }\n                .collectLatest { updates ->\n                    mutableState.update {\n                        it.copy(\n                            isLoading = false,\n                            items = updates.toUpdateItems(),\n                        )\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            merge(downloadManager.statusFlow(), downloadManager.progressFlow())\n                .catch { logcat(LogPriority.ERROR, it) }\n                .collect(this@AnimeUpdatesScreenModel::updateDownloadState)\n        }\n    }\n\n    private fun List<AnimeUpdatesWithRelations>.toUpdateItems(): PersistentList<AnimeUpdatesItem> {\n        return this\n            .map { update ->\n                val activeDownload = downloadManager.getQueuedDownloadOrNull(update.episodeId)\n                val downloaded = downloadManager.isEpisodeDownloaded(\n                    update.episodeName,\n                    update.scanlator,\n                    update.animeTitle,\n                    update.sourceId,\n                )\n                val downloadState = when {\n                    activeDownload != null -> activeDownload.status\n                    downloaded -> AnimeDownload.State.DOWNLOADED\n                    else -> AnimeDownload.State.NOT_DOWNLOADED\n                }\n                AnimeUpdatesItem(\n                    update = update,\n                    downloadStateProvider = { downloadState },\n                    downloadProgressProvider = { activeDownload?.progress ?: 0 },\n                    selected = update.episodeId in selectedEpisodeIds,\n                )\n            }\n            .toPersistentList()\n    }\n\n    fun updateLibrary(): Boolean {\n        val started = AnimeLibraryUpdateJob.startNow(Injekt.get<Application>())\n        screenModelScope.launch {\n            _events.send(Event.LibraryUpdateTriggered(started))\n        }\n        return started\n    }\n\n    /**\n     * Update status of episodes.\n     *\n     * @param download download object containing progress.\n     */\n    private fun updateDownloadState(download: AnimeDownload) {\n        mutableState.update { state ->\n            val newItems = state.items.mutate { list ->\n                val modifiedIndex = list.indexOfFirst { it.update.episodeId == download.episode.id }\n                if (modifiedIndex < 0) return@mutate\n\n                val item = list[modifiedIndex]\n                list[modifiedIndex] = item.copy(\n                    downloadStateProvider = { download.status },\n                    downloadProgressProvider = { download.progress },\n                )\n            }\n            state.copy(items = newItems)\n        }\n    }\n\n    fun downloadEpisodes(items: List<AnimeUpdatesItem>, action: EpisodeDownloadAction) {\n        if (items.isEmpty()) return\n        screenModelScope.launch {\n            when (action) {\n                EpisodeDownloadAction.START -> {\n                    downloadEpisodes(items)\n                    if (items.any { it.downloadStateProvider() == AnimeDownload.State.ERROR }) {\n                        downloadManager.startDownloads()\n                    }\n                }\n                EpisodeDownloadAction.START_NOW -> {\n                    val episodeId = items.singleOrNull()?.update?.episodeId ?: return@launch\n                    startDownloadingNow(episodeId)\n                }\n                EpisodeDownloadAction.CANCEL -> {\n                    val episodeId = items.singleOrNull()?.update?.episodeId ?: return@launch\n                    cancelDownload(episodeId)\n                }\n                EpisodeDownloadAction.DELETE -> {\n                    deleteEpisodes(items)\n                }\n                EpisodeDownloadAction.SHOW_QUALITIES -> {\n                    val update = items.singleOrNull()?.update ?: return@launch\n                    showQualitiesDialog(update)\n                }\n            }\n            toggleAllSelection(false)\n        }\n    }\n\n    private fun startDownloadingNow(episodeId: Long) {\n        downloadManager.startDownloadNow(episodeId)\n    }\n\n    private fun cancelDownload(episodeId: Long) {\n        val activeDownload = downloadManager.getQueuedDownloadOrNull(episodeId) ?: return\n        downloadManager.cancelQueuedDownloads(listOf(activeDownload))\n        updateDownloadState(activeDownload.apply { status = AnimeDownload.State.NOT_DOWNLOADED })\n    }\n\n    /**\n     * Mark the selected updates list as seen/unseen.\n     * @param updates the list of selected updates.\n     * @param seen whether to mark episodes as seen or unseen.\n     */\n    fun markUpdatesSeen(updates: List<AnimeUpdatesItem>, seen: Boolean) {\n        screenModelScope.launchIO {\n            setSeenStatus.await(\n                seen = seen,\n                episodes = updates\n                    .mapNotNull { getEpisode.await(it.update.episodeId) }\n                    .toTypedArray(),\n            )\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Bookmarks the given list of episodes.\n     * @param updates the list of episodes to bookmark.\n     */\n    fun bookmarkUpdates(updates: List<AnimeUpdatesItem>, bookmark: Boolean) {\n        screenModelScope.launchIO {\n            updates\n                .filterNot { it.update.bookmark == bookmark }\n                .map { EpisodeUpdate(id = it.update.episodeId, bookmark = bookmark) }\n                .let { updateEpisode.awaitAll(it) }\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Fillermarks the given list of episodes.\n     * @param updates the list of episodes to fillermark.\n     */\n    fun fillermarkUpdates(updates: List<AnimeUpdatesItem>, fillermark: Boolean) {\n        screenModelScope.launchIO {\n            updates\n                .filterNot { it.update.fillermark == fillermark }\n                .map { EpisodeUpdate(id = it.update.episodeId, fillermark = fillermark) }\n                .let { updateEpisode.awaitAll(it) }\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Downloads the given list of episodes with the manager.\n     * @param updatesItem the list of episodes to download.\n     */\n    private fun downloadEpisodes(updatesItem: List<AnimeUpdatesItem>, alt: Boolean = false) {\n        screenModelScope.launchNonCancellable {\n            val groupedUpdates = updatesItem.groupBy { it.update.animeId }.values\n            for (updates in groupedUpdates) {\n                val animeId = updates.first().update.animeId\n                val anime = getAnime.await(animeId) ?: continue\n                // Don't download if source isn't available\n                sourceManager.get(anime.source) ?: continue\n                val episodes = updates.mapNotNull { getEpisode.await(it.update.episodeId) }\n                downloadManager.downloadEpisodes(anime, episodes, true, alt)\n            }\n        }\n    }\n\n    /**\n     * Delete selected episodes\n     *\n     * @param updatesItem list of episodes\n     */\n    fun deleteEpisodes(updatesItem: List<AnimeUpdatesItem>) {\n        screenModelScope.launchNonCancellable {\n            updatesItem\n                .groupBy { it.update.animeId }\n                .entries\n                .forEach { (animeId, updates) ->\n                    val anime = getAnime.await(animeId) ?: return@forEach\n                    val source = sourceManager.get(anime.source) ?: return@forEach\n                    val episodes = updates.mapNotNull { getEpisode.await(it.update.episodeId) }\n                    downloadManager.deleteEpisodes(episodes, anime, source)\n                }\n        }\n        toggleAllSelection(false)\n    }\n\n    fun showConfirmDeleteEpisodes(updatesItem: List<AnimeUpdatesItem>) {\n        setDialog(Dialog.DeleteConfirmation(updatesItem))\n    }\n\n    private fun showQualitiesDialog(update: AnimeUpdatesWithRelations) {\n        setDialog(\n            Dialog.ShowQualities(\n                update.episodeName,\n                update.episodeId,\n                update.animeId,\n                update.sourceId,\n            ),\n        )\n    }\n\n    fun toggleSelection(\n        item: AnimeUpdatesItem,\n        selected: Boolean,\n        userSelected: Boolean = false,\n        fromLongPress: Boolean = false,\n    ) {\n        mutableState.update { state ->\n            val newItems = state.items.toMutableList().apply {\n                val selectedIndex = indexOfFirst { it.update.episodeId == item.update.episodeId }\n                if (selectedIndex < 0) return@apply\n\n                val selectedItem = get(selectedIndex)\n                if (selectedItem.selected == selected) return@apply\n\n                val firstSelection = none { it.selected }\n                set(selectedIndex, selectedItem.copy(selected = selected))\n                selectedEpisodeIds.addOrRemove(item.update.episodeId, selected)\n\n                if (selected && userSelected && fromLongPress) {\n                    if (firstSelection) {\n                        selectedPositions[0] = selectedIndex\n                        selectedPositions[1] = selectedIndex\n                    } else {\n                        // Try to select the items in-between when possible\n                        val range: IntRange\n                        if (selectedIndex < selectedPositions[0]) {\n                            range = selectedIndex + 1..<selectedPositions[0]\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            range = (selectedPositions[1] + 1)..<selectedIndex\n                            selectedPositions[1] = selectedIndex\n                        } else {\n                            // Just select itself\n                            range = IntRange.EMPTY\n                        }\n\n                        range.forEach {\n                            val inbetweenItem = get(it)\n                            if (!inbetweenItem.selected) {\n                                selectedEpisodeIds.add(inbetweenItem.update.episodeId)\n                                set(it, inbetweenItem.copy(selected = true))\n                            }\n                        }\n                    }\n                } else if (userSelected && !fromLongPress) {\n                    if (!selected) {\n                        if (selectedIndex == selectedPositions[0]) {\n                            selectedPositions[0] = indexOfFirst { it.selected }\n                        } else if (selectedIndex == selectedPositions[1]) {\n                            selectedPositions[1] = indexOfLast { it.selected }\n                        }\n                    } else {\n                        if (selectedIndex < selectedPositions[0]) {\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            selectedPositions[1] = selectedIndex\n                        }\n                    }\n                }\n            }\n            state.copy(items = newItems.toPersistentList())\n        }\n    }\n\n    fun toggleAllSelection(selected: Boolean) {\n        mutableState.update { state ->\n            val newItems = state.items.map {\n                selectedEpisodeIds.addOrRemove(it.update.episodeId, selected)\n                it.copy(selected = selected)\n            }\n            state.copy(items = newItems.toPersistentList())\n        }\n\n        selectedPositions[0] = -1\n        selectedPositions[1] = -1\n    }\n\n    fun invertSelection() {\n        mutableState.update { state ->\n            val newItems = state.items.map {\n                selectedEpisodeIds.addOrRemove(it.update.episodeId, !it.selected)\n                it.copy(selected = !it.selected)\n            }\n            state.copy(items = newItems.toPersistentList())\n        }\n        selectedPositions[0] = -1\n        selectedPositions[1] = -1\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    fun resetNewUpdatesCount() {\n        libraryPreferences.newAnimeUpdatesCount().set(0)\n    }\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val items: PersistentList<AnimeUpdatesItem> = persistentListOf(),\n        val dialog: Dialog? = null,\n    ) {\n        val selected = items.filter { it.selected }\n        val selectionMode = selected.isNotEmpty()\n\n        fun getUiModel(): List<AnimeUpdatesUiModel> {\n            return items\n                .map { AnimeUpdatesUiModel.Item(it) }\n                .insertSeparators { before, after ->\n                    val beforeDate = before?.item?.update?.dateFetch?.toLocalDate()\n                    val afterDate = after?.item?.update?.dateFetch?.toLocalDate()\n                    when {\n                        beforeDate != afterDate && afterDate != null -> AnimeUpdatesUiModel.Header(afterDate)\n                        // Return null to avoid adding a separator between two items.\n                        else -> null\n                    }\n                }\n        }\n    }\n\n    sealed interface Dialog {\n        data class DeleteConfirmation(val toDelete: List<AnimeUpdatesItem>) : Dialog\n        data class ShowQualities(\n            val episodeTitle: String,\n            val episodeId: Long,\n            val animeId: Long,\n            val sourceId: Long,\n        ) : Dialog\n    }\n\n    sealed interface Event {\n        data object InternalError : Event\n        data class LibraryUpdateTriggered(val started: Boolean) : Event\n    }\n}\n\n@Immutable\ndata class AnimeUpdatesItem(\n    val update: AnimeUpdatesWithRelations,\n    val downloadStateProvider: () -> AnimeDownload.State,\n    val downloadProgressProvider: () -> Int,\n    val selected: Boolean = false,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/updates/anime/AnimeUpdatesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.updates.anime\n\nimport android.content.Context\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.CalendarMonth\nimport androidx.compose.material.icons.outlined.FlipToBack\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material.icons.outlined.SelectAll\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisposableEffect\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.NavigatorAdaptiveSheet\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.entries.anime.EpisodeOptionsDialogScreen\nimport eu.kanade.presentation.updates.UpdatesDeleteConfirmationDialog\nimport eu.kanade.presentation.updates.anime.AnimeUpdateScreen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport mihon.feature.upcoming.anime.UpcomingAnimeScreen\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport uy.kohesive.injekt.injectLazy\n\n@Composable\nfun Screen.animeUpdatesTab(\n    context: Context,\n    fromMore: Boolean,\n): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { AnimeUpdatesScreenModel() }\n    val scope = rememberCoroutineScope()\n    val state by screenModel.state.collectAsState()\n\n    val navigateUp: (() -> Unit)? = if (fromMore) {\n        {\n            if (navigator.lastItem == HomeScreen) {\n                scope.launch { HomeScreen.openTab(HomeScreen.Tab.AnimeLib()) }\n            } else {\n                navigator.pop()\n            }\n        }\n    } else {\n        null\n    }\n\n    suspend fun openEpisode(updateItem: AnimeUpdatesItem, altPlayer: Boolean = false) {\n        val playerPreferences: PlayerPreferences by injectLazy()\n        val update = updateItem.update\n        val extPlayer = playerPreferences.alwaysUseExternalPlayer().get() != altPlayer\n        MainActivity.startPlayerActivity(context, update.animeId, update.episodeId, extPlayer)\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_anime_updates,\n        searchEnabled = false,\n        content = { contentPadding, _ ->\n            AnimeUpdateScreen(\n                state = state,\n                snackbarHostState = screenModel.snackbarHostState,\n                lastUpdated = screenModel.lastUpdated,\n                onClickCover = { item -> navigator.push(AnimeScreen(item.update.animeId)) },\n                onSelectAll = screenModel::toggleAllSelection,\n                onInvertSelection = screenModel::invertSelection,\n                onUpdateLibrary = screenModel::updateLibrary,\n                onDownloadEpisode = screenModel::downloadEpisodes,\n                onMultiBookmarkClicked = screenModel::bookmarkUpdates,\n                onMultiFillermarkClicked = screenModel::fillermarkUpdates,\n                onMultiMarkAsSeenClicked = screenModel::markUpdatesSeen,\n                onMultiDeleteClicked = screenModel::showConfirmDeleteEpisodes,\n                onUpdateSelected = screenModel::toggleSelection,\n                onOpenEpisode = { updateItem: AnimeUpdatesItem, altPlayer: Boolean ->\n                    scope.launchIO {\n                        openEpisode(updateItem, altPlayer)\n                    }\n                    Unit\n                },\n            )\n\n            val onDismissDialog = { screenModel.setDialog(null) }\n            when (val dialog = state.dialog) {\n                is AnimeUpdatesScreenModel.Dialog.DeleteConfirmation -> {\n                    UpdatesDeleteConfirmationDialog(\n                        onDismissRequest = onDismissDialog,\n                        onConfirm = { screenModel.deleteEpisodes(dialog.toDelete) },\n                        isManga = false,\n                    )\n                }\n                is AnimeUpdatesScreenModel.Dialog.ShowQualities -> {\n                    EpisodeOptionsDialogScreen.onDismissDialog = onDismissDialog\n                    NavigatorAdaptiveSheet(\n                        screen = EpisodeOptionsDialogScreen(\n                            useExternalDownloader = screenModel.useExternalDownloader,\n                            episodeTitle = dialog.episodeTitle,\n                            episodeId = dialog.episodeId,\n                            animeId = dialog.animeId,\n                            sourceId = dialog.sourceId,\n                        ),\n                        onDismissRequest = onDismissDialog,\n                    )\n                }\n                null -> {}\n            }\n\n            LaunchedEffect(Unit) {\n                screenModel.events.collectLatest { event ->\n                    when (event) {\n                        AnimeUpdatesScreenModel.Event.InternalError -> screenModel.snackbarHostState.showSnackbar(\n                            context.stringResource(\n                                MR.strings.internal_error,\n                            ),\n                        )\n                        is AnimeUpdatesScreenModel.Event.LibraryUpdateTriggered -> {\n                            val msg = if (event.started) {\n                                MR.strings.updating_library\n                            } else {\n                                MR.strings.update_already_running\n                            }\n                            screenModel.snackbarHostState.showSnackbar(context.stringResource(msg))\n                        }\n                    }\n                }\n            }\n\n            LaunchedEffect(state.selectionMode) {\n                HomeScreen.showBottomNav(!state.selectionMode)\n            }\n\n            LaunchedEffect(state.isLoading) {\n                if (!state.isLoading) {\n                    (context as? MainActivity)?.ready = true\n                }\n            }\n            DisposableEffect(Unit) {\n                screenModel.resetNewUpdatesCount()\n\n                onDispose {\n                    screenModel.resetNewUpdatesCount()\n                }\n            }\n        },\n        actions =\n        if (screenModel.state.collectAsState().value.selected.isNotEmpty()) {\n            persistentListOf(\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_select_all),\n                    icon = Icons.Outlined.SelectAll,\n                    onClick = { screenModel.toggleAllSelection(true) },\n                ),\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_select_inverse),\n                    icon = Icons.Outlined.FlipToBack,\n                    onClick = { screenModel.invertSelection() },\n                ),\n            )\n        } else {\n            persistentListOf(\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_view_upcoming),\n                    icon = Icons.Outlined.CalendarMonth,\n                    onClick = { navigator.push(UpcomingAnimeScreen()) },\n                ),\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_update_library),\n                    icon = Icons.Outlined.Refresh,\n                    onClick = { screenModel.updateLibrary() },\n                ),\n            )\n        },\n        navigateUp = navigateUp,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/updates/manga/MangaUpdatesScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.updates.manga\n\nimport android.app.Application\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.preference.asState\nimport eu.kanade.core.util.addOrRemove\nimport eu.kanade.core.util.insertSeparators\nimport eu.kanade.domain.items.chapter.interactor.SetReadStatus\nimport eu.kanade.presentation.entries.manga.components.ChapterDownloadAction\nimport eu.kanade.presentation.updates.manga.MangaUpdatesUiModel\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.data.download.manga.model.MangaDownload\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport kotlinx.collections.immutable.PersistentList\nimport kotlinx.collections.immutable.mutate\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.toPersistentList\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.merge\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.launchIO\nimport tachiyomi.core.common.util.lang.launchNonCancellable\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.items.chapter.interactor.GetChapter\nimport tachiyomi.domain.items.chapter.interactor.UpdateChapter\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.updates.manga.interactor.GetMangaUpdates\nimport tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.ZonedDateTime\n\nclass MangaUpdatesScreenModel(\n    private val sourceManager: MangaSourceManager = Injekt.get(),\n    private val downloadManager: MangaDownloadManager = Injekt.get(),\n    private val downloadCache: MangaDownloadCache = Injekt.get(),\n    private val updateChapter: UpdateChapter = Injekt.get(),\n    private val setReadStatus: SetReadStatus = Injekt.get(),\n    private val getUpdates: GetMangaUpdates = Injekt.get(),\n    private val getManga: GetManga = Injekt.get(),\n    private val getChapter: GetChapter = Injekt.get(),\n    private val libraryPreferences: LibraryPreferences = Injekt.get(),\n    val snackbarHostState: SnackbarHostState = SnackbarHostState(),\n) : StateScreenModel<MangaUpdatesScreenModel.State>(State()) {\n\n    private val _events: Channel<Event> = Channel(Int.MAX_VALUE)\n    val events: Flow<Event> = _events.receiveAsFlow()\n\n    val lastUpdated by libraryPreferences.lastUpdatedTimestamp().asState(screenModelScope)\n\n    // First and last selected index in list\n    private val selectedPositions: Array<Int> = arrayOf(-1, -1)\n    private val selectedChapterIds: HashSet<Long> = HashSet()\n\n    init {\n        screenModelScope.launchIO {\n            // Set date limit for recent chapters\n            val limit = ZonedDateTime.now().minusMonths(3).toInstant()\n\n            combine(\n                getUpdates.subscribe(limit).distinctUntilChanged(),\n                downloadCache.changes,\n                downloadManager.queueState,\n            ) { updates, _, _ -> updates }\n                .catch {\n                    logcat(LogPriority.ERROR, it)\n                    _events.send(Event.InternalError)\n                }\n                .collectLatest { updates ->\n                    mutableState.update {\n                        it.copy(\n                            isLoading = false,\n                            items = updates.toUpdateItems(),\n                        )\n                    }\n                }\n        }\n\n        screenModelScope.launchIO {\n            merge(downloadManager.statusFlow(), downloadManager.progressFlow())\n                .catch { logcat(LogPriority.ERROR, it) }\n                .collect(this@MangaUpdatesScreenModel::updateDownloadState)\n        }\n    }\n\n    private fun List<MangaUpdatesWithRelations>.toUpdateItems(): PersistentList<MangaUpdatesItem> {\n        return this\n            .map { update ->\n                val activeDownload = downloadManager.getQueuedDownloadOrNull(update.chapterId)\n                val downloaded = downloadManager.isChapterDownloaded(\n                    update.chapterName,\n                    update.scanlator,\n                    update.mangaTitle,\n                    update.sourceId,\n                )\n                val downloadState = when {\n                    activeDownload != null -> activeDownload.status\n                    downloaded -> MangaDownload.State.DOWNLOADED\n                    else -> MangaDownload.State.NOT_DOWNLOADED\n                }\n                MangaUpdatesItem(\n                    update = update,\n                    downloadStateProvider = { downloadState },\n                    downloadProgressProvider = { activeDownload?.progress ?: 0 },\n                    selected = update.chapterId in selectedChapterIds,\n                )\n            }\n            .toPersistentList()\n    }\n\n    fun updateLibrary(): Boolean {\n        val started = MangaLibraryUpdateJob.startNow(Injekt.get<Application>())\n        screenModelScope.launch {\n            _events.send(Event.LibraryUpdateTriggered(started))\n        }\n        return started\n    }\n\n    /**\n     * Update status of chapters.\n     *\n     * @param download download object containing progress.\n     */\n    private fun updateDownloadState(download: MangaDownload) {\n        mutableState.update { state ->\n            val newItems = state.items.mutate { list ->\n                val modifiedIndex = list.indexOfFirst { it.update.chapterId == download.chapter.id }\n                if (modifiedIndex < 0) return@mutate\n\n                val item = list[modifiedIndex]\n                list[modifiedIndex] = item.copy(\n                    downloadStateProvider = { download.status },\n                    downloadProgressProvider = { download.progress },\n                )\n            }\n            state.copy(items = newItems)\n        }\n    }\n\n    fun downloadChapters(items: List<MangaUpdatesItem>, action: ChapterDownloadAction) {\n        if (items.isEmpty()) return\n        screenModelScope.launch {\n            when (action) {\n                ChapterDownloadAction.START -> {\n                    downloadChapters(items)\n                    if (items.any { it.downloadStateProvider() == MangaDownload.State.ERROR }) {\n                        downloadManager.startDownloads()\n                    }\n                }\n                ChapterDownloadAction.START_NOW -> {\n                    val chapterId = items.singleOrNull()?.update?.chapterId ?: return@launch\n                    startDownloadingNow(chapterId)\n                }\n                ChapterDownloadAction.CANCEL -> {\n                    val chapterId = items.singleOrNull()?.update?.chapterId ?: return@launch\n                    cancelDownload(chapterId)\n                }\n                ChapterDownloadAction.DELETE -> {\n                    deleteChapters(items)\n                }\n            }\n            toggleAllSelection(false)\n        }\n    }\n\n    private fun startDownloadingNow(chapterId: Long) {\n        downloadManager.startDownloadNow(chapterId)\n    }\n\n    private fun cancelDownload(chapterId: Long) {\n        val activeDownload = downloadManager.getQueuedDownloadOrNull(chapterId) ?: return\n        downloadManager.cancelQueuedDownloads(listOf(activeDownload))\n        updateDownloadState(activeDownload.apply { status = MangaDownload.State.NOT_DOWNLOADED })\n    }\n\n    /**\n     * Mark the selected updates list as read/unread.\n     * @param updates the list of selected updates.\n     * @param read whether to mark chapters as read or unread.\n     */\n    fun markUpdatesRead(updates: List<MangaUpdatesItem>, read: Boolean) {\n        screenModelScope.launchIO {\n            setReadStatus.await(\n                read = read,\n                chapters = updates\n                    .mapNotNull { getChapter.await(it.update.chapterId) }\n                    .toTypedArray(),\n            )\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Bookmarks the given list of chapters.\n     * @param updates the list of chapters to bookmark.\n     */\n    fun bookmarkUpdates(updates: List<MangaUpdatesItem>, bookmark: Boolean) {\n        screenModelScope.launchIO {\n            updates\n                .filterNot { it.update.bookmark == bookmark }\n                .map { ChapterUpdate(id = it.update.chapterId, bookmark = bookmark) }\n                .let { updateChapter.awaitAll(it) }\n        }\n        toggleAllSelection(false)\n    }\n\n    /**\n     * Downloads the given list of chapters with the manager.\n     * @param updatesItem the list of chapters to download.\n     */\n    private fun downloadChapters(updatesItem: List<MangaUpdatesItem>) {\n        screenModelScope.launchNonCancellable {\n            val groupedUpdates = updatesItem.groupBy { it.update.mangaId }.values\n            for (updates in groupedUpdates) {\n                val mangaId = updates.first().update.mangaId\n                val manga = getManga.await(mangaId) ?: continue\n                // Don't download if source isn't available\n                sourceManager.get(manga.source) ?: continue\n                val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) }\n                downloadManager.downloadChapters(manga, chapters)\n            }\n        }\n    }\n\n    /**\n     * Delete selected chapters\n     *\n     * @param updatesItem list of chapters\n     */\n    fun deleteChapters(updatesItem: List<MangaUpdatesItem>) {\n        screenModelScope.launchNonCancellable {\n            updatesItem\n                .groupBy { it.update.mangaId }\n                .entries\n                .forEach { (mangaId, updates) ->\n                    val manga = getManga.await(mangaId) ?: return@forEach\n                    val source = sourceManager.get(manga.source) ?: return@forEach\n                    val chapters = updates.mapNotNull { getChapter.await(it.update.chapterId) }\n                    downloadManager.deleteChapters(chapters, manga, source)\n                }\n        }\n        toggleAllSelection(false)\n    }\n\n    fun showConfirmDeleteChapters(updatesItem: List<MangaUpdatesItem>) {\n        setDialog(Dialog.DeleteConfirmation(updatesItem))\n    }\n\n    fun toggleSelection(\n        item: MangaUpdatesItem,\n        selected: Boolean,\n        userSelected: Boolean = false,\n        fromLongPress: Boolean = false,\n    ) {\n        mutableState.update { state ->\n            val newItems = state.items.toMutableList().apply {\n                val selectedIndex = indexOfFirst { it.update.chapterId == item.update.chapterId }\n                if (selectedIndex < 0) return@apply\n\n                val selectedItem = get(selectedIndex)\n                if (selectedItem.selected == selected) return@apply\n\n                val firstSelection = none { it.selected }\n                set(selectedIndex, selectedItem.copy(selected = selected))\n                selectedChapterIds.addOrRemove(item.update.chapterId, selected)\n\n                if (selected && userSelected && fromLongPress) {\n                    if (firstSelection) {\n                        selectedPositions[0] = selectedIndex\n                        selectedPositions[1] = selectedIndex\n                    } else {\n                        // Try to select the items in-between when possible\n                        val range: IntRange\n                        if (selectedIndex < selectedPositions[0]) {\n                            range = selectedIndex + 1..<selectedPositions[0]\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            range = (selectedPositions[1] + 1)..<selectedIndex\n                            selectedPositions[1] = selectedIndex\n                        } else {\n                            // Just select itself\n                            range = IntRange.EMPTY\n                        }\n\n                        range.forEach {\n                            val inbetweenItem = get(it)\n                            if (!inbetweenItem.selected) {\n                                selectedChapterIds.add(inbetweenItem.update.chapterId)\n                                set(it, inbetweenItem.copy(selected = true))\n                            }\n                        }\n                    }\n                } else if (userSelected && !fromLongPress) {\n                    if (!selected) {\n                        if (selectedIndex == selectedPositions[0]) {\n                            selectedPositions[0] = indexOfFirst { it.selected }\n                        } else if (selectedIndex == selectedPositions[1]) {\n                            selectedPositions[1] = indexOfLast { it.selected }\n                        }\n                    } else {\n                        if (selectedIndex < selectedPositions[0]) {\n                            selectedPositions[0] = selectedIndex\n                        } else if (selectedIndex > selectedPositions[1]) {\n                            selectedPositions[1] = selectedIndex\n                        }\n                    }\n                }\n            }\n            state.copy(items = newItems.toPersistentList())\n        }\n    }\n\n    fun toggleAllSelection(selected: Boolean) {\n        mutableState.update { state ->\n            val newItems = state.items.map {\n                selectedChapterIds.addOrRemove(it.update.chapterId, selected)\n                it.copy(selected = selected)\n            }\n            state.copy(items = newItems.toPersistentList())\n        }\n\n        selectedPositions[0] = -1\n        selectedPositions[1] = -1\n    }\n\n    fun invertSelection() {\n        mutableState.update { state ->\n            val newItems = state.items.map {\n                selectedChapterIds.addOrRemove(it.update.chapterId, !it.selected)\n                it.copy(selected = !it.selected)\n            }\n            state.copy(items = newItems.toPersistentList())\n        }\n        selectedPositions[0] = -1\n        selectedPositions[1] = -1\n    }\n\n    fun setDialog(dialog: Dialog?) {\n        mutableState.update { it.copy(dialog = dialog) }\n    }\n\n    fun resetNewUpdatesCount() {\n        libraryPreferences.newMangaUpdatesCount().set(0)\n    }\n\n    @Immutable\n    data class State(\n        val isLoading: Boolean = true,\n        val items: PersistentList<MangaUpdatesItem> = persistentListOf(),\n        val dialog: Dialog? = null,\n    ) {\n        val selected = items.filter { it.selected }\n        val selectionMode = selected.isNotEmpty()\n\n        fun getUiModel(): List<MangaUpdatesUiModel> {\n            return items\n                .map { MangaUpdatesUiModel.Item(it) }\n                .insertSeparators { before, after ->\n                    val beforeDate = before?.item?.update?.dateFetch?.toLocalDate()\n                    val afterDate = after?.item?.update?.dateFetch?.toLocalDate()\n                    when {\n                        beforeDate != afterDate && afterDate != null -> MangaUpdatesUiModel.Header(afterDate)\n                        // Return null to avoid adding a separator between two items.\n                        else -> null\n                    }\n                }\n        }\n    }\n\n    sealed interface Dialog {\n        data class DeleteConfirmation(val toDelete: List<MangaUpdatesItem>) : Dialog\n    }\n\n    sealed interface Event {\n        data object InternalError : Event\n        data class LibraryUpdateTriggered(val started: Boolean) : Event\n    }\n}\n\n@Immutable\ndata class MangaUpdatesItem(\n    val update: MangaUpdatesWithRelations,\n    val downloadStateProvider: () -> MangaDownload.State,\n    val downloadProgressProvider: () -> Int,\n    val selected: Boolean = false,\n)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/updates/manga/MangaUpdatesTab.kt",
    "content": "package eu.kanade.tachiyomi.ui.updates.manga\n\nimport android.content.Context\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.CalendarMonth\nimport androidx.compose.material.icons.outlined.FlipToBack\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material.icons.outlined.SelectAll\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisposableEffect\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.core.screen.Screen\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.TabContent\nimport eu.kanade.presentation.updates.UpdatesDeleteConfirmationDialog\nimport eu.kanade.presentation.updates.manga.MangaUpdateScreen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\nimport eu.kanade.tachiyomi.ui.home.HomeScreen\nimport eu.kanade.tachiyomi.ui.main.MainActivity\nimport eu.kanade.tachiyomi.ui.reader.ReaderActivity\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.launch\nimport mihon.feature.upcoming.manga.UpcomingMangaScreen\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun Screen.mangaUpdatesTab(\n    context: Context,\n    fromMore: Boolean,\n): TabContent {\n    val navigator = LocalNavigator.currentOrThrow\n    val screenModel = rememberScreenModel { MangaUpdatesScreenModel() }\n    val state by screenModel.state.collectAsState()\n\n    val scope = rememberCoroutineScope()\n    val navigateUp: (() -> Unit)? = if (fromMore) {\n        {\n            if (navigator.lastItem == HomeScreen) {\n                scope.launch { HomeScreen.openTab(HomeScreen.Tab.AnimeLib()) }\n            } else {\n                navigator.pop()\n            }\n        }\n    } else {\n        null\n    }\n\n    return TabContent(\n        titleRes = AYMR.strings.label_updates,\n        searchEnabled = false,\n        content = { contentPadding, _ ->\n            MangaUpdateScreen(\n                state = state,\n                snackbarHostState = screenModel.snackbarHostState,\n                lastUpdated = screenModel.lastUpdated,\n                onClickCover = { item -> navigator.push(MangaScreen(item.update.mangaId)) },\n                onSelectAll = screenModel::toggleAllSelection,\n                onInvertSelection = screenModel::invertSelection,\n                onUpdateLibrary = screenModel::updateLibrary,\n                onDownloadChapter = screenModel::downloadChapters,\n                onMultiBookmarkClicked = screenModel::bookmarkUpdates,\n                onMultiMarkAsReadClicked = screenModel::markUpdatesRead,\n                onMultiDeleteClicked = screenModel::showConfirmDeleteChapters,\n                onUpdateSelected = screenModel::toggleSelection,\n                onOpenChapter = {\n                    val intent =\n                        ReaderActivity.newIntent(context, it.update.mangaId, it.update.chapterId)\n                    context.startActivity(intent)\n                },\n            )\n\n            val onDismissDialog = { screenModel.setDialog(null) }\n            when (val dialog = state.dialog) {\n                is MangaUpdatesScreenModel.Dialog.DeleteConfirmation -> {\n                    UpdatesDeleteConfirmationDialog(\n                        onDismissRequest = onDismissDialog,\n                        onConfirm = { screenModel.deleteChapters(dialog.toDelete) },\n                        isManga = true,\n                    )\n                }\n                null -> {}\n            }\n\n            LaunchedEffect(Unit) {\n                screenModel.events.collectLatest { event ->\n                    when (event) {\n                        MangaUpdatesScreenModel.Event.InternalError -> screenModel.snackbarHostState.showSnackbar(\n                            context.stringResource(\n                                MR.strings.internal_error,\n                            ),\n                        )\n                        is MangaUpdatesScreenModel.Event.LibraryUpdateTriggered -> {\n                            val msg = if (event.started) {\n                                MR.strings.updating_library\n                            } else {\n                                MR.strings.update_already_running\n                            }\n                            screenModel.snackbarHostState.showSnackbar(context.stringResource(msg))\n                        }\n                    }\n                }\n            }\n\n            LaunchedEffect(state.selectionMode) {\n                HomeScreen.showBottomNav(!state.selectionMode)\n            }\n\n            LaunchedEffect(state.isLoading) {\n                if (!state.isLoading) {\n                    (context as? MainActivity)?.ready = true\n                }\n            }\n            DisposableEffect(Unit) {\n                screenModel.resetNewUpdatesCount()\n\n                onDispose {\n                    screenModel.resetNewUpdatesCount()\n                }\n            }\n        },\n        actions =\n        if (screenModel.state.collectAsState().value.selected.isNotEmpty()) {\n            persistentListOf(\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_select_all),\n                    icon = Icons.Outlined.SelectAll,\n                    onClick = { screenModel.toggleAllSelection(true) },\n                ),\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_select_inverse),\n                    icon = Icons.Outlined.FlipToBack,\n                    onClick = { screenModel.invertSelection() },\n                ),\n            )\n        } else {\n            persistentListOf(\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_view_upcoming),\n                    icon = Icons.Outlined.CalendarMonth,\n                    onClick = { navigator.push(UpcomingMangaScreen()) },\n                ),\n                AppBar.Action(\n                    title = stringResource(MR.strings.action_update_library),\n                    icon = Icons.Outlined.Refresh,\n                    onClick = { screenModel.updateLibrary() },\n                ),\n            )\n        },\n        navigateUp = navigateUp,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt",
    "content": "package eu.kanade.tachiyomi.ui.webview\n\nimport android.app.Activity\nimport android.app.assist.AssistContent\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Build\nimport android.os.Bundle\nimport android.widget.Toast\nimport androidx.core.net.toUri\nimport eu.kanade.presentation.webview.WebViewScreenContent\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.ui.base.activity.BaseActivity\nimport eu.kanade.tachiyomi.util.system.WebViewUtil\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport eu.kanade.tachiyomi.util.view.setComposeContent\nimport logcat.LogPriority\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.injectLazy\n\nclass WebViewActivity : BaseActivity() {\n\n    private val sourceManager: MangaSourceManager by injectLazy()\n    private val animeSourceManager: AnimeSourceManager by injectLazy()\n    private val network: NetworkHelper by injectLazy()\n\n    private var assistUrl: String? = null\n\n    init {\n        registerSecureActivity(this)\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            overrideActivityTransition(\n                Activity.OVERRIDE_TRANSITION_OPEN,\n                R.anim.shared_axis_x_push_enter,\n                R.anim.shared_axis_x_push_exit,\n            )\n        } else {\n            @Suppress(\"DEPRECATION\")\n            overridePendingTransition(R.anim.shared_axis_x_push_enter, R.anim.shared_axis_x_push_exit)\n        }\n        super.onCreate(savedInstanceState)\n\n        if (!WebViewUtil.supportsWebView(this)) {\n            toast(MR.strings.information_webview_required, Toast.LENGTH_LONG)\n            finish()\n            return\n        }\n\n        val url = intent.extras?.getString(URL_KEY) ?: return\n        assistUrl = url\n        var headers = emptyMap<String, String>()\n        (sourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? HttpSource)?.let { source ->\n            try {\n                headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: \"\" }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to build headers\" }\n            }\n        }\n        (animeSourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? AnimeHttpSource)?.let { animeSource ->\n            try {\n                headers = animeSource.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: \"\" }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to build headers\" }\n            }\n        }\n\n        setComposeContent {\n            WebViewScreenContent(\n                onNavigateUp = { finish() },\n                initialTitle = intent.extras?.getString(TITLE_KEY),\n                url = url,\n                headers = headers,\n                onUrlChange = { assistUrl = it },\n                onShare = this::shareWebpage,\n                onOpenInBrowser = this::openInBrowser,\n                onClearCookies = this::clearCookies,\n            )\n        }\n    }\n\n    override fun onProvideAssistContent(outContent: AssistContent) {\n        super.onProvideAssistContent(outContent)\n        assistUrl?.let { outContent.webUri = it.toUri() }\n    }\n\n    override fun finish() {\n        super.finish()\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            overrideActivityTransition(\n                Activity.OVERRIDE_TRANSITION_CLOSE,\n                R.anim.shared_axis_x_pop_enter,\n                R.anim.shared_axis_x_pop_exit,\n            )\n        } else {\n            @Suppress(\"DEPRECATION\")\n            overridePendingTransition(R.anim.shared_axis_x_pop_enter, R.anim.shared_axis_x_pop_exit)\n        }\n    }\n\n    private fun shareWebpage(url: String) {\n        try {\n            startActivity(url.toUri().toShareIntent(this, type = \"text/plain\"))\n        } catch (e: Exception) {\n            toast(e.message)\n        }\n    }\n\n    private fun openInBrowser(url: String) {\n        openInBrowser(url, forceDefaultBrowser = true)\n    }\n\n    private fun clearCookies(url: String) {\n        val cleared = network.cookieJar.remove(url.toHttpUrl())\n        logcat { \"Cleared $cleared cookies for: $url\" }\n    }\n\n    companion object {\n        private const val URL_KEY = \"url_key\"\n        private const val SOURCE_KEY = \"source_key\"\n        private const val TITLE_KEY = \"title_key\"\n        private const val ANIME_KEY = \"anime_key\"\n\n        fun newIntent(\n            context: Context,\n            url: String,\n            sourceId: Long? = null,\n            title: String? = null,\n            isAnime: Boolean = false,\n        ): Intent {\n            return Intent(context, WebViewActivity::class.java).apply {\n                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n                putExtra(URL_KEY, url)\n                putExtra(SOURCE_KEY, sourceId)\n                putExtra(TITLE_KEY, title)\n                putExtra(ANIME_KEY, isAnime)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewScreen.kt",
    "content": "package eu.kanade.tachiyomi.ui.webview\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.platform.LocalContext\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.util.AssistContentScreen\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.presentation.webview.WebViewScreenContent\n\nclass WebViewScreen(\n    private val url: String,\n    private val initialTitle: String? = null,\n    private val sourceId: Long? = null,\n) : Screen(), AssistContentScreen {\n\n    private var assistUrl: String? = null\n\n    override fun onProvideAssistUrl() = assistUrl\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n        val context = LocalContext.current\n        val screenModel = rememberScreenModel { WebViewScreenModel(sourceId) }\n\n        WebViewScreenContent(\n            onNavigateUp = { navigator.pop() },\n            initialTitle = initialTitle,\n            url = url,\n            headers = screenModel.headers,\n            onUrlChange = { assistUrl = it },\n            onShare = { screenModel.shareWebpage(context, it) },\n            onOpenInBrowser = { screenModel.openInBrowser(context, it) },\n            onClearCookies = screenModel::clearCookies,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewScreenModel.kt",
    "content": "package eu.kanade.tachiyomi.ui.webview\n\nimport android.content.Context\nimport androidx.core.net.toUri\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport eu.kanade.presentation.more.stats.StatsScreenState\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport eu.kanade.tachiyomi.util.system.openInBrowser\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport logcat.LogPriority\nimport okhttp3.HttpUrl.Companion.toHttpUrlOrNull\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nclass WebViewScreenModel(\n    val sourceId: Long?,\n    private val MangaSourceManager: MangaSourceManager = Injekt.get(),\n    private val AnimeSourceManager: AnimeSourceManager = Injekt.get(),\n    private val network: NetworkHelper = Injekt.get(),\n) : StateScreenModel<StatsScreenState>(StatsScreenState.Loading) {\n\n    var headers = emptyMap<String, String>()\n\n    init {\n        sourceId?.let { MangaSourceManager.get(it) as? HttpSource }?.let { mangasource ->\n            try {\n                headers = mangasource.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: \"\" }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to build headers\" }\n            }\n        }\n        sourceId?.let { AnimeSourceManager.get(it) as? AnimeHttpSource }?.let { animesource ->\n            try {\n                headers = animesource.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: \"\" }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to build headers\" }\n            }\n        }\n    }\n\n    fun shareWebpage(context: Context, url: String) {\n        try {\n            context.startActivity(url.toUri().toShareIntent(context, type = \"text/plain\"))\n        } catch (e: Exception) {\n            context.toast(e.message)\n        }\n    }\n\n    fun openInBrowser(context: Context, url: String) {\n        context.openInBrowser(url, forceDefaultBrowser = true)\n    }\n\n    fun clearCookies(url: String) {\n        url.toHttpUrlOrNull()?.let {\n            val cleared = network.cookieJar.remove(it)\n            logcat { \"Cleared $cleared cookies for: $url\" }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/AniChartApi.kt",
    "content": "package eu.kanade.tachiyomi.util\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.track.anilist.Anilist\nimport eu.kanade.tachiyomi.data.track.myanimelist.MyAnimeList\nimport eu.kanade.tachiyomi.data.track.simkl.Simkl\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.POST\nimport eu.kanade.tachiyomi.network.jsonMime\nimport eu.kanade.tachiyomi.ui.entries.anime.track.AnimeTrackItem\nimport kotlinx.serialization.json.buildJsonObject\nimport kotlinx.serialization.json.put\nimport okhttp3.OkHttpClient\nimport okhttp3.RequestBody.Companion.toRequestBody\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.entries.anime.model.Anime\nimport java.time.OffsetDateTime\nimport java.util.Calendar\n\nclass AniChartApi {\n    private val client = OkHttpClient()\n\n    internal suspend fun loadAiringTime(\n        anime: Anime,\n        trackItems: List<AnimeTrackItem>,\n        manualFetch: Boolean,\n    ): Pair<Int, Long> {\n        var airingEpisodeData = Pair(anime.nextEpisodeToAir, anime.nextEpisodeAiringAt)\n        if (anime.status == SAnime.COMPLETED.toLong() && !manualFetch) return airingEpisodeData\n\n        return withIOContext {\n            val matchingTrackItem = trackItems.firstOrNull {\n                (it.tracker is Anilist && it.track != null) ||\n                    (it.tracker is MyAnimeList && it.track != null) ||\n                    (it.tracker is Simkl && it.track != null)\n            } ?: return@withIOContext Pair(1, 0L)\n\n            matchingTrackItem.let { item ->\n                item.track!!.let {\n                    airingEpisodeData = when (item.tracker) {\n                        is Anilist -> getAnilistAiringEpisodeData(it.remoteId)\n                        is MyAnimeList -> getAnilistAiringEpisodeData(getAlIdFromMal(it.remoteId))\n                        is Simkl -> getSimklAiringEpisodeData(it.remoteId)\n                        else -> Pair(1, 0L)\n                    }\n                }\n            }\n            return@withIOContext airingEpisodeData\n        }\n    }\n\n    private suspend fun getAlIdFromMal(idMal: Long): Long {\n        return withIOContext {\n            val query = \"\"\"\n                query {\n                    Media(idMal:$idMal,type: ANIME) {\n                        id\n                    }\n                }\n            \"\"\".trimMargin()\n\n            val response = try {\n                client.newCall(\n                    POST(\n                        \"https://graphql.anilist.co\",\n                        body = buildJsonObject { put(\"query\", query) }.toString()\n                            .toRequestBody(jsonMime),\n                    ),\n                ).execute()\n            } catch (e: Exception) {\n                return@withIOContext 0L\n            }\n            return@withIOContext response.body.string().substringAfter(\"id\\\":\")\n                .substringBefore(\"}\")\n                .toLongOrNull() ?: 0L\n        }\n    }\n\n    private suspend fun getAnilistAiringEpisodeData(id: Long): Pair<Int, Long> {\n        return withIOContext {\n            val query = \"\"\"\n                query {\n                    Media(id:$id) {\n                        nextAiringEpisode {\n                            episode\n                            airingAt\n                        }\n                    }\n                }\n            \"\"\".trimMargin()\n            val response = try {\n                client.newCall(\n                    POST(\n                        \"https://graphql.anilist.co\",\n                        body = buildJsonObject { put(\"query\", query) }.toString()\n                            .toRequestBody(jsonMime),\n                    ),\n                ).execute()\n            } catch (e: Exception) {\n                return@withIOContext Pair(1, 0L)\n            }\n            val data = response.body.string()\n            val episodeNumber = data.substringAfter(\"episode\\\":\").substringBefore(\",\").toIntOrNull() ?: 1\n            val airingAt = data.substringAfter(\"airingAt\\\":\").substringBefore(\"}\").toLongOrNull() ?: 0L\n\n            return@withIOContext Pair(episodeNumber, airingAt)\n        }\n    }\n\n    private suspend fun getSimklAiringEpisodeData(id: Long): Pair<Int, Long> {\n        var episodeNumber = 1\n        var airingAt = 0L\n        return withIOContext {\n            val calendarTypes = listOf(\"anime\", \"tv\", \"movie_release\")\n            calendarTypes.forEach {\n                val response = try {\n                    client.newCall(GET(\"https://data.simkl.in/calendar/$it.json\")).execute()\n                } catch (e: Exception) {\n                    return@withIOContext Pair(1, 0L)\n                }\n\n                val body = response.body.string()\n\n                val data = removeAiredSimkl(body)\n\n                val malId = data.substringAfter(\"\\\"simkl_id\\\":$id,\", \"\").substringAfter(\n                    \"\\\"mal\\\":\\\"\",\n                ).substringBefore(\"\\\"\").toLongOrNull() ?: 0L\n                if (malId != 0L) {\n                    return@withIOContext getAnilistAiringEpisodeData(\n                        getAlIdFromMal(malId),\n                    )\n                }\n\n                val epNum = data.substringAfter(\"\\\"simkl_id\\\":$id,\", \"\").substringBefore(\"\\\"}}\").substringAfterLast(\n                    \"\\\"episode\\\":\",\n                )\n                episodeNumber = epNum.substringBefore(\",\").toIntOrNull() ?: episodeNumber\n\n                val date = data.substringBefore(\"\\\"simkl_id\\\":$id,\", \"\").substringAfterLast(\n                    \"\\\"date\\\":\\\"\",\n                ).substringBefore(\"\\\"\")\n                airingAt = if (date.isNotBlank()) toUnixTimestamp(date) else airingAt\n\n                if (airingAt != 0L) return@withIOContext Pair(episodeNumber, airingAt)\n            }\n            return@withIOContext Pair(episodeNumber, airingAt)\n        }\n    }\n\n    private fun removeAiredSimkl(body: String): String {\n        val currentTimeInMillis = Calendar.getInstance().timeInMillis\n        val index = body.split(\"\\\"date\\\":\\\"\").drop(1).indexOfFirst {\n            val date = it.substringBefore(\"\\\"\")\n            val time = if (date.isNotBlank()) toUnixTimestamp(date) else 0L\n            time.times(1000) > currentTimeInMillis\n        }\n        return if (index >= 0) body.substring(index) else \"\"\n    }\n\n    private fun toUnixTimestamp(dateFormat: String): Long {\n        val offsetDateTime = OffsetDateTime.parse(dateFormat)\n        val instant = offsetDateTime.toInstant()\n        return instant.epochSecond\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/AnimeExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport eu.kanade.domain.entries.anime.interactor.UpdateAnime\nimport eu.kanade.domain.entries.anime.model.hasCustomBackground\nimport eu.kanade.domain.entries.anime.model.hasCustomCover\nimport eu.kanade.domain.entries.anime.model.toSAnime\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.data.cache.AnimeBackgroundCache\nimport eu.kanade.tachiyomi.data.cache.AnimeCoverCache\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.source.local.entries.anime.isLocal\nimport tachiyomi.source.local.image.anime.LocalAnimeBackgroundManager\nimport tachiyomi.source.local.image.anime.LocalAnimeCoverManager\nimport tachiyomi.source.local.image.anime.LocalEpisodeThumbnailManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.InputStream\nimport java.time.Instant\nimport eu.kanade.tachiyomi.data.database.models.anime.Episode as SEpisode\n\n/**\n * Call before updating [Anime.thumbnail_url] to ensure old cover can be cleared from cache\n */\nfun Anime.prepUpdateCover(coverCache: AnimeCoverCache, remoteAnime: SAnime, refreshSameUrl: Boolean): Anime {\n    // Never refresh covers if the new url is null, as the current url has possibly become invalid\n    val newUrl = remoteAnime.thumbnail_url ?: return this\n\n    // Never refresh covers if the url is empty to avoid \"losing\" existing covers\n    if (newUrl.isEmpty()) return this\n\n    if (!refreshSameUrl && thumbnailUrl == newUrl) return this\n\n    return when {\n        isLocal() -> {\n            this.copy(coverLastModified = Instant.now().toEpochMilli())\n        }\n        hasCustomCover(coverCache) -> {\n            coverCache.deleteFromCache(this, false)\n            this\n        }\n        else -> {\n            coverCache.deleteFromCache(this, false)\n            this.copy(coverLastModified = Instant.now().toEpochMilli())\n        }\n    }\n}\n\n/**\n * Call before updating [Anime.background_url] to ensure old background can be cleared from cache\n */\nfun Anime.prepUpdateBackground(\n    backgroundCache: AnimeBackgroundCache,\n    remoteAnime: SAnime,\n    refreshSameUrl: Boolean,\n): Anime {\n    // Never refresh backgrounds if the new url is null, as the current url has possibly become invalid\n    val newUrl = remoteAnime.background_url ?: return this\n\n    // Never refresh covers if the url is empty to avoid \"losing\" existing backgrounds\n    if (newUrl.isEmpty()) return this\n\n    if (!refreshSameUrl && backgroundUrl == newUrl) return this\n\n    return when {\n        isLocal() -> {\n            this.copy(backgroundLastModified = Instant.now().toEpochMilli())\n        }\n        hasCustomBackground(backgroundCache) -> {\n            backgroundCache.deleteFromCache(this, false)\n            this\n        }\n        else -> {\n            backgroundCache.deleteFromCache(this, false)\n            this.copy(backgroundLastModified = Instant.now().toEpochMilli())\n        }\n    }\n}\n\nfun Anime.removeCovers(coverCache: AnimeCoverCache = Injekt.get()): Anime {\n    if (isLocal()) return this\n    return if (coverCache.deleteFromCache(this, true) > 0) {\n        return copy(coverLastModified = Instant.now().toEpochMilli())\n    } else {\n        this\n    }\n}\n\nfun Anime.removeBackgrounds(backgroundCache: AnimeBackgroundCache): Anime {\n    if (isLocal()) return this\n    return if (backgroundCache.deleteFromCache(this, true) > 0) {\n        return copy(backgroundLastModified = Instant.now().toEpochMilli())\n    } else {\n        this\n    }\n}\n\nsuspend fun Anime.editCover(\n    coverManager: LocalAnimeCoverManager,\n    stream: InputStream,\n    updateAnime: UpdateAnime = Injekt.get(),\n    coverCache: AnimeCoverCache = Injekt.get(),\n) {\n    if (isLocal()) {\n        coverManager.update(toSAnime(), stream)\n        updateAnime.awaitUpdateCoverLastModified(id)\n    } else if (favorite) {\n        coverCache.setCustomCoverToCache(this, stream)\n        updateAnime.awaitUpdateCoverLastModified(id)\n    }\n}\n\nsuspend fun Anime.editBackground(\n    backgroundManager: LocalAnimeBackgroundManager,\n    stream: InputStream,\n    updateAnime: UpdateAnime = Injekt.get(),\n    backgroundCache: AnimeBackgroundCache = Injekt.get(),\n) {\n    if (isLocal()) {\n        backgroundManager.update(toSAnime(), stream)\n        updateAnime.awaitUpdateBackgroundLastModified(id)\n    } else if (favorite) {\n        backgroundCache.setCustomBackgroundToCache(this, stream)\n        updateAnime.awaitUpdateBackgroundLastModified(id)\n    }\n}\n\nfun SEpisode.editThumbnail(\n    anime: Anime,\n    thumbnailManager: LocalEpisodeThumbnailManager,\n    stream: InputStream,\n) {\n    if (anime.isLocal()) {\n        thumbnailManager.update(anime.toSAnime(), this, stream)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport android.content.Context\nimport android.os.Build\nimport eu.kanade.tachiyomi.BuildConfig\nimport eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager\nimport eu.kanade.tachiyomi.extension.manga.MangaExtensionManager\nimport eu.kanade.tachiyomi.util.storage.getUriCompat\nimport eu.kanade.tachiyomi.util.system.WebViewUtil\nimport eu.kanade.tachiyomi.util.system.createFileInCacheDir\nimport eu.kanade.tachiyomi.util.system.toShareIntent\nimport eu.kanade.tachiyomi.util.system.toast\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.lang.withUIContext\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.OffsetDateTime\nimport java.time.ZoneId\n\nclass CrashLogUtil(\n    private val context: Context,\n    private val mangaExtensionManager: MangaExtensionManager = Injekt.get(),\n    private val animeExtensionManager: AnimeExtensionManager = Injekt.get(),\n) {\n\n    suspend fun dumpLogs(exception: Throwable? = null) = withNonCancellableContext {\n        try {\n            val file = context.createFileInCacheDir(\"aniyomi_crash_logs.txt\")\n\n            file.appendText(getDebugInfo() + \"\\n\\n\")\n            getMangaExtensionsInfo()?.let { file.appendText(\"$it\\n\\n\") }\n            getAnimeExtensionsInfo()?.let { file.appendText(\"$it\\n\\n\") }\n            exception?.let { file.appendText(\"$it\\n\\n\") }\n\n            Runtime.getRuntime().exec(\"logcat *:E -d -v year -v zone -f ${file.absolutePath}\").waitFor()\n\n            val uri = file.getUriCompat(context)\n            context.startActivity(uri.toShareIntent(context, \"text/plain\"))\n        } catch (e: Throwable) {\n            withUIContext { context.toast(\"Failed to get logs\") }\n        }\n    }\n\n    fun getDebugInfo(): String {\n        return \"\"\"\n            App ID: ${BuildConfig.APPLICATION_ID}\n            App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}, ${BuildConfig.BUILD_TIME})\n            Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}; build ${Build.DISPLAY})\n            Android build ID: ${Build.DISPLAY}\n            Device brand: ${Build.BRAND}\n            Device manufacturer: ${Build.MANUFACTURER}\n            Device name: ${Build.DEVICE} (${Build.PRODUCT})\n            Device model: ${Build.MODEL}\n            WebView: ${WebViewUtil.getVersion(context)}\n            Current time: ${OffsetDateTime.now(ZoneId.systemDefault())}\n            MPV version: 6764488\n            Libplacebo version: v7.349.0\n            FFmpeg version: n7.1\n        \"\"\".trimIndent()\n        // TODO: Use this again (from aniyomi-mpv-lib 1.17.n onwards):\n\n        //    MPV version: ${Utils.VERSIONS.mpv}\n        //    Libplacebo version: ${Utils.VERSIONS.libPlacebo}\n        //    FFmpeg version: ${Utils.VERSIONS.ffmpeg}\n    }\n\n    private fun getMangaExtensionsInfo(): String? {\n        val availableExtensions = mangaExtensionManager.availableExtensionsFlow.value.associateBy { it.pkgName }\n\n        val extensionInfoList = mangaExtensionManager.installedExtensionsFlow.value\n            .sortedBy { it.name }\n            .mapNotNull {\n                val availableExtension = availableExtensions[it.pkgName]\n                val hasUpdate = (availableExtension?.versionCode ?: 0) > it.versionCode\n\n                if (!hasUpdate && !it.isObsolete) return@mapNotNull null\n\n                \"\"\"\n                    - ${it.name}\n                      Installed: ${it.versionName} / Available: ${availableExtension?.versionName ?: \"?\"}\n                      Obsolete: ${it.isObsolete}\n                \"\"\".trimIndent()\n            }\n\n        return if (extensionInfoList.isNotEmpty()) {\n            (listOf(\"Problematic extensions:\") + extensionInfoList)\n                .joinToString(\"\\n\")\n        } else {\n            null\n        }\n    }\n\n    private fun getAnimeExtensionsInfo(): String? {\n        val availableExtensions = animeExtensionManager.availableExtensionsFlow.value.associateBy { it.pkgName }\n\n        val extensionInfoList = animeExtensionManager.installedExtensionsFlow.value\n            .sortedBy { it.name }\n            .mapNotNull {\n                val availableExtension = availableExtensions[it.pkgName]\n                val hasUpdate = (availableExtension?.versionCode ?: 0) > it.versionCode\n\n                if (!hasUpdate && !it.isObsolete) return@mapNotNull null\n\n                \"\"\"\n                    - ${it.name}\n                      Installed: ${it.versionName} / Available: ${availableExtension?.versionName ?: \"?\"}\n                      Obsolete: ${it.isObsolete}\n                \"\"\".trimIndent()\n            }\n\n        return if (extensionInfoList.isNotEmpty()) {\n            (listOf(\"Problematic extensions:\") + extensionInfoList)\n                .joinToString(\"\\n\")\n        } else {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport eu.kanade.domain.entries.manga.interactor.UpdateManga\nimport eu.kanade.domain.entries.manga.model.hasCustomCover\nimport eu.kanade.domain.entries.manga.model.toSManga\nimport eu.kanade.tachiyomi.data.cache.MangaCoverCache\nimport eu.kanade.tachiyomi.source.model.SManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.source.local.entries.manga.isLocal\nimport tachiyomi.source.local.image.manga.LocalMangaCoverManager\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.InputStream\nimport java.time.Instant\n\n/**\n * Call before updating [Manga.thumbnail_url] to ensure old cover can be cleared from cache\n */\nfun Manga.prepUpdateCover(coverCache: MangaCoverCache, remoteManga: SManga, refreshSameUrl: Boolean): Manga {\n    // Never refresh covers if the new url is null, as the current url has possibly become invalid\n    val newUrl = remoteManga.thumbnail_url ?: return this\n\n    // Never refresh covers if the url is empty to avoid \"losing\" existing covers\n    if (newUrl.isEmpty()) return this\n\n    if (!refreshSameUrl && thumbnailUrl == newUrl) return this\n\n    return when {\n        isLocal() -> {\n            this.copy(coverLastModified = Instant.now().toEpochMilli())\n        }\n        hasCustomCover(coverCache) -> {\n            coverCache.deleteFromCache(this, false)\n            this\n        }\n        else -> {\n            coverCache.deleteFromCache(this, false)\n            this.copy(coverLastModified = Instant.now().toEpochMilli())\n        }\n    }\n}\n\nfun Manga.removeCovers(coverCache: MangaCoverCache = Injekt.get()): Manga {\n    if (isLocal()) return this\n    return if (coverCache.deleteFromCache(this, true) > 0) {\n        return copy(coverLastModified = Instant.now().toEpochMilli())\n    } else {\n        this\n    }\n}\n\nsuspend fun Manga.editCover(\n    coverManager: LocalMangaCoverManager,\n    stream: InputStream,\n    updateManga: UpdateManga = Injekt.get(),\n    coverCache: MangaCoverCache = Injekt.get(),\n) {\n    if (isLocal()) {\n        coverManager.update(toSManga(), stream)\n        updateManga.awaitUpdateCoverLastModified(id)\n    } else if (favorite) {\n        coverCache.setCustomCoverToCache(this, stream)\n        updateManga.awaitUpdateCoverLastModified(id)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/PkceUtil.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport java.security.SecureRandom\nimport java.util.Base64\n\nobject PkceUtil {\n\n    fun generateCodeVerifier(): String {\n        val codeVerifier = ByteArray(50)\n        SecureRandom().nextBytes(codeVerifier)\n        return Base64.getUrlEncoder()\n            .withoutPadding()\n            .encodeToString(codeVerifier)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/StorageUtil.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport com.hippo.unifile.UniFile\n\n/**\n * Converts a long to a readable file size.\n */\nfun Long.toSize(): String {\n    val kb = 1000\n    val mb = kb * kb\n    val gb = mb * kb\n    return when {\n        this >= gb -> \"%.2f GB\".format(this.toFloat() / gb)\n        this >= mb -> \"%.2f MB\".format(this.toFloat() / mb)\n        this >= kb -> \"%.2f KB\".format(this.toFloat() / kb)\n        else -> \"$this B\"\n    }\n}\n\n/**\n * Returns the size of a file or directory.\n */\nfun UniFile.size(): Long {\n    var totalSize = 0L\n    if (isDirectory) {\n        listFiles()?.forEach { file ->\n            totalSize += if (file.isDirectory) {\n                file.size()\n            } else {\n                val length = file.length()\n                if (length > 0) length else 0\n            }\n        }\n    } else {\n        totalSize = length()\n    }\n    return totalSize\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterFilterDownloaded.kt",
    "content": "package eu.kanade.tachiyomi.util.chapter\n\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.source.local.entries.manga.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Returns a copy of the list with not downloaded chapters removed.\n */\nfun List<Chapter>.filterDownloadedChapters(manga: Manga): List<Chapter> {\n    if (manga.isLocal()) return this\n\n    val downloadCache: MangaDownloadCache = Injekt.get()\n\n    return filter {\n        downloadCache.isChapterDownloaded(\n            it.name,\n            it.scanlator,\n            manga.title,\n            manga.source,\n            false,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterGetNextUnread.kt",
    "content": "package eu.kanade.tachiyomi.util.chapter\n\nimport eu.kanade.domain.items.chapter.model.applyFilters\nimport eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager\nimport eu.kanade.tachiyomi.ui.entries.manga.ChapterList\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\n\n/**\n * Gets next unread chapter with filters and sorting applied\n */\nfun List<Chapter>.getNextUnread(manga: Manga, downloadManager: MangaDownloadManager): Chapter? {\n    return applyFilters(manga, downloadManager).let { chapters ->\n        if (manga.sortDescending()) {\n            chapters.findLast { !it.read }\n        } else {\n            chapters.find { !it.read }\n        }\n    }\n}\n\n/**\n * Gets next unread chapter with filters and sorting applied\n */\nfun List<ChapterList.Item>.getNextUnread(manga: Manga): Chapter? {\n    return applyFilters(manga).let { chapters ->\n        if (manga.sortDescending()) {\n            chapters.findLast { !it.chapter.read }\n        } else {\n            chapters.find { !it.chapter.read }\n        }\n    }?.chapter\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/chapter/ChapterRemoveDuplicates.kt",
    "content": "package eu.kanade.tachiyomi.util.chapter\n\nimport tachiyomi.domain.items.chapter.model.Chapter\n\n/**\n * Returns a copy of the list with duplicate chapters removed\n */\nfun List<Chapter>.removeDuplicates(currentChapter: Chapter): List<Chapter> {\n    return groupBy { it.chapterNumber }\n        .map { (_, chapters) ->\n            chapters.find { it.id == currentChapter.id }\n                ?: chapters.find { it.scanlator == currentChapter.scanlator }\n                ?: chapters.first()\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/episode/EpisodeFilterDownloaded.kt",
    "content": "package eu.kanade.tachiyomi.util.episode\n\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.source.local.entries.anime.isLocal\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Returns a copy of the list with not downloaded chapters removed.\n */\nfun List<Episode>.filterDownloadedEpisodes(anime: Anime): List<Episode> {\n    if (anime.isLocal()) return this\n\n    val downloadCache: AnimeDownloadCache = Injekt.get()\n\n    return filter {\n        downloadCache.isEpisodeDownloaded(\n            it.name,\n            it.scanlator,\n            anime.title,\n            anime.source,\n            false,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/episode/EpsiodeGetNextUnseen.kt",
    "content": "package eu.kanade.tachiyomi.util.episode\n\nimport eu.kanade.domain.items.episode.model.applyFilters\nimport eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager\nimport eu.kanade.tachiyomi.ui.entries.anime.EpisodeList\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\n\n/**\n * Gets next unseen episode with filters and sorting applied\n */\nfun List<Episode>.getNextUnseen(anime: Anime, downloadManager: AnimeDownloadManager): Episode? {\n    return applyFilters(anime, downloadManager).let { episodes ->\n        if (anime.sortDescending()) {\n            episodes.findLast { !it.seen }\n        } else {\n            episodes.find { !it.seen }\n        }\n    }\n}\n\n/**\n * Gets next unseen episode with filters and sorting applied\n */\nfun List<EpisodeList.Item>.getNextUnseen(anime: Anime): Episode? {\n    return applyFilters(anime).let { episodes ->\n        if (anime.sortDescending()) {\n            episodes.findLast { !it.episode.seen }\n        } else {\n            episodes.find { !it.episode.seen }\n        }\n    }?.episode\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/lang/CloseableExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.lang\n\nimport java.io.Closeable\n\n/**\n * Executes the given block function on this resources and then closes it down correctly whether an exception is\n * thrown or not.\n *\n * @param block a function to process with given Closeable resources.\n * @return the result of block function invoked on this resource.\n */\ninline fun <T : Closeable?> Array<T>.use(block: () -> Unit) {\n    var blockException: Throwable? = null\n    try {\n        return block()\n    } catch (e: Throwable) {\n        blockException = e\n        throw e\n    } finally {\n        when (blockException) {\n            null -> forEach { it?.close() }\n            else -> forEach {\n                try {\n                    it?.close()\n                } catch (closeException: Throwable) {\n                    blockException.addSuppressed(closeException)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.lang\n\nimport android.content.Context\nimport tachiyomi.core.common.i18n.pluralStringResource\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport java.text.DateFormat\nimport java.time.Instant\nimport java.time.LocalDate\nimport java.time.LocalDateTime\nimport java.time.ZoneId\nimport java.time.format.DateTimeFormatter\nimport java.time.format.FormatStyle\nimport java.time.temporal.ChronoUnit\nimport java.util.Date\nimport kotlin.math.absoluteValue\n\nfun LocalDateTime.toDateTimestampString(dateTimeFormatter: DateTimeFormatter): String {\n    val date = dateTimeFormatter.format(this)\n    val time = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).format(this)\n    return \"$date $time\"\n}\n\nfun Date.toTimestampString(): String {\n    return DateFormat.getTimeInstance(DateFormat.SHORT).format(this)\n}\n\nfun Long.convertEpochMillisZone(\n    from: ZoneId,\n    to: ZoneId,\n): Long {\n    return LocalDateTime.ofInstant(Instant.ofEpochMilli(this), from)\n        .atZone(to)\n        .toInstant()\n        .toEpochMilli()\n}\n\nfun Long.toLocalDate(): LocalDate {\n    return LocalDate.ofInstant(Instant.ofEpochMilli(this), ZoneId.systemDefault())\n}\n\nfun Instant.toLocalDate(zoneId: ZoneId = ZoneId.systemDefault()): LocalDate {\n    return LocalDate.ofInstant(this, zoneId)\n}\n\nfun LocalDate.toRelativeString(\n    context: Context,\n    relative: Boolean = true,\n    dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT),\n): String {\n    if (!relative) {\n        return dateFormat.format(this)\n    }\n    val now = LocalDate.now()\n    val difference = ChronoUnit.DAYS.between(this, now)\n    return when {\n        difference < -7 -> dateFormat.format(this)\n        difference < 0 -> context.pluralStringResource(\n            MR.plurals.upcoming_relative_time,\n            difference.toInt().absoluteValue,\n            difference.toInt().absoluteValue,\n        )\n        difference < 1 -> context.stringResource(MR.strings.relative_time_today)\n        difference < 7 -> context.pluralStringResource(\n            MR.plurals.relative_time,\n            difference.toInt(),\n            difference.toInt(),\n        )\n        else -> dateFormat.format(this)\n    }\n}\n\n// For use in chapter/episode release time\nfun LocalDateTime.toRelativeString(\n    context: Context,\n    relative: Boolean = true,\n    dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT),\n): String {\n    if (!relative) {\n        return dateFormat.format(this)\n    }\n    val now = LocalDateTime.now()\n    val timeDifference = ChronoUnit.DAYS.between(this, now)\n    val dateDifference = ChronoUnit.DAYS.between(this.toLocalDate(), now.toLocalDate())\n    return when {\n        timeDifference < -7 -> dateFormat.format(this)\n        timeDifference < 0 -> context.pluralStringResource(\n            MR.plurals.upcoming_relative_time,\n            dateDifference.toInt().absoluteValue,\n            dateDifference.toInt().absoluteValue,\n        )\n        timeDifference < 1 -> {\n            val hourDifference = ChronoUnit.HOURS.between(this, now)\n            when {\n                hourDifference < 0 -> context.pluralStringResource(\n                    AYMR.plurals.upcoming_relative_time_hours,\n                    hourDifference.toInt().absoluteValue,\n                    hourDifference.toInt().absoluteValue,\n                )\n                hourDifference < 1 -> {\n                    val minuteDifference = ChronoUnit.MINUTES.between(this, now)\n                    when {\n                        minuteDifference < 0 -> context.pluralStringResource(\n                            AYMR.plurals.upcoming_relative_time_minutes,\n                            minuteDifference.toInt().absoluteValue,\n                            minuteDifference.toInt().absoluteValue,\n                        )\n                        minuteDifference == 0L -> context.stringResource(AYMR.strings.relative_time_now)\n                        else -> context.pluralStringResource(\n                            AYMR.plurals.relative_time_minutes,\n                            minuteDifference.toInt(),\n                            minuteDifference.toInt(),\n                        )\n                    }\n                }\n                else -> context.pluralStringResource(\n                    AYMR.plurals.relative_time_hours,\n                    hourDifference.toInt(),\n                    hourDifference.toInt(),\n                )\n            }\n        }\n        timeDifference < 7 -> context.pluralStringResource(\n            MR.plurals.relative_time,\n            dateDifference.toInt(),\n            dateDifference.toInt(),\n        )\n        else -> dateFormat.format(this)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/lang/RectFExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.lang\n\nimport android.graphics.RectF\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\n\nfun RectF.invert(invertMode: ReaderPreferences.TappingInvertMode): RectF {\n    val horizontal = invertMode.shouldInvertHorizontal\n    val vertical = invertMode.shouldInvertVertical\n    return when {\n        horizontal && vertical -> RectF(\n            1f - this.right,\n            1f - this.bottom,\n            1f - this.left,\n            1f - this.top,\n        )\n        vertical -> RectF(this.left, 1f - this.bottom, this.right, 1f - this.top)\n        horizontal -> RectF(1f - this.right, this.top, 1f - this.left, this.bottom)\n        else -> this\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/storage/OkioExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.storage\n\nimport okio.BufferedSource\nimport okio.buffer\nimport okio.sink\nimport java.io.File\nimport java.io.OutputStream\n\n/**\n * Saves the given source to a file and closes it. Directories will be created if needed.\n *\n * @param file the file where the source is copied.\n */\nfun BufferedSource.saveTo(file: File) {\n    try {\n        // Create parent dirs if needed\n        file.parentFile?.mkdirs()\n\n        // Copy to destination\n        saveTo(file.outputStream())\n    } catch (e: Exception) {\n        close()\n        file.delete()\n        throw e\n    }\n}\n\n/**\n * Saves the given source to an output stream and closes both resources.\n *\n * @param stream the stream where the source is copied.\n */\nfun BufferedSource.saveTo(stream: OutputStream) {\n    use { input ->\n        stream.sink().buffer().use {\n            it.writeAll(input)\n            it.flush()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/AnimationExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport android.provider.Settings\n\n/**\n * Gets the duration multiplier for general animations on the device\n * @see Settings.Global.ANIMATOR_DURATION_SCALE\n */\nval Context.animatorDurationScale: Float\n    get() = Settings.Global.getFloat(this.contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1f)\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport androidx.annotation.CallSuper\nimport androidx.biometric.BiometricManager\nimport androidx.biometric.BiometricManager.Authenticators\nimport androidx.biometric.BiometricPrompt\nimport androidx.biometric.BiometricPrompt.AuthenticationError\nimport androidx.biometric.auth.AuthPromptCallback\nimport androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication\nimport androidx.core.content.ContextCompat\nimport androidx.fragment.app.FragmentActivity\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport kotlin.coroutines.resume\n\nobject AuthenticatorUtil {\n\n    /**\n     * A check to avoid double authentication on older APIs when confirming settings changes since\n     * the biometric prompt is launched in a separate activity outside of the app.\n     */\n    var isAuthenticating = false\n\n    /**\n     * Launches biometric prompt.\n     *\n     * @param title String title that will be shown on the prompt\n     * @param subtitle Optional string subtitle that will be shown on the prompt\n     * @param confirmationRequired Whether require explicit user confirmation after passive biometric is recognized\n     * @param callback Callback object to handle the authentication events\n     */\n    fun FragmentActivity.startAuthentication(\n        title: String,\n        subtitle: String? = null,\n        confirmationRequired: Boolean = true,\n        callback: AuthenticationCallback,\n    ) {\n        isAuthenticating = true\n        startClass2BiometricOrCredentialAuthentication(\n            title = title,\n            subtitle = subtitle,\n            confirmationRequired = confirmationRequired,\n            executor = ContextCompat.getMainExecutor(this),\n            callback = callback,\n        )\n    }\n\n    suspend fun FragmentActivity.authenticate(\n        title: String,\n        subtitle: String? = stringResource(MR.strings.confirm_lock_change),\n    ): Boolean = suspendCancellableCoroutine { cont ->\n        if (!isAuthenticationSupported()) {\n            cont.resume(true)\n            return@suspendCancellableCoroutine\n        }\n\n        startAuthentication(\n            title,\n            subtitle,\n            callback = object : AuthenticationCallback() {\n                override fun onAuthenticationSucceeded(\n                    activity: FragmentActivity?,\n                    result: BiometricPrompt.AuthenticationResult,\n                ) {\n                    super.onAuthenticationSucceeded(activity, result)\n                    cont.resume(true)\n                }\n\n                override fun onAuthenticationError(\n                    activity: FragmentActivity?,\n                    errorCode: Int,\n                    errString: CharSequence,\n                ) {\n                    super.onAuthenticationError(activity, errorCode, errString)\n                    activity?.toast(errString.toString())\n                    cont.resume(false)\n                }\n            },\n        )\n    }\n\n    /**\n     * Returns true if Class 2 biometric or credential lock is set and available to use\n     */\n    fun Context.isAuthenticationSupported(): Boolean {\n        val authenticators = Authenticators.BIOMETRIC_WEAK or Authenticators.DEVICE_CREDENTIAL\n        return BiometricManager.from(this).canAuthenticate(authenticators) == BiometricManager.BIOMETRIC_SUCCESS\n    }\n\n    /**\n     * [AuthPromptCallback] with extra check\n     *\n     * @see isAuthenticating\n     */\n    abstract class AuthenticationCallback : AuthPromptCallback() {\n        /**\n         * Called when an unrecoverable error has been encountered and authentication has stopped.\n         *\n         *\n         * After this method is called, no further events will be sent for the current\n         * authentication session.\n         *\n         * @param activity  The activity that is currently hosting the prompt.\n         * @param errorCode An integer ID associated with the error.\n         * @param errString A human-readable string that describes the error.\n         */\n        @CallSuper\n        override fun onAuthenticationError(\n            activity: FragmentActivity?,\n            @AuthenticationError errorCode: Int,\n            errString: CharSequence,\n        ) {\n            isAuthenticating = false\n        }\n\n        /**\n         * Called when the user has successfully authenticated.\n         *\n         *\n         * After this method is called, no further events will be sent for the current\n         * authentication session.\n         *\n         * @param activity The activity that is currently hosting the prompt.\n         * @param result   An object containing authentication-related data.\n         */\n        @CallSuper\n        override fun onAuthenticationSucceeded(\n            activity: FragmentActivity?,\n            result: BiometricPrompt.AuthenticationResult,\n        ) {\n            isAuthenticating = false\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/BuildConfig.kt",
    "content": "@file:Suppress(\"UNUSED\", \"KotlinConstantConditions\")\n\npackage eu.kanade.tachiyomi.util.system\n\nimport eu.kanade.tachiyomi.BuildConfig\n\nval updaterEnabled: Boolean\n    inline get() = BuildConfig.UPDATER_ENABLED\n\nval isDebugBuildType: Boolean\n    inline get() = BuildConfig.BUILD_TYPE == \"debug\"\n\nval isPreviewBuildType: Boolean\n    inline get() = BuildConfig.BUILD_TYPE == \"preview\"\n\nval isReleaseBuildType: Boolean\n    inline get() = BuildConfig.BUILD_TYPE == \"release\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/ChildFirstPathClassLoader.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport dalvik.system.PathClassLoader\nimport java.io.IOException\nimport java.io.InputStream\nimport java.net.URL\nimport java.util.Enumeration\n\n/**\n * A parent-last class loader that will try in order:\n * - the system class loader\n * - the child class loader\n * - the parent class loader.\n */\nclass ChildFirstPathClassLoader(\n    dexPath: String,\n    librarySearchPath: String?,\n    parent: ClassLoader,\n) : PathClassLoader(dexPath, librarySearchPath, parent) {\n\n    private val systemClassLoader: ClassLoader? = getSystemClassLoader()\n\n    override fun loadClass(name: String?, resolve: Boolean): Class<*> {\n        var c = findLoadedClass(name)\n\n        if (c == null && systemClassLoader != null) {\n            try {\n                c = systemClassLoader.loadClass(name)\n            } catch (_: ClassNotFoundException) {}\n        }\n\n        if (c == null) {\n            c = try {\n                findClass(name)\n            } catch (_: ClassNotFoundException) {\n                super.loadClass(name, resolve)\n            }\n        }\n\n        if (resolve) {\n            resolveClass(c)\n        }\n\n        return c\n    }\n\n    override fun getResource(name: String?): URL? {\n        return systemClassLoader?.getResource(name)\n            ?: findResource(name)\n            ?: super.getResource(name)\n    }\n\n    override fun getResources(name: String?): Enumeration<URL> {\n        val systemUrls = systemClassLoader?.getResources(name)\n        val localUrls = findResources(name)\n        val parentUrls = parent?.getResources(name)\n        val urls = buildList {\n            while (systemUrls?.hasMoreElements() == true) {\n                add(systemUrls.nextElement())\n            }\n\n            while (localUrls?.hasMoreElements() == true) {\n                add(localUrls.nextElement())\n            }\n\n            while (parentUrls?.hasMoreElements() == true) {\n                add(parentUrls.nextElement())\n            }\n        }\n\n        return object : Enumeration<URL> {\n            val iterator = urls.iterator()\n\n            override fun hasMoreElements() = iterator.hasNext()\n            override fun nextElement() = iterator.next()\n        }\n    }\n\n    override fun getResourceAsStream(name: String?): InputStream? {\n        return try {\n            getResource(name)?.openStream()\n        } catch (_: IOException) {\n            return null\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.ClipData\nimport android.content.ClipboardManager\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.content.res.Configuration\nimport android.net.Uri\nimport android.os.Build\nimport android.os.PowerManager\nimport android.provider.Settings\nimport androidx.appcompat.view.ContextThemeWrapper\nimport androidx.core.content.PermissionChecker\nimport androidx.core.content.getSystemService\nimport androidx.core.net.toUri\nimport com.hippo.unifile.UniFile\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.ThemeMode\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.ui.base.delegate.ThemingDelegate\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport eu.kanade.tachiyomi.util.lang.truncateCenter\nimport logcat.LogPriority\nimport rikka.sui.Sui\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.i18n.MR\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.io.File\n\n/**\n * Copies a string to clipboard\n *\n * @param label Label to show to the user describing the content\n * @param content the actual text to copy to the board\n */\nfun Context.copyToClipboard(label: String, content: String) {\n    if (content.isBlank()) return\n\n    try {\n        val clipboard = getSystemService<ClipboardManager>()!!\n        clipboard.setPrimaryClip(ClipData.newPlainText(label, content))\n\n        // Android 13 and higher shows a visual confirmation of copied contents\n        // https://developer.android.com/about/versions/13/features/copy-paste\n        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {\n            toast(stringResource(MR.strings.copied_to_clipboard, content.truncateCenter(50)))\n        }\n    } catch (e: Throwable) {\n        logcat(LogPriority.ERROR, e)\n        toast(MR.strings.clipboard_copy_error)\n    }\n}\n\n/**\n * Checks if the give permission is granted.\n *\n * @param permission the permission to check.\n * @return true if it has permissions.\n */\nfun Context.hasPermission(permission: String) = PermissionChecker.checkSelfPermission(\n    this,\n    permission,\n) == PermissionChecker.PERMISSION_GRANTED\n\nval Context.powerManager: PowerManager\n    get() = getSystemService()!!\n\nfun Context.openInBrowser(url: String, forceDefaultBrowser: Boolean = false) {\n    this.openInBrowser(url.toUri(), forceDefaultBrowser)\n}\n\nfun Context.openInBrowser(uri: Uri, forceDefaultBrowser: Boolean = false) {\n    try {\n        val intent = Intent(Intent.ACTION_VIEW, uri).apply {\n            // Force default browser so that verified extensions don't re-open Tachiyomi\n            if (forceDefaultBrowser) {\n                defaultBrowserPackageName()?.let { setPackage(it) }\n            }\n        }\n        startActivity(intent)\n    } catch (e: Exception) {\n        toast(e.message)\n    }\n}\n\nprivate fun Context.defaultBrowserPackageName(): String? {\n    val browserIntent = Intent(Intent.ACTION_VIEW, \"http://\".toUri())\n    val resolveInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n        packageManager.resolveActivity(\n            browserIntent,\n            PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong()),\n        )\n    } else {\n        packageManager.resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY)\n    }\n    return resolveInfo\n        ?.activityInfo?.packageName\n        ?.takeUnless { it in DeviceUtil.invalidDefaultBrowsers }\n}\n\nfun Context.createFileInCacheDir(name: String): File {\n    val file = File(externalCacheDir, name)\n    if (file.exists()) {\n        file.delete()\n    }\n    file.createNewFile()\n    return file\n}\n\n/**\n * Creates night mode Context depending on reader theme/background\n *\n * Context wrapping method obtained from AppCompatDelegateImpl\n * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java;l=348;drc=e28752c96fc3fb4d3354781469a1af3dbded4898\n */\nfun Context.createReaderThemeContext(): Context {\n    val preferences = Injekt.get<UiPreferences>()\n    val readerPreferences = Injekt.get<ReaderPreferences>()\n    val themeMode = preferences.themeMode().get()\n    val isDarkBackground = when (readerPreferences.readerTheme().get()) {\n        1, 2 -> true // Black, Gray\n        3 -> when (themeMode) { // Automatic bg uses activity background by default\n            ThemeMode.SYSTEM -> applicationContext.isNightMode()\n            else -> themeMode == ThemeMode.DARK\n        }\n        else -> false // White\n    }\n    val expected = if (isDarkBackground) Configuration.UI_MODE_NIGHT_YES else Configuration.UI_MODE_NIGHT_NO\n    if (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK != expected) {\n        val overrideConf = Configuration()\n        overrideConf.setTo(resources.configuration)\n        overrideConf.uiMode = overrideConf.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv() or expected\n\n        val wrappedContext = ContextThemeWrapper(this, R.style.Theme_Tachiyomi)\n        wrappedContext.applyOverrideConfiguration(overrideConf)\n        ThemingDelegate.getThemeResIds(\n            preferences.appTheme().get(),\n            preferences.themeDarkAmoled().get(),\n        )\n            .forEach { wrappedContext.theme.applyStyle(it, true) }\n        return wrappedContext\n    }\n    return this\n}\n\n/**\n * Gets document size of provided [Uri]\n *\n * @return document size of [uri] or null if size can't be obtained\n */\nfun Context.getUriSize(uri: Uri): Long? {\n    return UniFile.fromUri(this, uri)?.length()?.takeIf { it >= 0 }\n}\n\n/**\n * Returns true if [packageName] is installed.\n */\nfun Context.isPackageInstalled(packageName: String): Boolean {\n    return try {\n        packageManager.getApplicationInfo(packageName, 0)\n        true\n    } catch (e: PackageManager.NameNotFoundException) {\n        false\n    }\n}\n\nval Context.hasMiuiPackageInstaller get() = isPackageInstalled(\"com.miui.packageinstaller\")\n\nval Context.isShizukuInstalled get() = isPackageInstalled(\"moe.shizuku.privileged.api\") || Sui.isSui()\n\nfun Context.launchRequestPackageInstallsPermission() {\n    Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).apply {\n        data = \"package:$packageName\".toUri()\n        startActivity(this)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/DeviceUtilExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.os.Build\nimport com.google.android.material.color.DynamicColors\n\nval DeviceUtil.isDynamicColorAvailable by lazy {\n    DynamicColors.isDynamicColorAvailable() || (DeviceUtil.isSamsung && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/DisplayExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.res.Configuration\nimport android.os.Build\nimport eu.kanade.domain.ui.UiPreferences\nimport eu.kanade.domain.ui.model.TabletUiMode\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\nprivate const val TABLET_UI_REQUIRED_SCREEN_WIDTH_DP = 720\n\n// some tablets have screen width like 711dp = 1600px / 2.25\nprivate const val TABLET_UI_MIN_SCREEN_WIDTH_PORTRAIT_DP = 700\n\n// make sure icons on the nav rail fit\nprivate const val TABLET_UI_MIN_SCREEN_WIDTH_LANDSCAPE_DP = 600\n\nfun Configuration.isTabletUi(): Boolean {\n    return smallestScreenWidthDp >= TABLET_UI_REQUIRED_SCREEN_WIDTH_DP\n}\n\n// TODO: move the logic to `isTabletUi()` when main activity is rewritten in Compose\nfun Context.prepareTabletUiContext(): Context {\n    val configuration = resources.configuration\n    val expected = when (Injekt.get<UiPreferences>().tabletUiMode().get()) {\n        TabletUiMode.AUTOMATIC ->\n            configuration.smallestScreenWidthDp >= when (configuration.orientation) {\n                Configuration.ORIENTATION_PORTRAIT -> TABLET_UI_MIN_SCREEN_WIDTH_PORTRAIT_DP\n                else -> TABLET_UI_MIN_SCREEN_WIDTH_LANDSCAPE_DP\n            }\n        TabletUiMode.ALWAYS -> true\n        TabletUiMode.LANDSCAPE -> configuration.orientation == Configuration.ORIENTATION_LANDSCAPE\n        TabletUiMode.NEVER -> false\n    }\n    if (configuration.isTabletUi() != expected) {\n        val overrideConf = Configuration()\n        overrideConf.setTo(configuration)\n        overrideConf.smallestScreenWidthDp = if (expected) {\n            overrideConf.smallestScreenWidthDp.coerceAtLeast(TABLET_UI_REQUIRED_SCREEN_WIDTH_DP)\n        } else {\n            overrideConf.smallestScreenWidthDp.coerceAtMost(TABLET_UI_REQUIRED_SCREEN_WIDTH_DP - 1)\n        }\n        return createConfigurationContext(overrideConf)\n    }\n    return this\n}\n\n/**\n * Returns true if current context is in night mode\n */\nfun Context.isNightMode(): Boolean {\n    return resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES\n}\n\n/**\n * Checks whether if the device has a display cutout (i.e. notch, camera cutout, etc.).\n *\n * Only works in Android 9+.\n */\nfun Activity.hasDisplayCutout(): Boolean {\n    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.P &&\n        window.decorView.rootWindowInsets?.displayCutout != null\n}\n\n/**\n * Gets system's config_navBarNeedsScrim boolean flag added in Android 10, defaults to true.\n */\nfun Context.isNavigationBarNeedsScrim(): Boolean {\n    return Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ||\n        InternalResourceHelper.getBoolean(this, \"config_navBarNeedsScrim\", true)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/DrawableExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.graphics.Bitmap\nimport android.graphics.drawable.BitmapDrawable\nimport android.graphics.drawable.Drawable\nimport androidx.core.graphics.drawable.toBitmap\nimport coil3.size.ScaleDrawable\n\nfun Drawable.getBitmapOrNull(): Bitmap? = when (this) {\n    is BitmapDrawable -> bitmap\n    is ScaleDrawable -> child.toBitmap()\n    else -> null\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.ClipData\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Build\nimport androidx.core.content.IntentCompat\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport java.io.Serializable\n\nfun Uri.toShareIntent(context: Context, type: String = \"image/*\", message: String? = null): Intent {\n    val uri = this\n\n    val shareIntent = Intent(Intent.ACTION_SEND).apply {\n        when (uri.scheme) {\n            \"http\", \"https\" -> {\n                putExtra(Intent.EXTRA_TEXT, uri.toString())\n            }\n            \"content\" -> {\n                message?.let { putExtra(Intent.EXTRA_TEXT, it) }\n                putExtra(Intent.EXTRA_STREAM, uri)\n            }\n        }\n        clipData = ClipData.newRawUri(null, uri)\n        setType(type)\n        flags = Intent.FLAG_GRANT_READ_URI_PERMISSION\n    }\n\n    return Intent.createChooser(shareIntent, context.stringResource(MR.strings.action_share)).apply {\n        flags = Intent.FLAG_ACTIVITY_NEW_TASK\n    }\n}\n\ninline fun <reified T> Intent.getParcelableExtraCompat(name: String): T? {\n    return IntentCompat.getParcelableExtra(this, name, T::class.java)\n}\n\ninline fun <reified T : Serializable> Intent.getSerializableExtraCompat(name: String): T? {\n    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n        getSerializableExtra(name, T::class.java)\n    } else {\n        @Suppress(\"DEPRECATION\")\n        getSerializableExtra(name) as? T\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/InternalResourceHelper.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.res.Resources\n\nobject InternalResourceHelper {\n\n    fun getBoolean(context: Context, resName: String, defaultValue: Boolean): Boolean {\n        val id = getResourceId(resName, \"bool\")\n        return if (id != 0) {\n            context.createPackageContext(\"android\", 0).resources.getBoolean(id)\n        } else {\n            defaultValue\n        }\n    }\n\n    /**\n     * Get resource id from system resources\n     * @param resName resource name to get\n     * @param type resource type of [resName] to get\n     * @return 0 if not available\n     */\n    @SuppressLint(\"DiscouragedApi\")\n    private fun getResourceId(resName: String, type: String): Int {\n        return Resources.getSystem().getIdentifier(resName, type, \"android\")\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport androidx.core.os.LocaleListCompat\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport java.util.Locale\n\n/**\n * Utility class to change the application's language in runtime.\n */\nobject LocaleHelper {\n\n    /**\n     * Sorts by display name, except keeps the \"all\" (displayed as \"Multi\") locale at the top.\n     */\n    val comparator = { a: String, b: String ->\n        if (a == \"all\") {\n            -1\n        } else if (b == \"all\") {\n            1\n        } else {\n            getLocalizedDisplayName(a).compareTo(getLocalizedDisplayName(b))\n        }\n    }\n\n    /**\n     * Returns display name of a string language code.\n     */\n    fun getSourceDisplayName(lang: String?, context: Context): String {\n        return when (lang) {\n            LAST_USED_KEY -> context.stringResource(MR.strings.last_used_source)\n            PINNED_KEY -> context.stringResource(MR.strings.pinned_sources)\n            \"other\" -> context.stringResource(MR.strings.other_source)\n            \"all\" -> context.stringResource(MR.strings.multi_lang)\n            else -> getLocalizedDisplayName(lang)\n        }\n    }\n\n    fun getDisplayName(lang: String): String {\n        val normalizedLang = when (lang) {\n            \"zh-CN\" -> \"zh-Hans\"\n            \"zh-TW\" -> \"zh-Hant\"\n            else -> lang\n        }\n\n        return Locale.forLanguageTag(normalizedLang).displayName\n    }\n\n    /**\n     * Returns display name of a string language code.\n     *\n     * @param lang empty for system language\n     */\n    fun getLocalizedDisplayName(lang: String?): String {\n        if (lang == null) {\n            return \"\"\n        }\n\n        val locale = when (lang) {\n            \"\" -> LocaleListCompat.getAdjustedDefault()[0]\n            \"zh-CN\" -> Locale.forLanguageTag(\"zh-Hans\")\n            \"zh-TW\" -> Locale.forLanguageTag(\"zh-Hant\")\n            else -> Locale.forLanguageTag(lang)\n        }\n        return locale!!.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) }\n    }\n\n    /**\n     * Return the default languages enabled for the sources.\n     */\n    fun getDefaultEnabledLanguages(): Set<String> {\n        return setOf(\"all\", \"en\", Locale.getDefault().language)\n    }\n\n    /**\n     * Return English display string from string language code\n     */\n    fun getSimpleLocaleDisplayName(): String {\n        return LocaleListCompat.getDefault()[0]!!.displayLanguage\n    }\n}\n\ninternal const val PINNED_KEY = \"pinned\"\ninternal const val LAST_USED_KEY = \"last_used\"\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport android.net.ConnectivityManager\nimport android.net.NetworkCapabilities\nimport android.net.wifi.WifiManager\nimport android.os.Build\nimport androidx.core.content.getSystemService\n\nval Context.connectivityManager: ConnectivityManager\n    get() = getSystemService()!!\n\nval Context.wifiManager: WifiManager\n    get() = getSystemService()!!\n\nfun Context.isOnline(): Boolean {\n    val activeNetwork = connectivityManager.activeNetwork ?: return false\n    val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false\n    val maxTransport = when {\n        Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 -> NetworkCapabilities.TRANSPORT_LOWPAN\n        else -> NetworkCapabilities.TRANSPORT_WIFI_AWARE\n    }\n    return (NetworkCapabilities.TRANSPORT_CELLULAR..maxTransport).any(\n        networkCapabilities::hasTransport,\n    )\n}\n\n/**\n * Returns true if device is connected to Wifi.\n */\nfun Context.isConnectedToWifi(): Boolean {\n    if (!wifiManager.isWifiEnabled) return false\n\n    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n        val activeNetwork = connectivityManager.activeNetwork ?: return false\n        val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false\n\n        networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) &&\n            networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)\n    } else {\n        @Suppress(\"DEPRECATION\")\n        wifiManager.connectionInfo.bssid != null\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/NetworkStateTracker.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport android.net.ConnectivityManager.NetworkCallback\nimport android.net.Network\nimport android.net.NetworkCapabilities\nimport kotlinx.coroutines.channels.awaitClose\nimport kotlinx.coroutines.flow.callbackFlow\n\ndata class NetworkState(\n    val isConnected: Boolean,\n    val isValidated: Boolean,\n    val isWifi: Boolean,\n) {\n    val isOnline = isConnected && isValidated\n}\n\n@Suppress(\"DEPRECATION\")\nfun Context.activeNetworkState(): NetworkState {\n    val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)\n    return NetworkState(\n        isConnected = connectivityManager.activeNetworkInfo?.isConnected ?: false,\n        isValidated = capabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ?: false,\n        isWifi = wifiManager.isWifiEnabled && capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ?: false,\n    )\n}\n\nfun Context.networkStateFlow() = callbackFlow {\n    val networkCallback = object : NetworkCallback() {\n        override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {\n            trySend(activeNetworkState())\n        }\n        override fun onLost(network: Network) {\n            trySend(activeNetworkState())\n        }\n    }\n\n    connectivityManager.registerDefaultNetworkCallback(networkCallback)\n    awaitClose {\n        connectivityManager.unregisterNetworkCallback(networkCallback)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/NotificationExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.Manifest\nimport android.app.Notification\nimport android.app.NotificationManager\nimport android.content.Context\nimport android.os.Build\nimport androidx.core.app.NotificationChannelCompat\nimport androidx.core.app.NotificationChannelGroupCompat\nimport androidx.core.app.NotificationCompat\nimport androidx.core.app.NotificationManagerCompat\nimport androidx.core.app.NotificationManagerCompat.NotificationWithIdAndTag\nimport androidx.core.content.PermissionChecker\nimport androidx.core.content.getSystemService\nimport eu.kanade.tachiyomi.R\n\nval Context.notificationManager: NotificationManager\n    get() = getSystemService()!!\n\nfun Context.notify(\n    id: Int,\n    channelId: String,\n    block: (NotificationCompat.Builder.() -> Unit)? = null,\n) {\n    val notification = notificationBuilder(channelId, block).build()\n    this.notify(id, notification)\n}\n\nfun Context.notify(id: Int, notification: Notification) {\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&\n        PermissionChecker.checkSelfPermission(\n            this,\n            Manifest.permission.POST_NOTIFICATIONS,\n        ) != PermissionChecker.PERMISSION_GRANTED\n    ) {\n        return\n    }\n\n    NotificationManagerCompat.from(this).notify(id, notification)\n}\n\nfun Context.notify(notificationWithIdAndTags: List<NotificationWithIdAndTag>) {\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&\n        PermissionChecker.checkSelfPermission(\n            this,\n            Manifest.permission.POST_NOTIFICATIONS,\n        ) != PermissionChecker.PERMISSION_GRANTED\n    ) {\n        return\n    }\n\n    NotificationManagerCompat.from(this).notify(notificationWithIdAndTags)\n}\n\nfun Context.cancelNotification(id: Int) {\n    NotificationManagerCompat.from(this).cancel(id)\n}\n\n/**\n * Helper method to create a notification builder.\n *\n * @param id the channel id.\n * @param block the function that will execute inside the builder.\n * @return a notification to be displayed or updated.\n */\nfun Context.notificationBuilder(\n    channelId: String,\n    block: (NotificationCompat.Builder.() -> Unit)? = null,\n): NotificationCompat.Builder {\n    val builder = NotificationCompat.Builder(this, channelId)\n        .setColor(getColor(R.color.accent_blue))\n    if (block != null) {\n        builder.block()\n    }\n    return builder\n}\n\n/**\n * Helper method to build a notification channel group.\n *\n * @param channelId the channel id.\n * @param block the function that will execute inside the builder.\n * @return a notification channel group to be displayed or updated.\n */\nfun buildNotificationChannelGroup(\n    channelId: String,\n    block: (NotificationChannelGroupCompat.Builder.() -> Unit),\n): NotificationChannelGroupCompat {\n    val builder = NotificationChannelGroupCompat.Builder(channelId)\n    builder.block()\n    return builder.build()\n}\n\n/**\n * Helper method to build a notification channel.\n *\n * @param channelId the channel id.\n * @param channelImportance the channel importance.\n * @param block the function that will execute inside the builder.\n * @return a notification channel to be displayed or updated.\n */\nfun buildNotificationChannel(\n    channelId: String,\n    channelImportance: Int,\n    block: (NotificationChannelCompat.Builder.() -> Unit),\n): NotificationChannelCompat {\n    val builder = NotificationChannelCompat.Builder(channelId, channelImportance)\n    builder.block()\n    return builder.build()\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/TvUtils.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.app.UiModeManager\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.content.res.Configuration\nimport android.os.Build\n\nfun isTvBox(context: Context): Boolean {\n    val pm: PackageManager = context.packageManager\n\n    // TV for sure\n    if (\n        context.getSystemService(UiModeManager::class.java)\n            .getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION\n    ) {\n        return true\n    }\n\n    // Missing Files app (DocumentsUI) means box (some boxes still have non functional app or stub)\n    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)\n    intent.addCategory(Intent.CATEGORY_OPENABLE)\n    intent.setType(\"video/*\")\n    if (intent.resolveActivity(pm) == null) {\n        return true\n    }\n\n    // Legacy storage no longer works on Android 11 (level 30)\n    if (Build.VERSION.SDK_INT < 30) {\n        // (Some boxes still report touchscreen feature)\n        if (!pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {\n            return true\n        }\n        if (pm.hasSystemFeature(\"android.hardware.hdmi.cec\")) {\n            return true\n        }\n        if (Build.MANUFACTURER.equals(\"zidoo\", ignoreCase = true)) {\n            return true\n        }\n    }\n\n    // Default: No TV - use SAF\n    return false\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/system/WorkManagerExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport androidx.work.CoroutineWorker\nimport androidx.work.WorkInfo\nimport androidx.work.WorkManager\nimport kotlinx.coroutines.delay\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nval Context.workManager: WorkManager\n    get() = WorkManager.getInstance(this)\n\nfun WorkManager.isRunning(tag: String): Boolean {\n    val list = this.getWorkInfosByTag(tag).get()\n    return list.any { it.state == WorkInfo.State.RUNNING }\n}\n\n/**\n * Makes this worker run in the context of a foreground service.\n *\n * Note that this function is a no-op if the process is subject to foreground\n * service restrictions.\n *\n * Moving to foreground service context requires the worker to run a bit longer,\n * allowing Service.startForeground() to be called and avoiding system crash.\n */\nsuspend fun CoroutineWorker.setForegroundSafely() {\n    try {\n        setForeground(getForegroundInfo())\n        delay(500)\n    } catch (e: IllegalStateException) {\n        logcat(LogPriority.ERROR, e) { \"Not allowed to set foreground job\" }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/view/EditTextPreferenceExtensions.kt",
    "content": "@file:Suppress(\"PackageDirectoryMismatch\")\n\npackage androidx.preference\n\n/**\n * Returns package-private [EditTextPreference.getOnBindEditTextListener]\n */\nfun EditTextPreference.getOnBindEditTextListener(): EditTextPreference.OnBindEditTextListener? {\n    return onBindEditTextListener\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt",
    "content": "@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage eu.kanade.tachiyomi.util.view\n\nimport android.content.res.Resources\nimport android.graphics.Rect\nimport android.view.Gravity\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.view.View\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.annotation.MenuRes\nimport androidx.appcompat.widget.PopupMenu\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionContext\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.ui.platform.ComposeView\nimport androidx.compose.ui.platform.ViewCompositionStrategy\nimport eu.kanade.presentation.theme.TachiyomiTheme\nimport eu.kanade.tachiyomi.R\n\ninline fun ComponentActivity.setComposeContent(\n    parent: CompositionContext? = null,\n    crossinline content: @Composable () -> Unit,\n) {\n    setContent(parent) {\n        TachiyomiTheme {\n            CompositionLocalProvider(\n                LocalTextStyle provides MaterialTheme.typography.bodySmall,\n                LocalContentColor provides MaterialTheme.colorScheme.onBackground,\n            ) {\n                content()\n            }\n        }\n    }\n}\n\nfun ComposeView.setComposeContent(\n    content: @Composable () -> Unit,\n) {\n    setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)\n    setContent {\n        TachiyomiTheme {\n            CompositionLocalProvider(\n                LocalTextStyle provides MaterialTheme.typography.bodySmall,\n                LocalContentColor provides MaterialTheme.colorScheme.onBackground,\n            ) {\n                content()\n            }\n        }\n    }\n}\n\n/**\n * Shows a popup menu on top of this view.\n *\n * @param menuRes menu items to inflate the menu with.\n * @param initMenu function to execute when the menu after is inflated.\n * @param onMenuItemClick function to execute when a menu item is clicked.\n */\ninline fun View.popupMenu(\n    @MenuRes menuRes: Int,\n    noinline initMenu: (Menu.() -> Unit)? = null,\n    noinline onMenuItemClick: MenuItem.() -> Unit,\n): PopupMenu {\n    val popup = PopupMenu(context, this, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0)\n    popup.menuInflater.inflate(menuRes, popup.menu)\n\n    if (initMenu != null) {\n        popup.menu.initMenu()\n    }\n    popup.setOnMenuItemClickListener {\n        it.onMenuItemClick()\n        true\n    }\n\n    popup.show()\n    return popup\n}\n\nfun View?.isVisibleOnScreen(): Boolean {\n    if (this == null) {\n        return false\n    }\n    if (!this.isShown) {\n        return false\n    }\n    val actualPosition = Rect()\n    this.getGlobalVisibleRect(actualPosition)\n    val screen = Rect(\n        0,\n        0,\n        Resources.getSystem().displayMetrics.widthPixels,\n        Resources.getSystem().displayMetrics.heightPixels,\n    )\n    return actualPosition.intersect(screen)\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.view\n\nimport android.view.Window\nimport android.view.WindowManager\n\nfun Window.setSecureScreen(enabled: Boolean) {\n    if (enabled) {\n        setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)\n    } else {\n        clearFlags(WindowManager.LayoutParams.FLAG_SECURE)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/widget/MinMaxNumberPicker.kt",
    "content": "package eu.kanade.tachiyomi.widget\n\nimport android.content.Context\nimport android.text.InputType\nimport android.util.AttributeSet\nimport android.view.ViewGroup\nimport android.widget.EditText\nimport android.widget.NumberPicker\nimport androidx.core.view.descendants\nimport androidx.core.view.doOnLayout\nimport eu.kanade.tachiyomi.R\n\nclass MinMaxNumberPicker @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :\n    NumberPicker(context, attrs) {\n\n    override fun setDisplayedValues(displayedValues: Array<out String>?) {\n        super.setDisplayedValues(displayedValues)\n\n        // Disable keyboard input when a value that can't be auto-filled with number exists\n        val notNumberValue = displayedValues?.find { it.getOrNull(0)?.digitToIntOrNull() == null }\n        if (notNumberValue != null) {\n            descendantFocusability = FOCUS_BLOCK_DESCENDANTS\n        }\n    }\n\n    init {\n        if (attrs != null) {\n            val ta = context.obtainStyledAttributes(attrs, R.styleable.MinMaxNumberPicker, 0, 0)\n            try {\n                minValue = ta.getInt(R.styleable.MinMaxNumberPicker_min, 0)\n                maxValue = ta.getInt(R.styleable.MinMaxNumberPicker_max, 0)\n            } finally {\n                ta.recycle()\n            }\n        }\n\n        doOnLayout {\n            findDescendant<EditText>()?.setRawInputType(InputType.TYPE_CLASS_NUMBER)\n        }\n    }\n}\n\n/**\n * Returns this ViewGroup's first descendant of specified class\n */\ninline fun <reified T> ViewGroup.findDescendant(): T? {\n    return descendants.find { it is T } as? T\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/widget/RevealAnimationView.kt",
    "content": "package eu.kanade.tachiyomi.widget\n\nimport android.animation.Animator\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.View\nimport android.view.ViewAnimationUtils\nimport androidx.core.animation.doOnEnd\nimport androidx.core.view.isInvisible\nimport androidx.core.view.isVisible\n\nclass RevealAnimationView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :\n    View(context, attrs) {\n\n    /**\n     * Hides the animation view with a animation\n     *\n     * @param centerX x starting point\n     * @param centerY y starting point\n     * @param initialRadius size of radius of animation\n     */\n    fun hideRevealEffect(centerX: Int, centerY: Int, initialRadius: Int) {\n        // Make the view visible.\n        this.isVisible = true\n\n        // Create the animation (the final radius is zero).\n        val anim = ViewAnimationUtils.createCircularReveal(\n            this,\n            centerX,\n            centerY,\n            initialRadius.toFloat(),\n            0f,\n        )\n\n        // Set duration of animation.\n        anim.duration = 500\n\n        // make the view invisible when the animation is done\n        anim.doOnEnd {\n            this@RevealAnimationView.isInvisible = true\n        }\n\n        anim.start()\n    }\n\n    /**\n     * Fills the animation view with a animation\n     *\n     * @param centerX x starting point\n     * @param centerY y starting point\n     * @param listener animation listener\n     */\n    fun showRevealEffect(centerX: Int, centerY: Int, listener: Animator.AnimatorListener) {\n        this.isVisible = true\n\n        val height = this.height\n\n        // Create animation\n        val anim = ViewAnimationUtils.createCircularReveal(\n            this,\n            centerX,\n            centerY,\n            0f,\n            height.toFloat(),\n        )\n\n        // Set duration of animation\n        anim.duration = 350\n\n        anim.addListener(listener)\n        anim.start()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiTextInputEditText.kt",
    "content": "package eu.kanade.tachiyomi.widget\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.widget.EditText\nimport androidx.core.view.inputmethod.EditorInfoCompat\nimport com.google.android.material.textfield.TextInputEditText\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText.Companion.setIncognito\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.SupervisorJob\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * A custom [TextInputEditText] that sets [EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING] to imeOptions\n * if [BasePreferences.incognitoMode] is true. Some IMEs may not respect this flag.\n *\n * @see setIncognito\n */\nclass TachiyomiTextInputEditText @JvmOverloads constructor(\n    context: Context,\n    attrs: AttributeSet? = null,\n    defStyleAttr: Int = R.attr.editTextStyle,\n) : TextInputEditText(context, attrs, defStyleAttr) {\n\n    private var scope: CoroutineScope? = null\n\n    override fun onAttachedToWindow() {\n        super.onAttachedToWindow()\n        scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)\n        setIncognito(scope!!)\n    }\n\n    override fun onDetachedFromWindow() {\n        super.onDetachedFromWindow()\n        scope?.cancel()\n        scope = null\n    }\n\n    companion object {\n        /**\n         * Sets Flow to this [EditText] that sets [EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING] to imeOptions\n         * if [BasePreferences.incognitoMode] is true. Some IMEs may not respect this flag.\n         */\n        fun EditText.setIncognito(viewScope: CoroutineScope) {\n            Injekt.get<BasePreferences>().incognitoMode().changes()\n                .onEach {\n                    imeOptions = if (it) {\n                        imeOptions or EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING\n                    } else {\n                        imeOptions and EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING.inv()\n                    }\n                }\n                .launchIn(viewScope)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/widget/ViewPagerAdapter.kt",
    "content": "package eu.kanade.tachiyomi.widget\n\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.viewpager.widget.PagerAdapter\n\nabstract class ViewPagerAdapter : PagerAdapter() {\n\n    protected abstract fun createView(container: ViewGroup, position: Int): View\n\n    protected open fun destroyView(container: ViewGroup, position: Int, view: View) {\n    }\n\n    override fun instantiateItem(container: ViewGroup, position: Int): Any {\n        val view = createView(container, position)\n        container.addView(view)\n        return view\n    }\n\n    override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {\n        val view = obj as View\n        destroyView(container, position, view)\n        container.removeView(view)\n    }\n\n    override fun isViewFromObject(view: View, obj: Any): Boolean {\n        return view === obj\n    }\n\n    interface PositionableView {\n        val item: Any\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/widget/listener/IgnoreFirstSpinnerListener.kt",
    "content": "package eu.kanade.tachiyomi.widget.listener\n\nimport android.view.View\nimport android.widget.AdapterView\nimport android.widget.AdapterView.OnItemSelectedListener\n\nclass IgnoreFirstSpinnerListener(private val block: (Int) -> Unit) : OnItemSelectedListener {\n\n    private var firstEvent = true\n\n    override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {\n        if (!firstEvent) {\n            block(position)\n        } else {\n            firstEvent = false\n        }\n    }\n\n    override fun onNothingSelected(parent: AdapterView<*>?) {\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/tachiyomi/widget/listener/SimpleSeekBarListener.kt",
    "content": "package eu.kanade.tachiyomi.widget.listener\n\nimport android.widget.SeekBar\n\nopen class SimpleSeekBarListener : SeekBar.OnSeekBarChangeListener {\n    override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {\n    }\n\n    override fun onStartTrackingTouch(seekBar: SeekBar) {\n    }\n\n    override fun onStopTrackingTouch(seekBar: SeekBar) {\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/eu/kanade/test/DummyTracker.kt",
    "content": "package eu.kanade.test\n\nimport android.graphics.Color\nimport eu.kanade.tachiyomi.R\nimport eu.kanade.tachiyomi.data.track.Tracker\nimport eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch\nimport eu.kanade.tachiyomi.data.track.model.MangaTrackSearch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flowOf\nimport okhttp3.OkHttpClient\n\ndata class DummyTracker(\n    override val id: Long,\n    override val name: String,\n    override val supportsReadingDates: Boolean = false,\n    override val supportsPrivateTracking: Boolean = false,\n    override val isLoggedIn: Boolean = false,\n    override val isLoggedInFlow: Flow<Boolean> = flowOf(false),\n    val valLogoColor: Int = Color.rgb(18, 25, 35),\n    val valLogo: Int = R.drawable.ic_tracker_anilist,\n    val valStatuses: List<Long> = (1L..6L).toList(),\n    val valCompletionStatus: Long = 2,\n    val valScoreList: ImmutableList<String> = (0..10).map(Int::toString).toImmutableList(),\n    val val10PointScore: Double = 5.4,\n    val valMangaSearchResults: List<MangaTrackSearch> = listOf(),\n    val valAnimeSearchResults: List<AnimeTrackSearch> = listOf(),\n) : Tracker {\n\n    override val client: OkHttpClient\n        get() = TODO(\"Not yet implemented\")\n\n    override fun getLogoColor(): Int = valLogoColor\n\n    override fun getLogo(): Int = valLogo\n\n    override fun getCompletionStatus(): Long = valCompletionStatus\n\n    override fun getScoreList(): ImmutableList<String> = valScoreList\n\n    override suspend fun login(username: String, password: String) = Unit\n\n    override fun logout() = Unit\n\n    override fun getUsername(): String = \"username\"\n\n    override fun getPassword(): String = \"passw0rd\"\n\n    override fun saveCredentials(username: String, password: String) = Unit\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/designsystem/utils/WindowSize.kt",
    "content": "package mihon.core.designsystem.utils\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.unit.dp\n\n@Composable\n@ReadOnlyComposable\nfun isMediumWidthWindow(): Boolean {\n    val configuration = LocalConfiguration.current\n    return configuration.screenWidthDp > MediumWidthWindowSize.value\n}\n\n@Composable\n@ReadOnlyComposable\nfun isExpandedWidthWindow(): Boolean {\n    val configuration = LocalConfiguration.current\n    return configuration.screenWidthDp > ExpandedWidthWindowSize.value\n}\n\nval MediumWidthWindowSize = 600.dp\nval ExpandedWidthWindowSize = 840.dp\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/Migration.kt",
    "content": "package mihon.core.migration\n\ninterface Migration {\n    val version: Float\n\n    suspend operator fun invoke(migrationContext: MigrationContext): Boolean\n\n    val isAlways: Boolean\n        get() = version == ALWAYS\n\n    companion object {\n        const val ALWAYS = -1f\n\n        fun of(version: Float, action: suspend (MigrationContext) -> Boolean): Migration = object : Migration {\n            override val version: Float = version\n\n            override suspend operator fun invoke(migrationContext: MigrationContext): Boolean {\n                return action(migrationContext)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/MigrationCompletedListener.kt",
    "content": "package mihon.core.migration\n\ntypealias MigrationCompletedListener = () -> Unit\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/MigrationContext.kt",
    "content": "package mihon.core.migration\n\nimport uy.kohesive.injekt.Injekt\n\nclass MigrationContext(val dryrun: Boolean) {\n\n    inline fun <reified T> get(): T? {\n        return Injekt.getInstanceOrNull(T::class.java)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/MigrationJobFactory.kt",
    "content": "package mihon.core.migration\n\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.CoroutineStart\nimport kotlinx.coroutines.Deferred\nimport kotlinx.coroutines.async\nimport tachiyomi.core.common.util.system.logcat\n\nclass MigrationJobFactory(\n    private val migrationContext: MigrationContext,\n    private val scope: CoroutineScope,\n) {\n\n    fun create(migrations: List<Migration>): Deferred<Boolean> = with(scope) {\n        return migrations.sortedBy { it.version }\n            .fold(CompletableDeferred(true)) { acc: Deferred<Boolean>, migration: Migration ->\n                if (!migrationContext.dryrun) {\n                    logcat {\n                        \"Running migration: { name = ${migration::class.simpleName}, version = ${migration.version} }\"\n                    }\n                    async(start = CoroutineStart.UNDISPATCHED) {\n                        val prev = acc.await()\n                        migration(migrationContext) || prev\n                    }\n                } else {\n                    logcat {\n                        \"(Dry-run) Running migration: { name = ${migration::class.simpleName}, version = ${migration.version} }\"\n                    }\n                    CompletableDeferred(true)\n                }\n            }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/MigrationStrategy.kt",
    "content": "package mihon.core.migration\n\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Deferred\nimport kotlinx.coroutines.launch\n\ninterface MigrationStrategy {\n    operator fun invoke(migrations: List<Migration>): Deferred<Boolean>\n}\n\nclass DefaultMigrationStrategy(\n    private val migrationJobFactory: MigrationJobFactory,\n    private val migrationCompletedListener: MigrationCompletedListener,\n    private val scope: CoroutineScope,\n) : MigrationStrategy {\n\n    override operator fun invoke(migrations: List<Migration>): Deferred<Boolean> = with(scope) {\n        if (migrations.isEmpty()) {\n            return@with CompletableDeferred(false)\n        }\n\n        val chain = migrationJobFactory.create(migrations)\n\n        launch {\n            if (chain.await()) migrationCompletedListener()\n        }.start()\n\n        chain\n    }\n}\n\nclass InitialMigrationStrategy(private val strategy: DefaultMigrationStrategy) : MigrationStrategy {\n\n    override operator fun invoke(migrations: List<Migration>): Deferred<Boolean> {\n        return strategy(migrations.filter { it.isAlways })\n    }\n}\n\nclass NoopMigrationStrategy(val state: Boolean) : MigrationStrategy {\n\n    override fun invoke(migrations: List<Migration>): Deferred<Boolean> {\n        return CompletableDeferred(state)\n    }\n}\n\nclass VersionRangeMigrationStrategy(\n    private val versions: IntRange,\n    private val strategy: DefaultMigrationStrategy,\n) : MigrationStrategy {\n\n    override operator fun invoke(migrations: List<Migration>): Deferred<Boolean> {\n        return strategy(migrations.filter { it.isAlways || it.version.toInt() in versions })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/MigrationStrategyFactory.kt",
    "content": "package mihon.core.migration\n\nclass MigrationStrategyFactory(\n    private val factory: MigrationJobFactory,\n    private val migrationCompletedListener: MigrationCompletedListener,\n) {\n\n    fun create(old: Int, new: Int): MigrationStrategy {\n        val strategy = when {\n            old == 0 -> InitialMigrationStrategy(\n                strategy = DefaultMigrationStrategy(factory, migrationCompletedListener, Migrator.scope),\n            )\n            old >= new -> NoopMigrationStrategy(false)\n            else -> VersionRangeMigrationStrategy(\n                versions = (old + 1)..new,\n                strategy = DefaultMigrationStrategy(factory, migrationCompletedListener, Migrator.scope),\n            )\n        }\n        return strategy\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/Migrator.kt",
    "content": "package mihon.core.migration\n\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Deferred\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.runBlocking\n\nobject Migrator {\n\n    private var result: Deferred<Boolean>? = null\n    val scope = CoroutineScope(Dispatchers.IO + Job())\n\n    fun initialize(\n        old: Int,\n        new: Int,\n        migrations: List<Migration>,\n        dryrun: Boolean = false,\n        onMigrationComplete: () -> Unit,\n    ) {\n        val migrationContext = MigrationContext(dryrun)\n        val migrationJobFactory = MigrationJobFactory(migrationContext, scope)\n        val migrationStrategyFactory = MigrationStrategyFactory(migrationJobFactory, onMigrationComplete)\n        val strategy = migrationStrategyFactory.create(old, new)\n        result = strategy(migrations)\n    }\n\n    suspend fun await(): Boolean {\n        val result = result ?: CompletableDeferred(false)\n        return result.await()\n    }\n\n    fun release() {\n        result = null\n    }\n\n    fun awaitAndRelease(): Boolean = runBlocking {\n        await().also { release() }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/AddAllLangMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.plusAssign\n\nclass AddAllLangMigration : Migration {\n    override val version = 70f\n\n    // Migration to add \"all\" to enabled langauges\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val sourcePreferences = migrationContext.get<SourcePreferences>() ?: return false\n\n        if (sourcePreferences.enabledLanguages().isSet()) {\n            sourcePreferences.enabledLanguages() += \"all\"\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass CategoryPreferencesCleanupMigration : Migration {\n    override val version: Float = 129f\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext {\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return@withIOContext false\n        val downloadPreferences = migrationContext.get<DownloadPreferences>() ?: return@withIOContext false\n\n        val getAnimeCategories = migrationContext.get<GetAnimeCategories>() ?: return@withIOContext false\n        val getMangaCategories = migrationContext.get<GetMangaCategories>() ?: return@withIOContext false\n        val allAnimeCategories = getAnimeCategories.await().map { it.id.toString() }.toSet()\n        val allMangaCategories = getMangaCategories.await().map { it.id.toString() }.toSet()\n\n        val defaultAnimeCategory = libraryPreferences.defaultAnimeCategory().get()\n        if (defaultAnimeCategory.toString() !in allAnimeCategories) {\n            libraryPreferences.defaultAnimeCategory().delete()\n        }\n        val defaultMangaCategory = libraryPreferences.defaultMangaCategory().get()\n        if (defaultMangaCategory.toString() !in allMangaCategories) {\n            libraryPreferences.defaultMangaCategory().delete()\n        }\n\n        val categoryPreferences = listOf(\n            libraryPreferences.animeUpdateCategories(),\n            libraryPreferences.mangaUpdateCategories(),\n            libraryPreferences.animeUpdateCategoriesExclude(),\n            libraryPreferences.mangaUpdateCategoriesExclude(),\n            downloadPreferences.removeExcludeCategories(),\n            downloadPreferences.removeExcludeAnimeCategories(),\n            downloadPreferences.downloadNewChapterCategories(),\n            downloadPreferences.downloadNewEpisodeCategories(),\n            downloadPreferences.downloadNewChapterCategoriesExclude(),\n            downloadPreferences.downloadNewEpisodeCategoriesExclude(),\n        )\n        categoryPreferences.forEach { preference ->\n            val ids = preference.get()\n            val garbageIds = ids\n                .minus(allAnimeCategories)\n                .minus(allMangaCategories)\n            if (garbageIds.isEmpty()) return@forEach\n            preference.set(ids.minus(garbageIds))\n        }\n        return@withIOContext true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/CombineUpdateRestrictionMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.minusAssign\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED\n\nclass CombineUpdateRestrictionMigration : Migration {\n    override val version = 72f\n\n    // Combine global update item restrictions\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val oldUpdateOngoingOnly = prefs.getBoolean(\n            \"pref_update_only_non_completed_key\",\n            true,\n        )\n        if (!oldUpdateOngoingOnly) {\n            libraryPreferences.autoUpdateItemRestrictions() -= ENTRY_NON_COMPLETED\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/CoverToExternalFileMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport java.io.File\n\nclass CoverToExternalFileMigration : Migration {\n    override val version = 19f\n\n    // Move covers to external files dir.\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        val oldDir = File(context.externalCacheDir, \"cover_disk_cache\")\n        if (oldDir.exists()) {\n            val destDir = context.getExternalFilesDir(\"covers\")\n            if (destDir != null) {\n                oldDir.listFiles()?.forEach {\n                    it.renameTo(File(destDir, it.name))\n                }\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/DOHMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.network.NetworkPreferences\nimport eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass DOHMigration : Migration {\n    override val version = 57f\n\n    // Migrate DNS over HTTPS setting\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val networkPreferences = migrationContext.get<NetworkPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val wasDohEnabled = prefs.getBoolean(\"enable_doh\", false)\n        if (wasDohEnabled) {\n            prefs.edit {\n                putInt(networkPreferences.dohProvider().key(), PREF_DOH_CLOUDFLARE)\n                remove(\"enable_doh\")\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/DeleteExternalChapterCacheDirMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport java.io.File\n\nclass DeleteExternalChapterCacheDirMigration : Migration {\n    override val version = 26f\n\n    // Delete external chapter cache dir.\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        val extCache = context.externalCacheDir\n        if (extCache != null) {\n            val chapterCache = File(extCache, \"chapter_disk_cache\")\n            if (chapterCache.exists()) {\n                chapterCache.deleteRecursively()\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/DontRunJobsMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.getAndSet\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass DontRunJobsMigration : Migration {\n    override val version = 105f\n\n    // Don't run automatic backup or library update jobs if battery is low\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n\n        val pref = libraryPreferences.autoUpdateDeviceRestrictions()\n        if (pref.isSet() && \"battery_not_low\" in pref.get()) {\n            pref.getAndSet { it - \"battery_not_low\" }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/EnableAutoBackupMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.backup.create.BackupCreateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.backup.service.BackupPreferences\n\nclass EnableAutoBackupMigration : Migration {\n    override val version = 84f\n\n    // Always attempt automatic backup creation\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val backupPreferences = migrationContext.get<BackupPreferences>() ?: return false\n\n        if (backupPreferences.backupInterval().get() == 0) {\n            backupPreferences.backupInterval().set(12)\n            BackupCreateJob.setupTask(context)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/EnumsMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.player.Debanding\nimport eu.kanade.tachiyomi.ui.player.VideoAspect\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass EnumsMigration : Migration {\n    override val version = 123f\n\n    // refactor(player): Implement more enums\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val deband = preferenceStore.getInt(\"pref_deband\", 0)\n        val playerViewMode = preferenceStore.getInt(\"pref_player_view_mode\", 1)\n        val gpuNext = preferenceStore.getBoolean(\"gpu_next\", false)\n\n        prefs.edit {\n            remove(\"pref_invert_playback_txt\")\n            remove(\"pref_invert_duration_txt\")\n            remove(\"pref_hwdec\")\n            remove(\"pref_deband\")\n            remove(\"pref_player_view_mode\")\n            remove(\"gpu_next\")\n\n            val videoDebanding = Debanding.entries.first { it.ordinal == deband.get() }\n            val aspectState = VideoAspect.entries.first { it.ordinal == playerViewMode.get() }\n\n            preferenceStore.getEnum(\"pref_video_debanding\", Debanding.None).set(videoDebanding)\n            preferenceStore.getEnum(\"pref_player_aspect_state\", VideoAspect.Fit).set(aspectState)\n            preferenceStore.getBoolean(\"pref_gpu_next\", false).set(gpuNext.get())\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/ExternalRepoMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.getAndSet\n\nclass ExternalRepoMigration : Migration {\n    override val version = 114f\n\n    // Clean up external repos\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val sourcePreferences = migrationContext.get<SourcePreferences>() ?: return false\n\n        sourcePreferences.mangaExtensionRepos().getAndSet {\n            it.map { repo -> \"https://raw.githubusercontent.com/$repo/repo\" }.toSet()\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/ForceMALLogOutMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass ForceMALLogOutMigration : Migration {\n    override val version = 54f\n\n    // Force MAL log out due to login flow change\n    // v52: switched from scraping to WebView\n    // v53: switched from WebView to OAuth\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val trackerManager = migrationContext.get<TrackerManager>() ?: return false\n\n        if (trackerManager.myAnimeList.isLoggedIn) {\n            trackerManager.myAnimeList.logout()\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/InternalChapterCacheDirMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport java.io.File\n\nclass InternalChapterCacheDirMigration : Migration {\n    override val version = 15f\n\n    // Delete internal chapter cache dir.\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        File(context.cacheDir, \"chapter_disk_cache\").deleteRecursively()\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/LogOutMALMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass LogOutMALMigration : Migration {\n    override val version = 121f\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val trackerManager = migrationContext.get<TrackerManager>() ?: return false\n\n        if (trackerManager.myAnimeList.isLoggedIn) {\n            trackerManager.myAnimeList.logout()\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MergeSortTypeDirectionMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass MergeSortTypeDirectionMigration : Migration {\n    override val version = 82f\n\n    // Merge Sort Type and Direction into one class\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        prefs.edit {\n            val mangasort = prefs.getString(\n                libraryPreferences.mangaSortingMode().key(),\n                null,\n            ) ?: return@edit\n            val animesort = prefs.getString(\n                libraryPreferences.animeSortingMode().key(),\n                null,\n            ) ?: return@edit\n            val direction = prefs.getString(\"library_sorting_ascending\", \"ASCENDING\")!!\n            putString(libraryPreferences.mangaSortingMode().key(), \"$mangasort,$direction\")\n            putString(libraryPreferences.animeSortingMode().key(), \"$animesort,$direction\")\n            remove(\"library_sorting_ascending\")\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MigrateRotationViewerValuesMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass MigrateRotationViewerValuesMigration : Migration {\n    override val version = 60f\n\n    // Migrate Rotation and Viewer values to default values for viewer_flags\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val newOrientation = when (prefs.getInt(\"pref_rotation_type_key\", 1)) {\n            1 -> ReaderOrientation.FREE.flagValue\n            2 -> ReaderOrientation.PORTRAIT.flagValue\n            3 -> ReaderOrientation.LANDSCAPE.flagValue\n            4 -> ReaderOrientation.LOCKED_PORTRAIT.flagValue\n            5 -> ReaderOrientation.LOCKED_LANDSCAPE.flagValue\n            else -> ReaderOrientation.FREE.flagValue\n        }\n\n        // Reading mode flag and prefValue is the same value\n        val newReadingMode = prefs.getInt(\"pref_default_viewer_key\", 1)\n\n        prefs.edit {\n            putInt(\"pref_default_orientation_type_key\", newOrientation)\n            remove(\"pref_rotation_type_key\")\n            putInt(\"pref_default_reading_mode_key\", newReadingMode)\n            remove(\"pref_default_viewer_key\")\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MigrateSecureScreenMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.preference.PreferenceManager\nimport eu.kanade.domain.base.BasePreferences\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass MigrateSecureScreenMigration : Migration {\n    override val version = 75f\n\n    // Allow disabling secure screen when incognito mode is on\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val securityPreferences = migrationContext.get<SecurityPreferences>() ?: return false\n        val basePreferences = migrationContext.get<BasePreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val oldSecureScreen = prefs.getBoolean(\"secure_screen\", false)\n        if (oldSecureScreen) {\n            securityPreferences.secureScreen().set(\n                SecurityPreferences.SecureScreenMode.ALWAYS,\n            )\n        }\n        if (DeviceUtil.isMiui &&\n            basePreferences.extensionInstaller().get() == BasePreferences.ExtensionInstaller.PACKAGEINSTALLER\n        ) {\n            basePreferences.extensionInstaller().set(\n                BasePreferences.ExtensionInstaller.LEGACY,\n            )\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MigrateSortingModeMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass MigrateSortingModeMigration : Migration {\n    override val version = 64f\n\n    // Switch to sort per category\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val oldMangaSortingMode = prefs.getInt(\n            libraryPreferences.mangaSortingMode().key(),\n            0,\n        )\n        val oldAnimeSortingMode = prefs.getInt(\n            libraryPreferences.animeSortingMode().key(),\n            0,\n        )\n        val oldSortingDirection = prefs.getBoolean(\"library_sorting_ascending\", true)\n\n        val newMangaSortingMode = when (oldMangaSortingMode) {\n            0 -> \"ALPHABETICAL\"\n            1 -> \"LAST_READ\"\n            2 -> \"LAST_CHECKED\"\n            3 -> \"UNREAD\"\n            4 -> \"TOTAL_CHAPTERS\"\n            6 -> \"LATEST_CHAPTER\"\n            8 -> \"DATE_FETCHED\"\n            7 -> \"DATE_ADDED\"\n            else -> \"ALPHABETICAL\"\n        }\n\n        val newAnimeSortingMode = when (oldAnimeSortingMode) {\n            0 -> \"ALPHABETICAL\"\n            1 -> \"LAST_SEEN\"\n            2 -> \"LAST_CHECKED\"\n            3 -> \"UNSEEN\"\n            4 -> \"TOTAL_EPISODES\"\n            6 -> \"LATEST_EPISODE\"\n            8 -> \"DATE_FETCHED\"\n            7 -> \"DATE_ADDED\"\n            else -> \"ALPHABETICAL\"\n        }\n\n        val newSortingDirection = when (oldSortingDirection) {\n            true -> \"ASCENDING\"\n            else -> \"DESCENDING\"\n        }\n\n        prefs.edit(commit = true) {\n            remove(libraryPreferences.mangaSortingMode().key())\n            remove(libraryPreferences.animeSortingMode().key())\n            remove(\"library_sorting_ascending\")\n        }\n\n        prefs.edit {\n            putString(libraryPreferences.mangaSortingMode().key(), newMangaSortingMode)\n            putString(libraryPreferences.animeSortingMode().key(), newAnimeSortingMode)\n            putString(\"library_sorting_ascending\", newSortingDirection)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MigrateToTriStateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport android.content.SharedPreferences\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass MigrateToTriStateMigration : Migration {\n    override val version = 52f\n\n    // Migrate library filters to tri-state versions\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        prefs.edit {\n            putInt(\n                libraryPreferences.filterDownloadedManga().key(),\n                convertBooleanPrefToTriState(prefs, \"pref_filter_downloaded_key\"),\n            )\n            remove(\"pref_filter_downloaded_key\")\n\n            putInt(\n                libraryPreferences.filterUnread().key(),\n                convertBooleanPrefToTriState(prefs, \"pref_filter_unread_key\"),\n            )\n            remove(\"pref_filter_unread_key\")\n\n            putInt(\n                libraryPreferences.filterCompletedManga().key(),\n                convertBooleanPrefToTriState(prefs, \"pref_filter_completed_key\"),\n            )\n            remove(\"pref_filter_completed_key\")\n        }\n\n        return true\n    }\n\n    private fun convertBooleanPrefToTriState(prefs: SharedPreferences, key: String): Int {\n        val oldPrefValue = prefs.getBoolean(key, false)\n        return if (oldPrefValue) {\n            1\n        } else {\n            0\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MigrateTriStateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.data.track.TrackerManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.getEnum\n\nclass MigrateTriStateMigration : Migration {\n    override val version = 99f\n\n    // Migrate TriState usages to TriStateFilter enum\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val trackerManager = migrationContext.get<TrackerManager>() ?: return false\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val prefKeys = listOf(\n            \"pref_filter_library_downloaded\",\n            \"pref_filter_library_unread\",\n            \"pref_filter_library_unseen\",\n            \"pref_filter_library_started\",\n            \"pref_filter_library_bookmarked\",\n            \"pref_filter_library_completed\",\n        ) + trackerManager.trackers.map { \"pref_filter_library_tracked_${it.id}\" }\n\n        prefKeys.forEach { key ->\n            val pref = preferenceStore.getInt(key, 0)\n            prefs.edit {\n                remove(key)\n\n                val newValue = when (pref.get()) {\n                    1 -> TriState.ENABLED_IS\n                    2 -> TriState.ENABLED_NOT\n                    else -> TriState.DISABLED\n                }\n\n                preferenceStore.getEnum(\"${key}_v2\", TriState.DISABLED).set(\n                    newValue,\n                )\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MigrationUtils.kt",
    "content": "package mihon.core.migration.migrations\n\nimport tachiyomi.core.common.preference.PreferenceStore\n\n@Suppress(\"UNCHECKED_CAST\")\nfun replacePreferences(\n    preferenceStore: PreferenceStore,\n    filterPredicate: (Map.Entry<String, Any?>) -> Boolean,\n    newKey: (String) -> String,\n) {\n    preferenceStore.getAll()\n        .filter(filterPredicate)\n        .forEach { (key, value) ->\n            when (value) {\n                is Int -> {\n                    preferenceStore.getInt(newKey(key)).set(value)\n                    preferenceStore.getInt(key).delete()\n                }\n                is Long -> {\n                    preferenceStore.getLong(newKey(key)).set(value)\n                    preferenceStore.getLong(key).delete()\n                }\n                is Float -> {\n                    preferenceStore.getFloat(newKey(key)).set(value)\n                    preferenceStore.getFloat(key).delete()\n                }\n                is String -> {\n                    preferenceStore.getString(newKey(key)).set(value)\n                    preferenceStore.getString(key).delete()\n                }\n                is Boolean -> {\n                    preferenceStore.getBoolean(newKey(key)).set(value)\n                    preferenceStore.getBoolean(key).delete()\n                }\n                is Set<*> -> (value as? Set<String>)?.let {\n                    preferenceStore.getStringSet(newKey(key)).set(value)\n                    preferenceStore.getStringSet(key).delete()\n                }\n            }\n        }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/Migrations.kt",
    "content": "package mihon.core.migration.migrations\n\nimport mihon.core.migration.Migration\n\nval migrations: List<Migration>\n    get() = listOf(\n        SetupBackupCreateMigration(),\n        SetupAnimeLibraryUpdateMigration(),\n        SetupMangaLibraryUpdateMigration(),\n        InternalChapterCacheDirMigration(),\n        CoverToExternalFileMigration(),\n        DeleteExternalChapterCacheDirMigration(),\n        ResetSortPreferenceRemovedMigration(),\n        MigrateToTriStateMigration(),\n        ForceMALLogOutMigration(),\n        DOHMigration(),\n        ResetRotationMigration(),\n        MigrateRotationViewerValuesMigration(),\n        RemoveOneTwoHourUpdateMigration(),\n        SetupBackgroundTasksMigration(),\n        MigrateSortingModeMigration(),\n        AddAllLangMigration(),\n        RemoveQuickUpdateMigration(),\n        CombineUpdateRestrictionMigration(),\n        MigrateSecureScreenMigration(),\n        RemoveReaderTapMigration(),\n        RenameEnumMigration(),\n        MergeSortTypeDirectionMigration(),\n        EnableAutoBackupMigration(),\n        MoveChapterPreferencesMigration(),\n        SplitPreferencesMigration(),\n        PlayerPreferenceMigration(),\n        MovePlayerPreferencesMigration(),\n        UseWorkManagerMigration(),\n        RemoveBackgroundJobsMigration(),\n        MigrateTriStateMigration(),\n        DontRunJobsMigration(),\n        RelativeTimestampMigration(),\n        NoAppStateMigration(),\n        ExternalRepoMigration(),\n        PrivatePreferenceMigration(),\n        PermaTrustExtensionsMigration(),\n        NavigationOptionsMigration(),\n        LogOutMALMigration(),\n        EnumsMigration(),\n        TrustExtensionRepositoryMigration(),\n        VideoPlayerPreferenceMigration(),\n        VideoOrientationMigration(),\n        CategoryPreferencesCleanupMigration(),\n        PrefLangMigration(),\n    )\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MoveChapterPreferencesMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass MoveChapterPreferencesMigration : Migration {\n    override val version = 85f\n\n    // Move chapter preferences from PreferencesHelper to LibraryPrefrences\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val preferences = listOf(\n            libraryPreferences.filterChapterByRead(),\n            libraryPreferences.filterChapterByDownloaded(),\n            libraryPreferences.filterChapterByBookmarked(),\n            libraryPreferences.sortChapterBySourceOrNumber(),\n            libraryPreferences.displayChapterByNameOrNumber(),\n            libraryPreferences.sortChapterByAscendingOrDescending(),\n            libraryPreferences.filterEpisodeBySeen(),\n            libraryPreferences.filterEpisodeByDownloaded(),\n            libraryPreferences.filterEpisodeByBookmarked(),\n            libraryPreferences.sortEpisodeBySourceOrNumber(),\n            libraryPreferences.displayEpisodeByNameOrNumber(),\n            libraryPreferences.sortEpisodeByAscendingOrDescending(),\n        )\n\n        prefs.edit {\n            preferences.forEach { preference ->\n                val key = preference.key()\n                val value = prefs.getInt(key, Int.MIN_VALUE)\n                if (value == Int.MIN_VALUE) return@forEach\n                remove(key)\n                putLong(key, value.toLong())\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/MovePlayerPreferencesMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport android.content.Context\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.player.settings.GesturePreferences\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass MovePlayerPreferencesMigration : Migration {\n    override val version = 93f\n\n    // more migrations for player prefs\n    @Suppress(\"SwallowedException\")\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val playerPreferences = migrationContext.get<PlayerPreferences>() ?: return false\n        val gesturePreferences = migrationContext.get<GesturePreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        listOf(\n            playerPreferences.defaultPlayerOrientationType(),\n            gesturePreferences.skipLengthPreference(),\n        ).forEach { pref ->\n            if (pref.isSet()) {\n                prefs.edit {\n                    val oldString = try {\n                        prefs.getString(pref.key(), null)\n                    } catch (e: ClassCastException) {\n                        null\n                    } ?: return@edit\n                    val newInt = oldString.toIntOrNull() ?: return@edit\n                    putInt(pref.key(), newInt)\n                }\n                val trackingQueuePref =\n                    context.getSharedPreferences(\"tracking_queue\", Context.MODE_PRIVATE)\n                trackingQueuePref.all.forEach {\n                    val (_, lastChapterRead) = it.value.toString().split(\":\")\n                    trackingQueuePref.edit {\n                        remove(it.key)\n                        putFloat(it.key, lastChapterRead.toFloat())\n                    }\n                }\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/NavigationOptionsMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.domain.ui.model.NavStyle\nimport eu.kanade.domain.ui.model.StartScreen\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass NavigationOptionsMigration : Migration {\n    override val version = 120f\n\n    // Bring back navigation options\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val bottomNavStyle = preferenceStore.getInt(\"bottom_nav_style\", 0)\n\n        val isDefaultTabManga = preferenceStore.getBoolean(\"default_home_tab_library\", false)\n        prefs.edit {\n            remove(\"bottom_nav_style\")\n            remove(\"default_home_tab_library\")\n\n            val startScreen = if (isDefaultTabManga.get()) StartScreen.MANGA else StartScreen.ANIME\n            val navStyle = when (bottomNavStyle.get()) {\n                0 -> NavStyle.MOVE_HISTORY_TO_MORE\n                1 -> NavStyle.MOVE_UPDATES_TO_MORE\n                else -> NavStyle.MOVE_MANGA_TO_MORE\n            }\n\n            preferenceStore.getEnum(\"start_screen\", StartScreen.ANIME).set(startScreen)\n            preferenceStore.getEnum(\"bottom_rail_nav_style\", NavStyle.MOVE_HISTORY_TO_MORE).set(navStyle)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/NoAppStateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass NoAppStateMigration : Migration {\n    override val version = 113f\n\n    // Don't include \"app state\" preferences in backups\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n\n        val prefsToReplace = listOf(\n            \"pref_download_only\",\n            \"incognito_mode\",\n            \"last_catalogue_source\",\n            \"trusted_signatures\",\n            \"last_app_closed\",\n            \"library_update_last_timestamp\",\n            \"library_unseen_updates_count\",\n            \"last_used_category\",\n            \"last_app_check\",\n            \"last_ext_check\",\n            \"last_version_code\",\n            \"storage_dir\",\n        )\n        replacePreferences(\n            preferenceStore = preferenceStore,\n            filterPredicate = { it.key in prefsToReplace },\n            newKey = { Preference.appStateKey(it) },\n        )\n\n        // Deleting old download cache index files, but might as well clear it all out\n        context.cacheDir.deleteRecursively()\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/PermaTrustExtensionsMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.Preference\n\nclass PermaTrustExtensionsMigration : Migration {\n    override val version = 117f\n\n    // Allow permanently trusting unofficial extensions by version code + signature\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        prefs.edit {\n            remove(Preference.appStateKey(\"trusted_signatures\"))\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/PlayerPreferenceMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass PlayerPreferenceMigration : Migration {\n    override val version = 92f\n\n    // add migration for player preference\n    @Suppress(\"SwallowedException\")\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val playerPreferences = migrationContext.get<PlayerPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        if (playerPreferences.progressPreference().isSet()) {\n            prefs.edit {\n                val progressString = try {\n                    prefs.getString(playerPreferences.progressPreference().key(), null)\n                } catch (e: ClassCastException) {\n                    null\n                } ?: return@edit\n                val newProgress = progressString.toFloatOrNull() ?: return@edit\n                putFloat(playerPreferences.progressPreference().key(), newProgress)\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/PrefLangMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.player.settings.AudioPreferences\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport java.util.Locale\nimport java.util.MissingResourceException\nimport kotlin.text.split\n\nclass PrefLangMigration : Migration {\n    override val version = 130f\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val audioPreferences = migrationContext.get<AudioPreferences>() ?: return false\n        val subtitlePreferences = migrationContext.get<SubtitlePreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        listOf(\n            audioPreferences.preferredAudioLanguages(),\n            subtitlePreferences.preferredSubLanguages(),\n        ).forEach { pref ->\n            if (pref.isSet()) {\n                prefs.edit {\n                    val langs = prefs.getString(\n                        pref.key(),\n                        \"\",\n                    )!!.split(\",\").filter(String::isNotEmpty).map(String::trim)\n                    val newLangs = langs.filter { it.isValidCode() }.joinToString(\",\")\n                    putString(pref.key(), newLangs)\n                }\n            }\n        }\n\n        return true\n    }\n\n    private fun String.isValidCode(): Boolean {\n        try {\n            val locale = Locale(this)\n            if (locale.isO3Language == locale.language && locale.language == locale.getDisplayName(Locale.ENGLISH)) {\n                return false\n            }\n        } catch (_: MissingResourceException) {\n            return false\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/PrivatePreferenceMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass PrivatePreferenceMigration : Migration {\n    override val version = 116f\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n\n        replacePreferences(\n            preferenceStore = preferenceStore,\n            filterPredicate = { it.key.startsWith(\"pref_mangasync_\") || it.key.startsWith(\"track_token_\") },\n            newKey = { Preference.privateKey(it) },\n        )\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/RelativeTimestampMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport eu.kanade.domain.ui.UiPreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass RelativeTimestampMigration : Migration {\n    override val version = 106f\n\n    // Bring back simplified relative timestamp setting\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n        val uiPreferences = migrationContext.get<UiPreferences>() ?: return false\n\n        val pref = preferenceStore.getInt(\"relative_time\", 7)\n        if (pref.get() == 0) {\n            uiPreferences.relativeTime().set(false)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/RemoveBackgroundJobsMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.util.system.workManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass RemoveBackgroundJobsMigration : Migration {\n    override val version = 97f\n\n    // Removed background jobs\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        context.workManager.cancelAllWorkByTag(\"UpdateChecker\")\n        context.workManager.cancelAllWorkByTag(\"ExtensionUpdate\")\n        prefs.edit {\n            remove(\"automatic_ext_updates\")\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/RemoveOneTwoHourUpdateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass RemoveOneTwoHourUpdateMigration : Migration {\n    override val version = 61f\n\n    // Handle removed every 1 or 2 hour library updates\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n\n        val updateInterval = libraryPreferences.autoUpdateInterval().get()\n        if (updateInterval == 1 || updateInterval == 2) {\n            libraryPreferences.autoUpdateInterval().set(3)\n            MangaLibraryUpdateJob.setupTask(context, 3)\n            AnimeLibraryUpdateJob.setupTask(context, 3)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/RemoveQuickUpdateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass RemoveQuickUpdateMigration : Migration {\n    override val version = 71f\n\n    // Handle removed every 3, 4, 6, and 8 hour library updates\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n\n        val updateInterval = libraryPreferences.autoUpdateInterval().get()\n        if (updateInterval in listOf(3, 4, 6, 8)) {\n            libraryPreferences.autoUpdateInterval().set(12)\n            MangaLibraryUpdateJob.setupTask(context, 12)\n            AnimeLibraryUpdateJob.setupTask(context, 12)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/RemoveReaderTapMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass RemoveReaderTapMigration : Migration {\n    override val version = 77f\n\n    // Remove reader tapping option in favor of disabled nav layouts\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val readerPreferences = migrationContext.get<ReaderPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val oldReaderTap = prefs.getBoolean(\"reader_tap\", false)\n        if (!oldReaderTap) {\n            readerPreferences.navigationModePager().set(5)\n            readerPreferences.navigationModeWebtoon().set(5)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/RenameEnumMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass RenameEnumMigration : Migration {\n    override val version = 81f\n\n    // Handle renamed enum values\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        prefs.edit {\n            val newMangaSortingMode = when (\n                val oldSortingMode = prefs.getString(\n                    libraryPreferences.mangaSortingMode().key(),\n                    \"ALPHABETICAL\",\n                )\n            ) {\n                \"LAST_CHECKED\" -> \"LAST_MANGA_UPDATE\"\n                \"UNREAD\" -> \"UNREAD_COUNT\"\n                \"DATE_FETCHED\" -> \"CHAPTER_FETCH_DATE\"\n                else -> oldSortingMode\n            }\n            val newAnimeSortingMode = when (\n                val oldSortingMode = prefs.getString(\n                    libraryPreferences.animeSortingMode().key(),\n                    \"ALPHABETICAL\",\n                )\n            ) {\n                \"LAST_CHECKED\" -> \"LAST_MANGA_UPDATE\"\n                \"UNREAD\" -> \"UNREAD_COUNT\"\n                \"DATE_FETCHED\" -> \"CHAPTER_FETCH_DATE\"\n                else -> oldSortingMode\n            }\n            putString(libraryPreferences.mangaSortingMode().key(), newMangaSortingMode)\n            putString(libraryPreferences.animeSortingMode().key(), newAnimeSortingMode)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/ResetRotationMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass ResetRotationMigration : Migration {\n    override val version = 59f\n\n    // Reset rotation to Free after replacing Lock\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        if (prefs.contains(\"pref_rotation_type_key\")) {\n            prefs.edit {\n                putInt(\"pref_rotation_type_key\", 1)\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/ResetSortPreferenceRemovedMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass ResetSortPreferenceRemovedMigration : Migration {\n    override val version = 44f\n\n    // Reset sorting preference if using removed sort by source\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val libraryPreferences = migrationContext.get<LibraryPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val oldMangaSortingMode = prefs.getInt(\n            libraryPreferences.mangaSortingMode().key(),\n            0,\n        )\n\n        if (oldMangaSortingMode == 5) { // SOURCE = 5\n            prefs.edit {\n                putInt(libraryPreferences.mangaSortingMode().key(), 0) // ALPHABETICAL = 0\n            }\n        }\n\n        val oldAnimeSortingMode = prefs.getInt(\n            libraryPreferences.animeSortingMode().key(),\n            0,\n        )\n\n        if (oldAnimeSortingMode == 5) { // SOURCE = 5\n            prefs.edit {\n                putInt(libraryPreferences.animeSortingMode().key(), 0) // ALPHABETICAL = 0\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/SetupAnimeLibraryUpdateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass SetupAnimeLibraryUpdateMigration : Migration {\n    override val version: Float = Migration.ALWAYS\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        AnimeLibraryUpdateJob.setupTask(context)\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/SetupBackgroundTasksMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass SetupBackgroundTasksMigration : Migration {\n    override val version = 64f\n\n    // Set up background tasks\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        MangaLibraryUpdateJob.setupTask(context)\n        AnimeLibraryUpdateJob.setupTask(context)\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/SetupBackupCreateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.backup.create.BackupCreateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass SetupBackupCreateMigration : Migration {\n    override val version: Float = Migration.ALWAYS\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        BackupCreateJob.setupTask(context)\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/SetupMangaLibraryUpdateMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass SetupMangaLibraryUpdateMigration : Migration {\n    override val version: Float = Migration.ALWAYS\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        MangaLibraryUpdateJob.setupTask(context)\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/SplitPreferencesMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.domain.ui.UiPreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass SplitPreferencesMigration : Migration {\n    override val version = 86f\n\n    // Split the rest of the preferences in PreferencesHelper\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val uiPreferences = migrationContext.get<UiPreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        if (uiPreferences.themeMode().isSet()) {\n            prefs.edit {\n                val themeMode = prefs.getString(uiPreferences.themeMode().key(), null) ?: return@edit\n                putString(uiPreferences.themeMode().key(), themeMode.uppercase())\n            }\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/TrustExtensionRepositoryMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport eu.kanade.domain.source.service.SourcePreferences\nimport logcat.LogPriority\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.exception.SaveExtensionRepoException\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\n\nclass TrustExtensionRepositoryMigration : Migration {\n    override val version: Float = 7f\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext {\n        val sourcePreferences = migrationContext.get<SourcePreferences>() ?: return@withIOContext false\n\n        val animeExtensionRepositoryRepository =\n            migrationContext.get<AnimeExtensionRepoRepository>() ?: return@withIOContext false\n        for ((index, source) in sourcePreferences.animeExtensionRepos().get().withIndex()) {\n            try {\n                animeExtensionRepositoryRepository.upsertRepo(\n                    source,\n                    \"Repo #${index + 1}\",\n                    null,\n                    source,\n                    \"NOFINGERPRINT-${index + 1}\",\n                )\n            } catch (e: SaveExtensionRepoException) {\n                logcat(LogPriority.ERROR, e) { \"Error Migrating Extension Repo with baseUrl: $source\" }\n            }\n        }\n        sourcePreferences.animeExtensionRepos().delete()\n\n        val mangaExtensionRepositoryRepository =\n            migrationContext.get<MangaExtensionRepoRepository>() ?: return@withIOContext false\n        for ((index, source) in sourcePreferences.mangaExtensionRepos().get().withIndex()) {\n            try {\n                mangaExtensionRepositoryRepository.upsertRepo(\n                    source,\n                    \"Repo #${index + 1}\",\n                    null,\n                    source,\n                    \"NOFINGERPRINT-${index + 1}\",\n                )\n            } catch (e: SaveExtensionRepoException) {\n                logcat(LogPriority.ERROR, e) {\n                    \"Error Migrating Manga Extension Repo with baseUrl: $source\"\n                }\n            }\n        }\n        sourcePreferences.mangaExtensionRepos().delete()\n\n        return@withIOContext true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/UseWorkManagerMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob\nimport eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\n\nclass UseWorkManagerMigration : Migration {\n    override val version = 96f\n\n    // Fully utilize WorkManager for library updates\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n\n        MangaLibraryUpdateJob.cancelAllWorks(context)\n        AnimeLibraryUpdateJob.cancelAllWorks(context)\n        MangaLibraryUpdateJob.setupTask(context)\n        AnimeLibraryUpdateJob.setupTask(context)\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/VideoOrientationMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport android.content.pm.ActivityInfo\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.player.PlayerOrientation\nimport eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\n\nclass VideoOrientationMigration : Migration {\n    override val version = 127f\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val playerPreferences = migrationContext.get<PlayerPreferences>() ?: return false\n        val preferenceStore = migrationContext.get<PreferenceStore>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val oldPref = try {\n            prefs.getInt(\n                playerPreferences.defaultPlayerOrientationType().key(),\n                10,\n            )\n        } catch (_: ClassCastException) {\n            prefs.edit(commit = true) {\n                remove(playerPreferences.defaultPlayerOrientationType().key())\n            }\n            return true\n        }\n\n        val newPref = when (oldPref) {\n            ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR -> PlayerOrientation.Free\n            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT -> PlayerOrientation.Portrait\n            ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT -> PlayerOrientation.ReversePortrait\n            ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE -> PlayerOrientation.Landscape\n            ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE -> PlayerOrientation.ReverseLandscape\n            ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT -> PlayerOrientation.SensorPortrait\n            ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE -> PlayerOrientation.SensorLandscape\n            else -> PlayerOrientation.Free\n        }\n\n        prefs.edit(commit = true) {\n            remove(playerPreferences.defaultPlayerOrientationType().key())\n        }\n\n        prefs.edit {\n            preferenceStore.getEnum(\n                playerPreferences.defaultPlayerOrientationType().key(),\n                PlayerOrientation.SensorLandscape,\n            ).set(newPref)\n        }\n\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/core/migration/migrations/VideoPlayerPreferenceMigration.kt",
    "content": "package mihon.core.migration.migrations\n\nimport android.app.Application\nimport androidx.core.content.edit\nimport androidx.preference.PreferenceManager\nimport eu.kanade.tachiyomi.ui.player.settings.SubtitlePreferences\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.SerializationException\nimport kotlinx.serialization.json.Json\nimport mihon.core.migration.Migration\nimport mihon.core.migration.MigrationContext\nimport uy.kohesive.injekt.injectLazy\n\nclass VideoPlayerPreferenceMigration : Migration {\n    override val version = 126f\n\n    private val json: Json by injectLazy()\n\n    override suspend fun invoke(migrationContext: MigrationContext): Boolean {\n        val context = migrationContext.get<Application>() ?: return false\n        val subtitlePreferences = migrationContext.get<SubtitlePreferences>() ?: return false\n        val prefs = PreferenceManager.getDefaultSharedPreferences(context)\n\n        val subtitleConf = prefs.getString(\"pref_sub_select_conf\", \"\")!!\n        val subtitleData = try {\n            json.decodeFromString<SubConfig>(subtitleConf)\n        } catch (e: SerializationException) {\n            return false\n        }\n\n        prefs.edit {\n            putString(subtitlePreferences.preferredSubLanguages().key(), subtitleData.lang.joinToString(\",\"))\n            putString(subtitlePreferences.subtitleWhitelist().key(), subtitleData.whitelist.joinToString(\",\"))\n            putString(subtitlePreferences.subtitleBlacklist().key(), subtitleData.blacklist.joinToString(\",\"))\n        }\n\n        return true\n    }\n\n    @Serializable\n    data class SubConfig(\n        val lang: List<String> = emptyList(),\n        val blacklist: List<String> = emptyList(),\n        val whitelist: List<String> = emptyList(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/anime/UpcomingAnimeScreen.kt",
    "content": "package mihon.feature.upcoming.anime\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen\n\nclass UpcomingAnimeScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { UpcomingAnimeScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        UpcomingAnimeScreenContent(\n            state = state,\n            setSelectedYearMonth = screenModel::setSelectedYearMonth,\n            onClickUpcoming = { navigator.push(AnimeScreen(it.id)) },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/anime/UpcomingAnimeScreenContent.kt",
    "content": "package mihon.feature.upcoming.anime\n\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.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.text.font.FontWeight\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.relativeDateText\nimport eu.kanade.presentation.util.isTabletUi\nimport eu.kanade.tachiyomi.core.common.Constants\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableMap\nimport kotlinx.coroutines.launch\nimport mihon.feature.upcoming.anime.components.UpcomingItem\nimport mihon.feature.upcoming.components.calendar.Calendar\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.TwoPanelBox\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.LocalDate\nimport java.time.YearMonth\n\n@Composable\nfun UpcomingAnimeScreenContent(\n    state: UpcomingAnimeScreenModel.State,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickUpcoming: (anime: Anime) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val scope = rememberCoroutineScope()\n    val listState = rememberLazyListState()\n    val onClickDay: (LocalDate, Int) -> Unit = { date, offset ->\n        state.headerIndexes[date]?.let {\n            scope.launch {\n                listState.animateScrollToItem(it + offset)\n            }\n        }\n    }\n    Scaffold(\n        topBar = { UpcomingToolbar() },\n        modifier = modifier,\n    ) { paddingValues ->\n        if (isTabletUi()) {\n            UpcomingAnimeScreenLargeImpl(\n                listState = listState,\n                items = state.items,\n                events = state.events,\n                paddingValues = paddingValues,\n                selectedYearMonth = state.selectedYearMonth,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = { onClickDay(it, 0) },\n                onClickUpcoming = onClickUpcoming,\n            )\n        } else {\n            UpcomingAnimeScreenSmallImpl(\n                listState = listState,\n                items = state.items,\n                events = state.events,\n                paddingValues = paddingValues,\n                selectedYearMonth = state.selectedYearMonth,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = { onClickDay(it, 1) },\n                onClickUpcoming = onClickUpcoming,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun UpcomingToolbar() {\n    val navigator = LocalNavigator.currentOrThrow\n    val uriHandler = LocalUriHandler.current\n\n    AppBar(\n        title = stringResource(MR.strings.label_upcoming),\n        navigateUp = navigator::pop,\n        actions = {\n            IconButton(onClick = { uriHandler.openUri(Constants.URL_HELP_UPCOMING) }) {\n                Icon(\n                    imageVector = Icons.AutoMirrored.Outlined.HelpOutline,\n                    contentDescription = stringResource(MR.strings.upcoming_guide),\n                )\n            }\n        },\n    )\n}\n\n@Composable\nprivate fun DateHeading(\n    date: LocalDate,\n    animeCount: Int,\n) {\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n        modifier = Modifier.fillMaxWidth(),\n    ) {\n        Text(\n            text = relativeDateText(date),\n            modifier = Modifier\n                .padding(MaterialTheme.padding.small)\n                .padding(start = MaterialTheme.padding.small),\n            color = MaterialTheme.colorScheme.onSurfaceVariant,\n            fontWeight = FontWeight.SemiBold,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        Badge(\n            containerColor = MaterialTheme.colorScheme.primary,\n            contentColor = MaterialTheme.colorScheme.onPrimary,\n        ) {\n            Text(\"$animeCount\")\n        }\n    }\n}\n\n@Composable\nprivate fun UpcomingAnimeScreenSmallImpl(\n    listState: LazyListState,\n    items: ImmutableList<UpcomingAnimeUIModel>,\n    events: ImmutableMap<LocalDate, Int>,\n    paddingValues: PaddingValues,\n    selectedYearMonth: YearMonth,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickDay: (LocalDate) -> Unit,\n    onClickUpcoming: (anime: Anime) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = paddingValues,\n        state = listState,\n    ) {\n        item(key = \"upcoming-calendar\") {\n            Calendar(\n                selectedYearMonth = selectedYearMonth,\n                events = events,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = onClickDay,\n            )\n        }\n        items(\n            items = items,\n            key = { \"upcoming-${it.hashCode()}\" },\n            contentType = {\n                when (it) {\n                    is UpcomingAnimeUIModel.Header -> \"header\"\n                    is UpcomingAnimeUIModel.Item -> \"item\"\n                }\n            },\n        ) { item ->\n            when (item) {\n                is UpcomingAnimeUIModel.Item -> {\n                    UpcomingItem(\n                        upcoming = item.anime,\n                        onClick = { onClickUpcoming(item.anime) },\n                    )\n                }\n                is UpcomingAnimeUIModel.Header -> {\n                    DateHeading(\n                        date = item.date,\n                        animeCount = item.animeCount,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun UpcomingAnimeScreenLargeImpl(\n    listState: LazyListState,\n    items: ImmutableList<UpcomingAnimeUIModel>,\n    events: ImmutableMap<LocalDate, Int>,\n    paddingValues: PaddingValues,\n    selectedYearMonth: YearMonth,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickDay: (LocalDate) -> Unit,\n    onClickUpcoming: (anime: Anime) -> Unit,\n) {\n    TwoPanelBox(\n        modifier = Modifier.padding(paddingValues),\n        startContent = {\n            Calendar(\n                selectedYearMonth = selectedYearMonth,\n                events = events,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = onClickDay,\n            )\n        },\n        endContent = {\n            FastScrollLazyColumn(state = listState) {\n                items(\n                    items = items,\n                    key = { \"upcoming-${it.hashCode()}\" },\n                    contentType = {\n                        when (it) {\n                            is UpcomingAnimeUIModel.Header -> \"header\"\n                            is UpcomingAnimeUIModel.Item -> \"item\"\n                        }\n                    },\n                ) { item ->\n                    when (item) {\n                        is UpcomingAnimeUIModel.Item -> {\n                            UpcomingItem(\n                                upcoming = item.anime,\n                                onClick = { onClickUpcoming(item.anime) },\n                            )\n                        }\n                        is UpcomingAnimeUIModel.Header -> {\n                            DateHeading(\n                                date = item.date,\n                                animeCount = item.animeCount,\n                            )\n                        }\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/anime/UpcomingAnimeScreenModel.kt",
    "content": "package mihon.feature.upcoming.anime\n\nimport androidx.compose.ui.util.fastMap\nimport androidx.compose.ui.util.fastMapIndexedNotNull\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.insertSeparatorsReversed\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableMap\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toImmutableMap\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport mihon.domain.upcoming.anime.interactor.GetUpcomingAnime\nimport tachiyomi.domain.entries.anime.model.Anime\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.LocalDate\nimport java.time.YearMonth\n\nclass UpcomingAnimeScreenModel(\n    private val getUpcomingAnime: GetUpcomingAnime = Injekt.get(),\n) : StateScreenModel<UpcomingAnimeScreenModel.State>(State()) {\n\n    init {\n        screenModelScope.launch {\n            getUpcomingAnime.subscribe().collectLatest {\n                mutableState.update { state ->\n                    val upcomingItems = it.toUpcomingAnimeUIModels()\n                    state.copy(\n                        items = upcomingItems,\n                        events = upcomingItems.toEvents(),\n                        headerIndexes = upcomingItems.getHeaderIndexes(),\n                    )\n                }\n            }\n        }\n    }\n\n    private fun List<Anime>.toUpcomingAnimeUIModels(): ImmutableList<UpcomingAnimeUIModel> {\n        var animeCount = 0\n        return fastMap { UpcomingAnimeUIModel.Item(it) }\n            .insertSeparatorsReversed { before, after ->\n                if (after != null) animeCount++\n\n                val beforeDate = before?.anime?.expectedNextUpdate?.toLocalDate()\n                val afterDate = after?.anime?.expectedNextUpdate?.toLocalDate()\n\n                if (beforeDate != afterDate && afterDate != null) {\n                    UpcomingAnimeUIModel.Header(afterDate, animeCount).also { animeCount = 0 }\n                } else {\n                    null\n                }\n            }\n            .toImmutableList()\n    }\n\n    private fun List<UpcomingAnimeUIModel>.toEvents(): ImmutableMap<LocalDate, Int> {\n        return filterIsInstance<UpcomingAnimeUIModel.Header>()\n            .associate { it.date to it.animeCount }\n            .toImmutableMap()\n    }\n\n    private fun List<UpcomingAnimeUIModel>.getHeaderIndexes(): ImmutableMap<LocalDate, Int> {\n        return fastMapIndexedNotNull { index, upcomingUIModel ->\n            if (upcomingUIModel is UpcomingAnimeUIModel.Header) {\n                upcomingUIModel.date to index\n            } else {\n                null\n            }\n        }\n            .toMap()\n            .toImmutableMap()\n    }\n\n    fun setSelectedYearMonth(yearMonth: YearMonth) {\n        mutableState.update { it.copy(selectedYearMonth = yearMonth) }\n    }\n\n    data class State(\n        val selectedYearMonth: YearMonth = YearMonth.now(),\n        val items: ImmutableList<UpcomingAnimeUIModel> = persistentListOf(),\n        val events: ImmutableMap<LocalDate, Int> = persistentMapOf(),\n        val headerIndexes: ImmutableMap<LocalDate, Int> = persistentMapOf(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/anime/UpcomingAnimeUIModel.kt",
    "content": "package mihon.feature.upcoming.anime\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport java.time.LocalDate\n\nsealed interface UpcomingAnimeUIModel {\n    data class Header(val date: LocalDate, val animeCount: Int) : UpcomingAnimeUIModel\n    data class Item(val anime: Anime) : UpcomingAnimeUIModel\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/anime/components/UpcomingItem.kt",
    "content": "package mihon.feature.upcoming.anime.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.asAnimeCover\nimport tachiyomi.presentation.core.components.material.padding\n\nprivate val UpcomingItemHeight = 96.dp\n\n@Composable\nfun UpcomingItem(\n    upcoming: Anime,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .clickable(onClick = onClick)\n            .height(UpcomingItemHeight)\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        ItemCover.Book(\n            modifier = Modifier.fillMaxHeight(),\n            data = upcoming.asAnimeCover(),\n        )\n        Text(\n            modifier = Modifier.weight(1f),\n            text = upcoming.title,\n            fontWeight = FontWeight.SemiBold,\n            maxLines = 2,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/components/calendar/Calendar.kt",
    "content": "package mihon.feature.upcoming.components.calendar\n\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.foundation.layout.widthIn\nimport androidx.compose.material3.MaterialTheme\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.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport androidx.compose.ui.util.fastForEach\nimport io.woong.compose.grid.SimpleGridCells\nimport io.woong.compose.grid.VerticalGrid\nimport kotlinx.collections.immutable.ImmutableMap\nimport kotlinx.collections.immutable.toImmutableList\nimport mihon.core.designsystem.utils.isExpandedWidthWindow\nimport mihon.core.designsystem.utils.isMediumWidthWindow\nimport tachiyomi.presentation.core.components.material.padding\nimport java.time.DayOfWeek\nimport java.time.LocalDate\nimport java.time.YearMonth\nimport java.time.format.TextStyle\nimport java.time.temporal.WeekFields\nimport java.util.Locale\n\nprivate val FontSize = 16.sp\nprivate const val DAYS_OF_WEEK = 7\n\n@Composable\nfun Calendar(\n    selectedYearMonth: YearMonth,\n    events: ImmutableMap<LocalDate, Int>,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickDay: (day: LocalDate) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Column(\n        modifier = modifier.fillMaxWidth(),\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.spacedBy(4.dp),\n    ) {\n        CalenderHeader(\n            yearMonth = selectedYearMonth,\n            onPreviousClick = { setSelectedYearMonth(selectedYearMonth.minusMonths(1L)) },\n            onNextClick = { setSelectedYearMonth(selectedYearMonth.plusMonths(1L)) },\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(vertical = MaterialTheme.padding.small)\n                .padding(start = MaterialTheme.padding.medium),\n        )\n        CalendarGrid(\n            selectedYearMonth = selectedYearMonth,\n            events = events,\n            onClickDay = onClickDay,\n        )\n    }\n}\n\n@Composable\nprivate fun CalendarGrid(\n    selectedYearMonth: YearMonth,\n    events: ImmutableMap<LocalDate, Int>,\n    onClickDay: (day: LocalDate) -> Unit,\n) {\n    val localeFirstDayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek.value\n    val weekDays = remember {\n        (0 until DAYS_OF_WEEK)\n            .map { DayOfWeek.of((localeFirstDayOfWeek - 1 + it) % DAYS_OF_WEEK + 1) }\n            .toImmutableList()\n    }\n\n    val emptyFieldCount = weekDays.indexOf(selectedYearMonth.atDay(1).dayOfWeek)\n    val daysInMonth = selectedYearMonth.lengthOfMonth()\n\n    VerticalGrid(\n        columns = SimpleGridCells.Fixed(DAYS_OF_WEEK),\n        modifier = if (isMediumWidthWindow() && !isExpandedWidthWindow()) {\n            Modifier.widthIn(max = 360.dp)\n        } else {\n            Modifier\n        },\n    ) {\n        weekDays.fastForEach { item ->\n            Text(\n                text = item.getDisplayName(\n                    TextStyle.NARROW,\n                    Locale.getDefault(),\n                ),\n                textAlign = TextAlign.Center,\n                fontWeight = FontWeight.SemiBold,\n                fontSize = FontSize,\n            )\n        }\n        repeat(emptyFieldCount) { Box { } }\n        repeat(daysInMonth) { dayIndex ->\n            val localDate = selectedYearMonth.atDay(dayIndex + 1)\n            CalendarDay(\n                date = localDate,\n                onDayClick = { onClickDay(localDate) },\n                events = events[localDate] ?: 0,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/components/calendar/CalendarDay.kt",
    "content": "package mihon.feature.upcoming.components.calendar\n\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material3.MaterialTheme\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.draw.clip\nimport androidx.compose.ui.layout.layout\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport java.time.LocalDate\n\nprivate const val MAX_EVENTS = 3\n\n@Composable\nfun CalendarDay(\n    date: LocalDate,\n    events: Int,\n    onDayClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val today = remember { LocalDate.now() }\n\n    Box(\n        modifier = modifier\n            .then(\n                if (today == date) {\n                    Modifier.border(\n                        border = BorderStroke(\n                            width = 1.dp,\n                            color = MaterialTheme.colorScheme.onBackground,\n                        ),\n                        shape = CircleShape,\n                    )\n                } else {\n                    Modifier\n                },\n            )\n            .clip(shape = CircleShape)\n            .clickable(onClick = onDayClick)\n            .circleLayout(),\n        contentAlignment = Alignment.Center,\n    ) {\n        Text(\n            text = date.dayOfMonth.toString(),\n            textAlign = TextAlign.Center,\n            fontSize = 16.sp,\n            color = if (date.isBefore(today)) {\n                MaterialTheme.colorScheme.onBackground.copy(alpha = DISABLED_ALPHA)\n            } else {\n                MaterialTheme.colorScheme.onBackground\n            },\n            fontWeight = FontWeight.SemiBold,\n        )\n        Row(Modifier.offset(y = 12.dp)) {\n            val size = events.coerceAtMost(MAX_EVENTS)\n            for (index in 0 until size) {\n                CalendarIndicator(\n                    index = index,\n                    size = 56.dp,\n                    color = MaterialTheme.colorScheme.primary,\n                )\n            }\n        }\n    }\n}\n\nprivate fun Modifier.circleLayout() = layout { measurable, constraints ->\n    val placeable = measurable.measure(constraints)\n\n    val currentHeight = placeable.height\n    val currentWidth = placeable.width\n    val newDiameter = maxOf(currentHeight, currentWidth)\n\n    layout(newDiameter, newDiameter) {\n        placeable.placeRelative(\n            x = (newDiameter - currentWidth) / 2,\n            y = (newDiameter - currentHeight) / 2,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/components/calendar/CalendarHeader.kt",
    "content": "package mihon.feature.upcoming.components.calendar\n\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.AnimatedContentTransitionScope\nimport androidx.compose.animation.ContentTransform\nimport androidx.compose.animation.SizeTransform\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInVertically\nimport androidx.compose.animation.slideOutVertically\nimport androidx.compose.animation.togetherWith\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.KeyboardArrowLeft\nimport androidx.compose.material.icons.filled.KeyboardArrowRight\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.tooling.preview.Preview\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.YearMonth\nimport java.time.format.DateTimeFormatter\nimport java.util.Locale\n\n@Composable\nfun CalenderHeader(\n    yearMonth: YearMonth,\n    onPreviousClick: () -> Unit,\n    onNextClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier,\n        horizontalArrangement = Arrangement.SpaceBetween,\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        AnimatedContent(\n            targetState = yearMonth,\n            transitionSpec = { getAnimation() },\n            label = \"Change Month\",\n        ) { monthYear ->\n            Text(\n                text = getTitleText(monthYear),\n                style = MaterialTheme.typography.titleLarge,\n            )\n        }\n        Row {\n            IconButton(onClick = onPreviousClick) {\n                Icon(Icons.Default.KeyboardArrowLeft, stringResource(MR.strings.upcoming_calendar_prev))\n            }\n            IconButton(onClick = onNextClick) {\n                Icon(Icons.Default.KeyboardArrowRight, stringResource(MR.strings.upcoming_calendar_next))\n            }\n        }\n    }\n}\n\nprivate const val MONTH_YEAR_CHANGE_ANIMATION_DURATION = 200\n\nprivate fun AnimatedContentTransitionScope<YearMonth>.getAnimation(): ContentTransform {\n    val movingForward = targetState > initialState\n\n    val enterTransition = slideInVertically(\n        animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION),\n    ) { height -> if (movingForward) height else -height } + fadeIn(\n        animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION),\n    )\n    val exitTransition = slideOutVertically(\n        animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION),\n    ) { height -> if (movingForward) -height else height } + fadeOut(\n        animationSpec = tween(durationMillis = MONTH_YEAR_CHANGE_ANIMATION_DURATION),\n    )\n    return (enterTransition togetherWith exitTransition)\n        .using(SizeTransform(clip = false))\n}\n\n@Composable\n@ReadOnlyComposable\nprivate fun getTitleText(monthYear: YearMonth): String {\n    val formatter = DateTimeFormatter.ofPattern(\"MMMM yyyy\", Locale.getDefault())\n    return formatter.format(monthYear)\n}\n\n@Preview\n@Composable\nprivate fun CalenderHeaderPreview() {\n    CalenderHeader(\n        yearMonth = YearMonth.now(),\n        onNextClick = {},\n        onPreviousClick = {},\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/components/calendar/CalendarIndicator.kt",
    "content": "package mihon.feature.upcoming.components.calendar\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\nprivate const val INDICATOR_SCALE = 12\nprivate const val INDICATOR_ALPHA_MULTIPLIER = 0.3f\n\n@Composable\nfun CalendarIndicator(\n    index: Int,\n    size: Dp,\n    color: Color,\n    modifier: Modifier = Modifier,\n) {\n    Box(\n        modifier = modifier\n            .padding(horizontal = 1.dp)\n            .clip(shape = CircleShape)\n            .background(color = color.copy(alpha = (index + 1) * INDICATOR_ALPHA_MULTIPLIER))\n            .size(size = size.div(INDICATOR_SCALE)),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/manga/UpcomingMangaScreen.kt",
    "content": "package mihon.feature.upcoming.manga\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport cafe.adriel.voyager.core.model.rememberScreenModel\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.util.Screen\nimport eu.kanade.tachiyomi.ui.entries.manga.MangaScreen\n\nclass UpcomingMangaScreen : Screen() {\n\n    @Composable\n    override fun Content() {\n        val navigator = LocalNavigator.currentOrThrow\n\n        val screenModel = rememberScreenModel { UpcomingMangaScreenModel() }\n        val state by screenModel.state.collectAsState()\n\n        UpcomingMangaScreenContent(\n            state = state,\n            setSelectedYearMonth = screenModel::setSelectedYearMonth,\n            onClickUpcoming = { navigator.push(MangaScreen(it.id)) },\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/manga/UpcomingMangaScreenContent.kt",
    "content": "package mihon.feature.upcoming.manga\n\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.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.text.font.FontWeight\nimport cafe.adriel.voyager.navigator.LocalNavigator\nimport cafe.adriel.voyager.navigator.currentOrThrow\nimport eu.kanade.presentation.components.AppBar\nimport eu.kanade.presentation.components.relativeDateText\nimport eu.kanade.presentation.util.isTabletUi\nimport eu.kanade.tachiyomi.core.common.Constants\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableMap\nimport kotlinx.coroutines.launch\nimport mihon.feature.upcoming.components.calendar.Calendar\nimport mihon.feature.upcoming.manga.components.UpcomingItem\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.components.FastScrollLazyColumn\nimport tachiyomi.presentation.core.components.TwoPanelBox\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport java.time.LocalDate\nimport java.time.YearMonth\n\n@Composable\nfun UpcomingMangaScreenContent(\n    state: UpcomingMangaScreenModel.State,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickUpcoming: (manga: Manga) -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    val scope = rememberCoroutineScope()\n    val listState = rememberLazyListState()\n    val onClickDay: (LocalDate, Int) -> Unit = { date, offset ->\n        state.headerIndexes[date]?.let {\n            scope.launch {\n                listState.animateScrollToItem(it + offset)\n            }\n        }\n    }\n    Scaffold(\n        topBar = { UpcomingToolbar() },\n        modifier = modifier,\n    ) { paddingValues ->\n        if (isTabletUi()) {\n            UpcomingMangaScreenLargeImpl(\n                listState = listState,\n                items = state.items,\n                events = state.events,\n                paddingValues = paddingValues,\n                selectedYearMonth = state.selectedYearMonth,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = { onClickDay(it, 0) },\n                onClickUpcoming = onClickUpcoming,\n            )\n        } else {\n            UpcomingMangaScreenSmallImpl(\n                listState = listState,\n                items = state.items,\n                events = state.events,\n                paddingValues = paddingValues,\n                selectedYearMonth = state.selectedYearMonth,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = { onClickDay(it, 1) },\n                onClickUpcoming = onClickUpcoming,\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun UpcomingToolbar() {\n    val navigator = LocalNavigator.currentOrThrow\n    val uriHandler = LocalUriHandler.current\n\n    AppBar(\n        title = stringResource(MR.strings.label_upcoming),\n        navigateUp = navigator::pop,\n        actions = {\n            IconButton(onClick = { uriHandler.openUri(Constants.URL_HELP_UPCOMING) }) {\n                Icon(\n                    imageVector = Icons.AutoMirrored.Outlined.HelpOutline,\n                    contentDescription = stringResource(MR.strings.upcoming_guide),\n                )\n            }\n        },\n    )\n}\n\n@Composable\nprivate fun DateHeading(\n    date: LocalDate,\n    mangaCount: Int,\n) {\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n        modifier = Modifier.fillMaxWidth(),\n    ) {\n        Text(\n            text = relativeDateText(date),\n            modifier = Modifier\n                .padding(MaterialTheme.padding.small)\n                .padding(start = MaterialTheme.padding.small),\n            color = MaterialTheme.colorScheme.onSurfaceVariant,\n            fontWeight = FontWeight.SemiBold,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n        Badge(\n            containerColor = MaterialTheme.colorScheme.primary,\n            contentColor = MaterialTheme.colorScheme.onPrimary,\n        ) {\n            Text(\"$mangaCount\")\n        }\n    }\n}\n\n@Composable\nprivate fun UpcomingMangaScreenSmallImpl(\n    listState: LazyListState,\n    items: ImmutableList<UpcomingMangaUIModel>,\n    events: ImmutableMap<LocalDate, Int>,\n    paddingValues: PaddingValues,\n    selectedYearMonth: YearMonth,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickDay: (LocalDate) -> Unit,\n    onClickUpcoming: (manga: Manga) -> Unit,\n) {\n    FastScrollLazyColumn(\n        contentPadding = paddingValues,\n        state = listState,\n    ) {\n        item(key = \"upcoming-calendar\") {\n            Calendar(\n                selectedYearMonth = selectedYearMonth,\n                events = events,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = onClickDay,\n            )\n        }\n        items(\n            items = items,\n            key = { \"upcoming-${it.hashCode()}\" },\n            contentType = {\n                when (it) {\n                    is UpcomingMangaUIModel.Header -> \"header\"\n                    is UpcomingMangaUIModel.Item -> \"item\"\n                }\n            },\n        ) { item ->\n            when (item) {\n                is UpcomingMangaUIModel.Item -> {\n                    UpcomingItem(\n                        upcoming = item.manga,\n                        onClick = { onClickUpcoming(item.manga) },\n                    )\n                }\n                is UpcomingMangaUIModel.Header -> {\n                    DateHeading(\n                        date = item.date,\n                        mangaCount = item.mangaCount,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun UpcomingMangaScreenLargeImpl(\n    listState: LazyListState,\n    items: ImmutableList<UpcomingMangaUIModel>,\n    events: ImmutableMap<LocalDate, Int>,\n    paddingValues: PaddingValues,\n    selectedYearMonth: YearMonth,\n    setSelectedYearMonth: (YearMonth) -> Unit,\n    onClickDay: (LocalDate) -> Unit,\n    onClickUpcoming: (manga: Manga) -> Unit,\n) {\n    TwoPanelBox(\n        modifier = Modifier.padding(paddingValues),\n        startContent = {\n            Calendar(\n                selectedYearMonth = selectedYearMonth,\n                events = events,\n                setSelectedYearMonth = setSelectedYearMonth,\n                onClickDay = onClickDay,\n            )\n        },\n        endContent = {\n            FastScrollLazyColumn(state = listState) {\n                items(\n                    items = items,\n                    key = { \"upcoming-${it.hashCode()}\" },\n                    contentType = {\n                        when (it) {\n                            is UpcomingMangaUIModel.Header -> \"header\"\n                            is UpcomingMangaUIModel.Item -> \"item\"\n                        }\n                    },\n                ) { item ->\n                    when (item) {\n                        is UpcomingMangaUIModel.Item -> {\n                            UpcomingItem(\n                                upcoming = item.manga,\n                                onClick = { onClickUpcoming(item.manga) },\n                            )\n                        }\n                        is UpcomingMangaUIModel.Header -> {\n                            DateHeading(\n                                date = item.date,\n                                mangaCount = item.mangaCount,\n                            )\n                        }\n                    }\n                }\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/manga/UpcomingMangaScreenModel.kt",
    "content": "package mihon.feature.upcoming.manga\n\nimport androidx.compose.ui.util.fastMap\nimport androidx.compose.ui.util.fastMapIndexedNotNull\nimport cafe.adriel.voyager.core.model.StateScreenModel\nimport cafe.adriel.voyager.core.model.screenModelScope\nimport eu.kanade.core.util.insertSeparatorsReversed\nimport eu.kanade.tachiyomi.util.lang.toLocalDate\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableMap\nimport kotlinx.collections.immutable.persistentListOf\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toImmutableMap\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.update\nimport kotlinx.coroutines.launch\nimport mihon.domain.upcoming.manga.interactor.GetUpcomingManga\nimport tachiyomi.domain.entries.manga.model.Manga\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.LocalDate\nimport java.time.YearMonth\n\nclass UpcomingMangaScreenModel(\n    private val getUpcomingManga: GetUpcomingManga = Injekt.get(),\n) : StateScreenModel<UpcomingMangaScreenModel.State>(State()) {\n\n    init {\n        screenModelScope.launch {\n            getUpcomingManga.subscribe().collectLatest {\n                mutableState.update { state ->\n                    val upcomingItems = it.toUpcomingMangaUIModels()\n                    state.copy(\n                        items = upcomingItems,\n                        events = upcomingItems.toEvents(),\n                        headerIndexes = upcomingItems.getHeaderIndexes(),\n                    )\n                }\n            }\n        }\n    }\n\n    private fun List<Manga>.toUpcomingMangaUIModels(): ImmutableList<UpcomingMangaUIModel> {\n        var mangaCount = 0\n        return fastMap { UpcomingMangaUIModel.Item(it) }\n            .insertSeparatorsReversed { before, after ->\n                if (after != null) mangaCount++\n\n                val beforeDate = before?.manga?.expectedNextUpdate?.toLocalDate()\n                val afterDate = after?.manga?.expectedNextUpdate?.toLocalDate()\n\n                if (beforeDate != afterDate && afterDate != null) {\n                    UpcomingMangaUIModel.Header(afterDate, mangaCount).also { mangaCount = 0 }\n                } else {\n                    null\n                }\n            }\n            .toImmutableList()\n    }\n\n    private fun List<UpcomingMangaUIModel>.toEvents(): ImmutableMap<LocalDate, Int> {\n        return filterIsInstance<UpcomingMangaUIModel.Header>()\n            .associate { it.date to it.mangaCount }\n            .toImmutableMap()\n    }\n\n    private fun List<UpcomingMangaUIModel>.getHeaderIndexes(): ImmutableMap<LocalDate, Int> {\n        return fastMapIndexedNotNull { index, upcomingUIModel ->\n            if (upcomingUIModel is UpcomingMangaUIModel.Header) {\n                upcomingUIModel.date to index\n            } else {\n                null\n            }\n        }\n            .toMap()\n            .toImmutableMap()\n    }\n\n    fun setSelectedYearMonth(yearMonth: YearMonth) {\n        mutableState.update { it.copy(selectedYearMonth = yearMonth) }\n    }\n\n    data class State(\n        val selectedYearMonth: YearMonth = YearMonth.now(),\n        val items: ImmutableList<UpcomingMangaUIModel> = persistentListOf(),\n        val events: ImmutableMap<LocalDate, Int> = persistentMapOf(),\n        val headerIndexes: ImmutableMap<LocalDate, Int> = persistentMapOf(),\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/manga/UpcomingMangaUIModel.kt",
    "content": "package mihon.feature.upcoming.manga\n\nimport tachiyomi.domain.entries.manga.model.Manga\nimport java.time.LocalDate\n\nsealed interface UpcomingMangaUIModel {\n    data class Header(val date: LocalDate, val mangaCount: Int) : UpcomingMangaUIModel\n    data class Item(val manga: Manga) : UpcomingMangaUIModel\n}\n"
  },
  {
    "path": "app/src/main/java/mihon/feature/upcoming/manga/components/UpcomingItem.kt",
    "content": "package mihon.feature.upcoming.manga.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport eu.kanade.presentation.entries.components.ItemCover\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.asMangaCover\nimport tachiyomi.presentation.core.components.material.padding\n\nprivate val UpcomingItemHeight = 96.dp\n\n@Composable\nfun UpcomingItem(\n    upcoming: Manga,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    Row(\n        modifier = modifier\n            .clickable(onClick = onClick)\n            .height(UpcomingItemHeight)\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        ItemCover.Book(\n            modifier = Modifier.fillMaxHeight(),\n            data = upcoming.asMangaCover(),\n        )\n        Text(\n            modifier = Modifier.weight(1f),\n            text = upcoming.title,\n            fontWeight = FontWeight.SemiBold,\n            maxLines = 2,\n            overflow = TextOverflow.Ellipsis,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/anim/player_enter_bottom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\"\n    android:interpolator=\"@android:interpolator/fast_out_slow_in\">\n\n   <translate\n       android:fromYDelta=\"100%p\"\n       android:toYDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_enter_left.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\"\n    android:interpolator=\"@android:interpolator/fast_out_slow_in\">\n\n   <translate\n       android:fromXDelta=\"-100%p\"\n       android:toXDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_enter_right.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\"\n    android:interpolator=\"@android:interpolator/fast_out_slow_in\">\n\n   <translate\n       android:fromXDelta=\"100%p\"\n       android:toXDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_enter_top.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\"\n    android:interpolator=\"@android:interpolator/fast_out_slow_in\">\n\n   <translate\n       android:fromYDelta=\"-100%p\"\n       android:toYDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_exit_bottom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\">\n\n   <translate\n       android:toYDelta=\"100%p\"\n       android:fromYDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_exit_left.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\">\n\n   <translate\n       android:toXDelta=\"-100%p\"\n       android:fromXDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_exit_right.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\">\n\n   <translate\n       android:toXDelta=\"100%p\"\n       android:fromXDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_exit_top.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\">\n\n   <translate\n       android:toYDelta=\"-100%p\"\n       android:fromYDelta=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/player_fade_in.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<alpha xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\"\n    android:fromAlpha=\"0.0\"\n    android:toAlpha=\"1.0\"\n    android:interpolator=\"@android:interpolator/linear\"/>\n"
  },
  {
    "path": "app/src/main/res/anim/player_fade_out.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<alpha xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"@integer/player_animation_duration\"\n    android:fromAlpha=\"1.0\"\n    android:toAlpha=\"0.0\"\n    android:interpolator=\"@android:interpolator/linear\"/>\n"
  },
  {
    "path": "app/src/main/res/anim/shared_axis_x_pop_enter.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"-5%p\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"0\" />\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"0\"\n        android:interpolator=\"@android:interpolator/linear_out_slow_in\"\n        android:toAlpha=\"1\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/shared_axis_x_pop_exit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"0\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"5%p\" />\n\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"1\"\n        android:interpolator=\"@android:interpolator/fast_out_linear_in\"\n        android:toAlpha=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/shared_axis_x_push_enter.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"5%p\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"0\" />\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"0\"\n        android:interpolator=\"@android:interpolator/linear_out_slow_in\"\n        android:toAlpha=\"1\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim/shared_axis_x_push_exit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"0\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"-5%p\" />\n\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"1\"\n        android:interpolator=\"@android:interpolator/fast_out_linear_in\"\n        android:toAlpha=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim-v33/shared_axis_x_pop_enter.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"-30dp\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"0\" />\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"0\"\n        android:interpolator=\"@android:interpolator/linear_out_slow_in\"\n        android:toAlpha=\"1\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim-v33/shared_axis_x_pop_exit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"0\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"30dp\" />\n\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"1\"\n        android:interpolator=\"@android:interpolator/fast_out_linear_in\"\n        android:toAlpha=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim-v33/shared_axis_x_push_enter.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"30dp\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"0\" />\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"0\"\n        android:interpolator=\"@android:interpolator/linear_out_slow_in\"\n        android:toAlpha=\"1\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/anim-v33/shared_axis_x_push_exit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromXDelta=\"0\"\n        android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n        android:toXDelta=\"-30dp\" />\n\n    <alpha\n        android:duration=\"195\"\n        android:fromAlpha=\"1\"\n        android:interpolator=\"@android:interpolator/fast_out_linear_in\"\n        android:toAlpha=\"0\" />\n</set>\n"
  },
  {
    "path": "app/src/main/res/color/draggable_card_foreground.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <item android:alpha=\"0.08\" android:color=\"?attr/colorPrimary\" app:state_dragged=\"true\" />\n    <item android:alpha=\"0.08\" android:color=\"?attr/colorPrimary\" android:state_activated=\"true\" />\n    <item android:color=\"@android:color/transparent\" />\n</selector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_animelibrary_enter.xml",
    "content": "<animated-vector\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"vector\"\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <path\n                android:name=\"rectangle\"\n                android:pathData=\"M 20 2 L 8 2 C 6.8 2 6 2.8 6 4 L 6 16 C 6 17.2 6.8 18 8 18 L 20 18 C 21.2 18 22 17.2 22 16 L 22 4 C 22 2.8 21.2 2 20 2 Z M 20 16 L 8 16 L 8 4 L 20 4 L 20 16 Z\"\n                android:fillColor=\"#000\"\n                android:strokeWidth=\"1\"/>\n            <path\n                android:name=\"lines\"\n                android:pathData=\"M 4 6 L 2 6 L 2 20 C 2 21.1 2.9 22 4 22 L 18 22 L 18 20 L 4 20 L 4 6 Z\"\n                android:fillColor=\"#000\"\n                android:strokeWidth=\"1\"/>\n            <path\n                android:name=\"playbutt\"\n                android:pathData=\"M 11.6 14.6 L 17.6 10.1 L 11.6 5.6 Z\"\n                android:fillColor=\"#000\"\n                android:strokeWidth=\"1\"/>\n        </vector>\n    </aapt:attr>\n    <target android:name=\"playbutt\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:propertyName=\"pathData\"\n                android:duration=\"300\"\n                android:valueFrom=\"M 8 18 L 20 18 C 21.2 18 22 17.2 22 16 L 22 4 C 22 2.8 21.2 2 20 2 L 20 2 L 8 2 C 6.8 2 6 2.8 6 4 L 6 16 C 6 17.2 6.8 18 8 18 M 11.6 14.6 L 11.6 14.6 L 11.6 5.6 L 17.6 10.1 L 11.6 14.6\"\n                android:valueTo=\"M 11.6 14.6 L 17.599 10.101 C 17.599 10.101 17.6 10.1 17.6 10.1 L 14.79 7.993 C 14.761 7.971 14.732 7.949 14.702 7.927 L 14.691 7.919 L 11.6 5.6 C 11.6 5.98 11.6 6.36 11.6 6.739 L 11.6 14.544 C 11.6 14.563 11.6 14.581 11.6 14.6 M 13.6 10.1 L 13.6 10.1 L 13.6 10.1 L 13.6 10.1 L 13.6 10.1\"\n                android:valueType=\"pathType\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"/>\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_animelibrary_leave.xml",
    "content": "<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <path\n                android:name=\"rectangle\"\n                android:pathData=\"M 20 2 L 8 2 C 6.8 2 6 2.8 6 4 L 6 16 C 6 17.2 6.8 18 8 18 L 20 18 C 21.2 18 22 17.2 22 16 L 22 4 C 22 2.8 21.2 2 20 2 Z M 20 16 L 8 16 L 8 4 L 20 4 L 20 16 Z\"\n                android:fillColor=\"#000\"\n                android:strokeWidth=\"1\"/>\n            <path\n                android:name=\"lines\"\n                android:pathData=\"M 4 6 L 2 6 L 2 20 C 2 21.1 2.9 22 4 22 L 18 22 L 18 20 L 4 20 L 4 6 Z\"\n                android:fillColor=\"#000\"\n                android:strokeWidth=\"1\"/>\n            <path\n                android:name=\"playbutt\"\n                android:pathData=\"M 11.6 14.6 L 17.6 10.1 L 11.6 5.6 Z\"\n                android:fillColor=\"#000\"\n                android:strokeWidth=\"1\"/>\n        </vector>\n    </aapt:attr>\n    <target android:name=\"playbutt\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:propertyName=\"pathData\"\n                android:duration=\"300\"\n                android:valueFrom=\"M 11.6 14.6 L 17.599 10.101 C 17.599 10.101 17.6 10.1 17.6 10.1 L 14.79 7.993 C 14.761 7.971 14.732 7.949 14.702 7.927 L 14.691 7.919 L 11.6 5.6 C 11.6 5.98 11.6 6.36 11.6 6.739 L 11.6 14.544 C 11.6 14.563 11.6 14.581 11.6 14.6 M 13.6 10.1 L 13.6 10.1 L 13.6 10.1 L 13.6 10.1 L 13.6 10.1\"\n                android:valueTo=\"M 8 18 L 20 18 C 21.2 18 22 17.2 22 16 L 22 4 C 22 2.8 21.2 2 20 2 L 20 2 L 8 2 C 6.8 2 6 2.8 6 4 L 6 16 C 6 17.2 6.8 18 8 18 M 11.6 14.6 L 11.6 14.6 L 11.6 5.6 L 17.6 10.1 L 11.6 14.6\"\n                android:valueType=\"pathType\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"/>\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_browse_enter.xml",
    "content": "<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"browse_enter\"\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <group\n                android:name=\"main_parent\"\n                android:pivotX=\"12\"\n                android:pivotY=\"12\">\n                <group\n                    android:name=\"group\"\n                    android:pivotX=\"12\"\n                    android:pivotY=\"12\">\n                    <path\n                        android:name=\"dot\"\n                        android:fillColor=\"#000000\"\n                        android:pathData=\"M 12 10.9 C 12.61 10.9 13.1 11.39 13.1 12 C 13.1 12.61 12.61 13.1 12 13.1 C 11.39 13.1 10.9 12.61 10.9 12 C 10.9 11.39 11.39 10.9 12 10.9 Z\" />\n                </group>\n                <clip-path\n                    android:name=\"dot_mask\"\n                    android:pathData=\"M 0.188 0.188 L 0.188 24 L 23.938 24 L 23.938 0.188 L 0.188 0.188 Z M 12 10.9 C 12.61 10.9 13.1 11.39 13.1 12 C 13.1 12.61 12.61 13.1 12 13.1 C 11.39 13.1 10.9 12.61 10.9 12 C 10.9 11.39 11.39 10.9 12 10.9 Z\" />\n                <path\n                    android:name=\"compass\"\n                    android:fillColor=\"#000000\"\n                    android:pathData=\"M 6.5 17.5 L 14.01 14.01 L 17.5 6.5 L 9.99 9.99 L 6.5 17.5 Z M 12 10.9 C 12.61 10.9 13.1 11.39 13.1 12 C 13.1 12.61 12.61 13.1 12 13.1 C 11.39 13.1 10.9 12.61 10.9 12 C 10.9 11.39 11.39 10.9 12 10.9 Z\" />\n                <group\n                    android:name=\"ring_parent\"\n                    android:pivotX=\"12\"\n                    android:pivotY=\"12\"\n                    android:scaleX=\"0.833\"\n                    android:scaleY=\"0.833\">\n                    <path\n                        android:name=\"ring\"\n                        android:fillColor=\"#000000\"\n                        android:pathData=\"M 12 0 C 8.819 0 5.765 1.265 3.515 3.515 C 1.265 5.765 0 8.819 0 12 C 0 15.181 1.265 18.235 3.515 20.485 C 5.765 22.735 8.819 24 12 24 C 15.181 24 18.235 22.735 20.485 20.485 C 22.735 18.235 24 15.181 24 12 C 24 8.819 22.735 5.765 20.485 3.515 C 18.235 1.265 15.181 0 12 0 Z M 12 21.6 C 9.455 21.6 7.012 20.588 5.212 18.788 C 3.412 16.988 2.4 14.545 2.4 12 C 2.4 9.455 3.412 7.012 5.212 5.212 C 7.012 3.412 9.455 2.4 12 2.4 C 14.545 2.4 16.988 3.412 18.788 5.212 C 20.588 7.012 21.6 9.455 21.6 12 C 21.6 14.545 20.588 16.988 18.788 18.788 C 16.988 20.588 14.545 21.6 12 21.6 Z\"\n                        android:strokeAlpha=\"0\" />\n                </group>\n                <group android:name=\"group_1\" />\n            </group>\n        </vector>\n    </aapt:attr>\n    <target android:name=\"compass\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"pathData\"\n                android:valueFrom=\"M 9.99 9.99 C 9.408 11.242 8.827 12.493 8.245 13.745 C 7.663 14.997 7.082 16.248 6.5 17.5 C 6.5 17.5 6.5 17.5 6.5 17.5 C 9.003 16.337 11.507 15.173 14.01 14.01 C 15.173 11.507 16.337 9.003 17.5 6.5 C 14.997 7.663 12.493 8.827 9.99 9.99 M 12 10.9 C 11.39 10.9 10.9 11.39 10.9 12 C 10.9 12.305 11.023 12.58 11.221 12.779 C 11.42 12.977 11.695 13.1 12 13.1 C 12.61 13.1 13.1 12.61 13.1 12 C 13.1 11.39 12.61 10.9 12 10.9 L 12 10.9 M 12 12 L 12 12 L 12 12 L 12 12 L 12 12 L 12 12 L 12 12 M 12 12 L 12 12 C 12 12 12 12 12 12 C 12 12 12 12 12 12 C 12 12 12 12 12 12 C 12 12 12 12 12 12\"\n                android:valueTo=\"M 12 2 C 6.48 2 2 6.48 2 12 C 2 17.141 5.886 21.38 10.878 21.938 C 11.247 21.979 11.621 22 12 22 C 17.52 22 22 17.52 22 12 C 22 6.48 17.52 2 12 2 C 12 2 12 2 12 2 M 12 10.9 C 11.695 10.9 11.42 11.023 11.221 11.221 C 11.023 11.42 10.9 11.695 10.9 12 C 10.9 12.61 11.39 13.1 12 13.1 C 12.61 13.1 13.1 12.61 13.1 12 C 13.1 11.39 12.61 10.9 12 10.9 L 12 10.9 M 14.19 14.19 L 6 18 L 6 18 L 9.81 9.81 L 18 6 L 14.19 14.19 L 14.19 14.19 M 12 12 L 12 12 C 12 12 12 12 12 12 C 12 12 12 12 12 12 C 12 12 12 12 12 12 C 12 12 12 12 12 12\"\n                android:valueType=\"pathType\" />\n        </aapt:attr>\n    </target>\n    <target android:name=\"main_parent\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"rotation\"\n                android:valueFrom=\"0\"\n                android:valueTo=\"180\"\n                android:valueType=\"floatType\" />\n        </aapt:attr>\n    </target>\n    <target android:name=\"group\">\n        <aapt:attr name=\"android:animation\">\n            <set>\n                <objectAnimator\n                    android:duration=\"66\"\n                    android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                    android:propertyName=\"scaleX\"\n                    android:valueFrom=\"0\"\n                    android:valueTo=\"0\"\n                    android:valueType=\"floatType\" />\n                <objectAnimator\n                    android:duration=\"100\"\n                    android:interpolator=\"@android:anim/decelerate_interpolator\"\n                    android:propertyName=\"scaleX\"\n                    android:startOffset=\"66\"\n                    android:valueFrom=\"0\"\n                    android:valueTo=\"1\"\n                    android:valueType=\"floatType\" />\n                <objectAnimator\n                    android:duration=\"66\"\n                    android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                    android:propertyName=\"scaleY\"\n                    android:valueFrom=\"0\"\n                    android:valueTo=\"0\"\n                    android:valueType=\"floatType\" />\n                <objectAnimator\n                    android:duration=\"100\"\n                    android:interpolator=\"@android:anim/decelerate_interpolator\"\n                    android:propertyName=\"scaleY\"\n                    android:startOffset=\"66\"\n                    android:valueFrom=\"0\"\n                    android:valueTo=\"1\"\n                    android:valueType=\"floatType\" />\n            </set>\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_caret_down.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"caret_up\"\n            android:width=\"24.0dip\"\n            android:height=\"24.0dip\"\n            android:viewportWidth=\"24.0\"\n            android:viewportHeight=\"24.0\">\n            <group\n                android:name=\"caret01\"\n                android:rotation=\"90.0\"\n                android:translateX=\"12.0\"\n                android:translateY=\"15.0\">\n                <group\n                    android:name=\"caret_l\"\n                    android:rotation=\"45.0\">\n                    <group\n                        android:name=\"caret_l_pivot\"\n                        android:translateY=\"4.0\">\n                        <group\n                            android:name=\"caret_l_rect_position\"\n                            android:translateY=\"-1.0\">\n                            <path\n                                android:name=\"caret_l_rect\"\n                                android:fillColor=\"#000\"\n                                android:pathData=\"M -1.0,-4.0 l 2.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,8.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -2.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-8.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z\" />\n                        </group>\n                    </group>\n                </group>\n                <group\n                    android:name=\"caret_r\"\n                    android:rotation=\"-45.0\">\n                    <group\n                        android:name=\"caret_r_pivot\"\n                        android:translateY=\"-4.0\">\n                        <group\n                            android:name=\"caret_r_rect_position\"\n                            android:translateY=\"1.0\">\n                            <path\n                                android:name=\"caret_r_rect\"\n                                android:fillColor=\"#000\"\n                                android:pathData=\"M -1.0,-4.0 l 2.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,8.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l -2.0,0.0 c 0.0,0.0 0.0,0.0 0.0,0.0 l 0.0,-8.0 c 0.0,0.0 0.0,0.0 0.0,0.0 Z\" />\n                        </group>\n                    </group>\n                </group>\n            </group>\n        </vector>\n    </aapt:attr>\n\n    <target android:name=\"caret01\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:pathData=\"M 12.0,9.0 c 0.0,0.66667 0.0,5.0 0.0,6.0\"\n                android:propertyXName=\"translateX\"\n                android:propertyYName=\"translateY\" />\n        </aapt:attr>\n    </target>\n    <target android:name=\"caret_l\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"rotation\"\n                android:valueFrom=\"-45.0\"\n                android:valueTo=\"45.0\"\n                android:valueType=\"floatType\" />\n        </aapt:attr>\n    </target>\n    <target\n        android:name=\"caret_r\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"rotation\"\n                android:valueFrom=\"45.0\"\n                android:valueTo=\"-45.0\"\n                android:valueType=\"floatType\" />\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_history_enter.xml",
    "content": "<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"history_enter\"\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <path\n                android:name=\"clock\"\n                android:fillColor=\"#000000\"\n                android:pathData=\"M 12 8 L 12 13 L 16.28 15.54 L 17 14.33 L 13.5 12.25 L 13.5 8 L 12 8 Z\" />\n            <group\n                android:name=\"arrow_head\"\n                android:pivotX=\"13\"\n                android:pivotY=\"12\">\n                <path\n                    android:name=\"arrow\"\n                    android:fillColor=\"#000000\"\n                    android:pathData=\"M 13 3 C 8.03 3 4 7.03 4 12 L 1 12 L 4.89 15.89 L 4.96 16.03 L 9 12 L 6 12 C 6 8.13 9.13 5 13 5 C 16.87 5 20 8.13 20 12 C 20 15.87 16.87 19 13 19 C 11.07 19 9.32 18.21 8.06 16.94 L 6.64 18.36 C 8.27 19.99 10.51 21 13 21 C 17.97 21 22 16.97 22 12 C 22 7.03 17.97 3 13 3 Z M 13 3 Z\" />\n            </group>\n        </vector>\n    </aapt:attr>\n    <target android:name=\"arrow_head\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"500\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"rotation\"\n                android:valueFrom=\"360\"\n                android:valueTo=\"0\"\n                android:valueType=\"floatType\" />\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_library_enter.xml",
    "content": "<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"vector\"\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"1080\"\n            android:viewportHeight=\"1080\">\n            <path\n                android:name=\"bookmark\"\n                android:fillColor=\"#000000\"\n                android:pathData=\"M 899.84 90.84 C 899.84 90.84 360.3 90.84 360.3 90.84 C 310.84 90.84 270.38 131.3 270.38 180.76 C 270.38 180.76 270.38 720.31 270.38 720.31 C 270.38 769.76 310.84 810.23 360.3 810.23 C 360.3 810.23 899.84 810.23 899.84 810.23 C 949.3 810.23 989.77 769.76 989.77 720.31 C 989.77 720.31 989.77 180.76 989.77 180.76 C 989.77 131.3 949.3 90.84 899.84 90.84 M 899.84 720.31 C 899.84 720.31 360.3 720.31 360.3 720.31 C 360.3 720.31 360.3 180.76 360.3 180.76 C 360.3 180.76 585.11 180.76 585.11 180.76 C 585.11 180.76 585.11 585.42 585.11 585.42 C 585.11 585.42 720 484.26 720 484.26 C 720 484.26 854.88 585.42 854.88 585.42 C 854.88 585.42 854.88 180.76 854.88 180.76 C 854.88 180.76 899.84 180.76 899.84 180.76 C 899.84 180.76 899.84 720.31 899.84 720.31\" />\n            <path\n                android:name=\"angle\"\n                android:fillColor=\"#000000\"\n                android:pathData=\"M 180.45 270.69 C 180.45 270.69 90.53 270.69 90.53 270.69 C 90.53 270.69 90.53 900.15 90.53 900.15 C 90.53 949.61 131 990.08 180.45 990.08 C 180.45 990.08 809.92 990.08 809.92 990.08 C 809.92 990.08 809.92 900.15 809.92 900.15 C 809.92 900.15 180.45 900.15 180.45 900.15 C 180.45 900.15 180.45 270.69 180.45 270.69\" />\n        </vector>\n    </aapt:attr>\n    <target android:name=\"bookmark\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"pathData\"\n                android:valueFrom=\"M 634.454 90.84 C 543.069 90.84 451.685 90.84 360.3 90.84 C 310.84 90.84 270.38 131.3 270.38 180.76 C 270.38 360.61 270.38 540.46 270.38 720.31 C 270.38 769.76 310.84 810.23 360.3 810.23 C 540.147 810.23 719.993 810.23 899.84 810.23 C 949.3 810.23 989.77 769.76 989.77 720.31 C 989.77 540.46 989.77 360.61 989.77 180.76 C 989.77 131.3 949.3 90.84 899.84 90.84 C 811.378 90.84 722.916 90.84 634.454 90.84 M 899.84 720.31 C 834.876 720.31 769.913 720.31 704.949 720.31 C 590.066 720.31 475.183 720.31 360.3 720.31 C 360.3 540.46 360.3 360.61 360.3 180.76 C 435.237 180.76 510.173 180.76 585.11 180.76 L 585.11 180.76 C 585.11 315.647 585.11 450.533 585.11 585.42 C 630.073 551.7 675.037 517.98 720 484.26 C 764.96 517.98 809.92 551.7 854.88 585.42 C 854.88 450.533 854.88 315.647 854.88 180.76 C 869.867 180.76 884.853 180.76 899.84 180.76 C 899.84 360.61 899.84 540.46 899.84 720.31\"\n                android:valueTo=\"M 900 90 C 720 90 540 90 360 90 C 310.5 90 270 130.5 270 180 C 270 360 270 540 270 720 C 270 769.5 310.5 810 360 810 C 540 810 720 810 900 810 C 949.5 810 990 769.5 990 720 C 990 540 990 360 990 180 C 990 130.5 949.5 90 900 90 C 900 90 900 90 900 90 M 900 540 C 862.5 517.5 825 495 787.5 472.5 C 750 495 712.5 517.5 675 540 C 675 540 675 540 675 540 C 675 471.351 675 402.701 675 334.052 L 675 180 C 675 180 675 180 675 180 C 713.708 180 752.416 180 791.124 180 C 827.416 180 863.708 180 900 180 C 900 233.194 900 286.387 900 339.581 C 900 406.387 900 473.194 900 540 C 900 540 900 540 900 540\"\n                android:valueType=\"pathType\" />\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_more_enter.xml",
    "content": "<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"1080\"\n            android:viewportHeight=\"1080\">\n            <group android:name=\"_R_G\">\n                <group android:name=\"_R_G_L_2_G\">\n                    <path\n                        android:name=\"_R_G_L_2_G_D_0_P_0\"\n                        android:fillAlpha=\"1\"\n                        android:fillColor=\"#000000\"\n                        android:fillType=\"nonZero\"\n                        android:pathData=\" M270.46 450.51 C220.99,450.51 180.52,490.99 180.52,540.46 C180.52,589.93 220.99,630.41 270.46,630.41 C319.93,630.41 360.41,589.93 360.41,540.46 C360.41,490.99 319.93,450.51 270.46,450.51c \" />\n                </group>\n                <group android:name=\"_R_G_L_1_G\">\n                    <path\n                        android:name=\"_R_G_L_1_G_D_0_P_0\"\n                        android:fillAlpha=\"1\"\n                        android:fillColor=\"#000000\"\n                        android:fillType=\"nonZero\"\n                        android:pathData=\" M540.31 450.51 C490.84,450.51 450.36,490.99 450.36,540.46 C450.36,589.93 490.84,630.41 540.31,630.41 C589.78,630.41 630.26,589.93 630.26,540.46 C630.26,490.99 589.78,450.51 540.31,450.51c \" />\n                </group>\n                <group android:name=\"_R_G_L_0_G\">\n                    <path\n                        android:name=\"_R_G_L_0_G_D_0_P_0\"\n                        android:fillAlpha=\"1\"\n                        android:fillColor=\"#000000\"\n                        android:fillType=\"nonZero\"\n                        android:pathData=\" M810.16 450.51 C760.68,450.51 720.21,490.99 720.21,540.46 C720.21,589.93 760.68,630.41 810.16,630.41 C859.63,630.41 900.1,589.93 900.1,540.46 C900.1,490.99 859.63,450.51 810.16,450.51c \" />\n                </group>\n            </group>\n            <group android:name=\"time_group\" />\n        </vector>\n    </aapt:attr>\n    <target android:name=\"_R_G_L_2_G_D_0_P_0\">\n        <aapt:attr name=\"android:animation\">\n            <set android:ordering=\"together\">\n                <objectAnimator\n                    android:duration=\"83\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"0\"\n                    android:valueFrom=\"M270.46 450.51 C220.99,450.51 180.52,490.99 180.52,540.46 C180.52,589.93 220.99,630.41 270.46,630.41 C319.93,630.41 360.41,589.93 360.41,540.46 C360.41,490.99 319.93,450.51 270.46,450.51c \"\n                    android:valueTo=\"M270.46 450.51 C220.99,450.51 180.52,490.99 180.52,540.46 C180.52,589.93 220.99,630.41 270.46,630.41 C319.93,630.41 360.41,589.93 360.41,540.46 C360.41,490.99 319.93,450.51 270.46,450.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"100\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"83\"\n                    android:valueFrom=\"M270.46 450.51 C220.99,450.51 180.52,490.99 180.52,540.46 C180.52,589.93 220.99,630.41 270.46,630.41 C319.93,630.41 360.41,589.93 360.41,540.46 C360.41,490.99 319.93,450.51 270.46,450.51c \"\n                    android:valueTo=\"M272.31 322.51 C222.84,322.51 182.36,362.99 182.36,412.46 C182.36,461.93 222.84,502.41 272.31,502.41 C321.78,502.41 362.26,461.93 362.26,412.46 C362.26,362.99 321.78,322.51 272.31,322.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"133\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"183\"\n                    android:valueFrom=\"M272.31 322.51 C222.84,322.51 182.36,362.99 182.36,412.46 C182.36,461.93 222.84,502.41 272.31,502.41 C321.78,502.41 362.26,461.93 362.26,412.46 C362.26,362.99 321.78,322.51 272.31,322.51c \"\n                    android:valueTo=\"M270.46 486.51 C220.99,486.51 180.52,526.99 180.52,576.46 C180.52,625.93 220.99,666.41 270.46,666.41 C319.93,666.41 360.41,625.93 360.41,576.46 C360.41,526.99 319.93,486.51 270.46,486.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"67\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"317\"\n                    android:valueFrom=\"M270.46 486.51 C220.99,486.51 180.52,526.99 180.52,576.46 C180.52,625.93 220.99,666.41 270.46,666.41 C319.93,666.41 360.41,625.93 360.41,576.46 C360.41,526.99 319.93,486.51 270.46,486.51c \"\n                    android:valueTo=\"M270.46 450.51 C220.99,450.51 180.52,490.99 180.52,540.46 C180.52,589.93 220.99,630.41 270.46,630.41 C319.93,630.41 360.41,589.93 360.41,540.46 C360.41,490.99 319.93,450.51 270.46,450.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n            </set>\n        </aapt:attr>\n    </target>\n    <target android:name=\"_R_G_L_1_G_D_0_P_0\">\n        <aapt:attr name=\"android:animation\">\n            <set android:ordering=\"together\">\n                <objectAnimator\n                    android:duration=\"150\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"0\"\n                    android:valueFrom=\"M540.31 450.51 C490.84,450.51 450.36,490.99 450.36,540.46 C450.36,589.93 490.84,630.41 540.31,630.41 C589.78,630.41 630.26,589.93 630.26,540.46 C630.26,490.99 589.78,450.51 540.31,450.51c \"\n                    android:valueTo=\"M540.31 450.51 C490.84,450.51 450.36,490.99 450.36,540.46 C450.36,589.93 490.84,630.41 540.31,630.41 C589.78,630.41 630.26,589.93 630.26,540.46 C630.26,490.99 589.78,450.51 540.31,450.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"100\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"150\"\n                    android:valueFrom=\"M540.31 450.51 C490.84,450.51 450.36,490.99 450.36,540.46 C450.36,589.93 490.84,630.41 540.31,630.41 C589.78,630.41 630.26,589.93 630.26,540.46 C630.26,490.99 589.78,450.51 540.31,450.51c \"\n                    android:valueTo=\"M542.16 322.51 C492.68,322.51 452.21,362.99 452.21,412.46 C452.21,461.93 492.68,502.41 542.16,502.41 C591.63,502.41 632.1,461.93 632.1,412.46 C632.1,362.99 591.63,322.51 542.16,322.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"133\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"250\"\n                    android:valueFrom=\"M542.16 322.51 C492.68,322.51 452.21,362.99 452.21,412.46 C452.21,461.93 492.68,502.41 542.16,502.41 C591.63,502.41 632.1,461.93 632.1,412.46 C632.1,362.99 591.63,322.51 542.16,322.51c \"\n                    android:valueTo=\"M540.31 486.51 C490.84,486.51 450.36,526.99 450.36,576.46 C450.36,625.93 490.84,666.41 540.31,666.41 C589.78,666.41 630.26,625.93 630.26,576.46 C630.26,526.99 589.78,486.51 540.31,486.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"67\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"383\"\n                    android:valueFrom=\"M540.31 486.51 C490.84,486.51 450.36,526.99 450.36,576.46 C450.36,625.93 490.84,666.41 540.31,666.41 C589.78,666.41 630.26,625.93 630.26,576.46 C630.26,526.99 589.78,486.51 540.31,486.51c \"\n                    android:valueTo=\"M540.31 450.51 C490.84,450.51 450.36,490.99 450.36,540.46 C450.36,589.93 490.84,630.41 540.31,630.41 C589.78,630.41 630.26,589.93 630.26,540.46 C630.26,490.99 589.78,450.51 540.31,450.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n            </set>\n        </aapt:attr>\n    </target>\n    <target android:name=\"_R_G_L_0_G_D_0_P_0\">\n        <aapt:attr name=\"android:animation\">\n            <set android:ordering=\"together\">\n                <objectAnimator\n                    android:duration=\"217\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"0\"\n                    android:valueFrom=\"M810.16 450.51 C760.68,450.51 720.21,490.99 720.21,540.46 C720.21,589.93 760.68,630.41 810.16,630.41 C859.63,630.41 900.1,589.93 900.1,540.46 C900.1,490.99 859.63,450.51 810.16,450.51c \"\n                    android:valueTo=\"M810.16 450.51 C760.68,450.51 720.21,490.99 720.21,540.46 C720.21,589.93 760.68,630.41 810.16,630.41 C859.63,630.41 900.1,589.93 900.1,540.46 C900.1,490.99 859.63,450.51 810.16,450.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"100\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"217\"\n                    android:valueFrom=\"M810.16 450.51 C760.68,450.51 720.21,490.99 720.21,540.46 C720.21,589.93 760.68,630.41 810.16,630.41 C859.63,630.41 900.1,589.93 900.1,540.46 C900.1,490.99 859.63,450.51 810.16,450.51c \"\n                    android:valueTo=\"M812 322.51 C762.53,322.51 722.05,362.99 722.05,412.46 C722.05,461.93 762.53,502.41 812,502.41 C861.47,502.41 901.95,461.93 901.95,412.46 C901.95,362.99 861.47,322.51 812,322.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"133\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"317\"\n                    android:valueFrom=\"M812 322.51 C762.53,322.51 722.05,362.99 722.05,412.46 C722.05,461.93 762.53,502.41 812,502.41 C861.47,502.41 901.95,461.93 901.95,412.46 C901.95,362.99 861.47,322.51 812,322.51c \"\n                    android:valueTo=\"M810.16 486.51 C760.68,486.51 720.21,526.99 720.21,576.46 C720.21,625.93 760.68,666.41 810.16,666.41 C859.63,666.41 900.1,625.93 900.1,576.46 C900.1,526.99 859.63,486.51 810.16,486.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n                <objectAnimator\n                    android:duration=\"67\"\n                    android:propertyName=\"pathData\"\n                    android:startOffset=\"450\"\n                    android:valueFrom=\"M810.16 486.51 C760.68,486.51 720.21,526.99 720.21,576.46 C720.21,625.93 760.68,666.41 810.16,666.41 C859.63,666.41 900.1,625.93 900.1,576.46 C900.1,526.99 859.63,486.51 810.16,486.51c \"\n                    android:valueTo=\"M810.16 450.51 C760.68,450.51 720.21,490.99 720.21,540.46 C720.21,589.93 760.68,630.41 810.16,630.41 C859.63,630.41 900.1,589.93 900.1,540.46 C900.1,490.99 859.63,450.51 810.16,450.51c \"\n                    android:valueType=\"pathType\">\n                    <aapt:attr name=\"android:interpolator\">\n                        <pathInterpolator android:pathData=\"M 0.0,0.0 c0.5,0 0.5,1 1.0,1.0\" />\n                    </aapt:attr>\n                </objectAnimator>\n            </set>\n        </aapt:attr>\n    </target>\n    <target android:name=\"time_group\">\n        <aapt:attr name=\"android:animation\">\n            <set android:ordering=\"together\">\n                <objectAnimator\n                    android:duration=\"833\"\n                    android:propertyName=\"translateX\"\n                    android:startOffset=\"0\"\n                    android:valueFrom=\"0\"\n                    android:valueTo=\"1\"\n                    android:valueType=\"floatType\" />\n            </set>\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_play_to_pause.xml",
    "content": "<animated-vector\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"playtopause\"\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <group\n                android:name=\"group\"\n                android:pivotX=\"12\"\n                android:pivotY=\"12\">\n                <path\n                    android:name=\"path\"\n                    android:pathData=\"M 8 5 L 8 19 L 19 12 Z\"\n                    android:fillColor=\"#FFF\" />\n            </group>\n        </vector>\n    </aapt:attr>\n    <target android:name=\"path\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:propertyName=\"pathData\"\n                android:duration=\"300\"\n                android:valueFrom=\"M 8 5 L 8 12 L 19 12 L 19 12 L 8 5 M 8 12 L 8 19 L 19 12 L 19 12 L 8 12\"\n                android:valueTo=\"M 5 6 L 5 10 L 19 10 L 19 6 L 5 6 M 5 14 L 5 18 L 19 18 L 19 14 L 5 14\"\n                android:valueType=\"pathType\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"/>\n        </aapt:attr>\n    </target>\n    <target android:name=\"group\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:propertyName=\"rotation\"\n                android:duration=\"300\"\n                android:valueFrom=\"0\"\n                android:valueTo=\"90\"\n                android:valueType=\"floatType\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"/>\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/anim_updates_enter.xml",
    "content": "<animated-vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\">\n    <aapt:attr name=\"android:drawable\">\n        <vector\n            android:name=\"updates_enter\"\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <path\n                android:name=\"updates_filled\"\n                android:fillColor=\"#000000\"\n                android:pathData=\"M 23 12 L 20.56 9.22 L 20.9 5.54 L 17.29 4.72 L 15.4 1.54 L 12 3 L 8.6 1.54 L 6.71 4.72 L 3.1 5.53 L 3.44 9.21 L 1 12 L 3.44 14.78 L 3.1 18.47 L 6.71 19.29 L 8.6 22.47 L 12 21 L 15.4 22.46 L 17.29 19.28 L 20.9 18.46 L 20.56 14.78 L 23 12 Z M 9.42 19.93 L 7.99 17.52 L 5.25 16.9 L 5.51 14.1 L 3.66 12 L 5.51 9.88 L 5.25 7.1 L 7.99 6.49 L 9.42 4.08 L 12 5.18 L 14.58 4.07 L 16.01 6.48 L 18.75 7.1 L 18.49 9.89 L 20.34 12 L 18.49 14.11 L 18.49 14.11 L 18.75 16.9 L 16.01 17.52 L 14.58 19.93 L 12 18.82 L 9.42 19.93 M 11 15 L 13 15 L 13 15.5 L 13 16 L 13 17 L 11 17 L 11 15 M 11 7 L 13 7 L 13 13 L 11 13 L 11 7\" />\n        </vector>\n    </aapt:attr>\n    <target android:name=\"updates_filled\">\n        <aapt:attr name=\"android:animation\">\n            <objectAnimator\n                android:duration=\"300\"\n                android:interpolator=\"@android:interpolator/fast_out_slow_in\"\n                android:propertyName=\"pathData\"\n                android:valueFrom=\"M 23 12 L 20.56 9.22 L 20.9 5.54 L 17.29 4.72 L 15.4 1.54 L 12 3 L 8.6 1.54 L 6.71 4.72 L 3.1 5.53 L 3.44 9.21 L 1 12 L 3.44 14.78 L 3.1 18.47 L 6.71 19.29 L 8.6 22.47 L 12 21 L 15.4 22.46 L 17.29 19.28 L 20.9 18.46 L 20.56 14.78 L 23 12 Z M 9.42 19.93 L 7.99 17.52 L 5.25 16.9 L 5.51 14.1 L 3.66 12 L 5.51 9.88 L 5.25 7.1 L 7.99 6.49 L 9.42 4.08 L 12 5.18 L 14.58 4.07 L 16.01 6.48 L 18.75 7.1 L 18.49 9.89 L 20.34 12 L 18.49 14.11 L 18.49 14.11 L 18.75 16.9 L 16.01 17.52 L 14.58 19.93 L 12 18.82 L 9.42 19.93 M 11 15 L 13 15 L 13 15.5 L 13 16 L 13 17 L 11 17 L 11 15 M 11 7 L 13 7 L 13 13 L 11 13 L 11 7\"\n                android:valueTo=\"M 23 12 L 20.56 9.22 L 20.9 5.54 L 17.29 4.72 L 15.4 1.54 L 12 3 L 8.6 1.54 L 6.71 4.72 L 3.1 5.53 L 3.44 9.21 L 1 12 L 3.44 14.78 L 3.1 18.47 L 6.71 19.29 L 8.6 22.47 L 12 21 L 15.4 22.46 L 17.29 19.28 L 20.9 18.46 L 20.56 14.78 L 23 12 Z M 12 13 L 11.5 13 L 11 13 L 11 12 L 11 11 L 11 10 L 11 9 L 11 8 L 11 7 L 12 7 L 13 7 L 13 7.857 L 13 8.714 L 13 9.571 L 13 10.429 L 13 11.286 L 13 12.143 L 13 13 L 13 13 L 13 13 L 12.5 13 L 12 13 M 11 15 L 13 15 L 13 16.058 L 13 17 L 13 17 L 11 17 L 11 15 M 12 10 L 12 10 L 12 10 L 12 10 L 12 10\"\n                android:valueType=\"pathType\" />\n        </aapt:attr>\n    </target>\n</animated-vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/cover_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--suppress AndroidElementNotAllowed -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <item>\n        <color android:color=\"@color/cover_placeholder\" />\n    </item>\n\n    <item\n        android:top=\"48dp\"\n        android:bottom=\"48dp\"\n        android:left=\"48dp\"\n        android:right=\"48dp\">\n        <vector\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <path\n                android:fillColor=\"@color/cover_placeholder\"\n                android:pathData=\"M21,5v6.59l-2.29,-2.3c-0.39,-0.39 -1.03,-0.39 -1.42,0L14,12.59 10.71,9.3c-0.39,-0.39 -1.02,-0.39 -1.41,0L6,12.59 3,9.58L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l2.29,2.29c0.39,0.39 1.02,0.39 1.41,0l3.3,-3.3 3.29,3.29c0.39,0.39 1.02,0.39 1.41,0l3.3,-3.28z\"/>\n        </vector>\n    </item>\n\n</layer-list>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_ani.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportWidth=\"512\"\n    android:viewportHeight=\"512\"\n    android:width=\"256dp\"\n    android:height=\"256dp\">\n    <path\n        android:pathData=\"M239.5 0L273.5 0L274.5 1L292.5 2L325.5 9L346.5 16Q401.6 37.4 439 76.5Q475.6 112.9 496 165.5L503 186.5L510 219.5L511 237.5L512 238.5L512 271.5L511 272.5L511 283.5L510 284.5L509 297.5L505 317.5L491 358.5Q466.8 411.8 425.5 448Q391.1 479.1 343.5 497L321.5 504L297.5 509L291.5 509L283.5 511L272.5 511L271.5 512L240.5 512L239.5 511L220.5 510L194.5 505L155.5 492Q100.1 467.4 63 424.5Q33.6 391.4 16 346.5L8 321.5L2 291.5L1 272.5L0 271.5L0 239.5L1 238.5L1 227.5L2 226.5L3 213.5L8 190.5Q14.7 165.7 25 144.5Q48.9 96.4 87.5 63Q116.9 36.9 155.5 20L198.5 6L227.5 1L238.5 1L239.5 0ZM253 64L252 65L237 65L236 66L218 68L182 79L149 97L130 112Q97 140 79 182L68 218L66 236L65 237L65 252L64 253Q67 260 65 272L66 273L68 293L78 327Q92 361 115 386Q142 415 181 432L215 443L232 445L233 446L240 446L241 447L255 447L256 448L257 447L271 447L272 446L293 444L327 434Q361 420 386 397Q415 370 432 332L443 298L445 281L446 280L446 272L447 271L447 258L448 257L447 255L447 237L445 230L444 218L435 188Q421 152 397 127Q370 96 330 79L314 73L295 68L283 67L276 65L258 65L253 64Z\"\n        android:fillColor=\"#FFFFFF\"\n        android:strokeWidth=\"1\" />\n    <path\n        android:pathData=\"M206.5 159L213.5 160L222.5 165L342.5 240L350 246.5Q353 250.5 353 257.5Q351.5 266 345.5 270L217.5 350Q213.5 353 206.5 353Q198 351.5 194 345.5L191 337.5L191 174.5Q192.7 166.2 198.5 162L206.5 159Z\"\n        android:fillColor=\"#FFFFFF\"\n        android:strokeWidth=\"1\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_ani_monochrome_launcher.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path\n        android:pathData=\"M76.51,53.99A22.51,22.55 0,0 1,54 76.55A22.51,22.55 0,0 1,31.49 53.99A22.51,22.55 0,0 1,54 31.44A22.51,22.55 0,0 1,76.51 53.99Z\"\n        android:strokeWidth=\"5\"\n        android:fillColor=\"#D8D8D8\"\n        android:fillAlpha=\"0\"\n        android:strokeColor=\"#000000\"/>\n    <path\n        android:pathData=\"m64,52.88l-15.13,-8.74c-0.9,-0.52 -2.03,0.13 -2.03,1.17v17.47c0,1.04 1.13,1.7 2.03,1.17L64,55.22c0.9,-0.52 0.9,-1.83 0,-2.35z\"\n        android:strokeWidth=\"0.0853242\"\n        android:fillColor=\"#000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_animelibrary_filled_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM12,14.5v-9l6,4.5 -6,4.5z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_animelibrary_outline_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,16L8,16L8,4h12v12zM12,5.5v9l6,-4.5z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_animelibrary_selector_24dp.xml",
    "content": "<animated-selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:id=\"@+id/normal\"\n        android:drawable=\"@drawable/ic_animelibrary_outline_24dp\"\n        android:state_checked=\"false\" />\n\n    <item\n        android:id=\"@+id/checked\"\n        android:drawable=\"@drawable/ic_animelibrary_filled_24dp\"\n        android:state_checked=\"true\" />\n\n    <transition\n        android:drawable=\"@drawable/anim_animelibrary_leave\"\n        android:fromId=\"@id/normal\"\n        android:toId=\"@id/checked\" />\n\n    <transition\n        android:drawable=\"@drawable/anim_animelibrary_enter\"\n        android:fromId=\"@id/checked\"\n        android:toId=\"@id/normal\" />\n\n</animated-selector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_arrow_back_24dp.xml",
    "content": "<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    android:tint=\"?attr/colorControlNormal\">\n  <path\n      android:fillColor=\"#FFF\"\n      android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_collections_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportHeight=\"24\"\n    android:viewportWidth=\"24\"\n    android:height=\"24dp\"\n    android:width=\"24dp\">\n\n  <path android:pathData=\"M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,16L8,16L8,4h12v12zM12,5.5v9l6,-4.5z\"\n      android:fillColor=\"#000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_input_24.xml",
    "content": "<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  <path\n      android:fillColor=\"#000\"\n      android:pathData=\"M21,3.01H3c-1.1,0 -2,0.9 -2,2V9h2V4.99h18v14.03H3V15H1v4.01c0,1.1 0.9,1.98 2,1.98h18c1.1,0 2,-0.88 2,-1.98v-14c0,-1.11 -0.9,-2 -2,-2zM11,16l4,-4 -4,-4v3H1v2h10v3z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_baseline_open_in_new_24.xml",
    "content": "<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  <path\n      android:fillColor=\"#000\"\n      android:pathData=\"M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_book_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M18,2L6,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,4c0,-1.1 -0.9,-2 -2,-2zM9,4h2v5l-1,-0.75L9,9L9,4zM18,20L6,20L6,4h1v9l3,-2.25L13,13L13,4h5v16z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_brightness_negative_20dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"20dp\"\n    android:height=\"20dp\"\n    android:viewportWidth=\"20\"\n    android:viewportHeight=\"20\">\n\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M13.719 1.8A8.759 8.759 0 1 1 1.8 13.719c3.335 1.867 7.633 1.387 10.469-1.449 2.837-2.837 3.318-7.134 1.45-10.47z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_chrome_player_mode_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\nandroid:width=\"24dp\"\nandroid:height=\"24dp\"\nandroid:viewportWidth=\"24\"\nandroid:viewportHeight=\"24\">\n<path\n    android:fillColor=\"#000\"\n    android:pathData=\"M10,16.5l6,-4.5 -6,-4.5v9zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_circle_200dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <corners android:radius=\"1dp\"\n        android:bottomRightRadius=\"0dp\"\n        android:bottomLeftRadius=\"500dp\"\n        android:topLeftRadius=\"500dp\"\n        android:topRightRadius=\"0dp\"/>\n    <solid android:color=\"?attr/colorAccent\"/>\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_circle_right_200dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <corners android:radius=\"1dp\"\n        android:bottomRightRadius=\"500dp\"\n        android:bottomLeftRadius=\"0dp\"\n        android:topLeftRadius=\"0dp\"\n        android:topRightRadius=\"500dp\"/>\n    <solid android:color=\"?attr/colorAccent\"/>\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_close_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_collections_baseline_state.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_baseline_collections_24\" android:state_checked=\"true\" />\n    <item android:drawable=\"@drawable/ic_baseline_collections_24\" android:state_checked=\"false\" />\n</selector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_crop_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17,15h2V7c0,-1.1 -0.9,-2 -2,-2H9v2h8v8zM7,17V1H5v4H1v2h4v10c0,1.1 0.9,2 2,2h10v4h2v-4h4v-2H7z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_crop_off_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M7,1l-2,0l0,1.18l2,2l0,-3.18z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17,7v7.18l0.82,0.82H19V7a2.0059,2.0059 0,0 0,-2 -2H9V6.18L9.82,7Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M19.0001,19l-2,-2h0L2.1,2.1 0.68,3.51 2.1707,5H1V7H4.1718L5,7.8278V17a2.0059,2.0059 0,0 0,2 2h9.1778L17,19.8218V23h2V21.8207L20.49,23.31 21.9,21.9l-2.9,-2.9ZM7,17V9.8268L14.1768,17Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M19.82,17l2,2l1.18,0l0,-2l-3.18,0z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_done_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_done_prev_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M22,18l-3,0l0,-4l-2,0l0,4l-3,0l4,4z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_download_item_24dp.xml",
    "content": "<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  <path\n      android:pathData=\"M11.99,2C6.47,2 2,6.48 2,12C2,17.52 6.47,22 11.99,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 11.99,2zM12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4z\"\n      android:fillColor=\"#000000\"/>\n  <path\n      android:pathData=\"M18.041,12 L16.976,10.935 12.755,15.149L12.755,5.959L11.245,5.959L11.245,15.149L7.031,10.928 5.959,12l6.041,6.041z\"\n      android:fillColor=\"#000000\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_drag_handle_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M20,9H4v2h16V9zM4,15h16v-2H4V15z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_extension_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M20.5,11H19V7c0,-1.1 -0.9,-2 -2,-2h-4V3.5C13,2.12 11.88,1 10.5,1S8,2.12 8,3.5V5H4c-1.1,0 -1.99,0.9 -1.99,2v3.8H3.5c1.49,0 2.7,1.21 2.7,2.7s-1.21,2.7 -2.7,2.7H2V20c0,1.1 0.9,2 2,2h3.8v-1.5c0,-1.49 1.21,-2.7 2.7,-2.7 1.49,0 2.7,1.21 2.7,2.7V22H17c1.1,0 2,-0.9 2,-2v-4h1.5c1.38,0 2.5,-1.12 2.5,-2.5S21.88,11 20.5,11z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_folder_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_forward_10_24dp.xml",
    "content": "<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 android:fillColor=\"#000\" android:pathData=\"M18,13c0,3.31 -2.69,6 -6,6s-6,-2.69 -6,-6s2.69,-6 6,-6v4l5,-5l-5,-5v4c-4.42,0 -8,3.58 -8,8c0,4.42 3.58,8 8,8s8,-3.58 8,-8H18z\"/>\n    <path android:fillColor=\"#000\" android:pathData=\"M10.86,15.94l0,-4.27l-0.09,0l-1.77,0.63l0,0.69l1.01,-0.31l0,3.26z\"/>\n    <path android:fillColor=\"#000\" android:pathData=\"M12.25,13.44v0.74c0,1.9 1.31,1.82 1.44,1.82c0.14,0 1.44,0.09 1.44,-1.82v-0.74c0,-1.9 -1.31,-1.82 -1.44,-1.82C13.55,11.62 12.25,11.53 12.25,13.44zM14.29,13.32v0.97c0,0.77 -0.21,1.03 -0.59,1.03c-0.38,0 -0.6,-0.26 -0.6,-1.03v-0.97c0,-0.75 0.22,-1.01 0.59,-1.01C14.07,12.3 14.29,12.57 14.29,13.32z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_glasses_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M3,10C2.76,10 2.55,10.09 2.41,10.25C2.27,10.4 2.21,10.62 2.24,10.86L2.74,13.85C2.82,14.5 3.4,15 4,15H7C7.64,15 8.36,14.44 8.5,13.82L9.56,10.63C9.6,10.5 9.57,10.31 9.5,10.19C9.39,10.07 9.22,10 9,10H3M7,17H4C2.38,17 0.96,15.74 0.76,14.14L0.26,11.15C0.15,10.3 0.39,9.5 0.91,8.92C1.43,8.34 2.19,8 3,8H9C9.83,8 10.58,8.35 11.06,8.96C11.17,9.11 11.27,9.27 11.35,9.45C11.78,9.36 12.22,9.36 12.64,9.45C12.72,9.27 12.82,9.11 12.94,8.96C13.41,8.35 14.16,8 15,8H21C21.81,8 22.57,8.34 23.09,8.92C23.6,9.5 23.84,10.3 23.74,11.11L23.23,14.18C23.04,15.74 21.61,17 20,17H17C15.44,17 13.92,15.81 13.54,14.3L12.64,11.59C12.26,11.31 11.73,11.31 11.35,11.59L10.43,14.37C10.07,15.82 8.56,17 7,17M15,10C14.78,10 14.61,10.07 14.5,10.19C14.42,10.31 14.4,10.5 14.45,10.7L15.46,13.75C15.64,14.44 16.36,15 17,15H20C20.59,15 21.18,14.5 21.25,13.89L21.76,10.82C21.79,10.62 21.73,10.4 21.59,10.25C21.45,10.09 21.24,10 21,10H15Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_info_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M11,7h2v2h-2zM11,11h2v6h-2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector\n    android:height=\"108dp\"\n    android:width=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#3DDC84\"\n          android:pathData=\"M0,0h108v108h-108z\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M9,0L9,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,0L19,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M29,0L29,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M39,0L39,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M49,0L49,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M59,0L59,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M69,0L69,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M79,0L79,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M89,0L89,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M99,0L99,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,9L108,9\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,19L108,19\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,29L108,29\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,39L108,39\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,49L108,49\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,59L108,59\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,69L108,69\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,79L108,79\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,89L108,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,99L108,99\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,29L89,29\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,39L89,39\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,49L89,49\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,59L89,59\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,69L89,69\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,79L89,79\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M29,19L29,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M39,19L39,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M49,19L49,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M59,19L59,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M69,19L69,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M79,19L79,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108.0\"\n    android:viewportHeight=\"108.0\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M14.5,7L86.5,7A7,7 0,0 1,93.5 14L93.5,95A7,7 0,0 1,86.5 102L14.5,102A7,7 0,0 1,7.5 95L7.5,14A7,7 0,0 1,14.5 7z\" />\n    <path\n        android:fillColor=\"#2E84BF\"\n        android:pathData=\"M14.5,7L86.5,7A7,7 0,0 1,93.5 14L93.5,95A7,7 0,0 1,86.5 102L14.5,102A7,7 0,0 1,7.5 95L7.5,14A7,7 0,0 1,14.5 7z\" />\n    <path\n        android:fillColor=\"#69A3CB\"\n        android:pathData=\"M7.5,12.01C7.5,9.24 9.74,7 12.5,7L17.5,7L17.5,102L12.5,102C9.74,102 7.5,99.77 7.5,96.99L7.5,12.01Z\" />\n    <path\n        android:pathData=\"M54,54m-25,0a25,25 0,1 1,50 0a25,25 0,1 1,-50 0\"\n        android:strokeWidth=\"0.0853242\"\n        android:fillColor=\"#C92824\"/>\n    <path\n        android:pathData=\"M54,54m-20.051,0a20.051,20.051 0,1 1,40.102 0a20.051,20.051 0,1 1,-40.102 0\"\n        android:strokeWidth=\"0.0853242\"\n        android:fillColor=\"#FFFFFF\"/>\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"m63.998,52.877 l-15.133,-8.736c-0.904,-0.521 -2.032,0.131 -2.032,1.173v17.474c0,1.044 1.13,1.695 2.032,1.173L63.997,55.224c0.904,-0.521 0.904,-1.825 0.001,-2.347z\"\n        android:strokeWidth=\"0.0853242\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_overflow_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_pause_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_pause_circle_filled_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportHeight=\"24\"\n    android:viewportWidth=\"24\"\n    android:height=\"24dp\"\n    android:width=\"24dp\">\n    <path\n        android:fillColor=\"?attr/colorOnPrimarySurface\"\n        android:pathData=\"M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM11,16L9,16L9,8h2v8zM15,16h-2L13,8h2v8z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_photo_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_play_arrow_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M8,5v14l11,-7z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_play_circle_filled_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:viewportHeight=\"24\"\n    android:viewportWidth=\"24\"\n    android:height=\"24dp\"\n    android:width=\"24dp\">\n    <path\n        android:fillColor=\"?attr/colorControlActivated\"\n        android:pathData=\"M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,16.5v-9l6,4.5 -6,4.5z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_play_seek_triangle.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"16dp\"\n    android:height=\"20dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M3,2 L22,12 L3,22 Z\" />\n\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_reader_continuous_vertical_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17.3159,1h-10a2.0059,2.0059 0,0 0,-2 2L5.3159,21a2.0059,2.0059 0,0 0,2 2h10a2.0059,2.0059 0,0 0,2 -2L19.3159,3A2.0059,2.0059 0,0 0,17.3159 1ZM17.3159,21h-10L7.3159,3h10Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M11.3083,5h2v5.5h-2z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M15.308,16l-2,0l0,-4.5l-2,0l0,4.5l-2,0l3,3l3,-3z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_reader_default_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M6.9906,18L6.9906,6h12L18.9906,3a2.0059,2.0059 0,0 0,-2 -2h-10a2.0059,2.0059 0,0 0,-2 2L4.9906,21a2.0059,2.0059 0,0 0,2 2h10a2.0059,2.0059 0,0 0,2 -2L18.9906,18h-12ZM6.9906,3h10L16.9906,4h-10ZM16.9906,21h-10L6.9906,20h10Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M21.7706,12.44l-0.02,0.03a3.5546,3.5546 0,0 0,0.05 -0.47,3.9031 3.9031,0 0,0 -0.05,-0.48l0.02,0.03 0.85,-0.68a0.5068,0.5068 0,0 0,0.12 -0.64l-0.84,-1.46a0.4986,0.4986 0,0 0,-0.61 -0.22l-1.01,0.39 0.0099,0.04a3.6135,3.6135 0,0 0,-0.8 -0.48l-0.17,-1.07a0.4879,0.4879 0,0 0,-0.49 -0.43h-1.68a0.4876,0.4876 0,0 0,-0.49 0.42l-0.17,1.08a3.6149,3.6149 0,0 0,-0.8 0.48l0.02,-0.03 -1.01,-0.39a0.4878,0.4878 0,0 0,-0.61 0.22l-0.84,1.46a0.5068,0.5068 0,0 0,0.12 0.64l0.85,0.68 0.02,-0.03a3.9148,3.9148 0,0 0,-0.05 0.48,3.915 3.915,0 0,0 0.05,0.48l-0.02,-0.03 -0.85,0.68a0.5068,0.5068 0,0 0,-0.12 0.64l0.84,1.46a0.4985,0.4985 0,0 0,0.61 0.22l1.01,-0.39 -0.02,-0.03a4.4991,4.4991 0,0 0,0.8 0.46l0.17,1.08a0.4876,0.4876 0,0 0,0.49 0.42h1.68a0.4876,0.4876 0,0 0,0.49 -0.42l0.17,-1.08a3.6138,3.6138 0,0 0,0.8 -0.48l-0.02,0.03 1.02,0.39a0.4879,0.4879 0,0 0,0.61 -0.22l0.84,-1.46a0.5068,0.5068 0,0 0,-0.12 -0.64ZM17.9906,14a2,2 0,1 1,2 -2A2.0059,2.0059 0,0 1,17.9906 14Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_reader_ltr_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17.3159,18h-10L7.3159,16h-2v5a2.0059,2.0059 0,0 0,2 2h10a2.0059,2.0059 0,0 0,2 -2L19.3159,16h-2ZM17.3159,21h-10L7.3159,20h10Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M7.3159,6h10L17.3159,8h2L19.3159,3a2.0059,2.0059 0,0 0,-2 -2h-10a2.0059,2.0059 0,0 0,-2 2L5.3159,8h2ZM7.3159,3h10L17.3159,4h-10Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M22.311,12l-3,-3l0,2l-11.99,0l0,2l11.99,0l0,2l3,-3z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M2.3206,11h1.5v2h-1.5z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M4.8206,11h1.5v2h-1.5z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_reader_rtl_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M7,6H17V8h2V3a2.0059,2.0059 0,0 0,-2 -2H7A2.0059,2.0059 0,0 0,5 3V8H7ZM7,3H17V4H7Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17,18L7,18L7,16L5,16v5a2.0059,2.0059 0,0 0,2 2L17,23a2.0059,2.0059 0,0 0,2 -2L19,16L17,16ZM17,21L7,21L7,20L17,20Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M5.005,13l11.99,0l0,-2l-11.99,0l0,-2l-3,3l3,3l0,-2z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M20.4953,11h1.5v2h-1.5z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17.9953,11h1.5v2h-1.5z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_reader_vertical_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17,1L7,1A2.0059,2.0059 0,0 0,5 3L5,21a2.0059,2.0059 0,0 0,2 2L17,23a2.0059,2.0059 0,0 0,2 -2L19,3A2.0059,2.0059 0,0 0,17 1ZM17,3v1.0462L7,4.0462L7,3ZM17,6.0462v12L7,18.0462v-12ZM7,21v-0.9538L17,20.0462L17,21Z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M9,13l3,3l3,-3l-2,0l0,-5l-2,0l0,5l-2,0z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_reader_webtoon_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M11.992,19l3,-3l-2,0l0,-11l-2,0l0,11l-2,0l3,3z\" />\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M17,1L7,1A2.0059,2.0059 0,0 0,5 3L5,21a2.0059,2.0059 0,0 0,2 2L17,23a2.0059,2.0059 0,0 0,2 -2L19,3A2.0059,2.0059 0,0 0,17 1ZM17,21L7,21L7,3L17,3Z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_refresh_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_share_24dp.xml",
    "content": "<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  <path\n      android:fillColor=\"#FFF\"\n      android:pathData=\"M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92s2.92,-1.31 2.92,-2.92c0,-1.61 -1.31,-2.92 -2.92,-2.92zM18,4c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM6,13c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1zM18,20.02c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_skip_next_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_skip_previous_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_system_update_alt_white_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M12,16.5l4,-4h-3v-9h-2v9L8,12.5l4,4zM21,3.5h-6v1.99h6v14.03L3,19.52L3,5.49h6L9,3.5L3,3.5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2v-14c0,-1.1 -0.9,-2 -2,-2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_tachi_splash.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:width=\"108dp\"\n        android:height=\"108dp\"\n        android:drawable=\"@drawable/ic_ani\"\n        android:gravity=\"center\" />\n</layer-list>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_updates_outline_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M23,12l-2.44,-2.78 0.34,-3.68 -3.61,-0.82 -1.89,-3.18L12,3 8.6,1.54 6.71,4.72l-3.61,0.81 0.34,3.68L1,12l2.44,2.78 -0.34,3.69 3.61,0.82 1.89,3.18L12,21l3.4,1.46 1.89,-3.18 3.61,-0.82 -0.34,-3.68L23,12zM18.49,14.11l0.26,2.79 -2.74,0.62 -1.43,2.41L12,18.82l-2.58,1.11 -1.43,-2.41 -2.74,-0.62 0.26,-2.8L3.66,12l1.85,-2.12 -0.26,-2.78 2.74,-0.61 1.43,-2.41L12,5.18l2.58,-1.11 1.43,2.41 2.74,0.62 -0.26,2.79L20.34,12l-1.85,2.11zM11,15h2v2h-2zM11,7h2v6h-2z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_video_chapter_20dp.xml",
    "content": "<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=\"#000000\"\n        android:pathData=\"M19,1l-5,5v11l5,-4.5L19,1zM1,6v14.65c0,0.25 0.25,0.5 0.5,0.5 0.1,0 0.15,-0.05 0.25,-0.05C3.1,20.45 5.05,20 6.5,20c1.95,0 4.05,0.4 5.5,1.5L12,6c-1.45,-1.1 -3.55,-1.5 -5.5,-1.5S2.45,4.9 1,6zM23,19.5L23,6c-0.6,-0.45 -1.25,-0.75 -2,-1v13.5c-1.1,-0.35 -2.3,-0.5 -3.5,-0.5 -1.7,0 -4.15,0.65 -5.5,1.5v2c1.35,-0.85 3.8,-1.5 5.5,-1.5 1.65,0 3.35,0.3 4.75,1.05 0.1,0.05 0.15,0.05 0.25,0.05 0.25,0 0.5,-0.25 0.5,-0.5v-1.1z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_volume_off_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v2.21l2.45,2.45c0.03,-0.2 0.05,-0.41 0.05,-0.63zM19,12c0,0.94 -0.2,1.82 -0.54,2.64l1.51,1.51C20.63,14.91 21,13.5 21,12c0,-4.28 -2.99,-7.86 -7,-8.77v2.06c2.89,0.86 5,3.54 5,6.71zM4.27,3L3,4.27 7.73,9L3,9v6h4l5,5v-6.73l4.25,4.25c-0.67,0.52 -1.42,0.93 -2.25,1.18v2.06c1.38,-0.31 2.63,-0.95 3.69,-1.81L19.73,21 21,19.73l-9,-9L4.27,3zM12,4L9.91,6.09 12,8.18L12,4z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_warning_white_24dp.xml",
    "content": "<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    <path\n        android:fillColor=\"#FFF\"\n        android:pathData=\"M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/line_divider.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n\n    <size\n        android:width=\"1dp\"\n        android:height=\"1dp\" />\n\n    <solid android:color=\"?android:attr/divider\" />\n\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/material_popup_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item>\n        <shape>\n            <solid android:color=\"?attr/colorSurface\" />\n            <corners android:radius=\"@dimen/m3_alert_dialog_corner_size\" />\n        </shape>\n    </item>\n    <item>\n        <shape>\n            <solid android:color=\"@color/m3_popupmenu_overlay_color\" />\n            <corners android:radius=\"@dimen/m3_alert_dialog_corner_size\" />\n        </shape>\n    </item>\n</layer-list>\n"
  },
  {
    "path": "app/src/main/res/drawable/outline_brand_family_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\" android:height=\"24dp\" android:tint=\"#000000\" android:viewportHeight=\"960\" android:viewportWidth=\"960\" android:width=\"24dp\">\n\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M186,880Q132,880 106,858Q80,836 80,792Q80,734 129,718Q178,702 245,702L266,702L266,646Q266,612 265,590.5Q264,569 259,555Q254,541 247.5,535.5Q241,530 230,530Q221,530 213.5,533Q206,536 201,541Q197,546 196,551.5Q195,557 197,563Q203,574 211,584.5Q219,595 219,609Q219,634 201.5,651.5Q184,669 159,669Q134,669 116.5,651.5Q99,634 99,609Q99,582 111,565Q123,548 143.5,538Q164,528 191,524Q218,520 249,520Q334,520 367,550.5Q400,581 400,658L400,805Q400,824 404.5,833Q409,842 420,842Q432,842 439.5,824Q447,806 449,768L460,768Q457,830 436.5,855Q416,880 368,880Q325,880 300.5,866.5Q276,853 269,826Q259,855 239.5,867.5Q220,880 186,880ZM559,880Q539,880 526.5,863.5Q514,847 522,828L624,559Q631,542 646,531Q661,520 680,520Q699,520 714,531Q729,542 736,559L838,828Q846,847 833.5,863.5Q821,880 801,880Q789,880 779,873Q769,866 764,854L744,796L616,796L596,854Q592,865 582,872.5Q572,880 559,880ZM235,851Q248,851 257,830.5Q266,810 266,781L266,714Q240,714 228,729.5Q216,745 216,780L216,791Q216,827 220,839Q224,851 235,851ZM642,726L719,726L680,612L642,726ZM605,441Q557,441 528.5,407.5Q500,374 500,317Q500,213 566,146.5Q632,80 735,80Q777,80 803,89.5Q829,99 829,114Q829,120 827,126Q825,132 820,137Q815,144 807.5,147Q800,150 792,148Q778,144 760,141Q742,138 727,138Q656,138 613,186Q570,234 570,313Q570,335 578,359Q586,383 614,383Q625,383 635.5,378Q646,373 654,364Q671,346 685.5,304Q700,262 712,202Q714,189 722.5,183.5Q731,178 746,178Q764,178 773.5,187.5Q783,197 779,211Q767,254 761.5,286Q756,318 756,344Q756,364 761.5,373Q767,382 778,382Q789,382 799.5,374Q810,366 829,344Q831,341 844,337Q852,337 856,343Q860,349 860,360Q860,388 828,414Q796,440 761,440Q735,440 716.5,426Q698,412 691,386Q676,412 654,426.5Q632,441 605,441ZM120,440L120,220Q120,162 161,121Q202,80 260,80Q318,80 359,121Q400,162 400,220L400,440L320,440L320,360L200,360L200,440L120,440ZM200,280L320,280L320,220Q320,195 302.5,177.5Q285,160 260,160Q235,160 217.5,177.5Q200,195 200,220L200,280Z\"/>\n\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/sc_collections_baseline_48dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@drawable/sc_collections_bookmark_48dp\">\n    <background android:drawable=\"@color/accent_blue\"/>\n    <foreground>\n        <vector\n            android:width=\"120dp\"\n            android:height=\"120dp\"\n            android:viewportWidth=\"56.0\"\n            android:viewportHeight=\"56.0\">\n            <group\n                android:translateX=\"16\"\n                android:translateY=\"16\">\n                <path\n                    android:fillColor=\"#FFF\"\n                    android:pathData=\"M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6z\"/>\n                <path\n                    android:fillColor=\"#FFF\"\n                    android:pathData=\"M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM12,14.5v-9l6,4.5 -6,4.5z\"/>\n            </group>\n        </vector>\n    </foreground>\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/drawable/sc_collections_bookmark_48dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@drawable/sc_collections_bookmark_48dp\">\n<background android:drawable=\"@color/accent_blue\"/>\n<foreground>\n    <vector\n        android:width=\"120dp\"\n        android:height=\"120dp\"\n        android:viewportWidth=\"56.0\"\n        android:viewportHeight=\"56.0\">\n        <group\n            android:translateX=\"16\"\n            android:translateY=\"16\">\n            <path\n                android:fillColor=\"#FFF\"\n                android:pathData=\"M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6z\"/>\n            <path\n                android:fillColor=\"#FFF\"\n                android:pathData=\"M20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,12l-2.5,-1.5L15,12L15,4h5v8z\"/>\n        </group>\n    </vector>\n</foreground>\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/drawable/sc_explore_48dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@drawable/sc_explore_48dp\">\n    <background android:drawable=\"@color/accent_blue\"/>\n    <foreground>\n        <vector\n            android:width=\"120dp\"\n            android:height=\"120dp\"\n            android:viewportWidth=\"56.0\"\n            android:viewportHeight=\"56.0\">\n            <group\n                android:translateX=\"16\"\n                android:translateY=\"16\">\n                <path\n                    android:fillColor=\"#FFF\"\n                    android:pathData=\"M12,10.9c-0.61,0 -1.1,0.49 -1.1,1.1s0.49,1.1 1.1,1.1c0.61,0 1.1,-0.49 1.1,-1.1s-0.49,-1.1 -1.1,-1.1zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM14.19,14.19L6,18l3.81,-8.19L18,6l-3.81,8.19z\" />\n            </group>\n        </vector>\n    </foreground>\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/drawable/sc_history_48dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@drawable/sc_history_48dp\">\n    <background android:drawable=\"@color/accent_blue\"/>\n    <foreground>\n        <vector\n            android:width=\"120dp\"\n            android:height=\"120dp\"\n            android:viewportWidth=\"56.0\"\n            android:viewportHeight=\"56.0\">\n            <group\n                android:translateX=\"16\"\n                android:translateY=\"16\">\n                <path\n                    android:fillColor=\"#FFF\"\n                    android:pathData=\"M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z\" />\n            </group>\n        </vector>\n    </foreground>\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/drawable/sc_new_releases_48dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@drawable/sc_new_releases_48dp\">\n    <background android:drawable=\"@color/accent_blue\"/>\n    <foreground>\n        <vector\n            android:width=\"120dp\"\n            android:height=\"120dp\"\n            android:viewportWidth=\"56.0\"\n            android:viewportHeight=\"56.0\">\n            <group\n                android:translateX=\"16\"\n                android:translateY=\"16\">\n                <path\n                    android:fillColor=\"#FFF\"\n                    android:pathData=\"M23,12l-2.44,-2.78 0.34,-3.68 -3.61,-0.82 -1.89,-3.18L12,3 8.6,1.54 6.71,4.72l-3.61,0.81 0.34,3.68L1,12l2.44,2.78 -0.34,3.69 3.61,0.82 1.89,3.18L12,21l3.4,1.46 1.89,-3.18 3.61,-0.82 -0.34,-3.68L23,12zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z\" />\n            </group>\n        </vector>\n    </foreground>\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/drawable/sharp_shadow_24.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\" android:height=\"24dp\" android:tint=\"#000000\" android:viewportHeight=\"960\" android:viewportWidth=\"960\" android:width=\"24dp\">\n\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M80,880L80,240L240,240L240,80L880,80L880,720L720,720L720,880L80,880ZM320,640L800,640L800,160L320,160L320,640Z\"/>\n\n</vector>\n"
  },
  {
    "path": "app/src/main/res/layout/download_header.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/container\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginTop=\"8dp\"\n    app:cardBackgroundColor=\"?android:attr/colorBackground\"\n    app:cardElevation=\"0dp\"\n    app:cardForegroundColor=\"@color/draggable_card_foreground\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:id=\"@+id/title\"\n            style=\"@style/TextAppearance.Tachiyomi.SectionHeader\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:paddingHorizontal=\"16dp\"\n            android:paddingVertical=\"8dp\"\n            android:layout_weight=\"1\"\n            android:layout_gravity=\"center_vertical\"\n            tools:text=\"Title\" />\n\n        <ImageView\n            android:id=\"@+id/reorder\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"start\"\n            android:layout_marginEnd=\"4dp\"\n            android:paddingHorizontal=\"10dp\"\n            android:paddingVertical=\"8dp\"\n            android:scaleType=\"center\"\n            app:srcCompat=\"@drawable/ic_drag_handle_24dp\"\n            app:tint=\"?android:attr/textColorHint\"\n            tools:ignore=\"ContentDescription\" />\n\n    </LinearLayout>\n\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/download_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.card.MaterialCardView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/container\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    app:cardBackgroundColor=\"?android:attr/colorBackground\"\n    app:cardElevation=\"0dp\"\n    app:cardForegroundColor=\"@color/draggable_card_foreground\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingVertical=\"4dp\">\n\n        <ImageView\n            android:id=\"@+id/reorder\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentStart=\"true\"\n            android:layout_gravity=\"start\"\n            android:padding=\"16dp\"\n            android:scaleType=\"center\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:srcCompat=\"@drawable/ic_drag_handle_24dp\"\n            app:tint=\"?android:attr/textColorHint\"\n            tools:ignore=\"ContentDescription\" />\n\n        <TextView\n            android:id=\"@+id/manga_full_title\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"8dp\"\n            android:layout_toEndOf=\"@id/reorder\"\n            android:ellipsize=\"end\"\n            android:maxLines=\"1\"\n            android:textAppearance=\"?attr/textAppearanceBodyMedium\"\n            app:layout_constraintEnd_toStartOf=\"@+id/download_progress_text\"\n            app:layout_constraintStart_toEndOf=\"@+id/reorder\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            tools:text=\"Manga title\" />\n\n        <TextView\n            android:id=\"@+id/chapter_title\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"2dp\"\n            android:layout_toEndOf=\"@id/reorder\"\n            android:ellipsize=\"end\"\n            android:maxLines=\"1\"\n            android:textAppearance=\"?attr/textAppearanceBodyMedium\"\n            android:textSize=\"12sp\"\n            app:layout_constraintEnd_toStartOf=\"@+id/menu\"\n            app:layout_constraintStart_toStartOf=\"@+id/manga_full_title\"\n            app:layout_constraintTop_toBottomOf=\"@+id/manga_full_title\"\n            tools:text=\"Chapter Title\" />\n\n        <com.google.android.material.progressindicator.LinearProgressIndicator\n            android:id=\"@+id/download_progress\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"8dp\"\n            android:layout_marginBottom=\"4dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toStartOf=\"@+id/menu\"\n            app:layout_constraintStart_toEndOf=\"@+id/reorder\"\n            app:layout_constraintTop_toBottomOf=\"@+id/chapter_title\" />\n\n        <TextView\n            android:id=\"@+id/download_progress_text\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_toEndOf=\"@id/manga_full_title\"\n            android:maxLines=\"1\"\n            android:textAppearance=\"?attr/textAppearanceBodyMedium\"\n            android:textColor=\"?android:textColorSecondary\"\n            android:textSize=\"12sp\"\n            app:layout_constraintBottom_toBottomOf=\"@+id/manga_full_title\"\n            app:layout_constraintEnd_toStartOf=\"@+id/menu\"\n            app:layout_constraintTop_toTopOf=\"@+id/manga_full_title\"\n            tools:text=\"0/10\" />\n\n        <ImageButton\n            android:id=\"@+id/menu\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"4dp\"\n            android:layout_toEndOf=\"@id/download_progress_text\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:contentDescription=\"@string/action_menu\"\n            android:paddingHorizontal=\"10dp\"\n            android:paddingVertical=\"16dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:srcCompat=\"@drawable/ic_overflow_24dp\"\n            app:tint=\"?attr/colorOnBackground\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n</com.google.android.material.card.MaterialCardView>\n"
  },
  {
    "path": "app/src/main/res/layout/download_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.recyclerview.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:clipToPadding=\"false\"\n    tools:listitem=\"@layout/download_item\" />\n"
  },
  {
    "path": "app/src/main/res/layout/player_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\nandroid:layout_width=\"match_parent\"\nandroid:layout_height=\"match_parent\"\nandroid:fitsSystemWindows=\"false\">\n\n<eu.kanade.tachiyomi.ui.player.AniyomiMPVView\n    android:id=\"@+id/player\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n\n<androidx.compose.ui.platform.ComposeView\n    android:id=\"@+id/controls\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/pref_widget_switch_material.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.google.android.material.materialswitch.MaterialSwitch\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/switchWidget\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:focusable=\"false\"\n    android:clickable=\"false\"\n    android:background=\"@null\"/>\n"
  },
  {
    "path": "app/src/main/res/layout/reader_activity.xml",
    "content": "<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center\">\n\n    <FrameLayout\n        android:id=\"@+id/reader_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <FrameLayout\n            android:id=\"@+id/viewer_container\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:descendantFocusability=\"blocksDescendants\" />\n\n        <androidx.compose.ui.platform.ComposeView\n            android:id=\"@+id/page_number\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"bottom|center_horizontal\" />\n\n    </FrameLayout>\n\n    <eu.kanade.tachiyomi.ui.reader.ReaderNavigationOverlayView\n        android:id=\"@+id/navigation_overlay\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:visibility=\"gone\" />\n\n    <androidx.compose.ui.platform.ComposeView\n        android:id=\"@+id/dialog_root\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/reader_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:orientation=\"vertical\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"center\"\n    android:gravity=\"center\">\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"8dp\"\n        android:text=\"@string/decode_image_error\"\n        android:textAppearance=\"?attr/textAppearanceBodyMedium\" />\n\n    <eu.kanade.tachiyomi.ui.reader.viewer.ReaderButton\n        android:id=\"@+id/action_retry\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"8dp\"\n        android:text=\"@string/action_retry\" />\n\n    <eu.kanade.tachiyomi.ui.reader.viewer.ReaderButton\n        android:id=\"@+id/action_open_in_web_view\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"8dp\"\n        android:text=\"@string/action_open_in_web_view\"\n        android:visibility=\"gone\" />\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/menu/chapter_download.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/start_download\"\n        android:title=\"@string/action_start_downloading_now\" />\n\n    <item\n        android:id=\"@+id/start_download_externally\"\n        android:title=\"@string/action_start_download_externally\"\n        android:visible=\"false\" />\n\n    <item\n        android:id=\"@+id/start_download_internally\"\n        android:title=\"@string/action_start_download_internally\"\n        android:visible=\"false\" />\n\n    <item\n        android:id=\"@+id/delete_download\"\n        android:title=\"@string/action_delete\" />\n\n    <item\n        android:id=\"@+id/cancel_download\"\n        android:title=\"@string/action_cancel\" />\n\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/download_single.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item\n        android:id=\"@+id/move_to_top\"\n        android:title=\"@string/action_move_to_top\" />\n\n    <item\n        android:id=\"@+id/move_to_top_series\"\n        android:title=\"@string/action_move_to_top_all_for_series\" />\n\n    <item\n        android:id=\"@+id/move_to_bottom\"\n        android:title=\"@string/action_move_to_bottom\" />\n\n    <item\n        android:id=\"@+id/move_to_bottom_series\"\n        android:title=\"@string/action_move_to_bottom_all_for_series\" />\n\n    <item\n        android:id=\"@+id/cancel_download\"\n        android:title=\"@string/action_cancel\" />\n\n    <item\n        android:id=\"@+id/cancel_series\"\n        android:title=\"@string/cancel_all_for_series\" />\n\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/main_nav.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:id=\"@+id/nav_animelib\"\n        android:icon=\"@drawable/ic_animelibrary_selector_24dp\"\n        android:title=\"@string/label_anime_library\" />\n    <item\n        android:id=\"@+id/nav_library\"\n        android:icon=\"@drawable/ic_animelibrary_selector_24dp\"\n        android:title=\"@string/label_manga\" />\n    <item\n        android:id=\"@+id/nav_updates\"\n        android:icon=\"@drawable/ic_animelibrary_selector_24dp\"\n        android:title=\"@string/label_recent_updates\" />\n    <item\n        android:id=\"@+id/nav_browse\"\n        android:icon=\"@drawable/ic_animelibrary_selector_24dp\"\n        android:title=\"@string/browse\" />\n    <item\n        android:id=\"@+id/nav_more\"\n        android:icon=\"@drawable/ic_animelibrary_selector_24dp\"\n        android:title=\"@string/label_more\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/mipmap/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=\"@android:color/transparent\"/>\n  <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n  <monochrome android:drawable=\"@drawable/ic_ani_monochrome_launcher\" />\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/mipmap/ic_launcher_round.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=\"@android:color/transparent\"/>\n  <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n  <monochrome android:drawable=\"@drawable/ic_ani_monochrome_launcher\" />\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/raw/keep.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:keep=\"@layout/md_*\" />\n"
  },
  {
    "path": "app/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <declare-styleable name=\"MinMaxNumberPicker\">\n        <attr name=\"min\" format=\"integer\"/>\n        <attr name=\"max\" format=\"integer\"/>\n    </declare-styleable>\n\n    <declare-styleable name=\"MaterialSpinnerView\">\n        <attr name=\"title\" format=\"reference|string\"/>\n        <attr name=\"android:entries\"/>\n        <attr name=\"summary\" format=\"reference|string\" />\n    </declare-styleable>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/bools.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <bool name=\"lightStatusBar\">true</bool>\n    <bool name=\"lightNavigationBar\">false</bool>\n    <bool name=\"elevationOverlayEnabled\">false</bool>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/colors_cottoncandy.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n    <color name=\"cottoncandy_primary\">#9A4058</color>\n    <color name=\"cottoncandy_onPrimary\">#FFFFFF</color>\n    <color name=\"cottoncandy_primaryContainer\">#FFD9DF</color>\n    <color name=\"cottoncandy_onPrimaryContainer\">#3F0017</color>\n    <color name=\"cottoncandy_secondary\">#5bcefa</color>\n    <color name=\"cottoncandy_onSecondary\">#FFFFFF</color>\n    <color name=\"cottoncandy_secondaryContainer\">#BCE9FF</color>\n    <color name=\"cottoncandy_onSecondaryContainer\">#001F2A</color>\n    <color name=\"cottoncandy_tertiary\">#9A4058</color>\n    <color name=\"cottoncandy_onTertiary\">#FFFFFF</color>\n    <color name=\"cottoncandy_tertiaryContainer\">#FFD9DF</color>\n    <color name=\"cottoncandy_onTertiaryContainer\">#3F0017</color>\n    <color name=\"cottoncandy_background\">#FFFBFF</color>\n    <color name=\"cottoncandy_onBackground\">#201A1B</color>\n    <color name=\"cottoncandy_surface\">#FFFBFF</color>\n    <color name=\"cottoncandy_onSurface\">#201A1B</color>\n    <color name=\"cottoncandy_surfaceVariant\">#F3DDE0</color>\n    <color name=\"cottoncandy_onSurfaceVariant\">#524345</color>\n    <color name=\"cottoncandy_outline\">#847375</color>\n    <color name=\"cottoncandy_inverseOnSurface\">#FAEEEF</color>\n    <color name=\"cottoncandy_inverseSurface\">#352F30</color>\n    <color name=\"cottoncandy_primaryInverse\">#FFB1C1</color>\n    <color name=\"cottoncandy_elevationOverlay\">@color/cottoncandy_primary</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/colors_mocha.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Mocha theme\n  ~ Original color scheme by farnsie\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #745b00\n  ~ Secondary #745b00\n  ~ Tertiary #47664a\n  ~ Neutral #998e8e\n-->\n<resources>\n    <color name=\"mocha_primary\">#745b00</color>\n    <color name=\"mocha_onPrimary\">#ffffff</color>\n    <color name=\"mocha_primaryContainer\">#ffe08d</color>\n    <color name=\"mocha_onPrimaryContainer\">#241a00</color>\n    <color name=\"mocha_secondary\">#745b00</color>\n    <color name=\"mocha_onSecondary\">#ffffff</color>\n    <color name=\"mocha_secondaryContainer\">#ffe08d</color>\n    <color name=\"mocha_onSecondaryContainer\">#241a00</color>\n    <color name=\"mocha_tertiary\">#47664a</color>\n    <color name=\"mocha_onTertiary\">#ffffff</color>\n    <color name=\"mocha_tertiaryContainer\">#c9ecc8</color>\n    <color name=\"mocha_onTertiaryContainer\">#04210b</color>\n    <color name=\"mocha_background\">#fffbff</color>\n    <color name=\"mocha_onBackground\">#1e1b16</color>\n    <color name=\"mocha_surface\">#fffbff</color>\n    <color name=\"mocha_onSurface\">#1e1b16</color>\n    <color name=\"mocha_surfaceVariant\">#ebe1cf</color>\n    <color name=\"mocha_onSurfaceVariant\">#4c4639</color>\n    <color name=\"mocha_outline\">#7e7667</color>\n    <color name=\"mocha_inverseOnSurface\">#FBEEEB</color>\n    <color name=\"mocha_inverseSurface\">#362F2D</color>\n    <color name=\"mocha_primaryInverse\">#FFB59D</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"screen_edge_margin\">16dp</dimen>\n\n    <dimen name=\"appwidget_background_radius\">16dp</dimen>\n    <dimen name=\"appwidget_inner_radius\">12dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"reader_pager\" type=\"id\"/>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/integers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <integer name=\"player_animation_duration\">200</integer>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!--========-->\n    <!--Toolbars-->\n    <!--========-->\n\n    <style name=\"Theme.Tachiyomi.ActionButton.Overflow\" parent=\"Widget.AppCompat.ActionButton.Overflow\">\n        <item name=\"android:tint\">?attr/colorOnSurface</item>\n    </style>\n\n\n    <!--===========-->\n    <!--AlertDialog-->\n    <!--===========-->\n    <style name=\"ThemeOverlay.Tachiyomi.MaterialAlertDialog\" parent=\"ThemeOverlay.Material3.MaterialAlertDialog\">\n        <item name=\"android:layout\">@layout/m3_alert_dialog</item>\n        <item name=\"android:background\">@drawable/material_popup_background</item>\n        <item name=\"dialogCornerRadius\">@dimen/m3_alert_dialog_corner_size</item>\n    </style>\n\n\n    <!--===============-->\n    <!--Text Appearance-->\n    <!--===============-->\n    <style name=\"TextAppearance.Widget.Button\" parent=\"TextAppearance.Material3.TitleSmall\" />\n\n    <style name=\"TextAppearance.Widget.Menu\" parent=\"TextAppearance.AppCompat.Menu\">\n        <item name=\"android:textColor\">?attr/colorOnBackground</item>\n    </style>\n\n    <style name=\"TextAppearance.Tachiyomi.Preference.Secondary\" parent=\"TextAppearance.Material3.BodySmall\" />\n\n    <style name=\"TextAppearance.Tachiyomi.SectionHeader\" parent=\"TextAppearance.Material3.LabelLarge\">\n        <item name=\"android:textColor\">?android:attr/textColorSecondary</item>\n    </style>\n\n\n    <!--=======================-->\n    <!--Widgets.MaterialDivider-->\n    <!--=======================-->\n    <style name=\"Widget.Tachiyomi.MaterialDivider\" parent=\"Widget.Material3.MaterialDivider\">\n        <item name=\"dividerColor\">@color/divider_default</item>\n    </style>\n\n\n    <!--==============-->\n    <!--Widgets.Switch-->\n    <!--==============-->\n    <style name=\"Widget.Tachiyomi.Switch\" parent=\"Widget.Material3.CompoundButton.Switch\">\n        <item name=\"materialThemeOverlay\">@style/ThemeOverlay.Tachiyomi.Switch</item>\n    </style>\n\n    <style name=\"ThemeOverlay.Tachiyomi.Switch\" parent=\"\">\n        <item name=\"elevationOverlayEnabled\">@bool/elevationOverlayEnabled</item>\n    </style>\n\n\n    <!--===========-->\n    <!--Preferences-->\n    <!--===========-->\n    <style name=\"PreferenceThemeOverlay.Tachiyomi\">\n        <item name=\"preferenceCategoryTitleTextAppearance\">?attr/textAppearanceBodyMedium</item>\n        <item name=\"switchPreferenceCompatStyle\">@style/PreferenceThemeOverlay.Tachiyomi.SwitchPreferenceCompat</item>\n    </style>\n\n    <style name=\"PreferenceThemeOverlay.Tachiyomi.SwitchPreferenceCompat\" parent=\"Preference.SwitchPreferenceCompat.Material\">\n        <item name=\"android:widgetLayout\">@layout/pref_widget_switch_material</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <!--============-->\n    <!-- Base Theme -->\n    <!--============-->\n\n    <!--== Theme Base ==-->\n    <style name=\"Base.Theme.Tachiyomi\" parent=\"Theme.Material3.DayNight.NoActionBar\">\n        <!-- Disallow \"Force dark theme\" -->\n        <item name=\"android:forceDarkAllowed\" tools:targetApi=\"Q\">false</item>\n\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/tachiyomi_primary</item>\n        <item name=\"colorOnPrimary\">@color/tachiyomi_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/tachiyomi_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/tachiyomi_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/tachiyomi_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/tachiyomi_secondary</item>\n        <item name=\"colorOnSecondary\">@color/tachiyomi_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/tachiyomi_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/tachiyomi_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/tachiyomi_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/tachiyomi_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/tachiyomi_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/tachiyomi_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/tachiyomi_background</item>\n        <item name=\"colorOnBackground\">@color/tachiyomi_onBackground</item>\n        <item name=\"colorSurface\">@color/tachiyomi_surface</item>\n        <item name=\"colorOnSurface\">@color/tachiyomi_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/tachiyomi_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/tachiyomi_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/tachiyomi_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/tachiyomi_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/tachiyomi_inverseOnSurface</item>\n        <item name=\"colorError\">@color/tachiyomi_error</item>\n        <item name=\"colorOnError\">@color/tachiyomi_onError</item>\n        <item name=\"colorErrorContainer\">@color/tachiyomi_errorContainer</item>\n        <item name=\"colorOnErrorContainer\">@color/tachiyomi_onErrorContainer</item>\n        <item name=\"colorOutline\">@color/tachiyomi_outline</item>\n        <item name=\"colorOutlineVariant\">@color/tachiyomi_outlineVariant</item>\n        <item name=\"colorSurfaceContainer\">@color/tachiyomi_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/tachiyomi_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/tachiyomi_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/tachiyomi_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/tachiyomi_surfaceContainerLowest</item>\n\n        <item name=\"android:divider\">@color/divider_default</item>\n        <item name=\"android:listDivider\">@drawable/line_divider</item>\n        <item name=\"materialDividerStyle\">@style/Widget.Tachiyomi.MaterialDivider</item>\n\n        <!-- Ripples -->\n        <item name=\"colorControlHighlight\">?attr/colorSurfaceVariant</item>\n\n        <!-- Handles RTL Text -->\n        <item name=\"android:textAlignment\">gravity</item>\n        <item name=\"android:textDirection\">locale</item>\n\n        <!-- Themes -->\n        <item name=\"android:windowLightStatusBar\">@bool/lightStatusBar</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:navigationBarColor\">@color/amoled_surface</item>\n        <item name=\"android:navigationBarDividerColor\" tools:targetApi=\"o_mr1\">@null</item>\n        <item name=\"android:enforceNavigationBarContrast\" tools:targetApi=\"Q\">false</item>\n        <item name=\"android:enforceStatusBarContrast\" tools:targetApi=\"Q\">false</item>\n        <item name=\"android:itemTextAppearance\">@style/TextAppearance.Widget.Menu</item>\n        <item name=\"materialAlertDialogTheme\">@style/ThemeOverlay.Tachiyomi.MaterialAlertDialog</item>\n        <item name=\"alertDialogTheme\">@style/ThemeOverlay.Tachiyomi.MaterialAlertDialog</item>\n        <item name=\"textAppearanceButton\">@style/TextAppearance.Widget.Button</item>\n        <item name=\"android:buttonStyle\">?attr/borderlessButtonStyle</item>\n        <item name=\"android:backgroundDimAmount\">0.32</item>\n        <item name=\"windowActionModeOverlay\">true</item>\n        <item name=\"actionOverflowButtonStyle\">@style/Theme.Tachiyomi.ActionButton.Overflow</item>\n        <item name=\"actionModeCloseDrawable\">@drawable/ic_close_24dp</item>\n        <item name=\"preferenceTheme\">@style/PreferenceThemeOverlay.Tachiyomi</item>\n        <item name=\"textInputStyle\">@style/Widget.Material3.TextInputLayout.OutlinedBox</item>\n        <item name=\"appBarLayoutStyle\">@style/Widget.Material3.AppBarLayout</item>\n        <item name=\"toolbarStyle\">@style/Widget.Material3.Toolbar.Surface</item>\n        <item name=\"switchStyle\">@style/Widget.Tachiyomi.Switch</item>\n        <item name=\"materialSwitchStyle\">@style/Widget.Material3.CompoundButton.MaterialSwitch</item>\n        <item name=\"switchPreferenceCompatStyle\">@style/Widget.Tachiyomi.Switch</item>\n        <item name=\"materialCardViewStyle\">@style/Widget.Material3.CardView.Elevated</item>\n\n        <!-- Preference text appearance -->\n        <item name=\"android:textAppearanceListItem\">?attr/textAppearanceBodyLarge</item>\n        <item name=\"android:textAppearanceListItemSecondary\">@style/TextAppearance.Tachiyomi.Preference.Secondary</item>\n    </style>\n\n    <!--== Default Theme ==-->\n    <style name=\"Theme.Tachiyomi\" parent=\"Base.Theme.Tachiyomi\" />\n\n    <!-- Monet theme only support S+ -->\n    <style name=\"Theme.Tachiyomi.Monet\" />\n\n    <!--== Cotton Candy Theme ==-->\n    <style name=\"Theme.Tachiyomi.CottonCandy\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/cottoncandy_primary</item>\n        <item name=\"colorOnPrimary\">@color/cottoncandy_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/cottoncandy_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/cottoncandy_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/cottoncandy_secondary</item>\n        <item name=\"colorOnSecondary\">@color/cottoncandy_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/cottoncandy_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/cottoncandy_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/cottoncandy_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/cottoncandy_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/cottoncandy_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/cottoncandy_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/cottoncandy_background</item>\n        <item name=\"colorOnBackground\">@color/cottoncandy_onBackground</item>\n        <item name=\"colorSurface\">@color/cottoncandy_surface</item>\n        <item name=\"colorOnSurface\">@color/cottoncandy_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/cottoncandy_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/cottoncandy_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/cottoncandy_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/cottoncandy_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/cottoncandy_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/cottoncandy_primaryInverse</item>\n    </style>\n\n    <!--== Green Apple Theme ==-->\n    <style name=\"Theme.Tachiyomi.GreenApple\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/greenapple_primary</item>\n        <item name=\"colorOnPrimary\">@color/greenapple_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/greenapple_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/greenapple_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/greenapple_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/greenapple_secondary</item>\n        <item name=\"colorOnSecondary\">@color/greenapple_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/greenapple_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/greenapple_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/greenapple_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/greenapple_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/greenapple_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/greenapple_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/greenapple_background</item>\n        <item name=\"colorOnBackground\">@color/greenapple_onBackground</item>\n        <item name=\"colorSurface\">@color/greenapple_surface</item>\n        <item name=\"colorOnSurface\">@color/greenapple_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/greenapple_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/greenapple_onSurfaceVariant</item>\n        <item name=\"colorSurfaceInverse\">@color/greenapple_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/greenapple_inverseOnSurface</item>\n        <item name=\"colorError\">@color/greenapple_error</item>\n        <item name=\"colorOnError\">@color/greenapple_onError</item>\n        <item name=\"colorErrorContainer\">@color/greenapple_errorContainer</item>\n        <item name=\"colorOnErrorContainer\">@color/greenapple_onErrorContainer</item>\n        <item name=\"colorOutline\">@color/greenapple_outline</item>\n        <item name=\"colorOutlineVariant\">@color/greenapple_outlineVariant</item>\n        <item name=\"scrimBackground\">@color/greenapple_scrim</item>\n        <item name=\"colorSurfaceBright\">@color/greenapple_surfaceBright</item>\n        <item name=\"colorSurfaceDim\">@color/greenapple_surfaceDim</item>\n        <item name=\"colorSurfaceContainer\">@color/greenapple_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/greenapple_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/greenapple_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/greenapple_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/greenapple_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Lavender Theme ==-->\n    <style name=\"Theme.Tachiyomi.Lavender\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/lavender_primary</item>\n        <item name=\"colorOnPrimary\">@color/lavender_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/lavender_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/lavender_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/lavender_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/lavender_secondary</item>\n        <item name=\"colorOnSecondary\">@color/lavender_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/lavender_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/lavender_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/lavender_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/lavender_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/lavender_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/lavender_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/lavender_background</item>\n        <item name=\"colorOnBackground\">@color/lavender_onBackground</item>\n        <item name=\"colorSurface\">@color/lavender_surface</item>\n        <item name=\"colorOnSurface\">@color/lavender_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/lavender_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/lavender_onSurfaceVariant</item>\n        <item name=\"colorSurfaceInverse\">@color/lavender_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/lavender_inverseOnSurface</item>\n        <item name=\"colorError\">@color/lavender_error</item>\n        <item name=\"colorOnError\">@color/lavender_onError</item>\n        <item name=\"colorErrorContainer\">@color/lavender_errorContainer</item>\n        <item name=\"colorOnErrorContainer\">@color/lavender_onErrorContainer</item>\n        <item name=\"colorOutline\">@color/lavender_outline</item>\n        <item name=\"colorOutlineVariant\">@color/lavender_outlineVariant</item>\n        <item name=\"scrimBackground\">@color/lavender_scrim</item>\n        <item name=\"colorSurfaceBright\">@color/lavender_surfaceBright</item>\n        <item name=\"colorSurfaceDim\">@color/lavender_surfaceDim</item>\n        <item name=\"colorSurfaceContainer\">@color/lavender_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/lavender_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/lavender_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/lavender_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/lavender_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Midnight Dusk Theme ==-->\n    <style name=\"Theme.Tachiyomi.MidnightDusk\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/midnightdusk_primary</item>\n        <item name=\"colorOnPrimary\">@color/midnightdusk_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/midnightdusk_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/midnightdusk_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/midnightdusk_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/midnightdusk_secondary</item>\n        <item name=\"colorOnSecondary\">@color/midnightdusk_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/midnightdusk_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/midnightdusk_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/midnightdusk_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/midnightdusk_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/midnightdusk_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/midnightdusk_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/midnightdusk_background</item>\n        <item name=\"colorOnBackground\">@color/midnightdusk_onBackground</item>\n        <item name=\"colorSurface\">@color/midnightdusk_surface</item>\n        <item name=\"colorOnSurface\">@color/midnightdusk_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/midnightdusk_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/midnightdusk_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/midnightdusk_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/midnightdusk_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/midnightdusk_inverseOnSurface</item>\n        <item name=\"colorOutline\">@color/midnightdusk_outline</item>\n        <item name=\"colorSurfaceContainer\">@color/midnightdusk_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/midnightdusk_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/midnightdusk_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/midnightdusk_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/midnightdusk_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Mocha Theme ==-->\n    <style name=\"Theme.Tachiyomi.Mocha\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/mocha_primary</item>\n        <item name=\"colorOnPrimary\">@color/mocha_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/mocha_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/mocha_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/mocha_secondary</item>\n        <item name=\"colorOnSecondary\">@color/mocha_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/mocha_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/mocha_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/mocha_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/mocha_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/mocha_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/mocha_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/mocha_background</item>\n        <item name=\"colorOnBackground\">@color/mocha_onBackground</item>\n        <item name=\"colorSurface\">@color/mocha_surface</item>\n        <item name=\"colorOnSurface\">@color/mocha_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/mocha_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/mocha_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/mocha_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/mocha_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/mocha_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/mocha_primaryInverse</item>\n    </style>\n\n    <!--== Strawberry Daiquiri Theme ==-->\n    <style name=\"Theme.Tachiyomi.StrawberryDaiquiri\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/strawberry_primary</item>\n        <item name=\"colorOnPrimary\">@color/strawberry_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/strawberry_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/strawberry_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/strawberry_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/strawberry_secondary</item>\n        <item name=\"colorOnSecondary\">@color/strawberry_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/strawberry_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/strawberry_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/strawberry_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/strawberry_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/strawberry_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/strawberry_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/strawberry_background</item>\n        <item name=\"colorOnBackground\">@color/strawberry_onBackground</item>\n        <item name=\"colorSurface\">@color/strawberry_surface</item>\n        <item name=\"colorOnSurface\">@color/strawberry_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/strawberry_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/strawberry_onSurfaceVariant</item>\n        <item name=\"colorSurfaceInverse\">@color/strawberry_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/strawberry_inverseOnSurface</item>\n        <item name=\"colorError\">@color/strawberry_error</item>\n        <item name=\"colorOnError\">@color/strawberry_onError</item>\n        <item name=\"colorErrorContainer\">@color/strawberry_errorContainer</item>\n        <item name=\"colorOnErrorContainer\">@color/strawberry_onErrorContainer</item>\n        <item name=\"colorOutline\">@color/strawberry_outline</item>\n        <item name=\"colorOutlineVariant\">@color/strawberry_outlineVariant</item>\n        <item name=\"scrimBackground\">@color/strawberry_scrim</item>\n        <item name=\"colorSurfaceBright\">@color/strawberry_surfaceBright</item>\n        <item name=\"colorSurfaceDim\">@color/strawberry_surfaceDim</item>\n        <item name=\"colorSurfaceContainer\">@color/strawberry_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/strawberry_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/strawberry_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/strawberry_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/strawberry_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Tako Theme ==-->\n    <style name=\"Theme.Tachiyomi.Tako\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/tako_primary</item>\n        <item name=\"colorOnPrimary\">@color/tako_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/tako_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/tako_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/tako_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/tako_secondary</item>\n        <item name=\"colorOnSecondary\">@color/tako_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/tako_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/tako_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/tako_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/tako_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/tako_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/tako_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/tako_background</item>\n        <item name=\"colorOnBackground\">@color/tako_onBackground</item>\n        <item name=\"colorSurface\">@color/tako_surface</item>\n        <item name=\"colorOnSurface\">@color/tako_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/tako_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/tako_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/tako_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/tako_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/tako_inverseOnSurface</item>\n        <item name=\"colorOutline\">@color/tako_outline</item>\n        <item name=\"colorSurfaceContainer\">@color/tako_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/tako_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/tako_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/tako_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/tako_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Teal & Turquoise Theme ==-->\n    <style name=\"Theme.Tachiyomi.TealTurquoise\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/tealturquoise_primary</item>\n        <item name=\"colorOnPrimary\">@color/tealturquoise_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/tealturquoise_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/tealturquoise_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/tealturquoise_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/tealturquoise_secondary</item>\n        <item name=\"colorOnSecondary\">@color/tealturquoise_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/tealturquoise_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/tealturquoise_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/tealturquoise_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/tealturquoise_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/tealturquoise_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/tealturquoise_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/tealturquoise_background</item>\n        <item name=\"colorOnBackground\">@color/tealturquoise_onBackground</item>\n        <item name=\"colorSurface\">@color/tealturquoise_surface</item>\n        <item name=\"colorOnSurface\">@color/tealturquoise_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/tealturquoise_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/tealturquoise_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/tealturquoise_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/tealturquoise_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/tealturquoise_inverseOnSurface</item>\n        <item name=\"colorOutline\">@color/tealturquoise_outline</item>\n        <item name=\"colorSurfaceContainer\">@color/tealturquoise_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/tealturquoise_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/tealturquoise_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/tealturquoise_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/tealturquoise_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Yin & Yang Theme ==-->\n    <style name=\"Theme.Tachiyomi.YinYang\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/yinyang_primary</item>\n        <item name=\"colorOnPrimary\">@color/yinyang_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/yinyang_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/yinyang_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/yinyang_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/yinyang_secondary</item>\n        <item name=\"colorOnSecondary\">@color/yinyang_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/yinyang_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/yinyang_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/yinyang_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/yinyang_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/yinyang_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/yinyang_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/yinyang_background</item>\n        <item name=\"colorOnBackground\">@color/yinyang_onBackground</item>\n        <item name=\"colorSurface\">@color/yinyang_surface</item>\n        <item name=\"colorOnSurface\">@color/yinyang_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/yinyang_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/yinyang_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/yinyang_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/yinyang_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/yinyang_inverseOnSurface</item>\n        <item name=\"colorOutline\">@color/yinyang_outline</item>\n        <item name=\"colorSurfaceContainer\">@color/yinyang_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/yinyang_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/yinyang_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/yinyang_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/yinyang_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Yotsuba Theme ==-->\n    <style name=\"Theme.Tachiyomi.Yotsuba\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/yotsuba_primary</item>\n        <item name=\"colorOnPrimary\">@color/yotsuba_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/yotsuba_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/yotsuba_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/yotsuba_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/yotsuba_secondary</item>\n        <item name=\"colorOnSecondary\">@color/yotsuba_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/yotsuba_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/yotsuba_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/yotsuba_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/yotsuba_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/yotsuba_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/yotsuba_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/yotsuba_background</item>\n        <item name=\"colorOnBackground\">@color/yotsuba_onBackground</item>\n        <item name=\"colorSurface\">@color/yotsuba_surface</item>\n        <item name=\"colorOnSurface\">@color/yotsuba_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/yotsuba_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/yotsuba_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/yotsuba_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/yotsuba_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/yotsuba_inverseOnSurface</item>\n        <item name=\"colorOutline\">@color/yotsuba_outline</item>\n        <item name=\"colorSurfaceContainer\">@color/yotsuba_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/yotsuba_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/yotsuba_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/yotsuba_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/yotsuba_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Cloudflare Theme ==-->\n    <style name=\"Theme.Tachiyomi.Cloudflare\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/cloudflare_primary</item>\n        <item name=\"colorOnPrimary\">@color/cloudflare_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/cloudflare_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/cloudflare_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/cloudflare_secondary</item>\n        <item name=\"colorOnSecondary\">@color/cloudflare_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/cloudflare_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/cloudflare_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/cloudflare_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/cloudflare_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/cloudflare_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/cloudflare_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/cloudflare_background</item>\n        <item name=\"colorOnBackground\">@color/cloudflare_onBackground</item>\n        <item name=\"colorSurface\">@color/cloudflare_surface</item>\n        <item name=\"colorOnSurface\">@color/cloudflare_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/cloudflare_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/cloudflare_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/cloudflare_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/cloudflare_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/cloudflare_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/cloudflare_primaryInverse</item>\n    </style>\n\n    <!--== Sapphire Theme ==-->\n    <style name=\"Theme.Tachiyomi.Sapphire\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/sapphire_primary</item>\n        <item name=\"colorOnPrimary\">@color/sapphire_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/sapphire_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/sapphire_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/sapphire_secondary</item>\n        <item name=\"colorOnSecondary\">@color/sapphire_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/sapphire_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/sapphire_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/sapphire_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/sapphire_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/sapphire_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/sapphire_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/sapphire_background</item>\n        <item name=\"colorOnBackground\">@color/sapphire_onBackground</item>\n        <item name=\"colorSurface\">@color/sapphire_surface</item>\n        <item name=\"colorOnSurface\">@color/sapphire_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/sapphire_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/sapphire_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/sapphire_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/sapphire_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/sapphire_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/sapphire_primaryInverse</item>\n    </style>\n\n    <!--== Doom Theme ==-->\n    <style name=\"Theme.Tachiyomi.Doom\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/doom_primary</item>\n        <item name=\"colorOnPrimary\">@color/doom_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/doom_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/doom_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/doom_secondary</item>\n        <item name=\"colorOnSecondary\">@color/doom_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/doom_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/doom_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/doom_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/doom_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/doom_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/doom_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/doom_background</item>\n        <item name=\"colorOnBackground\">@color/doom_onBackground</item>\n        <item name=\"colorSurface\">@color/doom_surface</item>\n        <item name=\"colorOnSurface\">@color/doom_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/doom_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/doom_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/doom_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/doom_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/doom_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/doom_primaryInverse</item>\n    </style>\n\n    <!--== Matrix Theme ==-->\n    <style name=\"Theme.Tachiyomi.Matrix\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/matrix_primary</item>\n        <item name=\"colorOnPrimary\">@color/matrix_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/matrix_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/matrix_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/matrix_secondary</item>\n        <item name=\"colorOnSecondary\">@color/matrix_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/matrix_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/matrix_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/matrix_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/matrix_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/matrix_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/matrix_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/matrix_background</item>\n        <item name=\"colorOnBackground\">@color/matrix_onBackground</item>\n        <item name=\"colorSurface\">@color/matrix_surface</item>\n        <item name=\"colorOnSurface\">@color/matrix_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/matrix_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/matrix_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/matrix_outline</item>\n        <item name=\"colorOnSurfaceInverse\">@color/matrix_inverseOnSurface</item>\n        <item name=\"colorSurfaceInverse\">@color/matrix_inverseSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/matrix_primaryInverse</item>\n    </style>\n\n    <!--== Tidal Wave Theme ==-->\n    <style name=\"Theme.Tachiyomi.TidalWave\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/tidalwave_primary</item>\n        <item name=\"colorOnPrimary\">@color/tidalwave_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/tidalwave_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/tidalwave_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/tidalwave_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/tidalwave_secondary</item>\n        <item name=\"colorOnSecondary\">@color/tidalwave_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/tidalwave_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/tidalwave_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/tidalwave_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/tidalwave_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/tidalwave_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/tidalwave_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/tidalwave_background</item>\n        <item name=\"colorOnBackground\">@color/tidalwave_onBackground</item>\n        <item name=\"colorSurface\">@color/tidalwave_surface</item>\n        <item name=\"colorOnSurface\">@color/tidalwave_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/tidalwave_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/tidalwave_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/tidalwave_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/tidalwave_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/tidalwave_inverseOnSurface</item>\n        <item name=\"colorOutline\">@color/tidalwave_outline</item>\n        <item name=\"colorSurfaceContainer\">@color/tidalwave_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/tidalwave_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/tidalwave_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/tidalwave_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/tidalwave_surfaceContainerLowest</item>\n    </style>\n\n    <!--== Nord Theme ==-->\n    <style name=\"Theme.Tachiyomi.Nord\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/nord_primary</item>\n        <item name=\"colorOnPrimary\">@color/nord_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/nord_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/nord_onPrimaryContainer</item>\n        <item name=\"colorPrimaryInverse\">@color/nord_inversePrimary</item>\n        <item name=\"colorSecondary\">@color/nord_secondary</item>\n        <item name=\"colorOnSecondary\">@color/nord_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/nord_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/nord_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/nord_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/nord_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/nord_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/nord_onTertiaryContainer</item>\n        <item name=\"android:colorBackground\">@color/nord_background</item>\n        <item name=\"colorOnBackground\">@color/nord_onBackground</item>\n        <item name=\"colorSurface\">@color/nord_surface</item>\n        <item name=\"colorOnSurface\">@color/nord_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/nord_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/nord_onSurfaceVariant</item>\n        <item name=\"elevationOverlayColor\">@color/nord_surfaceTint</item>\n        <item name=\"colorSurfaceInverse\">@color/nord_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/nord_inverseOnSurface</item>\n        <item name=\"colorOnError\">@color/nord_onError</item>\n        <item name=\"colorErrorContainer\">@color/nord_errorContainer</item>\n        <item name=\"colorOnErrorContainer\">@color/nord_onErrorContainer</item>\n        <item name=\"colorOutline\">@color/nord_outline</item>\n        <item name=\"colorOutlineVariant\">@color/nord_outlineVariant</item>\n        <item name=\"colorSurfaceContainer\">@color/nord_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/nord_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/nord_surfaceContainerHighest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/nord_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/nord_surfaceContainerLowest</item>\n    </style>\n\n\n    <!--== Monochrome Theme ==-->\n    <style name=\"Theme.Tachiyomi.Monochrome\">\n        <!-- Theme Colors -->\n        <item name=\"colorPrimary\">@color/monochrome_primary</item>\n        <item name=\"colorOnPrimary\">@color/monochrome_onPrimary</item>\n        <item name=\"colorPrimaryContainer\">@color/monochrome_primaryContainer</item>\n        <item name=\"colorOnPrimaryContainer\">@color/monochrome_onPrimaryContainer</item>\n        <item name=\"colorSecondary\">@color/monochrome_secondary</item>\n        <item name=\"colorOnSecondary\">@color/monochrome_onSecondary</item>\n        <item name=\"colorSecondaryContainer\">@color/monochrome_secondaryContainer</item>\n        <item name=\"colorOnSecondaryContainer\">@color/monochrome_onSecondaryContainer</item>\n        <item name=\"colorTertiary\">@color/monochrome_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/monochrome_onTertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/monochrome_tertiaryContainer</item>\n        <item name=\"colorOnTertiaryContainer\">@color/monochrome_onTertiaryContainer</item>\n        <item name=\"colorError\">@color/monochrome_error</item>\n        <item name=\"colorOnError\">@color/monochrome_onError</item>\n        <item name=\"colorErrorContainer\">@color/monochrome_errorContainer</item>\n        <item name=\"colorOnErrorContainer\">@color/monochrome_onErrorContainer</item>\n        <item name=\"android:colorBackground\">@color/monochrome_background</item>\n        <item name=\"colorOnBackground\">@color/monochrome_onBackground</item>\n        <item name=\"colorSurface\">@color/monochrome_surface</item>\n        <item name=\"colorOnSurface\">@color/monochrome_onSurface</item>\n        <item name=\"colorSurfaceVariant\">@color/monochrome_surfaceVariant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/monochrome_onSurfaceVariant</item>\n        <item name=\"colorOutline\">@color/monochrome_outline</item>\n        <item name=\"colorOutlineVariant\">@color/monochrome_outlineVariant</item>\n        <item name=\"colorSurfaceInverse\">@color/monochrome_inverseSurface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/monochrome_inverseOnSurface</item>\n        <item name=\"colorPrimaryInverse\">@color/monochrome_inversePrimary</item>\n        <item name=\"colorSurfaceDim\">@color/monochrome_surfaceDim</item>\n        <item name=\"colorSurfaceBright\">@color/monochrome_surfaceBright</item>\n        <item name=\"colorSurfaceContainerLowest\">@color/monochrome_surfaceContainerLowest</item>\n        <item name=\"colorSurfaceContainerLow\">@color/monochrome_surfaceContainerLow</item>\n        <item name=\"colorSurfaceContainer\">@color/monochrome_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/monochrome_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/monochrome_surfaceContainerHighest</item>\n    </style>\n\n    <!--== AMOLED Mode Overlay ==-->\n    <style name=\"ThemeOverlay.Tachiyomi.Amoled\" parent=\"\" />\n\n    <!--===============-->\n    <!-- Launch Screen -->\n    <!--===============-->\n\n    <!--== Splash Theme ==-->\n    <style name=\"Theme.Tachiyomi.SplashScreen\" parent=\"Theme.SplashScreen\">\n        <item name=\"windowSplashScreenAnimatedIcon\">@drawable/ic_tachi_splash</item>\n        <item name=\"windowSplashScreenBackground\">@color/splash</item>\n        <item name=\"postSplashScreenTheme\">@style/Theme.Tachiyomi</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">false</item>\n        <item name=\"android:windowLightNavigationBar\" tools:targetApi=\"o_mr1\">false</item>\n    </style>\n\n\n    <style name=\"Theme.AppCompat.Light.NoActionBar.FullScreen\" parent=\"@style/Theme.AppCompat.Light.NoActionBar\">\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowActionBar\">false</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowContentOverlay\">@null</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night/bools.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <bool name=\"lightStatusBar\">false</bool>\n    <bool name=\"lightNavigationBar\">false</bool>\n    <bool name=\"elevationOverlayEnabled\">true</bool>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night/colors_cottoncandy.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n    <color name=\"cottoncandy_primary\">#FFB1C1</color>\n    <color name=\"cottoncandy_onPrimary\">#5F112B</color>\n    <color name=\"cottoncandy_primaryContainer\">#7C2941</color>\n    <color name=\"cottoncandy_onPrimaryContainer\">#FFD9DF</color>\n    <color name=\"cottoncandy_secondary\">#64D3FF</color>\n    <color name=\"cottoncandy_onSecondary\">#003546</color>\n    <color name=\"cottoncandy_secondaryContainer\">#004D63</color>\n    <color name=\"cottoncandy_onSecondaryContainer\">#BCE9FF</color>\n    <color name=\"cottoncandy_tertiary\">#FFB1C1</color>\n    <color name=\"cottoncandy_tertiaryContainer\">#7C2941</color>\n    <color name=\"cottoncandy_onTertiaryContainer\">#FFD9DF</color>\n    <color name=\"cottoncandy_background\">#201A1B</color>\n    <color name=\"cottoncandy_onBackground\">#ECE0E0</color>\n    <color name=\"cottoncandy_surface\">#201A1B</color>\n    <color name=\"cottoncandy_onSurface\">#ECE0E0</color>\n    <color name=\"cottoncandy_surfaceVariant\">#524345</color>\n    <color name=\"cottoncandy_onSurfaceVariant\">#D6C2C4</color>\n    <color name=\"cottoncandy_outline\">#9F8C8F</color>\n    <color name=\"cottoncandy_inverseOnSurface\">#201A1B</color>\n    <color name=\"cottoncandy_inverseSurface\">#ECE0E0</color>\n    <color name=\"cottoncandy_primaryInverse\">#9A4058</color>\n    <color name=\"cottoncandy_elevationOverlay\">@color/cottoncandy_primary</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night/colors_mocha.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Mocha theme\n  ~ Original color scheme by farnsie\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #ebc248\n  ~ Secondary #ebc248\n  ~ Tertiary #adcfad\n  ~ Neutral #998e8e\n-->\n<resources>\n    <color name=\"mocha_primary\">#ebc248</color>\n    <color name=\"mocha_onPrimary\">#3d2f00</color>\n    <color name=\"mocha_primaryContainer\">#584400</color>\n    <color name=\"mocha_onPrimaryContainer\">#ffe08d</color>\n    <color name=\"mocha_secondary\">#ebc248</color>\n    <color name=\"mocha_onSecondary\">#3d2f00</color>\n    <color name=\"mocha_secondaryContainer\">#584400</color>\n    <color name=\"mocha_onSecondaryContainer\">#ffe08d</color>\n    <color name=\"mocha_tertiary\">#adcfad</color>\n    <color name=\"mocha_onTertiary\">#19361f</color>\n    <color name=\"mocha_tertiaryContainer\">#304d34</color>\n    <color name=\"mocha_onTertiaryContainer\">#c9ecc8</color>\n    <color name=\"mocha_background\">#1e1b16</color>\n    <color name=\"mocha_onBackground\">#e8e1d9</color>\n    <color name=\"mocha_surface\">#1e1b16</color>\n    <color name=\"mocha_onSurface\">#e8e1d9</color>\n    <color name=\"mocha_surfaceVariant\">#4c4639</color>\n    <color name=\"mocha_onSurfaceVariant\">#cfc5b4</color>\n    <color name=\"mocha_outline\">#989080</color>\n    <color name=\"mocha_inverseOnSurface\">#211A18</color>\n    <color name=\"mocha_inverseSurface\">#EDE0DD</color>\n    <color name=\"mocha_primaryInverse\">#AE3200</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!--== AMOLED Mode Overlay ==-->\n    <style name=\"ThemeOverlay.Tachiyomi.Amoled\" parent=\"\">\n        <!-- Theme Colors -->\n        <item name=\"android:colorBackground\">@color/amoled_background</item>\n        <item name=\"colorOnBackground\">@color/amoled_onBackground</item>\n        <item name=\"colorSurface\">@color/amoled_surface</item>\n        <item name=\"colorOnSurface\">@color/amoled_onSurface</item>\n        <item name=\"colorSurfaceContainer\">@color/amoled_surfaceContainer</item>\n        <item name=\"colorSurfaceContainerHigh\">@color/amoled_surfaceContainerHigh</item>\n        <item name=\"colorSurfaceContainerHighest\">@color/amoled_surfaceContainerHighest</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-night-v31/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- From ThemeOverlay.Material3.DynamicColors.Dark -->\n    <style name=\"Theme.Tachiyomi.Monet\">\n        <!-- Color palettes -->\n        <item name=\"colorPrimary\">@color/m3_sys_color_dynamic_dark_primary</item>\n        <item name=\"colorOnPrimary\">@color/m3_sys_color_dynamic_dark_on_primary</item>\n        <item name=\"colorPrimaryInverse\">@color/m3_sys_color_dynamic_dark_inverse_primary</item>\n        <item name=\"colorPrimaryContainer\">@color/m3_sys_color_dynamic_dark_primary_container</item>\n        <item name=\"colorOnPrimaryContainer\">@color/m3_sys_color_dynamic_dark_on_primary_container</item>\n        <item name=\"colorSecondary\">@color/m3_sys_color_dynamic_dark_secondary</item>\n        <item name=\"colorOnSecondary\">@color/m3_sys_color_dynamic_dark_on_secondary</item>\n        <item name=\"colorSecondaryContainer\">@color/m3_sys_color_dynamic_dark_secondary_container</item>\n        <item name=\"colorOnSecondaryContainer\">@color/m3_sys_color_dynamic_dark_on_secondary_container</item>\n        <item name=\"colorTertiary\">@color/m3_sys_color_dynamic_dark_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/m3_sys_color_dynamic_dark_on_tertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/m3_sys_color_dynamic_dark_tertiary_container</item>\n        <item name=\"colorOnTertiaryContainer\">@color/m3_sys_color_dynamic_dark_on_tertiary_container</item>\n        <item name=\"android:colorBackground\">@color/m3_sys_color_dynamic_dark_background</item>\n        <item name=\"colorOnBackground\">@color/m3_sys_color_dynamic_dark_on_background</item>\n        <item name=\"colorSurface\">@color/m3_sys_color_dynamic_dark_surface</item>\n        <item name=\"colorOnSurface\">@color/m3_sys_color_dynamic_dark_on_surface</item>\n        <item name=\"colorSurfaceVariant\">@color/m3_sys_color_dynamic_dark_surface_variant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/m3_sys_color_dynamic_dark_on_surface_variant</item>\n        <item name=\"colorSurfaceInverse\">@color/m3_sys_color_dynamic_dark_inverse_surface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/m3_sys_color_dynamic_dark_inverse_on_surface</item>\n        <item name=\"colorOutline\">@color/m3_sys_color_dynamic_dark_outline</item>\n\n        <!-- Default Framework Text Colors. -->\n        <item name=\"android:textColorPrimary\">@color/m3_dynamic_dark_default_color_primary_text</item>\n        <item name=\"android:textColorPrimaryInverse\">@color/m3_dynamic_default_color_primary_text</item>\n        <item name=\"android:textColorSecondary\">@color/m3_dynamic_dark_default_color_secondary_text</item>\n        <item name=\"android:textColorSecondaryInverse\">@color/m3_dynamic_default_color_secondary_text</item>\n        <item name=\"android:textColorTertiary\">@color/m3_dynamic_dark_default_color_secondary_text</item>\n        <item name=\"android:textColorTertiaryInverse\">@color/m3_dynamic_default_color_secondary_text</item>\n        <item name=\"android:textColorPrimaryDisableOnly\">@color/m3_dynamic_dark_primary_text_disable_only</item>\n        <item name=\"android:textColorPrimaryInverseDisableOnly\">@color/m3_dynamic_primary_text_disable_only</item>\n        <item name=\"android:textColorHint\">@color/m3_dynamic_dark_hint_foreground</item>\n        <item name=\"android:textColorHintInverse\">@color/m3_dynamic_hint_foreground</item>\n        <item name=\"android:textColorHighlight\">@color/m3_dynamic_dark_highlighted_text</item>\n        <item name=\"android:textColorHighlightInverse\">@color/m3_dynamic_highlighted_text</item>\n        <item name=\"android:textColorAlertDialogListItem\">@color/m3_dynamic_dark_default_color_primary_text</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sw720dp/dimens.xml",
    "content": "<resources>\n    <dimen name=\"screen_edge_margin\">24dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v27/bools.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <bool name=\"lightStatusBar\">true</bool>\n    <bool name=\"lightNavigationBar\">true</bool>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"Base.V27.Tachiyomi\" parent=\"Base.Theme.Tachiyomi\">\n        <item name=\"android:navigationBarColor\">?attr/colorSurface</item>\n        <item name=\"android:windowLightNavigationBar\">@bool/lightNavigationBar</item>\n    </style>\n\n    <style name=\"Theme.Tachiyomi\" parent=\"Base.V27.Tachiyomi\" />\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-v31/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- From ThemeOverlay.Material3.DynamicColors.Light -->\n    <style name=\"Theme.Tachiyomi.Monet\">\n        <!-- Color palettes -->\n        <item name=\"colorPrimary\">@color/m3_sys_color_dynamic_light_primary</item>\n        <item name=\"colorOnPrimary\">@color/m3_sys_color_dynamic_light_on_primary</item>\n        <item name=\"colorPrimaryInverse\">@color/m3_sys_color_dynamic_light_inverse_primary</item>\n        <item name=\"colorPrimaryContainer\">@color/m3_sys_color_dynamic_light_primary_container</item>\n        <item name=\"colorOnPrimaryContainer\">@color/m3_sys_color_dynamic_light_on_primary_container</item>\n        <item name=\"colorSecondary\">@color/m3_sys_color_dynamic_light_secondary</item>\n        <item name=\"colorOnSecondary\">@color/m3_sys_color_dynamic_light_on_secondary</item>\n        <item name=\"colorSecondaryContainer\">@color/m3_sys_color_dynamic_light_secondary_container</item>\n        <item name=\"colorOnSecondaryContainer\">@color/m3_sys_color_dynamic_light_on_secondary_container</item>\n        <item name=\"colorTertiary\">@color/m3_sys_color_dynamic_light_tertiary</item>\n        <item name=\"colorOnTertiary\">@color/m3_sys_color_dynamic_light_on_tertiary</item>\n        <item name=\"colorTertiaryContainer\">@color/m3_sys_color_dynamic_light_tertiary_container</item>\n        <item name=\"colorOnTertiaryContainer\">@color/m3_sys_color_dynamic_light_on_tertiary_container</item>\n        <item name=\"android:colorBackground\">@color/m3_sys_color_dynamic_light_background</item>\n        <item name=\"colorOnBackground\">@color/m3_sys_color_dynamic_light_on_background</item>\n        <item name=\"colorSurface\">@color/m3_sys_color_dynamic_light_surface</item>\n        <item name=\"colorOnSurface\">@color/m3_sys_color_dynamic_light_on_surface</item>\n        <item name=\"colorSurfaceVariant\">@color/m3_sys_color_dynamic_light_surface_variant</item>\n        <item name=\"colorOnSurfaceVariant\">@color/m3_sys_color_dynamic_light_on_surface_variant</item>\n        <item name=\"colorSurfaceInverse\">@color/m3_sys_color_dynamic_light_inverse_surface</item>\n        <item name=\"colorOnSurfaceInverse\">@color/m3_sys_color_dynamic_light_inverse_on_surface</item>\n        <item name=\"colorOutline\">@color/m3_sys_color_dynamic_light_outline</item>\n\n        <!-- Default Framework Text Colors. -->\n        <item name=\"android:textColorPrimary\">@color/m3_dynamic_default_color_primary_text</item>\n        <item name=\"android:textColorPrimaryInverse\">@color/m3_dynamic_dark_default_color_primary_text</item>\n        <item name=\"android:textColorSecondary\">@color/m3_dynamic_default_color_secondary_text</item>\n        <item name=\"android:textColorSecondaryInverse\">@color/m3_dynamic_dark_default_color_secondary_text</item>\n        <item name=\"android:textColorTertiary\">@color/m3_dynamic_default_color_secondary_text</item>\n        <item name=\"android:textColorTertiaryInverse\">@color/m3_dynamic_dark_default_color_secondary_text</item>\n        <item name=\"android:textColorPrimaryDisableOnly\">@color/m3_dynamic_primary_text_disable_only</item>\n        <item name=\"android:textColorPrimaryInverseDisableOnly\">@color/m3_dynamic_dark_primary_text_disable_only</item>\n        <item name=\"android:textColorHint\">@color/m3_dynamic_hint_foreground</item>\n        <item name=\"android:textColorHintInverse\">@color/m3_dynamic_dark_hint_foreground</item>\n        <item name=\"android:textColorHighlight\">@color/m3_dynamic_highlighted_text</item>\n        <item name=\"android:textColorHighlightInverse\">@color/m3_dynamic_dark_highlighted_text</item>\n        <item name=\"android:textColorAlertDialogListItem\">@color/m3_dynamic_default_color_primary_text</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/network_security_config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Need to allow cleartext traffic for some sources -->\n    <base-config\n        cleartextTrafficPermitted=\"true\"\n        tools:ignore=\"InsecureBaseConfiguration\">\n        <trust-anchors>\n            <!-- Trust preinstalled CAs -->\n            <certificates src=\"system\" />\n\n            <!-- Additionally trust user added CAs -->\n            <certificates\n                src=\"user\"\n                tools:ignore=\"AcceptsUserCertificates\" />\n        </trust-anchors>\n    </base-config>\n</network-security-config>\n"
  },
  {
    "path": "app/src/main/res/xml/provider_paths.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths>\n    <cache-path\n        name=\"cache_files\"\n        path=\".\" />\n    <external-path\n        name=\"ext\"\n        path=\".\" />\n    <external-cache-path\n        name=\"ext_cache_files\"\n        path=\".\" />\n    <external-files-path\n        name=\"ext_files\"\n        path=\".\" />\n    <!--suppress AndroidElementNotAllowed -->\n    <root-path\n        name=\"ext_storage\"\n        path=\"/storage/\" />\n</paths>\n"
  },
  {
    "path": "app/src/main/res/xml/s_pen_actions.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<remote-actions\n    actionset_label=\"@string/app_name\"\n    version=\"1.2\">\n    <action\n        id=\"tachiyomi_next_page\"\n        label=\"@string/spen_next_page\"\n        priority=\"1\"\n        repeatable=\"true\"\n        repeatable_interval=\"short\"\n        trigger_key=\"CTRL_LEFT+DPAD_RIGHT\">\n        <preference\n            name=\"gesture\"\n            value=\"click\" />\n    </action>\n    <action\n        id=\"tachiyomi_previous_page\"\n        label=\"@string/spen_previous_page\"\n        priority=\"2\"\n        repeatable=\"true\"\n        repeatable_interval=\"short\"\n        trigger_key=\"CTRL_LEFT+DPAD_LEFT\">\n        <preference\n            name=\"gesture\"\n            value=\"double_click\" />\n    </action>\n    <action\n        id=\"tachiyomi_back\"\n        label=\"@string/action_webview_back\"\n        priority=\"3\"\n        repeatable=\"true\"\n        repeatable_interval=\"short\"\n        trigger_key=\"BACK\">\n        <preference\n            name=\"gesture\"\n            value=\"circle_ccw\" />\n    </action>\n    <action\n        id=\"tachiyomi_next_chapter\"\n        label=\"@string/action_next_chapter\"\n        priority=\"4\"\n        repeatable=\"true\"\n        repeatable_interval=\"short\"\n        trigger_key=\"N\">\n        <preference\n            name=\"gesture\"\n            value=\"swipe_right\" />\n    </action>\n    <action\n        id=\"tachiyomi_previous_chapter\"\n        label=\"@string/action_previous_chapter\"\n        priority=\"5\"\n        repeatable=\"true\"\n        repeatable_interval=\"short\"\n        trigger_key=\"P\">\n        <preference\n            name=\"gesture\"\n            value=\"swipe_left\" />\n    </action>\n</remote-actions>\n"
  },
  {
    "path": "app/src/main/res/xml/searchable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<searchable xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:hint=\"@string/action_global_search_hint\"\n    android:label=\"@string/app_name\" />\n"
  },
  {
    "path": "app/src/test/java/mihon/core/migration/MigratorTest.kt",
    "content": "package mihon.core.migration\n\nimport io.mockk.slot\nimport io.mockk.spyk\nimport io.mockk.verify\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.newSingleThreadContext\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.test.resetMain\nimport kotlinx.coroutines.test.setMain\nimport org.junit.jupiter.api.AfterAll\nimport org.junit.jupiter.api.Assertions.assertEquals\nimport org.junit.jupiter.api.Assertions.assertFalse\nimport org.junit.jupiter.api.Assertions.assertInstanceOf\nimport org.junit.jupiter.api.BeforeAll\nimport org.junit.jupiter.api.BeforeEach\nimport org.junit.jupiter.api.Test\n\nclass MigratorTest {\n\n    lateinit var migrationCompletedListener: MigrationCompletedListener\n    lateinit var migrationContext: MigrationContext\n    lateinit var migrationJobFactory: MigrationJobFactory\n    lateinit var migrationStrategyFactory: MigrationStrategyFactory\n\n    @BeforeEach\n    fun initilize() {\n        migrationContext = MigrationContext(false)\n        migrationJobFactory = spyk(MigrationJobFactory(migrationContext, CoroutineScope(Dispatchers.Main + Job())))\n        migrationCompletedListener = spyk<MigrationCompletedListener>(block = {})\n        migrationStrategyFactory = spyk(MigrationStrategyFactory(migrationJobFactory, migrationCompletedListener))\n    }\n\n    @Test\n    fun initialVersion() = runBlocking {\n        val strategy = migrationStrategyFactory.create(0, 1)\n        assertInstanceOf(InitialMigrationStrategy::class.java, strategy)\n\n        val migrations = slot<List<Migration>>()\n        val execute = strategy(listOf(Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { false }))\n\n        execute.await()\n\n        verify { migrationJobFactory.create(capture(migrations)) }\n        assertEquals(1, migrations.captured.size)\n        verify { migrationCompletedListener() }\n    }\n\n    @Test\n    fun sameVersion() = runBlocking {\n        val strategy = migrationStrategyFactory.create(1, 1)\n        assertInstanceOf(NoopMigrationStrategy::class.java, strategy)\n\n        val execute = strategy(listOf(Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { false }))\n\n        val result = execute.await()\n        assertFalse(result)\n\n        verify(exactly = 0) { migrationJobFactory.create(any()) }\n    }\n\n    @Test\n    fun noMigrations() = runBlocking {\n        val strategy = migrationStrategyFactory.create(1, 2)\n        assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy)\n\n        val execute = strategy(emptyList())\n\n        val result = execute.await()\n        assertFalse(result)\n\n        verify(exactly = 0) { migrationJobFactory.create(any()) }\n    }\n\n    @Test\n    fun smallMigration() = runBlocking {\n        val strategy = migrationStrategyFactory.create(1, 2)\n        assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy)\n\n        val migrations = slot<List<Migration>>()\n        val execute = strategy(listOf(Migration.of(Migration.ALWAYS) { true }, Migration.of(2f) { true }))\n\n        execute.await()\n\n        verify { migrationJobFactory.create(capture(migrations)) }\n        assertEquals(2, migrations.captured.size)\n        verify { migrationCompletedListener() }\n    }\n\n    @Test\n    fun largeMigration() = runBlocking {\n        val input = listOf(\n            Migration.of(Migration.ALWAYS) { true },\n            Migration.of(2f) { true },\n            Migration.of(3f) { true },\n            Migration.of(4f) { true },\n            Migration.of(5f) { true },\n            Migration.of(6f) { true },\n            Migration.of(7f) { true },\n            Migration.of(8f) { true },\n            Migration.of(9f) { true },\n            Migration.of(10f) { true },\n        )\n\n        val strategy = migrationStrategyFactory.create(1, 10)\n        assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy)\n\n        val migrations = slot<List<Migration>>()\n        val execute = strategy(input)\n\n        execute.await()\n\n        verify { migrationJobFactory.create(capture(migrations)) }\n        assertEquals(10, migrations.captured.size)\n        verify { migrationCompletedListener() }\n    }\n\n    @Test\n    fun withinRangeMigration() = runBlocking {\n        val strategy = migrationStrategyFactory.create(1, 2)\n        assertInstanceOf(VersionRangeMigrationStrategy::class.java, strategy)\n\n        val migrations = slot<List<Migration>>()\n        val execute = strategy(\n            listOf(\n                Migration.of(Migration.ALWAYS) { true },\n                Migration.of(2f) { true },\n                Migration.of(3f) { false },\n            ),\n        )\n\n        execute.await()\n\n        verify { migrationJobFactory.create(capture(migrations)) }\n        assertEquals(2, migrations.captured.size)\n        verify { migrationCompletedListener() }\n    }\n\n    companion object {\n\n        val mainThreadSurrogate = newSingleThreadContext(\"UI thread\")\n\n        @BeforeAll\n        @JvmStatic\n        fun setUp() {\n            Dispatchers.setMain(mainThreadSurrogate)\n        }\n\n        @AfterAll\n        @JvmStatic\n        fun tearDown() {\n            Dispatchers.resetMain() // reset the main dispatcher to the original Main dispatcher\n            mainThreadSurrogate.close()\n        }\n    }\n}\n"
  },
  {
    "path": "build.gradle.kts",
    "content": "buildscript {\n    dependencies {\n        classpath(libs.android.shortcut.gradle)\n    }\n}\n\nplugins {\n    alias(kotlinx.plugins.serialization) apply false\n    alias(libs.plugins.aboutLibraries) apply false\n    alias(libs.plugins.moko) apply false\n    alias(libs.plugins.sqldelight) apply false\n}\n\ntasks.register<Delete>(\"clean\") {\n    delete(rootProject.layout.buildDirectory)\n}\n"
  },
  {
    "path": "buildSrc/build.gradle.kts",
    "content": "plugins {\n    `kotlin-dsl`\n}\n\ndependencies {\n    implementation(androidx.gradle)\n    implementation(kotlinx.gradle)\n    implementation(kotlinx.compose.compiler.gradle)\n    implementation(libs.spotless.gradle)\n    implementation(gradleApi())\n\n    implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))\n    implementation(files(androidx.javaClass.superclass.protectionDomain.codeSource.location))\n    implementation(files(compose.javaClass.superclass.protectionDomain.codeSource.location))\n    implementation(files(kotlinx.javaClass.superclass.protectionDomain.codeSource.location))\n}\n\nrepositories {\n    gradlePluginPortal()\n    mavenCentral()\n    google()\n}\n"
  },
  {
    "path": "buildSrc/settings.gradle.kts",
    "content": "dependencyResolutionManagement {\n    versionCatalogs {\n        create(\"libs\") {\n            from(files(\"../gradle/libs.versions.toml\"))\n        }\n        create(\"androidx\") {\n            from(files(\"../gradle/androidx.versions.toml\"))\n        }\n        create(\"compose\") {\n            from(files(\"../gradle/compose.versions.toml\"))\n        }\n        create(\"kotlinx\") {\n            from(files(\"../gradle/kotlinx.versions.toml\"))\n        }\n        create(\"aniyomilibs\") {\n            from(files(\"../gradle/aniyomi.versions.toml\"))\n        }\n    }\n}\n\nrootProject.name = \"Aniyomi\"\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon/buildlogic/AndroidConfig.kt",
    "content": "package mihon.buildlogic\n\nimport org.gradle.api.JavaVersion as GradleJavaVersion\nimport org.jetbrains.kotlin.gradle.dsl.JvmTarget as KotlinJvmTarget\n\nobject AndroidConfig {\n    const val COMPILE_SDK = 35\n    const val TARGET_SDK = 34\n    const val MIN_SDK = 26\n    const val NDK = \"27.1.12297006\"\n    const val BUILD_TOOLS = \"35.0.1\"\n\n    // https://youtrack.jetbrains.com/issue/KT-66995/JvmTarget-and-JavaVersion-compatibility-for-easier-JVM-version-setup\n    val JavaVersion = GradleJavaVersion.VERSION_17\n    val JvmTarget = KotlinJvmTarget.JVM_17\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon/buildlogic/BuildConfig.kt",
    "content": "package mihon.buildlogic\n\nimport org.gradle.api.Project\n\ninterface BuildConfig {\n    val enableUpdater: Boolean\n    val enableCodeShrink: Boolean\n    val includeDependencyInfo: Boolean\n}\n\nval Project.Config: BuildConfig get() = object : BuildConfig {\n    override val enableUpdater: Boolean = project.hasProperty(\"enable-updater\")\n    override val enableCodeShrink: Boolean = !project.hasProperty(\"disable-code-shrink\")\n    override val includeDependencyInfo: Boolean = project.hasProperty(\"include-dependency-info\")\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon/buildlogic/Commands.kt",
    "content": "package mihon.buildlogic\n\nimport org.gradle.api.Project\nimport java.time.Instant\nimport java.time.LocalDateTime\nimport java.time.ZoneOffset\nimport java.time.format.DateTimeFormatter\n\n// Git is needed in your system PATH for these commands to work.\n// If it's not installed, you can return a random value as a workaround\nfun Project.getCommitCount(): String {\n    return runCommand(\"git rev-list --count HEAD\")\n    // return \"1\"\n}\n\nfun Project.getGitSha(): String {\n    return runCommand(\"git rev-parse --short HEAD\")\n    // return \"1\"\n}\n\nprivate val BUILD_TIME_FORMATTER = DateTimeFormatter.ofPattern(\"yyyy-MM-dd'T'HH:mm:ss'Z'\")\n\n/**\n * @param useLastCommitTime If `true`, the build time is based on the timestamp of the last Git commit;\n *                          otherwise, the current time is used. Both are in UTC.\n * @return A formatted string representing the build time. The format used is defined by [BUILD_TIME_FORMATTER].\n */\nfun Project.getBuildTime(useLastCommitTime: Boolean): String {\n    return if (useLastCommitTime) {\n        val epoch = runCommand(\"git log -1 --format=%ct\").toLong()\n        Instant.ofEpochSecond(epoch).atOffset(ZoneOffset.UTC).format(BUILD_TIME_FORMATTER)\n    } else {\n        LocalDateTime.now(ZoneOffset.UTC).format(BUILD_TIME_FORMATTER)\n    }\n}\n\nprivate fun Project.runCommand(command: String): String {\n    return providers.exec {\n        commandLine = command.split(\" \")\n    }\n        .standardOutput\n        .asText\n        .get()\n        .trim()\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon/buildlogic/ProjectExtensions.kt",
    "content": "package mihon.buildlogic\n\nimport com.android.build.api.dsl.CommonExtension\nimport org.gradle.accessors.dm.LibrariesForAndroidx\nimport org.gradle.accessors.dm.LibrariesForCompose\nimport org.gradle.accessors.dm.LibrariesForKotlinx\nimport org.gradle.accessors.dm.LibrariesForLibs\nimport org.gradle.api.Project\nimport org.gradle.api.tasks.testing.Test\nimport org.gradle.api.tasks.testing.logging.TestLogEvent\nimport org.gradle.kotlin.dsl.configure\nimport org.gradle.kotlin.dsl.dependencies\nimport org.gradle.kotlin.dsl.provideDelegate\nimport org.gradle.kotlin.dsl.the\nimport org.gradle.kotlin.dsl.withType\nimport org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension\nimport org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag\nimport org.jetbrains.kotlin.gradle.tasks.KotlinCompile\nimport java.io.File\n\nval Project.androidx get() = the<LibrariesForAndroidx>()\nval Project.compose get() = the<LibrariesForCompose>()\nval Project.kotlinx get() = the<LibrariesForKotlinx>()\nval Project.libs get() = the<LibrariesForLibs>()\n\ninternal fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) {\n    commonExtension.apply {\n        compileSdk = AndroidConfig.COMPILE_SDK\n        buildToolsVersion = AndroidConfig.BUILD_TOOLS\n\n        defaultConfig {\n            minSdk = AndroidConfig.MIN_SDK\n            ndk {\n                version = AndroidConfig.NDK\n            }\n        }\n\n        compileOptions {\n            sourceCompatibility = AndroidConfig.JavaVersion\n            targetCompatibility = AndroidConfig.JavaVersion\n            isCoreLibraryDesugaringEnabled = true\n        }\n    }\n\n    tasks.withType<KotlinCompile>().configureEach {\n        compilerOptions {\n            jvmTarget.set(AndroidConfig.JvmTarget)\n            freeCompilerArgs.addAll(\n                \"-Xcontext-receivers\",\n                \"-opt-in=kotlin.RequiresOptIn\",\n            )\n\n            // Treat all Kotlin warnings as errors (disabled by default)\n            // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties\n            val warningsAsErrors: String? by project\n            allWarningsAsErrors.set(warningsAsErrors.toBoolean())\n\n        }\n    }\n\n    dependencies {\n        \"coreLibraryDesugaring\"(libs.desugar)\n    }\n}\n\ninternal fun Project.configureCompose(commonExtension: CommonExtension<*, *, *, *, *, *>) {\n    pluginManager.apply(kotlinx.plugins.compose.compiler.get().pluginId)\n\n    commonExtension.apply {\n        buildFeatures {\n            compose = true\n        }\n\n        dependencies {\n            \"implementation\"(platform(compose.bom))\n        }\n    }\n\n    extensions.configure<ComposeCompilerGradlePluginExtension> {\n        featureFlags.set(setOf(ComposeFeatureFlag.OptimizeNonSkippingGroups))\n\n        val enableMetrics = project.providers.gradleProperty(\"enableComposeCompilerMetrics\").orNull.toBoolean()\n        val enableReports = project.providers.gradleProperty(\"enableComposeCompilerReports\").orNull.toBoolean()\n\n        val rootBuildDir = rootProject.layout.buildDirectory.asFile.get()\n        val relativePath = projectDir.relativeTo(rootDir)\n\n        if (enableMetrics) {\n            rootBuildDir.resolve(\"compose-metrics\").resolve(relativePath).let(metricsDestination::set)\n        }\n\n        if (enableReports) {\n            rootBuildDir.resolve(\"compose-reports\").resolve(relativePath).let(reportsDestination::set)\n        }\n    }\n}\n\ninternal fun Project.configureTest() {\n    tasks.withType<Test> {\n        useJUnitPlatform()\n        testLogging {\n            events(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED)\n        }\n    }\n}\n\nval Project.generatedBuildDir: File get() = project.layout.buildDirectory.asFile.get().resolve(\"generated/mihon\")\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon/buildlogic/tasks/LocalesConfigTask.kt",
    "content": "package mihon.buildlogic.tasks\n\nimport org.gradle.api.Project\nimport org.gradle.api.Task\nimport org.gradle.api.tasks.TaskProvider\nimport java.io.File\n\nprivate val emptyResourcesElement = \"<resources>\\\\s*</resources>|<resources\\\\s*/>\".toRegex()\n\nfun Project.getLocalesConfigTask(outputResourceDir: File): TaskProvider<Task> {\n    return tasks.register(\"generateLocalesConfig\") {\n        val locales = fileTree(\"$projectDir/src/commonMain/moko-resources/\")\n            .matching { include(\"**/strings.xml\") }\n            .filterNot { it.readText().contains(emptyResourcesElement) }\n            .map {\n                it.parentFile.name\n                    .replace(\"base\", \"en\")\n                    .replace(\"-r\", \"-\")\n                    .replace(\"+\", \"-\")\n            }\n            .sorted()\n            .joinToString(\"\\n\") { \"|   <locale android:name=\\\"$it\\\"/>\" }\n\n        val content = \"\"\"\n        |<?xml version=\"1.0\" encoding=\"utf-8\"?>\n        |<locale-config xmlns:android=\"http://schemas.android.com/apk/res/android\">\n        $locales\n        |</locale-config>\n        \"\"\".trimMargin()\n\n        outputResourceDir.resolve(\"xml/locales_config.xml\").apply {\n            parentFile.mkdirs()\n            writeText(content)\n        }\n    }\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon.android.application.compose.gradle.kts",
    "content": "import mihon.buildlogic.configureCompose\n\nplugins {\n    id(\"com.android.application\")\n    kotlin(\"android\")\n\n    id(\"mihon.code.lint\")\n}\n\nandroid {\n    configureCompose(this)\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon.android.application.gradle.kts",
    "content": "import mihon.buildlogic.AndroidConfig\nimport mihon.buildlogic.configureAndroid\nimport mihon.buildlogic.configureTest\n\nplugins {\n    id(\"com.android.application\")\n    kotlin(\"android\")\n\n    id(\"mihon.code.lint\")\n}\n\nandroid {\n    defaultConfig {\n        targetSdk = AndroidConfig.TARGET_SDK\n    }\n    configureAndroid(this)\n    configureTest()\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon.benchmark.gradle.kts",
    "content": "import mihon.buildlogic.configureAndroid\nimport mihon.buildlogic.configureTest\n\nplugins {\n    id(\"com.android.test\")\n    kotlin(\"android\")\n\n    id(\"mihon.code.lint\")\n}\n\nandroid {\n    configureAndroid(this)\n    configureTest()\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon.code.lint.gradle.kts",
    "content": "import org.gradle.accessors.dm.LibrariesForLibs\n\nplugins {\n    id(\"com.diffplug.spotless\")\n}\n\nval libs = the<LibrariesForLibs>()\n\nval xmlFormatExclude = buildList(2) {\n    add(\"**/build/**/*.xml\")\n\n    projectDir\n        .resolve(\"src/commonMain/moko-resources\")\n        .takeIf { it.isDirectory }\n        ?.let(::fileTree)\n        ?.matching { exclude(\"/base/**\") }\n        ?.let(::add)\n}\n    .toTypedArray()\n\nspotless {\n    kotlin {\n        target(\"**/*.kt\", \"**/*.kts\")\n        targetExclude(\"**/build/**/*.kt\")\n        ktlint(libs.ktlint.core.get().version)\n        trimTrailingWhitespace()\n        endWithNewline()\n    }\n    format(\"xml\") {\n        target(\"**/*.xml\")\n        targetExclude(*xmlFormatExclude)\n        trimTrailingWhitespace()\n        endWithNewline()\n    }\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon.library.compose.gradle.kts",
    "content": "import mihon.buildlogic.configureCompose\n\nplugins {\n    id(\"com.android.library\")\n\n    id(\"mihon.code.lint\")\n}\n\nandroid {\n    configureCompose(this)\n}\n"
  },
  {
    "path": "buildSrc/src/main/kotlin/mihon.library.gradle.kts",
    "content": "import mihon.buildlogic.configureAndroid\nimport mihon.buildlogic.configureTest\n\nplugins {\n    id(\"com.android.library\")\n\n    id(\"mihon.code.lint\")\n}\n\nandroid {\n    configureAndroid(this)\n    configureTest()\n}\n"
  },
  {
    "path": "core/archive/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    kotlin(\"android\")\n    kotlin(\"plugin.serialization\")\n}\n\nandroid {\n    namespace = \"mihon.core.archive\"\n}\n\ndependencies {\n    implementation(libs.jsoup)\n    implementation(libs.libarchive)\n    implementation(libs.unifile)\n}\n"
  },
  {
    "path": "core/archive/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "core/archive/src/main/kotlin/mihon/core/archive/ArchiveEntry.kt",
    "content": "package mihon.core.archive\n\nclass ArchiveEntry(\n    val name: String,\n    val isFile: Boolean,\n)\n"
  },
  {
    "path": "core/archive/src/main/kotlin/mihon/core/archive/ArchiveInputStream.kt",
    "content": "package mihon.core.archive\n\nimport me.zhanghai.android.libarchive.Archive\nimport me.zhanghai.android.libarchive.ArchiveEntry\nimport me.zhanghai.android.libarchive.ArchiveException\nimport java.io.InputStream\nimport java.nio.ByteBuffer\nimport kotlin.concurrent.Volatile\n\ninternal class ArchiveInputStream(buffer: Long, size: Long) : InputStream() {\n    private val lock = Any()\n\n    @Volatile\n    private var isClosed = false\n\n    private val archive = Archive.readNew()\n\n    init {\n        try {\n            Archive.setCharset(archive, Charsets.UTF_8.name().toByteArray())\n            Archive.readSupportFilterAll(archive)\n            Archive.readSupportFormatAll(archive)\n            Archive.readOpenMemoryUnsafe(archive, buffer, size)\n        } catch (e: ArchiveException) {\n            close()\n            throw e\n        }\n    }\n\n    private val oneByteBuffer = ByteBuffer.allocateDirect(1)\n\n    override fun read(): Int {\n        read(oneByteBuffer)\n        return if (oneByteBuffer.hasRemaining()) oneByteBuffer.get().toUByte().toInt() else -1\n    }\n\n    override fun read(b: ByteArray, off: Int, len: Int): Int {\n        val buffer = ByteBuffer.wrap(b, off, len)\n        read(buffer)\n        return if (buffer.hasRemaining()) buffer.remaining() else -1\n    }\n\n    private fun read(buffer: ByteBuffer) {\n        buffer.clear()\n        Archive.readData(archive, buffer)\n        buffer.flip()\n    }\n\n    override fun close() {\n        synchronized(lock) {\n            if (isClosed) return\n            isClosed = true\n        }\n\n        Archive.readFree(archive)\n    }\n\n    fun getNextEntry() = Archive.readNextHeader(archive).takeUnless { it == 0L }?.let { entry ->\n        val name = ArchiveEntry.pathnameUtf8(entry) ?: ArchiveEntry.pathname(entry)?.decodeToString() ?: return null\n        val isFile = ArchiveEntry.filetype(entry) == ArchiveEntry.AE_IFREG\n        ArchiveEntry(name, isFile)\n    }\n}\n"
  },
  {
    "path": "core/archive/src/main/kotlin/mihon/core/archive/ArchiveReader.kt",
    "content": "package mihon.core.archive\n\nimport android.os.ParcelFileDescriptor\nimport android.system.Os\nimport android.system.OsConstants\nimport me.zhanghai.android.libarchive.ArchiveException\nimport java.io.Closeable\nimport java.io.InputStream\n\nclass ArchiveReader(pfd: ParcelFileDescriptor) : Closeable {\n    private val size = pfd.statSize\n    private val address = Os.mmap(0, size, OsConstants.PROT_READ, OsConstants.MAP_PRIVATE, pfd.fileDescriptor, 0)\n\n    fun <T> useEntries(block: (Sequence<ArchiveEntry>) -> T): T = ArchiveInputStream(address, size).use {\n        block(generateSequence { it.getNextEntry() })\n    }\n\n    fun getInputStream(entryName: String): InputStream? {\n        val archive = mihon.core.archive.ArchiveInputStream(address, size)\n        try {\n            while (true) {\n                val entry = archive.getNextEntry() ?: break\n                if (entry.name == entryName) {\n                    return archive\n                }\n            }\n        } catch (e: ArchiveException) {\n            archive.close()\n            throw e\n        }\n        archive.close()\n        return null\n    }\n\n    override fun close() {\n        Os.munmap(address, size)\n    }\n}\n"
  },
  {
    "path": "core/archive/src/main/kotlin/mihon/core/archive/EpubReader.kt",
    "content": "package mihon.core.archive\n\nimport org.jsoup.Jsoup\nimport org.jsoup.nodes.Document\nimport java.io.Closeable\nimport java.io.File\nimport java.io.InputStream\n\n/**\n * Wrapper over ArchiveReader to load files in epub format.\n */\nclass EpubReader(private val reader: ArchiveReader) : Closeable by reader {\n\n    /**\n     * Path separator used by this epub.\n     */\n    private val pathSeparator = getPathSeparator()\n\n    /**\n     * Returns an input stream for reading the contents of the specified zip file entry.\n     */\n    fun getInputStream(entryName: String): InputStream? {\n        return reader.getInputStream(entryName)\n    }\n\n    /**\n     * Returns the path of all the images found in the epub file.\n     */\n    fun getImagesFromPages(): List<String> {\n        val ref = getPackageHref()\n        val doc = getPackageDocument(ref)\n        val pages = getPagesFromDocument(doc)\n        return getImagesFromPages(pages, ref)\n    }\n\n    /**\n     * Returns the path to the package document.\n     */\n    fun getPackageHref(): String {\n        val meta = getInputStream(resolveZipPath(\"META-INF\", \"container.xml\"))\n        if (meta != null) {\n            val metaDoc = meta.use { Jsoup.parse(it, null, \"\") }\n            val path = metaDoc.getElementsByTag(\"rootfile\").first()?.attr(\"full-path\")\n            if (path != null) {\n                return path\n            }\n        }\n        return resolveZipPath(\"OEBPS\", \"content.opf\")\n    }\n\n    /**\n     * Returns the package document where all the files are listed.\n     */\n    fun getPackageDocument(ref: String): Document {\n        return getInputStream(ref)!!.use { Jsoup.parse(it, null, \"\") }\n    }\n\n    /**\n     * Returns all the pages from the epub.\n     */\n    private fun getPagesFromDocument(document: Document): List<String> {\n        val pages = document.select(\"manifest > item\")\n            .filter { node -> \"application/xhtml+xml\" == node.attr(\"media-type\") }\n            .associateBy { it.attr(\"id\") }\n\n        val spine = document.select(\"spine > itemref\").map { it.attr(\"idref\") }\n        return spine.mapNotNull { pages[it] }.map { it.attr(\"href\") }\n    }\n\n    /**\n     * Returns all the images contained in every page from the epub.\n     */\n    private fun getImagesFromPages(pages: List<String>, packageHref: String): List<String> {\n        val result = mutableListOf<String>()\n        val basePath = getParentDirectory(packageHref)\n        pages.forEach { page ->\n            val entryPath = resolveZipPath(basePath, page)\n            val document = getInputStream(entryPath)!!.use { Jsoup.parse(it, null, \"\") }\n            val imageBasePath = getParentDirectory(entryPath)\n\n            document.allElements.forEach {\n                when (it.tagName()) {\n                    \"img\" -> result.add(resolveZipPath(imageBasePath, it.attr(\"src\")))\n                    \"image\" -> result.add(resolveZipPath(imageBasePath, it.attr(\"xlink:href\")))\n                }\n            }\n        }\n\n        return result\n    }\n\n    /**\n     * Returns the path separator used by the epub file.\n     */\n    private fun getPathSeparator(): String {\n        val meta = getInputStream(\"META-INF\\\\container.xml\")\n        return if (meta != null) {\n            meta.close()\n            \"\\\\\"\n        } else {\n            \"/\"\n        }\n    }\n\n    /**\n     * Resolves a zip path from base and relative components and a path separator.\n     */\n    private fun resolveZipPath(basePath: String, relativePath: String): String {\n        if (relativePath.startsWith(pathSeparator)) {\n            // Path is absolute, so return as-is.\n            return relativePath\n        }\n\n        var fixedBasePath = basePath.replace(pathSeparator, File.separator)\n        if (!fixedBasePath.startsWith(File.separator)) {\n            fixedBasePath = \"${File.separator}$fixedBasePath\"\n        }\n\n        val fixedRelativePath = relativePath.replace(pathSeparator, File.separator)\n        val resolvedPath = File(fixedBasePath, fixedRelativePath).canonicalPath\n        return resolvedPath.replace(File.separator, pathSeparator).substring(1)\n    }\n\n    /**\n     * Gets the parent directory of a path.\n     */\n    private fun getParentDirectory(path: String): String {\n        val separatorIndex = path.lastIndexOf(pathSeparator)\n        return if (separatorIndex >= 0) {\n            path.substring(0, separatorIndex)\n        } else {\n            \"\"\n        }\n    }\n}\n"
  },
  {
    "path": "core/archive/src/main/kotlin/mihon/core/archive/UniFileExtensions.kt",
    "content": "package mihon.core.archive\n\nimport android.content.Context\nimport android.os.ParcelFileDescriptor\nimport com.hippo.unifile.UniFile\n\nfun UniFile.openFileDescriptor(context: Context, mode: String): ParcelFileDescriptor =\n    context.contentResolver.openFileDescriptor(uri, mode)\n        ?: error(\"Failed to open file descriptor: ${filePath ?: uri.toString()}\")\n\nfun UniFile.archiveReader(context: Context) = openFileDescriptor(context, \"r\").use { ArchiveReader(it) }\n\nfun UniFile.epubReader(context: Context) = EpubReader(archiveReader(context))\n"
  },
  {
    "path": "core/archive/src/main/kotlin/mihon/core/archive/ZipWriter.kt",
    "content": "package mihon.core.archive\n\nimport android.content.Context\nimport android.system.Os\nimport android.system.StructStat\nimport com.hippo.unifile.UniFile\nimport me.zhanghai.android.libarchive.Archive\nimport me.zhanghai.android.libarchive.ArchiveEntry\nimport me.zhanghai.android.libarchive.ArchiveException\nimport java.io.Closeable\nimport java.nio.ByteBuffer\n\nclass ZipWriter(val context: Context, file: UniFile) : Closeable {\n    private val pfd = file.openFileDescriptor(context, \"wt\")\n    private val archive = Archive.writeNew()\n    private val entry = ArchiveEntry.new2(archive)\n    private val buffer = ByteBuffer.allocateDirect(8192)\n\n    init {\n        try {\n            Archive.setCharset(archive, Charsets.UTF_8.name().toByteArray())\n            Archive.writeSetFormatZip(archive)\n            Archive.writeZipSetCompressionStore(archive)\n            Archive.writeOpenFd(archive, pfd.fd)\n        } catch (e: ArchiveException) {\n            close()\n            throw e\n        }\n    }\n\n    fun write(file: UniFile) {\n        file.openFileDescriptor(context, \"r\").use {\n            val fd = it.fileDescriptor\n            ArchiveEntry.clear(entry)\n            ArchiveEntry.setPathnameUtf8(entry, file.name)\n            val stat = Os.fstat(fd)\n            ArchiveEntry.setStat(entry, stat.toArchiveStat())\n            Archive.writeHeader(archive, entry)\n            while (true) {\n                buffer.clear()\n                Os.read(fd, buffer)\n                if (buffer.position() == 0) break\n                buffer.flip()\n                Archive.writeData(archive, buffer)\n            }\n            Archive.writeFinishEntry(archive)\n        }\n    }\n\n    override fun close() {\n        ArchiveEntry.free(entry)\n        Archive.writeFree(archive)\n        pfd.close()\n    }\n}\n\nprivate fun StructStat.toArchiveStat() = ArchiveEntry.StructStat().apply {\n    stDev = st_dev\n    stMode = st_mode\n    stNlink = st_nlink.toInt()\n    stUid = st_uid\n    stGid = st_gid\n    stRdev = st_rdev\n    stSize = st_size\n    stBlksize = st_blksize\n    stBlocks = st_blocks\n    stAtim = st_atime.toTimespec()\n    stMtim = st_mtime.toTimespec()\n    stCtim = st_ctime.toTimespec()\n    stIno = st_ino\n}\n\nprivate fun Long.toTimespec() = ArchiveEntry.StructTimespec().also { it.tvSec = this }\n"
  },
  {
    "path": "core/common/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    kotlin(\"android\")\n    kotlin(\"plugin.serialization\")\n}\n\nandroid {\n    namespace = \"eu.kanade.tachiyomi.core.common\"\n}\n\nkotlin {\n    compilerOptions {\n        freeCompilerArgs.addAll(\n            \"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi\",\n            \"-opt-in=kotlinx.serialization.ExperimentalSerializationApi\",\n        )\n    }\n}\n\ndependencies {\n    implementation(projects.i18n)\n\n    api(libs.logcat)\n\n    api(libs.rxjava)\n\n    api(libs.okhttp.core)\n    api(libs.okhttp.logging)\n    api(libs.okhttp.brotli)\n    api(libs.okhttp.dnsoverhttps)\n    api(libs.okio)\n\n    implementation(libs.image.decoder)\n\n    implementation(libs.unifile)\n    implementation(libs.libarchive)\n\n    api(kotlinx.coroutines.core)\n    api(kotlinx.serialization.json)\n    api(kotlinx.serialization.json.okio)\n\n    api(libs.preferencektx)\n\n    implementation(libs.jsoup)\n\n    // Sort\n    implementation(libs.natural.comparator)\n\n    // JavaScript engine\n    implementation(libs.bundles.js.engine)\n\n    // FFmpeg-kit\n    implementation(aniyomilibs.ffmpeg.kit)\n\n    // Tests\n    testImplementation(libs.bundles.test)\n}\n"
  },
  {
    "path": "core/common/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/core/Constants.kt",
    "content": "package eu.kanade.tachiyomi.core.common\n\nobject Constants {\n    const val URL_HELP = \"https://aniyomi.org/docs/guides/troubleshooting/\"\n    const val URL_HELP_UPCOMING = \"https://aniyomi.org/docs/faq/updates/upcoming\"\n\n    const val MANGA_EXTRA = \"manga\"\n\n    const val ANIME_EXTRA = \"anime\"\n\n    const val MAIN_ACTIVITY = \"eu.kanade.tachiyomi.ui.main.MainActivity\"\n\n    // Shortcut actions\n    const val SHORTCUT_ANIMELIB = \"eu.kanade.tachiyomi.SHOW_ANIMELIB\"\n    const val SHORTCUT_LIBRARY = \"eu.kanade.tachiyomi.SHOW_LIBRARY\"\n    const val SHORTCUT_ANIME = \"eu.kanade.tachiyomi.SHOW_ANIME\"\n    const val SHORTCUT_MANGA = \"eu.kanade.tachiyomi.SHOW_MANGA\"\n    const val SHORTCUT_UPDATES = \"eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED\"\n    const val SHORTCUT_HISTORY = \"eu.kanade.tachiyomi.SHOW_RECENTLY_READ\"\n    const val SHORTCUT_SOURCES = \"eu.kanade.tachiyomi.SHOW_CATALOGUES\"\n    const val SHORTCUT_ANIMEEXTENSIONS = \"eu.kanade.tachiyomi.ANIMEEXTENSIONS\"\n    const val SHORTCUT_EXTENSIONS = \"eu.kanade.tachiyomi.EXTENSIONS\"\n    const val SHORTCUT_ANIME_DOWNLOADS = \"eu.kanade.tachiyomi.SHOW_ANIME_DOWNLOADS\"\n    const val SHORTCUT_DOWNLOADS = \"eu.kanade.tachiyomi.SHOW_DOWNLOADS\"\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt",
    "content": "package eu.kanade.tachiyomi.core.security\n\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.getEnum\nimport tachiyomi.i18n.MR\n\nclass SecurityPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun useAuthenticator() = preferenceStore.getBoolean(\"use_biometric_lock\", false)\n\n    fun lockAppAfter() = preferenceStore.getInt(\"lock_app_after\", 0)\n\n    fun secureScreen() = preferenceStore.getEnum(\"secure_screen_v2\", SecureScreenMode.INCOGNITO)\n\n    fun hideNotificationContent() = preferenceStore.getBoolean(\"hide_notification_content\", false)\n\n    /**\n     * For app lock. Will be set when there is a pending timed lock.\n     * Otherwise this pref should be deleted.\n     */\n    fun lastAppClosed() = preferenceStore.getLong(\n        Preference.appStateKey(\"last_app_closed\"),\n        0,\n    )\n\n    enum class SecureScreenMode(val titleRes: StringResource) {\n        ALWAYS(MR.strings.lock_always),\n        INCOGNITO(MR.strings.pref_incognito_mode),\n        NEVER(MR.strings.lock_never),\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/AndroidCookieJar.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport android.webkit.CookieManager\nimport okhttp3.Cookie\nimport okhttp3.CookieJar\nimport okhttp3.HttpUrl\n\nclass AndroidCookieJar : CookieJar {\n\n    private val manager = CookieManager.getInstance()\n\n    override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {\n        val urlString = url.toString()\n\n        cookies.forEach { manager.setCookie(urlString, it.toString()) }\n    }\n\n    override fun loadForRequest(url: HttpUrl): List<Cookie> {\n        return get(url)\n    }\n\n    fun get(url: HttpUrl): List<Cookie> {\n        val cookies = manager.getCookie(url.toString())\n\n        return if (cookies != null && cookies.isNotEmpty()) {\n            cookies.split(\";\").mapNotNull { Cookie.parse(url, it) }\n        } else {\n            emptyList()\n        }\n    }\n\n    fun remove(url: HttpUrl, cookieNames: List<String>? = null, maxAge: Int = -1): Int {\n        val urlString = url.toString()\n        val cookies = manager.getCookie(urlString) ?: return 0\n\n        fun List<String>.filterNames(): List<String> {\n            return if (cookieNames != null) {\n                this.filter { it in cookieNames }\n            } else {\n                this\n            }\n        }\n\n        return cookies.split(\";\")\n            .map { it.substringBefore(\"=\") }\n            .filterNames()\n            .onEach { manager.setCookie(urlString, \"$it=;Max-Age=$maxAge\") }\n            .count()\n    }\n\n    fun removeAll() {\n        manager.removeAllCookies {}\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/DohProviders.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport okhttp3.OkHttpClient\nimport okhttp3.dnsoverhttps.DnsOverHttps\nimport java.net.InetAddress\n\n/**\n * Based on https://github.com/square/okhttp/blob/ef5d0c83f7bbd3a0c0534e7ca23cbc4ee7550f3b/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DohProviders.java\n */\n\nconst val PREF_DOH_CLOUDFLARE = 1\nconst val PREF_DOH_GOOGLE = 2\nconst val PREF_DOH_ADGUARD = 3\nconst val PREF_DOH_QUAD9 = 4\nconst val PREF_DOH_ALIDNS = 5\nconst val PREF_DOH_DNSPOD = 6\nconst val PREF_DOH_360 = 7\nconst val PREF_DOH_QUAD101 = 8\nconst val PREF_DOH_MULLVAD = 9\nconst val PREF_DOH_CONTROLD = 10\nconst val PREF_DOH_NJALLA = 11\nconst val PREF_DOH_SHECAN = 12\nconst val PREF_DOH_LIBREDNS = 13\n\nfun OkHttpClient.Builder.dohCloudflare() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://cloudflare-dns.com/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"162.159.36.1\"),\n            InetAddress.getByName(\"162.159.46.1\"),\n            InetAddress.getByName(\"1.1.1.1\"),\n            InetAddress.getByName(\"1.0.0.1\"),\n            InetAddress.getByName(\"162.159.132.53\"),\n            InetAddress.getByName(\"2606:4700:4700::1111\"),\n            InetAddress.getByName(\"2606:4700:4700::1001\"),\n            InetAddress.getByName(\"2606:4700:4700::0064\"),\n            InetAddress.getByName(\"2606:4700:4700::6400\"),\n        )\n        .build(),\n)\n\nfun OkHttpClient.Builder.dohGoogle() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://dns.google/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"8.8.4.4\"),\n            InetAddress.getByName(\"8.8.8.8\"),\n            InetAddress.getByName(\"2001:4860:4860::8888\"),\n            InetAddress.getByName(\"2001:4860:4860::8844\"),\n        )\n        .build(),\n)\n\n// AdGuard \"Default\" DNS works too but for the sake of making sure no site is blacklisted,\n// we use \"Unfiltered\"\nfun OkHttpClient.Builder.dohAdGuard() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://dns-unfiltered.adguard.com/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"94.140.14.140\"),\n            InetAddress.getByName(\"94.140.14.141\"),\n            InetAddress.getByName(\"2a10:50c0::1:ff\"),\n            InetAddress.getByName(\"2a10:50c0::2:ff\"),\n        )\n        .build(),\n)\n\nfun OkHttpClient.Builder.dohQuad9() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://dns.quad9.net/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"9.9.9.9\"),\n            InetAddress.getByName(\"149.112.112.112\"),\n            InetAddress.getByName(\"2620:fe::fe\"),\n            InetAddress.getByName(\"2620:fe::9\"),\n        )\n        .build(),\n)\n\nfun OkHttpClient.Builder.dohAliDNS() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://dns.alidns.com/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"223.5.5.5\"),\n            InetAddress.getByName(\"223.6.6.6\"),\n            InetAddress.getByName(\"2400:3200::1\"),\n            InetAddress.getByName(\"2400:3200:baba::1\"),\n        )\n        .build(),\n)\n\nfun OkHttpClient.Builder.dohDNSPod() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://doh.pub/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"1.12.12.12\"),\n            InetAddress.getByName(\"120.53.53.53\"),\n        )\n        .build(),\n)\n\nfun OkHttpClient.Builder.doh360() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://doh.360.cn/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"101.226.4.6\"),\n            InetAddress.getByName(\"218.30.118.6\"),\n            InetAddress.getByName(\"123.125.81.6\"),\n            InetAddress.getByName(\"140.207.198.6\"),\n            InetAddress.getByName(\"180.163.249.75\"),\n            InetAddress.getByName(\"101.199.113.208\"),\n            InetAddress.getByName(\"36.99.170.86\"),\n        )\n        .build(),\n)\n\nfun OkHttpClient.Builder.dohQuad101() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://dns.twnic.tw/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"101.101.101.101\"),\n            InetAddress.getByName(\"2001:de4::101\"),\n            InetAddress.getByName(\"2001:de4::102\"),\n        )\n        .build(),\n)\n\n/*\n * Mullvad DoH\n * without ad blocking option\n * Source: https://mullvad.net/en/help/dns-over-https-and-dns-over-tls\n */\nfun OkHttpClient.Builder.dohMullvad() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\" https://dns.mullvad.net/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"194.242.2.2\"),\n            InetAddress.getByName(\"2a07:e340::2\"),\n        )\n        .build(),\n)\n\n/*\n * Control D\n * unfiltered option\n * Source: https://controld.com/free-dns/?\n */\nfun OkHttpClient.Builder.dohControlD() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://freedns.controld.com/p0\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"76.76.2.0\"),\n            InetAddress.getByName(\"76.76.10.0\"),\n            InetAddress.getByName(\"2606:1a40::\"),\n            InetAddress.getByName(\"2606:1a40:1::\"),\n        )\n        .build(),\n)\n\n/*\n * Njalla\n * Non logging and uncensored\n */\nfun OkHttpClient.Builder.dohNajalla() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://dns.njal.la/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"95.215.19.53\"),\n            InetAddress.getByName(\"2001:67c:2354:2::53\"),\n        )\n        .build(),\n)\n\n/**\n * Source: https://shecan.ir/\n */\nfun OkHttpClient.Builder.dohShecan() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://free.shecan.ir/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"178.22.122.100\"),\n            InetAddress.getByName(\"185.51.200.2\"),\n        )\n        .build(),\n)\n\n/**\n * Source: https://libredns.gr/\n */\nfun OkHttpClient.Builder.dohLibreDNS() = dns(\n    DnsOverHttps.Builder().client(build())\n        .url(\"https://doh.libredns.gr/dns-query\".toHttpUrl())\n        .bootstrapDnsHosts(\n            InetAddress.getByName(\"116.202.176.26\"),\n            InetAddress.getByName(\"2a01:4f8:1c0c:8274::1\"),\n        )\n        .build(),\n)\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/JavaScriptEngine.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport android.content.Context\nimport app.cash.quickjs.QuickJs\nimport tachiyomi.core.common.util.lang.withIOContext\n\n/**\n * Util for evaluating JavaScript in sources.\n */\n@Suppress(\"UNUSED\", \"UNCHECKED_CAST\")\nclass JavaScriptEngine(context: Context) {\n\n    /**\n     * Evaluate arbitrary JavaScript code and get the result as a primtive type\n     * (e.g., String, Int).\n     *\n     * @since extensions-lib 1.4\n     * @param script JavaScript to execute.\n     * @return Result of JavaScript code as a primitive type.\n     */\n    suspend fun <T> evaluate(script: String): T = withIOContext {\n        QuickJs.create().use {\n            it.evaluate(script) as T\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor\nimport eu.kanade.tachiyomi.network.interceptor.IgnoreGzipInterceptor\nimport eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor\nimport eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor\nimport okhttp3.Cache\nimport okhttp3.OkHttpClient\nimport okhttp3.brotli.BrotliInterceptor\nimport okhttp3.logging.HttpLoggingInterceptor\nimport java.io.File\nimport java.util.concurrent.TimeUnit\n\nclass NetworkHelper(\n    private val context: Context,\n    private val preferences: NetworkPreferences,\n) {\n\n    val cookieJar = AndroidCookieJar()\n\n    private val clientBuilder: OkHttpClient.Builder = run {\n        val builder = OkHttpClient.Builder()\n            .cookieJar(cookieJar)\n            .connectTimeout(30, TimeUnit.SECONDS)\n            .readTimeout(30, TimeUnit.SECONDS)\n            .callTimeout(2, TimeUnit.MINUTES)\n            .cache(\n                Cache(\n                    directory = File(context.cacheDir, \"network_cache\"),\n                    maxSize = 5L * 1024 * 1024, // 5 MiB\n                ),\n            )\n            .addInterceptor(UncaughtExceptionInterceptor())\n            .addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider))\n            .addNetworkInterceptor(IgnoreGzipInterceptor())\n            .addNetworkInterceptor(BrotliInterceptor)\n\n        if (preferences.verboseLogging().get()) {\n            val httpLoggingInterceptor = HttpLoggingInterceptor().apply {\n                level = HttpLoggingInterceptor.Level.HEADERS\n            }\n            builder.addNetworkInterceptor(httpLoggingInterceptor)\n        }\n\n        when (preferences.dohProvider().get()) {\n            PREF_DOH_CLOUDFLARE -> builder.dohCloudflare()\n            PREF_DOH_GOOGLE -> builder.dohGoogle()\n            PREF_DOH_ADGUARD -> builder.dohAdGuard()\n            PREF_DOH_QUAD9 -> builder.dohQuad9()\n            PREF_DOH_ALIDNS -> builder.dohAliDNS()\n            PREF_DOH_DNSPOD -> builder.dohDNSPod()\n            PREF_DOH_360 -> builder.doh360()\n            PREF_DOH_QUAD101 -> builder.dohQuad101()\n            PREF_DOH_MULLVAD -> builder.dohMullvad()\n            PREF_DOH_CONTROLD -> builder.dohControlD()\n            PREF_DOH_NJALLA -> builder.dohNajalla()\n            PREF_DOH_SHECAN -> builder.dohShecan()\n            PREF_DOH_LIBREDNS -> builder.dohLibreDNS()\n            else -> builder\n        }\n    }\n\n    val nonCloudflareClient = clientBuilder.build()\n\n    val client = clientBuilder\n        .addInterceptor(\n            CloudflareInterceptor(context, cookieJar, ::defaultUserAgentProvider),\n        )\n        .build()\n\n    /**\n     * @deprecated Since extension-lib 1.5\n     */\n    @Deprecated(\"The regular client handles Cloudflare by default\")\n    @Suppress(\"UNUSED\")\n    val cloudflareClient: OkHttpClient = client\n\n    fun defaultUserAgentProvider() = preferences.defaultUserAgent().get().trim()\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/NetworkPreferences.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass NetworkPreferences(\n    private val preferenceStore: PreferenceStore,\n    private val verboseLogging: Boolean = false,\n) {\n\n    fun verboseLogging(): Preference<Boolean> {\n        return preferenceStore.getBoolean(\"verbose_logging\", verboseLogging)\n    }\n\n    fun dohProvider(): Preference<Int> {\n        return preferenceStore.getInt(\"doh_provider\", -1)\n    }\n\n    fun defaultUserAgent(): Preference<String> {\n        return preferenceStore.getString(\n            \"default_user_agent\",\n            \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0\",\n        )\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport kotlinx.serialization.DeserializationStrategy\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.okio.decodeFromBufferedSource\nimport kotlinx.serialization.serializer\nimport okhttp3.Call\nimport okhttp3.Callback\nimport okhttp3.MediaType.Companion.toMediaType\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.Response\nimport rx.Observable\nimport rx.Producer\nimport rx.Subscription\nimport java.io.IOException\nimport java.util.concurrent.atomic.AtomicBoolean\nimport kotlin.coroutines.resumeWithException\n\nval jsonMime = \"application/json; charset=utf-8\".toMediaType()\n\nfun Call.asObservable(): Observable<Response> {\n    return Observable.unsafeCreate { subscriber ->\n        // Since Call is a one-shot type, clone it for each new subscriber.\n        val call = clone()\n\n        // Wrap the call in a helper which handles both unsubscription and backpressure.\n        val requestArbiter = object : AtomicBoolean(), Producer, Subscription {\n            override fun request(n: Long) {\n                if (n == 0L || !compareAndSet(false, true)) return\n\n                try {\n                    val response = call.execute()\n                    if (!subscriber.isUnsubscribed) {\n                        subscriber.onNext(response)\n                        subscriber.onCompleted()\n                    }\n                } catch (e: Exception) {\n                    if (!subscriber.isUnsubscribed) {\n                        subscriber.onError(e)\n                    }\n                }\n            }\n\n            override fun unsubscribe() {\n                call.cancel()\n            }\n\n            override fun isUnsubscribed(): Boolean {\n                return call.isCanceled()\n            }\n        }\n\n        subscriber.add(requestArbiter)\n        subscriber.setProducer(requestArbiter)\n    }\n}\n\nfun Call.asObservableSuccess(): Observable<Response> {\n    return asObservable().doOnNext { response ->\n        if (!response.isSuccessful) {\n            response.close()\n            throw HttpException(response.code)\n        }\n    }\n}\n\n// Based on https://github.com/gildor/kotlin-coroutines-okhttp\n@OptIn(ExperimentalCoroutinesApi::class)\nprivate suspend fun Call.await(callStack: Array<StackTraceElement>): Response {\n    return suspendCancellableCoroutine { continuation ->\n        val callback =\n            object : Callback {\n                override fun onResponse(call: Call, response: Response) {\n                    continuation.resume(response) {\n                        response.body.close()\n                    }\n                }\n\n                override fun onFailure(call: Call, e: IOException) {\n                    // Don't bother with resuming the continuation if it is already cancelled.\n                    if (continuation.isCancelled) return\n                    val exception = IOException(e.message, e).apply { stackTrace = callStack }\n                    continuation.resumeWithException(exception)\n                }\n            }\n\n        enqueue(callback)\n\n        continuation.invokeOnCancellation {\n            try {\n                cancel()\n            } catch (ex: Throwable) {\n                // Ignore cancel exception\n            }\n        }\n    }\n}\n\nsuspend fun Call.await(): Response {\n    val callStack = Exception().stackTrace.run { copyOfRange(1, size) }\n    return await(callStack)\n}\n\n/**\n * @since extensions-lib 1.5\n */\nsuspend fun Call.awaitSuccess(): Response {\n    val callStack = Exception().stackTrace.run { copyOfRange(1, size) }\n    val response = await(callStack)\n    if (!response.isSuccessful) {\n        response.close()\n        throw HttpException(response.code).apply { stackTrace = callStack }\n    }\n    return response\n}\n\nfun OkHttpClient.newCachelessCallWithProgress(request: Request, listener: ProgressListener): Call {\n    val progressClient = newBuilder()\n        .cache(null)\n        .callTimeout(30, java.util.concurrent.TimeUnit.HOURS)\n        .addNetworkInterceptor { chain ->\n            val originalResponse = chain.proceed(chain.request())\n            originalResponse.newBuilder()\n                .body(ProgressResponseBody(originalResponse.body, listener))\n                .build()\n        }\n        .build()\n\n    return progressClient.newCall(request)\n}\n\ncontext(Json)\ninline fun <reified T> Response.parseAs(): T {\n    return decodeFromJsonResponse(serializer(), this)\n}\n\ncontext(Json)\nfun <T> decodeFromJsonResponse(\n    deserializer: DeserializationStrategy<T>,\n    response: Response,\n): T {\n    return response.body.source().use {\n        decodeFromBufferedSource(deserializer, it)\n    }\n}\n\n/**\n * Exception that handles HTTP codes considered not successful by OkHttp.\n * Use it to have a standardized error message in the app across the extensions.\n *\n * @since extensions-lib 1.5\n * @param code [Int] the HTTP status code\n */\nclass HttpException(val code: Int) : IllegalStateException(\"HTTP error $code\")\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/ProgressListener.kt",
    "content": "package eu.kanade.tachiyomi.network\n\ninterface ProgressListener {\n    fun update(bytesRead: Long, contentLength: Long, done: Boolean)\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/ProgressResponseBody.kt",
    "content": "package eu.kanade.tachiyomi.network\n\nimport okhttp3.MediaType\nimport okhttp3.ResponseBody\nimport okio.Buffer\nimport okio.BufferedSource\nimport okio.ForwardingSource\nimport okio.Source\nimport okio.buffer\nimport java.io.IOException\n\nclass ProgressResponseBody(\n    private val responseBody: ResponseBody,\n    private val progressListener: ProgressListener,\n) : ResponseBody() {\n\n    private val bufferedSource: BufferedSource by lazy {\n        source(responseBody.source()).buffer()\n    }\n\n    override fun contentType(): MediaType? {\n        return responseBody.contentType()\n    }\n\n    override fun contentLength(): Long {\n        return responseBody.contentLength()\n    }\n\n    override fun source(): BufferedSource {\n        return bufferedSource\n    }\n\n    private fun source(source: Source): Source {\n        return object : ForwardingSource(source) {\n            var totalBytesRead = 0L\n\n            @Throws(IOException::class)\n            override fun read(sink: Buffer, byteCount: Long): Long {\n                val bytesRead = super.read(sink, byteCount)\n                // read() returns the number of bytes read, or -1 if this source is exhausted.\n                totalBytesRead += if (bytesRead != -1L) bytesRead else 0\n                progressListener.update(\n                    totalBytesRead,\n                    responseBody.contentLength(),\n                    bytesRead == -1L,\n                )\n                return bytesRead\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/Requests.kt",
    "content": "@file:Suppress(\"FunctionName\")\n\npackage eu.kanade.tachiyomi.network\n\nimport okhttp3.CacheControl\nimport okhttp3.FormBody\nimport okhttp3.Headers\nimport okhttp3.HttpUrl\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.RequestBody\nimport okhttp3.Response\nimport java.util.concurrent.TimeUnit.MINUTES\n\nprivate val DEFAULT_CACHE_CONTROL = CacheControl.Builder().maxAge(10, MINUTES).build()\nprivate val DEFAULT_HEADERS = Headers.Builder().build()\nprivate val DEFAULT_BODY: RequestBody = FormBody.Builder().build()\n\nfun GET(\n    url: String,\n    headers: Headers = DEFAULT_HEADERS,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Request {\n    return GET(url.toHttpUrl(), headers, cache)\n}\n\n/**\n * @since extensions-lib 1.4\n */\nfun GET(\n    url: HttpUrl,\n    headers: Headers = DEFAULT_HEADERS,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Request {\n    return Request.Builder()\n        .url(url)\n        .headers(headers)\n        .cacheControl(cache)\n        .build()\n}\n\nfun POST(\n    url: String,\n    headers: Headers = DEFAULT_HEADERS,\n    body: RequestBody = DEFAULT_BODY,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Request {\n    return Request.Builder()\n        .url(url)\n        .post(body)\n        .headers(headers)\n        .cacheControl(cache)\n        .build()\n}\n\nfun PUT(\n    url: String,\n    headers: Headers = DEFAULT_HEADERS,\n    body: RequestBody = DEFAULT_BODY,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Request {\n    return Request.Builder()\n        .url(url)\n        .put(body)\n        .headers(headers)\n        .cacheControl(cache)\n        .build()\n}\n\nfun DELETE(\n    url: String,\n    headers: Headers = DEFAULT_HEADERS,\n    body: RequestBody = DEFAULT_BODY,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Request {\n    return Request.Builder()\n        .url(url)\n        .delete(body)\n        .headers(headers)\n        .cacheControl(cache)\n        .build()\n}\n\n/**\n * Send a GET request\n *\n * @since extensions-lib 16\n *\n * @param url [String]          the url to send the request to\n * @param headers [Headers]     the request headers, defaults to the headers generated by HttpSource.headersBuilder()\n * @param cache [CacheControl]  the cache used, defaults to the one provided by the app\n */\nsuspend fun OkHttpClient.get(\n    url: String,\n    headers: Headers = DEFAULT_HEADERS,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Response {\n    return newCall(GET(url, headers, cache)).awaitSuccess()\n}\n\n/**\n * Send a GET request\n *\n * @since extensions-lib 16\n *\n * @param url [HttpUrl]         the url to send the request to\n * @param headers [Headers]     the request headers, defaults to the headers generated by HttpSource.headersBuilder()\n * @param cache [CacheControl]  the cache used, defaults to the one provided by the app\n */\nsuspend fun OkHttpClient.get(\n    url: HttpUrl,\n    headers: Headers = DEFAULT_HEADERS,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Response {\n    return newCall(GET(url, headers, cache)).awaitSuccess()\n}\n\n/**\n * Send a POST request\n *\n * @since extensions-lib 16\n *\n * @param url [String]          the url to send the request to\n * @param headers [Headers]     the request headers, defaults to the headers generated by HttpSource.headersBuilder()\n * @param body [RequestBody]    the request body, defaults to the one provided by the app\n * @param cache [CacheControl]  the cache used, defaults to the one provided by the app\n */\nsuspend fun OkHttpClient.post(\n    url: String,\n    headers: Headers = DEFAULT_HEADERS,\n    body: RequestBody = DEFAULT_BODY,\n    cache: CacheControl = DEFAULT_CACHE_CONTROL,\n): Response {\n    return newCall(POST(url, headers, body, cache)).awaitSuccess()\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.webkit.WebResourceError\nimport android.webkit.WebResourceRequest\nimport android.webkit.WebView\nimport android.webkit.WebViewClient\nimport android.widget.Toast\nimport androidx.core.content.ContextCompat\nimport eu.kanade.tachiyomi.network.AndroidCookieJar\nimport eu.kanade.tachiyomi.util.system.isOutdated\nimport eu.kanade.tachiyomi.util.system.toast\nimport okhttp3.Cookie\nimport okhttp3.HttpUrl.Companion.toHttpUrl\nimport okhttp3.Interceptor\nimport okhttp3.Request\nimport okhttp3.Response\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport java.io.IOException\nimport java.util.concurrent.CountDownLatch\n\nclass CloudflareInterceptor(\n    private val context: Context,\n    private val cookieManager: AndroidCookieJar,\n    defaultUserAgentProvider: () -> String,\n) : WebViewInterceptor(context, defaultUserAgentProvider) {\n\n    private val executor = ContextCompat.getMainExecutor(context)\n\n    override fun shouldIntercept(response: Response): Boolean {\n        // Check if Cloudflare anti-bot is on\n        return response.code in ERROR_CODES && response.header(\"Server\") in SERVER_CHECK\n    }\n\n    override fun intercept(chain: Interceptor.Chain, request: Request, response: Response): Response {\n        try {\n            response.close()\n            cookieManager.remove(request.url, COOKIE_NAMES, 0)\n            val oldCookie = cookieManager.get(request.url)\n                .firstOrNull { it.name == \"cf_clearance\" }\n            resolveWithWebView(request, oldCookie)\n\n            return chain.proceed(request)\n        }\n        // Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that\n        // we don't crash the entire app\n        catch (e: CloudflareBypassException) {\n            throw IOException(context.stringResource(MR.strings.information_cloudflare_bypass_failure), e)\n        } catch (e: Exception) {\n            throw IOException(e)\n        }\n    }\n\n    @SuppressLint(\"SetJavaScriptEnabled\")\n    private fun resolveWithWebView(originalRequest: Request, oldCookie: Cookie?) {\n        // We need to lock this thread until the WebView finds the challenge solution url, because\n        // OkHttp doesn't support asynchronous interceptors.\n        val latch = CountDownLatch(1)\n\n        var webview: WebView? = null\n\n        var challengeFound = false\n        var cloudflareBypassed = false\n        var isWebViewOutdated = false\n\n        val origRequestUrl = originalRequest.url.toString()\n        val headers = parseHeaders(originalRequest.headers)\n\n        executor.execute {\n            webview = createWebView(originalRequest)\n\n            webview?.webViewClient = object : WebViewClient() {\n                override fun onPageFinished(view: WebView, url: String) {\n                    fun isCloudFlareBypassed(): Boolean {\n                        return cookieManager.get(origRequestUrl.toHttpUrl())\n                            .firstOrNull { it.name == \"cf_clearance\" }\n                            .let { it != null && it != oldCookie }\n                    }\n\n                    if (isCloudFlareBypassed()) {\n                        cloudflareBypassed = true\n                        latch.countDown()\n                    }\n\n                    if (url == origRequestUrl && !challengeFound) {\n                        // The first request didn't return the challenge, abort.\n                        latch.countDown()\n                    }\n                }\n\n                override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {\n                    if (request.isForMainFrame) {\n                        if (error.errorCode in ERROR_CODES) {\n                            // Found the Cloudflare challenge page.\n                            challengeFound = true\n                        } else {\n                            // Unlock thread, the challenge wasn't found.\n                            latch.countDown()\n                        }\n                    }\n                }\n            }\n\n            webview?.loadUrl(origRequestUrl, headers)\n        }\n\n        latch.awaitFor30Seconds()\n\n        executor.execute {\n            if (!cloudflareBypassed) {\n                isWebViewOutdated = webview?.isOutdated() == true\n            }\n\n            webview?.run {\n                stopLoading()\n                destroy()\n            }\n        }\n\n        // Throw exception if we failed to bypass Cloudflare\n        if (!cloudflareBypassed) {\n            // Prompt user to update WebView if it seems too outdated\n            if (isWebViewOutdated) {\n                context.toast(MR.strings.information_webview_outdated, Toast.LENGTH_LONG)\n            }\n\n            throw CloudflareBypassException()\n        }\n    }\n}\n\nprivate val ERROR_CODES = listOf(403, 503)\nprivate val SERVER_CHECK = arrayOf(\"cloudflare-nginx\", \"cloudflare\")\nprivate val COOKIE_NAMES = listOf(\"cf_clearance\")\n\nprivate class CloudflareBypassException : Exception()\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/IgnoreGzipInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport okhttp3.Interceptor\nimport okhttp3.Response\n\n/**\n * To use [okhttp3.brotli.BrotliInterceptor] as a network interceptor,\n * add [IgnoreGzipInterceptor] right before it.\n *\n * This nullifies the transparent gzip of [okhttp3.internal.http.BridgeInterceptor]\n * so gzip and Brotli are explicitly handled by the [okhttp3.brotli.BrotliInterceptor].\n */\nclass IgnoreGzipInterceptor : Interceptor {\n    override fun intercept(chain: Interceptor.Chain): Response {\n        var request = chain.request()\n        if (request.header(\"Accept-Encoding\") == \"gzip\") {\n            request = request.newBuilder().removeHeader(\"Accept-Encoding\").build()\n        }\n        return chain.proceed(request)\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/RateLimitInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport android.os.SystemClock\nimport okhttp3.Interceptor\nimport okhttp3.OkHttpClient\nimport okhttp3.Response\nimport java.io.IOException\nimport java.util.ArrayDeque\nimport java.util.concurrent.Semaphore\nimport java.util.concurrent.TimeUnit\nimport kotlin.time.Duration\nimport kotlin.time.Duration.Companion.seconds\nimport kotlin.time.toDuration\nimport kotlin.time.toDurationUnit\n\n/**\n * An OkHttp interceptor that handles rate limiting.\n *\n * This uses `java.time` APIs and is the legacy method, kept\n * for compatibility reasons with existing extensions.\n *\n * Examples:\n *\n * permits = 5,  period = 1, unit = seconds  =>  5 requests per second\n * permits = 10, period = 2, unit = minutes  =>  10 requests per 2 minutes\n *\n * @since extension-lib 1.3\n *\n * @param permits [Int]   Number of requests allowed within a period of units.\n * @param period [Long]   The limiting duration. Defaults to 1.\n * @param unit [TimeUnit] The unit of time for the period. Defaults to seconds.\n */\n@Deprecated(\"Use the version with kotlin.time APIs instead.\")\nfun OkHttpClient.Builder.rateLimit(\n    permits: Int,\n    period: Long = 1,\n    unit: TimeUnit = TimeUnit.SECONDS,\n) = addInterceptor(RateLimitInterceptor(null, permits, period.toDuration(unit.toDurationUnit())))\n\n/**\n * An OkHttp interceptor that handles rate limiting.\n *\n * Examples:\n *\n * permits = 5,  period = 1.seconds  =>  5 requests per second\n * permits = 10, period = 2.minutes  =>  10 requests per 2 minutes\n *\n * @since extension-lib 1.5\n *\n * @param permits [Int]     Number of requests allowed within a period of units.\n * @param period [Duration] The limiting duration. Defaults to 1.seconds.\n */\nfun OkHttpClient.Builder.rateLimit(permits: Int, period: Duration = 1.seconds) =\n    addInterceptor(RateLimitInterceptor(null, permits, period))\n\n/** We can probably accept domains or wildcards by comparing with [endsWith], etc. */\n@Suppress(\"PLATFORM_CLASS_MAPPED_TO_KOTLIN\")\ninternal class RateLimitInterceptor(\n    private val host: String?,\n    private val permits: Int,\n    period: Duration,\n) : Interceptor {\n\n    private val requestQueue = ArrayDeque<Long>(permits)\n    private val rateLimitMillis = period.inWholeMilliseconds\n    private val fairLock = Semaphore(1, true)\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val call = chain.call()\n        if (call.isCanceled()) throw IOException(\"Canceled\")\n\n        val request = chain.request()\n        when (host) {\n            null, request.url.host -> {} // need rate limit\n            else -> return chain.proceed(request)\n        }\n\n        try {\n            fairLock.acquire()\n        } catch (e: InterruptedException) {\n            throw IOException(e)\n        }\n\n        val requestQueue = this.requestQueue\n        val timestamp: Long\n\n        try {\n            synchronized(requestQueue) {\n                while (requestQueue.size >= permits) { // queue is full, remove expired entries\n                    val periodStart = SystemClock.elapsedRealtime() - rateLimitMillis\n                    var hasRemovedExpired = false\n                    while (!requestQueue.isEmpty() && requestQueue.first <= periodStart) {\n                        requestQueue.removeFirst()\n                        hasRemovedExpired = true\n                    }\n                    if (call.isCanceled()) {\n                        throw IOException(\"Canceled\")\n                    } else if (hasRemovedExpired) {\n                        break\n                    } else {\n                        try { // wait for the first entry to expire, or notified by cached response\n                            (requestQueue as Object).wait(requestQueue.first - periodStart)\n                        } catch (_: InterruptedException) {\n                            continue\n                        }\n                    }\n                }\n\n                // add request to queue\n                timestamp = SystemClock.elapsedRealtime()\n                requestQueue.addLast(timestamp)\n            }\n        } finally {\n            fairLock.release()\n        }\n\n        val response = chain.proceed(request)\n        if (response.networkResponse == null) { // response is cached, remove it from queue\n            synchronized(requestQueue) {\n                if (requestQueue.isEmpty() || timestamp < requestQueue.first) return@synchronized\n                requestQueue.removeFirstOccurrence(timestamp)\n                (requestQueue as Object).notifyAll()\n            }\n        }\n\n        return response\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/SpecificHostRateLimitInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport okhttp3.HttpUrl\nimport okhttp3.HttpUrl.Companion.toHttpUrlOrNull\nimport okhttp3.OkHttpClient\nimport java.util.concurrent.TimeUnit\nimport kotlin.time.Duration\nimport kotlin.time.Duration.Companion.seconds\nimport kotlin.time.toDuration\nimport kotlin.time.toDurationUnit\n\n/**\n * An OkHttp interceptor that handles given url host's rate limiting.\n *\n * This uses Java Time APIs and is the legacy method, kept\n * for compatibility reasons with existing extensions.\n *\n * Examples:\n *\n * httpUrl = \"api.manga.com\".toHttpUrlOrNull(), permits = 5, period = 1, unit = seconds  =>  5 requests per second to api.manga.com\n * httpUrl = \"imagecdn.manga.com\".toHttpUrlOrNull(), permits = 10, period = 2, unit = minutes  =>  10 requests per 2 minutes to imagecdn.manga.com\n *\n * @since extension-lib 1.3\n *\n * @param httpUrl [HttpUrl] The url host that this interceptor should handle. Will get url's host by using HttpUrl.host()\n * @param permits [Int]   Number of requests allowed within a period of units.\n * @param period [Long]   The limiting duration. Defaults to 1.\n * @param unit [TimeUnit] The unit of time for the period. Defaults to seconds.\n */\n@Deprecated(\"Use the version with kotlin.time APIs instead.\")\nfun OkHttpClient.Builder.rateLimitHost(\n    httpUrl: HttpUrl,\n    permits: Int,\n    period: Long = 1,\n    unit: TimeUnit = TimeUnit.SECONDS,\n) = addInterceptor(\n    RateLimitInterceptor(httpUrl.host, permits, period.toDuration(unit.toDurationUnit())),\n)\n\n/**\n * An OkHttp interceptor that handles given url host's rate limiting.\n *\n * Examples:\n *\n * httpUrl = \"https://api.manga.com\".toHttpUrlOrNull(), permits = 5, period = 1.seconds =>  5 requests per second to api.manga.com\n * httpUrl = \"https://imagecdn.manga.com\".toHttpUrlOrNull(), permits = 10, period = 2.minutes  =>  10 requests per 2 minutes to imagecdn.manga.com\n *\n * @since extension-lib 1.5\n *\n * @param httpUrl [HttpUrl] The url host that this interceptor should handle. Will get url's host by using HttpUrl.host()\n * @param permits [Int]     Number of requests allowed within a period of units.\n * @param period [Duration] The limiting duration. Defaults to 1.seconds.\n */\n@Suppress(\"UNUSED\")\nfun OkHttpClient.Builder.rateLimitHost(\n    httpUrl: HttpUrl,\n    permits: Int,\n    period: Duration = 1.seconds,\n) = addInterceptor(RateLimitInterceptor(httpUrl.host, permits, period))\n\n/**\n * An OkHttp interceptor that handles given url host's rate limiting.\n *\n * Examples:\n *\n * url = \"https://api.manga.com\", permits = 5, period = 1.seconds =>  5 requests per second to api.manga.com\n * url = \"https://imagecdn.manga.com\", permits = 10, period = 2.minutes  =>  10 requests per 2 minutes to imagecdn.manga.com\n *\n * @since extension-lib 1.5\n *\n * @param url [String]      The url host that this interceptor should handle. Will get url's host by using HttpUrl.host()\n * @param permits [Int]     Number of requests allowed within a period of units.\n * @param period [Duration] The limiting duration. Defaults to 1.seconds.\n */\n@Suppress(\"UNUSED\")\nfun OkHttpClient.Builder.rateLimitHost(url: String, permits: Int, period: Duration = 1.seconds) =\n    addInterceptor(RateLimitInterceptor(url.toHttpUrlOrNull()?.host, permits, period))\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport okhttp3.Interceptor\nimport okhttp3.Response\nimport java.io.IOException\n\n/**\n * Catches any uncaught exceptions from later in the chain and rethrows as a non-fatal\n * IOException to avoid catastrophic failure.\n *\n * This should be the first interceptor in the client.\n *\n * See https://square.github.io/okhttp/4.x/okhttp/okhttp3/-interceptor/\n */\nclass UncaughtExceptionInterceptor : Interceptor {\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        return try {\n            chain.proceed(chain.request())\n        } catch (e: Exception) {\n            if (e is IOException) {\n                throw e\n            } else {\n                throw IOException(e)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/UserAgentInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport okhttp3.Interceptor\nimport okhttp3.Response\n\nclass UserAgentInterceptor(\n    private val defaultUserAgentProvider: () -> String,\n) : Interceptor {\n\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val originalRequest = chain.request()\n\n        return if (originalRequest.header(\"User-Agent\").isNullOrEmpty()) {\n            val newRequest = originalRequest\n                .newBuilder()\n                .removeHeader(\"User-Agent\")\n                .addHeader(\"User-Agent\", defaultUserAgentProvider())\n                .build()\n            chain.proceed(newRequest)\n        } else {\n            chain.proceed(originalRequest)\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/network/interceptor/WebViewInterceptor.kt",
    "content": "package eu.kanade.tachiyomi.network.interceptor\n\nimport android.content.Context\nimport android.os.Build\nimport android.webkit.WebSettings\nimport android.webkit.WebView\nimport android.widget.Toast\nimport eu.kanade.tachiyomi.util.system.DeviceUtil\nimport eu.kanade.tachiyomi.util.system.WebViewUtil\nimport eu.kanade.tachiyomi.util.system.setDefaultSettings\nimport eu.kanade.tachiyomi.util.system.toast\nimport kotlinx.coroutines.DelicateCoroutinesApi\nimport okhttp3.Headers\nimport okhttp3.Interceptor\nimport okhttp3.Request\nimport okhttp3.Response\nimport tachiyomi.core.common.util.lang.launchUI\nimport tachiyomi.i18n.MR\nimport java.util.Locale\nimport java.util.concurrent.CountDownLatch\nimport java.util.concurrent.TimeUnit\n\nabstract class WebViewInterceptor(\n    private val context: Context,\n    private val defaultUserAgentProvider: () -> String,\n) : Interceptor {\n\n    /**\n     * When this is called, it initializes the WebView if it wasn't already. We use this to avoid\n     * blocking the main thread too much. If used too often we could consider moving it to the\n     * Application class.\n     */\n    private val initWebView by lazy {\n        // Crashes on some devices. We skip this in some cases since the only impact is slower\n        // WebView init in those rare cases.\n        // See https://bugs.chromium.org/p/chromium/issues/detail?id=1279562\n        if (DeviceUtil.isMiui || Build.VERSION.SDK_INT == Build.VERSION_CODES.S && DeviceUtil.isSamsung) {\n            return@lazy\n        }\n\n        try {\n            WebSettings.getDefaultUserAgent(context)\n        } catch (_: Exception) {\n            // Avoid some crashes like when Chrome/WebView is being updated.\n        }\n    }\n\n    abstract fun shouldIntercept(response: Response): Boolean\n\n    abstract fun intercept(chain: Interceptor.Chain, request: Request, response: Response): Response\n\n    @OptIn(DelicateCoroutinesApi::class)\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val request = chain.request()\n        val response = chain.proceed(request)\n        if (!shouldIntercept(response)) {\n            return response\n        }\n\n        if (!WebViewUtil.supportsWebView(context)) {\n            launchUI {\n                context.toast(MR.strings.information_webview_required, Toast.LENGTH_LONG)\n            }\n            return response\n        }\n        initWebView\n\n        return intercept(chain, request, response)\n    }\n\n    fun parseHeaders(headers: Headers): Map<String, String> {\n        return headers\n            // Keeping unsafe header makes webview throw [net::ERR_INVALID_ARGUMENT]\n            .filter { (name, value) ->\n                isRequestHeaderSafe(name, value)\n            }\n            .groupBy(keySelector = { (name, _) -> name }) { (_, value) -> value }\n            .mapValues { it.value.getOrNull(0).orEmpty() }\n    }\n\n    fun CountDownLatch.awaitFor30Seconds() {\n        await(30, TimeUnit.SECONDS)\n    }\n\n    fun createWebView(request: Request): WebView {\n        return WebView(context).apply {\n            setDefaultSettings()\n            // Avoid sending empty User-Agent, Chromium WebView will reset to default if empty\n            settings.userAgentString = request.header(\"User-Agent\") ?: defaultUserAgentProvider()\n        }\n    }\n}\n\n// Based on [IsRequestHeaderSafe] in https://source.chromium.org/chromium/chromium/src/+/main:services/network/public/cpp/header_util.cc\nprivate fun isRequestHeaderSafe(_name: String, _value: String): Boolean {\n    val name = _name.lowercase(Locale.ENGLISH)\n    val value = _value.lowercase(Locale.ENGLISH)\n    if (name in unsafeHeaderNames || name.startsWith(\"proxy-\")) return false\n    if (name == \"connection\" && value == \"upgrade\") return false\n    return true\n}\nprivate val unsafeHeaderNames =\n    listOf(\n        \"content-length\",\n        \"host\",\n        \"trailer\",\n        \"te\",\n        \"upgrade\",\n        \"cookie2\",\n        \"keep-alive\",\n        \"transfer-encoding\",\n        \"set-cookie\",\n    )\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/lang/Hash.kt",
    "content": "package eu.kanade.tachiyomi.util.lang\n\nimport java.security.MessageDigest\n\nobject Hash {\n\n    private val chars = charArrayOf(\n        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n        'a', 'b', 'c', 'd', 'e', 'f',\n    )\n\n    private val MD5 get() = MessageDigest.getInstance(\"MD5\")\n\n    private val SHA256 get() = MessageDigest.getInstance(\"SHA-256\")\n\n    fun sha256(bytes: ByteArray): String {\n        return encodeHex(SHA256.digest(bytes))\n    }\n\n    fun sha256(string: String): String {\n        return sha256(string.toByteArray())\n    }\n\n    fun md5(bytes: ByteArray): String {\n        return encodeHex(MD5.digest(bytes))\n    }\n\n    fun md5(string: String): String {\n        return md5(string.toByteArray())\n    }\n\n    private fun encodeHex(data: ByteArray): String {\n        val l = data.size\n        val out = CharArray(l shl 1)\n        var i = 0\n        var j = 0\n        while (i < l) {\n            out[j++] = chars[(240 and data[i].toInt()).ushr(4)]\n            out[j++] = chars[15 and data[i].toInt()]\n            i++\n        }\n        return String(out)\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/lang/StringExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.lang\n\nimport androidx.core.text.parseAsHtml\nimport net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator\nimport java.nio.charset.StandardCharsets\nimport kotlin.math.floor\n\n/**\n * Replaces the given string to have at most [count] characters using [replacement] at its end.\n * If [replacement] is longer than [count] an exception will be thrown when `length > count`.\n */\nfun String.chop(count: Int, replacement: String = \"…\"): String {\n    return if (length > count) {\n        take(count - replacement.length) + replacement\n    } else {\n        this\n    }\n}\n\n/**\n * Replaces the given string to have at most [count] characters using [replacement] near the center.\n * If [replacement] is longer than [count] an exception will be thrown when `length > count`.\n */\nfun String.truncateCenter(count: Int, replacement: String = \"...\"): String {\n    if (length <= count) {\n        return this\n    }\n\n    val pieceLength: Int = floor((count - replacement.length).div(2.0)).toInt()\n\n    return \"${take(pieceLength)}$replacement${takeLast(pieceLength)}\"\n}\n\n/**\n * Case-insensitive natural comparator for strings.\n */\nfun String.compareToCaseInsensitiveNaturalOrder(other: String): Int {\n    val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()\n    return comparator.compare(this, other)\n}\n\n/**\n * Returns the size of the string as the number of bytes.\n */\nfun String.byteSize(): Int {\n    return toByteArray(StandardCharsets.UTF_8).size\n}\n\n/**\n * Returns a string containing the first [n] bytes from this string, or the entire string if this\n * string is shorter.\n */\nfun String.takeBytes(n: Int): String {\n    val bytes = toByteArray(StandardCharsets.UTF_8)\n    return if (bytes.size <= n) {\n        this\n    } else {\n        bytes.decodeToString(endIndex = n).replace(\"\\uFFFD\", \"\")\n    }\n}\n\n/**\n * HTML-decode the string\n */\nfun String.htmlDecode(): String {\n    return this.parseAsHtml().toString()\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/storage/DiskUtil.kt",
    "content": "package eu.kanade.tachiyomi.util.storage\n\nimport android.content.Context\nimport android.media.MediaScannerConnection\nimport android.net.Uri\nimport android.os.Environment\nimport android.os.StatFs\nimport androidx.core.content.ContextCompat\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.util.lang.Hash\nimport java.io.File\n\nobject DiskUtil {\n\n    /**\n     * Returns the root folders of all the available external storages.\n     */\n    fun getExternalStorages(context: Context): List<File> {\n        return ContextCompat.getExternalFilesDirs(context, null)\n            .filterNotNull()\n            .mapNotNull {\n                val file = File(it.absolutePath.substringBefore(\"/Android/\"))\n                val state = Environment.getExternalStorageState(file)\n                if (state == Environment.MEDIA_MOUNTED || state == Environment.MEDIA_MOUNTED_READ_ONLY) {\n                    file\n                } else {\n                    null\n                }\n            }\n    }\n\n    fun hashKeyForDisk(key: String): String {\n        return Hash.md5(key)\n    }\n\n    fun getDirectorySize(f: File): Long {\n        var size: Long = 0\n        if (f.isDirectory) {\n            for (file in f.listFiles().orEmpty()) {\n                size += getDirectorySize(file)\n            }\n        } else {\n            size = f.length()\n        }\n        return size\n    }\n\n    /**\n     * Gets the total space for the disk that a file path points to, in bytes.\n     */\n    fun getTotalStorageSpace(file: File): Long {\n        return try {\n            val stat = StatFs(file.absolutePath)\n            stat.blockCountLong * stat.blockSizeLong\n        } catch (_: Exception) {\n            -1L\n        }\n    }\n\n    /**\n     * Gets the available space for the disk that a file path points to, in bytes.\n     */\n    fun getAvailableStorageSpace(file: File): Long {\n        return try {\n            val stat = StatFs(file.absolutePath)\n            stat.availableBlocksLong * stat.blockSizeLong\n        } catch (_: Exception) {\n            -1L\n        }\n    }\n\n    /**\n     * Gets the available space for the disk that a file path points to, in bytes.\n     */\n    fun getAvailableStorageSpace(f: UniFile): Long {\n        return try {\n            val stat = StatFs(f.uri.path)\n            stat.availableBlocksLong * stat.blockSizeLong\n        } catch (_: Exception) {\n            -1L\n        }\n    }\n\n    /**\n     * Don't display downloaded chapters in gallery apps creating `.nomedia`.\n     */\n    fun createNoMediaFile(dir: UniFile?, context: Context?) {\n        if (dir != null && dir.exists()) {\n            val nomedia = dir.findFile(NOMEDIA_FILE)\n            if (nomedia == null) {\n                dir.createFile(NOMEDIA_FILE)\n                context?.let { scanMedia(it, dir.uri) }\n            }\n        }\n    }\n\n    /**\n     * Scans the given file so that it can be shown in gallery apps, for example.\n     */\n    fun scanMedia(context: Context, uri: Uri) {\n        MediaScannerConnection.scanFile(context, arrayOf(uri.path), null, null)\n    }\n\n    /**\n     * Mutate the given filename to make it valid for a FAT filesystem,\n     * replacing any invalid characters with \"_\". This method doesn't allow hidden files (starting\n     * with a dot), but you can manually add it later.\n     */\n    fun buildValidFilename(origName: String): String {\n        val name = origName.trim('.', ' ')\n        if (name.isEmpty()) {\n            return \"(invalid)\"\n        }\n        val sb = StringBuilder(name.length)\n        name.forEach { c ->\n            if (isValidFatFilenameChar(c)) {\n                sb.append(c)\n            } else {\n                sb.append('_')\n            }\n        }\n        // Even though vfat allows 255 UCS-2 chars, we might eventually write to\n        // ext4 through a FUSE layer, so use that limit minus 15 reserved characters.\n        return sb.toString().take(240)\n    }\n\n    /**\n     * Returns true if the given character is a valid filename character, false otherwise.\n     */\n    private fun isValidFatFilenameChar(c: Char): Boolean {\n        if (0x00.toChar() <= c && c <= 0x1f.toChar()) {\n            return false\n        }\n        return when (c) {\n            '\"', '*', '/', ':', '<', '>', '?', '\\\\', '|', 0x7f.toChar() -> false\n            else -> true\n        }\n    }\n\n    const val NOMEDIA_FILE = \".nomedia\"\n\n    // Safe theoretical max filename size is 255 bytes and 1 char = 2-4 bytes (UTF-8)\n    const val MAX_FILE_NAME_BYTES = 250\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/storage/FFmpegUtils.kt",
    "content": "package eu.kanade.tachiyomi.util.storage\n\nimport android.content.Context\nimport android.net.Uri\nimport com.arthenica.ffmpegkit.FFmpegKitConfig\nimport com.hippo.unifile.UniFile\nimport java.io.File\n\nfun String.toFFmpegString(context: Context): String {\n    return File(this).getUriCompat(context).toFFmpegString(context)\n}\n\nfun Uri.toFFmpegString(context: Context): String {\n    return if (this.scheme == \"content\") {\n        FFmpegKitConfig.getSafParameter(context, this, \"rw\")\n    } else {\n        this.path!!\n    }.replace(\"\\\"\", \"\\\\\\\"\")\n}\n\nfun UniFile.toFFmpegString(context: Context? = null): String {\n    return if (context != null && this.uri.scheme == \"content\") {\n        FFmpegKitConfig.getSafParameter(context, this.uri, \"rw\")\n    } else {\n        this.filePath!!\n    }.replace(\"\\\"\", \"\\\\\\\"\")\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/storage/FileExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.storage\n\nimport android.content.Context\nimport android.net.Uri\nimport androidx.core.content.FileProvider\nimport java.io.File\n\nval Context.cacheImageDir: File\n    get() = File(cacheDir, \"shared_image\")\n\n/**\n * Returns the uri of a file\n *\n * @param context context of application\n */\nfun File.getUriCompat(context: Context): Uri {\n    return FileProvider.getUriForFile(context, context.packageName + \".provider\", this)\n}\n\n/**\n * Copies this file to the given [target] file while marking the file as read-only.\n *\n * @see File.copyTo\n */\nfun File.copyAndSetReadOnlyTo(target: File, overwrite: Boolean = false, bufferSize: Int = DEFAULT_BUFFER_SIZE): File {\n    if (!this.exists()) {\n        throw NoSuchFileException(file = this, reason = \"The source file doesn't exist.\")\n    }\n\n    if (target.exists()) {\n        if (!overwrite) {\n            throw FileAlreadyExistsException(\n                file = this,\n                other = target,\n                reason = \"The destination file already exists.\",\n            )\n        } else if (!target.delete()) {\n            throw FileAlreadyExistsException(\n                file = this,\n                other = target,\n                reason = \"Tried to overwrite the destination, but failed to delete it.\",\n            )\n        }\n    }\n\n    if (this.isDirectory) {\n        if (!target.mkdirs()) {\n            throw FileSystemException(file = this, other = target, reason = \"Failed to create target directory.\")\n        }\n    } else {\n        target.parentFile?.mkdirs()\n\n        this.inputStream().use { input ->\n            target.outputStream().use { output ->\n                // Set read-only\n                target.setReadOnly()\n\n                input.copyTo(output, bufferSize)\n            }\n        }\n    }\n\n    return target\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/system/DensityExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.res.Resources\n\n/**\n * Converts to px.\n */\nval Int.dpToPx: Int\n    get() = (this * Resources.getSystem().displayMetrics.density).toInt()\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/system/DeviceUtil.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.annotation.SuppressLint\nimport android.app.ActivityManager\nimport android.content.Context\nimport android.os.Build\nimport androidx.core.content.getSystemService\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\n\nobject DeviceUtil {\n\n    val isMiui: Boolean by lazy {\n        getSystemProperty(\"ro.miui.ui.version.name\")?.isNotEmpty() ?: false\n    }\n\n    /**\n     * Extracts the MIUI major version code from a string like \"V12.5.3.0.QFGMIXM\".\n     *\n     * @return MIUI major version code (e.g., 13) or null if can't be parsed.\n     */\n    val miuiMajorVersion: Int? by lazy {\n        if (!isMiui) return@lazy null\n\n        Build.VERSION.INCREMENTAL\n            .substringBefore('.')\n            .trimStart('V')\n            .toIntOrNull()\n    }\n\n    @SuppressLint(\"PrivateApi\")\n    fun isMiuiOptimizationDisabled(): Boolean {\n        val sysProp = getSystemProperty(\"persist.sys.miui_optimization\")\n        if (sysProp == \"0\" || sysProp == \"false\") {\n            return true\n        }\n\n        return try {\n            Class.forName(\"android.miui.AppOpsUtils\")\n                .getDeclaredMethod(\"isXOptMode\")\n                .invoke(null) as Boolean\n        } catch (e: Exception) {\n            false\n        }\n    }\n\n    val isSamsung: Boolean by lazy {\n        Build.MANUFACTURER.equals(\"samsung\", ignoreCase = true)\n    }\n\n    val oneUiVersion: Double? by lazy {\n        try {\n            val semPlatformIntField = Build.VERSION::class.java.getDeclaredField(\"SEM_PLATFORM_INT\")\n            val version = semPlatformIntField.getInt(null) - 90000\n            if (version < 0) {\n                1.0\n            } else {\n                ((version / 10000).toString() + \".\" + version % 10000 / 100).toDouble()\n            }\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    /**\n     * A list of package names that may be incorrectly resolved as usable browsers by\n     * the system.\n     *\n     * If these are resolved for [android.content.Intent.ACTION_VIEW], it prevents the\n     * system from opening a proper browser or any usable app .\n     *\n     * Some of them may only be present on certain manufacturer's devices.\n     */\n    val invalidDefaultBrowsers = listOf(\n        \"android\",\n        // Honor\n        \"com.hihonor.android.internal.app\",\n        // Huawei\n        \"com.huawei.android.internal.app\",\n        // Lenovo\n        \"com.zui.resolver\",\n        // Infinix\n        \"com.transsion.resolver\",\n        // Xiaomi Redmi\n        \"com.android.intentresolver\",\n    )\n\n    /**\n     * ActivityManager#isLowRamDevice is based on a system property, which isn't\n     * necessarily trustworthy. 1GB is supposedly the regular threshold.\n     *\n     * Instead, we consider anything with less than 3GB of RAM as low memory\n     * considering how heavy image processing can be.\n     */\n    fun isLowRamDevice(context: Context): Boolean {\n        val memInfo = ActivityManager.MemoryInfo()\n        context.getSystemService<ActivityManager>()!!.getMemoryInfo(memInfo)\n        val totalMemBytes = memInfo.totalMem\n        return totalMemBytes < 3L * 1024 * 1024 * 1024\n    }\n\n    @SuppressLint(\"PrivateApi\")\n    private fun getSystemProperty(key: String?): String? {\n        return try {\n            Class.forName(\"android.os.SystemProperties\")\n                .getDeclaredMethod(\"get\", String::class.java)\n                .invoke(null, key) as String\n        } catch (e: Exception) {\n            logcat(LogPriority.WARN, e) { \"Unable to use SystemProperties.get()\" }\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/system/GLUtil.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport javax.microedition.khronos.egl.EGL10\nimport javax.microedition.khronos.egl.EGLConfig\nimport javax.microedition.khronos.egl.EGLContext\nimport kotlin.math.max\n\nobject GLUtil {\n    val DEVICE_TEXTURE_LIMIT: Int by lazy {\n        // Get EGL Display\n        val egl = EGLContext.getEGL() as EGL10\n        val display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY)\n\n        // Initialise\n        val version = IntArray(2)\n        egl.eglInitialize(display, version)\n\n        // Query total number of configurations\n        val totalConfigurations = IntArray(1)\n        egl.eglGetConfigs(display, null, 0, totalConfigurations)\n\n        // Query actual list configurations\n        val configurationsList = arrayOfNulls<EGLConfig>(totalConfigurations[0])\n        egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations)\n\n        val textureSize = IntArray(1)\n        var maximumTextureSize = 0\n\n        // Iterate through all the configurations to located the maximum texture size\n        for (i in 0..<totalConfigurations[0]) {\n            // Only need to check for width since opengl textures are always squared\n            egl.eglGetConfigAttrib(\n                display,\n                configurationsList[i],\n                EGL10.EGL_MAX_PBUFFER_WIDTH,\n                textureSize,\n            )\n\n            // Keep track of the maximum texture size\n            if (maximumTextureSize < textureSize[0]) maximumTextureSize = textureSize[0]\n        }\n\n        // Release\n        egl.eglTerminate(display)\n\n        // Return largest texture size found (after making it a multiplier of [Multiplier]), or default\n        max(maximumTextureSize, SAFE_TEXTURE_LIMIT)\n    }\n\n    const val SAFE_TEXTURE_LIMIT: Int = 2048\n\n    val CUSTOM_TEXTURE_LIMIT_OPTIONS: List<Int> by lazy {\n        val steps = DEVICE_TEXTURE_LIMIT / MULTIPLIER\n        buildList(steps) {\n            add(DEVICE_TEXTURE_LIMIT)\n            for (step in steps downTo 2) {\n                val value = step * MULTIPLIER\n                if (value >= DEVICE_TEXTURE_LIMIT) continue\n                add(value)\n            }\n        }\n    }\n}\n\nprivate const val MULTIPLIER: Int = 1024\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.content.Context\nimport android.widget.Toast\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.core.common.i18n.stringResource\n\n/**\n * Display a toast in this context.\n *\n * @param resource the text resource.\n * @param duration the duration of the toast. Defaults to short.\n */\nfun Context.toast(\n    resource: StringResource,\n    duration: Int = Toast.LENGTH_SHORT,\n    block: (Toast) -> Unit = {},\n): Toast {\n    return toast(stringResource(resource), duration, block)\n}\n\n/**\n * Display a toast in this context.\n *\n * @param text the text to display.\n * @param duration the duration of the toast. Defaults to short.\n */\nfun Context.toast(text: String?, duration: Int = Toast.LENGTH_SHORT, block: (Toast) -> Unit = {}): Toast {\n    return Toast.makeText(applicationContext, text.orEmpty(), duration).also {\n        block(it)\n        it.show()\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt",
    "content": "package eu.kanade.tachiyomi.util.system\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.pm.PackageManager\nimport android.webkit.CookieManager\nimport android.webkit.WebSettings\nimport android.webkit.WebView\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport kotlin.coroutines.resume\n\nobject WebViewUtil {\n    private const val CHROME_PACKAGE = \"com.android.chrome\"\n    private const val SYSTEM_SETTINGS_PACKAGE = \"com.android.settings\"\n\n    const val MINIMUM_WEBVIEW_VERSION = 118\n\n    /**\n     * Uses the WebView's user agent string to create something similar to what Chrome on Android\n     * would return.\n     *\n     * Example of WebView user agent string:\n     *   Mozilla/5.0 (Linux; Android 13; Pixel 7 Build/TQ3A.230901.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36\n     *\n     * Example of Chrome on Android:\n     *   Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.3\n     */\n    fun getInferredUserAgent(context: Context): String {\n        return WebView(context)\n            .getDefaultUserAgentString()\n            .replace(\"; Android .*?\\\\)\".toRegex(), \"; Android 10; K)\")\n            .replace(\"Version/.* Chrome/\".toRegex(), \"Chrome/\")\n    }\n\n    fun getVersion(context: Context): String {\n        val webView = WebView.getCurrentWebViewPackage() ?: return \"how did you get here?\"\n        val pm = context.packageManager\n        val label = webView.applicationInfo!!.loadLabel(pm)\n        val version = webView.versionName\n        return \"$label $version\"\n    }\n\n    fun supportsWebView(context: Context): Boolean {\n        try {\n            // May throw android.webkit.WebViewFactory$MissingWebViewPackageException if WebView\n            // is not installed\n            CookieManager.getInstance()\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e)\n            return false\n        }\n\n        return context.packageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)\n    }\n\n    fun spoofedPackageName(context: Context): String {\n        return try {\n            context.packageManager.getPackageInfo(CHROME_PACKAGE, PackageManager.GET_META_DATA)\n\n            CHROME_PACKAGE\n        } catch (_: PackageManager.NameNotFoundException) {\n            SYSTEM_SETTINGS_PACKAGE\n        }\n    }\n}\n\nfun WebView.isOutdated(): Boolean {\n    return getWebViewMajorVersion() < WebViewUtil.MINIMUM_WEBVIEW_VERSION\n}\n\nsuspend fun WebView.getHtml(): String = suspendCancellableCoroutine {\n    evaluateJavascript(\"document.documentElement.outerHTML\") { html -> it.resume(html) }\n}\n\n@SuppressLint(\"SetJavaScriptEnabled\")\nfun WebView.setDefaultSettings() {\n    with(settings) {\n        javaScriptEnabled = true\n        domStorageEnabled = true\n        useWideViewPort = true\n        loadWithOverviewMode = true\n        cacheMode = WebSettings.LOAD_DEFAULT\n\n        // Allow zooming\n        setSupportZoom(true)\n        builtInZoomControls = true\n        displayZoomControls = false\n    }\n\n    CookieManager.getInstance().acceptThirdPartyCookies(this)\n}\n\nprivate fun WebView.getWebViewMajorVersion(): Int {\n    val uaRegexMatch = \"\"\".*Chrome/(\\d+)\\..*\"\"\".toRegex().matchEntire(getDefaultUserAgentString())\n    return if (uaRegexMatch != null && uaRegexMatch.groupValues.size > 1) {\n        uaRegexMatch.groupValues[1].toInt()\n    } else {\n        0\n    }\n}\n\n// Based on https://stackoverflow.com/a/29218966\nprivate fun WebView.getDefaultUserAgentString(): String {\n    val originalUA: String = settings.userAgentString\n\n    // Next call to getUserAgentString() will get us the default\n    settings.userAgentString = null\n    val defaultUserAgentString = settings.userAgentString\n\n    // Revert to original UA string\n    settings.userAgentString = originalUA\n\n    return defaultUserAgentString\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/i18n/Localize.kt",
    "content": "package tachiyomi.core.common.i18n\n\nimport android.content.Context\nimport dev.icerock.moko.resources.PluralsResource\nimport dev.icerock.moko.resources.StringResource\nimport dev.icerock.moko.resources.desc.Plural\nimport dev.icerock.moko.resources.desc.PluralFormatted\nimport dev.icerock.moko.resources.desc.Resource\nimport dev.icerock.moko.resources.desc.ResourceFormatted\nimport dev.icerock.moko.resources.desc.StringDesc\n\nfun Context.stringResource(resource: StringResource): String {\n    return StringDesc.Resource(resource).toString(this).fixed()\n}\n\nfun Context.stringResource(resource: StringResource, vararg args: Any): String {\n    return StringDesc.ResourceFormatted(resource, *args).toString(this).fixed()\n}\n\nfun Context.pluralStringResource(resource: PluralsResource, count: Int): String {\n    return StringDesc.Plural(resource, count).toString(this).fixed()\n}\n\nfun Context.pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String {\n    return StringDesc.PluralFormatted(resource, count, *args).toString(this).fixed()\n}\n\n// TODO: janky workaround for https://github.com/icerockdev/moko-resources/issues/337\nprivate fun String.fixed() =\n    this.replace(\"\"\"\\\"\"\", \"\"\"\"\"\"\")\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/AndroidPreference.kt",
    "content": "package tachiyomi.core.common.preference\n\nimport android.content.SharedPreferences\nimport android.content.SharedPreferences.Editor\nimport androidx.core.content.edit\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.conflate\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.flow.stateIn\nimport tachiyomi.core.common.util.system.logcat\n\nsealed class AndroidPreference<T>(\n    private val preferences: SharedPreferences,\n    private val keyFlow: Flow<String?>,\n    private val key: String,\n    private val defaultValue: T,\n) : Preference<T> {\n\n    abstract fun read(preferences: SharedPreferences, key: String, defaultValue: T): T\n\n    abstract fun write(key: String, value: T): Editor.() -> Unit\n\n    override fun key(): String {\n        return key\n    }\n\n    override fun get(): T {\n        return try {\n            read(preferences, key, defaultValue)\n        } catch (e: ClassCastException) {\n            logcat { \"Invalid value for $key; deleting\" }\n            delete()\n            defaultValue\n        }\n    }\n\n    override fun set(value: T) {\n        preferences.edit(action = write(key, value))\n    }\n\n    override fun isSet(): Boolean {\n        return preferences.contains(key)\n    }\n\n    override fun delete() {\n        preferences.edit {\n            remove(key)\n        }\n    }\n\n    override fun defaultValue(): T {\n        return defaultValue\n    }\n\n    override fun changes(): Flow<T> {\n        return keyFlow\n            .filter { it == key || it == null }\n            .onStart { emit(\"ignition\") }\n            .map { get() }\n            .conflate()\n    }\n\n    override fun stateIn(scope: CoroutineScope): StateFlow<T> {\n        return changes().stateIn(scope, SharingStarted.Eagerly, get())\n    }\n\n    class StringPrimitive(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: String,\n    ) : AndroidPreference<String>(preferences, keyFlow, key, defaultValue) {\n        override fun read(\n            preferences: SharedPreferences,\n            key: String,\n            defaultValue: String,\n        ): String {\n            return preferences.getString(key, defaultValue) ?: defaultValue\n        }\n\n        override fun write(key: String, value: String): Editor.() -> Unit = {\n            putString(key, value)\n        }\n    }\n\n    class LongPrimitive(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: Long,\n    ) : AndroidPreference<Long>(preferences, keyFlow, key, defaultValue) {\n        override fun read(preferences: SharedPreferences, key: String, defaultValue: Long): Long {\n            return preferences.getLong(key, defaultValue)\n        }\n\n        override fun write(key: String, value: Long): Editor.() -> Unit = {\n            putLong(key, value)\n        }\n    }\n\n    class IntPrimitive(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: Int,\n    ) : AndroidPreference<Int>(preferences, keyFlow, key, defaultValue) {\n        override fun read(preferences: SharedPreferences, key: String, defaultValue: Int): Int {\n            return preferences.getInt(key, defaultValue)\n        }\n\n        override fun write(key: String, value: Int): Editor.() -> Unit = {\n            putInt(key, value)\n        }\n    }\n\n    class FloatPrimitive(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: Float,\n    ) : AndroidPreference<Float>(preferences, keyFlow, key, defaultValue) {\n        override fun read(preferences: SharedPreferences, key: String, defaultValue: Float): Float {\n            return preferences.getFloat(key, defaultValue)\n        }\n\n        override fun write(key: String, value: Float): Editor.() -> Unit = {\n            putFloat(key, value)\n        }\n    }\n\n    class BooleanPrimitive(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: Boolean,\n    ) : AndroidPreference<Boolean>(preferences, keyFlow, key, defaultValue) {\n        override fun read(\n            preferences: SharedPreferences,\n            key: String,\n            defaultValue: Boolean,\n        ): Boolean {\n            return preferences.getBoolean(key, defaultValue)\n        }\n\n        override fun write(key: String, value: Boolean): Editor.() -> Unit = {\n            putBoolean(key, value)\n        }\n    }\n\n    class StringSetPrimitive(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: Set<String>,\n    ) : AndroidPreference<Set<String>>(preferences, keyFlow, key, defaultValue) {\n        override fun read(\n            preferences: SharedPreferences,\n            key: String,\n            defaultValue: Set<String>,\n        ): Set<String> {\n            return preferences.getStringSet(key, defaultValue) ?: defaultValue\n        }\n\n        override fun write(key: String, value: Set<String>): Editor.() -> Unit = {\n            putStringSet(key, value)\n        }\n    }\n\n    class Object<T>(\n        preferences: SharedPreferences,\n        keyFlow: Flow<String?>,\n        key: String,\n        defaultValue: T,\n        val serializer: (T) -> String,\n        val deserializer: (String) -> T,\n    ) : AndroidPreference<T>(preferences, keyFlow, key, defaultValue) {\n        override fun read(preferences: SharedPreferences, key: String, defaultValue: T): T {\n            return try {\n                preferences.getString(key, null)?.let(deserializer) ?: defaultValue\n            } catch (e: Exception) {\n                defaultValue\n            }\n        }\n\n        override fun write(key: String, value: T): Editor.() -> Unit = {\n            putString(key, serializer(value))\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/AndroidPreferenceStore.kt",
    "content": "package tachiyomi.core.common.preference\n\nimport android.content.Context\nimport android.content.SharedPreferences\nimport androidx.preference.PreferenceManager\nimport kotlinx.coroutines.channels.awaitClose\nimport kotlinx.coroutines.flow.callbackFlow\nimport tachiyomi.core.common.preference.AndroidPreference.BooleanPrimitive\nimport tachiyomi.core.common.preference.AndroidPreference.FloatPrimitive\nimport tachiyomi.core.common.preference.AndroidPreference.IntPrimitive\nimport tachiyomi.core.common.preference.AndroidPreference.LongPrimitive\nimport tachiyomi.core.common.preference.AndroidPreference.Object\nimport tachiyomi.core.common.preference.AndroidPreference.StringPrimitive\nimport tachiyomi.core.common.preference.AndroidPreference.StringSetPrimitive\n\nclass AndroidPreferenceStore(\n    context: Context,\n    private val sharedPreferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context),\n) : PreferenceStore {\n\n    private val keyFlow = sharedPreferences.keyFlow\n\n    override fun getString(key: String, defaultValue: String): Preference<String> {\n        return StringPrimitive(sharedPreferences, keyFlow, key, defaultValue)\n    }\n\n    override fun getLong(key: String, defaultValue: Long): Preference<Long> {\n        return LongPrimitive(sharedPreferences, keyFlow, key, defaultValue)\n    }\n\n    override fun getInt(key: String, defaultValue: Int): Preference<Int> {\n        return IntPrimitive(sharedPreferences, keyFlow, key, defaultValue)\n    }\n\n    override fun getFloat(key: String, defaultValue: Float): Preference<Float> {\n        return FloatPrimitive(sharedPreferences, keyFlow, key, defaultValue)\n    }\n\n    override fun getBoolean(key: String, defaultValue: Boolean): Preference<Boolean> {\n        return BooleanPrimitive(sharedPreferences, keyFlow, key, defaultValue)\n    }\n\n    override fun getStringSet(key: String, defaultValue: Set<String>): Preference<Set<String>> {\n        return StringSetPrimitive(sharedPreferences, keyFlow, key, defaultValue)\n    }\n\n    override fun <T> getObject(\n        key: String,\n        defaultValue: T,\n        serializer: (T) -> String,\n        deserializer: (String) -> T,\n    ): Preference<T> {\n        return Object(\n            preferences = sharedPreferences,\n            keyFlow = keyFlow,\n            key = key,\n            defaultValue = defaultValue,\n            serializer = serializer,\n            deserializer = deserializer,\n        )\n    }\n\n    override fun getAll(): Map<String, *> {\n        return sharedPreferences.all ?: emptyMap<String, Any>()\n    }\n}\n\nprivate val SharedPreferences.keyFlow\n    get() = callbackFlow {\n        val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, key: String? ->\n            trySend(\n                key,\n            )\n        }\n        registerOnSharedPreferenceChangeListener(listener)\n        awaitClose {\n            unregisterOnSharedPreferenceChangeListener(listener)\n        }\n    }\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/CheckboxState.kt",
    "content": "package tachiyomi.core.common.preference\n\nsealed class CheckboxState<T>(open val value: T) {\n\n    abstract fun next(): CheckboxState<T>\n\n    sealed class State<T>(override val value: T) : CheckboxState<T>(value) {\n        data class Checked<T>(override val value: T) : State<T>(value)\n        data class None<T>(override val value: T) : State<T>(value)\n\n        val isChecked: Boolean\n            get() = this is Checked\n\n        override fun next(): CheckboxState<T> {\n            return when (this) {\n                is Checked -> None(value)\n                is None -> Checked(value)\n            }\n        }\n    }\n\n    sealed class TriState<T>(override val value: T) : CheckboxState<T>(value) {\n        data class Include<T>(override val value: T) : TriState<T>(value)\n        data class Exclude<T>(override val value: T) : TriState<T>(value)\n        data class None<T>(override val value: T) : TriState<T>(value)\n\n        override fun next(): CheckboxState<T> {\n            return when (this) {\n                is Exclude -> None(value)\n                is Include -> Exclude(value)\n                is None -> Include(value)\n            }\n        }\n    }\n}\n\ninline fun <T> T.asCheckboxState(condition: (T) -> Boolean): CheckboxState.State<T> {\n    return if (condition(this)) {\n        CheckboxState.State.Checked(this)\n    } else {\n        CheckboxState.State.None(this)\n    }\n}\n\ninline fun <T> List<T>.mapAsCheckboxState(condition: (T) -> Boolean): List<CheckboxState.State<T>> {\n    return this.map { it.asCheckboxState(condition) }\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/InMemoryPreferenceStore.kt",
    "content": "package tachiyomi.core.common.preference\n\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.stateIn\n\n/**\n * Local-copy implementation of PreferenceStore mostly for test and preview purposes\n */\nclass InMemoryPreferenceStore(\n    initialPreferences: Sequence<InMemoryPreference<*>> = sequenceOf(),\n) : PreferenceStore {\n\n    private val preferences: Map<String, Preference<*>> =\n        initialPreferences.toList().associateBy { it.key() }\n\n    override fun getString(key: String, defaultValue: String): Preference<String> {\n        val default = InMemoryPreference(key, null, defaultValue)\n        val data: String? = preferences[key]?.get() as? String\n        return if (data == null) default else InMemoryPreference(key, data, defaultValue)\n    }\n\n    override fun getLong(key: String, defaultValue: Long): Preference<Long> {\n        val default = InMemoryPreference(key, null, defaultValue)\n        val data: Long? = preferences[key]?.get() as? Long\n        return if (data == null) default else InMemoryPreference(key, data, defaultValue)\n    }\n\n    override fun getInt(key: String, defaultValue: Int): Preference<Int> {\n        val default = InMemoryPreference(key, null, defaultValue)\n        val data: Int? = preferences[key]?.get() as? Int\n        return if (data == null) default else InMemoryPreference(key, data, defaultValue)\n    }\n\n    override fun getFloat(key: String, defaultValue: Float): Preference<Float> {\n        val default = InMemoryPreference(key, null, defaultValue)\n        val data: Float? = preferences[key]?.get() as? Float\n        return if (data == null) default else InMemoryPreference(key, data, defaultValue)\n    }\n\n    override fun getBoolean(key: String, defaultValue: Boolean): Preference<Boolean> {\n        val default = InMemoryPreference(key, null, defaultValue)\n        val data: Boolean? = preferences[key]?.get() as? Boolean\n        return if (data == null) default else InMemoryPreference(key, data, defaultValue)\n    }\n\n    override fun getStringSet(key: String, defaultValue: Set<String>): Preference<Set<String>> {\n        TODO(\"Not yet implemented\")\n    }\n\n    @Suppress(\"UNCHECKED_CAST\")\n    override fun <T> getObject(\n        key: String,\n        defaultValue: T,\n        serializer: (T) -> String,\n        deserializer: (String) -> T,\n    ): Preference<T> {\n        val default = InMemoryPreference(key, null, defaultValue)\n        val data: T? = preferences[key]?.get() as? T\n        return if (data == null) default else InMemoryPreference(key, data, defaultValue)\n    }\n\n    override fun getAll(): Map<String, *> {\n        return preferences\n    }\n\n    class InMemoryPreference<T>(\n        private val key: String,\n        private var data: T?,\n        private val defaultValue: T,\n    ) : Preference<T> {\n        override fun key(): String = key\n\n        override fun get(): T = data ?: defaultValue()\n\n        override fun isSet(): Boolean = data != null\n\n        override fun delete() {\n            data = null\n        }\n\n        override fun defaultValue(): T = defaultValue\n\n        override fun changes(): Flow<T> = flow { data }\n\n        override fun stateIn(scope: CoroutineScope): StateFlow<T> {\n            return changes().stateIn(scope, SharingStarted.Eagerly, get())\n        }\n\n        override fun set(value: T) {\n            data = value\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/Preference.kt",
    "content": "package tachiyomi.core.common.preference\n\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.StateFlow\n\ninterface Preference<T> {\n\n    fun key(): String\n\n    fun get(): T\n\n    fun set(value: T)\n\n    fun isSet(): Boolean\n\n    fun delete()\n\n    fun defaultValue(): T\n\n    fun changes(): Flow<T>\n\n    fun stateIn(scope: CoroutineScope): StateFlow<T>\n\n    companion object {\n        /**\n         * A preference that should not be exposed in places like backups without user consent.\n         */\n        fun isPrivate(key: String): Boolean {\n            return key.startsWith(PRIVATE_PREFIX)\n        }\n        fun privateKey(key: String): String {\n            return \"${PRIVATE_PREFIX}$key\"\n        }\n\n        /**\n         * A preference used for internal app state that isn't really a user preference\n         * and therefore should not be in places like backups.\n         */\n        fun isAppState(key: String): Boolean {\n            return key.startsWith(APP_STATE_PREFIX)\n        }\n        fun appStateKey(key: String): String {\n            return \"${APP_STATE_PREFIX}$key\"\n        }\n\n        private const val APP_STATE_PREFIX = \"__APP_STATE_\"\n        private const val PRIVATE_PREFIX = \"__PRIVATE_\"\n    }\n}\n\ninline fun <reified T, R : T> Preference<T>.getAndSet(crossinline block: (T) -> R) = set(\n    block(get()),\n)\n\ninline fun <reified T> Preference<T>.deleteAndGet(): T {\n    delete()\n    return get()\n}\n\noperator fun <T> Preference<Set<T>>.plusAssign(item: T) {\n    set(get() + item)\n}\n\noperator fun <T> Preference<Set<T>>.plusAssign(items: Iterable<T>) {\n    set(get() + items)\n}\n\noperator fun <T> Preference<Set<T>>.minusAssign(item: T) {\n    set(get() - item)\n}\n\nfun Preference<Boolean>.toggle(): Boolean {\n    set(!get())\n    return get()\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/PreferenceStore.kt",
    "content": "package tachiyomi.core.common.preference\n\ninterface PreferenceStore {\n\n    fun getString(key: String, defaultValue: String = \"\"): Preference<String>\n\n    fun getLong(key: String, defaultValue: Long = 0): Preference<Long>\n\n    fun getInt(key: String, defaultValue: Int = 0): Preference<Int>\n\n    fun getFloat(key: String, defaultValue: Float = 0f): Preference<Float>\n\n    fun getBoolean(key: String, defaultValue: Boolean = false): Preference<Boolean>\n\n    fun getStringSet(key: String, defaultValue: Set<String> = emptySet()): Preference<Set<String>>\n\n    fun <T> getObject(\n        key: String,\n        defaultValue: T,\n        serializer: (T) -> String,\n        deserializer: (String) -> T,\n    ): Preference<T>\n\n    fun getAll(): Map<String, *>\n}\n\ninline fun <reified T : Enum<T>> PreferenceStore.getEnum(\n    key: String,\n    defaultValue: T,\n): Preference<T> {\n    return getObject(\n        key = key,\n        defaultValue = defaultValue,\n        serializer = { it.name },\n        deserializer = {\n            try {\n                enumValueOf(it)\n            } catch (e: IllegalArgumentException) {\n                defaultValue\n            }\n        },\n    )\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/preference/TriState.kt",
    "content": "package tachiyomi.core.common.preference\n\nenum class TriState {\n    DISABLED, // Disable filter\n    ENABLED_IS, // Enabled with \"is\" filter\n    ENABLED_NOT, // Enabled with \"not\" filter\n    ;\n\n    fun next(): TriState {\n        return when (this) {\n            DISABLED -> ENABLED_IS\n            ENABLED_IS -> ENABLED_NOT\n            ENABLED_NOT -> DISABLED\n        }\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/storage/AndroidStorageFolderProvider.kt",
    "content": "package tachiyomi.core.common.storage\n\nimport android.content.Context\nimport android.os.Environment\nimport androidx.core.net.toUri\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\nimport java.io.File\n\nclass AndroidStorageFolderProvider(\n    private val context: Context,\n) : FolderProvider {\n\n    override fun directory(): File {\n        return File(\n            Environment.getExternalStorageDirectory().absolutePath + File.separator +\n                context.stringResource(MR.strings.app_name),\n        )\n    }\n\n    override fun path(): String {\n        return directory().toUri().toString()\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/storage/FolderProvider.kt",
    "content": "package tachiyomi.core.common.storage\n\nimport java.io.File\n\ninterface FolderProvider {\n\n    fun directory(): File\n\n    fun path(): String\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/storage/UniFileExtensions.kt",
    "content": "package tachiyomi.core.common.storage\n\nimport com.hippo.unifile.UniFile\n\nval UniFile.extension: String?\n    get() = name?.substringAfterLast('.')\n\nval UniFile.nameWithoutExtension: String?\n    get() = name?.substringBeforeLast('.')\n\nval UniFile.displayablePath: String\n    get() = filePath ?: uri.toString()\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/storage/UniFileTempFileManager.kt",
    "content": "package tachiyomi.core.common.storage\n\nimport android.content.Context\nimport android.os.Build\nimport android.os.FileUtils\nimport com.hippo.unifile.UniFile\nimport java.io.BufferedOutputStream\nimport java.io.File\n\nclass UniFileTempFileManager(\n    private val context: Context,\n) {\n\n    private val dir = File(context.externalCacheDir, \"tmp\")\n\n    fun createTempFile(file: UniFile): File {\n        dir.mkdirs()\n\n        val inputStream = context.contentResolver.openInputStream(file.uri)!!\n        val tempFile = File.createTempFile(\n            file.nameWithoutExtension.orEmpty().padEnd(3), // Prefix must be 3+ chars\n            null,\n            dir,\n        )\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n            FileUtils.copy(inputStream, tempFile.outputStream())\n        } else {\n            BufferedOutputStream(tempFile.outputStream()).use { tmpOut ->\n                inputStream.use { input ->\n                    val buffer = ByteArray(8192)\n                    var count: Int\n                    while (input.read(buffer).also { count = it } > 0) {\n                        tmpOut.write(buffer, 0, count)\n                    }\n                }\n            }\n        }\n\n        return tempFile\n    }\n\n    fun deleteTempFiles() {\n        dir.deleteRecursively()\n    }\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/util/lang/BooleanExtensions.kt",
    "content": "package tachiyomi.core.common.util.lang\n\nfun Boolean.toLong() = if (this) 1L else 0L\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/util/lang/CoroutinesExtensions.kt",
    "content": "package tachiyomi.core.common.util.lang\n\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.CoroutineStart\nimport kotlinx.coroutines.DelicateCoroutinesApi\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.NonCancellable\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\n/**\n * Think twice before using this. This is a delicate API. It is easy to accidentally create resource or memory leaks when GlobalScope is used.\n *\n * **Possible replacements**\n * - suspend function\n * - custom scope like view or presenter scope\n */\n@DelicateCoroutinesApi\nfun launchUI(block: suspend CoroutineScope.() -> Unit): Job =\n    GlobalScope.launch(Dispatchers.Main, CoroutineStart.DEFAULT, block)\n\n/**\n * Think twice before using this. This is a delicate API. It is easy to accidentally create resource or memory leaks when GlobalScope is used.\n *\n * **Possible replacements**\n * - suspend function\n * - custom scope like view or presenter scope\n */\n@DelicateCoroutinesApi\nfun launchIO(block: suspend CoroutineScope.() -> Unit): Job =\n    GlobalScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT, block)\n\n/**\n * Think twice before using this. This is a delicate API. It is easy to accidentally create resource or memory leaks when GlobalScope is used.\n *\n * **Possible replacements**\n * - suspend function\n * - custom scope like view or presenter scope\n */\n@DelicateCoroutinesApi\nfun launchNow(block: suspend CoroutineScope.() -> Unit): Job =\n    GlobalScope.launch(Dispatchers.Main, CoroutineStart.UNDISPATCHED, block)\n\nfun CoroutineScope.launchUI(block: suspend CoroutineScope.() -> Unit): Job =\n    launch(Dispatchers.Main, block = block)\n\nfun CoroutineScope.launchIO(block: suspend CoroutineScope.() -> Unit): Job =\n    launch(Dispatchers.IO, block = block)\n\nfun CoroutineScope.launchNonCancellable(block: suspend CoroutineScope.() -> Unit): Job =\n    launchIO { withContext(NonCancellable, block) }\n\nsuspend fun <T> withUIContext(block: suspend CoroutineScope.() -> T) = withContext(\n    Dispatchers.Main,\n    block,\n)\n\nsuspend fun <T> withIOContext(block: suspend CoroutineScope.() -> T) = withContext(\n    Dispatchers.IO,\n    block,\n)\n\nsuspend fun <T> withNonCancellableContext(block: suspend CoroutineScope.() -> T) =\n    withContext(NonCancellable, block)\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/util/lang/RxCoroutineBridge.kt",
    "content": "package tachiyomi.core.common.util.lang\n\nimport kotlinx.coroutines.CancellableContinuation\nimport kotlinx.coroutines.InternalCoroutinesApi\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport rx.Observable\nimport rx.Subscriber\nimport rx.Subscription\nimport kotlin.coroutines.resume\nimport kotlin.coroutines.resumeWithException\n\n/*\n * Util functions for bridging RxJava and coroutines. Taken from TachiyomiEH/SY.\n */\n\nsuspend fun <T> Observable<T>.awaitSingle(): T = single().awaitOne()\n\n@OptIn(InternalCoroutinesApi::class)\nprivate suspend fun <T> Observable<T>.awaitOne(): T = suspendCancellableCoroutine { cont ->\n    cont.unsubscribeOnCancellation(\n        subscribe(\n            object : Subscriber<T>() {\n                override fun onStart() {\n                    request(1)\n                }\n\n                override fun onNext(t: T) {\n                    cont.resume(t)\n                }\n\n                override fun onCompleted() {\n                    if (cont.isActive) {\n                        cont.resumeWithException(\n                            IllegalStateException(\n                                \"Should have invoked onNext\",\n                            ),\n                        )\n                    }\n                }\n\n                override fun onError(e: Throwable) {\n                    /*\n                     * Rx1 observable throws NoSuchElementException if cancellation happened before\n                     * element emission. To mitigate this we try to atomically resume continuation with exception:\n                     * if resume failed, then we know that continuation successfully cancelled itself\n                     */\n                    val token = cont.tryResumeWithException(e)\n                    if (token != null) {\n                        cont.completeResume(token)\n                    }\n                }\n            },\n        ),\n    )\n}\n\nprivate fun <T> CancellableContinuation<T>.unsubscribeOnCancellation(sub: Subscription) =\n    invokeOnCancellation { sub.unsubscribe() }\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/util/lang/SortUtil.kt",
    "content": "package tachiyomi.core.common.util.lang\n\nimport java.text.Collator\nimport java.util.Locale\n\nprivate val collator by lazy {\n    val locale = Locale.getDefault()\n    Collator.getInstance(locale).apply {\n        strength = Collator.PRIMARY\n    }\n}\n\nfun String.compareToWithCollator(other: String): Int {\n    return collator.compare(this, other)\n}\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/util/system/ImageUtil.kt",
    "content": "package tachiyomi.core.common.util.system\n\nimport android.content.Context\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.graphics.BitmapFactory\nimport android.graphics.BitmapRegionDecoder\nimport android.graphics.Color\nimport android.graphics.Matrix\nimport android.graphics.Rect\nimport android.graphics.drawable.ColorDrawable\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.GradientDrawable\nimport android.os.Build\nimport androidx.annotation.ColorInt\nimport androidx.core.graphics.alpha\nimport androidx.core.graphics.applyCanvas\nimport androidx.core.graphics.blue\nimport androidx.core.graphics.createBitmap\nimport androidx.core.graphics.get\nimport androidx.core.graphics.green\nimport androidx.core.graphics.red\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.util.system.GLUtil\nimport logcat.LogPriority\nimport okio.Buffer\nimport okio.BufferedSource\nimport tachiyomi.decoder.Format\nimport tachiyomi.decoder.ImageDecoder\nimport java.io.InputStream\nimport java.util.Locale\nimport kotlin.math.abs\nimport kotlin.math.max\nimport kotlin.math.min\n\nobject ImageUtil {\n\n    fun isImage(name: String?, openStream: (() -> InputStream)? = null): Boolean {\n        if (name == null) return false\n\n        val extension = name.substringAfterLast('.')\n        return ImageType.entries.any { it.extension == extension } || openStream?.let { findImageType(it) } != null\n    }\n\n    fun findImageType(openStream: () -> InputStream): ImageType? {\n        return openStream().use { findImageType(it) }\n    }\n\n    fun findImageType(stream: InputStream): ImageType? {\n        return try {\n            when (getImageType(stream)?.format) {\n                Format.Avif -> ImageType.AVIF\n                Format.Gif -> ImageType.GIF\n                Format.Heif -> ImageType.HEIF\n                Format.Jpeg -> ImageType.JPEG\n                Format.Jxl -> ImageType.JXL\n                Format.Png -> ImageType.PNG\n                Format.Webp -> ImageType.WEBP\n                else -> null\n            }\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    fun getExtensionFromMimeType(mime: String?, openStream: () -> InputStream): String {\n        val type = mime?.let { ImageType.entries.find { it.mime == mime } } ?: findImageType(openStream)\n        return type?.extension ?: \"jpg\"\n    }\n\n    fun isAnimatedAndSupported(source: BufferedSource): Boolean {\n        return try {\n            val type = getImageType(source.peek().inputStream()) ?: return false\n            // https://coil-kt.github.io/coil/getting_started/#supported-image-formats\n            when (type.format) {\n                Format.Gif -> true\n                // Animated WebP on Android 9+\n                Format.Webp -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P\n                // Animated Heif on Android 11+\n                Format.Heif -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R\n                else -> false\n            }\n        } catch (e: Exception) {\n            false\n        }\n    }\n\n    private fun getImageType(stream: InputStream): tachiyomi.decoder.ImageType? {\n        val bytes = ByteArray(32)\n\n        val length = if (stream.markSupported()) {\n            stream.mark(bytes.size)\n            stream.read(bytes, 0, bytes.size).also { stream.reset() }\n        } else {\n            stream.read(bytes, 0, bytes.size)\n        }\n\n        if (length == -1) {\n            return null\n        }\n\n        return ImageDecoder.findType(bytes)\n    }\n\n    enum class ImageType(val mime: String, val extension: String) {\n        AVIF(\"image/avif\", \"avif\"),\n        GIF(\"image/gif\", \"gif\"),\n        HEIF(\"image/heif\", \"heif\"),\n        JPEG(\"image/jpeg\", \"jpg\"),\n        JXL(\"image/jxl\", \"jxl\"),\n        PNG(\"image/png\", \"png\"),\n        WEBP(\"image/webp\", \"webp\"),\n    }\n\n    /**\n     * Check whether the image is wide (which we consider a double-page spread).\n     *\n     * @return true if the width is greater than the height\n     */\n    fun isWideImage(imageSource: BufferedSource): Boolean {\n        val options = extractImageOptions(imageSource)\n        return options.outWidth > options.outHeight\n    }\n\n    /**\n     * Extract the 'side' part from [BufferedSource] and return it as [BufferedSource].\n     */\n    fun splitInHalf(imageSource: BufferedSource, side: Side): BufferedSource {\n        val imageBitmap = BitmapFactory.decodeStream(imageSource.inputStream())\n        val height = imageBitmap.height\n        val width = imageBitmap.width\n\n        val singlePage = Rect(0, 0, width / 2, height)\n\n        val half = createBitmap(width / 2, height)\n        val part = when (side) {\n            Side.RIGHT -> Rect(width - width / 2, 0, width, height)\n            Side.LEFT -> Rect(0, 0, width / 2, height)\n        }\n        half.applyCanvas {\n            drawBitmap(imageBitmap, part, singlePage, null)\n        }\n        val output = Buffer()\n        half.compress(Bitmap.CompressFormat.JPEG, 100, output.outputStream())\n\n        return output\n    }\n\n    fun rotateImage(imageSource: BufferedSource, degrees: Float): BufferedSource {\n        val imageBitmap = BitmapFactory.decodeStream(imageSource.inputStream())\n        val rotated = rotateBitMap(imageBitmap, degrees)\n\n        val output = Buffer()\n        rotated.compress(Bitmap.CompressFormat.JPEG, 100, output.outputStream())\n\n        return output\n    }\n\n    private fun rotateBitMap(bitmap: Bitmap, degrees: Float): Bitmap {\n        val matrix = Matrix().apply { postRotate(degrees) }\n        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)\n    }\n\n    /**\n     * Split the image into left and right parts, then merge them into a new image.\n     */\n    fun splitAndMerge(imageSource: BufferedSource, upperSide: Side): BufferedSource {\n        val imageBitmap = BitmapFactory.decodeStream(imageSource.inputStream())\n        val height = imageBitmap.height\n        val width = imageBitmap.width\n\n        val result = createBitmap(width / 2, height * 2)\n        result.applyCanvas {\n            // right -> upper\n            val rightPart = when (upperSide) {\n                Side.RIGHT -> Rect(width - width / 2, 0, width, height)\n                Side.LEFT -> Rect(0, 0, width / 2, height)\n            }\n            val upperPart = Rect(0, 0, width / 2, height)\n            drawBitmap(imageBitmap, rightPart, upperPart, null)\n            // left -> bottom\n            val leftPart = when (upperSide) {\n                Side.LEFT -> Rect(width - width / 2, 0, width, height)\n                Side.RIGHT -> Rect(0, 0, width / 2, height)\n            }\n            val bottomPart = Rect(0, height, width / 2, height * 2)\n            drawBitmap(imageBitmap, leftPart, bottomPart, null)\n        }\n\n        val output = Buffer()\n        result.compress(Bitmap.CompressFormat.JPEG, 100, output.outputStream())\n        return output\n    }\n\n    enum class Side {\n        RIGHT,\n        LEFT,\n    }\n\n    /**\n     * Check whether the image is considered a tall image.\n     *\n     * @return true if the height:width ratio is greater than 3.\n     */\n    private fun isTallImage(imageSource: BufferedSource): Boolean {\n        val options = extractImageOptions(imageSource)\n        return (options.outHeight / options.outWidth) > 3\n    }\n\n    /**\n     * Splits tall images to improve performance of reader\n     */\n    fun splitTallImage(tmpDir: UniFile, imageFile: UniFile, filenamePrefix: String): Boolean {\n        val imageSource = imageFile.openInputStream().use { Buffer().readFrom(it) }\n        if (isAnimatedAndSupported(imageSource) || !isTallImage(imageSource)) {\n            return true\n        }\n\n        val bitmapRegionDecoder = getBitmapRegionDecoder(imageSource.peek().inputStream())\n        if (bitmapRegionDecoder == null) {\n            logcat { \"Failed to create new instance of BitmapRegionDecoder\" }\n            return false\n        }\n\n        val options = extractImageOptions(imageSource).apply {\n            inJustDecodeBounds = false\n        }\n\n        val splitDataList = options.splitData\n\n        return try {\n            splitDataList.forEach { splitData ->\n                val splitImageName = splitImageName(filenamePrefix, splitData.index)\n                // Remove pre-existing split if exists (this split shouldn't exist under normal circumstances)\n                tmpDir.findFile(splitImageName)?.delete()\n\n                val splitFile = tmpDir.createFile(splitImageName)!!\n\n                val region = Rect(\n                    0,\n                    splitData.topOffset,\n                    splitData.splitWidth,\n                    splitData.bottomOffset,\n                )\n\n                splitFile.openOutputStream().use { outputStream ->\n                    val splitBitmap = bitmapRegionDecoder.decodeRegion(region, options)\n                    splitBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)\n                    splitBitmap.recycle()\n                }\n                logcat {\n                    \"Success: Split #${splitData.index + 1} with topOffset=${splitData.topOffset} \" +\n                        \"height=${splitData.splitHeight} bottomOffset=${splitData.bottomOffset}\"\n                }\n            }\n            imageFile.delete()\n            true\n        } catch (e: Exception) {\n            // Image splits were not successfully saved so delete them and keep the original image\n            splitDataList\n                .map { splitImageName(filenamePrefix, it.index) }\n                .forEach { tmpDir.findFile(it)?.delete() }\n            logcat(LogPriority.ERROR, e)\n            false\n        } finally {\n            bitmapRegionDecoder.recycle()\n        }\n    }\n\n    private fun splitImageName(filenamePrefix: String, index: Int) = \"${filenamePrefix}__${\"%03d\".format(\n        Locale.ENGLISH,\n        index + 1,\n    )}.jpg\"\n\n    private val BitmapFactory.Options.splitData\n        get(): List<SplitData> {\n            val imageHeight = outHeight\n            val imageWidth = outWidth\n\n            // -1 so it doesn't try to split when imageHeight = optimalImageHeight\n            val partCount = (imageHeight - 1) / optimalImageHeight + 1\n            val optimalSplitHeight = imageHeight / partCount\n\n            logcat {\n                \"Generating SplitData for image (height: $imageHeight): \" +\n                    \"$partCount parts @ ${optimalSplitHeight}px height per part\"\n            }\n\n            return buildList {\n                val range = 0..<partCount\n                for (index in range) {\n                    // Only continue if the list is empty or there is image remaining\n                    if (isNotEmpty() && imageHeight <= last().bottomOffset) break\n\n                    val topOffset = index * optimalSplitHeight\n                    var splitHeight = min(optimalSplitHeight, imageHeight - topOffset)\n\n                    if (index == range.last) {\n                        val remainingHeight = imageHeight - (topOffset + splitHeight)\n                        splitHeight += remainingHeight\n                    }\n\n                    add(SplitData(index, topOffset, splitHeight, imageWidth))\n                }\n            }\n        }\n\n    data class SplitData(\n        val index: Int,\n        val topOffset: Int,\n        val splitHeight: Int,\n        val splitWidth: Int,\n    ) {\n        val bottomOffset = topOffset + splitHeight\n    }\n\n    fun canUseHardwareBitmap(bitmap: Bitmap): Boolean {\n        return canUseHardwareBitmap(bitmap.width, bitmap.height)\n    }\n\n    fun canUseHardwareBitmap(imageSource: BufferedSource): Boolean {\n        return with(extractImageOptions(imageSource)) {\n            canUseHardwareBitmap(outWidth, outHeight)\n        }\n    }\n\n    var hardwareBitmapThreshold: Int = GLUtil.SAFE_TEXTURE_LIMIT\n\n    private fun canUseHardwareBitmap(width: Int, height: Int): Boolean {\n        if (HARDWARE_BITMAP_UNSUPPORTED) return false\n        return maxOf(width, height) <= hardwareBitmapThreshold\n    }\n\n    /**\n     * Algorithm for determining what background to accompany a comic/manga page\n     */\n    fun chooseBackground(context: Context, imageStream: InputStream): Drawable {\n        val decoder = ImageDecoder.newInstance(imageStream)\n        val image = decoder?.decode()\n        decoder?.recycle()\n\n        val whiteColor = Color.WHITE\n        if (image == null) return ColorDrawable(whiteColor)\n        if (image.width < 50 || image.height < 50) {\n            return ColorDrawable(whiteColor)\n        }\n\n        val top = 5\n        val bot = image.height - 5\n        val left = (image.width * 0.0275).toInt()\n        val right = image.width - left\n        val midX = image.width / 2\n        val midY = image.height / 2\n        val offsetX = (image.width * 0.01).toInt()\n        val leftOffsetX = left - offsetX\n        val rightOffsetX = right + offsetX\n\n        val topLeftPixel = image[left, top]\n        val topRightPixel = image[right, top]\n        val midLeftPixel = image[left, midY]\n        val midRightPixel = image[right, midY]\n        val topCenterPixel = image[midX, top]\n        val botLeftPixel = image[left, bot]\n        val bottomCenterPixel = image[midX, bot]\n        val botRightPixel = image[right, bot]\n\n        val topLeftIsDark = topLeftPixel.isDark()\n        val topRightIsDark = topRightPixel.isDark()\n        val midLeftIsDark = midLeftPixel.isDark()\n        val midRightIsDark = midRightPixel.isDark()\n        val topMidIsDark = topCenterPixel.isDark()\n        val botLeftIsDark = botLeftPixel.isDark()\n        val botRightIsDark = botRightPixel.isDark()\n\n        var darkBG =\n            (\n                topLeftIsDark &&\n                    (\n                        botLeftIsDark ||\n                            botRightIsDark ||\n                            topRightIsDark ||\n                            midLeftIsDark ||\n                            topMidIsDark\n                        )\n                ) ||\n                (\n                    topRightIsDark &&\n                        (\n                            botRightIsDark ||\n                                botLeftIsDark ||\n                                midRightIsDark ||\n                                topMidIsDark\n                            )\n                    )\n\n        val topAndBotPixels = listOf(\n            topLeftPixel,\n            topCenterPixel,\n            topRightPixel,\n            botRightPixel,\n            bottomCenterPixel,\n            botLeftPixel,\n        )\n        val isNotWhiteAndCloseTo = topAndBotPixels.mapIndexed { index, color ->\n            val other = topAndBotPixels[(index + 1) % topAndBotPixels.size]\n            !color.isWhite() && color.isCloseTo(other)\n        }\n        if (isNotWhiteAndCloseTo.all { it }) {\n            return ColorDrawable(topLeftPixel)\n        }\n\n        val cornerPixels = listOf(topLeftPixel, topRightPixel, botLeftPixel, botRightPixel)\n        val numberOfWhiteCorners = cornerPixels.map { cornerPixel -> cornerPixel.isWhite() }\n            .filter { it }\n            .size\n        if (numberOfWhiteCorners > 2) {\n            darkBG = false\n        }\n\n        var blackColor = when {\n            topLeftIsDark -> topLeftPixel\n            topRightIsDark -> topRightPixel\n            botLeftIsDark -> botLeftPixel\n            botRightIsDark -> botRightPixel\n            else -> whiteColor\n        }\n\n        var overallWhitePixels = 0\n        var overallBlackPixels = 0\n        var topBlackStreak = 0\n        var topWhiteStreak = 0\n        var botBlackStreak = 0\n        var botWhiteStreak = 0\n        outer@ for (x in intArrayOf(left, right, leftOffsetX, rightOffsetX)) {\n            var whitePixelsStreak = 0\n            var whitePixels = 0\n            var blackPixelsStreak = 0\n            var blackPixels = 0\n            var blackStreak = false\n            var whiteStreak = false\n            val notOffset = x == left || x == right\n            inner@ for ((index, y) in (0..<image.height step image.height / 25).withIndex()) {\n                val pixel = image[x, y]\n                val pixelOff = image[x + (if (x < image.width / 2) -offsetX else offsetX), y]\n                if (pixel.isWhite()) {\n                    whitePixelsStreak++\n                    whitePixels++\n                    if (notOffset) {\n                        overallWhitePixels++\n                    }\n                    if (whitePixelsStreak > 14) {\n                        whiteStreak = true\n                    }\n                    if (whitePixelsStreak > 6 && whitePixelsStreak >= index - 1) {\n                        topWhiteStreak = whitePixelsStreak\n                    }\n                } else {\n                    whitePixelsStreak = 0\n                    if (pixel.isDark() && pixelOff.isDark()) {\n                        blackPixels++\n                        if (notOffset) {\n                            overallBlackPixels++\n                        }\n                        blackPixelsStreak++\n                        if (blackPixelsStreak >= 14) {\n                            blackStreak = true\n                        }\n                        continue@inner\n                    }\n                }\n                if (blackPixelsStreak > 6 && blackPixelsStreak >= index - 1) {\n                    topBlackStreak = blackPixelsStreak\n                }\n                blackPixelsStreak = 0\n            }\n            if (blackPixelsStreak > 6) {\n                botBlackStreak = blackPixelsStreak\n            } else if (whitePixelsStreak > 6) {\n                botWhiteStreak = whitePixelsStreak\n            }\n            when {\n                blackPixels > 22 -> {\n                    if (x == right || x == rightOffsetX) {\n                        blackColor = when {\n                            topRightIsDark -> topRightPixel\n                            botRightIsDark -> botRightPixel\n                            else -> blackColor\n                        }\n                    }\n                    darkBG = true\n                    overallWhitePixels = 0\n                    break@outer\n                }\n                blackStreak -> {\n                    darkBG = true\n                    if (x == right || x == rightOffsetX) {\n                        blackColor = when {\n                            topRightIsDark -> topRightPixel\n                            botRightIsDark -> botRightPixel\n                            else -> blackColor\n                        }\n                    }\n                    if (blackPixels > 18) {\n                        overallWhitePixels = 0\n                        break@outer\n                    }\n                }\n                whiteStreak || whitePixels > 22 -> darkBG = false\n            }\n        }\n\n        val topIsBlackStreak = topBlackStreak > topWhiteStreak\n        val bottomIsBlackStreak = botBlackStreak > botWhiteStreak\n        if (overallWhitePixels > 9 && overallWhitePixels > overallBlackPixels) {\n            darkBG = false\n        }\n        if (topIsBlackStreak && bottomIsBlackStreak) {\n            darkBG = true\n        }\n\n        val isLandscape = context.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE\n        if (isLandscape) {\n            return when {\n                darkBG -> ColorDrawable(blackColor)\n                else -> ColorDrawable(whiteColor)\n            }\n        }\n\n        val botCornersIsWhite = botLeftPixel.isWhite() && botRightPixel.isWhite()\n        val topCornersIsWhite = topLeftPixel.isWhite() && topRightPixel.isWhite()\n\n        val topCornersIsDark = topLeftIsDark && topRightIsDark\n        val botCornersIsDark = botLeftIsDark && botRightIsDark\n\n        val topOffsetCornersIsDark = image[leftOffsetX, top].isDark() && image[rightOffsetX, top].isDark()\n        val botOffsetCornersIsDark = image[leftOffsetX, bot].isDark() && image[rightOffsetX, bot].isDark()\n\n        val gradient = when {\n            darkBG && botCornersIsWhite -> {\n                intArrayOf(blackColor, blackColor, whiteColor, whiteColor)\n            }\n            darkBG && topCornersIsWhite -> {\n                intArrayOf(whiteColor, whiteColor, blackColor, blackColor)\n            }\n            darkBG -> {\n                return ColorDrawable(blackColor)\n            }\n            topIsBlackStreak ||\n                (\n                    topCornersIsDark &&\n                        topOffsetCornersIsDark &&\n                        (\n                            topMidIsDark ||\n                                overallBlackPixels > 9\n                            )\n                    ) -> {\n                intArrayOf(blackColor, blackColor, whiteColor, whiteColor)\n            }\n            bottomIsBlackStreak ||\n                (\n                    botCornersIsDark &&\n                        botOffsetCornersIsDark &&\n                        (\n                            bottomCenterPixel.isDark() ||\n                                overallBlackPixels > 9\n                            )\n                    ) -> {\n                intArrayOf(whiteColor, whiteColor, blackColor, blackColor)\n            }\n            else -> {\n                return ColorDrawable(whiteColor)\n            }\n        }\n\n        return GradientDrawable(\n            GradientDrawable.Orientation.TOP_BOTTOM,\n            gradient,\n        )\n    }\n\n    private fun @receiver:ColorInt Int.isDark(): Boolean =\n        red < 40 && blue < 40 && green < 40 && alpha > 200\n\n    private fun @receiver:ColorInt Int.isCloseTo(other: Int): Boolean =\n        abs(red - other.red) < 30 && abs(green - other.green) < 30 && abs(blue - other.blue) < 30\n\n    private fun @receiver:ColorInt Int.isWhite(): Boolean =\n        red + blue + green > 740\n\n    /**\n     * Used to check an image's dimensions without loading it in the memory.\n     */\n    private fun extractImageOptions(imageSource: BufferedSource): BitmapFactory.Options {\n        val options = BitmapFactory.Options().apply { inJustDecodeBounds = true }\n        BitmapFactory.decodeStream(imageSource.peek().inputStream(), null, options)\n        return options\n    }\n\n    private fun getBitmapRegionDecoder(imageStream: InputStream): BitmapRegionDecoder? {\n        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n            BitmapRegionDecoder.newInstance(imageStream)\n        } else {\n            @Suppress(\"DEPRECATION\")\n            BitmapRegionDecoder.newInstance(imageStream, false)\n        }\n    }\n\n    private val optimalImageHeight = getDisplayMaxHeightInPx * 2\n\n    /**\n     * Taken from Coil\n     * (https://github.com/coil-kt/coil/blob/1674d3516f061aeacbe749a435b1924f9648fd41/coil-core/src/androidMain/kotlin/coil3/util/hardwareBitmaps.kt)\n     * ---\n     * Maintains a list of devices with broken/incomplete/unstable hardware bitmap implementations.\n     *\n     * Model names are retrieved from\n     * [Google's official device list](https://support.google.com/googleplay/answer/1727131?hl=en).\n     *\n     */\n    val HARDWARE_BITMAP_UNSUPPORTED = when (Build.VERSION.SDK_INT) {\n        26 -> run {\n            val model = Build.MODEL ?: return@run false\n\n            // Samsung Galaxy (ALL)\n            if (model.removePrefix(\"SAMSUNG-\").startsWith(\"SM-\")) return@run true\n\n            val device = Build.DEVICE ?: return@run false\n\n            return@run device in arrayOf(\n                \"nora\", \"nora_8917\", \"nora_8917_n\", // Moto E5\n                \"james\", \"rjames_f\", \"rjames_go\", \"pettyl\", // Moto E5 Play\n                \"hannah\", \"ahannah\", \"rhannah\", // Moto E5 Plus\n\n                \"ali\", \"ali_n\", // Moto G6\n                \"aljeter\", \"aljeter_n\", \"jeter\", // Moto G6 Play\n                \"evert\", \"evert_n\", \"evert_nt\", // Moto G6 Plus\n\n                \"G3112\", \"G3116\", \"G3121\", \"G3123\", \"G3125\", // Xperia XA1\n                \"G3412\", \"G3416\", \"G3421\", \"G3423\", \"G3426\", // Xperia XA1 Plus\n                \"G3212\", \"G3221\", \"G3223\", \"G3226\", // Xperia XA1 Ultra\n\n                \"BV6800Pro\", // BlackView BV6800Pro\n                \"CatS41\", // Cat S41\n                \"Hi9Pro\", // CHUWI Hi9 Pro\n                \"manning\", // Lenovo K8 Note\n                \"N5702L\", // NUU Mobile G3\n            )\n        }\n\n        27 -> run {\n            val device = Build.DEVICE ?: return@run false\n\n            return@run device in arrayOf(\n                \"mcv1s\", // LG Tribute Empire\n                \"mcv3\", // LG K11\n                \"mcv5a\", // LG Q7\n                \"mcv7a\", // LG Stylo 4\n\n                \"A30ATMO\", // T-Mobile REVVL 2\n                \"A70AXLTMO\", // T-Mobile REVVL 2 PLUS\n\n                \"A3A_8_4G_TMO\", // Alcatel 9027W\n                \"Edison_CKT\", // Alcatel ONYX\n                \"EDISON_TF\", // Alcatel TCL XL2\n                \"FERMI_TF\", // Alcatel A501DL\n                \"U50A_ATT\", // Alcatel TETRA\n                \"U50A_PLUS_ATT\", // Alcatel 5059R\n                \"U50A_PLUS_TF\", // Alcatel TCL LX\n                \"U50APLUSTMO\", // Alcatel 5059Z\n                \"U5A_PLUS_4G\", // Alcatel 1X\n\n                \"RCT6513W87DK5e\", // RCA Galileo Pro\n                \"RCT6873W42BMF9A\", // RCA Voyager\n                \"RCT6A03W13\", // RCA 10 Viking\n                \"RCT6B03W12\", // RCA Atlas 10 Pro\n                \"RCT6B03W13\", // RCA Atlas 10 Pro+\n                \"RCT6T06E13\", // RCA Artemis 10\n\n                \"A3_Pro\", // Umidigi A3 Pro\n                \"One\", // Umidigi One\n                \"One_Max\", // Umidigi One Max\n                \"One_Pro\", // Umidigi One Pro\n                \"Z2\", // Umidigi Z2\n                \"Z2_PRO\", // Umidigi Z2 Pro\n\n                \"Armor_3\", // Ulefone Armor 3\n                \"Armor_6\", // Ulefone Armor 6\n\n                \"Blackview\", // Blackview BV6000\n                \"BV9500\", // Blackview BV9500\n                \"BV9500Pro\", // Blackview BV9500Pro\n\n                \"A6L-C\", // Nuu A6L-C\n                \"N5002LA\", // Nuu A7L\n                \"N5501LA\", // Nuu A5L\n\n                \"Power_2_Pro\", // Leagoo Power 2 Pro\n                \"Power_5\", // Leagoo Power 5\n                \"Z9\", // Leagoo Z9\n\n                \"V0310WW\", // Blu VIVO VI+\n                \"V0330WW\", // Blu VIVO XI\n\n                \"A3\", // BenQ A3\n                \"ASUS_X018_4\", // Asus ZenFone Max Plus M1 (ZB570TL)\n                \"C210AE\", // Wiko Life\n                \"fireball\", // DROID Incredible 4G LTE\n                \"ILA_X1\", // iLA X1\n                \"Infinix-X605_sprout\", // Infinix NOTE 5 Stylus\n                \"j7maxlte\", // Samsung Galaxy J7 Max\n                \"KING_KONG_3\", // Cubot King Kong 3\n                \"M10500\", // Packard Bell M10500\n                \"S70\", // Altice ALTICE S70\n                \"S80Lite\", // Doogee S80Lite\n                \"SGINO6\", // SGiNO 6\n                \"st18c10bnn\", // Barnes and Noble BNTV650\n                \"TECNO-CA8\", // Tecno CAMON X Pro,\n                \"SHIFT6m\", // SHIFT 6m\n            )\n        }\n\n        else -> false\n    }\n}\n\nval getDisplayMaxHeightInPx: Int\n    get() = Resources.getSystem().displayMetrics.let { max(it.heightPixels, it.widthPixels) }\n"
  },
  {
    "path": "core/common/src/main/java/tachiyomi/core/common/util/system/LogcatExtensions.kt",
    "content": "package tachiyomi.core.common.util.system\n\nimport logcat.LogPriority\nimport logcat.asLog\nimport logcat.logcat\n\ninline fun Any.logcat(\n    priority: LogPriority = LogPriority.DEBUG,\n    throwable: Throwable? = null,\n    message: () -> String = { \"\" },\n) = logcat(priority = priority) {\n    var msg = message()\n    if (throwable != null) {\n        if (msg.isNotBlank()) msg += \"\\n\"\n        msg += throwable.asLog()\n    }\n    msg\n}\n"
  },
  {
    "path": "core-metadata/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    kotlin(\"android\")\n    kotlin(\"plugin.serialization\")\n}\n\nandroid {\n    namespace = \"tachiyomi.core.metadata\"\n\n    defaultConfig {\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n}\n\ndependencies {\n    implementation(projects.sourceApi)\n\n    implementation(kotlinx.bundles.serialization)\n}\n"
  },
  {
    "path": "core-metadata/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "core-metadata/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "core-metadata/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "core-metadata/src/main/java/tachiyomi/core/metadata/comicinfo/ComicInfo.kt",
    "content": "package tachiyomi.core.metadata.comicinfo\n\nimport eu.kanade.tachiyomi.source.model.SManga\nimport kotlinx.serialization.Serializable\nimport nl.adaptivity.xmlutil.serialization.XmlElement\nimport nl.adaptivity.xmlutil.serialization.XmlSerialName\nimport nl.adaptivity.xmlutil.serialization.XmlValue\n\nconst val COMIC_INFO_FILE = \"ComicInfo.xml\"\n\nfun SManga.getComicInfo() = ComicInfo(\n    series = ComicInfo.Series(title),\n    summary = description?.let { ComicInfo.Summary(it) },\n    writer = author?.let { ComicInfo.Writer(it) },\n    penciller = artist?.let { ComicInfo.Penciller(it) },\n    genre = genre?.let { ComicInfo.Genre(it) },\n    publishingStatus = ComicInfo.PublishingStatusTachiyomi(\n        ComicInfoPublishingStatus.toComicInfoValue(status.toLong()),\n    ),\n    title = null,\n    number = null,\n    web = null,\n    translator = null,\n    inker = null,\n    colorist = null,\n    letterer = null,\n    coverArtist = null,\n    tags = null,\n    categories = null,\n    source = null,\n)\n\nfun SManga.copyFromComicInfo(comicInfo: ComicInfo) {\n    comicInfo.series?.let { title = it.value }\n    comicInfo.writer?.let { author = it.value }\n    comicInfo.summary?.let { description = it.value }\n\n    listOfNotNull(\n        comicInfo.genre?.value,\n        comicInfo.tags?.value,\n        comicInfo.categories?.value,\n    )\n        .distinct()\n        .joinToString(\", \") { it.trim() }\n        .takeIf { it.isNotEmpty() }\n        ?.let { genre = it }\n\n    listOfNotNull(\n        comicInfo.penciller?.value,\n        comicInfo.inker?.value,\n        comicInfo.colorist?.value,\n        comicInfo.letterer?.value,\n        comicInfo.coverArtist?.value,\n    )\n        .flatMap { it.split(\", \") }\n        .distinct()\n        .joinToString(\", \") { it.trim() }\n        .takeIf { it.isNotEmpty() }\n        ?.let { artist = it }\n\n    status = ComicInfoPublishingStatus.toSMangaValue(comicInfo.publishingStatus?.value)\n}\n\n// https://anansi-project.github.io/docs/comicinfo/schemas/v2.0\n@Suppress(\"UNUSED\")\n@Serializable\n@XmlSerialName(\"ComicInfo\", \"\", \"\")\ndata class ComicInfo(\n    val title: Title?,\n    val series: Series?,\n    val number: Number?,\n    val summary: Summary?,\n    val writer: Writer?,\n    val penciller: Penciller?,\n    val inker: Inker?,\n    val colorist: Colorist?,\n    val letterer: Letterer?,\n    val coverArtist: CoverArtist?,\n    val translator: Translator?,\n    val genre: Genre?,\n    val tags: Tags?,\n    val web: Web?,\n    val publishingStatus: PublishingStatusTachiyomi?,\n    val categories: CategoriesTachiyomi?,\n    val source: SourceAniyomi?,\n) {\n    @XmlElement(false)\n    @XmlSerialName(\"xmlns:xsd\", \"\", \"\")\n    val xmlSchema: String = \"http://www.w3.org/2001/XMLSchema\"\n\n    @XmlElement(false)\n    @XmlSerialName(\"xmlns:xsi\", \"\", \"\")\n    val xmlSchemaInstance: String = \"http://www.w3.org/2001/XMLSchema-instance\"\n\n    @Serializable\n    @XmlSerialName(\"Title\", \"\", \"\")\n    data class Title(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Series\", \"\", \"\")\n    data class Series(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Number\", \"\", \"\")\n    data class Number(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Summary\", \"\", \"\")\n    data class Summary(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Writer\", \"\", \"\")\n    data class Writer(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Penciller\", \"\", \"\")\n    data class Penciller(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Inker\", \"\", \"\")\n    data class Inker(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Colorist\", \"\", \"\")\n    data class Colorist(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Letterer\", \"\", \"\")\n    data class Letterer(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"CoverArtist\", \"\", \"\")\n    data class CoverArtist(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Translator\", \"\", \"\")\n    data class Translator(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Genre\", \"\", \"\")\n    data class Genre(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Tags\", \"\", \"\")\n    data class Tags(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Web\", \"\", \"\")\n    data class Web(@XmlValue(true) val value: String = \"\")\n\n    // The spec doesn't have a good field for this\n    @Serializable\n    @XmlSerialName(\"PublishingStatusTachiyomi\", \"http://www.w3.org/2001/XMLSchema\", \"ty\")\n    data class PublishingStatusTachiyomi(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"Categories\", \"http://www.w3.org/2001/XMLSchema\", \"ty\")\n    data class CategoriesTachiyomi(@XmlValue(true) val value: String = \"\")\n\n    @Serializable\n    @XmlSerialName(\"SourceAniyomi\", \"http://www.w3.org/2001/XMLSchema\", \"ay\")\n    data class SourceAniyomi(@XmlValue(true) val value: String = \"\")\n}\n\nenum class ComicInfoPublishingStatus(\n    val comicInfoValue: String,\n    val sMangaModelValue: Int,\n) {\n    ONGOING(\"Ongoing\", SManga.ONGOING),\n    COMPLETED(\"Completed\", SManga.COMPLETED),\n    LICENSED(\"Licensed\", SManga.LICENSED),\n    PUBLISHING_FINISHED(\"Publishing finished\", SManga.PUBLISHING_FINISHED),\n    CANCELLED(\"Cancelled\", SManga.CANCELLED),\n    ON_HIATUS(\"On hiatus\", SManga.ON_HIATUS),\n    UNKNOWN(\"Unknown\", SManga.UNKNOWN),\n    ;\n\n    companion object {\n        fun toComicInfoValue(value: Long): String {\n            return entries.firstOrNull { it.sMangaModelValue == value.toInt() }?.comicInfoValue\n                ?: UNKNOWN.comicInfoValue\n        }\n\n        fun toSMangaValue(value: String?): Int {\n            return entries.firstOrNull { it.comicInfoValue == value }?.sMangaModelValue\n                ?: UNKNOWN.sMangaModelValue\n        }\n    }\n}\n"
  },
  {
    "path": "core-metadata/src/main/java/tachiyomi/core/metadata/tachiyomi/AnimeDetails.kt",
    "content": "package tachiyomi.core.metadata.tachiyomi\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\nclass AnimeDetails(\n    val title: String? = null,\n    val author: String? = null,\n    val artist: String? = null,\n    val description: String? = null,\n    val genre: List<String>? = null,\n    val status: Int? = null,\n)\n"
  },
  {
    "path": "core-metadata/src/main/java/tachiyomi/core/metadata/tachiyomi/ChapterDetails.kt",
    "content": "package tachiyomi.core.metadata.tachiyomi\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\nclass ChapterDetails(\n    val chapter_number: Float,\n    val name: String? = null,\n    val date_upload: String? = null,\n    val scanlator: String? = null,\n)\n"
  },
  {
    "path": "core-metadata/src/main/java/tachiyomi/core/metadata/tachiyomi/EpisodeDetails.kt",
    "content": "package tachiyomi.core.metadata.tachiyomi\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\nclass EpisodeDetails(\n    val episode_number: Float,\n    val name: String? = null,\n    val date_upload: String? = null,\n    val fillermark: Boolean = false,\n    val scanlator: String? = null,\n    val summary: String? = null,\n    val preview_url: String? = null,\n)\n"
  },
  {
    "path": "core-metadata/src/main/java/tachiyomi/core/metadata/tachiyomi/MangaDetails.kt",
    "content": "package tachiyomi.core.metadata.tachiyomi\n\nimport kotlinx.serialization.Serializable\n\n@Serializable\nclass MangaDetails(\n    val title: String? = null,\n    val author: String? = null,\n    val artist: String? = null,\n    val description: String? = null,\n    val genre: List<String>? = null,\n    val status: Int? = null,\n)\n"
  },
  {
    "path": "data/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    kotlin(\"android\")\n    kotlin(\"plugin.serialization\")\n    alias(libs.plugins.sqldelight)\n}\n\nandroid {\n    namespace = \"tachiyomi.data\"\n\n    defaultConfig {\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n\n    sqldelight {\n        databases {\n            create(\"Database\") {\n                packageName.set(\"tachiyomi.data\")\n                dialect(libs.sqldelight.dialects.sql)\n                schemaOutputDirectory.set(project.file(\"./src/main/sqldelight\"))\n                srcDirs.from(project.file(\"./src/main/sqldelight\"))\n            }\n            create(\"AnimeDatabase\") {\n                packageName.set(\"tachiyomi.mi.data\")\n                dialect(libs.sqldelight.dialects.sql)\n                schemaOutputDirectory.set(project.file(\"./src/main/sqldelightanime\"))\n                srcDirs.from(project.file(\"./src/main/sqldelightanime\"))\n            }\n        }\n    }\n}\n\nkotlin {\n    compilerOptions {\n        freeCompilerArgs.add(\"-opt-in=kotlinx.serialization.ExperimentalSerializationApi\")\n    }\n}\n\ndependencies {\n    implementation(projects.sourceApi)\n    implementation(projects.domain)\n    implementation(projects.core.common)\n\n    api(libs.bundles.sqldelight)\n}\n"
  },
  {
    "path": "data/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "data/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "data/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "data/src/main/java/mihon/data/repository/anime/AnimeExtensionRepoRepositoryImpl.kt",
    "content": "package mihon.data.repository.anime\n\nimport android.database.sqlite.SQLiteException\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.exception.SaveExtensionRepoException\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\n\nclass AnimeExtensionRepoRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : AnimeExtensionRepoRepository {\n    override fun subscribeAll(): Flow<List<ExtensionRepo>> {\n        return handler.subscribeToList { extension_reposQueries.findAll(::mapExtensionRepo) }\n    }\n\n    override suspend fun getAll(): List<ExtensionRepo> {\n        return handler.awaitList { extension_reposQueries.findAll(::mapExtensionRepo) }\n    }\n\n    override suspend fun getRepo(baseUrl: String): ExtensionRepo? {\n        return handler.awaitOneOrNull { extension_reposQueries.findOne(baseUrl, ::mapExtensionRepo) }\n    }\n\n    override suspend fun getRepoBySigningKeyFingerprint(fingerprint: String): ExtensionRepo? {\n        return handler.awaitOneOrNull {\n            extension_reposQueries.findOneBySigningKeyFingerprint(fingerprint, ::mapExtensionRepo)\n        }\n    }\n\n    override fun getCount(): Flow<Int> {\n        return handler.subscribeToOne { extension_reposQueries.count() }.map { it.toInt() }\n    }\n\n    override suspend fun insertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    ) {\n        try {\n            handler.await { extension_reposQueries.insert(baseUrl, name, shortName, website, signingKeyFingerprint) }\n        } catch (ex: SQLiteException) {\n            throw SaveExtensionRepoException(ex)\n        }\n    }\n\n    override suspend fun upsertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    ) {\n        try {\n            handler.await { extension_reposQueries.upsert(baseUrl, name, shortName, website, signingKeyFingerprint) }\n        } catch (ex: SQLiteException) {\n            throw SaveExtensionRepoException(ex)\n        }\n    }\n\n    override suspend fun replaceRepo(newRepo: ExtensionRepo) {\n        handler.await {\n            extension_reposQueries.replace(\n                newRepo.baseUrl,\n                newRepo.name,\n                newRepo.shortName,\n                newRepo.website,\n                newRepo.signingKeyFingerprint,\n            )\n        }\n    }\n\n    override suspend fun deleteRepo(baseUrl: String) {\n        return handler.await { extension_reposQueries.delete(baseUrl) }\n    }\n\n    private fun mapExtensionRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    ): ExtensionRepo = ExtensionRepo(\n        baseUrl = baseUrl,\n        name = name,\n        shortName = shortName,\n        website = website,\n        signingKeyFingerprint = signingKeyFingerprint,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/mihon/data/repository/manga/MangaExtensionRepoRepositoryImpl.kt",
    "content": "package mihon.data.repository.manga\n\nimport android.database.sqlite.SQLiteException\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\nimport mihon.domain.extensionrepo.exception.SaveExtensionRepoException\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\n\nclass MangaExtensionRepoRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : MangaExtensionRepoRepository {\n    override fun subscribeAll(): Flow<List<ExtensionRepo>> {\n        return handler.subscribeToList { extension_reposQueries.findAll(::mapExtensionRepo) }\n    }\n\n    override suspend fun getAll(): List<ExtensionRepo> {\n        return handler.awaitList { extension_reposQueries.findAll(::mapExtensionRepo) }\n    }\n\n    override suspend fun getRepo(baseUrl: String): ExtensionRepo? {\n        return handler.awaitOneOrNull { extension_reposQueries.findOne(baseUrl, ::mapExtensionRepo) }\n    }\n\n    override suspend fun getRepoBySigningKeyFingerprint(fingerprint: String): ExtensionRepo? {\n        return handler.awaitOneOrNull {\n            extension_reposQueries.findOneBySigningKeyFingerprint(fingerprint, ::mapExtensionRepo)\n        }\n    }\n\n    override fun getCount(): Flow<Int> {\n        return handler.subscribeToOne { extension_reposQueries.count() }.map { it.toInt() }\n    }\n\n    override suspend fun insertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    ) {\n        try {\n            handler.await { extension_reposQueries.insert(baseUrl, name, shortName, website, signingKeyFingerprint) }\n        } catch (ex: SQLiteException) {\n            throw SaveExtensionRepoException(ex)\n        }\n    }\n\n    override suspend fun upsertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    ) {\n        try {\n            handler.await { extension_reposQueries.upsert(baseUrl, name, shortName, website, signingKeyFingerprint) }\n        } catch (ex: SQLiteException) {\n            throw SaveExtensionRepoException(ex)\n        }\n    }\n\n    override suspend fun replaceRepo(newRepo: ExtensionRepo) {\n        handler.await {\n            extension_reposQueries.replace(\n                newRepo.baseUrl,\n                newRepo.name,\n                newRepo.shortName,\n                newRepo.website,\n                newRepo.signingKeyFingerprint,\n            )\n        }\n    }\n\n    override suspend fun deleteRepo(baseUrl: String) {\n        return handler.await { extension_reposQueries.delete(baseUrl) }\n    }\n\n    private fun mapExtensionRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    ): ExtensionRepo = ExtensionRepo(\n        baseUrl = baseUrl,\n        name = name,\n        shortName = shortName,\n        website = website,\n        signingKeyFingerprint = signingKeyFingerprint,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/DatabaseAdapter.kt",
    "content": "package tachiyomi.data\n\nimport app.cash.sqldelight.ColumnAdapter\nimport eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.source.model.UpdateStrategy\nimport java.util.Date\n\nobject DateColumnAdapter : ColumnAdapter<Date, Long> {\n    override fun decode(databaseValue: Long): Date = Date(databaseValue)\n    override fun encode(value: Date): Long = value.time\n}\n\nprivate const val LIST_OF_STRINGS_SEPARATOR = \", \"\nobject StringListColumnAdapter : ColumnAdapter<List<String>, String> {\n    override fun decode(databaseValue: String) =\n        if (databaseValue.isEmpty()) {\n            emptyList()\n        } else {\n            databaseValue.split(LIST_OF_STRINGS_SEPARATOR)\n        }\n    override fun encode(value: List<String>) = value.joinToString(\n        separator = LIST_OF_STRINGS_SEPARATOR,\n    )\n}\n\nobject MangaUpdateStrategyColumnAdapter : ColumnAdapter<UpdateStrategy, Long> {\n    override fun decode(databaseValue: Long): UpdateStrategy =\n        UpdateStrategy.entries.getOrElse(databaseValue.toInt()) { UpdateStrategy.ALWAYS_UPDATE }\n\n    override fun encode(value: UpdateStrategy): Long = value.ordinal.toLong()\n}\n\nobject AnimeUpdateStrategyColumnAdapter : ColumnAdapter<AnimeUpdateStrategy, Long> {\n    override fun decode(databaseValue: Long): AnimeUpdateStrategy =\n        AnimeUpdateStrategy.entries.getOrElse(databaseValue.toInt()) { AnimeUpdateStrategy.ALWAYS_UPDATE }\n\n    override fun encode(value: AnimeUpdateStrategy): Long = value.ordinal.toLong()\n}\n\nobject FetchTypeColumnAdapter : ColumnAdapter<FetchType, Long> {\n    override fun decode(databaseValue: Long): FetchType =\n        FetchType.entries.getOrElse(databaseValue.toInt()) { FetchType.Episodes }\n\n    override fun encode(value: FetchType): Long = value.ordinal.toLong()\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/category/anime/AnimeCategoryRepositoryImpl.kt",
    "content": "package tachiyomi.data.category.anime\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\nimport tachiyomi.mi.data.AnimeDatabase\n\nclass AnimeCategoryRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : AnimeCategoryRepository {\n\n    override suspend fun getAnimeCategory(id: Long): Category? {\n        return handler.awaitOneOrNull { categoriesQueries.getCategory(id, ::mapCategory) }\n    }\n\n    override suspend fun getAllAnimeCategories(): List<Category> {\n        return handler.awaitList { categoriesQueries.getCategories(::mapCategory) }\n    }\n\n    override suspend fun getAllVisibleAnimeCategories(): List<Category> {\n        return handler.awaitList { categoriesQueries.getVisibleCategories(::mapCategory) }\n    }\n\n    override fun getAllAnimeCategoriesAsFlow(): Flow<List<Category>> {\n        return handler.subscribeToList { categoriesQueries.getCategories(::mapCategory) }\n    }\n\n    override fun getAllVisibleAnimeCategoriesAsFlow(): Flow<List<Category>> {\n        return handler.subscribeToList { categoriesQueries.getVisibleCategories(::mapCategory) }\n    }\n\n    override suspend fun getCategoriesByAnimeId(animeId: Long): List<Category> {\n        return handler.awaitList {\n            categoriesQueries.getCategoriesByAnimeId(animeId, ::mapCategory)\n        }\n    }\n\n    override suspend fun getVisibleCategoriesByAnimeId(animeId: Long): List<Category> {\n        return handler.awaitList {\n            categoriesQueries.getVisibleCategoriesByAnimeId(animeId, ::mapCategory)\n        }\n    }\n\n    override fun getCategoriesByAnimeIdAsFlow(animeId: Long): Flow<List<Category>> {\n        return handler.subscribeToList {\n            categoriesQueries.getCategoriesByAnimeId(animeId, ::mapCategory)\n        }\n    }\n\n    override fun getVisibleCategoriesByAnimeIdAsFlow(animeId: Long): Flow<List<Category>> {\n        return handler.subscribeToList {\n            categoriesQueries.getVisibleCategoriesByAnimeId(animeId, ::mapCategory)\n        }\n    }\n\n    override suspend fun insertAnimeCategory(category: Category) {\n        handler.await {\n            categoriesQueries.insert(\n                name = category.name,\n                order = category.order,\n                flags = category.flags,\n            )\n        }\n    }\n\n    override suspend fun updatePartialAnimeCategory(update: CategoryUpdate) {\n        handler.await {\n            updatePartialBlocking(update)\n        }\n    }\n\n    override suspend fun updatePartialAnimeCategories(updates: List<CategoryUpdate>) {\n        handler.await(inTransaction = true) {\n            for (update in updates) {\n                updatePartialBlocking(update)\n            }\n        }\n    }\n\n    private fun AnimeDatabase.updatePartialBlocking(update: CategoryUpdate) {\n        categoriesQueries.update(\n            name = update.name,\n            order = update.order,\n            flags = update.flags,\n            hidden = update.hidden?.let { if (it) 1L else 0L },\n            categoryId = update.id,\n        )\n    }\n\n    override suspend fun updateAllAnimeCategoryFlags(flags: Long?) {\n        handler.await {\n            categoriesQueries.updateAllFlags(flags)\n        }\n    }\n\n    override suspend fun deleteAnimeCategory(categoryId: Long) {\n        handler.await {\n            categoriesQueries.delete(\n                categoryId = categoryId,\n            )\n        }\n    }\n\n    private fun mapCategory(\n        id: Long,\n        name: String,\n        order: Long,\n        flags: Long,\n        hidden: Long,\n    ): Category {\n        return Category(\n            id = id,\n            name = name,\n            order = order,\n            flags = flags,\n            hidden = hidden == 1L,\n        )\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/category/manga/MangaCategoryRepositoryImpl.kt",
    "content": "package tachiyomi.data.category.manga\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.Database\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass MangaCategoryRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : MangaCategoryRepository {\n\n    override suspend fun getMangaCategory(id: Long): Category? {\n        return handler.awaitOneOrNull { categoriesQueries.getCategory(id, ::mapCategory) }\n    }\n\n    override suspend fun getAllMangaCategories(): List<Category> {\n        return handler.awaitList { categoriesQueries.getCategories(::mapCategory) }\n    }\n\n    override suspend fun getAllVisibleMangaCategories(): List<Category> {\n        return handler.awaitList { categoriesQueries.getVisibleCategories(::mapCategory) }\n    }\n\n    override fun getAllMangaCategoriesAsFlow(): Flow<List<Category>> {\n        return handler.subscribeToList { categoriesQueries.getCategories(::mapCategory) }\n    }\n\n    override fun getAllVisibleMangaCategoriesAsFlow(): Flow<List<Category>> {\n        return handler.subscribeToList { categoriesQueries.getVisibleCategories(::mapCategory) }\n    }\n\n    override suspend fun getCategoriesByMangaId(mangaId: Long): List<Category> {\n        return handler.awaitList {\n            categoriesQueries.getCategoriesByMangaId(mangaId, ::mapCategory)\n        }\n    }\n\n    override suspend fun getVisibleCategoriesByMangaId(mangaId: Long): List<Category> {\n        return handler.awaitList {\n            categoriesQueries.getVisibleCategoriesByMangaId(mangaId, ::mapCategory)\n        }\n    }\n\n    override fun getCategoriesByMangaIdAsFlow(mangaId: Long): Flow<List<Category>> {\n        return handler.subscribeToList {\n            categoriesQueries.getCategoriesByMangaId(mangaId, ::mapCategory)\n        }\n    }\n\n    override fun getVisibleCategoriesByMangaIdAsFlow(mangaId: Long): Flow<List<Category>> {\n        return handler.subscribeToList {\n            categoriesQueries.getVisibleCategoriesByMangaId(mangaId, ::mapCategory)\n        }\n    }\n\n    override suspend fun insertMangaCategory(category: Category) {\n        handler.await {\n            categoriesQueries.insert(\n                name = category.name,\n                order = category.order,\n                flags = category.flags,\n            )\n        }\n    }\n\n    override suspend fun updatePartialMangaCategory(update: CategoryUpdate) {\n        handler.await {\n            updatePartialBlocking(update)\n        }\n    }\n\n    override suspend fun updatePartialMangaCategories(updates: List<CategoryUpdate>) {\n        handler.await(inTransaction = true) {\n            for (update in updates) {\n                updatePartialBlocking(update)\n            }\n        }\n    }\n\n    private fun Database.updatePartialBlocking(update: CategoryUpdate) {\n        categoriesQueries.update(\n            name = update.name,\n            order = update.order,\n            flags = update.flags,\n            hidden = update.hidden?.let { if (it) 1L else 0L },\n            categoryId = update.id,\n        )\n    }\n\n    override suspend fun updateAllMangaCategoryFlags(flags: Long?) {\n        handler.await {\n            categoriesQueries.updateAllFlags(flags)\n        }\n    }\n\n    override suspend fun deleteMangaCategory(categoryId: Long) {\n        handler.await {\n            categoriesQueries.delete(\n                categoryId = categoryId,\n            )\n        }\n    }\n\n    private fun mapCategory(\n        id: Long,\n        name: String,\n        order: Long,\n        flags: Long,\n        hidden: Long,\n    ): Category {\n        return Category(\n            id = id,\n            name = name,\n            order = order,\n            flags = flags,\n            hidden = hidden == 1L,\n        )\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/custombutton/CustomButtonRepositoryImpl.kt",
    "content": "package tachiyomi.data.custombutton\n\nimport android.database.sqlite.SQLiteException\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.custombuttons.exception.SaveCustomButtonException\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\nimport tachiyomi.mi.data.AnimeDatabase\n\nclass CustomButtonRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : CustomButtonRepository {\n    override fun subscribeAll(): Flow<List<CustomButton>> {\n        return handler.subscribeToList { custom_buttonsQueries.findAll(::mapCustomButton) }\n    }\n\n    override suspend fun getAll(): List<CustomButton> {\n        return handler.awaitList { custom_buttonsQueries.findAll(::mapCustomButton) }\n    }\n\n    override suspend fun insertCustomButton(\n        name: String,\n        sortIndex: Long,\n        content: String,\n        longPressContent: String,\n        onStartup: String,\n    ) {\n        try {\n            handler.await { custom_buttonsQueries.insert(name, false, sortIndex, content, longPressContent, onStartup) }\n        } catch (ex: SQLiteException) {\n            throw SaveCustomButtonException(ex)\n        }\n    }\n\n    override suspend fun updatePartialCustomButton(update: CustomButtonUpdate) {\n        handler.await {\n            updatePartialBlocking(update)\n        }\n    }\n\n    override suspend fun updatePartialCustomButtons(updates: List<CustomButtonUpdate>) {\n        handler.await(inTransaction = true) {\n            for (update in updates) {\n                updatePartialBlocking(update)\n            }\n        }\n    }\n\n    override suspend fun deleteCustomButton(customButtonId: Long) {\n        return handler.await { custom_buttonsQueries.delete(customButtonId) }\n    }\n\n    private fun AnimeDatabase.updatePartialBlocking(update: CustomButtonUpdate) {\n        custom_buttonsQueries.update(\n            name = update.name,\n            isFavorite = update.isFavorite,\n            sortIndex = update.sortIndex,\n            content = update.content,\n            longPressContent = update.longPressContent,\n            customButtonId = update.id,\n            onStartup = update.onStartup,\n        )\n    }\n\n    private fun mapCustomButton(\n        id: Long,\n        name: String,\n        isFavorite: Boolean,\n        sortIndex: Long,\n        content: String,\n        longPressContent: String,\n        onStartup: String,\n    ): CustomButton = CustomButton(\n        id = id,\n        name = name,\n        isFavorite = isFavorite,\n        sortIndex = sortIndex,\n        content = content,\n        longPressContent = longPressContent,\n        onStartup = onStartup,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/entries/anime/AnimeMapper.kt",
    "content": "package tachiyomi.data.entries.anime\n\nimport aniyomi.domain.anime.SeasonAnime\nimport eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.model.DeletableAnime\n\nobject AnimeMapper {\n    fun mapAnime(\n        id: Long,\n        source: Long,\n        url: String,\n        artist: String?,\n        author: String?,\n        description: String?,\n        genre: List<String>?,\n        title: String,\n        status: Long,\n        thumbnailUrl: String?,\n        favorite: Boolean,\n        lastUpdate: Long?,\n        nextUpdate: Long?,\n        initialized: Boolean,\n        viewerFlags: Long,\n        chapterFlags: Long,\n        coverLastModified: Long,\n        dateAdded: Long,\n        updateStrategy: AnimeUpdateStrategy,\n        calculateInterval: Long,\n        lastModifiedAt: Long,\n        favoriteModifiedAt: Long?,\n        version: Long,\n        @Suppress(\"UNUSED_PARAMETER\")\n        isSyncing: Long,\n        fetchType: FetchType,\n        parentId: Long?,\n        seasonFlags: Long,\n        seasonNumber: Double,\n        seasonSourceOrder: Long,\n        backgroundUrl: String?,\n        backgroundLastModified: Long,\n    ): Anime = Anime(\n        id = id,\n        source = source,\n        favorite = favorite,\n        lastUpdate = lastUpdate ?: 0,\n        nextUpdate = nextUpdate ?: 0,\n        fetchInterval = calculateInterval.toInt(),\n        dateAdded = dateAdded,\n        viewerFlags = viewerFlags,\n        episodeFlags = chapterFlags,\n        coverLastModified = coverLastModified,\n        backgroundLastModified = backgroundLastModified,\n        url = url,\n        title = title,\n        artist = artist,\n        author = author,\n        description = description,\n        genre = genre,\n        status = status,\n        thumbnailUrl = thumbnailUrl,\n        backgroundUrl = backgroundUrl,\n        updateStrategy = updateStrategy,\n        initialized = initialized,\n        lastModifiedAt = lastModifiedAt,\n        favoriteModifiedAt = favoriteModifiedAt,\n        version = version,\n        fetchType = fetchType,\n        parentId = parentId,\n        seasonFlags = seasonFlags,\n        seasonNumber = seasonNumber,\n        seasonSourceOrder = seasonSourceOrder,\n    )\n\n    fun mapLibraryAnime(\n        id: Long,\n        source: Long,\n        url: String,\n        artist: String?,\n        author: String?,\n        description: String?,\n        genre: List<String>?,\n        title: String,\n        status: Long,\n        thumbnailUrl: String?,\n        favorite: Boolean,\n        lastUpdate: Long?,\n        nextUpdate: Long?,\n        initialized: Boolean,\n        viewerFlags: Long,\n        chapterFlags: Long,\n        coverLastModified: Long,\n        dateAdded: Long,\n        updateStrategy: AnimeUpdateStrategy,\n        calculateInterval: Long,\n        lastModifiedAt: Long,\n        favoriteModifiedAt: Long?,\n        version: Long,\n        isSyncing: Long,\n        fetchType: FetchType,\n        parentId: Long?,\n        seasonFlags: Long,\n        seasonNumber: Double,\n        seasonSourceOrder: Long,\n        backgroundUrl: String?,\n        backgroundLastModified: Long,\n        totalCount: Long,\n        seenCount: Double,\n        latestUpload: Long,\n        episodeFetchedAt: Long,\n        lastSeen: Long,\n        bookmarkCount: Double,\n        fillermarkCount: Double,\n        category: Long,\n    ): LibraryAnime = LibraryAnime(\n        anime = mapAnime(\n            id,\n            source,\n            url,\n            artist,\n            author,\n            description,\n            genre,\n            title,\n            status,\n            thumbnailUrl,\n            favorite,\n            lastUpdate,\n            nextUpdate,\n            initialized,\n            viewerFlags,\n            chapterFlags,\n            coverLastModified,\n            dateAdded,\n            updateStrategy,\n            calculateInterval,\n            lastModifiedAt,\n            favoriteModifiedAt,\n            version,\n            isSyncing,\n            fetchType,\n            parentId,\n            seasonFlags,\n            seasonNumber,\n            seasonSourceOrder,\n            backgroundUrl,\n            backgroundLastModified,\n        ),\n        category = category,\n        totalCount = totalCount,\n        seenCount = seenCount.toLong(),\n        bookmarkCount = bookmarkCount.toLong(),\n        fillermarkCount = fillermarkCount.toLong(),\n        latestUpload = latestUpload,\n        episodeFetchedAt = episodeFetchedAt,\n        lastSeen = lastSeen,\n    )\n\n    fun mapSeasonAnime(\n        id: Long,\n        source: Long,\n        url: String,\n        artist: String?,\n        author: String?,\n        description: String?,\n        genre: List<String>?,\n        title: String,\n        status: Long,\n        thumbnailUrl: String?,\n        favorite: Boolean,\n        lastUpdate: Long?,\n        nextUpdate: Long?,\n        initialized: Boolean,\n        viewerFlags: Long,\n        chapterFlags: Long,\n        coverLastModified: Long,\n        dateAdded: Long,\n        updateStrategy: AnimeUpdateStrategy,\n        calculateInterval: Long,\n        lastModifiedAt: Long,\n        favoriteModifiedAt: Long?,\n        version: Long,\n        isSyncing: Long,\n        fetchType: FetchType,\n        parentId: Long?,\n        seasonFlags: Long,\n        seasonNumber: Double,\n        seasonSourceOrder: Long,\n        backgroundUrl: String?,\n        backgroundLastModified: Long,\n        totalCount: Long,\n        seenCount: Double,\n        latestUpload: Long,\n        fetchedAt: Long,\n        lastSeen: Long,\n        bookmarkCount: Double,\n        fillermarkCount: Double,\n    ): SeasonAnime = SeasonAnime(\n        anime = mapAnime(\n            id,\n            source,\n            url,\n            artist,\n            author,\n            description,\n            genre,\n            title,\n            status,\n            thumbnailUrl,\n            favorite,\n            lastUpdate,\n            nextUpdate,\n            initialized,\n            viewerFlags,\n            chapterFlags,\n            coverLastModified,\n            dateAdded,\n            updateStrategy,\n            calculateInterval,\n            lastModifiedAt,\n            favoriteModifiedAt,\n            version,\n            isSyncing,\n            fetchType,\n            parentId,\n            seasonFlags,\n            seasonNumber,\n            seasonSourceOrder,\n            backgroundUrl,\n            backgroundLastModified,\n        ),\n        totalCount = totalCount,\n        seenCount = seenCount.toLong(),\n        bookmarkCount = bookmarkCount.toLong(),\n        fillermarkCount = fillermarkCount.toLong(),\n        latestUpload = latestUpload,\n        fetchedAt = fetchedAt,\n        lastSeen = lastSeen,\n    )\n\n    fun mapDeletableAnime(\n        id: Long,\n        source: Long,\n        fetchType: FetchType,\n    ): DeletableAnime = DeletableAnime(\n        animeId = id,\n        sourceId = source,\n        fetchType = fetchType,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/entries/anime/AnimeRepositoryImpl.kt",
    "content": "package tachiyomi.data.entries.anime\n\nimport aniyomi.domain.anime.SeasonAnime\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.data.AnimeUpdateStrategyColumnAdapter\nimport tachiyomi.data.FetchTypeColumnAdapter\nimport tachiyomi.data.StringListColumnAdapter\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.model.DeletableAnime\nimport java.time.LocalDate\nimport java.time.ZoneId\n\nclass AnimeRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : AnimeRepository {\n\n    override suspend fun getAnimeById(id: Long): Anime {\n        return handler.awaitOne { animesQueries.getAnimeById(id, AnimeMapper::mapAnime) }\n    }\n\n    override suspend fun getAnimeByIdAsFlow(id: Long): Flow<Anime> {\n        return handler.subscribeToOne { animesQueries.getAnimeById(id, AnimeMapper::mapAnime) }\n    }\n\n    override suspend fun getAnimeByUrlAndSourceId(url: String, sourceId: Long): Anime? {\n        return handler.awaitOneOrNull {\n            animesQueries.getAnimeByUrlAndSource(\n                url,\n                sourceId,\n                AnimeMapper::mapAnime,\n            )\n        }\n    }\n\n    override fun getAnimeByUrlAndSourceIdAsFlow(url: String, sourceId: Long): Flow<Anime?> {\n        return handler.subscribeToOneOrNull {\n            animesQueries.getAnimeByUrlAndSource(\n                url,\n                sourceId,\n                AnimeMapper::mapAnime,\n            )\n        }\n    }\n\n    override suspend fun getAnimeFavorites(): List<Anime> {\n        return handler.awaitList { animesQueries.getFavorites(AnimeMapper::mapAnime) }\n    }\n\n    override suspend fun getWatchedAnimeNotInLibrary(): List<Anime> {\n        return handler.awaitList { animesQueries.getWatchedAnimeNotInLibrary(AnimeMapper::mapAnime) }\n    }\n\n    override suspend fun getLibraryAnime(): List<LibraryAnime> {\n        return handler.awaitList { animelibViewQueries.animelib(AnimeMapper::mapLibraryAnime) }\n    }\n\n    override fun getLibraryAnimeAsFlow(): Flow<List<LibraryAnime>> {\n        return handler.subscribeToList { animelibViewQueries.animelib(AnimeMapper::mapLibraryAnime) }\n    }\n\n    override fun getAnimeFavoritesBySourceId(sourceId: Long): Flow<List<Anime>> {\n        return handler.subscribeToList { animesQueries.getFavoriteBySourceId(sourceId, AnimeMapper::mapAnime) }\n    }\n\n    override suspend fun getDuplicateLibraryAnime(id: Long, title: String): List<Anime> {\n        return handler.awaitList {\n            animesQueries.getDuplicateLibraryAnime(title, id, AnimeMapper::mapAnime)\n        }\n    }\n\n    override suspend fun getUpcomingAnime(statuses: Set<Long>): Flow<List<Anime>> {\n        val epochMillis = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toEpochSecond() * 1000\n        return handler.subscribeToList {\n            animesQueries.getUpcomingAnime(epochMillis, statuses, AnimeMapper::mapAnime)\n        }\n    }\n\n    override suspend fun resetAnimeViewerFlags(): Boolean {\n        return try {\n            handler.await { animesQueries.resetViewerFlags() }\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            false\n        }\n    }\n\n    override suspend fun setAnimeCategories(animeId: Long, categoryIds: List<Long>) {\n        handler.await(inTransaction = true) {\n            animes_categoriesQueries.deleteAnimeCategoryByAnimeId(animeId)\n            categoryIds.map { categoryId ->\n                animes_categoriesQueries.insert(animeId, categoryId)\n            }\n        }\n    }\n\n    override suspend fun insertAnime(anime: Anime): Long? {\n        return handler.awaitOneOrNullExecutable(inTransaction = true) {\n            animesQueries.insert(\n                source = anime.source,\n                url = anime.url,\n                artist = anime.artist,\n                author = anime.author,\n                description = anime.description,\n                genre = anime.genre,\n                title = anime.title,\n                status = anime.status,\n                thumbnailUrl = anime.thumbnailUrl,\n                backgroundUrl = anime.backgroundUrl,\n                favorite = anime.favorite,\n                lastUpdate = anime.lastUpdate,\n                nextUpdate = anime.nextUpdate,\n                calculateInterval = anime.fetchInterval.toLong(),\n                initialized = anime.initialized,\n                viewerFlags = anime.viewerFlags,\n                episodeFlags = anime.episodeFlags,\n                coverLastModified = anime.coverLastModified,\n                backgroundLastModified = anime.backgroundLastModified,\n                dateAdded = anime.dateAdded,\n                updateStrategy = anime.updateStrategy,\n                version = anime.version,\n                fetchType = anime.fetchType,\n                parentId = anime.parentId,\n                seasonFlags = anime.seasonFlags,\n                seasonNumber = anime.seasonNumber,\n                seasonSourceOrder = anime.seasonSourceOrder,\n            )\n            animesQueries.selectLastInsertedRowId()\n        }\n    }\n\n    override suspend fun updateAnime(update: AnimeUpdate): Boolean {\n        return try {\n            partialUpdateAnime(update)\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            false\n        }\n    }\n\n    override suspend fun updateAllAnime(animeUpdates: List<AnimeUpdate>): Boolean {\n        return try {\n            partialUpdateAnime(*animeUpdates.toTypedArray())\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            false\n        }\n    }\n\n    override suspend fun getAnimeSeasonsById(parentId: Long): List<SeasonAnime> {\n        return handler.awaitList { animeseasonsViewQueries.getAnimeSeasonsById(parentId, AnimeMapper::mapSeasonAnime) }\n    }\n\n    override fun getAnimeSeasonsByIdAsFlow(parentId: Long): Flow<List<SeasonAnime>> {\n        return handler.subscribeToList {\n            animeseasonsViewQueries.getAnimeSeasonsById(parentId, AnimeMapper::mapSeasonAnime)\n        }\n    }\n\n    override suspend fun removeParentIdByIds(animeIds: List<Long>) {\n        try {\n            handler.await { animesQueries.removeParentIdByIds(animeIds) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    override fun getDeletableParentAnime(): Flow<List<DeletableAnime>> {\n        return handler.subscribeToList {\n            animedeletableViewQueries.getDeletableParentAnime(AnimeMapper::mapDeletableAnime)\n        }\n    }\n\n    override suspend fun getChildrenByParentId(parentId: Long): List<Anime> {\n        return handler.awaitList { animesQueries.getChildrenByParentId(parentId, AnimeMapper::mapAnime) }\n    }\n\n    private suspend fun partialUpdateAnime(vararg animeUpdates: AnimeUpdate) {\n        handler.await(inTransaction = true) {\n            animeUpdates.forEach { value ->\n                animesQueries.update(\n                    source = value.source,\n                    url = value.url,\n                    artist = value.artist,\n                    author = value.author,\n                    description = value.description,\n                    genre = value.genre?.let(StringListColumnAdapter::encode),\n                    title = value.title,\n                    status = value.status,\n                    thumbnailUrl = value.thumbnailUrl,\n                    backgroundUrl = value.backgroundUrl,\n                    favorite = value.favorite,\n                    lastUpdate = value.lastUpdate,\n                    nextUpdate = value.nextUpdate,\n                    calculateInterval = value.fetchInterval?.toLong(),\n                    initialized = value.initialized,\n                    viewer = value.viewerFlags,\n                    episodeFlags = value.episodeFlags,\n                    coverLastModified = value.coverLastModified,\n                    backgroundLastModified = value.backgroundLastModified,\n                    dateAdded = value.dateAdded,\n                    animeId = value.id,\n                    updateStrategy = value.updateStrategy?.let(AnimeUpdateStrategyColumnAdapter::encode),\n                    version = value.version,\n                    isSyncing = 0,\n                    fetchType = value.fetchType?.let(FetchTypeColumnAdapter::encode),\n                    parentId = value.parentId,\n                    seasonFlags = value.seasonFlags,\n                    seasonNumber = value.seasonNumber,\n                    seasonSourceOrder = value.seasonSourceOrder,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/entries/manga/MangaMapper.kt",
    "content": "package tachiyomi.data.entries.manga\n\nimport eu.kanade.tachiyomi.source.model.UpdateStrategy\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.library.manga.LibraryManga\n\nobject MangaMapper {\n    fun mapManga(\n        id: Long,\n        source: Long,\n        url: String,\n        artist: String?,\n        author: String?,\n        description: String?,\n        genre: List<String>?,\n        title: String,\n        status: Long,\n        thumbnailUrl: String?,\n        favorite: Boolean,\n        lastUpdate: Long?,\n        nextUpdate: Long?,\n        initialized: Boolean,\n        viewerFlags: Long,\n        chapterFlags: Long,\n        coverLastModified: Long,\n        dateAdded: Long,\n        updateStrategy: UpdateStrategy,\n        calculateInterval: Long,\n        lastModifiedAt: Long,\n        favoriteModifiedAt: Long?,\n        version: Long,\n        @Suppress(\"UNUSED_PARAMETER\")\n        isSyncing: Long,\n    ): Manga = Manga(\n        id = id,\n        source = source,\n        favorite = favorite,\n        lastUpdate = lastUpdate ?: 0,\n        nextUpdate = nextUpdate ?: 0,\n        fetchInterval = calculateInterval.toInt(),\n        dateAdded = dateAdded,\n        viewerFlags = viewerFlags,\n        chapterFlags = chapterFlags,\n        coverLastModified = coverLastModified,\n        url = url,\n        title = title,\n        artist = artist,\n        author = author,\n        description = description,\n        genre = genre,\n        status = status,\n        thumbnailUrl = thumbnailUrl,\n        updateStrategy = updateStrategy,\n        initialized = initialized,\n        lastModifiedAt = lastModifiedAt,\n        favoriteModifiedAt = favoriteModifiedAt,\n        version = version,\n    )\n\n    fun mapLibraryManga(\n        id: Long,\n        source: Long,\n        url: String,\n        artist: String?,\n        author: String?,\n        description: String?,\n        genre: List<String>?,\n        title: String,\n        status: Long,\n        thumbnailUrl: String?,\n        favorite: Boolean,\n        lastUpdate: Long?,\n        nextUpdate: Long?,\n        initialized: Boolean,\n        viewerFlags: Long,\n        chapterFlags: Long,\n        coverLastModified: Long,\n        dateAdded: Long,\n        updateStrategy: UpdateStrategy,\n        calculateInterval: Long,\n        lastModifiedAt: Long,\n        favoriteModifiedAt: Long?,\n        version: Long,\n        isSyncing: Long,\n        totalCount: Long,\n        readCount: Double,\n        latestUpload: Long,\n        chapterFetchedAt: Long,\n        lastRead: Long,\n        bookmarkCount: Double,\n        category: Long,\n    ): LibraryManga = LibraryManga(\n        manga = mapManga(\n            id,\n            source,\n            url,\n            artist,\n            author,\n            description,\n            genre,\n            title,\n            status,\n            thumbnailUrl,\n            favorite,\n            lastUpdate,\n            nextUpdate,\n            initialized,\n            viewerFlags,\n            chapterFlags,\n            coverLastModified,\n            dateAdded,\n            updateStrategy,\n            calculateInterval,\n            lastModifiedAt,\n            favoriteModifiedAt,\n            version,\n            isSyncing,\n        ),\n        category = category,\n        totalChapters = totalCount,\n        readCount = readCount.toLong(),\n        bookmarkCount = bookmarkCount.toLong(),\n        latestUpload = latestUpload,\n        chapterFetchedAt = chapterFetchedAt,\n        lastRead = lastRead,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/entries/manga/MangaRepositoryImpl.kt",
    "content": "package tachiyomi.data.entries.manga\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.data.MangaUpdateStrategyColumnAdapter\nimport tachiyomi.data.StringListColumnAdapter\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.domain.library.manga.LibraryManga\nimport java.time.LocalDate\nimport java.time.ZoneId\n\nclass MangaRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : MangaRepository {\n\n    override suspend fun getMangaById(id: Long): Manga {\n        return handler.awaitOne { mangasQueries.getMangaById(id, MangaMapper::mapManga) }\n    }\n\n    override suspend fun getMangaByIdAsFlow(id: Long): Flow<Manga> {\n        return handler.subscribeToOne { mangasQueries.getMangaById(id, MangaMapper::mapManga) }\n    }\n\n    override suspend fun getMangaByUrlAndSourceId(url: String, sourceId: Long): Manga? {\n        return handler.awaitOneOrNull {\n            mangasQueries.getMangaByUrlAndSource(\n                url,\n                sourceId,\n                MangaMapper::mapManga,\n            )\n        }\n    }\n\n    override fun getMangaByUrlAndSourceIdAsFlow(url: String, sourceId: Long): Flow<Manga?> {\n        return handler.subscribeToOneOrNull {\n            mangasQueries.getMangaByUrlAndSource(\n                url,\n                sourceId,\n                MangaMapper::mapManga,\n            )\n        }\n    }\n\n    override suspend fun getMangaFavorites(): List<Manga> {\n        return handler.awaitList { mangasQueries.getFavorites(MangaMapper::mapManga) }\n    }\n\n    override suspend fun getReadMangaNotInLibrary(): List<Manga> {\n        return handler.awaitList { mangasQueries.getReadMangaNotInLibrary(MangaMapper::mapManga) }\n    }\n\n    override suspend fun getLibraryManga(): List<LibraryManga> {\n        return handler.awaitList { libraryViewQueries.library(MangaMapper::mapLibraryManga) }\n    }\n\n    override fun getLibraryMangaAsFlow(): Flow<List<LibraryManga>> {\n        return handler.subscribeToList { libraryViewQueries.library(MangaMapper::mapLibraryManga) }\n    }\n\n    override fun getMangaFavoritesBySourceId(sourceId: Long): Flow<List<Manga>> {\n        return handler.subscribeToList { mangasQueries.getFavoriteBySourceId(sourceId, MangaMapper::mapManga) }\n    }\n\n    override suspend fun getDuplicateLibraryManga(id: Long, title: String): List<Manga> {\n        return handler.awaitList {\n            mangasQueries.getDuplicateLibraryManga(title, id, MangaMapper::mapManga)\n        }\n    }\n\n    override suspend fun getUpcomingManga(statuses: Set<Long>): Flow<List<Manga>> {\n        val epochMillis = LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toEpochSecond() * 1000\n        return handler.subscribeToList {\n            mangasQueries.getUpcomingManga(epochMillis, statuses, MangaMapper::mapManga)\n        }\n    }\n\n    override suspend fun resetMangaViewerFlags(): Boolean {\n        return try {\n            handler.await { mangasQueries.resetViewerFlags() }\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            false\n        }\n    }\n\n    override suspend fun setMangaCategories(mangaId: Long, categoryIds: List<Long>) {\n        handler.await(inTransaction = true) {\n            mangas_categoriesQueries.deleteMangaCategoryByMangaId(mangaId)\n            categoryIds.map { categoryId ->\n                mangas_categoriesQueries.insert(mangaId, categoryId)\n            }\n        }\n    }\n\n    override suspend fun insertManga(manga: Manga): Long? {\n        return handler.awaitOneOrNullExecutable(inTransaction = true) {\n            mangasQueries.insert(\n                source = manga.source,\n                url = manga.url,\n                artist = manga.artist,\n                author = manga.author,\n                description = manga.description,\n                genre = manga.genre,\n                title = manga.title,\n                status = manga.status,\n                thumbnailUrl = manga.thumbnailUrl,\n                favorite = manga.favorite,\n                lastUpdate = manga.lastUpdate,\n                nextUpdate = manga.nextUpdate,\n                calculateInterval = manga.fetchInterval.toLong(),\n                initialized = manga.initialized,\n                viewerFlags = manga.viewerFlags,\n                chapterFlags = manga.chapterFlags,\n                coverLastModified = manga.coverLastModified,\n                dateAdded = manga.dateAdded,\n                updateStrategy = manga.updateStrategy,\n                version = manga.version,\n            )\n            mangasQueries.selectLastInsertedRowId()\n        }\n    }\n\n    override suspend fun updateManga(update: MangaUpdate): Boolean {\n        return try {\n            partialUpdateManga(update)\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            false\n        }\n    }\n\n    override suspend fun updateAllManga(mangaUpdates: List<MangaUpdate>): Boolean {\n        return try {\n            partialUpdateManga(*mangaUpdates.toTypedArray())\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            false\n        }\n    }\n\n    private suspend fun partialUpdateManga(vararg mangaUpdates: MangaUpdate) {\n        handler.await(inTransaction = true) {\n            mangaUpdates.forEach { value ->\n                mangasQueries.update(\n                    source = value.source,\n                    url = value.url,\n                    artist = value.artist,\n                    author = value.author,\n                    description = value.description,\n                    genre = value.genre?.let(StringListColumnAdapter::encode),\n                    title = value.title,\n                    status = value.status,\n                    thumbnailUrl = value.thumbnailUrl,\n                    favorite = value.favorite,\n                    lastUpdate = value.lastUpdate,\n                    nextUpdate = value.nextUpdate,\n                    calculateInterval = value.fetchInterval?.toLong(),\n                    initialized = value.initialized,\n                    viewer = value.viewerFlags,\n                    chapterFlags = value.chapterFlags,\n                    coverLastModified = value.coverLastModified,\n                    dateAdded = value.dateAdded,\n                    mangaId = value.id,\n                    updateStrategy = value.updateStrategy?.let(MangaUpdateStrategyColumnAdapter::encode),\n                    version = value.version,\n                    isSyncing = 0,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/anime/AndroidAnimeDatabaseHandler.kt",
    "content": "package tachiyomi.data.handlers.anime\n\nimport androidx.paging.PagingSource\nimport app.cash.sqldelight.ExecutableQuery\nimport app.cash.sqldelight.Query\nimport app.cash.sqldelight.coroutines.asFlow\nimport app.cash.sqldelight.coroutines.mapToList\nimport app.cash.sqldelight.coroutines.mapToOne\nimport app.cash.sqldelight.coroutines.mapToOneOrNull\nimport app.cash.sqldelight.db.SqlDriver\nimport kotlinx.coroutines.CoroutineDispatcher\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.withContext\nimport tachiyomi.mi.data.AnimeDatabase\n\nclass AndroidAnimeDatabaseHandler(\n    val db: AnimeDatabase,\n    private val driver: SqlDriver,\n    val queryDispatcher: CoroutineDispatcher = Dispatchers.IO,\n    val transactionDispatcher: CoroutineDispatcher = queryDispatcher,\n) : AnimeDatabaseHandler {\n\n    val suspendingTransactionId = ThreadLocal<Int>()\n\n    override suspend fun <T> await(inTransaction: Boolean, block: suspend AnimeDatabase.() -> T): T {\n        return dispatch(inTransaction, block)\n    }\n\n    override suspend fun <T : Any> awaitList(\n        inTransaction: Boolean,\n        block: suspend AnimeDatabase.() -> Query<T>,\n    ): List<T> {\n        return dispatch(inTransaction) { block(db).executeAsList() }\n    }\n\n    override suspend fun <T : Any> awaitOne(\n        inTransaction: Boolean,\n        block: suspend AnimeDatabase.() -> Query<T>,\n    ): T {\n        return dispatch(inTransaction) { block(db).executeAsOne() }\n    }\n\n    override suspend fun <T : Any> awaitOneExecutable(\n        inTransaction: Boolean,\n        block: suspend AnimeDatabase.() -> ExecutableQuery<T>,\n    ): T {\n        return dispatch(inTransaction) { block(db).executeAsOne() }\n    }\n\n    override suspend fun <T : Any> awaitOneOrNull(\n        inTransaction: Boolean,\n        block: suspend AnimeDatabase.() -> Query<T>,\n    ): T? {\n        return dispatch(inTransaction) { block(db).executeAsOneOrNull() }\n    }\n\n    override suspend fun <T : Any> awaitOneOrNullExecutable(\n        inTransaction: Boolean,\n        block: suspend AnimeDatabase.() -> ExecutableQuery<T>,\n    ): T? {\n        return dispatch(inTransaction) { block(db).executeAsOneOrNull() }\n    }\n\n    override fun <T : Any> subscribeToList(block: AnimeDatabase.() -> Query<T>): Flow<List<T>> {\n        return block(db).asFlow().mapToList(queryDispatcher)\n    }\n\n    override fun <T : Any> subscribeToOne(block: AnimeDatabase.() -> Query<T>): Flow<T> {\n        return block(db).asFlow().mapToOne(queryDispatcher)\n    }\n\n    override fun <T : Any> subscribeToOneOrNull(block: AnimeDatabase.() -> Query<T>): Flow<T?> {\n        return block(db).asFlow().mapToOneOrNull(queryDispatcher)\n    }\n\n    override fun <T : Any> subscribeToPagingSource(\n        countQuery: AnimeDatabase.() -> Query<Long>,\n        queryProvider: AnimeDatabase.(Long, Long) -> Query<T>,\n    ): PagingSource<Long, T> {\n        return QueryPagingAnimeSource(\n            handler = this,\n            countQuery = countQuery,\n            queryProvider = { limit, offset ->\n                queryProvider.invoke(db, limit, offset)\n            },\n        )\n    }\n\n    private suspend fun <T> dispatch(inTransaction: Boolean, block: suspend AnimeDatabase.() -> T): T {\n        // Create a transaction if needed and run the calling block inside it.\n        if (inTransaction) {\n            return withAnimeTransaction { block(db) }\n        }\n\n        // If we're currently in the transaction thread, there's no need to dispatch our query.\n        if (driver.currentTransaction() != null) {\n            return block(db)\n        }\n\n        // Get the current database context and run the calling block.\n        val context = getCurrentAnimeDatabaseContext()\n        return withContext(context) { block(db) }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/anime/AnimeDatabaseHandler.kt",
    "content": "package tachiyomi.data.handlers.anime\n\nimport androidx.paging.PagingSource\nimport app.cash.sqldelight.ExecutableQuery\nimport app.cash.sqldelight.Query\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.mi.data.AnimeDatabase\n\ninterface AnimeDatabaseHandler {\n\n    suspend fun <T> await(inTransaction: Boolean = false, block: suspend AnimeDatabase.() -> T): T\n\n    suspend fun <T : Any> awaitList(\n        inTransaction: Boolean = false,\n        block: suspend AnimeDatabase.() -> Query<T>,\n    ): List<T>\n\n    suspend fun <T : Any> awaitOne(\n        inTransaction: Boolean = false,\n        block: suspend AnimeDatabase.() -> Query<T>,\n    ): T\n\n    suspend fun <T : Any> awaitOneExecutable(\n        inTransaction: Boolean = false,\n        block: suspend AnimeDatabase.() -> ExecutableQuery<T>,\n    ): T\n\n    suspend fun <T : Any> awaitOneOrNull(\n        inTransaction: Boolean = false,\n        block: suspend AnimeDatabase.() -> Query<T>,\n    ): T?\n\n    suspend fun <T : Any> awaitOneOrNullExecutable(\n        inTransaction: Boolean = false,\n        block: suspend AnimeDatabase.() -> ExecutableQuery<T>,\n    ): T?\n\n    fun <T : Any> subscribeToList(block: AnimeDatabase.() -> Query<T>): Flow<List<T>>\n\n    fun <T : Any> subscribeToOne(block: AnimeDatabase.() -> Query<T>): Flow<T>\n\n    fun <T : Any> subscribeToOneOrNull(block: AnimeDatabase.() -> Query<T>): Flow<T?>\n\n    fun <T : Any> subscribeToPagingSource(\n        countQuery: AnimeDatabase.() -> Query<Long>,\n        queryProvider: AnimeDatabase.(Long, Long) -> Query<T>,\n    ): PagingSource<Long, T>\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/anime/AnimeTransactionContext.kt",
    "content": "package tachiyomi.data.handlers.anime\n\nimport kotlinx.coroutines.CoroutineDispatcher\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.asContextElement\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport kotlinx.coroutines.withContext\nimport java.util.concurrent.RejectedExecutionException\nimport java.util.concurrent.atomic.AtomicInteger\nimport kotlin.coroutines.ContinuationInterceptor\nimport kotlin.coroutines.CoroutineContext\nimport kotlin.coroutines.EmptyCoroutineContext\nimport kotlin.coroutines.coroutineContext\nimport kotlin.coroutines.resume\n\n/**\n * Returns the transaction dispatcher if we are on a transaction, or the database dispatchers.\n */\ninternal suspend fun AndroidAnimeDatabaseHandler.getCurrentAnimeDatabaseContext(): CoroutineContext {\n    return coroutineContext[AnimeTransactionElement]?.transactionDispatcher ?: queryDispatcher\n}\n\n/**\n * Calls the specified suspending [block] in a database transaction. The transaction will be\n * marked as successful unless an exception is thrown in the suspending [block] or the coroutine\n * is cancelled.\n *\n * SQLDelight will only perform at most one transaction at a time, additional transactions are queued\n * and executed on a first come, first serve order.\n *\n * Performing blocking database operations is not permitted in a coroutine scope other than the\n * one received by the suspending block. It is recommended that all [Dao] function invoked within\n * the [block] be suspending functions.\n *\n * The dispatcher used to execute the given [block] will utilize threads from SQLDelight's query executor.\n */\ninternal suspend fun <T> AndroidAnimeDatabaseHandler.withAnimeTransaction(block: suspend () -> T): T {\n    // Use inherited transaction context if available, this allows nested suspending transactions.\n    val transactionContext =\n        coroutineContext[AnimeTransactionElement]?.transactionDispatcher ?: createTransactionContext()\n    return withContext(transactionContext) {\n        val transactionElement = coroutineContext[AnimeTransactionElement]!!\n        transactionElement.acquire()\n        try {\n            db.transactionWithResult {\n                runBlocking(transactionContext) {\n                    block()\n                }\n            }\n        } finally {\n            transactionElement.release()\n        }\n    }\n}\n\n/**\n * Creates a [CoroutineContext] for performing database operations within a coroutine transaction.\n *\n * The context is a combination of a dispatcher, a [AnimeTransactionElement] and a thread local element.\n *\n * * The dispatcher will dispatch coroutines to a single thread that is taken over from the SQLDelight\n * query executor. If the coroutine context is switched, suspending DAO functions will be able to\n * dispatch to the transaction thread.\n *\n * * The [AnimeTransactionElement] serves as an indicator for inherited context, meaning, if there is a\n * switch of context, suspending DAO methods will be able to use the indicator to dispatch the\n * database operation to the transaction thread.\n *\n * * The thread local element serves as a second indicator and marks threads that are used to\n * execute coroutines within the coroutine transaction, more specifically it allows us to identify\n * if a blocking DAO method is invoked within the transaction coroutine. Never assign meaning to\n * this value, for now all we care is if its present or not.\n */\n\nprivate suspend fun AndroidAnimeDatabaseHandler.createTransactionContext(): CoroutineContext {\n    val controlJob = Job()\n    // make sure to tie the control job to this context to avoid blocking the transaction if\n    // context get cancelled before we can even start using this job. Otherwise, the acquired\n    // transaction thread will forever wait for the controlJob to be cancelled.\n    // see b/148181325\n    coroutineContext[Job]?.invokeOnCompletion {\n        controlJob.cancel()\n    }\n\n    val dispatcher = transactionDispatcher.acquireTransactionThread(controlJob)\n    val transactionElement = AnimeTransactionElement(controlJob, dispatcher)\n    val threadLocalElement =\n        suspendingTransactionId.asContextElement(System.identityHashCode(controlJob))\n    return dispatcher + transactionElement + threadLocalElement\n}\n\n/**\n * Acquires a thread from the executor and returns a [ContinuationInterceptor] to dispatch\n * coroutines to the acquired thread. The [controlJob] is used to control the release of the\n * thread by cancelling the job.\n */\nprivate suspend fun CoroutineDispatcher.acquireTransactionThread(\n    controlJob: Job,\n): ContinuationInterceptor {\n    return suspendCancellableCoroutine { continuation ->\n        continuation.invokeOnCancellation {\n            // We got cancelled while waiting to acquire a thread, we can't stop our attempt to\n            // acquire a thread, but we can cancel the controlling job so once it gets acquired it\n            // is quickly released.\n            controlJob.cancel()\n        }\n        try {\n            dispatch(EmptyCoroutineContext) {\n                runBlocking {\n                    // Thread acquired, resume coroutine\n                    continuation.resume(coroutineContext[ContinuationInterceptor]!!)\n                    controlJob.join()\n                }\n            }\n        } catch (ex: RejectedExecutionException) {\n            // Couldn't acquire a thread, cancel coroutine\n            continuation.cancel(\n                IllegalStateException(\n                    \"Unable to acquire a thread to perform the database transaction\",\n                    ex,\n                ),\n            )\n        }\n    }\n}\n\n/**\n * A [CoroutineContext.Element] that indicates there is an on-going database transaction.\n */\nprivate class AnimeTransactionElement(\n    private val transactionThreadControlJob: Job,\n    val transactionDispatcher: ContinuationInterceptor,\n) : CoroutineContext.Element {\n\n    companion object Key : CoroutineContext.Key<AnimeTransactionElement>\n\n    override val key: CoroutineContext.Key<AnimeTransactionElement>\n        get() = AnimeTransactionElement\n\n    /**\n     * Number of transactions (including nested ones) started with this element.\n     * Call [acquire] to increase the count and [release] to decrease it. If the count reaches zero\n     * when [release] is invoked then the transaction job is cancelled and the transaction thread\n     * is released.\n     */\n    private val referenceCount = AtomicInteger(0)\n\n    fun acquire() {\n        referenceCount.incrementAndGet()\n    }\n\n    fun release() {\n        val count = referenceCount.decrementAndGet()\n        if (count < 0) {\n            throw IllegalStateException(\"Transaction was never started or was already released\")\n        } else if (count == 0) {\n            // Cancel the job that controls the transaction thread, causing it to be released.\n            transactionThreadControlJob.cancel()\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/anime/QueryPagingAnimeSource.kt",
    "content": "package tachiyomi.data.handlers.anime\n\nimport androidx.paging.PagingSource\nimport androidx.paging.PagingState\nimport app.cash.sqldelight.Query\nimport tachiyomi.mi.data.AnimeDatabase\nimport kotlin.properties.Delegates\n\nclass QueryPagingAnimeSource<RowType : Any>(\n    val handler: AnimeDatabaseHandler,\n    val countQuery: AnimeDatabase.() -> Query<Long>,\n    val queryProvider: AnimeDatabase.(Long, Long) -> Query<RowType>,\n) : PagingSource<Long, RowType>(), Query.Listener {\n\n    override val jumpingSupported: Boolean = true\n\n    private var currentQuery: Query<RowType>? by Delegates.observable(null) { _, old, new ->\n        old?.removeListener(this)\n        new?.addListener(this)\n    }\n\n    init {\n        registerInvalidatedCallback {\n            currentQuery?.removeListener(this)\n            currentQuery = null\n        }\n    }\n\n    override suspend fun load(params: LoadParams<Long>): LoadResult<Long, RowType> {\n        try {\n            val key = params.key ?: 0L\n            val loadSize = params.loadSize\n            val count = handler.awaitOne { countQuery() }\n\n            val (offset, limit) = when (params) {\n                is LoadParams.Prepend -> key - loadSize to loadSize.toLong()\n                else -> key to loadSize.toLong()\n            }\n\n            val data = handler.awaitList {\n                queryProvider(limit, offset)\n                    .also { currentQuery = it }\n            }\n\n            val (prevKey, nextKey) = when (params) {\n                is LoadParams.Append -> {\n                    offset - loadSize to offset + loadSize\n                }\n                else -> {\n                    offset to offset + loadSize\n                }\n            }\n\n            return LoadResult.Page(\n                data = data,\n                prevKey = if (offset <= 0L || prevKey < 0L) null else prevKey,\n                nextKey = if (offset + loadSize >= count) null else nextKey,\n                itemsBefore = maxOf(0L, offset).toInt(),\n                itemsAfter = maxOf(0L, count - (offset + loadSize)).toInt(),\n            )\n        } catch (e: Exception) {\n            return LoadResult.Error(throwable = e)\n        }\n    }\n\n    override fun getRefreshKey(state: PagingState<Long, RowType>): Long? {\n        return state.anchorPosition?.let { anchorPosition ->\n            val anchorPage = state.closestPageToPosition(anchorPosition)\n            anchorPage?.prevKey ?: anchorPage?.nextKey\n        }\n    }\n\n    override fun queryResultsChanged() {\n        invalidate()\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/manga/AndroidMangaDatabaseHandler.kt",
    "content": "package tachiyomi.data.handlers.manga\n\nimport androidx.paging.PagingSource\nimport app.cash.sqldelight.ExecutableQuery\nimport app.cash.sqldelight.Query\nimport app.cash.sqldelight.coroutines.asFlow\nimport app.cash.sqldelight.coroutines.mapToList\nimport app.cash.sqldelight.coroutines.mapToOne\nimport app.cash.sqldelight.coroutines.mapToOneOrNull\nimport app.cash.sqldelight.db.SqlDriver\nimport kotlinx.coroutines.CoroutineDispatcher\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.withContext\nimport tachiyomi.data.Database\n\nclass AndroidMangaDatabaseHandler(\n    val db: Database,\n    private val driver: SqlDriver,\n    val queryDispatcher: CoroutineDispatcher = Dispatchers.IO,\n    val transactionDispatcher: CoroutineDispatcher = queryDispatcher,\n) : MangaDatabaseHandler {\n\n    val suspendingTransactionId = ThreadLocal<Int>()\n\n    override suspend fun <T> await(inTransaction: Boolean, block: suspend Database.() -> T): T {\n        return dispatch(inTransaction, block)\n    }\n\n    override suspend fun <T : Any> awaitList(\n        inTransaction: Boolean,\n        block: suspend Database.() -> Query<T>,\n    ): List<T> {\n        return dispatch(inTransaction) { block(db).executeAsList() }\n    }\n\n    override suspend fun <T : Any> awaitOne(\n        inTransaction: Boolean,\n        block: suspend Database.() -> Query<T>,\n    ): T {\n        return dispatch(inTransaction) { block(db).executeAsOne() }\n    }\n\n    override suspend fun <T : Any> awaitOneExecutable(\n        inTransaction: Boolean,\n        block: suspend Database.() -> ExecutableQuery<T>,\n    ): T {\n        return dispatch(inTransaction) { block(db).executeAsOne() }\n    }\n\n    override suspend fun <T : Any> awaitOneOrNull(\n        inTransaction: Boolean,\n        block: suspend Database.() -> Query<T>,\n    ): T? {\n        return dispatch(inTransaction) { block(db).executeAsOneOrNull() }\n    }\n\n    override suspend fun <T : Any> awaitOneOrNullExecutable(\n        inTransaction: Boolean,\n        block: suspend Database.() -> ExecutableQuery<T>,\n    ): T? {\n        return dispatch(inTransaction) { block(db).executeAsOneOrNull() }\n    }\n\n    override fun <T : Any> subscribeToList(block: Database.() -> Query<T>): Flow<List<T>> {\n        return block(db).asFlow().mapToList(queryDispatcher)\n    }\n\n    override fun <T : Any> subscribeToOne(block: Database.() -> Query<T>): Flow<T> {\n        return block(db).asFlow().mapToOne(queryDispatcher)\n    }\n\n    override fun <T : Any> subscribeToOneOrNull(block: Database.() -> Query<T>): Flow<T?> {\n        return block(db).asFlow().mapToOneOrNull(queryDispatcher)\n    }\n\n    override fun <T : Any> subscribeToPagingSource(\n        countQuery: Database.() -> Query<Long>,\n        queryProvider: Database.(Long, Long) -> Query<T>,\n    ): PagingSource<Long, T> {\n        return QueryPagingMangaSource(\n            handler = this,\n            countQuery = countQuery,\n            queryProvider = { limit, offset ->\n                queryProvider.invoke(db, limit, offset)\n            },\n        )\n    }\n\n    private suspend fun <T> dispatch(inTransaction: Boolean, block: suspend Database.() -> T): T {\n        // Create a transaction if needed and run the calling block inside it.\n        if (inTransaction) {\n            return withMangaTransaction { block(db) }\n        }\n\n        // If we're currently in the transaction thread, there's no need to dispatch our query.\n        if (driver.currentTransaction() != null) {\n            return block(db)\n        }\n\n        // Get the current database context and run the calling block.\n        val context = getCurrentMangaDatabaseContext()\n        return withContext(context) { block(db) }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/manga/MangaDatabaseHandler.kt",
    "content": "package tachiyomi.data.handlers.manga\n\nimport androidx.paging.PagingSource\nimport app.cash.sqldelight.ExecutableQuery\nimport app.cash.sqldelight.Query\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.Database\n\ninterface MangaDatabaseHandler {\n\n    suspend fun <T> await(inTransaction: Boolean = false, block: suspend Database.() -> T): T\n\n    suspend fun <T : Any> awaitList(\n        inTransaction: Boolean = false,\n        block: suspend Database.() -> Query<T>,\n    ): List<T>\n\n    suspend fun <T : Any> awaitOne(\n        inTransaction: Boolean = false,\n        block: suspend Database.() -> Query<T>,\n    ): T\n\n    suspend fun <T : Any> awaitOneExecutable(\n        inTransaction: Boolean = false,\n        block: suspend Database.() -> ExecutableQuery<T>,\n    ): T\n\n    suspend fun <T : Any> awaitOneOrNull(\n        inTransaction: Boolean = false,\n        block: suspend Database.() -> Query<T>,\n    ): T?\n\n    suspend fun <T : Any> awaitOneOrNullExecutable(\n        inTransaction: Boolean = false,\n        block: suspend Database.() -> ExecutableQuery<T>,\n    ): T?\n\n    fun <T : Any> subscribeToList(block: Database.() -> Query<T>): Flow<List<T>>\n\n    fun <T : Any> subscribeToOne(block: Database.() -> Query<T>): Flow<T>\n\n    fun <T : Any> subscribeToOneOrNull(block: Database.() -> Query<T>): Flow<T?>\n\n    fun <T : Any> subscribeToPagingSource(\n        countQuery: Database.() -> Query<Long>,\n        queryProvider: Database.(Long, Long) -> Query<T>,\n    ): PagingSource<Long, T>\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/manga/MangaTransactionContext.kt",
    "content": "package tachiyomi.data.handlers.manga\n\nimport kotlinx.coroutines.CoroutineDispatcher\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.asContextElement\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.suspendCancellableCoroutine\nimport kotlinx.coroutines.withContext\nimport java.util.concurrent.RejectedExecutionException\nimport java.util.concurrent.atomic.AtomicInteger\nimport kotlin.coroutines.ContinuationInterceptor\nimport kotlin.coroutines.CoroutineContext\nimport kotlin.coroutines.EmptyCoroutineContext\nimport kotlin.coroutines.coroutineContext\nimport kotlin.coroutines.resume\n\n/**\n * Returns the transaction dispatcher if we are on a transaction, or the database dispatchers.\n */\ninternal suspend fun AndroidMangaDatabaseHandler.getCurrentMangaDatabaseContext(): CoroutineContext {\n    return coroutineContext[TransactionElement]?.transactionDispatcher ?: queryDispatcher\n}\n\n/**\n * Calls the specified suspending [block] in a database transaction. The transaction will be\n * marked as successful unless an exception is thrown in the suspending [block] or the coroutine\n * is cancelled.\n *\n * SQLDelight will only perform at most one transaction at a time, additional transactions are queued\n * and executed on a first come, first serve order.\n *\n * Performing blocking database operations is not permitted in a coroutine scope other than the\n * one received by the suspending block. It is recommended that all [Dao] function invoked within\n * the [block] be suspending functions.\n *\n * The dispatcher used to execute the given [block] will utilize threads from SQLDelight's query executor.\n */\ninternal suspend fun <T> AndroidMangaDatabaseHandler.withMangaTransaction(block: suspend () -> T): T {\n    // Use inherited transaction context if available, this allows nested suspending transactions.\n    val transactionContext =\n        coroutineContext[TransactionElement]?.transactionDispatcher ?: createTransactionContext()\n    return withContext(transactionContext) {\n        val transactionElement = coroutineContext[TransactionElement]!!\n        transactionElement.acquire()\n        try {\n            db.transactionWithResult {\n                runBlocking(transactionContext) {\n                    block()\n                }\n            }\n        } finally {\n            transactionElement.release()\n        }\n    }\n}\n\n/**\n * Creates a [CoroutineContext] for performing database operations within a coroutine transaction.\n *\n * The context is a combination of a dispatcher, a [TransactionElement] and a thread local element.\n *\n * * The dispatcher will dispatch coroutines to a single thread that is taken over from the SQLDelight\n * query executor. If the coroutine context is switched, suspending DAO functions will be able to\n * dispatch to the transaction thread.\n *\n * * The [TransactionElement] serves as an indicator for inherited context, meaning, if there is a\n * switch of context, suspending DAO methods will be able to use the indicator to dispatch the\n * database operation to the transaction thread.\n *\n * * The thread local element serves as a second indicator and marks threads that are used to\n * execute coroutines within the coroutine transaction, more specifically it allows us to identify\n * if a blocking DAO method is invoked within the transaction coroutine. Never assign meaning to\n * this value, for now all we care is if its present or not.\n */\nprivate suspend fun AndroidMangaDatabaseHandler.createTransactionContext(): CoroutineContext {\n    val controlJob = Job()\n    // make sure to tie the control job to this context to avoid blocking the transaction if\n    // context get cancelled before we can even start using this job. Otherwise, the acquired\n    // transaction thread will forever wait for the controlJob to be cancelled.\n    // see b/148181325\n    coroutineContext[Job]?.invokeOnCompletion {\n        controlJob.cancel()\n    }\n\n    val dispatcher = transactionDispatcher.acquireTransactionThread(controlJob)\n    val transactionElement = TransactionElement(controlJob, dispatcher)\n    val threadLocalElement =\n        suspendingTransactionId.asContextElement(System.identityHashCode(controlJob))\n    return dispatcher + transactionElement + threadLocalElement\n}\n\n/**\n * Acquires a thread from the executor and returns a [ContinuationInterceptor] to dispatch\n * coroutines to the acquired thread. The [controlJob] is used to control the release of the\n * thread by cancelling the job.\n */\nprivate suspend fun CoroutineDispatcher.acquireTransactionThread(\n    controlJob: Job,\n): ContinuationInterceptor {\n    return suspendCancellableCoroutine { continuation ->\n        continuation.invokeOnCancellation {\n            // We got cancelled while waiting to acquire a thread, we can't stop our attempt to\n            // acquire a thread, but we can cancel the controlling job so once it gets acquired it\n            // is quickly released.\n            controlJob.cancel()\n        }\n        try {\n            dispatch(EmptyCoroutineContext) {\n                runBlocking {\n                    // Thread acquired, resume coroutine\n                    continuation.resume(coroutineContext[ContinuationInterceptor]!!)\n                    controlJob.join()\n                }\n            }\n        } catch (ex: RejectedExecutionException) {\n            // Couldn't acquire a thread, cancel coroutine\n            continuation.cancel(\n                IllegalStateException(\n                    \"Unable to acquire a thread to perform the database transaction\",\n                    ex,\n                ),\n            )\n        }\n    }\n}\n\n/**\n * A [CoroutineContext.Element] that indicates there is an on-going database transaction.\n */\nprivate class TransactionElement(\n    private val transactionThreadControlJob: Job,\n    val transactionDispatcher: ContinuationInterceptor,\n) : CoroutineContext.Element {\n\n    companion object Key : CoroutineContext.Key<TransactionElement>\n\n    override val key: CoroutineContext.Key<TransactionElement>\n        get() = TransactionElement\n\n    /**\n     * Number of transactions (including nested ones) started with this element.\n     * Call [acquire] to increase the count and [release] to decrease it. If the count reaches zero\n     * when [release] is invoked then the transaction job is cancelled and the transaction thread\n     * is released.\n     */\n    private val referenceCount = AtomicInteger(0)\n\n    fun acquire() {\n        referenceCount.incrementAndGet()\n    }\n\n    fun release() {\n        val count = referenceCount.decrementAndGet()\n        if (count < 0) {\n            throw IllegalStateException(\"Transaction was never started or was already released\")\n        } else if (count == 0) {\n            // Cancel the job that controls the transaction thread, causing it to be released.\n            transactionThreadControlJob.cancel()\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/handlers/manga/QueryPagingMangaSource.kt",
    "content": "package tachiyomi.data.handlers.manga\n\nimport androidx.paging.PagingSource\nimport androidx.paging.PagingState\nimport app.cash.sqldelight.Query\nimport tachiyomi.data.Database\nimport kotlin.properties.Delegates\n\nclass QueryPagingMangaSource<RowType : Any>(\n    val handler: MangaDatabaseHandler,\n    val countQuery: Database.() -> Query<Long>,\n    val queryProvider: Database.(Long, Long) -> Query<RowType>,\n) : PagingSource<Long, RowType>(), Query.Listener {\n\n    override val jumpingSupported: Boolean = true\n\n    private var currentQuery: Query<RowType>? by Delegates.observable(null) { _, old, new ->\n        old?.removeListener(this)\n        new?.addListener(this)\n    }\n\n    init {\n        registerInvalidatedCallback {\n            currentQuery?.removeListener(this)\n            currentQuery = null\n        }\n    }\n\n    override suspend fun load(params: LoadParams<Long>): LoadResult<Long, RowType> {\n        try {\n            val key = params.key ?: 0L\n            val loadSize = params.loadSize\n            val count = handler.awaitOne { countQuery() }\n\n            val (offset, limit) = when (params) {\n                is LoadParams.Prepend -> key - loadSize to loadSize.toLong()\n                else -> key to loadSize.toLong()\n            }\n\n            val data = handler.awaitList {\n                queryProvider(limit, offset)\n                    .also { currentQuery = it }\n            }\n\n            val (prevKey, nextKey) = when (params) {\n                is LoadParams.Append -> {\n                    offset - loadSize to offset + loadSize\n                }\n                else -> {\n                    offset to offset + loadSize\n                }\n            }\n\n            return LoadResult.Page(\n                data = data,\n                prevKey = if (offset <= 0L || prevKey < 0L) null else prevKey,\n                nextKey = if (offset + loadSize >= count) null else nextKey,\n                itemsBefore = maxOf(0L, offset).toInt(),\n                itemsAfter = maxOf(0L, count - (offset + loadSize)).toInt(),\n            )\n        } catch (e: Exception) {\n            return LoadResult.Error(throwable = e)\n        }\n    }\n\n    override fun getRefreshKey(state: PagingState<Long, RowType>): Long? {\n        return state.anchorPosition?.let { anchorPosition ->\n            val anchorPage = state.closestPageToPosition(anchorPosition)\n            anchorPage?.prevKey ?: anchorPage?.nextKey\n        }\n    }\n\n    override fun queryResultsChanged() {\n        invalidate()\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/history/anime/AnimeHistoryMapper.kt",
    "content": "package tachiyomi.data.history.anime\n\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.history.anime.model.AnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport java.util.Date\n\nobject AnimeHistoryMapper {\n    fun mapAnimeHistory(\n        id: Long,\n        episodeId: Long,\n        seenAt: Date?,\n    ): AnimeHistory = AnimeHistory(\n        id = id,\n        episodeId = episodeId,\n        seenAt = seenAt,\n    )\n\n    fun mapAnimeHistoryWithRelations(\n        historyId: Long,\n        animeId: Long,\n        episodeId: Long,\n        title: String,\n        thumbnailUrl: String?,\n        sourceId: Long,\n        isFavorite: Boolean,\n        coverLastModified: Long,\n        episodeNumber: Double,\n        seenAt: Date?,\n    ): AnimeHistoryWithRelations = AnimeHistoryWithRelations(\n        id = historyId,\n        episodeId = episodeId,\n        animeId = animeId,\n        title = title,\n        episodeNumber = episodeNumber,\n        seenAt = seenAt,\n        coverData = AnimeCover(\n            animeId = animeId,\n            sourceId = sourceId,\n            isAnimeFavorite = isFavorite,\n            url = thumbnailUrl,\n            lastModified = coverLastModified,\n        ),\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/history/anime/AnimeHistoryRepositoryImpl.kt",
    "content": "package tachiyomi.data.history.anime\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.history.anime.model.AnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryUpdate\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport tachiyomi.domain.history.anime.repository.AnimeHistoryRepository\n\nclass AnimeHistoryRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : AnimeHistoryRepository {\n\n    override fun getAnimeHistory(query: String): Flow<List<AnimeHistoryWithRelations>> {\n        return handler.subscribeToList {\n            animehistoryViewQueries.animehistory(query, AnimeHistoryMapper::mapAnimeHistoryWithRelations)\n        }\n    }\n\n    override suspend fun getLastAnimeHistory(): AnimeHistoryWithRelations? {\n        return handler.awaitOneOrNull {\n            animehistoryViewQueries.getLatestAnimeHistory(AnimeHistoryMapper::mapAnimeHistoryWithRelations)\n        }\n    }\n\n    override suspend fun getHistoryByAnimeId(animeId: Long): List<AnimeHistory> {\n        return handler.awaitList {\n            animehistoryQueries.getHistoryByAnimeId(\n                animeId,\n                AnimeHistoryMapper::mapAnimeHistory,\n            )\n        }\n    }\n\n    override suspend fun resetAnimeHistory(historyId: Long) {\n        try {\n            handler.await { animehistoryQueries.resetAnimeHistoryById(historyId) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n        }\n    }\n\n    override suspend fun resetHistoryByAnimeId(animeId: Long) {\n        try {\n            handler.await { animehistoryQueries.resetHistoryByAnimeId(animeId) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n        }\n    }\n\n    override suspend fun deleteAllAnimeHistory(): Boolean {\n        return try {\n            handler.await { animehistoryQueries.removeAllHistory() }\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n            false\n        }\n    }\n\n    override suspend fun upsertAnimeHistory(historyUpdate: AnimeHistoryUpdate) {\n        try {\n            handler.await {\n                animehistoryQueries.upsert(\n                    historyUpdate.episodeId,\n                    historyUpdate.seenAt,\n                )\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/history/manga/MangaHistoryMapper.kt",
    "content": "package tachiyomi.data.history.manga\n\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.history.manga.model.MangaHistory\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport java.util.Date\n\nobject MangaHistoryMapper {\n    fun mapMangaHistory(\n        id: Long,\n        chapterId: Long,\n        readAt: Date?,\n        readDuration: Long,\n    ): MangaHistory = MangaHistory(\n        id = id,\n        chapterId = chapterId,\n        readAt = readAt,\n        readDuration = readDuration,\n    )\n\n    fun mapMangaHistoryWithRelations(\n        historyId: Long,\n        mangaId: Long,\n        chapterId: Long,\n        title: String,\n        thumbnailUrl: String?,\n        sourceId: Long,\n        isFavorite: Boolean,\n        coverLastModified: Long,\n        chapterNumber: Double,\n        readAt: Date?,\n        readDuration: Long,\n    ): MangaHistoryWithRelations = MangaHistoryWithRelations(\n        id = historyId,\n        chapterId = chapterId,\n        mangaId = mangaId,\n        title = title,\n        chapterNumber = chapterNumber,\n        readAt = readAt,\n        readDuration = readDuration,\n        coverData = MangaCover(\n            mangaId = mangaId,\n            sourceId = sourceId,\n            isMangaFavorite = isFavorite,\n            url = thumbnailUrl,\n            lastModified = coverLastModified,\n        ),\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/history/manga/MangaHistoryRepositoryImpl.kt",
    "content": "package tachiyomi.data.history.manga\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.history.manga.model.MangaHistory\nimport tachiyomi.domain.history.manga.model.MangaHistoryUpdate\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\n\nclass MangaHistoryRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : MangaHistoryRepository {\n\n    override fun getMangaHistory(query: String): Flow<List<MangaHistoryWithRelations>> {\n        return handler.subscribeToList {\n            historyViewQueries.history(query, MangaHistoryMapper::mapMangaHistoryWithRelations)\n        }\n    }\n\n    override suspend fun getLastMangaHistory(): MangaHistoryWithRelations? {\n        return handler.awaitOneOrNull {\n            historyViewQueries.getLatestHistory(MangaHistoryMapper::mapMangaHistoryWithRelations)\n        }\n    }\n\n    override suspend fun getTotalReadDuration(): Long {\n        return handler.awaitOne { historyQueries.getReadDuration() }\n    }\n\n    override suspend fun getHistoryByMangaId(mangaId: Long): List<MangaHistory> {\n        return handler.awaitList { historyQueries.getHistoryByMangaId(mangaId, MangaHistoryMapper::mapMangaHistory) }\n    }\n\n    override suspend fun resetMangaHistory(historyId: Long) {\n        try {\n            handler.await { historyQueries.resetHistoryById(historyId) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n        }\n    }\n\n    override suspend fun resetHistoryByMangaId(mangaId: Long) {\n        try {\n            handler.await { historyQueries.resetHistoryByMangaId(mangaId) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n        }\n    }\n\n    override suspend fun deleteAllMangaHistory(): Boolean {\n        return try {\n            handler.await { historyQueries.removeAllHistory() }\n            true\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n            false\n        }\n    }\n\n    override suspend fun upsertMangaHistory(historyUpdate: MangaHistoryUpdate) {\n        try {\n            handler.await {\n                historyQueries.upsert(\n                    historyUpdate.chapterId,\n                    historyUpdate.readAt,\n                    historyUpdate.sessionReadDuration,\n                )\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, throwable = e)\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/items/chapter/ChapterRepositoryImpl.kt",
    "content": "package tachiyomi.data.items.chapter\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.toLong\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass ChapterRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : ChapterRepository {\n\n    override suspend fun addAllChapters(chapters: List<Chapter>): List<Chapter> {\n        return try {\n            handler.await(inTransaction = true) {\n                chapters.map { chapter ->\n                    chaptersQueries.insert(\n                        chapter.mangaId,\n                        chapter.url,\n                        chapter.name,\n                        chapter.scanlator,\n                        chapter.read,\n                        chapter.bookmark,\n                        chapter.lastPageRead,\n                        chapter.chapterNumber,\n                        chapter.sourceOrder,\n                        chapter.dateFetch,\n                        chapter.dateUpload,\n                        chapter.version,\n                    )\n                    val lastInsertId = chaptersQueries.selectLastInsertedRowId().executeAsOne()\n                    chapter.copy(id = lastInsertId)\n                }\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n\n    override suspend fun updateChapter(chapterUpdate: ChapterUpdate) {\n        partialUpdate(chapterUpdate)\n    }\n\n    override suspend fun updateAllChapters(chapterUpdates: List<ChapterUpdate>) {\n        partialUpdate(*chapterUpdates.toTypedArray())\n    }\n\n    private suspend fun partialUpdate(vararg chapterUpdates: ChapterUpdate) {\n        handler.await(inTransaction = true) {\n            chapterUpdates.forEach { chapterUpdate ->\n                chaptersQueries.update(\n                    mangaId = chapterUpdate.mangaId,\n                    url = chapterUpdate.url,\n                    name = chapterUpdate.name,\n                    scanlator = chapterUpdate.scanlator,\n                    read = chapterUpdate.read,\n                    bookmark = chapterUpdate.bookmark,\n                    lastPageRead = chapterUpdate.lastPageRead,\n                    chapterNumber = chapterUpdate.chapterNumber,\n                    sourceOrder = chapterUpdate.sourceOrder,\n                    dateFetch = chapterUpdate.dateFetch,\n                    dateUpload = chapterUpdate.dateUpload,\n                    chapterId = chapterUpdate.id,\n                    version = chapterUpdate.version,\n                    isSyncing = 0,\n                )\n            }\n        }\n    }\n\n    override suspend fun removeChaptersWithIds(chapterIds: List<Long>) {\n        try {\n            handler.await { chaptersQueries.removeChaptersWithIds(chapterIds) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    override suspend fun getChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean): List<Chapter> {\n        return handler.awaitList {\n            chaptersQueries.getChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ::mapChapter)\n        }\n    }\n\n    override suspend fun getScanlatorsByMangaId(mangaId: Long): List<String> {\n        return handler.awaitList {\n            chaptersQueries.getScanlatorsByMangaId(mangaId) { it.orEmpty() }\n        }\n    }\n\n    override fun getScanlatorsByMangaIdAsFlow(mangaId: Long): Flow<List<String>> {\n        return handler.subscribeToList {\n            chaptersQueries.getScanlatorsByMangaId(mangaId) { it.orEmpty() }\n        }\n    }\n\n    override suspend fun getBookmarkedChaptersByMangaId(mangaId: Long): List<Chapter> {\n        return handler.awaitList {\n            chaptersQueries.getBookmarkedChaptersByMangaId(\n                mangaId,\n                ::mapChapter,\n            )\n        }\n    }\n\n    override suspend fun getChapterById(id: Long): Chapter? {\n        return handler.awaitOneOrNull { chaptersQueries.getChapterById(id, ::mapChapter) }\n    }\n\n    override suspend fun getChapterByMangaIdAsFlow(mangaId: Long, applyScanlatorFilter: Boolean): Flow<List<Chapter>> {\n        return handler.subscribeToList {\n            chaptersQueries.getChaptersByMangaId(mangaId, applyScanlatorFilter.toLong(), ::mapChapter)\n        }\n    }\n\n    override suspend fun getChapterByUrlAndMangaId(url: String, mangaId: Long): Chapter? {\n        return handler.awaitOneOrNull {\n            chaptersQueries.getChapterByUrlAndMangaId(\n                url,\n                mangaId,\n                ::mapChapter,\n            )\n        }\n    }\n\n    private fun mapChapter(\n        id: Long,\n        mangaId: Long,\n        url: String,\n        name: String,\n        scanlator: String?,\n        read: Boolean,\n        bookmark: Boolean,\n        lastPageRead: Long,\n        chapterNumber: Double,\n        sourceOrder: Long,\n        dateFetch: Long,\n        dateUpload: Long,\n        lastModifiedAt: Long,\n        version: Long,\n        @Suppress(\"UNUSED_PARAMETER\")\n        isSyncing: Long,\n    ): Chapter = Chapter(\n        id = id,\n        mangaId = mangaId,\n        read = read,\n        bookmark = bookmark,\n        lastPageRead = lastPageRead,\n        dateFetch = dateFetch,\n        sourceOrder = sourceOrder,\n        url = url,\n        name = name,\n        dateUpload = dateUpload,\n        chapterNumber = chapterNumber,\n        scanlator = scanlator,\n        lastModifiedAt = lastModifiedAt,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/items/chapter/ChapterSanitizer.kt",
    "content": "package tachiyomi.data.items.chapter\n\nobject ChapterSanitizer {\n\n    fun String.sanitize(title: String): String {\n        return trim()\n            .removePrefix(title)\n            .trim(*CHAPTER_TRIM_CHARS)\n    }\n\n    private val CHAPTER_TRIM_CHARS = arrayOf(\n        // Whitespace\n        ' ',\n        '\\u0009',\n        '\\u000A',\n        '\\u000B',\n        '\\u000C',\n        '\\u000D',\n        '\\u0020',\n        '\\u0085',\n        '\\u00A0',\n        '\\u1680',\n        '\\u2000',\n        '\\u2001',\n        '\\u2002',\n        '\\u2003',\n        '\\u2004',\n        '\\u2005',\n        '\\u2006',\n        '\\u2007',\n        '\\u2008',\n        '\\u2009',\n        '\\u200A',\n        '\\u2028',\n        '\\u2029',\n        '\\u202F',\n        '\\u205F',\n        '\\u3000',\n\n        // Separators\n        '-',\n        '_',\n        ',',\n        ':',\n    ).toCharArray()\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/items/episode/EpisodeRepositoryImpl.kt",
    "content": "package tachiyomi.data.items.episode\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass EpisodeRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : EpisodeRepository {\n\n    override suspend fun addAllEpisodes(episodes: List<Episode>): List<Episode> {\n        return try {\n            handler.await(inTransaction = true) {\n                episodes.map { episode ->\n                    episodesQueries.insert(\n                        episode.animeId,\n                        episode.url,\n                        episode.name,\n                        episode.scanlator,\n                        episode.seen,\n                        episode.bookmark,\n                        episode.lastSecondSeen,\n                        episode.totalSeconds,\n                        episode.episodeNumber,\n                        episode.sourceOrder,\n                        episode.dateFetch,\n                        episode.dateUpload,\n                        episode.version,\n                        episode.summary,\n                        episode.previewUrl,\n                        episode.fillermark,\n                    )\n                    val lastInsertId = episodesQueries.selectLastInsertedRowId().executeAsOne()\n                    episode.copy(id = lastInsertId)\n                }\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n\n    override suspend fun updateEpisode(episodeUpdate: EpisodeUpdate) {\n        partialUpdate(episodeUpdate)\n    }\n\n    override suspend fun updateAllEpisodes(episodeUpdates: List<EpisodeUpdate>) {\n        partialUpdate(*episodeUpdates.toTypedArray())\n    }\n\n    private suspend fun partialUpdate(vararg episodeUpdates: EpisodeUpdate) {\n        handler.await(inTransaction = true) {\n            episodeUpdates.forEach { episodeUpdate ->\n                episodesQueries.update(\n                    animeId = episodeUpdate.animeId,\n                    url = episodeUpdate.url,\n                    name = episodeUpdate.name,\n                    scanlator = episodeUpdate.scanlator,\n                    seen = episodeUpdate.seen,\n                    bookmark = episodeUpdate.bookmark,\n                    lastSecondSeen = episodeUpdate.lastSecondSeen,\n                    totalSeconds = episodeUpdate.totalSeconds,\n                    episodeNumber = episodeUpdate.episodeNumber,\n                    sourceOrder = episodeUpdate.sourceOrder,\n                    dateFetch = episodeUpdate.dateFetch,\n                    dateUpload = episodeUpdate.dateUpload,\n                    episodeId = episodeUpdate.id,\n                    version = episodeUpdate.version,\n                    isSyncing = 0,\n                    summary = episodeUpdate.summary,\n                    previewUrl = episodeUpdate.previewUrl,\n                    fillermark = episodeUpdate.fillermark,\n                )\n            }\n        }\n    }\n\n    override suspend fun removeEpisodesWithIds(episodeIds: List<Long>) {\n        try {\n            handler.await { episodesQueries.removeEpisodesWithIds(episodeIds) }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    override suspend fun getEpisodeByAnimeId(animeId: Long): List<Episode> {\n        return handler.awaitList { episodesQueries.getEpisodesByAnimeId(animeId, ::mapEpisode) }\n    }\n\n    override suspend fun getBookmarkedEpisodesByAnimeId(animeId: Long): List<Episode> {\n        return handler.awaitList {\n            episodesQueries.getBookmarkedEpisodesByAnimeId(\n                animeId,\n                ::mapEpisode,\n            )\n        }\n    }\n\n    override suspend fun getEpisodeById(id: Long): Episode? {\n        return handler.awaitOneOrNull { episodesQueries.getEpisodeById(id, ::mapEpisode) }\n    }\n\n    override suspend fun getEpisodeByAnimeIdAsFlow(animeId: Long): Flow<List<Episode>> {\n        return handler.subscribeToList {\n            episodesQueries.getEpisodesByAnimeId(\n                animeId,\n                ::mapEpisode,\n            )\n        }\n    }\n\n    override suspend fun getEpisodeByUrlAndAnimeId(url: String, animeId: Long): Episode? {\n        return handler.awaitOneOrNull {\n            episodesQueries.getEpisodeByUrlAndAnimeId(\n                url,\n                animeId,\n                ::mapEpisode,\n            )\n        }\n    }\n\n    private fun mapEpisode(\n        id: Long,\n        animeId: Long,\n        url: String,\n        name: String,\n        scanlator: String?,\n        seen: Boolean,\n        bookmark: Boolean,\n        lastSecondSeen: Long,\n        totalSeconds: Long,\n        episodeNumber: Double,\n        sourceOrder: Long,\n        dateFetch: Long,\n        dateUpload: Long,\n        lastModifiedAt: Long,\n        version: Long,\n        @Suppress(\"UNUSED_PARAMETER\")\n        isSyncing: Long,\n        summary: String?,\n        previewUrl: String?,\n        fillermark: Boolean,\n    ): Episode = Episode(\n        id = id,\n        animeId = animeId,\n        seen = seen,\n        bookmark = bookmark,\n        fillermark = fillermark,\n        lastSecondSeen = lastSecondSeen,\n        totalSeconds = totalSeconds,\n        dateFetch = dateFetch,\n        sourceOrder = sourceOrder,\n        url = url,\n        name = name,\n        dateUpload = dateUpload,\n        episodeNumber = episodeNumber,\n        scanlator = scanlator,\n        summary = summary,\n        previewUrl = previewUrl,\n        lastModifiedAt = lastModifiedAt,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/items/episode/EpisodeSanitizer.kt",
    "content": "package tachiyomi.data.items.episode\n\nobject EpisodeSanitizer {\n\n    fun String.sanitize(title: String): String {\n        return trim()\n            .removePrefix(title)\n            .trim(*EPISODE_TRIM_CHARS)\n    }\n\n    private val EPISODE_TRIM_CHARS = arrayOf(\n        // Whitespace\n        ' ',\n        '\\u0009',\n        '\\u000A',\n        '\\u000B',\n        '\\u000C',\n        '\\u000D',\n        '\\u0020',\n        '\\u0085',\n        '\\u00A0',\n        '\\u1680',\n        '\\u2000',\n        '\\u2001',\n        '\\u2002',\n        '\\u2003',\n        '\\u2004',\n        '\\u2005',\n        '\\u2006',\n        '\\u2007',\n        '\\u2008',\n        '\\u2009',\n        '\\u200A',\n        '\\u2028',\n        '\\u2029',\n        '\\u202F',\n        '\\u205F',\n        '\\u3000',\n\n        // Separators\n        '-',\n        '_',\n        ',',\n        ':',\n    ).toCharArray()\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/release/GithubRelease.kt",
    "content": "package tachiyomi.data.release\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n/**\n * Contains information about the latest release from GitHub.\n */\n@Serializable\ndata class GithubRelease(\n    @SerialName(\"tag_name\")\n    val version: String,\n    @SerialName(\"body\")\n    val info: String,\n    @SerialName(\"html_url\")\n    val releaseLink: String,\n    @SerialName(\"assets\")\n    val assets: List<GitHubAsset>,\n)\n\n/**\n * Asset class containing asset name and download url.\n */\n@Serializable\ndata class GitHubAsset(\n    val name: String,\n    @SerialName(\"browser_download_url\")\n    val downloadLink: String,\n)\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/release/ReleaseServiceImpl.kt",
    "content": "package tachiyomi.data.release\n\nimport android.os.Build\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport tachiyomi.domain.release.interactor.GetApplicationRelease\nimport tachiyomi.domain.release.model.Release\nimport tachiyomi.domain.release.service.ReleaseService\n\nclass ReleaseServiceImpl(\n    private val networkService: NetworkHelper,\n    private val json: Json,\n) : ReleaseService {\n\n    override suspend fun latest(arguments: GetApplicationRelease.Arguments): Release? {\n        val release = with(json) {\n            networkService.client\n                .newCall(GET(\"https://api.github.com/repos/${arguments.repository}/releases/latest\"))\n                .awaitSuccess()\n                .parseAs<GithubRelease>()\n        }\n        val downloadLink = getDownloadLink(release = release) ?: return null\n\n        return Release(\n            version = release.version,\n            info = release.info.replace(gitHubUsernameMentionRegex) { mention ->\n                \"[${mention.value}](https://github.com/${mention.value.substring(1)})\"\n            },\n            releaseLink = release.releaseLink,\n            downloadLink = downloadLink,\n        )\n    }\n\n    private fun getDownloadLink(release: GithubRelease): String? {\n        val map = release.assets.associate { asset ->\n            BUILD_TYPES.find { \"-$it\" in asset.name } to asset.downloadLink\n        }\n\n        return map[Build.SUPPORTED_ABIS[0]] ?: map[null]\n    }\n\n    companion object {\n        private val BUILD_TYPES = listOf(\"arm64-v8a\", \"armeabi-v7a\", \"x86_64\", \"x86\")\n\n        /**\n         * Regular expression that matches a mention to a valid GitHub username, like it's\n         * done in GitHub Flavored Markdown. It follows these constraints:\n         *\n         * - Alphanumeric with single hyphens (no consecutive hyphens)\n         * - Cannot begin or end with a hyphen\n         * - Max length of 39 characters\n         *\n         * Reference: https://stackoverflow.com/a/30281147\n         */\n        private val gitHubUsernameMentionRegex = \"\"\"\\B@([a-z0-9](?:-(?=[a-z0-9])|[a-z0-9]){0,38}(?<=[a-z0-9]))\"\"\"\n            .toRegex(RegexOption.IGNORE_CASE)\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/source/anime/AnimeSourcePagingSource.kt",
    "content": "package tachiyomi.data.source.anime\n\nimport androidx.paging.PagingState\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.animesource.model.AnimesPage\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.items.episode.model.NoEpisodesException\nimport tachiyomi.domain.source.anime.repository.AnimeSourcePagingSourceType\n\nclass AnimeSourceSearchPagingSource(\n    source: AnimeCatalogueSource,\n    val query: String,\n    val filters: AnimeFilterList,\n) : AnimeSourcePagingSource(source) {\n    override suspend fun requestNextPage(currentPage: Int): AnimesPage {\n        return source.getSearchAnime(currentPage, query, filters)\n    }\n}\n\nclass AnimeSourcePopularPagingSource(source: AnimeCatalogueSource) : AnimeSourcePagingSource(source) {\n    override suspend fun requestNextPage(currentPage: Int): AnimesPage {\n        return source.getPopularAnime(currentPage)\n    }\n}\n\nclass AnimeSourceLatestPagingSource(source: AnimeCatalogueSource) : AnimeSourcePagingSource(source) {\n    override suspend fun requestNextPage(currentPage: Int): AnimesPage {\n        return source.getLatestUpdates(currentPage)\n    }\n}\n\nabstract class AnimeSourcePagingSource(\n    protected val source: AnimeCatalogueSource,\n) : AnimeSourcePagingSourceType() {\n\n    abstract suspend fun requestNextPage(currentPage: Int): AnimesPage\n\n    override suspend fun load(params: LoadParams<Long>): LoadResult<Long, SAnime> {\n        val page = params.key ?: 1\n\n        val animesPage = try {\n            withIOContext {\n                requestNextPage(page.toInt())\n                    .takeIf { it.animes.isNotEmpty() }\n                    ?: throw NoEpisodesException()\n            }\n        } catch (e: Exception) {\n            return LoadResult.Error(e)\n        }\n\n        return LoadResult.Page(\n            data = animesPage.animes,\n            prevKey = null,\n            nextKey = if (animesPage.hasNextPage) page + 1 else null,\n        )\n    }\n\n    override fun getRefreshKey(state: PagingState<Long, SAnime>): Long? {\n        return state.anchorPosition?.let { anchorPosition ->\n            val anchorPage = state.closestPageToPosition(anchorPosition)\n            anchorPage?.prevKey ?: anchorPage?.nextKey\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/source/anime/AnimeSourceRepositoryImpl.kt",
    "content": "package tachiyomi.data.source.anime\n\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.domain.source.anime.repository.AnimeSourcePagingSourceType\nimport tachiyomi.domain.source.anime.repository.AnimeSourceRepository\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\nimport tachiyomi.domain.source.anime.model.AnimeSource as DomainSource\n\nclass AnimeSourceRepositoryImpl(\n    private val sourceManager: AnimeSourceManager,\n    private val handler: AnimeDatabaseHandler,\n) : AnimeSourceRepository {\n\n    override fun getAnimeSources(): Flow<List<DomainSource>> {\n        return sourceManager.catalogueSources.map { sources ->\n            sources.map {\n                mapSourceToDomainSource(it).copy(\n                    supportsLatest = it.supportsLatest,\n                )\n            }\n        }\n    }\n\n    override fun getOnlineAnimeSources(): Flow<List<DomainSource>> {\n        return sourceManager.catalogueSources.map { sources ->\n            sources\n                .filterIsInstance<AnimeHttpSource>()\n                .map(::mapSourceToDomainSource)\n        }\n    }\n\n    override fun getAnimeSourcesWithFavoriteCount(): Flow<List<Pair<DomainSource, Long>>> {\n        return combine(\n            handler.subscribeToList { animesQueries.getAnimeSourceIdWithFavoriteCount() },\n            sourceManager.catalogueSources,\n        ) { sourceIdWithFavoriteCount, _ -> sourceIdWithFavoriteCount }\n            .map {\n                it.map { (sourceId, count) ->\n                    val source = sourceManager.getOrStub(sourceId)\n                    val domainSource = mapSourceToDomainSource(source).copy(\n                        isStub = source is StubAnimeSource,\n                    )\n                    domainSource to count\n                }\n            }\n    }\n\n    override fun searchAnime(\n        sourceId: Long,\n        query: String,\n        filterList: AnimeFilterList,\n    ): AnimeSourcePagingSourceType {\n        val source = sourceManager.get(sourceId) as AnimeCatalogueSource\n        return AnimeSourceSearchPagingSource(source, query, filterList)\n    }\n\n    override fun getPopularAnime(sourceId: Long): AnimeSourcePagingSourceType {\n        val source = sourceManager.get(sourceId) as AnimeCatalogueSource\n        return AnimeSourcePopularPagingSource(source)\n    }\n\n    override fun getLatestAnime(sourceId: Long): AnimeSourcePagingSourceType {\n        val source = sourceManager.get(sourceId) as AnimeCatalogueSource\n        return AnimeSourceLatestPagingSource(source)\n    }\n}\n\nfun mapSourceToDomainSource(source: AnimeSource): DomainSource = DomainSource(\n    id = source.id,\n    lang = source.lang,\n    name = source.name,\n    supportsLatest = false,\n    isStub = false,\n)\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/source/anime/AnimeStubSourceRepositoryImpl.kt",
    "content": "package tachiyomi.data.source.anime\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\nimport tachiyomi.domain.source.anime.repository.AnimeStubSourceRepository\n\nclass AnimeStubSourceRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : AnimeStubSourceRepository {\n\n    override fun subscribeAllAnime(): Flow<List<StubAnimeSource>> {\n        return handler.subscribeToList { animesourcesQueries.findAll(::mapStubSource) }\n    }\n\n    override suspend fun getStubAnimeSource(id: Long): StubAnimeSource? {\n        return handler.awaitOneOrNull {\n            animesourcesQueries.findOne(\n                id,\n                ::mapStubSource,\n            )\n        }\n    }\n\n    override suspend fun upsertStubAnimeSource(id: Long, lang: String, name: String) {\n        handler.await { animesourcesQueries.upsert(id, lang, name) }\n    }\n\n    private fun mapStubSource(\n        id: Long,\n        lang: String,\n        name: String,\n    ): StubAnimeSource = StubAnimeSource(id = id, lang = lang, name = name)\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/source/manga/MangaSourcePagingSource.kt",
    "content": "package tachiyomi.data.source.manga\n\nimport androidx.paging.PagingState\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.source.model.MangasPage\nimport eu.kanade.tachiyomi.source.model.SManga\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.items.chapter.model.NoChaptersException\nimport tachiyomi.domain.source.manga.repository.SourcePagingSourceType\n\nclass SourceSearchPagingSource(\n    source: CatalogueSource,\n    val query: String,\n    val filters: FilterList,\n) :\n    SourcePagingSource(\n        source,\n    ) {\n    override suspend fun requestNextPage(currentPage: Int): MangasPage {\n        return source.getSearchManga(currentPage, query, filters)\n    }\n}\n\nclass SourcePopularPagingSource(source: CatalogueSource) : SourcePagingSource(source) {\n    override suspend fun requestNextPage(currentPage: Int): MangasPage {\n        return source.getPopularManga(currentPage)\n    }\n}\n\nclass SourceLatestPagingSource(source: CatalogueSource) : SourcePagingSource(source) {\n    override suspend fun requestNextPage(currentPage: Int): MangasPage {\n        return source.getLatestUpdates(currentPage)\n    }\n}\n\nabstract class SourcePagingSource(\n    protected val source: CatalogueSource,\n) : SourcePagingSourceType() {\n\n    abstract suspend fun requestNextPage(currentPage: Int): MangasPage\n\n    override suspend fun load(params: LoadParams<Long>): LoadResult<Long, SManga> {\n        val page = params.key ?: 1\n\n        val mangasPage = try {\n            withIOContext {\n                requestNextPage(page.toInt())\n                    .takeIf { it.mangas.isNotEmpty() }\n                    ?: throw NoChaptersException()\n            }\n        } catch (e: Exception) {\n            return LoadResult.Error(e)\n        }\n\n        return LoadResult.Page(\n            data = mangasPage.mangas,\n            prevKey = null,\n            nextKey = if (mangasPage.hasNextPage) page + 1 else null,\n        )\n    }\n\n    override fun getRefreshKey(state: PagingState<Long, SManga>): Long? {\n        return state.anchorPosition?.let { anchorPosition ->\n            val anchorPage = state.closestPageToPosition(anchorPosition)\n            anchorPage?.prevKey ?: anchorPage?.nextKey\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/source/manga/MangaSourceRepositoryImpl.kt",
    "content": "package tachiyomi.data.source.manga\n\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.source.manga.model.MangaSourceWithCount\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\nimport tachiyomi.domain.source.manga.repository.SourcePagingSourceType\nimport tachiyomi.domain.source.manga.service.MangaSourceManager\nimport tachiyomi.domain.source.manga.model.Source as DomainSource\n\nclass MangaSourceRepositoryImpl(\n    private val sourceManager: MangaSourceManager,\n    private val handler: MangaDatabaseHandler,\n) : MangaSourceRepository {\n\n    override fun getMangaSources(): Flow<List<DomainSource>> {\n        return sourceManager.catalogueSources.map { sources ->\n            sources.map {\n                mapSourceToDomainSource(it).copy(\n                    supportsLatest = it.supportsLatest,\n                )\n            }\n        }\n    }\n\n    override fun getOnlineMangaSources(): Flow<List<DomainSource>> {\n        return sourceManager.catalogueSources.map { sources ->\n            sources\n                .filterIsInstance<HttpSource>()\n                .map(::mapSourceToDomainSource)\n        }\n    }\n\n    override fun getMangaSourcesWithFavoriteCount(): Flow<List<Pair<DomainSource, Long>>> {\n        return combine(\n            handler.subscribeToList { mangasQueries.getSourceIdWithFavoriteCount() },\n            sourceManager.catalogueSources,\n        ) { sourceIdWithFavoriteCount, _ -> sourceIdWithFavoriteCount }\n            .map {\n                it.map { (sourceId, count) ->\n                    val source = sourceManager.getOrStub(sourceId)\n                    val domainSource = mapSourceToDomainSource(source).copy(\n                        isStub = source is StubMangaSource,\n                    )\n                    domainSource to count\n                }\n            }\n    }\n\n    override fun getMangaSourcesWithNonLibraryManga(): Flow<List<MangaSourceWithCount>> {\n        val sourceIdWithNonLibraryManga =\n            handler.subscribeToList { mangasQueries.getSourceIdsWithNonLibraryManga() }\n        return sourceIdWithNonLibraryManga.map { sourceId ->\n            sourceId.map { (sourceId, count) ->\n                val source = sourceManager.getOrStub(sourceId)\n                val domainSource = mapSourceToDomainSource(source).copy(\n                    isStub = source is StubMangaSource,\n                )\n                MangaSourceWithCount(domainSource, count)\n            }\n        }\n    }\n\n    override fun searchManga(\n        sourceId: Long,\n        query: String,\n        filterList: FilterList,\n    ): SourcePagingSourceType {\n        val source = sourceManager.get(sourceId) as CatalogueSource\n        return SourceSearchPagingSource(source, query, filterList)\n    }\n\n    override fun getPopularManga(sourceId: Long): SourcePagingSourceType {\n        val source = sourceManager.get(sourceId) as CatalogueSource\n        return SourcePopularPagingSource(source)\n    }\n\n    override fun getLatestManga(sourceId: Long): SourcePagingSourceType {\n        val source = sourceManager.get(sourceId) as CatalogueSource\n        return SourceLatestPagingSource(source)\n    }\n\n    private fun mapSourceToDomainSource(source: MangaSource): DomainSource = DomainSource(\n        id = source.id,\n        lang = source.lang,\n        name = source.name,\n        supportsLatest = false,\n        isStub = false,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/source/manga/MangaStubSourceRepositoryImpl.kt",
    "content": "package tachiyomi.data.source.manga\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.source.manga.model.StubMangaSource\nimport tachiyomi.domain.source.manga.repository.MangaStubSourceRepository\n\nclass MangaStubSourceRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : MangaStubSourceRepository {\n\n    override fun subscribeAllManga(): Flow<List<StubMangaSource>> {\n        return handler.subscribeToList { sourcesQueries.findAll(::mapStubSource) }\n    }\n\n    override suspend fun getStubMangaSource(id: Long): StubMangaSource? {\n        return handler.awaitOneOrNull {\n            sourcesQueries.findOne(\n                id,\n                ::mapStubSource,\n            )\n        }\n    }\n\n    override suspend fun upsertStubMangaSource(id: Long, lang: String, name: String) {\n        handler.await { sourcesQueries.upsert(id, lang, name) }\n    }\n\n    private fun mapStubSource(\n        id: Long,\n        lang: String,\n        name: String,\n    ): StubMangaSource = StubMangaSource(id = id, lang = lang, name = name)\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/track/anime/AnimeTrackMapper.kt",
    "content": "package tachiyomi.data.track.anime\n\nimport tachiyomi.domain.track.anime.model.AnimeTrack\n\nobject AnimeTrackMapper {\n    fun mapTrack(\n        id: Long,\n        animeId: Long,\n        syncId: Long,\n        remoteId: Long,\n        libraryId: Long?,\n        title: String,\n        lastEpisodeSeen: Double,\n        totalEpisodes: Long,\n        status: Long,\n        score: Double,\n        remoteUrl: String,\n        startDate: Long,\n        finishDate: Long,\n        private: Boolean,\n    ): AnimeTrack = AnimeTrack(\n        id = id,\n        animeId = animeId,\n        trackerId = syncId,\n        remoteId = remoteId,\n        libraryId = libraryId,\n        title = title,\n        lastEpisodeSeen = lastEpisodeSeen,\n        totalEpisodes = totalEpisodes,\n        status = status,\n        score = score,\n        remoteUrl = remoteUrl,\n        startDate = startDate,\n        finishDate = finishDate,\n        private = private,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/track/anime/AnimeTrackRepositoryImpl.kt",
    "content": "package tachiyomi.data.track.anime\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.domain.track.anime.repository.AnimeTrackRepository\n\nclass AnimeTrackRepositoryImpl(\n    private val handler: AnimeDatabaseHandler,\n) : AnimeTrackRepository {\n\n    override suspend fun getTrackByAnimeId(id: Long): AnimeTrack? {\n        return handler.awaitOneOrNull { anime_syncQueries.getTrackByAnimeId(id, AnimeTrackMapper::mapTrack) }\n    }\n\n    override suspend fun getTracksByAnimeId(animeId: Long): List<AnimeTrack> {\n        return handler.awaitList {\n            anime_syncQueries.getTracksByAnimeId(animeId, AnimeTrackMapper::mapTrack)\n        }\n    }\n\n    override fun getAnimeTracksAsFlow(): Flow<List<AnimeTrack>> {\n        return handler.subscribeToList {\n            anime_syncQueries.getAnimeTracks(AnimeTrackMapper::mapTrack)\n        }\n    }\n\n    override fun getTracksByAnimeIdAsFlow(animeId: Long): Flow<List<AnimeTrack>> {\n        return handler.subscribeToList {\n            anime_syncQueries.getTracksByAnimeId(animeId, AnimeTrackMapper::mapTrack)\n        }\n    }\n\n    override suspend fun delete(animeId: Long, trackerId: Long) {\n        handler.await {\n            anime_syncQueries.delete(\n                animeId = animeId,\n                syncId = trackerId,\n            )\n        }\n    }\n\n    override suspend fun insertAnime(track: AnimeTrack) {\n        insertValues(track)\n    }\n\n    override suspend fun insertAllAnime(tracks: List<AnimeTrack>) {\n        insertValues(*tracks.toTypedArray())\n    }\n\n    private suspend fun insertValues(vararg tracks: AnimeTrack) {\n        handler.await(inTransaction = true) {\n            tracks.forEach { animeTrack ->\n                anime_syncQueries.insert(\n                    animeId = animeTrack.animeId,\n                    syncId = animeTrack.trackerId,\n                    remoteId = animeTrack.remoteId,\n                    libraryId = animeTrack.libraryId,\n                    title = animeTrack.title,\n                    lastEpisodeSeen = animeTrack.lastEpisodeSeen,\n                    totalEpisodes = animeTrack.totalEpisodes,\n                    status = animeTrack.status,\n                    score = animeTrack.score,\n                    remoteUrl = animeTrack.remoteUrl,\n                    startDate = animeTrack.startDate,\n                    finishDate = animeTrack.finishDate,\n                    private = animeTrack.private,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/track/manga/MangaTrackMapper.kt",
    "content": "package tachiyomi.data.track.manga\n\nimport tachiyomi.domain.track.manga.model.MangaTrack\n\nobject MangaTrackMapper {\n    fun mapTrack(\n        id: Long,\n        mangaId: Long,\n        syncId: Long,\n        remoteId: Long,\n        libraryId: Long?,\n        title: String,\n        lastChapterRead: Double,\n        totalChapters: Long,\n        status: Long,\n        score: Double,\n        remoteUrl: String,\n        startDate: Long,\n        finishDate: Long,\n        private: Boolean,\n    ): MangaTrack = MangaTrack(\n        id = id,\n        mangaId = mangaId,\n        trackerId = syncId,\n        remoteId = remoteId,\n        libraryId = libraryId,\n        title = title,\n        lastChapterRead = lastChapterRead,\n        totalChapters = totalChapters,\n        status = status,\n        score = score,\n        remoteUrl = remoteUrl,\n        startDate = startDate,\n        finishDate = finishDate,\n        private = private,\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/track/manga/MangaTrackRepositoryImpl.kt",
    "content": "package tachiyomi.data.track.manga\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.domain.track.manga.repository.MangaTrackRepository\n\nclass MangaTrackRepositoryImpl(\n    private val handler: MangaDatabaseHandler,\n) : MangaTrackRepository {\n\n    override suspend fun getTrackByMangaId(id: Long): MangaTrack? {\n        return handler.awaitOneOrNull { manga_syncQueries.getTrackById(id, MangaTrackMapper::mapTrack) }\n    }\n\n    override suspend fun getTracksByMangaId(mangaId: Long): List<MangaTrack> {\n        return handler.awaitList {\n            manga_syncQueries.getTracksByMangaId(mangaId, MangaTrackMapper::mapTrack)\n        }\n    }\n\n    override fun getMangaTracksAsFlow(): Flow<List<MangaTrack>> {\n        return handler.subscribeToList {\n            manga_syncQueries.getTracks(MangaTrackMapper::mapTrack)\n        }\n    }\n\n    override fun getTracksByMangaIdAsFlow(mangaId: Long): Flow<List<MangaTrack>> {\n        return handler.subscribeToList {\n            manga_syncQueries.getTracksByMangaId(mangaId, MangaTrackMapper::mapTrack)\n        }\n    }\n\n    override suspend fun delete(mangaId: Long, trackerId: Long) {\n        handler.await {\n            manga_syncQueries.delete(\n                mangaId = mangaId,\n                syncId = trackerId,\n            )\n        }\n    }\n\n    override suspend fun insertManga(track: MangaTrack) {\n        insertValues(track)\n    }\n\n    override suspend fun insertAllManga(tracks: List<MangaTrack>) {\n        insertValues(*tracks.toTypedArray())\n    }\n\n    private suspend fun insertValues(vararg tracks: MangaTrack) {\n        handler.await(inTransaction = true) {\n            tracks.forEach { mangaTrack ->\n                manga_syncQueries.insert(\n                    mangaId = mangaTrack.mangaId,\n                    syncId = mangaTrack.trackerId,\n                    remoteId = mangaTrack.remoteId,\n                    libraryId = mangaTrack.libraryId,\n                    title = mangaTrack.title,\n                    lastChapterRead = mangaTrack.lastChapterRead,\n                    totalChapters = mangaTrack.totalChapters,\n                    status = mangaTrack.status,\n                    score = mangaTrack.score,\n                    remoteUrl = mangaTrack.remoteUrl,\n                    startDate = mangaTrack.startDate,\n                    finishDate = mangaTrack.finishDate,\n                    private = mangaTrack.private,\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/updates/anime/AnimeUpdatesRepositoryImpl.kt",
    "content": "package tachiyomi.data.updates.anime\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.anime.AnimeDatabaseHandler\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations\nimport tachiyomi.domain.updates.anime.repository.AnimeUpdatesRepository\n\nclass AnimeUpdatesRepositoryImpl(\n    private val databaseHandler: AnimeDatabaseHandler,\n) : AnimeUpdatesRepository {\n\n    override suspend fun awaitWithSeen(seen: Boolean, after: Long, limit: Long): List<AnimeUpdatesWithRelations> {\n        return databaseHandler.awaitList {\n            animeupdatesViewQueries.getUpdatesBySeenStatus(\n                seen = seen,\n                after = after,\n                limit = limit,\n                mapper = ::mapUpdatesWithRelations,\n            )\n        }\n    }\n\n    override fun subscribeAllAnimeUpdates(after: Long, limit: Long): Flow<List<AnimeUpdatesWithRelations>> {\n        return databaseHandler.subscribeToList {\n            animeupdatesViewQueries.getRecentAnimeUpdates(\n                after,\n                limit,\n                ::mapUpdatesWithRelations,\n            )\n        }\n    }\n\n    override fun subscribeWithSeen(seen: Boolean, after: Long, limit: Long): Flow<List<AnimeUpdatesWithRelations>> {\n        return databaseHandler.subscribeToList {\n            animeupdatesViewQueries.getUpdatesBySeenStatus(\n                seen = seen,\n                after = after,\n                limit = limit,\n                mapper = ::mapUpdatesWithRelations,\n            )\n        }\n    }\n\n    private fun mapUpdatesWithRelations(\n        animeId: Long,\n        animeTitle: String,\n        episodeId: Long,\n        episodeName: String,\n        scanlator: String?,\n        seen: Boolean,\n        bookmark: Boolean,\n        fillermark: Boolean,\n        lastSecondSeen: Long,\n        totalSeconds: Long,\n        sourceId: Long,\n        favorite: Boolean,\n        thumbnailUrl: String?,\n        coverLastModified: Long,\n        dateUpload: Long,\n        dateFetch: Long,\n    ): AnimeUpdatesWithRelations = AnimeUpdatesWithRelations(\n        animeId = animeId,\n        animeTitle = animeTitle,\n        episodeId = episodeId,\n        episodeName = episodeName,\n        scanlator = scanlator,\n        seen = seen,\n        bookmark = bookmark,\n        fillermark = fillermark,\n        lastSecondSeen = lastSecondSeen,\n        totalSeconds = totalSeconds,\n        sourceId = sourceId,\n        dateFetch = dateFetch,\n        coverData = AnimeCover(\n            animeId = animeId,\n            sourceId = sourceId,\n            isAnimeFavorite = favorite,\n            url = thumbnailUrl,\n            lastModified = coverLastModified,\n        ),\n    )\n}\n"
  },
  {
    "path": "data/src/main/java/tachiyomi/data/updates/manga/MangaUpdatesRepositoryImpl.kt",
    "content": "package tachiyomi.data.updates.manga\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.data.handlers.manga.MangaDatabaseHandler\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations\nimport tachiyomi.domain.updates.manga.repository.MangaUpdatesRepository\n\nclass MangaUpdatesRepositoryImpl(\n    private val databaseHandler: MangaDatabaseHandler,\n) : MangaUpdatesRepository {\n\n    override suspend fun awaitWithRead(read: Boolean, after: Long, limit: Long): List<MangaUpdatesWithRelations> {\n        return databaseHandler.awaitList {\n            updatesViewQueries.getUpdatesByReadStatus(\n                read = read,\n                after = after,\n                limit = limit,\n                mapper = ::mapUpdatesWithRelations,\n            )\n        }\n    }\n\n    override fun subscribeAllMangaUpdates(after: Long, limit: Long): Flow<List<MangaUpdatesWithRelations>> {\n        return databaseHandler.subscribeToList {\n            updatesViewQueries.getRecentUpdates(after, limit, ::mapUpdatesWithRelations)\n        }\n    }\n\n    override fun subscribeWithRead(read: Boolean, after: Long, limit: Long): Flow<List<MangaUpdatesWithRelations>> {\n        return databaseHandler.subscribeToList {\n            updatesViewQueries.getUpdatesByReadStatus(\n                read = read,\n                after = after,\n                limit = limit,\n                mapper = ::mapUpdatesWithRelations,\n            )\n        }\n    }\n\n    private fun mapUpdatesWithRelations(\n        mangaId: Long,\n        mangaTitle: String,\n        chapterId: Long,\n        chapterName: String,\n        scanlator: String?,\n        read: Boolean,\n        bookmark: Boolean,\n        lastPageRead: Long,\n        sourceId: Long,\n        favorite: Boolean,\n        thumbnailUrl: String?,\n        coverLastModified: Long,\n        dateUpload: Long,\n        dateFetch: Long,\n    ): MangaUpdatesWithRelations = MangaUpdatesWithRelations(\n        mangaId = mangaId,\n        mangaTitle = mangaTitle,\n        chapterId = chapterId,\n        chapterName = chapterName,\n        scanlator = scanlator,\n        read = read,\n        bookmark = bookmark,\n        lastPageRead = lastPageRead,\n        sourceId = sourceId,\n        dateFetch = dateFetch,\n        coverData = MangaCover(\n            mangaId = mangaId,\n            sourceId = sourceId,\n            isMangaFavorite = favorite,\n            url = thumbnailUrl,\n            lastModified = coverLastModified,\n        ),\n    )\n}\n"
  },
  {
    "path": "data/src/main/sqldelight/data/categories.sq",
    "content": "CREATE TABLE categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    sort INTEGER NOT NULL,\n    flags INTEGER NOT NULL,\n    hidden INTEGER NOT NULL DEFAULT 0\n);\n\n-- Insert system category\nINSERT OR IGNORE INTO categories(_id, name, sort, flags) VALUES (0, \"\", -1, 0);\n-- Disallow deletion of default category\nCREATE TRIGGER IF NOT EXISTS system_category_delete_trigger BEFORE DELETE\nON categories\nBEGIN SELECT CASE\n    WHEN old._id <= 0 THEN\n        RAISE(ABORT, \"System category can't be deleted\")\n    END;\nEND;\n\ngetCategory:\nSELECT *\nFROM categories\nWHERE _id = :id\nLIMIT 1;\n\ngetCategories:\nSELECT\n_id AS id,\nname,\nsort AS `order`,\nflags,\nhidden\nFROM categories\nORDER BY sort;\n\ngetVisibleCategories:\nSELECT\n_id AS id,\nname,\nsort AS `order`,\nflags,\nhidden\nFROM categories\nWHERE hidden = 0\nORDER BY sort;\n\ngetCategoriesByMangaId:\nSELECT\nC._id AS id,\nC.name,\nC.sort AS `order`,\nC.flags,\nC.hidden\nFROM categories C\nJOIN mangas_categories MC\nON C._id = MC.category_id\nWHERE MC.manga_id = :mangaId;\n\ngetVisibleCategoriesByMangaId:\nSELECT\nC._id AS id,\nC.name,\nC.sort AS `order`,\nC.flags,\nC.hidden\nFROM categories C\nJOIN mangas_categories MC\nON C._id = MC.category_id\nWHERE MC.manga_id = :mangaId AND C.hidden = 0;\n\ninsert:\nINSERT INTO categories(name, sort, flags)\nVALUES (:name, :order, :flags);\n\ndelete:\nDELETE FROM categories\nWHERE _id = :categoryId;\n\nupdate:\nUPDATE categories\nSET name = coalesce(:name, name),\n    sort = coalesce(:order, sort),\n    flags = coalesce(:flags, flags),\n    hidden = coalesce(:hidden, hidden)\nWHERE _id = :categoryId;\n\nupdateAllFlags:\nUPDATE categories SET\nflags = coalesce(?, flags);\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();"
  },
  {
    "path": "data/src/main/sqldelight/data/chapters.sq",
    "content": "import kotlin.Boolean;\n\nCREATE TABLE chapters(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    name TEXT NOT NULL,\n    scanlator TEXT,\n    read INTEGER AS Boolean NOT NULL,\n    bookmark INTEGER AS Boolean NOT NULL,\n    last_page_read INTEGER NOT NULL,\n    chapter_number REAL NOT NULL,\n    source_order INTEGER NOT NULL,\n    date_fetch INTEGER NOT NULL,\n    date_upload INTEGER NOT NULL,\n    last_modified_at INTEGER NOT NULL DEFAULT 0,\n    version INTEGER NOT NULL DEFAULT 0,\n    is_syncing INTEGER NOT NULL DEFAULT 0,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX chapters_manga_id_index ON chapters(manga_id);\nCREATE INDEX chapters_unread_by_manga_index ON chapters(manga_id, read) WHERE read = 0;\n\nCREATE TRIGGER update_last_modified_at_chapters\nAFTER UPDATE ON chapters\nFOR EACH ROW\nBEGIN\n  UPDATE chapters\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nCREATE TRIGGER update_chapter_and_manga_version AFTER UPDATE ON chapters\nWHEN new.is_syncing = 0 AND (\n    new.read != old.read OR\n    new.bookmark != old.bookmark OR\n    new.last_page_read != old.last_page_read\n)\nBEGIN\n    -- Update the chapter version\n    UPDATE chapters SET version = version + 1\n    WHERE _id = new._id;\n\n    -- Update the manga version\n    UPDATE mangas SET version = version + 1\n    WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0;\nEND;\n\ngetChapterById:\nSELECT *\nFROM chapters\nWHERE _id = :id;\n\ngetChaptersByMangaId:\nSELECT C.*\nFROM chapters C\nLEFT JOIN excluded_scanlators ES\nON C.manga_id = ES.manga_id\nAND C.scanlator = ES.scanlator\nWHERE C.manga_id = :mangaId\nAND (\n    :applyScanlatorFilter = 0\n    OR ES.scanlator IS NULL\n);\n\ngetScanlatorsByMangaId:\nSELECT scanlator\nFROM chapters\nWHERE manga_id = :mangaId;\n\ngetBookmarkedChaptersByMangaId:\nSELECT *\nFROM chapters\nWHERE bookmark\nAND manga_id = :mangaId;\n\ngetChapterByUrl:\nSELECT *\nFROM chapters\nWHERE url = :chapterUrl;\n\ngetChapterByUrlAndMangaId:\nSELECT *\nFROM chapters\nWHERE url = :chapterUrl\nAND manga_id = :mangaId;\n\nremoveChaptersWithIds:\nDELETE FROM chapters\nWHERE _id IN :chapterIds;\n\nresetIsSyncing:\nUPDATE chapters\nSET is_syncing = 0\nWHERE is_syncing = 1;\n\ninsert:\nINSERT INTO chapters(manga_id, url, name, scanlator, read, bookmark, last_page_read, chapter_number, source_order,date_fetch, date_upload, last_modified_at, version, is_syncing)\nVALUES (:mangaId, :url, :name, :scanlator, :read, :bookmark, :lastPageRead, :chapterNumber, :sourceOrder, :dateFetch, :dateUpload, 0, :version, 0);\n\nupdate:\nUPDATE chapters\nSET manga_id = coalesce(:mangaId, manga_id),\n    url = coalesce(:url, url),\n    name = coalesce(:name, name),\n    scanlator = coalesce(:scanlator, scanlator),\n    read = coalesce(:read, read),\n    bookmark = coalesce(:bookmark, bookmark),\n    last_page_read = coalesce(:lastPageRead, last_page_read),\n    chapter_number = coalesce(:chapterNumber, chapter_number),\n    source_order = coalesce(:sourceOrder, source_order),\n    date_fetch = coalesce(:dateFetch, date_fetch),\n    date_upload = coalesce(:dateUpload, date_upload),\n    version = coalesce(:version, version),\n    is_syncing = coalesce(:isSyncing, is_syncing)\nWHERE _id = :chapterId;\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();"
  },
  {
    "path": "data/src/main/sqldelight/data/excluded_scanlators.sq",
    "content": "CREATE TABLE excluded_scanlators(\n    manga_id INTEGER NOT NULL,\n    scanlator TEXT NOT NULL,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX excluded_scanlators_manga_id_index ON excluded_scanlators(manga_id);\n\ninsert:\nINSERT INTO excluded_scanlators(manga_id, scanlator)\nVALUES (:mangaId, :scanlator);\n\nremove:\nDELETE FROM excluded_scanlators\nWHERE manga_id = :mangaId\nAND scanlator IN :scanlators;\n\ngetExcludedScanlatorsByMangaId:\nSELECT scanlator\nFROM excluded_scanlators\nWHERE manga_id = :mangaId;"
  },
  {
    "path": "data/src/main/sqldelight/data/extension_repos.sq",
    "content": "CREATE TABLE extension_repos (\n    base_url TEXT NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    short_name TEXT,\n    website TEXT NOT NULL,\n    signing_key_fingerprint TEXT UNIQUE NOT NULL\n);\n\nfindOne:\nSELECT *\nFROM extension_repos\nWHERE base_url = :base_url;\n\nfindOneBySigningKeyFingerprint:\nSELECT *\nFROM extension_repos\nWHERE signing_key_fingerprint = :fingerprint;\n\nfindAll:\nSELECT *\nFROM extension_repos;\n\ncount:\nSELECT COUNT(*)\nFROM extension_repos;\n\ninsert:\nINSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint)\nVALUES (:base_url, :name, :short_name, :website, :fingerprint);\n\nupsert:\nINSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint)\nVALUES (:base_url, :name, :short_name, :website, :fingerprint)\nON CONFLICT(base_url)\nDO UPDATE\nSET\n    name = :name,\n    short_name = :short_name,\n    website =: website,\n    signing_key_fingerprint = :fingerprint\nWHERE base_url = base_url;\n\nreplace:\nINSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint)\nVALUES (:base_url, :name, :short_name, :website, :fingerprint)\nON CONFLICT(signing_key_fingerprint)\nDO UPDATE\nSET\n    base_url = :base_url,\n    name = :name,\n    short_name = :short_name,\n    website =: website\nWHERE signing_key_fingerprint = signing_key_fingerprint;\n\ndelete:\nDELETE FROM extension_repos\nWHERE base_url = :base_url;\n"
  },
  {
    "path": "data/src/main/sqldelight/data/history.sq",
    "content": "import java.util.Date;\n\nCREATE TABLE history(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    chapter_id INTEGER NOT NULL UNIQUE,\n    last_read INTEGER AS Date,\n    time_read INTEGER NOT NULL,\n    FOREIGN KEY(chapter_id) REFERENCES chapters (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX history_history_chapter_id_index ON history(chapter_id);\n\ngetHistoryByMangaId:\nSELECT\nH._id,\nH.chapter_id,\nH.last_read,\nH.time_read\nFROM history H\nJOIN chapters C\nON H.chapter_id = C._id\nWHERE C.manga_id = :mangaId AND C._id = H.chapter_id;\n\ngetHistoryByChapterUrl:\nSELECT\nH._id,\nH.chapter_id,\nH.last_read,\nH.time_read\nFROM history H\nJOIN chapters C\nON H.chapter_id = C._id\nWHERE C.url = :chapterUrl AND C._id = H.chapter_id;\n\nresetHistoryById:\nUPDATE history\nSET last_read = 0\nWHERE _id = :historyId;\n\nresetHistoryByMangaId:\nUPDATE history\nSET last_read = 0\nWHERE _id IN (\n    SELECT H._id\n    FROM mangas M\n    INNER JOIN chapters C\n    ON M._id = C.manga_id\n    INNER JOIN history H\n    ON C._id = H.chapter_id\n    WHERE M._id = :mangaId\n);\n\nremoveAllHistory:\nDELETE FROM history;\n\nremoveResettedHistory:\nDELETE FROM history\nWHERE last_read = 0;\n\nupsert:\nINSERT INTO history(chapter_id, last_read, time_read)\nVALUES (:chapterId, :readAt, :time_read)\nON CONFLICT(chapter_id)\nDO UPDATE\nSET\n    last_read = :readAt,\n    time_read = time_read + :time_read\nWHERE chapter_id = :chapterId;\n\ngetReadDuration:\nSELECT coalesce(sum(time_read), 0)\nFROM history;\n"
  },
  {
    "path": "data/src/main/sqldelight/data/manga_sync.sq",
    "content": "import kotlin.Boolean;\n\nCREATE TABLE manga_sync(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    sync_id INTEGER NOT NULL,\n    remote_id INTEGER NOT NULL,\n    library_id INTEGER,\n    title TEXT NOT NULL,\n    last_chapter_read REAL NOT NULL,\n    total_chapters INTEGER NOT NULL,\n    status INTEGER NOT NULL,\n    score REAL NOT NULL,\n    remote_url TEXT NOT NULL,\n    start_date INTEGER NOT NULL,\n    finish_date INTEGER NOT NULL,\n    private INTEGER AS Boolean DEFAULT 0 NOT NULL,\n    UNIQUE (manga_id, sync_id) ON CONFLICT REPLACE,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\n\ndelete:\nDELETE FROM manga_sync\nWHERE manga_id = :mangaId AND sync_id = :syncId;\n\ngetTracks:\nSELECT *\nFROM manga_sync;\n\ngetTrackById:\nSELECT *\nFROM manga_sync\nWHERE _id = :id;\n\ngetTracksByMangaId:\nSELECT *\nFROM manga_sync\nWHERE manga_id = :mangaId;\n\ninsert:\nINSERT INTO manga_sync(manga_id,sync_id,remote_id,library_id,title,last_chapter_read,total_chapters,status,score,remote_url,start_date,finish_date,private)\nVALUES (:mangaId,:syncId,:remoteId,:libraryId,:title,:lastChapterRead,:totalChapters,:status,:score,:remoteUrl,:startDate,:finishDate,:private);\n\nupdate:\nUPDATE manga_sync\nSET\n    manga_id = coalesce(:mangaId, manga_id),\n    sync_id = coalesce(:syncId, sync_id),\n    remote_id = coalesce(:mediaId, remote_id),\n    library_id = coalesce(:libraryId, library_id),\n    title = coalesce(:title, title),\n    last_chapter_read = coalesce(:lastChapterRead, last_chapter_read),\n    total_chapters = coalesce(:totalChapter, total_chapters),\n    status = coalesce(:status, status),\n    score = coalesce(:score, score),\n    remote_url = coalesce(:trackingUrl, remote_url),\n    start_date = coalesce(:startDate, start_date),\n    finish_date = coalesce(:finishDate, finish_date),\n    private = coalesce(:private, private)\nWHERE _id = :id;\n"
  },
  {
    "path": "data/src/main/sqldelight/data/mangas.sq",
    "content": "import eu.kanade.tachiyomi.source.model.UpdateStrategy;\nimport kotlin.Boolean;\nimport kotlin.String;\nimport kotlin.collections.List;\n\nCREATE TABLE mangas(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    source INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    artist TEXT,\n    author TEXT,\n    description TEXT,\n    genre TEXT AS List<String>,\n    title TEXT NOT NULL,\n    status INTEGER NOT NULL,\n    thumbnail_url TEXT,\n    favorite INTEGER AS Boolean NOT NULL,\n    last_update INTEGER,\n    next_update INTEGER,\n    initialized INTEGER AS Boolean NOT NULL,\n    viewer INTEGER NOT NULL,\n    chapter_flags INTEGER NOT NULL,\n    cover_last_modified INTEGER NOT NULL,\n    date_added INTEGER NOT NULL,\n    update_strategy INTEGER AS UpdateStrategy NOT NULL DEFAULT 0,\n    calculate_interval INTEGER DEFAULT 0 NOT NULL,\n    last_modified_at INTEGER NOT NULL DEFAULT 0,\n    favorite_modified_at INTEGER,\n    version INTEGER NOT NULL DEFAULT 0,\n    is_syncing INTEGER NOT NULL DEFAULT 0\n);\n\nCREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1;\nCREATE INDEX mangas_url_index ON mangas(url);\n\nCREATE TRIGGER update_last_favorite_at_mangas\nAFTER UPDATE OF favorite ON mangas\nBEGIN\n  UPDATE mangas\n  SET favorite_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nCREATE TRIGGER update_last_modified_at_mangas\nAFTER UPDATE ON mangas\nFOR EACH ROW\nBEGIN\n  UPDATE mangas\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nCREATE TRIGGER update_manga_version AFTER UPDATE ON mangas\nBEGIN\n    UPDATE mangas SET version = version + 1\n    WHERE _id = new._id AND new.is_syncing = 0 AND (\n        new.url != old.url OR\n        new.description != old.description OR\n        new.favorite != old.favorite\n    );\nEND;\n\ngetMangaById:\nSELECT *\nFROM mangas\nWHERE _id = :id;\n\n-- TODO: this should ideally never really have more than 1 result\ngetMangaByUrlAndSource:\nSELECT *\nFROM mangas\nWHERE url = :url\nAND source = :source\nLIMIT 1;\n\ngetFavorites:\nSELECT *\nFROM mangas\nWHERE favorite = 1;\n\ngetReadMangaNotInLibrary:\nSELECT *\nFROM mangas\nWHERE favorite = 0 AND _id IN (\n    SELECT DISTINCT chapters.manga_id\n    FROM chapters\n    WHERE read = 1 OR last_page_read != 0\n);\n\ngetAllManga:\nSELECT *\nFROM mangas;\n\ngetAllMangaSourceAndUrl:\nSELECT source, url\nFROM mangas;\n\ngetMangasWithFavoriteTimestamp:\nSELECT *\nFROM mangas\nWHERE favorite_modified_at IS NOT NULL;\n\ngetSourceIdWithFavoriteCount:\nSELECT\nsource,\ncount(*)\nFROM mangas\nWHERE favorite = 1\nGROUP BY source;\n\ngetFavoriteBySourceId:\nSELECT *\nFROM mangas\nWHERE favorite = 1\nAND source = :sourceId;\n\ngetDuplicateLibraryManga:\nSELECT *\nFROM mangas\nWHERE favorite = 1\nAND LOWER(title) = :title\nAND _id != :id;\n\ngetUpcomingManga:\nSELECT *\nFROM mangas\nWHERE next_update >= :startOfDay\nAND favorite = 1\nAND status IN :statuses\nORDER BY next_update ASC;\n\nresetViewerFlags:\nUPDATE mangas\nSET viewer = 0;\n\nresetIsSyncing:\nUPDATE mangas\nSET is_syncing = 0\nWHERE is_syncing = 1;\n\ngetSourceIdsWithNonLibraryManga:\nSELECT source, COUNT(*) AS manga_count\nFROM mangas\nWHERE favorite = 0\nGROUP BY source;\n\ndeleteMangasNotInLibraryBySourceIds:\nDELETE FROM mangas\nWHERE favorite = 0\nAND source IN :sourceIds;\n\ninsert:\nINSERT INTO mangas(source, url, artist, author, description, genre, title, status, thumbnail_url, favorite, last_update, next_update, initialized, viewer, chapter_flags, cover_last_modified, date_added, update_strategy, calculate_interval, last_modified_at, version)\nVALUES (:source, :url, :artist, :author, :description, :genre, :title, :status, :thumbnailUrl, :favorite, :lastUpdate, :nextUpdate, :initialized, :viewerFlags, :chapterFlags, :coverLastModified, :dateAdded, :updateStrategy, :calculateInterval, 0, :version);\n\nupdate:\nUPDATE mangas SET\n    source = coalesce(:source, source),\n    url = coalesce(:url, url),\n    artist = coalesce(:artist, artist),\n    author = coalesce(:author, author),\n    description = coalesce(:description, description),\n    genre = coalesce(:genre, genre),\n    title = coalesce(:title, title),\n    status = coalesce(:status, status),\n    thumbnail_url = coalesce(:thumbnailUrl, thumbnail_url),\n    favorite = coalesce(:favorite, favorite),\n    last_update = coalesce(:lastUpdate, last_update),\n    next_update = coalesce(:nextUpdate, next_update),\n    initialized = coalesce(:initialized, initialized),\n    viewer = coalesce(:viewer, viewer),\n    chapter_flags = coalesce(:chapterFlags, chapter_flags),\n    cover_last_modified = coalesce(:coverLastModified, cover_last_modified),\n    date_added = coalesce(:dateAdded, date_added),\n    update_strategy = coalesce(:updateStrategy, update_strategy),\n    calculate_interval = coalesce(:calculateInterval, calculate_interval),\n    version = coalesce(:version, version),\n    is_syncing = coalesce(:isSyncing, is_syncing)\nWHERE _id = :mangaId;\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();\n"
  },
  {
    "path": "data/src/main/sqldelight/data/mangas_categories.sq",
    "content": "CREATE TABLE mangas_categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    category_id INTEGER NOT NULL,\n    FOREIGN KEY(category_id) REFERENCES categories (_id)\n    ON DELETE CASCADE,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\n\nCREATE TRIGGER insert_manga_category_update_version AFTER INSERT ON mangas_categories\nBEGIN\n    UPDATE mangas\n    SET version = version + 1\n    WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0;\nEND;\n\ninsert:\nINSERT INTO mangas_categories(manga_id, category_id)\nVALUES (:mangaId, :categoryId);\n\ndeleteMangaCategoryByMangaId:\nDELETE FROM mangas_categories\nWHERE manga_id = :mangaId;"
  },
  {
    "path": "data/src/main/sqldelight/data/sources.sq",
    "content": "CREATE TABLE sources(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    lang TEXT NOT NULL,\n    name TEXT NOT NULL\n);\n\nfindAll:\nSELECT *\nFROM sources;\n\nfindOne:\nSELECT *\nFROM sources\nWHERE _id = :id;\n\nupsert:\nINSERT INTO sources(_id, lang, name)\nVALUES (:id, :lang, :name)\nON CONFLICT(_id)\nDO UPDATE\nSET\n    lang = :lang,\n    name = :name\nWHERE _id = :id;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/1.sqm",
    "content": "ALTER TABLE chapters\nADD COLUMN source_order INTEGER DEFAULT 0;\n\nUPDATE mangas\nSET thumbnail_url = replace(thumbnail_url, '93.174.95.110', 'kissmanga.com')\nWHERE source = 4;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/10.sqm",
    "content": "ALTER TABLE mangas\nADD COLUMN date_added INTEGER NOT NULL DEFAULT 0;\n\nUPDATE mangas\nSET date_added = (\n    SELECT MIN(date_fetch)\n    FROM mangas M\n    INNER JOIN chapters C\n    ON M._id = C.manga_id\n    GROUP BY M._id\n);"
  },
  {
    "path": "data/src/main/sqldelight/migrations/11.sqm",
    "content": "ALTER TABLE mangas\nADD COLUMN next_update INTEGER DEFAULT 0;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/12.sqm",
    "content": "ALTER TABLE manga_sync\nRENAME TO manga_sync_tmp;\n\nCREATE TABLE manga_sync(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    sync_id INTEGER NOT NULL,\n    remote_id INTEGER NOT NULL,\n    library_id INTEGER,\n    title TEXT NOT NULL,\n    last_chapter_read REAL NOT NULL,\n    total_chapters INTEGER NOT NULL,\n    status INTEGER NOT NULL,\n    score REAL AS Float NOT NULL,\n    remote_url TEXT NOT NULL,\n    start_date INTEGER AS Long NOT NULL,\n    finish_date INTEGER AS Long NOT NULL,\n    UNIQUE (manga_id, sync_id) ON CONFLICT REPLACE,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\n\nINSERT INTO manga_sync(_id, manga_id, sync_id, remote_id, library_id, title, last_chapter_read, total_chapters, status, score, remote_url, start_date, finish_date)\nSELECT _id, manga_id, sync_id, remote_id, library_id, title, last_chapter_read, total_chapters, status, score, remote_url, start_date, finish_date\nFROM manga_sync_tmp;\n\nDROP TABLE manga_sync_tmp;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/13.sqm",
    "content": "UPDATE chapters\nSET date_upload = date_fetch\nWHERE date_upload = 0;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/14.sqm",
    "content": "DROP INDEX IF EXISTS chapters_manga_id_index;\nDROP INDEX IF EXISTS chapters_unread_by_manga_index;\nDROP INDEX IF EXISTS history_history_chapter_id_index;\nDROP INDEX IF EXISTS library_favorite_index;\nDROP INDEX IF EXISTS mangas_url_index;\n\nALTER TABLE mangas RENAME TO manga_temp;\nCREATE TABLE mangas(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    source INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    artist TEXT,\n    author TEXT,\n    description TEXT,\n    genre TEXT,\n    title TEXT NOT NULL,\n    status INTEGER NOT NULL,\n    thumbnail_url TEXT,\n    favorite INTEGER NOT NULL,\n    last_update INTEGER AS Long,\n    next_update INTEGER AS Long,\n    initialized INTEGER AS Boolean NOT NULL,\n    viewer INTEGER NOT NULL,\n    chapter_flags INTEGER NOT NULL,\n    cover_last_modified INTEGER AS Long NOT NULL,\n    date_added INTEGER AS Long NOT NULL\n);\nINSERT INTO mangas\nSELECT _id,source,url,artist,author,description,genre,title,status,thumbnail_url,favorite,last_update,next_update,initialized,viewer,chapter_flags,cover_last_modified,date_added\nFROM manga_temp;\n\nALTER TABLE categories RENAME TO categories_temp;\nCREATE TABLE categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    sort INTEGER NOT NULL,\n    flags INTEGER NOT NULL\n);\nINSERT INTO categories\nSELECT _id,name,sort,flags\nFROM categories_temp;\n\nALTER TABLE chapters RENAME TO chapters_temp;\nCREATE TABLE chapters(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    name TEXT NOT NULL,\n    scanlator TEXT,\n    read INTEGER AS Boolean NOT NULL,\n    bookmark INTEGER AS Boolean NOT NULL,\n    last_page_read INTEGER NOT NULL,\n    chapter_number REAL AS Float NOT NULL,\n    source_order INTEGER NOT NULL,\n    date_fetch INTEGER AS Long NOT NULL,\n    date_upload INTEGER AS Long NOT NULL,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO chapters\nSELECT _id,manga_id,url,name,scanlator,read,bookmark,last_page_read,chapter_number,source_order,date_fetch,date_upload\nFROM chapters_temp;\n\nALTER TABLE history RENAME TO history_temp;\nCREATE TABLE history(\n    history_id INTEGER NOT NULL PRIMARY KEY,\n    history_chapter_id INTEGER NOT NULL UNIQUE,\n    history_last_read INTEGER AS Long,\n    history_time_read INTEGER AS Long,\n    FOREIGN KEY(history_chapter_id) REFERENCES chapters (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO history\nSELECT history_id, history_chapter_id, history_last_read, history_time_read\nFROM history_temp;\n\nALTER TABLE mangas_categories RENAME TO mangas_categories_temp;\nCREATE TABLE mangas_categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    category_id INTEGER NOT NULL,\n    FOREIGN KEY(category_id) REFERENCES categories (_id)\n    ON DELETE CASCADE,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO mangas_categories\nSELECT _id, manga_id, category_id\nFROM mangas_categories_temp;\n\nALTER TABLE manga_sync RENAME TO manga_sync_temp;\nCREATE TABLE manga_sync(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    manga_id INTEGER NOT NULL,\n    sync_id INTEGER NOT NULL,\n    remote_id INTEGER NOT NULL,\n    library_id INTEGER,\n    title TEXT NOT NULL,\n    last_chapter_read REAL NOT NULL,\n    total_chapters INTEGER NOT NULL,\n    status INTEGER NOT NULL,\n    score REAL AS Float NOT NULL,\n    remote_url TEXT NOT NULL,\n    start_date INTEGER AS Long NOT NULL,\n    finish_date INTEGER AS Long NOT NULL,\n    UNIQUE (manga_id, sync_id) ON CONFLICT REPLACE,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO manga_sync\nSELECT _id, manga_id, sync_id, remote_id, library_id, title, last_chapter_read, total_chapters, status, score, remote_url, start_date, finish_date\nFROM manga_sync_temp;\n\nCREATE INDEX chapters_manga_id_index ON chapters(manga_id);\nCREATE INDEX chapters_unread_by_manga_index ON chapters(manga_id, read) WHERE read = 0;\nCREATE INDEX history_history_chapter_id_index ON history(history_chapter_id);\nCREATE INDEX library_favorite_index ON mangas(favorite) WHERE favorite = 1;\nCREATE INDEX mangas_url_index ON mangas(url);\n\nCREATE VIEW IF NOT EXISTS historyView AS\nSELECT\nhistory.history_id AS id,\nmangas._id AS mangaId,\nchapters._id AS chapterId,\nmangas.title,\nmangas.thumbnail_url AS thumbnailUrl,\nchapters.chapter_number AS chapterNumber,\nhistory.history_last_read AS readAt,\nmax_last_read.history_last_read AS maxReadAt,\nmax_last_read.history_chapter_id AS maxReadAtChapterId\nFROM mangas\nJOIN chapters\nON mangas._id = chapters.manga_id\nJOIN history\nON chapters._id = history.history_chapter_id\nJOIN (\nSELECT chapters.manga_id,chapters._id AS history_chapter_id, MAX(history.history_last_read) AS history_last_read\nFROM chapters JOIN history\nON chapters._id = history.history_chapter_id\nGROUP BY chapters.manga_id\n) AS max_last_read\nON chapters.manga_id = max_last_read.manga_id;\n\nDROP TABLE IF EXISTS manga_sync_temp;\nDROP TABLE IF EXISTS mangas_categories_temp;\nDROP TABLE IF EXISTS history_temp;\nDROP TABLE IF EXISTS chapters_temp;\nDROP TABLE IF EXISTS categories_temp;\nDROP TABLE IF EXISTS manga_temp;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/15.sqm",
    "content": "import java.util.Date;\n\nDROP INDEX IF EXISTS history_history_chapter_id_index;\nDROP VIEW IF EXISTS historyView;\n\n/**\n *  [last_read] was made not-null\n *  [time_read] was kept as long and made non-null\n *  `history` prefix was removed from table name\n */\nALTER TABLE history RENAME TO history_temp;\nCREATE TABLE history(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    chapter_id INTEGER NOT NULL UNIQUE,\n    last_read INTEGER AS Date NOT NULL,\n    time_read INTEGER NOT NULL,\n    FOREIGN KEY(chapter_id) REFERENCES chapters (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO history\nSELECT history_id, history_chapter_id, coalesce(history_last_read, 0), coalesce(history_time_read, 0)\nFROM history_temp;\n\n/**\n *  [history.time_read] was added as a column in [historyView]\n */\nCREATE VIEW historyView AS\nSELECT\n    history._id AS id,\n    mangas._id AS mangaId,\n    chapters._id AS chapterId,\n    mangas.title,\n    mangas.thumbnail_url AS thumbnailUrl,\n    chapters.chapter_number AS chapterNumber,\n    history.last_read AS readAt,\n    history.time_read AS readDuration,\n    max_last_read.last_read AS maxReadAt,\n    max_last_read.chapter_id AS maxReadAtChapterId\nFROM mangas\nJOIN chapters\nON mangas._id = chapters.manga_id\nJOIN history\nON chapters._id = history.chapter_id\nJOIN (\n    SELECT chapters.manga_id,chapters._id AS chapter_id, MAX(history.last_read) AS last_read\n    FROM chapters JOIN history\n    ON chapters._id = history.chapter_id\n    GROUP BY chapters.manga_id\n) AS max_last_read\nON chapters.manga_id = max_last_read.manga_id;\n\nCREATE INDEX history_history_chapter_id_index ON history(chapter_id);"
  },
  {
    "path": "data/src/main/sqldelight/migrations/16.sqm",
    "content": "CREATE TABLE sources(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    lang TEXT NOT NULL,\n    name TEXT NOT NULL\n);"
  },
  {
    "path": "data/src/main/sqldelight/migrations/17.sqm",
    "content": "DROP VIEW IF EXISTS historyView;\n\nCREATE VIEW historyView AS\nSELECT\n    history._id AS id,\n    mangas._id AS mangaId,\n    chapters._id AS chapterId,\n    mangas.title,\n    mangas.thumbnail_url AS thumbnailUrl,\n    mangas.source,\n    mangas.favorite,\n    mangas.cover_last_modified,\n    chapters.chapter_number AS chapterNumber,\n    history.last_read AS readAt,\n    history.time_read AS readDuration,\n    max_last_read.last_read AS maxReadAt,\n    max_last_read.chapter_id AS maxReadAtChapterId\nFROM mangas\nJOIN chapters\nON mangas._id = chapters.manga_id\nJOIN history\nON chapters._id = history.chapter_id\nJOIN (\n    SELECT chapters.manga_id,chapters._id AS chapter_id, MAX(history.last_read) AS last_read\n    FROM chapters JOIN history\n    ON chapters._id = history.chapter_id\n    GROUP BY chapters.manga_id\n) AS max_last_read\nON chapters.manga_id = max_last_read.manga_id;\n"
  },
  {
    "path": "data/src/main/sqldelight/migrations/18.sqm",
    "content": "CREATE VIEW updatesView AS\nSELECT\n    mangas._id AS mangaId,\n    mangas.title AS mangaTitle,\n    chapters._id AS chapterId,\n    chapters.name AS chapterName,\n    chapters.scanlator,\n    chapters.read,\n    chapters.bookmark,\n    mangas.source,\n    mangas.favorite,\n    mangas.thumbnail_url AS thumbnailUrl,\n    mangas.cover_last_modified AS coverLastModified,\n    chapters.date_upload AS dateUpload,\n    chapters.date_fetch AS datefetch\nFROM mangas JOIN chapters\nON mangas._id = chapters.manga_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/19.sqm",
    "content": "-- Insert Default category\nINSERT OR IGNORE INTO categories(_id, name, sort, flags) VALUES (0, \"\", -1, 0);\n-- Disallow deletion of default category\nCREATE TRIGGER IF NOT EXISTS system_category_delete_trigger BEFORE DELETE\nON categories\nBEGIN SELECT CASE\n    WHEN old._id <= 0 THEN\n        RAISE(ABORT, \"System category can't be deleted\")\n    END;\nEND;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/2.sqm",
    "content": "CREATE TABLE history(\n    history_id INTEGER NOT NULL PRIMARY KEY,\n    history_chapter_id INTEGER NOT NULL UNIQUE,\n    history_last_read INTEGER,\n    history_time_read INTEGER,\n    FOREIGN KEY(history_chapter_id) REFERENCES chapters (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX history_history_chapter_id_index ON history(history_chapter_id);"
  },
  {
    "path": "data/src/main/sqldelight/migrations/20.sqm",
    "content": "ALTER TABLE mangas ADD COLUMN update_strategy INTEGER NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "data/src/main/sqldelight/migrations/21.sqm",
    "content": "CREATE VIEW libraryView AS\nSELECT\n    M.*,\n    coalesce(C.total - C.readCount, 0) AS unreadCount,\n    coalesce(C.readCount, 0) AS readCount,\n    coalesce(C.latestUpload, 0) AS latestUpload,\n    coalesce(C.fetchedAt, 0) AS chapterFetchedAt,\n    coalesce(C.lastRead, 0) AS lastRead,\n    COALESCE(MC.category_id, 0) AS category\nFROM mangas M\nLEFT JOIN mangas_categories AS MC\nON MC.manga_id = M._id\nLEFT JOIN(\n    SELECT\n        chapters.manga_id,\n        count(*) AS total,\n        sum(read) AS readCount,\n        max(chapters.date_upload) AS latestUpload,\n        max(history.last_read) AS lastRead,\n        max(chapters.date_fetch) AS fetchedAt\n    FROM chapters\n    LEFT JOIN history\n    ON chapters._id = history.chapter_id\n    GROUP BY chapters.manga_id\n) AS C\nON M._id = C.manga_id\nWHERE M.favorite = 1;\n"
  },
  {
    "path": "data/src/main/sqldelight/migrations/22.sqm",
    "content": "DROP VIEW libraryView;\n\nCREATE VIEW libraryView AS\nSELECT\n    M.*,\n    coalesce(C.total, 0) AS totalCount,\n    coalesce(C.readCount, 0) AS readCount,\n    coalesce(C.latestUpload, 0) AS latestUpload,\n    coalesce(C.fetchedAt, 0) AS chapterFetchedAt,\n    coalesce(C.lastRead, 0) AS lastRead,\n    coalesce(C.bookmarkCount, 0) AS bookmarkCount,\n    coalesce(MC.category_id, 0) AS category\nFROM mangas M\nLEFT JOIN(\n    SELECT\n        chapters.manga_id,\n        count(*) AS total,\n        sum(read) AS readCount,\n        coalesce(max(chapters.date_upload), 0) AS latestUpload,\n        coalesce(max(history.last_read), 0) AS lastRead,\n        coalesce(max(chapters.date_fetch), 0) AS fetchedAt,\n        sum(chapters.bookmark) AS bookmarkCount\n    FROM chapters\n    LEFT JOIN history\n    ON chapters._id = history.chapter_id\n    GROUP BY chapters.manga_id\n) AS C\nON M._id = C.manga_id\nLEFT JOIN mangas_categories AS MC\nON MC.manga_id = M._id\nWHERE M.favorite = 1;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/23.sqm",
    "content": "DROP VIEW IF EXISTS updatesView;\n\nCREATE VIEW updatesView AS\nSELECT\n    mangas._id AS mangaId,\n    mangas.title AS mangaTitle,\n    chapters._id AS chapterId,\n    chapters.name AS chapterName,\n    chapters.scanlator,\n    chapters.read,\n    chapters.bookmark,\n    chapters.last_page_read,\n    mangas.source,\n    mangas.favorite,\n    mangas.thumbnail_url AS thumbnailUrl,\n    mangas.cover_last_modified AS coverLastModified,\n    chapters.date_upload AS dateUpload,\n    chapters.date_fetch AS datefetch\nFROM mangas JOIN chapters\nON mangas._id = chapters.manga_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/24.sqm",
    "content": "ALTER TABLE mangas ADD COLUMN calculate_interval INTEGER DEFAULT 0 NOT NULL;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/25.sqm",
    "content": "ALTER TABLE categories ADD COLUMN hidden INTEGER DEFAULT 0 NOT NULL;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/26.sqm",
    "content": "ALTER TABLE mangas ADD COLUMN last_modified_at INTEGER AS Long NOT NULL DEFAULT 0;\nALTER TABLE mangas ADD COLUMN favorite_modified_at INTEGER AS Long;\nALTER TABLE mangas_categories ADD COLUMN last_modified_at INTEGER AS Long NOT NULL DEFAULT 0;\nALTER TABLE chapters ADD COLUMN last_modified_at INTEGER AS Long NOT NULL DEFAULT 0;\n\nUPDATE mangas SET last_modified_at = strftime('%s', 'now');\nUPDATE mangas SET favorite_modified_at = strftime('%s', 'now') WHERE favorite = 1;\nUPDATE mangas_categories SET last_modified_at = strftime('%s', 'now');\nUPDATE chapters SET last_modified_at = strftime('%s', 'now');\n\n-- Create triggers\nDROP TRIGGER IF EXISTS update_last_modified_at_mangas;\nCREATE TRIGGER update_last_modified_at_mangas\nAFTER UPDATE ON mangas\nFOR EACH ROW\nBEGIN\n  UPDATE mangas\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nDROP TRIGGER IF EXISTS update_favorite_modified_at_mangas;\nCREATE TRIGGER update_last_favorited_at_mangas\nAFTER UPDATE OF favorite ON mangas\nBEGIN\n  UPDATE mangas\n  SET favorite_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nDROP TRIGGER IF EXISTS update_last_modified_at_chapters;\nCREATE TRIGGER update_last_modified_at_chapters\nAFTER UPDATE ON chapters\nFOR EACH ROW\nBEGIN\n  UPDATE chapters\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nDROP TRIGGER IF EXISTS update_last_modified_at_mangas_categories;\nCREATE TRIGGER update_last_modified_at_mangas_categories\nAFTER UPDATE ON mangas_categories\nFOR EACH ROW\nBEGIN\n  UPDATE mangas_categories\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/27.sqm",
    "content": "CREATE TABLE excluded_scanlators(\n    manga_id INTEGER NOT NULL,\n    scanlator TEXT NOT NULL,\n    FOREIGN KEY(manga_id) REFERENCES mangas (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX excluded_scanlators_manga_id_index ON excluded_scanlators(manga_id);\n\nDROP VIEW IF EXISTS libraryView;\n\nCREATE VIEW libraryView AS\nSELECT\n    M.*,\n    coalesce(C.total, 0) AS totalCount,\n    coalesce(C.readCount, 0) AS readCount,\n    coalesce(C.latestUpload, 0) AS latestUpload,\n    coalesce(C.fetchedAt, 0) AS chapterFetchedAt,\n    coalesce(C.lastRead, 0) AS lastRead,\n    coalesce(C.bookmarkCount, 0) AS bookmarkCount,\n    coalesce(MC.category_id, 0) AS category\nFROM mangas M\nLEFT JOIN(\n    SELECT\n        chapters.manga_id,\n        count(*) AS total,\n        sum(read) AS readCount,\n        coalesce(max(chapters.date_upload), 0) AS latestUpload,\n        coalesce(max(history.last_read), 0) AS lastRead,\n        coalesce(max(chapters.date_fetch), 0) AS fetchedAt,\n        sum(chapters.bookmark) AS bookmarkCount\n    FROM chapters\n    LEFT JOIN excluded_scanlators\n    ON chapters.manga_id = excluded_scanlators.manga_id\n    AND chapters.scanlator = excluded_scanlators.scanlator\n    LEFT JOIN history\n    ON chapters._id = history.chapter_id\n    WHERE excluded_scanlators.scanlator IS NULL\n    GROUP BY chapters.manga_id\n) AS C\nON M._id = C.manga_id\nLEFT JOIN mangas_categories AS MC\nON MC.manga_id = M._id\nWHERE M.favorite = 1;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/28.sqm",
    "content": "UPDATE chapters\nSET scanlator = trim(scanlator)\nWHERE scanlator IS NOT NULL;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/29.sqm",
    "content": "-- MangaUpdates score fixing --\nUPDATE manga_sync\nSET score = max(score, 0)\nWHERE sync_id = 7;\n"
  },
  {
    "path": "data/src/main/sqldelight/migrations/3.sqm",
    "content": "ALTER TABLE chapters\nADD COLUMN bookmark INTEGER DEFAULT 0;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/30.sqm",
    "content": "-- Mangas table\nALTER TABLE mangas ADD COLUMN version INTEGER NOT NULL DEFAULT 0;\nALTER TABLE mangas ADD COLUMN is_syncing INTEGER NOT NULL DEFAULT 0;\n\n-- Chapters table\nALTER TABLE chapters ADD COLUMN version INTEGER NOT NULL DEFAULT 0;\nALTER TABLE chapters ADD COLUMN is_syncing INTEGER NOT NULL DEFAULT 0;\n\n-- Mangas triggers\nDROP TRIGGER IF EXISTS update_manga_version;\nCREATE TRIGGER update_manga_version AFTER UPDATE ON mangas\nBEGIN\n    UPDATE mangas SET version = version + 1\n    WHERE _id = new._id AND new.is_syncing = 0 AND (\n        new.url != old.url OR\n        new.description != old.description OR\n        new.favorite != old.favorite\n    );\nEND;\n\n-- Chapters triggers\nDROP TRIGGER IF EXISTS update_chapter_and_manga_version;\nCREATE TRIGGER update_chapter_and_manga_version AFTER UPDATE ON chapters\nWHEN new.is_syncing = 0 AND (\n    new.read != old.read OR\n    new.bookmark != old.bookmark OR\n    new.last_page_read != old.last_page_read\n)\nBEGIN\n    -- Update the chapter version\n    UPDATE chapters SET version = version + 1\n    WHERE _id = new._id;\n\n    -- Update the manga version\n    UPDATE mangas SET version = version + 1\n    WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0;\nEND;\n\n-- manga_categories table\nDROP TRIGGER IF EXISTS insert_manga_category_update_version;\nCREATE TRIGGER insert_manga_category_update_version AFTER INSERT ON mangas_categories\nBEGIN\n    UPDATE mangas\n    SET version = version + 1\n    WHERE _id = new.manga_id AND (SELECT is_syncing FROM mangas WHERE _id = new.manga_id) = 0;\nEND;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/31.sqm",
    "content": "-- Create ExtensionRepo table --\nCREATE TABLE extension_repos (\n    base_url TEXT NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    short_name TEXT,\n    website TEXT NOT NULL,\n    signing_key_fingerprint TEXT UNIQUE NOT NULL\n);\n"
  },
  {
    "path": "data/src/main/sqldelight/migrations/32.sqm",
    "content": "import kotlin.Boolean;\n\n-- Add private field for tracking\nALTER TABLE manga_sync ADD COLUMN private INTEGER AS Boolean DEFAULT 0 NOT NULL;\n"
  },
  {
    "path": "data/src/main/sqldelight/migrations/4.sqm",
    "content": "ALTER TABLE chapters\nADD COLUMN scanlator TEXT DEFAULT NULL;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/5.sqm",
    "content": "ALTER TABLE manga_sync\nADD COLUMN remote_url TEXT DEFAULT '';"
  },
  {
    "path": "data/src/main/sqldelight/migrations/6.sqm",
    "content": "ALTER TABLE manga_sync\nADD COLUMN library_id INTEGER;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/7.sqm",
    "content": "DROP INDEX IF EXISTS mangas_favorite_index;\n\nCREATE INDEX library_favorite_index\nON mangas(favorite)\nWHERE favorite = 1;\n\nCREATE INDEX chapters_unread_by_manga_index\nON chapters(manga_id, read)\nWHERE read = 0;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/8.sqm",
    "content": "ALTER TABLE manga_sync\nADD COLUMN start_date INTEGER NOT NULL DEFAULT 0;\n\nALTER TABLE manga_sync\nADD COLUMN finish_date INTEGER NOT NULL DEFAULT 0;"
  },
  {
    "path": "data/src/main/sqldelight/migrations/9.sqm",
    "content": "ALTER TABLE mangas\nADD COLUMN cover_last_modified INTEGER NOT NULL DEFAULT 0;"
  },
  {
    "path": "data/src/main/sqldelight/view/historyView.sq",
    "content": "CREATE VIEW historyView AS\nSELECT\n    history._id AS id,\n    mangas._id AS mangaId,\n    chapters._id AS chapterId,\n    mangas.title,\n    mangas.thumbnail_url AS thumbnailUrl,\n    mangas.source,\n    mangas.favorite,\n    mangas.cover_last_modified,\n    chapters.chapter_number AS chapterNumber,\n    history.last_read AS readAt,\n    history.time_read AS readDuration,\n    max_last_read.last_read AS maxReadAt,\n    max_last_read.chapter_id AS maxReadAtChapterId\nFROM mangas\nJOIN chapters\nON mangas._id = chapters.manga_id\nJOIN history\nON chapters._id = history.chapter_id\nJOIN (\n    SELECT chapters.manga_id,chapters._id AS chapter_id, MAX(history.last_read) AS last_read\n    FROM chapters JOIN history\n    ON chapters._id = history.chapter_id\n    GROUP BY chapters.manga_id\n) AS max_last_read\nON chapters.manga_id = max_last_read.manga_id;\n\nhistory:\nSELECT\nid,\nmangaId,\nchapterId,\ntitle,\nthumbnailUrl,\nsource,\nfavorite,\ncover_last_modified,\nchapterNumber,\nreadAt,\nreadDuration\nFROM historyView\nWHERE historyView.readAt > 0\nAND maxReadAtChapterId = historyView.chapterId\nAND lower(historyView.title) LIKE ('%' || :query || '%')\nORDER BY readAt DESC;\n\ngetLatestHistory:\nSELECT\nid,\nmangaId,\nchapterId,\ntitle,\nthumbnailUrl,\nsource,\nfavorite,\ncover_last_modified,\nchapterNumber,\nreadAt,\nreadDuration\nFROM historyView\nWHERE historyView.readAt > 0\nORDER BY readAt DESC\nLIMIT 1;\n"
  },
  {
    "path": "data/src/main/sqldelight/view/libraryView.sq",
    "content": "CREATE VIEW libraryView AS\nSELECT\n    M.*,\n    coalesce(C.total, 0) AS totalCount,\n    coalesce(C.readCount, 0) AS readCount,\n    coalesce(C.latestUpload, 0) AS latestUpload,\n    coalesce(C.fetchedAt, 0) AS chapterFetchedAt,\n    coalesce(C.lastRead, 0) AS lastRead,\n    coalesce(C.bookmarkCount, 0) AS bookmarkCount,\n    coalesce(MC.category_id, 0) AS category\nFROM mangas M\nLEFT JOIN(\n    SELECT\n        chapters.manga_id,\n        count(*) AS total,\n        sum(read) AS readCount,\n        coalesce(max(chapters.date_upload), 0) AS latestUpload,\n        coalesce(max(history.last_read), 0) AS lastRead,\n        coalesce(max(chapters.date_fetch), 0) AS fetchedAt,\n        sum(chapters.bookmark) AS bookmarkCount\n    FROM chapters\n    LEFT JOIN excluded_scanlators\n    ON chapters.manga_id = excluded_scanlators.manga_id\n    AND chapters.scanlator = excluded_scanlators.scanlator\n    LEFT JOIN history\n    ON chapters._id = history.chapter_id\n    WHERE excluded_scanlators.scanlator IS NULL\n    GROUP BY chapters.manga_id\n) AS C\nON M._id = C.manga_id\nLEFT JOIN mangas_categories AS MC\nON MC.manga_id = M._id\nWHERE M.favorite = 1;\n\nlibrary:\nSELECT *\nFROM libraryView;\n"
  },
  {
    "path": "data/src/main/sqldelight/view/updatesView.sq",
    "content": "CREATE VIEW updatesView AS\nSELECT\n    mangas._id AS mangaId,\n    mangas.title AS mangaTitle,\n    chapters._id AS chapterId,\n    chapters.name AS chapterName,\n    chapters.scanlator,\n    chapters.read,\n    chapters.bookmark,\n    chapters.last_page_read,\n    mangas.source,\n    mangas.favorite,\n    mangas.thumbnail_url AS thumbnailUrl,\n    mangas.cover_last_modified AS coverLastModified,\n    chapters.date_upload AS dateUpload,\n    chapters.date_fetch AS datefetch\nFROM mangas JOIN chapters\nON mangas._id = chapters.manga_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;\n\ngetRecentUpdates:\nSELECT *\nFROM updatesView\nWHERE dateUpload > :after\nLIMIT :limit;\n\ngetUpdatesByReadStatus:\nSELECT *\nFROM updatesView\nWHERE read = :read\nAND dateUpload > :after\n\nLIMIT :limit;"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/anime_sync.sq",
    "content": "import kotlin.Boolean;\n\nCREATE TABLE anime_sync(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    anime_id INTEGER NOT NULL,\n    sync_id INTEGER NOT NULL,\n    remote_id INTEGER NOT NULL,\n    library_id INTEGER,\n    title TEXT NOT NULL,\n    last_episode_seen REAL NOT NULL,\n    total_episodes INTEGER NOT NULL,\n    status INTEGER NOT NULL,\n    score REAL NOT NULL,\n    remote_url TEXT NOT NULL,\n    start_date INTEGER NOT NULL,\n    finish_date INTEGER NOT NULL,\n    private INTEGER AS Boolean DEFAULT 0 NOT NULL,\n    UNIQUE (anime_id, sync_id) ON CONFLICT REPLACE,\n    FOREIGN KEY(anime_id) REFERENCES animes (_id)\n    ON DELETE CASCADE\n);\n\ndelete:\nDELETE FROM anime_sync\nWHERE anime_id = :animeId AND sync_id = :syncId;\n\ngetAnimeTracks:\nSELECT *\nFROM anime_sync;\n\ngetTrackByAnimeId:\nSELECT *\nFROM anime_sync\nWHERE _id = :id;\n\n\ngetTracksByAnimeId:\nSELECT *\nFROM anime_sync\nWHERE anime_id = :animeId;\n\ninsert:\nINSERT INTO anime_sync(anime_id,sync_id,remote_id,library_id,title,last_episode_seen,total_episodes,status,score,remote_url,start_date,finish_date,private)\nVALUES (:animeId,:syncId,:remoteId,:libraryId,:title,:lastEpisodeSeen,:totalEpisodes,:status,:score,:remoteUrl,:startDate,:finishDate,:private);\n\nupdate:\nUPDATE anime_sync\nSET\n    anime_id = coalesce(:animeId, anime_id),\n    sync_id = coalesce(:syncId, sync_id),\n    remote_id = coalesce(:mediaId, remote_id),\n    library_id = coalesce(:libraryId, library_id),\n    title = coalesce(:title, title),\n    last_episode_seen = coalesce(:lastEpisodeSeen, last_episode_seen),\n    total_episodes = coalesce(:totalEpisodes, total_episodes),\n    status = coalesce(:status, status),\n    score = coalesce(:score, score),\n    remote_url = coalesce(:trackingUrl, remote_url),\n    start_date = coalesce(:startDate, start_date),\n    finish_date = coalesce(:finishDate, finish_date),\n    private = coalesce(:private, private)\nWHERE _id = :id;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/animehistory.sq",
    "content": "import java.util.Date;\n\nCREATE TABLE animehistory(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    episode_id INTEGER NOT NULL UNIQUE,\n    last_seen INTEGER AS Date,\n    FOREIGN KEY(episode_id) REFERENCES episodes (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX animehistory_history_episode_id_index ON animehistory(episode_id);\n\ngetHistoryByAnimeId:\nSELECT\nH._id,\nH.episode_id,\nH.last_seen\nFROM animehistory H\nJOIN episodes EP\nON H.episode_id = EP._id\nWHERE EP.anime_id = :animeId AND EP._id = H.episode_id;\n\ngetHistoryByEpisodeUrl:\nSELECT\nH._id,\nH.episode_id,\nH.last_seen\nFROM animehistory H\nJOIN episodes EP\nON H.episode_id = EP._id\nWHERE EP.url = :episodeUrl AND EP._id = H.episode_id;\n\nresetAnimeHistoryById:\nUPDATE animehistory\nSET last_seen = 0\nWHERE _id = :historyId;\n\nresetHistoryByAnimeId:\nUPDATE animehistory\nSET last_seen = 0\nWHERE _id IN (\n    SELECT H._id\n    FROM animes M\n    INNER JOIN episodes EP\n    ON M._id = EP.anime_id\n    INNER JOIN animehistory H\n    ON EP._id = H.episode_id\n    WHERE M._id = :animeId\n);\n\nremoveAllHistory:\nDELETE FROM animehistory;\n\nremoveResettedHistory:\nDELETE FROM animehistory\nWHERE last_seen = 0;\n\nupsert:\nINSERT INTO animehistory(episode_id, last_seen)\nVALUES (:episodeId, :seenAt)\nON CONFLICT(episode_id)\nDO UPDATE\nSET\n    last_seen = :seenAt\nWHERE episode_id = :episodeId;"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/animes.sq",
    "content": "import eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy;\nimport eu.kanade.tachiyomi.animesource.model.FetchType;\nimport kotlin.Boolean;\nimport kotlin.String;\nimport kotlin.collections.List;\n\nCREATE TABLE animes(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    source INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    artist TEXT,\n    author TEXT,\n    description TEXT,\n    genre TEXT AS List<String>,\n    title TEXT NOT NULL,\n    status INTEGER NOT NULL,\n    thumbnail_url TEXT,\n    favorite INTEGER AS Boolean NOT NULL,\n    last_update INTEGER,\n    next_update INTEGER,\n    initialized INTEGER AS Boolean NOT NULL,\n    viewer INTEGER NOT NULL,\n    episode_flags INTEGER NOT NULL,\n    cover_last_modified INTEGER NOT NULL,\n    date_added INTEGER NOT NULL,\n    update_strategy INTEGER AS AnimeUpdateStrategy NOT NULL DEFAULT 0,\n    calculate_interval INTEGER DEFAULT 0 NOT NULL,\n    last_modified_at INTEGER NOT NULL DEFAULT 0,\n    favorite_modified_at INTEGER,\n    version INTEGER NOT NULL DEFAULT 0,\n    is_syncing INTEGER NOT NULL DEFAULT 0,\n    fetch_type INTEGER AS FetchType NOT NULL DEFAULT 1,\n    parent_id INTEGER,\n    season_flags INTEGER NOT NULL,\n    season_number REAL NOT NULL,\n    season_source_order INTEGER NOT NULL,\n    background_url TEXT,\n    background_last_modified INTEGER NOT NULL\n);\n\nCREATE INDEX animelib_favorite_index ON animes(favorite) WHERE favorite = 1;\nCREATE INDEX animes_url_index ON animes(url);\nCREATE INDEX animes_parent_id ON animes(parent_id);\nCREATE INDEX animes_fetch_type ON animes(fetch_type);\n\nCREATE TRIGGER update_last_favorite_at_animes\nAFTER UPDATE OF favorite ON animes\nBEGIN\n  UPDATE animes\n  SET favorite_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nCREATE TRIGGER update_last_modified_at_animes\nAFTER UPDATE ON animes\nFOR EACH ROW\nBEGIN\n  UPDATE animes\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nCREATE TRIGGER update_anime_version AFTER UPDATE ON animes\nBEGIN\n    UPDATE animes SET version = version + 1\n    WHERE _id = new._id AND new.is_syncing = 0 AND (\n        new.url != old.url OR\n        new.description != old.description OR\n        new.favorite != old.favorite\n    );\nEND;\n\ngetAnimeById:\nSELECT *\nFROM animes\nWHERE _id = :id;\n\n-- TODO: this should ideally never really have more than 1 result\ngetAnimeByUrlAndSource:\nSELECT *\nFROM animes\nWHERE url = :url AND source = :source\nLIMIT 1;\n\ngetFavorites:\nSELECT *\nFROM animes\nWHERE favorite = 1;\n\ngetWatchedAnimeNotInLibrary:\nSELECT *\nFROM animes\nWHERE favorite = 0 AND _id IN (\n    SELECT DISTINCT episodes.anime_id\n    FROM episodes\n    WHERE seen = 1 OR last_second_seen != 0\n);\n\ngetAllAnime:\nSELECT *\nFROM animes;\n\ngetAllAnimeSourceAndUrl:\nSELECT source, url\nFROM animes;\n\ngetAnimesWithFavoriteTimestamp:\nSELECT *\nFROM animes\nWHERE favorite_modified_at IS NOT NULL;\n\ngetAnimeSourceIdWithFavoriteCount:\nSELECT\nsource,\ncount(*)\nFROM animes\nWHERE favorite = 1\nGROUP BY source;\n\ngetFavoriteBySourceId:\nSELECT *\nFROM animes\nWHERE favorite = 1\nAND source = :sourceId;\n\ngetDuplicateLibraryAnime:\nSELECT *\nFROM animes\nWHERE favorite = 1\nAND LOWER(title) = :title\nAND _id != :id;\n\ngetUpcomingAnime:\nSELECT *\nFROM animes\nWHERE next_update >= :startOfDay\nAND favorite = 1\nAND status IN :statuses\nORDER BY next_update ASC;\n\nresetViewerFlags:\nUPDATE animes\nSET viewer = 0;\n\nresetIsSyncing:\nUPDATE animes\nSET is_syncing = 0\nWHERE is_syncing = 1;\n\nremoveParentIdByIds:\nUPDATE animes\nSET parent_id = NULL\nWHERE _id IN :animeIds;\n\ngetChildrenByParentId:\nSELECT *\nFROM animes\nWHERE parent_id = :parentId;\n\ndeleteAnimesNotInLibraryByAnimeIds:\nDELETE FROM animes\nWHERE favorite = 0 AND _id IN :animeIds;\n\ninsert:\nINSERT INTO animes(source, url, artist, author, description, genre, title, status, thumbnail_url, favorite, last_update, next_update, initialized, viewer, episode_flags, cover_last_modified, date_added, update_strategy, calculate_interval, last_modified_at, version, fetch_type, parent_id, season_flags, season_number, season_source_order, background_url, background_last_modified)\nVALUES (:source, :url, :artist, :author, :description, :genre, :title, :status, :thumbnailUrl, :favorite, :lastUpdate, :nextUpdate, :initialized, :viewerFlags, :episodeFlags, :coverLastModified,:dateAdded, :updateStrategy, :calculateInterval, 0, :version, :fetchType, :parentId, :seasonFlags, :seasonNumber, :seasonSourceOrder, :backgroundUrl, :backgroundLastModified);\n\nupdate:\nUPDATE animes SET\n    source = coalesce(:source, source),\n    url = coalesce(:url, url),\n    artist = coalesce(:artist, artist),\n    author = coalesce(:author, author),\n    description = coalesce(:description, description),\n    genre = coalesce(:genre, genre),\n    title = coalesce(:title, title),\n    status = coalesce(:status, status),\n    thumbnail_url = coalesce(:thumbnailUrl, thumbnail_url),\n    favorite = coalesce(:favorite, favorite),\n    last_update = coalesce(:lastUpdate, last_update),\n    next_update = coalesce(:nextUpdate, next_update),\n    initialized = coalesce(:initialized, initialized),\n    viewer = coalesce(:viewer, viewer),\n    episode_flags = coalesce(:episodeFlags, episode_flags),\n    cover_last_modified = coalesce(:coverLastModified, cover_last_modified),\n    date_added = coalesce(:dateAdded, date_added),\n    update_strategy = coalesce(:updateStrategy, update_strategy),\n    calculate_interval = coalesce(:calculateInterval, calculate_interval),\n    version = coalesce(:version, version),\n    is_syncing = coalesce(:isSyncing, is_syncing),\n    fetch_type = coalesce(:fetchType, fetch_type),\n    parent_id = coalesce(:parentId, parent_id),\n    season_flags = coalesce(:seasonFlags, season_flags),\n    season_number = coalesce(:seasonNumber, season_number),\n    season_source_order = coalesce(:seasonSourceOrder, season_source_order),\n    background_url = coalesce(:backgroundUrl, background_url),\n    background_last_modified = coalesce(:backgroundLastModified, background_last_modified)\nWHERE _id = :animeId;\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();\n"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/animes_categories.sq",
    "content": "CREATE TABLE animes_categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    anime_id INTEGER NOT NULL,\n    category_id INTEGER NOT NULL,\n    FOREIGN KEY(category_id) REFERENCES categories (_id)\n    ON DELETE CASCADE,\n    FOREIGN KEY(anime_id) REFERENCES animes (_id)\n    ON DELETE CASCADE\n);\n\nCREATE TRIGGER insert_anime_category_update_version AFTER INSERT ON animes_categories\nBEGIN\n    UPDATE animes\n    SET version = version + 1\n    WHERE _id = new.anime_id AND (SELECT is_syncing FROM animes WHERE _id = new.anime_id) = 0;\nEND;\n\ninsert:\nINSERT INTO animes_categories(anime_id, category_id)\nVALUES (:animeId, :categoryId);\n\ndeleteAnimeCategoryByAnimeId:\nDELETE FROM animes_categories\nWHERE anime_id = :animeId;"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/animesources.sq",
    "content": "CREATE TABLE animesources(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    lang TEXT NOT NULL,\n    name TEXT NOT NULL\n);\n\nfindAll:\nSELECT *\nFROM animesources;\n\nfindOne:\nSELECT *\nFROM animesources\nWHERE _id = :id;\n\nupsert:\nINSERT INTO animesources(_id, lang, name)\nVALUES (:id, :lang, :name)\nON CONFLICT(_id)\nDO UPDATE\nSET\n    lang = :lang,\n    name = :name\nWHERE _id = :id;"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/categories.sq",
    "content": "CREATE TABLE categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    sort INTEGER NOT NULL,\n    flags INTEGER NOT NULL,\n    hidden INTEGER NOT NULL DEFAULT 0\n);\n\n-- Insert system category\nINSERT OR IGNORE INTO categories(_id, name, sort, flags) VALUES (0, \"\", -1, 0);\n-- Disallow deletion of default category\nCREATE TRIGGER IF NOT EXISTS system_category_delete_trigger BEFORE DELETE\nON categories\nBEGIN SELECT CASE\n    WHEN old._id <= 0 THEN\n        RAISE(ABORT, \"System category can't be deleted\")\n    END;\nEND;\n\ngetCategory:\nSELECT *\nFROM categories\nWHERE _id = :id\nLIMIT 1;\n\ngetCategories:\nSELECT\n_id AS id,\nname,\nsort AS `order`,\nflags,\nhidden\nFROM categories\nORDER BY sort;\n\ngetVisibleCategories:\nSELECT\n_id AS id,\nname,\nsort AS `order`,\nflags,\nhidden\nFROM categories\nWHERE hidden = 0\nORDER BY sort;\n\ngetCategoriesByAnimeId:\nSELECT\nC._id AS id,\nC.name,\nC.sort AS `order`,\nC.flags,\nC.hidden\nFROM categories C\nJOIN animes_categories AC\nON C._id = AC.category_id\nWHERE AC.anime_id = :animeId;\n\ngetVisibleCategoriesByAnimeId:\nSELECT\nC._id AS id,\nC.name,\nC.sort AS `order`,\nC.flags,\nC.hidden\nFROM categories C\nJOIN animes_categories AC\nON C._id = AC.category_id\nWHERE AC.anime_id = :animeId AND C.hidden = 0;\n\ninsert:\nINSERT INTO categories(name, sort, flags)\nVALUES (:name, :order, :flags);\n\ndelete:\nDELETE FROM categories\nWHERE _id = :categoryId;\n\nupdate:\nUPDATE categories\nSET name = coalesce(:name, name),\n    sort = coalesce(:order, sort),\n    flags = coalesce(:flags, flags),\n    hidden = coalesce(:hidden, hidden)\nWHERE _id = :categoryId;\n\nupdateAllFlags:\nUPDATE categories SET\nflags = coalesce(?, flags);\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/custom_buttons.sq",
    "content": "import kotlin.Boolean;\n\nCREATE TABLE custom_buttons (\n    _id INTEGER NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    isFavorite INTEGER AS Boolean NOT NULL,\n    sortIndex INTEGER NOT NULL,\n    content TEXT NOT NULL,\n    longPressContent TEXT NOT NULL,\n    onStartup TEXT NOT NULL\n);\n\n-- Insert skip intro button --\nINSERT OR IGNORE INTO custom_buttons (_id, name, isFavorite, sortIndex, content, longPressContent, onStartup)\nVALUES (1, '+85 s', 1, 0, 'local intro_length = mp.get_property_number(\"user-data/current-anime/intro-length\")\naniyomi.right_seek_by(intro_length)', 'aniyomi.int_picker(\"Change intro length\", \"%ds\", 0, 255, 1, \"user-data/current-anime/intro-length\")', 'function update_button(_, length)\n  if length ~= nil then\n    if length == 0 then\n\t  aniyomi.hide_button()\n\t  return\n\telse\n\t  aniyomi.show_button()\n\tend\n    aniyomi.set_button_title(\"+\" .. length .. \" s\")\n  end\nend\n\nif $isPrimary then\n  mp.observe_property(\"user-data/current-anime/intro-length\", \"number\", update_button)\nend');\n\nfindAll:\nSELECT *\nFROM custom_buttons\nORDER BY sortIndex;\n\ninsert:\nINSERT INTO custom_buttons(name, isFavorite, sortIndex, content, longPressContent, onStartup)\nVALUES (:name, :isFavorite, :sortIndex, :content, :longPressContent, :onStartup);\n\ndelete:\nDELETE FROM custom_buttons\nWHERE _id = :customButtonId;\n\nupdate:\nUPDATE custom_buttons\nSET name = coalesce(:name, name),\n    isFavorite = coalesce(:isFavorite, isFavorite),\n    sortIndex = coalesce(:sortIndex, sortIndex),\n    content = coalesce(:content, content),\n    longPressContent = coalesce(:longPressContent, longPressContent),\n    onStartup = coalesce(:onStartup, onStartup)\nWHERE _id = :customButtonId;\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();\n"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/episodes.sq",
    "content": "import kotlin.Boolean;\n\nCREATE TABLE episodes(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    anime_id INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    name TEXT NOT NULL,\n    scanlator TEXT,\n    seen INTEGER AS Boolean NOT NULL,\n    bookmark INTEGER AS Boolean NOT NULL,\n    last_second_seen INTEGER NOT NULL,\n    total_seconds INTEGER NOT NULL,\n    episode_number REAL NOT NULL,\n    source_order INTEGER NOT NULL,\n    date_fetch INTEGER NOT NULL,\n    date_upload INTEGER NOT NULL,\n    last_modified_at INTEGER NOT NULL DEFAULT 0,\n    version INTEGER NOT NULL DEFAULT 0,\n    is_syncing INTEGER NOT NULL DEFAULT 0,\n    summary TEXT,\n    preview_url TEXT,\n    fillermark INTEGER AS Boolean NOT NULL,\n    FOREIGN KEY(anime_id) REFERENCES animes (_id)\n    ON DELETE CASCADE\n);\n\nCREATE INDEX episodes_anime_id_index ON episodes(anime_id);\nCREATE INDEX episodes_unseen_by_anime_index ON episodes(anime_id, seen) WHERE seen = 0;\n\nCREATE TRIGGER update_last_modified_at_episodes\nAFTER UPDATE ON episodes\nFOR EACH ROW\nBEGIN\n  UPDATE episodes\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nCREATE TRIGGER update_episode_and_anime_version AFTER UPDATE ON episodes\nWHEN new.is_syncing = 0 AND (\n    new.seen != old.seen OR\n    new.bookmark != old.bookmark OR\n    new.last_second_seen != old.last_second_seen\n)\nBEGIN\n    -- Update the episode version\n    UPDATE episodes SET version = version + 1\n    WHERE _id = new._id;\n\n    -- Update the anime version\n    UPDATE animes SET version = version + 1\n    WHERE _id = new.anime_id AND (SELECT is_syncing FROM animes WHERE _id = new.anime_id) = 0;\nEND;\n\ngetEpisodeById:\nSELECT *\nFROM episodes\nWHERE _id = :id;\n\ngetEpisodesByAnimeId:\nSELECT *\nFROM episodes\nWHERE anime_id = :animeId;\n\ngetBookmarkedEpisodesByAnimeId:\nSELECT *\nFROM episodes\nWHERE bookmark\nAND anime_id = :animeId;\n\n\ngetEpisodeByUrl:\nSELECT *\nFROM episodes\nWHERE url = :episodeUrl;\n\ngetEpisodeByUrlAndAnimeId:\nSELECT *\nFROM episodes\nWHERE url = :episodeUrl\nAND anime_id = :animeId;\n\nremoveEpisodesWithIds:\nDELETE FROM episodes\nWHERE _id IN :episodeIds;\n\nresetIsSyncing:\nUPDATE episodes\nSET is_syncing = 0\nWHERE is_syncing = 1;\n\ninsert:\nINSERT INTO episodes(anime_id, url, name, scanlator, seen, bookmark, last_second_seen, total_seconds, episode_number, source_order, date_fetch, date_upload, last_modified_at, version, is_syncing, summary, preview_url, fillermark)\nVALUES (:animeId, :url, :name, :scanlator, :seen, :bookmark, :lastSecondSeen, :totalSeconds, :episodeNumber, :sourceOrder, :dateFetch, :dateUpload, 0, :version, 0, :summary, :previewUrl, :fillermark);\n\nupdate:\nUPDATE episodes\nSET anime_id = coalesce(:animeId, anime_id),\n    url = coalesce(:url, url),\n    name = coalesce(:name, name),\n    scanlator = coalesce(:scanlator, scanlator),\n    seen = coalesce(:seen, seen),\n    bookmark = coalesce(:bookmark, bookmark),\n    last_second_seen = coalesce(:lastSecondSeen, last_second_seen),\n    total_seconds = coalesce(:totalSeconds, total_seconds),\n    episode_number = coalesce(:episodeNumber, episode_number),\n    source_order = coalesce(:sourceOrder, source_order),\n    date_fetch = coalesce(:dateFetch, date_fetch),\n    date_upload = coalesce(:dateUpload, date_upload),\n    version = coalesce(:version, version),\n    is_syncing = coalesce(:isSyncing, is_syncing),\n    summary = coalesce(:summary, summary),\n    preview_url = coalesce(:previewUrl, preview_url),\n    fillermark = coalesce(:fillermark, fillermark)\nWHERE _id = :episodeId;\n\nselectLastInsertedRowId:\nSELECT last_insert_rowid();\n"
  },
  {
    "path": "data/src/main/sqldelightanime/dataanime/extension_repos.sq",
    "content": "CREATE TABLE extension_repos (\n    base_url TEXT NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    short_name TEXT,\n    website TEXT NOT NULL,\n    signing_key_fingerprint TEXT UNIQUE NOT NULL\n);\n\nfindOne:\nSELECT *\nFROM extension_repos\nWHERE base_url = :base_url;\n\nfindOneBySigningKeyFingerprint:\nSELECT *\nFROM extension_repos\nWHERE signing_key_fingerprint = :fingerprint;\n\nfindAll:\nSELECT *\nFROM extension_repos;\n\ncount:\nSELECT COUNT(*)\nFROM extension_repos;\n\ninsert:\nINSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint)\nVALUES (:base_url, :name, :short_name, :website, :fingerprint);\n\nupsert:\nINSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint)\nVALUES (:base_url, :name, :short_name, :website, :fingerprint)\nON CONFLICT(base_url)\nDO UPDATE\nSET\n    name = :name,\n    short_name = :short_name,\n    website =: website,\n    signing_key_fingerprint = :fingerprint\nWHERE base_url = base_url;\n\nreplace:\nINSERT INTO extension_repos(base_url, name, short_name, website, signing_key_fingerprint)\nVALUES (:base_url, :name, :short_name, :website, :fingerprint)\nON CONFLICT(signing_key_fingerprint)\nDO UPDATE\nSET\n    base_url = :base_url,\n    name = :name,\n    short_name = :short_name,\n    website =: website\nWHERE signing_key_fingerprint = signing_key_fingerprint;\n\ndelete:\nDELETE FROM extension_repos\nWHERE base_url = :base_url;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/113.sqm",
    "content": "UPDATE episodes\nSET date_upload = date_fetch\nWHERE date_upload = 0;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/114.sqm",
    "content": "DROP INDEX IF EXISTS episodes_anime_id_index;\nDROP INDEX IF EXISTS episodes_unseen_by_anime_index;\nDROP INDEX IF EXISTS animehistory_history_episode_id_index;\nDROP INDEX IF EXISTS library_favorite_index;\nDROP INDEX IF EXISTS animes_url_index;\n\nALTER TABLE animes RENAME TO anime_temp;\nCREATE TABLE animes(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    source INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    artist TEXT,\n    author TEXT,\n    description TEXT,\n    genre TEXT,\n    title TEXT NOT NULL,\n    status INTEGER NOT NULL,\n    thumbnail_url TEXT,\n    favorite INTEGER NOT NULL,\n    last_update INTEGER AS Long,\n    next_update INTEGER AS Long,\n    initialized INTEGER AS Boolean NOT NULL,\n    viewer INTEGER NOT NULL,\n    episode_flags INTEGER NOT NULL,\n    cover_last_modified INTEGER AS Long NOT NULL,\n    date_added INTEGER AS Long NOT NULL\n);\nINSERT INTO animes\nSELECT _id,source,url,artist,author,description,genre,title,status,thumbnail_url,favorite,last_update,next_update,initialized,viewer,episode_flags,cover_last_modified,date_added\nFROM anime_temp;\n\nALTER TABLE categories RENAME TO categories_temp;\nCREATE TABLE categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    sort INTEGER NOT NULL,\n    flags INTEGER NOT NULL\n);\nINSERT INTO categories\nSELECT _id,name,sort,flags\nFROM categories_temp;\n\nALTER TABLE episodes RENAME TO episodes_temp;\nCREATE TABLE episodes(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    anime_id INTEGER NOT NULL,\n    url TEXT NOT NULL,\n    name TEXT NOT NULL,\n    scanlator TEXT,\n    seen INTEGER AS Boolean NOT NULL,\n    bookmark INTEGER AS Boolean NOT NULL,\n    last_second_seen INTEGER NOT NULL,\n    total_seconds INTEGER NOT NULL,\n    episode_number REAL AS Float NOT NULL,\n    source_order INTEGER NOT NULL,\n    date_fetch INTEGER AS Long NOT NULL,\n    date_upload INTEGER AS Long NOT NULL,\n    FOREIGN KEY(anime_id) REFERENCES animes (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO episodes\nSELECT _id,anime_id,url,name,scanlator,seen,bookmark,last_second_seen,total_seconds,episode_number,source_order,date_fetch,date_upload\nFROM episodes_temp;\n\nALTER TABLE animehistory RENAME TO animehistory_temp;\nCREATE TABLE animehistory(\n    animehistory_id INTEGER NOT NULL PRIMARY KEY,\n    animehistory_episode_id INTEGER NOT NULL UNIQUE,\n    animehistory_last_seen INTEGER AS Long,\n    animehistory_time_seen INTEGER AS Long,\n    FOREIGN KEY(animehistory_episode_id) REFERENCES episodes (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO animehistory\nSELECT animehistory_id, animehistory_episode_id, animehistory_last_seen, animehistory_time_seen\nFROM animehistory_temp;\n\nALTER TABLE animes_categories RENAME TO animes_categories_temp;\nCREATE TABLE animes_categories(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    anime_id INTEGER NOT NULL,\n    category_id INTEGER NOT NULL,\n    FOREIGN KEY(category_id) REFERENCES categories (_id)\n    ON DELETE CASCADE,\n    FOREIGN KEY(anime_id) REFERENCES animes (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO animes_categories\nSELECT _id, anime_id, category_id\nFROM animes_categories_temp;\n\nALTER TABLE anime_sync RENAME TO anime_sync_temp;\nCREATE TABLE anime_sync(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    anime_id INTEGER NOT NULL,\n    sync_id INTEGER NOT NULL,\n    remote_id INTEGER NOT NULL,\n    library_id INTEGER,\n    title TEXT NOT NULL,\n    last_episode_seen REAL NOT NULL,\n    total_episodes INTEGER NOT NULL,\n    status INTEGER NOT NULL,\n    score REAL AS Float NOT NULL,\n    remote_url TEXT NOT NULL,\n    start_date INTEGER AS Long NOT NULL,\n    finish_date INTEGER AS Long NOT NULL,\n    UNIQUE (anime_id, sync_id) ON CONFLICT REPLACE,\n    FOREIGN KEY(anime_id) REFERENCES animes (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO anime_sync\nSELECT _id, anime_id, sync_id, remote_id, library_id, title, last_episode_seen, total_episodes, status, score, remote_url, start_date, finish_date\nFROM anime_sync_temp;\n\nCREATE INDEX episodes_anime_id_index ON episodes(anime_id);\nCREATE INDEX episodes_unseen_by_anime_index ON episodes(anime_id, seen) WHERE seen = 0;\nCREATE INDEX animehistory_history_episode_id_index ON animehistory(animehistory_episode_id);\nCREATE INDEX library_favorite_index ON animes(favorite) WHERE favorite = 1;\nCREATE INDEX animes_url_index ON animes(url);\n\nCREATE VIEW IF NOT EXISTS animehistoryView AS\nSELECT\nanimehistory.animehistory_id AS id,\nanimes._id AS animeId,\nepisodes._id AS episodeId,\nanimes.title,\nanimes.thumbnail_url AS thumbnailUrl,\nepisodes.episode_number AS episodeNumber,\nanimehistory.animehistory_last_seen AS seenAt,\nmax_last_seen.animehistory_last_seen AS maxSeenAt,\nmax_last_seen.history_episode_id AS maxSeenAtEpisodeId\nFROM animes\nJOIN episodes\nON animes._id = episodes.anime_id\nJOIN animehistory\nON episodes._id = animehistory.animehistory_episode_id\nJOIN (\nSELECT episodes.anime_id,episodes._id AS history_episode_id, MAX(animehistory.animehistory_last_seen) AS animehistory_last_seen\nFROM episodes JOIN animehistory\nON episodes._id = animehistory.animehistory_episode_id\nGROUP BY episodes.anime_id\n) AS max_last_seen\nON episodes.anime_id = max_last_seen.anime_id;\n\nDROP TABLE IF EXISTS anime_sync_temp;\nDROP TABLE IF EXISTS animes_categories_temp;\nDROP TABLE IF EXISTS animehistory_temp;\nDROP TABLE IF EXISTS episodes_temp;\nDROP TABLE IF EXISTS categories_temp;\nDROP TABLE IF EXISTS anime_temp;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/115.sqm",
    "content": "import java.util.Date;\n\nDROP INDEX IF EXISTS animehistory_history_episode_id_index;\nDROP VIEW IF EXISTS animehistoryView;\n\n/**\n *  [last_seen] was made not-null\n *  [time_seen] was removed\n *  `animehistory` prefix was removed from table name\n */\nALTER TABLE animehistory RENAME TO animehistory_temp;\nCREATE TABLE animehistory(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    episode_id INTEGER NOT NULL UNIQUE,\n    last_seen INTEGER AS Date NOT NULL,\n    FOREIGN KEY(episode_id) REFERENCES episodes (_id)\n    ON DELETE CASCADE\n);\nINSERT INTO animehistory\nSELECT animehistory_id, animehistory_episode_id, coalesce(animehistory_last_seen, 0)\nFROM animehistory_temp;\n\n/**\n *  [history.time_read] was added as a column in [historyView]\n */\nCREATE VIEW animehistoryView AS\nSELECT\n    animehistory._id AS id,\n    animes._id AS animeId,\n    episodes._id AS episodeId,\n    animes.title,\n    animes.thumbnail_url AS thumbnailUrl,\n    episodes.episode_number AS episodeNumber,\n    animehistory.last_seen AS seenAt,\n    max_last_seen.last_seen AS maxSeenAt,\n    max_last_seen.episode_id AS maxSeenAtEpisodeId\nFROM animes\nJOIN episodes\nON animes._id = episodes.anime_id\nJOIN animehistory\nON episodes._id = animehistory.episode_id\nJOIN (\n    SELECT episodes.anime_id,episodes._id AS episode_id, MAX(animehistory.last_seen) AS last_seen\n    FROM episodes JOIN animehistory\n    ON episodes._id = animehistory.episode_id\n    GROUP BY episodes.anime_id\n) AS max_last_seen\nON episodes.anime_id = max_last_seen.anime_id;\n\nCREATE INDEX animehistory_history_episode_id_index ON animehistory(episode_id);"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/116.sqm",
    "content": "DROP VIEW IF EXISTS animehistoryView;\n\n/**\n *  [animehistory.episode_number] had the wrong name.\n */\nCREATE VIEW animehistoryView AS\nSELECT\n    animehistory._id AS id,\n    animes._id AS animeId,\n    episodes._id AS episodeId,\n    animes.title,\n    animes.thumbnail_url AS thumbnailUrl,\n    episodes.episode_number AS episodeNumber,\n    animehistory.last_seen AS seenAt,\n    max_last_seen.last_seen AS maxSeenAt,\n    max_last_seen.episode_id AS maxSeenAtEpisodeId\nFROM animes\nJOIN episodes\nON animes._id = episodes.anime_id\nJOIN animehistory\nON episodes._id = animehistory.episode_id\nJOIN (\n    SELECT episodes.anime_id,episodes._id AS episode_id, MAX(animehistory.last_seen) AS last_seen\n    FROM episodes JOIN animehistory\n    ON episodes._id = animehistory.episode_id\n    GROUP BY episodes.anime_id\n) AS max_last_seen\nON episodes.anime_id = max_last_seen.anime_id;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/117.sqm",
    "content": "CREATE TABLE animesources(\n    _id INTEGER NOT NULL PRIMARY KEY,\n    lang TEXT NOT NULL,\n    name TEXT NOT NULL\n);"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/118.sqm",
    "content": "DROP VIEW IF EXISTS animehistoryView;\n\nCREATE VIEW animehistoryView AS\nSELECT\n    animehistory._id AS id,\n    animes._id AS animeId,\n    episodes._id AS episodeId,\n    animes.title,\n    animes.thumbnail_url AS thumbnailUrl,\n    animes.source,\n    animes.favorite,\n    animes.cover_last_modified,\n    episodes.episode_number AS episodeNumber,\n    animehistory.last_seen AS seenAt,\n    max_last_seen.last_seen AS maxSeenAt,\n    max_last_seen.episode_id AS maxSeenAtEpisodeId\nFROM animes\nJOIN episodes\nON animes._id = episodes.anime_id\nJOIN animehistory\nON episodes._id = animehistory.episode_id\nJOIN (\n    SELECT episodes.anime_id,episodes._id AS episode_id, MAX(animehistory.last_seen) AS last_seen\n    FROM episodes JOIN animehistory\n    ON episodes._id = animehistory.episode_id\n    GROUP BY episodes.anime_id\n) AS max_last_seen\nON episodes.anime_id = max_last_seen.anime_id;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/119.sqm",
    "content": "CREATE VIEW animeupdatesView AS\nSELECT\n    animes._id AS animeId,\n    animes.title AS animeTitle,\n    episodes._id AS episodeId,\n    episodes.name AS episodeName,\n    episodes.scanlator,\n    episodes.seen,\n    episodes.bookmark,\n    animes.source,\n    animes.favorite,\n    animes.thumbnail_url AS thumbnailUrl,\n    animes.cover_last_modified AS coverLastModified,\n    episodes.date_upload AS dateUpload,\n    episodes.date_fetch AS datefetch\nFROM animes JOIN episodes\nON animes._id = episodes.anime_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/120.sqm",
    "content": "-- Insert Default category\nINSERT OR IGNORE INTO categories(_id, name, sort, flags) VALUES (0, \"\", -1, 0);\n-- Disallow deletion of default category\nCREATE TRIGGER IF NOT EXISTS system_anime_category_delete_trigger BEFORE DELETE\nON categories\nBEGIN SELECT CASE\n    WHEN old._id <= 0 THEN\n        RAISE(ABORT, \"System category can't be deleted\")\n    END;\nEND;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/121.sqm",
    "content": "ALTER TABLE animes ADD COLUMN update_strategy INTEGER NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/122.sqm",
    "content": "DROP VIEW IF EXISTS animelibView;\n\nCREATE VIEW animelibView AS\nSELECT\n    A.*,\n    coalesce(E.total, 0) AS totalCount,\n    coalesce(E.seenCount, 0) AS seenCount,\n    coalesce(E.latestUpload, 0) AS latestUpload,\n    coalesce(E.fetchedAt, 0) AS episodeFetchedAt,\n    coalesce(E.lastSeen, 0) AS lastSeen,\n    coalesce(E.bookmarkCount, 0) AS bookmarkCount,\n    coalesce(AC.category_id, 0) AS category\nFROM animes A\nLEFT JOIN(\n    SELECT\n        episodes.anime_id,\n        count(*) AS total,\n        sum(seen) AS seenCount,\n        coalesce(max(episodes.date_upload), 0) AS latestUpload,\n        coalesce(max(animehistory.last_seen), 0) AS lastSeen,\n        coalesce(max(episodes.date_fetch), 0) AS fetchedAt,\n        sum(episodes.bookmark) AS bookmarkCount\n    FROM episodes\n    LEFT JOIN animehistory\n    ON episodes._id = animehistory.episode_id\n    GROUP BY episodes.anime_id\n) AS E\nON A._id = E.anime_id\nLEFT JOIN animes_categories AS AC\nON AC.anime_id = A._id\nWHERE A.favorite = 1;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/123.sqm",
    "content": "DROP VIEW IF EXISTS animeupdatesView;\n\nCREATE VIEW animeupdatesView AS\nSELECT\n    animes._id AS animeId,\n    animes.title AS animeTitle,\n    episodes._id AS episodeId,\n    episodes.name AS episodeName,\n    episodes.scanlator,\n    episodes.seen,\n    episodes.bookmark,\n    episodes.last_second_seen,\n    episodes.total_seconds AS totalSeconds,\n    animes.source,\n    animes.favorite,\n    animes.thumbnail_url AS thumbnailUrl,\n    animes.cover_last_modified AS coverLastModified,\n    episodes.date_upload AS dateUpload,\n    episodes.date_fetch AS datefetch\nFROM animes JOIN episodes\nON animes._id = episodes.anime_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/124.sqm",
    "content": "ALTER TABLE animes ADD COLUMN calculate_interval INTEGER DEFAULT 0 NOT NULL;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/125.sqm",
    "content": "ALTER TABLE categories ADD COLUMN hidden INTEGER DEFAULT 0 NOT NULL;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/126.sqm",
    "content": "ALTER TABLE animes ADD COLUMN last_modified_at INTEGER AS Long NOT NULL DEFAULT 0;\nALTER TABLE animes ADD COLUMN favorite_modified_at INTEGER AS Long;\nALTER TABLE animes_categories ADD COLUMN last_modified_at INTEGER AS Long NOT NULL DEFAULT 0;\nALTER TABLE episodes ADD COLUMN last_modified_at INTEGER AS Long NOT NULL DEFAULT 0;\n\nUPDATE animes SET last_modified_at = strftime('%s', 'now');\nUPDATE animes SET favorite_modified_at = strftime('%s', 'now') WHERE favorite = 1;\nUPDATE animes_categories SET last_modified_at = strftime('%s', 'now');\nUPDATE episodes SET last_modified_at = strftime('%s', 'now');\n\n-- Create triggers\nDROP TRIGGER IF EXISTS update_last_modified_at_animes;\nCREATE TRIGGER update_last_modified_at_animes\nAFTER UPDATE ON animes\nFOR EACH ROW\nBEGIN\n  UPDATE animes\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nDROP TRIGGER IF EXISTS update_favorite_modified_at_animes;\nCREATE TRIGGER update_last_favorited_at_animes\nAFTER UPDATE OF favorite ON animes\nBEGIN\n  UPDATE animes\n  SET favorite_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nDROP TRIGGER IF EXISTS update_last_modified_at_episodes;\nCREATE TRIGGER update_last_modified_at_episodes\nAFTER UPDATE ON episodes\nFOR EACH ROW\nBEGIN\n  UPDATE episodes\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;\n\nDROP TRIGGER IF EXISTS update_last_modified_at_animes_categories;\nCREATE TRIGGER update_last_modified_at_animes_categories\nAFTER UPDATE ON animes_categories\nFOR EACH ROW\nBEGIN\n  UPDATE animes_categories\n  SET last_modified_at = strftime('%s', 'now')\n  WHERE _id = new._id;\nEND;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/127.sqm",
    "content": "-- Animes table\nALTER TABLE animes ADD COLUMN version INTEGER NOT NULL DEFAULT 0;\nALTER TABLE animes ADD COLUMN is_syncing INTEGER NOT NULL DEFAULT 0;\n\n-- Episodes table\nALTER TABLE episodes ADD COLUMN version INTEGER NOT NULL DEFAULT 0;\nALTER TABLE episodes ADD COLUMN is_syncing INTEGER NOT NULL DEFAULT 0;\n\n-- Animes triggers\nDROP TRIGGER IF EXISTS update_anime_version;\nCREATE TRIGGER update_anime_version AFTER UPDATE ON animes\nBEGIN\n    UPDATE animes SET version = version + 1\n    WHERE _id = new._id AND new.is_syncing = 0 AND (\n        new.url != old.url OR\n        new.description != old.description OR\n        new.favorite != old.favorite\n    );\nEND;\n\n-- Episodes triggers\nDROP TRIGGER IF EXISTS update_episode_and_anime_version;\nCREATE TRIGGER update_episode_and_anime_version AFTER UPDATE ON episodes\nWHEN new.is_syncing = 0 AND (\n    new.seen != old.seen OR\n    new.bookmark != old.bookmark OR\n    new.last_second_seen != old.last_second_seen\n)\nBEGIN\n    -- Update the episode version\n    UPDATE episodes SET version = version + 1\n    WHERE _id = new._id;\n\n    -- Update the anime version\n    UPDATE animes SET version = version + 1\n    WHERE _id = new.anime_id AND (SELECT is_syncing FROM animes WHERE _id = new.anime_id) = 0;\nEND;\n\n-- anime_categories table\nDROP TRIGGER IF EXISTS insert_anime_category_update_version;\nCREATE TRIGGER insert_anime_category_update_version AFTER INSERT ON animes_categories\nBEGIN\n    UPDATE animes\n    SET version = version + 1\n    WHERE _id = new.anime_id AND (SELECT is_syncing FROM animes WHERE _id = new.anime_id) = 0;\nEND;"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/128.sqm",
    "content": "-- Create ExtensionRepo table --\nCREATE TABLE extension_repos (\n    base_url TEXT NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    short_name TEXT,\n    website TEXT NOT NULL,\n    signing_key_fingerprint TEXT UNIQUE NOT NULL\n);\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/129.sqm",
    "content": "-- Create CustomButtons table --\nCREATE TABLE custom_buttons (\n    _id INTEGER NOT NULL PRIMARY KEY,\n    name TEXT NOT NULL,\n    isFavorite INTEGER AS Boolean NOT NULL,\n    sortIndex INTEGER NOT NULL,\n    content TEXT NOT NULL,\n    longPressContent TEXT NOT NULL,\n    onStartup TEXT NOT NULL\n);\n\n-- Insert skip intro button --\nINSERT OR IGNORE INTO custom_buttons (_id, name, isFavorite, sortIndex, content, longPressContent, onStartup)\nVALUES (1, '+85 s', 1, 0, 'local intro_length = mp.get_property_number(\"user-data/current-anime/intro-length\")\naniyomi.right_seek_by(intro_length)', 'aniyomi.int_picker(\"Change intro length\", \"%ds\", 0, 255, 1, \"user-data/current-anime/intro-length\")', 'function update_button(_, length)\n  if length ~= nil then\n    if length == 0 then\n\t  aniyomi.hide_button()\n\t  return\n\telse\n\t  aniyomi.show_button()\n\tend\n    aniyomi.set_button_title(\"+\" .. length .. \" s\")\n  end\nend\n\nif $isPrimary then\n  mp.observe_property(\"user-data/current-anime/intro-length\", \"number\", update_button)\nend');\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/130.sqm",
    "content": "import kotlin.Boolean;\n\n-- Add private field for tracking\nALTER TABLE anime_sync ADD COLUMN private INTEGER AS Boolean DEFAULT 0 NOT NULL;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/131.sqm",
    "content": "-- Add fetch type column, all current entries are episodes\nALTER TABLE animes ADD COLUMN fetch_type INTEGER NOT NULL DEFAULT 1;\n\n-- Add parent id column\nALTER TABLE animes ADD COLUMN parent_id INTEGER;\n\n-- Add season flags column\nALTER TABLE animes ADD COLUMN season_flags INTEGER NOT NULL DEFAULT 0;\n\n-- Add season number column\nALTER TABLE animes ADD COLUMN season_number REAL NOT NULL DEFAULT -1.0;\n\n-- Add source order for seasons\nALTER TABLE animes ADD COLUMN season_source_order INTEGER NOT NULL DEFAULT 0;\n\n-- Create views\nDROP VIEW IF EXISTS episodestatsView;\nCREATE VIEW episodestatsView AS\nSELECT\n    e.anime_id,\n    count(*) AS total,\n    sum(seen) AS seenCount,\n    coalesce(max(e.date_upload), 0) AS latestUpload,\n    coalesce(max(e.date_fetch), 0) AS fetchedAt,\n    sum(e.bookmark) AS bookmarkCount\nFROM episodes e\nGROUP BY e.anime_id;\n\nDROP VIEW IF EXISTS animehistorystatsView;\nCREATE VIEW animehistorystatsView AS\nSELECT\n    e.anime_id,\n    max(eh.last_seen) AS lastSeen\nFROM episodes e\nLEFT JOIN animehistory AS eh ON e._id = eh.episode_id\nGROUP BY e.anime_id;\n\nDROP VIEW IF EXISTS animelibView;\nCREATE VIEW animelibView AS\nSELECT\n    A.*,\n    CASE A.fetch_type\n        WHEN 1 THEN coalesce(ESA.total, 0)\n        WHEN 0 THEN (SELECT count(*) FROM animes WHERE parent_id = A._id)\n    END AS totalCount,\n    CASE A.fetch_type\n        WHEN 1 THEN coalesce(ESA.seenCount, 0)\n        WHEN 0 THEN (\n            SELECT count(*)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = A._id\n              AND season.fetch_type = 1\n              AND coalesce(season_stats.total, 0) = coalesce(season_stats.seenCount, 0)\n        )\n    END AS seenCount,\n    CASE A.fetch_type\n        WHEN 1 THEN coalesce(ESA.latestUpload, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(max(season_stats.latestUpload), 0)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = A._id\n        )\n    END AS latestUpload,\n    CASE A.fetch_type\n        WHEN 1 THEN coalesce(ESA.fetchedAt, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(max(season_stats.fetchedAt), 0)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = A._id\n        )\n    END AS episodeFetchedAt,\n    CASE A.fetch_type\n        WHEN 1 THEN coalesce(AHSA.lastSeen, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(max(child_history.lastSeen), 0)\n            FROM animes season\n            LEFT JOIN animehistorystatsView child_history ON season._id = child_history.anime_id\n            WHERE season.parent_id = A._id\n        )\n    END AS lastSeen,\n    CASE A.fetch_type\n        WHEN 1 THEN coalesce(ESA.bookmarkCount, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(sum(season_stats.bookmarkCount), 0)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = A._id\n        )\n        ELSE 0\n    END AS bookmarkCount,\n    coalesce(MCA.category_id, 0) AS category\nFROM animes A\nLEFT JOIN episodestatsView AS ESA\nON A._id = ESA.anime_id\nLEFT JOIN animehistorystatsView AS AHSA\nON A._id = AHSA.anime_id\nLEFT JOIN animes_categories AS MCA\nON MCA.anime_id = A._id\nWHERE A.favorite = 1;\n\nDROP VIEW IF EXISTS animeseasonsView;\nCREATE VIEW animeseasonsView AS\nSELECT\n    SA.*,\n    CASE SA.fetch_type\n        WHEN 1 THEN coalesce(ESSA.total, 0)\n        WHEN 0 THEN (SELECT count(*) FROM animes WHERE parent_id = SA._id)\n    END AS totalCount,\n    CASE SA.fetch_type\n        WHEN 1 THEN coalesce(ESSA.seenCount, 0)\n        WHEN 0 THEN (\n            SELECT count(*)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = SA._id\n              AND season.fetch_type = 1\n              AND coalesce(season_stats.total, 0) = coalesce(season_stats.seenCount, 0)\n        )\n    END AS seenCount,\n    CASE SA.fetch_type\n        WHEN 1 THEN coalesce(ESSA.latestUpload, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(max(season_stats.latestUpload), 0)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = SA._id\n        )\n    END AS latestUpload,\n    CASE SA.fetch_type\n        WHEN 1 THEN coalesce(ESSA.fetchedAt, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(max(season_stats.fetchedAt), 0)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = SA._id\n        )\n    END AS episodeFetchedAt,\n    CASE SA.fetch_type\n        WHEN 1 THEN coalesce(AHSSA.lastSeen, 0)\n        WHEN 0 THEN (\n            SELECT coalesce(max(child_history.lastSeen), 0)\n            FROM animes season\n            LEFT JOIN animehistorystatsView child_history ON season._id = child_history.anime_id\n            WHERE season.parent_id = SA._id\n        )\n    END AS lastSeen,\n    CASE SA.fetch_type\n        WHEN 1 THEN coalesce(ESSA.bookmarkCount, 0)\n        WHEN 0 THEN (\n            SELECT sum(season_stats.bookmarkCount)\n            FROM animes season\n            LEFT JOIN episodestatsView season_stats ON season._id = season_stats.anime_id\n            WHERE season.parent_id = SA._id\n        )\n    END AS bookmarkCount\nFROM animes AS SA\nLEFT JOIN episodestatsView AS ESSA\nON SA._id = ESSA.anime_id\nLEFT JOIN animehistorystatsView AS AHSSA\nON SA._id = AHSSA.anime_id\nWHERE SA.parent_id IS NOT NULL;\n\n-- Create view for getting deletable anime\nDROP VIEW IF EXISTS animedeletableView;\nCREATE VIEW animedeletableView AS\nSELECT\n    A._id,\n    A.source,\n    A.fetch_type\nFROM animes AS A\nWHERE A.favorite = 0\nAND A.parent_id IS NULL;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/132.sqm",
    "content": "UPDATE animes\nSET fetch_type = CASE fetch_type\n    WHEN 2 THEN 1\n    WHEN 1 THEN 0\n    WHEN 0 THEN 1\nEND;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/133.sqm",
    "content": "DROP INDEX IF EXISTS animes_parent_id;\nDROP INDEX IF EXISTS animes_fetch_type;\nCREATE INDEX animes_parent_id ON animes(parent_id);\nCREATE INDEX animes_fetch_type ON animes(fetch_type);\n\nDROP VIEW IF EXISTS animeseasonstatsView;\nCREATE VIEW animeseasonstatsView AS\nSELECT\n    season.parent_id,\n    count(*) AS child_count,\n    sum(CASE WHEN season.fetch_type = 1 AND\n                 coalesce(ES.total, 0) = coalesce(ES.seenCount, 0)\n            THEN 1 ELSE 0 END) AS fully_seen_seasons,\n    max(coalesce(ES.latestUpload, 0)) AS max_latest_upload,\n    max(coalesce(ES.fetchedAt, 0)) AS max_fetched_at,\n    max(coalesce(AHS.lastSeen, 0)) AS max_last_seen,\n    sum(coalesce(ES.bookmarkCount, 0)) AS total_bookmarks\nFROM animes season\nLEFT JOIN episodestatsView ES ON season._id = ES.anime_id\nLEFT JOIN animehistorystatsView AHS ON season._id = AHS.anime_id\nWHERE season.parent_id IS NOT NULL\nGROUP BY season.parent_id;\n\nDROP VIEW IF EXISTS animelibView;\nCREATE VIEW animelibView AS\nSELECT\n    M.*,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.total, 0)\n        WHEN 0 THEN coalesce(ASS.child_count, 0)\n    END AS totalCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.seenCount, 0)\n        WHEN 0 THEN coalesce(ASS.fully_seen_seasons, 0)\n    END AS seenCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.latestUpload, 0)\n        WHEN 0 THEN coalesce(ASS.max_latest_upload, 0)\n    END AS latestUpload,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fetchedAt, 0)\n        WHEN 0 THEN coalesce(ASS.max_fetched_at, 0)\n    END AS episodeFetchedAt,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(AHS.lastSeen, 0)\n        WHEN 0 THEN coalesce(ASS.max_last_seen, 0)\n    END AS lastSeen,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.bookmarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_bookmarks, 0)\n    END AS bookmarkCount,\n    coalesce(MC.category_id, 0) AS category\nFROM animes M\nLEFT JOIN episodestatsView AS ES ON M._id = ES.anime_id\nLEFT JOIN animehistorystatsView AS AHS ON M._id = AHS.anime_id\nLEFT JOIN animes_categories AS MC ON MC.anime_id = M._id\nLEFT JOIN animeseasonstatsView AS ASS ON M._id = ASS.parent_id\nWHERE M.favorite = 1;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/134.sqm",
    "content": "import kotlin.Boolean;\n\nALTER TABLE episodes ADD COLUMN summary TEXT;\nALTER TABLE episodes ADD COLUMN preview_url TEXT;\nALTER TABLE episodes ADD COLUMN fillermark INTEGER AS Boolean DEFAULT 0 NOT NULL;\n\nALTER TABLE animes ADD COLUMN background_url TEXT;\nALTER TABLE animes ADD COLUMN background_last_modified INTEGER DEFAULT 0 NOT NULL;\n\nDROP VIEW IF EXISTS animeupdatesView;\nCREATE VIEW animeupdatesView AS\nSELECT\n    animes._id AS animeId,\n    animes.title AS animeTitle,\n    episodes._id AS episodeId,\n    episodes.name AS episodeName,\n    episodes.scanlator,\n    episodes.seen,\n    episodes.bookmark,\n    episodes.fillermark,\n    episodes.last_second_seen,\n    episodes.total_seconds AS totalSeconds,\n    animes.source,\n    animes.favorite,\n    animes.thumbnail_url AS thumbnailUrl,\n    animes.cover_last_modified AS coverLastModified,\n    episodes.date_upload AS dateUpload,\n    episodes.date_fetch AS datefetch\nFROM animes JOIN episodes\nON animes._id = episodes.anime_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;\n\nDROP VIEW IF EXISTS episodestatsView;\nCREATE VIEW episodestatsView AS\nSELECT\n    e.anime_id,\n    count(*) AS total,\n    sum(seen) AS seenCount,\n    coalesce(max(e.date_upload), 0) AS latestUpload,\n    coalesce(max(e.date_fetch), 0) AS fetchedAt,\n    sum(e.bookmark) AS bookmarkCount,\n    sum(e.fillermark) AS fillermarkCount\nFROM episodes e\nGROUP BY e.anime_id;\n\nDROP VIEW IF EXISTS animeseasonstatsView;\nCREATE VIEW animeseasonstatsView AS\nSELECT\n    season.parent_id,\n    count(*) AS child_count,\n    sum(CASE WHEN season.fetch_type = 1 AND\n                 coalesce(ES.total, 0) = coalesce(ES.seenCount, 0)\n            THEN 1 ELSE 0 END) AS fully_seen_seasons,\n    max(coalesce(ES.latestUpload, 0)) AS max_latest_upload,\n    max(coalesce(ES.fetchedAt, 0)) AS max_fetched_at,\n    max(coalesce(AHS.lastSeen, 0)) AS max_last_seen,\n    sum(coalesce(ES.bookmarkCount, 0)) AS total_bookmarks,\n    sum(coalesce(ES.fillermarkCount, 0)) AS total_fillermarks\nFROM animes season\nLEFT JOIN episodestatsView ES ON season._id = ES.anime_id\nLEFT JOIN animehistorystatsView AHS ON season._id = AHS.anime_id\nWHERE season.parent_id IS NOT NULL\nGROUP BY season.parent_id;\n\nDROP VIEW IF EXISTS animelibView;\nCREATE VIEW animelibView AS\nSELECT\n    M.*,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.total, 0)\n        WHEN 0 THEN coalesce(ASS.child_count, 0)\n    END AS totalCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.seenCount, 0)\n        WHEN 0 THEN coalesce(ASS.fully_seen_seasons, 0)\n    END AS seenCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.latestUpload, 0)\n        WHEN 0 THEN coalesce(ASS.max_latest_upload, 0)\n    END AS latestUpload,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fetchedAt, 0)\n        WHEN 0 THEN coalesce(ASS.max_fetched_at, 0)\n    END AS episodeFetchedAt,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(AHS.lastSeen, 0)\n        WHEN 0 THEN coalesce(ASS.max_last_seen, 0)\n    END AS lastSeen,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.bookmarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_bookmarks, 0)\n    END AS bookmarkCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fillermarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_fillermarks, 0)\n    END AS fillermarkCount,\n    coalesce(MC.category_id, 0) AS category\nFROM animes M\nLEFT JOIN episodestatsView AS ES ON M._id = ES.anime_id\nLEFT JOIN animehistorystatsView AS AHS ON M._id = AHS.anime_id\nLEFT JOIN animes_categories AS MC ON MC.anime_id = M._id\nLEFT JOIN animeseasonstatsView AS ASS ON M._id = ASS.parent_id\nWHERE M.favorite = 1;\n\nDROP VIEW IF EXISTS animeseasonsView;\nCREATE VIEW animeseasonsView AS\nSELECT\n    M.*,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.total, 0)\n        WHEN 0 THEN coalesce(ASS.child_count, 0)\n    END AS totalCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.seenCount, 0)\n        WHEN 0 THEN coalesce(ASS.fully_seen_seasons, 0)\n    END AS seenCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.latestUpload, 0)\n        WHEN 0 THEN coalesce(ASS.max_latest_upload, 0)\n    END AS latestUpload,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fetchedAt, 0)\n        WHEN 0 THEN coalesce(ASS.max_fetched_at, 0)\n    END AS episodeFetchedAt,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(AHS.lastSeen, 0)\n        WHEN 0 THEN coalesce(ASS.max_last_seen, 0)\n    END AS lastSeen,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.bookmarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_bookmarks, 0)\n    END AS bookmarkCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fillermarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_fillermarks, 0)\n    END AS fillermarkCount\nFROM animes AS M\nLEFT JOIN episodestatsView AS ES\nON M._id = ES.anime_id\nLEFT JOIN animehistorystatsView AS AHS\nON M._id = AHS.anime_id\nLEFT JOIN animeseasonstatsView AS ASS\nON M._id = ASS.parent_id\nWHERE M.parent_id IS NOT NULL;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/migrations/135.sqm",
    "content": "UPDATE animes\nSET fetch_type = 1;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animedeletableView.sq",
    "content": "CREATE VIEW animedeletableView AS\nSELECT\n    M._id,\n    M.source,\n    M.fetch_type\nFROM animes AS M\nWHERE M.favorite = 0\nAND M.parent_id IS NULL;\n\ngetDeletableParentAnime:\nSELECT *\nFROM animedeletableView;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animehistoryView.sq",
    "content": "CREATE VIEW animehistoryView AS\nSELECT\n    animehistory._id AS id,\n    animes._id AS animeId,\n    episodes._id AS episodeId,\n    animes.title,\n    animes.thumbnail_url AS thumbnailUrl,\n    animes.source,\n    animes.favorite,\n    animes.cover_last_modified,\n    episodes.episode_number AS episodeNumber,\n    animehistory.last_seen AS seenAt,\n    max_last_seen.last_seen AS maxSeenAt,\n    max_last_seen.episode_id AS maxSeenAtEpisodeId\nFROM animes\nJOIN episodes\nON animes._id = episodes.anime_id\nJOIN animehistory\nON episodes._id = animehistory.episode_id\nJOIN (\n    SELECT episodes.anime_id,episodes._id AS episode_id, MAX(animehistory.last_seen) AS last_seen\n    FROM episodes JOIN animehistory\n    ON episodes._id = animehistory.episode_id\n    GROUP BY episodes.anime_id\n) AS max_last_seen\nON episodes.anime_id = max_last_seen.anime_id;\n\nanimehistory:\nSELECT\nid,\nanimeId,\nepisodeId,\ntitle,\nthumbnailUrl,\nsource,\nfavorite,\ncover_last_modified,\nepisodeNumber,\nseenAt\nFROM animehistoryView\nWHERE animehistoryView.seenAt > 0\nAND maxSeenAtEpisodeId = animehistoryView.episodeId\nAND lower(animehistoryView.title) LIKE ('%' || :query || '%')\nORDER BY seenAt DESC;\n\ngetLatestAnimeHistory:\nSELECT\nid,\nanimeId,\nepisodeId,\ntitle,\nthumbnailUrl,\nsource,\nfavorite,\ncover_last_modified,\nepisodeNumber,\nseenAt\nFROM animehistoryView\nWHERE animehistoryView.seenAt > 0\nORDER BY seenAt DESC\nLIMIT 1;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animehistorystatsView.sq",
    "content": "CREATE VIEW animehistorystatsView AS\nSELECT\n    episodes.anime_id,\n    max(ah.last_seen) AS lastSeen\nFROM episodes\nLEFT JOIN animehistory AS ah ON episodes._id = ah.episode_id\nGROUP BY episodes.anime_id;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animelibView.sq",
    "content": "CREATE VIEW animelibView AS\nSELECT\n    M.*,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.total, 0)\n        WHEN 0 THEN coalesce(ASS.child_count, 0)\n    END AS totalCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.seenCount, 0)\n        WHEN 0 THEN coalesce(ASS.fully_seen_seasons, 0)\n    END AS seenCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.latestUpload, 0)\n        WHEN 0 THEN coalesce(ASS.max_latest_upload, 0)\n    END AS latestUpload,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fetchedAt, 0)\n        WHEN 0 THEN coalesce(ASS.max_fetched_at, 0)\n    END AS episodeFetchedAt,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(AHS.lastSeen, 0)\n        WHEN 0 THEN coalesce(ASS.max_last_seen, 0)\n    END AS lastSeen,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.bookmarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_bookmarks, 0)\n    END AS bookmarkCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fillermarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_fillermarks, 0)\n    END AS fillermarkCount,\n    coalesce(MC.category_id, 0) AS category\nFROM animes M\nLEFT JOIN episodestatsView AS ES ON M._id = ES.anime_id\nLEFT JOIN animehistorystatsView AS AHS ON M._id = AHS.anime_id\nLEFT JOIN animes_categories AS MC ON MC.anime_id = M._id\nLEFT JOIN animeseasonstatsView AS ASS ON M._id = ASS.parent_id\nWHERE M.favorite = 1;\n\nanimelib:\nSELECT *\nFROM animelibView;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animeseasonsView.sq",
    "content": "CREATE VIEW animeseasonsView AS\nSELECT\n    M.*,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.total, 0)\n        WHEN 0 THEN coalesce(ASS.child_count, 0)\n    END AS totalCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.seenCount, 0)\n        WHEN 0 THEN coalesce(ASS.fully_seen_seasons, 0)\n    END AS seenCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.latestUpload, 0)\n        WHEN 0 THEN coalesce(ASS.max_latest_upload, 0)\n    END AS latestUpload,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fetchedAt, 0)\n        WHEN 0 THEN coalesce(ASS.max_fetched_at, 0)\n    END AS episodeFetchedAt,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(AHS.lastSeen, 0)\n        WHEN 0 THEN coalesce(ASS.max_last_seen, 0)\n    END AS lastSeen,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.bookmarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_bookmarks, 0)\n    END AS bookmarkCount,\n    CASE M.fetch_type\n        WHEN 1 THEN coalesce(ES.fillermarkCount, 0)\n        WHEN 0 THEN coalesce(ASS.total_fillermarks, 0)\n    END AS fillermarkCount\nFROM animes AS M\nLEFT JOIN episodestatsView AS ES\nON M._id = ES.anime_id\nLEFT JOIN animehistorystatsView AS AHS\nON M._id = AHS.anime_id\nLEFT JOIN animeseasonstatsView AS ASS\nON M._id = ASS.parent_id\nWHERE M.parent_id IS NOT NULL;\n\ngetAnimeSeasonsById:\nSELECT *\nFROM animeseasonsView\nWHERE parent_id = :parentId;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animeseasonstatsView.sq",
    "content": "CREATE VIEW animeseasonstatsView AS\nSELECT\n    season.parent_id,\n    count(*) AS child_count,\n    sum(CASE WHEN season.fetch_type = 1 AND\n                 coalesce(ES.total, 0) = coalesce(ES.seenCount, 0)\n            THEN 1 ELSE 0 END) AS fully_seen_seasons,\n    max(coalesce(ES.latestUpload, 0)) AS max_latest_upload,\n    max(coalesce(ES.fetchedAt, 0)) AS max_fetched_at,\n    max(coalesce(AHS.lastSeen, 0)) AS max_last_seen,\n    sum(coalesce(ES.bookmarkCount, 0)) AS total_bookmarks,\n    sum(coalesce(ES.fillermarkCount, 0)) AS total_fillermarks\nFROM animes season\nLEFT JOIN episodestatsView ES ON season._id = ES.anime_id\nLEFT JOIN animehistorystatsView AHS ON season._id = AHS.anime_id\nWHERE season.parent_id IS NOT NULL\nGROUP BY season.parent_id;\n"
  },
  {
    "path": "data/src/main/sqldelightanime/view/animeupdatesView.sq",
    "content": "CREATE VIEW animeupdatesView AS\nSELECT\n    animes._id AS animeId,\n    animes.title AS animeTitle,\n    episodes._id AS episodeId,\n    episodes.name AS episodeName,\n    episodes.scanlator,\n    episodes.seen,\n    episodes.bookmark,\n    episodes.fillermark,\n    episodes.last_second_seen,\n    episodes.total_seconds AS totalSeconds,\n    animes.source,\n    animes.favorite,\n    animes.thumbnail_url AS thumbnailUrl,\n    animes.cover_last_modified AS coverLastModified,\n    episodes.date_upload AS dateUpload,\n    episodes.date_fetch AS datefetch\nFROM animes JOIN episodes\nON animes._id = episodes.anime_id\nWHERE favorite = 1\nAND date_fetch > date_added\nORDER BY date_fetch DESC;\n\ngetRecentAnimeUpdates:\nSELECT *\nFROM animeupdatesView\nWHERE dateUpload > :after\nLIMIT :limit;\n\ngetUpdatesBySeenStatus:\nSELECT *\nFROM animeupdatesView\nWHERE seen = :seen\nAND dateUpload > :after\n\nLIMIT :limit;"
  },
  {
    "path": "data/src/main/sqldelightanime/view/episodestatsView.sq",
    "content": "CREATE VIEW episodestatsView AS\nSELECT\n    episodes.anime_id,\n    count(*) AS total,\n    sum(seen) AS seenCount,\n    coalesce(max(episodes.date_upload), 0) AS latestUpload,\n    coalesce(max(episodes.date_fetch), 0) AS fetchedAt,\n    sum(episodes.bookmark) AS bookmarkCount,\n    sum(episodes.fillermark) AS fillermarkCount\nFROM episodes\nGROUP BY episodes.anime_id;\n"
  },
  {
    "path": "domain/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    kotlin(\"android\")\n    kotlin(\"plugin.serialization\")\n}\n\nandroid {\n    namespace = \"tachiyomi.domain\"\n\n    defaultConfig {\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n}\n\nkotlin {\n    compilerOptions {\n        freeCompilerArgs.add(\"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi\")\n    }\n}\n\ndependencies {\n    implementation(projects.sourceApi)\n    implementation(projects.core.common)\n\n    implementation(platform(kotlinx.coroutines.bom))\n    implementation(kotlinx.bundles.coroutines)\n    implementation(kotlinx.bundles.serialization)\n\n    implementation(libs.unifile)\n\n    api(libs.sqldelight.android.paging)\n\n    compileOnly(libs.compose.stablemarker)\n\n    testImplementation(libs.bundles.test)\n    testImplementation(kotlinx.coroutines.test)\n}\n"
  },
  {
    "path": "domain/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "domain/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "domain/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "domain/src/main/java/aniyomi/domain/anime/SeasonAnime.kt",
    "content": "package aniyomi.domain.anime\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.library.anime.LibraryAnime\n\ndata class SeasonAnime(\n    val anime: Anime,\n    val totalCount: Long,\n    val seenCount: Long,\n    val bookmarkCount: Long,\n    val fillermarkCount: Long,\n    val latestUpload: Long,\n    val fetchedAt: Long,\n    val lastSeen: Long,\n) {\n    val id: Long = anime.id\n\n    val seen\n        get() = totalCount == seenCount\n\n    val unseenCount\n        get() = totalCount - seenCount\n\n    val hasStarted = seenCount > 0\n\n    val hasBookmarks\n        get() = bookmarkCount > 0\n\n    val hasFillermarks\n        get() = fillermarkCount > 0\n\n    fun toLibraryAnime(): LibraryAnime {\n        return LibraryAnime(\n            anime = anime,\n            category = -1L,\n            totalCount = totalCount,\n            seenCount = seenCount,\n            bookmarkCount = bookmarkCount,\n            fillermarkCount = fillermarkCount,\n            latestUpload = latestUpload,\n            episodeFetchedAt = fetchedAt,\n            lastSeen = lastSeen,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/aniyomi/domain/anime/SeasonDisplayMode.kt",
    "content": "package aniyomi.domain.anime\n\nsealed interface SeasonDisplayMode {\n    data object CompactGrid : SeasonDisplayMode\n    data object ComfortableGrid : SeasonDisplayMode\n    data object CoverOnlyGrid : SeasonDisplayMode\n    data object List : SeasonDisplayMode\n\n    companion object {\n        fun toLong(value: SeasonDisplayMode): Long {\n            return when (value) {\n                CompactGrid -> 0L\n                ComfortableGrid -> 1L\n                CoverOnlyGrid -> 2L\n                List -> 3L\n            }\n        }\n\n        fun fromLong(value: Long): SeasonDisplayMode {\n            return when (value) {\n                0L -> CompactGrid\n                1L -> ComfortableGrid\n                2L -> CoverOnlyGrid\n                3L -> List\n                else -> throw IllegalArgumentException(\"Invalid sorting value\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/interactor/CreateAnimeExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.anime.interactor\n\nimport logcat.LogPriority\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.exception.SaveExtensionRepoException\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport mihon.domain.extensionrepo.service.ExtensionRepoService\nimport okhttp3.HttpUrl.Companion.toHttpUrlOrNull\nimport tachiyomi.core.common.util.system.logcat\n\nclass CreateAnimeExtensionRepo(\n    private val repository: AnimeExtensionRepoRepository,\n    private val service: ExtensionRepoService,\n) {\n    private val repoRegex = \"\"\"^https://.*/index\\.min\\.json$\"\"\".toRegex()\n\n    suspend fun await(indexUrl: String): Result {\n        val formattedIndexUrl = indexUrl.toHttpUrlOrNull()\n            ?.toString()\n            ?.takeIf { it.matches(repoRegex) }\n            ?: return Result.InvalidUrl\n\n        val baseUrl = formattedIndexUrl.removeSuffix(\"/index.min.json\")\n        return service.fetchRepoDetails(baseUrl)?.let { insert(it) } ?: Result.InvalidUrl\n    }\n\n    private suspend fun insert(repo: ExtensionRepo): Result {\n        return try {\n            repository.insertRepo(\n                repo.baseUrl,\n                repo.name,\n                repo.shortName,\n                repo.website,\n                repo.signingKeyFingerprint,\n            )\n            Result.Success\n        } catch (e: SaveExtensionRepoException) {\n            logcat(LogPriority.WARN, e) { \"SQL Conflict attempting to add new anime repository ${repo.baseUrl}\" }\n            return handleInsertionError(repo)\n        }\n    }\n\n    /**\n     * Error Handler for insert when there are trying to create new repositories\n     *\n     * SaveExtensionRepoException doesn't provide constraint info in exceptions.\n     * First check if the conflict was on primary key. if so return RepoAlreadyExists\n     * Then check if the conflict was on fingerprint. if so Return DuplicateFingerprint\n     * If neither are found, there was some other Error, and return Result.Error\n     *\n     * @param repo Extension Repo holder for passing to DB/Error Dialog\n     */\n    private suspend fun handleInsertionError(repo: ExtensionRepo): Result {\n        val repoExists = repository.getRepo(repo.baseUrl)\n        if (repoExists != null) {\n            return Result.RepoAlreadyExists\n        }\n        val matchingFingerprintRepo = repository.getRepoBySigningKeyFingerprint(repo.signingKeyFingerprint)\n        if (matchingFingerprintRepo != null) {\n            return Result.DuplicateFingerprint(matchingFingerprintRepo, repo)\n        }\n        return Result.Error\n    }\n\n    sealed interface Result {\n        data class DuplicateFingerprint(val oldRepo: ExtensionRepo, val newRepo: ExtensionRepo) : Result\n        data object InvalidUrl : Result\n        data object RepoAlreadyExists : Result\n        data object Success : Result\n        data object Error : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/interactor/DeleteAnimeExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.anime.interactor\n\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\n\nclass DeleteAnimeExtensionRepo(\n    private val repository: AnimeExtensionRepoRepository,\n) {\n    suspend fun await(baseUrl: String) {\n        repository.deleteRepo(baseUrl)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/interactor/GetAnimeExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\nclass GetAnimeExtensionRepo(\n    private val repository: AnimeExtensionRepoRepository,\n) {\n    fun subscribeAll(): Flow<List<ExtensionRepo>> = repository.subscribeAll()\n\n    suspend fun getAll(): List<ExtensionRepo> = repository.getAll()\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/interactor/GetAnimeExtensionRepoCount.kt",
    "content": "package mihon.domain.extensionrepo.anime.interactor\n\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\n\nclass GetAnimeExtensionRepoCount(\n    private val repository: AnimeExtensionRepoRepository,\n) {\n    fun subscribe() = repository.getCount()\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/interactor/ReplaceAnimeExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.anime.interactor\n\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\nclass ReplaceAnimeExtensionRepo(\n    private val repository: AnimeExtensionRepoRepository,\n) {\n    suspend fun await(repo: ExtensionRepo) {\n        repository.replaceRepo(repo)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/interactor/UpdateAnimeExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.anime.interactor\n\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport mihon.domain.extensionrepo.anime.repository.AnimeExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport mihon.domain.extensionrepo.service.ExtensionRepoService\n\nclass UpdateAnimeExtensionRepo(\n    private val repository: AnimeExtensionRepoRepository,\n    private val service: ExtensionRepoService,\n) {\n\n    suspend fun awaitAll() = coroutineScope {\n        repository.getAll()\n            .map { async { await(it) } }\n            .awaitAll()\n    }\n\n    suspend fun await(repo: ExtensionRepo) {\n        val newRepo = service.fetchRepoDetails(repo.baseUrl) ?: return\n        if (\n            repo.signingKeyFingerprint.startsWith(\"NOFINGERPRINT\") ||\n            repo.signingKeyFingerprint == newRepo.signingKeyFingerprint\n        ) {\n            repository.upsertRepo(newRepo)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/anime/repository/AnimeExtensionRepoRepository.kt",
    "content": "package mihon.domain.extensionrepo.anime.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\ninterface AnimeExtensionRepoRepository {\n\n    fun subscribeAll(): Flow<List<ExtensionRepo>>\n\n    suspend fun getAll(): List<ExtensionRepo>\n\n    suspend fun getRepo(baseUrl: String): ExtensionRepo?\n\n    suspend fun getRepoBySigningKeyFingerprint(fingerprint: String): ExtensionRepo?\n\n    fun getCount(): Flow<Int>\n\n    suspend fun insertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    )\n\n    suspend fun upsertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    )\n\n    suspend fun upsertRepo(repo: ExtensionRepo) {\n        upsertRepo(\n            baseUrl = repo.baseUrl,\n            name = repo.name,\n            shortName = repo.shortName,\n            website = repo.website,\n            signingKeyFingerprint = repo.signingKeyFingerprint,\n        )\n    }\n\n    suspend fun replaceRepo(newRepo: ExtensionRepo)\n\n    suspend fun deleteRepo(baseUrl: String)\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/exception/SaveExtensionRepoException.kt",
    "content": "package mihon.domain.extensionrepo.exception\n\nimport java.io.IOException\n\n/**\n * Exception to abstract over SQLiteException and SQLiteConstraintException for multiplatform.\n *\n * @param throwable the source throwable to include for tracing.\n */\nclass SaveExtensionRepoException(throwable: Throwable) : IOException(\"Error Saving Repository to Database\", throwable)\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/interactor/CreateMangaExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.manga.interactor\n\nimport logcat.LogPriority\nimport mihon.domain.extensionrepo.exception.SaveExtensionRepoException\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport mihon.domain.extensionrepo.service.ExtensionRepoService\nimport okhttp3.HttpUrl.Companion.toHttpUrlOrNull\nimport tachiyomi.core.common.util.system.logcat\n\nclass CreateMangaExtensionRepo(\n    private val repository: MangaExtensionRepoRepository,\n    private val service: ExtensionRepoService,\n) {\n    private val repoRegex = \"\"\"^https://.*/index\\.min\\.json$\"\"\".toRegex()\n\n    suspend fun await(indexUrl: String): Result {\n        val formattedIndexUrl = indexUrl.toHttpUrlOrNull()\n            ?.toString()\n            ?.takeIf { it.matches(repoRegex) }\n            ?: return Result.InvalidUrl\n\n        val baseUrl = formattedIndexUrl.removeSuffix(\"/index.min.json\")\n        return service.fetchRepoDetails(baseUrl)?.let { insert(it) } ?: Result.InvalidUrl\n    }\n\n    private suspend fun insert(repo: ExtensionRepo): Result {\n        return try {\n            repository.insertRepo(\n                repo.baseUrl,\n                repo.name,\n                repo.shortName,\n                repo.website,\n                repo.signingKeyFingerprint,\n            )\n            Result.Success\n        } catch (e: SaveExtensionRepoException) {\n            logcat(LogPriority.WARN, e) { \"SQL Conflict attempting to add new manga repository ${repo.baseUrl}\" }\n            return handleInsertionError(repo)\n        }\n    }\n\n    /**\n     * Error Handler for insert when there are trying to create new repositories\n     *\n     * SaveExtensionRepoException doesn't provide constraint info in exceptions.\n     * First check if the conflict was on primary key. if so return RepoAlreadyExists\n     * Then check if the conflict was on fingerprint. if so Return DuplicateFingerprint\n     * If neither are found, there was some other Error, and return Result.Error\n     *\n     * @param repo Extension Repo holder for passing to DB/Error Dialog\n     */\n    private suspend fun handleInsertionError(repo: ExtensionRepo): Result {\n        val repoExists = repository.getRepo(repo.baseUrl)\n        if (repoExists != null) {\n            return Result.RepoAlreadyExists\n        }\n        val matchingFingerprintRepo = repository.getRepoBySigningKeyFingerprint(repo.signingKeyFingerprint)\n        if (matchingFingerprintRepo != null) {\n            return Result.DuplicateFingerprint(matchingFingerprintRepo, repo)\n        }\n        return Result.Error\n    }\n\n    sealed interface Result {\n        data class DuplicateFingerprint(val oldRepo: ExtensionRepo, val newRepo: ExtensionRepo) : Result\n        data object InvalidUrl : Result\n        data object RepoAlreadyExists : Result\n        data object Success : Result\n        data object Error : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/interactor/DeleteMangaExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.manga.interactor\n\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\n\nclass DeleteMangaExtensionRepo(\n    private val repository: MangaExtensionRepoRepository,\n) {\n    suspend fun await(baseUrl: String) {\n        repository.deleteRepo(baseUrl)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/interactor/GetMangaExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\nclass GetMangaExtensionRepo(\n    private val repository: MangaExtensionRepoRepository,\n) {\n    fun subscribeAll(): Flow<List<ExtensionRepo>> = repository.subscribeAll()\n\n    suspend fun getAll(): List<ExtensionRepo> = repository.getAll()\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/interactor/GetMangaExtensionRepoCount.kt",
    "content": "package mihon.domain.extensionrepo.manga.interactor\n\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\n\nclass GetMangaExtensionRepoCount(\n    private val repository: MangaExtensionRepoRepository,\n) {\n    fun subscribe() = repository.getCount()\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/interactor/ReplaceMangaExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.manga.interactor\n\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\nclass ReplaceMangaExtensionRepo(\n    private val repository: MangaExtensionRepoRepository,\n) {\n    suspend fun await(repo: ExtensionRepo) {\n        repository.replaceRepo(repo)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/interactor/UpdateMangaExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.manga.interactor\n\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport mihon.domain.extensionrepo.manga.repository.MangaExtensionRepoRepository\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport mihon.domain.extensionrepo.service.ExtensionRepoService\n\nclass UpdateMangaExtensionRepo(\n    private val repository: MangaExtensionRepoRepository,\n    private val service: ExtensionRepoService,\n) {\n\n    suspend fun awaitAll() = coroutineScope {\n        repository.getAll()\n            .map { async { await(it) } }\n            .awaitAll()\n    }\n\n    suspend fun await(repo: ExtensionRepo) {\n        val newRepo = service.fetchRepoDetails(repo.baseUrl) ?: return\n        if (\n            repo.signingKeyFingerprint.startsWith(\"NOFINGERPRINT\") ||\n            repo.signingKeyFingerprint == newRepo.signingKeyFingerprint\n        ) {\n            repository.upsertRepo(newRepo)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/manga/repository/MangaExtensionRepoRepository.kt",
    "content": "package mihon.domain.extensionrepo.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\ninterface MangaExtensionRepoRepository {\n\n    fun subscribeAll(): Flow<List<ExtensionRepo>>\n\n    suspend fun getAll(): List<ExtensionRepo>\n\n    suspend fun getRepo(baseUrl: String): ExtensionRepo?\n\n    suspend fun getRepoBySigningKeyFingerprint(fingerprint: String): ExtensionRepo?\n\n    fun getCount(): Flow<Int>\n\n    suspend fun insertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    )\n\n    suspend fun upsertRepo(\n        baseUrl: String,\n        name: String,\n        shortName: String?,\n        website: String,\n        signingKeyFingerprint: String,\n    )\n\n    suspend fun upsertRepo(repo: ExtensionRepo) {\n        upsertRepo(\n            baseUrl = repo.baseUrl,\n            name = repo.name,\n            shortName = repo.shortName,\n            website = repo.website,\n            signingKeyFingerprint = repo.signingKeyFingerprint,\n        )\n    }\n\n    suspend fun replaceRepo(newRepo: ExtensionRepo)\n\n    suspend fun deleteRepo(baseUrl: String)\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/model/ExtensionRepo.kt",
    "content": "package mihon.domain.extensionrepo.model\n\ndata class ExtensionRepo(\n    val baseUrl: String,\n    val name: String,\n    val shortName: String?,\n    val website: String,\n    val signingKeyFingerprint: String,\n)\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/service/ExtensionRepoDto.kt",
    "content": "package mihon.domain.extensionrepo.service\n\nimport kotlinx.serialization.Serializable\nimport mihon.domain.extensionrepo.model.ExtensionRepo\n\n@Serializable\ndata class ExtensionRepoMetaDto(\n    val meta: ExtensionRepoDto,\n)\n\n@Serializable\ndata class ExtensionRepoDto(\n    val name: String,\n    val shortName: String?,\n    val website: String,\n    val signingKeyFingerprint: String,\n)\n\nfun ExtensionRepoMetaDto.toExtensionRepo(baseUrl: String): ExtensionRepo {\n    return ExtensionRepo(\n        baseUrl = baseUrl,\n        name = meta.name,\n        shortName = meta.shortName,\n        website = meta.website,\n        signingKeyFingerprint = meta.signingKeyFingerprint,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/extensionrepo/service/ExtensionRepoService.kt",
    "content": "package mihon.domain.extensionrepo.service\n\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.parseAs\nimport kotlinx.serialization.json.Json\nimport logcat.LogPriority\nimport mihon.domain.extensionrepo.model.ExtensionRepo\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\n\nclass ExtensionRepoService(\n    networkHelper: NetworkHelper,\n    private val json: Json,\n) {\n    val client = networkHelper.client\n\n    suspend fun fetchRepoDetails(\n        repo: String,\n    ): ExtensionRepo? {\n        return withIOContext {\n            try {\n                with(json) {\n                    client.newCall(GET(\"$repo/repo.json\"))\n                        .awaitSuccess()\n                        .parseAs<ExtensionRepoMetaDto>()\n                        .toExtensionRepo(baseUrl = repo)\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e) { \"Failed to fetch repo details\" }\n                null\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/items/chapter/interactor/FilterChaptersForDownload.kt",
    "content": "package mihon.domain.items.chapter.interactor\n\nimport tachiyomi.domain.category.manga.interactor.GetMangaCategories\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.model.Chapter\n\n/**\n * Interactor responsible for determining which chapters of a manga should be downloaded.\n *\n * @property getChaptersByMangaId Interactor for retrieving chapters by manga ID.\n * @property downloadPreferences User preferences related to chapter downloads.\n * @property getCategories Interactor for retrieving categories associated with a manga.\n */\nclass FilterChaptersForDownload(\n    private val getChaptersByMangaId: GetChaptersByMangaId,\n    private val downloadPreferences: DownloadPreferences,\n    private val getCategories: GetMangaCategories,\n) {\n\n    /**\n     * Determines which chapters of a manga should be downloaded based on user preferences.\n     *\n     * @param manga The manga for which chapters may be downloaded.\n     * @param newChapters The list of new chapters available for the manga.\n     * @return A list of chapters that should be downloaded\n     */\n    suspend fun await(manga: Manga, newChapters: List<Chapter>): List<Chapter> {\n        if (\n            newChapters.isEmpty() ||\n            !downloadPreferences.downloadNewChapters().get() ||\n            !manga.shouldDownloadNewChapters()\n        ) {\n            return emptyList()\n        }\n        if (!downloadPreferences.downloadNewUnreadChaptersOnly().get()) return newChapters\n        val readChapterNumbers = getChaptersByMangaId.await(manga.id)\n            .asSequence()\n            .filter { it.read && it.isRecognizedNumber }\n            .map { it.chapterNumber }\n            .toSet()\n        return newChapters.filterNot { it.chapterNumber in readChapterNumbers }\n    }\n\n    /**\n     * Determines whether new chapters should be downloaded for the manga based on user preferences and the\n     * categories to which the manga belongs.\n     *\n     * @return `true` if chapters of the manga should be downloaded\n     */\n    private suspend fun Manga.shouldDownloadNewChapters(): Boolean {\n        if (!favorite) return false\n        val categories = getCategories.await(id).map { it.id }.ifEmpty { listOf(DEFAULT_CATEGORY_ID) }\n        val includedCategories = downloadPreferences.downloadNewChapterCategories().get().map { it.toLong() }\n        val excludedCategories = downloadPreferences.downloadNewChapterCategoriesExclude().get().map { it.toLong() }\n        return when {\n            // Default Download from all categories\n            includedCategories.isEmpty() && excludedCategories.isEmpty() -> true\n            // In excluded category\n            categories.any { it in excludedCategories } -> false\n            // Included category not selected\n            includedCategories.isEmpty() -> true\n            // In included category\n            else -> categories.any { it in includedCategories }\n        }\n    }\n\n    companion object {\n        private const val DEFAULT_CATEGORY_ID = 0L\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/items/episode/interactor/FilterEpisodesForDownload.kt",
    "content": "package mihon.domain.items.episode.interactor\n\nimport tachiyomi.domain.category.anime.interactor.GetAnimeCategories\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.model.Episode\n\n/**\n * Interactor responsible for determining which episode of an anime should be downloaded.\n *\n * @property getEpisodesByAnimeId Interactor for retrieving episodes by anime ID.\n * @property downloadPreferences User preferences related to episode downloads.\n * @property getCategories Interactor for retrieving categories associated with an anime.\n */\nclass FilterEpisodesForDownload(\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId,\n    private val downloadPreferences: DownloadPreferences,\n    private val getCategories: GetAnimeCategories,\n) {\n\n    /**\n     * Determines which episodes of an anime should be downloaded based on user preferences.\n     *\n     * @param anime The anime for which episodes may be downloaded.\n     * @param newEpisodes The list of new episodes available for the anime.\n     * @return A list of episodes that should be downloaded\n     */\n    suspend fun await(anime: Anime, newEpisodes: List<Episode>): List<Episode> {\n        if (\n            newEpisodes.isEmpty() ||\n            !downloadPreferences.downloadNewEpisodes().get() ||\n            !anime.shouldDownloadNewEpisodes()\n        ) {\n            return emptyList()\n        }\n        if (!downloadPreferences.downloadNewUnseenEpisodesOnly().get()) return newEpisodes\n        val seenEpisodeNumbers = getEpisodesByAnimeId.await(anime.id)\n            .asSequence()\n            .filter { it.seen && it.isRecognizedNumber }\n            .map { it.episodeNumber }\n            .toSet()\n        return newEpisodes.filterNot { it.episodeNumber in seenEpisodeNumbers }\n    }\n\n    /**\n     * Determines whether new episodes should be downloaded for the anime based on user preferences and the\n     * categories to which the anime belongs.\n     *\n     * @return `true` if episodes of the anime should be downloaded\n     */\n    private suspend fun Anime.shouldDownloadNewEpisodes(): Boolean {\n        if (!favorite) return false\n        val categories = getCategories.await(id).map { it.id }.ifEmpty { listOf(DEFAULT_CATEGORY_ID) }\n        val includedCategories = downloadPreferences.downloadNewEpisodeCategories().get().map { it.toLong() }\n        val excludedCategories = downloadPreferences.downloadNewEpisodeCategoriesExclude().get().map { it.toLong() }\n        return when {\n            // Default Download from all categories\n            includedCategories.isEmpty() && excludedCategories.isEmpty() -> true\n            // In excluded category\n            categories.any { it in excludedCategories } -> false\n            // Included category not selected\n            includedCategories.isEmpty() -> true\n            // In included category\n            else -> categories.any { it in includedCategories }\n        }\n    }\n\n    companion object {\n        private const val DEFAULT_CATEGORY_ID = 0L\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/upcoming/anime/interactor/GetUpcomingAnime.kt",
    "content": "package mihon.domain.upcoming.anime.interactor\n\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass GetUpcomingAnime(\n    private val animeRepository: AnimeRepository,\n) {\n\n    private val includedStatuses = setOf(\n        SAnime.ONGOING.toLong(),\n        SAnime.PUBLISHING_FINISHED.toLong(),\n    )\n\n    suspend fun subscribe(): Flow<List<Anime>> {\n        return animeRepository.getUpcomingAnime(includedStatuses)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/mihon/domain/upcoming/manga/interactor/GetUpcomingManga.kt",
    "content": "package mihon.domain.upcoming.manga.interactor\n\nimport eu.kanade.tachiyomi.source.model.SManga\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass GetUpcomingManga(\n    private val mangaRepository: MangaRepository,\n) {\n\n    private val includedStatuses = setOf(\n        SManga.ONGOING.toLong(),\n        SManga.PUBLISHING_FINISHED.toLong(),\n    )\n\n    suspend fun subscribe(): Flow<List<Manga>> {\n        return mangaRepository.getUpcomingManga(includedStatuses)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/backup/service/BackupPreferences.kt",
    "content": "package tachiyomi.domain.backup.service\n\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass BackupPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun backupInterval() = preferenceStore.getInt(\"backup_interval\", 12)\n\n    fun lastAutoBackupTimestamp() = preferenceStore.getLong(Preference.appStateKey(\"last_auto_backup_timestamp\"), 0L)\n\n    fun backupFlags() = preferenceStore.getStringSet(\n        \"backup_flags\",\n        setOf(FLAG_CATEGORIES, FLAG_CHAPTERS, FLAG_HISTORY, FLAG_TRACK),\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/backup/service/PreferenceValues.kt",
    "content": "package tachiyomi.domain.backup.service\n\nconst val FLAG_CATEGORIES = \"1\"\nconst val FLAG_CHAPTERS = \"2\"\nconst val FLAG_HISTORY = \"4\"\nconst val FLAG_TRACK = \"8\"\nconst val FLAG_SETTINGS = \"10\"\nconst val FLAG_EXT_SETTINGS = \"20\"\nconst val FLAG_EXTENSIONS = \"40\"\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/CreateAnimeCategoryWithName.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass CreateAnimeCategoryWithName(\n    private val categoryRepository: AnimeCategoryRepository,\n    private val preferences: LibraryPreferences,\n) {\n\n    private val initialFlags: Long\n        get() {\n            val sort = preferences.animeSortingMode().get()\n            return sort.type.flag or sort.direction.flag\n        }\n\n    suspend fun await(name: String): Result = withNonCancellableContext {\n        val categories = categoryRepository.getAllAnimeCategories()\n        val nextOrder = categories.maxOfOrNull { it.order }?.plus(1) ?: 0\n        val newCategory = Category(\n            id = 0,\n            name = name,\n            order = nextOrder,\n            flags = initialFlags,\n            hidden = false,\n        )\n\n        try {\n            categoryRepository.insertAnimeCategory(newCategory)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/DeleteAnimeCategory.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.CategoryUpdate\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass DeleteAnimeCategory(\n    private val categoryRepository: AnimeCategoryRepository,\n    private val libraryPreferences: LibraryPreferences,\n    private val downloadPreferences: DownloadPreferences,\n) {\n\n    suspend fun await(categoryId: Long) = withNonCancellableContext {\n        try {\n            categoryRepository.deleteAnimeCategory(categoryId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            return@withNonCancellableContext Result.InternalError(e)\n        }\n\n        val categories = categoryRepository.getAllAnimeCategories()\n        val updates = categories.mapIndexed { index, category ->\n            CategoryUpdate(\n                id = category.id,\n                order = index.toLong(),\n            )\n        }\n\n        val defaultCategory = libraryPreferences.defaultAnimeCategory().get()\n        if (defaultCategory == categoryId.toInt()) {\n            libraryPreferences.defaultAnimeCategory().delete()\n        }\n\n        val categoryPreferences = listOf(\n            libraryPreferences.animeUpdateCategories(),\n            libraryPreferences.animeUpdateCategoriesExclude(),\n            downloadPreferences.removeExcludeAnimeCategories(),\n            downloadPreferences.downloadNewEpisodeCategories(),\n            downloadPreferences.downloadNewEpisodeCategoriesExclude(),\n        )\n        val categoryIdString = categoryId.toString()\n        categoryPreferences.forEach { preference ->\n            val ids = preference.get()\n            if (categoryIdString !in ids) return@forEach\n            preference.set(ids.minus(categoryIdString))\n        }\n\n        try {\n            categoryRepository.updatePartialAnimeCategories(updates)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/GetAnimeCategories.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\n\nclass GetAnimeCategories(\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    fun subscribe(): Flow<List<Category>> {\n        return categoryRepository.getAllAnimeCategoriesAsFlow()\n    }\n\n    fun subscribe(animeId: Long): Flow<List<Category>> {\n        return categoryRepository.getCategoriesByAnimeIdAsFlow(animeId)\n    }\n\n    suspend fun await(): List<Category> {\n        return categoryRepository.getAllAnimeCategories()\n    }\n\n    suspend fun await(animeId: Long): List<Category> {\n        return categoryRepository.getCategoriesByAnimeId(animeId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/GetVisibleAnimeCategories.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\n\nclass GetVisibleAnimeCategories(\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n    fun subscribe(): Flow<List<Category>> {\n        return categoryRepository.getAllVisibleAnimeCategoriesAsFlow()\n    }\n\n    fun subscribe(animeId: Long): Flow<List<Category>> {\n        return categoryRepository.getVisibleCategoriesByAnimeIdAsFlow(animeId)\n    }\n\n    suspend fun await(): List<Category> {\n        return categoryRepository.getAllVisibleAnimeCategories()\n    }\n\n    suspend fun await(animeId: Long): List<Category> {\n        return categoryRepository.getVisibleCategoriesByAnimeId(animeId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/HideAnimeCategory.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass HideAnimeCategory(\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    suspend fun await(category: Category) = withNonCancellableContext {\n        val update = CategoryUpdate(\n            id = category.id,\n            hidden = !category.hidden,\n        )\n\n        try {\n            categoryRepository.updatePartialAnimeCategory(update)\n            RenameAnimeCategory.Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed class Result {\n        data object Success : Result()\n        data class InternalError(val error: Throwable) : Result()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/RenameAnimeCategory.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass RenameAnimeCategory(\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    suspend fun await(categoryId: Long, name: String) = withNonCancellableContext {\n        val update = CategoryUpdate(\n            id = categoryId,\n            name = name,\n        )\n\n        try {\n            categoryRepository.updatePartialAnimeCategory(update)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    suspend fun await(category: Category, name: String) = await(category.id, name)\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/ReorderAnimeCategory.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass ReorderAnimeCategory(\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    private val mutex = Mutex()\n\n    suspend fun await(category: Category, newIndex: Int) = withNonCancellableContext {\n        mutex.withLock {\n            val categories = categoryRepository.getAllAnimeCategories()\n                .filterNot(Category::isSystemCategory)\n                .toMutableList()\n\n            val currentIndex = categories.indexOfFirst { it.id == category.id }\n            if (currentIndex == -1) {\n                return@withNonCancellableContext Result.Unchanged\n            }\n\n            try {\n                categories.add(newIndex, categories.removeAt(currentIndex))\n\n                val updates = categories.mapIndexed { index, category ->\n                    CategoryUpdate(\n                        id = category.id,\n                        order = index.toLong(),\n                    )\n                }\n\n                categoryRepository.updatePartialAnimeCategories(updates)\n                Result.Success\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e)\n                Result.InternalError(e)\n            }\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data object Unchanged : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/ResetAnimeCategoryFlags.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.library.model.plus\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass ResetAnimeCategoryFlags(\n    private val preferences: LibraryPreferences,\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    suspend fun await() {\n        val sort = preferences.animeSortingMode().get()\n        categoryRepository.updateAllAnimeCategoryFlags(sort.type + sort.direction)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/SetAnimeCategories.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass SetAnimeCategories(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun await(animeId: Long, categoryIds: List<Long>) {\n        try {\n            animeRepository.setAnimeCategories(animeId, categoryIds)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/SetAnimeDisplayMode.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass SetAnimeDisplayMode(\n    private val preferences: LibraryPreferences,\n) {\n\n    fun await(display: LibraryDisplayMode) {\n        preferences.displayMode().set(display)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/SetSortModeForAnimeCategory.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\nimport tachiyomi.domain.library.anime.model.AnimeLibrarySort\nimport tachiyomi.domain.library.model.plus\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport kotlin.random.Random\n\nclass SetSortModeForAnimeCategory(\n    private val preferences: LibraryPreferences,\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    suspend fun await(\n        categoryId: Long?,\n        type: AnimeLibrarySort.Type,\n        direction: AnimeLibrarySort.Direction,\n    ) {\n        val category = categoryId?.let { categoryRepository.getAnimeCategory(it) }\n        val flags = (category?.flags ?: 0) + type + direction\n        if (type == AnimeLibrarySort.Type.Random) {\n            preferences.randomAnimeSortSeed().set(Random.nextInt())\n        }\n        if (category != null && preferences.categorizedDisplaySettings().get()) {\n            categoryRepository.updatePartialAnimeCategory(\n                CategoryUpdate(\n                    id = category.id,\n                    flags = flags,\n                ),\n            )\n        } else {\n            preferences.animeSortingMode().set(AnimeLibrarySort(type, direction))\n            categoryRepository.updateAllAnimeCategoryFlags(flags)\n        }\n    }\n\n    suspend fun await(\n        category: Category?,\n        type: AnimeLibrarySort.Type,\n        direction: AnimeLibrarySort.Direction,\n    ) {\n        await(category?.id, type, direction)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/interactor/UpdateAnimeCategory.kt",
    "content": "package tachiyomi.domain.category.anime.interactor\n\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.category.anime.repository.AnimeCategoryRepository\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass UpdateAnimeCategory(\n    private val categoryRepository: AnimeCategoryRepository,\n) {\n\n    suspend fun await(payload: CategoryUpdate): Result = withNonCancellableContext {\n        try {\n            categoryRepository.updatePartialAnimeCategory(payload)\n            Result.Success\n        } catch (e: Exception) {\n            Result.Error(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class Error(val error: Exception) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/anime/repository/AnimeCategoryRepository.kt",
    "content": "package tachiyomi.domain.category.anime.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\ninterface AnimeCategoryRepository {\n\n    suspend fun getAnimeCategory(id: Long): Category?\n\n    suspend fun getAllAnimeCategories(): List<Category>\n\n    suspend fun getAllVisibleAnimeCategories(): List<Category>\n\n    fun getAllAnimeCategoriesAsFlow(): Flow<List<Category>>\n\n    fun getAllVisibleAnimeCategoriesAsFlow(): Flow<List<Category>>\n\n    suspend fun getCategoriesByAnimeId(animeId: Long): List<Category>\n\n    suspend fun getVisibleCategoriesByAnimeId(animeId: Long): List<Category>\n\n    fun getCategoriesByAnimeIdAsFlow(animeId: Long): Flow<List<Category>>\n\n    fun getVisibleCategoriesByAnimeIdAsFlow(animeId: Long): Flow<List<Category>>\n\n    suspend fun insertAnimeCategory(category: Category)\n\n    suspend fun updatePartialAnimeCategory(update: CategoryUpdate)\n\n    suspend fun updatePartialAnimeCategories(updates: List<CategoryUpdate>)\n\n    suspend fun updateAllAnimeCategoryFlags(flags: Long?)\n\n    suspend fun deleteAnimeCategory(categoryId: Long)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/CreateMangaCategoryWithName.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass CreateMangaCategoryWithName(\n    private val categoryRepository: MangaCategoryRepository,\n    private val preferences: LibraryPreferences,\n) {\n\n    private val initialFlags: Long\n        get() {\n            val sort = preferences.mangaSortingMode().get()\n            return sort.type.flag or sort.direction.flag\n        }\n\n    suspend fun await(name: String): Result = withNonCancellableContext {\n        val categories = categoryRepository.getAllMangaCategories()\n        val nextOrder = categories.maxOfOrNull { it.order }?.plus(1) ?: 0\n        val newCategory = Category(\n            id = 0,\n            name = name,\n            order = nextOrder,\n            flags = initialFlags,\n            hidden = false,\n        )\n\n        try {\n            categoryRepository.insertMangaCategory(newCategory)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/DeleteMangaCategory.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.CategoryUpdate\nimport tachiyomi.domain.download.service.DownloadPreferences\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass DeleteMangaCategory(\n    private val categoryRepository: MangaCategoryRepository,\n    private val libraryPreferences: LibraryPreferences,\n    private val downloadPreferences: DownloadPreferences,\n) {\n\n    suspend fun await(categoryId: Long) = withNonCancellableContext {\n        try {\n            categoryRepository.deleteMangaCategory(categoryId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            return@withNonCancellableContext Result.InternalError(e)\n        }\n\n        val categories = categoryRepository.getAllMangaCategories()\n        val updates = categories.mapIndexed { index, category ->\n            CategoryUpdate(\n                id = category.id,\n                order = index.toLong(),\n            )\n        }\n\n        val defaultCategory = libraryPreferences.defaultMangaCategory().get()\n        if (defaultCategory == categoryId.toInt()) {\n            libraryPreferences.defaultMangaCategory().delete()\n        }\n\n        val categoryPreferences = listOf(\n            libraryPreferences.mangaUpdateCategories(),\n            libraryPreferences.mangaUpdateCategories(),\n            downloadPreferences.removeExcludeCategories(),\n            downloadPreferences.downloadNewChapterCategories(),\n            downloadPreferences.downloadNewChapterCategoriesExclude(),\n        )\n        val categoryIdString = categoryId.toString()\n        categoryPreferences.forEach { preference ->\n            val ids = preference.get()\n            if (categoryIdString !in ids) return@forEach\n            preference.set(ids.minus(categoryIdString))\n        }\n\n        try {\n            categoryRepository.updatePartialMangaCategories(updates)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/GetMangaCategories.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\n\nclass GetMangaCategories(\n    private val categoryRepository: MangaCategoryRepository,\n) {\n    fun subscribe(): Flow<List<Category>> {\n        return categoryRepository.getAllMangaCategoriesAsFlow()\n    }\n\n    fun subscribe(mangaId: Long): Flow<List<Category>> {\n        return categoryRepository.getCategoriesByMangaIdAsFlow(mangaId)\n    }\n\n    suspend fun await(): List<Category> {\n        return categoryRepository.getAllMangaCategories()\n    }\n\n    suspend fun await(mangaId: Long): List<Category> {\n        return categoryRepository.getCategoriesByMangaId(mangaId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/GetVisibleMangaCategories.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\n\nclass GetVisibleMangaCategories(\n    private val categoryRepository: MangaCategoryRepository,\n) {\n    fun subscribe(): Flow<List<Category>> {\n        return categoryRepository.getAllVisibleMangaCategoriesAsFlow()\n    }\n\n    fun subscribe(mangaId: Long): Flow<List<Category>> {\n        return categoryRepository.getVisibleCategoriesByMangaIdAsFlow(mangaId)\n    }\n\n    suspend fun await(): List<Category> {\n        return categoryRepository.getAllVisibleMangaCategories()\n    }\n\n    suspend fun await(mangaId: Long): List<Category> {\n        return categoryRepository.getVisibleCategoriesByMangaId(mangaId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/HideMangaCategory.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass HideMangaCategory(\n    private val categoryRepository: MangaCategoryRepository,\n) {\n\n    suspend fun await(category: Category) = withNonCancellableContext {\n        val update = CategoryUpdate(\n            id = category.id,\n            hidden = !category.hidden,\n        )\n\n        try {\n            categoryRepository.updatePartialMangaCategory(update)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed class Result {\n        data object Success : Result()\n        data class InternalError(val error: Throwable) : Result()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/RenameMangaCategory.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass RenameMangaCategory(\n    private val categoryRepository: MangaCategoryRepository,\n) {\n\n    suspend fun await(categoryId: Long, name: String) = withNonCancellableContext {\n        val update = CategoryUpdate(\n            id = categoryId,\n            name = name,\n        )\n\n        try {\n            categoryRepository.updatePartialMangaCategory(update)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    suspend fun await(category: Category, name: String) = await(category.id, name)\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/ReorderMangaCategory.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass ReorderMangaCategory(\n    private val categoryRepository: MangaCategoryRepository,\n) {\n\n    private val mutex = Mutex()\n\n    suspend fun await(category: Category, newIndex: Int) = withNonCancellableContext {\n        mutex.withLock {\n            val categories = categoryRepository.getAllMangaCategories()\n                .filterNot(Category::isSystemCategory)\n                .toMutableList()\n\n            val currentIndex = categories.indexOfFirst { it.id == category.id }\n            if (currentIndex == -1) {\n                return@withNonCancellableContext Result.Unchanged\n            }\n\n            try {\n                categories.add(newIndex, categories.removeAt(currentIndex))\n\n                val updates = categories.mapIndexed { index, category ->\n                    CategoryUpdate(\n                        id = category.id,\n                        order = index.toLong(),\n                    )\n                }\n\n                categoryRepository.updatePartialMangaCategories(updates)\n                Result.Success\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e)\n                Result.InternalError(e)\n            }\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data object Unchanged : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/ResetMangaCategoryFlags.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.library.model.plus\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass ResetMangaCategoryFlags(\n    private val preferences: LibraryPreferences,\n    private val categoryRepository: MangaCategoryRepository,\n) {\n\n    suspend fun await() {\n        val sort = preferences.mangaSortingMode().get()\n        categoryRepository.updateAllMangaCategoryFlags(sort.type + sort.direction)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/SetMangaCategories.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass SetMangaCategories(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(mangaId: Long, categoryIds: List<Long>) {\n        try {\n            mangaRepository.setMangaCategories(mangaId, categoryIds)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/SetMangaDisplayMode.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport tachiyomi.domain.library.model.LibraryDisplayMode\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass SetMangaDisplayMode(\n    private val preferences: LibraryPreferences,\n) {\n\n    fun await(display: LibraryDisplayMode) {\n        preferences.displayMode().set(display)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/SetSortModeForMangaCategory.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\nimport tachiyomi.domain.library.manga.model.MangaLibrarySort\nimport tachiyomi.domain.library.model.plus\nimport tachiyomi.domain.library.service.LibraryPreferences\nimport kotlin.random.Random\n\nclass SetSortModeForMangaCategory(\n    private val preferences: LibraryPreferences,\n    private val categoryRepository: MangaCategoryRepository,\n) {\n\n    suspend fun await(\n        categoryId: Long?,\n        type: MangaLibrarySort.Type,\n        direction: MangaLibrarySort.Direction,\n    ) {\n        val category = categoryId?.let { categoryRepository.getMangaCategory(it) }\n        val flags = (category?.flags ?: 0) + type + direction\n        if (type == MangaLibrarySort.Type.Random) {\n            preferences.randomMangaSortSeed().set(Random.nextInt())\n        }\n        if (category != null && preferences.categorizedDisplaySettings().get()) {\n            categoryRepository.updatePartialMangaCategory(\n                CategoryUpdate(\n                    id = category.id,\n                    flags = flags,\n                ),\n            )\n        } else {\n            preferences.mangaSortingMode().set(MangaLibrarySort(type, direction))\n            categoryRepository.updateAllMangaCategoryFlags(flags)\n        }\n    }\n\n    suspend fun await(\n        category: Category?,\n        type: MangaLibrarySort.Type,\n        direction: MangaLibrarySort.Direction,\n    ) {\n        await(category?.id, type, direction)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/interactor/UpdateMangaCategory.kt",
    "content": "package tachiyomi.domain.category.manga.interactor\n\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.category.manga.repository.MangaCategoryRepository\nimport tachiyomi.domain.category.model.CategoryUpdate\n\nclass UpdateMangaCategory(\n    private val categoryRepository: MangaCategoryRepository,\n) {\n\n    suspend fun await(payload: CategoryUpdate): Result = withNonCancellableContext {\n        try {\n            categoryRepository.updatePartialMangaCategory(payload)\n            Result.Success\n        } catch (e: Exception) {\n            Result.Error(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class Error(val error: Exception) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/manga/repository/MangaCategoryRepository.kt",
    "content": "package tachiyomi.domain.category.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.category.model.CategoryUpdate\n\ninterface MangaCategoryRepository {\n\n    suspend fun getMangaCategory(id: Long): Category?\n\n    suspend fun getAllMangaCategories(): List<Category>\n\n    suspend fun getAllVisibleMangaCategories(): List<Category>\n\n    fun getAllMangaCategoriesAsFlow(): Flow<List<Category>>\n\n    fun getAllVisibleMangaCategoriesAsFlow(): Flow<List<Category>>\n\n    suspend fun getCategoriesByMangaId(mangaId: Long): List<Category>\n\n    suspend fun getVisibleCategoriesByMangaId(mangaId: Long): List<Category>\n\n    fun getCategoriesByMangaIdAsFlow(mangaId: Long): Flow<List<Category>>\n\n    fun getVisibleCategoriesByMangaIdAsFlow(mangaId: Long): Flow<List<Category>>\n\n    suspend fun insertMangaCategory(category: Category)\n\n    suspend fun updatePartialMangaCategory(update: CategoryUpdate)\n\n    suspend fun updatePartialMangaCategories(updates: List<CategoryUpdate>)\n\n    suspend fun updateAllMangaCategoryFlags(flags: Long?)\n\n    suspend fun deleteMangaCategory(categoryId: Long)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/model/Category.kt",
    "content": "package tachiyomi.domain.category.model\n\nimport java.io.Serializable\n\ndata class Category(\n    val id: Long,\n    val name: String,\n    val order: Long,\n    val flags: Long,\n    val hidden: Boolean,\n) : Serializable {\n\n    val isSystemCategory: Boolean = id == UNCATEGORIZED_ID\n\n    companion object {\n        const val UNCATEGORIZED_ID = 0L\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/category/model/CategoryUpdate.kt",
    "content": "package tachiyomi.domain.category.model\n\ndata class CategoryUpdate(\n    val id: Long,\n    val name: String? = null,\n    val order: Long? = null,\n    val flags: Long? = null,\n    val hidden: Boolean? = null,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/exception/SaveCustomButtonException.kt",
    "content": "package tachiyomi.domain.custombuttons.exception\n\nimport java.io.IOException\n\n/**\n * Exception to abstract over SQLiteException and SQLiteConstraintException for multiplatform.\n *\n * @param throwable the source throwable to include for tracing.\n */\nclass SaveCustomButtonException(throwable: Throwable) : IOException(\"Error Saving Custom Button to Database\", throwable)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/interactor/CreateCustomButton.kt",
    "content": "package tachiyomi.domain.custombuttons.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\n\nclass CreateCustomButton(\n    private val customButtonRepository: CustomButtonRepository,\n) {\n    suspend fun await(\n        name: String,\n        content: String,\n        longPressContent: String,\n        onStartup: String,\n    ): Result = withNonCancellableContext {\n        val customButtons = customButtonRepository.getAll()\n        val nextSortIndex = customButtons.maxOfOrNull { it.sortIndex }?.plus(1) ?: 0\n\n        try {\n            customButtonRepository.insertCustomButton(\n                name = name,\n                sortIndex = nextSortIndex,\n                content = content,\n                longPressContent = longPressContent,\n                onStartup = onStartup,\n            )\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/interactor/DeleteCustomButton.kt",
    "content": "package tachiyomi.domain.custombuttons.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\n\nclass DeleteCustomButton(\n    private val customButtonRepository: CustomButtonRepository,\n) {\n    suspend fun await(customButtonId: Long) = withNonCancellableContext {\n        try {\n            customButtonRepository.deleteCustomButton(customButtonId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            return@withNonCancellableContext Result.InternalError(e)\n        }\n\n        val customButtons = customButtonRepository.getAll()\n        val updates = customButtons.mapIndexed { index, customButton ->\n            CustomButtonUpdate(\n                id = customButton.id,\n                sortIndex = index.toLong(),\n            )\n        }\n\n        try {\n            customButtonRepository.updatePartialCustomButtons(updates)\n            Result.Success\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/interactor/GetCustomButtons.kt",
    "content": "package tachiyomi.domain.custombuttons.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\n\nclass GetCustomButtons(\n    private val customButtonRepository: CustomButtonRepository,\n) {\n    fun subscribeAll(): Flow<List<CustomButton>> {\n        return customButtonRepository.subscribeAll()\n    }\n\n    suspend fun getAll(): List<CustomButton> {\n        return customButtonRepository.getAll()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/interactor/ReorderCustomButton.kt",
    "content": "package tachiyomi.domain.custombuttons.interactor\n\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\n\nclass ReorderCustomButton(\n    private val customButtonRepository: CustomButtonRepository,\n) {\n    private val mutex = Mutex()\n\n    suspend fun changeOrder(customButton: CustomButton, newIndex: Int) = withNonCancellableContext {\n        mutex.withLock {\n            val customButtons = customButtonRepository.getAll()\n                .toMutableList()\n\n            val currentIndex = customButtons.indexOfFirst { it.id == customButton.id }\n            if (currentIndex == -1) {\n                return@withNonCancellableContext Result.Unchanged\n            }\n\n            try {\n                customButtons.add(newIndex, customButtons.removeAt(currentIndex))\n\n                val updates = customButtons.mapIndexed { index, customButton ->\n                    CustomButtonUpdate(\n                        id = customButton.id,\n                        sortIndex = index.toLong(),\n                    )\n                }\n\n                customButtonRepository.updatePartialCustomButtons(updates)\n                Result.Success\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR, e)\n                Result.InternalError(e)\n            }\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data object Unchanged : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/interactor/ToggleFavoriteCustomButton.kt",
    "content": "package tachiyomi.domain.custombuttons.interactor\n\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\n\nclass ToggleFavoriteCustomButton(\n    private val customButtonRepository: CustomButtonRepository,\n) {\n    private val mutex = Mutex()\n\n    suspend fun await(customButton: CustomButton) = withNonCancellableContext {\n        try {\n            if (customButton.isFavorite) {\n                val update = CustomButtonUpdate(\n                    id = customButton.id,\n                    isFavorite = false,\n                )\n                customButtonRepository.updatePartialCustomButton(update)\n                Result.Success\n            } else {\n                mutex.withLock {\n                    val customButtons = customButtonRepository.getAll()\n                        .toMutableList()\n                    val updates = customButtons.map { btn ->\n                        CustomButtonUpdate(\n                            id = btn.id,\n                            isFavorite = btn.id == customButton.id,\n                        )\n                    }\n                    customButtonRepository.updatePartialCustomButtons(updates)\n                    Result.Success\n                }\n            }\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/interactor/UpdateCustomButton.kt",
    "content": "package tachiyomi.domain.custombuttons.interactor\n\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\nimport tachiyomi.domain.custombuttons.repository.CustomButtonRepository\n\nclass UpdateCustomButton(\n    private val customButtonRepository: CustomButtonRepository,\n) {\n    suspend fun await(update: CustomButtonUpdate) = withNonCancellableContext {\n        try {\n            customButtonRepository.updatePartialCustomButton(update)\n        } catch (e: Exception) {\n            Result.InternalError(e)\n        }\n    }\n\n    suspend fun await(updates: List<CustomButtonUpdate>) = withNonCancellableContext {\n        try {\n            customButtonRepository.updatePartialCustomButtons(updates)\n            Result.Success\n        } catch (e: Exception) {\n            Result.InternalError(e)\n        }\n    }\n\n    sealed interface Result {\n        data object Success : Result\n        data class InternalError(val error: Throwable) : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/model/CustomButton.kt",
    "content": "package tachiyomi.domain.custombuttons.model\n\ndata class CustomButton(\n    val id: Long,\n    val name: String,\n    val isFavorite: Boolean,\n    val sortIndex: Long,\n    val content: String,\n    val longPressContent: String,\n    val onStartup: String,\n) {\n    fun getButtonContent(primaryId: Long): String {\n        val isPrimary = if (primaryId == id) \"true\" else \"false\"\n        return content.replace(\"${'$'}id\", id.toString()).replace(\"${'$'}isPrimary\", isPrimary)\n    }\n\n    fun getButtonLongPressContent(primaryId: Long): String {\n        val isPrimary = if (primaryId == id) \"true\" else \"false\"\n        return longPressContent.replace(\"${'$'}id\", id.toString()).replace(\"${'$'}isPrimary\", isPrimary)\n    }\n\n    fun getButtonOnStartup(primaryId: Long): String {\n        val isPrimary = if (primaryId == id) \"true\" else \"false\"\n        return onStartup.replace(\"${'$'}id\", id.toString()).replace(\"${'$'}isPrimary\", isPrimary)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/model/CustomButtonUpdate.kt",
    "content": "package tachiyomi.domain.custombuttons.model\n\ndata class CustomButtonUpdate(\n    val id: Long,\n    val name: String? = null,\n    val isFavorite: Boolean? = null,\n    val sortIndex: Long? = null,\n    val content: String? = null,\n    val longPressContent: String? = null,\n    val onStartup: String? = null,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/custombuttons/repository/CustomButtonRepository.kt",
    "content": "package tachiyomi.domain.custombuttons.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.custombuttons.model.CustomButton\nimport tachiyomi.domain.custombuttons.model.CustomButtonUpdate\n\ninterface CustomButtonRepository {\n\n    fun subscribeAll(): Flow<List<CustomButton>>\n\n    suspend fun getAll(): List<CustomButton>\n\n    suspend fun insertCustomButton(\n        name: String,\n        sortIndex: Long,\n        content: String,\n        longPressContent: String,\n        onStartup: String,\n    )\n\n    suspend fun updatePartialCustomButton(update: CustomButtonUpdate)\n\n    suspend fun updatePartialCustomButtons(updates: List<CustomButtonUpdate>)\n\n    suspend fun deleteCustomButton(customButtonId: Long)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt",
    "content": "package tachiyomi.domain.download.service\n\nimport tachiyomi.core.common.preference.PreferenceStore\n\nclass DownloadPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun downloadOnlyOverWifi() = preferenceStore.getBoolean(\n        \"pref_download_only_over_wifi_key\",\n        true,\n    )\n\n    fun useExternalDownloader() = preferenceStore.getBoolean(\"use_external_downloader\", false)\n\n    fun externalDownloaderSelection() = preferenceStore.getString(\n        \"external_downloader_selection\",\n        \"\",\n    )\n\n    fun saveChaptersAsCBZ() = preferenceStore.getBoolean(\"save_chapter_as_cbz\", true)\n\n    fun splitTallImages() = preferenceStore.getBoolean(\"split_tall_images\", true)\n\n    fun autoDownloadWhileReading() = preferenceStore.getInt(\"auto_download_while_reading\", 0)\n    fun autoDownloadWhileWatching() = preferenceStore.getInt(\"auto_download_while_watching\", 0)\n\n    fun removeAfterReadSlots() = preferenceStore.getInt(\"remove_after_read_slots\", -1)\n\n    fun removeAfterMarkedAsRead() = preferenceStore.getBoolean(\n        \"pref_remove_after_marked_as_read_key\",\n        false,\n    )\n\n    fun removeBookmarkedChapters() = preferenceStore.getBoolean(\"pref_remove_bookmarked\", false)\n\n    fun downloadFillermarkedItems() = preferenceStore.getBoolean(\"pref_download_fillermarked\", false)\n\n    fun removeExcludeCategories() = preferenceStore.getStringSet(\n        REMOVE_EXCLUDE_MANGA_CATEGORIES_PREF_KEY,\n        emptySet(),\n    )\n    fun removeExcludeAnimeCategories() = preferenceStore.getStringSet(\n        REMOVE_EXCLUDE_ANIME_CATEGORIES_PREF_KEY,\n        emptySet(),\n    )\n\n    fun downloadNewChapters() = preferenceStore.getBoolean(\"download_new\", false)\n    fun downloadNewEpisodes() = preferenceStore.getBoolean(\"download_new_episode\", false)\n\n    fun downloadNewChapterCategories() = preferenceStore.getStringSet(\n        DOWNLOAD_NEW_MANGA_CATEGORIES_PREF_KEY,\n        emptySet(),\n    )\n    fun downloadNewEpisodeCategories() = preferenceStore.getStringSet(\n        DOWNLOAD_NEW_ANIME_CATEGORIES_PREF_KEY,\n        emptySet(),\n    )\n\n    fun downloadNewChapterCategoriesExclude() = preferenceStore.getStringSet(\n        DOWNLOAD_NEW_MANGA_CATEGORIES_EXCLUDE_PREF_KEY,\n        emptySet(),\n    )\n    fun downloadNewEpisodeCategoriesExclude() = preferenceStore.getStringSet(\n        DOWNLOAD_NEW_ANIME_CATEGORIES_EXCLUDE_PREF_KEY,\n        emptySet(),\n    )\n\n    fun numberOfDownloads() = preferenceStore.getInt(\"download_slots\", 1)\n    fun downloadSpeedLimit() = preferenceStore.getInt(\"download_speed_limit\", 0)\n\n    fun downloadNewUnreadChaptersOnly() = preferenceStore.getBoolean(\"download_new_unread_chapters_only\", false)\n    fun downloadNewUnseenEpisodesOnly() = preferenceStore.getBoolean(\"download_new_unread_episodes_only\", false)\n\n    companion object {\n        private const val REMOVE_EXCLUDE_MANGA_CATEGORIES_PREF_KEY = \"remove_exclude_categories\"\n        private const val REMOVE_EXCLUDE_ANIME_CATEGORIES_PREF_KEY = \"remove_exclude_anime_categories\"\n        private const val DOWNLOAD_NEW_MANGA_CATEGORIES_PREF_KEY = \"download_new_categories\"\n        private const val DOWNLOAD_NEW_ANIME_CATEGORIES_PREF_KEY = \"download_new_anime_categories\"\n        private const val DOWNLOAD_NEW_MANGA_CATEGORIES_EXCLUDE_PREF_KEY = \"download_new_categories_exclude\"\n        private const val DOWNLOAD_NEW_ANIME_CATEGORIES_EXCLUDE_PREF_KEY = \"download_new_anime_categories_exclude\"\n\n        val categoryPreferenceKeys = setOf(\n            REMOVE_EXCLUDE_MANGA_CATEGORIES_PREF_KEY,\n            REMOVE_EXCLUDE_ANIME_CATEGORIES_PREF_KEY,\n            DOWNLOAD_NEW_MANGA_CATEGORIES_PREF_KEY,\n            DOWNLOAD_NEW_ANIME_CATEGORIES_PREF_KEY,\n            DOWNLOAD_NEW_MANGA_CATEGORIES_EXCLUDE_PREF_KEY,\n            DOWNLOAD_NEW_ANIME_CATEGORIES_EXCLUDE_PREF_KEY,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/EntryCover.kt",
    "content": "package tachiyomi.domain.entries\n\ninterface EntryCover\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/TriState.kt",
    "content": "package tachiyomi.domain.entries\n\nimport tachiyomi.core.common.preference.TriState\n\ninline fun applyFilter(filter: TriState, predicate: () -> Boolean): Boolean = when (filter) {\n    TriState.DISABLED -> true\n    TriState.ENABLED_IS -> predicate()\n    TriState.ENABLED_NOT -> !predicate()\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/AnimeFetchInterval.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.model.Episode\nimport java.time.Instant\nimport java.time.ZoneId\nimport java.time.ZonedDateTime\nimport java.time.temporal.ChronoUnit\nimport kotlin.math.absoluteValue\n\nclass AnimeFetchInterval(\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId,\n) {\n\n    suspend fun toAnimeUpdate(\n        anime: Anime,\n        dateTime: ZonedDateTime,\n        window: Pair<Long, Long>,\n    ): AnimeUpdate {\n        val interval = anime.fetchInterval.takeIf { it < 0 } ?: calculateInterval(\n            episodes = getEpisodesByAnimeId.await(anime.id),\n            zone = dateTime.zone,\n        )\n        val currentWindow = if (window.first == 0L && window.second == 0L) {\n            getWindow(ZonedDateTime.now())\n        } else {\n            window\n        }\n        val nextUpdate = calculateNextUpdate(anime, interval, dateTime, currentWindow)\n\n        return AnimeUpdate(id = anime.id, nextUpdate = nextUpdate, fetchInterval = interval)\n    }\n\n    fun getWindow(dateTime: ZonedDateTime): Pair<Long, Long> {\n        val today = dateTime.toLocalDate().atStartOfDay(dateTime.zone)\n        val lowerBound = today.minusDays(GRACE_PERIOD)\n        val upperBound = today.plusDays(GRACE_PERIOD)\n        return Pair(lowerBound.toEpochSecond() * 1000, upperBound.toEpochSecond() * 1000 - 1)\n    }\n\n    internal fun calculateInterval(episodes: List<Episode>, zone: ZoneId): Int {\n        val episodeWindow = if (episodes.size <= 8) 3 else 10\n\n        val uploadDates = episodes.asSequence()\n            .filter { it.dateUpload > 0L }\n            .sortedByDescending { it.dateUpload }\n            .map {\n                ZonedDateTime.ofInstant(Instant.ofEpochMilli(it.dateUpload), zone)\n                    .toLocalDate()\n                    .atStartOfDay()\n            }\n            .distinct()\n            .take(episodeWindow)\n            .toList()\n\n        val fetchDates = episodes.asSequence()\n            .sortedByDescending { it.dateFetch }\n            .map {\n                ZonedDateTime.ofInstant(Instant.ofEpochMilli(it.dateFetch), zone)\n                    .toLocalDate()\n                    .atStartOfDay()\n            }\n            .distinct()\n            .take(episodeWindow)\n            .toList()\n\n        val interval = when {\n            // Enough upload date from source\n            uploadDates.size >= 3 -> {\n                val uploadDelta = uploadDates.last().until(uploadDates.first(), ChronoUnit.DAYS)\n                val uploadPeriod = uploadDates.indexOf(uploadDates.last())\n                uploadDelta.floorDiv(uploadPeriod).toInt()\n            }\n            // Enough fetch date from client\n            fetchDates.size >= 3 -> {\n                val fetchDelta = fetchDates.last().until(fetchDates.first(), ChronoUnit.DAYS)\n                val uploadPeriod = fetchDates.indexOf(fetchDates.last())\n                fetchDelta.floorDiv(uploadPeriod).toInt()\n            }\n            // Default to 7 days\n            else -> 7\n        }\n\n        return interval.coerceIn(1, MAX_INTERVAL)\n    }\n\n    private fun calculateNextUpdate(\n        anime: Anime,\n        interval: Int,\n        dateTime: ZonedDateTime,\n        window: Pair<Long, Long>,\n    ): Long {\n        if (anime.nextUpdate in window.first.rangeTo(window.second + 1)) {\n            return anime.nextUpdate\n        }\n\n        val latestDate = ZonedDateTime.ofInstant(\n            if (anime.lastUpdate > 0) Instant.ofEpochMilli(anime.lastUpdate) else Instant.now(),\n            dateTime.zone,\n        )\n            .toLocalDate()\n            .atStartOfDay()\n        val timeSinceLatest = ChronoUnit.DAYS.between(latestDate, dateTime).toInt()\n        val cycle = timeSinceLatest.floorDiv(\n            interval.absoluteValue.takeIf { interval < 0 }\n                ?: increaseInterval(interval, timeSinceLatest, increaseWhenOver = 10),\n        )\n        return latestDate.plusDays((cycle + 1) * interval.absoluteValue.toLong()).toEpochSecond(dateTime.offset) * 1000\n    }\n\n    private fun increaseInterval(delta: Int, timeSinceLatest: Int, increaseWhenOver: Int): Int {\n        if (delta >= AnimeFetchInterval.MAX_INTERVAL) return AnimeFetchInterval.MAX_INTERVAL\n\n        // double delta again if missed more than 9 check in new delta\n        val cycle = timeSinceLatest.floorDiv(delta) + 1\n        return if (cycle > increaseWhenOver) {\n            increaseInterval(delta * 2, timeSinceLatest, increaseWhenOver)\n        } else {\n            delta\n        }\n    }\n\n    companion object {\n        const val MAX_INTERVAL = 28\n\n        private const val GRACE_PERIOD = 1L\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/GetAnime.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass GetAnime(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun await(id: Long): Anime? {\n        return try {\n            animeRepository.getAnimeById(id)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    suspend fun subscribe(id: Long): Flow<Anime> {\n        return animeRepository.getAnimeByIdAsFlow(id)\n    }\n\n    fun subscribe(url: String, sourceId: Long): Flow<Anime?> {\n        return animeRepository.getAnimeByUrlAndSourceIdAsFlow(url, sourceId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/GetAnimeByUrlAndSourceId.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass GetAnimeByUrlAndSourceId(\n    private val animeRepository: AnimeRepository,\n) {\n    suspend fun await(url: String, sourceId: Long): Anime? {\n        return animeRepository.getAnimeByUrlAndSourceId(url, sourceId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/GetAnimeFavorites.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass GetAnimeFavorites(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun await(): List<Anime> {\n        return animeRepository.getAnimeFavorites()\n    }\n\n    fun subscribe(sourceId: Long): Flow<List<Anime>> {\n        return animeRepository.getAnimeFavoritesBySourceId(sourceId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/GetAnimeWithEpisodesAndSeasons.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport aniyomi.domain.anime.SeasonAnime\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass GetAnimeWithEpisodesAndSeasons(\n    private val animeRepository: AnimeRepository,\n    private val episodeRepository: EpisodeRepository,\n) {\n\n    suspend fun subscribe(id: Long): Flow<Triple<Anime, List<Episode>, List<SeasonAnime>>> {\n        return combine(\n            animeRepository.getAnimeByIdAsFlow(id),\n            episodeRepository.getEpisodeByAnimeIdAsFlow(id),\n            animeRepository.getAnimeSeasonsByIdAsFlow(id),\n        ) { anime, episodes, seasons ->\n            Triple(anime, episodes, seasons)\n        }\n    }\n\n    suspend fun awaitAnime(id: Long): Anime {\n        return animeRepository.getAnimeById(id)\n    }\n\n    suspend fun awaitEpisodes(id: Long): List<Episode> {\n        return episodeRepository.getEpisodeByAnimeId(id)\n    }\n\n    suspend fun awaitSeasons(id: Long): List<SeasonAnime> {\n        return animeRepository.getAnimeSeasonsById(id)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/GetDuplicateLibraryAnime.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass GetDuplicateLibraryAnime(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun await(anime: Anime): List<Anime> {\n        return animeRepository.getDuplicateLibraryAnime(anime.id, anime.title.lowercase())\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/GetLibraryAnime.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.retry\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport kotlin.time.Duration.Companion.seconds\n\nclass GetLibraryAnime(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun await(): List<LibraryAnime> {\n        return animeRepository.getLibraryAnime()\n    }\n\n    fun subscribe(): Flow<List<LibraryAnime>> {\n        return animeRepository.getLibraryAnimeAsFlow()\n            .retry {\n                if (it is NullPointerException) {\n                    delay(0.5.seconds)\n                    true\n                } else {\n                    false\n                }\n            }.catch {\n                this@GetLibraryAnime.logcat(LogPriority.ERROR, it)\n            }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/NetworkToLocalAnime.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.source.anime.service.AnimeSourceManager\n\nclass NetworkToLocalAnime(\n    private val animeRepository: AnimeRepository,\n    private val sourceManager: AnimeSourceManager,\n) {\n\n    suspend fun await(anime: Anime): Anime {\n        val localAnime = getAnime(anime.url, anime.source)\n        return when {\n            localAnime == null -> {\n                val id = insertAnime(anime)\n                anime.copy(id = id!!)\n            }\n            !localAnime.favorite -> {\n                // if the anime isn't a favorite, set its display title from source\n                // if it later becomes a favorite, updated title will go to db\n                localAnime.copy(title = anime.title)\n            }\n            else -> {\n                localAnime\n            }\n        }\n    }\n\n    private suspend fun getAnime(url: String, sourceId: Long): Anime? {\n        return animeRepository.getAnimeByUrlAndSourceId(url, sourceId)\n    }\n\n    private suspend fun insertAnime(anime: Anime): Long? {\n        return animeRepository.insertAnime(anime)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/ResetAnimeViewerFlags.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass ResetAnimeViewerFlags(\n    private val animeRepository: AnimeRepository,\n) {\n    suspend fun await(): Boolean {\n        return animeRepository.resetAnimeViewerFlags()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/SetAnimeEpisodeFlags.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass SetAnimeEpisodeFlags(\n    private val animeRepository: AnimeRepository,\n) {\n\n    suspend fun awaitSetDownloadedFilter(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_DOWNLOADED_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetUnseenFilter(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_UNSEEN_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetBookmarkFilter(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_BOOKMARKED_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetFillermarkFilter(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_FILLERMARKED_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetDisplayMode(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_DISPLAY_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetSortingModeOrFlipOrder(anime: Anime, flag: Long): Boolean {\n        val newFlags = anime.episodeFlags.let {\n            if (anime.sorting == flag) {\n                // Just flip the order\n                val orderFlag = if (anime.sortDescending()) {\n                    Anime.EPISODE_SORT_ASC\n                } else {\n                    Anime.EPISODE_SORT_DESC\n                }\n                it.setFlag(orderFlag, Anime.EPISODE_SORT_DIR_MASK)\n            } else {\n                // Set new flag with ascending order\n                it\n                    .setFlag(flag, Anime.EPISODE_SORTING_MASK)\n                    .setFlag(Anime.EPISODE_SORT_ASC, Anime.EPISODE_SORT_DIR_MASK)\n            }\n        }\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = newFlags,\n            ),\n        )\n    }\n\n    suspend fun awaitShowEpisodePreviews(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_PREVIEWS_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitShowEpisodeSummaries(anime: Anime, flag: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                episodeFlags = anime.episodeFlags.setFlag(flag, Anime.EPISODE_SUMMARIES_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetAllFlags(\n        animeId: Long,\n        unseenFilter: Long,\n        downloadedFilter: Long,\n        bookmarkedFilter: Long,\n        fillermarkedFilter: Long,\n        sortingMode: Long,\n        sortingDirection: Long,\n        displayMode: Long,\n        showPreviews: Long,\n        showSummaries: Long,\n    ): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = animeId,\n                episodeFlags = 0L.setFlag(unseenFilter, Anime.EPISODE_UNSEEN_MASK)\n                    .setFlag(downloadedFilter, Anime.EPISODE_DOWNLOADED_MASK)\n                    .setFlag(bookmarkedFilter, Anime.EPISODE_BOOKMARKED_MASK)\n                    .setFlag(fillermarkedFilter, Anime.EPISODE_FILLERMARKED_MASK)\n                    .setFlag(sortingMode, Anime.EPISODE_SORTING_MASK)\n                    .setFlag(sortingDirection, Anime.EPISODE_SORT_DIR_MASK)\n                    .setFlag(displayMode, Anime.EPISODE_DISPLAY_MASK)\n                    .setFlag(showPreviews, Anime.EPISODE_PREVIEWS_MASK)\n                    .setFlag(showSummaries, Anime.EPISODE_SUMMARIES_MASK),\n            ),\n        )\n    }\n\n    private fun Long.setFlag(flag: Long, mask: Long): Long {\n        return this and mask.inv() or (flag and mask)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/interactor/SetAnimeSeasonFlags.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass SetAnimeSeasonFlags(\n    private val animeRepository: AnimeRepository,\n) {\n    suspend fun awaitSetDownloadedFilter(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_DOWNLOADED_MASK)\n    }\n\n    suspend fun awaitSetUnseenFilter(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_UNSEEN_MASK)\n    }\n\n    suspend fun awaitSetStartedFilter(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_STARTED_MASK)\n    }\n\n    suspend fun awaitSetCompletedFilter(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_COMPLETED_MASK)\n    }\n\n    suspend fun awaitSetBookmarkedFilter(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_BOOKMARKED_MASK)\n    }\n\n    suspend fun awaitSetFillermarkedFilter(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_FILLERMARKED_MASK)\n    }\n\n    suspend fun awaitSetSortingModeOrFlipOrder(anime: Anime, flag: Long): Boolean {\n        val newFlags = anime.seasonFlags.let {\n            if (anime.seasonSorting == flag) {\n                // Just flip the order\n                val orderFlag = if (anime.seasonSortDescending()) {\n                    Anime.SEASON_SORT_ASC\n                } else {\n                    Anime.SEASON_SORT_DESC\n                }\n                it.setFlag(orderFlag, Anime.SEASON_SORT_DIR_MASK)\n            } else {\n                // Set new flag with ascending order\n                it\n                    .setFlag(flag, Anime.SEASON_SORT_MASK)\n                    .setFlag(Anime.SEASON_SORT_ASC, Anime.SEASON_SORT_DIR_MASK)\n            }\n        }\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                seasonFlags = newFlags,\n            ),\n        )\n    }\n\n    suspend fun awaitSetGridMode(anime: Anime, mode: SeasonDisplayMode): Boolean {\n        val flag = SeasonDisplayMode.toLong(mode) shl Anime.SEASON_GRID_DISPLAY_MODE_BIT_OFFSET\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                seasonFlags = anime.seasonFlags.setFlag(flag, Anime.SEASON_GRID_DISPLAY_MODE_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetGridSize(anime: Anime, size: Int): Boolean {\n        val flag = size.toLong() shl Anime.SEASON_GRID_DISPLAY_SIZE_BIT_OFFSET\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                seasonFlags = anime.seasonFlags.setFlag(flag, Anime.SEASON_GRID_DISPLAY_SIZE_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetDownloadedOverlay(anime: Anime, value: Boolean): Boolean {\n        return setBooleanFlag(anime, value, Anime.SEASON_OVERLAY_DOWNLOADED_MASK)\n    }\n\n    suspend fun awaitSetUnseenOverlay(anime: Anime, value: Boolean): Boolean {\n        return setBooleanFlag(anime, value, Anime.SEASON_OVERLAY_UNSEEN_MASK)\n    }\n\n    suspend fun awaitSetLocalOverlay(anime: Anime, value: Boolean): Boolean {\n        return setBooleanFlag(anime, value, Anime.SEASON_OVERLAY_LOCAL_MASK)\n    }\n\n    suspend fun awaitSetLangOverlay(anime: Anime, value: Boolean): Boolean {\n        return setBooleanFlag(anime, value, Anime.SEASON_OVERLAY_LANG_MASK)\n    }\n\n    suspend fun awaitSetContinueOverlay(anime: Anime, value: Boolean): Boolean {\n        return setBooleanFlag(anime, value, Anime.SEASON_OVERLAY_CONT_MASK)\n    }\n\n    suspend fun awaitSetDisplayMode(anime: Anime, flag: Long): Boolean {\n        return setFlag(anime, flag, Anime.SEASON_DISPLAY_MODE_MASK)\n    }\n\n    suspend fun awaitSetAllFlags(\n        animeId: Long,\n        downloadFilter: Long,\n        unseenFilter: Long,\n        startedFilter: Long,\n        completedFilter: Long,\n        bookmarkedFilter: Long,\n        fillermarkedFilter: Long,\n        sortingMode: Long,\n        sortingDirection: Long,\n        displayGridMode: SeasonDisplayMode,\n        displayGridSize: Int,\n        downloadedOverlay: Boolean,\n        unseenOverlay: Boolean,\n        localOverlay: Boolean,\n        langOverlay: Boolean,\n        continueOverlay: Boolean,\n        displayMode: Long,\n    ): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = animeId,\n                seasonFlags = 0L.setFlag(downloadFilter, Anime.SEASON_DOWNLOADED_MASK)\n                    .setFlag(unseenFilter, Anime.SEASON_UNSEEN_MASK)\n                    .setFlag(startedFilter, Anime.SEASON_STARTED_MASK)\n                    .setFlag(completedFilter, Anime.SEASON_COMPLETED_MASK)\n                    .setFlag(bookmarkedFilter, Anime.SEASON_BOOKMARKED_MASK)\n                    .setFlag(fillermarkedFilter, Anime.SEASON_FILLERMARKED_MASK)\n                    .setFlag(sortingMode, Anime.SEASON_SORT_MASK)\n                    .setFlag(sortingDirection, Anime.SEASON_SORT_DIR_MASK)\n                    .setFlag(\n                        SeasonDisplayMode.toLong(displayGridMode) shl Anime.SEASON_GRID_DISPLAY_MODE_BIT_OFFSET,\n                        Anime.SEASON_GRID_DISPLAY_MODE_MASK,\n                    )\n                    .setFlag(\n                        displayGridSize.toLong() shl Anime.SEASON_GRID_DISPLAY_SIZE_BIT_OFFSET,\n                        Anime.SEASON_GRID_DISPLAY_SIZE_MASK,\n                    )\n                    .setFlag(\n                        if (downloadedOverlay) Anime.SEASON_OVERLAY_DOWNLOADED_MASK else 0L,\n                        Anime.SEASON_OVERLAY_DOWNLOADED_MASK,\n                    )\n                    .setFlag(\n                        if (unseenOverlay) Anime.SEASON_OVERLAY_UNSEEN_MASK else 0L,\n                        Anime.SEASON_OVERLAY_UNSEEN_MASK,\n                    )\n                    .setFlag(\n                        if (localOverlay) Anime.SEASON_OVERLAY_LOCAL_MASK else 0L,\n                        Anime.SEASON_OVERLAY_LOCAL_MASK,\n                    )\n                    .setFlag(\n                        if (langOverlay) Anime.SEASON_OVERLAY_LANG_MASK else 0L,\n                        Anime.SEASON_OVERLAY_LANG_MASK,\n                    )\n                    .setFlag(\n                        if (continueOverlay) Anime.SEASON_OVERLAY_CONT_MASK else 0L,\n                        Anime.SEASON_OVERLAY_CONT_MASK,\n                    )\n                    .setFlag(displayMode, Anime.SEASON_DISPLAY_MODE_MASK),\n            ),\n        )\n    }\n\n    private suspend fun setFlag(anime: Anime, flag: Long, mask: Long): Boolean {\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                seasonFlags = anime.seasonFlags.setFlag(flag, mask),\n            ),\n        )\n    }\n\n    private suspend fun setBooleanFlag(anime: Anime, value: Boolean, mask: Long): Boolean {\n        val flag = if (value) mask else 0L\n        return animeRepository.updateAnime(\n            AnimeUpdate(\n                id = anime.id,\n                seasonFlags = anime.seasonFlags.setFlag(flag, mask),\n            ),\n        )\n    }\n\n    private fun Long.setFlag(flag: Long, mask: Long): Long {\n        return this and mask.inv() or (flag and mask)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/model/Anime.kt",
    "content": "package tachiyomi.domain.entries.anime.model\n\nimport androidx.compose.runtime.Immutable\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport tachiyomi.core.common.preference.TriState\nimport java.io.Serializable\nimport java.time.Instant\nimport kotlin.math.pow\n\n@Immutable\ndata class Anime(\n    val id: Long,\n    val source: Long,\n    val favorite: Boolean,\n    val lastUpdate: Long,\n    val nextUpdate: Long,\n    val fetchInterval: Int,\n    val dateAdded: Long,\n    val viewerFlags: Long,\n    val episodeFlags: Long,\n    val coverLastModified: Long,\n    val backgroundLastModified: Long,\n    val url: String,\n    val title: String,\n    val artist: String?,\n    val author: String?,\n    val description: String?,\n    val genre: List<String>?,\n    val status: Long,\n    val thumbnailUrl: String?,\n    val backgroundUrl: String?,\n    val updateStrategy: AnimeUpdateStrategy,\n    val initialized: Boolean,\n    val lastModifiedAt: Long,\n    val favoriteModifiedAt: Long?,\n    val version: Long,\n    val fetchType: FetchType,\n    val parentId: Long?,\n    val seasonFlags: Long,\n    val seasonNumber: Double,\n    val seasonSourceOrder: Long,\n) : Serializable {\n\n    val expectedNextUpdate: Instant?\n        get() = nextUpdate\n            .takeIf { status != SAnime.COMPLETED.toLong() }\n            ?.let { Instant.ofEpochMilli(it) }\n\n    val sorting: Long\n        get() = episodeFlags and EPISODE_SORTING_MASK\n\n    val displayMode: Long\n        get() = episodeFlags and EPISODE_DISPLAY_MASK\n\n    val unseenFilterRaw: Long\n        get() = episodeFlags and EPISODE_UNSEEN_MASK\n\n    val downloadedFilterRaw: Long\n        get() = episodeFlags and EPISODE_DOWNLOADED_MASK\n\n    val bookmarkedFilterRaw: Long\n        get() = episodeFlags and EPISODE_BOOKMARKED_MASK\n\n    val fillermarkedFilterRaw: Long\n        get() = episodeFlags and EPISODE_FILLERMARKED_MASK\n\n    val skipIntroLength: Int\n        get() = (viewerFlags and ANIME_INTRO_MASK).toInt()\n\n    val skipIntroDisable: Boolean\n        get() = (viewerFlags and ANIME_INTRO_DISABLE_MASK) == ANIME_INTRO_DISABLE_MASK\n\n    val nextEpisodeToAir: Int\n        get() = (viewerFlags and ANIME_AIRING_EPISODE_MASK).removeHexZeros(zeros = 2).toInt()\n\n    val nextEpisodeAiringAt: Long\n        get() = (viewerFlags and ANIME_AIRING_TIME_MASK).removeHexZeros(zeros = 6)\n\n    val unseenFilter: TriState\n        get() = when (unseenFilterRaw) {\n            EPISODE_SHOW_UNSEEN -> TriState.ENABLED_IS\n            EPISODE_SHOW_SEEN -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val bookmarkedFilter: TriState\n        get() = when (bookmarkedFilterRaw) {\n            EPISODE_SHOW_BOOKMARKED -> TriState.ENABLED_IS\n            EPISODE_SHOW_NOT_BOOKMARKED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val fillermarkedFilter: TriState\n        get() = when (fillermarkedFilterRaw) {\n            EPISODE_SHOW_FILLERMARKED -> TriState.ENABLED_IS\n            EPISODE_SHOW_NOT_FILLERMARKED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    fun sortDescending(): Boolean {\n        return episodeFlags and EPISODE_SORT_DIR_MASK == EPISODE_SORT_DESC\n    }\n\n    val showPreviewsRaw: Long\n        get() = episodeFlags and EPISODE_PREVIEWS_MASK\n\n    fun showPreviews(): Boolean {\n        return episodeFlags and EPISODE_PREVIEWS_MASK == EPISODE_SHOW_PREVIEWS\n    }\n\n    val showSummariesRaw: Long\n        get() = episodeFlags and EPISODE_SUMMARIES_MASK\n\n    fun showSummaries(): Boolean {\n        return episodeFlags and EPISODE_SUMMARIES_MASK == EPISODE_SHOW_SUMMARIES\n    }\n\n    val seasonDownloadedFilterRaw: Long\n        get() = seasonFlags and SEASON_DOWNLOADED_MASK\n\n    val seasonUnseenFilterRaw: Long\n        get() = seasonFlags and SEASON_UNSEEN_MASK\n\n    val seasonStartedFilterRaw: Long\n        get() = seasonFlags and SEASON_STARTED_MASK\n\n    val seasonCompletedFilterRaw: Long\n        get() = seasonFlags and SEASON_COMPLETED_MASK\n\n    val seasonBookmarkedFilterRaw: Long\n        get() = seasonFlags and SEASON_BOOKMARKED_MASK\n\n    val seasonFillermarkedFilterRaw: Long\n        get() = seasonFlags and SEASON_FILLERMARKED_MASK\n\n    val seasonUnseenFilter: TriState\n        get() = when (seasonUnseenFilterRaw) {\n            SEASON_SHOW_UNSEEN -> TriState.ENABLED_IS\n            SEASON_SHOW_SEEN -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val seasonStartedFilter: TriState\n        get() = when (seasonStartedFilterRaw) {\n            SEASON_SHOW_STARTED -> TriState.ENABLED_IS\n            SEASON_SHOW_NOT_STARTED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val seasonCompletedFilter: TriState\n        get() = when (seasonCompletedFilterRaw) {\n            SEASON_SHOW_COMPLETED -> TriState.ENABLED_IS\n            SEASON_SHOW_NOT_COMPLETED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val seasonBookmarkedFilter: TriState\n        get() = when (seasonBookmarkedFilterRaw) {\n            SEASON_SHOW_BOOKMARKED -> TriState.ENABLED_IS\n            SEASON_SHOW_NOT_BOOKMARKED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val seasonFillermarkedFilter: TriState\n        get() = when (seasonFillermarkedFilterRaw) {\n            SEASON_SHOW_FILLERMARKED -> TriState.ENABLED_IS\n            SEASON_SHOW_NOT_FILLERMARKED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val seasonSorting: Long\n        get() = seasonFlags and SEASON_SORT_MASK\n\n    fun seasonSortDescending(): Boolean {\n        return seasonFlags and SEASON_SORT_DIR_MASK == SEASON_SORT_DESC\n    }\n\n    val seasonDisplayGridMode: SeasonDisplayMode\n        get() = SeasonDisplayMode.fromLong(\n            (seasonFlags and SEASON_GRID_DISPLAY_MODE_MASK) shr SEASON_GRID_DISPLAY_MODE_BIT_OFFSET,\n        )\n\n    val seasonDisplayGridSize: Int\n        get() = ((seasonFlags and SEASON_GRID_DISPLAY_SIZE_MASK) shr SEASON_GRID_DISPLAY_SIZE_BIT_OFFSET).toInt()\n\n    val seasonDownloadedOverlay: Boolean\n        get() = (seasonFlags and SEASON_OVERLAY_DOWNLOADED_MASK) == SEASON_OVERLAY_DOWNLOADED_MASK\n\n    val seasonUnseenOverlay: Boolean\n        get() = (seasonFlags and SEASON_OVERLAY_UNSEEN_MASK) == SEASON_OVERLAY_UNSEEN_MASK\n\n    val seasonLocalOverlay: Boolean\n        get() = (seasonFlags and SEASON_OVERLAY_LOCAL_MASK) == SEASON_OVERLAY_LOCAL_MASK\n\n    val seasonLangOverlay: Boolean\n        get() = (seasonFlags and SEASON_OVERLAY_LANG_MASK) == SEASON_OVERLAY_LANG_MASK\n\n    val seasonContinueOverlay: Boolean\n        get() = (seasonFlags and SEASON_OVERLAY_CONT_MASK) == SEASON_OVERLAY_CONT_MASK\n\n    val seasonDisplayMode: Long\n        get() = seasonFlags and SEASON_DISPLAY_MODE_MASK\n\n    private fun Long.removeHexZeros(zeros: Int): Long {\n        val hex = 16.0\n        return this.div(hex.pow(zeros)).toLong()\n    }\n\n    companion object {\n        // Generic filter that does not filter anything\n        const val SHOW_ALL = 0x00000000L\n\n        const val EPISODE_SORT_DESC = 0x00000000L\n        const val EPISODE_SORT_ASC = 0x00000001L\n        const val EPISODE_SORT_DIR_MASK = 0x00000001L\n\n        const val EPISODE_SHOW_UNSEEN = 0x00000002L\n        const val EPISODE_SHOW_SEEN = 0x00000004L\n        const val EPISODE_UNSEEN_MASK = 0x00000006L\n\n        const val EPISODE_SHOW_DOWNLOADED = 0x00000008L\n        const val EPISODE_SHOW_NOT_DOWNLOADED = 0x00000010L\n        const val EPISODE_DOWNLOADED_MASK = 0x00000018L\n\n        const val EPISODE_SHOW_BOOKMARKED = 0x00000020L\n        const val EPISODE_SHOW_NOT_BOOKMARKED = 0x00000040L\n        const val EPISODE_BOOKMARKED_MASK = 0x00000060L\n\n        const val EPISODE_SHOW_FILLERMARKED = 0x00000080L\n        const val EPISODE_SHOW_NOT_FILLERMARKED = 0x00000100L\n        const val EPISODE_FILLERMARKED_MASK = 0x00000180L\n\n        const val EPISODE_SORTING_SOURCE = 0x00000000L\n        const val EPISODE_SORTING_NUMBER = 0x00000200L\n        const val EPISODE_SORTING_UPLOAD_DATE = 0x00000400L\n        const val EPISODE_SORTING_ALPHABET = 0x00000600L\n        const val EPISODE_SORTING_MASK = 0x00000600L\n\n        const val EPISODE_SHOW_PREVIEWS = 0x00000000L\n        const val EPISODE_SHOW_NOT_PREVIEWS = 0x00000800L\n        const val EPISODE_PREVIEWS_MASK = 0x00000800L\n\n        const val EPISODE_SHOW_SUMMARIES = 0x00000000L\n        const val EPISODE_SHOW_NOT_SUMMARIES = 0x00001000L\n        const val EPISODE_SUMMARIES_MASK = 0x00001000L\n\n        const val EPISODE_DISPLAY_NAME = 0x00000000L\n        const val EPISODE_DISPLAY_NUMBER = 0x00100000L\n        const val EPISODE_DISPLAY_MASK = 0x00100000L\n\n        const val SEASON_SORT_DESC = 0x00000000L\n        const val SEASON_SORT_ASC = 0x00000001L\n        const val SEASON_SORT_DIR_MASK = 0x00000001L\n\n        const val SEASON_SHOW_DOWNLOADED = 0x00000002L\n        const val SEASON_SHOW_NOT_DOWNLOADED = 0x00000004L\n        const val SEASON_DOWNLOADED_MASK = 0x00000006L\n\n        const val SEASON_SHOW_UNSEEN = 0x00000008L\n        const val SEASON_SHOW_SEEN = 0x00000010L\n        const val SEASON_UNSEEN_MASK = 0x00000018L\n\n        const val SEASON_SHOW_STARTED = 0x00000020L\n        const val SEASON_SHOW_NOT_STARTED = 0x00000040L\n        const val SEASON_STARTED_MASK = 0x00000060L\n\n        const val SEASON_SHOW_COMPLETED = 0x00000080L\n        const val SEASON_SHOW_NOT_COMPLETED = 0x00000100L\n        const val SEASON_COMPLETED_MASK = 0x00000180L\n\n        const val SEASON_SHOW_BOOKMARKED = 0x00000200L\n        const val SEASON_SHOW_NOT_BOOKMARKED = 0x00000400L\n        const val SEASON_BOOKMARKED_MASK = 0x00000600L\n\n        const val SEASON_SHOW_FILLERMARKED = 0x00000800L\n        const val SEASON_SHOW_NOT_FILLERMARKED = 0x00001000L\n        const val SEASON_FILLERMARKED_MASK = 0x00001800L\n\n        const val SEASON_SORT_SOURCE = 0x00000000L\n        const val SEASON_SORT_SEASON = 0x00002000L\n        const val SEASON_SORT_UPLOAD = 0x00004000L\n        const val SEASON_SORT_ALPHABET = 0x00006000L\n        const val SEASON_SORT_COUNT = 0x00008000L\n        const val SEASON_SORT_LAST_SEEN = 0x0000A000L\n        const val SEASON_SORT_FETCHED = 0x0000C000L\n        const val SEASON_SORT_MASK = 0x0000E000L\n\n        const val SEASON_GRID_DISPLAY_MODE_BIT_OFFSET = 16\n        const val SEASON_GRID_DISPLAY_MODE_MASK = 0x00030000L\n\n        const val SEASON_GRID_DISPLAY_SIZE_BIT_OFFSET = 18\n        const val SEASON_GRID_DISPLAY_SIZE_MASK = 0x003C0000L\n\n        const val SEASON_OVERLAY_DOWNLOADED_MASK = 0x00400000L\n        const val SEASON_OVERLAY_UNSEEN_MASK = 0x00800000L\n        const val SEASON_OVERLAY_LOCAL_MASK = 0x01000000L\n        const val SEASON_OVERLAY_LANG_MASK = 0x02000000L\n        const val SEASON_OVERLAY_CONT_MASK = 0x04000000L\n\n        const val SEASON_DISPLAY_MODE_SOURCE = 0x00000000L\n        const val SEASON_DISPLAY_MODE_NUMBER = 0x08000000L\n        const val SEASON_DISPLAY_MODE_MASK = 0x08000000L\n\n        const val ANIME_INTRO_MASK = 0x0000000000000FFL\n        const val ANIME_AIRING_EPISODE_MASK = 0x000000000FFFF00L\n        const val ANIME_AIRING_TIME_MASK = 0x0FFFFFFFF000000L\n        const val ANIME_INTRO_DISABLE_MASK = 0x100000000000000L\n\n        fun create() = Anime(\n            id = -1L,\n            url = \"\",\n            title = \"\",\n            source = -1L,\n            favorite = false,\n            lastUpdate = 0L,\n            nextUpdate = 0L,\n            fetchInterval = 0,\n            dateAdded = 0L,\n            viewerFlags = 0L,\n            episodeFlags = 0L,\n            coverLastModified = 0L,\n            backgroundLastModified = 0L,\n            artist = null,\n            author = null,\n            description = null,\n            genre = null,\n            status = 0L,\n            thumbnailUrl = null,\n            backgroundUrl = null,\n            updateStrategy = AnimeUpdateStrategy.ALWAYS_UPDATE,\n            initialized = false,\n            lastModifiedAt = 0L,\n            favoriteModifiedAt = null,\n            version = 0L,\n            fetchType = FetchType.Episodes,\n            parentId = null,\n            seasonFlags = 0L,\n            seasonNumber = -1.0,\n            seasonSourceOrder = 0L,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/model/AnimeCover.kt",
    "content": "package tachiyomi.domain.entries.anime.model\n\nimport tachiyomi.domain.entries.EntryCover\n\n/**\n * Contains the required data for AnimeCoverFetcher\n */\ndata class AnimeCover(\n    val animeId: Long,\n    val sourceId: Long,\n    val isAnimeFavorite: Boolean,\n    val url: String?,\n    val lastModified: Long,\n) : EntryCover\n\nfun Anime.asAnimeCover(): AnimeCover {\n    return AnimeCover(\n        animeId = id,\n        sourceId = source,\n        isAnimeFavorite = favorite,\n        url = thumbnailUrl,\n        lastModified = coverLastModified,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/model/AnimeUpdate.kt",
    "content": "package tachiyomi.domain.entries.anime.model\n\nimport eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy\nimport eu.kanade.tachiyomi.animesource.model.FetchType\n\ndata class AnimeUpdate(\n    val id: Long,\n    val source: Long? = null,\n    val favorite: Boolean? = null,\n    val lastUpdate: Long? = null,\n    val nextUpdate: Long? = null,\n    val fetchInterval: Int? = null,\n    val dateAdded: Long? = null,\n    val viewerFlags: Long? = null,\n    val episodeFlags: Long? = null,\n    val coverLastModified: Long? = null,\n    val backgroundLastModified: Long? = null,\n    val url: String? = null,\n    val title: String? = null,\n    val artist: String? = null,\n    val author: String? = null,\n    val description: String? = null,\n    val genre: List<String>? = null,\n    val status: Long? = null,\n    val thumbnailUrl: String? = null,\n    val backgroundUrl: String? = null,\n    val updateStrategy: AnimeUpdateStrategy? = null,\n    val initialized: Boolean? = null,\n    val version: Long? = null,\n    val fetchType: FetchType? = null,\n    val parentId: Long? = null,\n    val seasonFlags: Long? = null,\n    val seasonNumber: Double? = null,\n    val seasonSourceOrder: Long? = null,\n)\n\nfun Anime.toAnimeUpdate(): AnimeUpdate {\n    return AnimeUpdate(\n        id = id,\n        source = source,\n        favorite = favorite,\n        lastUpdate = lastUpdate,\n        nextUpdate = nextUpdate,\n        fetchInterval = fetchInterval,\n        dateAdded = dateAdded,\n        viewerFlags = viewerFlags,\n        episodeFlags = episodeFlags,\n        coverLastModified = coverLastModified,\n        backgroundLastModified = backgroundLastModified,\n        url = url,\n        title = title,\n        artist = artist,\n        author = author,\n        description = description,\n        genre = genre,\n        status = status,\n        thumbnailUrl = thumbnailUrl,\n        backgroundUrl = backgroundUrl,\n        updateStrategy = updateStrategy,\n        initialized = initialized,\n        version = version,\n        fetchType = fetchType,\n        parentId = parentId,\n        seasonFlags = seasonFlags,\n        seasonNumber = seasonNumber,\n        seasonSourceOrder = seasonSourceOrder,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/model/NoSeasonsException.kt",
    "content": "package tachiyomi.domain.entries.anime.model\n\nclass NoSeasonsException : Exception()\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/anime/repository/AnimeRepository.kt",
    "content": "package tachiyomi.domain.entries.anime.repository\n\nimport aniyomi.domain.anime.SeasonAnime\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.model.AnimeUpdate\nimport tachiyomi.domain.library.anime.LibraryAnime\nimport tachiyomi.domain.source.anime.model.DeletableAnime\n\ninterface AnimeRepository {\n\n    suspend fun getAnimeById(id: Long): Anime\n\n    suspend fun getAnimeByIdAsFlow(id: Long): Flow<Anime>\n\n    suspend fun getAnimeByUrlAndSourceId(url: String, sourceId: Long): Anime?\n\n    fun getAnimeByUrlAndSourceIdAsFlow(url: String, sourceId: Long): Flow<Anime?>\n\n    suspend fun getAnimeFavorites(): List<Anime>\n\n    suspend fun getWatchedAnimeNotInLibrary(): List<Anime>\n\n    suspend fun getLibraryAnime(): List<LibraryAnime>\n\n    fun getLibraryAnimeAsFlow(): Flow<List<LibraryAnime>>\n\n    fun getAnimeFavoritesBySourceId(sourceId: Long): Flow<List<Anime>>\n\n    suspend fun getDuplicateLibraryAnime(id: Long, title: String): List<Anime>\n\n    suspend fun getUpcomingAnime(statuses: Set<Long>): Flow<List<Anime>>\n\n    suspend fun resetAnimeViewerFlags(): Boolean\n\n    suspend fun setAnimeCategories(animeId: Long, categoryIds: List<Long>)\n\n    suspend fun insertAnime(anime: Anime): Long?\n\n    suspend fun updateAnime(update: AnimeUpdate): Boolean\n\n    suspend fun updateAllAnime(animeUpdates: List<AnimeUpdate>): Boolean\n\n    suspend fun getAnimeSeasonsById(parentId: Long): List<SeasonAnime>\n\n    fun getAnimeSeasonsByIdAsFlow(parentId: Long): Flow<List<SeasonAnime>>\n\n    suspend fun removeParentIdByIds(animeIds: List<Long>)\n\n    fun getDeletableParentAnime(): Flow<List<DeletableAnime>>\n\n    suspend fun getChildrenByParentId(parentId: Long): List<Anime>\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/GetDuplicateLibraryManga.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass GetDuplicateLibraryManga(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(manga: Manga): List<Manga> {\n        return mangaRepository.getDuplicateLibraryManga(manga.id, manga.title.lowercase())\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/GetLibraryManga.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.retry\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.domain.library.manga.LibraryManga\nimport kotlin.time.Duration.Companion.seconds\n\nclass GetLibraryManga(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(): List<LibraryManga> {\n        return mangaRepository.getLibraryManga()\n    }\n\n    fun subscribe(): Flow<List<LibraryManga>> {\n        return mangaRepository.getLibraryMangaAsFlow()\n            .retry {\n                if (it is NullPointerException) {\n                    delay(0.5.seconds)\n                    true\n                } else {\n                    false\n                }\n            }.catch {\n                this@GetLibraryManga.logcat(LogPriority.ERROR, it)\n            }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/GetManga.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass GetManga(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(id: Long): Manga? {\n        return try {\n            mangaRepository.getMangaById(id)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    suspend fun subscribe(id: Long): Flow<Manga> {\n        return mangaRepository.getMangaByIdAsFlow(id)\n    }\n\n    fun subscribe(url: String, sourceId: Long): Flow<Manga?> {\n        return mangaRepository.getMangaByUrlAndSourceIdAsFlow(url, sourceId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/GetMangaByUrlAndSourceId.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass GetMangaByUrlAndSourceId(\n    private val mangaRepository: MangaRepository,\n) {\n    suspend fun await(url: String, sourceId: Long): Manga? {\n        return mangaRepository.getMangaByUrlAndSourceId(url, sourceId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/GetMangaFavorites.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass GetMangaFavorites(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(): List<Manga> {\n        return mangaRepository.getMangaFavorites()\n    }\n\n    fun subscribe(sourceId: Long): Flow<List<Manga>> {\n        return mangaRepository.getMangaFavoritesBySourceId(sourceId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/GetMangaWithChapters.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass GetMangaWithChapters(\n    private val mangaRepository: MangaRepository,\n    private val chapterRepository: ChapterRepository,\n) {\n\n    suspend fun subscribe(id: Long, applyScanlatorFilter: Boolean = false): Flow<Pair<Manga, List<Chapter>>> {\n        return combine(\n            mangaRepository.getMangaByIdAsFlow(id),\n            chapterRepository.getChapterByMangaIdAsFlow(id, applyScanlatorFilter),\n        ) { manga, chapters ->\n            Pair(manga, chapters)\n        }\n    }\n\n    suspend fun awaitManga(id: Long): Manga {\n        return mangaRepository.getMangaById(id)\n    }\n\n    suspend fun awaitChapters(id: Long, applyScanlatorFilter: Boolean = false): List<Chapter> {\n        return chapterRepository.getChapterByMangaId(id, applyScanlatorFilter)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/MangaFetchInterval.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport java.time.Instant\nimport java.time.ZoneId\nimport java.time.ZonedDateTime\nimport java.time.temporal.ChronoUnit\nimport kotlin.math.absoluteValue\n\nclass MangaFetchInterval(\n    private val getChaptersByMangaId: GetChaptersByMangaId,\n) {\n\n    suspend fun toMangaUpdate(\n        manga: Manga,\n        dateTime: ZonedDateTime,\n        window: Pair<Long, Long>,\n    ): MangaUpdate {\n        val interval = manga.fetchInterval.takeIf { it < 0 } ?: calculateInterval(\n            chapters = getChaptersByMangaId.await(manga.id, applyScanlatorFilter = true),\n            zone = dateTime.zone,\n        )\n        val currentWindow = if (window.first == 0L && window.second == 0L) {\n            getWindow(ZonedDateTime.now())\n        } else {\n            window\n        }\n        val nextUpdate = calculateNextUpdate(manga, interval, dateTime, currentWindow)\n\n        return MangaUpdate(id = manga.id, nextUpdate = nextUpdate, fetchInterval = interval)\n    }\n\n    fun getWindow(dateTime: ZonedDateTime): Pair<Long, Long> {\n        val today = dateTime.toLocalDate().atStartOfDay(dateTime.zone)\n        val lowerBound = today.minusDays(GRACE_PERIOD)\n        val upperBound = today.plusDays(GRACE_PERIOD)\n        return Pair(lowerBound.toEpochSecond() * 1000, upperBound.toEpochSecond() * 1000 - 1)\n    }\n\n    internal fun calculateInterval(chapters: List<Chapter>, zone: ZoneId): Int {\n        val chapterWindow = if (chapters.size <= 8) 3 else 10\n\n        val uploadDates = chapters.asSequence()\n            .filter { it.dateUpload > 0L }\n            .sortedByDescending { it.dateUpload }\n            .map {\n                ZonedDateTime.ofInstant(Instant.ofEpochMilli(it.dateUpload), zone)\n                    .toLocalDate()\n                    .atStartOfDay()\n            }\n            .distinct()\n            .take(chapterWindow)\n            .toList()\n\n        val fetchDates = chapters.asSequence()\n            .sortedByDescending { it.dateFetch }\n            .map {\n                ZonedDateTime.ofInstant(Instant.ofEpochMilli(it.dateFetch), zone)\n                    .toLocalDate()\n                    .atStartOfDay()\n            }\n            .distinct()\n            .take(chapterWindow)\n            .toList()\n\n        val interval = when {\n            // Enough upload date from source\n            uploadDates.size >= 3 -> {\n                val uploadDelta = uploadDates.last().until(uploadDates.first(), ChronoUnit.DAYS)\n                val uploadPeriod = uploadDates.indexOf(uploadDates.last())\n                uploadDelta.floorDiv(uploadPeriod).toInt()\n            }\n            // Enough fetch date from client\n            fetchDates.size >= 3 -> {\n                val fetchDelta = fetchDates.last().until(fetchDates.first(), ChronoUnit.DAYS)\n                val uploadPeriod = fetchDates.indexOf(fetchDates.last())\n                fetchDelta.floorDiv(uploadPeriod).toInt()\n            }\n            // Default to 7 days\n            else -> 7\n        }\n\n        return interval.coerceIn(1, MAX_INTERVAL)\n    }\n\n    private fun calculateNextUpdate(\n        manga: Manga,\n        interval: Int,\n        dateTime: ZonedDateTime,\n        window: Pair<Long, Long>,\n    ): Long {\n        if (manga.nextUpdate in window.first.rangeTo(window.second + 1)) {\n            return manga.nextUpdate\n        }\n\n        val latestDate = ZonedDateTime.ofInstant(\n            if (manga.lastUpdate > 0) Instant.ofEpochMilli(manga.lastUpdate) else Instant.now(),\n            dateTime.zone,\n        )\n            .toLocalDate()\n            .atStartOfDay()\n        val timeSinceLatest = ChronoUnit.DAYS.between(latestDate, dateTime).toInt()\n        val cycle = timeSinceLatest.floorDiv(\n            interval.absoluteValue.takeIf { interval < 0 }\n                ?: increaseInterval(interval, timeSinceLatest, increaseWhenOver = 10),\n        )\n        return latestDate.plusDays((cycle + 1) * interval.absoluteValue.toLong()).toEpochSecond(dateTime.offset) * 1000\n    }\n\n    private fun increaseInterval(delta: Int, timeSinceLatest: Int, increaseWhenOver: Int): Int {\n        if (delta >= MAX_INTERVAL) return MAX_INTERVAL\n\n        // double delta again if missed more than 9 check in new delta\n        val cycle = timeSinceLatest.floorDiv(delta) + 1\n        return if (cycle > increaseWhenOver) {\n            increaseInterval(delta * 2, timeSinceLatest, increaseWhenOver)\n        } else {\n            delta\n        }\n    }\n\n    companion object {\n        const val MAX_INTERVAL = 28\n\n        private const val GRACE_PERIOD = 1L\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/NetworkToLocalManga.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass NetworkToLocalManga(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(manga: Manga): Manga {\n        val localManga = getManga(manga.url, manga.source)\n        return when {\n            localManga == null -> {\n                val id = insertManga(manga)\n                manga.copy(id = id!!)\n            }\n            !localManga.favorite -> {\n                // if the manga isn't a favorite, set its display title from source\n                // if it later becomes a favorite, updated title will go to db\n                localManga.copy(title = manga.title)\n            }\n            else -> {\n                localManga\n            }\n        }\n    }\n\n    private suspend fun getManga(url: String, sourceId: Long): Manga? {\n        return mangaRepository.getMangaByUrlAndSourceId(url, sourceId)\n    }\n\n    private suspend fun insertManga(manga: Manga): Long? {\n        return mangaRepository.insertManga(manga)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/ResetMangaViewerFlags.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass ResetMangaViewerFlags(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun await(): Boolean {\n        return mangaRepository.resetMangaViewerFlags()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/interactor/SetMangaChapterFlags.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.entries.manga.repository.MangaRepository\n\nclass SetMangaChapterFlags(\n    private val mangaRepository: MangaRepository,\n) {\n\n    suspend fun awaitSetDownloadedFilter(manga: Manga, flag: Long): Boolean {\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = manga.id,\n                chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_DOWNLOADED_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetUnreadFilter(manga: Manga, flag: Long): Boolean {\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = manga.id,\n                chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_UNREAD_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetBookmarkFilter(manga: Manga, flag: Long): Boolean {\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = manga.id,\n                chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_BOOKMARKED_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetDisplayMode(manga: Manga, flag: Long): Boolean {\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = manga.id,\n                chapterFlags = manga.chapterFlags.setFlag(flag, Manga.CHAPTER_DISPLAY_MASK),\n            ),\n        )\n    }\n\n    suspend fun awaitSetSortingModeOrFlipOrder(manga: Manga, flag: Long): Boolean {\n        val newFlags = manga.chapterFlags.let {\n            if (manga.sorting == flag) {\n                // Just flip the order\n                val orderFlag = if (manga.sortDescending()) {\n                    Manga.CHAPTER_SORT_ASC\n                } else {\n                    Manga.CHAPTER_SORT_DESC\n                }\n                it.setFlag(orderFlag, Manga.CHAPTER_SORT_DIR_MASK)\n            } else {\n                // Set new flag with ascending order\n                it\n                    .setFlag(flag, Manga.CHAPTER_SORTING_MASK)\n                    .setFlag(Manga.CHAPTER_SORT_ASC, Manga.CHAPTER_SORT_DIR_MASK)\n            }\n        }\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = manga.id,\n                chapterFlags = newFlags,\n            ),\n        )\n    }\n\n    suspend fun awaitSetAllFlags(\n        mangaId: Long,\n        unreadFilter: Long,\n        downloadedFilter: Long,\n        bookmarkedFilter: Long,\n        sortingMode: Long,\n        sortingDirection: Long,\n        displayMode: Long,\n    ): Boolean {\n        return mangaRepository.updateManga(\n            MangaUpdate(\n                id = mangaId,\n                chapterFlags = 0L.setFlag(unreadFilter, Manga.CHAPTER_UNREAD_MASK)\n                    .setFlag(downloadedFilter, Manga.CHAPTER_DOWNLOADED_MASK)\n                    .setFlag(bookmarkedFilter, Manga.CHAPTER_BOOKMARKED_MASK)\n                    .setFlag(sortingMode, Manga.CHAPTER_SORTING_MASK)\n                    .setFlag(sortingDirection, Manga.CHAPTER_SORT_DIR_MASK)\n                    .setFlag(displayMode, Manga.CHAPTER_DISPLAY_MASK),\n            ),\n        )\n    }\n\n    private fun Long.setFlag(flag: Long, mask: Long): Long {\n        return this and mask.inv() or (flag and mask)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/model/Manga.kt",
    "content": "package tachiyomi.domain.entries.manga.model\n\nimport androidx.compose.runtime.Immutable\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.source.model.UpdateStrategy\nimport tachiyomi.core.common.preference.TriState\nimport java.io.Serializable\nimport java.time.Instant\n\n@Immutable\ndata class Manga(\n    val id: Long,\n    val source: Long,\n    val favorite: Boolean,\n    val lastUpdate: Long,\n    val nextUpdate: Long,\n    val fetchInterval: Int,\n    val dateAdded: Long,\n    val viewerFlags: Long,\n    val chapterFlags: Long,\n    val coverLastModified: Long,\n    val url: String,\n    val title: String,\n    val artist: String?,\n    val author: String?,\n    val description: String?,\n    val genre: List<String>?,\n    val status: Long,\n    val thumbnailUrl: String?,\n    val updateStrategy: UpdateStrategy,\n    val initialized: Boolean,\n    val lastModifiedAt: Long,\n    val favoriteModifiedAt: Long?,\n    val version: Long,\n) : Serializable {\n\n    val expectedNextUpdate: Instant?\n        get() = nextUpdate\n            .takeIf { status != SManga.COMPLETED.toLong() }\n            ?.let { Instant.ofEpochMilli(it) }\n\n    val sorting: Long\n        get() = chapterFlags and CHAPTER_SORTING_MASK\n\n    val displayMode: Long\n        get() = chapterFlags and CHAPTER_DISPLAY_MASK\n\n    val unreadFilterRaw: Long\n        get() = chapterFlags and CHAPTER_UNREAD_MASK\n\n    val downloadedFilterRaw: Long\n        get() = chapterFlags and CHAPTER_DOWNLOADED_MASK\n\n    val bookmarkedFilterRaw: Long\n        get() = chapterFlags and CHAPTER_BOOKMARKED_MASK\n\n    val unreadFilter: TriState\n        get() = when (unreadFilterRaw) {\n            CHAPTER_SHOW_UNREAD -> TriState.ENABLED_IS\n            CHAPTER_SHOW_READ -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    val bookmarkedFilter: TriState\n        get() = when (bookmarkedFilterRaw) {\n            CHAPTER_SHOW_BOOKMARKED -> TriState.ENABLED_IS\n            CHAPTER_SHOW_NOT_BOOKMARKED -> TriState.ENABLED_NOT\n            else -> TriState.DISABLED\n        }\n\n    fun sortDescending(): Boolean {\n        return chapterFlags and CHAPTER_SORT_DIR_MASK == CHAPTER_SORT_DESC\n    }\n\n    companion object {\n        // Generic filter that does not filter anything\n        const val SHOW_ALL = 0x00000000L\n\n        const val CHAPTER_SORT_DESC = 0x00000000L\n        const val CHAPTER_SORT_ASC = 0x00000001L\n        const val CHAPTER_SORT_DIR_MASK = 0x00000001L\n\n        const val CHAPTER_SHOW_UNREAD = 0x00000002L\n        const val CHAPTER_SHOW_READ = 0x00000004L\n        const val CHAPTER_UNREAD_MASK = 0x00000006L\n\n        const val CHAPTER_SHOW_DOWNLOADED = 0x00000008L\n        const val CHAPTER_SHOW_NOT_DOWNLOADED = 0x00000010L\n        const val CHAPTER_DOWNLOADED_MASK = 0x00000018L\n\n        const val CHAPTER_SHOW_BOOKMARKED = 0x00000020L\n        const val CHAPTER_SHOW_NOT_BOOKMARKED = 0x00000040L\n        const val CHAPTER_BOOKMARKED_MASK = 0x00000060L\n\n        const val CHAPTER_SORTING_SOURCE = 0x00000000L\n        const val CHAPTER_SORTING_NUMBER = 0x00000100L\n        const val CHAPTER_SORTING_UPLOAD_DATE = 0x00000200L\n        const val CHAPTER_SORTING_ALPHABET = 0x00000300L\n        const val CHAPTER_SORTING_MASK = 0x00000300L\n\n        const val CHAPTER_DISPLAY_NAME = 0x00000000L\n        const val CHAPTER_DISPLAY_NUMBER = 0x00100000L\n        const val CHAPTER_DISPLAY_MASK = 0x00100000L\n\n        fun create() = Manga(\n            id = -1L,\n            url = \"\",\n            title = \"\",\n            source = -1L,\n            favorite = false,\n            lastUpdate = 0L,\n            nextUpdate = 0L,\n            fetchInterval = 0,\n            dateAdded = 0L,\n            viewerFlags = 0L,\n            chapterFlags = 0L,\n            coverLastModified = 0L,\n            artist = null,\n            author = null,\n            description = null,\n            genre = null,\n            status = 0L,\n            thumbnailUrl = null,\n            updateStrategy = UpdateStrategy.ALWAYS_UPDATE,\n            initialized = false,\n            lastModifiedAt = 0L,\n            favoriteModifiedAt = null,\n            version = 0L,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/model/MangaCover.kt",
    "content": "package tachiyomi.domain.entries.manga.model\n\nimport tachiyomi.domain.entries.EntryCover\n\n/**\n * Contains the required data for MangaCoverFetcher\n */\ndata class MangaCover(\n    val mangaId: Long,\n    val sourceId: Long,\n    val isMangaFavorite: Boolean,\n    val url: String?,\n    val lastModified: Long,\n) : EntryCover\n\nfun Manga.asMangaCover(): MangaCover {\n    return MangaCover(\n        mangaId = id,\n        sourceId = source,\n        isMangaFavorite = favorite,\n        url = thumbnailUrl,\n        lastModified = coverLastModified,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/model/MangaUpdate.kt",
    "content": "package tachiyomi.domain.entries.manga.model\n\nimport eu.kanade.tachiyomi.source.model.UpdateStrategy\n\ndata class MangaUpdate(\n    val id: Long,\n    val source: Long? = null,\n    val favorite: Boolean? = null,\n    val lastUpdate: Long? = null,\n    val nextUpdate: Long? = null,\n    val fetchInterval: Int? = null,\n    val dateAdded: Long? = null,\n    val viewerFlags: Long? = null,\n    val chapterFlags: Long? = null,\n    val coverLastModified: Long? = null,\n    val url: String? = null,\n    val title: String? = null,\n    val artist: String? = null,\n    val author: String? = null,\n    val description: String? = null,\n    val genre: List<String>? = null,\n    val status: Long? = null,\n    val thumbnailUrl: String? = null,\n    val updateStrategy: UpdateStrategy? = null,\n    val initialized: Boolean? = null,\n    val version: Long? = null,\n)\n\nfun Manga.toMangaUpdate(): MangaUpdate {\n    return MangaUpdate(\n        id = id,\n        source = source,\n        favorite = favorite,\n        lastUpdate = lastUpdate,\n        nextUpdate = nextUpdate,\n        fetchInterval = fetchInterval,\n        dateAdded = dateAdded,\n        viewerFlags = viewerFlags,\n        chapterFlags = chapterFlags,\n        coverLastModified = coverLastModified,\n        url = url,\n        title = title,\n        artist = artist,\n        author = author,\n        description = description,\n        genre = genre,\n        status = status,\n        thumbnailUrl = thumbnailUrl,\n        updateStrategy = updateStrategy,\n        initialized = initialized,\n        version = version,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/entries/manga/repository/MangaRepository.kt",
    "content": "package tachiyomi.domain.entries.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.entries.manga.model.MangaUpdate\nimport tachiyomi.domain.library.manga.LibraryManga\n\ninterface MangaRepository {\n\n    suspend fun getMangaById(id: Long): Manga\n\n    suspend fun getMangaByIdAsFlow(id: Long): Flow<Manga>\n\n    suspend fun getMangaByUrlAndSourceId(url: String, sourceId: Long): Manga?\n\n    fun getMangaByUrlAndSourceIdAsFlow(url: String, sourceId: Long): Flow<Manga?>\n\n    suspend fun getMangaFavorites(): List<Manga>\n\n    suspend fun getReadMangaNotInLibrary(): List<Manga>\n\n    suspend fun getLibraryManga(): List<LibraryManga>\n\n    fun getLibraryMangaAsFlow(): Flow<List<LibraryManga>>\n\n    fun getMangaFavoritesBySourceId(sourceId: Long): Flow<List<Manga>>\n\n    suspend fun getDuplicateLibraryManga(id: Long, title: String): List<Manga>\n\n    suspend fun getUpcomingManga(statuses: Set<Long>): Flow<List<Manga>>\n\n    suspend fun resetMangaViewerFlags(): Boolean\n\n    suspend fun setMangaCategories(mangaId: Long, categoryIds: List<Long>)\n\n    suspend fun insertManga(manga: Manga): Long?\n\n    suspend fun updateManga(update: MangaUpdate): Boolean\n\n    suspend fun updateAllManga(mangaUpdates: List<MangaUpdate>): Boolean\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/interactor/GetAnimeHistory.kt",
    "content": "package tachiyomi.domain.history.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.history.anime.model.AnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport tachiyomi.domain.history.anime.repository.AnimeHistoryRepository\n\nclass GetAnimeHistory(\n    private val repository: AnimeHistoryRepository,\n) {\n\n    suspend fun await(animeId: Long): List<AnimeHistory> {\n        return repository.getHistoryByAnimeId(animeId)\n    }\n\n    fun subscribe(query: String): Flow<List<AnimeHistoryWithRelations>> {\n        return repository.getAnimeHistory(query)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/interactor/GetNextEpisodes.kt",
    "content": "package tachiyomi.domain.history.anime.interactor\n\nimport tachiyomi.domain.entries.anime.interactor.GetAnime\nimport tachiyomi.domain.history.anime.repository.AnimeHistoryRepository\nimport tachiyomi.domain.items.episode.interactor.GetEpisodesByAnimeId\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.service.getEpisodeSort\nimport kotlin.math.max\n\nclass GetNextEpisodes(\n    private val getEpisodesByAnimeId: GetEpisodesByAnimeId,\n    private val getAnime: GetAnime,\n    private val historyRepository: AnimeHistoryRepository,\n) {\n\n    suspend fun await(onlyUnseen: Boolean = true): List<Episode> {\n        val history = historyRepository.getLastAnimeHistory() ?: return emptyList()\n        return await(history.animeId, history.episodeId, onlyUnseen)\n    }\n\n    suspend fun await(animeId: Long, onlyUnseen: Boolean = true): List<Episode> {\n        val anime = getAnime.await(animeId) ?: return emptyList()\n        val episodes = getEpisodesByAnimeId.await(animeId)\n            .sortedWith(getEpisodeSort(anime, sortDescending = false))\n\n        return if (onlyUnseen) {\n            episodes.filterNot { it.seen }\n        } else {\n            episodes\n        }\n    }\n\n    suspend fun await(animeId: Long, fromEpisodeId: Long, onlyUnseen: Boolean = true): List<Episode> {\n        val episodes = await(animeId, onlyUnseen)\n        val currEpisodeIndex = episodes.indexOfFirst { it.id == fromEpisodeId }\n        val nextEpisodes = episodes.subList(max(0, currEpisodeIndex), episodes.size)\n\n        if (onlyUnseen) {\n            return nextEpisodes\n        }\n\n        // The \"next episode\" is either:\n        // - The current episode if it isn't completely seen\n        // - The episodes after the current episode if the current one is completely seen\n        val fromEpisode = episodes.getOrNull(currEpisodeIndex)\n        return if (fromEpisode != null && !fromEpisode.seen) {\n            nextEpisodes\n        } else {\n            nextEpisodes.drop(1)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/interactor/RemoveAnimeHistory.kt",
    "content": "package tachiyomi.domain.history.anime.interactor\n\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\nimport tachiyomi.domain.history.anime.repository.AnimeHistoryRepository\n\nclass RemoveAnimeHistory(\n    private val repository: AnimeHistoryRepository,\n) {\n\n    suspend fun awaitAll(): Boolean {\n        return repository.deleteAllAnimeHistory()\n    }\n\n    suspend fun await(history: AnimeHistoryWithRelations) {\n        repository.resetAnimeHistory(history.id)\n    }\n\n    suspend fun await(animeId: Long) {\n        repository.resetHistoryByAnimeId(animeId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/interactor/UpsertAnimeHistory.kt",
    "content": "package tachiyomi.domain.history.anime.interactor\n\nimport tachiyomi.domain.history.anime.model.AnimeHistoryUpdate\nimport tachiyomi.domain.history.anime.repository.AnimeHistoryRepository\n\nclass UpsertAnimeHistory(\n    private val historyRepository: AnimeHistoryRepository,\n) {\n\n    suspend fun await(historyUpdate: AnimeHistoryUpdate) {\n        historyRepository.upsertAnimeHistory(historyUpdate)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/model/AnimeHistory.kt",
    "content": "package tachiyomi.domain.history.anime.model\n\nimport java.util.Date\n\ndata class AnimeHistory(\n    val id: Long,\n    val episodeId: Long,\n    val seenAt: Date?,\n) {\n    companion object {\n        fun create() = AnimeHistory(\n            id = -1L,\n            episodeId = -1L,\n            seenAt = null,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/model/AnimeHistoryUpdate.kt",
    "content": "package tachiyomi.domain.history.anime.model\n\nimport java.util.Date\n\ndata class AnimeHistoryUpdate(\n    val episodeId: Long,\n    val seenAt: Date,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/model/AnimeHistoryWithRelations.kt",
    "content": "package tachiyomi.domain.history.anime.model\n\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport java.util.Date\n\ndata class AnimeHistoryWithRelations(\n    val id: Long,\n    val episodeId: Long,\n    val animeId: Long,\n    val title: String,\n    val episodeNumber: Double,\n    val seenAt: Date?,\n    val coverData: AnimeCover,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/anime/repository/AnimeHistoryRepository.kt",
    "content": "package tachiyomi.domain.history.anime.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.history.anime.model.AnimeHistory\nimport tachiyomi.domain.history.anime.model.AnimeHistoryUpdate\nimport tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations\n\ninterface AnimeHistoryRepository {\n\n    fun getAnimeHistory(query: String): Flow<List<AnimeHistoryWithRelations>>\n\n    suspend fun getLastAnimeHistory(): AnimeHistoryWithRelations?\n\n    suspend fun resetAnimeHistory(historyId: Long)\n\n    suspend fun getHistoryByAnimeId(animeId: Long): List<AnimeHistory>\n\n    suspend fun resetHistoryByAnimeId(animeId: Long)\n\n    suspend fun deleteAllAnimeHistory(): Boolean\n\n    suspend fun upsertAnimeHistory(historyUpdate: AnimeHistoryUpdate)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/interactor/GetMangaHistory.kt",
    "content": "package tachiyomi.domain.history.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.history.manga.model.MangaHistory\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\n\nclass GetMangaHistory(\n    private val repository: MangaHistoryRepository,\n) {\n\n    suspend fun await(mangaId: Long): List<MangaHistory> {\n        return repository.getHistoryByMangaId(mangaId)\n    }\n\n    fun subscribe(query: String): Flow<List<MangaHistoryWithRelations>> {\n        return repository.getMangaHistory(query)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/interactor/GetNextChapters.kt",
    "content": "package tachiyomi.domain.history.manga.interactor\n\nimport tachiyomi.domain.entries.manga.interactor.GetManga\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\nimport tachiyomi.domain.items.chapter.interactor.GetChaptersByMangaId\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.service.getChapterSort\nimport kotlin.math.max\n\nclass GetNextChapters(\n    private val getChaptersByMangaId: GetChaptersByMangaId,\n    private val getManga: GetManga,\n    private val historyRepository: MangaHistoryRepository,\n) {\n\n    suspend fun await(onlyUnread: Boolean = true): List<Chapter> {\n        val history = historyRepository.getLastMangaHistory() ?: return emptyList()\n        return await(history.mangaId, history.chapterId, onlyUnread)\n    }\n\n    suspend fun await(mangaId: Long, onlyUnread: Boolean = true): List<Chapter> {\n        val manga = getManga.await(mangaId) ?: return emptyList()\n        val chapters = getChaptersByMangaId.await(mangaId, applyScanlatorFilter = true)\n            .sortedWith(getChapterSort(manga, sortDescending = false))\n\n        return if (onlyUnread) {\n            chapters.filterNot { it.read }\n        } else {\n            chapters\n        }\n    }\n\n    suspend fun await(mangaId: Long, fromChapterId: Long, onlyUnread: Boolean = true): List<Chapter> {\n        val chapters = await(mangaId, onlyUnread)\n        val currChapterIndex = chapters.indexOfFirst { it.id == fromChapterId }\n        val nextChapters = chapters.subList(max(0, currChapterIndex), chapters.size)\n\n        if (onlyUnread) {\n            return nextChapters\n        }\n\n        // The \"next chapter\" is either:\n        // - The current chapter if it isn't completely read\n        // - The chapters after the current chapter if the current one is completely read\n        val fromChapter = chapters.getOrNull(currChapterIndex)\n        return if (fromChapter != null && !fromChapter.read) {\n            nextChapters\n        } else {\n            nextChapters.drop(1)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/interactor/GetTotalReadDuration.kt",
    "content": "package tachiyomi.domain.history.manga.interactor\n\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\n\nclass GetTotalReadDuration(\n    private val repository: MangaHistoryRepository,\n) {\n\n    suspend fun await(): Long {\n        return repository.getTotalReadDuration()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/interactor/RemoveMangaHistory.kt",
    "content": "package tachiyomi.domain.history.manga.interactor\n\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\n\nclass RemoveMangaHistory(\n    private val repository: MangaHistoryRepository,\n) {\n\n    suspend fun awaitAll(): Boolean {\n        return repository.deleteAllMangaHistory()\n    }\n\n    suspend fun await(history: MangaHistoryWithRelations) {\n        repository.resetMangaHistory(history.id)\n    }\n\n    suspend fun await(mangaId: Long) {\n        repository.resetHistoryByMangaId(mangaId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/interactor/UpsertMangaHistory.kt",
    "content": "package tachiyomi.domain.history.manga.interactor\n\nimport tachiyomi.domain.history.manga.model.MangaHistoryUpdate\nimport tachiyomi.domain.history.manga.repository.MangaHistoryRepository\n\nclass UpsertMangaHistory(\n    private val historyRepository: MangaHistoryRepository,\n) {\n\n    suspend fun await(historyUpdate: MangaHistoryUpdate) {\n        historyRepository.upsertMangaHistory(historyUpdate)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/model/MangaHistory.kt",
    "content": "package tachiyomi.domain.history.manga.model\n\nimport java.util.Date\n\ndata class MangaHistory(\n    val id: Long,\n    val chapterId: Long,\n    val readAt: Date?,\n    val readDuration: Long,\n) {\n    companion object {\n        fun create() = MangaHistory(\n            id = -1L,\n            chapterId = -1L,\n            readAt = null,\n            readDuration = -1L,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/model/MangaHistoryUpdate.kt",
    "content": "package tachiyomi.domain.history.manga.model\n\nimport java.util.Date\n\ndata class MangaHistoryUpdate(\n    val chapterId: Long,\n    val readAt: Date,\n    val sessionReadDuration: Long,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/model/MangaHistoryWithRelations.kt",
    "content": "package tachiyomi.domain.history.manga.model\n\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport java.util.Date\n\ndata class MangaHistoryWithRelations(\n    val id: Long,\n    val chapterId: Long,\n    val mangaId: Long,\n    val title: String,\n    val chapterNumber: Double,\n    val readAt: Date?,\n    val readDuration: Long,\n    val coverData: MangaCover,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/history/manga/repository/MangaHistoryRepository.kt",
    "content": "package tachiyomi.domain.history.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.history.manga.model.MangaHistory\nimport tachiyomi.domain.history.manga.model.MangaHistoryUpdate\nimport tachiyomi.domain.history.manga.model.MangaHistoryWithRelations\n\ninterface MangaHistoryRepository {\n\n    fun getMangaHistory(query: String): Flow<List<MangaHistoryWithRelations>>\n\n    suspend fun getLastMangaHistory(): MangaHistoryWithRelations?\n\n    suspend fun getTotalReadDuration(): Long\n\n    suspend fun getHistoryByMangaId(mangaId: Long): List<MangaHistory>\n\n    suspend fun resetMangaHistory(historyId: Long)\n\n    suspend fun resetHistoryByMangaId(mangaId: Long)\n\n    suspend fun deleteAllMangaHistory(): Boolean\n\n    suspend fun upsertMangaHistory(historyUpdate: MangaHistoryUpdate)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/interactor/GetChapter.kt",
    "content": "package tachiyomi.domain.items.chapter.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass GetChapter(\n    private val chapterRepository: ChapterRepository,\n) {\n\n    suspend fun await(id: Long): Chapter? {\n        return try {\n            chapterRepository.getChapterById(id)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    suspend fun await(url: String, mangaId: Long): Chapter? {\n        return try {\n            chapterRepository.getChapterByUrlAndMangaId(url, mangaId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/interactor/GetChapterByUrlAndMangaId.kt",
    "content": "package tachiyomi.domain.items.chapter.interactor\n\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass GetChapterByUrlAndMangaId(\n    private val chapterRepository: ChapterRepository,\n) {\n\n    suspend fun await(url: String, sourceId: Long): Chapter? {\n        return try {\n            chapterRepository.getChapterByUrlAndMangaId(url, sourceId)\n        } catch (e: Exception) {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/interactor/GetChaptersByMangaId.kt",
    "content": "package tachiyomi.domain.items.chapter.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass GetChaptersByMangaId(\n    private val chapterRepository: ChapterRepository,\n) {\n\n    suspend fun await(mangaId: Long, applyScanlatorFilter: Boolean = false): List<Chapter> {\n        return try {\n            chapterRepository.getChapterByMangaId(mangaId, applyScanlatorFilter)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/interactor/SetMangaDefaultChapterFlags.kt",
    "content": "package tachiyomi.domain.items.chapter.interactor\n\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.entries.manga.interactor.GetMangaFavorites\nimport tachiyomi.domain.entries.manga.interactor.SetMangaChapterFlags\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass SetMangaDefaultChapterFlags(\n    private val libraryPreferences: LibraryPreferences,\n    private val setMangaChapterFlags: SetMangaChapterFlags,\n    private val getFavorites: GetMangaFavorites,\n) {\n\n    suspend fun await(manga: Manga) {\n        withNonCancellableContext {\n            with(libraryPreferences) {\n                setMangaChapterFlags.awaitSetAllFlags(\n                    mangaId = manga.id,\n                    unreadFilter = filterChapterByRead().get(),\n                    downloadedFilter = filterChapterByDownloaded().get(),\n                    bookmarkedFilter = filterChapterByBookmarked().get(),\n                    sortingMode = sortChapterBySourceOrNumber().get(),\n                    sortingDirection = sortChapterByAscendingOrDescending().get(),\n                    displayMode = displayChapterByNameOrNumber().get(),\n                )\n            }\n        }\n    }\n\n    suspend fun awaitAll() {\n        withNonCancellableContext {\n            getFavorites.await().forEach { await(it) }\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/interactor/ShouldUpdateDbChapter.kt",
    "content": "package tachiyomi.domain.items.chapter.interactor\n\nimport tachiyomi.domain.items.chapter.model.Chapter\n\nclass ShouldUpdateDbChapter {\n\n    fun await(dbChapter: Chapter, sourceChapter: Chapter): Boolean {\n        return dbChapter.scanlator != sourceChapter.scanlator ||\n            dbChapter.name != sourceChapter.name ||\n            dbChapter.dateUpload != sourceChapter.dateUpload ||\n            dbChapter.chapterNumber != sourceChapter.chapterNumber ||\n            dbChapter.sourceOrder != sourceChapter.sourceOrder\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/interactor/UpdateChapter.kt",
    "content": "package tachiyomi.domain.items.chapter.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\nimport tachiyomi.domain.items.chapter.repository.ChapterRepository\n\nclass UpdateChapter(\n    private val chapterRepository: ChapterRepository,\n) {\n\n    suspend fun await(chapterUpdate: ChapterUpdate) {\n        try {\n            chapterRepository.updateChapter(chapterUpdate)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    suspend fun awaitAll(chapterUpdates: List<ChapterUpdate>) {\n        try {\n            chapterRepository.updateAllChapters(chapterUpdates)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/model/Chapter.kt",
    "content": "package tachiyomi.domain.items.chapter.model\n\ndata class Chapter(\n    val id: Long,\n    val mangaId: Long,\n    val read: Boolean,\n    val bookmark: Boolean,\n    val lastPageRead: Long,\n    val dateFetch: Long,\n    val sourceOrder: Long,\n    val url: String,\n    val name: String,\n    val dateUpload: Long,\n    val chapterNumber: Double,\n    val scanlator: String?,\n    val lastModifiedAt: Long,\n    val version: Long,\n) {\n    val isRecognizedNumber: Boolean\n        get() = chapterNumber >= 0f\n\n    fun copyFrom(other: Chapter): Chapter {\n        return copy(\n            name = other.name,\n            url = other.url,\n            dateUpload = other.dateUpload,\n            chapterNumber = other.chapterNumber,\n            scanlator = other.scanlator?.ifBlank { null },\n        )\n    }\n\n    companion object {\n        fun create() = Chapter(\n            id = -1,\n            mangaId = -1,\n            read = false,\n            bookmark = false,\n            lastPageRead = 0,\n            dateFetch = 0,\n            sourceOrder = 0,\n            url = \"\",\n            name = \"\",\n            dateUpload = -1,\n            chapterNumber = -1.0,\n            scanlator = null,\n            lastModifiedAt = 0,\n            version = 1,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/model/ChapterUpdate.kt",
    "content": "package tachiyomi.domain.items.chapter.model\n\ndata class ChapterUpdate(\n    val id: Long,\n    val mangaId: Long? = null,\n    val read: Boolean? = null,\n    val bookmark: Boolean? = null,\n    val lastPageRead: Long? = null,\n    val dateFetch: Long? = null,\n    val sourceOrder: Long? = null,\n    val url: String? = null,\n    val name: String? = null,\n    val dateUpload: Long? = null,\n    val chapterNumber: Double? = null,\n    val scanlator: String? = null,\n    val version: Long? = null,\n)\n\nfun Chapter.toChapterUpdate(): ChapterUpdate {\n    return ChapterUpdate(\n        id,\n        mangaId,\n        read,\n        bookmark,\n        lastPageRead,\n        dateFetch,\n        sourceOrder,\n        url,\n        name,\n        dateUpload,\n        chapterNumber,\n        scanlator,\n        version,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/model/NoChaptersException.kt",
    "content": "package tachiyomi.domain.items.chapter.model\n\nclass NoChaptersException : Exception()\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/repository/ChapterRepository.kt",
    "content": "package tachiyomi.domain.items.chapter.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.model.ChapterUpdate\n\ninterface ChapterRepository {\n\n    suspend fun addAllChapters(chapters: List<Chapter>): List<Chapter>\n\n    suspend fun updateChapter(chapterUpdate: ChapterUpdate)\n\n    suspend fun updateAllChapters(chapterUpdates: List<ChapterUpdate>)\n\n    suspend fun removeChaptersWithIds(chapterIds: List<Long>)\n\n    suspend fun getChapterByMangaId(mangaId: Long, applyScanlatorFilter: Boolean = false): List<Chapter>\n\n    suspend fun getScanlatorsByMangaId(mangaId: Long): List<String>\n\n    fun getScanlatorsByMangaIdAsFlow(mangaId: Long): Flow<List<String>>\n\n    suspend fun getBookmarkedChaptersByMangaId(mangaId: Long): List<Chapter>\n\n    suspend fun getChapterById(id: Long): Chapter?\n\n    suspend fun getChapterByMangaIdAsFlow(mangaId: Long, applyScanlatorFilter: Boolean = false): Flow<List<Chapter>>\n\n    suspend fun getChapterByUrlAndMangaId(url: String, mangaId: Long): Chapter?\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/service/ChapterRecognition.kt",
    "content": "package tachiyomi.domain.items.chapter.service\n\n/**\n * -R> = regex conversion.\n */\nobject ChapterRecognition {\n\n    private const val NUMBER_PATTERN = \"\"\"([0-9]+)(\\.[0-9]+)?(\\.?[a-z]+)?\"\"\"\n\n    /**\n     * All cases with Ch.xx\n     * Mokushiroku Alice Vol.1 Ch. 4: Misrepresentation -R> 4\n     */\n    private val basic = Regex(\"\"\"(?<=ch\\.) *$NUMBER_PATTERN\"\"\")\n\n    /**\n     * Example: Bleach 567: Down With Snowwhite -R> 567\n     */\n    private val number = Regex(NUMBER_PATTERN)\n\n    /**\n     * Regex used to remove unwanted tags\n     * Example Prison School 12 v.1 vol004 version1243 volume64 -R> Prison School 12\n     */\n    private val unwanted = Regex(\"\"\"\\b(?:v|ver|vol|version|volume|season|s)[^a-z]?[0-9]+\"\"\")\n\n    /**\n     * Regex used to remove unwanted whitespace\n     * Example One Piece 12 special -R> One Piece 12special\n     */\n    private val unwantedWhiteSpace = Regex(\"\"\"\\s(?=extra|special|omake)\"\"\")\n\n    fun parseChapterNumber(mangaTitle: String, chapterName: String, chapterNumber: Double? = null): Double {\n        // If chapter number is known return.\n        if (chapterNumber != null && (chapterNumber == -2.0 || chapterNumber > -1.0)) {\n            return chapterNumber\n        }\n\n        // Get chapter title with lower case\n        val cleanChapterName = chapterName.lowercase()\n            // Remove manga title from chapter title.\n            .replace(mangaTitle.lowercase(), \"\").trim()\n            // Remove comma's or hyphens.\n            .replace(',', '.')\n            .replace('-', '.')\n            // Remove unwanted white spaces.\n            .replace(unwantedWhiteSpace, \"\")\n\n        val numberMatch = number.findAll(cleanChapterName)\n\n        when {\n            numberMatch.none() -> {\n                return chapterNumber ?: -1.0\n            }\n            numberMatch.count() > 1 -> {\n                // Remove unwanted tags.\n                unwanted.replace(cleanChapterName, \"\").let { name ->\n                    // Check base case ch.xx\n                    basic.find(name)?.let { return getChapterNumberFromMatch(it) }\n\n                    // need to find again first number might already removed\n                    number.find(name)?.let { return getChapterNumberFromMatch(it) }\n                }\n            }\n        }\n\n        // return the first number encountered\n        return getChapterNumberFromMatch(numberMatch.first())\n    }\n\n    /**\n     * Check if chapter number is found and return it\n     * @param match result of regex\n     * @return chapter number if found else null\n     */\n    private fun getChapterNumberFromMatch(match: MatchResult): Double {\n        return match.let {\n            val initial = it.groups[1]?.value?.toDouble()!!\n            val subChapterDecimal = it.groups[2]?.value\n            val subChapterAlpha = it.groups[3]?.value\n            val addition = checkForDecimal(subChapterDecimal, subChapterAlpha)\n            initial.plus(addition)\n        }\n    }\n\n    /**\n     * Check for decimal in received strings\n     * @param decimal decimal value of regex\n     * @param alpha alpha value of regex\n     * @return decimal/alpha float value\n     */\n    private fun checkForDecimal(decimal: String?, alpha: String?): Double {\n        if (!decimal.isNullOrEmpty()) {\n            return decimal.toDouble()\n        }\n\n        if (!alpha.isNullOrEmpty()) {\n            if (alpha.contains(\"extra\")) {\n                return 0.99\n            }\n\n            if (alpha.contains(\"omake\")) {\n                return 0.98\n            }\n\n            if (alpha.contains(\"special\")) {\n                return 0.97\n            }\n\n            val trimmedAlpha = alpha.trimStart('.')\n            if (trimmedAlpha.length == 1) {\n                return parseAlphaPostFix(trimmedAlpha[0])\n            }\n        }\n\n        return 0.0\n    }\n\n    /**\n     * x.a -> x.1, x.b -> x.2, etc\n     */\n    private fun parseAlphaPostFix(alpha: Char): Double {\n        val number = alpha.code - ('a'.code - 1)\n        if (number >= 10) return 0.0\n        return number / 10.0\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/service/ChapterSorter.kt",
    "content": "package tachiyomi.domain.items.chapter.service\n\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.model.Chapter\n\nfun getChapterSort(manga: Manga, sortDescending: Boolean = manga.sortDescending()): (\n    Chapter,\n    Chapter,\n) -> Int {\n    return when (manga.sorting) {\n        Manga.CHAPTER_SORTING_SOURCE -> when (sortDescending) {\n            true -> { c1, c2 -> c1.sourceOrder.compareTo(c2.sourceOrder) }\n            false -> { c1, c2 -> c2.sourceOrder.compareTo(c1.sourceOrder) }\n        }\n        Manga.CHAPTER_SORTING_NUMBER -> when (sortDescending) {\n            true -> { c1, c2 -> c2.chapterNumber.compareTo(c1.chapterNumber) }\n            false -> { c1, c2 -> c1.chapterNumber.compareTo(c2.chapterNumber) }\n        }\n        Manga.CHAPTER_SORTING_UPLOAD_DATE -> when (sortDescending) {\n            true -> { c1, c2 -> c2.dateUpload.compareTo(c1.dateUpload) }\n            false -> { c1, c2 -> c1.dateUpload.compareTo(c2.dateUpload) }\n        }\n        Manga.CHAPTER_SORTING_ALPHABET -> when (sortDescending) {\n            true -> { c1, c2 -> c2.name.compareToWithCollator(c1.name) }\n            false -> { c1, c2 -> c1.name.compareToWithCollator(c2.name) }\n        }\n        else -> throw NotImplementedError(\"Invalid chapter sorting method: ${manga.sorting}\")\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/chapter/service/MissingChapters.kt",
    "content": "package tachiyomi.domain.items.chapter.service\n\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport kotlin.math.floor\n\nfun List<Double>.missingChaptersCount(): Int {\n    if (this.isEmpty()) {\n        return 0\n    }\n\n    val items = this\n        // Ignore unknown item numbers\n        .filter { it != -1.0 }\n        // Convert to integers, as we cannot check if 16.5 is missing\n        .map(Double::toInt)\n        // Only keep unique chapters so that -1 or 16 are not counted multiple times\n        .distinct()\n        .sorted()\n\n    if (items.isEmpty()) {\n        return 0\n    }\n\n    var missingChaptersCount = 0\n    var previousChapter = 0 // The actual chapter number, not the array index\n\n    // We go from 0 to lastChapter - Make sure to use the current index instead of the value\n    for (i in items.indices) {\n        val currentChapter = items[i]\n        if (currentChapter > previousChapter + 1) {\n            // Add the amount of missing chapters\n            missingChaptersCount += currentChapter - previousChapter - 1\n        }\n        previousChapter = currentChapter\n    }\n\n    return missingChaptersCount\n}\n\nfun calculateChapterGap(higherChapter: Chapter?, lowerChapter: Chapter?): Int {\n    if (higherChapter == null || lowerChapter == null) return 0\n    if (!higherChapter.isRecognizedNumber || !lowerChapter.isRecognizedNumber) return 0\n    return calculateChapterGap(higherChapter.chapterNumber, lowerChapter.chapterNumber)\n}\n\nfun calculateChapterGap(higherChapterNumber: Double, lowerChapterNumber: Double): Int {\n    if (higherChapterNumber < 0.0 || lowerChapterNumber < 0.0) return 0\n    return floor(higherChapterNumber).toInt() - floor(lowerChapterNumber).toInt() - 1\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/interactor/GetEpisode.kt",
    "content": "package tachiyomi.domain.items.episode.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass GetEpisode(\n    private val episodeRepository: EpisodeRepository,\n) {\n\n    suspend fun await(id: Long): Episode? {\n        return try {\n            episodeRepository.getEpisodeById(id)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    suspend fun await(url: String, animeId: Long): Episode? {\n        return try {\n            episodeRepository.getEpisodeByUrlAndAnimeId(url, animeId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/interactor/GetEpisodeByUrlAndAnimeId.kt",
    "content": "package tachiyomi.domain.items.episode.interactor\n\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass GetEpisodeByUrlAndAnimeId(\n    private val episodeRepository: EpisodeRepository,\n) {\n\n    suspend fun await(url: String, sourceId: Long): Episode? {\n        return try {\n            episodeRepository.getEpisodeByUrlAndAnimeId(url, sourceId)\n        } catch (e: Exception) {\n            null\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/interactor/GetEpisodesByAnimeId.kt",
    "content": "package tachiyomi.domain.items.episode.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass GetEpisodesByAnimeId(\n    private val episodeRepository: EpisodeRepository,\n) {\n\n    suspend fun await(animeId: Long): List<Episode> {\n        return try {\n            episodeRepository.getEpisodeByAnimeId(animeId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/interactor/SetAnimeDefaultEpisodeFlags.kt",
    "content": "package tachiyomi.domain.items.episode.interactor\n\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeFavorites\nimport tachiyomi.domain.entries.anime.interactor.SetAnimeEpisodeFlags\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass SetAnimeDefaultEpisodeFlags(\n    private val libraryPreferences: LibraryPreferences,\n    private val setAnimeEpisodeFlags: SetAnimeEpisodeFlags,\n    private val getFavorites: GetAnimeFavorites,\n) {\n\n    suspend fun await(anime: Anime) {\n        withNonCancellableContext {\n            with(libraryPreferences) {\n                setAnimeEpisodeFlags.awaitSetAllFlags(\n                    animeId = anime.id,\n                    unseenFilter = filterEpisodeBySeen().get(),\n                    downloadedFilter = filterEpisodeByDownloaded().get(),\n                    bookmarkedFilter = filterEpisodeByBookmarked().get(),\n                    fillermarkedFilter = filterEpisodeByFillermarked().get(),\n                    sortingMode = sortEpisodeBySourceOrNumber().get(),\n                    sortingDirection = sortEpisodeByAscendingOrDescending().get(),\n                    displayMode = displayEpisodeByNameOrNumber().get(),\n                    showPreviews = showEpisodeThumbnailPreviews().get(),\n                    showSummaries = showEpisodeSummaries().get(),\n                )\n            }\n        }\n    }\n\n    suspend fun awaitAll() {\n        withNonCancellableContext {\n            getFavorites.await().forEach { await(it) }\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/interactor/ShouldUpdateDbEpisode.kt",
    "content": "package tachiyomi.domain.items.episode.interactor\n\nimport tachiyomi.domain.items.episode.model.Episode\n\nclass ShouldUpdateDbEpisode {\n\n    fun await(dbEpisode: Episode, sourceEpisode: Episode): Boolean {\n        return dbEpisode.scanlator != sourceEpisode.scanlator ||\n            dbEpisode.name != sourceEpisode.name ||\n            dbEpisode.dateUpload != sourceEpisode.dateUpload ||\n            dbEpisode.episodeNumber != sourceEpisode.episodeNumber ||\n            dbEpisode.sourceOrder != sourceEpisode.sourceOrder ||\n            dbEpisode.summary != sourceEpisode.summary ||\n            dbEpisode.fillermark != sourceEpisode.fillermark ||\n            dbEpisode.previewUrl != sourceEpisode.previewUrl\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/interactor/UpdateEpisode.kt",
    "content": "package tachiyomi.domain.items.episode.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\nimport tachiyomi.domain.items.episode.repository.EpisodeRepository\n\nclass UpdateEpisode(\n    private val episodeRepository: EpisodeRepository,\n) {\n\n    suspend fun await(episodeUpdate: EpisodeUpdate) {\n        try {\n            episodeRepository.updateEpisode(episodeUpdate)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    suspend fun awaitAll(episodeUpdates: List<EpisodeUpdate>) {\n        try {\n            episodeRepository.updateAllEpisodes(episodeUpdates)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/model/Episode.kt",
    "content": "package tachiyomi.domain.items.episode.model\n\ndata class Episode(\n    val id: Long,\n    val animeId: Long,\n    val seen: Boolean,\n    val bookmark: Boolean,\n    val fillermark: Boolean,\n    val lastSecondSeen: Long,\n    val totalSeconds: Long,\n    val dateFetch: Long,\n    val sourceOrder: Long,\n    val url: String,\n    val name: String,\n    val dateUpload: Long,\n    val episodeNumber: Double,\n    val scanlator: String?,\n    val summary: String?,\n    val previewUrl: String?,\n    val lastModifiedAt: Long,\n    val version: Long,\n) {\n    val isRecognizedNumber: Boolean\n        get() = episodeNumber >= 0f\n\n    fun copyFrom(other: Episode): Episode {\n        return copy(\n            name = other.name,\n            url = other.url,\n            dateUpload = other.dateUpload,\n            episodeNumber = other.episodeNumber,\n            fillermark = other.fillermark,\n            scanlator = other.scanlator?.ifBlank { null },\n            summary = other.summary?.ifBlank { null },\n            previewUrl = other.previewUrl?.ifBlank { null },\n        )\n    }\n\n    companion object {\n        fun create() = Episode(\n            id = -1,\n            animeId = -1,\n            seen = false,\n            bookmark = false,\n            fillermark = false,\n            lastSecondSeen = 0,\n            totalSeconds = 0,\n            dateFetch = 0,\n            sourceOrder = 0,\n            url = \"\",\n            name = \"\",\n            dateUpload = -1,\n            episodeNumber = -1.0,\n            scanlator = null,\n            summary = null,\n            previewUrl = null,\n            lastModifiedAt = 0,\n            version = 1,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/model/EpisodeUpdate.kt",
    "content": "package tachiyomi.domain.items.episode.model\n\ndata class EpisodeUpdate(\n    val id: Long,\n    val animeId: Long? = null,\n    val seen: Boolean? = null,\n    val bookmark: Boolean? = null,\n    val fillermark: Boolean? = null,\n    val lastSecondSeen: Long? = null,\n    val totalSeconds: Long? = null,\n    val dateFetch: Long? = null,\n    val sourceOrder: Long? = null,\n    val url: String? = null,\n    val name: String? = null,\n    val dateUpload: Long? = null,\n    val episodeNumber: Double? = null,\n    val scanlator: String? = null,\n    val summary: String? = null,\n    val previewUrl: String? = null,\n    val version: Long? = null,\n)\n\nfun Episode.toEpisodeUpdate(): EpisodeUpdate {\n    return EpisodeUpdate(\n        id,\n        animeId,\n        seen,\n        bookmark,\n        fillermark,\n        lastSecondSeen,\n        totalSeconds,\n        dateFetch,\n        sourceOrder,\n        url,\n        name,\n        dateUpload,\n        episodeNumber,\n        scanlator,\n        summary,\n        previewUrl,\n        version,\n    )\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/model/NoEpisodesException.kt",
    "content": "package tachiyomi.domain.items.episode.model\n\nclass NoEpisodesException : Exception()\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/repository/EpisodeRepository.kt",
    "content": "package tachiyomi.domain.items.episode.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.model.EpisodeUpdate\n\ninterface EpisodeRepository {\n\n    suspend fun addAllEpisodes(episodes: List<Episode>): List<Episode>\n\n    suspend fun updateEpisode(episodeUpdate: EpisodeUpdate)\n\n    suspend fun updateAllEpisodes(episodeUpdates: List<EpisodeUpdate>)\n\n    suspend fun removeEpisodesWithIds(episodeIds: List<Long>)\n\n    suspend fun getEpisodeByAnimeId(animeId: Long): List<Episode>\n\n    suspend fun getBookmarkedEpisodesByAnimeId(animeId: Long): List<Episode>\n\n    suspend fun getEpisodeById(id: Long): Episode?\n\n    suspend fun getEpisodeByAnimeIdAsFlow(animeId: Long): Flow<List<Episode>>\n\n    suspend fun getEpisodeByUrlAndAnimeId(url: String, animeId: Long): Episode?\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/service/EpisodeRecognition.kt",
    "content": "package tachiyomi.domain.items.episode.service\n\n/**\n * -R> = regex conversion.\n */\nobject EpisodeRecognition {\n\n    private const val NUMBER_PATTERN = \"\"\"([0-9]+)(\\.[0-9]+)?(\\.?[a-z]+)?\"\"\"\n\n    /**\n     * All cases with e.xx, exx, episode xx, or ep xx\n     * kaguya-sama wa kokurasetai - s01e01v2 (BD 1080p HEVC) -R> 01\n     */\n    private val basic = Regex(\"\"\"(?<=\\be\\.|\\be|episode|\\bep) *$NUMBER_PATTERN\"\"\")\n\n    /**\n     * Example: Bleach 567: Down With Snowwhite -R> 567\n     */\n    private val number = Regex(NUMBER_PATTERN)\n\n    /**\n     * Regex to remove tags\n     * Example: [flugel] kaguya-sama wa kokurasetai - s01e01v2 (bd 1080p hevc) [multi audio] [80ac7b2e] ->\n     * -> kaguya-sama wa kokurasetai - s01e01v2\n     */\n    private val tagRegex = Regex(\"\"\"^\\[[^\\]]+\\]|\\[[^\\]]+\\]\\s*${'$'}|^\\([^\\)]+\\)|\\([^\\)]+\\)\\s*${'$'}\"\"\")\n\n    /**\n     * Regex used to remove unwanted tags\n     * Example kaguya-sama wa kokurasetai - s01e01v2 1080p ->\n     */\n    private val unwanted = Regex(\"\"\"\\b(?:v|ver|version|season|s)[^a-z]?[0-9]+|\\b\\d+p\\b|hi10\"\"\")\n\n    /**\n     * Regex used to remove unwanted whitespace\n     * Example One Piece 12 special -R> One Piece 12special\n     */\n    private val unwantedWhiteSpace = Regex(\"\"\"\\s(?=extra|special|omake)\"\"\")\n\n    fun parseEpisodeNumber(animeTitle: String, episodeName: String, episodeNumber: Double? = null): Double {\n        // If episode number is known return.\n        if (episodeNumber != null && (episodeNumber == -2.0 || episodeNumber > -1.0)) {\n            return episodeNumber\n        }\n\n        // Get episode title with lower case\n        var cleanEpisodeName = episodeName.lowercase()\n            // Remove anime title from episode title.\n            .replace(animeTitle.lowercase(), \"\").trim()\n            // Remove comma's or hyphens.\n            .replace(',', '.')\n            .replace('-', '.')\n            // Remove unwanted white spaces.\n            .replace(unwantedWhiteSpace, \"\")\n\n        // Remove all tags while they exist\n        while (tagRegex.containsMatchIn(cleanEpisodeName)) {\n            cleanEpisodeName = tagRegex.replace(cleanEpisodeName, \"\")\n        }\n\n        val numberMatch = number.findAll(cleanEpisodeName)\n\n        when {\n            numberMatch.none() -> {\n                return episodeNumber ?: -1.0\n            }\n            numberMatch.count() > 1 -> {\n                // Remove unwanted tags.\n                unwanted.replace(cleanEpisodeName, \"\").let { name ->\n                    // Check base case ep.xx\n                    basic.find(name)?.let { return getEpisodeNumberFromMatch(it) }\n\n                    // need to find again first number might already removed\n                    number.find(name)?.let { return getEpisodeNumberFromMatch(it) }\n                }\n            }\n        }\n\n        return getEpisodeNumberFromMatch(numberMatch.first())\n    }\n\n    /**\n     * Check if episode number is found and return it\n     * @param match result of regex\n     * @return episode number if found else null\n     */\n    private fun getEpisodeNumberFromMatch(match: MatchResult): Double {\n        return match.let {\n            val initial = it.groups[1]?.value?.toDouble()!!\n            val subEpisodeDecimal = it.groups[2]?.value\n            val subEpisodeAlpha = it.groups[3]?.value\n            val addition = checkForDecimal(subEpisodeDecimal, subEpisodeAlpha)\n            initial.plus(addition)\n        }\n    }\n\n    /**\n     * Check for decimal in received strings\n     * @param decimal decimal value of regex\n     * @param alpha alpha value of regex\n     * @return decimal/alpha float value\n     */\n    private fun checkForDecimal(decimal: String?, alpha: String?): Double {\n        if (!decimal.isNullOrEmpty()) {\n            return decimal.toDouble()\n        }\n\n        if (!alpha.isNullOrEmpty()) {\n            if (alpha.contains(\"extra\")) {\n                return 0.99\n            }\n\n            if (alpha.contains(\"omake\")) {\n                return 0.98\n            }\n\n            if (alpha.contains(\"special\")) {\n                return 0.97\n            }\n\n            val trimmedAlpha = alpha.trimStart('.')\n            if (trimmedAlpha.length == 1) {\n                return parseAlphaPostFix(trimmedAlpha[0])\n            }\n        }\n\n        return 0.0\n    }\n\n    /**\n     * x.a -> x.1, x.b -> x.2, etc\n     */\n    private fun parseAlphaPostFix(alpha: Char): Double {\n        val number = alpha.code - ('a'.code - 1)\n        if (number >= 10) return 0.0\n        return number / 10.0\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/service/EpisodeSorter.kt",
    "content": "package tachiyomi.domain.items.episode.service\n\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.model.Episode\n\nfun getEpisodeSort(anime: Anime, sortDescending: Boolean = anime.sortDescending()): (\n    Episode,\n    Episode,\n) -> Int {\n    return when (anime.sorting) {\n        Anime.EPISODE_SORTING_SOURCE -> when (sortDescending) {\n            true -> { e1, e2 -> e1.sourceOrder.compareTo(e2.sourceOrder) }\n            false -> { e1, e2 -> e2.sourceOrder.compareTo(e1.sourceOrder) }\n        }\n        Anime.EPISODE_SORTING_NUMBER -> when (sortDescending) {\n            true -> { e1, e2 -> e2.episodeNumber.compareTo(e1.episodeNumber) }\n            false -> { e1, e2 -> e1.episodeNumber.compareTo(e2.episodeNumber) }\n        }\n        Anime.EPISODE_SORTING_UPLOAD_DATE -> when (sortDescending) {\n            true -> { e1, e2 -> e2.dateUpload.compareTo(e1.dateUpload) }\n            false -> { e1, e2 -> e1.dateUpload.compareTo(e2.dateUpload) }\n        }\n        Anime.EPISODE_SORTING_ALPHABET -> when (sortDescending) {\n            true -> { e1, e2 -> e2.name.compareToWithCollator(e1.name) }\n            false -> { e1, e2 -> e1.name.compareToWithCollator(e2.name) }\n        }\n        else -> throw NotImplementedError(\"Invalid episode sorting method: ${anime.sorting}\")\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/episode/service/MissingEpisodes.kt",
    "content": "package tachiyomi.domain.items.episode.service\n\nimport tachiyomi.domain.items.episode.model.Episode\nimport kotlin.math.floor\n\nfun List<Double>.missingEntriesCount(): Int {\n    if (this.isEmpty()) {\n        return 0\n    }\n\n    val items = this\n        // Ignore unknown item numbers\n        .filter { it != -1.0 }\n        // Convert to integers, as we cannot check if 16.5 is missing\n        .map(Double::toInt)\n        // Only keep unique entries so that -1 or 16 are not counted multiple times\n        .distinct()\n        .sorted()\n\n    if (items.isEmpty()) {\n        return 0\n    }\n\n    var missingEntriesCount = 0\n    var previousEntry = 0 // The actual entry number, not the array index\n\n    // We go from 0 to lastEntry - Make sure to use the current index instead of the value\n    for (i in items.indices) {\n        val currentEntry = items[i]\n        if (currentEntry > previousEntry + 1) {\n            // Add the amount of missing entries\n            missingEntriesCount += currentEntry - previousEntry - 1\n        }\n        previousEntry = currentEntry\n    }\n\n    return missingEntriesCount\n}\n\nfun calculateEpisodeGap(higherEpisode: Episode?, lowerEpisode: Episode?): Int {\n    if (higherEpisode == null || lowerEpisode == null) return 0\n    if (!higherEpisode.isRecognizedNumber || !lowerEpisode.isRecognizedNumber) return 0\n    return calculateEpisodeGap(higherEpisode.episodeNumber, lowerEpisode.episodeNumber)\n}\n\nfun calculateEpisodeGap(higherEpisodeNumber: Double, lowerEpisodeNumber: Double): Int {\n    if (higherEpisodeNumber < 0.0 || lowerEpisodeNumber < 0.0) return 0\n    return floor(higherEpisodeNumber).toInt() - floor(lowerEpisodeNumber).toInt() - 1\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/season/interactor/GetAnimeSeasonsByParentId.kt",
    "content": "package tachiyomi.domain.items.season.interactor\n\nimport aniyomi.domain.anime.SeasonAnime\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\n\nclass GetAnimeSeasonsByParentId(\n    private val animeRepository: AnimeRepository,\n) {\n    suspend fun await(animeId: Long): List<SeasonAnime> {\n        return try {\n            animeRepository.getAnimeSeasonsById(animeId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/season/interactor/SetAnimeDefaultSeasonFlags.kt",
    "content": "package tachiyomi.domain.items.season.interactor\n\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport tachiyomi.core.common.util.lang.withNonCancellableContext\nimport tachiyomi.domain.entries.anime.interactor.GetAnimeFavorites\nimport tachiyomi.domain.entries.anime.interactor.SetAnimeSeasonFlags\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.library.service.LibraryPreferences\n\nclass SetAnimeDefaultSeasonFlags(\n    private val libraryPreferences: LibraryPreferences,\n    private val setAnimeSeasonFlags: SetAnimeSeasonFlags,\n    private val getAnimeFavorites: GetAnimeFavorites,\n) {\n    suspend fun await(anime: Anime) {\n        withNonCancellableContext {\n            with(libraryPreferences) {\n                setAnimeSeasonFlags.awaitSetAllFlags(\n                    animeId = anime.id,\n                    downloadFilter = filterSeasonByDownload().get(),\n                    unseenFilter = filterSeasonByUnseen().get(),\n                    startedFilter = filterSeasonByStarted().get(),\n                    completedFilter = filterSeasonByCompleted().get(),\n                    bookmarkedFilter = filterSeasonByBookmarked().get(),\n                    fillermarkedFilter = filterSeasonByFillermarked().get(),\n                    sortingMode = sortSeasonBySourceOrNumber().get(),\n                    sortingDirection = sortSeasonByAscendingOrDescending().get(),\n                    displayGridMode = SeasonDisplayMode.fromLong(seasonDisplayGridMode().get()),\n                    displayGridSize = seasonDisplayGridSize().get(),\n                    downloadedOverlay = seasonDownloadOverlay().get(),\n                    unseenOverlay = seasonUnseenOverlay().get(),\n                    localOverlay = seasonLocalOverlay().get(),\n                    langOverlay = seasonLangOverlay().get(),\n                    continueOverlay = seasonContinueOverlay().get(),\n                    displayMode = seasonDisplayMode().get(),\n                )\n            }\n        }\n    }\n\n    suspend fun awaitAll() {\n        withNonCancellableContext {\n            getAnimeFavorites.await().forEach { await(it) }\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/season/interactor/ShouldUpdateDbSeason.kt",
    "content": "package tachiyomi.domain.items.season.interactor\n\nimport tachiyomi.domain.entries.anime.model.Anime\n\nclass ShouldUpdateDbSeason {\n    fun await(dbSeason: Anime, sourceSeason: Anime): Boolean {\n        return dbSeason.title != sourceSeason.title ||\n            dbSeason.seasonNumber != sourceSeason.seasonNumber ||\n            dbSeason.seasonSourceOrder != sourceSeason.seasonSourceOrder\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/season/service/SeasonRecognition.kt",
    "content": "package tachiyomi.domain.items.season.service\n\n/**\n * -R> = regex conversion.\n */\nobject SeasonRecognition {\n\n    private const val NUMBER_PATTERN = \"\"\"([0-9]+)(\\.[0-9]+)?(\\.?[a-z]+)?\"\"\"\n\n    /**\n     * All cases with s.xx, s xx, season xx, or sxx\n     * Boku.no.Hero.Academia.S02.1080p-ITH -R> 2\n     */\n    private val basic = Regex(\"\"\"(?<=\\bs\\.|\\bs|season) *$NUMBER_PATTERN\"\"\")\n\n    /**\n     * Example: Boku no Hero Academia 2 -R> 2\n     */\n    private val number = Regex(NUMBER_PATTERN)\n\n    /**\n     * Regex to remove tags\n     * Example: [FLE] Boku no Hero Academia Season 2 (BD Remux 1080p H.264 FLAC) [Dual Audio]\n     */\n    private val tagRegex = Regex(\"\"\"^\\[[^\\]]+\\]|\\[[^\\]]+\\]\\s*${'$'}|^\\([^\\)]+\\)|\\([^\\)]+\\)\\s*${'$'}\"\"\")\n\n    /**\n     * Regex used to remove unwanted qualities and year\n     * Example: Boku no Hero Academia (2017)\n     */\n    private val unwanted = Regex(\"\"\"\\b\\d+p\\b|\\d+x\\d+|Hi10|\\(\\d+\\)\"\"\")\n\n    /**\n     * Regex used to remove unwanted whitespace\n     * Example One Piece 12 special -R> One Piece 12special\n     */\n    private val unwantedWhiteSpace = Regex(\"\"\"\\s(?=extra|special|omake)\"\"\")\n\n    fun parseSeasonNumber(animeTitle: String, seasonName: String, seasonNumber: Double? = null): Double {\n        // If season number is known return.\n        if (seasonNumber != null && (seasonNumber == -2.0 || seasonNumber > -1.0)) {\n            return seasonNumber\n        }\n\n        // Get season title with lower case\n        var cleanSeasonName = seasonName.lowercase()\n            // Remove anime title from season title.\n            .replace(animeTitle.lowercase(), \"\").trim()\n            // Remove comma's or hyphens.\n            .replace(',', '.')\n            .replace('-', '.')\n            // Remove unwanted white spaces.\n            .replace(unwantedWhiteSpace, \"\")\n\n        // Remove all tags while they exist\n        while (tagRegex.containsMatchIn(cleanSeasonName)) {\n            cleanSeasonName = tagRegex.replace(cleanSeasonName, \"\")\n        }\n\n        val numberMatch = number.findAll(cleanSeasonName)\n\n        when {\n            numberMatch.none() -> {\n                return seasonNumber ?: -1.0\n            }\n            numberMatch.count() > 1 -> {\n                // Remove unwanted tags.\n                unwanted.replace(cleanSeasonName, \"\").let { name ->\n                    // Check base case s.xx\n                    basic.find(name)?.let { return getSeasonNumberFromMatch(it) }\n\n                    // need to find again first number might already removed\n                    number.find(name)?.let { return getSeasonNumberFromMatch(it) }\n                }\n            }\n        }\n\n        return getSeasonNumberFromMatch(numberMatch.first())\n    }\n\n    /**\n     * Check if season number is found and return it\n     * @param match result of regex\n     * @return season number if found else null\n     */\n    private fun getSeasonNumberFromMatch(match: MatchResult): Double {\n        return match.let {\n            val initial = it.groups[1]?.value?.toDouble()!!\n            val subSeasonDecimal = it.groups[2]?.value\n            val subSeasonAlpha = it.groups[3]?.value\n            val addition = checkForDecimal(subSeasonDecimal, subSeasonAlpha)\n            initial.plus(addition)\n        }\n    }\n\n    /**\n     * Check for decimal in received strings\n     * @param decimal decimal value of regex\n     * @param alpha alpha value of regex\n     * @return decimal/alpha float value\n     */\n    private fun checkForDecimal(decimal: String?, alpha: String?): Double {\n        if (!decimal.isNullOrEmpty()) {\n            return decimal.toDouble()\n        }\n\n        if (!alpha.isNullOrEmpty()) {\n            if (alpha.contains(\"extra\")) {\n                return 0.99\n            }\n\n            if (alpha.contains(\"omake\")) {\n                return 0.98\n            }\n\n            if (alpha.contains(\"special\")) {\n                return 0.97\n            }\n\n            val trimmedAlpha = alpha.trimStart('.')\n            if (trimmedAlpha.length == 1) {\n                return parseAlphaPostFix(trimmedAlpha[0])\n            }\n        }\n\n        return 0.0\n    }\n\n    /**\n     * x.a -> x.1, x.b -> x.2, etc\n     */\n    private fun parseAlphaPostFix(alpha: Char): Double {\n        val number = alpha.code - ('a'.code - 1)\n        if (number >= 10) return 0.0\n        return number / 10.0\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/items/season/service/SeasonSorter.kt",
    "content": "package tachiyomi.domain.items.season.service\n\nimport aniyomi.domain.anime.SeasonAnime\nimport tachiyomi.core.common.util.lang.compareToWithCollator\nimport tachiyomi.domain.entries.anime.model.Anime\n\nval seasonSortAlphabetically: (SeasonAnime, SeasonAnime) -> Int = { i1, i2 ->\n    i1.anime.title.lowercase().compareToWithCollator(i2.anime.title.lowercase())\n}\n\nfun getSeasonSortComparator(anime: Anime): Comparator<SeasonAnime> = Comparator { s1, s2 ->\n    when (anime.seasonSorting) {\n        Anime.SEASON_SORT_SOURCE -> {\n            s1.anime.seasonSourceOrder.compareTo(s2.anime.seasonSourceOrder)\n        }\n        Anime.SEASON_SORT_SEASON -> {\n            s1.anime.seasonNumber.compareTo(s2.anime.seasonNumber)\n        }\n        Anime.SEASON_SORT_UPLOAD -> {\n            s1.latestUpload.compareTo(s2.latestUpload)\n        }\n        Anime.SEASON_SORT_ALPHABET -> {\n            seasonSortAlphabetically(s1, s2)\n        }\n        Anime.SEASON_SORT_COUNT -> {\n            s1.unseenCount.compareTo(s2.unseenCount)\n        }\n        Anime.SEASON_SORT_LAST_SEEN -> {\n            s1.lastSeen.compareTo(s2.lastSeen)\n        }\n        Anime.SEASON_SORT_FETCHED -> {\n            s1.fetchedAt.compareTo(s2.fetchedAt)\n        }\n        else -> throw NotImplementedError(\"Invalid season sorting method: ${anime.seasonSorting}\")\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/anime/LibraryAnime.kt",
    "content": "package tachiyomi.domain.library.anime\n\nimport tachiyomi.domain.entries.anime.model.Anime\n\ndata class LibraryAnime(\n    val anime: Anime,\n    val category: Long,\n    val totalCount: Long,\n    val seenCount: Long,\n    val bookmarkCount: Long,\n    val fillermarkCount: Long,\n    val latestUpload: Long,\n    val episodeFetchedAt: Long,\n    val lastSeen: Long,\n) {\n    val id: Long = anime.id\n\n    val unseenCount\n        get() = totalCount - seenCount\n\n    val hasBookmarks\n        get() = bookmarkCount > 0\n\n    val hasStarted = seenCount > 0\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/anime/model/AnimeLibrarySortMode.kt",
    "content": "package tachiyomi.domain.library.anime.model\n\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.model.FlagWithMask\nimport tachiyomi.domain.library.model.plus\n\ndata class AnimeLibrarySort(\n    val type: Type,\n    val direction: Direction,\n) : FlagWithMask {\n\n    override val flag: Long\n        get() = type + direction\n\n    override val mask: Long\n        get() = type.mask or direction.mask\n\n    val isAscending: Boolean\n        get() = direction == Direction.Ascending\n\n    sealed class Type(\n        override val flag: Long,\n    ) : FlagWithMask {\n\n        override val mask: Long = 0b00111100L\n\n        data object Alphabetical : Type(0b00000000)\n        data object LastSeen : Type(0b00000100)\n        data object LastUpdate : Type(0b00001000)\n        data object UnseenCount : Type(0b00001100)\n        data object TotalEpisodes : Type(0b00010000)\n        data object LatestEpisode : Type(0b00010100)\n        data object EpisodeFetchDate : Type(0b00011000)\n        data object DateAdded : Type(0b00011100)\n        data object TrackerMean : Type(0b000100000)\n        data object AiringTime : Type(0b00110000)\n        data object Random : Type(0b00111100)\n\n        companion object {\n            fun valueOf(flag: Long): Type {\n                return types.find { type -> type.flag == flag and type.mask } ?: default.type\n            }\n        }\n    }\n\n    sealed class Direction(\n        override val flag: Long,\n    ) : FlagWithMask {\n\n        override val mask: Long = 0b01000000L\n\n        data object Ascending : Direction(0b01000000)\n        data object Descending : Direction(0b00000000)\n\n        companion object {\n            fun valueOf(flag: Long): Direction {\n                return directions.find { direction -> direction.flag == flag and direction.mask } ?: default.direction\n            }\n        }\n    }\n\n    object Serializer {\n        fun deserialize(serialized: String): AnimeLibrarySort {\n            return Companion.deserialize(serialized)\n        }\n\n        fun serialize(value: AnimeLibrarySort): String {\n            return value.serialize()\n        }\n    }\n\n    companion object {\n        val types by lazy {\n            setOf(\n                Type.Alphabetical,\n                Type.LastSeen,\n                Type.LastUpdate,\n                Type.UnseenCount,\n                Type.TotalEpisodes,\n                Type.LatestEpisode,\n                Type.EpisodeFetchDate,\n                Type.DateAdded,\n                Type.TrackerMean,\n                Type.AiringTime,\n                Type.Random,\n            )\n        }\n        val directions by lazy { setOf(Direction.Ascending, Direction.Descending) }\n        val default = AnimeLibrarySort(Type.Alphabetical, Direction.Ascending)\n\n        fun valueOf(flag: Long?): AnimeLibrarySort {\n            if (flag == null) return default\n            return AnimeLibrarySort(\n                Type.valueOf(flag),\n                Direction.valueOf(flag),\n            )\n        }\n\n        fun deserialize(serialized: String): AnimeLibrarySort {\n            if (serialized.isEmpty()) return default\n            return try {\n                val values = serialized.split(\",\")\n                val type = when (values[0]) {\n                    \"ALPHABETICAL\" -> Type.Alphabetical\n                    \"LAST_SEEN\" -> Type.LastSeen\n                    \"LAST_ANIME_UPDATE\" -> Type.LastUpdate\n                    \"UNSEEN_COUNT\" -> Type.UnseenCount\n                    \"TOTAL_EPISODES\" -> Type.TotalEpisodes\n                    \"LATEST_EPISODE\" -> Type.LatestEpisode\n                    \"EPISODE_FETCH_DATE\" -> Type.EpisodeFetchDate\n                    \"DATE_ADDED\" -> Type.DateAdded\n                    \"TRACKER_MEAN\" -> Type.TrackerMean\n                    \"AIRING_TIME\" -> Type.AiringTime\n                    \"RANDOM\" -> Type.Random\n                    else -> Type.Alphabetical\n                }\n                val ascending = if (values[1] == \"ASCENDING\") Direction.Ascending else Direction.Descending\n                AnimeLibrarySort(type, ascending)\n            } catch (e: Exception) {\n                default\n            }\n        }\n    }\n\n    fun serialize(): String {\n        val type = when (type) {\n            Type.Alphabetical -> \"ALPHABETICAL\"\n            Type.LastSeen -> \"LAST_SEEN\"\n            Type.LastUpdate -> \"LAST_ANIME_UPDATE\"\n            Type.UnseenCount -> \"UNSEEN_COUNT\"\n            Type.TotalEpisodes -> \"TOTAL_EPISODES\"\n            Type.LatestEpisode -> \"LATEST_EPISODE\"\n            Type.EpisodeFetchDate -> \"EPISODE_FETCH_DATE\"\n            Type.DateAdded -> \"DATE_ADDED\"\n            Type.TrackerMean -> \"TRACKER_MEAN\"\n            Type.AiringTime -> \"AIRING_TIME\"\n            Type.Random -> \"RANDOM\"\n        }\n        val direction = if (direction == Direction.Ascending) \"ASCENDING\" else \"DESCENDING\"\n        return \"$type,$direction\"\n    }\n}\n\nval Category?.sort: AnimeLibrarySort\n    get() = AnimeLibrarySort.valueOf(this?.flags)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/manga/LibraryManga.kt",
    "content": "package tachiyomi.domain.library.manga\n\nimport tachiyomi.domain.entries.manga.model.Manga\n\ndata class LibraryManga(\n    val manga: Manga,\n    val category: Long,\n    val totalChapters: Long,\n    val readCount: Long,\n    val bookmarkCount: Long,\n    val latestUpload: Long,\n    val chapterFetchedAt: Long,\n    val lastRead: Long,\n) {\n    val id: Long = manga.id\n\n    val unreadCount\n        get() = totalChapters - readCount\n\n    val hasBookmarks\n        get() = bookmarkCount > 0\n\n    val hasStarted = readCount > 0\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/manga/model/MangaLibrarySortMode.kt",
    "content": "package tachiyomi.domain.library.manga.model\n\nimport tachiyomi.domain.category.model.Category\nimport tachiyomi.domain.library.model.FlagWithMask\nimport tachiyomi.domain.library.model.plus\n\ndata class MangaLibrarySort(\n    val type: Type,\n    val direction: Direction,\n) : FlagWithMask {\n\n    override val flag: Long\n        get() = type + direction\n\n    override val mask: Long\n        get() = type.mask or direction.mask\n\n    val isAscending: Boolean\n        get() = direction == Direction.Ascending\n\n    sealed class Type(\n        override val flag: Long,\n    ) : FlagWithMask {\n\n        override val mask: Long = 0b00111100L\n\n        data object Alphabetical : Type(0b00000000)\n        data object LastRead : Type(0b00000100)\n        data object LastUpdate : Type(0b00001000)\n        data object UnreadCount : Type(0b00001100)\n        data object TotalChapters : Type(0b00010000)\n        data object LatestChapter : Type(0b00010100)\n        data object ChapterFetchDate : Type(0b00011000)\n        data object DateAdded : Type(0b00011100)\n        data object TrackerMean : Type(0b000100000)\n        data object Random : Type(0b00111100)\n\n        companion object {\n            fun valueOf(flag: Long): Type {\n                return types.find { type -> type.flag == flag and type.mask } ?: default.type\n            }\n        }\n    }\n\n    sealed class Direction(\n        override val flag: Long,\n    ) : FlagWithMask {\n\n        override val mask: Long = 0b01000000L\n\n        data object Ascending : Direction(0b01000000)\n        data object Descending : Direction(0b00000000)\n\n        companion object {\n            fun valueOf(flag: Long): Direction {\n                return directions.find { direction -> direction.flag == flag and direction.mask } ?: default.direction\n            }\n        }\n    }\n\n    object Serializer {\n        fun deserialize(serialized: String): MangaLibrarySort {\n            return Companion.deserialize(serialized)\n        }\n\n        fun serialize(value: MangaLibrarySort): String {\n            return value.serialize()\n        }\n    }\n\n    companion object {\n        val types by lazy {\n            setOf(\n                Type.Alphabetical,\n                Type.LastRead,\n                Type.LastUpdate,\n                Type.UnreadCount,\n                Type.TotalChapters,\n                Type.LatestChapter,\n                Type.ChapterFetchDate,\n                Type.DateAdded,\n                Type.TrackerMean,\n                Type.Random,\n            )\n        }\n        val directions by lazy { setOf(Direction.Ascending, Direction.Descending) }\n        val default = MangaLibrarySort(Type.Alphabetical, Direction.Ascending)\n\n        fun valueOf(flag: Long?): MangaLibrarySort {\n            if (flag == null) return default\n            return MangaLibrarySort(\n                Type.valueOf(flag),\n                Direction.valueOf(flag),\n            )\n        }\n\n        fun deserialize(serialized: String): MangaLibrarySort {\n            if (serialized.isEmpty()) return default\n            return try {\n                val values = serialized.split(\",\")\n                val type = when (values[0]) {\n                    \"ALPHABETICAL\" -> Type.Alphabetical\n                    \"LAST_READ\" -> Type.LastRead\n                    \"LAST_MANGA_UPDATE\" -> Type.LastUpdate\n                    \"UNREAD_COUNT\" -> Type.UnreadCount\n                    \"TOTAL_CHAPTERS\" -> Type.TotalChapters\n                    \"LATEST_CHAPTER\" -> Type.LatestChapter\n                    \"CHAPTER_FETCH_DATE\" -> Type.ChapterFetchDate\n                    \"DATE_ADDED\" -> Type.DateAdded\n                    \"TRACKER_MEAN\" -> Type.TrackerMean\n                    \"RANDOM\" -> Type.Random\n                    else -> Type.Alphabetical\n                }\n                val ascending = if (values[1] == \"ASCENDING\") Direction.Ascending else Direction.Descending\n                MangaLibrarySort(type, ascending)\n            } catch (e: Exception) {\n                default\n            }\n        }\n    }\n\n    fun serialize(): String {\n        val type = when (type) {\n            Type.Alphabetical -> \"ALPHABETICAL\"\n            Type.LastRead -> \"LAST_READ\"\n            Type.LastUpdate -> \"LAST_MANGA_UPDATE\"\n            Type.UnreadCount -> \"UNREAD_COUNT\"\n            Type.TotalChapters -> \"TOTAL_CHAPTERS\"\n            Type.LatestChapter -> \"LATEST_CHAPTER\"\n            Type.ChapterFetchDate -> \"CHAPTER_FETCH_DATE\"\n            Type.DateAdded -> \"DATE_ADDED\"\n            Type.TrackerMean -> \"TRACKER_MEAN\"\n            Type.Random -> \"RANDOM\"\n        }\n        val direction = if (direction == Direction.Ascending) \"ASCENDING\" else \"DESCENDING\"\n        return \"$type,$direction\"\n    }\n}\n\nval Category?.sort: MangaLibrarySort\n    get() = MangaLibrarySort.valueOf(this?.flags)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/model/Flag.kt",
    "content": "package tachiyomi.domain.library.model\n\ninterface Flag {\n    val flag: Long\n}\n\ninterface Mask {\n    val mask: Long\n}\n\ninterface FlagWithMask : Flag, Mask\n\noperator fun Long.contains(other: Flag): Boolean {\n    return if (other is Mask) {\n        other.flag == this and other.mask\n    } else {\n        other.flag == this\n    }\n}\n\noperator fun Long.plus(other: Flag): Long {\n    return if (other is Mask) {\n        this and other.mask.inv() or (other.flag and other.mask)\n    } else {\n        this or other.flag\n    }\n}\n\noperator fun Flag.plus(other: Flag): Long {\n    return if (other is Mask) {\n        this.flag and other.mask.inv() or (other.flag and other.mask)\n    } else {\n        this.flag or other.flag\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/model/LibraryDisplayMode.kt",
    "content": "package tachiyomi.domain.library.model\n\nsealed interface LibraryDisplayMode {\n\n    data object CompactGrid : LibraryDisplayMode\n    data object ComfortableGrid : LibraryDisplayMode\n    data object List : LibraryDisplayMode\n    data object CoverOnlyGrid : LibraryDisplayMode\n\n    object Serializer {\n        fun deserialize(serialized: String): LibraryDisplayMode {\n            return Companion.deserialize(serialized)\n        }\n\n        fun serialize(value: LibraryDisplayMode): String {\n            return value.serialize()\n        }\n    }\n\n    companion object {\n        val values by lazy { setOf(CompactGrid, ComfortableGrid, List, CoverOnlyGrid) }\n        val default = CompactGrid\n\n        fun deserialize(serialized: String): LibraryDisplayMode {\n            return when (serialized) {\n                \"COMFORTABLE_GRID\" -> ComfortableGrid\n                \"COMPACT_GRID\" -> CompactGrid\n                \"COVER_ONLY_GRID\" -> CoverOnlyGrid\n                \"LIST\" -> List\n                else -> default\n            }\n        }\n    }\n\n    fun serialize(): String {\n        return when (this) {\n            ComfortableGrid -> \"COMFORTABLE_GRID\"\n            CompactGrid -> \"COMPACT_GRID\"\n            CoverOnlyGrid -> \"COVER_ONLY_GRID\"\n            List -> \"LIST\"\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt",
    "content": "package tachiyomi.domain.library.service\n\nimport aniyomi.domain.anime.SeasonDisplayMode\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.getEnum\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.library.anime.model.AnimeLibrarySort\nimport tachiyomi.domain.library.manga.model.MangaLibrarySort\nimport tachiyomi.domain.library.model.LibraryDisplayMode\n\nclass LibraryPreferences(\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun displayMode() = preferenceStore.getObject(\n        \"pref_display_mode_library\",\n        LibraryDisplayMode.default,\n        LibraryDisplayMode.Serializer::serialize,\n        LibraryDisplayMode.Serializer::deserialize,\n    )\n\n    fun mangaSortingMode() = preferenceStore.getObject(\n        \"library_sorting_mode\",\n        MangaLibrarySort.default,\n        MangaLibrarySort.Serializer::serialize,\n        MangaLibrarySort.Serializer::deserialize,\n    )\n\n    fun animeSortingMode() = preferenceStore.getObject(\n        \"animelib_sorting_mode\",\n        AnimeLibrarySort.default,\n        AnimeLibrarySort.Serializer::serialize,\n        AnimeLibrarySort.Serializer::deserialize,\n    )\n\n    fun lastUpdatedTimestamp() = preferenceStore.getLong(Preference.appStateKey(\"library_update_last_timestamp\"), 0L)\n    fun autoUpdateInterval() = preferenceStore.getInt(\"pref_library_update_interval_key\", 0)\n\n    fun autoUpdateDeviceRestrictions() = preferenceStore.getStringSet(\n        \"library_update_restriction\",\n        setOf(\n            DEVICE_ONLY_ON_WIFI,\n        ),\n    )\n\n    fun autoUpdateItemRestrictions() = preferenceStore.getStringSet(\n        \"library_update_manga_restriction\",\n        setOf(\n            ENTRY_HAS_UNVIEWED,\n            ENTRY_NON_COMPLETED,\n            ENTRY_NON_VIEWED,\n            ENTRY_OUTSIDE_RELEASE_PERIOD,\n        ),\n    )\n\n    fun autoUpdateMetadata() = preferenceStore.getBoolean(\"auto_update_metadata\", false)\n\n    fun showContinueViewingButton() =\n        preferenceStore.getBoolean(\"display_continue_reading_button\", false)\n\n    // Common Category\n\n    fun categoryTabs() = preferenceStore.getBoolean(\"display_category_tabs\", true)\n\n    fun categoryNumberOfItems() = preferenceStore.getBoolean(\"display_number_of_items\", false)\n\n    fun categorizedDisplaySettings() = preferenceStore.getBoolean(\"categorized_display\", false)\n\n    fun hideHiddenCategoriesSettings() = preferenceStore.getBoolean(\"hidden_categories\", false)\n\n    fun filterIntervalCustom() = preferenceStore.getEnum(\n        \"pref_filter_library_interval_custom\",\n        TriState.DISABLED,\n    )\n\n    // Common badges\n\n    fun downloadBadge() = preferenceStore.getBoolean(\"display_download_badge\", false)\n\n    fun unreadBadge() = preferenceStore.getBoolean(\"display_unread_badge\", true)\n\n    fun localBadge() = preferenceStore.getBoolean(\"display_local_badge\", true)\n\n    fun languageBadge() = preferenceStore.getBoolean(\"display_language_badge\", false)\n\n    fun newShowUpdatesCount() = preferenceStore.getBoolean(\"library_show_updates_count\", true)\n\n    // Common Cache\n\n    fun autoClearItemCache() = preferenceStore.getBoolean(\"auto_clear_chapter_cache\", false)\n\n    // Random Sort Seed\n\n    fun randomAnimeSortSeed() = preferenceStore.getInt(\"library_random_anime_sort_seed\", 0)\n    fun randomMangaSortSeed() = preferenceStore.getInt(\"library_random_manga_sort_seed\", 0)\n\n    // Mixture Columns\n\n    fun animePortraitColumns() = preferenceStore.getInt(\"pref_animelib_columns_portrait_key\", 0)\n    fun mangaPortraitColumns() = preferenceStore.getInt(\"pref_library_columns_portrait_key\", 0)\n\n    fun animeLandscapeColumns() = preferenceStore.getInt(\"pref_animelib_columns_landscape_key\", 0)\n    fun mangaLandscapeColumns() = preferenceStore.getInt(\"pref_library_columns_landscape_key\", 0)\n\n    // Mixture Filter\n\n    fun filterDownloadedAnime() =\n        preferenceStore.getEnum(\"pref_filter_animelib_downloaded_v2\", TriState.DISABLED)\n\n    fun filterDownloadedManga() =\n        preferenceStore.getEnum(\"pref_filter_library_downloaded_v2\", TriState.DISABLED)\n\n    fun filterUnseen() =\n        preferenceStore.getEnum(\"pref_filter_animelib_unread_v2\", TriState.DISABLED)\n\n    fun filterUnread() =\n        preferenceStore.getEnum(\"pref_filter_library_unread_v2\", TriState.DISABLED)\n\n    fun filterStartedAnime() =\n        preferenceStore.getEnum(\"pref_filter_animelib_started_v2\", TriState.DISABLED)\n\n    fun filterStartedManga() =\n        preferenceStore.getEnum(\"pref_filter_library_started_v2\", TriState.DISABLED)\n\n    fun filterBookmarkedAnime() =\n        preferenceStore.getEnum(\"pref_filter_animelib_bookmarked_v2\", TriState.DISABLED)\n\n    fun filterBookmarkedManga() =\n        preferenceStore.getEnum(\"pref_filter_library_bookmarked_v2\", TriState.DISABLED)\n\n    fun filterCompletedAnime() =\n        preferenceStore.getEnum(\"pref_filter_animelib_completed_v2\", TriState.DISABLED)\n\n    fun filterCompletedManga() =\n        preferenceStore.getEnum(\"pref_filter_library_completed_v2\", TriState.DISABLED)\n\n    fun filterTrackedAnime(id: Int) =\n        preferenceStore.getEnum(\"pref_filter_animelib_tracked_${id}_v2\", TriState.DISABLED)\n\n    fun filterTrackedManga(id: Int) =\n        preferenceStore.getEnum(\"pref_filter_library_tracked_${id}_v2\", TriState.DISABLED)\n\n    // Mixture Update Count\n\n    fun newMangaUpdatesCount() = preferenceStore.getInt(\"library_unread_updates_count\", 0)\n    fun newAnimeUpdatesCount() = preferenceStore.getInt(\"library_unseen_updates_count\", 0)\n\n    // Mixture Category\n\n    fun defaultAnimeCategory() = preferenceStore.getInt(DEFAULT_ANIME_CATEGORY_PREF_KEY, -1)\n    fun defaultMangaCategory() = preferenceStore.getInt(DEFAULT_MANGA_CATEGORY_PREF_KEY, -1)\n\n    fun lastUsedAnimeCategory() = preferenceStore.getInt(Preference.appStateKey(\"last_used_anime_category\"), 0)\n    fun lastUsedMangaCategory() = preferenceStore.getInt(Preference.appStateKey(\"last_used_category\"), 0)\n\n    fun animeUpdateCategories() =\n        preferenceStore.getStringSet(LIBRARY_UPDATE_ANIME_CATEGORIES_PREF_KEY, emptySet())\n\n    fun mangaUpdateCategories() =\n        preferenceStore.getStringSet(LIBRARY_UPDATE_MANGA_CATEGORIES_PREF_KEY, emptySet())\n\n    fun animeUpdateCategoriesExclude() =\n        preferenceStore.getStringSet(LIBRARY_UPDATE_ANIME_CATEGORIES_EXCLUDE_PREF_KEY, emptySet())\n\n    fun mangaUpdateCategoriesExclude() =\n        preferenceStore.getStringSet(LIBRARY_UPDATE_MANGA_CATEGORIES_EXCLUDE_PREF_KEY, emptySet())\n\n    // Mixture Item\n\n    fun filterEpisodeBySeen() =\n        preferenceStore.getLong(\"default_episode_filter_by_seen\", Anime.SHOW_ALL)\n\n    fun filterChapterByRead() =\n        preferenceStore.getLong(\"default_chapter_filter_by_read\", Manga.SHOW_ALL)\n\n    fun filterEpisodeByDownloaded() =\n        preferenceStore.getLong(\"default_episode_filter_by_downloaded\", Anime.SHOW_ALL)\n\n    fun filterChapterByDownloaded() =\n        preferenceStore.getLong(\"default_chapter_filter_by_downloaded\", Manga.SHOW_ALL)\n\n    fun filterEpisodeByBookmarked() =\n        preferenceStore.getLong(\"default_episode_filter_by_bookmarked\", Anime.SHOW_ALL)\n\n    fun filterChapterByBookmarked() =\n        preferenceStore.getLong(\"default_chapter_filter_by_bookmarked\", Manga.SHOW_ALL)\n\n    fun filterEpisodeByFillermarked() =\n        preferenceStore.getLong(\"default_episode_filter_by_fillermarked\", Anime.SHOW_ALL)\n\n    // and upload date\n    fun sortEpisodeBySourceOrNumber() = preferenceStore.getLong(\n        \"default_episode_sort_by_source_or_number\",\n        Anime.EPISODE_SORTING_SOURCE,\n    )\n\n    fun sortChapterBySourceOrNumber() = preferenceStore.getLong(\n        \"default_chapter_sort_by_source_or_number\",\n        Manga.CHAPTER_SORTING_SOURCE,\n    )\n\n    fun displayEpisodeByNameOrNumber() = preferenceStore.getLong(\n        \"default_chapter_display_by_name_or_number\",\n        Anime.EPISODE_DISPLAY_NAME,\n    )\n\n    fun displayChapterByNameOrNumber() = preferenceStore.getLong(\n        \"default_chapter_display_by_name_or_number\",\n        Manga.CHAPTER_DISPLAY_NAME,\n    )\n\n    fun sortEpisodeByAscendingOrDescending() = preferenceStore.getLong(\n        \"default_chapter_sort_by_ascending_or_descending\",\n        Anime.EPISODE_SORT_DESC,\n    )\n\n    fun sortChapterByAscendingOrDescending() = preferenceStore.getLong(\n        \"default_chapter_sort_by_ascending_or_descending\",\n        Manga.CHAPTER_SORT_DESC,\n    )\n\n    fun showEpisodeThumbnailPreviews() = preferenceStore.getLong(\n        \"default_episode_show_thumbnail_previews\",\n        Anime.EPISODE_SHOW_PREVIEWS,\n    )\n\n    fun showEpisodeSummaries() = preferenceStore.getLong(\n        \"default_episode_show_summaries\",\n        Anime.EPISODE_SHOW_SUMMARIES,\n    )\n\n    fun setEpisodeSettingsDefault(anime: Anime) {\n        filterEpisodeBySeen().set(anime.unseenFilterRaw)\n        filterEpisodeByDownloaded().set(anime.downloadedFilterRaw)\n        filterEpisodeByBookmarked().set(anime.bookmarkedFilterRaw)\n        filterEpisodeByFillermarked().set(anime.fillermarkedFilterRaw)\n        sortEpisodeBySourceOrNumber().set(anime.sorting)\n        displayEpisodeByNameOrNumber().set(anime.displayMode)\n        sortEpisodeByAscendingOrDescending().set(\n            if (anime.sortDescending()) Anime.EPISODE_SORT_DESC else Anime.EPISODE_SORT_ASC,\n        )\n        showEpisodeThumbnailPreviews().set(anime.showPreviewsRaw)\n        showEpisodeSummaries().set(anime.showSummariesRaw)\n    }\n\n    fun setChapterSettingsDefault(manga: Manga) {\n        filterChapterByRead().set(manga.unreadFilterRaw)\n        filterChapterByDownloaded().set(manga.downloadedFilterRaw)\n        filterChapterByBookmarked().set(manga.bookmarkedFilterRaw)\n        sortChapterBySourceOrNumber().set(manga.sorting)\n        displayChapterByNameOrNumber().set(manga.displayMode)\n        sortChapterByAscendingOrDescending().set(\n            if (manga.sortDescending()) Manga.CHAPTER_SORT_DESC else Manga.CHAPTER_SORT_ASC,\n        )\n    }\n\n    // Seasons\n\n    fun filterSeasonByDownload() =\n        preferenceStore.getLong(\"default_season_filter_by_downloaded\", Anime.SHOW_ALL)\n\n    fun filterSeasonByUnseen() =\n        preferenceStore.getLong(\"default_season_filter_by_unseen\", Anime.SHOW_ALL)\n\n    fun filterSeasonByStarted() =\n        preferenceStore.getLong(\"default_season_filter_by_started\", Anime.SHOW_ALL)\n\n    fun filterSeasonByCompleted() =\n        preferenceStore.getLong(\"default_season_filter_by_completed\", Anime.SHOW_ALL)\n\n    fun filterSeasonByBookmarked() =\n        preferenceStore.getLong(\"default_season_filter_by_bookmarked\", Anime.SHOW_ALL)\n\n    fun filterSeasonByFillermarked() =\n        preferenceStore.getLong(\"default_season_filter_by_fillermarked\", Anime.SHOW_ALL)\n\n    fun sortSeasonBySourceOrNumber() = preferenceStore.getLong(\n        \"default_season_sort_by_source_or_number\",\n        Anime.SEASON_SORT_SOURCE,\n    )\n\n    fun sortSeasonByAscendingOrDescending() = preferenceStore.getLong(\n        \"default_season_sort_by_ascending_or_descending\",\n        Anime.SEASON_SORT_DESC,\n    )\n\n    fun seasonDisplayGridMode() = preferenceStore.getLong(\n        \"default_season_grid_display_mode\",\n        SeasonDisplayMode.toLong(SeasonDisplayMode.CompactGrid),\n    )\n\n    fun seasonDisplayGridSize() = preferenceStore.getInt(\n        \"default_season_grid_display_size\",\n        0,\n    )\n\n    fun seasonDownloadOverlay() = preferenceStore.getBoolean(\n        \"default_season_download_overlay\",\n        false,\n    )\n\n    fun seasonUnseenOverlay() = preferenceStore.getBoolean(\n        \"default_season_unseen_overlay\",\n        true,\n    )\n\n    fun seasonLocalOverlay() = preferenceStore.getBoolean(\n        \"default_season_local_overlay\",\n        true,\n    )\n\n    fun seasonLangOverlay() = preferenceStore.getBoolean(\n        \"default_season_lang_overlay\",\n        false,\n    )\n\n    fun seasonContinueOverlay() = preferenceStore.getBoolean(\n        \"default_season_continue_overlay\",\n        true,\n    )\n\n    fun seasonDisplayMode() = preferenceStore.getLong(\n        \"default_season_display_mode\",\n        Anime.SEASON_DISPLAY_MODE_SOURCE,\n    )\n\n    fun setSeasonSettingsDefault(anime: Anime) {\n        filterSeasonByDownload().set(anime.seasonUnseenFilterRaw)\n        filterSeasonByUnseen().set(anime.seasonUnseenFilterRaw)\n        filterSeasonByStarted().set(anime.seasonStartedFilterRaw)\n        filterSeasonByCompleted().set(anime.seasonCompletedFilterRaw)\n        filterSeasonByBookmarked().set(anime.seasonBookmarkedFilterRaw)\n        filterSeasonByFillermarked().set(anime.seasonFillermarkedFilterRaw)\n        sortSeasonBySourceOrNumber().set(anime.seasonSorting)\n        sortSeasonByAscendingOrDescending().set(\n            if (anime.seasonSortDescending()) Anime.SEASON_SORT_DESC else Anime.SEASON_SORT_ASC,\n        )\n        seasonDisplayGridMode().set(SeasonDisplayMode.toLong(anime.seasonDisplayGridMode))\n        seasonDisplayGridSize().set(anime.seasonDisplayGridSize)\n        seasonDownloadOverlay().set(anime.seasonDownloadedOverlay)\n        seasonUnseenOverlay().set(anime.seasonUnseenOverlay)\n        seasonLocalOverlay().set(anime.seasonLocalOverlay)\n        seasonLangOverlay().set(anime.seasonLangOverlay)\n        seasonContinueOverlay().set(anime.seasonContinueOverlay)\n        seasonDisplayMode().set(anime.seasonDisplayMode)\n    }\n\n    // Season behavior\n\n    fun updateSeasonOnRefresh() =\n        preferenceStore.getBoolean(\"pref_update_season_on_refresh\", false)\n\n    fun updateSeasonOnLibraryUpdate() =\n        preferenceStore.getBoolean(\"pref_update_season_on_library_update\", false)\n\n    // region Item behavior\n\n    fun swipeEpisodeStartAction() =\n        preferenceStore.getEnum(\"pref_episode_swipe_end_action\", EpisodeSwipeAction.ToggleSeen)\n\n    fun swipeEpisodeEndAction() = preferenceStore.getEnum(\n        \"pref_episode_swipe_start_action\",\n        EpisodeSwipeAction.ToggleBookmark,\n    )\n\n    fun swipeChapterStartAction() =\n        preferenceStore.getEnum(\"pref_chapter_swipe_end_action\", ChapterSwipeAction.ToggleRead)\n\n    fun swipeChapterEndAction() = preferenceStore.getEnum(\n        \"pref_chapter_swipe_start_action\",\n        ChapterSwipeAction.ToggleBookmark,\n    )\n\n    fun markDuplicateReadChapterAsRead() = preferenceStore.getStringSet(\"mark_duplicate_read_chapter_read\", emptySet())\n\n    fun markDuplicateSeenEpisodeAsSeen() = preferenceStore.getStringSet(\"mark_duplicate_seen_episode_seen\", emptySet())\n\n    // endregion\n\n    enum class EpisodeSwipeAction {\n        ToggleSeen,\n        ToggleBookmark,\n        ToggleFillermark,\n        Download,\n        Disabled,\n    }\n\n    enum class ChapterSwipeAction {\n        ToggleRead,\n        ToggleBookmark,\n        Download,\n        Disabled,\n    }\n\n    companion object {\n        const val DEVICE_ONLY_ON_WIFI = \"wifi\"\n        const val DEVICE_NETWORK_NOT_METERED = \"network_not_metered\"\n        const val DEVICE_CHARGING = \"ac\"\n\n        const val ENTRY_NON_COMPLETED = \"manga_ongoing\"\n        const val ENTRY_HAS_UNVIEWED = \"manga_fully_read\"\n        const val ENTRY_NON_VIEWED = \"manga_started\"\n        const val ENTRY_OUTSIDE_RELEASE_PERIOD = \"manga_outside_release_period\"\n\n        const val MARK_DUPLICATE_CHAPTER_READ_NEW = \"new\"\n        const val MARK_DUPLICATE_CHAPTER_READ_EXISTING = \"existing\"\n        const val MARK_DUPLICATE_EPISODE_SEEN_NEW = \"new_episode\"\n        const val MARK_DUPLICATE_EPISODE_SEEN_EXISTING = \"existing_episode\"\n\n        const val DEFAULT_MANGA_CATEGORY_PREF_KEY = \"default_category\"\n        const val DEFAULT_ANIME_CATEGORY_PREF_KEY = \"default_anime_category\"\n        private const val LIBRARY_UPDATE_MANGA_CATEGORIES_PREF_KEY = \"library_update_categories\"\n        private const val LIBRARY_UPDATE_ANIME_CATEGORIES_PREF_KEY = \"animelib_update_categories\"\n        private const val LIBRARY_UPDATE_MANGA_CATEGORIES_EXCLUDE_PREF_KEY = \"library_update_categories_exclude\"\n        private const val LIBRARY_UPDATE_ANIME_CATEGORIES_EXCLUDE_PREF_KEY = \"animelib_update_categories_exclude\"\n        val categoryPreferenceKeys = setOf(\n            DEFAULT_MANGA_CATEGORY_PREF_KEY,\n            DEFAULT_ANIME_CATEGORY_PREF_KEY,\n            LIBRARY_UPDATE_MANGA_CATEGORIES_PREF_KEY,\n            LIBRARY_UPDATE_ANIME_CATEGORIES_PREF_KEY,\n            LIBRARY_UPDATE_MANGA_CATEGORIES_EXCLUDE_PREF_KEY,\n            LIBRARY_UPDATE_ANIME_CATEGORIES_EXCLUDE_PREF_KEY,\n        )\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt",
    "content": "package tachiyomi.domain.release.interactor\n\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.domain.release.model.Release\nimport tachiyomi.domain.release.service.ReleaseService\nimport java.time.Instant\nimport java.time.temporal.ChronoUnit\n\nclass GetApplicationRelease(\n    private val service: ReleaseService,\n    private val preferenceStore: PreferenceStore,\n) {\n\n    private val lastChecked: Preference<Long> by lazy {\n        preferenceStore.getLong(Preference.appStateKey(\"last_app_check\"), 0)\n    }\n\n    suspend fun await(arguments: Arguments): Result {\n        val now = Instant.now()\n\n        // Limit checks to once every 3 days at most\n        if (!arguments.forceCheck &&\n            now.isBefore(\n                Instant.ofEpochMilli(lastChecked.get()).plus(3, ChronoUnit.DAYS),\n            )\n        ) {\n            return Result.NoNewUpdate\n        }\n\n        val release = service.latest(arguments) ?: return Result.NoNewUpdate\n\n        lastChecked.set(now.toEpochMilli())\n\n        // Check if latest version is different from current version\n        val isNewVersion = isNewVersion(\n            arguments.isPreview,\n            arguments.commitCount,\n            arguments.versionName,\n            release.version,\n        )\n        return when {\n            isNewVersion -> Result.NewUpdate(release)\n            else -> Result.NoNewUpdate\n        }\n    }\n\n    private fun isNewVersion(\n        isPreview: Boolean,\n        commitCount: Int,\n        versionName: String,\n        versionTag: String,\n    ): Boolean {\n        // Removes prefixes like \"r\" or \"v\"\n        val newVersion = versionTag.replace(\"[^\\\\d.]\".toRegex(), \"\")\n        return if (isPreview) {\n            // Preview builds: based on releases in \"tachiyomiorg/tachiyomi-preview\" repo\n            // tagged as something like \"r1234\"\n            newVersion.toInt() > commitCount\n        } else {\n            // Release builds: based on releases in \"tachiyomiorg/tachiyomi\" repo\n            // tagged as something like \"v0.1.2\"\n            val oldVersion = versionName.replace(\"[^\\\\d.]\".toRegex(), \"\")\n\n            val newSemVer = newVersion.split(\".\").map { it.toInt() }\n            val oldSemVer = oldVersion.split(\".\").map { it.toInt() }\n\n            oldSemVer.mapIndexed { index, i ->\n                if (newSemVer[index] > i) {\n                    return true\n                }\n            }\n\n            false\n        }\n    }\n\n    data class Arguments(\n        val isPreview: Boolean,\n        val commitCount: Int,\n        val versionName: String,\n        val repository: String,\n        val forceCheck: Boolean = false,\n    )\n\n    sealed interface Result {\n        data class NewUpdate(val release: Release) : Result\n        data object NoNewUpdate : Result\n        data object OsTooOld : Result\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/release/model/Release.kt",
    "content": "package tachiyomi.domain.release.model\n\n/**\n * Contains information about the latest release.\n */\ndata class Release(\n    val version: String,\n    val info: String,\n    val releaseLink: String,\n    val downloadLink: String,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/release/service/ReleaseService.kt",
    "content": "package tachiyomi.domain.release.service\n\nimport tachiyomi.domain.release.interactor.GetApplicationRelease\nimport tachiyomi.domain.release.model.Release\n\ninterface ReleaseService {\n\n    suspend fun latest(arguments: GetApplicationRelease.Arguments): Release?\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/interactor/GetAnimeSourcesWithNonLibraryAnime.kt",
    "content": "package tachiyomi.domain.source.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.entries.anime.repository.AnimeRepository\nimport tachiyomi.domain.source.anime.model.DeletableAnime\n\nclass GetAnimeSourcesWithNonLibraryAnime(\n    private val repository: AnimeRepository,\n) {\n\n    fun subscribe(): Flow<List<DeletableAnime>> {\n        return repository.getDeletableParentAnime()\n    }\n\n    suspend fun getDeletableChildren(parentId: Long): List<Anime> {\n        return repository.getChildrenByParentId(parentId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/interactor/GetRemoteAnime.kt",
    "content": "package tachiyomi.domain.source.anime.interactor\n\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport tachiyomi.domain.source.anime.repository.AnimeSourcePagingSourceType\nimport tachiyomi.domain.source.anime.repository.AnimeSourceRepository\n\nclass GetRemoteAnime(\n    private val repository: AnimeSourceRepository,\n) {\n\n    fun subscribe(sourceId: Long, query: String, filterList: AnimeFilterList): AnimeSourcePagingSourceType {\n        return when (query) {\n            QUERY_POPULAR -> repository.getPopularAnime(sourceId)\n            QUERY_LATEST -> repository.getLatestAnime(sourceId)\n            else -> repository.searchAnime(sourceId, query, filterList)\n        }\n    }\n\n    companion object {\n        const val QUERY_POPULAR = \"eu.kanade.domain.source.anime.interactor.POPULAR\"\n        const val QUERY_LATEST = \"eu.kanade.domain.source.anime.interactor.LATEST\"\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/model/AnimeSource.kt",
    "content": "package tachiyomi.domain.source.anime.model\n\ndata class AnimeSource(\n    val id: Long,\n    val lang: String,\n    val name: String,\n    val supportsLatest: Boolean,\n    val isStub: Boolean,\n    val pin: Pins = Pins.unpinned,\n    val isUsedLast: Boolean = false,\n) {\n\n    val visualName: String\n        get() = when {\n            lang.isEmpty() -> name\n            else -> \"$name (${lang.uppercase()})\"\n        }\n\n    val key: () -> String = {\n        when {\n            isUsedLast -> \"$id-lastused\"\n            else -> \"$id\"\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/model/AnimeSourceWithIds.kt",
    "content": "package tachiyomi.domain.source.anime.model\n\ndata class AnimeSourceWithIds(\n    val source: AnimeSource,\n    val ids: List<Long>,\n    val orphaned: List<Long>,\n) {\n    val count: Long\n        get() = ids.size.toLong()\n\n    val id: Long\n        get() = source.id\n\n    val name: String\n        get() = source.name\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/model/DeletableAnime.kt",
    "content": "package tachiyomi.domain.source.anime.model\n\nimport eu.kanade.tachiyomi.animesource.model.FetchType\n\ndata class DeletableAnime(\n    val animeId: Long,\n    val sourceId: Long,\n    val fetchType: FetchType,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/model/Pin.kt",
    "content": "package tachiyomi.domain.source.anime.model\n\nsealed class Pin(val code: Int) {\n    object Unpinned : Pin(0b00)\n    object Pinned : Pin(0b01)\n    object Actual : Pin(0b10)\n}\n\ninline fun Pins(builder: Pins.PinsBuilder.() -> Unit = {}): Pins {\n    return Pins.PinsBuilder().apply(builder).flags()\n}\n\nfun Pins(vararg pins: Pin) = Pins {\n    pins.forEach { +it }\n}\n\ndata class Pins(val code: Int = Pin.Unpinned.code) {\n\n    operator fun contains(pin: Pin): Boolean = pin.code and code == pin.code\n\n    operator fun plus(pin: Pin): Pins = Pins(code or pin.code)\n\n    operator fun minus(pin: Pin): Pins = Pins(code xor pin.code)\n\n    companion object {\n        val unpinned = Pins(Pin.Unpinned)\n\n        val pinned = Pins(Pin.Pinned, Pin.Actual)\n    }\n\n    class PinsBuilder(var code: Int = 0) {\n        operator fun Pin.unaryPlus() {\n            this@PinsBuilder.code = code or this@PinsBuilder.code\n        }\n\n        operator fun Pin.unaryMinus() {\n            this@PinsBuilder.code = code or this@PinsBuilder.code\n        }\n\n        fun flags(): Pins = Pins(code)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/model/StubAnimeSource.kt",
    "content": "package tachiyomi.domain.source.anime.model\n\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.model.Video\n\n@Suppress(\"OverridingDeprecatedMember\")\nclass StubAnimeSource(\n    override val id: Long,\n    override val lang: String,\n    override val name: String,\n) : AnimeSource {\n\n    private val isInvalid: Boolean = name.isBlank() || lang.isBlank()\n\n    override suspend fun getAnimeDetails(anime: SAnime): SAnime =\n        throw AnimeSourceNotInstalledException()\n\n    override suspend fun getEpisodeList(anime: SAnime): List<SEpisode> =\n        throw AnimeSourceNotInstalledException()\n\n    override suspend fun getSeasonList(anime: SAnime): List<SAnime> =\n        throw AnimeSourceNotInstalledException()\n\n    override suspend fun getVideoList(episode: SEpisode): List<Video> =\n        throw AnimeSourceNotInstalledException()\n\n    override fun toString(): String =\n        if (!isInvalid) \"$name (${lang.uppercase()})\" else id.toString()\n\n    companion object {\n        fun from(source: AnimeSource): StubAnimeSource {\n            return StubAnimeSource(id = source.id, lang = source.lang, name = source.name)\n        }\n    }\n}\nclass AnimeSourceNotInstalledException : Exception()\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/repository/AnimeSourceRepository.kt",
    "content": "package tachiyomi.domain.source.anime.repository\n\nimport androidx.paging.PagingSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.source.anime.model.AnimeSource\n\ntypealias AnimeSourcePagingSourceType = PagingSource<Long, SAnime>\n\ninterface AnimeSourceRepository {\n\n    fun getAnimeSources(): Flow<List<AnimeSource>>\n\n    fun getOnlineAnimeSources(): Flow<List<AnimeSource>>\n\n    fun getAnimeSourcesWithFavoriteCount(): Flow<List<Pair<AnimeSource, Long>>>\n\n    fun searchAnime(sourceId: Long, query: String, filterList: AnimeFilterList): AnimeSourcePagingSourceType\n\n    fun getPopularAnime(sourceId: Long): AnimeSourcePagingSourceType\n\n    fun getLatestAnime(sourceId: Long): AnimeSourcePagingSourceType\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/repository/AnimeStubSourceRepository.kt",
    "content": "\npackage tachiyomi.domain.source.anime.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\n\ninterface AnimeStubSourceRepository {\n    fun subscribeAllAnime(): Flow<List<StubAnimeSource>>\n\n    suspend fun getStubAnimeSource(id: Long): StubAnimeSource?\n\n    suspend fun upsertStubAnimeSource(id: Long, lang: String, name: String)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/anime/service/AnimeSourceManager.kt",
    "content": "package tachiyomi.domain.source.anime.service\n\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.online.AnimeHttpSource\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.source.anime.model.StubAnimeSource\n\ninterface AnimeSourceManager {\n\n    val isInitialized: StateFlow<Boolean>\n\n    val catalogueSources: Flow<List<AnimeCatalogueSource>>\n\n    fun get(sourceKey: Long): AnimeSource?\n\n    fun getOrStub(sourceKey: Long): AnimeSource\n\n    fun getOnlineSources(): List<AnimeHttpSource>\n\n    fun getCatalogueSources(): List<AnimeCatalogueSource>\n\n    fun getStubSources(): List<StubAnimeSource>\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/interactor/GetMangaSourcesWithNonLibraryManga.kt",
    "content": "package tachiyomi.domain.source.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.source.manga.model.MangaSourceWithCount\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\n\nclass GetMangaSourcesWithNonLibraryManga(\n    private val repository: MangaSourceRepository,\n) {\n\n    fun subscribe(): Flow<List<MangaSourceWithCount>> {\n        return repository.getMangaSourcesWithNonLibraryManga()\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/interactor/GetRemoteManga.kt",
    "content": "package tachiyomi.domain.source.manga.interactor\n\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport tachiyomi.domain.source.manga.repository.MangaSourceRepository\nimport tachiyomi.domain.source.manga.repository.SourcePagingSourceType\n\nclass GetRemoteManga(\n    private val repository: MangaSourceRepository,\n) {\n\n    fun subscribe(sourceId: Long, query: String, filterList: FilterList): SourcePagingSourceType {\n        return when (query) {\n            QUERY_POPULAR -> repository.getPopularManga(sourceId)\n            QUERY_LATEST -> repository.getLatestManga(sourceId)\n            else -> repository.searchManga(sourceId, query, filterList)\n        }\n    }\n\n    companion object {\n        const val QUERY_POPULAR = \"eu.kanade.domain.source.manga.interactor.POPULAR\"\n        const val QUERY_LATEST = \"eu.kanade.domain.source.manga.interactor.LATEST\"\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/model/MangaSourceWithCount.kt",
    "content": "package tachiyomi.domain.source.manga.model\n\ndata class MangaSourceWithCount(\n    val source: Source,\n    val count: Long,\n) {\n\n    val id: Long\n        get() = source.id\n\n    val name: String\n        get() = source.name\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/model/Pin.kt",
    "content": "package tachiyomi.domain.source.manga.model\n\nsealed class Pin(val code: Int) {\n    data object Unpinned : Pin(0b00)\n    data object Pinned : Pin(0b01)\n    data object Actual : Pin(0b10)\n}\n\ninline fun Pins(builder: Pins.PinsBuilder.() -> Unit = {}): Pins {\n    return Pins.PinsBuilder().apply(builder).flags()\n}\n\nfun Pins(vararg pins: Pin) = Pins {\n    pins.forEach { +it }\n}\n\ndata class Pins(val code: Int = Pin.Unpinned.code) {\n\n    operator fun contains(pin: Pin): Boolean = pin.code and code == pin.code\n\n    operator fun plus(pin: Pin): Pins = Pins(code or pin.code)\n\n    operator fun minus(pin: Pin): Pins = Pins(code xor pin.code)\n\n    companion object {\n        val unpinned = Pins(Pin.Unpinned)\n\n        val pinned = Pins(Pin.Pinned, Pin.Actual)\n    }\n\n    class PinsBuilder(var code: Int = 0) {\n        operator fun Pin.unaryPlus() {\n            this@PinsBuilder.code = code or this@PinsBuilder.code\n        }\n\n        operator fun Pin.unaryMinus() {\n            this@PinsBuilder.code = code or this@PinsBuilder.code\n        }\n\n        fun flags(): Pins = Pins(code)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/model/Source.kt",
    "content": "package tachiyomi.domain.source.manga.model\n\ndata class Source(\n    val id: Long,\n    val lang: String,\n    val name: String,\n    val supportsLatest: Boolean,\n    val isStub: Boolean,\n    val pin: Pins = Pins.unpinned,\n    val isUsedLast: Boolean = false,\n    // SY -->\n    val isExcludedFromDataSaver: Boolean = false,\n    // SY <--\n) {\n\n    val visualName: String\n        get() = when {\n            lang.isEmpty() -> name\n            else -> \"$name (${lang.uppercase()})\"\n        }\n\n    val key: () -> String = {\n        when {\n            isUsedLast -> \"$id-lastused\"\n            else -> \"$id\"\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/model/StubMangaSource.kt",
    "content": "package tachiyomi.domain.source.manga.model\n\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\n\n@Suppress(\"OverridingDeprecatedMember\")\nclass StubMangaSource(\n    override val id: Long,\n    override val lang: String,\n    override val name: String,\n) : MangaSource {\n\n    private val isInvalid: Boolean = name.isBlank() || lang.isBlank()\n\n    override suspend fun getMangaDetails(manga: SManga): SManga =\n        throw SourceNotInstalledException()\n\n    override suspend fun getChapterList(manga: SManga): List<SChapter> =\n        throw SourceNotInstalledException()\n\n    override suspend fun getPageList(chapter: SChapter): List<Page> =\n        throw SourceNotInstalledException()\n\n    override fun toString(): String =\n        if (!isInvalid) \"$name (${lang.uppercase()})\" else id.toString()\n\n    companion object {\n        fun from(source: MangaSource): StubMangaSource {\n            return StubMangaSource(id = source.id, lang = source.lang, name = source.name)\n        }\n    }\n}\n\nclass SourceNotInstalledException : Exception()\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/repository/MangaSourceRepository.kt",
    "content": "package tachiyomi.domain.source.manga.repository\n\nimport androidx.paging.PagingSource\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.source.model.SManga\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.source.manga.model.MangaSourceWithCount\nimport tachiyomi.domain.source.manga.model.Source\n\ntypealias SourcePagingSourceType = PagingSource<Long, SManga>\n\ninterface MangaSourceRepository {\n\n    fun getMangaSources(): Flow<List<Source>>\n\n    fun getOnlineMangaSources(): Flow<List<Source>>\n\n    fun getMangaSourcesWithFavoriteCount(): Flow<List<Pair<Source, Long>>>\n\n    fun getMangaSourcesWithNonLibraryManga(): Flow<List<MangaSourceWithCount>>\n\n    fun searchManga(sourceId: Long, query: String, filterList: FilterList): SourcePagingSourceType\n\n    fun getPopularManga(sourceId: Long): SourcePagingSourceType\n\n    fun getLatestManga(sourceId: Long): SourcePagingSourceType\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/repository/MangaStubSourceRepository.kt",
    "content": "package tachiyomi.domain.source.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.source.manga.model.StubMangaSource\n\ninterface MangaStubSourceRepository {\n    fun subscribeAllManga(): Flow<List<StubMangaSource>>\n\n    suspend fun getStubMangaSource(id: Long): StubMangaSource?\n\n    suspend fun upsertStubMangaSource(id: Long, lang: String, name: String)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/source/manga/service/MangaSourceManager.kt",
    "content": "package tachiyomi.domain.source.manga.service\n\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.online.HttpSource\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.StateFlow\nimport tachiyomi.domain.source.manga.model.StubMangaSource\n\ninterface MangaSourceManager {\n\n    val isInitialized: StateFlow<Boolean>\n\n    val catalogueSources: Flow<List<CatalogueSource>>\n\n    fun get(sourceKey: Long): MangaSource?\n\n    fun getOrStub(sourceKey: Long): MangaSource\n\n    fun getOnlineSources(): List<HttpSource>\n\n    fun getCatalogueSources(): List<CatalogueSource>\n\n    fun getStubSources(): List<StubMangaSource>\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/storage/service/StorageManager.kt",
    "content": "package tachiyomi.domain.storage.service\n\nimport android.content.Context\nimport androidx.core.net.toUri\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.shareIn\n\nclass StorageManager(\n    private val context: Context,\n    storagePreferences: StoragePreferences,\n) {\n\n    private val scope = CoroutineScope(Dispatchers.IO)\n\n    private var baseDir: UniFile? = getBaseDir(storagePreferences.baseStorageDirectory().get())\n\n    private val _changes: Channel<Unit> = Channel(Channel.UNLIMITED)\n    val changes = _changes.receiveAsFlow()\n        .shareIn(scope, SharingStarted.Lazily, 1)\n\n    init {\n        storagePreferences.baseStorageDirectory().changes()\n            .drop(1)\n            .distinctUntilChanged()\n            .onEach { uri ->\n                baseDir = getBaseDir(uri)\n                baseDir?.let { parent ->\n                    parent.createDirectory(AUTOMATIC_BACKUPS_PATH)\n                    parent.createDirectory(LOCAL_SOURCE_PATH)\n                    parent.createDirectory(LOCAL_ANIMESOURCE_PATH)\n                    parent.createDirectory(DOWNLOADS_PATH).also {\n                        DiskUtil.createNoMediaFile(it, context)\n                    }\n                    parent.createDirectory(MPV_CONFIG_PATH)?.let { mpvDir ->\n                        mpvDir.createDirectory(FONTS_PATH)\n                        mpvDir.createDirectory(SCRIPTS_PATH)\n                        mpvDir.createDirectory(SCRIPT_OPTS_PATH)\n                        mpvDir.createDirectory(SHADERS_PATH)\n                    }\n                }\n                _changes.send(Unit)\n            }\n            .launchIn(scope)\n    }\n\n    private fun getBaseDir(uri: String): UniFile? {\n        return UniFile.fromUri(context, uri.toUri())\n            .takeIf { it?.exists() == true }\n    }\n\n    fun getAutomaticBackupsDirectory(): UniFile? {\n        return baseDir?.createDirectory(AUTOMATIC_BACKUPS_PATH)\n    }\n\n    fun getDownloadsDirectory(): UniFile? {\n        return baseDir?.createDirectory(DOWNLOADS_PATH)\n    }\n\n    fun getLocalMangaSourceDirectory(): UniFile? {\n        return baseDir?.createDirectory(LOCAL_SOURCE_PATH)\n    }\n\n    fun getLocalAnimeSourceDirectory(): UniFile? {\n        return baseDir?.createDirectory(LOCAL_ANIMESOURCE_PATH)\n    }\n\n    fun getFontsDirectory(): UniFile? {\n        return getMPVConfigDirectory()?.createDirectory(FONTS_PATH)\n    }\n\n    fun getScriptsDirectory(): UniFile? {\n        return getMPVConfigDirectory()?.createDirectory(SCRIPTS_PATH)\n    }\n\n    fun getScriptOptsDirectory(): UniFile? {\n        return getMPVConfigDirectory()?.createDirectory(SCRIPT_OPTS_PATH)\n    }\n\n    fun getShadersDirectory(): UniFile? {\n        return getMPVConfigDirectory()?.createDirectory(SHADERS_PATH)\n    }\n\n    fun getMPVConfigDirectory(): UniFile? {\n        return baseDir?.createDirectory(MPV_CONFIG_PATH)\n    }\n}\n\nprivate const val AUTOMATIC_BACKUPS_PATH = \"autobackup\"\nprivate const val DOWNLOADS_PATH = \"downloads\"\nprivate const val LOCAL_SOURCE_PATH = \"local\"\nprivate const val LOCAL_ANIMESOURCE_PATH = \"localanime\"\nprivate const val MPV_CONFIG_PATH = \"mpv-config\"\nprivate const val FONTS_PATH = \"fonts\"\nconst val SCRIPTS_PATH = \"scripts\"\nconst val SCRIPT_OPTS_PATH = \"script-opts\"\nprivate const val SHADERS_PATH = \"shaders\"\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/storage/service/StoragePreferences.kt",
    "content": "package tachiyomi.domain.storage.service\n\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.core.common.storage.FolderProvider\n\nclass StoragePreferences(\n    private val folderProvider: FolderProvider,\n    private val preferenceStore: PreferenceStore,\n) {\n\n    fun baseStorageDirectory() = preferenceStore.getString(Preference.appStateKey(\"storage_dir\"), folderProvider.path())\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/anime/interactor/DeleteAnimeTrack.kt",
    "content": "package tachiyomi.domain.track.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.anime.repository.AnimeTrackRepository\n\nclass DeleteAnimeTrack(\n    private val trackRepository: AnimeTrackRepository,\n) {\n\n    suspend fun await(animeId: Long, trackerId: Long) {\n        try {\n            trackRepository.delete(animeId, trackerId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/anime/interactor/GetAnimeTracks.kt",
    "content": "package tachiyomi.domain.track.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.domain.track.anime.repository.AnimeTrackRepository\n\nclass GetAnimeTracks(\n    private val animetrackRepository: AnimeTrackRepository,\n) {\n\n    suspend fun awaitOne(id: Long): AnimeTrack? {\n        return try {\n            animetrackRepository.getTrackByAnimeId(id)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    suspend fun await(animeId: Long): List<AnimeTrack> {\n        return try {\n            animetrackRepository.getTracksByAnimeId(animeId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n\n    fun subscribe(animeId: Long): Flow<List<AnimeTrack>> {\n        return animetrackRepository.getTracksByAnimeIdAsFlow(animeId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/anime/interactor/GetTracksPerAnime.kt",
    "content": "package tachiyomi.domain.track.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.domain.track.anime.repository.AnimeTrackRepository\n\nclass GetTracksPerAnime(\n    private val trackRepository: AnimeTrackRepository,\n) {\n\n    fun subscribe(): Flow<Map<Long, List<AnimeTrack>>> {\n        return trackRepository.getAnimeTracksAsFlow().map { tracks -> tracks.groupBy { it.animeId } }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/anime/interactor/InsertAnimeTrack.kt",
    "content": "package tachiyomi.domain.track.anime.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.anime.model.AnimeTrack\nimport tachiyomi.domain.track.anime.repository.AnimeTrackRepository\n\nclass InsertAnimeTrack(\n    private val animetrackRepository: AnimeTrackRepository,\n) {\n\n    suspend fun await(track: AnimeTrack) {\n        try {\n            animetrackRepository.insertAnime(track)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    suspend fun awaitAll(tracks: List<AnimeTrack>) {\n        try {\n            animetrackRepository.insertAllAnime(tracks)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/anime/model/AnimeTrack.kt",
    "content": "package tachiyomi.domain.track.anime.model\n\nimport java.io.Serializable\n\ndata class AnimeTrack(\n    val id: Long,\n    val animeId: Long,\n    val trackerId: Long,\n    val remoteId: Long,\n    val libraryId: Long?,\n    val title: String,\n    val lastEpisodeSeen: Double,\n    val totalEpisodes: Long,\n    val status: Long,\n    val score: Double,\n    val remoteUrl: String,\n    val startDate: Long,\n    val finishDate: Long,\n    val private: Boolean,\n) : Serializable\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/anime/repository/AnimeTrackRepository.kt",
    "content": "package tachiyomi.domain.track.anime.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.track.anime.model.AnimeTrack\n\ninterface AnimeTrackRepository {\n\n    suspend fun getTrackByAnimeId(id: Long): AnimeTrack?\n\n    suspend fun getTracksByAnimeId(animeId: Long): List<AnimeTrack>\n\n    fun getAnimeTracksAsFlow(): Flow<List<AnimeTrack>>\n\n    fun getTracksByAnimeIdAsFlow(animeId: Long): Flow<List<AnimeTrack>>\n\n    suspend fun delete(animeId: Long, trackerId: Long)\n\n    suspend fun insertAnime(track: AnimeTrack)\n\n    suspend fun insertAllAnime(tracks: List<AnimeTrack>)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/manga/interactor/DeleteMangaTrack.kt",
    "content": "package tachiyomi.domain.track.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.manga.repository.MangaTrackRepository\n\nclass DeleteMangaTrack(\n    private val trackRepository: MangaTrackRepository,\n) {\n\n    suspend fun await(mangaId: Long, trackerId: Long) {\n        try {\n            trackRepository.delete(mangaId, trackerId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/manga/interactor/GetMangaTracks.kt",
    "content": "package tachiyomi.domain.track.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.domain.track.manga.repository.MangaTrackRepository\n\nclass GetMangaTracks(\n    private val trackRepository: MangaTrackRepository,\n) {\n\n    suspend fun awaitOne(id: Long): MangaTrack? {\n        return try {\n            trackRepository.getTrackByMangaId(id)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            null\n        }\n    }\n\n    suspend fun await(mangaId: Long): List<MangaTrack> {\n        return try {\n            trackRepository.getTracksByMangaId(mangaId)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n            emptyList()\n        }\n    }\n\n    fun subscribe(mangaId: Long): Flow<List<MangaTrack>> {\n        return trackRepository.getTracksByMangaIdAsFlow(mangaId)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/manga/interactor/GetTracksPerManga.kt",
    "content": "package tachiyomi.domain.track.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.domain.track.manga.repository.MangaTrackRepository\n\nclass GetTracksPerManga(\n    private val trackRepository: MangaTrackRepository,\n) {\n\n    fun subscribe(): Flow<Map<Long, List<MangaTrack>>> {\n        return trackRepository.getMangaTracksAsFlow().map { tracks -> tracks.groupBy { it.mangaId } }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/manga/interactor/InsertMangaTrack.kt",
    "content": "package tachiyomi.domain.track.manga.interactor\n\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.track.manga.model.MangaTrack\nimport tachiyomi.domain.track.manga.repository.MangaTrackRepository\n\nclass InsertMangaTrack(\n    private val trackRepository: MangaTrackRepository,\n) {\n\n    suspend fun await(track: MangaTrack) {\n        try {\n            trackRepository.insertManga(track)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n\n    suspend fun awaitAll(tracks: List<MangaTrack>) {\n        try {\n            trackRepository.insertAllManga(tracks)\n        } catch (e: Exception) {\n            logcat(LogPriority.ERROR, e)\n        }\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/manga/model/MangaTrack.kt",
    "content": "package tachiyomi.domain.track.manga.model\n\nimport java.io.Serializable\n\ndata class MangaTrack(\n    val id: Long,\n    val mangaId: Long,\n    val trackerId: Long,\n    val remoteId: Long,\n    val libraryId: Long?,\n    val title: String,\n    val lastChapterRead: Double,\n    val totalChapters: Long,\n    val status: Long,\n    val score: Double,\n    val remoteUrl: String,\n    val startDate: Long,\n    val finishDate: Long,\n    val private: Boolean,\n) : Serializable\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/track/manga/repository/MangaTrackRepository.kt",
    "content": "package tachiyomi.domain.track.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.track.manga.model.MangaTrack\n\ninterface MangaTrackRepository {\n\n    suspend fun getTrackByMangaId(id: Long): MangaTrack?\n\n    suspend fun getTracksByMangaId(mangaId: Long): List<MangaTrack>\n\n    fun getMangaTracksAsFlow(): Flow<List<MangaTrack>>\n\n    fun getTracksByMangaIdAsFlow(mangaId: Long): Flow<List<MangaTrack>>\n\n    suspend fun delete(mangaId: Long, trackerId: Long)\n\n    suspend fun insertManga(track: MangaTrack)\n\n    suspend fun insertAllManga(tracks: List<MangaTrack>)\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/updates/anime/interactor/GetAnimeUpdates.kt",
    "content": "package tachiyomi.domain.updates.anime.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations\nimport tachiyomi.domain.updates.anime.repository.AnimeUpdatesRepository\nimport java.time.Instant\n\nclass GetAnimeUpdates(\n    private val repository: AnimeUpdatesRepository,\n) {\n\n    suspend fun await(seen: Boolean, after: Long): List<AnimeUpdatesWithRelations> {\n        return repository.awaitWithSeen(seen, after, limit = 500)\n    }\n\n    fun subscribe(instant: Instant): Flow<List<AnimeUpdatesWithRelations>> {\n        return repository.subscribeAllAnimeUpdates(instant.toEpochMilli(), limit = 500)\n    }\n\n    fun subscribe(seen: Boolean, after: Long): Flow<List<AnimeUpdatesWithRelations>> {\n        return repository.subscribeWithSeen(seen, after, limit = 500)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/updates/anime/model/AnimeUpdatesWithRelations.kt",
    "content": "package tachiyomi.domain.updates.anime.model\n\nimport tachiyomi.domain.entries.anime.model.AnimeCover\n\ndata class AnimeUpdatesWithRelations(\n    val animeId: Long,\n    val animeTitle: String,\n    val episodeId: Long,\n    val episodeName: String,\n    val scanlator: String?,\n    val seen: Boolean,\n    val bookmark: Boolean,\n    val fillermark: Boolean,\n    val lastSecondSeen: Long,\n    val totalSeconds: Long,\n    val sourceId: Long,\n    val dateFetch: Long,\n    val coverData: AnimeCover,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/updates/anime/repository/AnimeUpdatesRepository.kt",
    "content": "package tachiyomi.domain.updates.anime.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations\n\ninterface AnimeUpdatesRepository {\n\n    suspend fun awaitWithSeen(seen: Boolean, after: Long, limit: Long): List<AnimeUpdatesWithRelations>\n\n    fun subscribeAllAnimeUpdates(after: Long, limit: Long): Flow<List<AnimeUpdatesWithRelations>>\n\n    fun subscribeWithSeen(seen: Boolean, after: Long, limit: Long): Flow<List<AnimeUpdatesWithRelations>>\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/updates/manga/interactor/GetMangaUpdates.kt",
    "content": "package tachiyomi.domain.updates.manga.interactor\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations\nimport tachiyomi.domain.updates.manga.repository.MangaUpdatesRepository\nimport java.time.Instant\n\nclass GetMangaUpdates(\n    private val repository: MangaUpdatesRepository,\n) {\n\n    suspend fun await(read: Boolean, after: Long): List<MangaUpdatesWithRelations> {\n        return repository.awaitWithRead(read, after, limit = 500)\n    }\n\n    fun subscribe(instant: Instant): Flow<List<MangaUpdatesWithRelations>> {\n        return repository.subscribeAllMangaUpdates(instant.toEpochMilli(), limit = 500)\n    }\n\n    fun subscribe(read: Boolean, after: Long): Flow<List<MangaUpdatesWithRelations>> {\n        return repository.subscribeWithRead(read, after, limit = 500)\n    }\n}\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/updates/manga/model/MangaUpdatesWithRelations.kt",
    "content": "package tachiyomi.domain.updates.manga.model\n\nimport tachiyomi.domain.entries.manga.model.MangaCover\n\ndata class MangaUpdatesWithRelations(\n    val mangaId: Long,\n    val mangaTitle: String,\n    val chapterId: Long,\n    val chapterName: String,\n    val scanlator: String?,\n    val read: Boolean,\n    val bookmark: Boolean,\n    val lastPageRead: Long,\n    val sourceId: Long,\n    val dateFetch: Long,\n    val coverData: MangaCover,\n)\n"
  },
  {
    "path": "domain/src/main/java/tachiyomi/domain/updates/manga/repository/MangaUpdatesRepository.kt",
    "content": "package tachiyomi.domain.updates.manga.repository\n\nimport kotlinx.coroutines.flow.Flow\nimport tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations\n\ninterface MangaUpdatesRepository {\n\n    suspend fun awaitWithRead(read: Boolean, after: Long, limit: Long): List<MangaUpdatesWithRelations>\n\n    fun subscribeAllMangaUpdates(after: Long, limit: Long): Flow<List<MangaUpdatesWithRelations>>\n\n    fun subscribeWithRead(read: Boolean, after: Long, limit: Long): Flow<List<MangaUpdatesWithRelations>>\n}\n"
  },
  {
    "path": "domain/src/test/java/tachiyomi/domain/entries/anime/interactor/AnimeFetchIntervalTest.kt",
    "content": "package tachiyomi.domain.entries.anime.interactor\n\nimport io.kotest.matchers.shouldBe\nimport io.mockk.mockk\nimport org.junit.jupiter.api.Test\nimport org.junit.jupiter.api.parallel.Execution\nimport org.junit.jupiter.api.parallel.ExecutionMode\nimport tachiyomi.domain.items.episode.model.Episode\nimport java.time.ZoneOffset\nimport java.time.ZonedDateTime\nimport kotlin.time.Duration\nimport kotlin.time.Duration.Companion.days\nimport kotlin.time.Duration.Companion.hours\nimport kotlin.time.DurationUnit\nimport kotlin.time.toDuration\nimport kotlin.time.toJavaDuration\n\n@Execution(ExecutionMode.CONCURRENT)\nclass AnimeFetchIntervalTest {\n\n    private val testTime = ZonedDateTime.parse(\"2020-01-01T00:00:00Z\")\n    private val testZoneId = ZoneOffset.UTC\n    private var episode = Episode.create().copy(\n        dateFetch = testTime.toEpochSecond() * 1000,\n        dateUpload = testTime.toEpochSecond() * 1000,\n    )\n\n    private val fetchInterval = AnimeFetchInterval(mockk())\n\n    @Test\n    fun `returns default interval of 7 days when not enough distinct days`() {\n        val episodesWithUploadDate = (1..50).map {\n            episodeWithTime(episode, 1.days)\n        }\n        fetchInterval.calculateInterval(episodesWithUploadDate, testZoneId) shouldBe 7\n\n        val episodesWithoutUploadDate = episodesWithUploadDate.map {\n            it.copy(dateUpload = 0L)\n        }\n        fetchInterval.calculateInterval(episodesWithoutUploadDate, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval based on more recent episodes`() {\n        val oldEpisodes = (1..5).map {\n            episodeWithTime(episode, (it * 7).days) // Would have interval of 7 days\n        }\n        val newEpisodes = (1..10).map {\n            episodeWithTime(episode, oldEpisodes.lastUploadDate() + it.days)\n        }\n\n        val episodes = oldEpisodes + newEpisodes\n\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval based on smaller subset of recent episodes if very few episodes`() {\n        val oldEpisodes = (1..3).map {\n            episodeWithTime(episode, (it * 7).days)\n        }\n        // Significant gap between episodes\n        val newEpisodes = (1..3).map {\n            episodeWithTime(episode, oldEpisodes.lastUploadDate() + 365.days + (it * 7).days)\n        }\n\n        val episodes = oldEpisodes + newEpisodes\n\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval of 7 days when multiple episodes in 1 day`() {\n        val episodes = (1..10).map {\n            episodeWithTime(episode, 10.hours)\n        }\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval of 7 days when multiple episodes in 2 days`() {\n        val episodes = (1..2).map {\n            episodeWithTime(episode, 1.days)\n        } + (1..5).map {\n            episodeWithTime(episode, 2.days)\n        }\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval of 1 day when episodes are released every 1 day`() {\n        val episodes = (1..20).map {\n            episodeWithTime(episode, it.days)\n        }\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval of 1 day when delta is less than 1 day`() {\n        val episodes = (1..20).map {\n            episodeWithTime(episode, (15 * it).hours)\n        }\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval of 2 days when episodes are released every 2 days`() {\n        val episodes = (1..20).map {\n            episodeWithTime(episode, (2 * it).days)\n        }\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 2\n    }\n\n    @Test\n    fun `returns interval with floored value when interval is decimal`() {\n        val episodesWithUploadDate = (1..5).map {\n            episodeWithTime(episode, (25 * it).hours)\n        }\n        fetchInterval.calculateInterval(episodesWithUploadDate, testZoneId) shouldBe 1\n\n        val episodesWithoutUploadDate = episodesWithUploadDate.map {\n            it.copy(dateUpload = 0L)\n        }\n        fetchInterval.calculateInterval(episodesWithoutUploadDate, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval of 1 day when episodes are released just below every 2 days`() {\n        val episodes = (1..20).map {\n            episodeWithTime(episode, (43 * it).hours)\n        }\n        fetchInterval.calculateInterval(episodes, testZoneId) shouldBe 1\n    }\n\n    private fun episodeWithTime(episode: Episode, duration: Duration): Episode {\n        val newTime = testTime.plus(duration.toJavaDuration()).toEpochSecond() * 1000\n        return episode.copy(dateFetch = newTime, dateUpload = newTime)\n    }\n\n    private fun List<Episode>.lastUploadDate() =\n        last().dateUpload.toDuration(DurationUnit.MILLISECONDS)\n}\n"
  },
  {
    "path": "domain/src/test/java/tachiyomi/domain/entries/manga/interactor/MangaFetchIntervalTest.kt",
    "content": "package tachiyomi.domain.entries.manga.interactor\n\nimport io.kotest.matchers.shouldBe\nimport io.mockk.mockk\nimport org.junit.jupiter.api.Test\nimport org.junit.jupiter.api.parallel.Execution\nimport org.junit.jupiter.api.parallel.ExecutionMode\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport java.time.ZoneOffset\nimport java.time.ZonedDateTime\nimport kotlin.time.Duration\nimport kotlin.time.Duration.Companion.days\nimport kotlin.time.Duration.Companion.hours\nimport kotlin.time.DurationUnit\nimport kotlin.time.toDuration\nimport kotlin.time.toJavaDuration\n\n@Execution(ExecutionMode.CONCURRENT)\nclass MangaFetchIntervalTest {\n\n    private val testTime = ZonedDateTime.parse(\"2020-01-01T00:00:00Z\")\n    private val testZoneId = ZoneOffset.UTC\n    private var chapter = Chapter.create().copy(\n        dateFetch = testTime.toEpochSecond() * 1000,\n        dateUpload = testTime.toEpochSecond() * 1000,\n    )\n\n    private val fetchInterval = MangaFetchInterval(mockk())\n\n    @Test\n    fun `returns default interval of 7 days when not enough distinct days`() {\n        val chaptersWithUploadDate = (1..50).map {\n            chapterWithTime(chapter, 1.days)\n        }\n        fetchInterval.calculateInterval(chaptersWithUploadDate, testZoneId) shouldBe 7\n\n        val chaptersWithoutUploadDate = chaptersWithUploadDate.map {\n            it.copy(dateUpload = 0L)\n        }\n        fetchInterval.calculateInterval(chaptersWithoutUploadDate, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval based on more recent chapters`() {\n        val oldChapters = (1..5).map {\n            chapterWithTime(chapter, (it * 7).days) // Would have interval of 7 days\n        }\n        val newChapters = (1..10).map {\n            chapterWithTime(chapter, oldChapters.lastUploadDate() + it.days)\n        }\n\n        val chapters = oldChapters + newChapters\n\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval based on smaller subset of recent chapters if very few chapters`() {\n        val oldChapters = (1..3).map {\n            chapterWithTime(chapter, (it * 7).days)\n        }\n        // Significant gap between chapters\n        val newChapters = (1..3).map {\n            chapterWithTime(chapter, oldChapters.lastUploadDate() + 365.days + (it * 7).days)\n        }\n\n        val chapters = oldChapters + newChapters\n\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval of 7 days when multiple chapters in 1 day`() {\n        val chapters = (1..10).map {\n            chapterWithTime(chapter, 10.hours)\n        }\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval of 7 days when multiple chapters in 2 days`() {\n        val chapters = (1..2).map {\n            chapterWithTime(chapter, 1.days)\n        } + (1..5).map {\n            chapterWithTime(chapter, 2.days)\n        }\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 7\n    }\n\n    @Test\n    fun `returns interval of 1 day when chapters are released every 1 day`() {\n        val chapters = (1..20).map {\n            chapterWithTime(chapter, it.days)\n        }\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval of 1 day when delta is less than 1 day`() {\n        val chapters = (1..20).map {\n            chapterWithTime(chapter, (15 * it).hours)\n        }\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval of 2 days when chapters are released every 2 days`() {\n        val chapters = (1..20).map {\n            chapterWithTime(chapter, (2 * it).days)\n        }\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 2\n    }\n\n    @Test\n    fun `returns interval with floored value when interval is decimal`() {\n        val chaptersWithUploadDate = (1..5).map {\n            chapterWithTime(chapter, (25 * it).hours)\n        }\n        fetchInterval.calculateInterval(chaptersWithUploadDate, testZoneId) shouldBe 1\n\n        val chaptersWithoutUploadDate = chaptersWithUploadDate.map {\n            it.copy(dateUpload = 0L)\n        }\n        fetchInterval.calculateInterval(chaptersWithoutUploadDate, testZoneId) shouldBe 1\n    }\n\n    @Test\n    fun `returns interval of 1 day when chapters are released just below every 2 days`() {\n        val chapters = (1..20).map {\n            chapterWithTime(chapter, (43 * it).hours)\n        }\n        fetchInterval.calculateInterval(chapters, testZoneId) shouldBe 1\n    }\n\n    private fun chapterWithTime(chapter: Chapter, duration: Duration): Chapter {\n        val newTime = testTime.plus(duration.toJavaDuration()).toEpochSecond() * 1000\n        return chapter.copy(dateFetch = newTime, dateUpload = newTime)\n    }\n\n    private fun List<Chapter>.lastUploadDate() =\n        last().dateUpload.toDuration(DurationUnit.MILLISECONDS)\n}\n"
  },
  {
    "path": "domain/src/test/java/tachiyomi/domain/items/chapter/service/ChapterRecognitionTest.kt",
    "content": "package tachiyomi.domain.items.chapter.service\n\nimport io.kotest.matchers.shouldBe\nimport org.junit.jupiter.api.Test\nimport org.junit.jupiter.api.parallel.Execution\nimport org.junit.jupiter.api.parallel.ExecutionMode\n\n@Execution(ExecutionMode.CONCURRENT)\nclass ChapterRecognitionTest {\n\n    @Test\n    fun `Basic Ch prefix`() {\n        val mangaTitle = \"Mokushiroku Alice\"\n\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch.4: Misrepresentation\", 4.0)\n    }\n\n    @Test\n    fun `Basic Ch prefix with space after period`() {\n        val mangaTitle = \"Mokushiroku Alice\"\n\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol. 1 Ch. 4: Misrepresentation\", 4.0)\n    }\n\n    @Test\n    fun `Basic Ch prefix with decimal`() {\n        val mangaTitle = \"Mokushiroku Alice\"\n\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch.4.1: Misrepresentation\", 4.1)\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch.4.4: Misrepresentation\", 4.4)\n    }\n\n    @Test\n    fun `Basic Ch prefix with alpha postfix`() {\n        val mangaTitle = \"Mokushiroku Alice\"\n\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch.4.a: Misrepresentation\", 4.1)\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch.4.b: Misrepresentation\", 4.2)\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch.4.extra: Misrepresentation\", 4.99)\n    }\n\n    @Test\n    fun `Name containing one number`() {\n        val mangaTitle = \"Bleach\"\n\n        assertChapter(mangaTitle, \"Bleach 567 Down With Snowwhite\", 567.0)\n    }\n\n    @Test\n    fun `Name containing one number and decimal`() {\n        val mangaTitle = \"Bleach\"\n\n        assertChapter(mangaTitle, \"Bleach 567.1 Down With Snowwhite\", 567.1)\n        assertChapter(mangaTitle, \"Bleach 567.4 Down With Snowwhite\", 567.4)\n    }\n\n    @Test\n    fun `Name containing one number and alpha`() {\n        val mangaTitle = \"Bleach\"\n\n        assertChapter(mangaTitle, \"Bleach 567.a Down With Snowwhite\", 567.1)\n        assertChapter(mangaTitle, \"Bleach 567.b Down With Snowwhite\", 567.2)\n        assertChapter(mangaTitle, \"Bleach 567.extra Down With Snowwhite\", 567.99)\n    }\n\n    @Test\n    fun `Chapter containing manga title and number`() {\n        val mangaTitle = \"Solanin\"\n\n        assertChapter(mangaTitle, \"Solanin 028 Vol. 2\", 28.0)\n    }\n\n    @Test\n    fun `Chapter containing manga title and number decimal`() {\n        val mangaTitle = \"Solanin\"\n\n        assertChapter(mangaTitle, \"Solanin 028.1 Vol. 2\", 28.1)\n        assertChapter(mangaTitle, \"Solanin 028.4 Vol. 2\", 28.4)\n    }\n\n    @Test\n    fun `Chapter containing manga title and number alpha`() {\n        val mangaTitle = \"Solanin\"\n\n        assertChapter(mangaTitle, \"Solanin 028.a Vol. 2\", 28.1)\n        assertChapter(mangaTitle, \"Solanin 028.b Vol. 2\", 28.2)\n        assertChapter(mangaTitle, \"Solanin 028.extra Vol. 2\", 28.99)\n    }\n\n    @Test\n    fun `Extreme case`() {\n        val mangaTitle = \"Onepunch-Man\"\n\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 028\", 28.0)\n    }\n\n    @Test\n    fun `Extreme case with decimal`() {\n        val mangaTitle = \"Onepunch-Man\"\n\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 028.1\", 28.1)\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 028.4\", 28.4)\n    }\n\n    @Test\n    fun `Extreme case with alpha`() {\n        val mangaTitle = \"Onepunch-Man\"\n\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 028.a\", 28.1)\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 028.b\", 28.2)\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 028.extra\", 28.99)\n    }\n\n    @Test\n    fun `Chapter containing dot v2`() {\n        val mangaTitle = \"random\"\n\n        assertChapter(mangaTitle, \"Vol.1 Ch.5v.2: Alones\", 5.0)\n    }\n\n    @Test\n    fun `Number in manga title`() {\n        val mangaTitle = \"Ayame 14\"\n\n        assertChapter(mangaTitle, \"Ayame 14 1 - The summer of 14\", 1.0)\n    }\n\n    @Test\n    fun `Space between ch x`() {\n        val mangaTitle = \"Mokushiroku Alice\"\n\n        assertChapter(mangaTitle, \"Mokushiroku Alice Vol.1 Ch. 4: Misrepresentation\", 4.0)\n    }\n\n    @Test\n    fun `Chapter title with ch substring`() {\n        val mangaTitle = \"Ayame 14\"\n\n        assertChapter(mangaTitle, \"Vol.1 Ch.1: March 25 (First Day Cohabiting)\", 1.0)\n    }\n\n    @Test\n    fun `Chapter containing multiple zeros`() {\n        val mangaTitle = \"random\"\n\n        assertChapter(mangaTitle, \"Vol.001 Ch.003: Kaguya Doesn't Know Much\", 3.0)\n    }\n\n    @Test\n    fun `Chapter with version before number`() {\n        val mangaTitle = \"Onepunch-Man\"\n\n        assertChapter(mangaTitle, \"Onepunch-Man Punch Ver002 086 : Creeping Darkness [3]\", 86.0)\n    }\n\n    @Test\n    fun `Version attached to chapter number`() {\n        val mangaTitle = \"Ansatsu Kyoushitsu\"\n\n        assertChapter(mangaTitle, \"Ansatsu Kyoushitsu 011v002: Assembly Time\", 11.0)\n    }\n\n    /**\n     * Case where the chapter title contains the chapter\n     * But wait it's not actual the chapter number.\n     */\n    @Test\n    fun `Number after manga title with chapter in chapter title case`() {\n        val mangaTitle = \"Tokyo ESP\"\n\n        assertChapter(mangaTitle, \"Tokyo ESP 027: Part 002: Chapter 001\", 027.0)\n    }\n\n    /**\n     * Case where the chapter title contains the unwanted tag\n     * But follow by chapter number.\n     */\n    @Test\n    fun `Number after unwanted tag`() {\n        val mangaTitle = \"One-punch Man\"\n\n        assertChapter(mangaTitle, \"Mag Version 195.5\", 195.5)\n    }\n\n    @Test\n    fun `Unparseable chapter`() {\n        val mangaTitle = \"random\"\n\n        assertChapter(mangaTitle, \"Foo\", -1.0)\n    }\n\n    @Test\n    fun `Chapter with time in title`() {\n        val mangaTitle = \"random\"\n\n        assertChapter(mangaTitle, \"Fairy Tail 404: 00:00\", 404.0)\n    }\n\n    @Test\n    fun `Chapter with alpha without dot`() {\n        val mangaTitle = \"random\"\n\n        assertChapter(mangaTitle, \"Asu No Yoichi 19a\", 19.1)\n    }\n\n    @Test\n    fun `Chapter title containing extra and vol`() {\n        val mangaTitle = \"Fairy Tail\"\n\n        assertChapter(mangaTitle, \"Fairy Tail 404.extravol002\", 404.99)\n        assertChapter(mangaTitle, \"Fairy Tail 404 extravol002\", 404.99)\n    }\n\n    @Test\n    fun `Chapter title containing omake (japanese extra) and vol`() {\n        val mangaTitle = \"Fairy Tail\"\n\n        assertChapter(mangaTitle, \"Fairy Tail 404.omakevol002\", 404.98)\n        assertChapter(mangaTitle, \"Fairy Tail 404 omakevol002\", 404.98)\n    }\n\n    @Test\n    fun `Chapter title containing special and vol`() {\n        val mangaTitle = \"Fairy Tail\"\n\n        assertChapter(mangaTitle, \"Fairy Tail 404.specialvol002\", 404.97)\n        assertChapter(mangaTitle, \"Fairy Tail 404 specialvol002\", 404.97)\n    }\n\n    @Test\n    fun `Chapter title containing commas`() {\n        val mangaTitle = \"One Piece\"\n\n        assertChapter(mangaTitle, \"One Piece 300,a\", 300.1)\n        assertChapter(mangaTitle, \"One Piece Ch,123,extra\", 123.99)\n        assertChapter(mangaTitle, \"One Piece the sunny, goes swimming 024,005\", 24.005)\n    }\n\n    @Test\n    fun `Chapter title containing hyphens`() {\n        val mangaTitle = \"Solo Leveling\"\n\n        assertChapter(mangaTitle, \"ch 122-a\", 122.1)\n        assertChapter(mangaTitle, \"Solo Leveling Ch.123-extra\", 123.99)\n        assertChapter(mangaTitle, \"Solo Leveling, 024-005\", 24.005)\n        assertChapter(mangaTitle, \"Ch.191-200 Read Online\", 191.200)\n    }\n\n    @Test\n    fun `Chapters containing season`() {\n        assertChapter(\"D.I.C.E\", \"D.I.C.E[Season 001] Ep. 007\", 7.0)\n    }\n\n    @Test\n    fun `Chapters in format sx - chapter xx`() {\n        assertChapter(\"The Gamer\", \"S3 - Chapter 20\", 20.0)\n    }\n\n    @Test\n    fun `Chapters ending with s`() {\n        assertChapter(\"One Outs\", \"One Outs 001\", 1.0)\n    }\n\n    @Test\n    fun `Chapters containing ordinals`() {\n        val mangaTitle = \"The Sister of the Woods with a Thousand Young\"\n\n        assertChapter(mangaTitle, \"The 1st Night\", 1.0)\n        assertChapter(mangaTitle, \"The 2nd Night\", 2.0)\n        assertChapter(mangaTitle, \"The 3rd Night\", 3.0)\n        assertChapter(mangaTitle, \"The 4th Night\", 4.0)\n    }\n\n    private fun assertChapter(mangaTitle: String, name: String, expected: Double) {\n        ChapterRecognition.parseChapterNumber(mangaTitle, name) shouldBe expected\n    }\n}\n"
  },
  {
    "path": "domain/src/test/java/tachiyomi/domain/items/service/MissingItemsTest.kt",
    "content": "package tachiyomi.domain.items.service\n\nimport io.kotest.matchers.shouldBe\nimport org.junit.jupiter.api.Test\nimport org.junit.jupiter.api.parallel.Execution\nimport org.junit.jupiter.api.parallel.ExecutionMode\nimport tachiyomi.domain.items.chapter.model.Chapter\nimport tachiyomi.domain.items.chapter.service.calculateChapterGap\nimport tachiyomi.domain.items.chapter.service.missingChaptersCount\nimport tachiyomi.domain.items.episode.model.Episode\nimport tachiyomi.domain.items.episode.service.calculateEpisodeGap\n\n@Execution(ExecutionMode.CONCURRENT)\nclass MissingItemsTest {\n\n    @Test\n    fun `missingChaptersCount returns 0 when empty list`() {\n        emptyList<Double>().missingChaptersCount() shouldBe 0\n    }\n\n    @Test\n    fun `missingChaptersCount returns 0 when all unknown item numbers`() {\n        listOf(-1.0, -1.0, -1.0).missingChaptersCount() shouldBe 0\n    }\n\n    @Test\n    fun `missingChaptersCount handles repeated base item numbers`() {\n        listOf(1.0, 1.0, 1.1, 1.5, 1.6, 1.99).missingChaptersCount() shouldBe 0\n    }\n\n    @Test\n    fun `missingChaptersCount returns number of missing items`() {\n        listOf(-1.0, 1.0, 2.0, 2.2, 4.0, 6.0, 10.0, 10.0).missingChaptersCount() shouldBe 5\n    }\n\n    @Test\n    fun `calculateChapterGap returns difference`() {\n        calculateChapterGap(chapter(10.0), chapter(9.0)) shouldBe 0f\n        calculateChapterGap(chapter(10.0), chapter(8.0)) shouldBe 1f\n        calculateChapterGap(chapter(10.0), chapter(8.5)) shouldBe 1f\n        calculateChapterGap(chapter(10.0), chapter(1.1)) shouldBe 8f\n\n        calculateChapterGap(10.0, 9.0) shouldBe 0f\n        calculateChapterGap(10.0, 8.0) shouldBe 1f\n        calculateChapterGap(10.0, 8.5) shouldBe 1f\n        calculateChapterGap(10.0, 1.1) shouldBe 8f\n    }\n\n    @Test\n    fun `calculateChapterGap returns 0 if either are not valid chapter numbers`() {\n        calculateChapterGap(chapter(-1.0), chapter(10.0)) shouldBe 0\n        calculateChapterGap(chapter(99.0), chapter(-1.0)) shouldBe 0\n\n        calculateChapterGap(-1.0, 10.0) shouldBe 0\n        calculateChapterGap(99.0, -1.0) shouldBe 0\n    }\n\n    private fun chapter(number: Double) = Chapter.create().copy(\n        chapterNumber = number,\n    )\n\n    @Test\n    fun `calculateEpisodeGap returns difference`() {\n        calculateEpisodeGap(episode(10.0), episode(9.0)) shouldBe 0f\n        calculateEpisodeGap(episode(10.0), episode(8.0)) shouldBe 1f\n        calculateEpisodeGap(episode(10.0), episode(8.5)) shouldBe 1f\n        calculateEpisodeGap(episode(10.0), episode(1.1)) shouldBe 8f\n\n        calculateEpisodeGap(10.0, 9.0) shouldBe 0f\n        calculateEpisodeGap(10.0, 8.0) shouldBe 1f\n        calculateEpisodeGap(10.0, 8.5) shouldBe 1f\n        calculateEpisodeGap(10.0, 1.1) shouldBe 8f\n    }\n\n    @Test\n    fun `calculateEpisodeGap returns 0 if either are not valid episode numbers`() {\n        calculateEpisodeGap(episode(-1.0), episode(10.0)) shouldBe 0\n        calculateEpisodeGap(episode(99.0), episode(-1.0)) shouldBe 0\n\n        calculateEpisodeGap(-1.0, 10.0) shouldBe 0\n        calculateEpisodeGap(99.0, -1.0) shouldBe 0\n    }\n\n    private fun episode(number: Double) = Episode.create().copy(\n        episodeNumber = number,\n    )\n}\n"
  },
  {
    "path": "domain/src/test/java/tachiyomi/domain/library/model/LibraryFlagsTest.kt",
    "content": "package tachiyomi.domain.library.model\n\nimport io.kotest.matchers.shouldBe\nimport io.kotest.matchers.shouldNotBe\nimport org.junit.jupiter.api.Test\nimport org.junit.jupiter.api.parallel.Execution\nimport org.junit.jupiter.api.parallel.ExecutionMode\nimport tachiyomi.domain.library.anime.model.AnimeLibrarySort\nimport tachiyomi.domain.library.manga.model.MangaLibrarySort\n\n@Execution(ExecutionMode.CONCURRENT)\nclass LibraryFlagsTest {\n\n    @Test\n    fun `Check the amount of flags`() {\n        LibraryDisplayMode.values.size shouldBe 4\n        MangaLibrarySort.types.size shouldBe 10\n        MangaLibrarySort.directions.size shouldBe 2\n        AnimeLibrarySort.types.size shouldBe 11\n        AnimeLibrarySort.directions.size shouldBe 2\n    }\n\n    @Test\n    fun `Test Flag plus operator (LibrarySort)`() {\n        val mangacurrent = MangaLibrarySort(\n            MangaLibrarySort.Type.LastRead,\n            MangaLibrarySort.Direction.Ascending,\n        )\n        val animecurrent = AnimeLibrarySort(\n            AnimeLibrarySort.Type.LastSeen,\n            AnimeLibrarySort.Direction.Ascending,\n        )\n        val newmanga = MangaLibrarySort(\n            MangaLibrarySort.Type.DateAdded,\n            MangaLibrarySort.Direction.Ascending,\n        )\n        val newanime = AnimeLibrarySort(\n            AnimeLibrarySort.Type.DateAdded,\n            AnimeLibrarySort.Direction.Ascending,\n        )\n        val mangaflag = mangacurrent + newmanga\n        val animeflag = animecurrent + newanime\n\n        mangaflag shouldBe 0b01011100\n        animeflag shouldBe 0b01011100\n    }\n\n    @Test\n    fun `Test Flag plus operator`() {\n        val mangasort = MangaLibrarySort(\n            MangaLibrarySort.Type.DateAdded,\n            MangaLibrarySort.Direction.Ascending,\n        )\n        val animesort = AnimeLibrarySort(\n            AnimeLibrarySort.Type.DateAdded,\n            AnimeLibrarySort.Direction.Ascending,\n        )\n\n        mangasort.flag shouldBe 0b01011100\n        animesort.flag shouldBe 0b01011100\n    }\n\n    @Test\n    fun `Test Flag plus operator with old flag as base`() {\n        val currentmangaSort = MangaLibrarySort(\n            MangaLibrarySort.Type.UnreadCount,\n            MangaLibrarySort.Direction.Descending,\n        )\n        currentmangaSort.flag shouldBe 0b00001100\n        val currentanimeSort = AnimeLibrarySort(\n            AnimeLibrarySort.Type.UnseenCount,\n            AnimeLibrarySort.Direction.Descending,\n        )\n        currentanimeSort.flag shouldBe 0b00001100\n\n        val mangasort = MangaLibrarySort(\n            MangaLibrarySort.Type.DateAdded,\n            MangaLibrarySort.Direction.Ascending,\n        )\n        val mangaflag = currentmangaSort.flag + mangasort\n        val animesort = AnimeLibrarySort(\n            AnimeLibrarySort.Type.DateAdded,\n            AnimeLibrarySort.Direction.Ascending,\n        )\n        val animeflag = animesort.flag + animesort\n\n        mangaflag shouldBe 0b01011100\n        mangaflag shouldNotBe currentmangaSort.flag\n        animeflag shouldBe 0b01011100\n        animeflag shouldNotBe currentanimeSort.flag\n    }\n\n    @Test\n    fun `Test default flags`() {\n        val mangasort = MangaLibrarySort.default\n        val animesort = AnimeLibrarySort.default\n        val mangaflag = mangasort.type + mangasort.direction\n        val animeflag = animesort.type + animesort.direction\n\n        mangaflag shouldBe 0b01000000\n        animeflag shouldBe 0b01000000\n    }\n}\n"
  },
  {
    "path": "domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt",
    "content": "package tachiyomi.domain.release.interactor\n\nimport io.kotest.matchers.shouldBe\nimport io.mockk.coEvery\nimport io.mockk.coVerify\nimport io.mockk.every\nimport io.mockk.mockk\nimport kotlinx.coroutines.test.runTest\nimport org.junit.jupiter.api.BeforeEach\nimport org.junit.jupiter.api.Test\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.PreferenceStore\nimport tachiyomi.domain.release.model.Release\nimport tachiyomi.domain.release.service.ReleaseService\nimport java.time.Instant\n\nclass GetApplicationReleaseTest {\n\n    private lateinit var getApplicationRelease: GetApplicationRelease\n    private lateinit var releaseService: ReleaseService\n    private lateinit var preference: Preference<Long>\n\n    @BeforeEach\n    fun beforeEach() {\n        val preferenceStore = mockk<PreferenceStore>()\n        preference = mockk()\n        every { preferenceStore.getLong(any(), any()) } returns preference\n        releaseService = mockk()\n\n        getApplicationRelease = GetApplicationRelease(releaseService, preferenceStore)\n    }\n\n    @Test\n    fun `When has update but is preview expect new update`() = runTest {\n        every { preference.get() } returns 0\n        every { preference.set(any()) }.answers { }\n\n        val release = Release(\n            \"r2000\",\n            \"info\",\n            \"http://example.com/release_link\",\n            \"http://example.com/release_link.apk\",\n        )\n\n        coEvery { releaseService.latest(any()) } returns release\n\n        val result = getApplicationRelease.await(\n            GetApplicationRelease.Arguments(\n                isPreview = true,\n                commitCount = 1000,\n                versionName = \"\",\n                repository = \"test\",\n            ),\n        )\n\n        (result as GetApplicationRelease.Result.NewUpdate).release shouldBe GetApplicationRelease.Result.NewUpdate(\n            release,\n        ).release\n    }\n\n    @Test\n    fun `When has update expect new update`() = runTest {\n        every { preference.get() } returns 0\n        every { preference.set(any()) }.answers { }\n\n        val release = Release(\n            \"v2.0.0\",\n            \"info\",\n            \"http://example.com/release_link\",\n            \"http://example.com/release_link.apk\",\n        )\n\n        coEvery { releaseService.latest(any()) } returns release\n\n        val result = getApplicationRelease.await(\n            GetApplicationRelease.Arguments(\n                isPreview = false,\n                commitCount = 0,\n                versionName = \"v1.0.0\",\n                repository = \"test\",\n            ),\n        )\n\n        (result as GetApplicationRelease.Result.NewUpdate).release shouldBe GetApplicationRelease.Result.NewUpdate(\n            release,\n        ).release\n    }\n\n    @Test\n    fun `When has no update expect no new update`() = runTest {\n        every { preference.get() } returns 0\n        every { preference.set(any()) }.answers { }\n\n        val release = Release(\n            \"v1.0.0\",\n            \"info\",\n            \"http://example.com/release_link\",\n            \"http://example.com/release_link.apk\",\n        )\n\n        coEvery { releaseService.latest(any()) } returns release\n\n        val result = getApplicationRelease.await(\n            GetApplicationRelease.Arguments(\n                isPreview = false,\n                commitCount = 0,\n                versionName = \"v2.0.0\",\n                repository = \"test\",\n            ),\n        )\n\n        result shouldBe GetApplicationRelease.Result.NoNewUpdate\n    }\n\n    @Test\n    fun `When now is before three days expect no new update`() = runTest {\n        every { preference.get() } returns Instant.now().toEpochMilli()\n        every { preference.set(any()) }.answers { }\n\n        val release = Release(\n            \"v1.0.0\",\n            \"info\",\n            \"http://example.com/release_link\",\n            \"http://example.com/release_link.apk\",\n        )\n\n        coEvery { releaseService.latest(any()) } returns release\n\n        val result = getApplicationRelease.await(\n            GetApplicationRelease.Arguments(\n                isPreview = false,\n                commitCount = 0,\n                versionName = \"v2.0.0\",\n                repository = \"test\",\n            ),\n        )\n\n        coVerify(exactly = 0) { releaseService.latest(any()) }\n        result shouldBe GetApplicationRelease.Result.NoNewUpdate\n    }\n}\n"
  },
  {
    "path": "fastlane/metadata/android/en-US/full_description.txt",
    "content": "Discover and watch anime, cartoons, series, and more – easier than ever on your Android device.\n<h3>Features</h3>\n<ul>\n<li>Local reading and watching of content.</li>\n<li>A configurable reader with multiple viewers, reading directions and other settings.</li>\n<li>A configurable player built on mpv-android with multiple options and settings.</li>\n<li>Tracker support: MyAnimeList, AniList, Kitsu, MangaUpdates, Shikimori, Simkl, and Bangumi support.</li>\n<li>Categories to organize your library.</li>\n<li>Light and dark themes.</li>\n<li>Schedule updating your library for new chapters/episodes.</li>\n<li>Create backups locally to read/watch offline or to your desired cloud service.</li>\n<li>Plus much more...</li>\n</ul>\n"
  },
  {
    "path": "fastlane/metadata/android/en-US/short_description.txt",
    "content": "Full-featured player and reader, based on Mihon.\n"
  },
  {
    "path": "gradle/androidx.versions.toml",
    "content": "[versions]\nagp_version = \"8.9.0\"\nlifecycle_version = \"2.8.7\"\npaging_version = \"3.3.6\"\ninterpolator_version = \"1.0.0\"\n\n[libraries]\ngradle = { module = \"com.android.tools.build:gradle\", version.ref = \"agp_version\" }\n\nannotation = \"androidx.annotation:annotation:1.9.1\"\nappcompat = \"androidx.appcompat:appcompat:1.7.0\"\nbiometricktx = \"androidx.biometric:biometric-ktx:1.2.0-alpha05\"\nconstraintlayout = \"androidx.constraintlayout:constraintlayout:2.2.1\"\ncorektx = \"androidx.core:core-ktx:1.15.0\"\nsplashscreen = \"androidx.core:core-splashscreen:1.0.1\"\nrecyclerview = \"androidx.recyclerview:recyclerview:1.4.0\"\nviewpager = \"androidx.viewpager:viewpager:1.1.0\"\nprofileinstaller = \"androidx.profileinstaller:profileinstaller:1.4.1\"\n\nlifecycle-common = { module = \"androidx.lifecycle:lifecycle-common\", version.ref = \"lifecycle_version\" }\nlifecycle-process = { module = \"androidx.lifecycle:lifecycle-process\", version.ref = \"lifecycle_version\" }\nlifecycle-runtimektx = { module = \"androidx.lifecycle:lifecycle-runtime-ktx\", version.ref = \"lifecycle_version\" }\n\nworkmanager = \"androidx.work:work-runtime:2.10.0\"\n\npaging-runtime = { module = \"androidx.paging:paging-runtime\", version.ref = \"paging_version\" }\npaging-compose = { module = \"androidx.paging:paging-compose\", version.ref = \"paging_version\" }\n\ninterpolator = { group = \"androidx.interpolator\", name = \"interpolator\", version.ref = \"interpolator_version\" }\n\nbenchmark-macro = \"androidx.benchmark:benchmark-macro-junit4:1.3.3\"\ntest-ext = \"androidx.test.ext:junit-ktx:1.2.1\"\ntest-espresso-core = \"androidx.test.espresso:espresso-core:3.6.1\"\ntest-uiautomator = \"androidx.test.uiautomator:uiautomator:2.3.0\"\n\n[bundles]\nlifecycle = [\"lifecycle-common\", \"lifecycle-process\", \"lifecycle-runtimektx\"]\n"
  },
  {
    "path": "gradle/aniyomi.versions.toml",
    "content": "[versions]\naniyomi-mpv-lib = \"1.18.n\"\narthenica-smartexceptions = \"0.2.1\"\nconstraint-layout = \"1.1.0\"\nffmpeg-kit = \"1.18\"\nmedia = \"1.7.0\"\nseeker = \"1.2.2\"\ntruetypeparser = \"2.1.4\"\n\n[libraries]\naniyomi-mpv = { module = \"com.github.aniyomiorg:aniyomi-mpv-lib\", version.ref = \"aniyomi-mpv-lib\" }\narthenica-smartexceptions = { module = \"com.arthenica:smart-exception-java\", version.ref = \"arthenica-smartexceptions\" }\ncompose-constraintlayout = { module = \"androidx.constraintlayout:constraintlayout-compose\", version.ref = \"constraint-layout\" }\nffmpeg-kit = { module = \"com.github.jmir1:ffmpeg-kit\", version.ref = \"ffmpeg-kit\" }\nmediasession = { module = \"androidx.media:media\", version.ref = \"media\" }\nseeker = { module = \"io.github.2307vivek:seeker\", version.ref = \"seeker\" }\ntruetypeparser = { module = \"io.github.yubyf:truetypeparser-light\", version.ref = \"truetypeparser\" }\n"
  },
  {
    "path": "gradle/compose.versions.toml",
    "content": "[versions]\ncompose-bom = \"2025.03.00\"\n\n[libraries]\nactivity = \"androidx.activity:activity-compose:1.10.1\"\nbom = { group = \"androidx.compose\", name = \"compose-bom\", version.ref = \"compose-bom\" }\nfoundation = { module = \"androidx.compose.foundation:foundation\" }\nanimation = { module = \"androidx.compose.animation:animation\" }\nanimation-graphics = { module = \"androidx.compose.animation:animation-graphics\" }\nruntime = { module = \"androidx.compose.runtime:runtime\" }\nui-tooling = { module = \"androidx.compose.ui:ui-tooling\" }\nui-tooling-preview = { module = \"androidx.compose.ui:ui-tooling-preview\" }\nui-util = { module = \"androidx.compose.ui:ui-util\" }\n\nmaterial3-core = { module = \"androidx.compose.material3:material3\" }\nmaterial-icons = { module = \"androidx.compose.material:material-icons-extended\" }\n\nglance = \"androidx.glance:glance-appwidget:1.1.1\"\n"
  },
  {
    "path": "gradle/gradle-daemon-jvm.properties",
    "content": "#This file is generated by updateDaemonJvm\ntoolchainUrl.FREE_BSD.AARCH64=https\\://api.foojay.io/disco/v3.0/ids/ff8d269e2495c538cfa04b4b52d22286/redirect\ntoolchainUrl.FREE_BSD.X86_64=https\\://api.foojay.io/disco/v3.0/ids/4dfe7aab2abf71db71537e9dca36c154/redirect\ntoolchainUrl.LINUX.AARCH64=https\\://api.foojay.io/disco/v3.0/ids/ff8d269e2495c538cfa04b4b52d22286/redirect\ntoolchainUrl.LINUX.X86_64=https\\://api.foojay.io/disco/v3.0/ids/4dfe7aab2abf71db71537e9dca36c154/redirect\ntoolchainUrl.MAC_OS.AARCH64=https\\://api.foojay.io/disco/v3.0/ids/9a7f49eb8ed1ea9722ebec95f4befa0e/redirect\ntoolchainUrl.MAC_OS.X86_64=https\\://api.foojay.io/disco/v3.0/ids/2a0209399b0a7928a6e5fc680e1c0d35/redirect\ntoolchainUrl.UNIX.AARCH64=https\\://api.foojay.io/disco/v3.0/ids/ff8d269e2495c538cfa04b4b52d22286/redirect\ntoolchainUrl.UNIX.X86_64=https\\://api.foojay.io/disco/v3.0/ids/4dfe7aab2abf71db71537e9dca36c154/redirect\ntoolchainUrl.WINDOWS.X86_64=https\\://api.foojay.io/disco/v3.0/ids/a5678544b69a5c533a76c11213c7b7ed/redirect\ntoolchainVendor=ADOPTIUM\ntoolchainVersion=17\n"
  },
  {
    "path": "gradle/kotlinx.versions.toml",
    "content": "[versions]\nkotlin_version = \"2.2.0\"\nserialization_version = \"1.9.0\"\nxml_serialization_version = \"0.90.3\"\n\n[libraries]\nreflect = { module = \"org.jetbrains.kotlin:kotlin-reflect\", version.ref = \"kotlin_version\" }\ngradle = { module = \"org.jetbrains.kotlin:kotlin-gradle-plugin\", version.ref = \"kotlin_version\" }\ncompose-compiler-gradle = { module = \"org.jetbrains.kotlin:compose-compiler-gradle-plugin\", version.ref = \"kotlin_version\" }\n\nimmutables = { module = \"org.jetbrains.kotlinx:kotlinx-collections-immutable\", version = \"0.3.8\" }\n\ncoroutines-bom = { module = \"org.jetbrains.kotlinx:kotlinx-coroutines-bom\", version = \"1.10.1\" }\ncoroutines-core = { module = \"org.jetbrains.kotlinx:kotlinx-coroutines-core\" }\ncoroutines-android = { module = \"org.jetbrains.kotlinx:kotlinx-coroutines-android\" }\ncoroutines-guava = { module = \"org.jetbrains.kotlinx:kotlinx-coroutines-guava\" }\ncoroutines-test = { module = \"org.jetbrains.kotlinx:kotlinx-coroutines-test\" }\n\nserialization-json = { module = \"org.jetbrains.kotlinx:kotlinx-serialization-json\", version.ref = \"serialization_version\" }\nserialization-json-okio = { module = \"org.jetbrains.kotlinx:kotlinx-serialization-json-okio\", version.ref = \"serialization_version\" }\nserialization-protobuf = { module = \"org.jetbrains.kotlinx:kotlinx-serialization-protobuf\", version.ref = \"serialization_version\" }\nserialization-xml-core = { module = \"io.github.pdvrieze.xmlutil:core-android\", version.ref = \"xml_serialization_version\" }\nserialization-xml = { module = \"io.github.pdvrieze.xmlutil:serialization-android\", version.ref = \"xml_serialization_version\" }\n\n[bundles]\ncoroutines = [\"coroutines-core\", \"coroutines-android\", \"coroutines-guava\"]\nserialization = [\"serialization-json\", \"serialization-json-okio\", \"serialization-protobuf\", \"serialization-xml-core\", \"serialization-xml\"]\n\n[plugins]\nandroid = { id = \"org.jetbrains.kotlin.android\", version.ref = \"kotlin_version\" }\ncompose-compiler = { id = \"org.jetbrains.kotlin.plugin.compose\", version.ref = \"kotlin_version\" }\nserialization = { id = \"org.jetbrains.kotlin.plugin.serialization\", version.ref = \"kotlin_version\" }\n"
  },
  {
    "path": "gradle/libs.versions.toml",
    "content": "[versions]\naboutlib_version = \"11.6.3\"\nleakcanary = \"2.14\"\nmoko = \"0.24.5\"\nokhttp_version = \"5.0.0-alpha.14\"\nrichtext = \"0.20.0\"\nshizuku_version = \"13.1.0\"\nsqldelight = \"2.0.2\"\nsqlite = \"2.4.0\"\nvoyager = \"1.0.1\"\nspotless = \"7.0.2\"\nktlint-core = \"1.5.0\"\n\n[libraries]\ndesugar = \"com.android.tools:desugar_jdk_libs:2.1.5\"\nandroid-shortcut-gradle = \"com.github.zellius:android-shortcut-gradle-plugin:0.1.2\"\n\nrxjava = \"io.reactivex:rxjava:1.3.8\"\n\nokhttp-core = { module = \"com.squareup.okhttp3:okhttp\", version.ref = \"okhttp_version\" }\nokhttp-logging = { module = \"com.squareup.okhttp3:logging-interceptor\", version.ref = \"okhttp_version\" }\nokhttp-brotli = { module = \"com.squareup.okhttp3:okhttp-brotli\", version.ref = \"okhttp_version\" }\nokhttp-dnsoverhttps = { module = \"com.squareup.okhttp3:okhttp-dnsoverhttps\", version.ref = \"okhttp_version\" }\nokio = \"com.squareup.okio:okio:3.10.2\"\n\nconscrypt-android = \"org.conscrypt:conscrypt-android:2.5.3\"\n\nquickjs-android = \"app.cash.quickjs:quickjs-android:0.9.2\"\n\njsoup = \"org.jsoup:jsoup:1.19.1\"\n\ndisklrucache = \"com.jakewharton:disklrucache:2.0.2\"\nunifile = \"com.github.tachiyomiorg:unifile:e0def6b3dc\"\nlibarchive = \"me.zhanghai.android.libarchive:library:1.1.4\"\n\nsqlite-framework = { module = \"androidx.sqlite:sqlite-framework\", version.ref = \"sqlite\" }\nsqlite-ktx = { module = \"androidx.sqlite:sqlite-ktx\", version.ref = \"sqlite\" }\nsqlite-android = \"com.github.requery:sqlite-android:3.45.0\"\n\npreferencektx = \"androidx.preference:preference-ktx:1.2.1\"\n\ninjekt = \"com.github.mihonapp:injekt:91edab2317\"\n\ncoil-bom = { module = \"io.coil-kt.coil3:coil-bom\", version = \"3.1.0\" }\ncoil-core = { module = \"io.coil-kt.coil3:coil\" }\ncoil-gif = { module = \"io.coil-kt.coil3:coil-gif\" }\ncoil-compose = { module = \"io.coil-kt.coil3:coil-compose\" }\ncoil-network-okhttp = { module = \"io.coil-kt.coil3:coil-network-okhttp\" }\n\nsubsamplingscaleimageview = \"com.github.tachiyomiorg:subsampling-scale-image-view:66e0db195d\"\nimage-decoder = \"com.github.tachiyomiorg:image-decoder:41c059e540\"\n\nnatural-comparator = \"com.github.gpanther:java-nat-sort:natural-comparator-1.1\"\n\nrichtext-commonmark = { module = \"com.halilibo.compose-richtext:richtext-commonmark\", version.ref = \"richtext\" }\nrichtext-m3 = { module = \"com.halilibo.compose-richtext:richtext-ui-material3\", version.ref = \"richtext\" }\n\nmaterial = \"com.google.android.material:material:1.12.0\"\nflexible-adapter-core = \"com.github.arkon.FlexibleAdapter:flexible-adapter:c8013533\"\nphotoview = \"com.github.chrisbanes:PhotoView:2.3.0\"\ndirectionalviewpager = \"com.github.tachiyomiorg:DirectionalViewPager:1.0.0\"\ninsetter = \"dev.chrisbanes.insetter:insetter:0.6.1\"\ncompose-materialmotion = \"io.github.fornewid:material-motion-compose-core:2.0.1\"\ncompose-webview = \"io.github.kevinnzou:compose-webview:0.33.6\"\ncompose-grid = \"io.woong.compose.grid:grid:1.2.2\"\ncompose-stablemarker = \"com.github.skydoves:compose-stable-marker:1.0.5\"\nreorderable = { module = \"sh.calvin.reorderable:reorderable\", version = \"2.4.3\" }\n\nswipe = \"me.saket.swipe:swipe:1.3.0\"\n\nmoko-core = { module = \"dev.icerock.moko:resources\", version.ref = \"moko\" }\n\nlogcat = \"com.squareup.logcat:logcat:0.1\"\n\naboutLibraries-compose = { module = \"com.mikepenz:aboutlibraries-compose-m3\", version.ref = \"aboutlib_version\" }\n\nshizuku-api = { module = \"dev.rikka.shizuku:api\", version.ref = \"shizuku_version\" }\nshizuku-provider = { module = \"dev.rikka.shizuku:provider\", version.ref = \"shizuku_version\" }\n\nleakcanary-android = { module = \"com.squareup.leakcanary:leakcanary-android\", version.ref = \"leakcanary\" }\nleakcanary-plumber = { module = \"com.squareup.leakcanary:plumber-android\", version.ref = \"leakcanary\" }\n\nsqldelight-android-driver = { module = \"app.cash.sqldelight:android-driver\", version.ref = \"sqldelight\" }\nsqldelight-coroutines = { module = \"app.cash.sqldelight:coroutines-extensions-jvm\", version.ref = \"sqldelight\" }\nsqldelight-android-paging = { module = \"app.cash.sqldelight:androidx-paging3-extensions\", version.ref = \"sqldelight\" }\nsqldelight-dialects-sql = { module = \"app.cash.sqldelight:sqlite-3-38-dialect\", version.ref = \"sqldelight\" }\n\njunit = \"org.junit.jupiter:junit-jupiter:5.11.4\"\nkotest-assertions = \"io.kotest:kotest-assertions-core:5.9.1\"\nmockk = \"io.mockk:mockk:1.13.17\"\n\nvoyager-navigator = { module = \"cafe.adriel.voyager:voyager-navigator\", version.ref = \"voyager\" }\nvoyager-screenmodel = { module = \"cafe.adriel.voyager:voyager-screenmodel\", version.ref = \"voyager\" }\nvoyager-tab-navigator = { module = \"cafe.adriel.voyager:voyager-tab-navigator\", version.ref = \"voyager\" }\nvoyager-transitions = { module = \"cafe.adriel.voyager:voyager-transitions\", version.ref = \"voyager\" }\n\nspotless-gradle = { group = \"com.diffplug.spotless\", name = \"spotless-plugin-gradle\", version.ref = \"spotless\" }\nktlint-core = { module = \"com.pinterest.ktlint:ktlint-cli\", version.ref = \"ktlint-core\" }\n\n[plugins]\naboutLibraries = { id = \"com.mikepenz.aboutlibraries.plugin\", version.ref = \"aboutlib_version\" }\nsqldelight = { id = \"app.cash.sqldelight\", version.ref = \"sqldelight\" }\nmoko = { id = \"dev.icerock.mobile.multiplatform-resources\", version.ref = \"moko\" }\n\n[bundles]\nokhttp = [\"okhttp-core\", \"okhttp-logging\", \"okhttp-brotli\", \"okhttp-dnsoverhttps\"]\njs-engine = [\"quickjs-android\"]\nsqlite = [\"sqlite-framework\", \"sqlite-ktx\", \"sqlite-android\"]\ncoil = [\"coil-core\", \"coil-gif\", \"coil-compose\", \"coil-network-okhttp\"]\nshizuku = [\"shizuku-api\", \"shizuku-provider\"]\nsqldelight = [\"sqldelight-android-driver\", \"sqldelight-coroutines\", \"sqldelight-android-paging\"]\nvoyager = [\"voyager-navigator\", \"voyager-screenmodel\", \"voyager-tab-navigator\", \"voyager-transitions\"]\nrichtext = [\"richtext-commonmark\", \"richtext-m3\"]\ntest = [\"junit\", \"kotest-assertions\", \"mockk\"]\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.13-bin.zip\nnetworkTimeout=10000\nvalidateDistributionUrl=true\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "android.nonTransitiveRClass=false\nandroid.useAndroidX=true\n\nkotlin.code.style=official\nkotlin.mpp.androidSourceSetLayoutVersion=2\n\norg.gradle.caching=true\norg.gradle.configureondemand=true\norg.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8\norg.gradle.parallel=true\n"
  },
  {
    "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=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\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        org.gradle.wrapper.GradleWrapperMain \\\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\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n@rem SPDX-License-Identifier: Apache-2.0\n@rem\n\n@if \"%DEBUG%\"==\"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\"==\"\" set DIRNAME=.\n@rem This is normally unused\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif %ERRORLEVEL% equ 0 goto execute\n\necho. 1>&2\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2\necho. 1>&2\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\necho location of your Java installation. 1>&2\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho. 1>&2\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2\necho. 1>&2\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\necho location of your Java installation. 1>&2\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif %ERRORLEVEL% equ 0 goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nset EXIT_CODE=%ERRORLEVEL%\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\nif not \"\"==\"%GRADLE_EXIT_CONSOLE%\" exit %EXIT_CODE%\nexit /b %EXIT_CODE%\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "i18n/README.md",
    "content": "# i18n\n\nThis module houses the string resources and translations.\n\nOriginal English strings are managed in `src/commonMain/moko-resources/base/`. Translations are done externally via Weblate. See [our website](https://aniyomi.org/docs/contribute#translation) for more details. \n"
  },
  {
    "path": "i18n/build.gradle.kts",
    "content": "import mihon.buildlogic.generatedBuildDir\nimport mihon.buildlogic.tasks.getLocalesConfigTask\nimport org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi\n\nplugins {\n    id(\"mihon.library\")\n    kotlin(\"multiplatform\")\n    alias(libs.plugins.moko)\n}\n\nkotlin {\n    androidTarget()\n\n    applyDefaultHierarchyTemplate()\n\n    sourceSets {\n        commonMain {\n            dependencies {\n                api(libs.moko.core)\n            }\n        }\n    }\n\n    @OptIn(ExperimentalKotlinGradlePluginApi::class)\n    compilerOptions {\n        freeCompilerArgs.add(\"-Xexpect-actual-classes\")\n    }\n}\n\nval generatedAndroidResourceDir = generatedBuildDir.resolve(\"android/res\")\n\nandroid {\n    namespace = \"tachiyomi.i18n\"\n\n    sourceSets {\n        val main by getting\n        main.res.srcDirs(\n            \"src/commonMain/resources\",\n            generatedAndroidResourceDir,\n        )\n    }\n\n    lint {\n        disable.addAll(listOf(\"MissingTranslation\", \"ExtraTranslation\"))\n    }\n}\n\nmultiplatformResources {\n    resourcesPackage.set(\"tachiyomi.i18n\")\n}\n\ntasks {\n    val localesConfigTask = project.getLocalesConfigTask(generatedAndroidResourceDir)\n    preBuild {\n        dependsOn(localesConfigTask)\n    }\n}\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/am/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d ምድብ</item>\n        <item quantity=\"other\">%d ምድቦች</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">ከ 1 ደቂቃ በኋላ</item>\n        <item quantity=\"other\">ከ %1$s ደቂቃዎች በኋላ</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል</item>\n        <item quantity=\"other\">ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/am/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"obsolete_extension_message\">ይህ ቅጥያ ከእንግዲህ አይገኝም።</string>\n    <string name=\"untrusted_extension_message\">ይህ ቅጥያ ባልታመነ የእውቅና ማረጋገጫ ተፈርሟል እና አልነቃም።\n\\n\n\\nተንኮል አዘል ቅጥያ በታቺሚሚ ውስጥ የተከማቸውን ማንኛውንም የመግቢያ ማስረጃዎችን በማንበብ ወይም የዘፈቀደ ኮድን ሊፈጽም ይችላል ፡፡\n\\n\n\\nበዚህ የምስክር ወረቀት በመተማመን እነዚህን አደጋዎች ይቀበላሉ ፡፡</string>\n    <string name=\"untrusted_extension\">የማይታመን ቅጥያ</string>\n    <string name=\"ext_uninstall\">ማራገፍ</string>\n    <string name=\"ext_untrusted\">የማይታመን</string>\n    <string name=\"ext_trust\">አደራ</string>\n    <string name=\"ext_installed\">ተጭኗል</string>\n    <string name=\"ext_installing\">በመጫን ላይ</string>\n    <string name=\"ext_downloading\">በማውረድ ላይ</string>\n    <string name=\"ext_pending\">በመጠባበቅ ላይ</string>\n    <string name=\"ext_install\">ጫን</string>\n    <string name=\"ext_obsolete\">ጊዜ ያለፈበት</string>\n    <string name=\"ext_update\">አዘምን</string>\n    <string name=\"ext_updates_pending\">ዝመናዎች በመጠባበቅ ላይ ናቸው</string>\n    <string name=\"all\">ሁሉም</string>\n    <string name=\"default_category_summary\">ሁል ጊዜም ይጠይቁ</string>\n    <string name=\"default_category\">ነባሪ ምድብ</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">ቤተ-መጽሐፍትን ሲያዘምኑ አዲስ ሽፋን እና ዝርዝሮችን ይፈልጉ</string>\n    <string name=\"pref_library_update_refresh_metadata\">ዲበ ውሂብን በራስ-ሰር አድስ</string>\n    <string name=\"pref_update_only_non_completed\">ቀጣይ ማንጋን ብቻ ያዘምኑ</string>\n    <string name=\"charging\">ኃይል በመሙላት ላይ</string>\n    <string name=\"pref_library_update_restriction\">የቤተ-መጽሐፍት ዝመና ገደቦች</string>\n    <string name=\"update_weekly\">ሳምንታዊ</string>\n    <string name=\"update_48hour\">በየ 2 ቀኑ</string>\n    <string name=\"update_24hour\">በየቀኑ</string>\n    <string name=\"update_12hour\">በየ 12 ሰዓቱ</string>\n    <string name=\"update_6hour\">በየ 6 ሰዓቱ</string>\n    <string name=\"update_never\">መመሪያ</string>\n    <string name=\"pref_library_update_interval\">የቤተ-መጽሐፍት ማዘመኛ ድግግሞሽ</string>\n    <string name=\"pref_category_library_update\">ዝመናዎች</string>\n    <string name=\"landscape\">የመሬት ገጽታ</string>\n    <string name=\"portrait\">የቁም ስዕል</string>\n    <string name=\"pref_library_columns\">ዕቃዎች በአንድ ረድፍ</string>\n    <string name=\"pref_category_display\">ማሳያ</string>\n    <string name=\"parental_controls_info\">ይህ በይፋዊ ወይም በስህተት የተጠቆሙ ሊሆኑ የሚችሉ ቅጥያዎች በመተግበሪያው ውስጥ 18+ ይዘትን እንዳያሳዩ አያግደውም ፡፡</string>\n    <string name=\"hide_notification_content\">የማሳወቂያ ይዘትን ደብቅ</string>\n    <string name=\"secure_screen_summary\">መተግበሪያዎችን ሲቀይሩ የመተግበሪያ ይዘቶችን ደብቅ እና ቅጽበታዊ ገጽ እይታዎችን ያግዳል</string>\n    <string name=\"secure_screen\">ደህንነቱ የተጠበቀ ማያ ገጽ</string>\n    <string name=\"lock_never\">በጭራሽ</string>\n    <string name=\"lock_always\">ሁል ጊዜ</string>\n    <string name=\"lock_when_idle\">ስራ ሲፈታ ቆልፍ</string>\n    <string name=\"lock_with_biometrics\">በባዮሜትሪክስ ቆልፍ</string>\n    <string name=\"pref_category_security\">ደህንነት</string>\n    <string name=\"pref_manage_notifications\">ማሳወቂያዎችን ያቀናብሩ</string>\n    <string name=\"pref_date_format\">የቀን ቅርጸት</string>\n    <string name=\"theme_dark\">በርቷል</string>\n    <string name=\"theme_light\">ጠፍቷል</string>\n    <string name=\"theme_system\">ስርዓት ይከተሉ</string>\n    <string name=\"pref_category_theme\">ገጽታ</string>\n    <string name=\"pref_category_about\">ስለ</string>\n    <string name=\"pref_category_advanced\">የላቀ</string>\n    <string name=\"pref_category_tracking\">መከታተል</string>\n    <string name=\"pref_category_downloads\">ውርዶች</string>\n    <string name=\"pref_category_reader\">አንባቢ</string>\n    <string name=\"pref_category_library\">ቤተ መጻሕፍት</string>\n    <string name=\"pref_category_general\">ጄኔራል</string>\n    <string name=\"app_not_available\">መተግበሪያ አይገኝም</string>\n    <string name=\"loading\">በመጫን ላይ…</string>\n    <string name=\"action_webview_refresh\">አድስ</string>\n    <string name=\"action_webview_forward\">ወደፊት</string>\n    <string name=\"action_webview_back\">ተመለስ</string>\n    <string name=\"action_restore\">እነበረበት መልስ</string>\n    <string name=\"action_open_log\">መዝገብ ይክፈቱ</string>\n    <string name=\"action_undo\">ቀልብስ</string>\n    <string name=\"action_reset\">ዳግም አስጀምር</string>\n    <string name=\"action_save\">አስቀምጥ</string>\n    <string name=\"action_share\">ሼር</string>\n    <string name=\"action_install\">ጫን</string>\n    <string name=\"action_move_to_bottom\">ወደ ታች ውሰድ</string>\n    <string name=\"action_move_to_top\">ወደ ላይ ውሰድ</string>\n    <string name=\"action_oldest\">በጣም ጥንታዊ</string>\n    <string name=\"action_newest\">በጣም አዲስ</string>\n    <string name=\"action_sort\">ደርድር</string>\n    <string name=\"action_cancel_all\">ሁሉንም ሰርዝ</string>\n    <string name=\"action_cancel\">ሰርዝ</string>\n    <string name=\"action_unpin\">ይንቀሉ</string>\n    <string name=\"action_pin\">ሚስማር</string>\n    <string name=\"action_disable\">አሰናክል</string>\n    <string name=\"action_display_show_tabs\">የምድብ ትሮችን አሳይ</string>\n    <string name=\"action_display_download_badge\">ባጆችን ያውርዱ</string>\n    <string name=\"action_display_comfortable_grid\">ምቹ ፍርግርግ</string>\n    <string name=\"action_display_list\">ዝርዝር</string>\n    <string name=\"action_display_grid\">የታመቀ ፍርግርግ</string>\n    <string name=\"action_display\">ማሳያ</string>\n    <string name=\"action_display_mode\">የማሳያ ሁነታ</string>\n    <string name=\"action_migrate\">ፍልሰት</string>\n    <string name=\"action_open_in_web_view\">በድር እይታ ውስጥ ክፈት</string>\n    <string name=\"action_open_in_browser\">በአሳሽ ውስጥ ክፈት</string>\n    <string name=\"action_resume\">የራስ መግለጫ</string>\n    <string name=\"action_start\">ይጀምሩ</string>\n    <string name=\"action_remove\">አስወግድ</string>\n    <string name=\"action_retry\">እንደገና ሞክር</string>\n    <string name=\"action_next_chapter\">ቀጣይ ምዕራፍ</string>\n    <string name=\"action_previous_chapter\">ቀዳሚ ምዕራፍ</string>\n    <string name=\"action_pause\">ለአፍታ አቁም</string>\n    <string name=\"action_view_chapters\">ምዕራፎችን ይመልከቱ</string>\n    <string name=\"action_edit_cover\">ሽፋን አርትዕ</string>\n    <string name=\"action_move_category\">ምድቦችን ያዘጋጁ</string>\n    <string name=\"action_rename_category\">ምድብ እንደገና ይሰይሙ</string>\n    <string name=\"action_edit_categories\">ምድቦችን ያርትዑ</string>\n    <string name=\"action_add_category\">ምድብ አክል</string>\n    <string name=\"action_add\">አክል</string>\n    <string name=\"action_edit\">አርትዕ</string>\n    <string name=\"action_disable_all\">ሁሉንም ያሰናክሉ</string>\n    <string name=\"action_enable_all\">ሁሉንም አንቃ</string>\n    <string name=\"action_update_library\">ቤተ-መጽሐፍት ያዘምኑ</string>\n    <string name=\"action_delete\">ደምስስ</string>\n    <string name=\"action_remove_bookmark\">የደንበኝነት ምዝገባ ምልክት ያድርጉበት</string>\n    <string name=\"action_bookmark\">ዕልባት</string>\n    <string name=\"action_download\">አውርድ</string>\n    <string name=\"action_mark_previous_as_read\">የቀደመውን እንደተነበበ ምልክት ያድርጉበት</string>\n    <string name=\"action_mark_as_unread\">እንዳልተነበበ ምልክት ያድርጉ</string>\n    <string name=\"action_mark_as_read\">እንደተነበበ ምልክት ያድርጉ</string>\n    <string name=\"action_select_inverse\">ተገላቢጦሽ ምረጥ</string>\n    <string name=\"action_select_all\">ሁሉንም ምረጥ</string>\n    <string name=\"action_global_search\">ዓለም አቀፍ ፍለጋ</string>\n    <string name=\"action_search_settings\">የፍለጋ ቅንብሮች</string>\n    <string name=\"action_search\">ፈልግ</string>\n    <string name=\"action_sort_date_added\">ቀን ታክሏል</string>\n    <string name=\"action_sort_latest_chapter\">የቅርብ ጊዜ ምዕራፍ</string>\n    <string name=\"action_sort_last_read\">ለመጨረሻ ጊዜ የተነበበው</string>\n    <string name=\"action_sort_total\">ጠቅላላ ምዕራፎች</string>\n    <string name=\"action_filter_empty\">ማጣሪያውን ያስወግዱ</string>\n    <string name=\"action_filter_unread\">ያልተነበበ</string>\n    <string name=\"action_filter_bookmarked\">ዕልባት ተደርጓል</string>\n    <string name=\"action_filter\">ማጣሪያ</string>\n    <string name=\"action_menu\">ምናሌ</string>\n    <string name=\"action_settings\">ማስተካከያዎች</string>\n    <string name=\"label_extensions\">ኢክስቴንሽኖች</string>\n    <string name=\"history\">ታሪክ</string>\n    <string name=\"track\">መከታተል</string>\n    <string name=\"chapters\">ምዕራፎች</string>\n    <string name=\"manga\">ማንጋ</string>\n    <string name=\"categories\">ምድቦች</string>\n    <string name=\"information_empty_category\">ምንም ምድቦች የሉዎትም። ቤተ-መጽሐፍትዎን ለማደራጀት አንድ ለመፍጠር የመደመር አዝራሩን መታ ያድርጉ።</string>\n    <string name=\"information_empty_library\">ቤተ-መጽሐፍትዎ ባዶ ነው ተከታታዮችን ከአሰሳ ወደ ቤተ-መጽሐፍትዎ ያክሉ።</string>\n    <string name=\"information_no_recent_manga\">በቅርቡ የተነበበ ነገር የለም</string>\n    <string name=\"information_no_recent\">የቅርብ ጊዜ ዝመናዎች የሉም</string>\n    <string name=\"information_no_downloads\">ምንም የሚወርድ የለም</string>\n    <string name=\"label_help\">እገዛ</string>\n    <string name=\"label_extension_info\">የኤክስቴንሽን መረጃ</string>\n    <string name=\"label_migration\">ፍልሰት</string>\n    <string name=\"label_backup\">ምትኬ</string>\n    <string name=\"label_sources\">ምንጮች</string>\n    <string name=\"label_recent_manga\">ታሪክ</string>\n    <string name=\"label_recent_updates\">ዝመናዎች</string>\n    <string name=\"label_library\">ቤተ መጻሕፍት</string>\n    <string name=\"label_download_queue\">የሚወርድ ወረፋ</string>\n    <string name=\"label_settings\">ማስተካከያዎች</string>\n    <string name=\"label_more\">ተጨማሪ</string>\n    <string name=\"name\">ስም</string>\n    <string name=\"pref_remove_bookmarked_chapters\">ዕልባት የተደረገባቸውን ምዕራፎች ሰርዝ</string>\n    <string name=\"pref_remove_after_read\">ካነበብኩ በኋላ</string>\n    <string name=\"pref_remove_after_marked_as_read\">በእጅ እንደተነበበ ምልክት ከተደረገ በኋላ</string>\n    <string name=\"pref_category_delete_chapters\">ምዕራፎችን ሰርዝ</string>\n    <string name=\"pref_webtoon_side_padding\">የጎን ሽፋን</string>\n    <string name=\"pref_category_reading\">ንባብ</string>\n    <string name=\"pref_category_reading_mode\">የንባብ ሁነታ</string>\n    <string name=\"pref_always_show_chapter_transition\">ሁልጊዜ የምዕራፍ ሽግግርን ያሳዩ</string>\n    <string name=\"rotation_force_landscape\">የመሬት ገጽታን ያስገድዱ</string>\n    <string name=\"rotation_force_portrait\">የግዳጅ ምስል</string>\n    <string name=\"rotation_free\">ፍርይ</string>\n    <string name=\"pref_rotation_type\">ማሽከርከር</string>\n    <string name=\"double_tap_anim_speed_fast\">በፍጥነት</string>\n    <string name=\"double_tap_anim_speed_normal\">መደበኛ</string>\n    <string name=\"double_tap_anim_speed_0\">ምንም እነማ የለም</string>\n    <string name=\"zoom_start_center\">ማዕከል</string>\n    <string name=\"zoom_start_right\">ቀኝ</string>\n    <string name=\"zoom_start_left\">ግራ</string>\n    <string name=\"zoom_start_automatic\">ራስ-ሰር</string>\n    <string name=\"pref_zoom_start\">የመነሻ አቀማመጥን ያጉሉ</string>\n    <string name=\"scale_type_smart_fit\">ብልጥ ብቃት</string>\n    <string name=\"scale_type_original_size\">የመጀመሪያ መጠን</string>\n    <string name=\"scale_type_fit_height\">የአካል ብቃት ቁመት</string>\n    <string name=\"scale_type_fit_width\">የአካል ብቃት ስፋት</string>\n    <string name=\"scale_type_stretch\">ዘርጋ</string>\n    <string name=\"scale_type_fit_screen\">የአካል ብቃት ማያ ገጽ</string>\n    <string name=\"pref_image_scale_type\">ልኬት ዓይነት</string>\n    <string name=\"pager_viewer\">ተለጠፈ</string>\n    <string name=\"vertical_plus_viewer\">ቀጣይነት ያለው አቀባዊ</string>\n    <string name=\"webtoon_viewer\">ዌብቱን</string>\n    <string name=\"vertical_viewer\">አቀባዊ</string>\n    <string name=\"right_to_left_viewer\">ከቀኝ ወደ ግራ</string>\n    <string name=\"left_to_right_viewer\">ከግራ ወደ ቀኝ</string>\n    <string name=\"pref_viewer_type\">ነባሪ የንባብ ሁነታ</string>\n    <string name=\"black_background\">ጥቁር</string>\n    <string name=\"gray_background\">ግራጫ</string>\n    <string name=\"white_background\">ነጭ</string>\n    <string name=\"pref_reader_theme\">የጀርባ ቀለም</string>\n    <string name=\"pref_read_with_long_tap\">ረጅም መታ መገናኛ</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">የድምጽ ቁልፎችን ገልብጥ</string>\n    <string name=\"pref_read_with_volume_keys\">የድምፅ ቁልፎች</string>\n    <string name=\"pref_reader_navigation\">አሰሳ</string>\n    <string name=\"pref_skip_filtered_chapters\">የተጣራ ምዕራፎችን ይዝለሉ</string>\n    <string name=\"pref_skip_read_chapters\">የተነበቡ ምልክት የተደረገባቸውን ምዕራፎች ይዝለሉ</string>\n    <string name=\"pref_keep_screen_on\">ማያ ገጹን ያብሩ</string>\n    <string name=\"filter_mode_darken\">ማቃጠል / ጨለማ</string>\n    <string name=\"filter_mode_lighten\">ዶጅ / መብረቅ</string>\n    <string name=\"filter_mode_screen\">ማያ ገጽ</string>\n    <string name=\"filter_mode_multiply\">ተባዙ</string>\n    <string name=\"filter_mode_overlay\">ተደራቢ</string>\n    <string name=\"pref_color_filter_mode\">የቀለም ማጣሪያ ድብልቅ ሁነታ</string>\n    <string name=\"pref_custom_color_filter\">ብጁ ቀለም ማጣሪያ</string>\n    <string name=\"pref_custom_brightness\">ብጁ ብሩህነት</string>\n    <string name=\"pref_crop_borders\">የሰብል ድንበሮች</string>\n    <string name=\"pref_show_reading_mode_summary\">አንባቢ ሲከፈት የአሁኑን ሁነታ በአጭሩ ያሳዩ</string>\n    <string name=\"pref_show_reading_mode\">የንባብ ሁነታን አሳይ</string>\n    <string name=\"pref_show_page_number\">የገጽ ቁጥርን አሳይ</string>\n    <string name=\"pref_double_tap_anim_speed\">ሁለቴ መታ የአኒሜሽን ፍጥነት</string>\n    <string name=\"pref_page_transitions\">የገጽ ሽግግሮች</string>\n    <string name=\"pref_cutout_short\">በመቁረጥ አካባቢ ውስጥ ይዘትን አሳይ</string>\n    <string name=\"pref_fullscreen\">ሙሉ ማያ</string>\n    <string name=\"ext_nsfw_warning\">18+ ይዘትን ይያዝ</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"action_sort_alpha\">በፊደል ደርድር</string>\n    <string name=\"information_webview_required\">ለታቺዮሚ የድር እይታ ያስፈልጋል</string>\n    <string name=\"information_cloudflare_bypass_failure\">ክላዉድ ፍሌር ን ማለፍ አልተሳካም</string>\n    <string name=\"download_notifier_no_network\">ምንም የአውታረ መረብ ግንኙነት አይገኝም</string>\n    <string name=\"tapping_inverted_both\">ሁለቱም</string>\n    <string name=\"tapping_inverted_vertical\">አቀባዊ</string>\n    <string name=\"tapping_inverted_horizontal\">አግድም</string>\n    <string name=\"tapping_inverted_none\">የለም</string>\n    <string name=\"pref_read_with_tapping_inverted\">ተገልብጦ መታ ማድረግ</string>\n    <string name=\"channel_ext_updates\">የቅጥያ ዝመናዎች</string>\n    <string name=\"channel_new_chapters\">የምዕራፍ ዝመናዎች</string>\n    <string name=\"channel_errors\">ስህተቶች</string>\n    <string name=\"channel_complete\">ተጠናቀቀ</string>\n    <string name=\"channel_progress\">እድገት</string>\n    <string name=\"channel_common\">የተለመደ</string>\n    <string name=\"download_notifier_download_paused\">ማውረድ ለአፍታ ቆሟል</string>\n    <string name=\"color_filter_r_value\">ቀ</string>\n    <string name=\"color_filter_b_value\">ቢ</string>\n    <string name=\"color_filter_g_value\">ኣ</string>\n    <string name=\"invalid_backup_file\">ልክ ያልሆነ የመጠባበቂያ ፋይል</string>\n    <string name=\"backup_created\">ምትኬ ተፈጥሯል</string>\n    <string name=\"pref_backup_interval\">የመጠባበቂያ ድግግሞሽ</string>\n    <string name=\"pref_restore_backup_summ\">ቤተ-መጽሐፍት ከመጠባበቂያ ፋይል ይመልሱ</string>\n    <string name=\"pref_restore_backup\">ምትኬ ወደነበረበት</string>\n    <string name=\"pref_create_backup_summ\">የአሁኑን ቤተ-መጽሐፍት ወደነበረበት ለመመለስ ሊያገለግል ይችላል</string>\n    <string name=\"pref_create_backup\">ምትኬን ይፍጠሩ</string>\n    <string name=\"tracking_info\">በክትትል አገልግሎቶች ውስጥ የምዕራፍ እድገትን ለማዘመን የአንድ-መንገድ ማመሳሰል። ከመከታተያ አዝራራቸው የግለሰቦችን የማንጋ ግቤቶች መከታተልን ያዘጋጁ።</string>\n    <string name=\"services\">አገልግሎቶች</string>\n    <string name=\"pref_auto_update_manga_sync\">ካነበቡ በኋላ የምዕራፍ እድገትን ያዘምኑ</string>\n    <string name=\"pref_download_new\">አዳዲስ ምዕራፎችን ያውርዱ</string>\n    <string name=\"fifth_to_last\">አምስተኛው እስከ መጨረሻው ምዕራፍ</string>\n    <string name=\"fourth_to_last\">ከአራተኛ እስከ መጨረሻው ምዕራፍ</string>\n    <string name=\"third_to_last\">ሦስተኛው እስከ መጨረሻው ምዕራፍ</string>\n    <string name=\"second_to_last\">ሁለተኛ እስከ መጨረሻው ምዕራፍ</string>\n    <string name=\"last_read_chapter\">ለመጨረሻ ጊዜ የተነበበው ምዕራፍ</string>\n    <string name=\"disabled\">ተሰናክሏል</string>\n    <string name=\"download_notifier_text_only_wifi\">ምንም የ ዋይ-ፋይ ግንኙነት የለም</string>\n    <string name=\"download_notifier_unknown_error\">ባልተጠበቀ ስህተት ምክንያት ምዕራፍ ማውረድ አልተቻለም</string>\n    <string name=\"download_notifier_title_error\">ስህተት</string>\n    <string name=\"download_notifier_downloader_title\">አውራጅ</string>\n    <string name=\"chapter_settings_updated\">ነባሪ የምዕራፍ ቅንጅቶች ተዘምነዋል</string>\n    <string name=\"information_webview_outdated\">ለተሻለ ተኳኋኝነት እባክዎ የድር እይታን መተግበሪያውን ያዘምኑ</string>\n    <string name=\"pref_clear_cookies\">ኩኪዎችን ያጽዱ</string>\n    <string name=\"label_network\">አውታረ መረብ</string>\n    <string name=\"restoring_backup_canceled\">ተሰርዟል ወደነበረበት መመለስ</string>\n    <string name=\"restoring_backup_error\">ምትኬን ወደነበረበት መመለስ አልተሳካም</string>\n    <string name=\"restoring_backup\">ምትኬን ወደነበረበት መመለስ</string>\n    <string name=\"restore_in_progress\">እነበረበት መልስ ቀድሞውኑ በሂደት ላይ ነው</string>\n    <string name=\"creating_backup_error\">ምትኬ አልተሳካም</string>\n    <string name=\"creating_backup\">ምትኬን መፍጠር</string>\n    <string name=\"backup_choice\">ምትኬ ለማስቀመጥ ምን ይፈልጋሉ?</string>\n    <string name=\"backup_in_progress\">ምትኬ ቀድሞውኑ በሂደት ላይ ነው</string>\n    <string name=\"restore_duration\">%02d ደቂቃ ፣ %02d ሰከንድ</string>\n    <string name=\"restore_completed\">እነበረበት መልስ ተጠናቅቋል</string>\n    <string name=\"backup_restore_missing_trackers\">መከታተያዎች አልገቡም:</string>\n    <string name=\"backup_restore_missing_sources\">የጠፋ ምንጮች:</string>\n    <string name=\"invalid_backup_file_missing_manga\">ምትኬ ማንኛውንም ማንጋ አልያዘም ፡፡</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ar/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"zero\">لايوجد تحديث للإضافة</item>\n        <item quantity=\"one\">يتوفر تحديث لإضافة</item>\n        <item quantity=\"two\">يتوفر تحديث لإضافتان</item>\n        <item quantity=\"few\">يتوفر تحديث %d إضافات</item>\n        <item quantity=\"many\">يتوفر تحديث %d إضافات</item>\n        <item quantity=\"other\">يتوفر تحديث %d إضافات</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"zero\">الفصول %1$s</item>\n        <item quantity=\"one\">الفصول %1$s وفصل آخر</item>\n        <item quantity=\"two\">الفصول %1$s و%2$d فصول أخرى</item>\n        <item quantity=\"few\">الفصول %1$s و%2$d فصول أخرى</item>\n        <item quantity=\"many\">الفصول %1$s و%2$d فصول أخرى</item>\n        <item quantity=\"other\">الفصول %1$s و%2$d فصول أخرى</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"zero\">لا توجد فصول جديدة</item>\n        <item quantity=\"one\">فصل جديد</item>\n        <item quantity=\"two\">فصلان جديدان</item>\n        <item quantity=\"few\">%1$d فصول جديدة</item>\n        <item quantity=\"many\">%1$d فصول جديدة</item>\n        <item quantity=\"other\">%1$d فصول جديدة</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"zero\">لا شيء</item>\n        <item quantity=\"one\">إدخال واحد</item>\n        <item quantity=\"two\">إدخالين</item>\n        <item quantity=\"few\">ادخالات %d ل</item>\n        <item quantity=\"many\">ادخالات %d ل</item>\n        <item quantity=\"other\">ادخالات %d ل</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"zero\">%1$s عنصر متبقي</item>\n        <item quantity=\"one\">عنصر واحد متبقي</item>\n        <item quantity=\"two\">عنصران متبقيان</item>\n        <item quantity=\"few\">%1$s عناصر متبقية</item>\n        <item quantity=\"many\">%1$s عناصر متبقية</item>\n        <item quantity=\"other\">%1$s عناصر متبقية</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"zero\">بعد أقل من دقيقة</item>\n        <item quantity=\"one\">بعد دقيقة</item>\n        <item quantity=\"two\">بعد دقيقتين</item>\n        <item quantity=\"few\">بعد %1$s دقائق</item>\n        <item quantity=\"many\">بعد %1$s دقائق</item>\n        <item quantity=\"other\">بعد %1$s دقائق</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"zero\">لا يوجد فئات</item>\n        <item quantity=\"one\">فئة</item>\n        <item quantity=\"two\">فئتان</item>\n        <item quantity=\"few\">%d فئات</item>\n        <item quantity=\"many\">%d فئات</item>\n        <item quantity=\"other\">%d فئات</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"zero\">تمَّ في %1$s وبدون أخطاء</item>\n        <item quantity=\"one\">تمَّ في %1$s وفيه خطأ</item>\n        <item quantity=\"two\">تمَّ في %1$s وفيه خطآن</item>\n        <item quantity=\"few\">تمَّ في %1$s وفيه %2$s أخطاء</item>\n        <item quantity=\"many\">تمَّ في %1$s وفيه %2$s خطأً</item>\n        <item quantity=\"other\">تمَّ في %1$s وفيه %2$s خطأ</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"zero\">لا متتبّع</item>\n        <item quantity=\"one\">متتبّع واحد</item>\n        <item quantity=\"two\">متتبعان</item>\n        <item quantity=\"few\">بضعة متتبّعين (%d)</item>\n        <item quantity=\"many\">عدّة متتبّعين (%d)</item>\n        <item quantity=\"other\">%d متتبّعاً</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"zero\">لا فصول</item>\n        <item quantity=\"one\">فصل واحد</item>\n        <item quantity=\"two\">فصلين</item>\n        <item quantity=\"few\">%1$s فصول</item>\n        <item quantity=\"many\">%1$s فصول</item>\n        <item quantity=\"other\">%1$s فصول</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"zero\">لا يُتخطَّى أيُّ فصل</item>\n        <item quantity=\"one\">يُتخطَّى فصل، وذلك إما لأن المصدر مفقود أو لأنه مصفًّى</item>\n        <item quantity=\"two\">يُتخطَّى فصلان، وذلك إما لأن المصدر مفقود أو لأنهما مصفَّان</item>\n        <item quantity=\"few\">تُتخطَّى %d فصول، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون</item>\n        <item quantity=\"many\">يُتخطَّى %d فصلًا، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون</item>\n        <item quantity=\"other\">يُتخطَّى %d فصل، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"zero\">الأمس</item>\n        <item quantity=\"one\">منذ يوم</item>\n        <item quantity=\"two\">منذ يومين</item>\n        <item quantity=\"few\">منذ %1$d أيام</item>\n        <item quantity=\"many\">منذ %1$d أيام</item>\n        <item quantity=\"other\">منذ %1$d أيام</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"zero\">لا يوجد فصل تالٍ لم يُقرأ</item>\n        <item quantity=\"one\">الفصل غير المقروء التالي</item>\n        <item quantity=\"two\">الفصلان غير المقروءين التاليان</item>\n        <item quantity=\"few\">%d فصول تالية لم تُقرأ</item>\n        <item quantity=\"many\">%d فصلًا تاليًا لم يُقرؤوا</item>\n        <item quantity=\"other\">%d فصل تالٍ لم يُقرؤوا</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"zero\">الفصل التالي</item>\n        <item quantity=\"one\">الفصل التالي</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=\"missing_chapters\">\n        <item quantity=\"zero\">لا يوجد أيُّ فصل مفقود</item>\n        <item quantity=\"one\">فصل واحد مفقود</item>\n        <item quantity=\"two\">فصلان مفقودان</item>\n        <item quantity=\"few\">%1$s فصول مفقودة</item>\n        <item quantity=\"many\">%1$s فصلًا مفقودًا</item>\n        <item quantity=\"other\">%1$s فصل مفقود</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"zero\">لا يوم</item>\n        <item quantity=\"one\">يوم واحد</item>\n        <item quantity=\"two\">يومان</item>\n        <item quantity=\"few\">%d أيام</item>\n        <item quantity=\"many\">%d يومًا</item>\n        <item quantity=\"other\">%d يوم</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"zero\">لا مستودعات</item>\n        <item quantity=\"one\">مستودع</item>\n        <item quantity=\"two\">مستودعان</item>\n        <item quantity=\"few\">%d مستودعات</item>\n        <item quantity=\"many\">%d مستودعات</item>\n        <item quantity=\"other\">%d مستودعات</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"zero\">%1$s صفحات</item>\n        <item quantity=\"one\">صفحة</item>\n        <item quantity=\"two\">صفحتان</item>\n        <item quantity=\"few\">%1$s صفحات</item>\n        <item quantity=\"many\">%1$s صفحات</item>\n        <item quantity=\"other\">%1$s صفحات</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"zero\">اليوم</item>\n        <item quantity=\"one\">غداً</item>\n        <item quantity=\"two\">بعد غد</item>\n        <item quantity=\"few\">بعد %1$d أيام</item>\n        <item quantity=\"many\">بعد %1$d أيام</item>\n        <item quantity=\"other\">بعد %1$d أيام</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ar/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">الاسم</string>\n    <string name=\"categories\">الفئات</string>\n    <string name=\"manga\">إدخالات المكتبة</string>\n    <string name=\"chapters\">الفصول</string>\n    <string name=\"track\">التعقب</string>\n    <string name=\"history\">التاريخ</string>\n    <string name=\"label_settings\">اﻹعدادات</string>\n    <string name=\"label_download_queue\">قائمة التنزيلات</string>\n    <string name=\"label_library\">المكتبة</string>\n    <string name=\"label_recent_manga\">السجل</string>\n    <string name=\"label_recent_updates\">التحديثات</string>\n    <string name=\"label_backup\">النسخ الاحتياطي والاستعادة</string>\n    <string name=\"action_settings\">اﻹعدادات</string>\n    <string name=\"action_filter\">الترتيب حسب</string>\n    <string name=\"action_filter_bookmarked\">المحفوظة</string>\n    <string name=\"action_filter_unread\">غير مقروءة</string>\n    <string name=\"action_filter_empty\">إزالة الترتيب</string>\n    <string name=\"action_sort_alpha\">أبجديًا</string>\n    <string name=\"action_sort_total\">عدد الفصول</string>\n    <string name=\"action_sort_last_read\">آخر ما قرأت</string>\n    <string name=\"action_search\">بحث</string>\n    <string name=\"action_select_all\">تحديد الكل</string>\n    <string name=\"action_mark_as_read\">تحديد كمقروء</string>\n    <string name=\"action_mark_as_unread\">تحديد كغير مقروء</string>\n    <string name=\"action_mark_previous_as_read\">تحديد السابق كمقروء</string>\n    <string name=\"action_download\">تنزيل</string>\n    <string name=\"action_bookmark\">احفظ الفصل كإشارة مرجعية</string>\n    <string name=\"action_remove_bookmark\">إزالة الإشارة المرجعية</string>\n    <string name=\"action_delete\">حذف</string>\n    <string name=\"action_update_library\">تحديث المكتبة</string>\n    <string name=\"action_edit\">تعديل</string>\n    <string name=\"action_add\">أضف</string>\n    <string name=\"action_add_category\">إضافة فئة</string>\n    <string name=\"action_edit_categories\">تعديل الفئات</string>\n    <string name=\"action_rename_category\">إعادة تسمية الفئة</string>\n    <string name=\"action_move_category\">حدد الفئات</string>\n    <string name=\"action_edit_cover\">تعديل صورة الغلاف</string>\n    <string name=\"action_pause\">إيقاف موقت</string>\n    <string name=\"action_previous_chapter\">الفصل السابق</string>\n    <string name=\"action_next_chapter\">الفصل التالي</string>\n    <string name=\"action_retry\">إعادة المحاولة</string>\n    <string name=\"action_remove\">إزالة</string>\n    <string name=\"action_resume\">استئناف</string>\n    <string name=\"action_open_in_browser\">فتح فى المتصفح</string>\n    <string name=\"action_display_mode\">وضع العرض</string>\n    <string name=\"action_display\">العرض</string>\n    <string name=\"action_display_grid\">شبكة مدمجة</string>\n    <string name=\"action_display_list\">قائمة</string>\n    <string name=\"action_cancel\">إلغاء</string>\n    <string name=\"action_sort\">فرز</string>\n    <string name=\"action_install\">تثبيت</string>\n    <string name=\"action_share\">مشاركة</string>\n    <string name=\"action_save\">حفظ</string>\n    <string name=\"action_reset\">إعادة تعيين</string>\n    <string name=\"action_undo\">تراجع</string>\n    <string name=\"action_open_log\">فتح السجل</string>\n    <string name=\"action_restore\">إستعادة</string>\n    <string name=\"loading\">جار التحميل…</string>\n    <string name=\"app_not_available\">التطبيق غير متوفر</string>\n    <string name=\"pref_category_general\">عام</string>\n    <string name=\"pref_category_reader\">القارئ</string>\n    <string name=\"pref_category_downloads\">التنزيلات</string>\n    <string name=\"pref_category_tracking\">التتبع</string>\n    <string name=\"pref_category_advanced\">اﻹعدادات المتقدمة</string>\n    <string name=\"pref_category_about\">حول التطبيق</string>\n    <string name=\"pref_library_columns\">حجم الشبكة</string>\n    <string name=\"portrait\">طوليٌّ</string>\n    <string name=\"landscape\">عرضيٌّ</string>\n    <string name=\"pref_library_update_interval\">التحديثات التلقائية</string>\n    <string name=\"update_never\">إيقاف</string>\n    <string name=\"update_6hour\">كل ٦ ساعات</string>\n    <string name=\"update_12hour\">كل ١٢ ساعة</string>\n    <string name=\"update_24hour\">يومياً</string>\n    <string name=\"update_48hour\">كل يومان</string>\n    <string name=\"update_weekly\">أسبوعياً</string>\n    <string name=\"all\">الكل</string>\n    <string name=\"pref_library_update_restriction\">تقييد التحديث التلقائي للجهاز</string>\n    <string name=\"charging\">عند الشحن</string>\n    <string name=\"pref_update_only_non_completed\">حالها «تمَّت»</string>\n    <string name=\"pref_auto_update_manga_sync\">تحديث تقدّم الفصول بعد القراءة</string>\n    <string name=\"default_category\">الفئة المبدئية</string>\n    <string name=\"default_category_summary\">السؤال دائماً</string>\n    <string name=\"pref_fullscreen\">وضع الشاشة الكاملة</string>\n    <string name=\"pref_page_transitions\">مؤثرات الانتقال بين الصفحات</string>\n    <string name=\"pref_show_page_number\">عرض رقم الصفحة</string>\n    <string name=\"pref_crop_borders\">اقتصاص الحدود</string>\n    <string name=\"pref_custom_brightness\">سطوع مُخصّص</string>\n    <string name=\"pref_custom_color_filter\">مُرشح الألوان المخصص</string>\n    <string name=\"pref_keep_screen_on\">ابقاء الشاشة مفتوحة</string>\n    <string name=\"pref_reader_navigation\">التنقل</string>\n    <string name=\"pref_read_with_volume_keys\">أزرار الصوت</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">أزرار الصوت المعكوسة</string>\n    <string name=\"pref_reader_theme\">لون الخلفية</string>\n    <string name=\"white_background\">أبيض</string>\n    <string name=\"black_background\">أسود</string>\n    <string name=\"pref_viewer_type\">وضع القراءة الافتراضي</string>\n    <string name=\"left_to_right_viewer\">صفحيٌّ (يسارًا فيمينًا)</string>\n    <string name=\"right_to_left_viewer\">صفحيٌّ (يمينًا فيسارًا)</string>\n    <string name=\"vertical_viewer\">صفحيٌّ (عموديٌّ)</string>\n    <string name=\"webtoon_viewer\">شريط طويل</string>\n    <string name=\"pref_image_scale_type\">كيفية ضبط الأبعاد</string>\n    <string name=\"scale_type_fit_screen\">ملائمة الشاشة</string>\n    <string name=\"scale_type_stretch\">التمدد</string>\n    <string name=\"scale_type_fit_width\">ملائمة العرض</string>\n    <string name=\"scale_type_fit_height\">ملائمة الطول</string>\n    <string name=\"scale_type_original_size\">الحجم اﻷصلى</string>\n    <string name=\"scale_type_smart_fit\">الملائمة الذكية</string>\n    <string name=\"pref_zoom_start\">موضع بدء التكبير</string>\n    <string name=\"zoom_start_automatic\">تلقائي</string>\n    <string name=\"zoom_start_left\">اليسار</string>\n    <string name=\"zoom_start_right\">اليمين</string>\n    <string name=\"zoom_start_center\">المركز</string>\n    <string name=\"pref_rotation_type\">التدوير الافتراضي</string>\n    <string name=\"rotation_free\">حر</string>\n    <string name=\"rotation_force_portrait\">الوضع الرأسي اﻹجباري</string>\n    <string name=\"rotation_force_landscape\">الوضع الأفقي الإجباري</string>\n    <string name=\"pref_remove_after_marked_as_read\">بعد وضع علامة \\\"مقروءة\\\" يدوياً</string>\n    <string name=\"pref_remove_after_read\">الحذف تلقائيا بعد القراءة</string>\n    <string name=\"disabled\">معطل</string>\n    <string name=\"last_read_chapter\">آخر فصل مقروء</string>\n    <string name=\"second_to_last\">من الفصل الثاني قبل الأخير</string>\n    <string name=\"third_to_last\">‪من الفصل الثالث قبل اﻷخير</string>\n    <string name=\"fourth_to_last\">من الفصل الرابع قبل اﻷخير</string>\n    <string name=\"fifth_to_last\">من الفصل الخامس قبل اﻷخير</string>\n    <string name=\"pref_download_new\">تنزيل الفصول الجديدة</string>\n    <string name=\"services\">المتتبِّعات</string>\n    <string name=\"pref_create_backup\">إنشاء نسخة إحتياطية</string>\n    <string name=\"pref_create_backup_summ\">يمكن استخدامها لإستعادة المكتبة الحالية</string>\n    <string name=\"pref_restore_backup\">إستعادة النسخة الإحتياطية</string>\n    <string name=\"pref_restore_backup_summ\">إستعادة مكتبة من ملف نسخة إحتياطية</string>\n    <string name=\"pref_backup_interval\">معدل النسخ الاحتياطي التلقائي</string>\n    <string name=\"backup_created\">أُنشئت نسخة احتياطية</string>\n    <string name=\"restore_completed\">اكتملت الاستعادة</string>\n    <string name=\"backup_choice\">ما الذي تريد نسخه احتياطيّاً؟</string>\n    <string name=\"restoring_backup\">تُستعاد النسخة الاحتياطية</string>\n    <string name=\"creating_backup\">تُنشأ النسخة الاحتياطية</string>\n    <string name=\"action_global_search\">بحث شامل</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_clear_chapter_cache\">مسح الذاكرة المؤقتة للفصول</string>\n    <string name=\"used_cache\">المستخدمة: %1$s</string>\n    <string name=\"cache_deleted\">تم محو الذاكرة المؤقتة. %1$d ملف تم محوه</string>\n    <string name=\"cache_delete_error\">حدث خطأ أثناء محو ذاكرة التخزين المؤقت</string>\n    <string name=\"pref_clear_cookies\">محو ملفات تعريف الارتباط</string>\n    <string name=\"cookies_cleared\">تم محو ملفات تعريف الارتباط</string>\n    <string name=\"pref_clear_database\">محو قاعدة البيانات</string>\n    <string name=\"pref_clear_database_summary\">مسح سجلّ الإدخالات التي ليست محفوظة في مكتبتك</string>\n    <string name=\"clear_database_confirmation\">أمتأكِّد؟ إن فعلتَ سوف تخسر الفصول المقروءة و التقدم فى المدخلات الغير محفوظة فى المكتبة</string>\n    <string name=\"clear_database_completed\">تم حذف المدخلات</string>\n    <string name=\"version\">اﻹصدار</string>\n    <string name=\"pref_enable_acra\">إرسال تقارير الأعطال</string>\n    <string name=\"pref_acra_summary\">هذا يساعد فى حل أي مشاكل. لن يتم إرسال أيّة بيانات حساسة</string>\n    <string name=\"login_title\">تسجيل الدخول إلى %1$s</string>\n    <string name=\"username\">اسم المستخدم</string>\n    <string name=\"password\">كلمة المرور</string>\n    <string name=\"login\">تسجيل الدخول</string>\n    <string name=\"login_success\">تم تسجيل الدخول</string>\n    <string name=\"unknown_error\">خطأ غير معروف</string>\n    <string name=\"updating_category\">جار تحديث الفئة</string>\n    <string name=\"no_more_results\">لا توجد نتائج أخرى</string>\n    <string name=\"local_source\">مصدر محلِّي</string>\n    <string name=\"other_source\">أخرى</string>\n    <string name=\"action_global_search_hint\">البحث الشامل…</string>\n    <string name=\"latest\">الأحدث</string>\n    <string name=\"browse\">تصفَّح</string>\n    <string name=\"ongoing\">مستمرَّة</string>\n    <string name=\"unknown\">مجهول</string>\n    <string name=\"licensed\">مرخَّصة</string>\n    <string name=\"remove_from_library\">أزل من المكتبة</string>\n    <string name=\"delete_downloads_for_manga\">حذف الفصول المنزلة؟</string>\n    <string name=\"display_mode_chapter\">الفصل %1$s</string>\n    <string name=\"chapter_downloading_progress\">جاري التنزيل (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">خطأ</string>\n    <string name=\"chapter_paused\">متوقّف</string>\n    <string name=\"show_title\">عنوان المصدر</string>\n    <string name=\"show_chapter_number\">رقم الفصل</string>\n    <string name=\"sort_by_source\">حسب المصدر</string>\n    <string name=\"sort_by_number\">حسب رقم الفصل</string>\n    <string name=\"manga_download\">تنزيل</string>\n    <string name=\"download_unread\">غير مقروء</string>\n    <string name=\"confirm_delete_chapters\">هل أنت متأكد من أنك تريد حذف الفصول المحددة؟</string>\n    <string name=\"manga_tracking_tab\">التتبع</string>\n    <string name=\"reading\">القراءة</string>\n    <string name=\"completed\">مكتملة</string>\n    <string name=\"dropped\">متروكة</string>\n    <string name=\"on_hold\">معلَّقة</string>\n    <string name=\"plan_to_read\">أنوي قراءتها</string>\n    <string name=\"score\">التقييم</string>\n    <string name=\"title\">العنوان</string>\n    <string name=\"status\">الحال</string>\n    <string name=\"error_category_exists\">توجد بالفعل فئة بهذا الاسم!</string>\n    <string name=\"snack_categories_deleted\">تم حذف الفئات</string>\n    <string name=\"dialog_with_checkbox_remove_description\">سيؤدي هذا إلى إزالة تاريخ قراءة هذا الفصل. هل أنت متأكد؟</string>\n    <string name=\"dialog_with_checkbox_reset\">إعادة تعيين جميع الفصول لهذا الإدخال</string>\n    <string name=\"snack_add_to_library\">إضافة إلى المكتبة؟</string>\n    <string name=\"picture_saved\">تم حفظ الصورة</string>\n    <string name=\"custom_filter\">مُرشح مخصص</string>\n    <string name=\"set_as_cover\">عيِّنها غلافًا</string>\n    <string name=\"cover_updated\">حُدِّث الغلاف</string>\n    <string name=\"chapter_progress\">الصفحة: %1$d</string>\n    <string name=\"no_next_chapter\">لم يتم العثور على الفصل التالي</string>\n    <string name=\"decode_image_error\">تعذَّر تحميل هذه الصورة</string>\n    <string name=\"confirm_set_image_as_cover\">هل تريد تعيين هذه الصورة كغلاف؟</string>\n    <string name=\"download_queue_error\">فشل تنزيل الفصول. يمكنك إعادة المحاولة في قسم التنزيلات</string>\n    <string name=\"notification_new_chapters\">تم إيجاد فصول جديدة</string>\n    <string name=\"notification_cover_update_failed\">فشل تحديث الغلاف</string>\n    <string name=\"notification_first_add_to_library\">الرجاء إضافة الإدخال إلى مكتبتك قبل القيام بذلك</string>\n    <string name=\"file_select_cover\">اختر صورة الغلاف</string>\n    <string name=\"file_select_backup\">اختر ملف النسخة الاحتياطية</string>\n    <string name=\"update_check_confirm\">تنزيل</string>\n    <string name=\"update_check_no_new_updates\">لا تتوفر تحديثات جديدة</string>\n    <string name=\"update_check_notification_download_in_progress\">جار التنزيل…</string>\n    <string name=\"update_check_notification_download_complete\">اضغط لتثبيت التحديث</string>\n    <string name=\"update_check_notification_download_error\">حدث خطأ في التنزيل</string>\n    <string name=\"update_check_notification_update_available\">نسخة جديدة متوفرة!</string>\n    <string name=\"information_no_downloads\">لا توجد تنزيلات</string>\n    <string name=\"information_no_recent\">لا توجد تحديثات جديدة</string>\n    <string name=\"information_no_recent_manga\">لم تقرأ شيئًا مؤخَّرًا</string>\n    <string name=\"information_empty_library\">مكتبتك فارغة</string>\n    <string name=\"download_notifier_downloader_title\">مدير التنزيل</string>\n    <string name=\"download_notifier_title_error\">خطأ</string>\n    <string name=\"download_notifier_unknown_error\">فشل تنزيل الفصل بسبب حدوث خطأ غير متوقع</string>\n    <string name=\"download_notifier_text_only_wifi\">لا يتوفر اتصال واي فاي</string>\n    <string name=\"download_notifier_no_network\">لا يتوفر اتصال بالشبكة</string>\n    <string name=\"download_notifier_download_paused\">توقفت التنزيلات</string>\n    <string name=\"channel_common\">عام</string>\n    <string name=\"label_migration\">نقل</string>\n    <string name=\"label_extensions\">الإضافات</string>\n    <string name=\"label_extension_info\">معلومات الإضافة</string>\n    <string name=\"action_display_download_badge\">الفصول المحملة</string>\n    <string name=\"ext_update\">حدث</string>\n    <string name=\"ext_install\">تثبيت</string>\n    <string name=\"ext_pending\">المُعلقة</string>\n    <string name=\"ext_downloading\">جارى التنزيل</string>\n    <string name=\"ext_installing\">جاري التثبيت</string>\n    <string name=\"ext_installed\">تم التثبيت</string>\n    <string name=\"ext_trust\">الثقة</string>\n    <string name=\"ext_untrusted\">غير موثوق فيه</string>\n    <string name=\"ext_uninstall\">إلغاء التثبيت</string>\n    <string name=\"untrusted_extension\">إضافة ذات ريبة</string>\n    <string name=\"untrusted_extension_message\">يمكن للملحقات الخبيثة قراءة أي بيانات اعتماد مخزنة لتسجيل الدخول أو تنفيذ تعليمات برمجية عشوائية.\n\\n\n\\nمن خلال الوثوق بهذا الامتداد، فإنك تقبل هذه المخاطر.</string>\n    <string name=\"pref_double_tap_anim_speed\">سرعة مؤثر النقر المزدوج</string>\n    <string name=\"pager_viewer\">عارض الصفحات</string>\n    <string name=\"double_tap_anim_speed_0\">لا مؤثرات</string>\n    <string name=\"double_tap_anim_speed_normal\">طبيعي</string>\n    <string name=\"double_tap_anim_speed_fast\">سريع</string>\n    <string name=\"manga_added_library\">تم الإضافة إلى المكتبة</string>\n    <string name=\"manga_removed_library\">تم الإزالة من المكتبة</string>\n    <string name=\"copied_to_clipboard\">نُسخ إلى الحافظة:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">المصدر غير مثبت: %1$s</string>\n    <string name=\"repeating\">إعادة القراءة</string>\n    <string name=\"track_status\">الحالة</string>\n    <string name=\"track_type\">النوع</string>\n    <string name=\"migration_dialog_what_to_include\">اختر بيانات لتضمينها</string>\n    <string name=\"migrate\">نقل</string>\n    <string name=\"copy\">نسخ</string>\n    <string name=\"information_empty_category\">ليست لديك أيّة فئات، اضغط زر اﻹضافة لإنشاء واحدة لتنظيم مكتبتك.</string>\n    <string name=\"transition_finished\">تمَّ الانتهاء من:</string>\n    <string name=\"transition_current\">الحالي:</string>\n    <string name=\"transition_next\">التّالي:</string>\n    <string name=\"transition_previous\">السّابق:</string>\n    <string name=\"transition_no_next\">لا يوجدُ فصل تالي</string>\n    <string name=\"transition_no_previous\">لا يوجدُ فصل سابق</string>\n    <string name=\"transition_pages_loading\">جار تحميل الصّفحات…</string>\n    <string name=\"transition_pages_error\">فشل تحميل الصّفحات: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">أظهر الإجراءات عند الضغط المطوَّل</string>\n    <string name=\"action_open_in_web_view\">فتح في WebView</string>\n    <string name=\"pref_skip_read_chapters\">تخطي الفصول المقروءة</string>\n    <string name=\"filter_mode_overlay\">التراكب</string>\n    <string name=\"filter_mode_multiply\">مضاعفة</string>\n    <string name=\"filter_mode_screen\">الشاشة</string>\n    <string name=\"label_help\">المساعدة</string>\n    <string name=\"pref_color_filter_mode\">مُرشح الألوان ”وضع الألوان الممزوجة“</string>\n    <string name=\"filter_mode_lighten\">مراوغة / تفتيح</string>\n    <string name=\"filter_mode_darken\">حرق / تغميق</string>\n    <string name=\"no_results_found\">لم يُعثر على أيِّ نتائج</string>\n    <string name=\"migration_selection_prompt\">اختيار مصدر للنقل من</string>\n    <string name=\"action_webview_back\">عودة</string>\n    <string name=\"action_webview_forward\">تقدم</string>\n    <string name=\"action_webview_refresh\">تحديث</string>\n    <string name=\"pref_category_library\">المكتبة</string>\n    <string name=\"label_more\">المزيد</string>\n    <string name=\"action_move_to_top\">نقل إلى الأعلى</string>\n    <string name=\"action_oldest\">الأقدم</string>\n    <string name=\"action_newest\">الأَحدثْ</string>\n    <string name=\"action_cancel_all\">إلغاء الكل</string>\n    <string name=\"action_view_chapters\">عرض الفصول</string>\n    <string name=\"action_sort_latest_chapter\">أحدث فصل</string>\n    <string name=\"action_menu\">القائمة</string>\n    <string name=\"label_sources\">المصادر</string>\n    <string name=\"action_move_to_bottom\">نقل إلى الأسفل</string>\n    <string name=\"lock_never\">أبدًا</string>\n    <string name=\"lock_always\">دائماً</string>\n    <string name=\"lock_when_idle\">أوصد في حالة السكون</string>\n    <string name=\"lock_with_biometrics\">اطلب فتح القفل</string>\n    <string name=\"pref_category_security\">الأمان و الخصوصية</string>\n    <string name=\"pref_manage_notifications\">أدر الإشعارات</string>\n    <string name=\"pref_date_format\">صيغة التاريخ</string>\n    <string name=\"theme_system\">النظام</string>\n    <string name=\"theme_dark\">داكن</string>\n    <string name=\"theme_light\">فاتح</string>\n    <string name=\"battery_optimization_disabled\">تم إلغاء وضع تحسين البطارية مُسبقاً</string>\n    <string name=\"pref_disable_battery_optimization_summary\">يساعد في عملية تحديث المكتبة والنسخ الإحتياطي في الخلفية</string>\n    <string name=\"pref_disable_battery_optimization\">إطفاء وضع تحسين البطارية</string>\n    <string name=\"pref_category_reading\">اعدادات القرآءة</string>\n    <string name=\"pref_always_show_chapter_transition\">اظهار فواصل الانتقال بين الفصول</string>\n    <string name=\"pref_skip_filtered_chapters\">تخطي الفصول المُرشحة</string>\n    <string name=\"pref_cutout_short\">اظهار محتوى المناطق المقطوعة</string>\n    <string name=\"obsolete_extension_message\">هذه الإضافة لم تعد متوفرة. قد لا تعمل بشكل صحيح ويمكن أن تسبب بمشاكل في التطبيق. يوصى بإلغائه.</string>\n    <string name=\"ext_obsolete\">قديم جدًا</string>\n    <string name=\"ext_updates_pending\">التحديثات معلقة</string>\n    <string name=\"pref_category_library_update\">التحديث العام</string>\n    <string name=\"pref_category_display\">العرض</string>\n    <string name=\"hide_notification_content\">أخفِ محتوى الإشعارات</string>\n    <string name=\"secure_screen_summary\">تُخفي الشاشة الآمنة محتوى التطبيق عند التبديل بين التطبيقات، وتمنع التقاط الشاشة كذلك</string>\n    <string name=\"secure_screen\">الشاشة الآمنة</string>\n    <string name=\"label_downloaded_only\">المُنزل فقط</string>\n    <string name=\"check_for_updates\">تحقَّق من وجود تحديثات</string>\n    <string name=\"licenses\">التراخيص مفتوحة المصدر</string>\n    <string name=\"website\">الموقع الإلكتروني</string>\n    <string name=\"restoring_backup_canceled\">أُلغيت الاستعادة</string>\n    <string name=\"restoring_backup_error\">فشل استعادة النسخ الاحتياطي</string>\n    <string name=\"restore_in_progress\">الاستعادة قيد التقدم بالفعل</string>\n    <string name=\"creating_backup_error\">فشل النسخ الاحتياطي</string>\n    <string name=\"backup_in_progress\">يُنسخ احتياطيًّا بالفعل</string>\n    <string name=\"restore_duration\">%02d دقيقة و %02d ثانية</string>\n    <string name=\"action_unpin\">إلغاء التثبيت</string>\n    <string name=\"action_pin\">تثبيت</string>\n    <string name=\"action_select_inverse\">عكس التحديد</string>\n    <string name=\"channel_ext_updates\">تحديثات اﻹضافات</string>\n    <string name=\"channel_new_chapters\">تحديثات الفصول</string>\n    <string name=\"information_webview_outdated\">يرجى تحديث تطبيق WebView لتوافق أفضل</string>\n    <string name=\"information_webview_required\">إن وجود WebView لازم ليعمل التطبيق</string>\n    <string name=\"information_cloudflare_bypass_failure\">فشل في تجاوز Cloudflare</string>\n    <string name=\"notification_chapters_multiple\">الفصول %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">الفصل %1$s و%2$d فصول أخرى</string>\n    <string name=\"notification_chapters_single\">الفصل %1$s</string>\n    <string name=\"recent_manga_time\">الفصل %1$s - %2$s</string>\n    <string name=\"updating_library\">تَحديثُ المكتبة</string>\n    <string name=\"viewer\">وضع القراءة</string>\n    <string name=\"pref_category_for_this_series\">القسم الخاص بهذه السلسلة</string>\n    <string name=\"paused\">متوقِّفة</string>\n    <string name=\"add_tracking\">أضف تتبُّعًا</string>\n    <string name=\"manga_info_collapse\">أقل</string>\n    <string name=\"manga_info_expand\">المزيد</string>\n    <string name=\"in_library\">في المكتبة</string>\n    <string name=\"add_to_library\">إضافة إلى المكتبة</string>\n    <string name=\"local_source_help_guide\">دليل استخدام المصادر المحلية</string>\n    <string name=\"pinned_sources\">المثبتة</string>\n    <string name=\"last_used_source\">آخر مصدر مُستخدم</string>\n    <string name=\"logout_success\">تم تسجيل الخروج</string>\n    <string name=\"logout\">تسجيل الخروج</string>\n    <string name=\"logout_title\">تسجيل الخروج من %1$s؟</string>\n    <string name=\"email\">البريد الإلكتروني</string>\n    <string name=\"downloaded_only_summary\">تصفية جميع الإدخالات في مكتبتك</string>\n    <string name=\"pref_webtoon_side_padding\">الإزاحة الجانبية</string>\n    <string name=\"vertical_plus_viewer\">شريط طويل بين أجزائه فجوات</string>\n    <string name=\"gray_background\">رمادي</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">تعذر فتح إعدادات الجهاز</string>\n    <string name=\"action_migrate\">نقل</string>\n    <string name=\"label_data\">البيانات</string>\n    <string name=\"backup_restore_missing_sources\">المصادر المفقودة:</string>\n    <string name=\"invalid_backup_file_missing_manga\">النسخة الإحتياطية لا تحتوي على أيّة إدخالات المكتبة.</string>\n    <string name=\"invalid_backup_file\">ملف النسخ الاحتياطي غير صالح:</string>\n    <string name=\"tracking_info\">مزامنة أحادية تُحدِّث قراءة الفصول في المتتبعات الخارجية، ولك تعيين التتبِّع لكلِّ مدخلة على حدى، وذلك من زرِّ التتبع فيهم.</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">تحقق من وجود غلاف جديد وتفاصيل جديدة عند تحديث المكتبة</string>\n    <string name=\"pref_library_update_refresh_metadata\">تحديث البيانات الوصفية تلقائياً</string>\n    <string name=\"sort_by_upload_date\">حسب تاريخ الرفع</string>\n    <string name=\"pref_refresh_library_covers\">حدّث صور اغلفة المكتبة</string>\n    <string name=\"action_display_comfortable_grid\">شبكة مريحة</string>\n    <string name=\"tabs_header\">قوائم</string>\n    <string name=\"action_display_show_tabs\">إظهار قوائم الفئة</string>\n    <string name=\"page_list_empty_error\">لم يتم العثور على أيّة صفحات</string>\n    <string name=\"action_enable_all\">تفعيل الكل</string>\n    <string name=\"action_disable_all\">تعطيل الكل</string>\n    <string name=\"pref_show_reading_mode_summary\">إظهار الوضع الحالي لفترةٍ وجيزةٍ عند فتح القارئ</string>\n    <string name=\"pref_show_reading_mode\">إظهار وضع القراءة</string>\n    <string name=\"pref_category_theme\">السمة</string>\n    <string name=\"action_disable\">تعطيل</string>\n    <string name=\"action_start\">ابدأ</string>\n    <string name=\"action_sort_date_added\">تاريخ الإضافة</string>\n    <string name=\"whats_new\">ما الجديد</string>\n    <string name=\"requires_app_restart\">يتطلب إعادة تشغيل التطبيق ليتم تفعيله</string>\n    <string name=\"label_network\">التشبيك</string>\n    <string name=\"backup_restore_missing_trackers\">أجهزة التتبع التي لم يتم تسجيل الدخول إليها:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">حذف الفصول ذات العلامة المرجعية</string>\n    <string name=\"pref_category_delete_chapters\">حذف الفصول</string>\n    <string name=\"pref_category_reading_mode\">وضع القراءة</string>\n    <string name=\"ext_nsfw_warning\">بعض المصادر من هذا الامتداد قد تحتوى على محتوى للبالغين (+18)</string>\n    <string name=\"ext_nsfw_short\">محتوى غير لائق</string>\n    <string name=\"parental_controls_info\">هذا لا يمنع الإضافات غير الرسمية أو التي تم وضع علامة عليها بشكل غير صحيح من إظهار محتوى غير لائق داخل التطبيق.</string>\n    <string name=\"tapping_inverted_both\">كليهما</string>\n    <string name=\"tapping_inverted_vertical\">عمودي</string>\n    <string name=\"tapping_inverted_horizontal\">أفقي</string>\n    <string name=\"tapping_inverted_none\">لا شيء</string>\n    <string name=\"pref_read_with_tapping_inverted\">عكس مناطق اللمس</string>\n    <string name=\"channel_errors\">أخطاء</string>\n    <string name=\"channel_complete\">مُكتمل</string>\n    <string name=\"channel_progress\">التقدّم</string>\n    <string name=\"download_insufficient_space\">تعذّر تنزيل الفصول بسبب انخفاض مساحة التخزين</string>\n    <string name=\"loader_not_implemented_error\">لم يتم العثور على المصدر</string>\n    <string name=\"unknown_status\">حالة غير معروفة</string>\n    <string name=\"unknown_author\">مؤلّف غير معروف</string>\n    <string name=\"no_pinned_sources\">لا تمتلك أيّة مصادر مثبّتة</string>\n    <string name=\"action_global_search_query\">إبحث عن \\\"%1$s\\\" بشكلٍ شامل</string>\n    <string name=\"updated_version\">حُدِّث إلى الإصدار v%1$s</string>\n    <string name=\"no_chapters_error\">لم يُعثر على فصول</string>\n    <string name=\"share_page_info\">%1$s: %2$s, صفحة %3$d</string>\n    <string name=\"chapter_settings_updated\">إعدادات الفصل الإفتراضية المُحدثة</string>\n    <string name=\"set_chapter_settings_as_default\">تعيين كافتراضي</string>\n    <string name=\"also_set_chapter_settings_for_library\">تنطبق أيضًا على جميع الإدخالات في مكتبتي</string>\n    <string name=\"confirm_set_chapter_settings\">هل أنت متأكد أنك تريد حفظ هذه الإعدادات كافتراضي؟</string>\n    <string name=\"chapter_settings\">إعدادات الفصل</string>\n    <string name=\"action_search_settings\">إعدادات البحث</string>\n    <string name=\"downloaded_chapters\">الفصول المنزَّلة</string>\n    <string name=\"manga_from_library\">من المكتبة</string>\n    <string name=\"clear_history_confirmation\">أمتأكِّد؟ سوف يُحذف التاريخ.</string>\n    <string name=\"clear_history_completed\">حُذف التاريخ</string>\n    <string name=\"pref_incognito_mode_summary\">إيقاف سجل القراءة</string>\n    <string name=\"pref_incognito_mode\">الوضع المخفي</string>\n    <string name=\"pref_clear_history\">مسح السجل</string>\n    <string name=\"spen_next_page\">الصفحة التالية</string>\n    <string name=\"spen_previous_page\">الصفحة السابقة</string>\n    <string name=\"migration_help_guide\">دليل نقل المصدر</string>\n    <string name=\"pref_category_nsfw_content\">محتوى +18</string>\n    <string name=\"pref_show_nsfw_source\">اعرض في قوائم المصادر والامتدادات</string>\n    <string name=\"myanimelist_relogin\">رجاء سجل دخولك في MAL مجدداً</string>\n    <string name=\"file_picker_error\">لم يتم العثور على تطبيق منتقي الملفات</string>\n    <string name=\"pref_viewer_nav\">مناطق اللمس</string>\n    <string name=\"l_nav\">في شكل حرف L</string>\n    <string name=\"edge_nav\">حافَّة</string>\n    <string name=\"kindlish_nav\">كأنه كِندِل</string>\n    <string name=\"action_filter_tracked\">مُتتبَعة</string>\n    <string name=\"action_display_show_number_of_items\">إظهار عدد العناصر</string>\n    <string name=\"track_finished_reading_date\">تاريخ انهاء القراءة</string>\n    <string name=\"track_started_reading_date\">تاريخ بدء القراءة</string>\n    <string name=\"pref_dump_crash_logs_summary\">يحفظ سجلات الأخطاء في ملف للمشاركة مع المطورين</string>\n    <string name=\"pref_dump_crash_logs\">شارك سجلَّات الاعطال</string>\n    <string name=\"right_and_left_nav\">يميناً ويساراً</string>\n    <string name=\"pref_dual_page_invert_summary\">إذا كان موضع تقسيم الصفحات العريضة لا يتطابق مع اتجاه القراءة</string>\n    <string name=\"pref_dual_page_invert\">عكس موضع تقسيم الصفحة</string>\n    <string name=\"pref_dual_page_split\">تقسيم الصفحات العريضة</string>\n    <string name=\"action_desc\">تنازلياً</string>\n    <string name=\"action_asc\">تصاعدياً</string>\n    <string name=\"action_order_by_upload_date\">حسب تاريخ الرفع</string>\n    <string name=\"action_order_by_chapter_number\">حسب رقم الفصل</string>\n    <string name=\"pref_dns_over_https\">إستخدام DNS عبر HTTPS (DoH)</string>\n    <string name=\"backup_restore_content_full\">قد تحتاج إلى تثبيت أي إضافات مفقودة وتسجيل الدخول إلى خدمات التتبع بعد ذلك لاستخدامها.</string>\n    <string name=\"nav_zone_right\">يمين</string>\n    <string name=\"nav_zone_left\">يسار</string>\n    <string name=\"nav_zone_next\">التالي</string>\n    <string name=\"nav_zone_prev\">السابق</string>\n    <string name=\"pref_show_navigation_mode_summary\">عرض مناطق اللمس للتنقل عند فتح القارئ لفترة وجيزة</string>\n    <string name=\"pref_show_navigation_mode\">إظهار مناطق اللمس</string>\n    <string name=\"action_sort_chapter_fetch_date\">تاريخ الرفع</string>\n    <string name=\"rotation_landscape\">افقي</string>\n    <string name=\"rotation_portrait\">رأسي</string>\n    <string name=\"rotation_type\">التدوير</string>\n    <string name=\"automatic_background\">تلقائيًّا</string>\n    <string name=\"pref_create_folder_per_manga_summary\">يُنشِئ مجلدات وفقًا لعناوين المدخلات</string>\n    <string name=\"pref_create_folder_per_manga\">احفظ الصفحات في مجلدات منفصلة</string>\n    <string name=\"pref_reader_actions\">الإجراءات</string>\n    <string name=\"pref_grayscale\">تدرج رمادي</string>\n    <string name=\"exclude\">إستثناء: %s</string>\n    <string name=\"include\">تضمين: %s</string>\n    <string name=\"none\">لا شيء</string>\n    <string name=\"pref_library_update_categories_details\">الإدخالات في الفئات المستبعدة لن يتم تحديثها حتى و ان كانت أيضا في الفئات المضمنة.</string>\n    <string name=\"action_show_errors\">اضغط لإظهار التفاصيل</string>\n    <string name=\"pref_category_auto_download\">التنزيل التلقائي</string>\n    <string name=\"pref_download_new_categories_details\">لن يتم تنزيل الإدخالات في الفئات المستبعدة حتى إذا كانت موجودة أيضًا في الفئات المضمنة.</string>\n    <string name=\"notification_incognito_text\">إلغاء تفعيل الوضع الخفي</string>\n    <string name=\"clipboard_copy_error\">فشل النسخ إلى الحافظة</string>\n    <string name=\"update_check_eol\">نسخة الاندرويد هذه اصبحت غير مدعومة</string>\n    <string name=\"source_unsupported\">المصدر غير مدعوم</string>\n    <string name=\"unread\">لم يُقرأ</string>\n    <string name=\"date\">التاريخ</string>\n    <string name=\"local_filter_order_by\">ترتيب حسب</string>\n    <string name=\"chapter_not_found\">لم يُعثر على الفصل</string>\n    <string name=\"off\">إيقاف</string>\n    <string name=\"on\">تشغيل</string>\n    <string name=\"restrictions\">قيود: %s</string>\n    <string name=\"error_no_match\">لا يوجد مطابقات</string>\n    <string name=\"error_sharing_cover\">فشلت مشاركة الغلاف</string>\n    <string name=\"error_saving_cover\">خطأ في حفظ الغلاف</string>\n    <string name=\"cover_saved\">حُفظ الغلاف</string>\n    <string name=\"manga_cover\">غُلاف</string>\n    <string name=\"local_invalid_format\">تنسيق الفصل غير صالح</string>\n    <string name=\"tracking_guide\">تعليمات التعقب</string>\n    <string name=\"categorized_display_settings\">إعدادات فرز كل صنف</string>\n    <string name=\"cancel_all_for_series\">إلغاء الكل لهذه السلسلة</string>\n    <string name=\"action_display_local_badge\">مصدر محلّي</string>\n    <string name=\"information_empty_category_dialog\">ليس لديك اي قوائم بعد.</string>\n    <string name=\"action_start_downloading_now\">ابدأ التحميل الآن</string>\n    <string name=\"theme_strawberrydaiquiri\">أحمر</string>\n    <string name=\"theme_midnightdusk\">منتصف الليل</string>\n    <string name=\"theme_greenapple\">أخضر</string>\n    <string name=\"pref_app_theme\">مظهر التطبيق</string>\n    <string name=\"pref_lowest\">أدنى</string>\n    <string name=\"pref_low\">دنيا</string>\n    <string name=\"pref_high\">عالية</string>\n    <string name=\"pref_highest\">أعلى</string>\n    <string name=\"pref_hide_threshold\">حساسية التمرير لإخفاء القائمة</string>\n    <string name=\"pref_dark_theme_pure_black\">وضع داكن الأسود النقي</string>\n    <string name=\"theme_yotsuba\">يوتسوبا</string>\n    <string name=\"theme_yinyang\">ين &amp; يانغ</string>\n    <string name=\"theme_tako\">تاكو</string>\n    <string name=\"theme_monet\">ديناميك</string>\n    <string name=\"about_dont_kill_my_app\">تقوم بعض الشركات المصنعة بوضع قيود إضافية على التطبيقات التي قد تقضي على الخدمات التي تعمل في الخلفية. يحتوي هذا الموقع على مزيد من المعلومات حول كيفية إصلاحه.</string>\n    <string name=\"restore_miui_warning\">قد لا يعمل النسخ الاحتياطيُّ أو الاستعادة إن عطِّلت أمثَلَة MIUI.</string>\n    <string name=\"enhanced_tracking_info\">يُحسِّن مصادر معينة، وتُتابَع المدخلات حال إضافتها للمكتبة.</string>\n    <string name=\"enhanced_services\">المتتبِّعات المحسَّنة</string>\n    <string name=\"relative_time_today\">اليوم</string>\n    <string name=\"confirm_lock_change\">المصادقة لتأكيد التغيير</string>\n    <string name=\"label_default\">الافتراضي</string>\n    <string name=\"label_background_activity\">الأنشطة التي تعمل في الخلفية</string>\n    <string name=\"action_track\">تتبع</string>\n    <string name=\"pref_inverted_colors\">معكوس</string>\n    <string name=\"theme_tealturquoise\">ازرق مخضر و فيروز</string>\n    <string name=\"pref_category_appearance\">المظهر</string>\n    <string name=\"getting_started_guide\">دليل البدء</string>\n    <string name=\"help_translate\">ساعد بالترجمة</string>\n    <string name=\"pref_tablet_ui_mode\">واجهة مستخدم الجهاز اللوحي</string>\n    <string name=\"pref_remove_exclude_categories\">الفئات المستثناة</string>\n    <string name=\"ext_installer_pref\">المثبِّت</string>\n    <string name=\"action_sort_count\">إجمالي الإدخالات</string>\n    <string name=\"label_warning\">تحذير</string>\n    <string name=\"action_display_language_badge\">اللغة</string>\n    <string name=\"backup_info\">زد على ذلك حفظ الاحتياط في غير هذا المكان، وتنبَّه لوجود الخطير فيها ككلمات السر، وتحفَّظ من مشاركتها.</string>\n    <string name=\"notification_size_warning\">التحديثات الكبيرة تضر بالمصادر، وتؤدي لتحديثات أبطأ، وقد تسبب زيادة في استهلاك البطارية۔ اضغط لمعرفة المزيد۔</string>\n    <string name=\"pref_verbose_logging\">التسجيل المطول</string>\n    <string name=\"ext_app_info\">معلومات التطبيق</string>\n    <string name=\"ext_install_service_notif\">جارٍ تثبيت الإضافة …</string>\n    <string name=\"pref_verbose_logging_summary\">طباعة السجلات المطولة في سجل النظام (يقلل من أداء التطبيق)</string>\n    <string name=\"channel_app_updates\">تحديثات التطبيق</string>\n    <string name=\"ext_update_all\">تحديث الكل</string>\n    <string name=\"update_72hour\">كل ثلاثة ايام</string>\n    <string name=\"connected_to_wifi\">فقط على شبكة WI-FI</string>\n    <string name=\"ext_installer_shizuku_stopped\">«Shizuku» لا يعمل</string>\n    <string name=\"publishing_finished\">انتهى النشر</string>\n    <string name=\"cancelled\">أُلغيت</string>\n    <string name=\"on_hiatus\">متوقفة</string>\n    <string name=\"library_errors_help\">للحصول على المساعده في إصلاح أخطاء تحديث المكتبة، أنظر هنا%1$s</string>\n    <string name=\"save_chapter_as_cbz\">احفظ كأرشيف CBZ</string>\n    <string name=\"privacy_policy\">سياسة الخصوصية</string>\n    <string name=\"pref_update_only_completely_read\">فيها فصول لم تُقرأ</string>\n    <string name=\"ext_installer_legacy\">قياسي</string>\n    <string name=\"pref_auto_clear_chapter_cache\">امسح ملفات التخزين المؤقت عند فتح التطبيق</string>\n    <string name=\"database_clean\">لا شئ للتنظيف</string>\n    <string name=\"clear_database_source_item_count\">%1$d مدخلةً في قاعدة البيانات وليست في المكتبة</string>\n    <string name=\"extension_api_error\">فشل الحصول على قائمة الملحقات</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">ثبِّت «شيزوكو» وشغِّله لتستخدمه مثبِّت إضافات.</string>\n    <string name=\"download_queue_size_warning\">تحذير: يمكن أن تؤدِّي التنزيلات كبيرة الحجم والعدد إلى إبطاء المصادر، وقد يُحظر Mihon منها بسبب ذلك. اضغط لمعرفة المزيد۔</string>\n    <string name=\"action_show_manga\">إظهار الدخول</string>\n    <string name=\"action_display_cover_only_grid\">شبكة بالاغلفة</string>\n    <string name=\"skipped_reason_not_started\">تُخُطِّيت بسبب عدم وجود فصول قُرئت</string>\n    <string name=\"skipped_reason_not_caught_up\">تُخُطِّيت لوجود فصول لم تُقرأ</string>\n    <string name=\"pref_update_only_started\">لم يبدأ هذا بعد</string>\n    <string name=\"skipped_reason_completed\">تُخُطِّيت لأنها مكتملة</string>\n    <string name=\"pref_navigate_pan\">حرِّك الصور الواسعة</string>\n    <string name=\"pref_landscape_zoom\">كبِّر الصور العريضة تلقائيًّا</string>\n    <string name=\"error_saving_picture\">خطأ أثناء حفظ الصورة</string>\n    <string name=\"disabled_nav\">معطل</string>\n    <string name=\"rotation_reverse_portrait\">رأسي بالعكس</string>\n    <string name=\"notification_update_error\">فشل %1$d تحديث أو تحديثات</string>\n    <string name=\"learn_more\">اضغط لمعرفة المزيد</string>\n    <string name=\"action_move_to_top_all_for_series\">نقل سلسلة الفصول للأعلى</string>\n    <string name=\"empty_backup_error\">لا توجد مدخلات في المكتبة لإجراء نسخة احتياطي‮‮ة</string>\n    <string name=\"action_close\">اغلاق</string>\n    <string name=\"update_check_open\">فتح في GitHub</string>\n    <string name=\"pref_clear_webview_data\">احذف بيانات WebView</string>\n    <string name=\"webview_data_deleted\">حُذفت بيانات WebView</string>\n    <string name=\"source_filter_empty_screen\">لا يوجد مصادر مثبته</string>\n    <string name=\"source_empty_screen\">لا يوجد مصدر</string>\n    <string name=\"action_sort_unread_count\">المانجا الغير مقروءة</string>\n    <string name=\"action_sort_last_manga_update\">آخر فحص للتحديث</string>\n    <string name=\"split_tall_images_summary\">يحسِّن أداء القارئ</string>\n    <string name=\"download_notifier_split_page_not_found\">لم يُعثر على الصفحة %d أثناء التقسيم</string>\n    <string name=\"download_notifier_split_page_path_not_found\">لم يتم العثور على مسار الصفخة %d</string>\n    <string name=\"pref_reset_viewer_flags_success\">اعادة تعيين جميع اعدادات القارئ</string>\n    <string name=\"pref_reset_viewer_flags_summary\">إعادة تعيين اعدادات القراءه لكل القصص</string>\n    <string name=\"ext_info_language\">اللغة</string>\n    <string name=\"ext_info_age_rating\">التقييم العمري</string>\n    <string name=\"ext_info_version\">الإصدار</string>\n    <string name=\"pref_reset_viewer_flags_error\">لم يمكن إعادة تعيين إعدادات القارئ</string>\n    <string name=\"empty_screen\">هذا محرج</string>\n    <string name=\"unfinished_list\">قائمة غير المنتهية</string>\n    <string name=\"network_not_metered\">على الشبكات غير المحدودة فقط</string>\n    <string name=\"pref_reset_viewer_flags\">إعادة ضبط إعدادات قراءة السلسلة</string>\n    <string name=\"reading_list\">قائمة القراءة</string>\n    <string name=\"wish_list\">قائمة الرغبات</string>\n    <string name=\"complete_list\">قائمة المكتملة</string>\n    <string name=\"on_hold_list\">قائمة المعلَّقة</string>\n    <string name=\"custom_cover\">غلاف مخصص</string>\n    <string name=\"cant_open_last_read_chapter\">غير قادر على فتح آخر فصل تم قراءته</string>\n    <string name=\"not_installed\">غير مثبت</string>\n    <string name=\"pref_app_language\">لغة تطبيق</string>\n    <string name=\"delete_category_confirmation\">هل تُريد محو هذه الفئة \\\"%s\\\"؟</string>\n    <string name=\"internal_error\">خطأ داخلي: تحقق من سجل الاعطال لمزيداً من المعلومات</string>\n    <string name=\"pref_reset_user_agent_string\">اعادة ضبط وتر وكيل ألمستخدم الإفتراضي</string>\n    <string name=\"pref_user_agent_string\">وتر وكيل المستخدم الافتراضي</string>\n    <string name=\"delete_category\">مسح الفئة</string>\n    <string name=\"description_placeholder\">لا وصف</string>\n    <string name=\"theme_lavender\">أُرجواني</string>\n    <string name=\"appwidget_unavailable_locked\">لا تتاح الأداة حال تمكين قفل التطبيق</string>\n    <string name=\"appwidget_updates_description\">اطَّلع على ما حُدِّث مؤخَّرًا في مكتبتك</string>\n    <string name=\"action_remove_everything\">حذف كل شيء</string>\n    <string name=\"theme_tidalwave\">موجة مد و جزر</string>\n    <string name=\"multi_lang\">متعدد</string>\n    <string name=\"update_already_running\">هنالك تحديث جارٍ بالفعل</string>\n    <string name=\"download_ahead\">التنزيل المسبق</string>\n    <string name=\"download_ahead_info\">ينفع حين كون الفصل الحاليِّ والذي يليه منزَّلين.</string>\n    <string name=\"auto_download_while_reading\">التحميل تلقائيا أثناء القراءة</string>\n    <string name=\"are_you_sure\">هل أنت واثق؟</string>\n    <string name=\"updates_last_update_info\">آخر تحديث للمكتبة: %s</string>\n    <string name=\"error_user_agent_string_blank\">سلسلة وكيل المستخدم لا يمكن أن تكون فارغة</string>\n    <string name=\"popular\">شائع</string>\n    <string name=\"remove_manga\">أنت على وشك أن تحذف \\\"%s\\\" من مكتبتك</string>\n    <string name=\"missing_storage_permission\">لم يتم منح أذن التخزين</string>\n    <string name=\"action_search_hint\">بحث…</string>\n    <string name=\"skipped_reason_not_always_update\">تُخُطِّيت لأن السلسلة لا تتطلب تحديثات</string>\n    <string name=\"crash_screen_description\">واجه %s خطأً غير متوقَّع. تنبغي لك مشاركة سجلَّات الانهيار في قناة الدعم في دسكورد.</string>\n    <string name=\"crash_screen_title\">عفوًا!</string>\n    <string name=\"crash_screen_restart_application\">أعد تشغيل التطبيق</string>\n    <string name=\"pref_appearance_summary\">مظهر، التاريخ والوقت</string>\n    <string name=\"pref_library_summary\">الفئات، التحديث الشامل، تمرير الفصول</string>\n    <string name=\"pref_reader_summary\">وضع القراءة، العرض، التنقل</string>\n    <string name=\"pref_downloads_summary\">التحميل التلقائي، التحميل مقدما</string>\n    <string name=\"pref_tracking_summary\">تزامن التقدم أحادي الاتجاه، مزامنة محسّنة</string>\n    <string name=\"pref_browse_summary\">المصادر، الامتدادات، البحث العالمي</string>\n    <string name=\"pref_backup_summary\">النسخ الاحتياطي اليدوي والآلي وحيِّز التخزين</string>\n    <string name=\"pref_security_summary\">قفل التطبيق، شاشة آمنة</string>\n    <string name=\"pref_advanced_summary\">تفريغ سجلات الأعطال وتحسينات البطارية</string>\n    <string name=\"fdroid_warning\">لا يتم دعم إصدارات F-Droid رسميا.\n\\nانقر لمعرفة المزيد.</string>\n    <string name=\"invalid_location\">موقع غير صالح: %s</string>\n    <string name=\"pref_invalidate_download_cache_summary\">فرض التطبيق على إعادة التحقق من الفصول التي تم تنزيلها</string>\n    <string name=\"track_remove_date_conf_title\">إزالة التاريخ؟</string>\n    <string name=\"track_remove_start_date_conf_text\">%s سيؤدي هذا إلى إزالة تاريخ البدء المحدد مسبقًا من</string>\n    <string name=\"action_display_show_continue_reading_button\">زرُّ متابعة القراءة</string>\n    <string name=\"updates_last_update_info_just_now\">في هذه اللحظة</string>\n    <string name=\"track_remove_finish_date_conf_text\">%s سيؤدي ذلك إلى إزالة تاريخ الانتهاء المحدد مسبقا من</string>\n    <string name=\"pref_invalidate_download_cache\">فهرس التنزيلات غير صالح</string>\n    <string name=\"unknown_title\">عنوان غير معروف</string>\n    <string name=\"download_notifier_cache_renewal\">التحقق من التنزيلات</string>\n    <string name=\"action_open_random_manga\">فتح إدخال عشوائي</string>\n    <string name=\"error_user_agent_string_invalid\">سلسلة وكيل المستخدم المبدئية غير صالحة</string>\n    <string name=\"information_no_entries_found\">لم يتم العثور على إدخالات في هذه الفئة</string>\n    <string name=\"label_stats\">إحصائيات</string>\n    <string name=\"label_started\">بدأت</string>\n    <string name=\"label_local\">محلي</string>\n    <string name=\"label_downloaded\">المنزَّل</string>\n    <string name=\"label_overview_section\">نظرة عامة</string>\n    <string name=\"label_completed_titles\">إدخالات مكتملة</string>\n    <string name=\"label_read_duration\">مدة القرائة</string>\n    <string name=\"label_titles_section\">إدخالات</string>\n    <string name=\"label_titles_in_global_update\">في التحديث العام</string>\n    <string name=\"label_total_chapters\">الكل</string>\n    <string name=\"label_read_chapters\">إقرا</string>\n    <string name=\"label_tracker_section\">متتبعين</string>\n    <string name=\"label_tracked_titles\">إدخالات متتبعة</string>\n    <string name=\"label_mean_score\">يعني النتيجة</string>\n    <string name=\"label_used\">مستعمل</string>\n    <string name=\"not_applicable\">غير متوفر</string>\n    <string name=\"day_short\">%d ي</string>\n    <string name=\"hour_short\">%d س</string>\n    <string name=\"minute_short\">%d د</string>\n    <string name=\"seconds_short\">%d ث</string>\n    <string name=\"information_no_manga_category\">الفئة فارغة</string>\n    <string name=\"action_not_now\">ليس الان</string>\n    <string name=\"pref_library_update_show_tab_badge\">إظهار عدد الادخالات غير المقروءة في ايقونة التحديثات</string>\n    <string name=\"pref_skip_dupe_chapters\">تجاوز الفصول المكررة</string>\n    <string name=\"enhanced_services_not_installed\">متوفر ولكن المصدر غير مثبت: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">لديك إدخال في مكتبتك بنفس الاسم.\n\\n\n\\nهل مازلت ترغب في الاستمرار؟</string>\n    <string name=\"copied_to_clipboard_plain\">نسخ الى الحافظة</string>\n    <string name=\"track_error\">%1$s خطأ: %2$s</string>\n    <string name=\"information_required_plain\">*مطلوب</string>\n    <string name=\"action_copy_to_clipboard\">نسخ إلى الحافظة</string>\n    <string name=\"pref_hide_in_library_items\">إخفاء الإدخالات الموجودة بالفعل في المكتبة</string>\n    <string name=\"action_update_category\">تحديث الفئة</string>\n    <string name=\"split_tall_images\">افصل الصور الطويلة</string>\n    <string name=\"overlay_header\">التراكب</string>\n    <string name=\"pref_page_rotate\">دوِّر الصفحات العريضة لتلائم الشاشة</string>\n    <string name=\"pref_page_rotate_invert\">اعكس اتِّجاه الصفحات العريضة المدوَّرة</string>\n    <string name=\"pref_debug_info\">معلومات التنقيح</string>\n    <string name=\"pref_double_tap_zoom\">انقر مرتين لتكبِّر</string>\n    <string name=\"pref_chapter_swipe_end\">إجراء التمرير الأيسر</string>\n    <string name=\"pref_chapter_swipe_start\">إجراء التمرير الأيمن</string>\n    <string name=\"action_set_interval\">عيِّد المدة</string>\n    <string name=\"action_filter_interval_custom\">مدة جلب مخصَّصة</string>\n    <string name=\"manga_display_interval_title\">قدِّر كلَّ</string>\n    <string name=\"pref_update_only_in_release_period\">ليس ضمن مدة الإصدار المتوقعة</string>\n    <string name=\"skipped_reason_not_in_release_period\">تُخُطِّيت بسبب عدم توقع صدور اليوم</string>\n    <string name=\"manga_display_modified_interval_title\">عيِّن التحديث كلَّ</string>\n    <string name=\"intervals_header\">المدة</string>\n    <string name=\"action_sort_next_updated\">التحديث المتوقع القادم</string>\n    <string name=\"track_delete_title\">أأزيل تتبع %s؟</string>\n    <string name=\"track_delete_text\">هذا يزيل التتبع محليًّا.</string>\n    <string name=\"action_ok\">حسنًا</string>\n    <string name=\"track_delete_remote_text\">وكذلك أزله من %s</string>\n    <string name=\"delete_downloaded\">احذف ما نُزِّل</string>\n    <string name=\"syncing_library\">تُزامن المكتبة</string>\n    <string name=\"library_sync_complete\">انتهت مزامنة المكتبة</string>\n    <string name=\"has_results\">وُجدت نتائج</string>\n    <string name=\"create_backup_file_error\">تعذَّر إنشاء ملفِّ نسخ احتياطيِّ</string>\n    <string name=\"track_activity_name\">ولوج المتتبِّع</string>\n    <string name=\"download_cache_invalidated\">أُفسد فهرس التنزيلات</string>\n    <string name=\"information_cloudflare_help\">اضغط هنا للمساعدة فى Cloudflare</string>\n    <string name=\"exception_offline\">لا اتصال بالإنترنت</string>\n    <string name=\"exception_http\">خطأ HTTP %d، انظر في WebView</string>\n    <string name=\"exception_unknown_host\">لا يمكن الوصول إلى %s</string>\n    <string name=\"unlock_app_title\">افتح %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">انقل السلسلة للقعر</string>\n    <string name=\"pref_relative_format\">التوقيت النسبي</string>\n    <string name=\"pref_relative_format_summary\">«%1$s» بدلًا عن «%2$s»</string>\n    <string name=\"notification_updating_progress\">تحديث المكتبة… (%s)</string>\n    <string name=\"source_settings\">إعدادات المصادر</string>\n    <string name=\"app_settings\">إعدادات التطبيق</string>\n    <string name=\"file_null_uri_error\">لا ملفات حُدِّدت</string>\n    <string name=\"label_data_storage\">البيانات والتخزين</string>\n    <string name=\"relative_time_span_never\">أبدًا</string>\n    <string name=\"pref_flash_page_summ\">يخفِّف الحرق في شاشات الحبر</string>\n    <string name=\"last_auto_backup_info\">آخر احتياط تلقائي: %s</string>\n    <string name=\"pref_flash_page\">أشرق الشاشة إذا تغيرت الصفحة</string>\n    <string name=\"pref_storage_usage\">التخزين</string>\n    <string name=\"action_sort_tracker_score\">نقاط المتتبع</string>\n    <string name=\"action_create\">أنشئ</string>\n    <string name=\"action_apply\">نفِّذ</string>\n    <string name=\"action_revert_to_default\">صفِّر</string>\n    <string name=\"no_scanlators_found\">لم يُعثَر على مترجمين</string>\n    <string name=\"scanlator\">المترجم</string>\n    <string name=\"exclude_scanlators\">احجب بعض المترجمين</string>\n    <string name=\"action_menu_overflow_description\">خيارات أكثر</string>\n    <string name=\"selected\">محدَّد</string>\n    <string name=\"not_selected\">غير مُحدَّد</string>\n    <string name=\"action_bar_up_description\">إصعد</string>\n    <string name=\"pref_storage_location\">مكان التخزين</string>\n    <string name=\"pref_storage_location_info\">يُستخدَم في الاحتياط وتنزيل الفصول والمصدر المحليِّ.</string>\n    <string name=\"onboarding_storage_action_select\">حدِّد مجلَّدًا</string>\n    <string name=\"pref_onboarding_guide\">دليل البدء</string>\n    <string name=\"onboarding_guides_new_user\">أحديث العهد بـ%s؟ طالع دليل البدء.</string>\n    <string name=\"onboarding_action_finish\">ابدأ</string>\n    <string name=\"onboarding_storage_selection_required\">لا بد من تحديد مجلَّد</string>\n    <string name=\"onboarding_heading\">أهلًا وسهلًا!</string>\n    <string name=\"onboarding_guides_returning_user\">أستخدمتَ %s قبلًا؟</string>\n    <string name=\"onboarding_action_skip\">تخطَّ</string>\n    <string name=\"onboarding_action_next\">التالي</string>\n    <string name=\"onboarding_description\">أول أمرنا أن نضبط بعض الأمور، ولك أن تغيرها في الإعدادات لاحقًا.</string>\n    <string name=\"no_location_set\">لم يُعيَّن موضع للتخزين</string>\n    <string name=\"onboarding_storage_info\">حدِّد مجلَّدًا يُخزِّن فيه %1$s الفصول المنزَّلة والاحتياطات وغيرها.\n\\n\n\\nوالأحسن أن يكون المجلَّد مخصوصًا لذلك.\n\\n\n\\nالمجلَّد المحدَّد: %2$s</string>\n    <string name=\"onboarding_permission_install_apps\">إذن تثبيت التطبيقات</string>\n    <string name=\"onboarding_permission_install_apps_description\">لتثبيت ملحقات المصدر.</string>\n    <string name=\"onboarding_permission_notifications\">إذن الإشعار</string>\n    <string name=\"onboarding_permission_notifications_description\">احصل على تنبيهات لتحديثات المكتبة والمزيد.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">استخدام البطارية في الخلفية</string>\n    <string name=\"onboarding_permission_action_grant\">منح</string>\n    <string name=\"ext_permission_install_apps_warning\">الأذونات مطلوبة لتثبيت الإضافات. انقر هنا لمنحها.</string>\n    <string name=\"ext_revoke_trust\">إبطال الإضافات غير الموثوق بها</string>\n    <string name=\"label_extension_repos\">مستودع الإضافات</string>\n    <string name=\"label_add_repo_input\">رابط المستودع</string>\n    <string name=\"action_add_repo_message\">إضافة مستودعات إضافية إلى ميهون. يجب أن يكون هذا الرابط ينتهي بـ \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">هذا المستودع موجود بالفعل!</string>\n    <string name=\"action_delete_repo\">حذف المستودع</string>\n    <string name=\"invalid_repo_name\">رابط المستودع غير صالح</string>\n    <string name=\"delete_repo_confirmation\">هل ترغب في حذف \\\"%s\\\" من المستودع؟</string>\n    <string name=\"action_open_repo\">مستودع مفتوح المصدر</string>\n    <string name=\"invalid_backup_file_error\">الخطأ الكامل:</string>\n    <string name=\"private_settings\">تضمين إعدادات حساسة (على سبيل المثال، رموز تسجيل دخول المتتبع)</string>\n    <string name=\"manga_interval_expected_update_soon\">قريباً</string>\n    <string name=\"manga_interval_custom_amount\">تكرار تحديث مخصص:</string>\n    <string name=\"onboarding_storage_help_info\">هل تقوم بالتحديث من إصدار أقدم ولست متأكداً مما تختاره؟ ارجع إلى دليل التخزين لمزيد من المعلومات.</string>\n    <string name=\"onboarding_storage_help_action\">دليل التخزين</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">تجنّب الانقطاعات في تحديثات المكتبة الطويلة الأمد والتنزيلات واستعادة النسخ الاحتياطية.</string>\n    <string name=\"pref_library_update_smart_update\">تحديث ذكي</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"information_empty_repos\">لم يتم تعيين أي مستودع .</string>\n    <string name=\"action_add_repo\">إضافة مستودع</string>\n    <string name=\"manga_interval_expected_update\">من المتوقع أن يتم إصدار فصول جديدة في حوالي 1%1$s، والتحقق من كل 2%2$s .</string>\n    <string name=\"available_disk_space_info\">متاح: %1$s / الكل: %2$s</string>\n    <string name=\"upcoming_calendar_prev\">الشهر السابق</string>\n    <string name=\"upcoming_guide\">الدليل القادم</string>\n    <string name=\"upcoming_calendar_next\">الشهر القادم</string>\n    <string name=\"label_upcoming\">القادم</string>\n    <string name=\"action_view_upcoming\">عرض الثحديثات القادمة</string>\n    <string name=\"action_add_anyway\">أضف على أي حال</string>\n    <string name=\"action_replace_repo\">استبدل</string>\n    <string name=\"action_replace_repo_title\">بصمة مفتاح التوقيع موجودة بالفعل</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">تعطيل التصغير</string>\n    <string name=\"manga_interval_expected_update_null\">المانجا اما منتهية او لا يوجد تاريخ اصدار متوقع.</string>\n    <string name=\"pref_flash_style_white_black\">أبيض وأسود</string>\n    <string name=\"file_picker_uri_permission_unsupported\">فشل في الحصول على الوصول المستمر إلى المجلد. قد يتصرف التطبيق بشكل غير متوقع.</string>\n    <string name=\"pref_flash_duration_summary\">%1$s مث</string>\n    <string name=\"pref_flash_duration\">مدة الوميض</string>\n    <string name=\"pref_flash_page_interval\">يومض كل(مدة)</string>\n    <string name=\"pref_flash_style_black\">أسود</string>\n    <string name=\"pref_flash_style_white\">أبيض</string>\n    <string name=\"pref_flash_with\">يومض مع</string>\n    <string name=\"action_replace_repo_message\">يحتوي المستودع %1$s على نفس بصمة مفتاح التوقيع الموجودة في %2$s.\n\\nإذا كان هذا متوقعًا، فسيتم استبدال %2$s، وإلا فاتصل بمشرف الرابطالخاص بك.</string>\n    <string name=\"action_migrate_duplicate\">نقل مَدْخَل موجود</string>\n    <string name=\"pref_display_profile\">ملف تعريف عرض خاص</string>\n    <string name=\"action_copy_link\">نسخ الرابط</string>\n    <string name=\"extensionRepo_settings\">مستودع الإضافات</string>\n    <string name=\"invalid_backup_file_unknown\">ملف النسخة الإحتياطية معطل أو لا يعمل</string>\n    <string name=\"invalid_backup_file_json\">لا يتم دعم النسخ الاحتياطي لـ JSON</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/as/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">এক্সটেনচন আপডেট উপলব্ধ</item>\n        <item quantity=\"other\">%d এক্সটেনচন আপডেটসমূহ উপলব্ধ</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d ৰেপো</item>\n        <item quantity=\"other\">%d ৰেপোসমূহ</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s মিনিট পিছত</item>\n        <item quantity=\"other\">%1$s মিনিটৰ পিছত</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">কালি</item>\n        <item quantity=\"other\">%1$d দিনৰ আগতে</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">কাইলৈ</item>\n        <item quantity=\"other\">%1$d দিনত</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d শিতান</item>\n        <item quantity=\"other\">%d শিতানসমূহ</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">পৰৱৰ্তী অপঠিত অধ্যায়</item>\n        <item quantity=\"other\">পৰৱৰ্তী %d অপঠিত অধ্যায়সমূহ</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$sত %2$s ত্ৰুটি সৈতে সমাপ্ত</item>\n        <item quantity=\"other\">%1$sত %2$s ত্ৰুটিৰ সৈতে সমাপ্ত</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s বাকী আছে</item>\n        <item quantity=\"other\">%1$s বাকী আছে</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">১ দিন</item>\n        <item quantity=\"other\">%d দিন</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">১ পৃষ্ঠা</item>\n        <item quantity=\"other\">%1$s পৃষ্ঠাসমূহ</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">অপস্থিত %1$s অধ্যায়</item>\n        <item quantity=\"other\">অপস্থিত %1$s অধ্যায়সমূহ</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s অধ্যায়</item>\n        <item quantity=\"other\">%1$s অধ্যায়সমূহ</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">পৰৱৰ্তী অধ্যায়</item>\n        <item quantity=\"other\">পৰৱৰ্তী %d অধ্যায়সমূহ</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d ট্ৰেকাৰ</item>\n        <item quantity=\"other\">%d ট্ৰেকাৰসমূহ</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d অধ্যায় স্কিপ কৰা হৈছে, উৎসত নাইবা ফিল্টাৰ কৰি আঁতৰোৱা হৈছে</item>\n        <item quantity=\"other\">%d অধ্যায়সমূহ স্কিপ কৰা হৈছে, উৎসত নাইবা ফিল্টাৰ কৰি আঁতৰোৱা হৈছে</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d প্ৰৱিষ্টিৰ বাবে</item>\n        <item quantity=\"other\">%d প্ৰৱিষ্টিসমূহৰ বাবে</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d নতুন অধ্যায়</item>\n        <item quantity=\"other\">%1$d নতুন অধ্যায়সমূহ</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">অধ্যায়সমূহ %1$s আৰু 1 অধিক</item>\n        <item quantity=\"other\">অধ্যায়সমূহ %1$s আৰু %2$d অধিক</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/as/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"on\">চালু</string>\n    <string name=\"off\">বন্ধ</string>\n    <string name=\"label_library\">পুথিভঁৰাল</string>\n    <string name=\"label_recent_updates\">আপডেটসমূহ</string>\n    <string name=\"label_upcoming\">আসন্ন</string>\n    <string name=\"label_started\">আৰম্ভ হৈছে</string>\n    <string name=\"label_local\">স্থানীয়</string>\n    <string name=\"label_downloaded\">ডাউনলোড কৰা</string>\n    <string name=\"unlock_app_title\">%s আনলক কৰক</string>\n    <string name=\"action_webview_forward\">সামনে</string>\n    <string name=\"action_webview_refresh\">পুনৰপ্ৰাপ্তি কৰক</string>\n    <string name=\"action_migrate_duplicate\">বিদ্যমান প্ৰৱিষ্টি স্থানান্তৰ কৰক</string>\n    <string name=\"onboarding_action_next\">পৰৱৰ্তী</string>\n    <string name=\"pref_category_general\">সাধাৰণ</string>\n    <string name=\"pref_category_appearance\">দেখাত</string>\n    <string name=\"pref_category_tracking\">ট্ৰেকিং</string>\n    <string name=\"pref_category_advanced\">উন্নত</string>\n    <string name=\"pref_category_about\">বিষয়ে</string>\n    <string name=\"lock_with_biometrics\">আনলকৰ প্ৰয়োজন</string>\n    <string name=\"lock_when_idle\">নিশ্ক্ৰিয় হৈ থাকিলে লক কৰক</string>\n    <string name=\"portrait\">উল্লম্ব</string>\n    <string name=\"landscape\">অনুভূমিক</string>\n    <string name=\"pref_category_library_update\">সৰ্বসাধাৰণ সন্মিলনী</string>\n    <string name=\"pref_library_update_restriction\">স্বয়ংক্ৰিয় আপডেটৰ যন্ত্ৰৰ সীমাবদ্ধতা</string>\n    <string name=\"connected_to_wifi\">কেৱল Wi-Fi ত</string>\n    <string name=\"network_not_metered\">কেৱল অবিমিত নেটৱৰ্কত</string>\n    <string name=\"charging\">চাৰ্জিং সময়ত</string>\n    <string name=\"pref_library_update_smart_update\">স্মাৰ্ট আপডেট</string>\n    <string name=\"pref_update_only_completely_read\">অপঠিত অধ্যায়ৰ পৰা আঁতৰাওক</string>\n    <string name=\"pref_update_only_non_completed\">সম্পূৰ্ণ অৱস্থাৰ পৰা আঁতৰাওক</string>\n    <string name=\"default_category\">ডিফল্ট শ্ৰেণী</string>\n    <string name=\"all\">সকলো</string>\n    <string name=\"ext_obsolete\">অচল</string>\n    <string name=\"ext_info_age_rating\">বয়সৰ মূল্যাংকন</string>\n    <string name=\"ext_installer_pref\">ইন্সটলাৰ</string>\n    <string name=\"ext_installer_legacy\">পুৰণি</string>\n    <string name=\"error_repo_exists\">এই ৰেপো ইতিমধ্যে আছে!</string>\n    <string name=\"action_open_repo\">উৎস ৰেপো খোলক</string>\n    <string name=\"action_replace_repo\">প্ৰতিস্থাপন কৰক</string>\n    <string name=\"pref_show_navigation_mode_summary\">পঢ়ুৱৈ খোলাৰ সময়ত ক্ষণেকৰ বাবে দেখুৱাওক</string>\n    <string name=\"pref_grayscale\">ধূসর ৰং</string>\n    <string name=\"pref_inverted_colors\">উলটাই দিয়া ৰং</string>\n    <string name=\"filter_mode_overlay\">আৱৰণ</string>\n    <string name=\"white_background\">বগা</string>\n    <string name=\"edge_nav\">কোন</string>\n    <string name=\"nav_zone_left\">বাঁও</string>\n    <string name=\"pref_category_reading\">পঢ়া</string>\n    <string name=\"pref_webtoon_side_padding\">পৰ্দা পৰিসৰ</string>\n    <string name=\"pref_hide_threshold\">স্ক্ৰ\\'ল কৰিলে মেনু লুকুৱাবৰ সংবেদনশীলতা</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">জুম আউট বন্ধ কৰক</string>\n    <string name=\"fourth_to_last\">চতুৰ্থ শেহতীয়া পঢ়া অধ্যায়</string>\n    <string name=\"pref_download_new_categories_details\">বহিঃস্তৰিত শ্ৰেণীবিভাগত থকা প্ৰৱিষ্টসমূহ ডাউনলোড নহ\\'ব, যদিও সেয়া অন্তৰ্ভুক্ত শ্ৰেণীবিভাগত থাকে।</string>\n    <string name=\"download_ahead\">আগৰ অধ্যায় ডাউনলোড কৰক</string>\n    <string name=\"pref_restore_backup_summ\">বেকআপ ফাইলৰ পৰা গ্ৰন্থাগাৰ পুনৰুদ্ধাৰ কৰক</string>\n    <string name=\"action_create\">সৃষ্টি কৰক</string>\n    <string name=\"invalid_backup_file_missing_manga\">বেকআপত কোনো গ্ৰন্থাগাৰ প্ৰৱিষ্ট নাই।</string>\n    <string name=\"restore_completed\">পুনৰুদ্ধাৰ সম্পূৰ্ণ</string>\n    <string name=\"restore_duration\">%1$02d মিনিট, %2$02d ছেকেণ্ড</string>\n    <string name=\"missing_storage_permission\">সংৰক্ষণ অনুমতি প্ৰদান কৰা হোৱা নাই</string>\n    <string name=\"in_library\">লাইব্ৰেৰীত</string>\n    <string name=\"manga_added_library\">লাইব্ৰেৰীলৈ যোগ কৰা হৈছে</string>\n    <string name=\"track_remove_finish_date_conf_text\">%s পৰা আপোনাৰ আগৰ নিৰ্বাচিত শেষৰ তাৰিখ মচি দিব</string>\n    <string name=\"snack_categories_deleted\">শ্রেণীবোৰ মচি দিয়া হৈছে</string>\n    <string name=\"dialog_with_checkbox_reset\">এই প্ৰৱিষ্টৰ বাবে সকলো অধ্যায়ৰ পুনৰ চেক কৰক</string>\n    <string name=\"update_check_open\">GitHub ত খোলক</string>\n    <string name=\"information_no_downloads\">কোনো ডাউনলোড নাই</string>\n    <string name=\"channel_errors\">ত্ৰুটিসমূহ</string>\n    <string name=\"channel_new_chapters\">অধ্যায় আপডেট</string>\n    <string name=\"exception_http\">HTTP %d, WebView ত ৱেবছাইট পৰীক্ষা কৰক</string>\n    <string name=\"selected\">বাচনি কৰা</string>\n    <string name=\"not_selected\">বাচনি নকৰা</string>\n    <string name=\"action_menu_overflow_description\">অধিক বিকল্প</string>\n    <string name=\"action_bar_up_description\">উৰ্ধে নেভিগেট কৰক</string>\n    <string name=\"name\">নাম</string>\n    <string name=\"categories\">শ্ৰেণীবিভাগসমূহ</string>\n    <string name=\"manga\">পুথিভঁৰালৰ উপাদানসমূহ</string>\n    <string name=\"chapters\">অধ্যায়সমূহ</string>\n    <string name=\"track\">ট্ৰেকিং</string>\n    <string name=\"delete_downloaded\">ডাউনলোড কৰা মচক</string>\n    <string name=\"history\">ইতিহাস</string>\n    <string name=\"scanlator\">স্কেনলেটৰ</string>\n    <string name=\"label_more\">অধিক</string>\n    <string name=\"label_settings\">ছেটিংছ</string>\n    <string name=\"label_download_queue\">ডাউনলোড ক্ৰমানুসাৰী</string>\n    <string name=\"label_recent_manga\">ইতিহাস</string>\n    <string name=\"label_sources\">উৎসসমূহ</string>\n    <string name=\"label_backup\">ব্যাকআপ আৰু পুনৰুদ্ধাৰ</string>\n    <string name=\"label_data_storage\">ডাটা আৰু সংৰক্ষণ</string>\n    <string name=\"label_stats\">পৰিসংখ্যা</string>\n    <string name=\"label_migration\">স্থানান্তৰ</string>\n    <string name=\"label_extensions\">এক্সটেনশ্বনসমূহ</string>\n    <string name=\"label_extension_info\">এক্সটেনশ্বন তথ্য</string>\n    <string name=\"label_help\">সহায়</string>\n    <string name=\"label_warning\">সতৰ্কবাণী</string>\n    <string name=\"confirm_lock_change\">পৰিবৰ্তন নিশ্চিত কৰিবলৈ প্ৰমাণীকৰণ কৰক</string>\n    <string name=\"label_default\">পূৰ্বনির্ধাৰিত</string>\n    <string name=\"action_settings\">সেটিংচ</string>\n    <string name=\"action_menu\">মেনু</string>\n    <string name=\"action_filter\">ফিল্টাৰ</string>\n    <string name=\"action_set_interval\">সময় অন্তৰ্বাল স্থাপন কৰক</string>\n    <string name=\"action_filter_bookmarked\">বুকমাৰ্ক কৰা</string>\n    <string name=\"action_filter_tracked\">ট্ৰেক কৰা</string>\n    <string name=\"action_filter_unread\">অপঢ়া</string>\n    <string name=\"action_filter_interval_custom\">অনুকূলিত আপডেট মাৰ্জিন</string>\n    <string name=\"action_filter_empty\">ফিল্টাৰ আঁতৰাওক</string>\n    <string name=\"action_sort_alpha\">বৰ্ণানুক্ৰমিকভাৱে</string>\n    <string name=\"action_sort_count\">মুঠ প্ৰৱিষ্টি</string>\n    <string name=\"action_sort_total\">মুঠ অধ্যায়</string>\n    <string name=\"action_sort_last_read\">শেষ পঢ়া</string>\n    <string name=\"action_sort_last_manga_update\">শেষ আপডেট পৰীক্ষা</string>\n    <string name=\"action_sort_unread_count\">অপঢ়া সংখ্যাৰ ভিত্তিত</string>\n    <string name=\"action_sort_next_updated\">পৰৱৰ্তী আপডেট আশা কৰা হৈছে</string>\n    <string name=\"action_sort_latest_chapter\">শেষ অধ্যায়</string>\n    <string name=\"action_sort_chapter_fetch_date\">অধ্যায় আহৰণ তাৰিখ</string>\n    <string name=\"action_sort_date_added\">যোগ কৰা তাৰিখ</string>\n    <string name=\"action_search\">সন্ধান কৰক</string>\n    <string name=\"action_sort_tracker_score\">ট্ৰেকাৰ স্ক\\'ৰ</string>\n    <string name=\"action_search_hint\">সন্ধান কৰক…</string>\n    <string name=\"action_search_settings\">সন্ধান সেটিংচ</string>\n    <string name=\"action_global_search\">সৰ্বভৌম সন্ধান</string>\n    <string name=\"action_select_all\">সকলো বাছক</string>\n    <string name=\"action_select_inverse\">বিপৰীত বাছক</string>\n    <string name=\"action_mark_as_read\">পঢ়া বুলি চিহ্নিত কৰক</string>\n    <string name=\"action_mark_as_unread\">অপঢ়া বুলি চিহ্নিত কৰক</string>\n    <string name=\"action_mark_previous_as_read\">পূৰ্বৰটো পঢ়া বুলি চিহ্নিত কৰক</string>\n    <string name=\"action_download\">ডাউনলোড কৰক</string>\n    <string name=\"action_bookmark\">অধ্যায় বুকমাৰ্ক কৰক</string>\n    <string name=\"action_remove_bookmark\">অধ্যায়ৰ বুকমাৰ্ক আঁতৰাওক</string>\n    <string name=\"action_delete\">মচক</string>\n    <string name=\"action_update_library\">পুথিভঁৰাল আপডেট কৰক</string>\n    <string name=\"action_enable_all\">সকলো সক্ৰিয় কৰক</string>\n    <string name=\"action_disable_all\">সকলো নিষ্ক্ৰিয় কৰক</string>\n    <string name=\"action_edit\">সম্পাদনা কৰক</string>\n    <string name=\"action_add\">যোগ কৰক</string>\n    <string name=\"action_update_category\">শ্ৰেণী আপডেট কৰক</string>\n    <string name=\"action_open_random_manga\">এটা যিকোনো প্ৰৱিষ্টি খুলক</string>\n    <string name=\"action_add_category\">শ্ৰেণী যোগ কৰক</string>\n    <string name=\"action_edit_categories\">শ্ৰেণীবোৰ সম্পাদনা কৰক</string>\n    <string name=\"action_rename_category\">শ্ৰেণীৰ নাম সলনি কৰক</string>\n    <string name=\"action_move_category\">শ্ৰেণীবোৰ স্থাপন কৰক</string>\n    <string name=\"delete_category_confirmation\">আপুনি কি %s শ্ৰেণী মচিব বিচাৰে?</string>\n    <string name=\"delete_category\">শ্ৰেণী মচক</string>\n    <string name=\"action_edit_cover\">মুৰৰ পৃষ্ঠাটী সম্পাদনা কৰক</string>\n    <string name=\"action_view_chapters\">অধ্যায়বোৰ চাওক</string>\n    <string name=\"action_pause\">থামক</string>\n    <string name=\"action_previous_chapter\">পূৰ্বৰ অধ্যায়</string>\n    <string name=\"action_next_chapter\">পৰবৰ্তী অধ্যায়</string>\n    <string name=\"action_retry\">আনুষ্ঠানিক প্ৰয়াস কৰক</string>\n    <string name=\"action_remove\">আঁতৰাওক</string>\n    <string name=\"action_copy_to_clipboard\">ক্লিপবোর্ডত কপি কৰক</string>\n    <string name=\"action_remove_everything\">সকলো আঁতৰাওক</string>\n    <string name=\"action_start\">আৰম্ভ কৰক</string>\n    <string name=\"action_resume\">পুনৰ আৰম্ভ কৰক</string>\n    <string name=\"action_copy_link\">লিংক কপি কৰক</string>\n    <string name=\"action_open_in_browser\">ব্ৰাউজাৰত খোলক</string>\n    <string name=\"action_show_manga\">প্ৰৱিষ্টি দেখুৱাওক</string>\n    <string name=\"action_open_in_web_view\">WebViewত খোলক</string>\n    <string name=\"action_migrate\">স্থানান্তৰ কৰক</string>\n    <string name=\"action_display_mode\">প্ৰদৰ্শন মোড</string>\n    <string name=\"action_display\">প্ৰদৰ্শন</string>\n    <string name=\"action_display_grid\">সঙ্কলিত গ্ৰিড</string>\n    <string name=\"action_display_comfortable_grid\">সুবিধাজনক গ্ৰিড</string>\n    <string name=\"action_display_list\">তালিকা</string>\n    <string name=\"action_display_cover_only_grid\">ক\\'ভাৰ-মাত্ৰ গ্ৰিড</string>\n    <string name=\"action_display_download_badge\">ডাউনলোড কৰা অধ্যায়</string>\n    <string name=\"action_display_local_badge\">স্থানীয় উৎস</string>\n    <string name=\"action_display_language_badge\">ভাষা</string>\n    <string name=\"action_display_show_tabs\">শ্ৰেণীৰ ট্যাব দেখুৱাওক</string>\n    <string name=\"action_display_show_number_of_items\">পদাৰ্থৰ সংখ্যা দেখুৱাওক</string>\n    <string name=\"action_display_show_continue_reading_button\">পঢ়া অব্যাহত থকাক বোতাম</string>\n    <string name=\"action_disable\">নিষ্ক্ৰিয় কৰক</string>\n    <string name=\"action_pin\">পিন কৰক</string>\n    <string name=\"action_unpin\">আনপিন কৰক</string>\n    <string name=\"action_apply\">প্ৰয়োগ কৰক</string>\n    <string name=\"action_cancel\">বাতিল কৰক</string>\n    <string name=\"action_ok\">ঠিক আছে</string>\n    <string name=\"action_cancel_all\">সকলো বাতিল কৰক</string>\n    <string name=\"cancel_all_for_series\">এই চিৰিজৰ বাবে সকলো বাতিল কৰক</string>\n    <string name=\"action_sort\">বাছনি কৰক</string>\n    <string name=\"action_order_by_upload_date\">আপলোডৰ তাৰিখ অনুসাৰে</string>\n    <string name=\"action_order_by_chapter_number\">অধ্যায়ৰ নম্বৰ অনুসাৰে</string>\n    <string name=\"action_newest\">সৰ্বনৱীন</string>\n    <string name=\"action_oldest\">সৰ্বপুৰণি</string>\n    <string name=\"action_asc\">উৰ্ধ্বমুখী</string>\n    <string name=\"action_desc\">অধোগামী</string>\n    <string name=\"action_move_to_top\">শীৰ্ষলৈ লৈ যাওক</string>\n    <string name=\"action_move_to_top_all_for_series\">চিৰিজটো শীৰ্ষলৈ লৈ যাওক</string>\n    <string name=\"action_move_to_bottom\">নিম্নলৈ লৈ যাওক</string>\n    <string name=\"action_move_to_bottom_all_for_series\">চিৰিজটো নিম্নলৈ লৈ যাওক</string>\n    <string name=\"action_install\">ইন্সটল কৰক</string>\n    <string name=\"action_share\">শ্বেয়াৰ কৰক</string>\n    <string name=\"action_save\">সংৰক্ষণ কৰক</string>\n    <string name=\"action_reset\">ৰিচছেট কৰক</string>\n    <string name=\"action_revert_to_default\">ডিফল্টলৈ উভতাওক</string>\n    <string name=\"action_undo\">পিছলৈ যাওক</string>\n    <string name=\"action_close\">বন্ধ কৰক</string>\n    <string name=\"action_open_log\">লগ খোলক</string>\n    <string name=\"action_show_errors\">বিস্তারিত চাবলৈ টিপক</string>\n    <string name=\"action_restore\">পুনৰুদ্ধাৰ কৰক</string>\n    <string name=\"action_webview_back\">পিছলৈ</string>\n    <string name=\"action_start_downloading_now\">অতৈৰাই ডাউনলোড আৰম্ভ কৰক</string>\n    <string name=\"action_not_now\">এতিয়া নহয়</string>\n    <string name=\"action_add_anyway\">যিকোনো ক্ষেত্ৰত যোগ কৰক</string>\n    <string name=\"loading\">লোডিং…</string>\n    <string name=\"internal_error\">আন্তৰিক সমস্যাঃ অধিক তথ্যৰ বাবে ক্ৰেশ লগচ চাওক</string>\n    <string name=\"app_not_available\">এপ উপলব্ধ নাই</string>\n    <string name=\"pref_onboarding_guide\">অ\\'নব’ৰ্ডিং গাইড</string>\n    <string name=\"onboarding_heading\">স্বাগতম!</string>\n    <string name=\"onboarding_description\">প্ৰথমে কিছুমান বস্তু ঠিক কৰি লওঁ আহক। এইবোৰ আপুনি পাছত ছেটিংছত গ’ই সলনি কৰিব পাৰে।</string>\n    <string name=\"onboarding_action_finish\">আৰম্ভ কৰক</string>\n    <string name=\"onboarding_action_skip\">স্কিপ কৰক</string>\n    <string name=\"onboarding_storage_info\">%1$s-এ অধ্যায় ডাউনলোড, বেকআপ আৰু আন বহু বস্তু সংৰক্ষণ কৰিব পৰাকৈ এখন ফ’ল্ডাৰ বাচি লওঁক।\n\\n\n\\nএখন সজোৱা ফ’ল্ডাৰ বাচনি কৰা সুচিত।\n\\n\n\\nবাচনি কৰা ফ’ল্ডাৰ: %2$s</string>\n    <string name=\"onboarding_storage_action_select\">এখন ফ’ল্ডাৰ বাচনি কৰক</string>\n    <string name=\"onboarding_storage_selection_required\">এখন ফ’ল্ডাৰ বাচনি কৰিবই লাগিব</string>\n    <string name=\"onboarding_storage_help_info\">আগৰ সংস্কৰণৰ পৰা আপডেট কৰি আছেনে আৰু কি বাচি ল’ব নাজানে? অধিক তথ্যৰ বাবে সঞ্চয় গাইডটো চাওক।</string>\n    <string name=\"onboarding_storage_help_action\">সঞ্চয় গাইড</string>\n    <string name=\"onboarding_permission_install_apps\">এপ স্থাপন অনুমতি</string>\n    <string name=\"onboarding_permission_install_apps_description\">উৎস এক্সটেনচনসমূহ স্থাপন কৰিবলৈ।</string>\n    <string name=\"onboarding_permission_notifications\">নটিফিকেচনৰ অনুমতি</string>\n    <string name=\"onboarding_permission_notifications_description\">লাইব্ৰেৰীৰ আপডেট আৰু আন বহু বস্তুৰ বাবে সতৰ্কতা পাব।</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">পটভূমি বেটাৰী ব্যৱহাৰ</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">দীৰ্ঘম্যাদী লাইব্ৰেৰী আপডেট, ডাউনলোড আৰু বেকআপ পুনৰ স্থাপনৰ অন্তৰায় নোহোৱাৰ বাবে।</string>\n    <string name=\"onboarding_permission_action_grant\">অনুমতি দিয়ক</string>\n    <string name=\"onboarding_guides_new_user\">%s-ৰ নতুন ব্যৱহাৰকাৰী নেকি? আৰম্ভণি গাইড চাবলৈ আমাক সুপারিশ কৰা হৈছে।</string>\n    <string name=\"onboarding_guides_returning_user\">%s পুনৰ ইনষ্টল কৰি আছেনে?</string>\n    <string name=\"pref_category_reader\">পাঠক</string>\n    <string name=\"pref_category_downloads\">ডাউনলোড</string>\n    <string name=\"pref_appearance_summary\">থীম, তাৰিখ আৰু সময়ৰ ফৰ্মেট</string>\n    <string name=\"pref_category_library\">লাইব্ৰেৰী</string>\n    <string name=\"pref_library_summary\">শ্ৰেণীবিভাজন, গ্ল\\'বেল আপডেট, অধ্যায়ৰ সোয়াইপ</string>\n    <string name=\"pref_reader_summary\">পঢ়া ম\\'ড, প্ৰদৰ্শন, নেভিগেচন</string>\n    <string name=\"pref_tracking_summary\">একে-পথৰ প্ৰগতি ছিঙ্ক, উন্নত ছিঙ্ক</string>\n    <string name=\"pref_downloads_summary\">স্বয়ংক্ৰিয় ডাউনলোড, আগতীয়া ডাউনলোড</string>\n    <string name=\"pref_browse_summary\">উৎসসমূহ, এক্সটেনচন, গ্ল\\'বেল অনুসন্ধান</string>\n    <string name=\"pref_advanced_summary\">ক্ৰেশ লগসমূহ ডাম্প কৰক, বেটাৰী অপ্টিমাইজেশ্বন</string>\n    <string name=\"pref_backup_summary\">ম্যানুৱেল আৰু স্বয়ংক্ৰিয় বেকআপ, সঞ্চয় স্থান</string>\n    <string name=\"pref_security_summary\">এপ লক, সুৰক্ষিত পৰ্দা</string>\n    <string name=\"pref_category_theme\">থীম</string>\n    <string name=\"pref_app_theme\">এপ থীম</string>\n    <string name=\"theme_system\">পদ্ধতি</string>\n    <string name=\"theme_light\">হালধীয়া</string>\n    <string name=\"theme_dark\">গাঢ়</string>\n    <string name=\"theme_monet\">ডাইনামিক</string>\n    <string name=\"theme_greenapple\">সেউজ আপেল</string>\n    <string name=\"theme_lavender\">লাভেণ্ডাৰ</string>\n    <string name=\"theme_midnightdusk\">মধ্যৰাতি দুঃখ</string>\n    <string name=\"theme_nord\">ন\\'ৰ্ড</string>\n    <string name=\"theme_strawberrydaiquiri\">ষ্ট্ৰ’বেৰী ডাইকুৱাৰী</string>\n    <string name=\"theme_tako\">তাকো</string>\n    <string name=\"theme_tealturquoise\">টীল আৰু টাৰকুৱইজ</string>\n    <string name=\"theme_yinyang\">ইন আৰু ইয়াং</string>\n    <string name=\"theme_yotsuba\">ইয়তছুবা</string>\n    <string name=\"theme_tidalwave\">টাইডেল ৱেভ</string>\n    <string name=\"pref_dark_theme_pure_black\">বিশুদ্ধ ক\\'লা গাঢ় ম’ড</string>\n    <string name=\"pref_relative_format\">আপেক্ষিক টাইমষ্টেম্প</string>\n    <string name=\"pref_relative_format_summary\">%1$sৰ সলনি %2$s</string>\n    <string name=\"pref_date_format\">তাৰিখৰ ফৰ্মেট</string>\n    <string name=\"pref_manage_notifications\">নটিফিকেচনসমূহ পৰিচালনা কৰক</string>\n    <string name=\"pref_app_language\">এপৰ ভাষা</string>\n    <string name=\"pref_category_security\">নিরাপত্তা আৰু গোপনীয়তা</string>\n    <string name=\"lock_always\">সদায়</string>\n    <string name=\"lock_never\">কেতিয়াও নহয়</string>\n    <string name=\"hide_notification_content\">নটিফিকেশনৰ সামগ্ৰী লুকুৱাওক</string>\n    <string name=\"secure_screen\">সুৰক্ষিত পৰ্দা</string>\n    <string name=\"secure_screen_summary\">সুৰক্ষিত পৰ্দাই এপৰ সামগ্ৰীসমূহক এপ সলনি কৰাৰ সময়ত লুকুৱায় আৰু স্ক্ৰীনশ্বট ব্লক কৰে</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (১৮+) উৎসসমূহ</string>\n    <string name=\"pref_show_nsfw_source\">উৎস আৰু এক্সটেনচনৰ তালিকাত দেখুৱাওক</string>\n    <string name=\"parental_controls_info\">এইটো আনুষ্ঠানিকভাৱে অনুমোদিত নহয় বা ভুলকৈ চিহ্নিত কৰা এক্সটেনচনে NSFW (১৮+) বিষয়বস্তু দেখুৱাব পাৰে।</string>\n    <string name=\"relative_time_today\">আজি</string>\n    <string name=\"pref_category_display\">প্ৰদৰ্শন</string>\n    <string name=\"pref_library_columns\">শাৰীপ্ৰতি বস্তুসমূহ</string>\n    <string name=\"pref_library_update_interval\">স্বয়ংক্ৰিয় আপডেট</string>\n    <string name=\"update_never\">বন্ধ</string>\n    <string name=\"update_12hour\">প্ৰতি ১২ ঘণ্টা</string>\n    <string name=\"update_6hour\">প্ৰতি ৬ ঘণ্টা</string>\n    <string name=\"update_24hour\">প্ৰতি দিন</string>\n    <string name=\"update_48hour\">প্ৰতি ২ দিন</string>\n    <string name=\"update_72hour\">প্ৰতি ৩ দিন</string>\n    <string name=\"update_weekly\">প্ৰতি সপ্তাহ</string>\n    <string name=\"restrictions\">সীমাবদ্ধতা: %s</string>\n    <string name=\"pref_update_only_started\">অ আৰম্ভিত প্ৰৱিষ্টিসমূহ আঁতৰাওক</string>\n    <string name=\"pref_update_only_in_release_period\">পৰৱৰ্তী মুক্তিৰ সময় অনুমান কৰক</string>\n    <string name=\"pref_library_update_show_tab_badge\">আপডেট আইকনৰ ওপৰত অপঠিত গণনা দেখুৱাওক</string>\n    <string name=\"pref_library_update_refresh_metadata\">স্বয়ংক্ৰিয়ভাৱে মেটাডাটা ৰিফ্ৰেশ কৰক</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">লাইব্ৰেৰী আপডেট কৰাৰ সময়ত নতুন কাভাৰ আৰু বিৱৰণৰ সন্ধান কৰক</string>\n    <string name=\"default_category_summary\">সদায় সোধা হব</string>\n    <string name=\"categorized_display_settings\">শ্ৰেণী অনুসৰি ছাঁটকৰণৰ বাবে বিৱৰণী ছেটিংছ</string>\n    <string name=\"pref_library_update_categories_details\">অন্তৰ্ভুক্ত শ্ৰেণীত থাকিলেও বাদ দিয়া শ্ৰেণীসমূহৰ প্ৰৱিষ্টিসমূহ আপডেট নহ’ব।</string>\n    <string name=\"none\">কোনোও নহয়</string>\n    <string name=\"include\">অন্তৰ্ভুক্ত: %s</string>\n    <string name=\"exclude\">বাদ দিয়া: %s</string>\n    <string name=\"pref_chapter_swipe_end\">সোঁফালে চুইপ কৰা কাৰ্য</string>\n    <string name=\"pref_chapter_swipe_start\">বাওঁফালে চুইপ কৰা কাৰ্য</string>\n    <string name=\"multi_lang\">বহুভাষী</string>\n    <string name=\"ext_updates_pending\">আপডেট মুলতুবি আছে</string>\n    <string name=\"ext_update\">আপডেট কৰক</string>\n    <string name=\"ext_install\">ইন্সটল কৰক</string>\n    <string name=\"ext_update_all\">সকলো আপডেট কৰক</string>\n    <string name=\"ext_pending\">মুলতুবি</string>\n    <string name=\"ext_downloading\">ডাউনলোড কৰি আছে</string>\n    <string name=\"ext_installing\">ইন্সটল কৰি আছে</string>\n    <string name=\"ext_installed\">ইন্সটল কৰা হৈছে</string>\n    <string name=\"ext_trust\">বিশ্বাস কৰক</string>\n    <string name=\"ext_untrusted\">অবিশ্বাস্য</string>\n    <string name=\"ext_uninstall\">আনইন্সটল কৰক</string>\n    <string name=\"ext_app_info\">এপৰ তথ্য</string>\n    <string name=\"untrusted_extension\">অবিশ্বাস্য এক্সটেনশন</string>\n    <string name=\"obsolete_extension_message\">এই এক্সটেনচন এতিয়া উপলব্ধ নাই। ই হয়তো সঠিকভাৱে কাম নকৰে আৰু এপৰ লগত সমস্যা সৃষ্টি কৰিব পাৰে। ই আনইন্সটল কৰাৰ পৰামৰ্শ দিয়া হৈছে।</string>\n    <string name=\"extension_api_error\">উপলব্ধ এক্সটেনচনসমূহ পোৱা বিফল</string>\n    <string name=\"untrusted_extension_message\">দুৰভিসন্ধি এক্সটেনচনে সংৰক্ষিত যিকোনো লগইন প্ৰমাণপত্ৰ পঢ়িব পাৰে বা যিকোনো কোড চলাব পাৰে।\n\\n\n\\nএই এক্সটেনশন বিশ্বাস কৰিলে, আপুনি এই বিপদসমূহ স্বীকাৰ কৰিছে।</string>\n    <string name=\"ext_info_version\">সংস্কৰণ</string>\n    <string name=\"ext_nsfw_warning\">এই এক্সটেনচনৰ উৎসসমূহত NSFW (১৮+) বিষয়বস্তু থাকিব পাৰে</string>\n    <string name=\"ext_info_language\">ভাষা</string>\n    <string name=\"ext_nsfw_short\">১৮+</string>\n    <string name=\"ext_permission_install_apps_warning\">এক্সটেনচন ইন্সটল কৰিবলৈ অনুমতিৰ প্ৰয়োজন। ইয়াত টিপক।</string>\n    <string name=\"ext_install_service_notif\">এক্সটেনচন ইন্সটল কৰি আছে…</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku চলি নাই</string>\n    <string name=\"ext_revoke_trust\">অজ্ঞাত এক্সটেনচন বিশ্বাসৰ অধিকার বাতিল কৰক</string>\n    <string name=\"label_extension_repos\">এক্সটেনচন ৰেপোৰসমূহ</string>\n    <string name=\"information_empty_repos\">আপোনাৰ কোনো ৰেপো নাই।</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizuku ইন্সটল কৰক আৰু আৰম্ভ কৰক Shizuku এক্সটেনচন ইন্সটলাৰ হিচাপে ব্যৱহাৰ কৰিবলৈ।</string>\n    <string name=\"action_add_repo\">ৰেপো যোগ কৰক</string>\n    <string name=\"label_add_repo_input\">ৰেপো URL</string>\n    <string name=\"action_add_repo_message\">Mihon-ত অতিৰিক্ত ৰেপো যোগ কৰক। এইটো এনেকুৱা এটা URL হ\\'ব লাগিব যাৰ শেষত index.min.json থাকে।</string>\n    <string name=\"action_delete_repo\">ৰেপো মচক</string>\n    <string name=\"invalid_repo_name\">অবৈধ ৰেপো URL</string>\n    <string name=\"delete_repo_confirmation\">আপুনি কি ৰেপো %s মচিব বিচাৰে?</string>\n    <string name=\"add_repo_confirmation\">আপুনি কি ৰেপো %s যোগ কৰিব বিচাৰে?</string>\n    <string name=\"action_replace_repo_title\">স্বাক্ষৰ কি ফিংগাৰপ্ৰিন্ট ইতিমধ্যে আছে</string>\n    <string name=\"action_replace_repo_message\">ৰেপ’জিটৰী %1$s ৰ %2$s স্বাক্ষৰ কী ফিংগাৰপ্ৰিন্টৰ সৈতে একে।\n\\nযদি ই আশা কৰা হয়, %2$s প্রতিস্থাপন কৰা হ\\'ব, নহ\\'লে আপোনাৰ ৰেপো ৰক্ষণাবেক্ষকক যোগাযোগ কৰক।</string>\n    <string name=\"pref_fullscreen\">সম্পূৰ্ণ পর্দা</string>\n    <string name=\"pref_show_navigation_mode\">টেপৰ অঞ্চলসমূহ দেখুৱাওক</string>\n    <string name=\"pref_dual_page_split\">ব্যাপক পৃষ্ঠাবোৰ ভাগ কৰা</string>\n    <string name=\"pref_dual_page_invert\">পৃষ্ঠাৰ স্থান বিপৰীত কৰক</string>\n    <string name=\"pref_dual_page_invert_summary\">যদি ব্যাপক পৃষ্ঠাবোৰৰ স্থান পঢ়া দিশৰ সৈতে মিল নাখায়</string>\n    <string name=\"pref_page_rotate\">ব্যাপক পৃষ্ঠাবোৰ ফিট কৰিবলৈ ঘুৰাওক</string>\n    <string name=\"pref_page_rotate_invert\">ঘূৰোৱা ব্যাপক পৃষ্ঠাৰ অভিমুখ উলটাই দিয়া</string>\n    <string name=\"pref_double_tap_zoom\">জুম কৰিবলৈ দ্বৈত টেপ কৰক</string>\n    <string name=\"pref_cutout_short\">কণ্টেন্ট কেটাৰ অঞ্চলত দেখুৱাওক</string>\n    <string name=\"pref_page_transitions\">পৃষ্ঠা স্থানান্তৰৰ অ্যানিমেচন</string>\n    <string name=\"pref_flash_page\">পৃষ্ঠা পৰিবৰ্তনৰ সময়ত ফ্লেচ</string>\n    <string name=\"pref_flash_page_summ\">ই-ইঙ্ক স্ক্ৰিনত ঘোস্টিং কমায়</string>\n    <string name=\"pref_flash_duration\">ফ্লেচৰ সময়সীমা</string>\n    <string name=\"pref_flash_duration_summary\">%1$s মি.চি.</string>\n    <string name=\"pref_flash_page_interval\">প্ৰতি পৃষ্ঠা ফ্লেচ</string>\n    <string name=\"pref_flash_with\">ফ্লেচ কৰক</string>\n    <string name=\"pref_flash_style_black\">ক\\'লা</string>\n    <string name=\"pref_flash_style_white\">বগা</string>\n    <string name=\"pref_double_tap_anim_speed\">দ্বৈত টেপৰ অ্যানিমেচনৰ গতি</string>\n    <string name=\"pref_flash_style_white_black\">বগা আৰু ক\\'লা</string>\n    <string name=\"pref_show_page_number\">পৃষ্ঠা নম্বৰ দেখুৱাওক</string>\n    <string name=\"pref_show_reading_mode\">পঢ়া মোড দেখুৱাওক</string>\n    <string name=\"pref_show_reading_mode_summary\">পঢ়ুৱৈ খোলাৰ সময়ত ক্ষণেকৰ বাবে বৰ্তমান মোড দেখুৱাওক</string>\n    <string name=\"pref_display_profile\">নিজস্ব প্ৰদৰ্শন প্ৰফাইল</string>\n    <string name=\"pref_crop_borders\">কোনবোৰ কটক</string>\n    <string name=\"pref_custom_brightness\">নিজস্ব উজ্জ্বলতা</string>\n    <string name=\"pref_color_filter_mode\">ৰং চাবনি মিশ্ৰণ মোড</string>\n    <string name=\"filter_mode_multiply\">গুণন</string>\n    <string name=\"filter_mode_screen\">স্ক্ৰিন</string>\n    <string name=\"pref_custom_color_filter\">নিজস্ব ৰং চাবনি</string>\n    <string name=\"filter_mode_lighten\">ডজ/পোহৰ কৰা</string>\n    <string name=\"filter_mode_darken\">জ্বলাই/অন্ধকাৰ কৰা</string>\n    <string name=\"pref_keep_screen_on\">পৰ্দা চালু ৰাখক</string>\n    <string name=\"pref_skip_read_chapters\">পঢ়া অধ্যায়সমূহ বাদ দিয়ক</string>\n    <string name=\"pref_skip_filtered_chapters\">ফিল্টাৰ কৰা অধ্যায়সমূহ বাদ দিয়ক</string>\n    <string name=\"pref_skip_dupe_chapters\">ডুপ্লিকেট অধ্যায়সমূহ বাদ দিয়ক</string>\n    <string name=\"pref_reader_navigation\">সংক্ৰান্তি</string>\n    <string name=\"pref_read_with_tapping_inverted\">টেপৰ অঞ্চলসমূহ উলটাই দিয়া</string>\n    <string name=\"tapping_inverted_none\">একো নহয়</string>\n    <string name=\"tapping_inverted_horizontal\">আনুভূমিক</string>\n    <string name=\"pref_read_with_volume_keys\">ভলিউম কী</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">ভলিউম কী উলটাই দিয়া</string>\n    <string name=\"tapping_inverted_both\">দুয়োটা</string>\n    <string name=\"pref_reader_actions\">কৰ্মসমূহ</string>\n    <string name=\"pref_create_folder_per_manga_summary\">প্ৰবিষ্ট শিৰোনামৰ অনুসৰি ফোল্ডাৰ সৃষ্টি কৰে</string>\n    <string name=\"pref_read_with_long_tap\">দীৰ্ঘ টেপত কৰ্মসমূহ দেখুৱাওক</string>\n    <string name=\"pref_create_folder_per_manga\">প্ৰতি মাঙ্গাৰ বাবে পৃথক ফোল্ডাৰ সংৰক্ষণ কৰক</string>\n    <string name=\"pref_reader_theme\">পটভূমি ৰং</string>\n    <string name=\"gray_background\">ধূসৰ</string>\n    <string name=\"black_background\">ক\\'লা</string>\n    <string name=\"l_nav\">এল আকৃতিৰ</string>\n    <string name=\"automatic_background\">স্বয়ংক্ৰিয়</string>\n    <string name=\"pref_viewer_type\">ডিফল্ট পঢ়া মোড</string>\n    <string name=\"kindlish_nav\">কিন্ডল-যুক্ত</string>\n    <string name=\"right_and_left_nav\">সোঁমুখ আৰু বাঁওমুখ</string>\n    <string name=\"disabled_nav\">অক্ষম</string>\n    <string name=\"nav_zone_prev\">পূৰ্বৱৰ্তী</string>\n    <string name=\"nav_zone_next\">পৰৱৰ্তী</string>\n    <string name=\"nav_zone_right\">সোঁ</string>\n    <string name=\"left_to_right_viewer\">পৃষ্ঠা (বাঁওৰ পৰা সোঁ)</string>\n    <string name=\"right_to_left_viewer\">পৃষ্ঠা (সোঁৰ পৰা বাঁও)</string>\n    <string name=\"vertical_viewer\">পৃষ্ঠা (উল্লম্ব)</string>\n    <string name=\"webtoon_viewer\">দীঘল ফিতা</string>\n    <string name=\"vertical_plus_viewer\">ফাক থকা দীঘল ফিতা</string>\n    <string name=\"pager_viewer\">পৃষ্ঠা কৰা</string>\n    <string name=\"pref_viewer_nav\">টেপৰ অঞ্চলসমূহ</string>\n    <string name=\"pref_image_scale_type\">স্কেল প্ৰকাৰ</string>\n    <string name=\"scale_type_fit_screen\">পৰ্দাত ফিট কৰক</string>\n    <string name=\"scale_type_stretch\">প্ৰসাৰিত কৰক</string>\n    <string name=\"scale_type_fit_width\">পলমাই ফিট কৰক</string>\n    <string name=\"scale_type_fit_height\">উচ্চতাই ফিট কৰক</string>\n    <string name=\"scale_type_original_size\">মূল আকাৰ</string>\n    <string name=\"scale_type_smart_fit\">চতুৰ ফিট</string>\n    <string name=\"pref_navigate_pan\">ব্যাপক চিত্ৰসমূহ পেন কৰক</string>\n    <string name=\"pref_landscape_zoom\">স্বয়ংক্ৰিয়ভাৱে ব্যাপক চিত্ৰত জুম কৰক</string>\n    <string name=\"pref_zoom_start\">জুম আৰম্ভ স্থান</string>\n    <string name=\"zoom_start_automatic\">স্বয়ংক্ৰিয়</string>\n    <string name=\"zoom_start_left\">বাঁও</string>\n    <string name=\"zoom_start_right\">সোঁ</string>\n    <string name=\"zoom_start_center\">মধ্যম</string>\n    <string name=\"double_tap_anim_speed_0\">অ্যানিমেচন নাই</string>\n    <string name=\"double_tap_anim_speed_normal\">সাধাৰণ</string>\n    <string name=\"double_tap_anim_speed_fast\">দ্ৰুত</string>\n    <string name=\"pref_rotation_type\">ডিফল্ট ঘূৰণ</string>\n    <string name=\"rotation_type\">ঘূৰণ</string>\n    <string name=\"rotation_free\">মুক্ত</string>\n    <string name=\"rotation_portrait\">প’ৰট্ৰেইট</string>\n    <string name=\"rotation_landscape\">ল্যান্ডস্কেপ</string>\n    <string name=\"rotation_force_portrait\">প’ৰট্ৰেইট তালাচি</string>\n    <string name=\"rotation_force_landscape\">ল্যান্ডস্কেপ তালাচি</string>\n    <string name=\"rotation_reverse_portrait\">প’ৰট্ৰেইট বিপৰীত</string>\n    <string name=\"color_filter_r_value\">ৰঙা</string>\n    <string name=\"color_filter_g_value\">সেউজীয়া</string>\n    <string name=\"color_filter_b_value\">নীলা</string>\n    <string name=\"color_filter_a_value\">আলফা</string>\n    <string name=\"pref_always_show_chapter_transition\">সৰ্বদা অধ্যায় পৰিবৰ্তন দেখুৱাও</string>\n    <string name=\"pref_category_reading_mode\">পঢ়াৰ মোড</string>\n    <string name=\"pref_highest\">সৰ্বোচ্চ</string>\n    <string name=\"pref_high\">উচ্চ</string>\n    <string name=\"pref_low\">নিম্ন</string>\n    <string name=\"pref_lowest\">সৰ্বনিম্ন</string>\n    <string name=\"pref_category_delete_chapters\">অধ্যায় মচা</string>\n    <string name=\"pref_remove_after_marked_as_read\">হস্তচালিতভাবে পঢ়া চিহ্নিত কৰাৰ পিছত</string>\n    <string name=\"pref_remove_after_read\">পঢ়াৰ পিছত স্বয়ংক্ৰিয়ভাৱে মচা</string>\n    <string name=\"pref_remove_bookmarked_chapters\">বুকমাৰ্ক কৰা অধ্যায় মচাৰ অনুমতি দিয়ক</string>\n    <string name=\"pref_remove_exclude_categories\">বহিঃস্তৰিত শ্ৰেণীবিভাগসমূহ</string>\n    <string name=\"no_location_set\">কোনো সংৰক্ষণ স্থান নিৰ্ধাৰিত নহয়</string>\n    <string name=\"invalid_location\">অবৈধ স্থান: %s</string>\n    <string name=\"disabled\">বন্‌ধ</string>\n    <string name=\"last_read_chapter\">শেহতীয়া পঢ়া অধ্যায়</string>\n    <string name=\"second_to_last\">দ্বিতীয় শেহতীয়া পঢ়া অধ্যায়</string>\n    <string name=\"third_to_last\">তৃতীয় শেহতীয়া পঢ়া অধ্যায়</string>\n    <string name=\"fifth_to_last\">পঞ্চম শেহতীয়া পঢ়া অধ্যায়</string>\n    <string name=\"pref_category_auto_download\">স্বয়ংক্ৰিয় ডাউনলোড</string>\n    <string name=\"pref_download_new\">নতুন অধ্যায় ডাউনলোড কৰক</string>\n    <string name=\"pref_download_new_unread_chapters_only\">পঢ়া অধ্যায়ৰ অনুলিপি ডাউনলোড এৰাব</string>\n    <string name=\"auto_download_while_reading\">পঢ়াৰ সময়ত স্বয়ংক্ৰিয় ডাউনলোড</string>\n    <string name=\"download_ahead_info\">মাত্ৰ কাৰ্যকৰী যদি বৰ্তমান অধ্যায় আৰু পৰৱৰ্তী অধ্যায় ইতিমধ্যে ডাউনলোড কৰা হৈছে।</string>\n    <string name=\"save_chapter_as_cbz\">CBZ আর্কাইভ হিচাপে সংৰক্ষণ কৰক</string>\n    <string name=\"split_tall_images\">দীঘল চিত্ৰসমূহ ভাগ কৰক</string>\n    <string name=\"split_tall_images_summary\">পঢ়াৰ কাৰ্যক্ষমতা উন্নত কৰে</string>\n    <string name=\"services\">ট্ৰেকাৰসমূহ</string>\n    <string name=\"tracking_guide\">ট্ৰেকিং গাইড</string>\n    <string name=\"pref_auto_update_manga_sync\">পঢ়াৰ পাছত অগ্ৰগতি সৰ্পণ কৰক</string>\n    <string name=\"tracking_info\">বাহ্যিক ট্ৰেকাৰ সেৱাত অধ্যায়ৰ অগ্ৰগতি সৰ্পণ কৰিবলৈ একপথৰ সমন্বয়। তেওঁলোকৰ ট্ৰেকিং বুটামৰ পৰা ব্যক্তিগত প্ৰৱিষ্টৰ বাবে ট্ৰেকিং সেট আপ কৰক।</string>\n    <string name=\"enhanced_services\">উন্নত ট্ৰেকাৰসমূহ</string>\n    <string name=\"enhanced_services_not_installed\">উপলব্ধ কিন্তু উৎস ইন্সটল কৰা নাই: %s</string>\n    <string name=\"enhanced_tracking_info\">বিশেষ উৎসৰ বাবে উন্নত বৈশিষ্ট্য প্ৰদান কৰে। আপোনাৰ গ্ৰন্থাগাৰত যোগ কৰা হ\\'ল পৰিসৰটো স্বয়ংক্ৰিয়ভাৱে ট্ৰেক কৰা হয়।</string>\n    <string name=\"action_track\">ট্ৰেক কৰক</string>\n    <string name=\"track_activity_name\">ট্ৰেকাৰ লগইন</string>\n    <string name=\"pref_hide_in_library_items\">গ্ৰন্থাগাৰত ইতিমধ্যে থকা প্ৰৱিষ্টসমূহ লুকুৱাও</string>\n    <string name=\"pref_storage_location_info\">স্বয়ংক্ৰিয় বেকআপ, অধ্যায় ডাউনলোড, আৰু স্থানীয় উৎসৰ বাবে ব্যৱহৃত।</string>\n    <string name=\"pref_storage_location\">সংৰক্ষণ স্থান</string>\n    <string name=\"pref_create_backup\">বেকআপ সৃষ্টি কৰক</string>\n    <string name=\"pref_restore_backup\">বেকআপ পুনৰুদ্ধাৰ কৰক</string>\n    <string name=\"pref_backup_interval\">স্বয়ংক্ৰিয় বেকআপৰ সঁত্ৰণ</string>\n    <string name=\"backup_created\">বেকআপ সৃষ্টি কৰা হৈছে</string>\n    <string name=\"pref_create_backup_summ\">বৰ্তমান গ্ৰন্থাগাৰ পুনৰুদ্ধাৰ কৰিবলৈ ব্যৱহৃত হ\\'ব</string>\n    <string name=\"invalid_backup_file\">অবৈধ বেকআপ ফাইল:</string>\n    <string name=\"invalid_backup_file_error\">সম্পূৰ্ণ ত্ৰুটি:</string>\n    <string name=\"invalid_backup_file_json\">JSON বেকআপ সমৰ্থিত নহয়</string>\n    <string name=\"invalid_backup_file_unknown\">বেকআপ ফাইলৰ ত্ৰুটি</string>\n    <string name=\"backup_restore_missing_sources\">অপেক্ষিত উৎসসমূহ:</string>\n    <string name=\"backup_restore_missing_trackers\">ট্ৰেকাৰসমূহ লগইন হোৱা নাই:</string>\n    <string name=\"backup_restore_content_full\">আপোনাৰ গ্ৰন্থাগাৰ ব্যৱহাৰ কৰিবলৈ যিকোনো অনুপস্থিত এক্সটেনচনসমূহ ইনষ্টল কৰিবলৈ আৰু তাৰপিছত ট্ৰেকিং সেৱাসমূহত লগইন কৰিবলৈ লাগিব।</string>\n    <string name=\"backup_in_progress\">বেকআপ ইতিমধ্যে চলিত আছে</string>\n    <string name=\"backup_choice\">আপুনি কি বেকআপ কৰিব বিচাৰে?</string>\n    <string name=\"app_settings\">এপ্পৰ ছেটিংছ</string>\n    <string name=\"source_settings\">উৎসৰ ছেটিংছ</string>\n    <string name=\"extensionRepo_settings\">এক্সটেনচন ৰেপ\\'জ</string>\n    <string name=\"private_settings\">সংবেদনশীল ছেটিংছ অন্তৰ্ভুক্ত কৰক (যেনে, ট্ৰেকাৰ লগইন টোকেন)</string>\n    <string name=\"creating_backup\">বেকআপ সৃষ্টি কৰা হৈছে</string>\n    <string name=\"creating_backup_error\">বেকআপ ব্যৰ্থ</string>\n    <string name=\"empty_backup_error\">বেকআপ কৰিবলৈ কোনো গ্ৰন্থাগাৰ প্ৰৱিষ্ট নাই</string>\n    <string name=\"create_backup_file_error\">বেকআপ ফাইল সৃষ্টি কৰিব নোৱাৰিলে</string>\n    <string name=\"restore_miui_warning\">MIUI অপটিমাইজেশ্বন বন্ধ থাকিলে বেকআপ/পুনৰুদ্ধাৰ সঠিকভাৱে কাৰ্য কৰিব নোৱাৰে।</string>\n    <string name=\"restore_in_progress\">পুনৰুদ্ধাৰ ইতিমধ্যে চলিত আছে</string>\n    <string name=\"restoring_backup\">বেকআপ পুনৰুদ্ধাৰ কৰা হৈছে</string>\n    <string name=\"restoring_backup_error\">বেকআপ পুনৰুদ্ধাৰ ব্যৰ্থ</string>\n    <string name=\"restoring_backup_canceled\">পুনৰুদ্ধাৰ বাতিল</string>\n    <string name=\"last_auto_backup_info\">শেষ স্বয়ংক্ৰিয় বেকআপ: %s</string>\n    <string name=\"backup_info\">আপোনাৰ বেকআপৰ কপি অন্য ঠাইত ৰাখিব লাগে। বেকআপসমূহত সংবেদনশীল তথ্য অন্তৰ্ভুক্ত থাকিব পাৰে, যাৰ ভিতৰত কোনো সংৰক্ষিত পাসৱৰ্ড; ভাগ দিবৰ ক্ষেত্ৰত সাৱধান হ\\'ব।</string>\n    <string name=\"label_data\">ডাটা</string>\n    <string name=\"available_disk_space_info\">উপলব্ধ: %1$s / মুঠ: %2$s</string>\n    <string name=\"pref_clear_chapter_cache\">অধ্যায় কেছ ক্লিয়াৰ কৰক</string>\n    <string name=\"pref_storage_usage\">সংৰক্ষণ ব্যৱহাৰ</string>\n    <string name=\"used_cache\">ব্যৱহৃত: %1$s</string>\n    <string name=\"cache_deleted\">কেছ ক্লিয়াৰ কৰা হৈছে, %1$d ফাইল মচা হৈছে</string>\n    <string name=\"cache_delete_error\">ক্লিয়াৰ কৰাৰ সময়ত ত্ৰুটি</string>\n    <string name=\"pref_auto_clear_chapter_cache\">এপ্লিকেচন আৰম্ভণিৰ সময়ত অধ্যায় কেছ ক্লিয়াৰ কৰক</string>\n    <string name=\"syncing_library\">গ্ৰন্থাগাৰ সমন্বয় কৰা হৈছে</string>\n    <string name=\"library_sync_complete\">গ্ৰন্থাগাৰ সমন্বয় সম্পূৰ্ণ</string>\n    <string name=\"label_network\">নেটৱৰ্কিং</string>\n    <string name=\"pref_clear_cookies\">কুকি মচা</string>\n    <string name=\"pref_dns_over_https\">DNS HTTPSৰ ওপৰত (DoH)</string>\n    <string name=\"pref_user_agent_string\">ডিফল্ট ইউজাৰ এজেন্ট ষ্ট্ৰিং</string>\n    <string name=\"error_user_agent_string_blank\">ইউজাৰ এজেন্ট ষ্ট্ৰিং খালী নহ\\'ব পাৰে</string>\n    <string name=\"error_user_agent_string_invalid\">অবৈধ ইউজাৰ এজেন্ট ষ্ট্ৰিং</string>\n    <string name=\"pref_reset_user_agent_string\">ডিফল্ট ইউজাৰ এজেন্ট ষ্ট্ৰিং পুনৰ চমা</string>\n    <string name=\"requires_app_restart\">কাৰ্য্যকৰী হবলৈ এপ পুনৰ আৰম্ভণি প্ৰয়োজন</string>\n    <string name=\"cookies_cleared\">কুকি মচা হৈছে</string>\n    <string name=\"pref_invalidate_download_cache\">ডাউনলোডসমূহ পুনৰ সূচীভুক্ত কৰক</string>\n    <string name=\"download_cache_invalidated\">ডাউনলোড কেচ অবৈধ কৰা হৈছে</string>\n    <string name=\"pref_invalidate_download_cache_summary\">ডাউনলোড কৰা অধ্যায়সমূহ পুনৰ পৰীক্ষা কৰিবলৈ এপটো বাধ্য কৰা</string>\n    <string name=\"pref_clear_database\">ডাটাবেচ মচা</string>\n    <string name=\"pref_clear_database_summary\">আপোনাৰ লাইব্ৰেৰিত সংৰক্ষণ কৰা হোৱা নথিৰ ইতিহাস মচা</string>\n    <string name=\"clear_database_source_item_count\">ডাটাবেচত %1$d লাইব্ৰেৰিত নথিৰ সংখ্যা</string>\n    <string name=\"clear_database_confirmation\">আপোনি নিশ্চিত? লাইব্ৰেৰিত নথিৰ অধ্যায় আৰু অগ্ৰগতি হেৰুৱাব</string>\n    <string name=\"clear_database_completed\">নথি মচা হৈছে</string>\n    <string name=\"database_clean\">মচাৰ বাবে কিবা নাই</string>\n    <string name=\"pref_clear_webview_data\">WebView ডাটা মচা</string>\n    <string name=\"webview_data_deleted\">WebView ডাটা মচা হৈছে</string>\n    <string name=\"pref_refresh_library_covers\">লাইব্ৰেৰীৰ কভাৰসমূহ পুনৰ পূৰ্ণ কৰা</string>\n    <string name=\"pref_reset_viewer_flags\">প্ৰতি-সিৰিজ পাঠক স্থিতি পুনৰ চমা</string>\n    <string name=\"pref_reset_viewer_flags_summary\">সকল সিৰিজৰ পঢ়াৰ মড আৰু দিশ পুনৰ চমা</string>\n    <string name=\"pref_reset_viewer_flags_success\">সকলো পাঠক স্থিতি পুনৰ চমা</string>\n    <string name=\"pref_reset_viewer_flags_error\">পাঠক স্থিতি পুনৰ চমা হোৱা নাই</string>\n    <string name=\"pref_dump_crash_logs\">ক্রাশ লগসমূহ ভাগ কৰক</string>\n    <string name=\"pref_dump_crash_logs_summary\">ডেভেলপাৰসকলৰ সৈতে ভাগ কৰিবলৈ ত্ৰুটি লগসমূহ ফাইলত সংৰক্ষণ কৰক</string>\n    <string name=\"label_background_activity\">পটভূমি কাৰ্যকলাপ</string>\n    <string name=\"pref_disable_battery_optimization\">বেটাৰী অপ্টিমাইজেশন বন্ধ কৰক</string>\n    <string name=\"pref_disable_battery_optimization_summary\">পটভূমি লাইব্ৰেৰী আপডেট আৰু বেকআপত সহায় কৰে</string>\n    <string name=\"battery_optimization_disabled\">বেটাৰী অপ্টিমাইজেশন ইতিমধ্যে বন্ধ হৈছে</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">ডিভাইচৰ ছেটিংচ খোলাত অক্ষম</string>\n    <string name=\"about_dont_kill_my_app\">কিছুমান নিৰ্মাতাৰ অতিরিক্ত এপ নিষেধাজ্ঞা থাকে যি পটভূমি সেৱাসমূহ বন্ধ কৰে। ইয়াত অধিক তথ্য উপলব্ধ হৈছে কিদৰে সুৰ কৰক।</string>\n    <string name=\"pref_tablet_ui_mode\">টেবলেট UI</string>\n    <string name=\"pref_verbose_logging\">বিৱৰণযুক্ত লগিং</string>\n    <string name=\"pref_verbose_logging_summary\">ব্যৱস্থাৰ লগত বিৱৰণযুক্ত লগ প্ৰিন্ট কৰে (এপৰ কাৰ্যক্ষমতা হ্ৰাস কৰে)</string>\n    <string name=\"pref_debug_info\">ডিবাগ তথ্য</string>\n    <string name=\"whats_new\">নতুন কি</string>\n    <string name=\"website\">ৱেবছাইট</string>\n    <string name=\"version\">সংস্কৰণ</string>\n    <string name=\"help_translate\">অনুবাদ কৰিবলৈ সহায় কৰক</string>\n    <string name=\"licenses\">খুলা উৎস লাইচেন্স</string>\n    <string name=\"privacy_policy\">গোপনীয়তা নীতি</string>\n    <string name=\"check_for_updates\">আপডেট চাওক</string>\n    <string name=\"updated_version\">v%1$s ত আপডেট কৰা হৈছে</string>\n    <string name=\"pref_enable_acra\">ক্রাশ ৰিপ\\'ৰ্ট পঠিয়াব</string>\n    <string name=\"pref_acra_summary\">যিকোনো বাগ মেলাবলৈ সহায় কৰে। কোনো সংবেদনশীল তথ্য পঠিয়াব নোৱাৰি</string>\n    <string name=\"fdroid_warning\">F-Droid নিৰ্মাণসমূহৰ আনুষ্ঠানিক সমৰ্থন নাই।\n\\nঅধিক জানিবলৈ টেপ কৰক।</string>\n    <string name=\"label_downloaded_only\">মাত্ৰ ডাউনলোড কৰা</string>\n    <string name=\"notification_incognito_text\">ইনকগনিটো মড নিষ্ক্ৰিয় কৰক</string>\n    <string name=\"pref_incognito_mode\">ইনকগনিটো মড</string>\n    <string name=\"pref_incognito_mode_summary\">পঢ়াৰ ইতিহাস থামায়</string>\n    <string name=\"downloaded_only_summary\">আপোনাৰ লাইব্ৰেৰীৰ সকলো নথি ফিল্টাৰ কৰে</string>\n    <string name=\"login_title\">%1$s ত লগ ইন কৰক</string>\n    <string name=\"username\">ইউজাৰনেম</string>\n    <string name=\"email\">ইমেইল ঠিকনা</string>\n    <string name=\"password\">পাছৱাৰ্ড</string>\n    <string name=\"login\">লগইন</string>\n    <string name=\"login_success\">লগ ইন হৈছে</string>\n    <string name=\"logout_title\">%1$s পৰা লগ আউট কৰিবলৈ?</string>\n    <string name=\"logout\">লগ আউট</string>\n    <string name=\"logout_success\">আপুনি এতিয়া লগ আউট হৈছে</string>\n    <string name=\"downloaded_chapters\">ডাউনলোড কৰা অধ্যায়</string>\n    <string name=\"intervals_header\">অন্তৰালসমূহ</string>\n    <string name=\"unknown_error\">অজ্ঞাত ত্ৰুটি</string>\n    <string name=\"overlay_header\">অৱলম্বন</string>\n    <string name=\"updating_category\">শ্ৰেণী আপডেট কৰা</string>\n    <string name=\"manga_from_library\">লাইব্ৰেৰীৰ পৰা</string>\n    <string name=\"tabs_header\">টেব</string>\n    <string name=\"no_more_results\">অধিক ফলাফল নাই</string>\n    <string name=\"no_results_found\">ফলাফল কোৱা হোৱা নাই</string>\n    <string name=\"local_source\">স্থানীয় উৎস</string>\n    <string name=\"other_source\">অন্য</string>\n    <string name=\"last_used_source\">শেহতীয়াকৈ ব্যৱহৃত</string>\n    <string name=\"pinned_sources\">পিন কৰা</string>\n    <string name=\"action_global_search_hint\">বিশ্ববিদ্যালয় অনুসন্ধান…</string>\n    <string name=\"action_global_search_query\">“%1$s” বিশ্বব্যাপী অনুসন্ধান কৰক</string>\n    <string name=\"latest\">সৰ্বশেষ</string>\n    <string name=\"browse\">ব্ৰাউজ কৰক</string>\n    <string name=\"has_results\">ফলাফল আছে</string>\n    <string name=\"popular\">জনপ্ৰিয়</string>\n    <string name=\"local_source_help_guide\">স্থানীয় উৎস গাইড</string>\n    <string name=\"no_pinned_sources\">আপোনাৰ কোনো পিন কৰা উৎস নাই</string>\n    <string name=\"chapter_not_found\">অধ্যায় পোৱা নগ\\'ল</string>\n    <string name=\"local_invalid_format\">অবৈধ অধ্যায় ফৰ্মেট</string>\n    <string name=\"local_filter_order_by\">অৰ্ডাৰ বায়</string>\n    <string name=\"unknown_status\">অজানা অৱস্থা</string>\n    <string name=\"licensed\">লাইচেঞ্চ কৰা</string>\n    <string name=\"publishing_finished\">প্ৰকাশনাৰ সমাপ্তি</string>\n    <string name=\"cancelled\">বাতিল কৰা হৈছে</string>\n    <string name=\"date\">তাৰিখ</string>\n    <string name=\"ongoing\">চলি আছে</string>\n    <string name=\"unknown\">অজানা</string>\n    <string name=\"unknown_author\">অজানা লেখক</string>\n    <string name=\"on_hiatus\">বিৰতিত</string>\n    <string name=\"add_to_library\">লাইব্ৰেৰীলৈ যোগ কৰক</string>\n    <string name=\"remove_from_library\">লাইব্ৰেৰী পৰা মচি দিয়ক</string>\n    <string name=\"manga_removed_library\">লাইব্ৰেৰী পৰা মচি দিয়া হৈছে</string>\n    <string name=\"unknown_title\">অজানা শিৰোনাম</string>\n    <string name=\"confirm_add_duplicate_manga\">আপোনাৰ লাইব্ৰেৰীত এই নামৰ এটা প্ৰৱিষ্ট আছে।\n\\n\n\\nআপুনি এতিয়াও আগবঢ়াব খুজিছে নেকি?</string>\n    <string name=\"manga_info_expand\">অধিক</string>\n    <string name=\"manga_info_collapse\">সৰু</string>\n    <string name=\"delete_downloads_for_manga\">ডাউনলোড কৰা অধ্যায়সমূহ মচি দিব নেকি?</string>\n    <string name=\"copied_to_clipboard_plain\">ক্লিপবোর্ডত কপি কৰা হৈছে</string>\n    <string name=\"copied_to_clipboard\">ক্লিপবোর্ডত কপি কৰা হৈছে:\n\\n%1$s</string>\n    <string name=\"clipboard_copy_error\">ক্লিপবোর্ডত কপি কৰিবলৈ ব্যর্থ</string>\n    <string name=\"source_not_installed\">উৎস স্থাপন কৰা হোৱা নাই: %1$s</string>\n    <string name=\"snack_add_to_library\">লাইব্ৰেৰীলৈ যোগ কৰিব নেকি?</string>\n    <string name=\"description_placeholder\">বৰ্ণনা নাই</string>\n    <string name=\"display_mode_chapter\">অধ্যায় %1$s</string>\n    <string name=\"manga_display_interval_title\">প্ৰতি কিমান সময়ত</string>\n    <string name=\"manga_display_modified_interval_title\">প্ৰতি কিমান সময়ত আপডেট কৰিব</string>\n    <string name=\"manga_interval_expected_update\">%1$sৰ ভিতৰত নতুন অধ্যায়ৰ মুক্তি আশা কৰা হৈছে, প্ৰতি %2$sত পৰীক্ষা কৰা হৈছে।</string>\n    <string name=\"manga_interval_expected_update_soon\">সোনকালে</string>\n    <string name=\"manga_interval_custom_amount\">নিজস্ব আপডেটৰ সঘনতা:</string>\n    <string name=\"chapter_downloading_progress\">ডাউনলোড কৰা হৈছে (%1$d/%2$d)</string>\n    <string name=\"manga_interval_expected_update_null\">এই মাঙ্গা সম্পূৰ্ণ হৈছে, বা কিবা মুক্তিৰ তাৰিখ নাই।</string>\n    <string name=\"chapter_error\">ভূল</string>\n    <string name=\"chapter_paused\">বিৰত</string>\n    <string name=\"show_title\">উৎসৰ শিৰোনাম</string>\n    <string name=\"show_chapter_number\">অধ্যায় নম্বৰ</string>\n    <string name=\"sort_by_source\">উৎসৰ দ্বাৰা</string>\n    <string name=\"sort_by_number\">অধ্যায় নম্বৰ দ্বাৰা</string>\n    <string name=\"sort_by_upload_date\">আপলোড তাৰিখৰ দ্বাৰা</string>\n    <string name=\"manga_download\">ডাউনলোড</string>\n    <string name=\"download_unread\">অপঢ়া</string>\n    <string name=\"custom_cover\">নিজস্ব কভাৰ</string>\n    <string name=\"manga_cover\">কভাৰ</string>\n    <string name=\"cover_saved\">কভাৰ সংৰক্ষিত</string>\n    <string name=\"error_saving_cover\">কভাৰ সংৰক্ষণ কৰাত ভূল</string>\n    <string name=\"error_sharing_cover\">কভাৰ শ্বেয়াৰ কৰাত ভূল</string>\n    <string name=\"confirm_delete_chapters\">আপুনি নিশ্চিতনে যে নিৰ্বাচিত অধ্যায়সমূহ মচিব পৰা যাব?</string>\n    <string name=\"chapter_settings\">অধ্যায়ৰ ছেটিংচ</string>\n    <string name=\"confirm_set_chapter_settings\">আপুনি নিশ্চিতনে যে এই ছেটিংচ ডিফল্ট হিচাপে সংৰক্ষণ কৰিব?</string>\n    <string name=\"also_set_chapter_settings_for_library\">মোৰ লাইব্ৰেৰীৰ সকলো প্ৰৱিষ্টলৈও প্ৰয়োগ কৰক</string>\n    <string name=\"set_chapter_settings_as_default\">ডিফল্ট হিচাপে ছেট কৰক</string>\n    <string name=\"no_chapters_error\">অধ্যায় কোৱা হোৱা নাই</string>\n    <string name=\"confirm_tracker_update\">অধ্যায় %dলৈ ট্রেকাৰ আপডেট কৰিবনে?</string>\n    <string name=\"manga_tracking_tab\">ট্রেকিং</string>\n    <string name=\"add_tracking\">ট্রেকিং যোগ কৰক</string>\n    <string name=\"unread\">অপঢ়া</string>\n    <string name=\"reading\">পঢ়া</string>\n    <string name=\"are_you_sure\">আপুনি নিশ্চিতনে?</string>\n    <string name=\"exclude_scanlators\">স্কেনলেটৰসমূহ বাদ দিয়ক</string>\n    <string name=\"no_scanlators_found\">কোনো স্কেনলেটৰ পোৱা নগ\\'ল</string>\n    <string name=\"completed\">সম্পূৰ্ণ</string>\n    <string name=\"dropped\">নিস্পত্তি কৰা হৈছে</string>\n    <string name=\"on_hold\">স্থগিত</string>\n    <string name=\"paused\">বিৰত</string>\n    <string name=\"plan_to_read\">পঢ়াৰ পরিকল্পনা</string>\n    <string name=\"repeating\">পুনৰ পঢ়া</string>\n    <string name=\"reading_list\">পঢ়াৰ তালিকা</string>\n    <string name=\"wish_list\">ইচ্ছাৰ তালিকা</string>\n    <string name=\"complete_list\">সম্পূৰ্ণ তালিকা</string>\n    <string name=\"on_hold_list\">স্থগিত তালিকা</string>\n    <string name=\"unfinished_list\">অসম্পূৰ্ণ তালিকা</string>\n    <string name=\"score\">স্ক\\'ৰ</string>\n    <string name=\"title\">শিৰোনাম</string>\n    <string name=\"status\">অৱস্থা</string>\n    <string name=\"track_status\">অৱস্থা</string>\n    <string name=\"track_started_reading_date\">আৰম্ভৰ তাৰিখ</string>\n    <string name=\"track_finished_reading_date\">শেষৰ তাৰিখ</string>\n    <string name=\"track_type\">প্ৰকাৰ</string>\n    <string name=\"myanimelist_relogin\">দয়া কৰি MAL পুনৰ লগইন কৰক</string>\n    <string name=\"source_unsupported\">উৎস সমৰ্থিত নহয়</string>\n    <string name=\"error_no_match\">কোনো মেচ নাই</string>\n    <string name=\"track_error\">%1$s ত ভূল: %2$s</string>\n    <string name=\"track_remove_date_conf_title\">তাৰিখ মচিবনে?</string>\n    <string name=\"track_remove_start_date_conf_text\">%s পৰা আপোনাৰ আগৰ নিৰ্বাচিত আৰম্ভৰ তাৰিখ মচি দিব</string>\n    <string name=\"track_delete_title\">%s ট্রেকিং মচিবনে?</string>\n    <string name=\"track_delete_text\">এইটো স্থানীয়ভাৱে ট্রেকিং মচিব।</string>\n    <string name=\"track_delete_remote_text\">%s তো মচিব</string>\n    <string name=\"error_category_exists\">এই নামৰ এটা শ্রেণী ইতিমধ্যে আছে!</string>\n    <string name=\"dialog_with_checkbox_remove_description\">এইটো অধ্যায়ৰ পঢ়া তাৰিখ মচি দিব। আপুনি নিশ্চিতনে?</string>\n    <string name=\"picture_saved\">ছবি সংৰক্ষিত</string>\n    <string name=\"error_saving_picture\">ছবি সংৰক্ষণ কৰাত ভূল</string>\n    <string name=\"custom_filter\">নিজৰ ফিল্টাৰ</string>\n    <string name=\"set_as_cover\">কভাৰ হিচাপে নিৰ্ধাৰণ কৰক</string>\n    <string name=\"cover_updated\">কভাৰ আপডেট কৰা হৈছে</string>\n    <string name=\"share_page_info\">%1$s: %2$s, পৃষ্ঠা %3$d</string>\n    <string name=\"chapter_progress\">পৃষ্ঠা: %1$d</string>\n    <string name=\"no_next_chapter\">পৰৱৰ্তী অধ্যায় পোৱা নগ\\'ল</string>\n    <string name=\"decode_image_error\">চিত্রটো লোড কৰিব পৰা নগ\\'ল</string>\n    <string name=\"confirm_set_image_as_cover\">এই চিত্ৰটো কভাৰ শিল্প হিচাপে ব্যৱহাৰ কৰিবনে?</string>\n    <string name=\"pref_category_for_this_series\">এই শ্ৰেণীৰ বাবে</string>\n    <string name=\"viewer\">পঢ়াৰ মোড</string>\n    <string name=\"transition_finished\">সম্পন্ন:</string>\n    <string name=\"transition_current\">বর্তমান:</string>\n    <string name=\"transition_next\">পৰৱৰ্তী:</string>\n    <string name=\"transition_previous\">পূৰ্বৰ:</string>\n    <string name=\"transition_no_next\">পৰৱৰ্তী অধ্যায় নাই</string>\n    <string name=\"transition_no_previous\">পূৰ্বৰ অধ্যায় নাই</string>\n    <string name=\"page_list_empty_error\">কোনো পৃষ্ঠা পোৱা নগ\\'ল</string>\n    <string name=\"transition_pages_loading\">পৃষ্ঠা লোড হৈ আছে…</string>\n    <string name=\"transition_pages_error\">পৃষ্ঠা লোড কৰাত ব্যৰ্থ: %1$s</string>\n    <string name=\"loader_not_implemented_error\">মূলটো পোৱা নগ\\'ল</string>\n    <string name=\"updating_library\">লাইব্রেৰী আপডেট হৈ আছে</string>\n    <string name=\"update_already_running\">এটা আপডেট ইতিমধ্যে চলি আছে</string>\n    <string name=\"cant_open_last_read_chapter\">শেষ পঢ়া অধ্যায় খোলাটো সম্ভব নহয়</string>\n    <string name=\"updates_last_update_info\">লাইব্রেৰী শেষ আপডেট: %s</string>\n    <string name=\"updates_last_update_info_just_now\">এতিয়া</string>\n    <string name=\"relative_time_span_never\">কদাচিৎ</string>\n    <string name=\"action_view_upcoming\">পৰৱৰ্তী আপডেট চাওক</string>\n    <string name=\"upcoming_guide\">পৰৱৰ্তী গাইড</string>\n    <string name=\"upcoming_calendar_next\">পৰৱৰ্তী মাহ</string>\n    <string name=\"upcoming_calendar_prev\">পূৰ্বৰ মাহ</string>\n    <string name=\"recent_manga_time\">চ. %1$s - %2$s</string>\n    <string name=\"pref_clear_history\">ইতিহাস সাফ কৰক</string>\n    <string name=\"clear_history_completed\">ইতিহাস মচি পেলোৱা হৈছে</string>\n    <string name=\"clear_history_confirmation\">আপুনি নিশ্চিত? সকলো ইতিহাস হেৰুৱাই যাব।</string>\n    <string name=\"source_empty_screen\">কোনো মূলে পোৱা নগ\\'ল</string>\n    <string name=\"migrate\">স্থানান্তৰ কৰক</string>\n    <string name=\"copy\">নকল কৰক</string>\n    <string name=\"empty_screen\">ভাল, এইটো অলপ অদ্ভুত</string>\n    <string name=\"source_filter_empty_screen\">কোনো প্ৰতিস্থাপন কৰা মূলে পোৱা নগ\\'ল</string>\n    <string name=\"migration_help_guide\">মূল স্থানান্তৰ গাইড</string>\n    <string name=\"migration_dialog_what_to_include\">অন্তৰ্ভুক্ত কৰাৰ বাবে তথ্য বাচনি কৰক</string>\n    <string name=\"migration_selection_prompt\">স্থানান্তৰ কৰিবলৈ মূল বাচনি কৰক</string>\n    <string name=\"not_installed\">স্থাপন কৰা নহ\\'ব</string>\n    <string name=\"crash_screen_title\">ওহো!</string>\n    <string name=\"crash_screen_restart_application\">অনুগ্রহ কৰি এপ্লিকেশ্বন পুনৰ আৰম্ভ কৰক</string>\n    <string name=\"crash_screen_description\">%s অপ্ৰত্যাশিত ত্ৰুটিৰ সন্মুখীন হৈছে। আমি আপোনাক সুপারিশ কৰোঁ যে, Discord ত আমাৰ সহায় চেনেলত ক্ৰাশ লগবোৰ শ্বেয়াৰ কৰক।</string>\n    <string name=\"label_overview_section\">সাৰাংশ</string>\n    <string name=\"label_completed_titles\">সম্পন্ন ৰেকৰ্ড</string>\n    <string name=\"label_read_duration\">পঢ়াৰ সময়</string>\n    <string name=\"label_titles_section\">ৰেকৰ্ড</string>\n    <string name=\"label_total_chapters\">মুঠ</string>\n    <string name=\"label_read_chapters\">পঢ়া</string>\n    <string name=\"label_titles_in_global_update\">আন্তৰাষ্ট্ৰীয় আপডেটত</string>\n    <string name=\"label_tracker_section\">ট্রেকাৰ</string>\n    <string name=\"label_tracked_titles\">ট্রেক কৰা ৰেকৰ্ড</string>\n    <string name=\"label_mean_score\">মধ্যম নম্বৰ</string>\n    <string name=\"label_used\">ব্যৱহৃত</string>\n    <string name=\"not_applicable\">প্ৰযোজ্য নহয়</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"download_queue_error\">অধ্যায়সমূহ ডাউনলোড কৰিবলৈ সক্ষম নহ\\'ল। আপুনি ডাউনলোডৰ অংশত পুনৰ চেষ্টা কৰিব পাৰে</string>\n    <string name=\"download_insufficient_space\">পৰ্যাপ্ত স্থান নাথাকাৰ বাবে অধ্যায়সমূহ ডাউনলোড কৰিবলৈ সক্ষম নহ\\'ল</string>\n    <string name=\"download_queue_size_warning\">সতৰ্কতা: ডাঙৰ বাল্ক ডাউনলোডে মূলে ধীৰগতিত পৰিণত কৰিব পাৰে আৰু/অথবা Mihon ব্লক কৰিব পাৰে। অধিক জানিবলৈ টেপ কৰক।</string>\n    <string name=\"notification_updating_progress\">লাইব্রেৰী আপডেট হৈ আছে… (%s)</string>\n    <string name=\"notification_size_warning\">ডাঙৰ আপডেটসমূহে মূলে ক্ষতি কৰে আৰু ধীৰ গতিত আপডেট হব পাৰে আৰু বেটাৰী ব্যৱহাৰ বৃদ্ধি পাব পাৰে। অধিক জানিবলৈ টেপ কৰক।</string>\n    <string name=\"notification_new_chapters\">নতুন অধ্যায় পোৱা গৈছে</string>\n    <string name=\"notification_chapters_single\">অধ্যায় %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">অধ্যায় %1$s আৰু %2$d অধিক</string>\n    <string name=\"notification_chapters_multiple\">অধ্যায়সমূহ %1$s</string>\n    <string name=\"notification_update_error\">%1$d আপডেট(s) ব্যৰ্থ</string>\n    <string name=\"learn_more\">অধিক জানিবলৈ টেপ কৰক</string>\n    <string name=\"notification_cover_update_failed\">কভাৰ আপডেট কৰিবলৈ ব্যৰ্থ</string>\n    <string name=\"notification_first_add_to_library\">এইটো কৰিবলৈ আগত অনুগ্ৰহ কৰি ৰেকৰ্ডটো আপোনাৰ লাইব্রেৰীত যোগ কৰক</string>\n    <string name=\"library_errors_help\">লাইব্রেৰী আপডেট ত্ৰুটিসমূহ মাকৰ বাবে সহায়ৰ বাবে চাওক %1$s</string>\n    <string name=\"skipped_reason_not_caught_up\">পঢ়া অধ্যায়ৰ অভাৱৰ বাবে বাদ দিয়া হৈছে</string>\n    <string name=\"skipped_reason_not_started\">কোনো অধ্যায় পঢ়া হোৱা নাই</string>\n    <string name=\"skipped_reason_completed\">ধাৰা সম্পন্নৰ বাবে বাদ দিয়া হৈছে</string>\n    <string name=\"skipped_reason_not_always_update\">ধাৰা আপডেটৰ প্রয়োজন নাই</string>\n    <string name=\"skipped_reason_not_in_release_period\">আজিৰ বাবে কোনো মুক্তিৰ আশা নাছিল</string>\n    <string name=\"file_select_cover\">আৱৰণ চিত্ৰ বাচক</string>\n    <string name=\"file_select_backup\">বেকআপ ফাইল বাচক</string>\n    <string name=\"file_picker_error\">ফাইল বাচনিৰ এপ পোৱা নগ\\'ল</string>\n    <string name=\"file_picker_uri_permission_unsupported\">স্থায়ী ফোল্ডাৰ প্ৰৱেশ লাভ কৰা নগ\\'ল। এপটো আশাহীনভাৱে আচৰণ কৰিব পাৰে।</string>\n    <string name=\"file_null_uri_error\">কোনো ফাইল বাচা হোৱা নাই</string>\n    <string name=\"update_check_confirm\">ডাউনলোড কৰক</string>\n    <string name=\"update_check_eol\">এই Android সংস্কৰণটো এতিয়া সমৰ্থিত নহয়</string>\n    <string name=\"update_check_notification_download_complete\">আপডেট ইনষ্টল কৰিবলৈ টেপ কৰক</string>\n    <string name=\"update_check_notification_download_error\">ডাউনলোড ত্ৰুটি</string>\n    <string name=\"update_check_no_new_updates\">নতুন আপডেট উপলব্ধ নাই</string>\n    <string name=\"update_check_notification_download_in_progress\">ডাউনলোড হৈছে…</string>\n    <string name=\"update_check_notification_update_available\">নতুন সংস্কৰণ উপলব্ধ!</string>\n    <string name=\"information_no_recent\">কোনো নতুন আপডেট নাই</string>\n    <string name=\"information_no_recent_manga\">সম্প্ৰতি কিবা পঢ়া হোৱা নাই</string>\n    <string name=\"information_empty_library\">আপোনাৰ লাইব্ৰেৰী খালী</string>\n    <string name=\"information_no_manga_category\">বিভাগ খালী</string>\n    <string name=\"information_no_entries_found\">এই বিভাগত কোনো প্ৰৱেশ পোৱা নগ\\'ল</string>\n    <string name=\"getting_started_guide\">আৰম্ভ কৰিবলৈ গাইড</string>\n    <string name=\"information_empty_category\">আপোনাৰ কোনো বিভাগ নাই। আপোনাৰ লাইব্ৰেৰী পৰিচালনা কৰিবলৈ এখন সৃষ্টি কৰিবলৈ প্লাছ বুটামত টেপ কৰক।</string>\n    <string name=\"information_empty_category_dialog\">আপোনাৰ এতিয়াও কোনো বিভাগ নাই।</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare পাৰ হোৱাৰ চেষ্টা বিফল</string>\n    <string name=\"information_cloudflare_help\">Cloudflare সহায়ৰ বাবে ইয়াত টেপ কৰক</string>\n    <string name=\"information_required_plain\">*আৱশ্যক</string>\n    <string name=\"information_webview_required\">এপটো কাম কৰিবলৈ WebView আৱশ্যক</string>\n    <string name=\"information_webview_outdated\">ভাল সামঞ্জস্যৰ বাবে WebView এপটো আপডেট কৰক</string>\n    <string name=\"chapter_settings_updated\">ডিফল্ট অধ্যায় সজাও বুজাই দিয়া হৈছে</string>\n    <string name=\"download_notifier_downloader_title\">ডাউনলোডাৰ</string>\n    <string name=\"download_notifier_title_error\">ত্ৰুটি</string>\n    <string name=\"download_notifier_unknown_error\">অপ্ৰত্যাশিত ত্ৰুটিৰ বাবে অধ্যায় ডাউনলোড কৰিব পৰা নগ\\'ল</string>\n    <string name=\"download_notifier_text_only_wifi\">কোনো Wi-Fi সংযোগ উপলব্ধ নাই</string>\n    <string name=\"download_notifier_no_network\">কোনো নেটৱৰ্ক সংযোগ উপলব্ধ নাই</string>\n    <string name=\"download_notifier_download_paused\">ডাউনলোড ৰোকা</string>\n    <string name=\"download_notifier_split_page_not_found\">পাতা %d বিচ্ছিন্নৰ সময়ত পোৱা নগ\\'ল</string>\n    <string name=\"download_notifier_split_page_path_not_found\">পাতা %d ৰ ফাইল পথ পোৱা নগ\\'ল</string>\n    <string name=\"download_notifier_cache_renewal\">ডাউনলোড পৰীক্ষা কৰা হৈছে</string>\n    <string name=\"channel_common\">সাধাৰণ</string>\n    <string name=\"channel_progress\">অগ্ৰগতি</string>\n    <string name=\"channel_complete\">সম্পূৰ্ণ</string>\n    <string name=\"channel_app_updates\">এপ আপডেট</string>\n    <string name=\"channel_ext_updates\">এক্সটেনচন আপডেট</string>\n    <string name=\"spen_previous_page\">পূৰ্বৰ পৃষ্ঠা</string>\n    <string name=\"appwidget_updates_description\">আপোনাৰ সাম্প্ৰতিক আপডেট কৰা লাইব্ৰেৰী প্ৰৱেশসমূহ চাওক</string>\n    <string name=\"appwidget_unavailable_locked\">এপ লক সক্ৰিয় থাকোতে উইজেট উপলব্ধ নহয়</string>\n    <string name=\"remove_manga\">আপুনি আপোনাৰ লাইব্ৰেৰীৰ পৰা \\\"%s\\\" মচাৰ বাবে সাজু হৈছে</string>\n    <string name=\"spen_next_page\">পৰৱৰ্তী পৃষ্ঠা</string>\n    <string name=\"exception_offline\">ইণ্টাৰনেট সংযোগ নাই</string>\n    <string name=\"exception_unknown_host\">%s পৌঁছাব পৰা নগ\\'ল</string>\n    <string name=\"tapping_inverted_vertical\">উলম্ব</string>\n    <string name=\"non_library_settings\">সকলো পঢ়া প্ৰৱেশ</string>\n    <string name=\"action_sort_random\">ৰেণ্ডম</string>\n    <string name=\"onboarding_permission_analytics_description\">এপৰ বৈশিষ্ট্য উন্নত কৰাৰ বাবে নামৰহিত ব্যৱহাৰ তথ্য পঠাওক।</string>\n    <string name=\"pref_security\">সুৰক্ষা</string>\n    <string name=\"pref_firebase\">এনেলিটিক্স আৰু ক্ৰেছ লগসমূহ</string>\n    <string name=\"onboarding_permission_analytics\">এনেলিটিক্সৰ অনুমতি দিয়ক</string>\n    <string name=\"firebase_summary\">ক্ৰেছ লগ আৰু এনেলিটিক্স পঠাওঁতে আমাক সমস্যাবোৰ চিনাক্ত কৰি সমাধান কৰিবলৈ, কাৰ্যক্ষমতা উন্নত কৰিবলৈ আৰু আপোনাৰ প্ৰয়োজনৰ অনুসাৰে ভৱিষ্যতৰ আপডেটসমূহ অধিক প্ৰাসংগিক কৰিবলৈ সহায় কৰিব।</string>\n    <string name=\"onboarding_permission_crashlytics_description\">ডেভেলপাৰসকললৈ নামৰহিত ক্ৰেছ লগসমূহ পঠাওক|</string>\n    <string name=\"onboarding_permission_crashlytics\">ক্ৰেছ লগসমূহ পঠাওক</string>\n    <string name=\"ext_remove\">আঁতৰাওক</string>\n    <string name=\"ext_confirm_remove\">এক্সটেনচন আঁতৰাবনে?</string>\n    <string name=\"remove_private_extension_message\">আপুনি কি \\\"%s\\\" এক্সটেনচনটো আঁতৰাব খুজিছে?</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">পঢ়া হিচাপে চিহ্নিত কৰাৰ সময়ত অগ্ৰগতি আপডেইট কৰক</string>\n    <string name=\"trackers_updated_summary\">ট্ৰেকাৰসমূহ অধ্যায় %d লৈ আপডেইট কৰা হৈছে</string>\n    <string name=\"pref_hardware_bitmap_threshold\">কাষ্টম হাৰ্ডৱেৰ বিটম্যাপ থ্ৰেশহোল্ড</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">যদি পাঠকে এটা খালী ছবি লোড কৰে ক্ৰমান্বয়ে থ্ৰেছহোল্ড হ্ৰাস কৰক। \\nবাচনি কৰা: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">ডিফল্ট (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">কাৰ্য্যক্ষমতাক প্ৰভাৱিত কৰে। কেৱল সামৰ্থবান কৰক যদি বিটমেপ থ্ৰেছহোল্ড হ্ৰাস কৰিলে খালী প্ৰতিমুৰ্তি সমস্যা সমাধান নহয়</string>\n    <string name=\"pref_incognito_mode_extension_summary\">সম্প্ৰসাৰণৰ বাবে ইতিহাস পঢ়া বন্ধ কৰক</string>\n    <string name=\"label_auto\">অটো</string>\n    <string name=\"theme_monochrome\">একবৰ্ণী</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/base/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">After %1$s minute</item>\n        <item quantity=\"other\">After %1$s minutes</item>\n    </plurals>\n\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Yesterday</item>\n        <item quantity=\"other\">%1$d days ago</item>\n    </plurals>\n\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Tomorrow</item>\n        <item quantity=\"other\">In %1$d days</item>\n    </plurals>\n\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d category</item>\n        <item quantity=\"other\">%d categories</item>\n    </plurals>\n\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Next unread chapter</item>\n        <item quantity=\"other\">Next %d unread chapters</item>\n    </plurals>\n\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Done in %1$s with %2$s error</item>\n        <item quantity=\"other\">Done in %1$s with %2$s errors</item>\n    </plurals>\n\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s remaining</item>\n        <item quantity=\"other\">%1$s remaining</item>\n    </plurals>\n\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 day</item>\n        <item quantity=\"other\">%d days</item>\n    </plurals>\n\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 page</item>\n        <item quantity=\"other\">%1$s pages</item>\n    </plurals>\n\n    <!-- Manga info -->\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Missing %1$s chapter</item>\n        <item quantity=\"other\">Missing %1$s chapters</item>\n    </plurals>\n\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s chapter</item>\n        <item quantity=\"other\">%1$s chapters</item>\n    </plurals>\n\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Next chapter</item>\n        <item quantity=\"other\">Next %d chapters</item>\n    </plurals>\n\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d tracker</item>\n        <item quantity=\"other\">%d trackers</item>\n    </plurals>\n\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Skipping %d chapter, either the source is missing it or it has been filtered out</item>\n        <item quantity=\"other\">Skipping %d chapters, either the source is missing them or they have been filtered out</item>\n    </plurals>\n\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">For %d entry</item>\n        <item quantity=\"other\">For %d entries</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d new chapter</item>\n        <item quantity=\"other\">%1$d new chapters</item>\n    </plurals>\n\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Chapters %1$s and 1 more</item>\n        <item quantity=\"other\">Chapters %1$s and %2$d more</item>\n    </plurals>\n\n    <!--Extension Updates Notifications-->\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Extension update available</item>\n        <item quantity=\"other\">%d extension updates available</item>\n    </plurals>\n\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repo</item>\n        <item quantity=\"other\">%d repos</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/base/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"app_name\" translatable=\"false\">Aniyomi</string>\n\n    <!-- Generic strings -->\n    <string name=\"on\">On</string>\n    <string name=\"off\">Off</string>\n    <string name=\"selected\">Selected</string>\n    <string name=\"not_selected\">Not selected</string>\n    <string name=\"action_menu_overflow_description\">More options</string>\n    <string name=\"action_bar_up_description\">Navigate up</string>\n\n    <!-- Models -->\n    <string name=\"name\">Name</string>\n    <string name=\"categories\">Categories</string>\n    <string name=\"manga\">Library entries</string>\n    <string name=\"chapters\">Chapters</string>\n    <string name=\"track\">Tracking</string>\n    <string name=\"delete_downloaded\">Delete downloaded</string>\n    <string name=\"history\">History</string>\n    <string name=\"scanlator\">Scanlator</string>\n\n    <!-- Screen titles -->\n    <string name=\"label_more\">More</string>\n    <string name=\"label_settings\">Settings</string>\n    <string name=\"label_download_queue\">Download queue</string>\n    <string name=\"label_library\">Library</string>\n    <string name=\"label_recent_updates\">Updates</string>\n    <string name=\"label_upcoming\">Upcoming</string>\n    <string name=\"label_recent_manga\">History</string>\n    <string name=\"label_sources\">Sources</string>\n    <string name=\"label_backup\">Backup and restore</string>\n    <string name=\"label_data_storage\">Data and storage</string>\n    <string name=\"label_stats\">Statistics</string>\n    <string name=\"label_migration\">Migrate</string>\n    <string name=\"label_extensions\">Extensions</string>\n    <string name=\"label_extension_info\">Extension info</string>\n    <string name=\"label_help\">Help</string>\n    <string name=\"label_default\">Default</string>\n    <string name=\"label_warning\">Warning</string>\n    <string name=\"label_auto\">Auto</string>\n\n    <!-- Shared labels -->\n    <string name=\"label_started\">Started</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_downloaded\">Downloaded</string>\n\n    <string name=\"unlock_app_title\">Unlock %s</string>\n    <string name=\"confirm_lock_change\">Authenticate to confirm change</string>\n\n    <!-- Actions -->\n    <string name=\"action_settings\">Settings</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_set_interval\">Set interval</string>\n    <string name=\"action_filter_bookmarked\">Bookmarked</string>\n    <string name=\"action_filter_tracked\">Tracked</string>\n    <string name=\"action_filter_unread\">Unread</string>\n    <string name=\"action_filter_interval_custom\">Customized update frequency</string>\n    <!-- reserved for #4048 -->\n    <string name=\"action_filter_empty\">Remove filter</string>\n    <string name=\"action_sort_alpha\">Alphabetically</string>\n    <string name=\"action_sort_count\">Total entries</string>\n    <string name=\"action_sort_total\">Total chapters</string>\n    <string name=\"action_sort_last_read\">Last read</string>\n    <string name=\"action_sort_last_manga_update\">Last update check</string>\n    <string name=\"action_sort_unread_count\">Unread count</string>\n    <string name=\"action_sort_next_updated\">Next expected update</string>\n    <string name=\"action_sort_latest_chapter\">Latest chapter</string>\n    <string name=\"action_sort_chapter_fetch_date\">Chapter fetch date</string>\n    <string name=\"action_sort_date_added\">Date added</string>\n    <string name=\"action_sort_tracker_score\">Tracker score</string>\n    <string name=\"action_sort_random\">Random</string>\n    <string name=\"action_search\">Search</string>\n    <string name=\"action_search_hint\">Search…</string>\n    <string name=\"action_search_settings\">Search settings</string>\n    <string name=\"action_global_search\">Global search</string>\n    <string name=\"action_select_all\">Select all</string>\n    <string name=\"action_select_inverse\">Select inverse</string>\n    <string name=\"action_mark_as_read\">Mark as read</string>\n    <string name=\"action_mark_as_unread\">Mark as unread</string>\n    <string name=\"action_mark_previous_as_read\">Mark previous as read</string>\n    <string name=\"action_download\">Download</string>\n    <string name=\"action_bookmark\">Bookmark chapter</string>\n    <string name=\"action_remove_bookmark\">Unbookmark chapter</string>\n    <string name=\"action_delete\">Delete</string>\n    <string name=\"action_update_library\">Update library</string>\n    <string name=\"action_enable_all\">Enable all</string>\n    <string name=\"action_disable_all\">Disable all</string>\n    <string name=\"action_edit\">Edit</string>\n    <string name=\"action_add\">Add</string>\n    <string name=\"action_update_category\">Update category</string>\n    <string name=\"action_open_random_manga\">Open random entry</string>\n    <string name=\"action_add_category\">Add category</string>\n    <string name=\"action_edit_categories\">Edit categories</string>\n    <string name=\"action_rename_category\">Rename category</string>\n    <string name=\"action_move_category\">Set categories</string>\n    <string name=\"delete_category_confirmation\">Do you wish to delete the category \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Delete category</string>\n    <string name=\"action_edit_cover\">Edit cover</string>\n    <string name=\"action_view_chapters\">View chapters</string>\n    <string name=\"action_pause\">Pause</string>\n    <string name=\"action_previous_chapter\">Previous chapter</string>\n    <string name=\"action_next_chapter\">Next chapter</string>\n    <string name=\"action_retry\">Retry</string>\n    <string name=\"action_remove\">Remove</string>\n    <string name=\"action_remove_everything\">Remove everything</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"action_resume\">Resume</string>\n    <string name=\"action_open_in_browser\">Open in browser</string>\n    <string name=\"action_show_manga\">Show entry</string>\n    <string name=\"action_copy_to_clipboard\">Copy to clipboard</string>\n    <string name=\"action_copy_link\">Copy link</string>\n    <!-- Do not translate \"WebView\" -->\n    <string name=\"action_open_in_web_view\">Open in WebView</string>\n    <string name=\"action_web_view\" translatable=\"false\">WebView</string>\n    <string name=\"action_migrate\">Migrate</string>\n    <string name=\"action_display_mode\">Display mode</string>\n    <string name=\"action_display\">Display</string>\n    <string name=\"action_display_grid\">Compact grid</string>\n    <string name=\"action_display_comfortable_grid\">Comfortable grid</string>\n    <string name=\"action_display_list\">List</string>\n    <string name=\"action_display_cover_only_grid\">Cover-only grid</string>\n    <string name=\"action_display_download_badge\">Downloaded chapters</string>\n    <string name=\"action_display_unread_badge\">Unread chapters</string>\n    <string name=\"action_display_local_badge\">Local source</string>\n    <string name=\"action_display_language_badge\">Language</string>\n    <string name=\"action_display_show_tabs\">Show category tabs</string>\n    <string name=\"action_display_show_number_of_items\">Show number of items</string>\n    <string name=\"action_display_show_continue_reading_button\">Continue reading button</string>\n    <string name=\"action_disable\">Disable</string>\n    <string name=\"action_pin\">Pin</string>\n    <string name=\"action_unpin\">Unpin</string>\n    <string name=\"action_apply\">Apply</string>\n    <string name=\"action_cancel\">Cancel</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"action_cancel_all\">Cancel all</string>\n    <string name=\"cancel_all_for_series\">Cancel all for this series</string>\n    <string name=\"action_sort\">Sort</string>\n    <string name=\"action_order_by_upload_date\">By upload date</string>\n    <string name=\"action_order_by_chapter_number\">By chapter number</string>\n    <string name=\"action_newest\">Newest</string>\n    <string name=\"action_oldest\">Oldest</string>\n    <string name=\"action_asc\">Ascending</string>\n    <string name=\"action_desc\">Descending</string>\n    <string name=\"action_move_to_top\">Move to top</string>\n    <string name=\"action_move_to_top_all_for_series\">Move series to top</string>\n    <string name=\"action_move_to_bottom\">Move to bottom</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Move series to bottom</string>\n    <string name=\"action_install\">Install</string>\n    <string name=\"action_share\">Share</string>\n    <string name=\"action_save\">Save</string>\n    <string name=\"action_reset\">Reset</string>\n    <string name=\"action_revert_to_default\">Revert to default</string>\n    <!-- missing undo feature after Compose rewrite #7454 -->\n    <string name=\"action_undo\">Undo</string>\n    <string name=\"action_close\">Close</string>\n    <string name=\"action_open_log\">Open log</string>\n    <string name=\"action_show_errors\">Tap to see details</string>\n    <string name=\"action_restore\">Restore</string>\n    <string name=\"action_webview_back\">Back</string>\n    <string name=\"action_webview_forward\">Forward</string>\n    <string name=\"action_webview_refresh\">Refresh</string>\n    <string name=\"action_start_downloading_now\">Start downloading now</string>\n    <string name=\"action_not_now\">Not now</string>\n    <string name=\"action_add_anyway\">Add anyway</string>\n    <string name=\"action_migrate_duplicate\">Migrate existing entry</string>\n\n    <!-- Operations -->\n    <string name=\"loading\">Loading…</string>\n    <string name=\"internal_error\">InternalError: Check crash logs for further information</string>\n\n    <!-- Shortcuts-->\n    <string name=\"app_not_available\">App not available</string>\n\n    <!-- Onboarding -->\n    <string name=\"pref_onboarding_guide\">Onboarding guide</string>\n    <string name=\"onboarding_heading\">Welcome!</string>\n    <string name=\"onboarding_description\">Let\\'s set some things up first. You can always change these in the settings later too.</string>\n    <string name=\"onboarding_action_next\">Next</string>\n    <string name=\"onboarding_action_finish\">Get started</string>\n    <string name=\"onboarding_action_skip\">Skip</string>\n    <string name=\"onboarding_storage_info\">Select a folder where %1$s will store chapter downloads, backups, and more.\\n\\nA dedicated folder is recommended.\\n\\nSelected folder: %2$s</string>\n    <string name=\"onboarding_storage_action_select\">Select a folder</string>\n    <string name=\"onboarding_storage_selection_required\">A folder must be selected</string>\n    <string name=\"onboarding_storage_help_info\">Updating from an older version and not sure what to select? Refer to the storage guide for more information.</string>\n    <string name=\"onboarding_storage_help_action\">Storage guide</string>\n    <string name=\"onboarding_permission_install_apps\">Install apps permission</string>\n    <string name=\"onboarding_permission_install_apps_description\">To install source extensions.</string>\n    <string name=\"onboarding_permission_notifications\">Notification permission</string>\n    <string name=\"onboarding_permission_notifications_description\">Get notified for library updates and more.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Background battery usage</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Avoid interruptions to long-running library updates, downloads, and backup restores.</string>\n    <string name=\"onboarding_permission_crashlytics\">Send crash logs</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Send anonymized crash logs to the developers.</string>\n    <string name=\"onboarding_permission_analytics\">Allow analytics</string>\n    <string name=\"onboarding_permission_analytics_description\">Send anonymized usage data to improve app features.</string>\n    <string name=\"onboarding_permission_action_grant\">Grant</string>\n    <string name=\"onboarding_guides_new_user\">New to %s? We recommend checking out the getting started guide.</string>\n    <string name=\"onboarding_guides_returning_user\">Reinstalling %s?</string>\n\n    <!-- Preferences -->\n      <!-- Subsections -->\n    <string name=\"pref_category_general\">General</string>\n    <string name=\"pref_category_appearance\">Appearance</string>\n    <string name=\"pref_category_library\">Library</string>\n    <string name=\"pref_category_reader\">Reader</string>\n    <string name=\"pref_category_downloads\">Downloads</string>\n    <string name=\"pref_category_tracking\">Tracking</string>\n    <string name=\"pref_category_advanced\">Advanced</string>\n    <string name=\"pref_category_about\">About</string>\n\n    <string name=\"pref_appearance_summary\">Theme, date &amp; time format</string>\n    <string name=\"pref_library_summary\">Categories, global update, chapter swipe</string>\n    <string name=\"pref_reader_summary\">Reading mode, display, navigation</string>\n    <string name=\"pref_downloads_summary\">Automatic download, download ahead</string>\n    <string name=\"pref_tracking_summary\">One-way progress sync, enhanced sync</string>\n    <string name=\"pref_browse_summary\">Sources, extensions, global search</string>\n    <string name=\"pref_backup_summary\">Manual &amp; automatic backups, storage space</string>\n    <string name=\"pref_security_summary\">App lock, secure screen</string>\n    <string name=\"pref_advanced_summary\">Dump crash logs, battery optimizations</string>\n\n      <!-- General section -->\n    <string name=\"pref_category_theme\">Theme</string>\n    <string name=\"pref_app_theme\">App theme</string>\n    <string name=\"theme_system\">System</string>\n    <string name=\"theme_light\">Light</string>\n    <string name=\"theme_dark\">Dark</string>\n    <string name=\"theme_monet\">Dynamic</string>\n    <string name=\"theme_greenapple\">Green Apple</string>\n    <string name=\"theme_lavender\">Lavender</string>\n    <string name=\"theme_midnightdusk\">Midnight Dusk</string>\n    <string name=\"theme_monochrome\">Monochrome</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"theme_strawberrydaiquiri\">Strawberry Daiquiri</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_tealturquoise\">Teal &amp; Turquoise</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_tidalwave\">Tidal Wave</string>\n    <string name=\"pref_dark_theme_pure_black\">Pure black dark mode</string>\n    <string name=\"pref_relative_format\">Relative timestamps</string>\n    <!-- \"Today\" instead of \"2023-12-31\" -->\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" instead of \\\"%2$s\\\"</string>\n    <string name=\"pref_date_format\">Date format</string>\n\n    <string name=\"pref_manage_notifications\">Manage notifications</string>\n    <string name=\"pref_app_language\">App language</string>\n\n    <string name=\"pref_category_security\">Security and privacy</string>\n    <string name=\"pref_security\">Security</string>\n    <string name=\"pref_firebase\">Analytics and Crash logs</string>\n\n    <string name=\"lock_with_biometrics\">Require unlock</string>\n    <string name=\"lock_when_idle\">Lock when idle</string>\n    <string name=\"lock_always\">Always</string>\n    <string name=\"lock_never\">Never</string>\n    <string name=\"hide_notification_content\">Hide notification content</string>\n    <string name=\"secure_screen\">Secure screen</string>\n    <string name=\"secure_screen_summary\">Secure screen hides app contents when switching apps and block screenshots</string>\n    <string name=\"firebase_summary\">Sending crash logs and analytics will allow us to identify and fix issues, improve performance, and make future updates more relevant to your needs</string>\n\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) sources</string>\n    <string name=\"pref_show_nsfw_source\">Show in sources and extensions lists</string>\n    <string name=\"parental_controls_info\">This does not prevent unofficial or potentially incorrectly flagged extensions from surfacing NSFW (18+) content within the app.</string>\n\n    <string name=\"relative_time_today\">Today</string>\n\n      <!-- Library section -->\n    <string name=\"pref_category_display\">Display</string>\n    <string name=\"pref_library_columns\">Items per row</string>\n    <string name=\"portrait\">Portrait</string>\n    <string name=\"landscape\">Landscape</string>\n\n    <string name=\"pref_category_library_update\">Global update</string>\n    <string name=\"pref_library_update_interval\">Automatic updates</string>\n    <string name=\"update_never\">Off</string>\n    <string name=\"update_6hour\">Every 6 hours</string>\n    <string name=\"update_12hour\">Every 12 hours</string>\n    <string name=\"update_24hour\">Daily</string>\n    <string name=\"update_48hour\">Every 2 days</string>\n    <string name=\"update_72hour\">Every 3 days</string>\n    <string name=\"update_weekly\">Weekly</string>\n    <string name=\"pref_library_update_restriction\">Automatic updates device restrictions</string>\n    <string name=\"connected_to_wifi\">Only on Wi-Fi</string>\n    <string name=\"network_not_metered\">Only on unmetered network</string>\n    <string name=\"charging\">When charging</string>\n    <string name=\"restrictions\">Restrictions: %s</string>\n\n    <string name=\"pref_library_update_smart_update\">Smart update</string>\n    <string name=\"pref_update_only_completely_read\">Skip entries with unread chapter(s)</string>\n    <string name=\"pref_update_only_non_completed\">Skip entries with \\\"Completed\\\" status</string>\n    <string name=\"pref_update_only_started\">Skip unstarted entries</string>\n    <string name=\"pref_update_only_in_release_period\">Predict next release time</string>\n    <string name=\"pref_library_update_show_tab_badge\">Show unread count on Updates icon</string>\n\n    <string name=\"pref_library_update_refresh_metadata\">Automatically refresh metadata</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Check for new cover and details when updating library</string>\n\n    <string name=\"default_category\">Default category</string>\n    <string name=\"default_category_summary\">Always ask</string>\n    <string name=\"categorized_display_settings\">Per-category settings for sort</string>\n    <string name=\"pref_library_update_categories_details\">Entries in excluded categories will not be updated even if they are also in included categories.</string>\n    <string name=\"all\">All</string>\n    <string name=\"none\">None</string>\n    <string name=\"include\">Include: %s</string>\n    <string name=\"exclude\">Exclude: %s</string>\n\n    <string name=\"pref_behavior\">Behavior</string>\n    <!-- This should be to the left for RTL locales -->\n    <string name=\"pref_chapter_swipe_end\">Chapter on swipe to right</string>\n    <!-- This should be to the right for RTL locales -->\n    <string name=\"pref_chapter_swipe_start\">Chapter on swipe to left</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Mark duplicate read chapter as read</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_existing\">After reading a chapter</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_new\">After fetching new chapter</string>\n\n      <!-- Extension section -->\n    <string name=\"multi_lang\">Multi</string>\n    <string name=\"ext_updates_pending\">Updates pending</string>\n    <string name=\"ext_update\">Update</string>\n    <string name=\"ext_update_all\">Update all</string>\n    <string name=\"ext_obsolete\">Obsolete</string>\n    <string name=\"ext_install\">Install</string>\n    <string name=\"ext_pending\">Pending</string>\n    <string name=\"ext_downloading\">Downloading</string>\n    <string name=\"ext_installing\">Installing</string>\n    <string name=\"ext_installed\">Installed</string>\n    <string name=\"ext_trust\">Trust</string>\n    <string name=\"ext_untrusted\">Untrusted</string>\n    <string name=\"ext_uninstall\">Uninstall</string>\n    <string name=\"ext_remove\">Remove</string>\n    <string name=\"ext_confirm_remove\">Remove Extension?</string>\n    <string name=\"ext_app_info\">App info</string>\n    <string name=\"untrusted_extension\">Untrusted extension</string>\n    <string name=\"untrusted_extension_message\">Malicious extensions can read any stored login credentials or execute arbitrary code.\\n\\nBy trusting this extension, you accept these risks.</string>\n    <string name=\"obsolete_extension_message\">This extension is no longer available. It may not function properly and can cause issues with the app. Uninstalling it is recommended.</string>\n    <string name=\"remove_private_extension_message\">Do you really want to remove \\\"%s\\\" extension?</string>\n    <string name=\"extension_api_error\">Failed to fetch available extensions</string>\n    <string name=\"ext_info_version\">Version</string>\n    <string name=\"ext_info_language\">Language</string>\n    <string name=\"ext_info_age_rating\">Age rating</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">Sources from this extension may contain NSFW (18+) content</string>\n    <string name=\"ext_permission_install_apps_warning\">Permissions are needed to install extensions. Tap here to grant.</string>\n    <string name=\"ext_install_service_notif\">Installing extension…</string>\n    <string name=\"ext_installer_pref\">Installer</string>\n    <string name=\"ext_installer_legacy\">Legacy</string>\n    <string name=\"ext_installer_packageinstaller\" translatable=\"false\">PackageInstaller</string>\n    <string name=\"ext_installer_shizuku\" translatable=\"false\">Shizuku</string>\n    <string name=\"ext_installer_private\" translatable=\"false\">Private</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku is not running</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Install and start Shizuku to use Shizuku as extension installer.</string>\n    <string name=\"ext_revoke_trust\">Revoke trusted unknown extensions</string>\n\n    <!-- Extension repos -->\n    <string name=\"label_extension_repos\">Extension repos</string>\n    <string name=\"information_empty_repos\">You have no repos set.</string>\n    <string name=\"action_add_repo\">Add repo</string>\n    <string name=\"label_add_repo_input\">Repo URL</string>\n    <string name=\"action_add_repo_message\">Add additional repos to Mihon. This should be a URL that ends with \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">This repo already exists!</string>\n    <string name=\"action_delete_repo\">Delete repo</string>\n    <string name=\"invalid_repo_name\">Invalid repo URL</string>\n    <string name=\"delete_repo_confirmation\">Do you wish to delete the repo \\\"%s\\\"?</string>\n    <string name=\"add_repo_confirmation\">Do you wish to add the repo \\\"%s\\\"?</string>\n    <string name=\"action_open_repo\">Open source repo</string>\n    <string name=\"action_replace_repo\">Replace</string>\n    <string name=\"action_replace_repo_title\">Signing Key Fingerprint Already Exists</string>\n    <string name=\"action_replace_repo_message\">Repository %1$s has the same Signing Key Fingerprint as %2$s.\\nIf this is expected, %2$s will be replaced, otherwise contact your repo maintainer.</string>\n\n      <!-- Reader section -->\n    <string name=\"pref_fullscreen\">Fullscreen</string>\n    <string name=\"pref_show_navigation_mode\">Show tap zones overlay</string>\n    <string name=\"pref_show_navigation_mode_summary\">Briefly show when reader is opened</string>\n    <string name=\"pref_dual_page_split\">Split wide pages</string>\n    <string name=\"pref_dual_page_invert\">Invert split page placement</string>\n    <string name=\"pref_dual_page_invert_summary\">If the placement of the split wide pages don\\'t match reading direction</string>\n    <string name=\"pref_page_rotate\">Rotate wide pages to fit</string>\n    <string name=\"pref_page_rotate_invert\">Flip orientation of rotated wide pages</string>\n    <string name=\"pref_double_tap_zoom\">Double tap to zoom</string>\n    <string name=\"pref_cutout_short\">Show content in cutout area</string>\n    <string name=\"pref_page_transitions\">Animate page transitions</string>\n    <string name=\"pref_flash_page\">Flash on page change</string>\n    <string name=\"pref_flash_page_summ\">Reduces ghosting on e-ink displays</string>\n    <string name=\"pref_flash_duration\">Flash duration</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Flash every</string>\n    <string name=\"pref_flash_with\">Flash with</string>\n    <string name=\"pref_flash_style_black\">Black</string>\n    <string name=\"pref_flash_style_white\">White</string>\n    <string name=\"pref_flash_style_white_black\">White and Black</string>\n    <string name=\"pref_double_tap_anim_speed\">Double tap animation speed</string>\n    <string name=\"pref_show_page_number\">Show page number</string>\n    <string name=\"pref_show_reading_mode\">Show reading mode</string>\n    <string name=\"pref_show_reading_mode_summary\">Briefly show current mode when reader is opened</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Custom hardware bitmap threshold</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Default (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">If reader loads a blank image incrementally reduce the threshold.\\nSelected: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Use legacy decoder for long strip reader</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Affects performance. Only enable if reducing bitmap threshold doesn\\'t fix blank image issues</string>\n    <string name=\"pref_display_profile\">Custom display profile</string>\n    <string name=\"pref_crop_borders\">Crop borders</string>\n    <string name=\"pref_custom_brightness\">Custom brightness</string>\n    <string name=\"pref_grayscale\">Grayscale</string>\n    <string name=\"pref_inverted_colors\">Inverted</string>\n    <string name=\"pref_custom_color_filter\">Custom color filter</string>\n    <string name=\"pref_color_filter_mode\">Color filter blend mode</string>\n    <string name=\"filter_mode_overlay\">Overlay</string>\n    <string name=\"filter_mode_multiply\">Multiply</string>\n    <string name=\"filter_mode_screen\">Screen</string>\n    <string name=\"filter_mode_lighten\">Dodge / Lighten</string>\n    <string name=\"filter_mode_darken\">Burn / Darken</string>\n    <string name=\"pref_keep_screen_on\">Keep screen on</string>\n    <string name=\"pref_skip_read_chapters\">Skip chapters marked read</string>\n    <string name=\"pref_skip_filtered_chapters\">Skip filtered chapters</string>\n    <string name=\"pref_skip_dupe_chapters\">Skip duplicate chapters</string>\n    <string name=\"pref_reader_navigation\">Navigation</string>\n    <string name=\"pref_read_with_volume_keys\">Volume keys</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Invert volume keys</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invert tap zones</string>\n    <string name=\"tapping_inverted_none\">None</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_both\">Both</string>\n    <string name=\"pref_reader_actions\">Actions</string>\n    <string name=\"pref_read_with_long_tap\">Show actions on long tap</string>\n    <string name=\"pref_create_folder_per_manga\">Save pages into separate folders</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Creates folders according to entries\\' title</string>\n    <string name=\"pref_reader_theme\">Background color</string>\n    <string name=\"white_background\">White</string>\n    <string name=\"gray_background\">Gray</string>\n    <string name=\"black_background\">Black</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"pref_viewer_type\">Default reading mode</string>\n    <string name=\"l_nav\">L shaped</string>\n    <string name=\"kindlish_nav\">Kindle-ish</string>\n    <string name=\"edge_nav\">Edge</string>\n    <string name=\"right_and_left_nav\">Right and Left</string>\n    <string name=\"disabled_nav\">Disabled</string>\n    <string name=\"nav_zone_prev\">Prev</string>\n    <string name=\"nav_zone_next\">Next</string>\n    <string name=\"nav_zone_left\">Left</string>\n    <string name=\"nav_zone_right\">Right</string>\n    <string name=\"left_to_right_viewer\">Paged (left to right)</string>\n    <string name=\"right_to_left_viewer\">Paged (right to left)</string>\n    <string name=\"vertical_viewer\">Paged (vertical)</string>\n    <string name=\"webtoon_viewer\">Long strip</string>\n    <string name=\"vertical_plus_viewer\">Long strip with gaps</string>\n    <string name=\"pager_viewer\">Paged</string>\n    <string name=\"pref_viewer_nav\">Tap zones</string>\n    <string name=\"pref_image_scale_type\">Scale type</string>\n    <string name=\"scale_type_fit_screen\">Fit screen</string>\n    <string name=\"scale_type_stretch\">Stretch</string>\n    <string name=\"scale_type_fit_width\">Fit width</string>\n    <string name=\"scale_type_fit_height\">Fit height</string>\n    <string name=\"scale_type_original_size\">Original size</string>\n    <string name=\"scale_type_smart_fit\">Smart fit</string>\n    <string name=\"pref_navigate_pan\">Pan wide images</string>\n    <string name=\"pref_landscape_zoom\">Automatically zoom into wide images</string>\n    <string name=\"pref_zoom_start\">Zoom start position</string>\n    <string name=\"zoom_start_automatic\">Automatic</string>\n    <string name=\"zoom_start_left\">Left</string>\n    <string name=\"zoom_start_right\">Right</string>\n    <string name=\"zoom_start_center\">Center</string>\n    <string name=\"double_tap_anim_speed_0\">No animation</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Fast</string>\n    <string name=\"pref_rotation_type\">Default rotation</string>\n    <string name=\"rotation_type\">Rotation</string>\n    <string name=\"rotation_free\">Free</string>\n    <string name=\"rotation_portrait\">Portrait</string>\n    <string name=\"rotation_reverse_portrait\">Reverse portrait</string>\n    <string name=\"rotation_landscape\">Landscape</string>\n    <string name=\"rotation_force_portrait\">Locked portrait</string>\n    <string name=\"rotation_force_landscape\">Locked landscape</string>\n    <string name=\"color_filter_r_value\">Red</string>\n    <string name=\"color_filter_g_value\">Green</string>\n    <string name=\"color_filter_b_value\">Blue</string>\n    <string name=\"color_filter_a_value\">Alpha</string>\n    <string name=\"pref_always_show_chapter_transition\">Always show chapter transition</string>\n    <string name=\"pref_category_reading_mode\">Reading mode</string>\n    <string name=\"pref_category_reading\">Reading</string>\n    <string name=\"pref_webtoon_side_padding\">Side padding</string>\n    <string name=\"pref_hide_threshold\">Sensitivity for hiding menu on scroll</string>\n    <string name=\"pref_highest\">Highest</string>\n    <string name=\"pref_high\">High</string>\n    <string name=\"pref_low\">Low</string>\n    <string name=\"pref_lowest\">Lowest</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Disable zoom out</string>\n\n      <!-- Downloads section -->\n    <string name=\"pref_category_delete_chapters\">Delete chapters</string>\n    <string name=\"pref_remove_after_marked_as_read\">After manually marked as read</string>\n    <string name=\"pref_remove_after_read\">After reading automatically delete</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Allow deleting bookmarked chapters</string>\n    <string name=\"pref_remove_exclude_categories\">Excluded categories</string>\n    <string name=\"no_location_set\">No storage location set</string>\n    <string name=\"invalid_location\">Invalid location: %s</string>\n    <string name=\"disabled\">Disabled</string>\n    <string name=\"last_read_chapter\">Last read chapter</string>\n    <string name=\"second_to_last\">Second to last read chapter</string>\n    <string name=\"third_to_last\">Third to last read chapter</string>\n    <string name=\"fourth_to_last\">Fourth to last read chapter</string>\n    <string name=\"fifth_to_last\">Fifth to last read chapter</string>\n    <string name=\"pref_category_auto_download\">Auto-download</string>\n    <string name=\"pref_download_new\">Download new chapters</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Skip downloading duplicate read chapters</string>\n    <string name=\"pref_download_new_categories_details\">Entries in excluded categories will not be downloaded even if they are also in included categories.</string>\n    <string name=\"download_ahead\">Download ahead</string>\n    <string name=\"auto_download_while_reading\">Auto download while reading</string>\n    <string name=\"download_ahead_info\">Only works if the current chapter + the next one are already downloaded.</string>\n    <string name=\"save_chapter_as_cbz\">Save as CBZ archive</string>\n    <string name=\"split_tall_images\">Split tall images</string>\n    <string name=\"split_tall_images_summary\">Improves reader performance</string>\n\n    <!-- Tracking section -->\n    <string name=\"tracking_guide\">Tracking guide</string>\n    <string name=\"pref_auto_update_manga_sync\">Update progress after reading</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Update progress when marked as read</string>\n    <string name=\"services\">Trackers</string>\n    <string name=\"tracking_info\">One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button.</string>\n    <string name=\"enhanced_services\">Enhanced trackers</string>\n    <string name=\"enhanced_services_not_installed\">Available but source not installed: %s</string>\n    <string name=\"enhanced_tracking_info\">Provides enhanced features for specific sources. Entries are automatically tracked when added to your library.</string>\n    <string name=\"track_activity_name\">Tracker login</string>\n\n      <!-- Browse section -->\n    <string name=\"pref_hide_in_library_items\">Hide entries already in library</string>\n\n      <!-- Data and storage section -->\n    <string name=\"pref_storage_location\">Storage location</string>\n    <string name=\"pref_storage_location_info\">Used for automatic backups, chapter downloads, and local source.</string>\n    <string name=\"pref_create_backup\">Create backup</string>\n    <string name=\"pref_create_backup_summ\">Can be used to restore current library</string>\n    <string name=\"pref_restore_backup\">Restore backup</string>\n    <string name=\"pref_restore_backup_summ\">Restore library from backup file</string>\n    <string name=\"pref_backup_interval\">Automatic backup frequency</string>\n    <string name=\"action_create\">Create</string>\n    <string name=\"backup_created\">Backup created</string>\n    <string name=\"invalid_backup_file\">Invalid backup file:</string>\n    <string name=\"invalid_backup_file_error\">Full error:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Backup does not contain any library entries.</string>\n    <string name=\"invalid_backup_file_json\">JSON backup not supported</string>\n    <string name=\"invalid_backup_file_unknown\">Backup file is corrupted</string>\n    <string name=\"backup_restore_missing_sources\">Missing sources:</string>\n    <string name=\"backup_restore_missing_trackers\">Trackers not logged into:</string>\n    <string name=\"backup_restore_content_full\">You may need to install any missing extensions and log in to tracking services afterwards to use them.</string>\n    <string name=\"restore_completed\">Restore completed</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d sec</string>\n    <string name=\"backup_in_progress\">Backup is already in progress</string>\n    <string name=\"backup_choice\">What do you want to backup?</string>\n    <string name=\"app_settings\">App settings</string>\n    <string name=\"source_settings\">Source settings</string>\n    <string name=\"extensionRepo_settings\">Extension repos</string>\n    <string name=\"private_settings\">Include sensitive settings (e.g., tracker login tokens)</string>\n    <string name=\"non_library_settings\">All read entries</string>\n    <string name=\"creating_backup\">Creating backup</string>\n    <string name=\"creating_backup_error\">Backup failed</string>\n    <string name=\"missing_storage_permission\">Storage permissions not granted</string>\n    <string name=\"empty_backup_error\">No library entries to back up</string>\n    <string name=\"create_backup_file_error\">Couldn\\'t create a backup file</string>\n    <string name=\"restore_miui_warning\">Backup/restore may not function properly if MIUI Optimization is disabled.</string>\n    <string name=\"restore_in_progress\">Restore is already in progress</string>\n    <string name=\"restoring_backup\">Restoring backup</string>\n    <string name=\"restoring_backup_error\">Restoring backup failed</string>\n    <string name=\"restoring_backup_canceled\">Canceled restore</string>\n    <string name=\"backup_info\">You should keep copies of backups in other places as well. Backups may contain sensitive data including any stored passwords; be careful if sharing.</string>\n    <string name=\"last_auto_backup_info\">Last automatically backed up: %s</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"pref_storage_usage\">Storage usage</string>\n    <string name=\"available_disk_space_info\">Available: %1$s / Total: %2$s</string>\n    <string name=\"pref_clear_chapter_cache\">Clear chapter cache</string>\n    <string name=\"used_cache\">Used: %1$s</string>\n    <string name=\"cache_deleted\">Cache cleared, %1$d files deleted</string>\n    <string name=\"cache_delete_error\">Error occurred while clearing</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Clear chapter cache on app launch</string>\n    <string name=\"export\">Export</string>\n    <string name=\"library_list\">Library List</string>\n    <string name=\"library_exported\">Library Exported</string>\n\n    <!-- Sync section -->\n    <string name=\"syncing_library\">Syncing library</string>\n    <string name=\"library_sync_complete\">Library sync complete</string>\n\n      <!-- Advanced section -->\n    <string name=\"label_network\">Networking</string>\n    <string name=\"pref_clear_cookies\">Clear cookies</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"pref_user_agent_string\">Default user agent string</string>\n    <string name=\"error_user_agent_string_blank\">User agent string can not be blank</string>\n    <string name=\"error_user_agent_string_invalid\">Invalid user agent string</string>\n    <string name=\"pref_reset_user_agent_string\">Reset default user agent string</string>\n    <string name=\"requires_app_restart\">Requires app restart to take effect</string>\n    <string name=\"cookies_cleared\">Cookies cleared</string>\n    <string name=\"pref_invalidate_download_cache\">Reindex downloads</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Force app to recheck downloaded chapters</string>\n    <string name=\"download_cache_invalidated\">Downloads index invalidated</string>\n    <string name=\"pref_clear_database\">Clear database</string>\n    <string name=\"pref_clear_database_summary\">Delete history for entries that are not saved in your library</string>\n    <string name=\"clear_database_source_item_count\">%1$d non-library entries in database</string>\n    <string name=\"clear_database_confirmation\">Are you sure? Read chapters and progress of non-library entries will be lost</string>\n    <string name=\"clear_database_completed\">Entries deleted</string>\n    <string name=\"database_clean\">Nothing to clear</string>\n    <string name=\"pref_clear_webview_data\">Clear WebView data</string>\n    <string name=\"webview_data_deleted\">WebView data cleared</string>\n    <string name=\"pref_refresh_library_covers\">Refresh library covers</string>\n    <string name=\"pref_reset_viewer_flags\">Reset per-series reader settings</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Resets reading mode and orientation of all series</string>\n    <string name=\"pref_reset_viewer_flags_success\">All reader settings reset</string>\n    <string name=\"pref_reset_viewer_flags_error\">Couldn\\'t reset reader settings</string>\n    <string name=\"pref_dump_crash_logs\">Share crash logs</string>\n    <string name=\"pref_dump_crash_logs_summary\">Saves error logs to a file for sharing with the developers</string>\n    <string name=\"label_background_activity\">Background activity</string>\n    <string name=\"pref_disable_battery_optimization\">Disable battery optimization</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Helps with background library updates and backups</string>\n    <string name=\"battery_optimization_disabled\">Battery optimization is already disabled</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Couldn\\'t open device settings</string>\n    <string name=\"about_dont_kill_my_app\">Some manufacturers have additional app restrictions that kill background services. This website has more info on how to fix it.</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet UI</string>\n    <string name=\"pref_verbose_logging\">Verbose logging</string>\n    <string name=\"pref_verbose_logging_summary\">Print verbose logs to system log (reduces app performance)</string>\n    <string name=\"pref_debug_info\">Debug info</string>\n\n      <!-- About section -->\n    <string name=\"website\">Website</string>\n    <string name=\"version\">Version</string>\n    <string name=\"whats_new\">What\\'s new</string>\n    <string name=\"help_translate\">Help translate</string>\n    <string name=\"licenses\">Open source licenses</string>\n    <string name=\"privacy_policy\">Privacy policy</string>\n    <string name=\"check_for_updates\">Check for updates</string>\n    <string name=\"updated_version\">Updated to v%1$s</string>\n\n    <!-- ACRA -->\n    <string name=\"pref_enable_acra\">Send crash reports</string>\n    <string name=\"pref_acra_summary\">Helps fix any bugs. No sensitive data will be sent</string>\n\n\n    <!-- More -->\n    <string name=\"fdroid_warning\">F-Droid builds are not officially supported.\\nTap to learn more.</string>\n    <string name=\"label_downloaded_only\">Downloaded only</string>\n    <string name=\"pref_incognito_mode\">Incognito mode</string>\n    <string name=\"pref_incognito_mode_summary\">Pauses reading history</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pause reading history for extension</string>\n    <string name=\"notification_incognito_text\">Disable incognito mode</string>\n    <string name=\"downloaded_only_summary\">Filters all entries in your library</string>\n\n\n    <!-- Login dialog -->\n    <string name=\"login_title\">Log in to %1$s</string>\n    <string name=\"username\">Username</string>\n    <string name=\"email\">Email address</string>\n    <string name=\"password\">Password</string>\n    <string name=\"login\">Login</string>\n    <string name=\"login_success\">Logged in</string>\n    <string name=\"logout_title\">Log out from %1$s?</string>\n    <string name=\"logout\">Log out</string>\n    <string name=\"logout_success\">You are now logged out</string>\n    <string name=\"unknown_error\">Unknown error</string>\n\n    <!-- Library -->\n    <string name=\"updating_category\">Updating category</string>\n    <string name=\"manga_from_library\">From library</string>\n    <string name=\"downloaded_chapters\">Downloaded chapters</string>\n    <string name=\"intervals_header\">Intervals</string>\n    <!-- For badges/buttons on library covers. -->\n    <string name=\"overlay_header\">Overlay</string>\n    <string name=\"tabs_header\">Tabs</string>\n\n    <!-- Browse source -->\n    <!-- missing prompt after Compose rewrite #7901 -->\n    <string name=\"no_more_results\">No more results</string>\n    <string name=\"no_results_found\">No results found</string>\n    <string name=\"local_source\">Local source</string>\n    <string name=\"other_source\">Other</string>\n    <string name=\"last_used_source\">Last used</string>\n    <string name=\"pinned_sources\">Pinned</string>\n    <string name=\"action_global_search_hint\">Global search…</string>\n    <string name=\"action_global_search_query\">Search for \\\"%1$s\\\" globally</string>\n    <string name=\"latest\">Latest</string>\n    <string name=\"popular\">Popular</string>\n    <string name=\"browse\">Browse</string>\n    <string name=\"has_results\">Has results</string>\n    <string name=\"local_source_help_guide\">Local source guide</string>\n    <string name=\"no_pinned_sources\">You have no pinned sources</string>\n    <string name=\"chapter_not_found\">Chapter not found</string>\n    <string name=\"local_invalid_format\">Invalid chapter format</string>\n    <string name=\"local_filter_order_by\">Order by</string>\n    <string name=\"date\">Date</string>\n\n    <!-- Manga info -->\n    <string name=\"ongoing\">Ongoing</string>\n    <string name=\"unknown\">Unknown</string>\n    <string name=\"unknown_author\">Unknown author</string>\n    <string name=\"author\">Author</string>\n    <string name=\"artist\">Artist</string>\n    <!-- reserved for #6163 -->\n    <string name=\"unknown_status\">Unknown status</string>\n    <string name=\"licensed\">Licensed</string>\n    <string name=\"publishing_finished\">Publishing finished</string>\n    <string name=\"cancelled\">Cancelled</string>\n    <string name=\"on_hiatus\">On hiatus</string>\n    <string name=\"add_to_library\">Add to library</string>\n    <string name=\"in_library\">In library</string>\n    <!-- missing confirm menu after Compose rewrite #7901 -->\n    <string name=\"remove_from_library\">Remove from library</string>\n    <string name=\"unknown_title\">Unknown title</string>\n    <string name=\"confirm_add_duplicate_manga\">You have an entry in your library with the same name.\\n\\nDo you still wish to continue?</string>\n    <string name=\"manga_added_library\">Added to library</string>\n    <string name=\"manga_removed_library\">Removed from library</string>\n    <string name=\"manga_info_expand\">More</string>\n    <string name=\"manga_info_collapse\">Less</string>\n    <string name=\"delete_downloads_for_manga\">Delete downloaded chapters?</string>\n    <string name=\"copied_to_clipboard_plain\">Copied to clipboard</string>\n    <string name=\"copied_to_clipboard\">Copied to clipboard:\\n%1$s</string>\n    <string name=\"clipboard_copy_error\">Failed to copy to clipboard</string>\n    <string name=\"source_not_installed\">Source not installed: %1$s</string>\n    <string name=\"snack_add_to_library\">Add to library?</string>\n    <string name=\"description_placeholder\">No description</string>\n\n    <!-- Manga chapters -->\n    <string name=\"display_mode_chapter\">Chapter %1$s</string>\n    <string name=\"manga_display_interval_title\">Estimate every</string>\n    <string name=\"manga_display_modified_interval_title\">Set to update every</string>\n    <!-- \"... around 2 days\" -->\n    <string name=\"manga_interval_expected_update\">New chapters predicted to be released in around %1$s, checking around every %2$s.</string>\n    <string name=\"manga_interval_expected_update_null\">This manga is either completed, or there is no predicted release date.</string>\n    <string name=\"manga_interval_expected_update_soon\">Soon</string>\n    <string name=\"manga_interval_custom_amount\">Custom update frequency:</string>\n    <string name=\"chapter_downloading_progress\">Downloading (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Error</string>\n    <string name=\"chapter_paused\">Paused</string>\n    <string name=\"show_title\">Source title</string>\n    <string name=\"show_chapter_number\">Chapter number</string>\n    <string name=\"sort_by_source\">By source</string>\n    <string name=\"sort_by_number\">By chapter number</string>\n    <string name=\"sort_by_upload_date\">By upload date</string>\n    <string name=\"manga_download\">Download</string>\n    <string name=\"download_unread\">Unread</string>\n    <string name=\"custom_cover\">Custom cover</string>\n    <string name=\"manga_cover\">Cover</string>\n    <string name=\"cover_saved\">Cover saved</string>\n    <string name=\"error_saving_cover\">Error saving cover</string>\n    <string name=\"error_sharing_cover\">Error sharing cover</string>\n    <string name=\"confirm_delete_chapters\">Are you sure you want to delete the selected chapters?</string>\n    <string name=\"chapter_settings\">Chapter settings</string>\n    <string name=\"confirm_set_chapter_settings\">Are you sure you want to save these settings as default?</string>\n    <string name=\"also_set_chapter_settings_for_library\">Also apply to all entries in my library</string>\n    <string name=\"set_chapter_settings_as_default\">Set as default</string>\n    <string name=\"no_chapters_error\">No chapters found</string>\n    <string name=\"are_you_sure\">Are you sure?</string>\n    <string name=\"exclude_scanlators\">Exclude scanlators</string>\n    <string name=\"no_scanlators_found\">No scanlators found</string>\n    <string name=\"confirm_tracker_update\">Update trackers to chapter %d?</string>\n    <string name=\"trackers_updated_summary\">Trackers updated to chapter %d</string>\n\n    <!-- Tracking Screen -->\n    <string name=\"manga_tracking_tab\">Tracking</string>\n    <string name=\"add_tracking\">Add tracking</string>\n    <string name=\"action_track\">Track</string>\n    <string name=\"unread\">Unread</string>\n    <string name=\"reading\">Reading</string>\n    <string name=\"completed\">Completed</string>\n    <string name=\"dropped\">Dropped</string>\n    <string name=\"on_hold\">On hold</string>\n    <string name=\"paused\">Paused</string>\n    <string name=\"plan_to_read\">Plan to read</string>\n    <string name=\"repeating\">Rereading</string>\n    <string name=\"reading_list\">Reading List</string>\n    <string name=\"wish_list\">Wish List</string>\n    <string name=\"complete_list\">Complete List</string>\n    <string name=\"on_hold_list\">On Hold List</string>\n    <string name=\"unfinished_list\">Unfinished List</string>\n    <string name=\"score\">Score</string>\n    <string name=\"title\">Title</string>\n    <string name=\"status\">Status</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_started_reading_date\">Start date</string>\n    <string name=\"track_finished_reading_date\">Finish date</string>\n    <string name=\"tracked_privately\">Tracked privately</string>\n    <string name=\"action_toggle_private_on\">Track privately</string>\n    <string name=\"action_toggle_private_off\">Track publicly</string>\n    <string name=\"track_type\">Type</string>\n    <string name=\"myanimelist_relogin\">Please login to MAL again</string>\n    <string name=\"source_unsupported\">Source is not supported</string>\n    <string name=\"error_no_match\">No match found</string>\n    <string name=\"track_error\">%1$s error: %2$s</string>\n    <string name=\"track_remove_date_conf_title\">Remove date?</string>\n    <string name=\"track_remove_start_date_conf_text\">This will remove your previously selected start date from %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">This will remove your previously selected finish date from %s</string>\n    <string name=\"track_delete_title\">Remove %s tracking?</string>\n    <string name=\"track_delete_text\">This will remove the tracking locally.</string>\n    <string name=\"track_delete_remote_text\">Also remove from %s</string>\n\n    <!-- Category activity -->\n    <string name=\"error_category_exists\">A category with this name already exists!</string>\n    <!-- missing undo feature after Compose rewrite #7454 -->\n    <string name=\"snack_categories_deleted\">Categories deleted</string>\n\n    <!-- Dialog option with checkbox view -->\n    <string name=\"dialog_with_checkbox_remove_description\">This will remove the read date of this chapter. Are you sure?</string>\n    <string name=\"dialog_with_checkbox_reset\">Reset all chapters for this entry</string>\n\n    <!-- Image notifier -->\n    <string name=\"picture_saved\">Picture saved</string>\n    <string name=\"error_saving_picture\">Error saving picture</string>\n\n    <!-- Reader activity -->\n    <string name=\"custom_filter\">Custom filter</string>\n    <string name=\"set_as_cover\">Set as cover</string>\n    <string name=\"cover_updated\">Cover updated</string>\n    <string name=\"share_page_info\">%1$s: %2$s, page %3$d</string>\n    <string name=\"chapter_progress\">Page: %1$d</string>\n    <string name=\"no_next_chapter\">Next chapter not found</string>\n    <string name=\"decode_image_error\">The image couldn\\'t be loaded</string>\n    <string name=\"confirm_set_image_as_cover\">Use this image as cover art?</string>\n    <string name=\"pref_category_for_this_series\">For this series</string>\n    <string name=\"viewer\">Reading mode</string>\n    <string name=\"transition_finished\">Finished:</string>\n    <string name=\"transition_current\">Current:</string>\n    <string name=\"transition_next\">Next:</string>\n    <string name=\"transition_previous\">Previous:</string>\n    <string name=\"transition_no_next\">There\\'s no next chapter</string>\n    <string name=\"transition_no_previous\">There\\'s no previous chapter</string>\n    <string name=\"transition_pages_loading\">Loading pages…</string>\n    <string name=\"transition_pages_error\">Failed to load pages: %1$s</string>\n    <string name=\"page_list_empty_error\">No pages found</string>\n    <string name=\"loader_not_implemented_error\">Source not found</string>\n\n    <!-- Updates -->\n    <string name=\"updating_library\">Updating library</string>\n    <string name=\"update_already_running\">An update is already running</string>\n    <string name=\"cant_open_last_read_chapter\">Unable to open last read chapter</string>\n    <string name=\"updates_last_update_info\">Library last updated: %s</string>\n    <string name=\"updates_last_update_info_just_now\">Just now</string>\n    <string name=\"relative_time_span_never\">Never</string>\n    <string name=\"action_view_upcoming\">View Upcoming Updates</string>\n\n    <!-- Upcoming -->\n    <string name=\"upcoming_guide\">Upcoming Guide</string>\n    <string name=\"upcoming_calendar_next\">Next Month</string>\n    <string name=\"upcoming_calendar_prev\">Previous Month</string>\n\n    <!-- History -->\n    <string name=\"recent_manga_time\">Ch. %1$s - %2$s</string>\n    <string name=\"pref_clear_history\">Clear history</string>\n    <string name=\"clear_history_completed\">History deleted</string>\n    <string name=\"clear_history_confirmation\">Are you sure? All history will be lost.</string>\n\n    <!-- Source Screen -->\n    <string name=\"source_empty_screen\">No source found</string>\n\n    <!-- Source Filter Screen -->\n    <string name=\"source_filter_empty_screen\">No installed source found</string>\n\n    <!-- Source migration screen -->\n    <string name=\"migration_help_guide\">Source migration guide</string>\n    <string name=\"migration_dialog_what_to_include\">Select data to include</string>\n    <string name=\"migration_selection_prompt\">Select a source to migrate from</string>\n    <string name=\"migrate\">Migrate</string>\n    <!-- Make a copy (noun) when migrating. Don't use for copying to clipboard. -->\n    <string name=\"copy\">Copy</string>\n    <string name=\"empty_screen\">Well, this is awkward</string>\n    <string name=\"not_installed\">Not installed</string>\n\n    <!-- Crash screen -->\n    <string name=\"crash_screen_title\">Whoops!</string>\n    <string name=\"crash_screen_description\">%s ran into an unexpected error. We suggest you share the crash logs in our support channel on Discord.</string>\n    <string name=\"crash_screen_restart_application\">Restart the application</string>\n\n    <!-- Stats screen -->\n    <string name=\"label_overview_section\">Overview</string>\n    <string name=\"label_completed_titles\">Completed entries</string>\n    <string name=\"label_read_duration\">Read duration</string>\n    <string name=\"label_titles_section\">Entries</string>\n    <string name=\"label_titles_in_global_update\">In global update</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_read_chapters\">Read</string>\n    <string name=\"label_tracker_section\">Trackers</string>\n    <string name=\"label_tracked_titles\">Tracked entries</string>\n    <string name=\"label_mean_score\">Mean score</string>\n    <string name=\"label_used\">Used</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n\n    <!-- Downloads activity and service -->\n    <string name=\"download_queue_error\">Couldn\\'t download chapters. You can try again in the downloads section</string>\n    <string name=\"download_insufficient_space\">Couldn\\'t download chapters due to low storage space</string>\n    <string name=\"download_queue_size_warning\">Warning: large bulk downloads may lead to sources becoming slower and/or blocking Mihon. Tap to learn more.</string>\n\n    <!-- Library update service notifications -->\n    <string name=\"notification_updating_progress\">Updating library… (%s)</string>\n    <string name=\"notification_size_warning\">Large updates harm sources and may lead to slower updates and also increased battery usage. Tap to learn more.</string>\n    <string name=\"notification_new_chapters\">New chapters found</string>\n    <string name=\"notification_chapters_single\">Chapter %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Chapter %1$s and %2$d more</string>\n    <string name=\"notification_chapters_multiple\">Chapters %1$s</string>\n    <string name=\"notification_update_error\">%1$d update(s) failed</string>\n    <string name=\"learn_more\">Tap to learn more</string>\n    <string name=\"notification_cover_update_failed\">Failed to update cover</string>\n    <string name=\"notification_first_add_to_library\">Please add the entry to your library before doing this</string>\n    <string name=\"library_errors_help\">For help on how to fix library update errors, see %1$s</string>\n    <string name=\"skipped_reason_completed\">Skipped because series is complete</string>\n    <string name=\"skipped_reason_not_caught_up\">Skipped because there are unread chapters</string>\n    <string name=\"skipped_reason_not_started\">Skipped because no chapters are read</string>\n    <string name=\"skipped_reason_not_always_update\">Skipped because series does not require updates</string>\n    <string name=\"skipped_reason_not_in_release_period\">Skipped because no release was expected today</string>\n\n    <!-- File Picker Titles -->\n    <string name=\"file_select_cover\">Select cover image</string>\n    <string name=\"file_select_backup\">Select backup file</string>\n    <string name=\"file_picker_error\">No file picker app found</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Failed to acquire persistent folder access. The app may behave unexpectedly.</string>\n    <string name=\"file_null_uri_error\">No file selected</string>\n\n    <!--UpdateCheck-->\n    <string name=\"update_check_confirm\">Download</string>\n    <string name=\"update_check_open\">Open on GitHub</string>\n    <!-- reserved for future use -->\n    <string name=\"update_check_eol\">This Android version is no longer supported</string>\n    <string name=\"update_check_no_new_updates\">No new updates available</string>\n\n    <!--UpdateCheck Notifications-->\n    <string name=\"update_check_notification_download_in_progress\">Downloading…</string>\n    <string name=\"update_check_notification_download_complete\">Tap to install update</string>\n    <string name=\"update_check_notification_download_error\">Download error</string>\n    <string name=\"update_check_notification_update_available\">New version available!</string>\n\n    <!-- Information Text -->\n    <string name=\"information_no_downloads\">No downloads</string>\n    <string name=\"information_no_recent\">No recent updates</string>\n    <string name=\"information_no_recent_manga\">Nothing read recently</string>\n    <string name=\"information_empty_library\">Your library is empty</string>\n    <string name=\"information_no_manga_category\">Category is empty</string>\n    <string name=\"information_no_entries_found\">No entries found in this category</string>\n    <string name=\"getting_started_guide\">Getting started guide</string>\n    <string name=\"information_empty_category\">You have no categories. Tap the plus button to create one for organizing your library.</string>\n    <string name=\"information_empty_category_dialog\">You don\\'t have any categories yet.</string>\n    <string name=\"information_cloudflare_bypass_failure\">Failed to bypass Cloudflare</string>\n    <string name=\"information_cloudflare_help\">Tap here for help with Cloudflare</string>\n    <string name=\"information_required_plain\">*required</string>\n    <!-- Do not translate \"WebView\" -->\n    <string name=\"information_webview_required\">WebView is required for the app to function</string>\n    <!-- Do not translate \"WebView\" -->\n    <string name=\"information_webview_outdated\">Please update the WebView app for better compatibility</string>\n    <string name=\"chapter_settings_updated\">Updated default chapter settings</string>\n\n    <!-- Download Notification -->\n    <string name=\"download_notifier_downloader_title\">Downloader</string>\n    <string name=\"download_notifier_title_error\">Error</string>\n    <string name=\"download_notifier_unknown_error\">Could not download chapter due to unexpected error</string>\n    <string name=\"download_notifier_text_only_wifi\">No Wi-Fi connection available</string>\n    <string name=\"download_notifier_no_network\">No network connection available</string>\n    <string name=\"download_notifier_download_paused\">Downloads paused</string>\n    <string name=\"download_notifier_split_page_not_found\">Page %d not found while splitting</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Couldn\\'t find file path of page %d</string>\n    <string name=\"download_notifier_cache_renewal\">Checking downloads</string>\n\n    <!-- Notification channels -->\n    <string name=\"channel_common\">Common</string>\n    <string name=\"channel_progress\">Progress</string>\n    <string name=\"channel_complete\">Complete</string>\n    <string name=\"channel_errors\">Errors</string>\n    <string name=\"channel_new_chapters\">Chapter updates</string>\n    <string name=\"channel_app_updates\">App updates</string>\n    <string name=\"channel_ext_updates\">Extension updates</string>\n\n    <!-- S Pen actions -->\n    <string name=\"spen_previous_page\">Previous page</string>\n    <string name=\"spen_next_page\">Next page</string>\n\n    <!-- App widget -->\n    <string name=\"appwidget_updates_description\">See your recently updated library entries</string>\n    <string name=\"appwidget_unavailable_locked\">Widget not available when app lock is enabled</string>\n    <string name=\"remove_manga\">You are about to remove \\\"%s\\\" from your library</string>\n\n    <!-- Common exceptions -->\n    <!-- Do not translate \"WebView\" -->\n    <string name=\"exception_http\">HTTP %d, check website in WebView</string>\n    <string name=\"exception_offline\">No Internet connection</string>\n    <string name=\"exception_unknown_host\">Couldn\\'t reach %s</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/be/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\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=\"lock_after_mins\">\n        <item quantity=\"one\">Пасля %1$s хвіліны</item>\n        <item quantity=\"few\">Пасля %1$s хвілін</item>\n        <item quantity=\"many\">Пасля %1$s хвілін</item>\n        <item quantity=\"other\">Пасля %1$s хвілін</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Учора</item>\n        <item quantity=\"few\">%1$d дні таму</item>\n        <item quantity=\"many\">%1$d дзён таму</item>\n        <item quantity=\"other\">%1$d дзён таму</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Наступная непрачытаная глава</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": "i18n/src/commonMain/moko-resources/be/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_move_to_top\">Перайсці да пачатку</string>\n    <string name=\"action_desc\">Сыходны</string>\n    <string name=\"action_asc\">Узыходзячы</string>\n    <string name=\"action_oldest\">Найстарэйшы</string>\n    <string name=\"action_newest\">Найноўшы</string>\n    <string name=\"action_order_by_chapter_number\">Па нумару часткi</string>\n    <string name=\"action_order_by_upload_date\">Па даце загрузкі</string>\n    <string name=\"action_sort\">Сартаваць</string>\n    <string name=\"cancel_all_for_series\">Адмяніце ўсе для гэтай серыі</string>\n    <string name=\"action_cancel_all\">Адмяніць усе</string>\n    <string name=\"action_cancel\">Адмена</string>\n    <string name=\"action_unpin\">Адмацаваць</string>\n    <string name=\"action_pin\">Замацаваць</string>\n    <string name=\"action_disable\">Адключыць</string>\n    <string name=\"action_display_show_number_of_items\">Паказаць колькасць прадметаў</string>\n    <string name=\"action_display_show_tabs\">Паказаць укладкі катэгорый</string>\n    <string name=\"action_display_local_badge\">Значкі лакальных</string>\n    <string name=\"action_display_download_badge\">Значкі загружаных</string>\n    <string name=\"action_display_list\">Спіс</string>\n    <string name=\"action_display_comfortable_grid\">Зручная сетка</string>\n    <string name=\"action_display_grid\">Кампактная сетка</string>\n    <string name=\"action_display\">Выгляд</string>\n    <string name=\"action_display_mode\">Рэжым адлюстравання</string>\n    <string name=\"action_migrate\">Міграваць</string>\n    <string name=\"action_open_in_web_view\">Адкрыць у WebView</string>\n    <string name=\"action_open_in_browser\">Адкрыць у браўзэры</string>\n    <string name=\"action_resume\">Прадоўжыць</string>\n    <string name=\"action_start\">Пачаць</string>\n    <string name=\"action_remove\">Выдаляць</string>\n    <string name=\"action_retry\">Паўтарыць</string>\n    <string name=\"action_next_chapter\">Наступная частка</string>\n    <string name=\"action_previous_chapter\">Папярэдняя частка</string>\n    <string name=\"action_pause\">Паўза</string>\n    <string name=\"action_view_chapters\">Прагляд частак</string>\n    <string name=\"action_edit_cover\">Рэдагаваць вокладку</string>\n    <string name=\"action_move_category\">Дадаць у катэгорыі</string>\n    <string name=\"action_rename_category\">Перайменаваць катэгорыю</string>\n    <string name=\"action_edit_categories\">Рэдагаваць катэгорыі</string>\n    <string name=\"action_add_category\">Дадаць катэгорыю</string>\n    <string name=\"action_add\">Дадаць</string>\n    <string name=\"action_edit\">Рэдагаваць</string>\n    <string name=\"action_disable_all\">Адключыць усе</string>\n    <string name=\"action_enable_all\">Ўключыць усе</string>\n    <string name=\"action_update_library\">Абнавіць бібліятэку</string>\n    <string name=\"action_delete\">Выдаліць</string>\n    <string name=\"action_remove_bookmark\">Зняць закладку з часткi</string>\n    <string name=\"action_bookmark\">Закладка часткi</string>\n    <string name=\"action_download\">Скачаць</string>\n    <string name=\"action_mark_previous_as_read\">Пазначыць папярэдняе як прачытанае</string>\n    <string name=\"action_mark_as_unread\">Пазначыць як непрачытанае</string>\n    <string name=\"action_mark_as_read\">Адзначыць як прачытанае</string>\n    <string name=\"action_select_inverse\">Выбраць наадварот</string>\n    <string name=\"action_select_all\">Выбраць усе</string>\n    <string name=\"action_global_search\">Глабальны пошук</string>\n    <string name=\"action_search_settings\">Пошук налад</string>\n    <string name=\"action_search\">Пошук</string>\n    <string name=\"action_sort_date_added\">Дата дадання</string>\n    <string name=\"action_sort_chapter_fetch_date\">Дата атрымання</string>\n    <string name=\"action_sort_latest_chapter\">Апошняя частка</string>\n    <string name=\"action_sort_last_read\">Апошняе чытанне</string>\n    <string name=\"action_sort_total\">Усяго частак</string>\n    <string name=\"action_sort_alpha\">У алфавітным парадку</string>\n    <string name=\"action_filter_empty\">Зняць фільтр</string>\n    <string name=\"action_filter_unread\">Непрачытаны</string>\n    <string name=\"action_filter_tracked\">Адсочваецца</string>\n    <string name=\"action_filter_bookmarked\">Паведамленні ў закладкі</string>\n    <string name=\"action_filter\">Фільтр</string>\n    <string name=\"action_menu\">Меню</string>\n    <string name=\"action_settings\">Налады</string>\n    <string name=\"label_help\">Дапамога</string>\n    <string name=\"label_extension_info\">Інфармацыя аб пашырэнні</string>\n    <string name=\"name\">Назва</string>\n    <string name=\"label_extensions\">Пашырэння</string>\n    <string name=\"label_migration\">перанесці дадзеныя</string>\n    <string name=\"label_backup\">Рэзервовае капіяванне і аднаўленне</string>\n    <string name=\"label_sources\">Крыніцы</string>\n    <string name=\"label_recent_manga\">Гісторыя</string>\n    <string name=\"label_recent_updates\">Абнаўленні</string>\n    <string name=\"label_library\">Бібліятэка</string>\n    <string name=\"label_download_queue\">Чарга загрузак</string>\n    <string name=\"label_settings\">Налады</string>\n    <string name=\"label_more\">Яшчэ</string>\n    <string name=\"history\">Гісторыя</string>\n    <string name=\"track\">Адсочванне</string>\n    <string name=\"chapters\">Часткi</string>\n    <string name=\"manga\">Манга</string>\n    <string name=\"categories\">Катэгорыі</string>\n    <string name=\"ext_uninstall\">Выдаліць</string>\n    <string name=\"ext_untrusted\">Ненадзейны</string>\n    <string name=\"ext_trust\">Надзейны</string>\n    <string name=\"ext_installed\">Усталяваны</string>\n    <string name=\"ext_installing\">Устаноўка</string>\n    <string name=\"ext_downloading\">Загрузка</string>\n    <string name=\"ext_pending\">Чаканне</string>\n    <string name=\"ext_install\">Усталяваць</string>\n    <string name=\"ext_obsolete\">Састарэла</string>\n    <string name=\"ext_update\">Абнаўленне</string>\n    <string name=\"ext_updates_pending\">Даступны абнаўлення</string>\n    <string name=\"exclude\">Выключыць: %s</string>\n    <string name=\"include\">Уключаць: %s</string>\n    <string name=\"none\">Ніхто</string>\n    <string name=\"all\">Усе</string>\n    <string name=\"pref_library_update_categories_details\">Манга ў выключаных катэгорыях не будзе абнаўляцца, нават калі яны таксама знаходзяцца ў уключаных катэгорыях.</string>\n    <string name=\"categorized_display_settings\">Налады для кожнай катэгорыі для сартавання і адлюстравання</string>\n    <string name=\"default_category_summary\">Заўсёды пытацца</string>\n    <string name=\"default_category\">Катэгорыя па змаўчанні</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Правераць наяўнасць новай вокладкі і дэталяў пры абнаўленні бібліятэкі</string>\n    <string name=\"pref_library_update_refresh_metadata\">Аўтаматычнае абнаўленне метададзеных</string>\n    <string name=\"pref_update_only_non_completed\">Абнаўляць толькі незавершаную мангу</string>\n    <string name=\"restrictions\">Абмежаванні: %s</string>\n    <string name=\"charging\">Зарадка</string>\n    <string name=\"pref_library_update_restriction\">Абмежаванні на абнаўленне</string>\n    <string name=\"update_weekly\">Штотыдзень</string>\n    <string name=\"update_48hour\">Кожныя 2 дні</string>\n    <string name=\"update_24hour\">Штодня</string>\n    <string name=\"update_12hour\">Кожныя 12 гадзін</string>\n    <string name=\"update_6hour\">Кожныя 6 гадзін</string>\n    <string name=\"update_never\">Уручную</string>\n    <string name=\"pref_library_update_interval\">Частата абнаўлення</string>\n    <string name=\"pref_category_library_update\">Глабальнае абнаўленне</string>\n    <string name=\"landscape\">Гарызантальная</string>\n    <string name=\"portrait\">Партрэтная</string>\n    <string name=\"pref_library_columns\">Элементы ў радку</string>\n    <string name=\"pref_category_display\">Адлюстраванне</string>\n    <string name=\"parental_controls_info\">Гэта не перашкаджае таму, каб неафіцыйныя або патэнцыйна няправільна пазначаныя пашырэння адлюстроўвалі змесціва NSFW (18+) у дадатку.</string>\n    <string name=\"pref_show_nsfw_source\">Паказаць у спісе крыніц</string>\n    <string name=\"pref_category_nsfw_content\">Крыніцы NSFW (18+)</string>\n    <string name=\"hide_notification_content\">Схаваць змесціва апавяшчэнняў</string>\n    <string name=\"secure_screen_summary\">Схаваць змесціва прыкладання пры пераключэнні на іншыя прыкладання і блакаваць скрыншоты</string>\n    <string name=\"secure_screen\">Абарона экрана</string>\n    <string name=\"lock_never\">Ніколі</string>\n    <string name=\"lock_always\">Заўсёды</string>\n    <string name=\"lock_when_idle\">Блакаванне пры бяздзейнасці</string>\n    <string name=\"lock_with_biometrics\">Патрабаваць разблакоўку</string>\n    <string name=\"pref_category_security\">Бяспека</string>\n    <string name=\"pref_manage_notifications\">Кіраванне апавяшчэннямі</string>\n    <string name=\"pref_date_format\">Фармат даты</string>\n    <string name=\"pref_dark_theme_pure_black\">Чысты чорны цёмны рэжым</string>\n    <string name=\"theme_yotsuba\">Ёцуба</string>\n    <string name=\"theme_yinyang\">Інь і Ян</string>\n    <string name=\"theme_tako\">Тако</string>\n    <string name=\"theme_strawberrydaiquiri\">Клубнічны дайкiры</string>\n    <string name=\"theme_midnightdusk\">Паўночнае змярканне</string>\n    <string name=\"theme_greenapple\">Зялёны яблык</string>\n    <string name=\"theme_monet\">Дынамічная</string>\n    <string name=\"pref_app_theme\">Тэма прыкладання</string>\n    <string name=\"theme_dark\">Уключаны</string>\n    <string name=\"theme_light\">Выключаны</string>\n    <string name=\"theme_system\">У адпаведнасці з сістэмнай тэмай</string>\n    <string name=\"pref_category_theme\">Тэма</string>\n    <string name=\"pref_category_about\">Інфармацыя</string>\n    <string name=\"pref_category_advanced\">Дадаткова</string>\n    <string name=\"pref_category_tracking\">Адсочванне</string>\n    <string name=\"pref_category_downloads\">Загрузкi</string>\n    <string name=\"pref_category_reader\">Чыталка</string>\n    <string name=\"pref_category_library\">Бібліятэка</string>\n    <string name=\"pref_category_general\">Агульныя</string>\n    <string name=\"app_not_available\">Дадатак недаступны</string>\n    <string name=\"loading\">Пагрузка…</string>\n    <string name=\"action_start_downloading_now\">Пачаць загрузку прама зараз</string>\n    <string name=\"action_webview_refresh\">Асвяжыць</string>\n    <string name=\"action_webview_forward\">Наперад</string>\n    <string name=\"action_webview_back\">Назад</string>\n    <string name=\"action_restore\">Аднавіць</string>\n    <string name=\"action_show_errors\">Паказваць памылкі</string>\n    <string name=\"action_open_log\">Адкрыць часопіс</string>\n    <string name=\"action_undo\">Адмяніць</string>\n    <string name=\"action_reset\">Скід</string>\n    <string name=\"action_save\">Захаваць</string>\n    <string name=\"action_share\">Падзяліцца</string>\n    <string name=\"action_install\">Усталяваць</string>\n    <string name=\"action_move_to_bottom\">Перайсцi на дно</string>\n    <string name=\"information_no_recent\">Ніякіх апошніх абнаўленняў</string>\n    <string name=\"information_no_downloads\">Няма загрузак</string>\n    <string name=\"pref_page_transitions\">Анімацыя пераходаў паміж старонкамі</string>\n    <string name=\"pref_cutout_short\">Паказваць змесціва ў галіне выраза</string>\n    <string name=\"pref_dual_page_invert_summary\">Калі размяшчэнне падзелу на дзве старонкі не адпавядае кірунку чытання</string>\n    <string name=\"pref_dual_page_invert\">Інвертаваць размяшчэнне з падзелам на дзве старонкі</string>\n    <string name=\"pref_dual_page_split\">Падзел на дзве старонкі</string>\n    <string name=\"pref_show_navigation_mode_summary\">Паказваць зоны дотыку калі чыталка адкрыта</string>\n    <string name=\"pref_show_navigation_mode\">Паказваць накладанне схемы навігацыі</string>\n    <string name=\"pref_fullscreen\">Поўнаэкранны рэжым</string>\n    <string name=\"ext_nsfw_warning\">Можа ўтрымліваць кантэнт NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"obsolete_extension_message\">Гэта пашырэнне больш недаступна.</string>\n    <string name=\"untrusted_extension_message\">Гэта пашырэнне было падпісана ненадзейным сертыфікатам і не было актывавана.\n\\n\n\\nШкоднаснае пашырэнне можа счытваць любыя ўліковыя дадзеныя для ўваходу, якія захоўваюцца ў Mihon, або выконваць адвольны код.\n\\n\n\\nДавяраючы гэтаму сертыфікату, вы прымаеце на сябе гэтыя рызыкі.</string>\n    <string name=\"untrusted_extension\">Ненадзейнае пашырэнне</string>\n    <string name=\"pref_viewer_nav\">Схема навігацыі</string>\n    <string name=\"pager_viewer\">Пастаронкава</string>\n    <string name=\"vertical_plus_viewer\">Бесперапынна вертыкальна</string>\n    <string name=\"webtoon_viewer\">Вэб-комікс</string>\n    <string name=\"vertical_viewer\">Вертыкальна</string>\n    <string name=\"right_to_left_viewer\">Справа налева</string>\n    <string name=\"left_to_right_viewer\">Злева направа</string>\n    <string name=\"nav_zone_right\">Справа</string>\n    <string name=\"nav_zone_left\">Злева</string>\n    <string name=\"nav_zone_next\">Наступная</string>\n    <string name=\"nav_zone_prev\">Папярэдняя</string>\n    <string name=\"right_and_left_nav\">Справа і злева</string>\n    <string name=\"edge_nav\">Край</string>\n    <string name=\"kindlish_nav\">Kindle-падобная</string>\n    <string name=\"l_nav\">L-вобразная форма</string>\n    <string name=\"pref_viewer_type\">Рэжым чытання па змаўчанні</string>\n    <string name=\"automatic_background\">Аўтаматычна</string>\n    <string name=\"black_background\">Чорны</string>\n    <string name=\"gray_background\">Шэры</string>\n    <string name=\"white_background\">Белы</string>\n    <string name=\"pref_reader_theme\">Колер фону</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Ствараць тэчкі ў адпаведнасці з назвай мангі</string>\n    <string name=\"pref_create_folder_per_manga\">Захоўваць старонкі ў асобныя тэчкі</string>\n    <string name=\"pref_read_with_long_tap\">Паказаць пры доўгім націску</string>\n    <string name=\"pref_reader_actions\">Дзеяння</string>\n    <string name=\"tapping_inverted_both\">Абодва</string>\n    <string name=\"tapping_inverted_vertical\">Вертыкальна</string>\n    <string name=\"tapping_inverted_horizontal\">Гарызантальна</string>\n    <string name=\"tapping_inverted_none\">Не</string>\n    <string name=\"pref_read_with_tapping_inverted\">Націск наадварот</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Інвертаваць клавішы рэгулявання гучнасці</string>\n    <string name=\"pref_read_with_volume_keys\">Клавішы рэгулявання гучнасці</string>\n    <string name=\"pref_reader_navigation\">Навігацыя</string>\n    <string name=\"pref_skip_filtered_chapters\">Прапусціць адфільтраваныя часткi</string>\n    <string name=\"pref_skip_read_chapters\">Прапусціць часткi, адзначаныя як прачытаныя</string>\n    <string name=\"pref_keep_screen_on\">Трымаць экран уключаным</string>\n    <string name=\"filter_mode_darken\">Зацямненьне</string>\n    <string name=\"filter_mode_lighten\">Асвятленне</string>\n    <string name=\"filter_mode_screen\">Экран</string>\n    <string name=\"filter_mode_multiply\">Множанне</string>\n    <string name=\"filter_mode_overlay\">Перакрыцце</string>\n    <string name=\"pref_color_filter_mode\">Рэжым накладання каляровага фільтра</string>\n    <string name=\"pref_custom_color_filter\">Карыстацкі каляровы фільтр</string>\n    <string name=\"pref_grayscale\">Адценні шэрага</string>\n    <string name=\"pref_custom_brightness\">Карыстацкая яркасць</string>\n    <string name=\"off\">Выключаны</string>\n    <string name=\"on\">Уключаны</string>\n    <string name=\"pref_crop_borders\">Абрэзаць поля</string>\n    <string name=\"pref_show_reading_mode_summary\">Ненадоўга адлюстраваць бягучы рэжым пры адкрыцці чыталкі</string>\n    <string name=\"pref_show_reading_mode\">Паказаць рэжым чытання</string>\n    <string name=\"pref_show_page_number\">Паказаць нумар старонкі</string>\n    <string name=\"pref_double_tap_anim_speed\">Хуткасць анімацыі падвойнага націску</string>\n    <string name=\"double_tap_anim_speed_fast\">Хуткая</string>\n    <string name=\"double_tap_anim_speed_normal\">Звычайная</string>\n    <string name=\"double_tap_anim_speed_0\">Ніякай анімацыі</string>\n    <string name=\"zoom_start_center\">Цэнтральная</string>\n    <string name=\"zoom_start_right\">Справа</string>\n    <string name=\"zoom_start_left\">Злева</string>\n    <string name=\"zoom_start_automatic\">Аўтаматычная</string>\n    <string name=\"pref_zoom_start\">Стартавая пазіцыя павелічэння</string>\n    <string name=\"scale_type_smart_fit\">Разумны</string>\n    <string name=\"scale_type_original_size\">Зыходны памер</string>\n    <string name=\"scale_type_fit_height\">Па вышыні</string>\n    <string name=\"scale_type_fit_width\">Па шырыні</string>\n    <string name=\"scale_type_stretch\">Расцягнуць</string>\n    <string name=\"scale_type_fit_screen\">Змясціць у экран</string>\n    <string name=\"pref_image_scale_type\">Маштабаванне</string>\n    <string name=\"pref_inverted_colors\">Колеры наадварот</string>\n    <string name=\"relative_time_today\">Сёння</string>\n    <string name=\"theme_tealturquoise\">Бірузовы</string>\n    <string name=\"pref_category_appearance\">Знешнасць</string>\n    <string name=\"confirm_lock_change\">Аўтэнтыфікацыя для пацверджання змяненняў</string>\n    <string name=\"label_default\">Па змаўчанні</string>\n    <string name=\"information_empty_category\">У вас няма катэгорый. Націсніце кнопку \\\"Плюс\\\", каб стварыць яе для арганізацыі вашай бібліятэкі.</string>\n    <string name=\"information_empty_library\">Ваша бібліятэка пустая</string>\n    <string name=\"information_no_recent_manga\">У апошні час нічога не прачытана</string>\n    <string name=\"action_track\">Адсочваць</string>\n    <string name=\"enhanced_tracking_info\">Службы, якія прадстаўляюць пашыраныя функцыі для пэўных крыніц. Манга аўтаматычна адсочваецца пры даданні ў вашу бібліятэку.</string>\n    <string name=\"enhanced_services\">Пашыраныя паслугі</string>\n    <string name=\"tracking_info\">Аднабаковая сінхранізацыя для абнаўлення прагрэсу частак у службах адсочвання. Наладзьце адсочванне асобных запісаў мангі з дапамогай кнопкі адсочвання.</string>\n    <string name=\"services\">Паслугi</string>\n    <string name=\"pref_auto_update_manga_sync\">Абнаўляць прагрэс пасля чытання</string>\n    <string name=\"tracking_guide\">Кіраўніцтва па адсочванні</string>\n    <string name=\"pref_download_new_categories_details\">Манга ў выключаных катэгорыях не будзе загружана, нават калі яны таксама знаходзяцца ў уключаных катэгорыях.</string>\n    <string name=\"pref_download_new\">Спампаваць новыя часткi</string>\n    <string name=\"pref_category_auto_download\">Аўтаматычная загрузка</string>\n    <string name=\"fifth_to_last\">Пятая ад прачытанай часткi</string>\n    <string name=\"fourth_to_last\">Чацвёртая ад прачытанай часткi</string>\n    <string name=\"third_to_last\">Трэцяя ад прачытанай часткі</string>\n    <string name=\"second_to_last\">Перадапошняя частка</string>\n    <string name=\"last_read_chapter\">Апошняя прачытаная частка</string>\n    <string name=\"disabled\">Адключана</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Дазволіць выдаленне частак з закладкамі</string>\n    <string name=\"pref_remove_after_read\">Аўтаматычна пасля чытання</string>\n    <string name=\"pref_remove_after_marked_as_read\">Пасля таго, як пазначана як \\\"Прачытанае\\\"</string>\n    <string name=\"pref_category_delete_chapters\">Выдаліць часткі</string>\n    <string name=\"pref_lowest\">Найнізкая</string>\n    <string name=\"pref_low\">Нізкая</string>\n    <string name=\"pref_high\">Высокая</string>\n    <string name=\"pref_highest\">Найвышэйшая</string>\n    <string name=\"pref_hide_threshold\">Аўтаматычнае утойванне меню пры адчувальнасці да прагортцы</string>\n    <string name=\"pref_webtoon_side_padding\">Бакавой водступ</string>\n    <string name=\"pref_category_reading\">Чытаньне</string>\n    <string name=\"pref_category_reading_mode\">Рэжым чытання</string>\n    <string name=\"pref_always_show_chapter_transition\">Заўсёды паказваць пераход паміж часткамі</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"rotation_force_landscape\">Заблакаваная альбомная</string>\n    <string name=\"rotation_free\">Свабодная</string>\n    <string name=\"rotation_portrait\">Партрэтная</string>\n    <string name=\"rotation_landscape\">Альбомная</string>\n    <string name=\"rotation_force_portrait\">Заблакаваная партрэтная</string>\n    <string name=\"rotation_type\">Тып арыентацыі</string>\n    <string name=\"pref_rotation_type\">Тып арыентацыі па змаўчанні</string>\n    <string name=\"label_warning\">папярэджанне</string>\n    <string name=\"delete_category\">Выдаліць катэгорыю</string>\n    <string name=\"delete_category_confirmation\">Вы хочаце выдаліць катэгорыю \\\"%s\\\"?</string>\n    <string name=\"internal_error\">InternalError: Праверце журнал збояў для атрымання дадатковай інфармацыі</string>\n    <string name=\"ext_update_all\">Абнавіць усё</string>\n    <string name=\"ext_info_age_rating\">Узроставае абмежаванне</string>\n    <string name=\"pref_update_only_started\">Не пачата</string>\n    <string name=\"action_show_manga\">Паказаць мангу</string>\n    <string name=\"ext_info_version\">Версія</string>\n    <string name=\"action_sort_last_manga_update\">Апошняе абнаўленне мангі</string>\n    <string name=\"action_sort_unread_count\">Колькасць непрачытаных</string>\n    <string name=\"extension_api_error\">Не ўдалося атрымаць спіс пашырэнняў</string>\n    <string name=\"action_display_cover_only_grid\">Сетка без назвы</string>\n    <string name=\"ext_app_info\">Аб дадатку</string>\n    <string name=\"action_sort_count\">Колькасць мангі</string>\n    <string name=\"action_display_language_badge\">Мова</string>\n    <string name=\"network_not_metered\">Толькі ў безлемітнай сетцы</string>\n    <string name=\"ext_info_language\">Мова</string>\n    <string name=\"theme_lavender\">Лаванда</string>\n    <string name=\"pref_app_language\">Мова дадатку</string>\n    <string name=\"pref_update_only_completely_read\">Ёсць непрачытаныя главы</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku не працуе</string>\n    <string name=\"action_close\">Закрыць</string>\n    <string name=\"ext_install_service_notif\">Устаноўка пашырэнняў…</string>\n    <string name=\"action_move_to_top_all_for_series\">Перамясціць у пачатак спісу</string>\n    <string name=\"ext_installer_pref\">Усталёўнік</string>\n    <string name=\"ext_installer_legacy\">па змаўчанні</string>\n    <string name=\"action_remove_everything\">Выдаліць усё</string>\n    <string name=\"update_72hour\">Кожныя 3 дні</string>\n    <string name=\"connected_to_wifi\">Толькі па Wi-Fi</string>\n    <string name=\"not_selected\">Не выбрана</string>\n    <string name=\"action_bar_up_description\">Перайсці ўверх</string>\n    <string name=\"unlock_app_title\">Разблакіраваць %s</string>\n    <string name=\"label_started\">Пачата</string>\n    <string name=\"selected\">Выбрана</string>\n    <string name=\"action_menu_overflow_description\">Другія опцыі</string>\n    <string name=\"delete_downloaded\">Выдаліць загружанае</string>\n    <string name=\"label_data_storage\">Даныя і хаванне</string>\n    <string name=\"label_stats\">Статыстыка</string>\n    <string name=\"label_local\">На ўстройстве</string>\n    <string name=\"action_set_interval\">Задаць інтэрвал</string>\n    <string name=\"action_filter_interval_custom\">Наладжвальная частата абнаўлення</string>\n    <string name=\"label_upcoming\">Наступнае</string>\n    <string name=\"scanlator\">Перакладчык</string>\n    <string name=\"label_downloaded\">Загружана</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/bg/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">1 наличен ъпдейт за разширение</item>\n        <item quantity=\"other\">%d налични ъпдейта за разширения</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Глави %1$s и още 1</item>\n        <item quantity=\"other\">Глави %1$s и още %2$d</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">1 нова глава</item>\n        <item quantity=\"other\">%1$d нови глави</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">За 1 заглавие</item>\n        <item quantity=\"other\">За %d заглавия</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">1 оставаща</item>\n        <item quantity=\"other\">%1$s оставащи</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">След 1 минута</item>\n        <item quantity=\"other\">След %1$s минути</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Направено за %1$s с %2$s грешка</item>\n        <item quantity=\"other\">Направено за %1$s с %2$s грешки</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d категория</item>\n        <item quantity=\"other\">%d категории</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">1 глава</item>\n        <item quantity=\"other\">%1$s глави</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">1 тракер</item>\n        <item quantity=\"other\">%d тракери</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Има 1 липсваща глава, източникът липса или е филтриран</item>\n        <item quantity=\"other\">Има %d липсващи глави, източникът липса или е филтриран</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Вчера</item>\n        <item quantity=\"other\">Преди %1$d дни</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Следващата непрочетена глава</item>\n        <item quantity=\"other\">Следващите %d непрочетени глави</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 ден</item>\n        <item quantity=\"other\">%d дни</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Липсваща %1$s глава</item>\n        <item quantity=\"other\">Липсващи %1$s глави</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Следваща глава</item>\n        <item quantity=\"other\">Следващи %d глави</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d хранилище</item>\n        <item quantity=\"other\">%d хранилища</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/bg/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Име</string>\n    <string name=\"label_settings\">Настройки</string>\n    <string name=\"label_download_queue\">Изтегляния</string>\n    <string name=\"label_library\">Библиотека</string>\n    <string name=\"label_recent_manga\">История</string>\n    <string name=\"label_recent_updates\">Нови глави</string>\n    <string name=\"label_backup\">Запази и възстанови</string>\n    <string name=\"action_settings\">Настройки</string>\n    <string name=\"action_filter\">Филтрирай</string>\n    <string name=\"action_filter_bookmarked\">Отбелязани</string>\n    <string name=\"action_filter_unread\">Непрочетени</string>\n    <string name=\"action_filter_empty\">Премахни филтрирането</string>\n    <string name=\"action_sort_alpha\">Азбучен ред</string>\n    <string name=\"action_sort_last_read\">Последно четене</string>\n    <string name=\"action_search\">Търсене</string>\n    <string name=\"action_select_all\">Избери всички</string>\n    <string name=\"action_mark_as_read\">Отбележи като прочетена</string>\n    <string name=\"action_mark_as_unread\">Отбележи като непрочетена</string>\n    <string name=\"action_mark_previous_as_read\">Отбележи предните глави като прочетени</string>\n    <string name=\"action_download\">Изтегли</string>\n    <string name=\"action_bookmark\">Отметни</string>\n    <string name=\"action_remove_bookmark\">Премахни отметнатата глава</string>\n    <string name=\"action_delete\">Изтрий</string>\n    <string name=\"action_update_library\">Обнови библиотеката</string>\n    <string name=\"action_edit\">Редактирай</string>\n    <string name=\"action_add\">Добави</string>\n    <string name=\"action_add_category\">Добави категория</string>\n    <string name=\"action_edit_categories\">Редактирай категории</string>\n    <string name=\"action_rename_category\">Преименувай категория</string>\n    <string name=\"action_move_category\">Запиши в категории</string>\n    <string name=\"action_edit_cover\">Промени корица</string>\n    <string name=\"action_pause\">Паузирай</string>\n    <string name=\"action_previous_chapter\">Предишна глава</string>\n    <string name=\"action_next_chapter\">Следваща глава</string>\n    <string name=\"action_retry\">Опитай пак</string>\n    <string name=\"action_remove\">Премахни</string>\n    <string name=\"action_resume\">Продължи</string>\n    <string name=\"action_open_in_browser\">Отвори в браузър</string>\n    <string name=\"action_display_mode\">Режим на показване</string>\n    <string name=\"action_display\">Покажи</string>\n    <string name=\"action_display_grid\">Компактна решетка</string>\n    <string name=\"action_display_list\">Списък</string>\n    <string name=\"action_cancel\">Отмени</string>\n    <string name=\"action_sort\">Сортирай</string>\n    <string name=\"action_install\">Инсталирай</string>\n    <string name=\"action_share\">Сподели</string>\n    <string name=\"action_save\">Запази</string>\n    <string name=\"action_reset\">Изчисти</string>\n    <string name=\"action_undo\">Върни</string>\n    <string name=\"loading\">Зареждане…</string>\n    <string name=\"pref_category_general\">Основни настройки</string>\n    <string name=\"pref_category_reader\">Четец</string>\n    <string name=\"pref_category_downloads\">Изтегляния</string>\n    <string name=\"pref_category_tracking\">Следене</string>\n    <string name=\"pref_category_advanced\">Разширени настройки</string>\n    <string name=\"pref_category_about\">За приложението</string>\n    <string name=\"pref_library_columns\">Манга на ред</string>\n    <string name=\"portrait\">Портретно</string>\n    <string name=\"landscape\">Пейзажно</string>\n    <string name=\"pref_library_update_interval\">Автоматини ъпдейти</string>\n    <string name=\"update_never\">Изключено</string>\n    <string name=\"update_6hour\">На всеки 6 часа</string>\n    <string name=\"update_12hour\">На всеки 12 часа</string>\n    <string name=\"update_24hour\">Ежедневно</string>\n    <string name=\"update_48hour\">През ден</string>\n    <string name=\"all\">Всички</string>\n    <string name=\"pref_library_update_restriction\">Автоматични актуализации на ограниченията на устройството</string>\n    <string name=\"charging\">На зарядно устройство</string>\n    <string name=\"pref_update_only_non_completed\">Със статус \\\"Завършена\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Обнови прогреса след прочитане</string>\n    <string name=\"pref_fullscreen\">Цял екран</string>\n    <string name=\"pref_page_transitions\">Анимирани преходи</string>\n    <string name=\"pref_show_page_number\">Номер на страница</string>\n    <string name=\"pref_custom_brightness\">Персонализирана яркост</string>\n    <string name=\"pref_custom_color_filter\">Персонализиран цветен филтър</string>\n    <string name=\"pref_keep_screen_on\">Не изключвай екрана</string>\n    <string name=\"pref_reader_navigation\">Навигация</string>\n    <string name=\"pref_read_with_volume_keys\">Бутони за звука</string>\n    <string name=\"pref_reader_theme\">Цвят на фона</string>\n    <string name=\"white_background\">Бял</string>\n    <string name=\"black_background\">Черен</string>\n    <string name=\"pref_viewer_type\">Режим на четене по подразбиране</string>\n    <string name=\"left_to_right_viewer\">От ляво надясно</string>\n    <string name=\"right_to_left_viewer\">От дясно наляво</string>\n    <string name=\"vertical_viewer\">Вертикално</string>\n    <string name=\"webtoon_viewer\">Уебкомикс</string>\n    <string name=\"pref_image_scale_type\">Увеличение</string>\n    <string name=\"scale_type_fit_screen\">Запълване</string>\n    <string name=\"scale_type_stretch\">Разтегляне</string>\n    <string name=\"scale_type_fit_width\">По ширина</string>\n    <string name=\"scale_type_fit_height\">По височина</string>\n    <string name=\"scale_type_original_size\">Оригинален размер</string>\n    <string name=\"scale_type_smart_fit\">Умно увеличение</string>\n    <string name=\"pref_zoom_start\">Начална позиция при увеличаване</string>\n    <string name=\"zoom_start_automatic\">Автоматична</string>\n    <string name=\"zoom_start_left\">Ляво</string>\n    <string name=\"zoom_start_right\">Дясно</string>\n    <string name=\"zoom_start_center\">Центрирано</string>\n    <string name=\"pref_rotation_type\">Стандартна ориентация</string>\n    <string name=\"rotation_free\">Свободно</string>\n    <string name=\"rotation_force_portrait\">Заключено - портрет</string>\n    <string name=\"rotation_force_landscape\">Заключено - пейзаж</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">След маркиране като прочетено</string>\n    <string name=\"pref_remove_after_read\">След прочитане автоматично изтрийте</string>\n    <string name=\"disabled\">Изключено</string>\n    <string name=\"last_read_chapter\">Последно прочетена глава</string>\n    <string name=\"second_to_last\">Предпоследна прочетена глава</string>\n    <string name=\"third_to_last\">Предпоследна трета прочетена глава</string>\n    <string name=\"fourth_to_last\">Четвърта предпоследна прочетена глава</string>\n    <string name=\"fifth_to_last\">Пета предпоследна прочетена глава</string>\n    <string name=\"pref_download_new\">Изтегляй нови глави</string>\n    <string name=\"services\">Услуги</string>\n    <string name=\"pref_clear_chapter_cache\">Изчисти кеша на главите</string>\n    <string name=\"used_cache\">Използвани: %1$s</string>\n    <string name=\"cache_deleted\">Кеш изчистен. %1$d файла бяха изчистени</string>\n    <string name=\"cache_delete_error\">Възникна грешка при изчистването на кеша</string>\n    <string name=\"pref_clear_cookies\">Изчисти бисквитки</string>\n    <string name=\"cookies_cleared\">Бисквитки изчистени</string>\n    <string name=\"pref_clear_database\">Изчисти базата данни</string>\n    <string name=\"pref_clear_database_summary\">Изтрий историята на манги, които не са запазени в библиотеката</string>\n    <string name=\"clear_database_confirmation\">Сигурни ли сте? Прочетените глави и напредъкът на манги, които не са в библиотеката Ви, ще бъдат изгубени</string>\n    <string name=\"clear_database_completed\">Базата данни изчистена</string>\n    <string name=\"version\">Версия</string>\n    <string name=\"pref_enable_acra\">Изпращай данни за сривове</string>\n    <string name=\"pref_acra_summary\">Помага за оправянето на бъгове. Няма да се изпращат лични данни</string>\n    <string name=\"login_title\">Влизане в %1$s</string>\n    <string name=\"username\">Потребителско име</string>\n    <string name=\"password\">Парола</string>\n    <string name=\"login\">Влез</string>\n    <string name=\"login_success\">Влязохте</string>\n    <string name=\"unknown_error\">Неизвестна грешка</string>\n    <string name=\"updating_category\">Обновяване на категорията</string>\n    <string name=\"no_more_results\">Няма повече резултати</string>\n    <string name=\"ongoing\">Излизаща</string>\n    <string name=\"unknown\">Неизвестно</string>\n    <string name=\"licensed\">Лицензирана</string>\n    <string name=\"remove_from_library\">Премахни от библиотеката</string>\n    <string name=\"display_mode_chapter\">Глава %1$s</string>\n    <string name=\"chapter_downloading_progress\">Изтегляне (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Грешка</string>\n    <string name=\"show_title\">Оригинално заглавие</string>\n    <string name=\"show_chapter_number\">Номер на главата</string>\n    <string name=\"sort_by_source\">По източник</string>\n    <string name=\"sort_by_number\">По ред на главите</string>\n    <string name=\"manga_download\">Изтегли</string>\n    <string name=\"download_unread\">Непрочетени</string>\n    <string name=\"confirm_delete_chapters\">Сигурни ли сте, че искате да изтриете избраните глави?</string>\n    <string name=\"manga_tracking_tab\">Следене</string>\n    <string name=\"reading\">Чета</string>\n    <string name=\"completed\">Завършена</string>\n    <string name=\"dropped\">Изоставена</string>\n    <string name=\"on_hold\">На заден план</string>\n    <string name=\"plan_to_read\">Планирам да чета</string>\n    <string name=\"score\">Оценка</string>\n    <string name=\"title\">Заглавие</string>\n    <string name=\"status\">Статус</string>\n    <string name=\"chapters\">Глави</string>\n    <string name=\"error_category_exists\">Категория със същото име вече съществува!</string>\n    <string name=\"snack_categories_deleted\">Категориите бяха изтрити</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Това ще премахне датата на прочитане на главата. Сигурни ли сте?</string>\n    <string name=\"dialog_with_checkbox_reset\">Изчисти всички дати за тази манга</string>\n    <string name=\"snack_add_to_library\">Добавяне на мангата към библиотеката?</string>\n    <string name=\"picture_saved\">Изображението запазено</string>\n    <string name=\"custom_filter\">Персонализиран филтър</string>\n    <string name=\"set_as_cover\">Постави за корица</string>\n    <string name=\"cover_updated\">Корицата обновена</string>\n    <string name=\"chapter_progress\">Страница: %1$d</string>\n    <string name=\"no_next_chapter\">Не беше намерена следваща глава</string>\n    <string name=\"decode_image_error\">Неуспешно декодиране на изображението</string>\n    <string name=\"confirm_set_image_as_cover\">Желаете ли да използвате това изображение за корица?</string>\n    <string name=\"download_queue_error\">Не можахме да изтеглим главите. Може да опитате пак в секцията на изтеглянията</string>\n    <string name=\"notification_new_chapters\">Нови глави</string>\n    <string name=\"notification_cover_update_failed\">Грешка при обновяването на корицата</string>\n    <string name=\"notification_first_add_to_library\">Моля, добавете мангата в библиотеката си, преди да направите това</string>\n    <string name=\"file_select_cover\">Изберете корица</string>\n    <string name=\"file_select_backup\">Изберете резервно копие</string>\n    <string name=\"update_check_confirm\">Изтегли</string>\n    <string name=\"update_check_no_new_updates\">Няма налични актуализации</string>\n    <string name=\"update_check_notification_download_in_progress\">Изтегля се…</string>\n    <string name=\"update_check_notification_download_complete\">Изтегляне завършено</string>\n    <string name=\"update_check_notification_download_error\">Грешка при изтегляне</string>\n    <string name=\"update_check_notification_update_available\">Има нова версия!</string>\n    <string name=\"information_no_downloads\">Нямате изтегляния</string>\n    <string name=\"information_no_recent\">Нямате нови глави</string>\n    <string name=\"information_no_recent_manga\">Не сте чели нищо наскоро</string>\n    <string name=\"information_empty_library\">Библиотеката Ви е празна</string>\n    <string name=\"download_notifier_downloader_title\">Изтегли</string>\n    <string name=\"download_notifier_title_error\">Грешка</string>\n    <string name=\"download_notifier_unknown_error\">Получи се неочаквана грешка при изтеглянето на главата</string>\n    <string name=\"download_notifier_text_only_wifi\">Няма налична Wi-Fi връзка</string>\n    <string name=\"download_notifier_no_network\">Няма налична мрежова връзка</string>\n    <string name=\"categories\">Категории</string>\n    <string name=\"manga\">Манга</string>\n    <string name=\"track\">Следене</string>\n    <string name=\"history\">История</string>\n    <string name=\"action_sort_total\">Общ брой глави</string>\n    <string name=\"action_open_log\">Отвори лога</string>\n    <string name=\"action_restore\">Възстанови</string>\n    <string name=\"app_not_available\">Приложението не е достъпно</string>\n    <string name=\"update_weekly\">Ежеседмично</string>\n    <string name=\"default_category\">Категория по подразбиране</string>\n    <string name=\"default_category_summary\">Питай всеки път</string>\n    <string name=\"pref_crop_borders\">Изрязвай границите</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Обърнати бутони за звука</string>\n    <string name=\"pref_create_backup\">Създай резервно копие</string>\n    <string name=\"pref_create_backup_summ\">Може да се използва за възстановяване на текущата библиотека</string>\n    <string name=\"pref_restore_backup\">Възстанови резервно копие</string>\n    <string name=\"pref_restore_backup_summ\">Възстанови библиотеката от резервно копие</string>\n    <string name=\"pref_backup_interval\">Честота на запазване</string>\n    <string name=\"backup_created\">Резервно копие създадено</string>\n    <string name=\"restore_completed\">Възстановяването завършено</string>\n    <string name=\"backup_choice\">Какво искате да запазите?</string>\n    <string name=\"restoring_backup\">Възстановяване на копие</string>\n    <string name=\"creating_backup\">Създаване на резервно копие</string>\n    <string name=\"local_source\">Локални</string>\n    <string name=\"delete_downloads_for_manga\">Да се изтрият ли изтеглените глави?</string>\n    <string name=\"chapter_paused\">На пауза</string>\n    <string name=\"download_notifier_download_paused\">Изтеглянето спряно</string>\n    <string name=\"action_global_search\">Глобално търсене</string>\n    <string name=\"other_source\">Други</string>\n    <string name=\"action_global_search_hint\">Глобално търсене…</string>\n    <string name=\"latest\">Последни</string>\n    <string name=\"browse\">Търсене</string>\n    <string name=\"channel_common\">Общи</string>\n    <string name=\"action_display_download_badge\">Изтеглени глави</string>\n    <string name=\"information_empty_category\">Нямате категории. Натиснете плюса, за да създадете такава и да организирате библиотеката си.</string>\n    <string name=\"label_migration\">Мигриране</string>\n    <string name=\"label_extensions\">Разширения</string>\n    <string name=\"label_extension_info\">Информация</string>\n    <string name=\"ext_update\">Обнови</string>\n    <string name=\"ext_install\">Инсталирай</string>\n    <string name=\"ext_pending\">На изчакване</string>\n    <string name=\"ext_downloading\">Изтегля се</string>\n    <string name=\"ext_installing\">Инсталира се</string>\n    <string name=\"ext_installed\">Инсталирани</string>\n    <string name=\"ext_trust\">Потвърдени</string>\n    <string name=\"ext_untrusted\">Непотвърдени</string>\n    <string name=\"ext_uninstall\">Деинсталирай</string>\n    <string name=\"untrusted_extension\">Непотвърдено разширение</string>\n    <string name=\"untrusted_extension_message\">Следното разширение имаше непотвърден сертификат и не беше активирано.\n\\n\n\\nЗлонамереното разширение може да види всичката информация за вход в системата на Mihon или да компилира неблагонадежден код.\n\\n\n\\nПотвърждавайки този сертификат, вие приемате тези рискове.</string>\n    <string name=\"pref_double_tap_anim_speed\">Скорост на анимацията</string>\n    <string name=\"double_tap_anim_speed_0\">Без анимация</string>\n    <string name=\"double_tap_anim_speed_normal\">Нормална</string>\n    <string name=\"double_tap_anim_speed_fast\">Бързо</string>\n    <string name=\"manga_added_library\">Добавена към библиотеката</string>\n    <string name=\"manga_removed_library\">Премахната от библиотеката</string>\n    <string name=\"copied_to_clipboard\">Копирано към клипборда:\n\\n%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Изберете кои данни ще мигрирате</string>\n    <string name=\"migrate\">Мигрирай</string>\n    <string name=\"copy\">Копирай</string>\n    <string name=\"pager_viewer\">Страница</string>\n    <string name=\"source_not_installed\">Източникът не е инсталиран: %1$s</string>\n    <string name=\"repeating\">Препрочитане</string>\n    <string name=\"track_status\">Статус</string>\n    <string name=\"track_type\">Тип</string>\n    <string name=\"transition_finished\">Завършени:</string>\n    <string name=\"transition_current\">Текущи:</string>\n    <string name=\"transition_next\">Следва:</string>\n    <string name=\"transition_previous\">Предишна:</string>\n    <string name=\"transition_no_next\">Няма повече глави</string>\n    <string name=\"transition_no_previous\">Няма предишна глава</string>\n    <string name=\"transition_pages_loading\">Зареждане на страниците…</string>\n    <string name=\"transition_pages_error\">Не бяха заредени успешно: %1$s страници</string>\n    <string name=\"pref_read_with_long_tap\">Покажи при задържане върху екрана</string>\n    <string name=\"action_open_in_web_view\">Отвори в WebView</string>\n    <string name=\"pref_skip_read_chapters\">Пропускай прочетените глави</string>\n    <string name=\"pref_color_filter_mode\">Режим на цветовия филтър</string>\n    <string name=\"filter_mode_overlay\">Наложен</string>\n    <string name=\"filter_mode_multiply\">Умножен</string>\n    <string name=\"filter_mode_screen\">Екранен</string>\n    <string name=\"filter_mode_lighten\">Осветен</string>\n    <string name=\"filter_mode_darken\">Затъмнен</string>\n    <string name=\"label_help\">Помощ</string>\n    <string name=\"no_results_found\">Не бяха намерени резултати</string>\n    <string name=\"migration_selection_prompt\">Изберете източник, от който да мигрирате</string>\n    <string name=\"action_webview_back\">Назад</string>\n    <string name=\"action_webview_forward\">Напред</string>\n    <string name=\"action_webview_refresh\">Обнови</string>\n    <string name=\"pref_category_library\">Библиотека</string>\n    <string name=\"ext_obsolete\">Остарял</string>\n    <string name=\"obsolete_extension_message\">Това разширение вече не е достъпно.</string>\n    <string name=\"pref_date_format\">Формат на датата</string>\n    <string name=\"pref_category_library_update\">Глобалния обновявания</string>\n    <string name=\"logout_title\">Искате ли да излезете от %1$s?</string>\n    <string name=\"logout\">Излез</string>\n    <string name=\"logout_success\">Излязохте успешно</string>\n    <string name=\"paused\">На пауза</string>\n    <string name=\"secure_screen\">Сигурност</string>\n    <string name=\"channel_ext_updates\">Ъпдейти на разширенията</string>\n    <string name=\"channel_new_chapters\">Нови глави</string>\n    <string name=\"information_webview_outdated\">Моля, обновете WebView за по-добра съвместимост</string>\n    <string name=\"information_webview_required\">WebView е необходим за Mihon</string>\n    <string name=\"information_cloudflare_bypass_failure\">Грешка при минаването през Cloudflare</string>\n    <string name=\"notification_chapters_multiple\">Глави %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Глава %1$s и %2$d още</string>\n    <string name=\"notification_chapters_single\">Глава %1$s</string>\n    <string name=\"recent_manga_time\">Гл. %1$s - %2$s</string>\n    <string name=\"updating_library\">Обновяване на библиотеката</string>\n    <string name=\"add_tracking\">Добави проследяване</string>\n    <string name=\"manga_info_collapse\">По-малко</string>\n    <string name=\"manga_info_expand\">Повече</string>\n    <string name=\"in_library\">В библиотеката</string>\n    <string name=\"add_to_library\">Добави към библиотеката</string>\n    <string name=\"local_source_help_guide\">Помощ за локални източници</string>\n    <string name=\"pinned_sources\">Закачени</string>\n    <string name=\"last_used_source\">Последно използвани</string>\n    <string name=\"email\">Имейл адрес</string>\n    <string name=\"downloaded_only_summary\">Филтрира мангата в цялата Ви библиотека</string>\n    <string name=\"label_downloaded_only\">Само изтеглени</string>\n    <string name=\"check_for_updates\">Провери за ъпдейт</string>\n    <string name=\"licenses\">Лицензи за отворен код</string>\n    <string name=\"website\">Уебсайт</string>\n    <string name=\"battery_optimization_disabled\">Оптимизацията на батерията е изключена</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Помага при фонови обновявания на библиотеката и резервни копия</string>\n    <string name=\"pref_disable_battery_optimization\">Изключи оптимизация на батерията</string>\n    <string name=\"restoring_backup_canceled\">Отменено възстановяване</string>\n    <string name=\"restoring_backup_error\">Възстановяването неуспешно</string>\n    <string name=\"restore_in_progress\">Възстановяването е в процес</string>\n    <string name=\"creating_backup_error\">Съхраняването неуспешно</string>\n    <string name=\"backup_in_progress\">Архивирането вече е в ход</string>\n    <string name=\"restore_duration\">%02d мин, %02d сек</string>\n    <string name=\"pref_webtoon_side_padding\">Странично разстояние</string>\n    <string name=\"pref_category_reading\">Четене</string>\n    <string name=\"pref_always_show_chapter_transition\">Винаги показвай прехода между главите</string>\n    <string name=\"vertical_plus_viewer\">Безкраен вертикален изглед</string>\n    <string name=\"pref_skip_filtered_chapters\">Пропускай филтрирани глави</string>\n    <string name=\"pref_cutout_short\">Показвай съдържанието в изрязаната част</string>\n    <string name=\"ext_updates_pending\">Налични ъпдейти</string>\n    <string name=\"pref_category_display\">Показване</string>\n    <string name=\"hide_notification_content\">Скривай съдържанието на уведомленията</string>\n    <string name=\"secure_screen_summary\">Скрий съдържанието на приложението и блокирай снимките на екрана</string>\n    <string name=\"lock_never\">Никога</string>\n    <string name=\"lock_always\">Винаги</string>\n    <string name=\"lock_when_idle\">Заключи при неактивност</string>\n    <string name=\"lock_with_biometrics\">Изискване на отключване</string>\n    <string name=\"pref_category_security\">Сигурност</string>\n    <string name=\"pref_manage_notifications\">Уведомления</string>\n    <string name=\"theme_system\">Система на абонаментите</string>\n    <string name=\"theme_dark\">Включено</string>\n    <string name=\"theme_light\">Изключено</string>\n    <string name=\"action_move_to_top\">Премести най-горе</string>\n    <string name=\"action_move_to_bottom\">Премести най-долу</string>\n    <string name=\"action_oldest\">Най-стари</string>\n    <string name=\"action_newest\">Най-нови</string>\n    <string name=\"action_cancel_all\">Отмени всичко</string>\n    <string name=\"action_unpin\">Откачи</string>\n    <string name=\"action_pin\">Закачи</string>\n    <string name=\"action_view_chapters\">Преглед на глави</string>\n    <string name=\"action_select_inverse\">Избери обратно</string>\n    <string name=\"action_sort_latest_chapter\">Последна глава</string>\n    <string name=\"action_menu\">Меню</string>\n    <string name=\"label_sources\">Източници</string>\n    <string name=\"label_more\">Още</string>\n    <string name=\"viewer\">Режим на четене</string>\n    <string name=\"pref_category_for_this_series\">За тази поредица</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Системните настройки не бяха отворени</string>\n    <string name=\"pref_refresh_library_covers\">Обнови кориците</string>\n    <string name=\"tracking_info\">Еднопосочна синхронизация на прочетените глави. Установи проследяване за отделни манги от индивидуалния бутон за проследяване.</string>\n    <string name=\"gray_background\">Сиво</string>\n    <string name=\"action_migrate\">Мигрирай</string>\n    <string name=\"loader_not_implemented_error\">Източникът не е намерен</string>\n    <string name=\"page_list_empty_error\">Няма намерени страници</string>\n    <string name=\"sort_by_upload_date\">По дата на качване</string>\n    <string name=\"tabs_header\">Раздели</string>\n    <string name=\"label_data\">Данни</string>\n    <string name=\"requires_app_restart\">Изисква рестартиране, за да влезе в сила</string>\n    <string name=\"label_network\">Мрежа</string>\n    <string name=\"backup_restore_missing_sources\">Липсващи източници:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Резервното копие не съдържа манга.</string>\n    <string name=\"invalid_backup_file\">Невалиден резервен файл</string>\n    <string name=\"pref_show_reading_mode_summary\">Накратко показване на текущия режим при отваряне на четеца</string>\n    <string name=\"pref_show_reading_mode\">Покажи режим на четене</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Провери за нова корица и подробности при актуализиране на библиотеката</string>\n    <string name=\"pref_library_update_refresh_metadata\">Автоматично обновяване на метаданните</string>\n    <string name=\"action_disable\">Деактивирай</string>\n    <string name=\"action_display_show_tabs\">Показване на раздели за категории</string>\n    <string name=\"action_display_comfortable_grid\">Удобна решетка</string>\n    <string name=\"action_start\">Започни</string>\n    <string name=\"action_disable_all\">Деактивирай всички</string>\n    <string name=\"action_enable_all\">Активира всички</string>\n    <string name=\"tapping_inverted_none\">Без</string>\n    <string name=\"tapping_inverted_both\">И двете</string>\n    <string name=\"tapping_inverted_vertical\">Вертикално</string>\n    <string name=\"tapping_inverted_horizontal\">Хоризонтално</string>\n    <string name=\"channel_errors\">Грешки</string>\n    <string name=\"channel_complete\">Готово</string>\n    <string name=\"channel_progress\">Прогрес</string>\n    <string name=\"download_insufficient_space\">Главите не можаха да бъдат изтеглени поради недостатъчно място</string>\n    <string name=\"unknown_status\">Неизвестен статус</string>\n    <string name=\"unknown_author\">Неизвестен автор</string>\n    <string name=\"no_pinned_sources\">Нямате отметнати източници</string>\n    <string name=\"action_global_search_query\">Търси „%1$s“ глобално</string>\n    <string name=\"updated_version\">Обновена до v%1$s</string>\n    <string name=\"whats_new\">Какво е новото</string>\n    <string name=\"backup_restore_missing_trackers\">Не сте влезли като потребител в:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Позволи изтриване на отметнати глави</string>\n    <string name=\"pref_category_delete_chapters\">Изтрий глави</string>\n    <string name=\"pref_category_reading_mode\">Режим на четене</string>\n    <string name=\"ext_nsfw_warning\">Може да съдържа неприлично (18+) съдържание</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Тази настройка няма да спре неофициални или потенциално неправилно маркирани разширения да позволяват достъп до съдържание за възрастни (18+) в апликацията.</string>\n    <string name=\"pref_category_theme\">Тема</string>\n    <string name=\"action_sort_date_added\">Добавено на</string>\n    <string name=\"no_chapters_error\">Не са намерени глави</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) източници</string>\n    <string name=\"action_desc\">Низходящ</string>\n    <string name=\"action_asc\">Възходящ</string>\n    <string name=\"action_order_by_chapter_number\">По брой на главите</string>\n    <string name=\"action_order_by_upload_date\">По дата на качване</string>\n    <string name=\"action_display_show_number_of_items\">Покажи номера на предметите</string>\n    <string name=\"action_search_settings\">Настройки за търсене</string>\n    <string name=\"action_filter_tracked\">Следени</string>\n    <string name=\"edge_nav\">Край</string>\n    <string name=\"date\">Дата</string>\n    <string name=\"pref_dark_theme_pure_black\">Чисто черен режим</string>\n    <string name=\"label_default\">По подразбиране</string>\n    <string name=\"backup_restore_content_full\">Ще бъдат възстановени данните от резервното копие.\n\\n\n\\nТрябва да инсталирате липсващи разширения, ако има такива, и да се впишете в услугите за тракинг, за да ги ползвате.</string>\n    <string name=\"action_track\">Проследи</string>\n    <string name=\"restore_miui_warning\">Съхраняването/възстановяването може да не функционира правилно, ако MIUI Optimization е изключено.</string>\n    <string name=\"about_dont_kill_my_app\">Някои производители ограничават приложенията, за да убият задноплановите услуги. Следният уебсайт съдържа информация за разрешаването на проблема.</string>\n    <string name=\"pref_incognito_mode\">Инкогнито режим</string>\n    <string name=\"pref_incognito_mode_summary\">Не записва история, докато трае режимът</string>\n    <string name=\"local_filter_order_by\">Нареди по</string>\n    <string name=\"chapter_settings\">Настройки за главите</string>\n    <string name=\"action_start_downloading_now\">Започни изтеглянето сега</string>\n    <string name=\"ext_install_service_notif\">Инсталиране на разширение…</string>\n    <string name=\"ext_installer_legacy\">Стара версия</string>\n    <string name=\"ext_installer_pref\">Инсталатор</string>\n    <string name=\"pref_dump_crash_logs\">Разтовари записите от сривовете</string>\n    <string name=\"off\">Не</string>\n    <string name=\"rotation_landscape\">Пейзаж</string>\n    <string name=\"label_background_activity\">Работа на заден план</string>\n    <string name=\"notification_incognito_text\">Изключи инкогнито</string>\n    <string name=\"pref_category_appearance\">Облик</string>\n    <string name=\"on\">Да</string>\n    <string name=\"l_nav\">L-образно</string>\n    <string name=\"kindlish_nav\">Kindle-подобно</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Създава папки според заглавието на мангата</string>\n    <string name=\"automatic_background\">Автоматично</string>\n    <string name=\"pref_viewer_nav\">Схема на навигацията</string>\n    <string name=\"nav_zone_prev\">Преди</string>\n    <string name=\"nav_zone_next\">След</string>\n    <string name=\"nav_zone_left\">Ляво</string>\n    <string name=\"nav_zone_right\">Дясно</string>\n    <string name=\"pref_high\">Висока</string>\n    <string name=\"information_empty_category_dialog\">Нямате никакви категории.</string>\n    <string name=\"pref_dns_over_https\">DNS пред HTTPS</string>\n    <string name=\"action_sort_count\">Общ брой манга</string>\n    <string name=\"action_sort_chapter_fetch_date\">Дата на получаване</string>\n    <string name=\"action_display_local_badge\">Локална манга</string>\n    <string name=\"pref_hide_threshold\">Чувствителност за скриване на менюто при превъртане</string>\n    <string name=\"pref_highest\">Най-висока</string>\n    <string name=\"unread\">Непрочетена</string>\n    <string name=\"manga_cover\">Корица</string>\n    <string name=\"label_warning\">Предупреждение</string>\n    <string name=\"confirm_lock_change\">Удостоверете, за да потвърдите промяната</string>\n    <string name=\"cancel_all_for_series\">Премахни всичко от тази серия</string>\n    <string name=\"action_show_errors\">Вижте пълните подробности за грешката</string>\n    <string name=\"pref_app_theme\">Тема</string>\n    <string name=\"theme_monet\">Динамично</string>\n    <string name=\"theme_greenapple\">Зелена ябълка</string>\n    <string name=\"theme_midnightdusk\">Нощен здрач</string>\n    <string name=\"theme_strawberrydaiquiri\">Дайкири ягода</string>\n    <string name=\"theme_tako\">Тако</string>\n    <string name=\"theme_tealturquoise\">Циан и тюркоаз</string>\n    <string name=\"theme_yinyang\">Ин и Янг</string>\n    <string name=\"theme_yotsuba\">Йоцуба</string>\n    <string name=\"restrictions\">Ограничения: %s</string>\n    <string name=\"categorized_display_settings\">Различно сортиране и показване за всяка категоря</string>\n    <string name=\"pref_library_update_categories_details\">Манга в изключените категории няма да бъде обновявана дори ако се намира във включените категории.</string>\n    <string name=\"none\">Никоя</string>\n    <string name=\"include\">Включва: %s</string>\n    <string name=\"exclude\">Изключва: %s</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku не работи</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Инсталирайте и стартирайте Shizuku, за да използвате Shizuku като инсталатор на разширения.</string>\n    <string name=\"pref_show_navigation_mode\">Покажи оформлението на навигацията</string>\n    <string name=\"pref_dual_page_split\">Разделяне на широки страници</string>\n    <string name=\"pref_dual_page_invert_summary\">Ако позицията на разделението на широката страница не съвпада с посоката на четене</string>\n    <string name=\"pref_grayscale\">Черно-бяло</string>\n    <string name=\"pref_read_with_tapping_inverted\">Инвертирай докосване</string>\n    <string name=\"pref_reader_actions\">Действия</string>\n    <string name=\"pref_create_folder_per_manga\">Запазвай страниците в отделни папки</string>\n    <string name=\"right_and_left_nav\">Дясно и Ляво</string>\n    <string name=\"rotation_type\">Ориентация</string>\n    <string name=\"rotation_portrait\">Портрет</string>\n    <string name=\"pref_low\">Ниска</string>\n    <string name=\"pref_lowest\">Най-ниска</string>\n    <string name=\"pref_remove_exclude_categories\">Изключени категории</string>\n    <string name=\"pref_category_auto_download\">Автоматично изтегляне</string>\n    <string name=\"pref_download_new_categories_details\">Манга в изключени категории няма да бъде изтеглена, дори да се намира във включени категории.</string>\n    <string name=\"tracking_guide\">Наръчник при проследяване</string>\n    <string name=\"enhanced_services\">Подобрени услуги</string>\n    <string name=\"enhanced_tracking_info\">Услуги, предлагащи подобрени особености за определени източници. Манга се проследява автоматично, щом бъде добавена към библиотеката Ви.</string>\n    <string name=\"backup_info\">Автоматичното запазване е препоръчително. Препоръчваме да съхранявате резервните копия на няколко места.</string>\n    <string name=\"pref_verbose_logging\">Описателно записване</string>\n    <string name=\"help_translate\">Помогни с превода</string>\n    <string name=\"manga_from_library\">Манга от библиотеката</string>\n    <string name=\"downloaded_chapters\">Изтеглени глави</string>\n    <string name=\"clipboard_copy_error\">Не можа да се копира върху клипборда</string>\n    <string name=\"cover_saved\">Корицата запазена</string>\n    <string name=\"confirm_set_chapter_settings\">Сигурни ли сте, че искате да наложите тези настройки?</string>\n    <string name=\"also_set_chapter_settings_for_library\">Също приложи към всяка манга в библиотеката ми</string>\n    <string name=\"set_chapter_settings_as_default\">Направи по подразбиране</string>\n    <string name=\"track_started_reading_date\">Дата на започване</string>\n    <string name=\"pref_clear_history\">Изчисти историята</string>\n    <string name=\"clear_history_completed\">Историята изтрита</string>\n    <string name=\"clear_history_confirmation\">Напълно ли сте сигурен? Всичката ви история ще бъде загубена.</string>\n    <string name=\"migration_help_guide\">Наръчник за мигриране между източници</string>\n    <string name=\"notification_size_warning\">Предупреждение: големите актуализации вредят на източниците и могат да доведат до по-бавни актуализации, както и до повишено използване на батерията. Натиснете тук, за да научите повече.</string>\n    <string name=\"file_picker_error\">Не бе намерено приложение за подбор на файлове</string>\n    <string name=\"getting_started_guide\">Първи стъпки</string>\n    <string name=\"chapter_settings_updated\">Стандартните настройки на главите бяха обновени</string>\n    <string name=\"spen_previous_page\">Предишна страница</string>\n    <string name=\"spen_next_page\">Следваща страница</string>\n    <string name=\"action_display_language_badge\">Език</string>\n    <string name=\"pref_show_nsfw_source\">Показвай в списъка с източници и разширения</string>\n    <string name=\"relative_time_today\">Днес</string>\n    <string name=\"ext_app_info\">Информация</string>\n    <string name=\"pref_show_navigation_mode_summary\">Покажи зони за натискане, когато четецът се отвори</string>\n    <string name=\"pref_dual_page_invert\">Обърни позициите на разделените широки страници</string>\n    <string name=\"pref_inverted_colors\">Инвертирани цветове</string>\n    <string name=\"pref_dump_crash_logs_summary\">Запазва записи от сривове, които може да бъдат споделени с разработчиците</string>\n    <string name=\"pref_verbose_logging_summary\">Принтирай описателните записи в системните записи (ограничава производителността на приложението)</string>\n    <string name=\"chapter_not_found\">Главата не е намерена</string>\n    <string name=\"local_invalid_format\">Невалиден формат на главата</string>\n    <string name=\"error_saving_cover\">Грешка при запазването на корицата</string>\n    <string name=\"error_sharing_cover\">Грешка при споделянето на корицата</string>\n    <string name=\"track_finished_reading_date\">Дата на завършване</string>\n    <string name=\"myanimelist_relogin\">Моля, впишете се наново в MAL</string>\n    <string name=\"source_unsupported\">Източникът не се поддържа</string>\n    <string name=\"error_no_match\">Не е намерено съвпадение</string>\n    <string name=\"share_page_info\">%1$s: %2$s, страница %3$d</string>\n    <string name=\"update_check_eol\">Тази версия на Android повече не се поддържа</string>\n    <string name=\"pref_tablet_ui_mode\">Потребителски интерфейс на таблет</string>\n    <string name=\"clear_database_source_item_count\">%1$d небиблиотечна манга в базата данни</string>\n    <string name=\"database_clean\">Нищо за почистване</string>\n    <string name=\"channel_app_updates\">Актуализации на приложението</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Изчистване на кеша на главата при затваряне на приложението</string>\n    <string name=\"privacy_policy\">Политика за поверителност</string>\n    <string name=\"pref_update_only_completely_read\">С непрочетени глави</string>\n    <string name=\"ext_update_all\">Обнови всички</string>\n    <string name=\"extension_api_error\">Неуспешно получаване на списък с разширения</string>\n    <string name=\"update_72hour\">На всеки 3 дена</string>\n    <string name=\"connected_to_wifi\">Само през Wi-Fi</string>\n    <string name=\"download_queue_size_warning\">Предупреждение: големите масови изтегляния могат да доведат до забавяне на източниците и/или блокиране на Mihon. Натиснете тук, за да научите повече.</string>\n    <string name=\"action_show_manga\">Покажи манга</string>\n    <string name=\"action_display_cover_only_grid\">Решетка само с корици</string>\n    <string name=\"delete_category_confirmation\">Искате ли да изтриете категорията \\\"%s\\\"?</string>\n    <string name=\"internal_error\">InternalError: Провери записите за крашове за повече информация</string>\n    <string name=\"error_saving_picture\">Грешка при запазването на изображението</string>\n    <string name=\"update_already_running\">Обновява се</string>\n    <string name=\"not_installed\">Не е инсталиран</string>\n    <string name=\"rotation_reverse_portrait\">Обърнат портрет</string>\n    <string name=\"ext_info_language\">Език</string>\n    <string name=\"crash_screen_title\">Случи се неочаквана грешка</string>\n    <string name=\"auto_download_while_reading\">Автоматично изтегляне при четене</string>\n    <string name=\"description_placeholder\">Няма описание</string>\n    <string name=\"empty_backup_error\">Няма заглавия в библиотеката за резервно копие</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Нулирай режима на четене и ориентацията на всички поредици</string>\n    <string name=\"are_you_sure\">Сигурни ли сте?</string>\n    <string name=\"popular\">Популярни</string>\n    <string name=\"unfinished_list\">Списък с незавършени</string>\n    <string name=\"crash_screen_description\">%s се сблъска с неочаквана грешка. Препоръчваме да заснемете това съобщение, да запазите записите от крашовете и да ги споделите в нашия канал за поддръжка в Discord.</string>\n    <string name=\"updates_last_update_info\">Последно обновяване на библиотеката: %1$s</string>\n    <string name=\"reading_list\">Списък за четене</string>\n    <string name=\"cant_open_last_read_chapter\">Не може да се отвори последната прочетена глава</string>\n    <string name=\"source_empty_screen\">Не беше намерен източник</string>\n    <string name=\"crash_screen_restart_application\">Рестартирай приложението</string>\n    <string name=\"skipped_reason_completed\">Пропусната, понеже поредицата е завършена</string>\n    <string name=\"appwidget_unavailable_locked\">Приставката не е достъпна, когато е активирано заключване на приложението</string>\n    <string name=\"skipped_reason_not_always_update\">Пропусната, понеже поредицата не изисква обновления</string>\n    <string name=\"skipped_reason_not_started\">Пропусната, понеже не е започната</string>\n    <string name=\"update_check_open\">Отвори в GitHub</string>\n    <string name=\"pref_update_only_started\">Незапочнати</string>\n    <string name=\"pref_reset_viewer_flags\">Нулирай отделните настройки на четеца</string>\n    <string name=\"skipped_reason_not_caught_up\">Пропусната, понеже има непрочетени глави</string>\n    <string name=\"pref_user_agent_string\">User agent string по подразбиране</string>\n    <string name=\"error_user_agent_string_blank\">User agent string-ът не може да бъде празен</string>\n    <string name=\"pref_reset_user_agent_string\">Нулирай user agent string-a по подразбиране</string>\n    <string name=\"pref_landscape_zoom\">Увеличи пейзажно изображение</string>\n    <string name=\"complete_list\">Списък със завършени</string>\n    <string name=\"on_hold_list\">Списък със спрени</string>\n    <string name=\"download_ahead\">Предстоящо изтегляне</string>\n    <string name=\"download_ahead_info\">Работи само със заглавия в библиотеката и ако текущата и следващата глава са вече изтеглени</string>\n    <string name=\"appwidget_updates_description\">Виж наскоро обновената манга</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Не можа да бъде намерен файловият път на страница %d</string>\n    <string name=\"action_sort_last_manga_update\">Последно обновяване</string>\n    <string name=\"pref_clear_webview_data\">Изчисти данните на WebView</string>\n    <string name=\"empty_screen\">Това е неудобно</string>\n    <string name=\"cancelled\">Отменена</string>\n    <string name=\"library_errors_help\">За помощ при оправянето на грешки с обновленията, виж %1$s</string>\n    <string name=\"theme_tidalwave\">Приливна вълна</string>\n    <string name=\"action_sort_unread_count\">Брой непрочетени</string>\n    <string name=\"network_not_metered\">Само през неограничена мрежа</string>\n    <string name=\"action_move_to_top_all_for_series\">Премести поредицата най-горе</string>\n    <string name=\"theme_lavender\">Лавандула</string>\n    <string name=\"pref_app_language\">Език на приложението</string>\n    <string name=\"delete_category\">Изтрий категория</string>\n    <string name=\"ext_info_age_rating\">Възрастово ограничение</string>\n    <string name=\"wish_list\">Списък с желания</string>\n    <string name=\"save_chapter_as_cbz\">Запази като CBZ архив</string>\n    <string name=\"webview_data_deleted\">Данните на WebView изчистени</string>\n    <string name=\"pref_reset_viewer_flags_error\">Настройките на четеца не можаха да бъдат нулирани</string>\n    <string name=\"source_filter_empty_screen\">Не беше намерен инсталиран източник</string>\n    <string name=\"action_remove_everything\">Премахни всичко</string>\n    <string name=\"ext_info_version\">Версия</string>\n    <string name=\"on_hiatus\">В хиатус</string>\n    <string name=\"custom_cover\">Корица по избор</string>\n    <string name=\"notification_update_error\">%1$d провалени обновление/я</string>\n    <string name=\"action_search_hint\">Търсене…</string>\n    <string name=\"disabled_nav\">Деактивирано</string>\n    <string name=\"learn_more\">Натисни, за да научиш повече</string>\n    <string name=\"remove_manga\">Искате да премахнете \\\"%s\\\" от библиотеката си</string>\n    <string name=\"action_close\">Затвори</string>\n    <string name=\"pref_reset_viewer_flags_success\">Всички настройки на четеца нулирани</string>\n    <string name=\"pref_appearance_summary\">Тема, формат на датата и времето</string>\n    <string name=\"pref_library_summary\">Категории, глобални обновления</string>\n    <string name=\"pref_reader_summary\">Режим на четене, показване, навигация</string>\n    <string name=\"pref_downloads_summary\">Автоматични изтегляния, предстоящи изтегляния</string>\n    <string name=\"pref_tracking_summary\">Еднопосочна синхронизация, подобрена синхронизация</string>\n    <string name=\"pref_browse_summary\">Източници, разширения, глобално търсене</string>\n    <string name=\"pref_backup_summary\">Ръчно и автоматично създаване на бекъп</string>\n    <string name=\"pref_security_summary\">Заключване на приложението, екран за сигурност</string>\n    <string name=\"pref_advanced_summary\">Покажи записи от крашове, оптимизации за батерията</string>\n    <string name=\"multi_lang\">Мулти</string>\n    <string name=\"pref_navigate_pan\">Увеличи широките изображения при натискане</string>\n    <string name=\"split_tall_images_summary\">Подобрява производителността на четеца</string>\n    <string name=\"missing_storage_permission\">Не е дадено разрешение за съхранение</string>\n    <string name=\"publishing_finished\">Приключено издаване</string>\n    <string name=\"download_notifier_split_page_not_found\">Страница %d не беше намерена при разделяне</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/bn/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">%1$s অধ্যায়সমূহ এবং ১টি আরও</item>\n        <item quantity=\"other\">%1$s অধ্যায়সমূহ এবং %2$dটি আরও</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s সময়ে %2$s ত্রুটি সম্পন্ন</item>\n        <item quantity=\"other\">%1$s সময়ে %2$sটি ত্রুটি সম্পন্ন</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%dটি বিভাগ</item>\n        <item quantity=\"other\">%dটি বিভাগসমূহ</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">১ মিনিট পর</item>\n        <item quantity=\"other\">%1$s মিনিট পর</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">এক্সটেনশন হালনাগাদ উপলব্ধ</item>\n        <item quantity=\"other\">%d এক্সটেনশন হালনাগাদ উপলব্ধ</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">১টি নতুন অধ্যায়</item>\n        <item quantity=\"other\">%1$dটি নতুন অধ্যায়</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">১টি শিরোনামের জন্য</item>\n        <item quantity=\"other\">%dটি শিরোনামের জন্য</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">1 অধ্যায় এড়িয়ে জাছি, হয় উৎসটি অনুপস্থিত বা এটি ফিল্টার করা হয়েছে</item>\n        <item quantity=\"other\">%d অধ্যায় কিপ করা হচ্ছে, হয় উৎসটি তাদের অনুপস্থিত অথবা সেগুলি ফিল্টার করা হয়েছে</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">1টি ট্র্যাকার</item>\n        <item quantity=\"other\">%dটি ট্র্যাকার</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">১টি অধ্যায়</item>\n        <item quantity=\"other\">%1$sটি অধ্যায়</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">১টি বাকি আছে</item>\n        <item quantity=\"other\">%1$sটি বাকি আছে</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">গতকাল</item>\n        <item quantity=\"other\">%1$d দিন আগে</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">পরবর্তী অপঠিত অধ্যায়</item>\n        <item quantity=\"other\">পরবর্তী %d টি অপঠিত অধ্যায়</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">পরের %d চ্যাপ্টার</item>\n        <item quantity=\"other\">পরের %d চ্যাপ্টার</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s টি চ্যাপ্টার নেই</item>\n        <item quantity=\"other\">%1$s টি চ্যাপ্টার নেই</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">%d দিন</item>\n        <item quantity=\"other\">%d দিন</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d রিপো</item>\n        <item quantity=\"other\">%d রিপো</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">আগামীকাল</item>\n        <item quantity=\"other\">%1$d দিনে</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">১ পেজ</item>\n        <item quantity=\"other\">%1$s পেজ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/bn/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">নাম</string>\n    <string name=\"categories\">বিভাগসমূহ</string>\n    <string name=\"manga\">পুস্তক সংগ্রহ</string>\n    <string name=\"chapters\">অধ্যায়সমূহ</string>\n    <string name=\"track\">ট্র্যাকিং</string>\n    <string name=\"history\">ইতিহাস</string>\n    <string name=\"label_settings\">সেটিংস</string>\n    <string name=\"label_download_queue\">ডাউনলোড সারি</string>\n    <string name=\"label_library\">লাইব্রেরি</string>\n    <string name=\"label_recent_manga\">ইতিহাস</string>\n    <string name=\"label_recent_updates\">হালনাগাদসমূহ</string>\n    <string name=\"label_backup\">ব্যাকআপ এবং পুনরুদ্ধার</string>\n    <string name=\"action_settings\">সেটিংস</string>\n    <string name=\"action_filter\">বিশোধন</string>\n    <string name=\"action_filter_bookmarked\">বুকমার্ককৃত</string>\n    <string name=\"action_filter_unread\">অপঠিত</string>\n    <string name=\"action_filter_empty\">ফিল্টার সরান</string>\n    <string name=\"action_sort_alpha\">বর্ণানুক্রমে</string>\n    <string name=\"action_sort_total\">মোট অধ্যায়</string>\n    <string name=\"action_sort_last_read\">সর্বশেষ পঠিত</string>\n    <string name=\"action_search\">খুঁজুন</string>\n    <string name=\"action_global_search\">সর্বত্র খুঁজুন</string>\n    <string name=\"action_select_all\">সব নির্বাচন করুন</string>\n    <string name=\"action_mark_as_read\">পঠিত হিসেবে চিহ্নিত করুন</string>\n    <string name=\"action_mark_as_unread\">অপঠিত হিসাবে চিহ্নিত করুন</string>\n    <string name=\"action_mark_previous_as_read\">পূর্ববর্তী গুলো পঠিত হিসাবে চিহ্নিত করুন</string>\n    <string name=\"action_download\">ডাউনলোড</string>\n    <string name=\"action_bookmark\">বুকমার্ক অধ্যায়</string>\n    <string name=\"action_remove_bookmark\">বুকমার্ক সরান</string>\n    <string name=\"action_delete\">মুছুন</string>\n    <string name=\"action_update_library\">সংগ্রহশালা হালনাগাদ</string>\n    <string name=\"action_edit\">সম্পাদন করুন</string>\n    <string name=\"action_add\">যোগ করুন</string>\n    <string name=\"action_add_category\">বিভাগ যোগ করুন</string>\n    <string name=\"action_edit_categories\">বিভাগ সম্পাদন করুন</string>\n    <string name=\"action_rename_category\">বিভাগের নতুন নামকরণ করুন</string>\n    <string name=\"action_move_category\">বিভাগ নির্বাচন করুন</string>\n    <string name=\"action_edit_cover\">মোড়ক সম্পাদনা করুন</string>\n    <string name=\"action_pause\">বিরতি দিন</string>\n    <string name=\"action_previous_chapter\">পূর্ববর্তী অধ্যায়</string>\n    <string name=\"action_next_chapter\">পরবর্তী আধ্যায়</string>\n    <string name=\"action_retry\">পুনরায় চেষ্টা করুন</string>\n    <string name=\"action_remove\">সরান</string>\n    <string name=\"action_resume\">পুনরারম্ভ করুন</string>\n    <string name=\"action_open_in_browser\">ব্রাউজারে খুলুন</string>\n    <string name=\"action_display_mode\">প্রদর্শনের ধরন</string>\n    <string name=\"action_display\">প্রদর্শন</string>\n    <string name=\"action_display_grid\">কমপ্যাক্ট গ্রিড</string>\n    <string name=\"action_display_list\">তালিকা</string>\n    <string name=\"action_display_download_badge\">ডাউনলোড করা অধ্যায়</string>\n    <string name=\"action_cancel\">বাতিল</string>\n    <string name=\"action_sort\">সাজান</string>\n    <string name=\"action_install\">ইন্সটল করুন</string>\n    <string name=\"action_share\">শেয়ার করুন</string>\n    <string name=\"action_save\">সংরক্ষণ করুন</string>\n    <string name=\"action_reset\">পুন:স্থাপন</string>\n    <string name=\"action_undo\">পূর্বাবস্থায় ফিরুন</string>\n    <string name=\"action_open_log\">লগ খুলুন</string>\n    <string name=\"action_restore\">পুনরুদ্ধার করুন</string>\n    <string name=\"loading\">লোড হচ্ছে…</string>\n    <string name=\"app_not_available\">অ্যাপটি অনুপলব্ধ</string>\n    <string name=\"pref_category_general\">সাধারণ</string>\n    <string name=\"pref_category_reader\">পাঠক</string>\n    <string name=\"pref_category_downloads\">ডাউনলোডগুলো</string>\n    <string name=\"pref_category_tracking\">অনুসরিত</string>\n    <string name=\"pref_category_advanced\">অগ্রবর্তী</string>\n    <string name=\"pref_category_about\">সম্বন্ধে</string>\n    <string name=\"pref_library_columns\">প্রতি সারিতে আইটেম</string>\n    <string name=\"portrait\">প্রতিকৃতি</string>\n    <string name=\"landscape\">ভূদৃশ্য</string>\n    <string name=\"pref_library_update_interval\">নিজেথেকে আপডেট</string>\n    <string name=\"update_never\">বন্ধ</string>\n    <string name=\"update_6hour\">প্রতি ৬ ঘন্টায়</string>\n    <string name=\"update_12hour\">প্রতি ১২ ঘন্টায়</string>\n    <string name=\"update_24hour\">প্রতিদিন</string>\n    <string name=\"update_48hour\">প্রতি ২ দিন</string>\n    <string name=\"update_weekly\">সাপ্তাহিক</string>\n    <string name=\"all\">সব</string>\n    <string name=\"pref_library_update_restriction\">নিজেথেকে আপডেটের সীমাবদ্ধতা</string>\n    <string name=\"charging\">চার্জ হচ্ছে</string>\n    <string name=\"pref_update_only_non_completed\">\\\"সম্পূর্ন\\\" শর্তসহিত</string>\n    <string name=\"pref_auto_update_manga_sync\">পড়ার পরে অগ্রগতি আপডেট করুন</string>\n    <string name=\"default_category\">সাধারণ বিভাগ</string>\n    <string name=\"default_category_summary\">সর্বদা জিজ্ঞাসা করুন</string>\n    <string name=\"pref_fullscreen\">সম্পূর্ণ পর্দা</string>\n    <string name=\"pref_page_transitions\">পৃষ্ঠা পালটানো এনিমেট করুন</string>\n    <string name=\"pref_show_page_number\">পৃষ্ঠা নম্বর দেখান</string>\n    <string name=\"pref_crop_borders\">প্রান্তগুলো কাটুন</string>\n    <string name=\"pref_custom_brightness\">স্বনির্ধারিত উজ্জ্বলতা</string>\n    <string name=\"pref_custom_color_filter\">স্বনির্ধারিত রঙ ফিল্টার</string>\n    <string name=\"pref_keep_screen_on\">পর্দা চালু রাখুন</string>\n    <string name=\"pref_reader_navigation\">ন্যাভিগেশন</string>\n    <string name=\"pref_read_with_volume_keys\">ভলিউম বোতামগুলো</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">ভলিউম বোতামগুলো ওল্টান</string>\n    <string name=\"pref_reader_theme\">ব্যাকগ্রাউন্ড রঙ</string>\n    <string name=\"white_background\">সাদা</string>\n    <string name=\"black_background\">কালো</string>\n    <string name=\"pref_viewer_type\">প্রকৃত পঠন ধরন</string>\n    <string name=\"left_to_right_viewer\">বাম থেকে ডানে</string>\n    <string name=\"right_to_left_viewer\">ডান থেকে বামে</string>\n    <string name=\"vertical_viewer\">উল্লম্ব</string>\n    <string name=\"webtoon_viewer\">ওয়েবটুন</string>\n    <string name=\"pref_image_scale_type\">স্কেল ধরণ</string>\n    <string name=\"scale_type_fit_screen\">সম্পূর্ণ পর্দা জুড়ে</string>\n    <string name=\"scale_type_stretch\">প্রসারন</string>\n    <string name=\"scale_type_fit_width\">সম্পূর্ণ প্রস্থ</string>\n    <string name=\"scale_type_fit_height\">সম্পূর্ণ দৈর্ঘ্য</string>\n    <string name=\"scale_type_original_size\">আসল আকার</string>\n    <string name=\"scale_type_smart_fit\">উপযুক্ত ফিট</string>\n    <string name=\"pref_zoom_start\">জুম শুরুর অবস্থান</string>\n    <string name=\"zoom_start_automatic\">স্বয়ংক্রিয়</string>\n    <string name=\"zoom_start_left\">বামে</string>\n    <string name=\"zoom_start_right\">ডানে</string>\n    <string name=\"zoom_start_center\">মাঝে</string>\n    <string name=\"pref_rotation_type\">প্রকৃত ঘূর্ণনের ধরন</string>\n    <string name=\"rotation_free\">মুক্ত</string>\n    <string name=\"rotation_force_portrait\">লক করা পোর্ট্রেট</string>\n    <string name=\"rotation_force_landscape\">লক করা ল্যান্ডস্কেপ</string>\n    <string name=\"color_filter_r_value\">ল</string>\n    <string name=\"color_filter_g_value\">স</string>\n    <string name=\"color_filter_b_value\">নী</string>\n    <string name=\"color_filter_a_value\">আ</string>\n    <string name=\"pref_remove_after_marked_as_read\">পঠিত হিসেবে চিহ্নিত করার পর</string>\n    <string name=\"pref_remove_after_read\">পড়ার পর স্বয়ংক্রিয়ভাবে</string>\n    <string name=\"disabled\">নিষ্ক্রিয়</string>\n    <string name=\"last_read_chapter\">শেষ পঠিত অধ্যায়</string>\n    <string name=\"second_to_last\">২য় থেকে শেষ অধ্যায়</string>\n    <string name=\"third_to_last\">৩য় থেকে শেষ অধ্যায়</string>\n    <string name=\"fourth_to_last\">৪র্থ থেকে শেষ অধ্যায়</string>\n    <string name=\"fifth_to_last\">৫ম থেকে শেষ অধ্যায়</string>\n    <string name=\"pref_download_new\">নতুন অধ্যায়গুলো ডাউনলোড করুন</string>\n    <string name=\"services\">সেবা সমূহ</string>\n    <string name=\"pref_create_backup\">ব্যাকআপ তৈরী করুন</string>\n    <string name=\"pref_create_backup_summ\">বর্তমান সংগ্রহশালা পুনরুদ্ধারের জন্য ব্যাবহার করা যাবে</string>\n    <string name=\"pref_restore_backup\">ব্যাকআপ পুনরুদ্ধার</string>\n    <string name=\"pref_restore_backup_summ\">ব্যাকআপ ফাইল থেকে সংগ্রহশালা পুনরুদ্ধার করুন</string>\n    <string name=\"pref_backup_interval\">ব্যাকআপ ফ্রিকোয়েন্সি</string>\n    <string name=\"backup_created\">ব্যাকআপ তৈরী হয়েছে</string>\n    <string name=\"restore_completed\">পুনরুদ্ধার সম্পন্ন হয়েছে</string>\n    <string name=\"backup_choice\">আপনি কি ব্যাকআপ করতে ইচ্ছুক?</string>\n    <string name=\"restoring_backup\">ব্যাকআপ পুনরুদ্ধার হচ্ছে</string>\n    <string name=\"creating_backup\">ব্যাকআপ তৈরী হচ্ছে</string>\n    <string name=\"pref_clear_chapter_cache\">অধ্যায়ের ক্যাচি পরিষ্কার করুন</string>\n    <string name=\"used_cache\">ব্যাবহৃত হয়েছে: %1$s</string>\n    <string name=\"cache_deleted\">ক্যাচি পরিষ্কার হয়েছে. %1$d ফাইল মুছে ফেলা হয়েছে</string>\n    <string name=\"cache_delete_error\">ক্যাচ পরিষ্কারের সময় একটি ত্রুটি দেখা দিয়েছে</string>\n    <string name=\"pref_clear_cookies\">কুকিস পরিষ্কার করুন</string>\n    <string name=\"cookies_cleared\">কুকিস পরিষ্কার হয়েছে</string>\n    <string name=\"pref_clear_database\">ডাটাবেজ পরিষ্কার করুন</string>\n    <string name=\"pref_clear_database_summary\">আপনার সংগ্রহশালাতে যেসব মাংগা সংরক্ষিত নেই সেগুলোর ইতিহাস মুছে ফেলুন</string>\n    <string name=\"clear_database_confirmation\">আপনি কি নিশ্চিত? পঠিত অধ্যায় এবং সংগ্রহশালাতে অনুপস্থিত মাংগার অগ্রগতি মুছে যাবে</string>\n    <string name=\"clear_database_completed\">এন্ট্রিগুলো মুছে ফেলা হয়েছে</string>\n    <string name=\"version\">সংস্করণ</string>\n    <string name=\"pref_enable_acra\">ক্র‍্যাশের প্রতিবেদন পাঠান</string>\n    <string name=\"pref_acra_summary\">বাগ ঠিক করার জন্য সাহায্য করুন। কোন সংবেদনশীল তথ্য পাঠানো হবে না</string>\n    <string name=\"login_title\">প্রবেশ করুন %1$sতে</string>\n    <string name=\"username\">ব্যাবহারকারীর নাম</string>\n    <string name=\"password\">গোপন শব্দ</string>\n    <string name=\"login\">প্রবেশ করুন</string>\n    <string name=\"login_success\">প্রবেশ হয়েছে</string>\n    <string name=\"unknown_error\">অজানা ত্রুটি</string>\n    <string name=\"updating_category\">বিভাগের হালনাগাদ হচ্ছে</string>\n    <string name=\"no_more_results\">আর কোনও ফলাফল নেই</string>\n    <string name=\"local_source\">স্থানীয় উৎস</string>\n    <string name=\"other_source\">অন্যান্য</string>\n    <string name=\"action_global_search_hint\">সার্বজনীন খোঁজ…</string>\n    <string name=\"latest\">সর্বশেষ</string>\n    <string name=\"browse\">অনুসন্ধান</string>\n    <string name=\"ongoing\">চলমান</string>\n    <string name=\"unknown\">অজানা</string>\n    <string name=\"licensed\">লাইসেন্সকৃত</string>\n    <string name=\"remove_from_library\">সংগ্রহশালা থেকে অপসারণ করুন</string>\n    <string name=\"delete_downloads_for_manga\">ডাউনলোডকৃত অধ্যায়গুলো মুছে ফেলতে চান?</string>\n    <string name=\"display_mode_chapter\">অধ্যায় %1$s</string>\n    <string name=\"chapter_downloading_progress\">ডাউনলোড হচ্ছে (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">ত্রুটি</string>\n    <string name=\"chapter_paused\">থেমে আছে</string>\n    <string name=\"show_title\">উৎস শিরোনাম</string>\n    <string name=\"show_chapter_number\">অধ্যায় নাম্বার</string>\n    <string name=\"sort_by_source\">উৎস অনুযায়ী</string>\n    <string name=\"sort_by_number\">অধ্যায়ের নাম্বার অনুযায়ী</string>\n    <string name=\"manga_download\">ডাউনলোড</string>\n    <string name=\"download_unread\">অপঠিত</string>\n    <string name=\"confirm_delete_chapters\">আপনি কি নিশ্চিত যে আপনি নির্বাচিত অধ্যায়গুলো মুছে ফেলতে চান?</string>\n    <string name=\"manga_tracking_tab\">অনুসরিত</string>\n    <string name=\"reading\">পড়া হচ্ছে</string>\n    <string name=\"completed\">সম্পন্ন</string>\n    <string name=\"dropped\">বাদ পড়েছে</string>\n    <string name=\"on_hold\">স্থগিত</string>\n    <string name=\"plan_to_read\">পড়ার জন্য পরিকল্পিত</string>\n    <string name=\"score\">স্কোর</string>\n    <string name=\"title\">শিরোনাম</string>\n    <string name=\"status\">স্থিতি</string>\n    <string name=\"error_category_exists\">এই নামের একটি বিভাগ ইতিমধ্যে বিদ্যমান!</string>\n    <string name=\"snack_categories_deleted\">বিভাগগুলি মোছা হয়েছে</string>\n    <string name=\"dialog_with_checkbox_remove_description\">এটা এই অধ্যায়ের পড়ার সময়কাল সরিয়ে ফেলবে। আপনি নিশ্চিত?</string>\n    <string name=\"dialog_with_checkbox_reset\">এই মাংগার জন্য সব অধ্যায় পুনঃবিন্যাস করুন</string>\n    <string name=\"snack_add_to_library\">সংগ্রহশালায় মাঙ্গা যোগ করবেন?</string>\n    <string name=\"picture_saved\">ছবি সংরক্ষিত হয়েছে</string>\n    <string name=\"custom_filter\">স্বনির্ধারিত ফিল্টার</string>\n    <string name=\"set_as_cover\">প্রচ্ছদ হিসাবে সংরক্ষণ করুন</string>\n    <string name=\"cover_updated\">প্রচ্ছদ আপডেট হয়েছে</string>\n    <string name=\"chapter_progress\">পৃষ্ঠা: %1$d</string>\n    <string name=\"no_next_chapter\">পরবর্তী অধ্যায় খুঁজে পাওয়া যায়নি</string>\n    <string name=\"decode_image_error\">ছবিটি লোড করা যাচ্ছে না</string>\n    <string name=\"confirm_set_image_as_cover\">এই চিত্রটি কভার আর্ট হিসাবে ব্যবহার করবেন?</string>\n    <string name=\"download_queue_error\">অধ্যায়গুলি ডাউনলোড করা যায়নি। ডাউনলোড বিভাগে আপনি আবার চেষ্টা করতে পারেন</string>\n    <string name=\"notification_new_chapters\">নতুন অধ্যায় পাওয়া গিয়েছে</string>\n    <string name=\"notification_cover_update_failed\">প্রচ্ছদ হালনাগাদ করতে ব্যর্থ</string>\n    <string name=\"notification_first_add_to_library\">এটা করার আগে দয়া করে মাংগাটি আপনার সংগ্রহশালায় যোগ করুন</string>\n    <string name=\"file_select_cover\">প্রচ্ছদ চিত্র নির্বাচন করুন</string>\n    <string name=\"file_select_backup\">ব্যাকআপ ফাইল নির্বাচন করুন</string>\n    <string name=\"update_check_confirm\">ডাউনলোড</string>\n    <string name=\"update_check_no_new_updates\">নতুন কোন হালনাগাদ নেই</string>\n    <string name=\"update_check_notification_download_in_progress\">ডাউনলোড হচ্ছে…</string>\n    <string name=\"update_check_notification_download_complete\">ডাউনলোড সম্পন্ন হয়ে গেছে</string>\n    <string name=\"update_check_notification_download_error\">ডাউনলোড ত্রুটি দেখা গিয়েছে</string>\n    <string name=\"update_check_notification_update_available\">নতুন সংস্করণ উপলভ্য!</string>\n    <string name=\"information_no_downloads\">ডাউনলোড নেই</string>\n    <string name=\"information_no_recent\">কোন নতুন হালনাগাদ নেই</string>\n    <string name=\"information_no_recent_manga\">সম্প্রতি কিছু পড়া হয়নি</string>\n    <string name=\"information_empty_library\">আপনার সংগ্রহশালা খালি</string>\n    <string name=\"information_empty_category\">আপনার কোন বিভাগ নেই। আপনার সংগ্রহশালা সাজাতে যোগ চিহ্ন বাটনে চেপে একটি বিভাগ তৈরী করুন।</string>\n    <string name=\"download_notifier_downloader_title\">ডাউনলোডার</string>\n    <string name=\"download_notifier_title_error\">ত্রুটি</string>\n    <string name=\"download_notifier_unknown_error\">অপ্রত্যাশিত ত্রুটির কারণে অধ্যায় ডাউনলোড করা যায়নি</string>\n    <string name=\"download_notifier_text_only_wifi\">কোন ওয়াই-ফাই সংযোগ খুঁজে পাওয়া যায়নি</string>\n    <string name=\"download_notifier_no_network\">কোন নেটওয়ার্ক সংযোগ খুঁজে পাওয়া যায়নি</string>\n    <string name=\"download_notifier_download_paused\">ডাউনলোড বিরতি</string>\n    <string name=\"channel_common\">সাধারণ</string>\n    <string name=\"label_migration\">স্থানান্তর করুন</string>\n    <string name=\"label_extensions\">এক্সটেনশন গুলো</string>\n    <string name=\"label_extension_info\">এক্সটেনশনের বিবরন</string>\n    <string name=\"ext_update\">হালনাগাদ</string>\n    <string name=\"ext_install\">ইন্সটল</string>\n    <string name=\"ext_pending\">প্রক্রিয়াধীন</string>\n    <string name=\"ext_downloading\">ডাউনলোড হচ্ছে</string>\n    <string name=\"ext_installing\">ইন্সটল হচ্ছে</string>\n    <string name=\"ext_installed\">ইন্সটল হয়েছে</string>\n    <string name=\"ext_trust\">বিশ্বাস</string>\n    <string name=\"ext_untrusted\">অনির্ভরযোগ্য</string>\n    <string name=\"ext_uninstall\">আন ইন্সটল</string>\n    <string name=\"untrusted_extension\">অনির্ভর‍যোগ্য এক্সটেনশন</string>\n    <string name=\"untrusted_extension_message\">এই এক্সটেনশনটি একটি অবিশ্বস্ত সার্টিফিকেট দিয়ে স্বাক্ষরিত হয়েছিল এবং সক্রিয় করা হয়নি।\n\\n\n\\nএকটি দূষিত এক্সটেনশন টাচিওমিতে সংরক্ষিত যেকোন লগইন শংসাপত্র পড়তে পারে বা নির্বিচারে কোড চালাতে পারে।\n\\n\n\\nএই শংসাপত্রটি বিশ্বাস করে আপনি এই ঝুঁকিগুলি গ্রহণ করেন।</string>\n    <string name=\"pref_double_tap_anim_speed\">দুই টোকার এনিমেশনের গতি</string>\n    <string name=\"double_tap_anim_speed_0\">এনিমেশন নেই</string>\n    <string name=\"double_tap_anim_speed_normal\">সাধারণ</string>\n    <string name=\"double_tap_anim_speed_fast\">দ্রুত</string>\n    <string name=\"manga_added_library\">সংগ্রহশালায় যোগ করা হয়েছে</string>\n    <string name=\"manga_removed_library\">সংগ্রহশালা থেকে অপসারণ করা হয়েছে</string>\n    <string name=\"copied_to_clipboard\">ক্লিপবোর্ডে কপি হয়েছে:\n\\n%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">যোগ করার জন্য উপাত্ত নির্বাচন করুন</string>\n    <string name=\"migrate\">স্থানান্তর</string>\n    <string name=\"copy\">অনুলিপি</string>\n    <string name=\"pager_viewer\">পেজড</string>\n    <string name=\"source_not_installed\">উৎস ইন্সটল করা নেই: %1$s</string>\n    <string name=\"repeating\">পুনরায় পড়া</string>\n    <string name=\"track_status\">স্থিতি</string>\n    <string name=\"track_type\">ধরণ</string>\n    <string name=\"transition_finished\">শেষ:</string>\n    <string name=\"transition_current\">বর্তমান:</string>\n    <string name=\"transition_next\">পরবর্তী:</string>\n    <string name=\"transition_previous\">পূর্ববর্তী :</string>\n    <string name=\"transition_no_next\">পরবর্তী কোন অধ্যায় নেই</string>\n    <string name=\"transition_no_previous\">কোন পূর্ববর্তী অধ্যায় নেই</string>\n    <string name=\"transition_pages_loading\">পৃষ্ঠা লোড হচ্ছে …</string>\n    <string name=\"transition_pages_error\">পৃষ্ঠাগুলো লোড করতে ব্যর্থ হয়েছে: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">দীর্ঘ ট্যাপে দেখান</string>\n    <string name=\"action_open_in_web_view\">WebView তে খুলুন</string>\n    <string name=\"pref_skip_read_chapters\">পঠিত অধ্যায়গুলো এড়িয়ে যান</string>\n    <string name=\"pref_color_filter_mode\">রঙ ফিল্টার মিশ্রন মোড</string>\n    <string name=\"filter_mode_overlay\">আস্তরণ</string>\n    <string name=\"filter_mode_screen\">পর্দা</string>\n    <string name=\"filter_mode_lighten\">ডডজ / হালকা</string>\n    <string name=\"filter_mode_darken\">বার্ন/অন্ধকার</string>\n    <string name=\"filter_mode_multiply\">গুণ</string>\n    <string name=\"label_help\">সাহায্য</string>\n    <string name=\"no_results_found\">কোন ফলাফল পাওয়া যায়নি</string>\n    <string name=\"migration_selection_prompt\">স্থানান্তর করতে একটি উৎস নির্বাচন করুন</string>\n    <string name=\"action_webview_back\">পেছনে</string>\n    <string name=\"action_webview_forward\">অগ্রবর্তী</string>\n    <string name=\"action_webview_refresh\">রেফ্রেস করুন</string>\n    <string name=\"pref_category_library\">সংগ্রহশালা</string>\n    <string name=\"ext_obsolete\">অচল</string>\n    <string name=\"obsolete_extension_message\">এই এক্সটেনশন আর উপলব্ধ নয়।</string>\n    <string name=\"email\">ইমেল ঠিকানা</string>\n    <string name=\"in_library\">লাইব্রেরিতে</string>\n    <string name=\"add_to_library\">লাইব্রেরিতে যুক্ত করুন</string>\n    <string name=\"manga_info_expand\">আরও</string>\n    <string name=\"manga_info_collapse\">কম</string>\n    <string name=\"action_select_inverse\">উল্টো নির্বাচন করুন</string>\n    <string name=\"action_sort_date_added\">তারিখে যোগকৃত</string>\n    <string name=\"action_sort_latest_chapter\">সর্বশেষ অধ্যায়</string>\n    <string name=\"action_menu\">তালিকা</string>\n    <string name=\"label_sources\">উৎস সমূহ</string>\n    <string name=\"label_more\">আরও</string>\n    <string name=\"pref_category_display\">প্রদর্শন</string>\n    <string name=\"parental_controls_info\">এটি অ্যাপের মধ্যে প্রাপ্তবয়স্কদের (18+) বিষয়বস্তু সারফেস করা থেকে অনানুষ্ঠানিক বা সম্ভাব্য ভুলভাবে পতাকাঙ্কিত এক্সটেনশানগুলিকে বাধা দেয় না।</string>\n    <string name=\"hide_notification_content\">বিজ্ঞপ্তির বিষয়বস্তু লুকান</string>\n    <string name=\"secure_screen\">পর্দা নিরাপদ করুন</string>\n    <string name=\"lock_never\">কখনই না</string>\n    <string name=\"lock_always\">সবসময়</string>\n    <string name=\"lock_with_biometrics\">আনলক প্রয়োজন</string>\n    <string name=\"pref_category_security\">নিরাপত্তা</string>\n    <string name=\"pref_manage_notifications\">বিজ্ঞপ্তিগুলি নিয়ন্ত্রণ করুন</string>\n    <string name=\"pref_date_format\">তারিখের রীতি</string>\n    <string name=\"theme_dark\">চালু করুন</string>\n    <string name=\"theme_light\">বন্ধ করুন</string>\n    <string name=\"theme_system\">সিস্টেমকে অনুসরণ করুন</string>\n    <string name=\"pref_category_theme\">থিম</string>\n    <string name=\"action_move_to_bottom\">নীচে সরান</string>\n    <string name=\"action_move_to_top\">শীর্ষে সরান</string>\n    <string name=\"action_oldest\">প্রবীণতম</string>\n    <string name=\"action_newest\">নবীনতম</string>\n    <string name=\"action_cancel_all\">সব বাতিল করুন</string>\n    <string name=\"action_unpin\">আলগা করুন</string>\n    <string name=\"action_pin\">আটকান</string>\n    <string name=\"action_disable\">অক্ষম</string>\n    <string name=\"action_display_show_tabs\">বিভাগের ট্যাবগুলি দেখুন</string>\n    <string name=\"action_display_comfortable_grid\">আরামপ্রদ গ্রিড</string>\n    <string name=\"action_migrate\">স্থানান্তর করুন</string>\n    <string name=\"action_start\">শুরু করুন</string>\n    <string name=\"action_view_chapters\">অধ্যায়গুলি দেখুন</string>\n    <string name=\"action_disable_all\">সব অক্ষম করুন</string>\n    <string name=\"action_enable_all\">সব সক্রিয় করুন</string>\n    <string name=\"pref_library_update_refresh_metadata\">মেটাডাটা সয়ংক্রিয়ভাবে হালনাগাদ করুন</string>\n    <string name=\"pref_category_library_update\">ব্যাপক আপডেট</string>\n    <string name=\"secure_screen_summary\">অ্যাপ পাল্টানোর সময় অ্যাপের কন্টেন্ট লুকান ও স্ক্রিনসট ব্লক করুন</string>\n    <string name=\"action_search_settings\">সেটিংসে খুঁজুন</string>\n    <string name=\"lock_when_idle\">কর্মহীন হলে লক করুন</string>\n    <string name=\"chapter_settings_updated\">হালনাগাদকৃত প্রকৃত শ্রেণির সেটিংস</string>\n    <string name=\"set_chapter_settings_as_default\">প্রকৃত হিসেবে সংরক্ষণ করুন</string>\n    <string name=\"confirm_set_chapter_settings\">আপনি কি নিশ্চিত সেটিংসগুলো প্রকৃত হিসেবে সংরক্ষণ করবেন?</string>\n    <string name=\"label_data\">তথ্য</string>\n    <string name=\"requires_app_restart\">কার্যকর করতে অ্যাপ পুনরারম্ভ করা লাগে</string>\n    <string name=\"label_network\">নেটওয়ার্ক</string>\n    <string name=\"restoring_backup_canceled\">পুনরুদ্ধার বাতিল করা হয়েছে</string>\n    <string name=\"restoring_backup_error\">ব্যাকআপ পুনরুদ্ধার ব্যর্থ হয়েছে</string>\n    <string name=\"restore_in_progress\">বর্তমানে পুনরুদ্ধার চলছে</string>\n    <string name=\"creating_backup_error\">ব্যাকআপ ব্যর্থ হয়েছে</string>\n    <string name=\"backup_in_progress\">ব্যাকআপ ইতিমধ্যেই চলছে</string>\n    <string name=\"restore_duration\">%02d মিনিট, %02d সেকেন্ড</string>\n    <string name=\"backup_restore_missing_sources\">উৎস অনুপলব্ধ:</string>\n    <string name=\"invalid_backup_file_missing_manga\">ব্যাকআপে কোনো মাংগা নেই।</string>\n    <string name=\"invalid_backup_file\">ব্যাকআপ ফাইল গ্রহণযোগ্য নয়</string>\n    <string name=\"pref_remove_bookmarked_chapters\">বুকমার্ক করা অধ্যায়গুলি মুছে ফেলার অনুমতি দিন</string>\n    <string name=\"pref_category_delete_chapters\">অধ্যায় মুছুন</string>\n    <string name=\"pref_webtoon_side_padding\">পার্শ্ব প্যাডিং</string>\n    <string name=\"pref_category_reading\">পড়া হচ্ছে</string>\n    <string name=\"pref_category_reading_mode\">পঠন ধরন</string>\n    <string name=\"pref_always_show_chapter_transition\">সবসময় অধ্যায় পরিবর্তন দেখান</string>\n    <string name=\"vertical_plus_viewer\">একটানা উল্লম্ব</string>\n    <string name=\"pref_show_reading_mode\">পঠন ধরন দেখান</string>\n    <string name=\"gray_background\">ধূসর</string>\n    <string name=\"pref_skip_filtered_chapters\">ফিলটারড অধ্যায় গুলো এড়িয়ে যান</string>\n    <string name=\"pref_cutout_short\">বিষয়বস্তু কাটআউটে দেখুন</string>\n    <string name=\"ext_nsfw_warning\">প্রাপ্তবয়স্কদের (18+) কন্টেন্ট থাকতে পারে</string>\n    <string name=\"ext_nsfw_short\">১৮+</string>\n    <string name=\"ext_updates_pending\">অনিষ্পন্ন হালনাগাদ</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">সংগ্রহশালা হালনাগেদের সময় নতুন মোড়ক এবং বর্ণনা খুঁজুন</string>\n    <string name=\"pinned_sources\">গাঁথুনিকৃত</string>\n    <string name=\"backup_restore_missing_trackers\">ট্র্যাকারগুলিতে প্রবেশ হয়নি:</string>\n    <string name=\"pref_show_reading_mode_summary\">রিডার খোলা থাকলে বর্তমান মোড সংক্ষেপে দেখান</string>\n    <string name=\"tapping_inverted_both\">উভয়</string>\n    <string name=\"tapping_inverted_vertical\">উল্লম্ব</string>\n    <string name=\"tapping_inverted_horizontal\">অনুভূমিক</string>\n    <string name=\"tapping_inverted_none\">কিছুই না</string>\n    <string name=\"pref_read_with_tapping_inverted\">উল্টানো ট্যাপিং</string>\n    <string name=\"channel_ext_updates\">এক্সটেনশনের হালনাগাদগুলো</string>\n    <string name=\"channel_new_chapters\">অধ্যায়ের হালনাগাদগুলো</string>\n    <string name=\"channel_errors\">ত্রুটিসমূহ</string>\n    <string name=\"channel_complete\">সম্পূর্ণ</string>\n    <string name=\"channel_progress\">অগ্রগতি</string>\n    <string name=\"information_webview_outdated\">অনুগ্রহ করে উন্নততর সামঞ্জস্যতার জন্য ওয়েবভিউ অ্যাপটি হালনাগাদ করুন</string>\n    <string name=\"information_webview_required\">টাচিয়ামির জন্য ওয়েবভিউ প্রয়োজন</string>\n    <string name=\"information_cloudflare_bypass_failure\">ক্লাউডফ্লেয়ার বাইপাস করতে ব্যর্থ</string>\n    <string name=\"notification_chapters_multiple\">অধ্যায়গুলি %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">অধ্যায় %1$s এবং %2$d আরও</string>\n    <string name=\"notification_chapters_single\">অধ্যায় %1$s</string>\n    <string name=\"download_insufficient_space\">কম সঞ্চয়স্থানের কারণে অধ্যায়গুলি ডাউনলোড করা যায়নি</string>\n    <string name=\"recent_manga_time\">অঃ %1$s - %2$s</string>\n    <string name=\"updating_library\">সংগ্রহশালার হালনাগাদ হচ্ছে</string>\n    <string name=\"loader_not_implemented_error\">উৎস খুঁজে পাওয়া যায়নি</string>\n    <string name=\"page_list_empty_error\">কোনও পৃষ্ঠা পাওয়া যায় নি</string>\n    <string name=\"viewer\">পঠন ধরন</string>\n    <string name=\"pref_category_for_this_series\">এই সিরিজের জন্য</string>\n    <string name=\"share_page_info\">%1$s: %2$s, পৃষ্ঠা %3$d</string>\n    <string name=\"paused\">বিরতি</string>\n    <string name=\"add_tracking\">ট্র্যাকিং যোগ করুন</string>\n    <string name=\"no_chapters_error\">কোনও অধ্যায় পাওয়া যায় নি</string>\n    <string name=\"also_set_chapter_settings_for_library\">এছাড়াও আমার সংগ্রহশালার মাঙ্গাতে প্রয়োগ করুন</string>\n    <string name=\"chapter_settings\">অধ্যায় সেটিংস</string>\n    <string name=\"sort_by_upload_date\">আপলোডের তারিখ অনুযায়ী</string>\n    <string name=\"pref_refresh_library_covers\">সংগ্রহশালার মাঙ্গার মোড়ক হালনাগাদ করুন</string>\n    <string name=\"unknown_status\">অজানা অবস্থা</string>\n    <string name=\"unknown_author\">অজানা লেখক</string>\n    <string name=\"no_pinned_sources\">আপনার কোন পিন করা উৎস নেই</string>\n    <string name=\"local_source_help_guide\">স্থানীয় উৎস নির্দেশিকা</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" সার্বজনীনভাবে খুঁজুন</string>\n    <string name=\"last_used_source\">সর্বশেষ ব্যবহৃত</string>\n    <string name=\"tabs_header\">ট্যাব গুলি</string>\n    <string name=\"downloaded_chapters\">ডাউনলোড করা অধ্যায়</string>\n    <string name=\"manga_from_library\">লাইব্রেরীর মাঙ্গা</string>\n    <string name=\"logout_success\">আপনি এখন প্রস্থান করেছেন</string>\n    <string name=\"logout\">প্রস্থান</string>\n    <string name=\"logout_title\">প্রস্থান করবেন %1$s থেকে?</string>\n    <string name=\"downloaded_only_summary\">আপনার লাইব্রেরীর সব মাঙ্গা ফিলটার করে</string>\n    <string name=\"pref_incognito_mode_summary\">পড়ার ইতিহাসে বিরতি দেয়</string>\n    <string name=\"pref_incognito_mode\">ছদ্মবেশী মোড</string>\n    <string name=\"label_downloaded_only\">কেবল ডাউনলোড হয়েছে এমন</string>\n    <string name=\"updated_version\">হালনাগাদ করা হয়েছে v%1$s তে</string>\n    <string name=\"check_for_updates\">হালনাগাদ এর জন্য অনুসন্ধান করুন</string>\n    <string name=\"licenses\">ওপেন সোর্স লাইসেন্স</string>\n    <string name=\"whats_new\">নতুন কি</string>\n    <string name=\"website\">ওয়েবসাইট</string>\n    <string name=\"pref_clear_history\">ইতিহাস সাফ করুন</string>\n    <string name=\"clear_history_confirmation\">আপনি নিশ্চিত? সব ইতিহাস মুছে যাবে।</string>\n    <string name=\"clear_history_completed\">ইতিহাস মুছে ফেলা হয়েছে</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">যন্ত্রের সেটিংস খোলা সম্ভব হয়নি</string>\n    <string name=\"battery_optimization_disabled\">ব্যাটারি অপ্টিমাইজেশন ইতিমধ্যে অক্ষম করা আছে</string>\n    <string name=\"pref_disable_battery_optimization_summary\">পিছেনে লাইব্রেরী হালনাগাদ ও ব্যাকআপে সাহায্য করে</string>\n    <string name=\"pref_disable_battery_optimization\">ব্যাটারি অপ্টিমাইজেশন অক্ষম করুন</string>\n    <string name=\"tracking_info\">ট্র্যাকিং সার্ভিসে অধ্যায়ের অগ্রগতি হালনাগাদের একমুখী পথ। স্বতন্ত্র মাঙ্গার ট্র্যকিং সেটাপের জন্য তাদের নিজস্ব ট্র্যাকিং বাটন ব্যবহার করুন।</string>\n    <string name=\"pref_show_nsfw_source\">উৎস এবং এক্সটেনশন তালিকায় প্রদর্শন করুন</string>\n    <string name=\"pref_category_nsfw_content\">প্রাপ্তবয়স্কদের জন্য (18+) উৎস</string>\n    <string name=\"action_filter_tracked\">ট্র্যাক করা হয়েছে</string>\n    <string name=\"pref_viewer_nav\">ন্যাভিগেশন নকশা</string>\n    <string name=\"action_display_show_number_of_items\">আইটেমের সংখ্যা প্রদর্শন করুন</string>\n    <string name=\"spen_next_page\">পরের পৃষ্ঠা</string>\n    <string name=\"spen_previous_page\">আগের পৃষ্ঠা</string>\n    <string name=\"file_picker_error\">কোনো ফাইল বাছাইকারী অ্যাপ পাওয়া যায় নি</string>\n    <string name=\"migration_help_guide\">উৎস স্থানান্তর গাইড</string>\n    <string name=\"myanimelist_relogin\">দয়া করে MAL এ আবার লগইন করুন</string>\n    <string name=\"track_finished_reading_date\">শেষ করার তারিখ</string>\n    <string name=\"track_started_reading_date\">শুরু করার তারিখ</string>\n    <string name=\"pref_dump_crash_logs_summary\">বিকাশকারীদের সাথে সেয়ার করার জন্য এরর লগগুলো একটি ফাইলে সংরক্ষণ করে</string>\n    <string name=\"right_and_left_nav\">ডান ও বাম</string>\n    <string name=\"edge_nav\">কিনার</string>\n    <string name=\"kindlish_nav\">কিন্ডেলের মতো</string>\n    <string name=\"l_nav\">L আকারের</string>\n    <string name=\"action_desc\">অধোগামী</string>\n    <string name=\"action_asc\">ঊর্ধ্বগামী</string>\n    <string name=\"action_order_by_chapter_number\">অধ্যায়ের নম্বর অনুসারে</string>\n    <string name=\"action_order_by_upload_date\">আপলোডের তারিখ অনুসারে</string>\n    <string name=\"error_no_match\">পাওয়া যায়নি</string>\n    <string name=\"source_unsupported\">উৎস সমর্থিত নয়</string>\n    <string name=\"unread\">অপঠিত</string>\n    <string name=\"error_sharing_cover\">কভার শেয়ার করার সময় ত্রুটি</string>\n    <string name=\"error_saving_cover\">কভার সংরক্ষণে ত্রুটি</string>\n    <string name=\"cover_saved\">কভার সংরক্ষিত</string>\n    <string name=\"manga_cover\">আবরণ</string>\n    <string name=\"clipboard_copy_error\">ক্লিপবোর্ডে কপি করা যায়নি</string>\n    <string name=\"date\">তারিখ</string>\n    <string name=\"local_filter_order_by\">ক্রমানুসার</string>\n    <string name=\"local_invalid_format\">দুর্বল অধ্যায় বিন্যাস</string>\n    <string name=\"chapter_not_found\">অধ্যায় পাওয়া যায় নি</string>\n    <string name=\"notification_incognito_text\">ছদ্মবেশী মোড নিষ্ক্রিয় করুন</string>\n    <string name=\"about_dont_kill_my_app\">কিছু নির্মাতাদের অতিরিক্ত অ্যাপ সীমাবদ্ধতা রয়েছে যা ব্যাকগ্রাউন্ড পরিষেবাগুলিকে হত্যা করে। এই ওয়েবসাইটে কিভাবে এটি ঠিক করা যায় সে সম্পর্কে আরও তথ্য রয়েছে।</string>\n    <string name=\"label_background_activity\">পটভূমি কার্যকলাপ</string>\n    <string name=\"pref_dump_crash_logs\">ডাম্প ক্র্যাশ লগ</string>\n    <string name=\"pref_dns_over_https\">এইচটিটিপিএস এর উপর ডিএনএস</string>\n    <string name=\"restore_miui_warning\">এমআইইউআই অপ্টিমাইজেশন নিষ্ক্রিয় থাকলে ব্যাকআপ/রিস্টোর সঠিকভাবে কাজ নাও করতে পারে।</string>\n    <string name=\"backup_restore_content_full\">ব্যাকআপ ফাইল থেকে ডেটা পুনরুদ্ধার করা হবে।\n\\n\n\\nআপনাকে যে কোন অনুপস্থিত এক্সটেনশন ইনস্টল করতে হবে এবং সেগুলি ব্যবহার করার জন্য পরে ট্র্যাকিং পরিষেবাগুলিতে লগ ইন করতে হবে।</string>\n    <string name=\"action_track\">ট্র্যাক</string>\n    <string name=\"enhanced_tracking_info\">নির্দিষ্ট উৎসের জন্য উন্নত বৈশিষ্ট্য প্রদান করে এমন পরিষেবা। আপনার লাইব্রেরিতে যোগ করা হলে মাঙ্গা স্বয়ংক্রিয়ভাবে ট্র্যাক করা হয়।</string>\n    <string name=\"enhanced_services\">উন্নত সেবা</string>\n    <string name=\"tracking_guide\">ট্র্যাকিং গাইড</string>\n    <string name=\"pref_download_new_categories_details\">বাদ দেওয়া ক্যাটাগরিতে থাকা মঙ্গা ডাউনলোড করা হবে না, যদিও সেগুলি অন্তর্ভুক্ত ক্যাটাগরিতেও আছে।</string>\n    <string name=\"pref_category_auto_download\">স্বয়ংক্রিয়ভাবে ডাউনলোড</string>\n    <string name=\"pref_lowest\">সর্বনিম্ন</string>\n    <string name=\"pref_low\">নিম্ম</string>\n    <string name=\"pref_high\">উচ্চ</string>\n    <string name=\"pref_highest\">সর্বোচ্চ</string>\n    <string name=\"pref_hide_threshold\">স্ক্রলে মেনু লুকানোর জন্য সংবেদনশীলতা</string>\n    <string name=\"rotation_landscape\">ভূদৃশ্য</string>\n    <string name=\"rotation_portrait\">প্রতিকৃতি</string>\n    <string name=\"rotation_type\">ঘূর্ণনের ধরন</string>\n    <string name=\"nav_zone_right\">ডান</string>\n    <string name=\"nav_zone_left\">বাম</string>\n    <string name=\"nav_zone_next\">পরবর্তী</string>\n    <string name=\"nav_zone_prev\">পূর্ববর্তী</string>\n    <string name=\"automatic_background\">স্বয়ংক্রিয়</string>\n    <string name=\"pref_create_folder_per_manga_summary\">মাঙ্গা শিরোনাম অনুযায়ী ফোল্ডার তৈরি করে</string>\n    <string name=\"pref_create_folder_per_manga\">পৃষ্ঠাগুলি পৃথক ফোল্ডারে সংরক্ষণ করুন</string>\n    <string name=\"pref_reader_actions\">ক্রিয়া</string>\n    <string name=\"pref_inverted_colors\">উল্টানো</string>\n    <string name=\"pref_grayscale\">ধূসর স্কেল</string>\n    <string name=\"off\">বন্ধ</string>\n    <string name=\"on\">চালু</string>\n    <string name=\"pref_dual_page_invert_summary\">যদি দ্বৈত পৃষ্ঠার বিভক্তির স্থান পাঠের দিকের সাথে মেলে না</string>\n    <string name=\"pref_dual_page_invert\">ডুয়াল পেজ স্প্লিট প্লেসমেন্ট ইনভার্ট করুন</string>\n    <string name=\"pref_dual_page_split\">দ্বৈত পৃষ্ঠা বিভক্ত</string>\n    <string name=\"pref_show_navigation_mode_summary\">পাঠক খোলা হলে ট্যাপ জোন দেখান</string>\n    <string name=\"pref_show_navigation_mode\">নেভিগেশন বিন্যাস ওভারলে দেখান</string>\n    <string name=\"exclude\">বাদ দিন: %s</string>\n    <string name=\"include\">অন্তর্ভুক্ত করুন: %s</string>\n    <string name=\"none\">শূন্য</string>\n    <string name=\"pref_library_update_categories_details\">বাদ দেওয়া ক্যাটাগরিতে মঙ্গা আপডেট করা হবে না যদিও সেগুলি অন্তর্ভুক্ত ক্যাটাগরিতেও থাকে।</string>\n    <string name=\"categorized_display_settings\">সাজানোর এবং প্রদর্শনের জন্য প্রতি শ্রেণীর সেটিংস</string>\n    <string name=\"restrictions\">বিধিনিষেধ: %s</string>\n    <string name=\"relative_time_today\">সম্প্রতি</string>\n    <string name=\"pref_dark_theme_pure_black\">বিশুদ্ধ কালো অন্ধকার মোড</string>\n    <string name=\"theme_yotsuba\">চার পাতা</string>\n    <string name=\"theme_yinyang\">ইয়িন এবং ইয়াং</string>\n    <string name=\"theme_tealturquoise\">টিল এবং ফিরোজা</string>\n    <string name=\"theme_tako\">তাই</string>\n    <string name=\"theme_strawberrydaiquiri\">স্ট্রবেরি ডাইকুইরি</string>\n    <string name=\"theme_midnightdusk\">মধ্যরাতের সন্ধ্যা</string>\n    <string name=\"theme_greenapple\">সবুজ আপেল</string>\n    <string name=\"theme_monet\">প্রগতিশীল</string>\n    <string name=\"pref_app_theme\">অ্যাপ থিম</string>\n    <string name=\"pref_category_appearance\">দৃশ্য</string>\n    <string name=\"action_start_downloading_now\">এখনই ডাউনলোড শুরু করুন</string>\n    <string name=\"action_show_errors\">সকল ত্রুটি দেখুন</string>\n    <string name=\"cancel_all_for_series\">এই সিরিজের সব বাতিল করুন</string>\n    <string name=\"action_display_local_badge\">স্থানীয় উৎস</string>\n    <string name=\"information_empty_category_dialog\">আপনার এখনও কোন বিভাগ নেই |</string>\n    <string name=\"update_check_eol\">এই অ্যান্ড্রয়েড সংস্করণটি আর সমর্থিত নয়</string>\n    <string name=\"confirm_lock_change\">পরিবর্তন নিশ্চিত করতে প্রমাণীকরণ করুন</string>\n    <string name=\"action_sort_chapter_fetch_date\">প্রাপ্তির তারিখ</string>\n    <string name=\"label_default\">সাধারণ</string>\n    <string name=\"pref_remove_exclude_categories\">বর্জিত বিভাগ গুলি</string>\n    <string name=\"ext_app_info\">অ্যাপের তথ্য</string>\n    <string name=\"ext_update_all\">শব উপদাতে কর</string>\n    <string name=\"backup_info\">স্বয়ংক্রিয় ব্যাকআপ অত্যন্ত সুপারিশময়. আপনি অন্যান্য জায়গায়ও কপি রাখা উচিত।</string>\n    <string name=\"getting_started_guide\">শুরু হওয়ার গাইড</string>\n    <string name=\"channel_app_updates\">অ্যাপ আপডেট</string>\n    <string name=\"ext_installer_pref\">ইন্সটলআর</string>\n    <string name=\"ext_installer_legacy\">লেগাছি</string>\n    <string name=\"ext_installer_shizuku_stopped\">শিজুকু চলছে না</string>\n    <string name=\"ext_install_service_notif\">এক্সটেনশন ইন্সটল করা হচ্ছে…</string>\n    <string name=\"pref_verbose_logging\">ভার্বোস লগিং</string>\n    <string name=\"pref_verbose_logging_summary\">সিস্টেম লগে ভার্বোস লগ প্রিন্ট করুন (অ্যাপের কার্যক্ষমতা হ্রাস করে)</string>\n    <string name=\"help_translate\">অনুবাদে সাহায্য করুন</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">এক্সটেনশন ইনস্টলার হিসাবে Shizuku ব্যবহার করতে Shizuku ইনস্টল করুন এবং শুরু করুন।</string>\n    <string name=\"pref_tablet_ui_mode\">তাব্লেত উই</string>\n    <string name=\"action_sort_count\">মোট লেখা</string>\n    <string name=\"label_warning\">সতর্কতা</string>\n    <string name=\"action_display_language_badge\">ভাষা</string>\n    <string name=\"update_72hour\">প্রতি ৩ দিন</string>\n    <string name=\"connected_to_wifi\">সুধু মাত্র ওয়িফি তে</string>\n    <string name=\"notification_size_warning\">সতর্কতা: বড় আপডেটগুলি উত্সের ক্ষতি করে এবং ধীরগতির আপডেটের দিকে নিয়ে যেতে পারে এবং ব্যাটারি ব্যবহারও বাড়িয়ে দিতে পারে</string>\n    <string name=\"download_queue_size_warning\">সতর্কতা: বড় আকারের ডাউনলোডের ফলে উৎসগুলি মন্থর হয়ে যেতে পারে এবং/অথবা তাচিওমি ব্লক হয়ে যেতে পারে। আরও জানতে এখানে ট্যাপ করুন।</string>\n    <string name=\"pref_auto_clear_chapter_cache\">অ্যাপ বন্দ্ধ করার সময় অধ্যায়ের ক্যাশে পরিষ্কার করুন</string>\n    <string name=\"database_clean\">তথ্যশালা পরিষ্কার</string>\n    <string name=\"clear_database_source_item_count\">তথ্যশালায় %1$d টি মাঙ্গা যেগুলি লাইব্রেরীতে নেই</string>\n    <string name=\"privacy_policy\">গোপনীয়তা নীতি</string>\n    <string name=\"extension_api_error\">এক্সটেনশন তালিকা পেতে ব্যার্থ হলো</string>\n    <string name=\"skipped_reason_completed\">এড়িয়ে যাওয়া হয়েছে কারণ সিরিজটি সম্পূর্ণ</string>\n    <string name=\"cancelled\">বাতিল করা হয়েছে</string>\n    <string name=\"on_hiatus\">বিরতিতে রয়েছে</string>\n    <string name=\"notification_update_error\">%1$d আপডেট(গুলি) ব্যর্থ হয়েছে</string>\n    <string name=\"publishing_finished\">সম্পূর্ণ প্রকাশিত</string>\n    <string name=\"action_sort_last_manga_update\">সর্বশেষ হালনাগাদ চেক</string>\n    <string name=\"delete_category_confirmation\">আপনি কি \\\"%s\\\" বিভাগটি মুছে ফেলতে চান?</string>\n    <string name=\"appwidget_updates_description\">সম্প্রতি আপনার হালনাগাদকৃত মাঙ্গা দেখুন</string>\n    <string name=\"are_you_sure\">আপনি কি নিশ্চিত?</string>\n    <string name=\"action_sort_unread_count\">অপঠিত সংখ্যা</string>\n    <string name=\"action_remove_everything\">সবকিছু মুছুন</string>\n    <string name=\"action_show_manga\">লেখা দেখান</string>\n    <string name=\"delete_category\">বিভাগ মুছুন</string>\n    <string name=\"theme_lavender\">ল্যাভেণ্ডার</string>\n    <string name=\"action_search_hint\">খুঁজুন…</string>\n    <string name=\"action_display_cover_only_grid\">শুধু প্রচ্ছদসহ গ্রিড</string>\n    <string name=\"action_move_to_top_all_for_series\">সিরিজ কে উপরে তুলুন</string>\n    <string name=\"action_close\">বন্ধ</string>\n    <string name=\"complete_list\">লিস্ট সম্পূর্ন করুন</string>\n    <string name=\"unfinished_list\">অসম্পূর্ণ তালিকা</string>\n    <string name=\"on_hold_list\">স্থগিত তালিকা</string>\n    <string name=\"auto_download_while_reading\">পড়ার সময় সয়ংক্রিয়ভাবে ডাউনলোড</string>\n    <string name=\"pref_update_only_completely_read\">অপঠিত অধ্যায়সহ</string>\n    <string name=\"pref_update_only_started\">যেগুলো শুরু করা হয়নি</string>\n    <string name=\"webview_data_deleted\">ওয়েবভিউ ডাটা মুছা হয়েছে</string>\n    <string name=\"split_tall_images_summary\">পঠন কর্মক্ষমতা উন্নত করে</string>\n    <string name=\"pref_clear_webview_data\">ওয়েবভিইউ ডাটা মুছুন</string>\n    <string name=\"multi_lang\">বহু</string>\n    <string name=\"pref_library_summary\">বিভাগসমূহ, সার্বজনীন হালনাগাদ</string>\n    <string name=\"pref_app_language\">অ্যাপ ভাষা</string>\n    <string name=\"pref_appearance_summary\">থিম,সময় ও তারিখের ধরন</string>\n    <string name=\"pref_reader_summary\">পঠনের ধরন, ডিসপ্লে,নেভিগেশন</string>\n    <string name=\"pref_backup_summary\">ম্যানুয়াল ও সয়ংক্রিয় ব্যাকআপ</string>\n    <string name=\"pref_security_summary\">অ্যাপ লক,নিরাপদ পর্দা</string>\n    <string name=\"skipped_reason_not_caught_up\">অপঠিত অধ্যায় থাকায় এড়িয়ে যাওয়া হয়েছে</string>\n    <string name=\"label_local\">স্থানীয়</string>\n    <string name=\"action_copy_to_clipboard\">ক্লিপবোর্ডে কপি করুন</string>\n    <string name=\"pref_reset_viewer_flags_success\">সমস্ত পাঠক সেটিংস আবার</string>\n    <string name=\"label_stats\">পরিসংখ্যান</string>\n    <string name=\"label_downloaded\">ডাউনলোড হয়েছে</string>\n    <string name=\"label_started\">শুরু হয়েছে</string>\n    <string name=\"appwidget_unavailable_locked\">অ্যাপ লক চালু থাকলে Widget পাওয়া যায় না</string>\n    <string name=\"action_update_category\">বিভাগ আপডেট করুন</string>\n    <string name=\"action_open_random_manga\">এলোমেলো এন্ট্রি খুলুন</string>\n    <string name=\"action_display_show_continue_reading_button\">পড়া চালিয়ে যান বোতাম</string>\n    <string name=\"download_notifier_cache_renewal\">ডাউনলোড চেক করা হচ্ছে</string>\n    <string name=\"download_notifier_split_page_path_not_found\">পৃষ্ঠার ফাইল পাথ খুঁজে পাওয়া যায়নি %d</string>\n    <string name=\"pref_invalidate_download_cache\">অবৈধ ডাউনলোড সমুহ</string>\n    <string name=\"action_not_now\">এখন না</string>\n    <string name=\"pref_debug_info\">ডিবাগ তথ্য</string>\n    <string name=\"skipped_reason_not_always_update\">বাদ দেওয়া হয়েছে কারণ সিরিজের আপডেটের প্রয়োজন নেই৷</string>\n    <string name=\"unlock_app_title\">আনলক %s</string>\n    <string name=\"action_set_interval\">সেট ইন্টারভেল</string>\n    <string name=\"delete_downloaded\">ডাউনলোড করা ফাইল ডিলেট করুন</string>\n    <string name=\"action_menu_overflow_description\">আর অপশন</string>\n    <string name=\"selected\">সিলেক্টেড</string>\n    <string name=\"not_selected\">নট সিলেক্টেড</string>\n    <string name=\"scanlator\">স্ক্যানলেটর</string>\n    <string name=\"action_bar_up_description\">নেভিগেট আপ</string>\n    <string name=\"label_data_storage\">ডাটা অন স্টোরেজ</string>\n    <string name=\"action_filter_interval_custom\">কাস্টমাইজড আনার ব্যবধান</string>\n    <string name=\"onboarding_storage_action_select\">ফোল্ডার নির্বাচন করুন</string>\n    <string name=\"pref_onboarding_guide\">অনবর্ডিং গাইড</string>\n    <string name=\"onboarding_action_finish\">শুরু করুন</string>\n    <string name=\"action_apply\">এপ্লাই</string>\n    <string name=\"onboarding_storage_selection_required\">একটি ফোল্ডার অবশ্যই ঠিক করতে হবে</string>\n    <string name=\"onboarding_permission_notifications\">নোটিফিকেশনের পারমিশন</string>\n    <string name=\"action_revert_to_default\">সকল সেটিং ডিফল্ট করুন</string>\n    <string name=\"onboarding_permission_install_apps\">অ্যাপের ইন্সটল করার পারমিশন</string>\n    <string name=\"onboarding_heading\">স্বাগতম</string>\n    <string name=\"action_move_to_bottom_all_for_series\">নিচের দিকে সরান</string>\n    <string name=\"onboarding_action_skip\">বাদ দিন</string>\n    <string name=\"onboarding_action_next\">পরবর্তী</string>\n    <string name=\"onboarding_permission_install_apps_description\">সোর্স এক্সটেনশন ইনস্টল করার জন্য</string>\n    <string name=\"onboarding_description\">প্রথমে কিছু ঠিক করে নিন , পরবর্তীতে আপনি চাইলে সেটিং থেকে সবকিছু পরিবর্তন করতে পারবেন।</string>\n    <string name=\"internal_error\">ইন্টারনাল ইরর: বাকি ইনফরমেশন পেতে ক্যাশ লগ দেখুন</string>\n    <string name=\"skipped_reason_not_started\">স্কিপ করা হয়েছে কারণ আগে কোন চ্যাপ্টার পড়া হয়নি</string>\n    <string name=\"action_sort_tracker_score\">ট্রেকার স্কোর</string>\n    <string name=\"action_ok\">ঠিক আছে</string>\n    <string name=\"action_sort_next_updated\">পরবর্তী আপডেটের সম্ভাব্য সময়</string>\n    <string name=\"action_copy_link\">লিংক কপি করুন</string>\n    <string name=\"label_auto\">স্বয়ংক্রিয়</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">অবজ্ঞাত অবস্থায় ব্যাটারি ব্যবহার</string>\n    <string name=\"action_sort_random\">এলোমেলো</string>\n    <string name=\"onboarding_permission_notifications_description\">লাইব্রেরি আপডেট এবং আরও অনেক কিছুর জন্য বিজ্ঞপ্তি পান।</string>\n    <string name=\"action_add_anyway\">যাই হোক যোগ করুন</string>\n    <string name=\"action_migrate_duplicate\">বিদ্যমান এন্ট্রি স্থানান্তর করুন</string>\n    <string name=\"onboarding_storage_help_action\">স্টোরেজ গাইড</string>\n    <string name=\"onboarding_storage_help_info\">পুরোনো ভার্সন থেকে আপডেট করছেন এবং কী নির্বাচন করবেন তা নিশ্চিত নন? আরও তথ্যের জন্য স্টোরেজ গাইডটি দেখুন।</string>\n    <string name=\"label_upcoming\">আসন্ন</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ca/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Després d’%1$s minut</item>\n        <item quantity=\"many\">Després de %1$s minuts</item>\n        <item quantity=\"other\">Després de %1$s minuts</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d capítol nou</item>\n        <item quantity=\"many\">%1$d capítols nous</item>\n        <item quantity=\"other\">%1$d capítols nous</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capítols %1$s i 1 més</item>\n        <item quantity=\"many\">Capítols %1$s i %2$d més</item>\n        <item quantity=\"other\">Capítols %1$s i %2$d més</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Per a %d element</item>\n        <item quantity=\"many\">Per a %d elements</item>\n        <item quantity=\"other\">Per a %d elements</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Hi ha una actualització d’una extensió</item>\n        <item quantity=\"many\">Hi ha actualitzacions de %d extensions</item>\n        <item quantity=\"other\">Hi ha actualitzacions de %d extensions</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">En resta %1$s</item>\n        <item quantity=\"many\">En resten %1$s</item>\n        <item quantity=\"other\">En resten %1$s</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Fet en %1$s amb %2$s error</item>\n        <item quantity=\"many\">Fet en %1$s amb %2$s errors</item>\n        <item quantity=\"other\">Fet en %1$s amb %2$s errors</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoria</item>\n        <item quantity=\"many\">%d categories</item>\n        <item quantity=\"other\">%d categories</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capítol</item>\n        <item quantity=\"many\">%1$s capítols</item>\n        <item quantity=\"other\">%1$s capítols</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d servei de seguiment</item>\n        <item quantity=\"many\">%d serveis de seguiment</item>\n        <item quantity=\"other\">%d serveis de seguiment</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">S’ha omès %d capítol. És possible que manqui a la font o que hagi estat filtrat</item>\n        <item quantity=\"many\">S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats</item>\n        <item quantity=\"other\">S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ahir</item>\n        <item quantity=\"many\">Fa %1$d dies</item>\n        <item quantity=\"other\">Fa %1$d dies</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">El següent capítol no llegit</item>\n        <item quantity=\"many\">Els següents %d capítols no llegits</item>\n        <item quantity=\"other\">Els següents %d capítols no llegits</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">El següent capítol</item>\n        <item quantity=\"many\">Els següents %d capítols</item>\n        <item quantity=\"other\">Els següents %d capítols</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Manca %1$s capítol</item>\n        <item quantity=\"many\">Manquen %1$s capítols</item>\n        <item quantity=\"other\">Manquen %1$s capítols</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 dia</item>\n        <item quantity=\"many\">%d dies</item>\n        <item quantity=\"other\">%d dies</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repositori</item>\n        <item quantity=\"many\">%d repositoris</item>\n        <item quantity=\"other\">%d repositoris</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Demà</item>\n        <item quantity=\"many\">D’aquí a %1$d dies</item>\n        <item quantity=\"other\">D’aquí a %1$d dies</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 pàgina</item>\n        <item quantity=\"many\">%1$s pàgines</item>\n        <item quantity=\"other\">%1$s pàgines</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ca/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nom</string>\n    <string name=\"categories\">Categories</string>\n    <string name=\"manga\">Elements de la biblioteca</string>\n    <string name=\"chapters\">Capítols</string>\n    <string name=\"track\">En seguiment</string>\n    <string name=\"history\">Historial</string>\n    <string name=\"label_settings\">Configuració</string>\n    <string name=\"label_download_queue\">Cua de baixades</string>\n    <string name=\"label_library\">Biblioteca</string>\n    <string name=\"label_recent_manga\">Historial</string>\n    <string name=\"label_recent_updates\">Novetats</string>\n    <string name=\"label_backup\">Còpia de seguretat i restauració</string>\n    <string name=\"label_migration\">Migració</string>\n    <string name=\"label_extensions\">Extensions</string>\n    <string name=\"label_extension_info\">Informació de l’extensió</string>\n    <string name=\"action_settings\">Configuració</string>\n    <string name=\"action_filter\">Filtra</string>\n    <string name=\"action_filter_bookmarked\">Marcats</string>\n    <string name=\"action_filter_unread\">No llegits</string>\n    <string name=\"action_filter_empty\">Elimina el filtre</string>\n    <string name=\"action_sort_alpha\">Alfabèticament</string>\n    <string name=\"action_sort_total\">Nombre total de capítols</string>\n    <string name=\"action_sort_last_read\">Darrera lectura</string>\n    <string name=\"action_search\">Cerca</string>\n    <string name=\"action_global_search\">Cerca global</string>\n    <string name=\"action_select_all\">Selecciona-ho tot</string>\n    <string name=\"action_mark_as_read\">Marca com a llegit</string>\n    <string name=\"action_mark_as_unread\">Marca com a no llegit</string>\n    <string name=\"action_mark_previous_as_read\">Marca els anteriors com a llegits</string>\n    <string name=\"action_download\">Baixa</string>\n    <string name=\"action_bookmark\">Marca el capítol</string>\n    <string name=\"action_remove_bookmark\">Desmarca el capítol</string>\n    <string name=\"action_delete\">Suprimeix</string>\n    <string name=\"action_update_library\">Actualitza la biblioteca</string>\n    <string name=\"action_edit\">Edita</string>\n    <string name=\"action_add\">Afegeix</string>\n    <string name=\"action_add_category\">Afegeix una categoria</string>\n    <string name=\"action_edit_categories\">Edita les categories</string>\n    <string name=\"action_rename_category\">Canvia el nom de la categoria</string>\n    <string name=\"action_move_category\">Defineix les categories</string>\n    <string name=\"action_edit_cover\">Edita la portada</string>\n    <string name=\"action_pause\">Pausa</string>\n    <string name=\"action_previous_chapter\">Capítol anterior</string>\n    <string name=\"action_next_chapter\">Capítol següent</string>\n    <string name=\"action_retry\">Torna-ho a provar</string>\n    <string name=\"action_remove\">Elimina</string>\n    <string name=\"action_resume\">Reprèn</string>\n    <string name=\"action_open_in_browser\">Obre al navegador</string>\n    <string name=\"action_display_mode\">Mode de visualització</string>\n    <string name=\"action_display\">Mostra</string>\n    <string name=\"action_display_grid\">Graella compacta</string>\n    <string name=\"action_display_list\">Llista</string>\n    <string name=\"action_display_download_badge\">Capítols baixats</string>\n    <string name=\"action_cancel\">Cancel·la</string>\n    <string name=\"action_sort\">Ordena</string>\n    <string name=\"action_install\">Instal·la</string>\n    <string name=\"action_share\">Comparteix</string>\n    <string name=\"action_save\">Desa</string>\n    <string name=\"action_reset\">Reinicia</string>\n    <string name=\"action_undo\">Desfés</string>\n    <string name=\"action_open_log\">Obre el registre</string>\n    <string name=\"action_restore\">Restaura</string>\n    <string name=\"loading\">S’està carregant…</string>\n    <string name=\"app_not_available\">Aplicació no disponible</string>\n    <string name=\"pref_category_general\">General</string>\n    <string name=\"pref_category_reader\">Lector</string>\n    <string name=\"pref_category_downloads\">Baixades</string>\n    <string name=\"pref_category_tracking\">Seguiment</string>\n    <string name=\"pref_category_advanced\">Avançat</string>\n    <string name=\"pref_category_about\">Quant a</string>\n    <string name=\"pref_library_columns\">Elements per fila</string>\n    <string name=\"portrait\">Vertical</string>\n    <string name=\"landscape\">Horitzontal</string>\n    <string name=\"pref_library_update_interval\">Actualitzacions automàtiques</string>\n    <string name=\"update_never\">Desactivades</string>\n    <string name=\"update_6hour\">Cada 6 hores</string>\n    <string name=\"update_12hour\">Cada 12 hores</string>\n    <string name=\"update_24hour\">Cada dia</string>\n    <string name=\"update_48hour\">Cada 2 dies</string>\n    <string name=\"update_weekly\">Cada setmana</string>\n    <string name=\"all\">Tot</string>\n    <string name=\"pref_library_update_restriction\">Restriccions del dispositiu per a les actualitzacions automàtiques</string>\n    <string name=\"charging\">Quan s’estigui carregant</string>\n    <string name=\"pref_update_only_non_completed\">Omet els elements amb l’estat «Completat»</string>\n    <string name=\"pref_auto_update_manga_sync\">Actualitza el progrés després de llegir</string>\n    <string name=\"default_category\">Categoria per defecte</string>\n    <string name=\"default_category_summary\">Demana-ho sempre</string>\n    <string name=\"ext_update\">Actualitza</string>\n    <string name=\"ext_install\">Instal·la</string>\n    <string name=\"ext_pending\">Pendent</string>\n    <string name=\"ext_downloading\">S’està baixant</string>\n    <string name=\"ext_installing\">S’està instal·lant</string>\n    <string name=\"ext_installed\">Instal·lades</string>\n    <string name=\"ext_trust\">Confia-hi</string>\n    <string name=\"ext_untrusted\">No és de confiança</string>\n    <string name=\"ext_uninstall\">Desinstal·la</string>\n    <string name=\"untrusted_extension\">Extensió que no és de confiança</string>\n    <string name=\"untrusted_extension_message\">Les extensions malicioses poden llegir qualsevol credencial d’inici de sessió desada o executar codi arbitrari.\\n\\nSi confieu en aquesta extensió, accepteu aquests riscos.</string>\n    <string name=\"pref_fullscreen\">Pantalla completa</string>\n    <string name=\"pref_page_transitions\">Anima les transicions de pàgina</string>\n    <string name=\"pref_show_page_number\">Mostra el número de pàgina</string>\n    <string name=\"pref_crop_borders\">Retalla les vores</string>\n    <string name=\"pref_custom_brightness\">Brillantor personalitzada</string>\n    <string name=\"pref_custom_color_filter\">Filtre de color personalitzat</string>\n    <string name=\"pref_keep_screen_on\">Mantingues la pantalla encesa</string>\n    <string name=\"pref_reader_navigation\">Navegació</string>\n    <string name=\"pref_read_with_volume_keys\">Tecles de volum</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverteix les tecles de volum</string>\n    <string name=\"pref_reader_theme\">Color de fons</string>\n    <string name=\"white_background\">Blanc</string>\n    <string name=\"black_background\">Negre</string>\n    <string name=\"pref_viewer_type\">Mode de lectura per defecte</string>\n    <string name=\"left_to_right_viewer\">Paginat (d’esquerra a dreta)</string>\n    <string name=\"right_to_left_viewer\">Paginat (de dreta a esquerra)</string>\n    <string name=\"vertical_viewer\">Paginat (vertical)</string>\n    <string name=\"webtoon_viewer\">Tira vertical</string>\n    <string name=\"pager_viewer\">Paginat</string>\n    <string name=\"pref_image_scale_type\">Tipus d’escalat</string>\n    <string name=\"scale_type_fit_screen\">Ajusta a la pantalla</string>\n    <string name=\"scale_type_stretch\">Estira</string>\n    <string name=\"scale_type_fit_width\">Ajusta a l’amplada</string>\n    <string name=\"scale_type_fit_height\">Ajusta a l’alçada</string>\n    <string name=\"scale_type_original_size\">Mida original</string>\n    <string name=\"scale_type_smart_fit\">Ajust intel·ligent</string>\n    <string name=\"pref_zoom_start\">Posició d’inici de l’ampliació</string>\n    <string name=\"zoom_start_automatic\">Automàtica</string>\n    <string name=\"zoom_start_left\">Esquerra</string>\n    <string name=\"zoom_start_right\">Dreta</string>\n    <string name=\"zoom_start_center\">Centre</string>\n    <string name=\"double_tap_anim_speed_0\">Sense animació</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Ràpida</string>\n    <string name=\"pref_rotation_type\">Rotació per defecte</string>\n    <string name=\"rotation_free\">Lliure</string>\n    <string name=\"rotation_force_portrait\">Vertical forçada</string>\n    <string name=\"rotation_force_landscape\">Horitzontal forçada</string>\n    <string name=\"color_filter_r_value\">Vermell</string>\n    <string name=\"color_filter_g_value\">Verd</string>\n    <string name=\"color_filter_b_value\">Blau</string>\n    <string name=\"color_filter_a_value\">Alfa</string>\n    <string name=\"pref_remove_after_marked_as_read\">Després de marcar com a llegit de manera manual</string>\n    <string name=\"pref_remove_after_read\">Suprimeix automàticament després de llegir</string>\n    <string name=\"pref_double_tap_anim_speed\">Velocitat de l’animació del doble toc</string>\n    <string name=\"disabled\">Desactivat</string>\n    <string name=\"last_read_chapter\">Darrer capítol llegit</string>\n    <string name=\"second_to_last\">Penúltim capítol llegit</string>\n    <string name=\"third_to_last\">Antepenúltim capítol llegit</string>\n    <string name=\"fourth_to_last\">Anteantepenúltim capítol llegit</string>\n    <string name=\"fifth_to_last\">Anteanteantepenúltim capítol llegit</string>\n    <string name=\"pref_download_new\">Baixa capítols nous</string>\n    <string name=\"services\">Serveis de seguiment</string>\n    <string name=\"pref_create_backup\">Crea una còpia de seguretat</string>\n    <string name=\"pref_create_backup_summ\">Es pot utilitzar per a restaurar la biblioteca actual</string>\n    <string name=\"pref_restore_backup\">Restaura una còpia de seguretat</string>\n    <string name=\"pref_restore_backup_summ\">Restaura la biblioteca del fitxer de còpia de seguretat</string>\n    <string name=\"pref_backup_interval\">Freqüència de la còpia de seguretat automàtica</string>\n    <string name=\"backup_created\">S’ha creat la còpia de seguretat</string>\n    <string name=\"restore_completed\">S’ha completat la restauració</string>\n    <string name=\"backup_choice\">De què voleu fer una còpia de seguretat?</string>\n    <string name=\"restoring_backup\">S’està restaurant la còpia de seguretat</string>\n    <string name=\"creating_backup\">S’està creant la còpia de seguretat</string>\n    <string name=\"pref_clear_chapter_cache\">Buida la memòria cau de capítols</string>\n    <string name=\"used_cache\">Ús: %1$s</string>\n    <string name=\"cache_deleted\">S’ha buidat la memòria cau i s’han suprimit %1$d fitxers</string>\n    <string name=\"cache_delete_error\">S’ha produït un error en netejar</string>\n    <string name=\"pref_clear_cookies\">Esborra les galetes</string>\n    <string name=\"cookies_cleared\">S’han esborrat les galetes</string>\n    <string name=\"pref_clear_database\">Buida la base de dades</string>\n    <string name=\"pref_clear_database_summary\">Suprimeix l’historial dels elements que no siguin a la biblioteca</string>\n    <string name=\"clear_database_confirmation\">N’esteu segur? Es perdrà el progrés i els capítols llegits dels elements que no siguin a la biblioteca</string>\n    <string name=\"clear_database_completed\">S’han suprimit les entrades</string>\n    <string name=\"version\">Versió</string>\n    <string name=\"pref_enable_acra\">Envia informes d’errors</string>\n    <string name=\"pref_acra_summary\">Ajuda a solucionar errades. No s’enviaran dades sensibles</string>\n    <string name=\"login_title\">Inicia la sessió a %1$s</string>\n    <string name=\"username\">Nom d’usuari</string>\n    <string name=\"password\">Contrasenya</string>\n    <string name=\"login\">Inicia la sessió</string>\n    <string name=\"login_success\">S’ha iniciat la sessió</string>\n    <string name=\"unknown_error\">S’ha produït un error desconegut</string>\n    <string name=\"updating_category\">S’està actualitzant la categoria</string>\n    <string name=\"no_more_results\">No hi ha més resultats</string>\n    <string name=\"local_source\">Font local</string>\n    <string name=\"other_source\">Altres</string>\n    <string name=\"action_global_search_hint\">Cerca global…</string>\n    <string name=\"latest\">Recents</string>\n    <string name=\"browse\">Explora</string>\n    <string name=\"ongoing\">En curs</string>\n    <string name=\"unknown\">Desconegut</string>\n    <string name=\"licensed\">Llicenciat</string>\n    <string name=\"remove_from_library\">Elimina de la biblioteca</string>\n    <string name=\"manga_added_library\">S’ha afegit a la biblioteca</string>\n    <string name=\"manga_removed_library\">S’ha eliminat de la biblioteca</string>\n    <string name=\"delete_downloads_for_manga\">Voleu suprimir els capítols baixats?</string>\n    <string name=\"copied_to_clipboard\">S’ha copiat al porta-retalls:\\n%1$s</string>\n    <string name=\"source_not_installed\">Font no instal·lada: %1$s</string>\n    <string name=\"display_mode_chapter\">Capítol %1$s</string>\n    <string name=\"chapter_downloading_progress\">S’està baixant (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Error</string>\n    <string name=\"chapter_paused\">Pausat</string>\n    <string name=\"show_title\">Títol de la font</string>\n    <string name=\"show_chapter_number\">Número de capítol</string>\n    <string name=\"sort_by_source\">Per font</string>\n    <string name=\"sort_by_number\">Per número de capítol</string>\n    <string name=\"manga_download\">Baixa</string>\n    <string name=\"download_unread\">Els no llegits</string>\n    <string name=\"confirm_delete_chapters\">Esteu segur que voleu suprimir els capítols seleccionats?</string>\n    <string name=\"manga_tracking_tab\">En seguiment</string>\n    <string name=\"reading\">Llegint</string>\n    <string name=\"completed\">Completats</string>\n    <string name=\"dropped\">Abandonat</string>\n    <string name=\"on_hold\">En espera</string>\n    <string name=\"plan_to_read\">Pendent de llegir</string>\n    <string name=\"repeating\">Rellegint</string>\n    <string name=\"score\">Puntuació</string>\n    <string name=\"title\">Títol</string>\n    <string name=\"status\">Estat</string>\n    <string name=\"track_status\">Estat</string>\n    <string name=\"track_type\">Tipus</string>\n    <string name=\"error_category_exists\">Ja hi ha una categoria amb aquest nom!</string>\n    <string name=\"snack_categories_deleted\">S’han suprimit les categories</string>\n    <string name=\"dialog_with_checkbox_remove_description\">S’eliminarà la data de lectura d’aquest capítol. N’esteu segur?</string>\n    <string name=\"dialog_with_checkbox_reset\">Reinicia tots els capítols d’aquest element</string>\n    <string name=\"snack_add_to_library\">Voleu afegir-lo a la biblioteca?</string>\n    <string name=\"picture_saved\">S’ha desat la imatge</string>\n    <string name=\"custom_filter\">Filtre personalitzat</string>\n    <string name=\"set_as_cover\">Defineix com a portada</string>\n    <string name=\"cover_updated\">S’ha actualitzat la portada</string>\n    <string name=\"chapter_progress\">Pàgina: %1$d</string>\n    <string name=\"no_next_chapter\">No s’ha trobat el capítol següent</string>\n    <string name=\"decode_image_error\">No s’ha pogut carregar la imatge</string>\n    <string name=\"confirm_set_image_as_cover\">Voleu fer servir aquesta imatge com a portada?</string>\n    <string name=\"transition_finished\">Finalitzat:</string>\n    <string name=\"transition_current\">Actual:</string>\n    <string name=\"transition_next\">Següent:</string>\n    <string name=\"transition_previous\">Anterior:</string>\n    <string name=\"transition_no_next\">No hi ha capítol següent</string>\n    <string name=\"transition_no_previous\">No hi ha capítol anterior</string>\n    <string name=\"transition_pages_loading\">S’estan carregant les pàgines…</string>\n    <string name=\"transition_pages_error\">No s’han pogut carregar les pàgines: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Seleccioneu les dades a incloure</string>\n    <string name=\"migrate\">Migra</string>\n    <string name=\"copy\">Copia</string>\n    <string name=\"download_queue_error\">No s’han pogut baixar els capítols. Podeu tornar-ho a provar a la secció de baixades</string>\n    <string name=\"notification_new_chapters\">S’han trobat nous capítols</string>\n    <string name=\"notification_cover_update_failed\">No s’ha pogut actualitzar la portada</string>\n    <string name=\"notification_first_add_to_library\">Afegiu l’element a la vostra biblioteca abans de fer això</string>\n    <string name=\"file_select_cover\">Seleccioneu la imatge de portada</string>\n    <string name=\"file_select_backup\">Seleccioneu el fitxer de còpia de seguretat</string>\n    <string name=\"update_check_confirm\">Baixa</string>\n    <string name=\"update_check_no_new_updates\">No hi ha cap nova actualització disponible</string>\n    <string name=\"update_check_notification_download_in_progress\">S’està baixant…</string>\n    <string name=\"update_check_notification_download_complete\">Premeu per a instal·lar l’actualització</string>\n    <string name=\"update_check_notification_download_error\">Error de baixada</string>\n    <string name=\"update_check_notification_update_available\">Nova versió disponible!</string>\n    <string name=\"information_no_downloads\">No hi ha baixades</string>\n    <string name=\"information_no_recent\">No hi ha actualitzacions recents</string>\n    <string name=\"information_no_recent_manga\">No heu llegit res recentment</string>\n    <string name=\"information_empty_library\">La vostra biblioteca és buida</string>\n    <string name=\"information_empty_category\">No teniu categories. Premeu el botó més per a crear-ne una i organitzar la vostra biblioteca.</string>\n    <string name=\"download_notifier_downloader_title\">Baixades</string>\n    <string name=\"download_notifier_title_error\">Error</string>\n    <string name=\"download_notifier_unknown_error\">No s’ha pogut baixar el capítol a causa d’un error inesperat</string>\n    <string name=\"download_notifier_text_only_wifi\">No hi ha cap connexió Wi-Fi disponible</string>\n    <string name=\"download_notifier_no_network\">No hi ha cap connexió de xarxa disponible</string>\n    <string name=\"download_notifier_download_paused\">Baixades pausades</string>\n    <string name=\"channel_common\">General</string>\n    <string name=\"pref_read_with_long_tap\">Mostra les accions amb un toc llarg</string>\n    <string name=\"action_open_in_web_view\">Obre en una WebView</string>\n    <string name=\"pref_skip_read_chapters\">Omet capítols marcats com a llegits</string>\n    <string name=\"pref_color_filter_mode\">Mode de mescla del filtre de color</string>\n    <string name=\"filter_mode_overlay\">Sobreposa</string>\n    <string name=\"filter_mode_multiply\">Multiplica</string>\n    <string name=\"filter_mode_screen\">Protegeix</string>\n    <string name=\"filter_mode_lighten\">Esquiva / Il·lumina</string>\n    <string name=\"filter_mode_darken\">Crema / Enfosqueix</string>\n    <string name=\"label_help\">Ajuda</string>\n    <string name=\"no_results_found\">No s’ha trobat cap resultat</string>\n    <string name=\"migration_selection_prompt\">Seleccioneu una font a migrar</string>\n    <string name=\"action_webview_back\">Endarrere</string>\n    <string name=\"action_webview_forward\">Endavant</string>\n    <string name=\"action_webview_refresh\">Actualitza</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"ext_obsolete\">Obsoleta</string>\n    <string name=\"obsolete_extension_message\">Aquesta extensió ja no està disponible. És possible que no funcioni correctament i pot causar problemes a l’aplicació. És recomanable que la desinstal·leu.</string>\n    <string name=\"pref_date_format\">Format de data</string>\n    <string name=\"pref_category_library_update\">Actualització global</string>\n    <string name=\"logout_title\">Voleu tancar la sessió a %1$s?</string>\n    <string name=\"logout\">Tanca la sessió</string>\n    <string name=\"logout_success\">S’ha tancat la sessió</string>\n    <string name=\"paused\">Pausat</string>\n    <string name=\"label_more\">Més</string>\n    <string name=\"action_sort_latest_chapter\">Darrer capítol</string>\n    <string name=\"action_view_chapters\">Mostra els capítols</string>\n    <string name=\"action_cancel_all\">Cancel·la-ho tot</string>\n    <string name=\"theme_light\">Clar</string>\n    <string name=\"theme_dark\">Fosc</string>\n    <string name=\"theme_system\">Sistema</string>\n    <string name=\"pref_manage_notifications\">Gestiona les notificacions</string>\n    <string name=\"pref_category_security\">Seguretat i privadesa</string>\n    <string name=\"lock_with_biometrics\">Requereix desblocatge</string>\n    <string name=\"lock_when_idle\">Bloca per inactivitat</string>\n    <string name=\"lock_always\">Sempre</string>\n    <string name=\"lock_never\">Mai</string>\n    <string name=\"secure_screen\">Mode discret</string>\n    <string name=\"ext_updates_pending\">Actualitzacions pendents</string>\n    <string name=\"pref_cutout_short\">Mostra el contingut a l’àrea de retall</string>\n    <string name=\"information_cloudflare_bypass_failure\">No s’ha pogut evitar el Cloudflare</string>\n    <string name=\"information_webview_outdated\">Actualitzeu l’aplicació WebView per a tenir més bona compatibilitat</string>\n    <string name=\"channel_new_chapters\">Novetats de capítols</string>\n    <string name=\"secure_screen_summary\">El mode discret amaga el contingut de l’aplicació en canviar entre aplicacions i bloca les captures de pantalla</string>\n    <string name=\"pref_category_display\">Visualització</string>\n    <string name=\"notification_chapters_single\">Capítol %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Capítol %1$s i %2$d més</string>\n    <string name=\"notification_chapters_multiple\">Capítols %1$s</string>\n    <string name=\"hide_notification_content\">Amaga el contingut de les notificacions</string>\n    <string name=\"pref_disable_battery_optimization\">Desactiva l’optimització de la bateria</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Fa que funcionin millor les actualitzacions de la biblioteca en segon pla i les còpies de seguretat</string>\n    <string name=\"battery_optimization_disabled\">L’optimització de la bateria ja està desactivada</string>\n    <string name=\"email\">Adreça electrònica</string>\n    <string name=\"pref_always_show_chapter_transition\">Mostra sempre la transició de capítol</string>\n    <string name=\"action_menu\">Menú</string>\n    <string name=\"action_newest\">Els més nous</string>\n    <string name=\"action_oldest\">Els més antics</string>\n    <string name=\"action_move_to_top\">Mou a dalt de tot</string>\n    <string name=\"action_move_to_bottom\">Mou a sota de tot</string>\n    <string name=\"channel_ext_updates\">Actualitzacions d’extensions</string>\n    <string name=\"updating_library\">S’està actualitzant la biblioteca</string>\n    <string name=\"pref_category_reading\">Lectura</string>\n    <string name=\"pref_skip_filtered_chapters\">Omet els capítols filtrats</string>\n    <string name=\"label_sources\">Fonts</string>\n    <string name=\"action_select_inverse\">Inverteix la selecció</string>\n    <string name=\"pinned_sources\">Fixades</string>\n    <string name=\"action_pin\">Fixa</string>\n    <string name=\"add_tracking\">Segueix</string>\n    <string name=\"pref_webtoon_side_padding\">Espaiat lateral</string>\n    <string name=\"vertical_plus_viewer\">Tira vertical amb separació</string>\n    <string name=\"action_unpin\">Desfixa</string>\n    <string name=\"in_library\">A la biblioteca</string>\n    <string name=\"add_to_library\">Afegeix a la biblioteca</string>\n    <string name=\"information_webview_required\">La WebView és necessària per al funcionament de l’aplicació</string>\n    <string name=\"manga_info_collapse\">Menys</string>\n    <string name=\"manga_info_expand\">Més</string>\n    <string name=\"licenses\">Llicències de codi obert</string>\n    <string name=\"website\">Lloc web</string>\n    <string name=\"label_downloaded_only\">Només els baixats</string>\n    <string name=\"recent_manga_time\">Cap. %1$s - %2$s</string>\n    <string name=\"restoring_backup_error\">Ha fallat la restauració de la còpia de seguretat</string>\n    <string name=\"creating_backup_error\">Ha fallat la còpia de seguretat</string>\n    <string name=\"restoring_backup_canceled\">S’ha cancel·lat la restauració</string>\n    <string name=\"restore_in_progress\">Ja s’està fent una restauració</string>\n    <string name=\"backup_in_progress\">Ja s’està fent una còpia de seguretat</string>\n    <string name=\"local_source_help_guide\">Guia de fonts locals</string>\n    <string name=\"last_used_source\">Utilitzada per darrera vegada</string>\n    <string name=\"check_for_updates\">Comprova si hi ha actualitzacions</string>\n    <string name=\"restore_duration\">%1$02d min i %2$02d s</string>\n    <string name=\"downloaded_only_summary\">Filtra tots els elements de la vostra biblioteca</string>\n    <string name=\"gray_background\">Gris</string>\n    <string name=\"viewer\">Mode de lectura</string>\n    <string name=\"pref_category_for_this_series\">Per a aquesta sèrie</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">No s’ha pogut obrir la configuració del dispositiu</string>\n    <string name=\"tracking_info\">La sincronització és unidireccional per a actualitzar el progrés dels capítols als serveis de seguiment externs. Configureu el seguiment d’elements individuals al seu botó de seguiment.</string>\n    <string name=\"pref_refresh_library_covers\">Refresca les portades de la biblioteca</string>\n    <string name=\"sort_by_upload_date\">Per data de pujada</string>\n    <string name=\"label_data\">Dades</string>\n    <string name=\"backup_restore_missing_sources\">Manquen fonts:</string>\n    <string name=\"invalid_backup_file_missing_manga\">La còpia de seguretat no conté cap element de la biblioteca.</string>\n    <string name=\"invalid_backup_file\">Fitxer de còpia de seguretat invàlid:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Comprova si hi ha noves portades o detalls en actualitzar la biblioteca</string>\n    <string name=\"pref_library_update_refresh_metadata\">Refresca les metadades automàticament</string>\n    <string name=\"action_display_comfortable_grid\">Graella confortable</string>\n    <string name=\"action_migrate\">Migra</string>\n    <string name=\"tabs_header\">Pestanyes</string>\n    <string name=\"action_display_show_tabs\">Mostra les pestanyes de les categories</string>\n    <string name=\"page_list_empty_error\">No s’ha trobat cap pàgina</string>\n    <string name=\"action_disable_all\">Desactiva-ho tot</string>\n    <string name=\"action_enable_all\">Activa-ho tot</string>\n    <string name=\"tapping_inverted_both\">En totes dues direccions</string>\n    <string name=\"tapping_inverted_vertical\">En vertical</string>\n    <string name=\"tapping_inverted_horizontal\">En horitzontal</string>\n    <string name=\"tapping_inverted_none\">Cap</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverteix les zones de toc</string>\n    <string name=\"download_insufficient_space\">No s’han pogut baixar els capítols perquè hi ha poc espai d’emmagatzematge</string>\n    <string name=\"loader_not_implemented_error\">No s’ha trobat la font</string>\n    <string name=\"unknown_status\">Estat desconegut</string>\n    <string name=\"unknown_author\">Autor desconegut</string>\n    <string name=\"action_global_search_query\">Cerca «%1$s» globalment</string>\n    <string name=\"updated_version\">S’ha actualitzat a la v%1$s</string>\n    <string name=\"whats_new\">Novetats</string>\n    <string name=\"requires_app_restart\">Cal reiniciar l’aplicació perquè tingui efecte</string>\n    <string name=\"label_network\">Xarxa</string>\n    <string name=\"pref_category_reading_mode\">Mode de lectura</string>\n    <string name=\"pref_show_reading_mode_summary\">Mostra breument el mode actual en obrir el lector</string>\n    <string name=\"pref_show_reading_mode\">Mostra el mode de lectura</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_disable\">Desactiva</string>\n    <string name=\"action_start\">Inicia</string>\n    <string name=\"action_sort_date_added\">Data d’incorporació</string>\n    <string name=\"no_pinned_sources\">No teniu cap origen fixat</string>\n    <string name=\"channel_complete\">Completada</string>\n    <string name=\"channel_progress\">Progrés</string>\n    <string name=\"channel_errors\">Errors</string>\n    <string name=\"backup_restore_missing_trackers\">Serveis de seguiment sense sessió iniciada:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permet la supressió dels capítols marcats</string>\n    <string name=\"pref_category_delete_chapters\">Suprimeix capítols</string>\n    <string name=\"ext_nsfw_warning\">Les fonts d’aquesta extensió poden contenir contingut NSFW (+18)</string>\n    <string name=\"ext_nsfw_short\">+18</string>\n    <string name=\"parental_controls_info\">Això no evita que les extensions no oficials o possiblement mal etiquetades puguin mostrar contingut NSFW (+18) a l’aplicació.</string>\n    <string name=\"no_chapters_error\">No s’ha trobat cap capítol</string>\n    <string name=\"chapter_settings_updated\">S’ha actualitzat la configuració per defecte dels capítols</string>\n    <string name=\"set_chapter_settings_as_default\">Estableix com a per defecte</string>\n    <string name=\"also_set_chapter_settings_for_library\">Aplica-ho també a tots els elements de la biblioteca</string>\n    <string name=\"confirm_set_chapter_settings\">Esteu segur que voleu desar aquesta configuració com a configuració per defecte?</string>\n    <string name=\"chapter_settings\">Configuració dels capítols</string>\n    <string name=\"share_page_info\">%1$s: %2$s, pàgina %3$d</string>\n    <string name=\"action_search_settings\">Configuració de la cerca</string>\n    <string name=\"downloaded_chapters\">Capítols baixats</string>\n    <string name=\"manga_from_library\">De la biblioteca</string>\n    <string name=\"clear_history_confirmation\">N’esteu segur? Es perdrà tot l’historial.</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa l’historial de lectura</string>\n    <string name=\"pref_incognito_mode\">Mode d’incògnit</string>\n    <string name=\"pref_clear_history\">Suprimeix l’historial</string>\n    <string name=\"clear_history_completed\">S’ha buidat l’historial</string>\n    <string name=\"spen_next_page\">Pàgina següent</string>\n    <string name=\"spen_previous_page\">Pàgina anterior</string>\n    <string name=\"migration_help_guide\">Guia de migració de fonts</string>\n    <string name=\"pref_category_nsfw_content\">Fonts NSFW (+18)</string>\n    <string name=\"file_picker_error\">No s’ha trobat cap aplicació de selecció de fitxers</string>\n    <string name=\"pref_show_nsfw_source\">Mostra a la llista de fonts i extensions</string>\n    <string name=\"myanimelist_relogin\">Torneu a iniciar la sessió a MAL</string>\n    <string name=\"track_finished_reading_date\">Data de finalització</string>\n    <string name=\"track_started_reading_date\">Data d’inici</string>\n    <string name=\"pref_dump_crash_logs_summary\">Desa els registres d’errors en un fitxer perquè el pugueu compartir amb els desenvolupadors</string>\n    <string name=\"pref_dump_crash_logs\">Comparteix el registre d’errors</string>\n    <string name=\"pref_viewer_nav\">Zones de toc</string>\n    <string name=\"edge_nav\">Vora</string>\n    <string name=\"kindlish_nav\">Semblant al Kindle</string>\n    <string name=\"l_nav\">En forma d’L</string>\n    <string name=\"action_desc\">Descendent</string>\n    <string name=\"action_asc\">Ascendent</string>\n    <string name=\"action_order_by_chapter_number\">Per número de capítol</string>\n    <string name=\"action_order_by_upload_date\">Per data de pujada</string>\n    <string name=\"action_filter_tracked\">En seguiment</string>\n    <string name=\"action_display_show_number_of_items\">Mostra el nombre d’elements</string>\n    <string name=\"right_and_left_nav\">A la dreta i a l’esquerra</string>\n    <string name=\"pref_dual_page_split\">Divideix les pàgines amples</string>\n    <string name=\"pref_dual_page_invert_summary\">Si la ubicació de les pàgines amples dividides no encaixa amb la direcció de lectura</string>\n    <string name=\"pref_dual_page_invert\">Inverteix la ubicació de la divisió de pàgines</string>\n    <string name=\"backup_restore_content_full\">Caldrà que instal·leu les extensions que manquin i que després inicieu la sessió als serveis de seguiment per a utilitzar-los.</string>\n    <string name=\"update_check_eol\">Aquesta versió d’Android ja no està suportada</string>\n    <string name=\"error_no_match\">No s’ha trobat cap coincidència</string>\n    <string name=\"source_unsupported\">La font no està suportada</string>\n    <string name=\"unread\">No llegit</string>\n    <string name=\"clipboard_copy_error\">No s’ha pogut copiar al porta-retalls</string>\n    <string name=\"notification_incognito_text\">Desactiva el mode d’incògnit</string>\n    <string name=\"pref_dns_over_https\">DNS sobre HTTPS (DoH)</string>\n    <string name=\"pref_download_new_categories_details\">Els elements de les categories excloses no es baixaran encara que també siguin a les categories incloses.</string>\n    <string name=\"pref_library_update_categories_details\">Els elements de les categories excloses no s’actualitzaran encara que també siguin a les categories incloses.</string>\n    <string name=\"pref_category_auto_download\">Baixada automàtica</string>\n    <string name=\"rotation_landscape\">Horitzontal</string>\n    <string name=\"rotation_portrait\">Vertical</string>\n    <string name=\"rotation_type\">Rotació</string>\n    <string name=\"nav_zone_right\">Dreta</string>\n    <string name=\"nav_zone_left\">Esquerra</string>\n    <string name=\"nav_zone_next\">Següent</string>\n    <string name=\"nav_zone_prev\">Anterior</string>\n    <string name=\"automatic_background\">Automàtic</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Crea carpetes segons el títol dels elements</string>\n    <string name=\"pref_create_folder_per_manga\">Desa les pàgines en carpetes separades</string>\n    <string name=\"pref_reader_actions\">Accions</string>\n    <string name=\"pref_grayscale\">Escala de grisos</string>\n    <string name=\"pref_show_navigation_mode_summary\">Mostra breument les zones de toc en obrir el lector</string>\n    <string name=\"pref_show_navigation_mode\">Mostra la superposició de les zones de toc</string>\n    <string name=\"include\">Inclou: %s</string>\n    <string name=\"exclude\">Exclou: %s</string>\n    <string name=\"none\">Cap</string>\n    <string name=\"action_show_errors\">Premeu per a veure’n els detalls</string>\n    <string name=\"cancel_all_for_series\">Cancel·la-ho tot per a aquesta sèrie</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data d’obtenció dels capítols</string>\n    <string name=\"date\">Data</string>\n    <string name=\"local_filter_order_by\">Ordena per</string>\n    <string name=\"local_invalid_format\">El format del capítol no és vàlid</string>\n    <string name=\"chapter_not_found\">No s’ha trobat el capítol</string>\n    <string name=\"error_sharing_cover\">S’ha produït un error en compartir la portada</string>\n    <string name=\"error_saving_cover\">S’ha produït un error en desar la portada</string>\n    <string name=\"cover_saved\">S’ha desat la portada</string>\n    <string name=\"manga_cover\">Portada</string>\n    <string name=\"tracking_guide\">Guia de seguiment</string>\n    <string name=\"off\">Desactivat</string>\n    <string name=\"on\">Activat</string>\n    <string name=\"categorized_display_settings\">Opcions d’ordenació per categoria</string>\n    <string name=\"restrictions\">Restriccions: %s</string>\n    <string name=\"action_display_local_badge\">Font local</string>\n    <string name=\"pref_lowest\">La més baixa</string>\n    <string name=\"pref_low\">Baixa</string>\n    <string name=\"pref_high\">Alta</string>\n    <string name=\"pref_highest\">La més alta</string>\n    <string name=\"pref_remove_exclude_categories\">Categories excloses</string>\n    <string name=\"information_empty_category_dialog\">Encara no teniu cap categoria.</string>\n    <string name=\"enhanced_services\">Serveis de seguiment millorats</string>\n    <string name=\"relative_time_today\">Avui</string>\n    <string name=\"label_default\">Per defecte</string>\n    <string name=\"label_warning\">Advertència</string>\n    <string name=\"confirm_lock_change\">Autentiqueu-vos per a confirmar el canvi</string>\n    <string name=\"theme_greenapple\">Verd poma</string>\n    <string name=\"pref_category_appearance\">Aparença</string>\n    <string name=\"action_start_downloading_now\">Inicia la baixada ara</string>\n    <string name=\"action_sort_count\">Nombre total d’elements</string>\n    <string name=\"pref_app_theme\">Tema de l’aplicació</string>\n    <string name=\"theme_monet\">Dinàmic</string>\n    <string name=\"action_display_language_badge\">Llengua</string>\n    <string name=\"theme_midnightdusk\">Capvespre</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri de maduixa</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_tealturquoise\">Xarxet i turquesa</string>\n    <string name=\"theme_yinyang\">Yin i yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Mode fosc negre pur</string>\n    <string name=\"update_72hour\">Cada 3 dies</string>\n    <string name=\"connected_to_wifi\">Només amb Wi-Fi</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instal·leu i inicieu el Shizuku per a utilitzar-lo com a instal·lador d’extensions.</string>\n    <string name=\"pref_hide_threshold\">Sensibilitat a l’hora d’amagar el menú en desplaçar</string>\n    <string name=\"pref_verbose_logging\">Registre detallat</string>\n    <string name=\"ext_update_all\">Actualitza-ho tot</string>\n    <string name=\"ext_installer_shizuku_stopped\">El Shizuku no s’està executant</string>\n    <string name=\"pref_inverted_colors\">Invertits</string>\n    <string name=\"restore_miui_warning\">És possible que la còpia de seguretat i la restauració no funcionin correctament si l’Optimització del MIUI està desactivada.</string>\n    <string name=\"label_background_activity\">Activitat en segon pla</string>\n    <string name=\"pref_tablet_ui_mode\">Interfície de tauleta</string>\n    <string name=\"help_translate\">Ajudeu a traduir</string>\n    <string name=\"getting_started_guide\">Guia d’introducció</string>\n    <string name=\"privacy_policy\">Política de privadesa</string>\n    <string name=\"ext_install_service_notif\">S’està instal·lant l’extensió…</string>\n    <string name=\"ext_installer_pref\">Instal·lador</string>\n    <string name=\"ext_installer_legacy\">Antic</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Buida la memòria cau de capítols en obrir l’aplicació</string>\n    <string name=\"enhanced_tracking_info\">Proporciona funcionalitats millorades per a fonts específiques. Els elements se segueixen automàticament en afegir-los a la vostra biblioteca.</string>\n    <string name=\"about_dont_kill_my_app\">Alguns fabricants tenen restriccions addicionals per a les aplicacions que finalitzen els serveis en segon pla. Aquest lloc web té més informació de com solucionar-ho.</string>\n    <string name=\"clear_database_source_item_count\">Hi ha %1$d elements a la base de dades que no són a la biblioteca</string>\n    <string name=\"cancelled\">Cancel·lada</string>\n    <string name=\"library_errors_help\">Per a obtenir ajuda per a resoldre errors d’actualització de la biblioteca, vegeu %1$s</string>\n    <string name=\"extension_api_error\">No s’han pogut obtenir les extensions disponibles</string>\n    <string name=\"pref_update_only_completely_read\">Omet els elements amb capítols no llegits</string>\n    <string name=\"save_chapter_as_cbz\">Desa com a arxiu CBZ</string>\n    <string name=\"backup_info\">També hauríeu de desar còpies de les còpies de seguretat en altres llocs. Les còpies de seguretat poden contenir dades sensibles, incloent-hi les contrasenyes desades; aneu amb compte si les compartiu.</string>\n    <string name=\"database_clean\">No hi ha res que calgui buidar</string>\n    <string name=\"pref_verbose_logging_summary\">Imprimeix registres detallats al registre del sistema (redueix el rendiment de l’aplicació)</string>\n    <string name=\"publishing_finished\">Publicació finalitzada</string>\n    <string name=\"on_hiatus\">En pausa</string>\n    <string name=\"channel_app_updates\">Actualitzacions de l’aplicació</string>\n    <string name=\"action_track\">Segueix</string>\n    <string name=\"ext_app_info\">Informació de l’aplicació</string>\n    <string name=\"download_queue_size_warning\">Advertència: Les baixades massa grosses poden fer que les fonts es tornin més lentes i/o bloquin el Mihon. Premeu per a obtenir-ne més informació.</string>\n    <string name=\"notification_size_warning\">Les actualitzacions grosses perjudiquen les fonts i poden implicar actualitzacions més lentes i un augment en l’ús de bateria. Premeu per a obtenir-ne més informació.</string>\n    <string name=\"pref_landscape_zoom\">Amplia automàticament les imatges amples</string>\n    <string name=\"action_show_manga\">Mostra l’element</string>\n    <string name=\"pref_navigate_pan\">Fes panoràmiques les imatges amples</string>\n    <string name=\"action_display_cover_only_grid\">Graella només a la portada</string>\n    <string name=\"pref_update_only_started\">Omet els elements no començats</string>\n    <string name=\"skipped_reason_completed\">S’ha omès perquè la sèrie està completada</string>\n    <string name=\"skipped_reason_not_started\">S’ha omès perquè no hi ha cap capítol llegit</string>\n    <string name=\"skipped_reason_not_caught_up\">S’ha omès perquè hi ha capítols no llegits</string>\n    <string name=\"learn_more\">Premeu per a obtenir més informació</string>\n    <string name=\"notification_update_error\">Han fallat %1$d actualitzacions</string>\n    <string name=\"rotation_reverse_portrait\">Vertical inversa</string>\n    <string name=\"action_move_to_top_all_for_series\">Mou la sèrie a dalt de tot</string>\n    <string name=\"disabled_nav\">Desactivat</string>\n    <string name=\"update_check_open\">Obre al GitHub</string>\n    <string name=\"error_saving_picture\">S’ha produït un error en desar la imatge</string>\n    <string name=\"empty_backup_error\">No hi ha cap element a la biblioteca del qual fer còpia de seguretat</string>\n    <string name=\"pref_clear_webview_data\">Neteja les dades de la WebView</string>\n    <string name=\"webview_data_deleted\">S’han netejat les dades de la WebView</string>\n    <string name=\"action_close\">Tanca</string>\n    <string name=\"source_filter_empty_screen\">No s’ha trobat cap font instal·lada</string>\n    <string name=\"source_empty_screen\">No s’ha trobat cap font</string>\n    <string name=\"action_sort_unread_count\">Nombre de no llegits</string>\n    <string name=\"action_sort_last_manga_update\">Darrera comprovació d’actualitzacions</string>\n    <string name=\"split_tall_images_summary\">Millora el rendiment del lector</string>\n    <string name=\"download_notifier_split_page_not_found\">No s’ha trobat la pàgina %d en dividir</string>\n    <string name=\"download_notifier_split_page_path_not_found\">No s’ha trobat el camí del fitxer de la pàgina %d</string>\n    <string name=\"pref_reset_viewer_flags\">Restableix les opcions del lector per sèrie</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Restableix el mode de lectura i l’orientació de totes les sèries</string>\n    <string name=\"pref_reset_viewer_flags_success\">S’han restablert tota la configuració del lector</string>\n    <string name=\"pref_reset_viewer_flags_error\">No s’ha pogut restablir la configuració del lector</string>\n    <string name=\"empty_screen\">Ostres, que estrany</string>\n    <string name=\"ext_info_language\">Llengua</string>\n    <string name=\"ext_info_version\">Versió</string>\n    <string name=\"ext_info_age_rating\">Valoració d’edat</string>\n    <string name=\"reading_list\">Llista de lectura</string>\n    <string name=\"wish_list\">Llista de desitjos</string>\n    <string name=\"complete_list\">Llista de completats</string>\n    <string name=\"on_hold_list\">Llista de pausats</string>\n    <string name=\"unfinished_list\">Llista d’inacabats</string>\n    <string name=\"network_not_metered\">Només en xarxes sense límits de dades</string>\n    <string name=\"cant_open_last_read_chapter\">No s’ha pogut obrir el darrer capítol llegit</string>\n    <string name=\"custom_cover\">Portada personalitzada</string>\n    <string name=\"not_installed\">No instal·lat</string>\n    <string name=\"pref_app_language\">Llengua de l’aplicació</string>\n    <string name=\"delete_category_confirmation\">Voleu eliminar la categoria «%s»?</string>\n    <string name=\"delete_category\">Elimina la categoria</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"description_placeholder\">Sense descripció</string>\n    <string name=\"internal_error\">Error intern: Reviseu els registres de fallades per a més informació</string>\n    <string name=\"pref_user_agent_string\">Cadena d’agent d’usuari per defecte</string>\n    <string name=\"pref_reset_user_agent_string\">Restableix la cadena d’agent d’usuari per defecte</string>\n    <string name=\"appwidget_unavailable_locked\">El widget no està disponible quan hi ha activat el blocatge de l’aplicació</string>\n    <string name=\"appwidget_updates_description\">Vegeu els elements de la biblioteca actualitzats recentment</string>\n    <string name=\"action_remove_everything\">Elimina-ho tot</string>\n    <string name=\"update_already_running\">Ja s’està executant una actualització</string>\n    <string name=\"theme_tidalwave\">Tsunami</string>\n    <string name=\"error_user_agent_string_blank\">La cadena de l’agent d’usuari no pot estar buida</string>\n    <string name=\"pref_appearance_summary\">Tema, formats de data i hora</string>\n    <string name=\"pref_library_summary\">Categories, actualitzacions globals i lliscament en capítols</string>\n    <string name=\"are_you_sure\">N’esteu segur?</string>\n    <string name=\"invalid_location\">Ubicació invàlida: %s</string>\n    <string name=\"auto_download_while_reading\">Baixa automàticament mentre es llegeix</string>\n    <string name=\"download_ahead_info\">Només funciona si el capítol actual i el següent ja estan baixats.</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"crash_screen_description\">S’ha produït un error inesperat al %s. Us suggerim que compartiu el registre d’errors al nostre canal d’assistència al Discord.</string>\n    <string name=\"missing_storage_permission\">No s’han concedit permisos d’emmagatzematge</string>\n    <string name=\"popular\">Populars</string>\n    <string name=\"pref_backup_summary\">Còpies de seguretat automàtiques i manuals i espai d’emmagatzematge</string>\n    <string name=\"pref_reader_summary\">Mode de lectura, visualització i navegació</string>\n    <string name=\"pref_downloads_summary\">Baixades automàtiques i per avançat</string>\n    <string name=\"multi_lang\">Múltiples</string>\n    <string name=\"error_user_agent_string_invalid\">La cadena d’agent d’usuari no és vàlida</string>\n    <string name=\"unknown_title\">Títol desconegut</string>\n    <string name=\"updates_last_update_info_just_now\">Ara mateix</string>\n    <string name=\"download_ahead\">Baixa per avançat</string>\n    <string name=\"pref_tracking_summary\">Sincronització en un sentit o millorada</string>\n    <string name=\"pref_browse_summary\">Fonts, extensions i cerca global</string>\n    <string name=\"pref_security_summary\">Blocatge de l’aplicació i mode discret</string>\n    <string name=\"pref_advanced_summary\">Bolcatge de registres d’errors i optimitzacions de la bateria</string>\n    <string name=\"crash_screen_restart_application\">Reinicia l’aplicació</string>\n    <string name=\"skipped_reason_not_always_update\">S’ha omès perquè no cal actualitzar la sèrie</string>\n    <string name=\"remove_manga\">Suprimireu «%s» de la vostra biblioteca</string>\n    <string name=\"action_search_hint\">Cerca…</string>\n    <string name=\"updates_last_update_info\">Biblioteca actualitzada per darrera vegada: %s</string>\n    <string name=\"download_notifier_cache_renewal\">S’estan comprovant les baixades</string>\n    <string name=\"action_open_random_manga\">Obre un element aleatori</string>\n    <string name=\"fdroid_warning\">Les compilacions de F-Droid no tenen assistència oficial.\\nPremeu per a obtenir-ne més informació.</string>\n    <string name=\"information_no_entries_found\">No s’ha trobat cap element en aquesta categoria</string>\n    <string name=\"action_display_show_continue_reading_button\">Botó per a continuar llegint</string>\n    <string name=\"pref_invalidate_download_cache\">Reindexa les baixades</string>\n    <string name=\"track_remove_finish_date_conf_text\">S’eliminarà la data de finalització seleccionada de %s</string>\n    <string name=\"track_remove_date_conf_title\">Voleu eliminar-ne la data?</string>\n    <string name=\"track_remove_start_date_conf_text\">S’eliminarà la data d’inici seleccionada de %s</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Força que l’aplicació torni a comprovar els capítols baixats</string>\n    <string name=\"label_stats\">Estadístiques</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_downloaded\">Baixats</string>\n    <string name=\"label_started\">Començats</string>\n    <string name=\"copied_to_clipboard_plain\">S’ha copiat al porta-retalls</string>\n    <string name=\"label_read_chapters\">Llegits</string>\n    <string name=\"label_total_chapters\">Totals</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostra el recompte de no llegits a la icona d’Actualitzacions</string>\n    <string name=\"pref_skip_dupe_chapters\">Omet els capítols duplicats</string>\n    <string name=\"enhanced_services_not_installed\">Disponible però la font no està instal·lada: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">Ja teniu un element a la biblioteca amb el mateix nom.\\n\\nVoleu continuar igualment?</string>\n    <string name=\"label_read_duration\">Temps de lectura</string>\n    <string name=\"label_titles_section\">Elements</string>\n    <string name=\"label_completed_titles\">Elements completats</string>\n    <string name=\"track_error\">Error %1$s: %2$s</string>\n    <string name=\"action_not_now\">Ara no</string>\n    <string name=\"label_titles_in_global_update\">A l’actualització global</string>\n    <string name=\"label_overview_section\">Resum</string>\n    <string name=\"label_tracker_section\">Serveis de seguiment</string>\n    <string name=\"label_tracked_titles\">Elements seguits</string>\n    <string name=\"label_mean_score\">Puntuació mitjana</string>\n    <string name=\"information_required_plain\">*obligatori</string>\n    <string name=\"information_no_manga_category\">La categoria és buida</string>\n    <string name=\"label_used\">En ús</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"pref_hide_in_library_items\">Amaga els elements que ja són a la biblioteca</string>\n    <string name=\"action_copy_to_clipboard\">Copia al porta-retalls</string>\n    <string name=\"action_update_category\">Actualitza la categoria</string>\n    <string name=\"split_tall_images\">Divideix les imatges altes</string>\n    <string name=\"pref_chapter_swipe_end\">Acció en lliscar cap a la dreta</string>\n    <string name=\"pref_chapter_swipe_start\">Acció en lliscar cap a l’esquerra</string>\n    <string name=\"pref_double_tap_zoom\">Toca dues vegades per a ampliar</string>\n    <string name=\"overlay_header\">Superposició</string>\n    <string name=\"pref_page_rotate_invert\">Inverteix l’orientació de les pàgines amples rotades</string>\n    <string name=\"pref_page_rotate\">Rota les pàgines amples perquè s’ajustin a la pantalla</string>\n    <string name=\"pref_debug_info\">Informació de depuració</string>\n    <string name=\"action_set_interval\">Estableix l’interval</string>\n    <string name=\"action_filter_interval_custom\">Freqüència d’actualització personalitzat</string>\n    <string name=\"action_sort_next_updated\">Pròxima actualització prevista</string>\n    <string name=\"action_ok\">D’acord</string>\n    <string name=\"pref_update_only_in_release_period\">Preveu el moment de la pròxima publicació</string>\n    <string name=\"intervals_header\">Intervals</string>\n    <string name=\"manga_display_interval_title\">Estima cada</string>\n    <string name=\"manga_display_modified_interval_title\">S’actualitzarà cada</string>\n    <string name=\"track_delete_title\">Voleu deixar de seguir %s?</string>\n    <string name=\"track_delete_remote_text\">Elimina també de %s</string>\n    <string name=\"track_delete_text\">Se n’eliminarà el seguiment local.</string>\n    <string name=\"skipped_reason_not_in_release_period\">S’ha omès perquè no se n’espera cap publicació avui</string>\n    <string name=\"delete_downloaded\">Suprimeix els baixats</string>\n    <string name=\"has_results\">Té resultats</string>\n    <string name=\"syncing_library\">S’està sincronitzant la biblioteca</string>\n    <string name=\"library_sync_complete\">S’ha completat la sincronització de la biblioteca</string>\n    <string name=\"create_backup_file_error\">No s’ha pogut crear un fitxer de còpia de seguretat</string>\n    <string name=\"track_activity_name\">Inici de sessió al servei de seguiment</string>\n    <string name=\"download_cache_invalidated\">S’ha invalidat l\\'índex de baixades</string>\n    <string name=\"information_cloudflare_help\">Premeu aquí per a obtenir ajuda amb el Cloudflare</string>\n    <string name=\"unlock_app_title\">Desbloca %s</string>\n    <string name=\"exception_offline\">No hi ha connexió a Internet</string>\n    <string name=\"exception_http\">HTTP %d, comproveu el lloc web en una WebView</string>\n    <string name=\"exception_unknown_host\">No s’ha pogut accedir a %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Mou la sèrie a baix de tot</string>\n    <string name=\"pref_relative_format\">Marques de temps relatives</string>\n    <string name=\"pref_relative_format_summary\">«%1$s» en comptes de «%2$s»</string>\n    <string name=\"notification_updating_progress\">S’està actualitzant la biblioteca… (%s)</string>\n    <string name=\"source_settings\">Configuració de la font</string>\n    <string name=\"app_settings\">Configuració de l’aplicació</string>\n    <string name=\"file_null_uri_error\">No s’ha seleccionat cap fitxer</string>\n    <string name=\"action_create\">Crea</string>\n    <string name=\"relative_time_span_never\">Mai</string>\n    <string name=\"pref_flash_page_summ\">Redueix l’efecte fantasma en pantalles de tinta electrònica</string>\n    <string name=\"action_apply\">Aplica</string>\n    <string name=\"action_revert_to_default\">Torna a la configuració per defecte</string>\n    <string name=\"last_auto_backup_info\">Darrera còpia de seguretat automàtica: %s</string>\n    <string name=\"no_scanlators_found\">No s’ha trobat cap scanlator</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"pref_flash_page\">Centelleig en canviar de pàgina</string>\n    <string name=\"pref_storage_usage\">Ús de l’emmagatzematge</string>\n    <string name=\"action_sort_tracker_score\">Puntuació del servei de seguiment</string>\n    <string name=\"label_data_storage\">Dades i emmagatzematge</string>\n    <string name=\"exclude_scanlators\">Exclou scanlators</string>\n    <string name=\"selected\">Seleccionat</string>\n    <string name=\"not_selected\">No seleccionat</string>\n    <string name=\"pref_storage_location\">Ubicació de l’emmagatzematge</string>\n    <string name=\"pref_storage_location_info\">S’utilitza per a les còpies de seguretat automàtiques, les baixades de capítols i la font local.</string>\n    <string name=\"action_menu_overflow_description\">Més opcions</string>\n    <string name=\"action_bar_up_description\">Navega cap amunt</string>\n    <string name=\"onboarding_storage_action_select\">Selecciona una carpeta</string>\n    <string name=\"pref_onboarding_guide\">Guia de benvinguda</string>\n    <string name=\"onboarding_guides_new_user\">No heu fet servir mai el %s? Us recomanem que reviseu la guia de benvinguda.</string>\n    <string name=\"onboarding_action_finish\">Comença</string>\n    <string name=\"onboarding_storage_selection_required\">Cal que seleccioneu una carpeta</string>\n    <string name=\"onboarding_heading\">Et donem la benvinguda!</string>\n    <string name=\"onboarding_guides_returning_user\">Heu reinstal·lat %s?</string>\n    <string name=\"onboarding_action_skip\">Omet</string>\n    <string name=\"onboarding_action_next\">Següent</string>\n    <string name=\"onboarding_description\">Primer cal configurar unes quantes coses. Sempre podràs canviar aquestes opcions a la configuració.</string>\n    <string name=\"no_location_set\">No s’ha definit una ubicació d’emmagatzematge</string>\n    <string name=\"onboarding_storage_info\">Seleccioneu una carpeta on el %1$s emmagatzemarà les baixades dels capítols, les còpies de seguretat i més.\\n\\nÉs recomanable fer servir una carpeta dedicada.\\n\\nCarpeta seleccionada: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Permís de notificacions</string>\n    <string name=\"onboarding_permission_install_apps\">Permís per a instal·lar aplicacions</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Eviteu interrupcions en actualitzacions de la biblioteca, baixades i restauracions de còpies de seguretat que tinguin una llarga durada.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Ús de la bateria en segon pla</string>\n    <string name=\"onboarding_permission_install_apps_description\">Per a instal·lar extensions de fonts.</string>\n    <string name=\"onboarding_permission_notifications_description\">Rebeu notificacions quan hi hagi actualitzacions de la biblioteca i més.</string>\n    <string name=\"onboarding_permission_action_grant\">Permet</string>\n    <string name=\"available_disk_space_info\">Disponible: %1$s / Total: %2$s</string>\n    <string name=\"manga_interval_expected_update\">S’ha previst que se’n publicaran nous capítols d’aquí a %1$s, es comprova cada %2$s.</string>\n    <string name=\"invalid_backup_file_error\">Error complet:</string>\n    <string name=\"ext_permission_install_apps_warning\">Calen permisos per a instal·lar extensions. Premeu aquí per a concedir-les.</string>\n    <string name=\"private_settings\">Inclou-hi configuració sensible (per exemple, testimonis d’autenticació dels serveis de seguiment)</string>\n    <string name=\"label_extension_repos\">Repositoris d’extensions</string>\n    <string name=\"information_empty_repos\">No heu definit cap repositori.</string>\n    <string name=\"action_delete_repo\">Suprimeix el repositori</string>\n    <string name=\"action_add_repo_message\">Afegiu repositoris addicionals al Mihon. Ha de ser un URL que acabi amb «index.min.json».</string>\n    <string name=\"error_repo_exists\">Aquest repositori ja existeix!</string>\n    <string name=\"invalid_repo_name\">URL del repositori invàlid</string>\n    <string name=\"delete_repo_confirmation\">Voleu suprimir el repositori «%s»?</string>\n    <string name=\"onboarding_storage_help_action\">Guia d’emmagatzematge</string>\n    <string name=\"onboarding_storage_help_info\">Heu actualitzat d’una versió més antiga i no sabeu què heu de seleccionar? Consulteu la guia d’emmagatzematge per a més informació.</string>\n    <string name=\"theme_nord\">Nòrdic</string>\n    <string name=\"pref_library_update_smart_update\">Actualitzacions intel·ligents</string>\n    <string name=\"ext_revoke_trust\">Revoca les extensions de confiança desconegudes</string>\n    <string name=\"action_add_repo\">Afegeix un repositori</string>\n    <string name=\"label_add_repo_input\">URL del repositori</string>\n    <string name=\"manga_interval_expected_update_soon\">Aviat</string>\n    <string name=\"manga_interval_custom_amount\">Freqüència d’actualització personalitzada:</string>\n    <string name=\"action_open_repo\">Obre el repositori d’origen</string>\n    <string name=\"file_picker_uri_permission_unsupported\">No s’ha pogut obtenir accés persistent a la carpeta. És possible que l’aplicació es comporti de manera inesperada.</string>\n    <string name=\"label_upcoming\">Pròxim</string>\n    <string name=\"upcoming_guide\">Guia de pròximes actualitzacions</string>\n    <string name=\"upcoming_calendar_next\">Mes següent</string>\n    <string name=\"action_add_anyway\">Afegeix igualment</string>\n    <string name=\"action_migrate_duplicate\">Migra l’element existent</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Desactiva l’allunyament</string>\n    <string name=\"action_replace_repo\">Substitueix</string>\n    <string name=\"action_replace_repo_title\">L’empremta digital de la clau de xifratge ja existeix</string>\n    <string name=\"action_replace_repo_message\">La clau de xifratge del repositori %1$s té la mateixa empremta digital que %2$s.\\nSi espereu que sigui així, se substituirà %2$s. En cas contrari, contacteu amb el mantenidor del repositori.</string>\n    <string name=\"pref_display_profile\">Perfil de visualització personalitzat</string>\n    <string name=\"action_view_upcoming\">Mostra les pròximes actualitzacions</string>\n    <string name=\"upcoming_calendar_prev\">Mes anterior</string>\n    <string name=\"pref_flash_duration\">Durada del flaix</string>\n    <string name=\"pref_flash_style_white\">Blanc</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_with\">Flaix amb</string>\n    <string name=\"pref_flash_style_black\">Negre</string>\n    <string name=\"pref_flash_page_interval\">Flaix cada</string>\n    <string name=\"pref_flash_style_white_black\">Blanc i negre</string>\n    <string name=\"manga_interval_expected_update_null\">Aquest manga està completat o bé no té cap data de publicació prevista.</string>\n    <string name=\"invalid_backup_file_json\">Còpia de seguretat en JSON no suportada</string>\n    <string name=\"invalid_backup_file_unknown\">El fitxer de còpia de seguretat és corrupte</string>\n    <string name=\"extensionRepo_settings\">Repositoris d’extensions</string>\n    <string name=\"action_copy_link\">Copia l’enllaç</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Omet la baixada de capítols ja llegits duplicats</string>\n    <string name=\"add_repo_confirmation\">Voleu afegir el repositori «%s»?</string>\n    <string name=\"confirm_tracker_update\">Voleu actualitzar els serveis de seguiment al capítol %d?</string>\n    <string name=\"non_library_settings\">Tots els elements llegits</string>\n    <string name=\"onboarding_permission_analytics_description\">Envia dades d’ús anonimitzades per a millorar les funcionalitats de l’aplicació.</string>\n    <string name=\"action_sort_random\">Aleatòriament</string>\n    <string name=\"onboarding_permission_crashlytics\">Envia registres d’errors</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Envia registres d’errors anonimitzats als desenvolupadors.</string>\n    <string name=\"onboarding_permission_analytics\">Permet les analítiques</string>\n    <string name=\"pref_firebase\">Registres d’errors i analítiques</string>\n    <string name=\"pref_security\">Seguretat</string>\n    <string name=\"firebase_summary\">Si envieu registres d’errors i analítiques, ens permetreu identificar i solucionar problemes, millorar el rendiment i fer que les futures actualitzacions siguin més adequades a les vostres necessitats</string>\n    <string name=\"label_auto\">Automàtic</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pausa l’historial de lectura per a aquesta extensió</string>\n    <string name=\"trackers_updated_summary\">Els serveis de seguiment s’han actualitzat al capítol %d</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Actualitza el progrés en marcar com a llegit</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Per defecte (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Afecta el rendiment. Activeu-ho només si en reduir el llindar de mapes de bits no se solucionen els problemes d’imatges buides</string>\n    <string name=\"ext_remove\">Elimina</string>\n    <string name=\"ext_confirm_remove\">Voleu eliminar l’extensió?</string>\n    <string name=\"remove_private_extension_message\">Segur que voleu eliminar l’extensió «%s»?</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Si el lector carrega una imatge buida, reduïu-ne el llindar a poc a poc.\\nActual: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Llindar personalitzat dels mapes de bits per maquinari</string>\n    <string name=\"tracked_privately\">En seguiment de manera privada</string>\n    <string name=\"export\">Exporta</string>\n    <string name=\"library_exported\">S’ha exportat la biblioteca</string>\n    <string name=\"author\">Autor</string>\n    <string name=\"artist\">Artista</string>\n    <string name=\"action_toggle_private_off\">Segueix de manera pública</string>\n    <string name=\"theme_monochrome\">Monocrom</string>\n    <string name=\"library_list\">Llista de la biblioteca</string>\n    <string name=\"action_toggle_private_on\">Segueix de manera privada</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ceb/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d Kategoriya</item>\n        <item quantity=\"other\">%d Mga kategoriya</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Human sa %1$s ka minuto</item>\n        <item quantity=\"other\">Human sa %1$s ka minuto</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Kagahapon</item>\n        <item quantity=\"other\">%1$d ka adlaw ang milabay</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Nabuhat sa %1$s nga adunay %2$s nga sayup</item>\n        <item quantity=\"other\">Nabuhat sa %1$s nga adunay %2$s nga mga sayop</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s ang nahibilin</item>\n        <item quantity=\"other\">%1$s ang nahibilin</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ceb/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"history\">Kasaysayan</string>\n    <string name=\"label_recent_updates\">Mga update</string>\n    <string name=\"confirm_lock_change\">Panghimatuod aron makumpirma ang pagbag-o</string>\n    <string name=\"action_settings\">Mga setting</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_filter_bookmarked\">Gi-bookmark</string>\n    <string name=\"action_filter_tracked\">Gisubay</string>\n    <string name=\"action_filter_unread\">Wala mabasa</string>\n    <string name=\"action_sort_alpha\">Alpabetiko</string>\n    <string name=\"action_sort_count\">Hingpit nga mga entry</string>\n    <string name=\"action_sort_total\">Kinatibuk sa mga kapitulo</string>\n    <string name=\"action_sort_last_read\">Katapusan nga pagbasa</string>\n    <string name=\"action_sort_unread_count\">Wala mabasa nga ihap</string>\n    <string name=\"action_sort_chapter_fetch_date\">Petsa sa pagkuha sa kapitulo</string>\n    <string name=\"action_sort_date_added\">Gidugang ang petsa</string>\n    <string name=\"action_search\">Pangitaa</string>\n    <string name=\"action_search_settings\">Mga setting sa pagpangita</string>\n    <string name=\"action_global_search\">Pangkalibutanon nga pagpangita</string>\n    <string name=\"action_select_all\">Pilia ang tanan</string>\n    <string name=\"action_select_inverse\">Pagpili inverse</string>\n    <string name=\"action_mark_as_read\">Markahi nga gibasa</string>\n    <string name=\"action_mark_as_unread\">Markahi nga wala pa mabasa</string>\n    <string name=\"action_mark_previous_as_read\">Markahi ang nauna nga nabasa na</string>\n    <string name=\"action_download\">Pag-download</string>\n    <string name=\"name\">Ngalan</string>\n    <string name=\"chapters\">Mga kapitulo</string>\n    <string name=\"label_more\">Dugang pa</string>\n    <string name=\"label_settings\">Mga setting</string>\n    <string name=\"label_sources\">Tinubdan</string>\n    <string name=\"label_default\">Default</string>\n    <string name=\"label_download_queue\">Pila sa Pag-download</string>\n    <string name=\"manga\">Mga entri sa basahonan</string>\n    <string name=\"track\">Pagsubay</string>\n    <string name=\"label_library\">Librarya</string>\n    <string name=\"categories\">Mga Kategoriya</string>\n    <string name=\"label_migration\">Molalin</string>\n    <string name=\"label_extensions\">Pagpadako</string>\n    <string name=\"label_extension_info\">Impormasyon sa Extension</string>\n    <string name=\"label_recent_manga\">Kasaysayan</string>\n    <string name=\"label_backup\">Tabang ug sa Pagpasig-uli</string>\n    <string name=\"action_filter\">Pagsala</string>\n    <string name=\"label_help\">Tabang</string>\n    <string name=\"label_warning\">Pasidaan</string>\n    <string name=\"action_sort_latest_chapter\">Pinakabag-o nga kapitulo</string>\n    <string name=\"action_filter_empty\">Kuhaa ang filter</string>\n    <string name=\"action_sort_last_manga_update\">Katapusan nga update sa manga</string>\n    <string name=\"all\">Tanan</string>\n    <string name=\"information_no_recent\">Walay bag-o nga mga update</string>\n    <string name=\"categorized_display_settings\">Matag-kategorya nga mga setting alang sa paghan-ay ug pagpakita</string>\n    <string name=\"information_no_downloads\">Walay mga pag-download</string>\n    <string name=\"information_no_recent_manga\">Walay nabasa bag-o lang</string>\n    <string name=\"information_empty_category\">Wala kay mga kategorya. i-tap ang plus button aron makahimo og usa para sa pag-organisar sa imong library.</string>\n    <string name=\"information_empty_library\">Walay sulod ang imong library</string>\n    <string name=\"action_bookmark\">Bookmark nga kapitulo</string>\n    <string name=\"action_remove_bookmark\">Unbookmark nga kapitulo</string>\n    <string name=\"action_delete\">Pagtangtang</string>\n    <string name=\"action_enable_all\">I-enable ang tanan</string>\n    <string name=\"action_add\">Idugang</string>\n    <string name=\"action_add_category\">Idugang ang kategorya</string>\n    <string name=\"action_edit_categories\">Usba ang mga kategorya</string>\n    <string name=\"action_rename_category\">Usba ang ngalan sa kategorya</string>\n    <string name=\"action_edit_cover\">Usba ang hapin</string>\n    <string name=\"action_view_chapters\">Tan-awa ang mga kapitulo</string>\n    <string name=\"action_remove\">Kuhaa</string>\n    <string name=\"action_previous_chapter\">Sa miaging kapitulo</string>\n    <string name=\"action_start\">Pagsugod</string>\n    <string name=\"action_next_chapter\">Sunod nga kapitulo</string>\n    <string name=\"action_retry\">Sulayi pag-usab</string>\n    <string name=\"action_resume\">Ipadayon</string>\n    <string name=\"action_show_manga\">Ipakita ang pagsulod</string>\n    <string name=\"action_migrate\">Paglalin</string>\n    <string name=\"action_display\">Pagpakita</string>\n    <string name=\"action_display_cover_only_grid\">Cover-only grid</string>\n    <string name=\"action_display_download_badge\">Gi-download nga mga kapitulo</string>\n    <string name=\"action_display_language_badge\">Pinulongan</string>\n    <string name=\"action_display_show_tabs\">Ipakita ang mga tab sa kategorya</string>\n    <string name=\"action_display_show_number_of_items\">Ipakita ang gidaghanon sa mga butang</string>\n    <string name=\"action_disable\">Pag-disable</string>\n    <string name=\"action_unpin\">Unpin</string>\n    <string name=\"action_cancel\">Pagkanselar</string>\n    <string name=\"action_disable_all\">I-disable ang tanan</string>\n    <string name=\"action_edit\">Edit</string>\n    <string name=\"action_update_library\">Pag-update sa librarya</string>\n    <string name=\"action_move_category\">Ibutang ang mga kategorya</string>\n    <string name=\"action_pause\">Paghunong</string>\n    <string name=\"action_open_in_browser\">Ablihi sa browser</string>\n    <string name=\"action_display_local_badge\">Lokal nga tinubdan</string>\n    <string name=\"action_open_in_web_view\">Ablihi sa WebView</string>\n    <string name=\"action_display_comfortable_grid\">Komportable nga grid</string>\n    <string name=\"action_display_mode\">Display mode</string>\n    <string name=\"action_display_list\">Listahan</string>\n    <string name=\"action_display_grid\">Compact nga grid</string>\n    <string name=\"action_pin\">Pin</string>\n    <string name=\"action_cancel_all\">Cancel tanan</string>\n    <string name=\"cancel_all_for_series\">Ikansela ang tanan alang niini nga serye</string>\n    <string name=\"action_sort\">Pagsunud-sunod</string>\n    <string name=\"action_newest\">Pinakabag-o</string>\n    <string name=\"action_move_to_bottom\">Lihok sa ubos</string>\n    <string name=\"action_install\">Pag-instalar</string>\n    <string name=\"action_save\">Tipigi</string>\n    <string name=\"action_reset\">I-reset</string>\n    <string name=\"action_undo\">I-undo</string>\n    <string name=\"action_close\">Suod nga</string>\n    <string name=\"action_webview_back\">Balik</string>\n    <string name=\"action_webview_refresh\">I-refresh</string>\n    <string name=\"loading\">Nagproseso…</string>\n    <string name=\"app_not_available\">Dili magamit ang app</string>\n    <string name=\"pref_category_general\">Heneral</string>\n    <string name=\"pref_category_appearance\">Panagway</string>\n    <string name=\"pref_category_library\">Library</string>\n    <string name=\"pref_category_reader\">Magbabasa</string>\n    <string name=\"pref_category_downloads\">Mga pag-download</string>\n    <string name=\"pref_category_tracking\">Pagsubay</string>\n    <string name=\"pref_category_advanced\">Abante</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"theme_dark\">Sa</string>\n    <string name=\"pref_app_theme\">Tema sa app</string>\n    <string name=\"theme_monet\">Dinamiko</string>\n    <string name=\"theme_greenapple\">Berde nga mansanas</string>\n    <string name=\"theme_midnightdusk\">Sa tungang gabii sa kilumkilom</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_tealturquoise\">Teal ug Turquoise</string>\n    <string name=\"theme_yinyang\">Yin ug Yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_date_format\">Pormat sa petsa</string>\n    <string name=\"lock_with_biometrics\">Kinahanglan nga ablihan</string>\n    <string name=\"lock_when_idle\">I-lock kung walay trabaho</string>\n    <string name=\"hide_notification_content\">Tagoa ang sulod sa pahibalo</string>\n    <string name=\"secure_screen\">Lig-on nga screen</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) Mga Tinubdan</string>\n    <string name=\"relative_time_today\">Karon</string>\n    <string name=\"pref_category_display\">Pagpakita</string>\n    <string name=\"pref_library_columns\">Mga butang kada laray</string>\n    <string name=\"portrait\">Hulagway</string>\n    <string name=\"landscape\">Landscape</string>\n    <string name=\"pref_category_library_update\">Tibuok kalibutan nga update</string>\n    <string name=\"update_never\">Off</string>\n    <string name=\"update_6hour\">Kada 6 ka oras</string>\n    <string name=\"update_12hour\">Matag 12 ka oras</string>\n    <string name=\"update_24hour\">Adlaw-adlaw</string>\n    <string name=\"update_48hour\">Kada 2 ka adlaw</string>\n    <string name=\"update_weekly\">Kada semana</string>\n    <string name=\"charging\">Sa dihang nag-charge</string>\n    <string name=\"restrictions\">Mga pagdili: %s</string>\n    <string name=\"pref_update_only_completely_read\">Uban sa wala pa mabasa nga (mga) kapitulo</string>\n    <string name=\"pref_update_only_started\">Wala pa kana nagsugod</string>\n    <string name=\"pref_library_update_refresh_metadata\">Awtomatikong i-refresh ang metadata</string>\n    <string name=\"default_category_summary\">Pangutana kanunay</string>\n    <string name=\"action_desc\">Nagpaubos</string>\n    <string name=\"action_order_by_upload_date\">Pinaagi sa petsa sa pag-upload</string>\n    <string name=\"action_order_by_chapter_number\">Pinaagi sa numero sa kapitulo</string>\n    <string name=\"action_oldest\">Kinatigulangan</string>\n    <string name=\"action_move_to_top\">Ibalhin sa ibabaw</string>\n    <string name=\"action_move_to_top_all_for_series\">Ibalhin ang serye sa ibabaw</string>\n    <string name=\"action_show_errors\">I-tap aron makita ang mga detalye</string>\n    <string name=\"action_asc\">Pagsaka</string>\n    <string name=\"action_share\">Ipaambit</string>\n    <string name=\"action_open_log\">Bukas nga log</string>\n    <string name=\"action_restore\">Iuli</string>\n    <string name=\"theme_light\">Off</string>\n    <string name=\"pref_category_about\">Mahitungod sa</string>\n    <string name=\"lock_never\">Dili gayud</string>\n    <string name=\"action_webview_forward\">Sa unahan</string>\n    <string name=\"action_start_downloading_now\">Sugdi ang pag-download karon</string>\n    <string name=\"theme_system\">Sunda ang sistema</string>\n    <string name=\"theme_strawberrydaiquiri\">Strawberry Daiquiri</string>\n    <string name=\"pref_manage_notifications\">Pagdumala sa mga pahibalo</string>\n    <string name=\"pref_category_security\">Seguridad</string>\n    <string name=\"pref_show_nsfw_source\">Ipakita sa mga tinubdan ug mga lista sa mga extension</string>\n    <string name=\"pref_dark_theme_pure_black\">Purong itom nga dark mode</string>\n    <string name=\"parental_controls_info\">Dili kini makapugong sa dili opisyal o posibleng sayop nga gi-flag nga mga extension gikan sa pag-surf sa NSFW (18+) nga sulod sulod sa app.</string>\n    <string name=\"lock_always\">Kanunay</string>\n    <string name=\"secure_screen_summary\">Ang luwas nga screen nagtago sa mga sulod sa app sa dihang nagbalhin-balhin og mga app ug nag-block sa mga screenshot</string>\n    <string name=\"pref_library_update_interval\">Awtomatikong mga update</string>\n    <string name=\"pref_library_update_restriction\">Awtomatikong pag-update sa mga pagdili sa device</string>\n    <string name=\"connected_to_wifi\">Sa Wi-Fi lang</string>\n    <string name=\"pref_update_only_non_completed\">Uban sa \\\"Nakumpleto\\\" nga kahimtang</string>\n    <string name=\"default_category\">Default nga kategorya</string>\n    <string name=\"update_72hour\">Kada 3 ka adlaw</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Susiha ang bag-ong hapin ug mga detalye kung mag-update sa librarya</string>\n    <string name=\"include\">Apil ang: %s</string>\n    <string name=\"ext_updates_pending\">Naghulat ang mga update</string>\n    <string name=\"ext_update\">Update</string>\n    <string name=\"ext_update_all\">Update tanan</string>\n    <string name=\"ext_installing\">Pag-instalar</string>\n    <string name=\"ext_installed\">Gi-install</string>\n    <string name=\"ext_trust\">Pagsalig</string>\n    <string name=\"ext_untrusted\">Dili kasaligan</string>\n    <string name=\"ext_uninstall\">I-uninstall</string>\n    <string name=\"untrusted_extension\">Dili kasaligan nga extension</string>\n    <string name=\"obsolete_extension_message\">Kini nga extension dili na magamit.</string>\n    <string name=\"extension_api_error\">Napakyas sa pagkuha sa listahan sa mga extension</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">Ang mga tinubdan gikan niini nga extension mahimong adunay sulod nga NSFW (18+)</string>\n    <string name=\"ext_install_service_notif\">Nag-instalar og extension…</string>\n    <string name=\"ext_installer_pref\">Installer</string>\n    <string name=\"ext_installer_legacy\">Kabilin</string>\n    <string name=\"ext_installer_shizuku_stopped\">Si Shizuku wala modagan</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">I-install ug sugdi ang Shizuku aron gamiton ang Shizuku isip extension installer.</string>\n    <string name=\"pref_fullscreen\">Fullscreen</string>\n    <string name=\"pref_dual_page_split\">Duha ka panid nga bahin</string>\n    <string name=\"pref_dual_page_invert\">Balita ang duha ka panid nga pagbahin sa pagbutang</string>\n    <string name=\"pref_dual_page_invert_summary\">Kung ang pagbutang sa doble nga panid sa panid dili motakdo sa direksyon sa pagbasa</string>\n    <string name=\"pref_double_tap_anim_speed\">Doble nga pag-tap sa katulin sa animation</string>\n    <string name=\"pref_show_page_number\">Ipakita ang numero sa panid</string>\n    <string name=\"pref_show_reading_mode\">Ipakita ang mode sa pagbasa</string>\n    <string name=\"pref_show_reading_mode_summary\">Sa daklit ipakita ang kasamtangan nga mode kung giablihan ang magbabasa</string>\n    <string name=\"pref_crop_borders\">Mga utlanan sa pananom</string>\n    <string name=\"on\">Sa</string>\n    <string name=\"pref_grayscale\">Grayscale</string>\n    <string name=\"pref_color_filter_mode\">Color filter blend mode</string>\n    <string name=\"filter_mode_multiply\">Pagdaghan</string>\n    <string name=\"filter_mode_lighten\">Dodge / Pagpagaan</string>\n    <string name=\"filter_mode_darken\">Pagsunog / Pagngitngit</string>\n    <string name=\"pref_keep_screen_on\">Ipadayon ang screen</string>\n    <string name=\"pref_skip_filtered_chapters\">Laktawan ang nasala nga mga kapitulo</string>\n    <string name=\"pref_reader_navigation\">Nabigasyon</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Ibalik ang mga yawe sa volume</string>\n    <string name=\"tapping_inverted_none\">Wala</string>\n    <string name=\"tapping_inverted_horizontal\">Pahigda</string>\n    <string name=\"tapping_inverted_both\">Ang duha</string>\n    <string name=\"pref_reader_actions\">Mga aksyon</string>\n    <string name=\"pref_create_folder_per_manga\">I-save ang mga panid sa lainlaing mga folder</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Naghimo ug mga folder sumala sa titulo sa manga</string>\n    <string name=\"white_background\">Puti</string>\n    <string name=\"gray_background\">Gray</string>\n    <string name=\"black_background\">Itom</string>\n    <string name=\"automatic_background\">Awtomatiko</string>\n    <string name=\"pref_viewer_type\">Default nga mode sa pagbasa</string>\n    <string name=\"l_nav\">L nga porma</string>\n    <string name=\"kindlish_nav\">Kindle-ish</string>\n    <string name=\"edge_nav\">Edge</string>\n    <string name=\"right_and_left_nav\">Tuo ug Wala</string>\n    <string name=\"disabled_nav\">Nabaldado</string>\n    <string name=\"nav_zone_prev\">Prev</string>\n    <string name=\"pref_show_navigation_mode\">Ipakita ang mga tap zone nga overlay</string>\n    <string name=\"pref_show_navigation_mode_summary\">Sa daklit ipakita kung giablihan ang magbabasa</string>\n    <string name=\"pref_read_with_tapping_inverted\">Balika ang mga tap zone</string>\n    <string name=\"ext_obsolete\">Karaan na</string>\n    <string name=\"exclude\">Dili iapil: %s</string>\n    <string name=\"ext_install\">Pag-instalar</string>\n    <string name=\"ext_downloading\">Nag-download</string>\n    <string name=\"pref_library_update_categories_details\">Ang manga sa wala iapil nga mga kategorya dili ma-update bisan kung naa usab sila sa mga gilakip nga kategorya.</string>\n    <string name=\"none\">Wala</string>\n    <string name=\"ext_pending\">Naghulat</string>\n    <string name=\"ext_app_info\">Impormasyon sa app</string>\n    <string name=\"untrusted_extension_message\">Kini nga extension gipirmahan gamit ang dili kasaligan nga sertipiko ug wala gi-aktibo.\n\\n\n\\nAng usa ka malisyoso nga extension mahimong makabasa sa bisan unsang mga kredensyal sa pag-login nga gitipigan sa Mihon o ipatuman ang arbitraryong code.\n\\n\n\\nPinaagi sa pagsalig niini nga sertipiko gidawat nimo kini nga mga risgo.</string>\n    <string name=\"pref_cutout_short\">Ipakita ang sulod sa ginunting nga lugar</string>\n    <string name=\"pref_page_transitions\">I-animate ang mga transisyon sa panid</string>\n    <string name=\"pref_custom_brightness\">Custom nga kahayag</string>\n    <string name=\"pref_read_with_volume_keys\">Mga yawe sa volume</string>\n    <string name=\"off\">Off</string>\n    <string name=\"pref_custom_color_filter\">Pasadya nga kolor nga filter</string>\n    <string name=\"filter_mode_overlay\">Pagahal-upan</string>\n    <string name=\"pref_skip_read_chapters\">Laktawan ang mga kapitulo nga gimarkahan nga nabasa</string>\n    <string name=\"pref_inverted_colors\">Baliktad</string>\n    <string name=\"filter_mode_screen\">Screen</string>\n    <string name=\"pref_read_with_long_tap\">Ipakita sa taas nga gripo</string>\n    <string name=\"tapping_inverted_vertical\">Bertikal</string>\n    <string name=\"pref_reader_theme\">Kolor sa background</string>\n    <string name=\"nav_zone_next\">Sunod</string>\n    <string name=\"nav_zone_left\">Sa wala</string>\n    <string name=\"nav_zone_right\">Husto</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"left_to_right_viewer\">Wala ngadto sa tuo</string>\n    <string name=\"right_to_left_viewer\">Tuo ngadto sa wala</string>\n    <string name=\"vertical_viewer\">Bertikal</string>\n    <string name=\"pager_viewer\">Paged</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_webtoon_side_padding\">Padding sa kilid</string>\n    <string name=\"pref_highest\">Pinakataas</string>\n    <string name=\"pref_lowest\">Kinaubsan</string>\n    <string name=\"pref_zoom_start\">Pag-zoom sa posisyon sa pagsugod</string>\n    <string name=\"zoom_start_left\">Sa wala</string>\n    <string name=\"zoom_start_right\">Husto</string>\n    <string name=\"zoom_start_center\">Sentro</string>\n    <string name=\"double_tap_anim_speed_0\">Walay animation</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"rotation_type\">Uri sa rotation</string>\n    <string name=\"rotation_free\">Libre</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"pref_always_show_chapter_transition\">Kanunay ipakita ang transisyon sa kapitulo</string>\n    <string name=\"pref_category_reading_mode\">Mode sa pagbasa</string>\n    <string name=\"pref_category_reading\">Pagbasa</string>\n    <string name=\"pref_high\">Taas</string>\n    <string name=\"pref_low\">Ubos</string>\n    <string name=\"pref_category_delete_chapters\">Pagtangtang sa mga kapitulo</string>\n    <string name=\"pref_remove_after_marked_as_read\">Human gimarkahan sa mano-mano ingon nabasa na</string>\n    <string name=\"pref_remove_after_read\">Human sa pagbasa awtomatikong tangtangon</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Tugoti ang pagtangtang sa gimarkahan nga mga kapitulo</string>\n    <string name=\"pref_remove_exclude_categories\">Wala iapil nga mga kategorya</string>\n    <string name=\"disabled\">Nabaldado</string>\n    <string name=\"fifth_to_last\">Ikalima hangtod sa kataposang pagbasa sa kapitulo</string>\n    <string name=\"pref_category_auto_download\">Awtomatikong pag-download</string>\n    <string name=\"pref_download_new_categories_details\">Ang manga sa wala iapil nga mga kategorya dili ma-download bisan kung naa usab sila sa mga gilakip nga kategorya.</string>\n    <string name=\"save_chapter_as_cbz\">I-save ingon CBZ archive</string>\n    <string name=\"tracking_guide\">Giya sa pagsubay</string>\n    <string name=\"network_not_metered\">Lamang sa ummetered network</string>\n    <string name=\"ext_info_language\">Pinulongan sa Extension</string>\n    <string name=\"ext_info_version\">Extension nga Bersyon</string>\n    <string name=\"ext_info_age_rating\">Rating sa Edad sa Extension</string>\n    <string name=\"vertical_plus_viewer\">Padayon nga bertikal</string>\n    <string name=\"scale_type_original_size\">Orihinal nga gidak-on</string>\n    <string name=\"scale_type_fit_screen\">Haom nga screen</string>\n    <string name=\"scale_type_stretch\">Pag-inat</string>\n    <string name=\"scale_type_fit_width\">Haom ang gilapdon</string>\n    <string name=\"scale_type_fit_height\">Haom nga gitas-on</string>\n    <string name=\"rotation_landscape\">Landscape</string>\n    <string name=\"rotation_force_portrait\">Naka-lock nga hulagway</string>\n    <string name=\"double_tap_anim_speed_fast\">Paspas</string>\n    <string name=\"rotation_force_landscape\">Naka-lock nga talan-awon</string>\n    <string name=\"pref_rotation_type\">Default nga tipo sa rotation</string>\n    <string name=\"rotation_portrait\">Hulagway</string>\n    <string name=\"rotation_reverse_portrait\">Baliktad nga hulagway</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"second_to_last\">Ikaduha hangtod sa kataposang pagbasa sa kapitulo</string>\n    <string name=\"action_track\">Track</string>\n    <string name=\"scale_type_smart_fit\">Smart angay</string>\n    <string name=\"zoom_start_automatic\">Awtomatiko</string>\n    <string name=\"pref_hide_threshold\">Pagkasensitibo sa pagtago sa menu sa scroll</string>\n    <string name=\"last_read_chapter\">Katapusan nga nabasa nga kapitulo</string>\n    <string name=\"third_to_last\">Ikatulo hangtod sa kataposang pagbasa sa kapitulo</string>\n    <string name=\"fourth_to_last\">Ika-upat hangtod sa kataposang pagbasa sa kapitulo</string>\n    <string name=\"pref_download_new\">Pag-download sa bag-ong mga kapitulo</string>\n    <string name=\"enhanced_tracking_info\">Mga serbisyo nga naghatag dugang nga mga bahin alang sa piho nga mga gigikanan. Awtomatikong gisubay ang Manga kon idugang sa imong librarya.</string>\n    <string name=\"tracking_info\">Usa ka paagi nga pag-sync aron ma-update ang pag-uswag sa kapitulo sa mga serbisyo sa pagsubay. I-set up ang tracking para sa indibidwal nga manga entries gikan sa ilang tracking button.</string>\n    <string name=\"enhanced_services\">Gipalambo nga mga serbisyo</string>\n    <string name=\"pref_auto_update_manga_sync\">Ang pag-uswag sa pag-update pagkahuman sa pagbasa</string>\n    <string name=\"split_tall_images_summary\">Nagpauswag sa pasundayag sa magbabasa pinaagi sa pagbahin sa taas nga na-download nga mga imahe.</string>\n    <string name=\"services\">Mga serbisyo</string>\n    <string name=\"pref_viewer_nav\">Pag-tap sa mga zone</string>\n    <string name=\"pref_create_backup\">Paghimo og backup</string>\n    <string name=\"pref_create_backup_summ\">Mahimong gamiton aron mapasig-uli ang kasamtangan nga librarya</string>\n    <string name=\"pref_image_scale_type\">Uri sa sukdanan sa hulagway</string>\n    <string name=\"pref_restore_backup\">Ibalik ang backup</string>\n    <string name=\"pref_restore_backup_summ\">Ibalik ang librarya gikan sa backup file</string>\n    <string name=\"backup_created\">Gihimo ang backup</string>\n    <string name=\"pref_backup_interval\">Kadaghanon sa pag-backup</string>\n    <string name=\"invalid_backup_file\">Dili balido nga backup file</string>\n    <string name=\"invalid_backup_file_missing_manga\">Ang backup walay bisan unsang manga.</string>\n    <string name=\"backup_restore_missing_sources\">Nawala nga mga tinubdan:</string>\n    <string name=\"empty_backup_error\">Walay mga entri sa library nga i-back up</string>\n    <string name=\"restore_miui_warning\">Ang pag-backup/pagpasig-uli mahimong dili molihok sa husto kung ang MIUI Optimization gi-disable.</string>\n    <string name=\"restore_in_progress\">Ang pagpasig-uli nagpadayon na</string>\n    <string name=\"restoring_backup_error\">Napakyas ang pag-uli sa backup</string>\n    <string name=\"restoring_backup_canceled\">Gikansela ang pagpasig-uli</string>\n    <string name=\"backup_info\">Ang mga awtomatikong pag-backup girekomendar kaayo. Kinahanglan nimong tipigan ang mga kopya sa ubang mga dapit usab.</string>\n    <string name=\"label_network\">Network</string>\n    <string name=\"pref_clear_cookies\">Tin-aw nga cookies</string>\n    <string name=\"pref_dns_over_https\">DNS sa HTTPS (DoH)</string>\n    <string name=\"requires_app_restart\">Nagkinahanglan nga i-restart ang app aron ma-epekto</string>\n    <string name=\"backup_in_progress\">Ang pag-backup nagpadayon na</string>\n    <string name=\"restore_duration\">%02d minuto , %02d ikaduha</string>\n    <string name=\"backup_choice\">Unsa ang gusto nimo i-backup?</string>\n    <string name=\"backup_restore_content_full\">Ang datos gikan sa backup file mapasig-uli.\n\\n\n\\nKinahanglan nimo nga i-install ang bisan unsang nawala nga mga extension ug mag-log in sa mga serbisyo sa pagsubay pagkahuman aron magamit kini.</string>\n    <string name=\"restore_completed\">Nakompleto ang pag-uli</string>\n    <string name=\"creating_backup\">Paghimo og backup</string>\n    <string name=\"backup_restore_missing_trackers\">Ang mga tracker wala naka-log in:</string>\n    <string name=\"restoring_backup\">Pag-uli sa backup</string>\n    <string name=\"cookies_cleared\">Gilimpyohan ang mga cookies</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"pref_clear_chapter_cache\">Hawani ang cache sa kapitulo</string>\n    <string name=\"creating_backup_error\">Napakyas ang pag-backup</string>\n    <string name=\"delete_category_confirmation\">Gusto ba nimong papason ang kategoryang \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Pagtangtang sa kategorya</string>\n    <string name=\"internal_error\">Internal nga Sayop: Susiha ang mga crash log para sa dugang nga impormasyon</string>\n    <string name=\"pref_navigate_pan\">Pag-navigate sa pan</string>\n    <string name=\"theme_lavender\">Lavender</string>\n    <string name=\"action_remove_everything\">Kuhaa ang tanan</string>\n    <string name=\"pref_app_language\">Pinulongan sa app</string>\n    <string name=\"used_cache\">Gigamit: %1$s</string>\n    <string name=\"database_clean\">Limpyo ang database</string>\n    <string name=\"pref_refresh_library_covers\">I-refresh ang mga hapin sa librarya</string>\n    <string name=\"pref_dump_crash_logs\">Dump crash logs</string>\n    <string name=\"pref_verbose_logging_summary\">I-print ang verbose logs ngadto sa system log (gipamenos ang performance sa app)</string>\n    <string name=\"about_dont_kill_my_app\">Ang ubang mga tiggama adunay dugang nga mga pagdili sa app nga nagpatay sa mga serbisyo sa background. Kini nga website adunay dugang nga impormasyon kon unsaon kini pag-ayo.</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Hawani ang cache sa kapitulo sa pagsira sa app</string>\n    <string name=\"pref_clear_database\">Klaro nga database</string>\n    <string name=\"clear_database_source_item_count\">%1$d non-library manga sa database</string>\n    <string name=\"clear_database_confirmation\">Sigurado ka? Basaha ang mga kapitulo ug ang pag-uswag sa dili librarya nga manga mawala</string>\n    <string name=\"pref_dump_crash_logs_summary\">Gitipigan ang mga log sa sayup sa usa ka file aron ipaambit sa mga nag-develop</string>\n    <string name=\"pref_clear_database_summary\">I-delete ang history para sa manga nga wala ma-save sa imong library</string>\n    <string name=\"pref_disable_battery_optimization\">I-disable ang pag-optimize sa baterya</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet UI</string>\n    <string name=\"pref_landscape_zoom\">I-zoom ang hulagway sa talan-awon</string>\n    <string name=\"battery_optimization_disabled\">Ang pag-optimize sa baterya gi-disable na</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Dili maablihan ang mga setting sa device</string>\n    <string name=\"pref_user_agent_string\">Default nga user agent string</string>\n    <string name=\"pref_reset_user_agent_string\">I-reset ang default user agent string</string>\n    <string name=\"cache_deleted\">Gitangtang ang cache. %1$d nga mga file ang natangtang</string>\n    <string name=\"cache_delete_error\">Nahitabo ang sayup samtang nanglimpyo</string>\n    <string name=\"clear_database_completed\">Gitangtang ang mga entry</string>\n    <string name=\"pref_clear_webview_data\">Tin-aw ang datos sa WebView</string>\n    <string name=\"webview_data_deleted\">Ang datos sa WebView gitangtang</string>\n    <string name=\"pref_reset_viewer_flags\">I-reset ang mga setting sa matag-serye nga magbabasa</string>\n    <string name=\"pref_reset_viewer_flags_summary\">I-reset ang mode sa pagbasa ug oryentasyon sa tanan nga serye</string>\n    <string name=\"pref_reset_viewer_flags_success\">Ang tanan nga mga setting sa magbabasa gi-reset</string>\n    <string name=\"pref_reset_viewer_flags_error\">Dili ma-reset ang mga setting sa magbabasa</string>\n    <string name=\"label_background_activity\">Kalihokan sa background</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Nagtabang sa mga update sa librarya sa background ug pag-backup</string>\n    <string name=\"pref_verbose_logging\">Verbose logging</string>\n    <string name=\"whats_new\">Unsay bag-o</string>\n    <string name=\"help_translate\">Tabang sa paghubad</string>\n    <string name=\"privacy_policy\">Polisiya sa pagkapribado</string>\n    <string name=\"downloaded_only_summary\">Pagsala sa tanang manga sa imong library</string>\n    <string name=\"pref_acra_summary\">Nakatabang sa pag-ayo sa bisan unsang mga bug. Walay sensitibo nga datos nga ipadala</string>\n    <string name=\"licenses\">Mga lisensya sa open source</string>\n    <string name=\"label_downloaded_only\">Na-download lang</string>\n    <string name=\"pref_incognito_mode_summary\">Paghunong sa pagbasa sa kasaysayan</string>\n    <string name=\"notification_incognito_text\">I-disable ang incognito mode</string>\n    <string name=\"pref_incognito_mode\">Incognito mode</string>\n    <string name=\"version\">Bersyon</string>\n    <string name=\"check_for_updates\">Susiha ang mga update</string>\n    <string name=\"updated_version\">Mga update sa v%1$s</string>\n    <string name=\"pref_enable_acra\">Ipadala ang mga taho sa pagkahagsa</string>\n    <string name=\"logout_success\">Naka-log out ka na karon</string>\n    <string name=\"password\">Password</string>\n    <string name=\"login\">Login</string>\n    <string name=\"logout_title\">Log out gikan sa %1$s?</string>\n    <string name=\"logout\">Log out</string>\n    <string name=\"login_success\">Naka-log in</string>\n    <string name=\"login_title\">Login sa %1$s</string>\n    <string name=\"email\">Email Address</string>\n    <string name=\"unknown_error\">Wala mailhi nga sayup</string>\n    <string name=\"username\">Username</string>\n    <string name=\"action_display_show_continue_reading_button\">Ipakita ang buton sa pagpadayon sa pagbasa</string>\n    <string name=\"action_search_hint\">Pangitaa…</string>\n    <string name=\"action_open_random_manga\">Abli nga random ang pagsulod</string>\n    <string name=\"label_stats\">Istatistika</string>\n    <string name=\"label_started\">Nagsugod</string>\n    <string name=\"label_downloaded\">Gi-download</string>\n    <string name=\"label_local\">Lokal</string>\n    <string name=\"pref_appearance_summary\">Tema, format sa petsa ug panahon</string>\n    <string name=\"action_not_now\">Dili karon</string>\n    <string name=\"information_webview_required\">Gikinahanlan ang WebView alang sa Mihon</string>\n    <string name=\"information_required_plain\">*gikinahanlan</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/cs/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Po %1$s minutě</item>\n        <item quantity=\"few\">Po %1$s minutách</item>\n        <item quantity=\"other\">Po %1$s minutách</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s kapitola</item>\n        <item quantity=\"few\">%1$s kapitoly</item>\n        <item quantity=\"other\">%1$s kapitol</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s zbývá</item>\n        <item quantity=\"few\">%1$s zbývají</item>\n        <item quantity=\"other\">%1$s zbývá</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Dokončeno za %1$s s %2$s chybou</item>\n        <item quantity=\"few\">Dokončeno za %1$s s %2$s chybami</item>\n        <item quantity=\"other\">Dokončeno za %1$s s %2$s chybami</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategorie</item>\n        <item quantity=\"few\">%d kategorie</item>\n        <item quantity=\"other\">%d kategorií</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Je dostupná aktualizace rozšíření</item>\n        <item quantity=\"few\">Jsou dostupné %d aktualizace rozšíření</item>\n        <item quantity=\"other\">Je dostupných %d aktualizací rozšíření</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Kapitoly %1$s a 1 další</item>\n        <item quantity=\"few\">Kapitoly %1$s a %2$d další</item>\n        <item quantity=\"other\">Kapitoly %1$s a %2$d dalších</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nová kapitola</item>\n        <item quantity=\"few\">%1$d nové kapitoly</item>\n        <item quantity=\"other\">%1$d nových kapitol</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Pro %d položku</item>\n        <item quantity=\"few\">Pro %d položky</item>\n        <item quantity=\"other\">Pro %d položek</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Přeskočena %d kapitola, buď chybí ve zdroji nebo byla vyfiltrována</item>\n        <item quantity=\"few\">Přeskočeny %d kapitoly, buď chybí ve zdroji nebo byly vyfiltrovány</item>\n        <item quantity=\"other\">Přeskočeno %d kapitol, buď chybí ve zdroji nebo byly vyfiltrovány</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d sledovač</item>\n        <item quantity=\"few\">%d sledovače</item>\n        <item quantity=\"other\">%d sledovačů</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Včera</item>\n        <item quantity=\"few\">Před %1$d dny</item>\n        <item quantity=\"other\">Před %1$d dny</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Další nepřečtená kapitola</item>\n        <item quantity=\"few\">Další %d nepřečtené kapitoly</item>\n        <item quantity=\"other\">Dalších %d nepřečtených kapitol</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Další kapitola</item>\n        <item quantity=\"few\">Další %d kapitoly</item>\n        <item quantity=\"other\">Dalších %d kapitol</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Chybí %1$s kapitola</item>\n        <item quantity=\"few\">Chybí %1$s kapitoly</item>\n        <item quantity=\"other\">Chybí %1$s kapitol</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 den</item>\n        <item quantity=\"few\">%d dny</item>\n        <item quantity=\"other\">%d dní</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repozitář</item>\n        <item quantity=\"few\">%d repozitáře</item>\n        <item quantity=\"other\">%d repozitářů</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Zítra</item>\n        <item quantity=\"few\">Za %1$d dny</item>\n        <item quantity=\"other\">Za %1$d dnů</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 stránka</item>\n        <item quantity=\"few\">%1$s stránky</item>\n        <item quantity=\"other\">%1$s stránek</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/cs/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"categories\">Kategorie</string>\n    <string name=\"manga\">Záznamy v knihovně</string>\n    <string name=\"chapters\">Kapitoly</string>\n    <string name=\"history\">Historie</string>\n    <string name=\"label_settings\">Nastavení</string>\n    <string name=\"label_library\">Knihovna</string>\n    <string name=\"label_recent_manga\">Historie</string>\n    <string name=\"label_backup\">Záloha a obnovení</string>\n    <string name=\"label_migration\">Přesunout</string>\n    <string name=\"label_extensions\">Rozšíření</string>\n    <string name=\"label_extension_info\">Informace o rozšíření</string>\n    <string name=\"action_settings\">Nastavení</string>\n    <string name=\"action_filter\">Filtr</string>\n    <string name=\"action_filter_unread\">Nepřečteno</string>\n    <string name=\"action_filter_empty\">Odstranit filtr</string>\n    <string name=\"action_sort_alpha\">Abecedně</string>\n    <string name=\"action_sort_last_read\">Naposledy čteno</string>\n    <string name=\"action_search\">Vyhledávání</string>\n    <string name=\"action_global_search\">Globální vyhledávání</string>\n    <string name=\"action_select_all\">Vybrat vše</string>\n    <string name=\"action_mark_as_read\">Označit jako přečtené</string>\n    <string name=\"action_mark_as_unread\">Označit jako nepřečtené</string>\n    <string name=\"action_mark_previous_as_read\">Označit předchozí jako přečtené</string>\n    <string name=\"action_download\">Stáhnout</string>\n    <string name=\"action_delete\">Odstranit</string>\n    <string name=\"action_edit\">Upravit</string>\n    <string name=\"action_add\">Přidat</string>\n    <string name=\"action_add_category\">Přidat kategorii</string>\n    <string name=\"action_edit_categories\">Upravit kategorie</string>\n    <string name=\"action_previous_chapter\">Předchozí kapitola</string>\n    <string name=\"action_next_chapter\">Následující kapitola</string>\n    <string name=\"action_remove\">Odstranit</string>\n    <string name=\"action_open_in_browser\">Otevřít v prohlížeči</string>\n    <string name=\"action_display_grid\">Kompaktní mřížka</string>\n    <string name=\"action_display_list\">Seznam</string>\n    <string name=\"action_cancel\">Zrušit</string>\n    <string name=\"action_install\">Instalovat</string>\n    <string name=\"action_share\">Sdílet</string>\n    <string name=\"action_save\">Uložit</string>\n    <string name=\"action_undo\">Zpět</string>\n    <string name=\"action_restore\">Obnovit</string>\n    <string name=\"loading\">Načítání…</string>\n    <string name=\"app_not_available\">Aplikace není k dispozici</string>\n    <string name=\"pref_category_downloads\">Stahování</string>\n    <string name=\"update_6hour\">Každých 6 hodiny</string>\n    <string name=\"update_12hour\">Každých 12 hodiny</string>\n    <string name=\"update_24hour\">Denně</string>\n    <string name=\"update_48hour\">Každé 2 dny</string>\n    <string name=\"update_weekly\">Týdně</string>\n    <string name=\"pref_update_only_non_completed\">Přeskočit položky ve stavu \\\"Dokončeno\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Aktualizovat počet kapitol po přečtení</string>\n    <string name=\"ext_update\">Aktualizovat</string>\n    <string name=\"ext_install\">Instalovat</string>\n    <string name=\"ext_pending\">Čeká se</string>\n    <string name=\"ext_downloading\">Stahování</string>\n    <string name=\"ext_installing\">Instalování</string>\n    <string name=\"ext_installed\">Nainstalováno</string>\n    <string name=\"ext_trust\">Důvěryhodné</string>\n    <string name=\"ext_untrusted\">Nedůvěryhodné</string>\n    <string name=\"ext_uninstall\">Odinstalovat</string>\n    <string name=\"untrusted_extension\">Nedůvěryhodné rozšíření</string>\n    <string name=\"untrusted_extension_message\">Škodlivé rozšíření může přečíst jakékoliv uložené přihlašovací údaje nebo spustit libovolný kód.\n\\n\n\\nDůvěřováním tohoto rozšířeni přijímáte tato rizika.</string>\n    <string name=\"pref_fullscreen\">Celá obrazovka</string>\n    <string name=\"pref_page_transitions\">Animovat přechody stránek</string>\n    <string name=\"pref_show_page_number\">Zobrazit číslo stránky</string>\n    <string name=\"pref_read_with_volume_keys\">Tlačítka hlasitosti</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Prohodit tlačítka hlasitosti</string>\n    <string name=\"pref_reader_theme\">Barva pozadí</string>\n    <string name=\"white_background\">Bílá</string>\n    <string name=\"black_background\">Černá</string>\n    <string name=\"left_to_right_viewer\">Stránkované (zleva doprava)</string>\n    <string name=\"right_to_left_viewer\">Stránkované (zprava doleva)</string>\n    <string name=\"pref_rotation_type\">Výchozí otáčení</string>\n    <string name=\"rotation_free\">Volné</string>\n    <string name=\"rotation_force_portrait\">Zamknuto na výšku</string>\n    <string name=\"rotation_force_landscape\">Zamknuto na šířku</string>\n    <string name=\"color_filter_r_value\">Červená</string>\n    <string name=\"color_filter_g_value\">Zelená</string>\n    <string name=\"color_filter_b_value\">Modrá</string>\n    <string name=\"color_filter_a_value\">Průhlednost</string>\n    <string name=\"pref_remove_after_marked_as_read\">Po ručním označení jako přečtené</string>\n    <string name=\"pref_remove_after_read\">Po přečtení automaticky smazat</string>\n    <string name=\"pref_download_new\">Stahovat nové kapitoly</string>\n    <string name=\"username\">Uživatelské jméno</string>\n    <string name=\"password\">Heslo</string>\n    <string name=\"login\">Přihlásit se</string>\n    <string name=\"login_success\">Přihlášení proběhlo úspěšně</string>\n    <string name=\"unknown_error\">Neznámá chyba</string>\n    <string name=\"no_more_results\">Žádné další výsledky</string>\n    <string name=\"action_global_search_hint\">Globální vyhledávání…</string>\n    <string name=\"ongoing\">Vycházející</string>\n    <string name=\"remove_from_library\">Odstranit z knihovny</string>\n    <string name=\"manga_added_library\">Přidáno do knihovny</string>\n    <string name=\"manga_removed_library\">Odstraněno z knihovny</string>\n    <string name=\"delete_downloads_for_manga\">Smazat stažené kapitoly?</string>\n    <string name=\"source_not_installed\">Zdroj není nainstalován: %1$s</string>\n    <string name=\"display_mode_chapter\">Kapitola %1$s</string>\n    <string name=\"chapter_downloading_progress\">Stahování (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Chyba</string>\n    <string name=\"chapter_paused\">Pozastaveno</string>\n    <string name=\"sort_by_source\">Podle zdroje</string>\n    <string name=\"manga_download\">Stáhnout</string>\n    <string name=\"download_unread\">Stáhnout nepřečtené</string>\n    <string name=\"confirm_delete_chapters\">Opravdu chcete smazat vybrané kapitoly?</string>\n    <string name=\"reading\">Rozečtené</string>\n    <string name=\"completed\">Dokončeno</string>\n    <string name=\"plan_to_read\">Plánuji číst</string>\n    <string name=\"repeating\">Znovu čtu</string>\n    <string name=\"score\">Skóre</string>\n    <string name=\"title\">Název</string>\n    <string name=\"track_type\">Typ</string>\n    <string name=\"dialog_with_checkbox_reset\">Obnovit všechny kapitoly pro tento záznam</string>\n    <string name=\"snack_add_to_library\">Přidat do knihovny?</string>\n    <string name=\"picture_saved\">Obrázek uložen</string>\n    <string name=\"custom_filter\">Vlastní filtr</string>\n    <string name=\"chapter_progress\">Stránka: %1$d</string>\n    <string name=\"no_next_chapter\">Další kapitola nenalezena</string>\n    <string name=\"decode_image_error\">Obrázek se nepodařilo načíst</string>\n    <string name=\"transition_finished\">Dokončeno:</string>\n    <string name=\"transition_current\">Aktuální:</string>\n    <string name=\"transition_next\">Následující:</string>\n    <string name=\"transition_previous\">Předchozí:</string>\n    <string name=\"transition_no_next\">Žádná další kapitola</string>\n    <string name=\"transition_no_previous\">Žádná předchozí kapitola</string>\n    <string name=\"transition_pages_loading\">Načítání stránek…</string>\n    <string name=\"migrate\">Přesunout</string>\n    <string name=\"copy\">Kopírovat</string>\n    <string name=\"download_queue_error\">Došlo k chybě při stahování kapitol. Zkuste to znovu v sekci stahování</string>\n    <string name=\"notification_new_chapters\">Nalezeny nové kapitoly</string>\n    <string name=\"file_select_backup\">Vybrat záložní soubor</string>\n    <string name=\"update_check_confirm\">Stáhnout</string>\n    <string name=\"update_check_no_new_updates\">Žádné nové aktualizace</string>\n    <string name=\"update_check_notification_download_complete\">Klepnutím nainstalujte aktualizaci</string>\n    <string name=\"update_check_notification_download_error\">Chyba při stahování</string>\n    <string name=\"update_check_notification_update_available\">Dostupná aktualizace!</string>\n    <string name=\"information_no_recent\">Žádné nedávné aktualizace</string>\n    <string name=\"information_no_recent_manga\">Nic nedávno čtené</string>\n    <string name=\"download_notifier_title_error\">Chyba</string>\n    <string name=\"download_notifier_unknown_error\">Při stahování kapitoly došlo k neznámé chybě</string>\n    <string name=\"download_notifier_text_only_wifi\">WiFi připojení není dostupné</string>\n    <string name=\"download_notifier_no_network\">Síťové připojení není dostupné</string>\n    <string name=\"download_notifier_download_paused\">Stahování pozastaveno</string>\n    <string name=\"label_download_queue\">Stahovací fronta</string>\n    <string name=\"name\">Název</string>\n    <string name=\"track\">Sledování</string>\n    <string name=\"label_recent_updates\">Aktualizace</string>\n    <string name=\"action_filter_bookmarked\">Založeno</string>\n    <string name=\"action_sort_total\">Celkem kapitol</string>\n    <string name=\"action_bookmark\">Založit kapitolu</string>\n    <string name=\"action_remove_bookmark\">Odstranit záložku</string>\n    <string name=\"action_update_library\">Aktualizovat knihovnu</string>\n    <string name=\"action_rename_category\">Přejmenovat kategorii</string>\n    <string name=\"action_move_category\">Vybrat kategorie</string>\n    <string name=\"action_pause\">Pauza</string>\n    <string name=\"action_retry\">Opakovat</string>\n    <string name=\"action_resume\">Pokračovat</string>\n    <string name=\"action_display_mode\">Režim zobrazení</string>\n    <string name=\"action_display\">Zobrazení</string>\n    <string name=\"action_display_download_badge\">Stažené kapitoly</string>\n    <string name=\"action_sort\">Seřadit</string>\n    <string name=\"action_reset\">Resetovat</string>\n    <string name=\"action_open_log\">Otevřít log</string>\n    <string name=\"pref_category_general\">Obecné</string>\n    <string name=\"pref_category_reader\">Čtečka</string>\n    <string name=\"pref_category_tracking\">Sledování</string>\n    <string name=\"pref_category_advanced\">Pokročilé</string>\n    <string name=\"pref_category_about\">O aplikaci</string>\n    <string name=\"pref_library_columns\">Položek na řádek</string>\n    <string name=\"portrait\">Na výšku</string>\n    <string name=\"landscape\">Na šířku</string>\n    <string name=\"pref_library_update_interval\">Automatické aktualizace</string>\n    <string name=\"update_never\">Nikdy</string>\n    <string name=\"all\">Vše</string>\n    <string name=\"charging\">Při nabíjení</string>\n    <string name=\"default_category\">Výchozí kategorie</string>\n    <string name=\"default_category_summary\">Vždy se zeptat</string>\n    <string name=\"pref_double_tap_anim_speed\">Rychlost animace při dvojkliku</string>\n    <string name=\"pref_crop_borders\">Oříznout okraje</string>\n    <string name=\"pref_custom_brightness\">Vlastní jas</string>\n    <string name=\"pref_custom_color_filter\">Vlastní barevný filtr</string>\n    <string name=\"pref_viewer_type\">Výchozí režim čtení</string>\n    <string name=\"vertical_viewer\">Stránkovaný (svisle)</string>\n    <string name=\"webtoon_viewer\">Dlouhý pruh</string>\n    <string name=\"pref_image_scale_type\">Typ úpravy velikosti</string>\n    <string name=\"scale_type_fit_screen\">Přizpůsobit obrazovce</string>\n    <string name=\"scale_type_stretch\">Natáhnout</string>\n    <string name=\"scale_type_fit_width\">Přizpůsobit šířku</string>\n    <string name=\"scale_type_fit_height\">Přizpůsobit šířku</string>\n    <string name=\"scale_type_original_size\">Původní velikost</string>\n    <string name=\"scale_type_smart_fit\">Chytré přizpůsobení</string>\n    <string name=\"pref_zoom_start\">Výchozí poloha zvětšení</string>\n    <string name=\"zoom_start_automatic\">Automaticky</string>\n    <string name=\"zoom_start_left\">Vlevo</string>\n    <string name=\"zoom_start_right\">Vpravo</string>\n    <string name=\"zoom_start_center\">Na střed</string>\n    <string name=\"double_tap_anim_speed_0\">Bez animace</string>\n    <string name=\"double_tap_anim_speed_normal\">Normální</string>\n    <string name=\"double_tap_anim_speed_fast\">Rychle</string>\n    <string name=\"services\">Sledovače</string>\n    <string name=\"pref_create_backup\">Vytvořit zálohu</string>\n    <string name=\"pref_restore_backup\">Obnovit zálohu</string>\n    <string name=\"pref_backup_interval\">Frekvence automatických záloh</string>\n    <string name=\"backup_created\">Záloha vytvořena</string>\n    <string name=\"restore_completed\">Obnova dokončena</string>\n    <string name=\"backup_choice\">Co chcete zálohovat?</string>\n    <string name=\"restoring_backup\">Obnovování zálohy</string>\n    <string name=\"creating_backup\">Vytváření zálohy</string>\n    <string name=\"pref_clear_chapter_cache\">Vymazat mezipaměť kapitol</string>\n    <string name=\"used_cache\">Využito: %1$s</string>\n    <string name=\"cache_deleted\">Mezipaměť smazána, %1$d souborů odstraněno</string>\n    <string name=\"cache_delete_error\">Během vymazávání došlo k chybě</string>\n    <string name=\"pref_clear_cookies\">Vymazat cookies</string>\n    <string name=\"cookies_cleared\">Cookies vymazány</string>\n    <string name=\"pref_clear_database\">Vyčistit databázi</string>\n    <string name=\"pref_clear_database_summary\">Smazat historii položek, které nejsou uloženy ve vaší knihovně</string>\n    <string name=\"clear_database_confirmation\">Jste si jistí? Přečtené kapitoly a postup v položkách mimo knihovnu bude ztracen</string>\n    <string name=\"clear_database_completed\">Položky byly smazány</string>\n    <string name=\"version\">Verze</string>\n    <string name=\"pref_enable_acra\">Odesílat hlášení o pádu</string>\n    <string name=\"pref_acra_summary\">Pomáhá opravit chyby. Nebudou odeslány žádné citlivé údaje</string>\n    <string name=\"updating_category\">Aktualizuji kategorie</string>\n    <string name=\"local_source\">Lokální zdroj</string>\n    <string name=\"other_source\">Ostatní</string>\n    <string name=\"latest\">Nejnovější</string>\n    <string name=\"browse\">Procházet</string>\n    <string name=\"unknown\">Neznámý</string>\n    <string name=\"licensed\">Licencovaný</string>\n    <string name=\"copied_to_clipboard\">Zkopírováno do schránky:\n\\n%1$s</string>\n    <string name=\"sort_by_number\">Podle čísla kapitoly</string>\n    <string name=\"manga_tracking_tab\">Sledování</string>\n    <string name=\"dropped\">Již nečtu</string>\n    <string name=\"on_hold\">Pozastaveno</string>\n    <string name=\"status\">Stav</string>\n    <string name=\"track_status\">Stav</string>\n    <string name=\"snack_categories_deleted\">Kategorie smazány</string>\n    <string name=\"set_as_cover\">Nastavit jako obal</string>\n    <string name=\"cover_updated\">Obal aktualizován</string>\n    <string name=\"action_edit_cover\">Upravit přebal</string>\n    <string name=\"pref_library_update_restriction\">Omezení zařízení pro automatické aktualizace</string>\n    <string name=\"pref_keep_screen_on\">Udržovat obrazovku zapnutou</string>\n    <string name=\"pref_reader_navigation\">Navigování</string>\n    <string name=\"pager_viewer\">Stránkovač</string>\n    <string name=\"disabled\">Zakázáno</string>\n    <string name=\"last_read_chapter\">Poslední přečtená kapitola</string>\n    <string name=\"second_to_last\">Předposlední kapitola</string>\n    <string name=\"third_to_last\">Třetí předposlední přečtená kapitola</string>\n    <string name=\"fourth_to_last\">Čtvrtá předposlední přečtená kapitola</string>\n    <string name=\"fifth_to_last\">Pátá předposlední přečtená kapitola</string>\n    <string name=\"pref_create_backup_summ\">Lze použít k obnovení aktuální knihovny</string>\n    <string name=\"pref_restore_backup_summ\">Obnovit knihovnu ze záložního souboru</string>\n    <string name=\"login_title\">Přihlásit se do %1$s</string>\n    <string name=\"show_title\">Název zdroje</string>\n    <string name=\"show_chapter_number\">Číslo kapitoly</string>\n    <string name=\"error_category_exists\">Kategorie s tímto jménem již existuje!</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Toto odstraní datum přečtení této kapitoly. Jste si jistý?</string>\n    <string name=\"confirm_set_image_as_cover\">Chcete tento obrázek nastavit jako obal?</string>\n    <string name=\"transition_pages_error\">Chyba při načítání stránek: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Vyberte data, která chcete zahrnout</string>\n    <string name=\"notification_cover_update_failed\">Chyba při aktualizaci obalu</string>\n    <string name=\"notification_first_add_to_library\">Přidejte si prosím položku do knihovny před tím, než toto uděláte</string>\n    <string name=\"file_select_cover\">Vybrat obrázek obalu</string>\n    <string name=\"update_check_notification_download_in_progress\">Probíhá stahování…</string>\n    <string name=\"information_no_downloads\">Žádné stahování</string>\n    <string name=\"information_empty_library\">Vaše knihovna je prázdná</string>\n    <string name=\"information_empty_category\">Nemáte žádné kategorie. Klikněte na tlačítko plus a vytvořte nějakou pro zorganizování vaší knihovny.</string>\n    <string name=\"download_notifier_downloader_title\">Stahovač</string>\n    <string name=\"channel_common\">Běžný</string>\n    <string name=\"label_help\">Nápověda</string>\n    <string name=\"action_open_in_web_view\">Otevřít ve WebView</string>\n    <string name=\"pref_read_with_long_tap\">Zobrazit akce dlouhým stisknutím</string>\n    <string name=\"pref_skip_read_chapters\">Přeskakovat přečtené kapitoly</string>\n    <string name=\"pref_color_filter_mode\">Režim mísení filtru barev</string>\n    <string name=\"filter_mode_overlay\">Překrytí</string>\n    <string name=\"filter_mode_multiply\">Násobení</string>\n    <string name=\"filter_mode_screen\">Obrazovka</string>\n    <string name=\"filter_mode_lighten\">Zesvětlit</string>\n    <string name=\"filter_mode_darken\">Ztmavit</string>\n    <string name=\"no_results_found\">Nenalezeny žádné výsledky</string>\n    <string name=\"migration_selection_prompt\">Vyberte zdroj, ze kterého chcete přesouvat</string>\n    <string name=\"action_webview_back\">Zpět</string>\n    <string name=\"action_webview_forward\">Vpřed</string>\n    <string name=\"action_webview_refresh\">Obnovit</string>\n    <string name=\"pref_category_library\">Knihovna</string>\n    <string name=\"ext_obsolete\">Zastaralý</string>\n    <string name=\"obsolete_extension_message\">Toto rozšíření již není k dispozici. Nemusí fungovat správně a může způsobit problémy s aplikací. Doporučujeme jej odinstalovat.</string>\n    <string name=\"logout\">Odhlásit se</string>\n    <string name=\"pref_date_format\">Formát data</string>\n    <string name=\"pref_category_library_update\">Globální aktualizace</string>\n    <string name=\"logout_title\">Odhlásit z %1$s?</string>\n    <string name=\"logout_success\">Nyní jste odhlášený</string>\n    <string name=\"paused\">Pozastaveno</string>\n    <string name=\"label_more\">Více</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"label_sources\">Zdroje</string>\n    <string name=\"spen_previous_page\">Předchozí stránka</string>\n    <string name=\"spen_next_page\">Následující stránka</string>\n    <string name=\"hide_notification_content\">Skrýt obsah oznámení</string>\n    <string name=\"lock_never\">Nikdy</string>\n    <string name=\"lock_always\">Vždy</string>\n    <string name=\"lock_when_idle\">Uzamknout při nečinnosti</string>\n    <string name=\"pref_category_security\">Bezpečnost a soukromí</string>\n    <string name=\"pref_manage_notifications\">Spravovat oznámení</string>\n    <string name=\"action_oldest\">Nejstarší</string>\n    <string name=\"action_newest\">Nejnovější</string>\n    <string name=\"action_view_chapters\">Zobrazit kapitoly</string>\n    <string name=\"action_sort_latest_chapter\">Poslední kapitola</string>\n    <string name=\"add_tracking\">Přidat sledování</string>\n    <string name=\"no_chapters_error\">Nebyly nalezeny žádné kapitoly</string>\n    <string name=\"set_chapter_settings_as_default\">Nastavit jako výchozí</string>\n    <string name=\"confirm_set_chapter_settings\">Jsi si jistý, že chceš tato nastavení uložit jako výchozí?</string>\n    <string name=\"chapter_settings\">Nastavení kapitoly</string>\n    <string name=\"sort_by_upload_date\">Podle data nahrání</string>\n    <string name=\"manga_info_collapse\">Méně</string>\n    <string name=\"manga_info_expand\">Více</string>\n    <string name=\"in_library\">V knihovně</string>\n    <string name=\"add_to_library\">Přidat do knihovny</string>\n    <string name=\"unknown_status\">Neznámý stav</string>\n    <string name=\"unknown_author\">Neznámý autor</string>\n    <string name=\"no_pinned_sources\">Nemáš žádné připnuté zdroje</string>\n    <string name=\"local_source_help_guide\">Návod pro lokální zdroj</string>\n    <string name=\"action_global_search_query\">Hledat \\\"%1$s\\\" globálně</string>\n    <string name=\"pinned_sources\">Připnuté</string>\n    <string name=\"last_used_source\">Naposledy použitý</string>\n    <string name=\"tabs_header\">Karty</string>\n    <string name=\"downloaded_chapters\">Stažené kapitoly</string>\n    <string name=\"manga_from_library\">Z knihovny</string>\n    <string name=\"email\">Emailová adresa</string>\n    <string name=\"pref_incognito_mode_summary\">Pozastaví historii čtení</string>\n    <string name=\"pref_incognito_mode\">Anonymní režim</string>\n    <string name=\"label_downloaded_only\">Pouze staženo</string>\n    <string name=\"updated_version\">Aktualizováno na verzi v%1$s</string>\n    <string name=\"check_for_updates\">Zkontrolovat aktualizace</string>\n    <string name=\"licenses\">Open Source licence</string>\n    <string name=\"whats_new\">Co je nového</string>\n    <string name=\"website\">Webová stránka</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Nelze otevřít nastavení zařízení</string>\n    <string name=\"battery_optimization_disabled\">Optimalizace je již vypnuta</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Pomáhá s aktualizacemi knihovny a záloh na pozadí</string>\n    <string name=\"pref_disable_battery_optimization\">Vypnout optimalizaci baterie</string>\n    <string name=\"pref_dump_crash_logs_summary\">Uloží chybové protokoly do souboru pro sdílení s vývojáři</string>\n    <string name=\"pref_dump_crash_logs\">Sdílet protokoly o selhání</string>\n    <string name=\"pref_refresh_library_covers\">Obnovit přebaly v knihovně</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"requires_app_restart\">Pro projevení je nutný restart aplikace</string>\n    <string name=\"pref_dns_over_https\">DNS přes HTTPS (DoH)</string>\n    <string name=\"label_network\">Síť</string>\n    <string name=\"restoring_backup_canceled\">Obnova zrušena</string>\n    <string name=\"restoring_backup_error\">Obnova ze zálohy selhala</string>\n    <string name=\"restore_in_progress\">Obnovení již probíhá</string>\n    <string name=\"creating_backup_error\">Zálohování selhalo</string>\n    <string name=\"backup_in_progress\">Zálohování již probíhá</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d s</string>\n    <string name=\"backup_restore_content_full\">Budeš poté muset doinstalovat jakékoliv chybějící rozšíření a přihlásit se do sledovacích služeb pro jejich použití.</string>\n    <string name=\"backup_restore_missing_trackers\">Sledovače, ve kterých nejsi přihlášený/á:</string>\n    <string name=\"backup_restore_missing_sources\">Chybějící zdroje:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Záloha neobsahuje žádné položky knihovny.</string>\n    <string name=\"invalid_backup_file\">Neplatný soubor se zálohou:</string>\n    <string name=\"tracking_info\">Jednosměrná synchronizace pro aktualizaci počtu přečtených kapitol v externích sledovacích službách. Nastavení sledování pro každou položku je možné z jejich tlačítka sledování.</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Povolení mazání kapitol se záložkami</string>\n    <string name=\"pref_category_delete_chapters\">Smazat kapitoly</string>\n    <string name=\"pref_category_reading_mode\">Režim čtení</string>\n    <string name=\"pref_viewer_nav\">Oblasti dotyku</string>\n    <string name=\"nav_zone_next\">Další</string>\n    <string name=\"right_and_left_nav\">Vpravo a Vlevo</string>\n    <string name=\"l_nav\">Ve tvaru písmene L</string>\n    <string name=\"gray_background\">Šedá</string>\n    <string name=\"tapping_inverted_both\">Obě</string>\n    <string name=\"tapping_inverted_vertical\">Vertikální</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontální</string>\n    <string name=\"tapping_inverted_none\">Žádné</string>\n    <string name=\"ext_nsfw_warning\">Zdroje z tohoto rozšíření mohou obsahovat NSFW (18+) obsah</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Kontrolovat dostupnost nových přebalů a detailů při aktualizaci knihovny</string>\n    <string name=\"pref_library_update_refresh_metadata\">Automaticky obnovovat metadata</string>\n    <string name=\"parental_controls_info\">Toto nastavení nemůže zamezit neoficiálním nebo špatně označeným rozšířením v zobrazování NSFW (18+) obsahu v aplikaci.</string>\n    <string name=\"pref_show_nsfw_source\">Zobrazovat v seznamu zdrojů a rozšíření</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) zdroje</string>\n    <string name=\"secure_screen_summary\">Secure screen skryje obsah aplikace při přepínání aplikací a blokuje tvorbu snímků obrazovky</string>\n    <string name=\"secure_screen\">Chráněná obrazovka</string>\n    <string name=\"lock_with_biometrics\">Vyžadovat odemknutí</string>\n    <string name=\"theme_dark\">Tmavý</string>\n    <string name=\"theme_light\">Světlý</string>\n    <string name=\"pref_category_theme\">Vzhled</string>\n    <string name=\"action_move_to_top\">Přesunout nahoru</string>\n    <string name=\"action_desc\">Sestupně</string>\n    <string name=\"action_asc\">Vzestupně</string>\n    <string name=\"action_order_by_chapter_number\">Podle čísel kapitol</string>\n    <string name=\"action_order_by_upload_date\">Podle data nahrání</string>\n    <string name=\"action_unpin\">Odepnout</string>\n    <string name=\"action_pin\">Připnout</string>\n    <string name=\"action_disable\">Zakázat</string>\n    <string name=\"action_display_show_number_of_items\">Zobrazovat počet položek</string>\n    <string name=\"action_start\">Začít</string>\n    <string name=\"channel_ext_updates\">Aktualizace rozšíření</string>\n    <string name=\"channel_new_chapters\">Aktualizace kapitol</string>\n    <string name=\"channel_errors\">Chyby</string>\n    <string name=\"channel_complete\">Dokončeno</string>\n    <string name=\"channel_progress\">Postup</string>\n    <string name=\"chapter_settings_updated\">Výchozí nastavení kapitol aktualizováno</string>\n    <string name=\"information_webview_outdated\">Prosím aktualizujte aplikaci WebView pro lepší kompatibilitu</string>\n    <string name=\"information_webview_required\">Je nutné mít nainstalovanou aplikaci WebView pro správné fungování aplikace</string>\n    <string name=\"information_cloudflare_bypass_failure\">Nastala chyba při obcházení služby Cloudflare</string>\n    <string name=\"notification_chapters_multiple\">Kapitoly %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Kapitola %1$s a %2$d dalších</string>\n    <string name=\"notification_chapters_single\">Kapitola %1$s</string>\n    <string name=\"download_insufficient_space\">Nelze stáhnout kapitoly kvůli nedostatku místa</string>\n    <string name=\"migration_help_guide\">Návod k přesunu zdrojů</string>\n    <string name=\"clear_history_confirmation\">Jste si jistý/á? Všechna historie bude navždy ztracena.</string>\n    <string name=\"pref_clear_history\">Vymazat historii</string>\n    <string name=\"clear_history_completed\">Historie vymazána</string>\n    <string name=\"recent_manga_time\">Kap. %1$s - %2$s</string>\n    <string name=\"updating_library\">Aktualizuji knihovnu</string>\n    <string name=\"loader_not_implemented_error\">Zdroj nenalezen</string>\n    <string name=\"page_list_empty_error\">Žádné stránky nenalezeny</string>\n    <string name=\"myanimelist_relogin\">Prosím přihlašte se do MAL znovu</string>\n    <string name=\"track_finished_reading_date\">Datum dokončení čtení</string>\n    <string name=\"track_started_reading_date\">Datum zahájení čtení</string>\n    <string name=\"pref_always_show_chapter_transition\">Vždy zobrazovat přechod mezi kapitolami</string>\n    <string name=\"kindlish_nav\">Podobné Kindlu</string>\n    <string name=\"action_move_to_bottom\">Přesunout dolů</string>\n    <string name=\"action_cancel_all\">Zrušit vše</string>\n    <string name=\"action_display_comfortable_grid\">Pohodlná mřížka</string>\n    <string name=\"action_migrate\">Přesunout</string>\n    <string name=\"action_disable_all\">Zakázat vše</string>\n    <string name=\"action_enable_all\">Povolit vše</string>\n    <string name=\"action_search_settings\">Nastavení vyhledávání</string>\n    <string name=\"action_sort_date_added\">Datum přidání</string>\n    <string name=\"action_filter_tracked\">Sledováno</string>\n    <string name=\"viewer\">Režim čtení</string>\n    <string name=\"pref_show_reading_mode\">Ukazovat režim čtení</string>\n    <string name=\"pref_category_for_this_series\">Pro tuto sérii</string>\n    <string name=\"share_page_info\">%1$s: %2$s, strana %3$d</string>\n    <string name=\"also_set_chapter_settings_for_library\">Také nastavit pro všechny položky v mé knihovně</string>\n    <string name=\"pref_category_reading\">Čtení</string>\n    <string name=\"pref_show_reading_mode_summary\">Při otevření čtečky krátce zobrazí aktuální režim</string>\n    <string name=\"ext_updates_pending\">Čekajících aktualizací</string>\n    <string name=\"file_picker_error\">Nebyla nalezena žádná aplikace pro výběr souborů</string>\n    <string name=\"downloaded_only_summary\">Filtruje všechnu položky ve vaší knihovně</string>\n    <string name=\"pref_download_new_categories_details\">Položky ve vynechaných kategoriích nebudou staženy, i kdyby byly také v zahrnutých kategoriích.</string>\n    <string name=\"pref_category_auto_download\">Automatické stahování</string>\n    <string name=\"pref_webtoon_side_padding\">Boční odsazení</string>\n    <string name=\"pref_skip_filtered_chapters\">Přeskakovat filtrované kapitoly</string>\n    <string name=\"pref_cutout_short\">Zobrazovat obsah v oblasti výřezu displeje</string>\n    <string name=\"pref_dual_page_invert_summary\">Pokud umístění rozdělených širokých stránek neodpovídá směru čtení</string>\n    <string name=\"pref_dual_page_invert\">Invertovat umístění rozdělené stránky</string>\n    <string name=\"pref_show_navigation_mode\">Zobrazit překrytí oblastí dotyku</string>\n    <string name=\"exclude\">Vynechat: %s</string>\n    <string name=\"include\">Zahrnout: %s</string>\n    <string name=\"none\">Žádné</string>\n    <string name=\"pref_library_update_categories_details\">Položky ve vynechaných kategoriích nebudou aktualizovány, i kdyby byly také v zahrnutých kategoriích.</string>\n    <string name=\"pref_category_display\">Zobrazení</string>\n    <string name=\"action_display_show_tabs\">Zobrazovat karty kategorií</string>\n    <string name=\"update_check_eol\">Tato verze systému Android již není podporována</string>\n    <string name=\"clipboard_copy_error\">Kopírování do schránky se nezdařilo</string>\n    <string name=\"vertical_plus_viewer\">Dlouhý pruh s mezerami</string>\n    <string name=\"edge_nav\">Okraj</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invertovat oblasti dotyku</string>\n    <string name=\"pref_dual_page_split\">Rozdělit široké stránky</string>\n    <string name=\"pref_show_navigation_mode_summary\">Krátce zobrazit, když je čtečka otevřena</string>\n    <string name=\"theme_system\">Systém</string>\n    <string name=\"action_show_errors\">Klepněte pro zobrazení podrobností</string>\n    <string name=\"action_sort_chapter_fetch_date\">Datum načtení kapitoly</string>\n    <string name=\"rotation_landscape\">Na šířku</string>\n    <string name=\"rotation_portrait\">Na výšku</string>\n    <string name=\"rotation_type\">Otáčení</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Vytváří složky podle názvu položky</string>\n    <string name=\"pref_create_folder_per_manga\">Uložit stránky do samostatných složek</string>\n    <string name=\"pref_reader_actions\">Akce</string>\n    <string name=\"nav_zone_right\">Vpravo</string>\n    <string name=\"nav_zone_left\">Vlevo</string>\n    <string name=\"nav_zone_prev\">Předchozí</string>\n    <string name=\"notification_incognito_text\">Zakázat anonymní režim</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"pref_grayscale\">Odstíny šedé</string>\n    <string name=\"cancel_all_for_series\">Zrušit vše pro tuto sérii</string>\n    <string name=\"error_no_match\">Žádná shoda nenalezena</string>\n    <string name=\"source_unsupported\">Zdroj není podporován</string>\n    <string name=\"unread\">Nepřečteno</string>\n    <string name=\"date\">Datum</string>\n    <string name=\"local_filter_order_by\">Seřadit podle</string>\n    <string name=\"local_invalid_format\">Neplatný formát kapitoly</string>\n    <string name=\"chapter_not_found\">Kapitola nenalezena</string>\n    <string name=\"restrictions\">Omezení: %s</string>\n    <string name=\"action_display_local_badge\">Lokální zdroj</string>\n    <string name=\"error_sharing_cover\">Při sdílení přebalu došlo k chybě</string>\n    <string name=\"error_saving_cover\">Při ukládání přebalu došlo k chybě</string>\n    <string name=\"cover_saved\">Přebal uložen</string>\n    <string name=\"manga_cover\">Přebal</string>\n    <string name=\"off\">Vypnuto</string>\n    <string name=\"on\">Zapnuto</string>\n    <string name=\"categorized_display_settings\">Nastavení řazení pro jednotlivé kategorie</string>\n    <string name=\"information_empty_category_dialog\">Nemáte žádné kategorie.</string>\n    <string name=\"action_start_downloading_now\">Začít stahovat nyní</string>\n    <string name=\"about_dont_kill_my_app\">Někteří výrobci používají další omezení aplikací, která vypíná služby na pozadí. Na této webové stránce najdete další informace o tom, jak to opravit.</string>\n    <string name=\"restore_miui_warning\">Pokud je MIUI optimalizace vypnutá, zálohování/obnovování nemusí fungovat správně.</string>\n    <string name=\"enhanced_tracking_info\">Poskytují rozšířené funkce pro konkrétní zdroje. Záznamy jsou po přidání do knihovny automaticky sledovány.</string>\n    <string name=\"enhanced_services\">Vylepšené sledovače</string>\n    <string name=\"tracking_guide\">Návod ke sledování</string>\n    <string name=\"pref_dark_theme_pure_black\">Čistě černý tmavý režim</string>\n    <string name=\"theme_yotsuba\">Jotsuba</string>\n    <string name=\"theme_yinyang\">Jin a Jang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Jahodové Daiquiri</string>\n    <string name=\"theme_midnightdusk\">Půlnoční Soumrak</string>\n    <string name=\"theme_greenapple\">Zelené Jablko</string>\n    <string name=\"theme_monet\">Dynamické</string>\n    <string name=\"pref_app_theme\">Motiv aplikace</string>\n    <string name=\"label_background_activity\">Činnost na pozadí</string>\n    <string name=\"pref_hide_threshold\">Citlivost pro skrytí menu při posouvání</string>\n    <string name=\"pref_lowest\">Nejnižší</string>\n    <string name=\"pref_low\">Nízké</string>\n    <string name=\"pref_high\">Vysoké</string>\n    <string name=\"pref_highest\">Nejvyšší</string>\n    <string name=\"getting_started_guide\">Příručka Začínáme</string>\n    <string name=\"pref_tablet_ui_mode\">Uživatelské rozhraní tabletu</string>\n    <string name=\"action_track\">Sledovat</string>\n    <string name=\"relative_time_today\">Dnes</string>\n    <string name=\"theme_tealturquoise\">Modrozelená a Tyrkysová</string>\n    <string name=\"pref_category_appearance\">Vzhled</string>\n    <string name=\"confirm_lock_change\">Potvrďte změnu ověřením</string>\n    <string name=\"label_default\">Výchozí</string>\n    <string name=\"help_translate\">Pomozte s překladem</string>\n    <string name=\"pref_remove_exclude_categories\">Vyloučené kategorie</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Nainstalujte a spusťte Shizuku, abyste jej mohli používat jako instalátor rozšíření.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku neběží</string>\n    <string name=\"ext_installer_legacy\">Původní</string>\n    <string name=\"ext_installer_pref\">Instalátor</string>\n    <string name=\"ext_install_service_notif\">Instaluji rozšíření…</string>\n    <string name=\"ext_app_info\">Info o Aplikaci</string>\n    <string name=\"pref_inverted_colors\">Invertované</string>\n    <string name=\"label_warning\">Varování</string>\n    <string name=\"backup_info\">Kopie záloh byste také měli uchovat na více místech. Zálohy mohou obsahovat citlivé informace, včetně jakýchkoliv uložených hesel; při sdílení buďte opatrní.</string>\n    <string name=\"action_sort_count\">Celkem položek</string>\n    <string name=\"action_select_inverse\">Vybrat obráceně</string>\n    <string name=\"action_display_language_badge\">Jazyk</string>\n    <string name=\"update_72hour\">Každé 3 dny</string>\n    <string name=\"connected_to_wifi\">Jen na Wi-Fi</string>\n    <string name=\"pref_verbose_logging\">Podrobné protokolování</string>\n    <string name=\"download_queue_size_warning\">Varování: hromadné stahování může vést k tomu, že zdroje zpomalí a/nebo zablokují Mihon. Klepnutím se dozvíte více.</string>\n    <string name=\"ext_update_all\">Aktualizovat vše</string>\n    <string name=\"pref_verbose_logging_summary\">Vypisovat podrobné informace do systémového protokolu (sníží výkon aplikace)</string>\n    <string name=\"channel_app_updates\">Aktualizace aplikace</string>\n    <string name=\"notification_size_warning\">Varování: velké aktualizace poškozují zdroje a můžou vést k pomalejším aktualizacím a zvýšenému využití baterie. Klepnutím se dozvíte více.</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Vymazat mezipaměť kapitol při spuštění aplikace</string>\n    <string name=\"extension_api_error\">Chyba v získání seznamu rozšíření</string>\n    <string name=\"privacy_policy\">Zásady ochrany osobních údajů</string>\n    <string name=\"clear_database_source_item_count\">%1$d položek v databázi co nejsou v knihovně</string>\n    <string name=\"pref_update_only_completely_read\">Přeskočit položky s nepřečtenými kapitolami</string>\n    <string name=\"database_clean\">Nic k vyčištění</string>\n    <string name=\"save_chapter_as_cbz\">Uložit jako CBZ archiv</string>\n    <string name=\"library_errors_help\">Nápovědu k tomu, jak opravit chyby při aktualizaci knihovny, viz %1$s</string>\n    <string name=\"publishing_finished\">Zveřejnění dokončeno</string>\n    <string name=\"cancelled\">Zrušeno</string>\n    <string name=\"action_show_manga\">Zobrazit položku</string>\n    <string name=\"action_display_cover_only_grid\">Mřížka jen s přebaly</string>\n    <string name=\"pref_update_only_started\">Přeskočit nerozečtené položky</string>\n    <string name=\"notification_update_error\">%1$d aktualizace(í) selhalo</string>\n    <string name=\"on_hiatus\">Má pauzu</string>\n    <string name=\"skipped_reason_not_caught_up\">Přeskočeno, protože obsahuje nepřečtené kapitoly</string>\n    <string name=\"action_move_to_top_all_for_series\">Přesunout sérii na začátek</string>\n    <string name=\"learn_more\">Klepnutím se dozvíte více</string>\n    <string name=\"skipped_reason_not_started\">Přeskočeno, protože nebyly přečteny žádné kapitoly</string>\n    <string name=\"skipped_reason_completed\">Přeskočeno, protože série je dokončena</string>\n    <string name=\"disabled_nav\">Zakázáno</string>\n    <string name=\"empty_backup_error\">Žádné záznamy v knihovně k zálohování</string>\n    <string name=\"source_empty_screen\">Žádný zdroj nenalezen</string>\n    <string name=\"pref_landscape_zoom\">Automatické přiblížení širokých obrázků</string>\n    <string name=\"source_filter_empty_screen\">Žádný nainstalovaný zdroj nenalezen</string>\n    <string name=\"update_check_open\">Otevřít na GitHubu</string>\n    <string name=\"error_saving_picture\">Chyba při ukládání obrázku</string>\n    <string name=\"action_close\">Zavřít</string>\n    <string name=\"rotation_reverse_portrait\">Obrácené na výšku</string>\n    <string name=\"pref_clear_webview_data\">Vyčistit data WebView</string>\n    <string name=\"webview_data_deleted\">Data z WebView vyčištěna</string>\n    <string name=\"reading_list\">Seznam četby</string>\n    <string name=\"wish_list\">Seznam přání</string>\n    <string name=\"network_not_metered\">Pouze na neměřené síti</string>\n    <string name=\"pref_reset_viewer_flags_success\">Všechna nastavení čtečky byla resetována</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Resetuje režim čtení a orientaci všech sérií</string>\n    <string name=\"pref_reset_viewer_flags\">Resetování nastavení čtečky pro jednotlivé série</string>\n    <string name=\"complete_list\">Seznam dokončených</string>\n    <string name=\"on_hold_list\">Seznam pozastavených</string>\n    <string name=\"unfinished_list\">Seznam nedokončených</string>\n    <string name=\"ext_info_language\">Jazyk</string>\n    <string name=\"ext_info_age_rating\">Věkové hodnocení</string>\n    <string name=\"ext_info_version\">Verze</string>\n    <string name=\"split_tall_images_summary\">Zlepšuje výkon čtečky</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nastavení čtečky se nepodařilo resetovat</string>\n    <string name=\"empty_screen\">No, tohle je trapné</string>\n    <string name=\"download_notifier_split_page_not_found\">Stránka %d nebyla při rozdělení nalezena</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nepodařilo se najít cestu k souboru stránky %d</string>\n    <string name=\"pref_navigate_pan\">Posunutí širokých snímků</string>\n    <string name=\"action_sort_unread_count\">Počet nepřečtených</string>\n    <string name=\"action_sort_last_manga_update\">Poslední kontrola aktualizace</string>\n    <string name=\"cant_open_last_read_chapter\">Nelze otevřít poslední přečtenou kapitolu</string>\n    <string name=\"custom_cover\">Vlastní obal</string>\n    <string name=\"not_installed\">Nenainstalováno</string>\n    <string name=\"pref_app_language\">Jazyk aplikace</string>\n    <string name=\"description_placeholder\">Bez popisu</string>\n    <string name=\"theme_lavender\">Levandule</string>\n    <string name=\"delete_category_confirmation\">Přejete si smazat kategorii \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Smazat kategorii</string>\n    <string name=\"internal_error\">InternalError: Zkontrolujte záznamy pádu pro další informace</string>\n    <string name=\"pref_reset_user_agent_string\">Obnovit výchozí řetězec pro user agent</string>\n    <string name=\"pref_user_agent_string\">Výchozí řetězec pro user agent</string>\n    <string name=\"action_remove_everything\">Odstranit vše</string>\n    <string name=\"appwidget_unavailable_locked\">Widget není k dispozici, když je povolen zámek aplikace</string>\n    <string name=\"appwidget_updates_description\">Podívejte se na své nedávno aktualizované záznamy v knihovně</string>\n    <string name=\"update_already_running\">Aktualizace již probíhá</string>\n    <string name=\"error_user_agent_string_blank\">Řetězec uživatelského agenta nemůže být prázdný</string>\n    <string name=\"theme_tidalwave\">Přílivová Vlna</string>\n    <string name=\"download_ahead\">Stáhování dopředu</string>\n    <string name=\"auto_download_while_reading\">Automatické stahování při čtení</string>\n    <string name=\"download_ahead_info\">Funguje pouze v případě, že aktuální kapitola + následující kapitola jsou již staženy.</string>\n    <string name=\"are_you_sure\">Jste si jistí?</string>\n    <string name=\"remove_manga\">Chystáte se odstranit \\\"%s\\\" ze své knihovny</string>\n    <string name=\"multi_lang\">Více</string>\n    <string name=\"updates_last_update_info\">Poslední aktualizace knihovny: %s</string>\n    <string name=\"popular\">Populární</string>\n    <string name=\"missing_storage_permission\">Nebyla udělena oprávnění k úložišti</string>\n    <string name=\"skipped_reason_not_always_update\">Přeskočeno, protože série nevyžaduje aktualizace</string>\n    <string name=\"action_search_hint\">Vyhledat…</string>\n    <string name=\"pref_reader_summary\">Režim čtení, displej, navigace</string>\n    <string name=\"pref_tracking_summary\">Jednosměrná synchronizace postupu, rozšířená synchronizace</string>\n    <string name=\"pref_appearance_summary\">Téma, formát data a času</string>\n    <string name=\"pref_library_summary\">Kategorie, globální aktualizace, přejetí po kapitole</string>\n    <string name=\"pref_downloads_summary\">Automatické stahování, stahování dopředu</string>\n    <string name=\"pref_browse_summary\">Zdroje, rozšíření, globální vyhledávání</string>\n    <string name=\"pref_security_summary\">Zámek aplikace, zabezpečená obrazovka</string>\n    <string name=\"pref_advanced_summary\">Výpis protokolů selhání, optimalizace baterie</string>\n    <string name=\"crash_screen_description\">%s narazil na neočekávanou chybu. Doporučujeme vám sdílet protokoly o selhání a poté je sdílet v našem kanálu podpory na Discordu.</string>\n    <string name=\"crash_screen_restart_application\">Restartujte aplikaci</string>\n    <string name=\"pref_backup_summary\">Ruční a automatické zálohování, místo v úložišti</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"invalid_location\">Neplatné umístění: %s</string>\n    <string name=\"unknown_title\">Neznámý titul</string>\n    <string name=\"error_user_agent_string_invalid\">Neplatný řetězec uživatelského agenta</string>\n    <string name=\"updates_last_update_info_just_now\">Právě teď</string>\n    <string name=\"download_notifier_cache_renewal\">Kontrola stahování</string>\n    <string name=\"information_no_entries_found\">V této kategorii nebyly nalezeny žádné položky</string>\n    <string name=\"action_open_random_manga\">Otevřít náhodnou položku</string>\n    <string name=\"fdroid_warning\">F-Droid sestavení nejsou oficiálně podporovány.\n\\nKlepnutím zobrazíte další informace.</string>\n    <string name=\"action_display_show_continue_reading_button\">Tlačítko Pokračovat ve čtení</string>\n    <string name=\"track_remove_date_conf_title\">Odstranit datum?</string>\n    <string name=\"track_remove_finish_date_conf_text\">Tím se odstraní dříve vybrané datum ukončení z %s</string>\n    <string name=\"track_remove_start_date_conf_text\">Tím se odstraní dříve vybrané datum zahájení z %s</string>\n    <string name=\"pref_invalidate_download_cache\">Znovu prohledat stažené</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Vynutit aplikaci znovu zkontrolovat stažené kapitoly</string>\n    <string name=\"label_started\">Započato</string>\n    <string name=\"label_local\">Lokální</string>\n    <string name=\"label_downloaded\">Staženo</string>\n    <string name=\"label_completed_titles\">Dokončené položky</string>\n    <string name=\"label_titles_in_global_update\">V globální aktualizaci</string>\n    <string name=\"label_total_chapters\">Celkem</string>\n    <string name=\"label_read_chapters\">Přečteno</string>\n    <string name=\"label_tracker_section\">Sledovače</string>\n    <string name=\"label_tracked_titles\">Sledované položky</string>\n    <string name=\"label_mean_score\">Průměrné skóre</string>\n    <string name=\"label_used\">Použité</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"label_titles_section\">Položky</string>\n    <string name=\"label_stats\">Statistiky</string>\n    <string name=\"label_overview_section\">Přehled</string>\n    <string name=\"label_read_duration\">Doba čtení</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_not_now\">Teď ne</string>\n    <string name=\"information_no_manga_category\">Kategorie je prázdná</string>\n    <string name=\"pref_library_update_show_tab_badge\">Zobrazit počet nepřečtených kapitol na ikoně Aktualizace</string>\n    <string name=\"copied_to_clipboard_plain\">Zkopírováno do schránky</string>\n    <string name=\"enhanced_services_not_installed\">K dispozici, ale zdroj není nainstalován: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Přeskakovat duplicitní kapitoly</string>\n    <string name=\"confirm_add_duplicate_manga\">Ve své knihovně máte položku se stejným názvem.\n\\n\n\\nStále si přejete pokračovat?</string>\n    <string name=\"track_error\">%1$s chyba: %2$s</string>\n    <string name=\"information_required_plain\">*vyžadováno</string>\n    <string name=\"pref_hide_in_library_items\">Skrýt položky, které jsou již v knihovně</string>\n    <string name=\"action_copy_to_clipboard\">Zkopírovat do schránky</string>\n    <string name=\"action_update_category\">Aktualizovat kategorii</string>\n    <string name=\"split_tall_images\">Rozdělit vysoké obrázky</string>\n    <string name=\"overlay_header\">Překrytí</string>\n    <string name=\"pref_page_rotate_invert\">Překlopení orientace otočených širokých stránek</string>\n    <string name=\"pref_page_rotate\">Otočení širokých stránek tak, aby se vešly</string>\n    <string name=\"pref_debug_info\">Ladící informace</string>\n    <string name=\"pref_chapter_swipe_end\">Přejetí prstem doprava</string>\n    <string name=\"pref_chapter_swipe_start\">Přejetí prstem doleva</string>\n    <string name=\"pref_double_tap_zoom\">Přiblížení dvojitým klepnutím</string>\n    <string name=\"action_filter_interval_custom\">Přizpůsobený interval aktualizace</string>\n    <string name=\"action_sort_next_updated\">Další očekávaná aktualizace</string>\n    <string name=\"manga_display_interval_title\">Odhadovat každý</string>\n    <string name=\"manga_display_modified_interval_title\">Nastavit aktualizaci každých</string>\n    <string name=\"action_set_interval\">Nastavit interval</string>\n    <string name=\"pref_update_only_in_release_period\">Předpovědět čas příštího vydání</string>\n    <string name=\"intervals_header\">Intervaly</string>\n    <string name=\"skipped_reason_not_in_release_period\">Přeskočeno, protože dnes nebylo očekáváno žádné vydání</string>\n    <string name=\"track_delete_text\">Tím se lokálně odstraní sledování.</string>\n    <string name=\"track_delete_remote_text\">Odebrat také z %s</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_title\">Odebrat sledování %s?</string>\n    <string name=\"delete_downloaded\">Odstranit stažené</string>\n    <string name=\"has_results\">Má výsledky</string>\n    <string name=\"syncing_library\">Synchronizace knihovny</string>\n    <string name=\"library_sync_complete\">Synchronizace knihovny dokončena</string>\n    <string name=\"track_activity_name\">Přihlášení sledovače</string>\n    <string name=\"information_cloudflare_help\">Klepněte zde pro pomoc s Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Index stažených zneplatněn</string>\n    <string name=\"create_backup_file_error\">Nelze vytvořit soubor zálohy</string>\n    <string name=\"exception_offline\">Bez připojení k internetu</string>\n    <string name=\"exception_unknown_host\">Nelze dosáhnout %s</string>\n    <string name=\"exception_http\">HTTP %d, zkontrolovat web v WebView</string>\n    <string name=\"unlock_app_title\">Odemknout %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Přesunout sérii na konec</string>\n    <string name=\"pref_relative_format\">Relativní časová razítka</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" namísto \\\"%2$s\\\"</string>\n    <string name=\"app_settings\">Nastavení aplikace</string>\n    <string name=\"source_settings\">Nastavení zdroje</string>\n    <string name=\"notification_updating_progress\">Aktualizace knihovny... (%s)</string>\n    <string name=\"action_create\">Vytvořit</string>\n    <string name=\"relative_time_span_never\">Nikdy</string>\n    <string name=\"pref_flash_page_summ\">Snižuje vytváření artefaktů na e-ink displejích</string>\n    <string name=\"action_apply\">Použít</string>\n    <string name=\"action_revert_to_default\">Vrátit na výchozí</string>\n    <string name=\"last_auto_backup_info\">Poslední automatická záloha: %s</string>\n    <string name=\"no_scanlators_found\">Žádní překladatelé nenalezeni</string>\n    <string name=\"scanlator\">Překladatel</string>\n    <string name=\"pref_flash_page\">Bliknout při změně stránky</string>\n    <string name=\"pref_storage_usage\">Využití úložiště</string>\n    <string name=\"label_data_storage\">Data a úložiště</string>\n    <string name=\"file_null_uri_error\">Nevybrán žádný soubor</string>\n    <string name=\"exclude_scanlators\">Vynechat překladatele</string>\n    <string name=\"onboarding_storage_action_select\">Vybrat složku</string>\n    <string name=\"onboarding_heading\">Vítejte!</string>\n    <string name=\"action_menu_overflow_description\">Více možností</string>\n    <string name=\"onboarding_action_skip\">Přeskočit</string>\n    <string name=\"onboarding_action_next\">Další</string>\n    <string name=\"pref_storage_location\">Umístění úložiště</string>\n    <string name=\"pref_onboarding_guide\">Nástupní průvodce</string>\n    <string name=\"pref_storage_location_info\">Používá se pro automatické zálohování, stahování kapitol a lokální zdroj.</string>\n    <string name=\"onboarding_guides_new_user\">Jste v %s noví? Doporučujeme se podívat se na průvodce pro začátečníky.</string>\n    <string name=\"onboarding_action_finish\">Začínáme</string>\n    <string name=\"onboarding_storage_selection_required\">Složka musí být vybrána</string>\n    <string name=\"onboarding_permission_notifications\">Povolení oznámení</string>\n    <string name=\"onboarding_permission_install_apps\">Povolení stahovat aplikace</string>\n    <string name=\"available_disk_space_info\">Dostupné: %1$s / Celkem: %2$s</string>\n    <string name=\"onboarding_guides_returning_user\">Přeinstalováváte %s?</string>\n    <string name=\"selected\">Vybráno</string>\n    <string name=\"not_selected\">Nevybráno</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Vyhněte se přerušením dlouhých aktualizací knihovny, stahování a obnovení záloh.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Využití baterie na pozadí</string>\n    <string name=\"onboarding_permission_install_apps_description\">K nainstalování rozšíření zdrojů.</string>\n    <string name=\"action_bar_up_description\">Navigovat nahoru</string>\n    <string name=\"onboarding_description\">Pojďme nastavit nějaké věci. Vždy můžete tyto změny později změnit v nastavení.</string>\n    <string name=\"action_sort_tracker_score\">Skóre sledovače</string>\n    <string name=\"no_location_set\">Není nastaveno umístění úložiště</string>\n    <string name=\"onboarding_permission_notifications_description\">Buďte upozorněni na aktualizaci knihovny atd.</string>\n    <string name=\"ext_permission_install_apps_warning\">K instalaci rozšíření je nutné povolení. Klepněte zde pro udělení povolení.</string>\n    <string name=\"private_settings\">Zahrnout citlivé nastavení (např. přihlašovací tokeny sledovačů)</string>\n    <string name=\"onboarding_permission_action_grant\">Udělit</string>\n    <string name=\"onboarding_storage_info\">Vyberte složku, kde %1$s bude ukládat stahování kapitol, zálohy a další.\n\\n\n\\nJe doporučena vyhrazená složka.\n\\n\n\\nVybraná složka: %2$s</string>\n    <string name=\"invalid_backup_file_error\">Úplná chyba:</string>\n    <string name=\"pref_library_update_smart_update\">Chytrá aktualizace</string>\n    <string name=\"action_add_repo_message\">Přidat další repozitáře do Mihon. Měli by to být URL končící \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">Tento repozitář již existuje!</string>\n    <string name=\"action_delete_repo\">Odstranit repozitář</string>\n    <string name=\"invalid_repo_name\">Neplatná URL repozitáře</string>\n    <string name=\"delete_repo_confirmation\">Přejete si odstranit repozitář \\\"%s\\\"?</string>\n    <string name=\"manga_interval_expected_update\">Předpoklad vydání nových kapitol za zhruba %1$s, kontrola co %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Vlastní frekvence aktualizace:</string>\n    <string name=\"label_extension_repos\">Repozitáře rozšíření</string>\n    <string name=\"label_add_repo_input\">URL repozitáře</string>\n    <string name=\"information_empty_repos\">Nemáte nastaveny žádné repozitáře.</string>\n    <string name=\"onboarding_storage_help_action\">Průvodce uložištěm</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"action_add_repo\">Přidat repozitář</string>\n    <string name=\"ext_revoke_trust\">Zrušit důvěryhodná neznámá rozšíření</string>\n    <string name=\"action_open_repo\">Open source repozitář</string>\n    <string name=\"manga_interval_expected_update_soon\">Brzy</string>\n    <string name=\"onboarding_storage_help_info\">Aktualizujete ze starší verze a nevíte, co vybrat? Další informace naleznete v průvodci úložištěm.</string>\n    <string name=\"action_add_anyway\">Přesto přidat</string>\n    <string name=\"action_migrate_duplicate\">Přesunout existující záznam</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Zakázat oddálení</string>\n    <string name=\"action_replace_repo\">Nahradit</string>\n    <string name=\"action_replace_repo_title\">Otisk podepisovacího klíče již existuje</string>\n    <string name=\"action_replace_repo_message\">Repozitář %1$s má stejný otisk podepisovacího klíče jako %2$s\n\\nPokud to tak je správně, bude%2$s nahrazen, v opačném případě kontaktujte správce repozitáře.</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_style_white\">Bílou</string>\n    <string name=\"manga_interval_expected_update_null\">Tato manga je buďto dokončená, nebo nemá přibližné datum vydání.</string>\n    <string name=\"label_upcoming\">Nadcházející</string>\n    <string name=\"pref_flash_duration\">Délka bliknutí</string>\n    <string name=\"pref_flash_page_interval\">Bliknout každých</string>\n    <string name=\"pref_flash_with\">Bliknout</string>\n    <string name=\"pref_flash_style_black\">Černou</string>\n    <string name=\"pref_flash_style_white_black\">Bílou a Černou</string>\n    <string name=\"pref_display_profile\">Vlastní profil zobrazení</string>\n    <string name=\"action_view_upcoming\">Zobrazit nadcházející aktualizace</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Nepodařilo se získat trvalý přístup ke složce. Aplikace se může chovat zvláštně.</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aktualizovat postup po přečtení</string>\n    <string name=\"action_copy_link\">Zkopírovat odkaz</string>\n    <string name=\"action_sort_random\">Náhodně</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Pošle anonymizovaná chybová hlášení vývojářům.</string>\n    <string name=\"onboarding_permission_analytics_description\">Pošle anonymizované údaje o používání pro vylepšení aplikace.</string>\n    <string name=\"pref_security\">Zabezpečení</string>\n    <string name=\"pref_firebase\">Analytika a záznamy o pádech</string>\n    <string name=\"firebase_summary\">Odesílání záznamů o pádech a analytických dat nám umožní identifikovat a opravit problémy, zlepšit výkon a přizpůsobit budoucí aktualizace vašim potřebám</string>\n    <string name=\"onboarding_permission_analytics\">Povolit analytiku</string>\n    <string name=\"add_repo_confirmation\">Chcete přidat repozitář \\\"%s\\\"?</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Má dopad na výkon. Povolte pouze pokud snížení limitu bitmapy nespraví problémy s prázdnými obrázky</string>\n    <string name=\"extensionRepo_settings\">Repozitáře rozšíření</string>\n    <string name=\"ext_remove\">Odstranit</string>\n    <string name=\"ext_confirm_remove\">Odstranit rozšíření?</string>\n    <string name=\"remove_private_extension_message\">Opravdu chcete odstranit rozšíření \\\"%s\\\"?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Přeskočit stahování duplicitních přečtených kapitol</string>\n    <string name=\"invalid_backup_file_json\">Záloha do JSONu není podporována</string>\n    <string name=\"invalid_backup_file_unknown\">Soubor se zálohou je poškozen</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Vlastní limit hardwarových bitmap</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Výchozí (%d)</string>\n    <string name=\"onboarding_permission_crashlytics\">Posílat chybová hlášení</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Jestliže čtenář načte prázdnou stránku, postupně snižuj prahovou hodnotu.\\nVybráno: %s</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pozastavit historii čtení pro rozšíření</string>\n    <string name=\"trackers_updated_summary\">Sledovače aktualizovány do kapitoly %d</string>\n    <string name=\"non_library_settings\">Všechny přečtené záznamy</string>\n    <string name=\"confirm_tracker_update\">Aktualizovat sledovače do kapitoly %d?</string>\n    <string name=\"upcoming_calendar_prev\">Předchozí měsíc</string>\n    <string name=\"upcoming_calendar_next\">Následující měsíc</string>\n    <string name=\"upcoming_guide\">Návod k nadcházejícím kapitolám</string>\n    <string name=\"label_auto\">Automaticky</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Označit duplicitní přečtené kapitoly jako přečtené</string>\n    <string name=\"theme_monochrome\">Černobílý</string>\n    <string name=\"author\">Autor</string>\n    <string name=\"artist\">Umělec</string>\n    <string name=\"tracked_privately\">Sledováno soukromě</string>\n    <string name=\"export\">Exportovat</string>\n    <string name=\"library_list\">Seznam knihoven</string>\n    <string name=\"library_exported\">Knihovna byla exportována</string>\n    <string name=\"action_toggle_private_on\">Sledovat soukromě</string>\n    <string name=\"action_toggle_private_off\">Sledovat veřejně</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/cv/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d пухмӑш</item>\n        <item quantity=\"other\">%d пухмӑш</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s минут хыҫҫӑн</item>\n        <item quantity=\"other\">%1$s минут хыҫҫӑн</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s хушши %2$s йӑнӑшпа тӑвӑннӑ</item>\n        <item quantity=\"other\">%1$s хушши %2$s йӑнӑшпа тӑвӑннӑ</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Хушма валли ҫӗнетӳ пур</item>\n        <item quantity=\"other\">%d хушма валли ҫӗнетӳ пур</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">%1$s сыпӑкӗсем тата тепӗр 1</item>\n        <item quantity=\"other\">%1$s сыпӑкӗсем тата тепӗр %2$d</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d ҫӗнӗ сыпӑк</item>\n        <item quantity=\"other\">%1$d ҫӗнӗ сыпӑк</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d хайлав валли</item>\n        <item quantity=\"other\">%d хайлав валли</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s сыпӑк</item>\n        <item quantity=\"other\">%1$s сыпӑк</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s йулчӗ</item>\n        <item quantity=\"other\">%1$s йулчӗ</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d йӗрлев</item>\n        <item quantity=\"other\">%d йӗрлев</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d сыпӑк ҫук</item>\n        <item quantity=\"other\">%d сыпӑк ҫук</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ӗнер</item>\n        <item quantity=\"other\">%1$d кун кайалла</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Тепӗр вуламан сыпӑк</item>\n        <item quantity=\"other\">Тепӗр %d вуламан сыпӑк</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 кун</item>\n        <item quantity=\"other\">%d кун</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s сыпӑк ҫук</item>\n        <item quantity=\"other\">%1$s сыпӑк ҫук</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Тепӗр сыпӑк</item>\n        <item quantity=\"other\">Тепӗр %d сыпӑк</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d усрав</item>\n        <item quantity=\"other\">%d усрав</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/cv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga\">Вулавӑшри хайлавсем</string>\n    <string name=\"used_cache\">Усӑ курнӑ: %1$s</string>\n    <string name=\"cookies_cleared\">Куккисем катертнӗ</string>\n    <string name=\"pref_clear_cookies\">Кукки тасат</string>\n    <string name=\"label_network\">Тетел</string>\n    <string name=\"restore_duration\">%02d минут та %02d ҫеккунт</string>\n    <string name=\"services\">Сервиссем</string>\n    <string name=\"pref_download_new\">Ҫӗнӗ сыпӑксене тийесе илмелле</string>\n    <string name=\"last_read_chapter\">Юлашки вуланӑ сыпăк</string>\n    <string name=\"disabled\">Сӳнтернӗ</string>\n    <string name=\"pref_remove_after_read\">Вуланӑ хыҫҫӑн</string>\n    <string name=\"pref_category_reading\">Вулани</string>\n    <string name=\"color_filter_b_value\">Кӑвак</string>\n    <string name=\"color_filter_g_value\">Симӗс</string>\n    <string name=\"color_filter_r_value\">Хӗрлӗ</string>\n    <string name=\"double_tap_anim_speed_fast\">Хӑвӑрт</string>\n    <string name=\"double_tap_anim_speed_normal\">Йӗркеллӗ</string>\n    <string name=\"zoom_start_center\">Варринчен</string>\n    <string name=\"zoom_start_right\">Сылтӑмран</string>\n    <string name=\"zoom_start_left\">Сулахайран</string>\n    <string name=\"zoom_start_automatic\">Хӑй-хальлӗн</string>\n    <string name=\"scale_type_fit_height\">Ҫулӗшпе</string>\n    <string name=\"scale_type_fit_width\">Сарлакăшӗпе</string>\n    <string name=\"black_background\">Хура</string>\n    <string name=\"white_background\">Шурӑ</string>\n    <string name=\"pref_reader_theme\">Ӳкерчĕк хыҫӑн тӗсӗ</string>\n    <string name=\"filter_mode_screen\">Екран</string>\n    <string name=\"filter_mode_multiply\">Хутлани</string>\n    <string name=\"ext_uninstall\">Катерт</string>\n    <string name=\"ext_installed\">Лартнӑ</string>\n    <string name=\"ext_installing\">Лартӑнать</string>\n    <string name=\"ext_downloading\">Тиесе илӗнет</string>\n    <string name=\"ext_install\">Ларт</string>\n    <string name=\"ext_update\">Ҫӗнет</string>\n    <string name=\"all\">Пурне те</string>\n    <string name=\"default_category_summary\">Кашнинчех ыйтмалла</string>\n    <string name=\"charging\">Петтерей тулнӑ чух</string>\n    <string name=\"pref_library_update_restriction\">Хатӗр валли хӑй-хальлӗн ҫӗнетӳ чарӑвӗсем</string>\n    <string name=\"update_weekly\">Кашни ерне</string>\n    <string name=\"update_48hour\">Кашни 2 кун</string>\n    <string name=\"update_24hour\">Кашни кун</string>\n    <string name=\"update_12hour\">Кашни 12 сехет</string>\n    <string name=\"update_6hour\">Кашни 6 сехет</string>\n    <string name=\"pref_library_update_interval\">Ҫӗнетни тӑтӑшлӑхӗ</string>\n    <string name=\"pref_category_library_update\">Пӗтӗмӗшле ҫӗнетӳ</string>\n    <string name=\"pref_category_display\">Кӑтарт</string>\n    <string name=\"secure_screen\">Ыкран сыхлавӗ</string>\n    <string name=\"pref_category_security\">Сыхлав тата вӑрттӑнлӑх</string>\n    <string name=\"pref_manage_notifications\">Систерӳсене ӗнер</string>\n    <string name=\"pref_date_format\">Вӑхӑт хармачӗ</string>\n    <string name=\"theme_dark\">Тӗттӗм</string>\n    <string name=\"theme_light\">Ҫутӑ</string>\n    <string name=\"pref_category_advanced\">Тата</string>\n    <string name=\"pref_category_downloads\">Тийевсем</string>\n    <string name=\"pref_category_library\">Вулавӑш</string>\n    <string name=\"pref_category_general\">Тӗп</string>\n    <string name=\"app_not_available\">Апа кӗме май ҫук</string>\n    <string name=\"action_webview_refresh\">Ҫӗнет</string>\n    <string name=\"action_webview_forward\">Малалла</string>\n    <string name=\"action_webview_back\">Кайалла</string>\n    <string name=\"action_undo\">Пӑрахӑҫла</string>\n    <string name=\"action_save\">Упра</string>\n    <string name=\"action_share\">Пайлаш</string>\n    <string name=\"action_install\">Ларт</string>\n    <string name=\"action_move_to_bottom\">Вӗҫӗ патне куҫ</string>\n    <string name=\"action_move_to_top\">Пуҫӑ патне куҫ</string>\n    <string name=\"action_oldest\">Чи кивви</string>\n    <string name=\"action_newest\">Чи ҫӗнни</string>\n    <string name=\"action_cancel_all\">Пурне те пӑрахӑҫла</string>\n    <string name=\"action_cancel\">Пӑрахӑҫла</string>\n    <string name=\"action_pin\">Ҫаклат</string>\n    <string name=\"action_disable\">Сӳнтер</string>\n    <string name=\"action_display_download_badge\">Тийенӗ сыпӑксен шучӗ</string>\n    <string name=\"action_display_list\">Йат-йыш</string>\n    <string name=\"action_display\">Кӑтарт</string>\n    <string name=\"action_display_mode\">Кӑтарту тытӑмӗ</string>\n    <string name=\"action_open_in_web_view\">WebView-ра уҫ</string>\n    <string name=\"action_open_in_browser\">Тишкерӗшре уҫ</string>\n    <string name=\"action_resume\">Малалла</string>\n    <string name=\"action_start\">Пуҫла</string>\n    <string name=\"action_remove\">Катерт</string>\n    <string name=\"action_retry\">Ҫӗнӗрен</string>\n    <string name=\"action_pause\">Чар</string>\n    <string name=\"action_view_chapters\">Сыпӑксене пӑх</string>\n    <string name=\"action_edit_cover\">Хуплашкана улӑштар</string>\n    <string name=\"action_move_category\">Пухмӑша кӗрт</string>\n    <string name=\"action_rename_category\">Пухмӑш йатне улӑштар</string>\n    <string name=\"action_edit_categories\">Пухмӑшсене улӑштар</string>\n    <string name=\"action_add_category\">Пухмӑша хуш</string>\n    <string name=\"action_add\">Хуш</string>\n    <string name=\"action_mark_previous_as_read\">Умӗнхине вуланӑ пек паллӑ ту</string>\n    <string name=\"action_edit\">Улӑштар</string>\n    <string name=\"action_disable_all\">Пурне те сӳнтер</string>\n    <string name=\"action_enable_all\">Пурне те ҫут</string>\n    <string name=\"action_update_library\">Вулавӑш ҫӗнет</string>\n    <string name=\"action_delete\">Катерт</string>\n    <string name=\"action_remove_bookmark\">Сыпӑк картнине катерт</string>\n    <string name=\"action_bookmark\">Сыпӑк карт</string>\n    <string name=\"action_download\">Тийесе ил</string>\n    <string name=\"action_mark_as_unread\">Вуламан пек паллӑ ту</string>\n    <string name=\"action_mark_as_read\">Вуланӑ пек паллӑ ту</string>\n    <string name=\"action_select_all\">Пурне те суйла</string>\n    <string name=\"action_global_search\">Пур ҫӗрте те шыра</string>\n    <string name=\"action_search\">Шыра</string>\n    <string name=\"action_sort_latest_chapter\">Йулашки сыпӑкпа</string>\n    <string name=\"action_sort_last_read\">Йулашки вуланипе</string>\n    <string name=\"action_sort_total\">Сыпӑк шучӗпе</string>\n    <string name=\"action_sort_alpha\">Сас паллисен йӗркипе</string>\n    <string name=\"action_filter_empty\">Алана катерт</string>\n    <string name=\"action_filter_unread\">Вуламан</string>\n    <string name=\"action_filter_bookmarked\">Картнӑ</string>\n    <string name=\"action_filter\">Ала</string>\n    <string name=\"action_menu\">Менӳ</string>\n    <string name=\"action_settings\">Ӗнерӳ</string>\n    <string name=\"history\">Кун-ҫул</string>\n    <string name=\"chapters\">Сыпӑксем</string>\n    <string name=\"categories\">Пухмӑшсем</string>\n    <string name=\"information_empty_library\">Санӑн вулавӑш пушӑ</string>\n    <string name=\"label_recent_manga\">Кун-ҫул</string>\n    <string name=\"label_download_queue\">Тийев черечӗ</string>\n    <string name=\"name\">Йат</string>\n    <string name=\"download_notifier_no_network\">Тетел ҫыхӑну ҫук</string>\n    <string name=\"download_notifier_text_only_wifi\">Wi-Fi ҫыхӑну ҫук</string>\n    <string name=\"download_notifier_title_error\">Йӑнӑш</string>\n    <string name=\"update_check_notification_update_available\">Ҫӗнӗ версси пур!</string>\n    <string name=\"update_check_notification_download_error\">Тийев йӑнӑшӗ</string>\n    <string name=\"update_check_notification_download_complete\">Тиенсе пӗтрӗ</string>\n    <string name=\"notification_chapters_single\">%1$s-мӗш сыпӑк</string>\n    <string name=\"notification_new_chapters\">Ҫӗнӗ сыпӑксем тупӑнман</string>\n    <string name=\"information_no_recent_manga\">Йулашки вӑхӑтра нимӗн те вуламан</string>\n    <string name=\"information_no_recent\">Пӗр ҫӗнетӳ те ҫук</string>\n    <string name=\"information_no_downloads\">Пӗр тийев те ҫук</string>\n    <string name=\"label_help\">Пулӑшу</string>\n    <string name=\"label_extension_info\">Хушма ҫинчен</string>\n    <string name=\"label_extensions\">Хушмасем</string>\n    <string name=\"label_sources\">Ҫӑл куҫсем</string>\n    <string name=\"label_recent_updates\">Ҫӗнӗлӗх</string>\n    <string name=\"label_library\">Вулавӑш</string>\n    <string name=\"label_settings\">Ӗнерӳсем</string>\n    <string name=\"label_more\">Тата</string>\n    <string name=\"action_display_show_tabs\">Пухмӑш кантӑкӗсене кӑтарт</string>\n    <string name=\"action_display_comfortable_grid\">Меллӗ сетке</string>\n    <string name=\"action_display_grid\">Ҫӑтӑ сетке</string>\n    <string name=\"action_select_inverse\">Хирӗҫле суйла</string>\n    <string name=\"update_never\">Сӳнтернӗ</string>\n    <string name=\"pref_library_columns\">Сетке пысӑкӑшӗ</string>\n    <string name=\"portrait\">Урлӑ</string>\n    <string name=\"landscape\">Тӑрӑх</string>\n    <string name=\"secure_screen_summary\">Ыкран сыхлавӗ тепӗр апсем ҫине куҫнӑ чух ку апӑн мӗн пуррине пытарать тата ыкрана сӑн ҫапма чарать</string>\n    <string name=\"hide_notification_content\">Систерӳсенче мӗн ҫырнине пытарни</string>\n    <string name=\"lock_never\">Нихӑҫан</string>\n    <string name=\"lock_always\">Йаланах</string>\n    <string name=\"action_open_log\">Тӑвӑм-пулӑм кӗнекине уҫ</string>\n    <string name=\"action_reset\">Тасат</string>\n    <string name=\"action_sort\">Уйӑр</string>\n    <string name=\"theme_system\">Ҫиҫтемри пекех</string>\n    <string name=\"pref_category_reader\">Вулӑш</string>\n    <string name=\"pref_category_tracking\">Йӗрлев</string>\n    <string name=\"loading\">Тийени…</string>\n    <string name=\"action_restore\">Тавӑр</string>\n    <string name=\"action_unpin\">Салт</string>\n    <string name=\"action_migrate\">Куҫар</string>\n    <string name=\"action_next_chapter\">Хыҫҫӑнхи сыпӑк</string>\n    <string name=\"action_previous_chapter\">Умӗнхи сыпӑк</string>\n    <string name=\"track\">Йӗрлев</string>\n    <string name=\"information_webview_outdated\">Чи лайӑх пӗрлӗхшӗн WebView-а ҫӗнет</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare-ран иртеймерӗ</string>\n    <string name=\"information_empty_category\">Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша пухмӑшсем туса йӗркелеме «Хуш» пускӑч ҫине пус.</string>\n    <string name=\"label_migration\">Куҫару</string>\n    <string name=\"label_backup\">Янтӑлав тата тавӑру</string>\n    <string name=\"ext_obsolete\">Кивелнӗ</string>\n    <string name=\"ext_updates_pending\">Ҫӗнетӳ кӗтеҫҫӗ</string>\n    <string name=\"default_category\">Йаланхилле пухмӑш</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Вулавӑша ҫӗнетнӗ чухне ҫӗнӗ хуплашка тата вак-тӗвек пуррине тӗрӗслени</string>\n    <string name=\"pref_library_update_refresh_metadata\">Хӑй-халлӗн метта пӗлӗмсене ҫӗнетмелле</string>\n    <string name=\"pref_update_only_non_completed\">Серилӗх вӗҫленнӗ</string>\n    <string name=\"pref_category_about\">Ап ҫинчен</string>\n    <string name=\"ext_untrusted\">Шанчӑклӑ мар</string>\n    <string name=\"ext_trust\">Шанчӑклӑ</string>\n    <string name=\"ext_pending\">Кӗтет</string>\n    <string name=\"backup_restore_missing_sources\">Ҫук ҫӑл куҫсем:</string>\n    <string name=\"tracking_info\">Йӗрлев сервисӗсенче сыпӑкӑн ӳсӗмне ҫӗнетме пӗр йенлӗ килӗшӗвӗ. «Йӗрлев» пускӑч урлӑ йӗрлев ӗнерле.</string>\n    <string name=\"pref_auto_update_manga_sync\">Вуланӑ хыҫҫӑн сыпӑксен ӳсӗме ҫӗнет</string>\n    <string name=\"fifth_to_last\">Вуланӑ сыпӑкран пиллӗкмӗшӗ</string>\n    <string name=\"fourth_to_last\">Вуланӑ сыпӑкран тӑваттӑмӗшӗ</string>\n    <string name=\"third_to_last\">Вуланӑ сыпӑкран виҫҫӗмӗшӗ</string>\n    <string name=\"second_to_last\">Юлашкинчен маларахри</string>\n    <string name=\"pref_remove_after_marked_as_read\">Вуланӑ пек палӑртнӑ хыҫҫӑн катерт</string>\n    <string name=\"scale_type_original_size\">Хӑйӗн виҫе</string>\n    <string name=\"pager_viewer\">Елсерен</string>\n    <string name=\"pref_viewer_type\">Яланхилле вулав тытӑмӗ</string>\n    <string name=\"pref_color_filter_mode\">Тӗс алипе хутӑштармалли тытӑм</string>\n    <string name=\"pref_show_reading_mode_summary\">Вулӑш уҫӑ пулсан хальхи тытӑма кӗскен палӑртмалла</string>\n    <string name=\"pref_show_reading_mode\">Вулав тытӑма кӑтарт</string>\n    <string name=\"pref_fullscreen\">Тулли ыкран</string>\n    <string name=\"untrusted_extension\">Шанчӑклӑ мар хушма</string>\n    <string name=\"lock_when_idle\">Ним туман чух ҫаклатни</string>\n    <string name=\"display_mode_chapter\">%1$s-мӗш сыпӑк</string>\n    <string name=\"lock_with_biometrics\">Ҫаклатӑва уҫма пӳрне йӗрре ыйтни</string>\n    <string name=\"pref_webtoon_side_padding\">Аяккинчи чаку</string>\n    <string name=\"pref_always_show_chapter_transition\">Сыпӑксем урлӑ каҫнине яланах кӑтарт</string>\n    <string name=\"color_filter_a_value\">Тӑрӑлӑх мар</string>\n    <string name=\"rotation_force_landscape\">Ҫаклатнӑ тӑрӑхскер</string>\n    <string name=\"rotation_force_portrait\">Ҫаклатнӑ урлӑскер</string>\n    <string name=\"rotation_free\">Ирӗклӗ</string>\n    <string name=\"pref_rotation_type\">Яланхилле урлӑ-тӑрӑх</string>\n    <string name=\"double_tap_anim_speed_0\">Енимсӗр</string>\n    <string name=\"pref_zoom_start\">Пысӑклатни пуҫламӑш тӑрӑмӗ</string>\n    <string name=\"scale_type_smart_fit\">Тӑнлӑ</string>\n    <string name=\"scale_type_stretch\">Тӑс</string>\n    <string name=\"scale_type_fit_screen\">Екранпа</string>\n    <string name=\"pref_image_scale_type\">Сарӑмлани</string>\n    <string name=\"vertical_plus_viewer\">Вӗҫӗмсӗрех урлӑ</string>\n    <string name=\"webtoon_viewer\">Вӑрӑм елсем</string>\n    <string name=\"vertical_viewer\">Елсерен (урлӑ)</string>\n    <string name=\"right_to_left_viewer\">Елсерен (сылтӑмран сулахайалла)</string>\n    <string name=\"left_to_right_viewer\">Елсерен (сулахайран сылтӑмалла)</string>\n    <string name=\"gray_background\">Сӑрӑ</string>\n    <string name=\"pref_read_with_long_tap\">Пусса тӑннӑ чух кӑтарт</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Янравлӑх пускӑчӗсене вырӑнсемпе улӑштар</string>\n    <string name=\"pref_read_with_volume_keys\">Янравлӑх пускӑчӗсем</string>\n    <string name=\"pref_reader_navigation\">Куҫӑм</string>\n    <string name=\"pref_skip_filtered_chapters\">Аланӑ сыпӑксене сиктермелле</string>\n    <string name=\"pref_skip_read_chapters\">Вуланӑ сыпӑксене сиктермелле</string>\n    <string name=\"pref_keep_screen_on\">Екрана ҫутӑ тыт</string>\n    <string name=\"filter_mode_darken\">Тӗттӗмлетӳ</string>\n    <string name=\"filter_mode_lighten\">Ҫутату</string>\n    <string name=\"filter_mode_overlay\">Витӗм</string>\n    <string name=\"pref_custom_color_filter\">Усӑҫ тӗс али</string>\n    <string name=\"pref_custom_brightness\">Усӑҫ йӑлтӑрлӑхӗ</string>\n    <string name=\"pref_crop_borders\">Касӑк чиккисем</string>\n    <string name=\"pref_show_page_number\">Ел шутне кӑтартни</string>\n    <string name=\"pref_double_tap_anim_speed\">Икӗ хут пуссан эним хӑвӑртлӑхӗ</string>\n    <string name=\"pref_page_transitions\">Елсем хушшипе енимлӗ куҫни</string>\n    <string name=\"obsolete_extension_message\">Ҫак хушмана урӑх кӗме май ҫук. Вӑл тӗрӗс мар ӗҫлеме тата апа йӑнӑшлаттарма пултарать. Ӑна катертме сӗнетпӗр.</string>\n    <string name=\"untrusted_extension_message\">Ку хушмана шанчӑклӑ мар ӗнентерӳ хучӗпе алӑ пуснӑ тата ӑна пуҫарман.\n\\n\n\\nСийенлӗ хушма упранакан кирек мӗнле шут пӗлӗмӗсене шута илме йе хӑй ирӗклӗ йума пурнӑҫлама пултарать.\n\\n\n\\nҪак ӗнентерӳ хутне шаннипе есӗ ҫав теветкеле йышӑнатӑн.</string>\n    <string name=\"add_tracking\">Йӗрлев хуш</string>\n    <string name=\"manga_tracking_tab\">Йӗрле</string>\n    <string name=\"custom_filter\">Усӑҫ али</string>\n    <string name=\"pref_acra_summary\">Кирек мӗнле йӑнӑшсене тӳрлетме пулӑшать. Нимӗнле харкам пӗлӗм те ярӑнмасть</string>\n    <string name=\"label_downloaded_only\">Тиенӗсене ҫеҫ</string>\n    <string name=\"file_select_backup\">Янтӑв файла суйла</string>\n    <string name=\"dialog_with_checkbox_reset\">Ҫак манкӑн пур сыпӑка тасат</string>\n    <string name=\"pref_cutout_short\">Каснӑ тӑрӑхра шалашне кӑтарт</string>\n    <string name=\"pref_read_with_tapping_inverted\">Пусӑмсене вырӑнсемпе улӑштар</string>\n    <string name=\"tapping_inverted_both\">Иккӗш те</string>\n    <string name=\"tapping_inverted_vertical\">Урлӑ</string>\n    <string name=\"tapping_inverted_horizontal\">Тӑрӑх</string>\n    <string name=\"tapping_inverted_none\">Ҫук</string>\n    <string name=\"channel_ext_updates\">Хушмасен ҫӗнетӗвӗсем</string>\n    <string name=\"channel_new_chapters\">Сыпӑксен ҫӗнетӗвӗсем</string>\n    <string name=\"channel_common\">Яланхи</string>\n    <string name=\"download_notifier_download_paused\">Тийеве вӑхӑтлӑха чарнӑ</string>\n    <string name=\"download_notifier_unknown_error\">Кӗтмен йӑнӑша пула сыпӑксене тийесе илеймест</string>\n    <string name=\"download_notifier_downloader_title\">Тийевҫӗ</string>\n    <string name=\"information_webview_required\">Mihon валли WebView кирлӗ</string>\n    <string name=\"update_check_notification_download_in_progress\">Тийев…</string>\n    <string name=\"update_check_no_new_updates\">Ҫӗнетӳ тупӑнман</string>\n    <string name=\"update_check_confirm\">Тиесе ил</string>\n    <string name=\"file_select_cover\">Хуплашка суйла</string>\n    <string name=\"notification_first_add_to_library\">Ҫакна тӑвас умӗн манкка санӑн вулавӑша хуш-ха</string>\n    <string name=\"notification_cover_update_failed\">Хуплашкана ҫӗнетеймерӗ</string>\n    <string name=\"notification_chapters_single_and_more\">%1$s сыпӑкӗ тата ытти %2$d</string>\n    <string name=\"notification_chapters_multiple\">%1$s сыпӑкӗсем</string>\n    <string name=\"download_queue_error\">Сыпӑксене тийесе илме пулмасть. Тийевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн</string>\n    <string name=\"copy\">Ӑтавла</string>\n    <string name=\"migrate\">Куҫар</string>\n    <string name=\"migration_selection_prompt\">Куҫарма ҫӑл куҫ суйла</string>\n    <string name=\"migration_dialog_what_to_include\">Хушма пӗлӗмсене суйла</string>\n    <string name=\"recent_manga_time\">%1$s-мӗш сыпӑка %2$s</string>\n    <string name=\"updating_library\">Вулавӑша ҫӗнетни</string>\n    <string name=\"loader_not_implemented_error\">Ҫӑл куҫ тупӑнман</string>\n    <string name=\"page_list_empty_error\">Пӗр ел те тупӑнман</string>\n    <string name=\"transition_pages_error\">Елсем тийенеймерӗҫ: %1$s</string>\n    <string name=\"transition_pages_loading\">Елсене тийени…</string>\n    <string name=\"transition_no_previous\">Умӗнхи сыпӑк ҫук</string>\n    <string name=\"transition_no_next\">Малалли сыпӑк ҫук</string>\n    <string name=\"transition_previous\">Умӗнхи:</string>\n    <string name=\"transition_next\">Малалли:</string>\n    <string name=\"transition_current\">Хальхи:</string>\n    <string name=\"transition_finished\">Вӗҫленчӗ:</string>\n    <string name=\"viewer\">Вулав тытӑмӗ</string>\n    <string name=\"pref_category_for_this_series\">Ҫак серилӗх валли</string>\n    <string name=\"confirm_set_image_as_cover\">Ҫак сӑна хуплашка пек усӑ курмалла-и?</string>\n    <string name=\"decode_image_error\">Сӑн тийенмерӗ</string>\n    <string name=\"no_next_chapter\">Малалли сыпӑк тупӑнман</string>\n    <string name=\"chapter_progress\">%1$d-мӗш ел</string>\n    <string name=\"cover_updated\">Хуплашкана ҫӗнетнӗ</string>\n    <string name=\"set_as_cover\">Хуплашка пек ларт</string>\n    <string name=\"picture_saved\">Ӳкерчӗке упранӑ</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ҫакӑ вара сыпӑка вулани вӑхӑта катертӗ. Чӑнах катертесшӗн-и?</string>\n    <string name=\"snack_categories_deleted\">Пухмӑшсем катертнӗ</string>\n    <string name=\"error_category_exists\">Ун пек ятпа пухмӑш пур ӗнтӗ!</string>\n    <string name=\"track_type\">Тӗс</string>\n    <string name=\"track_status\">Хал</string>\n    <string name=\"status\">Хал</string>\n    <string name=\"title\">Ят</string>\n    <string name=\"score\">Хаклав</string>\n    <string name=\"repeating\">Ҫӗнӗрен вулатӑп</string>\n    <string name=\"plan_to_read\">Вулӑп</string>\n    <string name=\"paused\">Чарнӑ</string>\n    <string name=\"on_hold\">Чарнӑ</string>\n    <string name=\"dropped\">Пӑрахнӑ</string>\n    <string name=\"completed\">Вӗҫленӗ</string>\n    <string name=\"reading\">Вулатӑп</string>\n    <string name=\"confirm_delete_chapters\">Есӗ суйланӑ сыпӑксене катертесшӗнех-и?</string>\n    <string name=\"download_unread\">Вуламанине</string>\n    <string name=\"manga_download\">Тиесе ил</string>\n    <string name=\"sort_by_upload_date\">Тиенӗ вӑхӑчӗпе</string>\n    <string name=\"sort_by_number\">Сыпӑк шучӗпе</string>\n    <string name=\"sort_by_source\">Ҫӑл куҫпа</string>\n    <string name=\"show_chapter_number\">Сыпӑк шучӗ</string>\n    <string name=\"show_title\">Ҫӑл куҫ ячӗ</string>\n    <string name=\"chapter_paused\">Вӑхӑтлӑха чарнӑ</string>\n    <string name=\"chapter_error\">Йӑнӑш</string>\n    <string name=\"chapter_downloading_progress\">Тиенет (%1$d/%2$d)</string>\n    <string name=\"snack_add_to_library\">Манкка вулавăша хушмалла-и?</string>\n    <string name=\"source_not_installed\">Ҫӑл куҫа лартман: %1$s</string>\n    <string name=\"copied_to_clipboard\">Пайлашу буфере ӑтавланӑ:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">Тиенӗ сыпӑксене катертмелле-и?</string>\n    <string name=\"manga_info_collapse\">Сахалрах</string>\n    <string name=\"manga_info_expand\">Ытларах</string>\n    <string name=\"manga_removed_library\">Вулавӑшран катерт</string>\n    <string name=\"manga_added_library\">Вулавӑша хуш</string>\n    <string name=\"remove_from_library\">Вулавӑшран катерт</string>\n    <string name=\"in_library\">Вулавăшра</string>\n    <string name=\"add_to_library\">Вулавӑша хуш</string>\n    <string name=\"licensed\">Лиссенсиленӗ</string>\n    <string name=\"unknown_status\">Паллӑ мар хал</string>\n    <string name=\"unknown_author\">Паллӑ мар хайлавҫӑ</string>\n    <string name=\"unknown\">Паллă мар</string>\n    <string name=\"ongoing\">Тухакан</string>\n    <string name=\"local_source_help_guide\">Вырӑнти ҫӑл куҫ ертӳлӗхӗ</string>\n    <string name=\"browse\">Шырав</string>\n    <string name=\"latest\">Юлашки</string>\n    <string name=\"action_global_search_hint\">Пур ҫӗрте шыра…</string>\n    <string name=\"pinned_sources\">Ҫакнӑ</string>\n    <string name=\"last_used_source\">Юлашки усӑ курни</string>\n    <string name=\"other_source\">Ыттисем</string>\n    <string name=\"local_source\">Вырӑнти ҫӑл куҫ</string>\n    <string name=\"no_results_found\">Пӗр тупсӑм та тупӑнман</string>\n    <string name=\"no_more_results\">Урӑх тупсӑмсем ҫук</string>\n    <string name=\"tabs_header\">Кантӑксем</string>\n    <string name=\"invalid_backup_file\">Тӗрӗс мар янтӑв файлӗ</string>\n    <string name=\"updating_category\">Пухмӑша ҫӗнетни</string>\n    <string name=\"unknown_error\">Паллӑ мар йӑнӑш</string>\n    <string name=\"logout_success\">Есӗ тухрӑн</string>\n    <string name=\"logout\">Тух</string>\n    <string name=\"logout_title\">“%1$s тухмалла-и?</string>\n    <string name=\"login_success\">Ӑнӑҫлӑ кӗни</string>\n    <string name=\"login\">Кӗр</string>\n    <string name=\"password\">Кӗме сӑмах</string>\n    <string name=\"email\">Ылӑккӑтрунлӑ пуштӑ тӗлӗ</string>\n    <string name=\"username\">Усӑҫ ячӗ</string>\n    <string name=\"login_title\">%1$s кӗр</string>\n    <string name=\"downloaded_only_summary\">Санӑн вулавӑшри манкка алат</string>\n    <string name=\"pref_enable_acra\">Ӳкнисем ҫинчен тишереревсем ямалла</string>\n    <string name=\"check_for_updates\">Ҫӗнетӳ пуррине тӗрӗсле</string>\n    <string name=\"licenses\">Уҫӑ юмлӑ лиссенсисем</string>\n    <string name=\"version\">Версси</string>\n    <string name=\"website\">Сайт</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Хатӗрӗн ӗнерлӗве уҫаймарӗ</string>\n    <string name=\"battery_optimization_disabled\">Петтерей лайӑхлатнине сӳнтернӗ ӗнтӗ</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Хыҫ планлӑ ҫӗнетӳпе тата янтавланипе пулӑшать</string>\n    <string name=\"pref_disable_battery_optimization\">Петтерей лайӑхлатнине сӳнтер</string>\n    <string name=\"pref_backup_interval\">Янтӑвлани тӑтӑшлӑхӗ</string>\n    <string name=\"pref_refresh_library_covers\">Вулавӑшри манкӑсен хуплашкисене ҫӗнет</string>\n    <string name=\"clear_database_completed\">Ҫыравсене катертнӗ</string>\n    <string name=\"clear_database_confirmation\">Чӑнах катертесшӗн-и? Вулавӑшри мар манкӑн вуланӑ сыпӑкӗсем тата вулав ӳсӗмӗ ҫухалӗ</string>\n    <string name=\"pref_clear_database_summary\">Санӑн вулавӑшра упранман манкӑн вуланӑ кун-ҫулне катерт</string>\n    <string name=\"pref_clear_database\">Пӗлӗмсен кӗлете тасат</string>\n    <string name=\"cache_delete_error\">Кеше тасатнӑ чух йӑнӑш тухрӗ</string>\n    <string name=\"cache_deleted\">Кеша тастнӑ. %1$d файла катертнӗ</string>\n    <string name=\"pref_clear_chapter_cache\">Сыпӑксен кешне тасат</string>\n    <string name=\"label_data\">Пӗлӗмсем</string>\n    <string name=\"requires_app_restart\">Ҫакӑ вӑя кӗрес тесен хушӑма хупса уҫмалла</string>\n    <string name=\"restoring_backup_canceled\">Тавӑрнине пӑрахӑҫланӑ</string>\n    <string name=\"restoring_backup_error\">Янтӑв тавӑрни йӑнӑшӗ</string>\n    <string name=\"restoring_backup\">Янтӑв тавӑрни</string>\n    <string name=\"restore_in_progress\">Тавӑрни пурнӑҫланать ӗнтӗ</string>\n    <string name=\"creating_backup_error\">Янтӑвлани йӑнӑшӗ</string>\n    <string name=\"creating_backup\">Янтӑв тӑвӑнать</string>\n    <string name=\"backup_choice\">Мӗн эсӗ янтӑвласшӑн?</string>\n    <string name=\"backup_in_progress\">Янтӑ пурнӑҫланать ӗнтӗ</string>\n    <string name=\"restore_completed\">Тавӑрни вӗҫленнӗ</string>\n    <string name=\"pref_create_backup_summ\">Хальхи вулавăша тавӑрма усӑ курма пулать</string>\n    <string name=\"invalid_backup_file_missing_manga\">Янтӑвра манкӑсем ҫук.</string>\n    <string name=\"backup_created\">Янтӑв тӑвӑннӑ</string>\n    <string name=\"pref_restore_backup_summ\">Вулавӑша янтӑвран тавӑр</string>\n    <string name=\"pref_restore_backup\">Янтӑв тавӑр</string>\n    <string name=\"pref_create_backup\">Янтӑв ту</string>\n    <string name=\"updated_version\">v%1$s верссиччен ҫӗнетнӗ</string>\n    <string name=\"whats_new\">Мӗн ҫӗнни</string>\n    <string name=\"pref_category_theme\">Темӗ</string>\n    <string name=\"action_sort_date_added\">Хушни вӑхӑчӗпе</string>\n    <string name=\"download_insufficient_space\">Тиск ҫинче вырӑн ҫитмен пирки сыпӑксем тийенеймерӗҫ</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" пур ҫӗрте шыра</string>\n    <string name=\"pref_category_reading_mode\">Вулав тытӑмӗ</string>\n    <string name=\"no_pinned_sources\">Санӑн ҫакнӑ ҫӑл куҫ ҫук</string>\n    <string name=\"channel_complete\">Вӗҫленӗ</string>\n    <string name=\"channel_progress\">Ӳсӗм</string>\n    <string name=\"channel_errors\">Йӑнӑшсем</string>\n    <string name=\"backup_restore_missing_trackers\">Кӗмен йӗрлевсем:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Картнӑ сыпӑксене катерт</string>\n    <string name=\"pref_category_delete_chapters\">Сыпӑксене катерт</string>\n    <string name=\"ext_nsfw_warning\">NSFW (18+) шалаш пулма пултарать</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Ҫакӑ апра чӑнлавлӑ мар йе тӗрӗс мар палӑртнӑ хушмасен NSFW (18+) шалашне кӑтартма чӑрмантармасть.</string>\n    <string name=\"no_chapters_error\">Сыпӑксем ҫук</string>\n    <string name=\"also_set_chapter_settings_for_library\">Тата манӑн вулавăшри пур манкӑ валли усӑ кур</string>\n    <string name=\"chapter_settings_updated\">Яланхилле сыпӑк ӗнерлев ҫӗнетнӗ</string>\n    <string name=\"set_chapter_settings_as_default\">Яланхилле</string>\n    <string name=\"confirm_set_chapter_settings\">Ҫак ӗнерелевсене яланхилле упрасшӑнах-и?</string>\n    <string name=\"share_page_info\">%1$s: %2$s, %3$d-мӗш ел</string>\n    <string name=\"chapter_settings\">Сыпӑк ӗнерлеве</string>\n    <string name=\"action_search_settings\">Ӗнерӳ шыра</string>\n    <string name=\"downloaded_chapters\">Тиесе илнӗ сыпӑксем</string>\n    <string name=\"manga_from_library\">Вулавӑшран манкӑ</string>\n    <string name=\"pref_incognito_mode_summary\">Вулани кун-ҫула чарса лартать</string>\n    <string name=\"pref_clear_history\">Кун-ҫул тасат</string>\n    <string name=\"clear_history_completed\">Кун-ҫула катертнӗ</string>\n    <string name=\"pref_incognito_mode\">Вӑрттӑнлӑх тытӑмӗ</string>\n    <string name=\"clear_history_confirmation\">Чӑнах катертесшӗн-и? Веҫ кун-ҫулӗ ҫухалӗ.</string>\n    <string name=\"spen_next_page\">Маллали сыпӑк</string>\n    <string name=\"spen_previous_page\">Умӗнхи эл</string>\n    <string name=\"migration_help_guide\">Ҫӑл куҫ куҫарассипе пулӑшу</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) ҫӑл куҫӗсем</string>\n    <string name=\"file_picker_error\">Файлсене суйламалли хушӑм тупӑнман</string>\n    <string name=\"myanimelist_relogin\">Тархасшӑн MAL-а ҫӗнӗрен кӗр</string>\n    <string name=\"pref_show_nsfw_source\">Ҫӑл куҫсен тата хушмасен йат йышӗнче кӑтартни</string>\n    <string name=\"track_finished_reading_date\">Вулама вӗҫленӗ вӑхӑчӗ</string>\n    <string name=\"track_started_reading_date\">Вулама пуҫланӑ вӑхӑчӗ</string>\n    <string name=\"edge_nav\">Хӗрри</string>\n    <string name=\"kindlish_nav\">Kindle пек</string>\n    <string name=\"l_nav\">L пек</string>\n    <string name=\"action_desc\">Пӗчӗкленнипе</string>\n    <string name=\"action_asc\">Пысӑкланнипе</string>\n    <string name=\"action_order_by_chapter_number\">Сыпӑк шучӗпе</string>\n    <string name=\"action_order_by_upload_date\">Тийесе илни вӑхӑчӗпе</string>\n    <string name=\"action_filter_tracked\">Йӗрленет</string>\n    <string name=\"pref_dump_crash_logs_summary\">Файлсенчи йӑнӑшсен логсене хатерлевҫӗсем патне яма упрать</string>\n    <string name=\"pref_dump_crash_logs\">Йӑнӑш кӗнекине тийесе йар</string>\n    <string name=\"pref_viewer_nav\">Куҫӑм палли</string>\n    <string name=\"right_and_left_nav\">Сылтӑмран сулахаялла</string>\n    <string name=\"pref_dual_page_invert_summary\">Анлӑ елсене пайлани вулав майлӑ мар пулсан</string>\n    <string name=\"pref_dual_page_invert\">Анлӑ елсене тепӗр майлӑ пайлани</string>\n    <string name=\"pref_dual_page_split\">Анлӑ елсене пайлани</string>\n    <string name=\"action_display_show_number_of_items\">Хайлавсен шутне кӑтарт</string>\n    <string name=\"nav_zone_right\">Сылтӑм</string>\n    <string name=\"nav_zone_left\">Сулахай</string>\n    <string name=\"nav_zone_next\">Малалли</string>\n    <string name=\"nav_zone_prev\">Унченхи</string>\n    <string name=\"pref_dns_over_https\">HTTPS урлӑ DNS</string>\n    <string name=\"pref_category_auto_download\">Хӑй хальлӗн тийени</string>\n    <string name=\"exclude\">Кӑлар: %s</string>\n    <string name=\"include\">Кӗрт: %s</string>\n    <string name=\"none\">Ҫук</string>\n    <string name=\"action_sort_chapter_fetch_date\">Йулашки сыпӑк илнипе</string>\n    <string name=\"update_check_eol\">Ҫак Android версси урӑх</string>\n    <string name=\"clipboard_copy_error\">Пайлашу аса ӑтавланаймарӗ</string>\n    <string name=\"rotation_landscape\">Тӑрӑх</string>\n    <string name=\"rotation_portrait\">Урлӑ</string>\n    <string name=\"rotation_type\">Урлӑ-тӑрӑх тӗсӗ</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Папкӑсене сери ячӗпе туни</string>\n    <string name=\"pref_create_folder_per_manga\">Елсене уйрӑм папкӑсенче упрамалла</string>\n    <string name=\"pref_reader_actions\">Тӑвӑмсем</string>\n    <string name=\"pref_show_navigation_mode_summary\">Пусма вырӑнсене вулӑш уҫӑ чухне кӑтартмалла</string>\n    <string name=\"action_show_errors\">Йӑнӑшсене кӑтарт</string>\n    <string name=\"cancel_all_for_series\">Ҫак серилӗх валли пурне те пӑрахӑҫла</string>\n    <string name=\"pref_downloads_summary\">Хӑй-хальлӗн тийесе илни, малтанах тийени</string>\n    <string name=\"action_sort_last_manga_update\">Йулашки хут ҫӗнетӳ пуррине тӗрӗсленипе</string>\n    <string name=\"action_sort_unread_count\">Йулнӑ сыпӑксемпе</string>\n    <string name=\"action_sort_count\">Хайлав шучӗпе</string>\n    <string name=\"action_remove_everything\">Пурне те катерт</string>\n    <string name=\"delete_category_confirmation\">«%s» пухмӑша катертесшӗнех-и?</string>\n    <string name=\"delete_category\">Пухмӑша катерт</string>\n    <string name=\"action_display_local_badge\">Вырӑнти ҫӑл куҫран</string>\n    <string name=\"label_warning\">Асӑрхаттару</string>\n    <string name=\"action_display_cover_only_grid\">Йатсӑр сетке</string>\n    <string name=\"action_move_to_top_all_for_series\">Хайлава пуҫа куҫар</string>\n    <string name=\"confirm_lock_change\">Улшӑнӑва ҫирӗплетме есӗлӗхе ҫирӗплет</string>\n    <string name=\"action_show_manga\">Хайлава кӑтарт</string>\n    <string name=\"action_display_language_badge\">Чӗлхе</string>\n    <string name=\"action_search_hint\">Шыра…</string>\n    <string name=\"action_close\">Хуп</string>\n    <string name=\"action_start_downloading_now\">Тийеве халех пуҫла</string>\n    <string name=\"internal_error\">InternalError: Хушма хыпар-пӗлӳ пӑхма тӑвӑм-пулӑм кӗнекине пӑх</string>\n    <string name=\"pref_category_appearance\">Кӑтартӑну</string>\n    <string name=\"on\">Ҫутнӑ</string>\n    <string name=\"off\">Сӳнтернӗ</string>\n    <string name=\"pref_appearance_summary\">Темӗ, кун тата вӑхӑт тытӑмӗ</string>\n    <string name=\"pref_library_summary\">Пухмӑшсем, пӗтӗмӗшле ҫӗнетӳ, сыпӑксене туртни</string>\n    <string name=\"pref_reader_summary\">Вулав тытӑмӗ, кӑтартӑнни, куҫӑм</string>\n    <string name=\"label_default\">Йаланхилле</string>\n    <string name=\"action_open_random_manga\">Ӑнсӑрт хайлав уҫ</string>\n    <string name=\"theme_strawberrydaiquiri\">Ҫӗр ҫырли тайккирийӗ</string>\n    <string name=\"theme_midnightdusk\">Ҫур ҫӗр ӗнтрӗкӗ</string>\n    <string name=\"pref_tracking_summary\">Пӗр йенлӗ ӳсӗм килӗштерӗвӗ, анлӑлатнӑ килӗштерӳ</string>\n    <string name=\"connected_to_wifi\">Wi-Fi урлӑ ҫеҫ</string>\n    <string name=\"action_display_show_continue_reading_button\">«Малалла вула» пускӑч</string>\n    <string name=\"pref_security_summary\">Апа ҫаклатни, ыкран хӳтӗлевӗ</string>\n    <string name=\"restrictions\">Чарусем: %s</string>\n    <string name=\"pref_update_only_completely_read\">Вуламан сыпӑк(сем) пур</string>\n    <string name=\"label_started\">Пуҫланӑ</string>\n    <string name=\"label_local\">Вырӑнти</string>\n    <string name=\"label_downloaded\">Тийесе илнӗ</string>\n    <string name=\"theme_tidalwave\">Шыв хӑпарнин хумӗ</string>\n    <string name=\"pref_app_theme\">Ап темми</string>\n    <string name=\"relative_time_today\">Пайан</string>\n    <string name=\"theme_lavender\">Лавантӑ</string>\n    <string name=\"theme_yinyang\">Ин тата Йан</string>\n    <string name=\"pref_browse_summary\">Ҫӑл куҫсем, хушмасем, пӗтӗмӗшле шырав</string>\n    <string name=\"theme_greenapple\">Симӗс пан улми</string>\n    <string name=\"theme_yotsuba\">Йутсупа</string>\n    <string name=\"network_not_metered\">Чараксӑр тетел урлӑ ҫеҫ</string>\n    <string name=\"pref_update_only_started\">Серилӗхе пуҫламан</string>\n    <string name=\"theme_tako\">Такку</string>\n    <string name=\"pref_dark_theme_pure_black\">Хуп-хура темӗ</string>\n    <string name=\"pref_app_language\">Ап чӗлхи</string>\n    <string name=\"action_not_now\">Халь мар</string>\n    <string name=\"update_72hour\">Кашни 3 кун</string>\n    <string name=\"theme_tealturquoise\">Симӗс кӑвак</string>\n    <string name=\"theme_monet\">Куҫӑмлӑ</string>\n    <string name=\"label_stats\">Шутлавсем</string>\n    <string name=\"action_copy_to_clipboard\">Пайлашу асне ӑт</string>\n    <string name=\"pref_backup_summary\">Хӑй тӗллӗн тата хӑй-хальлӗн йантӑлав</string>\n    <string name=\"action_update_category\">Пухмӑша ҫӗнет</string>\n    <string name=\"pref_advanced_summary\">Йӑнӑш кӗнекине тийесе йани, паттарейе лайӑхлатни</string>\n    <string name=\"pref_library_update_show_tab_badge\">Вуламан сыпӑксен шутне «Ҫӗнӗлӗх» ыккун ҫинче кӑтартни</string>\n    <string name=\"pref_landscape_zoom\">Сӑна тӑрӑх пысӑклатни</string>\n    <string name=\"multi_lang\">Нумай чӗлхеллӗ</string>\n    <string name=\"automatic_background\">Хӑй-хальлӗн</string>\n    <string name=\"disabled_nav\">Сӳнтернӗ</string>\n    <string name=\"extension_api_error\">Хушмасен йат-йышне илесси пулаймарӗ</string>\n    <string name=\"categorized_display_settings\">Кашни пухмӑшӑн хӑйӗн ала ӗнерӗвӗсем</string>\n    <string name=\"ext_app_info\">Ап ҫинчен</string>\n    <string name=\"split_tall_images_summary\">Вулӑшӑн тухӑҫа лайӑхлатать</string>\n    <string name=\"error_user_agent_string_blank\">User agent пушӑ пулмалла мар</string>\n    <string name=\"ext_info_language\">Чӗлхе</string>\n    <string name=\"pref_navigate_pan\">Пуснӑ чухне анлӑ сӑнсене сарӑмлатни</string>\n    <string name=\"split_tall_images\">Вӑрӑм сӑнсене пайлани</string>\n    <string name=\"missing_storage_permission\">Управ ирӗкӗсене паман</string>\n    <string name=\"ext_info_version\">Версси</string>\n    <string name=\"ext_update_all\">Пурне те ҫӗнет</string>\n    <string name=\"delete_downloaded\">Тийесе илнисене катерт</string>\n    <string name=\"pref_update_only_in_release_period\">Кӗтӗнекен кӑларӑм тапхӑрӗ тулашӗнче</string>\n    <string name=\"pref_chapter_swipe_end\">Сылтӑмалла туртни</string>\n    <string name=\"pref_chapter_swipe_start\">Сулахайалла туртни</string>\n    <string name=\"ext_installer_pref\">Ларткӑч</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ӗҫлемест</string>\n    <string name=\"ext_info_age_rating\">Ҫул-ӳсӗм чаравӗ</string>\n    <string name=\"action_sort_next_updated\">Тепӗр кӗтӗнекен ҫӗнетӳпе</string>\n    <string name=\"ext_install_service_notif\">Хушма лартни…</string>\n    <string name=\"action_set_interval\">Тӑтӑшлӑх палӑрт</string>\n    <string name=\"action_filter_interval_custom\">Ӗнерӳллӗ илӳ тӑтӑшлӑхӗ</string>\n    <string name=\"ext_installer_legacy\">Малтанхилле</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizuku-н хушма ларткӑча усӑ курма Shizuku ларт тата ҫут.</string>\n    <string name=\"action_ok\">Йурӗ</string>\n    <string name=\"unlock_app_title\">%s уҫ</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Хайлава вӗҫе куҫар</string>\n    <string name=\"pref_library_update_categories_details\">Кӗртнӗ пухмӑшсенче пулнӑ пулсан та кӑларса пӑрахнӑ пухмӑшсенче пулнӑ серилӗхсем ҫӗнелмӗҫ.</string>\n    <string name=\"selected\">Суйланӑ</string>\n    <string name=\"not_selected\">Суйламан</string>\n    <string name=\"action_bar_up_description\">Ҫӳлелле куҫ</string>\n    <string name=\"scanlator\">Куҫаруҫӑ</string>\n    <string name=\"label_data_storage\">Пӗлӗмсем тата усрав</string>\n    <string name=\"action_sort_tracker_score\">Йӗрлевҫӗн хаклавӗ</string>\n    <string name=\"action_apply\">Кӳр</string>\n    <string name=\"action_revert_to_default\">Йаланхилле тавӑр</string>\n    <string name=\"pref_onboarding_guide\">Пуҫлама пӗлкӗч</string>\n    <string name=\"onboarding_heading\">Килӗрех!</string>\n    <string name=\"onboarding_description\">Айтӑр темиҫе йапала ӗнерӗпӗр. Есӗ вӗсене йаланах кайран ӗнерӳсенче улӑштарма пултаратӑн.</string>\n    <string name=\"onboarding_action_next\">Малалла</string>\n    <string name=\"onboarding_action_finish\">Пуҫла</string>\n    <string name=\"onboarding_action_skip\">Ирттер</string>\n    <string name=\"onboarding_storage_action_select\">Папкӑ суйла</string>\n    <string name=\"onboarding_storage_selection_required\">Папкӑ суйламалла</string>\n    <string name=\"onboarding_storage_help_action\">Усрав пӗлкӗчӗ</string>\n    <string name=\"onboarding_permission_install_apps\">Апсене лартма ирӗк</string>\n    <string name=\"onboarding_permission_install_apps_description\">Ҫӑл куҫсен хушмисене лартма ирӗк парӗ.</string>\n    <string name=\"onboarding_permission_notifications\">Систерӳсем килме ирӗк</string>\n    <string name=\"onboarding_permission_notifications_description\">Вулавӑшри ҫӗнетӳсем пурри пирки тата ытти пирки пӗлтерӗ.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Петтерейе хыҫра усӑ курма ирӗк</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Тӑсӑлакан вулавӑш ҫӗнелни, тийени тата йантӑ ӑтава тавӑрни чарӑнасран хӑтӑлтарӗ.</string>\n    <string name=\"onboarding_permission_action_grant\">Ирӗк пар</string>\n    <string name=\"onboarding_guides_new_user\">%s апра ҫӗнни? Епӗр пуҫлав пӗлкӗчӗпе паллашма сӗнетпӗр.</string>\n    <string name=\"theme_nord\">Ҫур ҫӗр</string>\n    <string name=\"onboarding_storage_help_info\">Кивӗ верҫҫирен ҫӗнӗлетӗн те мӗн суламаллине пӗлместӗн? Нумайрах пӗлме усрав пӗлкӗчне кӗрсе пӑх.</string>\n    <string name=\"onboarding_guides_returning_user\">%s ҫӗнӗрен лартатӑн?</string>\n    <string name=\"pref_relative_format_summary\">«%1$s» вырӑнне «%2$s»</string>\n    <string name=\"label_upcoming\">Пулас</string>\n    <string name=\"action_menu_overflow_description\">Тепӗр ӗнерӳсем</string>\n    <string name=\"action_copy_link\">Каҫҫа ӑт</string>\n    <string name=\"action_sort_random\">Ӑнсӑрт</string>\n    <string name=\"onboarding_permission_crashlytics\">Йӑнӑшсен кӗнекине йар</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Вӑрттӑнлатнӑ йӑнӑшсен кӗнекине хатӗрлевҫӗсене йарса парӗ.</string>\n    <string name=\"action_migrate_duplicate\">Хальхи хайлава куҫар</string>\n    <string name=\"onboarding_permission_analytics_description\">Апӑн ӗҫ-тивӗҫсене лайӑхлатма вӑрттӑнлатнӑ усӑ курав пӗлӗмӗсене йарса парӗ.</string>\n    <string name=\"onboarding_storage_info\">%1$s тийенӗ сыпӑксене, йантӑлав ӑтӑвӗсене тата ыттине упрамалли папкӑ суйла.\\n\\nУйтӑм папкӑ усӑ курма сӗнетпӗр.\\n\\nСуйланӑ папкӑ: %2$s</string>\n    <string name=\"onboarding_permission_analytics\">Тӗпчевлеме ирӗк</string>\n    <string name=\"action_add_anyway\">Пур пӗрех хуш</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/da/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">I går</item>\n        <item quantity=\"other\">%1$d dage siden</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Efter %1$s minut</item>\n        <item quantity=\"other\">Efter %1$s minutter</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategori</item>\n        <item quantity=\"other\">%d kategorier</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Næste ulæste kapitel</item>\n        <item quantity=\"other\">Næste %d ulæste kapitler</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/da/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_recent_updates\">Opdateringer</string>\n    <string name=\"label_recent_manga\">Historik</string>\n    <string name=\"label_extension_info\">Udvidelses info</string>\n    <string name=\"label_help\">Hjælp</string>\n    <string name=\"label_migration\">Migerering</string>\n    <string name=\"label_default\">Standard</string>\n    <string name=\"label_warning\">Advarsel</string>\n    <string name=\"action_filter_bookmarked\">Bogmærket</string>\n    <string name=\"action_filter_empty\">Fjern filter</string>\n    <string name=\"action_select_inverse\">Inverter valg</string>\n    <string name=\"action_mark_as_read\">Markér som læst</string>\n    <string name=\"action_mark_as_unread\">Markér som ulæst</string>\n    <string name=\"action_mark_previous_as_read\">Markér tidligere som læst</string>\n    <string name=\"action_download\">Download</string>\n    <string name=\"action_bookmark\">Bogmærk kapitel</string>\n    <string name=\"action_enable_all\">Aktivér alt</string>\n    <string name=\"action_edit\">Rediger</string>\n    <string name=\"action_rename_category\">Omdøb kategori</string>\n    <string name=\"action_edit_cover\">Rediger omslag</string>\n    <string name=\"action_view_chapters\">Se kapitler</string>\n    <string name=\"action_display_comfortable_grid\">Komfortabelt grid</string>\n    <string name=\"action_display_cover_only_grid\">Kun covers som grid</string>\n    <string name=\"information_empty_library\">Dit bibliotek er tomt</string>\n    <string name=\"information_empty_category\">Du har ikke nogen kategorier. Tryk på plusset for at oprette en og organisere dit bibliotek.</string>\n    <string name=\"label_more\">Mere</string>\n    <string name=\"label_library\">Bibliotek</string>\n    <string name=\"categories\">Kategorier</string>\n    <string name=\"manga\">Biblioteksposter</string>\n    <string name=\"chapters\">Kapitler</string>\n    <string name=\"track\">Sporing</string>\n    <string name=\"label_sources\">Kilder</string>\n    <string name=\"label_settings\">Indstillinger</string>\n    <string name=\"name\">Navn</string>\n    <string name=\"information_no_recent\">Ingen nylige opdateringer</string>\n    <string name=\"action_sort_last_read\">Sidst læst</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_sort_alpha\">Alfabetisk</string>\n    <string name=\"action_remove\">Fjern</string>\n    <string name=\"label_download_queue\">Download kø</string>\n    <string name=\"history\">Historik</string>\n    <string name=\"label_backup\">Backup og gendannelse</string>\n    <string name=\"label_extensions\">Udvidelser</string>\n    <string name=\"information_no_recent_manga\">Intet læst for nyligt</string>\n    <string name=\"information_no_downloads\">Ingen downloads</string>\n    <string name=\"action_sort_chapter_fetch_date\">Dato hentet</string>\n    <string name=\"action_settings\">Indstillinger</string>\n    <string name=\"action_filter_unread\">Ulæst</string>\n    <string name=\"action_sort_count\">Manga ialt</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_sort_date_added\">Dato tilføjet</string>\n    <string name=\"action_select_all\">Vælg alt</string>\n    <string name=\"action_search_settings\">Søgeindstillinger</string>\n    <string name=\"action_update_library\">Opdater bibliotek</string>\n    <string name=\"action_add_category\">Tilføj kategori</string>\n    <string name=\"action_next_chapter\">Næste kapitel</string>\n    <string name=\"action_retry\">Forsøg igen</string>\n    <string name=\"action_display_language_badge\">Sprog</string>\n    <string name=\"action_sort_total\">Kapitler i alt</string>\n    <string name=\"action_sort_latest_chapter\">Seneste kapitel</string>\n    <string name=\"action_global_search\">Global søgning</string>\n    <string name=\"action_delete\">Slet</string>\n    <string name=\"action_add\">Tilføj</string>\n    <string name=\"action_search\">Søg</string>\n    <string name=\"action_edit_categories\">Rediger kategorier</string>\n    <string name=\"action_remove_bookmark\">Fjern bogmærke fra kapitel</string>\n    <string name=\"action_disable_all\">Deaktivér alt</string>\n    <string name=\"action_pause\">Pause</string>\n    <string name=\"action_previous_chapter\">Forrige kapitel</string>\n    <string name=\"action_open_in_browser\">Åben i browser</string>\n    <string name=\"action_show_manga\">Vis manga</string>\n    <string name=\"action_open_in_web_view\">Åben i WebView</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"action_resume\">Fortsæt</string>\n    <string name=\"action_migrate\">Migrere</string>\n    <string name=\"action_display\">Vis</string>\n    <string name=\"action_display_mode\">Visningsmåde</string>\n    <string name=\"action_display_grid\">Kompakt grid</string>\n    <string name=\"action_display_list\">Liste</string>\n    <string name=\"action_display_download_badge\">Downloaded kapitler</string>\n    <string name=\"action_display_local_badge\">Lokale manga</string>\n    <string name=\"action_filter_tracked\">Sporet</string>\n    <string name=\"action_move_category\">Vælg kategorier</string>\n    <string name=\"action_display_show_tabs\">Vis kategorifaner</string>\n    <string name=\"confirm_lock_change\">Godkend for at bekræfte ænding</string>\n    <string name=\"action_display_show_number_of_items\">Vis antal genstande</string>\n    <string name=\"action_disable\">Deaktivér</string>\n    <string name=\"action_pin\">Fastgør</string>\n    <string name=\"action_unpin\">Frigør</string>\n    <string name=\"action_order_by_upload_date\">Efter upload dato</string>\n    <string name=\"action_order_by_chapter_number\">Efter kapitelnummer</string>\n    <string name=\"action_oldest\">Ældste</string>\n    <string name=\"action_move_to_top\">Flyt til toppen</string>\n    <string name=\"action_move_to_top_all_for_series\">Flyt serie til toppen</string>\n    <string name=\"action_move_to_bottom\">Flyt til bunden</string>\n    <string name=\"action_install\">Installer</string>\n    <string name=\"action_share\">Del</string>\n    <string name=\"action_save\">Gem</string>\n    <string name=\"action_reset\">Nulstil</string>\n    <string name=\"action_undo\">Fortryd</string>\n    <string name=\"action_open_log\">Åben log</string>\n    <string name=\"cancel_all_for_series\">Afbryd alle for denne serie</string>\n    <string name=\"action_sort\">Sorter</string>\n    <string name=\"action_cancel_all\">Afbryd alle</string>\n    <string name=\"action_cancel\">Afbryd</string>\n    <string name=\"action_asc\">Stigende</string>\n    <string name=\"action_newest\">Nyeste</string>\n    <string name=\"action_desc\">Faldende</string>\n    <string name=\"action_show_errors\">Tryk for at se detaljer</string>\n    <string name=\"action_restore\">Gendan</string>\n    <string name=\"action_webview_back\">Tilbage</string>\n    <string name=\"action_webview_refresh\">Genindlæs</string>\n    <string name=\"action_start_downloading_now\">Start download nu</string>\n    <string name=\"loading\">Loader…</string>\n    <string name=\"app_not_available\">App ikke tilgængelig</string>\n    <string name=\"pref_category_general\">Generelt</string>\n    <string name=\"pref_category_appearance\">Udseende</string>\n    <string name=\"pref_category_downloads\">Downloads</string>\n    <string name=\"pref_category_tracking\">Sporing</string>\n    <string name=\"action_close\">Luk</string>\n    <string name=\"pref_category_reader\">Læser</string>\n    <string name=\"action_webview_forward\">Frem</string>\n    <string name=\"pref_category_library\">Bibliotek</string>\n    <string name=\"pref_category_advanced\">Avanceret</string>\n    <string name=\"pref_category_about\">Om</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"theme_system\">Følg system</string>\n    <string name=\"theme_light\">Fra</string>\n    <string name=\"theme_dark\">Til</string>\n    <string name=\"pref_app_theme\">App tema</string>\n    <string name=\"theme_monet\">Dynamisk</string>\n    <string name=\"theme_greenapple\">Æble grøn</string>\n    <string name=\"theme_midnightdusk\">Skumring</string>\n    <string name=\"theme_strawberrydaiquiri\">Jordbær Daiquiri</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_tealturquoise\">Blågrøn &amp; Turquoise</string>\n    <string name=\"theme_yinyang\">Yin-yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Kulsort</string>\n    <string name=\"pref_date_format\">Dato format</string>\n    <string name=\"pref_manage_notifications\">Håndter notifikationer</string>\n    <string name=\"pref_category_security\">Sikkerhed</string>\n    <string name=\"lock_with_biometrics\">Kræv oplåsning</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) kilder</string>\n    <string name=\"pref_show_nsfw_source\">Vis i kilder og udvidelsesliste</string>\n    <string name=\"parental_controls_info\">Dette forhindrer ikke uofficielle eller potentielt ukorrekt markerede udvidelser fra at vise NSFW (18+) indhold i appen.</string>\n    <string name=\"relative_time_today\">I dag</string>\n    <string name=\"lock_when_idle\">Lås ved inaktivitet</string>\n    <string name=\"lock_always\">Altid</string>\n    <string name=\"lock_never\">Aldrig</string>\n    <string name=\"hide_notification_content\">Skjul notifikationsindhold</string>\n    <string name=\"secure_screen\">Sikker skærm</string>\n    <string name=\"secure_screen_summary\">Sikker skærm skjuler app indhold, når der skiftes mellem apps, og blokerer for skærmbilleder</string>\n    <string name=\"pref_category_display\">Vis</string>\n    <string name=\"pref_library_update_restriction\">Enhedsbegrænsninger for automatiske opdateringer</string>\n    <string name=\"connected_to_wifi\">Kun på WiFi</string>\n    <string name=\"pref_library_columns\">Elementer per række</string>\n    <string name=\"landscape\">Liggende</string>\n    <string name=\"portrait\">Stående</string>\n    <string name=\"pref_category_library_update\">Global opdatering</string>\n    <string name=\"pref_library_update_interval\">Automatiske opdateringer</string>\n    <string name=\"update_never\">Fra</string>\n    <string name=\"update_6hour\">Hver 6. time</string>\n    <string name=\"update_12hour\">Hver 12. time</string>\n    <string name=\"update_24hour\">Dagligt</string>\n    <string name=\"update_48hour\">Hver anden dag</string>\n    <string name=\"update_72hour\">Hver tredje dag</string>\n    <string name=\"update_weekly\">Ugentligt</string>\n    <string name=\"charging\">Kun under opladning</string>\n    <string name=\"restrictions\">Begrænsninger: %s</string>\n    <string name=\"pref_update_only_completely_read\">Med ulæst kapitler</string>\n    <string name=\"pref_update_only_non_completed\">Med \\\"Færdig\\\" status</string>\n    <string name=\"pref_update_only_started\">Der ikke er blevet startet</string>\n    <string name=\"multi_lang\">Multi</string>\n    <string name=\"delete_category_confirmation\">Ønsker du at slette kategorien \\\"%s\\\"?</string>\n    <string name=\"theme_tidalwave\">Tidevandsbølge</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Søg efter nyt cover og detaljer, når biblioteket opdateres</string>\n    <string name=\"pref_library_update_refresh_metadata\">Opdater automatisk metadata</string>\n    <string name=\"default_category\">Standard kategori</string>\n    <string name=\"action_sort_last_manga_update\">Nyeste manga opdateringer</string>\n    <string name=\"action_sort_unread_count\">Antal ulæst</string>\n    <string name=\"delete_category\">Slet kategori</string>\n    <string name=\"exclude\">Ekskluder: %s</string>\n    <string name=\"theme_lavender\">Lavendel</string>\n    <string name=\"default_category_summary\">Spørg altid</string>\n    <string name=\"pref_library_update_categories_details\">Manga i ekskluderede kategorier vil ikke blive opdateret selv hvis de også er i inkluderede kategorier.</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"none\">Ingen</string>\n    <string name=\"include\">Inkluder: %s</string>\n    <string name=\"pref_app_language\">App sprog</string>\n    <string name=\"action_remove_everything\">Fjern alt</string>\n    <string name=\"login\">Login</string>\n    <string name=\"unknown_error\">Ukendt fejl</string>\n    <string name=\"internal_error\">InternalError: Tjek nedbrudslogfiler for yderligere information</string>\n    <string name=\"logout_success\">Du er nu logget ud</string>\n    <string name=\"login_success\">Logget ind</string>\n    <string name=\"logout_title\">Log af %1$s?</string>\n    <string name=\"add_to_library\">Tilføj til bibliotek</string>\n    <string name=\"in_library\">I Biblioteket</string>\n    <string name=\"remove_from_library\">Fjern fra biblioteket</string>\n    <string name=\"logout\">Log af</string>\n    <string name=\"scale_type_fit_height\">Tilpas højde</string>\n    <string name=\"label_stats\">Statistik</string>\n    <string name=\"pref_fullscreen\">Fuldskærmsvisning</string>\n    <string name=\"white_background\">Hvid</string>\n    <string name=\"ext_pending\">Ventende</string>\n    <string name=\"ext_installer_pref\">Installationsprogram</string>\n    <string name=\"action_copy_to_clipboard\">Kopiér til udklipsholder</string>\n    <string name=\"unlock_app_title\">Lås op for %s</string>\n    <string name=\"pref_skip_filtered_chapters\">Spring over filtrerede kapitler</string>\n    <string name=\"label_downloaded\">Nedhentet</string>\n    <string name=\"ext_info_version\">Version</string>\n    <string name=\"action_set_interval\">Angiv interval</string>\n    <string name=\"delete_downloaded\">Slet nedhentede</string>\n    <string name=\"action_apply\">Anvend</string>\n    <string name=\"scale_type_fit_width\">Tilpas bredde</string>\n    <string name=\"pref_reader_theme\">Baggrundsfarve</string>\n    <string name=\"ext_info_language\">Sprog</string>\n    <string name=\"pref_viewer_type\">Standardlæsetilstand</string>\n    <string name=\"action_revert_to_default\">Nulstil til standard</string>\n    <string name=\"ext_install\">Installér</string>\n    <string name=\"on\">Til</string>\n    <string name=\"disabled_nav\">Deaktiveret</string>\n    <string name=\"action_search_hint\">Søg…</string>\n    <string name=\"nav_zone_next\">Næste</string>\n    <string name=\"pref_skip_read_chapters\">Spring over kapitler markeret som læst</string>\n    <string name=\"pref_downloads_summary\">Automatisk nedhentning, nedhent forud</string>\n    <string name=\"ext_installing\">Installerer</string>\n    <string name=\"tapping_inverted_vertical\">Lodret</string>\n    <string name=\"action_update_category\">Opdatér kategori</string>\n    <string name=\"ext_update_all\">Opdater alle</string>\n    <string name=\"ext_updates_pending\">Opdateringer venter</string>\n    <string name=\"off\">Fra</string>\n    <string name=\"pref_backup_summary\">Manuel og automatisk sikkerhedskopiering, lagerplads</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Flyt serie til bunden</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"ext_update\">Opdater</string>\n    <string name=\"tapping_inverted_both\">Begge</string>\n    <string name=\"tapping_inverted_horizontal\">Vandret</string>\n    <string name=\"label_data_storage\">Data og lagring</string>\n    <string name=\"pref_reader_summary\">Læsetilstand, skærmvisning, navigation</string>\n    <string name=\"nav_zone_right\">Højre</string>\n    <string name=\"nav_zone_prev\">Forrige</string>\n    <string name=\"ext_downloading\">Henter ned</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_uninstall\">Afinstallér</string>\n    <string name=\"action_not_now\">Ikke nu</string>\n    <string name=\"ext_install_service_notif\">Installerer udvidelse…</string>\n    <string name=\"pref_show_page_number\">Vis sidetal</string>\n    <string name=\"label_started\">Påbegyndt</string>\n    <string name=\"pref_show_reading_mode\">Vis læsetilstand</string>\n    <string name=\"pref_update_only_in_release_period\">Uden for forventet udgivelsesperiode</string>\n    <string name=\"ext_installed\">Installeret</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"right_and_left_nav\">Højre og Venstre</string>\n    <string name=\"scale_type_stretch\">Stræk</string>\n    <string name=\"black_background\">Sort</string>\n    <string name=\"automatic_background\">Automatisk</string>\n    <string name=\"pref_appearance_summary\">Tema, dato- og tidsformat</string>\n    <string name=\"pref_relative_format\">Relative tidsstempler</string>\n    <string name=\"ext_obsolete\">Forældet</string>\n    <string name=\"gray_background\">Grå</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" i stedet for \\\"%2$s\\\"</string>\n    <string name=\"action_sort_next_updated\">Næste forventede opdatering</string>\n    <string name=\"pref_browse_summary\">Kilder, udvidelser, global søgning</string>\n    <string name=\"nav_zone_left\">Venstre</string>\n    <string name=\"backup_created\">Sikkerhedskopi oprettet</string>\n    <string name=\"pref_always_show_chapter_transition\">Vis altid kapitelovergang</string>\n    <string name=\"action_create\">Opret</string>\n    <string name=\"pref_restore_backup\">Gendan sikkerhedskopi</string>\n    <string name=\"used_cache\">Brugt: %1$s</string>\n    <string name=\"pref_lowest\">Laveste</string>\n    <string name=\"rotation_type\">Rotation</string>\n    <string name=\"pref_category_delete_chapters\">Slet kapitler</string>\n    <string name=\"pref_create_backup\">Opret sikkerhedskopi</string>\n    <string name=\"rotation_portrait\">Stående</string>\n    <string name=\"pref_category_reading\">Læser</string>\n    <string name=\"channel_ext_updates\">Udvidelsesopdateringer</string>\n    <string name=\"creating_backup_error\">Sikkerhedskopiering mislykkedes</string>\n    <string name=\"rotation_free\">Fri</string>\n    <string name=\"channel_errors\">Fejl</string>\n    <string name=\"restore_completed\">Gendannelse fuldført</string>\n    <string name=\"pref_remove_exclude_categories\">Udelukkede kategorier</string>\n    <string name=\"fifth_to_last\">Femtesidst læste kapitel</string>\n    <string name=\"invalid_backup_file\">Ugyldig sikkerhedskopieringsfil</string>\n    <string name=\"channel_app_updates\">Appopdateringer</string>\n    <string name=\"spen_next_page\">Næste side</string>\n    <string name=\"exception_offline\">Ingen internetforbindelse</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"pref_category_reading_mode\">Læsetilstand</string>\n    <string name=\"remove_manga\">Du er ved at fjerne \\\"%s\\\" fra dit bibliotek</string>\n    <string name=\"pref_highest\">Højeste</string>\n    <string name=\"pref_low\">Lav</string>\n    <string name=\"source_settings\">Kildeindstillinger</string>\n    <string name=\"app_settings\">App-indstillinger</string>\n    <string name=\"fourth_to_last\">Fjerdesidst læste kapitel</string>\n    <string name=\"rotation_landscape\">Liggende</string>\n    <string name=\"requires_app_restart\">Kræver genstart af appen for at træde i kraft</string>\n    <string name=\"pref_backup_interval\">Automatisk sikkerhedskopieringsfrekvens</string>\n    <string name=\"split_tall_images\">Opdel høje billeder</string>\n    <string name=\"disabled\">Deaktiveret</string>\n    <string name=\"last_read_chapter\">Senest læste kapitel</string>\n    <string name=\"restore_duration\">%02d min, %02d sek</string>\n    <string name=\"pref_high\">Høj</string>\n    <string name=\"pref_restore_backup_summ\">Gendan biblioteket fra sikkerhedskopi</string>\n    <string name=\"spen_previous_page\">Forrige side</string>\n    <string name=\"third_to_last\">Tredjesidst læste kapitel</string>\n    <string name=\"invalid_location\">Ugyldig placering: %s</string>\n    <string name=\"pref_create_backup_summ\">Kan bruges til at gendanne nuværende bibliotek</string>\n    <string name=\"exception_http\">HTTP %d, tjek websiden i WebView</string>\n    <string name=\"second_to_last\">Næstsidst læste kapitel</string>\n    <string name=\"creating_backup\">Opretter sikkerhedskopi</string>\n    <string name=\"exception_unknown_host\">Kunne ikke nå %s</string>\n    <string name=\"channel_new_chapters\">Kapitelopdateringer</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/de/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Nach %1$s Minute</item>\n        <item quantity=\"other\">Nach %1$s Minuten</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d neues Kapitel</item>\n        <item quantity=\"other\">%1$d neue Kapitel</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Kapitel %1$s und 1 weiteres</item>\n        <item quantity=\"other\">Kapitel %1$s und %2$d weitere</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Für %d Eintrag</item>\n        <item quantity=\"other\">Für %d Einträge</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Erweiterungsaktualisierung verfügbar</item>\n        <item quantity=\"other\">%d Erweiterungsaktualisierungen verfügbar</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s verbleibend</item>\n        <item quantity=\"other\">%1$s verbleibend</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d Kategorie</item>\n        <item quantity=\"other\">%d Kategorien</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Erledigt in %1$s mit einem Fehler</item>\n        <item quantity=\"other\">Erledigt in %1$s mit %2$s Fehlern</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s Kapitel</item>\n        <item quantity=\"other\">%1$s Kapitel</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d Tracker</item>\n        <item quantity=\"other\">%d Tracker</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d Kapitel wird übersprungen, da die Quelle dieses entweder nicht besitzt, oder weil es rausgefiltert wurde</item>\n        <item quantity=\"other\">%d Kapitel werden übersprungen, da die Quelle diese entweder nicht besitzt, oder weil sie rausgefiltert wurden</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Gestern</item>\n        <item quantity=\"other\">Vor %1$d Tagen</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Nächstes ungelesenes Kapitel</item>\n        <item quantity=\"other\">Nächste %d ungelesene Kapitel</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Nächstes Kapitel</item>\n        <item quantity=\"other\">Nächste %d Kapitel</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s Kapitel fehlt</item>\n        <item quantity=\"other\">%1$s Kapitel fehlen</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 Tag</item>\n        <item quantity=\"other\">%d Tage</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d Repository</item>\n        <item quantity=\"other\">%d Repositorys</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Morgen</item>\n        <item quantity=\"other\">In %1$d Tagen</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 Seite</item>\n        <item quantity=\"other\">%1$s Seiten</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/de/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Name</string>\n    <string name=\"categories\">Kategorien</string>\n    <string name=\"manga\">Bibliothekseinträge</string>\n    <string name=\"chapters\">Kapitel</string>\n    <string name=\"history\">Verlauf</string>\n    <string name=\"label_settings\">Einstellungen</string>\n    <string name=\"label_download_queue\">Download-Warteschlange</string>\n    <string name=\"label_library\">Bibliothek</string>\n    <string name=\"label_recent_manga\">Verlauf</string>\n    <string name=\"label_backup\">Sichern und Wiederherstellen</string>\n    <string name=\"action_settings\">Einstellungen</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_bookmarked\">Lesezeichen</string>\n    <string name=\"action_filter_unread\">Ungelesen</string>\n    <string name=\"action_filter_empty\">Filter entfernen</string>\n    <string name=\"action_sort_alpha\">Alphabetisch</string>\n    <string name=\"action_sort_total\">Kapitelanzahl</string>\n    <string name=\"action_sort_last_read\">Zuletzt gelesen</string>\n    <string name=\"action_search\">Suche</string>\n    <string name=\"action_select_all\">Alle auswählen</string>\n    <string name=\"action_mark_as_read\">Als gelesen markieren</string>\n    <string name=\"action_mark_as_unread\">Als ungelesen markieren</string>\n    <string name=\"action_mark_previous_as_read\">Vorherige Kapitel als gelesen markieren</string>\n    <string name=\"action_download\">Herunterladen</string>\n    <string name=\"action_bookmark\">Lesezeichen setzen</string>\n    <string name=\"action_remove_bookmark\">Lesezeichen entfernen</string>\n    <string name=\"action_delete\">Löschen</string>\n    <string name=\"action_update_library\">Bibliothek aktualisieren</string>\n    <string name=\"action_edit\">Bearbeiten</string>\n    <string name=\"action_add\">Hinzufügen</string>\n    <string name=\"action_add_category\">Kategorie hinzufügen</string>\n    <string name=\"action_edit_categories\">Kategorien bearbeiten</string>\n    <string name=\"action_rename_category\">Kategorie umbenennen</string>\n    <string name=\"action_move_category\">Kategorien festlegen</string>\n    <string name=\"action_edit_cover\">Cover bearbeiten</string>\n    <string name=\"action_pause\">Pause</string>\n    <string name=\"action_previous_chapter\">Vorheriges Kapitel</string>\n    <string name=\"action_next_chapter\">Nächstes Kapitel</string>\n    <string name=\"action_retry\">Erneut versuchen</string>\n    <string name=\"action_remove\">Entfernen</string>\n    <string name=\"action_resume\">Fortfahren</string>\n    <string name=\"action_open_in_browser\">Im Browser öffnen</string>\n    <string name=\"action_display_mode\">Anzeigemodus</string>\n    <string name=\"action_display\">Anzeige</string>\n    <string name=\"action_display_grid\">Kacheln</string>\n    <string name=\"action_display_list\">Liste</string>\n    <string name=\"action_cancel\">Abbrechen</string>\n    <string name=\"action_sort\">Sortierung</string>\n    <string name=\"action_install\">Installieren</string>\n    <string name=\"action_share\">Teilen</string>\n    <string name=\"action_save\">Speichern</string>\n    <string name=\"action_reset\">Zurücksetzen</string>\n    <string name=\"action_undo\">Rückgängig machen</string>\n    <string name=\"action_open_log\">Protokoll öffnen</string>\n    <string name=\"action_restore\">Wiederherstellen</string>\n    <string name=\"loading\">Wird geladen…</string>\n    <string name=\"app_not_available\">App nicht verfügbar</string>\n    <string name=\"pref_category_general\">Allgemein</string>\n    <string name=\"pref_category_reader\">Leser</string>\n    <string name=\"pref_category_downloads\">Downloads</string>\n    <string name=\"pref_category_tracking\">Tracking</string>\n    <string name=\"pref_category_advanced\">Erweitert</string>\n    <string name=\"pref_category_about\">Über</string>\n    <string name=\"pref_library_columns\">Elemente pro Zeile</string>\n    <string name=\"portrait\">Hochformat</string>\n    <string name=\"landscape\">Querformat</string>\n    <string name=\"pref_library_update_interval\">Automatische Aktualisierungen</string>\n    <string name=\"update_never\">Aus</string>\n    <string name=\"update_6hour\">Alle 6 Stunden</string>\n    <string name=\"update_12hour\">Alle 12 Stunden</string>\n    <string name=\"update_24hour\">Täglich</string>\n    <string name=\"update_48hour\">Alle 2 Tage</string>\n    <string name=\"update_weekly\">Wöchentlich</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"pref_library_update_restriction\">Geräteeinschränkungen für automatische Aktualisierungen</string>\n    <string name=\"charging\">Beim Laden</string>\n    <string name=\"pref_update_only_non_completed\">Einträge mit dem Status „Abgeschlossen“ überspringen</string>\n    <string name=\"pref_auto_update_manga_sync\">Fortschritt nach dem Lesen aktualisieren</string>\n    <string name=\"default_category\">Standardkategorie</string>\n    <string name=\"default_category_summary\">Immer fragen</string>\n    <string name=\"pref_fullscreen\">Vollbild</string>\n    <string name=\"pref_page_transitions\">Animierte Seitenübergänge</string>\n    <string name=\"pref_show_page_number\">Seitennummer anzeigen</string>\n    <string name=\"pref_crop_borders\">Rand abschneiden</string>\n    <string name=\"pref_custom_brightness\">Benutzerdefinierte Helligkeit</string>\n    <string name=\"pref_custom_color_filter\">Benutzerdefinierten Farbfilter</string>\n    <string name=\"pref_keep_screen_on\">Bildschirm anlassen</string>\n    <string name=\"pref_reader_navigation\">Navigation</string>\n    <string name=\"pref_read_with_volume_keys\">Lautstärketasten</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Lautstärketasten umkehren</string>\n    <string name=\"pref_reader_theme\">Hintergrundfarbe</string>\n    <string name=\"white_background\">Weiß</string>\n    <string name=\"black_background\">Schwarz</string>\n    <string name=\"pref_viewer_type\">Standard-Lesemodus</string>\n    <string name=\"left_to_right_viewer\">Seiten (links nach rechts)</string>\n    <string name=\"right_to_left_viewer\">Seiten (rechts nach links)</string>\n    <string name=\"vertical_viewer\">Seiten (vertikal)</string>\n    <string name=\"webtoon_viewer\">Langer Streifen</string>\n    <string name=\"pref_image_scale_type\">Skalierung</string>\n    <string name=\"scale_type_fit_screen\">Bild ausfüllen</string>\n    <string name=\"scale_type_stretch\">Strecken</string>\n    <string name=\"scale_type_fit_width\">Horizontal ausfüllen</string>\n    <string name=\"scale_type_fit_height\">Vertikal ausfüllen</string>\n    <string name=\"scale_type_original_size\">Orginalgröße</string>\n    <string name=\"scale_type_smart_fit\">Intelligentes Ausfüllen</string>\n    <string name=\"pref_zoom_start\">Anfangsposition des Zooms</string>\n    <string name=\"zoom_start_automatic\">Automatisch</string>\n    <string name=\"zoom_start_left\">Links</string>\n    <string name=\"zoom_start_right\">Rechts</string>\n    <string name=\"zoom_start_center\">Mitte</string>\n    <string name=\"pref_rotation_type\">Standardausrichtung</string>\n    <string name=\"rotation_free\">Frei</string>\n    <string name=\"rotation_force_portrait\">Hochformat erzwingen</string>\n    <string name=\"rotation_force_landscape\">Querformat erzwingen</string>\n    <string name=\"color_filter_r_value\">Rot</string>\n    <string name=\"color_filter_g_value\">Grün</string>\n    <string name=\"color_filter_b_value\">Blau</string>\n    <string name=\"color_filter_a_value\">Alpha</string>\n    <string name=\"pref_remove_after_marked_as_read\">Nachdem manuell als gelesen markiert</string>\n    <string name=\"pref_remove_after_read\">Automatisch nach dem Lesen löschen</string>\n    <string name=\"disabled\">Deaktiviert</string>\n    <string name=\"last_read_chapter\">Ab zuletzt gelesenem Kapitel</string>\n    <string name=\"second_to_last\">Ab zweitletzt gelesenem Kapitel</string>\n    <string name=\"third_to_last\">Ab drittletzt gelesenem Kapitel</string>\n    <string name=\"fourth_to_last\">Ab viertletzt gelesenem Kapitel</string>\n    <string name=\"fifth_to_last\">Ab fünftletzt gelesenem Kapitel</string>\n    <string name=\"pref_download_new\">Neue Kapitel herunterladen</string>\n    <string name=\"services\">Tracker</string>\n    <string name=\"pref_create_backup\">Datensicherung erstellen</string>\n    <string name=\"pref_create_backup_summ\">Kann benutzt werden, um die aktuelle Bibliothek wiederherzustellen</string>\n    <string name=\"pref_restore_backup\">Datensicherung wiederherstellen</string>\n    <string name=\"pref_restore_backup_summ\">Bibliothek mit Hilfe einer Datensicherung wiederherstellen</string>\n    <string name=\"pref_backup_interval\">Automatische Sicherungshäufigkeit</string>\n    <string name=\"backup_created\">Datensicherung erstellt</string>\n    <string name=\"restore_completed\">Wiederherstellen abgeschlossen</string>\n    <string name=\"backup_choice\">Was möchtest du sichern?</string>\n    <string name=\"restoring_backup\">Datensicherung wird wiederhergestellt</string>\n    <string name=\"creating_backup\">Datensicherung wird erstellt</string>\n    <string name=\"pref_clear_chapter_cache\">Kapitel-Zwischenspeicher leeren</string>\n    <string name=\"used_cache\">Belegt: %1$s</string>\n    <string name=\"cache_deleted\">Zwischenspeicher geleert, %1$d Dateien gelöscht</string>\n    <string name=\"cache_delete_error\">Fehler während des Leerens aufgetreten</string>\n    <string name=\"pref_clear_cookies\">Cookies löschen</string>\n    <string name=\"cookies_cleared\">Cookies gelöscht</string>\n    <string name=\"pref_clear_database\">Datenbank leeren</string>\n    <string name=\"pref_clear_database_summary\">Verlauf für Einträge löschen, die nicht in deiner Bibliothek gespeichert sind</string>\n    <string name=\"clear_database_confirmation\">Bist du dir sicher? Die gelesenen Kapitel und Fortschritte von Einträgen, die nicht in deiner Bibliothek sind, werden gelöscht</string>\n    <string name=\"clear_database_completed\">Einträge gelöscht</string>\n    <string name=\"version\">Version</string>\n    <string name=\"pref_enable_acra\">Fehlerberichte senden</string>\n    <string name=\"pref_acra_summary\">Hilft bei der Behebung von Fehlern. Keine sensiblen Daten werden gesendet</string>\n    <string name=\"login_title\">Bei %1$s anmelden</string>\n    <string name=\"username\">Benutzername</string>\n    <string name=\"password\">Passwort</string>\n    <string name=\"login\">Anmelden</string>\n    <string name=\"login_success\">Angemeldet</string>\n    <string name=\"unknown_error\">Unbekannter Fehler</string>\n    <string name=\"updating_category\">Kategorie wird aktualisiert</string>\n    <string name=\"no_more_results\">Keine weiteren Ergebnisse</string>\n    <string name=\"local_source\">Lokale Quelle</string>\n    <string name=\"ongoing\">Fortlaufend</string>\n    <string name=\"unknown\">Unbekannt</string>\n    <string name=\"licensed\">Lizenziert</string>\n    <string name=\"remove_from_library\">Aus der Bibliothek entfernen</string>\n    <string name=\"delete_downloads_for_manga\">Heruntergeladene Kapitel löschen?</string>\n    <string name=\"display_mode_chapter\">Kapitel %1$s</string>\n    <string name=\"chapter_downloading_progress\">Wird heruntergeladen (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Fehler</string>\n    <string name=\"chapter_paused\">Pausiert</string>\n    <string name=\"show_title\">Quellentitel</string>\n    <string name=\"show_chapter_number\">Kapitelnummer</string>\n    <string name=\"sort_by_source\">Quelle</string>\n    <string name=\"sort_by_number\">Kapitelnummer</string>\n    <string name=\"manga_download\">Herunterladen</string>\n    <string name=\"download_unread\">Ungelesen</string>\n    <string name=\"confirm_delete_chapters\">Bist du sicher, dass du die ausgewählten Kapitel löschen willst?</string>\n    <string name=\"manga_tracking_tab\">Tracking</string>\n    <string name=\"reading\">Am Lesen</string>\n    <string name=\"completed\">Abgeschlossen</string>\n    <string name=\"dropped\">Abgebrochen</string>\n    <string name=\"on_hold\">Pausiert</string>\n    <string name=\"plan_to_read\">Plane ich zu Lesen</string>\n    <string name=\"score\">Bewertung</string>\n    <string name=\"title\">Titel</string>\n    <string name=\"status\">Status</string>\n    <string name=\"error_category_exists\">Eine Kategorie mit diesem Namen existiert bereits!</string>\n    <string name=\"snack_categories_deleted\">Kategorien gelöscht</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Das Lesedatum dieses Kapitels wird gelöscht. Bist du sicher?</string>\n    <string name=\"dialog_with_checkbox_reset\">Alle Kapitel dieses Eintrags zurücksetzen</string>\n    <string name=\"snack_add_to_library\">Zur Bibliothek hinzufügen?</string>\n    <string name=\"picture_saved\">Bild gespeichert</string>\n    <string name=\"custom_filter\">Eigener Filter</string>\n    <string name=\"set_as_cover\">Als Vorschaubild festlegen</string>\n    <string name=\"cover_updated\">Vorschaubild geändert</string>\n    <string name=\"chapter_progress\">Seite: %1$d</string>\n    <string name=\"no_next_chapter\">Nächstes Kapitel nicht gefunden</string>\n    <string name=\"decode_image_error\">Das Bild konnte nicht geladen werden</string>\n    <string name=\"confirm_set_image_as_cover\">Dieses Bild als Vorschaubild setzen?</string>\n    <string name=\"download_queue_error\">Fehler beim Herunterladen der Kapitel. Du kannst es in der Downloadsektion erneut versuchen</string>\n    <string name=\"notification_new_chapters\">Neue Kapitel gefunden</string>\n    <string name=\"notification_cover_update_failed\">Ändern des Vorschaubildes fehlgeschlagen</string>\n    <string name=\"notification_first_add_to_library\">Bitte füge den Eintrag deiner Bibliothek hinzu, bevor du dies tust</string>\n    <string name=\"file_select_cover\">Wähle ein Vorschaubild</string>\n    <string name=\"file_select_backup\">Wähle eine Sicherungsdatei</string>\n    <string name=\"update_check_confirm\">Herunterladen</string>\n    <string name=\"update_check_no_new_updates\">Keine neues Update verfügbar</string>\n    <string name=\"update_check_notification_download_in_progress\">Herunterladen…</string>\n    <string name=\"update_check_notification_download_complete\">Tippe, um das Update zu installieren</string>\n    <string name=\"update_check_notification_download_error\">Fehler beim Herunterladen</string>\n    <string name=\"update_check_notification_update_available\">Neue Version verfügbar!</string>\n    <string name=\"information_no_downloads\">Keine Downloads</string>\n    <string name=\"information_no_recent\">Keine neuen Kapitel</string>\n    <string name=\"information_no_recent_manga\">Nichts kürzlich gelesen</string>\n    <string name=\"information_empty_library\">Deine Bibliothek ist leer</string>\n    <string name=\"download_notifier_downloader_title\">Downloader</string>\n    <string name=\"download_notifier_title_error\">Fehler</string>\n    <string name=\"download_notifier_unknown_error\">Kapitel konnte aufgrund eines unerwarteten Fehlers nicht heruntergeladen werden</string>\n    <string name=\"download_notifier_text_only_wifi\">Keine WLAN-Verbindung verfügbar</string>\n    <string name=\"download_notifier_no_network\">Kein Netzwerk verfügbar</string>\n    <string name=\"download_notifier_download_paused\">Downloads pausiert</string>\n    <string name=\"track\">Tracking</string>\n    <string name=\"label_recent_updates\">Neues</string>\n    <string name=\"action_global_search\">Globale Suche</string>\n    <string name=\"other_source\">Andere</string>\n    <string name=\"action_global_search_hint\">Globale Suche…</string>\n    <string name=\"latest\">Neueste</string>\n    <string name=\"browse\">Stöbern</string>\n    <string name=\"channel_common\">Allgemein</string>\n    <string name=\"action_display_download_badge\">Heruntergelade Kapitel</string>\n    <string name=\"information_empty_category\">Keine Kategorien vorhanden. Tippe auf die Plus-Schaltfläche, um eine Kategorie zum Sortieren deiner Bibliothek zu erstellen.</string>\n    <string name=\"label_migration\">Migrieren</string>\n    <string name=\"label_extensions\">Erweiterungen</string>\n    <string name=\"label_extension_info\">Erweiterungsinformationen</string>\n    <string name=\"ext_update\">Aktualisieren</string>\n    <string name=\"ext_install\">Installieren</string>\n    <string name=\"ext_pending\">Anstehend</string>\n    <string name=\"ext_downloading\">Wird heruntergeladen</string>\n    <string name=\"ext_installing\">Wird installiert</string>\n    <string name=\"ext_installed\">Installiert</string>\n    <string name=\"ext_uninstall\">Deinstallieren</string>\n    <string name=\"untrusted_extension_message\">Bösartige Erweiterungen können gespeicherte Anmeldedaten auslesen oder beliebigen Code ausführen.\n\\n\n\\nDurch das Vertrauen in die Erweiterung akzeptierst du diese Risiken.</string>\n    <string name=\"double_tap_anim_speed_0\">Keine Animation</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Schnell</string>\n    <string name=\"manga_added_library\">Zur Bibliothek hinzugefügt</string>\n    <string name=\"manga_removed_library\">Aus der Bibliothek entfernt</string>\n    <string name=\"copied_to_clipboard\">In die Zwischenablage kopiert:\n\\n%1$s</string>\n    <string name=\"migrate\">Migrieren</string>\n    <string name=\"copy\">Kopieren</string>\n    <string name=\"ext_trust\">Vertrauen</string>\n    <string name=\"ext_untrusted\">Nicht vertrauenswürdig</string>\n    <string name=\"untrusted_extension\">Nicht vertrauenswürdige Erweiterung</string>\n    <string name=\"pref_double_tap_anim_speed\">Animationsgeschwindigkeit beim Doppeltippen</string>\n    <string name=\"migration_dialog_what_to_include\">Wähle zu beinhaltende Daten</string>\n    <string name=\"pager_viewer\">Seiten</string>\n    <string name=\"source_not_installed\">Quelle nicht installiert: %1$s</string>\n    <string name=\"repeating\">Am Wiederlesen</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Typ</string>\n    <string name=\"transition_finished\">Beendet:</string>\n    <string name=\"transition_current\">Aktuell:</string>\n    <string name=\"transition_next\">Als Nächstes:</string>\n    <string name=\"transition_previous\">Davor:</string>\n    <string name=\"transition_no_next\">Es gibt kein nächstes Kapitel</string>\n    <string name=\"transition_no_previous\">Es gibt kein vorheriges Kapitel</string>\n    <string name=\"transition_pages_loading\">Lade Seiten…</string>\n    <string name=\"transition_pages_error\">Seiten konnten nicht geladen werden: %1$s</string>\n    <string name=\"action_open_in_web_view\">In WebView öffnen</string>\n    <string name=\"pref_skip_read_chapters\">Gelesene Kapitel überspringen</string>\n    <string name=\"pref_read_with_long_tap\">Aktionen bei langem Antippen anzeigen</string>\n    <string name=\"filter_mode_overlay\">Overlay</string>\n    <string name=\"filter_mode_multiply\">Multiplizieren</string>\n    <string name=\"filter_mode_screen\">Bildschirm</string>\n    <string name=\"filter_mode_darken\">Brennen / Verdunkeln</string>\n    <string name=\"pref_color_filter_mode\">Farbfilter Mischmodus</string>\n    <string name=\"filter_mode_lighten\">Abwedeln / Aufhellen</string>\n    <string name=\"label_help\">Hilfe</string>\n    <string name=\"no_results_found\">Keine Ergebnisse gefunden</string>\n    <string name=\"migration_selection_prompt\">Wähle eine Quelle, aus welcher du migrieren möchtest</string>\n    <string name=\"action_webview_back\">Zurück</string>\n    <string name=\"action_webview_forward\">Vorwärts</string>\n    <string name=\"action_webview_refresh\">Aktualisieren</string>\n    <string name=\"pref_category_library\">Bibliothek</string>\n    <string name=\"ext_obsolete\">Veraltet</string>\n    <string name=\"obsolete_extension_message\">Diese Erweiterung ist nicht länger verfügbar. Sie funktioniert möglicherweise nicht mehr ordnungsgemäß und kann Probleme mit der App verursachen. Es ist empfohlen, sie zu deinstallieren.</string>\n    <string name=\"pref_date_format\">Datumsformat</string>\n    <string name=\"pref_category_library_update\">Globale Aktualisierung</string>\n    <string name=\"logout_title\">Aus %1$s abmelden?</string>\n    <string name=\"logout\">Abmelden</string>\n    <string name=\"logout_success\">Du bist jetzt abgemeldet</string>\n    <string name=\"paused\">Pausiert</string>\n    <string name=\"label_more\">Mehr</string>\n    <string name=\"action_sort_latest_chapter\">Neuestes Kapitel</string>\n    <string name=\"action_view_chapters\">Kapitel anzeigen</string>\n    <string name=\"action_cancel_all\">Alle abbrechen</string>\n    <string name=\"theme_light\">Hell</string>\n    <string name=\"theme_dark\">Dunkel</string>\n    <string name=\"theme_system\">System</string>\n    <string name=\"pref_manage_notifications\">Benachrichtigungen verwalten</string>\n    <string name=\"pref_category_security\">Sicherheit und Privatsphäre</string>\n    <string name=\"lock_with_biometrics\">Entsperren erforderlich</string>\n    <string name=\"lock_when_idle\">Während Inaktivität sperren</string>\n    <string name=\"lock_always\">Immer</string>\n    <string name=\"lock_never\">Nie</string>\n    <string name=\"secure_screen\">Sicherer Bildschirm</string>\n    <string name=\"ext_updates_pending\">Updates ausstehend</string>\n    <string name=\"pref_cutout_short\">Inhalt im Ausschnittbereich anzeigen</string>\n    <string name=\"information_cloudflare_bypass_failure\">Fehler beim Umgehen von Cloudflare</string>\n    <string name=\"information_webview_outdated\">Bitte aktualisiere die WebView-App für eine bessere Kompatibilität</string>\n    <string name=\"channel_new_chapters\">Kapitelaktualisierungen</string>\n    <string name=\"secure_screen_summary\">Sicherer Bildschirm verbirgt App-Inhalte beim Wechseln von Apps und blockiert Screenshots</string>\n    <string name=\"pref_category_display\">Anzeige</string>\n    <string name=\"notification_chapters_single\">Kapitel %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Kapitel %1$s und %2$d mehr</string>\n    <string name=\"notification_chapters_multiple\">Kapitel %1$s</string>\n    <string name=\"hide_notification_content\">Benachrichtigungsinhalt verbergen</string>\n    <string name=\"pref_disable_battery_optimization\">Akkuverbrauch-Optimierung deaktivieren</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Hilft bei Bibliotheksaktualisierungen und -sicherungen im Hintergrund</string>\n    <string name=\"battery_optimization_disabled\">Akkuverbrauch-Optimierung ist bereits deaktiviert</string>\n    <string name=\"email\">E-Mail-Adresse</string>\n    <string name=\"pref_always_show_chapter_transition\">Kapitelübergang immer anzeigen</string>\n    <string name=\"action_menu\">Menü</string>\n    <string name=\"action_newest\">Neueste</string>\n    <string name=\"action_oldest\">Älteste</string>\n    <string name=\"action_move_to_top\">Nach oben verschieben</string>\n    <string name=\"action_move_to_bottom\">Nach unten verschieben</string>\n    <string name=\"channel_ext_updates\">Erweiterungsupdates</string>\n    <string name=\"updating_library\">Bibliothek wird aktualisiert</string>\n    <string name=\"pref_skip_filtered_chapters\">Gefilterte Kapitel überspringen</string>\n    <string name=\"pref_category_reading\">Beim Lesen</string>\n    <string name=\"label_sources\">Quellen</string>\n    <string name=\"action_select_inverse\">Auswahl umkehren</string>\n    <string name=\"vertical_plus_viewer\">Langer Streifen mit Lücken</string>\n    <string name=\"pref_webtoon_side_padding\">Seitenränder</string>\n    <string name=\"pinned_sources\">Angeheftet</string>\n    <string name=\"action_unpin\">Loslösen</string>\n    <string name=\"action_pin\">Anheften</string>\n    <string name=\"add_tracking\">Tracking hinzufügen</string>\n    <string name=\"manga_info_collapse\">Weniger</string>\n    <string name=\"manga_info_expand\">Mehr</string>\n    <string name=\"in_library\">In der Bibliothek</string>\n    <string name=\"add_to_library\">Zur Bibliothek hinzufügen</string>\n    <string name=\"information_webview_required\">WebView ist für das Funktionieren der App erforderlich</string>\n    <string name=\"licenses\">Open-Source-Lizenzen</string>\n    <string name=\"website\">Webseite</string>\n    <string name=\"label_downloaded_only\">Nur Heruntergeladenes</string>\n    <string name=\"recent_manga_time\">Kap. %1$s - %2$s</string>\n    <string name=\"restoring_backup_error\">Datensicherungswiederherstellung fehlgeschlagen</string>\n    <string name=\"creating_backup_error\">Datensicherung fehlgeschlagen</string>\n    <string name=\"restoring_backup_canceled\">Wiederherstellung abgebrochen</string>\n    <string name=\"restore_in_progress\">Wiederherstellung wird bereits durchgeführt</string>\n    <string name=\"backup_in_progress\">Datensicherung wird bereits durchgeführt</string>\n    <string name=\"check_for_updates\">Nach Updates suchen</string>\n    <string name=\"last_used_source\">Zuletzt genutzt</string>\n    <string name=\"local_source_help_guide\">Anleitung für lokale Quellen</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d s</string>\n    <string name=\"downloaded_only_summary\">Filtert alle Einträge in deiner Bibliothek</string>\n    <string name=\"gray_background\">Grau</string>\n    <string name=\"viewer\">Lesemodus</string>\n    <string name=\"pref_category_for_this_series\">Für diese Serie</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Geräteeinstellungen konnten nicht geöffnet werden</string>\n    <string name=\"tracking_info\">Einweg-Synchronisation zum Aktualisieren der Kapitelfortschritte in den externen Trackingdiensten. Richte Tracking für einzelne Einträge über deren jeweiligen Trackingbutton ein.</string>\n    <string name=\"pref_refresh_library_covers\">Bibliothekscover aktualisieren</string>\n    <string name=\"sort_by_upload_date\">Nach Uploaddatum</string>\n    <string name=\"label_data\">Daten</string>\n    <string name=\"backup_restore_missing_sources\">Fehlende Quellen:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Datensicherung beinhaltet keinerlei Bibliothekseinträge.</string>\n    <string name=\"invalid_backup_file\">Ungültige Sicherungsdatei:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Auf neue Cover und Details überprüfen, wenn die Bibliothek aktualisiert wird</string>\n    <string name=\"pref_library_update_refresh_metadata\">Metadaten automatisch aktualisieren</string>\n    <string name=\"action_migrate\">Migrieren</string>\n    <string name=\"action_display_comfortable_grid\">Komfortable Kacheln</string>\n    <string name=\"tabs_header\">Registerkarten</string>\n    <string name=\"action_display_show_tabs\">Kategorienreiter anzeigen</string>\n    <string name=\"page_list_empty_error\">Keine Seiten gefunden</string>\n    <string name=\"action_disable_all\">Alles deaktivieren</string>\n    <string name=\"action_enable_all\">Alles aktivieren</string>\n    <string name=\"pref_show_reading_mode_summary\">Kurz den aktuellen Modus anzeigen, wenn der Leser geöffnet wird</string>\n    <string name=\"pref_show_reading_mode\">Lesemodus anzeigen</string>\n    <string name=\"action_start\">Starten</string>\n    <string name=\"loader_not_implemented_error\">Quelle nicht gefunden</string>\n    <string name=\"action_disable\">Deaktivieren</string>\n    <string name=\"requires_app_restart\">Erfordert einen Neustart der App, um wirksam zu werden</string>\n    <string name=\"label_network\">Vernetzung</string>\n    <string name=\"pref_read_with_tapping_inverted\">Tippzonen umkehren</string>\n    <string name=\"tapping_inverted_both\">Beide</string>\n    <string name=\"tapping_inverted_vertical\">Vertikal</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"tapping_inverted_none\">–</string>\n    <string name=\"unknown_status\">Unbekannter Status</string>\n    <string name=\"unknown_author\">Unbekannter Autor</string>\n    <string name=\"updated_version\">Auf v%1$s aktualisiert</string>\n    <string name=\"whats_new\">Was ist neu</string>\n    <string name=\"download_insufficient_space\">Herunterladen von Kapiteln aufgrund von zu wenig Speicherplatz nicht möglich</string>\n    <string name=\"action_global_search_query\">Überall nach „%1$s“ suchen</string>\n    <string name=\"action_sort_date_added\">Hinzufügedatum</string>\n    <string name=\"pref_category_reading_mode\">Lesemodus</string>\n    <string name=\"pref_category_theme\">Thema</string>\n    <string name=\"no_pinned_sources\">Du hast keine angehefteten Quellen</string>\n    <string name=\"channel_complete\">Abgeschlossen</string>\n    <string name=\"channel_progress\">Fortschritt</string>\n    <string name=\"channel_errors\">Fehler</string>\n    <string name=\"backup_restore_missing_trackers\">Nicht-angemeldete Tracker:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Erlauben, mit Lesezeichen versehene Kapitel zu löschen</string>\n    <string name=\"pref_category_delete_chapters\">Kapitel löschen</string>\n    <string name=\"ext_nsfw_warning\">Quellen dieser Erweiterung könnten NSFW/Ü18-Inhalte enthalten</string>\n    <string name=\"ext_nsfw_short\">Ü18</string>\n    <string name=\"parental_controls_info\">Dies verhindert nicht, dass inoffizielle oder möglicherweise falsch gekennzeichnete Erweiterungen NSFW/Ü18-Inhalte in der App anzeigen.</string>\n    <string name=\"no_chapters_error\">Keine Kapitel gefunden</string>\n    <string name=\"chapter_settings_updated\">Standard-Kapiteleinstellungen aktualisiert</string>\n    <string name=\"set_chapter_settings_as_default\">Als Standard setzen</string>\n    <string name=\"also_set_chapter_settings_for_library\">Auch für alle Einträge in meiner Bibliothek anwenden</string>\n    <string name=\"confirm_set_chapter_settings\">Bist du sicher, dass du diese Einstellungen als Standard speichern willst?</string>\n    <string name=\"chapter_settings\">Kapiteleinstellungen</string>\n    <string name=\"share_page_info\">%1$s: %2$s, Seite %3$d</string>\n    <string name=\"action_search_settings\">Einstellungen durchsuchen</string>\n    <string name=\"downloaded_chapters\">Heruntergeladene Kapitel</string>\n    <string name=\"manga_from_library\">Aus der Bibliothek</string>\n    <string name=\"pref_incognito_mode_summary\">Leseverlauf pausieren</string>\n    <string name=\"pref_incognito_mode\">Inkognito-Modus</string>\n    <string name=\"pref_clear_history\">Verlauf löschen</string>\n    <string name=\"clear_history_confirmation\">Bist du sicher? Der gesamte Verlauf wird gelöscht.</string>\n    <string name=\"clear_history_completed\">Verlauf gelöscht</string>\n    <string name=\"spen_next_page\">Nächste Seite</string>\n    <string name=\"spen_previous_page\">Vorherige Seite</string>\n    <string name=\"migration_help_guide\">Quellenmigration</string>\n    <string name=\"pref_category_nsfw_content\">NSFW/Ü18-Quellen</string>\n    <string name=\"pref_show_nsfw_source\">In Quellen- und Erweiterungslisten anzeigen</string>\n    <string name=\"file_picker_error\">Keine Dateiauswahl-App gefunden</string>\n    <string name=\"myanimelist_relogin\">Bitte logge dich erneut in MAL ein</string>\n    <string name=\"edge_nav\">Rand</string>\n    <string name=\"pref_viewer_nav\">Tippzonen</string>\n    <string name=\"kindlish_nav\">Kindle-Stil</string>\n    <string name=\"l_nav\">L-förmig</string>\n    <string name=\"track_finished_reading_date\">Enddatum</string>\n    <string name=\"track_started_reading_date\">Startdatum</string>\n    <string name=\"pref_dump_crash_logs_summary\">Speichert Fehlerprotokolle in einer Datei, die dann mit den Entwicklern geteilt wird</string>\n    <string name=\"pref_dump_crash_logs\">Absturzprotokolle teilen</string>\n    <string name=\"action_desc\">Absteigend</string>\n    <string name=\"action_asc\">Aufsteigend</string>\n    <string name=\"action_order_by_chapter_number\">Nach Kapitelnummer</string>\n    <string name=\"action_order_by_upload_date\">Nach Upload-Datum</string>\n    <string name=\"action_filter_tracked\">Getrackt</string>\n    <string name=\"action_display_show_number_of_items\">Anzahl der Elemente anzeigen</string>\n    <string name=\"right_and_left_nav\">Rechts und Links</string>\n    <string name=\"pref_dual_page_split\">Breite Seiten aufteilen</string>\n    <string name=\"pref_dual_page_invert_summary\">Falls die Platzierung der aufgeteilten Seiten nicht mit der Leserichtung übereinstimmt</string>\n    <string name=\"pref_dual_page_invert\">Platzierung aufgeteilter Seiten umkehren</string>\n    <string name=\"backup_restore_content_full\">Du musst jegliche fehlende Erweiterungen installieren und dich anschließend bei den Tracking-Anbietern einloggen, um sie zu benutzen.</string>\n    <string name=\"pref_show_navigation_mode_summary\">Kurz anzeigen, wenn der Leser geöffnet wird</string>\n    <string name=\"pref_show_navigation_mode\">Tippzonen-Overlay anzeigen</string>\n    <string name=\"nav_zone_right\">Rechts</string>\n    <string name=\"nav_zone_left\">Links</string>\n    <string name=\"nav_zone_next\">Weiter</string>\n    <string name=\"nav_zone_prev\">Zurück</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"exclude\">Ausschließen: %s</string>\n    <string name=\"include\">Einschließen: %s</string>\n    <string name=\"none\">Nichts</string>\n    <string name=\"action_sort_chapter_fetch_date\">Abrufdatum des Kapitels</string>\n    <string name=\"pref_download_new_categories_details\">Einträge in ausgeschlossenen Kategorien werden nicht heruntergeladen, auch wenn sie in eingeschlossenen Kategorien vorhanden sind.</string>\n    <string name=\"pref_category_auto_download\">Automatisches Herunterladen</string>\n    <string name=\"pref_library_update_categories_details\">Einträge in ausgeschlossenen Kategorien werden nicht aktualisiert, auch wenn sie in eingeschlossenen Kategorien vorhanden sind.</string>\n    <string name=\"action_show_errors\">Tippe, um Details anzuzeigen</string>\n    <string name=\"update_check_eol\">Diese Android-Version wird nicht mehr unterstützt</string>\n    <string name=\"clipboard_copy_error\">Kopieren in die Zwischenablage fehlgeschlagen</string>\n    <string name=\"rotation_landscape\">Querformat</string>\n    <string name=\"rotation_portrait\">Hochformat</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Erstellt Ordner nach den Titeln der Einträge</string>\n    <string name=\"pref_create_folder_per_manga\">Seiten in separaten Ordnern speichern</string>\n    <string name=\"rotation_type\">Ausrichtung</string>\n    <string name=\"pref_reader_actions\">Aktionen</string>\n    <string name=\"pref_grayscale\">Graustufen</string>\n    <string name=\"notification_incognito_text\">Inkognito-Modus deaktivieren</string>\n    <string name=\"automatic_background\">Automatisch</string>\n    <string name=\"cancel_all_for_series\">Alles für diese Serie abbrechen</string>\n    <string name=\"error_no_match\">Keine Übereinstimmung gefunden</string>\n    <string name=\"source_unsupported\">Quelle wird nicht unterstützt</string>\n    <string name=\"unread\">Ungelesen</string>\n    <string name=\"date\">Datum</string>\n    <string name=\"local_filter_order_by\">Sortiere nach</string>\n    <string name=\"local_invalid_format\">Ungültiges Kapitelformat</string>\n    <string name=\"chapter_not_found\">Kapitel nicht gefunden</string>\n    <string name=\"restrictions\">Einschränkungen: %s</string>\n    <string name=\"action_display_local_badge\">Lokale Quelle</string>\n    <string name=\"off\">Aus</string>\n    <string name=\"on\">An</string>\n    <string name=\"error_sharing_cover\">Fehler beim Teilen des Covers</string>\n    <string name=\"error_saving_cover\">Fehler beim Speichern des Covers</string>\n    <string name=\"cover_saved\">Cover gespeichert</string>\n    <string name=\"manga_cover\">Cover</string>\n    <string name=\"categorized_display_settings\">Sortierungseinstellungen pro Kategorie</string>\n    <string name=\"tracking_guide\">Tracking-Anleitung</string>\n    <string name=\"information_empty_category_dialog\">Du hast noch keine Kategorien.</string>\n    <string name=\"action_start_downloading_now\">Download jetzt starten</string>\n    <string name=\"about_dont_kill_my_app\">Einige Hersteller haben zusätzliche App-Beschränkungen, die Hintergrunddienste stoppen. Diese Webseite hat mehr Informationen darüber, wie man dies beheben kann.</string>\n    <string name=\"restore_miui_warning\">Die Sicherung/Wiederherstellung funktioniert möglicherweise nicht richtig, wenn die MIUI-Optimierung deaktiviert ist.</string>\n    <string name=\"pref_dark_theme_pure_black\">Tiefschwarzer Dunkelmodus</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Erdbeer-Daiquiri</string>\n    <string name=\"theme_midnightdusk\">Mitternachtsdämmerung</string>\n    <string name=\"theme_greenapple\">Grüner Apfel</string>\n    <string name=\"pref_app_theme\">App-Design</string>\n    <string name=\"enhanced_services\">Erweiterte Tracker</string>\n    <string name=\"enhanced_tracking_info\">Bieten für bestimmte Quellen erweiterte Funktionen an. Einträge werden automatisch getrackt, wenn sie deiner Bibliothek hinzugefügt werden.</string>\n    <string name=\"theme_monet\">Dynamisch</string>\n    <string name=\"label_background_activity\">Hintergrundaktivität</string>\n    <string name=\"pref_lowest\">Niedrigste</string>\n    <string name=\"pref_low\">Niedrig</string>\n    <string name=\"pref_high\">Hoch</string>\n    <string name=\"pref_highest\">Höchste</string>\n    <string name=\"pref_hide_threshold\">Empfindlichkeit für das Menü-Ausblenden beim Scrollen</string>\n    <string name=\"pref_inverted_colors\">Invertiert</string>\n    <string name=\"relative_time_today\">Heute</string>\n    <string name=\"theme_tealturquoise\">Blaugrün &amp; Türkis</string>\n    <string name=\"pref_category_appearance\">Erscheinungsbild</string>\n    <string name=\"confirm_lock_change\">Authentifiziere dich, um die Änderungen zu bestätigen</string>\n    <string name=\"label_default\">Standard</string>\n    <string name=\"action_track\">Tracken</string>\n    <string name=\"getting_started_guide\">Leitfaden für den Einstieg</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet-Benutzeroberfläche</string>\n    <string name=\"pref_remove_exclude_categories\">Ausgeschlossene Kategorien</string>\n    <string name=\"help_translate\">Beim Übersetzen mithelfen</string>\n    <string name=\"ext_app_info\">App-Informationen</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installiere und starte Shizuku, um Shizuku als Installationsprogramm für Erweiterungen zu verwenden.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku läuft nicht</string>\n    <string name=\"ext_installer_legacy\">Legacy</string>\n    <string name=\"ext_installer_pref\">Installationsprogramm</string>\n    <string name=\"ext_install_service_notif\">Erweiterung wird installiert…</string>\n    <string name=\"action_sort_count\">Einträge insgesamt</string>\n    <string name=\"pref_verbose_logging\">Ausführliche Protokollierung</string>\n    <string name=\"pref_verbose_logging_summary\">Ausführliche Protokolle im Systemprotokoll ausgeben (verringert die App-Leistung)</string>\n    <string name=\"action_display_language_badge\">Sprache</string>\n    <string name=\"label_warning\">Warnung</string>\n    <string name=\"notification_size_warning\">Große Aktualisierungen schaden Quellen und könnten zu langsameren Aktualisierungen sowie höherem Akkuverbrauch führen. Tippe, um mehr zu erfahren.</string>\n    <string name=\"backup_info\">Du solltest Kopien der Datensicherungen auch an anderen Orten aufbewahren. Datensicherungen beinhalten möglicherweise sensible Daten, einschließlich gespeicherter Passwörter. Sei vorsichtig beim Teilen.</string>\n    <string name=\"connected_to_wifi\">Nur über WLAN</string>\n    <string name=\"update_72hour\">Alle 3 Tage</string>\n    <string name=\"download_queue_size_warning\">Achtung: Große Downloads könnten dazu führen, dass Quellen langsamer werden und/oder Mihon blockieren. Tippe, um mehr zu erfahren.</string>\n    <string name=\"ext_update_all\">Alle aktualisieren</string>\n    <string name=\"channel_app_updates\">App-Updates</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Kapitel-Zwischenspeicher beim Öffnen der App löschen</string>\n    <string name=\"clear_database_source_item_count\">%1$d Nicht-Bibliothekseinträge in der Datenbank</string>\n    <string name=\"database_clean\">Nichts zu bereinigen</string>\n    <string name=\"extension_api_error\">Laden der verfügbaren Erweiterungen ist fehlgeschlagen</string>\n    <string name=\"privacy_policy\">Datenschutzbestimmungen</string>\n    <string name=\"pref_update_only_completely_read\">Einträge mit ungelesen Kapiteln überspringen</string>\n    <string name=\"library_errors_help\">Für Hilfe zum Beheben von Fehlern bei Bibliotheksaktualisierungen, siehe %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Als CBZ-Archiv speichern</string>\n    <string name=\"cancelled\">Abgebrochen</string>\n    <string name=\"on_hiatus\">Unterbrochen</string>\n    <string name=\"publishing_finished\">Veröffentlichung abgeschlossen</string>\n    <string name=\"action_show_manga\">Eintrag anzeigen</string>\n    <string name=\"action_display_cover_only_grid\">Nur-Cover-Kacheln</string>\n    <string name=\"pref_landscape_zoom\">Bei breiten Bildern automatisch hineinzoomen</string>\n    <string name=\"pref_navigate_pan\">Innerhalb breiter Seiten navigieren</string>\n    <string name=\"pref_update_only_started\">Nicht begonnene Einträge überspringen</string>\n    <string name=\"skipped_reason_completed\">Übersprungen, da die Serie abgeschlossen ist</string>\n    <string name=\"skipped_reason_not_caught_up\">Übersprungen, weil es ungelesene Kapitel gibt</string>\n    <string name=\"skipped_reason_not_started\">Übersprungen, weil keine Kapitel gelesen wurden</string>\n    <string name=\"notification_update_error\">%1$d Aktualisierung(en) fehlgeschlagen</string>\n    <string name=\"learn_more\">Antippen, um mehr zu erfahren</string>\n    <string name=\"rotation_reverse_portrait\">Umgekehrtes Hochformat</string>\n    <string name=\"action_move_to_top_all_for_series\">Serie nach oben verschieben</string>\n    <string name=\"disabled_nav\">Deaktiviert</string>\n    <string name=\"error_saving_picture\">Fehler beim Speichern des Bildes</string>\n    <string name=\"empty_backup_error\">Keine zu sichernden Bibliothekseinträge verfügbar</string>\n    <string name=\"update_check_open\">Auf GitHub öffnen</string>\n    <string name=\"pref_clear_webview_data\">WebView-Daten löschen</string>\n    <string name=\"webview_data_deleted\">WebView-Daten gelöscht</string>\n    <string name=\"action_close\">Schließen</string>\n    <string name=\"source_filter_empty_screen\">Keine installierte Quelle gefunden</string>\n    <string name=\"source_empty_screen\">Keine Quelle gefunden</string>\n    <string name=\"action_sort_unread_count\">Anzahl an Ungelesenem</string>\n    <string name=\"action_sort_last_manga_update\">Letzte Aktualisierungsprüfung</string>\n    <string name=\"split_tall_images_summary\">Verbessert die Leserleistung</string>\n    <string name=\"download_notifier_split_page_not_found\">Seite %d während des Aufteilens nicht gefunden</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Dateipfad der Seite %d konnte nicht gefunden werden</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Setzt den Lesemodus und die Ausrichtung aller Serien zurück</string>\n    <string name=\"pref_reset_viewer_flags\">Lesereinstellungen für jede Serie zurücksetzen</string>\n    <string name=\"pref_reset_viewer_flags_success\">Alle Lesereinstellungen zurückgesetzt</string>\n    <string name=\"pref_reset_viewer_flags_error\">Lesereinstellungen konnten nicht zurückgesetzt werden</string>\n    <string name=\"empty_screen\">Tja, das ist jetzt etwas peinlich</string>\n    <string name=\"ext_info_version\">Version</string>\n    <string name=\"ext_info_language\">Sprache</string>\n    <string name=\"ext_info_age_rating\">Altersfreigabe</string>\n    <string name=\"wish_list\">Wunschliste</string>\n    <string name=\"complete_list\">Abgeschlossen-Liste</string>\n    <string name=\"on_hold_list\">Warteliste</string>\n    <string name=\"unfinished_list\">Unvollendet-Liste</string>\n    <string name=\"reading_list\">Leseliste</string>\n    <string name=\"network_not_metered\">Nur im nicht tarifgebundenen Netz</string>\n    <string name=\"cant_open_last_read_chapter\">Zuletzt gelesenes Kapitel konnte nicht geöffnet werden</string>\n    <string name=\"custom_cover\">Benutzerdefiniertes Cover</string>\n    <string name=\"not_installed\">Nicht installiert</string>\n    <string name=\"pref_app_language\">App-Sprache</string>\n    <string name=\"theme_lavender\">Lavendel</string>\n    <string name=\"description_placeholder\">Keine Beschreibung</string>\n    <string name=\"delete_category_confirmation\">Möchtest du die Kategorie „%s“ löschen?</string>\n    <string name=\"delete_category\">Kategorie löschen</string>\n    <string name=\"internal_error\">InternalError: Überprüfe die Absturzprotokolle für mehr Infos</string>\n    <string name=\"pref_user_agent_string\">Standard-User-Agent-Text</string>\n    <string name=\"pref_reset_user_agent_string\">Standard-User-Agent-Text zurücksetzen</string>\n    <string name=\"action_remove_everything\">Alles entfernen</string>\n    <string name=\"appwidget_updates_description\">Deine kürzlich aktualisierten Bibliothekseinträge ansehen</string>\n    <string name=\"appwidget_unavailable_locked\">Widget ist nicht verfügbar, wenn die App-Sperre aktiviert ist</string>\n    <string name=\"update_already_running\">Ein Update ist bereits im Gange</string>\n    <string name=\"error_user_agent_string_blank\">User-Agent-Text darf nicht leer sein</string>\n    <string name=\"theme_tidalwave\">Flutwelle</string>\n    <string name=\"download_ahead\">Im Voraus herunterladen</string>\n    <string name=\"auto_download_while_reading\">Automatisch während des Lesens herunterladen</string>\n    <string name=\"download_ahead_info\">Funktioniert nur, wenn das aktuelle Kapitel sowie das darauf folgende bereits heruntergeladen sind.</string>\n    <string name=\"are_you_sure\">Bist du dir sicher?</string>\n    <string name=\"remove_manga\">Du bist gerade dabei, „%s“ aus deiner Bibliothek zu entfernen</string>\n    <string name=\"multi_lang\">Mehrere Sprachen</string>\n    <string name=\"updates_last_update_info\">Bibliothek zuletzt aktualisiert: %s</string>\n    <string name=\"popular\">Beliebt</string>\n    <string name=\"missing_storage_permission\">Speicherberechtigungen nicht erteilt</string>\n    <string name=\"skipped_reason_not_always_update\">Übersprungen, da die Serie keine Aktualisierung benötigt</string>\n    <string name=\"action_search_hint\">Suchen…</string>\n    <string name=\"pref_appearance_summary\">Thema, Datums- und Zeitformat</string>\n    <string name=\"pref_reader_summary\">Lesemodus, Anzeige, Navigation</string>\n    <string name=\"pref_downloads_summary\">Automatische Downloads, im Voraus herunterladen</string>\n    <string name=\"pref_library_summary\">Kategorien, globale Aktualisierungen, Kapitelaktionen</string>\n    <string name=\"crash_screen_restart_application\">App neustarten</string>\n    <string name=\"pref_tracking_summary\">Einweg-Synchronisation, erweiterte Synchronisation</string>\n    <string name=\"pref_browse_summary\">Quellen, Erweiterungen, globale Suche</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"pref_advanced_summary\">Absturzprotokolle ausgeben, Akkuverbrauch-Optimierung</string>\n    <string name=\"pref_backup_summary\">Manuelle und automatische Datensicherungen, Speicherplatz</string>\n    <string name=\"crash_screen_description\">%s ist auf einen unerwarteten Fehler gestoßen. Wir empfehlen dir, die Absturzprotokolle in unseren Support-Kanal auf Discord zu teilen.</string>\n    <string name=\"pref_security_summary\">App-Sperre, sicherer Bildschirm</string>\n    <string name=\"unknown_title\">Unbekannter Titel</string>\n    <string name=\"invalid_location\">Ungültiger Speicherort: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Ungültiger User-Agent-Text</string>\n    <string name=\"updates_last_update_info_just_now\">Gerade eben</string>\n    <string name=\"download_notifier_cache_renewal\">Downloads werden überprüft</string>\n    <string name=\"action_open_random_manga\">Zufälligen Eintrag öffnen</string>\n    <string name=\"information_no_entries_found\">Keine Einträge in dieser Kategorie gefunden</string>\n    <string name=\"fdroid_warning\">F-Droid-Builds werden nicht offiziell unterstützt.\n\\nTippe, um mehr zu erfahren.</string>\n    <string name=\"action_display_show_continue_reading_button\">Weiterlesen-Button</string>\n    <string name=\"pref_invalidate_download_cache\">Downloads neu indizieren</string>\n    <string name=\"track_remove_date_conf_title\">Datum entfernen?</string>\n    <string name=\"track_remove_start_date_conf_text\">Dies wird dein zuvor gewähltes Startdatum von %s entfernen</string>\n    <string name=\"track_remove_finish_date_conf_text\">Dies wird dein zuvor gewähltes Enddatum von %s entfernen</string>\n    <string name=\"pref_invalidate_download_cache_summary\">App zwingen, heruntergeladene Kapitel erneut zu überprüfen</string>\n    <string name=\"label_overview_section\">Übersicht</string>\n    <string name=\"label_downloaded\">Heruntergeladen</string>\n    <string name=\"label_read_duration\">Lesedauer</string>\n    <string name=\"label_titles_in_global_update\">In der globalen Aktualisierung</string>\n    <string name=\"label_total_chapters\">Insgesamt</string>\n    <string name=\"label_read_chapters\">Gelesen</string>\n    <string name=\"label_mean_score\">Durchschnittswert</string>\n    <string name=\"label_used\">Verwendet</string>\n    <string name=\"not_applicable\">n. a.</string>\n    <string name=\"day_short\">%d d</string>\n    <string name=\"hour_short\">%d h</string>\n    <string name=\"label_local\">Lokal</string>\n    <string name=\"label_tracked_titles\">Getrackte Einträge</string>\n    <string name=\"label_completed_titles\">Abgeschlossene Einträge</string>\n    <string name=\"label_stats\">Statistiken</string>\n    <string name=\"label_started\">Gestartet</string>\n    <string name=\"label_titles_section\">Einträge</string>\n    <string name=\"label_tracker_section\">Tracker</string>\n    <string name=\"minute_short\">%d min</string>\n    <string name=\"seconds_short\">%d s</string>\n    <string name=\"action_not_now\">Nicht jetzt</string>\n    <string name=\"information_no_manga_category\">Kategorie ist leer</string>\n    <string name=\"pref_library_update_show_tab_badge\">Anzahl an Ungelesenem auf dem „Neues“-Symbol anzeigen</string>\n    <string name=\"copied_to_clipboard_plain\">In die Zwischenablage kopiert</string>\n    <string name=\"enhanced_services_not_installed\">Verfügbar, aber Quelle ist nicht installiert: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Doppelte Kapitel überspringen</string>\n    <string name=\"confirm_add_duplicate_manga\">In deiner Bibliothek gibt es einen Eintrag mit dem gleichen Namen.\n\\n\n\\nMöchtest du trotzdem fortfahren?</string>\n    <string name=\"track_error\">%1$s-Fehler: %2$s</string>\n    <string name=\"information_required_plain\">*erforderlich</string>\n    <string name=\"pref_hide_in_library_items\">Einträge verbergen, die bereits in der Bibliothek sind</string>\n    <string name=\"action_copy_to_clipboard\">In die Zwischenablage kopieren</string>\n    <string name=\"action_update_category\">Kategorie aktualisieren</string>\n    <string name=\"split_tall_images\">Hohe Bilder teilen</string>\n    <string name=\"overlay_header\">Overlay</string>\n    <string name=\"pref_page_rotate\">Breite Seiten drehen, damit sie passen</string>\n    <string name=\"pref_page_rotate_invert\">Ausrichtung gedrehter breiter Seiten spiegeln</string>\n    <string name=\"pref_debug_info\">Debug-Info</string>\n    <string name=\"pref_chapter_swipe_end\">Kapitel beim Streichen nach rechts</string>\n    <string name=\"pref_chapter_swipe_start\">Kapitel beim Streichen nach links</string>\n    <string name=\"pref_double_tap_zoom\">Zum Zoomen doppeltippen</string>\n    <string name=\"intervals_header\">Intervalle</string>\n    <string name=\"action_filter_interval_custom\">Benutzerdefiniertes Aktualisierungsintervall</string>\n    <string name=\"action_set_interval\">Intervall einstellen</string>\n    <string name=\"action_sort_next_updated\">Nächste erwartete Aktualisierung</string>\n    <string name=\"pref_update_only_in_release_period\">Nächsten Veröffentlichungszeitpunkt vorhersagen</string>\n    <string name=\"skipped_reason_not_in_release_period\">Übersprungen, da heute keine Veröffentlichung erwartet wurde</string>\n    <string name=\"manga_display_interval_title\">Schätzt alle</string>\n    <string name=\"manga_display_modified_interval_title\">Aktualisiert alle</string>\n    <string name=\"track_delete_text\">Dies wird das lokale Tracking entfernen.</string>\n    <string name=\"track_delete_remote_text\">Auch aus %s entfernen</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_title\">Tracking von %s entfernen?</string>\n    <string name=\"delete_downloaded\">Heruntergeladenes löschen</string>\n    <string name=\"has_results\">Hat Ergebnisse</string>\n    <string name=\"syncing_library\">Bibliothek wird synchronisiert</string>\n    <string name=\"library_sync_complete\">Bibliothekssynchronisierung abgeschlossen</string>\n    <string name=\"information_cloudflare_help\">Tippe hier, um Hilfe zu Cloudflare zu erhalten</string>\n    <string name=\"download_cache_invalidated\">Index der Downloads invalide</string>\n    <string name=\"track_activity_name\">Tracker-Login</string>\n    <string name=\"create_backup_file_error\">Sicherungsdatei konnte nicht erstellt werden</string>\n    <string name=\"exception_http\">HTTP %d, überprüfe die Webseite in WebView</string>\n    <string name=\"exception_offline\">Keine Internetverbindung</string>\n    <string name=\"exception_unknown_host\">%s konnte nicht erreicht werden</string>\n    <string name=\"unlock_app_title\">%s entsperren</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Serie nach unten verschieben</string>\n    <string name=\"pref_relative_format\">Relative Zeitstempel</string>\n    <string name=\"pref_relative_format_summary\">„%1$s“ anstelle von „%2$s“</string>\n    <string name=\"app_settings\">App-Einstellungen</string>\n    <string name=\"source_settings\">Quelleneinstellungen</string>\n    <string name=\"notification_updating_progress\">Bibliothek wird aktualisiert… (%s)</string>\n    <string name=\"file_null_uri_error\">Keine Datei ausgewählt</string>\n    <string name=\"relative_time_span_never\">Nie</string>\n    <string name=\"pref_flash_page_summ\">Reduziert Ghosting auf E-Papier-Displays</string>\n    <string name=\"last_auto_backup_info\">Zuletzt automatisch gesichert: %s</string>\n    <string name=\"pref_flash_page\">Bei Umblättern aufleuchten</string>\n    <string name=\"label_data_storage\">Daten und Speicher</string>\n    <string name=\"action_create\">Erstellen</string>\n    <string name=\"action_apply\">Anwenden</string>\n    <string name=\"action_revert_to_default\">Auf Standard zurücksetzen</string>\n    <string name=\"no_scanlators_found\">Keine Scanlatoren gefunden</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"pref_storage_usage\">Speichernutzung</string>\n    <string name=\"action_sort_tracker_score\">Tracker-Bewertung</string>\n    <string name=\"exclude_scanlators\">Scanlatoren ausschließen</string>\n    <string name=\"selected\">Ausgewählt</string>\n    <string name=\"not_selected\">Nicht ausgewählt</string>\n    <string name=\"pref_storage_location\">Speicherort</string>\n    <string name=\"pref_storage_location_info\">Wird für automatische Datensicherungen, heruntergeladene Kapitel und lokale Quellen verwendet.</string>\n    <string name=\"action_menu_overflow_description\">Weitere Optionen</string>\n    <string name=\"action_bar_up_description\">Nach oben navigieren</string>\n    <string name=\"onboarding_storage_action_select\">Ordner auswählen</string>\n    <string name=\"pref_onboarding_guide\">Einführungstour</string>\n    <string name=\"onboarding_guides_new_user\">Neu bei %s? Wir empfehlen dir, unseren Einstiegsleitfaden anzusehen.</string>\n    <string name=\"onboarding_action_finish\">Loslegen</string>\n    <string name=\"onboarding_storage_selection_required\">Es muss ein Ordner ausgewählt sein</string>\n    <string name=\"onboarding_heading\">Willkommen!</string>\n    <string name=\"onboarding_guides_returning_user\">%s reinstalliert?</string>\n    <string name=\"onboarding_action_skip\">Überspringen</string>\n    <string name=\"onboarding_action_next\">Weiter</string>\n    <string name=\"onboarding_description\">Lass uns zuerst ein paar Dinge einrichten. Du kannst diese später in den Einstellungen jederzeit ändern.</string>\n    <string name=\"no_location_set\">Kein Speicherort festgelegt</string>\n    <string name=\"onboarding_storage_info\">Wähle einen Ordner aus, in welchem %1$s Kapitel-Downloads, Datensicherungen und mehr speichern wird.\n\\n\n\\nEin dedizierter Ordner wird empfohlen.\n\\n\n\\nAusgewählter Ordner: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Berechtigung für Benachrichtigungen</string>\n    <string name=\"onboarding_permission_install_apps\">Berechtigung zum Installieren von Apps</string>\n    <string name=\"available_disk_space_info\">Verfügbar: %1$s / Insgesamt: %2$s</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Verhindere Unterbrechungen bei lang anhaltenden Bibliotheksaktualisierungen, Downloads und Sicherungswiederherstellungen.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Akkunutzung im Hintergrund</string>\n    <string name=\"onboarding_permission_install_apps_description\">Zum Installieren von Quellenerweiterungen.</string>\n    <string name=\"onboarding_permission_notifications_description\">Erhalte Benachrichtigungen für Bibliotheksaktualisierungen und mehr.</string>\n    <string name=\"ext_permission_install_apps_warning\">Für das Installieren von Erweiterungen sind Berechtigungen erforderlich. Tippe hier, um sie zu gewähren.</string>\n    <string name=\"private_settings\">Sensible Einstellungen einbeziehen (z. B. Login-Token für Tracker)</string>\n    <string name=\"onboarding_permission_action_grant\">Zulassen</string>\n    <string name=\"invalid_backup_file_error\">Vollständiger Fehler:</string>\n    <string name=\"manga_interval_custom_amount\">Benutzerdefinierte Aktualisierungshäufigkeit:</string>\n    <string name=\"label_extension_repos\">Erweiterungs-Repositorys</string>\n    <string name=\"information_empty_repos\">Es wurden noch keine Repositorys festgelegt.</string>\n    <string name=\"action_add_repo\">Repository hinzufügen</string>\n    <string name=\"error_repo_exists\">Dieses Repository existiert bereits!</string>\n    <string name=\"action_delete_repo\">Repository löschen</string>\n    <string name=\"delete_repo_confirmation\">Möchtest du das Repository „%s“ löschen?</string>\n    <string name=\"onboarding_storage_help_info\">Du aktualisierst von einer älteren Version und bist dir nicht sicher, was du auswählen sollst? Schau dir den Speicherleitfaden für mehr Informationen an.</string>\n    <string name=\"onboarding_storage_help_action\">Speicherleitfaden</string>\n    <string name=\"pref_library_update_smart_update\">Intelligentes Aktualisieren</string>\n    <string name=\"label_add_repo_input\">Repository-URL</string>\n    <string name=\"action_add_repo_message\">Füge zusätzliche Repositorys zu Mihon hinzu. Deren URLs sollten mit „index.min.json“ enden.</string>\n    <string name=\"invalid_repo_name\">Ungültige Repository-URL</string>\n    <string name=\"manga_interval_expected_update\">Ca. %1$s bis zur Veröffentlichung neuer Kapitel, wird ca. alle %2$s überprüft.</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"action_open_repo\">Open-Source-Repository</string>\n    <string name=\"manga_interval_expected_update_soon\">Bald</string>\n    <string name=\"ext_revoke_trust\">Zertifikatsbestätigungen zurücknehmen</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Rauszoomen deaktivieren</string>\n    <string name=\"pref_display_profile\">Benutzerdefiniertes Anzeigeprofil</string>\n    <string name=\"action_add_anyway\">Trotzdem hinzufügen</string>\n    <string name=\"action_migrate_duplicate\">Existierenden Eintrag migrieren</string>\n    <string name=\"action_replace_repo\">Ersetzen</string>\n    <string name=\"action_replace_repo_title\">Signaturschlüssel-Fingerprint existiert bereits</string>\n    <string name=\"action_replace_repo_message\">Repository %1$s hat den gleichen Signaturschlüssel-Fingerprint wie %2$s.\n\\nFalls das erwünscht ist, wird %2$s nun ersetzt. Falls nicht, kontaktiere den Repository-Maintainer.</string>\n    <string name=\"upcoming_calendar_next\">Nächster Monat</string>\n    <string name=\"upcoming_calendar_prev\">Vorheriger Monat</string>\n    <string name=\"label_upcoming\">Bevorstehend</string>\n    <string name=\"action_view_upcoming\">Bevorstehende Aktualisierungen ansehen</string>\n    <string name=\"upcoming_guide\">Leitfaden für Bevorstehendes</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Dauerhafter Ordnerzugriff konnte nicht erlangt werden. Die App kann sich unerwartet verhalten.</string>\n    <string name=\"manga_interval_expected_update_null\">Dieser Manga ist entweder abgeschlossen, oder es existiert kein geschätztes Veröffentlichungsdatum.</string>\n    <string name=\"pref_flash_page_interval\">Leuchte jede</string>\n    <string name=\"pref_flash_with\">Leuchte mit</string>\n    <string name=\"pref_flash_style_black\">Schwarz</string>\n    <string name=\"pref_flash_style_white\">Weiß</string>\n    <string name=\"pref_flash_style_white_black\">Weiß und Schwarz</string>\n    <string name=\"pref_flash_duration\">Dauer des Leuchtens</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"action_copy_link\">Link kopieren</string>\n    <string name=\"extensionRepo_settings\">Erweiterungsrepositorys</string>\n    <string name=\"invalid_backup_file_unknown\">Sicherungsdatei ist beschädigt</string>\n    <string name=\"invalid_backup_file_json\">JSON-Sicherung wird nicht unterstützt</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Herunterladen von doppelten gelesenen Kapiteln überspringen</string>\n    <string name=\"add_repo_confirmation\">Möchtest du das Repository \\\"%s\\\" hinzufügen?</string>\n    <string name=\"confirm_tracker_update\">Tracker auf Kapitel %d aktualisieren?</string>\n    <string name=\"pref_firebase\">Datenerhebung und Absturzprotokolle</string>\n    <string name=\"onboarding_permission_analytics_description\">Sende anonymisierte Nutzungsdaten, um App-Funktionen zu verbessern.</string>\n    <string name=\"onboarding_permission_analytics\">Datenerhebung zulassen</string>\n    <string name=\"action_sort_random\">Zufällig</string>\n    <string name=\"onboarding_permission_crashlytics\">Absturzprotokolle senden</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Anonymisierte Absturzprotokolle an das Entwicklerteam senden.</string>\n    <string name=\"pref_security\">Sicherheit</string>\n    <string name=\"firebase_summary\">Das Übermitteln von Absturzprotokollen und erhobenen Daten ermöglicht es uns, Probleme zu erkennen und zu beheben, die Leistung zu verbessern und künftige Updates besser auf deine Bedürfnisse abzustimmen</string>\n    <string name=\"ext_remove\">Entfernen</string>\n    <string name=\"ext_confirm_remove\">Erweiterung entfernen?</string>\n    <string name=\"remove_private_extension_message\">Möchtest du die Erweiterung „%s“ wirklich entfernen?</string>\n    <string name=\"non_library_settings\">Alle gelesenen Einträge</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Fortschritt aktualisieren, wenn als gelesen markiert wird</string>\n    <string name=\"trackers_updated_summary\">Tracker auf Kapitel %d aktualisiert</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Reduziert stufenweise den Grenzwert, wenn der Leser nur ein leeres Bild lädt.\\nAusgewählt: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Benutzerdefinierter Hardware-Bitmap-Grenzwert</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Standard (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Beeinflusst die Leistung. Nur aktivieren, wenn das Reduzieren des Bitmap-Grenzwerts das Problem von leeren Bildern nicht behebt</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Leseverlauf für eine Erweiterung pausieren</string>\n    <string name=\"label_auto\">Automatisch</string>\n    <string name=\"theme_monochrome\">Monochrom</string>\n    <string name=\"tracked_privately\">Privat getrackt</string>\n    <string name=\"action_toggle_private_on\">Privat tracken</string>\n    <string name=\"action_toggle_private_off\">Öffentlich tracken</string>\n    <string name=\"library_list\">Bibliotheksliste</string>\n    <string name=\"library_exported\">Bibliothek exportiert</string>\n    <string name=\"author\">Autor</string>\n    <string name=\"export\">Exportieren</string>\n    <string name=\"artist\">Illustrator</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Legacy-Decoder für Langer-Streifen-Leser verwenden</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Doppeltes gelesenes Kapitel als gelesen markieren</string>\n    <string name=\"action_display_unread_badge\">Ungelesene Kapitel</string>\n    <string name=\"pref_behavior\">Verhalten</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_new\">Nach dem Abrufen eines neuen Kapitels</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_existing\">Nach dem Lesen eines Kapitels</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/el/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d νέο κεφάλαιο</item>\n        <item quantity=\"other\">%1$d νέα κεφάλαια</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Για %d καταχώριση</item>\n        <item quantity=\"other\">Για %d καταχωρίσεις</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Διαθέσιμη ενημέρωση επέκτασης</item>\n        <item quantity=\"other\">%d διαθέσιμες ενημερώσεις επεκτάσεων</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Μετά από %1$s λεπτό</item>\n        <item quantity=\"other\">Μετά από %1$s λεπτά</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Κεφάλαια %1$s και 1 ακόμη</item>\n        <item quantity=\"other\">Κεφάλαια %1$s και %2$d ακόμη</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s που απομένει</item>\n        <item quantity=\"other\">%1$s που απομένουν</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d κατηγορία</item>\n        <item quantity=\"other\">%d κατηγορίες</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Έγινε σε %1$s με %2$s σφάλμα</item>\n        <item quantity=\"other\">Έγινε σε %1$s με %2$s σφάλματα</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s κεφάλαιο</item>\n        <item quantity=\"other\">%1$s κεφάλαια</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d ιχνηλάτης</item>\n        <item quantity=\"other\">%d ιχνηλάτες</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Παραλείπεται %d κεφάλαιο, είτε λείπει από την πηγή είτε έχει φιλτραριστεί</item>\n        <item quantity=\"other\">Παραλείπονται %d κεφάλαια, είτε λείπουν από την πηγή είτε έχουν φιλτραριστεί</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Εχθές</item>\n        <item quantity=\"other\">%1$d μέρες πριν</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Επόμενο αδιάβαστο κεφάλαιο</item>\n        <item quantity=\"other\">Επόμενα %d αδιάβαστα κεφάλαια</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Επόμενο κεφάλαιο</item>\n        <item quantity=\"other\">Επόμενα %d κεφάλαια</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Λείπει %1$s κεφάλαιο</item>\n        <item quantity=\"other\">Λείπουν %1$s κεφάλαια</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 ημέρα</item>\n        <item quantity=\"other\">%d ημέρες</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d αποθετήριο</item>\n        <item quantity=\"other\">%d αποθετήρια</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/el/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Όνομα</string>\n    <string name=\"categories\">Κατηγορίες</string>\n    <string name=\"manga\">Καταχωρήσεις βιβλιοθήκης</string>\n    <string name=\"chapters\">Κεφάλαια</string>\n    <string name=\"track\">Παρακολούθηση</string>\n    <string name=\"history\">Ιστορικό</string>\n    <string name=\"label_settings\">Ρυθμίσεις</string>\n    <string name=\"label_download_queue\">Ουρά λήψεων</string>\n    <string name=\"label_library\">Βιβλιοθήκη</string>\n    <string name=\"label_recent_manga\">Ιστορικό</string>\n    <string name=\"label_recent_updates\">Ενημερώσεις</string>\n    <string name=\"label_backup\">Αντίγραφο ασφαλείας και επαναφορά</string>\n    <string name=\"label_migration\">Μεταφορά</string>\n    <string name=\"label_extensions\">Επεκτάσεις</string>\n    <string name=\"label_extension_info\">Πληροφορίες επέκτασης</string>\n    <string name=\"action_settings\">Ρυθμίσεις</string>\n    <string name=\"action_filter\">Φίλτρο</string>\n    <string name=\"action_filter_bookmarked\">Στους Σελιδοδείκτες</string>\n    <string name=\"action_filter_unread\">Αδιάβαστα</string>\n    <string name=\"action_filter_empty\">Αφαίρεση φίλτρου</string>\n    <string name=\"action_sort_alpha\">Αλφαβητικά</string>\n    <string name=\"action_sort_total\">Σύνολο κεφαλαίων</string>\n    <string name=\"action_sort_last_read\">Τελευταίο αναγνωσμένο</string>\n    <string name=\"action_search\">Αναζήτηση</string>\n    <string name=\"action_global_search\">Καθολική αναζήτηση</string>\n    <string name=\"action_select_all\">Επιλογή όλων</string>\n    <string name=\"action_mark_as_read\">Σήμανση ως αναγνωσμένο</string>\n    <string name=\"action_mark_as_unread\">Σήμανση ως μη αναγνωσμένο</string>\n    <string name=\"action_mark_previous_as_read\">Σήμανση προηγούμενου ως αναγνωσμένο</string>\n    <string name=\"action_download\">Λήψη</string>\n    <string name=\"action_bookmark\">Προσθήκη σελιδοδείκτη κεφαλαίου</string>\n    <string name=\"action_remove_bookmark\">Κατάργηση σελιδοδείκτη κεφαλαίου</string>\n    <string name=\"action_delete\">Διαγραφή</string>\n    <string name=\"action_update_library\">Ενημέρωση βιβλιοθήκης</string>\n    <string name=\"action_edit\">Επεξεργασία</string>\n    <string name=\"action_add\">Προσθήκη</string>\n    <string name=\"action_add_category\">Προσθήκη κατηγορίας</string>\n    <string name=\"action_edit_categories\">Επεξεργασία κατηγοριών</string>\n    <string name=\"action_rename_category\">Μετονομασία κατηγορίας</string>\n    <string name=\"action_move_category\">Ορισμός κατηγοριών</string>\n    <string name=\"action_edit_cover\">Επεξεργασία εξώφυλλου</string>\n    <string name=\"action_pause\">Παύση</string>\n    <string name=\"action_previous_chapter\">Προηγούμενο κεφάλαιο</string>\n    <string name=\"action_next_chapter\">Επόμενο κεφάλαιο</string>\n    <string name=\"action_retry\">Επανάληψη</string>\n    <string name=\"action_remove\">Αφαίρεση</string>\n    <string name=\"action_resume\">Συνέχεια</string>\n    <string name=\"action_open_in_browser\">Άνοιγμα σε πρόγραμμα περιήγησης</string>\n    <string name=\"action_display_mode\">Λειτουργία προβολής</string>\n    <string name=\"action_display\">Προβολή</string>\n    <string name=\"action_display_grid\">Συμπαγές πλέγμα</string>\n    <string name=\"action_display_list\">Λίστα</string>\n    <string name=\"action_display_download_badge\">Ληφθέντα κεφάλαια</string>\n    <string name=\"action_cancel\">Άκυρο</string>\n    <string name=\"action_sort\">Ταξινόμηση</string>\n    <string name=\"action_install\">Εγκατάσταση</string>\n    <string name=\"action_share\">Κοινοποίηση</string>\n    <string name=\"action_save\">Αποθήκευση</string>\n    <string name=\"action_reset\">Επαναφορά</string>\n    <string name=\"action_undo\">Αναίρεση</string>\n    <string name=\"action_open_log\">Άνοιγμα αρχείου καταγραφής</string>\n    <string name=\"action_restore\">Επαναφορά</string>\n    <string name=\"loading\">Φόρτωση…</string>\n    <string name=\"app_not_available\">Μη διαθέσιμη εφαρμογή</string>\n    <string name=\"pref_category_general\">Γενικά</string>\n    <string name=\"pref_category_reader\">Αναγνώστης</string>\n    <string name=\"pref_category_downloads\">Λήψεις</string>\n    <string name=\"pref_category_tracking\">Παρακολούθηση</string>\n    <string name=\"pref_category_advanced\">Για προχωρημένους</string>\n    <string name=\"pref_category_about\">Περί</string>\n    <string name=\"pref_library_columns\">Στοιχεία ανά σειρά</string>\n    <string name=\"portrait\">Κατακόρυφα</string>\n    <string name=\"landscape\">Οριζόντια</string>\n    <string name=\"pref_library_update_interval\">Αυτόματες ενημερώσεις</string>\n    <string name=\"update_never\">Απενεργοποιημένο</string>\n    <string name=\"update_6hour\">Κάθε 6 ώρες</string>\n    <string name=\"update_12hour\">Κάθε 12 ώρες</string>\n    <string name=\"update_24hour\">Καθημερινά</string>\n    <string name=\"update_48hour\">Κάθε 2 ημέρες</string>\n    <string name=\"update_weekly\">Εβδομαδιαία</string>\n    <string name=\"all\">Όλα</string>\n    <string name=\"pref_library_update_restriction\">Περιορισμοί αυτόματων ενημερώσεων συσκευής</string>\n    <string name=\"charging\">Κατά τη φόρτιση</string>\n    <string name=\"pref_update_only_non_completed\">Παράλειψη καταχωρήσεων με κατάσταση \\\"Ολοκληρώθηκε\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Ενημέρωση προόδου μετά την ανάγνωση</string>\n    <string name=\"default_category\">Προεπιλεγμένη κατηγορία</string>\n    <string name=\"default_category_summary\">Ερώτηση πάντα</string>\n    <string name=\"ext_update\">Ενημέρωση</string>\n    <string name=\"ext_install\">Εγκατάσταση</string>\n    <string name=\"ext_pending\">Αναμονή</string>\n    <string name=\"ext_downloading\">Γίνεται λήψη</string>\n    <string name=\"ext_installing\">Εγκατάσταση</string>\n    <string name=\"ext_installed\">Εγκαταστημένο</string>\n    <string name=\"ext_trust\">Εμπιστέψου</string>\n    <string name=\"ext_untrusted\">Μη αξιόπιστο</string>\n    <string name=\"ext_uninstall\">Απεγκατάσταση</string>\n    <string name=\"untrusted_extension\">Μη αξιόπιστη επέκταση</string>\n    <string name=\"untrusted_extension_message\">Οι κακόβουλες επεκτάσεις μπορούν να διαβάσουν τυχόν αποθηκευμένα διαπιστευτήρια σύνδεσης ή να εκτελέσουν αυθαίρετο κώδικα.\n\\n\n\\nΜε την εμπιστοσύνη αυτής της επέκτασης, αποδέχεστε αυτούς τους κινδύνους.</string>\n    <string name=\"pref_fullscreen\">Πλήρης οθόνη</string>\n    <string name=\"pref_page_transitions\">Ζωντανή μετάβαση σελίδας</string>\n    <string name=\"pref_double_tap_anim_speed\">Ταχύτητα κίνησης διπλού αγγίγματος</string>\n    <string name=\"pref_show_page_number\">Εμφάνιση αριθμού σελίδας</string>\n    <string name=\"pref_crop_borders\">Περικοπή άκρων</string>\n    <string name=\"pref_custom_brightness\">Προσαρμοσμένη φωτεινότητα</string>\n    <string name=\"pref_custom_color_filter\">Προσαρμοσμένο φίλτρο χρώματος</string>\n    <string name=\"pref_keep_screen_on\">Να κρατηθεί η οθόνη ανοιχτή</string>\n    <string name=\"pref_reader_navigation\">Πλοήγηση</string>\n    <string name=\"pref_read_with_volume_keys\">Πλήκτρα ήχου</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Αντιστροφή των πλήκτρων έντασης</string>\n    <string name=\"pref_reader_theme\">Χρώμα φόντου</string>\n    <string name=\"white_background\">Άσπρο</string>\n    <string name=\"black_background\">Μαύρο</string>\n    <string name=\"pref_viewer_type\">Προεπιλεγμένη λειτουργία ανάγνωσης</string>\n    <string name=\"left_to_right_viewer\">Σελιδοποιημένο (από αριστερά προς τα δεξιά)</string>\n    <string name=\"right_to_left_viewer\">Σελιδοποιημένο (από δεξιά προς τα αριστερά)</string>\n    <string name=\"vertical_viewer\">Σελιδοποιημένο (κατακόρυφα)</string>\n    <string name=\"webtoon_viewer\">Μακριά λωρίδα</string>\n    <string name=\"pager_viewer\">Σελιδοποίηση</string>\n    <string name=\"pref_image_scale_type\">Τύπος κλίμακας</string>\n    <string name=\"scale_type_fit_screen\">Προσαρμογή στην οθόνη</string>\n    <string name=\"scale_type_stretch\">Τέντωμα</string>\n    <string name=\"scale_type_fit_width\">Προσαρμογή στο πλάτος</string>\n    <string name=\"scale_type_fit_height\">Προσαρμογή στο ύψος</string>\n    <string name=\"scale_type_original_size\">Αρχικό μέγεθος</string>\n    <string name=\"scale_type_smart_fit\">Έξυπνη προσαρμογή</string>\n    <string name=\"pref_zoom_start\">Μεγέθυνση αρχικής θέσης</string>\n    <string name=\"zoom_start_automatic\">Αυτόματα</string>\n    <string name=\"zoom_start_left\">Αριστερά</string>\n    <string name=\"zoom_start_right\">Δεξιά</string>\n    <string name=\"zoom_start_center\">Κέντρο</string>\n    <string name=\"double_tap_anim_speed_0\">Χωρίς κίνηση</string>\n    <string name=\"double_tap_anim_speed_normal\">Κανονική</string>\n    <string name=\"double_tap_anim_speed_fast\">Γρήγορη</string>\n    <string name=\"pref_rotation_type\">Προεπιλεγμένη περιστροφή</string>\n    <string name=\"rotation_free\">Ελεύθερο</string>\n    <string name=\"rotation_force_portrait\">Κλειδωμένο κατακόρυφα</string>\n    <string name=\"rotation_force_landscape\">Κλειδωμένο οριζόντια</string>\n    <string name=\"color_filter_r_value\">Κόκκινο</string>\n    <string name=\"color_filter_g_value\">Πράσινο</string>\n    <string name=\"color_filter_b_value\">Μπλε</string>\n    <string name=\"color_filter_a_value\">Αλφα</string>\n    <string name=\"pref_remove_after_marked_as_read\">Αφού επισημανθεί χειροκίνητα ως αναγνωσμένο</string>\n    <string name=\"pref_remove_after_read\">Αυτόματη διαγραφή μετά την ανάγνωση</string>\n    <string name=\"disabled\">Απενεργοποιημένο</string>\n    <string name=\"last_read_chapter\">Τελευταίο αναγνωσμένο κεφάλαιο</string>\n    <string name=\"second_to_last\">Προτελευταίο αναγνωσμένο κεφάλαιο</string>\n    <string name=\"third_to_last\">Προ-προτελευταίο αναγνωσμένο κεφάλαιο</string>\n    <string name=\"fourth_to_last\">Προ-προ-προτελευταίο αναγνωσμένο κεφάλαιο</string>\n    <string name=\"fifth_to_last\">Προ-προ-προ-προτελευταίο αναγνωσμένο κεφάλαιο</string>\n    <string name=\"pref_download_new\">Λήψη νέων κεφαλαίων</string>\n    <string name=\"services\">Ιχνηλάτες</string>\n    <string name=\"pref_create_backup\">Δημιουργία αντιγράφου ασφαλείας</string>\n    <string name=\"pref_create_backup_summ\">Μπορεί να χρησιμοποιηθεί για επαναφορά τρέχουσας βιβλιοθήκης</string>\n    <string name=\"pref_restore_backup\">Επαναφορά αντιγράφου ασφαλείας</string>\n    <string name=\"pref_restore_backup_summ\">Επαναφορά βιβλιοθήκης από αρχείο αντιγράφου ασφαλείας</string>\n    <string name=\"pref_backup_interval\">Συχνότητα αυτόματων αντιγράφων ασφαλείας</string>\n    <string name=\"backup_created\">Δημιουργήθηκε αντίγραφο ασφαλείας</string>\n    <string name=\"restore_completed\">Η επαναφορά ολοκληρώθηκε</string>\n    <string name=\"backup_choice\">Τι αντίγραφο ασφαλείας θέλετε να δημιουργήσετε;</string>\n    <string name=\"restoring_backup\">Επαναφορά αντιγράφων ασφαλείας</string>\n    <string name=\"creating_backup\">Δημιουργία αντιγράφων ασφαλείας</string>\n    <string name=\"pref_clear_chapter_cache\">Καθάρισμα προσωρινής μνήμης κεφαλαίου</string>\n    <string name=\"used_cache\">Χρησιμοποιήθηκε: %1$s</string>\n    <string name=\"cache_deleted\">Η προσωρινή μνήμη διαγράφηκε, %1$d αρχεία διαγράφηκαν</string>\n    <string name=\"cache_delete_error\">Παρουσιάστηκε σφάλμα κατά την εκκαθάριση</string>\n    <string name=\"pref_clear_cookies\">Διαγραφή cookies</string>\n    <string name=\"cookies_cleared\">Τα cookies διαγράφηκαν</string>\n    <string name=\"pref_clear_database\">Καθαρισμός βάσης δεδομένων</string>\n    <string name=\"pref_clear_database_summary\">Διαγραφή ιστορικού για καταχωρήσεις που δεν έχουν αποθηκευτεί στη βιβλιοθήκη σας</string>\n    <string name=\"clear_database_confirmation\">Είστε σίγουροι; Τα διαβασμένα κεφάλαια και η πρόοδος των καταχωρήσεων εκτός βιβλιοθήκης θα χαθούν</string>\n    <string name=\"clear_database_completed\">Οι καταχωρίσεις διαγράφηκαν</string>\n    <string name=\"version\">Έκδοση</string>\n    <string name=\"pref_enable_acra\">Αποστολή αναφορών σφαλμάτων</string>\n    <string name=\"pref_acra_summary\">Βοηθά στην επιδιόρθωση τυχόν σφαλμάτων. Δεν θα αποστέλλονται ευαίσθητα δεδομένα</string>\n    <string name=\"login_title\">Σύνδεση στο %1$s</string>\n    <string name=\"username\">Όνομα χρήστη</string>\n    <string name=\"password\">Κωδικός πρόσβασης</string>\n    <string name=\"login\">Σύνδεση</string>\n    <string name=\"login_success\">Συνδεθήκατε επιτυχώς</string>\n    <string name=\"unknown_error\">Άγνωστο σφάλμα</string>\n    <string name=\"updating_category\">Ενημέρωση κατηγορίας</string>\n    <string name=\"no_more_results\">Δεν υπάρχουν άλλα αποτελέσματα</string>\n    <string name=\"local_source\">Τοπική πηγή</string>\n    <string name=\"other_source\">Άλλα</string>\n    <string name=\"action_global_search_hint\">Καθολική αναζήτηση…</string>\n    <string name=\"latest\">Νεότερα</string>\n    <string name=\"browse\">Περιήγηση</string>\n    <string name=\"ongoing\">Σε εξέλιξη</string>\n    <string name=\"unknown\">Άγνωστο</string>\n    <string name=\"licensed\">Αδειοδοτημένο</string>\n    <string name=\"remove_from_library\">Κατάργηση από τη βιβλιοθήκη</string>\n    <string name=\"manga_added_library\">Προστέθηκε στη βιβλιοθήκη</string>\n    <string name=\"manga_removed_library\">Αφαιρέθηκε από τη βιβλιοθήκη</string>\n    <string name=\"delete_downloads_for_manga\">Να διαγραφούν τα κεφάλαια που έχουν ληφθεί;</string>\n    <string name=\"copied_to_clipboard\">Αντιγράφηκε στο πρόχειρο:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Η πηγή δεν είναι εγκατεστημένη: %1$s</string>\n    <string name=\"display_mode_chapter\">Κεφάλαιο %1$s</string>\n    <string name=\"chapter_downloading_progress\">Λήψη (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Σφάλμα</string>\n    <string name=\"chapter_paused\">Παύση</string>\n    <string name=\"show_title\">Τίτλος πηγής</string>\n    <string name=\"show_chapter_number\">Αριθμός κεφαλαίου</string>\n    <string name=\"sort_by_source\">Με βάση την πηγή</string>\n    <string name=\"sort_by_number\">Ανά αριθμό κεφαλαίου</string>\n    <string name=\"manga_download\">Λήψη</string>\n    <string name=\"download_unread\">Αδιάβαστα</string>\n    <string name=\"confirm_delete_chapters\">Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα κεφάλαια;</string>\n    <string name=\"manga_tracking_tab\">Παρακολούθηση</string>\n    <string name=\"reading\">Ανάγνωση</string>\n    <string name=\"completed\">Ολοκληρωμένο</string>\n    <string name=\"dropped\">Παραλείφθηκε</string>\n    <string name=\"on_hold\">Σε αναμονή</string>\n    <string name=\"plan_to_read\">Προγραμματισμένο για ανάγνωση</string>\n    <string name=\"repeating\">Ξαναδιαβάζεται</string>\n    <string name=\"score\">Βαθμολογία</string>\n    <string name=\"title\">Τίτλος</string>\n    <string name=\"status\">Κατάσταση</string>\n    <string name=\"track_status\">Κατάσταση</string>\n    <string name=\"track_type\">Τύπος</string>\n    <string name=\"error_category_exists\">Μια κατηγορία με αυτό το όνομα υπάρχει ήδη!</string>\n    <string name=\"snack_categories_deleted\">Οι κατηγορίες διαγράφηκαν</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Αυτό θα αφαιρέσει την ημερομηνία ανάγνωσης αυτού του κεφαλαίου. Είστε σίγουροι;</string>\n    <string name=\"dialog_with_checkbox_reset\">Επαναφορά όλων των κεφαλαίων για αυτήν την καταχώρηση</string>\n    <string name=\"snack_add_to_library\">Προσθήκη στη βιβλιοθήκη;</string>\n    <string name=\"picture_saved\">Η εικόνα αποθηκεύτηκε</string>\n    <string name=\"custom_filter\">Προσαρμοσμένο φίλτρο</string>\n    <string name=\"set_as_cover\">Ορισμός ως εξώφυλλο</string>\n    <string name=\"cover_updated\">Το εξώφυλλο ενημερώθηκε</string>\n    <string name=\"chapter_progress\">Σελίδα: %1$d</string>\n    <string name=\"no_next_chapter\">Το επόμενο κεφάλαιο δεν βρέθηκε</string>\n    <string name=\"decode_image_error\">Δεν ήταν δυνατή η φόρτωση της εικόνας</string>\n    <string name=\"confirm_set_image_as_cover\">Χρησιμοποιήστε αυτήν την εικόνα ως εξώφυλλο;</string>\n    <string name=\"transition_finished\">Διαβασμένο:</string>\n    <string name=\"transition_current\">Τρέχον:</string>\n    <string name=\"transition_next\">Επόμενο:</string>\n    <string name=\"transition_previous\">Προηγούμενο:</string>\n    <string name=\"transition_no_next\">Δεν υπάρχει επόμενο κεφάλαιο</string>\n    <string name=\"transition_no_previous\">Δεν υπάρχει προηγούμενο κεφάλαιο</string>\n    <string name=\"transition_pages_loading\">Φόρτωση σελίδων…</string>\n    <string name=\"transition_pages_error\">Η φόρτωση σελίδων απέτυχε: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Επιλέξτε τα δεδομένα που θέλετε να συμπεριλάβετε</string>\n    <string name=\"migrate\">Μεταφορά</string>\n    <string name=\"copy\">Αντιγραφή</string>\n    <string name=\"download_queue_error\">Δεν ήταν δυνατή η λήψη κεφαλαίων. Μπορείτε να δοκιμάσετε ξανά στο τμήμα λήψεων</string>\n    <string name=\"notification_new_chapters\">Βρέθηκαν νέα κεφάλαια</string>\n    <string name=\"notification_cover_update_failed\">Δεν ήταν δυνατή η ενημέρωση του εξώφυλλου</string>\n    <string name=\"notification_first_add_to_library\">Παρακαλώ προσθέστε την καταχώρηση στη βιβλιοθήκη σας πριν το κάνετε αυτό</string>\n    <string name=\"file_select_cover\">Επιλέξτε εικόνα εξωφύλλου</string>\n    <string name=\"file_select_backup\">Επιλέξτε αρχείο αντιγράφου ασφαλείας</string>\n    <string name=\"update_check_confirm\">Λήψη</string>\n    <string name=\"update_check_no_new_updates\">Δεν υπάρχουν διαθέσιμες νέες ενημερώσεις</string>\n    <string name=\"update_check_notification_download_in_progress\">Γίνεται λήψη…</string>\n    <string name=\"update_check_notification_download_complete\">Πατήστε για να εγκαταστήσετε την ενημέρωση</string>\n    <string name=\"update_check_notification_download_error\">Σφάλμα λήψης</string>\n    <string name=\"update_check_notification_update_available\">Υπάρχει διαθέσιμη ενημέρωση!</string>\n    <string name=\"information_no_downloads\">Δεν υπάρχουν λήψεις</string>\n    <string name=\"information_no_recent\">Δεν υπάρχουν πρόσφατες ενημερώσεις</string>\n    <string name=\"information_no_recent_manga\">Τίποτα δεν διαβάστηκε πρόσφατα</string>\n    <string name=\"information_empty_library\">Η βιβλιοθήκη σας είναι κενή</string>\n    <string name=\"information_empty_category\">Δεν έχετε κατηγορίες. Πατήστε το κουμπί συν για να δημιουργήσετε μία για την οργάνωση της βιβλιοθήκης σας.</string>\n    <string name=\"download_notifier_downloader_title\">Πρόγραμμα λήψης</string>\n    <string name=\"download_notifier_title_error\">Σφάλμα</string>\n    <string name=\"download_notifier_unknown_error\">Το κεφάλαιο δεν μπορούσε να ληφθεί λόγο μη αναμενόμενου σφάλματος</string>\n    <string name=\"download_notifier_text_only_wifi\">Δεν υπάρχει διαθέσιμη σύνδεση Wi-Fi</string>\n    <string name=\"download_notifier_no_network\">Δεν υπάρχει διαθέσιμη σύνδεση δικτύου</string>\n    <string name=\"download_notifier_download_paused\">Λήψεις σε παύση</string>\n    <string name=\"channel_common\">Κοινό</string>\n    <string name=\"pref_read_with_long_tap\">Εμφάνιση ενεργειών με παρατεταμένο πάτημα</string>\n    <string name=\"action_open_in_web_view\">Άνοιγμα στο WebView</string>\n    <string name=\"pref_skip_read_chapters\">Προσπέραση διαβασμένων κεφαλαίων</string>\n    <string name=\"filter_mode_overlay\">Επικάλυψη</string>\n    <string name=\"filter_mode_multiply\">Πολλαπλασιασμός</string>\n    <string name=\"filter_mode_screen\">Οθόνη</string>\n    <string name=\"label_help\">Βοήθεια</string>\n    <string name=\"pref_color_filter_mode\">Μέθοδος μίξης χρωματικού φίλτρου</string>\n    <string name=\"filter_mode_lighten\">Dodge / Φώτισε</string>\n    <string name=\"filter_mode_darken\">Burn / Σκουραίωσε</string>\n    <string name=\"no_results_found\">Δεν βρέθηκαν αποτελέσματα</string>\n    <string name=\"migration_selection_prompt\">Επιλέξτε μια πηγή από την οποία θα μεταφερθείτε</string>\n    <string name=\"action_webview_back\">Πίσω</string>\n    <string name=\"action_webview_forward\">Μπροστά</string>\n    <string name=\"action_webview_refresh\">Ανανέωση</string>\n    <string name=\"pref_category_library\">Βιβλιοθήκη</string>\n    <string name=\"ext_obsolete\">Απαρχαιωμένο</string>\n    <string name=\"obsolete_extension_message\">Αυτή η επέκταση δεν είναι πλέον διαθέσιμη. Ενδέχεται να μη λειτουργεί σωστά και μπορεί να προκαλέσει προβλήματα με την εφαρμογή. Συνιστάται η απεγκατάσταση της.</string>\n    <string name=\"label_more\">Περισσότερα</string>\n    <string name=\"last_used_source\">Χρησιμοποιήθηκε τελευταία</string>\n    <string name=\"add_tracking\">Προσθήκη tracking</string>\n    <string name=\"pinned_sources\">Καρφιτσωμένα</string>\n    <string name=\"restore_duration\">%1$02d λεπτά, %2$02d δευτερόλεπτα</string>\n    <string name=\"action_select_inverse\">Επιλογή αντίστροφου</string>\n    <string name=\"channel_ext_updates\">Ενημερώσεις επεκτάσεων</string>\n    <string name=\"channel_new_chapters\">Ενημερώσεις κεφαλαίων</string>\n    <string name=\"information_webview_outdated\">Παρακαλώ ενημερώστε την εφαρμογή WebView για καλύτερη συμβατότητα</string>\n    <string name=\"information_webview_required\">Το WebView απαιτείται για τη λειτουργία της εφαρμογής</string>\n    <string name=\"notification_chapters_single_and_more\">Κεφάλαιο %1$s και %2$d ακόμη</string>\n    <string name=\"notification_chapters_multiple\">Κεφάλαια %1$s</string>\n    <string name=\"notification_chapters_single\">Κεφάλαιο %1$s</string>\n    <string name=\"recent_manga_time\">Κεφ. %1$s - %2$s</string>\n    <string name=\"updating_library\">Ενημέρωση βιβλιοθήκης</string>\n    <string name=\"paused\">Σε παύση</string>\n    <string name=\"manga_info_collapse\">Λιγότερα</string>\n    <string name=\"manga_info_expand\">Περισσότερα</string>\n    <string name=\"in_library\">Στη βιβλιοθήκη</string>\n    <string name=\"add_to_library\">Προσθήκη στη βιβλιοθήκη</string>\n    <string name=\"local_source_help_guide\">Οδηγός τοπικής πηγής</string>\n    <string name=\"information_cloudflare_bypass_failure\">Αποτυχία παράκαμψης του Cloudflare</string>\n    <string name=\"logout_success\">Έχετε αποσυνδεθεί</string>\n    <string name=\"logout\">Αποσύνδεση</string>\n    <string name=\"logout_title\">Αποσύνδεση από %1$s;</string>\n    <string name=\"email\">Διεύθυνση ηλεκτ. ταχυδρομείου</string>\n    <string name=\"check_for_updates\">Έλεγχος για ενημερώσεις</string>\n    <string name=\"licenses\">Άδειες ανοιχτού κώδικα</string>\n    <string name=\"website\">Ιστότοπος</string>\n    <string name=\"battery_optimization_disabled\">Η βελτιστοποίηση μπαταρίας είναι ήδη απενεργοποιημένη</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Βοηθά στις ενημερώσεις βιβλιοθήκης και τα αντίγραφα ασφαλείας στο παρασκήνιο</string>\n    <string name=\"pref_disable_battery_optimization\">Απενεργοποίηση βελτιστοποίησης μπαταρίας</string>\n    <string name=\"restoring_backup_canceled\">Η επαναφορά ακυρώθηκε</string>\n    <string name=\"restoring_backup_error\">Η επαναφορά του αντιγράφου ασφαλείας απέτυχε</string>\n    <string name=\"restore_in_progress\">Η επαναφορά βρίσκεται ήδη σε εξέλιξη</string>\n    <string name=\"creating_backup_error\">Η δημιουργία αντιγράφων ασφαλείας απέτυχε</string>\n    <string name=\"backup_in_progress\">Η δημιουργία αντιγράφων ασφαλείας βρίσκεται ήδη σε εξέλιξη</string>\n    <string name=\"pref_webtoon_side_padding\">Πλευρικό γέμισμα</string>\n    <string name=\"pref_category_reading\">Ανάγνωση</string>\n    <string name=\"pref_always_show_chapter_transition\">Να εμφανίζεται πάντα η μετάβαση κεφαλαίου</string>\n    <string name=\"vertical_plus_viewer\">Μακριά λωρίδα με κενά</string>\n    <string name=\"pref_skip_filtered_chapters\">Παράλειψη φιλτραρισμένων κεφαλαίων</string>\n    <string name=\"pref_cutout_short\">Εμφάνιση περιεχομένου στην περιοχή αποκοπής</string>\n    <string name=\"ext_updates_pending\">Εκκρεμούν ενημερώσεις</string>\n    <string name=\"pref_category_library_update\">Καθολική ενημέρωση</string>\n    <string name=\"pref_category_display\">Προβολή</string>\n    <string name=\"hide_notification_content\">Απόκρυψη περιεχομένου ειδοποιήσεων</string>\n    <string name=\"secure_screen_summary\">Η ασφαλής οθόνη αποκρύπτει τα περιεχόμενα εφαρμογών κατά την εναλλαγή εφαρμογών και εμποδίζει τα στιγμιότυπα οθόνης</string>\n    <string name=\"secure_screen\">Ασφάλισε την οθόνη</string>\n    <string name=\"lock_never\">Ποτέ</string>\n    <string name=\"lock_always\">Πάντα</string>\n    <string name=\"lock_when_idle\">Κλείδωμα όταν είναι αδρανής</string>\n    <string name=\"lock_with_biometrics\">Απαιτείται ξεκλείδωμα</string>\n    <string name=\"pref_category_security\">Ασφάλεια και ιδιωτικότητα</string>\n    <string name=\"pref_manage_notifications\">Διαχείριση ειδοποιήσεων</string>\n    <string name=\"pref_date_format\">Μορφή ημερομηνίας</string>\n    <string name=\"theme_system\">Σύστημα</string>\n    <string name=\"theme_dark\">Σκοτεινό</string>\n    <string name=\"theme_light\">Φωτεινό</string>\n    <string name=\"action_move_to_bottom\">Μετακίνηση στον πάτο</string>\n    <string name=\"action_move_to_top\">Μετακίνηση στην κορυφή</string>\n    <string name=\"action_cancel_all\">Ακύρωση όλων</string>\n    <string name=\"action_unpin\">Ξεκαρφίτσωμα</string>\n    <string name=\"action_pin\">Καρφίτσωμα</string>\n    <string name=\"action_view_chapters\">Προβολή κεφαλαίων</string>\n    <string name=\"action_sort_latest_chapter\">Νεότερο κεφάλαιο</string>\n    <string name=\"action_menu\">Μενού</string>\n    <string name=\"label_downloaded_only\">Ληφθέντα μόνο</string>\n    <string name=\"label_sources\">Πηγές</string>\n    <string name=\"action_oldest\">Παλαιότερο</string>\n    <string name=\"action_newest\">Νεότερο</string>\n    <string name=\"downloaded_only_summary\">Φιλτράρει όλες τις καταχωρήσεις στη βιβλιοθήκη σας</string>\n    <string name=\"gray_background\">Γκρι</string>\n    <string name=\"viewer\">Λειτουργία ανάγνωσης</string>\n    <string name=\"pref_category_for_this_series\">Για αυτήν τη σειρά</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Δεν ήταν δυνατό το άνοιγμα των ρυθμίσεων της συσκευής</string>\n    <string name=\"tracking_info\">Μονόδρομος συγχρονισμός για ενημέρωση των υπηρεσιών εξωτερικής παρακολούθησης προόδου κεφαλαίων. Ρυθμίστε την παρακολούθηση για μεμονωμένες καταχωρήσεις από το κουμπί παρακολούθησης τους.</string>\n    <string name=\"pref_refresh_library_covers\">Ανανέωση εξώφυλλων βιβλιοθήκης</string>\n    <string name=\"sort_by_upload_date\">Από ημερομηνία μεταφόρτωσης</string>\n    <string name=\"label_data\">Δεδομένα</string>\n    <string name=\"backup_restore_missing_sources\">Πηγές που λείπουν:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Το αντίγραφο ασφαλείας δεν περιέχει καταχωρήσεις βιβλιοθήκης.</string>\n    <string name=\"invalid_backup_file\">Μη έγκυρο αρχείο αντιγράφου ασφαλείας:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Έλεγχος για νέο εξώφυλλο και λεπτομέρειες κατά την ενημέρωση της βιβλιοθήκης</string>\n    <string name=\"pref_library_update_refresh_metadata\">Αυτόματη ανανέωση μεταδεδομένων</string>\n    <string name=\"action_migrate\">Μεταφορά</string>\n    <string name=\"action_display_comfortable_grid\">Άνετο πλέγμα</string>\n    <string name=\"tabs_header\">Καρτέλες</string>\n    <string name=\"action_display_show_tabs\">Εμφάνιση καρτελών κατηγοριών</string>\n    <string name=\"page_list_empty_error\">Δεν βρέθηκαν σελίδες</string>\n    <string name=\"action_disable_all\">Απενεργοποίηση όλων</string>\n    <string name=\"action_enable_all\">Ενεργοποίηση όλων</string>\n    <string name=\"pref_show_reading_mode_summary\">Σύντομη εμφάνιση της τρέχουσας κατάστασης λειτουργίας κατά το άνοιγμα του προγράμματος ανάγνωσης</string>\n    <string name=\"pref_show_reading_mode\">Εμφάνιση λειτουργίας ανάγνωσης</string>\n    <string name=\"action_start\">Έναρξη</string>\n    <string name=\"loader_not_implemented_error\">Δεν βρέθηκε πηγή</string>\n    <string name=\"action_disable\">Απενεργοποίηση</string>\n    <string name=\"requires_app_restart\">Απαιτείται επανεκκίνηση της εφαρμογής για να τεθεί σε ισχύ</string>\n    <string name=\"label_network\">Δίκτυο</string>\n    <string name=\"tapping_inverted_both\">Και τα δυο</string>\n    <string name=\"tapping_inverted_vertical\">Κάθετα</string>\n    <string name=\"tapping_inverted_horizontal\">Οριζόντια</string>\n    <string name=\"tapping_inverted_none\">Κανένα</string>\n    <string name=\"pref_read_with_tapping_inverted\">Αντιστροφή ζωνών πατήματος</string>\n    <string name=\"unknown_status\">Άγνωστη κατάσταση</string>\n    <string name=\"unknown_author\">Άγνωστος συγγραφέας</string>\n    <string name=\"updated_version\">Ενημερώθηκε σε v%1$s</string>\n    <string name=\"whats_new\">Τι νέο υπάρχει</string>\n    <string name=\"download_insufficient_space\">Δεν ήταν δυνατή η λήψη κεφαλαίων λόγω χαμηλού αποθηκευτικού χώρου</string>\n    <string name=\"action_global_search_query\">Αναζήτηση του \\\"%1$s\\\" καθολικά</string>\n    <string name=\"pref_category_reading_mode\">Λειτουργία ανάγνωσης</string>\n    <string name=\"pref_category_theme\">Θέμα</string>\n    <string name=\"action_sort_date_added\">Ημερομηνία προσθήκης</string>\n    <string name=\"no_pinned_sources\">Δεν έχετε καρφιτσωμένες πηγές</string>\n    <string name=\"channel_complete\">Ολοκληρωμένο</string>\n    <string name=\"channel_progress\">Η λήψη ολοκληρώθηκε</string>\n    <string name=\"channel_errors\">Σφάλματα</string>\n    <string name=\"backup_restore_missing_trackers\">Trackers που δεν έχουν συνδεθεί:</string>\n    <string name=\"pref_category_delete_chapters\">Διαγραφή κεφαλαίων</string>\n    <string name=\"ext_nsfw_warning\">Πηγές από αυτήν την επέκταση ενδέχεται να περιέχουν περιεχόμενο NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Να επιτρέπεται η διαγραφή κεφαλαίων με σελιδοδείκτη</string>\n    <string name=\"parental_controls_info\">Αυτό δεν εμποδίζει τις ανεπίσημες ή ενδεχομένως εσφαλμένα επισημασμένες επεκτάσεις να εμφανίζουν περιεχόμενο NSFW (18+) μέσα στην εφαρμογή.</string>\n    <string name=\"no_chapters_error\">Δεν βρέθηκαν κεφάλαια</string>\n    <string name=\"chapter_settings_updated\">Ενημερώθηκαν οι προεπιλεγμένες ρυθμίσεις κεφαλαίου</string>\n    <string name=\"set_chapter_settings_as_default\">Ορισμός ως προεπιλογής</string>\n    <string name=\"also_set_chapter_settings_for_library\">Εφαρμογή επίσης για όλες τις καταχωρήσεις στη βιβλιοθήκη μου</string>\n    <string name=\"confirm_set_chapter_settings\">Είστε σίγουροι ότι θέλετε να αποθηκεύσετε αυτές τις ρυθμίσεις ως προεπιλεγμένες;</string>\n    <string name=\"chapter_settings\">Ρυθμίσεις κεφαλαίου</string>\n    <string name=\"share_page_info\">%1$s: %2$s, σελίδα %3$d</string>\n    <string name=\"action_search_settings\">Αναζήτηση ρυθμίσεων</string>\n    <string name=\"downloaded_chapters\">Κεφάλαια που έχουν ληφθεί</string>\n    <string name=\"manga_from_library\">Από βιβλιοθήκη</string>\n    <string name=\"pref_incognito_mode_summary\">Παύει το ιστορικό ανάγνωσης</string>\n    <string name=\"pref_incognito_mode\">Λειτουργία ανώνυμης περιήγησης</string>\n    <string name=\"pref_clear_history\">Διαγραφή ιστορικού</string>\n    <string name=\"clear_history_confirmation\">Είστε σίγουροι; Όλο το ιστορικό θα χαθεί.</string>\n    <string name=\"clear_history_completed\">Το ιστορικό διαγράφηκε</string>\n    <string name=\"spen_next_page\">Επόμενη σελίδα</string>\n    <string name=\"spen_previous_page\">Προηγούμενη σελίδα</string>\n    <string name=\"migration_help_guide\">Οδηγός μετανάστευσης πηγής</string>\n    <string name=\"pref_category_nsfw_content\">Πηγές NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Εμφάνιση στις λίστες πηγών και επεκτάσεων</string>\n    <string name=\"file_picker_error\">Δεν βρέθηκε εφαρμογή επιλογής αρχείων</string>\n    <string name=\"myanimelist_relogin\">Συνδεθείτε ξανά στο MAL</string>\n    <string name=\"pref_viewer_nav\">Ζώνες πατήματος</string>\n    <string name=\"edge_nav\">Άκρη</string>\n    <string name=\"kindlish_nav\">Σαν Kindle</string>\n    <string name=\"l_nav\">Σχήματος L</string>\n    <string name=\"track_finished_reading_date\">Ημερομηνία λήξης</string>\n    <string name=\"track_started_reading_date\">Ημερομηνία έναρξης</string>\n    <string name=\"pref_dump_crash_logs_summary\">Αποθηκεύει αρχεία καταγραφής σφαλμάτων σε ένα αρχείο για κοινή χρήση με τους προγραμματιστές</string>\n    <string name=\"pref_dump_crash_logs\">Κοινή χρήση αρχείων καταγραφής σφαλμάτων</string>\n    <string name=\"action_desc\">Φθίνουσα</string>\n    <string name=\"action_asc\">Αύξουσα</string>\n    <string name=\"action_order_by_chapter_number\">Κατά αριθμό κεφαλαίου</string>\n    <string name=\"action_order_by_upload_date\">Κατά ημερομηνία μεταφόρτωσης</string>\n    <string name=\"action_filter_tracked\">Παρακολουθούνται</string>\n    <string name=\"action_display_show_number_of_items\">Εμφάνιση αριθμού στοιχείων</string>\n    <string name=\"right_and_left_nav\">Δεξιά και Aριστερά</string>\n    <string name=\"pref_dual_page_split\">Διαχωρισμός πλατιών σελίδων</string>\n    <string name=\"pref_dual_page_invert_summary\">Εάν η τοποθέτηση των διαχωρισμένων πλατιών σελίδων δεν ταιριάζει με την κατεύθυνση ανάγνωσης</string>\n    <string name=\"pref_dual_page_invert\">Αντιστροφή τοποθέτησης διαχωρισμένης σελίδας</string>\n    <string name=\"backup_restore_content_full\">Ενδέχεται να χρειαστεί να εγκαταστήσετε τυχόν επεκτάσεις που λείπουν και στη συνέχεια να συνδεθείτε στις υπηρεσίες παρακολούθησης για να τις χρησιμοποιήσετε.</string>\n    <string name=\"pref_show_navigation_mode_summary\">Εμφάνιση εν συντομία κατά το άνοιγμα του προγράμματος ανάγνωσης</string>\n    <string name=\"pref_show_navigation_mode\">Εμφάνιση επικάλυψης ζωνών πατήματος</string>\n    <string name=\"nav_zone_right\">Δεξιά</string>\n    <string name=\"nav_zone_left\">Αριστερά</string>\n    <string name=\"nav_zone_next\">Επόμενο</string>\n    <string name=\"nav_zone_prev\">Προηγούμενο</string>\n    <string name=\"pref_dns_over_https\">DNS μέσω HTTPS (DoH)</string>\n    <string name=\"exclude\">Εξαίρεση: %s</string>\n    <string name=\"include\">Συμπερίληψη: %s</string>\n    <string name=\"none\">Κανένα</string>\n    <string name=\"action_sort_chapter_fetch_date\">Ημερομηνία ανάκτησης κεφαλαίου</string>\n    <string name=\"pref_download_new_categories_details\">Οι καταχωρήσεις σε εξαιρούμενες κατηγορίες δε θα ληφθούν ακόμη και αν βρίσκονται επίσης σε κατηγορίες που περιλαμβάνονται.</string>\n    <string name=\"pref_category_auto_download\">Αυτόματη λήψη</string>\n    <string name=\"pref_library_update_categories_details\">Οι καταχωρίσεις σε εξαιρούμενες κατηγορίες δε θα ενημερώνονται ακόμη και αν περιλαμβάνονται επίσης σε κατηγορίες που περιλαμβάνονται.</string>\n    <string name=\"action_show_errors\">Πατήστε για να δείτε λεπτομέρειες</string>\n    <string name=\"update_check_eol\">Αυτή η έκδοση Android δεν υποστηρίζεται πλέον</string>\n    <string name=\"clipboard_copy_error\">Απέτυχε η αντιγραφή στο πρόχειρο</string>\n    <string name=\"rotation_landscape\">Οριζόντια</string>\n    <string name=\"rotation_portrait\">Κατακόρυφα</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Δημιουργεί φακέλους σύμφωνα με τον τίτλο των καταχωρήσεων</string>\n    <string name=\"pref_create_folder_per_manga\">Αποθήκευση σελίδων σε ξεχωριστούς φακέλους</string>\n    <string name=\"pref_reader_actions\">Ενέργειες</string>\n    <string name=\"rotation_type\">Περιστροφή</string>\n    <string name=\"pref_grayscale\">Κλίμακα του γκρι</string>\n    <string name=\"notification_incognito_text\">Απενεργοποίηση λειτουργίας ανώνυμης περιήγησης</string>\n    <string name=\"automatic_background\">Αυτόματο</string>\n    <string name=\"cancel_all_for_series\">Ακύρωση όλων για αυτήν τη σειρά</string>\n    <string name=\"error_no_match\">Δεν βρέθηκε αντιστοιχία</string>\n    <string name=\"source_unsupported\">Η πηγή δεν υποστηρίζεται</string>\n    <string name=\"unread\">Αδιάβαστα</string>\n    <string name=\"date\">Ημερομηνία</string>\n    <string name=\"local_filter_order_by\">Ταξινόμηση κατά</string>\n    <string name=\"local_invalid_format\">Μη έγκυρη μορφή κεφαλαίου</string>\n    <string name=\"chapter_not_found\">Το κεφάλαιο δε βρέθηκε</string>\n    <string name=\"restrictions\">Περιορισμοί: %s</string>\n    <string name=\"action_display_local_badge\">Τοπική πηγή</string>\n    <string name=\"off\">Απενεργοποιημένο</string>\n    <string name=\"on\">Ενεργοποιημένο</string>\n    <string name=\"error_sharing_cover\">Σφάλμα κοινής χρήσης του εξωφύλλου</string>\n    <string name=\"error_saving_cover\">Σφάλμα αποθήκευσης εξωφύλλου</string>\n    <string name=\"cover_saved\">Το εξώφυλλο αποθηκεύτηκε</string>\n    <string name=\"manga_cover\">Εξώφυλλο</string>\n    <string name=\"categorized_display_settings\">Ρυθμίσεις για ταξινόμηση ανά κατηγορία</string>\n    <string name=\"tracking_guide\">Οδηγός tracking</string>\n    <string name=\"information_empty_category_dialog\">Δεν έχετε κατηγορίες ακόμα.</string>\n    <string name=\"action_start_downloading_now\">Έναρξη λήψης τώρα</string>\n    <string name=\"theme_midnightdusk\">Midnight Dusk</string>\n    <string name=\"theme_greenapple\">Πράσινο Μήλο</string>\n    <string name=\"pref_app_theme\">Θέμα εφαρμογής</string>\n    <string name=\"about_dont_kill_my_app\">Ορισμένοι κατασκευαστές έχουν πρόσθετους περιορισμούς εφαρμογών που εξουδετερώνουν τις υπηρεσίες παρασκηνίου. Αυτός ο ιστότοπος έχει περισσότερες πληροφορίες για το πώς να το διορθώσετε.</string>\n    <string name=\"restore_miui_warning\">Η δημιουργία αντιγράφων ασφαλείας/επαναφορά ενδέχεται να μη λειτουργεί σωστά εάν είναι απενεργοποιημένη η Βελτιστοποίηση MIUI.</string>\n    <string name=\"pref_dark_theme_pure_black\">Απόλυτα μαύρη σκοτεινή λειτουργία</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Γιν και Γιανγκ</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Φράουλα Daiquiri</string>\n    <string name=\"enhanced_tracking_info\">Παρέχει βελτιωμένες δυνατότητες για συγκεκριμένες πηγές. Οι καταχωρήσεις παρακολουθούνται αυτόματα όταν προστίθενται στη βιβλιοθήκη σας.</string>\n    <string name=\"enhanced_services\">Ενισχυμένοι trackers</string>\n    <string name=\"theme_monet\">Δυναμικό</string>\n    <string name=\"label_background_activity\">Δραστηριότητα παρασκηνίου</string>\n    <string name=\"pref_lowest\">Χαμηλότερη</string>\n    <string name=\"pref_low\">Χαμηλή</string>\n    <string name=\"pref_highest\">Ύψιστη</string>\n    <string name=\"pref_high\">Υψηλή</string>\n    <string name=\"pref_hide_threshold\">Ευαισθησία για την απόκρυψη του μενού κατά την κύλιση</string>\n    <string name=\"pref_inverted_colors\">Αντεστραμμένο</string>\n    <string name=\"relative_time_today\">Σήμερα</string>\n    <string name=\"theme_tealturquoise\">Teal &amp; Τιρκουάζ</string>\n    <string name=\"confirm_lock_change\">Έλεγχος ταυτότητας για επιβεβαίωση αλλαγής</string>\n    <string name=\"label_default\">Προεπιλογή</string>\n    <string name=\"pref_category_appearance\">Εμφάνιση</string>\n    <string name=\"action_track\">Παρακολούθηση</string>\n    <string name=\"getting_started_guide\">Οδηγός για τα πρώτα βήματα</string>\n    <string name=\"pref_tablet_ui_mode\">Διεπαφή χρήστη tablet</string>\n    <string name=\"pref_remove_exclude_categories\">Εξαιρούμενες κατηγορίες</string>\n    <string name=\"help_translate\">Βοηθήστε στη μετάφραση</string>\n    <string name=\"ext_app_info\">Πληροφορίες εφαρμογής</string>\n    <string name=\"ext_installer_pref\">Εγκαταστάτης</string>\n    <string name=\"ext_install_service_notif\">Εγκατάσταση επέκτασης…</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Εγκαταστήστε και ξεκινήστε το Shizuku για να χρησιμοποιήσετε το Shizuku ως πρόγραμμα εγκατάστασης επεκτάσεων.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Το Shizuku δεν τρέχει</string>\n    <string name=\"ext_installer_legacy\">Παλαιό</string>\n    <string name=\"action_sort_count\">Σύνολο καταχωρήσεων</string>\n    <string name=\"pref_verbose_logging\">Λεπτομερής καταγραφή</string>\n    <string name=\"pref_verbose_logging_summary\">Εκτύπωση λεπτομερών αρχείων καταγραφής στο αρχείο καταγραφής συστήματος (μειώνει την απόδοση της εφαρμογής)</string>\n    <string name=\"action_display_language_badge\">Γλώσσα</string>\n    <string name=\"label_warning\">Προειδοποίηση</string>\n    <string name=\"backup_info\">Θα πρέπει να κρατάτε αντίγραφα αντιγράφων ασφαλείας και σε άλλα μέρη. Τα αντίγραφα ασφαλείας ενδέχεται να περιέχουν ευαίσθητα δεδομένα, συμπεριλαμβανομένων τυχόν αποθηκευμένων κωδικών πρόσβασης, να είστε προσεκτικοί αν τα μοιράζεστε.</string>\n    <string name=\"notification_size_warning\">Οι μεγάλες ενημερώσεις βλάπτουν τις πηγές και μπορεί να οδηγήσουν σε πιο αργές ενημερώσεις και σε αυξημένη χρήση της μπαταρίας. Πατήστε για να μάθετε περισσότερα.</string>\n    <string name=\"connected_to_wifi\">Μόνο σε Wi-Fi</string>\n    <string name=\"update_72hour\">Κάθε 3 ημέρες</string>\n    <string name=\"download_queue_size_warning\">Προειδοποίηση: οι μαζικές λήψεις ενδέχεται να οδηγήσουν σε επιβράδυνση των πηγών ή/και αποκλεισμό του Mihon. Πατήστε για να μάθετε περισσότερα.</string>\n    <string name=\"ext_update_all\">Ενημέρωση όλων</string>\n    <string name=\"channel_app_updates\">Ενημερώσεις εφαρμογής</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Εκκαθάριση της προσωρινής μνήμης κεφαλαίων κατά την εκκίνηση της εφαρμογής</string>\n    <string name=\"clear_database_source_item_count\">%1$d καταχωρήσεις εκτός βιβλιοθήκης στη βάση δεδομένων</string>\n    <string name=\"database_clean\">Τίποτα προς εκκαθάριση</string>\n    <string name=\"extension_api_error\">Αποτυχία ανάκτησης διαθέσιμων επεκτάσεων</string>\n    <string name=\"privacy_policy\">Πολιτική απορρήτου</string>\n    <string name=\"pref_update_only_completely_read\">Παράλειψη καταχωρήσεων με αδιάβαστο(α) κεφάλαιο(α)</string>\n    <string name=\"library_errors_help\">Για βοήθεια σχετικά με τον τρόπο διόρθωσης σφαλμάτων ενημέρωσης βιβλιοθήκης, ανατρέξτε στο %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Αποθήκευση ως αρχείο CBZ</string>\n    <string name=\"cancelled\">Ακυρώθηκε</string>\n    <string name=\"on_hiatus\">Σε αναστολή</string>\n    <string name=\"publishing_finished\">Η έκδοση ολοκληρώθηκε</string>\n    <string name=\"action_show_manga\">Εμφάνιση καταχώρισης</string>\n    <string name=\"pref_landscape_zoom\">Αυτόματο ζουμ σε ευρείες εικόνες</string>\n    <string name=\"action_display_cover_only_grid\">Πλέγμα μόνο με εξώφυλλα</string>\n    <string name=\"pref_update_only_started\">Παράλειψη καταχωρήσεων που δεν έχουν αρχίσει</string>\n    <string name=\"pref_navigate_pan\">Μετατόπιση πλατιών εικόνων</string>\n    <string name=\"skipped_reason_completed\">Παραλείφθηκε επειδή η σειρά ολοκληρώθηκε</string>\n    <string name=\"skipped_reason_not_caught_up\">Παραβλέφθηκε επειδή υπάρχουν μη αναγνωσμένα κεφάλαια</string>\n    <string name=\"skipped_reason_not_started\">Παραλείπεται επειδή δεν έχουν διαβαστεί κεφάλαια</string>\n    <string name=\"notification_update_error\">%1$d ενημέρωση(ες) απέτυχε(-αν)</string>\n    <string name=\"learn_more\">Πατήστε για να μάθετε περισσότερα</string>\n    <string name=\"rotation_reverse_portrait\">Αντίστροφο πορτρέτο</string>\n    <string name=\"action_move_to_top_all_for_series\">Μετακίνηση σειράς προς τα πάνω</string>\n    <string name=\"disabled_nav\">Απενεργοποιημένο</string>\n    <string name=\"error_saving_picture\">Σφάλμα κατά την αποθήκευση της εικόνας</string>\n    <string name=\"empty_backup_error\">Δεν υπάρχουν καταχωρήσεις βιβλιοθήκης για δημιουργία αντιγράφων ασφαλείας</string>\n    <string name=\"update_check_open\">Άνοιγμα στο GitHub</string>\n    <string name=\"webview_data_deleted\">Τα δεδομένα WebView διαγράφηκαν</string>\n    <string name=\"pref_clear_webview_data\">Διαγραφή δεδομένων WebView</string>\n    <string name=\"action_close\">Κλείσιμο</string>\n    <string name=\"source_filter_empty_screen\">Δε βρέθηκε εγκατεστημένη πηγή</string>\n    <string name=\"action_sort_unread_count\">Αριθμός μη αναγνωσμένων</string>\n    <string name=\"action_sort_last_manga_update\">Τελευταίος έλεγχος ενημέρωσης</string>\n    <string name=\"source_empty_screen\">Δε βρέθηκε πηγή</string>\n    <string name=\"split_tall_images_summary\">Βελτιώνει την απόδοση του αναγνώστη</string>\n    <string name=\"download_notifier_split_page_not_found\">Η σελίδα %d δε βρέθηκε κατά τη διάσπαση</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Δεν ήταν δυνατή η εύρεση της διαδρομής αρχείου της σελίδας %d</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Επαναφέρει τη λειτουργία ανάγνωσης και τον προσανατολισμό όλων των σειρών</string>\n    <string name=\"pref_reset_viewer_flags\">Επαναφορά ρυθμίσεων προγράμματος ανάγνωσης ανά σειρά</string>\n    <string name=\"pref_reset_viewer_flags_error\">Δεν ήταν δυνατή η επαναφορά των ρυθμίσεων του προγράμματος ανάγνωσης</string>\n    <string name=\"pref_reset_viewer_flags_success\">Επαναφορά όλων των ρυθμίσεων προγράμματος ανάγνωσης</string>\n    <string name=\"empty_screen\">Λοιπόν, αυτό είναι άβολο</string>\n    <string name=\"ext_info_version\">Έκδοση</string>\n    <string name=\"ext_info_language\">Γλώσσα</string>\n    <string name=\"ext_info_age_rating\">Ηλικιακή βαθμολογία</string>\n    <string name=\"unfinished_list\">Ημιτελής λίστα</string>\n    <string name=\"complete_list\">Πλήρης Λίστα</string>\n    <string name=\"wish_list\">Λίστα επιθυμιών</string>\n    <string name=\"on_hold_list\">Λίστα αναμονής</string>\n    <string name=\"reading_list\">Λίστα ανάγνωσης</string>\n    <string name=\"network_not_metered\">Μόνο σε δίκτυο χωρίς μετρήσεις</string>\n    <string name=\"cant_open_last_read_chapter\">Αδυναμία ανοίγματος του τελευταίου κεφαλαίου που διαβάστηκε</string>\n    <string name=\"custom_cover\">Προσαρμοσμένο εξώφυλλο</string>\n    <string name=\"not_installed\">Δεν έχει εγκατασταθεί</string>\n    <string name=\"pref_app_language\">Γλώσσα εφαρμογής</string>\n    <string name=\"theme_lavender\">Λεβάντα</string>\n    <string name=\"description_placeholder\">Χωρίς περιγραφή</string>\n    <string name=\"delete_category\">Διαγραφή κατηγορίας</string>\n    <string name=\"delete_category_confirmation\">Θέλετε να διαγράψετε την κατηγορία \\\"%s\\\";</string>\n    <string name=\"internal_error\">InternalError: Ελέγξτε τα αρχεία καταγραφής σφαλμάτων για περισσότερες πληροφορίες</string>\n    <string name=\"pref_user_agent_string\">Προεπιλεγμένη συμβολοσειρά πράκτορα χρήστη</string>\n    <string name=\"pref_reset_user_agent_string\">Επαναφορά προεπιλεγμένης συμβολοσειράς πράκτορα χρήστη</string>\n    <string name=\"action_remove_everything\">Καταργήστε τα πάντα</string>\n    <string name=\"appwidget_updates_description\">Δείτε τις πρόσφατα ενημερωμένες καταχωρήσεις της βιβλιοθήκης σας</string>\n    <string name=\"appwidget_unavailable_locked\">Το widget δεν είναι διαθέσιμο όταν είναι ενεργοποιημένο το κλείδωμα εφαρμογών</string>\n    <string name=\"update_already_running\">Εκτελείται ήδη μια ενημέρωση</string>\n    <string name=\"error_user_agent_string_blank\">Η συμβολοσειρά πράκτορα χρήστη δεν μπορεί να είναι κενή</string>\n    <string name=\"theme_tidalwave\">Παλιρροϊκό κύμα</string>\n    <string name=\"download_ahead\">Λήψη εκ των προτέρων</string>\n    <string name=\"auto_download_while_reading\">Αυτόματη λήψη κατά την ανάγνωση</string>\n    <string name=\"download_ahead_info\">Λειτουργεί μόνο εάν το τρέχον κεφάλαιο + το επόμενο έχουν ήδη ληφθεί.</string>\n    <string name=\"are_you_sure\">Είστε σίγουροι;</string>\n    <string name=\"multi_lang\">Πολλαπλό</string>\n    <string name=\"popular\">Δημοφιλή</string>\n    <string name=\"updates_last_update_info\">Τελευταία ενημέρωση βιβλιοθήκης: %s</string>\n    <string name=\"remove_manga\">Πρόκειται να αφαιρέσετε το \\\"%s\\\" από τη βιβλιοθήκη σας</string>\n    <string name=\"missing_storage_permission\">Δεν έχουν χορηγηθεί δικαιώματα αποθήκευσης</string>\n    <string name=\"skipped_reason_not_always_update\">Παραλείφθηκε επειδή η σειρά δεν απαιτεί ενημερώσεις</string>\n    <string name=\"action_search_hint\">Αναζήτηση…</string>\n    <string name=\"pref_browse_summary\">Πηγές, επεκτάσεις, καθολική αναζήτηση</string>\n    <string name=\"crash_screen_title\">Ουπς!</string>\n    <string name=\"pref_appearance_summary\">Θέμα, μορφή ημερομηνίας και ώρας</string>\n    <string name=\"pref_library_summary\">Κατηγορίες, καθολική ενημέρωση, σύρσιμο κεφαλαίου</string>\n    <string name=\"pref_reader_summary\">Λειτουργία ανάγνωσης, οθόνη, πλοήγηση</string>\n    <string name=\"pref_tracking_summary\">Μονόδρομος συγχρονισμός προόδου, ενισχυμένος συγχρονισμός</string>\n    <string name=\"pref_backup_summary\">Χειροκίνητα &amp; αυτόματα αντίγραφα ασφαλείας, χώρος αποθήκευσης</string>\n    <string name=\"pref_security_summary\">Κλείδωμα εφαρμογής, ασφαλής οθόνη</string>\n    <string name=\"crash_screen_restart_application\">Επανεκκίνηση της εφαρμογής</string>\n    <string name=\"pref_downloads_summary\">Αυτόματη λήψη, λήψη εκ των προτέρων</string>\n    <string name=\"pref_advanced_summary\">Αρχεία καταγραφής σφαλμάτων, βελτιστοποιήσεις μπαταρίας</string>\n    <string name=\"crash_screen_description\">Το %s αντιμετώπισε ένα απροσδόκητο σφάλμα. Σας προτείνουμε να μοιραστείτε τα αρχεία καταγραφής σφαλμάτων στο κανάλι υποστήριξης μας στο Discord.</string>\n    <string name=\"unknown_title\">Άγνωστος τίτλος</string>\n    <string name=\"invalid_location\">Μη έγκυρη τοποθεσία: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Μη έγκυρη συμβολοσειρά πράκτορα χρήστη</string>\n    <string name=\"updates_last_update_info_just_now\">Μόλις τώρα</string>\n    <string name=\"download_notifier_cache_renewal\">Έλεγχος λήψεων</string>\n    <string name=\"fdroid_warning\">Οι εκδόσεις F-Droid δεν υποστηρίζονται επίσημα.\n\\nΠατήστε για να μάθετε περισσότερα.</string>\n    <string name=\"action_open_random_manga\">Άνοιγμα τυχαίας καταχώρησης</string>\n    <string name=\"information_no_entries_found\">Δε βρέθηκαν καταχωρήσεις σε αυτή την κατηγορία</string>\n    <string name=\"action_display_show_continue_reading_button\">Κουμπί συνέχειας ανάγνωσης</string>\n    <string name=\"track_remove_date_conf_title\">Κατάργηση ημερομηνίας;</string>\n    <string name=\"track_remove_finish_date_conf_text\">Αυτό θα καταργήσει την ημερομηνία λήξης που επιλέξατε προηγουμένως από το %s</string>\n    <string name=\"track_remove_start_date_conf_text\">Αυτό θα καταργήσει την ημερομηνία έναρξης που επιλέξατε προηγουμένως από το %s</string>\n    <string name=\"pref_invalidate_download_cache\">Επανακαταχώριση ευρετηρίου λήψεων</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Αναγκάστε την εφαρμογή να ελέγξει ξανά τα ληφθέντα κεφάλαια</string>\n    <string name=\"label_stats\">Στατιστικά</string>\n    <string name=\"label_local\">Τοπικό</string>\n    <string name=\"label_started\">Ξεκίνησε</string>\n    <string name=\"label_completed_titles\">Ολοκληρωμένες καταχωρήσεις</string>\n    <string name=\"label_read_duration\">Διάρκεια ανάγνωσης</string>\n    <string name=\"label_total_chapters\">Σύνολο</string>\n    <string name=\"label_read_chapters\">Αναγνωσμένα</string>\n    <string name=\"label_tracker_section\">Ιχνηλάτες</string>\n    <string name=\"not_applicable\">Δ/Υ</string>\n    <string name=\"day_short\">%dημ</string>\n    <string name=\"hour_short\">%dω</string>\n    <string name=\"seconds_short\">%dδ</string>\n    <string name=\"label_used\">Σε χρήση</string>\n    <string name=\"minute_short\">%dλ</string>\n    <string name=\"label_overview_section\">Σύνοψη</string>\n    <string name=\"label_titles_section\">Καταχωρήσεις</string>\n    <string name=\"label_tracked_titles\">Παρακολουθούμενες καταχωρήσεις</string>\n    <string name=\"label_mean_score\">Μέση βαθμολογία</string>\n    <string name=\"label_downloaded\">Κατεβασμένο</string>\n    <string name=\"label_titles_in_global_update\">Σε καθολική ενημέρωση</string>\n    <string name=\"action_not_now\">Όχι τώρα</string>\n    <string name=\"information_no_manga_category\">Η κατηγορία είναι άδεια</string>\n    <string name=\"pref_library_update_show_tab_badge\">Εμφάνιση του αριθμού των μη αναγνωσμένων στο εικονίδιο Ενημερώσεις</string>\n    <string name=\"copied_to_clipboard_plain\">Αντιγράφηκε στο πρόχειρο</string>\n    <string name=\"confirm_add_duplicate_manga\">Έχετε μια καταχώρηση στη βιβλιοθήκη σας με το ίδιο όνομα.\n\\n\n\\nΘέλετε να συνεχίσετε;</string>\n    <string name=\"pref_skip_dupe_chapters\">Παράλειψη διπλότυπων κεφαλαίων</string>\n    <string name=\"enhanced_services_not_installed\">Διαθέσιμο αλλά η πηγή δεν έχει εγκατασταθεί: %s</string>\n    <string name=\"track_error\">%1$s σφάλμα: %2$s</string>\n    <string name=\"information_required_plain\">*απαιτούμενο</string>\n    <string name=\"pref_hide_in_library_items\">Απόκρυψη καταχωρήσεων που βρίσκονται ήδη στη βιβλιοθήκη</string>\n    <string name=\"action_copy_to_clipboard\">Αντιγραφή στο πρόχειρο</string>\n    <string name=\"action_update_category\">Ενημέρωση κατηγορίας</string>\n    <string name=\"split_tall_images\">Διαχωρισμός ψηλών εικόνων</string>\n    <string name=\"overlay_header\">Επικάλυψη</string>\n    <string name=\"pref_page_rotate\">Περιστροφή πλατιών σελίδων για να χωρέσουν</string>\n    <string name=\"pref_page_rotate_invert\">Αναστροφή του προσανατολισμού των πλατιών σελίδων που έχουν περιστραφεί</string>\n    <string name=\"pref_debug_info\">Πληροφορίες εντοπισμού σφαλμάτων</string>\n    <string name=\"pref_double_tap_zoom\">Διπλό πάτημα για ζουμ</string>\n    <string name=\"pref_chapter_swipe_start\">Κεφάλαιο με σύρσιμο προς τα αριστερά</string>\n    <string name=\"pref_chapter_swipe_end\">Κεφάλαιο με σύρσιμο προς τα δεξιά</string>\n    <string name=\"action_set_interval\">Ορισμός χρονικού διαστήματος</string>\n    <string name=\"action_filter_interval_custom\">Προσαρμοσμένη συχνότητα ενημέρωσης</string>\n    <string name=\"pref_update_only_in_release_period\">Πρόβλεψη χρόνου επόμενης απελευθέρωσης</string>\n    <string name=\"intervals_header\">Διαστήματα</string>\n    <string name=\"manga_display_interval_title\">Εκτίμηση κάθε</string>\n    <string name=\"manga_display_modified_interval_title\">Ρύθμιση για ενημέρωση κάθε</string>\n    <string name=\"action_sort_next_updated\">Επόμενη αναμενόμενη ενημέρωση</string>\n    <string name=\"skipped_reason_not_in_release_period\">Παραλείφθηκε επειδή δεν αναμενόταν κυκλοφορία σήμερα</string>\n    <string name=\"action_ok\">Εντάξει</string>\n    <string name=\"track_delete_title\">Κατάργηση παρακολούθησης %s;</string>\n    <string name=\"track_delete_remote_text\">Επίσης, αφαιρέστε από %s</string>\n    <string name=\"track_delete_text\">Αυτό θα καταργήσει την παρακολούθηση τοπικά.</string>\n    <string name=\"delete_downloaded\">Διαγραφή ληφθέντων</string>\n    <string name=\"has_results\">Έχει αποτελέσματα</string>\n    <string name=\"syncing_library\">Συγχρονισμός βιβλιοθήκης</string>\n    <string name=\"library_sync_complete\">Ο συγχρονισμός βιβλιοθήκης ολοκληρώθηκε</string>\n    <string name=\"information_cloudflare_help\">Πατήστε εδώ για βοήθεια με το Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Το ευρετήριο λήψεων ακυρώθηκε</string>\n    <string name=\"track_activity_name\">Σύνδεση παρακολούθησης</string>\n    <string name=\"create_backup_file_error\">Δεν ήταν δυνατή η δημιουργία αντιγράφου ασφαλείας</string>\n    <string name=\"exception_unknown_host\">Δεν ήταν δυνατή η πρόσβαση στο %s</string>\n    <string name=\"exception_http\">HTTP %d, ελέγξτε την ιστοσελίδα στο WebView</string>\n    <string name=\"exception_offline\">Δεν υπάρχει σύνδεση στο διαδίκτυο</string>\n    <string name=\"unlock_app_title\">Ξεκλείδωμα %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Μετακίνηση σειράς προς τα κάτω</string>\n    <string name=\"pref_relative_format\">Σχετικές χρονικές σημάνσεις</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" αντί του \\\"%2$s\\\"</string>\n    <string name=\"app_settings\">Ρυθμίσεις εφαρμογής</string>\n    <string name=\"notification_updating_progress\">Ενημέρωση βιβλιοθήκης… (%s)</string>\n    <string name=\"source_settings\">Ρυθμίσεις πηγών</string>\n    <string name=\"file_null_uri_error\">Δεν έχει επιλεγεί αρχείο</string>\n    <string name=\"relative_time_span_never\">Ποτέ</string>\n    <string name=\"pref_flash_page_summ\">Μειώνει το ghosting σε οθόνες e-ink</string>\n    <string name=\"last_auto_backup_info\">Τελευταία αυτόματη δημιουργία αντιγράφων ασφαλείας: %s</string>\n    <string name=\"pref_flash_page\">Λευκό φλας κατά την αλλαγή σελίδας</string>\n    <string name=\"pref_storage_usage\">Χρήση αποθηκευτικού χώρου</string>\n    <string name=\"action_sort_tracker_score\">Σκορ tracker</string>\n    <string name=\"label_data_storage\">Δεδομένα και χώρος αποθήκευσης</string>\n    <string name=\"action_create\">Δημιουργία</string>\n    <string name=\"action_apply\">Υποβολή</string>\n    <string name=\"action_revert_to_default\">Επαναφορά προεπιλογής</string>\n    <string name=\"no_scanlators_found\">Δε βρέθηκαν scanlators</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"exclude_scanlators\">Εξαίρεση scanlator</string>\n    <string name=\"action_menu_overflow_description\">Περισσότερες επιλογές</string>\n    <string name=\"selected\">Επιλεγμένο</string>\n    <string name=\"not_selected\">Μη επιλεγμένο</string>\n    <string name=\"action_bar_up_description\">Πλοήγηση προς τα πάνω</string>\n    <string name=\"pref_storage_location\">Τοποθεσία αποθήκευσης</string>\n    <string name=\"pref_storage_location_info\">Χρησιμοποιείται για αυτόματα αντίγραφα ασφαλείας, λήψη κεφαλαίων και τοπική πηγή.</string>\n    <string name=\"onboarding_storage_action_select\">Επιλέξτε ένα φάκελο</string>\n    <string name=\"onboarding_action_finish\">Ξεκινήστε</string>\n    <string name=\"onboarding_storage_selection_required\">Ένας φάκελος πρέπει να επιλεγεί</string>\n    <string name=\"onboarding_heading\">Καλώς ορίσατε!</string>\n    <string name=\"onboarding_action_skip\">Παράλειψη</string>\n    <string name=\"onboarding_action_next\">Επόμενο</string>\n    <string name=\"pref_onboarding_guide\">Οδηγός εισαγωγής</string>\n    <string name=\"onboarding_guides_new_user\">Είστε νέοι στο %s; Σας συνιστούμε να ανατρέξετε στον οδηγό έναρξης.</string>\n    <string name=\"onboarding_guides_returning_user\">Επανεγκατάσταση %s;</string>\n    <string name=\"onboarding_description\">Ας ρυθμίσουμε πρώτα κάποια πράγματα. Μπορείτε πάντα να τα αλλάξετε στις ρυθμίσεις αργότερα.</string>\n    <string name=\"no_location_set\">Δεν έχει οριστεί τοποθεσία αποθήκευσης</string>\n    <string name=\"onboarding_storage_info\">Επιλέξτε ένα φάκελο όπου το %1$s θα αποθηκεύει λήψεις κεφαλαίων, αντίγραφα ασφαλείας και άλλα.\n\\n\n\\nΣυνιστάται ένας αποκλειστικός φάκελος.\n\\n\n\\nΕπιλεγμένος φάκελος: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Άδεια ειδοποιήσεων</string>\n    <string name=\"onboarding_permission_install_apps\">Άδεια εγκατάστασης εφαρμογών</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Αποφύγετε διακοπές σε μακροχρόνιες ενημερώσεις της βιβλιοθήκης, λήψεις και επαναφορές αντιγράφων ασφαλείας.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Χρήση μπαταρίας στο παρασκήνιο</string>\n    <string name=\"onboarding_permission_install_apps_description\">Για εγκατάσταση επεκτάσεων πηγών.</string>\n    <string name=\"onboarding_permission_notifications_description\">Ειδοποιηθείτε για ενημερώσεις της βιβλιοθήκης και άλλων.</string>\n    <string name=\"onboarding_permission_action_grant\">Παραχώρηση</string>\n    <string name=\"available_disk_space_info\">Διαθέσιμο: %1$s / Σύνολο: %2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">Απαιτούνται δικαιώματα για την εγκατάσταση επεκτάσεων. Πατήστε εδώ για παραχώρηση.</string>\n    <string name=\"private_settings\">Συμπεριλάβετε ευαίσθητες ρυθμίσεις (π.χ. διακριτικά σύνδεσης παρακολούθησης)</string>\n    <string name=\"invalid_backup_file_error\">Πλήρες σφάλμα:</string>\n    <string name=\"action_add_repo\">Προσθήκη αποθετηρίων</string>\n    <string name=\"action_delete_repo\">Διαγραφή αποθετηρίου</string>\n    <string name=\"onboarding_storage_help_info\">Ενημερώνετε από μια παλαιότερη έκδοση και δεν είστε σίγουροι τι να επιλέξετε; Ανατρέξτε στον οδηγό αποθήκευσης για περισσότερες πληροφορίες.</string>\n    <string name=\"onboarding_storage_help_action\">Οδηγός αποθήκευσης</string>\n    <string name=\"label_extension_repos\">Αποθετήρια επεκτάσεων</string>\n    <string name=\"information_empty_repos\">Δεν έχετε ορίσει αποθετήρια.</string>\n    <string name=\"invalid_repo_name\">Λανθασμένο URL αποθετηρίου</string>\n    <string name=\"manga_interval_expected_update\">Τα νέα κεφάλαια προβλέπεται να κυκλοφορήσουν σε περίπου %1$s, ελέγχοντας κάθε %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Προσαρμοσμένη συχνότητα ενημέρωσης:</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"pref_library_update_smart_update\">Έξυπνη ενημέρωση</string>\n    <string name=\"label_add_repo_input\">URL αποθετηρίου</string>\n    <string name=\"action_add_repo_message\">Προσθέστε επιπλέον αποθετήρια στο Mihon. Αυτό θα πρέπει να είναι ένα URL που τελειώνει με \\\"index.min.json\\\".</string>\n    <string name=\"delete_repo_confirmation\">Θέλετε να διαγράψετε το αποθετήριο \\\"%s\\\";</string>\n    <string name=\"error_repo_exists\">Αυτό το αποθετήριο υπάρχει ήδη!</string>\n    <string name=\"manga_interval_expected_update_soon\">Σύντομα</string>\n    <string name=\"ext_revoke_trust\">Ανάκληση αξιόπιστων άγνωστων επεκτάσεων</string>\n    <string name=\"action_open_repo\">Αποθετήριο ανοικτού κώδικα</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Απενεργοποίηση σμίκρυνσης εικόνας</string>\n    <string name=\"action_add_anyway\">Προσθέστε ούτως ή άλλως</string>\n    <string name=\"action_replace_repo_message\">Το αποθετήριο %1$s έχει το ίδιο δακτυλικό αποτύπωμα κλειδιού υπογραφής με το %2$s.\n\\nΕάν αυτό είναι αναμενόμενο, το %2$s θα αντικατασταθεί, διαφορετικά επικοινωνήστε με τον συντηρητή του αποθετηρίου σας.</string>\n    <string name=\"label_upcoming\">Ανερχόμενο</string>\n    <string name=\"action_migrate_duplicate\">Μεταφορά υπάρχουσας καταχώρησης</string>\n    <string name=\"pref_display_profile\">Προσαρμοσμένο προφίλ εμφάνισης</string>\n    <string name=\"action_view_upcoming\">Δείτε τις επερχόμενες ενημερώσεις</string>\n    <string name=\"action_replace_repo\">Αντικατάσταση</string>\n    <string name=\"action_replace_repo_title\">Το δακτυλικό αποτύπωμα κλειδιού υπογραφής υπάρχει ήδη</string>\n    <string name=\"upcoming_guide\">Οδηγός ανερχόμενων</string>\n    <string name=\"upcoming_calendar_next\">Επόμενο μήνα</string>\n    <string name=\"upcoming_calendar_prev\">Προηγούμενο Μήνα</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Αποτυχία απόκτησης μόνιμης πρόσβασης φακέλου. Η εφαρμογή μπορεί να συμπεριφέρεται απροσδόκητα.</string>\n    <string name=\"non_library_settings\">Όλες οι καταχωρήσεις που έχουν διαβαστεί</string>\n    <string name=\"action_copy_link\">Αντιγραφή συνδέσμου</string>\n    <string name=\"manga_interval_expected_update_null\">Αυτό το manga είτε έχει ολοκληρωθεί, είτε δεν υπάρχει προβλεπόμενη ημερομηνία κυκλοφορίας.</string>\n    <string name=\"action_sort_random\">Τυχαίο</string>\n    <string name=\"onboarding_permission_analytics\">Να επιτρέπονται τα αναλυτικά στοιχεία</string>\n    <string name=\"pref_firebase\">Αναλύσεις και αρχεία καταγραφής ατυχημάτων</string>\n    <string name=\"onboarding_permission_crashlytics\">Αποστολή αρχείων καταγραφής σφαλμάτων</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Παράλειψη λήψης διπλότυπων αναγνωσμένων κεφαλαίων</string>\n    <string name=\"firebase_summary\">Η αποστολή αρχείων καταγραφής σφαλμάτων και αναλυτικών στοιχείων θα μας επιτρέψει να εντοπίσουμε και να διορθώσουμε προβλήματα, να βελτιώσουμε την απόδοση και να κάνουμε τις μελλοντικές ενημερώσεις πιο σχετικές με τις ανάγκες σας</string>\n    <string name=\"add_repo_confirmation\">Θέλετε να προσθέσετε το repo \\\"%s\\\"?</string>\n    <string name=\"remove_private_extension_message\">Θέλετε πραγματικά να αφαιρέσετε την επέκταση \\\"%s?</string>\n    <string name=\"pref_flash_page_interval\">Φλας κάθε</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Αποστολή ανώνυμων αρχείων καταγραφής σφαλμάτων στους προγραμματιστές.</string>\n    <string name=\"onboarding_permission_analytics_description\">Αποστολή ανώνυμων δεδομένων χρήσης για τη βελτίωση των λειτουργιών της εφαρμογής.</string>\n    <string name=\"pref_security\">Ασφάλεια</string>\n    <string name=\"pref_flash_style_black\">Μαύρο</string>\n    <string name=\"pref_flash_style_white\">Λευκό</string>\n    <string name=\"extensionRepo_settings\">Repos επεκτάσεων</string>\n    <string name=\"ext_remove\">Αφαίρεση</string>\n    <string name=\"ext_confirm_remove\">Αφαίρεση επέκτασης?</string>\n    <string name=\"pref_flash_duration\">Διάρκεια Φλας</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_with\">Φλας με</string>\n    <string name=\"pref_flash_style_white_black\">Λευκό και Μαύρο</string>\n    <string name=\"confirm_tracker_update\">Ενημέρωση ανιχνευτών στο κεφάλαιο %d?</string>\n    <string name=\"invalid_backup_file_unknown\">Το αρχείο αντιγράφων ασφαλείας έχει καταστραφεί</string>\n    <string name=\"invalid_backup_file_json\">Δεν υποστηρίζεται η δημιουργία αντιγράφων ασφαλείας JSON</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Ενημέρωση προόδου όταν επισημανθεί ως αναγνωσμένη</string>\n    <string name=\"trackers_updated_summary\">Οι trackers ενημερώθηκαν στο κεφάλαιο %d</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Παύση ιστορικού ανάγνωσης για επέκταση</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Προεπιλογή (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Εάν ο αναγνώστης φορτώσει μια κενή εικόνα, μειώστε σταδιακά το όριο.\\nΕπιλεγμένο: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Επηρεάζει την απόδοση. Ενεργοποιήστε το μόνο αν η μείωση του ορίου bitmap δε διορθώνει τα προβλήματα κενών εικόνων</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Προσαρμοσμένο όριο bitmap υλικού</string>\n    <string name=\"label_auto\">Αυτόματο</string>\n    <string name=\"export\">Εξαγωγή</string>\n    <string name=\"library_list\">Κατάλογος Βιβλιοθήκης</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Χρησιμοποιήστε αποκωδικοποιητή παλαιού τύπου για ανάγνωση μακριών ταινιών</string>\n    <string name=\"theme_monochrome\">Μονόχρωμο</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Επισήμανση διπλότυπου αναγνωσμένου κεφαλαίου ως αναγνωσμένο</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_new\">Μετά τη λήψη του νέου κεφαλαίου</string>\n    <string name=\"action_display_unread_badge\">Μη αναγνωσμένα κεφάλαια</string>\n    <string name=\"pref_behavior\">Συμπεριφορά</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_existing\">Μετά την ανάγνωση ενός κεφαλαίου</string>\n    <string name=\"library_exported\">Έγινε εξαγωγή της βιβλιοθήκης</string>\n    <string name=\"author\">Συγγραφέας</string>\n    <string name=\"artist\">Καλλιτέχνης</string>\n    <string name=\"tracked_privately\">Παρακολουθείται ιδιωτικά</string>\n    <string name=\"action_toggle_private_off\">Παρακολούθηση δημόσια</string>\n    <string name=\"action_toggle_private_on\">Παρακολούθηση ιδιωτικά</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/eo/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Post %1$s minuto</item>\n        <item quantity=\"other\">Post %1$s minutoj</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategorio</item>\n        <item quantity=\"other\">%d kategorioj</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s ĉapitro</item>\n        <item quantity=\"other\">%1$s ĉapitroj</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Ĉapitroj %1$s kaj 1 pli</item>\n        <item quantity=\"other\">Ĉapitroj %1$s kaj %2$d pli</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nova ĉapitro</item>\n        <item quantity=\"other\">%1$d novaj ĉapitroj</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Por 1 titolo</item>\n        <item quantity=\"other\">Por %d titoloj</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Preterpasas %d ĉapitron, aŭ ĝi mankas ĉe la fonto aŭ ĝi estis elfiltrita</item>\n        <item quantity=\"other\">Preterpasas %d ĉapitrojn, aŭ ili mankas ĉe la fonto aŭ ili estis elfiltritaj</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">1 ŝanĝspurilo</item>\n        <item quantity=\"other\">%d ŝanĝspuriloj</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s restas</item>\n        <item quantity=\"other\">%1$s restas</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Farita en %1$s kun %2$s eraro</item>\n        <item quantity=\"other\">Farita en %1$s kun %2$s eraroj</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Hieraŭ</item>\n        <item quantity=\"other\">Antaŭ %1$d tagoj</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 tago</item>\n        <item quantity=\"other\">%d tagoj</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Sekva ĉapitro</item>\n        <item quantity=\"other\">Sekvaj %d ĉapitroj</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Mankas %1$s ĉapitro</item>\n        <item quantity=\"other\">Mankas %1$s ĉapitroj</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Sekva nelegita ĉapitro</item>\n        <item quantity=\"other\">Sekvaj %d nelegitaj ĉapitroj</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d deponejo</item>\n        <item quantity=\"other\">%d deponejoj</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Disponebla ĝisdatigo de etendaĵo</item>\n        <item quantity=\"other\">Disponeblaj ĝisdatigoj de %d etendaĵoj</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Morgaŭ</item>\n        <item quantity=\"other\">post %1$d tagoj</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 paĝo</item>\n        <item quantity=\"other\">%1$s paĝoj</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/eo/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_sources\">Fontoj</string>\n    <string name=\"label_recent_manga\">Historio</string>\n    <string name=\"label_recent_updates\">Ĝisdatigoj</string>\n    <string name=\"label_library\">Biblioteko</string>\n    <string name=\"label_download_queue\">Elŝutvico</string>\n    <string name=\"label_settings\">Agordoj</string>\n    <string name=\"label_more\">Pli</string>\n    <string name=\"name\">Nomo</string>\n    <string name=\"information_no_recent\">Neniuj lastatempaj ĝisdatigoj</string>\n    <string name=\"information_no_downloads\">Neniu elŝuto</string>\n    <string name=\"label_help\">Helpo</string>\n    <string name=\"label_extension_info\">Pri etendaĵo</string>\n    <string name=\"label_extensions\">Etendaĵoj</string>\n    <string name=\"label_migration\">Migri</string>\n    <string name=\"label_backup\">Savkopii kaj restaŭri</string>\n    <string name=\"website\">Retejo</string>\n    <string name=\"username\">Uzantnomo</string>\n    <string name=\"password\">Pasvorto</string>\n    <string name=\"email\">Retpoŝta adreso</string>\n    <string name=\"action_view_chapters\">Vidi ĉapitrojn</string>\n    <string name=\"action_rename_category\">Alinomi kategorion</string>\n    <string name=\"action_edit_categories\">Redakti kategoriojn</string>\n    <string name=\"action_add_category\">Aldoni kategorion</string>\n    <string name=\"action_add\">Aldoni</string>\n    <string name=\"action_edit\">Redakti</string>\n    <string name=\"action_disable_all\">Malŝalti ĉiujn</string>\n    <string name=\"action_enable_all\">Ŝalti ĉiujn</string>\n    <string name=\"action_update_library\">Ĝisdatigi bibliotekon</string>\n    <string name=\"action_delete\">Forigi</string>\n    <string name=\"action_remove_bookmark\">Mallegosigni ĉapitron</string>\n    <string name=\"action_bookmark\">Legosigni ĉapitron</string>\n    <string name=\"action_download\">Elŝuti</string>\n    <string name=\"action_mark_as_unread\">Marki kiel nelegita</string>\n    <string name=\"action_mark_as_read\">Marki kiel legita</string>\n    <string name=\"action_select_all\">Elekti ĉiujn</string>\n    <string name=\"action_search_settings\">Serĉi agordojn</string>\n    <string name=\"action_search\">Serĉi</string>\n    <string name=\"action_sort_date_added\">Aldona dato</string>\n    <string name=\"action_sort_last_read\">Laste legitaj</string>\n    <string name=\"action_sort_total\">Ĉapitroj entute</string>\n    <string name=\"action_sort_alpha\">Alfabete</string>\n    <string name=\"action_filter_empty\">Forigi filtrilon</string>\n    <string name=\"action_filter_unread\">Nelegitaj</string>\n    <string name=\"action_filter_bookmarked\">Legosignitaj</string>\n    <string name=\"action_filter\">Filtrilo</string>\n    <string name=\"action_menu\">Menuo</string>\n    <string name=\"action_settings\">Agordoj</string>\n    <string name=\"history\">Historio</string>\n    <string name=\"chapters\">Ĉapitroj</string>\n    <string name=\"manga\">Bibliotekaj elementoj</string>\n    <string name=\"categories\">Kategorioj</string>\n    <string name=\"information_empty_library\">Via biblioteko malplenas</string>\n    <string name=\"information_no_recent_manga\">Neniu legita lastatempe</string>\n    <string name=\"hide_notification_content\">Kaŝi enhavon de sciigoj</string>\n    <string name=\"lock_never\">Neniam</string>\n    <string name=\"lock_always\">Ĉiam</string>\n    <string name=\"pref_category_security\">Sekureco kaj privateco</string>\n    <string name=\"pref_manage_notifications\">Administri sciigojn</string>\n    <string name=\"pref_date_format\">Data formo</string>\n    <string name=\"theme_dark\">Malhela</string>\n    <string name=\"theme_light\">Hela</string>\n    <string name=\"theme_system\">Operaciume</string>\n    <string name=\"pref_category_theme\">Etoso</string>\n    <string name=\"pref_category_about\">Pri</string>\n    <string name=\"pref_category_downloads\">Elŝutoj</string>\n    <string name=\"pref_category_reader\">Legilo</string>\n    <string name=\"pref_category_library\">Biblioteko</string>\n    <string name=\"action_undo\">Malfari</string>\n    <string name=\"action_save\">Konservi</string>\n    <string name=\"action_share\">Konigi</string>\n    <string name=\"action_install\">Instali</string>\n    <string name=\"action_oldest\">Plej malnovaj</string>\n    <string name=\"action_newest\">Plej novaj</string>\n    <string name=\"action_sort\">Ordigi</string>\n    <string name=\"action_cancel_all\">Nuligi ĉiujn</string>\n    <string name=\"action_cancel\">Nuligi</string>\n    <string name=\"action_unpin\">Depingli</string>\n    <string name=\"action_pin\">Alpingli</string>\n    <string name=\"action_disable\">Malŝalti</string>\n    <string name=\"action_display_comfortable_grid\">Komforta krado</string>\n    <string name=\"action_display_list\">Listo</string>\n    <string name=\"action_migrate\">Migri</string>\n    <string name=\"action_open_in_browser\">Malfermi per retumilo</string>\n    <string name=\"action_start\">Komenci</string>\n    <string name=\"action_remove\">Forigi</string>\n    <string name=\"action_retry\">Reprovi</string>\n    <string name=\"action_next_chapter\">Sekva ĉapitro</string>\n    <string name=\"action_previous_chapter\">Antaŭa ĉapitro</string>\n    <string name=\"ext_uninstall\">Malinstali</string>\n    <string name=\"ext_untrusted\">Malfidata</string>\n    <string name=\"ext_trust\">Fidi</string>\n    <string name=\"ext_installed\">Instalita</string>\n    <string name=\"ext_installing\">Instalata</string>\n    <string name=\"ext_downloading\">Elŝutata</string>\n    <string name=\"ext_install\">Instali</string>\n    <string name=\"ext_obsolete\">Malaktuala</string>\n    <string name=\"ext_update\">Ĝisdatigi</string>\n    <string name=\"exclude\">Ekskluzivi: %s</string>\n    <string name=\"include\">Inkluzivi: %s</string>\n    <string name=\"none\">Nenio</string>\n    <string name=\"default_category_summary\">Ĉiam demandi</string>\n    <string name=\"default_category\">Defaŭlta kategorio</string>\n    <string name=\"update_weekly\">Ĉiusemajne</string>\n    <string name=\"update_24hour\">Ĉiutage</string>\n    <string name=\"invalid_backup_file\">Nevalida savkopia dosiero:</string>\n    <string name=\"backup_created\">Savkopio kreita</string>\n    <string name=\"pref_create_backup\">Krei savkopion</string>\n    <string name=\"pref_download_new\">Elŝuti novajn ĉapitrojn</string>\n    <string name=\"disabled\">Malŝaltita</string>\n    <string name=\"pref_category_delete_chapters\">Forigi ĉapitrojn</string>\n    <string name=\"double_tap_anim_speed_0\">Sen animacioj</string>\n    <string name=\"scale_type_original_size\">Originala grando</string>\n    <string name=\"scale_type_stretch\">Streĉi</string>\n    <string name=\"scale_type_fit_screen\">Adapti al ekrano</string>\n    <string name=\"webtoon_viewer\">Longa strio</string>\n    <string name=\"black_background\">Nigra</string>\n    <string name=\"gray_background\">Griza</string>\n    <string name=\"white_background\">Blanka</string>\n    <string name=\"pref_reader_theme\">Fona koloro</string>\n    <string name=\"pref_read_with_volume_keys\">Laŭtecaj klavoj</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"nav_zone_next\">Sekva</string>\n    <string name=\"nav_zone_prev\">Antaŭa</string>\n    <string name=\"browse\">Foliumi</string>\n    <string name=\"downloaded_chapters\">Elŝutitaj ĉapitroj</string>\n    <string name=\"in_library\">En biblioteko</string>\n    <string name=\"manga_added_library\">Aldonita al biblioteko</string>\n    <string name=\"add_to_library\">Aldoni al biblioteko</string>\n    <string name=\"pref_remove_after_read\">Aŭtomate forigi post lego</string>\n    <string name=\"pref_category_reading\">Legada</string>\n    <string name=\"pref_category_reading_mode\">Lega reĝimo</string>\n    <string name=\"color_filter_a_value\">Alfa</string>\n    <string name=\"color_filter_b_value\">Blua</string>\n    <string name=\"color_filter_g_value\">Verda</string>\n    <string name=\"color_filter_r_value\">Ruĝa</string>\n    <string name=\"rotation_free\">Libera</string>\n    <string name=\"pref_rotation_type\">Defaŭlta orientiĝo</string>\n    <string name=\"double_tap_anim_speed_fast\">Rapida</string>\n    <string name=\"double_tap_anim_speed_normal\">Normala</string>\n    <string name=\"zoom_start_automatic\">Aŭtomata</string>\n    <string name=\"scale_type_smart_fit\">Saĝe adapti</string>\n    <string name=\"scale_type_fit_height\">Adapti laŭ alto</string>\n    <string name=\"scale_type_fit_width\">Adapti laŭ larĝo</string>\n    <string name=\"vertical_plus_viewer\">Longa strio kun interspacoj</string>\n    <string name=\"vertical_viewer\">Paĝigita (vertikale)</string>\n    <string name=\"nav_zone_right\">Dekstra</string>\n    <string name=\"nav_zone_left\">Maldekstra</string>\n    <string name=\"right_and_left_nav\">Dekstre kaj maldekstre</string>\n    <string name=\"l_nav\">L-forme</string>\n    <string name=\"tapping_inverted_both\">Ambaŭ</string>\n    <string name=\"tapping_inverted_vertical\">Vertikale</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontale</string>\n    <string name=\"tapping_inverted_none\">Ne</string>\n    <string name=\"pref_reader_navigation\">Navigado</string>\n    <string name=\"pref_skip_read_chapters\">Preterpasi ĉapitrojn markitajn kiel legitaj</string>\n    <string name=\"pref_keep_screen_on\">Ne malŝalti ekranon</string>\n    <string name=\"filter_mode_screen\">Ekranado</string>\n    <string name=\"filter_mode_multiply\">Obligado</string>\n    <string name=\"filter_mode_overlay\">Plustavolo</string>\n    <string name=\"pref_custom_brightness\">Propra heleco</string>\n    <string name=\"pref_crop_borders\">Stuci borderojn</string>\n    <string name=\"pref_show_reading_mode\">Montri legadan reĝimon</string>\n    <string name=\"pref_show_page_number\">Montri paĝan nombron</string>\n    <string name=\"pref_fullscreen\">Plenekrano</string>\n    <string name=\"obsolete_extension_message\">Tiu etendaĵo ne plu disponeblas. Ĝi eble ne funkcios ĝuste kaj povas kaŭzi problemojn pri la apo. Malinstalado de ĝi estas rekomendata.</string>\n    <string name=\"all\">Ĉio</string>\n    <string name=\"update_48hour\">Ĉiun 2an tagon</string>\n    <string name=\"update_12hour\">Ĉiun 12an horon</string>\n    <string name=\"update_6hour\">Ĉiun 6an horon</string>\n    <string name=\"update_never\">Malŝaltitaj</string>\n    <string name=\"pref_library_update_interval\">Aŭtomataj ĝisdatigoj</string>\n    <string name=\"pref_category_library_update\">Tuta ĝisdatigo</string>\n    <string name=\"landscape\">Horizontale</string>\n    <string name=\"portrait\">Vertikale</string>\n    <string name=\"pref_category_display\">Montrado</string>\n    <string name=\"pref_show_nsfw_source\">Montri en fontaj kaj etendaĵaj listoj</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) fontoj</string>\n    <string name=\"pref_category_general\">Ĝeneralaj</string>\n    <string name=\"app_not_available\">Apo maldisponebla</string>\n    <string name=\"action_restore\">Restaŭri</string>\n    <string name=\"action_show_errors\">Tuŝeti pro montri detalojn</string>\n    <string name=\"action_reset\">Restartigi</string>\n    <string name=\"action_display_show_number_of_items\">Montri nombron de elementoj</string>\n    <string name=\"action_display_show_tabs\">Montri kategoriajn langetojn</string>\n    <string name=\"action_display_download_badge\">Elŝutitaj ĉapitroj</string>\n    <string name=\"action_display_grid\">Kompakta krado</string>\n    <string name=\"action_display\">Montrado</string>\n    <string name=\"action_display_mode\">Montrada reĝimo</string>\n    <string name=\"action_open_in_web_view\">Malfermi per WebView</string>\n    <string name=\"action_resume\">Daŭrigi</string>\n    <string name=\"action_pause\">Paŭzigi</string>\n    <string name=\"action_edit_cover\">Redakti kovrilon</string>\n    <string name=\"action_move_category\">Agordi kategoriojn</string>\n    <string name=\"action_global_search\">Serĉi ĉie</string>\n    <string name=\"ext_updates_pending\">Ĝisdatigoj atendantaj</string>\n    <string name=\"pref_category_advanced\">Altnivelaj</string>\n    <string name=\"action_open_log\">Malfermi protokolon</string>\n    <string name=\"action_mark_previous_as_read\">Marki antaŭa kiel legita</string>\n    <string name=\"action_sort_latest_chapter\">Lasta ĉapitro</string>\n    <string name=\"spen_next_page\">Sekva paĝo</string>\n    <string name=\"spen_previous_page\">Antaŭa paĝo</string>\n    <string name=\"channel_new_chapters\">Ĉapitraj ĝisdatigoj</string>\n    <string name=\"channel_errors\">Eraroj</string>\n    <string name=\"channel_complete\">Finitaj</string>\n    <string name=\"channel_progress\">Progreso</string>\n    <string name=\"download_notifier_title_error\">Eraro</string>\n    <string name=\"update_check_notification_update_available\">Nova versio disponebla!</string>\n    <string name=\"update_check_notification_download_error\">Elŝutada eraro</string>\n    <string name=\"update_check_notification_download_complete\">Elŝutado finita</string>\n    <string name=\"update_check_notification_download_in_progress\">Elŝutas…</string>\n    <string name=\"update_check_no_new_updates\">Neniu nova ĝisdatigo disponebla</string>\n    <string name=\"update_check_confirm\">Elŝuti</string>\n    <string name=\"file_select_backup\">Elekti savkopian dosieron</string>\n    <string name=\"notification_chapters_multiple\">Ĉapitroj %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Ĉapitro %1$s kaj %2$d pli</string>\n    <string name=\"notification_chapters_single\">Ĉapitro %1$s</string>\n    <string name=\"notification_new_chapters\">Novaj ĉapitroj trovitaj</string>\n    <string name=\"copy\">Kopii</string>\n    <string name=\"migrate\">Migri</string>\n    <string name=\"clear_history_confirmation\">Ĉu vi certas? La tuta historio forigos.</string>\n    <string name=\"clear_history_completed\">Historio viŝita</string>\n    <string name=\"pref_clear_history\">Viŝi historion</string>\n    <string name=\"recent_manga_time\">Ĉap. %1$s - %2$s</string>\n    <string name=\"updating_library\">Ĝisdatigas bibliotekon</string>\n    <string name=\"loader_not_implemented_error\">Fonto ne trovita</string>\n    <string name=\"page_list_empty_error\">Neniu paĝo trovita</string>\n    <string name=\"transition_no_previous\">Ne estas antaŭa ĉapitro</string>\n    <string name=\"transition_no_next\">Ne estas sekva ĉapitro</string>\n    <string name=\"transition_previous\">Antaŭa:</string>\n    <string name=\"transition_next\">Sekva:</string>\n    <string name=\"transition_current\">Aktuala:</string>\n    <string name=\"transition_finished\">Finita:</string>\n    <string name=\"viewer\">Legada reĝimo</string>\n    <string name=\"no_next_chapter\">Sekva ĉapitro ne trovita</string>\n    <string name=\"chapter_progress\">Paĝo: %1$d</string>\n    <string name=\"share_page_info\">%1$s: %2$s, paĝo %3$d</string>\n    <string name=\"picture_saved\">Bildo konservita</string>\n    <string name=\"snack_categories_deleted\">Kategorioj forigitaj</string>\n    <string name=\"error_category_exists\">Kategorio kun ĉi tiu nomo jam ekzistas!</string>\n    <string name=\"track_type\">Speco</string>\n    <string name=\"track_status\">Stato</string>\n    <string name=\"status\">Stato</string>\n    <string name=\"title\">Titolo</string>\n    <string name=\"score\">Takso</string>\n    <string name=\"repeating\">Legataj denove</string>\n    <string name=\"dropped\">Forĵetitaj</string>\n    <string name=\"completed\">Finitaj</string>\n    <string name=\"reading\">Legata</string>\n    <string name=\"add_tracking\">Aldoni ŝanospuron</string>\n    <string name=\"manga_tracking_tab\">Ŝanĝspurado</string>\n    <string name=\"no_chapters_error\">Neniu ĉapitro trovita</string>\n    <string name=\"set_chapter_settings_as_default\">Agordi kiel defaŭlta</string>\n    <string name=\"chapter_settings\">Ĉapitrajn agordojn</string>\n    <string name=\"confirm_delete_chapters\">Ĉu vi certe volas forigi elektitajn ĉapitrojn?</string>\n    <string name=\"download_unread\">Nelegitajn</string>\n    <string name=\"manga_download\">Elŝuti</string>\n    <string name=\"sort_by_upload_date\">Laŭ laŝutita dato</string>\n    <string name=\"sort_by_number\">Laŭ ĉapitra numero</string>\n    <string name=\"sort_by_source\">Laŭ fonto</string>\n    <string name=\"show_chapter_number\">Ĉapitra numero</string>\n    <string name=\"show_title\">Fonta titolo</string>\n    <string name=\"chapter_paused\">Paŭzigita</string>\n    <string name=\"chapter_error\">Eraro</string>\n    <string name=\"chapter_downloading_progress\">Elŝutas (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">Ĉapitro %1$s</string>\n    <string name=\"snack_add_to_library\">Ĉu aldoni mangaon al biblioteko?</string>\n    <string name=\"source_not_installed\">Fonto ne instalita: %1$s</string>\n    <string name=\"clipboard_copy_error\">Kopiado al tondejo malsukcesis</string>\n    <string name=\"copied_to_clipboard\">Kopita al tondejo:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">Ĉu forigi elŝutitajn ĉapitrojn?</string>\n    <string name=\"manga_info_collapse\">Malpli</string>\n    <string name=\"manga_info_expand\">Pli</string>\n    <string name=\"manga_removed_library\">Forigita de biblioteko</string>\n    <string name=\"remove_from_library\">Forigi de biblioteko</string>\n    <string name=\"unknown_status\">Nekonata stato</string>\n    <string name=\"unknown_author\">Nekonata aŭtoro</string>\n    <string name=\"unknown\">Nekonata</string>\n    <string name=\"ongoing\">Okazanta</string>\n    <string name=\"no_pinned_sources\">Vi ne havas alpinglitajn fontojn</string>\n    <string name=\"latest\">Lastaj</string>\n    <string name=\"action_global_search_query\">Serĉi por \\\"%1$s\\\" ĉie</string>\n    <string name=\"action_global_search_hint\">Ĉiea serĉo…</string>\n    <string name=\"pinned_sources\">Alpinglitaj</string>\n    <string name=\"last_used_source\">Laste uzitaj</string>\n    <string name=\"other_source\">Aliaj</string>\n    <string name=\"no_results_found\">Neniu rezulto trovita</string>\n    <string name=\"no_more_results\">Ne pli rezultoj</string>\n    <string name=\"tabs_header\">Langetoj</string>\n    <string name=\"manga_from_library\">Mangao de biblioteko</string>\n    <string name=\"unknown_error\">Nekonata eraro</string>\n    <string name=\"logout_success\">Vi nun estas elsalutita</string>\n    <string name=\"logout\">Elsaluti</string>\n    <string name=\"logout_title\">Elsaluti el %1$s?</string>\n    <string name=\"login_success\">Ensalutita</string>\n    <string name=\"login\">Ensaluti</string>\n    <string name=\"login_title\">Ensaluti al %1$s</string>\n    <string name=\"label_downloaded_only\">Nur elŝutitaj</string>\n    <string name=\"updated_version\">Ĝisdatigita al v%1$s</string>\n    <string name=\"licenses\">Malfermitkodaj permesiloj</string>\n    <string name=\"whats_new\">Kio novas</string>\n    <string name=\"version\">Versio</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Ne povis malfermi aparatajn agordojn</string>\n    <string name=\"clear_database_completed\">Elementoj forigitaj</string>\n    <string name=\"pref_clear_database\">Viŝi datumbazon</string>\n    <string name=\"cache_delete_error\">Eraro okazis dum viŝado</string>\n    <string name=\"cache_deleted\">Kaŝmemoro viŝita, %1$d dosieroj forigitaj</string>\n    <string name=\"used_cache\">Uzata: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">Viŝi ĉapitran kaŝmemoron</string>\n    <string name=\"label_data\">Datumoj</string>\n    <string name=\"cookies_cleared\">Kuketoj viŝitaj</string>\n    <string name=\"pref_clear_cookies\">Viŝi kuketojn</string>\n    <string name=\"label_network\">Reto</string>\n    <string name=\"creating_backup_error\">Savkopia kreado fiaskis</string>\n    <string name=\"creating_backup\">Savkopia kreado</string>\n    <string name=\"backup_choice\">Kion vi volas savkopii?</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d sek</string>\n    <string name=\"backup_restore_missing_sources\">Mankantaj fontoj:</string>\n    <string name=\"pref_category_auto_download\">Aŭtomata elŝuto</string>\n    <string name=\"last_read_chapter\">Laste legita ĉapitro</string>\n    <string name=\"rotation_type\">Orientiĝo</string>\n    <string name=\"zoom_start_center\">Centra</string>\n    <string name=\"zoom_start_right\">Dekstra</string>\n    <string name=\"zoom_start_left\">Maldekstra</string>\n    <string name=\"pref_viewer_nav\">Tuŝetzonoj</string>\n    <string name=\"pager_viewer\">Paĝigita</string>\n    <string name=\"right_to_left_viewer\">Paĝigita (dekstre maldekstren)</string>\n    <string name=\"left_to_right_viewer\">Paĝigita (maldekstre dekstren)</string>\n    <string name=\"edge_nav\">Rande</string>\n    <string name=\"kindlish_nav\">Simile al Kindle</string>\n    <string name=\"pref_viewer_type\">Defaŭlta lega reĝimo</string>\n    <string name=\"automatic_background\">Aŭtomata</string>\n    <string name=\"pref_reader_actions\">Agoj</string>\n    <string name=\"pref_custom_color_filter\">Propra kolorfiltrilo</string>\n    <string name=\"off\">Malŝaltita</string>\n    <string name=\"on\">Ŝaltita</string>\n    <string name=\"pref_library_columns\">Krada grando</string>\n    <string name=\"relative_time_today\">Hodiaŭ</string>\n    <string name=\"theme_yinyang\">Jino kaj jango</string>\n    <string name=\"theme_greenapple\">Verda pomo</string>\n    <string name=\"pref_app_theme\">Apa etoso</string>\n    <string name=\"pref_category_appearance\">Aspekto</string>\n    <string name=\"action_start_downloading_now\">Komenci elŝuti nun</string>\n    <string name=\"action_webview_refresh\">Reŝargi</string>\n    <string name=\"action_webview_forward\">Antaŭen</string>\n    <string name=\"action_webview_back\">Reen</string>\n    <string name=\"action_move_to_bottom\">Movi al malsupro</string>\n    <string name=\"action_move_to_top\">Movi al supro</string>\n    <string name=\"action_desc\">Malkreskante</string>\n    <string name=\"action_asc\">Kreskante</string>\n    <string name=\"action_order_by_chapter_number\">Laŭ nombro de ĉapitroj</string>\n    <string name=\"action_order_by_upload_date\">Laŭ elŝuta dato</string>\n    <string name=\"action_select_inverse\">Elekti inverse</string>\n    <string name=\"label_default\">Defaŭlte</string>\n    <string name=\"information_empty_category\">Vi havas neniun kategorion. Tuŝeti la butonon kun plus, por krei unu kaj organizi vian bibliotekon.</string>\n    <string name=\"channel_ext_updates\">Kromaĵaj ĝisdatigoj</string>\n    <string name=\"download_notifier_download_paused\">Elŝutito paŭzigita</string>\n    <string name=\"download_notifier_downloader_title\">Elŝutilo</string>\n    <string name=\"pref_category_for_this_series\">Por ĉi-serion</string>\n    <string name=\"custom_filter\">Propra filtrilo</string>\n    <string name=\"source_unsupported\">Fonto ne subtenita</string>\n    <string name=\"myanimelist_relogin\">Bonvole ensalutu al MAL denove</string>\n    <string name=\"plan_to_read\">Planas legi</string>\n    <string name=\"paused\">Paŭzita</string>\n    <string name=\"on_hold\">Haltetita</string>\n    <string name=\"unread\">Nelegita</string>\n    <string name=\"also_set_chapter_settings_for_library\">Ankaŭ apliki al ĉiuj mangaoj en mia biblioteko</string>\n    <string name=\"confirm_set_chapter_settings\">Ĉu vi certe volas konservi ĉi-agordoj kiel defaŭltaj?</string>\n    <string name=\"date\">Dato</string>\n    <string name=\"local_filter_order_by\">Ordigi laŭ</string>\n    <string name=\"local_invalid_format\">Nevalida ĉapitra formato</string>\n    <string name=\"chapter_not_found\">Ĉapitro netrovita</string>\n    <string name=\"local_source\">Loka fonta</string>\n    <string name=\"updating_category\">Ĝisdatigi kategorion</string>\n    <string name=\"check_for_updates\">Kontroli ĝisdatigojn</string>\n    <string name=\"help_translate\">Helpu traduki</string>\n    <string name=\"restoring_backup\">Savkopia restaŭro</string>\n    <string name=\"restore_completed\">Restaŭro finita</string>\n    <string name=\"invalid_backup_file_missing_manga\">Savkopio enhavas neniun bibliotekan elementon.</string>\n    <string name=\"rotation_force_landscape\">Deviga horizontala</string>\n    <string name=\"rotation_force_portrait\">Deviga vertikala</string>\n    <string name=\"rotation_portrait\">Vertikala</string>\n    <string name=\"rotation_landscape\">Horizontala</string>\n    <string name=\"pref_grayscale\">Grizoskalo</string>\n    <string name=\"ext_nsfw_warning\">Fontoj de tiu etendaĵo eble enhavas NSFW-enhavon (18+)</string>\n    <string name=\"untrusted_extension\">Malfidinda etendaĵo</string>\n    <string name=\"charging\">Dum ŝargado</string>\n    <string name=\"lock_when_idle\">Ŝlosi dum senokupo</string>\n    <string name=\"pref_dark_theme_pure_black\">Klara nigra reĝimo</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_midnightdusk\">Meznokta vesperiĝo</string>\n    <string name=\"loading\">Ŝargado…</string>\n    <string name=\"cancel_all_for_series\">Nuligi ĉiujn por ĉi tiu serio</string>\n    <string name=\"confirm_lock_change\">Aŭtentigi por konfirmi ŝanĝon</string>\n    <string name=\"restoring_backup_canceled\">Restaŭro nuligita</string>\n    <string name=\"restoring_backup_error\">Savkopia restaŭro fiaskis</string>\n    <string name=\"restore_in_progress\">Restaŭro jam estas farata</string>\n    <string name=\"backup_in_progress\">Savkopio jam estas farata</string>\n    <string name=\"pref_backup_interval\">Ofteco de aŭtomata savkopio</string>\n    <string name=\"pref_restore_backup_summ\">Restaŭri bibliotekon de savkopia dosiero</string>\n    <string name=\"pref_restore_backup\">Restaŭri savkopion</string>\n    <string name=\"action_track\">Sekvi</string>\n    <string name=\"services\">Sekviloj</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Kreas dosierujojn laŭ elementaj titoloj</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inversigi laŭtecajn klavojn</string>\n    <string name=\"pref_inverted_colors\">Inversigita</string>\n    <string name=\"pref_dual_page_split\">Dividi larĝajn paĝojn</string>\n    <string name=\"ext_pending\">Atendanta</string>\n    <string name=\"pref_update_only_non_completed\">Preterpasi elementojn kun \\\"Finita\\\" statuso</string>\n    <string name=\"restrictions\">Limigoj: %s</string>\n    <string name=\"theme_yotsuba\">Jocuba</string>\n    <string name=\"theme_tealturquoise\">Bluverda &amp; verdblua</string>\n    <string name=\"theme_strawberrydaiquiri\">Fraga dajkŭiri</string>\n    <string name=\"theme_monet\">Dinamika</string>\n    <string name=\"pref_category_tracking\">Sekvado</string>\n    <string name=\"action_display_local_badge\">Loka fonto</string>\n    <string name=\"action_sort_chapter_fetch_date\">Ĉapitra elŝuta dato</string>\n    <string name=\"track\">Sekvado</string>\n    <string name=\"pref_cutout_short\">Montri enhavon en fortondareo</string>\n    <string name=\"pref_library_update_restriction\">Aparataj limigoj por aŭtomataj ĝisdatigoj</string>\n    <string name=\"track_finished_reading_date\">Findato</string>\n    <string name=\"track_started_reading_date\">Komencdato</string>\n    <string name=\"backup_restore_missing_trackers\">Sekviloj ne ensalutitaj en:</string>\n    <string name=\"action_filter_tracked\">Ŝanĝspurata</string>\n    <string name=\"pref_page_transitions\">Animacii paĝajn transpasojn</string>\n    <string name=\"pref_double_tap_anim_speed\">Animacia rapido de duobla tuŝeto</string>\n    <string name=\"pref_show_navigation_mode\">Montri plustavolon kun tuŝetzonoj</string>\n    <string name=\"secure_screen\">Sekura ekrano</string>\n    <string name=\"lock_with_biometrics\">Devigi malŝlosi</string>\n    <string name=\"pref_refresh_library_covers\">Aktualigi kovrilojn en biblioteko</string>\n    <string name=\"file_select_cover\">Elekti kovrilbildon</string>\n    <string name=\"confirm_set_image_as_cover\">Ĉu uzi ĉi-bildon kiel kovrilo?</string>\n    <string name=\"notification_cover_update_failed\">Aktualigo de kovrilo fiaskis</string>\n    <string name=\"migration_dialog_what_to_include\">Elekti datumon por inkluzivi</string>\n    <string name=\"transition_pages_loading\">Ŝargas paĝojn…</string>\n    <string name=\"set_as_cover\">Agordi kiel kovrilo</string>\n    <string name=\"error_sharing_cover\">Eraro dumo kovrila kunigado</string>\n    <string name=\"error_saving_cover\">Eraro dum kovrila konservado</string>\n    <string name=\"notification_incognito_text\">Malŝalti privatan reĝimon</string>\n    <string name=\"pref_incognito_mode\">Inkognita reĝimo</string>\n    <string name=\"pref_enable_acra\">Sendadi prikolapsajn raportojn</string>\n    <string name=\"pref_tablet_ui_mode\">Tabulkomputila fasado</string>\n    <string name=\"pref_disable_battery_optimization\">Malŝalti baterian optimumigon</string>\n    <string name=\"channel_common\">Ofta</string>\n    <string name=\"cover_updated\">Kovrilo aktualigita</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Kontroli ĉu estas nova kovrilo kaj detaloj dum biblioteka ĝisdatigo</string>\n    <string name=\"cover_saved\">Kovrilo konservita</string>\n    <string name=\"manga_cover\">Kovrilo</string>\n    <string name=\"pref_skip_filtered_chapters\">Preterpasi filtritajn ĉapitroj</string>\n    <string name=\"pref_show_navigation_mode_summary\">Koncize montri kiam legilo estas malfermita</string>\n    <string name=\"pref_library_update_refresh_metadata\">Aŭtomate aktualigi metadatumoj</string>\n    <string name=\"secure_screen_summary\">Sekura ekrano kaŝas apan enhavon dum apa ŝanĝado kaj malpermesas ekrankopiojn</string>\n    <string name=\"label_stats\">Statistikoj</string>\n    <string name=\"label_warning\">Averto</string>\n    <string name=\"label_started\">Komenciĝis</string>\n    <string name=\"label_local\">Loka</string>\n    <string name=\"label_downloaded\">Elŝutita</string>\n    <string name=\"action_set_interval\">Agordi intervalon</string>\n    <string name=\"action_filter_interval_custom\">Tajlorita elŝuta intervalo</string>\n    <string name=\"action_copy_to_clipboard\">Kopii al tondujo</string>\n    <string name=\"delete_category\">Forigi kategorion</string>\n    <string name=\"onboarding_storage_info\">Elektu dosierujon kie %1$s konservos ĉapitrajn elŝutojn, savkopiojn, kaj aliajn. \\n\\nDediĉita dosierujo estas rekomendata.\\n\\nElektita dosierujo: %2$s</string>\n    <string name=\"action_not_now\">Ne nun</string>\n    <string name=\"action_display_language_badge\">Lingvo</string>\n    <string name=\"onboarding_storage_action_select\">Elekti dosierujon</string>\n    <string name=\"action_search_hint\">Serĉi…</string>\n    <string name=\"delete_category_confirmation\">Ĉu vi deziras forigi la kategorion \\\"%s\\\"?</string>\n    <string name=\"action_apply\">Apliki</string>\n    <string name=\"action_revert_to_default\">Restarigi la defaŭltojn</string>\n    <string name=\"action_close\">Fermi</string>\n    <string name=\"action_ok\">Bone</string>\n    <string name=\"action_remove_everything\">Forigi ĉion</string>\n    <string name=\"onboarding_heading\">Bonvenon!</string>\n    <string name=\"onboarding_action_skip\">Preterpasi</string>\n    <string name=\"selected\">Elektitaj</string>\n    <string name=\"not_selected\">Ne elektitaj</string>\n    <string name=\"action_menu_overflow_description\">Pliaj opcioj</string>\n    <string name=\"delete_downloaded\">Forigi elŝutitajn</string>\n    <string name=\"label_data_storage\">Datumoj kaj konservejo</string>\n    <string name=\"action_update_category\">Ĝisdatigi kategorion</string>\n    <string name=\"onboarding_action_next\">Sekva</string>\n    <string name=\"onboarding_storage_selection_required\">Dosierujo devas esti elektita</string>\n    <string name=\"pref_appearance_summary\">Eloso, dato &amp; tempoformo</string>\n    <string name=\"pref_security_summary\">Apa ŝloso, sekura ekrano</string>\n    <string name=\"unlock_app_title\">Malŝlosi %s</string>\n    <string name=\"disabled_nav\">Malŝaltita</string>\n    <string name=\"invalid_backup_file_error\">Tuta eraro:</string>\n    <string name=\"source_settings\">Agordoj de fonto</string>\n    <string name=\"app_settings\">Apaj agordoj</string>\n    <string name=\"theme_nord\">Nordo</string>\n    <string name=\"theme_tidalwave\">Cunamo</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" anstataŭ \\\"%2$s\\\"</string>\n    <string name=\"pref_app_language\">Apa lingvo</string>\n    <string name=\"ext_update_all\">Ĝisdatigi ĉiujn</string>\n    <string name=\"ext_info_version\">Versio</string>\n    <string name=\"ext_info_language\">Lingvo</string>\n    <string name=\"ext_installer_pref\">Instalilo</string>\n    <string name=\"ext_installer_legacy\">Malmoderna</string>\n    <string name=\"available_disk_space_info\">Libera: %1$s / Tuta: %2$s</string>\n    <string name=\"popular\">Popularaj</string>\n    <string name=\"has_results\">Havantaj rezultoj</string>\n    <string name=\"unknown_title\">Nekonata titolo</string>\n    <string name=\"description_placeholder\">Sen priskribo</string>\n    <string name=\"manga_interval_expected_update_soon\">Baldaŭ</string>\n    <string name=\"are_you_sure\">Ĉu vi certas?</string>\n    <string name=\"updates_last_update_info_just_now\">Ĵus</string>\n    <string name=\"relative_time_span_never\">Neniam</string>\n    <string name=\"track_error\">%1$s eraro: %2$s</string>\n    <string name=\"source_empty_screen\">Neniu fonto trovita</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"onboarding_permission_analytics\">Permesi analizojn</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Sendi anonimigajn prikolapsajn protokolojn al la programistoj.</string>\n    <string name=\"pref_advanced_summary\">Deponi protokolojn, bateriaj optimumigoj</string>\n    <string name=\"pref_security\">Sekureco</string>\n    <string name=\"action_copy_link\">Kopii ligilon</string>\n    <string name=\"onboarding_guides_returning_user\">Ĉu vi reinstalas %s?</string>\n    <string name=\"action_sort_random\">Hazarde</string>\n    <string name=\"action_open_random_manga\">Malfermi hazardan elementon</string>\n    <string name=\"action_move_to_top_all_for_series\">Movi serion al supro</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Movi serion al malsupro</string>\n    <string name=\"onboarding_storage_help_action\">Konserveja gvidilo</string>\n    <string name=\"onboarding_permission_install_apps\">Permeso por instali apojn</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Fona bateria uzado</string>\n    <string name=\"onboarding_permission_notifications_description\">Ricevi sciigojn pri bibliotekaj ĝisdatigoj kaj pli.</string>\n    <string name=\"onboarding_permission_crashlytics\">Sendi prikolapsajn protokolojn</string>\n    <string name=\"onboarding_permission_analytics_description\">Sendi anonimigaj uzadaj datumoj por plibonigi funkciojn de apo.</string>\n    <string name=\"onboarding_permission_action_grant\">Permesi</string>\n    <string name=\"onboarding_guides_new_user\">Ĉu vi estas en %s unua foje? Ni rekomendas kontroli komencantan gvidilon.</string>\n    <string name=\"pref_backup_summary\">Permanaj &amp; aŭtomataj savkopioj, konserveja spaco</string>\n    <string name=\"theme_lavender\">Lavendo</string>\n    <string name=\"pref_relative_format\">Relativaj tempindikoj</string>\n    <string name=\"scanlator\">Skantradukisto</string>\n    <string name=\"action_show_manga\">Montri elementon</string>\n    <string name=\"pref_browse_summary\">Fontoj, etendaĵoj, ĉiea serĉo</string>\n    <string name=\"pref_downloads_summary\">Aŭtomata elŝuto, elŝuti antaŭe</string>\n    <string name=\"pref_tracking_summary\">Unuvoja sinkroniga progreso, plibonigita sinkronigo</string>\n    <string name=\"onboarding_description\">Komence ni agordu kelkajn aferojn. Vi ĉiam povas ŝanĝi ilin en la agordoj poste.</string>\n    <string name=\"label_upcoming\">Baldaŭa</string>\n    <string name=\"onboarding_permission_install_apps_description\">Por instali fontajn etendaĵojn.</string>\n    <string name=\"pref_library_summary\">Kategorioj, ĉiea ĝisdatigo, ĉapitra ŝovumo</string>\n    <string name=\"pref_onboarding_guide\">Komencanta gvidilo</string>\n    <string name=\"action_display_show_continue_reading_button\">Butono por daŭrigi legadon</string>\n    <string name=\"action_sort_unread_count\">Nombro de nelegitaj</string>\n    <string name=\"action_bar_up_description\">Rulumi supren</string>\n    <string name=\"action_sort_count\">Elementoj entute</string>\n    <string name=\"action_sort_last_manga_update\">Lasta kontrolo de ĝisdatigoj</string>\n    <string name=\"action_sort_next_updated\">Sekva atendata ĝisdatigo</string>\n    <string name=\"action_sort_tracker_score\">Ŝanĝospurila takso</string>\n    <string name=\"action_display_cover_only_grid\">Nur-kovrila krado</string>\n    <string name=\"internal_error\">InternalError: Kontrolu prikolapsajn protokolojn por pliaj informoj</string>\n    <string name=\"onboarding_storage_help_info\">Ĉu vi ĝisdatigas de pli malnova versio kaj ne scias kion elekti? Kontrolu la konservejan gvidilon por pliaj informoj.</string>\n    <string name=\"onboarding_action_finish\">Komencu</string>\n    <string name=\"action_add_anyway\">Aldoni ĉiuokaze</string>\n    <string name=\"action_migrate_duplicate\">Migri ekzistantan elementon</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Malebligi interrompojn por longedaŭraj bibliotekaj ĝisdatigoj, elŝutoj kaj savkopiaj restaŭroj.</string>\n    <string name=\"onboarding_permission_notifications\">Sciiga permeso</string>\n    <string name=\"pref_reader_summary\">Legada reĝimo, montrado, navigado</string>\n    <string name=\"pref_firebase\">Analitikoj kaj protokoloj</string>\n    <string name=\"firebase_summary\">Sendado de prikolapsaj protokoloj kaj analitikoj eblos al ni identigi kaj ripari problemojn, plibonigi rendimenton kaj igi estontajn ĝisdatigojn pli rilataj al viaj bezonoj</string>\n    <string name=\"parental_controls_info\">Tio ne preventas neoficialajn aŭ eventuale malĝuste markitajn etendaĵojn montri NSFW-enhavon (18+) ene de la apo.</string>\n    <string name=\"update_72hour\">Ĉiun 3an tagon</string>\n    <string name=\"pref_update_only_started\">Preterpasi nekomencitajn elementojn</string>\n    <string name=\"pref_chapter_swipe_end\">Ago de ŝovumo dekstren</string>\n    <string name=\"ext_remove\">Forigi</string>\n    <string name=\"ext_confirm_remove\">Ĉu forigi etendaĵon?</string>\n    <string name=\"remove_private_extension_message\">Ĉu vi vere volas forigi etendaĵon \\\"%s\\\"?</string>\n    <string name=\"label_completed_titles\">Finitaj elementoj</string>\n    <string name=\"pref_update_only_in_release_period\">Prognozi sekvan eldonan daton</string>\n    <string name=\"connected_to_wifi\">Nur per Wi-Fi</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ne ruliĝas</string>\n    <string name=\"categorized_display_settings\">Agordoj de ordigo laŭ kategorio</string>\n    <string name=\"pref_chapter_swipe_start\">Ago de ŝovumo maldekstren</string>\n    <string name=\"untrusted_extension_message\">Malicaj etendaĵoj povas legi ĉiujn el konservitaj ensalutiloj aŭ plenumi arbitran kodon.\\n\\nFidante tiun etendaĵon, vi akceptas tiujn riskojn.</string>\n    <string name=\"pref_library_update_smart_update\">Saĝa ĝisdatigo</string>\n    <string name=\"pref_update_only_completely_read\">Preterpasi elementojn kun nelegita(j)n ĉapitro(j)n</string>\n    <string name=\"pref_library_update_categories_details\">Elementoj en ekskluzivitaj kategorioj ne estos ĝisdatigotaj eĉ se ili estas ankaŭ en inkluzivitaj kategorioj.</string>\n    <string name=\"pref_library_update_show_tab_badge\">Montri nombro de la nelegitaj sur piktogramo Ĝisdatigoj</string>\n    <string name=\"multi_lang\">Mult</string>\n    <string name=\"ext_app_info\">Pri apo</string>\n    <string name=\"extension_api_error\">Malsukcesis akiri etendaĵan liston</string>\n    <string name=\"ext_info_age_rating\">Aĝa takso</string>\n    <string name=\"ext_permission_install_apps_warning\">Permesoj bezonatas por instali etendaĵojn. Tuŝetu ĉi tie por permesi.</string>\n    <string name=\"ext_install_service_notif\">Instalado de etendaĵo…</string>\n    <string name=\"network_not_metered\">Nur per nemezurata reto</string>\n    <string name=\"action_delete_repo\">Forigi deponejon</string>\n    <string name=\"pref_flash_page\">Fulmi je paĝa ŝanĝo</string>\n    <string name=\"pref_page_rotate\">Turni larĝajn paĝojn por adapti</string>\n    <string name=\"label_extension_repos\">Etendaĵaj deponejoj</string>\n    <string name=\"pref_flash_page_summ\">Reduktas fantomigon sur e-inkaj ekranoj</string>\n    <string name=\"pref_flash_duration\">Fulma daŭro</string>\n    <string name=\"pref_flash_style_black\">Nigro</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Defaŭlta (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Se legilo ŝargas malplenan bildon alkremente redukti la sojlon.\\nElektita: %s</string>\n    <string name=\"label_add_repo_input\">Deponeja URL-o</string>\n    <string name=\"action_add_repo_message\">Aldoni aldonajn deponejojn al Mihon. Tio estu URL-o kiu finas per \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">Tiu deponejo jam ekzistas!</string>\n    <string name=\"delete_repo_confirmation\">Ĉu vi deziras forigi la deponejon \\\"%s\\\"?</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instali kaj lanĉi Shizuku por uzi Shizuku kiel etendaĵa instalilo.</string>\n    <string name=\"action_add_repo\">Aldoni deponejon</string>\n    <string name=\"action_replace_repo_title\">Subskriba ŝlosila fingropremo jam ekzistas</string>\n    <string name=\"action_replace_repo_message\">Deponejo %1$s havas la saman subskriban ŝlosilan fingropremon kiel %2$s.\\nSe tio estis atendita, %2$s estos anstataŭigita, alikaze kontaktu prizorganton de la deponejo.</string>\n    <string name=\"action_open_repo\">Malfermitkoda deponejo</string>\n    <string name=\"pref_page_rotate_invert\">Inversigi orientiĝon de turnitaj larĝaj paĝoj</string>\n    <string name=\"ext_revoke_trust\">Eksvalidigi fidintajn nekonatajn etendaĵojn</string>\n    <string name=\"information_empty_repos\">Vi ne havas deponejojn agorditajn.</string>\n    <string name=\"invalid_repo_name\">Nevalida deponeja URL-o</string>\n    <string name=\"pref_show_reading_mode_summary\">Koncize montri nunan reĝimon kiam legilo estas malfermita</string>\n    <string name=\"add_repo_confirmation\">Ĉu vi deziras aldoni la deponejon \\\"%s\\\"?</string>\n    <string name=\"pref_dual_page_invert\">Inversigi lokadon de dividitaj paĝoj</string>\n    <string name=\"pref_dual_page_invert_summary\">Se la lokado de la dividitaj larĝaj paĝoj ne kongruas legan direkton</string>\n    <string name=\"pref_double_tap_zoom\">Duoble tuŝeti por zomi</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Fulmi ĉiu</string>\n    <string name=\"pref_flash_with\">Fulmi per</string>\n    <string name=\"pref_flash_style_white\">Blanko</string>\n    <string name=\"pref_flash_style_white_black\">Blanka kaj nigra</string>\n    <string name=\"action_replace_repo\">Anstataŭigi</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Propra rastruma sojlo de aparataro</string>\n    <string name=\"filter_mode_darken\">Malheligi</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Influas rendimenton. Ŝaltu nur se rastruma sojlo ne riparas problemojn pri malplenaj bildoj</string>\n    <string name=\"pref_color_filter_mode\">Miksa reĝimo de kolorfiltrilo</string>\n    <string name=\"filter_mode_lighten\">Heligi</string>\n    <string name=\"pref_skip_dupe_chapters\">Preterpasi duobligitajn ĉapitrojn</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inversigi tuŝetzonojn</string>\n    <string name=\"pref_display_profile\">Propra montra profilo</string>\n    <string name=\"pref_create_folder_per_manga\">Konservi paĝojn en apartajn dosierojn</string>\n    <string name=\"pref_image_scale_type\">Skala speco</string>\n    <string name=\"pref_read_with_long_tap\">Montri agojn post longa tuŝeto</string>\n    <string name=\"download_ahead_info\">Nur funkcias se la nuna ĉapitro + la sekva estas jam elŝutitaj.</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permesi forigi legosignajn ĉapitrojn</string>\n    <string name=\"pref_remove_exclude_categories\">Ekskluzivitaj kategorioj</string>\n    <string name=\"second_to_last\">Antaŭlaste legita ĉapitro</string>\n    <string name=\"tracking_guide\">Sekvada gvidilo</string>\n    <string name=\"pref_lowest\">Malplej alta</string>\n    <string name=\"invalid_location\">Nevalida loko: %s</string>\n    <string name=\"fourth_to_last\">La 4-a laste legita ĉapitro</string>\n    <string name=\"pref_high\">Alta</string>\n    <string name=\"pref_remove_after_marked_as_read\">Post permane markitaj kiel legitaj</string>\n    <string name=\"no_location_set\">Neniu konserveja loko agordita</string>\n    <string name=\"pref_download_new_categories_details\">Elementoj en ekskluzivitaj kategorioj ne estos elŝutotaj eĉ se ili estas ankaŭ en inkluzivitaj kategorioj.</string>\n    <string name=\"auto_download_while_reading\">Aŭtomate elŝuti dum legado</string>\n    <string name=\"save_chapter_as_cbz\">Konservi kiel CBZ-arkivo</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Ĝisdatigi progreson kiam markita kiel legita</string>\n    <string name=\"tracking_info\">Unudirekte sinkronigi por ĝisdatigi la ĉapitran progreson en ekstera sekvila servo. Agordi sekvadon por apartaj elementoj per ilia sekvada butono.</string>\n    <string name=\"enhanced_services\">Plibonigitaj sekviloj</string>\n    <string name=\"rotation_reverse_portrait\">Inversa vertikala</string>\n    <string name=\"pref_webtoon_side_padding\">Flankaj marĝenoj</string>\n    <string name=\"pref_hide_threshold\">Sentemo por kaŝi menuon dum rulumo</string>\n    <string name=\"pref_low\">Malalta</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Ne elŝuti duoblaĵojn de legitaj ĉapitroj</string>\n    <string name=\"pref_always_show_chapter_transition\">Ĉiam montri ĉapitrajn transpaŝojn</string>\n    <string name=\"pref_landscape_zoom\">Aŭtomate zomi larĝajn bildojn</string>\n    <string name=\"split_tall_images\">Dividi altajn bildojn</string>\n    <string name=\"enhanced_services_not_installed\">Disponebla sed fonto ne estas instalita: %s</string>\n    <string name=\"fifth_to_last\">La 5-a laste legita ĉapitro</string>\n    <string name=\"pref_auto_update_manga_sync\">Ĝisdatigi progreson post lego</string>\n    <string name=\"pref_highest\">Plej alta</string>\n    <string name=\"pref_navigate_pan\">Panorami larĝajn bildojn</string>\n    <string name=\"pref_zoom_start\">Komenca zoma pozicio</string>\n    <string name=\"third_to_last\">La 3-a laste legita ĉapitro</string>\n    <string name=\"download_ahead\">Elŝuti antaŭe</string>\n    <string name=\"split_tall_images_summary\">Plibonigas legilan rendimenton</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Malebligi malzomi</string>\n    <string name=\"library_sync_complete\">Biblioteka sinkronigo finita</string>\n    <string name=\"non_library_settings\">Ĉiuj legitaj elementoj</string>\n    <string name=\"pref_dns_over_https\">DNS per HTTPS (DoH)</string>\n    <string name=\"track_activity_name\">Sekvila ensaluto</string>\n    <string name=\"pref_user_agent_string\">Defaŭlta ĉeno por \\\"user agent\\\"</string>\n    <string name=\"syncing_library\">Biblioteka sinkronigo</string>\n    <string name=\"pref_storage_location\">Konserveja loko</string>\n    <string name=\"enhanced_tracking_info\">Provizas plibonigitajn funkciojn por specifaj fontoj. Elementoj estas aŭtomate sekvataj kiam aldonitaj al via biblioteko.</string>\n    <string name=\"backup_restore_content_full\">Vi devos instali mankantajn etendaĵojn kaj ensaluti al sekvadaj servoj poste por uzi ilin.</string>\n    <string name=\"pref_reset_user_agent_string\">Restarigi defaŭltan ĉenon por \\\"user agent\\\"</string>\n    <string name=\"extensionRepo_settings\">Etendaĵaj deponejoj</string>\n    <string name=\"private_settings\">Inkluzivi konfidencajn agordojn (ekz. ensalutajn ĵetonojn de sekvilo)</string>\n    <string name=\"pref_storage_usage\">Konserveja uzo</string>\n    <string name=\"error_user_agent_string_blank\">Ĉeno por \\\"user agent\\\" ne povas malpleni</string>\n    <string name=\"error_user_agent_string_invalid\">Nevalida ĉeno por \\\"user agent\\\"</string>\n    <string name=\"empty_backup_error\">Neniu biblioteka elemento por savkopii</string>\n    <string name=\"backup_info\">Vi konservu kopiojn de savkopioj ankaŭ en aliaj lokoj. Savkopioj povas enhavi konfidencajn datumojn inkluzive konservitajn pasvortojn; atentu se vi komunigos ilin.</string>\n    <string name=\"invalid_backup_file_unknown\">Savkopia dosiero estas difektita</string>\n    <string name=\"action_create\">Krei</string>\n    <string name=\"invalid_backup_file_json\">JSON-savkopio ne subtenata</string>\n    <string name=\"missing_storage_permission\">Konservejaj permesoj ne donitaj</string>\n    <string name=\"pref_hide_in_library_items\">Kaŝi elementojn jam en biblioteko</string>\n    <string name=\"pref_storage_location_info\">Uzita por aŭtomataj savkopioj, ĉapitraj elŝutoj kaj lokaj fontoj.</string>\n    <string name=\"pref_create_backup_summ\">Povas esti uzita por restaŭri nunan bibliotekon</string>\n    <string name=\"create_backup_file_error\">Ne povis krei savkopian dosieron</string>\n    <string name=\"restore_miui_warning\">Savkopiado/restaŭro ne funkcios ĝuste se MIUI-optimumigo estas malŝaltita.</string>\n    <string name=\"last_auto_backup_info\">Lasta aŭtomata ĝisdatigo: %s</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Viŝi ĉapitran kaŝmemoron je aplikaĵa lanĉo</string>\n    <string name=\"pref_reset_viewer_flags_error\">Ne povis restarigi legilajn agordojn</string>\n    <string name=\"pref_dump_crash_logs_summary\">Konservas protokolojn pri eraroj dosieren por konigi kun la programistoj</string>\n    <string name=\"label_background_activity\">Fona aktiveco</string>\n    <string name=\"pref_clear_webview_data\">Viŝi datumojn de WebView</string>\n    <string name=\"pref_reset_viewer_flags_success\">Restarigo de ĉiuj legilaj agordoj</string>\n    <string name=\"requires_app_restart\">Devigas restartigi apon por efektiviĝi</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Restarigas legadan reĝimon kaj orientiĝon de ĉiuj serioj</string>\n    <string name=\"pref_invalidate_download_cache\">Reindeksi elŝutojn</string>\n    <string name=\"download_cache_invalidated\">Indeksoj de elŝutoj nevalidigitaj</string>\n    <string name=\"pref_clear_database_summary\">Forigi historion de elementoj ne konservitaj en biblioteko</string>\n    <string name=\"clear_database_source_item_count\">%1$d nebibliotekaj elementoj en datumbazo</string>\n    <string name=\"clear_database_confirmation\">Ĉu vi certas? Legitaj ĉapitroj kaj progreso de nebibliotekaj elementoj estos perdotaj</string>\n    <string name=\"database_clean\">Nenio por viŝi</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Igu apon perforte rekontroli elŝutitajn ĉapitrojn</string>\n    <string name=\"webview_data_deleted\">Datumoj de WebView viŝitaj</string>\n    <string name=\"pref_dump_crash_logs\">Konigi prikolapsajn protokolojn</string>\n    <string name=\"pref_reset_viewer_flags\">Restarigi legilajn agordojn de individuaj serioj</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Helpas pri fonaj bibliotekaj ĝisdatigoj kaj savkopioj</string>\n    <string name=\"battery_optimization_disabled\">Bateria optimumigo jam estas malŝaltita</string>\n    <string name=\"about_dont_kill_my_app\">Kelkaj fabrikantoj havas aldonajn apajn malpermesojn kiuj ĉesigas fonajn servojn. Jena retpaĝo havas pli da informoj pri kiel ripari tion.</string>\n    <string name=\"pref_verbose_logging_summary\">Konservi malkoncizajn protokolojn al sistema protokolo (reduktas apan rendimenton)</string>\n    <string name=\"pref_debug_info\">Infrormoj por sencimigo</string>\n    <string name=\"pref_verbose_logging\">Malkonciza protokolado</string>\n    <string name=\"privacy_policy\">Privateca politiko</string>\n    <string name=\"pref_acra_summary\">Helpas ripari cimojn. Neniuj konfidencaj datumoj estos sendotaj</string>\n    <string name=\"fdroid_warning\">Eldonoj ĉe F-Droid ne estas oficiale subtenataj.\\nTuŝetu por lerni pli.</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/es/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Después de %1$s minuto</item>\n        <item quantity=\"many\">Después de %1$s minutos</item>\n        <item quantity=\"other\">Después de %1$s minutos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nuevo capítulo</item>\n        <item quantity=\"many\">%1$d nuevos capítulos</item>\n        <item quantity=\"other\">%1$d nuevos capítulos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capítulos %1$s y 1 más</item>\n        <item quantity=\"many\">Capítulos %1$s y %2$d más</item>\n        <item quantity=\"other\">Capítulos %1$s y %2$d más</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Para %d entrada</item>\n        <item quantity=\"many\">Para %d entradas</item>\n        <item quantity=\"other\">Para %d entradas</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Actualización de extensión disponible</item>\n        <item quantity=\"many\">%d actualizaciones de extensiones disponibles</item>\n        <item quantity=\"other\">%d actualizaciones de extensiones disponibles</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">Queda %1$s</item>\n        <item quantity=\"many\">Quedan %1$s</item>\n        <item quantity=\"other\">Quedan %1$s</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoría</item>\n        <item quantity=\"many\">%d categorías</item>\n        <item quantity=\"other\">%d categorías</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Completada en %1$s con %2$s error</item>\n        <item quantity=\"many\">Completada en %1$s con %2$s errores</item>\n        <item quantity=\"other\">Completada en %1$s con %2$s errores</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capítulo</item>\n        <item quantity=\"many\">%1$s capítulos</item>\n        <item quantity=\"other\">%1$s capítulos</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d rastreador</item>\n        <item quantity=\"many\">%d rastreadores</item>\n        <item quantity=\"other\">%d rastreadores</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Se omite %d capítulo, o bien falta en la fuente o ha sido filtrado</item>\n        <item quantity=\"many\">Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados</item>\n        <item quantity=\"other\">Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ayer</item>\n        <item quantity=\"many\">Hace %1$d días</item>\n        <item quantity=\"other\">Hace %1$d días</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Siguiente capítulo sin leer</item>\n        <item quantity=\"many\">Siguientes %d capítulos sin leer</item>\n        <item quantity=\"other\">Siguientes %d capítulos sin leer</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Siguiente capítulo</item>\n        <item quantity=\"many\">Siguientes %d capítulos</item>\n        <item quantity=\"other\">Siguientes %d capítulos</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Falta %1$s capítulo</item>\n        <item quantity=\"many\">Faltan %1$s capítulos</item>\n        <item quantity=\"other\">Faltan %1$s capítulos</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">Un día</item>\n        <item quantity=\"many\">%d días</item>\n        <item quantity=\"other\">%d días</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repositorio</item>\n        <item quantity=\"many\">%d repositorios</item>\n        <item quantity=\"other\">%d repositorios</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Mañana</item>\n        <item quantity=\"many\">Dentro de %1$d días</item>\n        <item quantity=\"other\">Dentro de %1$d días</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 página</item>\n        <item quantity=\"many\">%1$s páginas</item>\n        <item quantity=\"other\">%1$s páginas</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/es/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nombre</string>\n    <string name=\"label_settings\">Ajustes</string>\n    <string name=\"label_download_queue\">Cola de descargas</string>\n    <string name=\"label_library\">Biblioteca</string>\n    <string name=\"label_recent_manga\">Historial</string>\n    <string name=\"label_recent_updates\">Actualizaciones</string>\n    <string name=\"label_backup\">Copia de seguridad y restauración</string>\n    <string name=\"action_settings\">Ajustes</string>\n    <string name=\"action_filter\">Filtrar</string>\n    <string name=\"action_filter_unread\">Con capítulos sin leer</string>\n    <string name=\"action_filter_empty\">Quitar filtro</string>\n    <string name=\"action_search\">Buscar</string>\n    <string name=\"action_select_all\">Seleccionar todo</string>\n    <string name=\"action_mark_as_read\">Marcar como leído</string>\n    <string name=\"action_mark_as_unread\">Marcar como no leído</string>\n    <string name=\"action_mark_previous_as_read\">Marcar anteriores como leídos</string>\n    <string name=\"action_download\">Descargar</string>\n    <string name=\"action_delete\">Eliminar</string>\n    <string name=\"action_update_library\">Actualizar biblioteca</string>\n    <string name=\"action_edit\">Editar</string>\n    <string name=\"action_add_category\">Añadir categoría</string>\n    <string name=\"action_edit_categories\">Editar categorías</string>\n    <string name=\"action_rename_category\">Renombrar categoría</string>\n    <string name=\"action_move_category\">Asignar categorías</string>\n    <string name=\"action_edit_cover\">Editar la portada</string>\n    <string name=\"action_pause\">Pausar</string>\n    <string name=\"action_previous_chapter\">Capítulo anterior</string>\n    <string name=\"action_next_chapter\">Capítulo siguiente</string>\n    <string name=\"action_retry\">Reintentar</string>\n    <string name=\"action_remove\">Eliminar</string>\n    <string name=\"action_resume\">Continuar</string>\n    <string name=\"action_open_in_browser\">Abrir en el navegador</string>\n    <string name=\"action_display_mode\">Modo de visualización</string>\n    <string name=\"action_cancel\">Cancelar</string>\n    <string name=\"action_sort\">Ordenar</string>\n    <string name=\"action_install\">Instalar</string>\n    <string name=\"loading\">Cargando…</string>\n    <string name=\"pref_category_general\">General</string>\n    <string name=\"pref_category_reader\">Visor</string>\n    <string name=\"pref_category_downloads\">Descargas</string>\n    <string name=\"pref_category_tracking\">Seguimiento</string>\n    <string name=\"pref_category_advanced\">Avanzado</string>\n    <string name=\"pref_category_about\">Acerca de</string>\n    <string name=\"pref_library_columns\">Títulos por fila</string>\n    <string name=\"portrait\">En vertical</string>\n    <string name=\"landscape\">En horizontal</string>\n    <string name=\"pref_library_update_interval\">Actualizaciones automáticas</string>\n    <string name=\"update_never\">No</string>\n    <string name=\"update_6hour\">Cada 6 horas</string>\n    <string name=\"update_12hour\">Cada 12 horas</string>\n    <string name=\"update_24hour\">Diarias</string>\n    <string name=\"update_48hour\">Cada 2 días</string>\n    <string name=\"pref_library_update_restriction\">Restringir las actualizaciones automáticas dependiendo del estado del dispositivo</string>\n    <string name=\"charging\">Mientras se carga la batería</string>\n    <string name=\"pref_update_only_non_completed\">Saltarse títulos cuyo estado de publicación sea «completado»</string>\n    <string name=\"pref_auto_update_manga_sync\">Actualizar progreso al terminar un capítulo</string>\n    <string name=\"pref_fullscreen\">Pantalla completa</string>\n    <string name=\"pref_page_transitions\">Transiciones de página animadas</string>\n    <string name=\"pref_show_page_number\">Mostrar el número de página</string>\n    <string name=\"pref_custom_brightness\">Utilizar brillo personalizado</string>\n    <string name=\"pref_keep_screen_on\">Mantener la pantalla encendida</string>\n    <string name=\"pref_reader_navigation\">Navegación</string>\n    <string name=\"pref_read_with_volume_keys\">Con las teclas de volumen</string>\n    <string name=\"pref_reader_theme\">Color de fondo</string>\n    <string name=\"white_background\">Blanco</string>\n    <string name=\"black_background\">Negro</string>\n    <string name=\"pref_viewer_type\">Sentido de lectura normal</string>\n    <string name=\"left_to_right_viewer\">Por páginas, de izquierda a derecha</string>\n    <string name=\"right_to_left_viewer\">Por páginas, de derecha a izquierda</string>\n    <string name=\"vertical_viewer\">Por páginas, de arriba abajo</string>\n    <string name=\"webtoon_viewer\">Tira vertical continua</string>\n    <string name=\"pref_image_scale_type\">Método de ampliación</string>\n    <string name=\"scale_type_fit_screen\">Ajustar al tamaño de pantalla</string>\n    <string name=\"scale_type_stretch\">Estirar la imagen</string>\n    <string name=\"scale_type_fit_width\">Ajustar a anchura</string>\n    <string name=\"scale_type_fit_height\">Ajustar a altura</string>\n    <string name=\"scale_type_original_size\">Tamaño original</string>\n    <string name=\"scale_type_smart_fit\">Ajuste inteligente</string>\n    <string name=\"pref_zoom_start\">Ampliación inicial</string>\n    <string name=\"zoom_start_automatic\">Automática</string>\n    <string name=\"zoom_start_left\">Hacia la izquierda</string>\n    <string name=\"zoom_start_right\">Hacia la derecha</string>\n    <string name=\"zoom_start_center\">Centrada</string>\n    <string name=\"pref_rotation_type\">Tipo de rotación inicial</string>\n    <string name=\"rotation_free\">Cualquier dirección</string>\n    <string name=\"rotation_force_portrait\">Forzar en vertical</string>\n    <string name=\"rotation_force_landscape\">Forzar en horizontal</string>\n    <string name=\"pref_remove_after_marked_as_read\">Borrarlos tras marcarlos como leídos de forma manual</string>\n    <string name=\"pref_remove_after_read\">Borrar capítulos terminados de forma automática</string>\n    <string name=\"services\">Servicios de seguimiento</string>\n    <string name=\"pref_clear_chapter_cache\">Limpiar la caché de capítulos</string>\n    <string name=\"used_cache\">Usado: %1$s</string>\n    <string name=\"cache_deleted\">Se vació la caché. Se han borrado %1$d archivos</string>\n    <string name=\"cache_delete_error\">Se produjo un error al limpiar</string>\n    <string name=\"pref_clear_cookies\">Borrar cookies</string>\n    <string name=\"cookies_cleared\">Cookies borradas</string>\n    <string name=\"pref_clear_database\">Borrar la base de datos</string>\n    <string name=\"pref_clear_database_summary\">Borra del historial los títulos que hayas leído pero no formen parte de tu biblioteca</string>\n    <string name=\"clear_database_confirmation\">¿Seguro? Perderás los capítulos leídos y el progreso de los títulos que no pertenezcan a la biblioteca</string>\n    <string name=\"clear_database_completed\">Elementos borrados</string>\n    <string name=\"version\">Versión</string>\n    <string name=\"pref_enable_acra\">Enviar informes de fallos</string>\n    <string name=\"pref_acra_summary\">Ayuda a corregir cualquier error. No se enviará ninguna información personal</string>\n    <string name=\"login_title\">Iniciar sesión en %1$s</string>\n    <string name=\"username\">Nombre de usuario</string>\n    <string name=\"password\">Contraseña</string>\n    <string name=\"login\">Iniciar sesión</string>\n    <string name=\"login_success\">Conectado</string>\n    <string name=\"unknown_error\">Error desconocido</string>\n    <string name=\"updating_category\">Actualizando categoría</string>\n    <string name=\"ongoing\">En publicación</string>\n    <string name=\"unknown\">Desconocido</string>\n    <string name=\"licensed\">Con licencia</string>\n    <string name=\"remove_from_library\">Eliminar de biblioteca</string>\n    <string name=\"display_mode_chapter\">Capítulo %1$s</string>\n    <string name=\"chapter_downloading_progress\">Descargando (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Error</string>\n    <string name=\"show_title\">Título de la fuente</string>\n    <string name=\"show_chapter_number\">Número de capítulo</string>\n    <string name=\"sort_by_source\">Por fuente</string>\n    <string name=\"sort_by_number\">Por número de capítulos</string>\n    <string name=\"sort_by_upload_date\">Por fecha de subida</string>\n    <string name=\"manga_download\">Descargar</string>\n    <string name=\"download_unread\">Sin leer</string>\n    <string name=\"confirm_delete_chapters\">¿Seguro que quieres eliminar los capítulos seleccionados?</string>\n    <string name=\"reading\">Leyendo</string>\n    <string name=\"completed\">Completado</string>\n    <string name=\"dropped\">Abandonado</string>\n    <string name=\"on_hold\">En espera</string>\n    <string name=\"plan_to_read\">Para leer luego</string>\n    <string name=\"score\">Puntuación</string>\n    <string name=\"title\">Título</string>\n    <string name=\"status\">Estado</string>\n    <string name=\"chapters\">Capítulos</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Esto eliminará la fecha de lectura de este capítulo. ¿Estás seguro?</string>\n    <string name=\"dialog_with_checkbox_reset\">Reiniciar todos los capítulos de la serie actual</string>\n    <string name=\"chapter_progress\">Pág: %1$d</string>\n    <string name=\"no_next_chapter\">Siguiente capítulo no encontrado</string>\n    <string name=\"decode_image_error\">No se pudo cargar la imagen</string>\n    <string name=\"download_queue_error\">No se pudieron descargar los capítulos. Puedes volver a intentarlo en la sección de descargas</string>\n    <string name=\"notification_new_chapters\">Nuevos capítulos encontrados</string>\n    <string name=\"notification_first_add_to_library\">Primero tienes que añadir el título a tu biblioteca</string>\n    <string name=\"file_select_cover\">Elige una imagen de portada</string>\n    <string name=\"file_select_backup\">Elige una copia de respaldo</string>\n    <string name=\"update_check_confirm\">Descargar</string>\n    <string name=\"update_check_no_new_updates\">Ya estás usando la última versión disponible</string>\n    <string name=\"update_check_notification_download_in_progress\">Descargando…</string>\n    <string name=\"update_check_notification_download_complete\">Toca aquí para instalar la actualización</string>\n    <string name=\"update_check_notification_download_error\">Error de descarga</string>\n    <string name=\"update_check_notification_update_available\">¡Hay una nueva versión!</string>\n    <string name=\"information_no_downloads\">No hay descargas</string>\n    <string name=\"information_no_recent\">No hay actualizaciones recientes</string>\n    <string name=\"information_no_recent_manga\">No has leído nada últimamente</string>\n    <string name=\"information_empty_library\">Tu biblioteca está vacía</string>\n    <string name=\"download_notifier_title_error\">Error</string>\n    <string name=\"download_notifier_unknown_error\">No se ha podido descargar el capítulo debido a un error inesperado</string>\n    <string name=\"download_notifier_text_only_wifi\">No estás conectado a ninguna red Wi-Fi</string>\n    <string name=\"categories\">Categorías</string>\n    <string name=\"manga\">Contenido de la biblioteca</string>\n    <string name=\"track\">Seguimiento</string>\n    <string name=\"history\">Historial</string>\n    <string name=\"action_filter_bookmarked\">Favoritos</string>\n    <string name=\"action_sort_alpha\">Alfabéticamente</string>\n    <string name=\"action_sort_total\">Por número de capítulos</string>\n    <string name=\"action_sort_last_read\">Por último leído</string>\n    <string name=\"action_bookmark\">Marcar capítulo como favorito</string>\n    <string name=\"action_remove_bookmark\">Quitar como favorito</string>\n    <string name=\"action_add\">Añadir</string>\n    <string name=\"download_notifier_no_network\">No estás conectado a Internet</string>\n    <string name=\"download_notifier_download_paused\">Descarga pausada</string>\n    <string name=\"confirm_set_image_as_cover\">¿Usar esta imagen como portada?</string>\n    <string name=\"action_display\">Apariencia</string>\n    <string name=\"action_display_grid\">Cuadrícula compacta</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_share\">Compartir</string>\n    <string name=\"action_save\">Guardar</string>\n    <string name=\"action_reset\">Restablecer</string>\n    <string name=\"action_undo\">Deshacer</string>\n    <string name=\"action_open_log\">Abrir registro</string>\n    <string name=\"action_restore\">Restaurar</string>\n    <string name=\"app_not_available\">La aplicación no está disponible</string>\n    <string name=\"update_weekly\">Semanales</string>\n    <string name=\"all\">Todos</string>\n    <string name=\"default_category\">Categoría predeterminada</string>\n    <string name=\"default_category_summary\">Preguntar siempre</string>\n    <string name=\"pref_crop_borders\">Recortar bordes</string>\n    <string name=\"pref_custom_color_filter\">Filtro de color personalizado</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Teclas de volumen (al revés)</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"disabled\">Desactivado</string>\n    <string name=\"last_read_chapter\">Último capítulo leído</string>\n    <string name=\"second_to_last\">El penúltimo capítulo leído</string>\n    <string name=\"third_to_last\">El antepenúltimo capítulo leído</string>\n    <string name=\"fourth_to_last\">El trasantepenúltimo capítulo leído</string>\n    <string name=\"fifth_to_last\">El anteanteantepenúltimo capítulo leído</string>\n    <string name=\"pref_download_new\">Descargar capítulos nuevos</string>\n    <string name=\"pref_create_backup\">Crear una copia de seguridad</string>\n    <string name=\"pref_create_backup_summ\">Se puede utilizar para restaurar la biblioteca actual</string>\n    <string name=\"pref_restore_backup\">Restaurar copia de seguridad</string>\n    <string name=\"pref_restore_backup_summ\">Restaurar la biblioteca a partir de una copia de seguridad</string>\n    <string name=\"pref_backup_interval\">Frecuencia de respaldo automático</string>\n    <string name=\"backup_created\">Copia de seguridad creada</string>\n    <string name=\"restore_completed\">Restauración completada</string>\n    <string name=\"backup_choice\">¿De qué quieres hacer una copia de seguridad?</string>\n    <string name=\"restoring_backup\">Restaurando copia de seguridad</string>\n    <string name=\"creating_backup\">Creando copia de seguridad</string>\n    <string name=\"no_more_results\">No hay más resultados</string>\n    <string name=\"local_source\">Fuente local</string>\n    <string name=\"delete_downloads_for_manga\">¿Quieres borrar los capítulos descargados?</string>\n    <string name=\"chapter_paused\">Pausado</string>\n    <string name=\"manga_tracking_tab\">Seguimiento</string>\n    <string name=\"error_category_exists\">¡Ya existe una categoría con este nombre!</string>\n    <string name=\"snack_categories_deleted\">Categorías eliminadas</string>\n    <string name=\"snack_add_to_library\">¿Añadir manga a la biblioteca?</string>\n    <string name=\"picture_saved\">Imagen guardada</string>\n    <string name=\"custom_filter\">Filtro personalizado</string>\n    <string name=\"set_as_cover\">Poner como portada</string>\n    <string name=\"cover_updated\">Se ha actualizado la portada de la serie</string>\n    <string name=\"notification_cover_update_failed\">Error al actualizar la portada</string>\n    <string name=\"download_notifier_downloader_title\">Descargador</string>\n    <string name=\"action_global_search\">Búsqueda global</string>\n    <string name=\"action_display_download_badge\">Capítulos descargados</string>\n    <string name=\"other_source\">Otros</string>\n    <string name=\"action_global_search_hint\">Búsqueda global…</string>\n    <string name=\"latest\">Recientes</string>\n    <string name=\"browse\">Explorar</string>\n    <string name=\"channel_common\">Comunes</string>\n    <string name=\"information_empty_category\">No hay categorías. Pulsa el botón «+» para crear una y organizar tu biblioteca.</string>\n    <string name=\"label_migration\">Migrar</string>\n    <string name=\"label_extensions\">Extensiones</string>\n    <string name=\"label_extension_info\">Información de la extensión</string>\n    <string name=\"ext_update\">Actualizar</string>\n    <string name=\"ext_install\">Instalar</string>\n    <string name=\"ext_pending\">Pendiente</string>\n    <string name=\"ext_downloading\">Descargando</string>\n    <string name=\"ext_installing\">Instalando</string>\n    <string name=\"ext_installed\">Instalado</string>\n    <string name=\"ext_trust\">Confiar</string>\n    <string name=\"ext_untrusted\">No es fiable</string>\n    <string name=\"ext_uninstall\">Desinstalar</string>\n    <string name=\"untrusted_extension\">La extensión no es fiable</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Rápida</string>\n    <string name=\"transition_next\">Siguiente:</string>\n    <string name=\"transition_previous\">Anterior:</string>\n    <string name=\"transition_no_next\">No hay ningún capítulo más</string>\n    <string name=\"transition_no_previous\">No hay ningún capítulo anterior</string>\n    <string name=\"migrate\">Migrar</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"untrusted_extension_message\">Una extensión maliciosa puede leer credenciales de inicio guardadas o ejecutar cualquier tipo de código en tu dispositivo. \\n \\nAl marcar al autor como de confianza aceptas estos riesgos.</string>\n    <string name=\"double_tap_anim_speed_0\">Sin animación</string>\n    <string name=\"manga_added_library\">Añadido a biblioteca</string>\n    <string name=\"manga_removed_library\">Quitado de biblioteca</string>\n    <string name=\"copied_to_clipboard\">Copiado en portapapeles:\n\\n«%1$s»</string>\n    <string name=\"source_not_installed\">Fuente no instalada: %1$s</string>\n    <string name=\"repeating\">Releyendo</string>\n    <string name=\"track_status\">Estado</string>\n    <string name=\"track_type\">Tipo</string>\n    <string name=\"transition_finished\">Finalizado:</string>\n    <string name=\"transition_current\">Actual:</string>\n    <string name=\"transition_pages_loading\">Cargando páginas…</string>\n    <string name=\"transition_pages_error\">Error al cargar páginas: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Seleccionar datos para incluir</string>\n    <string name=\"pref_double_tap_anim_speed\">Velocidad de animación de doble toque</string>\n    <string name=\"pager_viewer\">Por páginas</string>\n    <string name=\"pref_read_with_long_tap\">Menú de pulsación prolongada</string>\n    <string name=\"action_open_in_web_view\">Abrir en WebView</string>\n    <string name=\"pref_skip_read_chapters\">Saltar capítulos leídos</string>\n    <string name=\"pref_color_filter_mode\">Mezcla de colores</string>\n    <string name=\"filter_mode_overlay\">Superponer</string>\n    <string name=\"filter_mode_multiply\">Multiplicar</string>\n    <string name=\"filter_mode_screen\">Trama</string>\n    <string name=\"filter_mode_lighten\">Sobreexponer / Aclarar</string>\n    <string name=\"filter_mode_darken\">Subexponer / Oscurecer</string>\n    <string name=\"label_help\">Ayuda</string>\n    <string name=\"no_results_found\">No se han encontrado resultados</string>\n    <string name=\"migration_selection_prompt\">Selecciona una fuente a migrar</string>\n    <string name=\"action_webview_back\">Atrás</string>\n    <string name=\"action_webview_forward\">Adelante</string>\n    <string name=\"action_webview_refresh\">Actualizar</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"ext_obsolete\">Obsoleto</string>\n    <string name=\"obsolete_extension_message\">Esta extensión ya no está disponible. Puede que no funcione bien y te cause problemas con el resto de la aplicación, te recomendamos desinstalarla.</string>\n    <string name=\"pref_date_format\">Formato de fecha</string>\n    <string name=\"pref_category_library_update\">Actualización global</string>\n    <string name=\"logout\">Cerrar sesión</string>\n    <string name=\"logout_success\">Has cerrado sesión</string>\n    <string name=\"paused\">Pausado</string>\n    <string name=\"logout_title\">¿Cerrar sesión en %1$s?</string>\n    <string name=\"label_more\">Más</string>\n    <string name=\"action_sort_latest_chapter\">Por capítulo más reciente</string>\n    <string name=\"action_view_chapters\">Ver capítulos</string>\n    <string name=\"action_cancel_all\">Cancelar todo</string>\n    <string name=\"theme_light\">Claro</string>\n    <string name=\"theme_dark\">Oscuro</string>\n    <string name=\"theme_system\">Del sistema</string>\n    <string name=\"pref_manage_notifications\">Gestionar notificaciones</string>\n    <string name=\"pref_category_security\">Seguridad y privacidad</string>\n    <string name=\"lock_with_biometrics\">Desbloqueo biométrico</string>\n    <string name=\"lock_when_idle\">Bloquear por inactividad</string>\n    <string name=\"lock_always\">Siempre</string>\n    <string name=\"lock_never\">Nunca</string>\n    <string name=\"secure_screen\">Pantalla segura</string>\n    <string name=\"ext_updates_pending\">Actualizaciones pendientes</string>\n    <string name=\"pref_cutout_short\">Mostrar contenido en el área recortada</string>\n    <string name=\"information_cloudflare_bypass_failure\">Fallo al evitar Cloudflare</string>\n    <string name=\"information_webview_outdated\">Actualiza la aplicación WebView para mejorar la compatibilidad</string>\n    <string name=\"channel_new_chapters\">Nuevos capítulos</string>\n    <string name=\"secure_screen_summary\">Activando «pantalla segura» ocultas la vista previa del contenido de la ventana al cambiar de aplicación y se bloquean las capturas de pantalla</string>\n    <string name=\"pref_category_display\">Visualización</string>\n    <string name=\"notification_chapters_single\">Capítulo %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Capítulo %1$s y %2$d más</string>\n    <string name=\"notification_chapters_multiple\">Capítulos %1$s</string>\n    <string name=\"hide_notification_content\">Ocultar el contenido de las notificaciones</string>\n    <string name=\"pref_disable_battery_optimization\">Desactivar la optimización de batería</string>\n    <string name=\"email\">Correo electrónico</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Mejora la cadencia de las actualizaciones y las copias de respaldo que se hagan en segundo plano</string>\n    <string name=\"battery_optimization_disabled\">La optimización de la batería ya está desactivada</string>\n    <string name=\"pref_always_show_chapter_transition\">Hacer transición entre capítulos</string>\n    <string name=\"action_menu\">Menú</string>\n    <string name=\"action_newest\">Lo más nuevo</string>\n    <string name=\"action_oldest\">Lo más antiguo</string>\n    <string name=\"action_move_to_top\">Mover al principio</string>\n    <string name=\"action_move_to_bottom\">Mover al final</string>\n    <string name=\"updating_library\">Actualizando biblioteca</string>\n    <string name=\"channel_ext_updates\">Actualizaciones de extensiones</string>\n    <string name=\"pref_skip_filtered_chapters\">Saltar capítulos excluidos por filtros</string>\n    <string name=\"pref_category_reading\">Lectura</string>\n    <string name=\"label_sources\">Fuentes</string>\n    <string name=\"action_select_inverse\">Invertir selección</string>\n    <string name=\"vertical_plus_viewer\">Tira vertical discontinua</string>\n    <string name=\"pref_webtoon_side_padding\">Espaciado lateral</string>\n    <string name=\"pinned_sources\">Ancladas</string>\n    <string name=\"action_unpin\">Desanclar</string>\n    <string name=\"action_pin\">Anclar</string>\n    <string name=\"add_tracking\">Añadir seguimiento</string>\n    <string name=\"in_library\">En biblioteca</string>\n    <string name=\"add_to_library\">Añadir a la biblioteca</string>\n    <string name=\"information_webview_required\">Primero instala WebView para poder ver contenido de la aplicación</string>\n    <string name=\"manga_info_collapse\">Menos</string>\n    <string name=\"manga_info_expand\">Más</string>\n    <string name=\"licenses\">Licencias de código abierto</string>\n    <string name=\"website\">Página web</string>\n    <string name=\"label_downloaded_only\">Sólo ya descargados</string>\n    <string name=\"recent_manga_time\">Caps. %1$s-%2$s</string>\n    <string name=\"restoring_backup_canceled\">Se ha cancelado la restauración</string>\n    <string name=\"restoring_backup_error\">Ha fallado la restauración de la copia de respaldo</string>\n    <string name=\"restore_in_progress\">La restauración ya está en curso</string>\n    <string name=\"creating_backup_error\">No se han podido respaldar los datos</string>\n    <string name=\"backup_in_progress\">La copia de seguridad ya está en curso</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d seg</string>\n    <string name=\"last_used_source\">Usado recientemente</string>\n    <string name=\"check_for_updates\">Buscar actualizaciones</string>\n    <string name=\"local_source_help_guide\">Guía de fuente local</string>\n    <string name=\"downloaded_only_summary\">Filtra todos los elementos de tu biblioteca para ver solo los que estén disponibles sin conexión</string>\n    <string name=\"viewer\">Modo de lectura</string>\n    <string name=\"pref_category_for_this_series\">Para esta serie</string>\n    <string name=\"gray_background\">Gris</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">No se pudieron abrir los ajustes del dispositivo</string>\n    <string name=\"pref_refresh_library_covers\">Actualizar las portadas de la biblioteca</string>\n    <string name=\"tracking_info\">La sincronización de estos servicios solo funciona en un solo sentido. Cada título en tu biblioteca tiene un botón de seguimiento y tendrás que configurarlo a mano, uno a uno.</string>\n    <string name=\"label_data\">Datos</string>\n    <string name=\"backup_restore_missing_sources\">Fuentes que faltan:</string>\n    <string name=\"invalid_backup_file_missing_manga\">La copia de seguridad no contiene ningún título; la biblioteca está vacía.</string>\n    <string name=\"invalid_backup_file\">El archivo de copia de seguridad no parece estar bien:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Comprueba si hay una nueva portada, información y descripción al actualizar la biblioteca</string>\n    <string name=\"pref_library_update_refresh_metadata\">Actualizar automáticamente los metadatos</string>\n    <string name=\"action_display_comfortable_grid\">Cuadrícula amplia</string>\n    <string name=\"action_migrate\">Migrar</string>\n    <string name=\"tabs_header\">Pestañas</string>\n    <string name=\"action_display_show_tabs\">Mostrar pestañas de categorías</string>\n    <string name=\"page_list_empty_error\">No se encontraron páginas</string>\n    <string name=\"action_disable_all\">Deshabilitar todo</string>\n    <string name=\"action_enable_all\">Habilitar todo</string>\n    <string name=\"pref_show_reading_mode_summary\">Mostrar brevemente el modo actual al abrir el visor</string>\n    <string name=\"pref_show_reading_mode\">Mostrar modo de lectura</string>\n    <string name=\"action_start\">Empezar</string>\n    <string name=\"loader_not_implemented_error\">No se ha encontrado la fuente</string>\n    <string name=\"action_disable\">Desactivar</string>\n    <string name=\"requires_app_restart\">Es necesario reiniciar la aplicación para que surta efecto</string>\n    <string name=\"label_network\">Red</string>\n    <string name=\"unknown_status\">Estado desconocido</string>\n    <string name=\"tapping_inverted_both\">Ambos</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"tapping_inverted_none\">No invertir</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invertir zonas de toque</string>\n    <string name=\"unknown_author\">Autor desconocido</string>\n    <string name=\"updated_version\">Actualizado a v%1$s</string>\n    <string name=\"whats_new\">Novedades</string>\n    <string name=\"download_insufficient_space\">No se pudo descargar ningún capítulo, queda muy poco espacio</string>\n    <string name=\"action_global_search_query\">Buscar por «%1$s» en todas las fuentes</string>\n    <string name=\"pref_category_reading_mode\">Modo de lectura</string>\n    <string name=\"pref_category_theme\">Esquema de colores</string>\n    <string name=\"action_sort_date_added\">Por fecha en la biblioteca</string>\n    <string name=\"no_pinned_sources\">Todavía no has anclado ninguna fuente</string>\n    <string name=\"channel_complete\">Terminadas</string>\n    <string name=\"channel_progress\">En progreso</string>\n    <string name=\"channel_errors\">Con errores</string>\n    <string name=\"backup_restore_missing_trackers\">Servicios de seguimiento sin conectar:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir el borrado de capítulos marcados como favoritos</string>\n    <string name=\"pref_category_delete_chapters\">Borrar capítulos</string>\n    <string name=\"ext_nsfw_warning\">Puede contener contenido para adultos (+18)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Esto no evita que las extensiones extraoficiales o que estén mal clasificadas muestren contenido para mayores de 18 años en la aplicación.</string>\n    <string name=\"no_chapters_error\">No hay capítulos</string>\n    <string name=\"chapter_settings_updated\">Se han actualizado los ajustes predeterminados de capítulo</string>\n    <string name=\"set_chapter_settings_as_default\">Establecer como predeterminado</string>\n    <string name=\"also_set_chapter_settings_for_library\">Aplicar también a todos los elementos en mi biblioteca</string>\n    <string name=\"confirm_set_chapter_settings\">¿Seguro que quieres guardar estos ajustes como predeterminados?</string>\n    <string name=\"chapter_settings\">Ajustes de capítulo</string>\n    <string name=\"share_page_info\">%1$s: %2$s, página %3$d</string>\n    <string name=\"action_search_settings\">Ajustes de búsqueda</string>\n    <string name=\"downloaded_chapters\">Capítulos descargados</string>\n    <string name=\"manga_from_library\">En la biblioteca</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa el historial de lectura</string>\n    <string name=\"pref_incognito_mode\">Modo incógnito</string>\n    <string name=\"pref_clear_history\">Borrar historial</string>\n    <string name=\"clear_history_confirmation\">¿Estás seguro? Perderás todo el historial.</string>\n    <string name=\"clear_history_completed\">Historial eliminado</string>\n    <string name=\"spen_next_page\">Siguiente página</string>\n    <string name=\"spen_previous_page\">Página anterior</string>\n    <string name=\"migration_help_guide\">Guía de migración de fuentes</string>\n    <string name=\"pref_category_nsfw_content\">Fuentes para adultos (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Mostrar en la lista de fuentes y extensiones</string>\n    <string name=\"file_picker_error\">No se ha encontrado ninguna aplicación con la que elegir archivos</string>\n    <string name=\"myanimelist_relogin\">Vuelve a iniciar sesión en MAL</string>\n    <string name=\"kindlish_nav\">Estilo Kindle</string>\n    <string name=\"track_finished_reading_date\">Fecha de finalización</string>\n    <string name=\"track_started_reading_date\">Fecha de inicio</string>\n    <string name=\"pref_dump_crash_logs_summary\">Guarda los registros de errores en un archivo para compartirlos con los desarrolladores</string>\n    <string name=\"pref_dump_crash_logs\">Compartir los registros de fallos</string>\n    <string name=\"pref_viewer_nav\">Zonas de toque</string>\n    <string name=\"edge_nav\">Borde</string>\n    <string name=\"l_nav\">En forma de L</string>\n    <string name=\"action_desc\">Descendiente</string>\n    <string name=\"action_asc\">Ascendente</string>\n    <string name=\"action_order_by_chapter_number\">Por número de capítulo</string>\n    <string name=\"action_order_by_upload_date\">Por fecha de subida</string>\n    <string name=\"action_filter_tracked\">En seguimiento</string>\n    <string name=\"right_and_left_nav\">Derecha e izquierda</string>\n    <string name=\"backup_restore_content_full\">Tendrás que instalar las extensiones que falten e iniciar sesión en los servicios de seguimiento para poder usarlos.</string>\n    <string name=\"update_check_eol\">Esta versión de Android ya no es compatible</string>\n    <string name=\"clipboard_copy_error\">No se pudo copiar al portapapeles</string>\n    <string name=\"pref_dns_over_https\">DNS sobre HTTPS (DoH)</string>\n    <string name=\"pref_download_new_categories_details\">Los elementos de las categorías excluidas no se descargarán, aunque sí estén en alguna categoría con descargas.</string>\n    <string name=\"pref_category_auto_download\">Descarga automática</string>\n    <string name=\"rotation_landscape\">En horizontal</string>\n    <string name=\"rotation_portrait\">En vertical</string>\n    <string name=\"nav_zone_right\">Derecha</string>\n    <string name=\"nav_zone_left\">Izquierda</string>\n    <string name=\"nav_zone_next\">Siguiente</string>\n    <string name=\"nav_zone_prev\">Anterior</string>\n    <string name=\"pref_dual_page_invert_summary\">Si la partición de la página ancha no coincide con la dirección de lectura</string>\n    <string name=\"pref_dual_page_invert\">Dividir la página partida en la dirección contraria</string>\n    <string name=\"pref_dual_page_split\">Partir en dos las páginas anchas</string>\n    <string name=\"pref_show_navigation_mode_summary\">Muestra una vista previa de las zonas al abrir el visor</string>\n    <string name=\"pref_show_navigation_mode\">Ver superposición con zonas de toque</string>\n    <string name=\"exclude\">Excluir: %s</string>\n    <string name=\"include\">Incluir: %s</string>\n    <string name=\"none\">Ninguna</string>\n    <string name=\"pref_library_update_categories_details\">Los elementos en categorías excluidas no se actualizarán, aunque sí estén en alguna categoría con actualizaciones.</string>\n    <string name=\"action_show_errors\">Toca para ver los detalles</string>\n    <string name=\"action_display_show_number_of_items\">Mostrar el número de elementos</string>\n    <string name=\"action_sort_chapter_fetch_date\">Fecha de obtención del capítulo</string>\n    <string name=\"rotation_type\">Tipo de rotación</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Crea carpetas según el título de la obra</string>\n    <string name=\"pref_create_folder_per_manga\">Guardar las páginas en carpetas independientes</string>\n    <string name=\"pref_reader_actions\">Acciones</string>\n    <string name=\"pref_grayscale\">Escala de grises</string>\n    <string name=\"restore_miui_warning\">Es posible que las funciones de copia de respaldo y restauración no funcionen correctamente si la opción «Optimización de MIUI» está desactivada.</string>\n    <string name=\"theme_midnightdusk\">Crepúsculo de medianoche</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri de fresa</string>\n    <string name=\"pref_dark_theme_pure_black\">Modo oscuro negro puro</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"restrictions\">Restricciones: %s</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin y yang</string>\n    <string name=\"theme_greenapple\">Manzana verde</string>\n    <string name=\"theme_monet\">Dinámico</string>\n    <string name=\"pref_app_theme\">Tema de la aplicación</string>\n    <string name=\"action_start_downloading_now\">Empezar a descargar ahora</string>\n    <string name=\"cancel_all_for_series\">Cancelar todo para esta serie</string>\n    <string name=\"action_display_local_badge\">Contenido local</string>\n    <string name=\"about_dont_kill_my_app\">Algunos fabricantes restringen aún más ciertas aplicaciones y detienen sus servicios en segundo plano. Esta página web tiene más información sobre cómo solucionarlo.</string>\n    <string name=\"information_empty_category_dialog\">Todavía no existen categorías.</string>\n    <string name=\"error_no_match\">No se han encontrado coincidencias</string>\n    <string name=\"source_unsupported\">Fuente no soportada</string>\n    <string name=\"unread\">Sin leer</string>\n    <string name=\"error_sharing_cover\">Hubo un error al compartir la portada</string>\n    <string name=\"error_saving_cover\">Hubo un error al guardar la portada</string>\n    <string name=\"cover_saved\">Se ha guardado la portada</string>\n    <string name=\"manga_cover\">Portada</string>\n    <string name=\"date\">Fecha</string>\n    <string name=\"local_filter_order_by\">Ordenar por</string>\n    <string name=\"local_invalid_format\">El formato del capítulo no es correcto</string>\n    <string name=\"chapter_not_found\">No se ha encontrado el capítulo</string>\n    <string name=\"notification_incognito_text\">Desactivar el modo incógnito</string>\n    <string name=\"enhanced_tracking_info\">Ofrecen funciones mejoradas para ciertas fuentes. Se hace un seguimiento automático de los títulos al añadirlos a la biblioteca.</string>\n    <string name=\"enhanced_services\">Servicios de seguimiento mejorados</string>\n    <string name=\"tracking_guide\">Guía de seguimiento</string>\n    <string name=\"automatic_background\">Automático</string>\n    <string name=\"off\">No</string>\n    <string name=\"on\">Sí</string>\n    <string name=\"categorized_display_settings\">Establecer el tipo de orden para cada categoría</string>\n    <string name=\"label_background_activity\">Actividad en segundo plano</string>\n    <string name=\"action_track\">Seguir</string>\n    <string name=\"getting_started_guide\">Guía de introducción</string>\n    <string name=\"pref_tablet_ui_mode\">Interfaz de tableta</string>\n    <string name=\"pref_lowest\">Más baja</string>\n    <string name=\"pref_low\">Baja</string>\n    <string name=\"pref_high\">Alta</string>\n    <string name=\"pref_highest\">Más alta</string>\n    <string name=\"pref_hide_threshold\">Sensibilidad para ocultar automáticamente el menú al desplazarse</string>\n    <string name=\"pref_inverted_colors\">Invertido</string>\n    <string name=\"relative_time_today\">Hoy</string>\n    <string name=\"theme_tealturquoise\">Azul marino y turquesa</string>\n    <string name=\"pref_category_appearance\">Apariencia</string>\n    <string name=\"confirm_lock_change\">Identifícate para confirmar el cambio</string>\n    <string name=\"label_default\">Original</string>\n    <string name=\"pref_remove_exclude_categories\">Categorías excluidas</string>\n    <string name=\"help_translate\">Ayudar a traducir</string>\n    <string name=\"action_sort_count\">Número total de elementos</string>\n    <string name=\"ext_installer_pref\">Instalador</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku no está activo</string>\n    <string name=\"ext_installer_legacy\">Clásico</string>\n    <string name=\"ext_install_service_notif\">Instalando extensión…</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instala e inicia Shizuku para utilizar Shizuku como instalador de extensiones.</string>\n    <string name=\"ext_app_info\">Información de la aplicación</string>\n    <string name=\"pref_verbose_logging\">Registro detallado</string>\n    <string name=\"pref_verbose_logging_summary\">Mostrar registros detallados en el registro del sistema (reduce el rendimiento de la aplicación)</string>\n    <string name=\"label_warning\">Advertencia</string>\n    <string name=\"notification_size_warning\">Las actualizaciones grandes pueden implicar un mayor uso de la batería y que los distintos servicios bloqueen o ralenticen el acceso a tu dispositivo. Toca aquí para más información.</string>\n    <string name=\"action_display_language_badge\">Idioma</string>\n    <string name=\"backup_info\">Es una buena idea tener copias de respaldo fuera de tu dispositivo. Ten en cuenta que incluyen contraseñas y otros datos privados que seguramente no quieras compartir.</string>\n    <string name=\"connected_to_wifi\">Solo con Wi-Fi</string>\n    <string name=\"update_72hour\">Cada 3 días</string>\n    <string name=\"download_queue_size_warning\">Advertencia: Las descargas grandes pueden llevar a que las fuentes se vuelvan cada vez más lentas y en casos extremos que los servidores limiten o impidan el acceso a Mihon. Toca aquí para más información.</string>\n    <string name=\"ext_update_all\">Actualizar todas</string>\n    <string name=\"channel_app_updates\">Actualizaciones de la aplicación</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Limpiar la caché de capítulos al abrir la aplicación</string>\n    <string name=\"database_clean\">Base de datos limpia</string>\n    <string name=\"clear_database_source_item_count\">%1$d títulos que no pertenecen a la biblioteca en la base de datos</string>\n    <string name=\"extension_api_error\">No se han podido obtener las extensiones disponibles</string>\n    <string name=\"privacy_policy\">Política de privacidad</string>\n    <string name=\"pref_update_only_completely_read\">Saltarse títulos con capítulos por leer</string>\n    <string name=\"library_errors_help\">Si necesitas ayuda para resolver los errores de actualización de la biblioteca mira en %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Guardar como archivo CBZ</string>\n    <string name=\"on_hiatus\">En pausa</string>\n    <string name=\"publishing_finished\">Publicación finalizada</string>\n    <string name=\"cancelled\">Cancelada</string>\n    <string name=\"action_show_manga\">Mostrar el elemento</string>\n    <string name=\"pref_navigate_pan\">Desplazarse por el resto de la página antes de cambiar</string>\n    <string name=\"action_display_cover_only_grid\">Cuadrícula sólo de portadas</string>\n    <string name=\"pref_landscape_zoom\">Acercar la vista en horizontal</string>\n    <string name=\"pref_update_only_started\">Saltarse títulos sin empezar</string>\n    <string name=\"skipped_reason_completed\">Omitido, ya que su publicación ha terminado</string>\n    <string name=\"skipped_reason_not_caught_up\">Omitido porque todavía hay capítulos sin leer</string>\n    <string name=\"skipped_reason_not_started\">Omitido porque no hay capítulos leídos</string>\n    <string name=\"learn_more\">Ver más detalles</string>\n    <string name=\"notification_update_error\">Actualizaciones fallidas: %1$d</string>\n    <string name=\"rotation_reverse_portrait\">En vertical, al revés</string>\n    <string name=\"action_move_to_top_all_for_series\">Mover al primer puesto</string>\n    <string name=\"disabled_nav\">Desactivado</string>\n    <string name=\"error_saving_picture\">No se ha podido guardar la imagen</string>\n    <string name=\"empty_backup_error\">No hay ningún elemento en la biblioteca que respaldar</string>\n    <string name=\"update_check_open\">Abrir en GitHub</string>\n    <string name=\"webview_data_deleted\">Se han limpiado los datos del WebView</string>\n    <string name=\"pref_clear_webview_data\">Limpiar datos del WebView</string>\n    <string name=\"action_close\">Cerrar</string>\n    <string name=\"source_filter_empty_screen\">Todavía no se ha instalado ninguna fuente</string>\n    <string name=\"source_empty_screen\">No se ha encontrado ninguna fuente</string>\n    <string name=\"action_sort_last_manga_update\">Última comprobación de actualizaciones</string>\n    <string name=\"action_sort_unread_count\">Capítulos restantes</string>\n    <string name=\"split_tall_images_summary\">Mejora el rendimiento del visor, dividiendo páginas descargadas mucho más altas que anchas</string>\n    <string name=\"download_notifier_split_page_not_found\">No se ha encontrado la página %d al dividir</string>\n    <string name=\"download_notifier_split_page_path_not_found\">La ruta al archivo de la página %d no se encuentra</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Restablece el modo de lectura y orientación en toda la biblioteca</string>\n    <string name=\"pref_reset_viewer_flags_success\">Se han restablecido los ajustes del visor</string>\n    <string name=\"pref_reset_viewer_flags\">Restablecer los ajustes del visor en cada serie</string>\n    <string name=\"pref_reset_viewer_flags_error\">No se pudieron restablecer los ajustes del visor</string>\n    <string name=\"empty_screen\">Houston, tenemos un problema</string>\n    <string name=\"ext_info_version\">Versión</string>\n    <string name=\"ext_info_language\">Idioma</string>\n    <string name=\"ext_info_age_rating\">Clasificación por edades</string>\n    <string name=\"reading_list\">Leyendo</string>\n    <string name=\"wish_list\">A leer en un futuro</string>\n    <string name=\"complete_list\">Leídos del todo</string>\n    <string name=\"on_hold_list\">En pausa</string>\n    <string name=\"unfinished_list\">Sin terminar</string>\n    <string name=\"network_not_metered\">Solo en conexiones no medidas</string>\n    <string name=\"cant_open_last_read_chapter\">No se pudo abrir el último capítulo leído</string>\n    <string name=\"custom_cover\">Portada personalizada</string>\n    <string name=\"not_installed\">Sin instalar</string>\n    <string name=\"pref_app_language\">Idioma de la aplicación</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"description_placeholder\">Sin descripción</string>\n    <string name=\"delete_category\">Borrar categoría</string>\n    <string name=\"delete_category_confirmation\">¿Quieres borrar la categoría «%s»?</string>\n    <string name=\"internal_error\">ErrorInterno: Mira el registro de depuración para más información</string>\n    <string name=\"pref_user_agent_string\">Identificarse como otro navegador web («user agent»)</string>\n    <string name=\"pref_reset_user_agent_string\">Volver a la identificación de navegador («user agent») original</string>\n    <string name=\"action_remove_everything\">Quitar todo</string>\n    <string name=\"appwidget_updates_description\">Aquí aparecerá el contenido más reciente de tu biblioteca</string>\n    <string name=\"appwidget_unavailable_locked\">El widget no está disponible cuando el bloqueo de aplicación está activo</string>\n    <string name=\"update_already_running\">Ya se está actualizando</string>\n    <string name=\"theme_tidalwave\">Marea</string>\n    <string name=\"error_user_agent_string_blank\">La cadena con el agente de usuario («user agent») no puede estar vacía</string>\n    <string name=\"download_ahead_info\">Solo funciona si el capítulo actual y el que va después ya están descargados.</string>\n    <string name=\"download_ahead\">Descargar por adelantado</string>\n    <string name=\"auto_download_while_reading\">Descargar los siguientes capítulos mientras lees</string>\n    <string name=\"are_you_sure\">¿Estás seguro?</string>\n    <string name=\"updates_last_update_info\">La biblioteca se actualizó: %s</string>\n    <string name=\"remove_manga\">Estás a punto de borrar «%s» de tu biblioteca</string>\n    <string name=\"popular\">Populares</string>\n    <string name=\"multi_lang\">Varios idiomas</string>\n    <string name=\"missing_storage_permission\">No se han concedido los permisos de almacenamiento</string>\n    <string name=\"skipped_reason_not_always_update\">Omitido, ya que no es necesario actualizarse</string>\n    <string name=\"action_search_hint\">Buscar…</string>\n    <string name=\"pref_tracking_summary\">Sincroniza tu progreso de lectura; unidireccional o mejorada</string>\n    <string name=\"pref_downloads_summary\">Descargas automáticas y por adelantado</string>\n    <string name=\"pref_library_summary\">Categorías, actualizaciones generales y acciones al deslizar el dedo</string>\n    <string name=\"crash_screen_description\">%s se ha cerrado por un problema inesperado. Te sugerimos que compartas todos tus registros de depuración, enviándolos a nuestro canal de apoyo en Discord, en inglés.</string>\n    <string name=\"pref_reader_summary\">Modos de lectura, apariencia y navegación</string>\n    <string name=\"pref_appearance_summary\">Temas de colores y formatos de fecha</string>\n    <string name=\"pref_advanced_summary\">Informes de fallos y ahorro de batería</string>\n    <string name=\"pref_security_summary\">Pantalla segura y desbloqueo biométrico</string>\n    <string name=\"pref_backup_summary\">Copias de seguridad manuales y automáticas, almacenamiento</string>\n    <string name=\"pref_browse_summary\">Fuentes, extensiones y búsqueda global</string>\n    <string name=\"crash_screen_title\">¡Vaya!</string>\n    <string name=\"crash_screen_restart_application\">Reiniciar la aplicación</string>\n    <string name=\"unknown_title\">Título desconocido</string>\n    <string name=\"invalid_location\">Ubicación incorrecta: %s</string>\n    <string name=\"updates_last_update_info_just_now\">Ahora mismo</string>\n    <string name=\"error_user_agent_string_invalid\">La cadena con el agente de usuario («user agent») no parece ser correcta</string>\n    <string name=\"download_notifier_cache_renewal\">Reindexando descargas</string>\n    <string name=\"action_open_random_manga\">Abrir un elemento al azar</string>\n    <string name=\"information_no_entries_found\">Parece que esta categoría está vacía</string>\n    <string name=\"fdroid_warning\">No damos soporte oficial a las versiones de F-Droid.\n\\nToca para más información.</string>\n    <string name=\"action_display_show_continue_reading_button\">Mostrar el botón de seguir leyendo</string>\n    <string name=\"track_remove_start_date_conf_text\">Al hacer esto %s ya no aparecerá como empezado ese día</string>\n    <string name=\"track_remove_date_conf_title\">¿Quieres quitar esta fecha?</string>\n    <string name=\"track_remove_finish_date_conf_text\">Al hacer esto %s ya no aparecerá como terminado ese día</string>\n    <string name=\"pref_invalidate_download_cache\">Reconstruir el índice de descargas</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forzar a la aplicación a volver a comprobar los capítulos descargados</string>\n    <string name=\"label_started\">Empezados</string>\n    <string name=\"label_local\">En el dispositivo</string>\n    <string name=\"label_completed_titles\">Leídos del todo</string>\n    <string name=\"label_read_duration\">Tiempo de lectura</string>\n    <string name=\"label_read_chapters\">Leídos</string>\n    <string name=\"label_tracker_section\">Con seguimiento</string>\n    <string name=\"label_total_chapters\">En total</string>\n    <string name=\"label_titles_in_global_update\">Actualizados de forma global</string>\n    <string name=\"label_mean_score\">Puntuación media</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"label_used\">En uso</string>\n    <string name=\"not_applicable\">N/D</string>\n    <string name=\"label_tracked_titles\">En servicios de seguimiento</string>\n    <string name=\"label_downloaded\">Descargados</string>\n    <string name=\"label_stats\">Estadísticas</string>\n    <string name=\"label_overview_section\">Resumen</string>\n    <string name=\"label_titles_section\">Títulos</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_not_now\">Ahora no</string>\n    <string name=\"information_no_manga_category\">La categoría está vacía</string>\n    <string name=\"pref_library_update_show_tab_badge\">Ver número de capítulos por leer en el icono de actualizaciones</string>\n    <string name=\"copied_to_clipboard_plain\">Se ha copiado al portapapeles</string>\n    <string name=\"pref_skip_dupe_chapters\">Saltarse los capítulos repetidos</string>\n    <string name=\"enhanced_services_not_installed\">Están disponibles, pero las fuentes todavía no se han instalado: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">Ya tienes un elemento en la biblioteca con este mismo nombre.\n\\n\n\\n¿Seguro que quieres continuar?</string>\n    <string name=\"track_error\">%1$s error: %2$s</string>\n    <string name=\"information_required_plain\">*necesaria</string>\n    <string name=\"pref_hide_in_library_items\">Saltar elementos que ya estén en la biblioteca</string>\n    <string name=\"action_copy_to_clipboard\">Copiar al portapapeles</string>\n    <string name=\"action_update_category\">Actualizar categoría</string>\n    <string name=\"split_tall_images\">Dividir las imágenes altas</string>\n    <string name=\"overlay_header\">Superposición</string>\n    <string name=\"pref_page_rotate\">Girar las páginas anchas para adaptarlas a la pantalla</string>\n    <string name=\"pref_page_rotate_invert\">Girar las páginas anchas en la dirección opuesta</string>\n    <string name=\"pref_debug_info\">Información de depuración</string>\n    <string name=\"pref_chapter_swipe_start\">Capítulo al deslizar a la izquierda</string>\n    <string name=\"pref_chapter_swipe_end\">Capítulo al deslizar a la derecha</string>\n    <string name=\"pref_double_tap_zoom\">Ampliar tocando dos veces la pantalla</string>\n    <string name=\"action_sort_next_updated\">Próxima actualización prevista</string>\n    <string name=\"pref_update_only_in_release_period\">Intentar predecir cuándo sale el siguiente número</string>\n    <string name=\"intervals_header\">Intervalos</string>\n    <string name=\"manga_display_interval_title\">Estimar cada</string>\n    <string name=\"manga_display_modified_interval_title\">Forzar actualización cada</string>\n    <string name=\"skipped_reason_not_in_release_period\">No se ha comprobado ninguna actualización hoy al no prever ninguna</string>\n    <string name=\"action_set_interval\">Establecer intervalo</string>\n    <string name=\"action_filter_interval_custom\">Frecuencia de actualización personalizada</string>\n    <string name=\"action_ok\">Aceptar</string>\n    <string name=\"track_delete_title\">¿Quieres desvincular %s?</string>\n    <string name=\"track_delete_text\">Esto eliminará el seguimiento localmente.</string>\n    <string name=\"track_delete_remote_text\">Quitar también de %s</string>\n    <string name=\"delete_downloaded\">Borrar los ya descargados</string>\n    <string name=\"has_results\">Con resultados</string>\n    <string name=\"library_sync_complete\">La biblioteca se ha sincronizado correctamente</string>\n    <string name=\"syncing_library\">Sincronizando la biblioteca</string>\n    <string name=\"information_cloudflare_help\">Toca aquí para solucionar problemas de acceso con Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Se ha borrado el índice de descargas</string>\n    <string name=\"track_activity_name\">Iniciar sesión en el servicio</string>\n    <string name=\"create_backup_file_error\">No se ha podido crear un archivo de respaldo</string>\n    <string name=\"exception_unknown_host\">«%s» no parece estar disponible</string>\n    <string name=\"exception_http\">HTTP %d, prueba abriendo la página web en WebView</string>\n    <string name=\"exception_offline\">Sin conexión a Internet</string>\n    <string name=\"unlock_app_title\">Desbloquear %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Mover al último puesto</string>\n    <string name=\"pref_relative_format\">Marcas de tiempo relativas</string>\n    <string name=\"pref_relative_format_summary\">«%1$s» en vez de «%2$s»</string>\n    <string name=\"notification_updating_progress\">Actualizando biblioteca... (%s)</string>\n    <string name=\"source_settings\">Ajustes de la fuente</string>\n    <string name=\"app_settings\">Ajustes de la aplicación</string>\n    <string name=\"file_null_uri_error\">No has elegido ningún archivo</string>\n    <string name=\"relative_time_span_never\">Nunca</string>\n    <string name=\"pref_flash_page_summ\">Esta transición minimiza las manchas y el efecto de retención de imagen en pantallas de tinta electrónica</string>\n    <string name=\"last_auto_backup_info\">Última copia automática: %s</string>\n    <string name=\"pref_flash_page\">Parpadear a blanco al cambiar de página</string>\n    <string name=\"label_data_storage\">Datos y almacenamiento</string>\n    <string name=\"pref_storage_usage\">Almacenamiento utilizado</string>\n    <string name=\"action_sort_tracker_score\">Puntuación del servicio</string>\n    <string name=\"action_apply\">Aplicar</string>\n    <string name=\"action_revert_to_default\">Restablecer vista</string>\n    <string name=\"action_create\">Crear</string>\n    <string name=\"no_scanlators_found\">No se ha encontrado ningún equipo de traducción</string>\n    <string name=\"scanlator\">Equipo de traducción</string>\n    <string name=\"exclude_scanlators\">Excluir equipo de traducción</string>\n    <string name=\"selected\">Seleccionado</string>\n    <string name=\"not_selected\">No seleccionado</string>\n    <string name=\"action_menu_overflow_description\">Más opciones</string>\n    <string name=\"action_bar_up_description\">Subir un nivel</string>\n    <string name=\"pref_storage_location\">Ubicación del almacenamiento</string>\n    <string name=\"pref_storage_location_info\">Se utiliza para las copias de seguridad automáticas, poder descargar capítulos y abrir los que ya tengas en tu dispositivo.</string>\n    <string name=\"onboarding_storage_action_select\">Elige una carpeta</string>\n    <string name=\"pref_onboarding_guide\">Guía para principiantes</string>\n    <string name=\"onboarding_guides_new_user\">¿Es la primera vez que instalas %s? Te recomendamos leer la guía de introducción.</string>\n    <string name=\"onboarding_action_finish\">Comenzar</string>\n    <string name=\"onboarding_storage_selection_required\">Tienes que elegir una carpeta</string>\n    <string name=\"onboarding_heading\">¡Hola!</string>\n    <string name=\"onboarding_guides_returning_user\">¿No es la primera vez que instalas %s?</string>\n    <string name=\"onboarding_action_skip\">Saltar</string>\n    <string name=\"onboarding_action_next\">Siguiente</string>\n    <string name=\"onboarding_description\">Lo primero de todo es dejar las cosas a tu gusto. Siempre puedes volver a cambiarlas más tarde en los ajustes.</string>\n    <string name=\"no_location_set\">Todavía no has proporcionado ninguna carpeta</string>\n    <string name=\"onboarding_storage_info\">Elige una carpeta donde %1$s guardará los capítulos descargados, las copias de seguridad y otras cosas.\\n\\nTe recomendamos que sea solo para %1$s.\\n\\nCarpeta seleccionada: %2$s</string>\n    <string name=\"onboarding_permission_install_apps\">Permiso para instalar aplicaciones</string>\n    <string name=\"onboarding_permission_notifications\">Permitir notificaciones</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Evita interrupciones en las actualizaciones de las bibliotecas, descargas y restauraciones de copias de seguridad.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Uso de batería en segundo plano</string>\n    <string name=\"onboarding_permission_install_apps_description\">Para poder instalar extensiones que te dejen encontrar y descargar contenido.</string>\n    <string name=\"onboarding_permission_notifications_description\">Recibe notificaciones sobre actualizaciones de la biblioteca y mucho más.</string>\n    <string name=\"onboarding_permission_action_grant\">Conceder</string>\n    <string name=\"available_disk_space_info\">Disponible: %1$s / Total: %2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">Toca aquí para conceder los permisos necesarios para instalar extensiones.</string>\n    <string name=\"private_settings\">Incluir datos privados, como las claves de inicio de sesión en plataformas de seguimiento</string>\n    <string name=\"invalid_backup_file_error\">Descripción completa del problema:</string>\n    <string name=\"manga_interval_expected_update\">Se espera que el siguiente número salga en aproximadamente %1$s, la aplicación busca actualizaciones cada %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Frecuencia de actualización personalizada:</string>\n    <string name=\"error_repo_exists\">¡Este repositorio ya existe!</string>\n    <string name=\"pref_library_update_smart_update\">Actualizaciones inteligentes</string>\n    <string name=\"invalid_repo_name\">La dirección URL del repositorio no parece ser correcta</string>\n    <string name=\"action_add_repo_message\">Añade más repositorios a Mihon; la dirección URL tiene que terminar en «index.min.json».</string>\n    <string name=\"delete_repo_confirmation\">¿Seguro que quieres borrar el repositorio «%s»?</string>\n    <string name=\"action_delete_repo\">Borrar repositorio</string>\n    <string name=\"action_add_repo\">Añadir un repositorio</string>\n    <string name=\"information_empty_repos\">Todavía no has añadido ningún repositorio.</string>\n    <string name=\"label_extension_repos\">Repositorios de extensiones</string>\n    <string name=\"label_add_repo_input\">Dirección URL del repositorio</string>\n    <string name=\"onboarding_storage_help_info\">¿Acabas de actualizar desde una versión más antigua y no sabes qué hacer? Échale un vistazo a la guía de almacenamiento.</string>\n    <string name=\"onboarding_storage_help_action\">Guía de almacenamiento</string>\n    <string name=\"theme_nord\">Norteño</string>\n    <string name=\"manga_interval_expected_update_soon\">Pronto</string>\n    <string name=\"ext_revoke_trust\">Dejar de marcar todas la extensiones desconocidas como de confianza</string>\n    <string name=\"action_open_repo\">Abrir repositorio</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Desactivar alejar</string>\n    <string name=\"pref_display_profile\">Perfil de visualización personalizado</string>\n    <string name=\"action_add_anyway\">Agregar de todos modos</string>\n    <string name=\"action_migrate_duplicate\">Migrar la entrada existente</string>\n    <string name=\"action_replace_repo\">Reemplazar</string>\n    <string name=\"action_replace_repo_title\">La huella digital de la clave de la firma ya existe</string>\n    <string name=\"action_replace_repo_message\">El repositorio %1$s tiene la misma huella digital de clave de la firma que %2$s.\n\\nSi esto es lo esperado, %2$s será reemplazado, de lo contrario contacte con quien mantiene su repositorio.</string>\n    <string name=\"label_upcoming\">Próximo</string>\n    <string name=\"action_view_upcoming\">Ver las próximas actualizaciones</string>\n    <string name=\"upcoming_guide\">Próxima guía</string>\n    <string name=\"upcoming_calendar_next\">Próximo mes</string>\n    <string name=\"upcoming_calendar_prev\">Mes anterior</string>\n    <string name=\"file_picker_uri_permission_unsupported\">No se ha podido obtener un acceso continuo a la carpeta, por lo que la aplicación puede fallar de vez en cuando.</string>\n    <string name=\"pref_flash_page_interval\">Parpadear cada</string>\n    <string name=\"pref_flash_with\">Parpadear a</string>\n    <string name=\"pref_flash_style_white\">Blanco</string>\n    <string name=\"pref_flash_style_white_black\">Blanco y negro</string>\n    <string name=\"pref_flash_style_black\">Negro</string>\n    <string name=\"pref_flash_duration\">Duración</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"manga_interval_expected_update_null\">Este manga está terminado o no hay fecha de publicación prevista.</string>\n    <string name=\"invalid_backup_file_json\">Copia de seguridad JSON no compatible</string>\n    <string name=\"invalid_backup_file_unknown\">El archivo de la copia de seguridad está dañado</string>\n    <string name=\"extensionRepo_settings\">Repositorios de extensiones</string>\n    <string name=\"action_copy_link\">Copiar el enlace</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Omitir la descarga de capítulos duplicados y ya leídos</string>\n    <string name=\"add_repo_confirmation\">¿Quieres añadir el repositorio «%s»?</string>\n    <string name=\"confirm_tracker_update\">¿Marcar el capítulo %d como leído en los servicios de seguimiento?</string>\n    <string name=\"action_sort_random\">Al azar</string>\n    <string name=\"onboarding_permission_crashlytics\">Enviar registros de errores</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Envía registros anónimos de errores a los desarrolladores.</string>\n    <string name=\"pref_security\">Seguridad</string>\n    <string name=\"ext_remove\">Eliminar</string>\n    <string name=\"ext_confirm_remove\">¿Quieres eliminar la extensión?</string>\n    <string name=\"remove_private_extension_message\">¿Seguro que quieres quitar la extensión «%s»?</string>\n    <string name=\"firebase_summary\">El envío de registros de errores y estadísticas de uso nos permitirá identificar y solucionar problemas, mejorar el rendimiento y hacer que las versiones futuras se adapten mejor a tus necesidades</string>\n    <string name=\"onboarding_permission_analytics\">Enviar estadísticas de uso</string>\n    <string name=\"onboarding_permission_analytics_description\">Compartir estadísticas de uso para mejorar la aplicación.</string>\n    <string name=\"pref_firebase\">Informar de errores y compartir datos</string>\n    <string name=\"non_library_settings\">Todas las obras leídas</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Actualizar el progreso al marcarlo como leído</string>\n    <string name=\"trackers_updated_summary\">El progreso de lectura ha saltado al capítulo %d</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Predeterminado (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Elegir un tamaño máximo con el que decodificar imágenes por hardware</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Si el visor carga una página en blanco te recomendamos ir reduciéndolo poco a poco hasta que funcione.\\nLímite actual: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Empeora el rendimiento, te recomendamos activarlo solo si la imagen sigue sin verse al reducir el tamaño máximo</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pausa el historial de lectura para el contenido de la extensión</string>\n    <string name=\"tracked_privately\">Seguimiento privado</string>\n    <string name=\"label_auto\">Automático</string>\n    <string name=\"theme_monochrome\">Monocromo</string>\n    <string name=\"export\">Exportar</string>\n    <string name=\"library_exported\">La biblioteca se ha exportado</string>\n    <string name=\"library_list\">Elementos en la biblioteca</string>\n    <string name=\"author\">Autor</string>\n    <string name=\"artist\">Artista</string>\n    <string name=\"action_toggle_private_off\">Seguir públicamente</string>\n    <string name=\"action_toggle_private_on\">Seguir de forma privada</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Cargar imágenes de tira vertical con el decodificador antiguo</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Marcar capítulos duplicados como ya leídos</string>\n    <string name=\"action_display_unread_badge\">Capítulos por leer</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_new\">Al obtener capítulos nuevos</string>\n    <string name=\"pref_behavior\">Comportamiento</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_existing\">Al terminar de leer un capítulo</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/eu/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s-n egin da errore %2$s-ekin</item>\n        <item quantity=\"other\">%1$s-n egin da %2$s errorerekin</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Atzo</item>\n        <item quantity=\"other\">Duela %1$d egun</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Minutu baten ostean</item>\n        <item quantity=\"other\">%1$s minuturen ostean</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Kapitulu bat saltatzen, iturria falta da edo iragazia izan da</item>\n        <item quantity=\"other\">%d kapitulu saltatzen, iturria falta da edo iragaziak izan dira</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Titulu baterako</item>\n        <item quantity=\"other\">%d titulurako</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">1 geratzen da</item>\n        <item quantity=\"other\">%1$s geratzen dira</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">kategoria %d</item>\n        <item quantity=\"other\">%d kategoria</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">kapitulu 1</item>\n        <item quantity=\"other\">%1$s kapitulu</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">jarraitzaile 1</item>\n        <item quantity=\"other\">%d jarraitzaile</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">Kapitulu berri bat</item>\n        <item quantity=\"other\">%1$d kapitulu berri</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Luzapen baten eguneraketa eskuragarri</item>\n        <item quantity=\"other\">%d luzapenen eguneraketak eskuragarri</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">%1$s kapituluak eta bat gehiago</item>\n        <item quantity=\"other\">%1$s kapituluak eta %2$d gehiago</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/eu/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"no_chapters_error\">Ez dira kapitulurik aurkitu</string>\n    <string name=\"picture_saved\">Irudia gorde da</string>\n    <string name=\"channel_errors\">Erroreak</string>\n    <string name=\"unknown_error\">Akats ezezaguna</string>\n    <string name=\"ongoing\">Argitaratzen</string>\n    <string name=\"unknown\">Ezezaguna</string>\n    <string name=\"updating_library\">Liburutegia eguneratzen</string>\n    <string name=\"getting_started_guide\">Hasiberrientzako gida</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"chapters\">Kapituluak</string>\n    <string name=\"categories\">Kategoriak</string>\n    <string name=\"name\">Izena</string>\n    <string name=\"history\">Historiala</string>\n    <string name=\"lock_when_idle\">Blokeatu geldi geratzean</string>\n    <string name=\"default_category\">Kategoria lehentsia</string>\n    <string name=\"licensed\">Lizentziatua</string>\n    <string name=\"chapter_not_found\">Kapitulua ez da aurkitu</string>\n    <string name=\"loading\">Kargatzen…</string>\n    <string name=\"charging\">Telefonoa kargatzen</string>\n    <string name=\"title\">Titulua</string>\n    <string name=\"completed\">Bukatua</string>\n    <string name=\"unread\">Irakurri gabea</string>\n    <string name=\"l_nav\">L formakoa</string>\n    <string name=\"kindlish_nav\">Kindle erakoa</string>\n    <string name=\"edge_nav\">Egde erakoa</string>\n    <string name=\"right_and_left_nav\">Ezkerra eta eskuma</string>\n    <string name=\"none\">Ezer ez</string>\n    <string name=\"browse\">Arakatu</string>\n    <string name=\"local_source_help_guide\">Iturri lokalen gida</string>\n    <string name=\"no_results_found\">Ez dira emaitzarik aurkitu</string>\n    <string name=\"local_source\">Iturri lokala</string>\n    <string name=\"latest\">Azkenak</string>\n    <string name=\"no_more_results\">Ez dago emaitza gehiagorik</string>\n    <string name=\"download_queue_size_warning\">Abisua: deskarga handiek iturriak motelagoak izatea eta/edo Mihon blokeatzea ekar dezakete</string>\n    <string name=\"creating_backup\">Babeskopia sortzen</string>\n    <string name=\"restore_duration\">%02d min, %02d seg</string>\n    <string name=\"add_tracking\">Gehitu jarraipena</string>\n    <string name=\"cache_delete_error\">Errore bat gertatu da cachea garbitzean</string>\n    <string name=\"backup_created\">Babeskopia sortu da</string>\n    <string name=\"restoring_backup\">Babeskopiatik berreskuratzen</string>\n    <string name=\"battery_optimization_disabled\">Bateriaren optimizazioa desgaituta dago dagoeneko</string>\n    <string name=\"cover_saved\">Azala gorde da</string>\n    <string name=\"cover_updated\">Azala eguneratu da</string>\n    <string name=\"clear_database_completed\">Sarrerak ezabatu dira</string>\n    <string name=\"migrate\">Migratu</string>\n    <string name=\"set_as_cover\">Ezarri azal gisa</string>\n    <string name=\"remove_from_library\">Kendu liburutegitik</string>\n    <string name=\"services\">Zerbitzuak</string>\n    <string name=\"check_for_updates\">Bilatu eguneraketak</string>\n    <string name=\"source_unsupported\">Iturria ez dago onartua</string>\n    <string name=\"restoring_backup_canceled\">Berreskuratzea bertan behera utzi da</string>\n    <string name=\"restore_miui_warning\">Baliteke babeskopiak/berreskuratzeak behar bezala ez funtzionatzea MIUI optimizazioa desgaituta badago.</string>\n    <string name=\"requires_app_restart\">Aplikazioa berrabiarazi behar da indarrean jartzeko</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instalatu eta abiarazi Shizuku luzapen instalatzaile gisa erabiltzeko.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ez dago martxan</string>\n    <string name=\"restore_completed\">Berreskuratu egin da</string>\n    <string name=\"cookies_cleared\">Cookieak garbitu dira</string>\n    <string name=\"dropped\">Alde batera utzia</string>\n    <string name=\"status\">Egoera</string>\n    <string name=\"untrusted_extension\">Fidagarria ez den luzapena</string>\n    <string name=\"obsolete_extension_message\">Luzapen hau jada ez dago eskuragarri.</string>\n    <string name=\"disabled\">Desgaitua</string>\n    <string name=\"invalid_backup_file\">Babeskopia fitxategi baliogabea</string>\n    <string name=\"label_backup\">Babeskopia egin eta leheneratu</string>\n    <string name=\"label_migration\">Migratu</string>\n    <string name=\"label_extensions\">Luzapenak</string>\n    <string name=\"label_extension_info\">Luzapenaren informazioa</string>\n    <string name=\"label_help\">Laguntza</string>\n    <string name=\"label_more\">Gehiago</string>\n    <string name=\"label_settings\">Ezarpenak</string>\n    <string name=\"label_download_queue\">Deskarga-ilara</string>\n    <string name=\"label_library\">Liburutegia</string>\n    <string name=\"label_recent_updates\">Eguneraketak</string>\n    <string name=\"label_recent_manga\">Historiala</string>\n    <string name=\"label_sources\">Iturriak</string>\n    <string name=\"error_saving_cover\">Errorea azala gordetzean</string>\n    <string name=\"error_sharing_cover\">Errorea azala partekatzean</string>\n    <string name=\"portrait\">Bertikala</string>\n    <string name=\"secure_screen\">Pantaila segurua</string>\n    <string name=\"hide_notification_content\">Ezkutatu jakinarazpenen edukia</string>\n    <string name=\"landscape\">Horizontala</string>\n    <string name=\"left_to_right_viewer\">Ezkerretik eskuinera</string>\n    <string name=\"right_to_left_viewer\">Eskuinetik ezkerrera</string>\n    <string name=\"vertical_viewer\">Bertikalki</string>\n    <string name=\"reading\">Irakurtzen</string>\n    <string name=\"on_hold\">Momentuz utzia</string>\n    <string name=\"plan_to_read\">Irakurtzeko asmoa dut</string>\n    <string name=\"paused\">Gelditurik</string>\n    <string name=\"score\">Puntuazioa</string>\n    <string name=\"backup_in_progress\">Babeskopia abian da dagoeneko</string>\n    <string name=\"channel_progress\">Aurrerapena</string>\n    <string name=\"logout\">Saioa itxi</string>\n    <string name=\"logout_success\">Saioa itxi da</string>\n    <string name=\"exclude\">Baztertu: %s</string>\n    <string name=\"ext_update_all\">Eguneratu guztiak</string>\n    <string name=\"ext_install\">Instalatu</string>\n    <string name=\"ext_pending\">Egiteke</string>\n    <string name=\"ext_downloading\">Deskargatzen</string>\n    <string name=\"ext_installing\">Instalatzen</string>\n    <string name=\"ext_nsfw_warning\">NSFW (18+) edukia izan dezake</string>\n    <string name=\"ext_installer_pref\">Instalatzailea</string>\n    <string name=\"pref_fullscreen\">Pantaila osoa</string>\n    <string name=\"pref_grayscale\">Gris-eskala</string>\n    <string name=\"pref_inverted_colors\">Alderantzikatua</string>\n    <string name=\"pref_color_filter_mode\">Kolore-iragazkia modu nahastuan</string>\n    <string name=\"filter_mode_lighten\">Sahiestu / Argitu</string>\n    <string name=\"filter_mode_darken\">Erre / Ilundu</string>\n    <string name=\"pref_viewer_type\">Irakurketa modu lehenetsia</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"scale_type_original_size\">Jatorrizko tamaina</string>\n    <string name=\"zoom_start_left\">Ezkerra</string>\n    <string name=\"pref_rotation_type\">Biraketa mota lehenetsia</string>\n    <string name=\"pref_webtoon_side_padding\">Alboko betegarria</string>\n    <string name=\"pref_always_show_chapter_transition\">Erakutsi beti kapituluaren trantsizioa</string>\n    <string name=\"last_read_chapter\">Azkenik irakurritako kapitulua</string>\n    <string name=\"pref_category_delete_chapters\">Ezabatu kapituluak</string>\n    <string name=\"fourth_to_last\">Atzetik hasita laugarren irakurritako kapitulua</string>\n    <string name=\"backup_restore_missing_trackers\">Saioa hasi gabeko jarraitzaileak:</string>\n    <string name=\"backup_choice\">Zeren babeskopia nahi duzu?</string>\n    <string name=\"restore_in_progress\">Berreskuratzea abian da</string>\n    <string name=\"restoring_backup_error\">Ezin izan da babeskopia berreskuratu</string>\n    <string name=\"backup_info\">Babeskopia automatikoak oso gomendagarriak dira. Kopiak beste leku batzuetan ere gorde beharko zenituzke.</string>\n    <string name=\"pref_clear_cookies\">Garbitu cookieak</string>\n    <string name=\"label_data\">Datuak</string>\n    <string name=\"pref_clear_chapter_cache\">Garbitu kapituluen cachea</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Garbitu kapituluen cachea aplikazioa ixtean</string>\n    <string name=\"clear_database_confirmation\">Ziur zaude? Kapitulu iraurriak eta liburutegikoak ez diren manga-en aurrerapenak galduko dira</string>\n    <string name=\"database_clean\">Datu-basea garbi</string>\n    <string name=\"pref_disable_battery_optimization\">Desgaitu bateriaren optimizazioa</string>\n    <string name=\"version\">Bertsioa</string>\n    <string name=\"website\">Webgunea</string>\n    <string name=\"licenses\">Open Source lizentziak</string>\n    <string name=\"privacy_policy\">Pribatutasun politika</string>\n    <string name=\"pref_acra_summary\">Edozein akats konpontzen laguntzen du. Ez da datu sentikorrik bidaliko</string>\n    <string name=\"label_downloaded_only\">Deskargatuak bakarrik</string>\n    <string name=\"pref_incognito_mode\">Ezkutuko modua</string>\n    <string name=\"pref_incognito_mode_summary\">Irakurketa historia gelditu egiten du</string>\n    <string name=\"downloaded_chapters\">Deskargatutako kapituluak</string>\n    <string name=\"last_used_source\">Azken erabilera</string>\n    <string name=\"pinned_sources\">Ainguratua</string>\n    <string name=\"no_pinned_sources\">Ez duzu iturri ainguraturik</string>\n    <string name=\"local_invalid_format\">Kapituluaren formatu baliogabea</string>\n    <string name=\"date\">Data</string>\n    <string name=\"unknown_author\">Egile ezezaguna</string>\n    <string name=\"unknown_status\">Egoera ezezaguna</string>\n    <string name=\"delete_downloads_for_manga\">Deskargatutako kapituluak ezabatu nahi dituzu?</string>\n    <string name=\"copied_to_clipboard\">Arbelean kopiatu da:\n\\n%1$s</string>\n    <string name=\"chapter_paused\">Gelditurik</string>\n    <string name=\"show_chapter_number\">Kapituluaren zenbakia</string>\n    <string name=\"download_unread\">Irakurri gabea</string>\n    <string name=\"manga_cover\">Azala</string>\n    <string name=\"set_chapter_settings_as_default\">Ezarri lehenetsia bezala</string>\n    <string name=\"error_no_match\">Ez da aurkitu</string>\n    <string name=\"chapter_progress\">%1$d orrialdea</string>\n    <string name=\"no_next_chapter\">Ez da hurrengo kapitulua aurkitu</string>\n    <string name=\"decode_image_error\">Irudia ezin izan da kargatu</string>\n    <string name=\"viewer\">Irakurketa modua</string>\n    <string name=\"transition_current\">Oraingoa:</string>\n    <string name=\"transition_previous\">Aurrekoa:</string>\n    <string name=\"page_list_empty_error\">Ez dira orrialderik aurkitu</string>\n    <string name=\"loader_not_implemented_error\">Ez da iturria aurkitu</string>\n    <string name=\"update_check_confirm\">Deskargatu</string>\n    <string name=\"update_check_notification_download_complete\">Deskarga bukatua</string>\n    <string name=\"download_notifier_title_error\">Errorea</string>\n    <string name=\"ext_installer_legacy\">Ondare</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"off\">Itzali</string>\n    <string name=\"pref_reader_navigation\">Nabigazioa</string>\n    <string name=\"color_filter_b_value\">U</string>\n    <string name=\"updated_version\">v%1$s-ra eguneratua</string>\n    <string name=\"login_success\">Saioa hasia</string>\n    <string name=\"logout_title\">Itxi saioa %1$s-n?</string>\n    <string name=\"manga_added_library\">Liburutegira gehitua</string>\n    <string name=\"confirm_delete_chapters\">Ziur hautatutako kapituluak ezabatu nahi dituzula?</string>\n    <string name=\"track_finished_reading_date\">Bukaera-data</string>\n    <string name=\"track_started_reading_date\">Hasiera-data</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Honek kapitulu honen irakurketa-data kenduko du. Ziur zaude?</string>\n    <string name=\"transition_next\">Hurrengoa:</string>\n    <string name=\"pref_category_for_this_series\">Argitalpen honetarako</string>\n    <string name=\"transition_finished\">Bukatua:</string>\n    <string name=\"transition_no_next\">Ez dago hurrengo kapitulurik</string>\n    <string name=\"transition_no_previous\">Ez dago aurreko kapitulurik</string>\n    <string name=\"copy\">Kopiatu</string>\n    <string name=\"update_check_eol\">Android bertsio hau jada ez da onartzen</string>\n    <string name=\"ext_obsolete\">Zaharkitua</string>\n    <string name=\"ext_uninstall\">Desinstalatu</string>\n    <string name=\"pref_show_page_number\">Erakutsi orrialdearen zenbakia</string>\n    <string name=\"in_library\">Liburutegian</string>\n    <string name=\"manga_info_expand\">Gehiago</string>\n    <string name=\"display_mode_chapter\">%1$s Kapitulua</string>\n    <string name=\"chapter_settings\">Kapituluaren ezarpenak</string>\n    <string name=\"track_status\">Egoera</string>\n    <string name=\"track_type\">Mota</string>\n    <string name=\"custom_filter\">Iragazki pertsonalizatua</string>\n    <string name=\"snack_categories_deleted\">Kategoriak ezabatuak</string>\n    <string name=\"dialog_with_checkbox_reset\">Berrezarri manga honen kapitulu guztiak</string>\n    <string name=\"file_select_cover\">Hautatu azaleko irudia</string>\n    <string name=\"update_check_no_new_updates\">Ez dago eguneraketarik</string>\n    <string name=\"information_cloudflare_bypass_failure\">Ezin izan da Cloudflare saihestu</string>\n    <string name=\"chapter_settings_updated\">Kapituluaren ezarpen lehenetsiak eguneratu dira</string>\n    <string name=\"download_notifier_downloader_title\">Deskargatzailea</string>\n    <string name=\"download_notifier_unknown_error\">Ezin izan da kapitulua deskargatu ustekabeko errore baten ondorioz</string>\n    <string name=\"download_notifier_no_network\">Ez dago sare-konexiorik erabilgarri</string>\n    <string name=\"channel_new_chapters\">Kapituluaren eguneraketak</string>\n    <string name=\"channel_app_updates\">Aplikazioen eguneraketak</string>\n    <string name=\"spen_next_page\">Hurrengo orrialdea</string>\n    <string name=\"channel_ext_updates\">Luzapenen eguneraketak</string>\n    <string name=\"filter_mode_screen\">Pantaila</string>\n    <string name=\"pref_custom_color_filter\">Kolore-iragazki pertsonalizatua</string>\n    <string name=\"rotation_type\">Biraketa mota</string>\n    <string name=\"rotation_force_landscape\">Horizontal blokeatua</string>\n    <string name=\"rotation_free\">Librea</string>\n    <string name=\"rotation_portrait\">Bertikala</string>\n    <string name=\"rotation_landscape\">Horizontala</string>\n    <string name=\"rotation_force_portrait\">Bertikal blokeatua</string>\n    <string name=\"pref_remove_after_marked_as_read\">Irakurria bezala eskuz markatu ondoren</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Baimendu laster-markadun kapituluak ezabatzea</string>\n    <string name=\"pref_remove_after_read\">Irakurri ondoren automatikoki ezabatu</string>\n    <string name=\"enhanced_services\">Zerbitzu hobetuak</string>\n    <string name=\"help_translate\">Lagundu itzultzen</string>\n    <string name=\"file_picker_error\">Ez da aurkitu fitxategiak hautatzeko aplikaziorik</string>\n    <string name=\"all\">Denak</string>\n    <string name=\"about_dont_kill_my_app\">Fabrikatzaile batzuek aplikazioen murrizketa gehigarriak dituzte, atzeko planoko zerbitzuak akabatzen dituztenak. Webgune honek informazio gehiago du nola konpondu jakiteko.</string>\n    <string name=\"untrusted_extension_message\">Luzapen hau fidagarria ez den ziurtagiri batekin sinatu zen eta ez zen aktibatu.\n\\n\n\\nLuzapen maltzur batek Mihon-n gordetako saio-hasierako kredentzialak irakur ditzake edo kode arbitrarioa exekutatu.\n\\n\n\\nZiurtagiri honetaz fidatzean, arrisku hauek onartzen dituzu.</string>\n    <string name=\"ext_untrusted\">Fidatu gabekoa</string>\n    <string name=\"pref_reader_theme\">Atzeko planoaren kolorea</string>\n    <string name=\"ext_update\">Eguneratu</string>\n    <string name=\"pref_custom_brightness\">Distira pertsonalizatua</string>\n    <string name=\"filter_mode_multiply\">Biderkatu</string>\n    <string name=\"creating_backup_error\">Babeskopia egiteak huts egin du</string>\n    <string name=\"theme_midnightdusk\">Gauerdiko ilunabarra</string>\n    <string name=\"ext_installed\">Instalatuak</string>\n    <string name=\"ext_app_info\">Aplikazioaren informazioa</string>\n    <string name=\"pref_page_transitions\">Animatu orrialdeen trantsizioak</string>\n    <string name=\"pref_show_reading_mode\">Erakutsi irakurketa modua</string>\n    <string name=\"gray_background\">Grisa</string>\n    <string name=\"transition_pages_error\">Ezin izan dira orriak kargatu: %1$s</string>\n    <string name=\"pref_clear_history\">Garbitu historia</string>\n    <string name=\"lock_with_biometrics\">Desblokeatzea eskatu</string>\n    <string name=\"default_category_summary\">Galdetu beti</string>\n    <string name=\"ext_install_service_notif\">Luzapena instalatzen…</string>\n    <string name=\"filter_mode_overlay\">Gainjarri</string>\n    <string name=\"white_background\">Zuria</string>\n    <string name=\"black_background\">Beltza</string>\n    <string name=\"nav_zone_next\">Hurrengoa</string>\n    <string name=\"pager_viewer\">Orrikaldekatua</string>\n    <string name=\"zoom_start_automatic\">Automatikoa</string>\n    <string name=\"pref_double_tap_anim_speed\">Sakaketa bikoitzaren animazioaren abiadura</string>\n    <string name=\"automatic_background\">Automatikoa</string>\n    <string name=\"nav_zone_prev\">Aurrekoa</string>\n    <string name=\"pref_viewer_nav\">Nabigazio-diseinua</string>\n    <string name=\"scale_type_stretch\">Luzatu</string>\n    <string name=\"scale_type_smart_fit\">Smart doiketa</string>\n    <string name=\"zoom_start_center\">Erdian</string>\n    <string name=\"double_tap_anim_speed_normal\">Normala</string>\n    <string name=\"double_tap_anim_speed_fast\">Azkar</string>\n    <string name=\"pref_category_reading\">Irakurtzen</string>\n    <string name=\"third_to_last\">Atzetik hasita hirugarren irakurritako kapitulua</string>\n    <string name=\"nav_zone_left\">Ezkerra</string>\n    <string name=\"vertical_plus_viewer\">Bertikalki etengabe</string>\n    <string name=\"pref_image_scale_type\">Eskala mota</string>\n    <string name=\"scale_type_fit_screen\">Doitu pantaila</string>\n    <string name=\"scale_type_fit_width\">Doitu zabalera</string>\n    <string name=\"scale_type_fit_height\">Doitu altuera</string>\n    <string name=\"pref_zoom_start\">Zoomaren hasierako posizioa</string>\n    <string name=\"zoom_start_right\">Eskuina</string>\n    <string name=\"double_tap_anim_speed_0\">Animaziorik ez</string>\n    <string name=\"pref_category_reading_mode\">Irakurketa modua</string>\n    <string name=\"label_network\">Sarea</string>\n    <string name=\"pref_remove_exclude_categories\">Baztertutako kategoriak</string>\n    <string name=\"second_to_last\">Azkenaurreko irakurritako kapitulua</string>\n    <string name=\"fifth_to_last\">Atzetik hasita bosgarren irakurritako kapitulua</string>\n    <string name=\"pref_category_auto_download\">Deskarga automatikoa</string>\n    <string name=\"pref_clear_database\">Garbitu datu-basea</string>\n    <string name=\"pref_dump_crash_logs_summary\">Erroreen erregistroak fitxategi batean gordetzen ditu garatzaileekin partekatzeko</string>\n    <string name=\"updating_category\">Kategoria eguneratzen</string>\n    <string name=\"tabs_header\">Fitxak</string>\n    <string name=\"sort_by_number\">Kapitulu zenbakiaren arabera</string>\n    <string name=\"sort_by_upload_date\">Igoera dataren arabera</string>\n    <string name=\"confirm_set_image_as_cover\">Irudi hau azaleko arte gisa erabili?</string>\n    <string name=\"download_insufficient_space\">Ezin izan dira kapituluak deskargatu memorian leku gutxi dagoelako</string>\n    <string name=\"notification_size_warning\">Eguneratze handiek bateriaren erabilera areagotzea eta iturriak motelagoak izatea eragin dezakete</string>\n    <string name=\"download_notifier_download_paused\">Deskarga pausatu da</string>\n    <string name=\"pref_low\">Baxua</string>\n    <string name=\"pref_lowest\">Baxuena</string>\n    <string name=\"pref_download_new\">Deskargatu kapitulu berriak</string>\n    <string name=\"update_check_notification_update_available\">Bertsio berria eskuragarri!</string>\n    <string name=\"pref_create_backup_summ\">Liburutegia berreskuratzeko erabil daiteke</string>\n    <string name=\"downloaded_only_summary\">Zure liburutegiko manga guztiak iragazten ditu</string>\n    <string name=\"pref_dns_over_https\">DNS HTTPS bidez (DoH)</string>\n    <string name=\"pref_enable_acra\">Bidali hutsegite-txostenak</string>\n    <string name=\"notification_incognito_text\">Desgaitu ezkutuko modua</string>\n    <string name=\"used_cache\">Erabilia: %1$s</string>\n    <string name=\"manga_from_library\">Liburutegiko manga</string>\n    <string name=\"clipboard_copy_error\">Ezin izan da arbelean kopiatu</string>\n    <string name=\"manga_download\">Deskargatu</string>\n    <string name=\"add_to_library\">Gehitu liburutegira</string>\n    <string name=\"myanimelist_relogin\">Mesedez, hasi saioa berriro MAL-en</string>\n    <string name=\"show_title\">Iturriaren izenburua</string>\n    <string name=\"sort_by_source\">Iturriaren arabera</string>\n    <string name=\"confirm_set_chapter_settings\">Ziur ezarpen hauek lehenetsi gisa gorde nahi dituzula?</string>\n    <string name=\"information_webview_outdated\">Mesedez, eguneratu WebView aplikazioa bateragarritasun hobea izateko</string>\n    <string name=\"channel_complete\">Bukatua</string>\n    <string name=\"error_category_exists\">Izen hori daukan kategoria bat badago dagoeneko!</string>\n    <string name=\"update_check_notification_download_in_progress\">Deskargatzen…</string>\n    <string name=\"update_check_notification_download_error\">Errorea deskargan</string>\n    <string name=\"migration_selection_prompt\">Hautatu migratzeko iturri bat</string>\n    <string name=\"notification_first_add_to_library\">Mesedez, gehitu manga zure liburutegian hau egin aurretik</string>\n    <string name=\"transition_pages_loading\">Orriak kargatzen…</string>\n    <string name=\"channel_common\">Arrunta</string>\n    <string name=\"information_webview_required\">WebView beharrezkoa da Mihon-rentzat</string>\n    <string name=\"download_notifier_text_only_wifi\">Ez dago Wi-Fi konexiorik erabilgarri</string>\n    <string name=\"label_default\">Lehenetsia</string>\n    <string name=\"track\">Jarraipena</string>\n    <string name=\"action_display_mode\">Bistaratze-modua</string>\n    <string name=\"action_display\">Bistaratu</string>\n    <string name=\"action_display_grid\">Lauki-sare trinkoa</string>\n    <string name=\"action_display_comfortable_grid\">Lauki-sare erosoa</string>\n    <string name=\"action_display_list\">Zerrendatu</string>\n    <string name=\"action_display_download_badge\">Deskargatutako kapituluak</string>\n    <string name=\"action_display_show_number_of_items\">Erakutsi elementu kantitatea</string>\n    <string name=\"action_display_show_tabs\">Erakutsi kategorien fitxak</string>\n    <string name=\"pref_category_about\">Honi buruz</string>\n    <string name=\"pref_category_theme\">Gaia</string>\n    <string name=\"pref_dump_crash_logs\">Sortu erroreen erregistroak</string>\n    <string name=\"notification_chapters_single\">%1$s Kapitulua</string>\n    <string name=\"notification_chapters_multiple\">%1$s Kapituluak</string>\n    <string name=\"pref_keep_screen_on\">Mantendu pantaila piztuta</string>\n    <string name=\"pref_skip_read_chapters\">Saltatu irakurriak bezala markatutako kapituluak</string>\n    <string name=\"pref_create_folder_per_manga\">Gorde orrialdeak karpeta ezberdinetan</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Sortu karpetak manga izenburuaren arabera</string>\n    <string name=\"pref_high\">Altua</string>\n    <string name=\"pref_skip_filtered_chapters\">Saltatu iragazitako kapituluak</string>\n    <string name=\"pref_read_with_volume_keys\">Bolumen-teklak</string>\n    <string name=\"whats_new\">Zer dago berri</string>\n    <string name=\"pref_create_backup\">Sortu babeskopia</string>\n    <string name=\"backup_restore_missing_sources\">Falta diren iturriak:</string>\n    <string name=\"backup_restore_content_full\">Babeskopia fitxategiko datuak berreskuratu egingo dira.\n\\n\n\\nFalta diren luzapenak instalatu eta jarraipen-zerbitzuetan saioa hasi beharko duzu ondoren horiek erabiltzeko.</string>\n    <string name=\"chapter_downloading_progress\">Deskargatzen (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Errorea</string>\n    <string name=\"also_set_chapter_settings_for_library\">Nire liburutegiko manga guztietan ere aplikatu</string>\n    <string name=\"manga_removed_library\">Liburutegitik kendua</string>\n    <string name=\"manga_info_collapse\">Gutxiago</string>\n    <string name=\"source_not_installed\">Iturria ez dago instalatuta: %1$s</string>\n    <string name=\"snack_add_to_library\">Manga liburutegira gehitu?</string>\n    <string name=\"file_select_backup\">Hautatu babeskopia fitxategia</string>\n    <string name=\"notification_cover_update_failed\">Ezin izan da azala eguneratu</string>\n    <string name=\"action_sort_date_added\">Gehiketa data</string>\n    <string name=\"action_search\">Bilatu</string>\n    <string name=\"action_search_settings\">Bilatu ezarpenak</string>\n    <string name=\"action_global_search\">Bilaketa globala</string>\n    <string name=\"action_select_all\">Hautatu dena</string>\n    <string name=\"action_select_inverse\">Hautatu alderantzizkoa</string>\n    <string name=\"action_mark_as_read\">Markatu irakurria bezala</string>\n    <string name=\"action_mark_as_unread\">Markatu irakurri gabea bezala</string>\n    <string name=\"action_mark_previous_as_read\">Markatu aurrekoak irakurriak bezala</string>\n    <string name=\"action_download\">Deskargatu</string>\n    <string name=\"action_bookmark\">Jarri laster-marka kapituluari</string>\n    <string name=\"cancel_all_for_series\">Utzi alde batera argitalpen honetako guztiak</string>\n    <string name=\"action_remove_bookmark\">Kendu laster-marka kapituluari</string>\n    <string name=\"action_delete\">Ezabatu</string>\n    <string name=\"action_update_library\">Eguneratu liburutegia</string>\n    <string name=\"action_enable_all\">Gaitu guztiak</string>\n    <string name=\"action_disable_all\">Desgaitu guztiak</string>\n    <string name=\"action_edit\">Editatu</string>\n    <string name=\"action_add\">Gehitu</string>\n    <string name=\"action_add_category\">Gehitu kategoria</string>\n    <string name=\"action_edit_categories\">Editatu kategoria</string>\n    <string name=\"action_rename_category\">Izena aldatu kategoriari</string>\n    <string name=\"action_move_category\">Kategoriak ezarri</string>\n    <string name=\"action_edit_cover\">Editatu azala</string>\n    <string name=\"action_view_chapters\">Ikusi kapituluak</string>\n    <string name=\"action_pause\">Pausatu</string>\n    <string name=\"action_previous_chapter\">Aurreko kapitulua</string>\n    <string name=\"action_next_chapter\">Hurrengo kapitulua</string>\n    <string name=\"action_retry\">Saiatu berriro</string>\n    <string name=\"action_remove\">Kendu</string>\n    <string name=\"action_start\">Hasi</string>\n    <string name=\"action_resume\">Jarraitu</string>\n    <string name=\"action_open_in_browser\">Nabigatzailean ireki</string>\n    <string name=\"action_open_in_web_view\">Ireki WebView-n</string>\n    <string name=\"action_migrate\">Migratu</string>\n    <string name=\"action_disable\">Desgaitu</string>\n    <string name=\"action_pin\">Ainguratu</string>\n    <string name=\"action_unpin\">Aingura kendu</string>\n    <string name=\"action_cancel\">Ezeztatu</string>\n    <string name=\"action_cancel_all\">Utzi guztiak alde batera</string>\n    <string name=\"action_sort\">Ordenatu</string>\n    <string name=\"action_order_by_upload_date\">Igoera dataren arabera</string>\n    <string name=\"action_order_by_chapter_number\">Kapitulu zenbakiaren arabera</string>\n    <string name=\"theme_system\">Sistemarena erabili</string>\n    <string name=\"theme_light\">Itzali</string>\n    <string name=\"theme_dark\">Piztu</string>\n    <string name=\"pref_app_theme\">Aplikazioaren gaia</string>\n    <string name=\"theme_monet\">Dinamikoa</string>\n    <string name=\"theme_greenapple\">Sagar Berdea</string>\n    <string name=\"pref_date_format\">Dataren formatua</string>\n    <string name=\"pref_manage_notifications\">Kudeatu jakinarazpenak</string>\n    <string name=\"pref_category_security\">Segurtasuna</string>\n    <string name=\"lock_always\">Beti</string>\n    <string name=\"secure_screen_summary\">Pantaila seguruak aplikazioaren edukia ezkutatzen du aplikazioak aldatzean, eta pantaila-argazkiak blokeatzen ditu</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) iturriak</string>\n    <string name=\"pref_show_nsfw_source\">Erakutsi iturrien eta luzapenen zerrendetan</string>\n    <string name=\"parental_controls_info\">Honek ez du eragozten ofizialak ez diren edo oker markatutako luzapenek NSFW (18+) edukia aplikazioan erakustea.</string>\n    <string name=\"relative_time_today\">Gaur</string>\n    <string name=\"pref_category_display\">Bistaratu</string>\n    <string name=\"pref_library_columns\">Errenkada bakoitzeko elementu kopurua</string>\n    <string name=\"pref_category_library_update\">Eguneraketa globalak</string>\n    <string name=\"pref_library_update_interval\">Eguneratze automatikoak</string>\n    <string name=\"pref_update_only_completely_read\">Irakurri gabeko kapituluak ditu</string>\n    <string name=\"include\">Sartu: %s</string>\n    <string name=\"color_filter_r_value\">G</string>\n    <string name=\"other_source\">Besteak</string>\n    <string name=\"action_global_search_hint\">Bilaketa globala…</string>\n    <string name=\"clear_history_completed\">Historia ezabatu da</string>\n    <string name=\"clear_history_confirmation\">Ziur zaude? Historia guztia galduko da.</string>\n    <string name=\"migration_help_guide\">Iturrien migrazio gida</string>\n    <string name=\"migration_dialog_what_to_include\">Hautatu sartu nahi dituzun datuak</string>\n    <string name=\"notification_new_chapters\">Kapitulu berriak aurkituak</string>\n    <string name=\"information_no_recent_manga\">Ez da ezer irakurri azkenaldian</string>\n    <string name=\"information_no_downloads\">Deskargarik ez</string>\n    <string name=\"information_no_recent\">Ez dago azkenaldiko eguneraketarik</string>\n    <string name=\"information_empty_library\">Zure liburutegia hutsik dago</string>\n    <string name=\"information_empty_category\">Ez daukazu kategoriarik. Sakatu gehiketa botoia zure liburutegia antolatzeko bat sortzeko.</string>\n    <string name=\"spen_previous_page\">Aurreko orrialdea</string>\n    <string name=\"on\">Piztu</string>\n    <string name=\"action_newest\">Berriena</string>\n    <string name=\"action_oldest\">Zaharrena</string>\n    <string name=\"action_asc\">Gorantz</string>\n    <string name=\"action_desc\">Beherantz</string>\n    <string name=\"lock_never\">Inoiz ere ez</string>\n    <string name=\"pref_crop_borders\">Moztu ertzak</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Alderantzikatu bolumen-teklak</string>\n    <string name=\"pref_read_with_tapping_inverted\">Sakatzea alderantzikatu</string>\n    <string name=\"tapping_inverted_none\">Ezer ez</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontala</string>\n    <string name=\"tapping_inverted_vertical\">Bertikala</string>\n    <string name=\"nav_zone_right\">Eskuina</string>\n    <string name=\"color_filter_g_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_highest\">Altuena</string>\n    <string name=\"pref_restore_backup\">Babeskopia erabili</string>\n    <string name=\"pref_restore_backup_summ\">Berreskuratu liburutegia babeskopia fitxategitik</string>\n    <string name=\"pref_backup_interval\">Babeskopien maiztasuna</string>\n    <string name=\"action_sort_alpha\">Alfabetikoki</string>\n    <string name=\"label_warning\">Oharra</string>\n    <string name=\"confirm_lock_change\">Autentifikatu aldaketa berresteko</string>\n    <string name=\"action_settings\">Ezarpenak</string>\n    <string name=\"action_menu\">Menua</string>\n    <string name=\"action_filter\">Iragazi</string>\n    <string name=\"action_filter_bookmarked\">Orri-markatzailea jarria</string>\n    <string name=\"action_filter_tracked\">Jarraitua</string>\n    <string name=\"action_filter_unread\">Irakurri gabea</string>\n    <string name=\"action_filter_empty\">Kendu iragazkia</string>\n    <string name=\"action_sort_count\">Mangak guztira</string>\n    <string name=\"action_sort_total\">Kapituluak guztira</string>\n    <string name=\"action_sort_last_read\">Azken aldiz irakurria</string>\n    <string name=\"action_sort_latest_chapter\">Azken kapitulua</string>\n    <string name=\"action_sort_chapter_fetch_date\">Eskuratze data</string>\n    <string name=\"action_move_to_top\">Mugitu gora</string>\n    <string name=\"action_move_to_bottom\">Mugitu behera</string>\n    <string name=\"action_install\">Instalatu</string>\n    <string name=\"action_share\">Partekatu</string>\n    <string name=\"action_save\">Gorde</string>\n    <string name=\"action_reset\">Erreseteatu</string>\n    <string name=\"action_undo\">Desegin</string>\n    <string name=\"action_open_log\">Ireki erregistroa</string>\n    <string name=\"action_restore\">Berrezarri</string>\n    <string name=\"action_webview_back\">Atzera</string>\n    <string name=\"action_webview_forward\">Aurrera</string>\n    <string name=\"action_webview_refresh\">Freskatu</string>\n    <string name=\"action_start_downloading_now\">Hasi deskargatzen orain</string>\n    <string name=\"app_not_available\">Aplikazioa ez dago erabilgarri</string>\n    <string name=\"pref_category_general\">Orokorra</string>\n    <string name=\"pref_category_appearance\">Itxura</string>\n    <string name=\"pref_category_library\">Liburutegia</string>\n    <string name=\"pref_category_reader\">Irakurgailua</string>\n    <string name=\"pref_category_downloads\">Deskargak</string>\n    <string name=\"pref_category_tracking\">Jarraipena</string>\n    <string name=\"pref_category_advanced\">Aurreratua</string>\n    <string name=\"action_display_language_badge\">Hizkuntza</string>\n    <string name=\"theme_strawberrydaiquiri\">Marrubi Daiquiri-a</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_tealturquoise\">Urdin-berdea eta turkesa</string>\n    <string name=\"theme_yinyang\">Yin eta Yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Beltz hutseko modu iluna</string>\n    <string name=\"update_never\">Itzali</string>\n    <string name=\"update_6hour\">6 orduro</string>\n    <string name=\"update_12hour\">12 orduro</string>\n    <string name=\"update_24hour\">Egunero</string>\n    <string name=\"update_48hour\">2 egunean behin</string>\n    <string name=\"ext_trust\">Fidagarritzat jo</string>\n    <string name=\"tapping_inverted_both\">Biak</string>\n    <string name=\"pref_reader_actions\">Ekintzak</string>\n    <string name=\"pref_read_with_long_tap\">Erakutsi sakaketa luzean</string>\n    <string name=\"login_title\">Hasi saioa %1$s-n</string>\n    <string name=\"username\">Erabiltzaile-izena</string>\n    <string name=\"email\">Posta elektroniko helbidea</string>\n    <string name=\"password\">Pasahitza</string>\n    <string name=\"login\">Hasi saioa</string>\n    <string name=\"action_global_search_query\">Bilatu \\\"%1$s\\\" toki guztietan</string>\n    <string name=\"action_show_errors\">Sakatu xehetasunak ikusteko</string>\n    <string name=\"update_72hour\">3 egunean behin</string>\n    <string name=\"update_weekly\">Astero</string>\n    <string name=\"connected_to_wifi\">Wi-Fi bidez bakarrik</string>\n    <string name=\"restrictions\">Mugaketak: %s</string>\n    <string name=\"pref_update_only_non_completed\">Argitalpen bukatua al da</string>\n    <string name=\"pref_library_update_refresh_metadata\">Freskatu metadatuak automatikoki</string>\n    <string name=\"invalid_backup_file_missing_manga\">Babeskopiak ez du mangarik.</string>\n    <string name=\"manga_tracking_tab\">Jarraipena</string>\n    <string name=\"repeating\">Berrirakurtzen</string>\n    <string name=\"pref_show_reading_mode_summary\">Erakutsi erabilitako irakurketa modua laburki irakurlea irekitzen denean</string>\n    <string name=\"tracking_guide\">Jarraipen gida</string>\n    <string name=\"pref_auto_update_manga_sync\">Eguneratu aurrerapena irakurri ondoren</string>\n    <string name=\"action_track\">Jarraitu</string>\n    <string name=\"cache_deleted\">Cachea garbitu da. %1$d fitxategi ezabatu dira</string>\n    <string name=\"label_background_activity\">Atzeko planoko ekintzak</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Liburutegiaren eguneraketak eta babeskopiak atzeko planoan egiten laguntzen du</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Ezin izan dira gailuaren ezarpenak ireki</string>\n    <string name=\"local_filter_order_by\">Ordenatu honen arabera</string>\n    <string name=\"ext_updates_pending\">Eguneraketak egiteke</string>\n    <string name=\"pref_cutout_short\">Erakutsi edukia eremu ebakian</string>\n    <string name=\"download_queue_error\">Ezin izan dira kapituluak deskargatu. Berriro saia zaitezke deskargen atalean</string>\n    <string name=\"save_chapter_as_cbz\">Gorde CBZ artxibo gisa</string>\n    <string name=\"pref_refresh_library_covers\">Eguneratu liburutegiko manga azalak</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet interfazea</string>\n    <string name=\"share_page_info\">%1$s: %2$s, %3$d orrialdea</string>\n    <string name=\"information_empty_category_dialog\">Oraindik ez duzu kategoriarik sortu.</string>\n    <string name=\"extension_api_error\">Ezin izan da luzapenen zerrenda lortu</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Bilatu azal eta xehetasun berriak liburutegia eguneratzean</string>\n    <string name=\"pref_library_update_categories_details\">Baztertutako kategorietako mangak ez dira eguneratuko, sarturiko kategorietan egon arren.</string>\n    <string name=\"pref_hide_threshold\">Pantaila mugitzean menua ezkutatzeko sentikortasuna</string>\n    <string name=\"clear_database_source_item_count\">Liburutegian ez dauden %1$d manga datubasean</string>\n    <string name=\"pref_verbose_logging\">Erregistroaren bertsio luzea</string>\n    <string name=\"pref_verbose_logging_summary\">Gorde bertsio luzedun erregistroak sistemaren erregistroan (aplikazioaren errendimentua murrizten du)</string>\n    <string name=\"recent_manga_time\">Kap. %1$s-%2$s</string>\n    <string name=\"categorized_display_settings\">Kategoria bakoitzeko ordenatze eta bistaratze ezarpenak</string>\n    <string name=\"pref_download_new_categories_details\">Baztertutako kategorietako mangak ez dira deskargatuko, sarturiko kategorietan egon arren.</string>\n    <string name=\"cancelled\">Bertan behera utzia</string>\n    <string name=\"on_hiatus\">Etenaldian</string>\n    <string name=\"library_errors_help\">Liburutegi eguneraketen akatsak nola konpondu jakiteko, ikusi %1$s</string>\n    <string name=\"action_display_local_badge\">Manga lokala</string>\n    <string name=\"notification_chapters_single_and_more\">%1$s kapitulua eta %2$d gehiago</string>\n    <string name=\"tracking_info\">Norabide bakarreko sinkronizazioa jarraipen-zerbitzuetan kapituluaren aurrerapena eguneratzeko. Konfiguratu manga bakoitzaren jarraipena haien jarraipen botoia erabilita.</string>\n    <string name=\"pref_show_navigation_mode\">Nabigazio-diseinuaren geruza erakutsi</string>\n    <string name=\"pref_show_navigation_mode_summary\">Erakutsi ukipen-zonak irakurgailua irekitzen denean</string>\n    <string name=\"enhanced_tracking_info\">Iturri zehatzetarako ezaugarri hobetuak eskaintzen dituzten zerbitzuak. Mangen jarraipena automatikoki egiten da zure liburutegira gehitzen direnean.</string>\n    <string name=\"pref_clear_database_summary\">Ezabatu zure liburutegian gordeta ez dauden mangen historia</string>\n    <string name=\"publishing_finished\">Argitarapena amaitua</string>\n    <string name=\"pref_dual_page_split\">Orrialde biko zatiketa</string>\n    <string name=\"pref_dual_page_invert\">Alderantzikatu orrialde bikoitzeko zatiketa</string>\n    <string name=\"pref_dual_page_invert_summary\">Orrialde bikoitzeko zatiketaren kokapena irakurketa noranzkoarekin bat ez badator</string>\n    <string name=\"pref_library_update_restriction\">Eguneraketa automatikoentzako gailuaren murrizketak</string>\n    <string name=\"action_show_manga\">Manga erakutsi</string>\n    <string name=\"skipped_reason_not_caught_up\">Saltatu egin da irakurri gabeko kapituluak daudelako</string>\n    <string name=\"pref_update_only_started\">Kapitulurik irakurri gabe</string>\n    <string name=\"skipped_reason_completed\">Saltatu egin da seriea bukatua dagoelako</string>\n    <string name=\"skipped_reason_not_started\">Saltatua ez daudelako irakurritako kapitulurik</string>\n    <string name=\"ext_info_version\">Bertsioa</string>\n    <string name=\"multi_lang\">Multi</string>\n    <string name=\"delete_category\">Ezabatu kategoria</string>\n    <string name=\"action_close\">Itxi</string>\n    <string name=\"pref_app_language\">App hizkuntza</string>\n    <string name=\"ext_info_language\">Hizkuntza</string>\n    <string name=\"action_search_hint\">Bilatu…</string>\n    <string name=\"delete_category_confirmation\">\\\"%s\\\" kategoria ezabatu nahi duzu?</string>\n    <string name=\"action_remove_everything\">Guztia kendu</string>\n    <string name=\"label_stats\">Estatistikak</string>\n    <string name=\"label_started\">Hasia</string>\n    <string name=\"label_local\">Lokala</string>\n    <string name=\"label_downloaded\">Deskargatuak</string>\n    <string name=\"action_copy_to_clipboard\">Kopiatu arbelera</string>\n    <string name=\"action_not_now\">Orain ez</string>\n    <string name=\"delete_downloaded\">Ezabatu deskargatuak</string>\n    <string name=\"onboarding_storage_action_select\">Aukeratu karpeta bat</string>\n    <string name=\"action_apply\">Ezarri</string>\n    <string name=\"onboarding_storage_selection_required\">Karpeta bat aukeratu behar da</string>\n    <string name=\"onboarding_permission_notifications\">Notifikazioetarako baimena</string>\n    <string name=\"onboarding_permission_install_apps\">Aplikazioak instalatzeko baimena</string>\n    <string name=\"onboarding_heading\">Ongi etorri!</string>\n    <string name=\"action_update_category\">Kategoria eguneratu</string>\n    <string name=\"action_menu_overflow_description\">Aukera gehiago</string>\n    <string name=\"onboarding_guides_returning_user\">%s erabili duzu dagoeneko?</string>\n    <string name=\"selected\">Aukeratuak</string>\n    <string name=\"not_selected\">Aukeratu gabeak</string>\n    <string name=\"onboarding_action_next\">Hurrengoa</string>\n    <string name=\"action_bar_up_description\">Nabigatu gora</string>\n    <string name=\"action_display_show_continue_reading_button\">Jarraitu irakurtzen botoia</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"reading_list\">Irakurketa zerrenda</string>\n    <string name=\"unfinished_list\">Bukatu gabeko zerrenda</string>\n    <string name=\"action_set_interval\">Ezarri denbora-bitartea</string>\n    <string name=\"label_data_storage\">Datu eta memoria</string>\n    <string name=\"action_sort_last_manga_update\">Azkenengo egunearatze egiaztapena</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fa/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">آپدیت برای یک افرونه موجود است</item>\n        <item quantity=\"other\">آپدیت برای %d افرونه موجود است</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">قسمت های %1$s و 1 قسمت دیگر</item>\n        <item quantity=\"other\">‬قسمت های %1$s و %2$d قسمت دیگر‬</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">1 قسمت جدید</item>\n        <item quantity=\"other\">%1$d قسمت جدید</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">برای ۱ مانگا</item>\n        <item quantity=\"other\">برای %d مانگا</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d دسته</item>\n        <item quantity=\"other\">%d دسته</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">بعد از %1$s دقیقه</item>\n        <item quantity=\"other\">بعد از %1$s دقیقه</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">۱ عدد باقی مانده</item>\n        <item quantity=\"other\">%1$s عدد باقی مانده</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">در %1$s با %2$s خطا انجام شد</item>\n        <item quantity=\"other\">در %1$s با %2$s خطا انجام شد</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">۱ ردیاب</item>\n        <item quantity=\"other\">%d ردیاب</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">1 قسمت</item>\n        <item quantity=\"other\">%1$s قسمت</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">1 قسمت جا افتاده است</item>\n        <item quantity=\"other\">%d قسمت جا افتاده است</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">دیروز</item>\n        <item quantity=\"other\">%1$d روز پیش</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">قسمت خوانده نشده بعدی</item>\n        <item quantity=\"other\">%d قسمت خوانده نشده بعدی</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">قسمت بعدی</item>\n        <item quantity=\"other\">%d قسمت بعدی</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s قسمت گم شده</item>\n        <item quantity=\"other\">%1$s قسمت گم شده</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 روز</item>\n        <item quantity=\"other\">%d روز</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fa/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"update_check_notification_update_available\">نسخه جدید موجود است!</string>\n    <string name=\"update_check_notification_download_error\">خطا در دانلود</string>\n    <string name=\"update_check_notification_download_complete\">دانلود کامل شد</string>\n    <string name=\"update_check_notification_download_in_progress\">در حال دانلود…</string>\n    <string name=\"update_check_no_new_updates\">آپدیت جدیدی موجود نیست</string>\n    <string name=\"update_check_confirm\">دانلود</string>\n    <string name=\"file_select_backup\">فایل پشتیبان را انتخاب کنید</string>\n    <string name=\"file_select_cover\">عکس روی جلد را انتخاب کنید</string>\n    <string name=\"notification_first_add_to_library\">لطفا قبل این کار مانگای موردنظر را به کتابخانه اضافه کنید</string>\n    <string name=\"notification_cover_update_failed\">آپدیت عکس روی جلد با خطا مواجه شد</string>\n    <string name=\"notification_chapters_multiple\">قسمت های %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">قسمت %1$s و %2$d قسمت دیگر</string>\n    <string name=\"notification_chapters_single\">قسمت %1$s</string>\n    <string name=\"notification_new_chapters\">قسمت‌های جدید پیدا شدند</string>\n    <string name=\"download_queue_error\">دانلود قسمت ها با خطا مواجه شد. با مراجعه به بخش دانلودها می توانید دوباره تلاش کنید</string>\n    <string name=\"copy\">کپی</string>\n    <string name=\"migrate\">تغییر منبع</string>\n    <string name=\"migration_selection_prompt\">منبعی که میخواهید به آن منتقل شود را انتخاب کنید</string>\n    <string name=\"migration_dialog_what_to_include\">اطلاعاتی که می‌خواهید منتقل شود را انتخاب کنید</string>\n    <string name=\"recent_manga_time\">قسمت %1$s - %2$s</string>\n    <string name=\"updating_library\">درحال آپدیت کتابخانه</string>\n    <string name=\"page_list_empty_error\">صفحه ای یافت نشد</string>\n    <string name=\"transition_pages_error\">لود صفحات با خطا مواجه شد: %1$s</string>\n    <string name=\"transition_pages_loading\">درحال لود صفحات…</string>\n    <string name=\"transition_no_previous\">قسمت قبلی وجود ندارد</string>\n    <string name=\"transition_no_next\">قسمت بعدی وجود ندارد</string>\n    <string name=\"transition_previous\">قبلی:</string>\n    <string name=\"transition_next\">بعدی:</string>\n    <string name=\"transition_current\">فعلی:</string>\n    <string name=\"transition_finished\">تمام شده:</string>\n    <string name=\"viewer\">حالت خواندن</string>\n    <string name=\"confirm_set_image_as_cover\">این عکس، به عنوان عکس روی جلد تنظیم شود؟</string>\n    <string name=\"no_next_chapter\">قسمت بعدی یافت نشد</string>\n    <string name=\"chapter_progress\">صفحه: %1$d</string>\n    <string name=\"cover_updated\">عکس روی جلد بروزرسانی شد</string>\n    <string name=\"set_as_cover\">تنظیم به عنوان عکس روی جلد</string>\n    <string name=\"custom_filter\">فیلتر سفارشی</string>\n    <string name=\"picture_saved\">عکس ذخیره شد</string>\n    <string name=\"dialog_with_checkbox_reset\">ریست اطلاعات همه قسمت های این مانگا</string>\n    <string name=\"dialog_with_checkbox_remove_description\">با این کار تاریخ خواندن این قسمت حذف می شود. مطمئنید؟</string>\n    <string name=\"snack_categories_deleted\">دسته بندی ها حذف شدند</string>\n    <string name=\"error_category_exists\">دسته بندی با این نام قبلا ساخته شده است!</string>\n    <string name=\"track_type\">نوع</string>\n    <string name=\"track_status\">وضعیت</string>\n    <string name=\"status\">وضعیت</string>\n    <string name=\"title\">عنوان</string>\n    <string name=\"score\">امتیاز</string>\n    <string name=\"repeating\">در حال بازخوانی(Rereading)</string>\n    <string name=\"paused\">متوقف شده(Paused)</string>\n    <string name=\"on_hold\">نگه داشته شده(On hold)</string>\n    <string name=\"dropped\">رها شده (Dropped)</string>\n    <string name=\"completed\">تکمیل شده(Completed)</string>\n    <string name=\"reading\">درحال خواندن(Reading)</string>\n    <string name=\"add_tracking\">اضافه کردن ردیابی</string>\n    <string name=\"manga_tracking_tab\">ردیابی</string>\n    <string name=\"confirm_delete_chapters\">آیا مطمئنید که می خواهید قسمت های انتخاب شده را حذف کنید؟</string>\n    <string name=\"download_unread\">خوانده نشده</string>\n    <string name=\"manga_download\">دانلود شود</string>\n    <string name=\"sort_by_upload_date\">بر اساس تاریخ آپلود</string>\n    <string name=\"pref_cutout_short\">نمایش محتوا در منطقه برش خورده</string>\n    <string name=\"track\">ردیابی</string>\n    <string name=\"sort_by_source\">بر اساس عنوان منبع</string>\n    <string name=\"sort_by_number\">بر اساس شماره قسمت</string>\n    <string name=\"show_chapter_number\">شماره قسمت</string>\n    <string name=\"show_title\">عنوان منبع</string>\n    <string name=\"chapter_paused\">متوقف</string>\n    <string name=\"chapter_error\">خطا</string>\n    <string name=\"chapter_downloading_progress\">درحال بارگیری (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">قسمت %1$s</string>\n    <string name=\"snack_add_to_library\">مانگا به کتابخانه اضافه شود؟</string>\n    <string name=\"source_not_installed\">منبع نصب نشده است: %1$s</string>\n    <string name=\"copied_to_clipboard\">کپی شد:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">قسمتهای بارگیری شده را نیز حذف شوند؟</string>\n    <string name=\"manga_info_collapse\">نمایش اطلاعات کمتر</string>\n    <string name=\"manga_info_expand\">نمایش اطلاعات بیشتر</string>\n    <string name=\"manga_removed_library\">از کتابخانه حذف شد</string>\n    <string name=\"manga_added_library\">به کتابخانه اضافه شد</string>\n    <string name=\"remove_from_library\">حذف از کتابخانه</string>\n    <string name=\"in_library\">در کتابخانه</string>\n    <string name=\"tracking_info\">برای به روز رسانی وضعیت پیشرفت قسمت ها، در سایت های خدمات ردیابی، همگام سازی یک طرفه انجام دهید. برای ردیابی هر داده از تب ردیابی اقدام کنید.</string>\n    <string name=\"webtoon_viewer\">وب تون(Webtoon)</string>\n    <string name=\"filter_mode_darken\">Burn / Darken</string>\n    <string name=\"filter_mode_lighten\">Dodge / Lighten</string>\n    <string name=\"update_12hour\">هر ۱۲ ساعت یکبار</string>\n    <string name=\"action_move_category\">انتخاب دسته بندی</string>\n    <string name=\"information_empty_category\">هیچ دسته بندی وجود ندارد. با زدن دکمه به علاوه دسته بندی جدیدی بسازید.</string>\n    <string name=\"information_empty_library\">کتابخانه شما خالی است</string>\n    <string name=\"information_no_recent_manga\">هیچ چیز مانگاای به تازگی خوانده شده</string>\n    <string name=\"information_no_recent\">هیچ قسمت جدیدی یافت نشد</string>\n    <string name=\"information_no_downloads\">لیست دانلود خالی است</string>\n    <string name=\"label_help\">راهنما</string>\n    <string name=\"label_extension_info\">اطلاعات افزونه</string>\n    <string name=\"label_extensions\">افزونه‌ها</string>\n    <string name=\"label_migration\">تغییر منبع</string>\n    <string name=\"label_backup\">پشتیبان گیری و بازیابی</string>\n    <string name=\"label_sources\">منابع</string>\n    <string name=\"label_recent_manga\">سابقه</string>\n    <string name=\"label_recent_updates\">به روز رسانی‌ها</string>\n    <string name=\"label_library\">کتابخانه</string>\n    <string name=\"label_download_queue\">صف دانلود</string>\n    <string name=\"label_settings\">تنظیمات</string>\n    <string name=\"label_more\">بیشتر</string>\n    <string name=\"name\">نام</string>\n    <string name=\"add_to_library\">افزودن به کتابخانه</string>\n    <string name=\"licensed\">مجوزدار</string>\n    <string name=\"unknown\">نامعلوم</string>\n    <string name=\"ongoing\">در حال پخش</string>\n    <string name=\"local_source_help_guide\">راهنمای منبع محلی</string>\n    <string name=\"browse\">مرور</string>\n    <string name=\"latest\">جدیدترین</string>\n    <string name=\"action_global_search_hint\">جست و جو در تمام منابع…</string>\n    <string name=\"pinned_sources\">منابع پین شده</string>\n    <string name=\"last_used_source\">آخرین استفاده</string>\n    <string name=\"other_source\">دیگر</string>\n    <string name=\"local_source\">منبع محلی</string>\n    <string name=\"no_results_found\">هیچ نتیجه ای یافت نشد</string>\n    <string name=\"no_more_results\">نتیجه بیشتری یافت نشد</string>\n    <string name=\"tabs_header\">تب ها</string>\n    <string name=\"pref_backup_interval\">زمان پشتیبان گیری</string>\n    <string name=\"pref_restore_backup_summ\">بازگرداندن کتابخانه از فایل پشتیبان</string>\n    <string name=\"pref_restore_backup\">برگرداندن نسخه پشتیبان</string>\n    <string name=\"pref_create_backup_summ\">می تواند برای بازگرداندن کتابخانه فعلی استفاده شود</string>\n    <string name=\"pref_create_backup\">تهیه نسخه پشتیبان</string>\n    <string name=\"services\">خدمات</string>\n    <string name=\"pref_auto_update_manga_sync\">بعد از خوانده‌شدن، وضعیت قسمت بروزرسانی شود</string>\n    <string name=\"pref_download_new\">دانلود قسمت‌های جدید</string>\n    <string name=\"fifth_to_last\">پنجم به آخرین قسمت خوانده‌شده</string>\n    <string name=\"fourth_to_last\">چهارم به آخرین قسمت خوانده‌شده</string>\n    <string name=\"third_to_last\">سوم به آخرین قسمت خوانده‌شده</string>\n    <string name=\"second_to_last\">دوم به آخرین قسمت خوانده‌شده</string>\n    <string name=\"last_read_chapter\">آخرین قسمت خوانده شده</string>\n    <string name=\"disabled\">غیرفعال شده</string>\n    <string name=\"pref_remove_after_read\">بعد از خواندن به‌صورت خودکار پاک کن</string>\n    <string name=\"pref_remove_after_marked_as_read\">بعد از آن‌هایی که به صورت دستی به عنوان خوانده‌شده علامت‌گذاری شده‌اند</string>\n    <string name=\"pref_webtoon_side_padding\">فاصله از کنار صفحه</string>\n    <string name=\"pref_category_reading\">درحال خواندن</string>\n    <string name=\"pref_always_show_chapter_transition\">همیشه انتقال قسمت را نشان داده شود</string>\n    <string name=\"pref_category_for_this_series\">برای این مجموعه</string>\n    <string name=\"decode_image_error\">بازکردن عکس با خطا مواجه شد</string>\n    <string name=\"plan_to_read\">قصد خواندن دارم(Plan to read)</string>\n    <string name=\"scale_type_smart_fit\">هم اندازه حالت هوشمند</string>\n    <string name=\"filter_mode_multiply\">Multiply</string>\n    <string name=\"filter_mode_overlay\">Overlay</string>\n    <string name=\"pref_double_tap_anim_speed\">Double tap animation speed</string>\n    <string name=\"ext_install\">نصب</string>\n    <string name=\"action_bookmark\">نشانک قسمت</string>\n    <string name=\"channel_ext_updates\">آپدیت افزونه‌ها</string>\n    <string name=\"channel_new_chapters\">به روزرسانی قسمت‌ها</string>\n    <string name=\"channel_common\">عمومی</string>\n    <string name=\"download_notifier_download_paused\">دانلود متوقف شد</string>\n    <string name=\"download_notifier_no_network\">اتصال شبکه در دسترس نیست</string>\n    <string name=\"download_notifier_text_only_wifi\">اتصال وای فای در دسترس نیست</string>\n    <string name=\"download_notifier_unknown_error\">به علت خطای غیرمنتظره بارگیری این چپتر، ممکن نیست</string>\n    <string name=\"download_notifier_title_error\">خطا</string>\n    <string name=\"download_notifier_downloader_title\">سیستم دانلود کننده</string>\n    <string name=\"information_webview_outdated\">لطفا برنامه وب نما را برای سازگاری بهتر آپدیت کنید</string>\n    <string name=\"information_webview_required\">وب نما برای تاچیومی مورد نیاز است</string>\n    <string name=\"information_cloudflare_bypass_failure\">عدم موفقیت در دور زدن کولدفیر</string>\n    <string name=\"color_filter_a_value\">opacity</string>\n    <string name=\"color_filter_b_value\">آبی</string>\n    <string name=\"color_filter_g_value\">سبز</string>\n    <string name=\"color_filter_r_value\">قرمز</string>\n    <string name=\"rotation_force_landscape\">افقی قفل‌شده</string>\n    <string name=\"rotation_force_portrait\">عمودی قفل‌شده</string>\n    <string name=\"rotation_free\">آزاد</string>\n    <string name=\"pref_rotation_type\">حالت دوران پیش‌فرض</string>\n    <string name=\"double_tap_anim_speed_fast\">سریع</string>\n    <string name=\"double_tap_anim_speed_normal\">عادی</string>\n    <string name=\"double_tap_anim_speed_0\">بدون انیمیشن</string>\n    <string name=\"zoom_start_center\">مرکز</string>\n    <string name=\"zoom_start_right\">راست</string>\n    <string name=\"zoom_start_left\">چپ</string>\n    <string name=\"zoom_start_automatic\">خودکار</string>\n    <string name=\"pref_zoom_start\">موقعیت شروع بزرگنمایی</string>\n    <string name=\"scale_type_original_size\">اندازه اصلی</string>\n    <string name=\"scale_type_fit_height\">هم اندازه با طول</string>\n    <string name=\"scale_type_fit_width\">هم اندازه با عرض</string>\n    <string name=\"scale_type_stretch\">کشیده</string>\n    <string name=\"scale_type_fit_screen\">هم اندازه با صفحه نمایش</string>\n    <string name=\"pref_image_scale_type\">نوع مقیاس</string>\n    <string name=\"pager_viewer\">صفحه به صفحه</string>\n    <string name=\"vertical_plus_viewer\">عمودی پیوسته</string>\n    <string name=\"vertical_viewer\">عمودی</string>\n    <string name=\"right_to_left_viewer\">راست به چپ</string>\n    <string name=\"left_to_right_viewer\">چپ به راست</string>\n    <string name=\"pref_viewer_type\">حالت پیش فرض خواندن</string>\n    <string name=\"black_background\">سیاه</string>\n    <string name=\"gray_background\">خاکستری</string>\n    <string name=\"white_background\">سفید</string>\n    <string name=\"pref_reader_theme\">رنگ پس زمینه</string>\n    <string name=\"pref_read_with_long_tap\">با لمس طولانی نشان بده</string>\n    <string name=\"pref_read_with_volume_keys\">دکمه‌های صدا</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">معکوس کردن دکمه‌های صدا</string>\n    <string name=\"pref_reader_navigation\">نوار ناوبری Navigation</string>\n    <string name=\"pref_skip_filtered_chapters\">پرش ازز قسمت‌های فیلتر شده</string>\n    <string name=\"pref_skip_read_chapters\">پرش از قسمت‌هایی که خوانده شده اند</string>\n    <string name=\"pref_keep_screen_on\">روشن نگه داشتن صفحه نمایش</string>\n    <string name=\"filter_mode_screen\">صفحه نمایش</string>\n    <string name=\"pref_color_filter_mode\">حالت blend فیلتر رنگ</string>\n    <string name=\"pref_custom_color_filter\">استفاده از فیلتر رنگ سفارشی</string>\n    <string name=\"pref_custom_brightness\">استفاده از سیستم روشنایی سفارشی</string>\n    <string name=\"pref_crop_borders\">بریدن حاشیه‌ها</string>\n    <string name=\"pref_show_reading_mode_summary\">هنگام باز شدن کتابخوان ، حالت فعلی را به طور خلاصه نشان داده شود</string>\n    <string name=\"pref_show_reading_mode\">نمایش حالت خواندن</string>\n    <string name=\"pref_show_page_number\">نمایش شماره صفحه</string>\n    <string name=\"pref_page_transitions\">انمیشن‌های تغییر صفحه</string>\n    <string name=\"pref_fullscreen\">تمام صفحه</string>\n    <string name=\"obsolete_extension_message\">این افزونه دیگر در دسترس نیست. ممکن است به درستی کار نکند و باعث ایجاد مشکلاتی در برنامه شود. حذف نصب آن توصیه می شود.</string>\n    <string name=\"untrusted_extension_message\">یک افزونه مخرب می تواند هر گونه طلاعات ورود به سیستم زخیره شده را بخواند یا اختیاری یک کد را اجرا کند.\n\\n\n\\nبا اعتماد به این گواهی شما این خطرات را می‌پذیرید.</string>\n    <string name=\"untrusted_extension\">افزونه نامطمئن</string>\n    <string name=\"ext_uninstall\">حذف نصب</string>\n    <string name=\"ext_untrusted\">نامطمئن</string>\n    <string name=\"ext_trust\">مورد اعتماد</string>\n    <string name=\"ext_installed\">نصب شده</string>\n    <string name=\"ext_installing\">در حال نصب</string>\n    <string name=\"ext_downloading\">در حال بارگیری</string>\n    <string name=\"ext_pending\">در انتظار</string>\n    <string name=\"ext_obsolete\">منسوخ شده</string>\n    <string name=\"ext_update\">آپدیت</string>\n    <string name=\"ext_updates_pending\">آپدیت‌های در انتظار</string>\n    <string name=\"all\">همه</string>\n    <string name=\"default_category_summary\">همیشه بپرس</string>\n    <string name=\"default_category\">دسته بندی پیشفرض</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">هنگام آپدیت عکس روی جلد و اطلاعات مانگا ها (در صورت تغییر) آپدیت شوند</string>\n    <string name=\"pref_library_update_refresh_metadata\">متادیتا فقط به صورت خودکار آپدیت شود</string>\n    <string name=\"pref_update_only_non_completed\">با وضعیت \\\"کامل‌شده\\\"</string>\n    <string name=\"charging\">هنگام شارژ کردن</string>\n    <string name=\"pref_library_update_restriction\">محدودیت‌های دستگاهی به‌روزرسانی‌ خودکار</string>\n    <string name=\"update_weekly\">هفتگی</string>\n    <string name=\"update_48hour\">هر ۴۸ ساعت یکبار</string>\n    <string name=\"update_24hour\">هر ۲۴ ساعت یکبار</string>\n    <string name=\"update_6hour\">هر ۶ ساعت یکبار</string>\n    <string name=\"update_never\">خاموش</string>\n    <string name=\"pref_library_update_interval\">به‌روزرسانی‌های خودکار</string>\n    <string name=\"pref_category_library_update\">به‌روزرسانی همگانی</string>\n    <string name=\"landscape\">افقی</string>\n    <string name=\"portrait\">عمودی</string>\n    <string name=\"pref_library_columns\">موارد در هر ردیف</string>\n    <string name=\"pref_category_display\">نمایش</string>\n    <string name=\"hide_notification_content\">مخفی کردن اعلان‌ها</string>\n    <string name=\"secure_screen_summary\">\\\"صفحه نمایش امن\\\" محتویات برنامه را هنگام عوض کردن برنامه‌ها مخفی می‌کند و همچنین اسکرین‌شات را مسدود می‌کند</string>\n    <string name=\"secure_screen\">صفحه نمایش امن</string>\n    <string name=\"lock_never\">هرگز</string>\n    <string name=\"lock_always\">همیشه</string>\n    <string name=\"lock_when_idle\">قفل صفحه هنگام بیکاری</string>\n    <string name=\"lock_with_biometrics\">نیاز به باز کردن قفل</string>\n    <string name=\"pref_category_security\">امنیت</string>\n    <string name=\"pref_manage_notifications\">مدیریت اعلان‌ها</string>\n    <string name=\"pref_date_format\">فرمت تاریخ</string>\n    <string name=\"theme_dark\">روشن</string>\n    <string name=\"theme_light\">خاموش</string>\n    <string name=\"theme_system\">تم پیش‌فرض سیستم</string>\n    <string name=\"pref_category_about\">درباره</string>\n    <string name=\"pref_category_advanced\">پیشرفته</string>\n    <string name=\"pref_category_tracking\">ردیابی</string>\n    <string name=\"pref_category_downloads\">بارگیری ها</string>\n    <string name=\"pref_category_reader\">کتابخوان</string>\n    <string name=\"pref_category_library\">کتابخانه</string>\n    <string name=\"pref_category_general\">عمومی</string>\n    <string name=\"app_not_available\">برنامه موجود نیست</string>\n    <string name=\"loading\">درحال بارگیری…</string>\n    <string name=\"action_webview_refresh\">بازآوری‌</string>\n    <string name=\"action_webview_forward\">رو به جلو</string>\n    <string name=\"action_webview_back\">بازگشت</string>\n    <string name=\"action_restore\">بازیابی</string>\n    <string name=\"action_open_log\">بازکردن log</string>\n    <string name=\"action_undo\">خنثی کردن (Undo)</string>\n    <string name=\"action_reset\">از اول</string>\n    <string name=\"action_save\">ذخيره</string>\n    <string name=\"action_share\">اشتراک گذاری</string>\n    <string name=\"action_install\">نصب</string>\n    <string name=\"action_move_to_bottom\">جابه‌جایی به پایین</string>\n    <string name=\"action_move_to_top\">جابه‌جایی به بالا</string>\n    <string name=\"action_oldest\">قدیمی ترین</string>\n    <string name=\"action_newest\">جدیدترین</string>\n    <string name=\"action_sort\">مرتب سازی</string>\n    <string name=\"action_cancel_all\">لغو همه</string>\n    <string name=\"action_cancel\">لغو</string>\n    <string name=\"action_unpin\">برداشتن پین</string>\n    <string name=\"action_pin\">پین</string>\n    <string name=\"action_display_show_tabs\">نمایش برگه های دسته بندی</string>\n    <string name=\"action_display_download_badge\">قسمت‌های دانلود شده</string>\n    <string name=\"action_display_comfortable_grid\">چشم نواز</string>\n    <string name=\"action_display_list\">لیست</string>\n    <string name=\"action_display_grid\">فشرده</string>\n    <string name=\"action_display\">نمایش</string>\n    <string name=\"action_display_mode\">حالت نمایش</string>\n    <string name=\"action_migrate\">تغییر منبع</string>\n    <string name=\"action_open_in_web_view\">در WebView باز کنید</string>\n    <string name=\"action_open_in_browser\">باز کردن در مرورگر</string>\n    <string name=\"action_resume\">ازسرگیری</string>\n    <string name=\"action_start\">آغاز</string>\n    <string name=\"action_remove\">حذف</string>\n    <string name=\"action_retry\">تلاش دوباره</string>\n    <string name=\"action_next_chapter\">قسمت بعد</string>\n    <string name=\"action_previous_chapter\">قسمت قبل</string>\n    <string name=\"action_pause\">مکث</string>\n    <string name=\"action_view_chapters\">مشاهده قسمت ها</string>\n    <string name=\"updating_category\">درحال به روز رسانی دسته بندی ها</string>\n    <string name=\"unknown_error\">خطای ناشناخته</string>\n    <string name=\"logout_success\">شما خارج شدید</string>\n    <string name=\"logout\">خروج</string>\n    <string name=\"logout_title\">از%1$s خارج می شوید؟</string>\n    <string name=\"login_success\">وارد شدید</string>\n    <string name=\"login\">ورود</string>\n    <string name=\"password\">گذرواژه</string>\n    <string name=\"email\">آدرس ایمیل</string>\n    <string name=\"username\">نام کاربری</string>\n    <string name=\"login_title\">ورود به %1$s</string>\n    <string name=\"downloaded_only_summary\">همه مانگاهای موجود در کتابخانه را فیلتر می کند</string>\n    <string name=\"label_downloaded_only\">فقط دانلود شده ها</string>\n    <string name=\"pref_acra_summary\">به رفع اشکالات برنامه کمک می کند. هیچ گونه داده حساسی ارسال نخواهد شد</string>\n    <string name=\"pref_enable_acra\">ارسال گزارش های خرابی</string>\n    <string name=\"check_for_updates\">بررسی برای به آپدیت‌ها</string>\n    <string name=\"licenses\">مجوزهای منبع باز</string>\n    <string name=\"version\">نسخهٔ</string>\n    <string name=\"website\">وب سایت</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">تنظیمات دستگاه باز نشد</string>\n    <string name=\"battery_optimization_disabled\">بهینه سازی باتری از قبل غیرفعال شده است</string>\n    <string name=\"pref_disable_battery_optimization_summary\">به بروزرسانی‌ها و پشتیبان‌گیری از کتابخانه در حالت پس زمینه کمک می‌کند</string>\n    <string name=\"pref_disable_battery_optimization\">غیر فعال کردن بهینه سازی باتری</string>\n    <string name=\"pref_refresh_library_covers\">تازه کردن عکس روی جلد مانگاها</string>\n    <string name=\"clear_database_completed\">اطلاعات حذف شدند</string>\n    <string name=\"clear_database_confirmation\">آیا مطمئن هستید؟ اطلاعات قسمت های خوانده شده برای مانگاهایی که در کتابخانه اضافه نشده از دست خواهد رفت</string>\n    <string name=\"pref_clear_database_summary\">حذف سابقه برای مانگاهایی که در کتابخانه ذخیره نشده اند</string>\n    <string name=\"pref_clear_database\">پاک کردن پایگاه داده</string>\n    <string name=\"cookies_cleared\">کوکی ها پاک شدند</string>\n    <string name=\"pref_clear_cookies\">پاک کردن کوکی ها</string>\n    <string name=\"cache_delete_error\">هنگام پاک کردن حافظه نهان خطایی روی داد</string>\n    <string name=\"cache_deleted\">حافظه نهان پاک شد. %1$d فایل پاک شدند</string>\n    <string name=\"used_cache\">مصرف شده: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">پاک کردن حافظه پنهان قسمت‌ها</string>\n    <string name=\"label_data\">اطلاعات</string>\n    <string name=\"restoring_backup_canceled\">بازیابی لغو شده</string>\n    <string name=\"restoring_backup_error\">بازیابی نسخه پشتیبان ناموفق بود</string>\n    <string name=\"restoring_backup\">درحال بازگرداندن نسخه پشتیبان</string>\n    <string name=\"restore_in_progress\">بازیابی هنوز در حال انجام است</string>\n    <string name=\"creating_backup_error\">پشتیبان گیری ناموفق بود</string>\n    <string name=\"creating_backup\">درحال ایجاد نسخه پشتیبان</string>\n    <string name=\"backup_choice\">چه چیزی را می خواهید پشتیبان گیری کنید ؟</string>\n    <string name=\"backup_in_progress\">پشتیبان گیری هنوز در حال انجام است</string>\n    <string name=\"restore_duration\">%02d دقیقه, %02d ثانیه</string>\n    <string name=\"restore_completed\">بازیابی کامل شد</string>\n    <string name=\"backup_restore_missing_sources\">منابع ناموجود:</string>\n    <string name=\"invalid_backup_file_missing_manga\">فایل پشتیبان حاوی هیچ ورودی کتابخانه نیست.</string>\n    <string name=\"invalid_backup_file\">فایل پشتیبان نامعتبر است</string>\n    <string name=\"backup_created\">نسخه پشتیبان ایجاد شد</string>\n    <string name=\"action_edit_cover\">ویرایش عکس روی جلد</string>\n    <string name=\"action_rename_category\">تغییر نام دسته</string>\n    <string name=\"action_edit_categories\">ویرایش دسته ها</string>\n    <string name=\"action_add_category\">افزودن دسته</string>\n    <string name=\"action_add\">افزودن</string>\n    <string name=\"action_edit\">ویرایش</string>\n    <string name=\"action_disable_all\">غیر فعال کردن همه</string>\n    <string name=\"action_enable_all\">فعال کردن همه</string>\n    <string name=\"action_update_library\">آپدیت کتابخانه</string>\n    <string name=\"action_delete\">پاک کردن</string>\n    <string name=\"action_remove_bookmark\">حذف نشانک قسمت</string>\n    <string name=\"action_download\">دانلود شود</string>\n    <string name=\"action_mark_previous_as_read\">علامت گذاری قبلی‌ها به عنوان خوانده شده</string>\n    <string name=\"action_mark_as_unread\">علامت گذاری به عنوان خوانده نشده</string>\n    <string name=\"action_mark_as_read\">علامت گذاری به عنوان خوانده شده</string>\n    <string name=\"action_select_inverse\">معکوس کردن انتخاب شده</string>\n    <string name=\"action_select_all\">انتخاب همه</string>\n    <string name=\"action_global_search\">جست و جوی کامل</string>\n    <string name=\"action_search\">جست و جو</string>\n    <string name=\"action_sort_latest_chapter\">اخرین قسمت</string>\n    <string name=\"action_sort_last_read\">آخرین خوانده ‌شده</string>\n    <string name=\"action_sort_total\">کل قسمت‌ها</string>\n    <string name=\"action_sort_alpha\">الفبا</string>\n    <string name=\"action_filter_empty\">حذف فیلتر</string>\n    <string name=\"action_filter_unread\">خوانده ‌نشده</string>\n    <string name=\"action_filter_bookmarked\">بوک مارک شده</string>\n    <string name=\"action_filter\">فیلتر</string>\n    <string name=\"action_menu\">منو</string>\n    <string name=\"action_settings\">تنضیمات</string>\n    <string name=\"history\">تاریخچه</string>\n    <string name=\"chapters\">قسمت ها</string>\n    <string name=\"manga\">کتابخانه ورودی‌ها</string>\n    <string name=\"categories\">دسته بندی ها</string>\n    <string name=\"channel_errors\">خطاها</string>\n    <string name=\"channel_complete\">تکمیل شده</string>\n    <string name=\"channel_progress\">پیشرفت</string>\n    <string name=\"download_insufficient_space\">به دلیل فضای کم دیسک امکان دانلود قسمت ها وجود ندارد</string>\n    <string name=\"loader_not_implemented_error\">منبع یافت نشد</string>\n    <string name=\"unknown_status\">وضعیت ناشناخته</string>\n    <string name=\"unknown_author\">نویسنده ناشناخته</string>\n    <string name=\"no_pinned_sources\">شما هیچ منبع پین‌شده‌ای ندارید</string>\n    <string name=\"action_global_search_query\">«%1$s» در همه منابع جستجو شود</string>\n    <string name=\"whats_new\">موارد جدید</string>\n    <string name=\"requires_app_restart\">برای اعمال تغییرات، به راه اندازی مجدد برنامه نیاز است</string>\n    <string name=\"label_network\">شبکه</string>\n    <string name=\"backup_restore_missing_trackers\">ردیابی هایی که به سیستم وارد نشده اند:</string>\n    <string name=\"pref_category_reading_mode\">حالت خواندن</string>\n    <string name=\"pref_category_theme\">تم</string>\n    <string name=\"action_disable\">غیرفعال کردن</string>\n    <string name=\"action_sort_date_added\">تاریخ اضافه شدن</string>\n    <string name=\"updated_version\">به نسخه v%1$s آپدیت شد</string>\n    <string name=\"action_search_settings\">جست و جوی تنضیمات</string>\n    <string name=\"downloaded_chapters\">قسمت های دانلود شده</string>\n    <string name=\"manga_from_library\">مانگاهای کتابخانه</string>\n    <string name=\"pref_incognito_mode_summary\">متوقف کردن تاریخچه خواندن</string>\n    <string name=\"pref_incognito_mode\">حالت ناشناس</string>\n    <string name=\"clear_history_confirmation\">آیا مطمئن هستید؟ تمام سابقه از دست خواهد رفت.</string>\n    <string name=\"clear_history_completed\">سابقه پاک شد</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_category_nsfw_content\">منابع محتوای جنسی (+18)</string>\n    <string name=\"parental_controls_info\">این کار از نمایش محتوای 18+ (محتوای نامناسب) توسط افزونه‌های غیررسمی یا اشتباه برچسب‌خورده جلوگیری نمی‌کند.</string>\n    <string name=\"no_chapters_error\">هیچ قسمتی پیدا نشد</string>\n    <string name=\"set_chapter_settings_as_default\">تنظیم به عنوان پیشفرض</string>\n    <string name=\"also_set_chapter_settings_for_library\">همچنین برای تمام مانگاهای موجود در کتابخانه من اعمال شود</string>\n    <string name=\"confirm_set_chapter_settings\">آیا مطمئن هستید که می خواهید این تنظیمات را به صورت پیش فرض ذخیره کنید؟</string>\n    <string name=\"pref_remove_bookmarked_chapters\">اجازه‌ی پاک‌کردن قسمت‌های نشانک‌گذاری شده را بده</string>\n    <string name=\"pref_category_delete_chapters\">حذف قسمت ها</string>\n    <string name=\"ext_nsfw_warning\">منابع این افزونه ممکن است شامل محتوای نامناسب (+18) باشند</string>\n    <string name=\"spen_next_page\">صفحه بعدی</string>\n    <string name=\"spen_previous_page\">صفحه قبلی</string>\n    <string name=\"tapping_inverted_both\">هر دو</string>\n    <string name=\"tapping_inverted_vertical\">عمودی</string>\n    <string name=\"tapping_inverted_horizontal\">افقی</string>\n    <string name=\"tapping_inverted_none\">هیچ کدام</string>\n    <string name=\"pref_read_with_tapping_inverted\">منطقه‌های لمس را معکوس کن</string>\n    <string name=\"chapter_settings_updated\">تنظیمات پیش فرض چپتر به روز شد</string>\n    <string name=\"share_page_info\">%1$s: %2$s, صفحه %3$d</string>\n    <string name=\"myanimelist_relogin\">لطفا دوباره به MAL وارد شوید</string>\n    <string name=\"chapter_settings\">تنظیمات قسمت ها</string>\n    <string name=\"file_picker_error\">هیچ نرم افزار انتخاب فایلی یافت نشد</string>\n    <string name=\"migration_help_guide\">راهنمای تعویض منبع</string>\n    <string name=\"pref_clear_history\">پاک کردن سابقه</string>\n    <string name=\"pref_show_nsfw_source\">نمایش در لیست منابع و افزونه‌ها</string>\n    <string name=\"nav_zone_left\">چپ</string>\n    <string name=\"nav_zone_right\">راست</string>\n    <string name=\"ext_installer_legacy\">قدیمی</string>\n    <string name=\"ext_installer_pref\">نصب کننده</string>\n    <string name=\"pref_create_folder_per_manga_summary\">ساخت پوشه بر اساس عنوان ورودی</string>\n    <string name=\"ext_update_all\">آپدیت همگی</string>\n    <string name=\"label_background_activity\">فعالیت در پس زمینه</string>\n    <string name=\"action_sort_count\">مجموع ورودی ها</string>\n    <string name=\"label_default\">پیش فرض</string>\n    <string name=\"action_filter_tracked\">دنبال شده</string>\n    <string name=\"pref_create_folder_per_manga\">ذخیره صفحات در پوشه های جداگانه</string>\n    <string name=\"error_no_match\">هیچ مورد مشابهی پیدا نشد</string>\n    <string name=\"ext_install_service_notif\">در حال نصب کردن افزونه …</string>\n    <string name=\"extension_api_error\">دریافت لیست افزونه ها ناموفق بود</string>\n    <string name=\"label_warning\">اخطار</string>\n    <string name=\"confirm_lock_change\">احراز هویت جهت تایید تغییرات</string>\n    <string name=\"enhanced_services\">سرویس های بهینه شده</string>\n    <string name=\"unread\">خوانده نشده</string>\n    <string name=\"update_check_eol\">این نسخه آندروید دیگر پشتیبانی نمی‌شود</string>\n    <string name=\"update_check_open\">بازکردن در گیت هاب</string>\n    <string name=\"getting_started_guide\">راهنمای شروع</string>\n    <string name=\"information_empty_category_dialog\">شما هنوز هیچ دسته‌بندی ندارید.</string>\n    <string name=\"channel_app_updates\">بروزرسانی برنامه</string>\n    <string name=\"pref_navigate_pan\">هنگام ضربه زدن تصاویر را عریض کنید</string>\n    <string name=\"pref_landscape_zoom\">بزرگنمایی تصویر چشم انداز</string>\n    <string name=\"action_sort_last_manga_update\">بررسی آخرین به روزرسانی</string>\n    <string name=\"action_sort_unread_count\">تعداد نخوانده‌ها</string>\n    <string name=\"skipped_reason_completed\">به دلیل کامل‌بودن سری، رد شد</string>\n    <string name=\"action_display_local_badge\">منبع محلی</string>\n    <string name=\"action_display_show_number_of_items\">نمایش تعداد موارد</string>\n    <string name=\"action_desc\">نزولی</string>\n    <string name=\"pref_category_appearance\">ظاهر</string>\n    <string name=\"action_sort_chapter_fetch_date\">تاریخ گرفتن قسمت</string>\n    <string name=\"action_order_by_upload_date\">بر اساس تاریخ آپلود</string>\n    <string name=\"action_order_by_chapter_number\">بر اساس شماره‌ی قسمت</string>\n    <string name=\"action_asc\">صعودی</string>\n    <string name=\"action_display_language_badge\">زبان</string>\n    <string name=\"action_show_manga\">نمایش ورودی</string>\n    <string name=\"cancel_all_for_series\">لغو همه برای این سری</string>\n    <string name=\"pref_dark_theme_pure_black\">حالت تاریک مشکی خالص</string>\n    <string name=\"action_close\">بستن</string>\n    <string name=\"pref_app_theme\">تم برنامه</string>\n    <string name=\"theme_monet\">پویا</string>\n    <string name=\"theme_greenapple\">سیب سبز</string>\n    <string name=\"theme_midnightdusk\">غروب نیمه‌شب</string>\n    <string name=\"theme_strawberrydaiquiri\">داکری توت‌فرنگی</string>\n    <string name=\"theme_tealturquoise\">آبی و فیروزه‌ای</string>\n    <string name=\"theme_yinyang\">یین و یانگ</string>\n    <string name=\"theme_yotsuba\">یوتسوبا</string>\n    <string name=\"action_move_to_top_all_for_series\">انتقال سری به بالا</string>\n    <string name=\"action_start_downloading_now\">همین الان شروع به دانلود کن</string>\n    <string name=\"action_show_errors\">برای دیدن جزئیات لمس کنید</string>\n    <string name=\"network_not_metered\">فقط روی شبکه‌ی نامحدود</string>\n    <string name=\"pref_update_only_started\">که شروع نشده‌اند</string>\n    <string name=\"restrictions\">محدودیت‌ها: %s</string>\n    <string name=\"pref_update_only_completely_read\">با قسمت‌(های) خوانده‌نشده</string>\n    <string name=\"relative_time_today\">امروز</string>\n    <string name=\"update_72hour\">هر 3 روز</string>\n    <string name=\"connected_to_wifi\">فقط روی Wi-Fi</string>\n    <string name=\"categorized_display_settings\">تنظیمات بر اساس دسته‌بندی برای ترتیب و نمایش</string>\n    <string name=\"ext_app_info\">اطلاعات برنامه</string>\n    <string name=\"pref_dual_page_invert\">معکوس کردن جای دو صفحه‌ی تقسیم شده</string>\n    <string name=\"nav_zone_next\">بعدی</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku در حال اجرا نمی‌باشد</string>\n    <string name=\"pref_show_navigation_mode_summary\">یک لحظه هنگام باز شدن متن‌خوان نمایش بده</string>\n    <string name=\"ext_info_version\">نسخه</string>\n    <string name=\"ext_info_language\">زبان</string>\n    <string name=\"ext_info_age_rating\">رده‌بندی سنی</string>\n    <string name=\"kindlish_nav\">شبیه Kindle</string>\n    <string name=\"rotation_landscape\">افقی</string>\n    <string name=\"rotation_reverse_portrait\">عمودی معکوس</string>\n    <string name=\"pref_hide_threshold\">حساسیت مخفی کردن منو هنگام بالا و پایین بردن صفحه</string>\n    <string name=\"pref_highest\">بالاترین</string>\n    <string name=\"pref_remove_exclude_categories\">دسته‌بندی‌های محذوف</string>\n    <string name=\"pref_high\">بالا</string>\n    <string name=\"pref_dual_page_split\">تقسیم صفحات عریض</string>\n    <string name=\"pref_dual_page_invert_summary\">اگر محل قرارگیری صفحات عریض تقسیم شده با حالت خواندن مطابقت نداشته باشد</string>\n    <string name=\"pref_grayscale\">سیاه و سفید</string>\n    <string name=\"pref_inverted_colors\">معکوس‌شده</string>\n    <string name=\"pref_reader_actions\">اقدامات</string>\n    <string name=\"automatic_background\">خودکار</string>\n    <string name=\"l_nav\">L شکل</string>\n    <string name=\"rotation_type\">حالت دوران</string>\n    <string name=\"rotation_portrait\">عمودی</string>\n    <string name=\"pref_low\">پایین</string>\n    <string name=\"action_display_cover_only_grid\">الگوی فقط جلد</string>\n    <string name=\"pref_lowest\">پایین‌ترین</string>\n    <string name=\"pref_viewer_nav\">مناطق قابل لمس</string>\n    <string name=\"on\">روشن</string>\n    <string name=\"theme_tako\">تاکو</string>\n    <string name=\"off\">خاموش</string>\n    <string name=\"pref_show_navigation_mode\">مناطق قابل لمس را نشان بده</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">برای استفاده از Shizuku به عنوان یک نصب‌کننده‌ی افزونه، آن را نصب و اجرا کنید.</string>\n    <string name=\"disabled_nav\">غیر فعال</string>\n    <string name=\"nav_zone_prev\">قبلی</string>\n    <string name=\"right_and_left_nav\">راست و چپ</string>\n    <string name=\"edge_nav\">لبه</string>\n    <string name=\"pref_category_auto_download\">دانلود خودکار</string>\n    <string name=\"none\">هیچ‌کدام</string>\n    <string name=\"include\">شامل: %s</string>\n    <string name=\"exclude\">بدون: %s</string>\n    <string name=\"pref_library_update_categories_details\">ورودی هایی که در دسته‌بندی های حذف‌شده هستند، حتی اگر هم‌زمان در دسته‌بندی های مشمول باشند به‌روزرسانی نمی‌شوند.</string>\n    <string name=\"save_chapter_as_cbz\">ذخیره به عنوان فایل آرشیو CBZ</string>\n    <string name=\"publishing_finished\">انتشار به پایان رسید</string>\n    <string name=\"local_invalid_format\">قالب فصل نامعتبر است</string>\n    <string name=\"cancelled\">لغو شد</string>\n    <string name=\"pref_security_summary\">قفل برنامه، صفحه امن</string>\n    <string name=\"pref_advanced_summary\">گزارش‌های خرابی، بهینه‌سازی باتری</string>\n    <string name=\"theme_lavender\">ارغوانی</string>\n    <string name=\"theme_tidalwave\">تم جزر و مدی</string>\n    <string name=\"pref_app_language\">زبان برنامه</string>\n    <string name=\"invalid_location\">مکان نامعتبر: %s</string>\n    <string name=\"pref_download_new_categories_details\">ورودی ها در دسته بندی های حذف شده حتی اگر در دسته بندی های در نظر گرفته شده نیز باشند، دانلود نخواهند شد.</string>\n    <string name=\"pref_appearance_summary\">قالب تم، تاریخ و زمان</string>\n    <string name=\"pref_library_summary\">دسته‌ها، به روز رسانی سراسری</string>\n    <string name=\"pref_reader_summary\">حالت خواندن، نمایش، نوار وضعیت</string>\n    <string name=\"pref_tracking_summary\">همگام سازی پیشرفت یک طرفه، همگام سازی پیشرفته</string>\n    <string name=\"multi_lang\">چند</string>\n    <string name=\"delete_category_confirmation\">آیا می خواهید دسته \\\"%s\\\" را حذف کنید؟</string>\n    <string name=\"delete_category\">حذف دسته</string>\n    <string name=\"download_ahead\">بارگیری شود</string>\n    <string name=\"auto_download_while_reading\">دانلود خودکار در حین خواندن</string>\n    <string name=\"action_search_hint\">جستجو…</string>\n    <string name=\"action_open_random_manga\">باز کردن ورودی تصادفی</string>\n    <string name=\"action_remove_everything\">حذف همه‌چیز</string>\n    <string name=\"internal_error\">خطای داخلی: برای اطلاعات بیشتر گزارش خطا را بررسی کنید</string>\n    <string name=\"pref_downloads_summary\">دانلود خودکار، دانلود از قبل</string>\n    <string name=\"pref_browse_summary\">منابع، برنامه های افزودنی، جستجوی سراسری</string>\n    <string name=\"pref_backup_summary\">پشتیبان گیری دستی و خودکار</string>\n    <string name=\"pref_library_update_show_tab_badge\">نمایش تعداد خوانده نشده در نماد به‌روزرسانی‌ها</string>\n    <string name=\"label_stats\">آمار</string>\n    <string name=\"label_started\">من شروع کردم</string>\n    <string name=\"label_local\">شیرین شده</string>\n    <string name=\"label_downloaded\">دانلود شد</string>\n    <string name=\"action_not_now\">الان نه</string>\n    <string name=\"action_display_show_continue_reading_button\">نمایش دکمه ادامه خواندن</string>\n    <string name=\"split_tall_images_summary\">بهبود کارکرد ابزار خواندن</string>\n    <string name=\"download_ahead_info\">اگر قسمت فعلی و بعدی دانلود شده باشند، تنها برای ورودی‌های کتابخانه کار می‌کند</string>\n    <string name=\"missing_storage_permission\">اجازه دسترسی به حافظه داده نشده.</string>\n    <string name=\"backup_restore_content_full\">داده ها از فایل پشتیبان برگردانده میشوند.\n\\n\n\\nلازم است که افزونه های جا مانده را دستی نصب کنید و وارد یک سرویس دنبال کننده شوید تا بتوانید پیشرفت هر کار را ذخیره کنید.</string>\n    <string name=\"tracking_guide\">راهنمای ردیابی</string>\n    <string name=\"pref_skip_dupe_chapters\">چپتر های تکراری را رد کن</string>\n    <string name=\"enhanced_tracking_info\">فعالسازی سرویس پیشرفته برای منابعی که پشتیبانی کنند. کار های افزوده شده به کتابخانه به صورت خودکار ردگیری میشوند.</string>\n    <string name=\"action_track\">ردگیری</string>\n    <string name=\"empty_backup_error\">هیچ داده کتابخانه ای نیست که پشتیبانی شود</string>\n    <string name=\"restore_miui_warning\">پشتیبانی/بازگردانی ممکن است کار نکند اگر بهینه‌سازی MIUI غیر فعال باشد</string>\n    <string name=\"enhanced_services_not_installed\">در دسترس است اما افزونه منبع نصب نشده است: %s</string>\n    <string name=\"backup_info\">شما باید از پشتیبانی ها در جا های دیگر هم کپی داشته باشید.</string>\n    <string name=\"action_update_category\">بروزرسانی دسته بندی</string>\n    <string name=\"action_copy_to_clipboard\">کپی کردن به کلیپ‌برد</string>\n    <string name=\"on_hiatus\">متوقف شده</string>\n    <string name=\"unlock_app_title\">باز گشایی %s</string>\n    <string name=\"delete_downloaded\">پاک کردن قسمت های دانلود شده</string>\n    <string name=\"action_apply\">ذخیره</string>\n    <string name=\"action_revert_to_default\">باز نشانی به حالت اولیه</string>\n    <string name=\"action_menu_overflow_description\">گزینه های بیشتر</string>\n    <string name=\"selected\">انتخاب شده</string>\n    <string name=\"not_selected\">انتخاب نشده</string>\n    <string name=\"action_move_to_bottom_all_for_series\">مجموعه ها را به پایین منطقل کن</string>\n    <string name=\"action_bar_up_description\">برو به بالا</string>\n    <string name=\"action_sort_tracker_score\">امتیاز رهگیز</string>\n    <string name=\"label_data_storage\">داده های و ذخیره سازی</string>\n    <string name=\"action_ok\">باشه</string>\n    <string name=\"action_sort_next_updated\">به روز رسانی مورد انتظار بعدی</string>\n    <string name=\"download_queue_size_warning\">هشدار: حجم زیاد بارگیری ممکن است باعث اهسته تر شدن سرعت ویا مسدود کردن Mihon از منبع شود. برای اطلاعات بیشتر لمس کنید.</string>\n    <string name=\"skipped_reason_not_always_update\">به دلیل این که این مجموعه نیازی به به روز رسانی نداشت رد شد</string>\n    <string name=\"skipped_reason_not_caught_up\">به دلیل وجود چپتر های خوانده نشده رد شد</string>\n    <string name=\"skipped_reason_not_started\">به دلیل این که هیچ چپتری خوانده نشده بود رد شد</string>\n    <string name=\"notification_update_error\">%1$d بروز رسانی ناموفق</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" به جای \\\"%2$s\\\"</string>\n    <string name=\"pref_page_rotate\">صفحات عریض را بچرخان تا جا شوند</string>\n    <string name=\"popular\">محبوب</string>\n    <string name=\"pref_chapter_swipe_end\">حرکت کشیدن به راست</string>\n    <string name=\"pref_flash_page\">در هنگام عوض شدن صفحه فلاش سفید بزن</string>\n    <string name=\"pref_chapter_swipe_start\">حرکت کشیدن به چپ</string>\n    <string name=\"updates_last_update_info\">آخرین به روز رسانی کتابخانه: %s</string>\n    <string name=\"pref_update_only_in_release_period\">خارج از دوره انتشار موزد انتظار</string>\n    <string name=\"pref_double_tap_zoom\">برای بزرگ نمایی دوبار ضربه بزنید</string>\n    <string name=\"action_filter_interval_custom\">تناوب به روز رسانی شخسی سازی شده</string>\n    <string name=\"onboarding_heading\">خوش آمدید!</string>\n    <string name=\"onboarding_description\">بیاید برخی چیز ها را تنظیم کنیم. شما همیشه میتوانید این تنظیمات را در بخش تنظیمات تغییر دهید.</string>\n    <string name=\"onboarding_action_next\">بعدی</string>\n    <string name=\"onboarding_permission_install_apps_description\">برای نصب افزانه منبع.</string>\n    <string name=\"onboarding_permission_notifications\">دسترسی اعلان ها</string>\n    <string name=\"onboarding_permission_notifications_description\">برای به روز رسانی های کتابخانه و بیشتر مطلع شوید.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">استفاده از باطری</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">از وقفه در به روز رسانی های کتاب خانه، بارگیری و پشتیبان گیری های طولانی اجتناب کنید.</string>\n    <string name=\"onboarding_permission_action_grant\">اعطا کردن</string>\n    <string name=\"onboarding_guides_new_user\">به %s نا آشنا هستید؟ ما پیشنهاد میکنیم تا یک سر به راهنمای شروع بزنید.</string>\n    <string name=\"onboarding_guides_returning_user\">نصب مجدد %s؟</string>\n    <string name=\"pref_relative_format\">زمان بندی های نسبی</string>\n    <string name=\"pref_library_update_smart_update\">به روز رسانی هوشمند</string>\n    <string name=\"ext_revoke_trust\">لغو اعتماد افزونه های ناشناخته</string>\n    <string name=\"label_extension_repos\">مخازن افزونه ها</string>\n    <string name=\"action_add_repo\">اضافه کردن مخزن</string>\n    <string name=\"label_add_repo_input\">آدرس مخزن</string>\n    <string name=\"error_repo_exists\">این مخزن در حال حاضر وجود دارد!</string>\n    <string name=\"action_delete_repo\">حذف مخزن</string>\n    <string name=\"invalid_repo_name\">آدرس مخزن بی اعتبار است</string>\n    <string name=\"delete_repo_confirmation\">آشا شما میخواهید تا \\\"%s\\\" مخزن را حذف کنید؟</string>\n    <string name=\"pref_page_rotate_invert\">جهت چرخش صفحات گسترده را برعکس کن</string>\n    <string name=\"no_location_set\">مکان ذخیره سازی تنظیم نشده است</string>\n    <string name=\"split_tall_images\">عکس های بلند را تقسیم کن</string>\n    <string name=\"track_activity_name\">ورود به ناضر</string>\n    <string name=\"pref_hide_in_library_items\">اجرای داخل کتاب خانه را مخفی کن</string>\n    <string name=\"pref_storage_location\">محل زخیره سازی</string>\n    <string name=\"onboarding_action_finish\">شروع کنید</string>\n    <string name=\"onboarding_action_skip\">پرش</string>\n    <string name=\"ext_permission_install_apps_warning\">مجوز برای نصب افزونه ها لازم است. به اینجا ضربه بزنید تا اعطا کنید.</string>\n    <string name=\"action_add_repo_message\">به میهون مخازن اضافی اضافه کنید. این باید یک آدرس باشد که با \\\"index.min.json\\\" تمام شود.</string>\n    <string name=\"information_empty_repos\">شما هیچ مخزنی برای تنظیم ندارید.</string>\n    <string name=\"action_open_repo\">مخزن منبع باز</string>\n    <string name=\"pref_flash_page_summ\">مقدار رد باقی مانده در نمایش گر های E-ink کاهش میابد</string>\n    <string name=\"onboarding_storage_action_select\">انتخاب یک پوشه</string>\n    <string name=\"onboarding_storage_selection_required\">یک پوشه باید انتخاب شود</string>\n    <string name=\"onboarding_storage_help_action\">راهنمای زخیره سازی</string>\n    <string name=\"onboarding_permission_install_apps\">مجوز نصب برنامه ها</string>\n    <string name=\"action_create\">ایجاد کردن</string>\n    <string name=\"invalid_backup_file_error\">خطای کامل:</string>\n    <string name=\"app_settings\">تنظیمات برنامه</string>\n    <string name=\"source_settings\">تنظیمات منبع</string>\n    <string name=\"private_settings\">حاوی تنظیمات حساس (یه عنوان مثال رمز ورود ناظر)</string>\n    <string name=\"create_backup_file_error\">فایل پشتیبانی ایجاد نشد</string>\n    <string name=\"pref_storage_usage\">استفاده از فظای زخیره سازی</string>\n    <string name=\"available_disk_space_info\">در دسترس: %1$s / کل:%2$s</string>\n    <string name=\"pref_auto_clear_chapter_cache\">هنگام راه‌اندازی برنامه، حافظه پنهان قسمت را پاک کنید</string>\n    <string name=\"syncing_library\">درحال همگام سازی کتاب خانه</string>\n    <string name=\"pref_storage_location_info\">قابل استفاده برای به روز رسانی خودکار، بارگیری قسمت ها، و منابع محلی.</string>\n    <string name=\"last_auto_backup_info\">آخرین پشتیبان گیری خودکار: %s</string>\n    <string name=\"pref_dns_over_https\">DNS بیش از HTTPS (DoH)</string>\n    <string name=\"library_sync_complete\">همگام سازی کتاب خانه کامل شد</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fi/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Minuutin jälkeen</item>\n        <item quantity=\"other\">%1$s minuutin jälkeen</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">1 uusi luku</item>\n        <item quantity=\"other\">%1$d uutta lukua</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Luku %1$s ja 1 lisää</item>\n        <item quantity=\"other\">Luvut %1$s ja %2$d lisää</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Yhdelle sarjalle</item>\n        <item quantity=\"other\">%d sarjalle</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Laajennuspäivitys saatavilla</item>\n        <item quantity=\"other\">%d laajennuspäivitystä saatavilla</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">1 jäljellä</item>\n        <item quantity=\"other\">%1$s jäljellä</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategoria</item>\n        <item quantity=\"other\">%d kategoriaa</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Valmistui %1$s virheitä löytyi %2$s</item>\n        <item quantity=\"other\">Valmistui %1$s virheitä löytyi %2$s</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">1 luku</item>\n        <item quantity=\"other\">%1$s lukua</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">1 seurantapalvelin</item>\n        <item quantity=\"other\">%d seurantapalvelinta</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">1 puuttuva luku</item>\n        <item quantity=\"other\">%d puuttuvaa lukua</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Eilen</item>\n        <item quantity=\"other\">%1$d päivää sitten</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Seuraava lukematon luku</item>\n        <item quantity=\"other\">Seuraavat %d lukematonta lukua</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fi/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nimi</string>\n    <string name=\"categories\">Kategoriat</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"track\">Seuranta</string>\n    <string name=\"history\">Historia</string>\n    <string name=\"label_settings\">Asetukset</string>\n    <string name=\"label_download_queue\">Latausjono</string>\n    <string name=\"label_library\">Kirjasto</string>\n    <string name=\"label_recent_manga\">Historia</string>\n    <string name=\"action_settings\">Asetukset</string>\n    <string name=\"action_sort_last_read\">Viimeksi luettu</string>\n    <string name=\"action_mark_as_read\">Merkitse luetuksi</string>\n    <string name=\"action_download\">Lataa</string>\n    <string name=\"pref_category_tracking\">Seuranta</string>\n    <string name=\"manga_tracking_tab\">Seuranta</string>\n    <string name=\"chapters\">Luvut</string>\n    <string name=\"label_recent_updates\">Päivitykset</string>\n    <string name=\"action_sort_total\">Lukuja yhteensä</string>\n    <string name=\"action_global_search\">Globaali haku</string>\n    <string name=\"action_mark_as_unread\">Merkitse lukemattomaksi</string>\n    <string name=\"action_mark_previous_as_read\">Merkitse aiemmat luetuiksi</string>\n    <string name=\"action_bookmark\">Kirjanmerkitse luku</string>\n    <string name=\"action_remove_bookmark\">Poista kirjanmerkitty luku</string>\n    <string name=\"action_move_category\">Aseta kategoriat</string>\n    <string name=\"action_edit_cover\">Muokkaa kantta</string>\n    <string name=\"custom_filter\">Mukautettu suodatus</string>\n    <string name=\"set_as_cover\">Aseta kansikuvaksi</string>\n    <string name=\"cover_updated\">Kansikuva päivitetty</string>\n    <string name=\"chapter_progress\">Sivu: %1$d</string>\n    <string name=\"no_next_chapter\">Seuraavaa lukua ei löydy</string>\n    <string name=\"decode_image_error\">Kuvaa ei voitu ladata</string>\n    <string name=\"confirm_set_image_as_cover\">Käytetäänkö tätä kuvaa kansikuvana?</string>\n    <string name=\"transition_finished\">Valmistunut:</string>\n    <string name=\"transition_current\">Nykyinen:</string>\n    <string name=\"transition_next\">Seuraava:</string>\n    <string name=\"transition_previous\">Aiempi:</string>\n    <string name=\"transition_no_next\">Seuraavaa lukua ei ole</string>\n    <string name=\"transition_no_previous\">Aiempaa lukua ei ole</string>\n    <string name=\"transition_pages_loading\">Ladataan sivuja…</string>\n    <string name=\"transition_pages_error\">Sivujen lataus epäonnistui: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Valitse sisällytettävä tieto</string>\n    <string name=\"migrate\">Vaihda</string>\n    <string name=\"copy\">Kopioi</string>\n    <string name=\"download_queue_error\">Lukujen lataaminen epäonnistui. Voit yrittää uudelleen lataukset-osiossa</string>\n    <string name=\"notification_new_chapters\">Uusia lukuja löydetty</string>\n    <string name=\"notification_cover_update_failed\">Kansikuvan päivitys epäonnistui</string>\n    <string name=\"notification_first_add_to_library\">Lisää sarja kirjastoosi ensin</string>\n    <string name=\"file_select_cover\">Valitse kansikuva</string>\n    <string name=\"file_select_backup\">Valitse varmuuskopio-tiedosto</string>\n    <string name=\"update_check_confirm\">Lataa</string>\n    <string name=\"update_check_no_new_updates\">Ei päivityksiä saatavilla</string>\n    <string name=\"update_check_notification_download_in_progress\">Ladataan…</string>\n    <string name=\"update_check_notification_download_complete\">Lataus valmis</string>\n    <string name=\"update_check_notification_download_error\">Latausvirhe</string>\n    <string name=\"update_check_notification_update_available\">Uusi versio saatavilla!</string>\n    <string name=\"information_no_downloads\">Ei latauksia</string>\n    <string name=\"information_no_recent\">Ei viimeisimpiä päivityksiä</string>\n    <string name=\"information_no_recent_manga\">Ei mitään luettu viime aikoina</string>\n    <string name=\"information_empty_library\">Kirjastosi on tyhjä</string>\n    <string name=\"information_empty_category\">Sinulla ei ole kategorioita. Napauta pluspainiketta, jos haluat luoda sellaisen kirjaston järjestämistä varten.</string>\n    <string name=\"download_notifier_downloader_title\">Lataaja</string>\n    <string name=\"download_notifier_title_error\">Virhe</string>\n    <string name=\"download_notifier_unknown_error\">Lukua ei voitu ladata odottamattoman virheen vuoksi</string>\n    <string name=\"download_notifier_text_only_wifi\">Ei Wi-Fi yhteyttä saatavilla</string>\n    <string name=\"download_notifier_no_network\">Ei verkkoyhteyttä</string>\n    <string name=\"download_notifier_download_paused\">Lataus pysäytetty</string>\n    <string name=\"channel_common\">Tavallinen</string>\n    <string name=\"label_backup\">Varmuuskopiointi ja palautus</string>\n    <string name=\"label_migration\">Siirrä</string>\n    <string name=\"label_extensions\">Laajennukset</string>\n    <string name=\"label_extension_info\">Laajennuksen tiedot</string>\n    <string name=\"action_filter\">Suodatus</string>\n    <string name=\"action_filter_bookmarked\">Kirjanmerkityt</string>\n    <string name=\"action_filter_unread\">Lukemattomat</string>\n    <string name=\"action_filter_empty\">Poista suodattimet</string>\n    <string name=\"action_sort_alpha\">Aakkosjärjestyksessä</string>\n    <string name=\"action_search\">Haku</string>\n    <string name=\"action_select_all\">Valitse kaikki</string>\n    <string name=\"action_delete\">Poista</string>\n    <string name=\"action_update_library\">Päivitä kirjasto</string>\n    <string name=\"action_edit\">Muokkaa</string>\n    <string name=\"action_add\">Lisää</string>\n    <string name=\"action_add_category\">Lisää kategoria</string>\n    <string name=\"action_edit_categories\">Muokkaa kategorioita</string>\n    <string name=\"action_rename_category\">Nimeä kategoria uudelleen</string>\n    <string name=\"action_retry\">Yritä uudelleen</string>\n    <string name=\"action_pause\">Pysäytä</string>\n    <string name=\"action_previous_chapter\">Aiempi luku</string>\n    <string name=\"action_next_chapter\">Seuraava luku</string>\n    <string name=\"action_remove\">Poista</string>\n    <string name=\"action_resume\">Jatka</string>\n    <string name=\"action_open_in_browser\">Avaa selaimessa</string>\n    <string name=\"action_open_in_web_view\">Avaa WebViewissä</string>\n    <string name=\"action_display_mode\">Näkymä</string>\n    <string name=\"action_display\">Näkymä</string>\n    <string name=\"action_display_grid\">Kompakti ruudukko</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_display_download_badge\">Ladatut luvut</string>\n    <string name=\"action_cancel\">Peruuta</string>\n    <string name=\"action_sort\">Järjestä</string>\n    <string name=\"action_install\">Asenna</string>\n    <string name=\"action_share\">Jaa</string>\n    <string name=\"action_save\">Tallenna</string>\n    <string name=\"action_reset\">Nollaa</string>\n    <string name=\"action_undo\">Kumoa</string>\n    <string name=\"action_open_log\">Avaa loki</string>\n    <string name=\"action_restore\">Palauta</string>\n    <string name=\"loading\">Ladataan…</string>\n    <string name=\"app_not_available\">Sovellus ei ole saatavilla</string>\n    <string name=\"pref_category_general\">Yleiset</string>\n    <string name=\"pref_category_reader\">Lukija</string>\n    <string name=\"pref_category_downloads\">Lataukset</string>\n    <string name=\"pref_category_advanced\">Kehittyneet</string>\n    <string name=\"pref_category_about\">Tietoja</string>\n    <string name=\"pref_library_columns\">Kohteita per rivi</string>\n    <string name=\"portrait\">Pystysuunta</string>\n    <string name=\"landscape\">Vaakataso</string>\n    <string name=\"pref_library_update_interval\">Automaattinen päivitys</string>\n    <string name=\"update_never\">Pois</string>\n    <string name=\"update_6hour\">Kuuden tunnin välein</string>\n    <string name=\"update_12hour\">12 tunnin välein</string>\n    <string name=\"update_24hour\">Päivittäin</string>\n    <string name=\"update_48hour\">Kahden päivän välein</string>\n    <string name=\"update_weekly\">Viikoittain</string>\n    <string name=\"all\">Kaikki</string>\n    <string name=\"pref_library_update_restriction\">Automaattisen päivityksen laitteistorajoitukset</string>\n    <string name=\"charging\">Latauksessa</string>\n    <string name=\"pref_update_only_non_completed\">Sarja on päättynyt</string>\n    <string name=\"pref_auto_update_manga_sync\">Päivitä luvun edistyminen lukemisen jälkeen</string>\n    <string name=\"default_category\">Oletus kategoria</string>\n    <string name=\"default_category_summary\">Kysy aina</string>\n    <string name=\"ext_update\">Päivitä</string>\n    <string name=\"ext_install\">Asenna</string>\n    <string name=\"ext_pending\">Odotetaan</string>\n    <string name=\"ext_downloading\">Ladataan</string>\n    <string name=\"ext_installing\">Asennetaan</string>\n    <string name=\"ext_installed\">Asennettu</string>\n    <string name=\"ext_trust\">Luota</string>\n    <string name=\"ext_untrusted\">Luottamaton</string>\n    <string name=\"ext_uninstall\">Poista asennus</string>\n    <string name=\"untrusted_extension\">Luottamattomat laajennokset</string>\n    <string name=\"untrusted_extension_message\">Haitallinen laajennus voi lukea tallennetut kirjautumistiedot Mihonista tai suorittaa luvatonta koodia.\n\\n\n\\nLuottamalla tähän laajennokseen hyväksyt nämä riskit.</string>\n    <string name=\"pref_fullscreen\">Koko näyttö</string>\n    <string name=\"pref_page_transitions\">Animoi sivusiirtymät</string>\n    <string name=\"pref_double_tap_anim_speed\">Tuplanäpäytyksen animaation nopeus</string>\n    <string name=\"pref_show_page_number\">Näytä sivunumero</string>\n    <string name=\"pref_crop_borders\">Rajaa reunat</string>\n    <string name=\"pref_custom_brightness\">Mukautettu kirkkaus</string>\n    <string name=\"pref_custom_color_filter\">Mukautettu värisuodatin</string>\n    <string name=\"pref_keep_screen_on\">Pidä näyttö päällä</string>\n    <string name=\"pref_skip_read_chapters\">Ohita luetuksi merkityt luvut</string>\n    <string name=\"pref_reader_navigation\">Navigointi</string>\n    <string name=\"pref_read_with_volume_keys\">Äänenvoimakkuus näppäimet</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Käännä äänenvoimakkuus näppäimet</string>\n    <string name=\"pref_read_with_long_tap\">Näytä pitkällä napautuksella</string>\n    <string name=\"pref_reader_theme\">Taustan väri</string>\n    <string name=\"white_background\">Valkoinen</string>\n    <string name=\"black_background\">Musta</string>\n    <string name=\"pref_viewer_type\">Oletuslukutila</string>\n    <string name=\"left_to_right_viewer\">Vasemmalta oikealle</string>\n    <string name=\"right_to_left_viewer\">Oikealta vasemmalle</string>\n    <string name=\"vertical_viewer\">Pystysuora</string>\n    <string name=\"webtoon_viewer\">Webtoon-tyylinen</string>\n    <string name=\"pager_viewer\">Sivutettu</string>\n    <string name=\"pref_image_scale_type\">Skaalauksen tyyppi</string>\n    <string name=\"scale_type_fit_screen\">Sovita näyttöön</string>\n    <string name=\"scale_type_stretch\">Venytä</string>\n    <string name=\"scale_type_fit_width\">Sovita leveys</string>\n    <string name=\"scale_type_fit_height\">Sovita korkeus</string>\n    <string name=\"scale_type_original_size\">Alkuperäinen koko</string>\n    <string name=\"scale_type_smart_fit\">Fiksu sovitus</string>\n    <string name=\"pref_zoom_start\">Zoomauksen alkusijainti</string>\n    <string name=\"zoom_start_automatic\">Automaattinen</string>\n    <string name=\"zoom_start_left\">Vasen</string>\n    <string name=\"zoom_start_right\">Oikea</string>\n    <string name=\"zoom_start_center\">Keskellä</string>\n    <string name=\"double_tap_anim_speed_0\">Ei animaatiota</string>\n    <string name=\"double_tap_anim_speed_normal\">Normaali</string>\n    <string name=\"double_tap_anim_speed_fast\">Nopea</string>\n    <string name=\"pref_rotation_type\">Oletuskiertotyyppi</string>\n    <string name=\"rotation_free\">Vapaa</string>\n    <string name=\"rotation_force_portrait\">Lukittu pystysuunta</string>\n    <string name=\"rotation_force_landscape\">Lukittu vaakataso</string>\n    <string name=\"color_filter_r_value\">Punainen</string>\n    <string name=\"color_filter_g_value\">Vihreä</string>\n    <string name=\"color_filter_b_value\">Sininen</string>\n    <string name=\"color_filter_a_value\">Alpha</string>\n    <string name=\"pref_remove_after_marked_as_read\">Manuaalisesti luetuksi merkitsemisen jälkeen</string>\n    <string name=\"pref_remove_after_read\">Lukemisen jälkeen</string>\n    <string name=\"disabled\">Pois käytöstä</string>\n    <string name=\"last_read_chapter\">Viimeksi luettu luku</string>\n    <string name=\"second_to_last\">Toiseksi viimeinen luku</string>\n    <string name=\"third_to_last\">Kolmanneksi viimenen luku</string>\n    <string name=\"fourth_to_last\">Neljänneksi viimeinen luku</string>\n    <string name=\"fifth_to_last\">Viidenneksi viimeinen luku</string>\n    <string name=\"pref_download_new\">Lataa uudet luvut</string>\n    <string name=\"services\">Seurantapalvelut</string>\n    <string name=\"pref_create_backup_summ\">Voidaan käyttää nykyisen kirjaston palauttamiseen</string>\n    <string name=\"pref_restore_backup_summ\">Palauta kirjasto varmuuskopiointi-tiedostosta</string>\n    <string name=\"pref_backup_interval\">Varmuuskopioinnin tiheys</string>\n    <string name=\"backup_created\">Varmuuskopio luotu</string>\n    <string name=\"restore_completed\">Palautus valmis</string>\n    <string name=\"backup_choice\">Mitä haluat varmuuskopioida?</string>\n    <string name=\"restoring_backup\">Palautetaan varmuuskopiota</string>\n    <string name=\"creating_backup\">Luodaan varmuuskopiota</string>\n    <string name=\"pref_clear_chapter_cache\">Tyhjennä lukujen välimuisti</string>\n    <string name=\"used_cache\">Käytössä: %1$s</string>\n    <string name=\"cache_deleted\">Välimuisti tyhjennetty. %1$d tiedostoa poistettu</string>\n    <string name=\"cache_delete_error\">Virhe tapahtui välimuistia tyhjentäessä</string>\n    <string name=\"pref_clear_cookies\">Tyhjennä keksit</string>\n    <string name=\"cookies_cleared\">Keksit tyhjennetty</string>\n    <string name=\"pref_clear_database\">Tyhjennä tietokanta</string>\n    <string name=\"pref_clear_database_summary\">Poista mangan historia, jota ei ole tallennettu kirjastoosi</string>\n    <string name=\"clear_database_confirmation\">Oletko varma? Luetut luvut ja eteneminen poistetaan muista kun kirjastossa olevista sarjoista</string>\n    <string name=\"clear_database_completed\">Tiedot poistettu</string>\n    <string name=\"version\">Versio</string>\n    <string name=\"pref_enable_acra\">Lähetä kaatumisilmoituksia</string>\n    <string name=\"pref_acra_summary\">Auttaa korjaamaan bugeja. Arkaluonteista tietoa ei lähetetä</string>\n    <string name=\"login_title\">%1$s kirjautuminen</string>\n    <string name=\"username\">Käyttäjätunnus</string>\n    <string name=\"password\">Salasana</string>\n    <string name=\"login\">Kirjaudu</string>\n    <string name=\"login_success\">Kirjauduttu sisään</string>\n    <string name=\"unknown_error\">Tuntematon virhe</string>\n    <string name=\"updating_category\">Päivitetään kategoriaa</string>\n    <string name=\"no_more_results\">Ei enempää tuloksia</string>\n    <string name=\"action_global_search_hint\">Globaali haku…</string>\n    <string name=\"delete_downloads_for_manga\">Poista ladatut luvut?</string>\n    <string name=\"copied_to_clipboard\">Kopioitu leikepöydälle\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Lähdettä ei ole asennettu: %1$s</string>\n    <string name=\"display_mode_chapter\">Luku %1$s</string>\n    <string name=\"chapter_downloading_progress\">Ladataan (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Virhe</string>\n    <string name=\"chapter_paused\">Pysäytetty</string>\n    <string name=\"show_title\">Nimike</string>\n    <string name=\"show_chapter_number\">Luvun numero</string>\n    <string name=\"sort_by_source\">Lähteen mukaan</string>\n    <string name=\"sort_by_number\">Luvun numeron mukaan</string>\n    <string name=\"manga_download\">Lataa</string>\n    <string name=\"confirm_delete_chapters\">Oletko varma että haluat poistaa valitut luvut?</string>\n    <string name=\"reading\">Luettavana</string>\n    <string name=\"completed\">Päättynyt</string>\n    <string name=\"score\">Arvosana</string>\n    <string name=\"title\">Nimike</string>\n    <string name=\"status\">Tila</string>\n    <string name=\"track_status\">Tila</string>\n    <string name=\"track_type\">Tyyppi</string>\n    <string name=\"error_category_exists\">Tämän niminen kategoria on jo olemassa!</string>\n    <string name=\"snack_categories_deleted\">Kategoriat poistettu</string>\n    <string name=\"pref_create_backup\">Luo varmuuskopio</string>\n    <string name=\"pref_restore_backup\">Palauta varmuuskopio</string>\n    <string name=\"local_source\">Paikalliset lähteet</string>\n    <string name=\"other_source\">Muut</string>\n    <string name=\"latest\">Viimeisimmät</string>\n    <string name=\"browse\">Selaa</string>\n    <string name=\"ongoing\">Jatkuva</string>\n    <string name=\"unknown\">Tuntematon</string>\n    <string name=\"licensed\">Lisensoitu</string>\n    <string name=\"remove_from_library\">Poista kirjastosta</string>\n    <string name=\"manga_added_library\">Lisätty kirjastoon</string>\n    <string name=\"manga_removed_library\">Poistettu kirjastosta</string>\n    <string name=\"download_unread\">Lukemattomat</string>\n    <string name=\"dropped\">Tiputettu</string>\n    <string name=\"on_hold\">Pidossa</string>\n    <string name=\"plan_to_read\">Aikomus lukea</string>\n    <string name=\"repeating\">Uudelleenluettava</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Tämä poistaa luvun lukupäivän. Haluatko jatkaa?</string>\n    <string name=\"dialog_with_checkbox_reset\">Resetoi kaikki luvut tästä sarjasta</string>\n    <string name=\"snack_add_to_library\">Lisää sarja kirjastoon?</string>\n    <string name=\"picture_saved\">Kuva tallennetu</string>\n    <string name=\"pref_color_filter_mode\">Värisuodattimen sekoitus tyyppi</string>\n    <string name=\"filter_mode_overlay\">Päällys</string>\n    <string name=\"filter_mode_multiply\">Monistettu</string>\n    <string name=\"filter_mode_screen\">Näyttö</string>\n    <string name=\"filter_mode_lighten\">Väitävä / Vaalentava</string>\n    <string name=\"filter_mode_darken\">Polttava / Tummentava</string>\n    <string name=\"label_help\">Apu</string>\n    <string name=\"no_results_found\">Ei tuloksia</string>\n    <string name=\"migration_selection_prompt\">Valitse lähde josta vaihdetaan</string>\n    <string name=\"action_webview_back\">Takaisin</string>\n    <string name=\"action_webview_forward\">Eteenpäin</string>\n    <string name=\"action_webview_refresh\">Päivitä</string>\n    <string name=\"pref_category_library\">Kirjasto</string>\n    <string name=\"ext_obsolete\">Vanhentunut</string>\n    <string name=\"obsolete_extension_message\">Tämä laajennos ei ole enää saatavilla. Se ei välttämättä toimi oikein ja voi aiheuttaa ongelmia Mihonin kanssa. Laajennoksen poistoa suositellaan.</string>\n    <string name=\"pref_date_format\">Päivämäärän muoto</string>\n    <string name=\"pref_category_library_update\">Globaali päivitys</string>\n    <string name=\"logout_title\">Kirjaa ulos kohteesta %1$s?</string>\n    <string name=\"logout\">Kirjaudu ulos</string>\n    <string name=\"logout_success\">Kirjauduttu ulos</string>\n    <string name=\"paused\">Pysäytetty</string>\n    <string name=\"label_more\">Lisää</string>\n    <string name=\"action_sort_latest_chapter\">Viimeisin luku</string>\n    <string name=\"action_view_chapters\">Näytä luvut</string>\n    <string name=\"action_cancel_all\">Peruuta kaikki</string>\n    <string name=\"theme_light\">Pois päältä</string>\n    <string name=\"theme_dark\">Päällä</string>\n    <string name=\"theme_system\">Seuraa järjestelmää</string>\n    <string name=\"pref_manage_notifications\">Hallitse ilmoituksia</string>\n    <string name=\"pref_category_security\">Turvallisuus</string>\n    <string name=\"lock_with_biometrics\">Vaadi lukituksen avaaminen</string>\n    <string name=\"lock_always\">Aina</string>\n    <string name=\"lock_never\">Ei koskaan</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflaren ohittaminen epäonnistui</string>\n    <string name=\"channel_new_chapters\">Lukujen päivitykset</string>\n    <string name=\"pref_category_display\">Näyttö</string>\n    <string name=\"ext_updates_pending\">Päivitettävät</string>\n    <string name=\"information_webview_outdated\">Päivitä WebView-sovellus yhteensopivuuden parantamiseksi</string>\n    <string name=\"notification_chapters_single\">Luku %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Luku %1$s ja %2$d lisää</string>\n    <string name=\"notification_chapters_multiple\">Luvut %1$s</string>\n    <string name=\"hide_notification_content\">Piilota ilmoitusten sisältö</string>\n    <string name=\"lock_when_idle\">Lukitse käyttämättömänä</string>\n    <string name=\"secure_screen\">Salaa näyttö</string>\n    <string name=\"secure_screen_summary\">Turvallinen ruutu piilottaa sovelluksen sisällön sovelluksia vaihdettaessa ja estää kuvakaappauksen ottamisen</string>\n    <string name=\"pref_disable_battery_optimization\">Poista akun optimointi käytöstä</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Auttaa taustalla pyörivien kirjaston päivitysten ja varmuuskopioiden kanssa</string>\n    <string name=\"battery_optimization_disabled\">Akun optimointi on jo poistettu käytöstä</string>\n    <string name=\"email\">Sähköpostiosoite</string>\n    <string name=\"pref_cutout_short\">Näytä sisältö leikkausalueella</string>\n    <string name=\"pref_always_show_chapter_transition\">Näytä aina luvun vaihdos</string>\n    <string name=\"action_menu\">Valikko</string>\n    <string name=\"action_newest\">Uusin</string>\n    <string name=\"action_oldest\">Vanhin</string>\n    <string name=\"action_move_to_top\">Siirrä alkuun</string>\n    <string name=\"action_move_to_bottom\">Siirrä loppuun</string>\n    <string name=\"channel_ext_updates\">Laajennuspäivitykset</string>\n    <string name=\"restoring_backup_canceled\">Palautus peruttu</string>\n    <string name=\"restoring_backup_error\">Varmuuskopion palautus epäonnistui</string>\n    <string name=\"creating_backup_error\">Varmuuskopiointi epäonnistui</string>\n    <string name=\"pref_skip_filtered_chapters\">Ohita suodatetut luvut</string>\n    <string name=\"label_downloaded_only\">Ladatut</string>\n    <string name=\"label_sources\">Lähteet</string>\n    <string name=\"updating_library\">Päivittää kirjastoa</string>\n    <string name=\"add_tracking\">Lisää seuranta</string>\n    <string name=\"in_library\">Kirjastossa</string>\n    <string name=\"add_to_library\">Lisää kirjastoon</string>\n    <string name=\"website\">Kotisivu</string>\n    <string name=\"action_unpin\">Poista kiinnitys</string>\n    <string name=\"action_pin\">Kiinnitä</string>\n    <string name=\"action_select_inverse\">Valitse käänteinen</string>\n    <string name=\"vertical_plus_viewer\">Jatkuva pystysuora</string>\n    <string name=\"information_webview_required\">WebView on pakollinen Mihonissa</string>\n    <string name=\"restore_in_progress\">Palautus on jo käynnissä</string>\n    <string name=\"backup_in_progress\">Varmuuskopiointi on jo käynnissä</string>\n    <string name=\"pref_webtoon_side_padding\">Sivuntäyttö</string>\n    <string name=\"licenses\">Avoimen lähdekoodin lisenssit</string>\n    <string name=\"recent_manga_time\">Luku. %1$s - %2$s</string>\n    <string name=\"manga_info_collapse\">Vähemmän</string>\n    <string name=\"manga_info_expand\">Enemmän</string>\n    <string name=\"pinned_sources\">Kiinnitetyt</string>\n    <string name=\"pref_category_reading\">Luettavana</string>\n    <string name=\"check_for_updates\">Tarkista päivitykset</string>\n    <string name=\"last_used_source\">Viimeksi käytetty</string>\n    <string name=\"local_source_help_guide\">Paikallinen lähdeopas</string>\n    <string name=\"restore_duration\">%02d min, %02d sek</string>\n    <string name=\"downloaded_only_summary\">Suodattaa kaikki sarjat kirjastossasi</string>\n    <string name=\"gray_background\">Harmaa</string>\n    <string name=\"pref_category_for_this_series\">Tälle sarjalle</string>\n    <string name=\"viewer\">Lukutila</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Laiteasetuksia ei voitu avata</string>\n    <string name=\"tracking_info\">Yksisuuntainen synkronointi lukujen seurantapalveluiden päivittämiseksi. Määritä yksittäisten mangamerkintöjen seuranta seurantapainikkeesta.</string>\n    <string name=\"pref_refresh_library_covers\">Päivitä kirjaston manga-kannet</string>\n    <string name=\"sort_by_upload_date\">Latauspäivämäärän mukaan</string>\n    <string name=\"label_data\">Tiedot</string>\n    <string name=\"backup_restore_missing_sources\">Puuttuvat lähteet:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Varmuuskopio ei sisällä mangaa.</string>\n    <string name=\"invalid_backup_file\">Virheellinen varmuuskopio:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Tarkista uusi kansi ja tiedot päivitettäessä kirjastoa</string>\n    <string name=\"pref_library_update_refresh_metadata\">Päivitä metatiedot automaattisesti</string>\n    <string name=\"action_migrate\">Siirrä</string>\n    <string name=\"action_display_comfortable_grid\">Mukava ruudukko</string>\n    <string name=\"tabs_header\">Välilehdet</string>\n    <string name=\"action_display_show_tabs\">Näytä kategorioiden välilehdet</string>\n    <string name=\"page_list_empty_error\">Sivuja ei löytynyt</string>\n    <string name=\"action_disable_all\">Poista kaikki käytöstä</string>\n    <string name=\"action_enable_all\">Ota kaikki käyttöön</string>\n    <string name=\"pref_show_reading_mode_summary\">Näytä nykyinen tila lyhyesti, kun lukija avataan</string>\n    <string name=\"pref_show_reading_mode\">Näytä lukutila</string>\n    <string name=\"action_start\">Aloita</string>\n    <string name=\"loader_not_implemented_error\">Lähdettä ei löytynyt</string>\n    <string name=\"action_disable\">Poista käytöstä</string>\n    <string name=\"requires_app_restart\">Edellyttää sovelluksen käynnisstämisen uudelleen</string>\n    <string name=\"label_network\">Verkko</string>\n    <string name=\"tapping_inverted_both\">Molemmat</string>\n    <string name=\"tapping_inverted_vertical\">Pystysuora</string>\n    <string name=\"tapping_inverted_horizontal\">Vaakasuora</string>\n    <string name=\"tapping_inverted_none\">Ei mitään</string>\n    <string name=\"pref_read_with_tapping_inverted\">Käännä näpäyttäminen</string>\n    <string name=\"unknown_status\">Tuntematon tila</string>\n    <string name=\"unknown_author\">Tuntematon tekijä</string>\n    <string name=\"updated_version\">Päivitetty versioon v%1$s</string>\n    <string name=\"whats_new\">Mitä uutta</string>\n    <string name=\"download_insufficient_space\">Lukuja ei voitu ladata vähäisen tallennustilan vuoksi</string>\n    <string name=\"action_global_search_query\">Etsi \\\"%1$s\\\" globaalisesti</string>\n    <string name=\"pref_category_reading_mode\">Lukutila</string>\n    <string name=\"pref_category_theme\">Teema</string>\n    <string name=\"action_sort_date_added\">Lisäyspäivämäärä</string>\n    <string name=\"no_pinned_sources\">Sinulla ei ole kiinnitettyjä lähteitä</string>\n    <string name=\"channel_complete\">Valmis</string>\n    <string name=\"channel_progress\">Edistyminen</string>\n    <string name=\"channel_errors\">Virheet</string>\n    <string name=\"backup_restore_missing_trackers\">Seurantapalvelimet joihin et ole kirjautunut sisään:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Poista kirjanmerkityt luvut</string>\n    <string name=\"pref_category_delete_chapters\">Poista luvut</string>\n    <string name=\"ext_nsfw_warning\">Tämän laajennoksen lähteet voivat sisältää NSFW (18+) -sisältöä</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Tämä ei estä epävirallisia tai mahdollisesti väärin merkittyjä laajennuksia näyttämästä NSFW 18+ sisältöä sovelluksessa.</string>\n    <string name=\"no_chapters_error\">Lukuja ei löytynyt</string>\n    <string name=\"chapter_settings_updated\">Päivitetyt luvun oletusasetukset</string>\n    <string name=\"set_chapter_settings_as_default\">Aseta oletukseksi</string>\n    <string name=\"also_set_chapter_settings_for_library\">Koskee myös kaikkia kirjastoni mangoja</string>\n    <string name=\"confirm_set_chapter_settings\">Haluatko varmasti tallentaa nämä asetukset oletuksena?</string>\n    <string name=\"chapter_settings\">Luvun asetukset</string>\n    <string name=\"share_page_info\">%1$s: %2$s, sivu %3$d</string>\n    <string name=\"action_search_settings\">Hakuasetukset</string>\n    <string name=\"downloaded_chapters\">Ladatut luvut</string>\n    <string name=\"manga_from_library\">Manga kirjastosta</string>\n    <string name=\"pref_incognito_mode_summary\">Keskeyttää lukuhistorian</string>\n    <string name=\"pref_incognito_mode\">Incognito-tila</string>\n    <string name=\"pref_clear_history\">Tyhjennä historia</string>\n    <string name=\"clear_history_confirmation\">Oletko varma? Koko historia menetetään.</string>\n    <string name=\"clear_history_completed\">Historia poistettu</string>\n    <string name=\"spen_next_page\">Seuraava sivu</string>\n    <string name=\"spen_previous_page\">Edellinen sivu</string>\n    <string name=\"migration_help_guide\">Lähteen siirto-opas</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) lähteet</string>\n    <string name=\"pref_show_nsfw_source\">Näytä lähde- ja lisäosaluettelossa</string>\n    <string name=\"file_picker_error\">Tiedostonvalitsinsovellusta ei löytynyt</string>\n    <string name=\"myanimelist_relogin\">Kirjaudu uudelleen MAL: iin</string>\n    <string name=\"pref_viewer_nav\">Navigointiasettelu</string>\n    <string name=\"edge_nav\">Reuna</string>\n    <string name=\"kindlish_nav\">Kindle tyylinen</string>\n    <string name=\"l_nav\">L-muotoinen</string>\n    <string name=\"pref_dump_crash_logs\">Poista kaatumislokit</string>\n    <string name=\"track_finished_reading_date\">Lopetuspäivämäärä</string>\n    <string name=\"track_started_reading_date\">Aloituspäivämäärä</string>\n    <string name=\"pref_dump_crash_logs_summary\">Tallentaa virhelokit tiedostoon jaettavaksi kehittäjien kanssa</string>\n    <string name=\"action_desc\">Laskeva</string>\n    <string name=\"action_asc\">Nouseva</string>\n    <string name=\"action_order_by_chapter_number\">Lukunumeron mukaan</string>\n    <string name=\"action_order_by_upload_date\">Lisäyspäivämäärän mukaan</string>\n    <string name=\"action_filter_tracked\">Seuratut</string>\n    <string name=\"action_display_show_number_of_items\">Näytä kohteiden määrä</string>\n    <string name=\"right_and_left_nav\">Oikea ja vasen</string>\n    <string name=\"pref_dual_page_split\">Jaa leveät sivut</string>\n    <string name=\"pref_dual_page_invert_summary\">Jos jaettujen leveiden sivujen sijoittelu ei vastaa lukusuuntaa</string>\n    <string name=\"pref_dual_page_invert\">Käännä jaettujen sivujen sijoittelu</string>\n    <string name=\"backup_restore_content_full\">Varmuuskopiotiedoston tiedot palautetaan.\n\\n\n\\nSinun on asennattava puuttuvat laajennukset ja kirjauduttava seurantapalveluihin jälkeenpäin käyttääksesi niitä.</string>\n    <string name=\"nav_zone_right\">Oikea</string>\n    <string name=\"nav_zone_left\">Vasen</string>\n    <string name=\"nav_zone_next\">Seuraava</string>\n    <string name=\"nav_zone_prev\">Edellinen</string>\n    <string name=\"pref_show_navigation_mode_summary\">Näytä napautusalueet, kun lukija avataan</string>\n    <string name=\"pref_show_navigation_mode\">Näytä navigointiasettelun peittokuva</string>\n    <string name=\"pref_dns_over_https\">DNS HTTPS:n kautta</string>\n    <string name=\"exclude\">Lukuun ottamatta: %s</string>\n    <string name=\"include\">Sisällytä: %s</string>\n    <string name=\"none\">Ei mitään</string>\n    <string name=\"action_sort_chapter_fetch_date\">Haettu päivämäärä</string>\n    <string name=\"pref_download_new_categories_details\">Poissuljettuihin kategorioihin kuuluvia mangoja ei ladata, vaikka ne olisivat myös sisällytetyissä kategorioissa.</string>\n    <string name=\"pref_category_auto_download\">Automaattinen lataus</string>\n    <string name=\"pref_library_update_categories_details\">Poissuljettuihin kategorioihin sisältyvää mangaa ei päivitetä, vaikka ne olisivat myös sisällytetyissä kategorioissa.</string>\n    <string name=\"action_show_errors\">Näytä lisätiedot</string>\n    <string name=\"update_check_eol\">Tätä Android-versiota ei enää tueta</string>\n    <string name=\"clipboard_copy_error\">Kopiointi leikepöydälle epäonnistui</string>\n    <string name=\"rotation_landscape\">Vaakatasossa</string>\n    <string name=\"rotation_portrait\">Pystysuunnassa</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Luo kansioita manga-otsikon mukaan</string>\n    <string name=\"pref_create_folder_per_manga\">Tallenna sivut erillisiin kansioihin</string>\n    <string name=\"pref_reader_actions\">Toiminnot</string>\n    <string name=\"rotation_type\">Kierron tyyppi</string>\n    <string name=\"pref_grayscale\">Harmaasävy</string>\n    <string name=\"notification_incognito_text\">Poista incognito-tila käytöstä</string>\n    <string name=\"automatic_background\">Automaattinen</string>\n    <string name=\"cancel_all_for_series\">Peruuta kaikki tälle sarjalle</string>\n    <string name=\"error_no_match\">Yhtään osumaa ei löytynyt</string>\n    <string name=\"source_unsupported\">Lähdettä ei tueta</string>\n    <string name=\"unread\">Lukemattomat</string>\n    <string name=\"local_invalid_format\">Väärä lukuformaatti</string>\n    <string name=\"chapter_not_found\">Lukua ei löytynyt</string>\n    <string name=\"restrictions\">Rajoitukset: %s</string>\n    <string name=\"date\">Päivämäärä</string>\n    <string name=\"off\">Pois päältä</string>\n    <string name=\"on\">Päällä</string>\n    <string name=\"getting_started_guide\">Aloitusopas</string>\n    <string name=\"download_queue_size_warning\">Varoitus: massalataukset voivat johtaa siihen, että lähteet muuttuvat hitaammiksi käyttää ja/tai ne estävät Mihonin käytön. Napauta saadaksesi lisätietoja.</string>\n    <string name=\"action_show_manga\">Näytä manga</string>\n    <string name=\"action_display_cover_only_grid\">Kansikuva ruudukko</string>\n    <string name=\"theme_monet\">Dynaaminen</string>\n    <string name=\"theme_greenapple\">Vihreä omena</string>\n    <string name=\"label_default\">Oletus</string>\n    <string name=\"action_display_local_badge\">Laitteelle tallennettu manga</string>\n    <string name=\"action_sort_count\">Yhteenlaskettu manga</string>\n    <string name=\"action_start_downloading_now\">Aloita lataaminen nyt</string>\n    <string name=\"theme_yinyang\">Ying ja Yang</string>\n    <string name=\"theme_midnightdusk\">Keskiyön hämärä</string>\n    <string name=\"theme_strawberrydaiquiri\">Mansikka Daiquiri</string>\n    <string name=\"pref_category_appearance\">Ulkonäkö</string>\n    <string name=\"theme_tealturquoise\">Sinivihreä ja turkoosi</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Täysin musta pimeätila</string>\n    <string name=\"pref_update_only_started\">Ei lukemattomia lukuja</string>\n    <string name=\"relative_time_today\">Tänään</string>\n    <string name=\"pref_update_only_completely_read\">Sarjalla on lukemattomia kappaleita</string>\n    <string name=\"pref_app_theme\">Sovelluksen teema</string>\n    <string name=\"label_warning\">Varoitus</string>\n    <string name=\"confirm_lock_change\">Tunnistaudu vahvistaaksesi muutokset</string>\n    <string name=\"action_display_language_badge\">Kieli</string>\n    <string name=\"action_move_to_top_all_for_series\">Siirrä sarja päällimmäiseksi</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"update_72hour\">Joka 3. Päivä</string>\n    <string name=\"connected_to_wifi\">Ainoastaan WiFillä</string>\n    <string name=\"pref_inverted_colors\">Käänteisväri</string>\n    <string name=\"ext_app_info\">Sovelluksen tiedot</string>\n    <string name=\"ext_installer_legacy\">Perinteinen</string>\n    <string name=\"rotation_reverse_portrait\">Käänteinen kuva</string>\n    <string name=\"categorized_display_settings\">Kategoria kohtaiset asetukset lajittelulle ja näytölle</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku on pysähtynyt</string>\n    <string name=\"disabled_nav\">Poistettu käytöstä</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Asenna ja aja Shizuku käyttääksesi Shizukua laajennusten asentamiseen.</string>\n    <string name=\"ext_update_all\">Päivitä kaikki</string>\n    <string name=\"extension_api_error\">Laajennusluettelon halu epäonnistui</string>\n    <string name=\"ext_install_service_notif\">Asennetaan laajennusta…</string>\n    <string name=\"ext_installer_pref\">Asentaja</string>\n    <string name=\"action_remove_everything\">Poista kaikki</string>\n    <string name=\"action_sort_last_manga_update\">Viimeisin manga päivitys</string>\n    <string name=\"action_sort_unread_count\">Lukemattomien määrä</string>\n    <string name=\"delete_category\">Poista kategoria</string>\n    <string name=\"action_track\">Seuraa</string>\n    <string name=\"pref_low\">Alhainen</string>\n    <string name=\"pref_remove_exclude_categories\">Poissuljetut kategoriat</string>\n    <string name=\"pref_lowest\">Alhaisin</string>\n    <string name=\"empty_backup_error\">Ei varmuuskopioitavia sarjoja kirjastossa</string>\n    <string name=\"multi_lang\">Useampi</string>\n    <string name=\"pref_navigate_pan\">Panoroi leveitä kuvia napauttamalla</string>\n    <string name=\"save_chapter_as_cbz\">Tallenna CBZ-arkistona</string>\n    <string name=\"pref_landscape_zoom\">Zoomaa vaakasuuntaisiin kuviin</string>\n    <string name=\"pref_highest\">Korkein</string>\n    <string name=\"ext_info_language\">Kieli</string>\n    <string name=\"action_search_hint\">Haku…</string>\n    <string name=\"theme_lavender\">Laventeli</string>\n    <string name=\"pref_app_language\">Sovelluksen kieli</string>\n    <string name=\"ext_info_version\">Versio</string>\n    <string name=\"action_close\">Sulje</string>\n    <string name=\"theme_tidalwave\">Vuorovesiaalto</string>\n    <string name=\"pref_high\">Korkea</string>\n    <string name=\"download_ahead\">Etukäteen lataus</string>\n    <string name=\"auto_download_while_reading\">Automaattinen lataus luetessa</string>\n    <string name=\"split_tall_images_summary\">Parantaa lukijan suorituskykyä</string>\n    <string name=\"delete_category_confirmation\">Haluatko poistaa kategorian \\\"%s\\\"?</string>\n    <string name=\"download_ahead_info\">Toimii vain kirjastossa oleville sarjoille joissa nykyinen ja seuraava luku on jo ladattu</string>\n    <string name=\"restore_miui_warning\">Varmuuskopiointi/palautus ei välttämättä toimi oikein, jos MIUI-optimointi on poistettu käytöstä.</string>\n    <string name=\"popular\">Suositut</string>\n    <string name=\"publishing_finished\">Julkaiseminen päättynyt</string>\n    <string name=\"description_placeholder\">Ei kuvausta</string>\n    <string name=\"reading_list\">Lukulista</string>\n    <string name=\"are_you_sure\">Oletko varma?</string>\n    <string name=\"unfinished_list\">Keskeneräiset</string>\n    <string name=\"source_empty_screen\">Lähdettä ei löydetty</string>\n    <string name=\"missing_storage_permission\">Tallennusoikeuksia ei myönnetty</string>\n    <string name=\"webview_data_deleted\">WebView-tiedot tyhjennetty</string>\n    <string name=\"pref_tablet_ui_mode\">Tabletti käyttöliittymä</string>\n    <string name=\"complete_list\">Luetut</string>\n    <string name=\"error_saving_picture\">Virhe tallentaessa kuvaa</string>\n    <string name=\"update_already_running\">Kirjastoa ollaan jo päivitämässä</string>\n    <string name=\"updates_last_update_info\">Kirjasto päivitetty viimeksi: %1$s</string>\n    <string name=\"notification_update_error\">%1$d päivitys(tä) epäonnistui</string>\n    <string name=\"skipped_reason_completed\">Ohitettu, koska sarja on päättynyt</string>\n    <string name=\"information_empty_category_dialog\">Sinulla ei vielä ole kategorioita.</string>\n    <string name=\"on_hiatus\">Tauolla</string>\n    <string name=\"not_installed\">Ei asennettu</string>\n    <string name=\"skipped_reason_not_started\">Ohitettu, koska yhtään lukua ei ole luettu sarjasta</string>\n    <string name=\"update_check_open\">Avaa GitHubissa</string>\n    <string name=\"label_background_activity\">Taustatoiminta</string>\n    <string name=\"help_translate\">Auta kääntämisessä</string>\n    <string name=\"pref_clear_webview_data\">Tyhjennä WebView-tiedot</string>\n    <string name=\"privacy_policy\">Tietosuojakäytäntö</string>\n    <string name=\"channel_app_updates\">Sovelluspäivitykset</string>\n    <string name=\"clear_database_source_item_count\">%1$d sarjaa joita ei olla lisätty kirjastoon tietokanassa</string>\n    <string name=\"database_clean\">Ei mitään tyhjennettävää</string>\n    <string name=\"pref_reset_viewer_flags\">Poista sarjakohtaiset lukijan asetukset</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Poista kaikkien sarjojen lukutila ja lukusuunta</string>\n    <string name=\"cancelled\">Peruttu</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Sivun %d tiedostopolkua ei löytynyt</string>\n    <string name=\"enhanced_services\">Parannetut seurantapalvelut</string>\n    <string name=\"pref_reset_viewer_flags_error\">Lukijan asetuksia ei voitu poistaa</string>\n    <string name=\"local_filter_order_by\">Järjestä</string>\n    <string name=\"manga_cover\">Kansikuva</string>\n    <string name=\"error_sharing_cover\">Virhe jakaessa kansikuvaa</string>\n    <string name=\"learn_more\">Napauta saadaksesi lisätietoja</string>\n    <string name=\"ext_info_age_rating\">Ikäluokitus</string>\n    <string name=\"tracking_guide\">Seurantaopas</string>\n    <string name=\"pref_reset_viewer_flags_success\">Kaikki lukijan asetukset poistettu</string>\n    <string name=\"pref_verbose_logging\">Yksityiskohtainen kirjaaminen</string>\n    <string name=\"cover_saved\">Kansikuva tallennettu</string>\n    <string name=\"error_saving_cover\">Virhe tallentaessa kansikuvaa</string>\n    <string name=\"skipped_reason_not_caught_up\">Ohitettu, koska sarjassa on luettomia lukuja</string>\n    <string name=\"skipped_reason_not_always_update\">Ohitettu, koska sarja ei vaadi päivityksiä</string>\n    <string name=\"remove_manga\">Olet poistamassa \\\"%s\\\" kirjastostasi</string>\n    <string name=\"pref_verbose_logging_summary\">Kirjoittaa yksityiskohtaiset lokit järjestelmälokiin (heikentää sovelluksen suorituskykyä)</string>\n    <string name=\"backup_info\">Varmuuskopioita kannattaa säilyttää myös muissa paikoissa.</string>\n    <string name=\"wish_list\">Toivelista</string>\n    <string name=\"cant_open_last_read_chapter\">Viimeksi luettua lukua ei voitu avata</string>\n    <string name=\"selected\">Valitut</string>\n    <string name=\"scanlator\">Skanlaattori</string>\n    <string name=\"label_data_storage\">Data ja tallennustila</string>\n    <string name=\"label_stats\">Tilastotiedot</string>\n    <string name=\"label_downloaded\">Ladattu</string>\n    <string name=\"action_sort_next_updated\">Seuraava odotettu päivitys</string>\n    <string name=\"action_sort_tracker_score\">Seurannan pisteytys</string>\n    <string name=\"action_update_category\">Päivitä kategoria</string>\n    <string name=\"action_display_show_continue_reading_button\">Jatka lukemista painike</string>\n    <string name=\"action_apply\">Käytä</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"action_revert_to_default\">Palauta oletus</string>\n    <string name=\"crash_screen_description\">%s kohtasi odottamattoman virheen. Ehdotamme että jaat kaatumisen lokitiedot tukikanavallemme Discordissa.</string>\n    <string name=\"delete_downloaded\">Poista ladatut</string>\n    <string name=\"create_backup_file_error\">Varmuuskopiotiedoston luonti epäonnistui</string>\n    <string name=\"confirm_add_duplicate_manga\">Kirjastossasi on jo samanniminen merkintä.\n\\n\n\\nHaluatko silti jatkaa?</string>\n    <string name=\"crash_screen_title\">Hupsista!</string>\n    <string name=\"copied_to_clipboard_plain\">Kopioitu leikepöydälle</string>\n    <string name=\"crash_screen_restart_application\">Uudelleenkäynnistä applikaatio</string>\n    <string name=\"custom_cover\">Mukautettu kansikuva</string>\n    <string name=\"not_selected\">Ei valitut</string>\n    <string name=\"action_menu_overflow_description\">Lisää asetuksia</string>\n    <string name=\"label_local\">Paikallinen</string>\n    <string name=\"label_started\">Aloitettu</string>\n    <string name=\"action_open_random_manga\">Avaa satunnainen merkintä</string>\n    <string name=\"action_copy_to_clipboard\">Kopioi leikepöydälle</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Siirrä sarja pohjimmaiseksi</string>\n    <string name=\"action_not_now\">Ei nyt</string>\n    <string name=\"internal_error\">Sisäinen virhe: Lisätietoja saat kaatumisen lokitiedoista</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Akun käyttö taustalla</string>\n    <string name=\"pref_reader_summary\">Lukutila, näyttö, navigointi</string>\n    <string name=\"pref_browse_summary\">Lähteet, laajennokset, globaali haku</string>\n    <string name=\"pref_backup_summary\">Manuaaliset ja automaattiset varmuuskopiot, tallennustila</string>\n    <string name=\"pref_security_summary\">Applikaation lukko, turvallinen ruutu</string>\n    <string name=\"pref_advanced_summary\">Kaatumislokien vedos, akun optimoinnit</string>\n    <string name=\"theme_nord\">Pohjoismainen</string>\n    <string name=\"pref_relative_format\">Suhteelliset aikaleimat</string>\n    <string name=\"pref_relative_format_summary\">Käytä muotoa \\\"%1$s\\\", kuin muotoa \\\"%2$s\\\"</string>\n    <string name=\"ext_permission_install_apps_warning\">Laajennosten asentamiseen tarvitaan lupia. Napauta tästä myöntääksesi luvat.</string>\n    <string name=\"action_add_repo\">Lisää laajennosten lähde</string>\n    <string name=\"label_add_repo_input\">Laajennosten lähteen URL</string>\n    <string name=\"action_add_repo_message\">Lisää laajennosten lähteitä Mihoniin. URL-osoitteen tulisi päättyä \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">Tämä laajennosten lähde on jo lisättynä!</string>\n    <string name=\"action_delete_repo\">Poista laajennosten lähde</string>\n    <string name=\"invalid_repo_name\">Epäkelpo laajennosten lähteen URL-osoite</string>\n    <string name=\"delete_repo_confirmation\">Haluatko poistaa laajennosten lähteen \\\"%s\\\"?</string>\n    <string name=\"pref_page_rotate_invert\">Peilaa käännetyt leveät sivut</string>\n    <string name=\"pref_double_tap_zoom\">Tuplanapauta lähentääksesi</string>\n    <string name=\"pref_flash_page_summ\">Vähentää haamujälkiä e-paperi näytöillä</string>\n    <string name=\"pref_skip_dupe_chapters\">Ohita kaksoisluvut</string>\n    <string name=\"split_tall_images\">Jaa korkeat kuvat</string>\n    <string name=\"action_create\">Luo</string>\n    <string name=\"pref_page_rotate\">Sovita leveät sivut kääntämällä</string>\n    <string name=\"pref_hide_threshold\">Valikon piilottamisen herkkyys vierittäessä</string>\n    <string name=\"pref_flash_page\">Väläytä näyttöä sivunvaihdon yhteydessä</string>\n    <string name=\"pref_storage_location_info\">Käytetään automaattisille varmuuskopioille, lukujen latauksille ja paikallisille lähteille.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Vältä keskeytyksiä pitkään jatkuvissa toimenpiteissä, kuten kirjaston päivitys, lataukset, ja varmuuskopion palautukset.</string>\n    <string name=\"pref_appearance_summary\">Teema, ajan ja päivämäärän formaatti</string>\n    <string name=\"pref_downloads_summary\">Automaattinen lataus, ennakkolataus</string>\n    <string name=\"pref_tracking_summary\">Yksisuuntainen synkronointi, paranneltu synkronointi</string>\n    <string name=\"pref_library_summary\">Kategoriat, globaalit päivitykset, luvun pyyhkäisy</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fil/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Pagkatapos ng %1$s minuto</item>\n        <item quantity=\"other\">Pagkatapos ng %1$s (na) minuto</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategorya</item>\n        <item quantity=\"other\">%d (na) kategorya</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Ang extension ay maaari nang i-update</item>\n        <item quantity=\"other\">Ang mga %d (na) extension ay maaari nang i-update</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Mga kabanata %1$s at isa pa</item>\n        <item quantity=\"other\">Mga kabanata %1$s at %2$d pa</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d bagong kabanata</item>\n        <item quantity=\"other\">%1$d (na) bagong kabanata</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Para sa %d na entry</item>\n        <item quantity=\"other\">Para sa %d na mga entry</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s kabanata</item>\n        <item quantity=\"other\">%1$s (na) kabanata</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s na lang</item>\n        <item quantity=\"other\">%1$s pa ang nasa queue</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Na-restore sa loob ng %1$s na may %2$s error</item>\n        <item quantity=\"other\">Na-restore sa loob ng %1$s na may %2$s (na) error</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d tracker</item>\n        <item quantity=\"other\">%d na tracker</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Nilaktawan ang %d na kabanata, maaaring ito ay wala sa source o na-filter ang mga ito</item>\n        <item quantity=\"other\">Nilaktawan ang %d na mga kabanata, maaaring wala sa source o na-filter ang mga ito</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Kahapon</item>\n        <item quantity=\"other\">%1$d araw na ang nakakalipas</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Susunod na hindi pa nababasang kabanata</item>\n        <item quantity=\"other\">Susunod na %d hindi pa nababasang kabanata</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Sunod na kabanata</item>\n        <item quantity=\"other\">Susunod na %d kabanata</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Nawawalang %1$s na kabanata</item>\n        <item quantity=\"other\">Nawawalang %1$s na mga kabanata</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 araw</item>\n        <item quantity=\"other\">%d (na) araw</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d na repo</item>\n        <item quantity=\"other\">%d na mga repo</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Bukas</item>\n        <item quantity=\"other\">Sa loob ng %1$d na araw</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 pahina</item>\n        <item quantity=\"other\">%1$s na mga pahina</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fil/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_webview_refresh\">I-refresh</string>\n    <string name=\"action_webview_forward\">Sumulong</string>\n    <string name=\"action_webview_back\">Bumalik</string>\n    <string name=\"action_restore\">I-restore</string>\n    <string name=\"action_open_log\">Buksan ang log</string>\n    <string name=\"action_undo\">I-undo</string>\n    <string name=\"action_reset\">I-reset</string>\n    <string name=\"action_save\">I-save</string>\n    <string name=\"action_share\">Ibahagi</string>\n    <string name=\"action_install\">I-install</string>\n    <string name=\"action_move_to_bottom\">Ibaba</string>\n    <string name=\"action_move_to_top\">Itaas</string>\n    <string name=\"action_oldest\">Pinakaluma</string>\n    <string name=\"action_newest\">Pinakabago</string>\n    <string name=\"action_sort\">Ayusin</string>\n    <string name=\"action_cancel_all\">Kanselahin lahat</string>\n    <string name=\"action_cancel\">Kanselahin</string>\n    <string name=\"action_unpin\">I-unpin</string>\n    <string name=\"action_pin\">I-pin</string>\n    <string name=\"action_disable\">Isara</string>\n    <string name=\"action_display_show_tabs\">Ipakita ang mga tab ng kategorya</string>\n    <string name=\"action_display_download_badge\">Bilang ng kabanatang na-download</string>\n    <string name=\"action_display_comfortable_grid\">Kumportableng grid</string>\n    <string name=\"action_display_list\">Listahan</string>\n    <string name=\"action_display_grid\">Siksik na grid</string>\n    <string name=\"action_display\">Pagpapakita</string>\n    <string name=\"action_display_mode\">Istilo ng pagpapakita</string>\n    <string name=\"action_migrate\">Ilipat</string>\n    <string name=\"action_open_in_web_view\">Buksan sa WebView</string>\n    <string name=\"action_open_in_browser\">Buksan sa browser</string>\n    <string name=\"action_resume\">Magpatuloy</string>\n    <string name=\"action_start\">Simulan</string>\n    <string name=\"action_remove\">Tanggalin</string>\n    <string name=\"action_retry\">Subukan muli</string>\n    <string name=\"action_next_chapter\">Susunod na kabanata</string>\n    <string name=\"action_previous_chapter\">Nakaraang kabanata</string>\n    <string name=\"action_pause\">Ihinto</string>\n    <string name=\"action_view_chapters\">Tingnan ang mga kabanata</string>\n    <string name=\"action_edit_cover\">I-edit ang pabalat</string>\n    <string name=\"action_move_category\">I-set ang kategorya</string>\n    <string name=\"action_add_category\">Magdagdag ng kategorya</string>\n    <string name=\"action_edit_categories\">Ayusin ang kategorya</string>\n    <string name=\"action_rename_category\">Palitan ang pangalan ng kategorya</string>\n    <string name=\"action_add\">Magdagdag</string>\n    <string name=\"action_edit\">Isaayos</string>\n    <string name=\"action_disable_all\">Di-paganahin lahat</string>\n    <string name=\"action_enable_all\">Paganahin lahat</string>\n    <string name=\"action_update_library\">I-update ang Aklatan</string>\n    <string name=\"action_delete\">Burahin</string>\n    <string name=\"action_remove_bookmark\">I-unbookmark ang kabanata</string>\n    <string name=\"action_bookmark\">I-bookmark ang kabanata</string>\n    <string name=\"action_download\">I-download</string>\n    <string name=\"action_mark_previous_as_read\">Markahang nabasa ang nauna</string>\n    <string name=\"action_mark_as_read\">Markahang nabasa na</string>\n    <string name=\"action_mark_as_unread\">Markahang babasahin</string>\n    <string name=\"action_select_inverse\">Baligtarin</string>\n    <string name=\"action_select_all\">Piliin lahat</string>\n    <string name=\"action_global_search\">Pangkalahatang Paghanap</string>\n    <string name=\"action_search\">Maghanap</string>\n    <string name=\"action_sort_latest_chapter\">Pinakabagong kabanata</string>\n    <string name=\"action_sort_last_read\">Huling binasa</string>\n    <string name=\"action_sort_total\">Dami ng kabanata</string>\n    <string name=\"action_sort_alpha\">Pa-alpabeto</string>\n    <string name=\"action_filter_empty\">Tanggalin ang pansala</string>\n    <string name=\"action_filter_unread\">Hindi Nabasa</string>\n    <string name=\"action_filter_bookmarked\">Na-bookmark</string>\n    <string name=\"action_filter\">Pansala</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_settings\">Mga setting</string>\n    <string name=\"history\">Kasaysayan</string>\n    <string name=\"track\">Tina-track</string>\n    <string name=\"chapters\">Mga Kabanata</string>\n    <string name=\"manga\">Mga nilalaman ng aklatan</string>\n    <string name=\"categories\">Kategorya</string>\n    <string name=\"information_empty_category\">Wala ka pang kategorya. Pindutin ang plus button para gumawa ng isa para sa pag-aayos ng iyong aklatan.</string>\n    <string name=\"information_empty_library\">Walang laman ang iyong aklatan</string>\n    <string name=\"information_no_recent_manga\">Walang binasa kamakailan</string>\n    <string name=\"information_no_recent\">Walang kamakailang update</string>\n    <string name=\"information_no_downloads\">Walang dina-download</string>\n    <string name=\"label_help\">Tulong</string>\n    <string name=\"label_extension_info\">Tungkol sa extension</string>\n    <string name=\"label_extensions\">Mga Extension</string>\n    <string name=\"label_migration\">Maglipat</string>\n    <string name=\"label_backup\">Pag-backup at Pag-restore</string>\n    <string name=\"label_sources\">Mga Source</string>\n    <string name=\"label_recent_manga\">Kasaysayan</string>\n    <string name=\"label_recent_updates\">Bago</string>\n    <string name=\"label_library\">Aklatan</string>\n    <string name=\"label_download_queue\">Pila ng mga download</string>\n    <string name=\"label_settings\">Mga Setting</string>\n    <string name=\"label_more\">Higit pa</string>\n    <string name=\"name\">Pangalan</string>\n    <string name=\"lock_never\">Hindi</string>\n    <string name=\"lock_always\">Palagi</string>\n    <string name=\"lock_when_idle\">Isara kung nakatambay</string>\n    <string name=\"lock_with_biometrics\">Nangangailangang i-unlock</string>\n    <string name=\"pref_manage_notifications\">Pamahalaan ang mga abiso</string>\n    <string name=\"pref_category_security\">Seguridad at privacy</string>\n    <string name=\"pref_date_format\">Pormat ng petsa</string>\n    <string name=\"theme_dark\">Madilim</string>\n    <string name=\"theme_light\">Maliwanag</string>\n    <string name=\"theme_system\">Sistema</string>\n    <string name=\"pref_category_about\">Patungkol</string>\n    <string name=\"pref_category_advanced\">Karagdagan</string>\n    <string name=\"pref_category_tracking\">Pagta-track</string>\n    <string name=\"pref_category_downloads\">Pag-download</string>\n    <string name=\"pref_category_reader\">Pagbasa</string>\n    <string name=\"pref_category_library\">Aklatan</string>\n    <string name=\"pref_category_general\">Pangkalahatan</string>\n    <string name=\"loading\">Naglo-load…</string>\n    <string name=\"app_not_available\">Hindi magagamit ang app</string>\n    <string name=\"second_to_last\">Pangalawa sa huling kabanata</string>\n    <string name=\"last_read_chapter\">Huling nabasang kabanata</string>\n    <string name=\"disabled\">Sarado</string>\n    <string name=\"pref_remove_after_marked_as_read\">Pagkatapos na manu-manong namarka bilang nabasa na</string>\n    <string name=\"pref_remove_after_read\">Pagkatapos basahin, awtomatikong burahin</string>\n    <string name=\"pref_webtoon_side_padding\">Kapal ng gilid</string>\n    <string name=\"pref_category_reading\">Pagbabasa</string>\n    <string name=\"pref_always_show_chapter_transition\">Ipakita palagi ang paglipat-kabanata</string>\n    <string name=\"color_filter_r_value\">Pula</string>\n    <string name=\"color_filter_g_value\">Berde</string>\n    <string name=\"color_filter_b_value\">Asul</string>\n    <string name=\"color_filter_a_value\">Alpha</string>\n    <string name=\"rotation_force_landscape\">Piliting nakahiga</string>\n    <string name=\"rotation_force_portrait\">Piliting nakatayo</string>\n    <string name=\"rotation_free\">Malaya</string>\n    <string name=\"pref_rotation_type\">Default na pag-ikot</string>\n    <string name=\"double_tap_anim_speed_fast\">Mabilis</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_0\">Walang animasyon</string>\n    <string name=\"zoom_start_center\">Gitna</string>\n    <string name=\"zoom_start_right\">Kanan</string>\n    <string name=\"zoom_start_left\">Kaliwa</string>\n    <string name=\"zoom_start_automatic\">Awtomatiko</string>\n    <string name=\"pref_zoom_start\">Panimulang pag-zoom</string>\n    <string name=\"scale_type_smart_fit\">Matalinong pagsasalaki</string>\n    <string name=\"scale_type_original_size\">Orihinal na laki</string>\n    <string name=\"scale_type_fit_height\">Pagkasyahin sa tangkad</string>\n    <string name=\"scale_type_fit_width\">Pagkasyahin sa lapad</string>\n    <string name=\"scale_type_stretch\">Banatin</string>\n    <string name=\"scale_type_fit_screen\">Pagkasyahin sa screen</string>\n    <string name=\"pref_image_scale_type\">Uri ng pagsasalaki</string>\n    <string name=\"pager_viewer\">Nakapahina</string>\n    <string name=\"vertical_plus_viewer\">Pahabang strip na may puwang</string>\n    <string name=\"webtoon_viewer\">Pahabang strip</string>\n    <string name=\"vertical_viewer\">Pahina (patayo)</string>\n    <string name=\"right_to_left_viewer\">Pahina (kanan pakaliwa)</string>\n    <string name=\"left_to_right_viewer\">Pahina (kaliwa pakanan)</string>\n    <string name=\"pref_viewer_type\">Default na pagbasa</string>\n    <string name=\"black_background\">Itim</string>\n    <string name=\"gray_background\">Abo</string>\n    <string name=\"white_background\">Puti</string>\n    <string name=\"pref_reader_theme\">Kulay ng background</string>\n    <string name=\"pref_read_with_long_tap\">Ipakita ang mga aksyon sa mahabang tap</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Baligtarin ang pindutan ng volume</string>\n    <string name=\"pref_read_with_volume_keys\">Pindutan ng volume</string>\n    <string name=\"pref_reader_navigation\">Nabigasyon</string>\n    <string name=\"pref_skip_filtered_chapters\">Laktawan ang mga na-filter na kabanata</string>\n    <string name=\"pref_skip_read_chapters\">Laktawan ang mga kabanatang nabasa na</string>\n    <string name=\"pref_keep_screen_on\">Panatilihing nakabukas ang screen</string>\n    <string name=\"filter_mode_darken\">Padilimin (Burn/Darken)</string>\n    <string name=\"filter_mode_lighten\">Paliwanagin (Dodge/Lighten)</string>\n    <string name=\"filter_mode_screen\">Screen</string>\n    <string name=\"filter_mode_multiply\">Paramihin (Multiply)</string>\n    <string name=\"filter_mode_overlay\">Nakapatong (Overlay)</string>\n    <string name=\"pref_color_filter_mode\">Blend mode ng filter ng kulay</string>\n    <string name=\"pref_custom_color_filter\">Custom na filter ng kulay</string>\n    <string name=\"pref_custom_brightness\">Custom na liwanag (brightness)</string>\n    <string name=\"pref_crop_borders\">Gupitin ang gilid</string>\n    <string name=\"pref_show_reading_mode_summary\">Mabilis na ipakita ang kasalukuyang ginagamit kapag nakabukas ang reader</string>\n    <string name=\"pref_show_reading_mode\">Ipakita ang paraan ng pagbasa</string>\n    <string name=\"pref_show_page_number\">Ipakita ang bilang ng pahina</string>\n    <string name=\"pref_double_tap_anim_speed\">Bilis ng animasyon sa pagdoble-pindot</string>\n    <string name=\"pref_page_transitions\">I-animate ang paglipat-pahina</string>\n    <string name=\"pref_cutout_short\">Ipakita ang laman sa cutout area</string>\n    <string name=\"pref_fullscreen\">Naka-fullscreen</string>\n    <string name=\"obsolete_extension_message\">Hindi na available ang extension na ito. Maaaring hindi ito gumana nang maayos at maaaring magdulot ng mga isyu sa app. Inirerekomenda ang pag-uninstall nito.</string>\n    <string name=\"untrusted_extension_message\">Maaaring basahin ng mga mapanganib na extension ang anumang nakatagong kredensyal sa pag-log in o magsagawa ng arbitrary code.\n\\n\n\\nSa pamamagitan ng pagtitiwala sa extension na ito, tinatanggap mo ang mga panganib na ito.</string>\n    <string name=\"untrusted_extension\">Di-pinagkakatiwalaang extension</string>\n    <string name=\"ext_uninstall\">I-uninstall</string>\n    <string name=\"ext_trust\">Itiwala</string>\n    <string name=\"ext_untrusted\">Di pinagkakatiwalaan</string>\n    <string name=\"ext_installed\">Naka-install</string>\n    <string name=\"ext_installing\">Ini-install</string>\n    <string name=\"ext_downloading\">Dina-download</string>\n    <string name=\"ext_pending\">Nakabinbin</string>\n    <string name=\"ext_install\">I-install</string>\n    <string name=\"ext_obsolete\">Di-suportado</string>\n    <string name=\"ext_update\">I-update</string>\n    <string name=\"ext_updates_pending\">Nakabinbin ang mga update</string>\n    <string name=\"all\">Lahat</string>\n    <string name=\"default_category_summary\">Palaging tanungin</string>\n    <string name=\"default_category\">Default na kategorya</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Maghanap ng mga bagong pabalat at detalye kapag nag-a-update ng aklatan</string>\n    <string name=\"pref_library_update_refresh_metadata\">Awtomatikong i-refresh ang metadata</string>\n    <string name=\"pref_update_only_non_completed\">Laktawan ang mga entry na may katayuang \\\"Nakumpleto\\\"</string>\n    <string name=\"charging\">Kapag naka-charge</string>\n    <string name=\"pref_library_update_restriction\">Awtomatikong ina-update ang mga paghihigpit sa device</string>\n    <string name=\"update_weekly\">Linggo-linggo</string>\n    <string name=\"update_48hour\">Kada 2 araw</string>\n    <string name=\"update_24hour\">Araw-araw</string>\n    <string name=\"update_12hour\">Kada 12 oras</string>\n    <string name=\"update_6hour\">Kada 6 na oras</string>\n    <string name=\"update_never\">Nakapatay</string>\n    <string name=\"pref_library_update_interval\">Awtomatikong pag-update</string>\n    <string name=\"pref_category_library_update\">Panlahatang update</string>\n    <string name=\"landscape\">Pahiga</string>\n    <string name=\"portrait\">Patayo</string>\n    <string name=\"pref_library_columns\">Mga item kada row</string>\n    <string name=\"pref_category_display\">Pagpapakita</string>\n    <string name=\"hide_notification_content\">Itago ang laman ng abiso</string>\n    <string name=\"secure_screen_summary\">Tinatago ng seguridad sa screen ang laman ng app habang nagpapalit ng app at hinaharangan din nito ang mga screenshot</string>\n    <string name=\"secure_screen\">Bantayan ang screen</string>\n    <string name=\"pref_read_with_tapping_inverted\">Baligtarin ang mga tap zone</string>\n    <string name=\"backup_restore_missing_sources\">Nawawalang mga source:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Hindi naglalaman ang backup ng kahit anong mga entry sa aklatan.</string>\n    <string name=\"invalid_backup_file\">Imbalidong backup file:</string>\n    <string name=\"backup_created\">Nai-backup na</string>\n    <string name=\"pref_backup_interval\">Awtomatikong dalas ng pag-backup</string>\n    <string name=\"pref_restore_backup_summ\">I-restore ang aklatan mula sa backup file</string>\n    <string name=\"pref_restore_backup\">I-restore ang backup</string>\n    <string name=\"pref_create_backup_summ\">Magagamit para ma-restore ang kasalukuyang aklatan</string>\n    <string name=\"pref_create_backup\">Gumawa ng backup</string>\n    <string name=\"tracking_info\">Isahang pag-sync para mai-update ang progress sa mga kabanata sa mga external na tracking service. Ayusin ang pagta-track para sa mga indibidwal na entry gamit ang button na Pagta-track.</string>\n    <string name=\"services\">Mga Tracker</string>\n    <string name=\"pref_auto_update_manga_sync\">I-update ang progress pagkatapos basahin</string>\n    <string name=\"pref_download_new\">I-download ang mga bagong kabanata</string>\n    <string name=\"fifth_to_last\">Panlima sa huling kabanata</string>\n    <string name=\"fourth_to_last\">Pang-apat sa huling kabanata</string>\n    <string name=\"third_to_last\">Pangatlo sa huling kabanata</string>\n    <string name=\"pref_category_reading_mode\">Pagbasa</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Petsa ng pagdagdag</string>\n    <string name=\"tapping_inverted_both\">Pareho</string>\n    <string name=\"tapping_inverted_vertical\">Patayo</string>\n    <string name=\"tapping_inverted_horizontal\">Pahiga</string>\n    <string name=\"channel_ext_updates\">Mga update sa extension</string>\n    <string name=\"tapping_inverted_none\">Wala</string>\n    <string name=\"channel_new_chapters\">Mga update sa kabanata</string>\n    <string name=\"channel_common\">Pangkaraniwan</string>\n    <string name=\"download_notifier_download_paused\">Nakahinto ang mga pag-download</string>\n    <string name=\"download_notifier_no_network\">Walang koneksyon sa Internet</string>\n    <string name=\"download_notifier_text_only_wifi\">Walang koneksyon sa Wifi</string>\n    <string name=\"download_notifier_unknown_error\">Di ma-download ang kabanata dahil sa isang di-inaasahang error</string>\n    <string name=\"download_notifier_title_error\">Nagka-error</string>\n    <string name=\"download_notifier_downloader_title\">Taga-download</string>\n    <string name=\"information_webview_outdated\">Paki-update ang WebView app para sa mas mahusay na pagkakatugma</string>\n    <string name=\"information_webview_required\">Kinakailangan ng app ang WebView upang gumana ito</string>\n    <string name=\"information_cloudflare_bypass_failure\">Bigong ma-bypass ang Cloudflare</string>\n    <string name=\"update_check_notification_update_available\">May bagong bersyon!</string>\n    <string name=\"update_check_notification_download_error\">Nagka-error sa pag-download</string>\n    <string name=\"update_check_notification_download_complete\">I-tap upang ma-install ang update</string>\n    <string name=\"update_check_notification_download_in_progress\">Dina-download…</string>\n    <string name=\"update_check_no_new_updates\">Walang bagong update</string>\n    <string name=\"update_check_confirm\">I-download</string>\n    <string name=\"file_select_backup\">Pumili ng backup</string>\n    <string name=\"file_select_cover\">Piliin ang larawan na pabalat</string>\n    <string name=\"notification_first_add_to_library\">Maaaring ilagay ang entry sa iyong library bago ito gawin</string>\n    <string name=\"notification_cover_update_failed\">Bigong ma-update ang pabalat</string>\n    <string name=\"notification_chapters_multiple\">Mga kabanata %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Kabanata %1$s at karagdagang %2$d iba pa</string>\n    <string name=\"notification_chapters_single\">Kabanata %1$s</string>\n    <string name=\"notification_new_chapters\">May mga bagong kabanata</string>\n    <string name=\"download_insufficient_space\">Di ma-download ang mga kabanata dahil sa mababang espasyo sa storage</string>\n    <string name=\"download_queue_error\">Di ma-download ang mga kabanata. Subukan mo uli ito sa mga download na seksyon</string>\n    <string name=\"copy\">Kopyahin</string>\n    <string name=\"migrate\">Ilipat</string>\n    <string name=\"migration_selection_prompt\">Pumili ng paglilipatang source</string>\n    <string name=\"migration_dialog_what_to_include\">Pumili ng data na isama</string>\n    <string name=\"recent_manga_time\">Kab. %1$s - %2$s</string>\n    <string name=\"updating_library\">Ina-update ang Aklatan</string>\n    <string name=\"loader_not_implemented_error\">Di makita ang source</string>\n    <string name=\"page_list_empty_error\">Walang nakitang mga pahina</string>\n    <string name=\"transition_pages_error\">Bigong mai-load ang mga pahinang: %1$s</string>\n    <string name=\"transition_pages_loading\">Nilo-load ang mga pahina…</string>\n    <string name=\"transition_no_previous\">Walang kabanata bago ito</string>\n    <string name=\"transition_no_next\">Wala nang susunod na kabanata</string>\n    <string name=\"transition_previous\">Nakaraan:</string>\n    <string name=\"transition_next\">Susunod:</string>\n    <string name=\"transition_current\">Kasalukuyan:</string>\n    <string name=\"transition_finished\">Natapos:</string>\n    <string name=\"viewer\">Mode ng pagbasa</string>\n    <string name=\"pref_category_for_this_series\">Para sa seryeng ito</string>\n    <string name=\"confirm_set_image_as_cover\">Gamiting cover art ang larawang ito?</string>\n    <string name=\"decode_image_error\">Di mai-load ang larawan</string>\n    <string name=\"no_next_chapter\">Di makita ang susunod na kabanata</string>\n    <string name=\"chapter_progress\">Pahina: %1$d</string>\n    <string name=\"cover_updated\">Na-update ang pabalat</string>\n    <string name=\"set_as_cover\">Gawin itong pabalat</string>\n    <string name=\"custom_filter\">Custom na filter</string>\n    <string name=\"picture_saved\">Na-save na ang larawan</string>\n    <string name=\"dialog_with_checkbox_reset\">I-reset ang lahat ng kabanata sa entry na ito</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Tatanggalin nito ang petsa ng pagbasa sa kabanatang ito. Sigurado ka ba?</string>\n    <string name=\"snack_categories_deleted\">Binura na ang mga kategorya</string>\n    <string name=\"error_category_exists\">Mayroong kapangalan ang kategoryang ito!</string>\n    <string name=\"track_type\">Uri</string>\n    <string name=\"track_status\">Estado</string>\n    <string name=\"status\">Estado</string>\n    <string name=\"title\">Pamagat</string>\n    <string name=\"score\">Iskor</string>\n    <string name=\"repeating\">Binabasa muli</string>\n    <string name=\"plan_to_read\">Planong basahin</string>\n    <string name=\"paused\">Hininto</string>\n    <string name=\"on_hold\">Tinigil</string>\n    <string name=\"completed\">Kumpleto</string>\n    <string name=\"dropped\">Binitawan</string>\n    <string name=\"reading\">Binabasa</string>\n    <string name=\"add_tracking\">Idagdag sa tracker</string>\n    <string name=\"manga_tracking_tab\">I-track</string>\n    <string name=\"confirm_delete_chapters\">Sigurado ka bang gusto mong burahin ang mga napiling kabanata?</string>\n    <string name=\"download_unread\">Babasahin</string>\n    <string name=\"manga_download\">I-download</string>\n    <string name=\"sort_by_upload_date\">Base sa petsa ng pag-upload</string>\n    <string name=\"sort_by_number\">Base sa bilang</string>\n    <string name=\"sort_by_source\">Base sa source</string>\n    <string name=\"show_title\">Pangalan ng source</string>\n    <string name=\"show_chapter_number\">Kabanata</string>\n    <string name=\"chapter_paused\">Nakahinto</string>\n    <string name=\"chapter_error\">Nagka-error</string>\n    <string name=\"chapter_downloading_progress\">Dina-download (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">Kabanata %1$s</string>\n    <string name=\"snack_add_to_library\">Idagdag sa Aklatan?</string>\n    <string name=\"source_not_installed\">Di naka-install ang source: %1$s</string>\n    <string name=\"copied_to_clipboard\">Kinopya sa clipboard:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">Burahin ang mga na-download na kabanata?</string>\n    <string name=\"manga_info_expand\">Palawakin</string>\n    <string name=\"manga_info_collapse\">Bawasan</string>\n    <string name=\"manga_removed_library\">Tinanggal sa Aklatan</string>\n    <string name=\"manga_added_library\">Dinagdag sa Aklatan</string>\n    <string name=\"remove_from_library\">Tanggalin sa Aklatan</string>\n    <string name=\"in_library\">Nasa Aklatan</string>\n    <string name=\"add_to_library\">Idagdag sa Aklatan</string>\n    <string name=\"licensed\">Lisensiyado</string>\n    <string name=\"unknown_status\">Di alam ang estado</string>\n    <string name=\"unknown_author\">Di alam ang may-akda</string>\n    <string name=\"unknown\">Di alam</string>\n    <string name=\"ongoing\">Patuloy</string>\n    <string name=\"local_source_help_guide\">Gabay sa Lokal na source</string>\n    <string name=\"browse\">Maghanap</string>\n    <string name=\"latest\">Pinakabago</string>\n    <string name=\"action_global_search_query\">Hinanap ang \\\"%1$s\\\" sa lahat</string>\n    <string name=\"action_global_search_hint\">Panlahatang paghahanap…</string>\n    <string name=\"pinned_sources\">Naka-pin</string>\n    <string name=\"last_used_source\">Huling ginamit</string>\n    <string name=\"other_source\">Iba pa</string>\n    <string name=\"local_source\">Lokal na source</string>\n    <string name=\"no_results_found\">Walang nakitang resulta</string>\n    <string name=\"no_more_results\">Wala na\\'ng resulta</string>\n    <string name=\"tabs_header\">Mga Tab</string>\n    <string name=\"updating_category\">Ina-update ang kategorya</string>\n    <string name=\"unknown_error\">Di matukoy na error</string>\n    <string name=\"logout_success\">Naka-logout ka na</string>\n    <string name=\"logout\">Mag-logout</string>\n    <string name=\"logout_title\">Mag-logout mula sa %1$s?</string>\n    <string name=\"login_success\">Naka-login ka na</string>\n    <string name=\"login\">Mag-login</string>\n    <string name=\"password\">Password</string>\n    <string name=\"email\">Email address</string>\n    <string name=\"username\">Username (pangalan)</string>\n    <string name=\"login_title\">Mag-login sa %1$s</string>\n    <string name=\"downloaded_only_summary\">Pini-filter ang lahat ng mga entry sa iyong akalatan</string>\n    <string name=\"label_downloaded_only\">Mga na-download lang</string>\n    <string name=\"pref_acra_summary\">Nakatutulong sa pag-ayos sa mga bug. Walang sensitibong data ang ipapadala</string>\n    <string name=\"pref_enable_acra\">Ipadala ang mga ulat ng pag-crash</string>\n    <string name=\"updated_version\">Na-update sa v%1$s</string>\n    <string name=\"check_for_updates\">Maghanap ng update</string>\n    <string name=\"licenses\">Mga lisensiyang open-source</string>\n    <string name=\"whats_new\">Anong bago</string>\n    <string name=\"version\">Bersyon</string>\n    <string name=\"website\">Website</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Di mabuksan ang pagsasaayos ng iyong device</string>\n    <string name=\"battery_optimization_disabled\">Nakapatay na ang pag-o-optimisa sa baterya</string>\n    <string name=\"pref_disable_battery_optimization\">Patayin ang pag-o-optimisa sa baterya</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Nakatutulong sa pag-update ng aklatan sa background at pag-backup</string>\n    <string name=\"pref_refresh_library_covers\">I-refresh ang mga pabalat ng aklatan</string>\n    <string name=\"clear_database_completed\">Binura na</string>\n    <string name=\"clear_database_confirmation\">Sigurado ka ba? Ang mga nabasang kabanata at progress ng mga wala sa aklatan ay mawawala</string>\n    <string name=\"pref_clear_database_summary\">Burahin ang kasaysasan sa mga entry na hindi naka-save sa iyong aklatan</string>\n    <string name=\"pref_clear_database\">Linisin ang database</string>\n    <string name=\"cache_delete_error\">Nagka-error habang nililinis</string>\n    <string name=\"cache_deleted\">Nalinisan na ang cache, natanggal ang %1$d na file</string>\n    <string name=\"used_cache\">Nagamit: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">Linisin ang cache ng kabanata</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"cookies_cleared\">Nalinis na ang mga cookie</string>\n    <string name=\"requires_app_restart\">Nangangailangang buksan muli ang app para gumana</string>\n    <string name=\"pref_clear_cookies\">Linisin ang mga cookie</string>\n    <string name=\"label_network\">Networking</string>\n    <string name=\"restoring_backup_error\">Bigong ma-restore ang backup</string>\n    <string name=\"restoring_backup_canceled\">Kinansela ang pag-restore</string>\n    <string name=\"restore_in_progress\">Inire-restore na</string>\n    <string name=\"restore_completed\">Na-restore na</string>\n    <string name=\"restoring_backup\">Rine-restore ang backup</string>\n    <string name=\"creating_backup_error\">Bigong ma-backup</string>\n    <string name=\"creating_backup\">Bina-backup</string>\n    <string name=\"backup_choice\">Anong iba-backup mo?</string>\n    <string name=\"backup_in_progress\">Bina-backup na</string>\n    <string name=\"restore_duration\">%1$02d (na) min, %2$02d seg</string>\n    <string name=\"no_pinned_sources\">Wala kang naka-pin na source</string>\n    <string name=\"channel_complete\">Tapos na</string>\n    <string name=\"channel_errors\">Mga error</string>\n    <string name=\"channel_progress\">Takbo</string>\n    <string name=\"backup_restore_missing_trackers\">Di naka-login sa mga tracker:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Payagan ang pagtanggal ng mga naka-bookmark na kabanata</string>\n    <string name=\"pref_category_delete_chapters\">Magbura ng kabanata</string>\n    <string name=\"parental_controls_info\">Hindi nito naiiwasan ang pagpapakita ng mga NSFW (18+) sa mga di-opisyal o posibleng maling naka-flag na extension sa loob ng app.</string>\n    <string name=\"ext_nsfw_warning\">Posibleng may NSFW (18+) content ang mga source mula sa extension na ito</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"no_chapters_error\">Walang nakitang kabanata</string>\n    <string name=\"confirm_set_chapter_settings\">Gusto mo bang i-save at ipagpaubaya ang pagsasaayos na ito?</string>\n    <string name=\"set_chapter_settings_as_default\">I-set bilang default</string>\n    <string name=\"chapter_settings_updated\">Ini-update na ang Ipagpaubaya</string>\n    <string name=\"share_page_info\">%1$s: %2$s, pahina %3$d</string>\n    <string name=\"also_set_chapter_settings_for_library\">Ilapat din sa lahat ng mga entry sa aking aklatan</string>\n    <string name=\"chapter_settings\">Pagsasaayos ng Kabanata</string>\n    <string name=\"downloaded_chapters\">Bilang ng na-download</string>\n    <string name=\"manga_from_library\">Mula sa Aklatan</string>\n    <string name=\"action_search_settings\">Maghanap ng setting</string>\n    <string name=\"pref_incognito_mode_summary\">Pinahihinto ang kasaysayan ng pagbabasa</string>\n    <string name=\"pref_incognito_mode\">Patagong mode</string>\n    <string name=\"pref_clear_history\">Linisin ang kasaysayan</string>\n    <string name=\"clear_history_completed\">Nabura ang kasaysayan</string>\n    <string name=\"clear_history_confirmation\">Sigurado ka ba talaga? Mawawala ang buong kasaysayan.</string>\n    <string name=\"migration_help_guide\">Gabay sa Paglipat ng source</string>\n    <string name=\"spen_next_page\">Abante</string>\n    <string name=\"spen_previous_page\">Balik</string>\n    <string name=\"file_picker_error\">Walang nakitang file picker app</string>\n    <string name=\"pref_show_nsfw_source\">Ipakita sa mga listahan ng source at extension</string>\n    <string name=\"pref_category_nsfw_content\">Mga source na NSFW (18+)</string>\n    <string name=\"myanimelist_relogin\">Mag-login muli sa MAL</string>\n    <string name=\"track_finished_reading_date\">Petsa ng pagtatapos</string>\n    <string name=\"track_started_reading_date\">Petsa ng pagsisimula</string>\n    <string name=\"pref_dump_crash_logs\">Magbahagi ng mga crash log</string>\n    <string name=\"pref_dump_crash_logs_summary\">Sine-save ang mga error log sa isang file para maibahagi sa mga developer</string>\n    <string name=\"pref_viewer_nav\">Mga tap zone</string>\n    <string name=\"edge_nav\">Sulok</string>\n    <string name=\"kindlish_nav\">Mala-Kindle</string>\n    <string name=\"l_nav\">Hugis-L</string>\n    <string name=\"action_desc\">Pababa</string>\n    <string name=\"action_asc\">Pataas</string>\n    <string name=\"action_order_by_chapter_number\">Kabanata</string>\n    <string name=\"action_order_by_upload_date\">Petsa in-upload</string>\n    <string name=\"action_filter_tracked\">Na-track</string>\n    <string name=\"right_and_left_nav\">Kaliwa at Kanan</string>\n    <string name=\"pref_dual_page_split\">Hatiin ang mga malalapad na pahina</string>\n    <string name=\"action_display_show_number_of_items\">Ipakita ang bilang ng mga aytem</string>\n    <string name=\"pref_dual_page_invert_summary\">Kung sakaling hindi sumasakto sa direksyon ng pagbabasa ang paghahati sa malalapad na pahina</string>\n    <string name=\"pref_dual_page_invert\">Baligtarin ang paghahati sa pahina</string>\n    <string name=\"backup_restore_content_full\">Kailangan mong i-install muli ang mga nawawalang extension at mag-login muli sa mga tracker pagkatapos para magamit ang mga ito.</string>\n    <string name=\"pref_dns_over_https\">DNS kesa HTTPS (DoH)</string>\n    <string name=\"pref_download_new_categories_details\">Ang mga entry sa mga ibinukod na kategorya ay hindi mada-download kahit na sila ay kasama rin sa mga kategoryang kasama.</string>\n    <string name=\"pref_category_auto_download\">Awtomatikong pag-download</string>\n    <string name=\"nav_zone_right\">Kanan</string>\n    <string name=\"nav_zone_left\">Kaliwa</string>\n    <string name=\"nav_zone_next\">Susunod</string>\n    <string name=\"nav_zone_prev\">Nakaraan</string>\n    <string name=\"pref_show_navigation_mode_summary\">Mabilis na ipakita ang lugar na ita-tap kapag nakabukas ang reader</string>\n    <string name=\"pref_show_navigation_mode\">Ipakita ang mga overlay ng tap zone</string>\n    <string name=\"exclude\">Di-isali: %s</string>\n    <string name=\"include\">Kasali ang: %s</string>\n    <string name=\"none\">Wala</string>\n    <string name=\"pref_library_update_categories_details\">Hindi ia-update ang mga entry na nasa mga di kasamang kategorya kahit na nasa mga kasamang kategorya rin sila.</string>\n    <string name=\"action_sort_chapter_fetch_date\">Petsa ng pagkuha ng kabanata</string>\n    <string name=\"action_show_errors\">I-tap para makita ang detalye</string>\n    <string name=\"update_check_eol\">Di na suportado ang bersyong ito ng Android</string>\n    <string name=\"clipboard_copy_error\">Bigong makopya sa clipboard</string>\n    <string name=\"rotation_landscape\">Pahiga</string>\n    <string name=\"rotation_portrait\">Patayo</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Gumagawa ng mga folder ayon sa pamagat ng entry</string>\n    <string name=\"pref_create_folder_per_manga\">I-save ang mga pahina sa magkakaibang folder</string>\n    <string name=\"pref_reader_actions\">Gawain</string>\n    <string name=\"rotation_type\">Pag-ikot</string>\n    <string name=\"pref_grayscale\">Maabo</string>\n    <string name=\"notification_incognito_text\">Isara ang patagong mode</string>\n    <string name=\"automatic_background\">Awto</string>\n    <string name=\"cancel_all_for_series\">Kanselahin lahat para sa seryeng ito</string>\n    <string name=\"local_filter_order_by\">Ayusin ayon sa</string>\n    <string name=\"restrictions\">Mga Restriksyon: %s</string>\n    <string name=\"error_no_match\">Walang nahanap na kapares</string>\n    <string name=\"date\">Petsa</string>\n    <string name=\"local_invalid_format\">Imbalidong format ng kabanata</string>\n    <string name=\"chapter_not_found\">Hindi makita ang kabanata</string>\n    <string name=\"source_unsupported\">Di suportado ang source</string>\n    <string name=\"unread\">Di nabasa</string>\n    <string name=\"error_sharing_cover\">Error sa pagbabahagi ng pabalat</string>\n    <string name=\"error_saving_cover\">Error sa pag-save ng pabalat</string>\n    <string name=\"cover_saved\">Na-save na ang pabalat</string>\n    <string name=\"manga_cover\">Pabalat</string>\n    <string name=\"off\">Naka-off</string>\n    <string name=\"on\">Naka-on</string>\n    <string name=\"action_display_local_badge\">Lokal na source</string>\n    <string name=\"categorized_display_settings\">Mga setting ng bawat kategorya para sa pagbubukod-bukod</string>\n    <string name=\"information_empty_category_dialog\">Wala ka pang kategorya.</string>\n    <string name=\"tracking_guide\">Gabay sa pag-track</string>\n    <string name=\"action_start_downloading_now\">Simulan ang pag-download ngayon</string>\n    <string name=\"about_dont_kill_my_app\">May dagdag na mga restriksyon sa app ang ilang mga modelo ng phone na pumapatay sa mga serbisyo sa background. May impormasyon sa site na ito para maayos ang naturang problema.</string>\n    <string name=\"restore_miui_warning\">Maaaring hindi gumana nang maayos ang pag-backup/pag-restore kung nakasara ang MIUI optimization.</string>\n    <string name=\"enhanced_tracking_info\">Nagbibigay ng mga pinahusay na mga feature para sa ilang mga source. Awtomatikong tina-track ang mga entry kapag naidagdag ito sa iyong aklatan.</string>\n    <string name=\"enhanced_services\">Pinahusay na mga tracker</string>\n    <string name=\"theme_midnightdusk\">Hatinggabi</string>\n    <string name=\"theme_greenapple\">Berdeng Mansanas</string>\n    <string name=\"theme_monet\">Nagbabago</string>\n    <string name=\"pref_app_theme\">Tema</string>\n    <string name=\"pref_dark_theme_pure_black\">Purong itim</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin at Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Presas</string>\n    <string name=\"label_background_activity\">Aktibidad sa background</string>\n    <string name=\"pref_lowest\">Pinakamababa</string>\n    <string name=\"pref_low\">Mababa</string>\n    <string name=\"pref_high\">Mataas</string>\n    <string name=\"pref_highest\">Pinakamataas</string>\n    <string name=\"pref_hide_threshold\">Sensitivity para sa pagtatago ng menu sa scroll</string>\n    <string name=\"pref_inverted_colors\">Baligtad</string>\n    <string name=\"relative_time_today\">Ngayon</string>\n    <string name=\"theme_tealturquoise\">Teal at Turquoise</string>\n    <string name=\"pref_category_appearance\">Hitsura</string>\n    <string name=\"confirm_lock_change\">Patotohanan para makumpirma ang pagbabago</string>\n    <string name=\"label_default\">Default</string>\n    <string name=\"action_track\">I-Track</string>\n    <string name=\"getting_started_guide\">Gabay sa Pagsisimula</string>\n    <string name=\"pref_tablet_ui_mode\">Pang-tablet na UI</string>\n    <string name=\"help_translate\">Tumulong sa pagsalin</string>\n    <string name=\"pref_remove_exclude_categories\">Mga hindi kasamang kategorya</string>\n    <string name=\"ext_app_info\">Tungkol sa app</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">I-Install at buksan ang Shizuku para magamit ito bilang taga-install ng extension.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Di tumatakbo ang Shizuku</string>\n    <string name=\"ext_installer_legacy\">Legasiya</string>\n    <string name=\"ext_installer_pref\">Taga-install</string>\n    <string name=\"ext_install_service_notif\">Ini-install ang extension…</string>\n    <string name=\"action_sort_count\">Dami ng entry</string>\n    <string name=\"pref_verbose_logging\">Verbose na pagla-log</string>\n    <string name=\"pref_verbose_logging_summary\">I-print ang detalyadong mga log sa system log (nakakabawas sa performance ng app)</string>\n    <string name=\"notification_size_warning\">Babala: Nakasasama ang mga malalaking update sa source at maaaring humantong sa mabagal na update at pagtaas ng paggamit sa baterya. I-tap para matuto pa.</string>\n    <string name=\"action_display_language_badge\">Wika</string>\n    <string name=\"label_warning\">Babala</string>\n    <string name=\"backup_info\">Dapat nagtatabi rin kayo ng mga kopya ng backup sa ibang mga lugar. Ang mga backup ay naglalaman ng sensitibong data tulad ng nakaimbak na password; mag-ingat kung ibahagi ito.</string>\n    <string name=\"connected_to_wifi\">Sa Wi-Fi lang</string>\n    <string name=\"update_72hour\">Kada 3 araw</string>\n    <string name=\"download_queue_size_warning\">Babala: maaaring humantong sa pagbagal at/o pagharang ng mga source sa Mihon ang maramihang pag-download. I-tap para matuto pa.</string>\n    <string name=\"channel_app_updates\">Mga update sa app</string>\n    <string name=\"ext_update_all\">I-update lahat</string>\n    <string name=\"clear_database_source_item_count\">%1$d na entry sa database na wala sa aklatan</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Linisin ang cache ng kabanata sa paglulunsad ng app</string>\n    <string name=\"database_clean\">Walang malilinis</string>\n    <string name=\"extension_api_error\">Bigong makuha ng mga available na extension</string>\n    <string name=\"privacy_policy\">Patakaran sa Pagkapribado</string>\n    <string name=\"library_errors_help\">Para sa tulong sa pag-aayos ng mga error sa pag-update ng aklatan, tingnan ang %1$s</string>\n    <string name=\"pref_update_only_completely_read\">Laktawan ang mga entry na hindi pa nababasang kabanata</string>\n    <string name=\"save_chapter_as_cbz\">I-save bilang CBZ archive</string>\n    <string name=\"publishing_finished\">Tapos na ang paglalathala</string>\n    <string name=\"on_hiatus\">Naka-hiatus</string>\n    <string name=\"cancelled\">Kinansela</string>\n    <string name=\"action_show_manga\">Ipakita ang entry</string>\n    <string name=\"action_display_cover_only_grid\">Pabalat lamang na grid</string>\n    <string name=\"skipped_reason_completed\">Nilaktawan dahil kumpleto na ang serye</string>\n    <string name=\"pref_update_only_started\">Laktawan ang hindi nasimulang mga entry</string>\n    <string name=\"skipped_reason_not_caught_up\">Nilaktawan dahil may di pa nabasang mga kabanata</string>\n    <string name=\"skipped_reason_not_started\">Nilaktawan dahil wala pang nabasang mga kabanata</string>\n    <string name=\"pref_landscape_zoom\">Awtomatikong mag-zoom sa mga malalawak na larawan</string>\n    <string name=\"pref_navigate_pan\">I-pan ang mga malalapad na larawan</string>\n    <string name=\"learn_more\">Matuto pa</string>\n    <string name=\"notification_update_error\">Nabigo ang %1$d (na) update</string>\n    <string name=\"rotation_reverse_portrait\">Baligtad na patayo</string>\n    <string name=\"action_move_to_top_all_for_series\">Ilagay sa taas ang serye</string>\n    <string name=\"disabled_nav\">Nakasara</string>\n    <string name=\"empty_backup_error\">Walang entry sa Aklatan na maiba-backup</string>\n    <string name=\"update_check_open\">Buksan sa Github</string>\n    <string name=\"error_saving_picture\">Error sa pag-save sa larawan</string>\n    <string name=\"webview_data_deleted\">Nalinis na ang WebView data</string>\n    <string name=\"pref_clear_webview_data\">Linisin ang WebView data</string>\n    <string name=\"action_close\">Isara</string>\n    <string name=\"source_filter_empty_screen\">Walang nakitang naka-install na source</string>\n    <string name=\"source_empty_screen\">Walang nakitang source</string>\n    <string name=\"action_sort_last_manga_update\">Huling pag-update</string>\n    <string name=\"action_sort_unread_count\">Dami ng di pa nabasa</string>\n    <string name=\"split_tall_images_summary\">Pinapahusay ang performance ng reader</string>\n    <string name=\"download_notifier_split_page_not_found\">Hindi nakita ang pahina %d habang naghahati</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Di makita ang file path ng pahina %d</string>\n    <string name=\"empty_screen\">Paano ba \\'to</string>\n    <string name=\"pref_reset_viewer_flags_error\">Di ma-reset ang pagsasaayos sa reader</string>\n    <string name=\"pref_reset_viewer_flags_success\">Na-reset na ang lahat ng setting sa reader</string>\n    <string name=\"pref_reset_viewer_flags\">I-reset ang pagsasaayos sa reader kada serye</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Rine-reset ang paraan ng pagbasa at orientation para sa lahat ng mga serye</string>\n    <string name=\"ext_info_version\">Bersyon</string>\n    <string name=\"ext_info_language\">Wika</string>\n    <string name=\"ext_info_age_rating\">Rating sa edad</string>\n    <string name=\"on_hold_list\">Listahan ng Tinigil</string>\n    <string name=\"complete_list\">Listahan ng Kumpleto</string>\n    <string name=\"unfinished_list\">Listahan ng Di pa Tapos</string>\n    <string name=\"wish_list\">Listahan ng Hiling</string>\n    <string name=\"reading_list\">Listahan ng Binabasa</string>\n    <string name=\"network_not_metered\">Sa di-nakametrong network lang</string>\n    <string name=\"cant_open_last_read_chapter\">Di mabuksan ang huling nabasang kabanata</string>\n    <string name=\"custom_cover\">Custom na pabalat</string>\n    <string name=\"not_installed\">Di naka-install</string>\n    <string name=\"pref_app_language\">Wika ng app</string>\n    <string name=\"theme_lavender\">Lila</string>\n    <string name=\"description_placeholder\">Walang paglalarawan</string>\n    <string name=\"delete_category\">Burahin ang kategorya</string>\n    <string name=\"internal_error\">InternalError: Tingnan ang mga crash log para sa karagdagang impormasyon</string>\n    <string name=\"delete_category_confirmation\">Gusto mo bang burahin ang kategoryang \\\"%s\\\"?</string>\n    <string name=\"pref_reset_user_agent_string\">I-reset ang default na string ng user agent</string>\n    <string name=\"pref_user_agent_string\">Default na string ng user agent</string>\n    <string name=\"action_remove_everything\">Burahin lahat</string>\n    <string name=\"appwidget_updates_description\">Tingnan ang mga kamakailang nai-update na entry sa iyong aklatan</string>\n    <string name=\"appwidget_unavailable_locked\">Di available ang widget kapag nakabukas ang lock</string>\n    <string name=\"update_already_running\">May ina-update sa ngayon</string>\n    <string name=\"error_user_agent_string_blank\">Hindi dapat blangko ang user agent string</string>\n    <string name=\"theme_tidalwave\">Daluyong</string>\n    <string name=\"download_ahead\">I-download agad</string>\n    <string name=\"auto_download_while_reading\">Awtomatikong mag-download habang nagbabasa</string>\n    <string name=\"download_ahead_info\">Gumagana lamang sa kasalukuyang kabanata + ang susunod ay na-download na.</string>\n    <string name=\"are_you_sure\">Sigurado ka ba?</string>\n    <string name=\"multi_lang\">Marami</string>\n    <string name=\"remove_manga\">Tatanggalin mo na ang \\\"%s\\\" mula sa iyong aklatan</string>\n    <string name=\"updates_last_update_info\">Huling update sa aklatan: %s</string>\n    <string name=\"popular\">Sikat</string>\n    <string name=\"missing_storage_permission\">Hindi binigay ang mga permiso sa storage</string>\n    <string name=\"skipped_reason_not_always_update\">Nilaktawan dahil hindi kailangan ang pag-update sa serye</string>\n    <string name=\"action_search_hint\">Maghanap…</string>\n    <string name=\"pref_reader_summary\">Paraan ng pagbasa, pagpapakita, nabigasyon</string>\n    <string name=\"pref_downloads_summary\">Awtomatikong pag-download, i-download nang maaga</string>\n    <string name=\"pref_tracking_summary\">Isahang pag-sync sa progress, pinahusay na pag-sync</string>\n    <string name=\"pref_appearance_summary\">Tema, ayos ng petsa &amp; oras</string>\n    <string name=\"pref_backup_summary\">Mano-mano at awtomatikong pag-backup, espasyo sa storage</string>\n    <string name=\"pref_security_summary\">Pag-lock sa app, bantayan ang screen</string>\n    <string name=\"pref_advanced_summary\">Itambak ang mga crash log, pag-o-optimisa sa baterya</string>\n    <string name=\"pref_library_summary\">Mga kategorya, panlahatang update, pag-swipe ng kabanata</string>\n    <string name=\"pref_browse_summary\">Mga source, extension, panlahatang paghanap</string>\n    <string name=\"crash_screen_description\">Nagkaroon ng hindi inaasahang error ang %s. Iminumungkahi naming ibahagi mo ang mga crash log sa aming support channel sa Discord.</string>\n    <string name=\"crash_screen_title\">Ay Naku!</string>\n    <string name=\"crash_screen_restart_application\">Buksan muli ang app</string>\n    <string name=\"invalid_location\">Imbalidong lokasyon: %s</string>\n    <string name=\"unknown_title\">Di alam na pamagat</string>\n    <string name=\"error_user_agent_string_invalid\">Di-wastong string ng user agent</string>\n    <string name=\"updates_last_update_info_just_now\">Ngayon lang</string>\n    <string name=\"download_notifier_cache_renewal\">Tinitignan ang mga download</string>\n    <string name=\"information_no_entries_found\">Walang mga entry ang nahanap sa kategoryang ito</string>\n    <string name=\"action_open_random_manga\">Buksan ang random na entry</string>\n    <string name=\"fdroid_warning\">Ang mga build mula sa F-Droid ay hindi opisyal na sinusuportahan.\n\\nI-tap para matuto pa.</string>\n    <string name=\"action_display_show_continue_reading_button\">Magpatuloy na bumasa na button</string>\n    <string name=\"track_remove_date_conf_title\">Tanggalin ang petsa?</string>\n    <string name=\"track_remove_start_date_conf_text\">Tatanggalin nito ang huling petsa na napili mo mula sa %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Aalisin nito ang dati mong napiling petsa ng pagtatapos mula sa %s</string>\n    <string name=\"pref_invalidate_download_cache\">Muling i-index ang mga download</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Pilitin ang app na tingnan kung may naka-download</string>\n    <string name=\"label_completed_titles\">Mga natapos na entry</string>\n    <string name=\"label_started\">Nasimulan</string>\n    <string name=\"label_local\">Lokal</string>\n    <string name=\"label_downloaded\">Na-download</string>\n    <string name=\"label_titles_in_global_update\">Sa panlahatang update</string>\n    <string name=\"label_titles_section\">Mga Entry</string>\n    <string name=\"label_total_chapters\">Kabuuang dami</string>\n    <string name=\"label_tracker_section\">Mga Tracker</string>\n    <string name=\"label_overview_section\">Pangkalahatang-ideya</string>\n    <string name=\"label_read_chapters\">Nabasa</string>\n    <string name=\"label_mean_score\">Mean score</string>\n    <string name=\"label_used\">Nagamit</string>\n    <string name=\"label_read_duration\">Tagal ng binasa</string>\n    <string name=\"label_tracked_titles\">Mga na-track na entry</string>\n    <string name=\"pref_library_update_show_tab_badge\">Ipakita ang bilang ng di pa nababasa sa Bago na icon</string>\n    <string name=\"information_no_manga_category\">Walang laman ang kategoryang ito</string>\n    <string name=\"action_not_now\">Hindi muna ngayon</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"label_stats\">Istatistika</string>\n    <string name=\"pref_skip_dupe_chapters\">Laktawan ang mga magkaparehong kabanata</string>\n    <string name=\"copied_to_clipboard_plain\">Kinopya sa clipboard</string>\n    <string name=\"information_required_plain\">*kinakailangan</string>\n    <string name=\"enhanced_services_not_installed\">Mayroon ngunit hindi naka-install ang source: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">Mayroon kang entry sa iyong aklatan na magkapareho ng pangalan.\n\\n\n\\nGusto mo pa bang magpatuloy?</string>\n    <string name=\"track_error\">%1$s Kamalian: %2$s</string>\n    <string name=\"day_short\">%da</string>\n    <string name=\"hour_short\">%do</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_copy_to_clipboard\">Kopyahin sa clipboard</string>\n    <string name=\"pref_hide_in_library_items\">Itago ang mga entry na nasa aklatan na</string>\n    <string name=\"action_update_category\">I-update ang kategorya</string>\n    <string name=\"pref_page_rotate\">I-rotate ang malalawak na pahina upang magkasya</string>\n    <string name=\"pref_page_rotate_invert\">I-flip ang oryentasyon ng mga pinaikot na malalawak na pahina</string>\n    <string name=\"overlay_header\">Nakapatong (Overlay)</string>\n    <string name=\"split_tall_images\">Hatiin ang mga matataas na larawan</string>\n    <string name=\"pref_debug_info\">Impormasyon sa pag-debug</string>\n    <string name=\"pref_chapter_swipe_start\">Mag-swipe ng pakaliwang pagkilos</string>\n    <string name=\"pref_double_tap_zoom\">I-double tap para mag-zoom</string>\n    <string name=\"pref_chapter_swipe_end\">Mag-swipe ng pakanang pagkilos</string>\n    <string name=\"action_set_interval\">Itakda ang pagitan</string>\n    <string name=\"action_filter_interval_custom\">Ma-customize na dalas ng pag-update</string>\n    <string name=\"action_sort_next_updated\">Susunod na inaasahang update</string>\n    <string name=\"manga_display_interval_title\">Tantyahin bawat</string>\n    <string name=\"manga_display_modified_interval_title\">Itakdang i-update bawat</string>\n    <string name=\"pref_update_only_in_release_period\">Hulaan ang susunod na oras ng release</string>\n    <string name=\"intervals_header\">Mga pagitan</string>\n    <string name=\"skipped_reason_not_in_release_period\">Nilaktawan dahil walang inaasahang release ngayong araw</string>\n    <string name=\"has_results\">May mga resulta</string>\n    <string name=\"delete_downloaded\">Burahin ang na-download</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_title\">Tanggalin ang %s na tracking?</string>\n    <string name=\"track_delete_text\">Tatanggalin nito ang lokal na pag-track.</string>\n    <string name=\"track_delete_remote_text\">Tanggalin din mula sa %s</string>\n    <string name=\"syncing_library\">Nagsi-sync ang aklatan</string>\n    <string name=\"library_sync_complete\">Natapos na ang pag-sync ng aklatan</string>\n    <string name=\"information_cloudflare_help\">I-tap dito para sa tulong sa Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Napawalang-bisa ang index ng mga download</string>\n    <string name=\"create_backup_file_error\">Hindi makalikha ng backup file</string>\n    <string name=\"track_activity_name\">Mag-login sa tracker</string>\n    <string name=\"unlock_app_title\">I-unlock ang %s</string>\n    <string name=\"exception_offline\">Walang koneksyon sa Internet</string>\n    <string name=\"exception_http\">HTTP %d, tignan ang website sa WebView</string>\n    <string name=\"exception_unknown_host\">Hindi maabot ang %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Ilagay sa ibaba ang serye</string>\n    <string name=\"pref_relative_format\">Mga relatibong timestamp</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" sa halip na \\\"%2$s\\\"</string>\n    <string name=\"notification_updating_progress\">Nag-a-update ang aklatan... (%s)</string>\n    <string name=\"source_settings\">Mga setting ng source</string>\n    <string name=\"app_settings\">Mga setting ng app</string>\n    <string name=\"file_null_uri_error\">Walang napiling file</string>\n    <string name=\"label_data_storage\">Datos at storage</string>\n    <string name=\"pref_flash_page_summ\">Binabawasan ang ghosting sa mga e-ink na display</string>\n    <string name=\"pref_flash_page\">Mag-flash kada pumalit ng pahina</string>\n    <string name=\"relative_time_span_never\">Hindi kailanman</string>\n    <string name=\"last_auto_backup_info\">Huling awtomatikong na-back up: %s</string>\n    <string name=\"pref_storage_usage\">Paggamit ng storage</string>\n    <string name=\"action_sort_tracker_score\">Iskor sa tracker</string>\n    <string name=\"action_apply\">Ilapat</string>\n    <string name=\"action_revert_to_default\">Ibalik sa default</string>\n    <string name=\"no_scanlators_found\">Walang scanlator ang nahanap</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"exclude_scanlators\">Ibukod ang mga scanlator</string>\n    <string name=\"action_create\">Lumikha</string>\n    <string name=\"pref_storage_location\">Lokasyon ng storage</string>\n    <string name=\"pref_storage_location_info\">Ginagamit para sa automatikong pag-backup, pag-download ng mga kabanata, at lokal na source.</string>\n    <string name=\"action_menu_overflow_description\">Ibang opsiyon</string>\n    <string name=\"selected\">Napili</string>\n    <string name=\"not_selected\">Di napili</string>\n    <string name=\"action_bar_up_description\">Mag-navigate pataas</string>\n    <string name=\"onboarding_storage_action_select\">Pumili ng folder</string>\n    <string name=\"pref_onboarding_guide\">Gabay sa onboarding</string>\n    <string name=\"onboarding_guides_new_user\">Bago sa %s? Inirerekomenda naming tingnan ang gabay sa pagsisimula.</string>\n    <string name=\"onboarding_action_finish\">Magsimula</string>\n    <string name=\"onboarding_storage_selection_required\">Dapat pumili ng isang folder</string>\n    <string name=\"onboarding_heading\">Maligayang pagdating!</string>\n    <string name=\"onboarding_guides_returning_user\">Muling pag-install ng %s?</string>\n    <string name=\"onboarding_action_skip\">Laktawan</string>\n    <string name=\"onboarding_action_next\">Susunod</string>\n    <string name=\"onboarding_description\">Mag-set up muna tayo ng ilang bagay. Maaari mo ring baguhin ang mga ito anumang oras sa mga setting sa ibang pagkakataon.</string>\n    <string name=\"no_location_set\">Walang nakatakdang lokasyon ng storage</string>\n    <string name=\"onboarding_storage_info\">Pumili ng folder kung saan mag-imbak ang %1$s ng mga na-download ng kabanata, mga backup, at higit pa.\n\\n\n\\nInirerekomenda ang isang nakalaang folder.\n\\n\n\\nNapiling folder: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Pahintulot sa mga abiso</string>\n    <string name=\"onboarding_permission_install_apps\">Pahintulot sa pag-install ng mga app</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Ma-iwasan ang mga hadlang sa mahahabang pag-update ng aklatan, pag-download, at pag-restore ng mga backup.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Paggamit ng baterya sa background</string>\n    <string name=\"onboarding_permission_install_apps_description\">Para mag-install ng mga extension ng source.</string>\n    <string name=\"onboarding_permission_notifications_description\">Maabisuhan para sa mga update sa aklatan at higit pa.</string>\n    <string name=\"onboarding_permission_action_grant\">Payagan</string>\n    <string name=\"available_disk_space_info\">Na magagamit: %1$s / Kabuuan: %2$s</string>\n    <string name=\"manga_interval_expected_update\">Mga bagong kabanata na nahulaang ilalabas sa loob ng %1$s, na tumitingin bawat %2$s.</string>\n    <string name=\"invalid_backup_file_error\">Buong error:</string>\n    <string name=\"ext_permission_install_apps_warning\">Kinakailangan ng permiso para mag-install ng mga extension. I-tap upang mapayagan ito.</string>\n    <string name=\"private_settings\">Kasali ang mga sensitibong setting (hal., mga tracker login token)</string>\n    <string name=\"onboarding_storage_help_info\">Nag-a-update mula sa isang mas lumang bersyon at hindi sigurado kung ano ang pipiliin? Sumangguni sa gabay sa storage para sa higit pang impormasyon.</string>\n    <string name=\"pref_library_update_smart_update\">Matalas na pag-update</string>\n    <string name=\"information_empty_repos\">Wala kang na-set na repo.</string>\n    <string name=\"action_add_repo\">Magdagdag ng repo</string>\n    <string name=\"label_extension_repos\">Mga repo ng extension</string>\n    <string name=\"onboarding_storage_help_action\">Gabay sa storage</string>\n    <string name=\"error_repo_exists\">Umiiral na ang repo na ito!</string>\n    <string name=\"action_delete_repo\">Tanggalin ang repo</string>\n    <string name=\"label_add_repo_input\">URL ng repo</string>\n    <string name=\"action_add_repo_message\">Magdagdag ng mga karagdagang repo sa Mihon. Dapat ito ay isang URL na nagtatapos sa \\\"index.min.json\\\".</string>\n    <string name=\"invalid_repo_name\">Di-wastong URL ng repo</string>\n    <string name=\"delete_repo_confirmation\">Gusto mo bang tanggalin ang repo na \\\"%s\\\"?</string>\n    <string name=\"manga_interval_custom_amount\">Custom na frequency sa pag-update:</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"manga_interval_expected_update_soon\">Malapit na</string>\n    <string name=\"ext_revoke_trust\">Bawiin ang mga pinagkakatiwalaang hindi kilalang extension</string>\n    <string name=\"action_open_repo\">Open source na repo</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Patayin ang pag-zoom out</string>\n    <string name=\"action_replace_repo\">Palitan</string>\n    <string name=\"action_add_anyway\">Idagdag pa rin</string>\n    <string name=\"action_migrate_duplicate\">Ilipat ang kasalukuyang entry</string>\n    <string name=\"action_replace_repo_title\">Umiiral na ang Signing Key Fingerprint</string>\n    <string name=\"action_replace_repo_message\">Ang repository na %1$s ay may magkaparehong Signing Key Fingerprint sa %2$s.\n\\nKung ito ay inaasahan, %2$s ang papalitan, kung hindi naman ay makipag-ugnayan sa tagapamahala ng iyong repo.</string>\n    <string name=\"pref_display_profile\">Custom na profile sa display</string>\n    <string name=\"label_upcoming\">Paparating</string>\n    <string name=\"upcoming_guide\">Gabay sa Paparating</string>\n    <string name=\"upcoming_calendar_next\">Susunod na Buwan</string>\n    <string name=\"upcoming_calendar_prev\">Nakaraang Buwan</string>\n    <string name=\"action_view_upcoming\">Tingnan ang mga Paparating na Update</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Nabigong makakuha ng patuloy na pag-access ng folder. Ang app ay magkaroon ng di-inaasahang pagkilos.</string>\n    <string name=\"pref_flash_page_interval\">Mag-flash kada</string>\n    <string name=\"pref_flash_style_white_black\">Puti at Itim</string>\n    <string name=\"pref_flash_duration\">Tagal ng pag-flash</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_with\">Mag-flash na may</string>\n    <string name=\"pref_flash_style_black\">Itim</string>\n    <string name=\"pref_flash_style_white\">Puti</string>\n    <string name=\"manga_interval_expected_update_null\">Ang manga na ito ay nakumpleto na, o walang nahulaang petsa ng paglabas.</string>\n    <string name=\"invalid_backup_file_json\">Hindi suportado ang JSON backup</string>\n    <string name=\"invalid_backup_file_unknown\">Nasira ang backup file</string>\n    <string name=\"extensionRepo_settings\">Mga repo ng extension</string>\n    <string name=\"action_copy_link\">Kopyahin ang link</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Laktawan ang pag-download ng mga kopya ng mga nabasang kabanata</string>\n    <string name=\"add_repo_confirmation\">Gusto mo bang idagdag ang repo na \\\"%s\\\"?</string>\n    <string name=\"confirm_tracker_update\">I-update ang mga tracker hanggang kabanata %d?</string>\n    <string name=\"onboarding_permission_crashlytics\">Magpadala ang mga crash log</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Magpadala ng hindi nagpapakilalang mga crash log sa mga developer.</string>\n    <string name=\"onboarding_permission_analytics\">Payagan ang analitiko</string>\n    <string name=\"pref_security\">Seguridad</string>\n    <string name=\"pref_firebase\">Mga Analitiko at Mga Crash log</string>\n    <string name=\"firebase_summary\">Ang pagpapadala ng mga crash log at analitiko ay magbibigay-daan sa amin na tukuyin at ayusin ang mga isyu, pahusayin ang performance, at gawing mas nauugnay ang mga update sa hinaharap sa iyong mga pangangailangan</string>\n    <string name=\"onboarding_permission_analytics_description\">Magpadala ng hindi nakikilalang data ng paggamit para mapahusay ang mga feature ng app.</string>\n    <string name=\"non_library_settings\">Lahat ng nabasang entry</string>\n    <string name=\"action_sort_random\">Random</string>\n    <string name=\"ext_remove\">Tanggalin</string>\n    <string name=\"ext_confirm_remove\">Alisin ang Extension?</string>\n    <string name=\"remove_private_extension_message\">Gusto mo ba talagang tanggalin ang \\\"%s\\\" na extension?</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">I-update ang progress kapag namarka bilang nabasa na</string>\n    <string name=\"trackers_updated_summary\">Na-update ang mga tracker sa kabanata %d</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Kung naglo-load ang reader ng isang blangkong imahe ay unti-unting bawasan ang threshold.\\nNapili: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Custom na threshold sa hardware bitmap</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Default (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Nakakaapekto sa performance. Paganahin lamang kung ang pagbabawas ng bitmap threshold ay hindi nakakapag-ayos ng mga isyu sa blangkong imahe</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pinahihinto ang kasaysayan ng pagbabasa para sa extension</string>\n    <string name=\"label_auto\">Awto</string>\n    <string name=\"action_toggle_private_off\">Publikong I-track</string>\n    <string name=\"library_exported\">Na-export ang Aklatan</string>\n    <string name=\"author\">May-akda</string>\n    <string name=\"tracked_privately\">Pribadong na-track</string>\n    <string name=\"artist\">Artista</string>\n    <string name=\"action_toggle_private_on\">Pribadong I-track</string>\n    <string name=\"export\">I-export</string>\n    <string name=\"library_list\">Listahan ng Aklatan</string>\n    <string name=\"theme_monochrome\">Monokromatiko</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Gamitin ang legacy decoder para sa long strip reader</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Markahan ang mga nadobleng nabasa na kabanata bilang nabasa na</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Après %1$s minute</item>\n        <item quantity=\"many\">Après %1$s minutes</item>\n        <item quantity=\"other\">Après %1$s minutes</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nouveau chapitre</item>\n        <item quantity=\"many\">%1$d nouveaux chapitres</item>\n        <item quantity=\"other\">%1$d nouveaux chapitres</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Chapitre %1$s et 1 autre</item>\n        <item quantity=\"many\">Chapitres %1$s et %2$d autres</item>\n        <item quantity=\"other\">Chapitres %1$s et %2$d autres</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Pour %d titre</item>\n        <item quantity=\"many\">Pour %d titres</item>\n        <item quantity=\"other\">Pour %d titres</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Mise à jour d\\'extension disponible</item>\n        <item quantity=\"many\">%d mises à jour d\\'extensions disponibles</item>\n        <item quantity=\"other\">%d mises à jour d\\'extensions disponibles</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s restant</item>\n        <item quantity=\"many\">%1$s restants</item>\n        <item quantity=\"other\">%1$s restants</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d catégorie</item>\n        <item quantity=\"many\">%d catégories</item>\n        <item quantity=\"other\">%d catégories</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Effectuée en %1$s avec %2$s erreur</item>\n        <item quantity=\"many\">Effectuée en %1$s avec %2$s erreurs</item>\n        <item quantity=\"other\">Effectuée en %1$s avec %2$s erreurs</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s chapitre</item>\n        <item quantity=\"many\">%1$s chapitres</item>\n        <item quantity=\"other\">%1$s chapitres</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">Suivi par %d service</item>\n        <item quantity=\"many\">Suivi par %d services</item>\n        <item quantity=\"other\">Suivi par %d services</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d chapitre a été sauté, soit la source ne l\\'a pas, soit il a été filtré</item>\n        <item quantity=\"many\">%d chapitres ont été sautés, soit la source ne les a pas, soit ils ont été filtrés</item>\n        <item quantity=\"other\">%d chapitres ont été sautés, soit la source ne les a pas, soit il ont été filtrés</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Hier</item>\n        <item quantity=\"many\">Il y a %1$d jours</item>\n        <item quantity=\"other\">Il y a %1$d jours</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Chapitre suivant non lu</item>\n        <item quantity=\"many\">Les %d chapitres suivants non lus</item>\n        <item quantity=\"other\">Les %d chapitres suivants non lus</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Chapitre suivant</item>\n        <item quantity=\"many\">%d chapitres suivants</item>\n        <item quantity=\"other\">%d chapitres suivants</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s chapitre manquant</item>\n        <item quantity=\"many\">%1$s chapitres manquants</item>\n        <item quantity=\"other\">%1$s chapitres manquants</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 jour</item>\n        <item quantity=\"many\">%d jours</item>\n        <item quantity=\"other\">%d jours</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d dépôt</item>\n        <item quantity=\"many\">%d dépôts</item>\n        <item quantity=\"other\">%d dépôts</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Demain</item>\n        <item quantity=\"many\">Dans %1$d jours</item>\n        <item quantity=\"other\">Dans %1$d jours</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 page</item>\n        <item quantity=\"many\">%1$s pages</item>\n        <item quantity=\"other\">%1$s pages</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/fr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nom</string>\n    <string name=\"label_settings\">Paramètres</string>\n    <string name=\"label_download_queue\">File de téléchargement</string>\n    <string name=\"label_library\">Bibliothèque</string>\n    <string name=\"label_recent_manga\">Historique</string>\n    <string name=\"label_recent_updates\">Mises à jour</string>\n    <string name=\"label_backup\">Sauvegarder et restaurer</string>\n    <string name=\"action_settings\">Paramètres</string>\n    <string name=\"action_filter\">Filtre</string>\n    <string name=\"action_filter_bookmarked\">Favori</string>\n    <string name=\"action_filter_unread\">Non lus</string>\n    <string name=\"action_filter_empty\">Retirer le filtre</string>\n    <string name=\"action_sort_alpha\">Alphabétiquement</string>\n    <string name=\"action_sort_last_read\">Dernier lu</string>\n    <string name=\"action_search\">Rechercher</string>\n    <string name=\"action_select_all\">Tout sélectionner</string>\n    <string name=\"action_mark_as_read\">Marquer comme lu</string>\n    <string name=\"action_mark_as_unread\">Marquer comme non lu</string>\n    <string name=\"action_mark_previous_as_read\">Marquer les précédents comme lus</string>\n    <string name=\"action_download\">Télécharger</string>\n    <string name=\"action_bookmark\">Marquer le chapitre</string>\n    <string name=\"action_remove_bookmark\">Retirer des favoris</string>\n    <string name=\"action_delete\">Supprimer</string>\n    <string name=\"action_update_library\">Mettre à jour la bibliothèque</string>\n    <string name=\"action_edit\">Modifier</string>\n    <string name=\"action_add\">Ajouter</string>\n    <string name=\"action_add_category\">Ajouter une catégorie</string>\n    <string name=\"action_edit_categories\">Modifier les catégories</string>\n    <string name=\"action_rename_category\">Renommer la catégorie</string>\n    <string name=\"action_move_category\">Définir la catégorie</string>\n    <string name=\"action_edit_cover\">Modifier la couverture</string>\n    <string name=\"action_pause\">Pause</string>\n    <string name=\"action_previous_chapter\">Chapitre précédent</string>\n    <string name=\"action_next_chapter\">Chapitre suivant</string>\n    <string name=\"action_retry\">Réessayer</string>\n    <string name=\"action_remove\">Supprimer</string>\n    <string name=\"action_resume\">Reprendre</string>\n    <string name=\"action_open_in_browser\">Ouvrir dans le navigateur</string>\n    <string name=\"action_display_mode\">Mode d\\'affichage</string>\n    <string name=\"action_display\">Affichage</string>\n    <string name=\"action_display_grid\">Grille compacte</string>\n    <string name=\"action_display_list\">Liste</string>\n    <string name=\"action_cancel\">Annuler</string>\n    <string name=\"action_sort\">Trier</string>\n    <string name=\"action_install\">Installer</string>\n    <string name=\"action_share\">Partager</string>\n    <string name=\"action_save\">Télécharger la page</string>\n    <string name=\"action_reset\">Réinitialiser</string>\n    <string name=\"loading\">Chargement…</string>\n    <string name=\"pref_category_general\">Général</string>\n    <string name=\"pref_category_reader\">Lecteur</string>\n    <string name=\"pref_category_downloads\">Téléchargements</string>\n    <string name=\"pref_category_tracking\">Suivi</string>\n    <string name=\"pref_category_advanced\">Avancé</string>\n    <string name=\"pref_category_about\">À propos</string>\n    <string name=\"pref_library_columns\">Taille de grille</string>\n    <string name=\"portrait\">Portrait</string>\n    <string name=\"landscape\">Paysage</string>\n    <string name=\"pref_library_update_interval\">Mises à jour automatiques</string>\n    <string name=\"update_never\">Désactivé</string>\n    <string name=\"update_6hour\">Toutes les 6 heures</string>\n    <string name=\"update_12hour\">Toutes les 12 heures</string>\n    <string name=\"update_24hour\">Tous les jours</string>\n    <string name=\"update_48hour\">Tous les 2 jours</string>\n    <string name=\"all\">Tout</string>\n    <string name=\"pref_library_update_restriction\">Restrictions matérielles pour les mises à jour automatiques</string>\n    <string name=\"charging\">Lors de la charge</string>\n    <string name=\"pref_update_only_non_completed\">Exclure si le statut est « Terminé »</string>\n    <string name=\"pref_auto_update_manga_sync\">Synchroniser la progression après lecture</string>\n    <string name=\"pref_fullscreen\">Plein écran</string>\n    <string name=\"pref_page_transitions\">Activer les transitions</string>\n    <string name=\"pref_show_page_number\">Afficher le numéro des pages</string>\n    <string name=\"pref_custom_brightness\">Luminosité personnalisée</string>\n    <string name=\"pref_custom_color_filter\">Filtre de couleur personnalisé</string>\n    <string name=\"pref_keep_screen_on\">Garder l\\'écran allumé</string>\n    <string name=\"pref_reader_navigation\">Navigation</string>\n    <string name=\"pref_read_with_volume_keys\">Avec les boutons de volume</string>\n    <string name=\"pref_reader_theme\">Couleur de fond</string>\n    <string name=\"white_background\">Blanc</string>\n    <string name=\"black_background\">Noir</string>\n    <string name=\"pref_viewer_type\">Mode de lecture par défaut</string>\n    <string name=\"left_to_right_viewer\">Pagé (gauche à droite)</string>\n    <string name=\"right_to_left_viewer\">De droite à gauche</string>\n    <string name=\"vertical_viewer\">Pages (vertical)</string>\n    <string name=\"webtoon_viewer\">Bande continue</string>\n    <string name=\"pref_image_scale_type\">Type de mise à l\\'échelle</string>\n    <string name=\"scale_type_fit_screen\">Adapter à l\\'écran</string>\n    <string name=\"scale_type_stretch\">Étirer</string>\n    <string name=\"scale_type_fit_width\">Adapter à la largeur</string>\n    <string name=\"scale_type_fit_height\">Adapter à la hauteur</string>\n    <string name=\"scale_type_original_size\">Taille originale</string>\n    <string name=\"scale_type_smart_fit\">Adaptation intelligente</string>\n    <string name=\"pref_zoom_start\">Position du zoom initial</string>\n    <string name=\"zoom_start_automatic\">Automatique</string>\n    <string name=\"zoom_start_left\">Gauche</string>\n    <string name=\"zoom_start_right\">Droite</string>\n    <string name=\"zoom_start_center\">Centre</string>\n    <string name=\"pref_rotation_type\">Rotation par défaut</string>\n    <string name=\"rotation_free\">Libre</string>\n    <string name=\"rotation_force_portrait\">Bloqué sur portrait</string>\n    <string name=\"rotation_force_landscape\">Bloqué sur paysage</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">V</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">O</string>\n    <string name=\"pref_remove_after_read\">Suppression automatique après lecture</string>\n    <string name=\"disabled\">Désactivé</string>\n    <string name=\"last_read_chapter\">Dernier chapitre lu</string>\n    <string name=\"second_to_last\">Avant-dernier chapitre lu</string>\n    <string name=\"third_to_last\">Troisième chapitre avant le dernier lu</string>\n    <string name=\"fourth_to_last\">Quatrième chapitre avant le dernier lu</string>\n    <string name=\"pref_download_new\">Télécharger les nouveaux chapitres</string>\n    <string name=\"services\">Services</string>\n    <string name=\"used_cache\">Utilisé : %1$s</string>\n    <string name=\"cache_deleted\">Cache effacé, %1$d fichiers supprimés</string>\n    <string name=\"cache_delete_error\">Une erreur est survenue lors de l\\'effacement du cache</string>\n    <string name=\"pref_clear_cookies\">Effacer les cookies</string>\n    <string name=\"cookies_cleared\">Cookies effacés</string>\n    <string name=\"pref_clear_database\">Effacer la base de données</string>\n    <string name=\"pref_clear_database_summary\">Supprimer l\\'historique des entrées qui ne sont pas enregistrées dans votre bibliothèque</string>\n    <string name=\"clear_database_completed\">Entrées supprimées</string>\n    <string name=\"version\">Version</string>\n    <string name=\"pref_enable_acra\">Envoyer des rapports de plantage</string>\n    <string name=\"pref_acra_summary\">Aident à corriger les bugs. Aucune donnée sensible ne sera envoyée</string>\n    <string name=\"login_title\">Connexion à %1$s</string>\n    <string name=\"username\">Nom d\\'utilisateur</string>\n    <string name=\"password\">Mot de passe</string>\n    <string name=\"login\">Se connecter</string>\n    <string name=\"unknown_error\">Erreur inconnue</string>\n    <string name=\"ongoing\">En cours</string>\n    <string name=\"unknown\">Inconnu</string>\n    <string name=\"licensed\">Licencié</string>\n    <string name=\"remove_from_library\">Retirer de la bibliothèque</string>\n    <string name=\"display_mode_chapter\">Chapitre %1$s</string>\n    <string name=\"chapter_downloading_progress\">En téléchargement (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Erreur</string>\n    <string name=\"show_title\">Titre de la source</string>\n    <string name=\"show_chapter_number\">Numéro de chapitre</string>\n    <string name=\"sort_by_number\">Par numéro de chapitre</string>\n    <string name=\"manga_download\">Télécharger</string>\n    <string name=\"download_unread\">Non lus</string>\n    <string name=\"manga_tracking_tab\">Suivi</string>\n    <string name=\"reading\">En cours</string>\n    <string name=\"completed\">Terminé</string>\n    <string name=\"dropped\">Abandonné</string>\n    <string name=\"on_hold\">En pause</string>\n    <string name=\"plan_to_read\">À lire</string>\n    <string name=\"score\">Note</string>\n    <string name=\"title\">Titre</string>\n    <string name=\"status\">Statut</string>\n    <string name=\"chapters\">Chapitres</string>\n    <string name=\"error_category_exists\">Une catégorie avec ce nom existe déjà !</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ceci enlèvera la date de lecture de ce chapitre. Êtes-vous sûr(e) ?</string>\n    <string name=\"dialog_with_checkbox_reset\">Réinitialiser tous les chapitres de ce titre</string>\n    <string name=\"snack_add_to_library\">Ajouter à la bibliothèque ?</string>\n    <string name=\"picture_saved\">Image sauvegardée</string>\n    <string name=\"custom_filter\">Filtre personnalisé</string>\n    <string name=\"set_as_cover\">Ajouter comme couverture</string>\n    <string name=\"cover_updated\">Couverture mise à jour</string>\n    <string name=\"chapter_progress\">Page : %1$d</string>\n    <string name=\"no_next_chapter\">Chapitre suivant non trouvé</string>\n    <string name=\"decode_image_error\">L\\'image n\\'a pas pu être chargée</string>\n    <string name=\"confirm_set_image_as_cover\">Voulez-vous mettre cette image comme couverture ?</string>\n    <string name=\"download_queue_error\">Une erreur est survenue lors du téléchargement des chapitres. Vous pouvez réessayer dans la section téléchargements</string>\n    <string name=\"notification_new_chapters\">Des nouveaux chapitres ont été trouvés</string>\n    <string name=\"notification_cover_update_failed\">La mise à jour de la couverture a échoué</string>\n    <string name=\"notification_first_add_to_library\">Veuillez ajouter ce titre à votre bibliothèque avant de faire cela</string>\n    <string name=\"file_select_cover\">Sélectionner l\\'image de couverture</string>\n    <string name=\"file_select_backup\">Sélectionner fichier de sauvegarde</string>\n    <string name=\"update_check_confirm\">Télécharger</string>\n    <string name=\"update_check_no_new_updates\">Aucune mise à jour disponible</string>\n    <string name=\"update_check_notification_download_in_progress\">Téléchargement en cours…</string>\n    <string name=\"update_check_notification_download_complete\">Appuyer pour installer</string>\n    <string name=\"update_check_notification_download_error\">Erreur lors du téléchargement</string>\n    <string name=\"update_check_notification_update_available\">Mise à jour disponible !</string>\n    <string name=\"information_no_downloads\">Aucun téléchargement en cours</string>\n    <string name=\"information_no_recent\">Pas de mises à jour récentes</string>\n    <string name=\"information_no_recent_manga\">Rien de lu récemment</string>\n    <string name=\"information_empty_library\">Votre bibliothèque est vide</string>\n    <string name=\"download_notifier_downloader_title\">Téléchargement</string>\n    <string name=\"download_notifier_title_error\">Erreur</string>\n    <string name=\"download_notifier_text_only_wifi\">Aucune connexion disponible</string>\n    <string name=\"download_notifier_no_network\">Aucune connexion disponible</string>\n    <string name=\"clear_database_confirmation\">Êtes-vous sûr(e) ? Les chapitres lus et la progression des entrées hors dans la bibliothèque seront perdues</string>\n    <string name=\"confirm_delete_chapters\">Supprimer les chapitres sélectionnés ?</string>\n    <string name=\"download_notifier_unknown_error\">Impossible de télécharger le chapitre en raison d\\'une erreur inattendue</string>\n    <string name=\"fifth_to_last\">Cinquième chapitre avant le dernier lu</string>\n    <string name=\"login_success\">Connecté</string>\n    <string name=\"pref_clear_chapter_cache\">Effacer le cache des chapitres</string>\n    <string name=\"pref_remove_after_marked_as_read\">Après avoir été marqué comme lu</string>\n    <string name=\"sort_by_source\">Par source</string>\n    <string name=\"updating_category\">Mise à jour de la catégorie</string>\n    <string name=\"no_more_results\">Pas d\\'autres résultats</string>\n    <string name=\"snack_categories_deleted\">Catégories supprimées</string>\n    <string name=\"action_undo\">Annuler</string>\n    <string name=\"categories\">Catégories</string>\n    <string name=\"manga\">Entrées de la bibliothèque</string>\n    <string name=\"history\">Historique</string>\n    <string name=\"app_not_available\">Application indisponible</string>\n    <string name=\"update_weekly\">Chaque semaine</string>\n    <string name=\"default_category\">Catégorie par défaut</string>\n    <string name=\"download_notifier_download_paused\">Téléchargement en pause</string>\n    <string name=\"local_source\">Source locale</string>\n    <string name=\"chapter_paused\">En pause</string>\n    <string name=\"action_open_log\">Ouvrir le fichier</string>\n    <string name=\"action_restore\">Restaurer</string>\n    <string name=\"restore_completed\">Restauration terminée</string>\n    <string name=\"backup_choice\">Que voulez-vous sauvegarder ?</string>\n    <string name=\"delete_downloads_for_manga\">Supprimer les chapitres téléchargés ?</string>\n    <string name=\"track\">Suivi</string>\n    <string name=\"action_sort_total\">Total de chapitres</string>\n    <string name=\"pref_create_backup\">Créer une sauvegarde</string>\n    <string name=\"pref_create_backup_summ\">Peut être utilisé pour restaurer la bibliothèque actuelle</string>\n    <string name=\"pref_restore_backup\">Restaurer une sauvegarde</string>\n    <string name=\"pref_restore_backup_summ\">Restaurer la bibliothèque à partir d\\'un fichier de sauvegarde</string>\n    <string name=\"pref_backup_interval\">Fréquence de sauvegarde</string>\n    <string name=\"backup_created\">Sauvegarde créée</string>\n    <string name=\"restoring_backup\">Restauration de sauvegarde en cours</string>\n    <string name=\"creating_backup\">Création de sauvegarde en cours</string>\n    <string name=\"default_category_summary\">Toujours demander</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverser les boutons de volume</string>\n    <string name=\"pref_crop_borders\">Rogner les bordures</string>\n    <string name=\"action_global_search\">Recherche globale</string>\n    <string name=\"other_source\">Autre</string>\n    <string name=\"action_global_search_hint\">Recherche globale…</string>\n    <string name=\"latest\">Récents</string>\n    <string name=\"browse\">Explorer</string>\n    <string name=\"action_display_download_badge\">Chapitres téléchargés</string>\n    <string name=\"channel_common\">Général</string>\n    <string name=\"information_empty_category\">Vous n\\'avez aucune catégorie. Appuyez sur le bouton « + » pour en créer une afin d\\'organiser votre bibliothèque.</string>\n    <string name=\"label_extensions\">Extensions</string>\n    <string name=\"ext_update\">Mettre à jour</string>\n    <string name=\"ext_install\">Installer</string>\n    <string name=\"ext_pending\">En attente</string>\n    <string name=\"ext_downloading\">En cours de téléchargement</string>\n    <string name=\"ext_installing\">En cours d\\'installation</string>\n    <string name=\"ext_installed\">Installée</string>\n    <string name=\"ext_uninstall\">Désinstaller</string>\n    <string name=\"untrusted_extension\">Extension non reconnue</string>\n    <string name=\"untrusted_extension_message\">Une extension malveillante pourrait lire n\\'importe quel identifiant de connexion stocké ou exécuter un code arbitraire.\n\\n\n\\nEn faisant confiance à cette extension, vous acceptez ces risques.</string>\n    <string name=\"pref_double_tap_anim_speed\">Vitesse d\\'animation du double-clic</string>\n    <string name=\"double_tap_anim_speed_0\">Sans animation</string>\n    <string name=\"double_tap_anim_speed_normal\">Normale</string>\n    <string name=\"double_tap_anim_speed_fast\">Rapide</string>\n    <string name=\"manga_added_library\">Ajouté à la bibliothèque</string>\n    <string name=\"manga_removed_library\">Supprimé de la bibliothèque</string>\n    <string name=\"copied_to_clipboard\">%1$s\n\\na été copié dans le presse papier</string>\n    <string name=\"source_not_installed\">Sources non installées : %1$s</string>\n    <string name=\"track_status\">Statut</string>\n    <string name=\"track_type\">Type</string>\n    <string name=\"migration_dialog_what_to_include\">Sélectionner les données à inclure</string>\n    <string name=\"label_migration\">Migrer</string>\n    <string name=\"label_extension_info\">Informations sur l\\'extension</string>\n    <string name=\"ext_trust\">Fiable</string>\n    <string name=\"ext_untrusted\">Non fiable</string>\n    <string name=\"pager_viewer\">Pages</string>\n    <string name=\"repeating\">Relecture</string>\n    <string name=\"transition_finished\">Terminé :</string>\n    <string name=\"transition_current\">En cours :</string>\n    <string name=\"transition_next\">Suivant :</string>\n    <string name=\"transition_previous\">Précédent :</string>\n    <string name=\"transition_no_next\">C\\'était le dernier chapitre</string>\n    <string name=\"transition_no_previous\">Il n\\'y a pas de chapitre précédent</string>\n    <string name=\"transition_pages_loading\">Chargement des pages…</string>\n    <string name=\"transition_pages_error\">Échec du chargement des pages : %1$s</string>\n    <string name=\"migrate\">Déplacer</string>\n    <string name=\"copy\">Copier</string>\n    <string name=\"pref_read_with_long_tap\">Afficher les actions en appuyant longuement</string>\n    <string name=\"action_open_in_web_view\">Ouvrir dans WebView</string>\n    <string name=\"pref_skip_read_chapters\">Passer les chapitres marqués comme lus</string>\n    <string name=\"filter_mode_multiply\">Produit</string>\n    <string name=\"filter_mode_screen\">Écran</string>\n    <string name=\"pref_color_filter_mode\">Mode de filtrage via couleurs mélangées</string>\n    <string name=\"filter_mode_overlay\">Incrustation</string>\n    <string name=\"label_help\">Aide</string>\n    <string name=\"filter_mode_lighten\">Éclaircir</string>\n    <string name=\"filter_mode_darken\">Obscurcir</string>\n    <string name=\"no_results_found\">Aucun résultat trouvé</string>\n    <string name=\"migration_selection_prompt\">Sélectionnez une source depuis laquelle migrer</string>\n    <string name=\"pref_category_library\">Bibliothèque</string>\n    <string name=\"obsolete_extension_message\">Cette extension n\\'est plus disponible. Elle peut ne pas fonctionner correctement et causer des problèmes avec l\\'application. Il est recommandé de la désinstaller.</string>\n    <string name=\"pref_date_format\">Format de date</string>\n    <string name=\"pref_category_library_update\">Mises à jour</string>\n    <string name=\"action_webview_back\">Précédent</string>\n    <string name=\"action_webview_forward\">Suivant</string>\n    <string name=\"action_webview_refresh\">Actualiser</string>\n    <string name=\"ext_obsolete\">Obsolète</string>\n    <string name=\"logout_title\">Se déconnecter de %1$s ?</string>\n    <string name=\"logout\">Se déconnecter</string>\n    <string name=\"logout_success\">Vous êtes maintenant déconnecté(e)</string>\n    <string name=\"paused\">En pause</string>\n    <string name=\"label_more\">Plus</string>\n    <string name=\"action_sort_latest_chapter\">Dernier chapitre</string>\n    <string name=\"action_view_chapters\">Voir les chapitres</string>\n    <string name=\"action_cancel_all\">Tout annuler</string>\n    <string name=\"theme_light\">Clair</string>\n    <string name=\"theme_dark\">Sombre</string>\n    <string name=\"theme_system\">Système</string>\n    <string name=\"pref_manage_notifications\">Notifications</string>\n    <string name=\"pref_category_security\">Sécurité et confidentialité</string>\n    <string name=\"lock_with_biometrics\">Nécessite un déverrouillage</string>\n    <string name=\"lock_when_idle\">Verrouiller en cas d\\'inactivité</string>\n    <string name=\"lock_always\">Toujours</string>\n    <string name=\"lock_never\">Jamais</string>\n    <string name=\"secure_screen\">Mode discret</string>\n    <string name=\"ext_updates_pending\">Mises à jour en attente</string>\n    <string name=\"pref_cutout_short\">Utiliser la zone de l\\'encoche</string>\n    <string name=\"information_cloudflare_bypass_failure\">Impossible de contourner Cloudflare</string>\n    <string name=\"information_webview_outdated\">Veuillez mettre à jour l\\'application WebView pour une meilleure compatibilité</string>\n    <string name=\"channel_new_chapters\">Mises à jour des chapitres</string>\n    <string name=\"secure_screen_summary\">L\\'écran sécurisé cache le contenu lors du changement d\\'application et bloque les captures d\\'écran</string>\n    <string name=\"pref_category_display\">Affichage</string>\n    <string name=\"notification_chapters_single\">Chapitre %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Chapitre %1$s et %2$d autres</string>\n    <string name=\"notification_chapters_multiple\">Chapitres %1$s</string>\n    <string name=\"hide_notification_content\">Cacher le contenu des notifications</string>\n    <string name=\"pref_disable_battery_optimization\">Désactiver la fonction d\\'optimisation de la batterie</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Facilite les mises à jour et sauvegardes de la bibliothèque en arrière-plan</string>\n    <string name=\"battery_optimization_disabled\">La fonction d\\'optimisation de la batterie est déjà désactivée</string>\n    <string name=\"email\">Adresse courriel</string>\n    <string name=\"pref_always_show_chapter_transition\">Toujours afficher la transition entre les chapitres</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_newest\">Plus récent</string>\n    <string name=\"action_oldest\">Plus ancien</string>\n    <string name=\"action_move_to_top\">Déplacer au début</string>\n    <string name=\"action_move_to_bottom\">Déplacer à la fin</string>\n    <string name=\"channel_ext_updates\">Mises à jour d\\'extensions</string>\n    <string name=\"updating_library\">Mise à jour de la bibliothèque</string>\n    <string name=\"label_sources\">Sources</string>\n    <string name=\"pref_category_reading\">En cours</string>\n    <string name=\"vertical_plus_viewer\">Bande continue avec espaces</string>\n    <string name=\"pref_skip_filtered_chapters\">Passer les chapitres filtrés</string>\n    <string name=\"action_pin\">Épingler</string>\n    <string name=\"action_select_inverse\">Inverser la sélection</string>\n    <string name=\"add_tracking\">Ajouter le suivi</string>\n    <string name=\"pref_webtoon_side_padding\">Décalage latéral</string>\n    <string name=\"pinned_sources\">Épinglé</string>\n    <string name=\"action_unpin\">Désépingler</string>\n    <string name=\"in_library\">Dans la bibliothèque</string>\n    <string name=\"add_to_library\">Ajouter à la bibliothèque</string>\n    <string name=\"restoring_backup_canceled\">Restauration de sauvegarde annulée</string>\n    <string name=\"restoring_backup_error\">Échec de la restauration de sauvegarde</string>\n    <string name=\"restore_in_progress\">Restauration déjà en cours</string>\n    <string name=\"label_downloaded_only\">Téléchargés uniquement</string>\n    <string name=\"creating_backup_error\">Échec de la sauvegarde</string>\n    <string name=\"backup_in_progress\">Sauvegarde déjà en cours</string>\n    <string name=\"manga_info_collapse\">Moins</string>\n    <string name=\"manga_info_expand\">Plus</string>\n    <string name=\"website\">Site web</string>\n    <string name=\"recent_manga_time\">Ch. %1$s – %2$s</string>\n    <string name=\"licenses\">Licences à code source ouvert</string>\n    <string name=\"last_used_source\">Dernière utilisée</string>\n    <string name=\"check_for_updates\">Rechercher des mises à jour</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d s</string>\n    <string name=\"information_webview_required\">WebView est requis pour le fonctionnement l\\'application</string>\n    <string name=\"local_source_help_guide\">Guide des sources locales</string>\n    <string name=\"downloaded_only_summary\">Filtrer toutes les entrées dans la bibliothèque</string>\n    <string name=\"gray_background\">Gris</string>\n    <string name=\"pref_category_for_this_series\">Pour cette série</string>\n    <string name=\"viewer\">Mode de lecture</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Impossible d\\'ouvrir les paramètres de l\\'appareil</string>\n    <string name=\"pref_refresh_library_covers\">Actualiser les couvertures de la bibliothèque</string>\n    <string name=\"tracking_info\">Synchronisation à sens unique pour mettre à jour la progression du chapitre dans les services de suivi. Configurez le suivi des entrées individuelles à partir de leur bouton de suivi.</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Vérifier s\\'il y a une nouvelle couverture ou synopsis lors des mises à jour de la bibliothèque</string>\n    <string name=\"sort_by_upload_date\">Par date de téléversement</string>\n    <string name=\"label_data\">Donnée</string>\n    <string name=\"backup_restore_missing_sources\">Sources manquantes :</string>\n    <string name=\"invalid_backup_file_missing_manga\">La sauvegarde ne contient pas d\\'entrées de bibliothèque.</string>\n    <string name=\"invalid_backup_file\">Fichier de sauvegarde invalide :</string>\n    <string name=\"pref_library_update_refresh_metadata\">Actualiser automatiquement les métadonnées</string>\n    <string name=\"action_migrate\">Migrer</string>\n    <string name=\"action_display_comfortable_grid\">Grille espacée</string>\n    <string name=\"tabs_header\">Onglets</string>\n    <string name=\"action_display_show_tabs\">Afficher les onglets des catégories</string>\n    <string name=\"page_list_empty_error\">Aucune page trouvée</string>\n    <string name=\"action_disable_all\">Tout désactiver</string>\n    <string name=\"action_enable_all\">Tout activer</string>\n    <string name=\"pref_show_reading_mode_summary\">Affiche la liste des modes de lecture à l\\'ouverture du lecteur</string>\n    <string name=\"pref_show_reading_mode\">Afficher le mode de lecture</string>\n    <string name=\"action_start\">Commencer</string>\n    <string name=\"loader_not_implemented_error\">Source non trouvée</string>\n    <string name=\"action_disable\">Désactiver</string>\n    <string name=\"requires_app_restart\">Nécessite un redémarrage de l\\'application pour prendre effet</string>\n    <string name=\"label_network\">Réseau</string>\n    <string name=\"tapping_inverted_both\">Les deux</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"tapping_inverted_none\">Non</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverser les zones tactiles</string>\n    <string name=\"unknown_status\">Statut inconnu</string>\n    <string name=\"unknown_author\">Auteur inconnu</string>\n    <string name=\"whats_new\">Quoi de neuf</string>\n    <string name=\"updated_version\">Mise à jour de v%1$s</string>\n    <string name=\"download_insufficient_space\">Impossible de télécharger les chapitres, l\\'espace de stockage est insuffisant</string>\n    <string name=\"action_global_search_query\">Rechercher « %1$s » partout</string>\n    <string name=\"action_sort_date_added\">Date ajoutée</string>\n    <string name=\"pref_category_reading_mode\">Mode de lecture</string>\n    <string name=\"pref_category_theme\">Thème</string>\n    <string name=\"no_pinned_sources\">Vous n\\'avez aucune source épinglée</string>\n    <string name=\"channel_complete\">Compléter</string>\n    <string name=\"channel_progress\">Progression</string>\n    <string name=\"channel_errors\">Erreurs</string>\n    <string name=\"backup_restore_missing_trackers\">Traceurs non connectés :</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permettre la suppression des chapitres marqués d\\'un marque-page</string>\n    <string name=\"pref_category_delete_chapters\">Suppression des chapitres</string>\n    <string name=\"ext_nsfw_warning\">Les sources de cette extension peuvent contenir du contenu NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Ceci n\\'empêche pas les extensions de diffuser du contenu +18 dans l\\'application.</string>\n    <string name=\"no_chapters_error\">Aucun chapitre trouvé</string>\n    <string name=\"confirm_set_chapter_settings\">Appliquer ce paramétrage par défaut ?</string>\n    <string name=\"chapter_settings\">Paramètres du chapitre</string>\n    <string name=\"also_set_chapter_settings_for_library\">S\\'applique également à toutes les entrées de ma bibliothèque</string>\n    <string name=\"set_chapter_settings_as_default\">Appliquer par défaut</string>\n    <string name=\"share_page_info\">%1$s : %2$s, page %3$d</string>\n    <string name=\"downloaded_chapters\">Chapitres téléchargés</string>\n    <string name=\"manga_from_library\">De la bibliothèque</string>\n    <string name=\"action_search_settings\">Rechercher les paramètres</string>\n    <string name=\"pref_incognito_mode_summary\">Suspend l\\'historique de lecture</string>\n    <string name=\"clear_history_confirmation\">Êtes-vous sûr(e) ? Tout l\\'historique sera effacé.</string>\n    <string name=\"pref_incognito_mode\">Mode navigation privée</string>\n    <string name=\"pref_clear_history\">Effacer l\\'historique</string>\n    <string name=\"clear_history_completed\">Historique supprimé</string>\n    <string name=\"chapter_settings_updated\">Paramétrage des chapitres par défaut enregistré</string>\n    <string name=\"spen_next_page\">Page suivante</string>\n    <string name=\"spen_previous_page\">Page précédente</string>\n    <string name=\"migration_help_guide\">Guide de migration des sources</string>\n    <string name=\"pref_category_nsfw_content\">Contenu +18</string>\n    <string name=\"myanimelist_relogin\">Veuillez vous reconnecter à MAL</string>\n    <string name=\"file_picker_error\">L’application de sélection de fichier est introuvable</string>\n    <string name=\"pref_show_nsfw_source\">Afficher dans les listes de sources et d\\'extensions</string>\n    <string name=\"track_finished_reading_date\">Date de fin</string>\n    <string name=\"track_started_reading_date\">Date de début</string>\n    <string name=\"kindlish_nav\">Style Kindle</string>\n    <string name=\"pref_dump_crash_logs\">Partager les rapports de plantage</string>\n    <string name=\"pref_dump_crash_logs_summary\">Enregistre les rapports de plantage dans un fichier pour les partager avec les développeurs</string>\n    <string name=\"pref_viewer_nav\">Zones tactiles</string>\n    <string name=\"edge_nav\">Bord</string>\n    <string name=\"l_nav\">En forme de L</string>\n    <string name=\"action_desc\">Décroissant</string>\n    <string name=\"action_asc\">Croissante</string>\n    <string name=\"action_order_by_chapter_number\">Par numéro de chapitre</string>\n    <string name=\"action_order_by_upload_date\">Par date de téléversement</string>\n    <string name=\"action_filter_tracked\">Suivis</string>\n    <string name=\"action_display_show_number_of_items\">Afficher le nombre d’entrées</string>\n    <string name=\"right_and_left_nav\">Droite et gauche</string>\n    <string name=\"pref_dual_page_split\">Diviser les pages larges</string>\n    <string name=\"pref_dual_page_invert_summary\">Si l\\'emplacement des pages larges divisées ne correspond pas au sens de lecture</string>\n    <string name=\"pref_dual_page_invert\">Inverser le placement des pages divisées</string>\n    <string name=\"backup_restore_content_full\">Vous devrez installer les extensions manquantes et vous connecter ensuite aux services de suivi pour les utiliser.</string>\n    <string name=\"nav_zone_prev\">Précédent</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"nav_zone_right\">Droite</string>\n    <string name=\"nav_zone_left\">Gauche</string>\n    <string name=\"nav_zone_next\">Suivant</string>\n    <string name=\"pref_show_navigation_mode_summary\">Affichage bref à l\\'ouverture du lecteur</string>\n    <string name=\"pref_show_navigation_mode\">Afficher les zones tactiles (superposition)</string>\n    <string name=\"exclude\">Exclure : %s</string>\n    <string name=\"include\">Inclure : %s</string>\n    <string name=\"none\">Aucun(e)</string>\n    <string name=\"action_sort_chapter_fetch_date\">Date de récupération du chapitre</string>\n    <string name=\"pref_library_update_categories_details\">Les entrées dans les catégories exclues ne seront pas mises à jour même si elles sont aussi dans les catégories inclues.</string>\n    <string name=\"pref_download_new_categories_details\">Les entrées des catégories exclues ne seront pas mis à jour même si elles appartiennent aussi à des catégories incluses.</string>\n    <string name=\"pref_category_auto_download\">Téléchargement automatique</string>\n    <string name=\"action_show_errors\">Appuyez pour voir les détails</string>\n    <string name=\"update_check_eol\">Cette version d\\'Android n\\'est plus supportée</string>\n    <string name=\"clipboard_copy_error\">Échec de la copie dans le presse-papiers</string>\n    <string name=\"rotation_landscape\">Paysage</string>\n    <string name=\"rotation_portrait\">Portrait</string>\n    <string name=\"notification_incognito_text\">Désactiver le mode incognito</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Crée des dossiers en fonction du titre des entrées</string>\n    <string name=\"pref_create_folder_per_manga\">Enregistrer les pages dans des dossiers séparés</string>\n    <string name=\"pref_reader_actions\">Actions</string>\n    <string name=\"pref_grayscale\">Niveaux de gris</string>\n    <string name=\"error_no_match\">Aucune correspondance trouvée</string>\n    <string name=\"source_unsupported\">La source n\\'est pas prise en charge</string>\n    <string name=\"unread\">Non lu</string>\n    <string name=\"date\">Date</string>\n    <string name=\"local_filter_order_by\">Trier par</string>\n    <string name=\"local_invalid_format\">Format de chapitre invalide</string>\n    <string name=\"chapter_not_found\">Chapitre non trouvé</string>\n    <string name=\"rotation_type\">Rotation</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"restrictions\">Restrictions : %s</string>\n    <string name=\"cancel_all_for_series\">Tout annuler pour cette série</string>\n    <string name=\"action_display_local_badge\">Source locale</string>\n    <string name=\"error_sharing_cover\">Erreur de partage de couverture</string>\n    <string name=\"error_saving_cover\">Erreur lors de l\\'enregistrement de la couverture</string>\n    <string name=\"cover_saved\">Couverture enregistrée</string>\n    <string name=\"manga_cover\">Couverture</string>\n    <string name=\"tracking_guide\">Manuel de suivi</string>\n    <string name=\"off\">Désactivé</string>\n    <string name=\"on\">Activé</string>\n    <string name=\"categorized_display_settings\">Rendre les réglages de tri propres à chaque catégorie</string>\n    <string name=\"information_empty_category_dialog\">Vous n\\'avez pas encore de catégories.</string>\n    <string name=\"action_start_downloading_now\">Commencer à télécharger</string>\n    <string name=\"restore_miui_warning\">La sauvegarde/restauration peut ne pas fonctionner correctement si l\\'optimisation MIUI est désactivée.</string>\n    <string name=\"enhanced_tracking_info\">Services qui fournissent des fonctionnalités améliorées pour des sources spécifiques. Les entrées sont automatiquement suivies lorsqu\\'elles sont ajoutées à votre bibliothèque.</string>\n    <string name=\"enhanced_services\">Services avancés</string>\n    <string name=\"pref_dark_theme_pure_black\">Mode noir pur</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri aux fraises</string>\n    <string name=\"theme_midnightdusk\">Crépuscule de minuit</string>\n    <string name=\"theme_greenapple\">Pomme verte</string>\n    <string name=\"theme_monet\">Dynamique</string>\n    <string name=\"pref_app_theme\">Thème de l\\'appli</string>\n    <string name=\"about_dont_kill_my_app\">Certains fabricants ont mis en place des restrictions supplémentaires sur les applications qui tuent les services d\\'arrière-plan. Ce site Web contient plus d\\'informations sur la manière de résoudre ce problème.</string>\n    <string name=\"label_background_activity\">Activité en arrière-plan</string>\n    <string name=\"pref_lowest\">Minimale</string>\n    <string name=\"pref_low\">Basse</string>\n    <string name=\"pref_high\">Élevée</string>\n    <string name=\"pref_highest\">Maximale</string>\n    <string name=\"pref_hide_threshold\">Sensibilité pour masquer le menu lors du défilement</string>\n    <string name=\"pref_inverted_colors\">Inversé</string>\n    <string name=\"relative_time_today\">Aujourd\\'hui</string>\n    <string name=\"theme_tealturquoise\">Bleu canard et turquoise</string>\n    <string name=\"confirm_lock_change\">Authentifiez-vous pour confirmer les changements</string>\n    <string name=\"pref_category_appearance\">Apparence</string>\n    <string name=\"label_default\">Par défaut</string>\n    <string name=\"action_track\">Suivre</string>\n    <string name=\"getting_started_guide\">Guide de démarrage</string>\n    <string name=\"pref_tablet_ui_mode\">Mode tablette</string>\n    <string name=\"help_translate\">Aider à traduire</string>\n    <string name=\"pref_remove_exclude_categories\">Catégories exclues</string>\n    <string name=\"ext_app_info\">Infos sur l\\'application</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installez et démarrez Shizuku pour utiliser Shizuku comme installateur d\\'extensions.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku n\\'est pas en cours d\\'exécution</string>\n    <string name=\"ext_installer_legacy\">Legacy</string>\n    <string name=\"ext_installer_pref\">Installeur</string>\n    <string name=\"ext_install_service_notif\">Installation de l\\'extension…</string>\n    <string name=\"action_sort_count\">Entrées totales</string>\n    <string name=\"pref_verbose_logging\">Rapports détaillés</string>\n    <string name=\"pref_verbose_logging_summary\">Inclut des rapports détaillés dans les traces systèmes (réduit les performances de l\\'application)</string>\n    <string name=\"action_display_language_badge\">Langue</string>\n    <string name=\"label_warning\">Avertissement</string>\n    <string name=\"notification_size_warning\">Les mises à jour importantes nuisent aux sources et peuvent entraîner un ralentissement des mises à jour ainsi qu\\'une augmentation de l\\'utilisation de la batterie. Appuyez pour en savoir plus.</string>\n    <string name=\"backup_info\">Vous devez également conserver des copies des sauvegardes à d\\'autres endroits.</string>\n    <string name=\"connected_to_wifi\">Uniquement en Wi-Fi</string>\n    <string name=\"update_72hour\">Tous les 3 jours</string>\n    <string name=\"download_queue_size_warning\">Attention : les téléchargements massifs peuvent entraîner un ralentissement des sources ou le blocage de Mihon. Appuyez pour en savoir plus.</string>\n    <string name=\"ext_update_all\">Tout mettre à jour</string>\n    <string name=\"channel_app_updates\">Mises à jour de l\\'application</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Vider le cache de chapitre au lancement de l\\'application</string>\n    <string name=\"clear_database_source_item_count\">%1$d entrées hors de la bibliothèque dans la base de données</string>\n    <string name=\"database_clean\">Rien à effacer</string>\n    <string name=\"extension_api_error\">Aucune extension trouvée</string>\n    <string name=\"privacy_policy\">Politique de confidentialité</string>\n    <string name=\"pref_update_only_completely_read\">Exclure s\\'il reste un/des chapitre(s) à lire</string>\n    <string name=\"save_chapter_as_cbz\">Enregistrer comme archive CBZ</string>\n    <string name=\"library_errors_help\">Pour savoir comment corriger les erreurs de mise à jour de la bibliothèque, voir %1$s</string>\n    <string name=\"on_hiatus\">En pause</string>\n    <string name=\"publishing_finished\">Publication terminée</string>\n    <string name=\"cancelled\">Annulé</string>\n    <string name=\"action_show_manga\">Afficher le titre</string>\n    <string name=\"action_display_cover_only_grid\">Grille avec seulement la couverture</string>\n    <string name=\"pref_navigate_pan\">Panoramique des images larges</string>\n    <string name=\"pref_landscape_zoom\">Zoom automatique dans les images larges</string>\n    <string name=\"pref_update_only_started\">Exclure si lecture pas encore débutée</string>\n    <string name=\"skipped_reason_completed\">Sauté car la série est terminée</string>\n    <string name=\"skipped_reason_not_started\">Sauté car aucun chapitre n\\'est lu</string>\n    <string name=\"skipped_reason_not_caught_up\">Sauté car il y a des chapitres non lus</string>\n    <string name=\"learn_more\">Appuyez pour en savoir plus</string>\n    <string name=\"notification_update_error\">Échec de %1$d mise(s) à jour</string>\n    <string name=\"rotation_reverse_portrait\">Portrait inversé</string>\n    <string name=\"action_move_to_top_all_for_series\">Déplacer la série vers le haut</string>\n    <string name=\"disabled_nav\">Désactivé</string>\n    <string name=\"error_saving_picture\">Erreur d\\'enregistrement de l\\'image</string>\n    <string name=\"empty_backup_error\">Aucune entrée de bibliothèque à sauvegarder</string>\n    <string name=\"update_check_open\">Ouvrir sur GitHub</string>\n    <string name=\"pref_clear_webview_data\">Effacer les données WebView</string>\n    <string name=\"webview_data_deleted\">Données WebView effacées</string>\n    <string name=\"action_close\">Fermer</string>\n    <string name=\"source_filter_empty_screen\">Aucune source installée trouvée</string>\n    <string name=\"action_sort_last_manga_update\">Dernière verification de mise à jour</string>\n    <string name=\"action_sort_unread_count\">Nombre de non-lus</string>\n    <string name=\"source_empty_screen\">Aucune source trouvée</string>\n    <string name=\"split_tall_images_summary\">Améliore les performances du lecteur</string>\n    <string name=\"download_notifier_split_page_not_found\">Page %d introuvable lors du fractionnement</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Impossible de trouver le chemin du fichier de la page %d</string>\n    <string name=\"pref_reset_viewer_flags\">Réinitialiser les paramètres du lecteur par série</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Réinitialise le mode de lecture et l\\'orientation de toutes les séries</string>\n    <string name=\"pref_reset_viewer_flags_success\">Paramètres du lecteur réinitialisés</string>\n    <string name=\"pref_reset_viewer_flags_error\">Impossible de réinitialiser les paramètres du lecteur</string>\n    <string name=\"empty_screen\">Eh bien, c\\'est gênant</string>\n    <string name=\"ext_info_version\">Version</string>\n    <string name=\"ext_info_language\">Langue</string>\n    <string name=\"ext_info_age_rating\">Classification par âge</string>\n    <string name=\"reading_list\">Liste de lecture</string>\n    <string name=\"wish_list\">Liste de souhaits</string>\n    <string name=\"on_hold_list\">Liste d\\'attente</string>\n    <string name=\"unfinished_list\">Liste des non terminés</string>\n    <string name=\"complete_list\">Liste des lectures terminées</string>\n    <string name=\"network_not_metered\">Uniquement sur réseau illimité</string>\n    <string name=\"cant_open_last_read_chapter\">Impossible d\\'ouvrir le dernier chapitre lu</string>\n    <string name=\"custom_cover\">Couverture personnalisée</string>\n    <string name=\"not_installed\">Non installé</string>\n    <string name=\"pref_app_language\">Langue de l\\'application</string>\n    <string name=\"description_placeholder\">Aucune description</string>\n    <string name=\"theme_lavender\">Lavande</string>\n    <string name=\"delete_category\">Effacer catégorie</string>\n    <string name=\"delete_category_confirmation\">Souhaitez-vous supprimer la catégorie « %s » ?</string>\n    <string name=\"internal_error\">ErreurInterne : Consultez vos rapports de plantage pour plus d\\'informations</string>\n    <string name=\"pref_reset_user_agent_string\">Réinitialiser la liste d\\'agents utilisateurs</string>\n    <string name=\"pref_user_agent_string\">Liste d\\'agents utilisateurs par défaut</string>\n    <string name=\"action_remove_everything\">Tout retirer</string>\n    <string name=\"appwidget_updates_description\">Voir les entrées de votre bibliothèque récemment mises à jour</string>\n    <string name=\"appwidget_unavailable_locked\">Le Widget n\\'est pas disponible lorsque l\\'application est verrouillée</string>\n    <string name=\"error_user_agent_string_blank\">La liste d\\'agents utilisateurs ne peut être vide</string>\n    <string name=\"update_already_running\">Une mise à jour est déjà en cours</string>\n    <string name=\"theme_tidalwave\">Raz-de-marée</string>\n    <string name=\"download_ahead\">Téléchargement anticipé</string>\n    <string name=\"auto_download_while_reading\">Téléchargement anticipé pendant la lecture</string>\n    <string name=\"download_ahead_info\">Fonctionne seulement si le chapitre actuel et le suivant sont déjà téléchargés.</string>\n    <string name=\"are_you_sure\">Êtes-vous sûr(e) ?</string>\n    <string name=\"popular\">Populaire</string>\n    <string name=\"multi_lang\">Multiple</string>\n    <string name=\"updates_last_update_info\">Dernière mise à jour de la bibliothèque le : %s</string>\n    <string name=\"remove_manga\">Vous êtes sur le point de retirer « %s » de votre bibliothèque</string>\n    <string name=\"missing_storage_permission\">Autorisations de stockage non accordées</string>\n    <string name=\"action_search_hint\">Recherche…</string>\n    <string name=\"skipped_reason_not_always_update\">Ignorée car la série ne nécessite pas de mises à jour</string>\n    <string name=\"crash_screen_title\">Oups !</string>\n    <string name=\"pref_appearance_summary\">Thème, format de la date et de l\\'heure</string>\n    <string name=\"pref_downloads_summary\">Téléchargement automatique, téléchargement anticipé</string>\n    <string name=\"pref_tracking_summary\">Synchronisation unidirectionnelle de la progression, synchronisation améliorée</string>\n    <string name=\"pref_backup_summary\">Sauvegardes manuelles et automatiques</string>\n    <string name=\"pref_advanced_summary\">Rapports de plantage, optimisations de la batterie</string>\n    <string name=\"crash_screen_restart_application\">Redémarrer l\\'application</string>\n    <string name=\"pref_browse_summary\">Sources, extensions, recherche globale</string>\n    <string name=\"pref_library_summary\">Catégories, mise à jour globale, faire glisser le chapitre</string>\n    <string name=\"pref_reader_summary\">Mode de lecture, affichage, navigation</string>\n    <string name=\"pref_security_summary\">Verrouillage des applications, écran sécurisé</string>\n    <string name=\"crash_screen_description\">%s a rencontré une erreur inattendue. Nous vous suggérons de nous partager les rapports de plantage dans notre salon d\\'assistance sur Discord.</string>\n    <string name=\"invalid_location\">Emplacement invalide : %s</string>\n    <string name=\"error_user_agent_string_invalid\">Chaîne d\\'agent utilisateur invalide</string>\n    <string name=\"unknown_title\">Titre inconnu</string>\n    <string name=\"updates_last_update_info_just_now\">À l\\'instant</string>\n    <string name=\"action_open_random_manga\">Ouvrir un titre au hasard</string>\n    <string name=\"fdroid_warning\">Les versions de F-Droid ne sont pas officiellement prises en charge.\n\\nAppuyez pour en savoir plus.</string>\n    <string name=\"information_no_entries_found\">Aucune entrée trouvée dans cette catégorie</string>\n    <string name=\"download_notifier_cache_renewal\">Vérification des téléchargements</string>\n    <string name=\"action_display_show_continue_reading_button\">Bouton \\\"Reprendre\\\"</string>\n    <string name=\"track_remove_start_date_conf_text\">Ceci supprimera la date de début que vous avez précédemment sélectionnée dans la base de données de %s</string>\n    <string name=\"track_remove_date_conf_title\">Retirer la date ?</string>\n    <string name=\"track_remove_finish_date_conf_text\">Ceci supprimera la date de fin que vous aviez précédemment sélectionnée dans la base de données de %s</string>\n    <string name=\"pref_invalidate_download_cache\">Réindexe les téléchargements</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forcer l\\'application à revérifier les chapitres téléchargés</string>\n    <string name=\"label_stats\">Statistiques</string>\n    <string name=\"label_overview_section\">Aperçu</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_started\">Commencé</string>\n    <string name=\"label_downloaded\">Téléchargé</string>\n    <string name=\"information_no_manga_category\">La catégorie est vide</string>\n    <string name=\"label_titles_section\">Entrées</string>\n    <string name=\"label_titles_in_global_update\">Dans la mise à jour globale</string>\n    <string name=\"label_read_chapters\">Lus</string>\n    <string name=\"label_tracker_section\">Traqueurs</string>\n    <string name=\"label_used\">Utilisé</string>\n    <string name=\"not_applicable\">s. o.</string>\n    <string name=\"day_short\">%d j</string>\n    <string name=\"hour_short\">%d h</string>\n    <string name=\"minute_short\">%d min</string>\n    <string name=\"seconds_short\">%d s</string>\n    <string name=\"action_not_now\">Pas maintenant</string>\n    <string name=\"label_completed_titles\">Entrées terminées</string>\n    <string name=\"label_read_duration\">Durée de lecture</string>\n    <string name=\"label_tracked_titles\">Entrées suivies</string>\n    <string name=\"label_mean_score\">Note moyenne</string>\n    <string name=\"pref_library_update_show_tab_badge\">Afficher le nombre de chapitres non lus sur l\\'icône des mises à jour</string>\n    <string name=\"copied_to_clipboard_plain\">Copié dans le presse-papier</string>\n    <string name=\"pref_skip_dupe_chapters\">Ignorer les chapitres en double</string>\n    <string name=\"confirm_add_duplicate_manga\">Un titre de votre bibliothèque porte le même nom.\n\\n\n\\nVoulez-vous vraiment continuer ?</string>\n    <string name=\"track_error\">%1$s erreur : %2$s</string>\n    <string name=\"enhanced_services_not_installed\">Disponible mais la source n\\'est pas installée : %s</string>\n    <string name=\"information_required_plain\">*obligatoire</string>\n    <string name=\"pref_hide_in_library_items\">Masquer les entrées déjà présentes dans la bibliothèque</string>\n    <string name=\"action_copy_to_clipboard\">Copier dans le presse-papier</string>\n    <string name=\"action_update_category\">Mettre à jour la catégorie</string>\n    <string name=\"split_tall_images\">Diviser les grandes images</string>\n    <string name=\"overlay_header\">Superposition</string>\n    <string name=\"pref_page_rotate_invert\">Inverser l\\'orientation des pages larges retournées</string>\n    <string name=\"pref_page_rotate\">Tourner les pages larges pour qu\\'elles rentrent</string>\n    <string name=\"pref_debug_info\">Informations de débogage</string>\n    <string name=\"pref_chapter_swipe_start\">Action de glisser à gauche</string>\n    <string name=\"pref_chapter_swipe_end\">Action de glisser à droite</string>\n    <string name=\"pref_double_tap_zoom\">Appuyez deux fois pour zoomer</string>\n    <string name=\"action_sort_next_updated\">Prochaine mise à jour prévue</string>\n    <string name=\"pref_update_only_in_release_period\">Prédiction de la prochaine date sortie</string>\n    <string name=\"action_set_interval\">Définir l\\'intervalle</string>\n    <string name=\"action_ok\">Valider</string>\n    <string name=\"action_filter_interval_custom\">Fréquence de mise à jour personnalisée</string>\n    <string name=\"information_cloudflare_help\">Appuyez ici pour de l\\'aide sur Cloudflare</string>\n    <string name=\"unlock_app_title\">Débloquer %s</string>\n    <string name=\"syncing_library\">Synchronisation de la bibliothèque</string>\n    <string name=\"intervals_header\">Intervalles</string>\n    <string name=\"library_sync_complete\">Synchronisation de la bibliothèque complété</string>\n    <string name=\"exception_offline\">Aucune connexion internet</string>\n    <string name=\"download_cache_invalidated\">Indice de téléchargement invalidé</string>\n    <string name=\"skipped_reason_not_in_release_period\">Ignoré car aucune sortie n\\'était attendue aujourd\\'hui</string>\n    <string name=\"has_results\">A des résultats</string>\n    <string name=\"manga_display_interval_title\">Estimer chaque</string>\n    <string name=\"exception_http\">HTTP %d, consulter le site Web dans WebView</string>\n    <string name=\"manga_display_modified_interval_title\">Configurer pour mettre à jour tous les</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Déplacer la série vers le bas</string>\n    <string name=\"track_delete_remote_text\">Supprimez également de %s</string>\n    <string name=\"exception_unknown_host\">Impossible de joindre %s</string>\n    <string name=\"app_settings\">Paramètres de l\\'application</string>\n    <string name=\"delete_downloaded\">Supprimer le(s) téléchargement(s)</string>\n    <string name=\"action_apply\">Appliquer</string>\n    <string name=\"action_revert_to_default\">Réintialiser les valeurs par défaut</string>\n    <string name=\"action_menu_overflow_description\">Plus d\\'options</string>\n    <string name=\"selected\">Sélectionné</string>\n    <string name=\"not_selected\">Pas sélectionné(e)</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"pref_flash_page\">Flash lors du changement de page</string>\n    <string name=\"action_bar_up_description\">Naviguer vers le haut</string>\n    <string name=\"action_sort_tracker_score\">Score du service de suivi</string>\n    <string name=\"label_data_storage\">Données et stockage</string>\n    <string name=\"track_activity_name\">Se connecter au service de suivi</string>\n    <string name=\"pref_relative_format_summary\">« %1$s » au lieu de « %2$s »</string>\n    <string name=\"pref_storage_location\">Emplacement de stockage</string>\n    <string name=\"pref_flash_page_summ\">Réduire le ghosting sur les écrans e-ink</string>\n    <string name=\"pref_storage_location_info\">Utilisé pour les backups automatiques, téléchargements des chapitres et la source locale.</string>\n    <string name=\"onboarding_storage_selection_required\">Un dossier doit être sélectionné</string>\n    <string name=\"available_disk_space_info\">Disponible : %1$s / Total : %2$s</string>\n    <string name=\"onboarding_heading\">Bienvenue !</string>\n    <string name=\"onboarding_action_skip\">Passer</string>\n    <string name=\"pref_storage_usage\">Utilisation du stockage</string>\n    <string name=\"onboarding_action_next\">Suivant</string>\n    <string name=\"no_location_set\">Aucun emplacement de stockage défini</string>\n    <string name=\"ext_permission_install_apps_warning\">Des permissions sont nécessaires pour installer des extensions. Appuyer ici pour les accorder.</string>\n    <string name=\"onboarding_permission_action_grant\">Accorder</string>\n    <string name=\"pref_relative_format\">Durées relatives</string>\n    <string name=\"onboarding_permission_notifications\">Permission de notifications</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Utilisation de la batterie en arrière-plan</string>\n    <string name=\"onboarding_permission_install_apps_description\">Pour installer des extensions de source.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Évite l\\'interruption des mises à jour de bibliothèque, des téléchargements de chapitres, et des restaurations de sauvegardes.</string>\n    <string name=\"onboarding_permission_install_apps\">Permission d\\'installer des applications</string>\n    <string name=\"onboarding_storage_help_info\">Mise à jour depuis une ancienne version et pas sûr de quoi choisir ? Consultez le guide de stockage pour plus d\\'informations.</string>\n    <string name=\"onboarding_storage_help_action\">Guide de stockage</string>\n    <string name=\"onboarding_permission_notifications_description\">Soyez notifié des mises à jour de la bibliothèque et autre.</string>\n    <string name=\"pref_library_update_smart_update\">Mise à jour intelligente</string>\n    <string name=\"pref_onboarding_guide\">Guide de premier lancement</string>\n    <string name=\"onboarding_description\">Commençons par paramétrer certaines choses. Vous pouvez toujours changer ces paramètres plus tard.</string>\n    <string name=\"onboarding_storage_info\">Sélectionnez un dossier où %1$s stockera les chapitres téléchargés, les sauvegardes et plus encore.\n\\n\n\\nUn dossier dédié est recommandé.\n\\n\n\\nDossier sélectionné : %2$s</string>\n    <string name=\"onboarding_storage_action_select\">Sélectionnez un dossier</string>\n    <string name=\"onboarding_guides_returning_user\">De retour sur %s ?</string>\n    <string name=\"track_delete_title\">Annuler le suivi avec %s ?</string>\n    <string name=\"private_settings\">Inclure des informations sensible (ex : jetons de connexion)</string>\n    <string name=\"manga_interval_expected_update\">De nouveaux chapitres sont prédits dans environ %1$s, mise à jour prévu tous les %2$s.</string>\n    <string name=\"exclude_scanlators\">Exclure la team de scantrad</string>\n    <string name=\"no_scanlators_found\">Aucune team de scantrad trouvé</string>\n    <string name=\"relative_time_span_never\">Jamais</string>\n    <string name=\"onboarding_guides_new_user\">Nouveau sur %s ? Nous vous recommandons de jeter un œil au guide de démarrage.</string>\n    <string name=\"delete_repo_confirmation\">Voulez-vous vraiment supprimer le répertoire « %s » ?</string>\n    <string name=\"manga_interval_custom_amount\">Fréquence de mise à jour personnalisé :</string>\n    <string name=\"invalid_backup_file_error\">Erreur complète :</string>\n    <string name=\"action_delete_repo\">Supprimer le répertoire</string>\n    <string name=\"label_extension_repos\">Répertoire d\\'extension</string>\n    <string name=\"ext_revoke_trust\">Révoquer les extensions provenant d\\'un répertoire additionnel</string>\n    <string name=\"label_add_repo_input\">URL du répertoire</string>\n    <string name=\"action_add_repo_message\">Ajouter un répertoire additionnel à Mihon. L\\'URL devrait se terminer par « index.min.json ».</string>\n    <string name=\"error_repo_exists\">Ce répertoire existe déjà !</string>\n    <string name=\"invalid_repo_name\">L\\'URL du répertoire est invalide</string>\n    <string name=\"manga_interval_expected_update_soon\">Bientôt</string>\n    <string name=\"information_empty_repos\">Vous n\\'avez aucun répertoire.</string>\n    <string name=\"action_add_repo\">Ajouter un répertoire</string>\n    <string name=\"action_open_repo\">Répertoire open source</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"action_create\">Créer</string>\n    <string name=\"track_delete_text\">Cela arrêtera le suivi pour cette série.</string>\n    <string name=\"file_null_uri_error\">Aucun fichier sélectionné</string>\n    <string name=\"notification_updating_progress\">Mise a jour de la bibliothèque... (%s)</string>\n    <string name=\"onboarding_action_finish\">Commencer</string>\n    <string name=\"create_backup_file_error\">Impossible de créer un fichier de sauvegarde</string>\n    <string name=\"last_auto_backup_info\">Dernière sauvegarde automatique : %s</string>\n    <string name=\"source_settings\">Paramètres sources</string>\n    <string name=\"action_add_anyway\">Ajouter tout de même</string>\n    <string name=\"action_migrate_duplicate\">Migrer l’entrée existante</string>\n    <string name=\"label_upcoming\">À venir</string>\n    <string name=\"action_replace_repo\">Remplacer</string>\n    <string name=\"pref_display_profile\">Profil d\\'affichage personnalisé</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Désactiver le zoom arrière</string>\n    <string name=\"action_view_upcoming\">Afficher les mises à jour à venir</string>\n    <string name=\"upcoming_guide\">Guide à venir</string>\n    <string name=\"upcoming_calendar_next\">Le mois prochain</string>\n    <string name=\"upcoming_calendar_prev\">Le mois précédent</string>\n    <string name=\"action_copy_link\">Copier le lien</string>\n    <string name=\"action_replace_repo_title\">L\\'empreinte digitale de la clé de signature existe déjà</string>\n    <string name=\"add_repo_confirmation\">Souhaitez-vous ajouter le répertoire \\\"%s\\\"?</string>\n    <string name=\"pref_flash_with\">Flash avec</string>\n    <string name=\"action_replace_repo_message\">Le répertoire %1$s a la même empreinte digitale de la clé de signature que %2$s.\n\\nSi cela est attendu, %2$s sera remplacé, sinon contactez votre mainteneur du répertoire.</string>\n    <string name=\"pref_flash_duration\">Durée du flash</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Flash toutes les</string>\n    <string name=\"pref_flash_style_black\">Noir</string>\n    <string name=\"pref_flash_style_white\">Blanc</string>\n    <string name=\"pref_flash_style_white_black\">Blanc et Noir</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Ignorer le téléchargement des chapitres dupliqués et déjà lus</string>\n    <string name=\"invalid_backup_file_json\">Sauvegarde JSON non supportée</string>\n    <string name=\"action_sort_random\">Aléatoire</string>\n    <string name=\"onboarding_permission_crashlytics\">Envoyer les logs de crash</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Envoyer les logs de crash anonymes aux développeurs.</string>\n    <string name=\"onboarding_permission_analytics\">Autoriser l\\'analyse</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Mise à jour de la progression quand marqué comme lu</string>\n    <string name=\"pref_firebase\">Analyses et logs de crash</string>\n    <string name=\"firebase_summary\">L\\'envoi de logs de crash et d\\'analyses nous permettra d\\'identifier et de corriger les problèmes, d\\'améliorer les performances et de rendre les futures mises à jour plus adaptées à vos besoins</string>\n    <string name=\"pref_security\">Sécurité</string>\n    <string name=\"extensionRepo_settings\">Dépôts d\\'extension</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Par défaut (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Affecte les performances. Ne l\\'activer que si la réduction du seuil de bitmap ne résout pas les problèmes d\\'images vierges</string>\n    <string name=\"non_library_settings\">Toutes les entrées lues</string>\n    <string name=\"confirm_tracker_update\">Mettre à jour les trackers au chapitre %d ?</string>\n    <string name=\"ext_remove\">Retirer</string>\n    <string name=\"ext_confirm_remove\">Retirer l\\'Extension ?</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Si le lecteur charge une image vierge, réduire progressivement le seuil.\\nSélectionné : %s</string>\n    <string name=\"onboarding_permission_analytics_description\">Envoyer des données d\\'utilisation anonymes pour améliorer les fonctionnalités de l\\'application.</string>\n    <string name=\"trackers_updated_summary\">Trackers mis à jour au chapitre %d</string>\n    <string name=\"manga_interval_expected_update_null\">Ce manga est soit terminé, soit il n\\'y a pas de date de sortie prévue.</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Échec de l\\'acquisition persistante de l\\'accès au dossier. L\\'application peut se comporter de manière inattendue.</string>\n    <string name=\"invalid_backup_file_unknown\">Le fichier de sauvegarde est corrompu</string>\n    <string name=\"remove_private_extension_message\">Voulez-vous vraiment retirer l\\'extension \\\"%s\\\" ?</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Seuil de bitmap matériel personnalisé</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/gl/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoría</item>\n        <item quantity=\"other\">%d categorías</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Despois de 1 minuto</item>\n        <item quantity=\"other\">Despois de %1$s minutos</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Seguinte capítulo sen ler</item>\n        <item quantity=\"other\">Seguintes %d capítulos sen ler</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">Queda %1$s</item>\n        <item quantity=\"other\">Quedan %1$s</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Onte</item>\n        <item quantity=\"other\">Fai %1$d días</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Feito en %1$s con %2$s erro</item>\n        <item quantity=\"other\">Feito en %1$s con %2$s erros</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d servizo de seguemento</item>\n        <item quantity=\"other\">%d servizos de seguemento</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Hai unha actualización dunha extensión</item>\n        <item quantity=\"other\">Hai actualizacións de %d extensións</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capítulo</item>\n        <item quantity=\"other\">%1$s capítulos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capítulos %1$s e 1 máis</item>\n        <item quantity=\"other\">Capítulos %1$s e %2$d máis</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Saltouse %d capítulo: falta na fonte ou ignorouse</item>\n        <item quantity=\"other\">Saltáronse %d capítulos: faltan na fonte ou ignoráronse</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Por %d elemento</item>\n        <item quantity=\"other\">Por %d elementos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d capítulo novo</item>\n        <item quantity=\"other\">%1$d capítulos novos</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">O seguinte capítulo</item>\n        <item quantity=\"other\">Os seguintes %d capítulos</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Falta %1$s capítulo</item>\n        <item quantity=\"other\">Faltan %1$s capítulos</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repositorio</item>\n        <item quantity=\"other\">%d repositorios</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Mañá</item>\n        <item quantity=\"other\">Dentro de %1$d días</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">Un día</item>\n        <item quantity=\"other\">%d días</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 páxina</item>\n        <item quantity=\"other\">%1$s páxinas</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/gl/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_settings\">Axustes</string>\n    <string name=\"label_more\">Máis</string>\n    <string name=\"name\">Nome</string>\n    <string name=\"label_sources\">Fontes</string>\n    <string name=\"label_recent_manga\">Historial</string>\n    <string name=\"label_recent_updates\">Actualizacións</string>\n    <string name=\"label_library\">Biblioteca</string>\n    <string name=\"label_download_queue\">Cola de descargas</string>\n    <string name=\"last_read_chapter\">Último capítulo lido</string>\n    <string name=\"disabled\">Deshabilitado</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir eliminar os capítulos marcados como favoritos</string>\n    <string name=\"pref_remove_after_read\">Eliminar automaticamente despois de ler</string>\n    <string name=\"pref_remove_after_marked_as_read\">Despois de marcar manualmente como lido</string>\n    <string name=\"pref_category_delete_chapters\">Eliminar capítulos</string>\n    <string name=\"pref_webtoon_side_padding\">Recheo lateral</string>\n    <string name=\"pref_category_reading\">Lendo</string>\n    <string name=\"pref_category_reading_mode\">Modo de lectura</string>\n    <string name=\"pref_always_show_chapter_transition\">Mostrar sempre transición de capítulo</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"rotation_force_landscape\">Bloquear en horizontal</string>\n    <string name=\"rotation_force_portrait\">Bloquear en vertical</string>\n    <string name=\"rotation_free\">Libre</string>\n    <string name=\"pref_rotation_type\">Rotación por defecto</string>\n    <string name=\"double_tap_anim_speed_fast\">Rápido</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_0\">Sen animación</string>\n    <string name=\"zoom_start_center\">Centro</string>\n    <string name=\"zoom_start_right\">Dereita</string>\n    <string name=\"zoom_start_left\">Esquerda</string>\n    <string name=\"zoom_start_automatic\">Automático</string>\n    <string name=\"pref_zoom_start\">Posición inicial do zoom</string>\n    <string name=\"scale_type_smart_fit\">Axuste intelixente</string>\n    <string name=\"scale_type_original_size\">Tamaño orixinal</string>\n    <string name=\"scale_type_fit_height\">Axustar ao alto</string>\n    <string name=\"scale_type_fit_width\">Axustar ao largo</string>\n    <string name=\"scale_type_stretch\">Estirar</string>\n    <string name=\"scale_type_fit_screen\">Axustar á pantalla</string>\n    <string name=\"pref_image_scale_type\">Tipo de escala</string>\n    <string name=\"pager_viewer\">Paxinado</string>\n    <string name=\"vertical_plus_viewer\">Tira longa con espacios</string>\n    <string name=\"webtoon_viewer\">Tira longa</string>\n    <string name=\"vertical_viewer\">Por páxinas (vertical)</string>\n    <string name=\"right_to_left_viewer\">Páxinas (De dereita a esquerda)</string>\n    <string name=\"left_to_right_viewer\">Por páxinas (de esquerda a dereita)</string>\n    <string name=\"pref_viewer_type\">Modo de lectura por defecto</string>\n    <string name=\"black_background\">Negro</string>\n    <string name=\"gray_background\">Gris</string>\n    <string name=\"white_background\">Branco</string>\n    <string name=\"pref_reader_theme\">Cor de fondo</string>\n    <string name=\"pref_read_with_long_tap\">Amosar cun toque longo</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Invertir teclas de volume</string>\n    <string name=\"pref_read_with_volume_keys\">Teclas de volume</string>\n    <string name=\"pref_reader_navigation\">Navegación</string>\n    <string name=\"pref_skip_filtered_chapters\">Saltar capítulos filtrados</string>\n    <string name=\"pref_skip_read_chapters\">Saltar capítulos marcados como lidos</string>\n    <string name=\"pref_keep_screen_on\">Manter a pantalla acesa</string>\n    <string name=\"filter_mode_darken\">Queimar / Escurecer</string>\n    <string name=\"filter_mode_lighten\">Subexpoñer / Aclarar</string>\n    <string name=\"filter_mode_screen\">Pantalla</string>\n    <string name=\"filter_mode_multiply\">Multiplicar</string>\n    <string name=\"filter_mode_overlay\">Superposición</string>\n    <string name=\"pref_color_filter_mode\">Modo de mestura do filtro de cor</string>\n    <string name=\"pref_custom_color_filter\">Filtro de cor personalizado</string>\n    <string name=\"pref_custom_brightness\">Brillo presonalizado</string>\n    <string name=\"pref_crop_borders\">Recortar bordes</string>\n    <string name=\"pref_show_reading_mode_summary\">Amosar brevemente o modo actual cando se abre o lector</string>\n    <string name=\"pref_show_reading_mode\">Amosar modo de lectura</string>\n    <string name=\"pref_show_page_number\">Amosar número de páxina</string>\n    <string name=\"pref_double_tap_anim_speed\">Velocidade da animación de doble toque</string>\n    <string name=\"pref_page_transitions\">Animar transición de páxinas</string>\n    <string name=\"pref_cutout_short\">Mostrar contido na área recortada</string>\n    <string name=\"pref_fullscreen\">Pantalla completa</string>\n    <string name=\"ext_nsfw_warning\">As fontes desta extensión poden ter contido NSFW (+18)</string>\n    <string name=\"ext_nsfw_short\">+18</string>\n    <string name=\"obsolete_extension_message\">Esta extensión xa non está dispoñible. Pode que non funcione ben e cause problemas na aplicación. Recoméndase desinstalala.</string>\n    <string name=\"untrusted_extension_message\">Unha extensión maliciosa podería ler calquera credencial de inicio de sesión gardada en Mihon ou executar calquera tipo de código.\n\\n\n\\nSe confías nesta extensión, aceptas estes riscos.</string>\n    <string name=\"untrusted_extension\">Extensión non confiable</string>\n    <string name=\"ext_untrusted\">Non confiable</string>\n    <string name=\"ext_uninstall\">Desinstalar</string>\n    <string name=\"ext_trust\">De confianza</string>\n    <string name=\"ext_installed\">Instaladas</string>\n    <string name=\"ext_installing\">Instalando</string>\n    <string name=\"ext_downloading\">Descargando</string>\n    <string name=\"ext_pending\">Pendentes</string>\n    <string name=\"ext_install\">Instalar</string>\n    <string name=\"ext_obsolete\">Obsoletas</string>\n    <string name=\"ext_update\">Actualizar</string>\n    <string name=\"ext_updates_pending\">Actualizacións pendentes</string>\n    <string name=\"all\">Todas</string>\n    <string name=\"default_category_summary\">Preguntar sempre</string>\n    <string name=\"default_category\">Categoría por defecto</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Procurar novas portadas e detalles cando se actualice a biblioteca</string>\n    <string name=\"pref_library_update_refresh_metadata\">Refrescar os metadatos automaticamente</string>\n    <string name=\"pref_update_only_non_completed\">Co estado de \\\"Rematados\\\"</string>\n    <string name=\"charging\">Durante a carga</string>\n    <string name=\"pref_library_update_restriction\">Restricións do dispositivo para as actualizacións automáticas</string>\n    <string name=\"update_weekly\">Semanalmente</string>\n    <string name=\"update_48hour\">Cada 2 días</string>\n    <string name=\"update_24hour\">Diariamente</string>\n    <string name=\"update_12hour\">Cada 12 horas</string>\n    <string name=\"update_6hour\">Cada 6 horas</string>\n    <string name=\"update_never\">Desactivadas</string>\n    <string name=\"pref_library_update_interval\">Actualizacións automáticas</string>\n    <string name=\"pref_category_library_update\">Actualización global</string>\n    <string name=\"landscape\">Horizontal</string>\n    <string name=\"portrait\">Vertical</string>\n    <string name=\"pref_library_columns\">Tamaño da reixa</string>\n    <string name=\"pref_category_display\">Amosar</string>\n    <string name=\"parental_controls_info\">Isto non evita que as extensións non oficiais ou mal clasificadas mostren contido NSFW (+18) dentro da aplicación.</string>\n    <string name=\"hide_notification_content\">Esconder o contido das notificacións</string>\n    <string name=\"secure_screen_summary\">O modo discreto esconde o contido da aplicación ao cambiar entre aplicacións e bloquea as capturas de pantalla</string>\n    <string name=\"secure_screen\">Modo discreto</string>\n    <string name=\"lock_never\">Nunca</string>\n    <string name=\"lock_always\">Sempre</string>\n    <string name=\"lock_when_idle\">Bloquear por inactividade</string>\n    <string name=\"lock_with_biometrics\">Requerir desbloqueo</string>\n    <string name=\"file_picker_error\">Non se atopou unha aplicación para seleccionar ficheiros</string>\n    <string name=\"myanimelist_relogin\">Inicia sesión en MAL de novo</string>\n    <string name=\"requires_app_restart\">Require reiniciar a aplicación para que surxa efecto</string>\n    <string name=\"pref_show_nsfw_source\">Amosar na lista de fontes e extensións</string>\n    <string name=\"pref_category_nsfw_content\">Fontes NSFW (+18)</string>\n    <string name=\"pref_category_security\">Seguridade e privacidade</string>\n    <string name=\"pref_manage_notifications\">Xestionar notificacións</string>\n    <string name=\"pref_date_format\">Formato da data</string>\n    <string name=\"theme_dark\">Activado</string>\n    <string name=\"theme_light\">Desactivado</string>\n    <string name=\"theme_system\">Utilizar o do sistema</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"pref_category_about\">Acerca de</string>\n    <string name=\"pref_category_advanced\">Avanzado</string>\n    <string name=\"pref_category_tracking\">Seguimento</string>\n    <string name=\"pref_category_downloads\">Descargas</string>\n    <string name=\"pref_category_reader\">Lector</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"pref_category_general\">Xeral</string>\n    <string name=\"app_not_available\">Aplicación non dispoñible</string>\n    <string name=\"loading\">Cargando…</string>\n    <string name=\"action_webview_refresh\">Recargar</string>\n    <string name=\"action_webview_forward\">Adiante</string>\n    <string name=\"action_webview_back\">Atrás</string>\n    <string name=\"action_restore\">Restaurar</string>\n    <string name=\"action_open_log\">Abrir rexistro</string>\n    <string name=\"action_undo\">Desfacer</string>\n    <string name=\"action_reset\">Resetear</string>\n    <string name=\"action_save\">Gardar</string>\n    <string name=\"action_share\">Compartir</string>\n    <string name=\"action_install\">Instalar</string>\n    <string name=\"action_move_to_bottom\">Mover ao final</string>\n    <string name=\"action_move_to_top\">Mover ao principio</string>\n    <string name=\"action_oldest\">Máis antigos</string>\n    <string name=\"action_newest\">Os máis novos</string>\n    <string name=\"action_sort\">Ordenar</string>\n    <string name=\"action_cancel_all\">Cancelar todos</string>\n    <string name=\"action_cancel\">Cancelar</string>\n    <string name=\"action_unpin\">Quitar de fixados</string>\n    <string name=\"action_pin\">Fixar</string>\n    <string name=\"action_disable\">Deshabilitar</string>\n    <string name=\"action_display_show_tabs\">Amosar laretas de categorías</string>\n    <string name=\"action_display_download_badge\">Capítulos descargados</string>\n    <string name=\"action_display_comfortable_grid\">Cuadrícula ampla</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_display_grid\">Cuadrícula compacta</string>\n    <string name=\"action_display\">Amosar</string>\n    <string name=\"action_display_mode\">Modo de visualización</string>\n    <string name=\"action_migrate\">Migrar</string>\n    <string name=\"action_open_in_web_view\">Abrir en WebView</string>\n    <string name=\"action_open_in_browser\">Abrir no navegador</string>\n    <string name=\"action_resume\">Continuar</string>\n    <string name=\"action_start\">Comezar</string>\n    <string name=\"action_remove\">Eliminar</string>\n    <string name=\"action_retry\">Reintentar</string>\n    <string name=\"action_next_chapter\">Capítulo seguinte</string>\n    <string name=\"action_previous_chapter\">Capítulo anterior</string>\n    <string name=\"action_pause\">Pausar</string>\n    <string name=\"action_view_chapters\">Ver capítulos</string>\n    <string name=\"action_edit_cover\">Editar portada</string>\n    <string name=\"action_move_category\">Establecer categorías</string>\n    <string name=\"action_rename_category\">Renomear categoría</string>\n    <string name=\"action_edit_categories\">Editar categorías</string>\n    <string name=\"action_add_category\">Engadir categoría</string>\n    <string name=\"action_add\">Engadir</string>\n    <string name=\"action_edit\">Editar</string>\n    <string name=\"action_disable_all\">Deshabilitar todos</string>\n    <string name=\"action_enable_all\">Habilitar todos</string>\n    <string name=\"action_update_library\">Actualizar biblioteca</string>\n    <string name=\"action_delete\">Eliminar</string>\n    <string name=\"action_remove_bookmark\">Quitar favorito</string>\n    <string name=\"action_bookmark\">Engadir favorito</string>\n    <string name=\"action_download\">Descargar</string>\n    <string name=\"action_mark_previous_as_read\">Marcar anteriores como lidos</string>\n    <string name=\"action_mark_as_unread\">Marcar como non lido</string>\n    <string name=\"action_mark_as_read\">Marcar como lido</string>\n    <string name=\"action_select_inverse\">Selección inversa</string>\n    <string name=\"action_select_all\">Seleccionar todos</string>\n    <string name=\"action_global_search\">Procura global</string>\n    <string name=\"action_search_settings\">Axustes de busca</string>\n    <string name=\"action_search\">Procurar</string>\n    <string name=\"action_sort_date_added\">Data de adición</string>\n    <string name=\"action_sort_latest_chapter\">Capítulo máis recente</string>\n    <string name=\"action_sort_last_read\">Último lido</string>\n    <string name=\"action_sort_total\">Capítulos totais</string>\n    <string name=\"action_sort_alpha\">Alfabeticamente</string>\n    <string name=\"action_filter_empty\">Quitar filtro</string>\n    <string name=\"action_filter_unread\">Non lidos</string>\n    <string name=\"action_filter_bookmarked\">Favoritos</string>\n    <string name=\"action_filter\">Filtro</string>\n    <string name=\"action_menu\">Menú</string>\n    <string name=\"action_settings\">Axustes</string>\n    <string name=\"history\">Historial</string>\n    <string name=\"track\">Seguimento</string>\n    <string name=\"chapters\">Capítulos</string>\n    <string name=\"categories\">Categorías</string>\n    <string name=\"information_empty_category\">Non tes categorías. Toca o botón cun máis para crear unha e organizar a túa biblioteca.</string>\n    <string name=\"information_empty_library\">A túa biblioteca está vacía</string>\n    <string name=\"browse\">Explorar</string>\n    <string name=\"information_no_recent_manga\">Non se leu nada recentemente</string>\n    <string name=\"information_no_recent\">Sen actualizacións recentes</string>\n    <string name=\"information_no_downloads\">Sen descargas</string>\n    <string name=\"label_help\">Axuda</string>\n    <string name=\"label_extension_info\">Información da extensión</string>\n    <string name=\"label_extensions\">Extensións</string>\n    <string name=\"label_migration\">Migrar</string>\n    <string name=\"label_backup\">Copia de seguridade e restauración</string>\n    <string name=\"manga\">Elementos da biblioteca</string>\n    <string name=\"chapter_not_found\">Capítulo non atopado</string>\n    <string name=\"completed\">Completado</string>\n    <string name=\"title\">Título</string>\n    <string name=\"licensed\">Licenciado</string>\n    <string name=\"unread\">Non lidos</string>\n    <string name=\"ongoing\">En curso</string>\n    <string name=\"unknown\">Descoñecido</string>\n    <string name=\"no_chapters_error\">Non se atoparon capítulos</string>\n    <string name=\"action_move_to_top_all_for_series\">Mover a serie ao primeiro posto</string>\n    <string name=\"action_start_downloading_now\">Comezar a descarga agora</string>\n    <string name=\"pref_app_theme\">Tema da aplicación</string>\n    <string name=\"pref_tracking_summary\">Sincronización unidireccional do progreso de lectura; sincronización mellorada</string>\n    <string name=\"pref_browse_summary\">Fontes, extensións, procura global</string>\n    <string name=\"pref_advanced_summary\">Envorcar os rexistros de erros, optimizacións de batería</string>\n    <string name=\"theme_tidalwave\">Maremoto</string>\n    <string name=\"relative_time_today\">Hoxe</string>\n    <string name=\"pref_update_only_completely_read\">Con capítulos sin ler</string>\n    <string name=\"pref_library_update_categories_details\">Os elementos das categorías excluídas non se actualizarán aínda se están tamén nas categorías incluídas.</string>\n    <string name=\"ext_info_version\">Versión</string>\n    <string name=\"ext_install_service_notif\">Instalando a extensión…</string>\n    <string name=\"ext_installer_legacy\">Clásico</string>\n    <string name=\"pref_show_navigation_mode\">Mostrar a superposición das zonas de toque</string>\n    <string name=\"pref_grayscale\">Escala de grises</string>\n    <string name=\"pref_inverted_colors\">Invertido</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_both\">Ambos</string>\n    <string name=\"pref_create_folder_per_manga\">Gardar as páxinas en carpetas separadas</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Crea carpetas segundo o título dos elementos</string>\n    <string name=\"rotation_portrait\">Vertical</string>\n    <string name=\"rotation_landscape\">Horizontal</string>\n    <string name=\"split_tall_images_summary\">Mellora o rendemento do lector</string>\n    <string name=\"website\">Páxina web</string>\n    <string name=\"confirm_set_chapter_settings\">Estás seguro de querer gardar estes axustes como por defecto?</string>\n    <string name=\"picture_saved\">Imaxe gardada</string>\n    <string name=\"pref_restore_backup\">Restaurar a copia de seguridade</string>\n    <string name=\"pref_backup_interval\">Frecuencia das copias de seguridade</string>\n    <string name=\"backup_restore_missing_sources\">Fontes faltantes:</string>\n    <string name=\"pref_invalidate_download_cache\">Reconstruír o índice de descargas</string>\n    <string name=\"pref_dump_crash_logs_summary\">Garda os rexistros de erros nun ficheiro para compartilo cos desenvolvedores</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Fai que funcionen mellor as actualizacións e as copias de seguridade que se fagan en segundo plano</string>\n    <string name=\"check_for_updates\">Procurar actualizacións</string>\n    <string name=\"licenses\">Licenzas de código aberto</string>\n    <string name=\"privacy_policy\">Política de privacidade</string>\n    <string name=\"updated_version\">Actualizado a v%1$s</string>\n    <string name=\"pref_acra_summary\">Axuda a corrixir os erros. Non se enviará ningunha información sensíbel</string>\n    <string name=\"notification_incognito_text\">Desactivar o modo incógnito</string>\n    <string name=\"login\">Iniciar sesión</string>\n    <string name=\"downloaded_chapters\">Capítulos descargados</string>\n    <string name=\"manga_from_library\">Da biblioteca</string>\n    <string name=\"delete_category\">Eliminar categoría</string>\n    <string name=\"enhanced_services_not_installed\">Dispoñible, mais a fonte non se instalou: %s</string>\n    <string name=\"pinned_sources\">Fixados</string>\n    <string name=\"pref_library_update_show_tab_badge\">Amosar o número de capítulos por ler na icona de actualizacións</string>\n    <string name=\"exclude\">Excluír: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Saltar os capítulos duplicados</string>\n    <string name=\"auto_download_while_reading\">Descargar automaticamente durante a lectura</string>\n    <string name=\"download_ahead_info\">Só funciona con elementos da biblioteca e se o capítulo actual e o seguinte xa están descargados.</string>\n    <string name=\"restore_completed\">Restauración completada</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d seg</string>\n    <string name=\"backup_choice\">De que queres facer unha copia de seguridade?</string>\n    <string name=\"missing_storage_permission\">Non se concederon os permisos de almacenamento</string>\n    <string name=\"empty_backup_error\">Ningún elemento na biblioteca co que facer a copia de seguridade</string>\n    <string name=\"backup_info\">Deberías gardar duplicados das copias de seguridade fora do teu dispositivo.</string>\n    <string name=\"pref_clear_cookies\">Limpar cookies</string>\n    <string name=\"pref_user_agent_string\">Nome do axente de usuario (\\\"user agent\\\") por defecto</string>\n    <string name=\"error_user_agent_string_blank\">O axente de usuario non pode estar vacío</string>\n    <string name=\"used_cache\">Usado: %1$s</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Borrar a caché dos capítulos ao pechar a aplicación</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Non se puideron abrir os axustes do dispositivo</string>\n    <string name=\"pref_enable_acra\">Enviar informes de erros</string>\n    <string name=\"tabs_header\">Lapelas</string>\n    <string name=\"no_more_results\">Non hai máis resultados</string>\n    <string name=\"last_used_source\">Usado recentemente</string>\n    <string name=\"latest\">Máis recente</string>\n    <string name=\"add_to_library\">Engadir á biblioteca</string>\n    <string name=\"custom_cover\">Portada personalizada</string>\n    <string name=\"confirm_delete_chapters\">Estás seguro de querer eliminar os capítulos seleccionados?</string>\n    <string name=\"chapter_settings\">Axustes de capítulo</string>\n    <string name=\"paused\">Pausado</string>\n    <string name=\"manga_cover\">Portada</string>\n    <string name=\"cover_saved\">Portada gardada</string>\n    <string name=\"delete_category_confirmation\">Queres eliminar a categoría \\\"%s\\\"?</string>\n    <string name=\"action_desc\">Descendente</string>\n    <string name=\"action_asc\">Ascendente</string>\n    <string name=\"pref_dual_page_invert_summary\">Se a separación das páxinas anchas non coincide coa dirección de lectura</string>\n    <string name=\"pref_hide_threshold\">Sensibilidade para ocultar o menú ao desprazarse</string>\n    <string name=\"fifth_to_last\">Quinto capítulo lido antes do último</string>\n    <string name=\"pref_download_new\">Descargar capítulos novos</string>\n    <string name=\"username\">Nome de usuario</string>\n    <string name=\"error_saving_cover\">Erro ao gardar a portada</string>\n    <string name=\"invalid_location\">Localización non válida: %s</string>\n    <string name=\"third_to_last\">Antepenúltimo capítulo lido</string>\n    <string name=\"pref_download_new_categories_details\">Os elementos das categorías excluídas non se descargarán, aínda se están en categorías incluídas.</string>\n    <string name=\"pref_low\">Baixa</string>\n    <string name=\"creating_backup\">Creando a copia de seguridade</string>\n    <string name=\"pref_library_summary\">Categorías, actualización global, accións ao arrastrar</string>\n    <string name=\"pref_reader_summary\">Modo de lectura, aparencia e navegación</string>\n    <string name=\"pref_downloads_summary\">Baixadas automáticas e por adiantado</string>\n    <string name=\"pref_backup_summary\">Copias de seguridade manuais e automáticas</string>\n    <string name=\"pref_security_summary\">Bloqueo da aplicación e modo discreto</string>\n    <string name=\"pref_update_only_started\">Que non foran comezadas</string>\n    <string name=\"ext_update_all\">Actualizar todo</string>\n    <string name=\"tracking_info\">Sincronización unidireccional para actualizar o progreso dos capítulos en servizos de seguimento externos. Configúraa na biblioteca, dende o botón de seguimento de cada elemento.</string>\n    <string name=\"action_track\">Seguir</string>\n    <string name=\"clear_database_source_item_count\">Hai %1$d elementos na base de datos que non están na biblioteca</string>\n    <string name=\"version\">Versión</string>\n    <string name=\"pref_show_navigation_mode_summary\">Mostrar brevemente ao abrir o lector</string>\n    <string name=\"label_default\">Por defecto</string>\n    <string name=\"label_stats\">Estatísticas</string>\n    <string name=\"label_started\">Comezados</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_downloaded\">Descargados</string>\n    <string name=\"pref_app_language\">Idioma da aplicación</string>\n    <string name=\"internal_error\">ErroInterno: Revisa o rexistro de erros para máis información</string>\n    <string name=\"ext_app_info\">Información da aplicación</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku non se está executando</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instala e inicia Shizuku para utilizalo como instalador de extensións.</string>\n    <string name=\"automatic_background\">Automático</string>\n    <string name=\"l_nav\">En forma de L</string>\n    <string name=\"pref_navigate_pan\">Desprazarse polas imaxes anchas</string>\n    <string name=\"pref_auto_update_manga_sync\">Actualizar o progreso ao rematar a lectura</string>\n    <string name=\"services\">Servizos de seguimento</string>\n    <string name=\"restoring_backup_canceled\">Cancelouse a restauración</string>\n    <string name=\"label_network\">Rede</string>\n    <string name=\"password\">Contrasinal</string>\n    <string name=\"fdroid_warning\">As versións de F-Droid non teñen soporte oficial.\n\\nPreme para saber máis.</string>\n    <string name=\"login_success\">Conectado</string>\n    <string name=\"ext_info_age_rating\">Clasificación por idades</string>\n    <string name=\"enhanced_services\">Servizos de seguimento mellorados</string>\n    <string name=\"enhanced_tracking_info\">Estes servizos proporcionan funcións melloradas para fontes concretas. Faise un seguimento automático dos elementos ao engadilos á biblioteca.</string>\n    <string name=\"backup_in_progress\">Xa se está facendo unha copia de seguridade</string>\n    <string name=\"pref_dump_crash_logs\">Compartir os rexistros de erros</string>\n    <string name=\"error_sharing_cover\">Error ao compartir a portada</string>\n    <string name=\"cache_delete_error\">Produciuse un erro ao borrar</string>\n    <string name=\"multi_lang\">Varios idiomas</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"nav_zone_left\">Esquerda</string>\n    <string name=\"pref_landscape_zoom\">Ampliar a imaxe en horizontal</string>\n    <string name=\"backup_restore_content_full\">Pode ser que debas instalar as extensións que falten e iniciar sesión nos servizos de seguimento para usalos.</string>\n    <string name=\"label_data\">Datos</string>\n    <string name=\"pref_reset_viewer_flags_success\">Restableceuse a configuración do lector</string>\n    <string name=\"logout_title\">Pechar a sesión en %1$s?</string>\n    <string name=\"logout_success\">Pechouse a sesión</string>\n    <string name=\"publishing_finished\">Publicación rematada</string>\n    <string name=\"cancelled\">Cancelada</string>\n    <string name=\"set_chapter_settings_as_default\">Establecer por defecto</string>\n    <string name=\"none\">Ningún</string>\n    <string name=\"second_to_last\">Penúltimo capítulo lido</string>\n    <string name=\"pref_category_auto_download\">Descarga automática</string>\n    <string name=\"pref_create_backup\">Crear unha copia de seguridade</string>\n    <string name=\"creating_backup_error\">Non se puido facer a copia de seguridade</string>\n    <string name=\"pref_refresh_library_covers\">Actualizar as portadas da biblioteca</string>\n    <string name=\"invalid_backup_file\">O arquivo da copia de seguridade non é válido:</string>\n    <string name=\"invalid_backup_file_missing_manga\">A copia de seguriade non contén ningún elemento da biblioteca.</string>\n    <string name=\"pref_dns_over_https\">DNS por HTTPS (DoH)</string>\n    <string name=\"update_72hour\">Cada 3 días</string>\n    <string name=\"downloaded_only_summary\">Filtra tódolos elementos da túa biblioteca</string>\n    <string name=\"snack_add_to_library\">Engadir á biblioteca?</string>\n    <string name=\"description_placeholder\">Sen descripción</string>\n    <string name=\"status\">Estado</string>\n    <string name=\"restore_miui_warning\">É posible que as opcións de copia de seguridade e de restauración non funcionen correctamente se a \\\"Optimización de MIUI\\\" está desactivada.</string>\n    <string name=\"error_user_agent_string_invalid\">Axente de usuario non válido</string>\n    <string name=\"pref_reset_user_agent_string\">Restablecer o axente de usuario</string>\n    <string name=\"edge_nav\">Marxe</string>\n    <string name=\"database_clean\">Non hai nada que borrar</string>\n    <string name=\"pref_clear_webview_data\">Borrar os datos do WebView</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Restablecer o modo de lectura e a orientación de tódalas series</string>\n    <string name=\"action_sort_unread_count\">Número de non lidos</string>\n    <string name=\"action_show_manga\">Mostrar o elemento</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data de obtención dos capítulos</string>\n    <string name=\"label_warning\">Advertencia</string>\n    <string name=\"confirm_lock_change\">Identifícate para confirmar o cambio</string>\n    <string name=\"action_display_local_badge\">Fonte local</string>\n    <string name=\"action_remove_everything\">Quitar todo</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverter as zonas de toque</string>\n    <string name=\"nav_zone_right\">Dereita</string>\n    <string name=\"tracking_guide\">Guía de seguimento</string>\n    <string name=\"on_hiatus\">En pausa</string>\n    <string name=\"action_order_by_chapter_number\">Por número de capítulo</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_monet\">Dinámico</string>\n    <string name=\"theme_greenapple\">Mazá verde</string>\n    <string name=\"theme_midnightdusk\">Crepúsculo de medianoite</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri de amorodo</string>\n    <string name=\"theme_tealturquoise\">Azul mariño e turquesa</string>\n    <string name=\"theme_yinyang\">Yin e Yang</string>\n    <string name=\"pref_dark_theme_pure_black\">Modo negro puro</string>\n    <string name=\"include\">Incluír: %s</string>\n    <string name=\"extension_api_error\">Non se puido obter as extensións dispoñibles</string>\n    <string name=\"pref_clear_database\">Borrar a base de datos</string>\n    <string name=\"nav_zone_prev\">Anterior</string>\n    <string name=\"connected_to_wifi\">Só con Wi-Fi</string>\n    <string name=\"network_not_metered\">Só en conexións ilimitadas</string>\n    <string name=\"webview_data_deleted\">Borráronse os datos do WebView</string>\n    <string name=\"action_global_search_hint\">Procura global…</string>\n    <string name=\"action_sort_last_manga_update\">Última comprobación de actualizacións</string>\n    <string name=\"action_sort_count\">Número total de entradas</string>\n    <string name=\"action_not_now\">Agora non</string>\n    <string name=\"kindlish_nav\">Estilo Kindle</string>\n    <string name=\"right_and_left_nav\">Dereita e esquerda</string>\n    <string name=\"disabled_nav\">Desactivado</string>\n    <string name=\"unknown_author\">Autor descoñecido</string>\n    <string name=\"local_filter_order_by\">Ordenar por</string>\n    <string name=\"logout\">Pechar sesión</string>\n    <string name=\"no_results_found\">Non se atoparon resultados</string>\n    <string name=\"plan_to_read\">Pendente de ler</string>\n    <string name=\"action_search_hint\">Procurar…</string>\n    <string name=\"action_display_language_badge\">Idioma</string>\n    <string name=\"action_display_cover_only_grid\">Cuadrícula con só portadas</string>\n    <string name=\"date\">Data</string>\n    <string name=\"popular\">Popular</string>\n    <string name=\"action_open_random_manga\">Abrir un elemento ao azar</string>\n    <string name=\"nav_zone_next\">Seguinte</string>\n    <string name=\"rotation_type\">Tipo de rotación</string>\n    <string name=\"pref_lowest\">A máis baixa</string>\n    <string name=\"ext_info_language\">Idioma</string>\n    <string name=\"ext_installer_pref\">Instalador</string>\n    <string name=\"on\">Activado</string>\n    <string name=\"off\">Desactivado</string>\n    <string name=\"action_filter_tracked\">En seguimento</string>\n    <string name=\"pref_viewer_nav\">Zonas de toque</string>\n    <string name=\"rotation_reverse_portrait\">Vertical inverso</string>\n    <string name=\"clear_database_completed\">Borráronse as entradas</string>\n    <string name=\"pref_reset_viewer_flags_error\">Non se puido restablecer a configuración do lector</string>\n    <string name=\"label_background_activity\">Actividade en segundo plano</string>\n    <string name=\"pref_tablet_ui_mode\">Interface de tableta</string>\n    <string name=\"pref_verbose_logging\">Rexistro detallado</string>\n    <string name=\"label_downloaded_only\">Só os descargados</string>\n    <string name=\"pref_incognito_mode\">Modo incógnito</string>\n    <string name=\"pref_incognito_mode_summary\">Pausar o historial de lectura</string>\n    <string name=\"email\">Correo electrónico</string>\n    <string name=\"in_library\">Na biblioteca</string>\n    <string name=\"unknown_title\">Título descoñecido</string>\n    <string name=\"action_close\">Pechar</string>\n    <string name=\"pref_appearance_summary\">Tema, formatos de data e hora</string>\n    <string name=\"pref_category_appearance\">Aparencia</string>\n    <string name=\"action_display_show_continue_reading_button\">Botón de seguir lendo</string>\n    <string name=\"action_display_show_number_of_items\">Mostrar o número de elementos</string>\n    <string name=\"cancel_all_for_series\">Cancelar todo para esta serie</string>\n    <string name=\"action_order_by_upload_date\">Por data de subida</string>\n    <string name=\"action_show_errors\">Preme para ver os detalles do erro</string>\n    <string name=\"restrictions\">Restricións: %s</string>\n    <string name=\"categorized_display_settings\">Opcións de ordenación e visualización por categoría</string>\n    <string name=\"pref_dual_page_split\">Separar as páxinas anchas</string>\n    <string name=\"pref_dual_page_invert\">Inverter a posición das páxinas separadas</string>\n    <string name=\"tapping_inverted_none\">Non</string>\n    <string name=\"pref_reader_actions\">Accións</string>\n    <string name=\"pref_highest\">A máis alta</string>\n    <string name=\"pref_remove_exclude_categories\">Categorías excluídas</string>\n    <string name=\"pref_high\">Alta</string>\n    <string name=\"fourth_to_last\">Anterior ao antepenúltimo capítulo lido</string>\n    <string name=\"download_ahead\">Descargar por adiantado</string>\n    <string name=\"save_chapter_as_cbz\">Gardar como arquivo CBZ</string>\n    <string name=\"pref_create_backup_summ\">Pode usarse para restaurar a biblioteca actual</string>\n    <string name=\"pref_restore_backup_summ\">Restaurar a biblioteca dende unha copia de seguridade</string>\n    <string name=\"backup_created\">Creouse a copia de seguridade</string>\n    <string name=\"restoring_backup_error\">Fallou a restauración da copia de seguridade</string>\n    <string name=\"backup_restore_missing_trackers\">Servizos de seguimento sen conectar:</string>\n    <string name=\"restoring_backup\">Restaurando a copia de seguridade</string>\n    <string name=\"restore_in_progress\">Xa se está facendo a restauración</string>\n    <string name=\"pref_clear_database_summary\">Borrar o historial dos elementos que non estean gardados na túa biblioteca</string>\n    <string name=\"cookies_cleared\">Cookies borradas</string>\n    <string name=\"pref_clear_chapter_cache\">Borrar a caché dos capítulos</string>\n    <string name=\"cache_deleted\">Borrouse a caché. Elimináronse %1$d ficheiros</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forzar á aplicación a comprobar de novo os capítulos descargados</string>\n    <string name=\"clear_database_confirmation\">Estás seguro? Perderanse os capítulos lidos e o progreso dos elementos que non estean na biblioteca</string>\n    <string name=\"pref_reset_viewer_flags\">Restablecer os axustes do lector en cada serie</string>\n    <string name=\"pref_disable_battery_optimization\">Desactivar a optimización de batería</string>\n    <string name=\"battery_optimization_disabled\">A optimización de batería xa está desactivada</string>\n    <string name=\"about_dont_kill_my_app\">Algúns fabricantes teñen restricións adicionais para as aplicacións que causan a detención dos servizos en segundo plano. Esta páxina web ten máis información sobre como arranxalo.</string>\n    <string name=\"pref_verbose_logging_summary\">Amosar rexistros detallados no rexistro do sistema (diminúe o rendemento da aplicación)</string>\n    <string name=\"whats_new\">Novidades</string>\n    <string name=\"help_translate\">Axudar coa tradución</string>\n    <string name=\"login_title\">Iniciar sesión en %1$s</string>\n    <string name=\"updating_category\">Actualizando a categoría</string>\n    <string name=\"unknown_error\">Erro descoñecido</string>\n    <string name=\"also_set_chapter_settings_for_library\">Aplicar tamén a tódolos elementos da miña biblioteca</string>\n    <string name=\"chapter_paused\">En pausa</string>\n    <string name=\"show_title\">Título da fonte</string>\n    <string name=\"sort_by_number\">Por número de capítulo</string>\n    <string name=\"manga_download\">Descargar</string>\n    <string name=\"track_finished_reading_date\">Data de finalización</string>\n    <string name=\"track_remove_date_conf_title\">Queres eliminar a data?</string>\n    <string name=\"track_started_reading_date\">Data de comezo</string>\n    <string name=\"decode_image_error\">Non se puido cargar a imaxe</string>\n    <string name=\"transition_no_previous\">Non hai ningún capítulo anterior</string>\n    <string name=\"page_list_empty_error\">Non se atopou ningunha páxina</string>\n    <string name=\"download_queue_error\">Non foi posible descargar os capítulos. Podes tentar de novo na sección de descargas</string>\n    <string name=\"download_insufficient_space\">Non se puideron descargar os capítulos por falta de espazo de almacenamento</string>\n    <string name=\"notification_chapters_single\">Capítulo %1$s</string>\n    <string name=\"skipped_reason_completed\">Omitiuse porque a serie está rematada</string>\n    <string name=\"information_webview_outdated\">Actualiza a aplicación de WebView para mellorar a compatibilidade</string>\n    <string name=\"information_no_manga_category\">A categoría está baleira</string>\n    <string name=\"getting_started_guide\">Guía de introdución</string>\n    <string name=\"information_cloudflare_bypass_failure\">Non se puido evitar Cloudflare</string>\n    <string name=\"appwidget_unavailable_locked\">O widget non está dispoñible cando está activo o bloqueo da aplicación</string>\n    <string name=\"update_already_running\">Xa se está a actualizar</string>\n    <string name=\"chapter_downloading_progress\">Descargando (%1$d/%2$d)</string>\n    <string name=\"download_unread\">Non lidos</string>\n    <string name=\"track_remove_start_date_conf_text\">Isto eliminará a data de comezo seleccionada de %s</string>\n    <string name=\"spen_next_page\">Páxina seguinte</string>\n    <string name=\"migrate\">Migrar</string>\n    <string name=\"manga_removed_library\">Eliminado da biblioteca</string>\n    <string name=\"manga_info_expand\">Máis</string>\n    <string name=\"copied_to_clipboard_plain\">Copiado ao portapapeis</string>\n    <string name=\"display_mode_chapter\">Capítulo %1$s</string>\n    <string name=\"chapter_error\">Erro</string>\n    <string name=\"wish_list\">Para ler máis adiante</string>\n    <string name=\"track_remove_finish_date_conf_text\">Isto eliminará a data de finalización de %s</string>\n    <string name=\"custom_filter\">Filtro personalizado</string>\n    <string name=\"pref_category_for_this_series\">Para esta serie</string>\n    <string name=\"label_completed_titles\">Elementos rematados</string>\n    <string name=\"not_applicable\">Non dispoñible</string>\n    <string name=\"notification_size_warning\">As actualizacións grandes perxudican ás fontes e poden supoñer actualizacións máis lentas e un maior uso da batería. Preme para saber máis.</string>\n    <string name=\"notification_new_chapters\">Encontráronse capítulos novos</string>\n    <string name=\"notification_first_add_to_library\">Engade o elemento a túa biblioteca antes de facer isto</string>\n    <string name=\"download_notifier_unknown_error\">Non se puido descargar o capítulo por un erro inesperado</string>\n    <string name=\"sort_by_source\">Por fonte</string>\n    <string name=\"transition_current\">Actual:</string>\n    <string name=\"transition_next\">Seguinte:</string>\n    <string name=\"confirm_add_duplicate_manga\">Xa tes un elemento na túa biblioteca co mesmo nome.\n\\n\n\\nAínda queres continuar?</string>\n    <string name=\"copied_to_clipboard\">Copiado ao portapapeis:\n\\n%1$s</string>\n    <string name=\"clipboard_copy_error\">Non se puido copiar ao portapapeis</string>\n    <string name=\"complete_list\">Lista de rematados</string>\n    <string name=\"score\">Puntuación</string>\n    <string name=\"track_status\">Estado</string>\n    <string name=\"track_type\">Tipo</string>\n    <string name=\"source_unsupported\">Fonte non soportada</string>\n    <string name=\"updates_last_update_info_just_now\">Agora mesmo</string>\n    <string name=\"information_no_entries_found\">Non se atoparon elementos nesta categoría</string>\n    <string name=\"manga_added_library\">Engadido á biblioteca</string>\n    <string name=\"dropped\">Abandonado</string>\n    <string name=\"on_hold_list\">Lista de en espera</string>\n    <string name=\"label_overview_section\">Resumo</string>\n    <string name=\"label_titles_section\">Elementos</string>\n    <string name=\"label_tracker_section\">Servizos de seguimento</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"channel_ext_updates\">Actualizacións das extensións</string>\n    <string name=\"local_source\">Fonte local</string>\n    <string name=\"manga_tracking_tab\">En seguimento</string>\n    <string name=\"reading\">Lendo</string>\n    <string name=\"download_notifier_text_only_wifi\">Non hai ningunha conexión Wi-Fi dispoñible</string>\n    <string name=\"crash_screen_description\">%s pechouse por un problema inesperado. Aconsellámoste que compartas os rexistros de erros na canle de soporte no Discord (en inglés).</string>\n    <string name=\"crash_screen_restart_application\">Reinicia a aplicación</string>\n    <string name=\"source_filter_empty_screen\">Non se atopou ninguna fonte instalada</string>\n    <string name=\"download_queue_size_warning\">Advertencia: As descargas pesadas poden facer que as fontes se volvan máis lentas e/ou bloqueen Mihon. Preme para saber máis.</string>\n    <string name=\"update_check_open\">Abrir no GitHub</string>\n    <string name=\"download_notifier_downloader_title\">Xestor de descargas</string>\n    <string name=\"download_notifier_title_error\">Erro</string>\n    <string name=\"download_notifier_download_paused\">Descargas en pausa</string>\n    <string name=\"update_check_notification_download_complete\">Preme para instalar a actualización</string>\n    <string name=\"channel_progress\">Progreso</string>\n    <string name=\"update_check_notification_download_error\">Erro na descarga</string>\n    <string name=\"manga_info_collapse\">Menos</string>\n    <string name=\"delete_downloads_for_manga\">Eliminar os capítulos descargados?</string>\n    <string name=\"on_hold\">En espera</string>\n    <string name=\"transition_previous\">Anterior:</string>\n    <string name=\"transition_no_next\">Non hai ningún capítulo máis</string>\n    <string name=\"transition_pages_error\">Non se puideron cargar as páxinas: %1$s</string>\n    <string name=\"loader_not_implemented_error\">Non se atopou a fonte</string>\n    <string name=\"label_used\">En uso</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"library_errors_help\">Se necesitas axuda para arranxar os erros de actualización da biblioteca, consulta %1$s</string>\n    <string name=\"skipped_reason_not_caught_up\">Oimitiuse porque hai capítulos sin ler</string>\n    <string name=\"update_check_eol\">Esta versión de Android xa non ten soporte</string>\n    <string name=\"download_notifier_no_network\">Non hai ningunha conexión de rede dispoñible</string>\n    <string name=\"remove_from_library\">Eliminar da biblioteca</string>\n    <string name=\"chapter_settings_updated\">Actualizáronse os axustes por defecto dos capítulos</string>\n    <string name=\"appwidget_updates_description\">Ver os elementos da biblioteca actualizados recentemente</string>\n    <string name=\"remove_manga\">Vas eliminar \\\"%s\\\" da túa biblioteca</string>\n    <string name=\"no_next_chapter\">Non se atopou a o capítulo seguinte</string>\n    <string name=\"transition_pages_loading\">Cargando páxinas…</string>\n    <string name=\"transition_finished\">Rematado:</string>\n    <string name=\"chapter_progress\">Páxina: %1$d</string>\n    <string name=\"error_saving_picture\">Produciuse un erro ao gardar a imaxe</string>\n    <string name=\"notification_update_error\">Actualizacións erradas: %1$d</string>\n    <string name=\"update_check_confirm\">Descargar</string>\n    <string name=\"channel_app_updates\">Actualizacións da aplicación</string>\n    <string name=\"learn_more\">Preme para saber máis</string>\n    <string name=\"notification_cover_update_failed\">Erro ao actualizar a portada</string>\n    <string name=\"show_chapter_number\">Número do capítulo</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Non se atopou a ruta do ficheiro da páxina %d</string>\n    <string name=\"channel_complete\">Rematada</string>\n    <string name=\"channel_new_chapters\">Actualizacións de capítulos</string>\n    <string name=\"information_webview_required\">Mihon necesita WebView</string>\n    <string name=\"download_notifier_split_page_not_found\">Non se atopou a páxina %d ao separar</string>\n    <string name=\"channel_common\">Xeral</string>\n    <string name=\"crash_screen_title\">Vaia!</string>\n    <string name=\"download_notifier_cache_renewal\">Comprobando as descargas</string>\n    <string name=\"repeating\">Relendo</string>\n    <string name=\"local_source_help_guide\">Guía de fonte local</string>\n    <string name=\"no_pinned_sources\">Non tes ningunha fonte fixada</string>\n    <string name=\"local_invalid_format\">Formato de capítulo non válido</string>\n    <string name=\"set_as_cover\">Usar como portada</string>\n    <string name=\"cover_updated\">Portada actualizada</string>\n    <string name=\"share_page_info\">%1$s: %2$s, páxina %3$d</string>\n    <string name=\"sort_by_upload_date\">Por data de subida</string>\n    <string name=\"minute_short\">%dmin</string>\n    <string name=\"add_tracking\">Engadir seguimento</string>\n    <string name=\"pref_clear_history\">Eliminar o historial</string>\n    <string name=\"clear_history_completed\">Eliminouse o historial</string>\n    <string name=\"source_empty_screen\">Non se atopou ningunha fonte</string>\n    <string name=\"migration_help_guide\">Guía de migración de fontes</string>\n    <string name=\"migration_dialog_what_to_include\">Escoller os datos a incluír</string>\n    <string name=\"migration_selection_prompt\">Escoller unha fonte da que migrar</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"empty_screen\">Houston, temos un problema</string>\n    <string name=\"not_installed\">Non instalado</string>\n    <string name=\"label_read_duration\">Tempo de lectura</string>\n    <string name=\"label_titles_in_global_update\">Na actualización global</string>\n    <string name=\"label_total_chapters\">Totais</string>\n    <string name=\"update_check_notification_download_in_progress\">Descargando…</string>\n    <string name=\"information_empty_category_dialog\">Aínda non tes categorías.</string>\n    <string name=\"information_required_plain\">*necesario</string>\n    <string name=\"spen_previous_page\">Páxina anterior</string>\n    <string name=\"reading_list\">Lista de lectura</string>\n    <string name=\"are_you_sure\">Estás seguro?</string>\n    <string name=\"other_source\">Outros</string>\n    <string name=\"unknown_status\">Estado descoñecido</string>\n    <string name=\"source_not_installed\">Fonte non instalada: %1$s</string>\n    <string name=\"track_error\">Erro %1$s: %2$s</string>\n    <string name=\"snack_categories_deleted\">Categorías eliminadas</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Isto eliminará a data de lectura deste capítulo. Estás seguro?</string>\n    <string name=\"unfinished_list\">Lista de inacabados</string>\n    <string name=\"error_no_match\">Non se atoparon coincidencias</string>\n    <string name=\"confirm_set_image_as_cover\">Queres usar esta imaxe como portada?</string>\n    <string name=\"error_category_exists\">Xa hai unha categoría con este nome!</string>\n    <string name=\"dialog_with_checkbox_reset\">Reiniciar tódolos capítulos deste elemento</string>\n    <string name=\"viewer\">Modo de lectura</string>\n    <string name=\"updating_library\">Actualizando a biblioteca</string>\n    <string name=\"updates_last_update_info\">Última actualización da biblioteca: %s</string>\n    <string name=\"recent_manga_time\">Cap. %1$s - %2$s</string>\n    <string name=\"clear_history_confirmation\">Estás seguro? Perderás o historial.</string>\n    <string name=\"cant_open_last_read_chapter\">Non se puido abrir o último capítulo lido</string>\n    <string name=\"label_read_chapters\">Lidos</string>\n    <string name=\"seconds_short\">%dseg</string>\n    <string name=\"label_tracked_titles\">Elementos en seguimento</string>\n    <string name=\"label_mean_score\">Puntuación media</string>\n    <string name=\"skipped_reason_not_started\">Omitiuse porque non hai capítulos lidos</string>\n    <string name=\"notification_chapters_single_and_more\">Capítulo %1$s e %2$d máis</string>\n    <string name=\"notification_chapters_multiple\">Capítulos %1$s</string>\n    <string name=\"skipped_reason_not_always_update\">Omitiuse porque esta serie non require actualizarse</string>\n    <string name=\"file_select_cover\">Elexir a imaxe de portada</string>\n    <string name=\"file_select_backup\">Elexir o ficheiro da copia de seguridade</string>\n    <string name=\"update_check_no_new_updates\">Non hai novas actualizacións dispoñibles</string>\n    <string name=\"update_check_notification_update_available\">Nova versión dispoñible!</string>\n    <string name=\"channel_errors\">Erros</string>\n    <string name=\"action_global_search_query\">Procurar \\\"%1$s\\\" globalmente</string>\n    <string name=\"split_tall_images\">Dividir as imaxes altas</string>\n    <string name=\"action_update_category\">Actualizar categoría</string>\n    <string name=\"pref_hide_in_library_items\">Ocultar elementos que xa estén na biblioteca</string>\n    <string name=\"action_copy_to_clipboard\">Copiar ao portapapeis</string>\n    <string name=\"pref_page_rotate\">Xirar as páxinas anchas para adaptalas á pantalla</string>\n    <string name=\"pref_page_rotate_invert\">Voltear a orientación das páxinas anchas xiradas</string>\n    <string name=\"overlay_header\">Superposición</string>\n    <string name=\"pref_chapter_swipe_start\">Acción de arrastrar á esquerda</string>\n    <string name=\"pref_double_tap_zoom\">Amplía dando dous toques na pantalla</string>\n    <string name=\"pref_chapter_swipe_end\">Acción de arrastrar á dereita</string>\n    <string name=\"pref_debug_info\">Información de depuración</string>\n    <string name=\"selected\">Seleccionado</string>\n    <string name=\"not_selected\">Non seleccionado</string>\n    <string name=\"action_set_interval\">Establecer intervalo</string>\n    <string name=\"exception_unknown_host\">Non se puido acceder a %s</string>\n    <string name=\"exception_offline\">Sen conexión a Internet</string>\n    <string name=\"onboarding_description\">Primeiro hai que configurar algunhas cousas. Sempre podes modificalas nos axustes.</string>\n    <string name=\"onboarding_action_next\">Seguinte</string>\n    <string name=\"onboarding_storage_selection_required\">Debes elexir un cartafol</string>\n    <string name=\"onboarding_storage_help_action\">Guía de almacenamento</string>\n    <string name=\"onboarding_storage_help_info\">Actualizaches dende unha versión máis antiga e non sabes que elixir? Bótalle unha ollada á guía de almacenamento.</string>\n    <string name=\"theme_nord\">Nórdico</string>\n    <string name=\"pref_relative_format\">Marcas de tempo relativas</string>\n    <string name=\"pref_library_update_smart_update\">Actualizacións intelixentes</string>\n    <string name=\"action_add_repo\">Engadir un repositorio</string>\n    <string name=\"action_add_repo_message\">Engade máis repositorios a Mihon. Debe ser unha dirección URL que remate en \\\"index.min.json\\\".</string>\n    <string name=\"action_delete_repo\">Borrar repositorio</string>\n    <string name=\"invalid_repo_name\">A dirección URL do repositorio non é válida</string>\n    <string name=\"delete_repo_confirmation\">Queres eliminar o repositorio \\\"%s\\\"?</string>\n    <string name=\"track_activity_name\">Iniciar sesión no servizo de seguimento</string>\n    <string name=\"pref_storage_location\">Ubicación do almacenamento</string>\n    <string name=\"action_filter_interval_custom\">Frecuencia de actualización personalizada</string>\n    <string name=\"action_sort_tracker_score\">Puntuación do servizo de seguimento</string>\n    <string name=\"action_menu_overflow_description\">Máis opcións</string>\n    <string name=\"delete_downloaded\">Borrar os descargados</string>\n    <string name=\"scanlator\">Equipo de tradución</string>\n    <string name=\"label_data_storage\">Datos e almacenamento</string>\n    <string name=\"unlock_app_title\">Desbloquear %s</string>\n    <string name=\"action_sort_next_updated\">Próxima actualización prevista</string>\n    <string name=\"action_apply\">Aplicar</string>\n    <string name=\"action_ok\">Aceptar</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Mover ao último posto</string>\n    <string name=\"action_revert_to_default\">Restablecer os axustes por defecto</string>\n    <string name=\"pref_onboarding_guide\">Guía de benvida</string>\n    <string name=\"onboarding_heading\">Dámosche a benvida!</string>\n    <string name=\"onboarding_action_finish\">Comecemos</string>\n    <string name=\"onboarding_action_skip\">Omitir</string>\n    <string name=\"onboarding_storage_info\">Elixe o cartafol onde %1$s almacenará os capítulos descargados, as copias de seguridade e máis.\n\\n\n\\nRecoméndase usar un cartafol dedicado.\n\\n\n\\nElixir cartafol: %2$s</string>\n    <string name=\"onboarding_storage_action_select\">Elixe un cartafol</string>\n    <string name=\"onboarding_permission_install_apps\">Permiso para instalar aplicacións</string>\n    <string name=\"onboarding_permission_install_apps_description\">Para instalar as extensións das fontes.</string>\n    <string name=\"onboarding_permission_notifications\">Pemiso para amosar notificacións</string>\n    <string name=\"onboarding_permission_notifications_description\">Recibe notificacións cando se actualice a biblioteca e máis cousas.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Uso de batería en segundo plano</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Evita as interrupcións nas actualizacións da biblioteca, nas descargas e na restauración de copias de seguridade que tarden un anaco.</string>\n    <string name=\"onboarding_permission_action_grant\">Permitir</string>\n    <string name=\"onboarding_guides_new_user\">Primeira vez usando %s? Recomendámosche ler a guía de introdución.</string>\n    <string name=\"onboarding_guides_returning_user\">Volvendo instalar %s?</string>\n    <string name=\"pref_relative_format_summary\">«%1$s» en lugar de «%2$s»</string>\n    <string name=\"pref_update_only_in_release_period\">Predicir cando sae o seguinte capítulo</string>\n    <string name=\"ext_permission_install_apps_warning\">Preme aquí para conceder os permisos para instalar extensións.</string>\n    <string name=\"ext_revoke_trust\">Revogar as extensións de confianza de orixe descoñecida</string>\n    <string name=\"label_extension_repos\">Repositorios de extensións</string>\n    <string name=\"information_empty_repos\">Aínda non engadiches ningún repositorio.</string>\n    <string name=\"label_add_repo_input\">Dirección URL do repositorio</string>\n    <string name=\"error_repo_exists\">Este repositorio xa existe!</string>\n    <string name=\"action_open_repo\">Abrir o repositorio</string>\n    <string name=\"pref_flash_page\">Tremelucir ao cambiar de páxina</string>\n    <string name=\"pref_flash_page_summ\">Reducir o efecto de retención de imaxe nas pantallas de tinta electrónica</string>\n    <string name=\"no_location_set\">Aínda non seleccionaches ningunha localización de almacenamento</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Desactivar redución de zoom</string>\n    <string name=\"exception_http\">HTTP %d, comproba a páxina web no WebView</string>\n    <string name=\"pref_storage_location_info\">Utilízase para as copias de seguridade automáticas, as descargas de capítulos e a fonte local.</string>\n    <string name=\"app_settings\">Axustes da aplicación</string>\n    <string name=\"source_settings\">Axustes da fonte</string>\n    <string name=\"action_create\">Crear</string>\n    <string name=\"invalid_backup_file_error\">Erro completo:</string>\n    <string name=\"create_backup_file_error\">Non se puido crear unha copia de seguridade</string>\n    <string name=\"pref_storage_usage\">Almacenamento usado</string>\n    <string name=\"track_delete_remote_text\">Eliminar tamén de %s</string>\n    <string name=\"download_cache_invalidated\">Invalidouse o índice de descargas</string>\n    <string name=\"has_results\">Ten resultados</string>\n    <string name=\"action_add_anyway\">Engadir de todos modos</string>\n    <string name=\"action_migrate_duplicate\">Migrar a entrada existente</string>\n    <string name=\"available_disk_space_info\">Dispoñible: %1$s / Total: %2$s</string>\n    <string name=\"syncing_library\">Sincronizando a biblioteca</string>\n    <string name=\"relative_time_span_never\">Nunca</string>\n    <string name=\"label_upcoming\">Proximamente</string>\n    <string name=\"action_replace_repo\">Substituír</string>\n    <string name=\"action_replace_repo_title\">A impresión dixital da chave da firma xa existe</string>\n    <string name=\"action_replace_repo_message\">O repositorio %1$s ten a misma impresión dixital da chave da firma que %2$s.\n\\nSe isto é o comportamento agardado, %2$s substituirase. Se no é así, contacta con quen mantén o repositorio.</string>\n    <string name=\"pref_display_profile\">Perfil de visualización personalizado</string>\n    <string name=\"private_settings\">Incluír configuracións sensibles (por exemplo, as chaves de inicio de sesión en plataformas de seguimento)</string>\n    <string name=\"action_bar_up_description\">Navegar arriba</string>\n    <string name=\"library_sync_complete\">A biblioteca sincronizouse correctamente</string>\n    <string name=\"intervals_header\">Intervalos</string>\n    <string name=\"manga_display_interval_title\">Estimar cada</string>\n    <string name=\"manga_interval_expected_update\">Prevese que o seguinte capítulo saia en %1$s, compróbase cada %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Frecuencia de actualización personalizada:</string>\n    <string name=\"track_delete_title\">Queres deixar de seguir %s?</string>\n    <string name=\"notification_updating_progress\">Actualizando a biblioteca… (%s)</string>\n    <string name=\"skipped_reason_not_in_release_period\">Omitiuse porque hoxe non se esperaba ningunha publicación</string>\n    <string name=\"file_null_uri_error\">Non se elixiu ningún arquivo</string>\n    <string name=\"last_auto_backup_info\">Última copia de seguridade automática: %s</string>\n    <string name=\"manga_display_modified_interval_title\">Actualizar cada</string>\n    <string name=\"manga_interval_expected_update_soon\">Pronto</string>\n    <string name=\"exclude_scanlators\">Excluír equipos de tradución</string>\n    <string name=\"no_scanlators_found\">Non se atopou ningún equipo de tradución</string>\n    <string name=\"track_delete_text\">Esto eliminará o seguimento local.</string>\n    <string name=\"action_view_upcoming\">Ver as próximas actualizacións</string>\n    <string name=\"upcoming_guide\">Guía dos próximos lanzamenos</string>\n    <string name=\"upcoming_calendar_next\">Mes seguinte</string>\n    <string name=\"upcoming_calendar_prev\">Mes anterior</string>\n    <string name=\"information_cloudflare_help\">Preme aquí para obter axuda con Cloudflare</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Actualizar o progreso ao marcalo como lido</string>\n    <string name=\"action_copy_link\">Copiar ligazón</string>\n    <string name=\"pref_flash_style_white\">Branco</string>\n    <string name=\"pref_flash_style_white_black\">Branco e negro</string>\n    <string name=\"action_sort_random\">Aleatorio</string>\n    <string name=\"onboarding_permission_analytics\">Permitir analíticas</string>\n    <string name=\"pref_flash_style_black\">Negro</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pausar o historial de lectura para esta extensión</string>\n    <string name=\"manga_interval_expected_update_null\">Este manga está rematado ou non ten unha data de publicación prevista.</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Envía rexistros de erros anónimos aos desenvolvedores.</string>\n    <string name=\"onboarding_permission_crashlytics\">Enviar rexistro de erros</string>\n    <string name=\"non_library_settings\">Todas as obras lidas</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Elixir un tamaño máximo co que decodificar imáxenes por hardware</string>\n    <string name=\"add_repo_confirmation\">Queres engadir o repositorio \\\"%s\\\"?</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Por defecto (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Se o lector carga unha páxina en branco, recomendámoste reducilo pouco a pouco.\\nLímite actual: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Afecta ao rendemento. Recomendámosche activalo só se a imaxe segue sen verse ao reducir o tamaño máximo</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Omitir a descarga de capítulos duplicados xa lidos</string>\n    <string name=\"ext_confirm_remove\">Queres eliminar a extensión?</string>\n    <string name=\"remove_private_extension_message\">Seguro que queres eliminar a extensión \\\"%s\\\"?</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"invalid_backup_file_json\">Copia de seguridade JSON non compatible</string>\n    <string name=\"invalid_backup_file_unknown\">O arquivo da copia de seguridade está corrupto</string>\n    <string name=\"extensionRepo_settings\">Repositorios de extensións</string>\n    <string name=\"confirm_tracker_update\">Marcar o capítulo %d como lido nos servizos de seguimento?</string>\n    <string name=\"trackers_updated_summary\">Servizos de seguimento actualizados ao capítulo %d</string>\n    <string name=\"onboarding_permission_analytics_description\">Enviar estatísticas de uso anónimas para mellorar as funcións da aplicación.</string>\n    <string name=\"pref_security\">Seguridade</string>\n    <string name=\"pref_firebase\">Analíticas e rexistros de erros</string>\n    <string name=\"firebase_summary\">O envío de rexistros de erros e estatísticas de uso permitirannos identificar e arranxar problemas, mellorar o rendemento e que futuras actualizacións poidan adaptarse mellor as túas necesidades</string>\n    <string name=\"pref_flash_page_interval\">Escintilar cada</string>\n    <string name=\"pref_flash_with\">Escintilar con</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Non se puido obter un acceso continuo ao cartafol. É posible que a aplicación se comporte de xeito imprevisto.</string>\n    <string name=\"ext_remove\">Eliminar</string>\n    <string name=\"pref_flash_duration\">Duración do flash</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/he/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">עדכון לתוסף זמין</item>\n        <item quantity=\"two\">עדכונים ל-%d תוספים זמינים</item>\n        <item quantity=\"many\">עדכונים ל-%d תוספים זמינים</item>\n        <item quantity=\"other\">עדכונים ל-%d תוספים זמינים</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">פרקים %1$s ואחד נוסף</item>\n        <item quantity=\"two\">פרקים %1$s ו-%2$d נוספים</item>\n        <item quantity=\"many\">פרקים %1$s ו-%2$d נוספים</item>\n        <item quantity=\"other\">פרקים %1$s ו-%2$d נוספים</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">פרק אחד חדש</item>\n        <item quantity=\"two\">%1$d פרקים חדשים</item>\n        <item quantity=\"many\">%1$d פרקים חדשים</item>\n        <item quantity=\"other\">%1$d פרקים חדשים</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">עבור כותר אחד</item>\n        <item quantity=\"two\">עבור %d כותרים</item>\n        <item quantity=\"many\">עבור %d כותרים</item>\n        <item quantity=\"other\">עבור %d כותרים</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">לאחר דקה אחת</item>\n        <item quantity=\"two\">לאחר שתי דקות</item>\n        <item quantity=\"many\">לאחר %1$s דקות</item>\n        <item quantity=\"other\">לאחר %1$s דקות</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">קטגורייה אחת</item>\n        <item quantity=\"two\">שתי קטגוריות</item>\n        <item quantity=\"many\">%d קטגוריות</item>\n        <item quantity=\"other\">%d קטגוריות</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">אתמול</item>\n        <item quantity=\"two\">לפני יומיים</item>\n        <item quantity=\"many\">לפני %1$d ימים</item>\n        <item quantity=\"other\">לפני %1$d ימים</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">פרק אחד</item>\n        <item quantity=\"two\">שני פרקים</item>\n        <item quantity=\"many\">%1$s פרקים</item>\n        <item quantity=\"other\">%1$s פרקים</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">1 נשאר</item>\n        <item quantity=\"two\">2 נשארו</item>\n        <item quantity=\"many\">%1$s נשארו</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">הושלם ב %1$s עם שגיאה אחת</item>\n        <item quantity=\"two\">הושלם ב %1$s עם שתי שגיאות</item>\n        <item quantity=\"many\">הושלם ב %1$s עם %2$s שגיאות</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">דולג פרק אחד, המקור חסר או שהוא סונן החוצה</item>\n        <item quantity=\"two\">דולגו שני פרקים, המקור חסר או שהם סוננו החוצה</item>\n        <item quantity=\"many\">דולגו %d פרקים, המקור חסר או שהם סוננו החוצה</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">הפרק הבא</item>\n        <item quantity=\"two\">שני הפרקים הבאים</item>\n        <item quantity=\"many\">%d הפרקים הבאים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">מעקב אחד</item>\n        <item quantity=\"two\">שני מעקבים</item>\n        <item quantity=\"many\">%d מעקבים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">הפרק הבא שלא נקרא</item>\n        <item quantity=\"two\">שני הפרקים הבאים שלא נקראו</item>\n        <item quantity=\"many\">%d הפרקים הבאים שלא נקראו</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">יום אחד</item>\n        <item quantity=\"two\">יומיים</item>\n        <item quantity=\"many\">%d ימים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">חסר פרק אחד</item>\n        <item quantity=\"two\">חסרים שני פרקים</item>\n        <item quantity=\"many\">חסרים %1$s פרקים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">מחר</item>\n        <item quantity=\"two\">מחרותיים</item>\n        <item quantity=\"other\">בעוד %1$d ימים</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/he/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"channel_ext_updates\">עדכונים לתוסף</string>\n    <string name=\"channel_new_chapters\">עדכונים לפרק</string>\n    <string name=\"channel_common\">נפוץ</string>\n    <string name=\"download_notifier_download_paused\">ההורדות מושהות</string>\n    <string name=\"download_notifier_no_network\">אין חיבור רשת זמין</string>\n    <string name=\"download_notifier_text_only_wifi\">אין חיבור Wi-Fi זמין</string>\n    <string name=\"download_notifier_unknown_error\">לא ניתן להוריד את הפרק בגלל שגיאה בלתי צפויה</string>\n    <string name=\"download_notifier_title_error\">שגיאה</string>\n    <string name=\"information_webview_outdated\">אנא עדכן את אפליקציית WebView לקבלת תאימות טובה יותר</string>\n    <string name=\"information_cloudflare_bypass_failure\">עקיפה של Cloudflare נכשלה</string>\n    <string name=\"information_empty_category\">אין לך קטגוריות. לחץ על כפתור הפלוס כדי ליצור אחד לארגון הספרייה שלך.</string>\n    <string name=\"information_empty_library\">הספרייה שלך ריקה</string>\n    <string name=\"information_no_downloads\">אין הורדות</string>\n    <string name=\"update_check_notification_update_available\">גרסה חדשה זמינה!</string>\n    <string name=\"update_check_notification_download_error\">שגיאה בהורדה</string>\n    <string name=\"update_check_notification_download_complete\">לחץ כדי להתקין עדכון</string>\n    <string name=\"update_check_notification_download_in_progress\">מוריד…</string>\n    <string name=\"update_check_no_new_updates\">אין עדכונים חדשים זמינים</string>\n    <string name=\"update_check_confirm\">הורדה</string>\n    <string name=\"file_select_backup\">בחר קובץ גיבוי</string>\n    <string name=\"file_select_cover\">בחר תמונת כריכה</string>\n    <string name=\"notification_first_add_to_library\">אנא הוסף את הפריט לספרייה שלך לפני שתעשה זאת</string>\n    <string name=\"notification_cover_update_failed\">עדכון הכריכה נכשל</string>\n    <string name=\"notification_chapters_multiple\">פרקים %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">פרק %1$s ו-%2$d נוספים</string>\n    <string name=\"notification_chapters_single\">פרק %1$s</string>\n    <string name=\"notification_new_chapters\">נמצאו פרקים חדשים</string>\n    <string name=\"download_queue_error\">לא ניתן להוריד פרקים. אפשר לנסות שוב בדף ההורדות</string>\n    <string name=\"copy\">העתק</string>\n    <string name=\"migrate\">העברה</string>\n    <string name=\"migration_selection_prompt\">בחר מקור שברצונך להעביר ממנו</string>\n    <string name=\"migration_dialog_what_to_include\">בחר נתונים כדי לכלול</string>\n    <string name=\"updating_library\">מעדכן ספרייה</string>\n    <string name=\"transition_pages_error\">טעינת העמודים נכשלה: %1$s</string>\n    <string name=\"transition_pages_loading\">טוען דפים…</string>\n    <string name=\"transition_no_previous\">אין פרק קודם</string>\n    <string name=\"transition_no_next\">אין פרק הבא</string>\n    <string name=\"transition_previous\">קודם:</string>\n    <string name=\"transition_next\">הבא:</string>\n    <string name=\"transition_current\">נוכחי:</string>\n    <string name=\"transition_finished\">סיים:</string>\n    <string name=\"confirm_set_image_as_cover\">האם להשתמש בתמונה זו כציור כריכה?</string>\n    <string name=\"decode_image_error\">לא ניתן היה לפענח את התמונה</string>\n    <string name=\"no_next_chapter\">הפרק הבא לא נמצא</string>\n    <string name=\"chapter_progress\">עמוד: %1$d</string>\n    <string name=\"set_as_cover\">הגדר ככריכה</string>\n    <string name=\"cover_updated\">הכריכה עודכנה</string>\n    <string name=\"custom_filter\">סנן מותאם אישית</string>\n    <string name=\"picture_saved\">התמונה נשמרה</string>\n    <string name=\"dialog_with_checkbox_reset\">אפס את כל הפרקים לפריט זה</string>\n    <string name=\"dialog_with_checkbox_remove_description\">פעולה זו תסיר את התאריך הקריאה של פרק זה. האם אתה בטוח?</string>\n    <string name=\"snack_categories_deleted\">הקטגוריות נמחקו</string>\n    <string name=\"error_category_exists\">קטגוריה עם שם זה כבר קיימת!</string>\n    <string name=\"track_type\">סוג</string>\n    <string name=\"track_status\">סטטוס</string>\n    <string name=\"status\">סטטוס</string>\n    <string name=\"title\">כותרת</string>\n    <string name=\"score\">ציון</string>\n    <string name=\"repeating\">קריאה מחדש</string>\n    <string name=\"plan_to_read\">מתכנן לקרוא</string>\n    <string name=\"paused\">מושהה</string>\n    <string name=\"on_hold\">בהמתנה</string>\n    <string name=\"dropped\">הושמט</string>\n    <string name=\"completed\">הושלם</string>\n    <string name=\"confirm_delete_chapters\">האם אתה בטוח שברצונך למחוק את הפרקים שנבחרו?</string>\n    <string name=\"download_unread\">לא נקרא</string>\n    <string name=\"sort_by_number\">לפי מספר פרק</string>\n    <string name=\"sort_by_source\">לפי מקור</string>\n    <string name=\"show_chapter_number\">מספר פרק</string>\n    <string name=\"show_title\">כותרת</string>\n    <string name=\"chapter_paused\">מושהה</string>\n    <string name=\"chapter_error\">שגיאה</string>\n    <string name=\"chapter_downloading_progress\">מוריד (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">פרקים %1$s</string>\n    <string name=\"snack_add_to_library\">להוסיף לספרייה?</string>\n    <string name=\"source_not_installed\">המקור לא הותקן: %1$s</string>\n    <string name=\"delete_downloads_for_manga\">למחוק פרקים שירדו?</string>\n    <string name=\"manga_added_library\">נוסף לספרייה</string>\n    <string name=\"remove_from_library\">הסר מהספרייה</string>\n    <string name=\"manga_removed_library\">הוסר מהספרייה</string>\n    <string name=\"unknown\">לא ידוע</string>\n    <string name=\"ongoing\">נמשך</string>\n    <string name=\"latest\">המאוחר ביותר</string>\n    <string name=\"action_global_search_hint\">חיפוש גלובלי…</string>\n    <string name=\"other_source\">אחר</string>\n    <string name=\"local_source\">מאנגה מקומית</string>\n    <string name=\"no_results_found\">לא נמצאו תוצאות</string>\n    <string name=\"no_more_results\">אין תוצאות נוספות</string>\n    <string name=\"updating_category\">מעדכן קטגוריה</string>\n    <string name=\"unknown_error\">שגיאה לא ידועה</string>\n    <string name=\"logout_success\">אתה עכשיו מנותק</string>\n    <string name=\"logout\">התנתק</string>\n    <string name=\"logout_title\">התנתק מ-%1$s?</string>\n    <string name=\"login_success\">מחובר</string>\n    <string name=\"password\">סיסמה</string>\n    <string name=\"email\">כתובת דוא\\\"ל</string>\n    <string name=\"username\">שם משתמש</string>\n    <string name=\"login_title\">התחבר אל %1$s</string>\n    <string name=\"pref_acra_summary\">עוזר בתיקון באגים. לא יישלחו נתונים רגישים</string>\n    <string name=\"pref_enable_acra\">שלח דוחות קריסה</string>\n    <string name=\"untrusted_extension_message\">תוסף זה נחתם עם אישור לא מהימן ולא הופעל.\n\\n\n\\nתוסף זדוני יכול לקרוא את אישורי ההתחברות המאוחסנים ב-Mihon או להריץ קוד שרירותי.\n\\n\n\\nעל ידי אמון באישור זה אתה מקבל סיכונים אלה.</string>\n    <string name=\"ext_uninstall\">הסר התקנה</string>\n    <string name=\"ext_untrusted\">לא מאומת</string>\n    <string name=\"ext_installed\">הותקן</string>\n    <string name=\"ext_installing\">מתקין</string>\n    <string name=\"ext_downloading\">מוריד</string>\n    <string name=\"ext_pending\">ממתין</string>\n    <string name=\"ext_install\">התקן</string>\n    <string name=\"ext_update\">עדכון</string>\n    <string name=\"ext_updates_pending\">עדכונים ממתינים</string>\n    <string name=\"all\">הכל</string>\n    <string name=\"default_category_summary\">שאל תמיד</string>\n    <string name=\"default_category\">קטגוריית ברירת המחדל</string>\n    <string name=\"pref_update_only_non_completed\">במצב \\\"נגמרה\\\"</string>\n    <string name=\"charging\">טוען</string>\n    <string name=\"pref_library_update_restriction\">הגבלות עדכונים אוטומטיים</string>\n    <string name=\"update_weekly\">פעם בשבוע</string>\n    <string name=\"update_48hour\">פעם ביומיים</string>\n    <string name=\"update_24hour\">פעם ביום</string>\n    <string name=\"update_12hour\">כל 12 שעות</string>\n    <string name=\"update_6hour\">כל 6 שעות</string>\n    <string name=\"update_never\">כבוי</string>\n    <string name=\"pref_library_update_interval\">עדכונים אוטומטיים</string>\n    <string name=\"pref_category_library_update\">עדכון גלובלי</string>\n    <string name=\"landscape\">מאוזן</string>\n    <string name=\"portrait\">מאונך</string>\n    <string name=\"hide_notification_content\">הסתר תוכן התראות</string>\n    <string name=\"secure_screen_summary\">מסך מאובטח מסתיר את תוכן האפליקציה בעת החלפת אפליקציות וחוסם צילומי מסך</string>\n    <string name=\"lock_never\">לעולם לא</string>\n    <string name=\"lock_always\">תמיד</string>\n    <string name=\"lock_when_idle\">נעילה כאשר אינו פעיל</string>\n    <string name=\"lock_with_biometrics\">ביטול נעילה דרוש</string>\n    <string name=\"pref_category_security\">אבטחה ופרטיות</string>\n    <string name=\"pref_manage_notifications\">ניהול התראות</string>\n    <string name=\"pref_date_format\">תבנית תאריך</string>\n    <string name=\"theme_dark\">פעיל</string>\n    <string name=\"theme_light\">כבוי</string>\n    <string name=\"pref_category_about\">אודות</string>\n    <string name=\"pref_category_advanced\">מתקדם</string>\n    <string name=\"pref_category_downloads\">הורדות</string>\n    <string name=\"pref_category_library\">ספרייה</string>\n    <string name=\"pref_category_general\">כללי</string>\n    <string name=\"app_not_available\">האפליקציה אינה זמינה</string>\n    <string name=\"loading\">טוען…</string>\n    <string name=\"action_webview_refresh\">רענון</string>\n    <string name=\"action_webview_forward\">קדימה</string>\n    <string name=\"action_webview_back\">חזרה</string>\n    <string name=\"action_restore\">שיחזור</string>\n    <string name=\"action_undo\">בטל פעולה אחרונה</string>\n    <string name=\"action_reset\">איפוס</string>\n    <string name=\"action_save\">שמור</string>\n    <string name=\"action_share\">שתף</string>\n    <string name=\"action_install\">התקן</string>\n    <string name=\"action_move_to_bottom\">עבור לתחתית הדף</string>\n    <string name=\"action_move_to_top\">עבור לראש הדף</string>\n    <string name=\"action_oldest\">הישן ביותר</string>\n    <string name=\"action_newest\">החדש ביותר</string>\n    <string name=\"action_sort\">מיון</string>\n    <string name=\"action_cancel_all\">בטל הכל</string>\n    <string name=\"action_display\">תצוגה</string>\n    <string name=\"track\">מעקב</string>\n    <string name=\"label_more\">עוד</string>\n    <string name=\"action_cancel\">ביטול</string>\n    <string name=\"action_display_download_badge\">פרקים שירדו</string>\n    <string name=\"action_display_list\">רשימה</string>\n    <string name=\"action_display_grid\">רשת קומפקטית</string>\n    <string name=\"action_display_mode\">מצב תצוגה</string>\n    <string name=\"action_open_in_web_view\">פתח ב-WebView</string>\n    <string name=\"action_open_in_browser\">פתח בדפדפן</string>\n    <string name=\"action_resume\">המשך</string>\n    <string name=\"action_remove\">הסר</string>\n    <string name=\"action_retry\">נסה שוב</string>\n    <string name=\"action_next_chapter\">פרק הבא</string>\n    <string name=\"action_previous_chapter\">פרק קודם</string>\n    <string name=\"action_pause\">הפסק</string>\n    <string name=\"action_view_chapters\">הצג פרקים</string>\n    <string name=\"action_edit_cover\">ערוך את הכריכה</string>\n    <string name=\"action_move_category\">סדר קטגוריות</string>\n    <string name=\"action_rename_category\">שנה שם קטגוריה</string>\n    <string name=\"action_edit_categories\">ערוך קטגוריות</string>\n    <string name=\"action_add_category\">הוסף קטגוריה</string>\n    <string name=\"version\">גרסה</string>\n    <string name=\"battery_optimization_disabled\">אופטימיזציית סוללה כבר מושבתת</string>\n    <string name=\"pref_disable_battery_optimization_summary\">עוזר בעדכוני ספריות רקע וגיבויים</string>\n    <string name=\"pref_disable_battery_optimization\">השבתת האופטימיזציה של הסוללה</string>\n    <string name=\"clear_database_completed\">הרשומות נמחקו</string>\n    <string name=\"clear_database_confirmation\">האם אתה בטוח? פרקים שנקראו וההתקדמות של פריטים שאינם בספרייה יאבדו</string>\n    <string name=\"pref_clear_database_summary\">מחק את היסטוריית הפריטים שאינם שמורים בספריה שלך</string>\n    <string name=\"pref_clear_database\">נקה את מסד הנתונים</string>\n    <string name=\"cookies_cleared\">עוגיות נוקו</string>\n    <string name=\"pref_clear_cookies\">נקה עוגיות</string>\n    <string name=\"cache_delete_error\">אירעה שגיאה במהלך הניקוי</string>\n    <string name=\"cache_deleted\">זיכרון המטמון נוקה. %1$d קבצים נמחקו</string>\n    <string name=\"used_cache\">בשימוש: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">נקה את זיכרון המטמון של הפרקים</string>\n    <string name=\"creating_backup\">מייצר גיבוי</string>\n    <string name=\"restoring_backup\">משחזר גיבוי</string>\n    <string name=\"backup_choice\">מה אתה רוצה לגבות?</string>\n    <string name=\"restore_completed\">השחזור הושלם</string>\n    <string name=\"backup_created\">גיבוי נוצר</string>\n    <string name=\"pref_backup_interval\">תדירות גיבוי</string>\n    <string name=\"pref_restore_backup_summ\">שחזר ספרייה מקובץ גיבוי</string>\n    <string name=\"pref_restore_backup\">שחזור גיבוי</string>\n    <string name=\"pref_create_backup_summ\">ניתן לשימוש על מנת לשחזר את הספרייה הנוכחית</string>\n    <string name=\"pref_create_backup\">צור גיבוי</string>\n    <string name=\"services\">שירותים</string>\n    <string name=\"pref_auto_update_manga_sync\">עדכן התקדמות לאחר הקריאה</string>\n    <string name=\"pref_download_new\">הורד פרקים חדשים</string>\n    <string name=\"fifth_to_last\">הפרק החמישי מהסוף שנקרא</string>\n    <string name=\"fourth_to_last\">הפרק הרביעי מהסוף שנקרא</string>\n    <string name=\"third_to_last\">הפרק השלישי מהסוף שנקרא</string>\n    <string name=\"second_to_last\">הפרק השני מהסוף שנקרא</string>\n    <string name=\"last_read_chapter\">פרק שנקרא בפעם האחרונה</string>\n    <string name=\"pref_remove_after_read\">אוטומטי לאחר סיום הקריאה</string>\n    <string name=\"pref_remove_after_marked_as_read\">אחרי שמסומן ידנית כנקרא</string>\n    <string name=\"pref_always_show_chapter_transition\">הצג תמיד מעברי פרקים</string>\n    <string name=\"color_filter_a_value\">אלפא</string>\n    <string name=\"color_filter_b_value\">כחול</string>\n    <string name=\"color_filter_g_value\">ירוק</string>\n    <string name=\"color_filter_r_value\">אדום</string>\n    <string name=\"rotation_force_landscape\">מאוזן נעול</string>\n    <string name=\"rotation_force_portrait\">מאונך נעול</string>\n    <string name=\"rotation_free\">חופשי</string>\n    <string name=\"pref_rotation_type\">ברירת המחדל של סוג הסיבוב</string>\n    <string name=\"double_tap_anim_speed_fast\">מהירה</string>\n    <string name=\"double_tap_anim_speed_normal\">רגילה</string>\n    <string name=\"double_tap_anim_speed_0\">בלי אנימציה</string>\n    <string name=\"zoom_start_center\">מרכז</string>\n    <string name=\"zoom_start_right\">ימין</string>\n    <string name=\"zoom_start_left\">שמאל</string>\n    <string name=\"zoom_start_automatic\">אוטומטי</string>\n    <string name=\"pref_zoom_start\">מיקום התחלה של ההגדלה</string>\n    <string name=\"scale_type_smart_fit\">התאמה חכמה</string>\n    <string name=\"scale_type_original_size\">גודל מקורי</string>\n    <string name=\"scale_type_fit_height\">התאם לגובה</string>\n    <string name=\"scale_type_fit_width\">התאם לרוחב</string>\n    <string name=\"scale_type_stretch\">למתוח</string>\n    <string name=\"scale_type_fit_screen\">התאם לגודל מסך</string>\n    <string name=\"pref_image_scale_type\">סוג קנה מידה</string>\n    <string name=\"webtoon_viewer\">רצועה מוארכת</string>\n    <string name=\"vertical_viewer\">סידור עמודים (אנכי)</string>\n    <string name=\"right_to_left_viewer\">סידור עמודים (ימין לשמאל)</string>\n    <string name=\"left_to_right_viewer\">סידור עמודים (שמאל לימין)</string>\n    <string name=\"pref_viewer_type\">ברירת המחדל של מצב הקריאה</string>\n    <string name=\"black_background\">שחור</string>\n    <string name=\"white_background\">לבן</string>\n    <string name=\"pref_reader_theme\">צבע רקע</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">מקשי עוצמת שמע הפוכים</string>\n    <string name=\"pref_read_with_volume_keys\">מקשי עוצמת שמע</string>\n    <string name=\"pref_reader_navigation\">ניווט</string>\n    <string name=\"pref_skip_filtered_chapters\">דלג על פרקים מסוננים</string>\n    <string name=\"pref_skip_read_chapters\">דלג על פרקים המסומנים כנקראו</string>\n    <string name=\"pref_keep_screen_on\">השאר מסך דלוק</string>\n    <string name=\"filter_mode_darken\">שרוף / מוחשך</string>\n    <string name=\"filter_mode_screen\">מסך</string>\n    <string name=\"pref_custom_color_filter\">מסנן צבע מותאם אישית</string>\n    <string name=\"pref_custom_brightness\">בהירות מותאמת אישית</string>\n    <string name=\"pref_crop_borders\">חתוך גבולות</string>\n    <string name=\"pref_show_page_number\">הצג מספר עמוד</string>\n    <string name=\"pref_double_tap_anim_speed\">מהירות הנפשה בהקשה כפולה</string>\n    <string name=\"pref_page_transitions\">הנפשת מעברי דפים</string>\n    <string name=\"pref_cutout_short\">הצג תוכן באזור החתוך</string>\n    <string name=\"untrusted_extension\">תוסף לא מאומת</string>\n    <string name=\"obsolete_extension_message\">תוסף זה אינו זמין עוד. ייתכן שאינו פועל כצפוי ויכול לגרום לבעיות באפליקציה. מומלץ להסיר את התקנת התוסף.</string>\n    <string name=\"pref_fullscreen\">מסך מלא</string>\n    <string name=\"action_add\">הוסף</string>\n    <string name=\"action_edit\">ערוך</string>\n    <string name=\"action_update_library\">עדכן ספרייה</string>\n    <string name=\"action_delete\">מחק</string>\n    <string name=\"action_remove_bookmark\">בטל סימון פרק</string>\n    <string name=\"action_bookmark\">סמן פרק</string>\n    <string name=\"action_download\">הורד</string>\n    <string name=\"action_mark_previous_as_read\">סמן את הקודמים כנקראו</string>\n    <string name=\"action_mark_as_unread\">סמן כלא נקרא</string>\n    <string name=\"action_mark_as_read\">סמן כנקרא</string>\n    <string name=\"action_select_all\">סמן הכל</string>\n    <string name=\"action_global_search\">חיפוש כללי</string>\n    <string name=\"action_search\">חיפוש</string>\n    <string name=\"action_sort_latest_chapter\">הפרק האחרון</string>\n    <string name=\"action_sort_last_read\">נקרא לאחרונה</string>\n    <string name=\"action_sort_total\">כל הפרקים</string>\n    <string name=\"action_sort_alpha\">אלפביתית</string>\n    <string name=\"action_filter_empty\">הסר את הסנן</string>\n    <string name=\"action_filter_unread\">לא נקרא</string>\n    <string name=\"action_filter\">סנן</string>\n    <string name=\"action_menu\">תפריט</string>\n    <string name=\"action_settings\">הגדרות</string>\n    <string name=\"label_help\">עזרה</string>\n    <string name=\"label_extension_info\">פרטי הרחבה</string>\n    <string name=\"label_extensions\">הרחבות</string>\n    <string name=\"label_migration\">העברה</string>\n    <string name=\"label_backup\">גיבוי ושחזור</string>\n    <string name=\"label_sources\">מקורות</string>\n    <string name=\"label_recent_manga\">היסטוריה</string>\n    <string name=\"label_recent_updates\">עדכונים</string>\n    <string name=\"label_library\">ספרייה</string>\n    <string name=\"label_download_queue\">תור ההורדות</string>\n    <string name=\"label_settings\">הגדרות</string>\n    <string name=\"history\">היסטוריה</string>\n    <string name=\"chapters\">פרקים</string>\n    <string name=\"manga\">פריטים בספריה</string>\n    <string name=\"categories\">קטגוריות</string>\n    <string name=\"name\">שם</string>\n    <string name=\"information_no_recent_manga\">שום דבר לא נקרא לאחרונה</string>\n    <string name=\"information_no_recent\">אין עידכונים אחרונים</string>\n    <string name=\"action_filter_bookmarked\">סומן</string>\n    <string name=\"label_default\">ברירת המחדל</string>\n    <string name=\"pref_app_theme\">ערכת הנושא של האפליקציה</string>\n    <string name=\"action_start_downloading_now\">התחל להוריד עכשיו</string>\n    <string name=\"action_pin\">נעץ</string>\n    <string name=\"secure_screen\">מסך מאובטח</string>\n    <string name=\"pref_library_columns\">גודל רשת</string>\n    <string name=\"theme_system\">עקוב אחר המערכת</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">בדוק אם יש כריכה ופרטים חדשים בעת עדכון הספרייה</string>\n    <string name=\"action_sort_count\">סה\\\"כ פריטים</string>\n    <string name=\"action_search_settings\">הגדרות חיפוש</string>\n    <string name=\"action_select_inverse\">בחר את ההפך</string>\n    <string name=\"action_display_language_badge\">שפה</string>\n    <string name=\"action_display_show_tabs\">הצג קטגורית כרטיסיות</string>\n    <string name=\"action_display_show_number_of_items\">הצג מספר של פריטים</string>\n    <string name=\"action_disable\">השבת</string>\n    <string name=\"action_unpin\">הסר נעיצה</string>\n    <string name=\"cancel_all_for_series\">בטל הכל לסדרה זו</string>\n    <string name=\"action_order_by_upload_date\">לפי תאריך ההעלאה</string>\n    <string name=\"action_order_by_chapter_number\">לפי מספר הפרק</string>\n    <string name=\"action_asc\">עולה</string>\n    <string name=\"action_desc\">יורד</string>\n    <string name=\"label_warning\">אזהרה</string>\n    <string name=\"confirm_lock_change\">אימות לאישור השינוי</string>\n    <string name=\"pref_category_reader\">מצב קריאה</string>\n    <string name=\"pref_category_tracking\">מעקב</string>\n    <string name=\"pref_category_theme\">נושא</string>\n    <string name=\"pref_category_nsfw_content\">מקורות NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">הצג ברשימות מקורות ותוספים</string>\n    <string name=\"parental_controls_info\">זה לא מונע תוספים לא רשמיים או תוספים שעלולים לסמן באופן שגוי מלהציג תוכן NSFW (18+) בתוך האפליקציה.</string>\n    <string name=\"relative_time_today\">היום</string>\n    <string name=\"pref_category_display\">תצוגה</string>\n    <string name=\"action_enable_all\">אפשר הכל</string>\n    <string name=\"action_disable_all\">השבת הכל</string>\n    <string name=\"action_start\">התחל</string>\n    <string name=\"action_migrate\">העברה</string>\n    <string name=\"action_display_comfortable_grid\">רשת נוחה</string>\n    <string name=\"action_display_local_badge\">מקור מקומי</string>\n    <string name=\"theme_tealturquoise\">טורקיז צהבהב</string>\n    <string name=\"pref_dark_theme_pure_black\">מצב שחור כהה טהור</string>\n    <string name=\"theme_greenapple\">ירוק תפוח</string>\n    <string name=\"theme_strawberrydaiquiri\">תות דאיקירי</string>\n    <string name=\"theme_yinyang\">יין ויאנג</string>\n    <string name=\"theme_yotsuba\">ארבעה עלים</string>\n    <string name=\"action_show_errors\">לחץ כדי לראות פרטים</string>\n    <string name=\"pref_category_appearance\">מראה</string>\n    <string name=\"theme_midnightdusk\">דמדומי חצות</string>\n    <string name=\"theme_tako\">טאקו</string>\n    <string name=\"pref_library_update_refresh_metadata\">רענן נתונים באופן אוטומטי</string>\n    <string name=\"action_filter_tracked\">במעקב</string>\n    <string name=\"action_sort_date_added\">תאריך הוספה</string>\n    <string name=\"action_sort_chapter_fetch_date\">תאריך האחזור של הפרקים</string>\n    <string name=\"theme_monet\">דינמי</string>\n    <string name=\"pref_library_update_categories_details\">פריט הנמצא בקטגוריית מנועי העדכונים לא יעודכן גם אם הוא נכלל בקטגורייה אחרת שכן מתעדכנת.</string>\n    <string name=\"action_show_manga\">הראה פריט</string>\n    <string name=\"pref_update_only_completely_read\">עם פרק(ים) שלא נקרא(ו)</string>\n    <string name=\"action_move_to_top_all_for_series\">העבר סדרה לראש</string>\n    <string name=\"ext_obsolete\">מיושן</string>\n    <string name=\"pref_update_only_started\">זה עוד לא התחיל</string>\n    <string name=\"ext_update_all\">עדכן הכל</string>\n    <string name=\"ext_trust\">האמן</string>\n    <string name=\"ext_nsfw_warning\">עלול להכיל תוכן שלא מתאים למקום העבודה (18+)</string>\n    <string name=\"ext_install_service_notif\">מתקין הרחבה…</string>\n    <string name=\"include\">כלול: %s</string>\n    <string name=\"pref_show_navigation_mode_summary\">הראה לזמן קצר כשפותחים את מצב הקריאה</string>\n    <string name=\"pref_show_reading_mode\">הראה מצב קריאה</string>\n    <string name=\"ext_app_info\">פרטי האפליקצייה</string>\n    <string name=\"extension_api_error\">נכשל בקבלת רשימת ההרחבות</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"none\">אין</string>\n    <string name=\"update_72hour\">כל 3 ימים</string>\n    <string name=\"connected_to_wifi\">רק ב Wi-Fi</string>\n    <string name=\"restrictions\">הגבלות: %s</string>\n    <string name=\"pref_show_reading_mode_summary\">הראה לזמן קצר את סגנון הקריאה כשפותחים את מצב הקריאה</string>\n    <string name=\"pref_read_with_tapping_inverted\">לחיצה הופכית</string>\n    <string name=\"off\">כבוי</string>\n    <string name=\"on\">פעיל</string>\n    <string name=\"pref_grayscale\">טווח גווני האפור</string>\n    <string name=\"pref_inverted_colors\">הופכי</string>\n    <string name=\"tapping_inverted_horizontal\">אופקי</string>\n    <string name=\"right_and_left_nav\">ימין ושמאל</string>\n    <string name=\"nav_zone_next\">הבא</string>\n    <string name=\"nav_zone_right\">ימין</string>\n    <string name=\"rotation_type\">סוג הסיבוב</string>\n    <string name=\"rotation_portrait\">מאונך</string>\n    <string name=\"rotation_landscape\">מאוזן</string>\n    <string name=\"pref_hide_threshold\">רגישות החבאת התפריט בגלילה</string>\n    <string name=\"pref_highest\">הכי גבוה</string>\n    <string name=\"pref_high\">גבוה</string>\n    <string name=\"pref_low\">נמוך</string>\n    <string name=\"pref_lowest\">הכי נמוך</string>\n    <string name=\"pref_category_delete_chapters\">מחק פרקים</string>\n    <string name=\"pref_remove_exclude_categories\">קטגוריות מוחרגות</string>\n    <string name=\"pref_download_new_categories_details\">פריט הנמצא בקטגוריית מנועי ההורדות לא יעודכן גם אם הוא נכלל בקטגוריה אחרת שכן נכללת (בהורדות).</string>\n    <string name=\"save_chapter_as_cbz\">שמור כארכיון CBZ</string>\n    <string name=\"enhanced_services\">שירותים משופרים</string>\n    <string name=\"edge_nav\">גבול</string>\n    <string name=\"l_nav\">עשוי בצורת L</string>\n    <string name=\"nav_zone_left\">שמאל</string>\n    <string name=\"nav_zone_prev\">הקודם</string>\n    <string name=\"pref_category_reading\">קריאה</string>\n    <string name=\"pref_category_reading_mode\">מצב קריאה</string>\n    <string name=\"pref_category_auto_download\">הורדה אוטומטית</string>\n    <string name=\"gray_background\">אפור</string>\n    <string name=\"vertical_plus_viewer\">רצועה מוארכת עם רווחים</string>\n    <string name=\"pager_viewer\">סידור עמודים</string>\n    <string name=\"rotation_reverse_portrait\">מאונך הפוך</string>\n    <string name=\"pref_create_folder_per_manga\">שמור דפים בתיקיות נפרדות</string>\n    <string name=\"tapping_inverted_vertical\">אנכי</string>\n    <string name=\"tapping_inverted_both\">שניהם</string>\n    <string name=\"pref_reader_actions\">פעולות</string>\n    <string name=\"pref_read_with_long_tap\">הצג פעולות בלחיצה ארוכה</string>\n    <string name=\"automatic_background\">אוטומטי</string>\n    <string name=\"pref_remove_bookmarked_chapters\">אפשר מחיקת פרקים שסומנו</string>\n    <string name=\"disabled\">מנוע</string>\n    <string name=\"pref_create_folder_per_manga_summary\">צור תיקיות בהתאם לכותרת הפריטים</string>\n    <string name=\"enhanced_tracking_info\">שירותים המספקים שירותים משופרים למקורות ספציפיים. פריטים יהיו במעקב אוטומטי אחרי הוספה לספרייה שלך.</string>\n    <string name=\"backup_restore_missing_sources\">מקורות חסרים:</string>\n    <string name=\"invalid_backup_file\">קובץ גיבוי לא תקין</string>\n    <string name=\"invalid_backup_file_missing_manga\">הגיבוי לא מכיל שום פריטים.</string>\n    <string name=\"action_track\">מעקב</string>\n    <string name=\"pref_auto_clear_chapter_cache\">נקה את זיכרון המטמון של הפרקים כשהאפליקציה עולה</string>\n    <string name=\"clear_database_source_item_count\">יש %1$d פריטים שנמצאים במסד הנתונים אבל לא בספרייה</string>\n    <string name=\"tabs_header\">לשוניות</string>\n    <string name=\"action_global_search_query\">חפש את \\\"%1$s\\\" גלובלית</string>\n    <string name=\"unknown_status\">מצב לא ידוע</string>\n    <string name=\"licensed\">מורשה, בעל רישיון</string>\n    <string name=\"publishing_finished\">הפרסום הסתיים</string>\n    <string name=\"clipboard_copy_error\">נכשלה ההעתקה ללוח</string>\n    <string name=\"sort_by_upload_date\">לפי תאריך העלאה</string>\n    <string name=\"cover_saved\">הכריכה נשמרה</string>\n    <string name=\"error_saving_cover\">שגיאה בשמירת הכריכה</string>\n    <string name=\"error_sharing_cover\">שגיאה בשיתוף הכריכה</string>\n    <string name=\"set_chapter_settings_as_default\">קבע כברירת המחדל</string>\n    <string name=\"viewer\">מצב קריאה</string>\n    <string name=\"manga_from_library\">מהספרייה</string>\n    <string name=\"downloaded_chapters\">פרקים שירדו</string>\n    <string name=\"manga_cover\">כריכה</string>\n    <string name=\"manga_info_expand\">יותר</string>\n    <string name=\"manga_info_collapse\">פחות</string>\n    <string name=\"backup_in_progress\">כבר מתרחש גיבוי</string>\n    <string name=\"local_source_help_guide\">מדריך למנגה מקומית</string>\n    <string name=\"no_pinned_sources\">אין מקורות נעוצים</string>\n    <string name=\"chapter_not_found\">פרק לא נמצא</string>\n    <string name=\"pref_category_for_this_series\">לסדרה הזאת</string>\n    <string name=\"backup_restore_content_full\">מידע מקובץ הגיבוי ישוחזר.\n\\n\n\\nלאחר מכן צריך להתקין הרחבות חסרות ולהתחבר לשירותי המעקב כדי להשתמש בהם.</string>\n    <string name=\"restore_miui_warning\">יכול להיות שהגיבוי/השחזור לא יעבדו כמו שצריך אם אופטמיזציית MIUI מנועה.</string>\n    <string name=\"creating_backup_error\">הגיבוי נכשל</string>\n    <string name=\"restoring_backup_error\">שחזור הגיבוי נכשל</string>\n    <string name=\"requires_app_restart\">צריך לאתחל את האפליקציה כדי שהשינויים ייכנסו לתוקף</string>\n    <string name=\"privacy_policy\">מדיניות פרטיות</string>\n    <string name=\"add_to_library\">הוסף לספרייה</string>\n    <string name=\"copied_to_clipboard\">הועתק ללוח:\n\\n%1$s</string>\n    <string name=\"no_chapters_error\">לא נמצאו פרקים</string>\n    <string name=\"track_started_reading_date\">תאריך התחלה</string>\n    <string name=\"track_finished_reading_date\">תאריך סיום</string>\n    <string name=\"whats_new\">מה חדש</string>\n    <string name=\"help_translate\">עזור לתרגם</string>\n    <string name=\"label_downloaded_only\">רק מה שירד</string>\n    <string name=\"browse\">דפדפן</string>\n    <string name=\"unread\">לא נקרא</string>\n    <string name=\"reading\">קריאה</string>\n    <string name=\"login\">התחברות</string>\n    <string name=\"pinned_sources\">נעוץ</string>\n    <string name=\"restore_duration\">%02d דקות, %02d שניות</string>\n    <string name=\"restoring_backup_canceled\">השחזור בוטל</string>\n    <string name=\"backup_info\">רצוי לשמור עותקים נוספים של גיבויים במקומות אחרים בנוסף.</string>\n    <string name=\"database_clean\">אין מה לנקות</string>\n    <string name=\"check_for_updates\">בדוק עדכונים</string>\n    <string name=\"local_filter_order_by\">סדר ע\\\"י</string>\n    <string name=\"date\">תאריך</string>\n    <string name=\"unknown_author\">מחבר לא ידוע</string>\n    <string name=\"pref_incognito_mode\">מצב פרטי</string>\n    <string name=\"downloaded_only_summary\">סינון כל הפריטים בספרייה שלך</string>\n    <string name=\"website\">אתר</string>\n    <string name=\"label_data\">מידע</string>\n    <string name=\"error_saving_picture\">שגיאה בשמירת התמונה</string>\n    <string name=\"share_page_info\">%1$s: %2$s עמוד %3$d</string>\n    <string name=\"pref_incognito_mode_summary\">עוצר את קריאת ההיסטוריה</string>\n    <string name=\"notification_incognito_text\">ביטול מצב פרטי</string>\n    <string name=\"manga_download\">הורדה</string>\n    <string name=\"label_network\">רשת</string>\n    <string name=\"cancelled\">בוטל/ה</string>\n    <string name=\"in_library\">בתוך הספרייה</string>\n    <string name=\"chapter_settings\">הגדרות פרק</string>\n    <string name=\"confirm_set_chapter_settings\">האם אתה בטוח שאתה רוצה לשמור את ההגדרות האלה כברירת המחדל?</string>\n    <string name=\"restore_in_progress\">כבר מתרחש שחזור</string>\n    <string name=\"page_list_empty_error\">לא נמצאו עמודים</string>\n    <string name=\"loader_not_implemented_error\">מקור לא נמצא</string>\n    <string name=\"clear_history_completed\">ההיסטוריה נמחקה</string>\n    <string name=\"ext_installer_pref\">מתקין</string>\n    <string name=\"channel_progress\">התקדמות</string>\n    <string name=\"channel_complete\">הושלם</string>\n    <string name=\"spen_previous_page\">הדף הקודם</string>\n    <string name=\"spen_next_page\">הדף הבא</string>\n    <string name=\"empty_screen\">אוקיי, זה מביך</string>\n    <string name=\"pref_reset_viewer_flags_success\">כל הגדרות מצב הקריאה אופסו</string>\n    <string name=\"exclude\">החרגה: %s</string>\n    <string name=\"channel_app_updates\">עדכוני אפליקציה</string>\n    <string name=\"source_filter_empty_screen\">לא נמצאו מקורות מותקנים</string>\n    <string name=\"notification_size_warning\">הורדות גדולות פוגעות במקורות ויכולות לגרום לעדכונים איטיים יותר וגם לשימוש מוגבר בסוללה. לחץ כדי ללמוד עוד.</string>\n    <string name=\"information_empty_category_dialog\">עדיין אין קטגוריות.</string>\n    <string name=\"learn_more\">לחץ כדי ללמוד עוד</string>\n    <string name=\"pref_clear_history\">נקה היסטוריה</string>\n    <string name=\"pref_reset_viewer_flags_error\">נכשל איפוס הגדרות מצב הקריאה</string>\n    <string name=\"action_sort_last_manga_update\">עדכון אחרון</string>\n    <string name=\"action_sort_unread_count\">לא נקראו</string>\n    <string name=\"categorized_display_settings\">הגדרות מיון לכל קטגוריה בנפרד</string>\n    <string name=\"source_empty_screen\">מקור לא נמצא</string>\n    <string name=\"update_check_eol\">גרסת האנדרואיד הזאת כבר לא נתמכת</string>\n    <string name=\"information_webview_required\">WebView נצרך ל-Mihon</string>\n    <string name=\"action_display_cover_only_grid\">רשת רק של הכריכות</string>\n    <string name=\"action_open_log\">פתח את יומן האירועים</string>\n    <string name=\"notification_update_error\">%1$d עדכונים נכשלו</string>\n    <string name=\"pref_landscape_zoom\">בצע קירוב לתמונות אופקיות באופן אוטומטי</string>\n    <string name=\"split_tall_images_summary\">משפר את ביצועי מצב הקריאה</string>\n    <string name=\"skipped_reason_completed\">דולג בגלל שהסדרה נגמרה</string>\n    <string name=\"skipped_reason_not_caught_up\">דולג בגלל שיש פרקים שלא נקראו</string>\n    <string name=\"skipped_reason_not_started\">דולג בגלל שאין פרקים שנקראו</string>\n    <string name=\"action_close\">סגור</string>\n    <string name=\"channel_errors\">שגיאות</string>\n    <string name=\"pref_reset_viewer_flags\">אפס את הגדרות מצב הקריאה של כל סדרה בנפרד</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku לא פועל</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">התקן והפעל את Shizuku כדי להשתמש בShizuku כמתקין ההרחבות.</string>\n    <string name=\"pref_show_navigation_mode\">הראה את פרישת מיקומי הלחיצה</string>\n    <string name=\"clear_history_confirmation\">אתה בטוח? כל ההיסטוריה תמחק.</string>\n    <string name=\"migration_help_guide\">מדריך נדידת מקורות</string>\n    <string name=\"download_insufficient_space\">לא ניתן להוריד פרקים כי אין מספיק מקום אחסון</string>\n    <string name=\"download_queue_size_warning\">אזהרה: הורדות גדולות עלולות לגרום להאטה במקורות ו/או לחסימת Mihon. לחץ כדי ללמוד עוד.</string>\n    <string name=\"local_invalid_format\">פורמט פרק לא תקין</string>\n    <string name=\"on_hiatus\">בהפסקה</string>\n    <string name=\"delete_category_confirmation\">האם תרצה למחוק את הקטגוריה %s?</string>\n    <string name=\"pref_dual_page_split\">פצל עמודים רחבים</string>\n    <string name=\"kindlish_nav\">כמו ספר אלקטרוני</string>\n    <string name=\"ext_info_version\">גרסה</string>\n    <string name=\"filter_mode_overlay\">כיסוי</string>\n    <string name=\"ext_info_age_rating\">הגבלת גיל</string>\n    <string name=\"ext_info_language\">שפה</string>\n    <string name=\"pref_color_filter_mode\">פילטר צבע משתלב</string>\n    <string name=\"filter_mode_multiply\">להכפיל</string>\n    <string name=\"delete_category\">מחק קטגוריה</string>\n    <string name=\"disabled_nav\">הגבלה</string>\n    <string name=\"ext_installer_legacy\">מורשת</string>\n    <string name=\"pref_app_language\">שפת אפליקציה</string>\n    <string name=\"pref_dual_page_invert\">הפוך מיקום של עמודים מפוצלים</string>\n    <string name=\"tracking_guide\">מדריך מעקב</string>\n    <string name=\"action_remove_everything\">מחק הכל</string>\n    <string name=\"pref_dual_page_invert_summary\">אם המקום של העמוד המפוצל לא תואם לכיוון הקריאה</string>\n    <string name=\"tapping_inverted_none\">כלום</string>\n    <string name=\"pref_viewer_nav\">איזורי נגיעה</string>\n    <string name=\"action_search_hint\">חיפוש…</string>\n    <string name=\"action_open_random_manga\">פתיחת פריט אקראי</string>\n    <string name=\"getting_started_guide\">מדריך למתחיל</string>\n    <string name=\"label_stats\">סטטיסטיקות</string>\n    <string name=\"label_local\">מקומי</string>\n    <string name=\"information_required_plain\">*דרוש</string>\n    <string name=\"internal_error\">שגיאה פנימית: בדוק ביומני קריסה למידע נוסף</string>\n    <string name=\"pref_security_summary\">נעילת אפליקציה, מסך מוגן</string>\n    <string name=\"remove_manga\">אתה עומד למחוק את \\\"%s\\\" מהספריה שלך</string>\n    <string name=\"label_started\">הותחלו</string>\n    <string name=\"label_downloaded\">הורדו</string>\n    <string name=\"theme_tidalwave\">גלים</string>\n    <string name=\"action_set_interval\">קבע מרווח זמן</string>\n    <string name=\"action_filter_interval_custom\">קבע מרווח זמן מותאם מראש לטעינה</string>\n    <string name=\"unknown_title\">כותרת לא מוכרת</string>\n    <string name=\"download_notifier_downloader_title\">מנהל ההורדות</string>\n    <string name=\"exception_http\">HTTP %d, בדוק באתר ב-WebView</string>\n    <string name=\"exception_offline\">אין חיבור אינטרנט</string>\n    <string name=\"information_no_manga_category\">קטגוריה ריקה</string>\n    <string name=\"action_update_category\">קטגוריית עדכון</string>\n    <string name=\"action_display_show_continue_reading_button\">כפתור המשך קריאה</string>\n    <string name=\"pref_browse_summary\">מקורות, הרחבות, חיפוש כללי</string>\n    <string name=\"pref_reader_summary\">מצב קריאה, תצוגה, ניווט</string>\n    <string name=\"action_copy_to_clipboard\">העתק ללוח הכתיבה</string>\n    <string name=\"chapter_settings_updated\">הגדרות פרק דיפולטי עודכנו</string>\n    <string name=\"action_not_now\">לא עכשיו</string>\n    <string name=\"download_notifier_cache_renewal\">בודק הורדות</string>\n    <string name=\"delete_downloaded\">מחק הורדות</string>\n    <string name=\"action_sort_next_updated\">העדכון הצפוי הבא</string>\n    <string name=\"pref_advanced_summary\">הורד קבצי קריסה, אופטימיזציה לסוללה</string>\n    <string name=\"theme_lavender\">לבנדר</string>\n    <string name=\"information_cloudflare_help\">לחץ כאן לעזרה עם Cloudflare</string>\n    <string name=\"download_notifier_split_page_not_found\">עמוד %d לא נמצא בעת פיצול</string>\n    <string name=\"appwidget_updates_description\">צפה בפריטי הספריה העדכניים ביותר</string>\n    <string name=\"download_notifier_split_page_path_not_found\">נכשל במציאת כתובת עמוד %d</string>\n    <string name=\"confirm_add_duplicate_manga\">כבר קיים פריט בספריה בעל אותו שם.\n\\n\n\\nלהמשיך בכל זאת?</string>\n    <string name=\"pref_downloads_summary\">הורדה אוטומטית, הורד את הבאים</string>\n    <string name=\"pref_appearance_summary\">נושא, פורמט תאריך וזמן</string>\n    <string name=\"pref_library_summary\">קטגוריות, עדכון כללי, החלקת פרק</string>\n    <string name=\"pref_tracking_summary\">סנכרון חד צדדי, סנכרון משופר</string>\n    <string name=\"pref_backup_summary\">מדריך וגיבויים אוטומטיים</string>\n    <string name=\"information_no_entries_found\">לא נמצאו פריטים בקטגוריה זו</string>\n    <string name=\"action_ok\">בסדר</string>\n    <string name=\"updates_last_update_info\">ספריה עודכנה לאחרונה ב: %s</string>\n    <string name=\"pref_navigate_pan\">שטח תמונה רחבה</string>\n    <string name=\"pref_hide_in_library_items\">הסתר פריטים שכבר בספרייה</string>\n    <string name=\"missing_storage_permission\">הרשאות אחסון לא ניתנו</string>\n    <string name=\"empty_backup_error\">אין פרטי ספרייה לגיבוי</string>\n    <string name=\"create_backup_file_error\">נכשל ביצירת קובץ גיבוי</string>\n    <string name=\"error_user_agent_string_invalid\">מחרוזת משתמש לא תקינה</string>\n    <string name=\"pref_reset_user_agent_string\">איפוס מחרוזת משתמש דיפולטית</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">לא הצליח לפתוח הגדרות מכשיר</string>\n    <string name=\"pref_verbose_logging\">לוג מפורט</string>\n    <string name=\"pref_verbose_logging_summary\">הדפס דוחות שגיאה מפורטים ליומן המערכת (מוריד ביצועים לאפליקציה)</string>\n    <string name=\"overlay_header\">שכבת על</string>\n    <string name=\"day_short\">%d ימים</string>\n    <string name=\"update_check_open\">פתח ב-GitHub</string>\n    <string name=\"pref_chapter_swipe_end\">פעולה בהחלקה ימינה</string>\n    <string name=\"pref_invalidate_download_cache\">בטל תוקף של אינדקס ההורדות</string>\n    <string name=\"enhanced_services_not_installed\">זמין אבל המקור לא מותקן: %s</string>\n    <string name=\"tracking_info\">סנכרון חד צדדי לעדכון ההתקדמות בפרקים בשיקות המעקב. קבע מעקב עבור פריטים ספציפיים מכפתור המעקב שלהם.</string>\n    <string name=\"pref_library_update_show_tab_badge\">הצג כמות פרקים שלא נקראו בסמל העדכונים</string>\n    <string name=\"split_tall_images\">פצל תמונה מוארכת</string>\n    <string name=\"pref_dump_crash_logs_summary\">שומר דוח שגיאות לקובץ עבור שיתוף עם המפתחים</string>\n    <string name=\"custom_cover\">כריכה מותאמת אישית</string>\n    <string name=\"track_remove_date_conf_title\">להסיר תאריך?</string>\n    <string name=\"download_ahead\">הורד הלאה</string>\n    <string name=\"label_background_activity\">פעילות רקע</string>\n    <string name=\"label_tracked_titles\">פריטים במעקב</string>\n    <string name=\"pref_user_agent_string\">מחרוזת משתמש דיפולטית</string>\n    <string name=\"copied_to_clipboard_plain\">הועתק ללוח כתיבה</string>\n    <string name=\"are_you_sure\">האם אתה בטוח?</string>\n    <string name=\"source_unsupported\">המקור לא נתמך</string>\n    <string name=\"error_no_match\">לא נמצאה התאמה</string>\n    <string name=\"not_installed\">לא מותקן</string>\n    <string name=\"label_read_duration\">משך קריאה</string>\n    <string name=\"label_titles_in_global_update\">בעדכון כללי</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"library_errors_help\">לזערה לגבי איך לתקן בעיות בעדכוני ספריה, ראה %1$s</string>\n    <string name=\"exception_unknown_host\">לא יכל להשיג את %s</string>\n    <string name=\"pref_update_only_in_release_period\">מחוץ לתקופת הפרסום הצפויה</string>\n    <string name=\"pref_page_rotate\">סובב עמודים רחבים להתאמה</string>\n    <string name=\"updates_last_update_info_just_now\">ממש עכשיו</string>\n    <string name=\"auto_download_while_reading\">הורד אוטומטית בזמן קריאה</string>\n    <string name=\"track_activity_name\">פרטי התחברות למעקב</string>\n    <string name=\"invalid_location\">מיקום לא תקין: %s</string>\n    <string name=\"syncing_library\">מסנכרן ספריה</string>\n    <string name=\"error_user_agent_string_blank\">מחרזות משתמש לא יכולה להיות ריקה</string>\n    <string name=\"last_used_source\">שומש לאחרונה</string>\n    <string name=\"myanimelist_relogin\">בבקשה התחבר ל-MAL שוב</string>\n    <string name=\"label_completed_titles\">פריטים שהושלמו</string>\n    <string name=\"crash_screen_description\">%s נתקל בשגיאה בלתי צפויה. אנו ממליצים שתשתף את דוחות השגיאה שלך בערוץ התמיכה שלנו בדיסקורד.</string>\n    <string name=\"label_read_chapters\">נקראו</string>\n    <string name=\"label_titles_section\">פריטים</string>\n    <string name=\"seconds_short\">%d שניות</string>\n    <string name=\"on_hold_list\">רשימת פריטים בעצירה זמנית</string>\n    <string name=\"unfinished_list\">רשימת פריטים שלא הושלמו</string>\n    <string name=\"update_already_running\">פעולת עדכון כבר פועלת</string>\n    <string name=\"label_tracker_section\">מעקבים</string>\n    <string name=\"pref_page_rotate_invert\">החלף אוריינטציה של עמודים רחבים מסובבים</string>\n    <string name=\"backup_restore_missing_trackers\">מעקבים שדורשים התחברות:</string>\n    <string name=\"complete_list\">רשימת פריטים שהושלמו</string>\n    <string name=\"pref_tablet_ui_mode\">ממשק משתמש טאבלט</string>\n    <string name=\"fdroid_warning\">F-Droid builds לא נתמכים באופן רשמי.\n\\nלחץ כדי ללמוד עוד.</string>\n    <string name=\"track_delete_title\">להסיר את %s ממעקב?</string>\n    <string name=\"track_delete_text\">פעולה זו תסיר את המעקב שלך מקומית.</string>\n    <string name=\"track_delete_remote_text\">הסר גם מ-%s</string>\n    <string name=\"also_set_chapter_settings_for_library\">קבע גם עבור כל הפריטים בספריה</string>\n    <string name=\"network_not_metered\">רק ברשת בלתי מוגבלת</string>\n    <string name=\"pref_dump_crash_logs\">שתף יומני קריסה</string>\n    <string name=\"track_remove_start_date_conf_text\">פעולה זו תסיר את תאריך ההתחלה הקודם שלך מ-%s</string>\n    <string name=\"reading_list\">רשימת קריאה</string>\n    <string name=\"wish_list\">רשימת תכנונים</string>\n    <string name=\"multi_lang\">רבים</string>\n    <string name=\"filter_mode_lighten\">להתחמק / להאיר</string>\n    <string name=\"pref_webtoon_side_padding\">רפד בצדדים</string>\n    <string name=\"library_sync_complete\">סנכרון ספריה הושלם</string>\n    <string name=\"intervals_header\">מרווחי זמן</string>\n    <string name=\"cant_open_last_read_chapter\">לא מסוגל לפתוח את הפרק שנקרא לאחרונה</string>\n    <string name=\"pref_chapter_swipe_start\">פעולה בהחלקה שמאלה</string>\n    <string name=\"pref_double_tap_zoom\">לחיצה כפולה לקירוב (זום)</string>\n    <string name=\"updated_version\">עודכן לגרסה %1$s</string>\n    <string name=\"label_total_chapters\">בסך הכל</string>\n    <string name=\"track_error\">שגיאה %1$s: %2$s</string>\n    <string name=\"download_ahead_info\">עובד רק אם הפרק הנוכחי והפרק הבא כבר הורדו.</string>\n    <string name=\"pref_skip_dupe_chapters\">דלג על פרקים כפולים</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"download_cache_invalidated\">תוקף אינדקס ההורדות בוטל</string>\n    <string name=\"webview_data_deleted\">מידע של WebView נוקה בהצלחה</string>\n    <string name=\"pref_reset_viewer_flags_summary\">אפס מצב קריאה ואוריינטציה לכל הסדרות</string>\n    <string name=\"pref_debug_info\">מידע דיבוג</string>\n    <string name=\"licenses\">רישיונות מקורות פתוחים</string>\n    <string name=\"popular\">פופולרי</string>\n    <string name=\"add_tracking\">הוסף מעקב</string>\n    <string name=\"about_dont_kill_my_app\">לחלק מהיצרנים יש הגבלות אפליקציה שהורגות תהליכים ברקע. באתר הזה יש עוד מידע לגבי איך לתקן את זה.</string>\n    <string name=\"track_remove_finish_date_conf_text\">פעולה זו תסיר את תאריך הסיום הקודם שלך מ-%s</string>\n    <string name=\"crash_screen_title\">אופס!</string>\n    <string name=\"crash_screen_restart_application\">אתחל את האפליקציה</string>\n    <string name=\"hour_short\">%d שעות</string>\n    <string name=\"skipped_reason_not_always_update\">דולג בגלל שהספריה לא דורשת עדכונים</string>\n    <string name=\"skipped_reason_not_in_release_period\">דולג בגלל שלא צפוי פרסום היום</string>\n    <string name=\"file_picker_error\">לא נמצאה אפליקציה לאסוף קבצים</string>\n    <string name=\"manga_tracking_tab\">במעקב</string>\n    <string name=\"description_placeholder\">אין תיאור</string>\n    <string name=\"manga_display_interval_title\">בצע אומדן בכל</string>\n    <string name=\"manga_display_modified_interval_title\">קבע לעדכון בכל</string>\n    <string name=\"recent_manga_time\">פרקים %1$s-%2$s</string>\n    <string name=\"label_overview_section\">סקירה</string>\n    <string name=\"appwidget_unavailable_locked\">יישומון לא זמין כשנעילת האפליקציה מופעלת</string>\n    <string name=\"pref_invalidate_download_cache_summary\">הכרח את האפליקציה לבדוק מחדש פרקים שהורדו</string>\n    <string name=\"pref_clear_webview_data\">נקה מידע של WebView</string>\n    <string name=\"pref_refresh_library_covers\">רענן כריכות ספרייה</string>\n    <string name=\"has_results\">בעל תוצאות</string>\n    <string name=\"label_mean_score\">ציון ממוצע</string>\n    <string name=\"label_used\">בשימוש</string>\n    <string name=\"minute_short\">%d דקות</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/hi/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s मिनट के बाद%1$s मिनटों के बाद</item>\n        <item quantity=\"other\"></item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d नया अध्याय</item>\n        <item quantity=\"other\">%1$d नए अध्याय</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">अध्याय %1$s और 1 अधिक</item>\n        <item quantity=\"other\">अध्याय %1$s और %2$d अधिक</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d आइटम के लिए</item>\n        <item quantity=\"other\">%d आइटम के लिए</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">एक्सटेंशन अपडेट उपलब्ध</item>\n        <item quantity=\"other\">%d एक्सटेंशन अपडेट उपलब्ध</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s बचा हुआ</item>\n        <item quantity=\"other\">%1$s बचे हुए</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d श्रेणी%d श्रेणियाँ</item>\n        <item quantity=\"other\"></item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s में %2$s त्रुटि के साथ किया गया</item>\n        <item quantity=\"other\">%1$s में %2$s त्रुटियों के साथ किया गया</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">अध्याय %1$s</item>\n        <item quantity=\"other\">%1$s अध्याय</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d ट्रैकर</item>\n        <item quantity=\"other\">%d ट्रैकरस</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d अध्याय को छोड़ा जा रहा है, या तो स्रोत में यह नहीं है या इसे फ़िल्टर कर दिया गया है</item>\n        <item quantity=\"other\">%d अध्यायों को छोड़ा जा रहा है, या तो स्रोत उन्हें याद कर रहा है या उन्हें फ़िल्टर कर दिया गया है</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">कल%1$d दिन पहले</item>\n        <item quantity=\"other\"></item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">अगला अपठित अध्याय</item>\n        <item quantity=\"other\">अगले %d अपठित अध्याय</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 दिन</item>\n        <item quantity=\"other\">%d दिन</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">अगला अध्याय</item>\n        <item quantity=\"other\">अगले %d अध्याय</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d भंडार</item>\n        <item quantity=\"other\">%d भंडारों</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 पृष्ठ</item>\n        <item quantity=\"other\">%1$s पृष्ठ</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">कल%1$d दिनों में</item>\n        <item quantity=\"other\"></item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s अध्याय गायब है</item>\n        <item quantity=\"other\">%1$s अध्याय गायब हैं</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/hi/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">नाम</string>\n    <string name=\"categories\">श्रेणियाँ</string>\n    <string name=\"manga\">लाइब्रेरी के आइटम</string>\n    <string name=\"chapters\">अध्याय</string>\n    <string name=\"track\">पदचिह्न</string>\n    <string name=\"history\">इतिहास</string>\n    <string name=\"label_settings\">सेटिंग्स</string>\n    <string name=\"label_download_queue\">डाउनलोड सूची</string>\n    <string name=\"label_library\">पुस्तकालय</string>\n    <string name=\"label_recent_manga\">इतिहास</string>\n    <string name=\"label_recent_updates\">नए अपडेट</string>\n    <string name=\"label_backup\">बैकअप और पुनर्स्थापना</string>\n    <string name=\"action_settings\">सेटिंग</string>\n    <string name=\"action_filter\">फिल्टर</string>\n    <string name=\"action_filter_bookmarked\">पृष्ठ स्मृति करा हुआ</string>\n    <string name=\"action_filter_unread\">अपठित</string>\n    <string name=\"action_filter_empty\">फिल्टर हटाए</string>\n    <string name=\"action_sort_alpha\">वर्णक्रमानुसार</string>\n    <string name=\"action_sort_total\">कुल अध्याय</string>\n    <string name=\"action_sort_last_read\">आखिर में पढ़ा हुआ</string>\n    <string name=\"action_search\">खोज</string>\n    <string name=\"action_global_search\">वैश्विक खोज</string>\n    <string name=\"action_select_all\">सभी का चयन करे</string>\n    <string name=\"action_mark_as_read\">पढ़ा हुआ चिह्न करे</string>\n    <string name=\"action_mark_as_unread\">अपठित चिह्न करे</string>\n    <string name=\"action_mark_previous_as_read\">पिछले को पढ़ा हुआ चिह्न करे</string>\n    <string name=\"action_download\">डाउनलोड</string>\n    <string name=\"action_bookmark\">बुकमार्क अध्याय</string>\n    <string name=\"action_remove_bookmark\">अध्याय बुकमार्क हटाये</string>\n    <string name=\"action_delete\">हटाये</string>\n    <string name=\"action_update_library\">पुस्तकालय अपडेट करें</string>\n    <string name=\"action_edit\">संपादित करें</string>\n    <string name=\"action_add\">जोड़े</string>\n    <string name=\"action_add_category\">श्रेणियाँ जोड़े</string>\n    <string name=\"action_edit_categories\">श्रेणियाँ संपादित करें</string>\n    <string name=\"action_rename_category\">श्रेणियाँ का पुन:नामकरण</string>\n    <string name=\"action_move_category\">श्रेणियां निर्धारित करें</string>\n    <string name=\"action_edit_cover\">कवर संपादित करें</string>\n    <string name=\"action_pause\">ठहराव</string>\n    <string name=\"action_previous_chapter\">पिछला अध्याय</string>\n    <string name=\"action_next_chapter\">अगला अध्याय</string>\n    <string name=\"action_retry\">फिर से कोशिश करे</string>\n    <string name=\"action_remove\">हटाए</string>\n    <string name=\"action_resume\">दुबारा आरम्भ करना</string>\n    <string name=\"action_open_in_browser\">ब्राउज़र में खोलें</string>\n    <string name=\"action_display_mode\">प्रदर्शन प्रणाली</string>\n    <string name=\"action_display\">प्रदर्शन</string>\n    <string name=\"action_display_grid\">कॉम्पैक्ट ग्रिड</string>\n    <string name=\"action_display_list\">सूची</string>\n    <string name=\"action_display_download_badge\">डाउनलोड किए गए अध्याय</string>\n    <string name=\"action_cancel\">रद्द करें</string>\n    <string name=\"action_sort\">श्रेणी के अनुसार रखना</string>\n    <string name=\"action_install\">स्थापित करें</string>\n    <string name=\"action_share\">बाटे</string>\n    <string name=\"action_save\">संरक्षित करे</string>\n    <string name=\"action_reset\">फिर से स्थापित करे</string>\n    <string name=\"action_undo\">पूर्ववत् करें</string>\n    <string name=\"action_open_log\">लॉग खोले</string>\n    <string name=\"action_restore\">पुनःस्थापन करे</string>\n    <string name=\"loading\">लोड हो रहा है…</string>\n    <string name=\"app_not_available\">ऐप उपलब्ध नहीं</string>\n    <string name=\"pref_category_general\">सामान्य</string>\n    <string name=\"pref_category_reader\">पाठमाला</string>\n    <string name=\"pref_category_downloads\">डाउनलोड</string>\n    <string name=\"pref_category_tracking\">पदचिह्न</string>\n    <string name=\"pref_category_advanced\">विकसित</string>\n    <string name=\"pref_category_about\">संबंध में</string>\n    <string name=\"pref_library_columns\">ग्रिड आकार</string>\n    <string name=\"portrait\">चित्र</string>\n    <string name=\"landscape\">लैंडस्केप</string>\n    <string name=\"pref_library_update_interval\">स्वचालित अद्यतन</string>\n    <string name=\"update_never\">ऑफ़</string>\n    <string name=\"update_6hour\">हर ६ घंटे</string>\n    <string name=\"update_12hour\">हर १२ घंटे</string>\n    <string name=\"update_24hour\">हर रोज़</string>\n    <string name=\"update_48hour\">हर २ दिन</string>\n    <string name=\"update_weekly\">साप्ताहिक</string>\n    <string name=\"all\">समस्त</string>\n    <string name=\"pref_library_update_restriction\">स्वचालित अपडेट डिवाइस प्रतिबंध</string>\n    <string name=\"charging\">चार्ज होते समय</string>\n    <string name=\"pref_update_only_non_completed\">पूरी की गई श्रृंखला</string>\n    <string name=\"pref_auto_update_manga_sync\">पढ़ने के बाद प्रगति अपडेट करें</string>\n    <string name=\"default_category\">डिफ़ॉल्ट श्रेणी</string>\n    <string name=\"default_category_summary\">हमेशा पूछे</string>\n    <string name=\"pref_fullscreen\">पूर्ण स्क्रीन</string>\n    <string name=\"pref_page_transitions\">चेतन पृष्ठ संक्रमण</string>\n    <string name=\"pref_show_page_number\">पृष्ठ संख्या दिखाएं</string>\n    <string name=\"pref_crop_borders\">किनारा कांटे</string>\n    <string name=\"pref_custom_brightness\">अपनी पसंदीदा ब्राइटनेस</string>\n    <string name=\"pref_custom_color_filter\">पसंदीदा कलर फिल्टर</string>\n    <string name=\"pref_keep_screen_on\">स्क्रीन को चालू रखें</string>\n    <string name=\"pref_reader_navigation\">पथ प्रदर्शन</string>\n    <string name=\"pref_read_with_volume_keys\">ध्वनि कुंजी</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">ध्वनि कुंजी पलटे</string>\n    <string name=\"pref_reader_theme\">पीछे का रंग</string>\n    <string name=\"white_background\">सफेद</string>\n    <string name=\"black_background\">काला</string>\n    <string name=\"pref_viewer_type\">डिफ़ॉल्ट रीडिंग मोड</string>\n    <string name=\"left_to_right_viewer\">बाएं से दाएं</string>\n    <string name=\"right_to_left_viewer\">दाएं से बाएं</string>\n    <string name=\"vertical_viewer\">सीधा</string>\n    <string name=\"webtoon_viewer\">लंबी पट्टी</string>\n    <string name=\"pref_image_scale_type\">मापन प्ररूप</string>\n    <string name=\"scale_type_fit_screen\">उपयुक्त स्क्रीन</string>\n    <string name=\"scale_type_stretch\">खींचें</string>\n    <string name=\"scale_type_fit_width\">चौड़ाई पर फ़िट</string>\n    <string name=\"scale_type_fit_height\">ऊंचाई पर फ़िट</string>\n    <string name=\"scale_type_original_size\">मूल आकार</string>\n    <string name=\"scale_type_smart_fit\">चतुर फ़िट</string>\n    <string name=\"pref_zoom_start\">ज़ूम शुरू की स्थिति</string>\n    <string name=\"zoom_start_automatic\">स्वचालित</string>\n    <string name=\"zoom_start_left\">बाएं</string>\n    <string name=\"zoom_start_right\">दाएँ</string>\n    <string name=\"zoom_start_center\">मध्यविंदु</string>\n    <string name=\"pref_rotation_type\">नियमित आवर्तन</string>\n    <string name=\"rotation_free\">मुक्त</string>\n    <string name=\"rotation_force_portrait\">सीधे बंद</string>\n    <string name=\"rotation_force_landscape\">मजबूर लैंडस्केप</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">\\'पढ़ें\\' के रूप में खुद से चिह्नित करने के बाद</string>\n    <string name=\"pref_remove_after_read\">पढ़ने के बाद स्वचालित रूप से हटाएं</string>\n    <string name=\"disabled\">बंद करें</string>\n    <string name=\"last_read_chapter\">अंतिम पढ़ा अध्याय</string>\n    <string name=\"second_to_last\">दूसरा से अंतिम पढ़ा गया अध्याय</string>\n    <string name=\"third_to_last\">तीसरा से अंतिम पढ़ा गया अध्याय</string>\n    <string name=\"fourth_to_last\">चौथे से अंतिम पढ़ा गया अध्याय</string>\n    <string name=\"fifth_to_last\">पाचवे से अंतिम पढ़ा गया अध्याय</string>\n    <string name=\"pref_download_new\">नए अध्याय डाउनलोड करें</string>\n    <string name=\"services\">सेवाएं</string>\n    <string name=\"pref_create_backup\">बैकअप बनाये</string>\n    <string name=\"pref_create_backup_summ\">वर्तमान पुस्तकालय को पुनर्स्थापित करने के लिए उपयोग किया जा सकता है</string>\n    <string name=\"pref_restore_backup\">बैकअप पुनर्स्थापित करे</string>\n    <string name=\"pref_restore_backup_summ\">बैकअप फ़ाइल से लाइब्रेरी पुनर्स्थापित करें</string>\n    <string name=\"pref_backup_interval\">बैकअप फ़्रीक्वेंसी</string>\n    <string name=\"backup_created\">बैकअप बनाया गया है</string>\n    <string name=\"restore_completed\">पुनर्स्थापना पूर्ण हुआ</string>\n    <string name=\"backup_choice\">आप बैकअप के लिए क्या चाहते हैं?</string>\n    <string name=\"restoring_backup\">बैकअप को पुनर्स्थापित करना</string>\n    <string name=\"creating_backup\">बैकअप बनाना</string>\n    <string name=\"pref_clear_chapter_cache\">अध्याय कैश साफ़ करें</string>\n    <string name=\"used_cache\">उपयोग किया गया: %1$s</string>\n    <string name=\"cache_deleted\">कैश साफ़ किया गया %1$d फ़ाइलों को हटा दिया गया है</string>\n    <string name=\"cache_delete_error\">साफ़ करने के दौरान त्रुटि हुई</string>\n    <string name=\"pref_clear_cookies\">कुकीज़ को साफ़ करें</string>\n    <string name=\"cookies_cleared\">कुकीज़ को साफ़ किया हुआ</string>\n    <string name=\"pref_clear_database\">डेटाबेस साफ़ करें</string>\n    <string name=\"pref_clear_database_summary\">उन आइटम का इतिहास हटाएं जो आपकी पुस्तकालय में सहेजी नहीं गई हैं</string>\n    <string name=\"clear_database_confirmation\">क्या आपको यकीन है? आपके द्वारा पढ़े गए अध्याय और गैर-पुस्तकालय आइटम की प्रगति खो जाएगी</string>\n    <string name=\"clear_database_completed\">प्रविष्टियां हटाई गईं</string>\n    <string name=\"version\">संस्करण</string>\n    <string name=\"pref_enable_acra\">क्रैश रिपोर्ट भेजें</string>\n    <string name=\"pref_acra_summary\">किसी भी बग को ठीक करने में मदद करता है कोई संवेदनशील डेटा नहीं भेजा जाएगा</string>\n    <string name=\"login_title\">%1$s के लिए लॉगिन</string>\n    <string name=\"username\">उपयोगकर्ता नाम</string>\n    <string name=\"password\">पासवर्ड</string>\n    <string name=\"login\">लॉग इन करें</string>\n    <string name=\"login_success\">लॉग इन किया गया</string>\n    <string name=\"unknown_error\">अज्ञात त्रुटि</string>\n    <string name=\"updating_category\">श्रेणी अपडेट कर रहा है</string>\n    <string name=\"no_more_results\">कोई और परिणाम नहीं है</string>\n    <string name=\"local_source\">स्थानीय स्रोत</string>\n    <string name=\"other_source\">अन्य</string>\n    <string name=\"action_global_search_hint\">वैश्विक खोज …</string>\n    <string name=\"latest\">नवीनतम</string>\n    <string name=\"browse\">ब्राउज</string>\n    <string name=\"ongoing\">चल रही है</string>\n    <string name=\"unknown\">अज्ञात</string>\n    <string name=\"licensed\">लाइसेंस प्राप्त</string>\n    <string name=\"remove_from_library\">लाइब्रेरी से निकालें</string>\n    <string name=\"delete_downloads_for_manga\">डाउनलोड किए गए अध्याय हटाएं?</string>\n    <string name=\"display_mode_chapter\">अध्याय %1$s</string>\n    <string name=\"chapter_downloading_progress\">डाउनलोड किया जा रहा है (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">त्रुटि</string>\n    <string name=\"chapter_paused\">रोके गए</string>\n    <string name=\"show_title\">स्रोत शीर्षक</string>\n    <string name=\"show_chapter_number\">अध्याय संख्या</string>\n    <string name=\"sort_by_source\">स्रोत से</string>\n    <string name=\"sort_by_number\">अध्याय संख्या से</string>\n    <string name=\"manga_download\">डाउनलोड</string>\n    <string name=\"download_unread\">अपठित</string>\n    <string name=\"confirm_delete_chapters\">क्या आप वाकई चयनित अध्यायों को हटाना चाहते हैं?</string>\n    <string name=\"manga_tracking_tab\">पदचिह्न</string>\n    <string name=\"reading\">पठन</string>\n    <string name=\"completed\">समाप्त</string>\n    <string name=\"dropped\">छोड़ दिया</string>\n    <string name=\"on_hold\">होल्ड पर</string>\n    <string name=\"plan_to_read\">पढ़ने की योजना</string>\n    <string name=\"score\">स्कोर</string>\n    <string name=\"title\">शीर्षक</string>\n    <string name=\"status\">स्थिति</string>\n    <string name=\"error_category_exists\">इस नाम के साथ एक श्रेणी पहले से मौजूद है!</string>\n    <string name=\"snack_categories_deleted\">श्रेणियाँ हटाई गयी</string>\n    <string name=\"dialog_with_checkbox_remove_description\">यह इस अध्याय की पठन तिथि को निकाल देगा क्या आप निश्चित है?</string>\n    <string name=\"dialog_with_checkbox_reset\">इस आइटम के लिए सभी अध्यायों को रीसेट करें</string>\n    <string name=\"snack_add_to_library\">पुस्तकालय में जोड़ें?</string>\n    <string name=\"picture_saved\">चित्र सहेजा गया</string>\n    <string name=\"custom_filter\">इच्छा अनुसार फिल्टर</string>\n    <string name=\"set_as_cover\">कवर के रूप में सेट करें</string>\n    <string name=\"cover_updated\">कवर अपडेट किया गया</string>\n    <string name=\"chapter_progress\">पृष्ठ: %1$d</string>\n    <string name=\"no_next_chapter\">अगले अध्याय नहीं मिला</string>\n    <string name=\"decode_image_error\">छवि को लोड नहीं किया जा सका</string>\n    <string name=\"confirm_set_image_as_cover\">कवर कला के रूप में इस छवि का उपयोग करें?</string>\n    <string name=\"download_queue_error\">अध्याय डाउनलोड नहीं कर सका। आप डाउनलोड अनुभाग में फिर से कोशिश कर सकते हैं</string>\n    <string name=\"notification_new_chapters\">नए अध्याय पाए गए</string>\n    <string name=\"notification_cover_update_failed\">कवर को अपडेट करने में विफल</string>\n    <string name=\"notification_first_add_to_library\">ऐसा करने से पहले कृपया अपनी पुस्तकालय में आइटम जोड़ें</string>\n    <string name=\"file_select_cover\">कवर छवि का चयन करें</string>\n    <string name=\"file_select_backup\">बैकअप फ़ाइल का चयन करें</string>\n    <string name=\"update_check_confirm\">डाउनलोड</string>\n    <string name=\"update_check_no_new_updates\">कोई नया अद्यतन उपलब्ध नहीं है</string>\n    <string name=\"update_check_notification_download_in_progress\">डाउनलोडिंग…</string>\n    <string name=\"update_check_notification_download_complete\">अपडेट इंस्टॉल करने के लिए यहा टेप करें</string>\n    <string name=\"update_check_notification_download_error\">डाउनलोड त्रुटि</string>\n    <string name=\"update_check_notification_update_available\">नया संस्करण उपलब्ध है!</string>\n    <string name=\"information_no_downloads\">कोई डाउनलोड नहीं है</string>\n    <string name=\"information_no_recent\">कोई हालिया अपडेट नहीं</string>\n    <string name=\"information_no_recent_manga\">हाल ही में कुछ भी नहीं पढ़ा</string>\n    <string name=\"information_empty_library\">आपका पुस्तकालय खाली है़ें। स्रोतों से अपने पुस्तकालय में श्रृंखला जोड़ें</string>\n    <string name=\"information_empty_category\">आपके पास कोई श्रेणियां नहीं हैं। अपने पुस्तकालय के आयोजन के लिए एक बनाने के लिए प्लस बटन को दबाएं।</string>\n    <string name=\"download_notifier_downloader_title\">डाउनलोडर</string>\n    <string name=\"download_notifier_title_error\">त्रुटि</string>\n    <string name=\"download_notifier_unknown_error\">अनपेक्षित त्रुटि के कारण अध्याय डाउनलोड नहीं किया जा सका</string>\n    <string name=\"download_notifier_text_only_wifi\">कोई वाई-फ़ाई कनेक्शन उपलब्ध नहीं है</string>\n    <string name=\"download_notifier_no_network\">कोई नेटवर्क कनेक्शन उपलब्ध नहीं है</string>\n    <string name=\"download_notifier_download_paused\">डाउनलोड रोक दिया है</string>\n    <string name=\"channel_common\">सामान्य</string>\n    <string name=\"label_migration\">प्रवास</string>\n    <string name=\"label_extensions\">विस्तार</string>\n    <string name=\"label_extension_info\">विस्तार की जानकारी</string>\n    <string name=\"ext_update\">अद्यतन</string>\n    <string name=\"ext_install\">स्थापित करें</string>\n    <string name=\"ext_pending\">अपूर्ण</string>\n    <string name=\"ext_downloading\">डाउनलोड कर रहा है</string>\n    <string name=\"ext_installing\">स्थापना</string>\n    <string name=\"ext_installed\">स्थापित</string>\n    <string name=\"ext_trust\">भरोसा</string>\n    <string name=\"ext_untrusted\">अविश्वस्त</string>\n    <string name=\"ext_uninstall\">स्थापना रद्द करें</string>\n    <string name=\"untrusted_extension\">अविश्वस्त एक्सटेंशन</string>\n    <string name=\"untrusted_extension_message\">यह एक्सटेंशन एक अविश्वस्त प्रमाणपत्र के साथ हस्ताक्षरित हुआ था और सक्रिय नहीं हुआ था।\n\\n\n\\nदुर्भावनापूर्ण विस्तार, किसी भी लॉगिन क्रेडेंशियल्स को ताचियोमी में संग्रहीत या मनमाना कोड निष्पादित कर सकता है\n\\n\n\\nइस प्रमाणपत्र पर विश्वास करके आप इन जोखिमों को स्वीकार करते हैं।</string>\n    <string name=\"pref_double_tap_anim_speed\">डबल टैप एनीमेशन गति</string>\n    <string name=\"double_tap_anim_speed_0\">कोई एनीमेशन नहीं</string>\n    <string name=\"double_tap_anim_speed_normal\">साधारण</string>\n    <string name=\"double_tap_anim_speed_fast\">तेज</string>\n    <string name=\"manga_added_library\">पुस्तकालय में जोड़ा गया</string>\n    <string name=\"manga_removed_library\">लाइब्रेरी से निकाला गया</string>\n    <string name=\"copied_to_clipboard\">क्लिपबोर्ड पर नकल:\n\\n%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">शामिल करने के लिए डेटा का चयन करें</string>\n    <string name=\"migrate\">प्रवास</string>\n    <string name=\"copy\">नकल</string>\n    <string name=\"pager_viewer\">पृष्ठांकित</string>\n    <string name=\"source_not_installed\">स्रोत स्थापित नहीं है : %1$s</string>\n    <string name=\"repeating\">फिर से पढाना</string>\n    <string name=\"track_status\">स्थिति</string>\n    <string name=\"track_type\">प्रकार</string>\n    <string name=\"transition_finished\">समाप्त:</string>\n    <string name=\"transition_current\">प्रचलित:</string>\n    <string name=\"transition_next\">अगला:</string>\n    <string name=\"transition_previous\">पिछला:</string>\n    <string name=\"transition_no_next\">कोई अगला अध्याय नहीं है</string>\n    <string name=\"transition_no_previous\">कोई पिछला अध्याय नहीं है</string>\n    <string name=\"transition_pages_loading\">पेज लोड हो रहे है …</string>\n    <string name=\"transition_pages_error\">पृष्ठों को लोड करने में विफल है: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">लंबे टैप पर क्रियाएँ दिखाएँ</string>\n    <string name=\"action_open_in_web_view\">WebView में खोलें</string>\n    <string name=\"pref_skip_read_chapters\">पढ़े हुए अध्यायों को छोड़ें</string>\n    <string name=\"pref_color_filter_mode\">रंग फिल्टर मिश्रण मोड</string>\n    <string name=\"filter_mode_overlay\">ओवरले</string>\n    <string name=\"filter_mode_multiply\">गुणा</string>\n    <string name=\"filter_mode_screen\">स्क्रीन</string>\n    <string name=\"filter_mode_lighten\">चकमा/हल्का</string>\n    <string name=\"filter_mode_darken\">जल/गहरा</string>\n    <string name=\"label_help\">मदद</string>\n    <string name=\"no_results_found\">कोई परिणाम नहीं मिला</string>\n    <string name=\"migration_selection_prompt\">से माइग्रेट करने के लिए एक स्रोत का चयन करें</string>\n    <string name=\"action_webview_back\">पिछली तरफ</string>\n    <string name=\"action_webview_forward\">आगे की ओर</string>\n    <string name=\"action_webview_refresh\">रीफ़्रेश करें</string>\n    <string name=\"pref_category_library\">पुस्तकालय</string>\n    <string name=\"ext_obsolete\">अप्रचलित</string>\n    <string name=\"obsolete_extension_message\">यह एक्सटेंशन अब उपलब्ध नहीं है। यह अब शायद ठीक से काम न करे और मसला खड़ा करे। इसे अनइंस्टॉल करने की सलाह दी गई है।</string>\n    <string name=\"pref_date_format\">दिनांक स्वरूप</string>\n    <string name=\"pref_category_library_update\">वैश्विक अपडेट</string>\n    <string name=\"logout_title\">%1$s से लॉगआउट करें?</string>\n    <string name=\"logout\">लॉग आउट</string>\n    <string name=\"logout_success\">अब आप लॉग आउट है</string>\n    <string name=\"paused\">रोका हुआ</string>\n    <string name=\"label_more\">अन्य</string>\n    <string name=\"action_sort_latest_chapter\">नवीनतम अध्याय</string>\n    <string name=\"action_view_chapters\">अध्याय देखें</string>\n    <string name=\"action_cancel_all\">सब रद्द करो</string>\n    <string name=\"theme_light\">बंद</string>\n    <string name=\"theme_dark\">चालू करे</string>\n    <string name=\"theme_system\">सिस्टम का पालन करें</string>\n    <string name=\"pref_manage_notifications\">सूचनाओं का प्रबंधन</string>\n    <string name=\"pref_category_security\">सुरक्षा और गोपनीयता</string>\n    <string name=\"lock_with_biometrics\">खोलने की आवश्यकता है</string>\n    <string name=\"lock_when_idle\">निष्क्रिय होने पर लॉक करें</string>\n    <string name=\"lock_always\">हमेशा</string>\n    <string name=\"lock_never\">कभी नहीँ</string>\n    <string name=\"secure_screen\">स्क्रीन सुरक्षित करें</string>\n    <string name=\"ext_updates_pending\">अपडेट लंबित हैं</string>\n    <string name=\"pref_cutout_short\">कटआउट क्षेत्र में सामग्री दिखाएं</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare को बायपास करने में विफल</string>\n    <string name=\"information_webview_outdated\">बेहतर संगतता के लिए कृपया WebView ऐप को अपडेट करें</string>\n    <string name=\"channel_new_chapters\">अध्याय अद्यतन</string>\n    <string name=\"secure_screen_summary\">सुरक्षित स्क्रीन एप्लिकेशन स्विच करते समय एप्लिकेशन सामग्री छिपाता हैं और स्क्रीनशॉट ब्लॉक करता हैं</string>\n    <string name=\"pref_category_display\">प्रदर्शन</string>\n    <string name=\"notification_chapters_single\">अध्याय %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">अध्याय %1$s और %2$d अधिक</string>\n    <string name=\"notification_chapters_multiple\">अध्याय %1$s</string>\n    <string name=\"hide_notification_content\">अधिसूचना सामग्री छुपाएं</string>\n    <string name=\"pref_disable_battery_optimization\">बैटरी अनुकूलन को अक्षम करना</string>\n    <string name=\"pref_disable_battery_optimization_summary\">पृष्ठभूमि पुस्तकालय अपडेट और बैकअप के साथ मदद करता है</string>\n    <string name=\"battery_optimization_disabled\">बैटरी अनुकूलन पहले से ही अक्षम है</string>\n    <string name=\"email\">ईमेल पता</string>\n    <string name=\"pref_always_show_chapter_transition\">हमेशा अध्याय संक्रमण दिखाएं</string>\n    <string name=\"action_menu\">मेन्यू</string>\n    <string name=\"action_newest\">नवीनतम</string>\n    <string name=\"action_oldest\">सबसे पुराना</string>\n    <string name=\"action_move_to_top\">शीर्ष पर ले जाएँ</string>\n    <string name=\"action_move_to_bottom\">नीचे की ओर ले जाएं</string>\n    <string name=\"channel_ext_updates\">एक्सटेंशन अपडेट</string>\n    <string name=\"updating_library\">अद्यतन पुस्तकालय</string>\n    <string name=\"pref_category_reading\">पठन</string>\n    <string name=\"pref_skip_filtered_chapters\">फ़िल्टर किए गए अध्यायों को छोड़ें</string>\n    <string name=\"label_sources\">स्रोत</string>\n    <string name=\"pinned_sources\">पिन की गई</string>\n    <string name=\"pref_webtoon_side_padding\">साइड पैडिंग</string>\n    <string name=\"vertical_plus_viewer\">गैप के साथ लंबी पट्टी</string>\n    <string name=\"action_unpin\">अनपिन</string>\n    <string name=\"action_pin\">पिन</string>\n    <string name=\"action_select_inverse\">विलोम का चयन करें</string>\n    <string name=\"add_tracking\">ट्रैकिंग जोड़ें</string>\n    <string name=\"in_library\">पुस्तकालय में</string>\n    <string name=\"add_to_library\">पुस्तकालय में जोड़ें</string>\n    <string name=\"manga_info_collapse\">कम</string>\n    <string name=\"manga_info_expand\">अधिक</string>\n    <string name=\"information_webview_required\">ताचियोमी के लिए WebView आवश्यक है</string>\n    <string name=\"licenses\">ओपन सोर्स लाइसेंस</string>\n    <string name=\"website\">वेबसाइट</string>\n    <string name=\"label_downloaded_only\">केवल डाउनलोड किए गए</string>\n    <string name=\"recent_manga_time\">अध्याय %1$s – %2$s</string>\n    <string name=\"restoring_backup_error\">बैकअप बहाल करने में विफल रहा</string>\n    <string name=\"creating_backup_error\">बैकअप फेल</string>\n    <string name=\"restoring_backup_canceled\">पुनर्स्थापना रद्द की गई</string>\n    <string name=\"restore_in_progress\">पुनर्स्थापना पहले से ही प्रगति पर है</string>\n    <string name=\"backup_in_progress\">बैकअप पहले से ही प्रगति में है</string>\n    <string name=\"last_used_source\">आखरी इस्त्तमाल किया गया</string>\n    <string name=\"check_for_updates\">अद्यतन के लिए जाँच</string>\n    <string name=\"local_source_help_guide\">स्थानीय स्रोत गाइड</string>\n    <string name=\"restore_duration\">%02d मिनट,%02d सेकंड</string>\n    <string name=\"downloaded_only_summary\">आपकी पुस्तकालय में सभी आइटम को फ़िल्टर करता है</string>\n    <string name=\"viewer\">पढ़न मोड</string>\n    <string name=\"pref_category_for_this_series\">इस श्रृंखला के लिए</string>\n    <string name=\"gray_background\">ग्रे</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">डिवाइस सेटिंग नहीं खोल सका</string>\n    <string name=\"tracking_info\">ट्रैकिंग सेवाओं में अध्याय की प्रगति को अद्यतन करने के लिए एकतरफा सिंक। अपने ट्रैकिंग बटन से व्यक्तिगत प्रविष्टियों के लिए ट्रैकिंग सेट अप करें।</string>\n    <string name=\"pref_refresh_library_covers\">रिफ्रेश पुस्तकालय मंगा कवर</string>\n    <string name=\"sort_by_upload_date\">अपलोड तिथि द्वारा</string>\n    <string name=\"label_data\">डेटा</string>\n    <string name=\"backup_restore_missing_sources\">अनुपलब्ध स्रोत:</string>\n    <string name=\"invalid_backup_file_missing_manga\">बैकअप में कोई पुस्तकालय आइटम नहीं हैं।</string>\n    <string name=\"invalid_backup_file\">अमान्य बैकअप फ़ाइल</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">लाइब्रेरी को अपडेट करते समय नए कवर और विवरण की जांच करें</string>\n    <string name=\"pref_library_update_refresh_metadata\">मेटाडेटा को स्वचालित रूप से ताज़ा करें</string>\n    <string name=\"action_migrate\">प्रवास</string>\n    <string name=\"tabs_header\">टैब</string>\n    <string name=\"action_display_show_tabs\">श्रेणी टैब दिखाएं</string>\n    <string name=\"action_display_comfortable_grid\">आरामदायक ग्रिड</string>\n    <string name=\"page_list_empty_error\">कोई पृष्ठ नहीं मिला</string>\n    <string name=\"action_disable_all\">सभी को अक्षम करें</string>\n    <string name=\"action_enable_all\">सभी को सक्षम करें</string>\n    <string name=\"pref_show_reading_mode_summary\">पाठक के खुलने पर संक्षेप में वर्तमान मोड दिखाएं</string>\n    <string name=\"pref_show_reading_mode\">रीडिंग मोड दिखाएं</string>\n    <string name=\"loader_not_implemented_error\">स्रोत नहीं मिला</string>\n    <string name=\"action_disable\">बंद करें</string>\n    <string name=\"action_start\">प्रारंभ</string>\n    <string name=\"label_network\">नेटवर्क</string>\n    <string name=\"tapping_inverted_both\">दोनों</string>\n    <string name=\"tapping_inverted_vertical\">शीर्ष से असंतत</string>\n    <string name=\"tapping_inverted_horizontal\">क्षैतिज</string>\n    <string name=\"tapping_inverted_none\">कोई नहीं</string>\n    <string name=\"pref_read_with_tapping_inverted\">टैप ज़ोन उलटें</string>\n    <string name=\"unknown_status\">अज्ञात स्थिति</string>\n    <string name=\"unknown_author\">अज्ञात लेखक</string>\n    <string name=\"requires_app_restart\">प्रभावी होने के लिए एप्लिकेशन पुनरारंभ की आवश्यकता होती है</string>\n    <string name=\"whats_new\">नया क्या है</string>\n    <string name=\"download_insufficient_space\">कम संग्रहण स्थान के कारण अध्याय डाउनलोड नहीं कर सके</string>\n    <string name=\"action_global_search_query\">विश्व स्तर पर \\\"%1$s\\\" के लिए खोजें</string>\n    <string name=\"updated_version\">v%1$s तक अद्यतन</string>\n    <string name=\"pref_category_reading_mode\">पढ़न मोड</string>\n    <string name=\"pref_category_theme\">थीम</string>\n    <string name=\"action_sort_date_added\">तारीख को जोड़ा गया</string>\n    <string name=\"no_pinned_sources\">कोई पिन किया हुआ सोर्स नही है</string>\n    <string name=\"channel_complete\">पूर्ण</string>\n    <string name=\"channel_progress\">प्रगती</string>\n    <string name=\"channel_errors\">त्रुटियाँ</string>\n    <string name=\"backup_restore_missing_trackers\">ट्रैकर्स में लॉग इन नहीं किया गया:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">बुकमार्क किए गए अध्यायों को हटाने की अनुमति दें</string>\n    <string name=\"pref_category_delete_chapters\">अध्यायों को हटाएं</string>\n    <string name=\"ext_nsfw_warning\">इसमें NSFW (18+) सामग्री हो सकती है</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">यह अनौपचारिक या संभावित रूप से फ़्लैग किए गए एक्सटेंशन को ऐप के भीतर NSFW (18+) सामग्री के सामने आने से नहीं रोकता है।</string>\n    <string name=\"chapter_settings_updated\">अपडेट किए गए डिफ़ॉल्ट अध्याय सेटिंग्स</string>\n    <string name=\"no_chapters_error\">कोई अध्याय नहीं मिला</string>\n    <string name=\"set_chapter_settings_as_default\">डिफ़ॉल्ट के रूप में सेट करें</string>\n    <string name=\"also_set_chapter_settings_for_library\">मेरी पुस्तकालय में सभी एन्ट्री पर भी लागू करें</string>\n    <string name=\"confirm_set_chapter_settings\">क्या आप वाकई इन सेटिंग्स को डिफ़ॉल्ट के रूप में सहेजना चाहते हैं?</string>\n    <string name=\"chapter_settings\">अध्याय सेटिंग्स</string>\n    <string name=\"share_page_info\">%1$s: %2$s, पृष्ठ %3$d</string>\n    <string name=\"downloaded_chapters\">डाउनलोड किए गए अध्याय</string>\n    <string name=\"manga_from_library\">पुस्तकालय से</string>\n    <string name=\"action_search_settings\">खोज सेंटिंग</string>\n    <string name=\"pref_incognito_mode_summary\">इतिहास पढ़ने से रोक देता है</string>\n    <string name=\"pref_incognito_mode\">इंकॉग्निटो मोड</string>\n    <string name=\"pref_clear_history\">इतिहास मिटा दें</string>\n    <string name=\"clear_history_confirmation\">क्या आपको यकीन है? सारा इतिहास खो जाएगा।</string>\n    <string name=\"clear_history_completed\">इतिहास हटाया गया</string>\n    <string name=\"spen_next_page\">अगला पृष्ठ</string>\n    <string name=\"spen_previous_page\">पिछला पृष्ठ</string>\n    <string name=\"migration_help_guide\">स्रोत माइग्रेशन गाइड</string>\n    <string name=\"pref_show_nsfw_source\">स्रोतों और एक्सटेंशन सूचियों में दिखाएं</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) स्रोत</string>\n    <string name=\"file_picker_error\">कोई फ़ाइल पिकर ऐप नहीं मिला</string>\n    <string name=\"myanimelist_relogin\">कृपया फिर से MAL पर लॉगिन करें</string>\n    <string name=\"track_finished_reading_date\">समाप्ति की तिथि</string>\n    <string name=\"track_started_reading_date\">आरंभ करने की तिथि</string>\n    <string name=\"pref_dump_crash_logs_summary\">डेवलपर्स के साथ साझा करने के लिए फ़ाइल में त्रुटि लॉग सहेजता है</string>\n    <string name=\"pref_dump_crash_logs\">क्रैश लॉग शेयर करें</string>\n    <string name=\"pref_viewer_nav\">टैप ज़ोन</string>\n    <string name=\"right_and_left_nav\">दाएं और बाएं</string>\n    <string name=\"edge_nav\">धार</string>\n    <string name=\"kindlish_nav\">किंडल-जैसे</string>\n    <string name=\"l_nav\">एल आकार</string>\n    <string name=\"action_desc\">अवरोही</string>\n    <string name=\"action_asc\">आरोही</string>\n    <string name=\"action_order_by_chapter_number\">अध्याय संख्या से</string>\n    <string name=\"action_order_by_upload_date\">अपलोड तिथि से</string>\n    <string name=\"action_display_show_number_of_items\">वस्तुओं की संख्या दिखाएं</string>\n    <string name=\"action_filter_tracked\">ट्रैक किए गए</string>\n    <string name=\"backup_restore_content_full\">बैकअप फ़ाइल से डेटा बहाल किया जाएगा।\n\\n\n\\nआपको किसी भी लापता एक्सटेंशन को इंस्टॉल करना होगा और बाद में सेवाओं को ट्रैक करने के लिए लॉग इन करना होगा ताकि उनका उपयोग किया जा सके।</string>\n    <string name=\"pref_dual_page_invert_summary\">यदि स्प्लिट वाइड पेजों का प्लेसमेंट पढ़ने की दिशा से मेल नहीं खाता है</string>\n    <string name=\"pref_dual_page_invert\">स्प्लिट पेज प्लेसमेंट को उल्टा करें</string>\n    <string name=\"pref_dual_page_split\">चौड़े पृष्ठ को दो भागों में बांट दे</string>\n    <string name=\"action_start_downloading_now\">अभी डाउनलोड करना शुरू करें</string>\n    <string name=\"action_show_errors\">विवरण देखने के लिए टैप करें</string>\n    <string name=\"cancel_all_for_series\">इस श्रृंखला के लिए सभी रद्द करें</string>\n    <string name=\"action_display_local_badge\">स्थानीय स्रोत</string>\n    <string name=\"pref_dark_theme_pure_black\">पूरा काला मोड़</string>\n    <string name=\"theme_tako\">टाको</string>\n    <string name=\"theme_strawberrydaiquiri\">स्ट्रॉबेरी</string>\n    <string name=\"theme_greenapple\">हरा सेब</string>\n    <string name=\"theme_monet\">डायनेमिक</string>\n    <string name=\"pref_app_theme\">एप थीम</string>\n    <string name=\"pref_category_auto_download\">ऑटोमैटिक डाउनलोड</string>\n    <string name=\"theme_yotsuba\">योटसूबा</string>\n    <string name=\"theme_yinyang\">यीन और यैंन्ग</string>\n    <string name=\"theme_tealturquoise\">टील</string>\n    <string name=\"pref_category_appearance\">रूप</string>\n    <string name=\"none\">कोई नहीं</string>\n    <string name=\"exclude\">बहिष्कृत करें: %s</string>\n    <string name=\"off\">बंद</string>\n    <string name=\"on\">चालू</string>\n    <string name=\"pref_high\">उच्च</string>\n    <string name=\"pref_tablet_ui_mode\">टैबलेट यूआई</string>\n    <string name=\"pref_show_navigation_mode\">टैप ज़ोन ओवरले दिखाएं</string>\n    <string name=\"pref_reader_actions\">कार्रवाई</string>\n    <string name=\"label_default\">डिफॉल्ट</string>\n    <string name=\"source_unsupported\">स्रोत समर्थित नहीं है</string>\n    <string name=\"pref_remove_exclude_categories\">बहिष्कृत श्रेणियां</string>\n    <string name=\"action_track\">ट्रैक</string>\n    <string name=\"ext_install_service_notif\">एक्सटेंशन इंस्टॉल किया जा रहा है…</string>\n    <string name=\"ext_installer_pref\">इंस्टालर</string>\n    <string name=\"ext_installer_legacy\">विरासत</string>\n    <string name=\"pref_hide_threshold\">स्क्रॉल पर मेनू छिपाने की संवेदनशीलता</string>\n    <string name=\"pref_highest\">उच्चतम</string>\n    <string name=\"pref_low\">कम</string>\n    <string name=\"pref_lowest\">निम्नतम</string>\n    <string name=\"restrictions\">प्रतिबंध: %s</string>\n    <string name=\"automatic_background\">ऑटो</string>\n    <string name=\"nav_zone_prev\">पिछला</string>\n    <string name=\"nav_zone_next\">अगला</string>\n    <string name=\"nav_zone_left\">बाएं</string>\n    <string name=\"nav_zone_right\">दाईं</string>\n    <string name=\"rotation_type\">रोटेशन प्रकार</string>\n    <string name=\"rotation_portrait\">सीधा</string>\n    <string name=\"rotation_landscape\">परिदृश्य</string>\n    <string name=\"action_sort_count\">कुल आइटम</string>\n    <string name=\"theme_midnightdusk\">मिडनाइट डस्क</string>\n    <string name=\"relative_time_today\">आज</string>\n    <string name=\"include\">शामिल करें: %s</string>\n    <string name=\"ext_app_info\">ऐप की जानकारी</string>\n    <string name=\"ext_installer_shizuku_stopped\">शिज़ुकु नहीं चल रहा है</string>\n    <string name=\"pref_inverted_colors\">उल्टी</string>\n    <string name=\"pref_grayscale\">काला और सफेद</string>\n    <string name=\"pref_create_folder_per_manga_summary\">आइटम के शीर्षक अनुसार फोल्डर बनाता है</string>\n    <string name=\"tracking_guide\">ट्रैकिंग गाइड</string>\n    <string name=\"enhanced_services\">उन्नत सेवाएं</string>\n    <string name=\"restore_miui_warning\">MIUI ऑप्टिमाइज़ेशन अक्षम होने पर बैकअप/पुनर्स्थापना ठीक से काम नहीं कर सकता है।</string>\n    <string name=\"label_background_activity\">पृष्ठभूमि गतिविधि</string>\n    <string name=\"about_dont_kill_my_app\">कुछ निर्माताओं के पास अतिरिक्त ऐप प्रतिबंध हैं जो पृष्ठभूमि सेवाओं को मारते हैं। इस वेबसाइट में इसे ठीक करने के बारे में अधिक जानकारी है।</string>\n    <string name=\"local_invalid_format\">अमान्य अध्याय प्रारूप</string>\n    <string name=\"local_filter_order_by\">के अनुसार ऑर्डर करें</string>\n    <string name=\"clipboard_copy_error\">क्लिपबोर्ड पर कॉपी करने में विफल</string>\n    <string name=\"error_saving_cover\">कवर पेज सहेजने में त्रुटि</string>\n    <string name=\"unread\">अपठित</string>\n    <string name=\"error_no_match\">कोई मेल नहीं मिला</string>\n    <string name=\"information_empty_category_dialog\">आपके पास अभी तक कोई श्रेणी नहीं है।</string>\n    <string name=\"confirm_lock_change\">परिवर्तन की पुष्टि करने के लिए प्रमाणित करें</string>\n    <string name=\"action_sort_chapter_fetch_date\">अध्याय लाई की तिथि</string>\n    <string name=\"pref_library_update_categories_details\">बहिष्कृत श्रेणियों की पुस्तकें अपडेट नहीं की जाएंगी, भले ही वे भी शामिल श्रेणियों में हों।</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">शिज़ुकु को एक्सटेंशन इंस्टॉलर के रूप में उपयोग करने के लिए शिज़ुकु को इंस्टॉल और प्रारंभ करें।</string>\n    <string name=\"help_translate\">अनुवाद में मदद करें</string>\n    <string name=\"date\">दिनांक</string>\n    <string name=\"manga_cover\">कवर पृष्ठ</string>\n    <string name=\"pref_create_folder_per_manga\">पृष्ठों को अलग-अलग फ़ोल्डरों में सहेजें</string>\n    <string name=\"pref_download_new_categories_details\">बहिष्कृत श्रेणियों की आइटम डाउनलोड नहीं की जाएंगी, भले ही वे शामिल श्रेणियों में भी हों।</string>\n    <string name=\"pref_verbose_logging_summary\">सिस्टम लॉग में वर्बोज़ लॉग प्रिंट करें (ऐप प्रदर्शन को कम करता है)</string>\n    <string name=\"enhanced_tracking_info\">ऐसी सेवाएँ जो विशिष्ट स्रोतों के लिए उन्नत सुविधाएँ प्रदान करती हैं। आपकी पुस्तकालय में जोड़े जाने पर आइटम को स्वचालित रूप से ट्रैक किया जाता है।</string>\n    <string name=\"pref_dns_over_https\">HTTPS उपर DNS (DoH)</string>\n    <string name=\"pref_verbose_logging\">वर्बोज़ लॉगिंग</string>\n    <string name=\"notification_incognito_text\">गुप्त मोड अक्षम करें</string>\n    <string name=\"chapter_not_found\">अध्याय नहीं मिला</string>\n    <string name=\"cover_saved\">कवर पेज सहेजा गया</string>\n    <string name=\"error_sharing_cover\">कवर पेज साझा करने में त्रुटि</string>\n    <string name=\"update_check_eol\">यह एंड्राइड संस्करण अब समर्थित नहीं है</string>\n    <string name=\"getting_started_guide\">प्रारंभिक मार्गदर्शन</string>\n    <string name=\"pref_show_navigation_mode_summary\">रीडर खोले जाने पर थोड़ी देर दिखाएं</string>\n    <string name=\"categorized_display_settings\">सॉर्ट और डिस्प्ले के लिए प्रति-श्रेणी सेटिंग्स</string>\n    <string name=\"ext_update_all\">सभी अद्यतन करें</string>\n    <string name=\"label_warning\">चेतावनी</string>\n    <string name=\"action_display_language_badge\">भाषा</string>\n    <string name=\"backup_info\">आपको अन्य स्थानों पर भी बैकअप की प्रतियाँ रखनी चाहिए।</string>\n    <string name=\"download_queue_size_warning\">चेतावनी: बड़े बल्क डाउनलोड के कारण स्रोत धीमे हो सकते हैं। और/या ताचियोमी को ब्लॉक कर सकते हैं। अधिक जानने के लिए यह टैप करें ।</string>\n    <string name=\"notification_size_warning\">बड़े अपडेट स्रोतों को नुकसान पहुंचाते हैं और इससे धीमे अपडेट हो सकते हैं, और बैटरी का उपयोग भी बढ़ सकता है। अधिक जानने के लिए टैप करें ।</string>\n    <string name=\"channel_app_updates\">ऐप अपडेट</string>\n    <string name=\"update_72hour\">हर 3 दिन</string>\n    <string name=\"connected_to_wifi\">केवल वाई-फ़ाई पर</string>\n    <string name=\"clear_database_source_item_count\">डेटाबेस में %1$d गैर-पुस्तकालय आइटम</string>\n    <string name=\"pref_auto_clear_chapter_cache\">ऐप लॉन्च पर चैप्टर कैशे साफ़ करें</string>\n    <string name=\"database_clean\">साफ़ करने के लिए कुछ नहीं है</string>\n    <string name=\"pref_update_only_completely_read\">अपठित अध्याय हैं</string>\n    <string name=\"save_chapter_as_cbz\">CBZ आर्कैव के रूप में सहेजें</string>\n    <string name=\"privacy_policy\">गोपनीयता नीति</string>\n    <string name=\"library_errors_help\">लाइब्रेरी अपडेट त्रुटियों को ठीक करने के तरीके पर सहायता के लिए, %1$s देखें</string>\n    <string name=\"extension_api_error\">एक्सटेंशन सूची प्राप्त करने में विफल</string>\n    <string name=\"cancelled\">रद्द किया गया</string>\n    <string name=\"on_hiatus\">अंतराल पर है</string>\n    <string name=\"publishing_finished\">प्रकाशन समाप्त</string>\n    <string name=\"learn_more\">अधिक जानकारी के लिए दबाए</string>\n    <string name=\"skipped_reason_completed\">छोड़े गए क्योंकि श्रृंखला पूरी हो गई है</string>\n    <string name=\"skipped_reason_not_caught_up\">छोड़ दिया गया क्योंकि वहाँ अपठित अध्याय हैं</string>\n    <string name=\"skipped_reason_not_started\">छोड़ दिया गया क्योंकि कोई अध्याय पढ़ा नहीं गया</string>\n    <string name=\"pref_update_only_started\">जो शुरू नहीं हुए हैं</string>\n    <string name=\"action_show_manga\">आइटम दिखाएँ</string>\n    <string name=\"action_display_cover_only_grid\">केवल कवर ग्रिड</string>\n    <string name=\"disabled_nav\">अक्षम</string>\n    <string name=\"rotation_reverse_portrait\">रिवर्स पोर्ट्रेट</string>\n    <string name=\"notification_update_error\">%1$d अपडेट विफल</string>\n    <string name=\"pref_navigate_pan\">चौड़ी छवियां पैन करें</string>\n    <string name=\"pref_landscape_zoom\">ज़ूम लैंडस्केप इमेज</string>\n    <string name=\"action_move_to_top_all_for_series\">श्रृंखला को शीर्ष पर ले जाएं</string>\n    <string name=\"source_empty_screen\">कोई स्रोत नहीं मिला</string>\n    <string name=\"source_filter_empty_screen\">कोई स्थापित स्रोत नहीं मिला</string>\n    <string name=\"action_sort_last_manga_update\">आखिरी आइटम अद्यतन</string>\n    <string name=\"action_sort_unread_count\">अपठित गिनती</string>\n    <string name=\"webview_data_deleted\">WebView डेटा साफ हो गया</string>\n    <string name=\"update_check_open\">गिटहब में खोलें</string>\n    <string name=\"error_saving_picture\">चित्र सहेजने में त्रुटि</string>\n    <string name=\"split_tall_images_summary\">लंबी डाउनलोड किए गए चित्रों के हिस्से करके पाठमाला के प्रदर्शन में सुधार लाता है</string>\n    <string name=\"download_notifier_split_page_not_found\">पेज %d हिस्से करते वक्त नहीं मिला</string>\n    <string name=\"action_close\">बंद करे</string>\n    <string name=\"pref_clear_webview_data\">WebView डाटा साफ करें</string>\n    <string name=\"download_notifier_split_page_path_not_found\">चित्र %d का फ़ाइल पथ नहीं खोजा जा सका</string>\n    <string name=\"empty_backup_error\">बैकअप करने के लिए कोई पुस्तकालय प्रविष्टि नहीं</string>\n    <string name=\"ext_info_version\">संस्करण</string>\n    <string name=\"ext_info_language\">भाषा</string>\n    <string name=\"ext_info_age_rating\">आयु रेटिंग</string>\n    <string name=\"reading_list\">पठन सूची</string>\n    <string name=\"wish_list\">विश-लिस्ट</string>\n    <string name=\"theme_lavender\">लैवेंडर</string>\n    <string name=\"pref_app_language\">ऐप की भाषा</string>\n    <string name=\"delete_category\">श्रेणी हटाएँ</string>\n    <string name=\"description_placeholder\">कोई विवरण नहीं</string>\n    <string name=\"delete_category_confirmation\">क्या आप %s कैटेगरी को हटाना चाहते हैं ?</string>\n    <string name=\"pref_reset_viewer_flags\">प्रति श्रृंखला रीडर सेटिंग्स को रीसेट करें</string>\n    <string name=\"pref_reset_viewer_flags_summary\">सभी श्रृंखलाओं के रीडिंग मोड और ओरिएंटेशन को रीसेट करता है</string>\n    <string name=\"pref_reset_viewer_flags_success\">सभी रीडर सेटिंग्स रीसेट करें</string>\n    <string name=\"pref_reset_viewer_flags_error\">पाठक सेटिंग रीसेट नहीं की जा सकी</string>\n    <string name=\"complete_list\">पूरी सूची</string>\n    <string name=\"not_installed\">इनस्टॉल नहीं हुआ है</string>\n    <string name=\"unfinished_list\">अधूरी सूची</string>\n    <string name=\"empty_screen\">खैर, यह अजीब है</string>\n    <string name=\"internal_error\">आंतरिक त्रुटि : अधिक जानकारी के लिए क्रैश लॉग की जाँच करें</string>\n    <string name=\"network_not_metered\">केवल अनमीटर्ड कनेक्शन पर</string>\n    <string name=\"updates_last_update_info\">पुस्तकालय पिछली बार अपडेट किया गया: %s</string>\n    <string name=\"appwidget_updates_description\">अपनी हाल ही में अपडेट की गई पुस्तकालय एन्ट्री देखें</string>\n    <string name=\"download_ahead_info\">केवल तभी काम करता है जब वर्तमान अध्याय + अगला पहले से ही डाउनलोड किया गया हो।</string>\n    <string name=\"custom_cover\">कस्टम कवर</string>\n    <string name=\"pref_user_agent_string\">चूक यूजर एजेंट स्ट्रिंग (User agent string)</string>\n    <string name=\"download_ahead\">आगे डाउनलोड करें</string>\n    <string name=\"auto_download_while_reading\">पढ़ते समय ऑटो डाउनलोड करे</string>\n    <string name=\"action_remove_everything\">सब कुछ हटा दें</string>\n    <string name=\"popular\">लोकप्रिय</string>\n    <string name=\"theme_tidalwave\">टाइडल वेव्ह</string>\n    <string name=\"error_user_agent_string_blank\">यूजर एजेंट स्ट्रिंग (User Agent String) खाली नहीं रखा जा सकता</string>\n    <string name=\"multi_lang\">मल्टी</string>\n    <string name=\"are_you_sure\">क्या आपको यकीन है ?</string>\n    <string name=\"appwidget_unavailable_locked\">ऐप लॉक लागू होने पर विजेट उपलब्ध नहीं होता</string>\n    <string name=\"remove_manga\">आप अपनी पुस्तकालय से \\\"%s\\\" को निकालने जा रहे हैं</string>\n    <string name=\"update_already_running\">एक अपडेट पहले से चल रहा है</string>\n    <string name=\"cant_open_last_read_chapter\">अंतिम पढ़ा गया अध्याय खोलने में असमर्थ</string>\n    <string name=\"pref_reset_user_agent_string\">यूजर एजेंट स्ट्रिंग(User agent string) डिफॉल्ट रिसेट करें</string>\n    <string name=\"on_hold_list\">होल्ड लिस्ट में</string>\n    <string name=\"label_stats\">आंकड़े</string>\n    <string name=\"label_started\">शुरू किए गए आइटम</string>\n    <string name=\"label_downloaded\">डाउनलोड किए गए</string>\n    <string name=\"action_copy_to_clipboard\">क्लिपबोर्ड पर कॉपी करें</string>\n    <string name=\"action_search_hint\">खोजें…</string>\n    <string name=\"action_display_show_continue_reading_button\">पढ़ना जारी रखने वाला बटन</string>\n    <string name=\"label_local\">स्थानीय</string>\n    <string name=\"action_open_random_manga\">कोई भी आइटम खोल दे</string>\n    <string name=\"pref_skip_dupe_chapters\">डुप्लिकेट अध्याय छोड़ें</string>\n    <string name=\"action_not_now\">अभी नहीं</string>\n    <string name=\"pref_browse_summary\">स्रोत, विस्तार, वैश्विक खोज</string>\n    <string name=\"invalid_location\">अवैध स्थान: %s</string>\n    <string name=\"action_update_category\">श्रेणी अपडेट करें</string>\n    <string name=\"pref_appearance_summary\">थीम, दिनांक और समय प्रारूप</string>\n    <string name=\"pref_downloads_summary\">स्वचालित डाउनलोड, आगे डाउनलोड करें</string>\n    <string name=\"pref_library_update_show_tab_badge\">नए अपडेट आइकन पर अपठित संख्या दिखाएं</string>\n    <string name=\"enhanced_services_not_installed\">उपलब्ध है लेकिन स्रोत स्थापित नहीं है: %s</string>\n    <string name=\"pref_hide_in_library_items\">पुस्तकालय में पहले से ही रही आइटम को छिपाएँ</string>\n    <string name=\"pref_library_summary\">श्रेणियाँ, वैश्विक अपडेट, अध्याय स्वाइप</string>\n    <string name=\"pref_page_rotate\">फिट होने के लिए चौड़े पृष्ठों को घुमाएं</string>\n    <string name=\"pref_backup_summary\">मैनुअल और स्वचालित बैकअप</string>\n    <string name=\"pref_security_summary\">ऐप लॉक, सुरक्षित स्क्रीन</string>\n    <string name=\"action_set_interval\">अंतराल निर्धारित करें</string>\n    <string name=\"action_filter_interval_custom\">अनुकूलित लाने का अंतराल</string>\n    <string name=\"intervals_header\">अंतराल</string>\n    <string name=\"pref_chapter_swipe_end\">दाईं ओर स्वाइप करने पर</string>\n    <string name=\"action_sort_next_updated\">अगला अपेक्षित अपडेट</string>\n    <string name=\"pref_debug_info\">डीबग जानकारी</string>\n    <string name=\"pref_advanced_summary\">डंप क्रैश लॉग, बैटरी अनुकूलन</string>\n    <string name=\"pref_update_only_in_release_period\">अपेक्षित रिलीज़ अवधि से बाहर</string>\n    <string name=\"pref_chapter_swipe_start\">बाईं ओर स्वाइप करने पर</string>\n    <string name=\"library_sync_complete\">लाइब्रेरी सिंक पूरा</string>\n    <string name=\"download_cache_invalidated\">डाउनलोड अनुक्रमणिका अमान्य</string>\n    <string name=\"action_ok\">ठीक है</string>\n    <string name=\"pref_invalidate_download_cache\">डाउनलोड अनुक्रमणिका अमान्य करें</string>\n    <string name=\"copied_to_clipboard_plain\">क्लिपबोर्ड पर कॉपी हो गया है</string>\n    <string name=\"track_delete_remote_text\">%s से भी हटा दें</string>\n    <string name=\"label_auto\">स्वत:</string>\n    <string name=\"action_migrate_duplicate\">मौजूदा एंट्री को बसाएं</string>\n    <string name=\"action_sort_random\">अनियमित</string>\n    <string name=\"action_sort_tracker_score\">ट्रैकर के स्कोर</string>\n    <string name=\"selected\">चयनित</string>\n    <string name=\"delete_downloaded\">डाउनलोड मिटाएँ</string>\n    <string name=\"scanlator\">स्कैनलेटर</string>\n    <string name=\"action_add_anyway\">फिर भी जोड़ें</string>\n    <string name=\"action_copy_link\">लिंक की प्रतिलिपि करें</string>\n    <string name=\"action_bar_up_description\">ऊपर जाएं</string>\n    <string name=\"not_selected\">गैर चयनित</string>\n    <string name=\"action_menu_overflow_description\">अधिक विकल्प</string>\n    <string name=\"label_data_storage\">डेटा और स्टोरेज</string>\n    <string name=\"unlock_app_title\">खोलना%s</string>\n    <string name=\"action_apply\">लागू करें</string>\n    <string name=\"action_move_to_bottom_all_for_series\">सीरीज को नीचे ले जाएं</string>\n    <string name=\"pref_onboarding_guide\">ऑनबोर्डिंग मार्गदर्शक</string>\n    <string name=\"onboarding_heading\">नमस्ते!आपका स्वागत है!</string>\n    <string name=\"label_upcoming\">आगामी</string>\n    <string name=\"action_revert_to_default\">डिफ़ॉल्ट पर वापस लौटें</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/hr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Nakon %1$s minute</item>\n        <item quantity=\"few\">Nakon %1$s minute</item>\n        <item quantity=\"other\">Nakon %1$s minuta</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategorija</item>\n        <item quantity=\"few\">%d kategorije</item>\n        <item quantity=\"other\">%d kategorija</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Poglavlja %1$s i još jedno</item>\n        <item quantity=\"few\">Poglavlja %1$s i još %2$d</item>\n        <item quantity=\"other\">Poglavlja %1$s i još %2$d</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Za %d stavku</item>\n        <item quantity=\"few\">Za %d stavke</item>\n        <item quantity=\"other\">Za %d stavku</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s preostalo</item>\n        <item quantity=\"few\">%1$s preostala</item>\n        <item quantity=\"other\">%1$s preostalih</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Dostupna je %d nova verzija proširenja</item>\n        <item quantity=\"few\">Dostupne su %d nove verzije proširenja</item>\n        <item quantity=\"other\">Dostupno je %d novih verzija proširenja</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d novo poglavlje</item>\n        <item quantity=\"few\">%1$d nova poglavlja</item>\n        <item quantity=\"other\">%1$d novih poglavlja</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Obavljeno u %1$s s %2$s greškom</item>\n        <item quantity=\"few\">Obavljeno u %1$s s %2$s greške</item>\n        <item quantity=\"other\">Obavljeno u %1$s s %2$s grešaka</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s poglavlje</item>\n        <item quantity=\"few\">%1$s poglavlja</item>\n        <item quantity=\"other\">%1$s poglavlja</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d usluga praćenja</item>\n        <item quantity=\"few\">%d usluge praćenja</item>\n        <item quantity=\"other\">%d usluga praćenja</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Preskače se %d poglavlje. Ne postoji u izvoru ili je filtrirano</item>\n        <item quantity=\"few\">Preskaču se %d poglavlja. Ne postoje u izvoru ili su filtrirana</item>\n        <item quantity=\"other\">Preskače se %d poglavlja. Ne postoje u izvoru ili su filtrirana</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Jučer</item>\n        <item quantity=\"few\">Prije %1$d dana</item>\n        <item quantity=\"other\">Prije %1$d dana</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Sljedeće nepročitano poglavlje</item>\n        <item quantity=\"few\">Sljedeća %d nepročitana poglavlja</item>\n        <item quantity=\"other\">Sljedećih %d nepročitanih poglavlja</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Sljedeće poglavlje</item>\n        <item quantity=\"few\">Sljedeća %d poglavlja</item>\n        <item quantity=\"other\">Sljedećih %d poglavlja</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Nedostaje %1$s poglavlje</item>\n        <item quantity=\"few\">Nedostaju %1$s poglavlja</item>\n        <item quantity=\"other\">Nedostaje %1$s poglavlja</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">%d dan</item>\n        <item quantity=\"few\">%d dana</item>\n        <item quantity=\"other\">%d dana</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repozitorij</item>\n        <item quantity=\"few\">%d repozitorija</item>\n        <item quantity=\"other\">%d repozitorija</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Sutra</item>\n        <item quantity=\"few\">Za %1$d dana</item>\n        <item quantity=\"other\">Za %1$d dana</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">%1$s stranica</item>\n        <item quantity=\"few\">%1$s stranice</item>\n        <item quantity=\"other\">%1$s stranica</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/hr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"lock_never\">Nikada</string>\n    <string name=\"lock_always\">Uvijek</string>\n    <string name=\"pref_fullscreen\">Cjeloekranski prikaz</string>\n    <string name=\"obsolete_extension_message\">Ovo proširenje više nije dostupno. Možda neće ispravno funkcionirati i može izazvati probleme s aplikacijom. Preporučuje se deinstalirati proširenje.</string>\n    <string name=\"untrusted_extension_message\">Zlonamjerno proširenje može pročitati sve spremljene podatke za prijavu ili izvršiti proizvoljni kod.\n\\n\n\\nVjerujući ovom certifikatu, prihvaćaš te rizike.</string>\n    <string name=\"untrusted_extension\">Nepovjerljivo proširenje</string>\n    <string name=\"ext_uninstall\">Deinstaliraj</string>\n    <string name=\"ext_untrusted\">Nepovjerljivo</string>\n    <string name=\"ext_trust\">Vjeruj</string>\n    <string name=\"ext_installed\">Instalirano</string>\n    <string name=\"ext_installing\">Instaliranje</string>\n    <string name=\"ext_downloading\">Preuzimanje</string>\n    <string name=\"ext_pending\">Na čekanju</string>\n    <string name=\"ext_install\">Instaliraj</string>\n    <string name=\"ext_obsolete\">Zastarjelo</string>\n    <string name=\"ext_update\">Aktualiziraj</string>\n    <string name=\"ext_updates_pending\">Aktualiziranja na čekanju</string>\n    <string name=\"all\">Sve</string>\n    <string name=\"default_category_summary\">Uvijek pitaj</string>\n    <string name=\"default_category\">Standardna kategorija</string>\n    <string name=\"pref_update_only_non_completed\">Preskoči unose sa stanjem „Završeno“</string>\n    <string name=\"charging\">Kad se puni</string>\n    <string name=\"pref_library_update_restriction\">Ograničenja uređaja za automatska aktualiziranja</string>\n    <string name=\"update_weekly\">Tjedno</string>\n    <string name=\"update_48hour\">Svaka 2 dana</string>\n    <string name=\"update_24hour\">Dnevno</string>\n    <string name=\"update_12hour\">Svakih 12 sati</string>\n    <string name=\"update_6hour\">Svakih 6 sati</string>\n    <string name=\"update_never\">Isključeno</string>\n    <string name=\"pref_library_update_interval\">Automatska aktualiziranja</string>\n    <string name=\"pref_category_library_update\">Globalno aktualiziranje</string>\n    <string name=\"landscape\">Polegnuto</string>\n    <string name=\"portrait\">Uspravno</string>\n    <string name=\"pref_library_columns\">Veličina mreže</string>\n    <string name=\"pref_category_display\">Prikaz</string>\n    <string name=\"hide_notification_content\">Sakrij sadržaj obavijesti</string>\n    <string name=\"secure_screen_summary\">Siguran ekran skriva sadržaj aplikacije prilikom prebacivanja između aplikacija i blokira snimke ekrana</string>\n    <string name=\"secure_screen\">Siguran ekran</string>\n    <string name=\"lock_when_idle\">Zaključaj prilikom mirovanja</string>\n    <string name=\"lock_with_biometrics\">Zahtijevaj otključavanje</string>\n    <string name=\"pref_category_security\">Sigurnost i privatnost</string>\n    <string name=\"pref_manage_notifications\">Upravljaj obavijestima</string>\n    <string name=\"pref_date_format\">Format datuma</string>\n    <string name=\"theme_system\">Sustav</string>\n    <string name=\"theme_dark\">Tamna</string>\n    <string name=\"theme_light\">Svijetla</string>\n    <string name=\"pref_category_about\">Informacije</string>\n    <string name=\"pref_category_advanced\">Napredno</string>\n    <string name=\"pref_category_tracking\">Praćenje</string>\n    <string name=\"pref_category_downloads\">Preuzimanja</string>\n    <string name=\"pref_category_reader\">Čitač</string>\n    <string name=\"pref_category_library\">Biblioteka</string>\n    <string name=\"pref_category_general\">Opće</string>\n    <string name=\"app_not_available\">Aplikacija nije dostupna</string>\n    <string name=\"loading\">Učitavanje …</string>\n    <string name=\"action_webview_refresh\">Osvježi</string>\n    <string name=\"action_webview_forward\">Naprijed</string>\n    <string name=\"action_webview_back\">Natrag</string>\n    <string name=\"chapters\">Poglavlja</string>\n    <string name=\"categories\">Kategorije</string>\n    <string name=\"information_empty_category\">Nemaš kategorija. Za stvaranje kategorije i organiziranje biblioteke dodirni gumb plus.</string>\n    <string name=\"information_empty_library\">Tvoja je biblioteka prazna</string>\n    <string name=\"information_no_recent_manga\">Ništa nije nedavno čitano</string>\n    <string name=\"information_no_recent\">Nema nedavnih aktualiziranja</string>\n    <string name=\"information_no_downloads\">Nema preuzimanja</string>\n    <string name=\"label_help\">Pomoć</string>\n    <string name=\"label_extension_info\">Podaci proširenja</string>\n    <string name=\"label_extensions\">Proširenja</string>\n    <string name=\"label_migration\">Migracija</string>\n    <string name=\"label_backup\">Sigurnosna kopija i obnavljanje</string>\n    <string name=\"label_sources\">Izvori</string>\n    <string name=\"label_recent_manga\">Povijest</string>\n    <string name=\"label_recent_updates\">Aktualiziranja</string>\n    <string name=\"label_library\">Biblioteka</string>\n    <string name=\"label_download_queue\">Popis preuzimanja</string>\n    <string name=\"label_settings\">Postavke</string>\n    <string name=\"label_more\">Više</string>\n    <string name=\"name\">Ime</string>\n    <string name=\"action_restore\">Obnovi</string>\n    <string name=\"action_open_log\">Otvori zapisnik</string>\n    <string name=\"action_undo\">Poništi</string>\n    <string name=\"action_reset\">Obnovi</string>\n    <string name=\"action_save\">Spremi</string>\n    <string name=\"action_share\">Dijeli</string>\n    <string name=\"action_install\">Instaliraj</string>\n    <string name=\"action_move_to_bottom\">Premjesti na kraj</string>\n    <string name=\"action_move_to_top\">Premjesti na vrh</string>\n    <string name=\"action_oldest\">Najstarije</string>\n    <string name=\"action_newest\">Najnovije</string>\n    <string name=\"action_sort\">Razvrstaj</string>\n    <string name=\"action_cancel_all\">Prekini sve</string>\n    <string name=\"action_cancel\">Prekini</string>\n    <string name=\"action_unpin\">Otkvači</string>\n    <string name=\"action_pin\">Prikvači</string>\n    <string name=\"action_display_download_badge\">Preuzeta poglavlja</string>\n    <string name=\"action_display_list\">Popis</string>\n    <string name=\"action_display_grid\">Kompaktno</string>\n    <string name=\"action_display\">Prikaz</string>\n    <string name=\"action_display_mode\">Modus prikaza</string>\n    <string name=\"action_open_in_web_view\">Otvori u WebView</string>\n    <string name=\"action_open_in_browser\">Otvori u pregledniku</string>\n    <string name=\"action_resume\">Nastavi</string>\n    <string name=\"action_remove\">Ukloni</string>\n    <string name=\"action_retry\">Pokušaj ponovo</string>\n    <string name=\"action_next_chapter\">Sljedeće poglavlje</string>\n    <string name=\"action_previous_chapter\">Prethodno poglavlje</string>\n    <string name=\"action_pause\">Zaustavi</string>\n    <string name=\"action_view_chapters\">Pogledaj poglavlja</string>\n    <string name=\"action_edit_cover\">Uredi naslovnicu</string>\n    <string name=\"action_move_category\">Postavi kategorije</string>\n    <string name=\"action_rename_category\">Preimenuj kategoriju</string>\n    <string name=\"action_edit_categories\">Uredi kategorije</string>\n    <string name=\"action_add_category\">Dodaj kategoriju</string>\n    <string name=\"action_add\">Dodaj</string>\n    <string name=\"action_edit\">Uredi</string>\n    <string name=\"action_update_library\">Aktualiziraj biblioteku</string>\n    <string name=\"action_delete\">Izbriši</string>\n    <string name=\"action_remove_bookmark\">Ukloni zabilješku poglavlja</string>\n    <string name=\"action_bookmark\">Zabilježi poglavlje</string>\n    <string name=\"action_download\">Preuzmi</string>\n    <string name=\"action_mark_previous_as_read\">Označi prethodno kao pročitano</string>\n    <string name=\"action_mark_as_unread\">Označi kao nepročitano</string>\n    <string name=\"action_mark_as_read\">Označi kao pročitano</string>\n    <string name=\"action_select_inverse\">Odaberi inverzno</string>\n    <string name=\"action_select_all\">Odaberi sve</string>\n    <string name=\"action_global_search\">Globalna pretraga</string>\n    <string name=\"action_search\">Traži</string>\n    <string name=\"action_sort_latest_chapter\">Najnovije poglavlje</string>\n    <string name=\"action_sort_last_read\">Zadnje čitano</string>\n    <string name=\"action_sort_total\">Ukupan broj poglavlja</string>\n    <string name=\"action_sort_alpha\">Abecednim redom</string>\n    <string name=\"action_filter_empty\">Ukloni filtar</string>\n    <string name=\"action_filter_unread\">Nepročitano</string>\n    <string name=\"action_filter_bookmarked\">Zabilježeno</string>\n    <string name=\"action_filter\">Filtar</string>\n    <string name=\"action_menu\">Izbornik</string>\n    <string name=\"action_settings\">Postavke</string>\n    <string name=\"history\">Povijest</string>\n    <string name=\"track\">Praćenje</string>\n    <string name=\"manga\">Unosi u biblioteci</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d s</string>\n    <string name=\"restore_completed\">Obnavljanje je završeno</string>\n    <string name=\"backup_created\">Sigurnosna kopija je stvorena</string>\n    <string name=\"pref_backup_interval\">Učestalost automatskog spremanja sigurnosnih kopija</string>\n    <string name=\"pref_restore_backup_summ\">Obnovi biblioteku iz sigurnosne kopije</string>\n    <string name=\"pref_restore_backup\">Obnovi sigurnosnu kopiju</string>\n    <string name=\"pref_create_backup_summ\">Može se koristiti za obnavljanje trenutačne biblioteke</string>\n    <string name=\"pref_create_backup\">Stvori sigurnosnu kopiju</string>\n    <string name=\"services\">Usluge praćenja</string>\n    <string name=\"pref_auto_update_manga_sync\">Aktualiziraj napredak nakon čitanja</string>\n    <string name=\"pref_download_new\">Preuzmi nova poglavlja</string>\n    <string name=\"fifth_to_last\">Peto prije zadnjeg pročitanog poglavlja</string>\n    <string name=\"fourth_to_last\">Četvrto prije zadnjeg pročitanog poglavlja</string>\n    <string name=\"third_to_last\">Pretpredzadnje pročitano poglavlje</string>\n    <string name=\"second_to_last\">Predzadnje pročitano poglavlje</string>\n    <string name=\"last_read_chapter\">Zadnje pročitano poglavlje</string>\n    <string name=\"disabled\">Deaktivirano</string>\n    <string name=\"pref_remove_after_read\">Automatski izbriši nakon čitanja</string>\n    <string name=\"pref_remove_after_marked_as_read\">Nakon ručnog označivanja kao pročitano</string>\n    <string name=\"pref_webtoon_side_padding\">Odmak od ruba</string>\n    <string name=\"pref_category_reading\">Čitanje</string>\n    <string name=\"pref_always_show_chapter_transition\">Uvijek prikaži prijelaze između poglavlja</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"rotation_force_landscape\">Prisili polegnuto</string>\n    <string name=\"rotation_force_portrait\">Prisili uspravno</string>\n    <string name=\"rotation_free\">Slobodno</string>\n    <string name=\"pref_rotation_type\">Standardno okretanje</string>\n    <string name=\"double_tap_anim_speed_fast\">Brzo</string>\n    <string name=\"double_tap_anim_speed_normal\">Normalno</string>\n    <string name=\"double_tap_anim_speed_0\">Bez animacije</string>\n    <string name=\"zoom_start_center\">Sredina</string>\n    <string name=\"zoom_start_right\">Desno</string>\n    <string name=\"zoom_start_left\">Lijevo</string>\n    <string name=\"zoom_start_automatic\">Automatski</string>\n    <string name=\"pref_zoom_start\">Početni položaj zumiranja</string>\n    <string name=\"scale_type_smart_fit\">Pametna prilagodba</string>\n    <string name=\"scale_type_original_size\">Izvorna veličina</string>\n    <string name=\"scale_type_fit_height\">Prilagodi visinu</string>\n    <string name=\"scale_type_fit_width\">Prilagodi širinu</string>\n    <string name=\"scale_type_stretch\">Rastegni</string>\n    <string name=\"scale_type_fit_screen\">Prilagodi ekranu</string>\n    <string name=\"pref_image_scale_type\">Vrsta skaliranja</string>\n    <string name=\"pager_viewer\">Stranice</string>\n    <string name=\"vertical_plus_viewer\">Duga traka s razmacima</string>\n    <string name=\"webtoon_viewer\">Duga traka</string>\n    <string name=\"vertical_viewer\">Stranica (okomito)</string>\n    <string name=\"right_to_left_viewer\">Stranica (s desna na lijevo)</string>\n    <string name=\"left_to_right_viewer\">Stranica (s lijeva na desno)</string>\n    <string name=\"pref_viewer_type\">Standardni modus čitanja</string>\n    <string name=\"black_background\">Crna</string>\n    <string name=\"gray_background\">Siva</string>\n    <string name=\"white_background\">Bijela</string>\n    <string name=\"pref_keep_screen_on\">Ostavi ekran uključen</string>\n    <string name=\"filter_mode_darken\">Potamni</string>\n    <string name=\"filter_mode_lighten\">Posvijetli</string>\n    <string name=\"filter_mode_screen\">Ekran</string>\n    <string name=\"filter_mode_multiply\">Pomnoži</string>\n    <string name=\"filter_mode_overlay\">Prekrij</string>\n    <string name=\"pref_color_filter_mode\">Modus stapanja filtra boja</string>\n    <string name=\"pref_custom_color_filter\">Prilagođeni filtar boja</string>\n    <string name=\"pref_custom_brightness\">Prilagođena svjetlina</string>\n    <string name=\"pref_crop_borders\">Odreži rubove</string>\n    <string name=\"pref_show_page_number\">Prikaži broj stranice</string>\n    <string name=\"pref_double_tap_anim_speed\">Brzina animacije dvostrukim dodirom</string>\n    <string name=\"pref_page_transitions\">Animiraj prijelaze stranica</string>\n    <string name=\"pref_cutout_short\">Prikaži sadržaj u izrezanom području</string>\n    <string name=\"pref_reader_theme\">Boja pozadine</string>\n    <string name=\"pref_read_with_long_tap\">Prikaži radnje pri dugom dodiru</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Preokreni tipke za glasnoću</string>\n    <string name=\"pref_read_with_volume_keys\">Tipke za glasnoću</string>\n    <string name=\"pref_reader_navigation\">Navigacija</string>\n    <string name=\"pref_skip_filtered_chapters\">Preskoči filtrirana poglavlja</string>\n    <string name=\"pref_skip_read_chapters\">Preskoči pročitana poglavlja</string>\n    <string name=\"update_check_notification_update_available\">Dostupna je nova verzija!</string>\n    <string name=\"update_check_notification_download_error\">Greška pri preuzimanju</string>\n    <string name=\"update_check_notification_download_complete\">Dodirni za instaliranje nove verzije</string>\n    <string name=\"update_check_notification_download_in_progress\">Preuzimanje …</string>\n    <string name=\"update_check_no_new_updates\">Nema novih verzija</string>\n    <string name=\"update_check_confirm\">Preuzmi</string>\n    <string name=\"file_select_backup\">Odaberi datoteku sigurnosne kopije</string>\n    <string name=\"file_select_cover\">Odaberi sliku naslovnice</string>\n    <string name=\"notification_first_add_to_library\">Prije toga, dodajte stavku u biblioteku</string>\n    <string name=\"notification_cover_update_failed\">Neuspjelo aktualiziranje naslovnice</string>\n    <string name=\"notification_chapters_multiple\">Poglavlja %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Poglavlje %1$s i još %2$d</string>\n    <string name=\"notification_chapters_single\">Poglavlje %1$s</string>\n    <string name=\"notification_new_chapters\">Pronađena su nova poglavlja</string>\n    <string name=\"download_queue_error\">Neuspjelo preuzimanje poglavlja. Pokušaj ponovo u odjeljku preuzimanja</string>\n    <string name=\"copy\">Kopiraj</string>\n    <string name=\"migrate\">Migriraj</string>\n    <string name=\"migration_selection_prompt\">Odaberi izvor iz kojeg se migrira</string>\n    <string name=\"migration_dialog_what_to_include\">Odaberi podatke koje želiš uključiti</string>\n    <string name=\"recent_manga_time\">Pogl. %1$s – %2$s</string>\n    <string name=\"updating_library\">Aktualiziranje biblioteke</string>\n    <string name=\"transition_pages_error\">Neuspjelo učitavanje stranica: %1$s</string>\n    <string name=\"transition_pages_loading\">Učitavanje stranica …</string>\n    <string name=\"transition_no_previous\">Nema prethodnog poglavlja</string>\n    <string name=\"transition_no_next\">Nema sljedećeg poglavlja</string>\n    <string name=\"transition_previous\">Prethodno:</string>\n    <string name=\"transition_next\">Sljedeće:</string>\n    <string name=\"transition_current\">Trenutačno:</string>\n    <string name=\"transition_finished\">Završeno:</string>\n    <string name=\"viewer\">Modus čitanja</string>\n    <string name=\"pref_category_for_this_series\">Za ovu seriju</string>\n    <string name=\"confirm_set_image_as_cover\">Ovu sliku koristiti kao naslovnicu?</string>\n    <string name=\"decode_image_error\">Nije bilo moguće učitati sliku</string>\n    <string name=\"no_next_chapter\">Sljedeće poglavlje nije pronađeno</string>\n    <string name=\"chapter_progress\">Stranica: %1$d</string>\n    <string name=\"cover_updated\">Naslovnica aktualizirana</string>\n    <string name=\"set_as_cover\">Postavi kao naslovnicu</string>\n    <string name=\"custom_filter\">Prilagođeni filtar</string>\n    <string name=\"picture_saved\">Slika spremljena</string>\n    <string name=\"dialog_with_checkbox_reset\">Obnovi sva poglavlja za ovaj unos</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ovo će ukloniti datum čitanja ovog poglavlja. Je li to stvarno želiš?</string>\n    <string name=\"snack_categories_deleted\">Izbrisane kategorije</string>\n    <string name=\"error_category_exists\">Kategorija s ovim imenom već postoji!</string>\n    <string name=\"track_type\">Vrsta</string>\n    <string name=\"track_status\">Stanje</string>\n    <string name=\"status\">Stanje</string>\n    <string name=\"title\">Naslov</string>\n    <string name=\"score\">Ocjena</string>\n    <string name=\"repeating\">Ponovno čitanje</string>\n    <string name=\"plan_to_read\">Planiram čitati</string>\n    <string name=\"paused\">Zaustavljeno</string>\n    <string name=\"on_hold\">Na čekanju</string>\n    <string name=\"dropped\">Ispušteno</string>\n    <string name=\"completed\">Završeno</string>\n    <string name=\"reading\">Čitanje</string>\n    <string name=\"add_tracking\">Dodaj praćenje</string>\n    <string name=\"manga_tracking_tab\">Praćenje</string>\n    <string name=\"confirm_delete_chapters\">Stvarno želiš izbrisati odabrana poglavlja?</string>\n    <string name=\"download_unread\">Nepročitano</string>\n    <string name=\"manga_download\">Preuzmi</string>\n    <string name=\"sort_by_number\">Po broju poglavlja</string>\n    <string name=\"sort_by_source\">Po izvoru</string>\n    <string name=\"show_chapter_number\">Broj poglavlja</string>\n    <string name=\"show_title\">Naslov izvora</string>\n    <string name=\"chapter_paused\">Zaustavljeno</string>\n    <string name=\"chapter_error\">Greška</string>\n    <string name=\"chapter_downloading_progress\">Preuzimanje (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">Poglavlje %1$s</string>\n    <string name=\"snack_add_to_library\">Dodati u biblioteku?</string>\n    <string name=\"source_not_installed\">Izvor nije instaliran: %1$s</string>\n    <string name=\"copied_to_clipboard\">Kopirano u međuspremnik:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">Izbrisati preuzeta poglavlja?</string>\n    <string name=\"manga_info_collapse\">Manje</string>\n    <string name=\"manga_info_expand\">Više</string>\n    <string name=\"manga_removed_library\">Uklonjeno iz biblioteke</string>\n    <string name=\"manga_added_library\">Dodano u biblioteku</string>\n    <string name=\"remove_from_library\">Ukloni iz biblioteke</string>\n    <string name=\"in_library\">U biblioteci</string>\n    <string name=\"add_to_library\">Dodaj u biblioteku</string>\n    <string name=\"licensed\">Licencirano</string>\n    <string name=\"unknown\">Nepoznat</string>\n    <string name=\"ongoing\">Nastavljajući</string>\n    <string name=\"local_source_help_guide\">Vodič za lokalni izvor</string>\n    <string name=\"browse\">Pretraži</string>\n    <string name=\"latest\">Najnoviji</string>\n    <string name=\"action_global_search_hint\">Globalna pretraga …</string>\n    <string name=\"pinned_sources\">Označeni</string>\n    <string name=\"last_used_source\">Zadnji korišteni</string>\n    <string name=\"other_source\">Drugi</string>\n    <string name=\"local_source\">Lokalni izvor</string>\n    <string name=\"no_results_found\">Nema rezultata</string>\n    <string name=\"no_more_results\">Nema daljnjih rezultata</string>\n    <string name=\"updating_category\">Ažuriranje kategorije</string>\n    <string name=\"unknown_error\">Nepoznata greška</string>\n    <string name=\"logout_success\">Odjava uspjela</string>\n    <string name=\"logout\">Odjava</string>\n    <string name=\"logout_title\">Odjaviti se iz %1$s?</string>\n    <string name=\"login_success\">Prijava uspjela</string>\n    <string name=\"login\">Prijava</string>\n    <string name=\"password\">Lozinka</string>\n    <string name=\"email\">Adresa e-pošte</string>\n    <string name=\"username\">Korisničko ime</string>\n    <string name=\"login_title\">Prijavi se na %1$s</string>\n    <string name=\"downloaded_only_summary\">Filtrira sve unose u biblioteci</string>\n    <string name=\"label_downloaded_only\">Samo preuzeto</string>\n    <string name=\"pref_acra_summary\">Pomaže pri ispravljanju grešaka. Ne šalju se nikoji privatni podaci</string>\n    <string name=\"pref_enable_acra\">Pošalji izvještaj o prekidu rad aplikacije</string>\n    <string name=\"check_for_updates\">Traži nove verzije</string>\n    <string name=\"licenses\">Licence otvorenog koda</string>\n    <string name=\"version\">Verzija</string>\n    <string name=\"website\">Web-stranica</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Nije moguće otvoriti postavke uređaja</string>\n    <string name=\"battery_optimization_disabled\">Optimiranje baterije je već deaktivirano</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Pomaže pri aktualiziranju biblioteke i spremanju sigurnosnih kopija u pozadini</string>\n    <string name=\"pref_disable_battery_optimization\">Deaktiviraj optimiranje baterije</string>\n    <string name=\"clear_database_completed\">Unosi su izbrisani</string>\n    <string name=\"clear_database_confirmation\">Sigurno? Pročitana poglavlja i tijek unosa koji nisu u biblioteci će se izgubiti</string>\n    <string name=\"pref_clear_database_summary\">Izbriši povijest za unose koji nisu spremljeni u biblioteci</string>\n    <string name=\"pref_clear_database\">Isprazni bazu podataka</string>\n    <string name=\"cookies_cleared\">Kolačići su izbrisani</string>\n    <string name=\"pref_clear_cookies\">Ukloni kolačiće</string>\n    <string name=\"cache_delete_error\">Došlo je do greške prilikom brisanja</string>\n    <string name=\"cache_deleted\">Predmemorija je izrisana. Broj izbrisanih datoteka: %1$d</string>\n    <string name=\"used_cache\">Korišteno: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">Isprazni predmemoriju poglavlja</string>\n    <string name=\"restoring_backup_canceled\">Obnavljanje prekinuto</string>\n    <string name=\"restoring_backup_error\">Obnavljanje neuspjelo</string>\n    <string name=\"restoring_backup\">Obnavljanje sigurnosnom kopijom</string>\n    <string name=\"restore_in_progress\">Obnavljanje je već u tijeku</string>\n    <string name=\"creating_backup_error\">Sigurnosna kopija neuspjela</string>\n    <string name=\"creating_backup\">Stvaranje sigurnosne kopije</string>\n    <string name=\"backup_choice\">Što želiš spremiti kao sigurnosnu kopiju?</string>\n    <string name=\"backup_in_progress\">Spremanje sigurnosne kopije je već u tijeku</string>\n    <string name=\"information_cloudflare_bypass_failure\">Neuspjelo zaobilaženje Cloudflare-a</string>\n    <string name=\"information_webview_required\">Za funkcioniranje aplikacije je potreban WebView</string>\n    <string name=\"channel_ext_updates\">Aktualiziranja proširenja</string>\n    <string name=\"channel_new_chapters\">Aktualiziranja poglavlja</string>\n    <string name=\"channel_common\">Opće</string>\n    <string name=\"download_notifier_download_paused\">Preuzimanje zaustavljeno</string>\n    <string name=\"download_notifier_no_network\">Nema mrežne veze</string>\n    <string name=\"download_notifier_text_only_wifi\">Nema Wi-Fi veze</string>\n    <string name=\"download_notifier_unknown_error\">Poglavlje nije moguće preuzeti zbog neočekivane pogreške</string>\n    <string name=\"download_notifier_title_error\">Greška</string>\n    <string name=\"download_notifier_downloader_title\">Preuzimanja</string>\n    <string name=\"information_webview_outdated\">Za bolju kompatibilnost, aktualiziraj WebView</string>\n    <string name=\"pref_refresh_library_covers\">Aktualiziraj naslovnice biblioteke</string>\n    <string name=\"sort_by_upload_date\">Po datumu prijenosa</string>\n    <string name=\"label_data\">Podaci</string>\n    <string name=\"backup_restore_missing_sources\">Nedostaju izvori:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Sigurnosna kopija ne sadrži unose u biblioteci.</string>\n    <string name=\"invalid_backup_file\">Neispravna datoteka sigurnosne kopije:</string>\n    <string name=\"tracking_info\">Jednosmjerna sinkronizacija za aktualiziranje napretka poglavlja u eksternoj usluzi praćenja. Postavi praćenje pojedinačnih unosa manga putem gumba za praćenje.</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Provjeri nove naslovnice i pojedinosti prilikom aktualiziranja biblioteke</string>\n    <string name=\"pref_library_update_refresh_metadata\">Automatski osvježi metapodatke</string>\n    <string name=\"action_migrate\">Migriraj</string>\n    <string name=\"action_disable_all\">Deaktiviraj sve</string>\n    <string name=\"action_enable_all\">Aktiviraj sve</string>\n    <string name=\"page_list_empty_error\">Nema stranica</string>\n    <string name=\"tabs_header\">Kartice</string>\n    <string name=\"pref_show_reading_mode_summary\">Nakratko prikaži trenutačni modus kad se čitač otvori</string>\n    <string name=\"pref_show_reading_mode\">Prikaži modus čitanja</string>\n    <string name=\"action_display_show_tabs\">Prikaži kartice kategorija</string>\n    <string name=\"action_display_comfortable_grid\">Mreža</string>\n    <string name=\"action_start\">Pokreni</string>\n    <string name=\"action_disable\">Deaktiviraj</string>\n    <string name=\"loader_not_implemented_error\">Izvor nije pronađen</string>\n    <string name=\"requires_app_restart\">Zahtijeva ponovno pokretanje aplikacije</string>\n    <string name=\"label_network\">Umreženi rad</string>\n    <string name=\"tapping_inverted_both\">Oboje</string>\n    <string name=\"tapping_inverted_vertical\">Okomito</string>\n    <string name=\"tapping_inverted_horizontal\">Vodoravno</string>\n    <string name=\"tapping_inverted_none\">Ništa</string>\n    <string name=\"pref_read_with_tapping_inverted\">Preokreni područja za dodirivanje</string>\n    <string name=\"unknown_status\">Nepoznato stanje</string>\n    <string name=\"unknown_author\">Nepoznat autor</string>\n    <string name=\"updated_version\">Aktualizirano na v%1$s</string>\n    <string name=\"whats_new\">Što je novo</string>\n    <string name=\"download_insufficient_space\">Neuspjelo preuzimanje poglavlja zbog nedovoljne memorije</string>\n    <string name=\"action_global_search_query\">Traži „%1$s” globalno</string>\n    <string name=\"pref_category_reading_mode\">Modus čitanja</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Datum dodavanja</string>\n    <string name=\"no_pinned_sources\">Nemaš označenih izvora</string>\n    <string name=\"channel_complete\">Gotovo</string>\n    <string name=\"channel_progress\">Napredak</string>\n    <string name=\"channel_errors\">Greške</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Dozvoli brisanje zabilježenih poglavlja</string>\n    <string name=\"pref_category_delete_chapters\">Izbriši poglavlja</string>\n    <string name=\"ext_nsfw_warning\">Izvori ovog proširenja mogu sadržavati neprikladan sadržaj (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"backup_restore_missing_trackers\">Usluge praćenja bez prijave:</string>\n    <string name=\"parental_controls_info\">To ne sprečava neslužbene ili potencijalno krivo označena proširenja prikazati neprikladan sadržaj (18+) unutar aplikacije.</string>\n    <string name=\"no_chapters_error\">Nema poglavlja</string>\n    <string name=\"chapter_settings_updated\">Standardne postavke poglavlja su aktualizirane</string>\n    <string name=\"share_page_info\">%1$s: %2$s, %3$d. stranica</string>\n    <string name=\"set_chapter_settings_as_default\">Postavi kao standardno</string>\n    <string name=\"also_set_chapter_settings_for_library\">Također primijeni na sve unose u mojoj biblioteci</string>\n    <string name=\"confirm_set_chapter_settings\">Stvarno želiš spremiti ove postavke kao standardne?</string>\n    <string name=\"chapter_settings\">Postavke poglavlja</string>\n    <string name=\"action_search_settings\">Postavke pretrage</string>\n    <string name=\"manga_from_library\">Iz biblioteke</string>\n    <string name=\"downloaded_chapters\">Preuzeta poglavlja</string>\n    <string name=\"pref_incognito_mode\">Anonimni modus</string>\n    <string name=\"pref_incognito_mode_summary\">Zaustavlja čitanje povijesti</string>\n    <string name=\"pref_clear_history\">Izbriši povijest</string>\n    <string name=\"clear_history_confirmation\">Sigurno? Izgubit ćeš svu povijest.</string>\n    <string name=\"clear_history_completed\">Povijest je izbrisana</string>\n    <string name=\"spen_next_page\">Sljedeća stranica</string>\n    <string name=\"spen_previous_page\">Prethodna stranica</string>\n    <string name=\"migration_help_guide\">Vodič za migraciju izvora</string>\n    <string name=\"pref_category_nsfw_content\">Izvori neprikladnog sadržaja (18+)</string>\n    <string name=\"file_picker_error\">Nije pronađena nijedna aplikacija za biranje datoteka</string>\n    <string name=\"myanimelist_relogin\">Ponovo se prijavi na MAL</string>\n    <string name=\"pref_show_nsfw_source\">Prikaži u popisu izvora i proširenja</string>\n    <string name=\"track_finished_reading_date\">Datum kraja</string>\n    <string name=\"track_started_reading_date\">Datum početka</string>\n    <string name=\"pref_dump_crash_logs_summary\">Sprema zapise grešaka u datoteku za dijeljenje podataka s programerima</string>\n    <string name=\"pref_dump_crash_logs\">Dijeli zapise prekida rada aplikacije</string>\n    <string name=\"pref_viewer_nav\">Područja dodira</string>\n    <string name=\"edge_nav\">Rub</string>\n    <string name=\"kindlish_nav\">Kao Kindle</string>\n    <string name=\"l_nav\">U obliku slova L</string>\n    <string name=\"action_desc\">Silazno</string>\n    <string name=\"action_asc\">Uzlazno</string>\n    <string name=\"action_order_by_chapter_number\">Po broju poglavlja</string>\n    <string name=\"action_order_by_upload_date\">Po datumu preuzimanja</string>\n    <string name=\"action_filter_tracked\">Praćeno</string>\n    <string name=\"right_and_left_nav\">Desno i lijevo</string>\n    <string name=\"action_display_show_number_of_items\">Prikaži broj elemenata</string>\n    <string name=\"backup_restore_content_full\">Možda ćeš morati instalirati sva nedostajuća proširenja i naknadno se prijaviti na usluge praćenja za njihovo korištenje.</string>\n    <string name=\"pref_dual_page_invert_summary\">Ako se položaj rastavljenih širokih stranica ne podudara sa smjerom čitanja</string>\n    <string name=\"pref_dual_page_invert\">Obrni položaj rastavljene stranice</string>\n    <string name=\"pref_dual_page_split\">Rastavi široke stranice</string>\n    <string name=\"pref_show_navigation_mode_summary\">Kratko prikaži kada je čitač otvoren</string>\n    <string name=\"nav_zone_right\">Desno</string>\n    <string name=\"nav_zone_left\">Lijevo</string>\n    <string name=\"nav_zone_next\">Sljedeće</string>\n    <string name=\"nav_zone_prev\">Prethodno</string>\n    <string name=\"pref_show_navigation_mode\">Prikaži raspored navigacije</string>\n    <string name=\"pref_dns_over_https\">DNS preko HTTPS-a (DoH)</string>\n    <string name=\"none\">Ništa</string>\n    <string name=\"pref_download_new_categories_details\">Unosi u isključenim kategorijama neće se ažurirati čak i ako su također u uključenim kategorijama.</string>\n    <string name=\"pref_category_auto_download\">Automatsko preuzimanje</string>\n    <string name=\"exclude\">Isključi: %s</string>\n    <string name=\"include\">Uključi: %s</string>\n    <string name=\"pref_library_update_categories_details\">Unosi u isključenim kategorijama neće se aktualizirati čak i ako su u uključenim kategorijama.</string>\n    <string name=\"action_sort_chapter_fetch_date\">Datum preuzimanja poglavlja</string>\n    <string name=\"action_show_errors\">Dodirni za prikaz detalja</string>\n    <string name=\"update_check_eol\">Ove se Android verzija više ne podržava</string>\n    <string name=\"clipboard_copy_error\">Kopiranje nije uspješno</string>\n    <string name=\"rotation_landscape\">Polegnuto</string>\n    <string name=\"rotation_portrait\">Uspravno</string>\n    <string name=\"pref_grayscale\">Sive nijanse</string>\n    <string name=\"notification_incognito_text\">Deaktiviraj anonimni modus</string>\n    <string name=\"rotation_type\">Okretanje</string>\n    <string name=\"automatic_background\">Automatski</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Stvara mape na osnovi naslova unosa</string>\n    <string name=\"pref_create_folder_per_manga\">Spremi stranice u zasebne mape</string>\n    <string name=\"pref_reader_actions\">Radnje</string>\n    <string name=\"cancel_all_for_series\">Prekini sve za ovu seriju</string>\n    <string name=\"chapter_not_found\">Poglavlje nije pronađeno</string>\n    <string name=\"unread\">Nepročitano</string>\n    <string name=\"action_display_local_badge\">Lokalni izvor</string>\n    <string name=\"error_sharing_cover\">Greška tijekom dijeljenja naslovnice</string>\n    <string name=\"error_saving_cover\">Greška tijekom spremanja naslovnice</string>\n    <string name=\"cover_saved\">Naslovnica spremljena</string>\n    <string name=\"information_empty_category_dialog\">Još nemaš kategorija.</string>\n    <string name=\"error_no_match\">Ništa nije pronađeno</string>\n    <string name=\"source_unsupported\">Izvor nije podržan</string>\n    <string name=\"manga_cover\">Naslovnica</string>\n    <string name=\"date\">Datum</string>\n    <string name=\"local_filter_order_by\">Redoslijed</string>\n    <string name=\"local_invalid_format\">Nevažeći format poglavlja</string>\n    <string name=\"tracking_guide\">Vodič za praćenje</string>\n    <string name=\"off\">Isključeno</string>\n    <string name=\"on\">Uključeno</string>\n    <string name=\"categorized_display_settings\">Postavke kategorija za sortiranje</string>\n    <string name=\"restrictions\">Ograničenja: %s</string>\n    <string name=\"action_start_downloading_now\">Pokreni preuzimanje sada</string>\n    <string name=\"about_dont_kill_my_app\">Neki proizvođači imaju dodatna ograničenja za aplikaciju koja onemogućuju usluge u pozadini. Ova web-stranica sadrži daljnje informacije o tome kako to popraviti.</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_midnightdusk\">Ponoćni sumrak</string>\n    <string name=\"theme_greenapple\">Zelena jabuka</string>\n    <string name=\"theme_monet\">Dinamički</string>\n    <string name=\"pref_app_theme\">Tema aplikacije</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Jin i Jang</string>\n    <string name=\"pref_inverted_colors\">Invertirano</string>\n    <string name=\"relative_time_today\">Danas</string>\n    <string name=\"pref_dark_theme_pure_black\">Potpuno crna tamna tema</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri jagoda</string>\n    <string name=\"pref_category_appearance\">Izgled</string>\n    <string name=\"getting_started_guide\">Vodič za pokretanje</string>\n    <string name=\"confirm_lock_change\">Ovjeri za potvrditi promjenu</string>\n    <string name=\"label_default\">Zadano</string>\n    <string name=\"restore_miui_warning\">Spremanje sigurnosne kopije i obnavljanje možda neće ispravno raditi, ako MIUI optimizacija nije aktivirana.</string>\n    <string name=\"help_translate\">Pomogni prevoditi</string>\n    <string name=\"action_sort_count\">Ukupan broj unosa</string>\n    <string name=\"action_display_language_badge\">Jezik</string>\n    <string name=\"label_warning\">Upozorenje</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ne radi</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instaliraj i pokreni Shizuku za korištenje Shizukua kao instalacijskog programa za proširenja.</string>\n    <string name=\"update_72hour\">Svaka 3 dana</string>\n    <string name=\"ext_update_all\">Aktualiziraj sve</string>\n    <string name=\"ext_install_service_notif\">Instaliranje proširenja …</string>\n    <string name=\"ext_app_info\">Podaci aplikacije</string>\n    <string name=\"connected_to_wifi\">Samo putem Wi-Fi veze</string>\n    <string name=\"download_queue_size_warning\">Upozorenje: velika skupna preuzimanja mogu dovesti do usporavanja izvora i/ili blokiranja Mihonja. Za daljnje informacije dodirni.</string>\n    <string name=\"theme_tealturquoise\">Plavozelena i tirkiz</string>\n    <string name=\"clear_database_source_item_count\">Broj unosa u bazi odataka koje nisu u zbirci: %1$d</string>\n    <string name=\"pref_verbose_logging\">Opširno zapisivanje</string>\n    <string name=\"pref_verbose_logging_summary\">Ispiši opširan zapis u zapisnik sustava (smanjuje performanse aplikacije)</string>\n    <string name=\"backup_info\">Čuvaj sigurnosne kopije i na drugim mjestima. Sigurnosne kopije mogu sadržati osjetljive podatke uključujući sve spremljene lozinke; oprez pri dijeljenju podataka.</string>\n    <string name=\"pref_tablet_ui_mode\">Korisničko sučelje tableta</string>\n    <string name=\"notification_size_warning\">Velika aktualiziranja štete izvorima i mogu usporiti aktualiziranja i povećati potrošnju baterije. Dodirni i saznaj više.</string>\n    <string name=\"pref_low\">Niska</string>\n    <string name=\"label_background_activity\">Aktivnost u pozadini</string>\n    <string name=\"pref_hide_threshold\">Osjetljivost za skrivanje izbornika pri pomicanju</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Izbriši predmemoriju poglavlja tijekom pokretanja aplikacije</string>\n    <string name=\"channel_app_updates\">Aktualiziranja aplikacije</string>\n    <string name=\"database_clean\">Nema se što raščistiti</string>\n    <string name=\"pref_update_only_completely_read\">Preskoči unose s nepročitanim poglavljima</string>\n    <string name=\"enhanced_services\">Poboljšane usluge praćenja</string>\n    <string name=\"enhanced_tracking_info\">Pruža poboljšane značajke za određene izvore. Unosi se automatski prate kada se dodaju u biblioteku.</string>\n    <string name=\"action_track\">Prati</string>\n    <string name=\"privacy_policy\">Politika privatnosti</string>\n    <string name=\"extension_api_error\">Neuspjelo preuzimanje dostupnih proširenja</string>\n    <string name=\"ext_installer_pref\">Instalacijski program</string>\n    <string name=\"ext_installer_legacy\">Stari način</string>\n    <string name=\"pref_highest\">Najviša</string>\n    <string name=\"pref_remove_exclude_categories\">Isključene kategorije</string>\n    <string name=\"pref_high\">Visoka</string>\n    <string name=\"pref_lowest\">Najniža</string>\n    <string name=\"publishing_finished\">Objavljivanje završeno</string>\n    <string name=\"cancelled\">Prekinuto</string>\n    <string name=\"on_hiatus\">Zaustavljeno</string>\n    <string name=\"library_errors_help\">Za pomoć o tome kako popraviti greške aktualiziranja biblioteke, pogledaj %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Spremi kao CBZ arhivu</string>\n    <string name=\"action_show_manga\">Prikaži unos</string>\n    <string name=\"action_display_cover_only_grid\">Samo naslovnice</string>\n    <string name=\"pref_navigate_pan\">Panoramski prikaz širokih slika</string>\n    <string name=\"pref_landscape_zoom\">Automatski zumiraj u široke slike</string>\n    <string name=\"pref_update_only_started\">Preskoči nepokrenute unose</string>\n    <string name=\"skipped_reason_completed\">Preskočeno, jer je serija kompletna</string>\n    <string name=\"skipped_reason_not_started\">Preskočeno, jer nijedno poglavlje nije pročitano</string>\n    <string name=\"skipped_reason_not_caught_up\">Preskočeno, jer postoje nepročitana poglavlja</string>\n    <string name=\"notification_update_error\">Nauspjela aktualiziranja: %1$d</string>\n    <string name=\"learn_more\">Dodirni za daljnje informacije</string>\n    <string name=\"rotation_reverse_portrait\">Preokrenuto uspravno</string>\n    <string name=\"action_move_to_top_all_for_series\">Premjesti seriju na vrh</string>\n    <string name=\"disabled_nav\">Deaktivirano</string>\n    <string name=\"empty_backup_error\">Nema unosa u biblioteci za spremanje u sigurnosnu kopiju</string>\n    <string name=\"split_tall_images_summary\">Poboljšava performanse čitača</string>\n    <string name=\"complete_list\">Potpun popis</string>\n    <string name=\"webview_data_deleted\">WebView podaci su izbrisani</string>\n    <string name=\"pref_clear_webview_data\">Izbriši WebView podatke</string>\n    <string name=\"reading_list\">Popis čitanja</string>\n    <string name=\"wish_list\">Popis želja</string>\n    <string name=\"on_hold_list\">Na popisu čekanja</string>\n    <string name=\"unfinished_list\">Popis nedovršenih</string>\n    <string name=\"download_notifier_split_page_not_found\">Stranica %d nije pronađena tijekom rastavljanja</string>\n    <string name=\"download_ahead_info\">Radi samo ako je trenutačno i sljedeće poglavlje već preuzeto.</string>\n    <string name=\"action_sort_last_manga_update\">Zadnja provjera aktualiziranja</string>\n    <string name=\"network_not_metered\">Samo na mrežom bez ograničenja</string>\n    <string name=\"action_sort_unread_count\">Broj nepročitanih</string>\n    <string name=\"delete_category\">Izbriši kategoriju</string>\n    <string name=\"delete_category_confirmation\">Želiš li izbrisati kategoriju „%s”?</string>\n    <string name=\"auto_download_while_reading\">Automatski preuzmi tijekom čitanja</string>\n    <string name=\"internal_error\">Interna greška: Provjeri zapisnike o prekidu aplikacije za daljnje informacije</string>\n    <string name=\"pref_app_language\">Jezik aplikacije</string>\n    <string name=\"action_close\">Zatvori</string>\n    <string name=\"action_remove_everything\">Ukloni sve</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"ext_info_language\">Jezik</string>\n    <string name=\"ext_info_version\">Verzija</string>\n    <string name=\"popular\">Popularni</string>\n    <string name=\"ext_info_age_rating\">Dobna granica</string>\n    <string name=\"download_ahead\">Preuzmi unaprijed</string>\n    <string name=\"multi_lang\">Višejezičnost</string>\n    <string name=\"missing_storage_permission\">Dozvole za spremište nisu odobrena</string>\n    <string name=\"theme_tidalwave\">Tsunami</string>\n    <string name=\"invalid_location\">Nevažeće mjesto: %s</string>\n    <string name=\"pref_advanced_summary\">Zapisnici iznenadnog gašenja aplikacije, optimizacije baterije</string>\n    <string name=\"label_started\">Započeto</string>\n    <string name=\"label_local\">Lokalno</string>\n    <string name=\"action_search_hint\">Traži …</string>\n    <string name=\"pref_library_summary\">Kategorije, globalno aktualiziranje, prelistavanje poglavlja</string>\n    <string name=\"pref_backup_summary\">Ručne i automatske sigurnosne kopije, količina spremišta</string>\n    <string name=\"label_stats\">Statistike</string>\n    <string name=\"label_downloaded\">Preuzeto</string>\n    <string name=\"action_display_show_continue_reading_button\">Gumb za nastavljanje čitanja</string>\n    <string name=\"pref_appearance_summary\">Tema, format datuma i vremena</string>\n    <string name=\"pref_browse_summary\">Izvori, ekstenzije, globalno pretraživanje</string>\n    <string name=\"pref_reader_summary\">Modus čitanja, prikaz, navigacija</string>\n    <string name=\"pref_downloads_summary\">Automatsko preuzimanje, preuzimanje unaprijed</string>\n    <string name=\"pref_security_summary\">Zaključavanje aplikacije, siguran zaslon</string>\n    <string name=\"pref_tracking_summary\">Jednosmjerna sinkronizacija napretka, poboljšana sinkronizacija</string>\n    <string name=\"action_open_random_manga\">Otvori nasumični unos</string>\n    <string name=\"pref_reset_user_agent_string\">Obnovi standardni izraz korisničkog agenta</string>\n    <string name=\"error_user_agent_string_invalid\">Nevažeći niz korisničkog agenta</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Prisili aplikaciju da ponovno provjeri preuzeta poglavlja</string>\n    <string name=\"pref_user_agent_string\">Zadani niz korisničkog agenta</string>\n    <string name=\"error_user_agent_string_blank\">Niz korisničkog agenta ne može biti prazan</string>\n    <string name=\"pref_invalidate_download_cache\">Ponovo indeksiraj preuzimanja</string>\n    <string name=\"pref_reset_viewer_flags\">Obnovi postavke čitača serija</string>\n    <string name=\"cant_open_last_read_chapter\">Nije moguće otvoriti zadnje čitano poglavlje</string>\n    <string name=\"custom_cover\">Prilagođena naslovnica</string>\n    <string name=\"description_placeholder\">Nema opisa</string>\n    <string name=\"label_titles_section\">Unosi</string>\n    <string name=\"label_titles_in_global_update\">Globalno aktualiziranje</string>\n    <string name=\"label_tracker_section\">Usluge praćenja</string>\n    <string name=\"label_mean_score\">Srednja ocjena</string>\n    <string name=\"label_used\">Korišteno</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"empty_screen\">Pa, ovo je nezgodno</string>\n    <string name=\"unknown_title\">Nepoznat naslov</string>\n    <string name=\"updates_last_update_info\">Zadnje aktualiziranje biblioteke: %s</string>\n    <string name=\"are_you_sure\">Sigurno?</string>\n    <string name=\"crash_screen_description\">Neočekivana greška u aplikaciji %s. Predlažemo da podijeliš zapis o prekidu rada aplikacije u našem kanalu za podršku na Discordu.</string>\n    <string name=\"label_overview_section\">Pregled</string>\n    <string name=\"label_completed_titles\">Dovršene stavke</string>\n    <string name=\"label_read_duration\">Trajanje čitanja</string>\n    <string name=\"label_total_chapters\">Ukupno</string>\n    <string name=\"label_read_chapters\">Pročitano</string>\n    <string name=\"label_tracked_titles\">Praćeni unosi</string>\n    <string name=\"not_applicable\">--</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"source_empty_screen\">Izvor nije pronađen</string>\n    <string name=\"update_already_running\">Jedno aktualiziranje je već u tijeku</string>\n    <string name=\"pref_reset_viewer_flags_error\">Neuspjelo obnavljanje postavki čitača</string>\n    <string name=\"pref_reset_viewer_flags_success\">Sve postavke čitača su obnovljene</string>\n    <string name=\"track_remove_date_conf_title\">Ukloniti datum?</string>\n    <string name=\"track_remove_start_date_conf_text\">Time ćete ukloniti prethodno odabrani datum početka iz %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Time ćete ukloniti prethodno odabrani datum završetka iz %s</string>\n    <string name=\"source_filter_empty_screen\">Nije pronađen instalirani izvor</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Obnavlja modus čitanja i položaj svih serija</string>\n    <string name=\"error_saving_picture\">Pogreška pri spremanju slike</string>\n    <string name=\"crash_screen_restart_application\">Ponovno pokretanje aplikacije</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"not_installed\">Nije instalirano</string>\n    <string name=\"updates_last_update_info_just_now\">Upravo sada</string>\n    <string name=\"fdroid_warning\">F-Droid verzije nisu službeno podržane.\n\\nDodirnite da biste saznali više.</string>\n    <string name=\"download_notifier_cache_renewal\">Provjeravanje preuzimanja</string>\n    <string name=\"update_check_open\">Otvori na GitHubu</string>\n    <string name=\"skipped_reason_not_always_update\">Preskočeno jer serija ne zahtijeva aktualiziranja</string>\n    <string name=\"appwidget_updates_description\">Pogledaj nedavno aktualizirane unose u biblioteci</string>\n    <string name=\"remove_manga\">Uklonit ćeš „%s” iz svoje biblioteke</string>\n    <string name=\"appwidget_unavailable_locked\">Widget nije dostupan kada je zaključavanje aplikacije aktivirano</string>\n    <string name=\"information_no_entries_found\">Nije pronađen nijedan unos u ovoj kategoriji</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nije moguće pronaći putanju datoteke stranice %d</string>\n    <string name=\"action_not_now\">Ne sada</string>\n    <string name=\"pref_library_update_show_tab_badge\">Prikaži broj nepročitanih na ikoni aktualiziranja</string>\n    <string name=\"information_no_manga_category\">Kategorija je prazna</string>\n    <string name=\"copied_to_clipboard_plain\">Kopirano u međuspremnik</string>\n    <string name=\"enhanced_services_not_installed\">Dostupne, ali izvor nije instaliran: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">U tvojoj biblioteci imaš unos s istim imenom.\n\\n\n\\nŽeliš li svejedno nastaviti?</string>\n    <string name=\"pref_skip_dupe_chapters\">Preskoči dupla poglavlja</string>\n    <string name=\"track_error\">%1$s greška: %2$s</string>\n    <string name=\"information_required_plain\">*obavezno</string>\n    <string name=\"pref_hide_in_library_items\">Sakrij unose koji se već nalaze u biblioteci</string>\n    <string name=\"action_copy_to_clipboard\">Kopiraj u međuspremnik</string>\n    <string name=\"action_update_category\">Aktualiziraj katogoriju</string>\n    <string name=\"split_tall_images\">Rastavi visoke slike</string>\n    <string name=\"overlay_header\">Oznake</string>\n    <string name=\"pref_page_rotate\">Prilagodi prikaz širokih stranica okretanjem</string>\n    <string name=\"pref_page_rotate_invert\">Preokreni položaj širokih stranica</string>\n    <string name=\"pref_debug_info\">Informacije o otklanjanju grešaka</string>\n    <string name=\"pref_chapter_swipe_start\">Prelistaj ulijevo</string>\n    <string name=\"pref_double_tap_zoom\">Dodirni dvaput za zumiranje</string>\n    <string name=\"pref_chapter_swipe_end\">Prelistaj udesno</string>\n    <string name=\"action_set_interval\">Postavi interval</string>\n    <string name=\"action_filter_interval_custom\">Prilagođeni interval aktualiziranja</string>\n    <string name=\"manga_display_interval_title\">Procijeni svakih</string>\n    <string name=\"action_sort_next_updated\">Sljedeće očekivano aktualiziranje</string>\n    <string name=\"manga_display_modified_interval_title\">Postavi aktualiziranje svakih</string>\n    <string name=\"action_ok\">U redu</string>\n    <string name=\"pref_update_only_in_release_period\">Predvidi vrijeme sljedećeg izdanja</string>\n    <string name=\"intervals_header\">Intervali</string>\n    <string name=\"track_delete_title\">Ukloniti praćenje %s?</string>\n    <string name=\"skipped_reason_not_in_release_period\">Preskočeno, jer se danas nije očekivalo izdanje</string>\n    <string name=\"track_delete_text\">Ovo će ukloniti lokalno praćenje.</string>\n    <string name=\"track_delete_remote_text\">Također ukloni iz %s</string>\n    <string name=\"delete_downloaded\">Izbriši preuzete</string>\n    <string name=\"has_results\">Ima rezultate</string>\n    <string name=\"syncing_library\">Sinkroniziranje biblioteke</string>\n    <string name=\"library_sync_complete\">Sinkroniziranje biblioteke završeno</string>\n    <string name=\"information_cloudflare_help\">Dodirni ovdje za pomoć s Cloudflareom</string>\n    <string name=\"track_activity_name\">Prijava za uslugu praćenja</string>\n    <string name=\"download_cache_invalidated\">Indeks preuzimanja poništen</string>\n    <string name=\"create_backup_file_error\">Nije bilo moguće stvoriti datoteku sigurnosne kopije</string>\n    <string name=\"unlock_app_title\">Otključaj %s</string>\n    <string name=\"exception_offline\">Ne postoji veza s internetom</string>\n    <string name=\"exception_http\">HTTP %d, provjeri web stranicu u WebView</string>\n    <string name=\"exception_unknown_host\">Nije bilo moguće povezati se s računalom %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Premjesti seriju na kraj</string>\n    <string name=\"pref_relative_format\">Relativne vremenske oznake</string>\n    <string name=\"pref_relative_format_summary\">„%1$s” umjesto „%2$s”</string>\n    <string name=\"notification_updating_progress\">Aktualiziranje biblioteke … (%s)</string>\n    <string name=\"file_null_uri_error\">Nije odabrana nijedna datoteka</string>\n    <string name=\"source_settings\">Postavke izvora</string>\n    <string name=\"app_settings\">Postavke aplikacije</string>\n    <string name=\"label_data_storage\">Podaci i spremište</string>\n    <string name=\"relative_time_span_never\">Nikada</string>\n    <string name=\"pref_flash_page_summ\">Smanjuje artefakte na ekranima s e-tintom</string>\n    <string name=\"last_auto_backup_info\">Zadnja automatska sigurnosna kopija: %s</string>\n    <string name=\"pref_flash_page\">Zabljesni prilikom listanja</string>\n    <string name=\"action_create\">Stvori</string>\n    <string name=\"action_apply\">Primijeni</string>\n    <string name=\"action_revert_to_default\">Obnovi standardne vrijednosti</string>\n    <string name=\"no_scanlators_found\">Nije pronađen nijedan amaterski prevoditelj</string>\n    <string name=\"scanlator\">Amaterski prevoditelj</string>\n    <string name=\"pref_storage_usage\">Korištenje spremišta</string>\n    <string name=\"action_sort_tracker_score\">Rezultat tragača</string>\n    <string name=\"exclude_scanlators\">Isključi amaterske prevoditelje</string>\n    <string name=\"pref_storage_location\">Mjesto spremišta</string>\n    <string name=\"pref_storage_location_info\">Koristi se za automatske sigurnosne kopije, preuzimanje poglavlja i lokalni izvor.</string>\n    <string name=\"action_menu_overflow_description\">Više opcija</string>\n    <string name=\"selected\">Odabrano</string>\n    <string name=\"not_selected\">Neodabrano</string>\n    <string name=\"action_bar_up_description\">Navigiraj prema gore</string>\n    <string name=\"onboarding_storage_action_select\">Odaberi mapu</string>\n    <string name=\"onboarding_action_finish\">Započni</string>\n    <string name=\"onboarding_storage_selection_required\">Moraš odabrati jednu mapu</string>\n    <string name=\"onboarding_permission_notifications\">Dozvola za obavijesti</string>\n    <string name=\"onboarding_permission_install_apps\">Dozvola za instaliranje aplikacija</string>\n    <string name=\"onboarding_action_skip\">Preskoči</string>\n    <string name=\"onboarding_action_next\">Dalje</string>\n    <string name=\"onboarding_permission_install_apps_description\">Za instaliranje izvornih proširenja.</string>\n    <string name=\"onboarding_permission_notifications_description\">Primaj obavijesti o aktualiziranju biblioteke i više.</string>\n    <string name=\"onboarding_permission_action_grant\">Odobri</string>\n    <string name=\"onboarding_heading\">Dobro došao, dobro došla!</string>\n    <string name=\"pref_onboarding_guide\">Vodič za početno pokretanje</string>\n    <string name=\"onboarding_guides_new_user\">Koristiš %s po prvi puta? Preporučujemo da pogledaš vodič za pokretanje.</string>\n    <string name=\"onboarding_guides_returning_user\">Ponovo istalirati %s?</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Izbjegni prekide pri dugotrajnim aktualiziranjima biblioteke, preuzimanjima i obnavljanja sigurnosnih kopija.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Upotreba baterije u pozadini</string>\n    <string name=\"onboarding_description\">Hajdemo najprije postaviti neke stvari. Ako želiš možeš ih kasnije promijeniti u postavkama.</string>\n    <string name=\"no_location_set\">Nije postavljeno mjesto spremišta</string>\n    <string name=\"onboarding_storage_info\">Odaberi mapu u koju će %1$s spremati preuzimanja poglavlja, sigurnosne kopije i drugo.\n\\n\n\\nPreporučujemo koristiti zasebnu mapu.\n\\n\n\\nOdabrana mapa: %2$s</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"ext_permission_install_apps_warning\">Za instaliranje proširenja su potrebne dozvole. Dodirni ovdje za odobrenje.</string>\n    <string name=\"invalid_backup_file_error\">Potpuna greška:</string>\n    <string name=\"label_extension_repos\">Repozitoriji proširenja</string>\n    <string name=\"information_empty_repos\">Nemaš postavljenih reopzitorija.</string>\n    <string name=\"onboarding_storage_help_info\">Aktualiziraš sa starije verzije i ne znaš što odabrati? Potraži informacije u vodiču spremišta.</string>\n    <string name=\"onboarding_storage_help_action\">Vodič spremišta</string>\n    <string name=\"error_repo_exists\">Ovaj repozitorij već postoji!</string>\n    <string name=\"manga_interval_custom_amount\">Prilagođena učestalost aktualiziranja:</string>\n    <string name=\"pref_library_update_smart_update\">Pametno aktualiziranje</string>\n    <string name=\"action_add_repo\">Dodaj repozitorij</string>\n    <string name=\"action_delete_repo\">Izbriši repozitorij</string>\n    <string name=\"label_add_repo_input\">URL repozitorija</string>\n    <string name=\"action_add_repo_message\">Dodaj dodatne repozitorije u Mihon. To bi trebao biti URL koji završava s „index.min.json”.</string>\n    <string name=\"invalid_repo_name\">Neispravan URL repozitorija</string>\n    <string name=\"ext_revoke_trust\">Opozovi pouzdana nepoznata proširenja</string>\n    <string name=\"delete_repo_confirmation\">Želiš li izbrisati repozitorij „%s”?</string>\n    <string name=\"action_open_repo\">Otvori repozitorij izvora</string>\n    <string name=\"private_settings\">Omogući osjetljive postavke (kao što su tokeni za prijavu za usluge praćenja)</string>\n    <string name=\"manga_interval_expected_update\">Predviđa se da će nova poglavlja biti izdana za oko %1$s, provjera se svakih %2$s.</string>\n    <string name=\"manga_interval_expected_update_soon\">Uskoro</string>\n    <string name=\"available_disk_space_info\">Dostupno: %1$s / Ukupno: %2$s</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Deaktiviraj smanjivanje zumiranja</string>\n    <string name=\"pref_display_profile\">Prilagođeni profil prikaza</string>\n    <string name=\"label_upcoming\">Predstojeći</string>\n    <string name=\"action_migrate_duplicate\">Migriraj postojeći unos</string>\n    <string name=\"action_add_anyway\">Svejedno dodaj</string>\n    <string name=\"upcoming_calendar_prev\">Prethodni mjesec</string>\n    <string name=\"action_replace_repo\">Zamijeni</string>\n    <string name=\"upcoming_calendar_next\">Sljedeći mjesec</string>\n    <string name=\"action_view_upcoming\">Pogledaj nadolazeća aktualizirane verzije</string>\n    <string name=\"upcoming_guide\">Vodič za nadolazeće verzije</string>\n    <string name=\"action_replace_repo_title\">Digitalni otisak prsta za potpisivanje već postoji</string>\n    <string name=\"action_replace_repo_message\">Repozitorij %1$s ima isti digitalni otisak ključa za potpisivanje kao %2$s.\n\\nAko se to očekuje, %2$s će se zamijeniti, u suprotnom se obrati svom održavatelju repozitorija.</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Neuspjelo dobivanje trajnog pristupa mapi. Aplikacija se može ponašati neočekivano.</string>\n    <string name=\"action_copy_link\">Kopiraj poveznicu</string>\n    <string name=\"pref_flash_duration\">Trajanje bljeskalice</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_with\">Zabljesni sa</string>\n    <string name=\"pref_flash_style_black\">Crna</string>\n    <string name=\"pref_flash_style_white_black\">Bijela i crna</string>\n    <string name=\"pref_flash_page_interval\">Zabljesni svakih</string>\n    <string name=\"pref_flash_style_white\">Bijela</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Preskoči preuzimanje duplih pročitanih poglavlja</string>\n    <string name=\"invalid_backup_file_json\">JSON sigurnosna kopija nije podržana</string>\n    <string name=\"extensionRepo_settings\">Repozitoriji proširenja</string>\n    <string name=\"manga_interval_expected_update_null\">Ovaj je manga dovršen ili ne postoji procijenjeni datum izdanja.</string>\n    <string name=\"invalid_backup_file_unknown\">Sigurnosna kopija je pokvarena</string>\n    <string name=\"non_library_settings\">Svi pročitani unosi</string>\n    <string name=\"action_sort_random\">Nasumce</string>\n    <string name=\"onboarding_permission_crashlytics\">Pošalji zapis o prekidu aplikacije</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Šalji anonimne zapise o prekidu aplikacije programerima.</string>\n    <string name=\"onboarding_permission_analytics\">Dozvoli analizu</string>\n    <string name=\"onboarding_permission_analytics_description\">Šalji anonimne podatke o korištenju aplikacije u svrhu poboljšanja njenih funkcija.</string>\n    <string name=\"pref_firebase\">Analiza i zapisi o prekidima aplikacije</string>\n    <string name=\"firebase_summary\">Slanje zapisa o prekidima rada aplikacije i analitike omogućit će nam identificirati i riješiti probleme, poboljšati performancu i prilagoditi buduća aktualiziranja kako bi što bolje odgovarala tvojim potrebama</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aktualiziraj napredak kada je označen kao pročitan</string>\n    <string name=\"confirm_tracker_update\">Aktualizirati praćenja na poglavlje %d?</string>\n    <string name=\"trackers_updated_summary\">Praćenja aktualizirana na poglavlje %d</string>\n    <string name=\"pref_security\">Sigurnost</string>\n    <string name=\"ext_remove\">Ukloni</string>\n    <string name=\"ext_confirm_remove\">Ukloniti proširenje?</string>\n    <string name=\"remove_private_extension_message\">Stvarno želiš ukloniti proširenje „%s”?</string>\n    <string name=\"add_repo_confirmation\">Želiš li dodati repozitorij „%s”?</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Ako čitač učita praznu sliku, postupno smanji prag.\\nOdabrano: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Prilagođeni hardverski prag bitmapa</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Standardno (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Utječe na performansu. Aktiviraj samo ako smanjenje praga bitmapa ne riješi probleme s praznim slikama</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/hu/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Egy új bővítményfrissítés érhető el</item>\n        <item quantity=\"other\">%d bővítményfrissítés érhető el</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s perc múlva</item>\n        <item quantity=\"other\">%1$s perc múlva</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategória</item>\n        <item quantity=\"other\">%d kategória</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s fejezet</item>\n        <item quantity=\"other\">%1$s fejezet</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">1 új fejezet</item>\n        <item quantity=\"other\">%1$d új fejezet</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Tegnap</item>\n        <item quantity=\"other\">%1$d napja</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d nyilvántartó</item>\n        <item quantity=\"other\">%d nyilvántartó</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d elemnek</item>\n        <item quantity=\"other\">%d elemnek</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d fejezet kihagyása, hiányzik a forrás, vagy ki lett szűrve</item>\n        <item quantity=\"other\">%d fejezet kihagyása, hiányoznak a források, vagy ki lettek szűrve</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s van hátra</item>\n        <item quantity=\"other\">%1$s van hátra</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Befejezve %1$s alatt, %2$s hibával</item>\n        <item quantity=\"other\">Befejezve %1$s alatt, %2$s hibával</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">%1$s fejezet és még 1</item>\n        <item quantity=\"other\">%1$s fejezet és még %2$d</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Következő olvasatlan fejezet</item>\n        <item quantity=\"other\">Következő %d olvasatlan fejezet</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Következő fejezet</item>\n        <item quantity=\"other\">Következő %d fejezet</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s fejezet hiányzik</item>\n        <item quantity=\"other\">%1$s fejezet hiányzik</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 nap</item>\n        <item quantity=\"other\">%d nap</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Holnap</item>\n        <item quantity=\"other\">%1$d nap múlva</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repo</item>\n        <item quantity=\"other\">%d repok</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 oldal</item>\n        <item quantity=\"other\">%1$s oldal</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/hu/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Név</string>\n    <string name=\"categories\">Kategóriák</string>\n    <string name=\"manga\">Könyvtári elemek</string>\n    <string name=\"chapters\">Fejezetek</string>\n    <string name=\"track\">Nyilvántartás</string>\n    <string name=\"history\">Előzmények</string>\n    <string name=\"label_settings\">Beállítások</string>\n    <string name=\"label_recent_manga\">Előzmények</string>\n    <string name=\"label_backup\">Biztonsági mentés és visszaállítás</string>\n    <string name=\"action_settings\">Beállítások</string>\n    <string name=\"action_search\">Keresés</string>\n    <string name=\"action_remove\">Eltávolítás</string>\n    <string name=\"action_open_in_browser\">Megnyitás böngészőben</string>\n    <string name=\"action_display_grid\">Szűk rács</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_install\">Telepítés</string>\n    <string name=\"action_share\">Megosztás</string>\n    <string name=\"action_save\">Mentés</string>\n    <string name=\"action_reset\">Visszaállítás</string>\n    <string name=\"action_undo\">Visszavonás</string>\n    <string name=\"loading\">Betöltés…</string>\n    <string name=\"pref_category_general\">Általános</string>\n    <string name=\"pref_category_reader\">Olvasó</string>\n    <string name=\"pref_category_downloads\">Letöltések</string>\n    <string name=\"pref_category_tracking\">Nyilvántartás</string>\n    <string name=\"pref_category_advanced\">Speciális</string>\n    <string name=\"pref_category_about\">Névjegy</string>\n    <string name=\"pref_library_columns\">Rács mérete</string>\n    <string name=\"portrait\">Álló</string>\n    <string name=\"landscape\">Fekvő</string>\n    <string name=\"pref_library_update_interval\">Frissítések gyakorisága</string>\n    <string name=\"update_never\">Ki</string>\n    <string name=\"update_6hour\">6 óránként</string>\n    <string name=\"update_12hour\">12 óránként</string>\n    <string name=\"update_24hour\">Naponta</string>\n    <string name=\"update_48hour\">2 naponta</string>\n    <string name=\"update_weekly\">Hetente</string>\n    <string name=\"all\">Összes</string>\n    <string name=\"pref_library_update_restriction\">Frissítések korlátozása</string>\n    <string name=\"charging\">Töltés közben</string>\n    <string name=\"pref_update_only_non_completed\">\\\"Befejezett\\\" állapotú elemek kihagyása</string>\n    <string name=\"default_category\">Alapértelmezett kategória</string>\n    <string name=\"default_category_summary\">Mindig kérdezzen rá</string>\n    <string name=\"pref_fullscreen\">Teljes képernyő</string>\n    <string name=\"pref_show_page_number\">Oldalszám megjelenítése</string>\n    <string name=\"pref_keep_screen_on\">Képernyő bekapcsolva tartása</string>\n    <string name=\"pref_reader_navigation\">Lapozás</string>\n    <string name=\"pref_read_with_volume_keys\">Hangerőszabályzó gombokkal</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Gombok felcserélése</string>\n    <string name=\"pref_reader_theme\">Háttérszín</string>\n    <string name=\"version\">Verzió</string>\n    <string name=\"pref_enable_acra\">Összeomlás-jelentések küldése</string>\n    <string name=\"completed\">Befejezett</string>\n    <string name=\"dropped\">Eldobva</string>\n    <string name=\"plan_to_read\">Tervezett</string>\n    <string name=\"score\">Értékelés</string>\n    <string name=\"title\">Cím</string>\n    <string name=\"status\">Állapot</string>\n    <string name=\"chapter_progress\">%1$d. oldal</string>\n    <string name=\"no_next_chapter\">Nem található a következő fejezet</string>\n    <string name=\"download_notifier_no_network\">A hálózat nem érhető el</string>\n    <string name=\"label_download_queue\">Letöltési sor</string>\n    <string name=\"label_library\">Könyvtár</string>\n    <string name=\"label_recent_updates\">Frissítések</string>\n    <string name=\"action_filter\">Szűrők</string>\n    <string name=\"action_filter_bookmarked\">Könyvjelzőzve</string>\n    <string name=\"action_filter_unread\">Olvasatlan</string>\n    <string name=\"action_filter_empty\">Szűrők eltávolítása</string>\n    <string name=\"action_sort_alpha\">Betűrendben</string>\n    <string name=\"action_sort_total\">Fejezetek száma</string>\n    <string name=\"action_sort_last_read\">Legutóbb olvasott</string>\n    <string name=\"action_global_search\">Globális keresés</string>\n    <string name=\"action_mark_as_read\">Olvasottnak jelölés</string>\n    <string name=\"action_mark_as_unread\">Olvasatlannak jelölés</string>\n    <string name=\"action_mark_previous_as_read\">Előző olvasottnak jelölése</string>\n    <string name=\"action_download\">Letöltés</string>\n    <string name=\"action_bookmark\">Fejezet könyvjelzőzése</string>\n    <string name=\"action_remove_bookmark\">Fejezet eltávolítása a könyvjelzők közül</string>\n    <string name=\"action_delete\">Törlés</string>\n    <string name=\"action_update_library\">Könyvtár frissítése</string>\n    <string name=\"action_edit\">Szerkesztés</string>\n    <string name=\"action_add\">Hozzáadás</string>\n    <string name=\"action_add_category\">Kategória hozzáadása</string>\n    <string name=\"action_edit_categories\">Kategóriák szerkesztése</string>\n    <string name=\"action_rename_category\">Kategória átnevezése</string>\n    <string name=\"action_move_category\">Kategóriák beállítása</string>\n    <string name=\"action_edit_cover\">Borító szerkesztése</string>\n    <string name=\"action_pause\">Szüneteltetés</string>\n    <string name=\"action_previous_chapter\">Előző fejezet</string>\n    <string name=\"action_next_chapter\">Következő fejezet</string>\n    <string name=\"action_retry\">Újra</string>\n    <string name=\"action_resume\">Folytatás</string>\n    <string name=\"action_display_mode\">Megjelenítési mód</string>\n    <string name=\"action_display\">Megjelenés</string>\n    <string name=\"action_sort\">Rendezés</string>\n    <string name=\"action_select_all\">Összes kijelölése</string>\n    <string name=\"action_cancel\">Mégse</string>\n    <string name=\"action_open_log\">Napló megnyitása</string>\n    <string name=\"action_restore\">Visszaállítás</string>\n    <string name=\"app_not_available\">Az app nem elérhető</string>\n    <string name=\"pref_auto_update_manga_sync\">Olvasás után a fejezetek haladásának frissítése</string>\n    <string name=\"pref_page_transitions\">Áttűnés lapozáskor</string>\n    <string name=\"pref_crop_borders\">Szegélyek vágása</string>\n    <string name=\"pref_custom_brightness\">Egyéni fényerő</string>\n    <string name=\"pref_custom_color_filter\">Egyéni színprofil</string>\n    <string name=\"white_background\">Fehér</string>\n    <string name=\"black_background\">Fekete</string>\n    <string name=\"pref_viewer_type\">Alapértelmezett olvasás mód</string>\n    <string name=\"left_to_right_viewer\">Lapozott (balról jobbra)</string>\n    <string name=\"right_to_left_viewer\">Lapozott (jobbról balra)</string>\n    <string name=\"vertical_viewer\">Lapozott (függőlegesen)</string>\n    <string name=\"webtoon_viewer\">Hosszú szalag</string>\n    <string name=\"scale_type_fit_screen\">Képernyőhöz igazítás</string>\n    <string name=\"label_migration\">Áttelepítés</string>\n    <string name=\"label_extensions\">Bővítmények</string>\n    <string name=\"ext_untrusted\">Nem megbízható</string>\n    <string name=\"ext_uninstall\">Eltávolítás</string>\n    <string name=\"label_extension_info\">Bővítmény információ</string>\n    <string name=\"ext_update\">Frissítés</string>\n    <string name=\"ext_install\">Telepítés</string>\n    <string name=\"ext_pending\">Függőben</string>\n    <string name=\"ext_downloading\">Letöltés</string>\n    <string name=\"ext_installing\">Telepítés</string>\n    <string name=\"ext_installed\">Telepítve</string>\n    <string name=\"action_open_in_web_view\">Megnyitás WebView-ben</string>\n    <string name=\"label_help\">Segítség</string>\n    <string name=\"label_downloaded_only\">Csak letöltött</string>\n    <string name=\"label_more\">Több</string>\n    <string name=\"label_sources\">Források</string>\n    <string name=\"pref_date_format\">Dátum formátum</string>\n    <string name=\"theme_dark\">Sötét</string>\n    <string name=\"theme_light\">Világos</string>\n    <string name=\"pref_category_library\">Könyvtár</string>\n    <string name=\"action_webview_refresh\">Frissítés</string>\n    <string name=\"action_webview_forward\">Előre</string>\n    <string name=\"action_webview_back\">Vissza</string>\n    <string name=\"action_oldest\">Legrégebbi</string>\n    <string name=\"action_newest\">Legújabb</string>\n    <string name=\"action_sort_latest_chapter\">Legújabb fejezet</string>\n    <string name=\"action_display_download_badge\">Letöltött fejezetek</string>\n    <string name=\"action_migrate\">Áttelepítés</string>\n    <string name=\"action_start\">Kezdés</string>\n    <string name=\"action_view_chapters\">Fejezetek megtekintése</string>\n    <string name=\"action_disable_all\">Összes kikapcsolása</string>\n    <string name=\"action_enable_all\">Összes engedélyezése</string>\n    <string name=\"action_select_inverse\">Kiválasztás megfordítása</string>\n    <string name=\"action_menu\">Menü</string>\n    <string name=\"information_empty_library\">A könyvtárad üres</string>\n    <string name=\"information_no_recent\">Nincs új frissítés</string>\n    <string name=\"information_no_downloads\">Nincs letöltés folyamatban</string>\n    <string name=\"channel_ext_updates\">Bővítményfrissítések</string>\n    <string name=\"channel_new_chapters\">Fejezetfrissítések</string>\n    <string name=\"channel_common\">Gyakori</string>\n    <string name=\"download_notifier_download_paused\">Letöltés szüneteltetve</string>\n    <string name=\"download_notifier_text_only_wifi\">Nincs Wi-Fi kapcsolat</string>\n    <string name=\"download_notifier_unknown_error\">Egy váratlan hiba miatt nem sikerült letölteni a fejezetet</string>\n    <string name=\"download_notifier_title_error\">Hiba</string>\n    <string name=\"information_webview_outdated\">A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást</string>\n    <string name=\"update_check_notification_update_available\">Új verzió érhető el!</string>\n    <string name=\"update_check_notification_download_error\">Letöltési hiba</string>\n    <string name=\"update_check_notification_download_complete\">Érints meg a telepítéshez</string>\n    <string name=\"email\">E-mail-cím</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) források</string>\n    <string name=\"show_chapter_number\">Fejezetszám</string>\n    <string name=\"scale_type_original_size\">Eredeti méret</string>\n    <string name=\"last_read_chapter\">Utoljára olvasott fejezet</string>\n    <string name=\"lock_never\">Soha</string>\n    <string name=\"login\">Bejelentkezés</string>\n    <string name=\"manga_info_expand\">Több</string>\n    <string name=\"manga_info_collapse\">Kevesebb</string>\n    <string name=\"hide_notification_content\">Értesítés tartalmának elrejtése</string>\n    <string name=\"secure_screen_summary\">Az alkalmazás tartalmának elrejtése az alkalmazások közötti váltáskor és a képernyőképek készítésének blokkolása</string>\n    <string name=\"lock_always\">Mindig</string>\n    <string name=\"pref_category_security\">Biztonság</string>\n    <string name=\"pref_manage_notifications\">Értesítések kezelése</string>\n    <string name=\"theme_system\">Rendszer</string>\n    <string name=\"pref_category_theme\">Téma</string>\n    <string name=\"action_move_to_bottom\">Ugrás legalulra</string>\n    <string name=\"action_move_to_top\">Ugrás legfelülre</string>\n    <string name=\"action_search_settings\">Keresési beállítások</string>\n    <string name=\"action_sort_date_added\">Hozzáadás dátuma</string>\n    <string name=\"untrusted_extension\">Nem megbízható bővítmény</string>\n    <string name=\"ext_obsolete\">Elavult</string>\n    <string name=\"ext_updates_pending\">Függőben lévő frissítések</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Új borító és részletek keresése a könyvtár frissítésekor</string>\n    <string name=\"pref_library_update_refresh_metadata\">Metaadatokat frissítse automatikusan</string>\n    <string name=\"pref_category_library_update\">Minden frissítése</string>\n    <string name=\"pref_category_display\">Megjelenés</string>\n    <string name=\"parental_controls_info\">Ez nem akadályozza meg a nem hivatalos vagy az esetlegesen helytelenül megjelölt bővítményeket a 18+-os tartalmak megjelenítésétől az alkalmazáson belül.</string>\n    <string name=\"pref_show_nsfw_source\">Megjelenítés a forrás- és kiterjesztéseklistában</string>\n    <string name=\"pref_show_reading_mode_summary\">Rövid ideig mutassa a jelenlegi módot az olvasó megnyitásakor</string>\n    <string name=\"pref_show_reading_mode\">Olvasó mód mutatása</string>\n    <string name=\"ext_nsfw_warning\">Tartalmazhat felnőtt (18+) tartalmat</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"obsolete_extension_message\">Ez a bővítmény nem elérhető többé. Előfordulhat, hogy nem működik megfelelően, és problémákat okozhat az alkalmazásban. Az eltávolítása javasolt.</string>\n    <string name=\"add_to_library\">Könyvtárhoz adás</string>\n    <string name=\"unknown_status\">Ismeretlen állapot</string>\n    <string name=\"unknown_author\">Ismeretlen szerző</string>\n    <string name=\"unknown\">Ismeretlen</string>\n    <string name=\"login_success\">Bejelentkezve</string>\n    <string name=\"remove_from_library\">Eltávolítás a könyvtárból</string>\n    <string name=\"in_library\">Könyvtárban</string>\n    <string name=\"pref_category_reading\">Olvasás</string>\n    <string name=\"label_data\">Adat</string>\n    <string name=\"backup_created\">Biztonsági mentés létrehozva</string>\n    <string name=\"information_empty_category\">Nincsenek kategóriái. Érintse meg a plusz gombot, hogy létrehozzon egyet a könyvtára rendezéséhez.</string>\n    <string name=\"pinned_sources\">Kitűzött</string>\n    <string name=\"other_source\">Egyéb</string>\n    <string name=\"manga_tracking_tab\">Nyilvántartás</string>\n    <string name=\"copied_to_clipboard\">Vágólapra másolva:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">Törli a kijelölt fejezeteket?</string>\n    <string name=\"spen_previous_page\">Előző oldal</string>\n    <string name=\"chapter_error\">Hiba</string>\n    <string name=\"website\">Weboldal</string>\n    <string name=\"check_for_updates\">Frissítések keresése</string>\n    <string name=\"licenses\">Nyílt forráskódú licenc</string>\n    <string name=\"tabs_header\">Lapok</string>\n    <string name=\"manga_from_library\">Manga a könyvtárból</string>\n    <string name=\"nav_zone_prev\">Előző</string>\n    <string name=\"notification_chapters_single\">%1$s. fejezet</string>\n    <string name=\"cover_updated\">Borító frissítve</string>\n    <string name=\"set_as_cover\">Beállítás borítóként</string>\n    <string name=\"custom_filter\">Egyedi szűrő</string>\n    <string name=\"manga_removed_library\">Eltávolítva a könyvtárból</string>\n    <string name=\"manga_added_library\">Könyvtárhoz adva</string>\n    <string name=\"spen_next_page\">Következő oldal</string>\n    <string name=\"channel_errors\">Hibák</string>\n    <string name=\"channel_complete\">Befejezve</string>\n    <string name=\"channel_progress\">Előrehaladás</string>\n    <string name=\"zoom_start_center\">Központ</string>\n    <string name=\"zoom_start_right\">Jobb</string>\n    <string name=\"zoom_start_left\">Bal</string>\n    <string name=\"tapping_inverted_both\">Mindkettő</string>\n    <string name=\"tapping_inverted_vertical\">Függőleges</string>\n    <string name=\"tapping_inverted_horizontal\">Vízszintes</string>\n    <string name=\"information_no_recent_manga\">Semmit nem olvasott a közelmúltban</string>\n    <string name=\"nav_zone_right\">Jobb</string>\n    <string name=\"nav_zone_left\">Bal</string>\n    <string name=\"nav_zone_next\">Következő</string>\n    <string name=\"right_and_left_nav\">Jobb és bal</string>\n    <string name=\"copy\">Másolás</string>\n    <string name=\"migrate\">Áttelepítés</string>\n    <string name=\"display_mode_chapter\">%1$s. fejezet</string>\n    <string name=\"information_webview_required\">A Mihon működéséhez WebView szükséges</string>\n    <string name=\"notification_chapters_multiple\">%1$s fejezet</string>\n    <string name=\"notification_chapters_single_and_more\">%1$s. fejezet és további %2$d</string>\n    <string name=\"share_page_info\">%1$s:%2$s, %3$d. oldal</string>\n    <string name=\"repeating\">Újraolvasás</string>\n    <string name=\"confirm_delete_chapters\">Biztosan törölni akarja a kijelölt fejezeteket?</string>\n    <string name=\"download_unread\">Olvasatlan</string>\n    <string name=\"chapter_paused\">Szünetel</string>\n    <string name=\"snack_add_to_library\">Manga könyvtárhoz adása?</string>\n    <string name=\"source_not_installed\">Forrás nincs telepítve: %1$s</string>\n    <string name=\"ongoing\">Folyamatban van</string>\n    <string name=\"last_used_source\">Utoljára használt</string>\n    <string name=\"downloaded_chapters\">Letöltött fejezetek</string>\n    <string name=\"updating_category\">Kategóriák frissítése</string>\n    <string name=\"unknown_error\">Ismeretlen hiba</string>\n    <string name=\"logout_success\">Mostmár ki van jelentkezve</string>\n    <string name=\"logout\">Kijelentkezés</string>\n    <string name=\"password\">Jelszó</string>\n    <string name=\"username\">Felhasználónév</string>\n    <string name=\"cookies_cleared\">Sütik törölve</string>\n    <string name=\"requires_app_restart\">A változtatások érvénybe lépéséhez újra kell indítania az applikációt</string>\n    <string name=\"invalid_backup_file\">Érvénytelen biztonsági mentési fájl:</string>\n    <string name=\"edge_nav\">Él</string>\n    <string name=\"updating_library\">Könyvtár frissítése</string>\n    <string name=\"no_chapters_error\">Nem található fejezet</string>\n    <string name=\"licensed\">Licenszelt</string>\n    <string name=\"untrusted_extension_message\">Egy rosszindulatú bővítmény hozzáférhet a tárolt bejelentkezési adatokhoz, vagy tetszőleges kódot futtathat.\n\\n\n\\nHa megbízik ebben a bővítményben, elfogadja ezeket a kockázatokat.</string>\n    <string name=\"ext_trust\">Bizalom</string>\n    <string name=\"exclude\">Tiltott: %s</string>\n    <string name=\"include\">Kedvelt: %s</string>\n    <string name=\"none\">Semmi</string>\n    <string name=\"pref_download_new_categories_details\">Elemek a tiltott kategóriákban nem lesznek letöltve, még akkor se, ha a kedvelt kategóriában is vannak.</string>\n    <string name=\"pref_library_update_categories_details\">Elemek a tiltott kategóriákban nem lesznek frissítve, még akkor se, ha a kedvelt kategóriákban is vannak.</string>\n    <string name=\"secure_screen\">Biztonságos képernyő</string>\n    <string name=\"lock_when_idle\">Zárás tétlen állapotban</string>\n    <string name=\"lock_with_biometrics\">Biometrikus zár</string>\n    <string name=\"action_show_errors\">Hibák mutatása</string>\n    <string name=\"logout_title\">Kijelentkezel a következőből: %1$s?</string>\n    <string name=\"browse\">Böngészés</string>\n    <string name=\"action_desc\">Csökkenő</string>\n    <string name=\"action_asc\">Növekvő</string>\n    <string name=\"action_order_by_chapter_number\">Fejezet száma szerint</string>\n    <string name=\"action_order_by_upload_date\">Feltöltési idő szerint</string>\n    <string name=\"cancel_all_for_series\">Mégse az összesre a sorozatból</string>\n    <string name=\"action_cancel_all\">Mégse az összesre</string>\n    <string name=\"action_unpin\">Tűzés visszavonása</string>\n    <string name=\"action_pin\">Kitűzés</string>\n    <string name=\"action_disable\">Kikapcsolás</string>\n    <string name=\"action_display_show_number_of_items\">Tárgyak számának mutatása</string>\n    <string name=\"action_display_show_tabs\">Kategória fülek mutatása</string>\n    <string name=\"action_display_comfortable_grid\">Kényelmes rács</string>\n    <string name=\"action_sort_chapter_fetch_date\">Lekérési dátum</string>\n    <string name=\"restrictions\">Korlátozások: %s</string>\n    <string name=\"pref_cutout_short\">Tartalom mutatása a levágott területen</string>\n    <string name=\"pref_dual_page_invert_summary\">Ha a szétvágott oldalak elhelyezése nem egyezik az olvasás irányával</string>\n    <string name=\"pref_dual_page_invert\">Szétvágott oldalak elhelyezésének fordítása</string>\n    <string name=\"pref_dual_page_split\">Szétvágása a széles oldalaknak</string>\n    <string name=\"pref_show_navigation_mode_summary\">Pillanatnyilag megjelníti, amikor az olvasó meg van nyitva</string>\n    <string name=\"pref_show_navigation_mode\">Érintési zónák átfedésének mutatása</string>\n    <string name=\"ext_app_info\">Alkalmazás információ</string>\n    <string name=\"categorized_display_settings\">Kategóriakénti beállítások rendezéshez</string>\n    <string name=\"theme_tako\">Polip</string>\n    <string name=\"theme_strawberrydaiquiri\">Eper koktél</string>\n    <string name=\"relative_time_today\">Ma</string>\n    <string name=\"pref_dark_theme_pure_black\">Teljesen fekete sötét mód</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Jin és Jang</string>\n    <string name=\"theme_tealturquoise\">Cián-zöld és türkiz</string>\n    <string name=\"theme_midnightdusk\">Éjfél szürkület</string>\n    <string name=\"theme_greenapple\">Zöldalma</string>\n    <string name=\"theme_monet\">Dinamikus</string>\n    <string name=\"pref_app_theme\">Alkalmazás témája</string>\n    <string name=\"pref_category_appearance\">Kinézet</string>\n    <string name=\"action_start_downloading_now\">Letöltés elkezdése most</string>\n    <string name=\"action_display_local_badge\">Helyi forrás</string>\n    <string name=\"action_filter_tracked\">Nyilvántartva</string>\n    <string name=\"confirm_lock_change\">Hitelesítsd magad a változtatás elfogadásához</string>\n    <string name=\"label_default\">Alapértelmezett</string>\n    <string name=\"services\">Szolgáltatások</string>\n    <string name=\"tracking_guide\">Nyilvántartási útmutató</string>\n    <string name=\"pref_download_new\">Új fejezetek letöltése</string>\n    <string name=\"pref_category_auto_download\">Automatikus letöltés</string>\n    <string name=\"fifth_to_last\">Ötödik utoljára olvasott fejezet</string>\n    <string name=\"fourth_to_last\">Negyedik utoljára olvasott fejezet</string>\n    <string name=\"third_to_last\">Harmadik utoljára olvasott fejezet</string>\n    <string name=\"second_to_last\">Második utoljára olvasott fejezet</string>\n    <string name=\"disabled\">Kikapcsolva</string>\n    <string name=\"pref_remove_exclude_categories\">Tiltott kategóriák</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Könyvjelzőzött fejezetek törlésének engedélyezése</string>\n    <string name=\"pref_remove_after_read\">Automatikus törlés olvasás után</string>\n    <string name=\"pref_remove_after_marked_as_read\">Olvasottnak jelölés után</string>\n    <string name=\"pref_category_delete_chapters\">Fejezetek törlése</string>\n    <string name=\"pref_lowest\">Legalacsonyabb</string>\n    <string name=\"pref_low\">Alacsony</string>\n    <string name=\"pref_high\">Magas</string>\n    <string name=\"pref_highest\">Legmagasabb</string>\n    <string name=\"pref_hide_threshold\">Görgetés közbeni menü-elrejtés érzékenysége</string>\n    <string name=\"pref_webtoon_side_padding\">Bélés oldalon</string>\n    <string name=\"pref_category_reading_mode\">Olvasási mód</string>\n    <string name=\"pref_always_show_chapter_transition\">Mindig mutasson fejezet áttűnést</string>\n    <string name=\"color_filter_a_value\">Áttetszőség</string>\n    <string name=\"color_filter_b_value\">Kék</string>\n    <string name=\"color_filter_g_value\">Zöld</string>\n    <string name=\"color_filter_r_value\">Piros</string>\n    <string name=\"rotation_force_landscape\">Lezárt fekvő</string>\n    <string name=\"rotation_force_portrait\">Lezárt álló</string>\n    <string name=\"rotation_landscape\">Fekvő</string>\n    <string name=\"rotation_portrait\">Álló</string>\n    <string name=\"rotation_free\">Szabad</string>\n    <string name=\"rotation_type\">Forgatás típus</string>\n    <string name=\"pref_rotation_type\">Alapértelmezett forgatás típus</string>\n    <string name=\"double_tap_anim_speed_fast\">Gyors</string>\n    <string name=\"double_tap_anim_speed_normal\">Normál</string>\n    <string name=\"double_tap_anim_speed_0\">Nincs animáció</string>\n    <string name=\"zoom_start_automatic\">Automatikus</string>\n    <string name=\"pref_zoom_start\">Nagyítás kezdő pozíciója</string>\n    <string name=\"scale_type_smart_fit\">Okos igazítás</string>\n    <string name=\"scale_type_fit_height\">Magassághoz igazítás</string>\n    <string name=\"scale_type_fit_width\">Szélességhez igazítás</string>\n    <string name=\"scale_type_stretch\">Kiterjesztés</string>\n    <string name=\"kindlish_nav\">Kindle-féle</string>\n    <string name=\"l_nav\">L alakú</string>\n    <string name=\"pref_image_scale_type\">Skálázási típus</string>\n    <string name=\"pref_viewer_nav\">Érintési zónák</string>\n    <string name=\"pager_viewer\">Lapozott</string>\n    <string name=\"vertical_plus_viewer\">Hosszú szalag lyukakkal</string>\n    <string name=\"automatic_background\">Automatikus</string>\n    <string name=\"gray_background\">Szürke</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Mappák létrehozása elemek címe szerint</string>\n    <string name=\"pref_create_folder_per_manga\">Mentse a lapokat külön mappákba</string>\n    <string name=\"pref_read_with_long_tap\">Cselekmények mutatása hosszú koppintáskor</string>\n    <string name=\"pref_reader_actions\">Műveletek</string>\n    <string name=\"tapping_inverted_none\">Egyik sem</string>\n    <string name=\"pref_read_with_tapping_inverted\">Érintési zónák fordítása</string>\n    <string name=\"pref_skip_filtered_chapters\">Szűrt fejezetek kihagyása</string>\n    <string name=\"pref_skip_read_chapters\">Olvasottnak jelölt fejezetek átugrása</string>\n    <string name=\"filter_mode_darken\">Égetés / Sötétítés</string>\n    <string name=\"filter_mode_lighten\">Fakítás / Világosítás</string>\n    <string name=\"filter_mode_screen\">Szendvicsnegatív</string>\n    <string name=\"filter_mode_multiply\">Szendvicspozitív</string>\n    <string name=\"filter_mode_overlay\">Átfedés</string>\n    <string name=\"pref_color_filter_mode\">Színprofil keverés módja</string>\n    <string name=\"pref_inverted_colors\">Fordított</string>\n    <string name=\"pref_grayscale\">Szürkeárnyalatos</string>\n    <string name=\"off\">Ki</string>\n    <string name=\"on\">Be</string>\n    <string name=\"pref_double_tap_anim_speed\">Dupla koppintás animációjának sebessége</string>\n    <string name=\"ext_installer_pref\">Telepítő</string>\n    <string name=\"ext_install_service_notif\">Bővítmény telepítése…</string>\n    <string name=\"action_sort_count\">Összes elem</string>\n    <string name=\"ext_update_all\">Az összes frissítése</string>\n    <string name=\"action_display_language_badge\">Nyelv</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Telepítsd és indítsd el a Shizukut, hogy kiegészítő telepítőként használd.</string>\n    <string name=\"enhanced_services\">Továbbfejlesztett szolgáltatások</string>\n    <string name=\"label_warning\">Figyelmeztetés</string>\n    <string name=\"ext_installer_shizuku_stopped\">A Shizuku nem fut</string>\n    <string name=\"ext_installer_legacy\">Régi</string>\n    <string name=\"tracking_info\">Egyirányú szinkronizálás, hogy a fejezetben való előrehaladás frissítve legyen a követési szolgáltatásokban. Állíts be követést egyéni elemekre, a követés gomb lenyomásával.</string>\n    <string name=\"update_72hour\">3 naponta</string>\n    <string name=\"connected_to_wifi\">Csak Wi-Fi-n keresztül</string>\n    <string name=\"backup_info\">A biztonsági mentésekről más helyeken is érdemes másolatokat tartani. A biztonsági mentések érzékeny adatokat tartalmazhatnak, beleértve a tárolt jelszavakat is; legyen óvatos a megosztáskor.</string>\n    <string name=\"empty_backup_error\">Nincs könyvtári elem, amit menteni lehetne</string>\n    <string name=\"local_source\">Helyi forrás</string>\n    <string name=\"latest\">Legújabb</string>\n    <string name=\"date\">Dátum</string>\n    <string name=\"clear_history_confirmation\">Biztos benne? Minden előzmény elvész.</string>\n    <string name=\"delete_category\">Kategória törlése</string>\n    <string name=\"pref_app_language\">Alkalmazás nyelve</string>\n    <string name=\"unread\">Olvasatlan</string>\n    <string name=\"set_chapter_settings_as_default\">Beállítás alapértelmezettként</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet mód</string>\n    <string name=\"action_move_to_top_all_for_series\">Lista elejére</string>\n    <string name=\"action_global_search_query\">Globális keresés erre: \\\"%1$s\\\"</string>\n    <string name=\"no_more_results\">Nincs több találat</string>\n    <string name=\"no_results_found\">Nincs találat</string>\n    <string name=\"action_global_search_hint\">Globális keresés…</string>\n    <string name=\"sort_by_upload_date\">Feltöltési dátum szerint</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ez eltávolítja a fejezet olvasási dátumát. Biztos benne?</string>\n    <string name=\"pref_update_only_completely_read\">Olvasatlan fejezet(ek)et tartalmazó elemek kihagyása</string>\n    <string name=\"delete_category_confirmation\">Törölni akarja a %s kategóriát ?</string>\n    <string name=\"internal_error\">InternalError: Nézze meg a hibaüzenetet további információért</string>\n    <string name=\"network_not_metered\">Csak korlátlan hálózatokon</string>\n    <string name=\"backup_choice\">Mit tartalmazzon a biztonsági mentés?</string>\n    <string name=\"restore_miui_warning\">Biztonsági mentés/helyreállítás nem biztos,hogy működik ha a MIUI Optimalizáció ki van kapcsolva.</string>\n    <string name=\"restore_in_progress\">Helyreállítás folyamatban van</string>\n    <string name=\"used_cache\">Felhasznált: %1$s</string>\n    <string name=\"pref_clear_database\">Adatbázis törlése</string>\n    <string name=\"pref_clear_database_summary\">Nem könyvtári elemek előzményeinek törlése</string>\n    <string name=\"clear_database_source_item_count\">%1$d nem könyvtári manga az adatbázisban</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Fejezet gyorsítótárának törlése kilépéskor</string>\n    <string name=\"local_invalid_format\">Helytelen fejezet formátum</string>\n    <string name=\"label_network\">Hálózat</string>\n    <string name=\"download_queue_error\">Nem lehetett a fejezeteket letölteni. Próbálja újra a letöltések menüpontban</string>\n    <string name=\"migration_selection_prompt\">Válaszon ki egy forrást, ahonnan importálni szeretne</string>\n    <string name=\"download_insufficient_space\">Nem lehetett letölteni kevés tárhely miatt</string>\n    <string name=\"creating_backup\">Biztonsági mentés létrehozása</string>\n    <string name=\"creating_backup_error\">Biztonsági mentés sikertelen</string>\n    <string name=\"pref_clear_cookies\">Sütik törlése</string>\n    <string name=\"cache_deleted\">Gyorsítótár törölve: %1$d fájl lett törölve</string>\n    <string name=\"cache_delete_error\">Hiba történt törlés közben</string>\n    <string name=\"clear_database_confirmation\">Biztos benne? Nem könyvtári elemek olvasott fejezetei elvesznek</string>\n    <string name=\"file_picker_error\">Nem található fájl választó alkalmazás</string>\n    <string name=\"information_empty_category_dialog\">Nincsenek még kategóriáid.</string>\n    <string name=\"information_cloudflare_bypass_failure\">Nem sikerült megkerülni a Cloudflare-t</string>\n    <string name=\"pref_landscape_zoom\">Automatikusan nagyítsa a széles képeket</string>\n    <string name=\"restore_completed\">Helyreállítás befejeződött</string>\n    <string name=\"restore_duration\">%02d perc, %02d másodperc</string>\n    <string name=\"backup_restore_content_full\">Előfordulhat, hogy telepítenie kell a hiányzó bővítményeket, majd később be kell jelentkeznie a nyilvántartási szolgáltatásokba a használatukhoz.</string>\n    <string name=\"pref_refresh_library_covers\">Könyvtár fedők frissítése</string>\n    <string name=\"pref_dump_crash_logs\">Hibaüzenetetek törlése</string>\n    <string name=\"pref_reset_viewer_flags\">Sorozat beállításainak visszaállítása</string>\n    <string name=\"about_dont_kill_my_app\">Néhány gyártónak extra korlátozása van arra, hogy kikapcsolja a háttér folyamatokat. Ezen a web oldalon több információt találsz, hogy hogyan oldható meg.</string>\n    <string name=\"pref_incognito_mode_summary\">Olvasási előzmények rögzítésének szüneteltetése</string>\n    <string name=\"manga_cover\">Fedlap</string>\n    <string name=\"on_hold\">Szüneteltetve</string>\n    <string name=\"snack_categories_deleted\">Kategóriák törölve</string>\n    <string name=\"file_select_cover\">Válasszon képet a fedlapnak</string>\n    <string name=\"update_check_no_new_updates\">Nem található új frissítés</string>\n    <string name=\"ext_info_version\">Verzió</string>\n    <string name=\"ext_info_language\">Nyelv</string>\n    <string name=\"ext_info_age_rating\">Korhatár</string>\n    <string name=\"pref_reset_viewer_flags_success\">Minden olvasói beállítás visszaállítva</string>\n    <string name=\"login_title\">Jelentkezz be %1$s-ba/be</string>\n    <string name=\"track_type\">Típus</string>\n    <string name=\"loader_not_implemented_error\">A forrás nem található</string>\n    <string name=\"action_sort_last_manga_update\">Utolsó frissítés megtekintése</string>\n    <string name=\"action_sort_unread_count\">Olvasatlanok száma</string>\n    <string name=\"action_show_manga\">Elem mutatása</string>\n    <string name=\"action_display_cover_only_grid\">Kizárólag fedlapok mutatása</string>\n    <string name=\"backup_restore_missing_sources\">Hiányzó források:</string>\n    <string name=\"pref_dns_over_https\">DNS a HTTPS mellett (DoH)</string>\n    <string name=\"label_background_activity\">Háttér aktivitás</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Nem lehetett megnyitni a beállításokat</string>\n    <string name=\"local_source_help_guide\">Útmutató helyi forráshoz</string>\n    <string name=\"no_pinned_sources\">Nincs kitűzött forrás</string>\n    <string name=\"chapter_not_found\">A fejezet nem található</string>\n    <string name=\"local_filter_order_by\">Szűrés</string>\n    <string name=\"clipboard_copy_error\">Nem sikerült másolni</string>\n    <string name=\"cover_saved\">Fedlap elmentve</string>\n    <string name=\"chapter_settings\">Fejezet beállítások</string>\n    <string name=\"confirm_set_chapter_settings\">Biztos, hogy ezeket a beállításokat alapértelmezettként akarod elmenteni?</string>\n    <string name=\"error_saving_cover\">Hiba fedlap mentése közben</string>\n    <string name=\"also_set_chapter_settings_for_library\">Könyvtárban lévő tartalmakra is</string>\n    <string name=\"pref_clear_history\">Előzmények törlése</string>\n    <string name=\"clear_history_completed\">Előzmények törölve</string>\n    <string name=\"source_empty_screen\">Nincs forrás</string>\n    <string name=\"page_list_empty_error\">Nem található oldal</string>\n    <string name=\"recent_manga_time\">Fej. %1$s - %2$s</string>\n    <string name=\"getting_started_guide\">Kezdési útmutató</string>\n    <string name=\"database_clean\">Adatbázis törlése</string>\n    <string name=\"pref_update_only_started\">El nem kezdett elemek kihagyása</string>\n    <string name=\"notification_new_chapters\">Új fejezet</string>\n    <string name=\"backup_in_progress\">Biztonsági mentés már folyamatban van</string>\n    <string name=\"not_installed\">Nincs telepítve</string>\n    <string name=\"download_queue_size_warning\">Figyelmeztetés: a tömeges letöltések a források lelassulásához és/vagy a Mihon leállásához vezethetnek. Koppintson további információért.</string>\n    <string name=\"learn_more\">Koppintson további információért</string>\n    <string name=\"notification_cover_update_failed\">Nem sikerült a fedlap frissítése</string>\n    <string name=\"notification_first_add_to_library\">Először adja az elemet a könyvtárhoz</string>\n    <string name=\"skipped_reason_not_caught_up\">Átugorva, mivel tartalmaz olvasatlan fejezeteket</string>\n    <string name=\"skipped_reason_not_started\">Átugorva, mivel nincs olvasott fejezet</string>\n    <string name=\"update_check_confirm\">Letöltés</string>\n    <string name=\"update_check_open\">Megnyitás GitHub-on</string>\n    <string name=\"update_check_eol\">Ez az Android verzió már nem támogatott</string>\n    <string name=\"channel_app_updates\">Alkalmazás frissítések</string>\n    <string name=\"cant_open_last_read_chapter\">Nem sikerült megnyitni az utoljára olvasott fejezetet</string>\n    <string name=\"updated_version\">Frissítve erre: v%1$s</string>\n    <string name=\"pref_navigate_pan\">Széles képek pásztázása</string>\n    <string name=\"save_chapter_as_cbz\">Mentés CBZ archívumkén</string>\n    <string name=\"theme_lavender\">Levendula</string>\n    <string name=\"pref_clear_webview_data\">WebView adatok törlése</string>\n    <string name=\"pref_dump_crash_logs_summary\">Feljegyzi a hibát egy fájlba, hogy meg lehessen osztani a fejlesztővel</string>\n    <string name=\"invalid_backup_file_missing_manga\">A biztonsági mentés nem tartalmazza az elemeket.</string>\n    <string name=\"restoring_backup_canceled\">Megszakított helyreállítás</string>\n    <string name=\"manga_download\">Letöltés</string>\n    <string name=\"publishing_finished\">Publikálás befejezve</string>\n    <string name=\"description_placeholder\">Nincs leírás</string>\n    <string name=\"chapter_downloading_progress\">Letöltés (%1$d/%2$d)</string>\n    <string name=\"add_tracking\">Felvétel nyilvántartáshoz</string>\n    <string name=\"reading\">Elkezdett</string>\n    <string name=\"migration_dialog_what_to_include\">Válaszon beletartozó adatokat</string>\n    <string name=\"chapter_settings_updated\">Fejezet beállításai frissültek</string>\n    <string name=\"download_notifier_downloader_title\">Letöltő</string>\n    <string name=\"update_check_notification_download_in_progress\">Letöltés…</string>\n    <string name=\"source_filter_empty_screen\">Nincs telepített forrás</string>\n    <string name=\"migration_help_guide\">Forrás imortálási útmutató</string>\n    <string name=\"picture_saved\">Kép elmentve</string>\n    <string name=\"decode_image_error\">A képet nem lehetett betölteni</string>\n    <string name=\"pref_category_for_this_series\">Ennek a sorozatnak</string>\n    <string name=\"viewer\">Olvasó mód</string>\n    <string name=\"transition_finished\">Befejezve:</string>\n    <string name=\"transition_current\">Jelenlegi:</string>\n    <string name=\"empty_screen\">Hát, ez kínos</string>\n    <string name=\"notification_size_warning\">A nagy frissítések kárt okoznak a forrásoknak, és lassabb frissítésekhez, valamint megnövekedett akkumulátorhasználathoz vezethetnek. Koppintson további információért.</string>\n    <string name=\"notification_update_error\">%1$d frissítés sikertelen</string>\n    <string name=\"split_tall_images_summary\">Javítja az olvasó teljesítményét</string>\n    <string name=\"backup_restore_missing_trackers\">Nem bejelentkezett nyilvántartó:</string>\n    <string name=\"pref_incognito_mode\">Inkognitó mód</string>\n    <string name=\"notification_incognito_text\">Inkognitó mód kikapcsolása</string>\n    <string name=\"downloaded_only_summary\">Szűri a könyvtár összes tartalmát</string>\n    <string name=\"error_sharing_cover\">Hiba a fedlap megosztása közben</string>\n    <string name=\"action_close\">Bezár</string>\n    <string name=\"rotation_reverse_portrait\">Fordított álló</string>\n    <string name=\"paused\">Megállítva</string>\n    <string name=\"reading_list\">Olvasási lista</string>\n    <string name=\"wish_list\">Kívánságlista</string>\n    <string name=\"complete_list\">Teljes lista</string>\n    <string name=\"unfinished_list\">Befejezetlen lista</string>\n    <string name=\"track_status\">Állapot</string>\n    <string name=\"track_started_reading_date\">Kezdés dátuma</string>\n    <string name=\"track_finished_reading_date\">Befejezés dátuma</string>\n    <string name=\"myanimelist_relogin\">Kérjük, jelentkezzen be MAL-ba újra</string>\n    <string name=\"source_unsupported\">A forrás nem támogatott</string>\n    <string name=\"error_no_match\">Nincs egyezés</string>\n    <string name=\"error_category_exists\">Ilyen nevű kategória már létezik!</string>\n    <string name=\"dialog_with_checkbox_reset\">Összes fejezet visszaállítása ebben az elemben</string>\n    <string name=\"error_saving_picture\">Hiba a kép mentése közben</string>\n    <string name=\"on_hold_list\">Szüneteltettek listája</string>\n    <string name=\"custom_cover\">Egyéni fedlap</string>\n    <string name=\"transition_next\">Következő:</string>\n    <string name=\"transition_previous\">Előző:</string>\n    <string name=\"transition_no_next\">Nincs több fejezet</string>\n    <string name=\"transition_no_previous\">Nincs előző fejezet</string>\n    <string name=\"transition_pages_error\">%1$s oldalt nem lehetett betölteni</string>\n    <string name=\"transition_pages_loading\">Oldalak betöltése…</string>\n    <string name=\"action_track\">Nyilvántart</string>\n    <string name=\"extension_api_error\">Nem sikerült a kiterjesztési lista megnyitása</string>\n    <string name=\"disabled_nav\">Kikapcsolva</string>\n    <string name=\"enhanced_tracking_info\">Szolgáltatások, amelyek fejlett funkciókat kínálnak. Az elemek automatikusan könyvtárhoz lesznek adva és frissítve lesznek.</string>\n    <string name=\"pref_create_backup\">Biztonsági mentés készítése</string>\n    <string name=\"pref_create_backup_summ\">Felhasználható az aktuális könyvtár visszaállítására</string>\n    <string name=\"pref_restore_backup\">Biztonsági mentésből visszaállítás</string>\n    <string name=\"pref_restore_backup_summ\">Könyvtár visszaállítása biztonsági mentésről</string>\n    <string name=\"pref_backup_interval\">Biztonsági mentések gyakorisága</string>\n    <string name=\"restoring_backup\">Biztonsági mentés helyreállítása</string>\n    <string name=\"restoring_backup_error\">Nem sikerült a biztonsági mentés helyreállítása</string>\n    <string name=\"clear_database_completed\">Elemek törölve</string>\n    <string name=\"pref_clear_chapter_cache\">Fejezet gyorsítótárának törlése</string>\n    <string name=\"webview_data_deleted\">WebView adatok törölve</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Helyreállítja az olvasó módot és orientációt minden elemnél</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nem lehetett visszaállítani az olvasói beállításokat</string>\n    <string name=\"pref_disable_battery_optimization\">Akkumulátor optimalizálás kikapcsolása</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Segít háttérbeli könyvtár frissítésben és a biztonsági mentésekben</string>\n    <string name=\"battery_optimization_disabled\">Akkumulátor optimalizálás már ki van kapcsolva</string>\n    <string name=\"pref_verbose_logging\">Bő feljegyzés</string>\n    <string name=\"pref_verbose_logging_summary\">Részletes naplók irása a rendszernaplóba (csökkenti az alkalmazás teljesítményét)</string>\n    <string name=\"whats_new\">Újdonságok</string>\n    <string name=\"help_translate\">Segíts fordítani</string>\n    <string name=\"privacy_policy\">Adatvédelmi irányelvek</string>\n    <string name=\"pref_acra_summary\">Segít a hibák javításában. Semmilyen bizalmas információ nem lesz elküldve</string>\n    <string name=\"cancelled\">Félbeszakított</string>\n    <string name=\"on_hiatus\">Szünetelő</string>\n    <string name=\"show_title\">Forrás címe</string>\n    <string name=\"sort_by_source\">Forrás szerint</string>\n    <string name=\"sort_by_number\">Fejezetek száma szerint</string>\n    <string name=\"library_errors_help\">Könyvtárfrissítési hibák kijavításához sgítségért, tekintese meg %1$s</string>\n    <string name=\"skipped_reason_completed\">Átugorva, mivel a sorozat befejeződött</string>\n    <string name=\"download_notifier_split_page_not_found\">%d oldal nem található felosztás közben</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nem található az útvonal a %d-ik oldalhoz</string>\n    <string name=\"confirm_set_image_as_cover\">Ez a kép legyen a fedlap?</string>\n    <string name=\"file_select_backup\">Biztonsági mentési fájl kiválasztása</string>\n    <string name=\"pref_user_agent_string\">Alap hálózati kliens szöveg</string>\n    <string name=\"pref_reset_user_agent_string\">Alap hálózati kliens szöveg visszaállítása</string>\n    <string name=\"action_remove_everything\">Minden Eltávolitása</string>\n    <string name=\"appwidget_updates_description\">Lásd nemrég frissített mangádat</string>\n    <string name=\"appwidget_unavailable_locked\">Widget nem elérhető amikor az alkalmazás zárolva van</string>\n    <string name=\"pref_appearance_summary\">Téma, dátum és idő formátuma</string>\n    <string name=\"action_search_hint\">Keresés…</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Kényszerítse az alkalmazást a letöltött fejezetek újbóli ellenőrzésére</string>\n    <string name=\"auto_download_while_reading\">Automatikus letöltés olvasás közben</string>\n    <string name=\"label_started\">Elkezdett</string>\n    <string name=\"label_downloaded\">Letöltött</string>\n    <string name=\"label_local\">Helyi</string>\n    <string name=\"label_stats\">Statisztika</string>\n    <string name=\"unknown_title\">Ismeretlen cím</string>\n    <string name=\"label_overview_section\">Áttekintés</string>\n    <string name=\"label_total_chapters\">Összes</string>\n    <string name=\"label_read_chapters\">Olvasott</string>\n    <string name=\"label_mean_score\">Átlagos értékelés</string>\n    <string name=\"action_open_random_manga\">Véletlenszerű elem megnyitása</string>\n    <string name=\"updates_last_update_info\">Könyvtár utoljára frissítve: %s</string>\n    <string name=\"label_tracker_section\">Nyilvántartók</string>\n    <string name=\"pref_library_update_show_tab_badge\">Az olvasatlanok számának megjelenítése a Frissítések ikonon</string>\n    <string name=\"action_display_show_continue_reading_button\">Olvasás folytatása gomb</string>\n    <string name=\"pref_library_summary\">Kategóriák, globális frissítés, fejezet csúsztatás</string>\n    <string name=\"pref_security_summary\">Alkalmazás zárolás, képernyő zár</string>\n    <string name=\"pref_advanced_summary\">Összeomlás naplók kiírása, akkumulátor optimalizálások</string>\n    <string name=\"invalid_location\">Hibás hely: %s</string>\n    <string name=\"download_ahead_info\">Csak akkor működik, ha az aktuális és a következő fejezet már letöltött.</string>\n    <string name=\"download_ahead\">Letöltés előre</string>\n    <string name=\"pref_reader_summary\">Olvasó mód, kijelző, navigáció</string>\n    <string name=\"theme_tidalwave\">Szökőár</string>\n    <string name=\"action_not_now\">Ne most</string>\n    <string name=\"pref_downloads_summary\">Automatikus letöltés, letöltés előre</string>\n    <string name=\"pref_tracking_summary\">Egyirányú haladás szinkronizálás, fejlesztett szinkronizálás</string>\n    <string name=\"pref_backup_summary\">Manuális és automatikus biztonsági mentés</string>\n    <string name=\"multi_lang\">Több</string>\n    <string name=\"pref_browse_summary\">Források, bővítmények, globális keresés</string>\n    <string name=\"action_copy_to_clipboard\">Másolás a vágólapra</string>\n    <string name=\"action_update_category\">Kategória frissítése</string>\n    <string name=\"copied_to_clipboard_plain\">Vágólapra másolva</string>\n    <string name=\"confirm_add_duplicate_manga\">Van már egy ilyen nevű elem a könyvtáradban.\n\\n\n\\nBiztos folytatni akarod?</string>\n    <string name=\"track_remove_start_date_conf_text\">Ez eltávolítja az eddig kiválasztott kezdeti dátumot a(z) %s szolgáltatásból</string>\n    <string name=\"fdroid_warning\">F-Droid csomagok nem hivatalosan támogatottak.\n\\nKattincs további információért.</string>\n    <string name=\"label_completed_titles\">Befejezett olvasmányok</string>\n    <string name=\"crash_screen_title\">Hoppá!</string>\n    <string name=\"enhanced_services_not_installed\">Elérhető de a forrás nincs telepítve: %s</string>\n    <string name=\"missing_storage_permission\">Tárhely engedély nincs megadva</string>\n    <string name=\"label_used\">Használt</string>\n    <string name=\"track_error\">%1$s hiba: %2$s</string>\n    <string name=\"are_you_sure\">Biztos vagy benne?</string>\n    <string name=\"information_no_manga_category\">Kategória üres</string>\n    <string name=\"track_remove_finish_date_conf_text\">Ez eltávolítja az eddig kiválasztott befejezési dátumot a(z) %s szolgáltatásból</string>\n    <string name=\"label_read_duration\">Olvasási időtartam</string>\n    <string name=\"information_no_entries_found\">Nem található elem ebben a kategóriában</string>\n    <string name=\"remove_manga\">A/az \\\"%s\\\"-t elfogod távolítani a könyvtáradból</string>\n    <string name=\"updates_last_update_info_just_now\">Éppen most</string>\n    <string name=\"download_notifier_cache_renewal\">Letöltések ellenőrzése</string>\n    <string name=\"pref_debug_info\">Debug információ</string>\n    <string name=\"popular\">Felkapott</string>\n    <string name=\"update_already_running\">A frissités már folyamatban van</string>\n    <string name=\"crash_screen_description\">%s hibába ütközött. A hiba üzenetet kérünk oszd meg velünk a Discord szerverünkön.</string>\n    <string name=\"track_remove_date_conf_title\">Dátum eltávolítása?</string>\n    <string name=\"crash_screen_restart_application\">Applikáció újrainditása</string>\n    <string name=\"label_titles_in_global_update\">Globális frissítésben</string>\n    <string name=\"information_required_plain\">*kötelező</string>\n    <string name=\"pref_chapter_swipe_start\">Balra csúsztatási cselekmény</string>\n    <string name=\"pref_skip_dupe_chapters\">Duplikált fejezetek átugrása</string>\n    <string name=\"action_set_interval\">Időköz állítása</string>\n    <string name=\"action_filter_interval_custom\">Egyedi frissítési időköz</string>\n    <string name=\"action_sort_next_updated\">Következő várt frissítés</string>\n    <string name=\"pref_double_tap_zoom\">Dupla koppintás a nagyításhoz</string>\n    <string name=\"pref_hide_in_library_items\">Már könyvtári elemek elrejtése</string>\n    <string name=\"track_activity_name\">Bejelentkezés nyilvántartóhoz</string>\n    <string name=\"delete_downloaded\">Letöltött törlése</string>\n    <string name=\"split_tall_images\">Magas képek szétvágása</string>\n    <string name=\"pref_update_only_in_release_period\">Következő kiadás idejének megjóslása</string>\n    <string name=\"pref_page_rotate\">Széles oldalak forgatása az illeszkedéshez</string>\n    <string name=\"pref_chapter_swipe_end\">Jobbra csúsztatási cselekmény</string>\n    <string name=\"pref_page_rotate_invert\">Forgatott széles oldalak megfordítása</string>\n    <string name=\"action_ok\">Ok</string>\n    <string name=\"pref_storage_location\">Tárolási hely</string>\n    <string name=\"information_cloudflare_help\">Érints ide, ha Cloudflare segítségre van szükséged</string>\n    <string name=\"relative_time_span_never\">Soha</string>\n    <string name=\"skipped_reason_not_always_update\">Átlépve, mert a sorozatot nem kell frissíteni</string>\n    <string name=\"pref_flash_page_summ\">E-ink képernyőkön csökkenti a visszamaradó képet</string>\n    <string name=\"unlock_app_title\">%s feloldása</string>\n    <string name=\"pref_storage_location_info\">Automatikus biztonsági mentésekhez, fejezetek letöltéséhez, és helyi forráshoz használt.</string>\n    <string name=\"manga_display_modified_interval_title\">Frissítés beállítása minden</string>\n    <string name=\"syncing_library\">Könyvtár szinkronizálása</string>\n    <string name=\"create_backup_file_error\">Biztonsági mentés készítése nem sikerült</string>\n    <string name=\"intervals_header\">Intervallumok</string>\n    <string name=\"action_revert_to_default\">Visszaállítás alapértelmezettre</string>\n    <string name=\"error_user_agent_string_blank\">Felhasználói ágens (user agent) szöveg nem lehet üres</string>\n    <string name=\"action_menu_overflow_description\">További lehetőségek</string>\n    <string name=\"library_sync_complete\">Könyvtár szinkronizálása elkészült</string>\n    <string name=\"last_auto_backup_info\">Utolsó automatikus biztonsági mentés: %s</string>\n    <string name=\"selected\">Kiválasztott</string>\n    <string name=\"no_scanlators_found\">Nincsenek szkennelő-fordítók</string>\n    <string name=\"not_selected\">Nem kiválasztott</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Sorozat alulra küldése</string>\n    <string name=\"scanlator\">Szkennelő-fordító</string>\n    <string name=\"pref_flash_page\">Villantson fehéren lap változtatáskor</string>\n    <string name=\"exception_offline\">Nincs internet kapcsolat</string>\n    <string name=\"pref_storage_usage\">Tárolóhely felhasználás</string>\n    <string name=\"notification_updating_progress\">Könyvtár frissítése ... (%s)</string>\n    <string name=\"label_titles_section\">Elemek</string>\n    <string name=\"action_bar_up_description\">Felnavigálás</string>\n    <string name=\"label_data_storage\">Adatok és tárolás</string>\n    <string name=\"skipped_reason_not_in_release_period\">Átlépve, mert ma nem várható kiadás</string>\n    <string name=\"file_null_uri_error\">Nincs fájl kiválasztva</string>\n    <string name=\"error_user_agent_string_invalid\">Érvénytelen felhasználói ágens (user agent) szöveg</string>\n    <string name=\"source_settings\">Forrás beállítások</string>\n    <string name=\"app_settings\">Applikáció beállítások</string>\n    <string name=\"has_results\">Vannak eredmények</string>\n    <string name=\"pref_relative_format\">Relatív időbélyegek</string>\n    <string name=\"exception_http\">HTTP %d, nézd meg a honlapot WebViewban</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\", ahelyett hogy \\\"%2$s\\\"</string>\n    <string name=\"exception_unknown_host\">%s nem elérhető</string>\n    <string name=\"exclude_scanlators\">Szkennelő-fordítók tiltása</string>\n    <string name=\"action_apply\">Alkalmazás</string>\n    <string name=\"pref_onboarding_guide\">Bevezetési útmutató</string>\n    <string name=\"onboarding_heading\">Üdvözöljük!</string>\n    <string name=\"onboarding_action_next\">Következő</string>\n    <string name=\"onboarding_action_finish\">Kezdjünk hozzá</string>\n    <string name=\"onboarding_action_skip\">Kihagyás</string>\n    <string name=\"onboarding_storage_info\">Válasszon ki egy mappát, ahol a(z) %1$s a fejezetek letöltéseit, biztonsági mentéseket és egyebeket tárolja.\n\\n\n\\nAjánlott egy külön mappa használata.\n\\n\n\\nKiválasztott mappa: %2$s</string>\n    <string name=\"onboarding_storage_action_select\">Válasszon ki egy mappát</string>\n    <string name=\"onboarding_storage_selection_required\">Ki kell választani egy mappát</string>\n    <string name=\"onboarding_storage_help_info\">Régebbi verzióról frissít, és nem tudja, mit válasszon? További információkért olvassa el a tárolási útmutatót.</string>\n    <string name=\"onboarding_storage_help_action\">Tárolási útmutató</string>\n    <string name=\"onboarding_permission_install_apps\">Alkalmazások telepítésének engedélyezése</string>\n    <string name=\"onboarding_permission_install_apps_description\">A forrásbővítmények telepítéséhez.</string>\n    <string name=\"onboarding_permission_notifications\">Értesítési engedély</string>\n    <string name=\"onboarding_permission_notifications_description\">Értesüljön a könyvtári frissítésekről és egyéb információkról.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Háttérben lévő akkumulátor-használat</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Kerülje el a hosszan tartó könyvtárfrissítések, letöltések és biztonsági mentések helyreállításának megszakítását.</string>\n    <string name=\"onboarding_permission_action_grant\">Engedélyezés</string>\n    <string name=\"onboarding_guides_new_user\">Új a(z) %s az ön számára? Javasoljuk, hogy olvassa el a Kezdő útmutatót.</string>\n    <string name=\"onboarding_guides_returning_user\">Újratelepíti a(z) %s?</string>\n    <string name=\"pref_library_update_smart_update\">Intelligens frissítés</string>\n    <string name=\"ext_permission_install_apps_warning\">A bővítmények telepítéséhez engedélyek szükségesek. Az engedélyezéshez koppintson ide.</string>\n    <string name=\"ext_revoke_trust\">Megbízható ismeretlen kiterjesztések visszavonása</string>\n    <string name=\"label_extension_repos\">Bővítmény tárolók</string>\n    <string name=\"information_empty_repos\">Nincsenek beállítva tárolók.</string>\n    <string name=\"action_add_repo\">Tároló felvétele</string>\n    <string name=\"label_add_repo_input\">Tároló URL</string>\n    <string name=\"action_add_repo_message\">További tárolók hozzáadása a Mihonhoz. Ennek az URL-nek \\\"index.min.json\\\"-ra végződő URL-nek kell lennie.</string>\n    <string name=\"error_repo_exists\">Ez a tároló már létezik!</string>\n    <string name=\"action_delete_repo\">Tároló törlése</string>\n    <string name=\"invalid_repo_name\">Érvénytelen tároló URL</string>\n    <string name=\"delete_repo_confirmation\">Szeretné törölni a(z) \\\"%s\\\" tárolót?</string>\n    <string name=\"action_open_repo\">Nyílt forráskódú tároló</string>\n    <string name=\"no_location_set\">Nincs tárolási hely beállítva</string>\n    <string name=\"action_create\">Létrehoz</string>\n    <string name=\"invalid_backup_file_error\">Teljes hiba:</string>\n    <string name=\"onboarding_description\">Kezdetnek állítsunk be néhány dolgot. Ezeket később bármikor módosíthatja a beállításokban.</string>\n    <string name=\"overlay_header\">Felület</string>\n    <string name=\"track_delete_remote_text\">Törlés a(z) %s szolgáltatásból</string>\n    <string name=\"track_delete_text\">Ezzel leállítja a helyi nyilvántartást.</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"minute_short\">%d perc</string>\n    <string name=\"seconds_short\">%d mp.</string>\n    <string name=\"day_short\">%d nap</string>\n    <string name=\"hour_short\">%d óra</string>\n    <string name=\"action_sort_tracker_score\">Nyilvántartási pont</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"private_settings\">Érzékeny beállítások megadása (Pl. szolgáltatások bejelentkezési tokenei)</string>\n    <string name=\"pref_invalidate_download_cache\">Letöltési index érvénytelenítése</string>\n    <string name=\"manga_interval_expected_update\">Új fejezetek megjelenése %1$s múlva várható, frissítési időköz: %2$s.</string>\n    <string name=\"track_delete_title\">Leállítja a(z) %s nyilvántartását?</string>\n    <string name=\"label_tracked_titles\">Nyilvántartott elemek</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Kicsinyítés letiltása</string>\n    <string name=\"available_disk_space_info\">Elérhető: %1$s / Összesen: %2$s</string>\n    <string name=\"download_cache_invalidated\">Letöltési index érvénytelenítve</string>\n    <string name=\"manga_display_interval_title\">Mind becslése</string>\n    <string name=\"manga_interval_expected_update_soon\">Hamarosan</string>\n    <string name=\"manga_interval_custom_amount\">Egyedi frissítési időköz:</string>\n    <string name=\"action_add_anyway\">Hozzáadás mindenképp</string>\n    <string name=\"action_migrate_duplicate\">Meglévő elem áttelepítése</string>\n    <string name=\"pref_display_profile\">Egyedi megjelenítési profil</string>\n    <string name=\"action_replace_repo\">Lecserélés</string>\n    <string name=\"action_replace_repo_title\">Aláíró kulcs ujjlenyomat már létezik</string>\n    <string name=\"action_replace_repo_message\">A(z) %1$s tárolónak ugyanaz az aláíró kulcs ujjlenyomat, mint a(z) %2$s tárolónak.\n\\nHa ez várható volt, akkor a(z) %2$s lecserélődik, ellenkező esetben lépjen kapcsolatba a tároló karbantartójával.</string>\n    <string name=\"label_upcoming\">Közelgő</string>\n    <string name=\"upcoming_calendar_next\">Következő hónap</string>\n    <string name=\"action_view_upcoming\">Közelgő frissítések megtekintése</string>\n    <string name=\"upcoming_guide\">Közelgő útmutató</string>\n    <string name=\"upcoming_calendar_prev\">Előző hónap</string>\n    <string name=\"action_copy_link\">Hivatkozás másolása</string>\n    <string name=\"onboarding_permission_crashlytics\">Összeomlási jelentés küldése</string>\n    <string name=\"onboarding_permission_analytics\">Analitika engedélyezése</string>\n    <string name=\"onboarding_permission_analytics_description\">Anonimizált használati adatok küldése a funkciók fejlesztésének érdekében.</string>\n    <string name=\"action_sort_random\">Véletlenszerű</string>\n    <string name=\"pref_security\">Biztonság</string>\n    <string name=\"pref_firebase\">Analitika és összeomlási jelentések</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Anonimizált összeomlási jelentés küldése a fejlesztőknek.</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/in/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">Setelah %1$s menit</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d bab baru</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">Bab %1$s dan %2$d lainnya</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">Untuk entri %d</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">Terdapat %d perbaruan ekstensi</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">%1$s lagi</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d kategori</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">Selesai dalam %1$s dengan %2$s kesalahan</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">%1$s bab</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d pelacak</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">Melewati %d bab, entah sumbernya hilang atau telah difilter</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d hari yang lalu</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">Selanjutnya chapter %d yang belum dibaca</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">berikutnya %d chapter</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">%1$s bab hilang</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d hari</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d repo</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"other\">Dalam %1$d hari</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"other\">%1$s halaman</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/in/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"categories\">Kategori</string>\n    <string name=\"manga\">Entri pustaka</string>\n    <string name=\"chapters\">Bab</string>\n    <string name=\"track\">Pelacakan</string>\n    <string name=\"history\">Riwayat</string>\n    <string name=\"label_settings\">Pengaturan</string>\n    <string name=\"label_download_queue\">Antrean unduhan</string>\n    <string name=\"label_library\">Pustaka</string>\n    <string name=\"label_recent_manga\">Riwayat</string>\n    <string name=\"label_recent_updates\">Pembaruan</string>\n    <string name=\"label_backup\">Pencadangan dan pemulihan</string>\n    <string name=\"action_settings\">Pengaturan</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_bookmarked\">Ditandai</string>\n    <string name=\"action_filter_unread\">Belum dibaca</string>\n    <string name=\"action_filter_empty\">Hapus filter</string>\n    <string name=\"action_sort_alpha\">Menurut abjad</string>\n    <string name=\"action_sort_total\">Total bab</string>\n    <string name=\"action_sort_last_read\">Terakhir dibaca</string>\n    <string name=\"action_search\">Pencarian</string>\n    <string name=\"action_select_all\">Pilih semua</string>\n    <string name=\"action_mark_as_read\">Tandai sebagai dibaca</string>\n    <string name=\"action_mark_as_unread\">Tandai sebagai belum dibaca</string>\n    <string name=\"action_mark_previous_as_read\">Tandai sebelumnya sebagai sudah dibaca</string>\n    <string name=\"action_download\">Unduh</string>\n    <string name=\"action_bookmark\">Tandai bab</string>\n    <string name=\"action_remove_bookmark\">Hapus penanda bab</string>\n    <string name=\"action_delete\">Hapus</string>\n    <string name=\"action_update_library\">Perbarui pustaka</string>\n    <string name=\"action_edit\">Ubah</string>\n    <string name=\"action_add\">Tambah</string>\n    <string name=\"action_add_category\">Tambah kategori</string>\n    <string name=\"action_edit_categories\">Ubah kategori</string>\n    <string name=\"action_rename_category\">Ubah nama kategori</string>\n    <string name=\"action_move_category\">Masukkan ke kategori</string>\n    <string name=\"action_edit_cover\">Ubah gambar sampul</string>\n    <string name=\"action_pause\">Hentikan sementara</string>\n    <string name=\"action_previous_chapter\">Bab sebelumnya</string>\n    <string name=\"action_next_chapter\">Bab selanjutnya</string>\n    <string name=\"action_retry\">Coba lagi</string>\n    <string name=\"action_remove\">Hapus</string>\n    <string name=\"action_resume\">Lanjut</string>\n    <string name=\"action_open_in_browser\">Buka di peramban</string>\n    <string name=\"action_display_mode\">Mode tampilan</string>\n    <string name=\"action_display\">Tampilan</string>\n    <string name=\"action_display_list\">Daftar</string>\n    <string name=\"action_cancel\">Batal</string>\n    <string name=\"action_sort\">Urutkan</string>\n    <string name=\"action_install\">Pasang</string>\n    <string name=\"action_share\">Bagikan</string>\n    <string name=\"action_save\">Simpan</string>\n    <string name=\"action_reset\">Atur ulang</string>\n    <string name=\"action_undo\">Kembalikan</string>\n    <string name=\"action_open_log\">Buka log</string>\n    <string name=\"name\">Nama</string>\n    <string name=\"action_display_grid\">Grid kompak</string>\n    <string name=\"action_restore\">Pulihkan</string>\n    <string name=\"loading\">Memuat…</string>\n    <string name=\"app_not_available\">Aplikasi tidak tersedia</string>\n    <string name=\"pref_category_general\">Umum</string>\n    <string name=\"pref_category_reader\">Pembaca</string>\n    <string name=\"pref_category_downloads\">Unduhan</string>\n    <string name=\"pref_category_tracking\">Sinkronisasi</string>\n    <string name=\"pref_category_advanced\">Lanjutan</string>\n    <string name=\"pref_category_about\">Tentang</string>\n    <string name=\"pref_library_columns\">Item per baris</string>\n    <string name=\"portrait\">Layar tegak</string>\n    <string name=\"landscape\">Layar mendatar</string>\n    <string name=\"pref_library_update_interval\">Pembaruan otomatis</string>\n    <string name=\"update_never\">Matikan</string>\n    <string name=\"update_6hour\">Tiap 6 jam</string>\n    <string name=\"update_12hour\">Tiap 12 jam</string>\n    <string name=\"update_24hour\">Tiap hari</string>\n    <string name=\"update_48hour\">Tiap 2 hari</string>\n    <string name=\"update_weekly\">Tiap minggu</string>\n    <string name=\"all\">Semua</string>\n    <string name=\"pref_library_update_restriction\">Pembatasan pembaruan otomatis</string>\n    <string name=\"charging\">Saat mengisi daya</string>\n    <string name=\"pref_update_only_non_completed\">Lewati daftar dengan status \\\"Selesai\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Perbarui kemajuan setelah membaca</string>\n    <string name=\"default_category\">Kategori bawaan</string>\n    <string name=\"default_category_summary\">Selalu tanya</string>\n    <string name=\"pref_fullscreen\">Layar penuh</string>\n    <string name=\"pref_page_transitions\">Animasikan transisi halaman</string>\n    <string name=\"pref_show_page_number\">Tampilkan nomor halaman</string>\n    <string name=\"pref_crop_borders\">Potong pinggiran</string>\n    <string name=\"pref_keep_screen_on\">Biarkan layar tetap menyala</string>\n    <string name=\"pref_reader_navigation\">Navigasi</string>\n    <string name=\"pref_read_with_volume_keys\">Tombol volume</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Balikkan tombol volume</string>\n    <string name=\"pref_reader_theme\">Warna latar</string>\n    <string name=\"white_background\">Putih</string>\n    <string name=\"black_background\">Hitam</string>\n    <string name=\"pref_viewer_type\">Mode baca bawaan</string>\n    <string name=\"left_to_right_viewer\">Halaman (kiri ke kanan)</string>\n    <string name=\"right_to_left_viewer\">Halaman (kanan ke kiri)</string>\n    <string name=\"vertical_viewer\">Halaman (vertikal)</string>\n    <string name=\"webtoon_viewer\">Strip panjang</string>\n    <string name=\"pref_image_scale_type\">Tipe skala</string>\n    <string name=\"scale_type_fit_screen\">Pas layar</string>\n    <string name=\"scale_type_stretch\">Rentangkan</string>\n    <string name=\"scale_type_fit_width\">Pas lebar</string>\n    <string name=\"scale_type_fit_height\">Pas tinggi</string>\n    <string name=\"scale_type_original_size\">Ukuran asli</string>\n    <string name=\"scale_type_smart_fit\">Pas pintar</string>\n    <string name=\"pref_zoom_start\">Posisi awal zoom</string>\n    <string name=\"zoom_start_automatic\">Otomatis</string>\n    <string name=\"zoom_start_left\">Kiri</string>\n    <string name=\"zoom_start_right\">Kanan</string>\n    <string name=\"zoom_start_center\">Tengah</string>\n    <string name=\"pref_rotation_type\">Rotasi bawaan</string>\n    <string name=\"rotation_free\">Bebas</string>\n    <string name=\"rotation_force_portrait\">Terkunci tegak</string>\n    <string name=\"rotation_force_landscape\">Terkunci mendatar</string>\n    <string name=\"color_filter_r_value\">Merah</string>\n    <string name=\"color_filter_g_value\">Hijau</string>\n    <string name=\"color_filter_b_value\">Biru</string>\n    <string name=\"color_filter_a_value\">Alfa</string>\n    <string name=\"pref_remove_after_marked_as_read\">Setelah secara manual ditandai telah dibaca</string>\n    <string name=\"pref_remove_after_read\">Otomatis hapus setelah dibaca</string>\n    <string name=\"disabled\">Tidak Aktif</string>\n    <string name=\"last_read_chapter\">Bab terakhir yang dibaca</string>\n    <string name=\"second_to_last\">Bab kedua dari terakhir dibaca</string>\n    <string name=\"third_to_last\">Chapter ketiga dari terakhir dibaca</string>\n    <string name=\"fourth_to_last\">Chapter keempat dari terakhir dibaca</string>\n    <string name=\"fifth_to_last\">Chapter kelima dari terakhir dibaca</string>\n    <string name=\"pref_download_new\">Unduh bab baru</string>\n    <string name=\"services\">Pelacakan</string>\n    <string name=\"pref_create_backup\">Buat cadangan</string>\n    <string name=\"pref_create_backup_summ\">Dapat digunakan untuk memulihkan isi pustaka saat ini</string>\n    <string name=\"pref_restore_backup\">Pulihkan cadangan</string>\n    <string name=\"pref_restore_backup_summ\">Pulihkan isi pustaka dari berkas cadangan</string>\n    <string name=\"pref_backup_interval\">Frekuensi pencadangan otomatis</string>\n    <string name=\"backup_created\">Cadangan dibuat</string>\n    <string name=\"restore_completed\">Pemulihan selesai</string>\n    <string name=\"backup_choice\">Apa saja yang ingin Anda cadangkan?</string>\n    <string name=\"restoring_backup\">Memulihkan cadangan</string>\n    <string name=\"creating_backup\">Membuat cadangan</string>\n    <string name=\"pref_clear_chapter_cache\">Hapus cache bab</string>\n    <string name=\"used_cache\">Terpakai: %1$s</string>\n    <string name=\"cache_deleted\">Cache dibersihkan, %1$d file dihapus</string>\n    <string name=\"cache_delete_error\">Terjadi kesalahan saat membersihkan</string>\n    <string name=\"pref_clear_cookies\">Hapus cookies</string>\n    <string name=\"cookies_cleared\">Cookies dihapus</string>\n    <string name=\"pref_clear_database\">Hapus database</string>\n    <string name=\"pref_clear_database_summary\">Hapus riwayat untuk entri yang tidak disimpan di perpustakaan Anda</string>\n    <string name=\"clear_database_confirmation\">Apakah Anda yakin? Bab yang sudah dibaca dan kemajuan entri non-perpustakaan akan hilang</string>\n    <string name=\"clear_database_completed\">Entri dihapus</string>\n    <string name=\"version\">Versi</string>\n    <string name=\"pref_enable_acra\">Kirim laporan kerusakan</string>\n    <string name=\"pref_acra_summary\">Bantu memperbaiki bug. Tidak ada data sensitif yang akan dikirim</string>\n    <string name=\"login_title\">Masuk ke %1$s</string>\n    <string name=\"username\">Nama pengguna</string>\n    <string name=\"password\">Kata sandi</string>\n    <string name=\"login\">Masuk</string>\n    <string name=\"login_success\">Sudah Masuk</string>\n    <string name=\"unknown_error\">Kesalahan tidak diketahui</string>\n    <string name=\"updating_category\">Memperbarui kategori</string>\n    <string name=\"no_more_results\">Tidak ada hasil lainnya</string>\n    <string name=\"local_source\">Sumber lokal</string>\n    <string name=\"ongoing\">Berlanjut</string>\n    <string name=\"unknown\">Tak diketahui</string>\n    <string name=\"licensed\">Berlisensi</string>\n    <string name=\"remove_from_library\">Hapus dari pustaka</string>\n    <string name=\"delete_downloads_for_manga\">Hapus bab terunduh?</string>\n    <string name=\"display_mode_chapter\">Bab %1$s</string>\n    <string name=\"chapter_downloading_progress\">Mengunduh (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Kesalahan</string>\n    <string name=\"chapter_paused\">Jeda</string>\n    <string name=\"show_title\">Judul</string>\n    <string name=\"show_chapter_number\">Nomor bab</string>\n    <string name=\"sort_by_source\">Sumber</string>\n    <string name=\"sort_by_number\">Nomor bab</string>\n    <string name=\"manga_download\">Unduh</string>\n    <string name=\"download_unread\">Belum dibaca</string>\n    <string name=\"confirm_delete_chapters\">Yakin ingin menghapus bab yang dipilih?</string>\n    <string name=\"manga_tracking_tab\">Pelacakan</string>\n    <string name=\"reading\">Membaca</string>\n    <string name=\"completed\">Selesai</string>\n    <string name=\"dropped\">Tidak diselesaikan</string>\n    <string name=\"on_hold\">Ditahan</string>\n    <string name=\"plan_to_read\">Akan dibaca</string>\n    <string name=\"score\">Nilai</string>\n    <string name=\"title\">Judul</string>\n    <string name=\"status\">Status</string>\n    <string name=\"error_category_exists\">Kategori dengan nama ini sudah ada!</string>\n    <string name=\"snack_categories_deleted\">Kategori dihapus</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ini akan menghapus tanggal baca bab ini. Apakah Anda yakin?</string>\n    <string name=\"dialog_with_checkbox_reset\">Setel ulang semua bab untuk entri ini</string>\n    <string name=\"snack_add_to_library\">Tambahkan ke pustaka?</string>\n    <string name=\"picture_saved\">Gambar disimpan</string>\n    <string name=\"custom_filter\">Filter khusus</string>\n    <string name=\"set_as_cover\">Terapkan sebagai sampul</string>\n    <string name=\"cover_updated\">Sampul telah diperbarui</string>\n    <string name=\"chapter_progress\">Halaman: %1$d</string>\n    <string name=\"no_next_chapter\">Bab berikutnya tak ditemukan</string>\n    <string name=\"decode_image_error\">Gambar tidak dapat dimuat</string>\n    <string name=\"confirm_set_image_as_cover\">Gunakan gambar ini sebagai sampul?</string>\n    <string name=\"download_queue_error\">Tidak dapat mengunduh bab. Anda bisa mencoba lagi di bagian unduhan</string>\n    <string name=\"notification_new_chapters\">Bab baru ditemukan</string>\n    <string name=\"notification_cover_update_failed\">Gagal memperbarui sampul</string>\n    <string name=\"notification_first_add_to_library\">Tolong tambahkan entri ke pustaka Anda sebelum melakukan ini</string>\n    <string name=\"file_select_cover\">Pilih gambar sampul</string>\n    <string name=\"file_select_backup\">Pilih berkas cadangan</string>\n    <string name=\"update_check_confirm\">Unduh</string>\n    <string name=\"update_check_no_new_updates\">Pembaruan tidak tersedia</string>\n    <string name=\"update_check_notification_download_in_progress\">Mengunduh…</string>\n    <string name=\"update_check_notification_download_complete\">Ketuk untuk menginstal pembaruan</string>\n    <string name=\"update_check_notification_download_error\">Terjadi kesalahan saat mengunduh</string>\n    <string name=\"update_check_notification_update_available\">Versi baru tersedia!</string>\n    <string name=\"information_no_downloads\">Tidak ada unduhan</string>\n    <string name=\"information_no_recent\">Tidak ada pembaruan terkini</string>\n    <string name=\"information_no_recent_manga\">Tidak ada yang dibaca baru-baru ini</string>\n    <string name=\"information_empty_library\">Pustaka Anda kosong</string>\n    <string name=\"download_notifier_downloader_title\">Pengunduh</string>\n    <string name=\"download_notifier_title_error\">Gagal</string>\n    <string name=\"download_notifier_unknown_error\">Terjadi kesalahan saat mengunduh bab</string>\n    <string name=\"download_notifier_text_only_wifi\">Tidak terhubung dengan Wi-Fi</string>\n    <string name=\"download_notifier_no_network\">Tidak ada koneksi jaringan yang tersedia</string>\n    <string name=\"download_notifier_download_paused\">Unduhan dijeda</string>\n    <string name=\"action_global_search\">Pencarian Global</string>\n    <string name=\"action_display_download_badge\">Diunduh</string>\n    <string name=\"other_source\">Lainnya</string>\n    <string name=\"action_global_search_hint\">Pencarian global…</string>\n    <string name=\"latest\">Terbaru</string>\n    <string name=\"browse\">Jelajahi</string>\n    <string name=\"channel_common\">Umum</string>\n    <string name=\"information_empty_category\">Anda belum memiliki kategori. Tekan tombol tambah untuk menambahkan kategori baru untuk mengatur pustaka Anda.</string>\n    <string name=\"label_migration\">Migrasi</string>\n    <string name=\"label_extensions\">Ekstensi</string>\n    <string name=\"label_extension_info\">Info Ekstensi</string>\n    <string name=\"ext_update\">Perbarui</string>\n    <string name=\"ext_install\">Pasang</string>\n    <string name=\"ext_pending\">Tertunda</string>\n    <string name=\"ext_downloading\">Mengunduh</string>\n    <string name=\"ext_installing\">Memasang</string>\n    <string name=\"ext_installed\">Terpasang</string>\n    <string name=\"ext_trust\">Percaya</string>\n    <string name=\"ext_untrusted\">Tidak terpercaya</string>\n    <string name=\"ext_uninstall\">Lepas</string>\n    <string name=\"untrusted_extension\">Ekstensi tidak terpercaya</string>\n    <string name=\"untrusted_extension_message\">Ekstensi berbahaya dapat membaca semua kredensial login yang disimpan atau menjalankan kode berbahaya.\n\\n\n\\nDengan mempercayai sertifikat ekstensi ini, Anda menerima risiko ini.</string>\n    <string name=\"pref_double_tap_anim_speed\">Kecepatan animasi ketukan dua kali</string>\n    <string name=\"double_tap_anim_speed_0\">Tanpa animasi</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Cepat</string>\n    <string name=\"manga_added_library\">Ditambahkan ke pustaka</string>\n    <string name=\"manga_removed_library\">Dihapus dari pustaka</string>\n    <string name=\"copied_to_clipboard\">Tersalin ke papan klip:\n\\n%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Pilih data yang ikut dipindah</string>\n    <string name=\"migrate\">Pindah</string>\n    <string name=\"copy\">Salin</string>\n    <string name=\"pager_viewer\">Halaman</string>\n    <string name=\"source_not_installed\">Sumber tidak terpasang: %1$s</string>\n    <string name=\"repeating\">Baca ulang</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Tipe</string>\n    <string name=\"transition_finished\">Selesai:</string>\n    <string name=\"transition_current\">Saat ini:</string>\n    <string name=\"transition_next\">Selanjutnya:</string>\n    <string name=\"transition_previous\">Sebelumnya:</string>\n    <string name=\"transition_no_next\">Tak ada bab selanjutnya</string>\n    <string name=\"transition_no_previous\">Tak ada bab sebelumnya</string>\n    <string name=\"transition_pages_loading\">Memuat halaman…</string>\n    <string name=\"transition_pages_error\">Gagal memuat halaman: %1$s</string>\n    <string name=\"action_open_in_web_view\">Buka dalam WebView</string>\n    <string name=\"pref_skip_read_chapters\">Lewati bab yang sudah dibaca</string>\n    <string name=\"pref_read_with_long_tap\">Tampilkan tindakan saat tekan lama</string>\n    <string name=\"pref_color_filter_mode\">Mode saringan warna campur</string>\n    <string name=\"filter_mode_overlay\">Lapisan</string>\n    <string name=\"filter_mode_multiply\">Gandakan</string>\n    <string name=\"filter_mode_screen\">Layar</string>\n    <string name=\"filter_mode_lighten\">Dodge / Cerahkan</string>\n    <string name=\"filter_mode_darken\">Burn / Gelapkan</string>\n    <string name=\"label_help\">Bantuan</string>\n    <string name=\"no_results_found\">Hasil tidak ditemukan</string>\n    <string name=\"migration_selection_prompt\">Pilih sumber yang akan dipindah</string>\n    <string name=\"action_webview_back\">Kembali</string>\n    <string name=\"action_webview_forward\">Teruskan</string>\n    <string name=\"action_webview_refresh\">Muat ulang</string>\n    <string name=\"pref_category_library\">Pustaka</string>\n    <string name=\"ext_obsolete\">Usang</string>\n    <string name=\"obsolete_extension_message\">Ekstensi ini tidak lagi tersedia. Ini mungkin tidak berfungsi dengan baik dan dapat menyebabkan masalah dengan aplikasi. Disarankan untuk menghapus instalasi.</string>\n    <string name=\"pref_date_format\">Format tanggal</string>\n    <string name=\"action_sort_latest_chapter\">Bab terbaru</string>\n    <string name=\"action_view_chapters\">Lihat bab</string>\n    <string name=\"action_cancel_all\">Batalkan semua</string>\n    <string name=\"theme_light\">Terang</string>\n    <string name=\"theme_dark\">Gelap</string>\n    <string name=\"theme_system\">Sistem</string>\n    <string name=\"pref_manage_notifications\">Kelola notifikasi</string>\n    <string name=\"pref_category_security\">Keamanan dan privasi</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_newest\">Terbaru</string>\n    <string name=\"action_oldest\">Terlama</string>\n    <string name=\"action_move_to_top\">Pindahkan ke atas</string>\n    <string name=\"action_move_to_bottom\">Pindahkan ke bawah</string>\n    <string name=\"label_more\">Lainnya</string>\n    <string name=\"pref_category_library_update\">Pembaruan</string>\n    <string name=\"lock_with_biometrics\">Memerlukan buka kunci</string>\n    <string name=\"lock_when_idle\">Kunci saat diam</string>\n    <string name=\"lock_always\">Selalu</string>\n    <string name=\"lock_never\">Tidak pernah</string>\n    <string name=\"ext_updates_pending\">Pembaruan tertunda</string>\n    <string name=\"pref_cutout_short\">Tampilkan konten di area yang terpotong</string>\n    <string name=\"secure_screen_summary\">Sembunyikan konten aplikasi saat berpindah aplikasi dan blokir tangkapan layar</string>\n    <string name=\"hide_notification_content\">Sembunyikan konten notifikasi</string>\n    <string name=\"pref_always_show_chapter_transition\">Selalu tampilkan transisi bab</string>\n    <string name=\"logout\">Keluar</string>\n    <string name=\"logout_success\">Anda sudah keluar</string>\n    <string name=\"paused\">Dijeda</string>\n    <string name=\"information_cloudflare_bypass_failure\">Gagal untuk menembus Cloudflare</string>\n    <string name=\"information_webview_outdated\">Harap perbarui aplikasi WebView untuk kompatibilitas yang lebih baik</string>\n    <string name=\"channel_new_chapters\">Pembaruan bab</string>\n    <string name=\"pref_disable_battery_optimization\">Nonaktifkan optimisasi baterai</string>\n    <string name=\"battery_optimization_disabled\">Optimalisasi baterai sudah dimatikan</string>\n    <string name=\"email\">Alamat surel</string>\n    <string name=\"secure_screen\">Amankan layar</string>\n    <string name=\"logout_title\">Keluar dari %1$s?</string>\n    <string name=\"pref_category_display\">Tampilan</string>\n    <string name=\"notification_chapters_single\">Bab %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Bab %1$s dan %2$d lainnya</string>\n    <string name=\"notification_chapters_multiple\">Bab %1$s</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Membantu pembaruan pustaka dan pencadangan di latar belakang</string>\n    <string name=\"label_sources\">Sumber</string>\n    <string name=\"channel_ext_updates\">Pembaruan ekstensi</string>\n    <string name=\"pref_category_reading\">Membaca</string>\n    <string name=\"information_webview_required\">WebView diperlukan agar aplikasi dapat berfungsi</string>\n    <string name=\"recent_manga_time\">Bab %1$s - %2$s</string>\n    <string name=\"updating_library\">Memperbarui pustaka</string>\n    <string name=\"add_tracking\">Tambahkan pelacak</string>\n    <string name=\"manga_info_collapse\">Lebih sedikit</string>\n    <string name=\"manga_info_expand\">Selengkapnya</string>\n    <string name=\"in_library\">Di pustaka</string>\n    <string name=\"add_to_library\">Tambahkan ke pustaka</string>\n    <string name=\"licenses\">Lisensi terbuka</string>\n    <string name=\"restoring_backup_error\">Gagal memulihkan data dari cadangan</string>\n    <string name=\"creating_backup_error\">Pencadangan data gagal</string>\n    <string name=\"pref_webtoon_side_padding\">Pinggiran samping</string>\n    <string name=\"pref_skip_filtered_chapters\">Lewati bab yang difilter</string>\n    <string name=\"action_unpin\">Hilangkan tanda</string>\n    <string name=\"action_pin\">Tandai</string>\n    <string name=\"action_select_inverse\">Pilih kebalikan</string>\n    <string name=\"label_downloaded_only\">Hanya yang sudah diunduh</string>\n    <string name=\"pinned_sources\">Tersemat</string>\n    <string name=\"website\">Situs web</string>\n    <string name=\"vertical_plus_viewer\">Strip panjang dengan celah</string>\n    <string name=\"local_source_help_guide\">Petunjuk sumber lokal</string>\n    <string name=\"last_used_source\">Terakhir digunakan</string>\n    <string name=\"downloaded_only_summary\">Saring semua entri di perpustakaan Anda</string>\n    <string name=\"check_for_updates\">Periksa pembaruan</string>\n    <string name=\"restoring_backup_canceled\">Pemulihan dibatalkan</string>\n    <string name=\"restore_in_progress\">Pemulihan masih dalam proses</string>\n    <string name=\"backup_in_progress\">Pencadangan masih dalam proses</string>\n    <string name=\"restore_duration\">%1$02d menit, %2$02d detik</string>\n    <string name=\"viewer\">Mode membaca</string>\n    <string name=\"gray_background\">Abu-abu</string>\n    <string name=\"pref_category_for_this_series\">Untuk seri ini</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Tidak dapat membuka pengaturan perangkat</string>\n    <string name=\"pref_refresh_library_covers\">Muat ulang sampul pustaka</string>\n    <string name=\"tracking_info\">Sinkronisasi satu arah untuk memperbarui kemajuan bab di layanan pelacak eksternal. Siapkan pelacakan untuk setiap entri dari tombol pelacaknya.</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Periksa sampul dan detail baru saat memperbarui pustaka</string>\n    <string name=\"pref_library_update_refresh_metadata\">Segarkan metadata secara otomatis</string>\n    <string name=\"action_migrate\">Pindah</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"backup_restore_missing_sources\">Sumber yang hilang:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Cadangan tidak berisi entri perpustakaan apa pun.</string>\n    <string name=\"invalid_backup_file\">File cadangan tidak valid:</string>\n    <string name=\"sort_by_upload_date\">Menurut tanggal pengunggahan</string>\n    <string name=\"action_display_comfortable_grid\">Grid nyaman</string>\n    <string name=\"tabs_header\">Tab</string>\n    <string name=\"action_display_show_tabs\">Tampilkan tab kategori</string>\n    <string name=\"page_list_empty_error\">Halaman tidak ditemukan</string>\n    <string name=\"action_disable_all\">Nonaktifkan semua</string>\n    <string name=\"action_enable_all\">Aktifkan semua</string>\n    <string name=\"pref_show_reading_mode_summary\">Perlihatkan mode saat ini secara singkat saat pembaca dibuka</string>\n    <string name=\"pref_show_reading_mode\">Tampilkan mode membaca</string>\n    <string name=\"action_start\">Mulai</string>\n    <string name=\"loader_not_implemented_error\">Sumber tidak ditemukan</string>\n    <string name=\"requires_app_restart\">Mulai ulang aplikasi untuk menerapkan pengaturan</string>\n    <string name=\"label_network\">Jaringan</string>\n    <string name=\"action_disable\">Matikan</string>\n    <string name=\"tapping_inverted_both\">Keduanya</string>\n    <string name=\"tapping_inverted_vertical\">Tegak</string>\n    <string name=\"tapping_inverted_horizontal\">Mendatar</string>\n    <string name=\"tapping_inverted_none\">Tidak</string>\n    <string name=\"pref_read_with_tapping_inverted\">Balikkan zona ketuk</string>\n    <string name=\"unknown_status\">Status tidak diketahui</string>\n    <string name=\"unknown_author\">Penulis tidak diketahui</string>\n    <string name=\"updated_version\">Diperbarui ke v%1$s</string>\n    <string name=\"whats_new\">Apa yang baru</string>\n    <string name=\"download_insufficient_space\">Tidak dapat mengunduh bab karena ruang penyimpanan rendah</string>\n    <string name=\"action_global_search_query\">Pencarian untuk \\\"%1$s\\\" secara global</string>\n    <string name=\"pref_category_reading_mode\">Mode membaca</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Tanggal ditambahkan</string>\n    <string name=\"no_pinned_sources\">Anda tidak memiliki sumber yang disematkan</string>\n    <string name=\"channel_complete\">Lengkap</string>\n    <string name=\"channel_progress\">Kemajuan</string>\n    <string name=\"channel_errors\">Masalah</string>\n    <string name=\"backup_restore_missing_trackers\">Pelacakan tidak tersinkronisasi di:</string>\n    <string name=\"ext_nsfw_warning\">Sumber dari ekstensi ini mungkin berisi konten DEWASA (NSFW 18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Hapus bab yang ditandai</string>\n    <string name=\"pref_category_delete_chapters\">Hapus chapter</string>\n    <string name=\"parental_controls_info\">Hal ini tidak mencegah ekstensi non-resmi atau konten DEWASA (NSFW 18+) yang tidak ditandai dengan benar muncul di dalam aplikasi.</string>\n    <string name=\"no_chapters_error\">Tidak ada bab yang ditemukan</string>\n    <string name=\"chapter_settings_updated\">Pengaturan bab bawaan diperbarui</string>\n    <string name=\"set_chapter_settings_as_default\">Terapkan sebagai bawaan</string>\n    <string name=\"also_set_chapter_settings_for_library\">Terapkan pula untuk semua entri di pustaka saya</string>\n    <string name=\"confirm_set_chapter_settings\">Apakah anda yakin ingin menyimpan pengaturan ini sebagai bawaan?</string>\n    <string name=\"chapter_settings\">Pengaturan bab</string>\n    <string name=\"share_page_info\">%1$s: %2$s, halaman %3$d</string>\n    <string name=\"action_search_settings\">Cari pengaturan</string>\n    <string name=\"downloaded_chapters\">Bab terunduh</string>\n    <string name=\"manga_from_library\">Dari pustaka</string>\n    <string name=\"pref_incognito_mode_summary\">Jeda riwayat membaca</string>\n    <string name=\"pref_incognito_mode\">Mode penyamaran</string>\n    <string name=\"pref_clear_history\">Hapus riwayat</string>\n    <string name=\"clear_history_confirmation\">Apakah anda yakin? Semua riwayat akan terhapus.</string>\n    <string name=\"clear_history_completed\">Riwayat telah dihapus</string>\n    <string name=\"pref_category_nsfw_content\">Sumber NSFW (18+)</string>\n    <string name=\"spen_next_page\">Halaman selanjutnya</string>\n    <string name=\"spen_previous_page\">Halaman sebelumnya</string>\n    <string name=\"migration_help_guide\">Petunjuk migrasi</string>\n    <string name=\"file_picker_error\">Tidak ada aplikasi pemilih berkas yang ditemukan</string>\n    <string name=\"myanimelist_relogin\">Harap login kembali ke MAL</string>\n    <string name=\"pref_show_nsfw_source\">Tampilkan di daftar sumber dan ekstensi</string>\n    <string name=\"edge_nav\">Tepi</string>\n    <string name=\"l_nav\">Bentuk L</string>\n    <string name=\"action_desc\">Urutan turun</string>\n    <string name=\"action_asc\">Urutan naik</string>\n    <string name=\"action_order_by_chapter_number\">Menurut nomor bab</string>\n    <string name=\"action_order_by_upload_date\">Menurut tanggal unggahan</string>\n    <string name=\"action_filter_tracked\">Dilacak</string>\n    <string name=\"pref_dump_crash_logs\">Bagikan log kerusakan</string>\n    <string name=\"track_finished_reading_date\">Tanggal selesai</string>\n    <string name=\"track_started_reading_date\">Tanggal mulai</string>\n    <string name=\"pref_dump_crash_logs_summary\">Simpan log kerusakan ke sebuah berkas untuk dibagikan dengan pengembang aplikasi</string>\n    <string name=\"pref_viewer_nav\">Zona ketuk</string>\n    <string name=\"right_and_left_nav\">Kanan dan Kiri</string>\n    <string name=\"action_display_show_number_of_items\">Tampilkan jumlah item</string>\n    <string name=\"none\">Kosong</string>\n    <string name=\"action_show_errors\">Ketuk untuk melihat detail</string>\n    <string name=\"action_sort_chapter_fetch_date\">Tanggal bab dimasukkan</string>\n    <string name=\"pref_reader_actions\">Aksi</string>\n    <string name=\"nav_zone_right\">Kanan</string>\n    <string name=\"nav_zone_left\">Kiri</string>\n    <string name=\"nav_zone_next\">Lanjut</string>\n    <string name=\"nav_zone_prev\">Sebelum</string>\n    <string name=\"automatic_background\">Otomatis</string>\n    <string name=\"pref_create_folder_per_manga\">Menyimpan halaman ke dalam folder terpisah</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Membuat folder menurut judul entri</string>\n    <string name=\"exclude\">Kecuali: %s</string>\n    <string name=\"include\">Termasuk: %s</string>\n    <string name=\"pref_dual_page_split\">Membagi halaman lebar</string>\n    <string name=\"cancel_all_for_series\">Batal semua untuk seri ini</string>\n    <string name=\"update_check_eol\">Versi Android ini tidak lagi didukung</string>\n    <string name=\"clipboard_copy_error\">Gagal menyalin ke papan klip</string>\n    <string name=\"pref_dns_over_https\">DNS melalui HTTPS (DoH)</string>\n    <string name=\"kindlish_nav\">semacam Kindle</string>\n    <string name=\"pref_category_auto_download\">Unduh otomatis</string>\n    <string name=\"backup_restore_content_full\">Anda mungkin perlu memasang ulang ekstensi yang hilang dan log in ke layanan pelacakan setelahnya untuk menggunakannya.</string>\n    <string name=\"notification_incognito_text\">Matikan mode penyamaran</string>\n    <string name=\"source_unsupported\">Sumber tidak didukung</string>\n    <string name=\"error_no_match\">Tidak ditemukan kecocokan</string>\n    <string name=\"unread\">Belum dibaca</string>\n    <string name=\"rotation_landscape\">Layar mendatar</string>\n    <string name=\"rotation_portrait\">Layar Tegak</string>\n    <string name=\"pref_download_new_categories_details\">Entri dalam kategori yang dikecualikan tidak akan diunduh meskipun mereka juga termasuk dalam kategori yang disertakan.</string>\n    <string name=\"rotation_type\">Rotasi</string>\n    <string name=\"pref_grayscale\">Skala abu-abu</string>\n    <string name=\"pref_show_navigation_mode\">Tampilkan zona ketukan</string>\n    <string name=\"pref_library_update_categories_details\">Entri dalam kategori yang dikecualikan tidak akan diperbarui meskipun mereka juga termasuk dalam kategori yang disertakan.</string>\n    <string name=\"date\">Tanggal</string>\n    <string name=\"local_filter_order_by\">Urutkan menurut</string>\n    <string name=\"local_invalid_format\">Format bab tidak valid</string>\n    <string name=\"chapter_not_found\">Bab tak ditemukan</string>\n    <string name=\"pref_dual_page_invert_summary\">Jika penempatan halaman lebar terpisah tidak sesuai dengan arah membaca</string>\n    <string name=\"pref_dual_page_invert\">Balikkan penempatan halaman pemisah</string>\n    <string name=\"pref_show_navigation_mode_summary\">Tunjukkan secara singkat saat pembaca dibuka</string>\n    <string name=\"restrictions\">Batasan: %s</string>\n    <string name=\"action_display_local_badge\">Sumber lokal</string>\n    <string name=\"error_sharing_cover\">Gagal berbagi sampul</string>\n    <string name=\"error_saving_cover\">Gagal menyimpan sampul</string>\n    <string name=\"cover_saved\">Sampul disimpan</string>\n    <string name=\"manga_cover\">Sampul</string>\n    <string name=\"off\">Matikan</string>\n    <string name=\"on\">Aktif</string>\n    <string name=\"tracking_guide\">Panduan pelacakan</string>\n    <string name=\"categorized_display_settings\">Pengaturan per-kategori untuk urutan</string>\n    <string name=\"information_empty_category_dialog\">Anda belum memiliki kategori apapun.</string>\n    <string name=\"action_start_downloading_now\">Mulai mengunduh sekarang</string>\n    <string name=\"about_dont_kill_my_app\">Beberapa pabrikan mempunyai batasan aplikasi tambahan yang mematikan layanan latar belakang. Website ini memiliki info lebih lanjut untuk memperbaikinya.</string>\n    <string name=\"restore_miui_warning\">Pencadangan/pemulihan mungkin tidak berfungsi jika Optimisasi MIUI dimatikan.</string>\n    <string name=\"enhanced_tracking_info\">Menyediakan fitur yang disempurnakan untuk sumber tertentu. Entri secara otomatis dilacak ketika ditambahkan ke perpustakaan Anda.</string>\n    <string name=\"enhanced_services\">Pelacak yang ditingkatkan</string>\n    <string name=\"pref_dark_theme_pure_black\">Mode gelap hitam pekat</string>\n    <string name=\"theme_yotsuba\">Empat Daun</string>\n    <string name=\"theme_yinyang\">Yin dan Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Stroberi Daiquiri</string>\n    <string name=\"theme_midnightdusk\">Senja Tengah Malam</string>\n    <string name=\"theme_greenapple\">Hijau Apel</string>\n    <string name=\"theme_monet\">Dinamis</string>\n    <string name=\"pref_app_theme\">Tema aplikasi</string>\n    <string name=\"label_background_activity\">Aktivitas latar belakang</string>\n    <string name=\"pref_lowest\">Terendah</string>\n    <string name=\"pref_low\">Rendah</string>\n    <string name=\"pref_hide_threshold\">Sensitivitas untuk menyembunyikan menu dalam gulir</string>\n    <string name=\"pref_high\">Tinggi</string>\n    <string name=\"pref_highest\">Tertinggi</string>\n    <string name=\"pref_inverted_colors\">Terbalik</string>\n    <string name=\"relative_time_today\">Hari Ini</string>\n    <string name=\"getting_started_guide\">Panduan awal mulai</string>\n    <string name=\"action_track\">Lacak</string>\n    <string name=\"theme_tealturquoise\">Teal &amp; Pirus</string>\n    <string name=\"pref_category_appearance\">Tampilan</string>\n    <string name=\"confirm_lock_change\">Autentikasi untuk mengonfirmasi perubahan</string>\n    <string name=\"label_default\">Bawaan</string>\n    <string name=\"pref_remove_exclude_categories\">Kategori yang dikecualikan</string>\n    <string name=\"help_translate\">Bantu terjemahkan</string>\n    <string name=\"pref_tablet_ui_mode\">UI tablet</string>\n    <string name=\"ext_app_info\">Informasi aplikasi</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku tidak berjalan</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Pasang dan mulai Shizuku untuk menggunakan Shizuku sebagai pemasang ekstensi.</string>\n    <string name=\"ext_install_service_notif\">Memasang ekstensi…</string>\n    <string name=\"ext_installer_legacy\">Warisan</string>\n    <string name=\"ext_installer_pref\">Pemasang</string>\n    <string name=\"action_sort_count\">Total entri</string>\n    <string name=\"notification_size_warning\">Pembaruan berskala besar membahayakan sumber, dapat membuat pembaruan lambat dan meningkatkan penggunaan baterai. Ketuk untuk mempelajari lebih lanjut.</string>\n    <string name=\"download_queue_size_warning\">Peringatan: mengunduh dalam jumlah besar bisa menyebabkan sumber menjadi lambat dan/atau memblokir Mihon. Ketuk untuk mempelajari lebih lanjut.</string>\n    <string name=\"label_warning\">Peringatan</string>\n    <string name=\"pref_verbose_logging_summary\">Cetak catatan berlebih ke catatan sistem (mengurangi kinerja aplikasi)</string>\n    <string name=\"backup_info\">Anda juga harus menyimpan salinan cadangan di tempat lain. Cadangan mungkin berisi data sensitif termasuk kata sandi yang tersimpan; berhati-hatilah jika berbagi.</string>\n    <string name=\"pref_verbose_logging\">Pencatatan berlebihan</string>\n    <string name=\"pref_custom_color_filter\">Filter warna kustom</string>\n    <string name=\"pref_custom_brightness\">Atur kecerahan</string>\n    <string name=\"action_display_language_badge\">Bahasa</string>\n    <string name=\"update_72hour\">Tiap 3 hari</string>\n    <string name=\"connected_to_wifi\">Hanya pada Wi-FI</string>\n    <string name=\"channel_app_updates\">Pembaruan aplikasi</string>\n    <string name=\"ext_update_all\">Perbarui semuanya</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Bersihkan cache bab saat aplikasi dibuka</string>\n    <string name=\"database_clean\">Tidak ada yang perlu dibersihkan</string>\n    <string name=\"clear_database_source_item_count\">%1$d entri non-perpustakaan dalam database</string>\n    <string name=\"extension_api_error\">Gagal mendapatkan ekstensi yang tersedia</string>\n    <string name=\"pref_update_only_completely_read\">Lewati daftar dengan chapter yang belum dibaca</string>\n    <string name=\"privacy_policy\">Kebijakan privasi</string>\n    <string name=\"publishing_finished\">Penerbitan selesai</string>\n    <string name=\"cancelled\">Dibatalkan</string>\n    <string name=\"on_hiatus\">Sedang Hiatus</string>\n    <string name=\"library_errors_help\">Untuk bantuan cara memperbaiki kesalahan pembaruan pustaka, lihat %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Simpan sebagai arsip CBZ</string>\n    <string name=\"action_show_manga\">Lihat entri</string>\n    <string name=\"action_display_cover_only_grid\">Grid sampul saja</string>\n    <string name=\"pref_update_only_started\">Lewati dafter yang belum mulai dibaca</string>\n    <string name=\"skipped_reason_completed\">Dilewati karena seri telah selesai</string>\n    <string name=\"skipped_reason_not_caught_up\">Dilewati karena ada bab yang belum dibaca</string>\n    <string name=\"skipped_reason_not_started\">Dilewati karena tidak ada bab yang dibaca</string>\n    <string name=\"pref_landscape_zoom\">Secara otomatis melebarkan gambar</string>\n    <string name=\"pref_navigate_pan\">Geser gambar lebar</string>\n    <string name=\"learn_more\">Pelajari lebih lanjut</string>\n    <string name=\"rotation_reverse_portrait\">Layar tegak terbalik</string>\n    <string name=\"notification_update_error\">%1$d pembaruan gagal</string>\n    <string name=\"action_move_to_top_all_for_series\">Pindahkan seri ke atas</string>\n    <string name=\"disabled_nav\">Dinonaktifkan</string>\n    <string name=\"error_saving_picture\">Gagal menyimpan gambar</string>\n    <string name=\"empty_backup_error\">Tidak ada entri perpustakaan untuk dicadangkan</string>\n    <string name=\"update_check_open\">Buka di Github</string>\n    <string name=\"pref_clear_webview_data\">Membersihkan data WebView</string>\n    <string name=\"webview_data_deleted\">Data WebView telah dibersihkan</string>\n    <string name=\"action_close\">Tutup</string>\n    <string name=\"source_filter_empty_screen\">Sumber yang diinstal tidak ditemukan</string>\n    <string name=\"source_empty_screen\">Tidak ada sumber yang ditemukan</string>\n    <string name=\"action_sort_last_manga_update\">Pembaruan terakhir</string>\n    <string name=\"action_sort_unread_count\">Jumlah belum dibaca</string>\n    <string name=\"split_tall_images_summary\">Meningkatkan kinerja pembaca</string>\n    <string name=\"download_notifier_split_page_not_found\">Halaman %d tidak ditemukan saat dipisah</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Tidak dapat menemukan jalur file halaman %d</string>\n    <string name=\"pref_reset_viewer_flags_success\">Atur ulang semua pengaturan pengguna</string>\n    <string name=\"pref_reset_viewer_flags\">Muat ulang pengaturan per-pengguna</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Atur ulang mode dan orientasi dari semua seri</string>\n    <string name=\"empty_screen\">Yah, ini aneh</string>\n    <string name=\"pref_reset_viewer_flags_error\">Tidak bisa mengatur ulang setelan pembaca</string>\n    <string name=\"ext_info_version\">Versi</string>\n    <string name=\"ext_info_language\">Bahasa</string>\n    <string name=\"ext_info_age_rating\">Rating Umur</string>\n    <string name=\"reading_list\">Daftar Bacaan</string>\n    <string name=\"unfinished_list\">Daftar Yang Belum Selesai</string>\n    <string name=\"wish_list\">Daftar Keinginan</string>\n    <string name=\"complete_list\">Daftar Selesai</string>\n    <string name=\"on_hold_list\">Daftar Tertahan</string>\n    <string name=\"network_not_metered\">Hanya di jaringan tanpa batasan</string>\n    <string name=\"cant_open_last_read_chapter\">Gagal membuka bab terakhir dibaca</string>\n    <string name=\"custom_cover\">Sampul kustom</string>\n    <string name=\"not_installed\">Tidak terinstall</string>\n    <string name=\"pref_app_language\">Bahasa aplikasi</string>\n    <string name=\"theme_lavender\">Bunga Lavender</string>\n    <string name=\"description_placeholder\">Tidak ada deskripsi</string>\n    <string name=\"delete_category_confirmation\">Apakah anda ingin menghapus kategori \\\"%s\\\"?</string>\n    <string name=\"internal_error\">InternalError: Periksa log kerusakan untuk informasi lebih lanjut</string>\n    <string name=\"delete_category\">Hapus kategori</string>\n    <string name=\"pref_user_agent_string\">String agen pengguna default</string>\n    <string name=\"pref_reset_user_agent_string\">Setel ulang string agen pengguna default</string>\n    <string name=\"action_remove_everything\">Hapus semuanya</string>\n    <string name=\"appwidget_updates_description\">Lihat entri pustaka Anda yang baru saja diperbarui</string>\n    <string name=\"appwidget_unavailable_locked\">Widget tidak tersedia saat kunci aplikasi diaktifkan</string>\n    <string name=\"update_already_running\">Pembaruan sudah berjalan</string>\n    <string name=\"error_user_agent_string_blank\">String agen pengguna wajib diisi</string>\n    <string name=\"theme_tidalwave\">Gelombang Pasang</string>\n    <string name=\"download_ahead\">Unduh di depan</string>\n    <string name=\"auto_download_while_reading\">Unduh otomatis ketika sedang membaca</string>\n    <string name=\"download_ahead_info\">Hanya berfungsi jika bab saat ini + bab berikutnya sudah diunduh.</string>\n    <string name=\"remove_manga\">Kamu akan menghapus \\\"%s\\\" dari pustaka</string>\n    <string name=\"updates_last_update_info\">Pustaka terakhir diperbarui: %s</string>\n    <string name=\"multi_lang\">Semua</string>\n    <string name=\"are_you_sure\">Apa kamu yakin?</string>\n    <string name=\"popular\">Populer</string>\n    <string name=\"missing_storage_permission\">Izin penyimpanan tidak diberikan</string>\n    <string name=\"skipped_reason_not_always_update\">Dilewati karena seri ini tidak memerlukan pembaruan</string>\n    <string name=\"action_search_hint\">Cari…</string>\n    <string name=\"pref_browse_summary\">Sumber, ekstensi, pencarian global</string>\n    <string name=\"pref_reader_summary\">Mode membaca, tampilan, navigasi</string>\n    <string name=\"pref_tracking_summary\">Sinkronisasi progres searah, sinkronisasi yang ditingkatkan</string>\n    <string name=\"crash_screen_description\">%s mengalami kesalahan tak terduga. Kami menyarankan Anda membagi log kerusakan di saluran dukungan kami di Discord.</string>\n    <string name=\"pref_downloads_summary\">Unduh otomatis, unduh terlebih dahulu</string>\n    <string name=\"pref_security_summary\">Kunci aplikasi, amankan layar</string>\n    <string name=\"pref_appearance_summary\">Tema, format tanggal &amp; waktu</string>\n    <string name=\"pref_library_summary\">Kategori, pembaruan global, geser chapter</string>\n    <string name=\"pref_backup_summary\">Pencadangan manual &amp; otomatis, ruang penyimpanan</string>\n    <string name=\"pref_advanced_summary\">Buat log kerusakan, pengoptimalan baterai</string>\n    <string name=\"crash_screen_title\">Aduh!</string>\n    <string name=\"crash_screen_restart_application\">Mulai ulang aplikasi</string>\n    <string name=\"invalid_location\">Lokasi tidak valid: %s</string>\n    <string name=\"unknown_title\">Judul tidak diketahui</string>\n    <string name=\"error_user_agent_string_invalid\">String agen pengguna tidak valid</string>\n    <string name=\"updates_last_update_info_just_now\">Baru saja</string>\n    <string name=\"action_open_random_manga\">Buka entri acak</string>\n    <string name=\"download_notifier_cache_renewal\">Memeriksa unduhan</string>\n    <string name=\"information_no_entries_found\">Tidak ada entri yang ditemukan dalam kategori ini</string>\n    <string name=\"fdroid_warning\">Build F-Droid tidak didukung secara resmi.\n\\n Ketuk untuk mempelajari lebih lanjut.</string>\n    <string name=\"action_display_show_continue_reading_button\">Tombol lanjutkan membaca</string>\n    <string name=\"track_remove_date_conf_title\">Hapus tanggal?</string>\n    <string name=\"pref_invalidate_download_cache\">Mengindeks ulang unduhan</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Paksa aplikasi untuk mengecek ulang bab ter-unduh</string>\n    <string name=\"track_remove_start_date_conf_text\">Ini akan menghapus tanggal mulai yang Anda pilih sebelumnya dari %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Ini akan menghapus tanggal selesai yang Anda pilih sebelumnya dari %s</string>\n    <string name=\"label_stats\">Statistik</string>\n    <string name=\"label_titles_section\">Entri</string>\n    <string name=\"label_titles_in_global_update\">Dalam pembaruan global</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_read_chapters\">Baca</string>\n    <string name=\"label_mean_score\">Rata-rata nilai</string>\n    <string name=\"label_used\">Telah digunakan</string>\n    <string name=\"hour_short\">%djam</string>\n    <string name=\"label_started\">Dimulai</string>\n    <string name=\"label_local\">Lokal</string>\n    <string name=\"label_downloaded\">Terunduh</string>\n    <string name=\"label_read_duration\">Durasi baca</string>\n    <string name=\"label_tracker_section\">Pelacak</string>\n    <string name=\"label_tracked_titles\">Entri yang dilacak</string>\n    <string name=\"seconds_short\">%ddetik</string>\n    <string name=\"minute_short\">%dmenit</string>\n    <string name=\"label_overview_section\">Ringkasan</string>\n    <string name=\"label_completed_titles\">Entri selesai</string>\n    <string name=\"not_applicable\">Tidak tersedia</string>\n    <string name=\"day_short\">%dhari</string>\n    <string name=\"action_not_now\">Tidak sekarang</string>\n    <string name=\"pref_library_update_show_tab_badge\">Tampilkan jumlah yang belum dibaca pada ikon Pembaruan</string>\n    <string name=\"information_no_manga_category\">Kategori ini kosong</string>\n    <string name=\"copied_to_clipboard_plain\">Tersalin di papan klip</string>\n    <string name=\"enhanced_services_not_installed\">Tersedia tetapi sumber tidak terpasang: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Melewati bab terduplikasi</string>\n    <string name=\"confirm_add_duplicate_manga\">Kamu memiliki entri di pustaka dengan nama yang sama.\n\\n\n\\nApakah kamu ingin melanjutkan?</string>\n    <string name=\"track_error\">%1$s eror: %2$s</string>\n    <string name=\"information_required_plain\">*dibutuhkan</string>\n    <string name=\"pref_hide_in_library_items\">Semua catatan tersembunyi sudah ada di perpustakaan</string>\n    <string name=\"action_copy_to_clipboard\">Salin ke papan klip</string>\n    <string name=\"action_update_category\">Perbarui kategori</string>\n    <string name=\"split_tall_images\">Potong gambar tinggi</string>\n    <string name=\"overlay_header\">Lapisan awal</string>\n    <string name=\"pref_page_rotate\">Memutar halaman lebar agar pas</string>\n    <string name=\"pref_page_rotate_invert\">Orientasi balik halaman lebar yang diputar</string>\n    <string name=\"pref_debug_info\">Info debug</string>\n    <string name=\"pref_chapter_swipe_end\">Geser kekanan</string>\n    <string name=\"pref_chapter_swipe_start\">Geser kekiri</string>\n    <string name=\"pref_double_tap_zoom\">Ketuk dua kali untuk memperbesar</string>\n    <string name=\"action_set_interval\">Terapkan jeda waktu</string>\n    <string name=\"action_filter_interval_custom\">Frekuensi pembaruan yang disesuaikan</string>\n    <string name=\"skipped_reason_not_in_release_period\">Dilewati karena tidak ada rilis yang diharapkan hari ini</string>\n    <string name=\"action_sort_next_updated\">Pembaruan yang diharapkan berikutnya</string>\n    <string name=\"intervals_header\">Interval</string>\n    <string name=\"pref_update_only_in_release_period\">Prediksikan waktu rilis selanjutnya</string>\n    <string name=\"manga_display_interval_title\">Perkirakan setiap</string>\n    <string name=\"manga_display_modified_interval_title\">Atur untuk memperbarui setiap</string>\n    <string name=\"track_delete_title\">Hapus %s pelacakan?</string>\n    <string name=\"action_ok\">Oke</string>\n    <string name=\"track_delete_text\">Ini akan menghapus pelacakan lokal.</string>\n    <string name=\"track_delete_remote_text\">Hapus juga dari %s</string>\n    <string name=\"delete_downloaded\">Hapus unduhan</string>\n    <string name=\"has_results\">Memiliki hasil</string>\n    <string name=\"syncing_library\">Sinkronisasi pustaka</string>\n    <string name=\"library_sync_complete\">Sinkronisasi pustaka selesai</string>\n    <string name=\"information_cloudflare_help\">Ketuk di sini untuk bantuan dengan Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Indeks unduhan tidak valid</string>\n    <string name=\"track_activity_name\">Pelacak login</string>\n    <string name=\"create_backup_file_error\">Tidak dapat membuat file cadangan</string>\n    <string name=\"unlock_app_title\">Buka kunci %s</string>\n    <string name=\"exception_offline\">Tidak ada koneksi Internet</string>\n    <string name=\"exception_http\">HTTP %d, periksa situs web di WebView</string>\n    <string name=\"exception_unknown_host\">Tidak dapat mencapai %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Pindahkan seri ke bawah</string>\n    <string name=\"pref_relative_format\">Penanda waktu</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" seharusnya \\\"%2$s\\\"</string>\n    <string name=\"notification_updating_progress\">Memperbarui pustaka... (%s)</string>\n    <string name=\"file_null_uri_error\">Tidak ada file yang dipilih</string>\n    <string name=\"source_settings\">Pengaturan sumber</string>\n    <string name=\"app_settings\">Pengaturan aplikasi</string>\n    <string name=\"action_create\">Buat</string>\n    <string name=\"relative_time_span_never\">Tidak pernah</string>\n    <string name=\"pref_flash_page_summ\">Mengurangi ghosting pada tampilan e-ink</string>\n    <string name=\"action_apply\">Terapkan</string>\n    <string name=\"action_revert_to_default\">Kembalikan ke default</string>\n    <string name=\"last_auto_backup_info\">Terakhir dicadangkan secara otomatis: %s</string>\n    <string name=\"no_scanlators_found\">Tidak ditemukan pemindai</string>\n    <string name=\"scanlator\">Pemindai</string>\n    <string name=\"pref_flash_page\">Perlihatkan kilatan saat halaman berubah</string>\n    <string name=\"pref_storage_usage\">Penggunaan penyimpanan</string>\n    <string name=\"action_sort_tracker_score\">Skor pelacak</string>\n    <string name=\"label_data_storage\">Data dan penyimpanan</string>\n    <string name=\"exclude_scanlators\">Kecualikan pemindai</string>\n    <string name=\"action_menu_overflow_description\">Opsi lebih lanjut</string>\n    <string name=\"selected\">Dipilih</string>\n    <string name=\"not_selected\">Tidak dipilih</string>\n    <string name=\"action_bar_up_description\">Navigasi ke atas</string>\n    <string name=\"pref_storage_location\">Lokasi penyimpanan</string>\n    <string name=\"pref_storage_location_info\">Digunakan untuk pencadangan otomatis, pengunduhan bab, dan sumber lokal.</string>\n    <string name=\"onboarding_storage_action_select\">Pilih direktori</string>\n    <string name=\"pref_onboarding_guide\">Panduan awal</string>\n    <string name=\"onboarding_guides_new_user\">Baru mengenal %s? Kami menyarankan Anda membaca panduan awal.</string>\n    <string name=\"onboarding_action_finish\">Selesai</string>\n    <string name=\"onboarding_storage_selection_required\">Harap pilih direktori terlebih dahulu</string>\n    <string name=\"onboarding_permission_notifications\">Izin notifikasi</string>\n    <string name=\"onboarding_permission_install_apps\">Izin pasang aplikasi</string>\n    <string name=\"onboarding_heading\">Selamat Datang!</string>\n    <string name=\"onboarding_guides_returning_user\">Install ulang %s?</string>\n    <string name=\"onboarding_action_skip\">Lewati</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Hindari gangguan pada pembaruan pustaka, pengunduhan, dan pemulihan cadangan yang berlangsung lama.</string>\n    <string name=\"onboarding_action_next\">Selanjutnya</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Penggunaan baterai di latar belakang</string>\n    <string name=\"onboarding_permission_install_apps_description\">Untuk memasang ekstensi.</string>\n    <string name=\"onboarding_description\">Mari kita atur beberapa hal terlebih dahulu. Anda juga selalu dapat mengubahnya di menu pengaturan nanti.</string>\n    <string name=\"no_location_set\">Lokasi penyimpanan belum ditentukan</string>\n    <string name=\"onboarding_permission_notifications_description\">Dapatkan notifikasi untuk pembaruan pustaka dan sebagainya.</string>\n    <string name=\"onboarding_permission_action_grant\">Izinkan</string>\n    <string name=\"onboarding_storage_info\">Pilih direktori untuk menyimpan konten dari %1$s, termasuk unduhan chapter, data backup, dan lainnya.\n\\n\n\\nSebaiknya menggunakan direktori terpisah.\n\\n\n\\nDirektori yang dipilih: %2$s</string>\n    <string name=\"onboarding_storage_help_action\">Panduan penyimpanan</string>\n    <string name=\"pref_library_update_smart_update\">Pembauan pintar</string>\n    <string name=\"onboarding_storage_help_info\">Memperbarui dari versi lama dan tak yakin harus pilih mana? lihat panduan penyimpanan untuk informasi lebih lanjut.</string>\n    <string name=\"action_add_repo\">Tambahkan repo</string>\n    <string name=\"action_add_repo_message\">Tambahkan repo lain ke Mihon. Seharusnya URL yang memiliki akhiran \\\"index.min.json\\\".</string>\n    <string name=\"label_extension_repos\">Repositori ekstensi</string>\n    <string name=\"information_empty_repos\">Anda tidak memiliki repositori yang ditetapkan.</string>\n    <string name=\"invalid_backup_file_error\">Kesalahan penuh:</string>\n    <string name=\"error_repo_exists\">Repositori ini sudah ada!</string>\n    <string name=\"label_add_repo_input\">URL Repo</string>\n    <string name=\"invalid_repo_name\">URL repo tidak valid</string>\n    <string name=\"private_settings\">Sertakan pengaturan sensitif (contohnya, token login pelacak)</string>\n    <string name=\"ext_permission_install_apps_warning\">Izin diperlukan untuk memasang ekstensi. Klik disini untuk memberi izin.</string>\n    <string name=\"action_delete_repo\">Hapus repo</string>\n    <string name=\"delete_repo_confirmation\">Apa Anda yakin ingin menghapus repo \\\"%s\\\"?</string>\n    <string name=\"manga_interval_expected_update\">Bab baru diperkirakan akan dirils sekitar %1$s, diperiksa setiap sekitar %2$s.</string>\n    <string name=\"available_disk_space_info\">Tersedia:%1$s/Total:%2$s</string>\n    <string name=\"manga_interval_custom_amount\">Frekuensi pembaruan khusus:</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"manga_interval_expected_update_soon\">Segera</string>\n    <string name=\"ext_revoke_trust\">Cabut izin ekstensi tidak dikenal yang tepercaya</string>\n    <string name=\"action_open_repo\">Repo sumber terbuka</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Menonaktifkan zoom out</string>\n    <string name=\"label_upcoming\">Yang akan datang</string>\n    <string name=\"action_migrate_duplicate\">Migrasikan entri yang ada</string>\n    <string name=\"action_replace_repo_message\">Repositori %1$s memiliki Signing Key Fingerprint yang sama dengan %2$s.\n\\nJika hal ini diharapkan, %2$s akan diganti, jika tidak, hubungi pengelola repo Anda.</string>\n    <string name=\"action_add_anyway\">Tambahkan saja</string>\n    <string name=\"pref_display_profile\">Profil tampilan khusus</string>\n    <string name=\"action_replace_repo\">Ganti</string>\n    <string name=\"action_replace_repo_title\">Signing Key Fingerprint sudah ada</string>\n    <string name=\"action_view_upcoming\">Lihat Pembaruan Mendatang</string>\n    <string name=\"upcoming_guide\">Panduan Mendatang</string>\n    <string name=\"upcoming_calendar_next\">Bulan Depan</string>\n    <string name=\"upcoming_calendar_prev\">Bulan Kemarin</string>\n    <string name=\"manga_interval_expected_update_null\">Manga ini sudah selesai, atau belum ada tanggal rilis yang diperkirakan.</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Gagal mendapatkan akses folder yang terus-menerus. Aplikasi mungkin berperilaku tak terduga.</string>\n    <string name=\"pref_flash_duration\">Durasi lampu kilat</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Flash setiap</string>\n    <string name=\"pref_flash_with\">Flash dengan</string>\n    <string name=\"pref_flash_style_black\">Hitam</string>\n    <string name=\"pref_flash_style_white\">Putih</string>\n    <string name=\"pref_flash_style_white_black\">Hitam Putih</string>\n    <string name=\"action_copy_link\">Salin link</string>\n    <string name=\"extensionRepo_settings\">Ekstensi Penyimpanan</string>\n    <string name=\"invalid_backup_file_json\">Pencadangan JSON tidak didukung</string>\n    <string name=\"invalid_backup_file_unknown\">File cadangan rusak</string>\n    <string name=\"add_repo_confirmation\">Apakah Anda ingin menambahkan repo \\\"%s\\\"?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Lewati pengunduhan bagian yang sudah dibaca berulang kali</string>\n    <string name=\"confirm_tracker_update\">Perbarui pelacak ke bab %d?</string>\n    <string name=\"action_sort_random\">Acak</string>\n    <string name=\"onboarding_permission_crashlytics\">Kirim log kerusakan</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Kirim catatan kerusakan yang anonim ke pengembang.</string>\n    <string name=\"onboarding_permission_analytics\">Izinkan analitik</string>\n    <string name=\"onboarding_permission_analytics_description\">Kirim data penggunaan anonim untuk meningkatkan fitur aplikasi.</string>\n    <string name=\"pref_firebase\">Analisis dan Log Kerusakan</string>\n    <string name=\"firebase_summary\">Mengirim log kerusakan dan analitik akan memungkinkan kami mengidentifikasi dan memperbaiki masalah, meningkatkan kinerja, dan membuat pembaruan mendatang lebih relevan dengan kebutuhan anda</string>\n    <string name=\"pref_security\">Keamanan</string>\n    <string name=\"non_library_settings\">Semua entri yang sudah dibaca</string>\n    <string name=\"remove_private_extension_message\">Apa anda yakin ingin menghapus ekstensi \\\"%s\\\"?</string>\n    <string name=\"ext_remove\">Hapus</string>\n    <string name=\"ext_confirm_remove\">Hapus Ekstensi?</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Kemajuan pembaruan saat ditandai sebagai telah dibaca</string>\n    <string name=\"trackers_updated_summary\">Pelacak diperbarui ke bab %d</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Batas bitmap perangkat keras kustom</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Jika pembaca memuat gambar kosong, kurangi threshold secara bertahap.\\nPilih: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Bawaan (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Mempengaruhi performa. Aktifkan hanya jika menurunkan batas bitmap tidak memperbaiki gambar kosong</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Jeda riwayat pembacaan untuk ekstensi</string>\n    <string name=\"label_auto\">Otomatis</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Gunakan dekoder lama untuk bacaan strip panjang</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Tandai bab duplikat sebagai sudah dibaca</string>\n    <string name=\"theme_monochrome\">Monokrom</string>\n    <string name=\"export\">Ekspor</string>\n    <string name=\"library_list\">Daftar pustaka</string>\n    <string name=\"library_exported\">Pustaka diekspor</string>\n    <string name=\"author\">Penulis</string>\n    <string name=\"artist\">Seniman</string>\n    <string name=\"tracked_privately\">Dilacak secara pribady</string>\n    <string name=\"action_toggle_private_on\">Lacak secara pribadi</string>\n    <string name=\"action_toggle_private_off\">Lacak secara publik</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/it/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Dopo %1$s minuto</item>\n        <item quantity=\"many\">Dopo %1$s minuti</item>\n        <item quantity=\"other\">Dopo %1$s minuti</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Aggiornamento estensione disponibile</item>\n        <item quantity=\"many\">%d estensioni hanno aggiornamenti disponibili</item>\n        <item quantity=\"other\">%d estensioni hanno aggiornamenti disponibili</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capitoli %1$s e un altro</item>\n        <item quantity=\"many\">Capitoli %1$s e altri %2$d</item>\n        <item quantity=\"other\">Capitoli %1$s e altri %2$d</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nuovo capitolo</item>\n        <item quantity=\"many\">%1$d nuovi capitoli</item>\n        <item quantity=\"other\">%1$d nuovi capitoli</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Per %d voce</item>\n        <item quantity=\"many\">Per %d voci</item>\n        <item quantity=\"other\">Per %d voci</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s rimanente</item>\n        <item quantity=\"many\">%1$s rimanenti</item>\n        <item quantity=\"other\">%1$s rimanenti</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Completato in %1$s con %2$s errore</item>\n        <item quantity=\"many\">Completato in %1$s con %2$s errori</item>\n        <item quantity=\"other\">Completato in %1$s con %2$s errori</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoria</item>\n        <item quantity=\"many\">%d categorie</item>\n        <item quantity=\"other\">%d categorie</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capitolo</item>\n        <item quantity=\"many\">%1$s capitoli</item>\n        <item quantity=\"other\">%1$s capitoli</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d tracker</item>\n        <item quantity=\"many\">%d trackers</item>\n        <item quantity=\"other\">%d trackers</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d capitolo saltato, la fonte non ce l\\'ha o è stato filtrato</item>\n        <item quantity=\"many\">%d capitoli saltati, la fonte non li ha o sono stati filtrati</item>\n        <item quantity=\"other\">%d capitoli saltati, la fonte non li ha o sono stati filtrati</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ieri</item>\n        <item quantity=\"many\">%1$d giorni fa</item>\n        <item quantity=\"other\">%1$d giorni fa</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Il prossimo capitolo non letto</item>\n        <item quantity=\"many\">I prossimi %d capitoli non letti</item>\n        <item quantity=\"other\">I prossimi %d capitoli non letti</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Prossimo capitolo</item>\n        <item quantity=\"many\">Prossimo %d capitoli</item>\n        <item quantity=\"other\">Prossimo %d capitoli</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Manca %1$s capitolo</item>\n        <item quantity=\"many\">Mancano %1$s capitoli</item>\n        <item quantity=\"other\">Mancano %1$s capitoli</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">Un giorno</item>\n        <item quantity=\"many\">%d giorni</item>\n        <item quantity=\"other\">%d giorni</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Domani</item>\n        <item quantity=\"many\">Tra %1$d giorni</item>\n        <item quantity=\"other\">Tra %1$d giorni</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repository</item>\n        <item quantity=\"many\">%d repository</item>\n        <item quantity=\"other\">%d repository</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 pagina</item>\n        <item quantity=\"many\">%1$s pagine</item>\n        <item quantity=\"other\">%1$s pagine</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/it/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nome</string>\n    <string name=\"label_settings\">Impostazioni</string>\n    <string name=\"label_download_queue\">Coda download</string>\n    <string name=\"label_library\">Libreria</string>\n    <string name=\"label_recent_manga\">Cronologia</string>\n    <string name=\"label_recent_updates\">Novità</string>\n    <string name=\"label_backup\">Backup e ripristino</string>\n    <string name=\"action_settings\">Impostazioni</string>\n    <string name=\"action_filter\">Filtro</string>\n    <string name=\"action_filter_bookmarked\">Segnalibri</string>\n    <string name=\"action_filter_unread\">Non letti</string>\n    <string name=\"action_filter_empty\">Rimuovi filtro</string>\n    <string name=\"action_sort_alpha\">Alfabeticamente</string>\n    <string name=\"action_sort_last_read\">Ultimi letti</string>\n    <string name=\"action_search\">Ricerca</string>\n    <string name=\"action_select_all\">Seleziona tutto</string>\n    <string name=\"action_mark_as_read\">Segna come letto</string>\n    <string name=\"action_mark_as_unread\">Segna come non letto</string>\n    <string name=\"action_mark_previous_as_read\">Segna precedenti come letti</string>\n    <string name=\"action_download\">Scarica</string>\n    <string name=\"action_bookmark\">Aggiungi segnalibro</string>\n    <string name=\"action_remove_bookmark\">Rimuovi segnalibro</string>\n    <string name=\"action_delete\">Cancella</string>\n    <string name=\"action_update_library\">Aggiorna libreria</string>\n    <string name=\"action_edit\">Modifica</string>\n    <string name=\"action_add_category\">Aggiungi categoria</string>\n    <string name=\"action_edit_categories\">Modifica categorie</string>\n    <string name=\"action_rename_category\">Rinomina categoria</string>\n    <string name=\"action_move_category\">Assegna categorie</string>\n    <string name=\"action_edit_cover\">Modifica copertina</string>\n    <string name=\"action_pause\">Pausa</string>\n    <string name=\"action_previous_chapter\">Capitolo precedente</string>\n    <string name=\"action_next_chapter\">Capitolo successivo</string>\n    <string name=\"action_retry\">Riprova</string>\n    <string name=\"action_remove\">Rimuovi</string>\n    <string name=\"action_resume\">Riprendi</string>\n    <string name=\"action_open_in_browser\">Apri nel browser</string>\n    <string name=\"action_display_mode\">Modalità di visualizzazione</string>\n    <string name=\"action_display\">Visualizzazione</string>\n    <string name=\"action_display_grid\">Griglia compatta</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_cancel\">Annulla</string>\n    <string name=\"action_sort\">Ordina</string>\n    <string name=\"action_install\">Installa</string>\n    <string name=\"action_share\">Condividi</string>\n    <string name=\"action_save\">Salva</string>\n    <string name=\"loading\">Caricamento…</string>\n    <string name=\"pref_category_general\">Generale</string>\n    <string name=\"pref_category_reader\">Lettore</string>\n    <string name=\"pref_category_downloads\">Download</string>\n    <string name=\"pref_category_advanced\">Avanzate</string>\n    <string name=\"pref_category_about\">Info</string>\n    <string name=\"pref_library_columns\">Dimensione della griglia</string>\n    <string name=\"portrait\">Verticale</string>\n    <string name=\"landscape\">Orizzontale</string>\n    <string name=\"pref_library_update_interval\">Aggiornamenti automatici</string>\n    <string name=\"update_never\">Disabilitati</string>\n    <string name=\"update_6hour\">Ogni 6 ore</string>\n    <string name=\"update_12hour\">Ogni 12 ore</string>\n    <string name=\"update_24hour\">Ogni giorno</string>\n    <string name=\"update_48hour\">Ogni 2 giorni</string>\n    <string name=\"all\">Tutte</string>\n    <string name=\"pref_library_update_restriction\">Restrizioni del dispositivo agli aggiornamenti automatici</string>\n    <string name=\"charging\">Quando si carica</string>\n    <string name=\"pref_update_only_non_completed\">Con stato «Completata»</string>\n    <string name=\"pref_auto_update_manga_sync\">Aggiorna il tracking dopo la lettura</string>\n    <string name=\"pref_fullscreen\">Schermo Intero</string>\n    <string name=\"pref_page_transitions\">Animare le transizioni di pagina</string>\n    <string name=\"pref_show_page_number\">Mostra numero pagina</string>\n    <string name=\"pref_custom_brightness\">Luminosità personalizzata</string>\n    <string name=\"pref_custom_color_filter\">Filtro colore personalizzato</string>\n    <string name=\"pref_keep_screen_on\">Mantieni lo schermo acceso</string>\n    <string name=\"pref_reader_navigation\">Navigazione</string>\n    <string name=\"pref_read_with_volume_keys\">Tasti volume</string>\n    <string name=\"pref_reader_theme\">Colore sfondo</string>\n    <string name=\"white_background\">Bianco</string>\n    <string name=\"black_background\">Nero</string>\n    <string name=\"pref_viewer_type\">Modalità di lettura predefinita</string>\n    <string name=\"left_to_right_viewer\">Per pagina (da sinistra a destra)</string>\n    <string name=\"right_to_left_viewer\">Per pagina (da destra a sinistra)</string>\n    <string name=\"vertical_viewer\">Per pagina (verticale)</string>\n    <string name=\"webtoon_viewer\">Verticale lungo</string>\n    <string name=\"pref_image_scale_type\">Tipo di scala</string>\n    <string name=\"scale_type_fit_screen\">Adatta a schermo</string>\n    <string name=\"scale_type_stretch\">Riempi schermo</string>\n    <string name=\"scale_type_fit_width\">Adatta a larghezza</string>\n    <string name=\"scale_type_fit_height\">Adatta ad altezza</string>\n    <string name=\"scale_type_original_size\">Dimensione originale</string>\n    <string name=\"scale_type_smart_fit\">Scala intelligente</string>\n    <string name=\"pref_zoom_start\">Posizione iniziale zoom</string>\n    <string name=\"zoom_start_automatic\">Automatico</string>\n    <string name=\"zoom_start_left\">Sinistra</string>\n    <string name=\"zoom_start_right\">Destra</string>\n    <string name=\"zoom_start_center\">Centro</string>\n    <string name=\"pref_rotation_type\">Rotazione predefinita</string>\n    <string name=\"rotation_free\">Libero</string>\n    <string name=\"rotation_force_portrait\">Bloccato verticale</string>\n    <string name=\"rotation_force_landscape\">Bloccato orizzontale</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Dopo averli contrassegnati manualmente come letti</string>\n    <string name=\"pref_remove_after_read\">Cancella automaticamente dopo la lettura</string>\n    <string name=\"disabled\">Disabilitato</string>\n    <string name=\"last_read_chapter\">Ultimo capitolo letto</string>\n    <string name=\"second_to_last\">Penultimo capitolo letto</string>\n    <string name=\"third_to_last\">Terzultimo capitolo letto</string>\n    <string name=\"fourth_to_last\">Quartultimo capitolo letto</string>\n    <string name=\"fifth_to_last\">Quintultimo capitolo letto</string>\n    <string name=\"pref_download_new\">Scarica nuovi capitoli</string>\n    <string name=\"services\">Servizi di tracking</string>\n    <string name=\"pref_clear_chapter_cache\">Cancella cache capitoli</string>\n    <string name=\"used_cache\">Usati: %1$s</string>\n    <string name=\"cache_deleted\">Cache cancellat, %1$d file cancellati</string>\n    <string name=\"cache_delete_error\">Errore durante la cancellazione</string>\n    <string name=\"pref_clear_cookies\">Cancella cookie</string>\n    <string name=\"cookies_cleared\">Cookie cancellati</string>\n    <string name=\"pref_clear_database\">Pulisci database</string>\n    <string name=\"pref_clear_database_summary\">Elimina la cronologia delle voci che non sono presenti nella libreria</string>\n    <string name=\"clear_database_confirmation\">Sei sicuro? I capitoli letti e i progressi di lettura di voci fuori dalla libreria verranno persi</string>\n    <string name=\"clear_database_completed\">Elementi eliminati</string>\n    <string name=\"version\">Versione</string>\n    <string name=\"pref_enable_acra\">Invia segnalazioni crash</string>\n    <string name=\"pref_acra_summary\">Aiuta a correggere eventuali bug. Non verranno inviati dati sensibili</string>\n    <string name=\"login_title\">Accedi a %1$s</string>\n    <string name=\"username\">Nome utente</string>\n    <string name=\"password\">Password</string>\n    <string name=\"login\">Accedi</string>\n    <string name=\"login_success\">Accesso riuscito</string>\n    <string name=\"unknown_error\">Errore sconosciuto</string>\n    <string name=\"updating_category\">Aggiornamento categoria</string>\n    <string name=\"ongoing\">In corso</string>\n    <string name=\"unknown\">Sconosciuto</string>\n    <string name=\"licensed\">Concesso in licenza</string>\n    <string name=\"remove_from_library\">Rimuovi dalla libreria</string>\n    <string name=\"display_mode_chapter\">Capitolo %1$s</string>\n    <string name=\"chapter_downloading_progress\">Scaricando (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Errore</string>\n    <string name=\"show_title\">Titolo della fonte</string>\n    <string name=\"show_chapter_number\">Numero del capitolo</string>\n    <string name=\"sort_by_source\">Per fonte</string>\n    <string name=\"sort_by_number\">Per numero di capitolo</string>\n    <string name=\"manga_download\">Scarica</string>\n    <string name=\"download_unread\">Non letti</string>\n    <string name=\"confirm_delete_chapters\">Sei sicuro di voler eliminare i capitoli selezionati?</string>\n    <string name=\"reading\">In lettura</string>\n    <string name=\"completed\">Completato</string>\n    <string name=\"dropped\">Abbandonato</string>\n    <string name=\"on_hold\">In sospeso</string>\n    <string name=\"plan_to_read\">Da leggere</string>\n    <string name=\"score\">Punteggio</string>\n    <string name=\"title\">Titolo</string>\n    <string name=\"status\">Stato</string>\n    <string name=\"chapters\">Capitoli</string>\n    <string name=\"error_category_exists\">Esiste già una categoria con questo nome!</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Questo rimuoverà la data lettura di questo capitolo. Sei sicuro?</string>\n    <string name=\"dialog_with_checkbox_reset\">Reimposta tutti i capitoli di questa voce</string>\n    <string name=\"picture_saved\">Immagine salvata</string>\n    <string name=\"custom_filter\">Filtro personalizzato</string>\n    <string name=\"set_as_cover\">Imposta come copertina</string>\n    <string name=\"cover_updated\">Copertina aggiornata</string>\n    <string name=\"chapter_progress\">Pagina: %1$d</string>\n    <string name=\"no_next_chapter\">Capitolo successivo non trovato</string>\n    <string name=\"decode_image_error\">Non è stato possibile caricare l\\'immagine</string>\n    <string name=\"confirm_set_image_as_cover\">Usare questa immagine come copertina?</string>\n    <string name=\"download_queue_error\">Impossibile scaricare i capitoli. Puoi riprovare nella sezione download</string>\n    <string name=\"notification_new_chapters\">Nuovi capitoli trovati</string>\n    <string name=\"notification_cover_update_failed\">Impossibile aggiornare la copertina</string>\n    <string name=\"notification_first_add_to_library\">Prima di compiere questa azione per favore aggiungi la voce alla libreria</string>\n    <string name=\"file_select_cover\">Seleziona immagine di copertina</string>\n    <string name=\"file_select_backup\">Seleziona file di backup</string>\n    <string name=\"update_check_confirm\">Scarica</string>\n    <string name=\"update_check_no_new_updates\">Non ci sono nuovi aggiornamenti disponibili</string>\n    <string name=\"update_check_notification_download_in_progress\">Download in corso…</string>\n    <string name=\"update_check_notification_download_complete\">Tocca per installare l\\'aggiornamento</string>\n    <string name=\"update_check_notification_download_error\">Errore di scaricamento</string>\n    <string name=\"update_check_notification_update_available\">Nuova versione disponibile!</string>\n    <string name=\"information_no_downloads\">Nessun download</string>\n    <string name=\"information_no_recent\">Nessuna novità recente</string>\n    <string name=\"information_no_recent_manga\">Nessuna lettura recente</string>\n    <string name=\"information_empty_library\">La tua libreria è vuota</string>\n    <string name=\"download_notifier_downloader_title\">Gestione Download</string>\n    <string name=\"download_notifier_title_error\">Errore</string>\n    <string name=\"download_notifier_unknown_error\">Impossibile scaricare il capitolo a causa di un errore imprevisto</string>\n    <string name=\"download_notifier_text_only_wifi\">Nessuna connessione Wi-Fi disponibile</string>\n    <string name=\"download_notifier_no_network\">Nessuna connessione di rete disponibile</string>\n    <string name=\"categories\">Categorie</string>\n    <string name=\"manga\">Voci della libreria</string>\n    <string name=\"history\">Cronologia</string>\n    <string name=\"action_sort_total\">Capitoli totali</string>\n    <string name=\"action_add\">Aggiungi</string>\n    <string name=\"action_undo\">Annulla</string>\n    <string name=\"action_open_log\">Apri registro</string>\n    <string name=\"action_restore\">Ripristina</string>\n    <string name=\"app_not_available\">App non disponibile</string>\n    <string name=\"update_weekly\">Ogni settimana</string>\n    <string name=\"default_category\">Categoria predefinita</string>\n    <string name=\"track\">Tracciamento</string>\n    <string name=\"pref_category_tracking\">Tracciamento</string>\n    <string name=\"default_category_summary\">Chiedi sempre</string>\n    <string name=\"pref_crop_borders\">Ritaglia bordi</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverti i tasti del volume</string>\n    <string name=\"pref_create_backup\">Crea backup</string>\n    <string name=\"pref_create_backup_summ\">Può essere utilizzato per ripristinare la libreria attuale</string>\n    <string name=\"pref_restore_backup\">Ripristina backup</string>\n    <string name=\"pref_restore_backup_summ\">Ripristina la libreria da un file di backup</string>\n    <string name=\"pref_backup_interval\">Frequenza dei backup automatici</string>\n    <string name=\"backup_created\">Backup creato</string>\n    <string name=\"restore_completed\">Ripristino completato</string>\n    <string name=\"backup_choice\">Di cosa vuoi fare il backup?</string>\n    <string name=\"restoring_backup\">Ripristino backup</string>\n    <string name=\"creating_backup\">Creazione backup</string>\n    <string name=\"no_more_results\">Nessun altro risultato</string>\n    <string name=\"local_source\">Fonte locale</string>\n    <string name=\"delete_downloads_for_manga\">Eliminare i capitoli scaricati?</string>\n    <string name=\"chapter_paused\">In pausa</string>\n    <string name=\"manga_tracking_tab\">Tracking</string>\n    <string name=\"snack_add_to_library\">Aggiungere alla libreria?</string>\n    <string name=\"download_notifier_download_paused\">Download in pausa</string>\n    <string name=\"label_migration\">Migra</string>\n    <string name=\"label_extensions\">Estensioni</string>\n    <string name=\"label_extension_info\">Informazioni estensione</string>\n    <string name=\"action_global_search\">Ricerca globale</string>\n    <string name=\"action_display_download_badge\">Capitoli scaricati</string>\n    <string name=\"action_reset\">Reimposta</string>\n    <string name=\"ext_update\">Aggiorna</string>\n    <string name=\"ext_install\">Installa</string>\n    <string name=\"ext_pending\">In coda</string>\n    <string name=\"ext_downloading\">Scaricamento in corso</string>\n    <string name=\"ext_installing\">Installazione in corso</string>\n    <string name=\"ext_installed\">Installato</string>\n    <string name=\"ext_trust\">Attendibile</string>\n    <string name=\"ext_untrusted\">Non attendibile</string>\n    <string name=\"ext_uninstall\">Disinstalla</string>\n    <string name=\"untrusted_extension\">Estensione non attendibile</string>\n    <string name=\"untrusted_extension_message\">Le estensioni dannose possono leggere le credenziali di accesso memorizzate o eseguire codice arbitrario.\n\\n\n\\nFidandoti di questa estensione, accetti questi rischi.</string>\n    <string name=\"pref_double_tap_anim_speed\">Velocità animazioni doppio tocco</string>\n    <string name=\"pager_viewer\">Per pagina</string>\n    <string name=\"double_tap_anim_speed_0\">Senza animazione</string>\n    <string name=\"double_tap_anim_speed_normal\">Normale</string>\n    <string name=\"double_tap_anim_speed_fast\">Veloce</string>\n    <string name=\"other_source\">Altro</string>\n    <string name=\"action_global_search_hint\">Ricerca globale…</string>\n    <string name=\"latest\">Ultimi</string>\n    <string name=\"browse\">Sfoglia</string>\n    <string name=\"manga_added_library\">Aggiunto alla libreria</string>\n    <string name=\"manga_removed_library\">Rimosso dalla libreria</string>\n    <string name=\"copied_to_clipboard\">Copiato negli appunti:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Fonte non installata: %1$s</string>\n    <string name=\"repeating\">Rileggendo</string>\n    <string name=\"track_status\">Stato</string>\n    <string name=\"track_type\">Tipo</string>\n    <string name=\"snack_categories_deleted\">Categorie rimosse</string>\n    <string name=\"migration_dialog_what_to_include\">Seleziona i dati da includere</string>\n    <string name=\"migrate\">Migra</string>\n    <string name=\"copy\">Copia</string>\n    <string name=\"information_empty_category\">Non hai categorie. Tocca il pulsante più per crearne una e organizzare la tua libreria.</string>\n    <string name=\"channel_common\">Comune</string>\n    <string name=\"transition_finished\">Finito:</string>\n    <string name=\"transition_current\">Corrente:</string>\n    <string name=\"transition_next\">Prossimo:</string>\n    <string name=\"transition_previous\">Precedente:</string>\n    <string name=\"transition_no_next\">Nessun capitolo successivo</string>\n    <string name=\"transition_no_previous\">Nessun capitolo precedente</string>\n    <string name=\"transition_pages_loading\">Caricamento pagine…</string>\n    <string name=\"transition_pages_error\">Caricamento pagine fallito: %1$s</string>\n    <string name=\"action_open_in_web_view\">Apri in WebView</string>\n    <string name=\"pref_skip_read_chapters\">Salta i capitoli segnati come letti</string>\n    <string name=\"filter_mode_screen\">Schermo</string>\n    <string name=\"pref_read_with_long_tap\">Mostra azioni con un tocco prolungato</string>\n    <string name=\"pref_color_filter_mode\">Modalità di fusione del filtro colore</string>\n    <string name=\"filter_mode_overlay\">Sovrimpressione</string>\n    <string name=\"filter_mode_multiply\">Moltiplica</string>\n    <string name=\"filter_mode_lighten\">Schiarisci</string>\n    <string name=\"filter_mode_darken\">Brucia / Scurisci</string>\n    <string name=\"label_help\">Aiuto</string>\n    <string name=\"no_results_found\">Nessun risultato trovato</string>\n    <string name=\"migration_selection_prompt\">Seleziona una fonte da cui migrare</string>\n    <string name=\"action_webview_back\">Indietro</string>\n    <string name=\"action_webview_forward\">Avanti</string>\n    <string name=\"action_webview_refresh\">Aggiorna</string>\n    <string name=\"pref_category_library\">Libreria</string>\n    <string name=\"ext_obsolete\">Obsoleta</string>\n    <string name=\"obsolete_extension_message\">Questa estensione non è più disponibile. Potrebbe non funzionare correttamente e causare problemi con l\\'app. Si consiglia di disinstallarla.</string>\n    <string name=\"pref_date_format\">Formato data</string>\n    <string name=\"pref_category_library_update\">Aggiornamenti globali</string>\n    <string name=\"logout_title\">Disconnettersi da %1$s?</string>\n    <string name=\"logout\">Disconnetti</string>\n    <string name=\"logout_success\">Ora sei disconnesso</string>\n    <string name=\"paused\">In pausa</string>\n    <string name=\"label_more\">Altro</string>\n    <string name=\"action_sort_latest_chapter\">Ultimo capitolo</string>\n    <string name=\"action_view_chapters\">Visualizza capitoli</string>\n    <string name=\"action_cancel_all\">Annulla tutto</string>\n    <string name=\"theme_light\">Chiaro</string>\n    <string name=\"theme_dark\">Scuro</string>\n    <string name=\"theme_system\">Sistema</string>\n    <string name=\"pref_manage_notifications\">Gestisci le notifiche</string>\n    <string name=\"pref_category_security\">Sicurezza e privacy</string>\n    <string name=\"lock_with_biometrics\">Richiedi sblocco</string>\n    <string name=\"lock_when_idle\">Blocca quando inattivo</string>\n    <string name=\"lock_always\">Sempre</string>\n    <string name=\"lock_never\">Mai</string>\n    <string name=\"secure_screen\">Schermo sicuro</string>\n    <string name=\"ext_updates_pending\">Aggiornamenti in sospeso</string>\n    <string name=\"pref_cutout_short\">Mostra il contenuto dell\\'area ritagliata</string>\n    <string name=\"information_cloudflare_bypass_failure\">Impossibile bypassare Cloudflare</string>\n    <string name=\"information_webview_outdated\">Per favore aggiorna l\\'app WebView per una migliore compatibilità</string>\n    <string name=\"channel_new_chapters\">Aggiornamenti capitoli</string>\n    <string name=\"secure_screen_summary\">Schermo sicuro nasconde i contenuti dell\\'app quando cambi applicazione e blocca gli screenshot</string>\n    <string name=\"pref_category_display\">Visualizzazione</string>\n    <string name=\"channel_ext_updates\">Aggiornamenti estensione</string>\n    <string name=\"notification_chapters_multiple\">Capitoli %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Capitolo %1$s e altri %2$d</string>\n    <string name=\"notification_chapters_single\">Capitolo %1$s</string>\n    <string name=\"email\">Indirizzo e-mail</string>\n    <string name=\"battery_optimization_disabled\">Ottimizzazione batteria già disattivata</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Facilita gli aggiornamenti e i backup in secondo piano</string>\n    <string name=\"pref_disable_battery_optimization\">Disattiva ottimizzazione batteria</string>\n    <string name=\"pref_always_show_chapter_transition\">Mostra sempre la transizione tra capitoli</string>\n    <string name=\"hide_notification_content\">Nascondi contenuto notifiche</string>\n    <string name=\"action_move_to_bottom\">Sposta in fondo</string>\n    <string name=\"action_move_to_top\">Sposta in cima</string>\n    <string name=\"action_oldest\">Più vecchi</string>\n    <string name=\"action_newest\">Più recenti</string>\n    <string name=\"action_menu\">Menù</string>\n    <string name=\"label_sources\">Fonti</string>\n    <string name=\"updating_library\">Libreria in aggiornamento</string>\n    <string name=\"pref_category_reading\">In Lettura</string>\n    <string name=\"pref_skip_filtered_chapters\">Salta capitoli filtrati</string>\n    <string name=\"action_pin\">Fissa</string>\n    <string name=\"add_tracking\">Aggiungi tracking</string>\n    <string name=\"in_library\">Nella libreria</string>\n    <string name=\"add_to_library\">Aggiungi alla libreria</string>\n    <string name=\"pinned_sources\">Fissato</string>\n    <string name=\"pref_webtoon_side_padding\">Riempimento laterale</string>\n    <string name=\"vertical_plus_viewer\">Verticale lungo con interruzioni</string>\n    <string name=\"action_unpin\">Sblocca</string>\n    <string name=\"action_select_inverse\">Inverti selezione</string>\n    <string name=\"recent_manga_time\">Cap. %1$s - %2$s</string>\n    <string name=\"manga_info_collapse\">Meno</string>\n    <string name=\"manga_info_expand\">Altro</string>\n    <string name=\"licenses\">Licenze open source</string>\n    <string name=\"website\">Sito web</string>\n    <string name=\"restoring_backup_canceled\">Ripristino cancellato</string>\n    <string name=\"restoring_backup_error\">Ripristino backup fallito</string>\n    <string name=\"restore_in_progress\">Ripristino già in corso</string>\n    <string name=\"creating_backup_error\">Backup fallito</string>\n    <string name=\"backup_in_progress\">Il backup è già in corso</string>\n    <string name=\"label_downloaded_only\">Solo scaricati</string>\n    <string name=\"information_webview_required\">WebView è necessaria per il funzionamento dell\\'app</string>\n    <string name=\"viewer\">Modalità di lettura</string>\n    <string name=\"pref_category_for_this_series\">Per questa serie</string>\n    <string name=\"local_source_help_guide\">Guida alle fonti locali</string>\n    <string name=\"last_used_source\">Ultimo usato</string>\n    <string name=\"downloaded_only_summary\">Filtra tutte le voci nella tua libreria</string>\n    <string name=\"check_for_updates\">Controlla aggiornamenti</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Impossibile aprire le impostazioni del dispositivo</string>\n    <string name=\"pref_refresh_library_covers\">Aggiorna le copertine della libreria</string>\n    <string name=\"restore_duration\">%1$02d minuti, %2$02d secondi</string>\n    <string name=\"tracking_info\">Sincronizzazione a senso unico per aggiornare l\\'avanzamento dei capitoli sui servizi di tracking. Imposta il tracking per le singole voci dai loro pulsanti di tracking.</string>\n    <string name=\"gray_background\">Grigio</string>\n    <string name=\"page_list_empty_error\">Nessuna pagina trovata</string>\n    <string name=\"sort_by_upload_date\">Per data di aggiunta</string>\n    <string name=\"tabs_header\">Schede</string>\n    <string name=\"label_data\">Dati</string>\n    <string name=\"backup_restore_missing_sources\">Fonti mancanti:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Il backup non contiene alcuna voce di libreria.</string>\n    <string name=\"invalid_backup_file\">File di backup invalido:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Controlla nuove copertine e descrizioni durante l\\'aggiornamento della libreria</string>\n    <string name=\"pref_library_update_refresh_metadata\">Ricarica metadati automaticamente</string>\n    <string name=\"action_display_show_tabs\">Mostra schede delle categorie</string>\n    <string name=\"action_display_comfortable_grid\">Griglia confortevole</string>\n    <string name=\"action_migrate\">Migra</string>\n    <string name=\"action_disable_all\">Disabilita tutto</string>\n    <string name=\"action_enable_all\">Abilita tutto</string>\n    <string name=\"tapping_inverted_both\">Entrambi</string>\n    <string name=\"tapping_inverted_vertical\">Verticale</string>\n    <string name=\"tapping_inverted_horizontal\">Orizzontale</string>\n    <string name=\"tapping_inverted_none\">Nessuno</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverti le zone di tocco</string>\n    <string name=\"loader_not_implemented_error\">Fonte non trovata</string>\n    <string name=\"unknown_status\">Stato sconosciuto</string>\n    <string name=\"unknown_author\">Autore sconosciuto</string>\n    <string name=\"updated_version\">Aggiornato alla v%1$s</string>\n    <string name=\"whats_new\">Le novità</string>\n    <string name=\"requires_app_restart\">Richiesto riavvio dell\\'app per applicare le modifiche</string>\n    <string name=\"label_network\">Rete</string>\n    <string name=\"pref_show_reading_mode_summary\">Mostra brevemente la modalità corrente all\\'apertura del lettore</string>\n    <string name=\"pref_show_reading_mode\">Mostra modalità di lettura</string>\n    <string name=\"action_disable\">Disabilita</string>\n    <string name=\"action_start\">Inizia</string>\n    <string name=\"action_global_search_query\">Ricerca «%1$s» globalmente</string>\n    <string name=\"download_insufficient_space\">Impossibile scaricare i capitoli a causa dello spazio di archiviazione insufficiente</string>\n    <string name=\"pref_category_reading_mode\">Modalità di lettura</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Data di aggiunta</string>\n    <string name=\"channel_progress\">Progresso</string>\n    <string name=\"channel_errors\">Errori</string>\n    <string name=\"channel_complete\">Completo</string>\n    <string name=\"no_pinned_sources\">Non hai fonti fissate</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Consenti eliminazione capitoli con segnalibro</string>\n    <string name=\"pref_category_delete_chapters\">Elimina capitoli</string>\n    <string name=\"ext_nsfw_warning\">Fonti di questa estensione potrebbero contenere materiale NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"backup_restore_missing_trackers\">Tracker non collegati:</string>\n    <string name=\"no_chapters_error\">Nessun capitolo trovato</string>\n    <string name=\"parental_controls_info\">Questo non impedisce a estensioni non ufficiali oppure incorrettamente segnalate di mostrare contenuti 18+ all\\'interno dell\\'applicazione.</string>\n    <string name=\"chapter_settings_updated\">Impostazioni predefinite dei capitoli aggiornate</string>\n    <string name=\"share_page_info\">%1$s: %2$s, pagina %3$d</string>\n    <string name=\"set_chapter_settings_as_default\">Imposta come predefinito</string>\n    <string name=\"also_set_chapter_settings_for_library\">Applica anche a tutte le voci nella mia libreria</string>\n    <string name=\"confirm_set_chapter_settings\">Sei sicuro di voler salvare queste impostazioni come predefinite?</string>\n    <string name=\"chapter_settings\">Impostazioni del capitolo</string>\n    <string name=\"action_search_settings\">Ricerca impostazioni</string>\n    <string name=\"downloaded_chapters\">Capitoli scaricati</string>\n    <string name=\"manga_from_library\">Dalla libreria</string>\n    <string name=\"pref_incognito_mode_summary\">Sospendi cronologia di lettura</string>\n    <string name=\"pref_incognito_mode\">Modalità incognito</string>\n    <string name=\"pref_clear_history\">Svuota cronologia</string>\n    <string name=\"clear_history_confirmation\">Sei sicuro? Tutta la cronologia verrà persa.</string>\n    <string name=\"clear_history_completed\">Cronologia cancellata</string>\n    <string name=\"spen_next_page\">Pagina successiva</string>\n    <string name=\"spen_previous_page\">Pagina precedente</string>\n    <string name=\"migration_help_guide\">Guida alla migrazione delle fonti</string>\n    <string name=\"pref_category_nsfw_content\">Fonti NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Mostra nelle liste delle fonti e delle estensioni</string>\n    <string name=\"myanimelist_relogin\">Per favore accedi di nuovo a MAL</string>\n    <string name=\"file_picker_error\">Nessuna app per la selezione dei file trovata</string>\n    <string name=\"pref_viewer_nav\">Zone di tocco</string>\n    <string name=\"edge_nav\">Bordo</string>\n    <string name=\"kindlish_nav\">Stile Kindle</string>\n    <string name=\"l_nav\">A forma di L</string>\n    <string name=\"track_finished_reading_date\">Data fine</string>\n    <string name=\"track_started_reading_date\">Data inizio</string>\n    <string name=\"pref_dump_crash_logs_summary\">Salva un registro degli errori su un file per condividerlo con gli sviluppatori</string>\n    <string name=\"pref_dump_crash_logs\">Condividi il registro dei crash</string>\n    <string name=\"action_desc\">Decrescente</string>\n    <string name=\"action_asc\">Crescente</string>\n    <string name=\"action_order_by_chapter_number\">Per numero di capitolo</string>\n    <string name=\"action_order_by_upload_date\">Per data di caricamento</string>\n    <string name=\"action_filter_tracked\">Tracciati</string>\n    <string name=\"action_display_show_number_of_items\">Mostra numero elementi</string>\n    <string name=\"right_and_left_nav\">Destra e Sinistra</string>\n    <string name=\"pref_dual_page_split\">Dividi le pagine larghe</string>\n    <string name=\"pref_dual_page_invert_summary\">Se il posizionamento delle pagine larghe divise non corrisponde alla direzione di lettura</string>\n    <string name=\"pref_dual_page_invert\">Inverti il posizionamento delle pagine divise</string>\n    <string name=\"backup_restore_content_full\">Potresti aver bisogno di installare estensioni mancanti ed accedere ai servizi di tracking per utilizzarle.</string>\n    <string name=\"exclude\">Escludi: %s</string>\n    <string name=\"include\">Includi: %s</string>\n    <string name=\"none\">Nessuna</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data di recupero capitolo</string>\n    <string name=\"pref_category_auto_download\">Download automatico</string>\n    <string name=\"nav_zone_next\">Successivo</string>\n    <string name=\"nav_zone_prev\">Precedente</string>\n    <string name=\"pref_download_new_categories_details\">Le voci che si trovano in categorie escluse non saranno scaricate nonostante si trovino anche in categorie incluse.</string>\n    <string name=\"nav_zone_right\">Destra</string>\n    <string name=\"nav_zone_left\">Sinistra</string>\n    <string name=\"pref_library_update_categories_details\">Le voci in categorie escluse non saranno aggiornati nonostante si trovino anche in categorie incluse.</string>\n    <string name=\"pref_dns_over_https\">DNS su HTTPS (DoH)</string>\n    <string name=\"pref_show_navigation_mode\">Mostra sovrapposizione con zone di tocco</string>\n    <string name=\"pref_show_navigation_mode_summary\">Mostra brevemente quando il lettore viene aperto</string>\n    <string name=\"action_show_errors\">Tocca per vedere i dettagli</string>\n    <string name=\"update_check_eol\">Questa versione di Android non è più supportata</string>\n    <string name=\"clipboard_copy_error\">Impossibile copiare negli appunti</string>\n    <string name=\"rotation_type\">Rotazione</string>\n    <string name=\"notification_incognito_text\">Disabilita modalità incognito</string>\n    <string name=\"rotation_landscape\">Orizzontale</string>\n    <string name=\"rotation_portrait\">Verticale</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Crea cartelle in base al titolo delle voci</string>\n    <string name=\"cancel_all_for_series\">Annulla tutti per questa serie</string>\n    <string name=\"pref_create_folder_per_manga\">Salva pagine in cartelle separate</string>\n    <string name=\"pref_reader_actions\">Azioni</string>\n    <string name=\"pref_grayscale\">Scala di grigi</string>\n    <string name=\"error_no_match\">Nessun risultato trovato</string>\n    <string name=\"local_filter_order_by\">Ordina per</string>\n    <string name=\"chapter_not_found\">Capitolo non trovato</string>\n    <string name=\"source_unsupported\">Fonte non supportata</string>\n    <string name=\"date\">Data</string>\n    <string name=\"off\">Disattivo</string>\n    <string name=\"error_sharing_cover\">Errore nella condivisione della copertina</string>\n    <string name=\"error_saving_cover\">Errore nel salvataggio della copertina</string>\n    <string name=\"cover_saved\">Copertina salvata</string>\n    <string name=\"unread\">Non letti</string>\n    <string name=\"categorized_display_settings\">Impostazioni di ordinamento per categoria</string>\n    <string name=\"information_empty_category_dialog\">Non hai ancora nessuna categoria.</string>\n    <string name=\"on\">Attivo</string>\n    <string name=\"restrictions\">Restrizioni: %s</string>\n    <string name=\"action_display_local_badge\">Fonte locale</string>\n    <string name=\"manga_cover\">Copertina</string>\n    <string name=\"local_invalid_format\">Formato capitolo non valido</string>\n    <string name=\"tracking_guide\">Guida al tracking</string>\n    <string name=\"action_start_downloading_now\">Inizia a scaricare ora</string>\n    <string name=\"about_dont_kill_my_app\">Alcuni produttori hanno restrizioni aggiuntive per le app che chiudono i servizi in secondo piano. Questo sito ha più informazioni su come risolvere il problema.</string>\n    <string name=\"pref_lowest\">Più basso</string>\n    <string name=\"pref_low\">Basso</string>\n    <string name=\"pref_high\">Alto</string>\n    <string name=\"pref_highest\">Più alto</string>\n    <string name=\"pref_hide_threshold\">Sensibilità per nascondere il menù allo scorrimento</string>\n    <string name=\"pref_inverted_colors\">Inversa</string>\n    <string name=\"relative_time_today\">Oggi</string>\n    <string name=\"pref_dark_theme_pure_black\">Modalità scura con nero puro</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin e Yang</string>\n    <string name=\"theme_tealturquoise\">Verde Acqua e Turchese</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri alla Fragola</string>\n    <string name=\"theme_midnightdusk\">Crepuscolo di Mezzanotte</string>\n    <string name=\"theme_greenapple\">Mela Verde</string>\n    <string name=\"theme_monet\">Dinamico</string>\n    <string name=\"pref_app_theme\">Tema applicazione</string>\n    <string name=\"confirm_lock_change\">Autenticarsi per confermare le modifiche</string>\n    <string name=\"label_default\">Predefinita</string>\n    <string name=\"label_background_activity\">Attività in secondo piano</string>\n    <string name=\"restore_miui_warning\">Le funzioni di backup e ripristino potrebbero non funzionare correttamente se le ottimizzazioni MIUI sono disabilitate.</string>\n    <string name=\"enhanced_tracking_info\">Offrono funzioni migliorate per fonti specifiche. Le voci sono tracciate automaticamente quando aggiunte alla libreria.</string>\n    <string name=\"enhanced_services\">Servizi di tracking migliorati</string>\n    <string name=\"pref_category_appearance\">Aspetto</string>\n    <string name=\"action_track\">Traccia</string>\n    <string name=\"getting_started_guide\">Guida introduttiva</string>\n    <string name=\"pref_tablet_ui_mode\">Interfaccia tablet</string>\n    <string name=\"pref_remove_exclude_categories\">Categorie escluse</string>\n    <string name=\"help_translate\">Aiuta a tradurre</string>\n    <string name=\"ext_app_info\">Informazioni app</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installa e avvia Shizuku per usarlo come installatore delle estensioni.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku non è in esecuzione</string>\n    <string name=\"ext_installer_legacy\">Legacy</string>\n    <string name=\"ext_installer_pref\">Installatore</string>\n    <string name=\"ext_install_service_notif\">Installazione dell\\'estensione…</string>\n    <string name=\"action_sort_count\">Voci totali</string>\n    <string name=\"pref_verbose_logging_summary\">Salva i registri dettagliati nel registro di sistema (riduce le prestazioni dell\\'app)</string>\n    <string name=\"pref_verbose_logging\">Registrazione dettagliata</string>\n    <string name=\"action_display_language_badge\">Lingua</string>\n    <string name=\"label_warning\">Attenzione</string>\n    <string name=\"backup_info\">Dovresti tenere delle copie dei backup anche in altri posti. I backup possono contenere dati sensibili comprese le password memorizzate; fate attenzione al condividerli.</string>\n    <string name=\"notification_size_warning\">Grossi aggiornamenti danneggiano le fonti, possono rallentare gli aggiornamenti e aumentare il consumo di batteria. Tocca per saperne di più.</string>\n    <string name=\"connected_to_wifi\">Solo su Wi-Fi</string>\n    <string name=\"update_72hour\">Ogni 3 giorni</string>\n    <string name=\"download_queue_size_warning\">Attenzione: grossi download di massa possono rallentare le fonti e/o bloccare Mihon. Tocca per saperne di più.</string>\n    <string name=\"ext_update_all\">Aggiorna tutto</string>\n    <string name=\"channel_app_updates\">Aggiornamenti dell\\'applicazione</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Cancella la cache capitoli all\\'avvio dell\\'app</string>\n    <string name=\"clear_database_source_item_count\">%1$d voci non presenti in libreria nel database</string>\n    <string name=\"database_clean\">Niente da Pulire</string>\n    <string name=\"extension_api_error\">Impossibile ottenere l\\'elenco estensioni</string>\n    <string name=\"privacy_policy\">Politica sulla privacy</string>\n    <string name=\"pref_update_only_completely_read\">Con capitoli non letti</string>\n    <string name=\"library_errors_help\">Per un aiuto su come risolvere gli errori di aggiornamento della libreria vedi %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Salva come archivio CBZ</string>\n    <string name=\"cancelled\">Cancellata</string>\n    <string name=\"on_hiatus\">In pausa</string>\n    <string name=\"publishing_finished\">Pubblicazione terminata</string>\n    <string name=\"action_show_manga\">Mostra voce</string>\n    <string name=\"pref_navigate_pan\">Scorri le immagini larghe</string>\n    <string name=\"pref_landscape_zoom\">Ingrandisci automaticamente le immagini larghe</string>\n    <string name=\"action_display_cover_only_grid\">Griglia con solo copertine</string>\n    <string name=\"pref_update_only_started\">Che non sono state iniziate</string>\n    <string name=\"skipped_reason_completed\">Saltato perché la serie è completa</string>\n    <string name=\"skipped_reason_not_caught_up\">Saltato perché ci sono capitoli non letti</string>\n    <string name=\"skipped_reason_not_started\">Saltato perché non ci sono capitoli letti</string>\n    <string name=\"notification_update_error\">%1$d aggiornamento(i) fallito(i)</string>\n    <string name=\"learn_more\">Tocca per approfondire</string>\n    <string name=\"rotation_reverse_portrait\">Verticale inverso</string>\n    <string name=\"action_move_to_top_all_for_series\">Sposta la serie in cima</string>\n    <string name=\"disabled_nav\">Disattivato</string>\n    <string name=\"error_saving_picture\">Errore durante il salvataggio dell\\'immagine</string>\n    <string name=\"empty_backup_error\">Nessuna voce in libreria di cui eseguire il backup</string>\n    <string name=\"update_check_open\">Apri su GitHub</string>\n    <string name=\"pref_clear_webview_data\">Cancella dati WebView</string>\n    <string name=\"webview_data_deleted\">Dati WebView cancellati</string>\n    <string name=\"action_close\">Chiudi</string>\n    <string name=\"source_filter_empty_screen\">Nessuna fonte installata trovata</string>\n    <string name=\"source_empty_screen\">Nessuna fonte trovata</string>\n    <string name=\"action_sort_unread_count\">Conteggio non letti</string>\n    <string name=\"action_sort_last_manga_update\">Ultimo aggiornamento</string>\n    <string name=\"split_tall_images_summary\">Migliora le prestazioni del lettore</string>\n    <string name=\"download_notifier_split_page_not_found\">Pagina %d non trovata durante la divisione</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Impossibile trovare il percorso della pagina %d</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Reimposta la modalità di lettura e l\\'orientamento per tutte le serie</string>\n    <string name=\"pref_reset_viewer_flags\">Reimposta le opzioni del lettore per ogni serie</string>\n    <string name=\"pref_reset_viewer_flags_success\">Ripristinate tutte le opzioni del lettore</string>\n    <string name=\"pref_reset_viewer_flags_error\">Impossibile ripristinare le opzioni del lettore</string>\n    <string name=\"empty_screen\">Beh, questo è imbarazzante</string>\n    <string name=\"ext_info_age_rating\">Classificazione per età</string>\n    <string name=\"ext_info_version\">Versione</string>\n    <string name=\"ext_info_language\">Lingua</string>\n    <string name=\"on_hold_list\">In Pausa</string>\n    <string name=\"reading_list\">Lista di lettura</string>\n    <string name=\"wish_list\">Da Leggere</string>\n    <string name=\"complete_list\">Completati</string>\n    <string name=\"unfinished_list\">Non Completati</string>\n    <string name=\"network_not_metered\">Solo su rete non a consumo</string>\n    <string name=\"custom_cover\">Copertina personalizzata</string>\n    <string name=\"cant_open_last_read_chapter\">Impossibile aprire l\\'ultimo capitolo letto</string>\n    <string name=\"not_installed\">Non installato</string>\n    <string name=\"pref_app_language\">Lingua dell\\'applicazione</string>\n    <string name=\"description_placeholder\">Nessuna descrizione</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"internal_error\">Errore Interno: Controllare i registri dei crash per ulteriori informazioni</string>\n    <string name=\"delete_category_confirmation\">Vuoi eliminare la categoria «%s»?</string>\n    <string name=\"delete_category\">Elimina categoria</string>\n    <string name=\"pref_reset_user_agent_string\">Ripristina la stringa «user agent» del browser</string>\n    <string name=\"pref_user_agent_string\">Stringa «user agent» del browser</string>\n    <string name=\"action_remove_everything\">Rimuovi tutto</string>\n    <string name=\"appwidget_unavailable_locked\">Widget non disponibile quando il blocco app è attivo</string>\n    <string name=\"appwidget_updates_description\">Vedi le voci aggiornate di recente</string>\n    <string name=\"update_already_running\">È già in corso un aggiornamento</string>\n    <string name=\"error_user_agent_string_blank\">La sringa «user agent» non può essere vuota</string>\n    <string name=\"theme_tidalwave\">Maremoto</string>\n    <string name=\"download_ahead\">Scarica i prossimi</string>\n    <string name=\"auto_download_while_reading\">Download automatico durante la lettura</string>\n    <string name=\"download_ahead_info\">Funziona se il capitolo corrente e quello successivo sono già stati scaricati.</string>\n    <string name=\"are_you_sure\">Sei sicuro?</string>\n    <string name=\"multi_lang\">Multiple</string>\n    <string name=\"updates_last_update_info\">Ultimo aggiornamento libreria: %s</string>\n    <string name=\"remove_manga\">Stai per rimuovere «%s» dalla tua libreria</string>\n    <string name=\"popular\">Popolare</string>\n    <string name=\"missing_storage_permission\">Autorizzazioni per l\\'archiviazione non concesse</string>\n    <string name=\"skipped_reason_not_always_update\">Saltato perché la serie non richiede aggiornamenti</string>\n    <string name=\"action_search_hint\">Ricerca…</string>\n    <string name=\"pref_appearance_summary\">Tema, formato data e ora</string>\n    <string name=\"crash_screen_description\">%s ha riscontrato un errore imprevisto. Ti suggeriamo di condividere il registro degli arresti anomali nel nostro canale di supporto su Discord.</string>\n    <string name=\"pref_library_summary\">Categorie, aggiornamenti globali, azioni di scorrimento capitoli</string>\n    <string name=\"pref_downloads_summary\">Download automatico, download anticipato</string>\n    <string name=\"pref_browse_summary\">Fonti, estensioni, ricerca globale</string>\n    <string name=\"pref_reader_summary\">Modalità di lettura, aspetto, navigazione</string>\n    <string name=\"pref_tracking_summary\">Sincronizzazione unidirezionale avanzamenti, sincronizzazione migliorata</string>\n    <string name=\"pref_backup_summary\">Backup manuali e automatici, spazio di archiviazione</string>\n    <string name=\"pref_security_summary\">Blocco app, schermo protetto</string>\n    <string name=\"pref_advanced_summary\">Registro arresti anomali, ottimizzazioni batteria</string>\n    <string name=\"crash_screen_title\">Ops!</string>\n    <string name=\"crash_screen_restart_application\">Riavvia l\\'applicazione</string>\n    <string name=\"invalid_location\">Posizione invalida: %s</string>\n    <string name=\"unknown_title\">Titolo sconosciuto</string>\n    <string name=\"error_user_agent_string_invalid\">Stringa «user agent» non valida</string>\n    <string name=\"updates_last_update_info_just_now\">Proprio adesso</string>\n    <string name=\"download_notifier_cache_renewal\">Controllando i download</string>\n    <string name=\"action_open_random_manga\">Apri una voce casuale</string>\n    <string name=\"information_no_entries_found\">Nessuna voce trovata in questa categoria</string>\n    <string name=\"fdroid_warning\">Le versioni F-Droid non sono ufficialmente supportate.\n\\nToccare per saperne di più.</string>\n    <string name=\"action_display_show_continue_reading_button\">Pulsante \\\"continua a leggere\\\"</string>\n    <string name=\"track_remove_date_conf_title\">Rimuovere la data?</string>\n    <string name=\"track_remove_finish_date_conf_text\">Verrà rimossa la data di fine precedentemente selezionata da %s</string>\n    <string name=\"track_remove_start_date_conf_text\">Verrà rimossa la data di inizio precedentemente selezionata da %s</string>\n    <string name=\"pref_invalidate_download_cache\">Reindicizza i download</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forza l\\'app a ricontrollare i capitoli scaricati</string>\n    <string name=\"label_started\">Iniziati</string>\n    <string name=\"label_overview_section\">Panoramica</string>\n    <string name=\"label_titles_section\">Voci</string>\n    <string name=\"label_stats\">Statistiche</string>\n    <string name=\"label_completed_titles\">Voci completate</string>\n    <string name=\"label_local\">In locale</string>\n    <string name=\"label_read_duration\">Durata lettura</string>\n    <string name=\"label_tracked_titles\">Voci tracciate</string>\n    <string name=\"label_used\">In uso</string>\n    <string name=\"not_applicable\">N/D</string>\n    <string name=\"minute_short\">%d min</string>\n    <string name=\"label_downloaded\">Scaricati</string>\n    <string name=\"label_titles_in_global_update\">Nell\\'aggiornamento globale</string>\n    <string name=\"label_read_chapters\">Letti</string>\n    <string name=\"label_mean_score\">Punteggio medio</string>\n    <string name=\"hour_short\">%d o</string>\n    <string name=\"label_total_chapters\">Totale</string>\n    <string name=\"label_tracker_section\">Trackers</string>\n    <string name=\"seconds_short\">%d s</string>\n    <string name=\"day_short\">%d g</string>\n    <string name=\"action_not_now\">Non ora</string>\n    <string name=\"information_no_manga_category\">La categoria è vuota</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostra il numero dei capitoli non letti nell\\'icona Novità</string>\n    <string name=\"copied_to_clipboard_plain\">Copiato negli appunti</string>\n    <string name=\"enhanced_services_not_installed\">Disponibile ma la fonte non è installata: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Salta i capitoli duplicati</string>\n    <string name=\"confirm_add_duplicate_manga\">Hai già una voce in libreria con lo stesso nome.\n\\n\n\\nVuoi comunque continuare?</string>\n    <string name=\"track_error\">%1$s errore: %2$s</string>\n    <string name=\"information_required_plain\">*obbligatorio</string>\n    <string name=\"pref_hide_in_library_items\">Nascondi le voci già in libreria</string>\n    <string name=\"action_copy_to_clipboard\">Copia negli appunti</string>\n    <string name=\"action_update_category\">Aggiorna categoria</string>\n    <string name=\"split_tall_images\">Dividi immagini alte</string>\n    <string name=\"overlay_header\">Sovrimpressione</string>\n    <string name=\"pref_page_rotate\">Ruota le pagine larghe per adattarle allo schermo</string>\n    <string name=\"pref_page_rotate_invert\">Capovolgi l\\'orientamento delle pagine larghe ruotate</string>\n    <string name=\"pref_debug_info\">Informazioni di debug</string>\n    <string name=\"pref_double_tap_zoom\">Doppio tocco per ingrandire</string>\n    <string name=\"pref_chapter_swipe_end\">Azione di scorrimento a destra</string>\n    <string name=\"pref_chapter_swipe_start\">Azione di scorrimento a sinistra</string>\n    <string name=\"action_set_interval\">Imposta intervallo</string>\n    <string name=\"pref_update_only_in_release_period\">Fuori dal periodo di rilascio previsto</string>\n    <string name=\"intervals_header\">Intervalli</string>\n    <string name=\"manga_display_interval_title\">Stima ogni</string>\n    <string name=\"action_filter_interval_custom\">Intervallo di aggiornamento personalizzato</string>\n    <string name=\"action_sort_next_updated\">Prossimo aggiornamento previsto</string>\n    <string name=\"manga_display_modified_interval_title\">Imposta l\\'aggiornamento ogni</string>\n    <string name=\"skipped_reason_not_in_release_period\">Saltato perché oggi non era previsto alcun rilascio</string>\n    <string name=\"track_delete_title\">Rimuovere il tracking di %s?</string>\n    <string name=\"track_delete_remote_text\">Rimuovi anche da %s</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_text\">Questo rimuoverà il tracciamento locale.</string>\n    <string name=\"delete_downloaded\">Cancella scaricati</string>\n    <string name=\"has_results\">Con risultati</string>\n    <string name=\"library_sync_complete\">Sincronizzazione libreria completata</string>\n    <string name=\"syncing_library\">Sincronizzazione libreria</string>\n    <string name=\"information_cloudflare_help\">Tocca qua per assistenza con Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Indice dei download invalidato</string>\n    <string name=\"track_activity_name\">Login del trakcer</string>\n    <string name=\"create_backup_file_error\">Non è stato possibile creare un file di backup</string>\n    <string name=\"exception_http\">HTTP %d, controlla il sito nella WebView</string>\n    <string name=\"exception_offline\">Nessuna connessione ad internet</string>\n    <string name=\"exception_unknown_host\">%s non raggiungibile</string>\n    <string name=\"unlock_app_title\">Sblocca %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Spostare la serie in fondo</string>\n    <string name=\"pref_relative_format\">Timestamp relativi</string>\n    <string name=\"pref_relative_format_summary\">«%1$s» invece di «%2$s»</string>\n    <string name=\"app_settings\">Impostazioni app</string>\n    <string name=\"source_settings\">Impostazioni delle fonti</string>\n    <string name=\"notification_updating_progress\">Aggiornando libreria... (%s)</string>\n    <string name=\"file_null_uri_error\">Il selettore di file ha restituito file all\\'app</string>\n    <string name=\"label_data_storage\">Dati e archiviazione</string>\n    <string name=\"onboarding_storage_action_select\">Scegli una cartella</string>\n    <string name=\"onboarding_action_finish\">Iniziamo</string>\n    <string name=\"action_apply\">Applica</string>\n    <string name=\"onboarding_storage_selection_required\">Devi selezionare una cartella</string>\n    <string name=\"onboarding_permission_notifications\">Permessi di notifica</string>\n    <string name=\"action_revert_to_default\">Reimposta predefiniti</string>\n    <string name=\"onboarding_permission_install_apps\">Permessi per installare app</string>\n    <string name=\"onboarding_heading\">Ti diamo il benvenuto!</string>\n    <string name=\"action_menu_overflow_description\">Altre opzioni</string>\n    <string name=\"selected\">Selezionato</string>\n    <string name=\"not_selected\">Non selezionato</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"onboarding_action_skip\">Salta</string>\n    <string name=\"onboarding_action_next\">Prossimo</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Uso della batteria in secondo piano</string>\n    <string name=\"onboarding_permission_install_apps_description\">Per installare le estensioni delle fonti.</string>\n    <string name=\"action_bar_up_description\">Navigare su</string>\n    <string name=\"onboarding_description\">Per prima cosa impostiamo alcune cose. Puoi sempre cambiarle successivamente nelle impostazioni.</string>\n    <string name=\"onboarding_permission_notifications_description\">Ricevi notifiche per aggiornamenti della libreria e altro.</string>\n    <string name=\"ext_permission_install_apps_warning\">È necessaria l\\'autorizzazione per installare le estensioni. Tocca qui per concederla.</string>\n    <string name=\"onboarding_storage_info\">Selezione una cartella dove %1$s salverà i capitoli scaricati, i backup e altro.\n\\n\n\\nÈ raccomandato usare una cartella dedicata.\n\\n\n\\nCartella selezionata: %2$s</string>\n    <string name=\"pref_storage_location\">Posizione di archiviazione</string>\n    <string name=\"action_create\">Crea</string>\n    <string name=\"relative_time_span_never\">Mai</string>\n    <string name=\"pref_flash_page_summ\">Riduce il ghosting sugli schermi e-ink</string>\n    <string name=\"pref_onboarding_guide\">Guida di benvenuto</string>\n    <string name=\"pref_storage_location_info\">Usato per i backup automatici, download capitoli e fonti locali.</string>\n    <string name=\"onboarding_guides_new_user\">Nuovo su %s? Ti consigliamo di dare un\\'occhiata alla guida introduttiva.</string>\n    <string name=\"available_disk_space_info\">Disponibile: %1$s / Totale: %2$s</string>\n    <string name=\"last_auto_backup_info\">Ultimo backup automatico: %s</string>\n    <string name=\"onboarding_guides_returning_user\">Hai già usato %s in precedenza?</string>\n    <string name=\"no_scanlators_found\">Nessuno scanlator trovato</string>\n    <string name=\"pref_flash_page\">Lampeggia al cambio pagina</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Evita interruzioni a lunghi aggiornamenti libreria, download e ripristino di backup.</string>\n    <string name=\"pref_storage_usage\">Archiviazione utilizzata</string>\n    <string name=\"action_sort_tracker_score\">Punteggio del tracker</string>\n    <string name=\"no_location_set\">Cartella di archiviazione non impostata</string>\n    <string name=\"private_settings\">Includi impostazioni sensibili (es. token di login dei tracker)</string>\n    <string name=\"onboarding_permission_action_grant\">Consenti</string>\n    <string name=\"exclude_scanlators\">Escludi scanlator</string>\n    <string name=\"onboarding_storage_help_action\">Guida all\\'archiviazione</string>\n    <string name=\"label_extension_repos\">Repository delle estensioni</string>\n    <string name=\"action_add_repo\">Aggiungi repository</string>\n    <string name=\"label_add_repo_input\">URL repository</string>\n    <string name=\"error_repo_exists\">Questa repository esiste già!</string>\n    <string name=\"action_delete_repo\">Elimina repository</string>\n    <string name=\"invalid_repo_name\">URL repository non valida</string>\n    <string name=\"action_open_repo\">Repository open source</string>\n    <string name=\"manga_interval_expected_update_soon\">Presto</string>\n    <string name=\"manga_interval_custom_amount\">Frequenza di aggiornamento personalizzata:</string>\n    <string name=\"onboarding_storage_help_info\">Sti aggiornando da una vecchia versione e non sai cosa selezionare? Consulta la guida all\\'archiviazione per info.</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"pref_library_update_smart_update\">Aggiornamento intelligente</string>\n    <string name=\"ext_revoke_trust\">Revoca le estensioni sconosciute affidabili</string>\n    <string name=\"information_empty_repos\">Non hai repository impostate.</string>\n    <string name=\"action_add_repo_message\">Aggiungi altri repository a Mihon. Questo dovrebbe essere un URL che termina con \\\"index.min.json\\\".</string>\n    <string name=\"delete_repo_confirmation\">Vuoi eleminare la repository \\\"%s\\\"?</string>\n    <string name=\"invalid_backup_file_error\">Errore completo:</string>\n    <string name=\"manga_interval_expected_update\">Si prevede che i nuovi capitoli saranno rilasciati tra circa %1$s, con controlli ogni %2$s.</string>\n    <string name=\"action_add_anyway\">Aggiungere comunque</string>\n    <string name=\"action_migrate_duplicate\">Migrare la voce esistente</string>\n    <string name=\"action_replace_repo_title\">La Firma dell\\'Impronta Digitale della Chiave Esiste Già</string>\n    <string name=\"pref_display_profile\">Profilo di visualizzazione personalizzato</string>\n    <string name=\"action_replace_repo_message\">La repository %1$s ha la stessa Firma d\\'Impronta Digitale della Chiave %2$s.\n\\nSe è quello che si desidera, %2$s verrà sostituita, altrimenti contatta il manutentore della repository.</string>\n    <string name=\"action_replace_repo\">Sostituisci</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Disattiva zoom indietro</string>\n    <string name=\"label_upcoming\">Prossimamente</string>\n    <string name=\"action_view_upcoming\">Controlla i Prossimi Aggiornamenti</string>\n    <string name=\"upcoming_guide\">Guida in arrivo</string>\n    <string name=\"upcoming_calendar_next\">Mese prossimo</string>\n    <string name=\"upcoming_calendar_prev\">Mese scorso</string>\n    <string name=\"pref_flash_duration\">Durata del flash</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_with\">Flash con</string>\n    <string name=\"pref_flash_style_black\">Nero</string>\n    <string name=\"pref_flash_style_white\">Bianco</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Non si è potuto ottenere l\\'accesso permanente alle cartella. L\\'applicazione potrebbe comportarsi inaspettatamente.</string>\n    <string name=\"pref_flash_page_interval\">Flash ogni</string>\n    <string name=\"pref_flash_style_white_black\">Bianco e Nero</string>\n    <string name=\"non_library_settings\">Tutte le voci lette</string>\n    <string name=\"action_copy_link\">Copia collegamento</string>\n    <string name=\"action_sort_random\">Casuale</string>\n    <string name=\"onboarding_permission_crashlytics\">Invia registri dei crash</string>\n    <string name=\"onboarding_permission_analytics\">Consenti l\\'analitica</string>\n    <string name=\"onboarding_permission_analytics_description\">Invia dati di uso anonimizzati per migliorare le funzionalità dell\\'app.</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Invia registri anonimizzati dei crash agli sviluppatori.</string>\n    <string name=\"pref_security\">Sicurezza</string>\n    <string name=\"pref_firebase\">Analitica e registri di crash</string>\n    <string name=\"extensionRepo_settings\">Repository delle estensioni</string>\n    <string name=\"confirm_tracker_update\">Aggiornare i tracker al capitolo %d?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Salta il download dei capitoli letti duplicati</string>\n    <string name=\"firebase_summary\">L\\'invio dei registri dei crash e delle analitiche ci consentirà di identificare e risolvere i problemi, migliorare le prestazioni e rendere gli aggiornamenti futuri più pertinenti alle tue esigenze</string>\n    <string name=\"add_repo_confirmation\">Vuoi aggiungere il repository \\\"%s\\\"?</string>\n    <string name=\"ext_remove\">Rimuovi</string>\n    <string name=\"ext_confirm_remove\">Rimuovere l\\'estensione?</string>\n    <string name=\"remove_private_extension_message\">Vuoi davvero rimuovere l\\'estensione \\\"%s\\\"?</string>\n    <string name=\"invalid_backup_file_json\">Backup JSON non supportato</string>\n    <string name=\"invalid_backup_file_unknown\">Il file di backup è corrotto</string>\n    <string name=\"manga_interval_expected_update_null\">Questo manga è completato o non c\\'è data di rilascio prevista.</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aggiorna il progresso quando segnato come letto</string>\n    <string name=\"trackers_updated_summary\">Tracker aggiornati al capitolo %d</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Predefinito (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Se il lettore carica un\\'immagine vuota, riduci progressivamente il limite.\\nSelezionato: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Limite di elaborazione immagini hardware personalizzato</string>\n    <string name=\"label_auto\">Automatico</string>\n    <string name=\"theme_monochrome\">Monocromatico</string>\n    <string name=\"export\">Esporta</string>\n    <string name=\"author\">Autore</string>\n    <string name=\"artist\">Artista</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ja/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">%1$s分後</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d件の新しい章</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">残り%1$s件</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">%1$sで完了しました (%2$s件のエラー)</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d件のカテゴリー</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">%d件の拡張機能の更新が利用可能です</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">%1$s章と他%2$d章</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">%d件の項目</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">%1$s章</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d個のトラッカー</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">%d章をスキップします。ソースに章が存在しないか、フィルタリングされています。</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d日前</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">次の未読の%d章</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">次の%d章</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">%1$s章が存在しません</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d日</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%dリポジトリ</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"other\">%1$d 日後</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"other\">%1$s ページ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ja/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">名前</string>\n    <string name=\"categories\">カテゴリー</string>\n    <string name=\"manga\">ライブラリの項目</string>\n    <string name=\"chapters\">章</string>\n    <string name=\"history\">履歴</string>\n    <string name=\"label_settings\">設定</string>\n    <string name=\"label_download_queue\">ダウンロードキュー</string>\n    <string name=\"label_library\">ライブラリ</string>\n    <string name=\"label_recent_manga\">履歴</string>\n    <string name=\"label_recent_updates\">新着</string>\n    <string name=\"label_backup\">バックアップと復元</string>\n    <string name=\"action_settings\">設定</string>\n    <string name=\"action_filter\">絞り込む</string>\n    <string name=\"action_filter_bookmarked\">お気に入り</string>\n    <string name=\"action_filter_unread\">未読</string>\n    <string name=\"action_filter_empty\">フィルタを削除</string>\n    <string name=\"action_sort_alpha\">アルファベット順</string>\n    <string name=\"action_sort_total\">章の数順</string>\n    <string name=\"action_sort_last_read\">最後に読んだ順</string>\n    <string name=\"action_search\">検索</string>\n    <string name=\"action_global_search\">グローバル検索</string>\n    <string name=\"action_select_all\">すべて選択</string>\n    <string name=\"action_download\">ダウンロード</string>\n    <string name=\"action_bookmark\">章にブックマークを追加</string>\n    <string name=\"action_remove_bookmark\">章のブックマークを削除</string>\n    <string name=\"action_display_grid\">コンパクトグリッド</string>\n    <string name=\"action_display_list\">リスト</string>\n    <string name=\"action_sort\">ソート</string>\n    <string name=\"track\">トラッキング</string>\n    <string name=\"label_extensions\">拡張機能</string>\n    <string name=\"label_extension_info\">拡張機能の情報</string>\n    <string name=\"label_migration\">移行</string>\n    <string name=\"action_mark_as_read\">既読にする</string>\n    <string name=\"action_mark_as_unread\">未読にする</string>\n    <string name=\"action_delete\">削除する</string>\n    <string name=\"action_update_library\">ライブラリを更新</string>\n    <string name=\"action_edit\">編集</string>\n    <string name=\"action_add_category\">カテゴリを追加</string>\n    <string name=\"action_edit_categories\">カテゴリを編集</string>\n    <string name=\"action_edit_cover\">表紙を編集</string>\n    <string name=\"action_pause\">一時停止</string>\n    <string name=\"action_previous_chapter\">前の章</string>\n    <string name=\"action_next_chapter\">次の章</string>\n    <string name=\"action_retry\">リトライ</string>\n    <string name=\"action_resume\">再開</string>\n    <string name=\"action_open_in_browser\">ブラウザで開く</string>\n    <string name=\"action_display_mode\">表示モード</string>\n    <string name=\"action_display\">表示</string>\n    <string name=\"action_display_download_badge\">ダウンロードした章の数</string>\n    <string name=\"action_cancel\">キャンセル</string>\n    <string name=\"action_share\">シェア</string>\n    <string name=\"action_save\">保存</string>\n    <string name=\"action_reset\">リセット</string>\n    <string name=\"action_open_log\">ログを開く</string>\n    <string name=\"action_restore\">リストア</string>\n    <string name=\"loading\">読み込み中…</string>\n    <string name=\"app_not_available\">アプリは利用不可</string>\n    <string name=\"pref_category_general\">全般</string>\n    <string name=\"pref_category_downloads\">ダウンロード</string>\n    <string name=\"pref_category_advanced\">その他</string>\n    <string name=\"pref_category_about\">アプリについて</string>\n    <string name=\"portrait\">縦向き</string>\n    <string name=\"landscape\">横向き</string>\n    <string name=\"pref_library_update_interval\">自動更新</string>\n    <string name=\"update_never\">OFF</string>\n    <string name=\"update_6hour\">6時間ごと</string>\n    <string name=\"update_12hour\">12時間ごと</string>\n    <string name=\"update_24hour\">毎日</string>\n    <string name=\"update_48hour\">2日ごと</string>\n    <string name=\"update_weekly\">毎週</string>\n    <string name=\"all\">全て</string>\n    <string name=\"pref_library_update_restriction\">自動更新の条件</string>\n    <string name=\"charging\">充電中</string>\n    <string name=\"pref_update_only_non_completed\">ステータスが「完結済み」の作品をスキップ</string>\n    <string name=\"pref_auto_update_manga_sync\">読んだ後に読書進捗を更新</string>\n    <string name=\"default_category\">デフォルトカテゴリー</string>\n    <string name=\"default_category_summary\">毎回尋ねる</string>\n    <string name=\"ext_update\">更新</string>\n    <string name=\"ext_install\">インストール</string>\n    <string name=\"ext_pending\">保留</string>\n    <string name=\"ext_downloading\">ダウンロード中</string>\n    <string name=\"ext_installing\">インストール</string>\n    <string name=\"ext_installed\">インストール済み</string>\n    <string name=\"ext_trust\">信用する</string>\n    <string name=\"ext_untrusted\">信用できない</string>\n    <string name=\"ext_uninstall\">アンインストール</string>\n    <string name=\"untrusted_extension\">信頼できない拡張</string>\n    <string name=\"pref_fullscreen\">フルスクリーン</string>\n    <string name=\"pref_page_transitions\">ページ遷移エフェクトを表示</string>\n    <string name=\"pref_double_tap_anim_speed\">ダブルタップアニメーション速度</string>\n    <string name=\"pref_crop_borders\">クロップボーダー</string>\n    <string name=\"pref_custom_brightness\">カスタムの明るさ</string>\n    <string name=\"pref_custom_color_filter\">カスタムカラーフィルター</string>\n    <string name=\"pref_reader_navigation\">ナビゲーション</string>\n    <string name=\"pref_read_with_volume_keys\">音量キー</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">音量キーを反転</string>\n    <string name=\"pref_reader_theme\">背景色</string>\n    <string name=\"white_background\">白</string>\n    <string name=\"black_background\">ブラック</string>\n    <string name=\"pref_viewer_type\">既定のビューアモード</string>\n    <string name=\"left_to_right_viewer\">ページ分割 (左から右)</string>\n    <string name=\"right_to_left_viewer\">ページ分割 (右から左)</string>\n    <string name=\"vertical_viewer\">ページ分割 (上から下)</string>\n    <string name=\"webtoon_viewer\">縦長のストリップ</string>\n    <string name=\"pager_viewer\">ページに分ける</string>\n    <string name=\"pref_image_scale_type\">スケールの種類</string>\n    <string name=\"scale_type_fit_screen\">画面サイズに合わせる</string>\n    <string name=\"scale_type_stretch\">ストレッチ</string>\n    <string name=\"scale_type_fit_width\">幅に合わせる</string>\n    <string name=\"scale_type_original_size\">オリジナルサイズ</string>\n    <string name=\"scale_type_smart_fit\">スマートフィット</string>\n    <string name=\"pref_zoom_start\">ズーム開始位置</string>\n    <string name=\"zoom_start_automatic\">自動</string>\n    <string name=\"zoom_start_left\">左</string>\n    <string name=\"zoom_start_right\">右</string>\n    <string name=\"zoom_start_center\">中央</string>\n    <string name=\"double_tap_anim_speed_normal\">通常</string>\n    <string name=\"double_tap_anim_speed_fast\">速い</string>\n    <string name=\"pref_rotation_type\">既定の画面向き</string>\n    <string name=\"rotation_free\">自動回転</string>\n    <string name=\"rotation_force_portrait\">縦向き画面を強制</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">手動で既読にした後</string>\n    <string name=\"pref_remove_after_read\">読んだ後自動で削除</string>\n    <string name=\"disabled\">無効</string>\n    <string name=\"second_to_last\">最後に読んだ章の2番目</string>\n    <string name=\"pref_download_new\">新しい章をダウンロード</string>\n    <string name=\"pref_create_backup\">バックアップを作成</string>\n    <string name=\"pref_create_backup_summ\">現在のライブラリを復元するために使用できます</string>\n    <string name=\"pref_restore_backup\">バックアップを復元</string>\n    <string name=\"pref_restore_backup_summ\">バックアップファイルからライブラリを復元する</string>\n    <string name=\"pref_backup_interval\">自動バックアップの頻度</string>\n    <string name=\"backup_created\">バックアップが作成されました</string>\n    <string name=\"pref_clear_chapter_cache\">チャプタキャッシュをクリア</string>\n    <string name=\"cache_delete_error\">消去中にエラーが発生しました</string>\n    <string name=\"pref_clear_database\">データベースをクリア</string>\n    <string name=\"pref_clear_database_summary\">ライブラリにない項目の履歴を削除</string>\n    <string name=\"version\">バージョン</string>\n    <string name=\"pref_enable_acra\">クラッシュレポートを送信する</string>\n    <string name=\"login_title\">%1$sにログイン</string>\n    <string name=\"username\">ユーザー名</string>\n    <string name=\"password\">パスワード</string>\n    <string name=\"login\">ログイン</string>\n    <string name=\"login_success\">ログインしました</string>\n    <string name=\"action_add\">追加</string>\n    <string name=\"action_rename_category\">カテゴリー名を編集</string>\n    <string name=\"action_move_category\">カテゴリーを設定</string>\n    <string name=\"action_remove\">削除</string>\n    <string name=\"action_install\">インストール</string>\n    <string name=\"action_undo\">取り消し</string>\n    <string name=\"label_help\">ヘルプ</string>\n    <string name=\"action_mark_previous_as_read\">前の章を既読にする</string>\n    <string name=\"action_open_in_web_view\">WebView で開く</string>\n    <string name=\"pref_category_reader\">ビューア</string>\n    <string name=\"pref_category_tracking\">同期</string>\n    <string name=\"untrusted_extension_message\">悪意のある拡張機能は保存されているすべてのログイン情報を読み取ることや、任意コード実行をすることができます。\n\\n\n\\nこれらのリスクを受け入れ、この拡張機能を信頼しますか？</string>\n    <string name=\"pref_show_page_number\">ページ数を表示</string>\n    <string name=\"pref_keep_screen_on\">画面を常にON</string>\n    <string name=\"scale_type_fit_height\">高さに合わせる</string>\n    <string name=\"double_tap_anim_speed_0\">アニメ効果をOFF</string>\n    <string name=\"rotation_force_landscape\">横向き画面を強制</string>\n    <string name=\"last_read_chapter\">最後に読んだ章</string>\n    <string name=\"third_to_last\">最後に読んだ章の3番目</string>\n    <string name=\"fourth_to_last\">最後に読んだ章の4番目</string>\n    <string name=\"fifth_to_last\">最後に読んだ章の5番目</string>\n    <string name=\"services\">トラッカー</string>\n    <string name=\"restore_completed\">復元が完了しました</string>\n    <string name=\"backup_choice\">バックアップしたいのは？</string>\n    <string name=\"restoring_backup\">バックアップを復元中</string>\n    <string name=\"creating_backup\">バックアップを作成中</string>\n    <string name=\"used_cache\">サイズ: %1$s</string>\n    <string name=\"cache_deleted\">キャッシュがクリアされ、%1$d 個のファイルが削除されました</string>\n    <string name=\"pref_clear_cookies\">Cookiesを削除</string>\n    <string name=\"cookies_cleared\">Cookiesを削除しました</string>\n    <string name=\"clear_database_confirmation\">データベースをクリアしてもよろしいですか？ライブラリにない項目の読んだ章と読書進捗はすべて失われます</string>\n    <string name=\"clear_database_completed\">エントリーを削除しました</string>\n    <string name=\"pref_acra_summary\">バグの修正などに役立ちます。個人情報を送信しません</string>\n    <string name=\"unknown_error\">不明なエラー</string>\n    <string name=\"updating_category\">カテゴリーを更新中</string>\n    <string name=\"no_more_results\">これ以上の結果はありません</string>\n    <string name=\"action_global_search_hint\">グローバル検索…</string>\n    <string name=\"latest\">最近の更新</string>\n    <string name=\"browse\">ブラウズ</string>\n    <string name=\"ongoing\">連載中</string>\n    <string name=\"unknown\">不明</string>\n    <string name=\"licensed\">ライセンス済み</string>\n    <string name=\"remove_from_library\">ライブラリから削除</string>\n    <string name=\"manga_added_library\">ライブラリに追加しました</string>\n    <string name=\"manga_removed_library\">ライブラリから削除しました</string>\n    <string name=\"delete_downloads_for_manga\">ダウンロードした章を削除してもよろしいですか？</string>\n    <string name=\"copied_to_clipboard\">次をクリップボードにコピーしました:\n\\n%1$s</string>\n    <string name=\"display_mode_chapter\">第%1$s章</string>\n    <string name=\"chapter_downloading_progress\">ダウンロード中 (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">エラー</string>\n    <string name=\"chapter_paused\">一時停止済み</string>\n    <string name=\"show_title\">ソースタイトル</string>\n    <string name=\"show_chapter_number\">章の数</string>\n    <string name=\"sort_by_source\">ソースに基づいた順</string>\n    <string name=\"sort_by_number\">章番号順</string>\n    <string name=\"manga_download\">ダウンロード</string>\n    <string name=\"download_unread\">未読</string>\n    <string name=\"confirm_delete_chapters\">選択した章を削除してもよろしいですか？</string>\n    <string name=\"manga_tracking_tab\">同期</string>\n    <string name=\"reading\">読書中</string>\n    <string name=\"completed\">完結済み</string>\n    <string name=\"dropped\">放棄済み</string>\n    <string name=\"on_hold\">保留中</string>\n    <string name=\"plan_to_read\">読む予定</string>\n    <string name=\"score\">評価</string>\n    <string name=\"title\">タイトル</string>\n    <string name=\"status\">ステータス</string>\n    <string name=\"track_status\">ステータス</string>\n    <string name=\"track_type\">タイプ</string>\n    <string name=\"error_category_exists\">この名前が既に存在しています！</string>\n    <string name=\"snack_categories_deleted\">カテゴリーが削除されました</string>\n    <string name=\"dialog_with_checkbox_remove_description\">この章の読書日時を削除してもよろしいですか？</string>\n    <string name=\"dialog_with_checkbox_reset\">この項目の章をすべてリセット</string>\n    <string name=\"snack_add_to_library\">ライブラリに追加しますか？</string>\n    <string name=\"picture_saved\">画像を保存しました</string>\n    <string name=\"custom_filter\">カスタム フィルタ</string>\n    <string name=\"set_as_cover\">カバーとして設定</string>\n    <string name=\"cover_updated\">カバーとして設定しました</string>\n    <string name=\"chapter_progress\">ページ: %1$d</string>\n    <string name=\"no_next_chapter\">次の章が見つかりません</string>\n    <string name=\"decode_image_error\">画像をロードできませんでした</string>\n    <string name=\"confirm_set_image_as_cover\">カバーとして設定しますか？</string>\n    <string name=\"migration_dialog_what_to_include\">移行するデータを選択</string>\n    <string name=\"migrate\">移行</string>\n    <string name=\"copy\">コピー</string>\n    <string name=\"download_queue_error\">章のダウンロードに失敗しました。「ダウンロード」にて再試行してください</string>\n    <string name=\"notification_new_chapters\">新しい章が見つかりました</string>\n    <string name=\"notification_cover_update_failed\">カバーを更新できませんでした</string>\n    <string name=\"notification_first_add_to_library\">まずは項目をライブラリに追加してください</string>\n    <string name=\"file_select_cover\">カバー画像を選択</string>\n    <string name=\"file_select_backup\">バックアップファイルを選択</string>\n    <string name=\"update_check_confirm\">ダウンロード</string>\n    <string name=\"update_check_no_new_updates\">新しいバージョンがありません</string>\n    <string name=\"update_check_notification_download_in_progress\">ダウンロード中…</string>\n    <string name=\"update_check_notification_download_complete\">タップでアップデートをインストール</string>\n    <string name=\"update_check_notification_download_error\">ダウンロード中にエラー発生</string>\n    <string name=\"update_check_notification_update_available\">アップデート利用可能！</string>\n    <string name=\"information_no_downloads\">ダウンロードがありません</string>\n    <string name=\"information_no_recent\">最近の更新はありません</string>\n    <string name=\"information_no_recent_manga\">最近は何も読んでいません</string>\n    <string name=\"information_empty_library\">ライブラリは空です</string>\n    <string name=\"information_empty_category\">カテゴリーがありません。「+」をタップしてカテゴリーを追加し、ライブラリを整理できます。</string>\n    <string name=\"download_notifier_downloader_title\">ダウンロード</string>\n    <string name=\"download_notifier_title_error\">エラー</string>\n    <string name=\"download_notifier_unknown_error\">予期せぬエラーが発生したため、ダウンロードは失敗しました</string>\n    <string name=\"download_notifier_text_only_wifi\">Wi-Fi接続は利用できません</string>\n    <string name=\"download_notifier_no_network\">ネットワーク接続が利用できません</string>\n    <string name=\"download_notifier_download_paused\">ダウンロード一時停止済み</string>\n    <string name=\"channel_common\">一般設定</string>\n    <string name=\"repeating\">読み返し中</string>\n    <string name=\"source_not_installed\">未インストールのソース: %1$s</string>\n    <string name=\"transition_finished\">読み終わりました:</string>\n    <string name=\"transition_current\">読んでいます:</string>\n    <string name=\"transition_next\">次:</string>\n    <string name=\"transition_previous\">前:</string>\n    <string name=\"transition_no_next\">次の章がありません</string>\n    <string name=\"transition_no_previous\">前の章がありません</string>\n    <string name=\"transition_pages_loading\">ページをロード中…</string>\n    <string name=\"transition_pages_error\">ページのロードに失敗: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">長押しでアクションを表示</string>\n    <string name=\"pref_skip_read_chapters\">読み終わった章をスキップ</string>\n    <string name=\"pref_color_filter_mode\">ｶﾗｰﾌｨﾙﾀｰﾌﾞﾚﾝﾄﾞﾓｰﾄﾞ</string>\n    <string name=\"filter_mode_overlay\">オーバーレイ</string>\n    <string name=\"filter_mode_screen\">スクリーン</string>\n    <string name=\"no_results_found\">結果が見つかりませんでした</string>\n    <string name=\"migration_selection_prompt\">移行元を選択</string>\n    <string name=\"action_webview_back\">前へ</string>\n    <string name=\"action_webview_forward\">次へ</string>\n    <string name=\"action_webview_refresh\">更新</string>\n    <string name=\"pref_category_library\">ライブラリ</string>\n    <string name=\"ext_obsolete\">廃止済み</string>\n    <string name=\"obsolete_extension_message\">この拡張機能は利用不可になったため、正常に機能しなかったり、アプリでエラーを起こしたりする恐れがあります。アンインストールすることをお勧めします。</string>\n    <string name=\"pref_date_format\">日付形式</string>\n    <string name=\"pref_category_library_update\">グローバルアップデート</string>\n    <string name=\"logout_title\">%1$sからログアウトしますか？</string>\n    <string name=\"logout\">ログアウト</string>\n    <string name=\"logout_success\">ログアウトしました</string>\n    <string name=\"paused\">一時停止</string>\n    <string name=\"other_source\">その他</string>\n    <string name=\"label_more\">その他</string>\n    <string name=\"action_sort_latest_chapter\">最新章の更新順</string>\n    <string name=\"action_view_chapters\">章を見る</string>\n    <string name=\"action_cancel_all\">すべてキャンセル</string>\n    <string name=\"theme_light\">ライト</string>\n    <string name=\"theme_dark\">ダーク</string>\n    <string name=\"theme_system\">システム</string>\n    <string name=\"pref_manage_notifications\">通知設定</string>\n    <string name=\"pref_category_security\">セキュリティとプライバシー</string>\n    <string name=\"lock_with_biometrics\">アンロックを必要とする</string>\n    <string name=\"lock_when_idle\">タイムアウトロック</string>\n    <string name=\"lock_always\">常時</string>\n    <string name=\"lock_never\">しない</string>\n    <string name=\"secure_screen\">セキュア画面</string>\n    <string name=\"notification_chapters_single\">第%1$s章</string>\n    <string name=\"action_newest\">最新</string>\n    <string name=\"label_sources\">ソース</string>\n    <string name=\"local_source\">ローカルソース</string>\n    <string name=\"tabs_header\">タブ</string>\n    <string name=\"email\">メールアドレス</string>\n    <string name=\"downloaded_only_summary\">ライブラリにある項目はフィルターされます</string>\n    <string name=\"label_downloaded_only\">ダウンロード済みのみ</string>\n    <string name=\"check_for_updates\">更新を確認</string>\n    <string name=\"licenses\">オープンソースライセンス</string>\n    <string name=\"website\">Webサイト</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">デバイス設定を開きませんでした</string>\n    <string name=\"battery_optimization_disabled\">バッテリー最適化は既に無効です</string>\n    <string name=\"pref_disable_battery_optimization_summary\">バックグラウンドでのライブラリ更新とバックアップの役に立ちます</string>\n    <string name=\"pref_disable_battery_optimization\">バッテリー最適化を無効にする</string>\n    <string name=\"pref_refresh_library_covers\">ライブラリの表紙を更新</string>\n    <string name=\"label_data\">データ</string>\n    <string name=\"restoring_backup_canceled\">復元をキャンセルしました</string>\n    <string name=\"restoring_backup_error\">バックアップを復元できませんでした</string>\n    <string name=\"restore_in_progress\">既に復元中です</string>\n    <string name=\"creating_backup_error\">バックアップできませんでした</string>\n    <string name=\"backup_in_progress\">既にバックアップ中です</string>\n    <string name=\"restore_duration\">%1$02d分%2$02d 秒</string>\n    <string name=\"backup_restore_missing_sources\">ソースがありません:</string>\n    <string name=\"invalid_backup_file_missing_manga\">バックアップにはライブラリの項目が含まれません。</string>\n    <string name=\"invalid_backup_file\">無効なバックアップファイル：</string>\n    <string name=\"tracking_info\">一方同期の外部追跡サービスにある章の読書進捗を更新します。個別の項目の「同期」ボタンで追跡サービスを設定してください。</string>\n    <string name=\"pref_webtoon_side_padding\">余白</string>\n    <string name=\"pref_category_reading\">読書中</string>\n    <string name=\"pref_always_show_chapter_transition\">章の間の遷移ページを常に表示</string>\n    <string name=\"vertical_plus_viewer\">ギャップ付き縦長のストリップ</string>\n    <string name=\"gray_background\">グレー</string>\n    <string name=\"pref_skip_filtered_chapters\">フィルターされた章をスキップ</string>\n    <string name=\"filter_mode_darken\">焼き込み/比較（暗）</string>\n    <string name=\"filter_mode_lighten\">覆い焼き/比較（明）</string>\n    <string name=\"filter_mode_multiply\">乗算</string>\n    <string name=\"pref_cutout_short\">画面の切り抜きエリアにも内容を表示</string>\n    <string name=\"ext_updates_pending\">更新あり</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">ライブラリを更新時、新しい表紙と情報を確認します</string>\n    <string name=\"pref_library_update_refresh_metadata\">メタデータを自動で更新</string>\n    <string name=\"pref_library_columns\">グリッドの項目数</string>\n    <string name=\"pref_category_display\">画面</string>\n    <string name=\"hide_notification_content\">通知内容を非表示</string>\n    <string name=\"secure_screen_summary\">セキュア画面はアプリを切り替える時アプリの内容を非表示し、画面キャプチャを無効化します</string>\n    <string name=\"action_move_to_bottom\">底に移動</string>\n    <string name=\"action_move_to_top\">トップに移動</string>\n    <string name=\"action_oldest\">最古</string>\n    <string name=\"action_unpin\">ピン留めを外す</string>\n    <string name=\"action_pin\">ピン留め</string>\n    <string name=\"action_display_show_tabs\">カテゴリータブを表示</string>\n    <string name=\"action_display_comfortable_grid\">快適グリッド</string>\n    <string name=\"action_migrate\">移行</string>\n    <string name=\"action_disable_all\">全て無効にする</string>\n    <string name=\"action_enable_all\">全て有効にする</string>\n    <string name=\"action_select_inverse\">選択を反転</string>\n    <string name=\"action_menu\">メニュー</string>\n    <string name=\"channel_new_chapters\">章の更新</string>\n    <string name=\"information_webview_outdated\">WebViewアプリを更新して互換性を向上させてください</string>\n    <string name=\"information_webview_required\">WebViewが必要です</string>\n    <string name=\"updating_library\">ライブラリを更新中</string>\n    <string name=\"viewer\">ビューアモード</string>\n    <string name=\"manga_info_collapse\">詳細を非表示</string>\n    <string name=\"channel_ext_updates\">拡張機能の更新</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflareをバイパスできませんでした</string>\n    <string name=\"notification_chapters_single_and_more\">第%1$s章とその他%2$d章</string>\n    <string name=\"notification_chapters_multiple\">第%1$s章</string>\n    <string name=\"recent_manga_time\">第%1$s章 - %2$s</string>\n    <string name=\"page_list_empty_error\">ページが見つかりません</string>\n    <string name=\"pref_category_for_this_series\">このシリーズでは</string>\n    <string name=\"add_tracking\">追跡を追加</string>\n    <string name=\"add_to_library\">ライブラリに追加</string>\n    <string name=\"sort_by_upload_date\">アップロード日付順</string>\n    <string name=\"manga_info_expand\">詳細を表示</string>\n    <string name=\"in_library\">ライブラリ内</string>\n    <string name=\"local_source_help_guide\">ローカルソースガイド</string>\n    <string name=\"pinned_sources\">ピン留め済み</string>\n    <string name=\"last_used_source\">最近に使用</string>\n    <string name=\"pref_show_reading_mode_summary\">現在のビューアモードを、ビューアが立ち上がるとしばらく表示します</string>\n    <string name=\"pref_show_reading_mode\">ビューアモードを表示</string>\n    <string name=\"loader_not_implemented_error\">ソースが見つかりませんでした</string>\n    <string name=\"action_disable\">無効化</string>\n    <string name=\"action_start\">開始</string>\n    <string name=\"tapping_inverted_both\">両方</string>\n    <string name=\"tapping_inverted_vertical\">縦</string>\n    <string name=\"tapping_inverted_horizontal\">水平</string>\n    <string name=\"tapping_inverted_none\">なし</string>\n    <string name=\"unknown_status\">不明なステータス</string>\n    <string name=\"unknown_author\">作者不明</string>\n    <string name=\"requires_app_restart\">変更を適用するには再起動してください</string>\n    <string name=\"label_network\">ネットワーク</string>\n    <string name=\"pref_read_with_tapping_inverted\">タップでのページめくりを反転</string>\n    <string name=\"updated_version\">v%1$sに更新しました</string>\n    <string name=\"whats_new\">更新情報</string>\n    <string name=\"pref_category_reading_mode\">読み方</string>\n    <string name=\"channel_complete\">完了</string>\n    <string name=\"channel_progress\">プログレス</string>\n    <string name=\"download_insufficient_space\">空き領域不足のため、章をダウンロードできませんでした</string>\n    <string name=\"no_pinned_sources\">ピンソースがありません</string>\n    <string name=\"action_global_search_query\">グローバルで「%1$s」を探す</string>\n    <string name=\"pref_category_theme\">テーマ</string>\n    <string name=\"action_sort_date_added\">ライブラリへの追加日付順</string>\n    <string name=\"channel_errors\">エラー</string>\n    <string name=\"backup_restore_missing_trackers\">ログインしていないトラッカー:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">ブックマークした章の削除を許可</string>\n    <string name=\"pref_category_delete_chapters\">章を削除</string>\n    <string name=\"ext_nsfw_warning\">この拡張機能のソースには成人向けのコンテンツが含まれる可能性があります</string>\n    <string name=\"ext_nsfw_short\">成人向け</string>\n    <string name=\"parental_controls_info\">非公式や誤ってフラグ付けされた可能性のある拡張機能の成人向けのコンテンツはこれからも表示される恐れがあります。</string>\n    <string name=\"no_chapters_error\">章が見つかりません</string>\n    <string name=\"chapter_settings_updated\">デフォルトの章設定を更新しました</string>\n    <string name=\"share_page_info\">%1$s: %2$s、第%3$dページ</string>\n    <string name=\"set_chapter_settings_as_default\">デフォルトとして設定</string>\n    <string name=\"also_set_chapter_settings_for_library\">ライブラリにあるすべての項目にも適用</string>\n    <string name=\"confirm_set_chapter_settings\">デフォルト設定として保存しますか？</string>\n    <string name=\"chapter_settings\">章の設定</string>\n    <string name=\"action_search_settings\">検索設定</string>\n    <string name=\"downloaded_chapters\">ダウンロードした章の数</string>\n    <string name=\"manga_from_library\">ライブラリ内から</string>\n    <string name=\"pref_incognito_mode_summary\">閲覧履歴の記録を一時停止します</string>\n    <string name=\"pref_incognito_mode\">シークレット モード</string>\n    <string name=\"pref_clear_history\">履歴を全消去</string>\n    <string name=\"clear_history_confirmation\">履歴がすべて失われます。続行しますか？</string>\n    <string name=\"clear_history_completed\">履歴が削除されました</string>\n    <string name=\"spen_next_page\">次のページ</string>\n    <string name=\"spen_previous_page\">前のページ</string>\n    <string name=\"migration_help_guide\">ソース移行ガイド</string>\n    <string name=\"pref_category_nsfw_content\">成人向けのソース</string>\n    <string name=\"pref_show_nsfw_source\">ソース・拡張機能リストに表示</string>\n    <string name=\"file_picker_error\">ファイルを選択できるアプリが見つかりません</string>\n    <string name=\"myanimelist_relogin\">もう一度MALにログインしてください</string>\n    <string name=\"action_display_show_number_of_items\">アイテム数を表示する</string>\n    <string name=\"track_finished_reading_date\">読み終わった日付</string>\n    <string name=\"track_started_reading_date\">読み始めた日付</string>\n    <string name=\"edge_nav\">角</string>\n    <string name=\"action_order_by_chapter_number\">章の番号順</string>\n    <string name=\"action_order_by_upload_date\">アップロードされた日付順</string>\n    <string name=\"action_filter_tracked\">登録済み</string>\n    <string name=\"pref_dump_crash_logs_summary\">開発者に渡すよう、エラー ログを保存します</string>\n    <string name=\"pref_dump_crash_logs\">クラッシュ ログを共有</string>\n    <string name=\"pref_viewer_nav\">タップ可能なゾーン</string>\n    <string name=\"right_and_left_nav\">右と左</string>\n    <string name=\"kindlish_nav\">Kindleスタイル</string>\n    <string name=\"l_nav\">L形</string>\n    <string name=\"action_desc\">降順</string>\n    <string name=\"action_asc\">昇順</string>\n    <string name=\"pref_dual_page_invert_summary\">分割された幅広いページの配置が読む方向と一致しない場合は有効にしてください</string>\n    <string name=\"pref_dual_page_invert\">分割ページの配置を反転</string>\n    <string name=\"pref_dual_page_split\">幅広いページの分割</string>\n    <string name=\"backup_restore_content_full\">後で手動で必要な拡張機能をインストールし、使用したい追跡サービスにログインしてください。</string>\n    <string name=\"nav_zone_right\">右</string>\n    <string name=\"nav_zone_left\">左</string>\n    <string name=\"nav_zone_next\">次へ</string>\n    <string name=\"nav_zone_prev\">前へ</string>\n    <string name=\"pref_show_navigation_mode_summary\">ビューアが立ち上がるとしばらく表示します</string>\n    <string name=\"pref_show_navigation_mode\">タップ可能なゾーンを表示</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"pref_download_new_categories_details\">含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。</string>\n    <string name=\"pref_category_auto_download\">自動ダウンロード</string>\n    <string name=\"exclude\">下記を除外: %s</string>\n    <string name=\"include\">下記を含む: %s</string>\n    <string name=\"none\">なし</string>\n    <string name=\"pref_library_update_categories_details\">含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。</string>\n    <string name=\"action_show_errors\">タップで詳細を表示</string>\n    <string name=\"action_sort_chapter_fetch_date\">章の取得された日付順</string>\n    <string name=\"information_empty_category_dialog\">まだカテゴリを登録していません。</string>\n    <string name=\"update_check_eol\">このAndroidはもうサポートされていません</string>\n    <string name=\"error_no_match\">結果が見つかりませんでした</string>\n    <string name=\"source_unsupported\">非対応ソースです</string>\n    <string name=\"unread\">未読</string>\n    <string name=\"error_sharing_cover\">表紙を共有できませんでした</string>\n    <string name=\"error_saving_cover\">表紙を保存できませんでした</string>\n    <string name=\"cover_saved\">表紙を保存しました</string>\n    <string name=\"manga_cover\">表紙</string>\n    <string name=\"clipboard_copy_error\">クリップボードにコピーできませんでした</string>\n    <string name=\"date\">日付</string>\n    <string name=\"local_filter_order_by\">並び替え</string>\n    <string name=\"local_invalid_format\">章フォーマットが無効です</string>\n    <string name=\"chapter_not_found\">章が見つかりませんでした</string>\n    <string name=\"notification_incognito_text\">シークレットモードを無効にする</string>\n    <string name=\"tracking_guide\">追跡ガイド</string>\n    <string name=\"rotation_type\">画面向き</string>\n    <string name=\"automatic_background\">自動</string>\n    <string name=\"pref_create_folder_per_manga_summary\">項目のタイトルに基づいてフォルダを作成</string>\n    <string name=\"pref_create_folder_per_manga\">別々のフォルダにページを保存</string>\n    <string name=\"pref_reader_actions\">操作</string>\n    <string name=\"pref_grayscale\">グレースケール</string>\n    <string name=\"off\">オフ</string>\n    <string name=\"on\">オン</string>\n    <string name=\"categorized_display_settings\">カテゴリ別のソート設定</string>\n    <string name=\"restrictions\">制限: %s</string>\n    <string name=\"cancel_all_for_series\">このシリーズの全項目をキャンセル</string>\n    <string name=\"action_display_local_badge\">ローカル ソース</string>\n    <string name=\"rotation_landscape\">横向き</string>\n    <string name=\"rotation_portrait\">縦向き</string>\n    <string name=\"pref_dark_theme_pure_black\">真っ黒モード</string>\n    <string name=\"theme_yotsuba\">四つ葉</string>\n    <string name=\"theme_yinyang\">陰陽</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">ストロベリーダイキリ</string>\n    <string name=\"theme_midnightdusk\">黄昏</string>\n    <string name=\"theme_greenapple\">青りんご</string>\n    <string name=\"pref_app_theme\">アプリテーマ</string>\n    <string name=\"action_start_downloading_now\">ダウンロードを開始します</string>\n    <string name=\"theme_monet\">ダイナミック</string>\n    <string name=\"about_dont_kill_my_app\">一部のスマホメーカーはバックグラウンドサービスを終了する追加のアプリ制限を施しています。修正する方法についてはこのWebサイトをご覧ください。</string>\n    <string name=\"label_background_activity\">バックグラウンドアクティビティ</string>\n    <string name=\"restore_miui_warning\">MIUI最適化が有効な場合はバックアップ・復元が正常に機能しない恐れがあります。</string>\n    <string name=\"pref_lowest\">最低</string>\n    <string name=\"pref_low\">低い</string>\n    <string name=\"pref_high\">高い</string>\n    <string name=\"pref_highest\">最高</string>\n    <string name=\"pref_inverted_colors\">反転配色</string>\n    <string name=\"relative_time_today\">今日</string>\n    <string name=\"help_translate\">翻訳に協力</string>\n    <string name=\"getting_started_guide\">入門ガイド</string>\n    <string name=\"pref_tablet_ui_mode\">タブレットUI</string>\n    <string name=\"action_track\">追跡</string>\n    <string name=\"pref_remove_exclude_categories\">除外されるカテゴリー</string>\n    <string name=\"pref_hide_threshold\">メニューを自動非表示するスクロール量</string>\n    <string name=\"theme_tealturquoise\">ティール &amp; ターコイズ</string>\n    <string name=\"pref_category_appearance\">外観</string>\n    <string name=\"confirm_lock_change\">認証を行って変更を確認してください</string>\n    <string name=\"label_default\">デフォルト</string>\n    <string name=\"ext_installer_legacy\">レガシー</string>\n    <string name=\"ext_installer_pref\">インストーラ</string>\n    <string name=\"ext_app_info\">アプリの情報</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizukuを拡張機能インストーラーとして使用するには、Shizukuをインストールして起動してください。</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizukuは実行中ではありません</string>\n    <string name=\"action_sort_count\">項目数</string>\n    <string name=\"ext_install_service_notif\">拡張機能をインストール中…</string>\n    <string name=\"enhanced_services\">高度な追跡サービス</string>\n    <string name=\"enhanced_tracking_info\">特定ソース専用の高度な機能を提供します。項目はライブラリに追加される時、自動で追跡され始めます。</string>\n    <string name=\"backup_info\">ほかの場所にもバックアップのコピーを保管してください。バックアップには保存されたパスワードなどの機密性の高い情報が含まれることがあります。共有時に十分ご注意ください。</string>\n    <string name=\"pref_verbose_logging_summary\">システムログにverboseログを出力（アプリのパフォーマンスが低下します）</string>\n    <string name=\"notification_size_warning\">大規模のアップデートはソースに有害で、ソースを遅くし、電池の消耗を増加する可能性があります。詳しくはタップでご覧ください。</string>\n    <string name=\"action_display_language_badge\">言語</string>\n    <string name=\"label_warning\">警告</string>\n    <string name=\"pref_verbose_logging\">Verboseログ出力</string>\n    <string name=\"download_queue_size_warning\">警告: 大量の一括ダウンロードにより、ソースは遅くなったり、Mihonを接続禁止したりする恐れがあります。詳しくはタップでご覧ください。</string>\n    <string name=\"update_72hour\">3日ごと</string>\n    <string name=\"connected_to_wifi\">Wi-Fi接続時のみ</string>\n    <string name=\"ext_update_all\">全て更新</string>\n    <string name=\"channel_app_updates\">アプリ更新</string>\n    <string name=\"clear_database_source_item_count\">データベースにはライブラリにない項目は%1$d件あります</string>\n    <string name=\"pref_auto_clear_chapter_cache\">アプリ起動時に章のキャッシュを消去</string>\n    <string name=\"database_clean\">消去できるものはありませんでした</string>\n    <string name=\"extension_api_error\">利用可能な拡張機能を取得できませんでした</string>\n    <string name=\"privacy_policy\">プライバシーポリシー</string>\n    <string name=\"pref_update_only_completely_read\">未読の章がある作品をスキップ</string>\n    <string name=\"library_errors_help\">ライブラリ更新エラーの修正については、%1$sをご覧ください</string>\n    <string name=\"save_chapter_as_cbz\">CBZアーカイブとして保存</string>\n    <string name=\"publishing_finished\">完結済み</string>\n    <string name=\"cancelled\">キャンセル済み</string>\n    <string name=\"on_hiatus\">休載中</string>\n    <string name=\"action_show_manga\">項目を表示</string>\n    <string name=\"action_display_cover_only_grid\">表紙グリッド</string>\n    <string name=\"pref_update_only_started\">読み始めていない作品をスキップ</string>\n    <string name=\"skipped_reason_not_caught_up\">未読の章がある為スキップしました</string>\n    <string name=\"pref_landscape_zoom\">横長の画像に自動でズームイン</string>\n    <string name=\"skipped_reason_completed\">完結済みの為スキップしました</string>\n    <string name=\"skipped_reason_not_started\">読了した章がない為スキップしました</string>\n    <string name=\"pref_navigate_pan\">幅広い画像を左右に移動</string>\n    <string name=\"learn_more\">タップでもっと詳しく</string>\n    <string name=\"notification_update_error\">%1$d件の更新に失敗しました</string>\n    <string name=\"rotation_reverse_portrait\">縦向き (反転)</string>\n    <string name=\"action_move_to_top_all_for_series\">シリーズをトップに移動</string>\n    <string name=\"disabled_nav\">無効</string>\n    <string name=\"empty_backup_error\">バックアップできるライブラリ項目はありません</string>\n    <string name=\"update_check_open\">GitHubに移動</string>\n    <string name=\"error_saving_picture\">画像の保存時にエラー発生</string>\n    <string name=\"action_close\">閉じる</string>\n    <string name=\"pref_clear_webview_data\">WebViewデータを消去</string>\n    <string name=\"webview_data_deleted\">WebViewデータを消去しました</string>\n    <string name=\"source_empty_screen\">ソースが見つかりません</string>\n    <string name=\"source_filter_empty_screen\">インストール済みのソースが見つかりません</string>\n    <string name=\"action_sort_last_manga_update\">前回の更新確認</string>\n    <string name=\"action_sort_unread_count\">未読の章数</string>\n    <string name=\"split_tall_images_summary\">ビューアのパフォーマンスを向上させます</string>\n    <string name=\"download_notifier_split_page_not_found\">分割時にページ%dが見つかりませんでした</string>\n    <string name=\"pref_reset_viewer_flags\">シリーズ別のビューア設定をリセット</string>\n    <string name=\"pref_reset_viewer_flags_summary\">各シリーズのビューアモードと画面向きをリセットします</string>\n    <string name=\"download_notifier_split_page_path_not_found\">ページ%dのファイルパスが見つかりませんでした</string>\n    <string name=\"pref_reset_viewer_flags_success\">ビューア設定を全てリセットしました</string>\n    <string name=\"pref_reset_viewer_flags_error\">ビューア設定をリセットできませんでした</string>\n    <string name=\"empty_screen\">えっと、こりゃまずいですね</string>\n    <string name=\"ext_info_version\">バージョン</string>\n    <string name=\"ext_info_language\">言語</string>\n    <string name=\"ext_info_age_rating\">レイティング区分</string>\n    <string name=\"network_not_metered\">非従量制課金接続でのみ</string>\n    <string name=\"reading_list\">読書中リスト</string>\n    <string name=\"wish_list\">読みたいリスト</string>\n    <string name=\"unfinished_list\">未読了リスト</string>\n    <string name=\"complete_list\">読了リスト</string>\n    <string name=\"on_hold_list\">後で読むリスト</string>\n    <string name=\"cant_open_last_read_chapter\">最後に読んだ章を開けませんでした</string>\n    <string name=\"custom_cover\">カスタム表紙</string>\n    <string name=\"not_installed\">未インストール</string>\n    <string name=\"pref_app_language\">アプリ言語</string>\n    <string name=\"theme_lavender\">ラベンダー</string>\n    <string name=\"description_placeholder\">説明がありません</string>\n    <string name=\"delete_category_confirmation\">カテゴリー「%s」を削除しますか？</string>\n    <string name=\"delete_category\">カテゴリーを削除</string>\n    <string name=\"internal_error\">InternalError: 詳しくはクラッシュ ログをご参照ください</string>\n    <string name=\"pref_user_agent_string\">デフォルトのユーザーエージェント文字列</string>\n    <string name=\"pref_reset_user_agent_string\">デフォルトのユーザーエージェント文字列をリセットする</string>\n    <string name=\"action_remove_everything\">全て削除</string>\n    <string name=\"appwidget_updates_description\">最近更新されたライブラリの項目を見る</string>\n    <string name=\"appwidget_unavailable_locked\">アプリロックがONの時、ウィジェットは利用できません</string>\n    <string name=\"update_already_running\">アップデートはすでに進行中です</string>\n    <string name=\"error_user_agent_string_blank\">ユーザーエージェント文字列を入力してください</string>\n    <string name=\"theme_tidalwave\">津波</string>\n    <string name=\"download_ahead\">事前ダウンロード</string>\n    <string name=\"auto_download_while_reading\">読書中に自動でダウンロード</string>\n    <string name=\"download_ahead_info\">現在のと次の章は既にダウンロード済みの場合のみ有効です。</string>\n    <string name=\"are_you_sure\">本当に実行しますか？</string>\n    <string name=\"multi_lang\">多言語</string>\n    <string name=\"updates_last_update_info\">前回のライブラリ更新: %s</string>\n    <string name=\"remove_manga\">ライブラリから「%s」を削除しようとしています</string>\n    <string name=\"popular\">人気</string>\n    <string name=\"missing_storage_permission\">ストレージ権限を持っていません</string>\n    <string name=\"skipped_reason_not_always_update\">シリーズは更新を必要としないため、スキップされました</string>\n    <string name=\"action_search_hint\">検索…</string>\n    <string name=\"crash_screen_description\">%sでは予期せぬエラーが発生しました。お手数ですが、クラッシュ ログを Discord のサポート チャネルで共有するようお願い致します。</string>\n    <string name=\"invalid_location\">無効な場所: %s</string>\n    <string name=\"unknown_title\">不明なタイトル</string>\n    <string name=\"error_user_agent_string_invalid\">ユーザー エージェント文字列が無効です</string>\n    <string name=\"crash_screen_title\">おっと！</string>\n    <string name=\"updates_last_update_info_just_now\">ちょうど今</string>\n    <string name=\"crash_screen_restart_application\">アプリケーションを再起動</string>\n    <string name=\"pref_reader_summary\">ビューアモード、表示、ナビゲーション</string>\n    <string name=\"pref_downloads_summary\">自動ダウンロード、事前ダウンロード</string>\n    <string name=\"pref_tracking_summary\">一方同期、高度な同期</string>\n    <string name=\"pref_browse_summary\">ソース、拡張機能、グローバル検索</string>\n    <string name=\"pref_backup_summary\">手動・自動バックアップ、ストレージ領域</string>\n    <string name=\"pref_security_summary\">アプリロック、セキュア画面</string>\n    <string name=\"pref_advanced_summary\">クラッシュ ログのダンプ、バッテリーの最適化</string>\n    <string name=\"pref_appearance_summary\">テーマ、日付と時刻の形式</string>\n    <string name=\"pref_library_summary\">カテゴリ、グローバル アップデート、章の間のスワイプ</string>\n    <string name=\"action_open_random_manga\">おまかせ閲覧</string>\n    <string name=\"information_no_entries_found\">このカテゴリに項目がありません</string>\n    <string name=\"download_notifier_cache_renewal\">ダウンロード内容を検査しています</string>\n    <string name=\"fdroid_warning\">F-Droidビルドは正式にサポートされていません。\n\\n詳細はタップしてご覧ください。</string>\n    <string name=\"action_display_show_continue_reading_button\">続きを読むボタン</string>\n    <string name=\"track_remove_date_conf_title\">日付を削除しますか？</string>\n    <string name=\"pref_invalidate_download_cache\">ダウンロードのインデックスを再作成する</string>\n    <string name=\"track_remove_finish_date_conf_text\">%sで指定された終了日付を消去します</string>\n    <string name=\"track_remove_start_date_conf_text\">%sで指定された開始日付を消去します</string>\n    <string name=\"pref_invalidate_download_cache_summary\">ダウンロードした章の再スキャンを強制</string>\n    <string name=\"label_local\">ローカル</string>\n    <string name=\"label_started\">開始済み</string>\n    <string name=\"label_read_duration\">閲覧時間</string>\n    <string name=\"label_titles_section\">作品</string>\n    <string name=\"label_titles_in_global_update\">グローバルアップデート</string>\n    <string name=\"label_total_chapters\">合計</string>\n    <string name=\"label_read_chapters\">閲覧済み</string>\n    <string name=\"label_tracker_section\">トラッカー</string>\n    <string name=\"label_tracked_titles\">トラッキング中の作品</string>\n    <string name=\"label_used\">使用中</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"hour_short\">%d時間</string>\n    <string name=\"minute_short\">%d分</string>\n    <string name=\"seconds_short\">%d秒</string>\n    <string name=\"label_stats\">統計情報</string>\n    <string name=\"label_overview_section\">概要</string>\n    <string name=\"label_completed_titles\">読み終わった作品</string>\n    <string name=\"label_downloaded\">ダウンロード済み</string>\n    <string name=\"label_mean_score\">平均</string>\n    <string name=\"day_short\">%d日</string>\n    <string name=\"action_not_now\">後で</string>\n    <string name=\"information_no_manga_category\">カテゴリが空です</string>\n    <string name=\"pref_library_update_show_tab_badge\">アップデートアイコンに未読メッセージの件数を表示</string>\n    <string name=\"copied_to_clipboard_plain\">クリップボードにコピーしました</string>\n    <string name=\"enhanced_services_not_installed\">利用可能ですが未インストールのソース: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">重複の章をスキップ</string>\n    <string name=\"confirm_add_duplicate_manga\">ライブラリには既に同名の項目が存在しています。\n\\n\n\\nそれでも続行しますか？</string>\n    <string name=\"track_error\">%1$s エラー: %2$s</string>\n    <string name=\"information_required_plain\">*必須</string>\n    <string name=\"action_copy_to_clipboard\">クリップボードにコピー</string>\n    <string name=\"pref_hide_in_library_items\">ライブラリにある項目を非表示</string>\n    <string name=\"action_update_category\">カテゴリを更新</string>\n    <string name=\"split_tall_images\">長い画像を分割</string>\n    <string name=\"overlay_header\">オーバーレイ</string>\n    <string name=\"pref_page_rotate\">画面に合わせるように幅広いページを回転</string>\n    <string name=\"pref_page_rotate_invert\">回転した幅広いページの向きを反転</string>\n    <string name=\"pref_debug_info\">デバッグ情報</string>\n    <string name=\"pref_chapter_swipe_start\">左へスワイプ時の操作</string>\n    <string name=\"pref_chapter_swipe_end\">右へスワイプ時の操作</string>\n    <string name=\"pref_double_tap_zoom\">ダブルタップでズーム</string>\n    <string name=\"action_set_interval\">間隔を設定</string>\n    <string name=\"action_filter_interval_custom\">カスタマイズした更新頻度</string>\n    <string name=\"action_sort_next_updated\">次の更新予定</string>\n    <string name=\"pref_update_only_in_release_period\">次の更新時点を予測</string>\n    <string name=\"intervals_header\">間隔</string>\n    <string name=\"skipped_reason_not_in_release_period\">今日、連載更新が予想されていないためスキップしました</string>\n    <string name=\"has_results\">結果あり</string>\n    <string name=\"track_delete_title\">%s の追跡を削除しますか?</string>\n    <string name=\"manga_display_interval_title\">毎に評価</string>\n    <string name=\"manga_display_modified_interval_title\">ごとに更新するように設定する</string>\n    <string name=\"track_delete_text\">ローカルの追跡が削除されます。</string>\n    <string name=\"track_delete_remote_text\">%s からも削除</string>\n    <string name=\"delete_downloaded\">ダウンロードを削除</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"syncing_library\">ライブラリを同期しています</string>\n    <string name=\"library_sync_complete\">ライブラリを同期しました</string>\n    <string name=\"information_cloudflare_help\">Cloudflareに関するヘルプ情報はこちら</string>\n    <string name=\"download_cache_invalidated\">ダウンロード インデックスを消去しました</string>\n    <string name=\"create_backup_file_error\">バックアップ ファイルを作成できませんでした</string>\n    <string name=\"track_activity_name\">追跡サービスにログイン</string>\n    <string name=\"exception_http\">HTTP %d、WebViewでこのWebサイトを確認してください</string>\n    <string name=\"exception_offline\">インターネット接続がありません</string>\n    <string name=\"exception_unknown_host\">%sにアクセスできませんでした</string>\n    <string name=\"unlock_app_title\">%sをアンロック</string>\n    <string name=\"action_move_to_bottom_all_for_series\">シリーズを底に移動</string>\n    <string name=\"pref_relative_format\">相対的なタイムスタンプ</string>\n    <string name=\"pref_relative_format_summary\">「%2$s」の代わりに「%1$s」を使用</string>\n    <string name=\"notification_updating_progress\">ライブラリの更新中… (%s)</string>\n    <string name=\"source_settings\">ソース設定</string>\n    <string name=\"app_settings\">アプリ設定</string>\n    <string name=\"file_null_uri_error\">選択したファイルがありません</string>\n    <string name=\"relative_time_span_never\">なし</string>\n    <string name=\"pref_flash_page_summ\">Eインク画面の焼き付きを軽減</string>\n    <string name=\"last_auto_backup_info\">前回の自動バックアップ: %s</string>\n    <string name=\"pref_flash_page\">ページめくりの時、画面を点滅させる</string>\n    <string name=\"pref_storage_usage\">使用中のストレージ領域</string>\n    <string name=\"label_data_storage\">データとストレージ</string>\n    <string name=\"action_sort_tracker_score\">トラッカーの評価点数</string>\n    <string name=\"action_create\">作成</string>\n    <string name=\"action_apply\">適用</string>\n    <string name=\"action_revert_to_default\">デフォルトに戻す</string>\n    <string name=\"no_scanlators_found\">スキャンレーターが見つかりませんでした</string>\n    <string name=\"scanlator\">スキャンレーター</string>\n    <string name=\"exclude_scanlators\">スキャンレーターを除外</string>\n    <string name=\"action_menu_overflow_description\">その他のオプション</string>\n    <string name=\"selected\">選択済み</string>\n    <string name=\"not_selected\">未選択</string>\n    <string name=\"action_bar_up_description\">上に移動</string>\n    <string name=\"pref_storage_location\">保存場所</string>\n    <string name=\"pref_storage_location_info\">自動バックアップ、章のダウンロード、ローカル ソースの保存位置となります。</string>\n    <string name=\"onboarding_storage_action_select\">フォルダを選択してください</string>\n    <string name=\"pref_onboarding_guide\">初回設定ガイド</string>\n    <string name=\"onboarding_guides_new_user\">%sは初めて？入門ガイドをチェックしてみしましょう。</string>\n    <string name=\"onboarding_action_finish\">はじめる</string>\n    <string name=\"onboarding_storage_selection_required\">フォルダを選択してください</string>\n    <string name=\"onboarding_heading\">ようこそ！</string>\n    <string name=\"onboarding_guides_returning_user\">%sを再インストールしていますか？</string>\n    <string name=\"onboarding_action_skip\">スキップ</string>\n    <string name=\"onboarding_action_next\">次へ</string>\n    <string name=\"onboarding_description\">はじめに初回設定をしていきましょう。このあとも「設定」にていつも変更できます。</string>\n    <string name=\"no_location_set\">保存場所が設定されていません</string>\n    <string name=\"onboarding_storage_info\">%1$sのダウンロード、バックアップなどの保存先のフォルダを設定してください。\n\\n\n\\nアプリ専用のフォルダの作成・使用がおすすめです。\n\\n\n\\n選択したフォルダ：%2$s</string>\n    <string name=\"onboarding_permission_notifications\">通知の許可</string>\n    <string name=\"onboarding_permission_install_apps\">アプリのインストールの許可</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">時間のかかるライブラリ更新、ダウンロードやバックアップの復元などへの中断を防ぎます。</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">バックグラウンドでのバッテリー使用量</string>\n    <string name=\"onboarding_permission_install_apps_description\">ソース拡張機能をインストールするために必要です。</string>\n    <string name=\"onboarding_permission_notifications_description\">ライブラリ更新などの通知を送信します。</string>\n    <string name=\"onboarding_permission_action_grant\">許可</string>\n    <string name=\"available_disk_space_info\">空き領域：%1$s/総計：%2$s</string>\n    <string name=\"manga_interval_expected_update\">新章は%1$sぐらいでリリースされると予測しており、%2$sごとに確認する予定です。</string>\n    <string name=\"invalid_backup_file_error\">詳細なエラー情報：</string>\n    <string name=\"ext_permission_install_apps_warning\">拡張機能をインストールするためには権限が必要です。タップで許可してください。</string>\n    <string name=\"error_repo_exists\">このリポジトリは既に存在しています！</string>\n    <string name=\"manga_interval_custom_amount\">カスタム更新頻度：</string>\n    <string name=\"action_delete_repo\">リポジトリを削除</string>\n    <string name=\"delete_repo_confirmation\">リポジトリ「%s」を削除してもよろしいですか？</string>\n    <string name=\"onboarding_storage_help_action\">ストレージ ガイド</string>\n    <string name=\"private_settings\">トラッカーログイン情報などの機密性の高い情報を含む</string>\n    <string name=\"manga_interval_expected_update_soon\">間もなく</string>\n    <string name=\"ext_revoke_trust\">不明な拡張機能の信頼を取り消す</string>\n    <string name=\"label_extension_repos\">拡張機能リポジトリ</string>\n    <string name=\"invalid_repo_name\">リポジトリURLが無効です</string>\n    <string name=\"action_add_repo_message\">Mihonにリポジトリを追加します。「index.min.json」で終わるURLを入力してください。</string>\n    <string name=\"action_add_repo\">リポジトリを追加</string>\n    <string name=\"action_open_repo\">ソース リポジトリを開く</string>\n    <string name=\"onboarding_storage_help_info\">古いバージョンからバージョンアップしたばかりで、選択に悩んでいますか？ストレージ ガイドにご参照ください。</string>\n    <string name=\"information_empty_repos\">リポジトリを設定していません。</string>\n    <string name=\"label_add_repo_input\">リポジトリURL</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"pref_library_update_smart_update\">スマート・アップデート</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">ズームアウトを無効にする</string>\n    <string name=\"action_add_anyway\">追加</string>\n    <string name=\"action_migrate_duplicate\">移行</string>\n    <string name=\"action_replace_repo\">交換</string>\n    <string name=\"pref_display_profile\">カスタムディスプレイプロファイル</string>\n    <string name=\"upcoming_calendar_prev\">前月</string>\n    <string name=\"upcoming_calendar_next\">翌月</string>\n    <string name=\"label_upcoming\">近々公開</string>\n    <string name=\"action_view_upcoming\">今後のアップデート</string>\n    <string name=\"action_replace_repo_title\">署名キーのフィンガープリントはすでに存在します</string>\n    <string name=\"upcoming_guide\">今後のご案内</string>\n    <string name=\"action_replace_repo_message\">リポジトリ %1$s は %2$s と同じ署名キー指紋を持っています。\n\\nこれが予想される場合は %2$s が置換されますが、そうでない場合はリポジトリのメンテナーに連絡してください。</string>\n    <string name=\"pref_flash_duration\">閃光時間</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">フラッシュ・エブリ</string>\n    <string name=\"pref_flash_with\">フラッシュ</string>\n    <string name=\"pref_flash_style_black\">ブラック</string>\n    <string name=\"pref_flash_style_white\">ホワイト</string>\n    <string name=\"pref_flash_style_white_black\">白と黒</string>\n    <string name=\"manga_interval_expected_update_null\">このマンガは完結しているか、あるいは発売予定日が決まっていない。</string>\n    <string name=\"file_picker_uri_permission_unsupported\">永続フォルダアクセスの取得に失敗しました。 アプリが予期しない動作をする可能性があります。</string>\n    <string name=\"action_copy_link\">リンクをコピーする</string>\n    <string name=\"extensionRepo_settings\">拡張機能リポジトリ</string>\n    <string name=\"invalid_backup_file_json\">JSONバックアップはサポートされていません</string>\n    <string name=\"invalid_backup_file_unknown\">バックアップファイルが壊れている</string>\n    <string name=\"trackers_updated_summary\">トラッカーが章 %d に更新されました</string>\n    <string name=\"action_sort_random\">ランダム</string>\n    <string name=\"onboarding_permission_crashlytics_description\">匿名化されたクラッシュ ログを開発者に送信します。</string>\n    <string name=\"onboarding_permission_analytics\">分析を許可する</string>\n    <string name=\"pref_security\">安全</string>\n    <string name=\"pref_firebase\">分析とクラッシュログ</string>\n    <string name=\"pref_download_new_unread_chapters_only\">重複して読んだ章のダウンロードをスキップする</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">既読としてマークされた場合の更新の進行状況</string>\n    <string name=\"non_library_settings\">すべての既読エントリ</string>\n    <string name=\"onboarding_permission_crashlytics\">クラッシュログを送信する</string>\n    <string name=\"onboarding_permission_analytics_description\">アプリの機能を向上させるために、匿名化された使用状況データを送信します。</string>\n    <string name=\"firebase_summary\">クラッシュ ログと分析を送信することで、問題を特定して修正し、パフォーマンスを向上させ、今後のアップデートを貴方のニーズに合わせたものにすることができます</string>\n    <string name=\"ext_remove\">取り除く</string>\n    <string name=\"ext_confirm_remove\">拡張機能を削除しますか?</string>\n    <string name=\"remove_private_extension_message\">本当に\\\"%s\\\"拡張機能を削除しますか？</string>\n    <string name=\"add_repo_confirmation\">リポジトリ\\\"%s\\\"を追加しますか？</string>\n    <string name=\"confirm_tracker_update\">トラッカーを章 %d に更新しますか？</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">パフォーマンスに影響する。 ビットマップのしきい値を下げてもブランク画像の問題が解決しない場合のみ有効にしてください。</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">デフォルト (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold\">カスタム・ハードウェア・ビットマップ閾値</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">リーダが空の画像を読み込んだ場合は、しきい値を徐々に下げてください。\\n選択されました: %s</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/jv/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d dinten kala-wingi</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">Sawise %1$s menit</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d kategori</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"other\">%1$d dino engkas</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">Lanjut %d chapter sing gorong diwoco</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">Mari kurang %1$s karo %2$s error</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">Kurang %1$s</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/jv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"update_check_notification_download_in_progress\">Ndonlot…</string>\n    <string name=\"update_check_confirm\">Donlot</string>\n    <string name=\"track_type\">Jinis</string>\n    <string name=\"title\">Judhul</string>\n    <string name=\"no_chapters_error\">Ora ditemokake bab</string>\n    <string name=\"manga_download\">Donlot</string>\n    <string name=\"display_mode_chapter\">bab %1$s</string>\n    <string name=\"other_source\">Liyane</string>\n    <string name=\"password\">Sandhi</string>\n    <string name=\"username\">Jeneng pangguna</string>\n    <string name=\"version\">Versi</string>\n    <string name=\"pref_dns_over_https\">DNS liwat HTTPS</string>\n    <string name=\"disabled\">Dipateni</string>\n    <string name=\"color_filter_a_value\">T</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_g_value\">I</string>\n    <string name=\"color_filter_r_value\">A</string>\n    <string name=\"double_tap_anim_speed_fast\">Cepet</string>\n    <string name=\"zoom_start_right\">Nengen</string>\n    <string name=\"zoom_start_left\">Ngiwa</string>\n    <string name=\"right_to_left_viewer\">Nengen moro ngiwa</string>\n    <string name=\"left_to_right_viewer\">Ngiwa moro nengen</string>\n    <string name=\"nav_zone_right\">Nengen</string>\n    <string name=\"nav_zone_left\">Ngiwa</string>\n    <string name=\"black_background\">Ireng</string>\n    <string name=\"gray_background\">Klawu</string>\n    <string name=\"white_background\">Putih</string>\n    <string name=\"pref_fullscreen\">Layar wutuh</string>\n    <string name=\"all\">Kabeh</string>\n    <string name=\"charging\">Pas ngisi daya</string>\n    <string name=\"update_weekly\">Saben minggu</string>\n    <string name=\"update_48hour\">Saben 2 dina</string>\n    <string name=\"update_24hour\">Saben dina</string>\n    <string name=\"update_12hour\">Saben 12 jam</string>\n    <string name=\"update_6hour\">Saben 6 jam</string>\n    <string name=\"landscape\">Lansekap</string>\n    <string name=\"portrait\">Potret</string>\n    <string name=\"pref_category_display\">Tampilan</string>\n    <string name=\"pref_date_format\">Format tanggal</string>\n    <string name=\"theme_dark\">Murup</string>\n    <string name=\"theme_light\">Mati</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"pref_category_downloads\">Donlot</string>\n    <string name=\"action_webview_back\">Bali</string>\n    <string name=\"action_open_log\">Mbukak log</string>\n    <string name=\"action_save\">Simpen</string>\n    <string name=\"action_move_to_bottom\">Pindhah paling ngisor</string>\n    <string name=\"action_move_to_top\">Pindhah paling ndhuwur</string>\n    <string name=\"action_oldest\">Paling lawas</string>\n    <string name=\"action_newest\">Paling anyar</string>\n    <string name=\"action_disable\">Pateni</string>\n    <string name=\"action_display_list\">Dhaptar</string>\n    <string name=\"action_open_in_web_view\">Bukak ing WebView</string>\n    <string name=\"action_open_in_browser\">Bukak ing browser</string>\n    <string name=\"action_retry\">Jajal maneh</string>\n    <string name=\"action_next_chapter\">Bab sabanjure</string>\n    <string name=\"action_previous_chapter\">Bab sadurunge</string>\n    <string name=\"action_view_chapters\">Ndeleng bab</string>\n    <string name=\"action_rename_category\">Ganti jeneng kategori</string>\n    <string name=\"action_edit_categories\">Sunting kategori</string>\n    <string name=\"action_add_category\">Tambah kategori</string>\n    <string name=\"action_add\">Tambah</string>\n    <string name=\"action_edit\">Sunting</string>\n    <string name=\"action_disable_all\">Pateni kabeh</string>\n    <string name=\"action_enable_all\">Aktifke kabeh</string>\n    <string name=\"action_delete\">Mbusak</string>\n    <string name=\"action_download\">Donlot</string>\n    <string name=\"action_select_inverse\">Pilih kuwalik</string>\n    <string name=\"action_select_all\">Pilih kabeh</string>\n    <string name=\"action_search_settings\">Golek setting</string>\n    <string name=\"action_search\">Golek</string>\n    <string name=\"action_sort_date_added\">Tanggal ditambahke</string>\n    <string name=\"action_sort_latest_chapter\">Bab paling anyar</string>\n    <string name=\"action_sort_total\">Total bab</string>\n    <string name=\"action_sort_alpha\">Miturut abjad</string>\n    <string name=\"action_filter_unread\">Durung kewoco</string>\n    <string name=\"action_filter\">Saringan</string>\n    <string name=\"action_settings\">Pengaturan</string>\n    <string name=\"history\">Sejarah</string>\n    <string name=\"categories\">Kategori</string>\n    <string name=\"information_no_recent\">Ora ono updetan anyar</string>\n    <string name=\"information_no_downloads\">Ora ono donlotan</string>\n    <string name=\"label_help\">Nulungi</string>\n    <string name=\"label_extension_info\">Info Ekstensi</string>\n    <string name=\"label_extensions\">Ekstensi</string>\n    <string name=\"label_migration\">Pindah</string>\n    <string name=\"label_backup\">Serep lan mulihake</string>\n    <string name=\"label_sources\">Sumber</string>\n    <string name=\"label_recent_manga\">Sejarah</string>\n    <string name=\"label_recent_updates\">Nganyari</string>\n    <string name=\"label_library\">Perpustakaan</string>\n    <string name=\"label_download_queue\">Antrian Donlot</string>\n    <string name=\"label_settings\">Setelan</string>\n    <string name=\"label_more\">Liyane</string>\n    <string name=\"name\">Jeneng</string>\n    <string name=\"manga\">Entri perpustakaan</string>\n    <string name=\"download_notifier_download_paused\">Donlotan mandheg</string>\n    <string name=\"download_notifier_downloader_title\">Donloder</string>\n    <string name=\"channel_complete\">Komplit</string>\n    <string name=\"information_no_recent_manga\">durung maca apa apa</string>\n    <string name=\"action_pause\">Jeda</string>\n    <string name=\"action_edit_cover\">Nyunting sampul</string>\n    <string name=\"action_move_category\">Ngatur kategori</string>\n    <string name=\"action_update_library\">Nganyari perpustakaan</string>\n    <string name=\"action_remove_bookmark\">Ngilangi penunjuk bab</string>\n    <string name=\"action_bookmark\">Penujuk bab</string>\n    <string name=\"action_mark_previous_as_read\">Tandai sadurunge dadi diwaca</string>\n    <string name=\"action_mark_as_unread\">Tandai dadi durung diwaca</string>\n    <string name=\"action_mark_as_read\">Tandai dadi diwaca</string>\n    <string name=\"action_global_search\">Penggolekan global</string>\n    <string name=\"action_sort_chapter_fetch_date\">Tanggal njupuk chapter</string>\n    <string name=\"action_sort_last_read\">Terakhir di waca</string>\n    <string name=\"action_filter_empty\">Ngilangno saringan</string>\n    <string name=\"action_filter_tracked\">Kelacak</string>\n    <string name=\"action_filter_bookmarked\">Diwenehi tandha</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"track\">Ngelacak</string>\n    <string name=\"chapters\">Bab</string>\n    <string name=\"information_empty_category\">Sampeyan ora duwe kategori. Dhemok tombol tambah kanggo nggawe siji kategori kanggo ngatur perpustakaane sampeyan.</string>\n    <string name=\"information_empty_library\">Koleksine sampeyan kosong</string>\n    <string name=\"pref_category_about\">Babagan</string>\n    <string name=\"pref_category_advanced\">Majeng</string>\n    <string name=\"pref_category_tracking\">Ngelacak</string>\n    <string name=\"pref_category_reader\">Pamaca</string>\n    <string name=\"pref_category_library\">Koleksi</string>\n    <string name=\"pref_category_appearance\">Tampilan</string>\n    <string name=\"pref_category_general\">Umum</string>\n    <string name=\"app_not_available\">Aplikasi ora ono</string>\n    <string name=\"loading\">Ngemot…</string>\n    <string name=\"action_start_downloading_now\">Wiwiti ngunduh saiki</string>\n    <string name=\"action_webview_refresh\">Segerke</string>\n    <string name=\"action_webview_forward\">Maju</string>\n    <string name=\"action_restore\">Pulihke</string>\n    <string name=\"action_show_errors\">Klik gae Inpo luwih lanjut</string>\n    <string name=\"action_undo\">Baleni</string>\n    <string name=\"action_reset\">Balekke</string>\n    <string name=\"action_share\">Bagi</string>\n    <string name=\"action_install\">Pasang</string>\n    <string name=\"action_desc\">Mudun</string>\n    <string name=\"action_asc\">Munggah</string>\n    <string name=\"action_order_by_upload_date\">Miturut tanggal unggah</string>\n    <string name=\"action_order_by_chapter_number\">Miturut nomer bab</string>\n    <string name=\"action_sort\">Urutke</string>\n    <string name=\"cancel_all_for_series\">Batalke kabeh seri iki</string>\n    <string name=\"action_cancel_all\">Batalke kabeh</string>\n    <string name=\"action_cancel\">Batalke</string>\n    <string name=\"action_unpin\">Copot pin</string>\n    <string name=\"action_pin\">Pin</string>\n    <string name=\"action_display_show_number_of_items\">Tampilaken jumlah item</string>\n    <string name=\"action_display_show_tabs\">Tampilaken tab kategori</string>\n    <string name=\"action_display_local_badge\">Lokal manga</string>\n    <string name=\"action_display_download_badge\">Chapter downloadan</string>\n    <string name=\"action_display_comfortable_grid\">Kothak penak</string>\n    <string name=\"action_display_grid\">Kothak kompak</string>\n    <string name=\"action_display\">Tampilan</string>\n    <string name=\"action_display_mode\">Mode tampilan</string>\n    <string name=\"action_migrate\">Migrasi</string>\n    <string name=\"action_resume\">Teruske</string>\n    <string name=\"action_start\">Mulai</string>\n    <string name=\"action_remove\">Hapus</string>\n    <string name=\"action_sort_count\">Total entri</string>\n    <string name=\"confirm_lock_change\">Otentikasi kanggo konfirmasi perubahan</string>\n    <string name=\"label_default\">Default</string>\n    <string name=\"action_show_manga\">Nampilno manga</string>\n    <string name=\"label_warning\">Awas</string>\n    <string name=\"action_display_language_badge\">basa</string>\n    <string name=\"action_close\">Tutup</string>\n    <string name=\"restrictions\">Batesan: %s</string>\n    <string name=\"pref_update_only_non_completed\">Karo status \\\"Rampung\\\"</string>\n    <string name=\"action_display_cover_only_grid\">Kothak sampul</string>\n    <string name=\"theme_system\">Tumuti sistem</string>\n    <string name=\"pref_app_theme\">Tema aplikasi</string>\n    <string name=\"theme_monet\">Dinamis</string>\n    <string name=\"theme_greenapple\">Ijo apel</string>\n    <string name=\"parental_controls_info\">Iki ora nyegah ekstensi kang ora resmi utawa salah dilabeli kanggo nampilake konten NSFW (18+) ing aplikasi.</string>\n    <string name=\"relative_time_today\">Dinten puniki</string>\n    <string name=\"update_never\">Mati</string>\n    <string name=\"pref_category_security\">Kaamanan</string>\n    <string name=\"lock_always\">Tansah</string>\n    <string name=\"pref_category_nsfw_content\">Sumber NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Tampilaken ing sumber lan dhaptar ekstensi</string>\n    <string name=\"pref_update_only_completely_read\">Karo bab durung diwaca</string>\n    <string name=\"pref_manage_notifications\">Kelola notifikasi</string>\n    <string name=\"secure_screen_summary\">Amanaken layar sembunikan konten aplikasi wektu ngaleh aplikasi lan blokir tangkapan layar</string>\n    <string name=\"theme_midnightdusk\">Surup wengi</string>\n    <string name=\"lock_when_idle\">Kunci wektu meneng</string>\n    <string name=\"action_move_to_top_all_for_series\">Pindah seri mendhuwur</string>\n    <string name=\"theme_strawberrydaiquiri\">Stroberi Daiquiri</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_yinyang\">Yin lan Yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Mode ireng banget</string>\n    <string name=\"hide_notification_content\">Umpetake konten notifikasi</string>\n    <string name=\"secure_screen\">Amanaken layar</string>\n    <string name=\"update_72hour\">Saben 3 dinten</string>\n    <string name=\"connected_to_wifi\">Namung ing Wi-Fi</string>\n    <string name=\"ext_untrusted\">Ora kapracaya</string>\n    <string name=\"pref_update_only_started\">Iku durung diwiwiti</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">periksa sampul lan rinci anyar wektu memerbarui pustaka</string>\n    <string name=\"default_category\">kategori gawan</string>\n    <string name=\"include\">Kalebu: %s</string>\n    <string name=\"exclude\">Kajaba: %s</string>\n    <string name=\"ext_updates_pending\">Nganyari tertunda</string>\n    <string name=\"ext_update\">Nganyari</string>\n    <string name=\"ext_update_all\">Nganyari kabeh</string>\n    <string name=\"ext_install\">pasang</string>\n    <string name=\"ext_installed\">Ngetrap</string>\n    <string name=\"ext_trust\">Pracaya</string>\n    <string name=\"untrusted_extension\">Ekstensi ora kapracaya</string>\n    <string name=\"default_category_summary\">Tansah takon</string>\n    <string name=\"pref_show_page_number\">Tampilake nomer halaman</string>\n    <string name=\"pref_inverted_colors\">Kuwalik</string>\n    <string name=\"pref_show_reading_mode\">Tampilake mode maca</string>\n    <string name=\"right_and_left_nav\">Tengen lan Kiwa</string>\n    <string name=\"ext_installing\">Masang</string>\n    <string name=\"pref_library_columns\">Item saben baris</string>\n    <string name=\"lock_never\">ora tau</string>\n    <string name=\"ext_uninstall\">Ucul</string>\n    <string name=\"obsolete_extension_message\">Ekstensi iki ora kasedhiya maneh.</string>\n    <string name=\"extension_api_error\">Gagal kanggo entuk dhaptar ekstensi</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">Sumber saka ekstensi iki bisa ngemot konten NSFW (18+)</string>\n    <string name=\"ext_install_service_notif\">Masang ekstensi…</string>\n    <string name=\"ext_installer_pref\">Pemasang</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ora lumaku</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Pasang lan wiwit Shizuku kanggo migunakake Shizuku dadi pemasang ekstensi.</string>\n    <string name=\"tapping_inverted_none\">Ora</string>\n    <string name=\"tapping_inverted_both\">Kaping duane</string>\n    <string name=\"pref_reader_theme\">Werna latar</string>\n    <string name=\"kindlish_nav\">Kaya Kindle</string>\n    <string name=\"edge_nav\">Tepi</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Walik tombol volume</string>\n    <string name=\"pref_cutout_short\">Tampilake konten di wilayah kang terpotong</string>\n    <string name=\"pref_skip_read_chapters\">Lewati bab dithandani kawaca</string>\n    <string name=\"pref_read_with_volume_keys\">Tombol volume</string>\n    <string name=\"l_nav\">Wangun L</string>\n    <string name=\"action_sort_last_manga_update\">Priksa nganyari pungkasan</string>\n    <string name=\"action_sort_unread_count\">Total gak diwoco</string>\n    <string name=\"pref_category_library_update\">Updatean umum</string>\n    <string name=\"pref_library_update_interval\">Updatean otomatis</string>\n    <string name=\"lock_with_biometrics\">Mbutuhake mbukak kunci</string>\n    <string name=\"pref_library_update_refresh_metadata\">Nganyari metadata otomatis</string>\n    <string name=\"network_not_metered\">Jaringan gak kebates tok</string>\n    <string name=\"pref_app_language\">Bohoso aplikasi</string>\n    <string name=\"untrusted_extension_message\">Ekstensi iki ditandatangani nganggo sertifikat sing ora dipercaya lan ora diaktifake.\n\\n\n\\n Ekstensi angkoro bisa maca kredensial login sing disimpen ing Mihon utawa nglakokake kode sewenang-wenang.\n\\n\n\\n Kanthi percaya karo sertifikat iki, sampeyan nampa risiko kasebut.</string>\n    <string name=\"ext_downloading\">Ndownload</string>\n    <string name=\"pref_show_navigation_mode\">Tampilake overlay zona tutul</string>\n    <string name=\"pref_library_update_categories_details\">Manga ing kategori sing ora kalebu ora bakal dianyari sanajan uga ana ing kategori sing kalebu.</string>\n    <string name=\"none\">Ora ono</string>\n    <string name=\"ext_pending\">Ketunda</string>\n    <string name=\"ext_info_version\">Versine</string>\n    <string name=\"ext_info_language\">Bohoso</string>\n    <string name=\"ext_info_age_rating\">Rating umur</string>\n    <string name=\"ext_app_info\">Infone aplikasi</string>\n    <string name=\"pref_show_navigation_mode_summary\">Tampilake kanthi ringkes nalika maca dibukak</string>\n    <string name=\"pref_dual_page_split\">Pamisahan kaca kaping pindho</string>\n    <string name=\"pref_library_update_restriction\">Nganyari otomatis watesan piranti</string>\n    <string name=\"categorized_display_settings\">Setelan saben kategori kanggo ngurutake lan tampilan</string>\n    <string name=\"delete_category_confirmation\">Apa sampeyan pengin mbusak kategori \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Busak kategori</string>\n    <string name=\"pref_show_reading_mode_summary\">Tampilake mode saiki kanthi ringkes nalika maca dibukak</string>\n    <string name=\"internal_error\">InternalError: Priksa log kacilakan kanggo informasi luwih lengkap</string>\n    <string name=\"on\">Morop</string>\n    <string name=\"theme_lavender\">Lavender</string>\n    <string name=\"pref_crop_borders\">Ketok pinggiran</string>\n    <string name=\"pref_dual_page_invert\">Ganti panggonan pamisah kaca kaping pindho</string>\n    <string name=\"pref_dual_page_invert_summary\">Yen panggonan pamisah kaca dobel ora cocog karo arah maca</string>\n    <string name=\"off\">Mati</string>\n    <string name=\"pref_custom_brightness\">Padhang khusus</string>\n    <string name=\"pref_page_transitions\">Animasi transisi kaca</string>\n    <string name=\"pref_double_tap_anim_speed\">Kacepetan animasi tutul kaping pindho</string>\n    <string name=\"pref_read_with_tapping_inverted\">Walik zona tutul</string>\n    <string name=\"tapping_inverted_horizontal\">Horisontal</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Nggawe folder miturut judhul manga</string>\n    <string name=\"filter_mode_overlay\">Numpuki</string>\n    <string name=\"filter_mode_screen\">Layar</string>\n    <string name=\"pref_reader_navigation\">Pandhu arah</string>\n    <string name=\"vertical_viewer\">Vertikal</string>\n    <string name=\"filter_mode_darken\">Ngobong / peteng</string>\n    <string name=\"filter_mode_lighten\">Nangkis / Padang</string>\n    <string name=\"pref_skip_filtered_chapters\">Skip bab sing disaring</string>\n    <string name=\"pref_grayscale\">Grayscale</string>\n    <string name=\"tapping_inverted_vertical\">Vertikal</string>\n    <string name=\"automatic_background\">Otomatis</string>\n    <string name=\"pref_viewer_type\">Mode maca standar</string>\n    <string name=\"nav_zone_prev\">Sakdurunge</string>\n    <string name=\"nav_zone_next\">Lanjut</string>\n    <string name=\"vertical_plus_viewer\">Vertikal sakteruse</string>\n    <string name=\"disabled_nav\">Dipateni</string>\n    <string name=\"pref_custom_color_filter\">Filter warna khusus</string>\n    <string name=\"pref_color_filter_mode\">Mode campuran filter warna</string>\n    <string name=\"pref_keep_screen_on\">Layar urip terus</string>\n    <string name=\"pref_reader_actions\">Aksi</string>\n    <string name=\"pref_read_with_long_tap\">Tampilake ing tunyuk dawa</string>\n    <string name=\"pref_create_folder_per_manga\">Simpen kaca menyang folder sing kapisah</string>\n    <string name=\"label_stats\">Statistik</string>\n    <string name=\"label_local\">Lokal</string>\n    <string name=\"label_started\">Diwiwiti</string>\n    <string name=\"label_downloaded\">Diundhuh</string>\n    <string name=\"action_search_hint\">Telusuri…</string>\n    <string name=\"delete_downloaded\">Ngehapus downloadan</string>\n    <string name=\"selected\">Dipilih</string>\n    <string name=\"not_selected\">Gak dipilih</string>\n    <string name=\"action_menu_overflow_description\">Pilihan liane</string>\n    <string name=\"label_data_storage\">Data lan penyimpanan</string>\n    <string name=\"label_upcoming\">Bakal muncul</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ka-rGE/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">ნაპოვნია გაფართოების განახლება</item>\n        <item quantity=\"other\">ნაპოვნია %d გაფართოების განახლება</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">თავები %1$s და კიდევ 1</item>\n        <item quantity=\"other\">თავები %1$s და კიდევ %2$d</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">ნაპოვნია ახალი თავი</item>\n        <item quantity=\"other\">ნაპოვნია %1$d ახალი თავი</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d ჩანაწერისთვის</item>\n        <item quantity=\"other\">%d ჩანაწერისთვის</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">1 თავი</item>\n        <item quantity=\"other\">%1$s თავი</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">დარჩა 1</item>\n        <item quantity=\"other\">დარჩა %1$s</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">დასრულების დრო %1$s. %2$s შეცდომა</item>\n        <item quantity=\"other\">დასრულების დრო %1$s. %2$s შეცდომა</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d კატეგორია</item>\n        <item quantity=\"other\">%d კატეგორიები</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">1 წუთის შემდეგ</item>\n        <item quantity=\"other\">%1$s წუთის შემდეგ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ka-rGE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">სახელი</string>\n    <string name=\"categories\">კატეგორიები</string>\n    <string name=\"manga\">ბიბლიოთეკის ჩანაწერები</string>\n    <string name=\"history\">ისტორია</string>\n    <string name=\"label_more\">მეტი</string>\n    <string name=\"label_settings\">პარამეტრები</string>\n    <string name=\"label_download_queue\">გადმოწერის რიგი</string>\n    <string name=\"label_library\">ბიბლიოთეკა</string>\n    <string name=\"label_recent_updates\">განახლებები</string>\n    <string name=\"label_recent_manga\">ისტორია</string>\n    <string name=\"label_help\">დახმარება</string>\n    <string name=\"action_settings\">პარამეტრები</string>\n    <string name=\"action_menu\">მენიუ</string>\n    <string name=\"action_filter\">ფილტრი</string>\n    <string name=\"action_filter_bookmarked\">ჩანიშნული</string>\n    <string name=\"action_filter_unread\">წაუკითხავი</string>\n    <string name=\"action_filter_empty\">ფილტრის წაშლა</string>\n    <string name=\"action_sort_alpha\">ანბანის მიხედვით</string>\n    <string name=\"action_sort_total\">თავების რაოდენობა</string>\n    <string name=\"action_sort_last_read\">ბოლოს წაკითხული</string>\n    <string name=\"action_sort_latest_chapter\">ბოლო თავი</string>\n    <string name=\"action_search\">ძებნა</string>\n    <string name=\"action_select_all\">ყველას მონიშვნა</string>\n    <string name=\"action_select_inverse\">მონიშვნის ინვერსია</string>\n    <string name=\"action_mark_as_read\">ყველას წაკითხულად მონიშვნა</string>\n    <string name=\"action_mark_as_unread\">ყველას წაუკითხავად მონიშვნა</string>\n    <string name=\"action_mark_previous_as_read\">წინას წაკითხულად მონიშვნა</string>\n    <string name=\"action_download\">გადმოწერა</string>\n    <string name=\"action_bookmark\">მონიშნული</string>\n    <string name=\"action_remove_bookmark\">მონიშვნის მოხსნა</string>\n    <string name=\"action_delete\">წაშლა</string>\n    <string name=\"action_update_library\">ბიბლიოთეკის განახლება</string>\n    <string name=\"action_edit\">რედაქტირება</string>\n    <string name=\"action_add\">დამატება</string>\n    <string name=\"action_add_category\">კატეგორიის დამატება</string>\n    <string name=\"action_edit_categories\">კატეგორიის რედაქტირება</string>\n    <string name=\"action_rename_category\">კატეგორიის სახელის ვცლილება</string>\n    <string name=\"action_view_chapters\">თავების ხილვა</string>\n    <string name=\"action_pause\">პაუზა</string>\n    <string name=\"action_previous_chapter\">წინა თავი</string>\n    <string name=\"action_next_chapter\">შემდეგი თავი</string>\n    <string name=\"action_retry\">თავიდან ცდა</string>\n    <string name=\"action_remove\">წაშლა</string>\n    <string name=\"action_resume\">გაგრძელება</string>\n    <string name=\"action_open_in_browser\">ბრაუზერში გახსნა</string>\n    <string name=\"action_open_in_web_view\">WebView-ში გახსნა</string>\n    <string name=\"action_display_mode\">ჩვენების რეჟიმი</string>\n    <string name=\"action_display\">ჩვენება</string>\n    <string name=\"action_display_grid\">კომპაქტური ბადე</string>\n    <string name=\"action_display_list\">სია</string>\n    <string name=\"action_display_comfortable_grid\">კომფორტული ბადე</string>\n    <string name=\"action_display_download_badge\">გადმოწერის ნიშნაკი</string>\n    <string name=\"action_display_show_tabs\">კატეგორიის ჩანართების ჩვენება</string>\n    <string name=\"action_cancel\">გააუქმე</string>\n    <string name=\"action_cancel_all\">გააუქმე ყველა</string>\n    <string name=\"action_sort\">დალაგება</string>\n    <string name=\"action_newest\">უახლესი</string>\n    <string name=\"action_oldest\">უძველესი</string>\n    <string name=\"action_move_to_top\">თავში ატანა</string>\n    <string name=\"action_move_to_bottom\">ბოლოში ჩამოტანა</string>\n    <string name=\"action_install\">დაინსტალირება</string>\n    <string name=\"action_share\">გაზიარება</string>\n    <string name=\"action_save\">შენახვა</string>\n    <string name=\"action_reset\">გადატვირთვა</string>\n    <string name=\"action_undo\">გაუქმება</string>\n    <string name=\"action_open_log\">ლოგის გახსნა</string>\n    <string name=\"action_restore\">აღდგენა</string>\n    <string name=\"action_webview_back\">უკან</string>\n    <string name=\"action_webview_forward\">წინ</string>\n    <string name=\"action_webview_refresh\">განახლება</string>\n    <string name=\"loading\">იტვირთება…</string>\n    <string name=\"app_not_available\">აპლიკაცია არ არის ხელმისაწვდომი</string>\n    <string name=\"pref_category_general\">ზოგადი</string>\n    <string name=\"pref_category_library\">ბიბლიოთეკა</string>\n    <string name=\"pref_category_reader\">წამკითხველი</string>\n    <string name=\"pref_category_downloads\">გადმოწერები</string>\n    <string name=\"pref_category_tracking\">თვალყურის დევნება</string>\n    <string name=\"pref_category_advanced\">დამატებით</string>\n    <string name=\"pref_category_about\">ინფორმაცია</string>\n    <string name=\"theme_system\">სისტემური</string>\n    <string name=\"theme_light\">მსუბუქი</string>\n    <string name=\"theme_dark\">ჩართული</string>\n    <string name=\"pref_date_format\">თარიღის ფორმატი</string>\n    <string name=\"pref_manage_notifications\">შეტყობინებების მართვა</string>\n    <string name=\"pref_category_security\">უსაფრთხოება და კონფიდენციალობა</string>\n    <string name=\"lock_with_biometrics\">განბლოკვის მოთხოვნა</string>\n    <string name=\"lock_when_idle\">ბლოკირება უმოქმედობის დროს</string>\n    <string name=\"lock_always\">ყოველთვის</string>\n    <string name=\"lock_never\">არასდროს</string>\n    <string name=\"secure_screen\">უსაფრთხოების ფანჯარა</string>\n    <string name=\"hide_notification_content\">შეტყობინების შიგთავსის დამალვა</string>\n    <string name=\"pref_category_display\">დისპლეი</string>\n    <string name=\"pref_library_columns\">ნივთები რიგში</string>\n    <string name=\"portrait\">პორტრეტი</string>\n    <string name=\"landscape\">პეიზაჟი</string>\n    <string name=\"pref_category_library_update\">განახლებები</string>\n    <string name=\"pref_library_update_interval\">ბიბლიოთეკის განახლების სიხშირე</string>\n    <string name=\"update_never\">ხელით</string>\n    <string name=\"update_6hour\">ყოველ 6 საათში</string>\n    <string name=\"update_12hour\">ყოველ 12 საათში</string>\n    <string name=\"update_24hour\">ყოველდღე</string>\n    <string name=\"update_48hour\">ყოველ 2 დღეში ერთხელ</string>\n    <string name=\"update_weekly\">ყოველ კვირა</string>\n    <string name=\"pref_library_update_restriction\">ბიბლიოთეკის განახლების შეზღუდვები</string>\n    <string name=\"charging\">იტენება</string>\n    <string name=\"pref_update_only_non_completed\">მხოლოდ განაახლე მიმდინარე მანგა</string>\n    <string name=\"pref_library_update_refresh_metadata\">ავტომატურად განაახლე მეტადატა</string>\n    <string name=\"label_migration\">მიგრაცია</string>\n    <string name=\"default_category\">ნაგულისხმევი კატეგორია</string>\n    <string name=\"default_category_summary\">ყოველთვის მკითხე</string>\n    <string name=\"all\">ყველა</string>\n    <string name=\"ext_update\">განაცლება</string>\n    <string name=\"ext_install\">დაინსტალირება</string>\n    <string name=\"ext_installing\">ინსტალირდება</string>\n    <string name=\"ext_installed\">დაისნტალირებული</string>\n    <string name=\"ext_downloading\">იტვირთება</string>\n    <string name=\"ext_pending\">მოლოდინში</string>\n    <string name=\"ext_uninstall\">წაშლა</string>\n    <string name=\"pref_fullscreen\">მთლიან ეკრანზე</string>\n    <string name=\"pref_cutout_short\">კონტენტის ჩვენება ჩამოჭრილ ადგილზე</string>\n    <string name=\"pref_page_transitions\">გვერდის გადასვლების ანიმირება</string>\n    <string name=\"pref_show_page_number\">გვერდის ნომრის ჩვენება</string>\n    <string name=\"pref_show_reading_mode\">კითხვის რეჟიმის ჩვენება</string>\n    <string name=\"pref_show_reading_mode_summary\">მოკლედ აჩვენე ახლანდელი რეჟიმი როცა მკითხველი გახსნილია</string>\n    <string name=\"pref_crop_borders\">კუთხეების ჩამოჭრა</string>\n    <string name=\"filter_mode_multiply\">გაამრავლე</string>\n    <string name=\"filter_mode_screen\">ეკრანი</string>\n    <string name=\"filter_mode_lighten\">განათება</string>\n    <string name=\"filter_mode_darken\">დაბნელება</string>\n    <string name=\"pref_keep_screen_on\">დატოვე ეკრანი ანთებული</string>\n    <string name=\"pref_skip_read_chapters\">გამოტოვე წაკითხული თავები</string>\n    <string name=\"pref_skip_filtered_chapters\">გამოტოვე გაფილტრული თავები</string>\n    <string name=\"pref_reader_navigation\">ნავიგაცია</string>\n    <string name=\"pref_read_with_volume_keys\">ხმის კლავიშები</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">ხმის კლავიშების ფუნქციების გაცვლა</string>\n    <string name=\"pref_reader_theme\">ფონის ფერი</string>\n    <string name=\"white_background\">თეთრი</string>\n    <string name=\"gray_background\">ნაცრისფერი</string>\n    <string name=\"black_background\">შავი</string>\n    <string name=\"pref_viewer_type\">ნაგულისხმევი კითხვის რეჟიმი</string>\n    <string name=\"left_to_right_viewer\">მარცხნიდან მარჯვნივ</string>\n    <string name=\"right_to_left_viewer\">მარჯვნიდან მარცხნივ</string>\n    <string name=\"vertical_viewer\">ვერტიკალური</string>\n    <string name=\"vertical_plus_viewer\">ვერტიკალური განგრძობითი</string>\n    <string name=\"pref_image_scale_type\">სკალირების ტიპი</string>\n    <string name=\"scale_type_fit_screen\">ეკრანზე მორგება</string>\n    <string name=\"scale_type_stretch\">გაწელვა</string>\n    <string name=\"scale_type_fit_width\">სიგანეზე მორგება</string>\n    <string name=\"scale_type_fit_height\">სიმაღლეზე მორგება</string>\n    <string name=\"scale_type_original_size\">ორიგინალური ზომა</string>\n    <string name=\"scale_type_smart_fit\">ჭკვიანურად მორგება</string>\n    <string name=\"pref_zoom_start\">საწყისი პოზიციის დაზუმვა</string>\n    <string name=\"zoom_start_automatic\">ავტომატური</string>\n    <string name=\"zoom_start_left\">მარცხნივ</string>\n    <string name=\"zoom_start_right\">მარჯვნივ</string>\n    <string name=\"zoom_start_center\">შუაში</string>\n    <string name=\"double_tap_anim_speed_0\">ანიმაციის გარეშე</string>\n    <string name=\"double_tap_anim_speed_normal\">ნორმალური</string>\n    <string name=\"double_tap_anim_speed_fast\">სწარფი</string>\n    <string name=\"pref_rotation_type\">გადმოტრიალება</string>\n    <string name=\"rotation_free\">თავისუფალი</string>\n    <string name=\"rotation_force_portrait\">პორტრეტის რეჟიმი</string>\n    <string name=\"rotation_force_landscape\">პეიზაჟის რეჟიმი</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_always_show_chapter_transition\">ყოველთვის აჩვენე თავებს შორის გადასვლა</string>\n    <string name=\"pref_category_reading\">კითხვა</string>\n    <string name=\"pref_webtoon_side_padding\">ცარიელი არეა გვერდებზე</string>\n    <string name=\"pref_remove_after_marked_as_read\">წაშალე წაკითხულად მონიშვნის შემდეგ</string>\n    <string name=\"pref_remove_after_read\">წაკკითხვის შემდეგ წაშალე</string>\n    <string name=\"disabled\">გამორთული</string>\n    <string name=\"last_read_chapter\">ბოლო წაკითხული თავი</string>\n    <string name=\"second_to_last\">ბოლოს წინა წაკითხული თავი</string>\n    <string name=\"third_to_last\">ბოლოდან მესამე წაკითხული თავი</string>\n    <string name=\"fourth_to_last\">ბოლოდან მეოთხე წაკითხული თავი</string>\n    <string name=\"fifth_to_last\">ბოლოდან მეხუთე წაკითხული თავი</string>\n    <string name=\"pref_download_new\">გადმოწერე ახალი თავები</string>\n    <string name=\"services\">სერვისები</string>\n    <string name=\"pref_auto_update_manga_sync\">განაახლე თავის პროგრესი წაკითხვის შემდეგ</string>\n    <string name=\"pref_create_backup\">რეზერვის შექმნა</string>\n    <string name=\"pref_create_backup_summ\">შესაძლებელია გამოყენებულ იქნას ახლანდელი ბიბლიოთეკის ასადგენად</string>\n    <string name=\"pref_restore_backup\">რეზერვის აღდგენა</string>\n    <string name=\"pref_restore_backup_summ\">ბიბლიოთეკის აღდგენა რეზერვიდან</string>\n    <string name=\"pref_backup_interval\">რეზერვის შექმნის სიხშირე</string>\n    <string name=\"backup_created\">რეზერვი შექმნილია</string>\n    <string name=\"invalid_backup_file\">არასწორი სარეზერვო ფაილი</string>\n    <string name=\"invalid_backup_file_missing_manga\">მარქაფი ბიბლიოთეკის ჩანაწერებს არ შეიცავს.</string>\n    <string name=\"backup_restore_missing_sources\">დაკარგული წყაროები:</string>\n    <string name=\"restore_completed\">აღდგენა შესრულებულია</string>\n    <string name=\"restore_duration\">%1$02d წთ, %2$02d წმ</string>\n    <string name=\"backup_in_progress\">მარქაფი უკვე მიმდინარეობს</string>\n    <string name=\"backup_choice\">რას გსურს რომ შეუქმნა რეზერვი?</string>\n    <string name=\"creating_backup\">რეზერვის შექმნა</string>\n    <string name=\"creating_backup_error\">რეზერვის შექმნა ვერ მოხერხდა</string>\n    <string name=\"restore_in_progress\">აღდგენა უკვე მიმდინარეობს</string>\n    <string name=\"restoring_backup\">რეზერვის აღდგენა</string>\n    <string name=\"restoring_backup_error\">რეზერვის აღდგენა ვერ მოხერხდა</string>\n    <string name=\"restoring_backup_canceled\">აღდგენა გაუქმებულია</string>\n    <string name=\"label_data\">მონაცემები</string>\n    <string name=\"pref_clear_chapter_cache\">თავის ქეშის გასუფთავება</string>\n    <string name=\"used_cache\">გამოყენებულია: %1$s</string>\n    <string name=\"cache_deleted\">ქეში გასუფთავებულია. წაიშალა %1$d ფაილი</string>\n    <string name=\"cache_delete_error\">შსევდომა დაფიქსირდა ქეშის გასუფთავებისას</string>\n    <string name=\"pref_clear_cookies\">Cookie -ების გასუფთავება</string>\n    <string name=\"cookies_cleared\">Cookie -ები გასუფთავებულია</string>\n    <string name=\"pref_clear_database\">მონაცემთა ბაზის გასუფთავება</string>\n    <string name=\"pref_clear_database_summary\">ისტორიიდან წაიშლება ჩანაწერები, რომლებიც თქვენს ბიბლიოთეკაში არაა შენახული</string>\n    <string name=\"clear_database_confirmation\">დარწმუნებული ბრძანდებით? წაკითხული თავები და ბიბლიოთეკაში არ არსებული ჩანაწერების პროგრესი დაიკარგება</string>\n    <string name=\"clear_database_completed\">ჩანაწერები წაშლილია</string>\n    <string name=\"pref_refresh_library_covers\">ბიბლიოთეკის მანგების ყდის ცვლილება</string>\n    <string name=\"battery_optimization_disabled\">ელემენტის ოპტიმიზაცუა უკვე გამორთულია</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">ვერ მოხერხდა მოწყობილობის პარამეტრების გახსნა</string>\n    <string name=\"website\">ვებსაიტი</string>\n    <string name=\"version\">ვერსია</string>\n    <string name=\"check_for_updates\">განახლებების მოძებნა</string>\n    <string name=\"pref_enable_acra\">ქრეშის რეპორტის გაგზავნა</string>\n    <string name=\"pref_acra_summary\">ეხმარება შეცდომების გამოსწორებაში. სენსიტიური მონაცემები არ იქნება გაგზავნილი</string>\n    <string name=\"label_downloaded_only\">მხოლოდ გადმოწერილები</string>\n    <string name=\"downloaded_only_summary\">თქვენს ბიბლიოთეკაში ყველა ჩანაწერის გაფილტვრა</string>\n    <string name=\"login_title\">შესვლა %1$s-ში</string>\n    <string name=\"username\">მომხმარებლის სახელი</string>\n    <string name=\"email\">ელ. ფოსტა</string>\n    <string name=\"password\">პაროლი</string>\n    <string name=\"login\">შესვლა</string>\n    <string name=\"login_success\">შესულია</string>\n    <string name=\"logout_title\">გამოვიდე %1$s-დან?</string>\n    <string name=\"logout\">გამოსვლა</string>\n    <string name=\"logout_success\">გამოსვლა წარმატებით მოხერხდა</string>\n    <string name=\"unknown_error\">დაფიქსირდა უცნობი შეცდომა</string>\n    <string name=\"updating_category\">კატეგორია ახლდება</string>\n    <string name=\"tabs_header\">ჩანართები</string>\n    <string name=\"no_more_results\">შედეგების სიის დასასრული</string>\n    <string name=\"no_results_found\">შედეგი ვერ მოიძებნა</string>\n    <string name=\"local_source\">ლოცალური წყარო</string>\n    <string name=\"other_source\">სხვა</string>\n    <string name=\"last_used_source\">ბოლოს გამოყენებული</string>\n    <string name=\"action_global_search_hint\">გლობალური ძებნა…</string>\n    <string name=\"latest\">უკანასკნელი</string>\n    <string name=\"browse\">დათვალიერება</string>\n    <string name=\"ongoing\">მიმდინარე</string>\n    <string name=\"unknown\">უცნობი</string>\n    <string name=\"licensed\">ლიცენზირებული</string>\n    <string name=\"add_to_library\">ბიბლიოთეკაში დამატება</string>\n    <string name=\"in_library\">ბიბლიოთეკაშია</string>\n    <string name=\"remove_from_library\">ბიბლიოთეკიდან წაშლა</string>\n    <string name=\"manga_added_library\">დამატებულია ბიბლიოთეკაში</string>\n    <string name=\"manga_removed_library\">წაშლილია ბიბლიოთეკიდან</string>\n    <string name=\"manga_info_expand\">მეტი ინფორმაციის ჩვენება</string>\n    <string name=\"manga_info_collapse\">ნაკლები ინფორმაციის ჩვენება</string>\n    <string name=\"delete_downloads_for_manga\">წაიშალოს გადმოწერილი თავები?</string>\n    <string name=\"copied_to_clipboard\">დაკოპირებულია ბუფერში:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">წყარო არ არის დაინსტალირებული: %1$s</string>\n    <string name=\"snack_add_to_library\">დავამატო ბიბლიოთეკაში?</string>\n    <string name=\"display_mode_chapter\">თავი %1$s</string>\n    <string name=\"chapter_downloading_progress\">მიმდინარეობს გადმოწერა (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">შეცდომა</string>\n    <string name=\"chapter_paused\">დაპაუზებულია</string>\n    <string name=\"show_title\">წყაროს სათაური</string>\n    <string name=\"show_chapter_number\">თავის ნომერი</string>\n    <string name=\"sort_by_source\">წყაროს მიხედვით</string>\n    <string name=\"sort_by_number\">თავის ნომრის მიხედვით</string>\n    <string name=\"sort_by_upload_date\">თარიღის მიხედვით</string>\n    <string name=\"manga_download\">გადმოწერა</string>\n    <string name=\"download_unread\">წაუკითხავი</string>\n    <string name=\"confirm_delete_chapters\">დარწმუნებული ხართ რომ გსურთ არჩეული თავების წაშლა?</string>\n    <string name=\"manga_tracking_tab\">თვალტყურის დევნება</string>\n    <string name=\"add_tracking\">თვალი ადევნე</string>\n    <string name=\"reading\">ვკითხულობ</string>\n    <string name=\"completed\">შესრულებულია</string>\n    <string name=\"dropped\">გადაგდებული</string>\n    <string name=\"on_hold\">ლოდინის რეჟიმში</string>\n    <string name=\"paused\">დაპაუზებული</string>\n    <string name=\"plan_to_read\">ვგეგმავ წაკითხვას</string>\n    <string name=\"repeating\">თავიდან ვკითხულობ</string>\n    <string name=\"score\">შეფასება</string>\n    <string name=\"title\">სათაური</string>\n    <string name=\"status\">სტატუსი</string>\n    <string name=\"track_status\">სტატუსი</string>\n    <string name=\"track_type\">ტიპი</string>\n    <string name=\"error_category_exists\">კატეგორია მოცემული სახელით უკვე არსებობს!</string>\n    <string name=\"snack_categories_deleted\">კატეგორიები წაიშალა</string>\n    <string name=\"dialog_with_checkbox_remove_description\">ეს წაშლის ამ თავის წაკითხვის თარიღს. დარწმუნებული ხართ?</string>\n    <string name=\"picture_saved\">სურათი შენახულია</string>\n    <string name=\"chapter_progress\">გვერდი: %1$d</string>\n    <string name=\"no_next_chapter\">შემდეგი თავი ვერ მოიძებნა</string>\n    <string name=\"decode_image_error\">გამოსახულებსი ჩატვირთვის შეცდომა</string>\n    <string name=\"pref_category_for_this_series\">ამ სერიებისთვის</string>\n    <string name=\"viewer\">კითხვის რეჟიმი</string>\n    <string name=\"transition_finished\">დამთავრებულია:</string>\n    <string name=\"transition_current\">მიმდინარე:</string>\n    <string name=\"transition_next\">შემდეგი:</string>\n    <string name=\"transition_previous\">წინა:</string>\n    <string name=\"transition_no_next\">შემდეგი თავი არ არის</string>\n    <string name=\"transition_no_previous\">წინა თავი არ არის</string>\n    <string name=\"transition_pages_loading\">გვერდები იტვირთება…</string>\n    <string name=\"transition_pages_error\">გვერდების ჩატვირთვა ვერ მოხერხდა: %1$s</string>\n    <string name=\"page_list_empty_error\">ვერცერთი გვერდი ვერ მოიძევნა</string>\n    <string name=\"updating_library\">ბიბლიოთეკის განახლება</string>\n    <string name=\"recent_manga_time\">თავ. %1$s - %2$s</string>\n    <string name=\"migration_dialog_what_to_include\">ამოირჩიე მონაცემები შესაყვანად</string>\n    <string name=\"migration_selection_prompt\">ამოირჩიე წყარო საიდანაც გინდა მიგრაცია</string>\n    <string name=\"migrate\">მიგრაცია</string>\n    <string name=\"copy\">კოპირება</string>\n    <string name=\"download_queue_error\">ვერ მოხერხდა თავების გადმოწერა. შეგიძლია სცადო თავიდან გადმოწერების სექციაში</string>\n    <string name=\"notification_new_chapters\">ახალი თავები მოიძებნა</string>\n    <string name=\"notification_chapters_single\">თავი %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">თავი %1$s და %2$d მეტი</string>\n    <string name=\"notification_chapters_multiple\">თავები %1$s</string>\n    <string name=\"notification_cover_update_failed\">ვერ მოხერხდა ყდის განახლება</string>\n    <string name=\"notification_first_add_to_library\">გთხოვთ ჯერ დაამატოთ ჩანაწერი თქვენს ბიბლიოთეკაში</string>\n    <string name=\"file_select_cover\">ამოირჩიე ყდის სურათი</string>\n    <string name=\"file_select_backup\">ამოირჩიე რეზერვის ფაილი</string>\n    <string name=\"update_check_confirm\">გადმოწერა</string>\n    <string name=\"update_check_no_new_updates\">განახლება ვერ მოიძებნა</string>\n    <string name=\"update_check_notification_download_in_progress\">გადმოწერა…</string>\n    <string name=\"update_check_notification_download_complete\">განახლების დასაყენებლად დაატყაპუნეთ</string>\n    <string name=\"update_check_notification_download_error\">გადმოწერის შეცდომა</string>\n    <string name=\"update_check_notification_update_available\">ხელმისაწვდომია ახალი ვერსია!</string>\n    <string name=\"information_no_downloads\">გადმოწერები არ არის</string>\n    <string name=\"information_no_recent\">განახლებები არ არის</string>\n    <string name=\"information_empty_library\">თქვენი ბიბლიოთეკა ცარიელია</string>\n    <string name=\"download_notifier_text_only_wifi\">Wi-Fi კავშირი არ არის ხელმისაწვდომი</string>\n    <string name=\"download_notifier_no_network\">ინტერნეტთან კავშირი არ არის ხელმისაწვდომი</string>\n    <string name=\"download_notifier_download_paused\">გადმოწერა შეჩერებულია</string>\n    <string name=\"channel_common\">საერთო</string>\n    <string name=\"channel_new_chapters\">თავების განახლებები</string>\n    <string name=\"channel_ext_updates\">გავრცობის განახლებები</string>\n    <string name=\"chapters\">თავები</string>\n    <string name=\"track\">თვალყურის დევნება</string>\n    <string name=\"label_sources\">წყაროები</string>\n    <string name=\"label_backup\">რეზერვი</string>\n    <string name=\"label_extensions\">გავრცობები</string>\n    <string name=\"label_extension_info\">გავრცობის შესახებ</string>\n    <string name=\"action_global_search\">გლობალური ძებნა</string>\n    <string name=\"action_move_category\">კატეგორიების მინიჭება</string>\n    <string name=\"action_edit_cover\">ყდის რედაქტირება</string>\n    <string name=\"action_migrate\">მიგრაცია</string>\n    <string name=\"action_pin\">მიმაგრება</string>\n    <string name=\"action_unpin\">მიმაგრების მოხსნა</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">ბიბლიოთეკის განახლებისას მოძებნე ახალი ყდები და დეტალები</string>\n    <string name=\"ext_updates_pending\">განახლებები მოლოდინის რეჟიმშია</string>\n    <string name=\"ext_obsolete\">მოძველებული</string>\n    <string name=\"ext_trust\">ნდობა</string>\n    <string name=\"ext_untrusted\">არასანდო</string>\n    <string name=\"untrusted_extension\">არასანდო დამატება</string>\n    <string name=\"obsolete_extension_message\">დამატება ხელმისაწვდომი აღარაა. მან შეიძლება არასწორად იმუშაოს და აპლიკაციას პრობლემები შეუქმნას. გირჩევთ, წაშალოთ ის.</string>\n    <string name=\"pref_double_tap_anim_speed\">ორჯერ დაჭერისას ანიმაციის სისწრაფე</string>\n    <string name=\"pref_custom_brightness\">გამოიყენე პერსონალიზებული სიკაშკაშე</string>\n    <string name=\"pref_custom_color_filter\">გამოიყენე პერსონალიზებული ფერთა ფილტრი</string>\n    <string name=\"pref_color_filter_mode\">ფერთა ფილტრის შეხამების რეჟიმი</string>\n    <string name=\"pref_read_with_long_tap\">დიალოგი ხანგრძლივი დაჭერისას</string>\n    <string name=\"webtoon_viewer\">ვებ კომიქსი</string>\n    <string name=\"pager_viewer\">დანომრილი</string>\n    <string name=\"pref_disable_battery_optimization\">გამორთე ბატარეის ოპტიმიზაცია</string>\n    <string name=\"pref_disable_battery_optimization_summary\">ეხმარება უკანა ფონში მიმდინარე ბიბლიოთეკის განახლებებსდა რეზერვს</string>\n    <string name=\"licenses\">ღია კოდის ლიცენზია</string>\n    <string name=\"pinned_sources\">მიმაგრებული</string>\n    <string name=\"local_source_help_guide\">ლოკალური წყაროს გიდი</string>\n    <string name=\"dialog_with_checkbox_reset\">ამ ჩანაწერის ყველა თავის თავიდან წაკითხვა</string>\n    <string name=\"custom_filter\">პრესონიფიცირებული ფილტრი</string>\n    <string name=\"set_as_cover\">ყდად დაყენება</string>\n    <string name=\"cover_updated\">ყდა განახლდა</string>\n    <string name=\"confirm_set_image_as_cover\">გამოვიყენოთ ეს სურათი ყდის ნახატად?</string>\n    <string name=\"information_no_recent_manga\">ბოლო ხანებში არაფერი არ არის წაკითხული</string>\n    <string name=\"information_empty_category\">შენ არ გაქვს კატეგორიები, აირჩიე \\\"+\\\" ღილაკი რათა შექმნა ერთი, შენი ბიბლიოთეკის დასაორგანიზებლად.</string>\n    <string name=\"information_webview_required\">WebView არის აუცილებელი Mihon-ს სამუშაოდ</string>\n    <string name=\"information_webview_outdated\">გთხოვთ განაახლოთ WebView აპლიკაცია უკეთესი თავსებდობისთვის</string>\n    <string name=\"download_notifier_downloader_title\">გადმომწერი</string>\n    <string name=\"download_notifier_title_error\">შეცდომა</string>\n    <string name=\"download_notifier_unknown_error\">გაუთვალისწინებელი შეცდომის გამო თავის გადმოწერა ვერ მოხერხდა</string>\n    <string name=\"action_enable_all\">ჩართე ყველა</string>\n    <string name=\"action_disable_all\">გამორთე ყველა</string>\n    <string name=\"secure_screen_summary\">აპლიკაციებს შორის გადართვისას შემადგენლობის დამალვა და სკრინშოტების დაბლოკვა</string>\n    <string name=\"untrusted_extension_message\">ეს დამატება ხელმოწერილია უცნობი სერთიფიკატის მიერ და არ არის აქტივირებული.\n\\n\n\\nმავნე დამატებას შეუძლია წაიკითხოს შესვლის მონაცემები შენახული ამ აპლიკაციაში ან გაუშვას თავისი კოდი.\n\\n\n\\nამ სერტიფიკატის ნდობით თქვენ თქვენს თავზე იღებთ რისკებს და პასუხისმგებლობას.</string>\n    <string name=\"tracking_info\">ცალმხრივი სინქრონიზაცია თვალყურის სადევნებელ სერვისებში თავების პროგრესის განსაახლებლად. მიადევნე თვალყური ინდივიდუალურ ჩანაწერებს მათი ჩანართებიდან.</string>\n    <string name=\"filter_mode_overlay\">გადაფარება</string>\n    <string name=\"information_cloudflare_bypass_failure\">ვერ მოხერხდა CloudFlare-ს შემოვლა</string>\n    <string name=\"tapping_inverted_both\">ორივე</string>\n    <string name=\"tapping_inverted_vertical\">ვერტიკალური</string>\n    <string name=\"tapping_inverted_horizontal\">ჰორიზონტალური</string>\n    <string name=\"tapping_inverted_none\">არცერთი</string>\n    <string name=\"pref_read_with_tapping_inverted\">დაჭერის ინვერსია</string>\n    <string name=\"download_insufficient_space\">შეუძლებელია თავების გადმოწერა დისკზე ადგილის უკმარისობის გამო</string>\n    <string name=\"loader_not_implemented_error\">წყარო ვერ მოიძებნა</string>\n    <string name=\"unknown_status\">უცნობი სტატუსი</string>\n    <string name=\"unknown_author\">უცნობი ავტორი</string>\n    <string name=\"action_global_search_query\">მოიძებნოს \\\"%1$s\\\"-თვის გლობალურად</string>\n    <string name=\"updated_version\">განახლებულია v%1$s-მდე</string>\n    <string name=\"whats_new\">რა არის ახალი</string>\n    <string name=\"requires_app_restart\">ასამოქმედებლად საჭიროა აპლიკაციის გადატვირთვა</string>\n    <string name=\"label_network\">ქსელი</string>\n    <string name=\"pref_category_reading_mode\">კითხვის რეჟიმი</string>\n    <string name=\"pref_category_theme\">თემა</string>\n    <string name=\"action_disable\">გამორთვა</string>\n    <string name=\"action_start\">დაწყება</string>\n    <string name=\"action_sort_date_added\">დამატების თარიღი</string>\n    <string name=\"ext_nsfw_warning\">შეიძლება შეიჩაცდეს უცენზურო(18+) კონტენტს</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_remove_bookmarked_chapters\">მონიშნული თავების წაშლა</string>\n    <string name=\"pref_category_delete_chapters\">თავების წაშლა</string>\n    <string name=\"right_and_left_nav\">მარჯვენა და მარცხენა</string>\n    <string name=\"pref_dual_page_split\">განიერი გვერდების გაყოფა</string>\n    <string name=\"parental_controls_info\">ეს არ აღმოფხვრავს პროგრამაში NSFW (18+) შიგთავსის არაოფიციალურ, ან შესაძლო არასწორად მონიშნული გაფართოებებოიდან გამოჩენას.</string>\n    <string name=\"action_display_show_number_of_items\">საგნების რაოდენობის ჩვენება</string>\n    <string name=\"action_search_settings\">პარამეტრების ძიება</string>\n    <string name=\"action_start_downloading_now\">დაიწყე ჩამოტვირთვა</string>\n    <string name=\"theme_greenapple\">მწვანე ვაშლი</string>\n    <string name=\"theme_monet\">დინამიური</string>\n    <string name=\"pref_app_theme\">აპლიკაციის თემა</string>\n    <string name=\"label_warning\">გაფრთხილება</string>\n    <string name=\"confirm_lock_change\">აუთენტიკაცია ცვლილების დასადასტურებლად</string>\n    <string name=\"pref_category_appearance\">გარეგნობა</string>\n    <string name=\"label_default\">ნაგულისხმევი</string>\n    <string name=\"action_show_errors\">დააჭირე დეტალების სანახავად</string>\n    <string name=\"unread\">წაუკითხავი</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/kk/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Кеше</item>\n        <item quantity=\"other\">%1$d күн бұрын</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s минуттан кейін</item>\n        <item quantity=\"other\">%1$s минуттан кейін</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d санат</item>\n        <item quantity=\"other\">%d санаттар</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s дегеннен кейін %2$s қателікпен орындалды</item>\n        <item quantity=\"other\">%1$s дегеннен кейін %2$s қателікпен орындалды</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Келесі оқылмаған тарау</item>\n        <item quantity=\"other\">Келесі %d оқылмаған тарау</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s тарау қалды</item>\n        <item quantity=\"other\">%1$s тарау қалды</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d бақылау</item>\n        <item quantity=\"other\">%d бақылаулар</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s тарау</item>\n        <item quantity=\"other\">%1$s тарау</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">%1$s тарау және біреу</item>\n        <item quantity=\"other\">%1$s тарау мен %2$d</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді</item>\n        <item quantity=\"other\">Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d жаңа тарау</item>\n        <item quantity=\"other\">%1$d жаңа тарау</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Кеңейту үшін жаңарту бар</item>\n        <item quantity=\"other\">%d кеңейту үшін жаңарту бар</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d жазбасы үшін</item>\n        <item quantity=\"other\">%d жазбасы үшін</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Келесі тарау</item>\n        <item quantity=\"other\">Келесі %d тарау</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\"/>\n        <item quantity=\"other\">Жоқ %1$s тараулары</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Ертең</item>\n        <item quantity=\"other\">%1$d күнде</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/kk/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_settings\">Баптау</string>\n    <string name=\"label_download_queue\">Жүктеу кезегі</string>\n    <string name=\"label_library\">Кітапхана</string>\n    <string name=\"label_recent_updates\">Жаңартпа</string>\n    <string name=\"label_sources\">Дереккөз</string>\n    <string name=\"label_backup\">Сақтық көшірме</string>\n    <string name=\"label_extensions\">Кеңейтпе</string>\n    <string name=\"label_extension_info\">Кеңейтпе туралы</string>\n    <string name=\"label_help\">Көмек</string>\n    <string name=\"categories\">Санат</string>\n    <string name=\"manga\">Кітапханадағы топтама</string>\n    <string name=\"chapters\">Тарауы</string>\n    <string name=\"track\">Аңду</string>\n    <string name=\"label_migration\">Көшу</string>\n    <string name=\"label_default\">Әдепкі</string>\n    <string name=\"label_warning\">Ескертпе</string>\n    <string name=\"confirm_lock_change\">Өзгертуді растау үшін аутентификацияла</string>\n    <string name=\"action_menu\">Мәзір</string>\n    <string name=\"action_filter\">Сүзгі</string>\n    <string name=\"action_filter_bookmarked\">Бетбелгіленген</string>\n    <string name=\"right_to_left_viewer\">Бет (оңнан солға)</string>\n    <string name=\"vertical_viewer\">Беттік (тік)</string>\n    <string name=\"webtoon_viewer\">Ұзын жолақ</string>\n    <string name=\"scale_type_fit_screen\">Экранға сыйғыздыру</string>\n    <string name=\"scale_type_stretch\">Тарту</string>\n    <string name=\"information_no_downloads\">Жүктеулер жоқ</string>\n    <string name=\"information_no_recent\">Жаңа жаңартулар жоқ</string>\n    <string name=\"information_no_recent_manga\">Жақында ештеңе оқылмады</string>\n    <string name=\"information_empty_library\">Кітапханаңыз бос</string>\n    <string name=\"name\">Атауы</string>\n    <string name=\"label_more\">Тағы</string>\n    <string name=\"label_recent_manga\">Тарих</string>\n    <string name=\"history\">Тарих</string>\n    <string name=\"action_settings\">Баптау</string>\n    <string name=\"nav_zone_left\">Сол</string>\n    <string name=\"nav_zone_right\">Оң</string>\n    <string name=\"left_to_right_viewer\">Бет (солдан оңға қарай)</string>\n    <string name=\"information_empty_category\">Санаттарыңыз жоқ. Жаңа санат жасау үшін және кітапханаңызды ұйымдастыру үшін қосу батырмасын басыңыз.</string>\n    <string name=\"nav_zone_next\">Келесі</string>\n    <string name=\"action_sort_last_manga_update\">Соңғы жаңартпа тексеруі</string>\n    <string name=\"action_sort_unread_count\">Оқылмаған тарауы</string>\n    <string name=\"action_display_list\">Тізім</string>\n    <string name=\"action_display_download_badge\">Жүктелген тараулар</string>\n    <string name=\"secure_screen\">Қолданба экранын қорғау</string>\n    <string name=\"pref_app_theme\">Қолданба кейпі</string>\n    <string name=\"theme_monet\">Динамикалық</string>\n    <string name=\"theme_greenapple\">Жасыл Алма</string>\n    <string name=\"theme_midnightdusk\">Ымырт</string>\n    <string name=\"pref_category_tracking\">Аңду</string>\n    <string name=\"pref_category_about\">Ақпарат</string>\n    <string name=\"action_close\">Жабу</string>\n    <string name=\"pref_category_appearance\">Кейіп</string>\n    <string name=\"pref_category_library\">Кітапхана</string>\n    <string name=\"pref_category_reader\">Оқыма</string>\n    <string name=\"pref_category_downloads\">Жүктеулер</string>\n    <string name=\"pref_category_advanced\">Толығырақ</string>\n    <string name=\"pref_category_theme\">Кейіп</string>\n    <string name=\"theme_system\">Жүйе бойынша</string>\n    <string name=\"theme_light\">Өшірулі</string>\n    <string name=\"theme_dark\">Қосулы</string>\n    <string name=\"theme_strawberrydaiquiri\">Құлпынай Дайкири</string>\n    <string name=\"theme_tako\">Тако</string>\n    <string name=\"theme_yotsuba\">Йотсуба</string>\n    <string name=\"theme_tealturquoise\">Қызғылт пен жасыл</string>\n    <string name=\"pref_dark_theme_pure_black\">Қап-қараңғы режим</string>\n    <string name=\"theme_yinyang\">Инь мен Йянь</string>\n    <string name=\"relative_time_today\">Бүгін</string>\n    <string name=\"update_never\">Өшірулі</string>\n    <string name=\"update_6hour\">Әр 6 сағат сайын</string>\n    <string name=\"update_12hour\">Әр 12 сағат сайын</string>\n    <string name=\"update_24hour\">Күн сайын</string>\n    <string name=\"update_48hour\">Әр 2 күн сайын</string>\n    <string name=\"update_72hour\">Әр 3 күн сайын</string>\n    <string name=\"update_weekly\">Апта сайын</string>\n    <string name=\"pref_library_update_restriction\">Автоматты жаңартуларға құрылғы шектеулері</string>\n    <string name=\"connected_to_wifi\">Тек Wi-Fi болғанда</string>\n    <string name=\"charging\">Қуаттандыру кездінде</string>\n    <string name=\"restrictions\">Шектеулер: %s</string>\n    <string name=\"secure_screen_summary\">Қауіпсіз экран қолданбаларды ауыстырған кезде қолданба мазмұнын жасырады және скриншот жасауды бұғаттайды</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) дереккөздері</string>\n    <string name=\"pref_show_nsfw_source\">Дереккөздер мен кеңейтулер тізімінде көрсету</string>\n    <string name=\"parental_controls_info\">Бұл қолданбадағы NSFW (18+) мазмұнын көрсетуге бейресми немесе ықтимал қате белгіленген кеңейтулерге кедергі жасамайды.</string>\n    <string name=\"action_mark_as_read\">Оқылған деп белгілеу</string>\n    <string name=\"action_mark_as_unread\">Оқылмаған деп белгілеу</string>\n    <string name=\"action_mark_previous_as_read\">Алдыңғысын оқылған деп белгілеу</string>\n    <string name=\"action_filter_tracked\">Аңдулы</string>\n    <string name=\"action_filter_unread\">Оқылмаған</string>\n    <string name=\"action_filter_empty\">Сүзгіні алу</string>\n    <string name=\"action_sort_alpha\">Атауынша</string>\n    <string name=\"action_sort_count\">Түгел топтама</string>\n    <string name=\"action_sort_total\">Тарау санынша</string>\n    <string name=\"action_sort_last_read\">Соңғы оқылған</string>\n    <string name=\"action_sort_latest_chapter\">Соңғы тарау</string>\n    <string name=\"action_sort_chapter_fetch_date\">Тарау шыққаны бойынша</string>\n    <string name=\"action_sort_date_added\">Қосылған күні</string>\n    <string name=\"action_search\">Іздеу</string>\n    <string name=\"action_search_settings\">Баптау іздеу</string>\n    <string name=\"action_global_search\">Ауқымды іздеу</string>\n    <string name=\"action_select_all\">Түгелін таңдау</string>\n    <string name=\"action_download\">Жүктеп алу</string>\n    <string name=\"action_bookmark\">Тарауды бетбелгілеу</string>\n    <string name=\"action_remove_bookmark\">Тарау бетбелгісін өшіру</string>\n    <string name=\"action_delete\">Жою</string>\n    <string name=\"action_update_library\">Кітапхананы жаңарту</string>\n    <string name=\"action_select_inverse\">Керісінше таңдау</string>\n    <string name=\"action_display\">Бейнебет</string>\n    <string name=\"action_enable_all\">Түгелін қосу</string>\n    <string name=\"action_disable_all\">Түгелін өшіру</string>\n    <string name=\"action_edit\">Өңдеу</string>\n    <string name=\"action_add\">Қосу</string>\n    <string name=\"action_add_category\">Санат қосу</string>\n    <string name=\"action_edit_categories\">Санаттарды өңдеу</string>\n    <string name=\"action_rename_category\">Санаттың атын өзгерту</string>\n    <string name=\"action_move_category\">Санаттарды орнату</string>\n    <string name=\"action_edit_cover\">Мұқабасын өзгерту</string>\n    <string name=\"action_view_chapters\">Тарауларды қарау</string>\n    <string name=\"action_pause\">Тоқтату</string>\n    <string name=\"action_previous_chapter\">Алдыңғы тарау</string>\n    <string name=\"action_next_chapter\">Келесі тарау</string>\n    <string name=\"action_retry\">Қайталау</string>\n    <string name=\"action_remove\">Жою</string>\n    <string name=\"action_start\">Бастау</string>\n    <string name=\"action_open_in_browser\">Браузерде ашу</string>\n    <string name=\"action_show_manga\">Жазбаны көрсету</string>\n    <string name=\"action_open_in_web_view\">WebView-де ашу</string>\n    <string name=\"action_migrate\">Көшу</string>\n    <string name=\"action_display_mode\">Бейнебет режимі</string>\n    <string name=\"action_display_local_badge\">Локалды дереккөз</string>\n    <string name=\"action_display_language_badge\">Тіл</string>\n    <string name=\"action_display_show_tabs\">Санат қойындыларын көрсету</string>\n    <string name=\"action_display_show_number_of_items\">Элементтер санын көрсету</string>\n    <string name=\"action_disable\">Өшіру</string>\n    <string name=\"action_pin\">Бекіту</string>\n    <string name=\"action_unpin\">Ажырату</string>\n    <string name=\"action_cancel\">Болдырмау</string>\n    <string name=\"action_cancel_all\">Барлығын болдырмау</string>\n    <string name=\"cancel_all_for_series\">Осы туынды үшін барлығын болдырмау</string>\n    <string name=\"action_sort\">Сұрыптау</string>\n    <string name=\"action_order_by_upload_date\">Жүктелген күні бойынша</string>\n    <string name=\"action_order_by_chapter_number\">Тарау нөмірі бойынша</string>\n    <string name=\"action_newest\">Жаңарақ</string>\n    <string name=\"action_oldest\">Ескірек</string>\n    <string name=\"action_asc\">Артуы бойынша</string>\n    <string name=\"action_desc\">Кемуі бойынша</string>\n    <string name=\"action_move_to_top\">Басына оралу</string>\n    <string name=\"action_move_to_top_all_for_series\">Туындыны басына апару</string>\n    <string name=\"action_move_to_bottom\">Соңына бару</string>\n    <string name=\"action_install\">Орнату</string>\n    <string name=\"action_share\">Бөлісу</string>\n    <string name=\"action_save\">Сақтау</string>\n    <string name=\"action_reset\">Қалпына келтіру</string>\n    <string name=\"action_undo\">Болдырмау</string>\n    <string name=\"action_open_log\">Тіркеуді ашу</string>\n    <string name=\"action_show_errors\">Толық ақпарат алу үшін басыңыз</string>\n    <string name=\"action_restore\">Қалпына келтіру</string>\n    <string name=\"action_webview_back\">Артқа</string>\n    <string name=\"action_webview_forward\">Алға</string>\n    <string name=\"action_webview_refresh\">Жаңарту</string>\n    <string name=\"action_start_downloading_now\">Жүктеуді қазір бастау</string>\n    <string name=\"loading\">Жүктелуде…</string>\n    <string name=\"app_not_available\">Қолданба қолжетімсіз</string>\n    <string name=\"pref_category_general\">Жалпы</string>\n    <string name=\"pref_date_format\">Күн пішімі</string>\n    <string name=\"pref_manage_notifications\">Хабарландыруларды басқару</string>\n    <string name=\"pref_category_security\">Қауіпсіздік пен құпиялық</string>\n    <string name=\"lock_with_biometrics\">Құлыпты ашуды талап етеді</string>\n    <string name=\"lock_when_idle\">Әрекетсіз болғанда бұғаттау</string>\n    <string name=\"lock_always\">Әрдайым</string>\n    <string name=\"lock_never\">Ешқашан</string>\n    <string name=\"hide_notification_content\">Хабарландыру мазмұнын жасыру</string>\n    <string name=\"pref_library_columns\">Әр жолдағы элемент саны</string>\n    <string name=\"pref_category_display\">Көрсету</string>\n    <string name=\"portrait\">Портрет</string>\n    <string name=\"landscape\">Пейзаж</string>\n    <string name=\"pref_category_library_update\">Ауқымды жаңарту</string>\n    <string name=\"pref_library_update_interval\">Автоматты жаңартулар</string>\n    <string name=\"action_resume\">Жалғастыру</string>\n    <string name=\"pref_app_language\">Қолданба тілі</string>\n    <string name=\"default_category_summary\">Әрқашан сұраңыз</string>\n    <string name=\"default_category\">Әдепкі санат</string>\n    <string name=\"categorized_display_settings\">Сұрыптау және көрсету үшін әр санат баптауы</string>\n    <string name=\"ext_uninstall\">Жою</string>\n    <string name=\"ext_update\">Жаңарту</string>\n    <string name=\"ext_pending\">Күтілуде</string>\n    <string name=\"obsolete_extension_message\">Бұл кеңейту енді қолжетімсіз. Ол дұрыс жұмыс істемеуі немесе қолданбада ақаулық тудыруы мүмкін. Оны жойып тастауға кеңес береміз.</string>\n    <string name=\"ext_installer_pref\">Орнатушы</string>\n    <string name=\"ext_installer_legacy\">Әдепкі қалпы</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku қосылмаған</string>\n    <string name=\"pref_dual_page_invert_summary\">Қос бетті бөлу оқу бағытына сәйкес келмесе</string>\n    <string name=\"pref_show_reading_mode\">Оқу режимін көрсету</string>\n    <string name=\"on\">Қосулы</string>\n    <string name=\"ext_downloading\">Жүктелуде</string>\n    <string name=\"off\">Өшірулі</string>\n    <string name=\"pref_custom_brightness\">Өзгермелі жарықтық</string>\n    <string name=\"pref_grayscale\">Сұр реңктері</string>\n    <string name=\"pref_inverted_colors\">Төңкерілген</string>\n    <string name=\"pref_custom_color_filter\">Өзгермелі түс фильтрі</string>\n    <string name=\"network_not_metered\">Тек шексіз желіде</string>\n    <string name=\"ext_info_version\">Нұсқа</string>\n    <string name=\"ext_info_language\">Тіл</string>\n    <string name=\"ext_info_age_rating\">Жас рейтингі</string>\n    <string name=\"action_display_comfortable_grid\">Ыңғайлы кесте</string>\n    <string name=\"action_display_cover_only_grid\">Атаусыз кесте</string>\n    <string name=\"pref_library_update_refresh_metadata\">Метадеректерді автоматты түрде жаңарту</string>\n    <string name=\"pref_library_update_categories_details\">Шығарылған санаттардағы жазбалар енгізілген санаттарда болса да жаңартылмайды.</string>\n    <string name=\"all\">Барлығы</string>\n    <string name=\"none\">Ешқайсы</string>\n    <string name=\"exclude\">Шығару: %s</string>\n    <string name=\"include\">Қосу: %s</string>\n    <string name=\"ext_installing\">Орнатылуда</string>\n    <string name=\"ext_installed\">Орнатылды</string>\n    <string name=\"ext_trust\">Сенім</string>\n    <string name=\"ext_untrusted\">Сенімсіз</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizuku-ны кеңейту орнатушысы ретінде пайдалану үшін Shizuku-ны орнатып іске қосыңыз.</string>\n    <string name=\"pref_show_navigation_mode\">Түрту аймақтарының қабаттасуын көрсету</string>\n    <string name=\"pref_show_navigation_mode_summary\">Оқыма ашылғаннан кейін қысқаша көрсету</string>\n    <string name=\"pref_dual_page_split\">Қең беттерді бөлу</string>\n    <string name=\"pref_show_page_number\">Бет нөмірін көрсету</string>\n    <string name=\"pref_color_filter_mode\">Жарықты сүзу режимі</string>\n    <string name=\"pref_update_only_completely_read\">Тарауы оқылмаған топтаманы өткізе беру</string>\n    <string name=\"pref_update_only_non_completed\">«Аяқталған» күйімен</string>\n    <string name=\"pref_dual_page_invert\">Қос бетті бөлуді инверттеу</string>\n    <string name=\"action_display_grid\">Ықшам кесте</string>\n    <string name=\"pref_show_reading_mode_summary\">Оқыма ашылғаннан кейін оқу түрін қысқаша көрсету</string>\n    <string name=\"pref_crop_borders\">Кесу жиектері</string>\n    <string name=\"extension_api_error\">Кеңейтулер тізімін алу сәтсіз өтті</string>\n    <string name=\"pref_cutout_short\">Мазмұнды кесу аймағында көрсету</string>\n    <string name=\"pref_update_only_started\">Бұл басталған жоқ</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Кітапхананы жаңарту кезінде жаңа мұқаба мен мәліметтерді тексеру</string>\n    <string name=\"ext_updates_pending\">Жаңартулар күтілуде</string>\n    <string name=\"ext_update_all\">Барлығын жаңарту</string>\n    <string name=\"ext_obsolete\">Ескірген</string>\n    <string name=\"ext_install\">Орнату</string>\n    <string name=\"ext_app_info\">Қолданба туралы</string>\n    <string name=\"untrusted_extension\">Сенімсіз кеңейту</string>\n    <string name=\"untrusted_extension_message\">Бұл кеңейту сенімсіз сертификатпен қол қойылған және іске қосылмаған.\n\\n\n\\nЗиянды кеңейту Mihon-де сақталған кез келген кіру тіркелгі деректерін оқуы немесе еркін кодты орындауы мүмкін.\n\\n\n\\nОсы сертификатқа сену арқылы сіз осы қауіп-қатерді қабылдайсыз.</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">Бұл кеңейту дереккөзінде NSFW (18+) мазмұны болуы мүмкін</string>\n    <string name=\"ext_install_service_notif\">Кеңейту орнатылуда…</string>\n    <string name=\"pref_fullscreen\">Толық экранды</string>\n    <string name=\"pref_page_transitions\">Беттің ауысуын анимациялау</string>\n    <string name=\"pref_double_tap_anim_speed\">Қосарлы түрту анимация жылдамдығы</string>\n    <string name=\"in_library\">Кітапханада</string>\n    <string name=\"completed\">Аяқталған</string>\n    <string name=\"remove_from_library\">Кітапханадан жою</string>\n    <string name=\"pref_clear_history\">Тарихты тазалау</string>\n    <string name=\"download_notifier_title_error\">Қателік</string>\n    <string name=\"pref_category_reading\">Оқылуда</string>\n    <string name=\"recent_manga_time\">Тарау %1$s - %2$s</string>\n    <string name=\"pref_skip_read_chapters\">Оқылды деп белгіленген тарауларды өткізіп жіберу</string>\n    <string name=\"delete_category_confirmation\">«%s» деген санатты жойғыңыз келеді ме?</string>\n    <string name=\"delete_category\">Санатты жою</string>\n    <string name=\"internal_error\">Ішкі қателік: Қосымша ақпарат алу үшін қателіктер тіркеуін тексеріңіз</string>\n    <string name=\"theme_lavender\">Лаванда</string>\n    <string name=\"pref_skip_filtered_chapters\">Сүзілген тарауларлы өткізіп жіберу</string>\n    <string name=\"action_remove_everything\">Барлығын жою</string>\n    <string name=\"filter_mode_overlay\">Қабаттасу</string>\n    <string name=\"filter_mode_multiply\">Көбейту</string>\n    <string name=\"filter_mode_screen\">Экран</string>\n    <string name=\"pref_keep_screen_on\">Экранды қосулы ұстау</string>\n    <string name=\"pref_reader_navigation\">Шарлау</string>\n    <string name=\"zoom_start_left\">Сол</string>\n    <string name=\"right_and_left_nav\">Оң мен сол</string>\n    <string name=\"zoom_start_right\">Оң</string>\n    <string name=\"scale_type_fit_width\">Ені бойынша</string>\n    <string name=\"scale_type_original_size\">Бастапқы мөлшері</string>\n    <string name=\"rotation_reverse_portrait\">Кері портрет</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Бумаларды жазбалар атауына сәйкес жасау</string>\n    <string name=\"rotation_landscape\">Көлденең</string>\n    <string name=\"pref_webtoon_side_padding\">Бүйірлік шегініс</string>\n    <string name=\"color_filter_r_value\">Қ</string>\n    <string name=\"pref_landscape_zoom\">Кескінді көлденеңінен үлкейту</string>\n    <string name=\"pref_zoom_start\">Үлкейтудің бастапқы қалпы</string>\n    <string name=\"black_background\">Қара</string>\n    <string name=\"automatic_background\">Автоматты</string>\n    <string name=\"pref_reader_actions\">Әрекеттер</string>\n    <string name=\"pref_read_with_long_tap\">Ұзақ түртуде көрсету</string>\n    <string name=\"gray_background\">Сұр</string>\n    <string name=\"pref_viewer_type\">Әдепкі оқу режимі</string>\n    <string name=\"pref_highest\">Ең жоғары</string>\n    <string name=\"pref_remove_exclude_categories\">Саналмайтын санаттар</string>\n    <string name=\"pref_remove_after_marked_as_read\">Қолмен оқылған деп белгіленгеннен кейін</string>\n    <string name=\"pref_remove_after_read\">Оқығаннан кейін автоматты түрде жою</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Бетбелгіленген тарауларды жоюға рұқсат беру</string>\n    <string name=\"backup_restore_missing_sources\">Жоқ дереккөздер:</string>\n    <string name=\"save_chapter_as_cbz\">CBZ архивы ретінде сақтау</string>\n    <string name=\"label_data\">Дерек</string>\n    <string name=\"pref_clear_chapter_cache\">Тарау кешің тазалау</string>\n    <string name=\"disabled_nav\">Өшірулі</string>\n    <string name=\"label_network\">Желі</string>\n    <string name=\"cookies_cleared\">Куки тазартылды</string>\n    <string name=\"double_tap_anim_speed_normal\">Қалыпты</string>\n    <string name=\"pref_rotation_type\">Әдепкі айналу түрі</string>\n    <string name=\"rotation_type\">Айналу түрі</string>\n    <string name=\"rotation_free\">Жүйелі</string>\n    <string name=\"rotation_portrait\">Портрет</string>\n    <string name=\"color_filter_a_value\">А</string>\n    <string name=\"pref_clear_cookies\">Куки тазарту</string>\n    <string name=\"rotation_force_landscape\">Құлыпталған көлденең</string>\n    <string name=\"color_filter_g_value\">Ж</string>\n    <string name=\"color_filter_b_value\">К</string>\n    <string name=\"white_background\">Ақ</string>\n    <string name=\"restore_duration\">%02d мин, %02d сек</string>\n    <string name=\"pref_always_show_chapter_transition\">Тараулардың ауысуын әрдайым көрсету</string>\n    <string name=\"rotation_force_portrait\">Құлыпталған портрет</string>\n    <string name=\"pref_high\">Жоғары</string>\n    <string name=\"pref_low\">Төмен</string>\n    <string name=\"pref_lowest\">Ең төмен</string>\n    <string name=\"pref_category_delete_chapters\">Тарауларды жою</string>\n    <string name=\"disabled\">Өшірулі</string>\n    <string name=\"last_read_chapter\">Соңғы оқылған тарау</string>\n    <string name=\"second_to_last\">Соңғыдан бұрын оқылған тарау</string>\n    <string name=\"third_to_last\">Соңғы оқылғаннан үшінші тарау</string>\n    <string name=\"fourth_to_last\">Соңғы оқылғаннан төртінші тарау</string>\n    <string name=\"services\">Қызметтер</string>\n    <string name=\"pref_create_backup\">Сақтық көшірме жасау</string>\n    <string name=\"pref_create_folder_per_manga\">Беттерді бөлек бумаларға сақтау</string>\n    <string name=\"pref_reader_theme\">Түсқағаз</string>\n    <string name=\"nav_zone_prev\">Алдыңғ</string>\n    <string name=\"scale_type_fit_height\">Биіктігі бойынша</string>\n    <string name=\"scale_type_smart_fit\">Ақылды</string>\n    <string name=\"zoom_start_center\">Орталық</string>\n    <string name=\"double_tap_anim_speed_0\">Анимациясыз</string>\n    <string name=\"double_tap_anim_speed_fast\">Жылдам</string>\n    <string name=\"zoom_start_automatic\">Автоматты</string>\n    <string name=\"pref_category_reading_mode\">Оқу режимі</string>\n    <string name=\"fifth_to_last\">Соңғы оқылғаннан бесінші тарау</string>\n    <string name=\"pref_category_auto_download\">Авто-жүктеу</string>\n    <string name=\"pref_download_new\">Жаңа тарауларды жүктеу</string>\n    <string name=\"pref_download_new_categories_details\">Саналмайтын санаттардағы жазбалар саналатын санаттарда болса да жүктелмейді.</string>\n    <string name=\"enhanced_services\">Күшейтілген қызметтер</string>\n    <string name=\"multi_lang\">Көптілді</string>\n    <string name=\"tapping_inverted_horizontal\">Көлденең</string>\n    <string name=\"auto_download_while_reading\">Оқығанда дағдылы жүктеу</string>\n    <string name=\"download_ahead\">Алдын ала жүктеу</string>\n    <string name=\"theme_tidalwave\">Көтерілу Толқыны</string>\n    <string name=\"filter_mode_lighten\">Жарық қылу</string>\n    <string name=\"filter_mode_darken\">Қараңғы қылу</string>\n    <string name=\"pref_read_with_tapping_inverted\">Басу аймағын терістету</string>\n    <string name=\"tapping_inverted_vertical\">Тік</string>\n    <string name=\"kindlish_nav\">Kindle тәріздес</string>\n    <string name=\"download_ahead_info\">Кітапханадағы жазбаларда ғана жұмыс істейді, сондай-ақ ағымдағы және келесі тарау әлдеқашан жүктелген болса</string>\n    <string name=\"edge_nav\">Шеті</string>\n    <string name=\"pref_read_with_volume_keys\">Дыбыс пернелері</string>\n    <string name=\"tapping_inverted_both\">Екеуі де</string>\n    <string name=\"split_tall_images_summary\">Оқыманың өнімділігін жақсартады</string>\n    <string name=\"pref_navigate_pan\">Кең суретті басқанда панорамалау</string>\n    <string name=\"l_nav\">L тәріздес</string>\n    <string name=\"action_search_hint\">Іздеу…</string>\n    <string name=\"pref_hide_threshold\">Айналдырғандағы мәзірді жасыру сезгіштігі</string>\n    <string name=\"pref_image_scale_type\">Масштабтау</string>\n    <string name=\"vertical_plus_viewer\">Тоқтаусыз тік</string>\n    <string name=\"pref_viewer_nav\">Басу аймағы</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Теріс дыбыс пернелері</string>\n    <string name=\"tapping_inverted_none\">Жоқ</string>\n    <string name=\"pager_viewer\">Беттеп</string>\n    <string name=\"tracking_guide\">Аңду нұсқамасы</string>\n    <string name=\"tracking_info\">Аңду қызметіндегі прогрессті жаңарту үшін біржақты үйлестіру. Аңду батырмасы арқылы аңди бастаңыз.</string>\n    <string name=\"pref_auto_update_manga_sync\">Оқығаннан кейін прогрессті жаңарту</string>\n    <string name=\"pref_incognito_mode_summary\">Оқу тарихын тоқтатады</string>\n    <string name=\"backup_created\">Сақтық көшірме құрылды</string>\n    <string name=\"invalid_backup_file\">Сақтық көшірмесінің қате файлы</string>\n    <string name=\"restore_completed\">Қалпына келтіру дайын</string>\n    <string name=\"pref_user_agent_string\">Әдепкі қалпы бойынша user agent</string>\n    <string name=\"login_success\">Кірілді</string>\n    <string name=\"logout_title\">%1$s-ден шығасыз ба?</string>\n    <string name=\"missing_storage_permission\">Жадыға рұқсаттар берілмеді</string>\n    <string name=\"downloaded_chapters\">Жүктелген тараулар</string>\n    <string name=\"pinned_sources\">Бекітілген</string>\n    <string name=\"invalid_backup_file_missing_manga\">Сақтық көшірмеде кітапхана жазбалары жоқ.</string>\n    <string name=\"clear_database_source_item_count\">Кітапханадағы емес %1$d жазбалар дерекқорда</string>\n    <string name=\"restore_miui_warning\">MIUI өңтайландыруы қосылып тұрмаса сақтық көшірмесі / Қалыпқа келтіру дұрыс істемеуі мүмкін.</string>\n    <string name=\"pref_dump_crash_logs_summary\">Қателіктер тіркеуін әзірлеушілерге жіберу үшін файлға сақтайды</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Аялық кітапхананың жаңартуымен және сақтық көшірмесіне көмектеседі</string>\n    <string name=\"battery_optimization_disabled\">Баттареяның оңтайландыруы әлдеқашан өшірілу</string>\n    <string name=\"notification_incognito_text\">Инкогнито режимін өшіру</string>\n    <string name=\"pref_verbose_logging_summary\">Жан-жақты тіркеуді жүйелі тіркеуге жазу (қолданба өнімділігін азайтады)</string>\n    <string name=\"email\">Электрондық пошта мекенжайы</string>\n    <string name=\"logout\">Шығу</string>\n    <string name=\"unknown_error\">Белгісіз қателік</string>\n    <string name=\"pref_clear_database\">Дерекқорды тазалау</string>\n    <string name=\"pref_enable_acra\">Қателіктер туралы есептерді жіберу</string>\n    <string name=\"no_pinned_sources\">Сізде бекітілген дереккөздер жоқ</string>\n    <string name=\"empty_backup_error\">Кітапханада сақтайтын түк жоқ</string>\n    <string name=\"downloaded_only_summary\">Кітапханаңыздағы барлық жазбаларды сүзеді</string>\n    <string name=\"cancelled\">Күші жойылған</string>\n    <string name=\"publishing_finished\">Басылымы яқталды</string>\n    <string name=\"add_to_library\">Кітапханаға қосу</string>\n    <string name=\"pref_dump_crash_logs\">Қателер тіркеулерімен бөлісу</string>\n    <string name=\"clear_database_confirmation\">Сенімдісіз бе? Кітапханадағы емес жазбалардың оқылған тараулары мен прогрессі жоғалады</string>\n    <string name=\"clear_database_completed\">Жазбалар жойылды</string>\n    <string name=\"database_clean\">Тазалайтын түк жоқ</string>\n    <string name=\"pref_refresh_library_covers\">Туындылар мұқабасын жаңарту</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare айналып өтілмеді</string>\n    <string name=\"information_webview_outdated\">Жақсырақ үйлесімділік үшін WebView-ді жаңартыңыз</string>\n    <string name=\"backup_restore_missing_trackers\">Бақылау қызметіне кірілмеген:</string>\n    <string name=\"latest\">Соңғы</string>\n    <string name=\"local_filter_order_by\">Сұрыптау</string>\n    <string name=\"version\">Нұсқа</string>\n    <string name=\"licenses\">Open source лицензасы</string>\n    <string name=\"updated_version\">%1$s дейін жаңартылды</string>\n    <string name=\"local_invalid_format\">Жарамсыз тарау пішіні</string>\n    <string name=\"date\">Күн</string>\n    <string name=\"ongoing\">Шығып жатыр</string>\n    <string name=\"restore_in_progress\">Қалпына келтіру әлдеқашан орындалуда</string>\n    <string name=\"backup_choice\">Сақтық көшірмесіне нені қалайсыз?</string>\n    <string name=\"restoring_backup\">Сақтық көшірмесін қалпына келтіру</string>\n    <string name=\"backup_in_progress\">Сақтық көшірмесі әлдеқашан орындалуда</string>\n    <string name=\"pref_reset_viewer_flags_error\">Оқыма баптауы қалпына келтірілмеді</string>\n    <string name=\"pref_reset_viewer_flags_success\">Оқыманың барлық баптауы қалпына келді</string>\n    <string name=\"whats_new\">Не жаңалық</string>\n    <string name=\"help_translate\">Аудармамен көмектесу</string>\n    <string name=\"restoring_backup_error\">Сақтық көшірмесін қалпына келтіру сәтсіз өтті</string>\n    <string name=\"pref_dns_over_https\">DNS арқылы HTTPS (DoH)</string>\n    <string name=\"restoring_backup_canceled\">Қалпына келтіру күші жойылды</string>\n    <string name=\"popular\">Танымал</string>\n    <string name=\"backup_restore_content_full\">Сақтық көшірме файлынан дерек қалпына келеді.\n\\n\n\\nОны қолдану үшін сізге түгел жетпей тұрған кеңейтулерді жүктеп, бақылау қызметтеріне кіру керек.</string>\n    <string name=\"chapter_not_found\">Тарау табылмады</string>\n    <string name=\"action_track\">Бақылау</string>\n    <string name=\"pref_tablet_ui_mode\">Планшетті интерфейс</string>\n    <string name=\"pref_incognito_mode\">Инкогнито режимі</string>\n    <string name=\"tabs_header\">Қойындылар</string>\n    <string name=\"no_more_results\">Басқа нәтиже жоқ</string>\n    <string name=\"username\">Пайдаланушының есімі</string>\n    <string name=\"requires_app_restart\">Күшіне ену үшін қолданбаны қайта іске қосу қажет</string>\n    <string name=\"creating_backup_error\">Сақтық көшірмесі сәтсіз өтті</string>\n    <string name=\"local_source_help_guide\">Локал дереккөзді қолдану нұсқаулығы</string>\n    <string name=\"other_source\">Басқа</string>\n    <string name=\"backup_info\">Сақтық көшірмелерін басқа жерлерде де сақтауыңызға кеңес береміз.</string>\n    <string name=\"error_user_agent_string_blank\">User agent бос бола алмайды</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Қолданба жабылғанда тараулар кешің тазалау</string>\n    <string name=\"pref_reset_viewer_flags\">Оқыма баптауын әрбір туынды үшін қалпына келтіру</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Барлық туындылар үшін оқу режимі мен бағдарын қалпына келтіреді</string>\n    <string name=\"label_background_activity\">Аялық белсенділік</string>\n    <string name=\"pref_disable_battery_optimization\">Батареяның оңтайландыруын өшіру</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Құрылғы баптауы ашылмады</string>\n    <string name=\"privacy_policy\">Құпиялық саясаты</string>\n    <string name=\"pref_acra_summary\">Барлық мүмкін қателерді түзетуге көмектеседі. Пайдаланушы деректері жіберілмейді</string>\n    <string name=\"label_downloaded_only\">Жүктелгенді ғана</string>\n    <string name=\"login_title\">%1$s-ге кіру</string>\n    <string name=\"password\">Құпиясөз</string>\n    <string name=\"login\">Кіру</string>\n    <string name=\"logout_success\">Сіз шығып кеттіңіз</string>\n    <string name=\"updating_category\">Санатты жаңартып жатырмыз</string>\n    <string name=\"manga_from_library\">Кітапханадан</string>\n    <string name=\"no_results_found\">Нәтиже жоқ</string>\n    <string name=\"local_source\">Локал дереккөз</string>\n    <string name=\"last_used_source\">Ақырғы қолданылған</string>\n    <string name=\"unknown\">Белгісіз</string>\n    <string name=\"unknown_author\">Белгісіз автор</string>\n    <string name=\"unknown_status\">Белгісіз күй</string>\n    <string name=\"licensed\">Лицензаланған</string>\n    <string name=\"on_hiatus\">Үзілісте</string>\n    <string name=\"enhanced_tracking_info\">Белгілі бір дереккөз үшін жақсартылған мүмкіндікті қамтамасыз ететін қызмет. Кітапханаға қосылған кезде топтама автоматты түрде аңдылады.</string>\n    <string name=\"pref_restore_backup\">Сақтық көшірмеден қайтару</string>\n    <string name=\"pref_create_backup_summ\">Қазіргі кітапхананы қалпына келтіру үшін қолдануға болады</string>\n    <string name=\"pref_backup_interval\">Сақтық көшірме жиілігі</string>\n    <string name=\"pref_restore_backup_summ\">Сақтық көшірмеден кітапхананы қайтару</string>\n    <string name=\"creating_backup\">Сақтық көшірмесін жасау</string>\n    <string name=\"used_cache\">Қолданылған: %1$s</string>\n    <string name=\"cache_delete_error\">Тазалауда қателік пайда болды</string>\n    <string name=\"pref_clear_database_summary\">Кітапханада жоқ жазбалардың тарихын жою</string>\n    <string name=\"pref_clear_webview_data\">WebView дерегін тазалау</string>\n    <string name=\"webview_data_deleted\">WebView дерегі тазаланды</string>\n    <string name=\"about_dont_kill_my_app\">Кейбір өндірушілерде аялық қызметтерді өшіретін қолданбаларға қосымша шектеулер бар. Бұл сайтта оны қалай түзетуге болатыны туралы толығырақ ақпарат бар.</string>\n    <string name=\"pref_verbose_logging\">Тіркеуді жан-жақты жүргізу</string>\n    <string name=\"website\">Сайт</string>\n    <string name=\"action_global_search_hint\">Ауқымды іздеу…</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" ауқымды іздеу</string>\n    <string name=\"browse\">Іздеу</string>\n    <string name=\"pref_reset_user_agent_string\">User agent-ті әдепкіге қайтару</string>\n    <string name=\"cache_deleted\">Кеш тазаланды. %1$d файл жойылды</string>\n    <string name=\"check_for_updates\">Жаңартуларға тексеру</string>\n    <string name=\"source_filter_empty_screen\">Орнатылған дереккөз табылмады</string>\n    <string name=\"update_already_running\">Жаңарту әлдеқашан қосылған</string>\n    <string name=\"skipped_reason_not_caught_up\">Оқылмаған тараулар бар болғандықтан өткізіп жіберілді</string>\n    <string name=\"display_mode_chapter\">%1$s-Тарау</string>\n    <string name=\"manga_tracking_tab\">Бақылау</string>\n    <string name=\"add_tracking\">Бақылау қосу</string>\n    <string name=\"dropped\">Тасталған</string>\n    <string name=\"on_hold\">Кейінге қалған</string>\n    <string name=\"paused\">Тоқтатылған</string>\n    <string name=\"repeating\">Қайта оқылуда</string>\n    <string name=\"reading_list\">Оқылудағылар Тізімі</string>\n    <string name=\"update_check_no_new_updates\">Жаңалтулар жоқ</string>\n    <string name=\"information_webview_required\">Mihon-ны қолдану үшін WebView керек</string>\n    <string name=\"chapter_settings_updated\">Әдепкі тарау параметрлері жаңартылды</string>\n    <string name=\"download_notifier_no_network\">Желі байланысы жоқ</string>\n    <string name=\"information_empty_category_dialog\">Сіздің кітапханаңызда санаттар жоқ.</string>\n    <string name=\"reading\">Оқылуда</string>\n    <string name=\"no_chapters_error\">Тараулар жоқ</string>\n    <string name=\"are_you_sure\">Сенімдісіз бе?</string>\n    <string name=\"unread\">Оқылмаған</string>\n    <string name=\"updating_library\">Кітапхана жаңаруда</string>\n    <string name=\"cant_open_last_read_chapter\">Ақырғы оқылған тарау ашылмай тұр</string>\n    <string name=\"updates_last_update_info\">Кітапхананың ақырғы жаңаруы: %s</string>\n    <string name=\"loader_not_implemented_error\">Дереккөз табылмады</string>\n    <string name=\"myanimelist_relogin\">MyAnimeList-ке қайтадан кіріңіз</string>\n    <string name=\"error_no_match\">Ұқсастық табылмады</string>\n    <string name=\"source_unsupported\">Дереккөз қолжетімсіз</string>\n    <string name=\"error_saving_picture\">Сурет сақталмады</string>\n    <string name=\"transition_next\">Келесі:</string>\n    <string name=\"clear_history_confirmation\">Сенімдісіз бе? Бар тарих жоғалады.</string>\n    <string name=\"source_empty_screen\">Дереккөз табылмады</string>\n    <string name=\"notification_update_error\">%1$d жаңарту сәтсіз өтті</string>\n    <string name=\"notification_cover_update_failed\">Мұқаба жаңартылмады</string>\n    <string name=\"update_check_notification_update_available\">Жаңа нұсқа қолжетімді!</string>\n    <string name=\"download_notifier_split_page_not_found\">%d бет табылмады, бөлінгенде</string>\n    <string name=\"channel_complete\">Аяқталды</string>\n    <string name=\"pref_reader_summary\">Оқу түрі, көрсету, навигация</string>\n    <string name=\"pref_browse_summary\">Дереккөздер, кеңейтулер, ауқымды іздеу</string>\n    <string name=\"pref_security_summary\">Қолданбаны бұғаттау, экранды қорғау</string>\n    <string name=\"manga_info_collapse\">Азырақ</string>\n    <string name=\"manga_added_library\">Кітапханаға қосылды</string>\n    <string name=\"description_placeholder\">Сипаттамасыз</string>\n    <string name=\"sort_by_upload_date\">Жүктелген күні бойынша</string>\n    <string name=\"manga_download\">Жүктеп алу</string>\n    <string name=\"manga_cover\">Мұқаба</string>\n    <string name=\"error_saving_cover\">Мұқаба сақталмады</string>\n    <string name=\"download_unread\">Оқылмаған</string>\n    <string name=\"error_sharing_cover\">Мұқаба жіберілмеді</string>\n    <string name=\"cover_saved\">Мұқаба сақталды</string>\n    <string name=\"confirm_set_chapter_settings\">Бұл баптауды әдепкі қылып сақтағыңыз келеді ме?</string>\n    <string name=\"learn_more\">Көбірек білу үшін басу</string>\n    <string name=\"update_check_confirm\">Жүктеп алу</string>\n    <string name=\"channel_common\">Ортақ</string>\n    <string name=\"channel_progress\">Прогресс</string>\n    <string name=\"also_set_chapter_settings_for_library\">Сонымен қоса кітапханадағы жазбаларға қолдану</string>\n    <string name=\"chapter_settings\">Тарау баптауы</string>\n    <string name=\"chapter_error\">Қателік</string>\n    <string name=\"chapter_paused\">Тоқтатылды</string>\n    <string name=\"track_status\">Күйі</string>\n    <string name=\"wish_list\">Жоспардағылар Тізімі</string>\n    <string name=\"migration_dialog_what_to_include\">Қай деректі тасымалдау керек</string>\n    <string name=\"not_installed\">Орнатылмады</string>\n    <string name=\"notification_chapters_multiple\">%1$s Тарау</string>\n    <string name=\"library_errors_help\">Кітапхананы жаңарту қателіктерін жөндеу үшін %1$s</string>\n    <string name=\"pref_appearance_summary\">Кейіп, күні мен уақыт пішімі</string>\n    <string name=\"pref_library_summary\">Санаттар, ауқымды жаңарту</string>\n    <string name=\"pref_tracking_summary\">Прогрессті біржақты синхрондау, кеңейтілген синхрондау</string>\n    <string name=\"pref_backup_summary\">Қолмен және автоматты сақтық көшірмелері</string>\n    <string name=\"pref_advanced_summary\">Қателер тіркеуін түсіру, батареяны оңтайландыру</string>\n    <string name=\"manga_removed_library\">Кітапханадан жойылды</string>\n    <string name=\"chapter_downloading_progress\">(%1$d/%2$d) жүктелуде</string>\n    <string name=\"show_chapter_number\">Тарау нөмірі</string>\n    <string name=\"sort_by_number\">Тарау нөмірі бойынша</string>\n    <string name=\"track_type\">Түрі</string>\n    <string name=\"error_category_exists\">Бұндай санат атауы әлдеқашан бар!</string>\n    <string name=\"picture_saved\">Сурет сақталды</string>\n    <string name=\"set_as_cover\">Мұқабаға қою</string>\n    <string name=\"pref_category_for_this_series\">Осы туынды үшін</string>\n    <string name=\"viewer\">Оқу түрі</string>\n    <string name=\"transition_current\">Қазіргі:</string>\n    <string name=\"share_page_info\">%1$s: %2$s, бет %3$d</string>\n    <string name=\"chapter_progress\">Бет: %1$d</string>\n    <string name=\"confirm_set_image_as_cover\">Осы суретті мұқаба ретінде қолданайық па?</string>\n    <string name=\"show_title\">Дереккөз атауы</string>\n    <string name=\"dialog_with_checkbox_reset\">Бұл жазба үшін түгел тарауларды қалпына келтіру</string>\n    <string name=\"snack_categories_deleted\">Санаттар жойылды</string>\n    <string name=\"cover_updated\">Мұқаба жаңартылды</string>\n    <string name=\"skipped_reason_not_started\">Оқитын тарау болмағандықтан өткізіп жіберілді</string>\n    <string name=\"file_select_cover\">Мұқаба таңдау</string>\n    <string name=\"file_select_backup\">Сақтық көшірме файлын таңдау</string>\n    <string name=\"crash_screen_title\">Ойбай!</string>\n    <string name=\"crash_screen_description\">%s күтпеген қатеге ұшырады. Жаңылыс журналдарын Discord сайтындағы қолдау арнамызда ортақ пайдалануды ұсынамыз.</string>\n    <string name=\"crash_screen_restart_application\">Қолданбаны өшіріп қосу</string>\n    <string name=\"download_queue_error\">Тараулар жүктелмеді. Жүктеулер кезегіне барып, сол жерден байқап көре аласыз</string>\n    <string name=\"download_insufficient_space\">Жадта орын аз болғандықтан тараулар жүктелмейді</string>\n    <string name=\"notification_chapters_single_and_more\">%1$s тарау мен %2$d</string>\n    <string name=\"notification_first_add_to_library\">Бұны істер алдыңда жазбаны кітапханаңызға қосыңыз</string>\n    <string name=\"skipped_reason_completed\">Туынды аяқталған үшін өткізіп жіберілді</string>\n    <string name=\"update_check_open\">GitHub-та ашу</string>\n    <string name=\"update_check_eol\">Бұл Android нұсқасы қолжетімсіз</string>\n    <string name=\"download_notifier_unknown_error\">Белгісіз қателіктің кесірінен тарау жүктеп алынбады</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Бет файлының жолы %d табылмады</string>\n    <string name=\"channel_new_chapters\">Тарау жаңартулары</string>\n    <string name=\"channel_app_updates\">Қолданба жаңартулары</string>\n    <string name=\"channel_ext_updates\">Кеңейту жаңартулары</string>\n    <string name=\"spen_previous_page\">Алдыңғы бет</string>\n    <string name=\"spen_next_page\">Келесі бет</string>\n    <string name=\"appwidget_updates_description\">Жақында кітапханада жаңартылған жазбаларды қарау</string>\n    <string name=\"remove_manga\">\\\"%s\\\"ті кітапханадан жойғай тұрсыз</string>\n    <string name=\"skipped_reason_not_always_update\">Туындыға жаңарту керек жоқ болғандықтан өткізіп жіберіледі</string>\n    <string name=\"update_check_notification_download_in_progress\">Жүктелуде…</string>\n    <string name=\"update_check_notification_download_error\">Жүктеу қателігі</string>\n    <string name=\"update_check_notification_download_complete\">Жаңартуды орнату үшін басыңыз</string>\n    <string name=\"channel_errors\">Қателіктер</string>\n    <string name=\"unfinished_list\">Аяқталмағандар Тізімі</string>\n    <string name=\"score\">Бағалау</string>\n    <string name=\"title\">Атауы</string>\n    <string name=\"status\">Күйі</string>\n    <string name=\"track_started_reading_date\">Басталған күні</string>\n    <string name=\"track_finished_reading_date\">Аяқталған күні</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Бұл осы тараудың оқылған уақытын жояды. Сенімдісіз бе?</string>\n    <string name=\"transition_pages_loading\">Беттер жүктелуде…</string>\n    <string name=\"transition_finished\">Аяқталған:</string>\n    <string name=\"transition_previous\">Алдыңғы:</string>\n    <string name=\"clear_history_completed\">Тарих жойылды</string>\n    <string name=\"migrate\">Көшу</string>\n    <string name=\"migration_selection_prompt\">Қай жерден көшетін деректі таңдаңыз</string>\n    <string name=\"copy\">Көшіру</string>\n    <string name=\"empty_screen\">Қателік пайда болды</string>\n    <string name=\"download_notifier_downloader_title\">Жүктеуіш</string>\n    <string name=\"file_picker_error\">Файл таңдайтын қолданба табылмады</string>\n    <string name=\"complete_list\">Оқылғандар Тізімі</string>\n    <string name=\"on_hold_list\">Тоқтап тұрғандар Тізімі</string>\n    <string name=\"no_next_chapter\">Келісі тарау табылмады</string>\n    <string name=\"decode_image_error\">Сурет жүктелінбеді</string>\n    <string name=\"custom_cover\">Жеке мұқаба</string>\n    <string name=\"getting_started_guide\">Қолдана бастау нұсқаулығы</string>\n    <string name=\"sort_by_source\">Дереккөз бойынша</string>\n    <string name=\"confirm_delete_chapters\">Таңдалған тараулардың жойылуын қалайсыз ба?</string>\n    <string name=\"plan_to_read\">Жоспарланған</string>\n    <string name=\"migration_help_guide\">Дереккөздерді тасымалдау нұсқаулары</string>\n    <string name=\"download_notifier_text_only_wifi\">Wi-Fi байланысы жоқ</string>\n    <string name=\"download_notifier_download_paused\">Жүктеулер тоқтатылды</string>\n    <string name=\"appwidget_unavailable_locked\">Биометриялық бұғаттау қосылып тұрғанда виджет қолжетімді емес</string>\n    <string name=\"custom_filter\">Жеке сүзгі</string>\n    <string name=\"notification_size_warning\">Көп жаңалтулар саны дереккөздер жұмысын баяулата және батарея жұмысын өтімін көбейте алады. Көбірек білу үшін басыңыз.</string>\n    <string name=\"notification_chapters_single\">%1$s-Тарау</string>\n    <string name=\"download_queue_size_warning\">Ескерту: Көп жүктеулер саны дереккөздер жұмысын баяулата алады және/немесе Mihon бұғатталына алады. Толығырақ оқу үшін басыңыз.</string>\n    <string name=\"notification_new_chapters\">Жаңа тараулар табылды</string>\n    <string name=\"pref_downloads_summary\">Автоматты жүктеу, алдын ала жүктеу</string>\n    <string name=\"manga_info_expand\">Көбірек</string>\n    <string name=\"delete_downloads_for_manga\">Жүктелген тарауларды жоямыз ба?</string>\n    <string name=\"copied_to_clipboard\">Буферге көшірілді:\n\\n%1$s</string>\n    <string name=\"clipboard_copy_error\">Буферге көшірілмеді</string>\n    <string name=\"source_not_installed\">Дереккөз орнатылмаған: %1$s</string>\n    <string name=\"snack_add_to_library\">Кітапханаға қосайық па?</string>\n    <string name=\"set_chapter_settings_as_default\">Әдепкі қылып орнату</string>\n    <string name=\"page_list_empty_error\">Беттер табылмады</string>\n    <string name=\"transition_no_next\">Келесі тарау жоқ</string>\n    <string name=\"transition_no_previous\">Алдыңғы тарау жоқ</string>\n    <string name=\"transition_pages_error\">Беттер жүктелінбеді: %1$s</string>\n    <string name=\"unknown_title\">Атауы белгісіз</string>\n    <string name=\"invalid_location\">Жарамсыз орын: %s</string>\n    <string name=\"updates_last_update_info_just_now\">Жаңа ғана</string>\n    <string name=\"error_user_agent_string_invalid\">User agent жолы жарамсыз</string>\n    <string name=\"information_no_entries_found\">Бұл санатта жазба жоқ</string>\n    <string name=\"action_open_random_manga\">Кездейсоқ жазбаны ашу</string>\n    <string name=\"fdroid_warning\">F-Droid құрастыруларына ресми түрде қолдау көрсетілмейді.\n\\nТолығырақ білу үшін басыңыз.</string>\n    <string name=\"download_notifier_cache_renewal\">Жүктеулерді тексеру</string>\n    <string name=\"action_display_show_continue_reading_button\">«Оқуды жалғастыру» батырмасы</string>\n    <string name=\"track_remove_finish_date_conf_text\">Бұл %s ішінен бұрын таңдалған аяқталу күнін жояды</string>\n    <string name=\"track_remove_start_date_conf_text\">Бұл бұрын таңдалған басталу күнін %s ішінен жояды</string>\n    <string name=\"track_remove_date_conf_title\">Күнің жоямыз ба?</string>\n    <string name=\"pref_invalidate_download_cache\">Жүктеулер индексін тазалау</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Қолданбаны жүктеп алынған тарауларды қайта тексеруге мәжбүрлейді</string>\n    <string name=\"label_stats\">Статистика</string>\n    <string name=\"label_started\">Басталды</string>\n    <string name=\"label_local\">Құрылғыдағы</string>\n    <string name=\"label_downloaded\">Жүктелген</string>\n    <string name=\"label_completed_titles\">Аяқталған сессиялар</string>\n    <string name=\"label_read_duration\">Оқу ұзақтығы</string>\n    <string name=\"label_total_chapters\">Барлығы</string>\n    <string name=\"label_mean_score\">Орта баға</string>\n    <string name=\"label_used\">Қолданылған</string>\n    <string name=\"not_applicable\">Д/Ж</string>\n    <string name=\"day_short\">%dкүн</string>\n    <string name=\"minute_short\">%dмин</string>\n    <string name=\"seconds_short\">%dсек</string>\n    <string name=\"action_not_now\">Қазір емес</string>\n    <string name=\"label_overview_section\">Шолу</string>\n    <string name=\"label_read_chapters\">Оқылған</string>\n    <string name=\"hour_short\">%dсағ</string>\n    <string name=\"label_titles_section\">Жазбалар</string>\n    <string name=\"label_titles_in_global_update\">Ауқымды жаңартуда</string>\n    <string name=\"label_tracked_titles\">Бақыланудағы жазбалар</string>\n    <string name=\"label_tracker_section\">Бақылау қызметтері</string>\n    <string name=\"pref_library_update_show_tab_badge\">Жаңартулар белгішесінде оқылмаған тараулар санын көрсету</string>\n    <string name=\"information_no_manga_category\">Бұл санат бос</string>\n    <string name=\"enhanced_services_not_installed\">Қолжетімді, бірақ дереккөзі орнатылған жоқ: %s</string>\n    <string name=\"copied_to_clipboard_plain\">Аралық сақтағышқа көшірілді</string>\n    <string name=\"pref_skip_dupe_chapters\">Қайталанған бөлімдерді өткізіп жіберу</string>\n    <string name=\"confirm_add_duplicate_manga\">Сіздің кітапханаңызда осымен атауы бірдей жазба бар\n\\n\n\\nБәрібір жалғастыра бересіз бе?</string>\n    <string name=\"track_error\">%1$s қателік: %2$s</string>\n    <string name=\"information_required_plain\">*қажетті</string>\n    <string name=\"action_update_category\">Санатты жаңарту</string>\n    <string name=\"action_copy_to_clipboard\">Айырбастау буферіне көшіріп алу</string>\n    <string name=\"pref_hide_in_library_items\">Кітапханада бар туындыларды жасыру</string>\n    <string name=\"split_tall_images\">Ұзын суреттерді бөлу</string>\n    <string name=\"overlay_header\">Қабаттасу</string>\n    <string name=\"pref_page_rotate\">Кең беттерді сыйғызу үшін бұрыңыз</string>\n    <string name=\"pref_page_rotate_invert\">Бұрылған кең беттерді аудару бағдары</string>\n    <string name=\"pref_debug_info\">Дебаг туралы ақпарат</string>\n    <string name=\"label_data_storage\">Дерек пен жад</string>\n    <string name=\"selected\">Таңдалған</string>\n    <string name=\"not_selected\">Таңдалмаған</string>\n    <string name=\"action_bar_up_description\">Жоғары өту</string>\n    <string name=\"delete_downloaded\">Жүктелгенді жою</string>\n    <string name=\"scanlator\">Аударған</string>\n    <string name=\"action_menu_overflow_description\">Тағы баптау</string>\n    <string name=\"action_set_interval\">Аралығын қою</string>\n    <string name=\"unlock_app_title\">%s шешу</string>\n    <string name=\"action_filter_interval_custom\">Өзгермелі жаңарту жиілігі</string>\n    <string name=\"label_upcoming\">Келешек</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/km/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d ថ្ងៃមុន</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">%d ភាគបន្ទាប់ដែលមិនទាន់អាន</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/km/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_download_queue\">កំពុងទាញយក</string>\n    <string name=\"action_search_settings\">ស្វែងរកក្នុងការកំណត់</string>\n    <string name=\"chapters\">ភាគ</string>\n    <string name=\"label_warning\">បំរាម</string>\n    <string name=\"action_filter_unread\">មិនទាន់អាន</string>\n    <string name=\"action_sort_last_read\">អានចុងក្រោយគេ</string>\n    <string name=\"action_previous_chapter\">ភាគមុន</string>\n    <string name=\"track\">ការតាមដានការអាន</string>\n    <string name=\"label_sources\">ប្រភព</string>\n    <string name=\"label_recent_manga\">ប្រវត្តិ</string>\n    <string name=\"action_sort_alpha\">តម្រៀបតាមអក្ខរក្រម</string>\n    <string name=\"name\">ឈ្មោះ</string>\n    <string name=\"categories\">ការតម្រៀបថ្នាក់</string>\n    <string name=\"history\">ប្រវត្តិ</string>\n    <string name=\"label_more\">ច្រើនទៀត</string>\n    <string name=\"label_settings\">ការកំណត់</string>\n    <string name=\"label_library\">បណ្ណាល័យ</string>\n    <string name=\"label_recent_updates\">បច្ចុប្បន្នភាព</string>\n    <string name=\"label_migration\">ផ្លាស់ប្ដូរ</string>\n    <string name=\"label_extensions\">ប្រភពម៊េងហ្គា</string>\n    <string name=\"label_help\">ជំនួយ</string>\n    <string name=\"label_default\">លំនាំដើម</string>\n    <string name=\"action_filter\">តម្រង</string>\n    <string name=\"action_filter_bookmarked\">បានចំណាំ</string>\n    <string name=\"action_filter_tracked\">បានតាមដានការអាន</string>\n    <string name=\"action_filter_empty\">ជម្រុះតម្រងចេញ</string>\n    <string name=\"action_sort_count\">ចំនួនត្លុកសរុប</string>\n    <string name=\"action_sort_total\">ចំនួនភាគសរុប</string>\n    <string name=\"action_sort_chapter_fetch_date\">ថ្ងៃខែដែលបានឆែកមើល</string>\n    <string name=\"action_sort_date_added\">តាមកាលបរិច្ឆេទដែលបានបញ្ចូល</string>\n    <string name=\"action_global_search\">ស្វែងរកជាសកល</string>\n    <string name=\"action_select_inverse\">ជ្រើសរើសផ្ទុយ</string>\n    <string name=\"action_mark_as_read\">បញ្ជាក់ថាបានអាន</string>\n    <string name=\"action_download\">ទាញយក</string>\n    <string name=\"action_bookmark\">ចំណាំភាគនេះទុក</string>\n    <string name=\"action_rename_category\">ប្ដូរឈ្មោះថ្នាក់ក្រម</string>\n    <string name=\"action_move_category\">កំណត់</string>\n    <string name=\"action_edit_cover\">ផ្លាស់ប្ដូរកម្របត្លុក</string>\n    <string name=\"action_view_chapters\">មើលភាគ</string>\n    <string name=\"action_pause\">ផ្អាក</string>\n    <string name=\"action_retry\">ព្យាយាមម្ដងទៀត</string>\n    <string name=\"action_remove\">ដកចេញ</string>\n    <string name=\"action_start\">ចាប់ផ្ដើម</string>\n    <string name=\"action_resume\">បន្តវិញ</string>\n    <string name=\"action_display_mode\">ម៊ូដនៃការបង្ហាញ</string>\n    <string name=\"action_display\">ការបង្ហាញ</string>\n    <string name=\"action_display_grid\">ជ្រុងCompact</string>\n    <string name=\"action_display_comfortable_grid\">ជ្រុងសម</string>\n    <string name=\"action_display_list\">បញ្ជី</string>\n    <string name=\"action_display_cover_only_grid\">ជ្រុងដែលមានតែគម្រប</string>\n    <string name=\"action_display_download_badge\">ភាគដែលបានទាញយក</string>\n    <string name=\"action_display_local_badge\">ម៊េងហ្គាដែលមានស្រាប់ក្នុងឧបករណ៍</string>\n    <string name=\"action_display_language_badge\">ភាសា</string>\n    <string name=\"action_display_show_tabs\">បង្ហាញtabនៃថ្នាក់</string>\n    <string name=\"action_disable\">បិទ</string>\n    <string name=\"action_pin\">ខ្ទាស់</string>\n    <string name=\"action_unpin\">ឈប់ខ្ទាស់</string>\n    <string name=\"action_cancel\">ឈប់ធ្វើ</string>\n    <string name=\"action_cancel_all\">ឈប់ធ្វើទាំងអស់</string>\n    <string name=\"cancel_all_for_series\">Cancelទាំងអស់ចំពោះម៊េងហ្គាមួយនេះ</string>\n    <string name=\"action_sort\">តម្រៀប</string>\n    <string name=\"action_order_by_upload_date\">តម្រៀបតាមកាលបរិច្ឆេទ</string>\n    <string name=\"action_order_by_chapter_number\">តម្រៀបតាមភាគ</string>\n    <string name=\"action_newest\">ថ្មីបំផុត</string>\n    <string name=\"action_oldest\">ចាស់បំផុត</string>\n    <string name=\"action_asc\">ឡើង</string>\n    <string name=\"action_desc\">ចុះ</string>\n    <string name=\"information_no_downloads\">មិនមានការទាញយក</string>\n    <string name=\"information_no_recent\">មិនមានបច្ចុប្បន្នភាពថ្មីៗ</string>\n    <string name=\"information_no_recent_manga\">អ្នកពុំបានអានអ្វីថ្មីឡើយ</string>\n    <string name=\"label_extension_info\">អំពីប្រភពម៊េងហ្គា</string>\n    <string name=\"information_empty_library\">បណ្ណាល័យរបស់អ្នកទទេស្អាត</string>\n    <string name=\"information_empty_category\">អ្នកពុំមានការទម្រៀបម៊េងហ្គាឡើយ។ ចុចប៊ូតុងសញ្ញាបូកដើម្បីទម្រៀបម៊េងហ្គាសម្រាប់បណ្ណាល័យរបស់អ្នក។</string>\n    <string name=\"manga\">បណ្តុំក្នុងបណ្ណាល័យ</string>\n    <string name=\"confirm_lock_change\">ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវដើម្បីបញ្ជាក់ការផ្លាស់ប្តូរ</string>\n    <string name=\"action_settings\">ការកំណត់</string>\n    <string name=\"action_menu\">មនុយ</string>\n    <string name=\"action_mark_previous_as_read\">បញ្ចាក់ភាគមុនថាបានអាន</string>\n    <string name=\"action_delete\">លុប</string>\n    <string name=\"action_sort_latest_chapter\">ភាគថ្មីបំផុត</string>\n    <string name=\"action_search\">ស្វែងរក</string>\n    <string name=\"action_select_all\">ជ្រើសទាំងអស់</string>\n    <string name=\"action_remove_bookmark\">លែងចំណាំភាគនេះ</string>\n    <string name=\"action_mark_as_unread\">បញ្ជាក់ថាមិនទាន់បានអាន</string>\n    <string name=\"action_update_library\">ធ្វើបច្ចុប្បន្នភាពបណ្ណាល័យ</string>\n    <string name=\"action_enable_all\">បើកទាំងអស់</string>\n    <string name=\"action_add_category\">បន្ថែមថ្នាក់ក្រម</string>\n    <string name=\"action_disable_all\">បិទទាំងអស់</string>\n    <string name=\"action_edit\">ផ្លាស់ប្ដូរ</string>\n    <string name=\"action_add\">បញ្ចូល</string>\n    <string name=\"action_edit_categories\">កែប្រែ</string>\n    <string name=\"action_next_chapter\">ភាគបន្ទាប់</string>\n    <string name=\"action_open_in_browser\">បើកនៅក្នុងកម្មវិធីរុករក</string>\n    <string name=\"action_show_manga\">បង្ហាញត្លុក</string>\n    <string name=\"action_open_in_web_view\">បើកនៅក្នុងWebView</string>\n    <string name=\"action_migrate\">ប្ដូរ</string>\n    <string name=\"action_display_show_number_of_items\">បង្ហាញចំនួនលេខនៃធាតុ</string>\n    <string name=\"action_move_to_top\">យកទៅខាងលើ</string>\n    <string name=\"action_move_to_bottom\">យកទៅខាងក្រោម</string>\n    <string name=\"action_install\">តម្លើង</string>\n    <string name=\"action_share\">ចែករំលែក</string>\n    <string name=\"action_save\">រក្សាទុក</string>\n    <string name=\"action_reset\">Reset</string>\n    <string name=\"action_undo\">ត្រឡប់វាវិញ</string>\n    <string name=\"action_open_log\">បើកlog</string>\n    <string name=\"action_show_errors\">ប៉ះដើម្បីមើលលម្អិត</string>\n    <string name=\"action_restore\">restore</string>\n    <string name=\"action_webview_back\">ត្រឡប់</string>\n    <string name=\"action_start_downloading_now\">ចាប់ផ្ដើមទាញយកឥឡូវនេះ</string>\n    <string name=\"loading\">កំពុងដំណើរការ…</string>\n    <string name=\"app_not_available\">កម្មវិធីមិនដំណើរការ</string>\n    <string name=\"pref_category_appearance\">រូបរាង</string>\n    <string name=\"pref_category_library\">បណ្ណាល័យ</string>\n    <string name=\"pref_category_reader\">កន្លែងអាន</string>\n    <string name=\"pref_category_downloads\">ការទាញយក</string>\n    <string name=\"pref_category_tracking\">ការតាមដានការអាន</string>\n    <string name=\"pref_category_advanced\">ការកំណត់ពិសេស</string>\n    <string name=\"pref_category_about\">អំពីរ</string>\n    <string name=\"pref_category_theme\">ពណ៌</string>\n    <string name=\"theme_system\">តាមទូរសព្ទ</string>\n    <string name=\"theme_light\">បិទ</string>\n    <string name=\"theme_dark\">បើក</string>\n    <string name=\"theme_monet\">ឌីណាមិច</string>\n    <string name=\"theme_greenapple\">ប៉ោមបៃតង</string>\n    <string name=\"theme_midnightdusk\">មីដណាយdusk</string>\n    <string name=\"theme_strawberrydaiquiri\">ស្ត្របឺរីដៃគីរី</string>\n    <string name=\"theme_tako\">តាកូ</string>\n    <string name=\"theme_tealturquoise\">បៃតងខ្ចី</string>\n    <string name=\"theme_yinyang\">យីងនិងយ៉ាង</string>\n    <string name=\"pref_dark_theme_pure_black\">ខ្មៅដិត</string>\n    <string name=\"pref_date_format\">ទម្រង់ថ្ងៃខែ</string>\n    <string name=\"pref_manage_notifications\">កំណត់ការជូនដំណឹង</string>\n    <string name=\"pref_category_security\">សន្តិសុខនិងឯកជនភាព</string>\n    <string name=\"lock_with_biometrics\">ត្រូវការការបើកសោ</string>\n    <string name=\"lock_when_idle\">ចាក់សោនៅពេលមិនធ្វើអ្វី</string>\n    <string name=\"lock_always\">គ្រប់ពេល</string>\n    <string name=\"secure_screen\">ការពារអេក្រង់</string>\n    <string name=\"pref_category_nsfw_content\">ប្រភពមិនល្អ(១៨+)</string>\n    <string name=\"pref_show_nsfw_source\">បង្ហាញនៅក្នុងបញ្ចីប្រភព</string>\n    <string name=\"relative_time_today\">ថ្ងៃនេះ</string>\n    <string name=\"pref_category_display\">ការបង្ហាញ</string>\n    <string name=\"pref_library_columns\">ធាតុក្នុងមួយជួ</string>\n    <string name=\"portrait\">បញ្ឈរ</string>\n    <string name=\"landscape\">ផ្ដេក</string>\n    <string name=\"pref_library_update_interval\">ការធ្វើប្ចុប្បន្នភាពដោយស្វ័យប្រវត្ត</string>\n    <string name=\"update_never\">បិទ</string>\n    <string name=\"update_6hour\">រាល់៦ម៉ោងម្ដង</string>\n    <string name=\"update_48hour\">រាល់២ថ្ងៃម្ដង</string>\n    <string name=\"update_72hour\">រាល់៣ថ្ងៃម្ដង</string>\n    <string name=\"update_weekly\">រាល់សប្ដាហ៍</string>\n    <string name=\"pref_library_update_restriction\">ធ្វើប្ចុប្បន្នភាពdevice restrictionsដោយស្វ័យប្រវត្ត</string>\n    <string name=\"connected_to_wifi\">នៅពេលបើកWi-Fiប៉ុណ្ណោះ</string>\n    <string name=\"action_webview_forward\">ទៅមុខ</string>\n    <string name=\"action_webview_refresh\">រីហ្វ្រេស</string>\n    <string name=\"pref_category_general\">ទូទៅ</string>\n    <string name=\"pref_app_theme\">ពណ៌កម្មវិធី</string>\n    <string name=\"theme_yotsuba\">យ៉ុតស្ស៊ូបា</string>\n    <string name=\"hide_notification_content\">លាក់ការជូនដំណឹង</string>\n    <string name=\"update_12hour\">រាល់១២ម៉ោងម្ដង</string>\n    <string name=\"secure_screen_summary\">ការពារអេក្រង់លាក់contentរបស់កម្មវិធីនៅពេលswitchingកម្មីធីនិងប្លុកscreenshots</string>\n    <string name=\"lock_never\">មិនដែល</string>\n    <string name=\"parental_controls_info\">ការសម្រេចចិត្តនេះមិនបិទការflagនៃប្រភពទៅលើរឿង(១៨+)នៅក្នុងកម្មវិធីឡើយ។</string>\n    <string name=\"update_24hour\">រាល់ថ្ងៃ</string>\n    <string name=\"pref_category_library_update\">ការធ្វើបច្ចុប្បន្នភាពសកល</string>\n    <string name=\"title\">ចំណងជើង</string>\n    <string name=\"completed\">បានបញ្ចប់ការចេញផ្សាយ</string>\n    <string name=\"ongoing\">កំពុងតែចេញផ្សាយ</string>\n    <string name=\"default_category\">ថ្នាក់ធម្មតា</string>\n    <string name=\"on_hiatus\">ត្រូវបានផ្អាកការចេញផ្សាយ</string>\n    <string name=\"unknown\">មិនច្បាស់</string>\n    <string name=\"local_invalid_format\">ទម្រង់ភាគមិនត្រឹមត្រួវ</string>\n    <string name=\"chapter_not_found\">គ្មានភាគ</string>\n    <string name=\"no_chapters_error\">គ្មានភាគ</string>\n    <string name=\"cancelled\">ត្រូវបានបញ្ឈប់ការចេញផ្សាយ</string>\n    <string name=\"publishing_finished\">ចេញផ្សាយចប់ហើយ</string>\n    <string name=\"updating_library\">កំពុងតែធ្វើបច្ចុប្បន្នភាពបណ្ណាល័យ</string>\n    <string name=\"licensed\">មានឡាយសិន</string>\n    <string name=\"getting_started_guide\">ម​គ្គុ​ទេស​ក៍​</string>\n    <string name=\"browse\">ស្វែងរក</string>\n    <string name=\"all\">ទាំងអស់</string>\n    <string name=\"update_check_notification_download_in_progress\">កំពុងទាញយក…</string>\n    <string name=\"label_stats\">ស្ថិតិ</string>\n    <string name=\"label_downloaded\">បានទាញយក</string>\n    <string name=\"information_cloudflare_bypass_failure\">បរាជ័យក្នុងការឆ្លងកាត់Cloudflare</string>\n    <string name=\"action_search_hint\">ស្វែងរក…</string>\n    <string name=\"notification_new_chapters\">មានភាគថ្មី</string>\n    <string name=\"action_copy_to_clipboard\">ចម្លងទៅក្ដារតម្បៀតខ្ទាស់</string>\n    <string name=\"label_backup\">បម្រុងទុក និងស្ដារឡើងវិញ</string>\n    <string name=\"delete_downloaded\">លុបអ្វីដែលបានទាញហើយ</string>\n    <string name=\"label_local\">ក្នុងទូរស័ព្ទ</string>\n    <string name=\"on\">បើក</string>\n    <string name=\"action_update_category\">ធ្វើបច្ចុប្បន្នភាពថ្នាក់ក្រម</string>\n    <string name=\"action_menu_overflow_description\">ជម្រើសបន្ថែមទៀត</string>\n    <string name=\"off\">បិទ</string>\n    <string name=\"delete_category_confirmation\">តើអ្នកចង់លុបថ្នាក់ក្រម %s ឬ?</string>\n    <string name=\"selected\">បានជ្រើសយក</string>\n    <string name=\"not_selected\">មិនបានជ្រើសយក</string>\n    <string name=\"scanlator\">អ្នកបកប្រែ</string>\n    <string name=\"action_bar_up_description\">រុករកទៅលើ</string>\n    <string name=\"label_data_storage\">ទិន្នន័យ និងអង្គផ្ទុក</string>\n    <string name=\"action_remove_everything\">ដកអ្វីៗទាំងអស់ចេញ</string>\n    <string name=\"action_open_random_manga\">បើកត្លុកដោយចៃដន្យ</string>\n    <string name=\"label_started\">បានចាប់ផ្តើមហើយ</string>\n    <string name=\"action_sort_unread_count\">ចំនួនមិនទាន់អាន</string>\n    <string name=\"action_sort_last_manga_update\">ពិនិត្យបច្ចុប្បន្នភាពចុងក្រោយ</string>\n    <string name=\"delete_category\">លុបថ្នាក់ក្រម</string>\n    <string name=\"action_sort_next_updated\">ភាគថ្មីរំពឹងទុកនៅ</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/kn/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">1 ನಿಮಿಷದ ನಂತರ</item>\n        <item quantity=\"other\">%1$s ನಿಮಿಷಗಳ ನಂತರ</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%2$s ದೋಷದೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ</item>\n        <item quantity=\"other\">%2$s ದೋಷಗಳೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d ವರ್ಗ</item>\n        <item quantity=\"other\">%d ವರ್ಗಗಳು</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">ವಿಸ್ತರಣೆ ನವೀಕರಣ ಲಭ್ಯವಿದೆ</item>\n        <item quantity=\"other\">%d ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು 1 ಹೆಚ್ಚು</item>\n        <item quantity=\"other\">ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">1 ಹೊಸ ಅಧ್ಯಾಯ</item>\n        <item quantity=\"other\">%1$d ಹೊಸ ಅಧ್ಯಾಯಗಳು</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">1 ಶೀರ್ಷಿಕೆಗಾಗಿ</item>\n        <item quantity=\"other\">%d ಶೀರ್ಷಿಕೆಗಳಿಗಾಗಿ</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">1 ಉಳಿದಿದೆ</item>\n        <item quantity=\"other\">%1$s ಉಳಿದಿದೆ</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">1 ಚಾಪ್ಟರ್</item>\n        <item quantity=\"other\">%1$s ಚಾಪ್ಟರಗಳು</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">1 ಟ್ರಾಕರ್</item>\n        <item quantity=\"other\">%d ಟ್ರಾಕರ್ ಗಳು</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">1 ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿದೆ</item>\n        <item quantity=\"other\">%d ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿವೆ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/kn/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"landscape\">ಅಡ್ಡವಾದ ಪುಟ</string>\n    <string name=\"portrait\">ಉದ್ದವಾದ ಪುಟ</string>\n    <string name=\"pref_library_columns\">ಪ್ರತಿ ಸಾಲಿಗೆ ವಸ್ತುಗಳು</string>\n    <string name=\"pref_category_display\">ಪ್ರದರ್ಶಿಸು</string>\n    <string name=\"hide_notification_content\">ಸೂಚನೆ ವಿಷಯವನ್ನು ಮರೆಮಾಡಿ</string>\n    <string name=\"secure_screen_summary\">ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುವಾಗ ಮತ್ತು ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುವಾಗ ಅಪ್ಲಿಕೇಶನ್ ವಿಷಯಗಳನ್ನು ಮರೆಮಾಡಿ</string>\n    <string name=\"secure_screen\">ಸುರಕ್ಷಿತ ಪುಟ</string>\n    <string name=\"lock_never\">ಎಂದಿಗೂ ಇಲ್ಲ</string>\n    <string name=\"lock_always\">ಯಾವಾಗಲೂ</string>\n    <string name=\"lock_when_idle\">ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ಲಾಕ್ ಮಾಡಿ</string>\n    <string name=\"lock_with_biometrics\">ಅನ್ ಲಾಕ್ ಅಗತ್ಯವಿದೆ</string>\n    <string name=\"pref_category_security\">ಭದ್ರತೆ</string>\n    <string name=\"pref_manage_notifications\">ಸೂಚನೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ</string>\n    <string name=\"pref_date_format\">ದಿನಾಂಕ ಸ್ವರೂಪ</string>\n    <string name=\"theme_system\">ಸಿಸ್ಟಮ್ ಅನುಕರಿಸಿ</string>\n    <string name=\"theme_dark\">ಆನ್</string>\n    <string name=\"theme_light\">ಆಫ</string>\n    <string name=\"pref_category_about\">ಅಪ್ಲಿಕೇಶನ್ ಬಗ್ಗೆ</string>\n    <string name=\"pref_category_advanced\">ಸುಧಾರಿತ</string>\n    <string name=\"pref_category_tracking\">ಟ್ರ್ಯಾಕಿಂಗ್</string>\n    <string name=\"pref_category_downloads\">ಡೌನ್ಲೋಡ್ ಸಂಯೋಜನೆಗಳು</string>\n    <string name=\"pref_category_reader\">ಓದುವ ಸಂಯೋಜನೆಗಳು</string>\n    <string name=\"pref_category_library\">ಗ್ರಂಥಾಲಯ</string>\n    <string name=\"pref_category_general\">ಸಾಮಾನ್ಯ</string>\n    <string name=\"app_not_available\">ಅಪ್ಲಿಕೇಶನ್ ಲಭ್ಯವಿಲ್ಲ</string>\n    <string name=\"loading\">ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…</string>\n    <string name=\"action_webview_refresh\">ರಿಫ್ರೆಶ್ ಮಾಡಿ</string>\n    <string name=\"action_webview_forward\">ಮುಂದೆ</string>\n    <string name=\"action_webview_back\">ಹಿಂದೆ</string>\n    <string name=\"action_restore\">ಮರುಸ್ಥಾಪಿಸಿ</string>\n    <string name=\"action_open_log\">ಲಾಗ್ ತೆರೆಯಿರಿ</string>\n    <string name=\"action_undo\">ರದ್ದುಗೊಳಿಸಿ</string>\n    <string name=\"action_reset\">ಮರುಹೊಂದಿಸಿ</string>\n    <string name=\"action_save\">ಉಳಿಸಿ</string>\n    <string name=\"action_share\">ಹಂಚಿಕೊಳ್ಳಿ</string>\n    <string name=\"action_install\">ಇನ್ಸ್ಟಾಲ್</string>\n    <string name=\"action_move_to_bottom\">ಕೆಳಕ್ಕೆ ಸರಿಸಿ</string>\n    <string name=\"action_move_to_top\">ಮೇಲಕ್ಕೆ ಸರಿಸಿ</string>\n    <string name=\"action_oldest\">ಹಳೆಯದು</string>\n    <string name=\"action_newest\">ಹೊಸತು</string>\n    <string name=\"action_sort\">ವಿಂಗಡಿಸಿ</string>\n    <string name=\"action_cancel_all\">ಎಲ್ಲವನ್ನೂ ರದ್ದುಮಾಡಿ</string>\n    <string name=\"action_cancel\">ರದ್ದುಮಾಡಿ</string>\n    <string name=\"action_unpin\">ತೆಗೆದುಹಾಕಿ</string>\n    <string name=\"action_pin\">ಚುಚ್ಚು</string>\n    <string name=\"action_display_download_badge\">ಡೌನಲೋಡ್ ಗುರುತುಗಳು</string>\n    <string name=\"action_display_list\">ಪಟ್ಟಿ</string>\n    <string name=\"action_display_grid\">ಕಾಂಪ್ಯಾಕ್ಟ್ ಗ್ರಿಡ್</string>\n    <string name=\"action_display\">ಪ್ರದರ್ಶೀಸು</string>\n    <string name=\"action_display_mode\">ಪ್ರದರ್ಶನ ರೀತಿ</string>\n    <string name=\"action_open_in_web_view\">ವೆಬ್‌ವೀಕ್ಷಣೆಯಲ್ಲಿ ತೆರೆಯಿರಿ</string>\n    <string name=\"action_open_in_browser\">ಬ್ರೌಸರ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</string>\n    <string name=\"action_resume\">ಪುನರಾರಂಭಿಸು</string>\n    <string name=\"action_remove\">ತೆಗೆದುಹಾಕಿ</string>\n    <string name=\"action_retry\">ಮರುಪ್ರಯತ್ನಿಸಿ</string>\n    <string name=\"action_next_chapter\">ಮುಂದಿನ ಅಧ್ಯಾಯ</string>\n    <string name=\"action_previous_chapter\">ಹಿಂದಿನ ಅಧ್ಯಾಯ</string>\n    <string name=\"action_pause\">ವಿರಾಮ</string>\n    <string name=\"action_view_chapters\">ಅಧ್ಯಾಯಗಳನ್ನು ವೀಕ್ಷಿಸಿ</string>\n    <string name=\"action_edit_cover\">ಕವರ್ ತಿದ್ದಿ</string>\n    <string name=\"action_move_category\">ವರ್ಗಗಳನ್ನು ಹೊಂದಿಸಿ</string>\n    <string name=\"action_rename_category\">ವರ್ಗವನ್ನು ಮರುಹೆಸರಿಸಿ</string>\n    <string name=\"action_edit_categories\">ವರ್ಗವನ್ನು ತಿದ್ದಿ</string>\n    <string name=\"action_add_category\">ವರ್ಗವನ್ನು ಸೇರಿಸಿ</string>\n    <string name=\"action_add\">ಸೇರಿಸಿ</string>\n    <string name=\"action_edit\">ತಿದ್ದು</string>\n    <string name=\"action_update_library\">ಗ್ರಂಥಾಲಯ ನವೀಕರಿಸಿ</string>\n    <string name=\"action_delete\">ತೆಗೆದು ಹಾಕು</string>\n    <string name=\"action_remove_bookmark\">ಅಧ್ಯಾಯದ ಬುಕ್‌ಮಾರ್ಕ್ ತೆಗೆದುಹಾಕಿ</string>\n    <string name=\"action_bookmark\">ಬುಕ್ ಮಾರ್ಕ್ ಅಧ್ಯಾಯ</string>\n    <string name=\"action_download\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ</string>\n    <string name=\"action_mark_previous_as_read\">ಹಿಂದಿನದನ್ನು ಓದಿದಂತೆ ಗುರುತಿಸಿ</string>\n    <string name=\"action_mark_as_unread\">ಓದಿಲ್ಲ ಎಂದು ಗುರುತಿಸಿ</string>\n    <string name=\"action_mark_as_read\">ಓದಿರುವುದಾಗಿ ಗುರುತಿಸು</string>\n    <string name=\"action_select_inverse\">ಎಲ್ಲವನ್ನೂ ತ್ಯಜಿಸಿ</string>\n    <string name=\"action_select_all\">ಎಲ್ಲವನ್ನು ಆರಿಸು</string>\n    <string name=\"action_global_search\">ಎಲ್ಲೆಡೆ ಹುಡುಕಿ</string>\n    <string name=\"action_search\">ಹುಡುಕಿ</string>\n    <string name=\"action_sort_latest_chapter\">ಇತ್ತೀಚಿನ ಅಧ್ಯಾಯ</string>\n    <string name=\"action_sort_last_read\">ಕೊನೆಯದಾಗಿ ಓದಿದ</string>\n    <string name=\"action_sort_total\">ಒಟ್ಟು ಅಧ್ಯಾಯಗಳು</string>\n    <string name=\"action_sort_alpha\">ವರ್ಣಮಾಲೆಯ ಪ್ರಕಾರ</string>\n    <string name=\"action_filter_empty\">ಸೋಸು ತೆಗೆದುಹಾಕಿ</string>\n    <string name=\"action_filter_unread\">ಓದದ</string>\n    <string name=\"action_filter_bookmarked\">ಬುಕ್ಮಾರ್ಕ್ ಮಾಡಿದ</string>\n    <string name=\"action_filter\">ಸೋಸು</string>\n    <string name=\"action_menu\">ಸಲಹಾಕಾರ</string>\n    <string name=\"action_settings\">ಸಂಯೋಜನೆಗಳು</string>\n    <string name=\"history\">ಇತಿಹಾಸ</string>\n    <string name=\"track\">ಟ್ರ್ಯಾಕಿಂಗ್</string>\n    <string name=\"chapters\">ಅಧ್ಯಾಯಗಳು</string>\n    <string name=\"manga\">ಮಾಂಗಾ</string>\n    <string name=\"categories\">ವರ್ಗಗಳು</string>\n    <string name=\"information_empty_category\">ನೀವು ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ವರ್ಗ ಒಂದನ್ನು ರಚಿಸಲು ಪ್ಲಸ್ ಬಟನ್ ಒತ್ತಿರಿ.</string>\n    <string name=\"information_empty_library\">ನಿಮ್ಮ ಲೈಬ್ರರಿ ಖಾಲಿಯಾಗಿದೆ, ಯಾವುದೇ ಮೂಲದಿಂದ ನಿಮ್ಮ ಲೈಬ್ರರಿಗೆ ಸರಣಿಯನ್ನು ಸೇರಿಸಿ.</string>\n    <string name=\"information_no_recent_manga\">ಇತ್ತೀಚೆಗೆ ಏನೂ ಓದಿಲ್ಲ</string>\n    <string name=\"information_no_recent\">ಹೊಸ ನವೀಕರಣಗಳಿಲ್ಲ</string>\n    <string name=\"information_no_downloads\">ಡೌನ್‌ಲೋಡ್‌ಗಳಿಲ್ಲ</string>\n    <string name=\"label_help\">ಸಹಾಯ</string>\n    <string name=\"label_extension_info\">ವಿಸ್ತರಣೆ ಮಾಹಿತಿ</string>\n    <string name=\"label_extensions\">ವಿಸ್ತರಣೆಗಳು</string>\n    <string name=\"label_migration\">ಮೂಲ ಸ್ಥಳಾಂತರ</string>\n    <string name=\"label_backup\">ಬ್ಯಾಕಪ್ ಮತ್ತು ಮರುಸ್ಥಾಪನೆ</string>\n    <string name=\"label_sources\">ಮೂಲಗಳು</string>\n    <string name=\"label_recent_manga\">ಇತಿಹಾಸ</string>\n    <string name=\"label_recent_updates\">ನವೀಕರಣಗಳು</string>\n    <string name=\"label_library\">ಗ್ರಂಥಾಲಯ</string>\n    <string name=\"label_download_queue\">ಡೌನ್‌ಲೋಡ್ ಸಾಲು</string>\n    <string name=\"label_settings\">ಸಂಯೋಜನೆಗಳು</string>\n    <string name=\"label_more\">ಇನ್ನಷ್ಟು</string>\n    <string name=\"name\">ಹೆಸರು</string>\n    <string name=\"restore_duration\">%02d ನಿಮಿಷ, %02d ಸೆಕೆಂಡು</string>\n    <string name=\"restore_completed\">ಮರುಸ್ಥಾಪನೆ ಪೂರ್ಣಗೊಂಡಿದೆ</string>\n    <string name=\"backup_created\">ಬ್ಯಾಕಪ್ ರಚಿಸಲಾಗಿದೆ</string>\n    <string name=\"pref_backup_interval\">ಬ್ಯಾಕಪ್ ಆವರ್ತನ</string>\n    <string name=\"pref_restore_backup_summ\">ಬ್ಯಾಕಪ್ ಫೈಲ್‌ನಿಂದ ಗ್ರಂಥಾಲಯವನ್ನು ಮರುಸ್ಥಾಪಿಸಿ</string>\n    <string name=\"pref_restore_backup\">ಬ್ಯಾಕಪ್ ಮರುಸ್ಥಾಪಿಸಿ</string>\n    <string name=\"pref_create_backup_summ\">ಪ್ರಸ್ತುತ ಗ್ರಂಥಾಲಯವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲು ಬಳಸಬಹುದು</string>\n    <string name=\"pref_create_backup\">ಬ್ಯಾಕಪ್ ರಚಿಸಿ</string>\n    <string name=\"tracking_info\">ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇವೆಗಳಲ್ಲಿ ಅಧ್ಯಾಯದ ಪ್ರಗತಿಯನ್ನು ನವೀಕರಿಸಲು ಏಕಮುಖ ಸಿಂಕ್. ಅವರ ಟ್ರ್ಯಾಕಿಂಗ್ ಬಟನ್ ನಿಂದ ಪ್ರತ್ಯೇಕ ಮಾಂಗಾ ನಮೂದುಗಳಿಗಾಗಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಅನ್ನು ಹೊಂದಿಸಿ.</string>\n    <string name=\"services\">ಸೇವೆಗಳು</string>\n    <string name=\"pref_auto_update_manga_sync\">ಓದಿದ ನಂತರ ಅಧ್ಯಾಯದ ಪ್ರಗತಿಯನ್ನು ನವೀಕರಿಸಿ</string>\n    <string name=\"pref_download_new\">ಹೊಸ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ</string>\n    <string name=\"fifth_to_last\">ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಐದನೆಯದು</string>\n    <string name=\"fourth_to_last\">ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ನಾಲ್ಕನೆಯದು</string>\n    <string name=\"third_to_last\">ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಮೂರನೆಯದು</string>\n    <string name=\"second_to_last\">ಕೊನೆಯ ಅಧ್ಯಾಯದಿಂದ ಎರಡನೆಯದು</string>\n    <string name=\"last_read_chapter\">ಕೊನೆಯದಾಗಿ ಓದಿದ ಅಧ್ಯಾಯ</string>\n    <string name=\"disabled\">ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ</string>\n    <string name=\"pref_remove_after_read\">ಓದಿದ ನಂತರ</string>\n    <string name=\"pref_remove_after_marked_as_read\">ಓದಿದಂತೆ ಗುರುತಿಸಿದಾಗ ತೆಗೆದುಹಾಕಿ</string>\n    <string name=\"pref_webtoon_side_padding\">ಸೈಡ್ ಪ್ಯಾಡಿಂಗ್</string>\n    <string name=\"pref_category_reading\">ಓದುತ್ತಿರುವ</string>\n    <string name=\"pref_always_show_chapter_transition\">ಅಧ್ಯಾಯ ಪರಿವರ್ತನೆಯನ್ನು ಯಾವಾಗಲೂ ತೋರಿಸಿ</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"rotation_force_landscape\">ಲಾಕ್ ಮಾಡಿದ ಅಗಲಚಿತ್ರ</string>\n    <string name=\"rotation_force_portrait\">ಲಾಕ್ ಮಾಡಿದ ಉದ್ದಚಿತ್ರ</string>\n    <string name=\"rotation_free\">ಉಚಿತ</string>\n    <string name=\"pref_rotation_type\">ಡೀಫಾಲ್ಟ್ ತಿರುಗುವಿಕೆ ಪ್ರಕಾರ</string>\n    <string name=\"double_tap_anim_speed_fast\">ವೇಗವಾಗಿ</string>\n    <string name=\"double_tap_anim_speed_normal\">ಸಾಮಾನ್ಯ</string>\n    <string name=\"double_tap_anim_speed_0\">ಅನಿಮೇಷನ್ ಇಲ್ಲ</string>\n    <string name=\"zoom_start_center\">ಮಧ್ಯ</string>\n    <string name=\"zoom_start_right\">ಬಲ</string>\n    <string name=\"zoom_start_left\">ಎಡ</string>\n    <string name=\"zoom_start_automatic\">ಸ್ವಯಂಚಾಲಿತ</string>\n    <string name=\"pref_zoom_start\">ಪ್ರಾರಂಭದ ಸ್ಥಾನವನ್ನು ಜೂಮ್ ಮಾಡಿ</string>\n    <string name=\"scale_type_smart_fit\">ಚತುರತೆಯಿಂದ್ ಹೊಂದಿಸಿ</string>\n    <string name=\"scale_type_original_size\">ಮೂಲ ಗಾತ್ರ</string>\n    <string name=\"scale_type_fit_height\">ಎತ್ತರ ಹೊಂದಿಸಿ</string>\n    <string name=\"scale_type_fit_width\">ಅಗಲ ಹೊಂದಿಸಿ</string>\n    <string name=\"scale_type_stretch\">ಹಿಗ್ಗಿಸು</string>\n    <string name=\"scale_type_fit_screen\">ಪರದೆಯನ್ನು ಹೊಂದಿಸಿ</string>\n    <string name=\"pref_image_scale_type\">ಪ್ರಮಾಣದ ಪ್ರಕಾರ</string>\n    <string name=\"pager_viewer\">ಪುಟ ಸಂಯೋಜನೆಗಳು</string>\n    <string name=\"vertical_plus_viewer\">ನಿರಂತರ ಲಂಬ</string>\n    <string name=\"webtoon_viewer\">ವೆಬ್‌ಟೂನ್</string>\n    <string name=\"vertical_viewer\">ಲಂಬ</string>\n    <string name=\"right_to_left_viewer\">ಬಲದಿಂದ ಎಡಕ್ಕೆ</string>\n    <string name=\"left_to_right_viewer\">ಎಡದಿಂದ ಬಲಕ್ಕೆ</string>\n    <string name=\"pref_viewer_type\">ಡೀಫಾಲ್ಟ್ ಓದುವ ರೀತಿ</string>\n    <string name=\"black_background\">ಕಪ್ಪು</string>\n    <string name=\"gray_background\">ಬೂದು</string>\n    <string name=\"white_background\">ಬಿಳಿ</string>\n    <string name=\"pref_reader_theme\">ಹಿನ್ನೆಲೆ ಬಣ್ಣ</string>\n    <string name=\"pref_read_with_long_tap\">ಲಾಂಗ್ ಟ್ಯಾಪ್‌ನಲ್ಲಿ ತೋರಿಸಿ</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">ಧ್ವನಿ ಕೀಲಿಗಳನ್ನು ಬದಲಿಮಾಡಿ</string>\n    <string name=\"pref_read_with_volume_keys\">ಧ್ವನಿ ಕೀಲಿಗಳು</string>\n    <string name=\"pref_reader_navigation\">ನ್ಯಾವಿಗೇಷನ್</string>\n    <string name=\"pref_skip_filtered_chapters\">ಫಿಲ್ಟರ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಿ</string>\n    <string name=\"pref_skip_read_chapters\">ಓದಿದ ಗುರುತು ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಿ</string>\n    <string name=\"pref_keep_screen_on\">ಪರದೆಯನ್ನು ಆನ್ ಮಾಡಿ ಇರಿಸಿ</string>\n    <string name=\"filter_mode_darken\">ಬರ್ನ್ / ಡಾರ್ಕನ್</string>\n    <string name=\"filter_mode_lighten\">ಡಾಡ್ಜ್ / ಹಗುರಗೊಳಿಸಿ</string>\n    <string name=\"filter_mode_screen\">ಪರದೆ</string>\n    <string name=\"filter_mode_multiply\">ಗುಣಿಸಿ</string>\n    <string name=\"filter_mode_overlay\">ಒವರ್ಲೆ</string>\n    <string name=\"pref_color_filter_mode\">ಬಣ್ಣಗಳು ಫಿಲ್ಟರ್ ಮಿಶ್ರಣ ರೀತಿ</string>\n    <string name=\"pref_custom_color_filter\">ಕಸ್ಟಮ್ ಬಣ್ಣಗಳ ಫಿಲ್ಟರ್</string>\n    <string name=\"pref_custom_brightness\">ಕಸ್ಟಮ್ ಬೆಳಕು</string>\n    <string name=\"pref_crop_borders\">ಗಡಿಗಳನ್ನು ಕತ್ತರಿಸಿ</string>\n    <string name=\"pref_show_page_number\">ಪುಟ ಸಂಖ್ಯೆಯನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"pref_double_tap_anim_speed\">ಡಬಲ್ ಟ್ಯಾಪ್ ಅನಿಮೇಷನ್ ವೇಗ</string>\n    <string name=\"pref_page_transitions\">ಪುಟ ಪರಿವರ್ತನೆಗಳನ್ನು ಅನಿಮೇಟ್ ಮಾಡಿ</string>\n    <string name=\"pref_cutout_short\">ಕಟೌಟ್ ಆದಂತಹ ಪ್ರದೇಶದಲ್ಲಿ ವಿಷಯವನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"pref_fullscreen\">ಪೂರ್ಣ ಪರದೆ</string>\n    <string name=\"obsolete_extension_message\">ಈ ವಿಸ್ತರಣೆ ಇನ್ನು ಮುಂದೆ ಲಭ್ಯವಿಲ್ಲ.</string>\n    <string name=\"untrusted_extension_message\">ಈ ವಿಸ್ತರಣೆಯನ್ನು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಪ್ರಮಾಣಪತ್ರದೊಂದಿಗೆ ಸಹಿ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿಲ್ಲ.\n\\n\n\\nದುರುದ್ದೇಶಪೂರಿತ ವಿಸ್ತರಣೆಯು ತಚಿಯೋಮಿಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಯಾವುದೇ ಲಾಗಿನ್ ರುಜುವಾತುಗಳನ್ನು ಓದಬಹುದು ಅಥವಾ ಅನಿಯಂತ್ರಿತ ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು.\n\\n\n\\nಈ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನಂಬುವ ಮೂಲಕ ನೀವು ಈ ಅಪಾಯಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ.</string>\n    <string name=\"untrusted_extension\">ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ವಿಸ್ತರಣೆ</string>\n    <string name=\"ext_uninstall\">ಅನ್ಇನ್ಸ್ಟಾಲ್</string>\n    <string name=\"ext_untrusted\">ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲ</string>\n    <string name=\"ext_trust\">ನ೦ಬು</string>\n    <string name=\"ext_installed\">ಇನ್ಸ್ಟಾಲ್ಲ್ಡ್</string>\n    <string name=\"ext_installing\">ಇನ್ಸ್ಟಾಲಿಂಗ್</string>\n    <string name=\"ext_downloading\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"ext_pending\">ಬಾಕಿ ಉಳಿದಂತಹ</string>\n    <string name=\"ext_install\">ಇನ್ಸ್ಟಾಲ್</string>\n    <string name=\"ext_obsolete\">ಬಳಕೆಯಲ್ಲಿಲ್ಲದ</string>\n    <string name=\"ext_update\">ನವೀಕರಿಸಿ</string>\n    <string name=\"ext_updates_pending\">ಬಾಕಿ ಉಳಿದಿರುವ ನವೀಕರಣಗಳು</string>\n    <string name=\"all\">ಎಲ್ಲಾ</string>\n    <string name=\"default_category_summary\">ಯಾವಾಗಲೂ ಕೇಳಿ</string>\n    <string name=\"default_category\">ಡೀಫಾಲ್ಟ್ ವರ್ಗ</string>\n    <string name=\"pref_update_only_non_completed\">ಚಾಲ್ತಿಯಿರುವ ಮಾಂಗಾವನ್ನು ಮಾತ್ರ ನವೀಕರಿಸಿ</string>\n    <string name=\"charging\">ಚಾರ್ಜಿಂಗ್</string>\n    <string name=\"pref_library_update_restriction\">ನವೀಕರಣ ನಿರ್ಬಂಧಗಳು</string>\n    <string name=\"update_weekly\">ವಾರಕ್ಕೊಮ್ಮೆ</string>\n    <string name=\"update_48hour\">ಪ್ರತಿ 2 ದಿನಗಳಿಗೊಮ್ಮೆ</string>\n    <string name=\"update_24hour\">ಪ್ರತಿದಿನ</string>\n    <string name=\"update_12hour\">ಪ್ರತಿ 12 ಗಂಟೆಗಳಿಗೊಮ್ಮೆ</string>\n    <string name=\"update_6hour\">ಪ್ರತಿ 6 ಗಂಟೆಗಳಿಗೊಮ್ಮೆ</string>\n    <string name=\"update_never\">ಸ್ವಂತ ಮಾಡು</string>\n    <string name=\"pref_library_update_interval\">ನವೀಕರಣ ಆವರ್ತನ</string>\n    <string name=\"pref_category_library_update\">ನವೀಕರಣಗಳು</string>\n    <string name=\"channel_ext_updates\">ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು</string>\n    <string name=\"channel_new_chapters\">ಅಧ್ಯಾಯ ನವೀಕರಣಗಳು</string>\n    <string name=\"channel_common\">ಸಾಮಾನ್ಯ</string>\n    <string name=\"download_notifier_download_paused\">ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"download_notifier_no_network\">ಯಾವುದೇ ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ</string>\n    <string name=\"download_notifier_text_only_wifi\">ಯಾವುದೇ ವೈ-ಫೈ ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ</string>\n    <string name=\"download_notifier_unknown_error\">ಅನಿರೀಕ್ಷಿತ ದೋಷದಿಂದಾಗಿ ಅಧ್ಯಾಯವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</string>\n    <string name=\"download_notifier_title_error\">ದೋಷ</string>\n    <string name=\"download_notifier_downloader_title\">ಡೌನ್‌ಲೋಡರ್</string>\n    <string name=\"information_webview_outdated\">ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಗಾಗಿ ದಯವಿಟ್ಟು ವೆಬ್‌ವೀಕ್ಷಣೆ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನವೀಕರಿಸಿ</string>\n    <string name=\"information_webview_required\">ತಚಿಯೋಮಿಗೆ ವೆಬ್‌ವೀಕ್ಷಣೆ ಅಗತ್ಯವಿದೆ</string>\n    <string name=\"information_cloudflare_bypass_failure\">ಕ್ಲೌಡ್‌ಫ್ಲೇರ್ ಅನ್ನು ಬೈಪಾಸ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</string>\n    <string name=\"update_check_notification_update_available\">ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ!</string>\n    <string name=\"update_check_notification_download_error\">ಡೌನ್‌ಲೋಡ್ ದೋಷ</string>\n    <string name=\"update_check_notification_download_complete\">ಡೌನ್‌ಲೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ</string>\n    <string name=\"update_check_notification_download_in_progress\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…</string>\n    <string name=\"update_check_no_new_updates\">ಹೊಸ ನವೀಕರಣಗಳು ಲಭ್ಯವಿಲ್ಲ</string>\n    <string name=\"update_check_confirm\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ</string>\n    <string name=\"file_select_backup\">ಬ್ಯಾಕಪ್ ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ</string>\n    <string name=\"file_select_cover\">ಕವರ್ ಇಮೇಜ್ ಆಯ್ಕೆಮಾಡಿ</string>\n    <string name=\"notification_first_add_to_library\">ಇದನ್ನು ಮಾಡುವ ಮೊದಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಮಾಂಗಾವನ್ನು ಸೇರಿಸಿ</string>\n    <string name=\"notification_cover_update_failed\">ಕವರ್ ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ</string>\n    <string name=\"notification_chapters_multiple\">ಅಧ್ಯಾಯಗಳು %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">ಅಧ್ಯಾಯ %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು</string>\n    <string name=\"notification_chapters_single\">ಅಧ್ಯಾಯ %1$s</string>\n    <string name=\"notification_new_chapters\">ಹೊಸ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿವೆ</string>\n    <string name=\"download_queue_error\">ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಡೌನ್‌ಲೋಡ್‌ಗಳ ವಿಭಾಗದಲ್ಲಿ ನೀವು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಬಹುದು</string>\n    <string name=\"copy\">ನಕಲಿಸಿ</string>\n    <string name=\"migrate\">ಸ್ಥಳಾಂತರಿಸಿ</string>\n    <string name=\"migration_selection_prompt\">ಮಾಂಗಾ ಸ್ಥಳಾಂತರಗೊಳಿಸಲು ಮೂಲವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>\n    <string name=\"migration_dialog_what_to_include\">ಸೇರಿಸಲು ಡೇಟಾವನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>\n    <string name=\"recent_manga_time\">ಅಧ್ಯಾಯ. %1$s - %2$s</string>\n    <string name=\"updating_library\">ಗ್ರಂಥಾಲಯವನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"transition_pages_error\">ಪುಟಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ: %1$s</string>\n    <string name=\"transition_pages_loading\">ಪುಟಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…</string>\n    <string name=\"transition_no_previous\">ಹಿಂದಿನ ಅಧ್ಯಾಯವಿಲ್ಲ</string>\n    <string name=\"transition_no_next\">ಮುಂದಿನ ಅಧ್ಯಾಯವಿಲ್ಲ</string>\n    <string name=\"transition_next\">ಮುಂದಿನದು:</string>\n    <string name=\"transition_previous\">ಹಿಂದಿನದು:</string>\n    <string name=\"transition_current\">ಪ್ರಸ್ತುತ:</string>\n    <string name=\"transition_finished\">ಮುಗಿದಿದೆ:</string>\n    <string name=\"viewer\">ಓದುವಿಕೆ ರೀತಿ</string>\n    <string name=\"pref_category_for_this_series\">ಈ ಸರಣಿಗಾಗಿ</string>\n    <string name=\"confirm_set_image_as_cover\">ಈ ಚಿತ್ರವನ್ನು ಕವರ್ ಆರ್ಟ್ ಆಗಿ ಬಳಸುವುದೇ?</string>\n    <string name=\"decode_image_error\">ಈ ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ</string>\n    <string name=\"no_next_chapter\">ಮುಂದಿನ ಅಧ್ಯಾಯ ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"chapter_progress\">ಪುಟ: %1$d</string>\n    <string name=\"cover_updated\">ಕವರ್ ನವೀಕರಿಸಲಾಗಿದೆ</string>\n    <string name=\"set_as_cover\">ಕವರ್ ಆಗಿ ಹೊಂದಿಸಿ</string>\n    <string name=\"custom_filter\">ಕಸ್ಟಮ್ ಫಿಲ್ಟರ್</string>\n    <string name=\"picture_saved\">ಚಿತ್ರ ಉಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"dialog_with_checkbox_reset\">ಈ ಮಾಂಗಾದ ಎಲ್ಲಾ ಅಧ್ಯಾಯಗಳನ್ನು ಮರುಹೊಂದಿಸಿ</string>\n    <string name=\"dialog_with_checkbox_remove_description\">ಇದು ಈ ಅಧ್ಯಾಯದ ಓದುವ ದಿನಾಂಕವನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ?</string>\n    <string name=\"snack_categories_deleted\">ವರ್ಗಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"error_category_exists\">ಈ ಹೆಸರಿನ ವರ್ಗವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ!</string>\n    <string name=\"track_type\">ಮಾದರಿ</string>\n    <string name=\"track_status\">ಸ್ಥಿತಿ</string>\n    <string name=\"status\">ಸ್ಥಿತಿ</string>\n    <string name=\"repeating\">ಪುನಃ ಓದುತ್ತಿರುವ</string>\n    <string name=\"title\">ಶೀರ್ಷಿಕೆ</string>\n    <string name=\"score\">ಅಂಕ</string>\n    <string name=\"plan_to_read\">ಓದಲು ಯೋಜನೆ</string>\n    <string name=\"paused\">ವಿರಾಮಗೊಳಿಸಲಾದ</string>\n    <string name=\"on_hold\">ತಡೆಹಿಡಿಯಲಾದ</string>\n    <string name=\"dropped\">ಕೈಬಿಡಲಾದ</string>\n    <string name=\"completed\">ಪೂರ್ಣಗೊಂಡಿದೆ</string>\n    <string name=\"reading\">ಓದುತ್ತಿರುವ</string>\n    <string name=\"add_tracking\">ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇರಿಸಿ</string>\n    <string name=\"manga_tracking_tab\">ಟ್ರ್ಯಾಕಿಂಗ್</string>\n    <string name=\"confirm_delete_chapters\">ಆಯ್ದ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>\n    <string name=\"download_unread\">ಓದದ</string>\n    <string name=\"manga_download\">ಡೌನ್‌ಲೋಡ್</string>\n    <string name=\"sort_by_number\">ಅಧ್ಯಾಯದ ಸಂಖ್ಯೆಯ ಪ್ರಕಾರ</string>\n    <string name=\"sort_by_source\">ಮೂಲದ ಪ್ರಕಾರ</string>\n    <string name=\"show_chapter_number\">ಅಧ್ಯಾಯ ಸಂಖ್ಯೆ</string>\n    <string name=\"show_title\">ಮೂಲ ಶೀರ್ಷಿಕೆ</string>\n    <string name=\"chapter_paused\">ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"chapter_error\">ದೋಷ</string>\n    <string name=\"chapter_downloading_progress\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">ಅಧ್ಯಾಯ %1$s</string>\n    <string name=\"snack_add_to_library\">ಮಾಂಗಾವನ್ನು ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸುವುದೇ?</string>\n    <string name=\"source_not_installed\">ಮೂಲವನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ: %1$s</string>\n    <string name=\"copied_to_clipboard\">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ:\n\\n%1$s</string>\n    <string name=\"delete_downloads_for_manga\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸುವುದೇ?</string>\n    <string name=\"manga_info_collapse\">ಕಡಿಮೆ</string>\n    <string name=\"manga_info_expand\">ಹೆಚ್ಚು</string>\n    <string name=\"manga_removed_library\">ಗ್ರಂಥಾಲಯದಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ</string>\n    <string name=\"manga_added_library\">ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸಲಾಗಿದೆ</string>\n    <string name=\"remove_from_library\">ಗ್ರಂಥಾಲಯದಿಂದ ತೆಗೆದುಹಾಕಿ</string>\n    <string name=\"in_library\">ಗ್ರಂಥಾಲಯದಲ್ಲಿರುವ</string>\n    <string name=\"add_to_library\">ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸಿ</string>\n    <string name=\"licensed\">ಪರವಾನಗಿ ಪಡೆದ</string>\n    <string name=\"unknown\">ಗೊತ್ತಿರದ</string>\n    <string name=\"ongoing\">ಪ್ರಗತಿಯಲ್ಲಿರುವ</string>\n    <string name=\"local_source_help_guide\">ಲೋಕಲ್ ಮೂಲದ ಮಾರ್ಗದರ್ಶಿ</string>\n    <string name=\"browse\">ಬ್ರೌಸ್</string>\n    <string name=\"latest\">ಹೊಸದಾದ</string>\n    <string name=\"action_global_search_hint\">ಎಲ್ಲೆಡೆ ಹುಡುಕಿ…</string>\n    <string name=\"pinned_sources\">ಪಿನ್ ಮಾಡಿದ</string>\n    <string name=\"last_used_source\">ಕೊನೆಯದಾಗಿ ಉಪಯೋಗಿಸಿದ</string>\n    <string name=\"other_source\">ಇತರೆ</string>\n    <string name=\"local_source\">ಲೋಕಲ್ ಮೂಲ</string>\n    <string name=\"no_results_found\">ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬರಲಿಲ್ಲ</string>\n    <string name=\"no_more_results\">ಹೆಚ್ಚಿನ ಫಲಿತಾಂಶಗಳಿಲ್ಲ</string>\n    <string name=\"updating_category\">ವರ್ಗವನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"unknown_error\">ಅಜ್ಞಾತ ದೋಷ</string>\n    <string name=\"logout_success\">ನೀವು ಈಗ ಲಾಗ್ ಔಟ್ ಆಗಿದ್ದೀರಿ</string>\n    <string name=\"logout\">ಲಾಗ್ ಔಟ್</string>\n    <string name=\"logout_title\">%1$s ನಿಂದ ಲಾಗ್ ಔಟ್ ಆಗುವುದೇ?</string>\n    <string name=\"login_success\">ಲಾಗ್ ಇನ್ ಮಾಡಲಾಗಿದೆ</string>\n    <string name=\"login\">ಲಾಗಿನ್</string>\n    <string name=\"password\">ಪಾಸ್ ವರ್ಡ್</string>\n    <string name=\"email\">ಇಮೇಲ್ ವಿಳಾಸ</string>\n    <string name=\"username\">ಬಳಕೆದಾರ ಹೆಸರು</string>\n    <string name=\"login_title\">%1$s ಗೆ ಲಾಗ್ ಇನ್ ಮಾಡಿ</string>\n    <string name=\"downloaded_only_summary\">ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದ ಎಲ್ಲಾ ಮಾಂಗಾವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡುತ್ತದೆ</string>\n    <string name=\"label_downloaded_only\">ಡೌನ್ಲೋಡ್ ಮಾಡಿದ</string>\n    <string name=\"pref_acra_summary\">ಯಾವುದೇ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ</string>\n    <string name=\"pref_enable_acra\">ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಕಳುಹಿಸಿ</string>\n    <string name=\"check_for_updates\">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ</string>\n    <string name=\"licenses\">ಓಪನ್ ಸೋರ್ಸ್ ಪರವಾನಗಿಗಳು</string>\n    <string name=\"version\">ಆವೃತ್ತಿ</string>\n    <string name=\"website\">ವೆಬ್ಸೈಟ್</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">ಡಿವೈಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಲಾಗಲಿಲ್ಲ</string>\n    <string name=\"battery_optimization_disabled\">ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ಈಗಾಗಲೇ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"pref_disable_battery_optimization_summary\">ಹಿನ್ನೆಲೆ ಗ್ರಂಥಾಲಯದ ನವೀಕರಣಗಳು ಮತ್ತು ಬ್ಯಾಕಪ್‌ಗಳೊಂದಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ</string>\n    <string name=\"pref_disable_battery_optimization\">ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</string>\n    <string name=\"pref_refresh_library_covers\">ಗ್ರಂಥಾಲಯದ ಮಾಂಗಾ ಕವರ್‌ಗಳನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ</string>\n    <string name=\"clear_database_completed\">ನಮೂದುಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"clear_database_confirmation\">ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ? ಅಧ್ಯಾಯಗಳು ಗ್ರಂಥಾಲಯೇತರ ಮಾಂಗಾದ ಓದು ಮತ್ತು ಪ್ರಗತಿ ಕಳೆದುಹೋಗುತ್ತದೆ</string>\n    <string name=\"pref_clear_database_summary\">ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ಇಲ್ಲದ ಮಾಂಗಾದ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಿ</string>\n    <string name=\"pref_clear_database\">ಡೇಟಾಬೇಸ್ ತೆರವುಗೊಳಿಸಿ</string>\n    <string name=\"cookies_cleared\">ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"pref_clear_cookies\">ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ</string>\n    <string name=\"cache_delete_error\">ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ</string>\n    <string name=\"cache_deleted\">ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ. %1$d ಫೈಲ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"used_cache\">ಬಳಸಲಾಗಿದೆ: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">ಅಧ್ಯಾಯ ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸಿ</string>\n    <string name=\"restoring_backup_canceled\">ಮರುಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"restoring_backup_error\">ಬ್ಯಾಕಪ್ ಮರುಸ್ಥಾಪಿಸುವುದು ವಿಫಲವಾಗಿದೆ</string>\n    <string name=\"restoring_backup\">ಬ್ಯಾಕಪ್ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"restore_in_progress\">ಮರುಸ್ಥಾಪನೆ ಈಗಾಗಲೇ ಪ್ರಗತಿಯಲ್ಲಿದೆ</string>\n    <string name=\"creating_backup_error\">ಬ್ಯಾಕಪ್ ವಿಫಲವಾಗಿದೆ</string>\n    <string name=\"creating_backup\">ಬ್ಯಾಕಪ್ ರಚಿಸಲಾಗುತ್ತಿದೆ</string>\n    <string name=\"backup_choice\">ನೀವು ಏನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಬಯಸುತ್ತೀರಿ?</string>\n    <string name=\"backup_in_progress\">ಬ್ಯಾಕಪ್ ಈಗಾಗಲೇ ಪ್ರಗತಿಯಲ್ಲಿದೆ</string>\n    <string name=\"sort_by_upload_date\">ಅಪ್‌ಲೋಡ್ ದಿನಾಂಕದ ಮೂಲಕ</string>\n    <string name=\"label_data\">ಡೇಟಾ</string>\n    <string name=\"backup_restore_missing_sources\">ಕಾಣೆಯಾದ ಮೂಲಗಳು:</string>\n    <string name=\"invalid_backup_file_missing_manga\">ಬ್ಯಾಕಪ್ ಯಾವುದೇ ಮಾಂಗಾವನ್ನು ಹೊಂದಿಲ್ಲ.</string>\n    <string name=\"invalid_backup_file\">ಬ್ಯಾಕಪ್ ಫೈಲ್ ಅಮಾನ್ಯವಾಗಿದೆ</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">ಗ್ರಂಥಾಲಯವನ್ನು ನವೀಕರಿಸುವಾಗ ಹೊಸ ಕವರ್ ಮತ್ತು ವಿವರಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ</string>\n    <string name=\"pref_library_update_refresh_metadata\">ಮೆಟಾಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಿ</string>\n    <string name=\"action_migrate\">ಮೂಲ ಸ್ಥಳಾಂತರ</string>\n    <string name=\"page_list_empty_error\">ಯಾವುದೇ ಪುಟಗಳು ಸಿಕ್ಕಿಲ್ಲ</string>\n    <string name=\"tabs_header\">ಟ್ಯಾಬ್‌ಗಳು</string>\n    <string name=\"pref_show_reading_mode_summary\">ರೀಡರ್ ತೆರೆದಾಗ ಪ್ರಸ್ತುತ ಮೋಡ್ ಅನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ತೋರಿಸಿ</string>\n    <string name=\"pref_show_reading_mode\">ಓದುವ ರೀತಿ ತೋರಿಸಿ</string>\n    <string name=\"action_display_show_tabs\">ವರ್ಗ ಟ್ಯಾಬ್‌ಗಳನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"action_display_comfortable_grid\">ಆರಾಮದಾಯಕ ಗ್ರಿಡ್</string>\n    <string name=\"action_disable_all\">ಎಲ್ಲವನ್ನೂ ನಿಷ್ಕ್ರಿಯೆಗೊಳಿಸಿ</string>\n    <string name=\"action_enable_all\">ಎಲ್ಲವನ್ನೂ ಸಕ್ರಿಯಗೊಳಿಸಿ</string>\n    <string name=\"action_start\">ಪ್ರಾರಂಭ</string>\n    <string name=\"loader_not_implemented_error\">ಮೂಲ ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"action_disable\">ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</string>\n    <string name=\"tapping_inverted_both\">ಎರಡೂ</string>\n    <string name=\"tapping_inverted_vertical\">ಉದ್ದದ</string>\n    <string name=\"tapping_inverted_horizontal\">ಅಡ್ಡ</string>\n    <string name=\"tapping_inverted_none\">ಯಾವುದು ಅಲ್ಲ</string>\n    <string name=\"pref_read_with_tapping_inverted\">ಟ್ಯಾಪಿಂಗ ಅನ್ನು ತಿರುಗಿಸಿ</string>\n    <string name=\"download_insufficient_space\">ಕಡಿಮೆ ಶೇಖರಣಾ ಸ್ಥಳದ ಕಾರಣ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</string>\n    <string name=\"unknown_status\">ಅಜ್ಞಾತ ಸ್ಥಿತಿ</string>\n    <string name=\"unknown_author\">ಅಜ್ಞಾತ ಲೇಖಕ</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" ಅನ್ನು ಗ್ಲೋಬಲ್ ಸರ್ಚ್ ಮಾಡಿ</string>\n    <string name=\"updated_version\">v%1$s ಗೆ ಅಪ್ಡೇಟ್ ಆಗಿದೆ</string>\n    <string name=\"whats_new\">ಹೊಸತೇನಿದೆ</string>\n    <string name=\"requires_app_restart\">ಅನ್ವಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್ ಮರುಪ್ರಾರಂಭದ ಅಗತ್ಯವಿದೆ</string>\n    <string name=\"label_network\">ಅಡ್ವಾನ್ಸ್ಡ್ ಸೆಕ್ಷನ್</string>\n    <string name=\"pref_category_reading_mode\">ಓದುವ ಮೊಡ್</string>\n    <string name=\"pref_category_theme\">ಜನರಲ್ ಸೆಲೆಕ್ಷನ್</string>\n    <string name=\"action_sort_date_added\">ಹಾಕಿದ್ದ ದಿನಾಂಕ</string>\n    <string name=\"no_pinned_sources\">ಯಾವುದೆ ಪಿನ್ ಮಾಡಿರುವ ಸೋರ್ಸ್ ಗಳು ಇಲ್ಲ</string>\n    <string name=\"channel_complete\">ಪೂರ್ಣ</string>\n    <string name=\"channel_progress\">ಪ್ರಗತಿ</string>\n    <string name=\"parental_controls_info\">ಇದು ಅನಧಿಕೃತ ಮತ್ತು ತಪ್ಪಾಗಿ ಚಿಹ್ನಿಸಿದ ವಿಸ್ತರಣೆಗಳಿಂದ 18+ ಮೂಲಗಳನ್ನು ಮರೆಮಾಚಲಾಗುವುದಿಲ್ಲ.</string>\n    <string name=\"channel_errors\">ದೋಷಗಳು</string>\n    <string name=\"chapter_settings_updated\">ಅಧ್ಯಾಯದ ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ</string>\n    <string name=\"share_page_info\">%1$s: %2$s, ಪುಟ %3$d</string>\n    <string name=\"no_chapters_error\">ಯಾವುದೇ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"set_chapter_settings_as_default\">ಡೀಫಾಲ್ಟ್ ಆಗಿ ಹೊಂದಿಸಿ</string>\n    <string name=\"also_set_chapter_settings_for_library\">ನನ್ನ ಗ್ರಂಥಾಲಯದಲ್ಲಿರುವ ಎಲ್ಲಾ ಮಾಂಗಾಗಳಿಗೂ ಅನ್ವಯಿಸಿ</string>\n    <string name=\"confirm_set_chapter_settings\">ಈ ಸೆಟ್ಟಿಂಗ್ ಗಳನ್ನು ಡೀಫಾಲ್ಟ್ ರೂಪದಲ್ಲಿ ಉಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>\n    <string name=\"chapter_settings\">ಅಧ್ಯಾಯದ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</string>\n    <string name=\"downloaded_chapters\">ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳು</string>\n    <string name=\"manga_from_library\">ಗ್ರಂಥಾಲಯದಿಂದ ಮಾಂಗಾ</string>\n    <string name=\"backup_restore_missing_trackers\">ಟ್ರ್ಯಾಕರ್ ಗಳು ಲಾಗಿನ್ ಆಗಿಲ್ಲ:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">ಬುಕ್ ಮಾರ್ಕ್ ಮಾಡಿದ ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸಿ</string>\n    <string name=\"pref_category_delete_chapters\">ಅಧ್ಯಾಯಗಳನ್ನು ಅಳಿಸಿ</string>\n    <string name=\"ext_nsfw_warning\">NSFW (18+) ವಿಷಯವನ್ನು ಹೊಂದಿರಬಹುದು</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"action_search_settings\">ಸಂಯೋಜನೆಗಳಲ್ಲಿ ಹುಡುಕಿ</string>\n    <string name=\"spen_next_page\">ಮುಂದಿನ ಪುಟ</string>\n    <string name=\"spen_previous_page\">ಹಿಂದಿನ ಪುಟ</string>\n    <string name=\"file_picker_error\">ಯಾವುದೇ ಫೈಲ್ ಪಿಕ್ಕರ್ ಅಪ್ಲಿಕೇಶನ್ ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"migration_help_guide\">ಮೂಲ ವಲಸೆ ಮಾರ್ಗದರ್ಶಿ</string>\n    <string name=\"myanimelist_relogin\">ದಯವಿಟ್ಟು ಮತ್ತೆ MAL ಗೆ ಲಾಗಿನ್ ಮಾಡಿ</string>\n    <string name=\"pref_incognito_mode_summary\">ಓದುವ ಇತಿಹಾಸವನ್ನು ವಿರಾಮಗೊಳಿಸುತ್ತದೆ</string>\n    <string name=\"pref_incognito_mode\">ಅಜ್ಞಾತ ಮೋಡ್</string>\n    <string name=\"pref_clear_history\">ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಿ</string>\n    <string name=\"clear_history_confirmation\">ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ? ಎಲ್ಲಾ ಇತಿಹಾಸವೂ ಕಳೆದುಹೋಗುತ್ತದೆ.</string>\n    <string name=\"clear_history_completed\">ಇತಿಹಾಸವನ್ನು ಅಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"pref_show_nsfw_source\">ಮೂಲಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ತೋರಿಸಿ</string>\n    <string name=\"pref_category_nsfw_content\">ವಯಸ್ಕ (18+) ಮೂಲಗಳು</string>\n    <string name=\"action_filter_tracked\">ಟ್ರ್ಯಾಕ್ ಮಾಡಲಾದ</string>\n    <string name=\"action_desc\">ಮೊದಲು ಚಿಕ್ಕದು</string>\n    <string name=\"action_asc\">ಮೊದಲ ಸಾಣ್ಣದ್ದು</string>\n    <string name=\"action_order_by_chapter_number\">ಅಧ್ಯಾಯ ಸಂಖ್ಯೆಯಿಂದ</string>\n    <string name=\"action_order_by_upload_date\">ಅಪ್ಲೋಡ್ ದಿನಾಂಕ ದಂತೆ</string>\n    <string name=\"action_display_show_number_of_items\">ವಸ್ತುಗಳ ಸಂಖ್ಯೆಯನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"action_sort_chapter_fetch_date\">ಸಿಕ್ಕ ಮಾಹಿತಿ</string>\n    <string name=\"track_finished_reading_date\">ಮುಕ್ತಾಯ ದಿನಾಂಕ</string>\n    <string name=\"track_started_reading_date\">ಆರಂಭದ ದಿನ</string>\n    <string name=\"pref_dump_crash_logs_summary\">ಡೆವಲಪರ್‌ಗಳೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ದೋಷದೆ ಲಾಗ್‌ಗಳನ್ನು ಫೈಲ್‌ಗೆ ಸೇರಿಸಿ</string>\n    <string name=\"pref_dump_crash_logs\">ಕ್ರ್ಯಾಶ್ ಲಾಗ್‌ಗಳನ್ನು ಡಂಪ್ ಮಾಡಿ</string>\n    <string name=\"pref_dns_over_https\">HTTPS ಮೇಲೆ DNS ಬಳಸಿ</string>\n    <string name=\"backup_restore_content_full\">ಬ್ಯಾಕಪ್ ಫೈಲ್‌ನಿಂದ ಡೇಟಾವನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತದೆ.\n\\n\n\\nಕಾಣೆಯಾದ ಯಾವುದೇ ವಿಸ್ತರಣೆಗಳನ್ನು ನೀವು ಪುನಃ ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸಲು ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇವೆಗಳಿಗೆ ಲಾಗ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</string>\n    <string name=\"pref_download_new_categories_details\">ಹೊರಗಿಡಲಾದ ವಿಭಾಗಗಳಲ್ಲಿ ಮಾಂಗಾವನ್ನು ಸೇರಿಸಿದ ವಿಭಾಗಗಳಲ್ಲಿದ್ದರೂ ಅವುಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</string>\n    <string name=\"pref_category_auto_download\">ಸ್ವಯಂ ಡೌನ್‌ಲೋಡ್</string>\n    <string name=\"pref_viewer_nav\">ನ್ಯಾವಿಗೇಶನ್ ಲೇಔಟ್</string>\n    <string name=\"nav_zone_right\">ಬಲಕ್ಕೆ</string>\n    <string name=\"nav_zone_left\">ಎಡಕ್ಕೆ</string>\n    <string name=\"nav_zone_next\">ಮುಂದಿನ</string>\n    <string name=\"nav_zone_prev\">ಹಿಂದಿನ</string>\n    <string name=\"right_and_left_nav\">ಬಲ ಮತ್ತು ಎಡ</string>\n    <string name=\"edge_nav\">ಅಂಚು</string>\n    <string name=\"kindlish_nav\">ಕಿಂಡಲ್-ಇಶ್</string>\n    <string name=\"l_nav\">L ಆಕಾರದ</string>\n    <string name=\"pref_dual_page_invert_summary\">ಡ್ಯುಯಲ್ ಪೇಜ್ ಸ್ಪ್ಲಿಟ್ ನ ಪ್ಲೇಸ್ ಮೆಂಟ್ ಓದುವ ದಿಕ್ಕಿಗೆ ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ</string>\n    <string name=\"pref_dual_page_invert\">ಡ್ಯುಯಲ್ ಪೇಜ್ ಸ್ಪ್ಲಿಟ್ ಪ್ಲೇಸ್‌ಮೆಂಟ್ ಅನ್ನು ತಿರುಗಿಸಿ</string>\n    <string name=\"pref_dual_page_split\">ಡ್ಯುಯಲ್ ಪುಟ ವಿಭಜನೆ</string>\n    <string name=\"pref_show_navigation_mode_summary\">ರೀಡರ್ ತೆರೆದಾಗ ಟ್ಯಾಪ್ ವಲಯಗಳನ್ನು ತೋರಿಸಿ</string>\n    <string name=\"pref_show_navigation_mode\">ನ್ಯಾವಿಗೇಶನ್ ಲೇಔಟ್ ಓವರ್ ಲೇ ತೋರಿಸಿ</string>\n    <string name=\"exclude\">ಹೊರಗಿಡಿ: %s</string>\n    <string name=\"include\">ಸೇರಿಸಿ: %s</string>\n    <string name=\"none\">ಯಾವುದು ಅಲ್ಲ</string>\n    <string name=\"pref_library_update_categories_details\">ಹೊರಗಿಡಲಾದ ವರ್ಗಗಳಲ್ಲಿನ ಮಾಂಗಾ ಸೇರಿಸಿದ ವಿಭಾಗಗಳಲ್ಲಿದ್ದರೂ ನವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ.</string>\n    <string name=\"action_show_errors\">ದೋಷಗಳನ್ನು ತೋರಿಸು</string>\n    <string name=\"cancel_all_for_series\">ಈ ಸರಣಿಯ ಎಲ್ಲವನ್ನೂ ರದ್ದುಮಾಡಿ</string>\n    <string name=\"action_display_local_badge\">ಸ್ಥಳೀಯ ಬ್ಯಾಡ್ಜ್ ಗಳು</string>\n    <string name=\"information_empty_category_dialog\">ನೀವು ಇನ್ನೂ ಯಾವುದೇ ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ.</string>\n    <string name=\"update_check_eol\">ಈ ಆಂಡ್ರಾಯ್ಡ್ ಆವೃತ್ತಿಯನ್ನು ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</string>\n    <string name=\"error_no_match\">ಯಾವುದೇ ಹೋಲಿಕೆ ಕಂಡುಬಂದಿಲ್ಲ</string>\n    <string name=\"source_unsupported\">ಮೂಲವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</string>\n    <string name=\"unread\">ಓದದ</string>\n    <string name=\"error_sharing_cover\">ಕವರ್ ಹಂಚುವಿಕೆಯಲ್ಲಿ ದೋಷ</string>\n    <string name=\"error_saving_cover\">ಕವರ್ ಉಳಿಸುವಲ್ಲಿ ದೋಷ</string>\n    <string name=\"cover_saved\">ಕವರ್ ಉಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"manga_cover\">ಕವರ್</string>\n    <string name=\"clipboard_copy_error\">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ</string>\n    <string name=\"date\">ದಿನಾಂಕ</string>\n    <string name=\"local_filter_order_by\">ಇದರ ಅನುಗುಣವಾಗಿ</string>\n    <string name=\"local_invalid_format\">ಅಮಾನ್ಯ ಅಧ್ಯಾಯ ಸ್ವರೂಪ</string>\n    <string name=\"chapter_not_found\">ಅಧ್ಯಾಯ ಸಿಗಲಿಲ್ಲ</string>\n    <string name=\"notification_incognito_text\">ಅಜ್ಞಾತ ಮೋಡ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</string>\n    <string name=\"tracking_guide\">ಟ್ರ್ಯಾಕಿಂಗ್ ಮಾರ್ಗದರ್ಶಿ</string>\n    <string name=\"rotation_landscape\">ಅಡ್ಡವಾದ ಪುಟ</string>\n    <string name=\"rotation_portrait\">ಉದ್ದವಾದ ಪುಟ</string>\n    <string name=\"rotation_type\">ತಿರುಗುವಿಕೆಯ ಪ್ರಕಾರ</string>\n    <string name=\"automatic_background\">ಸ್ವಯಂಚಾಲಿತ</string>\n    <string name=\"pref_create_folder_per_manga_summary\">ಮಾಂಗಾ ಶೀರ್ಷಿಕೆಗೆ ಅನುಗುಣವಾಗಿ ಫೋಲ್ಡರ್ ಗಳನ್ನು ರಚಿಸುತ್ತದೆ</string>\n    <string name=\"pref_create_folder_per_manga\">ಪ್ರತ್ಯೇಕ ಫೋಲ್ಡರ್ ಗಳಲ್ಲಿ ಪುಟಗಳನ್ನು ಉಳಿಸಿ</string>\n    <string name=\"pref_reader_actions\">ಕ್ರಿಯೆಗಳು</string>\n    <string name=\"pref_grayscale\">ಗ್ರೇಸ್ಕೇಲ್</string>\n    <string name=\"off\">ಆಫ</string>\n    <string name=\"on\">ಆನ್</string>\n    <string name=\"categorized_display_settings\">ಪ್ರತಿ ವರ್ಗದ ವಿಂಗಡಣೆ ಮತ್ತು ಪ್ರದರ್ಶನಕ್ಕಾಗಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</string>\n    <string name=\"restrictions\">ನಿರ್ಬಂಧಗಳು: %s</string>\n    <string name=\"action_start_downloading_now\">ಈಗಲೇ ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭಿಸಿ</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ko/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">%1$s 개 남음</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">총 %1$s화</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d일 전</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">소요 시간: %1$s, 발생한 오류: %2$s</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">%1$s분 후</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">항목 %d개</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d개의 트래커</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">소스에 존재하지 않거나 필터링되어 있는 %d개의 회차를 건너뛰었습니다</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">%d개의 확장 앱 업데이트가 있습니다</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">%d개의 항목</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d개의 새로운 회차</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">%1$s화와 그 외 %2$d화</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">읽지 않은 다음 %d 회차</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">다음 %d화</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">누락된 회차 %1$s개</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d일</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d 저장소</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ko/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">이름</string>\n    <string name=\"categories\">카테고리</string>\n    <string name=\"manga\">서재 항목</string>\n    <string name=\"chapters\">회차</string>\n    <string name=\"track\">동기화</string>\n    <string name=\"label_backup\">백업 및 복원</string>\n    <string name=\"action_settings\">설정</string>\n    <string name=\"action_filter\">필터</string>\n    <string name=\"action_filter_bookmarked\">북마크함</string>\n    <string name=\"action_filter_unread\">읽지 않음</string>\n    <string name=\"action_filter_empty\">필터 제거</string>\n    <string name=\"action_sort_alpha\">가나다순</string>\n    <string name=\"action_sort_last_read\">마지막으로 읽은 날짜순</string>\n    <string name=\"action_search\">검색</string>\n    <string name=\"action_select_all\">모두 선택</string>\n    <string name=\"action_mark_as_read\">읽음으로 표시</string>\n    <string name=\"action_mark_as_unread\">읽지 않음으로 표시</string>\n    <string name=\"action_mark_previous_as_read\">항목 바로 전까지 읽음으로 표시</string>\n    <string name=\"action_download\">다운로드</string>\n    <string name=\"action_bookmark\">챕터 북마크</string>\n    <string name=\"action_remove_bookmark\">챕터 북마크 제거</string>\n    <string name=\"action_delete\">삭제</string>\n    <string name=\"action_update_library\">서재 업데이트</string>\n    <string name=\"action_edit\">편집</string>\n    <string name=\"action_add\">추가</string>\n    <string name=\"action_add_category\">카테고리 추가</string>\n    <string name=\"action_edit_categories\">카테고리 편집</string>\n    <string name=\"action_rename_category\">카테고리 이름 바꾸기</string>\n    <string name=\"action_move_category\">카테고리 지정</string>\n    <string name=\"action_edit_cover\">표지 편집</string>\n    <string name=\"action_remove\">제거</string>\n    <string name=\"action_resume\">계속</string>\n    <string name=\"action_open_in_browser\">브라우저에서 열기</string>\n    <string name=\"action_display_mode\">화면 표시 모드</string>\n    <string name=\"action_display_grid\">작은 격자</string>\n    <string name=\"action_display_list\">목록</string>\n    <string name=\"action_cancel\">취소</string>\n    <string name=\"action_sort\">정렬</string>\n    <string name=\"action_install\">설치</string>\n    <string name=\"label_settings\">설정</string>\n    <string name=\"action_display\">화면 표시</string>\n    <string name=\"history\">기록</string>\n    <string name=\"label_download_queue\">다운로드 대기열</string>\n    <string name=\"label_library\">서재</string>\n    <string name=\"label_recent_manga\">기록</string>\n    <string name=\"label_recent_updates\">업데이트</string>\n    <string name=\"action_sort_total\">전체 챕터 개수순</string>\n    <string name=\"action_previous_chapter\">이전 화</string>\n    <string name=\"action_next_chapter\">다음 화</string>\n    <string name=\"action_retry\">다시 시도</string>\n    <string name=\"action_share\">공유</string>\n    <string name=\"action_save\">저장</string>\n    <string name=\"action_reset\">초기화</string>\n    <string name=\"action_undo\">실행 취소</string>\n    <string name=\"action_open_log\">로그 열기</string>\n    <string name=\"action_restore\">복원</string>\n    <string name=\"loading\">불러오는 중…</string>\n    <string name=\"app_not_available\">앱 이용 불가</string>\n    <string name=\"pref_category_general\">일반</string>\n    <string name=\"pref_category_reader\">뷰어</string>\n    <string name=\"pref_category_downloads\">다운로드</string>\n    <string name=\"pref_category_tracking\">동기화</string>\n    <string name=\"pref_category_advanced\">고급</string>\n    <string name=\"pref_category_about\">정보</string>\n    <string name=\"pref_library_columns\">격자 크기</string>\n    <string name=\"label_migration\">데이터 이전</string>\n    <string name=\"label_extensions\">확장 앱</string>\n    <string name=\"label_extension_info\">확장 앱 정보</string>\n    <string name=\"action_global_search\">전체 검색</string>\n    <string name=\"action_pause\">일시중지</string>\n    <string name=\"portrait\">세로</string>\n    <string name=\"landscape\">가로</string>\n    <string name=\"pref_library_update_interval\">자동 업데이트</string>\n    <string name=\"update_never\">끄기</string>\n    <string name=\"update_6hour\">6시간</string>\n    <string name=\"update_12hour\">12시간</string>\n    <string name=\"update_24hour\">1일</string>\n    <string name=\"update_48hour\">2일</string>\n    <string name=\"update_weekly\">1주</string>\n    <string name=\"all\">전부</string>\n    <string name=\"pref_library_update_restriction\">자동 업데이트 조건</string>\n    <string name=\"charging\">충전 중일 때만</string>\n    <string name=\"default_category\">기본 카테고리</string>\n    <string name=\"ext_update\">업데이트</string>\n    <string name=\"ext_install\">설치</string>\n    <string name=\"ext_pending\">대기 중</string>\n    <string name=\"ext_downloading\">다운로드 중</string>\n    <string name=\"ext_installing\">설치 중</string>\n    <string name=\"ext_installed\">설치됨</string>\n    <string name=\"ext_trust\">신뢰</string>\n    <string name=\"ext_untrusted\">신뢰되지않음</string>\n    <string name=\"ext_uninstall\">삭제</string>\n    <string name=\"untrusted_extension\">신뢰할 수 없는 확장 앱</string>\n    <string name=\"untrusted_extension_message\">일부 악의적인 확장 앱은 Mihon에 저장된 로그인 정보를 읽거나 임의의 코드를 실행할 수도 있습니다.\n\\n\n\\n이 확장 앱을 신뢰하면 이러한 위험에 노출될 수 있습니다.</string>\n    <string name=\"pref_fullscreen\">전체화면</string>\n    <string name=\"pref_double_tap_anim_speed\">더블 탭 애니메이션 속도</string>\n    <string name=\"pref_show_page_number\">페이지 번호 표시</string>\n    <string name=\"pref_crop_borders\">모서리 자르기</string>\n    <string name=\"pref_custom_brightness\">밝기 변경</string>\n    <string name=\"pref_custom_color_filter\">컬러 필터 사용</string>\n    <string name=\"pref_keep_screen_on\">화면 켜짐 유지</string>\n    <string name=\"pref_read_with_volume_keys\">볼륨 키</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">볼륨 키 뒤바꾸기</string>\n    <string name=\"pref_viewer_type\">기본 읽기 모드</string>\n    <string name=\"left_to_right_viewer\">페이지 (왼쪽에서 오른쪽)</string>\n    <string name=\"right_to_left_viewer\">페이지 (오른쪽에서 왼쪽)</string>\n    <string name=\"vertical_viewer\">페이지 (수직)</string>\n    <string name=\"webtoon_viewer\">긴 스트립</string>\n    <string name=\"scale_type_stretch\">늘리기</string>\n    <string name=\"scale_type_fit_width\">가로 맞추기</string>\n    <string name=\"scale_type_fit_height\">세로 맞추기</string>\n    <string name=\"scale_type_original_size\">원본 크기</string>\n    <string name=\"pref_zoom_start\">줌 시작 위치</string>\n    <string name=\"zoom_start_automatic\">자동</string>\n    <string name=\"zoom_start_left\">왼쪽</string>\n    <string name=\"zoom_start_right\">오른쪽</string>\n    <string name=\"zoom_start_center\">중앙</string>\n    <string name=\"double_tap_anim_speed_0\">애니메이션 없음</string>\n    <string name=\"double_tap_anim_speed_normal\">보통</string>\n    <string name=\"double_tap_anim_speed_fast\">빠름</string>\n    <string name=\"pref_rotation_type\">기본 회전 설정</string>\n    <string name=\"rotation_free\">자유</string>\n    <string name=\"rotation_force_portrait\">세로로 고정</string>\n    <string name=\"rotation_force_landscape\">가로로 고정</string>\n    <string name=\"pref_remove_after_marked_as_read\">수동으로 읽음 표시 될 경우 삭제</string>\n    <string name=\"pref_remove_after_read\">읽은 후 자동으로 삭제</string>\n    <string name=\"disabled\">끄기</string>\n    <string name=\"last_read_chapter\">마지막 회차</string>\n    <string name=\"pref_download_new\">새로운 화 다운로드</string>\n    <string name=\"services\">트래킹 서비스</string>\n    <string name=\"pref_create_backup\">백업 생성</string>\n    <string name=\"pref_restore_backup\">백업 복원</string>\n    <string name=\"pref_restore_backup_summ\">백업 파일에서 서재 복원</string>\n    <string name=\"pref_backup_interval\">백업 주기</string>\n    <string name=\"backup_created\">백업 생성됨</string>\n    <string name=\"restore_completed\">복원 완료</string>\n    <string name=\"restoring_backup\">백업 복원중</string>\n    <string name=\"creating_backup\">백업 생성중</string>\n    <string name=\"pref_clear_chapter_cache\">회차별 캐시 삭제</string>\n    <string name=\"used_cache\">%1$s 사용중</string>\n    <string name=\"cache_deleted\">캐시 삭제됨, %1$d개의 파일이 삭제됨</string>\n    <string name=\"cache_delete_error\">지우는 동안 오류가 발생했습니다</string>\n    <string name=\"pref_clear_cookies\">쿠키 삭제</string>\n    <string name=\"cookies_cleared\">쿠키 삭제됨</string>\n    <string name=\"pref_clear_database\">데이터베이스 삭제</string>\n    <string name=\"pref_clear_database_summary\">서재에 추가되지 않은 항목의 기록을 삭제합니다</string>\n    <string name=\"clear_database_confirmation\">확실합니까? 서재에 없는 항목의 읽기 기록이 삭제됩니다</string>\n    <string name=\"version\">버전</string>\n    <string name=\"pref_enable_acra\">오류 보고서 전송</string>\n    <string name=\"pref_acra_summary\">버그를 수정하는데 도움이 됩니다. 개인 정보는 전송되지 않습니다</string>\n    <string name=\"login_title\">%1$s 으로 로그인</string>\n    <string name=\"username\">사용자명</string>\n    <string name=\"password\">비밀번호</string>\n    <string name=\"login\">로그인</string>\n    <string name=\"login_success\">로그인 성공</string>\n    <string name=\"unknown_error\">알 수 없는 오류</string>\n    <string name=\"updating_category\">카테고리 업데이트중</string>\n    <string name=\"no_more_results\">더이상 결과 없음</string>\n    <string name=\"action_global_search_hint\">전체 검색…</string>\n    <string name=\"latest\">최신</string>\n    <string name=\"ongoing\">연재</string>\n    <string name=\"unknown\">알 수 없음</string>\n    <string name=\"remove_from_library\">서재에서 제거</string>\n    <string name=\"manga_added_library\">서재에 추가되었습니다</string>\n    <string name=\"manga_removed_library\">서재에서 제거되었습니다</string>\n    <string name=\"delete_downloads_for_manga\">다운로드된 회차를 삭제하시겠습니까?</string>\n    <string name=\"source_not_installed\">소스 미설치: %1$s</string>\n    <string name=\"display_mode_chapter\">%1$s화</string>\n    <string name=\"chapter_downloading_progress\">다운로드 중 (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">오류</string>\n    <string name=\"chapter_paused\">일시정지</string>\n    <string name=\"show_chapter_number\">회차 번호</string>\n    <string name=\"sort_by_source\">소스 기준</string>\n    <string name=\"sort_by_number\">회차 번호 기준</string>\n    <string name=\"manga_download\">다운로드</string>\n    <string name=\"download_unread\">읽지 않은 회차</string>\n    <string name=\"confirm_delete_chapters\">선택된 회차를 삭제하시겠습니까?</string>\n    <string name=\"manga_tracking_tab\">동기화</string>\n    <string name=\"score\">평점</string>\n    <string name=\"title\">제목</string>\n    <string name=\"status\">상태</string>\n    <string name=\"track_status\">상태</string>\n    <string name=\"snack_categories_deleted\">카테고리 삭제됨</string>\n    <string name=\"dialog_with_checkbox_remove_description\">이 회차의 읽은 기록을 삭제합니다. 계속하시겠습니까?</string>\n    <string name=\"dialog_with_checkbox_reset\">모든 회차 기록 초기화</string>\n    <string name=\"snack_add_to_library\">서재에 추가합니까?</string>\n    <string name=\"picture_saved\">사진 저장됨</string>\n    <string name=\"custom_filter\">이미지 필터</string>\n    <string name=\"set_as_cover\">표지로 설정</string>\n    <string name=\"cover_updated\">표지 업데이트됨</string>\n    <string name=\"chapter_progress\">페이지: %1$d</string>\n    <string name=\"no_next_chapter\">다음 화가 없습니다</string>\n    <string name=\"decode_image_error\">이미지를 로드할 수 없습니다</string>\n    <string name=\"confirm_set_image_as_cover\">이 이미지를 표지로 사용합니까?</string>\n    <string name=\"transition_finished\">완료:</string>\n    <string name=\"transition_current\">현재:</string>\n    <string name=\"transition_next\">다음:</string>\n    <string name=\"transition_previous\">이전:</string>\n    <string name=\"transition_no_next\">다음 화가 없습니다</string>\n    <string name=\"transition_no_previous\">이전 화가 없습니다</string>\n    <string name=\"transition_pages_loading\">페이지 로딩중…</string>\n    <string name=\"transition_pages_error\">페이지 로딩 실패: %1$s</string>\n    <string name=\"notification_new_chapters\">새로운 회차 발견</string>\n    <string name=\"notification_cover_update_failed\">표지 업데이트 실패</string>\n    <string name=\"file_select_cover\">표지 이미지 선택</string>\n    <string name=\"file_select_backup\">백업 파일 선택</string>\n    <string name=\"update_check_confirm\">다운로드</string>\n    <string name=\"update_check_no_new_updates\">새로운 업데이트 없음</string>\n    <string name=\"update_check_notification_download_in_progress\">다운로드 중…</string>\n    <string name=\"update_check_notification_download_complete\">탭하여 업데이트 설치</string>\n    <string name=\"update_check_notification_download_error\">다운로드 오류</string>\n    <string name=\"update_check_notification_update_available\">업데이트 이용 가능!</string>\n    <string name=\"information_no_downloads\">다운로드 없음</string>\n    <string name=\"information_no_recent\">최근 업데이트 없음</string>\n    <string name=\"information_no_recent_manga\">최근 읽은 기록 없음</string>\n    <string name=\"download_notifier_downloader_title\">다운로더</string>\n    <string name=\"download_notifier_title_error\">오류</string>\n    <string name=\"download_notifier_unknown_error\">다운로드 중에 예기치 않은 오류가 발생하였습니다</string>\n    <string name=\"download_notifier_download_paused\">다운로드 일시중지됨</string>\n    <string name=\"action_display_download_badge\">다운로드한 챕터</string>\n    <string name=\"pref_update_only_non_completed\">연재가 끝났을 때 항목 건너뛰기</string>\n    <string name=\"pref_auto_update_manga_sync\">읽은 기록 동기화</string>\n    <string name=\"default_category_summary\">항상 물어보기</string>\n    <string name=\"pref_create_backup_summ\">현재 서재를 나중에 복구하는 데 사용 가능</string>\n    <string name=\"pref_reader_navigation\">네비게이션</string>\n    <string name=\"pref_page_transitions\">페이지 전환 효과 표시</string>\n    <string name=\"pref_reader_theme\">배경 색상</string>\n    <string name=\"white_background\">흰색</string>\n    <string name=\"black_background\">검은색</string>\n    <string name=\"pager_viewer\">페이지 설정</string>\n    <string name=\"pref_image_scale_type\">배율 설정</string>\n    <string name=\"scale_type_fit_screen\">화면 맞춤</string>\n    <string name=\"scale_type_smart_fit\">자동 맞춤</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"second_to_last\">끝에서 두번째 회차</string>\n    <string name=\"third_to_last\">끝에서 세번째 회차</string>\n    <string name=\"fourth_to_last\">끝에서 네번째 회차</string>\n    <string name=\"fifth_to_last\">끝에서 다섯번째 회차</string>\n    <string name=\"backup_choice\">어떤 항목들을 백업하겠습니까?</string>\n    <string name=\"clear_database_completed\">항목 삭제됨</string>\n    <string name=\"local_source\">로컬 저장소</string>\n    <string name=\"other_source\">기타</string>\n    <string name=\"browse\">찾아보기</string>\n    <string name=\"licensed\">판권작</string>\n    <string name=\"copied_to_clipboard\">클립보드에 복사됨:\n\\n%1$s</string>\n    <string name=\"show_title\">소스 제목</string>\n    <string name=\"reading\">읽는 중</string>\n    <string name=\"completed\">완결</string>\n    <string name=\"dropped\">포기함</string>\n    <string name=\"on_hold\">일시중지중</string>\n    <string name=\"plan_to_read\">계획중</string>\n    <string name=\"repeating\">다시 읽는 중</string>\n    <string name=\"track_type\">종류</string>\n    <string name=\"error_category_exists\">같은 이름을 가진 카테고리가 이미 존재합니다!</string>\n    <string name=\"migration_dialog_what_to_include\">포함할 데이터를 선택하세요</string>\n    <string name=\"migrate\">데이터 이전</string>\n    <string name=\"copy\">복사</string>\n    <string name=\"download_queue_error\">다운로드 실패. 다운로드 메뉴에서 다시 시도할 수 있습니다</string>\n    <string name=\"notification_first_add_to_library\">이 행동을 하기 전 서재에 항목을 추가해주세요</string>\n    <string name=\"information_empty_library\">서재가 비어있습니다</string>\n    <string name=\"information_empty_category\">카테고리가 없습니다. 서재 구성을 위해 + 버튼을 눌러 생성하세요.</string>\n    <string name=\"download_notifier_text_only_wifi\">Wi-Fi 연결 사용 불가능</string>\n    <string name=\"download_notifier_no_network\">네트워크 연결 사용 불가능</string>\n    <string name=\"channel_common\">일반</string>\n    <string name=\"pref_read_with_long_tap\">길게 탭하여 액션 표시</string>\n    <string name=\"action_open_in_web_view\">WebView로 열기</string>\n    <string name=\"pref_skip_read_chapters\">읽음 표시된 회차 건너뛰기</string>\n    <string name=\"pref_color_filter_mode\">컬러 필터 블렌딩 모드</string>\n    <string name=\"filter_mode_overlay\">오버레이</string>\n    <string name=\"filter_mode_multiply\">곱하기</string>\n    <string name=\"filter_mode_screen\">스크린</string>\n    <string name=\"filter_mode_lighten\">닷지 / 밝게하기</string>\n    <string name=\"filter_mode_darken\">번 / 어둡게하기</string>\n    <string name=\"label_help\">도움말</string>\n    <string name=\"email\">이메일 주소</string>\n    <string name=\"website\">웹사이트</string>\n    <string name=\"action_menu\">메뉴</string>\n    <string name=\"label_more\">더 보기</string>\n    <string name=\"label_sources\">소스</string>\n    <string name=\"channel_complete\">완료</string>\n    <string name=\"confirm_set_chapter_settings\">현재 설정을 기본값으로 설정하시겠습니까?</string>\n    <string name=\"chapter_settings\">회차 설정</string>\n    <string name=\"error_sharing_cover\">표지 공유 오류</string>\n    <string name=\"error_saving_cover\">표지 저장 오류</string>\n    <string name=\"cover_saved\">표지 저장</string>\n    <string name=\"manga_cover\">표지</string>\n    <string name=\"sort_by_upload_date\">업로드 날짜 기준</string>\n    <string name=\"logout_success\">로그아웃 되었습니다</string>\n    <string name=\"logout\">로그아웃</string>\n    <string name=\"logout_title\">%1$s 에서 로그아웃 하시겠습니까?</string>\n    <string name=\"notification_incognito_text\">시크릿 모드 끄기</string>\n    <string name=\"label_downloaded_only\">다운로드가 완료된 항목만 표시</string>\n    <string name=\"pref_incognito_mode\">시크릿 모드</string>\n    <string name=\"updated_version\">v%1$s 으로 업데이트 됨</string>\n    <string name=\"check_for_updates\">업데이트 확인</string>\n    <string name=\"licenses\">오픈 소스 라이선스</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">디바이스 설정을 열 수 없습니다</string>\n    <string name=\"pref_disable_battery_optimization\">배터리 최적화 끄기</string>\n    <string name=\"restore_miui_warning\">MIUI 최적화가 꺼져 있을 경우 백업/복원 기능이 정상 작동하지 않을 수 있습니다.</string>\n    <string name=\"restore_in_progress\">복원이 이미 진행중 입니다</string>\n    <string name=\"requires_app_restart\">앱을 재시작한 후에 적용됩니다</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"label_data\">데이터</string>\n    <string name=\"backup_in_progress\">백업이 이미 진행중입니다</string>\n    <string name=\"restoring_backup_error\">백업 복원 실패</string>\n    <string name=\"label_network\">네트워크</string>\n    <string name=\"restoring_backup_canceled\">복원 취소</string>\n    <string name=\"creating_backup_error\">백업 실패</string>\n    <string name=\"restore_duration\">%02d분 %02d초</string>\n    <string name=\"invalid_backup_file\">잘못된 백업 파일:</string>\n    <string name=\"pref_category_auto_download\">자동 다운로드</string>\n    <string name=\"pref_remove_bookmarked_chapters\">북마크 표시된 회차 삭제 허용</string>\n    <string name=\"pref_category_delete_chapters\">회차 지우기</string>\n    <string name=\"rotation_landscape\">가로</string>\n    <string name=\"rotation_portrait\">세로</string>\n    <string name=\"nav_zone_right\">오른쪽</string>\n    <string name=\"nav_zone_left\">왼쪽</string>\n    <string name=\"nav_zone_next\">다음</string>\n    <string name=\"nav_zone_prev\">이전</string>\n    <string name=\"right_and_left_nav\">좌우 이동</string>\n    <string name=\"gray_background\">회색</string>\n    <string name=\"tapping_inverted_both\">수평+수직 반전</string>\n    <string name=\"tapping_inverted_vertical\">수직 반전</string>\n    <string name=\"tapping_inverted_horizontal\">수평 반전</string>\n    <string name=\"pref_grayscale\">그레이스케일</string>\n    <string name=\"pref_dual_page_split\">넓은 페이지 분할</string>\n    <string name=\"action_display_comfortable_grid\">보기 편한 격자</string>\n    <string name=\"pref_dark_theme_pure_black\">다크 모드에 검정색 사용</string>\n    <string name=\"pref_app_theme\">앱 테마</string>\n    <string name=\"theme_dark\">다크</string>\n    <string name=\"theme_light\">라이트</string>\n    <string name=\"theme_system\">시스템</string>\n    <string name=\"action_disable_all\">모두 비활성화</string>\n    <string name=\"spen_next_page\">다음 페이지</string>\n    <string name=\"confirm_lock_change\">변경 확인을 위해 인증이 필요합니다</string>\n    <string name=\"label_default\">기본값</string>\n    <string name=\"action_select_inverse\">선택 반전</string>\n    <string name=\"action_search_settings\">검색 설정</string>\n    <string name=\"action_sort_date_added\">서재에 추가한 날짜순</string>\n    <string name=\"action_sort_latest_chapter\">최신 화가 올라온 날짜순</string>\n    <string name=\"l_nav\">L자 모양</string>\n    <string name=\"pref_read_with_tapping_inverted\">탭 영역 반전</string>\n    <string name=\"tapping_inverted_none\">없음</string>\n    <string name=\"automatic_background\">자동</string>\n    <string name=\"kindlish_nav\">Kindle식</string>\n    <string name=\"pref_cutout_short\">빈 공간 채우기</string>\n    <string name=\"pref_always_show_chapter_transition\">회차 변경 항상 표시</string>\n    <string name=\"unknown_author\">작가 미상</string>\n    <string name=\"pref_category_reading_mode\">읽기 모드</string>\n    <string name=\"whats_new\">업데이트 내역</string>\n    <string name=\"last_used_source\">마지막으로 사용</string>\n    <string name=\"pref_dual_page_invert\">분할 페이지 순서 뒤집기</string>\n    <string name=\"edge_nav\">양쪽 가장자리</string>\n    <string name=\"action_view_chapters\">챕터 목록 보기</string>\n    <string name=\"pref_viewer_nav\">탭 존</string>\n    <string name=\"label_warning\">경고</string>\n    <string name=\"help_translate\">번역에 참여하기</string>\n    <string name=\"rotation_type\">회전 설정</string>\n    <string name=\"pref_library_update_refresh_metadata\">메타데이터 자동 갱신</string>\n    <string name=\"pref_category_for_this_series\">현재 만화에만 적용</string>\n    <string name=\"viewer\">읽기 모드</string>\n    <string name=\"downloaded_only_summary\">서재의 모든 항목에 적용됩니다</string>\n    <string name=\"pref_webtoon_side_padding\">모서리 여백</string>\n    <string name=\"ext_app_info\">앱 정보</string>\n    <string name=\"getting_started_guide\">초기 설정 도움말</string>\n    <string name=\"pref_incognito_mode_summary\">읽은 내역의 기록을 일시 정지합니다</string>\n    <string name=\"action_enable_all\">모두 활성화</string>\n    <string name=\"vertical_plus_viewer\">간격이 있는 긴 스트립</string>\n    <string name=\"none\">없음</string>\n    <string name=\"pref_date_format\">날짜 형식</string>\n    <string name=\"off\">비활성화</string>\n    <string name=\"pref_inverted_colors\">색 반전</string>\n    <string name=\"pref_category_library\">서재</string>\n    <string name=\"add_to_library\">서재에 추가</string>\n    <string name=\"save_chapter_as_cbz\">CBZ 파일로 저장</string>\n    <string name=\"secure_screen_summary\">화면 보안을 켜면 앱을 전환할 때 내용이 숨겨지며 스크린샷을 찍을 수 없습니다</string>\n    <string name=\"in_library\">서재에 추가됨</string>\n    <string name=\"action_migrate\">데이터 이전</string>\n    <string name=\"recent_manga_time\">%1$s화 - %2$s</string>\n    <string name=\"secure_screen\">화면 보안</string>\n    <string name=\"lock_with_biometrics\">잠금 해제 필요</string>\n    <string name=\"pref_category_appearance\">모양</string>\n    <string name=\"relative_time_today\">오늘</string>\n    <string name=\"pref_category_library_update\">전역 업데이트</string>\n    <string name=\"pref_category_security\">보안 및 개인정보 보호</string>\n    <string name=\"lock_always\">항상</string>\n    <string name=\"lock_never\">끄기</string>\n    <string name=\"lock_when_idle\">자동 잠금</string>\n    <string name=\"hide_notification_content\">알림 내용 숨기기</string>\n    <string name=\"pref_remove_exclude_categories\">제외된 카테고리</string>\n    <string name=\"rotation_reverse_portrait\">세로 (거꾸로 보기)</string>\n    <string name=\"connected_to_wifi\">Wi-Fi 에서만</string>\n    <string name=\"on\">활성화</string>\n    <string name=\"updating_library\">서재 업데이트 중</string>\n    <string name=\"pref_landscape_zoom\">넓은 이미지로 자동 확대</string>\n    <string name=\"pref_category_reading\">읽기</string>\n    <string name=\"pref_lowest\">매우 낮음</string>\n    <string name=\"pref_show_reading_mode\">읽기 모드 표시</string>\n    <string name=\"pref_high\">높음</string>\n    <string name=\"pref_hide_threshold\">스크롤 시 메뉴 숨기기 민감도</string>\n    <string name=\"pref_low\">낮음</string>\n    <string name=\"pref_reader_actions\">조작</string>\n    <string name=\"action_display_language_badge\">언어</string>\n    <string name=\"pref_show_reading_mode_summary\">뷰어가 켜질 때 현재 읽기 모드를 표시합니다</string>\n    <string name=\"pref_show_navigation_mode\">탭 영역 오버레이 표시</string>\n    <string name=\"pref_show_navigation_mode_summary\">뷰어가 열렸을 때 간략히 표시</string>\n    <string name=\"pref_category_display\">디스플레이</string>\n    <string name=\"pref_skip_filtered_chapters\">필터링된 회차 건너뛰기</string>\n    <string name=\"pref_highest\">매우 높음</string>\n    <string name=\"channel_ext_updates\">확장 앱 업데이트</string>\n    <string name=\"set_chapter_settings_as_default\">기본값으로 설정</string>\n    <string name=\"pref_manage_notifications\">알림 설정</string>\n    <string name=\"also_set_chapter_settings_for_library\">서재의 모든 항목에 적용</string>\n    <string name=\"channel_app_updates\">앱 업데이트</string>\n    <string name=\"channel_progress\">진행 상황</string>\n    <string name=\"channel_errors\">오류</string>\n    <string name=\"database_clean\">지울 것이 없습니다</string>\n    <string name=\"learn_more\">터치하여 자세히 알아보기</string>\n    <string name=\"chapter_settings_updated\">기본 회차 설정을 업데이트 했습니다</string>\n    <string name=\"channel_new_chapters\">회차 업데이트</string>\n    <string name=\"include\">포함: %s</string>\n    <string name=\"label_background_activity\">백그라운드 활동</string>\n    <string name=\"pref_update_only_completely_read\">안 읽은 회차가 있을 때 항목 건너뛰기</string>\n    <string name=\"categorized_display_settings\">카테고리 별 정렬 설정</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizuku를 확장 앱 인스톨러로 사용하려면 Shizuku를 먼저 설치해 주세요.</string>\n    <string name=\"ext_update_all\">전부 업데이트</string>\n    <string name=\"invalid_backup_file_missing_manga\">백업에 항목이 포함되어 있지 않습니다.</string>\n    <string name=\"pref_dump_crash_logs_summary\">개발자와 공유할 수 있는 오류 로그 파일을 생성합니다</string>\n    <string name=\"privacy_policy\">개인정보 보호 정책</string>\n    <string name=\"share_page_info\">%1$s: %2$s, %3$d페이지</string>\n    <string name=\"clear_history_confirmation\">계속하시겠습니까? 모든 기록이 삭제됩니다.</string>\n    <string name=\"disabled_nav\">비활성화</string>\n    <string name=\"backup_restore_missing_sources\">없어진 소스:</string>\n    <string name=\"backup_restore_missing_trackers\">로그인 되지않은 트래커:</string>\n    <string name=\"pref_auto_clear_chapter_cache\">앱 실행 시 회차 캐시 삭제</string>\n    <string name=\"clear_database_source_item_count\">서재에 없는 항목이 데이터베이스에 %1$d개 있습니다</string>\n    <string name=\"about_dont_kill_my_app\">일부 제조사는 백그라운드 서비스를 종료하는 추가적인 제한 사항이 있습니다. 자세한 사항은 웹사이트를 참조하세요.</string>\n    <string name=\"pref_tablet_ui_mode\">태블릿 UI</string>\n    <string name=\"tabs_header\">탭</string>\n    <string name=\"pinned_sources\">핀 설정됨</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\"를 전체 검색합니다</string>\n    <string name=\"local_source_help_guide\">로컬 저장소 사용법</string>\n    <string name=\"no_pinned_sources\">핀 설정된 소스가 없습니다</string>\n    <string name=\"local_invalid_format\">잘못된 챕터형식</string>\n    <string name=\"unknown_status\">알 수 없는 상태</string>\n    <string name=\"on_hiatus\">휴재</string>\n    <string name=\"manga_info_expand\">상세정보 표시</string>\n    <string name=\"manga_info_collapse\">상세정보 숨김</string>\n    <string name=\"clipboard_copy_error\">클립보드로 복사에 실패하였습니다</string>\n    <string name=\"add_tracking\">트래커 추가</string>\n    <string name=\"paused\">일시정지</string>\n    <string name=\"myanimelist_relogin\">MAL에 다시 로그인해 주세요</string>\n    <string name=\"loader_not_implemented_error\">소스를 찾을 수 없습니다</string>\n    <string name=\"page_list_empty_error\">페이지를 찾을 수 없습니다</string>\n    <string name=\"pref_clear_history\">내역 삭제</string>\n    <string name=\"clear_history_completed\">기록이 삭제되었습니다</string>\n    <string name=\"download_insufficient_space\">저장 공간이 부족하여 회차를 다운로드 할 수 없습니다</string>\n    <string name=\"download_queue_size_warning\">경고: 대량 다운로드는 소스가 느려지거나 Mihon를 차단할 수 있습니다. 탭하여 자세히 알아보기.</string>\n    <string name=\"notification_size_warning\">대규모 업데이트는 소스에 피해를 입히고 업데이트가 느려지고 배터리 사용량이 증가할 수 있습니다. 탭하여 자세히 알아보기.</string>\n    <string name=\"notification_chapters_single\">%1$s화</string>\n    <string name=\"notification_update_error\">%1$d개의 업데이트가 실패했습니다</string>\n    <string name=\"library_errors_help\">서재 업데이트 오류를 해결하려면 %1$s를 참조하세요</string>\n    <string name=\"skipped_reason_completed\">완결된 만화를 건너 뛰었습니다</string>\n    <string name=\"skipped_reason_not_started\">읽지 않은 만화를 건너 뛰었습니다</string>\n    <string name=\"update_check_eol\">이 안드로이드 버전은 더이상 지원되지 않습니다</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare를 통과하지 못했습니다</string>\n    <string name=\"information_webview_required\">Mihon 앱의 기능을 사용하려면 WebView가 필요합니다</string>\n    <string name=\"information_webview_outdated\">호환성을 위해 WebView 어플리케이션을 업데이트 해 주세요</string>\n    <string name=\"pref_navigate_pan\">넓은 이미지 이동</string>\n    <string name=\"obsolete_extension_message\">이 확장 프로그램은 더 이상 사용할 수 없습니다. 제대로 작동하지 않을 수 있으며 앱에 문제가 발생할 수 있습니다. 제거하는 것이 좋습니다.</string>\n    <string name=\"ext_install_service_notif\">확장 앱 설치 중…</string>\n    <string name=\"ext_installer_legacy\">레거시</string>\n    <string name=\"action_track\">트래킹</string>\n    <string name=\"pref_refresh_library_covers\">서재 표지 새로고침</string>\n    <string name=\"pref_dump_crash_logs\">오류 로그 공유</string>\n    <string name=\"chapter_not_found\">회차를 찾을 수 없습니다</string>\n    <string name=\"error_no_match\">결과가 없습니다</string>\n    <string name=\"ext_nsfw_warning\">이 확장 앱의 소스는 성인 컨텐츠가 포함될 수 있습니다</string>\n    <string name=\"action_filter_tracked\">트래커 사용</string>\n    <string name=\"action_start\">시작</string>\n    <string name=\"action_start_downloading_now\">지금 다운로드 시작</string>\n    <string name=\"ext_installer_pref\">인스톨러</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku가 실행 중이 아닙니다</string>\n    <string name=\"manga_from_library\">서재에서</string>\n    <string name=\"downloaded_chapters\">다운로드된 회차</string>\n    <string name=\"publishing_finished\">완결됨</string>\n    <string name=\"unread\">읽지 않음</string>\n    <string name=\"cancelled\">취소됨</string>\n    <string name=\"no_chapters_error\">검색된 회차가 없습니다</string>\n    <string name=\"source_unsupported\">지원되지 않는 소스입니다</string>\n    <string name=\"spen_previous_page\">이전 페이지</string>\n    <string name=\"action_show_manga\">항목 표시</string>\n    <string name=\"action_desc\">내림차순</string>\n    <string name=\"theme_monet\">다이내믹</string>\n    <string name=\"action_display_cover_only_grid\">표지만 있는 격자</string>\n    <string name=\"action_newest\">최신 순</string>\n    <string name=\"pref_category_theme\">테마</string>\n    <string name=\"theme_midnightdusk\">황혼</string>\n    <string name=\"ext_obsolete\">지원 종료</string>\n    <string name=\"no_results_found\">검색 결과가 없습니다</string>\n    <string name=\"pref_dual_page_invert_summary\">넓은 페이지 분할 시 배치가 읽는 방향과 다를 경우</string>\n    <string name=\"ext_nsfw_short\">성인 컨텐츠</string>\n    <string name=\"action_display_show_tabs\">카테고리 탭 보이기</string>\n    <string name=\"action_sort_chapter_fetch_date\">챕터를 가져온 날짜순</string>\n    <string name=\"action_sort_count\">전체 항목 개수순</string>\n    <string name=\"action_webview_back\">뒤로</string>\n    <string name=\"battery_optimization_disabled\">배터리 최적화가 이미 꺼져 있습니다</string>\n    <string name=\"action_order_by_chapter_number\">회차 번호 순</string>\n    <string name=\"action_move_to_top\">맨 위로 이동</string>\n    <string name=\"action_order_by_upload_date\">업로드 날짜 순</string>\n    <string name=\"action_move_to_bottom\">맨 아래로 이동</string>\n    <string name=\"action_asc\">오름차순</string>\n    <string name=\"action_oldest\">오래된 순</string>\n    <string name=\"theme_tealturquoise\">옥색</string>\n    <string name=\"theme_strawberrydaiquiri\">딸기 칵테일</string>\n    <string name=\"extension_api_error\">사용 가능한 확장 앱 가져오기 실패</string>\n    <string name=\"exclude\">제외: %s</string>\n    <string name=\"tracking_info\">트래킹 서비스에 항목 진행 상황을 업데이트합니다. 트래킹 버튼을 이용하여 각각의 항목 별로 트래킹을 설정하세요.</string>\n    <string name=\"tracking_guide\">트래커 가이드</string>\n    <string name=\"enhanced_services\">향상된 트래킹 서비스</string>\n    <string name=\"pref_download_new_categories_details\">카테고리가 다운로드에서 제외된 경우 다른 카테고리에 포함되어 있어도 다운로드 되지 않습니다.</string>\n    <string name=\"enhanced_tracking_info\">특정 소스에 대해 향상된 기능을 제공합니다. 서재에 항목이 추가될 시 자동으로 트래킹 됩니다.</string>\n    <string name=\"backup_restore_content_full\">복구 완료 후 없어진 소스를 다시 설치하고 트래킹 서비스에 로그인 해야 합니다.</string>\n    <string name=\"backup_info\">백업 파일은 복사하여 다른 장소에 나눠 보관하세요. 백업 파일에는 비밀번호 등의 민감한 정보가 포함될 수 있습니다. 백업 파일 공유시 주의하세요.</string>\n    <string name=\"pref_disable_battery_optimization_summary\">백그라운드 서재 업데이트와 라이브러리 업데이트를 도울 수 있습니다</string>\n    <string name=\"pref_verbose_logging\">자세한 로그</string>\n    <string name=\"pref_verbose_logging_summary\">자세한 로그를 시스템 로그에 기록 (성능이 하락할 수 있습니다)</string>\n    <string name=\"date\">날짜</string>\n    <string name=\"local_filter_order_by\">정렬</string>\n    <string name=\"track_started_reading_date\">읽기 시작한 날짜</string>\n    <string name=\"track_finished_reading_date\">다 읽은 날짜</string>\n    <string name=\"skipped_reason_not_caught_up\">읽지 않은 회차가 있는 만화를 건너 뛰었습니다</string>\n    <string name=\"information_empty_category_dialog\">등록된 카테고리가 없습니다.</string>\n    <string name=\"pref_create_folder_per_manga_summary\">항목 제목에 따라 폴더 생성</string>\n    <string name=\"migration_help_guide\">소스 이전 설명서</string>\n    <string name=\"migration_selection_prompt\">원본 소스를 선택하세요</string>\n    <string name=\"action_display_local_badge\">로컬 소스</string>\n    <string name=\"action_display_show_number_of_items\">항목 수 보이기</string>\n    <string name=\"action_disable\">끄기</string>\n    <string name=\"action_pin\">고정</string>\n    <string name=\"action_unpin\">고정 해제</string>\n    <string name=\"action_cancel_all\">모두 취소</string>\n    <string name=\"cancel_all_for_series\">이 만화의 항목을 모두 취소</string>\n    <string name=\"action_webview_forward\">앞으로</string>\n    <string name=\"pref_create_folder_per_manga\">각각의 폴더에 페이지 저장</string>\n    <string name=\"pref_update_only_started\">읽지 않은 항목 건너뛰기</string>\n    <string name=\"action_move_to_top_all_for_series\">이 시리즈를 맨 위로 이동</string>\n    <string name=\"action_webview_refresh\">새로고침</string>\n    <string name=\"theme_greenapple\">청사과</string>\n    <string name=\"theme_tako\">문어</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_yotsuba\">요츠바</string>\n    <string name=\"pref_category_nsfw_content\">성인 콘텐츠 소스</string>\n    <string name=\"pref_show_nsfw_source\">소스 및 확장 기능 목록에 보이기</string>\n    <string name=\"parental_controls_info\">이 옵션을 끄더라도 비공식 또는 분류가 잘못된 확장 기능으로 인하여 성인 컨텐츠가 표시될 수 있습니다.</string>\n    <string name=\"action_show_errors\">터치하여 자세히 보기</string>\n    <string name=\"update_72hour\">3일</string>\n    <string name=\"restrictions\">제한: %s</string>\n    <string name=\"pref_library_update_categories_details\">카테고리가 업데이트에서 제외된 경우 다른 카테고리에 포함되어 있어도 업데이트 되지 않습니다.</string>\n    <string name=\"ext_updates_pending\">업데이트 대기 중</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">서재 업데이트 시 새로운 표지와 설명 확인</string>\n    <string name=\"notification_chapters_single_and_more\">%1$s화와 그 외 %2$d화</string>\n    <string name=\"notification_chapters_multiple\">%1$s화</string>\n    <string name=\"file_picker_error\">파일 선택 어플리케이션이 없습니다</string>\n    <string name=\"empty_backup_error\">백업할 서재 항목이 없습니다</string>\n    <string name=\"update_check_open\">GitHub에서 열기</string>\n    <string name=\"error_saving_picture\">이미지 저장 오류</string>\n    <string name=\"source_empty_screen\">출처를 찾을 수 없습니다</string>\n    <string name=\"source_filter_empty_screen\">설치된 소스를 찾을 수 없습니다</string>\n    <string name=\"action_sort_last_manga_update\">마지막으로 업데이트한 날짜순</string>\n    <string name=\"action_sort_unread_count\">읽지 않은 항목 개수순</string>\n    <string name=\"action_close\">닫기</string>\n    <string name=\"pref_clear_webview_data\">WebView 데이터 지우기</string>\n    <string name=\"webview_data_deleted\">WebView 데이터 삭제됨</string>\n    <string name=\"split_tall_images_summary\">리더 성능 향상</string>\n    <string name=\"ext_info_version\">버전</string>\n    <string name=\"ext_info_language\">언어</string>\n    <string name=\"reading_list\">읽을 목록</string>\n    <string name=\"wish_list\">위시리스트</string>\n    <string name=\"pref_reset_viewer_flags_summary\">모든 시리즈의 읽기 모드와 화면 방향 초기화</string>\n    <string name=\"pref_app_language\">앱 언어</string>\n    <string name=\"not_installed\">설치되지 않음</string>\n    <string name=\"theme_lavender\">라벤더</string>\n    <string name=\"network_not_metered\">무제한 네트워크에서만</string>\n    <string name=\"delete_category_confirmation\">\\\"%s\\\" 카테고리를 삭제하시겠습니까?</string>\n    <string name=\"delete_category\">카테고리 삭제</string>\n    <string name=\"internal_error\">내부 오류: 더 자세한 정보를 보고 싶으면 충돌 로그를 확인하세요</string>\n    <string name=\"description_placeholder\">요약 없음</string>\n    <string name=\"download_notifier_split_page_path_not_found\">페이지 %d의 파일 경로를 찾을 수 없습니다</string>\n    <string name=\"unfinished_list\">미완성된 목록</string>\n    <string name=\"empty_screen\">와...이거 좀 어색하네</string>\n    <string name=\"custom_cover\">맞춤 표지</string>\n    <string name=\"ext_info_age_rating\">연령 등급</string>\n    <string name=\"action_remove_everything\">모두 제거</string>\n    <string name=\"pref_reset_viewer_flags_success\">모든 뷰어 설정을 초기화했습니다</string>\n    <string name=\"pref_user_agent_string\">기본 사용자 에이전트 문자열</string>\n    <string name=\"pref_reset_user_agent_string\">기본 사용자 에이전트 문자열 초기화</string>\n    <string name=\"complete_list\">완결 목록</string>\n    <string name=\"pref_reset_viewer_flags_error\">뷰어 설정을 초기화 할 수 없습니다</string>\n    <string name=\"pref_reset_viewer_flags\">시리즈마다 뷰어 설정 초기화</string>\n    <string name=\"cant_open_last_read_chapter\">마지막 회차를 열 수 없습니다</string>\n    <string name=\"appwidget_updates_description\">최근에 업데이트된 항목 보기</string>\n    <string name=\"on_hold_list\">보류 목록</string>\n    <string name=\"download_notifier_split_page_not_found\">분리 중 페이지 %d을 찾을 수 없습니다</string>\n    <string name=\"appwidget_unavailable_locked\">앱 잠금 사용 중에는 위젯을 이용할 수 없습니다</string>\n    <string name=\"theme_tidalwave\">파도</string>\n    <string name=\"update_already_running\">업데이트가 이미 실행 중입니다</string>\n    <string name=\"error_user_agent_string_blank\">사용자 에이전트 문자열은 비워 둘 수 없습니다</string>\n    <string name=\"download_ahead\">미리 다운로드</string>\n    <string name=\"multi_lang\">다언어</string>\n    <string name=\"remove_manga\">서재에서 \\\"%s\\\"을(를) 제거하려고 합니다</string>\n    <string name=\"missing_storage_permission\">저장공간 사용 권한이 없음</string>\n    <string name=\"auto_download_while_reading\">읽을 때 자동 다운로드</string>\n    <string name=\"updates_last_update_info\">마지막 서재 업데이트: %s</string>\n    <string name=\"download_ahead_info\">현재 회차 + 다음 회차가 이미 다운로드된 경우에만 작동됩니다.</string>\n    <string name=\"popular\">인기</string>\n    <string name=\"are_you_sure\">정말로 실행합니까?</string>\n    <string name=\"skipped_reason_not_always_update\">만화에 업데이트가 필요하지 않음으로 건너뜀</string>\n    <string name=\"action_search_hint\">검색…</string>\n    <string name=\"pref_library_summary\">카테고리, 전역 업데이트, 회차 스와이프</string>\n    <string name=\"pref_reader_summary\">읽기 모드, 디스플레이, 탐색</string>\n    <string name=\"pref_tracking_summary\">단방향 진행 동기화, 향상된 동기화</string>\n    <string name=\"pref_browse_summary\">소스, 확장 기능, 전체 검색</string>\n    <string name=\"pref_backup_summary\">수동 및 자동 백업</string>\n    <string name=\"pref_security_summary\">앱 잠금, 화면 보안</string>\n    <string name=\"pref_advanced_summary\">오류 로그 덤프, 배터리 최적화</string>\n    <string name=\"pref_appearance_summary\">테마, 날짜 및 시간 형식</string>\n    <string name=\"pref_downloads_summary\">자동 다운로드, 미리 다운로드</string>\n    <string name=\"crash_screen_title\">앗!</string>\n    <string name=\"crash_screen_restart_application\">애플리케이션 재시작</string>\n    <string name=\"crash_screen_description\">%s에 예기치 않은 오류가 발생했습니다. 충돌 로그를 공식 디스코드 채널에 공유하는 것을 추천합니다.</string>\n    <string name=\"unknown_title\">알 수 없는 제목</string>\n    <string name=\"invalid_location\">잘못된 위치: %s</string>\n    <string name=\"error_user_agent_string_invalid\">잘못된 사용자 에이전트 문자열</string>\n    <string name=\"updates_last_update_info_just_now\">방금</string>\n    <string name=\"download_notifier_cache_renewal\">다운로드 확인</string>\n    <string name=\"action_open_random_manga\">무작위 항목 열기</string>\n    <string name=\"information_no_entries_found\">이 카테고리에 항목이 없습니다</string>\n    <string name=\"fdroid_warning\">F-Droid 빌드는 공식적으로 지원되지 않습니다.\n\\n자세히 알아보려면 탭하세요.</string>\n    <string name=\"action_display_show_continue_reading_button\">계속 읽기 버튼</string>\n    <string name=\"track_remove_finish_date_conf_text\">%s에서 이전에 선택한 완료 날짜가 제거됩니다</string>\n    <string name=\"pref_invalidate_download_cache\">다운로드 인덱스 제거</string>\n    <string name=\"track_remove_date_conf_title\">날짜를 제거 하시겠습니까?</string>\n    <string name=\"track_remove_start_date_conf_text\">%s에서 이전에 선택한 시작 날짜가 제거됩니다</string>\n    <string name=\"pref_invalidate_download_cache_summary\">앱이 다운로드한 회차를 다시 확인하도록 강제</string>\n    <string name=\"label_completed_titles\">완료된 항목</string>\n    <string name=\"label_total_chapters\">전체</string>\n    <string name=\"label_titles_in_global_update\">전역 업데이트 대상</string>\n    <string name=\"label_used\">사용됨</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"minute_short\">%d분</string>\n    <string name=\"seconds_short\">%d초</string>\n    <string name=\"label_stats\">통계 정보</string>\n    <string name=\"label_started\">시작됨</string>\n    <string name=\"label_local\">로컬</string>\n    <string name=\"label_downloaded\">다운로드함</string>\n    <string name=\"label_overview_section\">개요</string>\n    <string name=\"label_read_duration\">읽은 시간</string>\n    <string name=\"label_titles_section\">항목</string>\n    <string name=\"label_tracker_section\">동기화</string>\n    <string name=\"label_tracked_titles\">동기화된 항목</string>\n    <string name=\"label_read_chapters\">읽음</string>\n    <string name=\"label_mean_score\">평균 점수</string>\n    <string name=\"day_short\">%d일</string>\n    <string name=\"hour_short\">%d시간</string>\n    <string name=\"action_not_now\">나중에</string>\n    <string name=\"pref_library_update_show_tab_badge\">업데이트 아이콘에 읽지 않은 수 표시</string>\n    <string name=\"information_no_manga_category\">카테고리가 비어 있습니다</string>\n    <string name=\"copied_to_clipboard_plain\">클립보드에 복사됨</string>\n    <string name=\"enhanced_services_not_installed\">사용 가능하지만 소스가 설치되지 않음: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">중복 회차 건너뛰기</string>\n    <string name=\"track_error\">%1$s 오류: %2$s</string>\n    <string name=\"confirm_add_duplicate_manga\">서재에 같은 이름의 항목이 있습니다.\n\\n\n\\n그래도 계속하시겠습니까?</string>\n    <string name=\"information_required_plain\">*필수</string>\n    <string name=\"action_copy_to_clipboard\">클립보드에 복사</string>\n    <string name=\"pref_hide_in_library_items\">이미 서재에 있는 항목 숨기기</string>\n    <string name=\"action_update_category\">카테고리 업데이트</string>\n    <string name=\"split_tall_images\">긴 이미지 분할</string>\n    <string name=\"overlay_header\">오버레이</string>\n    <string name=\"pref_page_rotate\">화면에 맞게 넓은 페이지 회전</string>\n    <string name=\"pref_page_rotate_invert\">회전된 넓은 페이지의 회전 방향</string>\n    <string name=\"pref_debug_info\">디버그 정보</string>\n    <string name=\"pref_chapter_swipe_start\">왼쪽으로 스와이프 액션</string>\n    <string name=\"pref_chapter_swipe_end\">오른쪽으로 스와이프 액션</string>\n    <string name=\"pref_double_tap_zoom\">두 번 탭하여 줌</string>\n    <string name=\"action_set_interval\">간격 설정</string>\n    <string name=\"action_filter_interval_custom\">사용자 설정 업데이트 빈도</string>\n    <string name=\"intervals_header\">간격</string>\n    <string name=\"delete_downloaded\">다운로드 삭제</string>\n    <string name=\"has_results\">결과가 있는 것만 보기</string>\n    <string name=\"track_delete_text\">이렇게 하면 로컬에서 동기화가 제거됩니다.</string>\n    <string name=\"track_delete_remote_text\">%s에서도 제거</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"skipped_reason_not_in_release_period\">오늘 연재가 예상되지 않았기 때문에 건너뛰었습니다</string>\n    <string name=\"track_delete_title\">%s 동기화를 삭제 하시겠습니까?</string>\n    <string name=\"pref_update_only_in_release_period\">다음 연재 기간 예측</string>\n    <string name=\"download_cache_invalidated\">다운로드 인덱스를 제거함</string>\n    <string name=\"action_sort_next_updated\">다음 업데이트 예정</string>\n    <string name=\"information_cloudflare_help\">탭하여 Cloudflare에 관한 도움말 보기</string>\n    <string name=\"unlock_app_title\">%s를 잠금해제</string>\n    <string name=\"manga_display_modified_interval_title\">항상 업데이트 하도록 설정</string>\n    <string name=\"syncing_library\">서재를 동기화합니다</string>\n    <string name=\"create_backup_file_error\">백업 파일을 생성할 수 없습니다</string>\n    <string name=\"library_sync_complete\">서재가 동기화되었습니다</string>\n    <string name=\"action_move_to_bottom_all_for_series\">이 시리즈를 맨 아래로 이동</string>\n    <string name=\"exception_offline\">인터넷에 연결되지 않음</string>\n    <string name=\"manga_display_interval_title\">항상 평가하기</string>\n    <string name=\"track_activity_name\">트래킹 서비스 로그인</string>\n    <string name=\"exception_http\">HTTP %d, WebView의 웹 사이트를 확인해 주세요</string>\n    <string name=\"exception_unknown_host\">%s에 연결할 수 없습니다</string>\n    <string name=\"notification_updating_progress\">서재 업데이트 중...(%s)</string>\n    <string name=\"source_settings\">소스 설정</string>\n    <string name=\"app_settings\">앱 설정</string>\n    <string name=\"onboarding_permission_install_apps_description\">확장 앱 설치를 위해 필요합니다.</string>\n    <string name=\"onboarding_permission_notifications_description\">서재 업데이트 등의 알림을 보냅니다.</string>\n    <string name=\"invalid_backup_file_error\">오류 전체 보기:</string>\n    <string name=\"private_settings\">민감한 설정 포함(예시: 트래커 로그인 토큰)</string>\n    <string name=\"manga_interval_expected_update\">새 회차는 약 %1$s 후에 출시될 것으로 예상되며, 매 %2$s마다 확인됩니다.</string>\n    <string name=\"no_scanlators_found\">스캔레이터가 발견되지 않았습니다</string>\n    <string name=\"onboarding_permission_notifications\">알림 권한</string>\n    <string name=\"exclude_scanlators\">스캔레이터 제외</string>\n    <string name=\"onboarding_action_next\">다음</string>\n    <string name=\"onboarding_storage_action_select\">폴더를 선택하기</string>\n    <string name=\"onboarding_action_skip\">건너뛰기</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">시간이 많이 걸리는 서재 업데이트, 다운로드 및 백업 복원이 중단되지 않도록 합니다.</string>\n    <string name=\"pref_library_update_smart_update\">스마트 업데이트</string>\n    <string name=\"action_add_repo\">저장소 추가</string>\n    <string name=\"invalid_repo_name\">잘못된 저장소 URL</string>\n    <string name=\"delete_repo_confirmation\">\\\"%s\\\" 저장소를 삭제하고 싶습니까?</string>\n    <string name=\"onboarding_storage_help_info\">이전 버전에서 업데이트하는데 무엇을 선택해야 할지 모르시나요? 자세한 내용은 저장공간 가이드를 참조하세요.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">백그라운드 배터리 사용</string>\n    <string name=\"onboarding_permission_action_grant\">허용</string>\n    <string name=\"onboarding_guides_new_user\">%s가 처음입니까? 시작 가이드를 확인하는 것을 추천합니다.</string>\n    <string name=\"onboarding_storage_help_action\">저장공간 가이드</string>\n    <string name=\"label_add_repo_input\">저장소 URL</string>\n    <string name=\"ext_permission_install_apps_warning\">확장 앱을 설치하려면 권한이 필요합니다. 부가하려면 여기를 탭하세요.</string>\n    <string name=\"information_empty_repos\">저장소를 추가하지 않았습니다.</string>\n    <string name=\"error_repo_exists\">이 저장소는 이미 존재합니다!</string>\n    <string name=\"pref_storage_location\">저장공간 위치</string>\n    <string name=\"onboarding_permission_install_apps\">앱 다운로드 권한</string>\n    <string name=\"label_extension_repos\">확장 앱 저장소</string>\n    <string name=\"action_delete_repo\">저장소 제거</string>\n    <string name=\"ext_revoke_trust\">신뢰한 알수없는 확장 앱 신뢰 취소</string>\n    <string name=\"pref_storage_location_info\">자동 백업, 챕터 다운로드 및 로컬 소스에 사용됩니다.</string>\n    <string name=\"manga_interval_custom_amount\">사용자 지정 업데이트 빈도:</string>\n    <string name=\"action_add_repo_message\">Mihon에 추가적으로 저장소를 추가합니다. \\\"index.min.json\\\"으로 끝나는 URL이어야 합니다.</string>\n    <string name=\"action_open_repo\">소스 저장소 열기</string>\n    <string name=\"manga_interval_expected_update_soon\">곧 출시</string>\n    <string name=\"onboarding_description\">먼저 몇 가지 사항을 설정해 보겠습니다. 나중에 언제든지 설정에서 변경할 수도 있습니다.</string>\n    <string name=\"onboarding_action_finish\">시작하기</string>\n    <string name=\"onboarding_storage_info\">%1$s가 다운로드, 백업 등을 할 폴더를 선택합니다.\n\\n\n\\n앱 전용폴더를 추천합니다.\n\\n\n\\n선택된 폴더: %2$s</string>\n    <string name=\"onboarding_guides_returning_user\">%s를 재설치 하시겠습니까?</string>\n    <string name=\"scanlator\">스캔레이터</string>\n    <string name=\"file_null_uri_error\">선택된 파일 없음</string>\n    <string name=\"action_apply\">적용</string>\n    <string name=\"action_revert_to_default\">기본값으로 되돌리기</string>\n    <string name=\"action_create\">생성</string>\n    <string name=\"pref_storage_usage\">저장공간 사용량</string>\n    <string name=\"selected\">선택됨</string>\n    <string name=\"not_selected\">선택되지 않음</string>\n    <string name=\"action_menu_overflow_description\">기타 옵션</string>\n    <string name=\"action_bar_up_description\">위로 이동</string>\n    <string name=\"action_sort_tracker_score\">트래커 점수</string>\n    <string name=\"pref_onboarding_guide\">초보자 가이드</string>\n    <string name=\"onboarding_heading\">환영합니다!</string>\n    <string name=\"onboarding_storage_selection_required\">폴더를 선택해야 합니다</string>\n    <string name=\"no_location_set\">저장공간 위치를 설정하지 않았습니다</string>\n    <string name=\"pref_relative_format\">상대적인 타임스탬프</string>\n    <string name=\"pref_relative_format_summary\">\\\"%2$s\\\" 대신 \\\"%1$s\\\"를 사용</string>\n    <string name=\"label_data_storage\">데이터와 저장공간</string>\n    <string name=\"pref_flash_page\">페이지 전환시 플래시 켜기</string>\n    <string name=\"pref_flash_page_summ\">E잉크 디스플레이의 잔상 감소</string>\n    <string name=\"last_auto_backup_info\">마지막 자동 백업: %s</string>\n    <string name=\"relative_time_span_never\">없음</string>\n    <string name=\"available_disk_space_info\">사용가능: %1$s / 전체: %2$s</string>\n    <string name=\"theme_nord\">Nord</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/lt/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Vakar</item>\n        <item quantity=\"few\">Prieš %1$d dienas</item>\n        <item quantity=\"other\">Prieš %1$d dienų</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Po %1$s minutės</item>\n        <item quantity=\"few\">Po %1$s minučių</item>\n        <item quantity=\"other\">Po %1$s minučių</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategorija</item>\n        <item quantity=\"few\">%d kategorijos</item>\n        <item quantity=\"other\">%d kategorijos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Skyrius %1$s ir 1 daugiau</item>\n        <item quantity=\"few\">Skyriai %1$s ir %2$d daugiau</item>\n        <item quantity=\"other\">Skyriai %1$s ir %2$d daugiau</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d naujas skyrius</item>\n        <item quantity=\"few\">%1$d nauji skyriai</item>\n        <item quantity=\"other\">%1$d nauji skyriai</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Atlikta %1$s su %2$s klaida</item>\n        <item quantity=\"few\">Atlikta %1$s su %2$s klaidomis</item>\n        <item quantity=\"other\">Atlikta %1$s su %2$s klaidomis</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d įrašui</item>\n        <item quantity=\"few\">%d įrašams</item>\n        <item quantity=\"other\">%d įrašų</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">%d plėtinio atnaujinimas pasiekiamas</item>\n        <item quantity=\"few\">%d plėtinių atnaujinimai pasiekiami</item>\n        <item quantity=\"other\">%d plėtinių atnaujinimai pasiekiami</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s skyrius</item>\n        <item quantity=\"few\">%1$s skyriai</item>\n        <item quantity=\"other\">%1$s skyriai</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">Liko vienas</item>\n        <item quantity=\"few\">Liko %1$s</item>\n        <item quantity=\"other\">Liko %1$s</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d stebėjimo įrenginys</item>\n        <item quantity=\"few\">%d stebėjimo įrenginiai</item>\n        <item quantity=\"other\">%d stebėjimo įrenginių</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Praleidžiamas %d skyrius, arba jo nėra šaltinyje, arba jis buvo nepasirinktas</item>\n        <item quantity=\"few\">Praleidžiami %d skyriai, arba jų nėra šaltinyje, arba jie buvo nepasirinkti</item>\n        <item quantity=\"other\">Praleidžiamia %d skyrių, arba jų nėra šaltinyje, arba jie buvo nepasirinkti</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Kitas neskaitytas skyrius</item>\n        <item quantity=\"few\">Kiti %d neskaityti skyriai</item>\n        <item quantity=\"other\">Kiti %d neskaitytų skyrių</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/lt/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_filter\">Filtras</string>\n    <string name=\"action_menu\">Meniu</string>\n    <string name=\"action_settings\">Nustatymai</string>\n    <string name=\"history\">Istorija</string>\n    <string name=\"track\">Sekimas</string>\n    <string name=\"chapters\">Skyriai</string>\n    <string name=\"manga\">Bibliotekos įrašai</string>\n    <string name=\"categories\">Kategorijos</string>\n    <string name=\"information_empty_category\">Neturite jokių kategorijų. Paspauskite pliuso simbolį, kad sukurtumėte kategoriją jūsų bibliotekos organizavimui.</string>\n    <string name=\"information_empty_library\">Jūsų biblioteka tuščia</string>\n    <string name=\"information_no_recent_manga\">Nėra neseniai skaitytų</string>\n    <string name=\"information_no_recent\">Naujinių nėra</string>\n    <string name=\"information_no_downloads\">Atsiuntimų nėra</string>\n    <string name=\"label_help\">Pagalba</string>\n    <string name=\"label_extension_info\">Papildinių info</string>\n    <string name=\"label_extensions\">Papildiniai</string>\n    <string name=\"label_migration\">Migruoti</string>\n    <string name=\"label_backup\">Atsarginė kopija ir atkūrimas</string>\n    <string name=\"label_sources\">Šaltiniai</string>\n    <string name=\"label_recent_manga\">Istorija</string>\n    <string name=\"label_recent_updates\">Naujienos</string>\n    <string name=\"label_library\">Biblioteka</string>\n    <string name=\"label_download_queue\">Atsisiuntimų eilė</string>\n    <string name=\"label_settings\">Nustatymai</string>\n    <string name=\"label_more\">Daugiau</string>\n    <string name=\"name\">Vardas</string>\n    <string name=\"default_category_summary\">Visada klausti</string>\n    <string name=\"default_category\">Numatyta kategorija</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Tikrinti naujus viršelius ir informaciją kai biblioteka naujinama</string>\n    <string name=\"pref_library_update_refresh_metadata\">Automatiškai naujinti metaduomenis</string>\n    <string name=\"pref_update_only_non_completed\">Kai yra \\\"Perskaityta\\\" statusas</string>\n    <string name=\"restrictions\">Ribojimai: %s</string>\n    <string name=\"charging\">Kai krovimas pajungtas</string>\n    <string name=\"pref_library_update_restriction\">Automatinio naujinimo ribojimai</string>\n    <string name=\"update_weekly\">Kas savaitę</string>\n    <string name=\"update_48hour\">Kas 2 dienas</string>\n    <string name=\"update_24hour\">Kasdien</string>\n    <string name=\"update_12hour\">Kas 12 valandų</string>\n    <string name=\"update_6hour\">Kas 6 valandas</string>\n    <string name=\"update_never\">Išjungti</string>\n    <string name=\"pref_library_update_interval\">Automatiniai atnaujinimai</string>\n    <string name=\"pref_category_library_update\">Globalus naujinimas</string>\n    <string name=\"landscape\">Kraštovaizdis</string>\n    <string name=\"portrait\">Portretas</string>\n    <string name=\"pref_library_columns\">Elementai eilutėje</string>\n    <string name=\"pref_category_display\">Rodinys</string>\n    <string name=\"relative_time_today\">Šiandien</string>\n    <string name=\"parental_controls_info\">Tai nesustabdo neoficialių ar potencialiai neteisingai pažymėtų plėtinių nuo N18+ turinio rodymo programoje.</string>\n    <string name=\"pref_show_nsfw_source\">Rodyti šaltiniuose ir plėtinių sąrašuose</string>\n    <string name=\"pref_category_nsfw_content\">N18+ šaltiniai</string>\n    <string name=\"hide_notification_content\">Slėpti pranešimo turinį</string>\n    <string name=\"secure_screen_summary\">Slėpti programos turinį, kai įjungiama kita programa ir neleisti daryti ekrano nuotraukų</string>\n    <string name=\"secure_screen\">Saugus užraktas</string>\n    <string name=\"lock_never\">Niekada</string>\n    <string name=\"lock_always\">Visada</string>\n    <string name=\"lock_when_idle\">Užrakinti kai neveiksnus</string>\n    <string name=\"lock_with_biometrics\">Reikalauti atrakinimo</string>\n    <string name=\"pref_category_security\">Sauga</string>\n    <string name=\"pref_manage_notifications\">Tvarkyti pranešimus</string>\n    <string name=\"pref_date_format\">Datos formatas</string>\n    <string name=\"pref_dark_theme_pure_black\">Visiškai juodas tamsus režimas</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Jin ir Jang</string>\n    <string name=\"theme_tealturquoise\">Teal ir Turquoise</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Braškinis Daikiri</string>\n    <string name=\"theme_midnightdusk\">Vidurnakčio saulėlydis</string>\n    <string name=\"theme_greenapple\">Obuolių žalia</string>\n    <string name=\"theme_monet\">Dinamiška</string>\n    <string name=\"pref_app_theme\">Programos tema</string>\n    <string name=\"theme_dark\">Įjungta</string>\n    <string name=\"theme_light\">Išjungta</string>\n    <string name=\"theme_system\">Pagal sistemą</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"pref_category_about\">Apie</string>\n    <string name=\"pref_category_advanced\">Papildomi</string>\n    <string name=\"pref_category_tracking\">Sekimas</string>\n    <string name=\"pref_category_downloads\">Atsiuntimai</string>\n    <string name=\"pref_category_reader\">Skaityklė</string>\n    <string name=\"pref_category_library\">Biblioteka</string>\n    <string name=\"pref_category_appearance\">Išvaizda</string>\n    <string name=\"pref_category_general\">Bendriniai</string>\n    <string name=\"app_not_available\">Programa negalima</string>\n    <string name=\"loading\">Įkeliama…</string>\n    <string name=\"action_start_downloading_now\">Atsisiųsti dabar</string>\n    <string name=\"action_webview_refresh\">Naujinti</string>\n    <string name=\"action_webview_forward\">Į priekį</string>\n    <string name=\"action_webview_back\">Atgal</string>\n    <string name=\"action_restore\">Atkurti</string>\n    <string name=\"action_show_errors\">Paspausti klaidų rodymui</string>\n    <string name=\"action_open_log\">Atidaryti ataskaitą</string>\n    <string name=\"action_reset\">Įkelti iš naujo</string>\n    <string name=\"action_undo\">Anuliuoti veiksmą</string>\n    <string name=\"action_save\">Išsaugoti</string>\n    <string name=\"action_share\">Dalintis</string>\n    <string name=\"action_install\">Įdiegti</string>\n    <string name=\"action_move_to_bottom\">Kelti į apačią</string>\n    <string name=\"action_move_to_top\">Kelti į viršų</string>\n    <string name=\"action_desc\">Mažėjimo tvarka</string>\n    <string name=\"action_asc\">Didėjimo tvarka</string>\n    <string name=\"action_oldest\">Seniausi</string>\n    <string name=\"action_newest\">Naujausi</string>\n    <string name=\"action_order_by_chapter_number\">Pagal skyrių skaičių</string>\n    <string name=\"action_order_by_upload_date\">Pagal įkėlimo datą</string>\n    <string name=\"action_sort\">Rikiavimas</string>\n    <string name=\"cancel_all_for_series\">Atšaukti visus šiam kūriniui</string>\n    <string name=\"action_cancel_all\">Atšaukti visus</string>\n    <string name=\"action_cancel\">Atšaukti</string>\n    <string name=\"action_unpin\">Atsegti</string>\n    <string name=\"action_pin\">Prisegti</string>\n    <string name=\"action_disable\">Išjungti</string>\n    <string name=\"action_display_show_number_of_items\">Rodyti įrašų skaičių</string>\n    <string name=\"action_display_show_tabs\">Rodyti kategorijų korteles</string>\n    <string name=\"action_display_local_badge\">Vietinis šaltinis</string>\n    <string name=\"action_display_download_badge\">Atsisiųsti skyriai</string>\n    <string name=\"action_display_list\">Sąrašas</string>\n    <string name=\"action_display_comfortable_grid\">Patogus tinklelis</string>\n    <string name=\"action_display_grid\">Kompaktiškas tinklelis</string>\n    <string name=\"action_display\">Rodinys</string>\n    <string name=\"action_display_mode\">Rodymo režimas</string>\n    <string name=\"action_migrate\">Migruoti</string>\n    <string name=\"action_open_in_web_view\">Atverti per WebView</string>\n    <string name=\"action_open_in_browser\">Atverti naršyklėje</string>\n    <string name=\"action_resume\">Tęsti</string>\n    <string name=\"action_start\">Pradėti</string>\n    <string name=\"action_remove\">Šalinti</string>\n    <string name=\"action_retry\">Bandyti iš naujo</string>\n    <string name=\"action_next_chapter\">Sekantis skyrius</string>\n    <string name=\"action_previous_chapter\">Ankstesnis skyrius</string>\n    <string name=\"action_pause\">Pristabdyti</string>\n    <string name=\"action_view_chapters\">Rodyti skyrius</string>\n    <string name=\"action_edit_cover\">Keisti viršelį</string>\n    <string name=\"action_move_category\">Perkelti kategorijas</string>\n    <string name=\"action_rename_category\">Pervardinti kategoriją</string>\n    <string name=\"action_edit_categories\">Redaguoti kategorijas</string>\n    <string name=\"action_add_category\">Pridėti kategorija</string>\n    <string name=\"action_add\">Pridėti</string>\n    <string name=\"action_edit\">Redaguoti</string>\n    <string name=\"action_disable_all\">Išjungti visus</string>\n    <string name=\"action_enable_all\">Įjungti visus</string>\n    <string name=\"action_update_library\">Naujinti biblioteką</string>\n    <string name=\"action_delete\">Ištrinti</string>\n    <string name=\"action_remove_bookmark\">Pašalinti skyrių iš žymių</string>\n    <string name=\"action_bookmark\">Išsaugoti skyrių į žymes</string>\n    <string name=\"action_download\">Atsisiųsti</string>\n    <string name=\"action_mark_previous_as_read\">Žymėti pastarąjį, kaip skaitytą</string>\n    <string name=\"action_mark_as_unread\">Žymėti, kaip neskaitytą</string>\n    <string name=\"action_mark_as_read\">Žymėti kaip skaitytą</string>\n    <string name=\"action_select_inverse\">Atvirkščias žymėjimas</string>\n    <string name=\"action_select_all\">Žymėti visus</string>\n    <string name=\"action_global_search\">Globali paieška</string>\n    <string name=\"action_search_settings\">Paieškos nustatymai</string>\n    <string name=\"action_search\">Paieška</string>\n    <string name=\"action_sort_date_added\">Pridėjimo data</string>\n    <string name=\"action_sort_chapter_fetch_date\">Atnaujinimo data</string>\n    <string name=\"action_sort_latest_chapter\">Naujausiais skyriais</string>\n    <string name=\"action_sort_last_read\">Paskiausiai žiurėtas</string>\n    <string name=\"action_sort_total\">Skyrių skaičius</string>\n    <string name=\"action_sort_alpha\">Abėcėlės tvarka</string>\n    <string name=\"action_filter_empty\">Panaikinti filtrą</string>\n    <string name=\"action_filter_unread\">Neskaitytus</string>\n    <string name=\"action_filter_tracked\">Sekami</string>\n    <string name=\"action_filter_bookmarked\">Žymės</string>\n    <string name=\"confirm_lock_change\">Autentifikuokitės, kad patvirtintumėte pakeitimus</string>\n    <string name=\"label_default\">Numatytas</string>\n    <string name=\"categorized_display_settings\">Rūšiavimo ir vaizdavimo nustatymai kiekvienai kategorijai</string>\n    <string name=\"pref_custom_brightness\">Pasirinktinis ryškumas</string>\n    <string name=\"off\">Išjungta</string>\n    <string name=\"on\">Įjungta</string>\n    <string name=\"pref_crop_borders\">Apkarpyti kraštus</string>\n    <string name=\"pref_show_reading_mode_summary\">Trumpai parodyti dabartinį rėžimą, kai skaitiniai yra atidaryti</string>\n    <string name=\"pref_show_reading_mode\">Parodyti skaitymo rėžimą</string>\n    <string name=\"pref_show_page_number\">Parodyti puslapio numerį</string>\n    <string name=\"pref_double_tap_anim_speed\">Dvigubo paspaudimo animacijos greitis</string>\n    <string name=\"pref_page_transitions\">Puslapių perėjimų animacijos</string>\n    <string name=\"pref_cutout_short\">Parodyti turinį iškirptoje zonoje</string>\n    <string name=\"pref_dual_page_invert_summary\">Jeigu perskirtų puslapių pozicijos nesutampa su skaitymo kryptimi</string>\n    <string name=\"pref_dual_page_invert\">Apkeisti perskirtų puslapių padėtį</string>\n    <string name=\"pref_dual_page_split\">Perskirti plačius puslapius</string>\n    <string name=\"pref_show_navigation_mode_summary\">Trumpai parodyti skaitytuvą, kai atidarytas</string>\n    <string name=\"pref_fullscreen\">Pilno ekrano rėžimas</string>\n    <string name=\"ext_nsfw_warning\">Šaltiniuose gali būti N18 turinio</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"obsolete_extension_message\">Šis plėtinys nebėra prieinamas. Plėtinys gali veikti netinkamai arba sukelti problemas programėlėje. Rekomenduojama išdiegti plėtinį.</string>\n    <string name=\"untrusted_extension_message\">Šis plėtinys buvo pasirašytas nepatikimu sertifikatu ir nebuvo aktyvuotas.\n\\n\n\\nPlėtinys, su negeranoriškais ketinimais, gali perskaityti prisijungimo duomenys patalpintus Mihon arba gali paleisti kenkėjišką kodą.\n\\n\n\\nJūs priimate šias rizikas pasitikėdami sertifikatu.</string>\n    <string name=\"untrusted_extension\">Nepatikimas plėtinys</string>\n    <string name=\"ext_app_info\">Aplikacijos informacija</string>\n    <string name=\"ext_uninstall\">Šalinti</string>\n    <string name=\"ext_trust\">Patikimas</string>\n    <string name=\"ext_untrusted\">Nepatikimas</string>\n    <string name=\"ext_installed\">Įdiegtas</string>\n    <string name=\"ext_installing\">Diegiasi</string>\n    <string name=\"ext_downloading\">Siunčiasi</string>\n    <string name=\"ext_pending\">Laukiama</string>\n    <string name=\"ext_install\">Įdiegti</string>\n    <string name=\"ext_obsolete\">Pasenusi</string>\n    <string name=\"ext_update\">Atnaujinimas</string>\n    <string name=\"exclude\">Neįtraukti: %s</string>\n    <string name=\"include\">Įtraukti: %s</string>\n    <string name=\"none\">Nėra</string>\n    <string name=\"all\">Visi</string>\n    <string name=\"pref_library_update_categories_details\">Įrašai, kurie yra įtraukti į neįtraukiamas kategorijas, nebus atnaujinami, net jei yra įtraukti į įtrauktąsias kategorijas.</string>\n    <string name=\"update_check_notification_download_error\">Atsiuntimo klaida</string>\n    <string name=\"update_check_notification_update_available\">Nauja versija pasiekiama!</string>\n    <string name=\"scale_type_fit_height\">Pagal aukštį talpinimas</string>\n    <string name=\"white_background\">Balta</string>\n    <string name=\"nav_zone_right\">Dešinė</string>\n    <string name=\"left_to_right_viewer\">Iš kairės į dešinę</string>\n    <string name=\"vertical_viewer\">Vertikalus</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"ext_installer_pref\">Diegimo programa</string>\n    <string name=\"pref_update_only_completely_read\">Kai yra neskaitytų skyrių</string>\n    <string name=\"pref_update_only_started\">Kai dar neprasidėjo</string>\n    <string name=\"ext_install_service_notif\">Instaliuojamas papildinys…</string>\n    <string name=\"pref_keep_screen_on\">Palikti ekraną įjungta</string>\n    <string name=\"pref_skip_read_chapters\">Praleisti perskaitytus skyrius</string>\n    <string name=\"pref_skip_filtered_chapters\">Praleisti perfiltruotus skyrius</string>\n    <string name=\"tapping_inverted_vertical\">Vertikalus</string>\n    <string name=\"pref_reader_actions\">Veiksmai</string>\n    <string name=\"pref_read_with_long_tap\">Parodyti ilgiau paspaudus</string>\n    <string name=\"pref_create_folder_per_manga\">Išsaugoti puslapius atskiruose aplankuose</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Sukuria aplankus pagal įrašo pavadinimą</string>\n    <string name=\"pref_reader_theme\">Fono spalva</string>\n    <string name=\"nav_zone_prev\">Ankstesnis</string>\n    <string name=\"gray_background\">Pilka</string>\n    <string name=\"pref_image_scale_type\">Mastelio tipas</string>\n    <string name=\"pref_always_show_chapter_transition\">Visada rodyti skyrių perėjimus</string>\n    <string name=\"scale_type_original_size\">Originalus dydis</string>\n    <string name=\"pref_category_reading_mode\">Skaitymo rėžimas</string>\n    <string name=\"zoom_start_center\">Centruoti</string>\n    <string name=\"double_tap_anim_speed_0\">Be animacijų</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"pref_inverted_colors\">Invertuoti spalvas</string>\n    <string name=\"pref_color_filter_mode\">Spalvų filtrų maišymo rėžimas</string>\n    <string name=\"nav_zone_next\">Kitas</string>\n    <string name=\"nav_zone_left\">Kairė</string>\n    <string name=\"vertical_plus_viewer\">Ištęstinis vertikalus</string>\n    <string name=\"double_tap_anim_speed_fast\">Greitai</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"ext_update_all\">Atnaujinti viską</string>\n    <string name=\"pref_read_with_volume_keys\">Garso mygtukai</string>\n    <string name=\"scale_type_fit_screen\">Pritaikyti pagal ekraną</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku neveikia</string>\n    <string name=\"filter_mode_overlay\">Perdanga</string>\n    <string name=\"pref_reader_navigation\">Navigacija</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Apkeisti garso mygtukus</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invertuoti paspaudimo zonas</string>\n    <string name=\"black_background\">Juoda</string>\n    <string name=\"automatic_background\">Automatinis</string>\n    <string name=\"pref_viewer_type\">Numatytas skaitymo rėžimas</string>\n    <string name=\"right_and_left_nav\">Dešinė ir Kairė</string>\n    <string name=\"double_tap_anim_speed_normal\">Įprastai</string>\n    <string name=\"scale_type_stretch\">Ištempti</string>\n    <string name=\"scale_type_fit_width\">Talpinti pagal plotį</string>\n    <string name=\"filter_mode_lighten\">Pašviesinti</string>\n    <string name=\"l_nav\">L formos</string>\n    <string name=\"kindlish_nav\">Taip pat kaip Kindle</string>\n    <string name=\"action_show_manga\">Rodyti įrašą</string>\n    <string name=\"pref_custom_color_filter\">Pasirinktinas spalvų filtras</string>\n    <string name=\"filter_mode_multiply\">Multiplikuoti</string>\n    <string name=\"filter_mode_screen\">Ekranas</string>\n    <string name=\"tapping_inverted_none\">Nėra</string>\n    <string name=\"right_to_left_viewer\">Iš dešinės į kairę</string>\n    <string name=\"zoom_start_right\">Dešiniau</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"filter_mode_darken\">Patamsinti</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontalus</string>\n    <string name=\"tapping_inverted_both\">Abu</string>\n    <string name=\"pager_viewer\">Puslapiai</string>\n    <string name=\"pref_viewer_nav\">Paspaudimų išdėstymas</string>\n    <string name=\"scale_type_smart_fit\">Protingas pritaikymas</string>\n    <string name=\"zoom_start_automatic\">Automatinis</string>\n    <string name=\"zoom_start_left\">Kairiau</string>\n    <string name=\"action_sort_count\">Viso įrašų</string>\n    <string name=\"pref_rotation_type\">Numatytas sukimosi tipas</string>\n    <string name=\"rotation_type\">Sukimosi tipas</string>\n    <string name=\"rotation_free\">Neribojamas</string>\n    <string name=\"rotation_portrait\">Portretas</string>\n    <string name=\"rotation_landscape\">Peizažas</string>\n    <string name=\"rotation_force_portrait\">Fiksuoti vertikaliai</string>\n    <string name=\"rotation_force_landscape\">Fiksuoti horizontaliai</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"action_display_language_badge\">Kalba</string>\n    <string name=\"extension_api_error\">Nepavyko gauti papildinių sąrašo</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instaliuoti ir paleisti Shizuku, kad galėtumėte naudoti Shizuku kaip papildinių instaliuotoją.</string>\n    <string name=\"pref_show_navigation_mode\">Rodyti lietimui jautrias zonas</string>\n    <string name=\"label_warning\">Įspėjimas</string>\n    <string name=\"update_72hour\">Kas 3 dienas</string>\n    <string name=\"connected_to_wifi\">Kai naudojamas Wi-Fi</string>\n    <string name=\"ext_updates_pending\">Yra naujinių</string>\n    <string name=\"pref_category_reading\">Skaitoma</string>\n    <string name=\"ext_installer_legacy\">Pasenusi</string>\n    <string name=\"pref_grayscale\">Nespalvotai</string>\n    <string name=\"pref_zoom_start\">Priartinimo pradinė padėtis</string>\n    <string name=\"pref_backup_interval\">Atsarginių kopijų kūrimo dažnis</string>\n    <string name=\"third_to_last\">Trečias nuo paskutinio skaityto</string>\n    <string name=\"disabled\">Išjungtas</string>\n    <string name=\"pref_hide_threshold\">Jautrumas, skirtas paslėpti meniu slinkant</string>\n    <string name=\"pref_low\">Žemas</string>\n    <string name=\"pref_download_new\">Atsisiųsti naujus skyrius</string>\n    <string name=\"save_chapter_as_cbz\">Išsaugoti kaip CBZ archyvą</string>\n    <string name=\"pref_auto_update_manga_sync\">Po perskaitymo atnaujinti statusą</string>\n    <string name=\"backup_restore_missing_sources\">Trūksta šaltinių:</string>\n    <string name=\"services\">Paslaugos</string>\n    <string name=\"second_to_last\">Priešpaskutinis perskaitytas skyrius</string>\n    <string name=\"fourth_to_last\">Ketvirtas skyrius nuo paskutinio skaityto</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Leisti naikinti žymėtus skyrius</string>\n    <string name=\"fifth_to_last\">Penktas nuo paskutinio skaityto</string>\n    <string name=\"pref_category_auto_download\">Automatinis atsisiuntimas</string>\n    <string name=\"backup_created\">Sukurta atsarginė kopija</string>\n    <string name=\"pref_high\">aukštas</string>\n    <string name=\"pref_category_delete_chapters\">Naikinti skyrius</string>\n    <string name=\"pref_lowest\">Mažiausias</string>\n    <string name=\"pref_remove_after_marked_as_read\">Rankinių būdu pažymėtas, kaip skaitytas</string>\n    <string name=\"pref_remove_after_read\">Perskaičius automatiškai naikinti</string>\n    <string name=\"enhanced_services\">Patobulintos paslaugos</string>\n    <string name=\"pref_restore_backup_summ\">Atkurti biblioteką iš atsarginės failo kopijos</string>\n    <string name=\"invalid_backup_file_missing_manga\">Atsarginėje kopijoje nėra jokių bibliotekos įrašų.</string>\n    <string name=\"invalid_backup_file\">Netinkamas atsarginės kopijos failas</string>\n    <string name=\"pref_highest\">Aukščiausias</string>\n    <string name=\"pref_create_backup\">Kurti atsarginę kopiją</string>\n    <string name=\"pref_restore_backup\">Atkurti atsarginę kopiją</string>\n    <string name=\"pref_remove_exclude_categories\">Neįtrauktos kategorijos</string>\n    <string name=\"last_read_chapter\">Paskiausiai skaitytas skyrius</string>\n    <string name=\"pref_download_new_categories_details\">Įrašai neįtrauktose kategorijose nebus atsisiųsti, net jei jie taip pat yra įtraukti į kategorijas.</string>\n    <string name=\"learn_more\">Palieskite, kad sužinotumėte daugiau</string>\n    <string name=\"file_select_backup\">Pasirinkti atsarginės kopijos failą</string>\n    <string name=\"transition_pages_loading\">Įkeliami puslapiai…</string>\n    <string name=\"transition_no_next\">Kito skyriaus nėra</string>\n    <string name=\"notification_size_warning\">Dideli atnaujinimai kenkia šaltiniams ir gali lemti lėtesnius atnaujinimus bei didesnį akumuliatoriaus naudojimą. Bakstelėkite , jei norite sužinoti daugiau.</string>\n    <string name=\"viewer\">Skaitymo rėžimas</string>\n    <string name=\"recent_manga_time\">Sk. %1$s - %2$s</string>\n    <string name=\"updating_library\">Atnaujinama biblioteka</string>\n    <string name=\"information_webview_outdated\">Atnaujinkite „WebView“ programą dėl geresnio suderinamumo</string>\n    <string name=\"notification_chapters_single\">Skyrius %1$s</string>\n    <string name=\"clear_history_completed\">Istorija ištrinta</string>\n    <string name=\"decode_image_error\">Nepavyko pakrauti paveikslėlio</string>\n    <string name=\"page_list_empty_error\">Puslapių nerasta</string>\n    <string name=\"clear_history_confirmation\">Ar tu tuo tikras? Visa istorija bus prarasta.</string>\n    <string name=\"confirm_set_image_as_cover\">Naudoti šį paveiksliuką kaip viršelį?</string>\n    <string name=\"pref_category_for_this_series\">Priskirti šiai serijai</string>\n    <string name=\"transition_finished\">Baigta:</string>\n    <string name=\"transition_current\">Dabartinis:</string>\n    <string name=\"notification_update_error\">Nepavyko atnaujinti %1$d</string>\n    <string name=\"notification_first_add_to_library\">Prieš atlikdami šį veiksmą, pridėkite įrašą į savo biblioteką</string>\n    <string name=\"skipped_reason_not_started\">Praleista, nes nėra perskaitytų skyrių</string>\n    <string name=\"information_cloudflare_bypass_failure\">Nepavyko apeiti \\\"Cloudflare\\\"</string>\n    <string name=\"information_webview_required\">\\\"WebView\\\" reikalingas \\\"Mihon\\\"</string>\n    <string name=\"loader_not_implemented_error\">Šaltinis nerastas</string>\n    <string name=\"migration_selection_prompt\">Pasirinkite šaltinį, iš kurio norite perkelti</string>\n    <string name=\"migrate\">Perkelti</string>\n    <string name=\"download_insufficient_space\">Nepavyko atsisiųsti skyrių dėl mažos vietos saugykloje</string>\n    <string name=\"library_errors_help\">Jei reikia pagalbos, kaip ištaisyti bibliotekos naujinimo klaidas, žr. %1$s</string>\n    <string name=\"transition_pages_error\">Nepavyko įkelti puslapių: %1$s</string>\n    <string name=\"transition_previous\">Ankstesnis:</string>\n    <string name=\"update_check_confirm\">Parsisiųsti</string>\n    <string name=\"update_check_notification_download_complete\">Bakstelėkite, kad įdiegtumėte atnaujinimą</string>\n    <string name=\"update_check_eol\">Ši \\\"Android\\\" versija nebepalaikoma</string>\n    <string name=\"update_check_no_new_updates\">Naujų atnaujinimų nėra</string>\n    <string name=\"migration_dialog_what_to_include\">Pasirinkite duomenis, kuriuos norite įtraukti</string>\n    <string name=\"copy\">Kopijuoti</string>\n    <string name=\"notification_new_chapters\">Atrasti nauji skyriai</string>\n    <string name=\"skipped_reason_not_caught_up\">Praleista, nes yra neperskaitytų skyrių</string>\n    <string name=\"update_check_notification_download_in_progress\">Atsiunčiama…</string>\n    <string name=\"file_select_cover\">Pasirinkti viršelio vaizdą</string>\n    <string name=\"information_empty_category_dialog\">Jūs dar neturite jokių kategorijų.</string>\n    <string name=\"transition_no_previous\">Ankstesnio skyriaus nėra</string>\n    <string name=\"skipped_reason_completed\">Praleista, nes leidinys nebeleidžiamas</string>\n    <string name=\"pref_clear_history\">Išvalyti istoriją</string>\n    <string name=\"notification_chapters_single_and_more\">Skyrius %1$s ir %2$d daugiau</string>\n    <string name=\"notification_chapters_multiple\">Skyriai %1$s</string>\n    <string name=\"notification_cover_update_failed\">Nepavyko atnaujinti viršelio</string>\n    <string name=\"error_no_match\">Nerasta atitikmenų</string>\n    <string name=\"dialog_with_checkbox_reset\">Iš naujo nustatyti visus šio įrašo skyrius</string>\n    <string name=\"cover_updated\">Atnaujintas viršelis</string>\n    <string name=\"logout_success\">Dabar esate atsijungęs</string>\n    <string name=\"set_as_cover\">Nustatyti kaip viršelį</string>\n    <string name=\"chapter_paused\">Pristabdyta</string>\n    <string name=\"source_not_installed\">Šaltinis neįdiegtas: %1$s</string>\n    <string name=\"snack_add_to_library\">Pridėti į biblioteką?</string>\n    <string name=\"track_type\">Тipas</string>\n    <string name=\"track_started_reading_date\">Pradžios data</string>\n    <string name=\"display_mode_chapter\">Skyrius %1$s</string>\n    <string name=\"chapter_error\">Klaida</string>\n    <string name=\"login_success\">Prisijungęs</string>\n    <string name=\"unknown_error\">Nežinoma klaida</string>\n    <string name=\"downloaded_chapters\">Atsisiųsti skyriai</string>\n    <string name=\"copied_to_clipboard\">Nukopijuota į iškarpinę:\n\\n%1$s</string>\n    <string name=\"clipboard_copy_error\">Nepavyko nukopijuoti į iškarpinę</string>\n    <string name=\"chapter_downloading_progress\">Atsisiunčiama (%1$d / %2$d)</string>\n    <string name=\"show_chapter_number\">Skyriaus numeris</string>\n    <string name=\"track_finished_reading_date\">Baigimo data</string>\n    <string name=\"show_title\">Šaltinio pavadinimas</string>\n    <string name=\"manga_from_library\">Iš bibliotekos</string>\n    <string name=\"myanimelist_relogin\">Prašome dar kartą prisijungti prie MAL</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Tai pašalins šio skyriaus skaitymo datą. Ar tu tuo tikras?</string>\n    <string name=\"logout_title\">Atsijungti nuo %1$s?</string>\n    <string name=\"source_unsupported\">Šaltinis nepalaikomas</string>\n    <string name=\"logout\">Atsijungti</string>\n    <string name=\"delete_category\">Ištrinti kategoriją</string>\n    <string name=\"action_sort_unread_count\">Neskaitytų skaičius</string>\n    <string name=\"action_sort_last_manga_update\">Paskutinis atnaujinimo patikrinimas</string>\n    <string name=\"delete_category_confirmation\">Ar tikrai norite ištrinti kategoriją \\\"%s\\\"?</string>\n    <string name=\"theme_lavender\">Levandos</string>\n    <string name=\"action_close\">Uždaryti</string>\n    <string name=\"pref_app_language\">Programos kalba</string>\n    <string name=\"action_remove_everything\">Ištrinti viską</string>\n    <string name=\"internal_error\">InternalError: Patikrinkite klaidų žurnalus, kad gautumėte daugiau informacijos</string>\n    <string name=\"network_not_metered\">Kai duomenys neapmokestinami</string>\n    <string name=\"action_move_to_top_all_for_series\">Perkelti seriją į viršų</string>\n    <string name=\"backup_restore_missing_trackers\">Sekimo priemonės, neprijungtos prie:</string>\n    <string name=\"split_tall_images_summary\">Pagerina skaitytuvo našumą</string>\n    <string name=\"ext_info_language\">Kalba</string>\n    <string name=\"ext_info_age_rating\">Amžiaus reitingas</string>\n    <string name=\"rotation_reverse_portrait\">Apverstas portretas</string>\n    <string name=\"action_track\">Trasa</string>\n    <string name=\"edge_nav\">Kraštas</string>\n    <string name=\"disabled_nav\">Išjungtas</string>\n    <string name=\"enhanced_tracking_info\">Paslaugos turinčios patobulintas funkcijas, kurios teikia konkretus šaltiniai. Įrašai automatiškai stebimi, kai įtraukiami į jūsų biblioteką.</string>\n    <string name=\"pref_navigate_pan\">Bakstelėdami slinkti plačius vaizdus</string>\n    <string name=\"pref_landscape_zoom\">Priartinti horizontalų vaizdą</string>\n    <string name=\"ext_info_version\">Versija</string>\n    <string name=\"tracking_info\">Vienpusė sinchronizacija, skirta skaitymo progresui stebėjimo paslaugose atnaujinti. Nustatykite atskirą įrašų sekimą iš jų sekimo mygtuko.</string>\n    <string name=\"pref_create_backup_summ\">Galima naudoti dabartinei bibliotekai atkurti</string>\n    <string name=\"pref_webtoon_side_padding\">Šoninis spaudinėjimas</string>\n    <string name=\"empty_backup_error\">Nėra bibliotekos įrašų, kurių atsargines kopijas būtų galima sukurti</string>\n    <string name=\"clear_database_confirmation\">Ar tikrai? Perskaityti skyriai ir nebibliotekinių įrašų progresas bus prarastas</string>\n    <string name=\"pref_dump_crash_logs_summary\">Įrašyti strigčių žurnalus į failą, kad būtų galima juos bendrinti su kūrėjais</string>\n    <string name=\"creating_backup\">Atsarginės kopijos kūrimas</string>\n    <string name=\"pref_dns_over_https\">DNS per HTTPS (DoH)</string>\n    <string name=\"download_notifier_no_network\">Tinklo ryšis nepasiekiamas</string>\n    <string name=\"download_notifier_unknown_error\">Nepavyko atsisiųsti skyriaus dėl netikėtos klaidos</string>\n    <string name=\"appwidget_unavailable_locked\">Valdiklis nepasiekiamas, kai įjungtas programėlės užraktas</string>\n    <string name=\"appwidget_updates_description\">Peržiūrėkite neseniai atnaujintus bibliotekos įrašus</string>\n    <string name=\"cache_deleted\">Talpykla išvalyta. %1$d failai buvo ištrinti</string>\n    <string name=\"pref_clear_database\">Išvalyti duomenų bazę</string>\n    <string name=\"file_picker_error\">Nerandama failų rinkiklio programos</string>\n    <string name=\"update_check_open\">Atidaryti „GitHub“ svetainėje</string>\n    <string name=\"channel_app_updates\">Programėlių atnaujinimai</string>\n    <string name=\"channel_ext_updates\">Plėtinių atnaujinimai</string>\n    <string name=\"spen_previous_page\">Ankstesnis puslapis</string>\n    <string name=\"restore_miui_warning\">Atsarginės kopijos kūrimas / atkūrimas gali veikti netinkamai, jei \\\"MIUI Optimization\\\" yra išjungtas.</string>\n    <string name=\"restoring_backup_canceled\">Atšauktas atkūrimas</string>\n    <string name=\"backup_info\">Atsargines kopijas turėtumėte laikyti ir kitose vietose.</string>\n    <string name=\"cookies_cleared\">Slapukai išvalyti</string>\n    <string name=\"label_data\">Duomenys</string>\n    <string name=\"clear_database_source_item_count\">%1$d nebibliotekiniai įrašai duomenų bazėje</string>\n    <string name=\"restoring_backup_error\">Nepavyko atkurti atsarginės kopijos</string>\n    <string name=\"label_network\">Tinklas</string>\n    <string name=\"backup_choice\">Ką norite įtraukti į atsarginę kopiją?</string>\n    <string name=\"clear_database_completed\">Ištrinti įrašai</string>\n    <string name=\"pref_clear_chapter_cache\">Išvalyti skyriaus talpyklą</string>\n    <string name=\"used_cache\">Naudota: %1$s</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Nepavyko atidaryti įrenginio nustatymų</string>\n    <string name=\"empty_screen\">Na, tai nepatogu</string>\n    <string name=\"cache_delete_error\">Valymo metu įvyko klaida</string>\n    <string name=\"action_display_cover_only_grid\">Tik viršelių tinklelis</string>\n    <string name=\"tracking_guide\">Stebėjimo vadovas</string>\n    <string name=\"creating_backup_error\">Nepavyko sukurti atsarginės kopijos</string>\n    <string name=\"restore_in_progress\">Atkūrimas jau vyksta</string>\n    <string name=\"restoring_backup\">Atkuriama atsarginė kopija</string>\n    <string name=\"requires_app_restart\">Kad įsigaliotų, reikia iš naujo paleisti programą</string>\n    <string name=\"pref_reset_viewer_flags\">Iš naujo nustatyti kiekvienos serijos skaitytuvo nustatymus</string>\n    <string name=\"pref_dump_crash_logs\">Išmeskite strigčių žurnalus</string>\n    <string name=\"download_queue_error\">Nepavyko atsisiųsti skyrių. Galite pabandyti dar kartą atsisiųsti</string>\n    <string name=\"pref_user_agent_string\">Numatytoji vartotojo agento eilutė</string>\n    <string name=\"not_installed\">Neįdiegtas</string>\n    <string name=\"chapter_settings_updated\">Atnaujinti numatytus skyrių nustatymus</string>\n    <string name=\"download_notifier_downloader_title\">Parsisiuntėjas</string>\n    <string name=\"download_notifier_title_error\">Klaida</string>\n    <string name=\"download_notifier_text_only_wifi\">Nėra „Wi-Fi“ ryšio</string>\n    <string name=\"channel_progress\">Progresas</string>\n    <string name=\"backup_in_progress\">Atsarginė kopija jau kuriama</string>\n    <string name=\"download_queue_size_warning\">Įspėjimas: dėl didelių masinių atsisiuntimų šaltiniai gali tapti lėtesni ir (arba) jie blokuoti \\\"Mihon\\\". Bakstelėkite , jei norite sužinoti daugiau.</string>\n    <string name=\"pref_disable_battery_optimization\">Išjungti akumuliatoriaus optimizavimą</string>\n    <string name=\"restore_completed\">Atkūrimas baigtas</string>\n    <string name=\"restore_duration\">%02d min, %02d sek</string>\n    <string name=\"database_clean\">Nėra ką išvalyti</string>\n    <string name=\"webview_data_deleted\">„WebView“ duomenys išvalyti</string>\n    <string name=\"getting_started_guide\">Darbo pradžios vadovas</string>\n    <string name=\"download_notifier_split_page_not_found\">Puslapis %d nerastas skaidant</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nepavyko rasti puslapio failo kelio %d</string>\n    <string name=\"channel_common\">Bendras</string>\n    <string name=\"channel_complete\">Baigtas</string>\n    <string name=\"download_notifier_download_paused\">Atsisiuntimas pristabdytas</string>\n    <string name=\"channel_new_chapters\">Skyriaus atnaujinimai</string>\n    <string name=\"spen_next_page\">Kitas puslapis</string>\n    <string name=\"pref_clear_cookies\">Išvalyti slapukus</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Išvalyti skyriaus talpyklą uždarius programą</string>\n    <string name=\"pref_clear_database_summary\">Ištrinkite įrašų istoriją, kurie nėra išsaugoti jūsų bibliotekoje</string>\n    <string name=\"backup_restore_content_full\">Atsarginės failo kopijos duomenys bus atkurti.\n\\n\n\\nNorėdami jais naudotis, turėsite įdiegti trūkstamus plėtinius ir po to prisijungti prie stebėjimo paslaugų.</string>\n    <string name=\"pref_reset_user_agent_string\">Iš naujo nustatyti numatytąją vartotojo agento eilutę</string>\n    <string name=\"pref_clear_webview_data\">Išvalyti \\\"WebView\\\" duomenis</string>\n    <string name=\"pref_refresh_library_covers\">Atnaujinti bibliotekos viršelius</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Iš naujo nustatyti visų serijų skaitymo režimą ir orientaciją</string>\n    <string name=\"pref_reset_viewer_flags_success\">Visų skaitytuvo nustatymų nustatymas iš naujo</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nepavyko atstatyti skaitytuvo nustatymų</string>\n    <string name=\"label_background_activity\">Fono veikla</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Padeda su fono bibliotekos naujinimais ir atsarginėmis kopijomis</string>\n    <string name=\"battery_optimization_disabled\">Akumuliatoriaus optimizavimas jau išjungtas</string>\n    <string name=\"channel_errors\">Klaidos</string>\n    <string name=\"pref_verbose_logging_summary\">Spausdinti verbalinius žurnalus į sistemos žurnalą (sumažina programos našumą)</string>\n    <string name=\"pref_verbose_logging\">Daugiažodis registravimas</string>\n    <string name=\"pref_tablet_ui_mode\">Planšetinio kompiuterio UI</string>\n    <string name=\"about_dont_kill_my_app\">Kai kurie gamintojai taiko papildomus programėlių apribojimus, kurie išjungia fono paslaugas. Šioje svetainėje rasite daugiau informacijos, kaip tai ištaisyti.</string>\n    <string name=\"website\">Internetinis puslapis</string>\n    <string name=\"version\">Versija</string>\n    <string name=\"whats_new\">Kas naujo</string>\n    <string name=\"last_used_source\">Paskutinį kartą naudotas</string>\n    <string name=\"chapter_not_found\">Skyrius nerastas</string>\n    <string name=\"publishing_finished\">Skaitinis nepublikuojamas</string>\n    <string name=\"tabs_header\">Skirtukai</string>\n    <string name=\"pref_enable_acra\">Siųsti strigčių ataskaitas</string>\n    <string name=\"plan_to_read\">Planuojama skaityti</string>\n    <string name=\"no_more_results\">Daugiau rezultatų nėra</string>\n    <string name=\"confirm_delete_chapters\">Ar tikrai norite ištrinti pasirinktus skyrius?</string>\n    <string name=\"completed\">Užbaigta</string>\n    <string name=\"check_for_updates\">Ieškoti programos atnaujinimų</string>\n    <string name=\"privacy_policy\">Privatumo politika</string>\n    <string name=\"in_library\">Bibliotekoje</string>\n    <string name=\"reading\">Skaitoma</string>\n    <string name=\"error_saving_cover\">Išsaugant viršelį įvyko klaida</string>\n    <string name=\"pref_acra_summary\">Padeda ištaisyti bet kokias klaidas. Skelbtini duomenys nebus siunčiami</string>\n    <string name=\"password\">Slaptažodis</string>\n    <string name=\"login\">Prisijungti</string>\n    <string name=\"sort_by_source\">Pagal šaltinį</string>\n    <string name=\"sort_by_upload_date\">Pagal įkėlimo datą</string>\n    <string name=\"manga_download\">Atsisiųsti</string>\n    <string name=\"date\">Data</string>\n    <string name=\"updating_category\">Kategorijos atnaujinimas</string>\n    <string name=\"updated_version\">Atnaujinta į v%1$s</string>\n    <string name=\"login_title\">Prisijunkite prie %1$s</string>\n    <string name=\"no_results_found\">Rezultatų nerasta</string>\n    <string name=\"ongoing\">Vykdoma</string>\n    <string name=\"manga_added_library\">Įtraukta į biblioteką</string>\n    <string name=\"manga_cover\">Viršelis</string>\n    <string name=\"pinned_sources\">Prisegtas</string>\n    <string name=\"email\">El. pašto adresas</string>\n    <string name=\"action_global_search_hint\">Pasaulinė paieška…</string>\n    <string name=\"latest\">Naujausia</string>\n    <string name=\"local_source_help_guide\">Vietos šaltinių vadovas</string>\n    <string name=\"cover_saved\">Viršelis išsaugotas</string>\n    <string name=\"no_chapters_error\">Skyrių nerasta</string>\n    <string name=\"dropped\">Atmestas</string>\n    <string name=\"repeating\">Pakartotinis skaitymas</string>\n    <string name=\"reading_list\">Skaitinių sąrašas</string>\n    <string name=\"help_translate\">Padėkite išversti programa</string>\n    <string name=\"paused\">Pristabdytas</string>\n    <string name=\"remove_from_library\">Pašalinti iš bibliotekos</string>\n    <string name=\"local_source\">Vietinis šaltinis</string>\n    <string name=\"action_global_search_query\">Ieškokite \\\"%1$s\\\" visame pasaulyje</string>\n    <string name=\"no_pinned_sources\">Neturite prisegtų šaltinių</string>\n    <string name=\"local_invalid_format\">Netinkamas skyriaus formatas</string>\n    <string name=\"other_source\">Kita</string>\n    <string name=\"licensed\">Licencijuotas</string>\n    <string name=\"delete_downloads_for_manga\">Ištrinti atsisiųstus skyrius?</string>\n    <string name=\"unknown\">Nežinoma</string>\n    <string name=\"unknown_author\">Nežinomas autorius</string>\n    <string name=\"unknown_status\">Nežinoma būsena</string>\n    <string name=\"cancelled\">Nebepublikuojamas</string>\n    <string name=\"description_placeholder\">Nėra aprašymo</string>\n    <string name=\"pref_incognito_mode\">Inkognito režimas</string>\n    <string name=\"browse\">Naršyti</string>\n    <string name=\"on_hiatus\">Publikavimas pristabdytas</string>\n    <string name=\"sort_by_number\">Pagal skyriaus numerį</string>\n    <string name=\"manga_info_expand\">Daugiau</string>\n    <string name=\"also_set_chapter_settings_for_library\">Taip pat taikyti visiems mano bibliotekoje esantiems įrašams</string>\n    <string name=\"set_chapter_settings_as_default\">Nustatyti kaip numatytąjį</string>\n    <string name=\"manga_tracking_tab\">Sekimas</string>\n    <string name=\"licenses\">Atvirojo kodo licencijos</string>\n    <string name=\"label_downloaded_only\">Rodyti tik atsisiųstus</string>\n    <string name=\"pref_incognito_mode_summary\">Pristabdo skaitymo istoriją</string>\n    <string name=\"notification_incognito_text\">Išjungti inkognito režimą</string>\n    <string name=\"downloaded_only_summary\">Filtruoja visus įrašus jūsų bibliotekoje</string>\n    <string name=\"username\">Vartotojo vardas</string>\n    <string name=\"local_filter_order_by\">Rūšiuoti pagal</string>\n    <string name=\"add_to_library\">Pridėti į biblioteką</string>\n    <string name=\"manga_removed_library\">Pašalinti iš bibliotekos</string>\n    <string name=\"manga_info_collapse\">Mažiau</string>\n    <string name=\"download_unread\">Dar neskaitytus</string>\n    <string name=\"custom_cover\">Individualus viršelis</string>\n    <string name=\"error_sharing_cover\">Įvyko klaida bendrinant viršelį</string>\n    <string name=\"chapter_settings\">Skyriaus nustatymai</string>\n    <string name=\"confirm_set_chapter_settings\">Ar tikrai norite išsaugoti šiuos nustatymus kaip numatytuosius?</string>\n    <string name=\"add_tracking\">Pridėti stebėjimą</string>\n    <string name=\"unread\">Neskaityta</string>\n    <string name=\"on_hold\">Sulaikytas</string>\n    <string name=\"wish_list\">Norimų sąrašas</string>\n    <string name=\"complete_list\">Pilnas sąrašas</string>\n    <string name=\"title\">Pavadinimas</string>\n    <string name=\"error_saving_picture\">Klaidą išsaugojant paveikslą</string>\n    <string name=\"status\">Būsena</string>\n    <string name=\"score\">Rezultatas</string>\n    <string name=\"error_category_exists\">Kategorija su šiuo pavadinimu jau egzistuoja!</string>\n    <string name=\"snack_categories_deleted\">Kategorijos ištrintos</string>\n    <string name=\"custom_filter\">Pasirinktinas filtras</string>\n    <string name=\"picture_saved\">Viršelis išsaugotas</string>\n    <string name=\"track_status\">Būsena</string>\n    <string name=\"on_hold_list\">Užlaikytų sąrašas</string>\n    <string name=\"unfinished_list\">Nebaigtų sąrašas</string>\n    <string name=\"share_page_info\">%1$s: %2$s, puslapis %3$d</string>\n    <string name=\"no_next_chapter\">Kitas skyrius nerastas</string>\n    <string name=\"source_empty_screen\">Šaltinis nerastas</string>\n    <string name=\"migration_help_guide\">Šaltinio perkėlimo vadovas</string>\n    <string name=\"cant_open_last_read_chapter\">Nepavyko atidaryti paskutinio skaityto skyriaus</string>\n    <string name=\"chapter_progress\">Puslapis: %1$d</string>\n    <string name=\"transition_next\">Kitas:</string>\n    <string name=\"source_filter_empty_screen\">Įdiegtų šaltinių nerasta</string>\n    <string name=\"theme_tidalwave\">Potvynio banga</string>\n    <string name=\"action_search_hint\">Ieškoti…</string>\n    <string name=\"error_user_agent_string_blank\">Vartotojo agento eilutė negali būti tuščia</string>\n    <string name=\"update_already_running\">Atnaujinimas jau vykdomas</string>\n    <string name=\"updates_last_update_info\">Biblioteka paskutinį kartą atnaujinta: %s</string>\n    <string name=\"remove_manga\">Ketinate pašalinti „%s“ iš bibliotekos</string>\n    <string name=\"download_ahead_info\">Veikia tik bibliotekoje esantiems įrašams ir tik tada, jei jau atsisiųstas dabartinis ir kitas skyrius</string>\n    <string name=\"download_ahead\">Atsisiųsti į priekį</string>\n    <string name=\"auto_download_while_reading\">Automatinis atsisiuntimas beskaitant</string>\n    <string name=\"skipped_reason_not_always_update\">Praleista, nes serijai nereikia atnaujinimų</string>\n    <string name=\"missing_storage_permission\">Nesuteikti saugojimo leidimai</string>\n    <string name=\"pref_downloads_summary\">Automatinis atsisiuntimas, atsisiuntimas į priekį</string>\n    <string name=\"pref_backup_summary\">Rankinės ir automatinės atsarginės kopijos</string>\n    <string name=\"pref_security_summary\">Programos užraktas, saugus ekranas</string>\n    <string name=\"pref_appearance_summary\">Tema, datos ir laiko formatas</string>\n    <string name=\"pref_reader_summary\">Skaitymo režimas, rodymas, navigacija</string>\n    <string name=\"pref_tracking_summary\">Vienpusis progreso sinchronizavimas, patobulintas sinchronizavimas</string>\n    <string name=\"pref_browse_summary\">Šaltiniai, plėtiniai, visuotinė paieška</string>\n    <string name=\"pref_library_summary\">Kategorijos, visuotinis atnaujinimas</string>\n    <string name=\"multi_lang\">Kelių kalbų</string>\n    <string name=\"pref_advanced_summary\">Eksportuoti gedimų žurnalus, akumuliatoriaus optimizavimą</string>\n    <string name=\"invalid_location\">Netinkama vieta: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Netinkama naudotojo agento eilutė</string>\n    <string name=\"unknown_title\">Nežinomas pavadinimas</string>\n    <string name=\"updates_last_update_info_just_now\">Ką tik</string>\n    <string name=\"crash_screen_description\">%s susidūrė su netikėta klaida. Siūlome padaryti šio pranešimo ekrano nuotrauką, išsisaugoti gedimų žurnalus ir pasidalyti tuo mūsų „Discord“ palaikymo kanale.</string>\n    <string name=\"are_you_sure\">Ar esate tikri?</string>\n    <string name=\"popular\">Populiaru</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"crash_screen_restart_application\">Iš naujo paleiskite programą</string>\n    <string name=\"download_notifier_cache_renewal\">Indeksuojami atsisiuntimai</string>\n    <string name=\"fdroid_warning\">F-Droid versijos oficialiai nepalaikomos.\n\\nBakstelėkite, kad sužinotumėte daugiau.</string>\n    <string name=\"information_no_entries_found\">Šioje kategorijoje įrašų nerasta</string>\n    <string name=\"action_open_random_manga\">Atverti atsitiktinį įrašą</string>\n    <string name=\"action_display_show_continue_reading_button\">Rodyti mygtuką „Tęsti” skaitymą</string>\n    <string name=\"track_remove_finish_date_conf_text\">Tai pašalins jūsų anksčiau pasirinktą pabaigos datą iš %s</string>\n    <string name=\"track_remove_date_conf_title\">Pašalinti datą?</string>\n    <string name=\"track_remove_start_date_conf_text\">Tai pašalins jūsų anksčiau pasirinktą pradžios datą iš %s</string>\n    <string name=\"pref_invalidate_download_cache\">Atsisiuntimų indekso panaikinimas</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Priversti programėlę iš naujo patikrinti atsisiųstus skyrius</string>\n    <string name=\"label_downloaded\">Atsiųsta</string>\n    <string name=\"label_overview_section\">Apžvalga</string>\n    <string name=\"label_total_chapters\">Iš viso</string>\n    <string name=\"label_read_chapters\">Perskaityta</string>\n    <string name=\"label_tracker_section\">Sekliai</string>\n    <string name=\"label_titles_in_global_update\">Globaliame atnaujinime</string>\n    <string name=\"label_mean_score\">Vidutinis įvertinimas</string>\n    <string name=\"day_short\">%d d.</string>\n    <string name=\"hour_short\">%d val.</string>\n    <string name=\"label_used\">Naudojama</string>\n    <string name=\"not_applicable\">nėra</string>\n    <string name=\"seconds_short\">%d sek.</string>\n    <string name=\"label_titles_section\">Įrašai</string>\n    <string name=\"label_read_duration\">Skaitymo trukmė</string>\n    <string name=\"label_tracked_titles\">Sekami įrašai</string>\n    <string name=\"label_completed_titles\">Užbaigti įrašai</string>\n    <string name=\"label_stats\">Statistika</string>\n    <string name=\"label_started\">Pradėta</string>\n    <string name=\"label_local\">Vietiniai</string>\n    <string name=\"minute_short\">%d min.</string>\n    <string name=\"action_not_now\">Ne dabar</string>\n    <string name=\"information_no_manga_category\">Kategorija yra tuščia</string>\n    <string name=\"copied_to_clipboard_plain\">Nukopijuota į iškarpinę</string>\n    <string name=\"enhanced_services_not_installed\">Turima, bet šaltinis nėra įdiegtas: %s</string>\n    <string name=\"pref_library_update_show_tab_badge\">Rodyti neperskaitytų skaičių ant Naujienų piktogramos</string>\n    <string name=\"pref_skip_dupe_chapters\">Praleisti pasikartojančius skyrius</string>\n    <string name=\"confirm_add_duplicate_manga\">Bibliotekoje jau turite įrašą tokiu pačiu pavadinimu.\n\\n\n\\nAr vis tiek norite tęsti?</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/lv/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"zero\">Pabeigts %1$s ar %2$s kļūdām</item>\n        <item quantity=\"one\">Pabeigts %1$s ar %2$s kļūdu</item>\n        <item quantity=\"other\">Pabeigts %1$s ar %2$s kļūdām</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"zero\">Pēc %1$s minūtēm</item>\n        <item quantity=\"one\">Pēc %1$s minūtes</item>\n        <item quantity=\"other\">Pēc %1$s minūtēm</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"zero\">%d kategoriju</item>\n        <item quantity=\"one\">%d kategorija</item>\n        <item quantity=\"other\">%d kategorijas</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"zero\">Šodien</item>\n        <item quantity=\"one\">Vakar</item>\n        <item quantity=\"other\">Pirms %1$d dienām</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"zero\">%1$s atlikušas</item>\n        <item quantity=\"one\">%1$s atlikusi</item>\n        <item quantity=\"other\">%1$s atlikušas</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"zero\">%d izsekotāju</item>\n        <item quantity=\"one\">%d izsekotājs</item>\n        <item quantity=\"other\">%d izsekotāji</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"zero\">Priekš %d ierakstiem</item>\n        <item quantity=\"one\">Priekš %d ieraksta</item>\n        <item quantity=\"other\">Priekš %d ierakstiem</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"zero\">Izlaisti %d nodaļu, vai nu to nav avotā, vai arī tie ir izfiltrēti</item>\n        <item quantity=\"one\">Izlaists %d nodaļa, vai nu tā nav avotā, vai arī tā ir izfiltrēta</item>\n        <item quantity=\"other\">Izlaistas %d nodaļas, vai nu tās nav avotā, vai arī tās ir izfiltrētas</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"zero\">%1$d jaunu nodaļu</item>\n        <item quantity=\"one\">%1$d jauna nodaļa</item>\n        <item quantity=\"other\">%1$d jaunas nodaļas</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"zero\">%1$s nodaļu</item>\n        <item quantity=\"one\">%1$s nodaļa</item>\n        <item quantity=\"other\">%1$s nodaļas</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"zero\">Pieejami %d paplašinājumi atjaunināšanai</item>\n        <item quantity=\"one\">Pieejams %d paplašinājums atjaunināšanai</item>\n        <item quantity=\"other\">Pieejami %d paplašinājumi atjaunināšanai</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"zero\">Nodaļu %1$s</item>\n        <item quantity=\"one\">Nodaļa %1$s un vēl 1</item>\n        <item quantity=\"other\">Nodaļa %1$s un vēl %2$d</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"zero\">Trūkst %1$s nodaļu</item>\n        <item quantity=\"one\">Trūkst %1$s nodaļa</item>\n        <item quantity=\"other\">Trūkst %1$s nodaļas</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"zero\">Nākošā %d nodaļa</item>\n        <item quantity=\"one\">Nākošā %d nodaļa</item>\n        <item quantity=\"other\">Nākošās %d nodaļās</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"zero\">Nākamā nelasītā nodaļa</item>\n        <item quantity=\"one\">Nākamā nelasītā nodaļa</item>\n        <item quantity=\"other\">Nākamās %d nelasītas nodaļas</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"zero\">%d dienas</item>\n        <item quantity=\"one\">%d diena</item>\n        <item quantity=\"other\">%d dienas</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/lv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nosaukums</string>\n    <string name=\"categories\">Kategorijas</string>\n    <string name=\"chapters\">Nodaļas</string>\n    <string name=\"track\">Izsekošana</string>\n    <string name=\"history\">Vēsture</string>\n    <string name=\"label_settings\">Iestatījumi</string>\n    <string name=\"label_download_queue\">Lejupieladēšanas rinda</string>\n    <string name=\"label_library\">Bibliotēka</string>\n    <string name=\"label_recent_manga\">Vēsture</string>\n    <string name=\"label_recent_updates\">Atjauninājumi</string>\n    <string name=\"label_backup\">Dublēšana un atjaunošana</string>\n    <string name=\"action_settings\">Iestatījumi</string>\n    <string name=\"action_filter\">Filtrs</string>\n    <string name=\"action_filter_bookmarked\">Ar grāmatzīmēm</string>\n    <string name=\"action_filter_unread\">Neizlasītie</string>\n    <string name=\"action_filter_empty\">Dzēst filtru</string>\n    <string name=\"action_sort_alpha\">Alfabētiski</string>\n    <string name=\"action_sort_total\">Nodaļu daudzums</string>\n    <string name=\"action_sort_last_read\">Pēdēji izlasīti</string>\n    <string name=\"action_search\">Meklēt</string>\n    <string name=\"action_select_all\">Atlasīt visus</string>\n    <string name=\"action_mark_as_read\">Atzīmēt kā izlasītu</string>\n    <string name=\"action_mark_as_unread\">Atzīmēt kā neizlasītu</string>\n    <string name=\"action_mark_previous_as_read\">Atzīmēt iepriekšējus kā izlasītus</string>\n    <string name=\"action_download\">Lejupieladēt</string>\n    <string name=\"action_bookmark\">Grāmatzīme</string>\n    <string name=\"action_remove_bookmark\">Noņemt grāmatzīmi</string>\n    <string name=\"action_delete\">Dzēst</string>\n    <string name=\"action_update_library\">Atjaunināt bibliotēku</string>\n    <string name=\"action_edit\">Rediģēt</string>\n    <string name=\"action_add\">Pievienot</string>\n    <string name=\"action_add_category\">Pievienot kategoriju</string>\n    <string name=\"action_edit_categories\">Rediģēt kategorijas</string>\n    <string name=\"action_rename_category\">Pārdēvēt kategoriju</string>\n    <string name=\"action_move_category\">Noteikt kategorijas</string>\n    <string name=\"action_edit_cover\">Rediģēt vāku</string>\n    <string name=\"action_pause\">Pārtraukt</string>\n    <string name=\"action_previous_chapter\">Iepriekšēja nodaļa</string>\n    <string name=\"action_next_chapter\">Nākama nodaļa</string>\n    <string name=\"action_retry\">Mēģināt vēlreiz</string>\n    <string name=\"action_remove\">Dzēst</string>\n    <string name=\"action_resume\">Turpināt</string>\n    <string name=\"action_open_in_browser\">Atvērt pārlūkā</string>\n    <string name=\"action_display_mode\">Displeja režīms</string>\n    <string name=\"action_display\">Radīt</string>\n    <string name=\"action_display_grid\">Kompakts režģis</string>\n    <string name=\"action_display_list\">Saraksts</string>\n    <string name=\"action_cancel\">Atcelt</string>\n    <string name=\"action_sort\">Kārtot</string>\n    <string name=\"action_install\">Instalēt</string>\n    <string name=\"action_share\">Dalīties</string>\n    <string name=\"action_save\">Saglabāt</string>\n    <string name=\"action_reset\">Sākt no jauna</string>\n    <string name=\"action_undo\">atraisīt</string>\n    <string name=\"action_open_log\">Atvērt žurnālfailu</string>\n    <string name=\"action_restore\">Atjaunot</string>\n    <string name=\"loading\">Ieladēšana…</string>\n    <string name=\"app_not_available\">Programma nav pieejama</string>\n    <string name=\"pref_category_general\">Vispārīgas</string>\n    <string name=\"pref_category_reader\">Lasītājs</string>\n    <string name=\"pref_category_downloads\">Lejupieladējumi</string>\n    <string name=\"pref_category_tracking\">Izsekošana</string>\n    <string name=\"pref_category_advanced\">Papildu iestatījumi</string>\n    <string name=\"pref_category_about\">Par programmu</string>\n    <string name=\"channel_common\">Biežs</string>\n    <string name=\"download_notifier_no_network\">Tīkla savienojums nav pieejams</string>\n    <string name=\"download_notifier_text_only_wifi\">Nav pieejams Wi-Fi savienojums</string>\n    <string name=\"download_notifier_unknown_error\">Nevarēja lejupielādēt nodaļu neparedzētas kļūdas dēļ</string>\n    <string name=\"download_notifier_title_error\">Kļūda</string>\n    <string name=\"download_notifier_downloader_title\">Lejupielādētājs</string>\n    <string name=\"information_webview_outdated\">Lai uzlabotu saderību, lūdzu, atjauniniet WebView lietotni</string>\n    <string name=\"information_webview_required\">Lai aplikācija strādātu ir nepieciešams WebView</string>\n    <string name=\"restoring_backup_error\">Dublējuma atjaunošana neizdevās</string>\n    <string name=\"restoring_backup\">Dublējuma atjaunošana</string>\n    <string name=\"restore_in_progress\">Atjaunošana jau notiek</string>\n    <string name=\"creating_backup_error\">Dublēšana neizdevās</string>\n    <string name=\"creating_backup\">Izveido dublējumu</string>\n    <string name=\"backup_choice\">Ko vēlaties dublēt?</string>\n    <string name=\"backup_in_progress\">Dublēšana jau notiek</string>\n    <string name=\"restore_duration\">%02d min, %02d sec</string>\n    <string name=\"restore_completed\">Atjaunošana pabeigta</string>\n    <string name=\"backup_restore_missing_sources\">Trūkstošie avoti:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Dublējumā nav neviena bibliotēkas ieraksta.</string>\n    <string name=\"label_extension_info\">Paplašinājumu informācija</string>\n    <string name=\"label_extensions\">Paplašinājumi</string>\n    <string name=\"tapping_inverted_both\">Abi</string>\n    <string name=\"tapping_inverted_vertical\">Vertikāls</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontāls</string>\n    <string name=\"tapping_inverted_none\">Nav</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invertētas skāriena zonas</string>\n    <string name=\"channel_ext_updates\">Paplašinājumu atjauninājumi</string>\n    <string name=\"channel_new_chapters\">Nodaļu atjauninājumi</string>\n    <string name=\"download_notifier_download_paused\">Lejupielādes pauzētas</string>\n    <string name=\"information_no_downloads\">Nav lejuplāžu</string>\n    <string name=\"label_help\">Palīdzība</string>\n    <string name=\"label_migration\">Migrēt</string>\n    <string name=\"label_sources\">Avoti</string>\n    <string name=\"label_more\">Vairāk</string>\n    <string name=\"action_display_comfortable_grid\">Ērts režģis</string>\n    <string name=\"action_migrate\">Migrēt</string>\n    <string name=\"action_open_in_web_view\">Atvērt WebView</string>\n    <string name=\"action_start\">Sākt</string>\n    <string name=\"action_view_chapters\">Skatīt nodaļas</string>\n    <string name=\"action_disable_all\">Atspējot visu</string>\n    <string name=\"action_enable_all\">Iespējot visu</string>\n    <string name=\"action_select_inverse\">Atlasiet apgrieztu</string>\n    <string name=\"action_global_search\">Globālā meklēšana</string>\n    <string name=\"action_sort_date_added\">Pievienošanas datums</string>\n    <string name=\"action_sort_latest_chapter\">Jaunākā nodaļa</string>\n    <string name=\"action_menu\">Izvēlne</string>\n    <string name=\"information_empty_category\">Jums nav nevienas kategorijas. Pieskarieties plus pogai, lai izveidotu kategoriju savas bibliotēkas organizēšanai.</string>\n    <string name=\"information_empty_library\">Jūsu bibliotēka ir tukša</string>\n    <string name=\"information_no_recent_manga\">Nekas nesen lasīts</string>\n    <string name=\"information_no_recent\">Nekas nesen lasīts</string>\n    <string name=\"action_newest\">Jaunākais</string>\n    <string name=\"action_cancel_all\">Atcelt visu</string>\n    <string name=\"action_unpin\">Atspraust</string>\n    <string name=\"action_pin\">Piespraust</string>\n    <string name=\"action_disable\">Atspējot</string>\n    <string name=\"action_display_show_tabs\">Rādīt kategoriju cilnes</string>\n    <string name=\"update_check_no_new_updates\">Nav pieejamas jaunas nodaļas</string>\n    <string name=\"update_check_confirm\">Lejuplādēt</string>\n    <string name=\"landscape\">Ainava</string>\n    <string name=\"portrait\">Portrets</string>\n    <string name=\"pref_library_columns\">Režģa izmērs</string>\n    <string name=\"pref_category_display\">Displejs</string>\n    <string name=\"hide_notification_content\">Slēpt paziņojumu saturu</string>\n    <string name=\"secure_screen_summary\">Drošs ekrāns paslēpj saturu mainot lietotnes, un bloķē ekrānuzņēmumus</string>\n    <string name=\"secure_screen\">Drošs ekrāns</string>\n    <string name=\"lock_never\">Nekad</string>\n    <string name=\"lock_always\">Vienmēr</string>\n    <string name=\"lock_when_idle\">Bloķēt, ja dīkstāvē</string>\n    <string name=\"lock_with_biometrics\">Vajadzīgs atbloķēt</string>\n    <string name=\"pref_category_security\">Drošība un privātums</string>\n    <string name=\"pref_manage_notifications\">Pārvaldiet paziņojumus</string>\n    <string name=\"pref_date_format\">Datuma formāts</string>\n    <string name=\"theme_dark\">Ieslēgts</string>\n    <string name=\"theme_light\">Izslēgts</string>\n    <string name=\"theme_system\">Sekot sistēmu</string>\n    <string name=\"pref_category_theme\">Motīvs</string>\n    <string name=\"pref_category_library\">Bibliotēka</string>\n    <string name=\"action_webview_refresh\">Atjaunot</string>\n    <string name=\"action_webview_forward\">Uz priekšu</string>\n    <string name=\"action_webview_back\">Atpakaļ</string>\n    <string name=\"action_move_to_bottom\">Pārvietot uz leju</string>\n    <string name=\"action_move_to_top\">Pārvietot uz augšu</string>\n    <string name=\"action_oldest\">Vecākais</string>\n    <string name=\"action_display_download_badge\">Lejuplādēt nodaļas</string>\n    <string name=\"action_desc\">Dilstoši</string>\n    <string name=\"action_asc\">Augoši</string>\n    <string name=\"action_order_by_chapter_number\">Pēc nodaļas numura</string>\n    <string name=\"action_display_show_number_of_items\">Parādīt lietu skaitu</string>\n    <string name=\"updating_library\">Atjauninās bibliotēka</string>\n    <string name=\"action_filter_tracked\">Izsekots</string>\n    <string name=\"default_category\">Noklusētā kategorija</string>\n    <string name=\"action_search_settings\">Meklēt Uzstādījumos</string>\n    <string name=\"completed\">Pabeigts</string>\n    <string name=\"licensed\">Licencēts</string>\n    <string name=\"unknown\">Nezināms</string>\n    <string name=\"ongoing\">Vēl turpinās</string>\n    <string name=\"title\">Nosaukums</string>\n    <string name=\"pref_category_delete_chapters\">Izdzēst nodaļas</string>\n    <string name=\"pref_category_auto_download\">Automātiska lejupielāde</string>\n    <string name=\"pref_restore_backup\">Atjaunot dublējumu</string>\n    <string name=\"backup_restore_missing_trackers\">Sekotāji, kas nav pieteikušies:</string>\n    <string name=\"backup_restore_content_full\">Dublējuma faila dati tiks atjaunoti.\n\\n\n\\nJums būs jāinstalē visi trūkstošie paplašinājumi un jāpiesakās izsekošanas pakalpojumos, lai tos izmantotu.</string>\n    <string name=\"unread\">Neizlasītie</string>\n    <string name=\"all\">Visi</string>\n    <string name=\"ext_update\">Atjauninājums</string>\n    <string name=\"ext_downloading\">Lejupielādē</string>\n    <string name=\"ext_installing\">Instalē</string>\n    <string name=\"ext_app_info\">Aplikācijas informācija</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"confirm_lock_change\">Autentificējaties, lai apstriprinātu izmaiņas</string>\n    <string name=\"pref_update_only_non_completed\">Ar \\'\\'Pabeigts\\'\\' statusu</string>\n    <string name=\"action_start_downloading_now\">Sākt lejupielādi tūlīt</string>\n    <string name=\"extension_api_error\">Neizdevās iegūt paplašinājumu sarakstu</string>\n    <string name=\"pref_show_navigation_mode_summary\">Īsi parādīt, kad ir atvērts lasītājs</string>\n    <string name=\"restrictions\">Ierobežojums: %s</string>\n    <string name=\"pref_library_update_refresh_metadata\">Automātiski atsvaidzina metadatus</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Atjauninot bibliotēku, meklēt jaunu vāku un kopsavilkumu</string>\n    <string name=\"network_not_metered\">Tikai nemērītā tīklā</string>\n    <string name=\"charging\">Uzlādējot</string>\n    <string name=\"ext_info_version\">Versija</string>\n    <string name=\"ext_info_language\">Valoda</string>\n    <string name=\"ext_info_age_rating\">Vecuma grupa</string>\n    <string name=\"action_sort_last_manga_update\">Pēdējā atjauninājuma pārbaude</string>\n    <string name=\"action_sort_unread_count\">Neizlasītais skaits</string>\n    <string name=\"action_show_manga\">Rādīt ierakstu</string>\n    <string name=\"ext_nsfw_warning\">Šī paplašinājuma avoti var saturēt NSFW (18+) saturu</string>\n    <string name=\"ext_install_service_notif\">Instalē paplašinājumu…</string>\n    <string name=\"ext_installer_pref\">Instalētājs</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku nedarbojas</string>\n    <string name=\"theme_monet\">Dinamisks</string>\n    <string name=\"action_sort_count\">Visi ieraksti</string>\n    <string name=\"cancel_all_for_series\">Atcelt visu šai sērijai</string>\n    <string name=\"action_order_by_upload_date\">Pēc augšupielādes datuma</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) avoti</string>\n    <string name=\"pref_show_nsfw_source\">Rādīt avotos un paplašinājumu sarakstos</string>\n    <string name=\"update_never\">Izslēgts</string>\n    <string name=\"action_display_language_badge\">Valoda</string>\n    <string name=\"action_sort_chapter_fetch_date\">Nodaļas ieneses datums</string>\n    <string name=\"action_close\">Aizvērt</string>\n    <string name=\"pref_category_library_update\">Globāls atjauninājums</string>\n    <string name=\"parental_controls_info\">Šis neliedz neoficiāliem vai, iespējams, nepareizi atzīmētiem paplašinājumiem parādīties NSFW (18+) saturu lietotnē.</string>\n    <string name=\"relative_time_today\">Šodien</string>\n    <string name=\"pref_library_update_interval\">Automātiskie atjauninājumi</string>\n    <string name=\"update_weekly\">Katru nedēļu</string>\n    <string name=\"pref_library_update_restriction\">Automātiskās atjaunināšanas ierīču ierobežojumi</string>\n    <string name=\"exclude\">Izslēgt: %s</string>\n    <string name=\"ext_obsolete\">Novecojis</string>\n    <string name=\"ext_install\">Instalēt</string>\n    <string name=\"ext_pending\">Gaida</string>\n    <string name=\"ext_uninstall\">Atinstalēt</string>\n    <string name=\"untrusted_extension\">Neuzticams paplašinājums</string>\n    <string name=\"untrusted_extension_message\">Šis paplašinājums tika parakstīts ar neuzticamu sertifikātu, un tas netika aktivizēts.\n\\n\n\\nĻaunprātīgs paplašinājums var nolasīt visus saglabātos pieteikšanās akreditācijas datus vai izpildīt patvaļīgu kodu.\n\\n\n\\nUzticoties šim sertifikātam, jūs piekrītat šiem riskiem.</string>\n    <string name=\"ext_installer_legacy\">Mantots</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instalējiet un startējiet Shizuku, lai izmantotu Shizuku kā paplašinājuma instalētāju.</string>\n    <string name=\"pref_fullscreen\">Pilnekrāns</string>\n    <string name=\"pref_show_navigation_mode\">Rādīt skāriena zonu pārklājumu</string>\n    <string name=\"pref_dual_page_invert_summary\">Ja sadalīto plato lapu izvietojums neatbilst lasīšanas virzienam</string>\n    <string name=\"pref_page_transitions\">Animēt lappušu pārejas</string>\n    <string name=\"pref_show_page_number\">Rādīt lappušu numuru</string>\n    <string name=\"pref_show_reading_mode\">Rādīt lasīšanas režīmu</string>\n    <string name=\"pref_show_reading_mode_summary\">Pēc lasītāja atvēršanas īsi parādīt pašreizējo režīmu</string>\n    <string name=\"on\">Ieslēgts</string>\n    <string name=\"off\">Izslēgts</string>\n    <string name=\"pref_custom_brightness\">Pielāgots spilgtums</string>\n    <string name=\"pref_grayscale\">Pelēktoņu</string>\n    <string name=\"pref_custom_color_filter\">Pielāgots krāsu filtrs</string>\n    <string name=\"pref_color_filter_mode\">Krāsu filtra sajaukšanas režīms</string>\n    <string name=\"filter_mode_overlay\">Parklājums</string>\n    <string name=\"action_move_to_top_all_for_series\">Pārvietot sēriju uz augšu</string>\n    <string name=\"pref_category_appearance\">Izskats</string>\n    <string name=\"pref_app_theme\">Aplikācijas tēma</string>\n    <string name=\"theme_greenapple\">Zaļš Ābols</string>\n    <string name=\"theme_midnightdusk\">Pusnakts Krēsla</string>\n    <string name=\"theme_strawberrydaiquiri\">Zemeņu Daikirs</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_tealturquoise\">Teāls un Tirkīzs</string>\n    <string name=\"theme_yinyang\">Jiņ &amp; Jan</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Pilnīgi melns tumšais režīms</string>\n    <string name=\"pref_app_language\">Aplikācijas valoda</string>\n    <string name=\"pref_update_only_completely_read\">Ar nelasītu(ām) nodaļu(ām)</string>\n    <string name=\"pref_update_only_started\">Kas nav sāktas</string>\n    <string name=\"default_category_summary\">Vienmēr jautāt</string>\n    <string name=\"categorized_display_settings\">Kategorijas iestatījumi kārtošanai</string>\n    <string name=\"pref_library_update_categories_details\">Izslēgto kategoriju ieraksti netiks atjaunināti, pat ja tie ir iekļautajās kategorijās.</string>\n    <string name=\"none\">Neviens</string>\n    <string name=\"include\">Iekļaut: %s</string>\n    <string name=\"ext_update_all\">Atjaunināt visu</string>\n    <string name=\"ext_updates_pending\">Gaida atjauninājumu</string>\n    <string name=\"ext_installed\">Instalēts</string>\n    <string name=\"ext_trust\">Uzticams</string>\n    <string name=\"ext_untrusted\">Neuzticams</string>\n    <string name=\"obsolete_extension_message\">Šis paplašinājums vairs nav pieejams. Tas var nedarboties pareizi un var radīt problēmas ar lietotni. Ieteicams to atinstalēt.</string>\n    <string name=\"pref_dual_page_split\">Sadalīt platas lapas</string>\n    <string name=\"pref_dual_page_invert\">Apvērst dalītās lapas izvietojumu</string>\n    <string name=\"pref_cutout_short\">Rādīt saturu izgriezuma apgabalā</string>\n    <string name=\"pref_double_tap_anim_speed\">Dubultpieskāriena animācijas ātrums</string>\n    <string name=\"pref_crop_borders\">Apgriezt apmales</string>\n    <string name=\"action_show_errors\">Pieskarieties, lai skatītu detalizētu informāciju</string>\n    <string name=\"update_6hour\">Ik pēc 6 stundām</string>\n    <string name=\"update_12hour\">Ik pēc 12 stundām</string>\n    <string name=\"update_24hour\">Katru dienu</string>\n    <string name=\"update_48hour\">Ik pēc 2 dienam</string>\n    <string name=\"update_72hour\">Ik pēc 3 dienām</string>\n    <string name=\"connected_to_wifi\">Tikai uz Wi-Fi</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"pref_keep_screen_on\">Turēt ekrānu ieslēgtu</string>\n    <string name=\"zoom_start_center\">Centrs</string>\n    <string name=\"rotation_type\">Rotācijas tips</string>\n    <string name=\"rotation_free\">Brīvs</string>\n    <string name=\"scale_type_original_size\">Oriģinālais lielums</string>\n    <string name=\"zoom_start_automatic\">Automātisks</string>\n    <string name=\"zoom_start_left\">Pa kreisi</string>\n    <string name=\"zoom_start_right\">Pa labi</string>\n    <string name=\"double_tap_anim_speed_normal\">Normāls</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Atļaut dzēst ar grāmatzīmēm atzīmētās nodaļas</string>\n    <string name=\"last_read_chapter\">Pēdējā lasītā nodaļa</string>\n    <string name=\"second_to_last\">Pirmspēdējā nodaļa</string>\n    <string name=\"pref_download_new\">Lejupielādē jaunās nodaļas</string>\n    <string name=\"rotation_reverse_portrait\">Pretējs portrets</string>\n    <string name=\"black_background\">Melns</string>\n    <string name=\"label_default\">Noklusējums</string>\n    <string name=\"pref_reader_actions\">Darbība</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_always_show_chapter_transition\">Vienmēr rādīt nodaļu pāreju</string>\n    <string name=\"pref_hide_threshold\">Jutīgums, lai ritinājumā paslēptu izvēlni</string>\n    <string name=\"rotation_force_landscape\">Aizslēgts ainavas režīmā</string>\n    <string name=\"pref_lowest\">Zemākais</string>\n    <string name=\"pref_remove_after_marked_as_read\">Pēc manuālas atzīmēšanas kā lasītu</string>\n    <string name=\"save_chapter_as_cbz\">Saglabāt kā CBZ arhīvu</string>\n    <string name=\"nav_zone_next\">Nākamais</string>\n    <string name=\"l_nav\">L formas</string>\n    <string name=\"gray_background\">Pelēks</string>\n    <string name=\"disabled_nav\">Atspējots</string>\n    <string name=\"white_background\">Balts</string>\n    <string name=\"vertical_plus_viewer\">Garā strīpā ar pārtraukumu</string>\n    <string name=\"pref_webtoon_side_padding\">Sānu platums</string>\n    <string name=\"pref_remove_exclude_categories\">Izslēgtās kategorijas</string>\n    <string name=\"action_display_local_badge\">Lokālais avots</string>\n    <string name=\"pref_create_folder_per_manga\">Saglabāt lappuses atsevišķās mapēs</string>\n    <string name=\"nav_zone_prev\">Iepriekšējais</string>\n    <string name=\"pref_viewer_type\">Noklusējuma lasīšanas režīms</string>\n    <string name=\"kindlish_nav\">Kindle-ish</string>\n    <string name=\"nav_zone_left\">Pa kreisi</string>\n    <string name=\"edge_nav\">Mala</string>\n    <string name=\"right_and_left_nav\">Pa labi un pa kreisi</string>\n    <string name=\"nav_zone_right\">Pa labi</string>\n    <string name=\"left_to_right_viewer\">Lapaspuses (no kreisās puses uz labo)</string>\n    <string name=\"webtoon_viewer\">Garā strīpā</string>\n    <string name=\"pref_viewer_nav\">Skāriena zonas</string>\n    <string name=\"scale_type_stretch\">Izstiept</string>\n    <string name=\"scale_type_fit_width\">Ietilpt platumā</string>\n    <string name=\"scale_type_fit_height\">Ietilpt augstumā</string>\n    <string name=\"double_tap_anim_speed_0\">Nav animācijas</string>\n    <string name=\"rotation_landscape\">Ainava</string>\n    <string name=\"rotation_portrait\">Portrets</string>\n    <string name=\"rotation_force_portrait\">Aizslēgts portreta režīmā</string>\n    <string name=\"pref_category_reading_mode\">Lasīšanas režīms</string>\n    <string name=\"right_to_left_viewer\">Lapaspuses (no labās puses uz kreiso)</string>\n    <string name=\"vertical_viewer\">Lapaspuses (vertikāli)</string>\n    <string name=\"manga\">Bibliotēkas ieraksti</string>\n    <string name=\"double_tap_anim_speed_fast\">Ātrs</string>\n    <string name=\"pref_rotation_type\">Noklusējuma rotācijas tips</string>\n    <string name=\"pref_high\">Augsts</string>\n    <string name=\"pref_highest\">Augstākais</string>\n    <string name=\"label_warning\">Brīdinājums</string>\n    <string name=\"pref_skip_read_chapters\">Izlaist izlasītās nodaļas</string>\n    <string name=\"pref_inverted_colors\">Invertēts</string>\n    <string name=\"filter_mode_multiply\">Reizināt</string>\n    <string name=\"filter_mode_screen\">Ekrāns</string>\n    <string name=\"pref_skip_filtered_chapters\">Izlaist filtrētās nodaļas</string>\n    <string name=\"pref_reader_navigation\">Navigācija</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Invertēt skaļuma regulēšanas taustiņus</string>\n    <string name=\"pref_read_with_long_tap\">Rādīt darbīūbas ar ilgu pieskārienu</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Izveido mapes atbilstoši ieraksta nosaukumam</string>\n    <string name=\"pref_reader_theme\">Fona krāsa</string>\n    <string name=\"pref_image_scale_type\">Mēroga tips</string>\n    <string name=\"scale_type_fit_screen\">Ietilpt ekrānā</string>\n    <string name=\"scale_type_smart_fit\">Viedā ietilpšana</string>\n    <string name=\"pref_zoom_start\">Tālummaiņas sākuma pozīcija</string>\n    <string name=\"pref_low\">Zems</string>\n    <string name=\"pref_remove_after_read\">Pēc lasīšanas automātiski izdzēst nodaļas</string>\n    <string name=\"disabled\">Atspējots</string>\n    <string name=\"pref_download_new_categories_details\">Izslēgto kategorijas ieraksti netiks lejupielādēti pat tad, ja tie ir iekļautajās kategorijās.</string>\n    <string name=\"pref_read_with_volume_keys\">Skaļuma regulēšanas taustiņi</string>\n    <string name=\"privacy_policy\">Konfidencialitātes politika</string>\n    <string name=\"pref_create_backup_summ\">Var izmantot, lai atjaunotu pašreizējo bibliotēku</string>\n    <string name=\"split_tall_images_summary\">Uzlabo lasītāja veiktspēju, sadalot garus lejupielādētus attēlus</string>\n    <string name=\"enhanced_tracking_info\">Pakalpojumi, kas nodrošina uzlabotus līdzekļus konkrētiem avotiem. Pievienojot bibliotēkai, ieraksts tiks automātiski izsekots.</string>\n    <string name=\"pref_create_backup\">Izveidot dublējumu</string>\n    <string name=\"invalid_backup_file\">Nederīgs dublējuma fails</string>\n    <string name=\"pref_backup_interval\">Dublējumu biežums</string>\n    <string name=\"backup_info\">Kopijas vajadzētu glabāt arī citās vietās.</string>\n    <string name=\"about_dont_kill_my_app\">Dažiem ražotājiem ir papildu lietojumprogrammu ierobežojumi, kas iznīcina fona pakalpojumus. Šajā vietnē ir vairāk informācijas par to, kā to izlabot.</string>\n    <string name=\"tracking_info\">Vienvirziena sinhronizācija, lai atjauninātu izsekošanas pakalpojumu nodaļas progresu. Iestatiet izsekošanu atsevišķiem ierakstiem, izmantojot izsekošanas pogu.</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Palīdz ar fona bibliotēku atjauninājumiem un dublējumiem</string>\n    <string name=\"battery_optimization_disabled\">Akumulatora optimizācija jau ir atspējota</string>\n    <string name=\"pref_verbose_logging_summary\">Drukāt verbose žurnālus sistēmas žurnālā (samazina programmas veiktspēju)</string>\n    <string name=\"pref_auto_update_manga_sync\">Atjaunot progresu pēc lasīšanas</string>\n    <string name=\"tracking_guide\">Izsekošanas rokasgrāmata</string>\n    <string name=\"pref_dump_crash_logs\">Dalīties ar avārijas žurnālu</string>\n    <string name=\"pref_dump_crash_logs_summary\">Saglabā kļūdu žurnālus failā priekš koplietošanas ar izstrādātājiem</string>\n    <string name=\"pref_clear_chapter_cache\">Notīrīt nodaļas kešatmiņu</string>\n    <string name=\"pref_refresh_library_covers\">Atsvaidzināt bibliotēkas vākus</string>\n    <string name=\"clear_database_completed\">Ieraksti izdzēsti</string>\n    <string name=\"empty_backup_error\">Nav bibliotēkas ierakstu, ko dublēt</string>\n    <string name=\"restoring_backup_canceled\">Atjaunošana atcelta</string>\n    <string name=\"restore_miui_warning\">Dublēšana/atjaunošana var nedarboties pareizi, ja ir atspējota MIUI Optimization.</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Notīriet nodaļu kešatmiņu, atverot lietotni</string>\n    <string name=\"clear_database_source_item_count\">%1$d ierakstu, kas nav bibliotēkas, ir datu bāzē</string>\n    <string name=\"label_network\">Tīkls</string>\n    <string name=\"label_data\">Dati</string>\n    <string name=\"used_cache\">Izmantots: %1$s</string>\n    <string name=\"clear_database_confirmation\">Vai esi pārliecināts? Lasītās nodaļas un progress priekš ieraksta, kuras nav bibliotēkā, būs zudis</string>\n    <string name=\"database_clean\">Nav ko tīrīt</string>\n    <string name=\"pref_disable_battery_optimization\">Atspējot akumulatora optimizāciju</string>\n    <string name=\"pref_restore_backup_summ\">Atjaunot bibliotēku no dublējuma faila</string>\n    <string name=\"pref_clear_cookies\">Notīrīt sīkfailus</string>\n    <string name=\"pref_dns_over_https\">Izvēlēties DNS pār HTTPS (DoH)</string>\n    <string name=\"cookies_cleared\">Sīkfaili notīrīti</string>\n    <string name=\"cache_delete_error\">Tīrīšanas laikā radās kļūda</string>\n    <string name=\"pref_clear_database\">Notīrīt datu bāzi</string>\n    <string name=\"pref_clear_database_summary\">Dzēst vēsturi ierakstiem, kas nav saglabāti jūsu bibliotēkā</string>\n    <string name=\"pref_reset_viewer_flags\">Atiestatīt atsevišķu sēriju lasītāja iestatījumus</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Atiestatīt katras sērijas lasīšanas režīmu un orientāciju</string>\n    <string name=\"pref_tablet_ui_mode\">Planšetdatora lietotāja interfeiss</string>\n    <string name=\"pref_verbose_logging\">Verbose reģistrēšana</string>\n    <string name=\"website\">Tīmekļa vietne</string>\n    <string name=\"version\">Versija</string>\n    <string name=\"whats_new\">Jaunumi</string>\n    <string name=\"updated_version\">Atjaunināts uz v%1$s</string>\n    <string name=\"licenses\">Atvērtā avota licences</string>\n    <string name=\"check_for_updates\">Pārbaudīt, vai nav atjauninājumu</string>\n    <string name=\"pref_clear_webview_data\">Notīrīt WebView datus</string>\n    <string name=\"webview_data_deleted\">WebView dati notīrīti</string>\n    <string name=\"label_background_activity\">Fona darbība</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Nevarēja atvērt ierīces iestatījumus</string>\n    <string name=\"services\">Serviss</string>\n    <string name=\"backup_created\">Dublējums izveidots</string>\n    <string name=\"pref_reset_viewer_flags_success\">Visi lasītāja iestatījumi atiestatīti</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nevarēja atiestatīt lasītāja iestatījumus</string>\n    <string name=\"requires_app_restart\">Lai stātos spēkā, ir nepieciešama lietotnes restartēšana</string>\n    <string name=\"action_track\">Sekot</string>\n    <string name=\"enhanced_services\">Uzlabotie pakalpojumi</string>\n    <string name=\"help_translate\">Palīdzi tulkot</string>\n    <string name=\"pref_enable_acra\">Sūtīt avārijas ziņojumus</string>\n    <string name=\"cache_deleted\">Kešatmiņa nodzēsta. %1$d faili ir izdzēsti</string>\n    <string name=\"action_display_cover_only_grid\">Tikai vāka režģis</string>\n    <string name=\"username\">Lietotājvārds</string>\n    <string name=\"password\">Parole</string>\n    <string name=\"pref_acra_summary\">Palīdz novērst jebkādas problēmas. Sensitīvi dati netiks nosūtīti</string>\n    <string name=\"email\">E-pasta adrese</string>\n    <string name=\"login\">Pieteikumvārds</string>\n    <string name=\"pref_incognito_mode_summary\">Pauzē lasīšanas vēsturi</string>\n    <string name=\"pref_incognito_mode\">Inkognito režīms</string>\n    <string name=\"no_results_found\">Rezultāti nav atrasti</string>\n    <string name=\"downloaded_only_summary\">Filtrēt visus ierakstus bibliotēkā</string>\n    <string name=\"no_more_results\">Vairāk rezultātu nav</string>\n    <string name=\"login_success\">Pieteicies</string>\n    <string name=\"logout_title\">Izrakstīties no %1$s?</string>\n    <string name=\"login_title\">Pieteikties %1$s</string>\n    <string name=\"manga_from_library\">No bibliotēkas</string>\n    <string name=\"last_used_source\">Pēdējo reizi izmantots</string>\n    <string name=\"action_global_search_query\">Meklēt \\\"%1$s\\\" globāli</string>\n    <string name=\"latest\">Jaunākais</string>\n    <string name=\"pref_category_reading\">Šobrīd lasa</string>\n    <string name=\"third_to_last\">Trešā pirmspēdējā izlasītā nodaļa</string>\n    <string name=\"pager_viewer\">Lapaspušu skats</string>\n    <string name=\"logout\">Izrakstīties</string>\n    <string name=\"pinned_sources\">Piesprausts</string>\n    <string name=\"other_source\">Citi</string>\n    <string name=\"logout_success\">Tagad jūs esat izrakstījies</string>\n    <string name=\"tabs_header\">Cilnes</string>\n    <string name=\"local_source\">Lokālais avots</string>\n    <string name=\"browse\">Pārlūkot</string>\n    <string name=\"local_source_help_guide\">Lokālo avotu rokasgrāmata</string>\n    <string name=\"no_pinned_sources\">Jums nav piespraustu avotu</string>\n    <string name=\"chapter_not_found\">Nodaļa nav atrasta</string>\n    <string name=\"unknown_error\">Nezināma kļūda</string>\n    <string name=\"fourth_to_last\">Ceturtā pirmspēdējā izlasītā nodaļa</string>\n    <string name=\"label_downloaded_only\">Tikai lejupielādētie</string>\n    <string name=\"downloaded_chapters\">Lejupielādētās nodaļas</string>\n    <string name=\"notification_incognito_text\">Izslēgt inkognito režīmu</string>\n    <string name=\"updating_category\">Atjaunina kategoriju</string>\n    <string name=\"fifth_to_last\">Piektā pirmspēdējā izlasītā nodaļa</string>\n    <string name=\"action_global_search_hint\">Globālā meklēšana…</string>\n    <string name=\"information_cloudflare_bypass_failure\">Neizdevās apiet Cloudflare</string>\n    <string name=\"chapter_error\">Kļūda</string>\n    <string name=\"chapter_paused\">Pārtraukts</string>\n    <string name=\"library_errors_help\">Lai uzzinātu, kā novērst bibliotēkas atjaunināšanas kļūdas, skatiet %1$s</string>\n    <string name=\"transition_current\">Pašreizējais:</string>\n    <string name=\"page_list_empty_error\">Lapas nav atrastas</string>\n    <string name=\"status\">Statuss</string>\n    <string name=\"unknown_author\">Nezināms autors</string>\n    <string name=\"cancelled\">Atcelta</string>\n    <string name=\"in_library\">Bibliotēkā</string>\n    <string name=\"remove_from_library\">Noņemt no bibliotēkas</string>\n    <string name=\"download_unread\">Neizlasīto</string>\n    <string name=\"also_set_chapter_settings_for_library\">Attiecas arī uz visiem ierakstiem manā bibliotēkā</string>\n    <string name=\"set_chapter_settings_as_default\">Uzstādīt kā noklusējuma</string>\n    <string name=\"reading\">Šobrīd lasa</string>\n    <string name=\"error_category_exists\">Kategorija ar šādu nosaukumu jau pastāv!</string>\n    <string name=\"snack_categories_deleted\">Kategorija izdzēsta</string>\n    <string name=\"transition_pages_error\">Neizdevās ielādēt lapas: %1$s</string>\n    <string name=\"recent_manga_time\">Nodaļa %1$s-%2$s</string>\n    <string name=\"migration_dialog_what_to_include\">Atlasīt iekļaujamos datus</string>\n    <string name=\"chapter_downloading_progress\">Lejupielādē (%1$d/%2$d)</string>\n    <string name=\"track_status\">Statuss</string>\n    <string name=\"pref_clear_history\">Notīrīt vēsturi</string>\n    <string name=\"share_page_info\">%1$s: %2$s, lapa %3$d</string>\n    <string name=\"manga_added_library\">Pievienots bibliotēkai</string>\n    <string name=\"snack_add_to_library\">Pievienot bibliotēkai?</string>\n    <string name=\"show_title\">Avota nosaukums</string>\n    <string name=\"manga_cover\">Vāks</string>\n    <string name=\"on_hold\">Aizturēts</string>\n    <string name=\"dialog_with_checkbox_reset\">Atiestatīt visas šī ieraksta nodaļas</string>\n    <string name=\"unknown_status\">Nezināms statuss</string>\n    <string name=\"publishing_finished\">Publicēšana pabeigta</string>\n    <string name=\"manga_tracking_tab\">Izsekošana</string>\n    <string name=\"notification_cover_update_failed\">Neizdevās atjaunināt vāku</string>\n    <string name=\"skipped_reason_completed\">Izlaists, jo sērija ir pabeigta</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nevar atrast lapas %d faila ceļu</string>\n    <string name=\"channel_complete\">Pabeigts</string>\n    <string name=\"channel_errors\">Kļūdas</string>\n    <string name=\"myanimelist_relogin\">Lūdzu, piesakieties MAL vēlreiz</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Tiks noņemts šīs nodaļas lasīšanas datums. Vai esi pārliecināts?</string>\n    <string name=\"viewer\">Lasīšanas režīms</string>\n    <string name=\"no_next_chapter\">Nākošā nodaļa nav atrasta</string>\n    <string name=\"empty_screen\">Nu, šis ir neveikli</string>\n    <string name=\"update_check_open\">Atvērt vietnē GitHub</string>\n    <string name=\"update_check_eol\">Šī Android versija vairs netiek atbalstīta</string>\n    <string name=\"update_check_notification_download_in_progress\">Lejupielādē…</string>\n    <string name=\"channel_progress\">Progress</string>\n    <string name=\"decode_image_error\">Attēlu nevarēja ielādēt</string>\n    <string name=\"confirm_set_image_as_cover\">Vai izmantot šo attēlu kā vāku?</string>\n    <string name=\"pref_category_for_this_series\">Priekš šīs sērijas</string>\n    <string name=\"dropped\">Pamests</string>\n    <string name=\"download_queue_size_warning\">Brīdinājums: liela apjoma lejupielāde var izraisīt to, ka avoti kļūst lēnāki un/vai bloķē Mihon. Pieskarieties, lai uzzinātu vairāk.</string>\n    <string name=\"skipped_reason_not_started\">Izlaists, jo neviena nodaļa nav izlasīta</string>\n    <string name=\"file_select_cover\">Atlasiet vāka attēlu</string>\n    <string name=\"file_select_backup\">Atlasiet dublējuma failu</string>\n    <string name=\"spen_previous_page\">Iepriekšējā lapa</string>\n    <string name=\"copy\">Kopēt</string>\n    <string name=\"score\">Vērtējums</string>\n    <string name=\"clear_history_completed\">Vēsture izdzēsta</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"local_invalid_format\">Nederīgs nodaļas formāts</string>\n    <string name=\"local_filter_order_by\">Kārtot pēc</string>\n    <string name=\"add_to_library\">Pievienot bibliotēkai</string>\n    <string name=\"manga_removed_library\">Noņemts no bibliotēkas</string>\n    <string name=\"manga_info_expand\">Vairāk</string>\n    <string name=\"manga_info_collapse\">Mazāk</string>\n    <string name=\"clipboard_copy_error\">Neizdevās kopēt uz starpliktuvi</string>\n    <string name=\"description_placeholder\">Nav apraksta</string>\n    <string name=\"show_chapter_number\">Nodaļas numurs</string>\n    <string name=\"sort_by_source\">Pēc avota</string>\n    <string name=\"sort_by_number\">Pēc nodaļas numura</string>\n    <string name=\"manga_download\">Lejuplādēt</string>\n    <string name=\"error_sharing_cover\">Kļūda koplietojot vāku</string>\n    <string name=\"no_chapters_error\">Nav atrastu nodaļu</string>\n    <string name=\"add_tracking\">Pievienot izsekošanu</string>\n    <string name=\"paused\">Pauzēts</string>\n    <string name=\"plan_to_read\">Plānoju lasīt</string>\n    <string name=\"wish_list\">Vēlmju saraksts</string>\n    <string name=\"picture_saved\">Attēls saglabāts</string>\n    <string name=\"error_saving_picture\">Kļūda, saglabājot attēlu</string>\n    <string name=\"cover_updated\">Vāks atjaunināts</string>\n    <string name=\"not_installed\">Nav instalēts</string>\n    <string name=\"notification_size_warning\">Daudz atjauninājumi kaitē avotiem un var izraisīt lēnākus atjauninājumus un arī lielāku akumulatora lietojumu. Pieskarieties, lai uzzinātu vairāk.</string>\n    <string name=\"source_not_installed\">Avots nav instalēts: %1$s</string>\n    <string name=\"complete_list\">Pabeigto saraksts</string>\n    <string name=\"on_hold_list\">Aizturēto saraksts</string>\n    <string name=\"copied_to_clipboard\">Kopēts uz starpliktuvi:\n\\n%1$s</string>\n    <string name=\"error_saving_cover\">Kļūda saglabājot vāku</string>\n    <string name=\"reading_list\">Lasīšanas saraksts</string>\n    <string name=\"notification_chapters_multiple\">Nodaļas %1$s</string>\n    <string name=\"notification_new_chapters\">Atrastas jaunas nodaļas</string>\n    <string name=\"notification_chapters_single_and_more\">Nodaļa %1$s un vēl %2$d</string>\n    <string name=\"file_picker_error\">Nav atrasta failu atlases programma</string>\n    <string name=\"notification_first_add_to_library\">Lūdzu, pievienojiet ierakstu savai bibliotēkai, pirms to darāt</string>\n    <string name=\"notification_chapters_single\">Nodaļa %1$s</string>\n    <string name=\"download_notifier_split_page_not_found\">Sadalīšanas laikā netika atrasta lapa %d</string>\n    <string name=\"skipped_reason_not_caught_up\">Izlaists, jo ir nelasītas nodaļas</string>\n    <string name=\"notification_update_error\">%1$d atjauninājums(-i) neizdevās</string>\n    <string name=\"learn_more\">Pieskarieties, lai uzzinātu vairāk</string>\n    <string name=\"channel_app_updates\">Lietotnes atjauninājumi</string>\n    <string name=\"update_check_notification_update_available\">Ir pieejama jauna versija!</string>\n    <string name=\"chapter_settings_updated\">Atjaunināti noklusējuma nodaļu iestatījumi</string>\n    <string name=\"pref_landscape_zoom\">Automātiski tuvināt ainavas attēlus</string>\n    <string name=\"spen_next_page\">Nākošā lapa</string>\n    <string name=\"pref_navigate_pan\">Izplest platus attēlus</string>\n    <string name=\"cant_open_last_read_chapter\">Nevar atvērt pēdējo lasīto nodaļu</string>\n    <string name=\"repeating\">Pārlasīšana</string>\n    <string name=\"delete_downloads_for_manga\">Vai dzēst lejupielādētās nodaļas?</string>\n    <string name=\"date\">Datums</string>\n    <string name=\"on_hiatus\">Pārtraukumā</string>\n    <string name=\"display_mode_chapter\">Nodaļa %1$s</string>\n    <string name=\"cover_saved\">Vāks saglabāts</string>\n    <string name=\"clear_history_confirmation\">Vai esat pārliecināts? Visa vēsture tiks pazaudēta.</string>\n    <string name=\"source_empty_screen\">Nav atrasts avots</string>\n    <string name=\"source_filter_empty_screen\">Neviens instalēts avots nav atrasts</string>\n    <string name=\"update_check_notification_download_complete\">Pieskarieties, lai instalētu atjauninājumu</string>\n    <string name=\"custom_cover\">Pielāgots vāks</string>\n    <string name=\"unfinished_list\">Nepabeigto saraksts</string>\n    <string name=\"track_started_reading_date\">Sākuma datums</string>\n    <string name=\"track_finished_reading_date\">Pabeigšanas datums</string>\n    <string name=\"track_type\">Tips</string>\n    <string name=\"source_unsupported\">Avots netiek atbalstīts</string>\n    <string name=\"error_no_match\">Neizdevās atrast</string>\n    <string name=\"custom_filter\">Pielāgots filtrs</string>\n    <string name=\"set_as_cover\">Iestatīt kā vāku</string>\n    <string name=\"chapter_progress\">Lapa: %1$d</string>\n    <string name=\"transition_finished\">Pabeigts:</string>\n    <string name=\"transition_next\">Nākošais:</string>\n    <string name=\"transition_previous\">Iepriekšējais:</string>\n    <string name=\"transition_no_next\">Nav nākošās nodaļas</string>\n    <string name=\"transition_no_previous\">Nav iepriekšējās nodaļas</string>\n    <string name=\"transition_pages_loading\">Ielādē lapas…</string>\n    <string name=\"loader_not_implemented_error\">Avots nav atrasts</string>\n    <string name=\"migration_help_guide\">Avota migrācijas rokasgrāmata</string>\n    <string name=\"migrate\">Migrēt</string>\n    <string name=\"confirm_set_chapter_settings\">Vai esat pārliecināts, ka šos iestatījumus vēlaties saglabāt kā noklusējuma?</string>\n    <string name=\"filter_mode_lighten\">Dodge / Gaišāks</string>\n    <string name=\"filter_mode_darken\">Burn / Tumšāks</string>\n    <string name=\"sort_by_upload_date\">Pēc augšupielādes datuma</string>\n    <string name=\"update_check_notification_download_error\">Lejupielādēt kļūdu</string>\n    <string name=\"confirm_delete_chapters\">Vai esat pārliecināts, ka vēlaties dzēst atlasītās nodaļas?</string>\n    <string name=\"chapter_settings\">Nodaļu iestatījumi</string>\n    <string name=\"migration_selection_prompt\">Izvēlieties avotu, no kura migrēt</string>\n    <string name=\"download_queue_error\">Nevarēja lejupielādēt nodaļas. Varat mēģināt vēlreiz lejupielādes sadaļā</string>\n    <string name=\"download_insufficient_space\">Nevarēja lejupielādēt nodaļas, jo trūkst krātuves vietas</string>\n    <string name=\"getting_started_guide\">Darba sākšanas rokasgrāmata</string>\n    <string name=\"information_empty_category_dialog\">Jums vēl nav nevienas kategorijas.</string>\n    <string name=\"error_user_agent_string_invalid\">Nederīga lietotāja agent virkne</string>\n    <string name=\"pref_skip_dupe_chapters\">Izlaist vienādas nodaļas</string>\n    <string name=\"track_remove_finish_date_conf_text\">Tādējādi no %s tiks noņemts iepriekš atlasītais beigu datums</string>\n    <string name=\"delete_category\">Dzēst kategoriju</string>\n    <string name=\"pref_reader_summary\">Lasīšanas režīmi, displejs, navigācija</string>\n    <string name=\"pref_advanced_summary\">Avārijas žurnāli, akumulatora optimizācija</string>\n    <string name=\"pref_backup_summary\">Manuālā un automātiskā dublēšana</string>\n    <string name=\"theme_tidalwave\">Paisuma vilnis</string>\n    <string name=\"multi_lang\">Vairāku</string>\n    <string name=\"download_ahead\">Lejupielādēt uz priekšu</string>\n    <string name=\"download_ahead_info\">Darbojas tikai ja pašreizējā nodaļa + nākošā nodaļa ir jau lejupielādēta.</string>\n    <string name=\"confirm_add_duplicate_manga\">Jūsu bibliotēkā ir ieraksts ar tādu pašu nosaukumu.\n\\n\n\\nVai joprojām vēlaties turpināt?</string>\n    <string name=\"pref_invalidate_download_cache\">Nederīgs lejupielāžu indekss</string>\n    <string name=\"label_overview_section\">Pārskats</string>\n    <string name=\"label_stats\">Statistika</string>\n    <string name=\"label_started\">Sākts</string>\n    <string name=\"label_downloaded\">Lejupielādēts</string>\n    <string name=\"label_local\">Lokālais</string>\n    <string name=\"invalid_location\">Nederīga atrašanās vieta: %s</string>\n    <string name=\"unknown_title\">Nezināms nosaukums</string>\n    <string name=\"label_tracker_section\">Izsekotāji</string>\n    <string name=\"label_read_chapters\">Lasīts</string>\n    <string name=\"label_tracked_titles\">Izsekotie ieraksti</string>\n    <string name=\"label_mean_score\">Vidējais vērtējums</string>\n    <string name=\"label_used\">Izmantots</string>\n    <string name=\"not_applicable\">Nav piemērojams</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"popular\">Populārs</string>\n    <string name=\"are_you_sure\">Vai tu esi pārliecināts?</string>\n    <string name=\"updates_last_update_info_just_now\">Tikko</string>\n    <string name=\"action_update_category\">Atjaunināt kategoriju</string>\n    <string name=\"action_open_random_manga\">Atvērt nejaušu ierakstu</string>\n    <string name=\"action_remove_everything\">Noņemt visu</string>\n    <string name=\"action_display_show_continue_reading_button\">Turpināt lasīt poga</string>\n    <string name=\"auto_download_while_reading\">Automātiska lejupielāde lasīšanas laikā</string>\n    <string name=\"enhanced_services_not_installed\">Pieejams, bet avots nav instalēts: %s</string>\n    <string name=\"missing_storage_permission\">Krātuves atļaujas nav piešķirtas</string>\n    <string name=\"copied_to_clipboard_plain\">Kopēts starpliktuvē</string>\n    <string name=\"updates_last_update_info\">Bibliotēka pēdējo reizi atjaunināta: %s</string>\n    <string name=\"skipped_reason_not_always_update\">Izlaists, jo sērijai nav nepieciešami atjauninājumi</string>\n    <string name=\"track_remove_start_date_conf_text\">Tādējādi no %s tiks noņemts iepriekš atlasītais sākuma datums</string>\n    <string name=\"overlay_header\">Pārklājums</string>\n    <string name=\"pref_security_summary\">Aplikācijas slēdzis, ekrāna aizsargāšana</string>\n    <string name=\"action_copy_to_clipboard\">Kopēt starpliktuvē</string>\n    <string name=\"pref_downloads_summary\">Automātiskā lejupielāde, lejupielādes rinda</string>\n    <string name=\"pref_tracking_summary\">Vienvirziena progresa sinhronizācija, uzlabota sinhronizācija</string>\n    <string name=\"pref_browse_summary\">Avoti, paplašinājumi, globālā meklēšana</string>\n    <string name=\"pref_appearance_summary\">Tēma, datuma un laika formāti</string>\n    <string name=\"pref_library_summary\">Kategorijas, globāli atjauninājumi, nodaļu vilkšana</string>\n    <string name=\"pref_library_update_show_tab_badge\">Rādīt nelasīto skaitu uz atjauninājumu ikonas</string>\n    <string name=\"appwidget_unavailable_locked\">Logrīks nav pieejams, ja ir iespējota lietotņu bloķēšana</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"internal_error\">InternalError: Par plašāku informāciju skatiet avārijas žurnālu</string>\n    <string name=\"delete_category_confirmation\">Vai vēlaties dzēst kategoriju \\\"%s\\\"?</string>\n    <string name=\"track_error\">%1$s kļūda: %2$s</string>\n    <string name=\"update_already_running\">Atjauninājums jau darbojas</string>\n    <string name=\"crash_screen_description\">%s radās neparedzēta kļūda. Mēs iesakām dalīties ar avārijas žurnālu mūsu atbalsta kanālā Discord lietotnē.</string>\n    <string name=\"pref_page_rotate\">Pagrieziet platas lapas, lai tās ietilptu</string>\n    <string name=\"pref_page_rotate_invert\">Apvērst orientācija pagrieztām platām lapām</string>\n    <string name=\"split_tall_images\">Sadalīt augstus attēlus</string>\n    <string name=\"pref_hide_in_library_items\">Slēpt ierakstus, kas jau ir bibliotēkā</string>\n    <string name=\"track_remove_date_conf_title\">Vai noņemt datumu?</string>\n    <string name=\"information_no_manga_category\">Kategorija ir tukša</string>\n    <string name=\"appwidget_updates_description\">Skatiet savus nesen atjauninātos bibliotēkas ierakstus</string>\n    <string name=\"remove_manga\">Jūs gatavojaties noņemt \\\"%s\\\" no savas bibliotēkas</string>\n    <string name=\"action_not_now\">Ne tagad</string>\n    <string name=\"action_search_hint\">Meklē…</string>\n    <string name=\"fdroid_warning\">F-Droid versijas netiek oficiāli atbalstītas.\n\\nPieskarieties, lai uzzinātu vairāk.</string>\n    <string name=\"download_notifier_cache_renewal\">Pārbauda lejupielādes</string>\n    <string name=\"error_user_agent_string_blank\">Lietotāja agent virknes lauks nedrīkst būt tukšs</string>\n    <string name=\"information_no_entries_found\">Šajā kategorijā nav atrasts neviens ieraksts</string>\n    <string name=\"pref_user_agent_string\">Noklusējuma lietotāja agent virkne</string>\n    <string name=\"pref_reset_user_agent_string\">Atiestatīt noklusējuma lietotāja agent virkni</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Piespiediet lietotni atkārtoti pārbaudīt lejupielādētās nodaļas</string>\n    <string name=\"crash_screen_title\">Ak nē!</string>\n    <string name=\"crash_screen_restart_application\">Restartējiet lietotni</string>\n    <string name=\"label_completed_titles\">Pabeigtie ieraksti</string>\n    <string name=\"label_read_duration\">Lasīšanas ilgums</string>\n    <string name=\"label_titles_section\">Ieraksti</string>\n    <string name=\"label_titles_in_global_update\">Globālajā atjauninājumā</string>\n    <string name=\"label_total_chapters\">Kopā</string>\n    <string name=\"information_required_plain\">*obligāti</string>\n    <string name=\"create_backup_file_error\">Nevarēja izveidot dublējuma failu</string>\n    <string name=\"download_cache_invalidated\">Lejupielādes indeks ir nederīgs</string>\n    <string name=\"skipped_reason_not_in_release_period\">Izlaists, jo šodien nebija gaidīta jauna nodaļa</string>\n    <string name=\"pref_chapter_swipe_end\">Vilkt uz labās puses darbību</string>\n    <string name=\"pref_debug_info\">Atkļūdošanas informācija</string>\n    <string name=\"information_cloudflare_help\">Pieskarieties šeit, lai iegūtu palīdzību ar Cloudflare</string>\n    <string name=\"has_results\">Ir rezultāti</string>\n    <string name=\"track_delete_remote_text\">Noņemt arī no %s</string>\n    <string name=\"pref_chapter_swipe_start\">Vilkt uz kreisās puses darbību</string>\n    <string name=\"manga_display_interval_title\">Novērtēt katru</string>\n    <string name=\"action_set_interval\">Iestatīt intervālu</string>\n    <string name=\"action_filter_interval_custom\">Pielāgots datu iegūšanas intervāls</string>\n    <string name=\"action_sort_next_updated\">Nākamais gaidāmais atjauninājums</string>\n    <string name=\"track_activity_name\">Pieteikšanās izsekošana</string>\n    <string name=\"syncing_library\">Sinhronizē bibliotēku</string>\n    <string name=\"library_sync_complete\">Bibliotēkas sinhronizācija ir pabeigta</string>\n    <string name=\"intervals_header\">Intervāli</string>\n    <string name=\"track_delete_text\">Šis noņems locālo izsekošanu.</string>\n    <string name=\"delete_downloaded\">Izdzēst lejupielādētos</string>\n    <string name=\"track_delete_title\">Vai noņemt %s izsekošanu?</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"pref_update_only_in_release_period\">Ārpus paredzamā izlaišanas perioda</string>\n    <string name=\"pref_double_tap_zoom\">Dubult-pieskarieties, lai tuvinātu</string>\n    <string name=\"unlock_app_title\">Atbloķēt %s</string>\n    <string name=\"manga_display_modified_interval_title\">Atjaunināt katru</string>\n    <string name=\"exception_http\">HTTP %d, pārbaudiet vietni iekš WebView</string>\n    <string name=\"exception_offline\">Nav interneta savienojuma</string>\n    <string name=\"exception_unknown_host\">Nevarēja sasniegt %s</string>\n    <string name=\"action_sort_tracker_score\">Izsekošanas rezultāts</string>\n    <string name=\"label_data_storage\">Dati un uzglabāšana</string>\n    <string name=\"pref_storage_location\">Krātuves atrašanās vieta</string>\n    <string name=\"action_create\">Izveidot</string>\n    <string name=\"relative_time_span_never\">Nekad</string>\n    <string name=\"pref_flash_page_summ\">Samazina spoku rašanos uz e-ink displejiem</string>\n    <string name=\"pref_storage_location_info\">Izmanto automātiskajām dublējumkopijām, nodaļu lejupielādei un vietējam avotam.</string>\n    <string name=\"action_apply\">Pieteikties</string>\n    <string name=\"action_revert_to_default\">Atgriezt noklusējuma iestatījumus</string>\n    <string name=\"action_menu_overflow_description\">Vairāk iespēju</string>\n    <string name=\"last_auto_backup_info\">Pēdējā automātiskā dublēšana: %s</string>\n    <string name=\"selected\">Atlasīts</string>\n    <string name=\"no_scanlators_found\">Nav atrasts neviens scanlators</string>\n    <string name=\"not_selected\">Nav atlasīts</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Pārvietot sēriju uz apakšu</string>\n    <string name=\"scanlator\">Skanlators</string>\n    <string name=\"pref_flash_page\">Zibsnīt baltu, kad maina lapu</string>\n    <string name=\"pref_storage_usage\">Krātuves izmantošana</string>\n    <string name=\"notification_updating_progress\">Bibliotēkas atjaunināšana... (%s)</string>\n    <string name=\"action_bar_up_description\">Virzīties uz augšu</string>\n    <string name=\"file_null_uri_error\">Nav atlasīts neviens fails</string>\n    <string name=\"source_settings\">Avota iestatījumi</string>\n    <string name=\"app_settings\">Lietotnes iestatījumi</string>\n    <string name=\"pref_relative_format\">Relatīviās laika stampas</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\", nevis \\\"%2$s\\\"</string>\n    <string name=\"exclude_scanlators\">Izslēgt skanlatorus</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ml/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">ഇന്നലെ</item>\n        <item quantity=\"other\">%1$d ദിവസം മുമ്പ്</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">നാളെ</item>\n        <item quantity=\"other\">%1$d ദിവസത്തിനുള്ളിൽ</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%2$s പിശകോടെ %1$s-നുള്ളിൽ ചെയ്തു</item>\n        <item quantity=\"other\">%2$s പിശകുകളോടെ %1$s-നുള്ളിൽ ചെയ്തു</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d അധ്യായം ഒഴിവാക്കുന്നു, ഒന്നുകിൽ ഉറവിടം അത് കാണുന്നില്ല അല്ലെങ്കിൽ അത് ഫിൽട്ടർ ചെയ്തിരിക്കുന്നു</item>\n        <item quantity=\"other\">%d അധ്യായങ്ങൾ ഒഴിവാക്കുന്നു, ഒന്നുകിൽ ഉറവിടം കാണുന്നില്ല അല്ലെങ്കിൽ അവ ഫിൽട്ടർ ചെയ്തിരിക്കുന്നു</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">വിപുലീകരണ അപ്ഡേറ്റ് ലഭ്യമാണ്</item>\n        <item quantity=\"other\">%d വിപുലീകരണ അപ്‌ഡേറ്റുകൾ ലഭ്യമാണ്</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">അടുത്ത അധ്യായം</item>\n        <item quantity=\"other\">അടുത്ത %d അധ്യായങ്ങൾ</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s മിനിറ്റിന് ശേഷം</item>\n        <item quantity=\"other\">%1$s മിനിറ്റിന് ശേഷം</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d വിഭാഗം</item>\n        <item quantity=\"other\">%d വിഭാഗങ്ങൾ</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">അടുത്ത വായിക്കാത്ത അധ്യായം</item>\n        <item quantity=\"other\">അടുത്ത %d വായിക്കാത്ത അധ്യായങ്ങൾ</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s ശേഷിക്കുന്നു</item>\n        <item quantity=\"other\">%1$s ശേഷിക്കുന്നു</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 ദിവസം</item>\n        <item quantity=\"other\">%d ദിവസം</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s അധ്യായം കാണുന്നില്ല</item>\n        <item quantity=\"other\">%1$s അധ്യായങ്ങൾ കാണുന്നില്ല</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s അധ്യായം</item>\n        <item quantity=\"other\">%1$s അധ്യായങ്ങൾ</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d ട്രാക്കർ</item>\n        <item quantity=\"other\">%d ട്രാക്കറുകൾ</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d പുതിയ അധ്യായം</item>\n        <item quantity=\"other\">%1$d പുതിയ അധ്യായങ്ങൾ</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">അധ്യായങ്ങൾ %1$s-ഉം പിന്നെ 1-ഉം</item>\n        <item quantity=\"other\">%1$s അധ്യായങ്ങളും പിന്നെ %2$d-ഉം</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d റിപ്പോ</item>\n        <item quantity=\"other\">%d റിപ്പോകൾ</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 പേജ്</item>\n        <item quantity=\"other\">%1$s പേജ്</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d എൻട്രിക്ക്</item>\n        <item quantity=\"other\">%d എൻട്രികൾക്കായി</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ml/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_data_storage\">ഡാറ്റാ ആന്റ് സ്റ്റോറേജ്</string>\n    <string name=\"history\">ചരിത്രം</string>\n    <string name=\"action_search\">തിരയുക</string>\n    <string name=\"action_global_search\">ആഗോള തിരയൽ</string>\n    <string name=\"action_bookmark\">ബുക്ക്മാർക്ക് അധ്യായം</string>\n    <string name=\"action_enable_all\">എല്ലാം പ്രവർത്തനക്ഷമമാക്കുക</string>\n    <string name=\"action_mark_as_unread\">വായിച്ചിട്ടില്ലെന്ന് അടയാളപ്പെടുത്തുക</string>\n    <string name=\"action_disable_all\">എല്ലാം പ്രവർത്തനരഹിതമാക്കുക</string>\n    <string name=\"action_edit\">തിരുത്തുക</string>\n    <string name=\"action_add\">ചേർക്കുക</string>\n    <string name=\"action_update_category\">വിഭാഗം അപ്ഡേറ്റ് ചെയ്യുക</string>\n    <string name=\"action_open_random_manga\">ക്രമരഹിതമായ എൻട്രി തുറക്കുക</string>\n    <string name=\"action_add_category\">വിഭാഗം ചേർക്കുക</string>\n    <string name=\"action_edit_cover\">കവർ എഡിറ്റ് ചെയ്യുക</string>\n    <string name=\"action_view_chapters\">അധ്യായങ്ങൾ കാണുക</string>\n    <string name=\"action_pause\">വിരാമം</string>\n    <string name=\"action_retry\">വീണ്ടും ശ്രമിക്കുക</string>\n    <string name=\"action_previous_chapter\">മുൻ അധ്യായം</string>\n    <string name=\"action_next_chapter\">അടുത്ത അധ്യായം</string>\n    <string name=\"action_sort_latest_chapter\">ഏറ്റവും പുതിയ അധ്യായം</string>\n    <string name=\"off\">ഓഫ്</string>\n    <string name=\"selected\">തിരഞ്ഞെടുക്കപ്പെട്ട</string>\n    <string name=\"action_bar_up_description\">മുകളിലേക്ക് നയിക്കുക</string>\n    <string name=\"name\">പേര്</string>\n    <string name=\"categories\">വിഭാഗങ്ങൾ</string>\n    <string name=\"chapters\">അദ്ധ്യായങ്ങൾ</string>\n    <string name=\"track\">ട്രാക്കിംഗ്</string>\n    <string name=\"delete_downloaded\">ഡൗൺലോഡ് ചെയ്‌തത് ഇല്ലാതാക്കുക</string>\n    <string name=\"label_more\">ഇനിയും</string>\n    <string name=\"label_download_queue\">ഡൗൺലോഡ് ക്യൂ</string>\n    <string name=\"label_library\">ലൈബ്രറി</string>\n    <string name=\"label_recent_updates\">അപ്ഡേറ്റുകൾ</string>\n    <string name=\"label_upcoming\">അടുത്തതായി</string>\n    <string name=\"label_recent_manga\">ചരിത്രം</string>\n    <string name=\"label_sources\">ഉൽഭവം</string>\n    <string name=\"label_backup\">ബാക്കപ്പും റിസ്റ്റോറും</string>\n    <string name=\"manga\">ലൈബ്രറി എൻട്രികൾ</string>\n    <string name=\"label_stats\">സ്ഥിതിവിവരക്കണക്കുകൾ</string>\n    <string name=\"label_migration\">മൈഗ്രേറ്റ് ചെയ്യുക</string>\n    <string name=\"label_extensions\">വിപുലീകരണങ്ങൾ</string>\n    <string name=\"label_extension_info\">വിപുലീകരണ വിവരം</string>\n    <string name=\"label_help\">സഹായം</string>\n    <string name=\"label_default\">സ്ഥിരസ്ഥിതി</string>\n    <string name=\"label_warning\">മുന്നറിയിപ്പ്</string>\n    <string name=\"label_started\">ആരംഭിച്ചു</string>\n    <string name=\"label_local\">പ്രാദേശികമായ</string>\n    <string name=\"label_downloaded\">ഡൗൺലോഡ് ചെയ്തു</string>\n    <string name=\"unlock_app_title\">%s അൺലോക്ക് ചെയ്യുക</string>\n    <string name=\"confirm_lock_change\">മാറ്റം സ്ഥിരീകരിക്കാൻ പ്രാമാണീകരിക്കുക</string>\n    <string name=\"action_settings\">ക്രമീകരണങ്ങൾ</string>\n    <string name=\"action_menu\">പട്ടിക</string>\n    <string name=\"action_filter\">ഫിൽട്ടർ ചെയ്യുക</string>\n    <string name=\"action_set_interval\">ഇടവേള സജ്ജമാക്കുക</string>\n    <string name=\"action_filter_bookmarked\">ബുക്ക്‌മാർക്ക് ചെയ്തു</string>\n    <string name=\"action_filter_tracked\">ട്രാക്ക് ചെയ്തു</string>\n    <string name=\"action_filter_unread\">വായിക്കാത്തത്</string>\n    <string name=\"action_filter_interval_custom\">ഇഷ്‌ടാനുസൃതമാക്കിയ അപ്‌ഡേറ്റ് ആവൃത്തി</string>\n    <string name=\"action_filter_empty\">ഫിൽട്ടർ നീക്കം ചെയ്യുക</string>\n    <string name=\"action_sort_alpha\">അക്ഷരമാലാക്രമത്തിൽ</string>\n    <string name=\"action_sort_count\">ആകെ എൻട്രികൾ</string>\n    <string name=\"action_sort_total\">ആകെ അധ്യായങ്ങൾ</string>\n    <string name=\"action_sort_last_read\">അവസാനം വായിച്ചത്</string>\n    <string name=\"action_sort_last_manga_update\">അവസാന അപ്ഡേറ്റ് പരിശോധന</string>\n    <string name=\"action_sort_unread_count\">വായിക്കാത്ത എണ്ണം</string>\n    <string name=\"action_sort_next_updated\">അടുത്തതായി പ്രതീക്ഷിക്കുന്ന അപ്ഡേറ്റ്</string>\n    <string name=\"action_sort_chapter_fetch_date\">അധ്യായം ലഭിച്ച തീയതി</string>\n    <string name=\"action_sort_date_added\">തീയതി ചേർത്തു</string>\n    <string name=\"action_sort_tracker_score\">ട്രാക്കർ സ്കോർ</string>\n    <string name=\"action_search_hint\">തിരയുക…</string>\n    <string name=\"action_search_settings\">തിരയൽ ക്രമീകരണങ്ങൾ</string>\n    <string name=\"action_select_all\">എല്ലാം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"action_select_inverse\">വിപരീതം തിരഞ്ഞെടുക്കുക</string>\n    <string name=\"action_mark_as_read\">വായിച്ചതായി അടയാളപ്പെടുത്തുക</string>\n    <string name=\"action_mark_previous_as_read\">മുമ്പത്തേത് വായിച്ചതായി അടയാളപ്പെടുത്തുക</string>\n    <string name=\"action_download\">ഡൗൺലോഡ്</string>\n    <string name=\"action_remove_bookmark\">അൺബുക്ക്മാർക്ക് അധ്യായം</string>\n    <string name=\"action_delete\">ഇല്ലാതാക്കുക</string>\n    <string name=\"action_update_library\">ലൈബ്രറി അപ്ഡേറ്റ് ചെയ്യുക</string>\n    <string name=\"action_edit_categories\">വിഭാഗങ്ങൾ എഡിറ്റ് ചെയ്യുക</string>\n    <string name=\"action_rename_category\">വിഭാഗത്തിൻ്റെ പേരുമാറ്റുക</string>\n    <string name=\"action_move_category\">വിഭാഗങ്ങൾ സജ്ജമാക്കുക</string>\n    <string name=\"delete_category_confirmation\">\\\"%s\\\" എന്ന വിഭാഗം ഇല്ലാതാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?</string>\n    <string name=\"delete_category\">വിഭാഗം ഇല്ലാതാക്കുക</string>\n    <string name=\"on\">ഓൺ</string>\n    <string name=\"action_menu_overflow_description\">കൂടുതൽ ഓപ്ഷനുകൾ</string>\n    <string name=\"not_selected\">തിരഞ്ഞെടുത്തില്ല</string>\n    <string name=\"scanlator\">സ്കാൻലേറ്റർ</string>\n    <string name=\"label_settings\">ക്രമീകരണങ്ങൾ</string>\n    <string name=\"action_remove\">നീക്കം ചെയ്യുക</string>\n    <string name=\"action_remove_everything\">എല്ലാം നീക്കം ചെയ്യുക</string>\n    <string name=\"action_start\">ആരംഭിക്കുക</string>\n    <string name=\"action_resume\">പുനരാരംഭിക്കുക</string>\n    <string name=\"action_open_in_browser\">ബ്രൗസറിൽ തുറക്കുക</string>\n    <string name=\"action_copy_to_clipboard\">ക്ലിപ്പ്ബോർഡിലേയ്ക്ക് പകർത്തുക</string>\n    <string name=\"action_open_in_web_view\">വെബ്‌വ്യൂവിൽ തുറക്കുക</string>\n    <string name=\"action_migrate\">മൈഗ്രേറ്റ് ചെയ്യുക</string>\n    <string name=\"action_display_mode\">ഡിസ്പ്ലേ മോഡ്</string>\n    <string name=\"action_oldest\">ഏറ്റവും പഴയത്</string>\n    <string name=\"action_cancel\">റദ്ദാക്കുക</string>\n    <string name=\"action_display_show_continue_reading_button\">വായന തുടരുക ബട്ടൺ</string>\n    <string name=\"action_display_language_badge\">ഭാഷ</string>\n    <string name=\"action_cancel_all\">എല്ലാം റദ്ദാക്കുക</string>\n    <string name=\"action_ok\">ശരി</string>\n    <string name=\"cancel_all_for_series\">ഈ സീരീസിനായി എല്ലാം റദ്ദാക്കുക</string>\n    <string name=\"action_move_to_top\">മുകളിലേക്ക് നീങ്ങുക</string>\n    <string name=\"action_order_by_chapter_number\">അധ്യായ നമ്പർ പ്രകാരം</string>\n    <string name=\"action_newest\">ഏറ്റവും പുതിയത്</string>\n    <string name=\"action_show_manga\">എൻട്രി കാണിക്കുക</string>\n    <string name=\"action_display_grid\">കോംപാക്റ്റ് ഗ്രിഡ്</string>\n    <string name=\"action_display_comfortable_grid\">സുഖപ്രദമായ ഗ്രിഡ്</string>\n    <string name=\"action_display_download_badge\">ഡൌൺലോഡ് ചെയ്ത അധ്യായങ്ങൾ</string>\n    <string name=\"action_display_local_badge\">ലോക്കൽ സോഴ്സ്</string>\n    <string name=\"action_disable\">ഡിസേബിൾ</string>\n    <string name=\"action_pin\">പിൻ ചെയ്യുക</string>\n    <string name=\"action_apply\">അപ്ലൈ</string>\n    <string name=\"action_sort\">സോർട്</string>\n    <string name=\"action_display_list\">ലിസ്റ്റ്</string>\n    <string name=\"action_display_cover_only_grid\">ചിത്രം മാത്രമുള്ള ഗ്രിഡ്</string>\n    <string name=\"action_reset\">പുനഃസജ്ജമാക്കുക</string>\n    <string name=\"action_move_to_top_all_for_series\">പരമ്പര മുകളിലേക്ക് നീക്കുക</string>\n    <string name=\"action_display_show_tabs\">വിഭാഗം ടാബുകൾ കാണിക്കുക</string>\n    <string name=\"action_unpin\">അൺപിൻ ചെയ്യുക</string>\n    <string name=\"action_order_by_upload_date\">അപ്‌ലോഡ് തീയതി പ്രകാരം</string>\n    <string name=\"action_asc\">ആരോഹണം</string>\n    <string name=\"action_desc\">അവരോഹണം</string>\n    <string name=\"action_install\">ഇൻസ്റ്റാൾ</string>\n    <string name=\"action_move_to_bottom\">താഴേക്ക് നീക്കുക</string>\n    <string name=\"action_share\">പങ്കിടുക</string>\n    <string name=\"action_display\">പ്രദർശിപ്പിക്കുക</string>\n    <string name=\"action_save\">സേവ്</string>\n    <string name=\"onboarding_heading\">സ്വാഗതം!</string>\n    <string name=\"onboarding_permission_install_apps\">ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യാനുള്ള അനുവാദം</string>\n    <string name=\"action_start_downloading_now\">ഡൌൺലോഡ് ചെയ്യാൻ തുടങ്ങുക</string>\n    <string name=\"onboarding_storage_action_select\">ഒരു ഫോൾഡർ സെലക്ട് ചെയുക</string>\n    <string name=\"onboarding_storage_help_action\">സ്റ്റോറേജ് ഗൈഡ്</string>\n    <string name=\"onboarding_permission_notifications\">നോട്ടിഫിക്കേഷൻ കാണിക്കാനുള്ള അനുവാദം</string>\n    <string name=\"loading\">ലോഡിങ്ങ്…</string>\n    <string name=\"onboarding_storage_selection_required\">ഒരു ഫോൾഡർ തിരഞ്ഞെടുക്കണം</string>\n    <string name=\"action_show_errors\">വിശദാംശങ്ങൾ കാണാൻ ടാപ്പുചെയ്യുക</string>\n    <string name=\"action_close\">അടയ്ക്കുക</string>\n    <string name=\"action_display_show_number_of_items\">ഇനങ്ങളുടെ എണ്ണം കാണിക്കുക</string>\n    <string name=\"action_revert_to_default\">സ്ഥിരസ്ഥിതിയിലേക്ക് മടങ്ങുക</string>\n    <string name=\"action_undo\">അൻഡൂ</string>\n    <string name=\"action_open_log\">ലോഗ് തുറക്കുക</string>\n    <string name=\"ext_install\">ഇൻസ്റ്റാൾ</string>\n    <string name=\"ext_trust\">വിശ്വസിക്കൂ</string>\n    <string name=\"update_48hour\">എല്ലാ 2 ദിവസവും</string>\n    <string name=\"update_weekly\">ആഴ്ചയിൽ ഒരിക്കൽ</string>\n    <string name=\"update_24hour\">എല്ലാ ദിവസവും</string>\n    <string name=\"obsolete_extension_message\">ഈ എക്സ്റ്റൻഷൻ ഇനി ലഭ്യമല്ല. ഇത് ശരിയായി പ്രവർത്തിച്ചേക്കില്ല, ആപ്പിൽ പ്രശ്നങ്ങൾ ഉണ്ടാക്കാം. ഇത് അൺഇൻസ്റ്റാൾ ചെയ്യാൻ റെകമെൻഡ് ചെയ്യുന്നു.</string>\n    <string name=\"charging\">ചാർജ് ചെയ്യുമ്പോൾ</string>\n    <string name=\"update_never\">അപ്ഡേറ്റ് ചെയ്യരുത്</string>\n    <string name=\"action_webview_forward\">മുന്നോട്ട്</string>\n    <string name=\"action_webview_back\">പുറകിലുള്ള</string>\n    <string name=\"action_restore\">റിസ്റ്റോർ</string>\n    <string name=\"update_12hour\">ഓരോ 12 മണിക്കൂറിലും</string>\n    <string name=\"update_6hour\">ഓരോ 6 മണിക്കൂറിലും</string>\n    <string name=\"landscape\">ലാൻഡ്സ്കേപ്പ്</string>\n    <string name=\"pref_library_columns\">ഗ്രിഡ് വലിപ്പം</string>\n    <string name=\"ext_update\">അപ്ഡേറ്റ്</string>\n    <string name=\"all\">എല്ലാം</string>\n    <string name=\"default_category_summary\">എപ്പോഴും ചോദിക്കുക</string>\n    <string name=\"ext_downloading\">ഡൗൺലോഡ് ചെയ്യുന്നു</string>\n    <string name=\"ext_uninstall\">അൺഇൻസ്റ്റാൾ</string>\n    <string name=\"ext_untrusted\">അവിശ്വസനീയം</string>\n    <string name=\"ext_installing\">ഇൻസ്റ്റാൾ ചെയ്യുന്നു</string>\n    <string name=\"pref_category_general\">സാധാരണ</string>\n    <string name=\"onboarding_permission_crashlytics_description\">ഡവലപ്പർമാർക്ക് അനാമീകരിച്ച ക്രാഷ് ലോഗുകൾ അയയ്‌ക്കുക</string>\n    <string name=\"pref_category_appearance\">വീക്ഷണം</string>\n    <string name=\"onboarding_permission_analytics_description\">അപ്ലിക്കേഷന്റെ ഫീച്ചറുകൾ മെച്ചപ്പെടുത്താൻ അനാമീകരിച്ച ഉപയോക്തൃ ഡാറ്റ അയയ്‌ക്കുക.</string>\n    <string name=\"onboarding_permission_analytics\">വിശകലനത്തിനുവഴി അനുവദിക്കുക</string>\n    <string name=\"onboarding_permission_crashlytics\">ക്രാഷ് ലോഗുകൾ അയയ്ക്കുക</string>\n    <string name=\"pref_category_library\">ലൈബ്രറി</string>\n    <string name=\"onboarding_guides_new_user\">%s-ൽ പുതിയവനാവോ? ആരംഭിക്കാൻ മാർഗരേഖ കാണാൻ ഞങ്ങൾ ശുപാർശ ചെയ്യുന്നു.</string>\n    <string name=\"onboarding_permission_action_grant\">അനുവദിക്കുക</string>\n    <string name=\"onboarding_guides_returning_user\">%s-നെ പുനഃസ്ഥാപിക്കുകയാണോ?</string>\n    <string name=\"action_copy_link\">ലിങ്ക് പകര്‍ത്തുക</string>\n    <string name=\"ext_install_service_notif\">വിപുലീകരണം ഇൻസ്റ്റാൾ ചെയ്യുന്നു…</string>\n    <string name=\"ext_permission_install_apps_warning\">വിപുലീകരണങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ അനുമതികൾ ആവശ്യമാണ്. അനുവദിക്കാൻ ഇവിടെ അടിക്കുക.</string>\n    <string name=\"action_sort_random\">യാദൃച്ഛികം</string>\n    <string name=\"ext_info_language\">ഭാഷ</string>\n    <string name=\"automatic_background\">സ്വയമേവ</string>\n    <string name=\"ext_installer_shizuku_stopped\">ഷിസുകു പ്രവർത്തനമല്ല</string>\n    <string name=\"nav_zone_left\">ഇടത്</string>\n    <string name=\"ext_info_age_rating\">വയസ്സ് റേറ്റിംഗ്</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_firebase\">വിശകലനവും തകരാറ് ലോഗുകളും</string>\n    <string name=\"lock_with_biometrics\">അൺലോക്ക് ആവശ്യമാണ്</string>\n    <string name=\"pref_date_format\">തീയതി രൂപം</string>\n    <string name=\"pref_manage_notifications\">അറിയിപ്പുകൾ കൈകാര്യം ചെയ്യുക</string>\n    <string name=\"pref_app_language\">ആപ്പ് ഭാഷ</string>\n    <string name=\"pref_category_security\">സുരക്ഷയും സ്വകാര്യതയും</string>\n    <string name=\"pref_show_nsfw_source\">ഉറവിടങ്ങളിലും വിപുലീകരണ പട്ടികയിലും കാണിക്കുക</string>\n    <string name=\"parental_controls_info\">ഇത് അനൗദ്യോഗികമായോ തെറ്റായി അടയാളപ്പെടുത്തിയോ ഉള്ള വിപുലീകരണങ്ങൾ ആപ്പിനുള്ളിൽ NSFW (18+) ഉള്ളടക്കം പ്രദർശിപ്പിക്കുന്നത് തടയില്ല.</string>\n    <string name=\"relative_time_today\">ഇന്ന്</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/mr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d श्रेणी</item>\n        <item quantity=\"other\">%d श्रेण्या</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">1 मिनीटानंतर</item>\n        <item quantity=\"other\">%1$s मिनीटांनंतर</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/mr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">नाव</string>\n    <string name=\"chapters\">अध्याय</string>\n    <string name=\"label_more\">अधिक</string>\n    <string name=\"label_settings\">सेटिंग्ज</string>\n    <string name=\"label_recent_manga\">इतिहास</string>\n    <string name=\"label_backup\">बॅकअप आणि रीस्टोर</string>\n    <string name=\"label_help\">मदत</string>\n    <string name=\"action_settings\">सेटिंग्ज</string>\n    <string name=\"action_filter\">फिल्टर</string>\n    <string name=\"action_filter_unread\">न वाचलेले</string>\n    <string name=\"action_filter_empty\">फिल्टर काढा</string>\n    <string name=\"action_sort_total\">एकूण अध्याय</string>\n    <string name=\"history\">इतिहास</string>\n    <string name=\"action_sort_alpha\">वर्णक्रमानुसार</string>\n    <string name=\"action_sort_last_read\">शेवटचे वाचले</string>\n    <string name=\"action_sort_latest_chapter\">नवीन अध्याय</string>\n    <string name=\"action_search\">शोध</string>\n    <string name=\"action_select_all\">सर्व निवडा</string>\n    <string name=\"action_mark_as_read\">वाचलेले म्हणून चिन्हांकित करा</string>\n    <string name=\"action_mark_as_unread\">वाचले नाही अशी खुण करा</string>\n    <string name=\"action_download\">डाउनलोड</string>\n    <string name=\"action_delete\">हटवा</string>\n    <string name=\"black_background\">काळा</string>\n    <string name=\"channel_common\">सामान्य</string>\n    <string name=\"action_menu\">मेनू</string>\n    <string name=\"action_filter_bookmarked\">बुकमार्क आहे</string>\n    <string name=\"track\">ट्रॅकिंग</string>\n    <string name=\"manga\">लायब्ररी इंत्रिज</string>\n    <string name=\"categories\">श्रेण्या</string>\n    <string name=\"information_empty_category\">तुम्ही श्रेण्या बनविल्या नाही आहेत, प्लस वर दाबून तुम्ही श्रेणी बनवू शकता.</string>\n    <string name=\"information_empty_library\">तुमची संग्रहालय खाली आहे</string>\n    <string name=\"information_no_recent_manga\">अलीकडे काहीही वाचले नाही</string>\n    <string name=\"information_no_recent\">कोणतेही अलीकडील अद्यतने नाही</string>\n    <string name=\"information_no_downloads\">डाऊनलोड नाहीत</string>\n    <string name=\"label_extension_info\">एक्स्टेन्शन माहिती</string>\n    <string name=\"label_extensions\">एक्स्टेन्शन</string>\n    <string name=\"label_migration\">स्त्रोत स्तालांतर</string>\n    <string name=\"label_sources\">स्त्रोत</string>\n    <string name=\"label_recent_updates\">अपडेट्स</string>\n    <string name=\"label_library\">संग्रहालय</string>\n    <string name=\"label_download_queue\">डाऊनलोड रांग</string>\n    <string name=\"action_restore\">पुनर्संचयित करा</string>\n    <string name=\"action_open_log\">लॉग उघडा</string>\n    <string name=\"action_undo\">पूर्ववत करा</string>\n    <string name=\"action_reset\">रीसेट करा</string>\n    <string name=\"action_save\">जतन करा</string>\n    <string name=\"action_share\">शेअर</string>\n    <string name=\"action_install\">स्थापित करा</string>\n    <string name=\"action_move_to_bottom\">सगळ्यात खाली हलवा</string>\n    <string name=\"action_move_to_top\">वर हलवा</string>\n    <string name=\"action_oldest\">सगळ्यात जुने</string>\n    <string name=\"action_newest\">सगळ्यात नवे</string>\n    <string name=\"action_sort\">क्रमवारी लावा</string>\n    <string name=\"action_cancel_all\">सगळे रद्द करा</string>\n    <string name=\"action_cancel\">रद्द करा</string>\n    <string name=\"action_unpin\">पिन काढा</string>\n    <string name=\"action_pin\">पिन</string>\n    <string name=\"action_display_download_badge\">Download बॅज</string>\n    <string name=\"action_display_list\">यादी</string>\n    <string name=\"action_display_grid\">ग्रीड</string>\n    <string name=\"action_display\">प्रदर्शन</string>\n    <string name=\"action_display_mode\">प्रदर्शन मोड</string>\n    <string name=\"action_open_in_web_view\">वेबव्ह्यू मध्ये उघडा</string>\n    <string name=\"action_open_in_browser\">ब्राऊझर मध्ये उघडा</string>\n    <string name=\"action_resume\">सुरू करा</string>\n    <string name=\"action_remove\">काढून टाका</string>\n    <string name=\"action_retry\">पुन्हा प्रयत्न करा</string>\n    <string name=\"action_next_chapter\">पुढील अध्याय</string>\n    <string name=\"action_previous_chapter\">मागील अध्याय</string>\n    <string name=\"action_pause\">विराम द्या</string>\n    <string name=\"action_view_chapters\">अध्याय बघा</string>\n    <string name=\"action_edit_cover\">कव्हर बदलवा</string>\n    <string name=\"action_move_category\">श्रेणी सेट करा</string>\n    <string name=\"action_rename_category\">श्रेणी पुन्हा नामांकित करा</string>\n    <string name=\"action_edit_categories\">श्रेणी संपादन</string>\n    <string name=\"action_add_category\">श्रेणी जोडा</string>\n    <string name=\"action_add\">जोडा</string>\n    <string name=\"action_edit\">सुधहरण</string>\n    <string name=\"action_update_library\">संग्रहालय अध्यातानित करा</string>\n    <string name=\"action_remove_bookmark\">बुकमार्क काढा</string>\n    <string name=\"action_bookmark\">बुकमार्क</string>\n    <string name=\"action_mark_previous_as_read\">मागील वाचलेले म्हणून चिन्हांकित करा</string>\n    <string name=\"action_select_inverse\">व्यस्त निवडा</string>\n    <string name=\"action_global_search\">जागतिक शोध</string>\n    <string name=\"secure_screen_summary\">अ‍ॅप्स स्विच करताना अॅप मधील सामग्री लपवा व स्क्रीनशॉट अवरोधित करा</string>\n    <string name=\"secure_screen\">स्क्रीन सुरक्षित करा</string>\n    <string name=\"lock_never\">कधीही नाही</string>\n    <string name=\"lock_always\">नेहमी</string>\n    <string name=\"lock_when_idle\">निष्क्रिय झाल्यावर लॉक करा</string>\n    <string name=\"lock_with_biometrics\">बिॉमेट्रिकस सह लॉक करा</string>\n    <string name=\"pref_category_security\">सुरक्षा</string>\n    <string name=\"pref_manage_notifications\">सुचनेचे व्यवस्थापन</string>\n    <string name=\"pref_date_format\">तारिकेचा स्वरूप</string>\n    <string name=\"theme_system\">तंत्राचे अनुसरण करा</string>\n    <string name=\"theme_dark\">डार्क</string>\n    <string name=\"theme_light\">लाइट</string>\n    <string name=\"pref_category_about\">ॲप बद्दल</string>\n    <string name=\"pref_category_advanced\">प्रगत</string>\n    <string name=\"pref_category_tracking\">ट्रॅकिंग</string>\n    <string name=\"pref_category_downloads\">डाउनलोडस</string>\n    <string name=\"pref_category_reader\">वाचक</string>\n    <string name=\"pref_category_library\">संग्रहालय</string>\n    <string name=\"pref_category_general\">जनरल</string>\n    <string name=\"app_not_available\">ऐप उपलब्ध नाही</string>\n    <string name=\"loading\">लोड होत आहे …</string>\n    <string name=\"action_webview_refresh\">रीफ्रेश</string>\n    <string name=\"action_webview_forward\">पुढे</string>\n    <string name=\"action_webview_back\">मागे जा</string>\n    <string name=\"pref_crop_borders\">सीमानां कापा</string>\n    <string name=\"pref_show_page_number\">पृष्ठ क्रमांक दर्शवा</string>\n    <string name=\"pref_double_tap_anim_speed\">दोनदा टॅप साठी अ‍ॅनिमेशन गती</string>\n    <string name=\"pref_page_transitions\">पृष्ठ संक्रमण संजीवित करा</string>\n    <string name=\"pref_cutout_short\">कटआउट क्षेत्रात सामग्री दर्शवा</string>\n    <string name=\"obsolete_extension_message\">हे एक्सटेन्शन उपलब्ध नाही.</string>\n    <string name=\"untrusted_extension_message\">हे एक्सटेन्शन एका अविश्वासू प्रमानपत्रासहित आले आहे म्हणून हे स्थापित होऊ शकले नाही.\n\\n\n\\nअसे अविश्वासू एक्सटेन्शन आपले लॉगिन बाबत माहिती चोरू शकते.\n\\n\n\\nव अश्या एक्सटेन्शन वर विश्वास करून तुम्ही ह्या सगद्या जोखीम घेत आहेत.</string>\n    <string name=\"untrusted_extension\">अविश्वासू एक्सटेन्शन</string>\n    <string name=\"ext_uninstall\">विस्थापित करा</string>\n    <string name=\"ext_untrusted\">अविश्वासू</string>\n    <string name=\"ext_trust\">विश्वास</string>\n    <string name=\"ext_installed\">स्थापित झाले</string>\n    <string name=\"ext_installing\">स्थापित होत आहे</string>\n    <string name=\"ext_downloading\">डाउनलोड होत आहेत</string>\n    <string name=\"ext_pending\">प्रलंबित</string>\n    <string name=\"ext_install\">स्थापित करा</string>\n    <string name=\"ext_obsolete\">कालबाह्य</string>\n    <string name=\"ext_update\">अध्यातणीत करा</string>\n    <string name=\"ext_updates_pending\">प्रलंबित अध्यातणे</string>\n    <string name=\"all\">सगडे</string>\n    <string name=\"default_category_summary\">नेहमी विचारायचे</string>\n    <string name=\"default_category\">मूलभूत श्रेणी</string>\n    <string name=\"pref_update_only_non_completed\">फक्त चालू असलेल्याच मांगा आधीतणीत करायचे</string>\n    <string name=\"charging\">चार्ज होत आहे</string>\n    <string name=\"pref_library_update_restriction\">लायब्ररी अद्ययावत प्रतिबंधी</string>\n    <string name=\"double_tap_anim_speed_0\">अनिमेशन नाही</string>\n    <string name=\"zoom_start_center\">सेंटर</string>\n    <string name=\"zoom_start_right\">उजवी बाजू</string>\n    <string name=\"zoom_start_left\">डावी बाजू</string>\n    <string name=\"zoom_start_automatic\">ऑटोमॅटिक</string>\n    <string name=\"pref_zoom_start\">प्रारंभ स्तीतीला झूम करून</string>\n    <string name=\"scale_type_smart_fit\">स्मार्ट फिट</string>\n    <string name=\"scale_type_original_size\">मूळ आकार</string>\n    <string name=\"scale_type_fit_height\">फिट उंची</string>\n    <string name=\"scale_type_fit_width\">फिट रुंदी</string>\n    <string name=\"scale_type_stretch\">ताणून लांब करणे</string>\n    <string name=\"scale_type_fit_screen\">फिट स्क्रीन</string>\n    <string name=\"pref_image_scale_type\">स्केल प्रकार</string>\n    <string name=\"pager_viewer\">पृष्ठबद्ध</string>\n    <string name=\"vertical_plus_viewer\">सतत उभे</string>\n    <string name=\"webtoon_viewer\">वेबटून</string>\n    <string name=\"vertical_viewer\">सरळ</string>\n    <string name=\"right_to_left_viewer\">उजवीकडून डावीकडे</string>\n    <string name=\"left_to_right_viewer\">डावीकडून उजवीकडे</string>\n    <string name=\"pref_viewer_type\">डीफॉल्ट वाचन मोड</string>\n    <string name=\"gray_background\">फिक्का काडा</string>\n    <string name=\"white_background\">पांढरा</string>\n    <string name=\"pref_reader_theme\">बॅकग्राऊंड रंग</string>\n    <string name=\"pref_read_with_long_tap\">दीर्घ टॅप संवाद</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">व्हॉल्यूम की उलटा करा</string>\n    <string name=\"pref_read_with_volume_keys\">व्हॉल्यूम की</string>\n    <string name=\"pref_reader_navigation\">नॅव्हिगेशन</string>\n    <string name=\"pref_skip_filtered_chapters\">फिल्टर केलेले अध्याय वगळा</string>\n    <string name=\"pref_skip_read_chapters\">अध्याय वाचले म्हणून चिन्हांकित करा</string>\n    <string name=\"pref_keep_screen_on\">स्क्रीन सुरू ठेवा</string>\n    <string name=\"filter_mode_darken\">जाडे / गडद करा</string>\n    <string name=\"filter_mode_lighten\">डॉज / लाईट करा</string>\n    <string name=\"filter_mode_screen\">स्क्रीन</string>\n    <string name=\"filter_mode_multiply\">गुणाकार</string>\n    <string name=\"filter_mode_overlay\">थर</string>\n    <string name=\"pref_color_filter_mode\">रंग फिल्टर मिश्रण मोड</string>\n    <string name=\"pref_custom_color_filter\">कस्टम रंग फिल्टर वापरा</string>\n    <string name=\"pref_custom_brightness\">कस्टम ब्राइटनेस वापरा</string>\n    <string name=\"pref_fullscreen\">फुलस्क्रीन</string>\n    <string name=\"update_weekly\">साप्ताहिक</string>\n    <string name=\"update_48hour\">दर २ दिवसांत</string>\n    <string name=\"update_24hour\">दररोज</string>\n    <string name=\"update_12hour\">दर १२ तासाला</string>\n    <string name=\"update_6hour\">दर ६ तासाला</string>\n    <string name=\"update_never\">स्वतः करा</string>\n    <string name=\"pref_library_update_interval\">लायब्ररी अद्यतन वारंवारता</string>\n    <string name=\"pref_category_library_update\">अद्यतने</string>\n    <string name=\"landscape\">लँडस्केप</string>\n    <string name=\"portrait\">पोर्ट्रेट</string>\n    <string name=\"pref_library_columns\">आयटम प्रती पंक्ती</string>\n    <string name=\"pref_category_display\">दाखवा</string>\n    <string name=\"hide_notification_content\">सूचना सामग्री लपवा</string>\n    <string name=\"double_tap_anim_speed_normal\">सामान्य</string>\n    <string name=\"pref_viewer_nav\">नैविगेशन माध्य</string>\n    <string name=\"nav_zone_right\">उजवी</string>\n    <string name=\"nav_zone_left\">डावी</string>\n    <string name=\"nav_zone_next\">पुढचं</string>\n    <string name=\"nav_zone_prev\">मागचं</string>\n    <string name=\"right_and_left_nav\">उजवी आंही डावी</string>\n    <string name=\"edge_nav\">कडा</string>\n    <string name=\"kindlish_nav\">किंडल सारख</string>\n    <string name=\"pref_category_appearance\">प्रदर्शन</string>\n    <string name=\"last_read_chapter\">शेवटी वाचलेला पाठ</string>\n    <string name=\"label_network\">नेटवर्क</string>\n    <string name=\"label_downloaded_only\">केवळ डाउनलोड केलेले</string>\n    <string name=\"pref_category_theme\">थीम</string>\n    <string name=\"label_started\">चालु केले</string>\n    <string name=\"label_local\">लोकल</string>\n    <string name=\"label_downloaded\">डाऊनलोड झाले</string>\n    <string name=\"on\">चालु</string>\n    <string name=\"confirm_lock_change\">बदलांची पुष्टी करण्यासाठी प्रमाणीकरण करा</string>\n    <string name=\"label_warning\">चेतावणी</string>\n    <string name=\"off\">बंद</string>\n    <string name=\"action_set_interval\">मध्यांतर</string>\n    <string name=\"action_filter_tracked\">ट्रॅक केले</string>\n    <string name=\"action_filter_interval_custom\">कस्टमाईज्ड फेच इंटरवल</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ms/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">Selepas %1$s minit</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d bab baharu</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">Bab %1$s dan %2$d lagi</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">Untuk entri %d</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">%d kemas kini sambungan tersedia</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">%1$s baki</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d kategori</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">Selesai dalam %1$s dengan %2$s ralat</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">Jumlah bab: %1$s</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d penjejak</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">Melangkau %d bab, sama ada sumber tidak mempunyai bab tersebut, atau ia ditapis keluar</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d hari lalu</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">%d bab tidak dibaca seterusnya</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">%d bab seterusnya</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">Hilang %1$s bab</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d hari</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d repositori</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ms/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nama</string>\n    <string name=\"categories\">Kategori</string>\n    <string name=\"manga\">Entri pustaka</string>\n    <string name=\"chapters\">Bab-bab</string>\n    <string name=\"track\">Penjejakan</string>\n    <string name=\"history\">Sejarah</string>\n    <string name=\"label_settings\">Tetapan</string>\n    <string name=\"label_download_queue\">Giliran muat turun</string>\n    <string name=\"label_library\">Pustaka</string>\n    <string name=\"label_recent_manga\">Sejarah</string>\n    <string name=\"label_recent_updates\">Kemas kini</string>\n    <string name=\"label_backup\">Sandaran dan memulih</string>\n    <string name=\"action_settings\">Tetapan</string>\n    <string name=\"action_filter\">Tapis</string>\n    <string name=\"action_filter_bookmarked\">Ditanda</string>\n    <string name=\"action_filter_unread\">Belum dibaca</string>\n    <string name=\"action_filter_empty\">Kosongkan tapisan</string>\n    <string name=\"action_sort_alpha\">Abjad</string>\n    <string name=\"action_sort_total\">Jumlah bab</string>\n    <string name=\"action_sort_last_read\">Bacaan terakhir</string>\n    <string name=\"action_search\">Carian</string>\n    <string name=\"action_global_search\">Carian keseluruhan</string>\n    <string name=\"action_select_all\">Pilih semua</string>\n    <string name=\"action_mark_as_read\">Tandakan sebagai sudah dibaca</string>\n    <string name=\"action_mark_as_unread\">Tandakan sebagai belum dibaca</string>\n    <string name=\"action_mark_previous_as_read\">Tandakan yang sebelum sebagai sudah dibaca</string>\n    <string name=\"action_download\">Muat turun</string>\n    <string name=\"action_bookmark\">Penanda bab</string>\n    <string name=\"action_remove_bookmark\">Buang penanda bab</string>\n    <string name=\"action_delete\">Padam</string>\n    <string name=\"action_update_library\">Kemas kini pustaka</string>\n    <string name=\"action_edit\">Ubah</string>\n    <string name=\"action_add\">Tambah</string>\n    <string name=\"action_add_category\">Tambah kategori</string>\n    <string name=\"action_edit_categories\">Edit kategori</string>\n    <string name=\"action_rename_category\">Ubah nama kategori</string>\n    <string name=\"action_move_category\">Tetapkan kategori</string>\n    <string name=\"action_edit_cover\">Ubah muka hadapan</string>\n    <string name=\"action_pause\">Henti sebentar</string>\n    <string name=\"action_previous_chapter\">Bab sebelumnya</string>\n    <string name=\"action_next_chapter\">Bab seterusnya</string>\n    <string name=\"action_retry\">Cuba semula</string>\n    <string name=\"action_remove\">Keluarkan</string>\n    <string name=\"action_resume\">Sambung</string>\n    <string name=\"action_open_in_browser\">Buka di pelayar</string>\n    <string name=\"action_display_mode\">Mod paparan</string>\n    <string name=\"action_display\">Paparan</string>\n    <string name=\"action_display_grid\">Grid padat</string>\n    <string name=\"action_display_list\">Senarai</string>\n    <string name=\"action_cancel\">Batal</string>\n    <string name=\"action_sort\">Susun mengikut</string>\n    <string name=\"action_install\">Pasang</string>\n    <string name=\"action_share\">Kongsi</string>\n    <string name=\"action_save\">Simpan</string>\n    <string name=\"action_reset\">Set semula</string>\n    <string name=\"action_undo\">Batal</string>\n    <string name=\"action_open_log\">Buka log</string>\n    <string name=\"action_restore\">Kembalikan ke asal</string>\n    <string name=\"loading\">Muat…</string>\n    <string name=\"app_not_available\">Aplikasi tidak tersedia</string>\n    <string name=\"pref_category_general\">Umum</string>\n    <string name=\"pref_category_reader\">Pembaca</string>\n    <string name=\"pref_category_downloads\">Muat turun</string>\n    <string name=\"pref_category_tracking\">Penjejakan</string>\n    <string name=\"pref_category_advanced\">Lanjutan</string>\n    <string name=\"pref_category_about\">Tentang</string>\n    <string name=\"pref_library_columns\">Saiz grid</string>\n    <string name=\"portrait\">Potret</string>\n    <string name=\"landscape\">Landskap</string>\n    <string name=\"pref_library_update_interval\">Kemas kini automatik</string>\n    <string name=\"update_never\">Mati</string>\n    <string name=\"update_6hour\">Setiap 6 jam</string>\n    <string name=\"update_12hour\">Setiap 12 jam</string>\n    <string name=\"update_24hour\">Setiap hari</string>\n    <string name=\"update_48hour\">Setiap 2 hari</string>\n    <string name=\"update_weekly\">Setiap minggu</string>\n    <string name=\"all\">Semua</string>\n    <string name=\"pref_library_update_restriction\">Sekatan kemas kini automatik peranti</string>\n    <string name=\"charging\">Ketika mengecas</string>\n    <string name=\"pref_update_only_non_completed\">Langkau entri dengan status \\\"Sudah selesai\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Kemas kini selepas dibaca</string>\n    <string name=\"default_category\">Kategori lalai</string>\n    <string name=\"default_category_summary\">Sentiasa tanya</string>\n    <string name=\"pref_fullscreen\">Skrin penuh</string>\n    <string name=\"pref_page_transitions\">Menggerakkan peralihan muka surat</string>\n    <string name=\"pref_show_page_number\">Tunjuk nombor muka surat</string>\n    <string name=\"pref_crop_borders\">Potong pinggiran</string>\n    <string name=\"pref_custom_brightness\">Kecerahan tersuai</string>\n    <string name=\"pref_custom_color_filter\">Turas warna tersuai</string>\n    <string name=\"pref_keep_screen_on\">Tetap nyalakan skrin</string>\n    <string name=\"pref_reader_navigation\">Navigasi</string>\n    <string name=\"pref_read_with_volume_keys\">Butang volum</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Songsangkan butang kelantangan</string>\n    <string name=\"pref_reader_theme\">Warna latar</string>\n    <string name=\"white_background\">Putih</string>\n    <string name=\"black_background\">Hitam</string>\n    <string name=\"pref_viewer_type\">Mod membaca lalai</string>\n    <string name=\"left_to_right_viewer\">Muka surat (kiri ke kanan)</string>\n    <string name=\"right_to_left_viewer\">Muka surat (kanan ke kiri)</string>\n    <string name=\"vertical_viewer\">Muka surat (menegak)</string>\n    <string name=\"webtoon_viewer\">Sebaris panjang</string>\n    <string name=\"pref_image_scale_type\">Skala</string>\n    <string name=\"scale_type_fit_screen\">Muat skrin</string>\n    <string name=\"scale_type_stretch\">Regang</string>\n    <string name=\"scale_type_fit_width\">Muat lebar skrin</string>\n    <string name=\"scale_type_fit_height\">Muat ketinggian skrin</string>\n    <string name=\"scale_type_original_size\">Saiz asal</string>\n    <string name=\"scale_type_smart_fit\">Muat pintar</string>\n    <string name=\"pref_zoom_start\">Kedudukan permulaan zum</string>\n    <string name=\"zoom_start_automatic\">Automatik</string>\n    <string name=\"zoom_start_left\">Kiri</string>\n    <string name=\"zoom_start_right\">Kanan</string>\n    <string name=\"zoom_start_center\">Tengah</string>\n    <string name=\"pref_rotation_type\">Jenis putaran skrin lalai</string>\n    <string name=\"rotation_free\">Bebas</string>\n    <string name=\"rotation_force_portrait\">Kekal potret</string>\n    <string name=\"rotation_force_landscape\">Kekal landskap</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Selepas secara manual ditandakan sebagai dibaca</string>\n    <string name=\"pref_remove_after_read\">Selepas membaca padam secara automatik</string>\n    <string name=\"disabled\">Dinyahkan</string>\n    <string name=\"last_read_chapter\">Bab terakhir dibaca</string>\n    <string name=\"second_to_last\">Bab kedua terakhir dibaca</string>\n    <string name=\"third_to_last\">Bab ketiga terakhir dibaca</string>\n    <string name=\"fourth_to_last\">Bab keempat terakhir dibaca</string>\n    <string name=\"fifth_to_last\">Bab kelima terakhir dibaca</string>\n    <string name=\"pref_download_new\">Muat turun bab baharu</string>\n    <string name=\"services\">Penjejak</string>\n    <string name=\"pref_create_backup\">Buat sandaran</string>\n    <string name=\"pref_create_backup_summ\">Boleh digunakan untuk memulihkan pustaka semasa</string>\n    <string name=\"pref_restore_backup\">Pulihkan sandaran</string>\n    <string name=\"pref_restore_backup_summ\">Pulihkan pustaka daripada fail sandaran</string>\n    <string name=\"pref_backup_interval\">Kekerapan sandaran automatik</string>\n    <string name=\"backup_created\">Sandaran dicipta</string>\n    <string name=\"restore_completed\">Pemulihan selesai</string>\n    <string name=\"backup_choice\">Apakah yang ingin anda sandarkan?</string>\n    <string name=\"restoring_backup\">Dalam proses memulihkan sandaran</string>\n    <string name=\"creating_backup\">Dalam proses membuat sandaran</string>\n    <string name=\"pref_clear_chapter_cache\">Hapus cache bab</string>\n    <string name=\"used_cache\">%1$s digunakan</string>\n    <string name=\"cache_deleted\">Cache dihapuskan, %1$d fail dipadamkan</string>\n    <string name=\"cache_delete_error\">Ralat berlaku ketika menghapus</string>\n    <string name=\"pref_clear_cookies\">Hapus cookies</string>\n    <string name=\"cookies_cleared\">Cookies dihapuskan</string>\n    <string name=\"pref_clear_database\">Hapus pangkalan data</string>\n    <string name=\"pref_clear_database_summary\">Hapus sejarah entri yang tidak disimpan di dalam pustaka</string>\n    <string name=\"clear_database_confirmation\">Adakah anda pasti? Bab dibaca dan kemajuan entri bukan-pustaka akan hilang</string>\n    <string name=\"clear_database_completed\">Entri dihapuskan</string>\n    <string name=\"version\">Versi</string>\n    <string name=\"pref_enable_acra\">Hantar laporan ranap</string>\n    <string name=\"pref_acra_summary\">Bantu membaiki aplikasi. Tiada data sensitif dihantar</string>\n    <string name=\"login_title\">Log masuk ke %1$s</string>\n    <string name=\"username\">Nama pengguna</string>\n    <string name=\"password\">Kata laluan</string>\n    <string name=\"login\">Log masuk</string>\n    <string name=\"login_success\">Log masuk berjaya</string>\n    <string name=\"unknown_error\">Ralat tidak diketahui</string>\n    <string name=\"updating_category\">mengemaskinikan kategori</string>\n    <string name=\"no_more_results\">Tiada lagi hasil</string>\n    <string name=\"local_source\">Sumber lokal</string>\n    <string name=\"other_source\">Lain</string>\n    <string name=\"action_global_search_hint\">Carian keseluruhan…</string>\n    <string name=\"latest\">Terkini</string>\n    <string name=\"browse\">Semak imbas</string>\n    <string name=\"ongoing\">Berterusan</string>\n    <string name=\"unknown\">Tidak diketahui</string>\n    <string name=\"licensed\">Berlesen</string>\n    <string name=\"remove_from_library\">Keluarkan daripada pustaka</string>\n    <string name=\"delete_downloads_for_manga\">Padam bab-bab yang dimuat turun?</string>\n    <string name=\"display_mode_chapter\">Bab %1$s</string>\n    <string name=\"chapter_downloading_progress\">Memuat turun (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Ralat</string>\n    <string name=\"chapter_paused\">Ditangguh</string>\n    <string name=\"show_title\">Tajuk sumber</string>\n    <string name=\"show_chapter_number\">Nombor bab</string>\n    <string name=\"sort_by_source\">Mengikut sumber</string>\n    <string name=\"sort_by_number\">Mengikut nombor bab</string>\n    <string name=\"manga_download\">Muat turun</string>\n    <string name=\"download_unread\">Belum dibaca</string>\n    <string name=\"confirm_delete_chapters\">Adakah anda pasti ingin memadamkan bab yang dipilih?</string>\n    <string name=\"manga_tracking_tab\">Penjejakan</string>\n    <string name=\"reading\">Sedang baca</string>\n    <string name=\"completed\">Selesai</string>\n    <string name=\"dropped\">Diabaikan</string>\n    <string name=\"on_hold\">Ditangguh</string>\n    <string name=\"plan_to_read\">Ingin baca</string>\n    <string name=\"score\">Skor</string>\n    <string name=\"title\">Tajuk</string>\n    <string name=\"status\">Status</string>\n    <string name=\"error_category_exists\">Kategori dengan nama ini sudah wujud!</string>\n    <string name=\"snack_categories_deleted\">Kategori dipadam</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Tarikh bacaan bab ini akan dipadam. Adakah anda pasti?</string>\n    <string name=\"dialog_with_checkbox_reset\">Set semula semua bab bagi entri ini</string>\n    <string name=\"snack_add_to_library\">Tambah ke pustaka?</string>\n    <string name=\"action_display_download_badge\">Bab dimuat turun</string>\n    <string name=\"picture_saved\">Gambar disimpan</string>\n    <string name=\"custom_filter\">Tapisan tersuai</string>\n    <string name=\"set_as_cover\">Set sebagai muka hadapan</string>\n    <string name=\"cover_updated\">Muka hadapan dikemas kini</string>\n    <string name=\"chapter_progress\">Muka surat: %1$d</string>\n    <string name=\"no_next_chapter\">Bab seterusnya tidak dijumpai</string>\n    <string name=\"decode_image_error\">Imej tidak dapat dimuatkan</string>\n    <string name=\"confirm_set_image_as_cover\">Guna imej ini sebagai muka hadapan?</string>\n    <string name=\"download_queue_error\">Memuat turun bab tidak berjaya. Anda boleh mencuba lagi di bahagian muat turun</string>\n    <string name=\"notification_new_chapters\">Bab baharu dijumpai</string>\n    <string name=\"notification_cover_update_failed\">Gagal untuk kemas kini muka hadapan</string>\n    <string name=\"notification_first_add_to_library\">Sila tambahkan entri ke pustaka sebelum melakukan ini</string>\n    <string name=\"file_select_cover\">Pilih imej muka hadapan</string>\n    <string name=\"file_select_backup\">Pilih fail sandaran</string>\n    <string name=\"update_check_confirm\">Muat turun</string>\n    <string name=\"update_check_no_new_updates\">Tiada versi baharu tersedia</string>\n    <string name=\"update_check_notification_download_in_progress\">Memuat turun…</string>\n    <string name=\"update_check_notification_download_complete\">Ketik untuk memasang kemas kini</string>\n    <string name=\"update_check_notification_download_error\">Ralat muat turun</string>\n    <string name=\"update_check_notification_update_available\">Versi baharu boleh didapati!</string>\n    <string name=\"information_no_downloads\">Tiada muat turun</string>\n    <string name=\"information_no_recent\">Tiada kemas kini terkini</string>\n    <string name=\"information_no_recent_manga\">Tiada bacaan setakat ini</string>\n    <string name=\"information_empty_library\">Pustaka kosong</string>\n    <string name=\"download_notifier_downloader_title\">Pemuat turun</string>\n    <string name=\"download_notifier_title_error\">Ralat</string>\n    <string name=\"download_notifier_unknown_error\">Ralat tidak diketahui ketika memuat turun bab</string>\n    <string name=\"download_notifier_text_only_wifi\">Tiada sambungan Wi-Fi yang tersedia</string>\n    <string name=\"download_notifier_no_network\">Tiada sambungan rangkaian tersedia</string>\n    <string name=\"download_notifier_download_paused\">Muat turun dihentikan sebentar</string>\n    <string name=\"channel_common\">Biasa</string>\n    <string name=\"label_migration\">Pindah sumber</string>\n    <string name=\"label_extensions\">Sambungan</string>\n    <string name=\"label_extension_info\">Info sambungan</string>\n    <string name=\"action_open_in_web_view\">Buka dalam WebView</string>\n    <string name=\"ext_update\">Kemas kini</string>\n    <string name=\"ext_install\">Pasang</string>\n    <string name=\"ext_pending\">Masih menunggu</string>\n    <string name=\"ext_downloading\">Memuat turun</string>\n    <string name=\"ext_installing\">Memasang</string>\n    <string name=\"ext_installed\">Dipasang</string>\n    <string name=\"ext_trust\">Dipercayai</string>\n    <string name=\"ext_untrusted\">Tidak dipercayai</string>\n    <string name=\"ext_uninstall\">Nyahpasang</string>\n    <string name=\"untrusted_extension\">Sambungan tak dipercayai</string>\n    <string name=\"untrusted_extension_message\">Sambungan yang berniat jahat kemungkinan membaca sebarang kelayakan log masuk yang di simpan atau melaksanakan kod sesuka hati.\n\\n\n\\nDengan mempercayai sambungan ini, anda menerima risiko tersebut.</string>\n    <string name=\"pref_double_tap_anim_speed\">Kelajuan animasi ketik dua kali</string>\n    <string name=\"pref_skip_read_chapters\">Langkau bab yang sudah dibaca</string>\n    <string name=\"pref_read_with_long_tap\">Tunjuk tindakan bila menahan ketik</string>\n    <string name=\"pager_viewer\">Muka surat</string>\n    <string name=\"double_tap_anim_speed_0\">Tiada animasi</string>\n    <string name=\"double_tap_anim_speed_normal\">Biasa</string>\n    <string name=\"double_tap_anim_speed_fast\">Laju</string>\n    <string name=\"manga_added_library\">Ditambah ke pustaka</string>\n    <string name=\"manga_removed_library\">Dibuang dari pustaka</string>\n    <string name=\"copied_to_clipboard\">Disalin ke papan keratan:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Sumber tidak dipasang: %1$s</string>\n    <string name=\"repeating\">Membaca semula</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Jenis</string>\n    <string name=\"transition_finished\">Selesai:</string>\n    <string name=\"transition_current\">Sekarang:</string>\n    <string name=\"transition_next\">Seterusnya:</string>\n    <string name=\"transition_previous\">Sebelumnya:</string>\n    <string name=\"transition_no_next\">Tiada bab seterusnya dijumpai</string>\n    <string name=\"transition_no_previous\">Tiada bab sebelumnya dijumpai</string>\n    <string name=\"transition_pages_loading\">Memuatkan muka surat…</string>\n    <string name=\"transition_pages_error\">Gagal untuk memuatkan muka surat: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Pilih data untuk disertakan</string>\n    <string name=\"migrate\">Beralih</string>\n    <string name=\"copy\">Salin</string>\n    <string name=\"information_empty_category\">Anda tidak mempunyai kategori. Ketik butang tambah untuk membuat satu untuk mengatur pustaka anda.</string>\n    <string name=\"pref_color_filter_mode\">Mod turas warna campuran</string>\n    <string name=\"label_help\">Bantuan</string>\n    <string name=\"filter_mode_overlay\">Lapisan atas</string>\n    <string name=\"filter_mode_multiply\">Berganda</string>\n    <string name=\"filter_mode_screen\">Skrin</string>\n    <string name=\"filter_mode_lighten\">Dodge / Mencerahkan</string>\n    <string name=\"filter_mode_darken\">Burn / Menggelapkan</string>\n    <string name=\"no_results_found\">Tiada hasil dijumpai</string>\n    <string name=\"migration_selection_prompt\">Pilih sumber untuk ditukar</string>\n    <string name=\"action_webview_back\">Ke belakang</string>\n    <string name=\"action_webview_forward\">Ke depan</string>\n    <string name=\"action_webview_refresh\">Segar semula</string>\n    <string name=\"pref_category_library\">Pustaka</string>\n    <string name=\"ext_obsolete\">Usang</string>\n    <string name=\"obsolete_extension_message\">Sambungan ini tidak lagi ada. Ia mungkin tidak berfungsi dengan betul dan boleh menyebabkan masalah dengan aplikasi. Mengenyahpasang adalah disarankan.</string>\n    <string name=\"pref_date_format\">Format tarikh</string>\n    <string name=\"pref_category_library_update\">Kemas kini keseluruhan</string>\n    <string name=\"logout_title\">Log keluar daripada %1$s?</string>\n    <string name=\"logout\">Log keluar</string>\n    <string name=\"logout_success\">Anda telah log keluar</string>\n    <string name=\"paused\">Ditangguh</string>\n    <string name=\"label_more\">Lain-lain</string>\n    <string name=\"action_sort_latest_chapter\">Bab terkini</string>\n    <string name=\"action_view_chapters\">Buka bab</string>\n    <string name=\"action_cancel_all\">Batalkan semua</string>\n    <string name=\"theme_light\">Terang</string>\n    <string name=\"theme_dark\">Gelap</string>\n    <string name=\"theme_system\">Sistem</string>\n    <string name=\"pref_manage_notifications\">Uruskan pemberitahuan</string>\n    <string name=\"pref_category_security\">Keselamatan dan privasi</string>\n    <string name=\"lock_with_biometrics\">Memerlukan buka kunci</string>\n    <string name=\"lock_when_idle\">Kunci apabila terbiar</string>\n    <string name=\"lock_always\">Selalu</string>\n    <string name=\"lock_never\">Tidak akan</string>\n    <string name=\"secure_screen\">Skrin keselamatan</string>\n    <string name=\"ext_updates_pending\">Kemas kini baharu</string>\n    <string name=\"pref_cutout_short\">Tunjuk kandungan dalam kawasan bertakuk</string>\n    <string name=\"information_cloudflare_bypass_failure\">Gagal untuk memintas Cloudflare</string>\n    <string name=\"information_webview_outdated\">Sila kemas kini aplikasi WebView untuk keserasian yang lebih baik</string>\n    <string name=\"channel_new_chapters\">Pengemaskinian bab</string>\n    <string name=\"secure_screen_summary\">Skrin keselamatan menyembunyikan kandungan aplikasi apabila menukar aplikasi dan sekat tangkapan skrin</string>\n    <string name=\"pref_category_display\">Paparan</string>\n    <string name=\"notification_chapters_single\">Bab %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Bab %1$s dan %2$d lagi</string>\n    <string name=\"notification_chapters_multiple\">Bab %1$s</string>\n    <string name=\"hide_notification_content\">Sembunyikan kandungan pemberitahuan</string>\n    <string name=\"pref_disable_battery_optimization\">Nyahdaya pengoptimuman bateri</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Membantu dengan pengemaskinian latar belakang pustaka dan sandaran</string>\n    <string name=\"battery_optimization_disabled\">Pengoptimuman bateri sudah dinyahdayakan</string>\n    <string name=\"email\">Alamat e-mel</string>\n    <string name=\"pref_always_show_chapter_transition\">Sentiasa tunjuk peralihan bab</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_newest\">Terbaru</string>\n    <string name=\"action_oldest\">Terlama</string>\n    <string name=\"action_move_to_top\">Naik ke atas</string>\n    <string name=\"action_move_to_bottom\">Turun ke bawah</string>\n    <string name=\"channel_ext_updates\">Kemas kini sambungan</string>\n    <string name=\"updating_library\">Mengemas kini pustaka</string>\n    <string name=\"pref_category_reading\">Membaca</string>\n    <string name=\"vertical_plus_viewer\">Sebaris panjang dengan sela</string>\n    <string name=\"pref_skip_filtered_chapters\">Lingkau bab yang ditapis</string>\n    <string name=\"action_select_inverse\">Pilih songsang</string>\n    <string name=\"label_sources\">Sumber</string>\n    <string name=\"pref_webtoon_side_padding\">Tambahan sisi</string>\n    <string name=\"information_webview_required\">WebView diperlukan untuk aplikasi berfungsi</string>\n    <string name=\"recent_manga_time\">Bab %1$s - %2$s</string>\n    <string name=\"add_tracking\">Tambah penjejakan</string>\n    <string name=\"manga_info_collapse\">Tutup</string>\n    <string name=\"manga_info_expand\">Buka</string>\n    <string name=\"in_library\">Dalam Pustaka</string>\n    <string name=\"add_to_library\">Tambah ke Pustaka</string>\n    <string name=\"pinned_sources\">Disematkan</string>\n    <string name=\"licenses\">Lesen perisian sumber terbuka</string>\n    <string name=\"website\">Laman web</string>\n    <string name=\"restoring_backup_canceled\">Pemulih dibatalkan</string>\n    <string name=\"restoring_backup_error\">Memulihkan sandaran gagal</string>\n    <string name=\"restore_in_progress\">Pemulihan sedang dijalankan</string>\n    <string name=\"creating_backup_error\">Sandaran gagal</string>\n    <string name=\"backup_in_progress\">Sandaran sedang dijalankan</string>\n    <string name=\"action_unpin\">Buang sematkan</string>\n    <string name=\"action_pin\">Sematkan</string>\n    <string name=\"label_downloaded_only\">Dimuat turun sahaja</string>\n    <string name=\"last_used_source\">Terakhir digunakan</string>\n    <string name=\"check_for_updates\">Semak untuk kemas kini</string>\n    <string name=\"local_source_help_guide\">Panduan penggunaan sumber lokal</string>\n    <string name=\"restore_duration\">%02d minit, %02d saat</string>\n    <string name=\"downloaded_only_summary\">Tapis semua entri di dalam pustaka anda</string>\n    <string name=\"gray_background\">Kelabu</string>\n    <string name=\"viewer\">Mod membaca</string>\n    <string name=\"pref_category_for_this_series\">Untuk siri ini</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Tetapan peranti tidak dapat dibuka</string>\n    <string name=\"tracking_info\">Menyelaras satu hala untuk kemas kini bab kemajuan dalam sistem penjejak luaran. Sediakan penjejakan untuk entri individu daripada butang penjejakan mereka.</string>\n    <string name=\"pref_refresh_library_covers\">Segar semula muka hadapan pustaka</string>\n    <string name=\"sort_by_upload_date\">Mengikut tarikh muat naik</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"backup_restore_missing_sources\">Tiada sumber:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Sandaran tidak mengandungi apa-apa entri pustaka.</string>\n    <string name=\"invalid_backup_file\">Fail sandaran tidak sah:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Semak muka hadapan dan tentang baharu bila mengemaskini pustaka</string>\n    <string name=\"pref_library_update_refresh_metadata\">Segar semula metadata secara automatik</string>\n    <string name=\"action_migrate\">Pindah sumber</string>\n    <string name=\"action_display_comfortable_grid\">Grid selesa</string>\n    <string name=\"tabs_header\">Tab</string>\n    <string name=\"action_display_show_tabs\">Tunjuk tab kategori</string>\n    <string name=\"page_list_empty_error\">Tiada muka surat ditemui</string>\n    <string name=\"action_disable_all\">Matikan semua</string>\n    <string name=\"action_enable_all\">Hidupkan semua</string>\n    <string name=\"pref_show_reading_mode_summary\">Tunjukkan seketika mod membaca yang digunakan apabila pembaca dibuka</string>\n    <string name=\"pref_show_reading_mode\">Tunjuk mod membaca</string>\n    <string name=\"loader_not_implemented_error\">Sumber tidak dijumpai</string>\n    <string name=\"action_start\">Mula</string>\n    <string name=\"action_disable\">Matikan</string>\n    <string name=\"requires_app_restart\">Mulakan semula aplikasi diperlukan untuk berkesan</string>\n    <string name=\"label_network\">Rangkaian</string>\n    <string name=\"tapping_inverted_both\">Kedua-dua</string>\n    <string name=\"tapping_inverted_vertical\">Mod atas bawah</string>\n    <string name=\"tapping_inverted_horizontal\">Mod kanan kiri</string>\n    <string name=\"tapping_inverted_none\">Tidak aktif</string>\n    <string name=\"pref_read_with_tapping_inverted\">Songsangkan zon ketik</string>\n    <string name=\"unknown_status\">Status tidak diketahui</string>\n    <string name=\"unknown_author\">Pengarang tidak diketahui</string>\n    <string name=\"updated_version\">Dikemas kini ke v%1$s</string>\n    <string name=\"whats_new\">Apa yang terbaharu</string>\n    <string name=\"action_sort_date_added\">Tarikh ditambah</string>\n    <string name=\"download_insufficient_space\">Memuat turun tidak berjaya kerana kekurangan ruang storan</string>\n    <string name=\"action_global_search_query\">Cari untuk \\\"%1$s\\\" menggunakan carian keseluruhan</string>\n    <string name=\"pref_category_reading_mode\">Mod membaca</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"no_pinned_sources\">Tiada sumber yang disematkan</string>\n    <string name=\"channel_progress\">Kemajuan</string>\n    <string name=\"channel_complete\">Selesai</string>\n    <string name=\"channel_errors\">Ralat</string>\n    <string name=\"backup_restore_missing_trackers\">Penjejak yang tidak dilog masuk:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Benarkan memadam bab yang ditanda</string>\n    <string name=\"pref_category_delete_chapters\">Padam bab</string>\n    <string name=\"ext_nsfw_warning\">Sumber daripada sambungan ini mungkin mengandungi kandungan 18+ tahun keatas</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Ini tidak menghalang sambungan yang tidak rasmi atau berpotensi tidak menggunakan tetapan yang betul daripada menayangkan kandungan 18+ tahun keatas dalam aplikasi.</string>\n    <string name=\"no_chapters_error\">Tiada bab dijumpai</string>\n    <string name=\"chapter_settings_updated\">Tetapan bab lalai dikemas kini</string>\n    <string name=\"set_chapter_settings_as_default\">Tetapkan sebagai lalai</string>\n    <string name=\"also_set_chapter_settings_for_library\">Gunakan juga untuk semua entri dalam pustaka</string>\n    <string name=\"confirm_set_chapter_settings\">Adakah anda pasti ingin simpan tetapan ini sebagai lalai?</string>\n    <string name=\"chapter_settings\">Tetapan bab</string>\n    <string name=\"share_page_info\">%1$s: %2$s, muka surat %3$d</string>\n    <string name=\"action_search_settings\">Carian tetapan</string>\n    <string name=\"downloaded_chapters\">Bab dimuat turun</string>\n    <string name=\"manga_from_library\">Dari pustaka</string>\n    <string name=\"pref_incognito_mode_summary\">Menjeda sejarah membaca</string>\n    <string name=\"pref_incognito_mode\">Mod inkognito</string>\n    <string name=\"pref_clear_history\">Padamkan sejarah</string>\n    <string name=\"clear_history_confirmation\">Anda pasti? Semua sejarah akan hilang.</string>\n    <string name=\"clear_history_completed\">Sejarah dipadamkan</string>\n    <string name=\"spen_next_page\">Muka surat seterusnya</string>\n    <string name=\"spen_previous_page\">Muka surat terdahulu</string>\n    <string name=\"migration_help_guide\">Panduan memindahkan sumber</string>\n    <string name=\"pref_category_nsfw_content\">Sumber NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Tunjuk dalam senarai sumber dan sambungan</string>\n    <string name=\"file_picker_error\">Tiada aplikasi memilih fail</string>\n    <string name=\"myanimelist_relogin\">Sila log masuk ke MAL sekali lagi</string>\n    <string name=\"pref_viewer_nav\">Zon ketik</string>\n    <string name=\"edge_nav\">Sisi</string>\n    <string name=\"kindlish_nav\">Serupa Kindle</string>\n    <string name=\"l_nav\">Bentuk L</string>\n    <string name=\"action_desc\">Menurun</string>\n    <string name=\"action_asc\">Menaik</string>\n    <string name=\"action_order_by_chapter_number\">Mengikut nombor bab</string>\n    <string name=\"action_order_by_upload_date\">Mengikut tarikh muat naik</string>\n    <string name=\"pref_dump_crash_logs_summary\">Simpan log ralat untuk dikongsi dengan pembangunan aplikasi</string>\n    <string name=\"pref_dump_crash_logs\">Kongsi log kerosakan</string>\n    <string name=\"track_started_reading_date\">Tarikh mula</string>\n    <string name=\"track_finished_reading_date\">Tarikh selesai</string>\n    <string name=\"action_filter_tracked\">Dijejaki</string>\n    <string name=\"action_display_show_number_of_items\">Tunjuk jumlah bilangan</string>\n    <string name=\"right_and_left_nav\">Kanan dan kiri</string>\n    <string name=\"pref_dual_page_split\">Memisah muka surat lebar</string>\n    <string name=\"pref_dual_page_invert_summary\">Jika kedudukan memisah muka surat lebar tidak sama dengan arah membaca</string>\n    <string name=\"pref_dual_page_invert\">Songsangkan kedudukan memisah muka surat</string>\n    <string name=\"backup_restore_content_full\">Anda perlu memasang sambungan yang hilang dan log masuk ke penjejakan untuk menggunakannya.</string>\n    <string name=\"nav_zone_prev\">Sebelumnya</string>\n    <string name=\"pref_show_navigation_mode_summary\">Tunjukkan seketika apabila pembaca dibuka</string>\n    <string name=\"nav_zone_right\">Kanan</string>\n    <string name=\"nav_zone_left\">Kiri</string>\n    <string name=\"pref_show_navigation_mode\">Tunjuk tindanan zon ketik</string>\n    <string name=\"nav_zone_next\">Seterusnya</string>\n    <string name=\"pref_dns_over_https\">DNS melalui HTTPS (DoH)</string>\n    <string name=\"action_sort_chapter_fetch_date\">Tarikh bab diambil</string>\n    <string name=\"exclude\">Kecuali: %s</string>\n    <string name=\"include\">Hanya: %s</string>\n    <string name=\"none\">Tiada</string>\n    <string name=\"pref_library_update_categories_details\">Entri di dalam kategori berkecuali tidak akan dikemas kini walaupun ianya ada di dalam kategori hanya.</string>\n    <string name=\"pref_download_new_categories_details\">Entri di dalam kategori berkecuali tidak akan dimuat turun walaupun ianya ada di dalam kategori hanya.</string>\n    <string name=\"pref_category_auto_download\">Muat turun automatik</string>\n    <string name=\"action_show_errors\">Ketik untuk lihat butiran</string>\n    <string name=\"update_check_eol\">Versi Android ini tidak lagi disokong</string>\n    <string name=\"clipboard_copy_error\">Gagal menyalin ke papan keratan</string>\n    <string name=\"rotation_landscape\">Landskap</string>\n    <string name=\"rotation_portrait\">Potret</string>\n    <string name=\"pref_reader_actions\">Tindakan</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Mencipta folder mengikut tajuk entri</string>\n    <string name=\"pref_create_folder_per_manga\">Simpan muka surat ke folder berasingan</string>\n    <string name=\"rotation_type\">Jenis putaran skrin</string>\n    <string name=\"pref_grayscale\">Skala kelabu</string>\n    <string name=\"notification_incognito_text\">Nyahdaya mod inkognito</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"cancel_all_for_series\">Batalkan semua untuk siri ini</string>\n    <string name=\"error_no_match\">Tiada padanan dijumpai</string>\n    <string name=\"source_unsupported\">Sumber tidak disokong</string>\n    <string name=\"unread\">Belum dibaca</string>\n    <string name=\"date\">Tarikh</string>\n    <string name=\"local_filter_order_by\">Susun mengikut</string>\n    <string name=\"local_invalid_format\">Format bab tidak sah</string>\n    <string name=\"chapter_not_found\">Bab tidak dijumpai</string>\n    <string name=\"restrictions\">Sekatan: %s</string>\n    <string name=\"action_display_local_badge\">Sumber lokal</string>\n    <string name=\"off\">Mati</string>\n    <string name=\"on\">Hidup</string>\n    <string name=\"error_sharing_cover\">Ralat berkongsi muka hadapan</string>\n    <string name=\"error_saving_cover\">Ralat menyimpan muka hadapan</string>\n    <string name=\"cover_saved\">Muka hadapan disimpan</string>\n    <string name=\"manga_cover\">Muka hadapan</string>\n    <string name=\"categorized_display_settings\">Tetapan setiap kategori untuk susunan</string>\n    <string name=\"tracking_guide\">Panduan penjejakan</string>\n    <string name=\"information_empty_category_dialog\">Anda belum mempunyai kategori.</string>\n    <string name=\"action_start_downloading_now\">Mula memuat turun sekarang</string>\n    <string name=\"pref_dark_theme_pure_black\">Mod gelap hitam asli</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_midnightdusk\">Midnight Dusk</string>\n    <string name=\"theme_greenapple\">Epal Hijau</string>\n    <string name=\"theme_monet\">Dinamik</string>\n    <string name=\"pref_app_theme\">Tema aplikasi</string>\n    <string name=\"enhanced_tracking_info\">Perkidmatan yang menyediakan fungsi yang dipertingkatkan untuk sumber tertentu. Entri akan dijejaki secara automatik apabila ditambahkan ke pustaka.</string>\n    <string name=\"restore_miui_warning\">Sandaran/memulih mungkin tidak berfungsi dengan betul jika pengoptimuman MIUI dinyahaktifkan.</string>\n    <string name=\"about_dont_kill_my_app\">Sesetengah pengeluar ada sekatan tambahan pada aplikasi yang akan menghentikan perkidmatan latar belakang. Laman web ini ada maklumat cara membaikinya.</string>\n    <string name=\"enhanced_services\">Pertingkat penjejak</string>\n    <string name=\"theme_strawberrydaiquiri\">Strawberry Daiquiri</string>\n    <string name=\"pref_lowest\">Terendah</string>\n    <string name=\"pref_low\">Rendah</string>\n    <string name=\"pref_high\">Tinggi</string>\n    <string name=\"pref_highest\">Tertinggi</string>\n    <string name=\"pref_hide_threshold\">Sensitiviti menyembunyikan menu apabila skrol</string>\n    <string name=\"label_background_activity\">Aktiviti latar belakang</string>\n    <string name=\"pref_inverted_colors\">Songsang</string>\n    <string name=\"relative_time_today\">Hari ini</string>\n    <string name=\"theme_tealturquoise\">Teal &amp; Turquoise</string>\n    <string name=\"confirm_lock_change\">Sahkan untuk mengesahkan perubahan</string>\n    <string name=\"label_default\">Lalai</string>\n    <string name=\"pref_category_appearance\">Tampilan</string>\n    <string name=\"action_track\">Jejak</string>\n    <string name=\"getting_started_guide\">Panduan penggunaan</string>\n    <string name=\"pref_tablet_ui_mode\">UI tablet</string>\n    <string name=\"pref_remove_exclude_categories\">Kategori dikecualikan</string>\n    <string name=\"help_translate\">Bantu menterjemah</string>\n    <string name=\"ext_app_info\">Maklumat aplikasi</string>\n    <string name=\"ext_installer_legacy\">Legasi</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Pasang dan mulakan Shizuku untuk guna Shizuku sebagai pemasang sambungan.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku tidak dijalankan</string>\n    <string name=\"ext_installer_pref\">Pemasang</string>\n    <string name=\"ext_install_service_notif\">Memasang sambungan…</string>\n    <string name=\"action_sort_count\">Jumlah entri</string>\n    <string name=\"pref_verbose_logging\">Pengelogan berjela-jela</string>\n    <string name=\"pref_verbose_logging_summary\">Cetak log berjela ke log sistem (mengurangkan prestasi aplikasi)</string>\n    <string name=\"label_warning\">Amaran</string>\n    <string name=\"action_display_language_badge\">Bahasa</string>\n    <string name=\"backup_info\">Anda patut simpan salinan sandaran di tempat lain juga.</string>\n    <string name=\"notification_size_warning\">Kemas kini yang besar membahayakan sumber dan mengakibatkan sumber menjadi perlahan dan juga peningkatan penggunaan bateri. Ketik untuk ketahui selebihnya.</string>\n    <string name=\"connected_to_wifi\">Hanya menggunakan Wi-Fi</string>\n    <string name=\"update_72hour\">Setiap 3 hari</string>\n    <string name=\"download_queue_size_warning\">Amaran: muat turun secara pukal besar boleh menyebabkan sumber menjadi lebih perlahan dan/atau menyekat Mihon. Ketik untuk ketahui selebihnya.</string>\n    <string name=\"ext_update_all\">Kemas kini semua</string>\n    <string name=\"channel_app_updates\">Kemas kini aplikasi</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Hapus cache bab apabila membuka aplikasi</string>\n    <string name=\"database_clean\">Tiada apa untuk dibersihkan</string>\n    <string name=\"clear_database_source_item_count\">%1$d entri bukan pustaka dalam pangkalan data</string>\n    <string name=\"extension_api_error\">Gagal mendapatkan sambungan yang ada</string>\n    <string name=\"privacy_policy\">Dasar privasi</string>\n    <string name=\"pref_update_only_completely_read\">Langkau entri dengan bab yang belum dibaca</string>\n    <string name=\"library_errors_help\">Untuk bantuan cara menyelesaikan ralat kemas kini pustaka, lihat %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Simpan sebagai arkib CBZ</string>\n    <string name=\"cancelled\">Dibatalkan</string>\n    <string name=\"publishing_finished\">Penerbitan selesai</string>\n    <string name=\"on_hiatus\">Dalam hiatus</string>\n    <string name=\"action_show_manga\">Tunjuk entri</string>\n    <string name=\"action_display_cover_only_grid\">Cuma grid muka hadapan</string>\n    <string name=\"skipped_reason_completed\">Dilangkau kerana siri sudah lengkap</string>\n    <string name=\"pref_update_only_started\">Langkau entri yang mana bacaan belum dimulakan</string>\n    <string name=\"skipped_reason_not_caught_up\">Dilangkau kerana ada bab yang belum dibaca</string>\n    <string name=\"skipped_reason_not_started\">Dilangkau kerana tiada bab yang dibaca</string>\n    <string name=\"pref_landscape_zoom\">Zum secara automatik pada imej lebar</string>\n    <string name=\"pref_navigate_pan\">Panorama imej lebar</string>\n    <string name=\"notification_update_error\">%1$d kemas kini gagal</string>\n    <string name=\"learn_more\">Ketik untuk ketahui selebihnya</string>\n    <string name=\"rotation_reverse_portrait\">Potret terbalik</string>\n    <string name=\"action_move_to_top_all_for_series\">Alih siri ke atas</string>\n    <string name=\"disabled_nav\">Dinyahkan</string>\n    <string name=\"error_saving_picture\">Ralat menyimpan gambar</string>\n    <string name=\"empty_backup_error\">Tiada entri pustaka untuk disandarkan</string>\n    <string name=\"update_check_open\">Buka di GitHub</string>\n    <string name=\"pref_clear_webview_data\">Hapus data WebView</string>\n    <string name=\"webview_data_deleted\">Data WebView dihapuskan</string>\n    <string name=\"action_close\">Tutup</string>\n    <string name=\"source_filter_empty_screen\">Tiada sumber dipasang ditemui</string>\n    <string name=\"source_empty_screen\">Tiada sumber ditemui</string>\n    <string name=\"action_sort_unread_count\">Bilangan belum dibaca</string>\n    <string name=\"action_sort_last_manga_update\">Semakan kemas kini terakhir</string>\n    <string name=\"split_tall_images_summary\">Meningkatkan prestasi pembaca</string>\n    <string name=\"download_notifier_split_page_not_found\">Muka surat %d tidak dijumpai ketika memisah</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Lokasi fail muka surat %d tidak ditemui</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Menetapkan semula mod bacaan dan orientasi semua siri</string>\n    <string name=\"pref_reset_viewer_flags_success\">Tetapan pembaca diset semula</string>\n    <string name=\"pref_reset_viewer_flags\">Set semula tetapan pembaca setiap siri</string>\n    <string name=\"empty_screen\">Hmm, ini agak menjanggalkan</string>\n    <string name=\"pref_reset_viewer_flags_error\">Tidak dapat set semula tetapan pembaca</string>\n    <string name=\"ext_info_version\">Versi</string>\n    <string name=\"ext_info_age_rating\">Peringkat umur</string>\n    <string name=\"ext_info_language\">Bahasa</string>\n    <string name=\"wish_list\">Senarai Hajat</string>\n    <string name=\"complete_list\">Senarai Selesai</string>\n    <string name=\"on_hold_list\">Senarai Tangguh</string>\n    <string name=\"unfinished_list\">Senarai Belum Selesai</string>\n    <string name=\"reading_list\">Senarai Bacaan</string>\n    <string name=\"network_not_metered\">Hanya pada rangkaian tidak bermeter</string>\n    <string name=\"cant_open_last_read_chapter\">Tidak dapat membuka bab yang terakhir dibaca</string>\n    <string name=\"custom_cover\">Muka hadapan tersuai</string>\n    <string name=\"not_installed\">Tidak dipasang</string>\n    <string name=\"pref_app_language\">Bahasa aplikasi</string>\n    <string name=\"theme_lavender\">Lavender</string>\n    <string name=\"description_placeholder\">Tiada deskripsi</string>\n    <string name=\"delete_category_confirmation\">Adakah anda ingin padam kategori \\\"%s\\\"?</string>\n    <string name=\"internal_error\">RalatDalam: semak log kerosakan untuk maklumat lanjut</string>\n    <string name=\"delete_category\">Padam kategori</string>\n    <string name=\"pref_user_agent_string\">Untaian ejen pengguna lalai</string>\n    <string name=\"pref_reset_user_agent_string\">Set semula untaian ejen pengguna lalai</string>\n    <string name=\"action_remove_everything\">Buang semuanya</string>\n    <string name=\"appwidget_unavailable_locked\">Widget tidak tersedia apabila kekunci aplikasi digunakan</string>\n    <string name=\"appwidget_updates_description\">Lihat kemas kini entri pustaka terkini anda</string>\n    <string name=\"update_already_running\">Kemas kini sedang berjalan</string>\n    <string name=\"error_user_agent_string_blank\">Untaian ejen pengguna tidak boleh kosong</string>\n    <string name=\"auto_download_while_reading\">Muat turun automatik semasa membaca</string>\n    <string name=\"theme_tidalwave\">Tidal Wave</string>\n    <string name=\"download_ahead\">Muat turun maju</string>\n    <string name=\"download_ahead_info\">Hanya berguna sekiranya bab sekarang + seterusnya telah dimuat turun.</string>\n    <string name=\"are_you_sure\">Adakah anda pasti?</string>\n    <string name=\"multi_lang\">Pelbagai</string>\n    <string name=\"updates_last_update_info\">Terakhir pustaka dikemas kini: %s</string>\n    <string name=\"remove_manga\">Anda akan membuang \\\"%s\\\" ini daripada pustaka anda</string>\n    <string name=\"popular\">Popular</string>\n    <string name=\"missing_storage_permission\">Kebenaran storan tidak diberikan</string>\n    <string name=\"skipped_reason_not_always_update\">Dilangkau kerana siri tidak memerlukan kemas kini</string>\n    <string name=\"action_search_hint\">Cari…</string>\n    <string name=\"pref_appearance_summary\">Tema, tarikh &amp; format masa</string>\n    <string name=\"pref_library_summary\">Kategori, Kemas kini keseluruhan, leret bab</string>\n    <string name=\"pref_reader_summary\">Mod membaca, paparan, navigasi</string>\n    <string name=\"pref_downloads_summary\">Muat turun automatik, muat turun maju</string>\n    <string name=\"pref_tracking_summary\">Menyelaras kemajuan satu hala, pertingkat menyelaras</string>\n    <string name=\"pref_backup_summary\">Manual &amp; sandaran automatik</string>\n    <string name=\"pref_advanced_summary\">Kumpulan log kerosakan, pengoptimuman bateri</string>\n    <string name=\"pref_security_summary\">Kekunci aplikasi, skrin keselamatan</string>\n    <string name=\"crash_screen_title\">Aduhai!</string>\n    <string name=\"crash_screen_restart_application\">Mulakan semula aplikasi</string>\n    <string name=\"pref_browse_summary\">Sumber, sambungan, carian keseluruhan</string>\n    <string name=\"crash_screen_description\">%s mengalami ralat tidak dijangka. Kami mencadangkan anda untuk kongsi log kerosakan pada Discord kami di saluran bantuan.</string>\n    <string name=\"unknown_title\">Tajuk tidak diketahui</string>\n    <string name=\"invalid_location\">Lokasi tidak sah: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Rentetan ejen pengguna tidak sah</string>\n    <string name=\"updates_last_update_info_just_now\">Sebentar tadi</string>\n    <string name=\"action_open_random_manga\">Buka entri rawak</string>\n    <string name=\"information_no_entries_found\">Tiada entri dijumpai di kategori ini</string>\n    <string name=\"download_notifier_cache_renewal\">Menyemak muat turun</string>\n    <string name=\"fdroid_warning\">Binaan F-Droid tidak disokong secara rasmi.\n\\nKetik untuk mengetahui lebih lanjut.</string>\n    <string name=\"action_display_show_continue_reading_button\">Butang sambung membaca</string>\n    <string name=\"pref_invalidate_download_cache\">Membatalkan indeks muat turun</string>\n    <string name=\"track_remove_date_conf_title\">Buang tarikh?</string>\n    <string name=\"track_remove_start_date_conf_text\">Ini akan membuang tarikh mula yang dipilih oleh anda sebelum ini dari %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Ini akan membuang tarikh selesai yang dipilih oleh anda sebelum ini dari %s</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Memaksa aplikasi untuk semak semula bab dimuat turun</string>\n    <string name=\"label_local\">lokal</string>\n    <string name=\"label_downloaded\">Dimuat turun</string>\n    <string name=\"label_titles_in_global_update\">Dalam kemas kini keseluruhan</string>\n    <string name=\"label_total_chapters\">Jumlah</string>\n    <string name=\"label_read_chapters\">Dibaca</string>\n    <string name=\"label_tracked_titles\">Entri dijejaki</string>\n    <string name=\"label_mean_score\">Skor purata</string>\n    <string name=\"label_used\">Digunakan</string>\n    <string name=\"label_stats\">Statistik</string>\n    <string name=\"label_started\">Dimulakan</string>\n    <string name=\"label_overview_section\">Keseluruhan</string>\n    <string name=\"label_read_duration\">Jangka bacaan</string>\n    <string name=\"label_titles_section\">Entri</string>\n    <string name=\"label_tracker_section\">Penjejak</string>\n    <string name=\"label_completed_titles\">Entri yang sudah selesai</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"day_short\">%dh</string>\n    <string name=\"hour_short\">%dj</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_not_now\">Bukan sekarang</string>\n    <string name=\"information_no_manga_category\">Kategori kosong</string>\n    <string name=\"pref_library_update_show_tab_badge\">Tunjuk bilangan belum dibaca pada ikon Kemas kini</string>\n    <string name=\"pref_skip_dupe_chapters\">Langkau bab pendua</string>\n    <string name=\"enhanced_services_not_installed\">Tersedia tetapi sumber tidak dipasang: %s</string>\n    <string name=\"copied_to_clipboard_plain\">Disalin ke papan keratan</string>\n    <string name=\"track_error\">%1$s ralat: %2$s</string>\n    <string name=\"confirm_add_duplicate_manga\">Entri di dalam pustaka anda mempunyai nama yang sama.\n\\n\n\\nAdakah anda ingin meneruskan?</string>\n    <string name=\"information_required_plain\">*diperlukan</string>\n    <string name=\"pref_hide_in_library_items\">Sembunyikan entri yang sudah ada di dalam pustaka</string>\n    <string name=\"action_copy_to_clipboard\">Salin ke papan keratan</string>\n    <string name=\"action_update_category\">Kemas kini kategori</string>\n    <string name=\"split_tall_images\">Memisah imej yang tinggi</string>\n    <string name=\"overlay_header\">Tindanan</string>\n    <string name=\"pref_page_rotate_invert\">Terbalikkan orientasi muka surat lebar yang diputarkan</string>\n    <string name=\"pref_page_rotate\">Putar muka surat lebar agar muat</string>\n    <string name=\"pref_debug_info\">Maklumat nyahpepijat</string>\n    <string name=\"pref_chapter_swipe_end\">Tindakan leret ke kanan</string>\n    <string name=\"pref_double_tap_zoom\">Ketik dua kali untuk zum</string>\n    <string name=\"pref_chapter_swipe_start\">Tindakan leret ke kiri</string>\n    <string name=\"action_set_interval\">Tetapkan jarak masa</string>\n    <string name=\"action_filter_interval_custom\">Kekerapan kemaskini tersuai</string>\n    <string name=\"action_sort_next_updated\">Kemas kini seterusnya dijangka</string>\n    <string name=\"manga_display_modified_interval_title\">Tetapkan untuk kemas kini setiap</string>\n    <string name=\"skipped_reason_not_in_release_period\">Dilangkau kerana tiada keluaran yang dijangkakan hari ini</string>\n    <string name=\"intervals_header\">Jarak masa</string>\n    <string name=\"pref_update_only_in_release_period\">Jangka masa keluaran seterusnya</string>\n    <string name=\"manga_display_interval_title\">Anggaran setiap</string>\n    <string name=\"track_delete_title\">Buang penjejakan %s?</string>\n    <string name=\"track_delete_text\">Ini akan membuang penjejakan secara lokal.</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_remote_text\">Juga buang daripada %s</string>\n    <string name=\"delete_downloaded\">Padam dimuat turun</string>\n    <string name=\"has_results\">Mempunyai hasil</string>\n    <string name=\"create_backup_file_error\">Tidak boleh menghasilkan fail sandaran</string>\n    <string name=\"exception_unknown_host\">Tidak dapat mencapai %s</string>\n    <string name=\"syncing_library\">Menyelaraskan pustaka</string>\n    <string name=\"library_sync_complete\">Pustaka selesai diselaraskan</string>\n    <string name=\"exception_offline\">Tiada sambungan Internet</string>\n    <string name=\"track_activity_name\">Log masuk penjejak</string>\n    <string name=\"download_cache_invalidated\">Indeks muat turun tidak sah</string>\n    <string name=\"information_cloudflare_help\">Ketik di sini untuk bantuan berkenaan Cloudflare</string>\n    <string name=\"exception_http\">HTTP %d, semak laman web dalam WebView</string>\n    <string name=\"unlock_app_title\">Buka kunci %s</string>\n    <string name=\"pref_library_update_smart_update\">Kemaskini pintar</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Gerak siri ke bawah</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"action_apply\">Gunakan</string>\n    <string name=\"action_revert_to_default\">Kembali ke lalai</string>\n    <string name=\"not_selected\">Tidak dipilih</string>\n    <string name=\"action_menu_overflow_description\">Lain-lain pilihan</string>\n    <string name=\"selected\">Dipilih</string>\n    <string name=\"onboarding_storage_action_select\">Pilih folder</string>\n    <string name=\"pref_onboarding_guide\">Panduan pertama penggunaan</string>\n    <string name=\"onboarding_heading\">Selamat datang!</string>\n    <string name=\"onboarding_description\">Mari menetapkan sesuai terdahulu. Anda juga boleh menukar perkara ini di tetapan kemudian.</string>\n    <string name=\"onboarding_action_next\">Seterusnya</string>\n    <string name=\"onboarding_action_finish\">Mari memulakan</string>\n    <string name=\"onboarding_action_skip\">Langkau</string>\n    <string name=\"onboarding_storage_info\">Pilih folder dimana %1$s akan simpan bab yang dibuat turun, sandaran, dan banyak lagi.\n\\n\n\\nFolder khas sangat digalakkan.\n\\n\n\\nFolder yang dipilih: %2$s</string>\n    <string name=\"onboarding_storage_selection_required\">Folder mestilah dipilih</string>\n    <string name=\"pref_relative_format\">Cap masa relatif</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s bukannya %2$s\\\"</string>\n    <string name=\"onboarding_guides_new_user\">Baru ke %s? kami cadang lihat panduan permulaan.</string>\n    <string name=\"invalid_backup_file_error\">Ralat penuh:</string>\n    <string name=\"private_settings\">Termasuk tetapan sulit (cth., token log masuk penjejak)</string>\n    <string name=\"available_disk_space_info\">Tersedia:%1$s/Jumlah:%2$s</string>\n    <string name=\"manga_interval_expected_update\">Bab baharu dijangkakan akan keluar sekitar %1$s, semakan setiap %2$s.</string>\n    <string name=\"file_null_uri_error\">Tiada fail dipilih</string>\n    <string name=\"onboarding_permission_install_apps\">Pasang kebenaran aplikasi</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Penggunaan bateri latar belakang</string>\n    <string name=\"action_add_repo\">Tambah repositori</string>\n    <string name=\"action_delete_repo\">Padam repositori</string>\n    <string name=\"invalid_repo_name\">Repositori URL tidak sah</string>\n    <string name=\"action_create\">Buat</string>\n    <string name=\"pref_storage_usage\">Penggunaan storan</string>\n    <string name=\"manga_interval_custom_amount\">Kekerapan kemas kini tersuai:</string>\n    <string name=\"no_scanlators_found\">Tiada scanlators dijumpai</string>\n    <string name=\"onboarding_storage_help_info\">Mengemaskini daripada versi lama dan tidak pasti yang mana nak dipilih? Rujuk pada panduan storan untuk maklumat lanjut.</string>\n    <string name=\"onboarding_permission_notifications\">Kebenaran pemberitahuan</string>\n    <string name=\"onboarding_guides_returning_user\">Memasang semula %s?</string>\n    <string name=\"error_repo_exists\">Repositori ini sudah wujud!</string>\n    <string name=\"no_location_set\">Tiada lokasi storan ditetapkan</string>\n    <string name=\"relative_time_span_never\">Tidak pernah</string>\n    <string name=\"onboarding_storage_help_action\">Panduan storan</string>\n    <string name=\"onboarding_permission_install_apps_description\">Untuk pasang sumber sambungan.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Elak gangguan pada kemas kini yang panjang, muat turun, dan pemulihan sandaran.</string>\n    <string name=\"onboarding_permission_action_grant\">Benarkan</string>\n    <string name=\"onboarding_permission_notifications_description\">Dapatkan pemberitahuan untuk kemas kini pustaka dan banyak lagi.</string>\n    <string name=\"ext_permission_install_apps_warning\">Kebenaran diperlukan untuk pasang sambungan. Ketik di sini untuk benarkan.</string>\n    <string name=\"label_extension_repos\">repositori sambungan</string>\n    <string name=\"label_add_repo_input\">URL repositori</string>\n    <string name=\"delete_repo_confirmation\">Adakah anda bersetuju untuk padam repositori \\\"%s\\\"?</string>\n    <string name=\"action_sort_tracker_score\">Skor penjejak</string>\n    <string name=\"ext_revoke_trust\">Batalkan sambungan dipercayakan yang tidak diketahui</string>\n    <string name=\"information_empty_repos\">Anda tidak menetapkan repositori.</string>\n    <string name=\"action_add_repo_message\">Tambah repositori tambahan pada Mihon. Ini mestilah URL yang berakhir dengan \\\"index.min.json\\\".</string>\n    <string name=\"action_open_repo\">Buka sumber repositori</string>\n    <string name=\"manga_interval_expected_update_soon\">Tidak lama lagi</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"exclude_scanlators\">Kecualikan scanlators</string>\n    <string name=\"action_bar_up_description\">Navigasi ke atas</string>\n    <string name=\"pref_storage_location_info\">Digunakan untuk sandaran automatik, muat turun bab, dan sumber lokal.</string>\n    <string name=\"pref_storage_location\">Lokasi storan</string>\n    <string name=\"app_settings\">Tetapan aplikasi</string>\n    <string name=\"source_settings\">Tetapan sumber</string>\n    <string name=\"label_data_storage\">Data dan storan</string>\n    <string name=\"pref_flash_page\">Kilat pada perubahan muka surat</string>\n    <string name=\"pref_flash_page_summ\">Mengurangkan kesan \\'ghosting\\' pada skrin e-ink</string>\n    <string name=\"last_auto_backup_info\">Sandaran automatik terakhir:%s</string>\n    <string name=\"notification_updating_progress\">Mengemaskini pustaka… (%s)</string>\n    <string name=\"action_replace_repo\">Ganti</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/my/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"on\">ဖွင့်သည်။</string>\n    <string name=\"off\">ပိတ်သည်။</string>\n    <string name=\"selected\">ရွေးချယ်ထားသည်။</string>\n    <string name=\"not_selected\">မရွေးချယ်ထားပါ။</string>\n    <string name=\"action_menu_overflow_description\">ရွေးချယ်စရာများ</string>\n    <string name=\"action_bar_up_description\">အပေါ်သို့</string>\n    <string name=\"name\">အမည်</string>\n    <string name=\"categories\">အမျိုးအစားများ</string>\n    <string name=\"manga\">စာအုပ်စင်</string>\n    <string name=\"chapters\">အပိုင်းများ</string>\n    <string name=\"track\">ခြေရာခံ</string>\n    <string name=\"scanlator\">ဘာသာပြန်သူ</string>\n    <string name=\"label_more\">ပိုမို၍</string>\n    <string name=\"label_download_queue\">ဒေါင်းလုဒ် စာရင်း</string>\n    <string name=\"label_library\">စာအုပ်စင်</string>\n    <string name=\"label_recent_updates\">အပ်ဒိတ်များ</string>\n    <string name=\"label_recent_manga\">မှတ်တမ်းများ</string>\n    <string name=\"label_sources\">ရင်းမြစ်များ</string>\n    <string name=\"label_data_storage\">ဒေတာနှင့် သိမ်းဆည်းမှု</string>\n    <string name=\"label_stats\">စာရင်းအင်းများ</string>\n    <string name=\"label_migration\">ပေါင်းစပ်မှု</string>\n    <string name=\"label_extension_info\">ချိတ်ဆက်မှု အချက်အလက်</string>\n    <string name=\"label_help\">အကူအညီ</string>\n    <string name=\"label_default\">ပုံသေ</string>\n    <string name=\"label_warning\">သတိပေးချက်</string>\n    <string name=\"label_started\">စတင်သည်။</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_downloaded\">ဒေါင်းလုဒ်လုပ်ထားသည်။</string>\n    <string name=\"delete_downloaded\">ဒေါင်းလုဒ်များ ဖျက်မည်။</string>\n    <string name=\"history\">မှတ်တမ်း</string>\n    <string name=\"label_settings\">ဆက်တင်များ</string>\n    <string name=\"label_upcoming\">နောက်ဆက်တွဲ</string>\n    <string name=\"label_extensions\">ချိတ်ဆက်မှုများ</string>\n    <string name=\"label_backup\">အရံသိမ်းဆည်းခြင်းနှင့် ပြန်လည်ရယူခြင်း</string>\n    <string name=\"unlock_app_title\">အက်ပ်ကို ဖွင့်ရန်</string>\n    <string name=\"confirm_lock_change\">ဖြည့်ထားသည်ကို အတည်ပြုပါ</string>\n    <string name=\"action_settings\">ဆက်တင်များ</string>\n    <string name=\"action_menu\">မီနူး</string>\n    <string name=\"action_filter\">စစ်ထုတ်မှု</string>\n    <string name=\"action_set_interval\">အချိန်ကြားကို သတ်မှတ်ပါ</string>\n    <string name=\"action_filter_bookmarked\">မှတ်သားထားသည်။</string>\n    <string name=\"action_sort_last_read\">နောက်ဆုံး ဖတ်ခဲ့သည်အားဖြင့် စီပါ</string>\n    <string name=\"action_sort_last_manga_update\">နောက်ဆုံး အပ်ဒိတ်အားဖြင့် စီပါ</string>\n    <string name=\"action_edit\">တည်းဖြတ်ပါ</string>\n    <string name=\"action_start\">စတင်ပါ</string>\n    <string name=\"action_display_show_continue_reading_button\">ဆက်လက်ဖတ်ရှုရန် ခလုတ်ပြသရန်</string>\n    <string name=\"action_disable\">မလုပ်ဆောင်ပါ</string>\n    <string name=\"action_pin\">ပင်ထောက်မည်။</string>\n    <string name=\"action_unpin\">ပင်မထောက်တော့ပါ။</string>\n    <string name=\"onboarding_action_finish\">စတင်မည်။</string>\n    <string name=\"onboarding_storage_help_action\">သိုလှောင်မှုလမ်းညွှန်</string>\n    <string name=\"onboarding_permission_action_grant\">ခွင့်ပြုခြင်း</string>\n    <string name=\"onboarding_guides_new_user\">%s ကို ခုမှ စသုံးသူးလား? စတင်အသုံးပြုနည်းလမ်းညွှန်ကို ကြည့်ရှုရန် အကြံပြုပါတယ်။</string>\n    <string name=\"onboarding_guides_returning_user\">ပြန်လည်အသုံးပြုသူများအတွက်လမ်းညွှန်</string>\n    <string name=\"pref_category_general\">ယေဘူယျ</string>\n    <string name=\"pref_category_appearance\">ပုံစံ</string>\n    <string name=\"pref_category_library\">စာကြည့်တိုက်</string>\n    <string name=\"pref_category_reader\">စာဖတ်သူ</string>\n    <string name=\"pref_category_downloads\">ဒေါင်းလုဒ်များ</string>\n    <string name=\"pref_category_tracking\">လမ်းညွှန်စက်များ</string>\n    <string name=\"pref_category_advanced\">မြင့်မားသော</string>\n    <string name=\"pref_category_about\">အကြောင်း</string>\n    <string name=\"pref_appearance_summary\">ပုံစံအနှစ်ချုပ်</string>\n    <string name=\"pref_library_summary\">စာကြည့်တိုက်အနှစ်ချုပ်</string>\n    <string name=\"pref_tracking_summary\">လမ်းညွှန်စက်များအနှစ်ချုပ်</string>\n    <string name=\"theme_dark\">အမှောင်</string>\n    <string name=\"action_filter_empty\">အလွတ် စစ်ထုတ်မှု</string>\n    <string name=\"action_filter_tracked\">ခြေရာခံထားမှု စစ်ထုတ်မှု</string>\n    <string name=\"action_filter_unread\">မဖတ်ရသေးသော စစ်ထုတ်မှု</string>\n    <string name=\"action_filter_interval_custom\">စိတ်ကြိုက် အချိန်ကြား စစ်ထုတ်မှု</string>\n    <string name=\"action_sort_alpha\">အက္ခရာစဉ်အားဖြင့် စီပါ</string>\n    <string name=\"action_sort_count\">ရေတွက်မှုအားဖြင့် စီပါ</string>\n    <string name=\"action_sort_next_updated\">နောက်တစ်ခု အပ်ဒိတ်မည်အားဖြင့် စီပါ</string>\n    <string name=\"action_sort_latest_chapter\">နောက်ဆုံး အပိုင်းအားဖြင့် စီပါ</string>\n    <string name=\"action_sort_total\">စုစုပေါင်းအားဖြင့် စီပါ</string>\n    <string name=\"action_sort_unread_count\">မဖတ်ရသေးသော အရေအတွက်အားဖြင့် စီပါ</string>\n    <string name=\"action_sort_chapter_fetch_date\">အပိုင်းရရှိသည့် ရက်စွဲအားဖြင့် စီပါ</string>\n    <string name=\"action_sort_date_added\">ထည့်သွင်းသည့် ရက်စွဲအားဖြင့် စီပါ</string>\n    <string name=\"action_sort_tracker_score\">ခြေရာခံ အမှတ်အားဖြင့် စီပါ</string>\n    <string name=\"action_sort_random\">ကျပန်းစီမှု</string>\n    <string name=\"action_search\">ရှာဖွေပါ</string>\n    <string name=\"action_search_hint\">ရှာဖွေလိုသည်ကို ထည့်ပါ</string>\n    <string name=\"action_search_settings\">ရှာဖွေမှု ဆက်တင်များ</string>\n    <string name=\"action_select_all\">အားလုံးကို ရွေးချယ်ပါ</string>\n    <string name=\"action_select_inverse\">ရွေးချယ်မှု ပြောင်းပြန်ပါ</string>\n    <string name=\"action_mark_as_read\">ဖတ်ပြီးဟု မှတ်သားပါ</string>\n    <string name=\"action_global_search\">ကမ္ဘာလုံးဆိုင်ရာ ရှာဖွေမှု</string>\n    <string name=\"action_mark_as_unread\">မဖတ်ရသေးဟု မှတ်သားပါ</string>\n    <string name=\"action_mark_previous_as_read\">ယခင် အပိုင်းများကို ဖတ်ပြီးဟု မှတ်သားပါ</string>\n    <string name=\"action_download\">ဒေါင်းလုဒ်လုပ်ပါ</string>\n    <string name=\"action_update_library\">စာအုပ်စင် အပ်ဒိတ်လုပ်ပါ</string>\n    <string name=\"action_enable_all\">အားလုံးကို ဖွင့်ပါ</string>\n    <string name=\"action_disable_all\">အားလုံးကို ပိတ်ပါ</string>\n    <string name=\"action_add\">ထည့်ပါ</string>\n    <string name=\"action_update_category\">အမျိုးအစားကို အပ်ဒိတ်လုပ်ပါ</string>\n    <string name=\"action_open_random_manga\">ကျပန်း စာအုပ်တစ်အုပ် ဖွင့်ပါ</string>\n    <string name=\"action_add_category\">အမျိုးအစား ထည့်ပါ</string>\n    <string name=\"action_edit_categories\">အမျိုးအစားများ တည်းဖြတ်ပါ</string>\n    <string name=\"action_bookmark\">စာအမှတ်အထား ထည့်ပါ</string>\n    <string name=\"action_remove_bookmark\">စာအမှတ်အထား ဖယ်ရှားပါ</string>\n    <string name=\"action_delete\">ဖျက်ပါ</string>\n    <string name=\"action_rename_category\">အမျိုးအစား အမည်ပြောင်းပါ</string>\n    <string name=\"action_move_category\">အမျိုးအစား ရွှေ့ပါ</string>\n    <string name=\"delete_category_confirmation\">အမျိုးအစား ဖျက်မည်ဟု အတည်ပြုပါ</string>\n    <string name=\"delete_category\">အမျိုးအစား ဖျက်ပါ</string>\n    <string name=\"action_pause\">ရပ်လိုက်ပါ</string>\n    <string name=\"action_edit_cover\">အဖုံးကို တည်းဖြတ်ပါ</string>\n    <string name=\"action_view_chapters\">အပိုင်းများကို ကြည့်ရှုပါ</string>\n    <string name=\"action_previous_chapter\">ယခင် အပိုင်း</string>\n    <string name=\"action_next_chapter\">နောက်ထပ် အပိုင်း</string>\n    <string name=\"action_retry\">ထပ်ကြိုးစားပါ</string>\n    <string name=\"action_display_language_badge\">ဘာသာစကားဘေ့ခ််ပြသမည်</string>\n    <string name=\"action_display_show_tabs\">ထပ်အလုံးပြသရန်</string>\n    <string name=\"action_display_show_number_of_items\">ပစ္စည်းအရေအတွက်ပြသရန်</string>\n    <string name=\"action_apply\">လုပ်ဆောင်မည်။</string>\n    <string name=\"action_cancel\">မလုပ်ဆောင်ပါ</string>\n    <string name=\"action_ok\">အိုကေ</string>\n    <string name=\"action_remove\">ဖယ်ရှားပါ</string>\n    <string name=\"action_remove_everything\">အားလုံးကို ဖယ်ရှားပါ</string>\n    <string name=\"action_resume\">ပြန်စပါ</string>\n    <string name=\"action_open_in_browser\">ဘရောက်ဇာတွင် ဖွင့်ပါ</string>\n    <string name=\"action_show_manga\">စာအုပ်စင်ပြပါ</string>\n    <string name=\"action_copy_to_clipboard\">ကလစ်ပို့ဒ်သို့ မိတ္တူပြုပါ</string>\n    <string name=\"action_copy_link\">လင့် မိတ္တူပြုပါ</string>\n    <string name=\"action_open_in_web_view\">ဝဘ်အမြင်တွင်ဖွင့်ရန်</string>\n    <string name=\"action_migrate\">အချက်အလက်ပြောင်းရွှေ့မည်</string>\n    <string name=\"action_display_mode\">ပြသမှု ပုံစံ</string>\n    <string name=\"action_display\">ပြသမည်</string>\n    <string name=\"action_display_grid\">ဂရစ်အဖြစ်ပြသမည်</string>\n    <string name=\"action_display_comfortable_grid\">သက်တောင့်သက်သာရှိသောဂရစ်အဖြစ်ပြသမည်</string>\n    <string name=\"action_display_list\">စာရင်းအဖြစ်ပြသမည်</string>\n    <string name=\"action_display_cover_only_grid\">အကဲဖြတ်စာမျက်နှာသာပြသသောဂရစ်</string>\n    <string name=\"action_display_download_badge\">ဒေါင်းလုဒ်ဘေ့ခ််ပြသမည်</string>\n    <string name=\"action_cancel_all\">အားလုံးဖျက်မည်</string>\n    <string name=\"cancel_all_for_series\">ဤအကြောင်းအရာအားလုံးကိုဖျက်မည်</string>\n    <string name=\"action_sort\">စီမည်။</string>\n    <string name=\"action_display_local_badge\">ဒေသခံဘေ့ခ််ပြသမည်</string>\n    <string name=\"action_order_by_upload_date\">ရက် အလိုက်</string>\n    <string name=\"action_order_by_chapter_number\">အခန်းနံပါတ် အလိုက်</string>\n    <string name=\"action_newest\">အသစ်ဆုံး</string>\n    <string name=\"action_oldest\">အဟောင်းဆုံး</string>\n    <string name=\"action_asc\">Ascending</string>\n    <string name=\"action_desc\">Descending</string>\n    <string name=\"action_move_to_bottom\">အောက်ဆုံးသို့ရွှေ့မည်</string>\n    <string name=\"action_move_to_bottom_all_for_series\">ဤအကြောင်းအရာအားလုံးကိုအောက်ဆုံးသို့ရွှေ့မည်</string>\n    <string name=\"action_install\">ထည့်သွင်းရန်</string>\n    <string name=\"action_share\">မျှဝေမည်</string>\n    <string name=\"action_move_to_top\">အပေါ်ဆုံးသို့ရွှေ့မည်</string>\n    <string name=\"action_move_to_top_all_for_series\">စီးရီးများကို အပေါ်သို့သို့ရွှေ့မည်</string>\n    <string name=\"action_save\">သိမ်းမည်</string>\n    <string name=\"action_reset\">ပြန်လည်သတ်မှတ်မည်</string>\n    <string name=\"action_revert_to_default\">ပုံမှန်ပြန်အလွဲမပြင်</string>\n    <string name=\"action_undo\">မလုပ်တော့</string>\n    <string name=\"action_close\">ပိတ်မည်</string>\n    <string name=\"action_webview_forward\">ရှေ့သို့</string>\n    <string name=\"action_webview_refresh\">Refresh</string>\n    <string name=\"action_open_log\">မှတ်တမ်းဖွင့်မည်</string>\n    <string name=\"action_show_errors\">အသေးစိတ် ကြည့်ရန် နှိပ်ပါ</string>\n    <string name=\"action_restore\">ပြန်ထားမည်</string>\n    <string name=\"action_webview_back\">နောက်သို့</string>\n    <string name=\"action_start_downloading_now\">ခုပဲ ဒေါင်းလုဒ်လုပ်မည်</string>\n    <string name=\"action_not_now\">ခုမဟုတ်ပါ</string>\n    <string name=\"action_add_anyway\">ဘာဖြစ်ဖြစ် ထည့်မည်</string>\n    <string name=\"action_migrate_duplicate\">ထပ်မံပြောင်းရွှေ့ရန်</string>\n    <string name=\"loading\">ခဏစောင့်ပါ။ …</string>\n    <string name=\"internal_error\">InternalError: ပြဿနာဖြေရှင်းရန် အတွက် ခရပ်စ်လော့ဂ်များကို စစ်ဆေးပါ။</string>\n    <string name=\"app_not_available\">အက်ပလီကေးရှင်းရရှိနိုင်ခြင်းမရှိပါ</string>\n    <string name=\"onboarding_heading\">ကြိုဆိုပါတယ်။</string>\n    <string name=\"onboarding_description\">လိုအပ်တာတွေကို အရင်ဆုံး လုပ်ဆောင်ပါ။ နောက်မှ ဆက်တင်များကို ပြန်လည်သတ်မှတ်လို့ရပါတယ်။</string>\n    <string name=\"onboarding_action_next\">နောက်တစ်ဆင့်</string>\n    <string name=\"onboarding_action_skip\">ကျော်မည်။</string>\n    <string name=\"pref_onboarding_guide\">လမ်းညွှန်အကြောင်း</string>\n    <string name=\"onboarding_storage_info\">အခန်းဒေါင်းလုဒ်များ၊ ဘက်အပ်များနှင့် အခြားသော ဖိုင်များကို %1$s သိမ်းဆည်းမည့် ဖိုလ်ဒါကို ရွေးချယ်ပါ။\\n\\nသီးခြားဖိုင်တစ်ခု သတ်မှတ်ရန် အကြံပြုပါသည်။\\n\\nရွေးချယ်ထားသော ဖိုင် - %2$s</string>\n    <string name=\"onboarding_storage_action_select\">ဖိုင် ရွေးချယ်ပါ</string>\n    <string name=\"onboarding_permission_install_apps\">အက်ပလီကေးရှင်းများတပ်ဆင်ခွင့်</string>\n    <string name=\"onboarding_permission_install_apps_description\">အက်ပလီကေးရှင်းတပ်ဆင်ရန်ခွင့်ပြုပါ</string>\n    <string name=\"onboarding_storage_selection_required\">ဖိုင်တစ်ခုကို ရွေးချယ်ရပါမည်</string>\n    <string name=\"onboarding_permission_notifications\">သတိပေးချက်များခွင့်ပြုမည်</string>\n    <string name=\"onboarding_storage_help_info\">ဗားရှင်းဟောင်းမှ တင်မြှင့်မှု ပြုလုပ်နေပြီး ရွေးချယ်ရန် သေချာမသိပါက သိုလှောင်မှုလမ်းညွှန်ကို ဖတ်ပါ။</string>\n    <string name=\"onboarding_permission_notifications_description\">စာအုပ်စင် အပ်ဒေ့များနှင့် အခြားသော အကြောင်းအရာများအတွက် အကြောင်းကြားမှုများ ရယူပါ။</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">ဘက်ထရီအနေအထားများကိုသွင်းခြင်း</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">ဘက်ထရီစွမ်းအင်ကြီးလွန်ခြင်းများအားလုံးဖော်ပြပါ</string>\n    <string name=\"onboarding_permission_crashlytics\">အမှားဖြစ်သောအချက်အလက်များမှတ်တမ်းတင်ခြင်း</string>\n    <string name=\"onboarding_permission_crashlytics_description\">အမှားအချက်များအတွက်ပါဝင်ရန်</string>\n    <string name=\"onboarding_permission_analytics\">စွမ်းဆောင်မှုများစာရင်း</string>\n    <string name=\"onboarding_permission_analytics_description\">မှတ်တမ်းများနှင့်ယခုနှင့်အတူ စွမ်းဆောင်မှုစစ်ဆေးမှု</string>\n    <string name=\"pref_reader_summary\">စာဖတ်သူအနှစ်ချုပ်</string>\n    <string name=\"pref_downloads_summary\">ဒေါင်းလုဒ်များအနှစ်ချုပ်</string>\n    <string name=\"pref_browse_summary\">လမ်းညွှန်ရှာဖွေရေးအနှစ်ချုပ်</string>\n    <string name=\"pref_backup_summary\">အပေါ်မှာလမ်းညွှန်မှတ်သား</string>\n    <string name=\"pref_security_summary\">လုံခြုံရေးအနှစ်ချုပ်</string>\n    <string name=\"pref_advanced_summary\">မြင့်မားသောအနှစ်ချုပ်</string>\n    <string name=\"pref_category_theme\">ပုံစံအဆင့်</string>\n    <string name=\"pref_app_theme\">အက်ပလီကေးရှင်းပုံစံ</string>\n    <string name=\"theme_system\">စနစ်ပုံစံ</string>\n    <string name=\"theme_light\">အလင်း</string>\n    <string name=\"pref_date_format\">နေ့ရက် ပုံစံ</string>\n    <string name=\"pref_manage_notifications\">အကြောင်းကြားချက်များကို စီမံခန့်ခွဲရန်</string>\n    <string name=\"pref_app_language\">အက်ပ် ဘာသာစကား</string>\n    <string name=\"pref_category_security\">လုံခြုံရေးနှင့် ကိုယ်ရေးကိုယ်တာ</string>\n    <string name=\"pref_security\">လုံခြုံရေး</string>\n    <string name=\"pref_firebase\">ခွဲခြမ်းစိတ်ဖြာမှုနှင့် ခရပ်စ်လော့ဂ်များ</string>\n    <string name=\"secure_screen\">ကာကွယ်ထားသော စခရင်</string>\n    <string name=\"secure_screen_summary\">လုံခြုံသော စခရင်သည် အက်ပ်များကို ပြောင်းလဲသည့်အခါ အက်ပ်အကြောင်းအရာများကို ဖုံးကွယ်ပေးပြီး စခရင်ရှော့များကို ပိတ်ဆို့ပါမည်။</string>\n    <string name=\"parental_controls_info\">ဒါက တရားမဝင်တဲ့ ဒါမှမဟုတ် မှားယွင်းစွာ သတ်မှတ်ထားတဲ့ တိုးချဲ့ပလပ်အင်တွေက အက်ပ်ထဲမှာ လိင်ပိုင်းဆိုင်ရာ အကြောင်းအရာတွေ ပေါ်လာတာကို တားမရနိုင်ပါဘူး။</string>\n    <string name=\"firebase_summary\">ခရပ်စ်လော့ဂ်များနှင့် ခွဲခြမ်းစိတ်ဖြာမှုဒေတာများကို ပေးပို့ခြင်းဖြင့် ပြဿနာများကို ဖော်ထုတ်ပြီး ပြင်ဆင်နိုင်မည်ဖြစ်ပြီး စွမ်းဆောင်ရည်ကို တိုးတက်စေကာ သုံးစွဲသူများ၏ လိုအပ်ချက်များနှင့် ပိုမိုသက်ဆိုင်သော အနာဂတ် အပ်ဒိတ်များကို ပြုလုပ်နိုင်မည်ဖြစ်သည်။\\\"</string>\n    <string name=\"ext_confirm_remove\">ဖယ်ရှားမည်လား</string>\n    <string name=\"pref_chapter_swipe_start\">ဘယ်ဘက်သို့ ပွတ်ဆွဲ</string>\n    <string name=\"ext_update_all\">အကုန် အပ်ဒိတ်လုပ်မည်။</string>\n    <string name=\"ext_pending\">စောင့်ဆိုင်းဆဲ</string>\n    <string name=\"ext_installed\">ထည့်သွင်းပြီး</string>\n    <string name=\"obsolete_extension_message\">ယခုအခါ ရရှိနိုင်ပါတော့မည်မဟုတ်ပါ။ ၎င်းသည် စနစ်တကျ မလုပ်ဆောင်နိုင်တော့ဘဲ အက်ပ်လီကေးရှင်းတွင် ပြဿနာများ ဖြစ်ပေါ်စေနိုင်ပါသည်။ ဖယ်ရှားပစ်ရန် အကြံပြုအပ်ပါသည်။</string>\n    <string name=\"pref_update_only_in_release_period\">နောက်မည့် အချိန်ကို ခန့်မှန်းခြင်း</string>\n    <string name=\"lock_with_biometrics\">လော့ခ်ဖြည်ရန် လိုအပ်သည်</string>\n    <string name=\"lock_when_idle\">အသုံးမပြုသည့်အခါ သော့ခတ်ရန်</string>\n    <string name=\"lock_always\">ဘာဖြစ်ဖြစ်</string>\n    <string name=\"lock_never\">ဘယ်တော့မှ</string>\n    <string name=\"hide_notification_content\">အကြောင်းကြားချက်များကို ပိတ်ပါ</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) ရင်းမြစ်များ</string>\n    <string name=\"pref_show_nsfw_source\">ရင်းမြစ်များနှင့် တိုးချဲ့မှုများ စာရင်းတွင် ပြသရန်</string>\n    <string name=\"relative_time_today\">ယနေ့</string>\n    <string name=\"update_never\">ပိတ်သည်</string>\n    <string name=\"update_12hour\">၁၂နာရီတိုင်း</string>\n    <string name=\"update_6hour\">၆နာရီတိုင်း</string>\n    <string name=\"update_24hour\">နေ့စဥ်</string>\n    <string name=\"update_48hour\">နှစ်ရက်ခြား</string>\n    <string name=\"update_72hour\">သုံးရက်ခြား</string>\n    <string name=\"update_weekly\">အပတ်စဥ်</string>\n    <string name=\"charging\">အားသွင်းနေစဥ်</string>\n    <string name=\"pref_update_only_completely_read\">မဖတ်ရသေးသော အခန်းများကို ကျော်သွားပါ</string>\n    <string name=\"pref_update_only_non_completed\">ဖတ်ပြီးသား အခန်းများကို ကျော်သွားပါ</string>\n    <string name=\"pref_update_only_started\">မစရသေးသော အခန်းများကို ကျော်သွားပါ</string>\n    <string name=\"connected_to_wifi\">Wi-Fi ဖြင့်သာ</string>\n    <string name=\"pref_library_update_show_tab_badge\">အိုင်ကွန်ပေါ်တွင် မဖတ်ရသေးတဲ့ အရေအတွက်ကို ပြသပါ</string>\n    <string name=\"default_category_summary\">အချိန်တိုင်း မေးပါ။</string>\n    <string name=\"pref_library_update_categories_details\">ဝင်ရောက်ခွင့် ပိတ်ထားသော ကဏ္ဍများရှိ အခန်းများကို ပါဝင်ခွင့်ပြုထားသော ကဏ္ဍများတွင် ပါဝင်နေသည့်တိုင် အပ်ဒိတ်မပြုလုပ်ပါ</string>\n    <string name=\"all\">အားလုံး</string>\n    <string name=\"none\">တစ်ခုမဟုတ်</string>\n    <string name=\"include\">အပါအဝင်: %s</string>\n    <string name=\"exclude\">Exclude: %s</string>\n    <string name=\"pref_chapter_swipe_end\">ညာဘက်သို့ ပွတ်ဆွဲ</string>\n    <string name=\"multi_lang\">အစုံ</string>\n    <string name=\"ext_updates_pending\">လုပ်ဆောင်နေဆဲ</string>\n    <string name=\"ext_update\">အပ်ဒိတ်လုပ်မည်</string>\n    <string name=\"ext_install\">ထည့်သွင်းမည်</string>\n    <string name=\"ext_downloading\">ဒေါင်းလုပ် လုပ်နေသည်</string>\n    <string name=\"ext_installing\">ထည့်သွင်းနေသည်</string>\n    <string name=\"ext_remove\">ဖယ်ရှားသည်</string>\n    <string name=\"ext_app_info\">အက်ပ် အချက်အလက်</string>\n    <string name=\"remove_private_extension_message\">\\\"%s\\\" ကို တကယ်ဖယ်ရှားလိုပါသလား။</string>\n    <string name=\"extension_api_error\">ရယူခြင်း ကျရှုံးသွားသည်</string>\n    <string name=\"ext_info_version\">ဗာရှင်း</string>\n    <string name=\"ext_info_language\">ဘာသာစကား</string>\n    <string name=\"ext_info_age_rating\">အသက်အကန့်အသတ်</string>\n    <string name=\"ext_permission_install_apps_warning\">ထည့်သွင်းရန် ခွင့်ပြုချက်လိုအပ်သည်။</string>\n    <string name=\"ext_nsfw_short\">၁၈+</string>\n    <string name=\"ext_install_service_notif\">ထည့်သွင်းနေဆဲ</string>\n    <string name=\"ext_nsfw_warning\">ဤတွင် လိင်ပိုင်းဆိုင်ရာ အကြောင်းအရာများ (၁၈+နှစ်အထက်သာ သင့်လျော်သော) ပါဝင်နိုင်ပါသည်။</string>\n    <string name=\"action_add_repo\">repo ထည့်သွင်းရန်</string>\n    <string name=\"error_repo_exists\">repo ရှိပြီးသားဖြစ်သည်၊</string>\n    <string name=\"action_delete_repo\">ဖျက်မည်။</string>\n    <string name=\"action_replace_repo\">အစားထိုးမည်</string>\n    <string name=\"pref_fullscreen\">မျက်နှာပြင်အပြည့်</string>\n    <string name=\"pref_flash_style_black\">အမည်း</string>\n    <string name=\"pref_flash_style_white\">အဖြူ</string>\n    <string name=\"pref_flash_style_white_black\">အဖြူအမည်း</string>\n    <string name=\"pref_show_page_number\">စာမျက်နှာနံပါတ် ပြပါ။</string>\n    <string name=\"delete_repo_confirmation\">\\\"%s\\\"ကို ဖျက်လိုပါသလား?</string>\n    <string name=\"add_repo_confirmation\">\\\"%s\\\" ထည့်သွင်းလိုပါသလား?</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/nb-rNO/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Etter %1$s minutt</item>\n        <item quantity=\"other\">Etter %1$s minutter</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategori</item>\n        <item quantity=\"other\">%d kateogrier</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nytt kapittel</item>\n        <item quantity=\"other\">%1$d nye kapitler</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">For %d oppføring</item>\n        <item quantity=\"other\">For %d oppføringer</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s kapittel</item>\n        <item quantity=\"other\">%1$s kapitler</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s gjenstående</item>\n        <item quantity=\"other\">%1$s gjenstående</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Gjort på %1$s med %2$s feil</item>\n        <item quantity=\"other\">Gjort på %1$s med %2$s feil</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d tracker</item>\n        <item quantity=\"other\">%d trackere</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Hopper over %d kapittel, enten så mangler kilden den eller så har den blitt filtrert ut</item>\n        <item quantity=\"other\">Hopper over %d kapitler, enten så mangler kilden de eller så har de blitt filtrert ut</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Utvidelsesoppdatering tilgjengelig</item>\n        <item quantity=\"other\">%d utvidelsesoppdateringer tilgjengelige</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Kapittel %1$s og 1 til</item>\n        <item quantity=\"other\">Kapitler %1$s og %2$d til</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">I går</item>\n        <item quantity=\"other\">%1$d dager siden</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Neste uleste kapittel</item>\n        <item quantity=\"other\">Neste %d uleste kapitler</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Neste kapittel</item>\n        <item quantity=\"other\">Neste %d kapitler</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Mangler %1$s kapittel</item>\n        <item quantity=\"other\">Mangler %1$s kapitler</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">%d dag</item>\n        <item quantity=\"other\">%d dager</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d pakkebrønn</item>\n        <item quantity=\"other\">%d pakkebrønner</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/nb-rNO/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Navn</string>\n    <string name=\"categories\">Kategorier</string>\n    <string name=\"manga\">Bibliotekoppføringer</string>\n    <string name=\"chapters\">Kapitler</string>\n    <string name=\"history\">Historikk</string>\n    <string name=\"label_settings\">Innstillinger</string>\n    <string name=\"label_download_queue\">Nedlastingskø</string>\n    <string name=\"label_library\">Bibliotek</string>\n    <string name=\"label_recent_manga\">Historikk</string>\n    <string name=\"label_recent_updates\">Oppdateringer</string>\n    <string name=\"label_backup\">Sikkerhetskopier og gjenopprett</string>\n    <string name=\"label_migration\">Flytte</string>\n    <string name=\"label_extensions\">Utvidelser</string>\n    <string name=\"label_extension_info\">Utvidelsesinfo</string>\n    <string name=\"action_settings\">Innstillinger</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_bookmarked\">Bokmerket</string>\n    <string name=\"action_filter_unread\">Ulest</string>\n    <string name=\"action_filter_empty\">Fjern filter</string>\n    <string name=\"action_sort_alpha\">Alfabetisk</string>\n    <string name=\"action_sort_total\">Totale kapitler</string>\n    <string name=\"action_sort_last_read\">Sist lest</string>\n    <string name=\"action_search\">Søk</string>\n    <string name=\"action_select_all\">Velg alt</string>\n    <string name=\"action_mark_as_read\">Marker som lest</string>\n    <string name=\"action_mark_as_unread\">Marker som ulest</string>\n    <string name=\"action_mark_previous_as_read\">Merk forrige som lest</string>\n    <string name=\"action_download\">Last ned</string>\n    <string name=\"action_bookmark\">Bokmerk kapittel</string>\n    <string name=\"action_remove_bookmark\">Fjern bokmerke</string>\n    <string name=\"action_delete\">Slett</string>\n    <string name=\"action_update_library\">Oppdater bibliotek</string>\n    <string name=\"action_edit\">Rediger</string>\n    <string name=\"action_add\">Legg til</string>\n    <string name=\"action_add_category\">Legg til kategori</string>\n    <string name=\"action_edit_categories\">Rediger kategorier</string>\n    <string name=\"action_rename_category\">Gi kategori nytt navn</string>\n    <string name=\"action_move_category\">Sett kategorier</string>\n    <string name=\"action_edit_cover\">Rediger omslag</string>\n    <string name=\"action_pause\">Pause</string>\n    <string name=\"action_previous_chapter\">Forrige kapittel</string>\n    <string name=\"action_next_chapter\">Neste kapittel</string>\n    <string name=\"action_retry\">Prøv igjen</string>\n    <string name=\"action_remove\">Fjern</string>\n    <string name=\"action_resume\">Fortsett</string>\n    <string name=\"action_open_in_browser\">Åpne i nettleser</string>\n    <string name=\"action_display_mode\">Visningsmodus</string>\n    <string name=\"action_display\">Vis</string>\n    <string name=\"action_display_grid\">Kompakt rutenett</string>\n    <string name=\"action_display_list\">Liste</string>\n    <string name=\"action_cancel\">Avbryt</string>\n    <string name=\"action_sort\">Sorter</string>\n    <string name=\"action_install\">Installer</string>\n    <string name=\"action_share\">Del</string>\n    <string name=\"action_save\">Lagre</string>\n    <string name=\"action_reset\">Tilbakestill</string>\n    <string name=\"action_undo\">Angre</string>\n    <string name=\"action_open_log\">Åpne logg</string>\n    <string name=\"action_restore\">Gjenopprett</string>\n    <string name=\"loading\">Laster…</string>\n    <string name=\"app_not_available\">Program ikke tilgjengelig</string>\n    <string name=\"pref_category_general\">Generelt</string>\n    <string name=\"pref_category_reader\">Leser</string>\n    <string name=\"pref_category_downloads\">Nedlastinger</string>\n    <string name=\"pref_category_advanced\">Avansert</string>\n    <string name=\"pref_category_about\">Om</string>\n    <string name=\"update_never\">Av</string>\n    <string name=\"update_6hour\">Hver sjette time</string>\n    <string name=\"update_12hour\">Hver tolvte time</string>\n    <string name=\"update_24hour\">Daglig</string>\n    <string name=\"update_48hour\">Annenhver dag</string>\n    <string name=\"update_weekly\">Ukentlig</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"charging\">Lading</string>\n    <string name=\"default_category\">Standard kategori</string>\n    <string name=\"default_category_summary\">Alltid spør</string>\n    <string name=\"ext_update\">Oppdater</string>\n    <string name=\"ext_install\">Installer</string>\n    <string name=\"ext_pending\">Ventende</string>\n    <string name=\"ext_downloading\">Laster ned</string>\n    <string name=\"ext_installing\">Installerer</string>\n    <string name=\"ext_installed\">Installert</string>\n    <string name=\"ext_trust\">Tillit</string>\n    <string name=\"ext_untrusted\">Ubetrodd</string>\n    <string name=\"ext_uninstall\">Avinstaller</string>\n    <string name=\"untrusted_extension\">Ubetrodd utvidelse</string>\n    <string name=\"pref_fullscreen\">Fullskjermsvisning</string>\n    <string name=\"pref_page_transitions\">Sideovergangsanimasjoner</string>\n    <string name=\"pref_show_page_number\">Vis sidenummer</string>\n    <string name=\"pref_keep_screen_on\">Behold skjerm på</string>\n    <string name=\"pref_reader_navigation\">Navigasjon</string>\n    <string name=\"track\">Sporing</string>\n    <string name=\"action_global_search\">Globalt søk</string>\n    <string name=\"action_open_in_web_view\">Åpne i WebView</string>\n    <string name=\"pref_category_tracking\">Sporing</string>\n    <string name=\"portrait\">Stående</string>\n    <string name=\"landscape\">Liggende</string>\n    <string name=\"pref_library_update_interval\">Automatiske oppdateringer</string>\n    <string name=\"pref_library_update_restriction\">Enhetsbegrensninger for automatiske oppdateringer</string>\n    <string name=\"pref_update_only_non_completed\">Hopp over oppføringer med \\\"Fullført\\\" status</string>\n    <string name=\"pref_auto_update_manga_sync\">Oppdater fremdrift etter lesing</string>\n    <string name=\"pref_crop_borders\">Beskjær kanter</string>\n    <string name=\"pref_custom_brightness\">Egendefinert lysstyrke</string>\n    <string name=\"pref_custom_color_filter\">Egendefinert fargefilter</string>\n    <string name=\"pref_skip_read_chapters\">Hopp over kapitler markert som lest</string>\n    <string name=\"pref_read_with_volume_keys\">Lydstyrkejusteringstaster</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverter lydstyrketaster</string>\n    <string name=\"pref_read_with_long_tap\">Vis handlinger ved langt trykk</string>\n    <string name=\"pref_reader_theme\">Bakgrunnsfarge</string>\n    <string name=\"white_background\">Hvit</string>\n    <string name=\"black_background\">Svart</string>\n    <string name=\"pref_viewer_type\">Standard lesemodus</string>\n    <string name=\"left_to_right_viewer\">Sider (venstre til høyre)</string>\n    <string name=\"right_to_left_viewer\">Sider (høyre til venstre)</string>\n    <string name=\"vertical_viewer\">Sider (loddrett)</string>\n    <string name=\"webtoon_viewer\">Lang stripe</string>\n    <string name=\"pref_image_scale_type\">Skalatype</string>\n    <string name=\"scale_type_fit_screen\">Tilpass skjerm</string>\n    <string name=\"scale_type_stretch\">Strekk</string>\n    <string name=\"scale_type_fit_width\">Tilpass bredde</string>\n    <string name=\"scale_type_fit_height\">Tilpass høyde</string>\n    <string name=\"scale_type_original_size\">Opprinnelig størrelse</string>\n    <string name=\"scale_type_smart_fit\">Smart tilpasning</string>\n    <string name=\"pref_zoom_start\">Startposisjon for forstørring</string>\n    <string name=\"zoom_start_automatic\">Automatisk</string>\n    <string name=\"zoom_start_left\">Venstre</string>\n    <string name=\"zoom_start_right\">Høyre</string>\n    <string name=\"zoom_start_center\">Sentrer</string>\n    <string name=\"double_tap_anim_speed_0\">Ingen animasjon</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Rask</string>\n    <string name=\"pref_rotation_type\">Standard rotasjon</string>\n    <string name=\"rotation_free\">Fri</string>\n    <string name=\"rotation_force_portrait\">Låst stående</string>\n    <string name=\"rotation_force_landscape\">Låst liggende</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Etter manuelt markert som lest</string>\n    <string name=\"pref_remove_after_read\">Slett automatisk etter lesing</string>\n    <string name=\"disabled\">Avskrudd</string>\n    <string name=\"last_read_chapter\">Sist leste kapittel</string>\n    <string name=\"second_to_last\">Nest sist leste kapittel</string>\n    <string name=\"third_to_last\">Tredje sist leste kapittel</string>\n    <string name=\"fourth_to_last\">Fjerde sist leste kapittel</string>\n    <string name=\"fifth_to_last\">Femte sist leste kapittel</string>\n    <string name=\"pref_download_new\">Last ned nye kapitler</string>\n    <string name=\"services\">Sporere</string>\n    <string name=\"pref_create_backup\">Opprett sikkerhetskopi</string>\n    <string name=\"pref_create_backup_summ\">Kan brukes til å gjenopprette nåværende bibliotek</string>\n    <string name=\"pref_restore_backup\">Gjenopprett sikkerhetskopi</string>\n    <string name=\"pref_restore_backup_summ\">Gjenopprett bibliotek fra sikkerhetskopifil</string>\n    <string name=\"pref_backup_interval\">Sikkerhetskopieringsfrekvens</string>\n    <string name=\"backup_created\">Sikkerhetskopi opprettet</string>\n    <string name=\"restore_completed\">Gjenoppretting fullført</string>\n    <string name=\"backup_choice\">Hva ønsker du å sikkerhetskopiere?</string>\n    <string name=\"restoring_backup\">Gjenoppretter sikkerhetskopi</string>\n    <string name=\"creating_backup\">Oppretter sikkerhetskopi</string>\n    <string name=\"pref_clear_chapter_cache\">Tøm kapittelhurtigbuffer</string>\n    <string name=\"used_cache\">Brukt: %1$s</string>\n    <string name=\"cache_deleted\">Hurtigbuffer tømt. %1$d filer slettet</string>\n    <string name=\"cache_delete_error\">Feil oppstod under opprensing</string>\n    <string name=\"pref_clear_cookies\">Tøm informasjonskapsler</string>\n    <string name=\"cookies_cleared\">Informasjonskapsler slettet</string>\n    <string name=\"pref_clear_database\">Tøm database</string>\n    <string name=\"pref_clear_database_summary\">Slett historikk for oppføringer som ikke er lagret i biblioteket ditt</string>\n    <string name=\"clear_database_confirmation\">Er du sikker? Leste kapitler og framdrift for oppføringer som ikke er i biblioteket vil gå tapt</string>\n    <string name=\"clear_database_completed\">Oppføringer slettet</string>\n    <string name=\"version\">Versjon</string>\n    <string name=\"pref_enable_acra\">Send krasjrapporter</string>\n    <string name=\"pref_acra_summary\">Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt</string>\n    <string name=\"login_title\">Logg på %1$s</string>\n    <string name=\"username\">Brukernavn</string>\n    <string name=\"password\">Passord</string>\n    <string name=\"login\">Logg inn</string>\n    <string name=\"login_success\">Innlogget</string>\n    <string name=\"unknown_error\">Ukjent feil</string>\n    <string name=\"updating_category\">Oppdaterer kategori</string>\n    <string name=\"no_more_results\">Ingen flere resultater</string>\n    <string name=\"local_source\">Lokal kilde</string>\n    <string name=\"other_source\">Andre</string>\n    <string name=\"action_global_search_hint\">Globalt søk…</string>\n    <string name=\"latest\">Seneste</string>\n    <string name=\"browse\">Utforsk</string>\n    <string name=\"ongoing\">Pågående</string>\n    <string name=\"unknown\">Ukjent</string>\n    <string name=\"licensed\">Lisensiert</string>\n    <string name=\"remove_from_library\">Fjern fra bibliotek</string>\n    <string name=\"manga_added_library\">Lagt til i biblioteket</string>\n    <string name=\"manga_removed_library\">Fjernet fra bibliotek</string>\n    <string name=\"delete_downloads_for_manga\">Slett nedlastede kapitler?</string>\n    <string name=\"copied_to_clipboard\">Kopiert til utklippstavle:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Kilde ikke installert: %1$s</string>\n    <string name=\"display_mode_chapter\">Kapittel %1$s</string>\n    <string name=\"chapter_downloading_progress\">Laster ned (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Feil</string>\n    <string name=\"chapter_paused\">Pauset</string>\n    <string name=\"show_title\">Kildetittel</string>\n    <string name=\"show_chapter_number\">Kapittelnummer</string>\n    <string name=\"sort_by_source\">Etter kilde</string>\n    <string name=\"sort_by_number\">Etter kapittelnummer</string>\n    <string name=\"manga_download\">Last ned</string>\n    <string name=\"download_unread\">Ulest</string>\n    <string name=\"confirm_delete_chapters\">Er du sikker på at du vil slette de valgte kapitlene?</string>\n    <string name=\"manga_tracking_tab\">Sporing</string>\n    <string name=\"reading\">Leser</string>\n    <string name=\"completed\">Fullført</string>\n    <string name=\"dropped\">Droppet</string>\n    <string name=\"on_hold\">På vent</string>\n    <string name=\"plan_to_read\">Planlagt lest</string>\n    <string name=\"repeating\">Leser om igjen</string>\n    <string name=\"score\">Poengsum</string>\n    <string name=\"title\">Tittel</string>\n    <string name=\"status\">Status</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Type</string>\n    <string name=\"error_category_exists\">En kategori ved dette navnet finnes allerede!</string>\n    <string name=\"snack_categories_deleted\">Kategorier slettet</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Lesningsdato for dette kapittelet vil bli fjernet. Er du sikker?</string>\n    <string name=\"dialog_with_checkbox_reset\">Tilbakestill alle kapitler for denne oppføringen</string>\n    <string name=\"snack_add_to_library\">Legg til i bibliotek?</string>\n    <string name=\"picture_saved\">Bilde lagret</string>\n    <string name=\"custom_filter\">Egendefinert filter</string>\n    <string name=\"set_as_cover\">Sett som omslag</string>\n    <string name=\"cover_updated\">Omslag oppdatert</string>\n    <string name=\"chapter_progress\">Side: %1$d</string>\n    <string name=\"no_next_chapter\">Fant ikke neste kapittel</string>\n    <string name=\"decode_image_error\">Bildet kunne ikke lastes inn</string>\n    <string name=\"transition_finished\">Fullført:</string>\n    <string name=\"transition_current\">Nåværende:</string>\n    <string name=\"transition_next\">Neste:</string>\n    <string name=\"transition_previous\">Forrige:</string>\n    <string name=\"transition_no_next\">Det finnes ikke flere kapittel</string>\n    <string name=\"transition_no_previous\">Det er ikke noe tidligere kapittel</string>\n    <string name=\"transition_pages_loading\">Laster inn sider…</string>\n    <string name=\"transition_pages_error\">Klarte ikke å laste inn sider: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Velg data å inkludere</string>\n    <string name=\"migrate\">Flytt</string>\n    <string name=\"copy\">Kopier</string>\n    <string name=\"notification_new_chapters\">Nye kapitler funnet</string>\n    <string name=\"notification_cover_update_failed\">Klarte ikke å oppdatere omslag</string>\n    <string name=\"update_check_confirm\">Last ned</string>\n    <string name=\"channel_common\">Vanlig</string>\n    <string name=\"filter_mode_screen\">Skjerm</string>\n    <string name=\"label_help\">Hjelp</string>\n    <string name=\"action_display_download_badge\">Last ned kapitler</string>\n    <string name=\"pref_library_columns\">Rutenettstørrelse</string>\n    <string name=\"untrusted_extension_message\">Skadelige utvidelser kan lese alle lagrede innloggingsdetaljer eller kjøre vilkårlig kode.\n\\n\n\\nVed å godta denne utvidelsen, aksepterer du disse risikoene.</string>\n    <string name=\"pref_double_tap_anim_speed\">Animasjonshastighet ved dobbelklikk</string>\n    <string name=\"pager_viewer\">Sider</string>\n    <string name=\"confirm_set_image_as_cover\">Bruk dette bildet som omslag?</string>\n    <string name=\"download_queue_error\">Kunne ikke laste ned kapitler. Du kan prøve igjen i nedlastingsdelen</string>\n    <string name=\"notification_first_add_to_library\">Legg til oppføringen i biblioteket ditt før du gjør dette</string>\n    <string name=\"file_select_cover\">Velg omslagsbilde</string>\n    <string name=\"file_select_backup\">Velg sikkerhetskopifil</string>\n    <string name=\"update_check_no_new_updates\">Ingen nye oppdateringer tilgjengelige</string>\n    <string name=\"update_check_notification_download_in_progress\">Laster ned…</string>\n    <string name=\"update_check_notification_download_complete\">Trykk for å installere oppdatering</string>\n    <string name=\"update_check_notification_download_error\">Feil ved nedlasting</string>\n    <string name=\"update_check_notification_update_available\">Ny versjon tilgjengelig!</string>\n    <string name=\"information_no_downloads\">Ingen nedlastinger</string>\n    <string name=\"information_no_recent\">Ingen nylige oppdateringer</string>\n    <string name=\"information_no_recent_manga\">Ingenting lest nylig</string>\n    <string name=\"information_empty_library\">Biblioteket ditt er tomt</string>\n    <string name=\"information_empty_category\">Du har ingen kategorier. Trykk på pluss-knappen for å lage en for å organisere biblioteket ditt.</string>\n    <string name=\"download_notifier_downloader_title\">Nedlaster</string>\n    <string name=\"download_notifier_title_error\">Feil</string>\n    <string name=\"download_notifier_unknown_error\">Kunne ikke laste ned kapittel grunnet uventet feil</string>\n    <string name=\"download_notifier_text_only_wifi\">Ingen trådløstilkobling tilgjengelig</string>\n    <string name=\"download_notifier_no_network\">Ingen nettverkstilkobling tilgjengelig</string>\n    <string name=\"download_notifier_download_paused\">Nedlastinger pauset</string>\n    <string name=\"pref_color_filter_mode\">Blandingsmodus for fargefilter</string>\n    <string name=\"filter_mode_overlay\">Overlegg</string>\n    <string name=\"filter_mode_multiply\">Multiplisere</string>\n    <string name=\"filter_mode_lighten\">Unngå / lysne</string>\n    <string name=\"filter_mode_darken\">Brenn / mørkere</string>\n    <string name=\"no_results_found\">Resultatløst</string>\n    <string name=\"migration_selection_prompt\">Velg en kilde å flytte fra</string>\n    <string name=\"action_webview_back\">Tilbake</string>\n    <string name=\"action_webview_forward\">Fram</string>\n    <string name=\"action_webview_refresh\">Gjenoppfrisk</string>\n    <string name=\"pref_category_library\">Bibliotek</string>\n    <string name=\"ext_obsolete\">Foreldet</string>\n    <string name=\"obsolete_extension_message\">Denne utvidelsen er ikke lengre tilgjengelig. Den fungerer kankje ikke som den skal og kan forårsake problemer med appen. Avinstallering anbefales.</string>\n    <string name=\"pref_date_format\">Datoformat</string>\n    <string name=\"pref_category_library_update\">Global oppdatering</string>\n    <string name=\"logout_title\">Logg ut fra %1$s?</string>\n    <string name=\"logout\">Logg ut</string>\n    <string name=\"logout_success\">Du er utlogget</string>\n    <string name=\"paused\">Pauset</string>\n    <string name=\"label_more\">Mer</string>\n    <string name=\"action_view_chapters\">Vis kapitler</string>\n    <string name=\"action_cancel_all\">Avbryt alle</string>\n    <string name=\"theme_light\">Lyst</string>\n    <string name=\"theme_dark\">Mørkt</string>\n    <string name=\"theme_system\">System</string>\n    <string name=\"pref_manage_notifications\">Håndter merknader</string>\n    <string name=\"pref_category_security\">Sikkerhet og personvern</string>\n    <string name=\"lock_with_biometrics\">Krev opplåsning</string>\n    <string name=\"lock_when_idle\">Lås ved lediggang</string>\n    <string name=\"lock_always\">Alltid</string>\n    <string name=\"lock_never\">Aldri</string>\n    <string name=\"secure_screen\">Sikker skjerm</string>\n    <string name=\"channel_new_chapters\">Kapitteloppdateringer</string>\n    <string name=\"notification_chapters_single\">Kapittel %1$s</string>\n    <string name=\"email\">E-postadresse</string>\n    <string name=\"in_library\">I biblioteket</string>\n    <string name=\"add_to_library\">Legg til i bibliotek</string>\n    <string name=\"action_move_to_bottom\">Flytt til bunnen</string>\n    <string name=\"action_move_to_top\">Flytt til toppen</string>\n    <string name=\"action_oldest\">Eldste</string>\n    <string name=\"action_newest\">Nyeste</string>\n    <string name=\"action_unpin\">Opphev festin</string>\n    <string name=\"action_pin\">Fest</string>\n    <string name=\"action_select_inverse\">Velg motsatt</string>\n    <string name=\"action_menu\">Meny</string>\n    <string name=\"label_sources\">Kilder</string>\n    <string name=\"channel_ext_updates\">Utvidelsesoppdateringer</string>\n    <string name=\"information_webview_required\">Appen fungerer ikke uten WebView</string>\n    <string name=\"add_tracking\">Legg til sporing</string>\n    <string name=\"manga_info_collapse\">Mindre</string>\n    <string name=\"manga_info_expand\">Mer</string>\n    <string name=\"pinned_sources\">Festet</string>\n    <string name=\"website\">Nettside</string>\n    <string name=\"creating_backup_error\">Sikkerhetskopiering mislyktes</string>\n    <string name=\"pref_category_reading\">Leser</string>\n    <string name=\"pref_always_show_chapter_transition\">Alltid vis kapittelovergang</string>\n    <string name=\"vertical_plus_viewer\">Lang stripe med mellomrom</string>\n    <string name=\"pref_skip_filtered_chapters\">Hopp over filtrerte kapitler</string>\n    <string name=\"hide_notification_content\">Skjul merknadsinnhold</string>\n    <string name=\"secure_screen_summary\">Sikker skjerm skjuler programinnhold ved bytting av programmer og blokker skjermavbildninger</string>\n    <string name=\"label_downloaded_only\">Kun nedlastet</string>\n    <string name=\"viewer\">Lesemodus</string>\n    <string name=\"information_cloudflare_bypass_failure\">Klarte ikke bypassere Cloudflare</string>\n    <string name=\"updating_library\">Oppdaterer bibliotek</string>\n    <string name=\"page_list_empty_error\">Fant ingen sider</string>\n    <string name=\"sort_by_upload_date\">Etter opplastingsdato</string>\n    <string name=\"last_used_source\">Sist brukt</string>\n    <string name=\"tabs_header\">Faner</string>\n    <string name=\"restore_duration\">%02d min, %02d sek</string>\n    <string name=\"backup_restore_missing_sources\">Manglende kilder:</string>\n    <string name=\"gray_background\">Grå</string>\n    <string name=\"action_display_show_tabs\">Vis kategorifaner</string>\n    <string name=\"action_display_comfortable_grid\">Komfortabelt rutenett</string>\n    <string name=\"action_migrate\">Flytt</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"tapping_inverted_both\">Begge</string>\n    <string name=\"tapping_inverted_vertical\">Loddrett</string>\n    <string name=\"tapping_inverted_horizontal\">vannrett</string>\n    <string name=\"tapping_inverted_none\">Ingen</string>\n    <string name=\"loader_not_implemented_error\">Kilden ikke funnet</string>\n    <string name=\"pref_category_for_this_series\">For denne serien</string>\n    <string name=\"unknown_status\">Ukjent status</string>\n    <string name=\"unknown_author\">Ukjent forfatter</string>\n    <string name=\"local_source_help_guide\">Lokal kildeguide</string>\n    <string name=\"downloaded_only_summary\">Filtrerer alle oppføringer i biblioteket ditt</string>\n    <string name=\"check_for_updates\">Se etter oppdateringer</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Kunne ikke åpne enhetens innstillinger</string>\n    <string name=\"battery_optimization_disabled\">Batterioptimalisering er allerede deaktivert</string>\n    <string name=\"pref_disable_battery_optimization\">Deaktiver batterioptimalisering</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"requires_app_restart\">Krever omstart for å tre i kraft</string>\n    <string name=\"label_network\">Nettverk</string>\n    <string name=\"restoring_backup_canceled\">Avbrutt gjenoppretting</string>\n    <string name=\"restore_in_progress\">Gjenoppretting allerede underveis</string>\n    <string name=\"pref_show_reading_mode\">Vis lesemodus</string>\n    <string name=\"action_disable\">deaktivere</string>\n    <string name=\"action_disable_all\">deaktiver alle</string>\n    <string name=\"action_enable_all\">aktiver alle</string>\n    <string name=\"action_sort_latest_chapter\">Siste kapittel</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverter trykk</string>\n    <string name=\"restoring_backup_error\">Gjenoppretting av sikkerhetskopi mislyktes</string>\n    <string name=\"backup_in_progress\">Sikkerhetskopiering allerede underveis</string>\n    <string name=\"invalid_backup_file\">Ugyldig sikkerhetskopieringsfil:</string>\n    <string name=\"pref_cutout_short\">Vis innhold i utklippsområde</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Se etter nye omslag og detaljer ved oppdatering av bibliotek</string>\n    <string name=\"pref_library_update_refresh_metadata\">Gjenoppfrisk metadata automatisk</string>\n    <string name=\"pref_category_display\">Skjerm</string>\n    <string name=\"pref_category_theme\">Drakt</string>\n    <string name=\"action_sort_date_added\">Dato lagt til</string>\n    <string name=\"ext_updates_pending\">Oppdateringer som venter</string>\n    <string name=\"pref_category_reading_mode\">Lesemodus</string>\n    <string name=\"pref_show_reading_mode_summary\">Sniktitt av nåværende modus når leseren åpnes</string>\n    <string name=\"channel_errors\">Feil</string>\n    <string name=\"channel_complete\">Fullført</string>\n    <string name=\"notification_chapters_single_and_more\">Kapittel %1$s og %2$d til</string>\n    <string name=\"no_pinned_sources\">Du har ingen festede kilder</string>\n    <string name=\"channel_progress\">Framdrift</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Tillat sletting av bokmerkede kapitler</string>\n    <string name=\"pref_category_delete_chapters\">Slett kapitler</string>\n    <string name=\"ext_nsfw_warning\">Kan inneholde innhold for 18+</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Dette forhindrer ikke uoffisielle eller potensielt feilaktig kategoriserte tillegg fra å vise innhold for 18+ i appen.</string>\n    <string name=\"recent_manga_time\">Kap. %1$s - %2$s</string>\n    <string name=\"share_page_info\">%1$s: %2$s, side %3$d</string>\n    <string name=\"chapter_settings\">Kapittelinnstillinger</string>\n    <string name=\"set_chapter_settings_as_default\">Sett som standard</string>\n    <string name=\"no_chapters_error\">Fant ingen kapitler</string>\n    <string name=\"information_webview_outdated\">Oppdater WebView-programmet for bedre kompatibilitet</string>\n    <string name=\"chapter_settings_updated\">Oppdaterte standard kapittelinnstillinger</string>\n    <string name=\"confirm_set_chapter_settings\">Er du sikker på at du vil lagre disse innstillingene som standard?</string>\n    <string name=\"action_search_settings\">Søkeinnstillinger</string>\n    <string name=\"notification_chapters_multiple\">Kapitler %1$s</string>\n    <string name=\"download_insufficient_space\">Ikke nok lagringsplass til å laste ned kapitler</string>\n    <string name=\"also_set_chapter_settings_for_library\">Anvend også for allle oppføringer i biblioteket</string>\n    <string name=\"action_global_search_query\">Søk etter \\\"%1$s\\\" globalt</string>\n    <string name=\"updated_version\">Oppdatert til v%1$s</string>\n    <string name=\"licenses\">Friprog-lisenser</string>\n    <string name=\"whats_new\">Hva er nytt</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Hjelper med oppdatering og sikkerhetskopiering av biblioteket</string>\n    <string name=\"pref_refresh_library_covers\">Gjenoppfrisk mangaomslag i biblioteket</string>\n    <string name=\"backup_restore_missing_trackers\">Sporingstjenester ikke logget inn i:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Sikkerhetskopi inneholder ingen bibliotekoppføringer.</string>\n    <string name=\"tracking_info\">Enveissynkronisering for å oppdatere kapittelfremdrift i eksterne sporetjenester. Sett opp sporing for individuelle oppføringer med sporingsknappen.</string>\n    <string name=\"pref_webtoon_side_padding\">Sidepolstring</string>\n    <string name=\"spen_next_page\">Neste side</string>\n    <string name=\"spen_previous_page\">Forrige side</string>\n    <string name=\"file_picker_error\">Ingen app for filvelging funnet</string>\n    <string name=\"migration_help_guide\">Veiledning for kilde-flytting</string>\n    <string name=\"clear_history_confirmation\">Er du sikker? All historikk vil gå tapt.</string>\n    <string name=\"clear_history_completed\">Historikken er slettet</string>\n    <string name=\"pref_clear_history\">Slett historikk</string>\n    <string name=\"myanimelist_relogin\">Vennligst logg på MAL igjen</string>\n    <string name=\"track_finished_reading_date\">Sluttdato</string>\n    <string name=\"track_started_reading_date\">Startdato</string>\n    <string name=\"downloaded_chapters\">Nedlastede kapitler</string>\n    <string name=\"manga_from_library\">Fra biblioteket</string>\n    <string name=\"pref_incognito_mode_summary\">Setter lesehistorikken på pause</string>\n    <string name=\"pref_incognito_mode\">Inkognitomodus</string>\n    <string name=\"pref_dump_crash_logs\">Del krasjlogger</string>\n    <string name=\"pref_dump_crash_logs_summary\">Lagrer feillogger i en fil som kan sendes til utviklerne</string>\n    <string name=\"pref_viewer_nav\">Navigasjonsoppsett</string>\n    <string name=\"edge_nav\">Kant</string>\n    <string name=\"kindlish_nav\">Kindle-basert</string>\n    <string name=\"l_nav\">L-formet</string>\n    <string name=\"pref_show_nsfw_source\">Vis i kilde- og utvidelseslister</string>\n    <string name=\"pref_category_nsfw_content\">Aldersgrense 18+ kilder</string>\n    <string name=\"action_desc\">Synkende</string>\n    <string name=\"action_asc\">Stigende</string>\n    <string name=\"action_order_by_chapter_number\">Etter kapittelnummer</string>\n    <string name=\"action_order_by_upload_date\">Etter opplastingsdato</string>\n    <string name=\"action_filter_tracked\">Sporet</string>\n    <string name=\"pref_dual_page_invert_summary\">Hvis plasseringen av sideoppsettet for delte brede sider ikke samsvarer med leseretningen</string>\n    <string name=\"pref_dual_page_invert\">Invertert sideoppsett for delte sider</string>\n    <string name=\"pref_dual_page_split\">Del brede sider</string>\n    <string name=\"pref_show_navigation_mode\">Vis overlay for navigasjonsoppsett</string>\n    <string name=\"backup_restore_content_full\">Du vil måtte installere manglende utvidelser og logge inn på sporings-tjenester etterpå for å bruke dem.</string>\n    <string name=\"pref_show_navigation_mode_summary\">Vis tap-bare områder når leseren åpnes</string>\n    <string name=\"none\">Ingen</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"nav_zone_right\">Høyre</string>\n    <string name=\"nav_zone_left\">Venstre</string>\n    <string name=\"nav_zone_next\">Neste</string>\n    <string name=\"nav_zone_prev\">Forrige</string>\n    <string name=\"right_and_left_nav\">Høyre og Venstre</string>\n    <string name=\"action_display_show_number_of_items\">Vis antall gjenstander</string>\n    <string name=\"exclude\">Eksluder: %s</string>\n    <string name=\"include\">Inkluder: %s</string>\n    <string name=\"action_sort_chapter_fetch_date\">Dato hentet</string>\n    <string name=\"pref_download_new_categories_details\">Oppføringer i utelukkede kategorier vil ikke bli nedlastet selv om de også er i inkluderte kategorier.</string>\n    <string name=\"pref_category_auto_download\">Last ned automatisk</string>\n    <string name=\"pref_library_update_categories_details\">Oppførninger i utelukkede kategorier vil ikke bli oppdatert selv om de også er i inkluderte kategorier.</string>\n    <string name=\"action_show_errors\">Trykk for å se detaljer</string>\n    <string name=\"clipboard_copy_error\">Kunne ikke kopiere til utklippstavlen</string>\n    <string name=\"update_check_eol\">Denne Android-versjonen støttes ikke lenger</string>\n    <string name=\"rotation_landscape\">Liggende</string>\n    <string name=\"rotation_portrait\">Stående</string>\n    <string name=\"rotation_type\">Rotasjon</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Oppretter mapper i henhold til oppføringenes tittel</string>\n    <string name=\"pref_create_folder_per_manga\">Lagre sider i egne mapper</string>\n    <string name=\"pref_reader_actions\">Handlinger</string>\n    <string name=\"pref_dark_theme_pure_black\">Helt svart</string>\n    <string name=\"getting_started_guide\">Oppstartsveiledning</string>\n    <string name=\"information_empty_category_dialog\">Du har ingen kategorier enda.</string>\n    <string name=\"source_unsupported\">Kilde støttes ikke</string>\n    <string name=\"unread\">Ulest</string>\n    <string name=\"error_sharing_cover\">Klarte ikke å dele omslag</string>\n    <string name=\"error_saving_cover\">Klarte ikke å lagre omslag</string>\n    <string name=\"cover_saved\">Omslag lagret</string>\n    <string name=\"manga_cover\">Omslag</string>\n    <string name=\"date\">Dato</string>\n    <string name=\"local_filter_order_by\">Sorter etter</string>\n    <string name=\"local_invalid_format\">Ugyldig kapittelformat</string>\n    <string name=\"chapter_not_found\">Fant ikke kapittelet</string>\n    <string name=\"label_background_activity\">Bakgrunnsaktivitet</string>\n    <string name=\"action_track\">Spor</string>\n    <string name=\"enhanced_services\">Forbedret sporere</string>\n    <string name=\"tracking_guide\">Sporingsveiledning</string>\n    <string name=\"pref_remove_exclude_categories\">Utelukkede kategorier</string>\n    <string name=\"pref_lowest\">Laveste</string>\n    <string name=\"pref_low\">Lav</string>\n    <string name=\"pref_high\">Høy</string>\n    <string name=\"pref_highest\">Høyeste</string>\n    <string name=\"automatic_background\">Automatisk</string>\n    <string name=\"pref_inverted_colors\">Invertert</string>\n    <string name=\"pref_grayscale\">Gråskala</string>\n    <string name=\"off\">Av</string>\n    <string name=\"on\">På</string>\n    <string name=\"restrictions\">Begrensninger: %s</string>\n    <string name=\"relative_time_today\">I dag</string>\n    <string name=\"theme_monet\">Dynamisk</string>\n    <string name=\"pref_app_theme\">Programdrakt</string>\n    <string name=\"pref_category_appearance\">Utseende</string>\n    <string name=\"action_start_downloading_now\">Start nedlasting nå</string>\n    <string name=\"cancel_all_for_series\">Avbryt alle for denne serien</string>\n    <string name=\"confirm_lock_change\">Identitetsbekreft for å endre</string>\n    <string name=\"label_default\">Standard</string>\n    <string name=\"about_dont_kill_my_app\">Noen produsenter har ytterligere appbegrensninger som dreper bakgrunnstjenester. Denne nettsiden har mer info om hvordan det kan fikses.</string>\n    <string name=\"restore_miui_warning\">Sikkerhetskopier/gjenoppretting kan krangle hvis MIUI-optimalisering er avskrudd.</string>\n    <string name=\"enhanced_tracking_info\">Gir forbedredet funksjoner for spesifikke kilder. Det holdes automatisk øye med oppføringer når de legges til i biblioteket ditt.</string>\n    <string name=\"pref_tablet_ui_mode\">Nettbrettsgrensesnitt</string>\n    <string name=\"pref_hide_threshold\">Følsomhet for å skjule menyen når du ruller</string>\n    <string name=\"categorized_display_settings\">Innstillinger per kategori for sortering</string>\n    <string name=\"theme_yinyang\">Yin og yang</string>\n    <string name=\"theme_tealturquoise\">Blågrønn og turkis</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Jordbær-Daiquiri</string>\n    <string name=\"theme_midnightdusk\">Midnattsskumring</string>\n    <string name=\"theme_greenapple\">Grønt eple</string>\n    <string name=\"action_display_local_badge\">Lokal kilde</string>\n    <string name=\"error_no_match\">Ingen treff funnet</string>\n    <string name=\"notification_incognito_text\">Skru av inkognito-modus</string>\n    <string name=\"help_translate\">Bistå oversettelsen</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installer og start Shizuku for å bruke det som utvidelsesinstallatør.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku kjører ikke</string>\n    <string name=\"ext_installer_legacy\">Foreldet</string>\n    <string name=\"ext_installer_pref\">Installatør</string>\n    <string name=\"ext_install_service_notif\">Installerer utvidelse …</string>\n    <string name=\"ext_app_info\">Programinfo</string>\n    <string name=\"action_sort_count\">Totalt antall oppføringer</string>\n    <string name=\"action_display_language_badge\">Språk</string>\n    <string name=\"pref_verbose_logging\">Sirlig loggføring</string>\n    <string name=\"pref_verbose_logging_summary\">Skriv utfyllende logg til systemloggen (reduserer programytelse)</string>\n    <string name=\"label_warning\">Advarsel</string>\n    <string name=\"notification_size_warning\">Store oppdateringer skader kilder og kan føre til tregere oppdateringer samt økt batteribruk. Trykk for å lære mer.</string>\n    <string name=\"backup_info\">Du bør oppbevare ekstra kopier av sikkershetskopier andre steder også. Sikkerhetskopier kan inneholde sensitiv data, inkludert eventuelle lagrede passord. Vær forsiktig ved deling.</string>\n    <string name=\"channel_app_updates\">Appoppdateringer</string>\n    <string name=\"update_72hour\">Hver 3. dag</string>\n    <string name=\"connected_to_wifi\">Bare på Wi-Fi</string>\n    <string name=\"action_show_manga\">Vis oppføring</string>\n    <string name=\"privacy_policy\">Personvernerklæring</string>\n    <string name=\"publishing_finished\">Ferdig publisert</string>\n    <string name=\"pref_update_only_completely_read\">Hopp over oppføringer med uleste kapitler</string>\n    <string name=\"cancelled\">Kansellert</string>\n    <string name=\"on_hiatus\">På pause</string>\n    <string name=\"save_chapter_as_cbz\">Lagre som CBZ-arkiv</string>\n    <string name=\"ext_update_all\">Oppdater alle</string>\n    <string name=\"database_clean\">Ingenting å fjerne</string>\n    <string name=\"skipped_reason_not_caught_up\">Hoppet over fordi det er uleste kapitler</string>\n    <string name=\"skipped_reason_completed\">Hoppet over fordi serien er fullført</string>\n    <string name=\"download_queue_size_warning\">Advarsel: store bulknedlastinger kan føre til at kilder blir tregere og/eller blokkerer Mihon. Trykk for å lære mer.</string>\n    <string name=\"library_errors_help\">For hjelp til å fikse bibliotekoppdateringsfeil, se %1$s</string>\n    <string name=\"action_display_cover_only_grid\">Kun omslags-rutenett</string>\n    <string name=\"pref_update_only_started\">Hopp over oppføringer som ikke er påbegynt</string>\n    <string name=\"pref_landscape_zoom\">Zoom automatisk inn for brede bilder</string>\n    <string name=\"pref_navigate_pan\">Panorer brede bilder</string>\n    <string name=\"clear_database_source_item_count\">%1$d ikke-bibliotek oppføringer i databasen</string>\n    <string name=\"action_move_to_top_all_for_series\">Flytt serien til toppen</string>\n    <string name=\"extension_api_error\">Klarte ikke å hente tilgjengelige utvidelser</string>\n    <string name=\"rotation_reverse_portrait\">Omvendt portrett</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Tøm kapittel hurtigbufferen ved oppstart av appen</string>\n    <string name=\"notification_update_error\">%1$d oppdatering(er) mislyktes</string>\n    <string name=\"learn_more\">Trykk for å finne ut mer</string>\n    <string name=\"skipped_reason_not_started\">Hoppet over fordi ingen kapitler er lest</string>\n    <string name=\"disabled_nav\">Deaktivert</string>\n    <string name=\"empty_backup_error\">Ingen bibliotekoppføringer å sikkerhetskopiere</string>\n    <string name=\"error_saving_picture\">Feil ved lagring av bilde</string>\n    <string name=\"update_check_open\">Åpne på GitHub</string>\n    <string name=\"action_close\">Lukk</string>\n    <string name=\"pref_clear_webview_data\">Slett WebView data</string>\n    <string name=\"webview_data_deleted\">WebView data slettet</string>\n    <string name=\"empty_screen\">Vel, dette er pinlig</string>\n    <string name=\"pref_tracking_summary\">Enveis fremdriftssynkronisering, forbedret synkronisering</string>\n    <string name=\"pref_browse_summary\">Kilder, utvidelser, globalt søk</string>\n    <string name=\"pref_backup_summary\">Manuelle &amp; automatiske sikkerhetskopier</string>\n    <string name=\"theme_lavender\">Lavendel</string>\n    <string name=\"network_not_metered\">Bare på nettverk uten datamåling</string>\n    <string name=\"ext_info_language\">Språk</string>\n    <string name=\"pref_reset_viewer_flags_success\">Alle leserinnstillinger tilbakestilt</string>\n    <string name=\"unknown_title\">Ukjent tittel</string>\n    <string name=\"invalid_location\">Ugyldig plassering: %s</string>\n    <string name=\"download_ahead_info\">Fungerer kun hvis det nåværende kapittelet + det neste allerede er lastet ned.</string>\n    <string name=\"crash_screen_restart_application\">Start applikasjonen på nytt</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Kunne ikke finne filbanen til side %d</string>\n    <string name=\"pref_security_summary\">Applås, sikker skjerm</string>\n    <string name=\"pref_advanced_summary\">Dump krasjlogger, batterioptimaliseringer</string>\n    <string name=\"missing_storage_permission\">Lagringstilgang er ikke gitt</string>\n    <string name=\"error_user_agent_string_invalid\">Ugyldig streng for brukeragent</string>\n    <string name=\"wish_list\">Ønskeliste</string>\n    <string name=\"skipped_reason_not_always_update\">Hoppet over fordi seriene ikke krever oppdateringer</string>\n    <string name=\"download_notifier_split_page_not_found\">Side %d ble ikke funnet under deling</string>\n    <string name=\"pref_reset_viewer_flags\">Tilbakestill leserinnstillinger per serie</string>\n    <string name=\"theme_tidalwave\">Tidevannsbølge</string>\n    <string name=\"ext_info_age_rating\">Aldersvurdering</string>\n    <string name=\"error_user_agent_string_blank\">Strengen for brukeragent kan ikke være tom</string>\n    <string name=\"complete_list\">Komplett liste</string>\n    <string name=\"on_hold_list\">På vent liste</string>\n    <string name=\"are_you_sure\">Er du sikker?</string>\n    <string name=\"remove_manga\">Du er i ferd med å fjerne \\\"%s\\\" fra biblioteket ditt</string>\n    <string name=\"unfinished_list\">Uferdig liste</string>\n    <string name=\"download_ahead\">Last ned i forkant</string>\n    <string name=\"pref_reset_user_agent_string\">Tilbakestill standard streng for brukeragent</string>\n    <string name=\"reading_list\">Leseliste</string>\n    <string name=\"action_sort_last_manga_update\">Siste oppdateringssjekk</string>\n    <string name=\"pref_reset_viewer_flags_error\">Kunne ikke tilbakestille leserinnstillingene</string>\n    <string name=\"multi_lang\">Multi</string>\n    <string name=\"auto_download_while_reading\">Last ned automatisk mens du leser</string>\n    <string name=\"split_tall_images_summary\">Forbedrer leserytelsen</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Tilbakestiller lesemodus og orientering for alle serier</string>\n    <string name=\"action_sort_unread_count\">Antall uleste</string>\n    <string name=\"delete_category_confirmation\">Ønsker du å slette kategorien \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Slett kategori</string>\n    <string name=\"internal_error\">InternalError: Sjekk krasjlogger for mer informasjon</string>\n    <string name=\"crash_screen_title\">Oops!</string>\n    <string name=\"crash_screen_description\">%s fikk en uventet feil. Vi foreslår at du deler krasjloggene i vår støttekanal på Discord.</string>\n    <string name=\"pref_app_language\">Appspråk</string>\n    <string name=\"description_placeholder\">Ingen beskrivelse</string>\n    <string name=\"action_search_hint\">Søk…</string>\n    <string name=\"action_remove_everything\">Fjern alt</string>\n    <string name=\"ext_info_version\">Versjon</string>\n    <string name=\"custom_cover\">Egendefinert omslag</string>\n    <string name=\"popular\">Populært</string>\n    <string name=\"appwidget_updates_description\">Se de nylig oppdaterte biblotekoppføringene dine</string>\n    <string name=\"appwidget_unavailable_locked\">Moduler er ikke tilgjengelig når applås er aktivert</string>\n    <string name=\"pref_user_agent_string\">Standard streng for brukeragent</string>\n    <string name=\"pref_appearance_summary\">Tema, dato- og klokkeslettformat</string>\n    <string name=\"pref_library_summary\">Kategorier, global oppdatering, kapittelsveip</string>\n    <string name=\"pref_downloads_summary\">Automatisk nedlasting, last ned i forkant</string>\n    <string name=\"pref_reader_summary\">Lesemodus, skjerm, navigasjon</string>\n    <string name=\"update_already_running\">En oppdatering kjører allerede</string>\n    <string name=\"cant_open_last_read_chapter\">Kan ikke åpne siste leste kapittel</string>\n    <string name=\"updates_last_update_info\">Bibliotek sist oppdatert: %s</string>\n    <string name=\"source_empty_screen\">Ingen kilde funnet</string>\n    <string name=\"source_filter_empty_screen\">Ingen installert kilde funnet</string>\n    <string name=\"not_installed\">Ikke installert</string>\n    <string name=\"updates_last_update_info_just_now\">Akkurat nå</string>\n    <string name=\"download_notifier_cache_renewal\">Sjekker nedlastinger</string>\n    <string name=\"fdroid_warning\">F-Droid-bygg er ikke offisielt støttet.\n\\nTrykk for å finne ut mer.</string>\n    <string name=\"information_no_entries_found\">Fant ingen oppføringer i denne kategorien</string>\n    <string name=\"action_open_random_manga\">Åpne tilfeldig oppføring</string>\n    <string name=\"action_display_show_continue_reading_button\">Fortsett å lese-knapp</string>\n    <string name=\"track_remove_date_conf_title\">Fjerne dato?</string>\n    <string name=\"track_remove_start_date_conf_text\">Dette vil fjerne den tidligere valgte startdatoen fra %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Dette vil fjerne den tidligere valgte sluttdatoen fra %s</string>\n    <string name=\"pref_invalidate_download_cache\">Rydd ut nedlastingsindeksen</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Tving appen til å sjekke nedlastede kapitler på nytt</string>\n    <string name=\"label_started\">Startet</string>\n    <string name=\"label_completed_titles\">Fullførte oppføringer</string>\n    <string name=\"label_titles_section\">Oppføringer</string>\n    <string name=\"label_used\">Brukt</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dt</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"label_stats\">Statistikk</string>\n    <string name=\"label_total_chapters\">Totalt</string>\n    <string name=\"label_downloaded\">Nedlastet</string>\n    <string name=\"label_overview_section\">Oversikt</string>\n    <string name=\"label_read_duration\">Tid brukt</string>\n    <string name=\"label_titles_in_global_update\">Globalt oppdaterte</string>\n    <string name=\"label_read_chapters\">Lest</string>\n    <string name=\"label_tracked_titles\">Tracket oppføringer</string>\n    <string name=\"label_mean_score\">Snitt poengsum</string>\n    <string name=\"not_applicable\">I/A</string>\n    <string name=\"label_local\">Lokale</string>\n    <string name=\"label_tracker_section\">Trackere</string>\n    <string name=\"action_not_now\">Ikke nå</string>\n    <string name=\"information_no_manga_category\">Kategorien er tom</string>\n    <string name=\"pref_library_update_show_tab_badge\">Vis antall uleste på oppdateringsikonet</string>\n    <string name=\"copied_to_clipboard_plain\">Kopiert til utklippstavlen</string>\n    <string name=\"enhanced_services_not_installed\">Tilgjengelig, men kilden er ikke installert: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">Du har en oppføring i biblioteket med samme navn.\n\\n\n\\nØnsker du å fortsette likevel?</string>\n    <string name=\"pref_skip_dupe_chapters\">Hopp over dupliserte kapitler</string>\n    <string name=\"track_error\">%1$s feil: %2$s</string>\n    <string name=\"information_required_plain\">*påkrevd</string>\n    <string name=\"pref_hide_in_library_items\">Skjul oppføringer som allerede er i biblioteket</string>\n    <string name=\"action_copy_to_clipboard\">Kopier til utklippstavle</string>\n    <string name=\"action_update_category\">Oppdater kategori</string>\n    <string name=\"split_tall_images\">Del opp høye bilder</string>\n    <string name=\"overlay_header\">Elementer</string>\n    <string name=\"pref_page_rotate_invert\">Vend orienteringen av roterte brede sider</string>\n    <string name=\"pref_page_rotate\">Roter brede sider slik at de passer</string>\n    <string name=\"pref_debug_info\">Debug info</string>\n    <string name=\"manga_display_modified_interval_title\">Sett til å oppdatere hver</string>\n    <string name=\"skipped_reason_not_in_release_period\">Hoppet over fordi ingen utgivelse var forventet i dag</string>\n    <string name=\"action_set_interval\">Sett intervall</string>\n    <string name=\"action_filter_interval_custom\">Egendefinert oppdateringsintervall</string>\n    <string name=\"action_sort_next_updated\">Neste forventede oppdatering</string>\n    <string name=\"pref_chapter_swipe_end\">Sveip til høyre handling</string>\n    <string name=\"intervals_header\">Intervaller</string>\n    <string name=\"manga_display_interval_title\">Anslå hver</string>\n    <string name=\"delete_downloaded\">Slett nedlastede</string>\n    <string name=\"pref_update_only_in_release_period\">Forutsi neste utgivelsestidspunkt</string>\n    <string name=\"pref_double_tap_zoom\">Dobbelttrykk for å zoome</string>\n    <string name=\"pref_chapter_swipe_start\">Sveip til venstre handling</string>\n    <string name=\"track_delete_title\">Vil du fjerne sporing for %s?</string>\n    <string name=\"track_delete_remote_text\">Fjern fra %s også</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_text\">Dette vil fjerne sporingen lokalt.</string>\n    <string name=\"has_results\">Har resultater</string>\n    <string name=\"syncing_library\">Synkroniserer biblioteket</string>\n    <string name=\"library_sync_complete\">Biblioteksynkronisering fullført</string>\n    <string name=\"information_cloudflare_help\">Trykk her for å få hjelp med Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Nedlastingsindeksen er ugyldiggjort</string>\n    <string name=\"create_backup_file_error\">Kunne ikke opprette en backup-fil</string>\n    <string name=\"track_activity_name\">Sporerinnlogging</string>\n    <string name=\"unlock_app_title\">Lås opp %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Flytt serien til bunnen</string>\n    <string name=\"exception_offline\">Ingen internettforbindelse</string>\n    <string name=\"exception_http\">HTTP %d, sjekk nettsiden i WebView</string>\n    <string name=\"exception_unknown_host\">Kunne ikke nå %s</string>\n    <string name=\"notification_updating_progress\">Oppdaterer bibliotek… (%s)</string>\n    <string name=\"source_settings\">Kildeinnstillinger</string>\n    <string name=\"app_settings\">Programinnstillinger</string>\n    <string name=\"pref_relative_format\">Relative tidsstempler</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" istedenfor \\\"%2$s\\\"</string>\n    <string name=\"pref_storage_location\">Lagringsplass</string>\n    <string name=\"action_create\">Opprett</string>\n    <string name=\"relative_time_span_never\">Aldri</string>\n    <string name=\"pref_flash_page_summ\">Reduserer etterbilde på e-ink skjermer</string>\n    <string name=\"pref_storage_location_info\">Brukt for automatiske sikkerhetskopier, nedlastede kapitler og lokal kilde.</string>\n    <string name=\"action_apply\">Bruk</string>\n    <string name=\"action_revert_to_default\">Gjenopprett standardinnstillinger</string>\n    <string name=\"action_menu_overflow_description\">Flere valg</string>\n    <string name=\"last_auto_backup_info\">Siste automatisk sikkerhetskopi: %s</string>\n    <string name=\"selected\">Valgt</string>\n    <string name=\"no_scanlators_found\">Ingen skanningsoversettere funnet</string>\n    <string name=\"not_selected\">Ikke valgt</string>\n    <string name=\"scanlator\">Skanningsoversetter</string>\n    <string name=\"pref_flash_page\">Blink ved sidebytte</string>\n    <string name=\"pref_storage_usage\">Lagringsbruk</string>\n    <string name=\"action_bar_up_description\">Naviger opp</string>\n    <string name=\"action_sort_tracker_score\">Sporer poengsum</string>\n    <string name=\"label_data_storage\">Data og lagring</string>\n    <string name=\"file_null_uri_error\">Ingen fil valgt</string>\n    <string name=\"exclude_scanlators\">Ekskluder skanningsoversettere</string>\n    <string name=\"onboarding_storage_action_select\">Velg en mappe</string>\n    <string name=\"pref_onboarding_guide\">Introduksjonsguide</string>\n    <string name=\"onboarding_guides_new_user\">Ny til %s? Vi anbefaler å sjekke ut startveiledningen.</string>\n    <string name=\"onboarding_action_finish\">Kom i gang</string>\n    <string name=\"onboarding_storage_selection_required\">En mappe må velges</string>\n    <string name=\"onboarding_heading\">Velkommen!</string>\n    <string name=\"onboarding_guides_returning_user\">Reinstallerer du %s?</string>\n    <string name=\"onboarding_action_skip\">Hopp over</string>\n    <string name=\"onboarding_action_next\">Neste</string>\n    <string name=\"onboarding_description\">La oss sette opp noen ting først. Du kan alltid endre disse i innstillingene senere også.</string>\n    <string name=\"no_location_set\">Ingen lagringsplassering angitt</string>\n    <string name=\"onboarding_storage_info\">Velg en mappe der %1$s vil lagre kapittelnedlastinger, sikkerhetskopier og mer.\n\\n\n\\nEn dedikert mappe anbefales.\n\\n\n\\nValgt mappe: %2$s</string>\n    <string name=\"manga_interval_expected_update\">Nye kapitler forventes om omtrent %1$s, sjekker omtrent hver %2$s.</string>\n    <string name=\"onboarding_permission_notifications\">Tillat varslinger</string>\n    <string name=\"onboarding_permission_install_apps\">Tillat å installere apper</string>\n    <string name=\"available_disk_space_info\">Tilgjengelig: %1$s / Totalt: %2$s</string>\n    <string name=\"manga_interval_custom_amount\">Egendefinert oppdateringsfrekvens:</string>\n    <string name=\"label_add_repo_input\">Pakkebrønn URL</string>\n    <string name=\"invalid_backup_file_error\">Fullstendig feil:</string>\n    <string name=\"error_repo_exists\">Denne pakkebrønnen finnes allerede!</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Unngå avbrudd i langvarige oppdateringer av biblioteket, nedlastinger og gjenoppretting av sikkerhetskopier.</string>\n    <string name=\"pref_library_update_smart_update\">Smart oppdatering</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Batteribruk i bakgrunnen</string>\n    <string name=\"onboarding_permission_install_apps_description\">For å installere kildeutvidelser.</string>\n    <string name=\"invalid_repo_name\">Ugyldig pakkebrønn URL</string>\n    <string name=\"action_add_repo_message\">Legg til ekstra pakkebrønner i Mihon. URL-en må ende med \\\"index.min.json\\\".</string>\n    <string name=\"onboarding_permission_notifications_description\">Få varsler for oppdateringer i biblioteket og mer.</string>\n    <string name=\"ext_permission_install_apps_warning\">Tillatelse er nødvendig for å installere utvidelser. Trykk her for å tillate.</string>\n    <string name=\"delete_repo_confirmation\">Ønsker du å slette pakkebrønnen \\\"%s\\\"?</string>\n    <string name=\"action_delete_repo\">Slett pakkebrønn</string>\n    <string name=\"action_add_repo\">Legg til pakkebrønn</string>\n    <string name=\"private_settings\">Inkluder sensitive innstillinger (f.eks., innloggingstoken for sporer)</string>\n    <string name=\"information_empty_repos\">Du har ingen pakkebrønner satt opp.</string>\n    <string name=\"onboarding_permission_action_grant\">Tillat</string>\n    <string name=\"label_extension_repos\">Utvidelsepakkebrønner</string>\n    <string name=\"onboarding_storage_help_info\">Oppdaterer du fra en eldre versjon og er usikker på hva du skal velge? Sjekk lagringsguiden for mer informasjon.</string>\n    <string name=\"onboarding_storage_help_action\">Lagringsguiden</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"manga_interval_expected_update_soon\">Snart</string>\n    <string name=\"ext_revoke_trust\">Fjern tilliten til ukjente utvidelser</string>\n    <string name=\"action_open_repo\">Åpne pakkebrønnen</string>\n    <string name=\"label_upcoming\">Kommende</string>\n    <string name=\"action_add_anyway\">Legg til likevel</string>\n    <string name=\"action_migrate_duplicate\">Flytt eksisterende oppføring</string>\n    <string name=\"action_replace_repo\">Erstatt</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ne/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">हिजो</item>\n        <item quantity=\"other\">%1$d दिन अघि</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s मिनेट पछि</item>\n        <item quantity=\"other\">%1$s मिनेट पछि</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d वर्ग</item>\n        <item quantity=\"other\">%d वर्गहरू</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%2$s त्रुटिको साथ %1$s मा सम्पन्न भयो</item>\n        <item quantity=\"other\">%2$s त्रुटिहरूसँग %1$s मा सम्पन्न भयो</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d नयाँ अध्याय</item>\n        <item quantity=\"other\">%1$d नयाँ अध्यायहरू</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">एक्सटेन्शन अपडेट उपलब्ध छ</item>\n        <item quantity=\"other\">%d एक्सटेन्शन अपडेटहरू उपलब्ध छन्</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">अध्याय %1$s र 1 थप</item>\n        <item quantity=\"other\">अध्याय %1$s र %2$d थप</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d इन्ट्रीको लागि</item>\n        <item quantity=\"other\">%d इन्ट्रीहरूको लागि</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s बाँकी</item>\n        <item quantity=\"other\">%1$s बाँकी</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s अध्याय</item>\n        <item quantity=\"other\">%1$s अध्यायहरू</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d अध्याय छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ</item>\n        <item quantity=\"other\">%d अध्यायहरू छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d ट्र्याकर</item>\n        <item quantity=\"other\">%d ट्र्याकरहरू</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">अर्को नपढिएको अध्याय</item>\n        <item quantity=\"other\">अर्को %d नपढिएका अध्यायहरू</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">अर्को अध्याय</item>\n        <item quantity=\"other\">अर्को %d अध्यायहरू</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s अध्याय छुटेको छ</item>\n        <item quantity=\"other\">%1$s अध्यायहरू छुटेका छन्</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">१ दिन</item>\n        <item quantity=\"other\">%d दिन</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d रेपो</item>\n        <item quantity=\"other\">%d रेपोहरु</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">भोलि</item>\n        <item quantity=\"other\">%1$d दिनमा</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ne/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"theme_dark\">अन</string>\n    <string name=\"theme_light\">अफ</string>\n    <string name=\"pref_category_theme\">थीम</string>\n    <string name=\"pref_category_about\">बारेमा</string>\n    <string name=\"pref_category_advanced\">उन्नत सेटिंग्स</string>\n    <string name=\"pref_category_tracking\">ट्र्याकिङ</string>\n    <string name=\"pref_category_downloads\">डाउनलोड्स</string>\n    <string name=\"pref_category_reader\">रिडर</string>\n    <string name=\"pref_category_library\">पुस्तकालय</string>\n    <string name=\"pref_category_general\">सामान्य</string>\n    <string name=\"app_not_available\">एप उपलब्ध छैन</string>\n    <string name=\"loading\">लोड हुँदैछ …</string>\n    <string name=\"action_webview_refresh\">रिफ्रेस गर्नुहोस्</string>\n    <string name=\"action_webview_forward\">अगाडि</string>\n    <string name=\"action_webview_back\">पछाडि</string>\n    <string name=\"action_restore\">रिस्टोर गर्नुहोस्</string>\n    <string name=\"action_open_log\">लग खोल्नुहोस्</string>\n    <string name=\"action_undo\">अन्डु गर्नुहोस्</string>\n    <string name=\"action_reset\">रिसेट गर्नुहोस्</string>\n    <string name=\"action_save\">सेभ गर्नुहोस्</string>\n    <string name=\"action_share\">साझा गर्नुहोस्</string>\n    <string name=\"action_install\">स्थापना गर्नुहोस्</string>\n    <string name=\"action_move_to_bottom\">तल सार्नुहोस्</string>\n    <string name=\"action_move_to_top\">शीर्षमा सार्नुहोस्</string>\n    <string name=\"action_desc\">घट्दो क्रममा</string>\n    <string name=\"action_asc\">बढ्दो क्रममा</string>\n    <string name=\"action_oldest\">सबैभन्दा पुरानो</string>\n    <string name=\"action_newest\">सबैभन्दा नयाँ</string>\n    <string name=\"action_order_by_chapter_number\">अध्याय संख्या द्वारा</string>\n    <string name=\"action_order_by_upload_date\">अपलोड मिति द्वारा</string>\n    <string name=\"action_cancel_all\">सबै रद्द गर्नुहोस्</string>\n    <string name=\"action_cancel\">रद्द गर्नुहोस्</string>\n    <string name=\"action_unpin\">अनपिन</string>\n    <string name=\"action_pin\">पिन</string>\n    <string name=\"action_disable\">असक्षम गर्नुहोस्</string>\n    <string name=\"action_display_show_number_of_items\">वस्तुहरूको संख्या देखाउनुहोस्</string>\n    <string name=\"action_display_show_tabs\">वर्ग ट्याबहरू देखाउनुहोस्</string>\n    <string name=\"action_display_download_badge\">डाउनलोड गरिएका अध्यायहरू</string>\n    <string name=\"action_display_comfortable_grid\">आरामदायक ग्रिड</string>\n    <string name=\"action_display_list\">सूची</string>\n    <string name=\"action_display_grid\">कम्प्याक्ट ग्रिड</string>\n    <string name=\"action_display\">प्रदर्शन</string>\n    <string name=\"action_migrate\">स्थानान्तरण</string>\n    <string name=\"action_open_in_browser\">ब्राउजरमा खाेल्नुहाेस्</string>\n    <string name=\"action_resume\">जारी राख्नुहोस्</string>\n    <string name=\"action_start\">सुरु गर्नुहोस्</string>\n    <string name=\"action_remove\">हटाउनुहोस्</string>\n    <string name=\"action_retry\">पुनःप्रयास गर्नुहोस्</string>\n    <string name=\"action_next_chapter\">अर्को अध्याय</string>\n    <string name=\"action_previous_chapter\">अघिल्लो अध्याय</string>\n    <string name=\"action_pause\">रोक्नुहोस्</string>\n    <string name=\"action_view_chapters\">अध्यायहरू हेर्नुहोस्</string>\n    <string name=\"action_edit_cover\">आवरण सम्पादन गर्नुहोस्</string>\n    <string name=\"action_move_category\">वर्गहरू सेट गर्नुहोस्</string>\n    <string name=\"action_rename_category\">वर्गहरू को नाम बदल्नुहोस्</string>\n    <string name=\"action_edit_categories\">वर्गहरू सम्पादन गर्नुहोस्</string>\n    <string name=\"action_add_category\">वर्ग थप्नुहोस्</string>\n    <string name=\"action_add\">थप्नुहोस्</string>\n    <string name=\"action_edit\">सम्पादन गर्नुहोस्</string>\n    <string name=\"action_disable_all\">सबैलाई असक्षम गर्नुहोस्</string>\n    <string name=\"action_enable_all\">सबैलाई सक्षम गर्नुहोस्</string>\n    <string name=\"action_update_library\">पुस्तकालय अपडेट गर्नुहोस्</string>\n    <string name=\"action_delete\">हटाउनुहोस्</string>\n    <string name=\"action_remove_bookmark\">अध्यायमा पुस्तकचिनो हटाउनुहोस्</string>\n    <string name=\"action_bookmark\">अध्यायमा पुस्तकचिनो लगाउनुहोस्</string>\n    <string name=\"action_download\">डाउनलोड</string>\n    <string name=\"action_mark_previous_as_read\">अघिल्लोलाई पढिएको चिन्ह लगाउनुहोस्</string>\n    <string name=\"action_mark_as_unread\">नपढिएको चिन्ह लगाउनुहोस्</string>\n    <string name=\"action_mark_as_read\">पढिसकेको चिन्ह लगाउनुहोस्</string>\n    <string name=\"action_select_all\">सबै चयन गर्नुहोस्</string>\n    <string name=\"action_global_search\">ग्लोबल खोज</string>\n    <string name=\"action_search_settings\">सेटिंग्समा खोज्नुहोस्</string>\n    <string name=\"action_search\">खोज्नुहोस्</string>\n    <string name=\"action_sort_last_read\">अन्तिम पढिएको</string>\n    <string name=\"action_sort_total\">कुल अध्यायहरू</string>\n    <string name=\"action_sort_alpha\">वर्णमाला अनुसार</string>\n    <string name=\"action_filter_empty\">फिल्टर हटाउनुहोस्</string>\n    <string name=\"action_filter_unread\">नपढिएको</string>\n    <string name=\"action_filter_tracked\">ट्र्याक गरिएको</string>\n    <string name=\"action_filter_bookmarked\">पुस्तकचिनो लगाइएको</string>\n    <string name=\"action_filter\">फिल्टर</string>\n    <string name=\"action_menu\">मेनू</string>\n    <string name=\"action_settings\">सेटिंग्स</string>\n    <string name=\"history\">इतिहास</string>\n    <string name=\"track\">ट्र्याकिङ</string>\n    <string name=\"chapters\">अध्याय</string>\n    <string name=\"manga\">पुस्तकालयका इन्ट्रीहरू</string>\n    <string name=\"categories\">वर्गहरू</string>\n    <string name=\"information_empty_category\">तपाईंसँग कुनै वर्गहरू छैन। वर्ग बनाएर पुस्तकालय व्यवस्थित गर्न प्लस बटन थिच्नुहोस्।</string>\n    <string name=\"information_empty_library\">तपाईंको पुस्तकालय खाली छ</string>\n    <string name=\"information_no_recent_manga\">हालै केहि पढेको छैन</string>\n    <string name=\"information_no_recent\">हालैका कुनै अपडेट छैन</string>\n    <string name=\"label_download_queue\">डाउनलोड सूची</string>\n    <string name=\"information_no_downloads\">कुनै डाउनलोड्स छैन</string>\n    <string name=\"label_help\">मद्दत</string>\n    <string name=\"label_extension_info\">एक्सटेन्शनको जानकारी</string>\n    <string name=\"label_extensions\">एक्सटेन्शन</string>\n    <string name=\"label_migration\">स्थानान्तरण</string>\n    <string name=\"label_backup\">ब्याकअप र रिस्टोर</string>\n    <string name=\"label_sources\">स्रोतहरू</string>\n    <string name=\"label_recent_manga\">इतिहास</string>\n    <string name=\"label_recent_updates\">अपडेट्स</string>\n    <string name=\"label_library\">पुस्तकालय</string>\n    <string name=\"label_settings\">सेटिंग्स</string>\n    <string name=\"label_more\">अरू</string>\n    <string name=\"name\">नाम</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare लाई बाइपास गर्न असफल भयो</string>\n    <string name=\"action_display_mode\">प्रदर्शन मोड</string>\n    <string name=\"action_select_inverse\">उल्टो चयन गर्नुहोस्</string>\n    <string name=\"action_sort_date_added\">राखिएको मिती</string>\n    <string name=\"action_sort_chapter_fetch_date\">अध्याय ल्याएको मिति</string>\n    <string name=\"action_sort_latest_chapter\">नवीनतम अध्याय</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">पुस्तकालय अपडेट गर्दा नयाँ आवरण र विवरणहरूको लागि जाँच गर्नुहोस्</string>\n    <string name=\"pref_library_update_refresh_metadata\">मेटाडेटा स्वतः रिफ्रेस गर्नुहोस्</string>\n    <string name=\"pref_update_only_non_completed\">\\\"समाप्त\\\" स्थिति भएको इन्ट्रीहरू छोड्नुहोस्</string>\n    <string name=\"restrictions\">प्रतिबन्धहरू: %s</string>\n    <string name=\"charging\">चार्ज हुँदा</string>\n    <string name=\"pref_library_update_restriction\">स्वचालित अपडेट्स यन्त्र प्रतिबन्धहरू</string>\n    <string name=\"update_weekly\">साप्ताहिक</string>\n    <string name=\"update_48hour\">प्रत्येक २ दिन</string>\n    <string name=\"update_24hour\">दैनिक</string>\n    <string name=\"update_12hour\">प्रत्येक १२ घण्टा</string>\n    <string name=\"update_6hour\">प्रत्येक ६ घण्टा</string>\n    <string name=\"update_never\">अफ</string>\n    <string name=\"pref_library_update_interval\">स्वचालित अपडेट्स</string>\n    <string name=\"pref_category_library_update\">ग्लोबल अपडेट</string>\n    <string name=\"landscape\">ल्याण्डस्केप</string>\n    <string name=\"pref_library_columns\">प्रति रो वस्तुहरू</string>\n    <string name=\"pref_category_display\">प्रदर्शन</string>\n    <string name=\"relative_time_today\">आज</string>\n    <string name=\"pref_show_nsfw_source\">स्रोत र एक्सटेन्शन सूची मा देखाउनुहोस्</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) स्रोतहरू</string>\n    <string name=\"hide_notification_content\">सूचना को सामग्री लुकाउनुहोस्</string>\n    <string name=\"secure_screen_summary\">एपहरू स्विच गर्दा \\\"स्क्रिन सुरक्षित गर्नुहोस्\\\" ले एप सामग्रीहरू लुकाउँछ र स्क्रिनसटहरू रोक्छ</string>\n    <string name=\"secure_screen\">स्क्रिन सुरक्षित गर्नुहोस्</string>\n    <string name=\"lock_never\">कहिल्यै हैन</string>\n    <string name=\"lock_always\">सधैं</string>\n    <string name=\"lock_when_idle\">निष्क्रिय रहेमा लक होस्</string>\n    <string name=\"lock_with_biometrics\">अनलक गर्न आवश्यक छ</string>\n    <string name=\"pref_category_security\">सुरक्षा र गोपनीयता</string>\n    <string name=\"pref_manage_notifications\">सूचनाहरू व्यवस्थापन गर्नुहोस्</string>\n    <string name=\"pref_date_format\">मिति ढाँचा</string>\n    <string name=\"pref_dark_theme_pure_black\">शुद्ध कालो डार्क मोड</string>\n    <string name=\"theme_yotsuba\">योत्सुबा</string>\n    <string name=\"theme_yinyang\">यिन र यांग</string>\n    <string name=\"theme_tealturquoise\">टील र फिरोजा</string>\n    <string name=\"theme_tako\">टाको</string>\n    <string name=\"theme_strawberrydaiquiri\">स्ट्रबेरी दाइक्वरी</string>\n    <string name=\"theme_midnightdusk\">मिडनाइट डस्क</string>\n    <string name=\"theme_greenapple\">हरियो स्याउ</string>\n    <string name=\"theme_monet\">गतिशील</string>\n    <string name=\"pref_app_theme\">एपको थीम</string>\n    <string name=\"theme_system\">सिस्टम पालना गर्नुहोस्</string>\n    <string name=\"pref_category_appearance\">रूप</string>\n    <string name=\"action_start_downloading_now\">अहिले डाउनलोड गर्न सुरु गर्नुहोस्</string>\n    <string name=\"action_show_errors\">विवरणहरू हेर्न ट्याप गर्नुहोस्</string>\n    <string name=\"action_sort\">क्रमबद्ध</string>\n    <string name=\"cancel_all_for_series\">यी श्रृङ्खलाका सबै रद्द गर्नुहोस्</string>\n    <string name=\"action_display_local_badge\">लोकल स्रोत</string>\n    <string name=\"action_open_in_web_view\">WebView मा खोल्नुहोस्</string>\n    <string name=\"confirm_lock_change\">परिवर्तन पुष्टि गर्न प्रमाणित गर्नुहोस्</string>\n    <string name=\"label_default\">पूर्वनिर्धारित</string>\n    <string name=\"pref_tablet_ui_mode\">ट्याब्लेट UI</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">यन्त्रको सेटिंग्स खोल्न सकिएन</string>\n    <string name=\"pref_incognito_mode_summary\">पढिएको इतिहास रोक्छ</string>\n    <string name=\"pref_incognito_mode\">गुप्त मोड</string>\n    <string name=\"label_downloaded_only\">डाउनलोड गरिएको मात्र</string>\n    <string name=\"pref_acra_summary\">कुनै पनि बगहरू ठीक गर्न मद्दत गर्दछ। कुनै संवेदनशील डेटा पठाइने छैन</string>\n    <string name=\"pref_enable_acra\">Crash रिपोर्ट पठाउनुहोस्</string>\n    <string name=\"updated_version\">v%1$s मा अपडेट गरियो</string>\n    <string name=\"check_for_updates\">अपडेटका लागि जाँच गर्नुहोस्</string>\n    <string name=\"decode_image_error\">छवि लोड गर्न सकिएन</string>\n    <string name=\"download_queue_error\">अध्यायहरू डाउनलोड गर्न सकिएन। तपाईं डाउनलोड सूचीमा फेरि प्रयास गर्न सक्नुहुन्छ</string>\n    <string name=\"ext_uninstall\">अनइन्स्टल गर्नुहोस्</string>\n    <string name=\"third_to_last\">अन्तिम पढिएको अध्याय भन्दा २ अध्याय अघि</string>\n    <string name=\"portrait\">पोर्ट्रेट</string>\n    <string name=\"pref_color_filter_mode\">रङ फिल्टर मिश्रण मोड</string>\n    <string name=\"default_category_summary\">सधैं सोध्नुहोस्</string>\n    <string name=\"all\">सबै</string>\n    <string name=\"none\">कुनै पनि हैन</string>\n    <string name=\"ext_updates_pending\">विचाराधीन अपडेट्स</string>\n    <string name=\"ext_update\">अपडेट</string>\n    <string name=\"ext_update_all\">सबै अपडेट गर्नुहोस्</string>\n    <string name=\"ext_obsolete\">अप्रचलित</string>\n    <string name=\"ext_install\">स्थापना गर्नुहोस्</string>\n    <string name=\"ext_pending\">विचाराधीन</string>\n    <string name=\"ext_installed\">स्थापना गरियो</string>\n    <string name=\"ext_trust\">विश्वास</string>\n    <string name=\"obsolete_extension_message\">यो एक्सटेन्शन अब उपलब्ध छैन। यसले राम्ररी काम नगर्न सक्छ र एपमा समस्या ल्याउन सक्छ। यसलाई अनइन्स्टल गर्न सिफारिस गरिन्छ।</string>\n    <string name=\"ext_nsfw_warning\">यस एक्सटेन्शनको स्रोतहरूमा NSFW (१८+) सामग्री समावेश हुन सक्छ</string>\n    <string name=\"ext_install_service_notif\">एक्सटेन्शन स्थापना गर्दै…</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku चलिरहेको छैन</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizuku लाई एक्सटेन्शन इंस्टलरको रूपमा प्रयोग गर्न Shizuku स्थापना गर्नुहोस् र सुरु गर्नुहोस्।</string>\n    <string name=\"pref_show_navigation_mode\">नेभिगेसन लेआउट ओभरले देखाउनुहोस्</string>\n    <string name=\"pref_dual_page_split\">चौडा पृष्ठहरू विभाजित गर्नुहोस्</string>\n    <string name=\"pref_dual_page_invert\">विभाजित पृष्ठ प्लेसमेन्ट उल्टाउनुहोस्</string>\n    <string name=\"pref_cutout_short\">कटआउट क्षेत्रमा सामग्री देखाउनुहोस्</string>\n    <string name=\"pref_page_transitions\">पृष्ठ ट्रान्जिसन एनिमेट गर्नुहोस्</string>\n    <string name=\"pref_double_tap_anim_speed\">एनिमेसनको गति डबल ट्याप गर्नुहोस्</string>\n    <string name=\"pref_show_reading_mode_summary\">रिडर खोल्दा छोटकरीमा हालको मोड देखाउनुहोस्</string>\n    <string name=\"on\">अन</string>\n    <string name=\"pref_custom_brightness\">कस्टम चमक</string>\n    <string name=\"pref_skip_read_chapters\">पढिएको चिन्ह लगाइएका अध्यायहरू छोड्नुहोस्</string>\n    <string name=\"pref_reader_navigation\">नेभिगेसन</string>\n    <string name=\"pref_read_with_volume_keys\">भोल्युम कीहरू</string>\n    <string name=\"tapping_inverted_vertical\">ठाडो</string>\n    <string name=\"tapping_inverted_both\">दुबै</string>\n    <string name=\"pref_reader_actions\">कार्यहरू</string>\n    <string name=\"pref_read_with_long_tap\">लामो ट्यापमा कार्यहरू देखाउनुहोस्</string>\n    <string name=\"pref_reader_theme\">ब्याकग्राउण्ड रङ</string>\n    <string name=\"gray_background\">खैरो</string>\n    <string name=\"black_background\">कालो</string>\n    <string name=\"automatic_background\">स्वत</string>\n    <string name=\"l_nav\">L आकारको</string>\n    <string name=\"ext_downloading\">डाउनलोड गर्दै</string>\n    <string name=\"ext_installing\">स्थापना गर्दै</string>\n    <string name=\"ext_untrusted\">अविश्वसनीय</string>\n    <string name=\"ext_nsfw_short\">१८+</string>\n    <string name=\"filter_mode_overlay\">ओभरले</string>\n    <string name=\"pref_skip_filtered_chapters\">फिल्टर गरिएका अध्यायहरू छोड्नुहोस्</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">भोल्युम कीहरू उल्टाउनुहोस्</string>\n    <string name=\"pref_read_with_tapping_inverted\">ट्याप क्षेत्रहरू उल्टाउनुहोस्</string>\n    <string name=\"tapping_inverted_none\">कुनै पनि हैन</string>\n    <string name=\"tapping_inverted_horizontal\">तेर्सो</string>\n    <string name=\"ext_installer_legacy\">विरासत</string>\n    <string name=\"pref_custom_color_filter\">कस्टम रङ फिल्टर</string>\n    <string name=\"filter_mode_multiply\">गुणन</string>\n    <string name=\"filter_mode_screen\">स्क्रिन</string>\n    <string name=\"filter_mode_lighten\">डज / चम्किलो</string>\n    <string name=\"filter_mode_darken\">जलाउनु / अँध्यारो गर्नु</string>\n    <string name=\"pref_create_folder_per_manga\">फरक फोल्डरमा पृष्ठहरू सेभ गर्नुहोस्</string>\n    <string name=\"pref_keep_screen_on\">स्क्रिन अन राख्नुहोस्</string>\n    <string name=\"pref_create_folder_per_manga_summary\">इन्ट्रीहरूको शीर्षक अनुसार फोल्डरहरू सिर्जना गर्दछ</string>\n    <string name=\"action_sort_count\">कुल इन्ट्रीहरू</string>\n    <string name=\"label_warning\">सावधान</string>\n    <string name=\"action_display_language_badge\">भाषा</string>\n    <string name=\"parental_controls_info\">यसले अनौपचारिक वा सम्भावित रूपमा गलत रूपमा फ्ल्याग गरिएका एक्सटेन्शनहरूलाई एप भित्र NSFW (१८+) सामग्री आउन बाट रोक्दैन।</string>\n    <string name=\"default_category\">पूर्वनिर्धारित वर्ग</string>\n    <string name=\"categorized_display_settings\">क्रमबद्धका लागि प्रति-वर्ग सेटिंग्स</string>\n    <string name=\"include\">समावेश गर्नुहोस्: %s</string>\n    <string name=\"pref_library_update_categories_details\">\\\"बहिष्कृत\\\" वर्गहरूमा रहेका इन्ट्री \\\"समावेश गरिएका\\\" वर्गहरूमा भए पनि अपडेट हुने छैनन्।</string>\n    <string name=\"ext_app_info\">एप जानकारी</string>\n    <string name=\"untrusted_extension\">अविश्वसनीय एक्सटेन्शन</string>\n    <string name=\"exclude\">समावेश नगर्नुहोस्: %s</string>\n    <string name=\"ext_installer_pref\">इंस्टलर</string>\n    <string name=\"untrusted_extension_message\">यो एक्सटेन्शन अविश्वसनीय प्रमाणपत्र सँग हस्ताक्षर गरिएको थियो र सक्रिय गरिएको थिएन।\n\\n\n\\nएक खराब एक्सटेन्शनले कुनै पनि भण्डारण लगइन प्रमाणहरू पढ्न वा मनमानी कोड कार्यान्वयन गर्न सक्छ।\n\\n\n\\nयस प्रमाणपत्रमा विश्वास गरेर तपाईंले यी जोखिमहरू स्वीकार गर्नुहुन्छ।</string>\n    <string name=\"pref_fullscreen\">पूर्ण स्क्रिन</string>\n    <string name=\"pref_show_navigation_mode_summary\">रिडर खोलिएको बेला छोटकरीमा देखाउनुहोस्</string>\n    <string name=\"pref_dual_page_invert_summary\">यदि विभाजित चौडा पृष्ठहरूको प्लेसमेन्ट पढ्ने दिशासँग मेल खाँदैन</string>\n    <string name=\"pref_show_reading_mode\">पढ्ने मोड देखाउनुहोस्</string>\n    <string name=\"pref_show_page_number\">पृष्ठ नम्बर देखाउनुहोस्</string>\n    <string name=\"pref_crop_borders\">सीमाना क्रप गर्नुहोस्</string>\n    <string name=\"off\">अफ</string>\n    <string name=\"pref_grayscale\">ग्रे-स्केल</string>\n    <string name=\"pref_inverted_colors\">उल्टो</string>\n    <string name=\"white_background\">सेतो</string>\n    <string name=\"pref_viewer_type\">पूर्वनिर्धारित पढ्ने मोड</string>\n    <string name=\"connected_to_wifi\">Wi-Fi मा मात्र</string>\n    <string name=\"update_72hour\">प्रत्येक ३ दिन</string>\n    <string name=\"edge_nav\">कुना</string>\n    <string name=\"vertical_viewer\">ठाडो</string>\n    <string name=\"webtoon_viewer\">लामो स्ट्रिप</string>\n    <string name=\"vertical_plus_viewer\">खाली ठाउँ भएको लामो स्ट्रिप</string>\n    <string name=\"nav_zone_prev\">पहिलेको</string>\n    <string name=\"kindlish_nav\">किन्डल जस्तै</string>\n    <string name=\"right_to_left_viewer\">दायाँ देखि बायाँ</string>\n    <string name=\"right_and_left_nav\">दायाँ र बायाँ</string>\n    <string name=\"nav_zone_next\">अर्को</string>\n    <string name=\"nav_zone_left\">बायाँ</string>\n    <string name=\"left_to_right_viewer\">बायाँ देखि दायाँ</string>\n    <string name=\"nav_zone_right\">दायाँ</string>\n    <string name=\"browse\">ब्राउज</string>\n    <string name=\"creating_backup\">ब्याकअप सिर्जना गर्दै</string>\n    <string name=\"zoom_start_center\">बीचमा</string>\n    <string name=\"double_tap_anim_speed_normal\">सामान्य</string>\n    <string name=\"double_tap_anim_speed_0\">कुनै एनिमेसन छैन</string>\n    <string name=\"double_tap_anim_speed_fast\">छिटो</string>\n    <string name=\"pref_rotation_type\">पूर्वनिर्धारित रोटेशन</string>\n    <string name=\"rotation_type\">रोटेशन</string>\n    <string name=\"rotation_free\">फ्री</string>\n    <string name=\"rotation_landscape\">ल्याण्डस्केप</string>\n    <string name=\"rotation_force_landscape\">लक गरिएको ल्याण्डस्केप</string>\n    <string name=\"color_filter_r_value\">रातो</string>\n    <string name=\"color_filter_g_value\">हरियो</string>\n    <string name=\"pref_category_reading_mode\">पढ्ने मोड</string>\n    <string name=\"pref_hide_threshold\">स्क्रोलमा मेनु लुकाउनका लागि संवेदनशीलता</string>\n    <string name=\"second_to_last\">अन्तिम पढिएको अध्याय भन्दा पहिले १ अध्याय</string>\n    <string name=\"pref_category_auto_download\">स्वत: डाउनलोड गर्नुहोस्</string>\n    <string name=\"tracking_guide\">ट्र्याकिङ गाइड</string>\n    <string name=\"pref_auto_update_manga_sync\">पढिसकेपछि प्रगति अपडेट गर्नुहोस्</string>\n    <string name=\"pref_remove_bookmarked_chapters\">पुस्तकचिनो लगाइएका अध्यायहरू हटाउन अनुमति दिनुहोस्</string>\n    <string name=\"last_read_chapter\">अन्तिम पढिएको अध्याय</string>\n    <string name=\"enhanced_tracking_info\">विशिष्ट स्रोतहरूको लागि परिष्कृत सुविधाहरू प्रदान गर्दछ। तपाईंको पुस्तकालयमा थप्दा इन्ट्री स्वचालित रूपमा ट्र्याक गरिन्छ।</string>\n    <string name=\"action_track\">ट्र्याक</string>\n    <string name=\"restore_completed\">रिस्टोर सम्पन्न भयो</string>\n    <string name=\"pref_clear_cookies\">कुकीहरू खाली गर्नुहोस्</string>\n    <string name=\"backup_choice\">तपाई के ब्याकअप गर्न चाहनुहुन्छ?</string>\n    <string name=\"creating_backup_error\">ब्याकअप असफल भयो</string>\n    <string name=\"pref_dns_over_https\">HTTPS (DoH) माथि DNS</string>\n    <string name=\"requires_app_restart\">प्रभाव पार्न एप फेरि सुरु गर्न आवश्यक छ</string>\n    <string name=\"notification_cover_update_failed\">आवरण अपडेट गर्न असफल भयो</string>\n    <string name=\"notification_first_add_to_library\">यो गर्नु अघि कृपया आफ्नो पुस्तकालयमा यस इन्ट्रीलाई राख्नुहोस्</string>\n    <string name=\"download_notifier_downloader_title\">डाउनलोडर</string>\n    <string name=\"restore_duration\">%1$02d मिनेट, %2$02d सेकेन्ड</string>\n    <string name=\"backup_in_progress\">ब्याकअप पहिले नै प्रगतिमा छ</string>\n    <string name=\"update_check_notification_update_available\">नयाँ संस्करण उपलब्ध छ!</string>\n    <string name=\"rotation_portrait\">पोर्ट्रेट</string>\n    <string name=\"scale_type_fit_height\">फिट उचाइ</string>\n    <string name=\"scale_type_fit_width\">फिट चौडाइ</string>\n    <string name=\"services\">ट्र्याकर</string>\n    <string name=\"invalid_backup_file\">अवैध ब्याकअप फाइल</string>\n    <string name=\"backup_created\">ब्याकअप सिर्जना गरियो</string>\n    <string name=\"backup_restore_content_full\">ब्याकअप फाइलबाट डेटा रिस्टोर हुनेछ।\n\\n\n\\nतपाईंले कुनै पनि छुटेको एक्सटेन्शनहरू स्थापना गर्न र तिनीहरूलाई प्रयोग गर्न पछि ट्र्याकिङ सेवाहरूमा लगइन गर्न आवश्यक हुनेछ।</string>\n    <string name=\"restore_in_progress\">रिस्टोर पहिले नै प्रगतिमा छ</string>\n    <string name=\"label_network\">नेटवर्किङ</string>\n    <string name=\"restoring_backup_error\">ब्याकअप रिस्टोर असफल भयो</string>\n    <string name=\"backup_info\">तपाईंले ब्याकअपको प्रतिलिपिहरू अन्य ठाउँहरूमा पनि राख्नु पर्छ। ब्याकअपहरूमा कुनै पनि भण्डारण गरिएका पासवर्डहरू सहित संवेदनशील डेटा समावेश हुन सक्छ; साझा गर्दा होसियार ।</string>\n    <string name=\"notification_new_chapters\">नयाँ अध्यायहरू फेला पर्यो</string>\n    <string name=\"pref_highest\">सबैभन्दा उच्च</string>\n    <string name=\"disabled\">असक्षम</string>\n    <string name=\"enhanced_services\">परिष्कृत ट्र्याकरहरू</string>\n    <string name=\"restoring_backup_canceled\">रिस्टोर रद्द गरियो</string>\n    <string name=\"download_notifier_title_error\">त्रुटि</string>\n    <string name=\"scale_type_stretch\">तन्काउनुहोस्</string>\n    <string name=\"scale_type_smart_fit\">स्मार्ट फिट</string>\n    <string name=\"zoom_start_automatic\">स्वचालित</string>\n    <string name=\"rotation_force_portrait\">लक गरिएको पोर्ट्रेट</string>\n    <string name=\"color_filter_a_value\">अल्फा</string>\n    <string name=\"pref_always_show_chapter_transition\">अध्याय ट्रान्जिसन सधैँ देखाउनुहोस्</string>\n    <string name=\"color_filter_b_value\">निलो</string>\n    <string name=\"pref_category_reading\">पढ्दै</string>\n    <string name=\"pref_webtoon_side_padding\">साइड प्याडिङ</string>\n    <string name=\"pref_low\">कम</string>\n    <string name=\"pref_high\">उच्च</string>\n    <string name=\"pref_lowest\">सबैभन्दा कम</string>\n    <string name=\"pref_category_delete_chapters\">अध्यायहरू हटाउनुहोस्</string>\n    <string name=\"pref_remove_after_marked_as_read\">आफै पढिएको रूपमा चिन्ह लगाइएपछि</string>\n    <string name=\"pref_remove_after_read\">पढिसकेपछि स्वचालित रूपमा हटाउनुहोस्</string>\n    <string name=\"save_chapter_as_cbz\">CBZ अभिलेख को रूपमा सेभ गर्नुहोस्</string>\n    <string name=\"fourth_to_last\">अन्तिम पढिएको अध्याय भन्दा ३ अध्याय अघि</string>\n    <string name=\"pref_download_new\">नयाँ अध्यायहरू डाउनलोड गर्नुहोस्</string>\n    <string name=\"notification_chapters_multiple\">अध्यायहरू %1$s</string>\n    <string name=\"download_notifier_text_only_wifi\">कुनै Wi-Fi जडान उपलब्ध छैन</string>\n    <string name=\"download_notifier_download_paused\">डाउनलोड्स रोकियो</string>\n    <string name=\"download_notifier_no_network\">कुनै नेटवर्क जडान उपलब्ध छैन</string>\n    <string name=\"tracking_info\">बाह्य ट्र्याकर सेवाहरूमा अध्याय प्रगति अपडेट गर्न एकतर्फी सिंक। तिनीहरूको ट्र्याकिङ बटनबाट व्यक्तिगत इन्ट्रीहरूको लागि ट्र्याकिङ सेट अप गर्नुहोस्।</string>\n    <string name=\"backup_restore_missing_trackers\">ट्र्याकरहरूमा लगइन छैनन्:</string>\n    <string name=\"backup_restore_missing_sources\">छुटेको स्रोतहरू:</string>\n    <string name=\"pref_clear_chapter_cache\">अध्याय cache खाली गर्नुहोस्</string>\n    <string name=\"pref_remove_exclude_categories\">बहिष्कृत वर्गहरू</string>\n    <string name=\"fifth_to_last\">अन्तिम पढिएको अध्याय भन्दा ४ अध्याय अघि</string>\n    <string name=\"pref_download_new_categories_details\">बहिष्कृत गरिएका वर्गको इन्ट्री समावेश गरिएका वर्गमा भए पनि डाउनलोड गरिने छैन।</string>\n    <string name=\"pref_create_backup\">ब्याकअप सिर्जना गर्नुहोस्</string>\n    <string name=\"pref_create_backup_summ\">हालको पुस्तकालय रिस्टोर गर्न प्रयोग गर्न सकिन्छ</string>\n    <string name=\"cookies_cleared\">कुकीहरू खाली गरियो</string>\n    <string name=\"label_data\">डेटा</string>\n    <string name=\"cache_delete_error\">खाली गर्दा त्रुटि भयो</string>\n    <string name=\"status\">स्थिति</string>\n    <string name=\"update_check_notification_download_in_progress\">डाउनलोड गर्दै…</string>\n    <string name=\"update_check_notification_download_complete\">अपडेट स्थापना गर्न ट्याप गर्नुहोस्</string>\n    <string name=\"download_notifier_unknown_error\">अप्रत्याशित त्रुटिका कारण अध्याय डाउनलोड गर्न सकिएन</string>\n    <string name=\"notification_chapters_single\">अध्याय %1$s</string>\n    <string name=\"scale_type_original_size\">मूल आकार</string>\n    <string name=\"pref_zoom_start\">जूम सुरु स्थिति</string>\n    <string name=\"pref_auto_clear_chapter_cache\">एप खोलेमा अध्याय cache खाली गर्नुहोस्</string>\n    <string name=\"information_webview_outdated\">राम्रो संगतताको लागि कृपया WebView एप अपडेट गर्नुहोस्</string>\n    <string name=\"pref_update_only_completely_read\">नपढेको अध्याय(हरू) सँग</string>\n    <string name=\"pref_viewer_nav\">ट्याप क्षेत्रहरू</string>\n    <string name=\"pager_viewer\">पृष्ठांकित</string>\n    <string name=\"pref_image_scale_type\">स्केल को प्रकार</string>\n    <string name=\"scale_type_fit_screen\">फिट स्क्रिन</string>\n    <string name=\"zoom_start_left\">बायाँ</string>\n    <string name=\"restore_miui_warning\">यदि MIUI अप्टिमाइजेसन असक्षम छ भने ब्याकअप/रिस्टोरले राम्ररी काम नगर्न सक्छ।</string>\n    <string name=\"restoring_backup\">ब्याकअप रिस्टोर गर्दै</string>\n    <string name=\"extension_api_error\">एक्सटेन्शनहरूको सूची प्राप्त गर्न असफल भयो</string>\n    <string name=\"zoom_start_right\">दायाँ</string>\n    <string name=\"pref_restore_backup\">ब्याकअप रिस्टोर गर्नुहोस्</string>\n    <string name=\"pref_restore_backup_summ\">ब्याकअप फाइलबाट पुस्तकालय रिस्टोर गर्नुहोस्</string>\n    <string name=\"invalid_backup_file_missing_manga\">ब्याकअपमा कुनै पनि पुस्तकालयका इन्ट्री समावेश छैन।</string>\n    <string name=\"pref_backup_interval\">स्वचालित ब्याकअप फ्रिक्वेन्सी</string>\n    <string name=\"used_cache\">प्रयोग गरिएको: %1$s</string>\n    <string name=\"cache_deleted\">Cache खाली गरियो। %1$d फाइलहरू हटाएका छन्</string>\n    <string name=\"notification_chapters_single_and_more\">अध्याय %1$s र %2$d अरू</string>\n    <string name=\"update_check_notification_download_error\">डाउनलोड त्रुटि</string>\n    <string name=\"channel_ext_updates\">एक्सटेन्शन अपडेट्स</string>\n    <string name=\"pref_dump_crash_logs_summary\">विकासकर्ताहरूसँग साझेदारी गर्नको लागि फाइलमा error logs सेभ गर्दछ</string>\n    <string name=\"label_background_activity\">ब्याकग्राउण्ड गतिविधि</string>\n    <string name=\"whats_new\">नयाँ के छ</string>\n    <string name=\"clear_database_source_item_count\">डेटाबेसमा %1$d गैर-पुस्तकालय इन्ट्रीहरू छन्</string>\n    <string name=\"battery_optimization_disabled\">ब्याट्री अप्टिमाइजेसन पहिले नै असक्षम छ</string>\n    <string name=\"about_dont_kill_my_app\">केही निर्माताहरूसँग अतिरिक्त एप प्रतिबन्धहरू छन् जसले ब्याकग्राउण्ड सेवाहरूलाई मार्छ। यो वेबसाइटमा यसलाई कसरी ठीक गर्ने बारे थप जानकारी छ।</string>\n    <string name=\"clear_database_completed\">इन्ट्रीहरू हटाइयो</string>\n    <string name=\"pref_disable_battery_optimization_summary\">ब्याकग्राउण्ड पुस्तकालय अपडेट्स र ब्याकअप संग मद्दत गर्छ</string>\n    <string name=\"pref_verbose_logging_summary\">सिस्टम log मा verbose logs प्रिन्ट गर्नुहोस् (एपको कार्यसम्पादन घटाउँछ)</string>\n    <string name=\"privacy_policy\">गोपनीयता नीति</string>\n    <string name=\"email\">इमेल ठेगाना</string>\n    <string name=\"no_more_results\">थप परिणामहरू छैनन्</string>\n    <string name=\"local_source\">लोकल स्रोत</string>\n    <string name=\"other_source\">अन्य</string>\n    <string name=\"manga_from_library\">पुस्तकालयबाट</string>\n    <string name=\"tabs_header\">ट्याबहरू</string>\n    <string name=\"latest\">नवीनतम</string>\n    <string name=\"local_filter_order_by\">द्वारा अर्डर गर्नुहोस्</string>\n    <string name=\"date\">मिति</string>\n    <string name=\"login_title\">%1$s मा लगइन गर्नुहोस्</string>\n    <string name=\"pref_refresh_library_covers\">पुस्तकालयका आवरणहरू रिफ्रेस गर्नुहोस्</string>\n    <string name=\"notification_incognito_text\">गुप्त मोड असक्षम गर्नुहोस्</string>\n    <string name=\"unknown_error\">अज्ञात त्रुटि</string>\n    <string name=\"downloaded_chapters\">डाउनलोड गरिएका अध्यायहरू</string>\n    <string name=\"chapter_not_found\">अध्याय फेला परेन</string>\n    <string name=\"no_pinned_sources\">तपाईंसँग पिन गरिएको स्रोतहरू छैनन्</string>\n    <string name=\"local_invalid_format\">अवैध अध्याय ढाँचा</string>\n    <string name=\"downloaded_only_summary\">तपाईंको पुस्तकालयमा सबै इन्ट्री फिल्टर गर्नेछ</string>\n    <string name=\"pref_dump_crash_logs\">Crash logs साझा गर्नुहोस्</string>\n    <string name=\"pref_disable_battery_optimization\">ब्याट्री अप्टिमाइजेसन असक्षम पार्नुहोस्</string>\n    <string name=\"unknown\">अज्ञात</string>\n    <string name=\"no_results_found\">कुनै परिणाम फेला परेन</string>\n    <string name=\"pinned_sources\">पिन गरिएको</string>\n    <string name=\"action_global_search_query\">ग्लोबल रूपमा \\\"%1$s\\\" खोज्नुहोस्</string>\n    <string name=\"unknown_author\">अज्ञात लेखक</string>\n    <string name=\"pref_clear_database\">डेटाबेस खाली गर्नुहोस्</string>\n    <string name=\"pref_verbose_logging\">वर्बोज लगिङ</string>\n    <string name=\"username\">युजरनेम</string>\n    <string name=\"login\">लगइन</string>\n    <string name=\"login_success\">लगइन हुनुहुन्छ</string>\n    <string name=\"logout_title\">%1$s बाट लग-आउट गर्ने हो?</string>\n    <string name=\"logout\">लग-आउट</string>\n    <string name=\"logout_success\">तपाई अब लग-आउट हुनुभएको छ</string>\n    <string name=\"updating_category\">वर्ग अपडेट गर्दै</string>\n    <string name=\"last_used_source\">पछिल्लो पटक प्रयोग गरिएको</string>\n    <string name=\"action_global_search_hint\">ग्लोबल खोज…</string>\n    <string name=\"local_source_help_guide\">लोकल स्रोत गाइड</string>\n    <string name=\"ongoing\">जारी छ</string>\n    <string name=\"unknown_status\">अज्ञात स्थिति</string>\n    <string name=\"licensed\">लाइसेन्स प्राप्त</string>\n    <string name=\"password\">पासवर्ड</string>\n    <string name=\"pref_clear_database_summary\">पुस्तकालयमा नभएका इन्ट्रीको इतिहास हटाउनुहोस्</string>\n    <string name=\"clear_database_confirmation\">के तपाईँ निश्चित हुनुहुन्छ? तपाईंले पढ्नुभएको अध्यायहरू र गैर-पुस्तकालय इन्ट्रीहरूको प्रगति हराउनेछ</string>\n    <string name=\"database_clean\">सफा गर्न केही छैन</string>\n    <string name=\"version\">संस्करण</string>\n    <string name=\"website\">वेबसाइट</string>\n    <string name=\"help_translate\">अनुवाद गर्न मद्दत गर्नुहोस्</string>\n    <string name=\"licenses\">खुला स्रोत लाइसेन्सहरू</string>\n    <string name=\"remove_from_library\">पुस्तकालयबाट हटाउनुहोस्</string>\n    <string name=\"publishing_finished\">प्रकाशन सम्पन्न</string>\n    <string name=\"cancelled\">रद्द गरेको</string>\n    <string name=\"on_hiatus\">अन्तरालमा छ</string>\n    <string name=\"add_to_library\">पुस्तकालयमा राख्नुहोस्</string>\n    <string name=\"manga_added_library\">पुस्तकालयमा राखियो</string>\n    <string name=\"in_library\">पुस्तकालयमा छ</string>\n    <string name=\"completed\">समाप्त</string>\n    <string name=\"manga_removed_library\">पुस्तकालयबाट हटाइयो</string>\n    <string name=\"manga_info_expand\">थप</string>\n    <string name=\"manga_info_collapse\">थोरै</string>\n    <string name=\"display_mode_chapter\">अध्याय %1$s</string>\n    <string name=\"show_chapter_number\">अध्याय संख्या</string>\n    <string name=\"title\">शीर्षक</string>\n    <string name=\"score\">मूल्याङ्कन</string>\n    <string name=\"track_started_reading_date\">सुरु गरेको मिति</string>\n    <string name=\"track_finished_reading_date\">समाप्त गरेको मिति</string>\n    <string name=\"page_list_empty_error\">कुनै पृष्ठहरू फेला परेनन्</string>\n    <string name=\"loader_not_implemented_error\">स्रोत भेटिएन</string>\n    <string name=\"clear_history_completed\">इतिहास हटाइयो</string>\n    <string name=\"clear_history_confirmation\">के तपाईँ निश्चित हुनुहुन्छ? सबै इतिहास हराउनेछ।</string>\n    <string name=\"transition_pages_error\">पृष्ठहरू लोड हुन असफल भयो: %1$s</string>\n    <string name=\"source_not_installed\">स्रोत स्थापना गरिएको छैन: %1$s</string>\n    <string name=\"chapter_paused\">रोकिएको</string>\n    <string name=\"chapter_downloading_progress\">डाउनलोड गर्दै (%1$d/%2$d)</string>\n    <string name=\"sort_by_number\">अध्याय संख्या द्वारा</string>\n    <string name=\"sort_by_upload_date\">अपलोड मिति द्वारा</string>\n    <string name=\"migration_help_guide\">स्रोत स्थानान्तरण गाइड</string>\n    <string name=\"migration_selection_prompt\">स्थानान्तरण गर्नको लागि स्रोत चयन गर्नुहोस्</string>\n    <string name=\"error_saving_cover\">आवरण सेभ गर्दा त्रुटि भयो</string>\n    <string name=\"action_display_cover_only_grid\">आवरण मात्र ग्रिड</string>\n    <string name=\"error_sharing_cover\">आवरण साझा गर्दा त्रुटि भयो</string>\n    <string name=\"confirm_delete_chapters\">के तपाईँले चयन गर्नुभएको अध्यायहरू हटाउन चाहनुहुन्छ?</string>\n    <string name=\"chapter_settings\">अध्याय सेटिंग्स</string>\n    <string name=\"set_chapter_settings_as_default\">पूर्वनिर्धारित रूपमा सेट गर्नुहोस्</string>\n    <string name=\"confirm_set_image_as_cover\">यो छवि आवरण को रूपमा राख्न चाहनुहुन्छ?</string>\n    <string name=\"dialog_with_checkbox_reset\">यो इन्ट्रीको सबै अध्यायहरू रिसेट गर्नुहोस्</string>\n    <string name=\"download_unread\">नपढिएको</string>\n    <string name=\"cover_saved\">आवरण सेभ भयो</string>\n    <string name=\"pref_category_for_this_series\">यस श्रृङ्खलाको लागि</string>\n    <string name=\"transition_pages_loading\">पृष्ठहरू लोड हुँदै…</string>\n    <string name=\"migration_dialog_what_to_include\">समावेश गर्न डेटा चयन गर्नुहोस्</string>\n    <string name=\"recent_manga_time\">अध्याय. %1$s - %2$s</string>\n    <string name=\"copy\">प्रतिलिपि</string>\n    <string name=\"copied_to_clipboard\">क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्:\n\\n%1$s</string>\n    <string name=\"clipboard_copy_error\">क्लिपबोर्डमा प्रतिलिपि गर्न असफल</string>\n    <string name=\"delete_downloads_for_manga\">डाउनलोड गरिएका अध्यायहरू हटाउने हो?</string>\n    <string name=\"pref_update_only_started\">जो सुरु भएको छैन</string>\n    <string name=\"cover_updated\">आवरण अपडेट भयो</string>\n    <string name=\"share_page_info\">%1$s: %2$s, पृष्ठ %3$d</string>\n    <string name=\"pref_clear_history\">इतिहास हटाउनुहोस्</string>\n    <string name=\"snack_add_to_library\">पुस्तकालयमा राख्ने?</string>\n    <string name=\"transition_next\">अर्को:</string>\n    <string name=\"viewer\">पढ्ने मोड</string>\n    <string name=\"transition_finished\">सकिएको:</string>\n    <string name=\"updating_library\">पुस्तकालय अपडेट गर्दै</string>\n    <string name=\"confirm_set_chapter_settings\">के तपाइँ निश्चित रूपमा यी सेटिंग्सलाई पूर्वनिर्धारित रूपमा सेभ गर्न चाहनुहुन्छ?</string>\n    <string name=\"also_set_chapter_settings_for_library\">मेरो पुस्तकालयका सबै इन्ट्रीहरूमा पनि लागू गर्नुहोस्</string>\n    <string name=\"no_chapters_error\">अध्यायहरू भेटिएन</string>\n    <string name=\"track_status\">स्थिति</string>\n    <string name=\"picture_saved\">फोटो सेभ गरियो</string>\n    <string name=\"action_show_manga\">इन्ट्री देखाउनुहोस्</string>\n    <string name=\"unread\">नपढिएको</string>\n    <string name=\"paused\">रोकिएको</string>\n    <string name=\"transition_no_next\">अर्को अध्याय छैन</string>\n    <string name=\"manga_cover\">आवरण</string>\n    <string name=\"chapter_error\">त्रुटि</string>\n    <string name=\"show_title\">स्रोत शीर्षक</string>\n    <string name=\"sort_by_source\">स्रोत द्वारा</string>\n    <string name=\"repeating\">फेरी पढ्दै</string>\n    <string name=\"transition_current\">हालको:</string>\n    <string name=\"error_no_match\">कुनै मेल फेला परेन</string>\n    <string name=\"myanimelist_relogin\">कृपया MAL मा फेरि लगइन गर्नुहोस्</string>\n    <string name=\"source_unsupported\">स्रोत समर्थित छैन</string>\n    <string name=\"error_category_exists\">सो नाम गरिएको वर्ग पहिले नै अवस्थित छ!</string>\n    <string name=\"snack_categories_deleted\">वर्गहरू हटाइयो</string>\n    <string name=\"dialog_with_checkbox_remove_description\">यसले यस अध्यायको पढेको मिति हटाउनेछ। के तपाईँ निश्चित हुनुहुन्छ?</string>\n    <string name=\"track_type\">प्रकार</string>\n    <string name=\"no_next_chapter\">अर्को अध्याय भेटिएन</string>\n    <string name=\"transition_previous\">पहिलेको:</string>\n    <string name=\"dropped\">छोडिसकेको</string>\n    <string name=\"on_hold\">होल्डमा छ</string>\n    <string name=\"plan_to_read\">पढ्ने योजना</string>\n    <string name=\"custom_filter\">कस्टम फिल्टर</string>\n    <string name=\"set_as_cover\">आवरणको रूपमा सेट गर्नुहोस्</string>\n    <string name=\"chapter_progress\">पृष्ठ: %1$d</string>\n    <string name=\"migrate\">स्थानान्तरण</string>\n    <string name=\"manga_download\">डाउनलोड</string>\n    <string name=\"transition_no_previous\">अघिल्लो अध्याय छैन</string>\n    <string name=\"download_insufficient_space\">थोरै जम्मा गर्ने ठाउँ भएको कारणले अध्याय डाउनलोड हुन सकिँदएन</string>\n    <string name=\"download_queue_size_warning\">सावधान: ठूलो हिस्सामा डाउनलोड गर्नाले स्रोत ढिलो चल्न अनि/वा Mihon लाई अवरुद्घ गर्न सक्नेछ। थप जान्न ट्याप गर्नुहोस्।</string>\n    <string name=\"manga_tracking_tab\">ट्र्याकिङ</string>\n    <string name=\"add_tracking\">ट्र्याक गर्नुहोस्</string>\n    <string name=\"reading\">पढ्दै</string>\n    <string name=\"file_picker_error\">कुनै फाइल पिकर एप फेला परेन</string>\n    <string name=\"update_check_confirm\">डाउनलोड गर्नुहोस्</string>\n    <string name=\"channel_new_chapters\">अध्याय अपडेट्स</string>\n    <string name=\"skipped_reason_completed\">श्रृङ्खला पूरा भएकोले छोडियो</string>\n    <string name=\"learn_more\">थप जान्नका लागि ट्याप गर्नुहोस्</string>\n    <string name=\"update_check_no_new_updates\">कुनै नयाँ अपडेट उपलब्ध छैन</string>\n    <string name=\"information_empty_category_dialog\">तपाईंसँग अहिलेसम्म कुनै पनि वर्गहरू छैन।</string>\n    <string name=\"chapter_settings_updated\">पूर्वनिर्धारित अध्याय सेटिंग्स अपडेट गरियो</string>\n    <string name=\"spen_next_page\">अर्को पृष्ठ</string>\n    <string name=\"channel_progress\">प्रगति</string>\n    <string name=\"channel_complete\">पूरा</string>\n    <string name=\"channel_app_updates\">एप अपडेट्स</string>\n    <string name=\"channel_errors\">त्रुटिहरू</string>\n    <string name=\"skipped_reason_not_started\">कुनै अध्याय नपढेकाले छोडियो</string>\n    <string name=\"notification_size_warning\">ठूला अपडेटले स्रोतहरूलाई हानि पुर्‍याउँछ र यसले ढिलो अपडेट्स निम्त्याउन सक्छ र ब्याट्रीको प्रयोग पनि बढाउँछ। थप जान्न ट्याप गर्नुहोस्।</string>\n    <string name=\"information_webview_required\">एप काम गर्नका लागि WebView आवश्यक छ</string>\n    <string name=\"action_move_to_top_all_for_series\">श्रृङ्खलालाई शीर्षमा सर्नुहोस्</string>\n    <string name=\"rotation_reverse_portrait\">पोर्ट्रेट उल्ट्याउनु</string>\n    <string name=\"skipped_reason_not_caught_up\">नपढिएका अध्यायहरू भएका कारण छोडियो</string>\n    <string name=\"file_select_cover\">आवरण छवि चयन गर्नुहोस्</string>\n    <string name=\"file_select_backup\">ब्याकअप फाइल चयन गर्नुहोस्</string>\n    <string name=\"channel_common\">साधारण</string>\n    <string name=\"spen_previous_page\">अघिल्लो पृष्ठ</string>\n    <string name=\"update_check_eol\">यो एन्ड्रोइड संस्करण अब समर्थित छैन</string>\n    <string name=\"getting_started_guide\">सुरु गर्ने गाइड</string>\n    <string name=\"pref_navigate_pan\">चौडा छविहरू प्यान गर्नुहोस्</string>\n    <string name=\"pref_landscape_zoom\">फराकिलो छविहरूमा स्वचालित रूपमा जूम गर्नुहोस्</string>\n    <string name=\"notification_update_error\">%1$d अपडेट(हरू) असफल भयो</string>\n    <string name=\"disabled_nav\">असक्षम</string>\n    <string name=\"library_errors_help\">पुस्तकालय अपडेट त्रुटिहरू कसरी समाधान गर्ने भन्ने बारे मद्दतको लागि, %1$s हेर्नुहोस्</string>\n    <string name=\"action_sort_unread_count\">नपढिएको संख्या</string>\n    <string name=\"action_close\">बन्द गर्नुहोस्</string>\n    <string name=\"pref_library_summary\">वर्गहरू, ग्लोबल अपडेट, अध्याय स्वाइप</string>\n    <string name=\"action_sort_last_manga_update\">पछिल्लो अपडेट जाँच</string>\n    <string name=\"delete_category_confirmation\">के तपाई \\\"%s\\\" वर्ग हटाउन चाहनु हुन्छ?</string>\n    <string name=\"delete_category\">वर्ग हटाउनुहोस्</string>\n    <string name=\"action_search_hint\">खोज्नुहोस्…</string>\n    <string name=\"action_remove_everything\">सबै हटाउनुहोस्</string>\n    <string name=\"pref_reader_summary\">पढ्ने मोड, प्रदर्शन, नेभिगेसन</string>\n    <string name=\"pref_downloads_summary\">स्वचालित डाउनलोड, अगाडि डाउनलोड गर्ने</string>\n    <string name=\"pref_browse_summary\">स्रोतहरू, एक्सटेन्शनहरू, ग्लोबल खोज</string>\n    <string name=\"theme_lavender\">ल्याभेन्डर</string>\n    <string name=\"pref_app_language\">एप को भाषा</string>\n    <string name=\"auto_download_while_reading\">पढ्दा स्वत: डाउनलोड गर्नुहोस्</string>\n    <string name=\"pref_backup_summary\">म्यानुअल र स्वचालित ब्याकअप, भण्डारण स्पेस</string>\n    <string name=\"pref_security_summary\">एप लक, सुरक्षित स्क्रिन</string>\n    <string name=\"multi_lang\">थुप्रै</string>\n    <string name=\"pref_library_update_show_tab_badge\">अपडेट्स आइकनमा नपढिएको गणना देखाउनुहोस्</string>\n    <string name=\"pref_skip_dupe_chapters\">डुप्लिकेट अध्यायहरू छोड्नुहोस्</string>\n    <string name=\"action_display_show_continue_reading_button\">जारी राख्ने बटन</string>\n    <string name=\"label_stats\">तथ्याङ्क</string>\n    <string name=\"label_started\">सुरु गरिएको</string>\n    <string name=\"label_local\">लोकल</string>\n    <string name=\"label_downloaded\">डाउनलोड गरिएको</string>\n    <string name=\"network_not_metered\">मापन नगरिएको नेटवर्कमा मात्र</string>\n    <string name=\"download_ahead\">अगाडि डाउनलोड गर्नुहोस्</string>\n    <string name=\"pref_appearance_summary\">थीम, मिति र समय ढाँचा</string>\n    <string name=\"download_ahead_info\">हालको अध्याय + अर्को पहिले नै डाउनलोड गरिएमा मात्र काम गर्दछ।</string>\n    <string name=\"theme_tidalwave\">समुन्द्री लहर</string>\n    <string name=\"ext_info_version\">संस्करण</string>\n    <string name=\"ext_info_language\">भाषा</string>\n    <string name=\"ext_info_age_rating\">उमेर मूल्याङ्कन</string>\n    <string name=\"action_not_now\">अहिले हैन</string>\n    <string name=\"action_open_random_manga\">जुनसुकै इन्ट्री खोल्नुहोस्</string>\n    <string name=\"confirm_add_duplicate_manga\">तपाईको पुस्तकालयमा एउटै नामको इन्ट्री छ।\n\\n\n\\nके तपाईं अझै जारी राख्न चाहनुहुन्छ?</string>\n    <string name=\"reading_list\">पढिरहेको सूची</string>\n    <string name=\"updates_last_update_info\">पुस्तकालय पछिल्लो पटक अपडेट गरिएको: %s</string>\n    <string name=\"crash_screen_description\">%s एक अप्रत्याशित त्रुटिमा पर्यो। समर्थन को लागि हामी तपाईंलाई हाम्रो Discord को #support च्यानलमा crash logs शेगर गर्न सुझाव दिन्छौं।</string>\n    <string name=\"update_check_open\">GitHub मा खोल्नुहोस्</string>\n    <string name=\"pref_invalidate_download_cache_summary\">डाउनलोड गरिएका अध्यायहरू पुन: जाँच गर्न एपलाई फोर्स गर्नुहोस्</string>\n    <string name=\"pref_tracking_summary\">एकतर्फी प्रगति सिंक, परिष्कृत सिंक</string>\n    <string name=\"pref_advanced_summary\">Dump crash logs, battery optimizations</string>\n    <string name=\"error_saving_picture\">तस्वीर बचत गर्न त्रुटि भयो</string>\n    <string name=\"updates_last_update_info_just_now\">भर्खरै</string>\n    <string name=\"pref_reset_viewer_flags_success\">सबै रिडर सेटिंग्स रिसेट गरियो</string>\n    <string name=\"label_used\">प्रयोग गरिएको</string>\n    <string name=\"label_titles_in_global_update\">ग्लोबल अपडेटमा</string>\n    <string name=\"label_titles_section\">इन्ट्री</string>\n    <string name=\"label_tracker_section\">ट्र्याकर</string>\n    <string name=\"crash_screen_restart_application\">एप पुन: सुरु गर्नुहोस्</string>\n    <string name=\"label_tracked_titles\">ट्र्याक गरिएका इन्ट्रीहरू</string>\n    <string name=\"label_mean_score\">औसत स्कोर</string>\n    <string name=\"appwidget_updates_description\">तपाईंको भर्खरै अपडेट गरिएको पुस्तकालय इन्ट्रीहरू हेर्नुहोस्</string>\n    <string name=\"enhanced_services_not_installed\">उपलब्ध छ तर स्रोत स्थापना गरिएको छैन: %s</string>\n    <string name=\"copied_to_clipboard_plain\">क्लिपबोर्डमा प्रतिलिपि गरियो</string>\n    <string name=\"information_no_entries_found\">यस वर्गमा कुनै इन्ट्रीहरू फेला परेनन्</string>\n    <string name=\"unknown_title\">अज्ञात शीर्षक</string>\n    <string name=\"invalid_location\">अवैध स्थान: %s</string>\n    <string name=\"missing_storage_permission\">भण्डारण अनुमतिहरू प्रदान गरिएको छैन</string>\n    <string name=\"pref_clear_webview_data\">WebView डेटा खाली गर्नुहोस्</string>\n    <string name=\"fdroid_warning\">F-Droid निर्माणहरू आधिकारिक रूपमा समर्थित छैनन्।\n\\nथप जान्न ट्याप गर्नुहोस्।</string>\n    <string name=\"crash_screen_title\">उफ्!</string>\n    <string name=\"label_read_duration\">पढेको अवधि</string>\n    <string name=\"pref_reset_viewer_flags_error\">रिडर सेटिंग्स रिसेट गर्न सकिएन</string>\n    <string name=\"webview_data_deleted\">WebView डेटा खाली गरियो</string>\n    <string name=\"complete_list\">समाप्त सूची</string>\n    <string name=\"on_hold_list\">होल्ड सूची</string>\n    <string name=\"unfinished_list\">अधूरो सूची</string>\n    <string name=\"source_filter_empty_screen\">कुनै स्थापित स्रोत फेला परेन</string>\n    <string name=\"download_notifier_split_page_path_not_found\">पृष्ठ %d को फाइल मार्ग फेला पार्न सकेन</string>\n    <string name=\"custom_cover\">कस्टम आवरण</string>\n    <string name=\"wish_list\">इच्छा सूची</string>\n    <string name=\"popular\">लोकप्रिय</string>\n    <string name=\"split_tall_images_summary\">रिडर कार्यसम्पादन सुधार गर्दछ</string>\n    <string name=\"pref_reset_viewer_flags\">प्रति-श्रृङ्खला रिडर सेटिंग्स रिसेट गर्नुहोस्</string>\n    <string name=\"track_remove_date_conf_title\">मिति हटाउने हो?</string>\n    <string name=\"track_remove_start_date_conf_text\">यसले %s बाट तपाइँको पहिले चयन गरिएको सुरु मिति हटाउनेछ</string>\n    <string name=\"track_remove_finish_date_conf_text\">यसले %s बाट तपाइँको पहिले चयन गरिएको समाप्त मिति हटाउनेछ</string>\n    <string name=\"update_already_running\">एउटा अपडेट पहिले नै जारी छ</string>\n    <string name=\"empty_screen\">ल, यो के भयो</string>\n    <string name=\"not_installed\">स्थापना गरिएको छैन</string>\n    <string name=\"pref_reset_viewer_flags_summary\">पढ्ने मोड र सबै श्रृङ्खलाहरूको अभिमुखीकरण रिसेट गर्दछ</string>\n    <string name=\"are_you_sure\">के तपाईँ निश्चित हुनुहुन्छ?</string>\n    <string name=\"download_notifier_split_page_not_found\">पृष्ठ विभाजन गर्दा %d फेला परेन</string>\n    <string name=\"information_no_manga_category\">वर्ग खाली छ</string>\n    <string name=\"internal_error\">आन्तरिक त्रुटि: थप जानकारीको लागि Crash logs जाँच गर्नुहोस्</string>\n    <string name=\"label_completed_titles\">पढिसकेका इन्ट्रीहरू</string>\n    <string name=\"label_total_chapters\">कुल</string>\n    <string name=\"label_read_chapters\">पढेको</string>\n    <string name=\"download_notifier_cache_renewal\">डाउनलोड्स जाँच गर्दै</string>\n    <string name=\"description_placeholder\">कुनै वर्णन छैन</string>\n    <string name=\"appwidget_unavailable_locked\">एप लक सक्षम हुँदा विजेट उपलब्ध छैन</string>\n    <string name=\"empty_backup_error\">ब्याकअप गर्न कुनै पुस्तकालय इन्ट्रीहरू छैनन्</string>\n    <string name=\"track_error\">%1$s त्रुटि: %2$s</string>\n    <string name=\"cant_open_last_read_chapter\">अन्तिम पढिएको अध्याय खोल्न असमर्थ भयो</string>\n    <string name=\"source_empty_screen\">कुनै स्रोत फेला परेन</string>\n    <string name=\"label_overview_section\">अवलोकन</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"skipped_reason_not_always_update\">श्रृङ्खलालाई अपडेट आवश्यक नपर्ने भएकोले छोडियो</string>\n    <string name=\"information_required_plain\">*आवश्यक</string>\n    <string name=\"remove_manga\">तपाईं आफ्नो पुस्तकालयबाट \\\"%s\\\" हटाउन लाग्दै हुनुहुन्छ</string>\n    <string name=\"error_user_agent_string_blank\">User agent string खाली हुन सक्दैन</string>\n    <string name=\"pref_reset_user_agent_string\">पूर्वनिर्धारित user agent string रिसेट गर्नुहोस्</string>\n    <string name=\"seconds_short\">%dसे</string>\n    <string name=\"minute_short\">%dमि</string>\n    <string name=\"pref_hide_in_library_items\">पहिले नै पुस्तकालयमा रहेका इन्ट्रीहरू लुकाउनुहोस्</string>\n    <string name=\"action_copy_to_clipboard\">क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्</string>\n    <string name=\"pref_invalidate_download_cache\">Reindex डाउनलोड्स</string>\n    <string name=\"pref_user_agent_string\">पूर्वनिर्धारित user agent string</string>\n    <string name=\"error_user_agent_string_invalid\">अवैध user agent string</string>\n    <string name=\"day_short\">%dदि</string>\n    <string name=\"hour_short\">%dघ</string>\n    <string name=\"action_update_category\">वर्ग अपडेट गर्नुहोस्</string>\n    <string name=\"split_tall_images\">अग्लो छविहरू विभाजित गर्नुहोस्</string>\n    <string name=\"overlay_header\">ओभरले</string>\n    <string name=\"pref_page_rotate\">फिट गर्न चौडा पृष्ठहरू घुमाउनुहोस्</string>\n    <string name=\"pref_page_rotate_invert\">घुमाइएका चौडा पृष्ठहरूको अभिमुखीकरण फ्लिप गर्नुहोस्</string>\n    <string name=\"pref_debug_info\">Debug जानकारी</string>\n    <string name=\"pref_chapter_swipe_end\">दायाँ स्वाइप</string>\n    <string name=\"pref_chapter_swipe_start\">बायाँ स्वाइप</string>\n    <string name=\"pref_double_tap_zoom\">जूम गर्न डबल ट्याप गर्नुहोस्</string>\n    <string name=\"action_set_interval\">अन्तराल सेट गर्नुहोस्</string>\n    <string name=\"action_filter_interval_custom\">कस्टम गरिएको अपडेट फ्रिक्वेन्सी</string>\n    <string name=\"manga_display_modified_interval_title\">प्रत्येक अपडेट गर्न सेट गर्नुहोस्</string>\n    <string name=\"skipped_reason_not_in_release_period\">छोडियो किनभने आज कुनै रिलीज अपेक्षित थिएन</string>\n    <string name=\"intervals_header\">अन्तरालहरू</string>\n    <string name=\"action_sort_next_updated\">अर्को अपेक्षित अपडेट</string>\n    <string name=\"pref_update_only_in_release_period\">अपेक्षित रिलीज अवधि बाहिर</string>\n    <string name=\"manga_display_interval_title\">प्रत्येक अनुमान लगाउनुहोस्</string>\n    <string name=\"track_delete_title\">%s ट्र्याकिङ हटाउने हो?</string>\n    <string name=\"track_delete_remote_text\">%s बाट पनि हटाउनुहोस्</string>\n    <string name=\"track_delete_text\">यसले लोकल रूपमा ट्र्याकिङ हटाउनेछ।</string>\n    <string name=\"action_ok\">ठिक छ</string>\n    <string name=\"delete_downloaded\">डाउनलोड गरिएको हटाउनुहोस्</string>\n    <string name=\"has_results\">परिणामहरू भएको</string>\n    <string name=\"library_sync_complete\">पुस्तकालय सिंक सम्पन्न भयो</string>\n    <string name=\"syncing_library\">पुस्तकालय सिंक गर्दै</string>\n    <string name=\"download_cache_invalidated\">डाउनलोड इन्डेक्स अवैध भयो</string>\n    <string name=\"information_cloudflare_help\">Cloudflare सम्बन्धित मद्दतको लागि यहाँ ट्याप गर्नुहोस्</string>\n    <string name=\"track_activity_name\">ट्र्याकर लगइन</string>\n    <string name=\"create_backup_file_error\">ब्याकअप फाइल सिर्जना गर्न असफल भयो</string>\n    <string name=\"exception_offline\">इन्टरनेट जडान छैन</string>\n    <string name=\"exception_unknown_host\">%s मा पुग्न सकिएन</string>\n    <string name=\"exception_http\">HTTP %d, WebView मा वेबसाइट जाँच गर्नुहोस्</string>\n    <string name=\"unlock_app_title\">अनलक %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">श्रृङ्खलालाई तल सार्नुहोस्</string>\n    <string name=\"notification_updating_progress\">पुस्तकालय अपडेट गर्दै... (%s)</string>\n    <string name=\"source_settings\">स्रोत सेटिंग्स</string>\n    <string name=\"app_settings\">एप सेटिंग्स</string>\n    <string name=\"pref_relative_format\">सापेक्ष टाइमस्ट्याम्पहरू</string>\n    <string name=\"pref_relative_format_summary\">\\\"%2$s\\\" को सट्टा \\\"%1$s\\\"</string>\n    <string name=\"relative_time_span_never\">कहिले पनि होइन</string>\n    <string name=\"pref_flash_page_summ\">ई-इंक स्क्रिनहरूमा गोस्टिङ घटाउँछ</string>\n    <string name=\"last_auto_backup_info\">पछिल्लो पटक स्वचालित ब्याकअप गरिएको: %s</string>\n    <string name=\"pref_flash_page\">पृष्ठ बदलिँदा स्क्रिनमा सेतो फ्ल्यास हुन्छ</string>\n    <string name=\"label_data_storage\">डेटा र भण्डारण</string>\n    <string name=\"file_null_uri_error\">फाइल पिकर एपमा फाइल फर्काउन असफल भयो</string>\n    <string name=\"selected\">चयन गरिएको</string>\n    <string name=\"not_selected\">चयन नगरिएको</string>\n    <string name=\"action_sort_tracker_score\">ट्र्याकर मूल्याङ्कन</string>\n    <string name=\"scanlator\">स्क्यानलेटर</string>\n    <string name=\"action_menu_overflow_description\">अरु मेनु</string>\n    <string name=\"onboarding_heading\">स्वागत छ!</string>\n    <string name=\"onboarding_action_next\">अर्को</string>\n    <string name=\"onboarding_action_finish\">सुरु</string>\n    <string name=\"onboarding_action_skip\">छोड</string>\n    <string name=\"onboarding_storage_selection_required\">एउटा फोल्डर चयन गर्नुपर्छ</string>\n    <string name=\"onboarding_storage_help_action\">भण्डारण गाइड</string>\n    <string name=\"onboarding_permission_notifications\">सूचना अनुमति</string>\n    <string name=\"onboarding_permission_action_grant\">प्रदान गर्नुहोस्</string>\n    <string name=\"onboarding_guides_new_user\">%s मा नयाँ हुनुहुन्छ? हामी स्टार्टिङ गाइड जाँच गर्न सिफारिस गर्छौं।</string>\n    <string name=\"theme_nord\">नोर्ड</string>\n    <string name=\"pref_library_update_smart_update\">स्मार्ट अपडेट</string>\n    <string name=\"error_repo_exists\">यो रिपो पहिले नै अवस्थित छ!</string>\n    <string name=\"action_delete_repo\">रिपो हटाउनुहोस्</string>\n    <string name=\"invalid_repo_name\">रिपो URL अवैध छ</string>\n    <string name=\"action_bar_up_description\">माथि नेभिगेट गर्नुहोस्</string>\n    <string name=\"action_revert_to_default\">पूर्वनिर्धारितमा फर्कनुहोस्</string>\n    <string name=\"pref_onboarding_guide\">अनबोर्डिङ गाइड</string>\n    <string name=\"onboarding_description\">पहिले केहि चीजहरू सेट गरौं। तपाईं पछि पनि सेटिंग्समा गएर यसलाई परिवर्तन गर्न सक्नुहुन्छ।</string>\n    <string name=\"onboarding_storage_info\">एउटा फोल्डर चयन गर्नुहोस् जहाँ %1$s ले अध्याय डाउनलोड, ब्याकअप, र थप भण्डारण गर्नेछ।\n\\n\n\\nएक समर्पित फोल्डर सिफारिस गरिएको छ।\n\\n\n\\nचयन गरिएको फोल्डर: %2$s</string>\n    <string name=\"onboarding_storage_action_select\">फोल्डर चयन गर्नुहोस्</string>\n    <string name=\"onboarding_permission_install_apps\">एप स्थापना गर्ने अनुमति</string>\n    <string name=\"onboarding_permission_install_apps_description\">स्रोत एक्सटेन्शन स्थापना गर्न को लागि।</string>\n    <string name=\"onboarding_permission_notifications_description\">पुस्तकालय अपडेट्स र थपका लागि सूचना प्राप्त गर्नुहोस्।</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">लामो समयदेखि चलिरहेको पुस्तकालय अपडेट्स, डाउनलोड्स, र ब्याकअप रिस्टोरमा अवरोधहरू बेवास्ता गर्नुहोस्।</string>\n    <string name=\"onboarding_storage_help_info\">पुरानो संस्करणबाट अपडेट गर्दै र के चयन गर्ने निश्चित छैन? थप जानकारीको लागि भण्डारण गाइड हेर्नुहोस्।</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">ब्याकग्राउण्ड ब्याट्री प्रयोग</string>\n    <string name=\"onboarding_guides_returning_user\">%s पुन: स्थापना गर्दै हुनुहुन्छ?</string>\n    <string name=\"ext_permission_install_apps_warning\">एक्सटेन्शनहरू स्थापना गर्न अनुमति आवश्यक छ। प्रदान गर्न यहाँ ट्याप गर्नुहोस्।</string>\n    <string name=\"ext_revoke_trust\">विश्वसनीय अज्ञात एक्सटेन्शनहरू रद्द गर्नुहोस्</string>\n    <string name=\"information_empty_repos\">तपाईंले कुनै पनि रिपो सेट गर्नु भएको छैन।</string>\n    <string name=\"label_add_repo_input\">रिपो URL</string>\n    <string name=\"label_extension_repos\">एक्सटेन्शन रिपो</string>\n    <string name=\"action_add_repo\">रिपो थप्नुहोस्</string>\n    <string name=\"action_add_repo_message\">Mihon मा अतिरिक्त रिपो थप्नुहोस्। URL को अन्त्यमा \\\"index.min.json\\\" हुनुपर्छ।</string>\n    <string name=\"action_apply\">अप्लाई</string>\n    <string name=\"delete_repo_confirmation\">के तपाइँ रिपो \\\"%s\\\" हटाउन चाहनुहुन्छ?</string>\n    <string name=\"action_open_repo\">खुला स्रोत रिपो</string>\n    <string name=\"pref_storage_location\">भण्डारण स्थान</string>\n    <string name=\"available_disk_space_info\">उपलब्ध: %1$s / कुल: %2$s</string>\n    <string name=\"manga_interval_expected_update\">नयाँ अध्यायहरू लगभग %1$s मा रिलीज हुने भविष्यवाणी गरिएको छ, हरेक %2$s को वरिपरि जाँच गर्दै।</string>\n    <string name=\"manga_interval_expected_update_soon\">छिटै</string>\n    <string name=\"manga_interval_custom_amount\">कस्टम अपडेट फ्रिक्वेन्सी:</string>\n    <string name=\"exclude_scanlators\">स्क्यानलेटर समावेश नगर्नुहोस्</string>\n    <string name=\"no_scanlators_found\">कुनै स्क्यानलेटर फेला परेन</string>\n    <string name=\"pref_storage_usage\">भण्डारण प्रयोग</string>\n    <string name=\"no_location_set\">कुनै भण्डारण स्थान सेट गरिएको छैन</string>\n    <string name=\"pref_storage_location_info\">स्वचालित ब्याकअप, अध्याय डाउनलोड, र स्थानीय स्रोतको लागि प्रयोग गरिन्छ।</string>\n    <string name=\"action_create\">सिर्जना गर्नुहोस्</string>\n    <string name=\"invalid_backup_file_error\">पूर्ण त्रुटि:</string>\n    <string name=\"private_settings\">संवेदनशील सेटिंग्स समावेश गर्नुहोस् (जस्तै, ट्र्याकर लगइन टोकनहरू)</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">जूम आउट असक्षम गर्नुहोस्</string>\n    <string name=\"action_add_anyway\">जे भए पनि थप्नुहोस्</string>\n    <string name=\"action_migrate_duplicate\">अवस्थित इन्ट्री माइग्रेट गर्नुहोस्</string>\n    <string name=\"pref_display_profile\">कस्टम प्रदर्शन प्रोफाइल</string>\n    <string name=\"action_replace_repo\">रिप्लेस</string>\n    <string name=\"action_replace_repo_title\">साइन गर्ने की फिंगरप्रिन्ट पहिले नै अवस्थित छ</string>\n    <string name=\"action_replace_repo_message\">रिपो %1$s सँग %2$s जस्तै साइन गर्ने की फिंगरप्रिन्ट छ।\n\\nयदि यो अपेक्षित छ भने, %2$s प्रतिस्थापन गरिनेछ, अन्यथा आफ्नो रिपो प्रबन्धकलाई सम्पर्क गर्नुहोस्।</string>\n    <string name=\"label_upcoming\">आगामी</string>\n    <string name=\"action_view_upcoming\">आगामी अपडेट्स हेर्नुहोस्</string>\n    <string name=\"upcoming_guide\">आगामी गाइड</string>\n    <string name=\"upcoming_calendar_next\">अर्को महिना</string>\n    <string name=\"upcoming_calendar_prev\">अघिल्लो महिना</string>\n    <string name=\"file_picker_uri_permission_unsupported\">लगातार फोल्डर पहुँच प्राप्त गर्न असफल। एपले अप्रत्याशित रूपमा व्यवहार गर्न सक्छ।</string>\n    <string name=\"pref_flash_duration\">फ्ल्यास अवधि</string>\n    <string name=\"pref_flash_style_white\">सेतो</string>\n    <string name=\"pref_flash_style_white_black\">सेतो र कालो</string>\n    <string name=\"pref_flash_with\">सँग फ्ल्यास</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">फ्ल्यास हरेक</string>\n    <string name=\"pref_flash_style_black\">कालो</string>\n    <string name=\"manga_interval_expected_update_null\">यो माङ्गा या त समाप्त भयो, वा त्यहाँ कुनै अनुमानित रिलीज मिति छैन।</string>\n    <string name=\"extensionRepo_settings\">एक्सटेन्शन रिपो</string>\n    <string name=\"invalid_backup_file_json\">JSON ब्याकअप समर्थित छैन</string>\n    <string name=\"invalid_backup_file_unknown\">ब्याकअप फाइल बिग्रिएको छ</string>\n    <string name=\"action_copy_link\">लिङ्क प्रतिलिपि गर्नुहोस्</string>\n    <string name=\"add_repo_confirmation\">के तपाइँ \\\"%s\\\" रिपो थप्न चाहनुहुन्छ?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">पढेका डुप्लिकेट अध्यायहरू डाउनलोड गर्न छोड्नुहोस्</string>\n    <string name=\"confirm_tracker_update\">ट्र्याकरहरूलाई अध्याय %d मा अपडेट गर्ने हो?</string>\n    <string name=\"action_sort_random\">ऱ्याण्डम</string>\n    <string name=\"onboarding_permission_crashlytics\">Crash logs पठाउनुहोस्</string>\n    <string name=\"pref_firebase\">Analytics र Crash logs</string>\n    <string name=\"firebase_summary\">Crash logs र Analytics पठाउँदा हामीलाई समस्याहरू पहिचान र समाधान गर्न, कार्यसम्पादन सुधार गर्न, र भविष्यका अपडेट्समा तपाईंको आवश्यकताहरूसँग थप सान्दर्भिक बनाउन अनुमति दिनेछ</string>\n    <string name=\"onboarding_permission_analytics_description\">अनुप्रयोग सुविधाहरू सुधार गर्न बेनामी उपयोग डेटा पठाउनुहोस्।</string>\n    <string name=\"non_library_settings\">सबै पढेको इन्ट्री</string>\n    <string name=\"onboarding_permission_analytics\">Analytics लाई अनुमति दिनुहोस्</string>\n    <string name=\"pref_security\">सुरक्षा</string>\n    <string name=\"onboarding_permission_crashlytics_description\">विकासकर्ताहरूलाई अज्ञात Crash logs पठाउनुहोस्।</string>\n    <string name=\"ext_remove\">हटाउनुहोस्</string>\n    <string name=\"ext_confirm_remove\">एक्सटेन्शन हटाउने हो?</string>\n    <string name=\"remove_private_extension_message\">के तपाई साँच्चै \\\"%s\\\" एक्सटेन्शन हटाउन चाहनुहुन्छ?</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">पढिएको भनी चिन्ह लगाउँदा प्रगति अपडेट गर्नुहोस्</string>\n    <string name=\"trackers_updated_summary\">ट्र्याकरहरू अध्याय %d मा अपडेट गरियो</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">पूर्वनिर्धारित (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">यदि पाठकले खाली छवि लोड गर्छ भने क्रमशः threshold घटाउनुहोस्।\\nचयन गरिएको: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Custom hardware bitmap threshold</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">कार्यसम्पादनमा असर गर्छ। Bitmap threshold घटाउँदा खाली छवि समस्याहरू समाधान गर्दैन भने मात्र सक्षम गर्नुहोस्</string>\n    <string name=\"pref_incognito_mode_extension_summary\">एक्सटेन्शनमा पढिएको इतिहास रोक्नुहोस्</string>\n    <string name=\"label_auto\">अटो</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">लामो स्ट्रिप रिडरको लागि लिगेसी डिकोडर प्रयोग गर्नुहोस्</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">पढिएका अध्यायहरूको डुप्लिकेटलाई पढिएको रूपमा चिन्ह लगाउनुहोस्</string>\n    <string name=\"theme_monochrome\">मोनोक्रोम</string>\n    <string name=\"action_toggle_private_on\">निजी रूपमा ट्र्याक गर्नुहोस्</string>\n    <string name=\"action_toggle_private_off\">सार्वजनिक रूपमा ट्र्याक गरिएको</string>\n    <string name=\"export\">निर्यात</string>\n    <string name=\"library_list\">पुस्तकालय सूची</string>\n    <string name=\"library_exported\">पुस्तकालय निर्यात गरियो</string>\n    <string name=\"author\">लेखक</string>\n    <string name=\"artist\">कलाकार</string>\n    <string name=\"tracked_privately\">निजी रूपमा ट्र्याक गरियो</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/nl/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Na %1$s minuut</item>\n        <item quantity=\"other\">Na %1$s minuten</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Extensie-update beschikbaar</item>\n        <item quantity=\"other\">%d extensie-updates beschikbaar</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Hoofdstukken %1$s en 1 meer</item>\n        <item quantity=\"other\">Hoofdstukken %1$s en %2$d meer</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nieuw hoofdstuk</item>\n        <item quantity=\"other\">%1$d nieuwe hoofdstukken</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Voor %d titel</item>\n        <item quantity=\"other\">Voor %d titels</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s resterend</item>\n        <item quantity=\"other\">%1$s resterende</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Voltooid in %1$s met %2$s foutmelding</item>\n        <item quantity=\"other\">Voltooid in %1$s met %2$s foutmeldingen</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categorie</item>\n        <item quantity=\"other\">%d categorieën</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s hoofdstuk</item>\n        <item quantity=\"other\">%1$s hoofdstukken</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d tracker</item>\n        <item quantity=\"other\">%d trackers</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d hoofdstuk is overgeslagen, de bron mist of het is uitgefilterd</item>\n        <item quantity=\"other\">%d hoofdstukken zijn overgeslagen, de bron mist ze of ze zijn uitgefilterd</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Gisteren</item>\n        <item quantity=\"other\">%1$d dagen geleden</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Volgend ongelezen hoofdstuk</item>\n        <item quantity=\"other\">Volgende %d ongelezen hoofdstukken</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Volgend hoofdstuk</item>\n        <item quantity=\"other\">Volgende %d hoofdstukken</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 dag</item>\n        <item quantity=\"other\">%d dagen</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s hoofdstuk mist</item>\n        <item quantity=\"other\">%1$s hoofdstukken missen</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Morgen</item>\n        <item quantity=\"other\">Over %1$d dagen</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 pagina</item>\n        <item quantity=\"other\">%1$s pagina\\'s</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repo</item>\n        <item quantity=\"other\">%d repo\\'s</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/nl/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Naam</string>\n    <string name=\"categories\">Categorieën</string>\n    <string name=\"manga\">Bibliotheek</string>\n    <string name=\"chapters\">Hoofdstukken</string>\n    <string name=\"track\">Tracking</string>\n    <string name=\"history\">Geschiedenis</string>\n    <string name=\"label_settings\">Instellingen</string>\n    <string name=\"label_library\">Bibliotheek</string>\n    <string name=\"label_recent_manga\">Geschiedenis</string>\n    <string name=\"label_backup\">Back-up en herstel</string>\n    <string name=\"action_settings\">Instellingen</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_unread\">Ongelezen</string>\n    <string name=\"action_filter_empty\">Verwijder filter</string>\n    <string name=\"action_sort_alpha\">Alfabetisch</string>\n    <string name=\"action_sort_last_read\">Laatst gelezen</string>\n    <string name=\"action_search\">Zoeken</string>\n    <string name=\"action_select_all\">Alles selecteren</string>\n    <string name=\"action_mark_as_read\">Als gelezen markeren</string>\n    <string name=\"action_mark_as_unread\">Als ongelezen markeren</string>\n    <string name=\"action_mark_previous_as_read\">Markeer vorige als gelezen</string>\n    <string name=\"action_download\">Downloaden</string>\n    <string name=\"action_bookmark\">Hoofdstuk toevoegen aan bladwijzers</string>\n    <string name=\"action_remove_bookmark\">Hoofdstuk verwijderen uit bladwijzers</string>\n    <string name=\"action_delete\">Verwijderen</string>\n    <string name=\"action_edit\">Bewerken</string>\n    <string name=\"action_add\">Toevoegen</string>\n    <string name=\"action_add_category\">Categorie toevoegen</string>\n    <string name=\"action_edit_categories\">Categorieën bewerken</string>\n    <string name=\"action_rename_category\">Categorie hernoemen</string>\n    <string name=\"action_move_category\">Zet categorieën</string>\n    <string name=\"action_edit_cover\">Omslag wijzigen</string>\n    <string name=\"action_pause\">Pauzeren</string>\n    <string name=\"action_previous_chapter\">Vorige hoofdstuk</string>\n    <string name=\"action_next_chapter\">Volgende hoofdstuk</string>\n    <string name=\"label_download_queue\">Downloadwachtrij</string>\n    <string name=\"action_update_library\">Bibliotheek bijwerken</string>\n    <string name=\"action_retry\">Opnieuw proberen</string>\n    <string name=\"action_remove\">Verwijderen</string>\n    <string name=\"action_resume\">Hervatten</string>\n    <string name=\"action_open_in_browser\">Openen in browser</string>\n    <string name=\"action_display_mode\">Weergavemodus</string>\n    <string name=\"action_display\">Weergave</string>\n    <string name=\"action_display_grid\">Compact raster</string>\n    <string name=\"action_display_list\">Lijst</string>\n    <string name=\"action_cancel\">Annuleren</string>\n    <string name=\"action_sort\">Sorteren</string>\n    <string name=\"action_install\">Installeren</string>\n    <string name=\"action_share\">Delen</string>\n    <string name=\"action_save\">Opslaan</string>\n    <string name=\"action_reset\">Opnieuw instellen</string>\n    <string name=\"action_undo\">Ongedaan maken</string>\n    <string name=\"action_open_log\">Open log</string>\n    <string name=\"action_restore\">Herstellen</string>\n    <string name=\"loading\">Laden…</string>\n    <string name=\"pref_category_general\">Algemeen</string>\n    <string name=\"pref_category_reader\">Lezer</string>\n    <string name=\"pref_category_downloads\">Downloads</string>\n    <string name=\"pref_category_tracking\">Tracking</string>\n    <string name=\"pref_category_advanced\">Geavanceerd</string>\n    <string name=\"pref_library_columns\">Elementen per rij</string>\n    <string name=\"pref_library_update_interval\">Automatisch bijwerken</string>\n    <string name=\"update_never\">Uit</string>\n    <string name=\"update_6hour\">Iedere 6 uur</string>\n    <string name=\"update_12hour\">Iedere 12 uur</string>\n    <string name=\"update_24hour\">Dagelijks</string>\n    <string name=\"update_48hour\">Iedere 2 dagen</string>\n    <string name=\"update_weekly\">Wekelijks</string>\n    <string name=\"all\">Alles</string>\n    <string name=\"default_category\">Standaard categorie</string>\n    <string name=\"default_category_summary\">Altijd vragen</string>\n    <string name=\"pref_fullscreen\">Volledig scherm</string>\n    <string name=\"pref_page_transitions\">Animeer pagina-overgangen</string>\n    <string name=\"pref_show_page_number\">Toon paginanummer</string>\n    <string name=\"pref_crop_borders\">Randen bijsnijden</string>\n    <string name=\"pref_custom_brightness\">Aangepaste helderheid</string>\n    <string name=\"pref_custom_color_filter\">Aangepast kleurfilter</string>\n    <string name=\"pref_read_with_volume_keys\">Volumeknoppen</string>\n    <string name=\"pref_reader_theme\">Achtergrondkleur</string>\n    <string name=\"white_background\">Wit</string>\n    <string name=\"black_background\">Zwart</string>\n    <string name=\"pref_viewer_type\">Standaard leesmodus</string>\n    <string name=\"left_to_right_viewer\">Links naar rechts</string>\n    <string name=\"right_to_left_viewer\">Rechts naar links</string>\n    <string name=\"vertical_viewer\">Verticaal</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"scale_type_stretch\">Uitrekken</string>\n    <string name=\"scale_type_fit_width\">Breedtevullend</string>\n    <string name=\"scale_type_fit_height\">Hoogtevullend</string>\n    <string name=\"scale_type_original_size\">Oorspronkelijke grootte</string>\n    <string name=\"scale_type_smart_fit\">Intelligent aanpassen</string>\n    <string name=\"zoom_start_automatic\">Automatisch</string>\n    <string name=\"zoom_start_left\">Links</string>\n    <string name=\"zoom_start_right\">Rechts</string>\n    <string name=\"zoom_start_center\">Midden</string>\n    <string name=\"pref_rotation_type\">Standaardoriëntatie</string>\n    <string name=\"rotation_free\">Vrij</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"last_read_chapter\">Laatst gelezen hoofdstuk</string>\n    <string name=\"second_to_last\">Een-na-laatste gelezen hoofdstuk</string>\n    <string name=\"third_to_last\">Twee-na-laatste gelezen hoofdstuk</string>\n    <string name=\"pref_download_new\">Download nieuwe hoofdstukken</string>\n    <string name=\"services\">Trackers</string>\n    <string name=\"pref_create_backup\">Back-up maken</string>\n    <string name=\"pref_create_backup_summ\">Kan worden gebruikt om de huidige bibliotheek te herstellen</string>\n    <string name=\"pref_restore_backup\">Back-up herstellen</string>\n    <string name=\"pref_restore_backup_summ\">Herstellen van back-up bestand</string>\n    <string name=\"pref_backup_interval\">Frequentie van automatische back-ups</string>\n    <string name=\"backup_created\">Back-up gemaakt</string>\n    <string name=\"restore_completed\">Herstellen voltooid</string>\n    <string name=\"backup_choice\">Wat wil je back-uppen?</string>\n    <string name=\"restoring_backup\">Back-up aan het herstellen</string>\n    <string name=\"creating_backup\">Back-up aan het maken</string>\n    <string name=\"used_cache\">Gebruikt: %1$s</string>\n    <string name=\"pref_clear_cookies\">Verwijder cookies</string>\n    <string name=\"cookies_cleared\">Cookies verwijdered</string>\n    <string name=\"version\">Versie</string>\n    <string name=\"login_title\">Log in op %1$s</string>\n    <string name=\"username\">Gebruikersnaam</string>\n    <string name=\"password\">Wachtwoord</string>\n    <string name=\"login\">Log in</string>\n    <string name=\"unknown_error\">Onbekende fout</string>\n    <string name=\"updating_category\">Categorie bijwerken</string>\n    <string name=\"no_more_results\">Geen verdere resultaten</string>\n    <string name=\"local_source\">Lokale bron</string>\n    <string name=\"unknown\">Onbekend</string>\n    <string name=\"remove_from_library\">Verwijderen uit bibliotheek</string>\n    <string name=\"display_mode_chapter\">Hoofdstuk %1$s</string>\n    <string name=\"chapter_downloading_progress\">Aan het downloaden (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Fout</string>\n    <string name=\"chapter_paused\">Gepauzeerd</string>\n    <string name=\"show_title\">Brontitel</string>\n    <string name=\"show_chapter_number\">Hoofdstuknummer</string>\n    <string name=\"sort_by_source\">Op bron</string>\n    <string name=\"sort_by_number\">Op hoofdstuknummer</string>\n    <string name=\"manga_download\">Downloaden</string>\n    <string name=\"download_unread\">Ongelezen</string>\n    <string name=\"confirm_delete_chapters\">Weet je zeker dat je de geselecteerde hoofdstukken wilt verwijderen?</string>\n    <string name=\"manga_tracking_tab\">Tracking</string>\n    <string name=\"completed\">Voltooid</string>\n    <string name=\"score\">Score</string>\n    <string name=\"title\">Titel</string>\n    <string name=\"status\">Status</string>\n    <string name=\"error_category_exists\">Er bestaat al een categorie met deze naam!</string>\n    <string name=\"snack_categories_deleted\">Categorieën verwijderd</string>\n    <string name=\"dialog_with_checkbox_reset\">Stel alle hoofdstukken voor dit item opnieuw in</string>\n    <string name=\"snack_add_to_library\">Toevoegen aan bibliotheek?</string>\n    <string name=\"picture_saved\">Afbeelding opgeslagen</string>\n    <string name=\"custom_filter\">Aangepast filter</string>\n    <string name=\"set_as_cover\">Instellen als omslagfoto</string>\n    <string name=\"cover_updated\">Omslagfoto bijgewerkt</string>\n    <string name=\"chapter_progress\">Pagina: %1$d</string>\n    <string name=\"no_next_chapter\">Volgend hoofdstuk niet gevonden</string>\n    <string name=\"confirm_set_image_as_cover\">Deze afbeelding als omslagfoto gebruiken?</string>\n    <string name=\"notification_new_chapters\">Nieuwe hoofdstukken gevonden</string>\n    <string name=\"notification_first_add_to_library\">Voeg het item eerst aan je bibliotheek toe voordat je dit doet</string>\n    <string name=\"file_select_cover\">Selecteer omslagfoto</string>\n    <string name=\"file_select_backup\">Selecteer back-upbestand</string>\n    <string name=\"update_check_confirm\">Download</string>\n    <string name=\"update_check_no_new_updates\">Geen nieuwe updates beschikbaar</string>\n    <string name=\"update_check_notification_download_complete\">Download voltooid</string>\n    <string name=\"update_check_notification_update_available\">Nieuwe versie beschikbaar!</string>\n    <string name=\"information_no_downloads\">Geen downloads</string>\n    <string name=\"information_no_recent\">Geen recente updates</string>\n    <string name=\"information_empty_library\">Je bibliotheek is leeg</string>\n    <string name=\"information_empty_category\">Er zijn nog geen categorieën. Druk op de plus-knop om er een aan te maken.</string>\n    <string name=\"download_notifier_downloader_title\">Downloader</string>\n    <string name=\"download_notifier_title_error\">Fout</string>\n    <string name=\"download_notifier_text_only_wifi\">Geen Wi-Fi-verbinding beschikbaar</string>\n    <string name=\"download_notifier_no_network\">Geen netwerkverbinding beschikbaar</string>\n    <string name=\"download_notifier_download_paused\">Download gepauzeerd</string>\n    <string name=\"label_recent_updates\">Updates</string>\n    <string name=\"action_sort_total\">Aantal hoofdstukken</string>\n    <string name=\"app_not_available\">App niet beschikbaar</string>\n    <string name=\"pref_category_about\">Over</string>\n    <string name=\"portrait\">Staand</string>\n    <string name=\"landscape\">Liggend</string>\n    <string name=\"charging\">Aan het opladen</string>\n    <string name=\"pref_reader_navigation\">Navigatie</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Draai volumeknoppen om</string>\n    <string name=\"pref_image_scale_type\">Schaalmodus</string>\n    <string name=\"scale_type_fit_screen\">Aanpassen aan scherm</string>\n    <string name=\"pref_zoom_start\">Zoom startpositie</string>\n    <string name=\"rotation_force_portrait\">Vergrendeld staand</string>\n    <string name=\"rotation_force_landscape\">Vergrendeld liggend</string>\n    <string name=\"pref_remove_after_marked_as_read\">Nadat ze handmatig gemarkeerd zijn als gelezen</string>\n    <string name=\"pref_remove_after_read\">Automatisch verwijderen na het lezen</string>\n    <string name=\"disabled\">Uitgeschakeld</string>\n    <string name=\"fourth_to_last\">Drie-na-laatste gelezen hoofdstuk</string>\n    <string name=\"fifth_to_last\">Vier-na-laatste gelezen hoofdstuk</string>\n    <string name=\"pref_clear_chapter_cache\">Leeg hoofdstukkencache</string>\n    <string name=\"cache_deleted\">Cache geleegd. %1$d bestanden zijn verwijderd</string>\n    <string name=\"cache_delete_error\">Fout opgetreden tijdens het wissen</string>\n    <string name=\"pref_clear_database\">Database leegmaken</string>\n    <string name=\"pref_clear_database_summary\">Verwijder geschiedenis voor items die niet in je bibliotheek zijn opgeslagen</string>\n    <string name=\"pref_enable_acra\">Rapporteer bugs</string>\n    <string name=\"pref_acra_summary\">Helpt bij het oplossen van bugs. Er wordt geen gevoelige data verzonden</string>\n    <string name=\"information_no_recent_manga\">Niks recent gelezen</string>\n    <string name=\"download_notifier_unknown_error\">Kon dit hoofdstuk niet downloaden door een onverwachte fout</string>\n    <string name=\"pref_library_update_restriction\">Toestel beperkingen voor automatisch bijwerken</string>\n    <string name=\"pref_update_only_non_completed\">Gelezen series</string>\n    <string name=\"pref_auto_update_manga_sync\">Voortgang bijwerken na lezen</string>\n    <string name=\"pref_keep_screen_on\">Scherm aanhouden</string>\n    <string name=\"clear_database_confirmation\">Weet je het zeker? Gelezen hoofdstukken en voortgang voor items die niet in de bibliotheek zitten zullen verloren gaan</string>\n    <string name=\"clear_database_completed\">Database geleegd</string>\n    <string name=\"ongoing\">Lopend</string>\n    <string name=\"delete_downloads_for_manga\">Verwijder gedownloade hoofdstukken?</string>\n    <string name=\"reading\">Aan het lezen</string>\n    <string name=\"dropped\">Opgegeven</string>\n    <string name=\"on_hold\">Gepauzeerd</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Dit verwijdert de datum waarop het hoofdstuk is gelezen. Weet je het zeker?</string>\n    <string name=\"decode_image_error\">De afbeelding kon niet worden geladen</string>\n    <string name=\"download_queue_error\">Kon hoofdstukken niet downloaden. Je kan het opnieuw proberen in het downloadscherm</string>\n    <string name=\"notification_cover_update_failed\">Updaten van omslag mislukt</string>\n    <string name=\"update_check_notification_download_in_progress\">Downloaden…</string>\n    <string name=\"update_check_notification_download_error\">Fout bij het downloaden</string>\n    <string name=\"action_filter_bookmarked\">Met bladwijzer</string>\n    <string name=\"login_success\">Ingelogd</string>\n    <string name=\"licensed\">Gelicenseerd</string>\n    <string name=\"plan_to_read\">Van plan te lezen</string>\n    <string name=\"action_global_search\">Globaal zoeken</string>\n    <string name=\"action_display_download_badge\">Gedownloade hoofdstukken</string>\n    <string name=\"other_source\">Anders</string>\n    <string name=\"action_global_search_hint\">Globaal zoeken…</string>\n    <string name=\"latest\">Nieuwste</string>\n    <string name=\"browse\">Bladeren</string>\n    <string name=\"channel_common\">Algemeen</string>\n    <string name=\"label_migration\">Migreren</string>\n    <string name=\"label_extensions\">Extensies</string>\n    <string name=\"label_extension_info\">Informatie over extensie</string>\n    <string name=\"ext_update\">Bijwerken</string>\n    <string name=\"ext_install\">Installeren</string>\n    <string name=\"ext_pending\">Aan het afwachten</string>\n    <string name=\"ext_downloading\">Aan het downloaden</string>\n    <string name=\"ext_installing\">Aan het installeren</string>\n    <string name=\"ext_installed\">Geïnstalleerd</string>\n    <string name=\"ext_trust\">Vertrouwen</string>\n    <string name=\"ext_untrusted\">Niet vertrouwd</string>\n    <string name=\"ext_uninstall\">Verwijderen</string>\n    <string name=\"untrusted_extension\">Niet vertrouwde extensie</string>\n    <string name=\"untrusted_extension_message\">Kwaadaardige extensies kunnen alle opgeslagen inloggegevens uitlezen of arbitraire code uitvoeren. \\n \\nDoor deze extensie te vertrouwen accepteer je deze risico\\'s.</string>\n    <string name=\"pref_double_tap_anim_speed\">Dubbeltik animatiesnelheid</string>\n    <string name=\"pref_read_with_long_tap\">Weergeven bij lang tikken</string>\n    <string name=\"pager_viewer\">Gepagineerd</string>\n    <string name=\"double_tap_anim_speed_0\">Geen animatie</string>\n    <string name=\"double_tap_anim_speed_normal\">Normaal</string>\n    <string name=\"double_tap_anim_speed_fast\">Snel</string>\n    <string name=\"manga_added_library\">Toegevoegd aan bibliotheek</string>\n    <string name=\"manga_removed_library\">Verwijderd uit bibliotheek</string>\n    <string name=\"copied_to_clipboard\">Gekopieerd naar het klembord:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Bron niet geïnstalleerd: %1$s</string>\n    <string name=\"repeating\">Opnieuw aan het lezen</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Soort</string>\n    <string name=\"transition_finished\">Afgerond:</string>\n    <string name=\"transition_current\">Huidige:</string>\n    <string name=\"transition_next\">Volgende:</string>\n    <string name=\"transition_previous\">Vorige:</string>\n    <string name=\"transition_no_next\">Er is geen volgend hoofdstuk</string>\n    <string name=\"transition_no_previous\">Er is geen vorig hoofdstuk</string>\n    <string name=\"transition_pages_loading\">Pagina\\'s aan het laden…</string>\n    <string name=\"transition_pages_error\">Fout bij het laden van pagina\\'s : %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Selecteer data om mee te nemen</string>\n    <string name=\"migrate\">Migreren</string>\n    <string name=\"copy\">Kopiëren</string>\n    <string name=\"action_open_in_web_view\">Openen in WebView</string>\n    <string name=\"pref_skip_read_chapters\">Gelezen hoofdstukken overslaan</string>\n    <string name=\"filter_mode_overlay\">Overlay</string>\n    <string name=\"filter_mode_multiply\">Vermenigvuldigen</string>\n    <string name=\"filter_mode_screen\">Bleken</string>\n    <string name=\"label_help\">Help</string>\n    <string name=\"pref_color_filter_mode\">Mengmodus kleurfilter</string>\n    <string name=\"filter_mode_lighten\">Tegenhouden / Lichter</string>\n    <string name=\"filter_mode_darken\">Doordrukken / Donkerder</string>\n    <string name=\"no_results_found\">Geen resultaten gevonden</string>\n    <string name=\"migration_selection_prompt\">Selecteer een bron om uit te migreren</string>\n    <string name=\"action_webview_back\">Terugkeren</string>\n    <string name=\"action_webview_forward\">Vooruit</string>\n    <string name=\"action_webview_refresh\">Vernieuwen</string>\n    <string name=\"pref_category_library\">Bibliotheek</string>\n    <string name=\"ext_obsolete\">Verouderd</string>\n    <string name=\"obsolete_extension_message\">Deze extensie is niet meer beschikbaar. Mogelijk zal deze niet meer naar behoren functioneren en kan problemen binnen de app veroorzaken. Het wordt aangeraden de extensie te verwijderen.</string>\n    <string name=\"pref_date_format\">Datumformaat</string>\n    <string name=\"pref_category_library_update\">Globaal bijwerken</string>\n    <string name=\"logout_title\">Uitloggen bij %1$s?</string>\n    <string name=\"logout\">Uitloggen</string>\n    <string name=\"logout_success\">U bent nu uitgelogd</string>\n    <string name=\"paused\">Gepauzeerd</string>\n    <string name=\"label_more\">Meer</string>\n    <string name=\"action_sort_latest_chapter\">Laatste hoofdstuk</string>\n    <string name=\"action_view_chapters\">Hoofdstukken bekijken</string>\n    <string name=\"action_cancel_all\">Alles annuleren</string>\n    <string name=\"theme_light\">Uit</string>\n    <string name=\"theme_dark\">Aan</string>\n    <string name=\"theme_system\">Volg systeeminstelling</string>\n    <string name=\"pref_manage_notifications\">Meldingen beheren</string>\n    <string name=\"pref_category_security\">Beveiliging en privacy</string>\n    <string name=\"lock_with_biometrics\">Vereis ontgrendeling</string>\n    <string name=\"lock_when_idle\">Vergrendelen indien niet in gebruik</string>\n    <string name=\"lock_always\">Altijd</string>\n    <string name=\"lock_never\">Nooit</string>\n    <string name=\"secure_screen\">Scherm beveiligen</string>\n    <string name=\"ext_updates_pending\">Updates in de wachtrij</string>\n    <string name=\"information_cloudflare_bypass_failure\">Kon Cloudflare niet omzeilen</string>\n    <string name=\"information_webview_outdated\">Gelieve de WebView-app bij te werken voor betere compatibiliteit</string>\n    <string name=\"channel_new_chapters\">Hoofdstukupdates</string>\n    <string name=\"secure_screen_summary\">Veilig scherm modus verbergt de inhoud van de app bij het wisselen en blokkeert schermafbeeldingen</string>\n    <string name=\"pref_category_display\">Weergave</string>\n    <string name=\"action_move_to_bottom\">Verplaats naar beneden</string>\n    <string name=\"action_oldest\">Oudste</string>\n    <string name=\"action_newest\">Nieuwste</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_pin\">Vastpinnen</string>\n    <string name=\"label_sources\">Bronnen</string>\n    <string name=\"action_select_inverse\">Selectie omkeren</string>\n    <string name=\"restoring_backup_canceled\">Herstellen geannuleerd</string>\n    <string name=\"restoring_backup_error\">Herstellen mislukt</string>\n    <string name=\"restore_in_progress\">Er wordt al een back-up hersteld</string>\n    <string name=\"channel_ext_updates\">Extensie-updates</string>\n    <string name=\"information_webview_required\">WebView is vereist voor Mihon</string>\n    <string name=\"notification_chapters_multiple\">Hoofdstukken %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Hoofdstuk %1$s en %2$d meer</string>\n    <string name=\"notification_chapters_single\">Hoofdstuk %1$s</string>\n    <string name=\"recent_manga_time\">Hfst. %1$s - %2$s</string>\n    <string name=\"updating_library\">Bibliotheek bijwerken</string>\n    <string name=\"add_tracking\">Tracking toevoegen</string>\n    <string name=\"manga_info_collapse\">Minder</string>\n    <string name=\"manga_info_expand\">Meer</string>\n    <string name=\"in_library\">In bibliotheek</string>\n    <string name=\"add_to_library\">Toevoegen aan bibliotheek</string>\n    <string name=\"local_source_help_guide\">Hulp bij lokale bronnen</string>\n    <string name=\"pinned_sources\">Vastgepind</string>\n    <string name=\"last_used_source\">Laatst gebruikt</string>\n    <string name=\"email\">E-mailadres</string>\n    <string name=\"downloaded_only_summary\">Filtert alle items in de bibliotheek</string>\n    <string name=\"label_downloaded_only\">Alleen gedownloade</string>\n    <string name=\"check_for_updates\">Controleer op updates</string>\n    <string name=\"licenses\">Open-sourcelicenties</string>\n    <string name=\"website\">Website</string>\n    <string name=\"battery_optimization_disabled\">Batterijoptimalisatie is al uitgeschakeld</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Helpt bij het bijwerken van bibliotheek en back-ups op de achtergrond</string>\n    <string name=\"pref_disable_battery_optimization\">Batterijoptimalisatie uitzetten</string>\n    <string name=\"creating_backup_error\">Back-up mislukt</string>\n    <string name=\"backup_in_progress\">Er wordt al een back-up gemaakt</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d sec</string>\n    <string name=\"pref_category_reading\">Lezen</string>\n    <string name=\"pref_always_show_chapter_transition\">Hoofdstukovergangen altijd weergeven</string>\n    <string name=\"vertical_plus_viewer\">Doorlopend verticaal</string>\n    <string name=\"pref_skip_filtered_chapters\">Gefilterde hoofdstukken overslaan</string>\n    <string name=\"pref_cutout_short\">Inhoud in uitgesneden gebied laten zien</string>\n    <string name=\"hide_notification_content\">Meldingsinhoud verbergen</string>\n    <string name=\"action_move_to_top\">Verplaats naar top</string>\n    <string name=\"action_unpin\">Lospinnen</string>\n    <string name=\"viewer\">Leesmodus</string>\n    <string name=\"pref_category_for_this_series\">Voor deze serie</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Kon de apparaatinstellingen niet openen</string>\n    <string name=\"pref_webtoon_side_padding\">Opvulling zijkant</string>\n    <string name=\"gray_background\">Grijs</string>\n    <string name=\"pref_refresh_library_covers\">Omslagen van manga in bibliotheek bijwerken</string>\n    <string name=\"tracking_info\">Eenzijdige synchronisatie om voortang van hoofdstukken bij te werken bij externe trackerdiensten. Stel tracking in bij individuele items via de \\\"Tracking\\\"-knop.</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Controleer bij het bijwerken van de bibliotheek op nieuwe omslag en details</string>\n    <string name=\"loader_not_implemented_error\">Bron niet gevonden</string>\n    <string name=\"page_list_empty_error\">Geen pagina\\'s gevonden</string>\n    <string name=\"sort_by_upload_date\">Op uploaddatum</string>\n    <string name=\"tabs_header\">Tabbladen</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"backup_restore_missing_sources\">Missende bronnen:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Back-up bevat geen items.</string>\n    <string name=\"invalid_backup_file\">Ongeldig back-upbestand:</string>\n    <string name=\"pref_show_reading_mode_summary\">Laat huidige modus kort zien als lezer geopend wordt</string>\n    <string name=\"pref_show_reading_mode\">Toon leesmodus</string>\n    <string name=\"pref_library_update_refresh_metadata\">Metadata automatisch bijwerken</string>\n    <string name=\"action_disable\">Uitzetten</string>\n    <string name=\"action_display_show_tabs\">Toon categorietabbladen</string>\n    <string name=\"action_display_comfortable_grid\">Comfortabel raster</string>\n    <string name=\"action_migrate\">Migreren</string>\n    <string name=\"action_start\">Beginnen</string>\n    <string name=\"action_disable_all\">Alles uitzetten</string>\n    <string name=\"action_enable_all\">Alles aanzetten</string>\n    <string name=\"requires_app_restart\">Herstart van de app nodig om van kracht te worden</string>\n    <string name=\"label_network\">Netwerken</string>\n    <string name=\"tapping_inverted_both\">Beiden</string>\n    <string name=\"tapping_inverted_vertical\">Verticaal</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontaal</string>\n    <string name=\"tapping_inverted_none\">Niet omkeren</string>\n    <string name=\"pref_read_with_tapping_inverted\">Tikken omkeren</string>\n    <string name=\"unknown_status\">Onbekende status</string>\n    <string name=\"unknown_author\">Onbekende auteur</string>\n    <string name=\"download_insufficient_space\">Kon hoofdstukken niet downloaden omdat er te weinig opslagruimte is</string>\n    <string name=\"action_global_search_query\">Overal zoeken naar \\\"%1$s\\\"</string>\n    <string name=\"updated_version\">Bijgewerkt naar v%1$s</string>\n    <string name=\"whats_new\">Wat is er nieuw</string>\n    <string name=\"pref_category_reading_mode\">Leesmodus</string>\n    <string name=\"pref_category_theme\">Thema</string>\n    <string name=\"action_sort_date_added\">Datum toegevoegd</string>\n    <string name=\"no_pinned_sources\">Je hebt geen vastgepinde bronnen</string>\n    <string name=\"channel_complete\">Voltooid</string>\n    <string name=\"channel_progress\">Voortgang</string>\n    <string name=\"channel_errors\">Fouten</string>\n    <string name=\"backup_restore_missing_trackers\">Niet-ingelogde trackers:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Verwijderen van hoofdstukken met bladwijzers toestaan</string>\n    <string name=\"pref_category_delete_chapters\">Hoofdstukken verwijderen</string>\n    <string name=\"ext_nsfw_warning\">Kan NSFW-inhoud (18+) bevatten</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Dit voorkomt niet dat onofficiële of mogelijk incorrect gemarkeerde extensies NSFW-inhoud (18+) kunnen laten zien in de app.</string>\n    <string name=\"no_chapters_error\">Geen hoofdstukken gevonden</string>\n    <string name=\"chapter_settings_updated\">Standaard hoofdstukinstellingen bijgewerkt</string>\n    <string name=\"set_chapter_settings_as_default\">Instellen als standaard</string>\n    <string name=\"also_set_chapter_settings_for_library\">Ook toepassen op alle items in mijn bibliotheek</string>\n    <string name=\"confirm_set_chapter_settings\">Weet je zeker dat je deze instellingen als standaardinstellingen wilt opslaan?</string>\n    <string name=\"chapter_settings\">Hoofdstukinstellingen</string>\n    <string name=\"share_page_info\">%1$s: %2$s, pagina %3$d</string>\n    <string name=\"action_search_settings\">Zoekinstellingen</string>\n    <string name=\"downloaded_chapters\">Gedownloade hoofdstukken</string>\n    <string name=\"manga_from_library\">Uit de bibliotheek</string>\n    <string name=\"pref_incognito_mode_summary\">Pauzeert leesgeschiedenis</string>\n    <string name=\"pref_incognito_mode\">Incognitomodus</string>\n    <string name=\"pref_clear_history\">Geschiedenis wissen</string>\n    <string name=\"clear_history_confirmation\">Weet je dit zeker? Alle geschiedenis zal verloren gaan.</string>\n    <string name=\"clear_history_completed\">Geschiedenis verwijderd</string>\n    <string name=\"spen_next_page\">Volgende pagina</string>\n    <string name=\"spen_previous_page\">Vorige pagina</string>\n    <string name=\"migration_help_guide\">Bronmigratiegids</string>\n    <string name=\"pref_category_nsfw_content\">NSFW-bronnen (18+)</string>\n    <string name=\"file_picker_error\">Geen bestandskiezer-app gevonden</string>\n    <string name=\"myanimelist_relogin\">Log alstublieft opnieuw in op MAL</string>\n    <string name=\"pref_show_nsfw_source\">Weergeven in bronnen- en extensielijst</string>\n    <string name=\"pref_viewer_nav\">Navigatie-indeling</string>\n    <string name=\"edge_nav\">Rand</string>\n    <string name=\"kindlish_nav\">Kindle-achtig</string>\n    <string name=\"l_nav\">L-vormig</string>\n    <string name=\"track_finished_reading_date\">Einddatum</string>\n    <string name=\"track_started_reading_date\">Begindatum</string>\n    <string name=\"pref_dump_crash_logs_summary\">Slaat foutmeldingslogboeken op in een bestand om te delen met de ontwikkelaars</string>\n    <string name=\"pref_dump_crash_logs\">Crashlogboeken opslaan</string>\n    <string name=\"action_desc\">Aflopend</string>\n    <string name=\"action_asc\">Oplopend</string>\n    <string name=\"action_order_by_chapter_number\">Op hoofdstuknummer</string>\n    <string name=\"action_order_by_upload_date\">Op uploaddatum</string>\n    <string name=\"action_display_show_number_of_items\">Aantal items tonen</string>\n    <string name=\"action_filter_tracked\">Getracked</string>\n    <string name=\"right_and_left_nav\">Rechts en links</string>\n    <string name=\"pref_dual_page_split\">Brede pagina\\'s opsplitsen</string>\n    <string name=\"backup_restore_content_full\">Je zal mogelijk missende extensies opnieuw moeten installeren en opnieuw moeten inloggen bij trackingdiensten om deze weer te gebruiken.</string>\n    <string name=\"nav_zone_right\">Rechts</string>\n    <string name=\"nav_zone_left\">Links</string>\n    <string name=\"nav_zone_next\">Volgende</string>\n    <string name=\"nav_zone_prev\">Vorige</string>\n    <string name=\"pref_dual_page_invert_summary\">Als de paginasplitsing in de breedte niet overeenkomt met de leesrichting</string>\n    <string name=\"pref_dual_page_invert\">paginasplitsing omkeren</string>\n    <string name=\"pref_show_navigation_mode_summary\">Laat de tikzones zien als de lezer wordt geopend</string>\n    <string name=\"pref_show_navigation_mode\">Navigatielayout als overlay laten zien</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"pref_download_new_categories_details\">Items in uitgezonderde categorieën worden niet gedownload, zelfs niet als ze onder opgenomen categorieën vallen.</string>\n    <string name=\"pref_category_auto_download\">Automatisch downloaden</string>\n    <string name=\"exclude\">Uitgezonderd: %s</string>\n    <string name=\"include\">Inbegrepen: %s</string>\n    <string name=\"pref_library_update_categories_details\">Items in uitgesloten categorieën worden niet bijgewerkt, zelfs niet als ze onder opgenomen categorieën vallen.</string>\n    <string name=\"action_sort_chapter_fetch_date\">Datum opgehaald</string>\n    <string name=\"none\">Geen</string>\n    <string name=\"action_show_errors\">Klik om details te weergeven</string>\n    <string name=\"update_check_eol\">Deze Android versie wordt niet meer ondersteund</string>\n    <string name=\"clipboard_copy_error\">Mislukt om naar het klemboord te kopiëren</string>\n    <string name=\"notification_incognito_text\">Incognitomodus uitschakelen</string>\n    <string name=\"rotation_landscape\">Liggend</string>\n    <string name=\"rotation_portrait\">Staand</string>\n    <string name=\"rotation_type\">Oriëntatie</string>\n    <string name=\"automatic_background\">Automatisch</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Mappen aanmaken op basis van titel</string>\n    <string name=\"pref_create_folder_per_manga\">Pagina\\'s opslaan in aparte mappen</string>\n    <string name=\"pref_reader_actions\">Acties</string>\n    <string name=\"pref_grayscale\">Grijstinten</string>\n    <string name=\"cancel_all_for_series\">Alles annuleren voor deze serie</string>\n    <string name=\"error_no_match\">Geen overeenkomst gevonden</string>\n    <string name=\"source_unsupported\">Bron wordt niet ondersteund</string>\n    <string name=\"unread\">Ongelezen</string>\n    <string name=\"date\">Datum</string>\n    <string name=\"local_filter_order_by\">Sorteer op</string>\n    <string name=\"chapter_not_found\">Hoofdstuk niet gevonden</string>\n    <string name=\"restrictions\">Beperkingen: %s</string>\n    <string name=\"error_sharing_cover\">Fout bij delen van omslag</string>\n    <string name=\"error_saving_cover\">Fout bij opslaan van omslag</string>\n    <string name=\"cover_saved\">Omslag opgeslagen</string>\n    <string name=\"manga_cover\">Omslag</string>\n    <string name=\"local_invalid_format\">Ongeldig hoofstukkenformaat</string>\n    <string name=\"tracking_guide\">Trackinghandleiding</string>\n    <string name=\"off\">Uit</string>\n    <string name=\"on\">Aan</string>\n    <string name=\"categorized_display_settings\">Instellingen per categorie voor sorteren en weergeven</string>\n    <string name=\"action_display_local_badge\">Lokale bron</string>\n    <string name=\"information_empty_category_dialog\">Er zijn nog geen categorieën.</string>\n    <string name=\"action_start_downloading_now\">Begin nu met downloaden</string>\n    <string name=\"about_dont_kill_my_app\">Sommige fabrikanten hebben extra beperkingen op apps die achtergronddiensten uitschakelen. Informatie over hoe je dit kan oplossen kan je vinden op de deze website.</string>\n    <string name=\"restore_miui_warning\">Backup/herstellen werkt waarschijnlijk niet goed als de MIUI Optimalisatie is uitgeschakeld.</string>\n    <string name=\"pref_dark_theme_pure_black\">Puur-zwarte donkere modus</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Aardbeien Daiquiri</string>\n    <string name=\"theme_midnightdusk\">Nachtschemering</string>\n    <string name=\"theme_greenapple\">Groene Appel</string>\n    <string name=\"pref_app_theme\">Appthema</string>\n    <string name=\"enhanced_tracking_info\">Bieden uitgebreidere functionaliteit voor bepaalde bronnen. Het tracken van items gebeurt automatisch wanneer je deze toevoegt aan je bibliotheek.</string>\n    <string name=\"enhanced_services\">Verbeterde trackers</string>\n    <string name=\"theme_monet\">Dynamisch</string>\n    <string name=\"getting_started_guide\">Gids voor beginners</string>\n    <string name=\"help_translate\">Help met vertalen</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet UI</string>\n    <string name=\"label_background_activity\">Achtergrond activiteit</string>\n    <string name=\"action_track\">Volg</string>\n    <string name=\"pref_remove_exclude_categories\">Uitgesloten categoriën</string>\n    <string name=\"pref_lowest\">Laagste</string>\n    <string name=\"pref_low\">Laag</string>\n    <string name=\"pref_high\">Hoog</string>\n    <string name=\"pref_highest\">Hoogste</string>\n    <string name=\"pref_hide_threshold\">Sensitiviteit voor het verbergen van het menu tijdens scrollen</string>\n    <string name=\"pref_inverted_colors\">Omgekeerd</string>\n    <string name=\"relative_time_today\">Vandaag</string>\n    <string name=\"theme_tealturquoise\">Blauwgroen &amp; Turkoois</string>\n    <string name=\"pref_category_appearance\">Uiterlijk</string>\n    <string name=\"confirm_lock_change\">Authenticeer om de wijziging te bevestigen</string>\n    <string name=\"label_default\">Standaard</string>\n    <string name=\"ext_app_info\">App-informatie</string>\n    <string name=\"ext_install_service_notif\">Extensies installeren…</string>\n    <string name=\"action_display_language_badge\">Taal</string>\n    <string name=\"label_warning\">Waarschuwing</string>\n    <string name=\"ext_installer_legacy\">Verouderd</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku wordt niet uitgevoerd</string>\n    <string name=\"ext_installer_pref\">Installatieprogramma</string>\n    <string name=\"backup_info\">Je zou kopies van back-ups ook in andere plaatsen moeten hebben. Back-ups kunnen gevoelige data zoals opgeslagen wachtwoorden bevatten; let op met delen.</string>\n    <string name=\"connected_to_wifi\">Alleen via Wi-Fi</string>\n    <string name=\"pref_verbose_logging\">Uitgebreide logging</string>\n    <string name=\"notification_size_warning\">Waarschuwing: grote updates beschadigen bronnen en kunnen leiden tot tragere updates en verhoogd batterijgebruik. Tik om meer te leren.</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installeer en start Shizuku om deze als extensie-installatieprogramma te gebruiken.</string>\n    <string name=\"action_sort_count\">Totaal aantal items</string>\n    <string name=\"pref_verbose_logging_summary\">Houd uitgebreide logs bij in de systeemlogs (verslechterd de werking van de app)</string>\n    <string name=\"channel_app_updates\">App updates</string>\n    <string name=\"download_queue_size_warning\">Waarschuwing: grote bulk downloads kunnen leiden tot bronnen die trager werken en/of Mihon blokkeren. Tik om meer te leren.</string>\n    <string name=\"ext_update_all\">Alles updaten</string>\n    <string name=\"update_72hour\">Iedere 3 dagen</string>\n    <string name=\"library_errors_help\">Voor hulp bij het oplossen van fouten bij het bijwerken van de bibliotheek, zie %1$s</string>\n    <string name=\"database_clean\">Niks om te wissen</string>\n    <string name=\"privacy_policy\">Privacybeleid</string>\n    <string name=\"clear_database_source_item_count\">%1$d items niet in de bibliotheek in database</string>\n    <string name=\"save_chapter_as_cbz\">Opslaan als CBZ archief</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Hoofdstuk cache leegmaken na het sluiten van de app</string>\n    <string name=\"pref_update_only_completely_read\">Heeft ongelezen hoofdstukken</string>\n    <string name=\"extension_api_error\">Lijst met extensies ophalen mislukt</string>\n    <string name=\"publishing_finished\">Uitgave voltooid</string>\n    <string name=\"cancelled\">Geannuleerd</string>\n    <string name=\"on_hiatus\">Gepauzeerd</string>\n    <string name=\"notification_update_error\">%1$d update(s) mislukt</string>\n    <string name=\"learn_more\">Kom meer te weten</string>\n    <string name=\"skipped_reason_not_caught_up\">Overgeslagen want er zijn geen ongelezen hoofdstukken</string>\n    <string name=\"skipped_reason_not_started\">Overgeslagen want er zijn geen gelezen hoofdstukken</string>\n    <string name=\"pref_landscape_zoom\">Zoom liggende afbeelding</string>\n    <string name=\"pref_navigate_pan\">Tik om door brede afbeeldingen te scrollen</string>\n    <string name=\"action_show_manga\">Laat item zien</string>\n    <string name=\"action_display_cover_only_grid\">Alleen-cover rooster</string>\n    <string name=\"rotation_reverse_portrait\">Omgedraaid portret-modus</string>\n    <string name=\"action_move_to_top_all_for_series\">Breng serie naar boven</string>\n    <string name=\"pref_update_only_started\">Geen gelezen hoofdstukken</string>\n    <string name=\"skipped_reason_completed\">Overgeslagen want de serie is af</string>\n    <string name=\"split_tall_images_summary\">Verbetert de prestaties van de lezer</string>\n    <string name=\"complete_list\">Volledige lijst</string>\n    <string name=\"unfinished_list\">Onvoltooide lijst</string>\n    <string name=\"download_ahead\">Download vooruit</string>\n    <string name=\"webview_data_deleted\">WebView-gegevens gewist</string>\n    <string name=\"pref_clear_webview_data\">WebView-gegevens wissen</string>\n    <string name=\"download_notifier_split_page_not_found\">Pagina %d niet gevonden tijdens het splitsen</string>\n    <string name=\"internal_error\">InternalError: Bekijk de crash logs voor meer informatie</string>\n    <string name=\"theme_lavender\">Lavendel</string>\n    <string name=\"action_sort_last_manga_update\">Laatst gecontroleerd op updates</string>\n    <string name=\"action_remove_everything\">Alles verwijderen</string>\n    <string name=\"delete_category_confirmation\">Wenst u categorie \\\"%s\\\" te verwijderen?</string>\n    <string name=\"delete_category\">Categorie verwijderen</string>\n    <string name=\"action_close\">Sluiten</string>\n    <string name=\"theme_tidalwave\">Vloedgolf</string>\n    <string name=\"disabled_nav\">Uitgeschakeld</string>\n    <string name=\"network_not_metered\">Alleen op ongelimiteerd netwerk</string>\n    <string name=\"auto_download_while_reading\">Automatisch downloaden tijdens het lezen</string>\n    <string name=\"ext_info_language\">Taal</string>\n    <string name=\"multi_lang\">Meerdere</string>\n    <string name=\"ext_info_age_rating\">Classificatie per leeftijd</string>\n    <string name=\"ext_info_version\">Versie</string>\n    <string name=\"pref_app_language\">Taal van de applicatie</string>\n    <string name=\"empty_backup_error\">Geen bibliotheek inzendingen om te backuppen</string>\n    <string name=\"action_sort_unread_count\">Ongelezen aantal</string>\n    <string name=\"download_ahead_info\">Werkt alleen als het huidige hoofdstuk en het volgende alreeds gedownload zijn.</string>\n    <string name=\"pref_user_agent_string\">Standaard \\'user-agent-string\\'</string>\n    <string name=\"action_search_hint\">Zoek…</string>\n    <string name=\"missing_storage_permission\">Opslag bevoegdheden niet verleent</string>\n    <string name=\"action_display_show_continue_reading_button\">Knop om lezen te hervatten weergeven</string>\n    <string name=\"label_stats\">Statistieken</string>\n    <string name=\"label_started\">Gestart</string>\n    <string name=\"label_local\">Lokaal</string>\n    <string name=\"label_downloaded\">Gedownload</string>\n    <string name=\"action_not_now\">Niet nu</string>\n    <string name=\"action_open_random_manga\">Willekeurige openen</string>\n    <string name=\"pref_appearance_summary\">Thema, datum- en tijdnotatie</string>\n    <string name=\"pref_library_summary\">Categorieën, globaal bijwerken</string>\n    <string name=\"pref_reader_summary\">Leesmodus, weergave, navigatie</string>\n    <string name=\"pref_downloads_summary\">Automatische downloads, vooraf downloaden</string>\n    <string name=\"pref_browse_summary\">Bronnen, extensies, globaal zoeken</string>\n    <string name=\"pref_backup_summary\">Handmatige &amp; automatische back-ups, opslagruimte</string>\n    <string name=\"pref_security_summary\">App-vergrendeling, schermbeveiliging</string>\n    <string name=\"pref_reset_viewer_flags_success\">Alle leesinstellingen teruggezet naar de standaardwaarden</string>\n    <string name=\"pref_reset_viewer_flags_error\">Kon leesinstellingen niet terugzetten naar standaardwaarden</string>\n    <string name=\"popular\">Populair</string>\n    <string name=\"download_notifier_cache_renewal\">Downloads worden gecontroleerd</string>\n    <string name=\"fdroid_warning\">F-Droid versies worden niet officieel ondersteund.\n\\nTik hier voor meer informatie.</string>\n    <string name=\"pref_skip_dupe_chapters\">Dubbele hoofdstukken overslaan</string>\n    <string name=\"are_you_sure\">Weet je het zeker?</string>\n    <string name=\"confirm_add_duplicate_manga\">Je hebt momenteel een item in je bibliotheek met dezelfde naam.\n\\n\n\\nWil je alsnog verdergaan?</string>\n    <string name=\"reading_list\">Leeslijst</string>\n    <string name=\"description_placeholder\">Geen beschrijving</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Zet de instellingen voor de leesmodus en het draaitype terug naar de standaardwaarden voor alle series</string>\n    <string name=\"error_user_agent_string_invalid\">Ongeldige user agent</string>\n    <string name=\"unknown_title\">Onbekende titel</string>\n    <string name=\"on_hold_list\">Wachtlijst</string>\n    <string name=\"appwidget_unavailable_locked\">Widget niet beschikbaar wanneer app-vergrendeling aan staat</string>\n    <string name=\"enhanced_services_not_installed\">Beschikbaar maar bron niet geïnstalleerd: %s</string>\n    <string name=\"error_user_agent_string_blank\">User agent mag niet leeg zijn</string>\n    <string name=\"pref_reset_viewer_flags\">Leesinstellingen voor alle series terugzetten naar standaardwaarde</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Hercontrole van gedownloade hoofdstukken forceren</string>\n    <string name=\"copied_to_clipboard_plain\">Naar klembord gekopieerd</string>\n    <string name=\"appwidget_updates_description\">Recentelijk bijgewerkte items in de bibliotheek bekijken</string>\n    <string name=\"track_error\">%1$s-fout: %2$s</string>\n    <string name=\"pref_reset_user_agent_string\">User agent terugzetten naar standaardwaarde</string>\n    <string name=\"track_remove_date_conf_title\">Datum verwijderen?</string>\n    <string name=\"wish_list\">Verlanglijst</string>\n    <string name=\"custom_cover\">Aangepaste omslag</string>\n    <string name=\"invalid_location\">Ongeldige locatie: %s</string>\n    <string name=\"pref_advanced_summary\">Crashlogboeken opslaan, batterijoptimalisaties</string>\n    <string name=\"action_update_category\">Categorie bijwerken</string>\n    <string name=\"updates_last_update_info\">Laatste update bibliotheek: %s</string>\n    <string name=\"pref_library_update_show_tab_badge\">Toon aantal ongelezen op updates icon</string>\n    <string name=\"source_filter_empty_screen\">Geen geïnstalleerde bron gevonden</string>\n    <string name=\"not_installed\">Niet geïnstalleerd</string>\n    <string name=\"pref_hide_in_library_items\">Verberg manga die al in de bibliotheek staat</string>\n    <string name=\"update_already_running\">Er is al een update bezig</string>\n    <string name=\"action_copy_to_clipboard\">Kopiëren naar klembord</string>\n    <string name=\"updates_last_update_info_just_now\">Net nu</string>\n    <string name=\"error_saving_picture\">Fout bij opslaan afbeelding</string>\n    <string name=\"empty_screen\">Nou, dit is ongemakkelijk</string>\n    <string name=\"cant_open_last_read_chapter\">Niet mogelijk om het laatst gelezen hoofdstuk te openen</string>\n    <string name=\"source_empty_screen\">Geen bron gevonden</string>\n    <string name=\"crash_screen_title\">Oops!</string>\n    <string name=\"pref_tracking_summary\">1-directie voortgang sync</string>\n    <string name=\"track_remove_start_date_conf_text\">Dit gaat je eerder geselcteerde startdatum %s verwijderen</string>\n    <string name=\"delete_downloaded\">Download verwijderen</string>\n    <string name=\"skipped_reason_not_always_update\">Overgeslagen omdat deze serie geen updates vereist</string>\n    <string name=\"crash_screen_description\">%s is een onverwachte fout tegengekomen. We raden u aan de crashlogboeken te delen in ons ondersteuningskanaal op Discord.</string>\n    <string name=\"pref_debug_info\">Foutopsporingsinformatie</string>\n    <string name=\"label_completed_titles\">Voltooide titels</string>\n    <string name=\"pref_update_only_in_release_period\">Buiten verwachte vrijgave periode</string>\n    <string name=\"action_set_interval\">Interval instellen</string>\n    <string name=\"action_filter_interval_custom\">Aangepast ophaalinterval</string>\n    <string name=\"action_sort_next_updated\">Volgende verwachte update</string>\n    <string name=\"split_tall_images\">Splits hoge afbeeldingen</string>\n    <string name=\"pref_page_rotate_invert\">Draairichting van geroteerde brede pagina\\'s omdraaien</string>\n    <string name=\"pref_double_tap_zoom\">Dubbeltik om te zoomen</string>\n    <string name=\"track_activity_name\">Tracker login</string>\n    <string name=\"syncing_library\">Bibliotheek synchroniseren</string>\n    <string name=\"has_results\">Heeft resultaten</string>\n    <string name=\"track_remove_finish_date_conf_text\">Dit zal jouw eerder geselecteerde einddatum weg halen van %s</string>\n    <string name=\"track_delete_text\">Dit zal de tracking lokaal verwijderen.</string>\n    <string name=\"track_delete_remote_text\">Haal ook weg van %s</string>\n    <string name=\"overlay_header\">Overlay</string>\n    <string name=\"label_overview_section\">Overzicht</string>\n    <string name=\"label_read_duration\">Leesduur</string>\n    <string name=\"manga_display_interval_title\">Schat elke</string>\n    <string name=\"crash_screen_restart_application\">Herstart de applicatie</string>\n    <string name=\"download_cache_invalidated\">Download Index geïnvalideerd</string>\n    <string name=\"pref_invalidate_download_cache\">Herindexeer downloads</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"pref_chapter_swipe_start\">Swipe naar de linker actie</string>\n    <string name=\"intervals_header\">Intervallen</string>\n    <string name=\"track_delete_title\">Haal %s tracking weg?</string>\n    <string name=\"unlock_app_title\">Ontgrendel %s</string>\n    <string name=\"pref_chapter_swipe_end\">Swipe naar de juiste actie</string>\n    <string name=\"pref_page_rotate\">Roteer brede pagina\\'s zodat ze passen</string>\n    <string name=\"create_backup_file_error\">Kon een backup-bestand niet creëren</string>\n    <string name=\"library_sync_complete\">Bibliotheeksynchronisatie beëindigd</string>\n    <string name=\"label_tracker_section\">Trackers</string>\n    <string name=\"skipped_reason_not_in_release_period\">Overgeslagen omdat geen uitgave is verwacht vandaag</string>\n    <string name=\"information_required_plain\">*vereist</string>\n    <string name=\"label_total_chapters\">Totaal</string>\n    <string name=\"label_read_chapters\">Lees</string>\n    <string name=\"label_tracked_titles\">Gevolgde titels</string>\n    <string name=\"label_mean_score\">Gemiddelde score</string>\n    <string name=\"hour_short\">%du</string>\n    <string name=\"remove_manga\">U staat op het punt om \\\"%s\\\" te verwijderen uit uw bibliotheek</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Kon bestandspad van pagina %d niet vinden</string>\n    <string name=\"label_titles_section\">Titels</string>\n    <string name=\"update_check_open\">Open op GitHub</string>\n    <string name=\"information_no_entries_found\">Geen titels gevonden in deze categorie</string>\n    <string name=\"exception_offline\">Geen internet verbinding</string>\n    <string name=\"exception_unknown_host\">Kon niet %s bereiken</string>\n    <string name=\"label_used\">Gebruikt</string>\n    <string name=\"not_applicable\">N.v.t</string>\n    <string name=\"manga_display_modified_interval_title\">Stel in om te updaten iedere</string>\n    <string name=\"information_cloudflare_help\">Tik hier voor hulp met Cloudflare</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"information_no_manga_category\">Category is leeg</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"exception_http\">HTTP %d, check website in WebView</string>\n    <string name=\"label_titles_in_global_update\">In globale update</string>\n    <string name=\"relative_time_span_never\">Nooit</string>\n    <string name=\"pref_flash_page_summ\">Vermindert ghosting bij e-ink schermen</string>\n    <string name=\"last_auto_backup_info\">Voor het laatst een automatische back-up gemaakt op: %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Breng serie naar beneden</string>\n    <string name=\"pref_flash_page\">Scherm wit flitsen bij het wisselen van pagina\\'s</string>\n    <string name=\"pref_storage_usage\">Opslaggebruik</string>\n    <string name=\"notification_updating_progress\">Bibliotheek bijwerken... (%s)</string>\n    <string name=\"label_data_storage\">Data en opslag</string>\n    <string name=\"file_null_uri_error\">Bestandskiezer gaf geen bestand terug aan de app</string>\n    <string name=\"source_settings\">Bron-instellingen</string>\n    <string name=\"app_settings\">App-instellingen</string>\n    <string name=\"pref_relative_format\">Relatieve tijdstempels</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" in plaats van \\\"%2$s\\\"</string>\n    <string name=\"selected\">Geselecteerd</string>\n    <string name=\"not_selected\">Niet geselecteerd</string>\n    <string name=\"action_menu_overflow_description\">Meer opties</string>\n    <string name=\"action_bar_up_description\">Navigeer omhoog</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"action_apply\">Toepassen</string>\n    <string name=\"action_revert_to_default\">Naar standaard terugkeren</string>\n    <string name=\"pref_onboarding_guide\">Onboarding gids</string>\n    <string name=\"onboarding_heading\">Welkom!</string>\n    <string name=\"action_copy_link\">Link kopiëren</string>\n    <string name=\"ext_revoke_trust\">Vertrouwde onbekende extensies intrekken</string>\n    <string name=\"label_extension_repos\">Extensierepo\\'s</string>\n    <string name=\"pref_flash_style_black\">Zwart</string>\n    <string name=\"action_sort_random\">Willekeurig</string>\n    <string name=\"onboarding_description\">Laten we eerst enkele dingen instellen. Je kunt deze later altijd wijzigen in de instellingen.</string>\n    <string name=\"onboarding_storage_action_select\">Selecteer een map</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Stuur geanonimiseerde crashlogs naar de ontwikkelaars.</string>\n    <string name=\"pref_security\">Beveiliging</string>\n    <string name=\"pref_firebase\">Analytics en crashlogs</string>\n    <string name=\"error_repo_exists\">Deze repo bestaat al!</string>\n    <string name=\"information_empty_repos\">Je hebt geen repo\\'s ingesteld.</string>\n    <string name=\"action_sort_tracker_score\">Tracker score</string>\n    <string name=\"onboarding_action_skip\">Overslaan</string>\n    <string name=\"onboarding_storage_help_action\">Opslaggids</string>\n    <string name=\"onboarding_permission_analytics_description\">Stuur geanonimiseerde gebruiksgegevens om functies van de app te verbeteren.</string>\n    <string name=\"onboarding_permission_crashlytics\">Crashlogs verzenden</string>\n    <string name=\"onboarding_permission_analytics\">Analytics toestaan</string>\n    <string name=\"remove_private_extension_message\">Weet je zeker dat je de extensie \\\"%s\\\" wil verwijderen?</string>\n    <string name=\"onboarding_guides_returning_user\">%s aan het herinstalleren?</string>\n    <string name=\"onboarding_permission_action_grant\">Toestaan</string>\n    <string name=\"onboarding_guides_new_user\">Nieuw bij %s? Wij raden je aan om de opstartgids te lezen.</string>\n    <string name=\"delete_repo_confirmation\">Wens je de repo \\\"%s\\\" te verwijderen?</string>\n    <string name=\"action_open_repo\">Bronrepo openen</string>\n    <string name=\"pref_flash_duration\">Flitsduur</string>\n    <string name=\"ext_remove\">Verwijderen</string>\n    <string name=\"ext_confirm_remove\">Extensie verwijderen?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Downloaden van dubbele eerder gelezen hoofdstukken overslaan</string>\n    <string name=\"action_delete_repo\">Repo verwijderen</string>\n    <string name=\"onboarding_storage_selection_required\">Er moet een map geselecteerd zijn</string>\n    <string name=\"onboarding_storage_help_info\">Aan het updaten van een oudere versie en niet zeker wat te selecteren? Raadpleeg de opslaggids voor meer informatie.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Vermijd onderbrekingen van langlopende bibliotheekupdates, downloads en back-upherstellen.</string>\n    <string name=\"onboarding_permission_install_apps_description\">Om bronextensies te installeren.</string>\n    <string name=\"onboarding_permission_notifications_description\">Ontvang meldingen over bibliotheekupdates en meer.</string>\n    <string name=\"pref_library_update_smart_update\">Slimme update</string>\n    <string name=\"ext_permission_install_apps_warning\">Er zijn rechten nodig om extensies te installeren. Tik hier om deze toe te staan.</string>\n    <string name=\"action_add_repo\">Repo toevoegen</string>\n    <string name=\"label_add_repo_input\">Repo URL</string>\n    <string name=\"action_add_repo_message\">Voeg aanvullende repo\\'s toe aan Mihon. Dit moet een URL zijn die eindigt op “index.min.json”.</string>\n    <string name=\"invalid_repo_name\">Ongeldige repo URL</string>\n    <string name=\"no_location_set\">Geen opslaglocatie ingesteld</string>\n    <string name=\"action_add_anyway\">Toch toevoegen</string>\n    <string name=\"action_migrate_duplicate\">Bestaand item migreren</string>\n    <string name=\"action_replace_repo\">Vervangen</string>\n    <string name=\"add_repo_confirmation\">Wens je de repo \\\"%s\\\" toe te voegen?</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Flits elke</string>\n    <string name=\"pref_flash_with\">Flits met</string>\n    <string name=\"pref_flash_style_white\">Wit</string>\n    <string name=\"pref_flash_style_white_black\">Wit en Zwart</string>\n    <string name=\"onboarding_action_next\">Volgende</string>\n    <string name=\"pref_display_profile\">Aangepast weergaveprofiel</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Uitzoomen uitschakelen</string>\n    <string name=\"extensionRepo_settings\">Extensierepo\\'s</string>\n    <string name=\"non_library_settings\">Alle gelezen items</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"manga_interval_expected_update_null\">Deze manga is voltooid of er is geen voorspelde uitkomstdatum.</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Voortgang bijwerken wanneer gemarkeerd als gelezen</string>\n    <string name=\"trackers_updated_summary\">Trackers bijgewerkt naar hoofdstuk %d</string>\n    <string name=\"upcoming_calendar_next\">Volgende Maand</string>\n    <string name=\"action_create\">Aanmaken</string>\n    <string name=\"label_upcoming\">Toekomstige Updates</string>\n    <string name=\"available_disk_space_info\">Beschikbaar: %1$s / Totaal: %2$s</string>\n    <string name=\"pref_storage_location_info\">Gebruikt voor automatische back-ups, hoofdstukdownloads en als lokale bron.</string>\n    <string name=\"pref_storage_location\">Opslaglocatie</string>\n    <string name=\"invalid_backup_file_error\">Volledige fout:</string>\n    <string name=\"manga_interval_expected_update_soon\">Binnenkort</string>\n    <string name=\"manga_interval_custom_amount\">Aangepaste updatefrequentie:</string>\n    <string name=\"exclude_scanlators\">Scanlators uitsluiten</string>\n    <string name=\"no_scanlators_found\">Geen scanlators gevonden</string>\n    <string name=\"confirm_tracker_update\">Trackers bijwerken naar hoofdstuk %d?</string>\n    <string name=\"action_view_upcoming\">Toekomstige Updates Bekijken</string>\n    <string name=\"upcoming_calendar_prev\">Vorige Maand</string>\n    <string name=\"invalid_backup_file_json\">JSON back-up niet ondersteund</string>\n    <string name=\"invalid_backup_file_unknown\">Back-up bestand is corrupt</string>\n    <string name=\"manga_interval_expected_update\">Nieuwe hoofdstukken zijn geschat om uit te komen in ongeveer %1$s. Word ongeveer elke %2$s gecontroleerd.</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pauseer leesgeschiedenis voor extensie</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/nn/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Etter %1$s minutt</item>\n        <item quantity=\"other\">Etter %1$s minuttar</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">I går</item>\n        <item quantity=\"other\">%1$d dagar sidan</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategori</item>\n        <item quantity=\"other\">%d kategoriar</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Gjort på %1$s med %2$s feil</item>\n        <item quantity=\"other\">Gjort på %1$s med %2$s feil</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/nn/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Namn</string>\n    <string name=\"label_more\">Meir</string>\n    <string name=\"label_settings\">Innstillingar</string>\n    <string name=\"label_recent_updates\">Oppdateringar</string>\n    <string name=\"label_help\">Hjelp</string>\n    <string name=\"categories\">Kategoriar</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"chapters\">Kapittel</string>\n    <string name=\"track\">Sporing</string>\n    <string name=\"history\">Historikk</string>\n    <string name=\"label_default\">Standard</string>\n    <string name=\"label_warning\">Åtvaring</string>\n    <string name=\"confirm_lock_change\">Autentiser for å stadfesta endring</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_bookmarked\">Bokmerket</string>\n    <string name=\"action_filter_tracked\">Sporet</string>\n    <string name=\"action_filter_unread\">Ulesen</string>\n    <string name=\"action_filter_empty\">Fjern filter</string>\n    <string name=\"action_sort_alpha\">Alfabetisk</string>\n    <string name=\"action_sort_latest_chapter\">Siste kapittel</string>\n    <string name=\"action_sort_chapter_fetch_date\">Dato henta</string>\n    <string name=\"action_search\">Søk</string>\n    <string name=\"action_search_settings\">Søkeinnstillingar</string>\n    <string name=\"action_select_all\">Vel alt</string>\n    <string name=\"action_select_inverse\">Vel motsett</string>\n    <string name=\"action_bookmark\">Bokmerk kapittel</string>\n    <string name=\"action_remove_bookmark\">Fjern bokmerke</string>\n    <string name=\"action_delete\">Slett</string>\n    <string name=\"action_update_library\">Oppdater bibliotek</string>\n    <string name=\"action_enable_all\">Aktiver alle</string>\n    <string name=\"action_disable_all\">Deaktiver alle</string>\n    <string name=\"action_edit\">Rediger</string>\n    <string name=\"action_add\">Legg til</string>\n    <string name=\"action_add_category\">Legg til kategori</string>\n    <string name=\"action_edit_categories\">Rediger kategoriar</string>\n    <string name=\"action_edit_cover\">Rediger omslag</string>\n    <string name=\"action_view_chapters\">Vis kapittel</string>\n    <string name=\"action_pause\">Pause</string>\n    <string name=\"action_next_chapter\">Neste kapittel</string>\n    <string name=\"action_retry\">Prøv igjen</string>\n    <string name=\"action_remove\">Fjern</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"action_open_in_browser\">Opne i nettlesar</string>\n    <string name=\"action_show_manga\">Vis manga</string>\n    <string name=\"action_open_in_web_view\">Opne i WebView</string>\n    <string name=\"action_migrate\">Migrer</string>\n    <string name=\"action_display_mode\">Visningsmodus</string>\n    <string name=\"action_display\">Vis</string>\n    <string name=\"action_display_grid\">Kompakt rutenett</string>\n    <string name=\"action_display_comfortable_grid\">Komfortabelt rutenett</string>\n    <string name=\"action_display_local_badge\">Lokal manga</string>\n    <string name=\"action_display_language_badge\">Språk</string>\n    <string name=\"action_display_show_tabs\">Vis kategorifaner</string>\n    <string name=\"action_display_show_number_of_items\">Vis talet på gjenstandar</string>\n    <string name=\"action_cancel\">Avbryt</string>\n    <string name=\"action_cancel_all\">Avbryt alle</string>\n    <string name=\"cancel_all_for_series\">Avbryt alle for denne serien</string>\n    <string name=\"action_sort\">Sorter</string>\n    <string name=\"action_newest\">Nyaste</string>\n    <string name=\"action_oldest\">Eldste</string>\n    <string name=\"action_move_to_top\">Flytt til toppen</string>\n    <string name=\"action_move_to_bottom\">Flytt til botnen</string>\n    <string name=\"action_install\">Installer</string>\n    <string name=\"action_share\">Del</string>\n    <string name=\"action_save\">Lagra</string>\n    <string name=\"action_undo\">Angra</string>\n    <string name=\"action_close\">Lukka</string>\n    <string name=\"action_open_log\">Opne logg</string>\n    <string name=\"action_show_errors\">Trykk for å sjå detaljar</string>\n    <string name=\"action_webview_back\">Tilbake</string>\n    <string name=\"loading\">Lastar…</string>\n    <string name=\"pref_category_general\">Generelt</string>\n    <string name=\"pref_category_appearance\">Utsjånad</string>\n    <string name=\"pref_category_library\">Bibliotek</string>\n    <string name=\"pref_category_reader\">Lesar</string>\n    <string name=\"pref_category_advanced\">Avansert</string>\n    <string name=\"pref_category_about\">Om</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"theme_light\">Av</string>\n    <string name=\"theme_dark\">På</string>\n    <string name=\"theme_monet\">Dynamisk</string>\n    <string name=\"information_no_downloads\">Ingen nedlastingar</string>\n    <string name=\"information_no_recent\">Ingen nylege oppdateringar</string>\n    <string name=\"label_library\">Bibliotek</string>\n    <string name=\"label_sources\">Kjelder</string>\n    <string name=\"action_settings\">Innstillingar</string>\n    <string name=\"action_menu\">Meny</string>\n    <string name=\"action_move_category\">Sett kategoriar</string>\n    <string name=\"action_rename_category\">Gi kategori nytt namn</string>\n    <string name=\"action_previous_chapter\">Førre kapittel</string>\n    <string name=\"action_asc\">Stigande</string>\n    <string name=\"action_desc\">Søkkande</string>\n    <string name=\"action_webview_forward\">Fram</string>\n    <string name=\"action_display_list\">Liste</string>\n    <string name=\"pref_app_theme\">App tema</string>\n    <string name=\"pref_date_format\">Datoformat</string>\n    <string name=\"pref_manage_notifications\">Handter varslingar</string>\n    <string name=\"pref_category_security\">Sikkerheit</string>\n    <string name=\"lock_always\">Alltid</string>\n    <string name=\"lock_never\">Aldri</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) kjeder</string>\n    <string name=\"relative_time_today\">I dag</string>\n    <string name=\"pref_category_display\">Skjerm</string>\n    <string name=\"pref_library_columns\">Element per rad</string>\n    <string name=\"pref_library_update_interval\">Automatisk oppdateringar</string>\n    <string name=\"update_24hour\">Dagleg</string>\n    <string name=\"update_48hour\">Annankvar dag</string>\n    <string name=\"update_weekly\">Kvar veke</string>\n    <string name=\"connected_to_wifi\">Berre på Wi-Fi</string>\n    <string name=\"restrictions\">Avgrensingar: %s</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Sjå etter nye omslag og detaljar ved oppdatering av bibliotek</string>\n    <string name=\"default_category\">Standard kategori</string>\n    <string name=\"default_category_summary\">Alltid spør</string>\n    <string name=\"pref_library_update_categories_details\">Manga i utelatne kategoriar vil ikkje bli oppdatert sjølv om dei òg er i inkluderte kategoriar.</string>\n    <string name=\"all\">Alle</string>\n    <string name=\"none\">Ingen</string>\n    <string name=\"include\">Inkluder: %s</string>\n    <string name=\"exclude\">Utelat: %s</string>\n    <string name=\"ext_update\">Oppdater</string>\n    <string name=\"ext_update_all\">Oppdater alle</string>\n    <string name=\"ext_install\">Installer</string>\n    <string name=\"ext_downloading\">Lastar ned</string>\n    <string name=\"ext_installing\">Installerer</string>\n    <string name=\"ext_installed\">Installert</string>\n    <string name=\"ext_trust\">Tiltru</string>\n    <string name=\"update_72hour\">Kvar tredje dag</string>\n    <string name=\"ext_untrusted\">Ikkje-tiltrudd</string>\n    <string name=\"ext_uninstall\">Avinstaller</string>\n    <string name=\"untrusted_extension\">Ikkje-tiltrudd utvidelse</string>\n    <string name=\"extension_api_error\">Kunne ikkje henta utvidingslista</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_install_service_notif\">Installerer utviding…</string>\n    <string name=\"ext_installer_pref\">Installatør</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku køyrar ikkje</string>\n    <string name=\"pref_show_page_number\">Vis sidetal</string>\n    <string name=\"on\">På</string>\n    <string name=\"off\">Av</string>\n    <string name=\"pref_custom_brightness\">Eigendefinert lysstyrke</string>\n    <string name=\"pref_grayscale\">Gråtonar</string>\n    <string name=\"pref_inverted_colors\">Invertert</string>\n    <string name=\"pref_custom_color_filter\">Eigendefinert fargefilter</string>\n    <string name=\"filter_mode_screen\">Skjerm</string>\n    <string name=\"pref_skip_filtered_chapters\">Hopp over filtrerte kapittel</string>\n    <string name=\"tapping_inverted_none\">Ingen</string>\n    <string name=\"tapping_inverted_horizontal\">Vassrett</string>\n    <string name=\"tapping_inverted_vertical\">Loddrett</string>\n    <string name=\"tapping_inverted_both\">Begge</string>\n    <string name=\"pref_reader_actions\">Handlingar</string>\n    <string name=\"pref_reader_theme\">Bakgrunnsfarge</string>\n    <string name=\"white_background\">Kvit</string>\n    <string name=\"gray_background\">Grå</string>\n    <string name=\"black_background\">Svart</string>\n    <string name=\"automatic_background\">Automatisk</string>\n    <string name=\"l_nav\">L-forma</string>\n    <string name=\"kindlish_nav\">Kindle-ish</string>\n    <string name=\"edge_nav\">Kant</string>\n    <string name=\"right_and_left_nav\">Høgre og Venstre</string>\n    <string name=\"nav_zone_prev\">Førre</string>\n    <string name=\"nav_zone_next\">Neste</string>\n    <string name=\"nav_zone_left\">Venstre</string>\n    <string name=\"nav_zone_right\">Høgre</string>\n    <string name=\"left_to_right_viewer\">Venstre til høgre</string>\n    <string name=\"right_to_left_viewer\">Høgre til venstre</string>\n    <string name=\"vertical_viewer\">Loddrett</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"vertical_plus_viewer\">Kontinuerleg loddrett</string>\n    <string name=\"scale_type_stretch\">Strekk</string>\n    <string name=\"zoom_start_automatic\">Automatisk</string>\n    <string name=\"zoom_start_left\">Venstre</string>\n    <string name=\"zoom_start_right\">Høgre</string>\n    <string name=\"rotation_landscape\">Liggjande</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_highest\">Høgaste</string>\n    <string name=\"pref_high\">Høg</string>\n    <string name=\"pref_low\">Låg</string>\n    <string name=\"pref_lowest\">Lågaste</string>\n    <string name=\"pref_remove_exclude_categories\">Utelatne kategoriar</string>\n    <string name=\"save_chapter_as_cbz\">Lagra som CBZ-arkiv</string>\n    <string name=\"services\">Tenester</string>\n    <string name=\"enhanced_services\">Forbetra tenester</string>\n    <string name=\"enhanced_tracking_info\">Tenester som tilbyr forbetra tenester for spesifikke kjelder. Manga blir spora automatisk når dei blir lagt til i biblioteket ditt.</string>\n    <string name=\"action_track\">Spor</string>\n    <string name=\"pref_create_backup\">Lag reservekopi</string>\n    <string name=\"pref_restore_backup\">Gjenopprett reservekopi</string>\n    <string name=\"backup_created\">Reservekopi oppretta</string>\n    <string name=\"invalid_backup_file\">Ugyldig reservekopifil</string>\n    <string name=\"invalid_backup_file_missing_manga\">Reservekopi inneheld ingen manga.</string>\n    <string name=\"pref_restore_backup_summ\">Gjenopprett bibliotek frå reservekopifil</string>\n    <string name=\"restore_completed\">Gjenoppretting fullført</string>\n    <string name=\"restore_duration\">%02d min, %02d sek</string>\n    <string name=\"backup_choice\">Kva ønskjer du å ta reservekopi av?</string>\n    <string name=\"creating_backup\">Lagar reservekopi</string>\n    <string name=\"restoring_backup\">Gjenoppretter reservekopi</string>\n    <string name=\"label_network\">Nettverk</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"used_cache\">Brukt: %1$s</string>\n    <string name=\"clear_database_source_item_count\">%1$d ikkje-bibliotek manga i databasen</string>\n    <string name=\"version\">Versjon</string>\n    <string name=\"help_translate\">Hjelp med å omsetje</string>\n    <string name=\"privacy_policy\">Personvernerklæring</string>\n    <string name=\"check_for_updates\">Sjå etter oppdateringar</string>\n    <string name=\"updated_version\">Oppdatert til v%1$s</string>\n    <string name=\"pref_incognito_mode\">Inkognitomodus</string>\n    <string name=\"username\">Brukarnamn</string>\n    <string name=\"email\">E-postadresse</string>\n    <string name=\"password\">Passord</string>\n    <string name=\"unknown_error\">Ukjend feil</string>\n    <string name=\"updating_category\">Oppdaterer kategori</string>\n    <string name=\"manga_from_library\">Manga frå biblioteket</string>\n    <string name=\"tabs_header\">Faner</string>\n    <string name=\"local_source\">Lokal kjelde</string>\n    <string name=\"other_source\">Andre</string>\n    <string name=\"last_used_source\">Sist brukt</string>\n    <string name=\"action_global_search_hint\">Globalt søk…</string>\n    <string name=\"action_global_search_query\">Søk etter «%1$s» globalt</string>\n    <string name=\"browse\">Utforsk</string>\n    <string name=\"unknown\">Ukjend</string>\n    <string name=\"unknown_author\">Ukjend forfattar</string>\n    <string name=\"unknown_status\">Ukjend status</string>\n    <string name=\"cancelled\">Kansellert</string>\n    <string name=\"add_to_library\">Legg til i bibliotek</string>\n    <string name=\"ongoing\">Pågåande</string>\n    <string name=\"manga_tracking_tab\">Sporing</string>\n    <string name=\"download_notifier_unknown_error\">Kunne ikkje lasta ned kapittel grunna uventa feil</string>\n    <string name=\"pref_category_library_update\">Global oppdatering</string>\n    <string name=\"landscape\">Liggjande</string>\n    <string name=\"update_never\">Av</string>\n    <string name=\"update_6hour\">Kvar sjette time</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installer og start Shizuku for å bruka Shizuku som utvidingsinstallatør.</string>\n    <string name=\"update_12hour\">Kvar tolvte time</string>\n    <string name=\"obsolete_extension_message\">Denne utvidinga er ikkje lengre tilgjengeleg.</string>\n    <string name=\"ext_nsfw_warning\">Kan innehalda NSFW (18+) innhald</string>\n    <string name=\"pref_category_delete_chapters\">Slett kapittel</string>\n    <string name=\"pref_download_new_categories_details\">Manga i utelatne kategoriar vil ikkje bli nedlasta sjølv om dei òg er i inkluderte kategoriar.</string>\n    <string name=\"pref_backup_interval\">Reservekopifrekvens</string>\n    <string name=\"restoring_backup_canceled\">Avbroten gjenoppretting</string>\n    <string name=\"backup_restore_missing_sources\">Manglande kjelder:</string>\n    <string name=\"backup_restore_missing_trackers\">Sporingstenester ikkje logga inn i:</string>\n    <string name=\"about_dont_kill_my_app\">Nokre produsentar har ytterlegare appavgrensingar som drep bakgrunnstenester. Denne nettstaden har meir info om korleis det kan fiksast.</string>\n    <string name=\"website\">Nettstaden</string>\n    <string name=\"local_filter_order_by\">Sorter etter</string>\n    <string name=\"date\">Dato</string>\n    <string name=\"publishing_finished\">Ferdig publisert</string>\n    <string name=\"manga_added_library\">Lagt til i biblioteket</string>\n    <string name=\"manga_removed_library\">Fjerna frå bibliotek</string>\n    <string name=\"copied_to_clipboard\">Kopiert til utklippstavla:\n\\n%1$s</string>\n    <string name=\"display_mode_chapter\">Kapittel %1$s</string>\n    <string name=\"chapter_downloading_progress\">Lastar ned (%1$d/%2$d)</string>\n    <string name=\"set_chapter_settings_as_default\">Sett som standard</string>\n    <string name=\"whats_new\">Kva er nytt</string>\n    <string name=\"remove_from_library\">Fjern frå bibliotek</string>\n    <string name=\"manga_info_expand\">Meir</string>\n    <string name=\"snack_add_to_library\">Legg manga til i bibliotek?</string>\n    <string name=\"manga_info_collapse\">Mindre</string>\n    <string name=\"clipboard_copy_error\">Kunne ikkje kopiera til utklippstavla</string>\n    <string name=\"source_not_installed\">Kjelde ikkje installert: %1$s</string>\n    <string name=\"in_library\">I biblioteket</string>\n    <string name=\"chapter_error\">Feil</string>\n    <string name=\"sort_by_source\">Etter kjelde</string>\n    <string name=\"manga_cover\">Omslag</string>\n    <string name=\"manga_download\">Last ned</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/pl/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Po %1$s minucie</item>\n        <item quantity=\"few\">Po %1$s minutach</item>\n        <item quantity=\"many\">Po %1$s minutach</item>\n        <item quantity=\"other\">Po %1$s minutach</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategoria</item>\n        <item quantity=\"few\">%d kategorie</item>\n        <item quantity=\"many\">%d kategorii</item>\n        <item quantity=\"other\">%d kategorii</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Dostępna aktualizacja rozszerzenia</item>\n        <item quantity=\"few\">Dostępne %d aktualizacje rozszerzeń</item>\n        <item quantity=\"many\">Dostępne %d aktualizacji rozszerzeń</item>\n        <item quantity=\"other\">Dostępne %d aktualizacji rozszerzeń</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Rozdziały %1$s i jeden więcej</item>\n        <item quantity=\"few\">Rozdziały %1$s i %2$d</item>\n        <item quantity=\"many\">Rozdziały %1$s i %2$d</item>\n        <item quantity=\"other\">Rozdziały %1$s i %2$d</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nowy rozdział</item>\n        <item quantity=\"few\">%1$d nowe rozdziały</item>\n        <item quantity=\"many\">%1$d nowych rozdziałów</item>\n        <item quantity=\"other\">%1$d nowych rozdziałów</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Dla %d wpisu</item>\n        <item quantity=\"few\">Dla %d wpisów</item>\n        <item quantity=\"many\">Dla %d wpisów</item>\n        <item quantity=\"other\">Dla %d wpisów</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">Pozostał %1$s</item>\n        <item quantity=\"few\">Pozostało %1$s</item>\n        <item quantity=\"many\">Pozostało %1$s</item>\n        <item quantity=\"other\">Pozostało %1$s</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Wykonano w %1$s z %2$s błędem</item>\n        <item quantity=\"few\">Wykonano w %1$s z %2$s błędami</item>\n        <item quantity=\"many\">Wykonano w %1$s z %2$s błędami</item>\n        <item quantity=\"other\">Wykonano w %1$s z %2$s błędami</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s rozdział</item>\n        <item quantity=\"few\">%1$s rozdziały</item>\n        <item quantity=\"many\">%1$s rozdziałów</item>\n        <item quantity=\"other\">%1$s rozdziałów</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d brakujący rozdział</item>\n        <item quantity=\"few\">%d brakujące rozdziały</item>\n        <item quantity=\"many\">%d brakujących rozdziałów</item>\n        <item quantity=\"other\">%d brakujących rozdziałów</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">1 serwis śledzący</item>\n        <item quantity=\"few\">%d serwisy śledzące</item>\n        <item quantity=\"many\">%d serwisów śledzących</item>\n        <item quantity=\"other\">%d serwisów śledzących</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Wczoraj</item>\n        <item quantity=\"few\">%1$d dni temu</item>\n        <item quantity=\"many\">%1$d dni temu</item>\n        <item quantity=\"other\">%1$d dni temu</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Następny nieprzeczytany rozdział</item>\n        <item quantity=\"few\">Następne %d nieprzeczytane rozdziały</item>\n        <item quantity=\"many\">Następne %d nieprzeczytanych rozdziałów</item>\n        <item quantity=\"other\">Następne %d nieprzeczytanych rozdziałów</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Następny rozdział</item>\n        <item quantity=\"few\">Następne %d rozdziały</item>\n        <item quantity=\"many\">Następne %d rozdziałów</item>\n        <item quantity=\"other\">Następne %d rozdziałów</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Brakujący %1$s rozdział</item>\n        <item quantity=\"few\">Brakujące %1$s rozdziały</item>\n        <item quantity=\"many\">Brakuje %1$s rozdziałów</item>\n        <item quantity=\"other\">Brakuje %1$s rozdziałów</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 dzień</item>\n        <item quantity=\"few\">%d dni</item>\n        <item quantity=\"many\">%d dni</item>\n        <item quantity=\"other\">%d dni</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repozytorium</item>\n        <item quantity=\"few\">%d repozytoria</item>\n        <item quantity=\"many\">%d repozytoriów</item>\n        <item quantity=\"other\">%d repozytoriów</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Jutro</item>\n        <item quantity=\"few\">Za %1$d dni</item>\n        <item quantity=\"many\">Za %1$d dni</item>\n        <item quantity=\"other\">Za %1$d dni</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 strona</item>\n        <item quantity=\"few\">%1$s strony</item>\n        <item quantity=\"many\">%1$s stron</item>\n        <item quantity=\"other\">%1$s stron</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/pl/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"categories\">Kategorie</string>\n    <string name=\"chapters\">Rozdziały</string>\n    <string name=\"name\">Nazwa</string>\n    <string name=\"history\">Historia</string>\n    <string name=\"label_settings\">Ustawienia</string>\n    <string name=\"label_download_queue\">Kolejka pobierania</string>\n    <string name=\"label_recent_manga\">Historia</string>\n    <string name=\"action_settings\">Ustawienia</string>\n    <string name=\"action_filter\">Filtry</string>\n    <string name=\"action_filter_unread\">Nieprzeczytane</string>\n    <string name=\"action_search\">Szukaj</string>\n    <string name=\"action_select_all\">Zaznacz wszystko</string>\n    <string name=\"label_library\">Biblioteka</string>\n    <string name=\"label_recent_updates\">Aktualizacje</string>\n    <string name=\"label_backup\">Kopia zapasowa i przywracanie</string>\n    <string name=\"action_filter_bookmarked\">Zakładki</string>\n    <string name=\"action_filter_empty\">Usuń filtr</string>\n    <string name=\"action_sort_last_read\">Ostatnio czytane</string>\n    <string name=\"action_mark_as_read\">Oznacz jako przeczytane</string>\n    <string name=\"action_mark_as_unread\">Oznacz jako nieprzeczytane</string>\n    <string name=\"action_mark_previous_as_read\">Oznacz poprzednie jako przeczytane</string>\n    <string name=\"action_download\">Pobierz</string>\n    <string name=\"action_bookmark\">Dodaj zakładkę</string>\n    <string name=\"action_remove_bookmark\">Usuń zakładkę</string>\n    <string name=\"action_delete\">Usuń</string>\n    <string name=\"action_update_library\">Aktualizuj bibliotekę</string>\n    <string name=\"action_edit\">Edytuj</string>\n    <string name=\"action_add\">Dodaj</string>\n    <string name=\"action_add_category\">Dodaj kategorię</string>\n    <string name=\"action_edit_categories\">Edytuj kategorie</string>\n    <string name=\"action_rename_category\">Zmień nazwę kategorii</string>\n    <string name=\"action_move_category\">Zmień kategorie</string>\n    <string name=\"action_edit_cover\">Edytuj okładkę</string>\n    <string name=\"action_sort_total\">Ilość rozdziałów</string>\n    <string name=\"action_pause\">Wstrzymaj</string>\n    <string name=\"action_previous_chapter\">Poprzedni rozdział</string>\n    <string name=\"action_next_chapter\">Następny rozdział</string>\n    <string name=\"action_retry\">Spróbuj ponownie</string>\n    <string name=\"action_remove\">Usuń</string>\n    <string name=\"action_resume\">Wznów</string>\n    <string name=\"action_open_in_browser\">Otwórz w przeglądarce</string>\n    <string name=\"action_display_mode\">Tryb wyświetlania</string>\n    <string name=\"action_display\">Widok</string>\n    <string name=\"action_display_grid\">Kompaktowa siatka</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_cancel\">Anuluj</string>\n    <string name=\"action_sort\">Sortuj</string>\n    <string name=\"action_install\">Zainstaluj</string>\n    <string name=\"action_share\">Udostępnij</string>\n    <string name=\"action_save\">Zapisz</string>\n    <string name=\"action_undo\">Cofnij</string>\n    <string name=\"action_restore\">Przywróć</string>\n    <string name=\"loading\">Ładowanie…</string>\n    <string name=\"app_not_available\">Aplikacja niedostępna</string>\n    <string name=\"pref_category_general\">Ogólne</string>\n    <string name=\"pref_category_reader\">Czytnik</string>\n    <string name=\"pref_category_downloads\">Pobieranie</string>\n    <string name=\"pref_category_advanced\">Zaawansowane</string>\n    <string name=\"pref_category_about\">O aplikacji</string>\n    <string name=\"pref_library_columns\">Rozmiar siatki</string>\n    <string name=\"remove_from_library\">Usuń z biblioteki</string>\n    <string name=\"display_mode_chapter\">Rozdział %1$s</string>\n    <string name=\"chapter_error\">Błąd</string>\n    <string name=\"chapter_paused\">Wstrzymane</string>\n    <string name=\"manga_download\">Pobierz</string>\n    <string name=\"download_unread\">Pobierz nieprzeczytane</string>\n    <string name=\"confirm_delete_chapters\">Czy na pewno chcesz usunąć wybrane rozdziały?</string>\n    <string name=\"reading\">Czytane</string>\n    <string name=\"completed\">Ukończone</string>\n    <string name=\"dropped\">Porzucone</string>\n    <string name=\"on_hold\">Wstrzymane</string>\n    <string name=\"plan_to_read\">Planowane</string>\n    <string name=\"score\">Ocena</string>\n    <string name=\"title\">Tytuł</string>\n    <string name=\"error_category_exists\">Kategoria o takiej nazwie już istnieje!</string>\n    <string name=\"picture_saved\">Obraz zapisany</string>\n    <string name=\"set_as_cover\">Ustaw jako okładkę</string>\n    <string name=\"cover_updated\">Okładka zaktualizowana</string>\n    <string name=\"chapter_progress\">Strona: %1$d</string>\n    <string name=\"no_next_chapter\">Nie znaleziono następnego rozdziału</string>\n    <string name=\"notification_new_chapters\">Znaleziono nowe rozdziały</string>\n    <string name=\"file_select_cover\">Wybierz okładkę</string>\n    <string name=\"update_check_confirm\">Pobierz</string>\n    <string name=\"update_check_no_new_updates\">Brak nowych aktualizacji</string>\n    <string name=\"update_check_notification_download_in_progress\">Pobieranie…</string>\n    <string name=\"update_check_notification_download_complete\">Naciśnij, by zaktualizować</string>\n    <string name=\"update_check_notification_download_error\">Błąd pobierania</string>\n    <string name=\"update_check_notification_update_available\">Dostępna nowa wersja!</string>\n    <string name=\"information_empty_library\">Twoja biblioteka jest pusta</string>\n    <string name=\"download_notifier_title_error\">Błąd</string>\n    <string name=\"download_notifier_unknown_error\">Podczas pobierania rozdziału wystąpił nieoczekiwany błąd</string>\n    <string name=\"download_notifier_download_paused\">Wstrzymano pobieranie</string>\n    <string name=\"action_sort_alpha\">Alfabetycznie</string>\n    <string name=\"track\">Śledzenie</string>\n    <string name=\"action_reset\">Reset</string>\n    <string name=\"services\">Usługi śledzenia</string>\n    <string name=\"version\">Wersja</string>\n    <string name=\"login_title\">Logowanie do %1$s</string>\n    <string name=\"username\">Nazwa użytkownika</string>\n    <string name=\"password\">Hasło</string>\n    <string name=\"login\">Zaloguj się</string>\n    <string name=\"unknown_error\">Nieznany błąd</string>\n    <string name=\"updating_category\">Aktualizowanie kategorii</string>\n    <string name=\"no_more_results\">Nie znaleziono więcej wyników</string>\n    <string name=\"action_open_log\">Otwórz log</string>\n    <string name=\"show_title\">Tytuł</string>\n    <string name=\"show_chapter_number\">Numer rozdziału</string>\n    <string name=\"portrait\">Pionowo</string>\n    <string name=\"landscape\">Poziomo</string>\n    <string name=\"pref_library_update_interval\">Automatyczne aktualizacje</string>\n    <string name=\"update_never\">Wyłączone</string>\n    <string name=\"update_6hour\">Co 6 godzin</string>\n    <string name=\"update_12hour\">Co 12 godzin</string>\n    <string name=\"update_24hour\">Co 1 dzień</string>\n    <string name=\"update_48hour\">Co 2 dni</string>\n    <string name=\"update_weekly\">Co tydzień</string>\n    <string name=\"all\">Wszystko</string>\n    <string name=\"pref_library_update_restriction\">Ograniczenia sprzętowe dla automatycznych aktualizacji</string>\n    <string name=\"charging\">Podczas ładowania</string>\n    <string name=\"pref_update_only_non_completed\">Ukończone serie</string>\n    <string name=\"pref_auto_update_manga_sync\">Aktualizuj postęp po przeczytaniu rozdziału</string>\n    <string name=\"default_category\">Domyślna kategoria</string>\n    <string name=\"default_category_summary\">Zawsze pytaj</string>\n    <string name=\"pref_fullscreen\">Pełny ekran</string>\n    <string name=\"pref_page_transitions\">Animacje przejścia stron</string>\n    <string name=\"pref_show_page_number\">Pokazuj numer strony</string>\n    <string name=\"pref_crop_borders\">Przycinaj krawędzie</string>\n    <string name=\"pref_custom_brightness\">Niestandardowa jasność</string>\n    <string name=\"pref_keep_screen_on\">Nie wyłączaj ekranu</string>\n    <string name=\"pref_custom_color_filter\">Niestandardowy filtr kolorów</string>\n    <string name=\"pref_read_with_volume_keys\">Przyciski głośności</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Odwróć przyciski głośności</string>\n    <string name=\"pref_reader_theme\">Kolor tła</string>\n    <string name=\"white_background\">Biały</string>\n    <string name=\"black_background\">Czarny</string>\n    <string name=\"left_to_right_viewer\">Od lewej do prawej</string>\n    <string name=\"right_to_left_viewer\">Od prawej do lewej</string>\n    <string name=\"vertical_viewer\">Pionowy</string>\n    <string name=\"webtoon_viewer\">Długi pasek</string>\n    <string name=\"pref_viewer_type\">Domyślny styl czytania</string>\n    <string name=\"scale_type_fit_screen\">Dopasuj do ekranu</string>\n    <string name=\"scale_type_stretch\">Rozciągnij</string>\n    <string name=\"scale_type_fit_width\">Dopasuj na szerokość</string>\n    <string name=\"scale_type_fit_height\">Dopasuj na wysokość</string>\n    <string name=\"pref_image_scale_type\">Rodzaj powiększenia</string>\n    <string name=\"scale_type_original_size\">Oryginalny rozmiar</string>\n    <string name=\"scale_type_smart_fit\">Inteligentne</string>\n    <string name=\"pref_zoom_start\">Początkowa pozycja przybliżenia</string>\n    <string name=\"zoom_start_automatic\">Automatycznie</string>\n    <string name=\"zoom_start_left\">Od lewej</string>\n    <string name=\"zoom_start_right\">Od prawej</string>\n    <string name=\"zoom_start_center\">Od środka</string>\n    <string name=\"pref_rotation_type\">Domyślna orientacja ekranu</string>\n    <string name=\"rotation_free\">Dowolna</string>\n    <string name=\"rotation_force_portrait\">Wymuś pionowo</string>\n    <string name=\"rotation_force_landscape\">Wymuś poziomo</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Po ręcznym oznaczeniu jako przeczytane</string>\n    <string name=\"pref_remove_after_read\">Usuwaj rozdziały automatycznie po przeczytaniu</string>\n    <string name=\"disabled\">Wyłączone</string>\n    <string name=\"last_read_chapter\">Ostatnio czytany rozdział</string>\n    <string name=\"second_to_last\">Przedostatnio czytany rozdział</string>\n    <string name=\"third_to_last\">3 rozdziały do tyłu</string>\n    <string name=\"fourth_to_last\">4 rozdziały do tyłu</string>\n    <string name=\"fifth_to_last\">5 rozdziałów do tyłu</string>\n    <string name=\"pref_download_new\">Pobieraj nowe rozdziały</string>\n    <string name=\"manga\">Biblioteka</string>\n    <string name=\"pref_category_tracking\">Śledzenie</string>\n    <string name=\"pref_reader_navigation\">Nawigacja</string>\n    <string name=\"pref_create_backup\">Utwórz kopię zapasową</string>\n    <string name=\"pref_create_backup_summ\">Może być użyta do przywrócenia aktualnej biblioteki</string>\n    <string name=\"pref_restore_backup\">Przywróć kopię zapasową</string>\n    <string name=\"pref_restore_backup_summ\">Przywraca bibliotekę z pliku kopii zapasowej</string>\n    <string name=\"pref_backup_interval\">Częstotliwość tworzenia kopii</string>\n    <string name=\"backup_choice\">Co zawrzeć w kopii zapasowej?</string>\n    <string name=\"restoring_backup\">Przywracanie kopii zapasowej</string>\n    <string name=\"creating_backup\">Tworzenie kopii zapasowej</string>\n    <string name=\"pref_clear_chapter_cache\">Wyczyść cache rozdziałów</string>\n    <string name=\"used_cache\">W użyciu: %1$s</string>\n    <string name=\"cache_deleted\">Wyczyszczono cache, %1$d plików zostało usunięte</string>\n    <string name=\"cache_delete_error\">Podczas czyszczenia wystąpił błąd</string>\n    <string name=\"pref_clear_cookies\">Usuń ciasteczka</string>\n    <string name=\"cookies_cleared\">Ciasteczka usunięte</string>\n    <string name=\"pref_clear_database_summary\">Usuń historię wpisów, których nie ma w twojej bibliotece</string>\n    <string name=\"pref_clear_database\">Wyczyść bazę danych</string>\n    <string name=\"pref_enable_acra\">Wysyłaj raporty o awariach</string>\n    <string name=\"pref_acra_summary\">Pomaga naprawiać błędy. Żadne wrażliwe dane nie będą wysyłane</string>\n    <string name=\"backup_created\">Utworzono kopię zapasową</string>\n    <string name=\"restore_completed\">Przywracanie ukończone</string>\n    <string name=\"clear_database_confirmation\">Na pewno? Przeczytane rozdziały i postęp w wpisach spoza biblioteki zostaną utracone</string>\n    <string name=\"clear_database_completed\">Pozycje usunięte</string>\n    <string name=\"login_success\">Zalogowano</string>\n    <string name=\"local_source\">Źródło lokalne</string>\n    <string name=\"ongoing\">Nieukończone</string>\n    <string name=\"unknown\">Nieznany</string>\n    <string name=\"licensed\">Licencjonowane</string>\n    <string name=\"delete_downloads_for_manga\">Usunąć pobrane rozdziały?</string>\n    <string name=\"chapter_downloading_progress\">Pobieranie (%1$d/%2$d)</string>\n    <string name=\"sort_by_source\">Według źródła</string>\n    <string name=\"sort_by_number\">Według numeru rozdziału</string>\n    <string name=\"manga_tracking_tab\">Śledzenie</string>\n    <string name=\"status\">Status</string>\n    <string name=\"snack_categories_deleted\">Usunięto kategorie</string>\n    <string name=\"dialog_with_checkbox_remove_description\">To usunie datę przeczytania tego rozdziału. Na pewno?</string>\n    <string name=\"dialog_with_checkbox_reset\">Resetuj wszystkie rozdziały dla tego wpisu</string>\n    <string name=\"snack_add_to_library\">Dodać do biblioteki?</string>\n    <string name=\"custom_filter\">Filtr niestandardowy</string>\n    <string name=\"decode_image_error\">Nie udało się wczytać obrazka</string>\n    <string name=\"confirm_set_image_as_cover\">Ustawić ten obrazek jako okładkę?</string>\n    <string name=\"download_queue_error\">Nie udało się pobrać rozdziałów. Możesz spróbować ponownie w sekcji pobierania</string>\n    <string name=\"notification_cover_update_failed\">Nie udało się zaktualizować okładki</string>\n    <string name=\"notification_first_add_to_library\">Zanim to zrobisz, dodaj ten wpis do biblioteki</string>\n    <string name=\"file_select_backup\">Wybierz plik kopii zapasowej</string>\n    <string name=\"information_no_downloads\">Brak pobieranych rozdziałów</string>\n    <string name=\"information_no_recent\">Brak ostatnio zaktualizowanych</string>\n    <string name=\"information_no_recent_manga\">Nic ostatnio nie czytano</string>\n    <string name=\"download_notifier_downloader_title\">Pobieranie</string>\n    <string name=\"download_notifier_text_only_wifi\">Brak połączenia Wi-Fi</string>\n    <string name=\"download_notifier_no_network\">Brak połączenia z internetem</string>\n    <string name=\"action_global_search\">Wyszukiwanie globalne</string>\n    <string name=\"other_source\">Inne</string>\n    <string name=\"action_global_search_hint\">Wyszukiwanie globalne…</string>\n    <string name=\"browse\">Przeglądaj</string>\n    <string name=\"channel_common\">Zwykły</string>\n    <string name=\"latest\">Najnowsze</string>\n    <string name=\"action_display_download_badge\">Pobrane rozdziały</string>\n    <string name=\"information_empty_category\">Nie masz żadnych kategorii. Dotknij plusa, aby je utworzyć i zorganizować swoją bibliotekę.</string>\n    <string name=\"label_extensions\">Rozszerzenia</string>\n    <string name=\"ext_install\">Zainstaluj</string>\n    <string name=\"ext_pending\">Oczekujące</string>\n    <string name=\"ext_downloading\">Pobieranie</string>\n    <string name=\"ext_installing\">Instalowanie</string>\n    <string name=\"ext_installed\">Zainstalowano</string>\n    <string name=\"ext_uninstall\">Odinstaluj</string>\n    <string name=\"pref_double_tap_anim_speed\">Szybkość animacji podwójnego dotknięcia</string>\n    <string name=\"double_tap_anim_speed_0\">Bez animacji</string>\n    <string name=\"double_tap_anim_speed_normal\">Normalna</string>\n    <string name=\"double_tap_anim_speed_fast\">Szybka</string>\n    <string name=\"manga_added_library\">Dodano do biblioteki</string>\n    <string name=\"manga_removed_library\">Usunięto z biblioteki</string>\n    <string name=\"label_migration\">Migracja</string>\n    <string name=\"copied_to_clipboard\">Skopiowano do schowka:\n\\n %1$s</string>\n    <string name=\"copy\">Kopiuj</string>\n    <string name=\"label_extension_info\">Szczegóły rozszerzenia</string>\n    <string name=\"ext_update\">Aktualizuj</string>\n    <string name=\"ext_trust\">Ufaj</string>\n    <string name=\"ext_untrusted\">Niezaufane</string>\n    <string name=\"untrusted_extension\">Niezaufane rozszerzenie</string>\n    <string name=\"untrusted_extension_message\">To rozszerzenie było podpisane niezaufanym certyfikatem i nie zostało aktywowane.\n\\n\n\\nZłośliwe rozszerzenie może odczytać dane logowania albo uruchomić złośliwy kod.\n\\n\n\\nUfając temu rozszerzeniu akceptujesz to zagrożenie.</string>\n    <string name=\"migration_dialog_what_to_include\">Zaznacz dane do zawarcia</string>\n    <string name=\"migrate\">Migruj</string>\n    <string name=\"pager_viewer\">Widok stron</string>\n    <string name=\"source_not_installed\">Nie zainstalowano źródła: %1$s</string>\n    <string name=\"repeating\">Czytane ponownie</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Typ</string>\n    <string name=\"transition_finished\">Przeczytany:</string>\n    <string name=\"transition_current\">Obecny:</string>\n    <string name=\"transition_next\">Następny:</string>\n    <string name=\"transition_previous\">Poprzedni:</string>\n    <string name=\"transition_no_next\">Brak następnego rozdziału</string>\n    <string name=\"transition_no_previous\">Nie ma wcześniejszych rozdziałów</string>\n    <string name=\"transition_pages_loading\">Ładowanie stron…</string>\n    <string name=\"transition_pages_error\">Nie udało się załadować stron: %1$s</string>\n    <string name=\"action_open_in_web_view\">Otwórz używając WebView</string>\n    <string name=\"pref_skip_read_chapters\">Pomiń rozdziały ozn. jako przeczytane</string>\n    <string name=\"pref_read_with_long_tap\">Pokaż akcje po przytrzymaniu</string>\n    <string name=\"pref_color_filter_mode\">Tryb mieszania kolorów</string>\n    <string name=\"filter_mode_overlay\">Nakładka</string>\n    <string name=\"filter_mode_multiply\">Pomnożenie</string>\n    <string name=\"filter_mode_lighten\">Rozjaśnienie</string>\n    <string name=\"filter_mode_darken\">Ściemnienie</string>\n    <string name=\"label_help\">Pomoc</string>\n    <string name=\"action_webview_back\">Wstecz</string>\n    <string name=\"filter_mode_screen\">Ekran</string>\n    <string name=\"no_results_found\">Nie znaleziono wyników</string>\n    <string name=\"migration_selection_prompt\">Wybierz źródło, z którego chcesz migrować</string>\n    <string name=\"action_webview_forward\">Dalej</string>\n    <string name=\"action_webview_refresh\">Odśwież</string>\n    <string name=\"pref_category_library\">Biblioteka</string>\n    <string name=\"ext_obsolete\">Przestarzałe</string>\n    <string name=\"obsolete_extension_message\">To rozszerzenie nie jest już dostępne i może nie funkcjonować prawidłowo, powodując problemy z aplikacją. Zalecamy odinstalowanie go.</string>\n    <string name=\"pref_date_format\">Format daty</string>\n    <string name=\"pref_category_library_update\">Globalna aktualizacja</string>\n    <string name=\"logout_title\">Wylogować z %1$s?</string>\n    <string name=\"logout\">Wyloguj</string>\n    <string name=\"logout_success\">Wylogowano</string>\n    <string name=\"paused\">Wstrzymane</string>\n    <string name=\"pref_always_show_chapter_transition\">Zawsze pokazuj przejścia rozdziałów</string>\n    <string name=\"vertical_plus_viewer\">Pionowo z przerwami</string>\n    <string name=\"pref_skip_filtered_chapters\">Pomijaj odfiltrowane rozdziały</string>\n    <string name=\"pref_category_display\">Wyświetlanie</string>\n    <string name=\"hide_notification_content\">Ukryj zawartość powiadomienia</string>\n    <string name=\"lock_when_idle\">Zablokuj podczas bezczynności</string>\n    <string name=\"channel_new_chapters\">Aktualizacje rozdziałów</string>\n    <string name=\"information_webview_outdated\">Zaktualizuj aplikację WebView dla lepszej kompatybilności</string>\n    <string name=\"information_cloudflare_bypass_failure\">Nie udało się obejść Cloudflare</string>\n    <string name=\"label_more\">Więcej</string>\n    <string name=\"secure_screen_summary\">Ukrywa zawartość ekranu przy przełączaniu między aplikacjami i blokuj zrzuty ekranu</string>\n    <string name=\"lock_never\">Nigdy</string>\n    <string name=\"lock_always\">Zawsze</string>\n    <string name=\"lock_with_biometrics\">Wymagaj odblokowania</string>\n    <string name=\"pref_category_security\">Bezpieczeństwo i prywatność</string>\n    <string name=\"pref_manage_notifications\">Zarządzaj powiadomieniami</string>\n    <string name=\"theme_system\">Systemowy</string>\n    <string name=\"theme_dark\">Ciemny</string>\n    <string name=\"theme_light\">Jasny</string>\n    <string name=\"action_move_to_bottom\">Przenieś na dół</string>\n    <string name=\"action_move_to_top\">Przenieś na górę</string>\n    <string name=\"action_oldest\">Najstarsze</string>\n    <string name=\"action_newest\">Najnowsze</string>\n    <string name=\"action_cancel_all\">Anuluj wszystko</string>\n    <string name=\"action_select_inverse\">Odwróć zaznaczenie</string>\n    <string name=\"action_sort_latest_chapter\">Ostatni rozdział</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"label_sources\">Źródła</string>\n    <string name=\"notification_chapters_single\">Rozdział %1$s</string>\n    <string name=\"updating_library\">Aktualizowanie biblioteki</string>\n    <string name=\"pref_category_for_this_series\">Dla tej serii</string>\n    <string name=\"manga_info_collapse\">Mniej</string>\n    <string name=\"add_to_library\">Dodaj do biblioteki</string>\n    <string name=\"email\">Adres e-mail</string>\n    <string name=\"downloaded_only_summary\">Filtruje wszystkie pozycje w twojej bibliotece</string>\n    <string name=\"label_downloaded_only\">Tylko pobrane</string>\n    <string name=\"check_for_updates\">Sprawdź aktualizacje</string>\n    <string name=\"licenses\">Licencje open source</string>\n    <string name=\"website\">Strona WWW</string>\n    <string name=\"battery_optimization_disabled\">Oszczędzanie baterii jest już wyłączone</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Pomaga z aktualizacjami biblioteki i backupami w tle</string>\n    <string name=\"pref_disable_battery_optimization\">Wyłącz oszczędzanie baterii</string>\n    <string name=\"restoring_backup_canceled\">Anulowano przywracanie</string>\n    <string name=\"restore_in_progress\">Kopia zapasowa jest w trakcie przywracania</string>\n    <string name=\"backup_in_progress\">Kopia zapasowa jest już w trakcie tworzenia</string>\n    <string name=\"restore_duration\">%1$02d min, %2$02d s</string>\n    <string name=\"pref_webtoon_side_padding\">Marginesy boczne</string>\n    <string name=\"gray_background\">Szary</string>\n    <string name=\"ext_updates_pending\">Dostępne aktualizacje</string>\n    <string name=\"secure_screen\">Ukryj ekran</string>\n    <string name=\"action_unpin\">Odepnij</string>\n    <string name=\"action_pin\">Przypnij</string>\n    <string name=\"manga_info_expand\">Więcej</string>\n    <string name=\"recent_manga_time\">Rozdz. %1$s - %2$s</string>\n    <string name=\"in_library\">W bibliotece</string>\n    <string name=\"pinned_sources\">Przypięte</string>\n    <string name=\"last_used_source\">Ostatnio używane</string>\n    <string name=\"tracking_info\">Przesyłanie postępu czytania do zewnętrznego serwisu. Ustaw śledzenie guzikiem \\\"Śledzenie\\\" w wybranych tytułach.</string>\n    <string name=\"channel_ext_updates\">Aktualizacje rozszerzeń</string>\n    <string name=\"information_webview_required\">WebView jest wymagany do poprawnego działania aplikacji</string>\n    <string name=\"notification_chapters_multiple\">Rozdziały %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Rozdział %1$s i %2$d więcej</string>\n    <string name=\"viewer\">Tryb czytania</string>\n    <string name=\"local_source_help_guide\">Źródła lokalne - poradnik</string>\n    <string name=\"pref_cutout_short\">Pokazuj zawartość w strefie odcięcia</string>\n    <string name=\"action_view_chapters\">Przeglądaj rozdziały</string>\n    <string name=\"add_tracking\">Dodaj śledzenie</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Niepowodzenie otwarcia ustawień urządzenia</string>\n    <string name=\"pref_refresh_library_covers\">Odśwież okładki w bibliotece</string>\n    <string name=\"restoring_backup_error\">Przywracanie kopii zapasowej zakończone niepowodzeniem</string>\n    <string name=\"creating_backup_error\">Tworzenie kopii zapasowej zakończone niepowodzeniem</string>\n    <string name=\"pref_category_reading\">Czytane</string>\n    <string name=\"sort_by_upload_date\">Po dacie dodania</string>\n    <string name=\"label_data\">Dane</string>\n    <string name=\"backup_restore_missing_sources\">Brakujące źródła:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Kopia zapasowa nie zawiera żadnych wpisów.</string>\n    <string name=\"invalid_backup_file\">Nieprawidłowy plik kopii zapasowej:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Sprawdź, czy są nowe okładki i opisy podczas aktualizowania biblioteki</string>\n    <string name=\"pref_library_update_refresh_metadata\">Automatycznie odświeżaj metadane</string>\n    <string name=\"action_display_comfortable_grid\">Wygodna siatka</string>\n    <string name=\"action_migrate\">Migracja</string>\n    <string name=\"page_list_empty_error\">Nie znaleziono żadnych stron</string>\n    <string name=\"tabs_header\">Karty</string>\n    <string name=\"action_display_show_tabs\">Pokaż karty kategorii</string>\n    <string name=\"action_disable_all\">Wyłącz wszystkie</string>\n    <string name=\"action_enable_all\">Włącz wszystkie</string>\n    <string name=\"pref_show_reading_mode_summary\">Po otwarciu aplikacji pokaż aktualny tryb czytania</string>\n    <string name=\"pref_show_reading_mode\">Tryb czytania</string>\n    <string name=\"loader_not_implemented_error\">Nie znaleziono źródła</string>\n    <string name=\"action_disable\">Wyłącz</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"requires_app_restart\">Wymaga ponownego uruchomienia aplikacji</string>\n    <string name=\"label_network\">Sieć</string>\n    <string name=\"tapping_inverted_both\">Obydwa</string>\n    <string name=\"tapping_inverted_vertical\">Wertykalnie</string>\n    <string name=\"tapping_inverted_horizontal\">Horyzontalnie</string>\n    <string name=\"tapping_inverted_none\">Brak</string>\n    <string name=\"pref_read_with_tapping_inverted\">Odwróć strefy kliknięcia</string>\n    <string name=\"download_insufficient_space\">Nie udało się pobrać rozdziałów z powodu braku miejsca na urządzeniu</string>\n    <string name=\"unknown_status\">Nieznany status</string>\n    <string name=\"unknown_author\">Nieznany autor</string>\n    <string name=\"action_global_search_query\">Szukaj \\\"%1$s\\\" globalnie</string>\n    <string name=\"updated_version\">Zaktualizowano do v%1$s</string>\n    <string name=\"whats_new\">Co nowego</string>\n    <string name=\"pref_category_reading_mode\">Tryb czytania</string>\n    <string name=\"pref_category_theme\">Motyw</string>\n    <string name=\"action_sort_date_added\">Po dacie dodania</string>\n    <string name=\"action_search_settings\">Ustawienia szukania</string>\n    <string name=\"spen_next_page\">Następna strona</string>\n    <string name=\"spen_previous_page\">Poprzednia strona</string>\n    <string name=\"channel_errors\">Błędy</string>\n    <string name=\"channel_complete\">Ukończone</string>\n    <string name=\"channel_progress\">Postęp</string>\n    <string name=\"chapter_settings_updated\">Zaktualizowano domyślne ustawienia rozdziałów</string>\n    <string name=\"migration_help_guide\">Instrukcja przenoszenia źródeł</string>\n    <string name=\"share_page_info\">%1$s: %2$s, strona %3$d</string>\n    <string name=\"no_chapters_error\">Nie znaleziono rozdziałów</string>\n    <string name=\"set_chapter_settings_as_default\">Ustaw jako domyślne</string>\n    <string name=\"also_set_chapter_settings_for_library\">Dodatkowo zastosuj do wszystkich wpisów w mojej bibliotece</string>\n    <string name=\"confirm_set_chapter_settings\">Jesteś pewien, że chcesz zapisać te ustawienia jako domyślne?</string>\n    <string name=\"chapter_settings\">Ustawienia rozdziałów</string>\n    <string name=\"no_pinned_sources\">Nie masz podpiętych źródeł</string>\n    <string name=\"downloaded_chapters\">Pobrane rozdziały</string>\n    <string name=\"manga_from_library\">Z biblioteki</string>\n    <string name=\"pref_incognito_mode_summary\">Wstrzymuje zapisywanie do historii czytania</string>\n    <string name=\"pref_incognito_mode\">Tryb incognito</string>\n    <string name=\"pref_clear_history\">Wyczyść historię</string>\n    <string name=\"clear_history_confirmation\">Jesteś pewien? CAŁA historia zostanie usunięta.</string>\n    <string name=\"clear_history_completed\">Historia usunięta</string>\n    <string name=\"backup_restore_missing_trackers\">Serwisy, do których nie zalogowono:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Usuwaj rozdziały dodane do zakładek</string>\n    <string name=\"pref_category_delete_chapters\">Usuń rozdziały</string>\n    <string name=\"ext_nsfw_warning\">Źródła z tej wtyczki mogą zawierać treści NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Nie zapobiega to nieoficjalnym lub potencjalnie niepoprawnie oflagowanym rozszerzeniom przed pokazywaniem zwartości NSFW(18+) w aplikacji.</string>\n    <string name=\"pref_category_nsfw_content\">NFSW Materiały 18+</string>\n    <string name=\"file_picker_error\">Nie znaleziono aplikacji do przeglądania plików</string>\n    <string name=\"myanimelist_relogin\">Wymagane ponowne zalogowanie do MAL</string>\n    <string name=\"pref_show_nsfw_source\">Pokazuj na liście źródeł i rozszerzeń</string>\n    <string name=\"track_finished_reading_date\">Data zakończenia</string>\n    <string name=\"track_started_reading_date\">Data rozpoczęcia</string>\n    <string name=\"pref_dump_crash_logs_summary\">Zapisuje logi błędów do pliku do udostępnienia programistom</string>\n    <string name=\"pref_dump_crash_logs\">Udostępnij logi crasha</string>\n    <string name=\"pref_viewer_nav\">Strefy kliknięcia</string>\n    <string name=\"edge_nav\">Przy krawędzi</string>\n    <string name=\"kindlish_nav\">Podobnie jak w czytniku Kindle</string>\n    <string name=\"l_nav\">W kształcie litery \\\"L\\\"</string>\n    <string name=\"action_desc\">Malejąco</string>\n    <string name=\"action_asc\">Rosnąco</string>\n    <string name=\"action_order_by_chapter_number\">Według numeru rozdziału</string>\n    <string name=\"action_order_by_upload_date\">Po dacie dodania</string>\n    <string name=\"action_filter_tracked\">Śledzone</string>\n    <string name=\"action_display_show_number_of_items\">Pokaż liczbę elementów</string>\n    <string name=\"right_and_left_nav\">Prawa i Lewa</string>\n    <string name=\"pref_dual_page_invert_summary\">Jeśli układ w podziale podwójnych stron nie pasuje do kierunku czytania</string>\n    <string name=\"pref_dual_page_invert\">Odwróć układ w podziale podwójnych stron</string>\n    <string name=\"pref_dual_page_split\">Podział podwójnych stron</string>\n    <string name=\"pref_dns_over_https\">DNS przez HTTPS (DoH)</string>\n    <string name=\"backup_restore_content_full\">Dane z pliku kopii zapasowej zostaną przywrócone.\n\\n\n\\nBędziesz musiał zainstalować brakujące rozszerzenia i zalogować się do usług śledzących, aby móc z nich korzystać.</string>\n    <string name=\"nav_zone_right\">Prawo</string>\n    <string name=\"nav_zone_left\">Lewo</string>\n    <string name=\"nav_zone_next\">Następne</string>\n    <string name=\"nav_zone_prev\">Poprzednie</string>\n    <string name=\"pref_show_navigation_mode_summary\">Krótko pokazuj, kiedy czytnik zostaje otwarty</string>\n    <string name=\"pref_show_navigation_mode\">Pokazuj nakładkę stref kliknięcia</string>\n    <string name=\"exclude\">Wyklucz: %s</string>\n    <string name=\"include\">Uwzględnij: %s</string>\n    <string name=\"none\">Brak</string>\n    <string name=\"update_check_eol\">Ta wersja Androida nie jest już wspierana</string>\n    <string name=\"clipboard_copy_error\">Nie udało się skopiować do schowka</string>\n    <string name=\"pref_library_update_categories_details\">Tytuły w wykluczonych kategoriach nie będą aktualizowane, nawet jeśli są również w uwzględnionych kategoriach.</string>\n    <string name=\"pref_download_new_categories_details\">Tytuły w wykluczonych kategoriach nie będą pobierane, nawet jeśli są również w uwzględnionych kategoriach.</string>\n    <string name=\"pref_category_auto_download\">Automatyczne pobieranie</string>\n    <string name=\"rotation_landscape\">Poziomo</string>\n    <string name=\"rotation_portrait\">Pionowo</string>\n    <string name=\"action_show_errors\">Kliknij aby wyświetlić szczegóły</string>\n    <string name=\"notification_incognito_text\">Wyłącz tryb incognito</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data pobrania rozdziału</string>\n    <string name=\"error_no_match\">Nie znaleziono pasującego wyniku</string>\n    <string name=\"source_unsupported\">Źródło nie jest wspierane</string>\n    <string name=\"unread\">Nieprzeczytane</string>\n    <string name=\"rotation_type\">Orientacja ekranu</string>\n    <string name=\"automatic_background\">Automatycznie</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Utwórz foldery względem tytułu</string>\n    <string name=\"pref_create_folder_per_manga\">Zapisz strony do osobnych folderów</string>\n    <string name=\"pref_reader_actions\">Akcje</string>\n    <string name=\"pref_grayscale\">Odcienie szarości</string>\n    <string name=\"cancel_all_for_series\">Anuluj wszystko dla tego tytułu</string>\n    <string name=\"date\">Data</string>\n    <string name=\"local_filter_order_by\">Sortowanie</string>\n    <string name=\"local_invalid_format\">Błędny format rozdziału</string>\n    <string name=\"chapter_not_found\">Nie znaleziono rozdziału</string>\n    <string name=\"error_sharing_cover\">Błąd przy udostępnianiu okładki</string>\n    <string name=\"error_saving_cover\">Błąd przy zapisie okładki</string>\n    <string name=\"cover_saved\">Okładka zapisana</string>\n    <string name=\"manga_cover\">Okładka</string>\n    <string name=\"tracking_guide\">Przewodnik śledzenia postępu</string>\n    <string name=\"off\">Wyłączone</string>\n    <string name=\"on\">Włączone</string>\n    <string name=\"categorized_display_settings\">Ustawienia sortowania dla każdej kategorii</string>\n    <string name=\"action_display_local_badge\">Lokalne źródło</string>\n    <string name=\"information_empty_category_dialog\">Nie masz jeszcze żadnych kategorii.</string>\n    <string name=\"restrictions\">Ograniczenia: %s</string>\n    <string name=\"about_dont_kill_my_app\">Niektórzy producenci mają dodatkowe ograniczenia, które zabijają usługi działające w tle. Ta strona zawiera więcej informacji na ten temat.</string>\n    <string name=\"action_start_downloading_now\">Zacznij pobierać teraz</string>\n    <string name=\"theme_greenapple\">Zielone jabłko</string>\n    <string name=\"theme_monet\">Dynamiczny</string>\n    <string name=\"pref_app_theme\">Motyw aplikacji</string>\n    <string name=\"restore_miui_warning\">Funkcje kopii zapasowej mogą nie działać, jeśli optymalizacja nakładki MIUI jest wyłączona.</string>\n    <string name=\"theme_yotsuba\">Yotsuba •</string>\n    <string name=\"theme_yinyang\">Yin i Yang</string>\n    <string name=\"pref_dark_theme_pure_black\">Czysty czarny motyw</string>\n    <string name=\"theme_strawberrydaiquiri\">Truskawkowe daiquiri</string>\n    <string name=\"pref_hide_threshold\">Czułość ukrywania dolnego paska podczas przewijania</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"label_background_activity\">Aktywność w tle</string>\n    <string name=\"action_track\">Śledź</string>\n    <string name=\"pref_category_appearance\">Wygląd</string>\n    <string name=\"confirm_lock_change\">Autoryzuj, aby potwierdzić zmianę</string>\n    <string name=\"label_default\">Domyślny</string>\n    <string name=\"getting_started_guide\">Wprowadzenie - poradnik</string>\n    <string name=\"help_translate\">Pomóż tłumaczyć</string>\n    <string name=\"pref_tablet_ui_mode\">Wymuś UI dla tabletu</string>\n    <string name=\"pref_remove_exclude_categories\">Wykluczone kategorie</string>\n    <string name=\"pref_lowest\">Najniższe</string>\n    <string name=\"pref_low\">Niskie</string>\n    <string name=\"pref_high\">Wysokie</string>\n    <string name=\"pref_highest\">Najwyższy</string>\n    <string name=\"pref_inverted_colors\">Odwrócone</string>\n    <string name=\"ext_app_info\">Informacje o aplikacji</string>\n    <string name=\"relative_time_today\">Dzisiaj</string>\n    <string name=\"theme_tealturquoise\">Błękitny &amp; Turkusowy</string>\n    <string name=\"theme_midnightdusk\">Zmierzch północy</string>\n    <string name=\"notification_size_warning\">Ostrzeżenie: duże aktualizacje biblioteki mogą prowadzić do zwiększonego zużycia baterii oraz spowolnienia działania źródeł. Kliknij, by dowiedzieć się więcej.</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Zainstaluj i uruchom Shizuku, aby używać go jako instalatora rozszerzeń.</string>\n    <string name=\"ext_installer_pref\">Instalator</string>\n    <string name=\"pref_verbose_logging\">Szczegółowe logi</string>\n    <string name=\"ext_install_service_notif\">Instalowanie rozszerzenia…</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku nie jest aktywne</string>\n    <string name=\"pref_verbose_logging_summary\">Zapisuje szczegółowe logi w logu systemu (obniża wydajność aplikacji)</string>\n    <string name=\"backup_info\">Radzimy przechowywać kopie również w innych miejscach.</string>\n    <string name=\"action_sort_count\">Ilość wejść</string>\n    <string name=\"action_display_language_badge\">Język</string>\n    <string name=\"label_warning\">Ostrzeżenie</string>\n    <string name=\"download_queue_size_warning\">Ostrzeżenie: Duże aktualizacje biblioteki mogą prowadzić do zwiększonego zużycia baterii oraz spowolnienia działania źródeł.</string>\n    <string name=\"update_72hour\">Co 3 dni</string>\n    <string name=\"connected_to_wifi\">Tylko przez Wi-Fi</string>\n    <string name=\"enhanced_tracking_info\">Usługi dostarczania ulepszonych funkcji dla niektórych źródeł. Mangi po dodaniu do biblioteki są automatycznie śledzone.</string>\n    <string name=\"enhanced_services\">Ulepszone usługi śledzenia</string>\n    <string name=\"channel_app_updates\">Aktualizacje aplikacji</string>\n    <string name=\"ext_update_all\">Zaktualizuj wszystko</string>\n    <string name=\"ext_installer_legacy\">Przestarzały</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Wyczyść cache rozdziałów przy uruchamianiu aplikacji</string>\n    <string name=\"extension_api_error\">Nie można uzyskać listy rozszerzeń</string>\n    <string name=\"publishing_finished\">Opublikowane w całości</string>\n    <string name=\"database_clean\">Nie ma nic do wyczyszczynia</string>\n    <string name=\"cancelled\">Anulowane</string>\n    <string name=\"on_hiatus\">Przerwa wydawnicza</string>\n    <string name=\"library_errors_help\">Aby uzyskać pomoc z błędami aktualizacji biblioteki, zobacz %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Zapisz jako archiwum CBZ</string>\n    <string name=\"privacy_policy\">Polityka prywatności</string>\n    <string name=\"clear_database_source_item_count\">%1$d wpisów spoza biblioteki w bazie danych</string>\n    <string name=\"pref_update_only_completely_read\">Posiada nieprzeczytane rozdziały</string>\n    <string name=\"pref_update_only_started\">Brak przeczytanych rozdziałów</string>\n    <string name=\"pref_landscape_zoom\">Automatycznie przybliżaj poziome obrazy</string>\n    <string name=\"action_show_manga\">Pokaż</string>\n    <string name=\"pref_navigate_pan\">Przesuń szeroki obraz</string>\n    <string name=\"action_display_cover_only_grid\">Siatka z samych okładek</string>\n    <string name=\"skipped_reason_not_started\">Pominięto, ponieważ brak przeczytanych rozdziałów</string>\n    <string name=\"skipped_reason_completed\">Pominięto, ponieważ seria została ukończona</string>\n    <string name=\"skipped_reason_not_caught_up\">Pominięto, ponieważ istnieją nieprzeczytane rozdziały</string>\n    <string name=\"notification_update_error\">%1$d aktualizacja (aktualizacje) nie powiodła się</string>\n    <string name=\"action_close\">Zamknij</string>\n    <string name=\"action_move_to_top_all_for_series\">Przenieś serię na górę</string>\n    <string name=\"action_sort_unread_count\">Ilość nieprzeczytanych</string>\n    <string name=\"learn_more\">Kliknij, by dowiedzieć się więcej</string>\n    <string name=\"update_check_open\">Otwórz na GitHubie</string>\n    <string name=\"pref_reset_viewer_flags_success\">Reset wszystkich ustawień czytnika</string>\n    <string name=\"ext_info_version\">Wersja</string>\n    <string name=\"cant_open_last_read_chapter\">Nie można otworzyć ostatnio czytanego rozdziału</string>\n    <string name=\"not_installed\">Niezainstalowane</string>\n    <string name=\"theme_lavender\">Lawenda</string>\n    <string name=\"pref_app_language\">Język aplikacji</string>\n    <string name=\"disabled_nav\">Nieaktywny</string>\n    <string name=\"empty_backup_error\">Brak pozycji w bibliotece do utworzenia kopii zapasowej</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nie można zresetować ustawień czytnika</string>\n    <string name=\"error_saving_picture\">Błąd podczas zapisywania obrazka</string>\n    <string name=\"pref_clear_webview_data\">Wyczyść dane WebView</string>\n    <string name=\"webview_data_deleted\">Dane WebView wyczyszczone</string>\n    <string name=\"action_sort_last_manga_update\">Ostatnia aktualizacja</string>\n    <string name=\"split_tall_images_summary\">Poprawia wydajność czytnika</string>\n    <string name=\"description_placeholder\">Brak opisu</string>\n    <string name=\"wish_list\">Lista życzeń</string>\n    <string name=\"on_hold_list\">Lista odłożonych na później</string>\n    <string name=\"unfinished_list\">Lista niezakończonych</string>\n    <string name=\"source_empty_screen\">Nie znaleziono źródła</string>\n    <string name=\"source_filter_empty_screen\">Nie znaleziono zainstalowanego źródła</string>\n    <string name=\"empty_screen\">Cóż, to troszkę niezręczne</string>\n    <string name=\"ext_info_language\">Język</string>\n    <string name=\"reading_list\">Lista czytanych</string>\n    <string name=\"custom_cover\">Niestandardowa okładka</string>\n    <string name=\"complete_list\">Lista zakończonych</string>\n    <string name=\"network_not_metered\">Tylko na nielimitowanych połączeniach</string>\n    <string name=\"pref_reset_viewer_flags\">Resetowanie ustawień czytników serii</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Resetuje tryb czytania i orientację wszystkich serii</string>\n    <string name=\"download_notifier_split_page_not_found\">Strona %d nie została znaleziona podczas podziału</string>\n    <string name=\"ext_info_age_rating\">Oznaczenie wiekowe</string>\n    <string name=\"rotation_reverse_portrait\">Do góry nogami</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nie można było znaleźć ścieżki %d strony</string>\n    <string name=\"pref_user_agent_string\">Domyślny user agent string</string>\n    <string name=\"pref_reset_user_agent_string\">Zresetuj domyślny user agent string</string>\n    <string name=\"delete_category_confirmation\">Czy chcesz usunąć kategorię \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Usuń kategorię</string>\n    <string name=\"internal_error\">InternalError: sprawdź log błędów po więcej informacji</string>\n    <string name=\"action_remove_everything\">Usuń wszystko</string>\n    <string name=\"error_user_agent_string_blank\">Pole user agent nie może być puste</string>\n    <string name=\"update_already_running\">Aktualizacja już trwa</string>\n    <string name=\"theme_tidalwave\">Tsunami</string>\n    <string name=\"download_ahead\">Pobierz z wyprzedzeniem</string>\n    <string name=\"auto_download_while_reading\">Pobieraj podczas czytania</string>\n    <string name=\"appwidget_updates_description\">Zobacz ostatnio zaktualizowane wpisy</string>\n    <string name=\"appwidget_unavailable_locked\">Widżet nie jest dostępny kiedy blokada aplikacji jest włączona</string>\n    <string name=\"are_you_sure\">Jesteś pewien?</string>\n    <string name=\"download_ahead_info\">Działa tylko, jeśli aktualny i następny rozdział są już pobrane.</string>\n    <string name=\"multi_lang\">Wielojęzyczne</string>\n    <string name=\"popular\">Popularne</string>\n    <string name=\"updates_last_update_info\">Biblioteka ostatnio aktualizowana: %s</string>\n    <string name=\"remove_manga\">Zamierzasz usunąć \\\"%s\\\" ze swojej biblioteki</string>\n    <string name=\"label_stats\">Statystyki</string>\n    <string name=\"label_started\">Rozpoczęte</string>\n    <string name=\"label_local\">Lokalne</string>\n    <string name=\"label_downloaded\">Pobrane</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Wymuś ponowne sprawdzenie pobranych rozdziałów przez aplikację</string>\n    <string name=\"crash_screen_description\">%s napotkał nieoczekiwany błąd. Sugerujemy podzielenie się logami crasha, a następnie udostępnienie ich na naszym kanale wsparcia na Discordzie.</string>\n    <string name=\"pref_reader_summary\">Tryb czytania, wyświetl, nawigacja</string>\n    <string name=\"invalid_location\">Nieprawidłowa lokalizacja: %s</string>\n    <string name=\"action_display_show_continue_reading_button\">Przycisk wznów czytanie</string>\n    <string name=\"pref_tracking_summary\">Jednokierunkowa synchronizacja postępu, ulepszona synchronizacja</string>\n    <string name=\"pref_browse_summary\">Źródła, rozszerzenia, globalne wyszukiwanie</string>\n    <string name=\"pref_security_summary\">Blokada aplikacji, bezpieczny ekran</string>\n    <string name=\"pref_appearance_summary\">Tło, data &amp; format czasu</string>\n    <string name=\"pref_advanced_summary\">Zrzuć logi, optymalizacje baterii</string>\n    <string name=\"missing_storage_permission\">Nie przyznano uprawnień do przechowywania</string>\n    <string name=\"pref_backup_summary\">Manualna &amp; automatyczna kopia</string>\n    <string name=\"label_read_duration\">Czas odczytu</string>\n    <string name=\"label_titles_section\">Wpisy</string>\n    <string name=\"label_titles_in_global_update\">W globalnej aktualizacji</string>\n    <string name=\"label_tracker_section\">Śledzenie</string>\n    <string name=\"unknown_title\">Nieznany tytuł</string>\n    <string name=\"updates_last_update_info_just_now\">Przed chwilą</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"track_remove_date_conf_title\">Usunąć datę?</string>\n    <string name=\"track_remove_finish_date_conf_text\">To spowoduje usunięcie wcześniej wybranej daty zakończenia z %s</string>\n    <string name=\"error_user_agent_string_invalid\">Nieprawidłowy ciąg agenta użytkownika</string>\n    <string name=\"crash_screen_restart_application\">Uruchom ponownie aplikację</string>\n    <string name=\"action_not_now\">Nie teraz</string>\n    <string name=\"label_overview_section\">Przegląd</string>\n    <string name=\"label_completed_titles\">Zakończone wpisy</string>\n    <string name=\"label_total_chapters\">Razem</string>\n    <string name=\"action_search_hint\">Szukaj…</string>\n    <string name=\"action_open_random_manga\">Otwórz losową pozycję</string>\n    <string name=\"pref_library_summary\">Kategorie, aktualizacja globalna, przesunięcie rozdziału</string>\n    <string name=\"pref_invalidate_download_cache\">Odbuduj indeks pobierania</string>\n    <string name=\"fdroid_warning\">Kompilacje F-Droid nie są oficjalnie obsługiwane.\n\\nNaciśnij, aby dowiedzieć się więcej.</string>\n    <string name=\"label_read_chapters\">Przeczytane</string>\n    <string name=\"pref_downloads_summary\">Automatyczne pobieranie, pobierz wstępnie</string>\n    <string name=\"track_remove_start_date_conf_text\">To spowoduje usunięcie wcześniej wybranej daty rozpoczęcia z %s</string>\n    <string name=\"pref_library_update_show_tab_badge\">Pokaż liczbę nieprzeczytanych na ikonie Aktualizacji</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%d godz.</string>\n    <string name=\"minute_short\">%d minut</string>\n    <string name=\"seconds_short\">%d sekund</string>\n    <string name=\"label_used\">Używane</string>\n    <string name=\"label_tracked_titles\">Śledzone pozycje</string>\n    <string name=\"label_mean_score\">Średnia ocena</string>\n    <string name=\"skipped_reason_not_always_update\">Pominięto, ponieważ aktualizacja nie jest wymagana</string>\n    <string name=\"information_no_entries_found\">Nie znaleziono wpisów w tej kategorii</string>\n    <string name=\"download_notifier_cache_renewal\">Sprawdzanie pobranych plików</string>\n    <string name=\"information_no_manga_category\">Kategoria jest pusta</string>\n    <string name=\"copied_to_clipboard_plain\">Skopiowano do schowka</string>\n    <string name=\"confirm_add_duplicate_manga\">Masz w swojej bibliotece pozycję o tej samej nazwie.\n\\n\n\\nCzy nadal chcesz kontynuować?</string>\n    <string name=\"pref_skip_dupe_chapters\">Pomiń zduplikowane rozdziały</string>\n    <string name=\"enhanced_services_not_installed\">Dostępne, ale źródło nie jest zainstalowane: %s</string>\n    <string name=\"track_error\">Błąd %1$s: %2$s</string>\n    <string name=\"information_required_plain\">*wymagane</string>\n    <string name=\"pref_hide_in_library_items\">Ukryj pozycje znajdujące się już w bibliotece</string>\n    <string name=\"action_copy_to_clipboard\">Kopiuj do schowka</string>\n    <string name=\"action_update_category\">Aktualizuj kategorię</string>\n    <string name=\"split_tall_images\">Dziel długie obrazy</string>\n    <string name=\"overlay_header\">Nakładka</string>\n    <string name=\"pref_page_rotate\">Dopasuj szerokie strony</string>\n    <string name=\"pref_page_rotate_invert\">Zmień orientację obróconych obrazów</string>\n    <string name=\"pref_debug_info\">Informacje debugowania</string>\n    <string name=\"pref_double_tap_zoom\">Dotknij dwukrotnie, aby powiększyć</string>\n    <string name=\"pref_chapter_swipe_end\">Przesuń palcem w prawo</string>\n    <string name=\"pref_chapter_swipe_start\">Przesuń palcem w lewo</string>\n    <string name=\"action_set_interval\">Ustaw interwał</string>\n    <string name=\"action_sort_next_updated\">Następna spodziewana aktualizacja</string>\n    <string name=\"manga_display_modified_interval_title\">Aktualizuj co</string>\n    <string name=\"syncing_library\">Synchronizowanie biblioteki</string>\n    <string name=\"create_backup_file_error\">Nie można wykonać kopi zapasowej</string>\n    <string name=\"intervals_header\">Interwały</string>\n    <string name=\"track_delete_remote_text\">Usuń też z %s</string>\n    <string name=\"exception_http\">HTTP %d, otwórz w WebView</string>\n    <string name=\"exception_offline\">Brak połączenia z internetem</string>\n    <string name=\"exception_unknown_host\">Nie można połączyć się z %s</string>\n    <string name=\"track_delete_title\">Przestań śledzić %s?</string>\n    <string name=\"delete_downloaded\">Usuń pobrane</string>\n    <string name=\"library_sync_complete\">Synchronizacja biblioteki zakończona</string>\n    <string name=\"download_cache_invalidated\">Indeksy pobrań unieważnione</string>\n    <string name=\"information_cloudflare_help\">Naciśnij tutaj aby uzyskać pomoc dotyczącą Cloudflare</string>\n    <string name=\"unlock_app_title\">Odblokuj %s</string>\n    <string name=\"action_filter_interval_custom\">Dostosowany interwał aktualizacji</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_text\">To usunie śledzenie lokalne.</string>\n    <string name=\"action_apply\">Zatwierdź</string>\n    <string name=\"action_revert_to_default\">Przywróć do domyślnych</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Przenieś serię na dół</string>\n    <string name=\"relative_time_span_never\">Nigdy</string>\n    <string name=\"onboarding_storage_action_select\">Wybierz folder</string>\n    <string name=\"manga_interval_expected_update\">Następna aktualizacja spodziewana za około %1$s, sprawdzanie co %2$s.</string>\n    <string name=\"onboarding_storage_selection_required\">Folder musi być wybrany</string>\n    <string name=\"onboarding_permission_notifications\">Uprawnienia powiadomień</string>\n    <string name=\"onboarding_heading\">Witaj!</string>\n    <string name=\"action_menu_overflow_description\">Więcej opcji</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"onboarding_action_skip\">Pomiń</string>\n    <string name=\"onboarding_action_next\">Następny</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Zużycie baterii w tle</string>\n    <string name=\"notification_updating_progress\">Aktualizowanie biblioteki... (%s)</string>\n    <string name=\"invalid_repo_name\">Nieprawidłowa nazwa repozytorium</string>\n    <string name=\"source_settings\">Ustawienia źródła</string>\n    <string name=\"app_settings\">Ustawienia aplikacji</string>\n    <string name=\"action_delete_repo\">Usuń repozytorium</string>\n    <string name=\"action_add_repo\">Dodaj repozytorium</string>\n    <string name=\"selected\">Zaznaczone</string>\n    <string name=\"action_bar_up_description\">Przewiń w górę</string>\n    <string name=\"onboarding_action_finish\">Zaczynajmy</string>\n    <string name=\"onboarding_storage_help_action\">Przewodnik po pamięci</string>\n    <string name=\"onboarding_permission_install_apps\">Zainstaluj uprawnienia aplikacji</string>\n    <string name=\"onboarding_permission_install_apps_description\">Do instalacji rozszerzeń.</string>\n    <string name=\"onboarding_permission_action_grant\">Zezwól</string>\n    <string name=\"onboarding_guides_new_user\">Pierwszy raz w %s? Zalecamy zapoznać się z poradnikiem.</string>\n    <string name=\"onboarding_guides_returning_user\">Ponowna instalacja %s?</string>\n    <string name=\"label_extension_repos\">Repozytoria rozszerzeń</string>\n    <string name=\"label_add_repo_input\">Link repozytorium</string>\n    <string name=\"pref_storage_usage\">Zużycie pamięci</string>\n    <string name=\"manga_interval_custom_amount\">Niestandardowa częstotliwość aktualizacji:</string>\n    <string name=\"no_scanlators_found\">Nie znaleziono skanlatorów</string>\n    <string name=\"file_null_uri_error\">Nie wybrano pliku</string>\n    <string name=\"not_selected\">Nie zaznaczone</string>\n    <string name=\"action_sort_tracker_score\">Serwisy śledzące</string>\n    <string name=\"label_data_storage\">Dane i pamięć</string>\n    <string name=\"pref_onboarding_guide\">Szybka konfiguracja</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Unikaj przerywania długich operacji takich jak pobieranie rozdziałów, aktualizacje bibliotek lub przywracanie kopii zapasowej.</string>\n    <string name=\"onboarding_permission_notifications_description\">Otrzymuj powiadomienia ze swojej biblioteki i więcej.</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"pref_relative_format\">Użyj dat względnych</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" zamiast \\\"%2$s\\\"</string>\n    <string name=\"pref_library_update_smart_update\">Inteligentna aktualizacja</string>\n    <string name=\"onboarding_description\">Na początek ustawmy kilka rzeczy. Zawsze możesz je później zmienić w ustawieniach.</string>\n    <string name=\"onboarding_storage_help_info\">Aktualizujesz ze starszej wersji i nie jesteś pewien co wybrać? Zobacz na przewodnik po pamięci.</string>\n    <string name=\"pref_update_only_in_release_period\">Przewiduj następną aktualizację</string>\n    <string name=\"ext_permission_install_apps_warning\">Uprawnienia są wymagane aby zainstalować rozszerzenia. Kliknij tutaj aby je przyznać.</string>\n    <string name=\"onboarding_storage_info\">Wybierz folder gdzie %1$s będzie zapisywał pobrane rozdziały, kopie zapasowe i inne.\n\\n\n\\nZalecany jest dedykowany folder.\n\\n\n\\nWybrany folder:%2$s</string>\n    <string name=\"ext_revoke_trust\">Unieważnij zaufanie nieznanym rozszerzeniom</string>\n    <string name=\"information_empty_repos\">Nie masz ustawionych repozytoriów.</string>\n    <string name=\"action_add_repo_message\">Dodaj repozytoria do Mihon. Powinien to być link z końcówką \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">To repozytorium jest już dodane!</string>\n    <string name=\"delete_repo_confirmation\">Na pewno chcesz usunąć repozytorium \\\"%s\\\"?</string>\n    <string name=\"action_open_repo\">Repozytorium open source</string>\n    <string name=\"pref_flash_page_summ\">Redukuje ghosting na wyświetlaczach e-ink</string>\n    <string name=\"no_location_set\">Brak ustawionej ścieżki pamięci</string>\n    <string name=\"pref_storage_location\">Miejsce przechowywania danych</string>\n    <string name=\"pref_storage_location_info\">Używane do automatycznych kopii zapasowych, pobierania rozdziałów i lokalnych źródeł.</string>\n    <string name=\"invalid_backup_file_error\">Pełny błąd:</string>\n    <string name=\"track_activity_name\">Login serwisu śledzącego</string>\n    <string name=\"action_create\">Utwórz</string>\n    <string name=\"pref_flash_page\">Miganie przy zmianie strony</string>\n    <string name=\"private_settings\">Dołącz wrażliwe ustawienia (np. tokeny serwisu śledzącego)</string>\n    <string name=\"last_auto_backup_info\">Ostatnia automatyczna kopia zapasowa: %s</string>\n    <string name=\"has_results\">Ma wyniki</string>\n    <string name=\"manga_display_interval_title\">Oszacuj co</string>\n    <string name=\"available_disk_space_info\">Wolne: %1$s / Ogółem: %2$s</string>\n    <string name=\"manga_interval_expected_update_soon\">Wkrótce</string>\n    <string name=\"skipped_reason_not_in_release_period\">Pominięto, ponieważ nie spodziewano się dzisiaj żadnej publikacji</string>\n    <string name=\"exclude_scanlators\">Wyklucz skanlatorów</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Wyłącz oddalenie</string>\n    <string name=\"action_add_anyway\">Dodaj mimo to</string>\n    <string name=\"action_migrate_duplicate\">Zmigruj istniejący wpis</string>\n    <string name=\"action_replace_repo\">Zamień</string>\n    <string name=\"action_view_upcoming\">Pokaż nadchodzące aktualizacje</string>\n    <string name=\"upcoming_calendar_next\">Następny miesiąc</string>\n    <string name=\"upcoming_calendar_prev\">Poprzedni miesiąc</string>\n    <string name=\"label_upcoming\">Nadchodzący</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Nie udało się uzyskać dostępu do folderu. Aplikacja może się zachowywać nieprzewidywalnie.</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_duration\">Długość migania</string>\n    <string name=\"pref_flash_with\">Miganie na</string>\n    <string name=\"pref_flash_style_white_black\">Biały i czarny</string>\n    <string name=\"pref_flash_style_black\">Czarny</string>\n    <string name=\"pref_flash_style_white\">Biały</string>\n    <string name=\"manga_interval_expected_update_null\">Ta manga jest zakończona lub nie ma przewidywanej daty wydania.</string>\n    <string name=\"pref_flash_page_interval\">Migaj co</string>\n    <string name=\"pref_display_profile\">Niestandardowy profil</string>\n    <string name=\"invalid_backup_file_unknown\">Plik kopii zapasowej jest uszkodzony</string>\n    <string name=\"onboarding_permission_analytics_description\">Wysyłaj zanonimizowane dane użytkowania aplikacji w celu ulepszenia jej funkcjonalności.</string>\n    <string name=\"action_copy_link\">Skopiuj link</string>\n    <string name=\"action_sort_random\">Losowo</string>\n    <string name=\"onboarding_permission_crashlytics\">Wyślij dziennik awarii</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Wyślij zanonimizowny dziennik awarii do deweloperów.</string>\n    <string name=\"onboarding_permission_analytics\">Zezwól na analizę danych</string>\n    <string name=\"pref_security\">Bezpieczeństwo i prywatność</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aktualizuj postęp po oznaczeniu jako przeczytane</string>\n    <string name=\"extensionRepo_settings\">Repozytoria rozszerzeń</string>\n    <string name=\"pref_firebase\">Dane użytkownika i dzienniki awarii</string>\n    <string name=\"ext_remove\">Usuń</string>\n    <string name=\"ext_confirm_remove\">Usunąć Rozszerzenie?</string>\n    <string name=\"remove_private_extension_message\">Czy na pewno chcesz usunąć rozszerzenie \\\"%s\\\"?</string>\n    <string name=\"add_repo_confirmation\">Czy chciałbyś dodać to repozytorium \\\"%s\\\"?</string>\n    <string name=\"firebase_summary\">Przesyłanie dzienników awarii i danych użytkowania pozwoli nam na zidentyfikowanie i naprawę błędów, poprawę wydajności oraz dopasowanie przyszłych wersji aplikacji do twoich potrzeb</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Domyślne (%d)</string>\n    <string name=\"trackers_updated_summary\">Śledzenie zaktualizowane do rozdziału %d</string>\n    <string name=\"non_library_settings\">Wszystkie przeczytane wpisy</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Jeżeli czytnik załaduje pusty obraz, stopniowo zmniejszaj zakres graniczny.\\nWybrany: %s</string>\n    <string name=\"confirm_tracker_update\">Zaktualizować śledzenie do rozdziału %d?</string>\n    <string name=\"action_replace_repo_title\">Identyfikator Klucza Certyfikatu już istnieje</string>\n    <string name=\"upcoming_guide\">Przewodnik nadchodzących aktualizacji</string>\n    <string name=\"action_replace_repo_message\">Repozytorium %1$s posiada taki sam identyfikator certyfikatu jak %2$s.\\nJeżeli było to przewidziane, %2$s zostanie zastąpione, w przeciwnym wypadku skontaktuj się z z osobą utrzymującą repozytorium.</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Pomiń pobieranie duplikatów przeczytanych już rozdziałów</string>\n    <string name=\"invalid_backup_file_json\">Kopia zapasowa JSON nie jest wspierana</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Niestandardowy zakres graniczny bitmapy dla urządzenia</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Wpływa na wydajność. Włącz tylko wtedy, gdy zmniejszenie zakresu granicznego bitmapy nie pomaga przy naprawie nieładujących się obrazów</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Wstrzymaj historię dla rozszerzenia</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/pt/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Após %1$s minuto</item>\n        <item quantity=\"many\">Após %1$s minutos</item>\n        <item quantity=\"other\">Após %1$s minutos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capítulos %1$s e 1 mais</item>\n        <item quantity=\"many\">Capítulos %1$s e %2$d mais</item>\n        <item quantity=\"other\">Capítulos %1$s e %2$d mais</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Para %d entrada</item>\n        <item quantity=\"many\">Para %d entradas</item>\n        <item quantity=\"other\">Para %d o acesso</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d novo capítulo</item>\n        <item quantity=\"many\">%1$d novos capítulos</item>\n        <item quantity=\"other\">%1$d novos capítulos</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Atualização de extensão disponível</item>\n        <item quantity=\"many\">%d atualizações de extensão disponíveis</item>\n        <item quantity=\"other\">%d atualizações de extensão disponíveis</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s restante</item>\n        <item quantity=\"many\">%1$s restantes</item>\n        <item quantity=\"other\">%1$s restantes</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoria</item>\n        <item quantity=\"many\">%d categorias</item>\n        <item quantity=\"other\">%d categorias</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Concluído em %1$s com %2$s erro</item>\n        <item quantity=\"many\">Concluído em %1$s com %2$s erros</item>\n        <item quantity=\"other\">Concluído em %1$s com %2$s erros</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capítulo</item>\n        <item quantity=\"many\">%1$s capítulos</item>\n        <item quantity=\"other\">%1$s capítulos</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d rastreador</item>\n        <item quantity=\"many\">%d rastreadores</item>\n        <item quantity=\"other\">%d rastreadores</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Ignorando %d capítulo, ou a fonte está em falta ou foi filtrado</item>\n        <item quantity=\"many\">Ignorando %d capítulos, ou a fonte está em falta ou foi filtrado</item>\n        <item quantity=\"other\">Capítulos %d ignorados, ou a fonte está em falta ou foi filtrado</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ontem</item>\n        <item quantity=\"many\">Há %1$d dias</item>\n        <item quantity=\"other\">Há %1$d dias</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Próximo capítulo não lido</item>\n        <item quantity=\"many\">Próximos %d capítulos não lidos</item>\n        <item quantity=\"other\">Próximos %d capítulos não lidos</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Próximo capítulo</item>\n        <item quantity=\"many\">Próximos %d capítulos</item>\n        <item quantity=\"other\">Próximos %d capítulos</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Falta %1$s capítulo</item>\n        <item quantity=\"many\">Faltam %1$s capítulos</item>\n        <item quantity=\"other\">Faltam %1$s capítulos</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">Um dia</item>\n        <item quantity=\"many\">%d dias</item>\n        <item quantity=\"other\">%d dias</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repositório</item>\n        <item quantity=\"many\">%d repositórios</item>\n        <item quantity=\"other\">%d repositórios</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/pt/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nome</string>\n    <string name=\"label_settings\">Definições</string>\n    <string name=\"label_download_queue\">Fila de Transferências</string>\n    <string name=\"label_library\">Biblioteca</string>\n    <string name=\"label_recent_manga\">Histórico</string>\n    <string name=\"label_recent_updates\">Atualizações</string>\n    <string name=\"label_backup\">Cópia de segurança e restauração</string>\n    <string name=\"action_settings\">Definições</string>\n    <string name=\"action_filter\">Filtro</string>\n    <string name=\"action_filter_unread\">Não Lido</string>\n    <string name=\"action_filter_empty\">Remover filtro</string>\n    <string name=\"action_search\">Procurar</string>\n    <string name=\"action_select_all\">Selecionar tudo</string>\n    <string name=\"action_mark_as_read\">Marcar como lido</string>\n    <string name=\"action_mark_as_unread\">Marcar como não lido</string>\n    <string name=\"action_mark_previous_as_read\">Marcar anteriores como lidos</string>\n    <string name=\"action_download\">Transferir</string>\n    <string name=\"action_delete\">Eliminar</string>\n    <string name=\"action_update_library\">Atualizar biblioteca</string>\n    <string name=\"action_edit\">Editar</string>\n    <string name=\"action_add_category\">Adicionar categoria</string>\n    <string name=\"action_edit_categories\">Editar categorias</string>\n    <string name=\"action_rename_category\">Renomear categoria</string>\n    <string name=\"action_move_category\">Definir categorias</string>\n    <string name=\"action_edit_cover\">Alterar capa</string>\n    <string name=\"action_pause\">Pausar</string>\n    <string name=\"action_previous_chapter\">Capítulo anterior</string>\n    <string name=\"action_next_chapter\">Capítulo seguinte</string>\n    <string name=\"action_retry\">Tentar novamente</string>\n    <string name=\"action_remove\">Remover</string>\n    <string name=\"action_resume\">Resumir</string>\n    <string name=\"action_open_in_browser\">Abrir no navegador</string>\n    <string name=\"action_display_mode\">Modo de visualização</string>\n    <string name=\"action_cancel\">Cancelar</string>\n    <string name=\"action_sort\">Ordenar</string>\n    <string name=\"action_install\">Instalar</string>\n    <string name=\"loading\">A carregar…</string>\n    <string name=\"pref_category_general\">Geral</string>\n    <string name=\"pref_category_reader\">Leitor</string>\n    <string name=\"pref_category_downloads\">Transferências</string>\n    <string name=\"pref_category_advanced\">Avançado</string>\n    <string name=\"pref_category_about\">Sobre</string>\n    <string name=\"pref_library_columns\">Tamanho da grade</string>\n    <string name=\"portrait\">Vertical</string>\n    <string name=\"landscape\">Horizontal</string>\n    <string name=\"pref_library_update_interval\">Atualizações automáticas</string>\n    <string name=\"update_never\">Desligado</string>\n    <string name=\"update_6hour\">A cada 6 horas</string>\n    <string name=\"update_12hour\">A cada 12 horas</string>\n    <string name=\"update_24hour\">Diariamente</string>\n    <string name=\"update_48hour\">A cada 2 dias</string>\n    <string name=\"all\">Tudo</string>\n    <string name=\"pref_library_update_restriction\">Restrições do aparelho para atualizações automáticas</string>\n    <string name=\"charging\">Ao carregar</string>\n    <string name=\"pref_update_only_non_completed\">Com estado \\'\\'Terminado\\'\\'</string>\n    <string name=\"pref_auto_update_manga_sync\">Atualizar progresso após a leitura</string>\n    <string name=\"pref_fullscreen\">Ecrã inteiro</string>\n    <string name=\"pref_page_transitions\">Animar transições de página</string>\n    <string name=\"pref_show_page_number\">Mostrar número de página</string>\n    <string name=\"pref_custom_brightness\">Brilho personalizado</string>\n    <string name=\"pref_keep_screen_on\">Manter o ecrã ligado</string>\n    <string name=\"pref_reader_navigation\">Navegação</string>\n    <string name=\"pref_read_with_volume_keys\">Teclas de volume</string>\n    <string name=\"pref_reader_theme\">Cor de fundo</string>\n    <string name=\"white_background\">Branco</string>\n    <string name=\"black_background\">Preto</string>\n    <string name=\"pref_viewer_type\">Modo de leitura padrão</string>\n    <string name=\"left_to_right_viewer\">Paginado (da esquerda para a direita)</string>\n    <string name=\"right_to_left_viewer\">Paginado (da direita para a esquerda)</string>\n    <string name=\"vertical_viewer\">Paginação (vertical)</string>\n    <string name=\"webtoon_viewer\">Página longa</string>\n    <string name=\"pref_image_scale_type\">Tipo de escala</string>\n    <string name=\"scale_type_fit_screen\">Ajustar ao ecrã</string>\n    <string name=\"scale_type_stretch\">Esticar</string>\n    <string name=\"scale_type_fit_width\">Ajustar à largura</string>\n    <string name=\"scale_type_fit_height\">Ajustar à altura</string>\n    <string name=\"scale_type_original_size\">Tamanho original</string>\n    <string name=\"scale_type_smart_fit\">Ajuste inteligente</string>\n    <string name=\"pref_zoom_start\">Posição de zoom inicial</string>\n    <string name=\"zoom_start_automatic\">Automático</string>\n    <string name=\"zoom_start_left\">Esquerda</string>\n    <string name=\"zoom_start_right\">Direita</string>\n    <string name=\"zoom_start_center\">Centro</string>\n    <string name=\"pref_rotation_type\">Tipo de rotação padrão</string>\n    <string name=\"rotation_free\">Livre</string>\n    <string name=\"rotation_force_portrait\">Vertical bloqueado</string>\n    <string name=\"rotation_force_landscape\">Horizontal bloqueado</string>\n    <string name=\"pref_remove_after_marked_as_read\">Após marcado como lido manualmente</string>\n    <string name=\"pref_remove_after_read\">Eliminar automaticamente após a leitura</string>\n    <string name=\"disabled\">Desativado</string>\n    <string name=\"last_read_chapter\">Último capítulo</string>\n    <string name=\"second_to_last\">Penúltimo capítulo lido</string>\n    <string name=\"third_to_last\">Antepenúltimo capítulo lido</string>\n    <string name=\"fourth_to_last\">Quarto capítulo lido antes do último</string>\n    <string name=\"fifth_to_last\">Quinto capítulo lido antes do último</string>\n    <string name=\"services\">Serviços</string>\n    <string name=\"pref_clear_chapter_cache\">Limpar a cache dos capítulos</string>\n    <string name=\"used_cache\">Usado: %1$s</string>\n    <string name=\"cache_deleted\">Cache limpa. %1$d ficheiros foram eliminados</string>\n    <string name=\"cache_delete_error\">Ocorreu um erro ao limpar a cache</string>\n    <string name=\"pref_clear_cookies\">Limpar cookies</string>\n    <string name=\"cookies_cleared\">Cookies limpos</string>\n    <string name=\"pref_clear_database\">Limpar base de dados</string>\n    <string name=\"pref_clear_database_summary\">Exclui o histórico de itens que não estão salvos nasua biblioteca</string>\n    <string name=\"clear_database_confirmation\">Tem certeza? Os capítulos lidos e o progresso em itens que não estão na sua biblioteca serão perdidos</string>\n    <string name=\"clear_database_completed\">Eliminar entradas</string>\n    <string name=\"version\">Versão</string>\n    <string name=\"pref_enable_acra\">Enviar relatórios de erro</string>\n    <string name=\"pref_acra_summary\">Ajuda a corrigir qualquer erro. Não serão enviados dados sensíveis</string>\n    <string name=\"login_title\">Iniciar sessão em %1$s</string>\n    <string name=\"username\">Nome de utilizador</string>\n    <string name=\"password\">Palavra-passe</string>\n    <string name=\"login\">Iniciar sessão</string>\n    <string name=\"login_success\">Sessão iniciada</string>\n    <string name=\"unknown_error\">Erro desconhecido</string>\n    <string name=\"updating_category\">A atualizar categoria</string>\n    <string name=\"ongoing\">Em curso</string>\n    <string name=\"unknown\">Desconhecido</string>\n    <string name=\"licensed\">Licenciado</string>\n    <string name=\"remove_from_library\">Remover da biblioteca</string>\n    <string name=\"display_mode_chapter\">Capítulo %1$s</string>\n    <string name=\"chapter_downloading_progress\">A Transferir (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Erro</string>\n    <string name=\"show_title\">Título da fonte</string>\n    <string name=\"show_chapter_number\">Número do capítulo</string>\n    <string name=\"sort_by_source\">Por fonte</string>\n    <string name=\"sort_by_number\">Por número de capítulo</string>\n    <string name=\"manga_download\">Transferir</string>\n    <string name=\"download_unread\">Não lidos</string>\n    <string name=\"confirm_delete_chapters\">Tem certeza de que deseja eliminar os capítulos selecionados?</string>\n    <string name=\"reading\">A ler</string>\n    <string name=\"completed\">Completo</string>\n    <string name=\"dropped\">Abandonado</string>\n    <string name=\"on_hold\">Em espera</string>\n    <string name=\"plan_to_read\">Planeada a leitura</string>\n    <string name=\"score\">Avaliação</string>\n    <string name=\"title\">Título</string>\n    <string name=\"status\">Estado</string>\n    <string name=\"chapters\">Capítulos</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Esta ação irá remover a data de leitura deste capítulo. Continuar?</string>\n    <string name=\"dialog_with_checkbox_reset\">Redefinir todos os capítulos para esta entrada</string>\n    <string name=\"chapter_progress\">Página: %1$d</string>\n    <string name=\"no_next_chapter\">Capítulo seguinte não encontrado</string>\n    <string name=\"decode_image_error\">A imagem não pôde ser carregada</string>\n    <string name=\"download_queue_error\">Não foi possível transferir capítulos. Poderá tentar novamente na secção das transferências</string>\n    <string name=\"notification_new_chapters\">Novos capítulos encontrados</string>\n    <string name=\"notification_first_add_to_library\">Por favor adicione à sua biblioteca antes de fazer isto</string>\n    <string name=\"file_select_cover\">Selecionar imagem de capa</string>\n    <string name=\"file_select_backup\">Selecionar ficheiro de cópia de segurança</string>\n    <string name=\"update_check_confirm\">Transferir</string>\n    <string name=\"update_check_no_new_updates\">Sem atualizações disponíveis</string>\n    <string name=\"update_check_notification_download_in_progress\">A transferir…</string>\n    <string name=\"update_check_notification_download_complete\">Toque para instalar a atualização</string>\n    <string name=\"update_check_notification_download_error\">Erro na transferência</string>\n    <string name=\"update_check_notification_update_available\">Nova versão disponível!</string>\n    <string name=\"information_no_downloads\">Sem transferências</string>\n    <string name=\"information_no_recent\">Sem atualizações recentes</string>\n    <string name=\"information_no_recent_manga\">Nada lido recentemente</string>\n    <string name=\"information_empty_library\">A sua biblioteca está vazia</string>\n    <string name=\"download_notifier_title_error\">Erro</string>\n    <string name=\"download_notifier_unknown_error\">Não foi possível transferir o capítulo devido a um erro inesperado</string>\n    <string name=\"download_notifier_text_only_wifi\">A ligação Wi-Fi está indisponível</string>\n    <string name=\"categories\">Categorias</string>\n    <string name=\"manga\">Itens da biblioteca</string>\n    <string name=\"track\">Monitorização</string>\n    <string name=\"history\">Histórico</string>\n    <string name=\"label_extensions\">Extensões</string>\n    <string name=\"label_extension_info\">Info. da extensão</string>\n    <string name=\"action_filter_bookmarked\">Marcado</string>\n    <string name=\"action_sort_alpha\">Alfabeticamente</string>\n    <string name=\"action_sort_total\">Total de capítulos</string>\n    <string name=\"action_sort_last_read\">Última leitura</string>\n    <string name=\"action_global_search\">Procura geral</string>\n    <string name=\"action_bookmark\">Marcar capítulo</string>\n    <string name=\"action_remove_bookmark\">Desmarcar capítulo</string>\n    <string name=\"action_add\">Adicionar</string>\n    <string name=\"action_display\">Mostrar</string>\n    <string name=\"action_display_grid\">Grelha compacta</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_share\">Partilhar</string>\n    <string name=\"action_save\">Guardar</string>\n    <string name=\"action_undo\">Anular</string>\n    <string name=\"update_weekly\">Semanalmente</string>\n    <string name=\"action_restore\">Restaurar</string>\n    <string name=\"app_not_available\">App não disponível</string>\n    <string name=\"default_category\">Categoria padrão</string>\n    <string name=\"default_category_summary\">Perguntar sempre</string>\n    <string name=\"ext_update\">Atualizar</string>\n    <string name=\"ext_install\">Instalar</string>\n    <string name=\"ext_pending\">Pendente</string>\n    <string name=\"ext_downloading\">A transferir</string>\n    <string name=\"ext_installing\">A instalar</string>\n    <string name=\"ext_installed\">Instalado</string>\n    <string name=\"ext_uninstall\">Desinstalar</string>\n    <string name=\"untrusted_extension\">Extensão não confiável</string>\n    <string name=\"untrusted_extension_message\">Esta extensão possui um certificado não confiável e não foi ativada.\n\\n\n\\nUma extensão maliciosa podia ler qualquer credencial de entrada armazenada no Mihon ou executar código arbitrário.\n\\n\n\\nAo confiar neste certificado serão aceites estes riscos.</string>\n    <string name=\"pref_crop_borders\">Cortar bordas</string>\n    <string name=\"pref_custom_color_filter\">Filtro de cor personalizado</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverter teclas de volume</string>\n    <string name=\"double_tap_anim_speed_0\">Sem animação</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Rápido</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_download_new\">Transferir novos capítulos</string>\n    <string name=\"pref_create_backup\">Criar cópia de segurança</string>\n    <string name=\"pref_create_backup_summ\">Pode ser usado para restaurar a biblioteca atual</string>\n    <string name=\"pref_restore_backup\">Restaurar cópia de segurança</string>\n    <string name=\"pref_restore_backup_summ\">Restaurar biblioteca a partir de cópia de segurança</string>\n    <string name=\"pref_backup_interval\">Frequência de cópia de segurança</string>\n    <string name=\"restoring_backup\">Restaurando cópia de segurança</string>\n    <string name=\"creating_backup\">Criando cópia de segurança</string>\n    <string name=\"label_migration\">Migrar</string>\n    <string name=\"action_reset\">Reiniciar</string>\n    <string name=\"action_open_log\">Abrir registo</string>\n    <string name=\"pref_category_tracking\">Listas</string>\n    <string name=\"pref_double_tap_anim_speed\">Velocidade de animação de toque duplo</string>\n    <string name=\"pager_viewer\">Paginação</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"backup_created\">Cópia de segurança criada</string>\n    <string name=\"restore_completed\">Restauro completo</string>\n    <string name=\"backup_choice\">O que pretende fazer cópia de segurança?</string>\n    <string name=\"action_display_download_badge\">Capítulos transferidos</string>\n    <string name=\"ext_trust\">Confiar</string>\n    <string name=\"ext_untrusted\">Não confiável</string>\n    <string name=\"pref_read_with_long_tap\">Mostrar com toque longo</string>\n    <string name=\"action_open_in_web_view\">Abrir em WebView</string>\n    <string name=\"pref_skip_read_chapters\">Ignorar capítulos marcados como lido</string>\n    <string name=\"no_more_results\">Sem mais resultados</string>\n    <string name=\"local_source\">Fonte local</string>\n    <string name=\"other_source\">Outras</string>\n    <string name=\"action_global_search_hint\">Pesquisa global…</string>\n    <string name=\"latest\">Mais recente</string>\n    <string name=\"browse\">Navegar</string>\n    <string name=\"manga_added_library\">Adicionado à biblioteca</string>\n    <string name=\"manga_removed_library\">Removido da biblioteca</string>\n    <string name=\"delete_downloads_for_manga\">Eliminar capítulos descarregados?</string>\n    <string name=\"copied_to_clipboard\">Copiado para área de transferência:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Fonte não instalada: %1$s</string>\n    <string name=\"chapter_paused\">Pausado</string>\n    <string name=\"manga_tracking_tab\">Monitorização</string>\n    <string name=\"repeating\">Relendo</string>\n    <string name=\"track_status\">Estado</string>\n    <string name=\"track_type\">Tipo</string>\n    <string name=\"error_category_exists\">Já existe uma categoria com este nome!</string>\n    <string name=\"snack_categories_deleted\">Categorias eliminadas</string>\n    <string name=\"snack_add_to_library\">Adicionar à biblioteca?</string>\n    <string name=\"picture_saved\">Imagem guardada</string>\n    <string name=\"custom_filter\">Filtro personalizado</string>\n    <string name=\"set_as_cover\">Usar como capa</string>\n    <string name=\"cover_updated\">Capa atualizada</string>\n    <string name=\"confirm_set_image_as_cover\">Usar esta imagem como capa?</string>\n    <string name=\"transition_finished\">Concluído:</string>\n    <string name=\"transition_current\">Atual:</string>\n    <string name=\"transition_next\">Próximo:</string>\n    <string name=\"transition_previous\">Anterior:</string>\n    <string name=\"transition_no_next\">Não há próximo capítulo</string>\n    <string name=\"transition_no_previous\">Não há capítulo anterior</string>\n    <string name=\"transition_pages_loading\">A carregar páginas…</string>\n    <string name=\"transition_pages_error\">Falha ao carregar páginas: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Selecione dados para incluir</string>\n    <string name=\"migrate\">Migrar</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"notification_cover_update_failed\">Falha ao atualizar a capa</string>\n    <string name=\"information_empty_category\">Não tem nenhuma categoria. Toque no botão (+) para criar uma e organizar a sua biblioteca.</string>\n    <string name=\"download_notifier_downloader_title\">Gestor de transferências</string>\n    <string name=\"download_notifier_no_network\">A ligação à rede está indisponível</string>\n    <string name=\"download_notifier_download_paused\">Transferências em pausa</string>\n    <string name=\"channel_common\">Comum</string>\n    <string name=\"filter_mode_overlay\">Sobrepor</string>\n    <string name=\"filter_mode_multiply\">Multiplicação</string>\n    <string name=\"filter_mode_screen\">Divisão</string>\n    <string name=\"filter_mode_darken\">Super-exposição / Escurecer</string>\n    <string name=\"pref_color_filter_mode\">Modo de mistura do filtro de cores</string>\n    <string name=\"filter_mode_lighten\">Sub-exposição / Clarear</string>\n    <string name=\"label_help\">Ajuda</string>\n    <string name=\"no_results_found\">Nenhum resultado encontrado</string>\n    <string name=\"migration_selection_prompt\">Selecione uma fonte da qual migrar</string>\n    <string name=\"action_webview_back\">Voltar</string>\n    <string name=\"action_webview_forward\">Avançar</string>\n    <string name=\"action_webview_refresh\">Recarregar</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"ext_obsolete\">Obsoleto</string>\n    <string name=\"obsolete_extension_message\">Esta extensão não está mais disponível. Ela pode não funcionar corretamente e pode causar problemas na app. É recomendado desinstalá-la.</string>\n    <string name=\"pref_date_format\">Formato da data</string>\n    <string name=\"pref_category_library_update\">Atualização global</string>\n    <string name=\"logout_title\">Terminar sessão em %1$s?</string>\n    <string name=\"logout\">Terminar sessão</string>\n    <string name=\"logout_success\">Sua sessão está agora encerrada</string>\n    <string name=\"paused\">Pausado</string>\n    <string name=\"label_more\">Mais</string>\n    <string name=\"action_sort_latest_chapter\">Último capítulo</string>\n    <string name=\"action_view_chapters\">Ver capítulos</string>\n    <string name=\"action_cancel_all\">Cancelar tudo</string>\n    <string name=\"theme_light\">Desligado</string>\n    <string name=\"theme_dark\">Ligado</string>\n    <string name=\"theme_system\">Seguir o do sistema</string>\n    <string name=\"pref_manage_notifications\">Gerir notificações</string>\n    <string name=\"pref_category_security\">Segurança e privacidade.</string>\n    <string name=\"lock_with_biometrics\">Requerer desbloqueio</string>\n    <string name=\"lock_when_idle\">Bloquear quando inativo</string>\n    <string name=\"lock_always\">Sempre</string>\n    <string name=\"lock_never\">Nunca</string>\n    <string name=\"secure_screen\">Ecrã seguro</string>\n    <string name=\"ext_updates_pending\">Atualizações pendentes</string>\n    <string name=\"pref_cutout_short\">Mostrar conteúdo na área de corte</string>\n    <string name=\"information_cloudflare_bypass_failure\">Falha ao contornar o Cloudflare</string>\n    <string name=\"information_webview_outdated\">Por favor, atualize a app de WebView para melhor compatibilidade</string>\n    <string name=\"channel_new_chapters\">Atualizações de capítulos</string>\n    <string name=\"secure_screen_summary\">Ecrã seguro esconde os conteúdos da app durante a troca de apps e impedir capturas de ecrã</string>\n    <string name=\"pref_category_display\">Visualização</string>\n    <string name=\"notification_chapters_single_and_more\">Capítulo %1$s e %2$d mais</string>\n    <string name=\"notification_chapters_multiple\">Capítulos %1$s</string>\n    <string name=\"hide_notification_content\">Esconder conteúdo das notificações</string>\n    <string name=\"pref_disable_battery_optimization\">Desativar otimização de bateria</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Ajuda com a atualização e cópia de segurança da biblioteca em segundo plano</string>\n    <string name=\"battery_optimization_disabled\">A otimização de bateria já está desativada</string>\n    <string name=\"email\">Endereço de e-mail</string>\n    <string name=\"pref_always_show_chapter_transition\">Mostrar sempre transição entre capítulos</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_newest\">Mais novos</string>\n    <string name=\"action_oldest\">Mais antigos</string>\n    <string name=\"action_move_to_top\">Mover para o topo</string>\n    <string name=\"action_move_to_bottom\">Mover para o final</string>\n    <string name=\"notification_chapters_single\">Capítulo %1$s</string>\n    <string name=\"channel_ext_updates\">Atualizações de extensão</string>\n    <string name=\"updating_library\">Atualizando biblioteca</string>\n    <string name=\"pinned_sources\">Fixado</string>\n    <string name=\"pref_webtoon_side_padding\">Preenchimento lateral</string>\n    <string name=\"pref_category_reading\">Lendo</string>\n    <string name=\"vertical_plus_viewer\">Página longa com espaços</string>\n    <string name=\"pref_skip_filtered_chapters\">Ignorar capítulos filtrados</string>\n    <string name=\"action_unpin\">Desafixar</string>\n    <string name=\"action_pin\">Fixar</string>\n    <string name=\"action_select_inverse\">Seleção inversa</string>\n    <string name=\"label_sources\">Fontes</string>\n    <string name=\"website\">Sítio Web</string>\n    <string name=\"restoring_backup_canceled\">Restauro cancelado</string>\n    <string name=\"restoring_backup_error\">Restauro da cópia de segurança falhou</string>\n    <string name=\"restore_in_progress\">Restauro já em progresso</string>\n    <string name=\"creating_backup_error\">Cópia de segurança falhou</string>\n    <string name=\"backup_in_progress\">Cópia de segurança já em progresso</string>\n    <string name=\"label_downloaded_only\">Apenas transferidos</string>\n    <string name=\"information_webview_required\">WebView é necessária para Mihon</string>\n    <string name=\"recent_manga_time\">Cap. %1$s - %2$s</string>\n    <string name=\"add_tracking\">Adicionar à monitorização</string>\n    <string name=\"manga_info_collapse\">Menos</string>\n    <string name=\"manga_info_expand\">Mais</string>\n    <string name=\"in_library\">Na biblioteca</string>\n    <string name=\"add_to_library\">Adicionar à biblioteca</string>\n    <string name=\"local_source_help_guide\">Guia de fonte local</string>\n    <string name=\"last_used_source\">Último usado</string>\n    <string name=\"check_for_updates\">Verificar por atualizações</string>\n    <string name=\"licenses\">Licenças de código aberto</string>\n    <string name=\"downloaded_only_summary\">Filtra todos os itens nasua biblioteca</string>\n    <string name=\"restore_duration\">%02d min, %02d seg</string>\n    <string name=\"gray_background\">Cinza</string>\n    <string name=\"viewer\">Modo de leitura</string>\n    <string name=\"pref_category_for_this_series\">Para esta série</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Não foi possível abrir as definições do aparelho</string>\n    <string name=\"pref_refresh_library_covers\">Atualizar capas da biblioteca</string>\n    <string name=\"tracking_info\">Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços de monitoramento. Configure o monitoramento para itens individuais a partir dos botões de monitoramento deles.</string>\n    <string name=\"pref_show_reading_mode_summary\">Mostra brevemente o modo atual quando o leitor é aberto</string>\n    <string name=\"page_list_empty_error\">Nenhuma página encontrada</string>\n    <string name=\"sort_by_upload_date\">Por data de envio</string>\n    <string name=\"tabs_header\">Abas</string>\n    <string name=\"label_data\">Dados</string>\n    <string name=\"backup_restore_missing_sources\">Fontes em falta:</string>\n    <string name=\"invalid_backup_file_missing_manga\">O backup não possui nenhum item da biblioteca.</string>\n    <string name=\"invalid_backup_file\">Ficheiro de cópia de segurança invalido</string>\n    <string name=\"pref_show_reading_mode\">Mostrar modo de leitura</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Procurar nova capa e detalhes quando a biblioteca atualizar</string>\n    <string name=\"pref_library_update_refresh_metadata\">Atualizar automaticamente os metadados</string>\n    <string name=\"action_display_show_tabs\">Mostrar abas de categoria</string>\n    <string name=\"action_display_comfortable_grid\">Grelha confortável</string>\n    <string name=\"action_migrate\">Migrar</string>\n    <string name=\"action_disable_all\">Desativar todas</string>\n    <string name=\"action_enable_all\">Ativar todas</string>\n    <string name=\"action_start\">Iniciar</string>\n    <string name=\"action_disable\">Desativar</string>\n    <string name=\"tapping_inverted_both\">Ambos</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"tapping_inverted_none\">Nenhum</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverter zonas toque</string>\n    <string name=\"loader_not_implemented_error\">Fonte não encontrada</string>\n    <string name=\"unknown_status\">Estado desconhecido</string>\n    <string name=\"unknown_author\">Autor desconhecido</string>\n    <string name=\"requires_app_restart\">Requer reinício da app para ter efeito</string>\n    <string name=\"label_network\">Rede</string>\n    <string name=\"updated_version\">Atualizado para v%1$s</string>\n    <string name=\"whats_new\">Novidades</string>\n    <string name=\"download_insufficient_space\">Não foi possível transferir capítulos devido a falta de espaço de armazenamento</string>\n    <string name=\"action_global_search_query\">Procurar por \\\"%1$s\\\" globalmente</string>\n    <string name=\"pref_category_reading_mode\">Modo de leitura</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Data de adição</string>\n    <string name=\"no_pinned_sources\">Você não possui fontes fixadas</string>\n    <string name=\"channel_complete\">Completo</string>\n    <string name=\"channel_progress\">Progresso</string>\n    <string name=\"channel_errors\">Erros</string>\n    <string name=\"backup_restore_missing_trackers\">Monitorizadores sem sessão iniciada:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir a eliminação de capítulos marcados</string>\n    <string name=\"pref_category_delete_chapters\">Eliminar capítulos</string>\n    <string name=\"ext_nsfw_warning\">Fontes desta extensão poderão conter conteúdo NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Isto não impede extensões não oficiais ou incorretamente marcadas de mostrarem conteúdo NSFW (18+) dentro da app.</string>\n    <string name=\"no_chapters_error\">Nenhum capítulo encontrado</string>\n    <string name=\"chapter_settings_updated\">Definições padrão de capítulo atualizadas</string>\n    <string name=\"confirm_set_chapter_settings\">Tem certeza de que quer guardar estas definições como padrão?</string>\n    <string name=\"chapter_settings\">Definições dos capítulos</string>\n    <string name=\"share_page_info\">%1$s: %2$s, página %3$d</string>\n    <string name=\"set_chapter_settings_as_default\">Definir como padrão</string>\n    <string name=\"also_set_chapter_settings_for_library\">Também aplicar a todos os itens na minha biblioteca</string>\n    <string name=\"action_search_settings\">Definições de pesquisa</string>\n    <string name=\"downloaded_chapters\">Capítulos descarregados</string>\n    <string name=\"manga_from_library\">Da biblioteca</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa histórico de leitura</string>\n    <string name=\"pref_incognito_mode\">Modo incógnito</string>\n    <string name=\"pref_clear_history\">Eliminar histórico</string>\n    <string name=\"clear_history_confirmation\">Tem a certeza? Todo o histórico será perdido.</string>\n    <string name=\"clear_history_completed\">Histórico eliminado</string>\n    <string name=\"pref_category_nsfw_content\">Conteúdo 18+ (NSFW)</string>\n    <string name=\"spen_next_page\">Página seguinte</string>\n    <string name=\"spen_previous_page\">Página anterior</string>\n    <string name=\"migration_help_guide\">Guia de migração de fonte</string>\n    <string name=\"file_picker_error\">Não foi encontrada nenhuma app de seleção de ficheiros</string>\n    <string name=\"myanimelist_relogin\">Por favor inicie sessão no MAL novamente</string>\n    <string name=\"pref_show_nsfw_source\">Mostrar na lista de fontes e extensões</string>\n    <string name=\"pref_viewer_nav\">Zonas de toque</string>\n    <string name=\"kindlish_nav\">Estilo Kindle</string>\n    <string name=\"l_nav\">Em forma de L</string>\n    <string name=\"action_desc\">Descendente</string>\n    <string name=\"action_asc\">Ascendente</string>\n    <string name=\"action_order_by_chapter_number\">Por número do capítulo</string>\n    <string name=\"action_order_by_upload_date\">Por data de envio</string>\n    <string name=\"action_filter_tracked\">Monitorizado</string>\n    <string name=\"edge_nav\">Borda</string>\n    <string name=\"track_finished_reading_date\">Data de conclusão</string>\n    <string name=\"track_started_reading_date\">Data de início</string>\n    <string name=\"pref_dump_crash_logs\">Compartilhar registros de falha</string>\n    <string name=\"pref_dump_crash_logs_summary\">Guarda registos de erros num ficheiro para partilhar com os desenvolvedores</string>\n    <string name=\"action_display_show_number_of_items\">Mostrar número de itens</string>\n    <string name=\"right_and_left_nav\">Direita e Esquerda</string>\n    <string name=\"pref_dual_page_split\">Dividir as páginas longas</string>\n    <string name=\"pref_dual_page_invert_summary\">Se a posição das páginas longas divididas não se adequar ao modo de leitura</string>\n    <string name=\"pref_dual_page_invert\">Inverter a posição das páginas divididas</string>\n    <string name=\"backup_restore_content_full\">Os dados da cópia de segurança serão restaurados.\n\\n\n\\nPrecisa instalar as extensões em falta e depois iniciar sessão nos serviços de monitorização para usá-los.</string>\n    <string name=\"nav_zone_right\">Direita</string>\n    <string name=\"nav_zone_left\">Esquerda</string>\n    <string name=\"nav_zone_next\">Seguinte</string>\n    <string name=\"nav_zone_prev\">Anterior</string>\n    <string name=\"pref_show_navigation_mode_summary\">Brevemente mostrar quando o leitor é aberto</string>\n    <string name=\"pref_show_navigation_mode\">Mostrar sobreposição das zonas de toque</string>\n    <string name=\"none\">Nenhum</string>\n    <string name=\"pref_dns_over_https\">DNS por HTTPS (DoH)</string>\n    <string name=\"pref_category_auto_download\">Transferir automaticamente</string>\n    <string name=\"update_check_eol\">Esta versão do Android não é mais suportada</string>\n    <string name=\"clipboard_copy_error\">Falha ao copiar para a área de transferência</string>\n    <string name=\"pref_download_new_categories_details\">Os itens nas categorias excluídas não serão disponibilizados offline mesmo que eles também estejam nas categorias incluídas.</string>\n    <string name=\"exclude\">Excluir: %s</string>\n    <string name=\"include\">Incluir: %s</string>\n    <string name=\"pref_library_update_categories_details\">Os itens nas categorias excluídas não serão atualizados mesmo que eles também estejam nas categorias incluídas.</string>\n    <string name=\"action_show_errors\">Toque para ver detalhes</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data de procura do capítulo</string>\n    <string name=\"rotation_landscape\">Horizontal</string>\n    <string name=\"rotation_portrait\">Vertical</string>\n    <string name=\"rotation_type\">Tipo de rotação</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Cria as pastas usando os títulos dos itens</string>\n    <string name=\"pref_create_folder_per_manga\">Guarda páginas em pastas separadas</string>\n    <string name=\"pref_reader_actions\">Ações</string>\n    <string name=\"pref_grayscale\">Tons de cinzento</string>\n    <string name=\"date\">Data</string>\n    <string name=\"local_filter_order_by\">Ordenar por</string>\n    <string name=\"local_invalid_format\">Formato de capítulo inválido</string>\n    <string name=\"chapter_not_found\">Capítulo não encontrado</string>\n    <string name=\"automatic_background\">Automático</string>\n    <string name=\"off\">Desligado</string>\n    <string name=\"on\">Ligado</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri de Morango</string>\n    <string name=\"theme_midnightdusk\">Crepúsculo da Meia-Noite</string>\n    <string name=\"theme_greenapple\">Maçã Verde</string>\n    <string name=\"pref_app_theme\">Tema da aplicação</string>\n    <string name=\"action_start_downloading_now\">Começar a transferir agora</string>\n    <string name=\"cancel_all_for_series\">Cancelar tudo para esta série</string>\n    <string name=\"unread\">Não Lido</string>\n    <string name=\"error_sharing_cover\">Erro ao partilhar capa</string>\n    <string name=\"error_saving_cover\">Erro ao guardar capa</string>\n    <string name=\"cover_saved\">Capa guardada</string>\n    <string name=\"manga_cover\">Capa</string>\n    <string name=\"notification_incognito_text\">Desativar o modo incógnito</string>\n    <string name=\"about_dont_kill_my_app\">Alguns fabricantes têm restrições adicionais de aplicação que desligam os serviços em segundo plano. Este sítio web tem mais informações sobre como corrigi-lo.</string>\n    <string name=\"restore_miui_warning\">Restauros de cópias de segurança podem não funcionar corretamente se a otimização MIUI estiver desativada.</string>\n    <string name=\"tracking_guide\">Guia de monitorização</string>\n    <string name=\"categorized_display_settings\">Configurações por categoria para ordenação e exibição</string>\n    <string name=\"restrictions\">Restrições: %s</string>\n    <string name=\"pref_dark_theme_pure_black\">Modo escuro preto puro</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"action_display_local_badge\">Fonte local</string>\n    <string name=\"information_empty_category_dialog\">Ainda não tens nenhuma categoria.</string>\n    <string name=\"error_no_match\">Nenhuma correspondência encontrada</string>\n    <string name=\"source_unsupported\">Fonte não é suportada</string>\n    <string name=\"enhanced_tracking_info\">Serviços que oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados na sua biblioteca.</string>\n    <string name=\"enhanced_services\">Serviços melhorados</string>\n    <string name=\"getting_started_guide\">Guia de introdução</string>\n    <string name=\"theme_tealturquoise\">Azul-petróleo e Turquesa</string>\n    <string name=\"relative_time_today\">Hoje</string>\n    <string name=\"theme_monet\">Dinâmico</string>\n    <string name=\"label_warning\">Aviso</string>\n    <string name=\"confirm_lock_change\">Autentifique-se para confirmar a mudança</string>\n    <string name=\"label_default\">Padrão</string>\n    <string name=\"action_sort_count\">Total de itens</string>\n    <string name=\"action_display_language_badge\">Idioma</string>\n    <string name=\"pref_category_appearance\">Aparência</string>\n    <string name=\"connected_to_wifi\">Só com Wi-Fi</string>\n    <string name=\"update_72hour\">A cada 3 dias</string>\n    <string name=\"ext_update_all\">Atualizar tudo</string>\n    <string name=\"ext_app_info\">Informações da app</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instale e inicie o Shizuku para utilizá-lo como o instalador de extensões.</string>\n    <string name=\"pref_verbose_logging_summary\">Imprimir registos detalhados no registo de eventos do sistema (reduz o desempenho da app)</string>\n    <string name=\"action_track\">Monitorizar</string>\n    <string name=\"save_chapter_as_cbz\">Guardar como ficheiro CBZ</string>\n    <string name=\"clear_database_source_item_count\">%1$d itens que não estão na biblioteca no banco de dados</string>\n    <string name=\"database_clean\">Nada para limpar</string>\n    <string name=\"download_queue_size_warning\">Aviso: downloads grandes em massa podem levar as fontes a ficarem lentas e/ou começarem a bloquear o Mihon. Toque para saber mais.</string>\n    <string name=\"notification_size_warning\">Grandes atualizações prejudicam as fontes e podem levar a atualizações lentas e ainda ao aumento do uso da bateria. Toque para saber mais.</string>\n    <string name=\"library_errors_help\">Para obter ajuda sobre como corrigir erros de atualização da biblioteca, veja %1$s</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Limpar a cache de capítulos ao fechar a app</string>\n    <string name=\"pref_update_only_completely_read\">Com capítulo(s) não lidos</string>\n    <string name=\"pref_hide_threshold\">Sensibilidade para ocultar menu ao deslocar</string>\n    <string name=\"pref_high\">Alta</string>\n    <string name=\"pref_low\">Baixa</string>\n    <string name=\"pref_lowest\">Mais baixa</string>\n    <string name=\"pref_remove_exclude_categories\">Categorias excluídas</string>\n    <string name=\"label_background_activity\">Atividade em segundo plano</string>\n    <string name=\"channel_app_updates\">Atualizações da app</string>\n    <string name=\"pref_inverted_colors\">Invertido</string>\n    <string name=\"backup_info\">Deve manter cópias em outros locais também.</string>\n    <string name=\"pref_tablet_ui_mode\">Interface de tablet</string>\n    <string name=\"pref_verbose_logging\">Registo de eventos detalhado</string>\n    <string name=\"privacy_policy\">Política de privacidade</string>\n    <string name=\"extension_api_error\">Falha ao obter a lista de extensões</string>\n    <string name=\"ext_install_service_notif\">Instalando a extensão…</string>\n    <string name=\"ext_installer_pref\">Instalador</string>\n    <string name=\"ext_installer_legacy\">Legado</string>\n    <string name=\"ext_installer_shizuku_stopped\">O Shizuku não está em execução</string>\n    <string name=\"help_translate\">Ajude a traduzir</string>\n    <string name=\"pref_highest\">Mais alta</string>\n    <string name=\"on_hiatus\">Em hiato</string>\n    <string name=\"publishing_finished\">Publicação concluída</string>\n    <string name=\"cancelled\">Cancelado</string>\n    <string name=\"action_show_manga\">Mostrar o item</string>\n    <string name=\"disabled_nav\">Desativado</string>\n    <string name=\"action_display_cover_only_grid\">Grelha apenas de capas</string>\n    <string name=\"action_close\">Fechar</string>\n    <string name=\"action_move_to_top_all_for_series\">Mover séries para o topo</string>\n    <string name=\"skipped_reason_completed\">Ignorado porque a séria está completa</string>\n    <string name=\"skipped_reason_not_started\">Ignorado porque nenhum capítulo foi lido</string>\n    <string name=\"skipped_reason_not_caught_up\">Ignorado porque existem capítulos não lidos</string>\n    <string name=\"empty_backup_error\">Sem entradas na biblioteca para fazer cópia de segurança</string>\n    <string name=\"pref_update_only_started\">Que não começaram a ser lidos</string>\n    <string name=\"pref_clear_webview_data\">Limpar dados do WebView</string>\n    <string name=\"webview_data_deleted\">Dados do WebView limpos</string>\n    <string name=\"rotation_reverse_portrait\">Vertical invertido</string>\n    <string name=\"source_filter_empty_screen\">Nenhuma fonte instalada encontrada</string>\n    <string name=\"notification_update_error\">%1$d actualização(ões) falhada(s)</string>\n    <string name=\"learn_more\">Toque para saber mais</string>\n    <string name=\"pref_navigate_pan\">Imagens panorâmicas</string>\n    <string name=\"pref_landscape_zoom\">Ampliar imagem horizontal</string>\n    <string name=\"update_check_open\">Abrir no GitHub</string>\n    <string name=\"error_saving_picture\">Erro ao guardar a imagem</string>\n    <string name=\"action_sort_last_manga_update\">Último mangá atualizado</string>\n    <string name=\"action_sort_unread_count\">Contagem de não lidos</string>\n    <string name=\"split_tall_images_summary\">Melhora o desempenho do leitor</string>\n    <string name=\"empty_screen\">Bem, isto é estranho</string>\n    <string name=\"pref_reset_viewer_flags_error\">Não foi possível repor as definições do leitor</string>\n    <string name=\"pref_reset_viewer_flags_success\">Todas as definições do leitor reiniciadas</string>\n    <string name=\"source_empty_screen\">Nenhuma fonte encontrada</string>\n    <string name=\"download_notifier_split_page_not_found\">Página %d não encontrada durante a divisão</string>\n    <string name=\"pref_reset_viewer_flags\">Repor as definições do leitor por série</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Repõe o modo de leitura e orientação de todas as séries</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Não foi possível encontrar o caminho do ficheiro da página %d</string>\n    <string name=\"multi_lang\">Multi</string>\n    <string name=\"auto_download_while_reading\">Transferência automática durante leitura</string>\n    <string name=\"delete_category_confirmation\">Deseja apagar a categoria \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Apagar categoria</string>\n    <string name=\"internal_error\">InternalError: Verifique registos de falhas para mais informações</string>\n    <string name=\"error_user_agent_string_blank\">Cadeia de agente de utilizador não pode estar em branco</string>\n    <string name=\"are_you_sure\">Tem a certeza?</string>\n    <string name=\"updates_last_update_info\">Última atualização da biblioteca: %s</string>\n    <string name=\"appwidget_updates_description\">Veja os seus itens da biblioteca atualizados recentemente</string>\n    <string name=\"remove_manga\">Está prestes a remover \\\"%s\\\" da sua biblioteca</string>\n    <string name=\"download_ahead_info\">Apenas funciona em entradas na biblioteca e se o capítulo atual, mais o próximo, já estiverem transferidos</string>\n    <string name=\"theme_tidalwave\">Maremoto</string>\n    <string name=\"pref_app_language\">Idioma da aplicação</string>\n    <string name=\"ext_info_version\">Versão</string>\n    <string name=\"ext_info_language\">Idioma</string>\n    <string name=\"description_placeholder\">Sem descrição</string>\n    <string name=\"complete_list\">Lista de Completos</string>\n    <string name=\"wish_list\">Lista de Desejos</string>\n    <string name=\"unfinished_list\">Lista de Inacabados</string>\n    <string name=\"update_already_running\">Uma atualização já está a correr</string>\n    <string name=\"appwidget_unavailable_locked\">Widget não disponível quando o bloqueio de aplicações está ativo</string>\n    <string name=\"network_not_metered\">Apenas em redes com tráfego ilimitado</string>\n    <string name=\"download_ahead\">Transferência em antecedência</string>\n    <string name=\"on_hold_list\">Lista dos Em Espera</string>\n    <string name=\"ext_info_age_rating\">Classificação etária</string>\n    <string name=\"pref_reset_user_agent_string\">Redefinir cadeia de agente de utilizador predefinido</string>\n    <string name=\"pref_user_agent_string\">Cadeia de agente de utilizador padrão</string>\n    <string name=\"not_installed\">Não instalado</string>\n    <string name=\"cant_open_last_read_chapter\">Incapaz de abrir último capítulo lido</string>\n    <string name=\"custom_cover\">Capa personalizada</string>\n    <string name=\"reading_list\">Lista dos Em Leitura</string>\n    <string name=\"action_remove_everything\">Remover tudo</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"popular\">Famoso</string>\n    <string name=\"skipped_reason_not_always_update\">Ignorado porque a série não requer atualizações</string>\n    <string name=\"action_search_hint\">Pesquisar…</string>\n    <string name=\"missing_storage_permission\">Permissões de armazenamento não concedidas</string>\n    <string name=\"action_display_show_continue_reading_button\">Botão de continuar lendo</string>\n    <string name=\"pref_appearance_summary\">Tema, data e formato de hora</string>\n    <string name=\"pref_library_summary\">Categorias, atualização global, trocar de capítulo</string>\n    <string name=\"pref_reader_summary\">Modo leitura, exibir, navegação</string>\n    <string name=\"action_open_random_manga\">Abrir mangá aleatório</string>\n    <string name=\"label_stats\">Estatisticas</string>\n    <string name=\"label_started\">Começado</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_downloaded\">Baixado</string>\n    <string name=\"unknown_title\">Título desconhecido</string>\n    <string name=\"copied_to_clipboard_plain\">Copiado para a área de transferência</string>\n    <string name=\"confirm_add_duplicate_manga\">Você tem uma entrada em sua biblioteca com o mesmo nome.\n\\n\n\\nAinda deseja continuar?</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"updates_last_update_info_just_now\">Agora mesmo</string>\n    <string name=\"crash_screen_restart_application\">Reinicie o aplicativo</string>\n    <string name=\"crash_screen_title\">Ops!</string>\n    <string name=\"crash_screen_description\">%s encontrou um erro inesperado. Sugerimos que você compartilhe os registros de falha em nosso canal de suporte no Discord.</string>\n    <string name=\"pref_downloads_summary\">Descarga automática, descarga a frente</string>\n    <string name=\"pref_tracking_summary\">Sincronização de progresso unidirecional, sincronização aprimorada</string>\n    <string name=\"pref_browse_summary\">Fontes, extensões, pesquisa global</string>\n    <string name=\"pref_backup_summary\">Backups manuais e automáticos</string>\n    <string name=\"information_no_manga_category\">A categoria está vazia</string>\n    <string name=\"track_remove_start_date_conf_text\">Isto irá remover a sua data de início selecionada anteriormente no %s</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostrar a contagem no ícone de Atualizações</string>\n    <string name=\"pref_skip_dupe_chapters\">Pular capítulos duplicados</string>\n    <string name=\"error_user_agent_string_invalid\">Valor de user agent inválido</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"label_titles_in_global_update\">Na atualização global</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_read_chapters\">Lidos</string>\n    <string name=\"label_tracker_section\">Monitoradores</string>\n    <string name=\"invalid_location\">Local inválido: %s</string>\n    <string name=\"track_error\">Erro em %1$s: %2$s</string>\n    <string name=\"label_titles_section\">Itens</string>\n    <string name=\"label_read_duration\">Duração de leitura</string>\n    <string name=\"pref_security_summary\">Bloqueio da app, ecrã seguro</string>\n    <string name=\"pref_advanced_summary\">Exportar registos de travamento, otimizações de bateria</string>\n    <string name=\"pref_invalidate_download_cache\">Reindexar descargas</string>\n    <string name=\"track_remove_finish_date_conf_text\">Isto irá remover a sua data de término selecionada anteriormente no %s</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"action_not_now\">Agora não</string>\n    <string name=\"label_tracked_titles\">Itens monitorados</string>\n    <string name=\"label_mean_score\">Avaliação média</string>\n    <string name=\"label_used\">Usados</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"download_notifier_cache_renewal\">A verificar as transferências</string>\n    <string name=\"track_remove_date_conf_title\">Remover data?</string>\n    <string name=\"label_overview_section\">Visão geral</string>\n    <string name=\"label_completed_titles\">Itens completos</string>\n    <string name=\"information_required_plain\">*obrigatório</string>\n    <string name=\"enhanced_services_not_installed\">Disponíveis, mas a fonte não está instalada: %s</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Força a app a controlar novamente por capítulos disponíveis offline</string>\n    <string name=\"fdroid_warning\">Compilações do F-Droid não são suportadas oficialmente.\n\\nToque para saber mais.</string>\n    <string name=\"information_no_entries_found\">Nenhum item encontrado nesta categoria</string>\n    <string name=\"action_copy_to_clipboard\">Copiar para a área de transferência</string>\n    <string name=\"pref_hide_in_library_items\">Ocultar entradas existentes na biblioteca</string>\n    <string name=\"action_update_category\">Atualizar categoria</string>\n    <string name=\"split_tall_images\">Dividir Imagens altas</string>\n    <string name=\"overlay_header\">Sobreposição</string>\n    <string name=\"pref_page_rotate\">Girar páginas largas para caber</string>\n    <string name=\"pref_page_rotate_invert\">Virar a orientação de páginas largas giradas</string>\n    <string name=\"pref_chapter_swipe_start\">Ação de deslizar para a esquerda</string>\n    <string name=\"pref_double_tap_zoom\">Toque duplo para aproximar</string>\n    <string name=\"action_set_interval\">Definir intervalo</string>\n    <string name=\"pref_update_only_in_release_period\">Fora do período esperado de lançamento</string>\n    <string name=\"pref_debug_info\">Informações de depuração</string>\n    <string name=\"pref_chapter_swipe_end\">Ação de deslizar para a direita</string>\n    <string name=\"intervals_header\">intervalos</string>\n    <string name=\"manga_display_interval_title\">Estimado a cada</string>\n    <string name=\"action_filter_interval_custom\">Intervalo de busca customizado</string>\n    <string name=\"action_sort_next_updated\">Próxima atualização esperada</string>\n    <string name=\"manga_display_modified_interval_title\">Definido para atualizar a cada</string>\n    <string name=\"skipped_reason_not_in_release_period\">Pulado, pois nenhum lançamento é esperado para hoje</string>\n    <string name=\"delete_downloaded\">Apagar download</string>\n    <string name=\"selected\">Selecionado</string>\n    <string name=\"not_selected\">Não selecionado</string>\n    <string name=\"action_menu_overflow_description\">Mais opções</string>\n    <string name=\"action_bar_up_description\">Navegar para cima</string>\n    <string name=\"unlock_app_title\">Desbloquear %s</string>\n    <string name=\"label_data_storage\">Dados e armazenamento</string>\n    <string name=\"pref_storage_usage\">Uso de armazenamento</string>\n    <string name=\"available_disk_space_info\">Disponível: %1$s / Total: %2$s</string>\n    <string name=\"download_cache_invalidated\">Índice de descargas invalidado</string>\n    <string name=\"exception_unknown_host\">Não foi possível resolver %s</string>\n    <string name=\"manga_interval_custom_amount\">Frequência de atualização personalizada:</string>\n    <string name=\"track_delete_title\">Remover o monitoramento do %s?</string>\n    <string name=\"file_null_uri_error\">Nenhum ficheiro selecionado</string>\n    <string name=\"information_cloudflare_help\">Toque aqui para obter ajuda com o Cloudflare</string>\n    <string name=\"action_delete_repo\">Deletar repositório</string>\n    <string name=\"action_add_anyway\">Adicionar de qualquer maneira</string>\n    <string name=\"action_migrate_duplicate\">Migrar entrada existente</string>\n    <string name=\"onboarding_permission_notifications_description\">Seja notificado para atualizações da biblioteca e mais.</string>\n    <string name=\"onboarding_guides_returning_user\">A reinstalar o %s?</string>\n    <string name=\"pref_relative_format\">Datas relativas</string>\n    <string name=\"ext_permission_install_apps_warning\">Permissões são necessárias para instalar extensões. Toque aqui para conceder.</string>\n    <string name=\"information_empty_repos\">Não tem repositórios definidos.</string>\n    <string name=\"action_add_repo\">Adicionar repositório</string>\n    <string name=\"label_add_repo_input\">URL do repositório</string>\n    <string name=\"pref_display_profile\">Perfil de exibição personalizado</string>\n    <string name=\"exception_offline\">Sem conexão de internet</string>\n    <string name=\"action_replace_repo\">Substituir</string>\n    <string name=\"action_replace_repo_title\">A impressão digital da chave de assinatura já existe</string>\n    <string name=\"pref_flash_page\">Flash ao mudar de página</string>\n    <string name=\"pref_storage_location\">Local de armazenamento</string>\n    <string name=\"action_create\">Criar</string>\n    <string name=\"app_settings\">Configurações da app</string>\n    <string name=\"syncing_library\">A sincronizar a biblioteca</string>\n    <string name=\"notification_updating_progress\">A atualizar a biblioteca… (%s)</string>\n    <string name=\"exception_http\">HTTP %d, verifique o site na WebView</string>\n    <string name=\"action_sort_tracker_score\">Avaliação no monitorador</string>\n    <string name=\"action_apply\">Aplicar</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"action_revert_to_default\">Reverter para o padrão</string>\n    <string name=\"onboarding_heading\">Bem-vindo(a)!</string>\n    <string name=\"onboarding_action_skip\">Pular</string>\n    <string name=\"onboarding_storage_action_select\">Selecionar uma pasta</string>\n    <string name=\"onboarding_storage_selection_required\">Uma pasta deve ser selecionada</string>\n    <string name=\"onboarding_storage_help_info\">A atualizar de uma versão anterior e não tem certeza do que selecionar? Consulte o guia de armazenamento para mais informações.</string>\n    <string name=\"onboarding_storage_help_action\">Guia de armazenamento</string>\n    <string name=\"onboarding_permission_install_apps\">Permissão de instalação de apps</string>\n    <string name=\"onboarding_permission_install_apps_description\">Para instalar extensões de fontes.</string>\n    <string name=\"onboarding_permission_notifications\">Permissão de notificação</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Uso de pilha em plano de fundo</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Evite interrupções para tarefas longas como atualizações da biblioteca, descargas e restauração de backups.</string>\n    <string name=\"onboarding_permission_action_grant\">Conceder</string>\n    <string name=\"onboarding_guides_new_user\">Novo no %s? Recomendamos dar uma olhada no guia de introdução.</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" ao invés de \\\"%2$s\\\"</string>\n    <string name=\"action_add_repo_message\">Adiciona repositórios adicionais ao Mihon. Deve ser uma URL que termine com \\\"index.min.json\\\".</string>\n    <string name=\"invalid_repo_name\">URL do repositório inválido</string>\n    <string name=\"delete_repo_confirmation\">Deseja deletar o repositório \\\"%s\\\"?</string>\n    <string name=\"action_open_repo\">Abrir repositório da fonte</string>\n    <string name=\"action_replace_repo_message\">O repositório %1$s tem a mesma impressão digital da chave de assinatura que %2$s.\n\\nSe isto for esperado, %2$s será substituído, caso contrário, entre em contato com o mantenedor do repositório.</string>\n    <string name=\"pref_flash_page_summ\">Reduz o efeito fantasma em ecrãs de e-ink</string>\n    <string name=\"invalid_backup_file_error\">Erro completo:</string>\n    <string name=\"source_settings\">Configurações das fontes</string>\n    <string name=\"private_settings\">Incluir configurações sensíveis (tokens de login dos monitoradores, por exemplo)</string>\n    <string name=\"create_backup_file_error\">Não foi possível criar o ficheiro do backup</string>\n    <string name=\"has_results\">Há resultados</string>\n    <string name=\"manga_interval_expected_update_soon\">Em breve</string>\n    <string name=\"relative_time_span_never\">Nunca</string>\n    <string name=\"upcoming_guide\">Guia de próximos lançamentos</string>\n    <string name=\"upcoming_calendar_next\">Próximo mês</string>\n    <string name=\"upcoming_calendar_prev\">Mês anterior</string>\n    <string name=\"track_delete_remote_text\">Também remover do %s</string>\n    <string name=\"onboarding_description\">Vamos definir algumas coisas primeiro. Sempre pode fazer alterações nas configurações depois também.</string>\n    <string name=\"onboarding_action_next\">Próximo</string>\n    <string name=\"onboarding_action_finish\">Começar</string>\n    <string name=\"onboarding_storage_info\">Escolha uma pasta onde o %1$s irá armazenar as descargas de capítulos, backups e mais.\n\\n\n\\nUma pasta dedicada é recomendada.\n\\n\n\\nPasta selecionada: %2$s</string>\n    <string name=\"exclude_scanlators\">Apagar scanlators</string>\n    <string name=\"no_scanlators_found\">Nenhum scanlator encontrado</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Mover série para o final</string>\n    <string name=\"pref_onboarding_guide\">Guia de introdução</string>\n    <string name=\"pref_library_update_smart_update\">Atualização inteligente</string>\n    <string name=\"ext_revoke_trust\">Revogar a confiabilidade de extensões desconhecidas</string>\n    <string name=\"label_extension_repos\">Repositórios de extensões</string>\n    <string name=\"error_repo_exists\">Este repositório já existe!</string>\n    <string name=\"no_location_set\">Local de armazenamento não definido</string>\n    <string name=\"track_activity_name\">Login do monitorador</string>\n    <string name=\"pref_storage_location_info\">Usado para backups automáticos, descargas de capítulos e na fonte local.</string>\n    <string name=\"last_auto_backup_info\">Último backup automático feito em: %s</string>\n    <string name=\"library_sync_complete\">Sincronização da biblioteca finalizada</string>\n    <string name=\"manga_interval_expected_update\">Novos capítulos com previsão de serem lançados em torno de %1$s, verificando em torno de cada %2$s.</string>\n    <string name=\"track_delete_text\">Isto irá remover o monitoramento localmente.</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Desativar redução de zoom</string>\n    <string name=\"action_view_upcoming\">Exibir as próximas atualizações</string>\n    <string name=\"label_upcoming\">A seguir</string>\n    <string name=\"non_library_settings\">Todas as entradas lidas</string>\n    <string name=\"action_copy_link\">Copiar link</string>\n    <string name=\"pref_flash_style_black\">Preto</string>\n    <string name=\"pref_flash_style_white\">Branco</string>\n    <string name=\"invalid_backup_file_json\">Cópia de segurança JSON não suportada</string>\n    <string name=\"invalid_backup_file_unknown\">Ficheiro de Cópia de Segurança corrompido</string>\n    <string name=\"extensionRepo_settings\">Repositórios de Extensões</string>\n    <string name=\"action_sort_random\">Aleatório</string>\n    <string name=\"onboarding_permission_analytics_description\">Enviar dados de utilização anónimos para melhorar funções da aplicação.</string>\n    <string name=\"firebase_summary\">A enviar logs de crash e estatísticas para permitir-nos identificar e resolver problemas, melhorar a performance e realizar futuras atualizações que sejam mais revelantes aos teus desejos</string>\n    <string name=\"pref_firebase\">Estatíscas e Logs de Crash</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Atualizar progresso quando for marcado como lido</string>\n    <string name=\"manga_interval_expected_update_null\">Este mangá ou está completo ou ainda não tem uma data de lançamento prevista.</string>\n    <string name=\"trackers_updated_summary\">Trackers atualizados para o capítulo %d</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Erro ao adquirir acesso persistente à pasta. A aplicação pode apresentar certos erros</string>\n    <string name=\"onboarding_permission_crashlytics\">Enviar logs de crash</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Enviar logs de crash anónimos para os desenvolvedores.</string>\n    <string name=\"onboarding_permission_analytics\">Permitir estatísticas</string>\n    <string name=\"pref_security\">Segurança</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_style_white_black\">Branco e Preto</string>\n    <string name=\"ext_remove\">Remover</string>\n    <string name=\"ext_confirm_remove\">Remover Extensão?</string>\n    <string name=\"remove_private_extension_message\">Queres mesmo remover a extensão: \\\"%s\\\"?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Ignorar dar download a capítulos já lidos duplicados</string>\n    <string name=\"confirm_tracker_update\">\"Atualizar  os tracker para o capítulo  %d?\"</string>\n    <string name=\"add_repo_confirmation\">Desejas adicionar o seguinte repositório: \\\"%s\\\"?</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/pt-rBR/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Por %1$s minuto</item>\n        <item quantity=\"many\">Por %1$s minutos</item>\n        <item quantity=\"other\">Por %1$s minutos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d capítulo novo</item>\n        <item quantity=\"many\">%1$d capítulos novos</item>\n        <item quantity=\"other\">%1$d capítulos novos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capítulos %1$s e mais 1</item>\n        <item quantity=\"many\">Capítulos %1$s e mais %2$d</item>\n        <item quantity=\"other\">Capítulos %1$s e mais %2$d</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Para %d item</item>\n        <item quantity=\"many\">Para %d itens</item>\n        <item quantity=\"other\">Para %d itens</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Atualização de extensão disponível</item>\n        <item quantity=\"many\">%d atualizações de extensão disponíveis</item>\n        <item quantity=\"other\">%d atualizações de extensão disponíveis</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s restante</item>\n        <item quantity=\"many\">%1$s restantes</item>\n        <item quantity=\"other\">%1$s restantes</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoria</item>\n        <item quantity=\"many\">%d categorias</item>\n        <item quantity=\"other\">%d categorias</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Concluído em %1$s com %2$s erro</item>\n        <item quantity=\"many\">Concluído em %1$s com %2$s erros</item>\n        <item quantity=\"other\">Concluído em %1$s com %2$s erros</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capítulo</item>\n        <item quantity=\"many\">%1$s capítulos</item>\n        <item quantity=\"other\">%1$s capítulos</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d monitorador</item>\n        <item quantity=\"many\">%d monitoradores</item>\n        <item quantity=\"other\">%d monitoradores</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Pulando %d capítulo, ou ele está faltando na fonte, ou ele foi filtrado</item>\n        <item quantity=\"many\">Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados</item>\n        <item quantity=\"other\">Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ontem</item>\n        <item quantity=\"many\">%1$d dias atrás</item>\n        <item quantity=\"other\">%1$d dias atrás</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Próximo capítulo não lido</item>\n        <item quantity=\"many\">Próximos %d capítulos não lidos</item>\n        <item quantity=\"other\">Próximos %d capítulos não lidos</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Próximo capítulo</item>\n        <item quantity=\"many\">Próximos %d capítulos</item>\n        <item quantity=\"other\">Próximos %d capítulos</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Faltando %1$s capítulo</item>\n        <item quantity=\"many\">Faltando %1$s capítulos</item>\n        <item quantity=\"other\">Faltando %1$s capítulos</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">%d dia(s)</item>\n        <item quantity=\"many\">%d dias</item>\n        <item quantity=\"other\">%d dias</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repositório(s)</item>\n        <item quantity=\"many\">%d repositórios</item>\n        <item quantity=\"other\">%d repositórios</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Amanhã</item>\n        <item quantity=\"many\">Em %1$d dias</item>\n        <item quantity=\"other\">Em breve</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/pt-rBR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nome</string>\n    <string name=\"categories\">Categorias</string>\n    <string name=\"manga\">Itens da biblioteca</string>\n    <string name=\"chapters\">Capítulos</string>\n    <string name=\"track\">Monitoramento</string>\n    <string name=\"history\">Histórico</string>\n    <string name=\"label_settings\">Configurações</string>\n    <string name=\"label_download_queue\">Fila de downloads</string>\n    <string name=\"label_library\">Biblioteca</string>\n    <string name=\"label_recent_manga\">Histórico</string>\n    <string name=\"label_recent_updates\">Atualizações</string>\n    <string name=\"label_backup\">Backup e restauração</string>\n    <string name=\"action_settings\">Configurações</string>\n    <string name=\"action_filter\">Filtrar</string>\n    <string name=\"action_filter_bookmarked\">Favorito</string>\n    <string name=\"action_filter_unread\">Não lido</string>\n    <string name=\"action_filter_empty\">Remover filtros</string>\n    <string name=\"action_sort_alpha\">Alfabeticamente</string>\n    <string name=\"action_sort_total\">Total de capítulos</string>\n    <string name=\"action_sort_last_read\">Último lido</string>\n    <string name=\"action_search\">Pesquisar</string>\n    <string name=\"action_select_all\">Selecionar tudo</string>\n    <string name=\"action_mark_as_read\">Marcar como lido</string>\n    <string name=\"action_mark_as_unread\">Marcar como não lido</string>\n    <string name=\"action_mark_previous_as_read\">Marcar anteriores como lidos</string>\n    <string name=\"action_download\">Fazer download</string>\n    <string name=\"action_bookmark\">Adicionar capítulo aos favoritos</string>\n    <string name=\"action_remove_bookmark\">Remover capítulo dos favoritos</string>\n    <string name=\"action_delete\">Remover</string>\n    <string name=\"action_update_library\">Atualizar biblioteca</string>\n    <string name=\"action_edit\">Editar</string>\n    <string name=\"action_add\">Adicionar</string>\n    <string name=\"action_add_category\">Adicionar categoria</string>\n    <string name=\"action_edit_categories\">Editar categorias</string>\n    <string name=\"action_rename_category\">Renomear categoria</string>\n    <string name=\"action_move_category\">Definir categorias</string>\n    <string name=\"action_edit_cover\">Editar a capa</string>\n    <string name=\"action_pause\">Pausar</string>\n    <string name=\"action_previous_chapter\">Capítulo anterior</string>\n    <string name=\"action_next_chapter\">Próximo capítulo</string>\n    <string name=\"action_retry\">Tentar novamente</string>\n    <string name=\"action_remove\">Remover</string>\n    <string name=\"action_resume\">Retomar</string>\n    <string name=\"action_open_in_browser\">Abrir no navegador</string>\n    <string name=\"action_display_mode\">Modo de visualização</string>\n    <string name=\"action_display\">Visualizar</string>\n    <string name=\"action_display_grid\">Grade compacta</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_cancel\">Cancelar</string>\n    <string name=\"action_sort\">Ordenar</string>\n    <string name=\"action_install\">Instalar</string>\n    <string name=\"action_share\">Compartilhar</string>\n    <string name=\"action_save\">Salvar</string>\n    <string name=\"action_reset\">Redefinir</string>\n    <string name=\"action_undo\">Desfazer</string>\n    <string name=\"action_open_log\">Abrir registro de eventos</string>\n    <string name=\"action_restore\">Restaurar</string>\n    <string name=\"loading\">Carregando…</string>\n    <string name=\"app_not_available\">Aplicativo indisponível</string>\n    <string name=\"pref_category_general\">Geral</string>\n    <string name=\"pref_category_reader\">Leitor</string>\n    <string name=\"pref_category_downloads\">Downloads</string>\n    <string name=\"pref_category_tracking\">Monitoramento</string>\n    <string name=\"pref_category_advanced\">Avançado</string>\n    <string name=\"pref_category_about\">Sobre</string>\n    <string name=\"pref_library_columns\">Tamanho da grade</string>\n    <string name=\"portrait\">Retrato</string>\n    <string name=\"landscape\">Paisagem</string>\n    <string name=\"pref_library_update_interval\">Atualizações automáticas</string>\n    <string name=\"update_never\">Desligado</string>\n    <string name=\"update_6hour\">A cada 6 horas</string>\n    <string name=\"update_12hour\">A cada 12 horas</string>\n    <string name=\"update_24hour\">Diariamente</string>\n    <string name=\"update_48hour\">A cada 2 dias</string>\n    <string name=\"update_weekly\">Semanalmente</string>\n    <string name=\"all\">Todas</string>\n    <string name=\"pref_library_update_restriction\">Restrições do dispositivo para atualizações automáticas</string>\n    <string name=\"charging\">Quando carregando</string>\n    <string name=\"pref_update_only_non_completed\">Pular itens com o estado \\\"Completo\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Atualizar o progresso após a leitura</string>\n    <string name=\"default_category\">Categoria padrão</string>\n    <string name=\"default_category_summary\">Sempre perguntar</string>\n    <string name=\"pref_fullscreen\">Tela cheia</string>\n    <string name=\"pref_page_transitions\">Animar as transições de página</string>\n    <string name=\"pref_show_page_number\">Mostrar o número da página</string>\n    <string name=\"pref_crop_borders\">Aparar as bordas</string>\n    <string name=\"pref_custom_brightness\">Brilho personalizado</string>\n    <string name=\"pref_custom_color_filter\">Filtro de cor personalizado</string>\n    <string name=\"pref_keep_screen_on\">Manter a tela ligada</string>\n    <string name=\"pref_reader_navigation\">Navegação</string>\n    <string name=\"pref_read_with_volume_keys\">Botões de volume</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverter os botões de volume</string>\n    <string name=\"pref_reader_theme\">Cor de fundo</string>\n    <string name=\"white_background\">Branco</string>\n    <string name=\"black_background\">Preto</string>\n    <string name=\"pref_viewer_type\">Modo de leitura padrão</string>\n    <string name=\"left_to_right_viewer\">Paginado (esquerda para direita)</string>\n    <string name=\"right_to_left_viewer\">Paginado (direita para esquerda)</string>\n    <string name=\"vertical_viewer\">Paginado (vertical)</string>\n    <string name=\"webtoon_viewer\">Tira longa</string>\n    <string name=\"pref_image_scale_type\">Tipo de escala</string>\n    <string name=\"scale_type_fit_screen\">Ajustar à tela</string>\n    <string name=\"scale_type_stretch\">Estender</string>\n    <string name=\"scale_type_fit_width\">Ajustar à largura</string>\n    <string name=\"scale_type_fit_height\">Ajustar à altura</string>\n    <string name=\"scale_type_original_size\">Tamanho original</string>\n    <string name=\"scale_type_smart_fit\">Ajuste inteligente</string>\n    <string name=\"pref_zoom_start\">Posição inicial do zoom</string>\n    <string name=\"zoom_start_automatic\">Automática</string>\n    <string name=\"zoom_start_left\">Esquerda</string>\n    <string name=\"zoom_start_right\">Direita</string>\n    <string name=\"zoom_start_center\">Centro</string>\n    <string name=\"pref_rotation_type\">Orientação padrão</string>\n    <string name=\"rotation_free\">Automática</string>\n    <string name=\"rotation_force_portrait\">Retrato bloqueado</string>\n    <string name=\"rotation_force_landscape\">Paisagem bloqueado</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Após marcado como lido manualmente</string>\n    <string name=\"pref_remove_after_read\">Excluir automaticamente após a leitura</string>\n    <string name=\"disabled\">Desativado</string>\n    <string name=\"last_read_chapter\">Último capítulo lido</string>\n    <string name=\"second_to_last\">Penúltimo capítulo lido</string>\n    <string name=\"third_to_last\">Antepenúltimo capítulo lido</string>\n    <string name=\"fourth_to_last\">Quarto capítulo lido antes do último</string>\n    <string name=\"fifth_to_last\">Quinto capítulo lido antes do último</string>\n    <string name=\"pref_download_new\">Fazer download de novos capítulos</string>\n    <string name=\"services\">Monitoradores</string>\n    <string name=\"pref_create_backup\">Criar backup</string>\n    <string name=\"pref_create_backup_summ\">Pode ser usado para restaurar a biblioteca atual</string>\n    <string name=\"pref_restore_backup\">Restaurar backup</string>\n    <string name=\"pref_restore_backup_summ\">Restaura a biblioteca de um arquivo de backup</string>\n    <string name=\"pref_backup_interval\">Frequência de backup automático</string>\n    <string name=\"backup_created\">Backup criado</string>\n    <string name=\"restore_completed\">Restauração concluída</string>\n    <string name=\"backup_choice\">Do que você deseja fazer backup?</string>\n    <string name=\"restoring_backup\">Restaurando backup</string>\n    <string name=\"creating_backup\">Criando backup</string>\n    <string name=\"pref_clear_chapter_cache\">Limpar o cache de capítulos</string>\n    <string name=\"used_cache\">Utilizado: %1$s</string>\n    <string name=\"cache_deleted\">Cache limpo. %1$d arquivos excluídos</string>\n    <string name=\"cache_delete_error\">Ocorreu um erro ao limpar</string>\n    <string name=\"pref_clear_cookies\">Limpar os cookies</string>\n    <string name=\"cookies_cleared\">Cookies limpos</string>\n    <string name=\"pref_clear_database\">Limpar o banco de dados</string>\n    <string name=\"pref_clear_database_summary\">Exclui o histórico de itens que não estão salvos em sua biblioteca</string>\n    <string name=\"clear_database_confirmation\">Tem certeza? Os capítulos lidos e o progresso em itens que não estão na sua biblioteca serão perdidos</string>\n    <string name=\"clear_database_completed\">Entradas excluídas</string>\n    <string name=\"version\">Versão</string>\n    <string name=\"pref_enable_acra\">Enviar relatórios de erro</string>\n    <string name=\"pref_acra_summary\">Ajuda a corrigir eventuais erros. Nenhum dado sensível será enviado</string>\n    <string name=\"login_title\">Fazer login em %1$s</string>\n    <string name=\"username\">Nome de usuário</string>\n    <string name=\"password\">Senha</string>\n    <string name=\"login\">Fazer login</string>\n    <string name=\"login_success\">Login realizado</string>\n    <string name=\"unknown_error\">Erro desconhecido</string>\n    <string name=\"updating_category\">Atualizando categoria</string>\n    <string name=\"no_more_results\">Não há mais resultados</string>\n    <string name=\"local_source\">Fonte local</string>\n    <string name=\"ongoing\">Em andamento</string>\n    <string name=\"unknown\">Desconhecido</string>\n    <string name=\"licensed\">Licenciado</string>\n    <string name=\"remove_from_library\">Remover da biblioteca</string>\n    <string name=\"delete_downloads_for_manga\">Excluir os capítulos disponíveis offline?</string>\n    <string name=\"display_mode_chapter\">Capítulo %1$s</string>\n    <string name=\"chapter_downloading_progress\">Fazendo download (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Erro</string>\n    <string name=\"chapter_paused\">Pausado</string>\n    <string name=\"show_title\">Título da fonte</string>\n    <string name=\"show_chapter_number\">Número do capítulo</string>\n    <string name=\"sort_by_source\">Pela fonte</string>\n    <string name=\"sort_by_number\">Pelo número do capítulo</string>\n    <string name=\"manga_download\">Fazer download</string>\n    <string name=\"download_unread\">Não lidos</string>\n    <string name=\"confirm_delete_chapters\">Você tem certeza que quer excluir os capítulos selecionados?</string>\n    <string name=\"manga_tracking_tab\">Monitoramento</string>\n    <string name=\"reading\">Lendo</string>\n    <string name=\"completed\">Concluído</string>\n    <string name=\"dropped\">Abandonado</string>\n    <string name=\"on_hold\">Em espera</string>\n    <string name=\"plan_to_read\">Planejo ler</string>\n    <string name=\"score\">Avaliação</string>\n    <string name=\"title\">Título</string>\n    <string name=\"status\">Estado</string>\n    <string name=\"error_category_exists\">Já existe uma categoria com este nome!</string>\n    <string name=\"snack_categories_deleted\">Categorias excluídas</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Isso irá remover a data de leitura deste capítulo. Você tem certeza?</string>\n    <string name=\"dialog_with_checkbox_reset\">Redefinir todos os capítulos deste item</string>\n    <string name=\"snack_add_to_library\">Adicionar à biblioteca?</string>\n    <string name=\"picture_saved\">Imagem salva</string>\n    <string name=\"custom_filter\">Filtro personalizado</string>\n    <string name=\"set_as_cover\">Usar como capa</string>\n    <string name=\"cover_updated\">Capa atualizada</string>\n    <string name=\"chapter_progress\">Página: %1$d</string>\n    <string name=\"no_next_chapter\">Próximo capítulo não encontrado</string>\n    <string name=\"decode_image_error\">A imagem não pôde ser carregada</string>\n    <string name=\"confirm_set_image_as_cover\">Usar esta imagem como capa?</string>\n    <string name=\"download_queue_error\">Não foi possível fazer o download dos capítulos. Você pode tentar novamente na seção de downloads</string>\n    <string name=\"notification_new_chapters\">Novos capítulos encontrados</string>\n    <string name=\"notification_cover_update_failed\">Erro ao atualizar a capa</string>\n    <string name=\"notification_first_add_to_library\">Por favor, adicione o item à sua biblioteca antes de fazer isso</string>\n    <string name=\"file_select_cover\">Selecionar imagem de capa</string>\n    <string name=\"file_select_backup\">Selecionar arquivo de backup</string>\n    <string name=\"update_check_confirm\">Fazer download</string>\n    <string name=\"update_check_no_new_updates\">Sem atualizações disponíveis</string>\n    <string name=\"update_check_notification_download_in_progress\">Fazendo download…</string>\n    <string name=\"update_check_notification_download_complete\">Toque para instalar a atualização</string>\n    <string name=\"update_check_notification_download_error\">Erro ao fazer download</string>\n    <string name=\"update_check_notification_update_available\">Nova versão disponível!</string>\n    <string name=\"information_no_downloads\">Nenhum download</string>\n    <string name=\"information_no_recent\">Sem atualizações recentes</string>\n    <string name=\"information_no_recent_manga\">Nada lido recentemente</string>\n    <string name=\"information_empty_library\">A sua biblioteca está vazia</string>\n    <string name=\"download_notifier_downloader_title\">Gerenciador de downloads</string>\n    <string name=\"download_notifier_title_error\">Erro</string>\n    <string name=\"download_notifier_unknown_error\">Não foi possível realizar o download do capítulo devido a um erro inesperado</string>\n    <string name=\"download_notifier_text_only_wifi\">Conexão Wi-Fi indisponível</string>\n    <string name=\"download_notifier_no_network\">Conexão à rede indisponível</string>\n    <string name=\"download_notifier_download_paused\">Downloads pausados</string>\n    <string name=\"action_global_search\">Pesquisa global</string>\n    <string name=\"other_source\">Outras</string>\n    <string name=\"action_global_search_hint\">Pesquisa global…</string>\n    <string name=\"latest\">Recentes</string>\n    <string name=\"browse\">Navegar</string>\n    <string name=\"channel_common\">Comum</string>\n    <string name=\"action_display_download_badge\">Capítulos disponíveis offline</string>\n    <string name=\"information_empty_category\">Você ainda não tem nenhuma categoria. Toque no botão Adicionar para criar uma e organizar a sua biblioteca.</string>\n    <string name=\"label_migration\">Migrar</string>\n    <string name=\"label_extensions\">Extensões</string>\n    <string name=\"label_extension_info\">Informações da extensão</string>\n    <string name=\"ext_update\">Atualizar</string>\n    <string name=\"ext_install\">Instalar</string>\n    <string name=\"ext_pending\">Pendente</string>\n    <string name=\"ext_downloading\">Fazendo download</string>\n    <string name=\"ext_installing\">Instalando</string>\n    <string name=\"ext_installed\">Instalada</string>\n    <string name=\"ext_trust\">Confiar</string>\n    <string name=\"ext_untrusted\">Não confiável</string>\n    <string name=\"ext_uninstall\">Desinstalar</string>\n    <string name=\"untrusted_extension\">Extensão não confiável</string>\n    <string name=\"untrusted_extension_message\">Extensões maliciosas podem ler quaisquer credenciais de login armazenadas ou executar códigos arbitrários.\n\\n\n\\nAo confiar nessa extensão, você estará aceitando estes riscos.</string>\n    <string name=\"pref_double_tap_anim_speed\">Velocidade da animação do toque duplo</string>\n    <string name=\"double_tap_anim_speed_0\">Sem animação</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Rápida</string>\n    <string name=\"manga_added_library\">Adicionado à biblioteca</string>\n    <string name=\"manga_removed_library\">Removido da biblioteca</string>\n    <string name=\"copied_to_clipboard\">Copiado para a área de transferência:\n\\n%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Selecione os dados para incluir</string>\n    <string name=\"migrate\">Migrar</string>\n    <string name=\"copy\">Copiar</string>\n    <string name=\"source_not_installed\">Fonte não instalada: %1$s</string>\n    <string name=\"repeating\">Relendo</string>\n    <string name=\"pager_viewer\">Paginação</string>\n    <string name=\"track_status\">Estado</string>\n    <string name=\"track_type\">Tipo</string>\n    <string name=\"transition_finished\">Concluído:</string>\n    <string name=\"transition_current\">Atual:</string>\n    <string name=\"transition_next\">Próximo:</string>\n    <string name=\"transition_previous\">Anterior:</string>\n    <string name=\"transition_no_next\">Não há próximo capítulo</string>\n    <string name=\"transition_no_previous\">Não há capítulo anterior</string>\n    <string name=\"transition_pages_loading\">Carregando as páginas…</string>\n    <string name=\"transition_pages_error\">Falha ao carregar as páginas: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">Mostrar as ações no toque longo</string>\n    <string name=\"action_open_in_web_view\">Abrir na WebView</string>\n    <string name=\"pref_skip_read_chapters\">Pular os capítulos marcados como lidos</string>\n    <string name=\"filter_mode_screen\">Divisão</string>\n    <string name=\"label_help\">Ajuda</string>\n    <string name=\"pref_color_filter_mode\">Modo de aplicação do filtro de cor</string>\n    <string name=\"filter_mode_overlay\">Sobreposição</string>\n    <string name=\"filter_mode_multiply\">Multiplicação</string>\n    <string name=\"filter_mode_lighten\">Clarear</string>\n    <string name=\"filter_mode_darken\">Escurecer</string>\n    <string name=\"action_webview_back\">Voltar</string>\n    <string name=\"action_webview_forward\">Avançar</string>\n    <string name=\"action_webview_refresh\">Recarregar</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"ext_obsolete\">Obsoleto</string>\n    <string name=\"obsolete_extension_message\">Esta extensão não está mais disponível. Ela pode não funcionar corretamente e pode causar problemas no aplicativo. É recomendado desinstalá-la.</string>\n    <string name=\"no_results_found\">Nenhum resultado encontrado</string>\n    <string name=\"migration_selection_prompt\">Selecione uma fonte da qual migrar</string>\n    <string name=\"pref_date_format\">Formato de data</string>\n    <string name=\"pref_category_library_update\">Atualização global</string>\n    <string name=\"logout_title\">Desconectar de %1$s?</string>\n    <string name=\"logout\">Desconectar</string>\n    <string name=\"logout_success\">Você foi desconectado</string>\n    <string name=\"paused\">Pausado</string>\n    <string name=\"label_more\">Mais</string>\n    <string name=\"action_sort_latest_chapter\">Último capítulo</string>\n    <string name=\"action_view_chapters\">Visualizar os capítulos</string>\n    <string name=\"action_cancel_all\">Cancelar todos</string>\n    <string name=\"theme_light\">Claro</string>\n    <string name=\"theme_dark\">Escuro</string>\n    <string name=\"theme_system\">Sistema</string>\n    <string name=\"pref_manage_notifications\">Gerenciar notificações</string>\n    <string name=\"pref_category_security\">Segurança e privacidade</string>\n    <string name=\"lock_with_biometrics\">Exigir desbloqueio</string>\n    <string name=\"lock_when_idle\">Bloquear quando ocioso</string>\n    <string name=\"lock_always\">Sempre</string>\n    <string name=\"lock_never\">Nunca</string>\n    <string name=\"secure_screen\">Tela segura</string>\n    <string name=\"ext_updates_pending\">Atualizações pendentes</string>\n    <string name=\"pref_cutout_short\">Mostrar conteúdo na área de recorte da tela</string>\n    <string name=\"information_cloudflare_bypass_failure\">Falha ao contornar o Cloudflare</string>\n    <string name=\"information_webview_outdated\">Por favor, atualize o aplicativo de WebView para uma melhor compatibilidade</string>\n    <string name=\"channel_new_chapters\">Atualizações de capítulos</string>\n    <string name=\"secure_screen_summary\">A tela segura oculta os conteúdos do aplicativo durante a troca de aplicativos e impede capturas de tela</string>\n    <string name=\"pref_category_display\">Visualização</string>\n    <string name=\"notification_chapters_single\">Capítulo %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Capítulo %1$s e mais %2$d</string>\n    <string name=\"notification_chapters_multiple\">Capítulos %1$s</string>\n    <string name=\"hide_notification_content\">Ocultar conteúdo da notificação</string>\n    <string name=\"pref_disable_battery_optimization\">Desativar a otimização de bateria</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Ajuda com as atualizações e os backups da biblioteca em segundo plano</string>\n    <string name=\"battery_optimization_disabled\">A otimização de bateria já está desativada</string>\n    <string name=\"email\">Endereço de email</string>\n    <string name=\"pref_always_show_chapter_transition\">Sempre mostrar a transição entre capítulos</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_newest\">Mais novos</string>\n    <string name=\"action_oldest\">Mais antigos</string>\n    <string name=\"action_move_to_top\">Mover para o começo</string>\n    <string name=\"action_move_to_bottom\">Mover para o final</string>\n    <string name=\"channel_ext_updates\">Atualizações de extensões</string>\n    <string name=\"updating_library\">Atualizando a biblioteca</string>\n    <string name=\"pref_category_reading\">Leitura</string>\n    <string name=\"pref_skip_filtered_chapters\">Pular os capítulos filtrados</string>\n    <string name=\"label_sources\">Fontes</string>\n    <string name=\"action_select_inverse\">Inverter a seleção</string>\n    <string name=\"vertical_plus_viewer\">Tira longa com lacunas</string>\n    <string name=\"pref_webtoon_side_padding\">Margem lateral</string>\n    <string name=\"pinned_sources\">Fixado</string>\n    <string name=\"action_unpin\">Desafixar</string>\n    <string name=\"action_pin\">Fixar</string>\n    <string name=\"add_tracking\">Adicionar monitoramento</string>\n    <string name=\"add_to_library\">Adicionar à biblioteca</string>\n    <string name=\"in_library\">Na biblioteca</string>\n    <string name=\"manga_info_collapse\">Menos</string>\n    <string name=\"manga_info_expand\">Mais</string>\n    <string name=\"information_webview_required\">A WebView é necessária para o funcionamento do app</string>\n    <string name=\"licenses\">Licenças de código aberto</string>\n    <string name=\"website\">Site</string>\n    <string name=\"label_downloaded_only\">Somente disponíveis offline</string>\n    <string name=\"creating_backup_error\">Falha no backup</string>\n    <string name=\"backup_in_progress\">O backup já está em andamento</string>\n    <string name=\"restore_in_progress\">A restauração já está em andamento</string>\n    <string name=\"recent_manga_time\">Cap. %1$s - %2$s</string>\n    <string name=\"restoring_backup_canceled\">Restauração cancelada</string>\n    <string name=\"restoring_backup_error\">Falha ao restaurar o backup</string>\n    <string name=\"last_used_source\">Última utilizada</string>\n    <string name=\"check_for_updates\">Procurar por atualizações</string>\n    <string name=\"local_source_help_guide\">Guia sobre a fonte local</string>\n    <string name=\"restore_duration\">%02d min e %02d seg</string>\n    <string name=\"downloaded_only_summary\">Filtra todos os itens em sua biblioteca</string>\n    <string name=\"gray_background\">Cinza</string>\n    <string name=\"viewer\">Modo de leitura</string>\n    <string name=\"pref_category_for_this_series\">Para esta série</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Não foi possível abrir as configurações do dispositivo</string>\n    <string name=\"tracking_info\">Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços monitoradores externos. Configure o monitoramento para itens individuais a partir de seus botões de monitoramento.</string>\n    <string name=\"pref_refresh_library_covers\">Atualizar as capas da biblioteca</string>\n    <string name=\"sort_by_upload_date\">Pela data de envio</string>\n    <string name=\"label_data\">Dados</string>\n    <string name=\"backup_restore_missing_sources\">Fontes faltando:</string>\n    <string name=\"invalid_backup_file_missing_manga\">O backup não possui nenhum item da biblioteca.</string>\n    <string name=\"invalid_backup_file\">Arquivo de backup inválido:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Verifica por novas capas e detalhes durante a atualização da biblioteca</string>\n    <string name=\"pref_library_update_refresh_metadata\">Atualizar os metadados automaticamente</string>\n    <string name=\"action_migrate\">Migrar</string>\n    <string name=\"action_display_comfortable_grid\">Grade confortável</string>\n    <string name=\"action_display_show_tabs\">Mostrar as abas de categoria</string>\n    <string name=\"tabs_header\">Abas</string>\n    <string name=\"page_list_empty_error\">Nenhuma página encontrada</string>\n    <string name=\"action_disable_all\">Desativar todas</string>\n    <string name=\"action_enable_all\">Ativar todas</string>\n    <string name=\"pref_show_reading_mode_summary\">Mostra de forma resumida o modo atual quando o leitor for aberto</string>\n    <string name=\"pref_show_reading_mode\">Mostrar o modo de leitura</string>\n    <string name=\"action_start\">Iniciar</string>\n    <string name=\"loader_not_implemented_error\">Fonte não encontrada</string>\n    <string name=\"action_disable\">Desativar</string>\n    <string name=\"requires_app_restart\">Requer o reinício do aplicativo para ter efeito</string>\n    <string name=\"label_network\">Rede</string>\n    <string name=\"tapping_inverted_none\">Nenhum</string>\n    <string name=\"tapping_inverted_both\">Ambos</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontal</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverter as zonas de toque</string>\n    <string name=\"unknown_status\">Estado desconhecido</string>\n    <string name=\"unknown_author\">Autor desconhecido</string>\n    <string name=\"updated_version\">Atualizado para v%1$s</string>\n    <string name=\"whats_new\">O que há de novo</string>\n    <string name=\"download_insufficient_space\">Não foi possível fazer o download dos capítulos devido ao pouco espaço de armazenamento</string>\n    <string name=\"action_sort_date_added\">Data de inclusão</string>\n    <string name=\"action_global_search_query\">Pesquisar por \\\"%1$s\\\" globalmente</string>\n    <string name=\"pref_category_reading_mode\">Modo de leitura</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"no_pinned_sources\">Você não tem fontes fixadas</string>\n    <string name=\"channel_progress\">Andamento</string>\n    <string name=\"channel_complete\">Concluído</string>\n    <string name=\"channel_errors\">Erros</string>\n    <string name=\"backup_restore_missing_trackers\">Monitoradores sem login realizado:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir a exclusão de capítulos favoritos</string>\n    <string name=\"pref_category_delete_chapters\">Excluir capítulos</string>\n    <string name=\"ext_nsfw_warning\">As fontes desta extensão podem ter conteúdo NSFW (+18)</string>\n    <string name=\"ext_nsfw_short\">+18</string>\n    <string name=\"parental_controls_info\">Isso não impede que extensões não oficiais ou potencialmente sinalizadas de maneira incorreta apresentem conteúdo NSFW (+18) no aplicativo.</string>\n    <string name=\"no_chapters_error\">Nenhum capítulo encontrado</string>\n    <string name=\"chapter_settings_updated\">Configurações padrões de capítulo atualizadas</string>\n    <string name=\"set_chapter_settings_as_default\">Definir como padrão</string>\n    <string name=\"also_set_chapter_settings_for_library\">Também aplicar a todos os itens na minha biblioteca</string>\n    <string name=\"confirm_set_chapter_settings\">Você tem certeza que quer salvar como padrão essas configurações?</string>\n    <string name=\"chapter_settings\">Configurações de capítulo</string>\n    <string name=\"share_page_info\">%1$s: %2$s, página %3$d</string>\n    <string name=\"action_search_settings\">Pesquisar nas configurações</string>\n    <string name=\"manga_from_library\">Da biblioteca</string>\n    <string name=\"downloaded_chapters\">Capítulos disponíveis offline</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa o histórico de leitura</string>\n    <string name=\"pref_incognito_mode\">Modo anônimo</string>\n    <string name=\"pref_clear_history\">Limpar o histórico</string>\n    <string name=\"clear_history_confirmation\">Você tem certeza? Todo o histórico será perdido.</string>\n    <string name=\"clear_history_completed\">Histórico excluído</string>\n    <string name=\"spen_next_page\">Próxima página</string>\n    <string name=\"spen_previous_page\">Página anterior</string>\n    <string name=\"migration_help_guide\">Guia sobre a migração de fonte</string>\n    <string name=\"pref_category_nsfw_content\">Fontes NSFW (+18)</string>\n    <string name=\"pref_show_nsfw_source\">Mostrar na lista de fontes e extensões</string>\n    <string name=\"file_picker_error\">Nenhum aplicativo de seleção de arquivos encontrado</string>\n    <string name=\"myanimelist_relogin\">Por favor, faça login no MAL novamente</string>\n    <string name=\"edge_nav\">Borda</string>\n    <string name=\"kindlish_nav\">Kindle</string>\n    <string name=\"l_nav\">Em forma de L</string>\n    <string name=\"pref_viewer_nav\">Zonas de toque</string>\n    <string name=\"track_finished_reading_date\">Data de término</string>\n    <string name=\"track_started_reading_date\">Data de início</string>\n    <string name=\"pref_dump_crash_logs_summary\">Salva os registros de erro em um arquivo para o compartilhamento com os desenvolvedores</string>\n    <string name=\"pref_dump_crash_logs\">Compartilhar os registros de travamentos</string>\n    <string name=\"action_desc\">Decrescente</string>\n    <string name=\"action_asc\">Crescente</string>\n    <string name=\"action_order_by_chapter_number\">Pelo número do capítulo</string>\n    <string name=\"action_order_by_upload_date\">Pela data de envio</string>\n    <string name=\"action_filter_tracked\">Monitorado</string>\n    <string name=\"action_display_show_number_of_items\">Mostrar o número de itens</string>\n    <string name=\"right_and_left_nav\">Direita e Esquerda</string>\n    <string name=\"pref_dual_page_split\">Dividir as páginas longas</string>\n    <string name=\"pref_dual_page_invert_summary\">Se a posição das páginas longas divididas não se adequar ao modo de leitura</string>\n    <string name=\"pref_dual_page_invert\">Inverter a posição das páginas divididas</string>\n    <string name=\"backup_restore_content_full\">Você precisará instalar quaisquer extensões que estejam faltando e depois realizar o login nos serviços de monitoramento para utilizá-los.</string>\n    <string name=\"pref_show_navigation_mode_summary\">Mostra rapidamente quando o leitor for aberto</string>\n    <string name=\"pref_show_navigation_mode\">Mostrar a sobreposição das zonas de toque</string>\n    <string name=\"nav_zone_right\">Direita</string>\n    <string name=\"nav_zone_left\">Esquerda</string>\n    <string name=\"nav_zone_next\">Próxima</string>\n    <string name=\"nav_zone_prev\">Anterior</string>\n    <string name=\"pref_dns_over_https\">DNS sobre HTTPS (DoH)</string>\n    <string name=\"none\">Nenhuma</string>\n    <string name=\"exclude\">Excluir: %s</string>\n    <string name=\"include\">Incluir: %s</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data de busca do capítulo</string>\n    <string name=\"pref_library_update_categories_details\">Os itens nas categorias excluídas não serão atualizados mesmo que eles também estejam nas categorias incluídas.</string>\n    <string name=\"pref_download_new_categories_details\">Os itens nas categorias excluídas não serão disponibilizados offline mesmo que eles também estejam nas categorias incluídas.</string>\n    <string name=\"pref_category_auto_download\">Download automático</string>\n    <string name=\"action_show_errors\">Toque para ver os detalhes</string>\n    <string name=\"update_check_eol\">Esta versão do Android não é mais suportada</string>\n    <string name=\"clipboard_copy_error\">Erro ao copiar para a área de transferência</string>\n    <string name=\"rotation_landscape\">Paisagem</string>\n    <string name=\"rotation_portrait\">Retrato</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Cria as pastas usando os títulos dos itens</string>\n    <string name=\"pref_create_folder_per_manga\">Salvar as páginas em pastas separadas</string>\n    <string name=\"pref_reader_actions\">Ações</string>\n    <string name=\"rotation_type\">Orientação</string>\n    <string name=\"pref_grayscale\">Nível de cinza</string>\n    <string name=\"notification_incognito_text\">Desabilitar o modo anônimo</string>\n    <string name=\"automatic_background\">Auto</string>\n    <string name=\"cancel_all_for_series\">Cancelar todos para esta série</string>\n    <string name=\"error_no_match\">Nenhum resultado encontrado</string>\n    <string name=\"source_unsupported\">Fonte não suportada</string>\n    <string name=\"unread\">Não lido</string>\n    <string name=\"date\">Data</string>\n    <string name=\"local_filter_order_by\">Ordenar por</string>\n    <string name=\"local_invalid_format\">Formato de capítulo inválido</string>\n    <string name=\"chapter_not_found\">Capítulo não encontrado</string>\n    <string name=\"restrictions\">Restrições: %s</string>\n    <string name=\"action_display_local_badge\">Fonte local</string>\n    <string name=\"off\">Desligado</string>\n    <string name=\"on\">Ligado</string>\n    <string name=\"error_sharing_cover\">Erro ao compartilhar a capa</string>\n    <string name=\"error_saving_cover\">Erro ao salvar a capa</string>\n    <string name=\"cover_saved\">Capa salva</string>\n    <string name=\"manga_cover\">Capa</string>\n    <string name=\"categorized_display_settings\">Configurações por categoria para ordenação</string>\n    <string name=\"tracking_guide\">Guia sobre o monitoramento</string>\n    <string name=\"information_empty_category_dialog\">Você não tem categorias ainda.</string>\n    <string name=\"action_start_downloading_now\">Começar o download agora</string>\n    <string name=\"about_dont_kill_my_app\">Algumas fabricantes possuem restrições adicionais de aplicativos que encerram os serviços em segundo plano. Este site possui mais informações sobre como corrigir este problema.</string>\n    <string name=\"restore_miui_warning\">O backup e restauração podem não funcionar corretamente se a Otimização da MIUI estiver desabilitada.</string>\n    <string name=\"pref_dark_theme_pure_black\">Modo noturno com preto absoluto</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri de Morango</string>\n    <string name=\"theme_midnightdusk\">Aurora-da-noite</string>\n    <string name=\"theme_greenapple\">Maçã-verde</string>\n    <string name=\"pref_app_theme\">Tema do aplicativo</string>\n    <string name=\"enhanced_tracking_info\">Oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados em sua biblioteca.</string>\n    <string name=\"enhanced_services\">Monitoradores aprimorados</string>\n    <string name=\"theme_monet\">Dinâmico</string>\n    <string name=\"label_background_activity\">Atividade em segundo plano</string>\n    <string name=\"pref_lowest\">Mais baixa</string>\n    <string name=\"pref_low\">Baixa</string>\n    <string name=\"pref_high\">Alta</string>\n    <string name=\"pref_highest\">Mais alta</string>\n    <string name=\"pref_hide_threshold\">Sensibilidade para ocultar o menu na rolagem</string>\n    <string name=\"pref_inverted_colors\">Invertido</string>\n    <string name=\"relative_time_today\">Hoje</string>\n    <string name=\"theme_tealturquoise\">Azul-petróleo &amp; Turquesa</string>\n    <string name=\"confirm_lock_change\">Autentique-se para confirmar a mudança</string>\n    <string name=\"label_default\">Padrão</string>\n    <string name=\"pref_category_appearance\">Aparência</string>\n    <string name=\"action_track\">Monitorar</string>\n    <string name=\"getting_started_guide\">Guia de introdução</string>\n    <string name=\"pref_tablet_ui_mode\">Interface de tablet</string>\n    <string name=\"pref_remove_exclude_categories\">Categorias ignoradas</string>\n    <string name=\"help_translate\">Ajudar a traduzir</string>\n    <string name=\"ext_app_info\">Informações</string>\n    <string name=\"ext_installer_shizuku_stopped\">O Shizuku não está em execução</string>\n    <string name=\"ext_installer_legacy\">Legado</string>\n    <string name=\"ext_installer_pref\">Instalador</string>\n    <string name=\"ext_install_service_notif\">Instalando a extensão…</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instale e inicie o Shizuku para utilizá-lo como o instalador de extensões.</string>\n    <string name=\"action_sort_count\">Total de itens</string>\n    <string name=\"pref_verbose_logging_summary\">Imprime registros detalhados no registro de eventos do sistema (reduz o desempenho do aplicativo)</string>\n    <string name=\"pref_verbose_logging\">Registro de eventos detalhado</string>\n    <string name=\"action_display_language_badge\">Idioma</string>\n    <string name=\"notification_size_warning\">Atualizações com muitos itens prejudicam as fontes e podem deixar as atualizações lentas e aumentar o uso da bateria. Toque para saber mais.</string>\n    <string name=\"label_warning\">Aviso</string>\n    <string name=\"backup_info\">Você deve manter cópias em outros locais também. Backups podem ter informações sensíveis incluindo senhas salvas; tenha cuidado se compartilhar.</string>\n    <string name=\"connected_to_wifi\">Somente no Wi-Fi</string>\n    <string name=\"update_72hour\">A cada 3 dias</string>\n    <string name=\"download_queue_size_warning\">Aviso: grandes downloads em massa podem levar as fontes a ficarem lentas e/ou começarem a bloquear o Mihon. Toque para saber mais.</string>\n    <string name=\"ext_update_all\">Atualizar tudo</string>\n    <string name=\"channel_app_updates\">Atualizações do aplicativo</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Limpar o cache de capítulos ao abrir o aplicativo</string>\n    <string name=\"clear_database_source_item_count\">%1$d itens que não estão na biblioteca no banco de dados</string>\n    <string name=\"database_clean\">Nada a ser limpo</string>\n    <string name=\"extension_api_error\">Erro ao obter as extensões disponíveis</string>\n    <string name=\"privacy_policy\">Política de privacidade</string>\n    <string name=\"pref_update_only_completely_read\">Pular itens com capítulos não lidos</string>\n    <string name=\"library_errors_help\">Para obter ajuda sobre como corrigir erros de atualização da biblioteca, veja %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Salvar como arquivo CBZ</string>\n    <string name=\"publishing_finished\">Publicação finalizada</string>\n    <string name=\"cancelled\">Cancelado</string>\n    <string name=\"on_hiatus\">Em hiato</string>\n    <string name=\"action_show_manga\">Mostrar o item</string>\n    <string name=\"pref_navigate_pan\">Navegar imagens longas</string>\n    <string name=\"pref_landscape_zoom\">Dar zoom automaticamente em imagens largas</string>\n    <string name=\"action_display_cover_only_grid\">Grade somente com capas</string>\n    <string name=\"pref_update_only_started\">Pular itens que não tiveram a leitura iniciada</string>\n    <string name=\"skipped_reason_completed\">Pulado porque a série está finalizada</string>\n    <string name=\"skipped_reason_not_caught_up\">Pulado porque há capítulos não lidos</string>\n    <string name=\"skipped_reason_not_started\">Pulado porque nenhum capítulo foi lido</string>\n    <string name=\"notification_update_error\">%1$d atualização(ões) falhou(aram)</string>\n    <string name=\"learn_more\">Toque para saber mais</string>\n    <string name=\"rotation_reverse_portrait\">Retrato invertido</string>\n    <string name=\"action_move_to_top_all_for_series\">Mover série para o começo</string>\n    <string name=\"disabled_nav\">Desativado</string>\n    <string name=\"error_saving_picture\">Erro ao salvar a imagem</string>\n    <string name=\"empty_backup_error\">Nenhuma entrada na biblioteca para fazer backup</string>\n    <string name=\"update_check_open\">Abrir no GitHub</string>\n    <string name=\"pref_clear_webview_data\">Limpar os dados da WebView</string>\n    <string name=\"webview_data_deleted\">Dados da WebView limpos</string>\n    <string name=\"action_close\">Fechar</string>\n    <string name=\"source_filter_empty_screen\">Nenhuma fonte instalada foi encontrada</string>\n    <string name=\"source_empty_screen\">Nenhuma fonte encontrada</string>\n    <string name=\"action_sort_unread_count\">Contagem de não lidos</string>\n    <string name=\"action_sort_last_manga_update\">Ultima checagem de atualização</string>\n    <string name=\"split_tall_images_summary\">Melhora o desempenho do leitor</string>\n    <string name=\"download_notifier_split_page_not_found\">Página %d não encontrada durante a divisão</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Não foi possível encontrar o caminho do arquivo da página %d</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Redefine o modo de leitura e orientação de todas as séries</string>\n    <string name=\"pref_reset_viewer_flags_success\">Todas as configurações do leitor foram redefinidas</string>\n    <string name=\"pref_reset_viewer_flags_error\">Não foi possível redefinir as configurações do leitor</string>\n    <string name=\"pref_reset_viewer_flags\">Redefinir as configurações do leitor em cada série</string>\n    <string name=\"empty_screen\">Bem, isso é esquisito</string>\n    <string name=\"ext_info_version\">Versão</string>\n    <string name=\"ext_info_language\">Idioma</string>\n    <string name=\"ext_info_age_rating\">Classificação</string>\n    <string name=\"reading_list\">Lista de Leitura</string>\n    <string name=\"wish_list\">Lista de Desejos</string>\n    <string name=\"complete_list\">Lista de Completos</string>\n    <string name=\"on_hold_list\">Lista de Pausados</string>\n    <string name=\"unfinished_list\">Lista de Inacabados</string>\n    <string name=\"network_not_metered\">Somente em redes não limitadas</string>\n    <string name=\"cant_open_last_read_chapter\">Não foi possível abrir o último capítulo lido</string>\n    <string name=\"custom_cover\">Capa personalizada</string>\n    <string name=\"not_installed\">Não instalado</string>\n    <string name=\"pref_app_language\">Idioma do aplicativo</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"description_placeholder\">Sem descrição</string>\n    <string name=\"delete_category\">Deletar categoria</string>\n    <string name=\"delete_category_confirmation\">Você deseja deletar a categoria \\\"%s\\\"?</string>\n    <string name=\"internal_error\">Erro interno: Verifique os registros de travamento para mais informações</string>\n    <string name=\"pref_user_agent_string\">User Agent padrão</string>\n    <string name=\"pref_reset_user_agent_string\">Redefinir o User Agent padrão</string>\n    <string name=\"action_remove_everything\">Remover tudo</string>\n    <string name=\"appwidget_updates_description\">Veja seus itens da biblioteca atualizados recentemente</string>\n    <string name=\"appwidget_unavailable_locked\">Widget não disponível quando o bloqueio do aplicativo está habilitado</string>\n    <string name=\"update_already_running\">Uma atualização já está em andamento</string>\n    <string name=\"error_user_agent_string_blank\">O valor do User-Agent não pode ficar em branco</string>\n    <string name=\"theme_tidalwave\">Onda Tidal</string>\n    <string name=\"download_ahead\">Fazer download a frente</string>\n    <string name=\"auto_download_while_reading\">Download automático durante a leitura</string>\n    <string name=\"download_ahead_info\">Funciona somente se o capítulo atual e próximo já estão disponíveis offline.</string>\n    <string name=\"are_you_sure\">Você tem certeza?</string>\n    <string name=\"multi_lang\">Múltiplos</string>\n    <string name=\"updates_last_update_info\">Última atualização da biblioteca: %s</string>\n    <string name=\"remove_manga\">Você está prestes a remover \\\"%s\\\" de sua biblioteca</string>\n    <string name=\"popular\">Popular</string>\n    <string name=\"missing_storage_permission\">Permissões de armazenamento não concedidas</string>\n    <string name=\"skipped_reason_not_always_update\">Pulado porque a série não requer atualizações</string>\n    <string name=\"action_search_hint\">Pesquisar…</string>\n    <string name=\"pref_appearance_summary\">Tema, formato de data e hora</string>\n    <string name=\"pref_library_summary\">Categorias, atualização global, ações do capítulo</string>\n    <string name=\"pref_reader_summary\">Modo de leitura, exibição, navegação</string>\n    <string name=\"pref_downloads_summary\">Download automático, download a frente</string>\n    <string name=\"pref_tracking_summary\">Sincronização de progresso unidirecional, sincronização aprimorada</string>\n    <string name=\"pref_browse_summary\">Fontes, extensões, pesquisa global</string>\n    <string name=\"pref_backup_summary\">Backups manuais e automáticos, espaço de armazenamento</string>\n    <string name=\"pref_security_summary\">Bloqueio do aplicativo, tela segura</string>\n    <string name=\"pref_advanced_summary\">Exportar registros de travamento, otimizações de bateria</string>\n    <string name=\"crash_screen_title\">Ooops!</string>\n    <string name=\"crash_screen_restart_application\">Reiniciar o aplicativo</string>\n    <string name=\"crash_screen_description\">%s teve um erro inesperado. Nós sugerimos que você compartilhe os registros de travamento em nosso canal de suporte no Discord.</string>\n    <string name=\"unknown_title\">Título desconhecido</string>\n    <string name=\"invalid_location\">Local inválido: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Valor de user agent inválido</string>\n    <string name=\"updates_last_update_info_just_now\">Agora</string>\n    <string name=\"download_notifier_cache_renewal\">Verificando os downloads</string>\n    <string name=\"action_open_random_manga\">Abrir um item aleatório</string>\n    <string name=\"information_no_entries_found\">Nenhum item encontrado nesta categoria</string>\n    <string name=\"fdroid_warning\">Compilações do F-Droid não são suportadas oficialmente.\n\\nToque para saber mais.</string>\n    <string name=\"action_display_show_continue_reading_button\">Botão de continuar a leitura</string>\n    <string name=\"track_remove_date_conf_title\">Remover data?</string>\n    <string name=\"track_remove_start_date_conf_text\">Isto irá remover sua data de início selecionada anteriormente no %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Isto irá remover sua data de término selecionada anteriormente no %s</string>\n    <string name=\"pref_invalidate_download_cache\">Invalidar o índice de downloads</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Força o aplicativo a checar novamente por capítulos disponíveis offline</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_downloaded\">Disponíveis offline</string>\n    <string name=\"label_overview_section\">Visão geral</string>\n    <string name=\"label_completed_titles\">Itens completos</string>\n    <string name=\"label_read_duration\">Duração de leitura</string>\n    <string name=\"label_titles_section\">Itens</string>\n    <string name=\"label_titles_in_global_update\">Na atualização global</string>\n    <string name=\"label_tracker_section\">Monitoradores</string>\n    <string name=\"label_used\">Usados</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"label_read_chapters\">Lidos</string>\n    <string name=\"label_tracked_titles\">Itens monitorados</string>\n    <string name=\"label_stats\">Estatísticas</string>\n    <string name=\"label_started\">Iniciados</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_mean_score\">Avaliação média</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_not_now\">Agora não</string>\n    <string name=\"information_no_manga_category\">A categoria está vazia</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostrar a contagem no ícone de Atualizações</string>\n    <string name=\"copied_to_clipboard_plain\">Copiado para a área de transferência</string>\n    <string name=\"enhanced_services_not_installed\">Disponíveis, mas a fonte não está instalada: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Pular capítulos duplicados</string>\n    <string name=\"confirm_add_duplicate_manga\">Você possui um item na sua biblioteca com o mesmo nome.\n\\n\n\\nVocê ainda deseja continuar?</string>\n    <string name=\"track_error\">Erro em %1$s: %2$s</string>\n    <string name=\"information_required_plain\">*obrigatório</string>\n    <string name=\"pref_hide_in_library_items\">Ocultar títulos que já estão na biblioteca</string>\n    <string name=\"action_copy_to_clipboard\">Copiar para a área de transferência</string>\n    <string name=\"action_update_category\">Atualizar categoria</string>\n    <string name=\"split_tall_images\">Dividir imagens compridas</string>\n    <string name=\"overlay_header\">Sobreposição</string>\n    <string name=\"pref_page_rotate\">Rotacionar páginas largas para caber</string>\n    <string name=\"pref_page_rotate_invert\">Inverter a orientação das páginas largas rotacionadas</string>\n    <string name=\"pref_debug_info\">Informações de depuração</string>\n    <string name=\"pref_chapter_swipe_end\">Ação de deslizar para a direita</string>\n    <string name=\"pref_chapter_swipe_start\">Ação de deslizar para a esquerda</string>\n    <string name=\"pref_double_tap_zoom\">Toque duplo para dar zoom</string>\n    <string name=\"action_sort_next_updated\">Próxima atualização esperada</string>\n    <string name=\"pref_update_only_in_release_period\">Prever a data do próximo lançamento</string>\n    <string name=\"action_set_interval\">Definir intervalo</string>\n    <string name=\"action_filter_interval_custom\">Personalizar a frequência de atualizações</string>\n    <string name=\"skipped_reason_not_in_release_period\">Pulado porque nenhum lançamento era esperado hoje</string>\n    <string name=\"intervals_header\">Intervalos</string>\n    <string name=\"manga_display_modified_interval_title\">Definido para atualizar todo</string>\n    <string name=\"manga_display_interval_title\">Estimar todo</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"track_delete_title\">Remover o monitoramento do %s?</string>\n    <string name=\"track_delete_text\">Isso irá remover o monitoramento localmente.</string>\n    <string name=\"track_delete_remote_text\">Também remover do %s</string>\n    <string name=\"delete_downloaded\">Deletar os disponíveis offline</string>\n    <string name=\"has_results\">Há resultados</string>\n    <string name=\"syncing_library\">Sincronizando a biblioteca</string>\n    <string name=\"library_sync_complete\">Sincronização da biblioteca finalizada</string>\n    <string name=\"information_cloudflare_help\">Toque aqui para obter ajuda com o Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Índice de downloads invalidado</string>\n    <string name=\"track_activity_name\">Login do monitorador</string>\n    <string name=\"create_backup_file_error\">Não foi possível criar o arquivo do backup</string>\n    <string name=\"exception_http\">HTTP %d, verifique o site na WebView</string>\n    <string name=\"exception_offline\">Sem conexão de internet</string>\n    <string name=\"exception_unknown_host\">Não foi possível resolver %s</string>\n    <string name=\"unlock_app_title\">Desbloquear o %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Mover série para o final</string>\n    <string name=\"pref_relative_format\">Datas relativas</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" ao invés de \\\"%2$s\\\"</string>\n    <string name=\"app_settings\">Configurações do aplicativo</string>\n    <string name=\"notification_updating_progress\">Atualizando a biblioteca… (%s)</string>\n    <string name=\"source_settings\">Configurações das fontes</string>\n    <string name=\"file_null_uri_error\">Nenhum arquivo selecionado</string>\n    <string name=\"label_data_storage\">Dados e armazenamento</string>\n    <string name=\"pref_flash_page_summ\">Reduz o efeito fantasma em telas e-ink</string>\n    <string name=\"pref_flash_page\">Flash ao mudar de página</string>\n    <string name=\"action_sort_tracker_score\">Avaliação no monitorador</string>\n    <string name=\"relative_time_span_never\">Nunca</string>\n    <string name=\"last_auto_backup_info\">Último backup automático feito em: %s</string>\n    <string name=\"pref_storage_usage\">Uso de armazenamento</string>\n    <string name=\"action_apply\">Aplicar</string>\n    <string name=\"action_revert_to_default\">Reverter para o padrão</string>\n    <string name=\"no_scanlators_found\">Nenhum scanlator encontrado</string>\n    <string name=\"scanlator\">Scanner</string>\n    <string name=\"exclude_scanlators\">Excluir scanlators</string>\n    <string name=\"action_create\">Criar</string>\n    <string name=\"selected\">Selecionado</string>\n    <string name=\"not_selected\">Não selecionado</string>\n    <string name=\"pref_storage_location\">Local de armazenamento</string>\n    <string name=\"pref_storage_location_info\">Usado para backups automáticos, downloads de capítulos e na fonte local.</string>\n    <string name=\"action_menu_overflow_description\">Mais opções</string>\n    <string name=\"action_bar_up_description\">Navegar para cima</string>\n    <string name=\"onboarding_storage_action_select\">Selecionar uma pasta</string>\n    <string name=\"pref_onboarding_guide\">Guia de introdução</string>\n    <string name=\"onboarding_guides_new_user\">Novo no %s? Recomendamos dar uma olhada no guia de introdução.</string>\n    <string name=\"onboarding_action_finish\">Começar</string>\n    <string name=\"onboarding_heading\">Bem-vindo(a)!</string>\n    <string name=\"onboarding_guides_returning_user\">Reinstalando o %s?</string>\n    <string name=\"onboarding_action_skip\">Pular</string>\n    <string name=\"onboarding_action_next\">Próximo</string>\n    <string name=\"onboarding_description\">Vamos definir algumas coisas primeiro. Você sempre pode fazer alterações nas configurações depois também.</string>\n    <string name=\"no_location_set\">Local de armazenamento não definido</string>\n    <string name=\"onboarding_storage_info\">Escolha uma pasta onde o %1$s irá armazenar os downloads de capítulos, backups e mais.\n\\n\n\\nUma pasta dedicada é recomendada.\n\\n\n\\nPasta selecionada: %2$s</string>\n    <string name=\"onboarding_storage_selection_required\">Uma pasta deve ser selecionada</string>\n    <string name=\"onboarding_permission_notifications\">Permissão de notificação</string>\n    <string name=\"onboarding_permission_install_apps\">Permissão de instalação de aplicativos</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Evite interrupções para tarefas longas como atualizações da biblioteca, downloads e restauração de backups.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Uso de bateria em plano de fundo</string>\n    <string name=\"onboarding_permission_install_apps_description\">Para instalar extensões de fontes.</string>\n    <string name=\"onboarding_permission_notifications_description\">Seja notificado para atualizações da biblioteca e mais.</string>\n    <string name=\"onboarding_permission_action_grant\">Conceder</string>\n    <string name=\"available_disk_space_info\">Disponível: %1$s / Total: %2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">Permissões são necessárias para instalar extensões. Toque aqui para conceder.</string>\n    <string name=\"private_settings\">Incluir configurações sensíveis (tokens de login dos monitoradores, por exemplo)</string>\n    <string name=\"manga_interval_expected_update\">Novos capítulos com previsão de serem lançados em torno de %1$s, verificando em torno de cada %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Frequência de atualização personalizada:</string>\n    <string name=\"invalid_backup_file_error\">Erro completo:</string>\n    <string name=\"error_repo_exists\">Este repositório já existe!</string>\n    <string name=\"pref_library_update_smart_update\">Atualização inteligente</string>\n    <string name=\"invalid_repo_name\">URL do repositório inválido</string>\n    <string name=\"action_add_repo_message\">Adiciona repositórios adicionais ao Mihon. Deve ser uma URL que termine com \\\"index.min.json\\\".</string>\n    <string name=\"delete_repo_confirmation\">Você deseja deletar o repositório \\\"%s\\\"?</string>\n    <string name=\"action_delete_repo\">Deletar repositório</string>\n    <string name=\"action_add_repo\">Adicionar repositório</string>\n    <string name=\"information_empty_repos\">Você não tem repositórios definidos.</string>\n    <string name=\"label_extension_repos\">Repositórios de extensões</string>\n    <string name=\"label_add_repo_input\">URL do repositório</string>\n    <string name=\"onboarding_storage_help_action\">Guia de armazenamento</string>\n    <string name=\"onboarding_storage_help_info\">Atualizando de uma versão anterior e não tem certeza do que selecionar? Consulte o guia de armazenamento para mais informações.</string>\n    <string name=\"manga_interval_expected_update_soon\">Em breve</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"ext_revoke_trust\">Revogar a confiabilidade de extensões desconhecidas</string>\n    <string name=\"action_open_repo\">Abrir repositório da fonte</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Desativar redução de zoom</string>\n    <string name=\"action_add_anyway\">Adicionar de qualquer maneira</string>\n    <string name=\"action_replace_repo\">Substituir</string>\n    <string name=\"label_upcoming\">Próximo</string>\n    <string name=\"action_migrate_duplicate\">Migrar entrada existente</string>\n    <string name=\"action_replace_repo_title\">A impressão digital da chave de assinatura já existe</string>\n    <string name=\"action_replace_repo_message\">O repositório %1$s tem a mesma impressão digital da chave de assinatura que %2$s.\n\\nSe isso for esperado, %2$s será substituído, caso contrário, entre em contato com o mantenedor do repositório.</string>\n    <string name=\"pref_display_profile\">Perfil de exibição personalizado</string>\n    <string name=\"action_view_upcoming\">Exibir as próximas atualizações</string>\n    <string name=\"upcoming_guide\">Guia de próximos lançamentos</string>\n    <string name=\"upcoming_calendar_next\">Próximo mês</string>\n    <string name=\"upcoming_calendar_prev\">Mês anterior</string>\n    <string name=\"pref_flash_style_black\">Preto</string>\n    <string name=\"pref_flash_style_white\">Branco</string>\n    <string name=\"pref_flash_style_white_black\">Branco e Preto</string>\n    <string name=\"add_repo_confirmation\">Você deseja adicionar o repositório \\\"%s\\\"?</string>\n    <string name=\"action_copy_link\">Copiar link</string>\n    <string name=\"extensionRepo_settings\">Repositório de extensões</string>\n    <string name=\"manga_interval_expected_update_null\">Esse mangá foi completado, ou não tem uma data de lançamento prevista.</string>\n    <string name=\"pref_flash_duration\">Duração do flash</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Flash a cada</string>\n    <string name=\"pref_flash_with\">Flash com</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Pule o download de capítulos duplicados já lidos</string>\n    <string name=\"confirm_tracker_update\">Atualizar rastreadores para o capítulo %d?</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Falha ao adquirir acesso a uma pasta persistente. O aplicativo pode se comportar de maneira inesperada.</string>\n    <string name=\"invalid_backup_file_json\">Backup JSON não suportado</string>\n    <string name=\"invalid_backup_file_unknown\">O arquivo de backup está corrompido</string>\n    <string name=\"label_auto\">Automático</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Envie lgos de falhas anônimas para os desenvolvedores.</string>\n    <string name=\"onboarding_permission_analytics_description\">Enviar dados de uso anônimos para melhorar os recursos do aplicativo.</string>\n    <string name=\"pref_firebase\">Análises e registros de falhas</string>\n    <string name=\"action_sort_random\">Aleatório</string>\n    <string name=\"onboarding_permission_crashlytics\">Enviar logs de falhas</string>\n    <string name=\"pref_security\">Segurança</string>\n    <string name=\"onboarding_permission_analytics\">Permitir análise</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ro/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">După %1$s minut</item>\n        <item quantity=\"few\">După %1$s minute</item>\n        <item quantity=\"other\">După %1$s de minute</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d capitol nou</item>\n        <item quantity=\"few\">%1$d capitole noi</item>\n        <item quantity=\"other\">%1$d capitole noi</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capitolele %1$s și încă unul</item>\n        <item quantity=\"few\">Capitolele %1$s și încă %2$d în plus</item>\n        <item quantity=\"other\">Capitolele %1$s și încă %2$d mai multe</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Pentru %d intrare</item>\n        <item quantity=\"few\">Pentru %d intrări</item>\n        <item quantity=\"other\">Pentru %d intrări</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Actualizare de extensie disponibilă</item>\n        <item quantity=\"few\">%d actualizări de extensii sunt disponibile</item>\n        <item quantity=\"other\">%d actualizări de extensii sunt disponibile</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s rămasă</item>\n        <item quantity=\"few\">%1$s rămase</item>\n        <item quantity=\"other\">%1$s rămase</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categorie</item>\n        <item quantity=\"few\">%d categorii</item>\n        <item quantity=\"other\">%d de categorii</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Gata în %1$s cu eroarea %2$s</item>\n        <item quantity=\"few\">Gata în %1$s cu %2$s erori</item>\n        <item quantity=\"other\">Gata în %1$s cu %2$s erori</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capitol</item>\n        <item quantity=\"few\">%1$s capitole</item>\n        <item quantity=\"other\">%1$s de capitole</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d serviciu de urmărire</item>\n        <item quantity=\"few\">%d servicii de urmărire</item>\n        <item quantity=\"other\">%d de servicii de urmărire</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Omiterea %d capitol, fie că sursa lipsește, fie că a fost filtrată</item>\n        <item quantity=\"few\">Omiterea a %d capitole, fie că sursa nu le are, fie că au fost filtrate</item>\n        <item quantity=\"other\">Omiterea a %d capitole, fie că sursa nu le are, fie că au fost filtrate</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Ieri</item>\n        <item quantity=\"few\">Acum %1$d zile</item>\n        <item quantity=\"other\">Acum %1$d de zile</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Următorul capitol necitit</item>\n        <item quantity=\"few\">Următoarele %d capitole necitite</item>\n        <item quantity=\"other\">Următoarele %d de capitole necitite</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Următorul capitol</item>\n        <item quantity=\"few\">Următoarele %d capitole</item>\n        <item quantity=\"other\">Următoarele %d capitole</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Lipsește %1$s capitol</item>\n        <item quantity=\"few\">Lipsesc %1$s capitole</item>\n        <item quantity=\"other\">Lipsesc %1$s capitole</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">O zi</item>\n        <item quantity=\"few\">%d zile</item>\n        <item quantity=\"other\">%d zile</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d repozitoriu</item>\n        <item quantity=\"few\">%d repozitorii</item>\n        <item quantity=\"other\">%d de repozitorii</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Mâine</item>\n        <item quantity=\"few\">În %1$d zile</item>\n        <item quantity=\"other\">În %1$d de zile</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">O pagină</item>\n        <item quantity=\"few\">%1$s pagini</item>\n        <item quantity=\"other\">%1$s de pagini</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ro/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nume</string>\n    <string name=\"categories\">Categorii</string>\n    <string name=\"manga\">Intrări în bibliotecă</string>\n    <string name=\"chapters\">Capitole</string>\n    <string name=\"track\">Urmărind</string>\n    <string name=\"history\">Istoric</string>\n    <string name=\"label_settings\">Setări</string>\n    <string name=\"label_download_queue\">Coadă de descărcări</string>\n    <string name=\"label_library\">Bibliotecă</string>\n    <string name=\"label_recent_manga\">Istoric</string>\n    <string name=\"label_recent_updates\">Actualizări</string>\n    <string name=\"label_backup\">Backup și restaurare</string>\n    <string name=\"label_migration\">Migrează</string>\n    <string name=\"label_extensions\">Extensii</string>\n    <string name=\"label_extension_info\">Informații extensie</string>\n    <string name=\"action_settings\">Setări</string>\n    <string name=\"action_filter\">Filtru</string>\n    <string name=\"action_filter_bookmarked\">Marcate</string>\n    <string name=\"action_filter_unread\">Necitite</string>\n    <string name=\"action_filter_empty\">Șterge filtru</string>\n    <string name=\"action_sort_alpha\">Alfabetic</string>\n    <string name=\"action_sort_total\">Total capitole</string>\n    <string name=\"action_sort_last_read\">Citite recent</string>\n    <string name=\"action_search\">Caută</string>\n    <string name=\"action_global_search\">Caută global</string>\n    <string name=\"action_select_all\">Selectează tot</string>\n    <string name=\"action_mark_as_read\">Marchează ca citit</string>\n    <string name=\"action_mark_as_unread\">Marchează ca necitit</string>\n    <string name=\"action_mark_previous_as_read\">Marchează capitolele precedente ca citite</string>\n    <string name=\"action_download\">Descarcă</string>\n    <string name=\"action_bookmark\">Marchează Capitolul</string>\n    <string name=\"action_remove_bookmark\">Demarcați capitolul</string>\n    <string name=\"action_delete\">Șterge</string>\n    <string name=\"action_update_library\">Actualizează biblioteca</string>\n    <string name=\"action_edit\">Modifică</string>\n    <string name=\"action_add\">Adaugă</string>\n    <string name=\"action_add_category\">Adaugă categorie</string>\n    <string name=\"action_edit_categories\">Modifică categoriile</string>\n    <string name=\"action_rename_category\">Redenumește categoria</string>\n    <string name=\"action_move_category\">Setați categoriile</string>\n    <string name=\"action_edit_cover\">Modifică coperta</string>\n    <string name=\"action_pause\">Pauză</string>\n    <string name=\"action_previous_chapter\">Capitolul anterior</string>\n    <string name=\"action_next_chapter\">Capitolul următor</string>\n    <string name=\"action_retry\">Reîncearcă</string>\n    <string name=\"action_remove\">Șterge</string>\n    <string name=\"action_resume\">Continuă</string>\n    <string name=\"action_open_in_browser\">Deschide în browser</string>\n    <string name=\"action_display_mode\">Modul de afișare</string>\n    <string name=\"action_display\">Afișare</string>\n    <string name=\"action_display_grid\">Grilă compactă</string>\n    <string name=\"action_display_list\">Listă</string>\n    <string name=\"action_cancel\">Anulează</string>\n    <string name=\"action_sort\">Sortează</string>\n    <string name=\"action_install\">Instalează</string>\n    <string name=\"action_share\">Distribuie</string>\n    <string name=\"action_save\">Salvează</string>\n    <string name=\"action_reset\">Resetează</string>\n    <string name=\"action_undo\">Anulează</string>\n    <string name=\"action_open_log\">Deschide jurnal</string>\n    <string name=\"action_restore\">Restaurează</string>\n    <string name=\"loading\">Se încarcă…</string>\n    <string name=\"app_not_available\">Aplicația nu este accesibilă</string>\n    <string name=\"pref_category_general\">Generale</string>\n    <string name=\"pref_category_reader\">Cititor</string>\n    <string name=\"pref_category_downloads\">Descărcări</string>\n    <string name=\"pref_category_tracking\">Urmărite</string>\n    <string name=\"pref_category_advanced\">Avansat</string>\n    <string name=\"pref_category_about\">Despre</string>\n    <string name=\"pref_library_columns\">Elemente pe rând</string>\n    <string name=\"portrait\">Portret</string>\n    <string name=\"pref_library_update_interval\">Actualizări automate</string>\n    <string name=\"update_never\">Oprit</string>\n    <string name=\"update_6hour\">La fiecare 6 ore</string>\n    <string name=\"update_12hour\">La fiecare 12 ore</string>\n    <string name=\"update_24hour\">Zilnic</string>\n    <string name=\"update_48hour\">La fiecare 2 zile</string>\n    <string name=\"update_weekly\">Săptămânal</string>\n    <string name=\"all\">Toate</string>\n    <string name=\"pref_library_update_restriction\">Actualizează automat restricțiile dispozitivului</string>\n    <string name=\"charging\">La încărcare</string>\n    <string name=\"pref_update_only_non_completed\">Cu statutul \\\"Completată\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Actualizarea progresului după citire</string>\n    <string name=\"default_category\">Categorie implicită</string>\n    <string name=\"default_category_summary\">Întreabă mereu</string>\n    <string name=\"ext_update\">Actualizează</string>\n    <string name=\"ext_install\">Instalează</string>\n    <string name=\"ext_pending\">În așteptare</string>\n    <string name=\"ext_downloading\">Se descarcă</string>\n    <string name=\"ext_installing\">În curs de instalare</string>\n    <string name=\"ext_installed\">Instalată</string>\n    <string name=\"ext_trust\">Ai încredere</string>\n    <string name=\"ext_untrusted\">Nesigură</string>\n    <string name=\"ext_uninstall\">Dezinstalează</string>\n    <string name=\"untrusted_extension\">Extensie nesigură</string>\n    <string name=\"untrusted_extension_message\">Extensiile rău intenționate pot citi orice credențiale de autentificare stocate sau pot executa cod arbitrar.\n\\n\n\\nAcordând încredere acestei extensii, acceptați aceste riscuri.</string>\n    <string name=\"pref_fullscreen\">Ecran complet</string>\n    <string name=\"pref_page_transitions\">Animați tranzițiile de pagini</string>\n    <string name=\"action_display_download_badge\">Capitole descărcate</string>\n    <string name=\"landscape\">Peisaj</string>\n    <string name=\"pref_double_tap_anim_speed\">Viteza de animație pentru apăsare dublă</string>\n    <string name=\"pref_show_page_number\">Arată numărul paginii</string>\n    <string name=\"pref_crop_borders\">Taie marginile</string>\n    <string name=\"pref_custom_brightness\">Luminozitate personalizată</string>\n    <string name=\"pref_custom_color_filter\">Filtru color personalizat</string>\n    <string name=\"pref_keep_screen_on\">Păstrează ecranul pornit</string>\n    <string name=\"pref_reader_navigation\">Navigare</string>\n    <string name=\"pref_read_with_volume_keys\">Butoane de volum</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inversează butoanele de volum</string>\n    <string name=\"pref_reader_theme\">Culoare de fundal</string>\n    <string name=\"white_background\">Alb</string>\n    <string name=\"black_background\">Negru</string>\n    <string name=\"pref_viewer_type\">Mod de citire implicit</string>\n    <string name=\"left_to_right_viewer\">De la stânga la dreapta</string>\n    <string name=\"right_to_left_viewer\">De la dreapta la stânga</string>\n    <string name=\"vertical_viewer\">Paginat (vertical)</string>\n    <string name=\"webtoon_viewer\">Benzi desenate web</string>\n    <string name=\"pager_viewer\">Setări pagini</string>\n    <string name=\"pref_image_scale_type\">Tip de scalare</string>\n    <string name=\"scale_type_fit_screen\">Potrivește ecran</string>\n    <string name=\"scale_type_stretch\">Întinde</string>\n    <string name=\"scale_type_fit_width\">Potrivește pe lățime</string>\n    <string name=\"scale_type_fit_height\">Potrivește pe înălțime</string>\n    <string name=\"scale_type_original_size\">Mărimea originală</string>\n    <string name=\"scale_type_smart_fit\">Potrivire inteligentă</string>\n    <string name=\"pref_zoom_start\">Poziție inițială de mărire</string>\n    <string name=\"zoom_start_automatic\">Automat</string>\n    <string name=\"zoom_start_left\">Stânga</string>\n    <string name=\"zoom_start_right\">Dreapta</string>\n    <string name=\"zoom_start_center\">Centru</string>\n    <string name=\"double_tap_anim_speed_0\">Fără animație</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Rapid</string>\n    <string name=\"pref_rotation_type\">Tipul de rotație implicit</string>\n    <string name=\"rotation_free\">Liberă</string>\n    <string name=\"rotation_force_portrait\">Portret blocat</string>\n    <string name=\"rotation_force_landscape\">Peisaj blocat</string>\n    <string name=\"color_filter_r_value\">Roșu</string>\n    <string name=\"color_filter_g_value\">Verde</string>\n    <string name=\"color_filter_b_value\">Albastru</string>\n    <string name=\"color_filter_a_value\">Alfa</string>\n    <string name=\"pref_remove_after_marked_as_read\">După ce a fost marcat manual ca citit</string>\n    <string name=\"pref_remove_after_read\">După citire ștergeți automat</string>\n    <string name=\"disabled\">Deactivat</string>\n    <string name=\"last_read_chapter\">Ultimul capitol citit</string>\n    <string name=\"second_to_last\">Penultimul capitol citit</string>\n    <string name=\"third_to_last\">Al treilea până la ultimul capitol citit</string>\n    <string name=\"fourth_to_last\">Al patrulea până la ultimul capitol citit</string>\n    <string name=\"fifth_to_last\">Al cincilea până la ultimul capitol citit</string>\n    <string name=\"pref_download_new\">Descarcă capitole noi</string>\n    <string name=\"services\">Servicii de urmărire</string>\n    <string name=\"pref_create_backup\">Crează copie de rezervă</string>\n    <string name=\"pref_create_backup_summ\">Poate fii folosit pentru a restaura biblioteca curentă</string>\n    <string name=\"pref_restore_backup\">Restaurează un backup</string>\n    <string name=\"pref_restore_backup_summ\">Restaurează biblioteca din fișierul de backup</string>\n    <string name=\"pref_backup_interval\">Frecvența de creare a backupurilor automate</string>\n    <string name=\"backup_created\">Backup creat</string>\n    <string name=\"restore_completed\">Restaurare completă</string>\n    <string name=\"backup_choice\">Doriți să creați o copie de rezervă?</string>\n    <string name=\"restoring_backup\">Restaurând copia de rezervă</string>\n    <string name=\"creating_backup\">Creând copia de rezervă</string>\n    <string name=\"pref_clear_chapter_cache\">Curățare capitole depozitate</string>\n    <string name=\"used_cache\">Folosit: %1$s</string>\n    <string name=\"cache_deleted\">Depozit curățat. %1$d fișiere au fost șterse</string>\n    <string name=\"cache_delete_error\">A apărut o eroare în timpul ștergerii</string>\n    <string name=\"pref_clear_cookies\">Curăță cookies</string>\n    <string name=\"cookies_cleared\">Cookies curățate</string>\n    <string name=\"pref_clear_database\">Curățați baza de date</string>\n    <string name=\"pref_clear_database_summary\">Ștergeți istoricul pentru intrările care nu sunt salvate în bibliotecă</string>\n    <string name=\"clear_database_confirmation\">Ești sigur? Capitolele citite și progresul înregistrărilor din afara bibliotecii vor fi pierdute</string>\n    <string name=\"clear_database_completed\">Înregistrări șterse</string>\n    <string name=\"version\">Versiune</string>\n    <string name=\"pref_enable_acra\">Trimite rapoarte pt. eșuări</string>\n    <string name=\"pref_acra_summary\">Ajută la rezolvarea bug-urilor. Informațiile sensibile nu vor fi trimise</string>\n    <string name=\"login_title\">Conectați-vă la %1$s</string>\n    <string name=\"username\">Nume de utilizator</string>\n    <string name=\"password\">Parolă</string>\n    <string name=\"login\">Autentificare</string>\n    <string name=\"login_success\">Autentificat</string>\n    <string name=\"unknown_error\">Eroare necunoscută</string>\n    <string name=\"updating_category\">Categorie in curs de actualizare</string>\n    <string name=\"no_more_results\">Nu mai sunt rezultate</string>\n    <string name=\"local_source\">Sursă locală</string>\n    <string name=\"other_source\">Altele</string>\n    <string name=\"action_global_search_hint\">Căutare globală…</string>\n    <string name=\"latest\">Cel mai recent</string>\n    <string name=\"browse\">Caută</string>\n    <string name=\"ongoing\">În desfășurare</string>\n    <string name=\"unknown\">Necunoscut</string>\n    <string name=\"licensed\">Licențiat</string>\n    <string name=\"remove_from_library\">Elimină din bibliotecă</string>\n    <string name=\"manga_added_library\">Adăugat la bibliotecă</string>\n    <string name=\"manga_removed_library\">Eliminat din bibliotecă</string>\n    <string name=\"delete_downloads_for_manga\">Ștergeți capitolele descărcate?</string>\n    <string name=\"copied_to_clipboard\">Copiat în clipboard:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Sursa nu este instalată:%1$s</string>\n    <string name=\"display_mode_chapter\">Capitolul %1$s</string>\n    <string name=\"chapter_downloading_progress\">Se descarcă (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Eroare</string>\n    <string name=\"chapter_paused\">Întrerupt</string>\n    <string name=\"show_title\">Titlul sursei</string>\n    <string name=\"show_chapter_number\">Numărul capitolului</string>\n    <string name=\"sort_by_source\">După sursă</string>\n    <string name=\"sort_by_number\">După numărul capitolului</string>\n    <string name=\"manga_download\">Descarcă</string>\n    <string name=\"download_unread\">Necitit</string>\n    <string name=\"confirm_delete_chapters\">Sigur doriți să ștergeți capitolele selectate?</string>\n    <string name=\"manga_tracking_tab\">Urmărite</string>\n    <string name=\"reading\">Citind</string>\n    <string name=\"completed\">Completată</string>\n    <string name=\"dropped\">Abandonată</string>\n    <string name=\"on_hold\">În așteptare</string>\n    <string name=\"plan_to_read\">Planificat pentru citit</string>\n    <string name=\"repeating\">Recitind</string>\n    <string name=\"score\">Scor</string>\n    <string name=\"title\">Titlu</string>\n    <string name=\"status\">Status</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Tip</string>\n    <string name=\"error_category_exists\">O categorie cu acest nume deja există!</string>\n    <string name=\"snack_categories_deleted\">Categoriile au fost șterse</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Acest lucru va șterge data citirii acestui capitol. Ești sigur?</string>\n    <string name=\"dialog_with_checkbox_reset\">Resetați toate capitolele pentru această intrare</string>\n    <string name=\"snack_add_to_library\">Adăugați la bibliotecă?</string>\n    <string name=\"picture_saved\">Imagine salvată</string>\n    <string name=\"custom_filter\">Filtru personalizat</string>\n    <string name=\"set_as_cover\">Stabilește ca și copertă</string>\n    <string name=\"cover_updated\">Copertă actualizată</string>\n    <string name=\"chapter_progress\">Pagina: %1$d</string>\n    <string name=\"no_next_chapter\">Capitolul următor nu a fost găsit</string>\n    <string name=\"decode_image_error\">Imaginea nu a putut să se încarce</string>\n    <string name=\"confirm_set_image_as_cover\">Folosiți această imagine ca și copertă?</string>\n    <string name=\"transition_finished\">Terminat:</string>\n    <string name=\"transition_current\">Actual:</string>\n    <string name=\"transition_next\">Următorul:</string>\n    <string name=\"transition_previous\">Precedent:</string>\n    <string name=\"transition_no_next\">Nu există capitolul următor</string>\n    <string name=\"transition_no_previous\">Nu există capitolul precedent</string>\n    <string name=\"transition_pages_loading\">Paginile se încarcă…</string>\n    <string name=\"transition_pages_error\">Încărcarea paginilor a eșuat: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Selectați ce date să fie incluse</string>\n    <string name=\"migrate\">Migrează</string>\n    <string name=\"copy\">Copiază</string>\n    <string name=\"download_queue_error\">Nu s-au putut descărca capitole. Puteți încerca din nou în secțiunea descărcări</string>\n    <string name=\"notification_new_chapters\">Capitole noi găsite</string>\n    <string name=\"notification_cover_update_failed\">Actualizarea copertei a eșuat</string>\n    <string name=\"notification_first_add_to_library\">Vă rugăm să adăugați intrarea în biblioteca dumneavoastră înainte de a face acest lucru</string>\n    <string name=\"file_select_cover\">Selectează imagine de copertă</string>\n    <string name=\"file_select_backup\">Selectează fișierul de rezervă</string>\n    <string name=\"update_check_confirm\">Descarcă</string>\n    <string name=\"update_check_no_new_updates\">Nu sunt exista actualizări noi</string>\n    <string name=\"update_check_notification_download_in_progress\">Se descarcă…</string>\n    <string name=\"update_check_notification_download_complete\">Apăsați pentru a instala actualizarea</string>\n    <string name=\"update_check_notification_download_error\">Eroare la descărcare</string>\n    <string name=\"update_check_notification_update_available\">Versiune nouă disponibilă!</string>\n    <string name=\"information_no_downloads\">Fără descărcări</string>\n    <string name=\"information_no_recent\">Nu există actualizări recente</string>\n    <string name=\"information_no_recent_manga\">Nimic citit recent</string>\n    <string name=\"information_empty_library\">Biblioteca este goală</string>\n    <string name=\"information_empty_category\">Nu aveți categorii. Apăsați butonul plus pentru a crea una pentru a vă organiza biblioteca.</string>\n    <string name=\"download_notifier_downloader_title\">Client de descărcare</string>\n    <string name=\"download_notifier_title_error\">Eroare</string>\n    <string name=\"download_notifier_unknown_error\">Nu s-a putut descărca capitolul din cauza unei erori neașteptate</string>\n    <string name=\"download_notifier_text_only_wifi\">Nu este disponibilă nicio conexiune Wi Fi</string>\n    <string name=\"download_notifier_no_network\">Nici o conexiune la internet valabilă</string>\n    <string name=\"download_notifier_download_paused\">Descărcare întreruptă</string>\n    <string name=\"channel_common\">General</string>\n    <string name=\"action_open_in_web_view\">Deschide în WebView</string>\n    <string name=\"pref_color_filter_mode\">Mod filtru de culoare</string>\n    <string name=\"filter_mode_overlay\">Acoperire</string>\n    <string name=\"filter_mode_multiply\">Înmulțește</string>\n    <string name=\"filter_mode_screen\">Ecran</string>\n    <string name=\"filter_mode_lighten\">Luminează</string>\n    <string name=\"filter_mode_darken\">Întunecă</string>\n    <string name=\"pref_skip_read_chapters\">Treci peste capitolele marcate ca Citit</string>\n    <string name=\"pref_read_with_long_tap\">Afișare la atingerea lungă</string>\n    <string name=\"label_help\">Ajutor</string>\n    <string name=\"no_results_found\">Nici un rezultat găsit</string>\n    <string name=\"migration_selection_prompt\">Selectați o sursă din care să migrați</string>\n    <string name=\"action_webview_back\">Înapoi</string>\n    <string name=\"action_webview_forward\">Înainte</string>\n    <string name=\"action_webview_refresh\">Actualizați</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"ext_obsolete\">Învechit</string>\n    <string name=\"obsolete_extension_message\">Această extensie nu mai este disponibilă. Este posibil să nu funcționeze corect și poate cauza probleme cu aplicația. Se recomandă dezinstalarea acesteia.</string>\n    <string name=\"pref_date_format\">Formatul datei</string>\n    <string name=\"pref_category_library_update\">Actualizare globală</string>\n    <string name=\"logout_title\">Deconectează-te de la %1$s?</string>\n    <string name=\"logout\">Deconectează-te</string>\n    <string name=\"logout_success\">Acum ești deconectat</string>\n    <string name=\"paused\">Întrerupt</string>\n    <string name=\"label_more\">Mai multe</string>\n    <string name=\"action_view_chapters\">Vezi capitolele</string>\n    <string name=\"action_cancel_all\">Anulează tot</string>\n    <string name=\"theme_light\">Oprită</string>\n    <string name=\"theme_dark\">Pornită</string>\n    <string name=\"theme_system\">Tema sistemului</string>\n    <string name=\"pref_manage_notifications\">Gestionați notificările</string>\n    <string name=\"pref_category_security\">Securitate și confidențialitate</string>\n    <string name=\"lock_with_biometrics\">Necesită deblocare</string>\n    <string name=\"action_sort_latest_chapter\">Cel mai recent capitol</string>\n    <string name=\"lock_when_idle\">Blocați când este inactiv</string>\n    <string name=\"lock_always\">Întotdeauna</string>\n    <string name=\"lock_never\">Niciodată</string>\n    <string name=\"secure_screen\">Securizează ecran</string>\n    <string name=\"ext_updates_pending\">Actualizări în așteptare</string>\n    <string name=\"pref_cutout_short\">Afișare conținut în zona decupată</string>\n    <string name=\"information_cloudflare_bypass_failure\">A eșuat evitarea Cloudflare</string>\n    <string name=\"information_webview_outdated\">Actualizați aplicația WebView pentru o compatibilitate mai bună</string>\n    <string name=\"channel_new_chapters\">Actualizări de capitole</string>\n    <string name=\"secure_screen_summary\">Ecranul securizat ascunde conținutul aplicațiilor la schimbarea aplicațiilor și blochează capturile de ecran</string>\n    <string name=\"pref_category_display\">Afișare</string>\n    <string name=\"notification_chapters_single\">Capitolul %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Capitolul %1$s și %2$d în plus</string>\n    <string name=\"notification_chapters_multiple\">Capitolele %1$s</string>\n    <string name=\"hide_notification_content\">Ascunde conținutul notificării</string>\n    <string name=\"pref_disable_battery_optimization\">Dezactivați optimizarea bateriei</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Ajută la actualizările și copiile de rezervă ale bibliotecii în fundal</string>\n    <string name=\"battery_optimization_disabled\">Optimizarea bateriei este deja dezactivată</string>\n    <string name=\"email\">Adresa de e-mail</string>\n    <string name=\"pref_always_show_chapter_transition\">Arată întotdeauna tranziția capitolului</string>\n    <string name=\"action_menu\">Meniu</string>\n    <string name=\"action_newest\">Cele mai recente</string>\n    <string name=\"action_oldest\">Cele mai vechi</string>\n    <string name=\"action_move_to_top\">Mută pe prima poziție</string>\n    <string name=\"action_move_to_bottom\">Mută pe ultima poziție</string>\n    <string name=\"channel_ext_updates\">Actualizări de extensie</string>\n    <string name=\"updating_library\">Se actualizează biblioteca</string>\n    <string name=\"pref_category_reading\">Citind</string>\n    <string name=\"pref_skip_filtered_chapters\">Săriți peste capitolele filtrate</string>\n    <string name=\"label_sources\">Surse</string>\n    <string name=\"action_select_inverse\">Selectează invers</string>\n    <string name=\"vertical_plus_viewer\">Vertical continuu</string>\n    <string name=\"pinned_sources\">Fixate</string>\n    <string name=\"pref_webtoon_side_padding\">Căptușeală laterală</string>\n    <string name=\"action_unpin\">Anulați fixarea</string>\n    <string name=\"action_pin\">Fixează</string>\n    <string name=\"add_tracking\">Urmărește</string>\n    <string name=\"in_library\">În bibliotecă</string>\n    <string name=\"add_to_library\">Adaugă în bibliotecă</string>\n    <string name=\"information_webview_required\">WebView este necesar pentru Mihon</string>\n    <string name=\"recent_manga_time\">Ch. %1$s - %2$s</string>\n    <string name=\"manga_info_collapse\">Mai puțin</string>\n    <string name=\"manga_info_expand\">Mai mult</string>\n    <string name=\"licenses\">Licențele open source</string>\n    <string name=\"website\">Pagină web</string>\n    <string name=\"restoring_backup_error\">Restaurarea copiei de rezervă a eșuat</string>\n    <string name=\"creating_backup_error\">Crearea copiei de rezervă a eșuat</string>\n    <string name=\"label_downloaded_only\">Doar descărcate</string>\n    <string name=\"restoring_backup_canceled\">Restaurare anulată</string>\n    <string name=\"restore_in_progress\">Restaurarea este deja în curs de desfășurare</string>\n    <string name=\"backup_in_progress\">Crearea copiei de rezervă este deja în curs de desfășurare</string>\n    <string name=\"local_source_help_guide\">Ghid sursă locală</string>\n    <string name=\"last_used_source\">Data ultimei utilizări</string>\n    <string name=\"check_for_updates\">Verifică pentru actualizări</string>\n    <string name=\"restore_duration\">%1$02d minute, %2$02d secunde</string>\n    <string name=\"downloaded_only_summary\">Filtrează toate intrările din bibliotecă</string>\n    <string name=\"viewer\">Mod de citire</string>\n    <string name=\"pref_category_for_this_series\">Pentru această serie</string>\n    <string name=\"gray_background\">Gri</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Imposibil de deschis setările dispozitivului</string>\n    <string name=\"tracking_info\">Sincronizare unidirecțională pentru actualizarea progresului capitolului în cadrul serviciilor de urmărire. Configurați urmărirea pentru intrările individuale din butonul de urmărire al acestora.</string>\n    <string name=\"pref_refresh_library_covers\">Reîmprospătarea coperților bibliotecii</string>\n    <string name=\"sort_by_upload_date\">După data încărcării</string>\n    <string name=\"backup_restore_missing_sources\">Surse lipsă:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Copia de rezervă nu conține nicio intrare în bibliotecă.</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Verifica dacă exista copertă și detalii noi când biblioteca este actualizată</string>\n    <string name=\"pref_library_update_refresh_metadata\">Actualizează metadata-ul automat</string>\n    <string name=\"action_display_comfortable_grid\">Grilă confortabilă</string>\n    <string name=\"action_migrate\">Migrează</string>\n    <string name=\"label_data\">Date</string>\n    <string name=\"invalid_backup_file\">Fișier de rezervă invalid:</string>\n    <string name=\"page_list_empty_error\">Nu s-au găsit pagini</string>\n    <string name=\"tabs_header\">Tab-uri</string>\n    <string name=\"action_display_show_tabs\">Afișează filele categoriei</string>\n    <string name=\"action_disable_all\">Dezactivați toate</string>\n    <string name=\"action_enable_all\">Activează toate</string>\n    <string name=\"pref_show_reading_mode_summary\">Afișați scurt modul curent când este deschis cititorul</string>\n    <string name=\"pref_show_reading_mode\">Arată modul de citire</string>\n    <string name=\"label_network\">Reţea</string>\n    <string name=\"loader_not_implemented_error\">Nu s-a găsit sursa</string>\n    <string name=\"requires_app_restart\">Necesită repornirea aplicației pentru a avea efect</string>\n    <string name=\"action_disable\">Dezactivați</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"tapping_inverted_both\">Ambele</string>\n    <string name=\"tapping_inverted_vertical\">Vertical</string>\n    <string name=\"tapping_inverted_horizontal\">Orizontal</string>\n    <string name=\"tapping_inverted_none\">Nici unul</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inversați zonele de atingere</string>\n    <string name=\"unknown_status\">Stare necunoscută</string>\n    <string name=\"unknown_author\">Autor necunoscut</string>\n    <string name=\"updated_version\">Actualizat la v%1$s</string>\n    <string name=\"whats_new\">Ce este nou</string>\n    <string name=\"download_insufficient_space\">Nu s-au putut descărca capitole din cauza spațiului de stocare redus</string>\n    <string name=\"action_global_search_query\">Căutați „%1$s” la nivel global</string>\n    <string name=\"pref_category_reading_mode\">Mod citire</string>\n    <string name=\"pref_category_theme\">Temă</string>\n    <string name=\"action_sort_date_added\">Data adăugării</string>\n    <string name=\"channel_errors\">Erori</string>\n    <string name=\"channel_complete\">Terminat</string>\n    <string name=\"channel_progress\">Progresul</string>\n    <string name=\"backup_restore_missing_trackers\">Serviciile de urmărire nu sunt conectate la:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permite ștergerea capitolelor marcate</string>\n    <string name=\"pref_category_delete_chapters\">Ștergeți capitole</string>\n    <string name=\"ext_nsfw_warning\">Sursele din această extensie pot avea conținut NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">Peste 18</string>\n    <string name=\"parental_controls_info\">Acest lucru nu împiedică extensiile neoficiale sau potențial semnalizate incorect să iasă la suprafață cu conținut 18+ în cadrul aplicației.</string>\n    <string name=\"no_pinned_sources\">Nu aveți surse fixate</string>\n    <string name=\"no_chapters_error\">Nu a fost găsit niciun capitol</string>\n    <string name=\"chapter_settings_updated\">S-au actualizat setările implicite ale capitolului</string>\n    <string name=\"share_page_info\">%1$s: %2$s, pagina %3$d</string>\n    <string name=\"set_chapter_settings_as_default\">Setați ca implicit</string>\n    <string name=\"also_set_chapter_settings_for_library\">Se aplică, de asemenea, tuturor intrărilor din biblioteca mea</string>\n    <string name=\"confirm_set_chapter_settings\">Sigur doriți să salvați aceste setări ca implicite?</string>\n    <string name=\"chapter_settings\">Setările capitolului</string>\n    <string name=\"downloaded_chapters\">Capitole descărcate</string>\n    <string name=\"manga_from_library\">Din bibliotecă</string>\n    <string name=\"action_search_settings\">Setări de căutare</string>\n    <string name=\"pref_incognito_mode_summary\">Întrerupe citirea istoricului</string>\n    <string name=\"pref_incognito_mode\">Modul incognito</string>\n    <string name=\"pref_clear_history\">Sterge istoricul</string>\n    <string name=\"clear_history_confirmation\">Esti sigur? Toată istoria va fi pierdută.</string>\n    <string name=\"clear_history_completed\">Istoricul a fost șters</string>\n    <string name=\"spen_next_page\">Pagina următoare</string>\n    <string name=\"spen_previous_page\">Pagina anterioară</string>\n    <string name=\"migration_help_guide\">Ghid de migrare a sursei</string>\n    <string name=\"pref_category_nsfw_content\">Conținut NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Afișați în listele de surse și extensii</string>\n    <string name=\"file_picker_error\">Nicio aplicație de ales fișiere nu a fost găsite</string>\n    <string name=\"myanimelist_relogin\">Te rugăm să te loghezi la MAL din nou</string>\n    <string name=\"pref_dual_page_invert\">Inversează plasamentul paginilor duble despărțite</string>\n    <string name=\"pref_dual_page_split\">Împărțire pagini duble</string>\n    <string name=\"pref_show_navigation_mode_summary\">Afișați pe scurt când cititorul este deschis</string>\n    <string name=\"pref_show_navigation_mode\">Afișați suprapunerea zonelor de atingere</string>\n    <string name=\"action_desc\">Descendent</string>\n    <string name=\"action_asc\">Ascendent</string>\n    <string name=\"action_order_by_chapter_number\">După numărul capitolului</string>\n    <string name=\"action_order_by_upload_date\">După data postării</string>\n    <string name=\"exclude\">Excludeți: %s</string>\n    <string name=\"include\">Includeți: %s</string>\n    <string name=\"pref_library_update_categories_details\">Înscrierile din categoriile excluse nu vor fi actualizate, chiar dacă acestea se află și în categoriile incluse.</string>\n    <string name=\"action_show_errors\">Atingeți pentru a vedea detaliile</string>\n    <string name=\"action_display_show_number_of_items\">Afișare număr de elemente</string>\n    <string name=\"none\">Nici unul</string>\n    <string name=\"pref_dns_over_https\">DNS prin HTTPS (DoH)</string>\n    <string name=\"track_finished_reading_date\">Data de terminare</string>\n    <string name=\"track_started_reading_date\">Data începerii</string>\n    <string name=\"pref_dump_crash_logs\">Aruncați jurnalele de erori fatale</string>\n    <string name=\"pref_dump_crash_logs_summary\">Salvează jurnalele de erori într-un fișier pentru partajarea cu dezvoltatorii</string>\n    <string name=\"pref_viewer_nav\">Zone de atingere</string>\n    <string name=\"edge_nav\">Margine</string>\n    <string name=\"kindlish_nav\">Similar unui Kindle</string>\n    <string name=\"l_nav\">În formă de L</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data obținerii capitolului</string>\n    <string name=\"action_filter_tracked\">Urmărit</string>\n    <string name=\"backup_restore_content_full\">Este posibil să fie necesar să instalați extensiile lipsă și să vă conectați ulterior la serviciile de urmărire pentru a le utiliza.</string>\n    <string name=\"pref_download_new_categories_details\">Nu vor fi descărcate înscrierile din categoriile excluse, chiar dacă acestea se află și în categoriile incluse.</string>\n    <string name=\"pref_category_auto_download\">Descărcare automată</string>\n    <string name=\"nav_zone_right\">Dreapta</string>\n    <string name=\"nav_zone_left\">Stânga</string>\n    <string name=\"nav_zone_next\">Următorul</string>\n    <string name=\"nav_zone_prev\">Anterior</string>\n    <string name=\"right_and_left_nav\">Dreapta și stânga</string>\n    <string name=\"pref_dual_page_invert_summary\">Dacă amplasarea divizării duble a paginii nu corespunde cu direcția de citire</string>\n    <string name=\"update_check_eol\">Această versiune Android nu mai este suportată</string>\n    <string name=\"clipboard_copy_error\">Nu s-a reușit copierea în clipboard</string>\n    <string name=\"error_sharing_cover\">Eroare la distribuirea copertei</string>\n    <string name=\"error_saving_cover\">Eroare la salvarea copertei</string>\n    <string name=\"cover_saved\">Copertă salvată</string>\n    <string name=\"chapter_not_found\">Capitolul nu a fost găsit</string>\n    <string name=\"unread\">Necitit</string>\n    <string name=\"action_start_downloading_now\">Începe acum descărcarea</string>\n    <string name=\"information_empty_category_dialog\">Nu aveți încă nicio categorie.</string>\n    <string name=\"theme_monet\">Dinamic</string>\n    <string name=\"label_default\">Implicit</string>\n    <string name=\"theme_midnightdusk\">Amurg de Miazănoapte</string>\n    <string name=\"channel_app_updates\">Actualizări de aplicație</string>\n    <string name=\"theme_tealturquoise\">Teal și turcoaz</string>\n    <string name=\"action_display_local_badge\">Sursă locală</string>\n    <string name=\"pref_category_appearance\">Aspect</string>\n    <string name=\"pref_app_theme\">Tematică Aplicație</string>\n    <string name=\"theme_greenapple\">Măr Verde</string>\n    <string name=\"cancel_all_for_series\">Anulează totul pentru această serie</string>\n    <string name=\"action_display_language_badge\">Limbă</string>\n    <string name=\"confirm_lock_change\">Autentifică-te pentru a confirma schimbările</string>\n    <string name=\"label_warning\">Avertizare</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri de căpșuni</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_yinyang\">Yin și Yang</string>\n    <string name=\"theme_yotsuba\">Yoțuba</string>\n    <string name=\"publishing_finished\">Editare finalizată</string>\n    <string name=\"cancelled\">Anulat</string>\n    <string name=\"on_hiatus\">În hiatus</string>\n    <string name=\"skipped_reason_completed\">Ignorata deoarece seria este completa</string>\n    <string name=\"skipped_reason_not_started\">Ignorat din cauza lipsei de capitolel citite</string>\n    <string name=\"local_invalid_format\">Format de capitol invalid</string>\n    <string name=\"download_queue_size_warning\">Atentie : actualizarile mari la gramada vor face sursele mai incete si pot/vor bloca Mihon. Apasa pentru mai multe informatii.</string>\n    <string name=\"getting_started_guide\">Ghidul de inceput</string>\n    <string name=\"notification_update_error\">%1$d actualizari esuate</string>\n    <string name=\"skipped_reason_not_caught_up\">Ignorata deoarece sunt capitole necitite</string>\n    <string name=\"empty_backup_error\">Nu există intrări în bibliotecă pentru a face backupuri</string>\n    <string name=\"delete_category\">Ștergeți categoria</string>\n    <string name=\"pref_inverted_colors\">Inversate</string>\n    <string name=\"enhanced_services\">Servicii de urmărire îmbunătățite</string>\n    <string name=\"webview_data_deleted\">Datele WebView au fost șterse</string>\n    <string name=\"about_dont_kill_my_app\">Unii producători au restricții suplimentare privind aplicațiile care opresc serviciile de fundal. Acest site web conține mai multe informații despre cum să le rezolvați.</string>\n    <string name=\"database_clean\">Nimic de curățat</string>\n    <string name=\"help_translate\">Ajută la traducere</string>\n    <string name=\"source_unsupported\">Sursa nu este acceptată</string>\n    <string name=\"network_not_metered\">Numai în rețea necontorizată</string>\n    <string name=\"date\">Dată</string>\n    <string name=\"pref_hide_threshold\">Sensibilitatea pentru ascunderea meniului la defilare</string>\n    <string name=\"action_show_manga\">Afișează intrarea</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instalați și porniți Shizuku pentru a utiliza Shizuku ca instalator de extensii.</string>\n    <string name=\"clear_database_source_item_count\">%1$d înregistrări în baza de datecare nu aparțin bibliotecii</string>\n    <string name=\"download_notifier_split_page_not_found\">Pagina %d nu a fost găsită în timpul divizării</string>\n    <string name=\"delete_category_confirmation\">Doriți să ștergeți categoria \\\"%s\\\"?</string>\n    <string name=\"internal_error\">InternalError: Verificați jurnalele de accident pentru informații suplimentare</string>\n    <string name=\"theme_lavender\">Lavandă</string>\n    <string name=\"pref_dark_theme_pure_black\">Mod întunecat negru pur</string>\n    <string name=\"enhanced_tracking_info\">Servicii care oferă caracteristici îmbunătățite pentru anumite surse. Înregistrările sunt urmărite automat atunci când sunt adăugate la biblioteca dumneavoastră.</string>\n    <string name=\"backup_info\">Ar trebui să păstrați copii ale backupurilor și în alte locuri.</string>\n    <string name=\"split_tall_images_summary\">Îmbunătățește performanța cititorului</string>\n    <string name=\"action_close\">Închide</string>\n    <string name=\"relative_time_today\">Azi</string>\n    <string name=\"reading_list\">Listă de citit</string>\n    <string name=\"wish_list\">Lista de dorințe</string>\n    <string name=\"complete_list\">Lista completă</string>\n    <string name=\"action_display_cover_only_grid\">Acoperire tip grilaj</string>\n    <string name=\"action_move_to_top_all_for_series\">Mutați seria pe prima poziție</string>\n    <string name=\"pref_update_only_started\">Care nu au fost începute</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku nu rulează</string>\n    <string name=\"pref_app_language\">Limba aplicației</string>\n    <string name=\"restrictions\">Restricții: %s</string>\n    <string name=\"pref_highest\">Cel mai înalt</string>\n    <string name=\"pref_high\">Înalt</string>\n    <string name=\"pref_low\">Scăzut</string>\n    <string name=\"pref_clear_webview_data\">Ștergeți datele WebView</string>\n    <string name=\"on_hold_list\">Lista în așteptare</string>\n    <string name=\"pref_update_only_completely_read\">Cu capitol(e) necitit(e)</string>\n    <string name=\"pref_lowest\">Cel mai scăzut</string>\n    <string name=\"unfinished_list\">Lista neterminată</string>\n    <string name=\"action_sort_unread_count\">Număr de necitite</string>\n    <string name=\"restore_miui_warning\">Este posibil să nu funcționeze corect backup/restaurare dacă MIUI Optimization este dezactivată.</string>\n    <string name=\"update_72hour\">La fiecare 3 zile</string>\n    <string name=\"connected_to_wifi\">Doar prin Wi Fi</string>\n    <string name=\"off\">Oprit</string>\n    <string name=\"ext_app_info\">Informații despre aplicație</string>\n    <string name=\"custom_cover\">Copertă personalizată</string>\n    <string name=\"manga_cover\">Copertă</string>\n    <string name=\"update_already_running\">O actualizare rulează deja</string>\n    <string name=\"pref_remove_exclude_categories\">Categorii excluse</string>\n    <string name=\"categorized_display_settings\">Setări per categorie pentru sortare și afișare</string>\n    <string name=\"rotation_type\">Tip de rotație</string>\n    <string name=\"rotation_portrait\">Portret</string>\n    <string name=\"privacy_policy\">Politica de confidențialitate</string>\n    <string name=\"auto_download_while_reading\">Descărcă automat în timp ce citiți</string>\n    <string name=\"ext_info_version\">Versiune</string>\n    <string name=\"ext_info_language\">Limbă</string>\n    <string name=\"save_chapter_as_cbz\">Salvează ca arhivă CBZ</string>\n    <string name=\"action_sort_last_manga_update\">Ultima verificare a actualizării</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Șterge memoria cache a capitolului la închiderea aplicației</string>\n    <string name=\"local_filter_order_by\">Ordonează după</string>\n    <string name=\"cant_open_last_read_chapter\">Nu se poate deschide ultimul capitol citit</string>\n    <string name=\"extension_api_error\">Nu s-a putut obține lista de extensii</string>\n    <string name=\"ext_install_service_notif\">Se instalează extensia…</string>\n    <string name=\"ext_installer_pref\">Program de instalare</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Creează dosare în funcție de titlul intrărilor</string>\n    <string name=\"automatic_background\">Automat</string>\n    <string name=\"on\">Pornit</string>\n    <string name=\"are_you_sure\">Ești sigur?</string>\n    <string name=\"error_saving_picture\">Eroare la salvarea imaginii</string>\n    <string name=\"ext_update_all\">Actualizează tot</string>\n    <string name=\"disabled_nav\">Deactivat</string>\n    <string name=\"action_remove_everything\">Șterge tot</string>\n    <string name=\"pref_reader_actions\">Acțiuni</string>\n    <string name=\"pref_create_folder_per_manga\">Salvează pagini în dosare separate</string>\n    <string name=\"description_placeholder\">Fără descriere</string>\n    <string name=\"notification_incognito_text\">Dezactivează modul incognito</string>\n    <string name=\"download_ahead_info\">Funcționează numai dacă capitolul curent + următorul sunt deja descărcate.</string>\n    <string name=\"library_errors_help\">Pentru ajutor în cum se repară erori de actualizări de bibliotecă, vezi %1$s</string>\n    <string name=\"pref_grayscale\">Alb-negru</string>\n    <string name=\"rotation_landscape\">Peisaj</string>\n    <string name=\"learn_more\">Apasă pentru a afla mai multe</string>\n    <string name=\"pref_landscape_zoom\">Măriți imaginea în format peisaj</string>\n    <string name=\"pref_reset_viewer_flags\">Resetați setările de cititor per serie</string>\n    <string name=\"pref_tablet_ui_mode\">Interfață de tabletă</string>\n    <string name=\"action_track\">Urmăriți</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Resetați modul de citire si orientare pentru toate seriile</string>\n    <string name=\"download_ahead\">Descarcă înainte</string>\n    <string name=\"multi_lang\">Multiple</string>\n    <string name=\"notification_size_warning\">Actualizări mari dăunează surselor și pot duce la actualizări mai lente și creșterea nivelului de utilizare a bateriei. Apasă pentru a afla mai multe.</string>\n    <string name=\"label_background_activity\">Activități în fundal</string>\n    <string name=\"update_check_open\">Deschide pe GitHub</string>\n    <string name=\"not_installed\">Nu este instalat</string>\n    <string name=\"action_sort_count\">Total intrări</string>\n    <string name=\"action_search_hint\">Caută…</string>\n    <string name=\"theme_tidalwave\">Tsunami</string>\n    <string name=\"ext_info_age_rating\">Vârsta minimă</string>\n    <string name=\"ext_installer_legacy\">Versiune veche</string>\n    <string name=\"tracking_guide\">Ghid de urmărire</string>\n    <string name=\"rotation_reverse_portrait\">Format portret întors</string>\n    <string name=\"missing_storage_permission\">Permisiunile de stocare nu au fost acceptate</string>\n    <string name=\"pref_reset_viewer_flags_success\">Toate setările de citire au fost resetate</string>\n    <string name=\"popular\">Populare</string>\n    <string name=\"error_no_match\">Nimic asemănător nu a fost găsit</string>\n    <string name=\"remove_manga\">Sunteți pe cale să eliminați \\\"%s\\\" din biblioteca dvs</string>\n    <string name=\"source_filter_empty_screen\">Nici o sursă instalată nu a fost găsită</string>\n    <string name=\"appwidget_updates_description\">Vizualizați intrările recent actualizate din bibliotecă</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nu am putut reseta setările de citire</string>\n    <string name=\"source_empty_screen\">Nici o sursă găsită</string>\n    <string name=\"skipped_reason_not_always_update\">Ignorat deoarece seria nu necesită actualizări</string>\n    <string name=\"updates_last_update_info\">Ultima actualizare a bibliotecii: %s</string>\n    <string name=\"empty_screen\">Ei bine, nu ar trebui sa vezi asta</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nu am putut găsi calea paginii %d</string>\n    <string name=\"unknown_title\">Titlu necunoscut</string>\n    <string name=\"invalid_location\">Locație invalidă: %s</string>\n    <string name=\"pref_verbose_logging_summary\">Tipărirea rapoartelor verbale către jurnalul de sistem (reduce performanța aplicației)</string>\n    <string name=\"error_user_agent_string_invalid\">Șir de caractere invalid pentru agentul de utilizator</string>\n    <string name=\"pref_reset_user_agent_string\">Restabilirea șirului implicit de agent al utilizatorului</string>\n    <string name=\"updates_last_update_info_just_now\">Chiar acum</string>\n    <string name=\"pref_verbose_logging\">Consemnare verbală</string>\n    <string name=\"crash_screen_description\">%s a întâmpinat o eroare neașteptată. Vă sugerăm să faceți o captură de ecran a acestui mesaj, să descărcați registrele de erori și apoi să le partajați prin intermediul canalului nostru de asistență pe Discord.</string>\n    <string name=\"appwidget_unavailable_locked\">Widgetul nu este disponibil atunci când este activată blocarea aplicației</string>\n    <string name=\"pref_appearance_summary\">Tema, formatul datei și al orei</string>\n    <string name=\"pref_library_summary\">Categorii, actualizări globale</string>\n    <string name=\"pref_reader_summary\">Modul de citire, afișare, navigare</string>\n    <string name=\"pref_downloads_summary\">Descărcare automată, descărcare anticipată</string>\n    <string name=\"pref_tracking_summary\">Sincronizare unică a progresului, sincronizare optimizată</string>\n    <string name=\"pref_browse_summary\">Surse, extensii, căutare globală</string>\n    <string name=\"pref_backup_summary\">Copii de rezervă manuale și automate</string>\n    <string name=\"pref_security_summary\">Blocarea aplicației, securizarea ecranului</string>\n    <string name=\"pref_advanced_summary\">Golirea registrelor de eroare, optimizări ale bateriei</string>\n    <string name=\"pref_user_agent_string\">Șirul implicit de agent al utilizatorului</string>\n    <string name=\"error_user_agent_string_blank\">Șirul agentului de utilizator nu poate fi gol</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"crash_screen_restart_application\">Reporniți aplicația</string>\n    <string name=\"pref_navigate_pan\">Panoramare a imaginii la scară largă la atingere</string>\n    <string name=\"action_display_show_continue_reading_button\">Afișați butonul de continuare a cititului</string>\n    <string name=\"information_no_entries_found\">Nu s-au găsit intrări în această categorie</string>\n    <string name=\"track_remove_finish_date_conf_text\">Acest lucru va elimina data de finalizare selectată anterior din %s</string>\n    <string name=\"pref_invalidate_download_cache\">Reindexați descărcările</string>\n    <string name=\"download_notifier_cache_renewal\">Descărcări de indexare</string>\n    <string name=\"track_remove_date_conf_title\">Eliminați data?</string>\n    <string name=\"track_remove_start_date_conf_text\">Acest lucru va elimina data de început selectată anterior din %s</string>\n    <string name=\"fdroid_warning\">Versiunile F-Droid nu sunt acceptate oficial.\n\\nApăsați pentru a afla mai multe.</string>\n    <string name=\"action_open_random_manga\">Deschideți aleatoriu</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Obligați aplicația să refacă verificarea capitolelor descărcate</string>\n    <string name=\"pref_library_update_show_tab_badge\">Afiseaza numarul de notificari necitite pe pictorgrama Actualizari</string>\n    <string name=\"label_stats\">Statistici</string>\n    <string name=\"label_local\">Local</string>\n    <string name=\"label_started\">Început</string>\n    <string name=\"label_downloaded\">Descărcat</string>\n    <string name=\"label_overview_section\">Prezentare generală</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_not_now\">Nu acum</string>\n    <string name=\"label_completed_titles\">Intrari complete</string>\n    <string name=\"label_read_duration\">Durata cutirii</string>\n    <string name=\"label_titles_section\">Intrari</string>\n    <string name=\"label_titles_in_global_update\">In actualizare globala</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_read_chapters\">Citit</string>\n    <string name=\"label_tracker_section\">Servicii de urmărire</string>\n    <string name=\"label_mean_score\">Scorul mediu</string>\n    <string name=\"label_used\">Utilizat</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"information_no_manga_category\">Categorie goala</string>\n    <string name=\"pref_skip_dupe_chapters\">Treci peste capitolele duplicae</string>\n    <string name=\"enhanced_services_not_installed\">Disponibil, dar sursa nu este instalata: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">Ai deja o intrare in librarie cu acelasi nume.\n\\n\n\\nEsti sigur ca vrei sa continui?</string>\n    <string name=\"track_error\">%1$s eroare: %2$s</string>\n    <string name=\"information_required_plain\">*necesar</string>\n    <string name=\"copied_to_clipboard_plain\">Copiat in clipboard</string>\n    <string name=\"unlock_app_title\">Deblochează %s</string>\n    <string name=\"delete_downloaded\">Șterge descărcările</string>\n    <string name=\"action_set_interval\">Setează intervalul</string>\n    <string name=\"scanlator\">Scanlator</string>\n    <string name=\"label_data_storage\">Date și stocare</string>\n    <string name=\"action_sort_next_updated\">Următoarea actualizare așteptată</string>\n    <string name=\"action_filter_interval_custom\">Frecvență de actualizare personalizată</string>\n    <string name=\"pref_storage_location\">Locație de stocare</string>\n    <string name=\"information_cloudflare_help\">Atinge aici pentru ajutor cu Cloudflare</string>\n    <string name=\"action_create\">Creați</string>\n    <string name=\"relative_time_span_never\">Niciodată</string>\n    <string name=\"pref_flash_page_summ\">Reduceți imaginile fantomă pe ecranele e-ink</string>\n    <string name=\"action_copy_to_clipboard\">Copiați în clipboard</string>\n    <string name=\"pref_page_rotate\">Rotiți paginile late pentru a se potrivi</string>\n    <string name=\"pref_storage_location_info\">Folosit pentru copii de rezervă automate, capitole descărcate, și surse locale.</string>\n    <string name=\"action_apply\">Aplică</string>\n    <string name=\"pref_debug_info\">Informații de depanare</string>\n    <string name=\"syncing_library\">Sincronizare bibliotecă</string>\n    <string name=\"create_backup_file_error\">Copia de rezervă nu a putut fi creată</string>\n    <string name=\"intervals_header\">Intervale</string>\n    <string name=\"action_revert_to_default\">Reveniți la implicit</string>\n    <string name=\"action_update_category\">Actualizați categoria</string>\n    <string name=\"action_menu_overflow_description\">Mai multe opțiuni</string>\n    <string name=\"library_sync_complete\">Sincronizare bibliotecă completă</string>\n    <string name=\"last_auto_backup_info\">Ultima copie de rezervă creata la: %s</string>\n    <string name=\"pref_page_rotate_invert\">Răsturnați orientarea paginilor late rotite</string>\n    <string name=\"selected\">Selectat</string>\n    <string name=\"no_scanlators_found\">Nici un scanlator nu a fost găsit</string>\n    <string name=\"not_selected\">Nu a fost selectat</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Mutați seria pe ultima poziție</string>\n    <string name=\"pref_chapter_swipe_end\">Acțiune glisare către dreapta</string>\n    <string name=\"exception_offline\">Fără conexiune la internet</string>\n    <string name=\"pref_storage_usage\">Utilizarea spațiului de stocare</string>\n    <string name=\"notification_updating_progress\">Actualizare bibliotecă… (%s)</string>\n    <string name=\"download_cache_invalidated\">Indexul de descărcări a fost invalidat</string>\n    <string name=\"action_bar_up_description\">Navighează în sus</string>\n    <string name=\"action_sort_tracker_score\">Scorul serviciului de urmărire</string>\n    <string name=\"skipped_reason_not_in_release_period\">Sărit peste deoarece nici o lansare nu era așteptată astăzi</string>\n    <string name=\"file_null_uri_error\">Nici o filă selectată</string>\n    <string name=\"track_delete_title\">Eliminați monitorizarea %s?</string>\n    <string name=\"source_settings\">Setări surse</string>\n    <string name=\"app_settings\">Setări aplicație</string>\n    <string name=\"pref_chapter_swipe_start\">Acțiune glisare către stânga</string>\n    <string name=\"track_delete_remote_text\">De asemenea elimină din %s</string>\n    <string name=\"split_tall_images\">Împărțiți imaginile înalte</string>\n    <string name=\"has_results\">Au fost găsite rezultate</string>\n    <string name=\"track_delete_text\">Această acțiune va elimina local monitorizarea.</string>\n    <string name=\"pref_update_only_in_release_period\">În afara perioadei de lansare estimată</string>\n    <string name=\"action_ok\">Ok</string>\n    <string name=\"pref_double_tap_zoom\">Atingeți de două ori pentru a mări</string>\n    <string name=\"track_activity_name\">Autentificare serviciu de urmărire</string>\n    <string name=\"pref_hide_in_library_items\">Ascundeți înregistrările care se află deja în bibliotecă</string>\n    <string name=\"pref_relative_format\">Marcaje de timp relative</string>\n    <string name=\"exception_http\">HTTP %d, verificați site-ul in modul WebView</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" în loc de \\\"%2$s\\\"</string>\n    <string name=\"exception_unknown_host\">Nu a putut fi accesat %s</string>\n    <string name=\"label_tracked_titles\">Înregistrări monitorizate</string>\n    <string name=\"exclude_scanlators\">Exclude scanlator</string>\n    <string name=\"pref_onboarding_guide\">Ghid de îmbarcare</string>\n    <string name=\"onboarding_heading\">Bine ați venit!</string>\n    <string name=\"onboarding_action_next\">Următorul</string>\n    <string name=\"onboarding_action_skip\">Omite</string>\n    <string name=\"onboarding_storage_action_select\">Selectează un folder</string>\n    <string name=\"onboarding_storage_selection_required\">Un folder trebuie selectat</string>\n    <string name=\"onboarding_storage_help_info\">Actualizați de la o versiune mai veche și nu sunteți sigur ce să selectați? Pentru mai multe informații, consultați ghidul de stocare.</string>\n    <string name=\"onboarding_storage_help_action\">Ghid de stocare</string>\n    <string name=\"onboarding_permission_install_apps\">Permisiunea de a instala aplicații</string>\n    <string name=\"onboarding_permission_install_apps_description\">Pentru a instala extensii sursă.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Utilizarea bateriei în fundal</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Evitați întreruperile actualizărilor bibliotecii, descărcărilor, și restaurărilor de lungă durată.</string>\n    <string name=\"onboarding_permission_action_grant\">Acordă</string>\n    <string name=\"onboarding_guides_returning_user\">Reinstalare %s?</string>\n    <string name=\"pref_library_update_smart_update\">Actualizare inteligentă</string>\n    <string name=\"label_extension_repos\">Repozitoriu extensii</string>\n    <string name=\"information_empty_repos\">Nu aveți nici un repozitoriu configurat.</string>\n    <string name=\"action_add_repo\">Adăugați repozitoriu</string>\n    <string name=\"action_add_repo_message\">Adăugați repozitorii adiționale pentru Mihon. Acestea ar trebuii să fie URL-uri care se încheie cu \\\"index.min.json\\\".</string>\n    <string name=\"delete_repo_confirmation\">Doriți să ștergeți repozitoriul \\\"%s\\\"?</string>\n    <string name=\"action_open_repo\">Repozitoriu open source</string>\n    <string name=\"no_location_set\">Nici o locație pentru stocare nu a fost setată</string>\n    <string name=\"invalid_backup_file_error\">Eroarea completă:</string>\n    <string name=\"private_settings\">Includeți setări sensibile (ex. token-ul serviciilor de urmărire al logări)</string>\n    <string name=\"available_disk_space_info\">Disponibil: %1$s / Total: %2$s</string>\n    <string name=\"manga_display_interval_title\">Estimează la fiecare</string>\n    <string name=\"manga_display_modified_interval_title\">Configurează actualizări la fiecare</string>\n    <string name=\"manga_interval_expected_update\">Se preconizează că vor fi lansate noi capitole în aproximativ %1$s, verifică la fiecare %2$s.</string>\n    <string name=\"manga_interval_expected_update_soon\">În curând</string>\n    <string name=\"manga_interval_custom_amount\">Frecvența personalizată de actualizare:</string>\n    <string name=\"onboarding_description\">Să configurăm câteva lucruri mai întâi. Le puteți schimba oricând în setări și mai târziu.</string>\n    <string name=\"onboarding_action_finish\">Începe</string>\n    <string name=\"onboarding_storage_info\">Selectează un folder unde %1$s va păstra capitolele descărcate, copiile de rezervă, și altele.\n\\n\n\\nSe recomanda folosirea unui folder dedicat.\n\\n\n\\nFolder-ul selectat: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Permisiune de notificare</string>\n    <string name=\"onboarding_permission_notifications_description\">Primiți notificări pentru actualizările bibliotecii și altele.</string>\n    <string name=\"onboarding_guides_new_user\">Nou pe %s? Vă recomandăm să consultați ghidul introductiv.</string>\n    <string name=\"ext_permission_install_apps_warning\">Sunt necesare permisiuni pentru instalarea de extensii. Atingeți aici pentru a permite.</string>\n    <string name=\"ext_revoke_trust\">Revocați încrederea extensiilor necunoscute</string>\n    <string name=\"label_add_repo_input\">URL repozitoriu</string>\n    <string name=\"error_repo_exists\">Acest repozitoriu există deja!</string>\n    <string name=\"action_delete_repo\">Șterge repozitoriu</string>\n    <string name=\"invalid_repo_name\">URL repozitoriu invalid</string>\n    <string name=\"label_upcoming\">Viitoare</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"action_replace_repo_message\">Repozitoriul %1$s are acceeași amprenta digitală a cheii de semnare ca și %2$s\n\\nÎn cazul în care asta este la ce vă așteptați, %2$s va fi înlocuit, altfel contatati întreținătorul repozitoriului.</string>\n    <string name=\"pref_display_profile\">Profil de afișare personalizat</string>\n    <string name=\"action_add_anyway\">Adăugați oricum</string>\n    <string name=\"action_migrate_duplicate\">Migrați intrare existentă</string>\n    <string name=\"action_replace_repo\">Înlocuiți</string>\n    <string name=\"action_replace_repo_title\">Amprenta digitală a cheii de semnare există deja</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Dezactivați funcția de zoom-out</string>\n    <string name=\"action_view_upcoming\">Vizualizați actualizările viitoare</string>\n    <string name=\"upcoming_guide\">Ghidul viitor</string>\n    <string name=\"upcoming_calendar_next\">Luna următoare</string>\n    <string name=\"upcoming_calendar_prev\">Luna anterioară</string>\n    <string name=\"extensionRepo_settings\">Repo-uri extensii</string>\n    <string name=\"manga_interval_expected_update_null\">Această manga este fie finalizată, fie nu există preconizare pentru data lansării.</string>\n    <string name=\"pref_flash_style_black\">Negru</string>\n    <string name=\"pref_flash_with\">Luminează cu</string>\n    <string name=\"pref_flash_style_white\">Alb</string>\n    <string name=\"pref_flash_style_white_black\">Alb și Negru</string>\n    <string name=\"pref_flash_page_interval\">Luminează la fiecare</string>\n    <string name=\"action_copy_link\">Copiați link-ul</string>\n    <string name=\"file_picker_uri_permission_unsupported\">A eșuat obținerea accesului persistent la folder. Aplicația se poate comporta în mod neașteptat.</string>\n    <string name=\"pref_flash_duration\">Durată luminare</string>\n    <string name=\"pref_flash_page\">Luminează la schimbarea paginii</string>\n    <string name=\"overlay_header\">Strat acoperitor</string>\n    <string name=\"add_repo_confirmation\">Doriți să adăugați repo-ul „%s”?</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Omiteți descărcarea duplicatelor pentru capitolele deja citite</string>\n    <string name=\"invalid_backup_file_json\">Copie de rezervă JSON nu este admisibilă</string>\n    <string name=\"invalid_backup_file_unknown\">Copie de rezervă este coruptă</string>\n    <string name=\"confirm_tracker_update\">Actualizați serviciile de urmărire la capitolul %d?</string>\n    <string name=\"non_library_settings\">Toate înregistrările citite</string>\n    <string name=\"action_sort_random\">Aleatoriu</string>\n    <string name=\"onboarding_permission_analytics_description\">Trimiteți date de utilizare anonimizate pentru a îmbunătăți funcțiile aplicației.</string>\n    <string name=\"pref_security\">Securitate</string>\n    <string name=\"pref_firebase\">Jurnale de analiză și de erori</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Actualizare progres atunci când este marcat ca citit</string>\n    <string name=\"trackers_updated_summary\">Servicii de urmărire actualizate la capitolul %d</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Trimiteți anonim jurnalele de blocare către dezvoltatorilor.</string>\n    <string name=\"onboarding_permission_analytics\">Permiteți analizele</string>\n    <string name=\"onboarding_permission_crashlytics\">Trimiteți jurnalele de eroare</string>\n    <string name=\"firebase_summary\">Trimiterea jurnalelor de erori și a analizelor ne va permite să identificăm și să rezolvăm problemele, să îmbunătățim performanța și să facem actualizările viitoare mai relevante pentru nevoile dumneavoastră</string>\n    <string name=\"ext_remove\">Eliminați</string>\n    <string name=\"ext_confirm_remove\">Eliminați extensia?</string>\n    <string name=\"remove_private_extension_message\">Chiar doriți să eliminați extensia „%s”?</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Implicit (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Prag bitmap hardware personalizat</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Dacă cititorul încarcă o imagine goală, reduceți treptat pragul.\\nSelectat: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Afectează performanța. Activați numai dacă reducerea pragului bitmap nu rezolvă problemele legate de imaginile goale</string>\n    <string name=\"label_auto\">Automatic</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Întrerupeți istoricul de lectură pentru extensie</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ru/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">После %1$s минуты</item>\n        <item quantity=\"few\">После %1$s минут</item>\n        <item quantity=\"many\">После %1$s минут</item>\n        <item quantity=\"other\">После %1$s минут</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Главы %1$s и ещё одна</item>\n        <item quantity=\"few\">Главы %1$s и ещё %2$d</item>\n        <item quantity=\"many\">Главы %1$s и ещё %2$d</item>\n        <item quantity=\"other\">Главы %1$s и ещё %2$d</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d новая глава</item>\n        <item quantity=\"few\">%1$d новые главы</item>\n        <item quantity=\"many\">%1$d новых глав</item>\n        <item quantity=\"other\">%1$d новых глав</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\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=\"update_check_notification_ext_updates\">\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=\"download_queue_summary\">\n        <item quantity=\"one\">Осталась %1$s глава</item>\n        <item quantity=\"few\">Осталось %1$s главы</item>\n        <item quantity=\"many\">Осталось %1$s глав</item>\n        <item quantity=\"other\">Осталось %1$s глав</item>\n    </plurals>\n    <plurals name=\"num_categories\">\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=\"restore_completed_message\">\n        <item quantity=\"one\">Выполнено за %1$s с %2$s ошибкой</item>\n        <item quantity=\"few\">Выполнено за %1$s с %2$s ошибками</item>\n        <item quantity=\"many\">Выполнено за %1$s с %2$s ошибками</item>\n        <item quantity=\"other\">Выполнено за %1$s с %2$s ошибками</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s глава</item>\n        <item quantity=\"few\">%1$s главы</item>\n        <item quantity=\"many\">%1$s глав</item>\n        <item quantity=\"other\">%1$s глав</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\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=\"missing_chapters_warning\">\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=\"relative_time\">\n        <item quantity=\"one\">Вчера</item>\n        <item quantity=\"few\">%1$d дня назад</item>\n        <item quantity=\"many\">%1$d дней назад</item>\n        <item quantity=\"other\">%1$d дней назад</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Следующая непрочитанная глава</item>\n        <item quantity=\"few\">Следующие %d непрочитанные главы</item>\n        <item quantity=\"many\">Следующие %d непрочитанных глав</item>\n        <item quantity=\"other\">Следующие %d непрочитанных глав</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Следующая глава</item>\n        <item quantity=\"few\">Следующие %d главы</item>\n        <item quantity=\"many\">Следующие %d глав</item>\n        <item quantity=\"other\">Следующие %d глав</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Отсутствует %1$s глава</item>\n        <item quantity=\"few\">Отсутствуют %1$s главы</item>\n        <item quantity=\"many\">Отсутствуют %1$s глав</item>\n        <item quantity=\"other\">Отсутствуют %1$s глав</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 день</item>\n        <item quantity=\"few\">%d дня</item>\n        <item quantity=\"many\">%d дней</item>\n        <item quantity=\"other\">%d дней</item>\n    </plurals>\n    <plurals name=\"num_repos\">\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=\"upcoming_relative_time\">\n        <item quantity=\"one\">Завтра</item>\n        <item quantity=\"few\">В течении %1$d дней</item>\n        <item quantity=\"many\">В течении %1$d дней</item>\n        <item quantity=\"other\">В течении %1$d дней</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 страница</item>\n        <item quantity=\"few\">%1$s страницы</item>\n        <item quantity=\"many\">%1$s страниц</item>\n        <item quantity=\"other\">%1$s страниц</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ru/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_add\">Добавить</string>\n    <string name=\"action_add_category\">Добавить категорию</string>\n    <string name=\"action_bookmark\">Добавить закладку</string>\n    <string name=\"action_cancel\">Отмена</string>\n    <string name=\"action_delete\">Удалить</string>\n    <string name=\"action_display\">Отображение</string>\n    <string name=\"action_display_grid\">Компактная сетка</string>\n    <string name=\"action_display_list\">Список</string>\n    <string name=\"action_display_mode\">Режим отображения</string>\n    <string name=\"action_download\">Загрузить</string>\n    <string name=\"action_edit\">Изменить</string>\n    <string name=\"action_edit_categories\">Изменить категории</string>\n    <string name=\"action_edit_cover\">Изменить обложку</string>\n    <string name=\"action_filter\">Фильтрация</string>\n    <string name=\"action_filter_bookmarked\">В закладках</string>\n    <string name=\"action_filter_empty\">Удалить фильтр</string>\n    <string name=\"action_filter_unread\">Не прочитано</string>\n    <string name=\"action_install\">Установить</string>\n    <string name=\"action_mark_as_read\">Пометить как «Прочитано»</string>\n    <string name=\"action_mark_as_unread\">Пометить как «Не прочитано»</string>\n    <string name=\"action_mark_previous_as_read\">Пометить предыдущее как «Прочитано»</string>\n    <string name=\"action_move_category\">Добавить в категории</string>\n    <string name=\"action_next_chapter\">Следующая глава</string>\n    <string name=\"action_open_in_browser\">Открыть в браузере</string>\n    <string name=\"action_pause\">Пауза</string>\n    <string name=\"action_previous_chapter\">Предыдущая глава</string>\n    <string name=\"action_remove\">Удалить</string>\n    <string name=\"action_remove_bookmark\">Удалить закладку</string>\n    <string name=\"action_rename_category\">Переименовать категорию</string>\n    <string name=\"action_reset\">Сбросить</string>\n    <string name=\"action_resume\">Продолжить</string>\n    <string name=\"action_retry\">Повторить</string>\n    <string name=\"action_save\">Сохранить</string>\n    <string name=\"action_search\">Искать</string>\n    <string name=\"action_select_all\">Выбрать всё</string>\n    <string name=\"action_settings\">Настройки</string>\n    <string name=\"action_share\">Поделиться</string>\n    <string name=\"action_sort\">Сортировка</string>\n    <string name=\"action_sort_alpha\">Алфавит</string>\n    <string name=\"action_sort_last_read\">Последнее прочитанное</string>\n    <string name=\"action_update_library\">Обновить библиотеку</string>\n    <string name=\"all\">Все</string>\n    <string name=\"black_background\">Чёрный</string>\n    <string name=\"cache_delete_error\">Возникла ошибка при очистке</string>\n    <string name=\"cache_deleted\">Кэш очищен, %1$d файлов удалено</string>\n    <string name=\"chapter_downloading_progress\">Загружается (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Ошибка</string>\n    <string name=\"chapter_progress\">Страница: %1$d</string>\n    <string name=\"chapters\">Главы</string>\n    <string name=\"charging\">Когда заряжается</string>\n    <string name=\"clear_database_completed\">Серии удалены</string>\n    <string name=\"clear_database_confirmation\">Вы уверены? Прочитанные главы и прогресс не библиотечных серий будет потерян</string>\n    <string name=\"color_filter_a_value\">Альфа</string>\n    <string name=\"color_filter_r_value\">Красный</string>\n    <string name=\"color_filter_g_value\">Зелёный</string>\n    <string name=\"color_filter_b_value\">Синий</string>\n    <string name=\"completed\">Завершено</string>\n    <string name=\"confirm_delete_chapters\">Вы уверены, что хотите удалить выбранные главы?</string>\n    <string name=\"confirm_set_image_as_cover\">Использовать это изображение как обложку?</string>\n    <string name=\"cookies_cleared\">Cookies очищены</string>\n    <string name=\"cover_updated\">Обложка обновлена</string>\n    <string name=\"custom_filter\">Пользовательский фильтр</string>\n    <string name=\"decode_image_error\">Не удалось загрузить изображение</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Это действие удалит дату прочтения этой главы. Вы уверены?</string>\n    <string name=\"dialog_with_checkbox_reset\">Сбросить все главы для этой серии</string>\n    <string name=\"disabled\">Отключено</string>\n    <string name=\"display_mode_chapter\">Глава %1$s</string>\n    <string name=\"download_notifier_downloader_title\">Загрузчик</string>\n    <string name=\"download_notifier_no_network\">Нет соединения с сетью</string>\n    <string name=\"download_notifier_text_only_wifi\">Нет соединения Wi-Fi</string>\n    <string name=\"download_notifier_title_error\">Ошибка</string>\n    <string name=\"download_notifier_unknown_error\">Невозможно скачать главу из-за непредвиденной ошибки</string>\n    <string name=\"download_queue_error\">Невозможно скачать главы. Можете попробовать ещё раз в очереди загрузок</string>\n    <string name=\"download_unread\">Непрочитанные главы</string>\n    <string name=\"dropped\">Брошено</string>\n    <string name=\"error_category_exists\">Категория с таким названием уже существует!</string>\n    <string name=\"fifth_to_last\">Пятая от прочитанной главы</string>\n    <string name=\"file_select_backup\">Выбрать файл резервной копии</string>\n    <string name=\"file_select_cover\">Выбрать обложку</string>\n    <string name=\"fourth_to_last\">Четвёртая от прочитанной главы</string>\n    <string name=\"information_empty_library\">Ваша библиотека пуста</string>\n    <string name=\"information_no_downloads\">Нет загрузок</string>\n    <string name=\"information_no_recent\">Нет новых обновлений</string>\n    <string name=\"information_no_recent_manga\">Ничего не прочитано в последнее время</string>\n    <string name=\"label_backup\">Резервная копия</string>\n    <string name=\"label_download_queue\">Очередь загрузки</string>\n    <string name=\"label_library\">Библиотека</string>\n    <string name=\"label_recent_manga\">История</string>\n    <string name=\"label_recent_updates\">Обновления</string>\n    <string name=\"label_settings\">Настройки</string>\n    <string name=\"landscape\">Альбомная</string>\n    <string name=\"last_read_chapter\">Последняя прочитанная глава</string>\n    <string name=\"left_to_right_viewer\">Постранично (Слева направо)</string>\n    <string name=\"licensed\">Лицензировано</string>\n    <string name=\"loading\">Загрузка…</string>\n    <string name=\"login\">Вход</string>\n    <string name=\"login_success\">Успешный вход</string>\n    <string name=\"login_title\">Войти в %1$s</string>\n    <string name=\"manga_download\">Загрузить</string>\n    <string name=\"manga_tracking_tab\">Отслеживание</string>\n    <string name=\"name\">Название</string>\n    <string name=\"no_next_chapter\">Следующая глава не найдена</string>\n    <string name=\"notification_cover_update_failed\">Не удалось обновить обложку</string>\n    <string name=\"notification_first_add_to_library\">Пожалуйста, добавьте серию в библиотеку перед тем, как делать это</string>\n    <string name=\"notification_new_chapters\">Найдены новые главы</string>\n    <string name=\"on_hold\">Отложено</string>\n    <string name=\"ongoing\">Выпускается</string>\n    <string name=\"password\">Пароль</string>\n    <string name=\"picture_saved\">Картинка сохранена</string>\n    <string name=\"plan_to_read\">Запланировано</string>\n    <string name=\"portrait\">Портретная</string>\n    <string name=\"pref_acra_summary\">Помогает исправлять все возможные ошибки. Данные пользователя не передаются</string>\n    <string name=\"pref_auto_update_manga_sync\">Обновлять прогресс после прочтения</string>\n    <string name=\"pref_category_about\">Информация</string>\n    <string name=\"pref_category_advanced\">Дополнительно</string>\n    <string name=\"pref_category_downloads\">Загрузки</string>\n    <string name=\"pref_category_general\">Основные</string>\n    <string name=\"pref_category_reader\">Читалка</string>\n    <string name=\"pref_category_tracking\">Отслеживание</string>\n    <string name=\"pref_clear_chapter_cache\">Очистить кэш глав</string>\n    <string name=\"pref_clear_cookies\">Очистить cookies</string>\n    <string name=\"pref_clear_database\">Очистить базу данных</string>\n    <string name=\"pref_clear_database_summary\">Удалить историю для серий, которые не находятся в библиотеке</string>\n    <string name=\"pref_custom_brightness\">Пользовательская яркость</string>\n    <string name=\"pref_custom_color_filter\">Пользовательский светофильтр</string>\n    <string name=\"pref_download_new\">Загружать новые главы</string>\n    <string name=\"pref_enable_acra\">Отправлять отчёты об сбоях</string>\n    <string name=\"pref_page_transitions\">Анимированные переходы страниц</string>\n    <string name=\"pref_fullscreen\">Полноэкранный режим</string>\n    <string name=\"pref_image_scale_type\">Масштабирование</string>\n    <string name=\"pref_keep_screen_on\">Не выключать экран</string>\n    <string name=\"pref_library_columns\">Размер сетки</string>\n    <string name=\"pref_library_update_interval\">Автоматические обновления</string>\n    <string name=\"pref_library_update_restriction\">Ограничения обновлений для устройства</string>\n    <string name=\"pref_read_with_volume_keys\">Клавиши громкости</string>\n    <string name=\"pref_reader_navigation\">Навигация</string>\n    <string name=\"pref_reader_theme\">Цвет фона</string>\n    <string name=\"pref_remove_after_marked_as_read\">Удалять помеченое как «Прочитано»</string>\n    <string name=\"pref_remove_after_read\">Удалять после прочтения</string>\n    <string name=\"pref_rotation_type\">Ориентация по умолчанию</string>\n    <string name=\"pref_show_page_number\">Номер страницы</string>\n    <string name=\"pref_update_only_non_completed\">Пропускать завершённые серии</string>\n    <string name=\"pref_viewer_type\">Режим чтения</string>\n    <string name=\"pref_zoom_start\">Стартовая позиция увеличения</string>\n    <string name=\"reading\">Читаю</string>\n    <string name=\"remove_from_library\">Удалить из библиотеки</string>\n    <string name=\"right_to_left_viewer\">Постранично (Справа налево)</string>\n    <string name=\"rotation_force_landscape\">Заблокированная альбомная</string>\n    <string name=\"rotation_force_portrait\">Заблокированная портретная</string>\n    <string name=\"rotation_free\">Системная</string>\n    <string name=\"scale_type_fit_height\">По высоте</string>\n    <string name=\"scale_type_fit_screen\">Уместить в экран</string>\n    <string name=\"scale_type_fit_width\">По ширине</string>\n    <string name=\"scale_type_original_size\">Исходный размер</string>\n    <string name=\"scale_type_smart_fit\">Умное</string>\n    <string name=\"scale_type_stretch\">Растянуть</string>\n    <string name=\"score\">Оценка</string>\n    <string name=\"second_to_last\">Предпоследняя прочитанная глава</string>\n    <string name=\"services\">Сервисы отслеживания</string>\n    <string name=\"set_as_cover\">Установить как обложку</string>\n    <string name=\"show_chapter_number\">Номер главы</string>\n    <string name=\"show_title\">Название источника</string>\n    <string name=\"snack_add_to_library\">Добавить в библиотеку?</string>\n    <string name=\"sort_by_number\">Номер главы</string>\n    <string name=\"sort_by_source\">Источник</string>\n    <string name=\"status\">Статус</string>\n    <string name=\"third_to_last\">Третья от прочитанной главы</string>\n    <string name=\"title\">Название</string>\n    <string name=\"unknown\">Неизвестно</string>\n    <string name=\"unknown_error\">Неизвестная ошибка</string>\n    <string name=\"update_12hour\">Каждые 12 часов</string>\n    <string name=\"update_24hour\">Ежедневно</string>\n    <string name=\"update_48hour\">Каждые 2 дня</string>\n    <string name=\"update_6hour\">Каждые 6 часов</string>\n    <string name=\"update_check_confirm\">Загрузить</string>\n    <string name=\"update_check_no_new_updates\">Нет обновлений</string>\n    <string name=\"update_check_notification_download_complete\">Нажмите для установки обновления</string>\n    <string name=\"update_check_notification_download_error\">Ошибка загрузки</string>\n    <string name=\"update_check_notification_download_in_progress\">Загрузка…</string>\n    <string name=\"update_check_notification_update_available\">Доступно обновление!</string>\n    <string name=\"update_never\">Выключено</string>\n    <string name=\"updating_category\">Обновление категории</string>\n    <string name=\"used_cache\">Использовано: %1$s</string>\n    <string name=\"username\">Имя пользователя</string>\n    <string name=\"version\">Версия</string>\n    <string name=\"vertical_viewer\">Постранично (Вертикально)</string>\n    <string name=\"webtoon_viewer\">Длинные страницы</string>\n    <string name=\"white_background\">Белый</string>\n    <string name=\"zoom_start_automatic\">Автоматически</string>\n    <string name=\"zoom_start_center\">По центру</string>\n    <string name=\"zoom_start_left\">Слева</string>\n    <string name=\"zoom_start_right\">Справа</string>\n    <string name=\"action_restore\">Восстановить</string>\n    <string name=\"action_undo\">Отменить</string>\n    <string name=\"backup_choice\">Что добавить в резервную копию?</string>\n    <string name=\"backup_created\">Резервная копия создана</string>\n    <string name=\"categories\">Категории</string>\n    <string name=\"chapter_paused\">Пауза</string>\n    <string name=\"creating_backup\">Создание резервной копии</string>\n    <string name=\"default_category\">Основная категория</string>\n    <string name=\"default_category_summary\">Спрашивать</string>\n    <string name=\"delete_downloads_for_manga\">Удалить загруженные главы?</string>\n    <string name=\"download_notifier_download_paused\">Загрузки приостановлены</string>\n    <string name=\"history\">История</string>\n    <string name=\"local_source\">Источник на устройстве</string>\n    <string name=\"manga\">Серии библиотеки</string>\n    <string name=\"no_more_results\">Больше нет результатов</string>\n    <string name=\"pref_backup_interval\">Частота автоматических резервных копий</string>\n    <string name=\"pref_create_backup\">Создать резервную копию</string>\n    <string name=\"pref_create_backup_summ\">Можно использовать для восстановления текущей библиотеки</string>\n    <string name=\"pref_crop_borders\">Обрезать поля</string>\n    <string name=\"pref_restore_backup\">Восстановить из резервной копии</string>\n    <string name=\"pref_restore_backup_summ\">Восстановить библиотеку из резервной копии</string>\n    <string name=\"restore_completed\">Восстановление завершено</string>\n    <string name=\"restoring_backup\">Восстановление из резервной копии</string>\n    <string name=\"snack_categories_deleted\">Категории удалены</string>\n    <string name=\"track\">Отслеживание</string>\n    <string name=\"update_weekly\">Еженедельно</string>\n    <string name=\"action_sort_total\">Количество глав</string>\n    <string name=\"action_open_log\">Открыть журнал</string>\n    <string name=\"app_not_available\">Приложение недоступно</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Клавиши громкости наоборот</string>\n    <string name=\"action_global_search\">Искать глобально</string>\n    <string name=\"action_display_download_badge\">Загруженные главы</string>\n    <string name=\"other_source\">Другое</string>\n    <string name=\"action_global_search_hint\">Искать глобально…</string>\n    <string name=\"latest\">Последние</string>\n    <string name=\"browse\">Поисковик</string>\n    <string name=\"channel_common\">Общий</string>\n    <string name=\"information_empty_category\">Нет категорий в библиотеке. Нажмите кнопку «Добавить» чтобы создать категорию для организации вашей библиотеки.</string>\n    <string name=\"label_migration\">Перенос</string>\n    <string name=\"label_extensions\">Расширения</string>\n    <string name=\"label_extension_info\">Информация о расширении</string>\n    <string name=\"ext_update\">Обновить</string>\n    <string name=\"ext_install\">Установить</string>\n    <string name=\"ext_pending\">Ожидается</string>\n    <string name=\"ext_downloading\">Загружается</string>\n    <string name=\"ext_installing\">Устанавливается</string>\n    <string name=\"ext_installed\">Установлено</string>\n    <string name=\"ext_untrusted\">Ненадёжное</string>\n    <string name=\"ext_uninstall\">Удалить</string>\n    <string name=\"untrusted_extension\">Ненадёжное расширение</string>\n    <string name=\"untrusted_extension_message\">Вредоносные расширения могут считывать любые хранящиеся учётные данные для входа или выполнять произвольный код.\n\\n\n\\nДоверяя этому расширению, вы принимаете эти риски.</string>\n    <string name=\"pref_double_tap_anim_speed\">Скорость анимации при двойном нажатии</string>\n    <string name=\"double_tap_anim_speed_0\">Без анимации</string>\n    <string name=\"double_tap_anim_speed_normal\">Нормальная</string>\n    <string name=\"double_tap_anim_speed_fast\">Быстрая</string>\n    <string name=\"manga_added_library\">Добавлено в библиотеку</string>\n    <string name=\"manga_removed_library\">Удалено из библиотеки</string>\n    <string name=\"copied_to_clipboard\">Скопировано в буфер обмена:\n\\n%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Какие данные перенести</string>\n    <string name=\"migrate\">Перенести</string>\n    <string name=\"copy\">Копировать</string>\n    <string name=\"ext_trust\">Надёжное</string>\n    <string name=\"pager_viewer\">Постранично</string>\n    <string name=\"source_not_installed\">Источник не установлен: %1$s</string>\n    <string name=\"repeating\">Перечитываю</string>\n    <string name=\"track_status\">Статус</string>\n    <string name=\"track_type\">Тип</string>\n    <string name=\"transition_finished\">Закончена:</string>\n    <string name=\"transition_current\">Текущая:</string>\n    <string name=\"transition_next\">Следующая:</string>\n    <string name=\"transition_previous\">Предыдущая:</string>\n    <string name=\"transition_no_next\">Следующей главы нет</string>\n    <string name=\"transition_no_previous\">Предыдущей главы нет</string>\n    <string name=\"transition_pages_loading\">Идёт загрузка страниц…</string>\n    <string name=\"transition_pages_error\">Не удалось загрузить страницы: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">Показать действия при долгом нажатии</string>\n    <string name=\"action_open_in_web_view\">Открыть в WebView</string>\n    <string name=\"pref_skip_read_chapters\">Пропускать прочитанные главы</string>\n    <string name=\"pref_color_filter_mode\">Режим светофильтра</string>\n    <string name=\"filter_mode_overlay\">Наложение</string>\n    <string name=\"filter_mode_multiply\">Умножение</string>\n    <string name=\"filter_mode_screen\">Экран</string>\n    <string name=\"filter_mode_lighten\">Осветление</string>\n    <string name=\"filter_mode_darken\">Затемнение</string>\n    <string name=\"label_help\">Помощь</string>\n    <string name=\"no_results_found\">Нет результатов</string>\n    <string name=\"migration_selection_prompt\">Выберите источник переноса</string>\n    <string name=\"action_webview_back\">Назад</string>\n    <string name=\"action_webview_forward\">Вперед</string>\n    <string name=\"action_webview_refresh\">Обновить</string>\n    <string name=\"pref_category_library\">Библиотека</string>\n    <string name=\"ext_obsolete\">Устаревшее</string>\n    <string name=\"obsolete_extension_message\">Это расширение больше недоступно. Оно может работать неправильно, а также вызвать проблемы с приложением. Рекомендуется его удалить.</string>\n    <string name=\"pref_date_format\">Формат даты</string>\n    <string name=\"pref_category_library_update\">Глобальное обновление</string>\n    <string name=\"logout_title\">Выйти из %1$s?</string>\n    <string name=\"logout\">Выйти</string>\n    <string name=\"logout_success\">Вы успешно вышли</string>\n    <string name=\"paused\">На паузе</string>\n    <string name=\"label_more\">Больше</string>\n    <string name=\"action_sort_latest_chapter\">Последняя глава</string>\n    <string name=\"action_view_chapters\">Просмотреть главы</string>\n    <string name=\"action_cancel_all\">Отменить всё</string>\n    <string name=\"theme_light\">Светлая</string>\n    <string name=\"theme_dark\">Тёмная</string>\n    <string name=\"theme_system\">Система</string>\n    <string name=\"pref_manage_notifications\">Управление уведомлениями</string>\n    <string name=\"pref_category_security\">Безопасность и конфиденциальность</string>\n    <string name=\"lock_with_biometrics\">Блокировка биометрией</string>\n    <string name=\"lock_when_idle\">Блокировать при бездействии</string>\n    <string name=\"lock_always\">Всегда</string>\n    <string name=\"lock_never\">Никогда</string>\n    <string name=\"secure_screen\">Защита экрана приложения</string>\n    <string name=\"ext_updates_pending\">Доступны обновления</string>\n    <string name=\"pref_cutout_short\">Показывать содержимое в вырезанной области</string>\n    <string name=\"information_cloudflare_bypass_failure\">Не удалось обойти Cloudflare</string>\n    <string name=\"information_webview_outdated\">Пожалуйста, обновите WebView для лучшей совместимости</string>\n    <string name=\"channel_new_chapters\">Обновления глав</string>\n    <string name=\"notification_chapters_single_and_more\">Глава %1$s и ещё %2$d</string>\n    <string name=\"notification_chapters_multiple\">Главы %1$s</string>\n    <string name=\"notification_chapters_single\">Глава %1$s</string>\n    <string name=\"pref_category_display\">Отображение</string>\n    <string name=\"updating_library\">Обновление библиотеки</string>\n    <string name=\"battery_optimization_disabled\">Оптимизация батареи уже выключена</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Помогает с обновлением библиотеки и резервной копией в фоне</string>\n    <string name=\"pref_disable_battery_optimization\">Отключить оптимизацию батареи</string>\n    <string name=\"email\">Адрес электронной почты</string>\n    <string name=\"pref_always_show_chapter_transition\">Переход между главами</string>\n    <string name=\"hide_notification_content\">Скрыть содержимое уведомлений</string>\n    <string name=\"secure_screen_summary\">Защита экрана скрывает содержимое при переключении между приложениями, а также блокирует создание скриншотов</string>\n    <string name=\"action_oldest\">Старейший</string>\n    <string name=\"action_newest\">Новейший</string>\n    <string name=\"action_move_to_top\">В начало</string>\n    <string name=\"action_move_to_bottom\">В конец</string>\n    <string name=\"channel_ext_updates\">Обновления расширений</string>\n    <string name=\"action_menu\">Меню</string>\n    <string name=\"label_sources\">Источники</string>\n    <string name=\"pref_category_reading\">Чтение</string>\n    <string name=\"pref_skip_filtered_chapters\">Пропускать отфильтрованные главы</string>\n    <string name=\"action_select_inverse\">Выбрать наоборот</string>\n    <string name=\"vertical_plus_viewer\">Длинные страницы с зазорами</string>\n    <string name=\"pref_webtoon_side_padding\">Боковой отступ</string>\n    <string name=\"pinned_sources\">Закреплено</string>\n    <string name=\"action_unpin\">Открепить</string>\n    <string name=\"action_pin\">Закрепить</string>\n    <string name=\"add_tracking\">Добавить отслеживание</string>\n    <string name=\"label_downloaded_only\">Только загруженные главы</string>\n    <string name=\"information_webview_required\">Для работы приложения необходимо WebView</string>\n    <string name=\"manga_info_collapse\">Меньше</string>\n    <string name=\"manga_info_expand\">Больше</string>\n    <string name=\"in_library\">В библиотеке</string>\n    <string name=\"add_to_library\">Добавить</string>\n    <string name=\"licenses\">Лицензии open-source</string>\n    <string name=\"website\">Сайт</string>\n    <string name=\"recent_manga_time\">Гл. %1$s - %2$s</string>\n    <string name=\"local_source_help_guide\">Руководство по источнику на устройстве</string>\n    <string name=\"last_used_source\">Последний использованный источник</string>\n    <string name=\"downloaded_only_summary\">Включает фильтр «Загружено» для всей библиотеки</string>\n    <string name=\"check_for_updates\">Проверить обновления</string>\n    <string name=\"restoring_backup_canceled\">Восстановление отменено</string>\n    <string name=\"restoring_backup_error\">Ошибка восстановления из резервной копии</string>\n    <string name=\"restore_in_progress\">Восстановление уже выполняется</string>\n    <string name=\"creating_backup_error\">Не удалось создать резервную копию</string>\n    <string name=\"backup_in_progress\">Резервная копия уже выполняется</string>\n    <string name=\"restore_duration\">%1$02d мин, %2$02d сек</string>\n    <string name=\"viewer\">Режим чтения</string>\n    <string name=\"pref_category_for_this_series\">Для этой серии</string>\n    <string name=\"gray_background\">Серый</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Не удалось открыть настройки устройства</string>\n    <string name=\"pref_refresh_library_covers\">Обновить обложки серий</string>\n    <string name=\"tracking_info\">Односторонняя синхронизация для обновления прогресса в сторонних сервисах отслеживания. Настройте отслеживание при помощи кнопки «Отслеживание».</string>\n    <string name=\"sort_by_upload_date\">Дата добавления</string>\n    <string name=\"label_data\">Данные</string>\n    <string name=\"backup_restore_missing_sources\">Отсутствующие источники:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Резервная копия не содержит серий.</string>\n    <string name=\"invalid_backup_file\">Неверный файл резервной копии:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">При обновлении библиотеки проверять наличие новой обложки и сведений</string>\n    <string name=\"pref_library_update_refresh_metadata\">Обновлять метаданные</string>\n    <string name=\"action_display_comfortable_grid\">Удобная сетка</string>\n    <string name=\"action_migrate\">Перенести</string>\n    <string name=\"tabs_header\">Вкладки</string>\n    <string name=\"action_display_show_tabs\">Показать вкладки категорий</string>\n    <string name=\"page_list_empty_error\">Страницы не найдены</string>\n    <string name=\"action_enable_all\">Включить всё</string>\n    <string name=\"action_disable_all\">Отключить всё</string>\n    <string name=\"pref_show_reading_mode_summary\">Ненадолго показать режим чтения при открытии читалки</string>\n    <string name=\"pref_show_reading_mode\">Показать режим чтения</string>\n    <string name=\"action_start\">Начать</string>\n    <string name=\"loader_not_implemented_error\">Источник не найден</string>\n    <string name=\"action_disable\">Отключить</string>\n    <string name=\"requires_app_restart\">Для вступления в силу требуется перезапуск приложения</string>\n    <string name=\"label_network\">Сеть</string>\n    <string name=\"tapping_inverted_both\">Обе оси</string>\n    <string name=\"tapping_inverted_vertical\">Вертикально</string>\n    <string name=\"tapping_inverted_horizontal\">Горизонтально</string>\n    <string name=\"tapping_inverted_none\">Нет</string>\n    <string name=\"pref_read_with_tapping_inverted\">Зоны касания наоборот</string>\n    <string name=\"unknown_status\">Неизвестный статус</string>\n    <string name=\"unknown_author\">Неизвестный автор</string>\n    <string name=\"updated_version\">Обновлено до %1$s</string>\n    <string name=\"whats_new\">Что нового</string>\n    <string name=\"download_insufficient_space\">Не удалось загрузить главы из-за малого объема хранилища</string>\n    <string name=\"action_global_search_query\">Искать \\\"%1$s\\\" глобально</string>\n    <string name=\"pref_category_reading_mode\">Режим чтения</string>\n    <string name=\"pref_category_theme\">Тема</string>\n    <string name=\"action_sort_date_added\">Последнее добавление серии</string>\n    <string name=\"no_pinned_sources\">У вас нет закреплённых источников</string>\n    <string name=\"channel_complete\">Завершено</string>\n    <string name=\"channel_progress\">Прогресс</string>\n    <string name=\"channel_errors\">Ошибки</string>\n    <string name=\"backup_restore_missing_trackers\">Сервисы отслеживания в которые не выполнен вход:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Удалять главы с закладками</string>\n    <string name=\"pref_category_delete_chapters\">Удаление глав</string>\n    <string name=\"ext_nsfw_warning\">Источики из этого расширения могут содержать контент NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Это не предотвращает появление внутри приложения контента NSFW (18+) из неофициальных или потенциально неправильно помеченных расширений.</string>\n    <string name=\"no_chapters_error\">Нет глав</string>\n    <string name=\"chapter_settings_updated\">Настройки главы по умолчанию были обновлены</string>\n    <string name=\"set_chapter_settings_as_default\">Установить по умолчанию</string>\n    <string name=\"also_set_chapter_settings_for_library\">Также применить ко всем сериям в моей библиотеке</string>\n    <string name=\"confirm_set_chapter_settings\">Вы уверены, что хотите сохранить эти настройки по умолчанию?</string>\n    <string name=\"chapter_settings\">Настройки главы</string>\n    <string name=\"share_page_info\">%1$s: %2$s, страница %3$d</string>\n    <string name=\"action_search_settings\">Искать настройки</string>\n    <string name=\"downloaded_chapters\">Загруженные главы</string>\n    <string name=\"manga_from_library\">Из библиотеки</string>\n    <string name=\"pref_incognito_mode_summary\">Приостанавливает историю чтения</string>\n    <string name=\"pref_incognito_mode\">Режим инкогнито</string>\n    <string name=\"pref_clear_history\">Очистить историю</string>\n    <string name=\"clear_history_confirmation\">Вы уверены? Вся история будет удалена.</string>\n    <string name=\"clear_history_completed\">История удалена</string>\n    <string name=\"spen_next_page\">Следующая страница</string>\n    <string name=\"spen_previous_page\">Предыдущая страница</string>\n    <string name=\"migration_help_guide\">Руководство по переносу источников</string>\n    <string name=\"pref_category_nsfw_content\">Источники NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Показывать в списке источников и расширений</string>\n    <string name=\"file_picker_error\">Приложение для выбора файлов не найдено</string>\n    <string name=\"myanimelist_relogin\">Пожалуйста, авторизуйтесь в MyAnimeList снова</string>\n    <string name=\"pref_viewer_nav\">Зоны касания</string>\n    <string name=\"edge_nav\">По краям</string>\n    <string name=\"kindlish_nav\">Kindle-подобная</string>\n    <string name=\"l_nav\">L-образная</string>\n    <string name=\"track_finished_reading_date\">Дата окончания</string>\n    <string name=\"track_started_reading_date\">Дата начала</string>\n    <string name=\"pref_dump_crash_logs_summary\">Сохраняет журнал сбоев в файл для отправки разработчикам</string>\n    <string name=\"pref_dump_crash_logs\">Поделиться журналом сбоев</string>\n    <string name=\"action_desc\">По убыванию</string>\n    <string name=\"action_asc\">По возрастанию</string>\n    <string name=\"action_order_by_chapter_number\">Номер главы</string>\n    <string name=\"action_order_by_upload_date\">Дата загрузки</string>\n    <string name=\"action_filter_tracked\">Отслеживается</string>\n    <string name=\"action_display_show_number_of_items\">Показывать количество серий</string>\n    <string name=\"right_and_left_nav\">Справа и слева</string>\n    <string name=\"pref_dual_page_split\">Разделение широких страниц</string>\n    <string name=\"pref_dual_page_invert\">Разделение широких страниц наоборот</string>\n    <string name=\"pref_dual_page_invert_summary\">Если разделение широких страниц не соответствует направлению чтения</string>\n    <string name=\"backup_restore_content_full\">Вам будет нужно установить все недостающие расширения и после этого авторизоваться в сервисах отслеживания для их использования.</string>\n    <string name=\"nav_zone_left\">Слева</string>\n    <string name=\"nav_zone_right\">Справа</string>\n    <string name=\"nav_zone_next\">Следующая</string>\n    <string name=\"nav_zone_prev\">Предыдущая</string>\n    <string name=\"pref_show_navigation_mode_summary\">Ненадолго показать при начале чтения</string>\n    <string name=\"pref_show_navigation_mode\">Наложение зон касания</string>\n    <string name=\"pref_dns_over_https\">DNS по HTTPS (DoH)</string>\n    <string name=\"none\">Нет</string>\n    <string name=\"exclude\">Исключать: %s</string>\n    <string name=\"include\">Включать: %s</string>\n    <string name=\"action_sort_chapter_fetch_date\">Последнее получение главы</string>\n    <string name=\"pref_download_new_categories_details\">Серии в исключённых категориях не будут загружаться, даже если находятся во включённых категориях.</string>\n    <string name=\"pref_library_update_categories_details\">Серии в исключённых категориях не будут обновляться, даже если находятся во включённых категориях.</string>\n    <string name=\"pref_category_auto_download\">Автозагрузка</string>\n    <string name=\"action_show_errors\">Нажать, чтобы увидеть подробности</string>\n    <string name=\"update_check_eol\">Эта версия Android больше не поддерживается</string>\n    <string name=\"clipboard_copy_error\">Не удалось скопировать в буфер обмена</string>\n    <string name=\"rotation_landscape\">Альбомная</string>\n    <string name=\"rotation_portrait\">Портретная</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Создавать папки в соответствии с названием серии</string>\n    <string name=\"pref_create_folder_per_manga\">Сохранять страницы в отдельные папки</string>\n    <string name=\"pref_reader_actions\">Действия</string>\n    <string name=\"rotation_type\">Ориентация</string>\n    <string name=\"pref_grayscale\">Оттенки серого</string>\n    <string name=\"notification_incognito_text\">Выключить режим инкогнито</string>\n    <string name=\"automatic_background\">Автоматически</string>\n    <string name=\"cancel_all_for_series\">Отменить всё для этой серии</string>\n    <string name=\"error_no_match\">Совпадений не найдено</string>\n    <string name=\"source_unsupported\">Источник не поддерживается</string>\n    <string name=\"unread\">Не прочитано</string>\n    <string name=\"date\">Дата</string>\n    <string name=\"local_filter_order_by\">Сортировать по</string>\n    <string name=\"local_invalid_format\">Недопустимый формат глав</string>\n    <string name=\"chapter_not_found\">Глава не найдена</string>\n    <string name=\"restrictions\">Ограничения: %s</string>\n    <string name=\"action_display_local_badge\">Источник на устройстве</string>\n    <string name=\"off\">Выключено</string>\n    <string name=\"on\">Включено</string>\n    <string name=\"error_sharing_cover\">Ошибка отправки обложки</string>\n    <string name=\"error_saving_cover\">Ошибка сохранения обложки</string>\n    <string name=\"cover_saved\">Обложка сохранена</string>\n    <string name=\"manga_cover\">Обложка</string>\n    <string name=\"categorized_display_settings\">Каждая категория имеет собственные настройки сортировки</string>\n    <string name=\"tracking_guide\">Руководство по отслеживанию</string>\n    <string name=\"information_empty_category_dialog\">Ваша библиотека не имеет категорий.</string>\n    <string name=\"action_start_downloading_now\">Начать загрузку сейчас</string>\n    <string name=\"theme_greenapple\">Зелёное Яблоко</string>\n    <string name=\"pref_app_theme\">Тема приложения</string>\n    <string name=\"pref_dark_theme_pure_black\">Тёмный режим с чистым чёрным</string>\n    <string name=\"theme_yotsuba\">Ёцуба</string>\n    <string name=\"theme_yinyang\">Инь и Янь</string>\n    <string name=\"theme_tako\">Тако</string>\n    <string name=\"theme_strawberrydaiquiri\">Клубничный Дайкири</string>\n    <string name=\"theme_midnightdusk\">Полуночные Сумерки</string>\n    <string name=\"about_dont_kill_my_app\">У некоторых производителей есть дополнительные ограничения для приложений, которые убивают фоновые службы. На этом сайте есть более подробная информация о том, как это исправить.</string>\n    <string name=\"restore_miui_warning\">Резервная копия/Восстановление может не работать должным образом, если отключена «Оптимизация MIUI».</string>\n    <string name=\"enhanced_tracking_info\">Предоставляет расширенные возможности для определённых источников. Серии будут автоматически отслеживаться при добавлении в библиотеку.</string>\n    <string name=\"enhanced_services\">Расширенные сервисы отслеживания</string>\n    <string name=\"theme_monet\">Динамическая</string>\n    <string name=\"label_background_activity\">Фоновая активность</string>\n    <string name=\"pref_lowest\">Самая низкая</string>\n    <string name=\"pref_low\">Низкая</string>\n    <string name=\"pref_high\">Высокая</string>\n    <string name=\"pref_highest\">Самая высокая</string>\n    <string name=\"pref_hide_threshold\">Чувствительность скрытия меню при прокрутке</string>\n    <string name=\"pref_inverted_colors\">Цвета наоборот</string>\n    <string name=\"relative_time_today\">Сегодня</string>\n    <string name=\"theme_tealturquoise\">Бирюзовая</string>\n    <string name=\"confirm_lock_change\">Выполните аутентификацию, чтобы подтвердить изменение</string>\n    <string name=\"label_default\">По умолчанию</string>\n    <string name=\"pref_category_appearance\">Отображение</string>\n    <string name=\"getting_started_guide\">Руководство по началу работы с приложением</string>\n    <string name=\"action_track\">Отслеживать</string>\n    <string name=\"pref_tablet_ui_mode\">Планшетный интерфейс</string>\n    <string name=\"pref_remove_exclude_categories\">Исключённые категории</string>\n    <string name=\"help_translate\">Помочь с переводом</string>\n    <string name=\"ext_app_info\">О приложении</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Установите и запустите Shizuku, чтобы использовать его как установщик расширений.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku не работает</string>\n    <string name=\"ext_installer_legacy\">По умолчанию</string>\n    <string name=\"ext_installer_pref\">Установщик</string>\n    <string name=\"ext_install_service_notif\">Установка расширения…</string>\n    <string name=\"action_sort_count\">Всего серий</string>\n    <string name=\"pref_verbose_logging\">Подробное ведение журнала</string>\n    <string name=\"pref_verbose_logging_summary\">Записывать подробный журнал в системный журнал (Снижает производительность приложения)</string>\n    <string name=\"action_display_language_badge\">Язык</string>\n    <string name=\"label_warning\">Предупреждение</string>\n    <string name=\"notification_size_warning\">Большое количество обновлений может привести к замедлению работы источников и увеличению расхода батареи. Нажмите для подробностей.</string>\n    <string name=\"backup_info\">Настоятельно рекомендуется хранить резервные копии в других местах или сервисах. Резервные копии могут содержать конфиденциальную информацию, как, например, пароли. Будьте осторожны при их отправке.</string>\n    <string name=\"connected_to_wifi\">Только по Wi-Fi</string>\n    <string name=\"update_72hour\">Каждые 3 дня</string>\n    <string name=\"download_queue_size_warning\">Предупреждение: Большое количество загрузок может привести к замедлению работы источников и/или блокировке Mihon. Нажмите для подробностей.</string>\n    <string name=\"ext_update_all\">Обновить все</string>\n    <string name=\"channel_app_updates\">Обновления приложения</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Очищать кэш глав при запуске приложения</string>\n    <string name=\"clear_database_source_item_count\">%1$d не библиотечных серий в базе данных</string>\n    <string name=\"database_clean\">Нечего очищать</string>\n    <string name=\"extension_api_error\">Не удалось получить доступные расширения</string>\n    <string name=\"privacy_policy\">Политика конфиденциальности</string>\n    <string name=\"pref_update_only_completely_read\">Пропускать серии с непрочитанными главами</string>\n    <string name=\"library_errors_help\">Для помощи в исправлении ошибок библиотеки, нажмите %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Сохранить как архив CBZ</string>\n    <string name=\"cancelled\">Отменено</string>\n    <string name=\"on_hiatus\">Перерыв</string>\n    <string name=\"publishing_finished\">Публикация завершена</string>\n    <string name=\"action_show_manga\">Показать серию</string>\n    <string name=\"action_display_cover_only_grid\">Сетка без названия</string>\n    <string name=\"pref_navigate_pan\">Панорамирование широких изображений</string>\n    <string name=\"pref_landscape_zoom\">Автоматически увеличивать широкие изображения</string>\n    <string name=\"pref_update_only_started\">Пропускать не начатые серии</string>\n    <string name=\"skipped_reason_completed\">Пропущено, т.к серия завершена</string>\n    <string name=\"skipped_reason_not_caught_up\">Пропущено, т.к есть непрочитанные главы</string>\n    <string name=\"skipped_reason_not_started\">Пропущено, т.к серия не начата</string>\n    <string name=\"learn_more\">Нажать для подробностей</string>\n    <string name=\"notification_update_error\">%1$d обновление(ий) не удалось</string>\n    <string name=\"rotation_reverse_portrait\">Портретная наоборот</string>\n    <string name=\"action_move_to_top_all_for_series\">Переместить серию в начало</string>\n    <string name=\"disabled_nav\">Отключено</string>\n    <string name=\"error_saving_picture\">Не удалось сохранить изображение</string>\n    <string name=\"empty_backup_error\">Нет элементов в библиотеке для резервирования</string>\n    <string name=\"update_check_open\">Открыть в GitHub</string>\n    <string name=\"webview_data_deleted\">Данные WebView очищены</string>\n    <string name=\"pref_clear_webview_data\">Очистить данные WebView</string>\n    <string name=\"action_close\">Закрыть</string>\n    <string name=\"source_filter_empty_screen\">Не найдено установленных источников</string>\n    <string name=\"source_empty_screen\">Не найдено источников</string>\n    <string name=\"action_sort_last_manga_update\">Последняя проверка обновления</string>\n    <string name=\"action_sort_unread_count\">Оставшиеся главы</string>\n    <string name=\"download_notifier_split_page_not_found\">Страница %d не найдена, при разделении</string>\n    <string name=\"split_tall_images_summary\">Улучшает производительность читалки</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Путь к файлам страницы %d не найден</string>\n    <string name=\"pref_reset_viewer_flags\">Сбросить настройки читалки для каждой серии</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Сбрасывает режим чтения и ориентацию для всех серий</string>\n    <string name=\"pref_reset_viewer_flags_success\">Все настройки читалки сброшены</string>\n    <string name=\"pref_reset_viewer_flags_error\">Не удалось сбросить настройки читалки</string>\n    <string name=\"empty_screen\">Упс, ошибочка вышла</string>\n    <string name=\"ext_info_age_rating\">Возрастное ограничение</string>\n    <string name=\"ext_info_version\">Версия</string>\n    <string name=\"ext_info_language\">Язык</string>\n    <string name=\"complete_list\">Прочитано</string>\n    <string name=\"on_hold_list\">Отложено</string>\n    <string name=\"reading_list\">Читаю</string>\n    <string name=\"wish_list\">Запланировано</string>\n    <string name=\"unfinished_list\">Не закончено</string>\n    <string name=\"network_not_metered\">Только в безлимитной сети</string>\n    <string name=\"cant_open_last_read_chapter\">Не удаётся открыть последнюю прочитанную главу</string>\n    <string name=\"custom_cover\">Пользовательская обложка</string>\n    <string name=\"not_installed\">Не установлено</string>\n    <string name=\"pref_app_language\">Язык приложения</string>\n    <string name=\"theme_lavender\">Лаванда</string>\n    <string name=\"description_placeholder\">Без описания</string>\n    <string name=\"internal_error\">InternalError: Проверьте журнал сбоев для дополнительной информации</string>\n    <string name=\"delete_category_confirmation\">Хотите ли вы удалить категорию \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Удалить категорию</string>\n    <string name=\"pref_user_agent_string\">User agent по умолчанию</string>\n    <string name=\"pref_reset_user_agent_string\">Сбросить user agent по умолчанию</string>\n    <string name=\"action_remove_everything\">Удалить всё</string>\n    <string name=\"appwidget_unavailable_locked\">Виджет недоступен при включённой блокировке биометрией</string>\n    <string name=\"appwidget_updates_description\">Посмотреть недавно обновлённые серии в библиотеке</string>\n    <string name=\"update_already_running\">Обновление уже запущено</string>\n    <string name=\"error_user_agent_string_blank\">User agent не может быть пустым</string>\n    <string name=\"theme_tidalwave\">Приливная Волна</string>\n    <string name=\"download_ahead\">Загрузить наперёд</string>\n    <string name=\"auto_download_while_reading\">При чтении</string>\n    <string name=\"download_ahead_info\">Работает только если текущая + следующая главы уже загружены.</string>\n    <string name=\"are_you_sure\">Вы уверены?</string>\n    <string name=\"multi_lang\">Многоязыковое</string>\n    <string name=\"remove_manga\">Вы собираетесь удалить \\\"%s\\\" из вашей библиотеки</string>\n    <string name=\"updates_last_update_info\">Последнее обновление библиотеки: %s</string>\n    <string name=\"popular\">Популярное</string>\n    <string name=\"missing_storage_permission\">Не предоставлены разрешения на хранение</string>\n    <string name=\"skipped_reason_not_always_update\">Пропущено, т.к серия не нуждается в обновлении</string>\n    <string name=\"action_search_hint\">Искать…</string>\n    <string name=\"crash_screen_restart_application\">Перезапустить приложение</string>\n    <string name=\"pref_appearance_summary\">Тема, формат даты и времени</string>\n    <string name=\"pref_library_summary\">Категории, глобальное обновление, перелистывание глав</string>\n    <string name=\"pref_reader_summary\">Режим чтения, отображение, навигация</string>\n    <string name=\"pref_downloads_summary\">Автоматическая загрузка, загрузка наперёд</string>\n    <string name=\"pref_tracking_summary\">Односторонняя синхронизация прогресса, расширенная синхронизация</string>\n    <string name=\"pref_browse_summary\">Источники, расширения, глобальный поиск</string>\n    <string name=\"pref_backup_summary\">Ручные и автоматические резервные копий, хранилище</string>\n    <string name=\"pref_security_summary\">Блокировка приложения, защита экрана</string>\n    <string name=\"pref_advanced_summary\">Выгрузка журнала сбоев, оптимизация батареи</string>\n    <string name=\"crash_screen_title\">Ой, ошибочка вышла!</string>\n    <string name=\"crash_screen_description\">%s столкнулось с непредвиденной ошибкой. Мы рекомендуем поделиться журналом сбоев в нашем Discord-сервере в ветке поддержки.</string>\n    <string name=\"unknown_title\">Неизвестное название</string>\n    <string name=\"invalid_location\">Недопустимое расположение: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Недопустимый параметр user agent</string>\n    <string name=\"updates_last_update_info_just_now\">Только что</string>\n    <string name=\"download_notifier_cache_renewal\">Проверка загрузок</string>\n    <string name=\"information_no_entries_found\">В этой категории нет серий</string>\n    <string name=\"action_open_random_manga\">Открыть случайную серию</string>\n    <string name=\"fdroid_warning\">Сборки F-Droid официально не поддерживаются.\n\\nНажмите, чтобы узнать больше.</string>\n    <string name=\"action_display_show_continue_reading_button\">Кнопка «Продолжить чтение»</string>\n    <string name=\"track_remove_finish_date_conf_text\">Это удалит ранее выбранную дату окончания из %s</string>\n    <string name=\"track_remove_date_conf_title\">Удалить дату?</string>\n    <string name=\"track_remove_start_date_conf_text\">Это удалит ранее выбранную дату начала из %s</string>\n    <string name=\"pref_invalidate_download_cache\">Переиндексировать загрузки</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Принуждает приложение перепроверить загруженные главы</string>\n    <string name=\"label_started\">Начато</string>\n    <string name=\"label_read_duration\">Продолжительность чтения</string>\n    <string name=\"label_overview_section\">Обзор</string>\n    <string name=\"label_tracker_section\">Отслеживание</string>\n    <string name=\"not_applicable\">Н/Д</string>\n    <string name=\"day_short\">%dд</string>\n    <string name=\"seconds_short\">%dс</string>\n    <string name=\"label_used\">Использовано</string>\n    <string name=\"label_downloaded\">Загружено</string>\n    <string name=\"label_total_chapters\">Всего</string>\n    <string name=\"label_stats\">Статистика</string>\n    <string name=\"label_completed_titles\">Завершённые серии</string>\n    <string name=\"label_titles_section\">Серии</string>\n    <string name=\"label_read_chapters\">Прочитано</string>\n    <string name=\"label_tracked_titles\">Отслеживаемые серии</string>\n    <string name=\"hour_short\">%dч</string>\n    <string name=\"label_mean_score\">Средняя оценка</string>\n    <string name=\"minute_short\">%dм</string>\n    <string name=\"label_titles_in_global_update\">В глобальном обновлении</string>\n    <string name=\"label_local\">На устройстве</string>\n    <string name=\"action_not_now\">Не сейчас</string>\n    <string name=\"information_no_manga_category\">Категория пуста</string>\n    <string name=\"pref_library_update_show_tab_badge\">Количество непрочитанных глав на иконке «Обновления»</string>\n    <string name=\"copied_to_clipboard_plain\">Скопировано в буфер обмена</string>\n    <string name=\"enhanced_services_not_installed\">Доступно, но источник не установлен: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Пропускать повторяющиеся главы</string>\n    <string name=\"confirm_add_duplicate_manga\">В вашей библиотеке уже есть серия с таким именем.\n\\n\n\\nВы всё ещё хотите продолжить?</string>\n    <string name=\"track_error\">%1$s ошибка: %2$s</string>\n    <string name=\"information_required_plain\">*необходимо</string>\n    <string name=\"pref_hide_in_library_items\">Скрывать серии, уже находящиеся в библиотеке</string>\n    <string name=\"action_copy_to_clipboard\">Копировать в буфер обмена</string>\n    <string name=\"action_update_category\">Обновить категорию</string>\n    <string name=\"split_tall_images\">Разделять длинные изображения</string>\n    <string name=\"overlay_header\">Наложение</string>\n    <string name=\"pref_page_rotate\">Развернуть широкие страницы под размер экрана</string>\n    <string name=\"pref_page_rotate_invert\">Отразить ориентацию развёрнутых широких страниц</string>\n    <string name=\"pref_debug_info\">Отладочная информация</string>\n    <string name=\"pref_chapter_swipe_end\">Глава при смахивании вправо</string>\n    <string name=\"pref_chapter_swipe_start\">Глава при смахивании влево</string>\n    <string name=\"pref_double_tap_zoom\">Двойное нажатие для увеличения</string>\n    <string name=\"action_filter_interval_custom\">Настраиваемая частота обновления</string>\n    <string name=\"intervals_header\">Интервалы</string>\n    <string name=\"manga_display_interval_title\">Оценивать каждые</string>\n    <string name=\"action_set_interval\">Задать интервал</string>\n    <string name=\"action_sort_next_updated\">Следующее ожидамое обновление</string>\n    <string name=\"pref_update_only_in_release_period\">Предсказать время выхода новых глав</string>\n    <string name=\"manga_display_modified_interval_title\">Задать обновления каждые</string>\n    <string name=\"skipped_reason_not_in_release_period\">Пропущено, т.к сегодня не ожидается выпуска</string>\n    <string name=\"track_delete_title\">Удалить отслеживание %s?</string>\n    <string name=\"track_delete_text\">Это удалит отслеживание в приложении.</string>\n    <string name=\"track_delete_remote_text\">Также удалить из %s</string>\n    <string name=\"action_ok\">ОК</string>\n    <string name=\"delete_downloaded\">Удалить загруженное</string>\n    <string name=\"has_results\">Имеет результаты</string>\n    <string name=\"library_sync_complete\">Синхронизация библиотеки завершена</string>\n    <string name=\"syncing_library\">Синхронизация библиотеки</string>\n    <string name=\"information_cloudflare_help\">Нажмите здесь, чтобы получить помощь с Cloudflare</string>\n    <string name=\"download_cache_invalidated\">Индекс загрузок недействителен</string>\n    <string name=\"create_backup_file_error\">Не удалось создать файл резервной копии</string>\n    <string name=\"track_activity_name\">Вход в сервис отслеживания</string>\n    <string name=\"exception_http\">HTTP %d, проверьте сайт в WebView</string>\n    <string name=\"exception_offline\">Нет подключения к интернету</string>\n    <string name=\"exception_unknown_host\">Не удалось достичь %s</string>\n    <string name=\"unlock_app_title\">Разблокировать %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Переместить серию в конец</string>\n    <string name=\"pref_relative_format\">Относительные временные метки</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" вместо \\\"%2$s\\\"</string>\n    <string name=\"app_settings\">Настройки приложения</string>\n    <string name=\"source_settings\">Настройки источников</string>\n    <string name=\"notification_updating_progress\">Обновление библиотеки... (%s)</string>\n    <string name=\"file_null_uri_error\">Файл не выбран</string>\n    <string name=\"label_data_storage\">Данные и хранение</string>\n    <string name=\"relative_time_span_never\">Никогда</string>\n    <string name=\"pref_flash_page_summ\">Уменьшает артефакты у экранов e-ink</string>\n    <string name=\"last_auto_backup_info\">Последнее автоматическое резервное копирование: %s</string>\n    <string name=\"pref_flash_page\">Мигать при смене страницы</string>\n    <string name=\"pref_storage_usage\">Использование хранилища</string>\n    <string name=\"action_sort_tracker_score\">Оценка сервиса отслеживания</string>\n    <string name=\"action_create\">Создать</string>\n    <string name=\"action_apply\">Применить</string>\n    <string name=\"action_revert_to_default\">Сбросить настройки</string>\n    <string name=\"no_scanlators_found\">Переводчики не найдены</string>\n    <string name=\"scanlator\">Переводчик</string>\n    <string name=\"exclude_scanlators\">Исключить переводчиков</string>\n    <string name=\"selected\">Выбрано</string>\n    <string name=\"not_selected\">Не выбрано</string>\n    <string name=\"action_menu_overflow_description\">Другие опции</string>\n    <string name=\"action_bar_up_description\">Перейти вверх</string>\n    <string name=\"pref_storage_location\">Путь хранилища</string>\n    <string name=\"pref_storage_location_info\">Используется для автоматических резевных копии, загрузок глав и источнике на устройстве.</string>\n    <string name=\"onboarding_storage_action_select\">Выбрать папку</string>\n    <string name=\"pref_onboarding_guide\">Руководство для начинающих</string>\n    <string name=\"onboarding_guides_new_user\">Новичок в %s? Мы настоятельно рекомендуем ознакомиться с нашим руководством.</string>\n    <string name=\"onboarding_action_finish\">Начать</string>\n    <string name=\"onboarding_storage_selection_required\">Необходимо выбрать папку</string>\n    <string name=\"onboarding_heading\">Добро пожаловать!</string>\n    <string name=\"onboarding_guides_returning_user\">Переустанавливаете %s?</string>\n    <string name=\"onboarding_action_skip\">Пропустить</string>\n    <string name=\"onboarding_action_next\">Следующее</string>\n    <string name=\"onboarding_description\">Давайте настроем парочку вещей. Вы всегда можете их поменять позже в настройках.</string>\n    <string name=\"no_location_set\">Не указан путь хранилища</string>\n    <string name=\"onboarding_storage_info\">Выберите папку где %1$s будет хранить загруженные главы, резервные копии и другое.\n\\n\n\\nРекомендуется использовать выделенную папку.\n\\n\n\\nВыбранная папка: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Разрешения для уведомлений</string>\n    <string name=\"onboarding_permission_install_apps\">Разрешения для установки приложений</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Позволит избежать прерывания длительных обновлений библиотеки, загрузок и восстановлений резервных копий.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Использование батареи в фоне</string>\n    <string name=\"onboarding_permission_install_apps_description\">Позволит устанавливать расширения источников.</string>\n    <string name=\"onboarding_permission_notifications_description\">Получать уведомления об обновлениях библиотеки и т.д.</string>\n    <string name=\"onboarding_permission_action_grant\">Предоставить</string>\n    <string name=\"available_disk_space_info\">Доступно: %1$s / Всего: %2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">Нужны разрешения для установки расширений. Нажмите сюда, чтобы их предоставить.</string>\n    <string name=\"private_settings\">Включать конфиденциальные настройки (например, токены для входа в службы отслеживания)</string>\n    <string name=\"invalid_backup_file_error\">Полная ошибка:</string>\n    <string name=\"manga_interval_expected_update\">Выход новых глав ожидается примерно через %1$s, следующая проверка будет через %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Настраиваемая частота обновления:</string>\n    <string name=\"error_repo_exists\">Этот репозиторий уже существует!</string>\n    <string name=\"pref_library_update_smart_update\">Умное обновление</string>\n    <string name=\"invalid_repo_name\">Недопустимый URL-адрес репозитория</string>\n    <string name=\"action_add_repo_message\">Добавить дополнительные репозиторий в Mihon. Это должны быть URL-адреса которые заканчиваться на \\\"index.min.json\\\".</string>\n    <string name=\"delete_repo_confirmation\">Хотите ли вы удалить репозиторий \\\"%s\\\"?</string>\n    <string name=\"action_delete_repo\">Удалить репозиторий</string>\n    <string name=\"action_add_repo\">Добавить репозиторий</string>\n    <string name=\"information_empty_repos\">У вас нет репозиториев.</string>\n    <string name=\"label_extension_repos\">Репозитории расширений</string>\n    <string name=\"label_add_repo_input\">URL-адрес репозитория</string>\n    <string name=\"onboarding_storage_help_action\">Руководство по хранению</string>\n    <string name=\"onboarding_storage_help_info\">Обновляетесь со старой версии и не знаете, что выбрать? Обратите внимание на руководство по хранению для большей информации.</string>\n    <string name=\"manga_interval_expected_update_soon\">Скоро</string>\n    <string name=\"theme_nord\">Север</string>\n    <string name=\"ext_revoke_trust\">Убрать доверие к ненадёжным расширениям</string>\n    <string name=\"action_open_repo\">Открыть репозиторий источника</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Отключить уменьшение масштаба</string>\n    <string name=\"action_add_anyway\">Добавить в любом случае</string>\n    <string name=\"pref_display_profile\">Пользовательский профиль отображения</string>\n    <string name=\"action_migrate_duplicate\">Перенести существующую серию</string>\n    <string name=\"action_replace_repo\">Заменить</string>\n    <string name=\"action_replace_repo_message\">Репозиторий %1$s имеет тот же подписанный ключ отпечатка, что и %2$s.\n\\nЕсли это так и задумано, %2$s будет заменён, в противном случае, свяжитесь с сопровождающим вашего репозитория.</string>\n    <string name=\"action_replace_repo_title\">Подписанный ключ отпечатка уже существует</string>\n    <string name=\"upcoming_calendar_prev\">Предыдущий месяц</string>\n    <string name=\"action_view_upcoming\">Просмотр предстоящих обновлений</string>\n    <string name=\"label_upcoming\">Предстоящее</string>\n    <string name=\"upcoming_guide\">Предстоящее руководство</string>\n    <string name=\"upcoming_calendar_next\">Следующий месяц</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Не удалось получить постоянный доступ к папке. Приложение может работать некорректно.</string>\n    <string name=\"pref_flash_duration\">Продолжительность вспышки</string>\n    <string name=\"pref_flash_duration_summary\">%1$s мс</string>\n    <string name=\"pref_flash_with\">Вспышка с</string>\n    <string name=\"pref_flash_style_black\">Чёрная</string>\n    <string name=\"pref_flash_style_white\">Белая</string>\n    <string name=\"pref_flash_style_white_black\">Белая и чёрная</string>\n    <string name=\"pref_flash_page_interval\">Вспышка каждую</string>\n    <string name=\"manga_interval_expected_update_null\">Эта серия либо завершена, либо дата ее выхода неизвестна.</string>\n    <string name=\"invalid_backup_file_unknown\">Файл резервной копии поврежден</string>\n    <string name=\"invalid_backup_file_json\">Резервное копирование в формате JSON не поддерживается</string>\n    <string name=\"extensionRepo_settings\">Репозитории расширений</string>\n    <string name=\"action_copy_link\">Копировать ссылку</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Пропустить скачивание повторяющихся прочитанных глав</string>\n    <string name=\"add_repo_confirmation\">Хотите ли вы добавить репозиторий \\\"%s\\\"?</string>\n    <string name=\"confirm_tracker_update\">Обновить сервисы отслеживания для главы %d?</string>\n    <string name=\"onboarding_permission_analytics\">Разрешить аналитику</string>\n    <string name=\"pref_firebase\">Аналитика и Журнал сбоев</string>\n    <string name=\"onboarding_permission_crashlytics\">Отправить журнал сбоев</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Отправить анонимно журнал сбоев разработчикам.</string>\n    <string name=\"firebase_summary\">Отправляя журнал сбоев и аналитику, вы позволите нам обнаружить и исправить ошибки, улучшить производительность и сделать будущие обновления более актуальными для ваших потребностей</string>\n    <string name=\"onboarding_permission_analytics_description\">Отправить анонимно данные об использовании для улучшения функций приложения.</string>\n    <string name=\"pref_security\">Безопасность</string>\n    <string name=\"action_sort_random\">Случайно</string>\n    <string name=\"ext_remove\">Удалить</string>\n    <string name=\"ext_confirm_remove\">Удалить расширение?</string>\n    <string name=\"remove_private_extension_message\">Вы действительно хотите удалить расширение \\\"%s\\\"?</string>\n    <string name=\"non_library_settings\">Все прочитанные серии</string>\n    <string name=\"trackers_updated_summary\">Сервисы отслеживания обновлены для главы %d</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Обновлять прогресс, когда отмечено как «Прочитано»</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Если читалка загружает пустое изображение, постепенно уменьшайте пороговую обработку.\\nВыбрано: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Пользовательская аппаратная пороговая обработка растрового изображения</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">По умолчанию (%d)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Влияет на производительность. Включите этот параметр, если пороговая обработка растрового изображения не помогает с ошибками, связанными с пустыми изображениями</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Приостановить историю чтения для расширений</string>\n    <string name=\"label_auto\">Авто</string>\n    <string name=\"theme_monochrome\">Монохром</string>\n    <string name=\"tracked_privately\">Отслеживается приватно</string>\n    <string name=\"action_toggle_private_on\">Отслеживать приватно</string>\n    <string name=\"action_toggle_private_off\">Отслеживать публично</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Использовать старый декодер для читалки с длинными страницами</string>\n    <string name=\"export\">Экспортировать</string>\n    <string name=\"artist\">Художник</string>\n    <string name=\"library_exported\">Библиотека экспортирована</string>\n    <string name=\"author\">Автор</string>\n    <string name=\"library_list\">Список библиотеки</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Отмечать дублированную прочитанную главу как \\\"Прочитано\\\"</string>\n    <string name=\"action_display_unread_badge\">Непрочитанные главы</string>\n    <string name=\"pref_behavior\">Поведение</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_existing\">После прочтения главы</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_new\">После получения новой главы</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sa/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s निमिषात् परम्</item>\n        <item quantity=\"other\">%1$s निमिषेषु परम्</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">ह्यः</item>\n        <item quantity=\"other\">%1$d दिनानि पूर्वम्</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d वर्गः</item>\n        <item quantity=\"other\">%d वर्गाः</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s मध्ये सम्पन्नम्, %2$s दोषः अस्ति</item>\n        <item quantity=\"other\">%1$s मध्ये सम्पन्नम्, %2$s दोषाः सन्ति</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s अध्यायः</item>\n        <item quantity=\"other\">%1$s अध्यायाः</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d अन्वेषकः</item>\n        <item quantity=\"other\">%d अन्वेषकाः</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s शेषः अस्ति</item>\n        <item quantity=\"other\">%1$s शेषः अस्ति</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">विस्तार-संशोधनम् उपलब्धम्</item>\n        <item quantity=\"other\">%d विस्तार-संशोधनानि उपलब्धानि</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d नव अध्यायः</item>\n        <item quantity=\"other\">%1$d नव अध्यायाः</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d प्रविष्ट्यर्थम्</item>\n        <item quantity=\"other\">%d प्रविष्ट्यर्थम्</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">अध्यायाः %1$s तथा 1 अधिकः</item>\n        <item quantity=\"other\">अध्यायाः %1$s तथा %2$d अधिकाः</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Skipping %d अध्यायः, स्रोतः तस्य अभावः वा तस्य निष्कासनं अस्ति</item>\n        <item quantity=\"other\">Skipping %d अध्यायाः, स्रोतः तेषां अभावः वा तेषां निष्कासनं अस्ति</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">श्वः</item>\n        <item quantity=\"other\">%1$d दिनेषु</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">अगला अपठितः अध्यायः</item>\n        <item quantity=\"other\">अगले %d अपठिताः अध्यायाः</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">अगला अध्यायः</item>\n        <item quantity=\"other\">अगले %d अध्यायाः</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d रिपोज़िटरी</item>\n        <item quantity=\"other\">%d रिपोज़िटरिस्</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 पृष्ठम्</item>\n        <item quantity=\"other\">%1$s पृष्ठानि</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 दिनम्</item>\n        <item quantity=\"other\">%d दिनानि</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s अध्यायः नास्ति</item>\n        <item quantity=\"other\">%1$s अध्यायाः न सन्ति</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sa/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_recent_updates\">नवीकरणानि</string>\n    <string name=\"name\">नाम</string>\n    <string name=\"label_more\">इतोऽपि</string>\n    <string name=\"label_settings\">समायोजनानि</string>\n    <string name=\"label_download_queue\">अवारोपणश्रेणिः</string>\n    <string name=\"label_recent_manga\">चरित्रम्</string>\n    <string name=\"label_migration\">स्थानान्तरगमनम्</string>\n    <string name=\"label_extensions\">विस्ताराः</string>\n    <string name=\"label_extension_info\">विस्तारस्य विवरणम्</string>\n    <string name=\"label_help\">साहाय्यम्</string>\n    <string name=\"manga\">ग्रन्थालय-प्रविष्ट्यः</string>\n    <string name=\"categories\">वर्गाः</string>\n    <string name=\"chapters\">अध्यायाः</string>\n    <string name=\"track\">अनुप्रज्ञानम्</string>\n    <string name=\"history\">चरित्रम्</string>\n    <string name=\"label_sources\">मूलानि</string>\n    <string name=\"label_default\">प्राथमिकम्</string>\n    <string name=\"label_library\">ग्रन्थालयः</string>\n    <string name=\"label_backup\">प्रतिलेखनं प्रतिसंस्कारं च</string>\n    <string name=\"label_warning\">पूर्वसूचना</string>\n    <string name=\"confirm_lock_change\">परिवर्तनं दृढीकर्तुं प्रमाणीकरोतु</string>\n    <string name=\"action_menu\">सूचिः</string>\n    <string name=\"action_filter\">शोधकम्</string>\n    <string name=\"action_filter_bookmarked\">पुटचिह्नं कृतानि</string>\n    <string name=\"action_filter_empty\">शोधकं निष्करोतु</string>\n    <string name=\"action_sort_alpha\">वर्णक्रमानुसारिणि</string>\n    <string name=\"action_sort_count\">समस्ताः माङ्गाः</string>\n    <string name=\"action_sort_latest_chapter\">नूतनः अध्यायः</string>\n    <string name=\"action_sort_date_added\">योजितदिनाङ्कः</string>\n    <string name=\"action_search\">अन्वेषणम्</string>\n    <string name=\"action_select_all\">सर्वानि चिनोतु</string>\n    <string name=\"action_mark_as_read\">पठितमिति अङ्कयतु</string>\n    <string name=\"action_mark_as_unread\">अपठितमिति अङ्कयतु</string>\n    <string name=\"action_download\">अवतारयतु</string>\n    <string name=\"action_bookmark\">अध्यायम् अङ्कयतु</string>\n    <string name=\"action_update_library\">ग्रन्थालयं नवीकरोतु</string>\n    <string name=\"action_enable_all\">सर्वाणि सशक्तं करोतु</string>\n    <string name=\"action_edit\">सम्पादयतु</string>\n    <string name=\"action_add\">योजयतु</string>\n    <string name=\"action_add_category\">वर्गं योजयतु</string>\n    <string name=\"action_rename_category\">वर्गस्य नाम परिणमतु</string>\n    <string name=\"action_move_category\">वर्गानि स्थापयतु</string>\n    <string name=\"action_edit_cover\">आवरणं सम्पादयतु</string>\n    <string name=\"action_pause\">विरामयतु</string>\n    <string name=\"action_previous_chapter\">पूर्वः अध्यायः</string>\n    <string name=\"action_retry\">पुनः यतताम्</string>\n    <string name=\"action_remove\">निष्कासयतु</string>\n    <string name=\"action_delete\">नाशयतु</string>\n    <string name=\"action_start\">आरभताम्</string>\n    <string name=\"action_resume\">अनुवर्तताम्</string>\n    <string name=\"action_open_in_web_view\">वेब्-व्यू-अनुप्रयोगे उद्घाटयतु</string>\n    <string name=\"action_migrate\">स्थानान्तरगमनं कुरु</string>\n    <string name=\"action_settings\">समायोजनानि</string>\n    <string name=\"action_filter_tracked\">अनुप्रज्ञातानि</string>\n    <string name=\"action_filter_unread\">अपठितानि</string>\n    <string name=\"action_sort_total\">समस्ताः अध्यायाः</string>\n    <string name=\"action_sort_last_read\">अन्तिमपठितम्</string>\n    <string name=\"action_sort_chapter_fetch_date\">समाहृतदिनाङ्कः</string>\n    <string name=\"action_search_settings\">अन्वेषणसमायोजनानि</string>\n    <string name=\"action_global_search\">सार्वत्रिकम् अन्वेषणम्</string>\n    <string name=\"action_select_inverse\">विलोमे चिनोतु</string>\n    <string name=\"action_edit_categories\">वर्गानि सम्पादयतु</string>\n    <string name=\"action_mark_previous_as_read\">पूर्वतमं पठितमिति अङ्कयतु</string>\n    <string name=\"action_view_chapters\">अध्यायाः दर्शयतु</string>\n    <string name=\"action_remove_bookmark\">अध्यायपुटचिह्नं निष्करोतु</string>\n    <string name=\"action_disable_all\">सर्वाणि अशक्तं करोतु</string>\n    <string name=\"action_next_chapter\">अग्रिमः अध्यायः</string>\n    <string name=\"action_open_in_browser\">जालसञ्चारके उद्घाटयतु</string>\n    <string name=\"information_no_downloads\">अवारोपितानि न सन्ति</string>\n    <string name=\"action_display\">प्रदर्शनम्</string>\n    <string name=\"action_display_grid\">सुसम्बद्धा ग्रिड्-शैली</string>\n    <string name=\"action_display_list\">सूची</string>\n    <string name=\"action_display_download_badge\">अवारोपिताः अध्यायाः</string>\n    <string name=\"action_display_local_badge\">स्थानीयाः माङ्गाः</string>\n    <string name=\"action_display_show_tabs\">वर्गीयाः पीठिकाः दर्शयतु</string>\n    <string name=\"action_disable\">अशक्तं करोतु</string>\n    <string name=\"action_pin\">उपरि उद्वर्णयतु</string>\n    <string name=\"action_unpin\">उद्वर्णं निष्करोतु</string>\n    <string name=\"action_cancel\">लुम्पतु</string>\n    <string name=\"action_cancel_all\">सर्वाणि लुम्पतु</string>\n    <string name=\"action_sort\">विन्यासः</string>\n    <string name=\"action_order_by_chapter_number\">अध्यायस्य क्रमसङ्ख्यया</string>\n    <string name=\"action_newest\">नविष्ठम्</string>\n    <string name=\"information_no_recent_manga\">सद्यः किमपि न पठितम्</string>\n    <string name=\"information_empty_library\">तव ग्रन्थालयः रिक्तम् अस्ति</string>\n    <string name=\"information_no_recent\">सद्यः नवीकरणानि न सन्ति</string>\n    <string name=\"information_empty_category\">तव वर्गाः एव न सन्ति। नूतनं निर्माणं कृत्वा व्यवस्थापयितुम् अधिकचिह्नं नोदयतु॥</string>\n    <string name=\"action_display_mode\">प्रदर्शनस्य अवस्था</string>\n    <string name=\"action_display_comfortable_grid\">सुसुखा ग्रिड्-शैली</string>\n    <string name=\"action_display_language_badge\">भाषा</string>\n    <string name=\"action_display_show_number_of_items\">वस्तूनां सङ्ख्यां दर्शयतु</string>\n    <string name=\"cancel_all_for_series\">अस्य धारावाहिकस्य कृते सर्वाणि लुम्पतु</string>\n    <string name=\"action_order_by_upload_date\">उपारोपणदिनाङ्केन</string>\n    <string name=\"action_oldest\">ज्येष्ठतमम्</string>\n    <string name=\"action_asc\">आरोहयतु</string>\n    <string name=\"action_desc\">अवारोहयतु</string>\n    <string name=\"action_move_to_top\">अग्रस्थानं चालयतु</string>\n    <string name=\"action_install\">प्रतिष्ठापयतु</string>\n    <string name=\"action_move_to_bottom\">अधःस्थानं चालयतु</string>\n    <string name=\"action_share\">प्रसारयतु</string>\n    <string name=\"action_save\">रक्षतु</string>\n    <string name=\"action_reset\">पुनःस्थापयतु</string>\n    <string name=\"action_undo\">अपाकरोतु</string>\n    <string name=\"action_show_errors\">विवरणानि द्रष्टुं स्पृशतु</string>\n    <string name=\"action_restore\">समाददातु</string>\n    <string name=\"action_webview_refresh\">नवीकरोतु</string>\n    <string name=\"action_start_downloading_now\">अवारोपणम् अधुना आरभताम्</string>\n    <string name=\"loading\">आरोपयति…</string>\n    <string name=\"app_not_available\">अनुप्रयोगः न उपलभ्यः</string>\n    <string name=\"pref_category_appearance\">रूपम्</string>\n    <string name=\"pref_category_library\">ग्रन्थालयः</string>\n    <string name=\"pref_category_downloads\">अवारोपितानि</string>\n    <string name=\"pref_category_tracking\">अनुप्रज्ञानम्</string>\n    <string name=\"pref_category_about\">स्वसमाचारः</string>\n    <string name=\"pref_category_theme\">दृश्यशैली</string>\n    <string name=\"theme_system\">संविधाम् अनुसरतु</string>\n    <string name=\"theme_light\">अशक्तं कुरु</string>\n    <string name=\"theme_monet\">गतिशीलम्</string>\n    <string name=\"theme_greenapple\">हरितसेवम्</string>\n    <string name=\"theme_midnightdusk\">निशीथसन्ध्या</string>\n    <string name=\"theme_strawberrydaiquiri\">तृणबदर-मदिरा</string>\n    <string name=\"theme_tealturquoise\">टील्-शैली</string>\n    <string name=\"theme_yinyang\">यिन् याङ्ग् च</string>\n    <string name=\"pref_dark_theme_pure_black\">सम्पूर्णकृष्णवर्णीया असितदशा</string>\n    <string name=\"action_open_log\">वृत्तम् उद्घाटयतु</string>\n    <string name=\"action_webview_back\">प्रतिगच्छतु</string>\n    <string name=\"action_webview_forward\">अग्रे गच्छतु</string>\n    <string name=\"pref_category_general\">सामान्यः</string>\n    <string name=\"pref_category_reader\">प्रदर्शकम्</string>\n    <string name=\"pref_category_advanced\">विस्तृतम्</string>\n    <string name=\"theme_dark\">सशक्तं कुरु</string>\n    <string name=\"pref_app_theme\">अनुप्रयोगस्य दृश्यशैली</string>\n    <string name=\"theme_tako\">टाकोशैली</string>\n    <string name=\"theme_yotsuba\">योट्सूबः</string>\n    <string name=\"pref_manage_notifications\">आवेदनानि निर्वहतु</string>\n    <string name=\"pref_category_security\">संरक्षणम्</string>\n    <string name=\"lock_with_biometrics\">उद्घाटनम् आवश्यकम्</string>\n    <string name=\"lock_always\">सदा</string>\n    <string name=\"lock_never\">न कदापि</string>\n    <string name=\"secure_screen\">पटलम् अभिरक्षतु</string>\n    <string name=\"hide_notification_content\">आवेदनवस्तु वृणोतु</string>\n    <string name=\"pref_date_format\">तिथिसंरूपम्</string>\n    <string name=\"lock_when_idle\">कार्याभावे अपिदधातु</string>\n    <string name=\"secure_screen_summary\">अभिरक्षणपटलम् अनुप्रयोगाणां परिवर्तने अनुप्रयोगवस्तु वृणोति पटलप्रतिकृतीनां च सृष्टिं निवारयति॥</string>\n    <string name=\"pref_category_nsfw_content\">प्रौढानां कृते एव (१८+) वस्तुमूलानि</string>\n    <string name=\"pref_show_nsfw_source\">मूलानां विस्ताराणां च सूचीषु दर्शयतु</string>\n    <string name=\"relative_time_today\">अद्य</string>\n    <string name=\"pref_library_columns\">प्रतिपङ्क्तौ वस्तूनि</string>\n    <string name=\"landscape\">अनुप्रस्थम्</string>\n    <string name=\"pref_category_display\">प्रदर्शनम्</string>\n    <string name=\"portrait\">चित्राकृतिः</string>\n    <string name=\"pref_library_update_interval\">स्वयङ्कृतनवीकरणानि</string>\n    <string name=\"update_never\">न कदापि</string>\n    <string name=\"update_6hour\">प्रतिषष्ठघण्टा</string>\n    <string name=\"update_24hour\">प्रतिदिनम्</string>\n    <string name=\"update_48hour\">प्रतिदिनद्वयम्</string>\n    <string name=\"update_72hour\">प्रतिदिनत्रयम्</string>\n    <string name=\"charging\">पारणसमये</string>\n    <string name=\"restrictions\">निर्बन्धाः - %s</string>\n    <string name=\"pref_category_library_update\">सार्वत्रिकनवीकरणम्</string>\n    <string name=\"update_12hour\">प्रतिद्वादशघण्टा</string>\n    <string name=\"update_weekly\">प्रतिसप्ताहिकम्</string>\n    <string name=\"pref_library_update_restriction\">स्वयङ्कृतनवीकरणनाम् उपकरणनिर्बन्धाः</string>\n    <string name=\"connected_to_wifi\">केवलं वै-फ़ै माध्यमेन</string>\n    <string name=\"pref_update_only_completely_read\">अपठितान् अध्यायान् गृह्णाति</string>\n    <string name=\"pref_update_only_non_completed\">समापितधारावाहिकाः</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">ग्रन्थालयनवीकरणे सति नूतनमुखचित्राय विवरणाय च मार्गतु</string>\n    <string name=\"default_category\">प्राथमिकवर्गः</string>\n    <string name=\"default_category_summary\">सदा पृच्छतु</string>\n    <string name=\"none\">न किमपि</string>\n    <string name=\"all\">सर्वाणि</string>\n    <string name=\"exclude\">वर्जयतु - %s</string>\n    <string name=\"include\">संयोजयतु - %s</string>\n    <string name=\"ext_updates_pending\">करणीयनवीकरणानि सन्ति</string>\n    <string name=\"ext_obsolete\">लुप्तम्</string>\n    <string name=\"ext_downloading\">अवतारयति</string>\n    <string name=\"ext_installing\">प्रतिष्ठापयति</string>\n    <string name=\"ext_installed\">प्रतिष्ठापितम्</string>\n    <string name=\"ext_untrusted\">अविश्वस्तम्</string>\n    <string name=\"ext_app_info\">अनुप्रयोगविवरणम्</string>\n    <string name=\"ext_nsfw_short\">१८+</string>\n    <string name=\"ext_nsfw_warning\">प्रौढानां कृते एव (१८+) वस्तु अन्तः स्यात्</string>\n    <string name=\"ext_install_service_notif\">विस्तारं प्रतिष्ठापयति …</string>\n    <string name=\"ext_installer_legacy\">क्रमगतम्</string>\n    <string name=\"pref_fullscreen\">पूर्णपटलम्</string>\n    <string name=\"pref_library_update_refresh_metadata\">प्रदत्तांशं स्वयञ्चालितं नवीकरोतु</string>\n    <string name=\"categorized_display_settings\">प्रतिवर्गं विन्यासस्य प्रदर्शनस्य च कृते समायोजनानि</string>\n    <string name=\"untrusted_extension\">अविश्वस्तविस्तारः</string>\n    <string name=\"extension_api_error\">विस्तारसूच्याः प्राप्तिः अनुत्तीर्णा</string>\n    <string name=\"pref_library_update_categories_details\">माङ्गाः याः वर्जितवर्गेषु सन्ति ताः अन्तर्भूतवर्गेषु सन्ति चेदपि तासां नवीकरणं न भविष्यति।</string>\n    <string name=\"obsolete_extension_message\">अयं विस्तारः इतःपरं न उपलभ्यः।</string>\n    <string name=\"ext_trust\">विश्वासः</string>\n    <string name=\"ext_update_all\">सर्वाणि नवीकरोतु</string>\n    <string name=\"ext_update\">नवीकरोतु</string>\n    <string name=\"ext_install\">प्रतिस्थायतु</string>\n    <string name=\"ext_pending\">अपूर्णम्</string>\n    <string name=\"ext_uninstall\">निष्कासयतु</string>\n    <string name=\"ext_installer_shizuku_stopped\">शिज़ुकुः न चलति</string>\n    <string name=\"ext_installer_pref\">प्रतिष्ठापनसहायकम्</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">शिजुकुं विस्तारप्रतिष्ठापनसहायकम् इव उपयोगं कर्तुं शिजुकुं प्रतिष्ठापयित्वा आरभताम्।</string>\n    <string name=\"pref_show_navigation_mode\">मार्गणविन्यासस्य उपरिस्तरं दर्शयतु</string>\n    <string name=\"pref_dual_page_invert\">द्विपुटविभाजनस्य स्थापनं व्यत्यासं कुरु</string>\n    <string name=\"pref_dual_page_split\">द्विपुटविभाजनम्</string>\n    <string name=\"pref_cutout_short\">खण्डितक्षेत्रे वस्तु दर्शयतु</string>\n    <string name=\"parental_controls_info\">एतत् अनधिकारैः उत वस्तुतः अशुद्धचिह्नितैः विस्तारेभ्यः ॰प्रौढानां कृते एव (१८+)॰ इति चिह्नितवस्तूनाम् अनुप्रयोगे दर्शनं न निवारयति।</string>\n    <string name=\"pref_show_navigation_mode_summary\">प्रदर्शकस्य उद्घाटने नोदनमण्डलानि दर्शयतु</string>\n    <string name=\"pref_page_transitions\">पुटसङ्क्रमान् जीवयतु</string>\n    <string name=\"pref_double_tap_anim_speed\">द्विवारनोदनं सञ्जीवनवेगः</string>\n    <string name=\"pref_dual_page_invert_summary\">यदि द्विपुटविभजनस्य स्थापना पठनदिशा समः न भवति</string>\n    <string name=\"pref_show_page_number\">पुटसङ्ख्यां दर्शयतु</string>\n    <string name=\"pref_show_reading_mode\">पठनदशां दर्शयतु</string>\n    <string name=\"pref_show_reading_mode_summary\">प्रदर्शकस्य उद्घाटने वर्तमानदशां सङ्क्षेपं दर्शयतु</string>\n    <string name=\"pref_crop_borders\">सीमाः कर्तयतु</string>\n    <string name=\"on\">सशक्तं कुरु</string>\n    <string name=\"off\">अशक्तं कुरु</string>\n    <string name=\"pref_grayscale\">धूसरवर्णीयम्</string>\n    <string name=\"pref_inverted_colors\">विलोमेन</string>\n    <string name=\"pref_custom_color_filter\">स्वकृतं वर्णशोधकम्</string>\n    <string name=\"pref_custom_brightness\">स्वकृता प्रचुरप्रकाशता</string>\n    <string name=\"pref_color_filter_mode\">वर्णशोधकस्य मिश्रदशा</string>\n    <string name=\"filter_mode_overlay\">उपरिस्तरः</string>\n    <string name=\"filter_mode_multiply\">गुणयतु</string>\n    <string name=\"filter_mode_screen\">पटलम्</string>\n    <string name=\"filter_mode_darken\">धूम्री करोतु</string>\n    <string name=\"pref_keep_screen_on\">पटलम् उत्तेजितं स्थापयतु</string>\n    <string name=\"pref_skip_filtered_chapters\">सम्मृष्टान् अध्यायान् लङ्घयतु</string>\n    <string name=\"pref_reader_navigation\">मार्गणम्</string>\n    <string name=\"pref_read_with_volume_keys\">ध्वनिस्तरकीले</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">ध्वनिस्तरकीले विलोमं कुरु</string>\n    <string name=\"tapping_inverted_none\">किमपि न</string>\n    <string name=\"tapping_inverted_horizontal\">अनुप्रस्थम्</string>\n    <string name=\"tapping_inverted_vertical\">ऊर्ध्वम्</string>\n    <string name=\"pref_reader_actions\">कार्याणि</string>\n    <string name=\"pref_read_with_long_tap\">दीर्घस्पर्शने दर्शयतु</string>\n    <string name=\"pref_create_folder_per_manga\">पुटानि भिन्नसञ्चयेषु रक्षतु</string>\n    <string name=\"pref_reader_theme\">पृष्ठभूमिवर्णः</string>\n    <string name=\"white_background\">श्वेतः</string>\n    <string name=\"gray_background\">धूसरः</string>\n    <string name=\"black_background\">कृष्णः</string>\n    <string name=\"automatic_background\">स्वयङ्कृतम्</string>\n    <string name=\"l_nav\">एल-आकारम्</string>\n    <string name=\"kindlish_nav\">किञ्डल्-इव</string>\n    <string name=\"edge_nav\">सीमा</string>\n    <string name=\"right_and_left_nav\">दक्षिणतः वामनतः च</string>\n    <string name=\"nav_zone_next\">अग्रिमम्</string>\n    <string name=\"nav_zone_prev\">पूर्वतनम्</string>\n    <string name=\"nav_zone_left\">वामतः</string>\n    <string name=\"nav_zone_right\">दक्षिणतः</string>\n    <string name=\"left_to_right_viewer\">दक्षिणेतरात् दक्षिणतः</string>\n    <string name=\"right_to_left_viewer\">वामेतरात् वामतः</string>\n    <string name=\"vertical_viewer\">ऊर्ध्वम्</string>\n    <string name=\"webtoon_viewer\">वेब्-टून्</string>\n    <string name=\"pref_viewer_nav\">मार्गणविन्यासः</string>\n    <string name=\"pref_viewer_type\">प्राथमिकपठनदशा</string>\n    <string name=\"vertical_plus_viewer\">सततम् ऊर्ध्वम्</string>\n    <string name=\"pref_read_with_tapping_inverted\">विलोमं स्पर्शनम्</string>\n    <string name=\"pref_skip_read_chapters\">पठितम् इति चिह्नितान् अध्यायान् लङ्घयतु</string>\n    <string name=\"filter_mode_lighten\">प्रकाशयति</string>\n    <string name=\"tapping_inverted_both\">द्वयम्</string>\n    <string name=\"pref_create_folder_per_manga_summary\">माङ्गाशीर्षकम् अनुसृत्य सञ्चयान् स्रक्ष्यति</string>\n    <string name=\"pager_viewer\">पृष्ठीकृतम्</string>\n    <string name=\"scale_type_stretch\">विस्तारणम्</string>\n    <string name=\"scale_type_fit_width\">विस्तृतिं समुचितं कुरु</string>\n    <string name=\"scale_type_fit_screen\">पटलं समुचितं कुरु</string>\n    <string name=\"scale_type_original_size\">मूलः आकारः</string>\n    <string name=\"scale_type_smart_fit\">चतुरसमुचितम्</string>\n    <string name=\"pref_zoom_start\">आरम्भस्थानं सर्पकं कुरु</string>\n    <string name=\"zoom_start_automatic\">स्वयङ्कृतम्</string>\n    <string name=\"zoom_start_left\">वामतः</string>\n    <string name=\"zoom_start_right\">दक्षिणतः</string>\n    <string name=\"zoom_start_center\">मध्यः</string>\n    <string name=\"double_tap_anim_speed_0\">सञ्जीवनं नास्ति</string>\n    <string name=\"double_tap_anim_speed_normal\">साधारणम्</string>\n    <string name=\"double_tap_anim_speed_fast\">शीघ्रम्</string>\n    <string name=\"pref_rotation_type\">प्राथमिकभ्रमणप्रकारः</string>\n    <string name=\"rotation_type\">भ्रमणप्रकारः</string>\n    <string name=\"rotation_free\">मुक्तम्</string>\n    <string name=\"rotation_portrait\">लम्बदर्शम्</string>\n    <string name=\"rotation_landscape\">अनुप्रस्थम्</string>\n    <string name=\"rotation_force_portrait\">नियतलम्बदर्शम्</string>\n    <string name=\"rotation_force_landscape\">नियतानुप्रस्थम्</string>\n    <string name=\"color_filter_r_value\">आर्</string>\n    <string name=\"color_filter_g_value\">जी</string>\n    <string name=\"color_filter_b_value\">बि</string>\n    <string name=\"color_filter_a_value\">ए</string>\n    <string name=\"pref_always_show_chapter_transition\">सदा अध्यायसङ्क्रमं दर्शयतु</string>\n    <string name=\"pref_category_reading_mode\">पठनदशा</string>\n    <string name=\"pref_category_reading\">पठनम्</string>\n    <string name=\"pref_webtoon_side_padding\">पक्षस्य पाडिङ्गः</string>\n    <string name=\"pref_image_scale_type\">मापनप्रकारः</string>\n    <string name=\"scale_type_fit_height\">ऊर्ध्वत्वं समुचितं कुरु</string>\n    <string name=\"pref_high\">उच्चम्</string>\n    <string name=\"pref_low\">अधस्तनम्</string>\n    <string name=\"pref_highest\">उच्चतमम्</string>\n    <string name=\"pref_remove_bookmarked_chapters\">पुटचिह्नकृतानाम् अध्यायानां नाशयितुम् अनुमन्यताम्</string>\n    <string name=\"pref_remove_exclude_categories\">वर्जितवर्गाः</string>\n    <string name=\"disabled\">अशक्तं कृतम्</string>\n    <string name=\"last_read_chapter\">अन्तिमपठितः अध्यायः</string>\n    <string name=\"second_to_last\">अन्तिमपठितात् अध्यायात् पूर्वम्</string>\n    <string name=\"third_to_last\">अन्तिमपठितात् अध्यायात् द्वितीयपूर्वम्</string>\n    <string name=\"services\">सेवाः</string>\n    <string name=\"pref_remove_after_marked_as_read\">पठितमिति स्वीयचिह्नितात् परम्</string>\n    <string name=\"pref_remove_after_read\">पठनात् परं स्वयञ्चालितं नाशयतु</string>\n    <string name=\"save_chapter_as_cbz\">CBZ-लेखागारम् इव अमुकनाम्ना रक्षतु</string>\n    <string name=\"pref_auto_update_manga_sync\">पठनात् परं प्रगतिं नवीकरोतु</string>\n    <string name=\"pref_lowest\">अधमम्</string>\n    <string name=\"pref_category_delete_chapters\">अध्यायान् नाशयतु</string>\n    <string name=\"fourth_to_last\">अन्तिमपठितात् अध्यायात् तृतीयपूर्वम्</string>\n    <string name=\"fifth_to_last\">अन्तिमपठितात् अध्यायात् चतुर्थपूर्वम्</string>\n    <string name=\"pref_category_auto_download\">स्वचालितम् अवारोपणम्</string>\n    <string name=\"pref_download_new\">नूतनान् अध्यायान् अवतारयतु</string>\n    <string name=\"tracking_guide\">अनुप्रज्ञानमार्गदर्शनम्</string>\n    <string name=\"enhanced_services\">विवृद्धसेवाः</string>\n    <string name=\"action_track\">अनुप्रजानातु</string>\n    <string name=\"pref_create_backup\">प्रतिलेखनं निर्मातु</string>\n    <string name=\"pref_create_backup_summ\">एतत् उपयुज्य वर्तमानग्रन्थालयं समादातुं शक्यते</string>\n    <string name=\"pref_restore_backup\">प्रतिलेखनं समाददातु</string>\n    <string name=\"pref_backup_interval\">प्रतिलेखनस्य आवर्तनता</string>\n    <string name=\"backup_in_progress\">प्रतिलेखनं पूर्वमेव प्रगतौ अस्ति</string>\n    <string name=\"restore_duration\">%02d निमेषाः %02d क्षणाः च</string>\n    <string name=\"restoring_backup_error\">प्रतिलेखनस्य समादानम् अनुत्तीर्णम्</string>\n    <string name=\"creating_backup_error\">प्रतिलेखनम् अनुत्तीर्णम्</string>\n    <string name=\"restore_in_progress\">प्रतिसंस्कारः पूर्वमेव प्रगत्याम् अस्ति</string>\n    <string name=\"restoring_backup\">प्रतिलेखनं समाददाति</string>\n    <string name=\"restoring_backup_canceled\">प्रतिसंस्कारः अलोप्यत</string>\n    <string name=\"restore_completed\">प्रतिसंस्कारं समापितम्</string>\n    <string name=\"restore_miui_warning\">यदि MIUI वृद्धिकरणम् अशक्तं कृतं तर्हि प्रतिलेखनम्/प्रतिसंस्कारः क्रियां युक्तं न कुर्यात्।</string>\n    <string name=\"backup_info\">स्वयङ्कृतप्रतिलेखनानि अतीव निर्दिशितानि। त्वया अन्यस्थानेषु अपि प्रतिकृतीनां स्थापनम् उचितं भविष्यति॥</string>\n    <string name=\"pref_restore_backup_summ\">प्रतिलेखनसञ्चिकायाः ग्रन्थालयं समाददातु</string>\n    <string name=\"backup_created\">प्रतिलेखनं निर्मितम्</string>\n    <string name=\"invalid_backup_file\">अनाप्ता प्रतिलेखनसञ्चिका</string>\n    <string name=\"invalid_backup_file_missing_manga\">प्रतिलेखने काऽपि माङ्गा नास्ति।</string>\n    <string name=\"backup_restore_missing_sources\">मूलानि विहीनानि -</string>\n    <string name=\"backup_restore_missing_trackers\">ट्राकर्तन्त्रांशाः न अन्तर्गताः -</string>\n    <string name=\"backup_choice\">त्वं कानि प्रतिलेखितुम् इच्छसि</string>\n    <string name=\"creating_backup\">प्रतिलेखनं निर्माति</string>\n    <string name=\"label_network\">जालम्</string>\n    <string name=\"pinned_sources\">अग्रिमस्थकृतानि</string>\n    <string name=\"latest\">नविष्ठम्</string>\n    <string name=\"browse\">गवेषयतु</string>\n    <string name=\"website\">जालस्थानम्</string>\n    <string name=\"version\">संस्करणम्</string>\n    <string name=\"cancelled\">अलोप्यत</string>\n    <string name=\"manga_info_expand\">अधिकम्</string>\n    <string name=\"manga_info_collapse\">न्यूनम्</string>\n    <string name=\"chapter_error\">दोषः</string>\n    <string name=\"chapter_paused\">विरमितम्</string>\n    <string name=\"download_unread\">अपठितम्</string>\n    <string name=\"manga_cover\">मुखचित्रम्</string>\n    <string name=\"dropped\">त्यक्तम्</string>\n    <string name=\"repeating\">पुनःपठति</string>\n    <string name=\"score\">प्राप्ताङ्कः</string>\n    <string name=\"title\">शीर्षकम्</string>\n    <string name=\"status\">स्थितिः</string>\n    <string name=\"track_status\">स्थितिः</string>\n    <string name=\"track_type\">प्रकारः</string>\n    <string name=\"paused\">विरमितम्</string>\n    <string name=\"username\">उपयोक्तृनाम</string>\n    <string name=\"pref_hide_threshold\">सारयति सति सूच्याः गुप्तीकरणाय सूक्ष्मचैतन्यम्</string>\n    <string name=\"pref_download_new_categories_details\">यद्यपि अन्तर्भूतवर्गेषु स्थिताः सन्ति तथापि वर्जितवर्गेषु स्थिताः माङ्गाः अवारोपिताः न भविष्यन्ति।</string>\n    <string name=\"tracking_info\">अनुप्रज्ञानसेवासु अध्यायप्रगतिं नवीकर्तुं एकमार्गसमाकलनम्। तदीयात् अनुप्रज्ञानगण्डात् व्यक्तिगतेभ्यः माङ्गानिवेशेभ्यः अनुप्रज्ञानं स्थापयतु॥</string>\n    <string name=\"label_data\">दत्तांशः</string>\n    <string name=\"tabs_header\">प्लवनखण्डाः</string>\n    <string name=\"other_source\">अन्यम्</string>\n    <string name=\"date\">तिथिः</string>\n    <string name=\"ongoing\">चलत्</string>\n    <string name=\"unknown\">अज्ञातम्</string>\n    <string name=\"licensed\">अधिकारि</string>\n    <string name=\"manga_download\">अवतारयतु</string>\n    <string name=\"manga_tracking_tab\">अनुप्रज्ञानम्</string>\n    <string name=\"password\">गुप्तपदम्</string>\n    <string name=\"login\">अन्तर्गच्छतु</string>\n    <string name=\"transition_finished\">समाप्तम् -</string>\n    <string name=\"transition_current\">वर्तमानम् -</string>\n    <string name=\"transition_next\">अग्रिमम् -</string>\n    <string name=\"transition_previous\">पूर्वम् -</string>\n    <string name=\"unread\">अपठितम्</string>\n    <string name=\"reading\">पठति</string>\n    <string name=\"completed\">समापितम्</string>\n    <string name=\"migrate\">स्थानान्तरगमनम्</string>\n    <string name=\"copy\">प्रतिलेखं करोतु</string>\n    <string name=\"update_check_confirm\">अवतारयतु</string>\n    <string name=\"update_check_notification_download_in_progress\">अवारोपयामि…</string>\n    <string name=\"local_source_help_guide\">स्थानीयमूलमार्गदर्शनम्</string>\n    <string name=\"action_global_search_hint\">सार्वत्रिकान्वेषणम्…</string>\n    <string name=\"chapter_not_found\">अध्यायः न लभ्यः</string>\n    <string name=\"on_hiatus\">भग्नम्</string>\n    <string name=\"add_to_library\">ग्रन्थालये योजयतु</string>\n    <string name=\"manga_added_library\">ग्रन्थालये योजितम्</string>\n    <string name=\"display_mode_chapter\">अध्यायः %1$s</string>\n    <string name=\"chapter_downloading_progress\">अवारोपयति (%1$d/%2$d)</string>\n    <string name=\"sort_by_source\">मूलेन</string>\n    <string name=\"update_check_notification_download_complete\">अवारोपणं समाप्तम्</string>\n    <string name=\"download_notifier_title_error\">दोषः</string>\n    <string name=\"spen_previous_page\">पूर्वपुटः</string>\n    <string name=\"spen_next_page\">अग्रिमपुटः</string>\n    <string name=\"pref_clear_database\">दत्तनिधिं मार्जयतु</string>\n    <string name=\"database_clean\">दत्तनिधिः मार्जितः</string>\n    <string name=\"label_background_activity\">पृष्ठभूमिकार्यक्रमम्</string>\n    <string name=\"pref_disable_battery_optimization\">विद्युत्कोषवृद्धिकरणम् अशक्तं करोतु</string>\n    <string name=\"whats_new\">नूतनं किम्</string>\n    <string name=\"pref_tablet_ui_mode\">टाबलेट् यू॰ऐ</string>\n    <string name=\"help_translate\">अनुवादसाहाय्यं करोतु</string>\n    <string name=\"remove_from_library\">ग्रन्थालयात् निष्करोतु</string>\n    <string name=\"publishing_finished\">प्रकाशनं समाप्तम्</string>\n    <string name=\"manga_removed_library\">ग्रन्थालयात् निष्कृतम्</string>\n    <string name=\"in_library\">ग्रन्थालये</string>\n    <string name=\"show_title\">मूलशीर्षकम्</string>\n    <string name=\"show_chapter_number\">अध्यायसङ्ख्या</string>\n    <string name=\"cover_saved\">मुखचित्रं रक्षितम्</string>\n    <string name=\"on_hold\">विरामे</string>\n    <string name=\"track_started_reading_date\">आरम्भकतिथिः</string>\n    <string name=\"track_finished_reading_date\">समाप्ततिथिः</string>\n    <string name=\"transition_pages_loading\">पुटान् आरोपयतु…</string>\n    <string name=\"updating_library\">ग्रन्थालयं नवीकरोति</string>\n    <string name=\"pref_clear_history\">चरित्रं मार्जयतु</string>\n    <string name=\"download_notifier_download_paused\">अवारोपणं विरमितम्</string>\n    <string name=\"channel_errors\">दोषाः</string>\n    <string name=\"label_downloaded_only\">अवारोपितानि एव</string>\n    <string name=\"channel_progress\">प्रगतिः</string>\n    <string name=\"download_notifier_downloader_title\">अवारोपणसाधनम्</string>\n    <string name=\"channel_common\">सामान्यम्</string>\n    <string name=\"pref_incognito_mode\">प्रच्छन्ननामदशा</string>\n    <string name=\"pref_clear_cookies\">ज्ञापकानि मार्जयतु</string>\n    <string name=\"cookies_cleared\">ज्ञापकानि मार्जितानि</string>\n    <string name=\"used_cache\">उपयुक्तम् - %1$s</string>\n    <string name=\"clear_database_completed\">निवेशाः नाशिताः</string>\n    <string name=\"check_for_updates\">नवीकरणेभ्यः मार्गतु</string>\n    <string name=\"updated_version\">सं%1$s प्रति नवीकृतम्</string>\n    <string name=\"email\">ईपत्रसङ्केतः</string>\n    <string name=\"login_success\">अन्तर्गतम्</string>\n    <string name=\"logout\">बहिर्गच्छतु</string>\n    <string name=\"unknown_error\">अज्ञातदोषः</string>\n    <string name=\"updating_category\">वर्गं नवीकरोमि</string>\n    <string name=\"downloaded_chapters\">अवारोपिताः अध्यायाः</string>\n    <string name=\"local_source\">स्थानीयमूलम्</string>\n    <string name=\"last_used_source\">गतोपयुक्तम्</string>\n    <string name=\"local_filter_order_by\">क्रमेण</string>\n    <string name=\"unknown_author\">अज्ञातलेखकः</string>\n    <string name=\"unknown_status\">अज्ञातस्थितिः</string>\n    <string name=\"chapter_settings\">अध्यायसमायोजनानि</string>\n    <string name=\"notification_incognito_text\">प्रच्छन्ननामदशां अशक्तं करोतु</string>\n    <string name=\"manga_from_library\">ग्रन्थालयात् माङ्गा</string>\n    <string name=\"no_more_results\">न इतोऽपि फलितानि</string>\n    <string name=\"no_results_found\">फलितानि न लभ्यानि</string>\n    <string name=\"local_invalid_format\">अध्यायसंरूपम् अनाप्तम्</string>\n    <string name=\"add_tracking\">अनुप्रज्ञानं योजयतु</string>\n    <string name=\"snack_categories_deleted\">वर्गाः नाशिताः</string>\n    <string name=\"picture_saved\">चित्रं रक्षितम्</string>\n    <string name=\"custom_filter\">स्वकृतशोधकम्</string>\n    <string name=\"cover_updated\">मुखचित्रं नवीकृतम्</string>\n    <string name=\"chapter_progress\">पुटः - %1$d</string>\n    <string name=\"viewer\">पठनदशा</string>\n    <string name=\"clear_history_completed\">चरित्रं नाशितम्</string>\n    <string name=\"notification_chapters_single\">अध्यायः %1$s</string>\n    <string name=\"notification_chapters_multiple\">अध्यायाः %1$s</string>\n    <string name=\"update_check_notification_download_error\">अवारोपणदोषः</string>\n    <string name=\"channel_complete\">पूर्णम्</string>\n    <string name=\"channel_new_chapters\">अध्यायनवीकरणानि</string>\n    <string name=\"channel_app_updates\">अनुप्रयोगनवीकरणानि</string>\n    <string name=\"channel_ext_updates\">विस्तारनवीकरणानि</string>\n    <string name=\"pref_dns_over_https\">HTTPS उपरि DNS (DoH)</string>\n    <string name=\"getting_started_guide\">प्रारम्भिकमार्गदर्शनम्</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">साधनसमायोजनानि उद्घाटयितुं न अशक्नोम्</string>\n    <string name=\"pref_verbose_logging\">अतिविस्तीर्णेतिवृत्तलेखनम्</string>\n    <string name=\"plan_to_read\">पठितुं इच्छामि</string>\n    <string name=\"page_list_empty_error\">पुटाः न लभ्याः</string>\n    <string name=\"loader_not_implemented_error\">मूलं न लभ्यम्</string>\n    <string name=\"update_check_notification_update_available\">नूतनसंस्करणम् उपलभ्यम्</string>\n    <string name=\"action_show_manga\">माङ्गां दर्शयतु</string>\n    <string name=\"notification_new_chapters\">नूतनाध्यायाः लभ्याः</string>\n    <string name=\"action_display_cover_only_grid\">केवलं मुखचित्रेण इष्टिकाविन्यासः</string>\n    <string name=\"pref_clear_chapter_cache\">अध्यायस्य काष्वस्तु मार्जयतु</string>\n    <string name=\"privacy_policy\">गुप्ततानीतिः</string>\n    <string name=\"licenses\">अपावृतप्रभावकानि अनुज्ञापत्राणि</string>\n    <string name=\"pref_enable_acra\">ध्वंसावेदनानि प्रेषयतु</string>\n    <string name=\"delete_downloads_for_manga\">अवारोपिताध्यायान् नाशयानि किम्</string>\n    <string name=\"set_chapter_settings_as_default\">प्राथमिकमिव स्थापयतु</string>\n    <string name=\"no_chapters_error\">काः अपि अध्यायाः न लभ्याः</string>\n    <string name=\"set_as_cover\">मुखचित्रम् इव स्थापयतु</string>\n    <string name=\"pref_category_for_this_series\">अस्यै धारावाहिकायै</string>\n    <string name=\"file_select_cover\">मुखचित्रम् चिनोतु</string>\n    <string name=\"file_select_backup\">प्रतिलेखनसञ्चिकां चिनोतु</string>\n    <string name=\"pref_navigate_pan\">पुटान्तरे प्लवतु</string>\n    <string name=\"pref_landscape_zoom\">अनुप्रस्थचित्रं सर्पकं करोतु</string>\n    <string name=\"pref_refresh_library_covers\">ग्रन्थालयमाङ्गामुखचित्राणि नवीकरोतु</string>\n    <string name=\"pref_dump_crash_logs\">ध्वंसेतिवृत्तानि पातयतु</string>\n    <string name=\"sort_by_upload_date\">उपारोपिततिथ्या</string>\n    <string name=\"error_saving_cover\">मुखचित्ररक्षणे दोषः</string>\n    <string name=\"error_sharing_cover\">मुखचित्रप्रसारणे दोषः</string>\n    <string name=\"sort_by_number\">अध्यायसङ्ख्यया</string>\n    <string name=\"pref_incognito_mode_summary\">पठनचरित्रं विरमिष्यति</string>\n    <string name=\"error_no_match\">समः न लभ्यः</string>\n    <string name=\"migration_help_guide\">मूलस्य सङ्क्रमणमार्गदर्शनम्</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" कृते सार्वत्रिकेण अवेक्षताम्</string>\n    <string name=\"login_title\">%1$s प्रति अन्तर्गच्छतु</string>\n    <string name=\"logout_title\">%1$s इतः बहिर्गच्छानि किम्</string>\n    <string name=\"source_not_installed\">मूलं न प्रतिष्ठापितम् - %1$s</string>\n    <string name=\"snack_add_to_library\">माङ्गां ग्रन्थालये योजयानि किम्</string>\n    <string name=\"notification_cover_update_failed\">मुखचित्रनवीकरणम् अनुत्तीर्णम्</string>\n    <string name=\"no_next_chapter\">अग्रिमाध्यायः न लभ्यः</string>\n    <string name=\"recent_manga_time\">अध्यायः %1$s – %2$s</string>\n    <string name=\"transition_no_next\">अग्रिमाध्यायः नास्ति</string>\n    <string name=\"transition_no_previous\">पूर्वाध्यायः नास्ति</string>\n    <string name=\"share_page_info\">%1$s: %2$s पुटः च %3$d</string>\n    <string name=\"pref_update_only_started\">पठिताः अध्यायाः न सन्ति</string>\n    <string name=\"update_check_no_new_updates\">नूतननवीकरणानि न उपलभ्यानि</string>\n    <string name=\"chapter_settings_updated\">अध्यायस्य प्राथमिकसमायोजनानि नवीकृतानि</string>\n    <string name=\"source_unsupported\">मूलं न भरितम्</string>\n    <string name=\"migration_dialog_what_to_include\">संयोजयितुं दत्तांशान् चिनोतु</string>\n    <string name=\"requires_app_restart\">प्रभावयितुम् अनुप्रयोगस्य पुनःप्रारम्भः आवश्यकः</string>\n    <string name=\"decode_image_error\">चित्रस्य आरोहणं न अशक्नोत्</string>\n    <string name=\"battery_optimization_disabled\">विद्युत्कोषवृद्धिकरणं पूर्वमेव अशक्तं कृतम्</string>\n    <string name=\"clipboard_copy_error\">अंशफलकान्ते प्रतिलेखनम् अनुत्तीर्णम्</string>\n    <string name=\"transition_pages_error\">पुटानाम् आरोहणम् अनुत्तीर्णम् - %1$s</string>\n    <string name=\"download_notifier_text_only_wifi\">वै-फ़ै सम्पर्कः न उपलभ्यः</string>\n    <string name=\"download_notifier_no_network\">जालसम्पर्कः न उपलभ्यः</string>\n    <string name=\"copied_to_clipboard\">प्रतिलेखः अंशफलकान्ते कृतः -\n\\n%1$s</string>\n    <string name=\"notification_chapters_single_and_more\">अध्यायः %1$s च इतोऽपि %2$d च</string>\n    <string name=\"file_picker_error\">सञ्चिकाग्राही अनुप्रयोगः न लभ्यः</string>\n    <string name=\"skipped_reason_completed\">धारावाहिकः पूर्णः अतः लङ्घितः</string>\n    <string name=\"clear_database_source_item_count\">दत्तनिधौ %1$d ग्रन्थालयपराः माङ्गाः सन्ति</string>\n    <string name=\"logout_success\">इदानीं त्वं बहिर्गतम्</string>\n    <string name=\"no_pinned_sources\">अग्रिमस्थकृतमूलानि तव न सन्ति</string>\n    <string name=\"myanimelist_relogin\">कृपया MAL-अन्ते पुनः अन्तर्गच्छतु</string>\n    <string name=\"information_webview_required\">टाचीयोमेः कृते वेब्-व्यू-तन्त्रांशः अपेक्षितः</string>\n    <string name=\"information_cloudflare_bypass_failure\">क्लौड्-फ़्लेर्व्यवस्थायाः अतिक्रमणम् अनुत्तीर्णम्</string>\n    <string name=\"download_insufficient_space\">साधनसङ्ग्रहे आवश्यकरिक्तस्थानं न अस्ति इति कारणात् अध्यायानाम् अवारोपणं न शक्नुयात्</string>\n    <string name=\"pref_verbose_logging_summary\">संविधावृत्तलेखं प्रति अतिविस्तीर्णवृत्तलेखान् मुद्रयतु (अनुप्रयोगप्रवृत्तिम् अल्पयति)</string>\n    <string name=\"download_notifier_unknown_error\">यादृच्छिकदोषकारणात् अध्यायस्य अवारोपणम् न शक्नुयात्</string>\n    <string name=\"also_set_chapter_settings_for_library\">अपि मम ग्रन्थालये सर्वाभ्यः माङ्गाभ्यः आचरतु</string>\n    <string name=\"clear_history_confirmation\">त्वं निश्चितं किम् ? चरित्रं सर्वं लुप्तं भविष्यति।</string>\n    <string name=\"update_check_eol\">एतत् आण्ड्रायिड्-संस्करणम् अधुना न भरितम्</string>\n    <string name=\"information_webview_outdated\">इतोऽपि उत्तमतरसङ्गतिं प्रप्तुं कृपया वेब्-व्यू-अनुप्रयोगं नवीकरोतु</string>\n    <string name=\"downloaded_only_summary\">तव ग्रन्थालये सर्वाः माङ्गाः शोधनीकरोति</string>\n    <string name=\"pref_clear_database_summary\">तव ग्रन्थालये न रक्षितानां माङ्गानां चरित्रं नाशय</string>\n    <string name=\"confirm_delete_chapters\">त्वं निश्चितरूपेण सङ्गृहीतान् अध्यायान् नाशयितुम् इच्छसि किम् ?</string>\n    <string name=\"clear_database_confirmation\">त्वं निश्चितं किम्। पर-ग्रन्थालय-माङ्गानाम् अपिठाध्यायाः नष्टाः भविष्यन्ते</string>\n    <string name=\"download_queue_size_warning\">पूर्वसूचना -- महद्भाराणि अवारोपणानि कुर्यात् मूलानि मन्दानि। अपि च टाचीयोमिं निवारयेत्॥</string>\n    <string name=\"pref_dump_crash_logs_summary\">व्युत्पादकेभ्यः प्रसारयितुं दोषदत्तम् एकस्यां सञ्चिकायां रक्षति</string>\n    <string name=\"confirm_set_chapter_settings\">इमानि समायोजनानि प्राथमिकानि इव रक्षितुं त्वं निश्चितं किम्</string>\n    <string name=\"pref_acra_summary\">स्खलितानां परिहरणे साहाय्यं करिष्यति। संवेदनशीलदत्तांशाः न प्रेषिष्यते॥</string>\n    <string name=\"pref_disable_battery_optimization_summary\">पृष्ठभूमौ ग्रन्थालयस्य नवीकरणेषु प्रतिलेखनेषु च साहाय्यं करोति</string>\n    <string name=\"dialog_with_checkbox_remove_description\">अस्य अध्यायस्य पठिततिथिम् एतत् निष्करोति। त्वं निश्चितं किम्</string>\n    <string name=\"cache_delete_error\">काष्वस्तु मार्जयति सति एकः दोषः भूतः</string>\n    <string name=\"pref_auto_clear_chapter_cache\">अनुप्रयोगपिधाने अध्यायस्य काष्वस्तु मार्जयतु</string>\n    <string name=\"cache_deleted\">काष्वस्तु मार्जितम्। %1$d-सञ्चिकाः नाशिताः भूताः</string>\n    <string name=\"error_category_exists\">अनेन नाम्ना पूर्वमेव एकः वर्गः अस्ति</string>\n    <string name=\"confirm_set_image_as_cover\">इदं चित्रं मुखचित्रम् इव उपयोजनीयं किम्</string>\n    <string name=\"notification_first_add_to_library\">एतत् करणात् पूर्वं कृपया तव ग्रन्थालयाय माङ्गाः योजयतु</string>\n    <string name=\"library_errors_help\">ग्रन्थालयनवीकरणदोषान् परिहर्तुं साहाय्यार्थं %1$s पश्य</string>\n    <string name=\"information_empty_category_dialog\">तव वर्गाः एव न सन्ति।</string>\n    <string name=\"dialog_with_checkbox_reset\">अस्यै माङ्गायै सर्वान् अध्यायान् पुनःस्थापयति</string>\n    <string name=\"skipped_reason_not_caught_up\">अपठिताध्यायाः सन्ति अतः लङ्घितम्</string>\n    <string name=\"skipped_reason_not_started\">काः अपि अध्यायाः न पठिताः अतः लङ्घितम्</string>\n    <string name=\"download_queue_error\">अध्यायानाम् अवारोपणं न अशक्नोत्। त्वया अवारोपितानि नाम्नः विभागे पुनः यतितुं शक्यते</string>\n    <string name=\"migration_selection_prompt\">यस्मात् स्थानान्तरगमनं करणीयं तत् चिनोतु</string>\n    <string name=\"notification_size_warning\">पूर्वसूचना -- मूलेभ्यः महद्नवीकरणानि हानिकारकाणि भवन्ति तस्मात् नवीकरणानि मन्दानि भवेयुः अपि च विद्युत्कोषोपयोगः अधिकं भवेत्</string>\n    <string name=\"notification_update_error\">%1$d नवीकरणानि अनुत्तीर्णानि</string>\n    <string name=\"learn_more\">अधिकं जानातु</string>\n    <string name=\"action_move_to_top_all_for_series\">धारावाहिकम् अग्रस्थानं चालयतु</string>\n    <string name=\"rotation_reverse_portrait\">विपरीतं लम्बदर्शनम्</string>\n    <string name=\"label_local\">स्थानीयम्</string>\n    <string name=\"label_stats\">साङ्ख्यिकी</string>\n    <string name=\"label_started\">आरब्धम्</string>\n    <string name=\"action_set_interval\">अवधिं स्थापयतु</string>\n    <string name=\"delete_downloaded\">अवारोपितं नाशयतु</string>\n    <string name=\"label_downloaded\">अवारोपितम्</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sah/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d бөлөхтөр</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">%1$s мүнүүтэ кэннэ</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">Туолла %1$sҕа %2$s сыаһалаах</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">%1$s хаалла</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">%1$s түһүмэх</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d трэкэр</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">Манна %d түһүмэх суох</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sah/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_add\">Киллэр</string>\n    <string name=\"action_edit\">Уларыт</string>\n    <string name=\"action_disable_all\">Барытын араар</string>\n    <string name=\"action_enable_all\">Барытын холбоо</string>\n    <string name=\"action_update_library\">Бэбэлэтиэкэ саҥардыы</string>\n    <string name=\"action_delete\">Сотон кэбис</string>\n    <string name=\"action_remove_bookmark\">Түһүмэх кыбытыытын ылан кэбис</string>\n    <string name=\"action_bookmark\">Түһүмэх кыбытыыта</string>\n    <string name=\"action_download\">Хачайдаа</string>\n    <string name=\"action_mark_previous_as_read\">Ааспыты аахтым диэн бэлиэтээ</string>\n    <string name=\"action_mark_as_unread\">Аахпатым диэн бэлиэтээ</string>\n    <string name=\"action_mark_as_read\">Аахтым диэн бэлиэтээ</string>\n    <string name=\"action_select_inverse\">Төттөрөтүн тал</string>\n    <string name=\"action_select_all\">Барытын тал</string>\n    <string name=\"action_global_search\">Толору көрдөөһүн</string>\n    <string name=\"action_search\">Көрдөөһүн</string>\n    <string name=\"action_sort_date_added\">Киирбит кэмэ</string>\n    <string name=\"action_sort_latest_chapter\">Бүтэһик түһүмэх</string>\n    <string name=\"action_sort_last_read\">Бүтэһигинэн ааҕыллыбыт</string>\n    <string name=\"action_sort_total\">Түһүмэх ахсаанынан</string>\n    <string name=\"action_sort_alpha\">Алпаабыт бэрээдэгинэн</string>\n    <string name=\"action_filter_empty\">Биилтирэни ылыы</string>\n    <string name=\"action_filter_unread\">Ааҕыллыбатах</string>\n    <string name=\"action_filter_bookmarked\">Кыбытыы</string>\n    <string name=\"action_filter\">Биилтирэ</string>\n    <string name=\"action_menu\">Талба</string>\n    <string name=\"action_settings\">Түстэл</string>\n    <string name=\"history\">История</string>\n    <string name=\"track\">Кэтээһин</string>\n    <string name=\"chapters\">Түһүмэхтэр</string>\n    <string name=\"manga\">Маанга</string>\n    <string name=\"categories\">Бөлөхтөр</string>\n    <string name=\"information_empty_category\">Эйиэхэ бөлөхтөр суохтар. Эбэр бэлиэни батта, бэбэлэтиэкэҕэ саҥа бөлөҕү оҥорорго.</string>\n    <string name=\"information_empty_library\">Эн бэбэлэтиэкэн кураанах. Бэбэлэтиэкэҕэ айымньыыларыы көрдөөһүнтэн эп.</string>\n    <string name=\"information_no_recent_manga\">Бүтэһик кэмҥэ тугу да аахпатын</string>\n    <string name=\"information_no_recent\">Саҥардыылар суохтар</string>\n    <string name=\"information_no_downloads\">Хачаайдааһын суох</string>\n    <string name=\"label_help\">Көмө</string>\n    <string name=\"label_extension_info\">Кэҥэтии туһунан</string>\n    <string name=\"label_extensions\">Кэҥэтии</string>\n    <string name=\"label_migration\">Көһүү</string>\n    <string name=\"label_backup\">Хаппаас куопуйа</string>\n    <string name=\"label_sources\">Төрүттэр</string>\n    <string name=\"label_recent_manga\">Остуоруйа</string>\n    <string name=\"label_recent_updates\">Саҥардыылар</string>\n    <string name=\"label_library\">Бэбэлэтиэкэ</string>\n    <string name=\"label_download_queue\">Хачаайдааһын уочарата</string>\n    <string name=\"label_settings\">Түстэл</string>\n    <string name=\"label_more\">Эбии</string>\n    <string name=\"name\">Аат</string>\n    <string name=\"default_category_summary\">Наар ыйыт</string>\n    <string name=\"default_category\">Куолутунан бөлөх</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Саҥа тас уонна кыра чаастар баалларын, бэрэбиэркэлээ</string>\n    <string name=\"pref_library_update_refresh_metadata\">Метаданнайдары автоматическайдык саҥарт</string>\n    <string name=\"pref_update_only_non_completed\">Бүтэ илик маанганы эрэ, саҥарт</string>\n    <string name=\"charging\">Иитиллэр</string>\n    <string name=\"pref_library_update_restriction\">Саҥардыы хааччахтааһына</string>\n    <string name=\"update_weekly\">Нэдиэлэ аайы</string>\n    <string name=\"update_48hour\">Икки күн аайы</string>\n    <string name=\"update_24hour\">Күн аайы</string>\n    <string name=\"update_12hour\">Уон икки чаас аайы</string>\n    <string name=\"update_6hour\">Алта чаас аайы</string>\n    <string name=\"update_never\">Илиинэн</string>\n    <string name=\"pref_library_update_interval\">Саҥардыы түргэнэ</string>\n    <string name=\"pref_category_library_update\">Улахан саҥардыы</string>\n    <string name=\"landscape\">Сытыары</string>\n    <string name=\"portrait\">Туруору</string>\n    <string name=\"pref_library_columns\">Маллары кэккэ туруор</string>\n    <string name=\"pref_category_display\">Көрдөр</string>\n    <string name=\"hide_notification_content\">Биллэрии иһин кистээ</string>\n    <string name=\"secure_screen_summary\">Атын эбиликкэ көһөргөр, скриншоту сабаргар, эбилик иһин кистээ</string>\n    <string name=\"secure_screen\">Көмүскэл экрана</string>\n    <string name=\"lock_never\">Хаһан да</string>\n    <string name=\"lock_always\">Наар</string>\n    <string name=\"lock_when_idle\">Күүтү эрэһиимигэр сап</string>\n    <string name=\"lock_with_biometrics\">Арыйыыны ирдээ</string>\n    <string name=\"pref_category_security\">Көмүскэл</string>\n    <string name=\"pref_manage_notifications\">Биллэриилэри салай</string>\n    <string name=\"pref_date_format\">Даататын формаата</string>\n    <string name=\"theme_dark\">Холбоммут</string>\n    <string name=\"theme_light\">Араарыллыбыт</string>\n    <string name=\"theme_system\">Системнайы тутуһуҥ</string>\n    <string name=\"pref_category_theme\">Тиэмэ</string>\n    <string name=\"pref_category_about\">Эбии туһунан</string>\n    <string name=\"pref_category_advanced\">Эбии</string>\n    <string name=\"pref_category_tracking\">Кэтээһин</string>\n    <string name=\"pref_category_downloads\">Хачайдаммыттар</string>\n    <string name=\"pref_category_reader\">Ааҕааччы</string>\n    <string name=\"pref_category_library\">Бэбэлэтиэкэ</string>\n    <string name=\"pref_category_general\">Сүрүн</string>\n    <string name=\"app_not_available\">Эбилик кыаллыбат</string>\n    <string name=\"loading\">Холбонуу…</string>\n    <string name=\"action_webview_refresh\">Чэбдигирт</string>\n    <string name=\"action_webview_forward\">Инники</string>\n    <string name=\"action_webview_back\">Төптөрү</string>\n    <string name=\"action_restore\">Чөлүгэр түһэр</string>\n    <string name=\"action_open_log\">Программа сурунаалын арый</string>\n    <string name=\"action_undo\">Уларыт</string>\n    <string name=\"action_reset\">Ыраастаа</string>\n    <string name=\"action_save\">Хааллар</string>\n    <string name=\"action_share\">Тарҕат</string>\n    <string name=\"action_install\">Туруор</string>\n    <string name=\"action_move_to_bottom\">Бүтүүгэ көһөр</string>\n    <string name=\"action_move_to_top\">Саҕаланыыга көһөр</string>\n    <string name=\"action_oldest\">Олох урукку</string>\n    <string name=\"action_newest\">Сабыс-саҥа</string>\n    <string name=\"action_sort\">Сааһылаа</string>\n    <string name=\"action_cancel_all\">Барытын уларыт</string>\n    <string name=\"action_cancel\">Уларытыы</string>\n    <string name=\"action_unpin\">Уһул</string>\n    <string name=\"action_pin\">Иҥиннэр</string>\n    <string name=\"action_disable\">Араар</string>\n    <string name=\"action_display_show_tabs\">Бөлөхтөр кыбытыктарын көрдөр</string>\n    <string name=\"action_display_download_badge\">Бэлиэлэри хачайдаа</string>\n    <string name=\"action_display_comfortable_grid\">Табыгастаах илим</string>\n    <string name=\"action_display_list\">Испииһэк</string>\n    <string name=\"action_display_grid\">Биир кэлим илим</string>\n    <string name=\"action_display\">Көрдөр</string>\n    <string name=\"action_display_mode\">Көрүнүн уларыт</string>\n    <string name=\"action_migrate\">Көһүү</string>\n    <string name=\"action_open_in_web_view\">WebViewга арый</string>\n    <string name=\"action_open_in_browser\">Көрдөөһүнҥэ арый</string>\n    <string name=\"action_resume\">Салҕаа</string>\n    <string name=\"action_start\">Саҕалаа</string>\n    <string name=\"action_remove\">Суох гын</string>\n    <string name=\"action_retry\">Хатылаа</string>\n    <string name=\"action_next_chapter\">Аныгыскы түһүмэх</string>\n    <string name=\"action_previous_chapter\">Ааспыттанны түһүмэх</string>\n    <string name=\"action_pause\">Тохтобул</string>\n    <string name=\"action_view_chapters\">Түһүмэхтэри көр</string>\n    <string name=\"action_edit_cover\">Таһын уларытыы</string>\n    <string name=\"action_move_category\">Бөлө(ххө/хтөргө) киллэр</string>\n    <string name=\"action_rename_category\">Бөлөх аатын уларыт</string>\n    <string name=\"action_edit_categories\">Бөлөхтөрү уларыт</string>\n    <string name=\"action_add_category\">Бөлөҕү киллэр</string>\n    <string name=\"pref_webtoon_side_padding\">Ойоҕостон тэйии</string>\n    <string name=\"pref_category_reading\">Ааҕы</string>\n    <string name=\"pref_category_reading_mode\">Ааҕы эрэһиимэ</string>\n    <string name=\"pref_always_show_chapter_transition\">Көһөр түһүмэҕи куруук көрдөр</string>\n    <string name=\"color_filter_a_value\">А</string>\n    <string name=\"color_filter_b_value\">Халлаан күөх</string>\n    <string name=\"color_filter_g_value\">От күөх</string>\n    <string name=\"color_filter_r_value\">Кыһыл</string>\n    <string name=\"rotation_force_landscape\">Сытыары</string>\n    <string name=\"rotation_force_portrait\">Туруору</string>\n    <string name=\"rotation_free\">Босхо</string>\n    <string name=\"pref_rotation_type\">Эргичийии</string>\n    <string name=\"double_tap_anim_speed_fast\">Түргэнник</string>\n    <string name=\"double_tap_anim_speed_normal\">Көннөрү</string>\n    <string name=\"double_tap_anim_speed_0\">Хамсааһына суох</string>\n    <string name=\"zoom_start_center\">Киин</string>\n    <string name=\"zoom_start_right\">Уҥа</string>\n    <string name=\"zoom_start_left\">Хаҥас</string>\n    <string name=\"zoom_start_automatic\">Автоматическай</string>\n    <string name=\"pref_zoom_start\">Улаатыннары маҥнайгы туруга</string>\n    <string name=\"scale_type_smart_fit\">Өйдөөх</string>\n    <string name=\"scale_type_original_size\">Маҥнайгы кээмэй</string>\n    <string name=\"scale_type_fit_height\">Үрдүгүнэн</string>\n    <string name=\"scale_type_fit_width\">Туоратынан</string>\n    <string name=\"scale_type_stretch\">Ууннар</string>\n    <string name=\"scale_type_fit_screen\">Экранынан</string>\n    <string name=\"pref_image_scale_type\">Тарҕаныыта</string>\n    <string name=\"pager_viewer\">Сирэйдэринэн</string>\n    <string name=\"vertical_plus_viewer\">Тохтообоххо туруору</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"vertical_viewer\">Туруору</string>\n    <string name=\"right_to_left_viewer\">Хаҥас диэки</string>\n    <string name=\"left_to_right_viewer\">Уҥа диэки</string>\n    <string name=\"pref_viewer_type\">Куолутунан ааҕар эрэһиим</string>\n    <string name=\"black_background\">Хара</string>\n    <string name=\"gray_background\">Бороҥ</string>\n    <string name=\"white_background\">Маҥан</string>\n    <string name=\"pref_reader_theme\">Кэнники өҥ</string>\n    <string name=\"pref_read_with_long_tap\">Уһун баттааһыҥҥа - кэпсэтии</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Тыас талкыйдарын миэстэлэрин уларыт</string>\n    <string name=\"pref_read_with_volume_keys\">Тыас талкыйдара</string>\n    <string name=\"pref_reader_navigation\">Хамсыы</string>\n    <string name=\"pref_skip_filtered_chapters\">Биилтирэммит түһүмэхтэри көтүт</string>\n    <string name=\"pref_skip_read_chapters\">Ааҕыллыбыт түһүмэхтэри көтүт</string>\n    <string name=\"pref_keep_screen_on\">Экран холбонон турдун</string>\n    <string name=\"filter_mode_darken\">Хараҥатыы</string>\n    <string name=\"filter_mode_lighten\">Сырдатыы</string>\n    <string name=\"filter_mode_screen\">Экран</string>\n    <string name=\"filter_mode_multiply\">Төгүллээһин</string>\n    <string name=\"filter_mode_overlay\">Сабыы</string>\n    <string name=\"pref_show_reading_mode_summary\">Ааҕаччы холбонон турдаҕына, билиҥҥи эрэһиими кылгастык көрдөр</string>\n    <string name=\"pref_show_reading_mode\">Ааҕыы эрэһиимин көрдөр</string>\n    <string name=\"pref_color_filter_mode\">Өҥ биилтирэни олордор эрэһиим</string>\n    <string name=\"pref_custom_color_filter\">Туттааччы өҥ биилтирэ</string>\n    <string name=\"pref_custom_brightness\">Туттааччы сырдыга</string>\n    <string name=\"pref_crop_borders\">Быһыллы кыраныыссата</string>\n    <string name=\"pref_show_page_number\">Сирэй нүөмэрин көрдөр</string>\n    <string name=\"pref_double_tap_anim_speed\">Иккитэ баттыырга хамсааһын түргэнэ</string>\n    <string name=\"pref_page_transitions\">Хамсааһыннах, сирэй арыйыыта</string>\n    <string name=\"pref_cutout_short\">Быһыллыбыт хонууга баары көрдөр</string>\n    <string name=\"pref_fullscreen\">Толору экран</string>\n    <string name=\"obsolete_extension_message\">Бу кэҥэтии кыаллыбат буолла.</string>\n    <string name=\"untrusted_extension_message\">Бу кэҥэтии эрэлэ суох туоһу суругунан бэлиэтэммит уонна холбоммотох.\n\\n\n\\nКуһаҕан кэҥэтии ханнык баҕар, киирэргэ наадалах даннайдары, устуон сөп уонна бэйэтэ киириэн сөп.\n\\n\n\\nБу туоһу сурукка эрэнэр буоллаххына, бэйэҕин кутталга угаҕын.</string>\n    <string name=\"untrusted_extension\">Эрэлэ суох кэҥэтии</string>\n    <string name=\"ext_uninstall\">Сотон кэбис</string>\n    <string name=\"ext_untrusted\">Эрэлэ суох</string>\n    <string name=\"ext_trust\">Эрэллээх</string>\n    <string name=\"ext_installed\">Турда</string>\n    <string name=\"ext_installing\">ТуруорааҺын</string>\n    <string name=\"ext_downloading\">Хачайдааһын</string>\n    <string name=\"ext_pending\">Кэтэһэбит</string>\n    <string name=\"ext_install\">Туруор</string>\n    <string name=\"ext_obsolete\">Эргэрбит</string>\n    <string name=\"ext_update\">Саҥардыы</string>\n    <string name=\"ext_updates_pending\">Саҥардыылары кэтэһэбит</string>\n    <string name=\"all\">Барыта</string>\n    <string name=\"pref_clear_cookies\">Кукины ырааста</string>\n    <string name=\"label_network\">Ситим</string>\n    <string name=\"restoring_backup_canceled\">Төнүҥнэри тохтоото</string>\n    <string name=\"restoring_backup_error\">Хаппаас куопуйа төнүҥнэриитэ туолбата</string>\n    <string name=\"restoring_backup\">Хаппаас куопуйаны төнүҥнэри туола турар</string>\n    <string name=\"restore_in_progress\">Төнүҥнэрии туола турар</string>\n    <string name=\"creating_backup_error\">Хаппаас куопуйа оҥоһуллубата</string>\n    <string name=\"creating_backup\">Хаппаас куопуйа оҥоһуута</string>\n    <string name=\"backup_choice\">Тугу куопуйалаары гынннын?</string>\n    <string name=\"backup_in_progress\">Хаппаас куопуйа оҥоруута туола турар</string>\n    <string name=\"restore_duration\">%02d мүнүүтэ %02d сөкүүндэ</string>\n    <string name=\"restore_completed\">Төнүҥнэри бүттэ</string>\n    <string name=\"backup_restore_missing_trackers\">Трэкэрдар киирбэтилэр:</string>\n    <string name=\"backup_restore_missing_sources\">Суох төрүттэр:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Хаппаас куопуйа маангата суох.</string>\n    <string name=\"invalid_backup_file\">Хаппаас куопуйа алдьаммыт билэтэ</string>\n    <string name=\"backup_created\">Хаппаас куопуйа оҥоһуллунна</string>\n    <string name=\"pref_backup_interval\">Хаппаас куопуйа оҥоһуутун түргэнэ</string>\n    <string name=\"pref_restore_backup_summ\">Бэбэлэтиэкэни хаппаас куопуйа билэтиттэн төнүҥнэрии</string>\n    <string name=\"pref_restore_backup\">Хаппаас куопуйаны куолутунан туруоруу</string>\n    <string name=\"pref_create_backup_summ\">Билиҥни бибилиотеканы төнүннэрэргэ туттуохха сөп</string>\n    <string name=\"pref_create_backup\">Хаппаас куопуйаны оҥоруу</string>\n    <string name=\"tracking_info\">Биир өттүттэн мэнэйдэһии, кэтээһин өҥөлөргө баар түһүмэхтэр туруктарын саҥардыыга. Маанга туспа суругун уонна талкыйын кэтээһинин түстэлгэ уларыт.</string>\n    <string name=\"services\">Өҥөлөр</string>\n    <string name=\"pref_auto_update_manga_sync\">Түһүмэх туругун ааҕы кэннэ саҥарт</string>\n    <string name=\"pref_download_new\">Саҥа түһүмэхтэри хачайдаа</string>\n    <string name=\"fifth_to_last\">Бүтэһик түһүмэхтэн бэһис</string>\n    <string name=\"fourth_to_last\">Бүтэһик түһүмэхтэн төрдүс</string>\n    <string name=\"third_to_last\">Бүтэһик түһүмэхтэн үһүс</string>\n    <string name=\"second_to_last\">Бүтэһик түһүмэх иннинээҕи</string>\n    <string name=\"last_read_chapter\">Бүтэһигинэн ааҕыллыбыт түһүмэх</string>\n    <string name=\"disabled\">Араарыллыбыт</string>\n    <string name=\"pref_remove_after_read\">Ааҕы кэннэ</string>\n    <string name=\"pref_remove_after_marked_as_read\">Ааҕыллыбыт диэн суруллубутун кэннэ</string>\n    <string name=\"requires_app_restart\">Уларыйыы киирэрин гына эбилиги хос холбоо</string>\n    <string name=\"cache_delete_error\">Кээс сотторуутугар сыыһааһын буолла</string>\n    <string name=\"cache_deleted\">Кээс ыраастанна. %1$d билэ сотторуллубут этэ</string>\n    <string name=\"used_cache\">Туттуллубут: %1$s</string>\n    <string name=\"pref_clear_chapter_cache\">Түһүмэх кээһин ыраастааһын</string>\n    <string name=\"label_data\">Билим</string>\n    <string name=\"cookies_cleared\">Куки ыраастанна</string>\n    <string name=\"clear_database_confirmation\">Эрэллэххин дуо? Ааҕыллыбыт түһүмэхтэр уонна бэбэлэтиэкэҕэ суох маанга туруга сүтүө</string>\n    <string name=\"pref_clear_database_summary\">Эн бэбэлэтиэкэҕэр суох маанга остуоруйатын сотторуу</string>\n    <string name=\"pref_clear_database\">Билим олоҕо ыраастааһына</string>\n    <string name=\"pref_disable_battery_optimization\">Батарея тупсарыытын араарыы</string>\n    <string name=\"pref_refresh_library_covers\">Бэбэлэтиэкэҕэ баар маанга таһын чэбдигирии</string>\n    <string name=\"clear_database_completed\">Дааннайдар сотуллубуттар</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Бэбэлэтиэкэ уонна хаппаас куопуйатыгар кэннинээҕи саҥардыытыгар көмөлөһөр</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Устройства түстэлэ сатаан арыллыбата</string>\n    <string name=\"battery_optimization_disabled\">Батарея тупсуруута араарыллынна</string>\n    <string name=\"file_select_backup\">Хаппаас куопуйа билэтин талыы</string>\n    <string name=\"whats_new\">Туох саҥа баарый</string>\n    <string name=\"version\">Биэрсия</string>\n    <string name=\"website\">Үөп сир</string>\n    <string name=\"licenses\">Аһаҕас төрүттээх лицензиялар</string>\n    <string name=\"updated_version\">v%1$s дылы саҥарданна</string>\n    <string name=\"check_for_updates\">Саҥардыы баар буолуутун бэрэбиэркэлээһин</string>\n    <string name=\"action_global_search_hint\">Толору көрдөөһүн…</string>\n    <string name=\"pinned_sources\">Иҥиннэриллибит</string>\n    <string name=\"last_used_source\">Бүтэһигинэн туттуллубут</string>\n    <string name=\"other_source\">Атыттар</string>\n    <string name=\"local_source\">Локальнай төрүт</string>\n    <string name=\"no_results_found\">Түмүк суох</string>\n    <string name=\"no_more_results\">Эбии түмүк суох</string>\n    <string name=\"tabs_header\">Кыбытыктар</string>\n    <string name=\"updating_category\">Бөлөх саҥардыыта</string>\n    <string name=\"unknown_error\">Биллибэт сыыһыы</string>\n    <string name=\"logout_success\">Эн таҕыстын</string>\n    <string name=\"logout\">Тахсыы</string>\n    <string name=\"logout_title\">%1$s\\'тан тахсаҕын?</string>\n    <string name=\"login_success\">Киирдин</string>\n    <string name=\"login\">Киири</string>\n    <string name=\"password\">Аһарык</string>\n    <string name=\"email\">Эл.пуoчта аадырыһа</string>\n    <string name=\"username\">Туттааччы аата</string>\n    <string name=\"login_title\">%1$s\\'га киири</string>\n    <string name=\"downloaded_only_summary\">Бэбэлэтиэкэҕэ баар маанганы барытын биилтирдээһин</string>\n    <string name=\"label_downloaded_only\">Хачайдаммыт эрэ</string>\n    <string name=\"pref_acra_summary\">Ханнык баҕар сыаһалары көннөрөргө көмөлөһөр. Бэйэ дааннайдар ылыллыбаттар</string>\n    <string name=\"pref_enable_acra\">Охтуу туһунан отчуоту ыытыы</string>\n    <string name=\"delete_downloads_for_manga\">Хачайдаммыт түһүмэхтэри сотторобут?</string>\n    <string name=\"manga_info_collapse\">Кырата</string>\n    <string name=\"manga_info_expand\">Эбии</string>\n    <string name=\"manga_removed_library\">Бэбэлэтиэкэттэн ылылынна</string>\n    <string name=\"manga_added_library\">Бэбэлэтиэкэҕэ киирдэ</string>\n    <string name=\"remove_from_library\">Бэбэлэтиэкэттэн ыл</string>\n    <string name=\"in_library\">Бэбэлэтиэкэҕэ</string>\n    <string name=\"add_to_library\">Бэбэлэтиэкэҕэ киллэрии</string>\n    <string name=\"licensed\">Лицензиялаах</string>\n    <string name=\"unknown_status\">Биллибэт турук</string>\n    <string name=\"unknown\">Биллибэт</string>\n    <string name=\"ongoing\">Салҕанар</string>\n    <string name=\"unknown_author\">Биллибэт суруйааччы</string>\n    <string name=\"no_pinned_sources\">Эһиэхэ иҥиннэллибит төрүттэр суохтар</string>\n    <string name=\"local_source_help_guide\">Төрүт локальнай салалтата</string>\n    <string name=\"browse\">Көрдөөһүн</string>\n    <string name=\"latest\">Тиһэх</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" толору көрдөө</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Кыбытыылах түһүмэхтэри соттор</string>\n    <string name=\"pref_category_delete_chapters\">Түһүмэхтэри соттор</string>\n    <string name=\"manga_tracking_tab\">Кэтээһин</string>\n    <string name=\"confirm_delete_chapters\">Талыллыбыт түһүмэхтэри сотторорго эрэллээххин дуу?</string>\n    <string name=\"download_unread\">Ааҕыллыбата</string>\n    <string name=\"manga_download\">Хачайдаа</string>\n    <string name=\"sort_by_upload_date\">Хачайдааһын кэминэн</string>\n    <string name=\"sort_by_number\">Түһүмэх нүөмэринэн</string>\n    <string name=\"sort_by_source\">Төрүттэринэн</string>\n    <string name=\"show_chapter_number\">Түһүмэх нүөмэрэ</string>\n    <string name=\"show_title\">Төрүт аата</string>\n    <string name=\"chapter_paused\">Тохтотулунна</string>\n    <string name=\"chapter_error\">Сыыһааһын</string>\n    <string name=\"chapter_downloading_progress\">Хачайдааһын (%1$d/%2$d)</string>\n    <string name=\"display_mode_chapter\">Түһүмэх %1$s</string>\n    <string name=\"snack_add_to_library\">Маанганы Бэбэлэтиэкэҕэ киллэрэбит дуу?</string>\n    <string name=\"source_not_installed\">Төрүт туруоруллубатах: %1$s</string>\n    <string name=\"copied_to_clipboard\">Хоспоххо куопуйаланна:\n\\n %1$s</string>\n    <string name=\"ext_nsfw_warning\">18+ контент баар буолуон сөп</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Ити официальнайа суох эбэтэр сыыһа бэлиэтэммит 18+ контенны эбиликкж киирэрин тохтоппот.</string>\n    <string name=\"custom_filter\">Туттааччы биилтирэ</string>\n    <string name=\"picture_saved\">Хартыыҥка оннунан хаалла</string>\n    <string name=\"dialog_with_checkbox_reset\">Бу маанга бары түһүмэхтэрин түһэрии</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Бу дьайыы түһүмэх ааҕыллыбыт кэмин сотторуо. Эрэллээххин дуо?</string>\n    <string name=\"snack_categories_deleted\">Бөлөхтөр соттороллубуттар</string>\n    <string name=\"error_category_exists\">Оннук ааттах бөлөх уруккуттан баар!</string>\n    <string name=\"track_type\">Көрүҥ</string>\n    <string name=\"track_status\">Турук</string>\n    <string name=\"status\">Турук</string>\n    <string name=\"title\">Айымньы аата</string>\n    <string name=\"score\">Сыанабыл</string>\n    <string name=\"repeating\">Саҥаттаан ааҕабын</string>\n    <string name=\"plan_to_read\">Ааҕаары гынабын</string>\n    <string name=\"paused\">Тохтотулунна</string>\n    <string name=\"on_hold\">Тохтообут</string>\n    <string name=\"dropped\">Быраҕыллыбыт</string>\n    <string name=\"completed\">Бүппүт</string>\n    <string name=\"reading\">Ааҕабын</string>\n    <string name=\"add_tracking\">эбии кэтээһини киллэрии</string>\n    <string name=\"pref_category_for_this_series\">Бу сиэриэҕэ</string>\n    <string name=\"confirm_set_image_as_cover\">Бу ойууну тас курдук туттаҕын дуо?</string>\n    <string name=\"decode_image_error\">Ойуу кыайан хачайдаммата</string>\n    <string name=\"no_next_chapter\">Аныгыскы түһүмэх булуллубата</string>\n    <string name=\"chapter_progress\">Сирэй: %1$d</string>\n    <string name=\"cover_updated\">Тас саҥардыллыбыт</string>\n    <string name=\"set_as_cover\">Тас курдук туруор</string>\n    <string name=\"recent_manga_time\">%1$s-%2$s Түһ.</string>\n    <string name=\"updating_library\">Бэбэлэтиэкэ саҥардыыта</string>\n    <string name=\"loader_not_implemented_error\">Төрүт булуллубата</string>\n    <string name=\"page_list_empty_error\">Сирэйдэр булуллубатылар</string>\n    <string name=\"transition_pages_error\">Сирэйдэр хачайдааһыннара сатаммата: %1$s</string>\n    <string name=\"transition_pages_loading\">Сирэйдэр хачайдана тураллар…</string>\n    <string name=\"transition_no_previous\">Иннинээҕи түһүмэх суох</string>\n    <string name=\"transition_no_next\">Аныгыскы түһүмэх суох</string>\n    <string name=\"transition_previous\">Иннинээҕи:</string>\n    <string name=\"transition_next\">Аныгыскы:</string>\n    <string name=\"transition_current\">Билиҥҥи:</string>\n    <string name=\"transition_finished\">Бүппүт:</string>\n    <string name=\"viewer\">Ааҕы эрэһиимэ</string>\n    <string name=\"share_page_info\">%1$s: %2$s, сирэй %3$d</string>\n    <string name=\"no_chapters_error\">Түһүмэхтэр суохтар</string>\n    <string name=\"set_chapter_settings_as_default\">Куолутунан</string>\n    <string name=\"also_set_chapter_settings_for_library\">Мин бэбэлэтиэкэбэр баар маангаларга туттуҥ</string>\n    <string name=\"confirm_set_chapter_settings\">Бу түстэл куолутунан хааларын баҕараҕын дуо?</string>\n    <string name=\"chapter_settings\">Түһүмэх түстэлэ</string>\n    <string name=\"downloaded_chapters\">Хачайдаммыт түһүмэхтэр</string>\n    <string name=\"manga_from_library\">Бэбэлэтиэкэттэн маанга</string>\n    <string name=\"pref_incognito_mode_summary\">Ааҕы остуоруйатын тохтотор</string>\n    <string name=\"pref_incognito_mode\">Кистэлэҥ эрэһиимэ</string>\n    <string name=\"pref_clear_history\">Остуоруйаны сотторуу</string>\n    <string name=\"clear_history_confirmation\">Эрэллээххин дуо? Остуоруйа барыта сотторуллуоҕа.</string>\n    <string name=\"clear_history_completed\">Остуоруйа сотторулунна</string>\n    <string name=\"action_search_settings\">Көрдөөһүн түстэлэ</string>\n    <string name=\"migration_dialog_what_to_include\">Киллэрэр дааннайдары талыы</string>\n    <string name=\"spen_next_page\">Аныгыскы сирэй</string>\n    <string name=\"spen_previous_page\">Иннинээҕи сирэй</string>\n    <string name=\"file_picker_error\">Билэни талар эбилик булуллубата</string>\n    <string name=\"migration_help_guide\">Төрүттэр көһөрүүтүн туһунан салалта</string>\n    <string name=\"myanimelist_relogin\">Бука диэн MALга эмиэ киир</string>\n    <string name=\"pref_viewer_nav\">Нэбигээссийэ бэлиэтэ</string>\n    <string name=\"edge_nav\">Кытыы</string>\n    <string name=\"kindlish_nav\">Kindle курдук</string>\n    <string name=\"l_nav\">L курдук</string>\n    <string name=\"pref_show_nsfw_source\">Төрүттэр испииһэктэригэр көрдөрүү</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) төрүттэр</string>\n    <string name=\"exclude\">Киллэримэ: %s</string>\n    <string name=\"include\">Киллэр: %s</string>\n    <string name=\"none\">Суох</string>\n    <string name=\"pref_library_update_categories_details\">Сотуллубут категориялар маангалара саҥардыллыа суоҕа, холбоммут категорияларга баарын үрдүнэн.</string>\n    <string name=\"action_show_errors\">Сыһааһыннары көрдөр</string>\n    <string name=\"action_desc\">Кыччыытынан</string>\n    <string name=\"action_asc\">Улаатыытынан</string>\n    <string name=\"action_order_by_chapter_number\">Түһүмэх нүөмэринэн</string>\n    <string name=\"action_order_by_upload_date\">Хаһан хачайдаммытынан</string>\n    <string name=\"action_display_show_number_of_items\">Мал төһө элбэҕин көрдөр</string>\n    <string name=\"action_sort_chapter_fetch_date\">Кэлэр күнэ</string>\n    <string name=\"action_filter_tracked\">Суолун көрө сылдьабыт</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sc/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">A pustis de %1$s minutu</item>\n        <item quantity=\"other\">A pustis de %1$s minutos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d capìtulu nou</item>\n        <item quantity=\"other\">%1$d capìtulos noos</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Capìtulos %1$s e 1 àteru</item>\n        <item quantity=\"other\">Capìtulos %1$s e àteros %2$d</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Pro %d elementu</item>\n        <item quantity=\"other\">Pro %d elementos</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">B\\'at un\\'agiornamentu disponìbile pro un\\'estensione</item>\n        <item quantity=\"other\">B\\'ant agiornamentos disponìbiles pro %d estensiones</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">Nd\\'abarrat %1$s</item>\n        <item quantity=\"other\">Nd\\'abarrant %1$s</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d categoria</item>\n        <item quantity=\"other\">%d categorias</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Fatu in %1$s cun %2$s errore</item>\n        <item quantity=\"other\">Fatu in %1$s cun %2$s errores</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s capìtulu</item>\n        <item quantity=\"other\">%1$s capìtulos</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d arrastadore</item>\n        <item quantity=\"other\">%d arrastadores</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Brinchende %d capìtulu, sa fonte non lu tenet o est istadu bogadu cun unu filtru</item>\n        <item quantity=\"other\">Brinchende %d capìtulos, sa fonte non los tenet o sunt istados bogados cun unu filtru</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Eris</item>\n        <item quantity=\"other\">%1$d dies a oe</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Su capìtulu non lèghidu imbeniente</item>\n        <item quantity=\"other\">Sos %d capìtulos non lèghidos imbenientes</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Su capìtulu imbeniente</item>\n        <item quantity=\"other\">Sos %d capìtulos imbenientes</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Mancat %1$s capìtulu</item>\n        <item quantity=\"other\">Mancant %1$s capìtulos</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 die</item>\n        <item quantity=\"other\">%d dies</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Cras</item>\n        <item quantity=\"other\">In %1$d dies</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d depòsitu</item>\n        <item quantity=\"other\">%d depòsitos</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 pàgina</item>\n        <item quantity=\"other\">%1$s pàginas</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sc/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Nùmene</string>\n    <string name=\"categories\">Categorias</string>\n    <string name=\"manga\">Elementos de sa biblioteca</string>\n    <string name=\"chapters\">Capìtulos</string>\n    <string name=\"track\">Arrastamentu</string>\n    <string name=\"history\">Cronologia</string>\n    <string name=\"label_settings\">Impostatziones</string>\n    <string name=\"label_download_queue\">Fila de sos iscarrigamentos</string>\n    <string name=\"label_library\">Biblioteca</string>\n    <string name=\"label_recent_manga\">Cronologia</string>\n    <string name=\"label_recent_updates\">Agiornamentos</string>\n    <string name=\"label_backup\">Còpia de seguresa e riprìstinu</string>\n    <string name=\"label_migration\">Tràmuda</string>\n    <string name=\"label_extensions\">Estensiones</string>\n    <string name=\"label_extension_info\">Informatziones de s\\'estensione</string>\n    <string name=\"action_settings\">Impostatziones</string>\n    <string name=\"action_filter\">Filtru</string>\n    <string name=\"action_filter_bookmarked\">Sinnados</string>\n    <string name=\"action_filter_unread\">Non lèghidos</string>\n    <string name=\"action_filter_empty\">Boga su filtru</string>\n    <string name=\"action_sort_alpha\">Alfabeticamente</string>\n    <string name=\"action_sort_total\">Capìtulos totales</string>\n    <string name=\"action_sort_last_read\">Ùrtimos lèghidos</string>\n    <string name=\"action_search\">Chirca</string>\n    <string name=\"action_global_search\">Chirca globale</string>\n    <string name=\"action_select_all\">Ischerta totu</string>\n    <string name=\"action_mark_as_read\">Sinna comente lèghidu</string>\n    <string name=\"action_mark_as_unread\">Sinna comente non lèghidu</string>\n    <string name=\"action_mark_previous_as_read\">Sinna sos antepostos comente lèghidos</string>\n    <string name=\"action_download\">Iscàrriga</string>\n    <string name=\"action_bookmark\">Annanghe su capìtulu a sos sinnalibros</string>\n    <string name=\"action_remove_bookmark\">Boga su capìtulu dae sos sinnalibros</string>\n    <string name=\"action_delete\">Iscantzella</string>\n    <string name=\"action_update_library\">Agiorna sa biblioteca</string>\n    <string name=\"action_edit\">Modìfica</string>\n    <string name=\"action_add\">Annanghe</string>\n    <string name=\"action_add_category\">Annanghe una categoria</string>\n    <string name=\"action_edit_categories\">Modìfica sas categorias</string>\n    <string name=\"action_rename_category\">Cambia su nùmene de sa categoria</string>\n    <string name=\"action_move_category\">Imposta sas categorias</string>\n    <string name=\"action_edit_cover\">Muda sa cobertedda</string>\n    <string name=\"action_pause\">Pone in pàusa</string>\n    <string name=\"action_previous_chapter\">Capìtulu antepostu</string>\n    <string name=\"action_next_chapter\">Capìtulu imbeniente</string>\n    <string name=\"action_retry\">Torra a proare</string>\n    <string name=\"action_remove\">Boga</string>\n    <string name=\"action_resume\">Sighi</string>\n    <string name=\"action_open_in_browser\">Aberi in s\\'esploradore (browser)</string>\n    <string name=\"action_display_mode\">Modalidade de visualizatzione</string>\n    <string name=\"action_display\">Visualizatzione</string>\n    <string name=\"action_display_grid\">Grìllia cumpata</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_display_download_badge\">Capìtulos iscarrigados</string>\n    <string name=\"action_cancel\">Annulla</string>\n    <string name=\"action_sort\">Òrdina</string>\n    <string name=\"action_install\">Installa</string>\n    <string name=\"action_share\">Cumpartzi</string>\n    <string name=\"action_save\">Sarva</string>\n    <string name=\"action_reset\">Torra a impostare</string>\n    <string name=\"action_undo\">Iscontza</string>\n    <string name=\"action_open_log\">Aberi su registru</string>\n    <string name=\"action_restore\">Riprìstina</string>\n    <string name=\"loading\">Carrighende…</string>\n    <string name=\"app_not_available\">Aplicatzione non disponìbile</string>\n    <string name=\"pref_category_general\">Generales</string>\n    <string name=\"pref_category_reader\">Leghidore</string>\n    <string name=\"pref_category_downloads\">Iscarrigamentos</string>\n    <string name=\"pref_category_tracking\">Arrastamentu</string>\n    <string name=\"pref_category_advanced\">Avantzadas</string>\n    <string name=\"pref_category_about\">Informatziones</string>\n    <string name=\"pref_library_columns\">Elementos pro riga</string>\n    <string name=\"portrait\">Verticale</string>\n    <string name=\"landscape\">Orizontale</string>\n    <string name=\"pref_library_update_interval\">Agiornamentos automàticos</string>\n    <string name=\"update_never\">Istudadu</string>\n    <string name=\"update_6hour\">Cada 6 oras</string>\n    <string name=\"update_12hour\">Cada 12 oras</string>\n    <string name=\"update_24hour\">Cada die</string>\n    <string name=\"update_48hour\">Cada 2 dies</string>\n    <string name=\"update_weekly\">Cada chida</string>\n    <string name=\"all\">Totus</string>\n    <string name=\"pref_library_update_restriction\">Restritziones de su dispositivu a s\\'agiornamentu automàticu</string>\n    <string name=\"charging\">Durante sa càrriga</string>\n    <string name=\"pref_update_only_non_completed\">Cun s\\'istadu \\\"acabbada\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Agiorna su progressu a pustis de sa leghidura</string>\n    <string name=\"default_category\">Categoria predefinida</string>\n    <string name=\"default_category_summary\">Pedi semper</string>\n    <string name=\"ext_update\">Agiorna</string>\n    <string name=\"ext_install\">Installa</string>\n    <string name=\"ext_pending\">Isetende</string>\n    <string name=\"ext_downloading\">Iscarrighende</string>\n    <string name=\"ext_installing\">Installende</string>\n    <string name=\"ext_installed\">Installadas</string>\n    <string name=\"ext_trust\">Mi fido</string>\n    <string name=\"ext_untrusted\">Non mi fido</string>\n    <string name=\"ext_uninstall\">Disinstalla</string>\n    <string name=\"untrusted_extension\">Estensione non afidàbile</string>\n    <string name=\"untrusted_extension_message\">Un\\'estensione mala diat pòdere lèghere totu sas informatziones de atzessu sarvadas o fàghere esecutare còdighe arbitràriu. \\n \\nPonende fide in custa estensione atzetas custos arriscos.</string>\n    <string name=\"pref_fullscreen\">Ischermu intreu</string>\n    <string name=\"pref_page_transitions\">Ànima sas transitziones de sas pàginas</string>\n    <string name=\"pref_double_tap_anim_speed\">Lestresa de s\\'animatzione de su tocu dòpiu</string>\n    <string name=\"pref_show_page_number\">Ammustra su nùmeru de sa pàgina</string>\n    <string name=\"pref_crop_borders\">Sega sos oros</string>\n    <string name=\"pref_custom_brightness\">Luminosidade personalizada</string>\n    <string name=\"pref_custom_color_filter\">Filtru de colore personalizadu</string>\n    <string name=\"pref_keep_screen_on\">Mantene s\\'ischermu allutu</string>\n    <string name=\"pref_reader_navigation\">Navigatzione</string>\n    <string name=\"pref_read_with_volume_keys\">Teclas de su volume</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Fùrria sas teclas de su volume</string>\n    <string name=\"pref_read_with_long_tap\">Ammustra sas atziones cun su tocu longu</string>\n    <string name=\"pref_reader_theme\">Colore de isfundu</string>\n    <string name=\"white_background\">Arbu/biancu</string>\n    <string name=\"black_background\">Nieddu</string>\n    <string name=\"pref_viewer_type\">Modalidade de leghidura predefinida</string>\n    <string name=\"left_to_right_viewer\">Pro pàgina (dae manca a destra)</string>\n    <string name=\"right_to_left_viewer\">Pro pàgina (dae destra a manca)</string>\n    <string name=\"vertical_viewer\">Pro pàgina (verticale)</string>\n    <string name=\"webtoon_viewer\">Verticale longu</string>\n    <string name=\"pager_viewer\">Impaginadu</string>\n    <string name=\"pref_image_scale_type\">Casta de iscala</string>\n    <string name=\"scale_type_fit_screen\">Adata a s\\'ischermu</string>\n    <string name=\"scale_type_stretch\">Prena s\\'ischermu</string>\n    <string name=\"scale_type_fit_width\">Adata a sa largària</string>\n    <string name=\"scale_type_fit_height\">Adata a s\\'artària</string>\n    <string name=\"scale_type_original_size\">Mannària originale</string>\n    <string name=\"scale_type_smart_fit\">Adatamentu intelligente</string>\n    <string name=\"pref_zoom_start\">Positzione incumintzu ismanniamentu</string>\n    <string name=\"zoom_start_automatic\">Automàtica</string>\n    <string name=\"zoom_start_left\">A manca</string>\n    <string name=\"zoom_start_right\">A destra</string>\n    <string name=\"zoom_start_center\">In su tzentru</string>\n    <string name=\"double_tap_anim_speed_0\">Peruna animatzione</string>\n    <string name=\"double_tap_anim_speed_normal\">Normale</string>\n    <string name=\"double_tap_anim_speed_fast\">Lestra</string>\n    <string name=\"pref_rotation_type\">Rotatzione predefinida</string>\n    <string name=\"rotation_free\">Lìbera</string>\n    <string name=\"rotation_force_portrait\">Blocadu in verticale</string>\n    <string name=\"rotation_force_landscape\">Blocadu in orizontale</string>\n    <string name=\"color_filter_r_value\">Ruju</string>\n    <string name=\"color_filter_g_value\">Birde</string>\n    <string name=\"color_filter_b_value\">Biaitu</string>\n    <string name=\"color_filter_a_value\">Alfa</string>\n    <string name=\"pref_remove_after_marked_as_read\">A pustis de l\\'àere marcadu manualmente comente lèghidu</string>\n    <string name=\"pref_remove_after_read\">Iscantzella in automàticu a pustis de sa leghidura</string>\n    <string name=\"disabled\">Disabilitadu</string>\n    <string name=\"last_read_chapter\">Leghe s\\'ùrtimu capìtulu</string>\n    <string name=\"second_to_last\">Penùrtimu capìtulu lèghidu</string>\n    <string name=\"third_to_last\">Tertzùrtimu capìtulu lèghidu</string>\n    <string name=\"fourth_to_last\">Cuartùrtimu capìtulu lèghidu</string>\n    <string name=\"fifth_to_last\">Cuintùrtimu capìtulu lèghidu</string>\n    <string name=\"pref_download_new\">Iscàrriga sos capìtulos noos</string>\n    <string name=\"services\">Arrastadores</string>\n    <string name=\"pref_create_backup\">Crea una còpia de seguresa</string>\n    <string name=\"pref_create_backup_summ\">Podet èssere impreada pro ripristinare sa biblioteca atuale</string>\n    <string name=\"pref_restore_backup\">Riprìstina una còpia de seguresa</string>\n    <string name=\"pref_restore_backup_summ\">Riprìstina sa biblioteca dae una còpia de seguresa</string>\n    <string name=\"pref_backup_interval\">Frecuèntzia de sarvatàgiu de sas còpias de seguresa</string>\n    <string name=\"backup_created\">Còpia de seguresa creada</string>\n    <string name=\"restore_completed\">Riprìstinu acabadu</string>\n    <string name=\"backup_choice\">De ite cheres fàghere una còpia de seguresa?</string>\n    <string name=\"restoring_backup\">Ripristinende sa còpia de seguresa</string>\n    <string name=\"creating_backup\">Creende sa còpia de seguresa</string>\n    <string name=\"pref_clear_chapter_cache\">Isbòida sa memòria temporànea de sos capìtulos</string>\n    <string name=\"used_cache\">Impreados: %1$s</string>\n    <string name=\"cache_deleted\">Memòria temporànea isbodiada. %1$d documentos sunt istados iscantzellados</string>\n    <string name=\"cache_delete_error\">Errore durante s\\'isboidamentu</string>\n    <string name=\"pref_clear_cookies\">Iscantzella sos cookies</string>\n    <string name=\"cookies_cleared\">Cookies iscantzellados</string>\n    <string name=\"pref_clear_database\">Isbòida sa base de datos</string>\n    <string name=\"pref_clear_database_summary\">Iscantzella sa cronologia pro sos elementos chi non sunt sarvados in sa biblioteca tua</string>\n    <string name=\"clear_database_confirmation\">Seguru ses? Sos capìtulos lèghidos e su progressu de sos elementos chi non sunt in sa biblioteca s\\'ant a pèrdere</string>\n    <string name=\"clear_database_completed\">Boghes iscantzelladas</string>\n    <string name=\"version\">Versione</string>\n    <string name=\"pref_enable_acra\">Imbia raportos a pitzu de sos arrestos anòmalos</string>\n    <string name=\"pref_acra_summary\">Agiudat a acontzare cale si siat faddina. Perunu datu sensìbile at a èssere imbiadu</string>\n    <string name=\"login_title\">Intra in %1$s</string>\n    <string name=\"username\">Nùmene impreadore</string>\n    <string name=\"password\">Crae de intrada</string>\n    <string name=\"login\">Intra</string>\n    <string name=\"login_success\">Ses intradu</string>\n    <string name=\"unknown_error\">Errore disconnotu</string>\n    <string name=\"updating_category\">Agiornende sa categoria</string>\n    <string name=\"no_more_results\">Non bi sunt àteros risultados</string>\n    <string name=\"local_source\">Fonte locale</string>\n    <string name=\"other_source\">Àteru</string>\n    <string name=\"action_global_search_hint\">Chirca globale…</string>\n    <string name=\"latest\">Ùrtimos</string>\n    <string name=\"browse\">Esplora</string>\n    <string name=\"ongoing\">In cursu</string>\n    <string name=\"unknown\">Disconnotu</string>\n    <string name=\"licensed\">Cuntzessu in litzèntzia</string>\n    <string name=\"remove_from_library\">Boga dae sa biblioteca</string>\n    <string name=\"manga_added_library\">Annantu a sa biblioteca</string>\n    <string name=\"manga_removed_library\">Bogadu dae sa biblioteca</string>\n    <string name=\"delete_downloads_for_manga\">Iscantzellare sos capìtulos iscarrigados?</string>\n    <string name=\"copied_to_clipboard\">Copiadu in punta de billete:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Fonte no installada: %1$s</string>\n    <string name=\"display_mode_chapter\">Capìtulu %1$s</string>\n    <string name=\"chapter_downloading_progress\">Iscarrighende (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Errore</string>\n    <string name=\"chapter_paused\">In pàusa</string>\n    <string name=\"show_title\">Tìtulu de sa fonte</string>\n    <string name=\"show_chapter_number\">Nùmeru de capìtulu</string>\n    <string name=\"sort_by_source\">Pro fonte</string>\n    <string name=\"sort_by_number\">Pro nùmeru de capìtulu</string>\n    <string name=\"manga_download\">Iscàrriga</string>\n    <string name=\"download_unread\">Non lèghidos</string>\n    <string name=\"confirm_delete_chapters\">Ses seguru de chèrrere iscantzellare sos capìtulos ischertados?</string>\n    <string name=\"manga_tracking_tab\">Arrastamentu</string>\n    <string name=\"reading\">Leghende</string>\n    <string name=\"completed\">Acabadu</string>\n    <string name=\"dropped\">Abbandonadu</string>\n    <string name=\"on_hold\">In pàusa</string>\n    <string name=\"plan_to_read\">De lèghere</string>\n    <string name=\"repeating\">Leghende torra</string>\n    <string name=\"score\">Votu</string>\n    <string name=\"title\">Tìtulu</string>\n    <string name=\"status\">Istadu</string>\n    <string name=\"track_status\">Istadu</string>\n    <string name=\"track_type\">Casta</string>\n    <string name=\"error_category_exists\">Esistit giai una categoria cun custu nùmene!</string>\n    <string name=\"snack_categories_deleted\">Categorias iscantzelladas</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Custu at a bogare sa data de leghidura de custu capìtulu. Seguru ses?</string>\n    <string name=\"dialog_with_checkbox_reset\">Reseta totu sos capìtulos pro custu elementu</string>\n    <string name=\"snack_add_to_library\">Annànghere a sa biblioteca?</string>\n    <string name=\"picture_saved\">Immàgine sarvada</string>\n    <string name=\"custom_filter\">Filtru personalizadu</string>\n    <string name=\"set_as_cover\">Imposta comente cobertedda</string>\n    <string name=\"cover_updated\">Cobertedda agiornada</string>\n    <string name=\"chapter_progress\">Pàgina: %1$d</string>\n    <string name=\"no_next_chapter\">Capìtulu imbeniente no agatadu</string>\n    <string name=\"decode_image_error\">No est istadu possìbile carrigare s\\'immàgine</string>\n    <string name=\"confirm_set_image_as_cover\">Cheres impostare custa immàgine comente cobertedda?</string>\n    <string name=\"transition_finished\">Acabadu:</string>\n    <string name=\"transition_current\">Atuale:</string>\n    <string name=\"transition_next\">Imbeniente:</string>\n    <string name=\"transition_previous\">Antepostu:</string>\n    <string name=\"transition_no_next\">Non b\\'at unu capìtulu imbeniente</string>\n    <string name=\"transition_no_previous\">Non b\\'at unu capìtulu antepostu</string>\n    <string name=\"transition_pages_loading\">Carrighende pàginas…</string>\n    <string name=\"transition_pages_error\">Carrigamentu de pàginas fallidu: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Ischerta sos datos de incluire</string>\n    <string name=\"migrate\">Tràmuda</string>\n    <string name=\"copy\">Còpia</string>\n    <string name=\"download_queue_error\">Iscarrigamentu de sos capìtulos fallidu. Podes torrare a proare in sa setzione de sos iscarrigamentos</string>\n    <string name=\"notification_new_chapters\">Capìtulos noos agatados</string>\n    <string name=\"notification_cover_update_failed\">Agiornamentu de sa cobertedda fallidu</string>\n    <string name=\"notification_first_add_to_library\">Pro praghere annanghe s\\'elementu a sa biblioteca tua in antis de fàghere custu</string>\n    <string name=\"file_select_cover\">Ischerta s\\'immàgine de cobertedda</string>\n    <string name=\"file_select_backup\">Ischerta sa còpia de seguresa</string>\n    <string name=\"update_check_confirm\">Iscàrriga</string>\n    <string name=\"update_check_no_new_updates\">Non bi sunt agiornamentos disponìbiles noos</string>\n    <string name=\"update_check_notification_download_in_progress\">Iscarrighende…</string>\n    <string name=\"update_check_notification_download_complete\">Toca pro installare s\\'agiornamentu</string>\n    <string name=\"update_check_notification_download_error\">Errore de iscarrigamentu</string>\n    <string name=\"update_check_notification_update_available\">Versione noa a disponimentu!</string>\n    <string name=\"information_no_downloads\">Perunu iscarrigamentu</string>\n    <string name=\"information_no_recent\">Perunu agiornamentu reghente</string>\n    <string name=\"information_no_recent_manga\">Nudda de lèghidu dae pagu</string>\n    <string name=\"information_empty_library\">Sa biblioteca tua est bòida</string>\n    <string name=\"information_empty_category\">Non tenes categorias. Incarca su butone de su \\\"prus\\\" pro nde creare una pro organizare sa biblioteca tua.</string>\n    <string name=\"download_notifier_downloader_title\">Iscarrigadore</string>\n    <string name=\"download_notifier_title_error\">Errore</string>\n    <string name=\"download_notifier_unknown_error\">Iscarrigamentu de su capìtulu fallidu pro more de un\\'errore imprevistu</string>\n    <string name=\"download_notifier_text_only_wifi\">Peruna connessione Wi-Fi disponìbile</string>\n    <string name=\"download_notifier_no_network\">Peruna connessione de retza disponìbile</string>\n    <string name=\"download_notifier_download_paused\">Iscarrigamentos in pàusa</string>\n    <string name=\"channel_common\">Comunu</string>\n    <string name=\"action_open_in_web_view\">Aberi in WebView</string>\n    <string name=\"pref_skip_read_chapters\">Brinca sos capìtulos marcados comente lèghidos</string>\n    <string name=\"pref_color_filter_mode\">Modalidade de fusione de su filtru colore</string>\n    <string name=\"filter_mode_overlay\">Istratu superiore</string>\n    <string name=\"filter_mode_multiply\">Multìplica</string>\n    <string name=\"filter_mode_screen\">Ischermu</string>\n    <string name=\"filter_mode_lighten\">Istransi / Acrari</string>\n    <string name=\"filter_mode_darken\">Brùsia / Iscuri</string>\n    <string name=\"label_help\">Agiudu</string>\n    <string name=\"no_results_found\">Perunu resultadu agadadu</string>\n    <string name=\"migration_selection_prompt\">Seletziona una fonte dae ue tramudare</string>\n    <string name=\"action_webview_back\">In segus</string>\n    <string name=\"action_webview_forward\">In antis</string>\n    <string name=\"action_webview_refresh\">Annoa</string>\n    <string name=\"pref_category_library\">Biblioteca</string>\n    <string name=\"ext_obsolete\">Obsoleta</string>\n    <string name=\"obsolete_extension_message\">Custa estensione no est prus a disponimentu. Diat pòdere non funtzionare prus comente si tocat e causare problemas cun s\\'aplicatzione. Ti cussigiamus de la disinstallare.</string>\n    <string name=\"pref_date_format\">Formadu de sa data</string>\n    <string name=\"pref_category_library_update\">Agiornamentu globale</string>\n    <string name=\"logout_title\">Essire dae %1$s?</string>\n    <string name=\"logout\">Essi</string>\n    <string name=\"logout_success\">Ses essidu</string>\n    <string name=\"paused\">In pàusa</string>\n    <string name=\"label_more\">Àteru</string>\n    <string name=\"action_sort_latest_chapter\">Ùrtimu capìtulu</string>\n    <string name=\"action_view_chapters\">Pòmpia sos capìtulos</string>\n    <string name=\"action_cancel_all\">Annulla totu</string>\n    <string name=\"theme_light\">Istudadu</string>\n    <string name=\"theme_dark\">Allutu</string>\n    <string name=\"theme_system\">Sighi su sistema</string>\n    <string name=\"pref_manage_notifications\">Amministra sas notìficas</string>\n    <string name=\"pref_category_security\">Seguresa e riservadesa</string>\n    <string name=\"lock_with_biometrics\">Tocat a l\\'isblocare</string>\n    <string name=\"lock_when_idle\">Bloca cando no est ativu</string>\n    <string name=\"lock_always\">Semper</string>\n    <string name=\"lock_never\">Mai</string>\n    <string name=\"secure_screen\">Ischermu seguru</string>\n    <string name=\"ext_updates_pending\">Agiornamentos in suspesu</string>\n    <string name=\"pref_cutout_short\">Ammustra sos cuntenutos in s\\'àrea de retàlliu</string>\n    <string name=\"information_cloudflare_bypass_failure\">Isfrancamentu de Cloudflare fallidu</string>\n    <string name=\"information_webview_outdated\">Agiorna s\\'aplicatzione de WebView pro otènnere una cumpatibilidade prus manna</string>\n    <string name=\"channel_new_chapters\">Agiornamentos de sos capìtulos</string>\n    <string name=\"secure_screen_summary\">S\\'ischermu seguru cuat sos cuntenutos de s\\'aplicatzione cando mudas de aplicatzione e blocat sas ischermadas</string>\n    <string name=\"pref_category_display\">Visualizatzione</string>\n    <string name=\"notification_chapters_single\">Capìtulu %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Capìtulu %1$s e àteros %2$d</string>\n    <string name=\"notification_chapters_multiple\">Capìtulos %1$s</string>\n    <string name=\"hide_notification_content\">Cua su cuntenutu de sas notìficas</string>\n    <string name=\"pref_disable_battery_optimization\">Disabìlita s\\'otimizatzione de sa bateria</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Agiudat cun sos agiornamentos de sa biblioteca e sas còpias de seguresa</string>\n    <string name=\"battery_optimization_disabled\">S\\'otimizatzione de sa bateria est giai disabilitada</string>\n    <string name=\"email\">Indiritzu de posta eletrònica</string>\n    <string name=\"pref_always_show_chapter_transition\">Ammustra semper sa transitzione de capìtulu</string>\n    <string name=\"action_menu\">Menù</string>\n    <string name=\"action_newest\">Prus noos</string>\n    <string name=\"action_oldest\">Prus betzos</string>\n    <string name=\"action_move_to_top\">Manda a pitzus</string>\n    <string name=\"action_move_to_bottom\">Manda a fundu</string>\n    <string name=\"channel_ext_updates\">Agiornamentos de sas estensiones</string>\n    <string name=\"updating_library\">Agiornende sa biblioteca</string>\n    <string name=\"pref_category_reading\">Leghende</string>\n    <string name=\"pref_skip_filtered_chapters\">Brinca sos capìtulos filtrados</string>\n    <string name=\"label_sources\">Fontes</string>\n    <string name=\"pref_webtoon_side_padding\">Distantziamentu laterale</string>\n    <string name=\"vertical_plus_viewer\">Verticale longu cun interrutziones</string>\n    <string name=\"action_select_inverse\">Fùrria s\\'ischertada</string>\n    <string name=\"pinned_sources\">Apicadu</string>\n    <string name=\"action_unpin\">Boga</string>\n    <string name=\"action_pin\">Apica</string>\n    <string name=\"add_tracking\">Annanghe arrastamentu</string>\n    <string name=\"in_library\">In sa biblioteca</string>\n    <string name=\"add_to_library\">Annanghe a sa biblioteca</string>\n    <string name=\"manga_info_collapse\">De mancu</string>\n    <string name=\"manga_info_expand\">De prus</string>\n    <string name=\"information_webview_required\">Pro chi s\\'aplicatzione funtzionet b\\'at bisòngiu de WebView</string>\n    <string name=\"licenses\">Litzèntzias a còdighe abertu</string>\n    <string name=\"website\">Situ web</string>\n    <string name=\"label_downloaded_only\">Iscarrigados ebbia</string>\n    <string name=\"recent_manga_time\">Cap. %1$s - %2$s</string>\n    <string name=\"last_used_source\">Ùrtima impreada</string>\n    <string name=\"check_for_updates\">Chirca agiornamentos</string>\n    <string name=\"restoring_backup_canceled\">Riprìstinu annulladu</string>\n    <string name=\"restoring_backup_error\">Riprìstinu de sa còpia de seguresa fallidu</string>\n    <string name=\"restore_in_progress\">Su riprìstinu est giai in cursu</string>\n    <string name=\"creating_backup_error\">Còpia de seguresa fallida</string>\n    <string name=\"backup_in_progress\">Sa còpia de seguresa est giai in cursu</string>\n    <string name=\"restore_duration\">%1$02d min e %2$02d seg</string>\n    <string name=\"local_source_help_guide\">Ghia a sas fontes locales</string>\n    <string name=\"downloaded_only_summary\">Filtrat totu sos elementos in sa biblioteca tua</string>\n    <string name=\"pref_category_for_this_series\">Pro custa sèrie</string>\n    <string name=\"gray_background\">Murru</string>\n    <string name=\"viewer\">Modalidade de leghidura</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Abertura de sas impostatziones de sistema fallida</string>\n    <string name=\"tracking_info\">Sincronizatzione a una diretzione ebbia pro agiornare su progressu in sos capìtulos in servìtzios de arrastamentu esternos. Imposta s\\'arrastamentu pro sos elementos dae su butone de arrastamentu issoro.</string>\n    <string name=\"pref_refresh_library_covers\">Annoa sas coberteddas de sa biblioteca</string>\n    <string name=\"sort_by_upload_date\">Pro data de carrigamentu</string>\n    <string name=\"label_data\">Datos</string>\n    <string name=\"backup_restore_missing_sources\">Fontes chi mancant:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Sa còpia de seguresa non tenet perunu elementu.</string>\n    <string name=\"invalid_backup_file\">Documentu de sa còpia de seguresa non vàlidu:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Verìfica si b\\'est una cobertedda noa o bi sunt detàllios noos cando agiornas sa biblioteca</string>\n    <string name=\"pref_library_update_refresh_metadata\">Annoa automaticamente sos metadatos</string>\n    <string name=\"action_migrate\">Tràmuda</string>\n    <string name=\"action_display_comfortable_grid\">Grìllia discansosa</string>\n    <string name=\"page_list_empty_error\">Peruna pàgina agatada</string>\n    <string name=\"tabs_header\">Ischedas</string>\n    <string name=\"action_display_show_tabs\">Ammustra sas ischedas de sas categorias</string>\n    <string name=\"action_disable_all\">Disabìlita totu</string>\n    <string name=\"action_enable_all\">Abìlita totu</string>\n    <string name=\"pref_show_reading_mode_summary\">Ammustrat pro pagu tempus sa manera atuale cando su leghidore benit abertu</string>\n    <string name=\"pref_show_reading_mode\">Ammustra sa manera de leghidura</string>\n    <string name=\"action_start\">Incumintza</string>\n    <string name=\"loader_not_implemented_error\">Fonte no agatada</string>\n    <string name=\"action_disable\">Disabìlita</string>\n    <string name=\"requires_app_restart\">Tenet bisòngiu chi torres a allùghere s\\'aplicatzione pro tènnere efetu</string>\n    <string name=\"label_network\">Retza</string>\n    <string name=\"tapping_inverted_both\">Ambos</string>\n    <string name=\"tapping_inverted_vertical\">Verticale</string>\n    <string name=\"tapping_inverted_horizontal\">Orizontale</string>\n    <string name=\"tapping_inverted_none\">Perunu</string>\n    <string name=\"pref_read_with_tapping_inverted\">Fùrria sas zonas de tocu</string>\n    <string name=\"unknown_status\">Istadu disconnotu</string>\n    <string name=\"unknown_author\">Autore disconnotu</string>\n    <string name=\"updated_version\">Agiornadu a v%1$s</string>\n    <string name=\"whats_new\">Ite b\\'at de nou</string>\n    <string name=\"download_insufficient_space\">Iscarrigamentu de sos capìtulos fallidu pro neghe de su pagu ispàtziu lìberu in su discu</string>\n    <string name=\"action_global_search_query\">Chirca \\\"%1$s\\\" globalmente</string>\n    <string name=\"pref_category_reading_mode\">Modalidade de leghidura</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Data de annanghidura</string>\n    <string name=\"no_pinned_sources\">Non tenes fontes apicadas</string>\n    <string name=\"channel_complete\">Acabada</string>\n    <string name=\"channel_progress\">Progressu</string>\n    <string name=\"channel_errors\">Errores</string>\n    <string name=\"backup_restore_missing_trackers\">Arrastadores a sos cales no as fatu atzessu:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permite s\\'iscantzelladura de sos capìtulos cun sinnalibros</string>\n    <string name=\"pref_category_delete_chapters\">Iscantzella capìtulos</string>\n    <string name=\"ext_nsfw_warning\">Sas fontes de custa estensione diant pòdere cuntènnere cuntenutos NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Custu no impedit a estensiones no ufitziales o potentzialmente non curretas de ammustrare cuntenutos NSFW (18+) in s\\'aplicatzione.</string>\n    <string name=\"no_chapters_error\">Perunu capìtulu agatadu</string>\n    <string name=\"chapter_settings_updated\">Impostatziones predefinidas de sos capìtulos agiornadas</string>\n    <string name=\"set_chapter_settings_as_default\">Imposta comente predefinidu</string>\n    <string name=\"also_set_chapter_settings_for_library\">Àplica fintzas a totu sos elementos in sa biblioteca mea</string>\n    <string name=\"confirm_set_chapter_settings\">Ses seguru de chèrrere sarvare custas informatziones comente predefinidas?</string>\n    <string name=\"chapter_settings\">Impostatziones de sos capìtulos</string>\n    <string name=\"share_page_info\">%1$s: %2$s, pàgina %3$d</string>\n    <string name=\"action_search_settings\">Impostatziones de chirca</string>\n    <string name=\"downloaded_chapters\">Capìtulos iscarrigados</string>\n    <string name=\"manga_from_library\">Dae sa biblioteca</string>\n    <string name=\"pref_incognito_mode_summary\">Ponet in pàusa sa registratzione de sa cronologia de leghidura</string>\n    <string name=\"pref_incognito_mode\">Modalidade anònima</string>\n    <string name=\"pref_clear_history\">Isbòida sa cronologia</string>\n    <string name=\"clear_history_confirmation\">Seguru ses? As a pèrdere totu sa cronologia.</string>\n    <string name=\"clear_history_completed\">Cronologia iscantzellada</string>\n    <string name=\"spen_next_page\">Pàgina imbeniente</string>\n    <string name=\"spen_previous_page\">Pàgina anteposta</string>\n    <string name=\"migration_help_guide\">Ghia a sa tràmuda de sas fontes</string>\n    <string name=\"pref_category_nsfw_content\">Cuntenutu NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Ammustra in sa lista de sas fontes e de sas estensiones</string>\n    <string name=\"file_picker_error\">Peruna aplicatzione pro ischertare documentos agatada</string>\n    <string name=\"myanimelist_relogin\">Pro praghere torra a intrare in MAL</string>\n    <string name=\"edge_nav\">Oru</string>\n    <string name=\"pref_viewer_nav\">Zonas de tocu</string>\n    <string name=\"kindlish_nav\">A tipu Kindle</string>\n    <string name=\"l_nav\">A forma de L</string>\n    <string name=\"track_finished_reading_date\">Data de fine</string>\n    <string name=\"track_started_reading_date\">Data de incumintzu</string>\n    <string name=\"pref_dump_crash_logs_summary\">Sarva sos registros de sos errores in unu documentu pro lu cumpartzire cun sos isvilupadores</string>\n    <string name=\"pref_dump_crash_logs\">Cumpartzi sos registros de sos arrestos anòmalos</string>\n    <string name=\"action_desc\">In achirrada</string>\n    <string name=\"action_asc\">Creschente</string>\n    <string name=\"action_order_by_chapter_number\">Pro nùmeru de capìtulu</string>\n    <string name=\"action_order_by_upload_date\">Pro data de carrigamentu</string>\n    <string name=\"action_filter_tracked\">Arrastadu</string>\n    <string name=\"action_display_show_number_of_items\">Ammustra su nùmeru de elementos</string>\n    <string name=\"right_and_left_nav\">Destra e manca</string>\n    <string name=\"pref_dual_page_split\">Partzi sas pàginas largas</string>\n    <string name=\"pref_dual_page_invert_summary\">Si sa positzione de sas pàginas largas partzidas non currispondet a sa diretzione de leghidura</string>\n    <string name=\"pref_dual_page_invert\">Fùrria su positzionamentu de sas pàginas partzidas</string>\n    <string name=\"backup_restore_content_full\">A pustis dias pòdere dèpere installare sas estensiones chi mancant e atzèdere a sos servìtzios de arrastamentu pro los pòdere impreare.</string>\n    <string name=\"nav_zone_right\">Destra</string>\n    <string name=\"nav_zone_left\">Manca</string>\n    <string name=\"nav_zone_next\">Imbeniente</string>\n    <string name=\"nav_zone_prev\">Antepostu</string>\n    <string name=\"pref_show_navigation_mode_summary\">Ammustra pro pagu cando aberis su leghidore</string>\n    <string name=\"pref_show_navigation_mode\">Ammustra sa subrapositzione de sas zonas de tocu</string>\n    <string name=\"pref_dns_over_https\">DNS pro mèdiu de HTTPS (DoH)</string>\n    <string name=\"exclude\">Esclude: %s</string>\n    <string name=\"include\">Include: %s</string>\n    <string name=\"none\">Perunu</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data de recùperu de su capìtulu</string>\n    <string name=\"pref_download_new_categories_details\">Sos elementos in sas categorias esclùdidas non s\\'ant a iscarrigare nemmancu si sunt fintzas in categorias inclùdidas.</string>\n    <string name=\"pref_category_auto_download\">Iscarrigamentu automàticu</string>\n    <string name=\"pref_library_update_categories_details\">Sos elementos in sas categorias esclùdidas non s\\'ant a agiornare nemmancu si sunt fintzas in categorias inclùdidas.</string>\n    <string name=\"action_show_errors\">Toca pro bìdere sos detàllios</string>\n    <string name=\"clipboard_copy_error\">Còpia in punta de billete fallida</string>\n    <string name=\"update_check_eol\">Custa versione de Android no est prus suportada</string>\n    <string name=\"rotation_landscape\">Orizontale</string>\n    <string name=\"rotation_portrait\">Verticale</string>\n    <string name=\"rotation_type\">Rotatzione</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Creat cartellas in base a su tìtulu de sos elementos</string>\n    <string name=\"pref_create_folder_per_manga\">Sarva sas pàginas in cartellas separadas</string>\n    <string name=\"pref_reader_actions\">Atziones</string>\n    <string name=\"pref_grayscale\">Iscala de murros</string>\n    <string name=\"notification_incognito_text\">Disabìlita sa modalidade anònima</string>\n    <string name=\"automatic_background\">Automàticu</string>\n    <string name=\"cancel_all_for_series\">Annulla totu pro custa sèrie</string>\n    <string name=\"error_no_match\">Peruna currispondèntzia agatada</string>\n    <string name=\"source_unsupported\">Fonte non suportada</string>\n    <string name=\"unread\">Non lèghidos</string>\n    <string name=\"date\">Data</string>\n    <string name=\"local_filter_order_by\">Òrdina pro</string>\n    <string name=\"local_invalid_format\">Formadu de su capìtulu non vàlidu</string>\n    <string name=\"chapter_not_found\">Capìtulu no agatadu</string>\n    <string name=\"off\">Istudadu</string>\n    <string name=\"on\">Allutu</string>\n    <string name=\"restrictions\">Restritziones: %s</string>\n    <string name=\"action_display_local_badge\">Fontes locales</string>\n    <string name=\"error_sharing_cover\">B\\'at àpidu un\\'errore cumpartende sa cobertedda</string>\n    <string name=\"error_saving_cover\">B\\'at àpidu un\\'errore sarvende sa cobertedda</string>\n    <string name=\"cover_saved\">Cobertedda sarvada</string>\n    <string name=\"manga_cover\">Cobertedda</string>\n    <string name=\"tracking_guide\">Ghia pro s\\'arrastamentu</string>\n    <string name=\"categorized_display_settings\">Impostatziones de ordinamentu pro categoria</string>\n    <string name=\"information_empty_category_dialog\">Non tenes galu peruna categoria.</string>\n    <string name=\"action_start_downloading_now\">Incumintza a iscarrigare como</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"restore_miui_warning\">Sa còpia de seguresa e su riprìstinu diant pòdere non funtzionare comente si tocat si s\\'otimizatzione MIUI est disabilitada.</string>\n    <string name=\"enhanced_tracking_info\">Frunit funtzionalidades avantzadas pro fontes ispetzìficas. Sos elementos benint arrastados in manera automàtica cando los annanghes a sa biblioteca tua.</string>\n    <string name=\"enhanced_services\">Arrastadores avantzados</string>\n    <string name=\"pref_dark_theme_pure_black\">Modalidade iscura niedda pura</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin e Yang</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri a sa Fràgola</string>\n    <string name=\"theme_midnightdusk\">Intrinada de mesanote</string>\n    <string name=\"theme_greenapple\">Mela birde</string>\n    <string name=\"theme_monet\">Dinàmicu</string>\n    <string name=\"pref_app_theme\">Tema de s\\'aplicatzione</string>\n    <string name=\"about_dont_kill_my_app\">Unos cantos produtores tenent restritziones de s\\'aplicatzione chi istudant sos servìtzios in s\\'isfundu. Custu situ web tenet informatziones in prus in subra de comente acontzare su problema.</string>\n    <string name=\"pref_lowest\">Bassa meda</string>\n    <string name=\"pref_low\">Bassa</string>\n    <string name=\"pref_highest\">Arta meda</string>\n    <string name=\"pref_high\">Arta</string>\n    <string name=\"pref_hide_threshold\">Sensibilidade pro cuare su menù cun s\\'iscurrimentu</string>\n    <string name=\"label_background_activity\">Atividade in s\\'isfundu</string>\n    <string name=\"pref_inverted_colors\">Furriada</string>\n    <string name=\"relative_time_today\">Oe</string>\n    <string name=\"theme_tealturquoise\">Birde abba e turchesu</string>\n    <string name=\"confirm_lock_change\">Autèntica·ti pro cunfirmare sa modìfica</string>\n    <string name=\"label_default\">Predefinida</string>\n    <string name=\"pref_category_appearance\">Aparèntzia</string>\n    <string name=\"action_track\">Arrasta</string>\n    <string name=\"getting_started_guide\">Ghia pro incumintzare</string>\n    <string name=\"pref_tablet_ui_mode\">Modalidade pro tauleddas</string>\n    <string name=\"help_translate\">Agiuda a bortare</string>\n    <string name=\"pref_remove_exclude_categories\">Categorias esclùdidas</string>\n    <string name=\"ext_app_info\">Informatziones de s\\'aplicatzione</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installa e avia Shizuku pro l\\'impreare comente installadore de estensiones.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku no est in esecutzione</string>\n    <string name=\"ext_installer_legacy\">In disusu</string>\n    <string name=\"ext_installer_pref\">Installadore</string>\n    <string name=\"ext_install_service_notif\">Installende s\\'estensione…</string>\n    <string name=\"action_sort_count\">Elementos totales</string>\n    <string name=\"pref_verbose_logging\">Registru a sa minuda</string>\n    <string name=\"pref_verbose_logging_summary\">Imprenta registros fatos a sa minuda in su registru de sistema (abbassat su rendimentu de s\\'aplicatzione)</string>\n    <string name=\"label_warning\">Dae cara</string>\n    <string name=\"action_display_language_badge\">Limba</string>\n    <string name=\"backup_info\">Dias dèpere tènnere còpias de seguresa fintzas in àteros logos.</string>\n    <string name=\"notification_size_warning\">Sos agiornamentos mannos diant pòdere fàghere dannu a sas fontes e causare agiornamentos prus lentos e fintzas un\\'impreu de sa bateria prus mannu. Toca pro nde ischire de prus.</string>\n    <string name=\"update_72hour\">Cada 3 dies</string>\n    <string name=\"connected_to_wifi\">Petzi cun su Wi-Fi</string>\n    <string name=\"download_queue_size_warning\">Dae cara: sos iscarrigamentos de massa mannos diant pòdere rallentare sas fontes e/o blocare Mihon. Toca pro nde ischire de prus.</string>\n    <string name=\"ext_update_all\">Agiorna totu</string>\n    <string name=\"channel_app_updates\">Agiornamentos de s\\'aplicatzione</string>\n    <string name=\"clear_database_source_item_count\">%1$d elementos chi non sunt in sa biblioteca in sa base de datos</string>\n    <string name=\"extension_api_error\">Recùperu de sa lista de sas estensiones fallidu</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Isbòida sa memòria temporànea de sos capìtulos cando aberis s\\'aplicatzione</string>\n    <string name=\"database_clean\">Nudda de isboidare</string>\n    <string name=\"privacy_policy\">Polìtica de riservadesa</string>\n    <string name=\"save_chapter_as_cbz\">Sarva comente archìviu CBZ</string>\n    <string name=\"library_errors_help\">Pro tènnere un\\'agiudu pro acontzare sos errores de agiornamentu de sa biblioteca pòmpia·ti %1$s</string>\n    <string name=\"pref_update_only_completely_read\">Cun capìtulos non lèghidos</string>\n    <string name=\"publishing_finished\">Publicatzione acabada</string>\n    <string name=\"on_hiatus\">In pàusa</string>\n    <string name=\"cancelled\">Annullada</string>\n    <string name=\"action_show_manga\">Ammustra s\\'elementu</string>\n    <string name=\"pref_landscape_zoom\">Ismànnia in automàticu sas immàgines largas</string>\n    <string name=\"action_display_cover_only_grid\">Grìllia cun coberteddas ebbia</string>\n    <string name=\"pref_update_only_started\">No incumintzadas</string>\n    <string name=\"pref_navigate_pan\">Iscurre sas pàginas largas</string>\n    <string name=\"skipped_reason_completed\">Brincadu ca sa sèrie est acabada</string>\n    <string name=\"skipped_reason_not_caught_up\">Brincadu ca bi sunt capìtulos non lèghidos</string>\n    <string name=\"skipped_reason_not_started\">Brincadu ca non bi sunt capìtulos lèghidos</string>\n    <string name=\"learn_more\">Toca pro àteras informatziones</string>\n    <string name=\"notification_update_error\">%1$d agiornamentu(os) fallidu(os)</string>\n    <string name=\"rotation_reverse_portrait\">Verticale a s\\'imbesse</string>\n    <string name=\"action_move_to_top_all_for_series\">Move sa sèrie cara a pitzos</string>\n    <string name=\"disabled_nav\">Disabilitadu</string>\n    <string name=\"error_saving_picture\">Errore in su sarvamentu de s\\'immàgine</string>\n    <string name=\"update_check_open\">Aberi in GitHub</string>\n    <string name=\"empty_backup_error\">Perunu elementu in biblioteca de pònnere in sa còpia de seguresa</string>\n    <string name=\"pref_clear_webview_data\">Isbòida sos datos de WebView</string>\n    <string name=\"webview_data_deleted\">Datos de WebView isboidados</string>\n    <string name=\"action_close\">Serra</string>\n    <string name=\"action_sort_last_manga_update\">Ùrtimu agiornamentu</string>\n    <string name=\"action_sort_unread_count\">Contu de non lèghidos</string>\n    <string name=\"source_empty_screen\">Peruna fonte agatada</string>\n    <string name=\"source_filter_empty_screen\">Peruna fonte installada agatada</string>\n    <string name=\"split_tall_images_summary\">Megiorat su rendimentu de su leghidore</string>\n    <string name=\"download_notifier_split_page_not_found\">Pàgina %d no agatada partzende</string>\n    <string name=\"empty_screen\">Oja, custu est impitzosu</string>\n    <string name=\"network_not_metered\">Petzi in retzes chene datos</string>\n    <string name=\"pref_reset_viewer_flags\">Reseta sas impostatziones de su leghidore pro cada sèrie</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Resetat sa modalidade de leghidura e s\\'orientamentu de totu sas sèries</string>\n    <string name=\"pref_reset_viewer_flags_success\">Totu sas impostatziones de su leghidore resetadas</string>\n    <string name=\"pref_reset_viewer_flags_error\">No at fatu a resetare sas impostatziones de su leghidore</string>\n    <string name=\"ext_info_age_rating\">Classificatzione pro edade</string>\n    <string name=\"ext_info_language\">Limba</string>\n    <string name=\"ext_info_version\">Versione</string>\n    <string name=\"download_notifier_split_page_path_not_found\">No at fatu a agatare s\\'àndala de su documentu de sa pàgina %d</string>\n    <string name=\"reading_list\">Lista de leghidura</string>\n    <string name=\"wish_list\">Lista de disìgios</string>\n    <string name=\"complete_list\">Lista de acabados</string>\n    <string name=\"on_hold_list\">Lista de postos in pàusa</string>\n    <string name=\"unfinished_list\">Lista de no acabados</string>\n    <string name=\"cant_open_last_read_chapter\">No at fatu a abèrrere s\\'ùrtimu capìtulu lèghidu</string>\n    <string name=\"custom_cover\">Cobertedda personalizada</string>\n    <string name=\"not_installed\">No installada</string>\n    <string name=\"pref_app_language\">Limba de s\\'aplicatzione</string>\n    <string name=\"description_placeholder\">Peruna descritzione</string>\n    <string name=\"theme_lavender\">Archemissa</string>\n    <string name=\"delete_category_confirmation\">Boles iscantzellare sa categoria \\\"%s\\\"?</string>\n    <string name=\"internal_error\">Errore internu: verìfica sos registros de sas serradas improvisas pro àteras informatziones</string>\n    <string name=\"delete_category\">Iscantzella sa categoria</string>\n    <string name=\"pref_user_agent_string\">Istringa de agente de utente predefinida</string>\n    <string name=\"pref_reset_user_agent_string\">Reseta s\\'istringa de agente de utente predefinida</string>\n    <string name=\"action_remove_everything\">Boga totu</string>\n    <string name=\"appwidget_unavailable_locked\">Su widget no est a disponimentu cando su blocu de s\\'aplicatzione est abilitadu</string>\n    <string name=\"appwidget_updates_description\">Pòmpia sos elementos de biblioteca tuos agiornados dae pagu</string>\n    <string name=\"update_already_running\">B\\'est giai un\\'agiornamentu in cursu</string>\n    <string name=\"theme_tidalwave\">Maremotu</string>\n    <string name=\"error_user_agent_string_blank\">S\\'istringa de s\\'agente de s\\'utente non podet èssere bòida</string>\n    <string name=\"download_ahead\">Iscàrriga sos imbenientes</string>\n    <string name=\"auto_download_while_reading\">Iscàrriga in automàticu durante sa letura</string>\n    <string name=\"download_ahead_info\">Funtzionat petzi si su capìtulu atuale e s\\'imbeniente sunt giai iscarrigados.</string>\n    <string name=\"are_you_sure\">Seguru ses?</string>\n    <string name=\"remove_manga\">As a bogare \\\"%s\\\" dae sa biblioteca tua</string>\n    <string name=\"multi_lang\">Mùltiplas</string>\n    <string name=\"updates_last_update_info\">Ùrtimu agiornamentu de sa biblioteca: %s</string>\n    <string name=\"popular\">Populare</string>\n    <string name=\"missing_storage_permission\">Permissu de archiviatzione non cuntzessu</string>\n    <string name=\"skipped_reason_not_always_update\">Brincadu ca sa sèrie non tenet bisòngiu de agiornamentos</string>\n    <string name=\"action_search_hint\">Chirca…</string>\n    <string name=\"crash_screen_description\">%s at tentu un\\'errore non prevìdidu. Ti cussigiamus de cumpartzire sos registros de sas serraduras anòmalas in su canale de suportu nostru de Discord.</string>\n    <string name=\"crash_screen_restart_application\">Torra a allùghere s\\'aplicatzione</string>\n    <string name=\"pref_appearance_summary\">Tema, data e formadu de s\\'ora</string>\n    <string name=\"pref_library_summary\">Categorias, agiornamentos globales, iscurrimentu de capìtulos</string>\n    <string name=\"pref_reader_summary\">Modalidade de leghidura, aspetu, navigatzione</string>\n    <string name=\"pref_downloads_summary\">Iscarrigamentu automàticu, iscarrigamentu antitzipadu</string>\n    <string name=\"pref_tracking_summary\">Sincronizatzione uni-diretzionale de avantzamentu, sincronizatzione megiorada</string>\n    <string name=\"pref_browse_summary\">Fontes, estensiones, chirca globale</string>\n    <string name=\"pref_backup_summary\">Còpias de seguresa manuales e globales</string>\n    <string name=\"pref_security_summary\">Blocu de s\\'aplicatzione, ischermu seguru</string>\n    <string name=\"pref_advanced_summary\">Registros de serraduras anòmalas, otimizatziones de sa bateria</string>\n    <string name=\"crash_screen_title\">Oops!</string>\n    <string name=\"invalid_location\">Positzione non vàlida: %s</string>\n    <string name=\"unknown_title\">Tìtulu disconnotu</string>\n    <string name=\"error_user_agent_string_invalid\">Istringa de agente de utente non vàlida</string>\n    <string name=\"updates_last_update_info_just_now\">Como como</string>\n    <string name=\"download_notifier_cache_renewal\">Verifichende sos iscarrigamentos</string>\n    <string name=\"action_open_random_manga\">Aberi un\\'elementu a casu</string>\n    <string name=\"information_no_entries_found\">Perunu elementu atzapadu in custa categoria</string>\n    <string name=\"fdroid_warning\">Sas versiones de F-Droid non sunt prus suportadas in manera ufitziale.\n\\nToca pro nde ischire de prus.</string>\n    <string name=\"action_display_show_continue_reading_button\">Butone pro sighire a lèghere</string>\n    <string name=\"track_remove_date_conf_title\">Bogare sa data?</string>\n    <string name=\"pref_invalidate_download_cache\">Torra a inditzizare sos iscarrigamentos</string>\n    <string name=\"track_remove_start_date_conf_text\">Custu at a bogare sa data de incumintzu seletzionada in antis dae %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Custu at a bogare sa data de fine seletzionada in antis dae %s</string>\n    <string name=\"label_downloaded\">Iscarrigados</string>\n    <string name=\"label_local\">In locale</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Fortzat s\\'aplicatzione a torrare a verificare sos capìtulos iscarrigados</string>\n    <string name=\"label_titles_in_global_update\">In s\\'agiornamentu globale</string>\n    <string name=\"label_total_chapters\">Totale</string>\n    <string name=\"label_read_chapters\">Lèghidos</string>\n    <string name=\"label_tracked_titles\">Elementos arrastados</string>\n    <string name=\"label_mean_score\">Votu mèdiu</string>\n    <string name=\"label_used\">In impreu</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"label_stats\">Istatìsticas</string>\n    <string name=\"label_started\">Incumintzados</string>\n    <string name=\"label_overview_section\">Panoràmica</string>\n    <string name=\"label_completed_titles\">Elementos cumpletados</string>\n    <string name=\"label_titles_section\">Elementos</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"hour_short\">%do</string>\n    <string name=\"label_read_duration\">Tempus de leghidura</string>\n    <string name=\"label_tracker_section\">Arrastadores</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"action_not_now\">Como nono</string>\n    <string name=\"information_no_manga_category\">Sa categoria est bòida</string>\n    <string name=\"pref_library_update_show_tab_badge\">Ammustra su nùmeru de non lèghidos in s\\'icona de agiornamentu</string>\n    <string name=\"copied_to_clipboard_plain\">Copiadu in punta de billete</string>\n    <string name=\"confirm_add_duplicate_manga\">Tenes giai un\\'elementu in sa biblioteca tua cun su matessi nùmene.\n\\n\n\\nBoles sighire su matessi?</string>\n    <string name=\"pref_skip_dupe_chapters\">Brinca sos capìtulos duplicados</string>\n    <string name=\"enhanced_services_not_installed\">A disponimentu ma sa fonte no est installada: %s</string>\n    <string name=\"track_error\">Errore %1$s: %2$s</string>\n    <string name=\"information_required_plain\">*netzessàriu</string>\n    <string name=\"pref_hide_in_library_items\">Cua sos elementos giai in sa biblioteca</string>\n    <string name=\"action_copy_to_clipboard\">Còpia in punta de billete</string>\n    <string name=\"action_update_category\">Agiorna sa categoria</string>\n    <string name=\"split_tall_images\">Partzi sas immàgines artas</string>\n    <string name=\"overlay_header\">Istratu superiore</string>\n    <string name=\"pref_page_rotate\">Gira sas pàginas largas pro las adatare</string>\n    <string name=\"pref_page_rotate_invert\">Fùrria s\\'orientamentu de sas pàginas largas giradas</string>\n    <string name=\"pref_double_tap_zoom\">Tocu dòpiu pro ismanniare</string>\n    <string name=\"pref_chapter_swipe_end\">Atzione de iscurrimentu a destra</string>\n    <string name=\"pref_chapter_swipe_start\">Atzione de iscurrimentu a manca</string>\n    <string name=\"pref_debug_info\">Informatziones de depuratzione de còdighe</string>\n    <string name=\"manga_display_interval_title\">Càrcula cada</string>\n    <string name=\"action_filter_interval_custom\">Intervallu de recùperu personalizadu</string>\n    <string name=\"action_sort_next_updated\">Agiornamentu imbente prevìdidu</string>\n    <string name=\"pref_update_only_in_release_period\">Foras de su perìodu de publicatzione prevìdidu</string>\n    <string name=\"intervals_header\">Intervallos</string>\n    <string name=\"manga_display_modified_interval_title\">Imposta s\\'agiornamentu pro cada</string>\n    <string name=\"skipped_reason_not_in_release_period\">Brincadu ca non bi fiat peruna publicatzione prevìdida oe</string>\n    <string name=\"action_set_interval\">Imposta s\\'intervallu</string>\n    <string name=\"action_ok\">AB</string>\n    <string name=\"track_delete_title\">Bogare s\\'arrastadore de %s?</string>\n    <string name=\"track_delete_text\">Custu at a bogare s\\'arrastamentu locale.</string>\n    <string name=\"track_delete_remote_text\">Boga fintzas dae %s</string>\n    <string name=\"delete_downloaded\">Iscantzella sos iscarrigados</string>\n    <string name=\"information_cloudflare_help\">Toca inoghe pro agiudu cun Cloudflare</string>\n    <string name=\"unlock_app_title\">Isbloca %s</string>\n    <string name=\"syncing_library\">Sincronizende sa biblioteca</string>\n    <string name=\"create_backup_file_error\">Non at s\\'est pòdidu creare un\\'archìviu de còpia de seguresa</string>\n    <string name=\"library_sync_complete\">Sincronizatzione de sa biblioteca acabada</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Moe sa sèrie a fundu</string>\n    <string name=\"exception_offline\">Peruna connessione a ìnternet</string>\n    <string name=\"download_cache_invalidated\">Ìnditze de sos iscarrigamentos invalidadu</string>\n    <string name=\"has_results\">Tenet resurtados</string>\n    <string name=\"track_activity_name\">Atzessu a s\\'arrastadore</string>\n    <string name=\"pref_relative_format\">Marcas temporales relativas</string>\n    <string name=\"exception_http\">HTTP %d, verìfica su situ in WebView</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" in càmbiu de \\\"%2$s\\\"</string>\n    <string name=\"exception_unknown_host\">Non s\\'est pòdidu atzèdere a %s</string>\n    <string name=\"pref_storage_location\">Positzione de archiviatzione</string>\n    <string name=\"action_create\">Crea</string>\n    <string name=\"relative_time_span_never\">Mai</string>\n    <string name=\"pref_flash_page_summ\">Mìnimat s\\'efetu pantasma in ischermos cun tinta eletrònica</string>\n    <string name=\"pref_storage_location_info\">Impreadu pro sas còpias de seguresa automàticas, sos iscarrigamentos de sos capìtulos e s\\'orìgine locale.</string>\n    <string name=\"action_apply\">Àplica</string>\n    <string name=\"action_revert_to_default\">Riprìstina a sos valores predefinidos</string>\n    <string name=\"action_menu_overflow_description\">Prus optziones</string>\n    <string name=\"last_auto_backup_info\">Ùrtima còpia de seguresa automàtica: %s</string>\n    <string name=\"selected\">Seletzionadu</string>\n    <string name=\"no_scanlators_found\">Perunu iscandutore agatadu</string>\n    <string name=\"not_selected\">Non seletzionadu</string>\n    <string name=\"scanlator\">Iscandutore (iscansidore+tradutore)</string>\n    <string name=\"pref_flash_page\">Lampìgia in biancu in su càmbiu de pàgina</string>\n    <string name=\"pref_storage_usage\">Impreu de sa memòria</string>\n    <string name=\"notification_updating_progress\">Agiornende sa biblioteca… (%s)</string>\n    <string name=\"action_bar_up_description\">Nàviga cara a subra</string>\n    <string name=\"action_sort_tracker_score\">Votu de s\\'arrastadore</string>\n    <string name=\"label_data_storage\">Datos e archiviatzione</string>\n    <string name=\"file_null_uri_error\">Perunu archìviu seletzionadu</string>\n    <string name=\"source_settings\">Impostatziones de sas fontes</string>\n    <string name=\"app_settings\">Impostatziones de s\\'aplicatzione</string>\n    <string name=\"exclude_scanlators\">Esclude sos iscandutores (iscansidores+tradutores)</string>\n    <string name=\"manga_interval_expected_update_null\">Custu manga est acabbadu o non b\\'at una data de publicatzione previdida.</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Non s\\'est pòdidu otènnere s\\'atzessu permanente a sa cartella. S\\'aplicatzione si diat pòdere cumportare in manera no isetada.</string>\n    <string name=\"ext_permission_install_apps_warning\">B\\'at bisòngiu de sos permissos pro installare estensiones. Toca inoghe pro los frunire.</string>\n    <string name=\"information_empty_repos\">Non tenes galu depòsitos impostados.</string>\n    <string name=\"error_repo_exists\">Custu depòsitu esistit giai!</string>\n    <string name=\"action_delete_repo\">Iscantzella su depòsitu</string>\n    <string name=\"delete_repo_confirmation\">Boles iscantzellare su depòsitu \\\"%s\\\"?</string>\n    <string name=\"action_open_repo\">Depòsitu a còdighe abertu</string>\n    <string name=\"no_location_set\">Perunu logu de archiviatzione isseberadu</string>\n    <string name=\"pref_flash_duration\">Durada de su flash</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Flash cada</string>\n    <string name=\"pref_flash_with\">Flash cun</string>\n    <string name=\"pref_flash_style_black\">Nieddu</string>\n    <string name=\"pref_flash_style_white\">Biancu</string>\n    <string name=\"pref_flash_style_white_black\">Biancu e nieddu</string>\n    <string name=\"invalid_backup_file_error\">Errore intreu:</string>\n    <string name=\"upcoming_guide\">Ghia a sas atualizatziones imbenientes</string>\n    <string name=\"pref_onboarding_guide\">Ghia de introdutzione</string>\n    <string name=\"onboarding_heading\">Bene bènnidu!</string>\n    <string name=\"onboarding_action_next\">Imbeniente</string>\n    <string name=\"onboarding_action_finish\">Incumintzemus</string>\n    <string name=\"onboarding_action_skip\">Brinca</string>\n    <string name=\"onboarding_storage_info\">Seletziona una cartella in ue %1$s at a archiviare sos capìtulos iscarrigados, sas còpias de seguresa e àteru.\n\\n\n\\nSi cussìgiat una cartella dedicada.\n\\n\n\\nCartella seletzionada: %2$s</string>\n    <string name=\"onboarding_storage_help_info\">Ses agiornende dae una versione betza e non ses seguru de ite seletzionare? Abbista·ti sa ghia a s\\'archiviatzione pro àteras informatziones.</string>\n    <string name=\"onboarding_storage_help_action\">Ghia a s\\'archiviatzione</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Èvita interrutziones a agiornamentos longos de sa biblioteca, iscarrigamentos, e riprìstinos de còpias de seguresa.</string>\n    <string name=\"onboarding_permission_action_grant\">Fruni</string>\n    <string name=\"onboarding_guides_new_user\">Nou in %s? Ti cussigiamus de t\\'abbistare sa ghia de introdutzione.</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"pref_library_update_smart_update\">Agiornamentu inteligente</string>\n    <string name=\"action_add_repo\">Annanghe unu depòsitu</string>\n    <string name=\"label_add_repo_input\">URL de su depòsitu</string>\n    <string name=\"action_add_repo_message\">Annanghe depòsitos additzionales a Mihon. Custu diat dèpere èssere un\\'URL chi acabbat cun \\\"index.min.json\\\".</string>\n    <string name=\"private_settings\">Include impostatziones sensìbiles ( a es. getones de intrada a sos arrastadores)</string>\n    <string name=\"manga_interval_expected_update_soon\">Luego</string>\n    <string name=\"action_add_anyway\">Annanghe su matessi</string>\n    <string name=\"action_migrate_duplicate\">Tràmuda s\\'elementu esistente</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Istuda sa ridutzione de ismanniada</string>\n    <string name=\"onboarding_description\">In antis de totus tocat a cunfigurare una paja de cosas. L\\'as a pòdere semper modificare a pustis dae sas impostatziones.</string>\n    <string name=\"onboarding_storage_action_select\">Seletziona una cartella</string>\n    <string name=\"onboarding_storage_selection_required\">Depes seletzionare una cartella</string>\n    <string name=\"onboarding_permission_install_apps\">Permissos pro installare s\\'aplicatzione</string>\n    <string name=\"onboarding_permission_install_apps_description\">Pro installare estensiones de fontes.</string>\n    <string name=\"onboarding_permission_notifications\">Permissu pro sas notìficas</string>\n    <string name=\"onboarding_permission_notifications_description\">Retzi notìficas pro agiornamentos de sa biblioteca e àteru.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Impreu de sa bateria in s\\'isfundu</string>\n    <string name=\"invalid_repo_name\">URL de su depòsitu non vàlidu</string>\n    <string name=\"manga_interval_expected_update\">Si pensat chi sos capìtulos los pùblichent pagu prus o mancu cada%1$s, cun verìficas cada %2$s.</string>\n    <string name=\"manga_interval_custom_amount\">Frecuèntzia de agiornamentu personalizada:</string>\n    <string name=\"upcoming_calendar_next\">Su mese chi intrat</string>\n    <string name=\"upcoming_calendar_prev\">Su mese coladu</string>\n    <string name=\"onboarding_guides_returning_user\">Ses torrende a installare %s?</string>\n    <string name=\"ext_revoke_trust\">Rèvoca sas estensiones disconnotas afidàbiles</string>\n    <string name=\"label_extension_repos\">Depòsitos de estensiones</string>\n    <string name=\"available_disk_space_info\">A disponimentu: %1$s / Totale: %2$s</string>\n    <string name=\"action_replace_repo\">Remplasa</string>\n    <string name=\"action_replace_repo_title\">S\\'imprenta digitale de sa crae de firma esistit giai</string>\n    <string name=\"action_replace_repo_message\">Su depòsitu %1$s tenet sa matessi imprenta digitale de sa crae de firma de %2$s.\n\\nSi custu est su chi t\\'isetas, %2$s s\\'at a sostituire, si nono cuntata su mantenidore de su depòsitu tuo.</string>\n    <string name=\"pref_display_profile\">Profilu de visualizatzione predefinidu</string>\n    <string name=\"action_view_upcoming\">Abbista·ti sos agiornamentos imbenientes</string>\n    <string name=\"label_upcoming\">Imbeniente</string>\n    <string name=\"non_library_settings\">Totu sos elementos lèghidos</string>\n    <string name=\"action_copy_link\">Còpia su ligàmene</string>\n    <string name=\"action_sort_random\">A casu</string>\n    <string name=\"onboarding_permission_crashlytics\">Imbia registros de arrestos anòmalos</string>\n    <string name=\"onboarding_permission_analytics\">Permite sas istatìsticas de impreu</string>\n    <string name=\"pref_firebase\">Istatìsticas de impreu e registros de sos arrestos anòmalos</string>\n    <string name=\"invalid_backup_file_json\">Còpia de seguresa JSON non suportada</string>\n    <string name=\"onboarding_permission_analytics_description\">Imbia datos de impreu anonimizados pro megiorare sas funtzionalidades de s\\'aplicatzione.</string>\n    <string name=\"remove_private_extension_message\">Boles a beru bogare s\\'estensione \\\"%s\\\"?</string>\n    <string name=\"pref_security\">Seguresa</string>\n    <string name=\"firebase_summary\">S\\'imbiu de sos registros de sos arrestos anòmalos e de sas istatìsticas de impreu non ant a permìtere de identificare e acontzare problemas, megiorare su rendimentu, e fàghere in manera chi sas atualizatziones imbenientes siant prus rilevantes pro sos bisòngios tuos</string>\n    <string name=\"ext_confirm_remove\">Bogare s\\'estensione?</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Imbia registros de arrestos anòmalos anonimizados a sos isvilupadores.</string>\n    <string name=\"ext_remove\">Boga</string>\n    <string name=\"add_repo_confirmation\">Boles annànghere su depòsitu \\\"%s\\\"?</string>\n    <string name=\"invalid_backup_file_unknown\">Su documentu de sa còpia de seguresa est corrùmpidu</string>\n    <string name=\"extensionRepo_settings\">Depòsitos de estensiones</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Brinca s\\'iscarrigamentu de capìtulos lèghidos duplicados</string>\n    <string name=\"confirm_tracker_update\">Atualizare sos arrastadores a su capìtulu %d?</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Agiorna su progressu cando est marcadu comente lèghidu</string>\n    <string name=\"trackers_updated_summary\">Arrastadores atualizados a su capìtulu %d</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Predefinidu (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Si su leghidore càrrigat un\\'immàgine bianca, mìnima de pagu a pagu su lìmite.\\nSeletzionadu: %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Mannària màssima pro sa decodìfica hardware (bitmap) de sas immàgines</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Influentzat su rendimentu. Abilita·lu petzi si sa minimada de sa mannària màssima pro sa decodìfica hardware (bitmap) de sas immàgines non risolvet sos problemas de sas immàgines bòidas</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pone in pàusa sa cronologia de letura pro s\\'estensione</string>\n    <string name=\"label_auto\">Automàticu</string>\n    <string name=\"library_list\">Lista de sa biblioteca</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Imprea su codificadore betzu pro su leghidore de immàgines longas</string>\n    <string name=\"export\">Esporta</string>\n    <string name=\"theme_monochrome\">Monocromo</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sdh/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">پاش 1 خولەک</item>\n        <item quantity=\"other\">پاش %1$s خولەک</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">دوێنێ</item>\n        <item quantity=\"other\">%1$d ڕۆژ پێش ئێستا</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sdh/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"label_default\">بنەڕەتی</string>\n    <string name=\"label_warning\">ئاگاداری</string>\n    <string name=\"name\">ناو</string>\n    <string name=\"label_more\">زیاتر</string>\n    <string name=\"label_settings\">سازکارییەکان</string>\n    <string name=\"label_download_queue\">لیستی داونلۆد</string>\n    <string name=\"history\">تۆماری ڕابردوو</string>\n    <string name=\"confirm_lock_change\">دڵنیابوونەوە تا گۆڕانکاری بکرێت</string>\n    <string name=\"action_mark_previous_as_read\">ئاماژەکردنی پێشوو وەک خوێندراو</string>\n    <string name=\"action_bookmark\">نیشانکردنی چاپتەر</string>\n    <string name=\"action_update_library\">نوێکردنەوەی کۆکراوەکان</string>\n    <string name=\"action_enable_all\">گشتی چالاک بکە</string>\n    <string name=\"action_disable_all\">گشتی ناچالاک بکە</string>\n    <string name=\"action_add\">زیادکردن</string>\n    <string name=\"action_add_category\">زیادکردنی کاتیگۆری</string>\n    <string name=\"action_edit_categories\">دەستکاریکردنی کاتیگۆری</string>\n    <string name=\"action_rename_category\">ناونانەوەی کاتیگۆری</string>\n    <string name=\"label_library\">کۆکراوەکان</string>\n    <string name=\"label_recent_updates\">نوێکارییەکان</string>\n    <string name=\"label_backup\">یەدەگ کردن و گەڕانەوە بۆ باری سەرەکی</string>\n    <string name=\"label_migration\">گواستنەوە</string>\n    <string name=\"label_extensions\">زیادکراوەکان</string>\n    <string name=\"label_recent_manga\">تۆماری ڕابردوو</string>\n    <string name=\"manga\">مانگا</string>\n    <string name=\"chapters\">چاپتەرەکان</string>\n    <string name=\"track\">بەدواداچوون</string>\n    <string name=\"categories\">کاتیگۆرییەکان</string>\n    <string name=\"action_settings\">سازکارییەکان</string>\n    <string name=\"action_menu\">لیست</string>\n    <string name=\"action_filter_bookmarked\">نیشانکراو</string>\n    <string name=\"action_filter_tracked\">بەدواداچوو</string>\n    <string name=\"action_sort_alpha\">بە شێوازی ئەلف و بێ</string>\n    <string name=\"action_sort_count\">کۆی مانگاکان</string>\n    <string name=\"action_sort_total\">کۆی چاپتەرەکان</string>\n    <string name=\"action_sort_last_read\">کۆتا خوێندراوە</string>\n    <string name=\"action_select_all\">هەڵبژاردنی هەمووی</string>\n    <string name=\"action_select_inverse\">هەڵبژاردنی پێچەوانە</string>\n    <string name=\"action_mark_as_read\">وەک خوێندراوێک ئاماژەی پێبکە</string>\n    <string name=\"information_no_downloads\">هیچ داونلۆدێک نییە</string>\n    <string name=\"action_filter\">فلتەر</string>\n    <string name=\"action_filter_unread\">نەخوێندراو</string>\n    <string name=\"action_filter_empty\">سڕینەوەی فلتەر</string>\n    <string name=\"action_sort_latest_chapter\">نوێترین چاپتەر</string>\n    <string name=\"action_sort_chapter_fetch_date\">بەرواری دەرچوون</string>\n    <string name=\"action_global_search\">گەڕانی گشتگیر</string>\n    <string name=\"action_sort_date_added\">بەرواری بەردەست بوون</string>\n    <string name=\"action_search\">گەڕان</string>\n    <string name=\"action_download\">داونلۆد</string>\n    <string name=\"information_empty_category\">هیچ کاتیگۆرییەکت نییە. دەست بنێ بە دوگمەی زیادە تا کاتیگۆرییەک بۆ ڕێکخستنی تۆماری ڕابردووت درووست بکەیت.</string>\n    <string name=\"action_delete\">سڕینەوە</string>\n    <string name=\"information_no_recent\">هێج نوێکارییەک نییە لەم دواییانەدا</string>\n    <string name=\"label_sources\">سەرچاوەکان</string>\n    <string name=\"information_no_recent_manga\">هیچ مانگایەکت لەم دواییانە نەخوێندووەتەوە</string>\n    <string name=\"label_extension_info\">زانیاری زیادکراو</string>\n    <string name=\"label_help\">یارمەتی</string>\n    <string name=\"information_empty_library\">تۆماری ڕابردووەکەت بەتاڵە</string>\n    <string name=\"action_search_settings\">گەڕان لە ناو سازکارییەکان</string>\n    <string name=\"action_mark_as_unread\">وەک نەخوێندراوێک ئاماژەی پێبکە</string>\n    <string name=\"action_remove_bookmark\">نیشان نەکردنی چاپتەر</string>\n    <string name=\"action_edit\">دەستکاری کردن</string>\n    <string name=\"pref_category_about\">دەربارە</string>\n    <string name=\"action_pause\">ڕاگرتنی کاتی</string>\n    <string name=\"action_remove\">لابردن</string>\n    <string name=\"action_start\">دەست پێکردن</string>\n    <string name=\"action_resume\">بەردەوام بوون</string>\n    <string name=\"action_open_in_browser\">کردنەوە لە وێبگەڕدا</string>\n    <string name=\"action_open_in_web_view\">WebView کردنەوە لە</string>\n    <string name=\"action_migrate\">گواستنەوە</string>\n    <string name=\"action_display_mode\">باری پیشاندان</string>\n    <string name=\"action_unpin\">لابردنی جێگیری</string>\n    <string name=\"action_cancel\">هەڵوەشاندنەوە</string>\n    <string name=\"action_cancel_all\">هەڵوەشاندنەوەی هەموو</string>\n    <string name=\"cancel_all_for_series\">هەڵوەشاندنەوەی هەموو بۆ ئەم زنجیرەیە</string>\n    <string name=\"action_sort\">ڕیزکردن</string>\n    <string name=\"action_move_to_bottom\">گواستنەوە بۆ خوارەوە</string>\n    <string name=\"action_install\">دامەزراندن</string>\n    <string name=\"action_share\">هاوبەشیکردن</string>\n    <string name=\"action_save\">خەزێنە کردن</string>\n    <string name=\"action_reset\">دووبارە سازکردنەوە</string>\n    <string name=\"action_undo\">پەشیمان بوونەوە</string>\n    <string name=\"action_open_log\">کردنەوەی تۆمار</string>\n    <string name=\"action_restore\">گەڕاندنەوە</string>\n    <string name=\"action_webview_back\">گەڕانەوە</string>\n    <string name=\"action_webview_forward\">بەرەو پێشەوە</string>\n    <string name=\"action_webview_refresh\">فرێشکردنەوە</string>\n    <string name=\"action_start_downloading_now\">ئێستا دەست بکە بە داونلۆد کردن</string>\n    <string name=\"action_show_errors\">وردەکاری هەموو ئیرۆرەکان ببینە</string>\n    <string name=\"action_desc\">بە پلە نزم بوونەوە</string>\n    <string name=\"action_move_category\">دیاریکردنی کاتیگۆرییەکان</string>\n    <string name=\"action_edit_cover\">گۆڕینی وێنەی بەرگەکە</string>\n    <string name=\"action_view_chapters\">بینینی چاپتەرەکان</string>\n    <string name=\"action_previous_chapter\">چاپتەری پێشوو</string>\n    <string name=\"action_next_chapter\">چاپتەری داهاتوو</string>\n    <string name=\"action_retry\">دووبارەکردنەوە</string>\n    <string name=\"action_display\">پیشاندان</string>\n    <string name=\"action_display_list\">لیست</string>\n    <string name=\"action_display_local_badge\">مانگای ناوخۆیی</string>\n    <string name=\"action_display_language_badge\">زمان</string>\n    <string name=\"action_display_show_tabs\">پیشاندانی خشتەبەندی کاتیگۆرییەکان</string>\n    <string name=\"action_order_by_chapter_number\">بە پێی ژمارەی چاپتەر</string>\n    <string name=\"action_move_to_top\">گواستنەوە بۆ سەرەوە</string>\n    <string name=\"action_display_download_badge\">چاپتەری داونلۆد کراو</string>\n    <string name=\"action_display_show_number_of_items\">پیشاندانی ژمارەی ئایتمەکان</string>\n    <string name=\"action_disable\">ناچالاککردن</string>\n    <string name=\"action_pin\">جێگیرکردن</string>\n    <string name=\"loading\">دۆخی بارکردن…</string>\n    <string name=\"action_order_by_upload_date\">بە پێی بەرواری بەردەست بوون</string>\n    <string name=\"action_newest\">نوێترین</string>\n    <string name=\"action_oldest\">کۆنترین</string>\n    <string name=\"action_asc\">بە پلە بەرزبوونەوە</string>\n    <string name=\"app_not_available\">بەرنامەکە بەردەست نییە</string>\n    <string name=\"pref_category_general\">گشتی</string>\n    <string name=\"pref_category_appearance\">شێوە</string>\n    <string name=\"pref_category_library\">کۆکراوەکان</string>\n    <string name=\"pref_category_reader\">خوێنەرەوە</string>\n    <string name=\"pref_category_downloads\">داونلۆدەکان</string>\n    <string name=\"pref_category_tracking\">بەدواداچوون</string>\n    <string name=\"pref_category_advanced\">سازکارییە ئاڵۆزەکان</string>\n    <string name=\"pager_viewer\">شێوازی لاپەڕەکان</string>\n    <string name=\"pref_viewer_nav\">شێوازی گەڕان</string>\n    <string name=\"scale_type_stretch\">ڕاکێشراو</string>\n    <string name=\"scale_type_original_size\">قەبارەی بنەڕەتی</string>\n    <string name=\"scale_type_smart_fit\">گونجاندنی زیرەک</string>\n    <string name=\"pref_zoom_start\">دەستپێکی شوێنی زوومکردن</string>\n    <string name=\"zoom_start_left\">چەپ</string>\n    <string name=\"zoom_start_right\">ڕاست</string>\n    <string name=\"zoom_start_center\">ناوەڕاست</string>\n    <string name=\"double_tap_anim_speed_0\">بێ ئەنیمەیشن</string>\n    <string name=\"double_tap_anim_speed_normal\">سرووشتی</string>\n    <string name=\"double_tap_anim_speed_fast\">خێرا</string>\n    <string name=\"rotation_landscape\">باری ئاسۆیی</string>\n    <string name=\"rotation_force_portrait\">باری ستوونی قوفڵکراو</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"pref_category_reading_mode\">دۆخی خوێندنەوە</string>\n    <string name=\"pref_category_reading\">سازکاری خوێندنەوە</string>\n    <string name=\"manga_added_library\">کراوەتە ناو کۆکراوەکان</string>\n    <string name=\"gray_background\">خۆڵەمێشی</string>\n    <string name=\"rotation_type\">جۆری خولانەوە</string>\n    <string name=\"action_display_grid\">تۆڕی پەستێنراو</string>\n    <string name=\"action_display_comfortable_grid\">تۆڕی ئاسوودە</string>\n    <string name=\"pref_category_theme\">ڕووکار</string>\n    <string name=\"theme_system\">وەک ڕووکاری سیستەم</string>\n    <string name=\"theme_light\">کوژاوە</string>\n    <string name=\"theme_dark\">داگیرساو</string>\n    <string name=\"pref_app_theme\">ڕووکاری پڕۆگرام</string>\n    <string name=\"theme_monet\">داینامیک</string>\n    <string name=\"theme_greenapple\">سەوز</string>\n    <string name=\"theme_midnightdusk\">مۆر</string>\n    <string name=\"theme_strawberrydaiquiri\">سوور</string>\n    <string name=\"theme_tako\">تاکۆ</string>\n    <string name=\"theme_tealturquoise\">پیرۆزەیی</string>\n    <string name=\"theme_yinyang\">ین و یانگ</string>\n    <string name=\"theme_yotsuba\">یۆتسوبا</string>\n    <string name=\"pref_dark_theme_pure_black\">دۆخی ڕەشی پوخت</string>\n    <string name=\"pref_date_format\">ڕێکخستنی بەروار</string>\n    <string name=\"pref_manage_notifications\">بەڕێوەبردنی ئاگانامەکان</string>\n    <string name=\"pref_category_security\">سازکاری پارێزراوی</string>\n    <string name=\"lock_with_biometrics\">پێویست بە کردنەوە دەکات</string>\n    <string name=\"lock_when_idle\">قوفڵکردن لە کاتی ناچالاکیدا</string>\n    <string name=\"lock_always\">هەمیشە</string>\n    <string name=\"lock_never\">هەرگیز</string>\n    <string name=\"secure_screen\">شاشە پارێزراو کردن</string>\n    <string name=\"hide_notification_content\">شاردنەوەی ناوەرۆکی ئاگانامە</string>\n    <string name=\"secure_screen_summary\">سکرین شۆت بلۆکردن و شاردنەوەی ناوەڕۆک، لە کاتی گۆڕین و دەرچوون لە بەرنامە</string>\n    <string name=\"pref_category_nsfw_content\">سەرچاوەی سەروو (18) ساڵ</string>\n    <string name=\"pref_show_nsfw_source\">پیشاندان لە لیستی سەرچاوە و زیادکراوەکان</string>\n    <string name=\"relative_time_today\">ئەمڕۆ</string>\n    <string name=\"pref_category_display\">شێوازی پیشاندان</string>\n    <string name=\"pref_read_with_tapping_inverted\">نەرمە لێدانی پێچەوانە</string>\n    <string name=\"tapping_inverted_none\">هیچ</string>\n    <string name=\"tapping_inverted_vertical\">ستوونی</string>\n    <string name=\"tapping_inverted_both\">هەردووکیان</string>\n    <string name=\"pref_reader_actions\">کردارەکان</string>\n    <string name=\"pref_create_folder_per_manga\">خەزێنە کردنی لاپەڕەکان لە فۆڵدەری جیاوزدا</string>\n    <string name=\"white_background\">سپی</string>\n    <string name=\"pref_grayscale\">خۆڵەمێشی پلە پلە</string>\n    <string name=\"pref_inverted_colors\">پێچەوانەکراو</string>\n    <string name=\"pref_custom_color_filter\">ڕەنگی فیلتەری تایبەتی</string>\n    <string name=\"pref_color_filter_mode\">فلتەری تێکەڵبوونی ڕەنگەکان</string>\n    <string name=\"filter_mode_overlay\">داپۆشراو</string>\n    <string name=\"filter_mode_multiply\">شێوازی دوو ‌هێندە</string>\n    <string name=\"pref_category_auto_download\">داونلۆدی ئۆتۆماتیکی</string>\n    <string name=\"pref_download_new\">داونلۆدکردنی چاپتەری نوێ</string>\n    <string name=\"add_tracking\">بەدواداچوون زیاد بکە</string>\n    <string name=\"add_to_library\">کردنە ناو کۆکراوەکان</string>\n    <string name=\"notification_first_add_to_library\">تکایە مانگا بۆ کۆکراوەکان زیاد بکە پێش کردنی ئەمە</string>\n    <string name=\"snack_add_to_library\">زیادکردنی مانگا بۆ کۆکراوەکان؟</string>\n    <string name=\"ext_downloading\">داونلۆدکردن</string>\n    <string name=\"label_downloaded_only\">تەنها داونلۆدکراوەکان</string>\n    <string name=\"parental_controls_info\">ئەمە ڕێگری ناکات لە دەرکەوتنی بابەتی سەروو 18 ی نا فەرمی لە بەرنامەکە.</string>\n    <string name=\"automatic_background\">ئۆتۆماتیک</string>\n    <string name=\"l_nav\">شێوە L</string>\n    <string name=\"nav_zone_prev\">پێشتر</string>\n    <string name=\"vertical_plus_viewer\">ستوونی بەردەوام</string>\n    <string name=\"pref_fullscreen\">تەواوی شاشە</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">دوگمەی دەنگی پێچەوانە</string>\n    <string name=\"pref_read_with_long_tap\">پیشاندان لە کاتی دەست لەسەر دانانی ماوە درێژ</string>\n    <string name=\"tapping_inverted_horizontal\">ئاسۆیی</string>\n    <string name=\"black_background\">ڕەش</string>\n    <string name=\"pref_image_scale_type\">دەوروبەری لاپەڕە</string>\n    <string name=\"scale_type_fit_screen\">گونجاو بە شاشە</string>\n    <string name=\"rotation_free\">ئازاد</string>\n    <string name=\"pref_create_folder_per_manga_summary\">درووستکردنی فۆڵدەر بە پێی تایتڵی مانگا</string>\n    <string name=\"pref_reader_theme\">ڕەنگی باکگراوند</string>\n    <string name=\"edge_nav\">سووچ</string>\n    <string name=\"right_and_left_nav\">ڕاست و چەپ</string>\n    <string name=\"nav_zone_next\">دواتر</string>\n    <string name=\"nav_zone_right\">ڕاست</string>\n    <string name=\"right_to_left_viewer\">ڕاست بۆ چەپ</string>\n    <string name=\"vertical_viewer\">ستوونی</string>\n    <string name=\"pref_viewer_type\">دۆخی خوێندنەوەی بنەڕەتی</string>\n    <string name=\"kindlish_nav\">شێوازی ئەمەزۆن کیندڵ</string>\n    <string name=\"nav_zone_left\">چەپ</string>\n    <string name=\"left_to_right_viewer\">چەپ بۆ ڕاست</string>\n    <string name=\"scale_type_fit_width\">گونجاو بە پانی شاشە</string>\n    <string name=\"scale_type_fit_height\">گونجاو بە درێژی شاشە</string>\n    <string name=\"webtoon_viewer\">شێوازی وێبتوون</string>\n    <string name=\"pref_rotation_type\">جۆری خولانەوەی بنەڕەتی</string>\n    <string name=\"zoom_start_automatic\">ئۆتۆماتیک</string>\n    <string name=\"rotation_force_landscape\">باری ئاسۆیی قوفڵکراو</string>\n    <string name=\"pref_webtoon_side_padding\">بۆشایی تەنیستەکان</string>\n    <string name=\"rotation_portrait\">باری ستوونی</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_always_show_chapter_transition\">هەمیشە تێپەڕینی چاپتەر پیشان بدە</string>\n    <string name=\"off\">کوژاوە</string>\n    <string name=\"on\">پێکراو</string>\n    <string name=\"action_show_manga\">نیشاندانی مانگا</string>\n    <string name=\"action_sort_last_manga_update\">کۆتانوێکردنەوەی مانگا</string>\n    <string name=\"action_sort_unread_count\">ژمارەی نەخوێندراوە</string>\n    <string name=\"delete_category\">ڕەشکردنەوەی بەش</string>\n    <string name=\"action_remove_everything\">لادانی هەمووشتێك</string>\n    <string name=\"action_search_hint\">گەڕان…</string>\n    <string name=\"delete_category_confirmation\">\\?ڕەشبکەیتەوە \\\"%s\\\"ئایا ئەتەوێ کە بەشی</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sk/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Pre %d titul</item>\n        <item quantity=\"few\">Pre %d tituly</item>\n        <item quantity=\"other\">Pre %d titulov</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Dostupná aktualizácia rozšírenia</item>\n        <item quantity=\"few\">%d dostupných aktualizácii rozšírenia</item>\n        <item quantity=\"other\">%d dostupné aktualizácie rozšírenia</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nová kapitola</item>\n        <item quantity=\"few\">%1$d nové kapitoly</item>\n        <item quantity=\"other\">%1$d nových kapitol</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Po %1$s minute</item>\n        <item quantity=\"few\">Po %1$s minútach</item>\n        <item quantity=\"other\">Po %1$s minútach</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Včera</item>\n        <item quantity=\"few\">Pred %1$d dňami</item>\n        <item quantity=\"other\">Pred %1$d dňami</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d sledovač</item>\n        <item quantity=\"few\">%d sledovače</item>\n        <item quantity=\"other\">%d sledovačov</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Ďalšia neprečítaná kapitola</item>\n        <item quantity=\"few\">Ďalšie %d neprečítané kapitoly</item>\n        <item quantity=\"other\">Ďalších %d neprečítaných kapitol</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s zostáva</item>\n        <item quantity=\"few\">%1$s zostávajúce</item>\n        <item quantity=\"other\">%1$s zostávajúcich</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Kapitoly %1$s a 1 ďalšia</item>\n        <item quantity=\"few\">Kapitoly %1$s a %2$d ďalšie</item>\n        <item quantity=\"other\">Kapitoly %1$s a %2$d ďalších</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s kapitola</item>\n        <item quantity=\"few\">%1$s kapitoly</item>\n        <item quantity=\"other\">%1$s kapitol</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Preskočenie %d kapitoly, buď zdroj chýba, alebo bol odfiltrovaný</item>\n        <item quantity=\"few\">Preskočenie %d kapitol, buď zdroj chýba, alebo bol odfiltrovaný</item>\n        <item quantity=\"other\">Zložky %d kapitoly, buď zdroj chýba, alebo boli filtrované</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Dokončené za %1$s s %2$s chybou</item>\n        <item quantity=\"few\">Dokončené za %1$s s %2$s chybami</item>\n        <item quantity=\"other\">Dokončené za %1$s s %2$s chybami</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategória</item>\n        <item quantity=\"few\">%d kategórie</item>\n        <item quantity=\"other\">%d kegórií</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sk/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Názov</string>\n    <string name=\"categories\">Kategórie</string>\n    <string name=\"manga\">Záznamy v knižnici</string>\n    <string name=\"chapters\">Kapitoly</string>\n    <string name=\"track\">Sledovanie</string>\n    <string name=\"history\">História</string>\n    <string name=\"label_settings\">Nastavenia</string>\n    <string name=\"label_download_queue\">Sťahujúce sa</string>\n    <string name=\"label_library\">Knižnica</string>\n    <string name=\"label_recent_manga\">Nedávno čítané</string>\n    <string name=\"label_recent_updates\">Updaty</string>\n    <string name=\"label_backup\">Záloha a obnova</string>\n    <string name=\"label_migration\">Migrácia</string>\n    <string name=\"label_extensions\">Rozšírenia</string>\n    <string name=\"label_extension_info\">Info o rozšíreniach</string>\n    <string name=\"label_help\">Pomoc</string>\n    <string name=\"action_settings\">Nastavenia</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_bookmarked\">Uložené</string>\n    <string name=\"action_filter_unread\">Neprečítané</string>\n    <string name=\"action_filter_empty\">Zrušiť filter</string>\n    <string name=\"action_sort_alpha\">Abecedne</string>\n    <string name=\"action_sort_total\">Všetky kapitoly</string>\n    <string name=\"action_sort_last_read\">Naposledy čítané</string>\n    <string name=\"action_search\">Hľadať</string>\n    <string name=\"action_global_search\">Hľadať všade</string>\n    <string name=\"action_select_all\">Vybrať všetko</string>\n    <string name=\"action_mark_as_read\">Označiť ako prečítané</string>\n    <string name=\"action_mark_as_unread\">Označiť ako neprečítané</string>\n    <string name=\"action_mark_previous_as_read\">Označiť predošlé ako prečítané</string>\n    <string name=\"action_download\">Stiahnuť</string>\n    <string name=\"action_bookmark\">Záložka kapitoly</string>\n    <string name=\"action_remove_bookmark\">Odstrániť záložku kapitoly</string>\n    <string name=\"action_delete\">Vymazať</string>\n    <string name=\"action_update_library\">Aktualizovať knižnicu</string>\n    <string name=\"action_edit\">Upraviť</string>\n    <string name=\"action_add\">Pridať</string>\n    <string name=\"action_add_category\">Pridať kategóriu</string>\n    <string name=\"action_edit_categories\">Upraviť kategórie</string>\n    <string name=\"action_rename_category\">Premenovať kategóriu</string>\n    <string name=\"action_move_category\">Určiť kategórie</string>\n    <string name=\"action_edit_cover\">Upraviť obal</string>\n    <string name=\"action_pause\">Pauza</string>\n    <string name=\"action_previous_chapter\">Predošlá kapitola</string>\n    <string name=\"action_next_chapter\">Nasledujúca kapitola</string>\n    <string name=\"action_retry\">Skúsiť znovu</string>\n    <string name=\"action_remove\">Odstrániť</string>\n    <string name=\"action_resume\">Pokračovať</string>\n    <string name=\"action_open_in_browser\">Otvoriť v browseri</string>\n    <string name=\"action_open_in_web_view\">Otvoriť vo WebView</string>\n    <string name=\"action_display_mode\">Režim zobrazenia</string>\n    <string name=\"action_display\">Zobraziť</string>\n    <string name=\"action_display_grid\">Kompaktná mriežka</string>\n    <string name=\"action_display_list\">List</string>\n    <string name=\"action_display_download_badge\">Stiahnuté kapitoly</string>\n    <string name=\"action_cancel\">Zrušiť</string>\n    <string name=\"action_sort\">Triediť</string>\n    <string name=\"action_install\">Nainštalovať</string>\n    <string name=\"action_share\">Zdieľať</string>\n    <string name=\"action_save\">Uložiť</string>\n    <string name=\"action_reset\">Reset</string>\n    <string name=\"action_undo\">Krok späť</string>\n    <string name=\"action_open_log\">Otvoriť log</string>\n    <string name=\"action_restore\">Obnoviť</string>\n    <string name=\"loading\">Načítava sa…</string>\n    <string name=\"app_not_available\">Aplikácia nedostupná</string>\n    <string name=\"pref_category_general\">Všeobecné</string>\n    <string name=\"pref_category_reader\">Prehliadač</string>\n    <string name=\"pref_category_downloads\">Sťahovanie</string>\n    <string name=\"pref_category_tracking\">Sledovanie</string>\n    <string name=\"pref_category_advanced\">Rozšírené</string>\n    <string name=\"pref_category_about\">O Aplikácii</string>\n    <string name=\"pref_library_columns\">Položky na riadok</string>\n    <string name=\"portrait\">Na výšku</string>\n    <string name=\"landscape\">Na šírku</string>\n    <string name=\"pref_library_update_interval\">Automatické aktualizácie</string>\n    <string name=\"update_never\">Vyp.</string>\n    <string name=\"update_6hour\">Každých 6 hodín</string>\n    <string name=\"update_12hour\">Každých 12 hodín</string>\n    <string name=\"update_24hour\">Raz za deň</string>\n    <string name=\"update_48hour\">Každé 2 dni</string>\n    <string name=\"update_weekly\">Každý týždeň</string>\n    <string name=\"all\">Všetko</string>\n    <string name=\"pref_library_update_restriction\">Automatické aktualizácie obmedzení zariadenia</string>\n    <string name=\"charging\">Pri nabíjaní</string>\n    <string name=\"pref_update_only_non_completed\">So stavom \\\"Dokončené\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Aktualizácia priebehu po prečítaní</string>\n    <string name=\"default_category\">Predvolená kategória</string>\n    <string name=\"default_category_summary\">Vždy sa opýtať</string>\n    <string name=\"ext_update\">aktualizovať</string>\n    <string name=\"ext_install\">Nainštalovať</string>\n    <string name=\"ext_pending\">Čakajúce</string>\n    <string name=\"ext_downloading\">Sťahujem</string>\n    <string name=\"ext_installing\">Inštalujem</string>\n    <string name=\"ext_installed\">Nainštalovaný</string>\n    <string name=\"ext_trust\">Dôverovať</string>\n    <string name=\"ext_untrusted\">Odobrať dôveru</string>\n    <string name=\"ext_uninstall\">Odinštalovať</string>\n    <string name=\"untrusted_extension\">Nedôveryhodné rozšírenie</string>\n    <string name=\"untrusted_extension_message\">Toto rozšírenie bolo podpísané nedôveryhodným certifikátom a nebolo aktivované.\n\\n\n\\nŠkodlivé rozšírenie môže čítať všetky prihlasovacie údaje uložené v Mihon alebo spúšťať ľubovoľný kód.\n\\n\n\\nDôverovaním tohto certifikátu akceptujete tieto riziká.</string>\n    <string name=\"pref_fullscreen\">Na celú obrazovku</string>\n    <string name=\"pref_page_transitions\">Animácia prechodov strán</string>\n    <string name=\"pref_double_tap_anim_speed\">Rýchlosť animácie pre dvojité ťuknutie</string>\n    <string name=\"pref_show_page_number\">Zobraziť číslo strany</string>\n    <string name=\"pref_crop_borders\">Orezať okraje</string>\n    <string name=\"pref_custom_brightness\">Vlastný jas</string>\n    <string name=\"pref_custom_color_filter\">Vlastný farebný filter</string>\n    <string name=\"pref_color_filter_mode\">Farebný filter: režim splynutia</string>\n    <string name=\"filter_mode_overlay\">Prekrytie</string>\n    <string name=\"filter_mode_multiply\">Znásobiť</string>\n    <string name=\"filter_mode_screen\">Obrazovka</string>\n    <string name=\"filter_mode_lighten\">Dodge / Zosvetliť</string>\n    <string name=\"filter_mode_darken\">Spáliť / Stmaviť</string>\n    <string name=\"pref_keep_screen_on\">Nechať obrazovku zapnutú</string>\n    <string name=\"pref_skip_read_chapters\">Preskočiť kapitoly označené ako prečítané</string>\n    <string name=\"pref_reader_navigation\">Navigácia</string>\n    <string name=\"pref_read_with_volume_keys\">Tlačidlá hlasitosti</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Invertovať tlačidlá hlasitosti</string>\n    <string name=\"pref_read_with_long_tap\">Zobrazenie pri dlhom podržaní</string>\n    <string name=\"pref_reader_theme\">Farba pozadia</string>\n    <string name=\"white_background\">Biela</string>\n    <string name=\"black_background\">Čierna</string>\n    <string name=\"pref_viewer_type\">Predvolený režim čítania</string>\n    <string name=\"left_to_right_viewer\">Zľava doprava</string>\n    <string name=\"right_to_left_viewer\">Sprava doľava</string>\n    <string name=\"vertical_viewer\">Vertikálne</string>\n    <string name=\"webtoon_viewer\">Ako Webtoon - Zhora dole a strany sa spájajú do jednej dlhej</string>\n    <string name=\"pager_viewer\">Stránkovanie</string>\n    <string name=\"pref_image_scale_type\">Mód škálovania</string>\n    <string name=\"scale_type_fit_screen\">Prispôsobiť obrazovke</string>\n    <string name=\"scale_type_stretch\">natiahnuť</string>\n    <string name=\"scale_type_fit_width\">Prispôsobiť šírke</string>\n    <string name=\"scale_type_fit_height\">Prispôsobiť výške</string>\n    <string name=\"scale_type_original_size\">Pôvodná veľkosť</string>\n    <string name=\"scale_type_smart_fit\">Inteligentne prispôsobiť</string>\n    <string name=\"pref_zoom_start\">Začiatočná poloha priblíženia</string>\n    <string name=\"zoom_start_automatic\">Automatická</string>\n    <string name=\"zoom_start_left\">Vľavo</string>\n    <string name=\"zoom_start_right\">Vpravo</string>\n    <string name=\"zoom_start_center\">Stred</string>\n    <string name=\"double_tap_anim_speed_0\">Žiadna animácia</string>\n    <string name=\"double_tap_anim_speed_normal\">Normálne</string>\n    <string name=\"double_tap_anim_speed_fast\">Rýchlo</string>\n    <string name=\"pref_rotation_type\">Predvolený typ rotácie</string>\n    <string name=\"rotation_free\">Voľná</string>\n    <string name=\"rotation_force_portrait\">Zamknuté na výšku</string>\n    <string name=\"rotation_force_landscape\">Zamknuté na šírku</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Po manuálnom označení ako prečítané</string>\n    <string name=\"pref_remove_after_read\">Po prečítaní automaticky odstrániť</string>\n    <string name=\"disabled\">Zakázané</string>\n    <string name=\"last_read_chapter\">Naposledy čítaná kapitola</string>\n    <string name=\"second_to_last\">Predposledná prečítaná kapitola</string>\n    <string name=\"third_to_last\">Predpred posledná kapitola</string>\n    <string name=\"fourth_to_last\">Štvrtá predposledná prečítaná kapitola</string>\n    <string name=\"fifth_to_last\">Piata posledná prečítaná kapitola</string>\n    <string name=\"pref_download_new\">Stiahnuť nové kapitoly</string>\n    <string name=\"services\">Služby</string>\n    <string name=\"pref_create_backup\">Vytvoriť zálohu</string>\n    <string name=\"pref_create_backup_summ\">Možno použiť na obnovenie aktuálnej knižnice</string>\n    <string name=\"pref_restore_backup\">Obnoviť zálohu</string>\n    <string name=\"pref_restore_backup_summ\">Obnoviť knižnicu zo záložného súboru</string>\n    <string name=\"pref_backup_interval\">Frekvencia zálohovania</string>\n    <string name=\"backup_created\">Záloha bola vytvorená</string>\n    <string name=\"restore_completed\">Obnovenie dokončené</string>\n    <string name=\"backup_choice\">Čo chcete zálohovať?</string>\n    <string name=\"restoring_backup\">Obnovuje sa záloha</string>\n    <string name=\"creating_backup\">Vytvára sa záloha</string>\n    <string name=\"pref_clear_chapter_cache\">Vymazať vyrovnávaciu pamäť kapitol</string>\n    <string name=\"used_cache\">Použité: %1$s</string>\n    <string name=\"cache_deleted\">Cache sa vyčistila. %1$d súborov bolo odstráneno</string>\n    <string name=\"cache_delete_error\">Počas vymazania sa vyskytla chyba</string>\n    <string name=\"pref_clear_cookies\">Vymazať cookies</string>\n    <string name=\"cookies_cleared\">Súbory cookie boli vymazané</string>\n    <string name=\"pref_clear_database\">Vymazať databázu</string>\n    <string name=\"pref_clear_database_summary\">Odstránenie histórie mangy, ktorá nie je uložená vo vašej knižnici</string>\n    <string name=\"clear_database_confirmation\">Ste si istý? Čítanie kapitol a pokrok v mangách mimo vašu knižnicu sa stratí</string>\n    <string name=\"action_webview_back\">Späť</string>\n    <string name=\"action_webview_forward\">Vpred</string>\n    <string name=\"action_webview_refresh\">Obnoviť</string>\n    <string name=\"pref_category_library\">Knižnica</string>\n    <string name=\"ext_obsolete\">Zastaraný</string>\n    <string name=\"obsolete_extension_message\">Toto rozšírenie už nie je k dispozícii.</string>\n    <string name=\"clear_database_completed\">Záznamy boli odstránené</string>\n    <string name=\"version\">Verzia</string>\n    <string name=\"pref_enable_acra\">Odosielať správy o zlyhaní</string>\n    <string name=\"pref_acra_summary\">Pomáha opraviť akékoľvek chyby. Nebudú odoslané žiadne citlivé údaje</string>\n    <string name=\"login_title\">Prihláste sa do %1$s</string>\n    <string name=\"username\">Užívateľské meno</string>\n    <string name=\"password\">Heslo</string>\n    <string name=\"login\">Prihlásenie</string>\n    <string name=\"login_success\">Prihlásený</string>\n    <string name=\"unknown_error\">Neznáma chyba</string>\n    <string name=\"updating_category\">Aktualizuje sa kategória</string>\n    <string name=\"no_more_results\">Žiadne ďalšie výsledky</string>\n    <string name=\"local_source\">Lokálny zdroj</string>\n    <string name=\"other_source\">Ostatné</string>\n    <string name=\"action_global_search_hint\">Globálne vyhľadávanie…</string>\n    <string name=\"latest\">Najnovší</string>\n    <string name=\"browse\">Prehľadávať</string>\n    <string name=\"ongoing\">Pokračujúci</string>\n    <string name=\"unknown\">Neznámy</string>\n    <string name=\"licensed\">Licencovaný</string>\n    <string name=\"remove_from_library\">Odstrániť z knižnice</string>\n    <string name=\"manga_added_library\">Pridané do knižnice</string>\n    <string name=\"manga_removed_library\">Odstránené z knižnice</string>\n    <string name=\"delete_downloads_for_manga\">Odstrániť stiahnuté kapitoly?</string>\n    <string name=\"copied_to_clipboard\">Skopírované do schránky:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Zdroj nie je nainštalovaný: %1$s</string>\n    <string name=\"display_mode_chapter\">Kapitola %1$s</string>\n    <string name=\"chapter_downloading_progress\">Sťahovanie (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Chyba</string>\n    <string name=\"chapter_paused\">Pozastavené</string>\n    <string name=\"show_title\">Názov zdroja</string>\n    <string name=\"show_chapter_number\">Číslo kapitoly</string>\n    <string name=\"sort_by_source\">Podľa zdroja</string>\n    <string name=\"sort_by_number\">Podľa čísla kapitoly</string>\n    <string name=\"manga_download\">Stiahnuť</string>\n    <string name=\"download_unread\">Neprečítané</string>\n    <string name=\"confirm_delete_chapters\">Naozaj chcete odstrániť vybrané kapitoly?</string>\n    <string name=\"manga_tracking_tab\">Sledovanie</string>\n    <string name=\"reading\">Čítanie</string>\n    <string name=\"completed\">Dokončený</string>\n    <string name=\"dropped\">Upustený</string>\n    <string name=\"on_hold\">Pozastavený</string>\n    <string name=\"plan_to_read\">Plánované čítanie</string>\n    <string name=\"repeating\">Znovu čítanie</string>\n    <string name=\"score\">Skóre</string>\n    <string name=\"title\">Názov</string>\n    <string name=\"status\">Stav</string>\n    <string name=\"track_status\">Stav</string>\n    <string name=\"track_type\">Typ</string>\n    <string name=\"error_category_exists\">Kategória s týmto názvom už existuje!</string>\n    <string name=\"snack_categories_deleted\">Kategórie boli odstránené</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Týmto sa odstráni dátum prečítania tejto kapitoly. Si si istý?</string>\n    <string name=\"dialog_with_checkbox_reset\">Resetovať všetky kapitoly mangy</string>\n    <string name=\"snack_add_to_library\">Pridať mangu do knižnice?</string>\n    <string name=\"picture_saved\">Obrázok bol uložený</string>\n    <string name=\"custom_filter\">Vlastný filter</string>\n    <string name=\"set_as_cover\">Nastaviť ako obal</string>\n    <string name=\"cover_updated\">Obal bol aktualizovaný</string>\n    <string name=\"chapter_progress\">Strana: %1$d</string>\n    <string name=\"no_next_chapter\">Ďalšia kapitola nebola nájdená</string>\n    <string name=\"decode_image_error\">Obrázok sa nepodarilo načítať</string>\n    <string name=\"confirm_set_image_as_cover\">Chcete použiť tento obrázok ako obal?</string>\n    <string name=\"transition_finished\">Dokončená:</string>\n    <string name=\"transition_current\">Aktuálna:</string>\n    <string name=\"transition_next\">Ďalšia:</string>\n    <string name=\"transition_previous\">Predchádzajúcí:</string>\n    <string name=\"transition_no_next\">Žiadna ďalšia kapitola</string>\n    <string name=\"transition_no_previous\">Žiadna predchádzajúca kapitola</string>\n    <string name=\"transition_pages_loading\">Načítání stránok…</string>\n    <string name=\"transition_pages_error\">Chyba pri načítání stránok: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Vyberte data, ktoré chcete zahrnúť</string>\n    <string name=\"migrate\">Migrovať</string>\n    <string name=\"copy\">Kopírovať</string>\n    <string name=\"download_queue_error\">Nepodarilo sa stiahnuť kapitoly. Môžete to skúsiť znova v sekcii na stiahnutie</string>\n    <string name=\"notification_new_chapters\">Boli nájdené nové kapitoly</string>\n    <string name=\"notification_cover_update_failed\">Chyba pri aktualizácii obalu</string>\n    <string name=\"notification_first_add_to_library\">Predtým, ako to urobíte, pridajte do svojej knižnice mangu</string>\n    <string name=\"file_select_cover\">Vyberte obrázok obalu</string>\n    <string name=\"file_select_backup\">Vyberte záložný súbor</string>\n    <string name=\"update_check_confirm\">Stiahnuť</string>\n    <string name=\"update_check_no_new_updates\">Žiadné nové aktualizácie</string>\n    <string name=\"update_check_notification_download_in_progress\">Prebiehá stahovanie…</string>\n    <string name=\"update_check_notification_download_complete\">Klepnutím nainštalujte</string>\n    <string name=\"update_check_notification_download_error\">Chyba sťahovania</string>\n    <string name=\"update_check_notification_update_available\">Dostupná nová aktualizácia!</string>\n    <string name=\"information_no_downloads\">Žiadne sťahovanie</string>\n    <string name=\"information_no_recent\">Žiadne nedávne aktualizácie</string>\n    <string name=\"information_no_recent_manga\">Nič nedávno čítané</string>\n    <string name=\"information_empty_library\">Vaša knižnica je prázdna</string>\n    <string name=\"information_empty_category\">Nemáte žiadne kategórie. Ťuknutím na tlačidlo plus si ju vytvorte a usporiadajte knižnicu.</string>\n    <string name=\"download_notifier_downloader_title\">Preberanie</string>\n    <string name=\"download_notifier_title_error\">Chyba</string>\n    <string name=\"download_notifier_unknown_error\">Kapitolu sa nepodarilo stiahnuť z dôvodu neočakávanej chyby</string>\n    <string name=\"download_notifier_text_only_wifi\">WiFi pripojenie nie je dostupné</string>\n    <string name=\"download_notifier_no_network\">Sieťové pripojenie nie je dostupné</string>\n    <string name=\"download_notifier_download_paused\">Sťahovanie bolo pozastavené</string>\n    <string name=\"channel_common\">Bežný</string>\n    <string name=\"no_results_found\">Neboli nájdené žiadne výsledky</string>\n    <string name=\"migration_selection_prompt\">Vyberte zdroj zo ktorého chcete migrovat</string>\n    <string name=\"action_sort_latest_chapter\">Najnovšia kapitola</string>\n    <string name=\"action_view_chapters\">Zobraziť kapitoly</string>\n    <string name=\"action_cancel_all\">Zrušiť všetky</string>\n    <string name=\"action_menu\">Menu</string>\n    <string name=\"action_newest\">Najnovšie</string>\n    <string name=\"action_oldest\">Najstaršie</string>\n    <string name=\"action_move_to_top\">Presunúť navrch</string>\n    <string name=\"information_webview_outdated\">Prosím aktualizujte si aplikáciu WebView pre lepšiu kompatibilitu</string>\n    <string name=\"information_cloudflare_bypass_failure\">Nepodarilo sa obísť službu Cloudflare</string>\n    <string name=\"paused\">Pozastavené</string>\n    <string name=\"unread\">Neprečítané</string>\n    <string name=\"hide_notification_content\">Skryť obsah upozornení</string>\n    <string name=\"action_disable_all\">Zakázať všetko</string>\n    <string name=\"action_enable_all\">Povoliť všetko</string>\n    <string name=\"action_select_inverse\">Vyberte inverzne</string>\n    <string name=\"action_search_settings\">Hľadať v nastaveniach</string>\n    <string name=\"action_sort_date_added\">Dátum pridaný</string>\n    <string name=\"action_sort_chapter_fetch_date\">Dátum načítania kapitoly</string>\n    <string name=\"confirm_lock_change\">Prihlásiť sa pre potvrdenie zmien</string>\n    <string name=\"label_default\">Predvolené</string>\n    <string name=\"label_sources\">Zdroje</string>\n    <string name=\"label_more\">Viac</string>\n    <string name=\"notification_chapters_multiple\">Kapitoly %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Kapitola %1$s a %2$d ďalšie</string>\n    <string name=\"notification_chapters_single\">Kapitola %1$s</string>\n    <string name=\"secure_screen\">Zabezpečená obrazovka</string>\n    <string name=\"action_show_errors\">Ťuknutím zobrazíte podrobnosti</string>\n    <string name=\"theme_system\">Podľa systému</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"action_show_manga\">Zobraziť záznam</string>\n    <string name=\"theme_yinyang\">Yin a Yang</string>\n    <string name=\"pref_category_appearance\">Vzhľad</string>\n    <string name=\"action_migrate\">Migrovať</string>\n    <string name=\"action_display_comfortable_grid\">Komfortná mriežka</string>\n    <string name=\"action_display_show_tabs\">Zobraziť karty kategórií</string>\n    <string name=\"action_display_show_number_of_items\">Zobraziť počet položiek</string>\n    <string name=\"action_order_by_upload_date\">Podľa dátumu nahratia</string>\n    <string name=\"action_start\">Začať</string>\n    <string name=\"action_display_cover_only_grid\">Mriežka len s obalmi</string>\n    <string name=\"action_display_local_badge\">Lokálny zdroj</string>\n    <string name=\"action_display_language_badge\">Jazyk</string>\n    <string name=\"action_pin\">Pripnúť</string>\n    <string name=\"cancel_all_for_series\">Zrušiť všetko pre túto sériu</string>\n    <string name=\"action_order_by_chapter_number\">Podľa čísla kapitoly</string>\n    <string name=\"action_start_downloading_now\">Začať sťahovať teraz</string>\n    <string name=\"secure_screen_summary\">Skryť obsah aplikácie pri prepínaní aplikácie a blokovať tvorbu snímkov obrazovky</string>\n    <string name=\"action_asc\">Vzostupne</string>\n    <string name=\"action_desc\">Zostupne</string>\n    <string name=\"action_move_to_bottom\">Presunúť na spodok</string>\n    <string name=\"action_disable\">Zakázať</string>\n    <string name=\"action_unpin\">Odopnúť</string>\n    <string name=\"label_warning\">Upozornenie</string>\n    <string name=\"action_filter_tracked\">Sledované</string>\n    <string name=\"pref_category_theme\">Téma</string>\n    <string name=\"theme_light\">Vyp.</string>\n    <string name=\"theme_dark\">Zap.</string>\n    <string name=\"pref_app_theme\">Téma aplikácie</string>\n    <string name=\"theme_monet\">Dynamické</string>\n    <string name=\"theme_greenapple\">Zelené jablko</string>\n    <string name=\"theme_yotsuba\">Jotsuba</string>\n    <string name=\"theme_midnightdusk\">Polnočný súmrak</string>\n    <string name=\"pref_dark_theme_pure_black\">Čisto čierny tmavý režim</string>\n    <string name=\"theme_strawberrydaiquiri\">Jahodové Daiquiri</string>\n    <string name=\"theme_tealturquoise\">Modrozelená a tyrkysová</string>\n    <string name=\"pref_date_format\">Formát dátumu</string>\n    <string name=\"pref_manage_notifications\">Spravovať oznámenia</string>\n    <string name=\"pref_category_security\">Bezpečnosť</string>\n    <string name=\"lock_with_biometrics\">Vyžaduje odomknutie</string>\n    <string name=\"lock_when_idle\">Uzamknúť pri nečinnosti</string>\n    <string name=\"lock_always\">Vždy</string>\n    <string name=\"lock_never\">Nikdy</string>\n    <string name=\"pref_show_nsfw_source\">Zobraziť v zoznamoch zdrojov a rozšírení</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) zdroje</string>\n    <string name=\"relative_time_today\">Dnes</string>\n    <string name=\"connected_to_wifi\">Iba na Wi-Fi</string>\n    <string name=\"restrictions\">Obmedzenia: %s</string>\n    <string name=\"pref_update_only_completely_read\">S neprečítanými kapitolami</string>\n    <string name=\"pref_update_only_started\">Ktoré sa ešte nezačali</string>\n    <string name=\"parental_controls_info\">Toto nastavenie avšak nebráni tomu, aby sa v aplikácii objavil neoficiálny alebo potenciálne nesprávne označený obsah NSFW (18+).</string>\n    <string name=\"pref_category_library_update\">Globálna aktualizácia</string>\n    <string name=\"pref_library_update_refresh_metadata\">Automatický obnoviť metadata</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Pri aktualizácii knižnice skontrolujte nový obal a podrobnosti</string>\n    <string name=\"pref_category_display\">Zobraziť</string>\n    <string name=\"update_72hour\">Každé 3 dni</string>\n    <string name=\"update_already_running\">Aktualizácia už prebieha</string>\n    <string name=\"empty_backup_error\">Žiadne záznami v knižnici k zálohovaniu</string>\n    <string name=\"requires_app_restart\">Vyžaduje reštart aplikácie, aby sa zmeny prejavili</string>\n    <string name=\"label_data\">Dáta</string>\n    <string name=\"logout\">Odhlásiť sa</string>\n    <string name=\"sort_by_upload_date\">Podľa dátumu nahratia</string>\n    <string name=\"spen_previous_page\">Predchádzajúca strana</string>\n    <string name=\"pref_show_navigation_mode\">Zobraziť prekrytie oblastí dotyku</string>\n    <string name=\"nav_zone_next\">Ďalší</string>\n    <string name=\"restoring_backup_error\">Obnovenie zálohy zlyhalo</string>\n    <string name=\"restoring_backup_canceled\">Obnovenie bolo zrušené</string>\n    <string name=\"tabs_header\">Karty</string>\n    <string name=\"error_user_agent_string_blank\">Reťazec User-Agent nemôže byť prázdny</string>\n    <string name=\"pref_reset_viewer_flags\">Obnovenie nastavení čítačky pre jednotlivé série</string>\n    <string name=\"clear_history_completed\">História bola odstránená</string>\n    <string name=\"clear_history_confirmation\">Ste si istý? Celá história sa stratí.</string>\n    <string name=\"confirm_set_chapter_settings\">Naozaj chcete tieto nastavenia uložiť ako predvolené?</string>\n    <string name=\"add_to_library\">Pridať do knižnice</string>\n    <string name=\"pref_show_reading_mode_summary\">Krátko zobrazí aktuálny režim pri otvorení čítačky</string>\n    <string name=\"pref_grayscale\">Odtiene šedej</string>\n    <string name=\"pref_highest\">Najvyššie</string>\n    <string name=\"backup_in_progress\">Zálohovanie už prebieha</string>\n    <string name=\"pref_refresh_library_covers\">Obnoviť obaly knižnice</string>\n    <string name=\"logout_title\">Odhlásiť sa z %1$s?</string>\n    <string name=\"complete_list\">Kompletný zoznam</string>\n    <string name=\"file_picker_error\">Nenašla sa žiadna aplikácia na výber súborov</string>\n    <string name=\"channel_complete\">Kompletný</string>\n    <string name=\"theme_tidalwave\">Prílivová vlna</string>\n    <string name=\"pref_category_delete_chapters\">Odstrániť kapitoly</string>\n    <string name=\"save_chapter_as_cbz\">Uložiť ako archív CBZ</string>\n    <string name=\"split_tall_images_summary\">Zlepšuje výkon čítačky</string>\n    <string name=\"tracking_guide\">Návod k sledovaniu</string>\n    <string name=\"enhanced_services\">Rozšírené služby</string>\n    <string name=\"label_network\">Sieť</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Vymazanie vyrovnávacej pamäte kapitoly pri zatvorení aplikácie</string>\n    <string name=\"whats_new\">Čo je nové</string>\n    <string name=\"help_translate\">Pomôžte s prekladom</string>\n    <string name=\"licenses\">Licencia Open Source</string>\n    <string name=\"error_sharing_cover\">Chyba pri zdieľaní obalu</string>\n    <string name=\"loader_not_implemented_error\">Zdroj sa nenašiel</string>\n    <string name=\"empty_screen\">No, toto je trápne</string>\n    <string name=\"information_webview_required\">WebView je potrebné pre Mihon</string>\n    <string name=\"popular\">Populárne</string>\n    <string name=\"reading_list\">Zoznam čítania</string>\n    <string name=\"track_finished_reading_date\">Dátum ukončenia</string>\n    <string name=\"updates_last_update_info\">Posledná aktualizácia knižnice: %s</string>\n    <string name=\"appwidget_updates_description\">Pozrite si svoju nedávno aktualizovanú mangu</string>\n    <string name=\"pref_hide_threshold\">Citlivosť pre skrytie ponuky pri posúvaní</string>\n    <string name=\"page_list_empty_error\">Nenašli sa žiadne stránky</string>\n    <string name=\"pref_always_show_chapter_transition\">Vždy zobraziť prechod medzi kapitolami</string>\n    <string name=\"pref_low\">Nízke</string>\n    <string name=\"backup_restore_content_full\">Údaje zo záložného súboru sa obnovia.\n\\n\n\\nBudete musieť nainštalovať všetky chýbajúce rozšírenia a potom sa prihlásiť do sledovacích služieb, aby ste ich mohli používať.</string>\n    <string name=\"pref_reset_viewer_flags_error\">Nepodarilo sa obnoviť nastavenia čítačky</string>\n    <string name=\"pref_tablet_ui_mode\">Používateľské rozhranie tabletu</string>\n    <string name=\"manga_from_library\">Manga z knižnice</string>\n    <string name=\"cancelled\">Zrušené</string>\n    <string name=\"on_hold_list\">Zoznam pozastavených položiek</string>\n    <string name=\"download_ahead\">Stiahnuť dopredu</string>\n    <string name=\"auto_download_while_reading\">Automatické sťahovanie počas čítania</string>\n    <string name=\"download_ahead_info\">Funguje iba na položkách v knižnici a ak je aktuálna kapitola a nasledujúca kapitola už stiahnutá.</string>\n    <string name=\"unknown_status\">Neznámy stav</string>\n    <string name=\"on_hiatus\">Prestávka</string>\n    <string name=\"add_tracking\">Pridať sledovanie</string>\n    <string name=\"unfinished_list\">Nedokončený zoznam</string>\n    <string name=\"information_empty_category_dialog\">Zatiaľ nemáte žiadne kategórie.</string>\n    <string name=\"ext_info_age_rating\">Vekové hodnotenie</string>\n    <string name=\"date\">Dátum</string>\n    <string name=\"tapping_inverted_both\">Obe</string>\n    <string name=\"nav_zone_prev\">Predchádzajúci</string>\n    <string name=\"pref_high\">Vysoké</string>\n    <string name=\"restore_miui_warning\">Zálohovanie/obnovenie nemusí fungovať správne, ak je vypnutá optimalizácia MIUI.</string>\n    <string name=\"pref_disable_battery_optimization\">Zakázať optimalizáciu batérie</string>\n    <string name=\"logout_success\">Teraz ste odhlásení</string>\n    <string name=\"local_source_help_guide\">Návod pre lokálne zdroje</string>\n    <string name=\"unknown_author\">Neznámy autor</string>\n    <string name=\"clipboard_copy_error\">Nepodarilo sa skopírovať do schránky</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nepodarilo sa nájsť cestu k súboru stránky %d</string>\n    <string name=\"channel_errors\">Chyby</string>\n    <string name=\"off\">Vyp.</string>\n    <string name=\"download_insufficient_space\">Nepodarilo sa stiahnuť kapitoly z dôvodu nedostatku úložného priestoru</string>\n    <string name=\"action_sort_count\">Celkový počet</string>\n    <string name=\"ext_installer_legacy\">Pôvodný</string>\n    <string name=\"automatic_background\">Automatický</string>\n    <string name=\"tapping_inverted_none\">Žiadne</string>\n    <string name=\"delete_category\">Odstrániť kategóriu</string>\n    <string name=\"none\">Žiadne</string>\n    <string name=\"include\">Zahrnúť: %s</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Vytvára priečinky podľa názvu mangy</string>\n    <string name=\"edge_nav\">Okraj</string>\n    <string name=\"right_and_left_nav\">Vpravo a vľavo</string>\n    <string name=\"nav_zone_left\">Vľavo</string>\n    <string name=\"rotation_reverse_portrait\">Obrátený portrét</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Povoliť odstraňovanie kapitol so záložkami</string>\n    <string name=\"channel_ext_updates\">Aktualizácie rozšírení</string>\n    <string name=\"pref_app_language\">Jazyk aplikácie</string>\n    <string name=\"ext_info_language\">Jazyk</string>\n    <string name=\"ext_installer_pref\">Inštalátor</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku nebeží</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Nainštalujte a spustite Shizuku, aby ste mohli používať Shizuku ako inštalátor rozšírení.</string>\n    <string name=\"pref_show_navigation_mode_summary\">Krátko ukázať, keď je čítačka otvorená</string>\n    <string name=\"pref_dual_page_invert\">Prevrátiť rozdelenie na dve strany</string>\n    <string name=\"nav_zone_right\">Vpravo</string>\n    <string name=\"vertical_plus_viewer\">Nepretržité vertikálne</string>\n    <string name=\"pref_viewer_nav\">Dotykové zóny</string>\n    <string name=\"pref_landscape_zoom\">Priblížiť obrázok na šírku</string>\n    <string name=\"pref_category_reading\">Čítanie</string>\n    <string name=\"pref_category_for_this_series\">Pre túto sériu</string>\n    <string name=\"pref_webtoon_side_padding\">Bočné odsadenie</string>\n    <string name=\"pref_category_auto_download\">Automatické sťahovanie</string>\n    <string name=\"source_empty_screen\">Nenašiel sa žiadny zdroj</string>\n    <string name=\"channel_progress\">Priebeh</string>\n    <string name=\"pref_clear_history\">Vymazať históriu</string>\n    <string name=\"error_saving_cover\">Chyba pri ukladaní obalu</string>\n    <string name=\"set_chapter_settings_as_default\">Nastaviť ako predvolené</string>\n    <string name=\"tracking_info\">Jednosmerná synchronizácia na aktualizáciu priebehu kapitol v službách sledovania. Nastavte sledovanie pre jednotlivé položky mangy z ich tlačidla sledovania.</string>\n    <string name=\"pref_category_reading_mode\">Režim čítania</string>\n    <string name=\"channel_new_chapters\">Aktualizácie kapitol</string>\n    <string name=\"clear_database_source_item_count\">V databáze je manga %1$d, ktorá sa nenachádza v knižnici</string>\n    <string name=\"updating_library\">Aktualizácia knižnice</string>\n    <string name=\"track_started_reading_date\">Dátum začatia</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Obnovenie režimu čítania a orientácie pre všetky série</string>\n    <string name=\"pref_verbose_logging\">Podrobné logovanie</string>\n    <string name=\"check_for_updates\">Skontrolovať aktualizácie</string>\n    <string name=\"recent_manga_time\">Kap. %1$s - %2$s</string>\n    <string name=\"download_notifier_split_page_not_found\">Strana %d sa pri rozdeľovaní nenašla</string>\n    <string name=\"publishing_finished\">Publikovanie ukončené</string>\n    <string name=\"no_pinned_sources\">Nemáte žiadne pripnuté zdroje</string>\n    <string name=\"update_check_eol\">Táto verzia systému Android už nie je podporovaná</string>\n    <string name=\"action_sort_unread_count\">Počet neprečítaných</string>\n    <string name=\"kindlish_nav\">Podobné Kindl-u</string>\n    <string name=\"pref_lowest\">Najnižšie</string>\n    <string name=\"categorized_display_settings\">Nastavenia triedenia a zobrazenia pre jednotlivé kategórie</string>\n    <string name=\"backup_restore_missing_sources\">Chýbajúce zdroje:</string>\n    <string name=\"pref_verbose_logging_summary\">Výpis podrobných logov do systémových logov (znižuje výkon aplikácie)</string>\n    <string name=\"network_not_metered\">Iba v nemeranej sieti</string>\n    <string name=\"ext_update_all\">Aktualizovať všetko</string>\n    <string name=\"extension_api_error\">Nepodarilo sa získať zoznam rozšírení</string>\n    <string name=\"ext_install_service_notif\">Inštaluje sa rozšírenie…</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invertovať oblasti dotyku</string>\n    <string name=\"pref_create_folder_per_manga\">Uloženie stránok do samostatných priečinkov</string>\n    <string name=\"gray_background\">Šedivá</string>\n    <string name=\"rotation_landscape\">Na šírku</string>\n    <string name=\"restore_in_progress\">Obnovenie už prebieha</string>\n    <string name=\"pref_dump_crash_logs_summary\">Uložiť logy o chybách do súboru na zdieľanie s vývojármi</string>\n    <string name=\"manga_cover\">Obal</string>\n    <string name=\"cover_saved\">Obal uložený</string>\n    <string name=\"delete_category_confirmation\">Prajete si vymazať kategóriu s?</string>\n    <string name=\"tapping_inverted_vertical\">Vertikálne</string>\n    <string name=\"backup_restore_missing_trackers\">Sledovače, do ktorých nie ste prihlásení:</string>\n    <string name=\"pref_dns_over_https\">DNS cez HTTPS (DoH)</string>\n    <string name=\"invalid_backup_file\">Neplatný záložný súbor</string>\n    <string name=\"restore_duration\">%1$02d min., %2$02d s</string>\n    <string name=\"multi_lang\">Viacjazyčné</string>\n    <string name=\"no_chapters_error\">Nenašli sa žiadne kapitoly</string>\n    <string name=\"ext_app_info\">Informácie o aplikácii</string>\n    <string name=\"ext_info_version\">Verzia</string>\n    <string name=\"pref_cutout_short\">Zobraziť obsah v oblasti výrezu</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontálne</string>\n    <string name=\"disabled_nav\">Zakázané</string>\n    <string name=\"pref_remove_exclude_categories\">Vylúčené kategórie</string>\n    <string name=\"updated_version\">Aktualizované na v%1$s</string>\n    <string name=\"label_downloaded_only\">Iba stiahnuté</string>\n    <string name=\"wish_list\">Zoznam prianí</string>\n    <string name=\"remove_manga\">Chystáte sa odstrániť \\\"%s\\\" zo svojej knižnice</string>\n    <string name=\"downloaded_only_summary\">Filtruje všetku mangu vo vašej knižnici</string>\n    <string name=\"source_unsupported\">Zdroj nie je podporovaný</string>\n    <string name=\"not_installed\">Nenainštalované</string>\n    <string name=\"share_page_info\">%1$s: %2$s, strana %3$d</string>\n    <string name=\"rotation_type\">Typ rotácie</string>\n    <string name=\"action_close\">Zatvoriť</string>\n    <string name=\"pref_library_update_categories_details\">Záznamy vo vylúčených kategóriách nebudú aktualizované, aj keď sú tiež v zahrnutých kategóriách.</string>\n    <string name=\"ext_updates_pending\">Čakajúce aktualizácie</string>\n    <string name=\"spen_next_page\">Ďalšia strana</string>\n    <string name=\"update_check_open\">Otvoriť na GitHub-e</string>\n    <string name=\"getting_started_guide\">Príručka Začíname</string>\n    <string name=\"notification_incognito_text\">Zakázať režim inkognito</string>\n    <string name=\"manga_info_collapse\">Menej</string>\n    <string name=\"enhanced_tracking_info\">Služby, ktoré poskytujú rozšírené funkcie pre konkrétne zdroje. Mangy sú automaticky sledované po pridaní do vašej knižnice.</string>\n    <string name=\"pref_dual_page_split\">Rozdelenie na dve strany</string>\n    <string name=\"action_sort_last_manga_update\">Posledná aktualizácia</string>\n    <string name=\"action_remove_everything\">Odstrániť všetko</string>\n    <string name=\"internal_error\">InternalError: Skontrolujte záznmy pre ďalšie informácie</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">Zdroje z tohto rozšírenia môžu obsahovať obsah pre dospleých (18+)</string>\n    <string name=\"pref_dual_page_invert_summary\">Ak umiestnenie rozdelenia na dve strany nezodpovedá smeru čítania</string>\n    <string name=\"pref_show_reading_mode\">Zobraziť režim čítania</string>\n    <string name=\"invalid_backup_file_missing_manga\">Záloha neobsahuje žiadnu mangu.</string>\n    <string name=\"l_nav\">V tvare písmena L</string>\n    <string name=\"backup_info\">Dôrazne sa odporúča automatické zálohovanie. Kópie by ste si mali uchovávať aj na iných miestach.</string>\n    <string name=\"pref_dump_crash_logs\">Výpis logu o zlyhaní</string>\n    <string name=\"pref_reset_user_agent_string\">Obnoviť predvolený reťazec User-Agent</string>\n    <string name=\"action_global_search_query\">Globálne vyhľadať \\\"%1$s\\\"</string>\n    <string name=\"description_placeholder\">Bez popisu</string>\n    <string name=\"chapter_settings\">Nastavenia kapitoly</string>\n    <string name=\"also_set_chapter_settings_for_library\">Taktiež nastaviť pre všetky mangy v mojej knižnici</string>\n    <string name=\"source_filter_empty_screen\">Nenašiel sa žiadny nainštalovaný zdroj</string>\n    <string name=\"pref_navigate_pan\">Prejsť na posúvanie</string>\n    <string name=\"cant_open_last_read_chapter\">Nie je možné otvoriť poslednú prečítanú kapitolu</string>\n    <string name=\"learn_more\">Klepnutím sa dozviete viac</string>\n    <string name=\"downloaded_chapters\">Stiahnuté kapitoly</string>\n    <string name=\"migration_help_guide\">Návod k migrácií zdrojov</string>\n    <string name=\"pref_reset_viewer_flags_success\">Všetky nastavenia čítačky sa obnovia</string>\n    <string name=\"label_background_activity\">Aktivita na pozadí</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Pomáha s aktualizáciami a zálohovaním knižnice na pozadí</string>\n    <string name=\"battery_optimization_disabled\">Optimalizácia batérie je už vypnutá</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Nepodarilo sa otvoriť nastavenia zariadenia</string>\n    <string name=\"about_dont_kill_my_app\">Niektorí výrobcovia majú ďalšie obmedzenia aplikácií, ktoré vypínajú služby na pozadí. Na tejto webovej stránke nájdete viac informácií o tom, ako to opraviť.</string>\n    <string name=\"viewer\">Režim čítania</string>\n    <string name=\"error_saving_picture\">Chyba pri ukladaní obrázka</string>\n    <string name=\"channel_app_updates\">Aktualizácie aplikácie</string>\n    <string name=\"appwidget_unavailable_locked\">Widget nie je k dispozícii, keď je povolený zámok aplikácie</string>\n    <string name=\"local_filter_order_by\">Zoradiť podľa</string>\n    <string name=\"local_invalid_format\">Neplatný formát kapitoly</string>\n    <string name=\"exclude\">Vylúčiť: %s</string>\n    <string name=\"last_used_source\">Naposledy použité</string>\n    <string name=\"pinned_sources\">Pripnuté</string>\n    <string name=\"chapter_not_found\">Kapitola sa nenašla</string>\n    <string name=\"on\">Zap.</string>\n    <string name=\"chapter_settings_updated\">Aktualizované predvolené nastavenia kapitol</string>\n    <string name=\"pref_inverted_colors\">Inverzný</string>\n    <string name=\"theme_lavender\">Levanduľa</string>\n    <string name=\"pref_download_new_categories_details\">Mangy vo vylúčených kategóriách nebudú stiahnuté, aj keď sú tiež v zahrnutých kategóriách.</string>\n    <string name=\"database_clean\">Čistenie databázy</string>\n    <string name=\"pref_clear_webview_data\">Vymazanie údajov WebView</string>\n    <string name=\"webview_data_deleted\">Údaje WebView boli vymazané</string>\n    <string name=\"manga_info_expand\">Viac</string>\n    <string name=\"download_queue_size_warning\">Upozornenie: Veľké hromadné sťahovanie môže viesť k spomaleniu zdrojov a/alebo blokovaniu Mihon. Klepnutím sa dozviete viac.</string>\n    <string name=\"notification_size_warning\">Veľké aktualizácie poškodzujú zdroje a môžu viesť k pomalším aktualizáciám a tiež k zvýšeniu spotreby batérie. Klepnutím sa dozviete viac.</string>\n    <string name=\"notification_update_error\">Zlyhané aktualizácie: %1$d</string>\n    <string name=\"creating_backup_error\">Zálohovanie zlyhalo</string>\n    <string name=\"action_track\">Sledovať</string>\n    <string name=\"website\">Webová stránka</string>\n    <string name=\"pref_reader_actions\">Akcie</string>\n    <string name=\"custom_cover\">Vlastný obal</string>\n    <string name=\"action_move_to_top_all_for_series\">Presunúť sériu na začiatok</string>\n    <string name=\"privacy_policy\">Zásady ochrany osobných údajov</string>\n    <string name=\"are_you_sure\">Ste si istí?</string>\n    <string name=\"rotation_portrait\">Na výšku</string>\n    <string name=\"pref_user_agent_string\">Predvolený reťazec pre User-Agent</string>\n    <string name=\"myanimelist_relogin\">Prihláste sa znova do MAL</string>\n    <string name=\"error_no_match\">Nenašla sa žiadna zhoda</string>\n    <string name=\"pref_incognito_mode\">Režim inkognito</string>\n    <string name=\"pref_incognito_mode_summary\">Pozastaví históriu čítania</string>\n    <string name=\"email\">Emailová adresa</string>\n    <string name=\"pref_skip_filtered_chapters\">Preskočiť filtrované kapitoly</string>\n    <string name=\"in_library\">V knižnici</string>\n    <string name=\"library_errors_help\">Pomoc s opravou chýb aktualizácie knižnice nájdete v %1$s</string>\n    <string name=\"skipped_reason_completed\">Preskočené, pretože séria je dokončená</string>\n    <string name=\"skipped_reason_not_caught_up\">Preskočené, pretože obsahuje neprečítané kapitoly</string>\n    <string name=\"skipped_reason_not_started\">Preskočené, pretože neboli prečítané žiadne kapitoly</string>\n    <string name=\"label_local\">Lokálna</string>\n    <string name=\"label_downloaded\">Stiahnuté</string>\n    <string name=\"label_stats\">Štatistiky</string>\n    <string name=\"label_started\">Začaté</string>\n    <string name=\"action_search_hint\">Hľadať…</string>\n    <string name=\"action_open_random_manga\">Otvoriť náhodný záznam</string>\n    <string name=\"action_copy_link\">Skopírovať link</string>\n    <string name=\"action_apply\">Použiť</string>\n    <string name=\"pref_update_only_in_release_period\">Predpokladať čas následujúceho vydania</string>\n    <string name=\"action_sort_random\">Náhodné</string>\n    <string name=\"action_update_category\">Aktualizovať kategóriu</string>\n    <string name=\"action_copy_to_clipboard\">Kopírovať do schránky</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Presunúť sériu na koniec</string>\n    <string name=\"onboarding_action_next\">Ďalšie</string>\n    <string name=\"onboarding_action_skip\">Preskočiť</string>\n    <string name=\"onboarding_permission_install_apps\">Povolenie pre sťahovanie aplikácie</string>\n    <string name=\"pref_security\">Bezpečnosť</string>\n    <string name=\"onboarding_action_finish\">Začíname</string>\n    <string name=\"ext_confirm_remove\">Odstrániť rozšírenie?</string>\n    <string name=\"remove_private_extension_message\">Naozaj chcete odstrániť \\\"%s\\\" rozšírenie?</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"no_location_set\">Nie je nastavené miesto uloženia</string>\n    <string name=\"onboarding_storage_selection_required\">Priečinok musí byť vybraný</string>\n    <string name=\"onboarding_storage_action_select\">Vyberte priečinok</string>\n    <string name=\"selected\">Vybrané</string>\n    <string name=\"not_selected\">Nevybrané</string>\n    <string name=\"action_menu_overflow_description\">Viac možností</string>\n    <string name=\"delete_downloaded\">Vymazať stiahnuté</string>\n    <string name=\"scanlator\">Prekladateľ</string>\n    <string name=\"label_data_storage\">Dáta a úložisko</string>\n    <string name=\"unlock_app_title\">Odomknúť %s</string>\n    <string name=\"action_set_interval\">Nastaviť interval</string>\n    <string name=\"action_sort_next_updated\">Ďalšia očakávaná aktualizácia</string>\n    <string name=\"onboarding_heading\">Vitajte!</string>\n    <string name=\"label_upcoming\">Nadchádzajúce</string>\n    <string name=\"action_replace_repo\">Nahradiť</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sq/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Pas %1$s minutë</item>\n        <item quantity=\"other\">Pas %1$s minutash</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Dje</item>\n        <item quantity=\"other\">%1$d ditë më parë</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategori</item>\n        <item quantity=\"other\">%d kategoritë</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Kapitulli tjetër i palexuar</item>\n        <item quantity=\"other\">%d kapitujt e ardhshëm të palexuar</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s e mbetur</item>\n        <item quantity=\"other\">%1$s kanë mbetur</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Përfunduar në %1$s me %2$s gabim</item>\n        <item quantity=\"other\">Përfunduar në %1$s me %2$s gabime</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Ofrohet përditësim i shtesës</item>\n        <item quantity=\"other\">Ofrohen %d përditësime shtesë</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Po kalon %d kapitull, ose i mungon burimi ose është filtruar</item>\n        <item quantity=\"other\">Po kalon %d kapituj, ose i mungon burimi ose është filtruar</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d kapitull i ri</item>\n        <item quantity=\"other\">%1$d kapituj të rinj</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Kapitujt %1$s dhe 1 më shumë</item>\n        <item quantity=\"other\">Kapitujt %1$s dhe %2$d të tjerë</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">Për %d hyrje</item>\n        <item quantity=\"other\">Për %d hyrjet</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d gjurmues</item>\n        <item quantity=\"other\">%d gjurmuesit</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s kapitull</item>\n        <item quantity=\"other\">%1$s kapituj</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Kapitulli i rradhës</item>\n        <item quantity=\"other\">%d kapituj të rradhës</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sq/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Emri</string>\n    <string name=\"label_more\">Më tepër</string>\n    <string name=\"label_settings\">Cilësimet</string>\n    <string name=\"label_download_queue\">Radha e shkarkimeve</string>\n    <string name=\"label_library\">Libraria</string>\n    <string name=\"label_recent_updates\">Përditësimet</string>\n    <string name=\"information_no_downloads\">S\\'ka shkarkime</string>\n    <string name=\"label_recent_manga\">Historia</string>\n    <string name=\"label_sources\">Burimet</string>\n    <string name=\"label_backup\">Ruaj dhe rikthe</string>\n    <string name=\"label_migration\">Shpërngulu</string>\n    <string name=\"label_extensions\">Shtesa</string>\n    <string name=\"label_extension_info\">Informacione shtesë</string>\n    <string name=\"label_help\">Ndihmë</string>\n    <string name=\"information_no_recent\">S\\'ka përditësime të reja</string>\n    <string name=\"action_disable\">Çaktivizo</string>\n    <string name=\"action_cancel\">Anulo</string>\n    <string name=\"action_cancel_all\">Anulo të gjitha</string>\n    <string name=\"cancel_all_for_series\">Anulo të gjitha për këtë seri</string>\n    <string name=\"action_undo\">Zhbëj</string>\n    <string name=\"action_open_log\">Hap regjistrin</string>\n    <string name=\"action_restore\">Rivendos</string>\n    <string name=\"action_webview_forward\">Përpara</string>\n    <string name=\"action_webview_refresh\">Rifresko</string>\n    <string name=\"app_not_available\">Aplikacioni i padisponueshem</string>\n    <string name=\"pref_downloads_summary\">Shkarkim automatik, shkarko përpara</string>\n    <string name=\"theme_dark\">Errët</string>\n    <string name=\"theme_greenapple\">Molle jeshile</string>\n    <string name=\"theme_lavender\">Livando</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_tidalwave\">Valët e Baticës</string>\n    <string name=\"pref_dark_theme_pure_black\">E zezë e pastër modaliteti i errët</string>\n    <string name=\"pref_manage_notifications\">Menaxho njoftimet</string>\n    <string name=\"pref_app_language\">Gjuha e aplikacionit</string>\n    <string name=\"pref_category_security\">Siguria dhe privatësia</string>\n    <string name=\"lock_with_biometrics\">Kërkohet shkyçja</string>\n    <string name=\"lock_when_idle\">Kyç kur është i papunë</string>\n    <string name=\"lock_always\">Gjithmonë</string>\n    <string name=\"lock_never\">Kurrë</string>\n    <string name=\"hide_notification_content\">Fshih përmbajtjen e njoftimit</string>\n    <string name=\"secure_screen\">Ekran i sigurt</string>\n    <string name=\"pref_category_nsfw_content\">Burimet NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Shfaq në listat e burimeve dhe shtesave</string>\n    <string name=\"relative_time_today\">Sot</string>\n    <string name=\"pref_category_display\">Shfaqja</string>\n    <string name=\"pref_library_columns\">Përmasat e grafikut</string>\n    <string name=\"pref_category_library_update\">Përditësim global</string>\n    <string name=\"update_never\">Joaktiv</string>\n    <string name=\"update_12hour\">Çdo 12 orë</string>\n    <string name=\"update_24hour\">Ditore</string>\n    <string name=\"update_weekly\">Javore</string>\n    <string name=\"connected_to_wifi\">Vetëm në Wi-Fi</string>\n    <string name=\"network_not_metered\">Vetëm në rrjet pa matje</string>\n    <string name=\"charging\">Gjatë karikimit</string>\n    <string name=\"pref_update_only_completely_read\">Me kapituj të palexuar</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Kontrolloni për kopertinë dhe detaje të reja kur përditësoni bibliotekën</string>\n    <string name=\"default_category\">Kategoria e parazgjedhur</string>\n    <string name=\"pref_library_update_categories_details\">Elementet në kategoritë e përjashtuara nuk do të përditësohen edhe nëse janë gjithashtu në kategoritë e përfshira.</string>\n    <string name=\"all\">Të gjitha</string>\n    <string name=\"none\">Asnje</string>\n    <string name=\"include\">Përfshi: %s</string>\n    <string name=\"exclude\">Përjashtoni: %s</string>\n    <string name=\"multi_lang\">Shumë</string>\n    <string name=\"ext_update\">Përditëso</string>\n    <string name=\"ext_obsolete\">I vjetëruar</string>\n    <string name=\"channel_progress\">Përparim</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Nuk mund të gjendej shtegu i skedarit të faqes %d</string>\n    <string name=\"information_no_recent_manga\">Asgjë e lexuar kohët e fundit</string>\n    <string name=\"download_notifier_title_error\">Gabim</string>\n    <string name=\"download_notifier_text_only_wifi\">Nuk ofrohet lidhje Wi-Fi</string>\n    <string name=\"information_empty_library\">Biblioteka juaj është bosh</string>\n    <string name=\"getting_started_guide\">Udhëzues për fillimin</string>\n    <string name=\"information_no_entries_found\">Nuk u gjet asnjë element në këtë kategori</string>\n    <string name=\"information_empty_category\">Nuk ke kategori. Prekni butonin plus për të krijuar një për organizimin e bibliotekës tuaj.</string>\n    <string name=\"information_webview_required\">WebView kërkohet për Mihon</string>\n    <string name=\"information_cloudflare_bypass_failure\">Dështoi të anashkalojë Cloudflare</string>\n    <string name=\"information_empty_category_dialog\">Nuk ke ende asnjë kategori.</string>\n    <string name=\"download_notifier_download_paused\">Shkarkimet u ndërprenë</string>\n    <string name=\"download_notifier_no_network\">Nuk ka lidhje rrjeti të disponueshme</string>\n    <string name=\"download_notifier_unknown_error\">Kapitulli nuk mund të shkarkohej për shkak të një gabimi të papritur</string>\n    <string name=\"channel_errors\">Gabimet</string>\n    <string name=\"channel_complete\">E plotësuar</string>\n    <string name=\"channel_common\">I përbashkët</string>\n    <string name=\"spen_next_page\">Faqja tjetër</string>\n    <string name=\"spen_previous_page\">Faqja e meparshme</string>\n    <string name=\"channel_ext_updates\">Përditësimet shtesë</string>\n    <string name=\"channel_app_updates\">Përditësimet e aplikacioneve</string>\n    <string name=\"channel_new_chapters\">Përditësimet e kapitullit</string>\n    <string name=\"download_notifier_cache_renewal\">Shkarkimet e indeksimit</string>\n    <string name=\"download_notifier_split_page_not_found\">Faqja %d nuk u gjet gjatë ndarjes</string>\n    <string name=\"download_notifier_downloader_title\">Shkarkues</string>\n    <string name=\"information_webview_outdated\">Përditësoni aplikacionin WebView për përputhshmëri më të mirë</string>\n    <string name=\"label_default\">E paracaktuar</string>\n    <string name=\"action_filter_tracked\">I gjurmuar</string>\n    <string name=\"action_settings\">Cilësimet</string>\n    <string name=\"action_filter_unread\">E palexuar</string>\n    <string name=\"action_filter_empty\">Hiq filtrin</string>\n    <string name=\"action_sort_alpha\">Sipas alfabetit</string>\n    <string name=\"action_sort_total\">Totali i kapitujve</string>\n    <string name=\"label_warning\">Paralajmërim</string>\n    <string name=\"action_sort_count\">Totali i elementeve</string>\n    <string name=\"action_sort_last_read\">Leximi i fundit</string>\n    <string name=\"confirm_lock_change\">Vërtetohuni për të konfirmuar ndryshimin</string>\n    <string name=\"action_menu\">Menuja</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_order_by_chapter_number\">Sipas numrit të kapitullit</string>\n    <string name=\"action_display_download_badge\">Kapitujt e shkarkuar</string>\n    <string name=\"action_display_local_badge\">Burimi lokal</string>\n    <string name=\"action_display_comfortable_grid\">Rrjetë e rehatshme</string>\n    <string name=\"action_display_show_tabs\">Shfaq skedat e kategorive</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_display_cover_only_grid\">Rrjetë vetëm me mbulesë</string>\n    <string name=\"action_display_language_badge\">Gjuha</string>\n    <string name=\"action_display_show_continue_reading_button\">Shfaq butonin për të vazhduar leximin</string>\n    <string name=\"action_display_show_number_of_items\">Trego numrin e artikujve</string>\n    <string name=\"action_pin\">Gozhdo</string>\n    <string name=\"action_newest\">Më të rejat</string>\n    <string name=\"action_unpin\">Hiqe</string>\n    <string name=\"loading\">Po ngarkohet…</string>\n    <string name=\"action_order_by_upload_date\">Sipas datës së ngarkimit</string>\n    <string name=\"action_sort\">Rendit</string>\n    <string name=\"action_oldest\">Më e vjetrat</string>\n    <string name=\"action_asc\">Në ngjitje</string>\n    <string name=\"action_move_to_top\">Lëvizni në krye</string>\n    <string name=\"action_desc\">Duke zbritur</string>\n    <string name=\"action_install\">Instaloni</string>\n    <string name=\"action_close\">Mbylle</string>\n    <string name=\"action_move_to_top_all_for_series\">Zhvendosni serinë në krye</string>\n    <string name=\"action_move_to_bottom\">Lëvizni në fund</string>\n    <string name=\"action_save\">Ruaj</string>\n    <string name=\"action_reset\">Rivendos</string>\n    <string name=\"action_share\">Shpërndaje</string>\n    <string name=\"action_show_errors\">Prekni për të parë detajet</string>\n    <string name=\"action_webview_back\">Mbrapa</string>\n    <string name=\"action_start_downloading_now\">Fillo shkarkimin tani</string>\n    <string name=\"internal_error\">Gabim i brendshëm: Kontrolloni regjistrat e përplasjeve për informacione të mëtejshme</string>\n    <string name=\"pref_security_summary\">Kyçja e aplikacionit, ekran i sigurt</string>\n    <string name=\"theme_tealturquoise\">Blu në Jeshile</string>\n    <string name=\"pref_category_general\">të përgjithshme</string>\n    <string name=\"pref_category_appearance\">Paraqitja</string>\n    <string name=\"pref_library_summary\">Kategoritë, përditësimi global</string>\n    <string name=\"pref_category_library\">Biblioteka</string>\n    <string name=\"pref_category_reader\">Lexues</string>\n    <string name=\"pref_category_downloads\">Shkarkimet</string>\n    <string name=\"pref_category_tracking\">Gjurmimi</string>\n    <string name=\"pref_browse_summary\">Burimet, zgjerimet, kërkimi global</string>\n    <string name=\"pref_backup_summary\">Rezervime manuale &amp; automatike</string>\n    <string name=\"pref_category_advanced\">E avancuar</string>\n    <string name=\"pref_appearance_summary\">Formati i temës, datës dhe orës</string>\n    <string name=\"pref_reader_summary\">Modaliteti i leximit, ekrani, navigimi</string>\n    <string name=\"pref_tracking_summary\">Sinkronizimi i përparimit në një drejtim, sinkronizimi i përmirësuar</string>\n    <string name=\"pref_category_about\">Rreth</string>\n    <string name=\"pref_advanced_summary\">Hidh regjistrat e përplasjeve, optimizimet e baterisë</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"theme_system\">Ndiq Sistemin</string>\n    <string name=\"theme_light\">Ndrçim</string>\n    <string name=\"theme_strawberrydaiquiri\">Daiquiri luleshtrydhe</string>\n    <string name=\"pref_app_theme\">Tema e aplikacionit</string>\n    <string name=\"theme_monet\">Dinamik</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"pref_date_format\">Formati i datës</string>\n    <string name=\"landscape\">Peizazhi</string>\n    <string name=\"secure_screen_summary\">Ekrani i sigurt fsheh përmbajtjen e aplikacionit kur ndërron aplikacionet dhe bllokon screenshots</string>\n    <string name=\"parental_controls_info\">Kjo nuk parandalon shtesat jozyrtare ose potencialisht të shënuara gabimisht që të shfaqin përmbajtjen NSFW (18+) brenda aplikacionit.</string>\n    <string name=\"portrait\">Portret</string>\n    <string name=\"restrictions\">Kufizimet: %s</string>\n    <string name=\"pref_library_update_interval\">Përditësimet automatike</string>\n    <string name=\"update_6hour\">Çdo 6 orë</string>\n    <string name=\"update_72hour\">Çdo 3 ditë</string>\n    <string name=\"pref_library_update_restriction\">Përditësimet automatike të kufizimet e pajisjes</string>\n    <string name=\"pref_update_only_non_completed\">Me statusin \\\"Përfunduar\\\"</string>\n    <string name=\"pref_update_only_started\">Kjo nuk ka filluar</string>\n    <string name=\"update_48hour\">Çdo 2 ditë</string>\n    <string name=\"pref_library_update_refresh_metadata\">Rifresko automatikisht të dhënat meta</string>\n    <string name=\"default_category_summary\">Gjithmonë pyesni</string>\n    <string name=\"ext_install\">Instaloni</string>\n    <string name=\"categorized_display_settings\">Cilësimet sipas kategorisë për renditjen dhe shfaqjen</string>\n    <string name=\"ext_update_all\">Përditëso të gjitha</string>\n    <string name=\"ext_updates_pending\">Përditësimet në pritje</string>\n    <string name=\"on\">Aktiv</string>\n    <string name=\"off\">Fikur</string>\n    <string name=\"categories\">Kategoritë</string>\n    <string name=\"manga\">Elementet e bibliotekës</string>\n    <string name=\"chapters\">Kapituj</string>\n    <string name=\"track\">Gjurmimi</string>\n    <string name=\"history\">Historia</string>\n    <string name=\"action_sort_last_manga_update\">Kontrolli i përditësimit të fundit</string>\n    <string name=\"action_sort_unread_count\">Numër i palexuar</string>\n    <string name=\"action_sort_latest_chapter\">Kapitulli i fundit</string>\n    <string name=\"action_sort_chapter_fetch_date\">Data e marrjes së kapitullit</string>\n    <string name=\"action_sort_date_added\">Data e shtimit</string>\n    <string name=\"action_search\">Kërko</string>\n    <string name=\"action_search_hint\">Kërko…</string>\n    <string name=\"action_search_settings\">Cilësimet e kërkimit</string>\n    <string name=\"action_global_search\">Kërkimi global</string>\n    <string name=\"action_select_all\">Selekto të gjitha</string>\n    <string name=\"action_select_inverse\">Zgjidhni anasjelltas</string>\n    <string name=\"action_mark_as_unread\">Shëno si të palexuar</string>\n    <string name=\"action_mark_as_read\">Shëno si të lexuar</string>\n    <string name=\"action_mark_previous_as_read\">Shëno të mëparshmen si të lexuar</string>\n    <string name=\"action_download\">Shkarko</string>\n    <string name=\"action_bookmark\">Shëno kapitullin</string>\n    <string name=\"action_remove_bookmark\">Zhshëno kapitullin</string>\n    <string name=\"action_delete\">Fshije</string>\n    <string name=\"action_update_library\">Përditëso bibliotekën</string>\n    <string name=\"action_enable_all\">Aktivizo të gjitha</string>\n    <string name=\"action_disable_all\">Çaktivzo të gjitha</string>\n    <string name=\"action_edit\">Redakto</string>\n    <string name=\"action_add\">Shtoni</string>\n    <string name=\"action_open_random_manga\">Hap hyrje të rastësishme</string>\n    <string name=\"action_add_category\">Shto kategori</string>\n    <string name=\"action_edit_categories\">Redakto kategoritë</string>\n    <string name=\"action_rename_category\">Riemërto kategorinë</string>\n    <string name=\"action_move_category\">Vendosni kategori</string>\n    <string name=\"delete_category_confirmation\">Dëshironi të fshini kategorinë \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Fshi kategorinë</string>\n    <string name=\"action_edit_cover\">Redakto kopertinën</string>\n    <string name=\"action_view_chapters\">Shiko kapitujt</string>\n    <string name=\"action_pause\">Ndalo</string>\n    <string name=\"action_previous_chapter\">Kapitulli i mëparshëm</string>\n    <string name=\"action_next_chapter\">Kapitulli tjetër</string>\n    <string name=\"action_retry\">Provo sërish</string>\n    <string name=\"action_remove\">Hiq</string>\n    <string name=\"action_remove_everything\">Hiqni gjithçka</string>\n    <string name=\"action_start\">Fillo</string>\n    <string name=\"action_resume\">Rifillo</string>\n    <string name=\"action_show_manga\">Shfaq hyrjen</string>\n    <string name=\"action_open_in_web_view\">Hapni në WebView</string>\n    <string name=\"action_open_in_browser\">Hapni në shfletues</string>\n    <string name=\"action_migrate\">Migroni</string>\n    <string name=\"action_display\">Ekrani</string>\n    <string name=\"action_display_mode\">Modaliteti i ekranit</string>\n    <string name=\"action_display_grid\">Rrjetë kompakte</string>\n    <string name=\"appwidget_updates_description\">Shiko përditësimin e fundit të elementeve të bibliotekes tuaj</string>\n    <string name=\"remove_manga\">Ju jeni gati të hiqni \\\"%s\\\" nga biblioteka juaj</string>\n    <string name=\"appwidget_unavailable_locked\">Miniaplikacioni nuk ofrohet kur kyçja e aplikacionit është aktivizuar</string>\n    <string name=\"ext_pending\">Në pritje</string>\n    <string name=\"ext_installing\">duke instaluar</string>\n    <string name=\"ext_untrusted\">E pabesueshme</string>\n    <string name=\"ext_app_info\">Informacioni i aplikacionit</string>\n    <string name=\"untrusted_extension\">Shtesë pabesueshme</string>\n    <string name=\"extension_api_error\">Marrja e listës së shtesave dështoi</string>\n    <string name=\"ext_info_version\">Versioni</string>\n    <string name=\"ext_info_age_rating\">Vlerësimi i moshës</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">Burimet nga kjo shtesë mund të përmbajnë përmbajtje NSFW (18+)</string>\n    <string name=\"ext_install_service_notif\">Po instalon shtesën…</string>\n    <string name=\"ext_installer_pref\">Instalues</string>\n    <string name=\"pref_fullscreen\">Ekran i plotë</string>\n    <string name=\"pref_show_navigation_mode\">Shfaq mbivendosjen e zonave të prekjes</string>\n    <string name=\"pref_show_navigation_mode_summary\">Trego shkurtimisht kur hapet lexuesi</string>\n    <string name=\"pref_dual_page_split\">Ndani faqet e gjera</string>\n    <string name=\"pref_dual_page_invert\">Inverto vendosjen e faqeve të ndara</string>\n    <string name=\"pref_dual_page_invert_summary\">Nëse vendosja e faqeve të ndara gjerësisht nuk përputhet me drejtimin e leximit</string>\n    <string name=\"pref_cutout_short\">Shfaq përmbajtjen në zonën e prerjes</string>\n    <string name=\"pref_double_tap_anim_speed\">Prekni dy herë shpejtësia e animacionit</string>\n    <string name=\"pref_show_page_number\">Shfaq numrin e faqes</string>\n    <string name=\"pref_show_reading_mode\">Shfaq modalitetin e leximit</string>\n    <string name=\"pref_custom_brightness\">Shkëlqimi i personalizuar</string>\n    <string name=\"pref_grayscale\">Shkallëgri</string>\n    <string name=\"pref_inverted_colors\">I përmbysur</string>\n    <string name=\"pref_custom_color_filter\">Filtër me ngjyra të personalizuara</string>\n    <string name=\"filter_mode_overlay\">Mbivendosje</string>\n    <string name=\"pref_keep_screen_on\">Mbaje ekranin të ndezur</string>\n    <string name=\"filter_mode_darken\">Djeg / Errëson</string>\n    <string name=\"pref_skip_filtered_chapters\">Kapërceni kapitujt e filtruar</string>\n    <string name=\"pref_reader_navigation\">Navigimi</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Inverto tastet e volumit</string>\n    <string name=\"pref_read_with_tapping_inverted\">Inverto zonat e trokitjes</string>\n    <string name=\"tapping_inverted_none\">Asnje</string>\n    <string name=\"tapping_inverted_vertical\">Vertikale</string>\n    <string name=\"pref_reader_actions\">Veprimet</string>\n    <string name=\"pref_read_with_long_tap\">Shfaq në trokitje të gjatë</string>\n    <string name=\"pref_crop_borders\">Kufijtë e prerjeve</string>\n    <string name=\"filter_mode_multiply\">Shumohen</string>\n    <string name=\"filter_mode_screen\">Ekrani</string>\n    <string name=\"pref_skip_read_chapters\">Kapërceni kapitujt e shënuar si të lexuar</string>\n    <string name=\"filter_mode_lighten\">Shmang/ Driten</string>\n    <string name=\"pref_color_filter_mode\">Filtri me ngjyra modaliteti i përzierjes</string>\n    <string name=\"tapping_inverted_horizontal\">Horizontale</string>\n    <string name=\"tapping_inverted_both\">te dyja</string>\n    <string name=\"ext_installed\">Instaluar</string>\n    <string name=\"ext_trust\">Besim</string>\n    <string name=\"ext_downloading\">Po shkarkohet</string>\n    <string name=\"ext_uninstall\">Çinstaloni</string>\n    <string name=\"ext_installer_legacy\">Trashëgimia</string>\n    <string name=\"untrusted_extension_message\">Kjo shtesë u nënshkrua me një certifikatë të pabesueshme dhe nuk u aktivizua.\n\\n\n\\n Një shtesë me qëllim të keq mund të lexojë çdo kredencial identifikimi të ruajtur në Mihon ose të ekzekutojë kod arbitrar.\n\\n\n\\n Duke i besuar kësaj certifikate ju i pranoni këto rreziqe.</string>\n    <string name=\"obsolete_extension_message\">Kjo shtesë nuk është më e disponueshme. Mund të mos funksionojë siç duhet dhe mund të shkaktojë probleme me aplikacionin. Rekomandohet ta çinstaloni.</string>\n    <string name=\"ext_info_language\">Gjuha</string>\n    <string name=\"pref_read_with_volume_keys\">Çelsat e volumit</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku nuk po kandidon</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Instaloni dhe filloni Shizuku për të përdorur Shizuku si instalues shtesë.</string>\n    <string name=\"pref_page_transitions\">Animoni tranzicionet e faqeve</string>\n    <string name=\"pref_show_reading_mode_summary\">Trego shkurtimisht modalitetin aktual kur hapet lexuesi</string>\n    <string name=\"pref_create_folder_per_manga\">Ruani faqet në dosje të veçanta</string>\n    <string name=\"pref_reader_theme\">Ngjyra e sfondit</string>\n    <string name=\"white_background\">E bardhë</string>\n    <string name=\"gray_background\">Gri</string>\n    <string name=\"automatic_background\">Automatik</string>\n    <string name=\"right_and_left_nav\">E djathta dhe e majta</string>\n    <string name=\"disabled_nav\">I paaftë</string>\n    <string name=\"nav_zone_prev\">e mëparshme</string>\n    <string name=\"right_to_left_viewer\">Nga e djathta në të majtë</string>\n    <string name=\"vertical_plus_viewer\">Vertikale e vazhdueshme</string>\n    <string name=\"pager_viewer\">Faqe</string>\n    <string name=\"pref_viewer_nav\">Prekni zonat</string>\n    <string name=\"pref_image_scale_type\">Lloji i shkallës</string>\n    <string name=\"scale_type_stretch\">Shtrirje</string>\n    <string name=\"scale_type_fit_height\">Lartësia e përshtatshme</string>\n    <string name=\"scale_type_fit_width\">Gjerësia e përshtatshme</string>\n    <string name=\"scale_type_original_size\">Madhësia origjinale</string>\n    <string name=\"scale_type_smart_fit\">Përshtatje e zgjuar</string>\n    <string name=\"pref_navigate_pan\">Paneli i gjerë i imazheve kur prekni</string>\n    <string name=\"zoom_start_automatic\">Automatik</string>\n    <string name=\"zoom_start_left\">Majtas</string>\n    <string name=\"zoom_start_right\">Djathtas</string>\n    <string name=\"zoom_start_center\">Qendra</string>\n    <string name=\"double_tap_anim_speed_0\">Asnjë animacion</string>\n    <string name=\"double_tap_anim_speed_normal\">Normale</string>\n    <string name=\"double_tap_anim_speed_fast\">Shpejt</string>\n    <string name=\"rotation_type\">Lloji i rrotullimit</string>\n    <string name=\"rotation_free\">I lire</string>\n    <string name=\"rotation_portrait\">Portret</string>\n    <string name=\"rotation_force_landscape\">Peizazh i mbyllur</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"pref_category_reading_mode\">Modaliteti i leximit</string>\n    <string name=\"pref_highest\">Më e larta</string>\n    <string name=\"pref_low\">E ulët</string>\n    <string name=\"pref_category_delete_chapters\">Fshi kapitujt</string>\n    <string name=\"pref_remove_exclude_categories\">Kategoritë e përjashtuara</string>\n    <string name=\"invalid_location\">Vendndodhja e pavlefshme: %s</string>\n    <string name=\"last_read_chapter\">Kapitulli i fundit i lexuar</string>\n    <string name=\"fourth_to_last\">Kapitulli i katërt deri tek i fundit i lexuar</string>\n    <string name=\"pref_category_auto_download\">Shkarkim-automatik</string>\n    <string name=\"pref_download_new\">Shkarkoni kapitujt e rinj</string>\n    <string name=\"download_ahead\">Shkarkoni përpara</string>\n    <string name=\"auto_download_while_reading\">Shkarkim automatik gjatë leximit</string>\n    <string name=\"save_chapter_as_cbz\">Ruaje si arkiv CBZ</string>\n    <string name=\"tracking_guide\">Udhëzues gjurmimi</string>\n    <string name=\"enhanced_services\">Gjurmues të përmirësuara</string>\n    <string name=\"transition_no_next\">Nuk ka kapitull tjetër</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Krijon dosje sipas titullit të elementeve</string>\n    <string name=\"black_background\">E zezë</string>\n    <string name=\"pref_viewer_type\">Modaliteti i parazgjedhur i leximit</string>\n    <string name=\"l_nav\">Në formë L</string>\n    <string name=\"edge_nav\">Skaji</string>\n    <string name=\"nav_zone_next\">Tjetra</string>\n    <string name=\"nav_zone_left\">Majtas</string>\n    <string name=\"nav_zone_right\">Djathtas</string>\n    <string name=\"left_to_right_viewer\">Nga e majta në të djathtë</string>\n    <string name=\"vertical_viewer\">Vertikale</string>\n    <string name=\"scale_type_fit_screen\">Ekran i përshtatshëm</string>\n    <string name=\"pref_landscape_zoom\">Zmadhoni imazhin e peizazhit</string>\n    <string name=\"pref_zoom_start\">Pozicioni fillestar i zmadhimit</string>\n    <string name=\"pref_rotation_type\">Lloji i parazgjedhur i rrotullimit</string>\n    <string name=\"rotation_reverse_portrait\">Portret i kundërt</string>\n    <string name=\"rotation_force_portrait\">Portret i mbyllur</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_always_show_chapter_transition\">Trego gjithmonë kalimin e kapitullit</string>\n    <string name=\"pref_webtoon_side_padding\">Mbushje anësore</string>\n    <string name=\"rotation_landscape\">Peizazh</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"pref_category_reading\">Duke lexuar</string>\n    <string name=\"pref_hide_threshold\">Ndjeshmëria për fshehjen e menysë në lëvizje</string>\n    <string name=\"pref_high\">E lartë</string>\n    <string name=\"pref_lowest\">Më e ulëta</string>\n    <string name=\"pref_remove_after_marked_as_read\">Pasi është shënuar manualisht si e lexuar</string>\n    <string name=\"pref_remove_after_read\">Pas leximit fshi automatikisht</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Lejo fshirjen e kapitujve të shënuar</string>\n    <string name=\"second_to_last\">Kapitulli i dytë deri tek i fundit i lexuar</string>\n    <string name=\"third_to_last\">Kapitulli i tretë deri tek i fundit i lexuar</string>\n    <string name=\"fifth_to_last\">Kapitulli i pestë deri tek i fundit i lexuar</string>\n    <string name=\"pref_download_new_categories_details\">Elementet në kategoritë e përjashtuara nuk do të shkarkohen edhe nëse janë gjithashtu në kategoritë e përfshira.</string>\n    <string name=\"download_ahead_info\">Punon vetëm në hyrjet në bibliotekë dhe nëse kapitulli aktual plus kapitulli tjetër janë shkarkuar tashmë</string>\n    <string name=\"services\">Gjurmuesët</string>\n    <string name=\"split_tall_images_summary\">Përmirëson performancën e lexuesit</string>\n    <string name=\"pref_auto_update_manga_sync\">Përditëso progresin pas leximit</string>\n    <string name=\"tracking_info\">Sinkronizimi i njëanshëm për të përditësuar përparimin e kapitullit në shërbimet e gjurmimit. Konfiguro gjurmimin për elementet individuale nga butoni i tyre i gjurmimit.</string>\n    <string name=\"action_filter_bookmarked\">Faqeshënuar</string>\n    <string name=\"webtoon_viewer\">Webtoon</string>\n    <string name=\"disabled\">I çaktivizuar</string>\n    <string name=\"kindlish_nav\">Kindle-ish</string>\n    <string name=\"enhanced_tracking_info\">Ofron tipare të përmirësuara për burime specifike. Elementet gjurmohen automatikisht kur shtohen në bibliotekën tuaj.</string>\n    <string name=\"action_track\">Pista</string>\n    <string name=\"pref_backup_interval\">Frekuenca rezervë</string>\n    <string name=\"backup_restore_missing_trackers\">I pa identifikuar ne gjurmuesit:</string>\n    <string name=\"restore_duration\">%02d min, %02d sek</string>\n    <string name=\"restore_miui_warning\">Rezervimi/rivendosja mund të mos funksionojë siç duhet nëse Optimizimi MIUI është i çaktivizuar.</string>\n    <string name=\"pref_reset_user_agent_string\">Rivendos vargun e parazgjedhur të agjentit të përdoruesit</string>\n    <string name=\"cache_delete_error\">Ndodhi një gabim gjatë pastrimit</string>\n    <string name=\"privacy_policy\">Politika e privatësisë</string>\n    <string name=\"login_success\">i regjistruar</string>\n    <string name=\"chapter_not_found\">Kapitulli nuk u gjet</string>\n    <string name=\"local_invalid_format\">Format i pavlefshëm i kapitullit</string>\n    <string name=\"unknown_status\">Status i panjohur</string>\n    <string name=\"licensed\">I licencuar</string>\n    <string name=\"manga_removed_library\">U hoq nga biblioteka</string>\n    <string name=\"delete_downloads_for_manga\">Të fshihen kapitujt e shkarkuar?</string>\n    <string name=\"clipboard_copy_error\">Kopjimi në kujtesën e fragmenteve dështoi</string>\n    <string name=\"source_not_installed\">Burimi nuk është i instaluar: %1$s</string>\n    <string name=\"sort_by_upload_date\">Sipas datës së ngarkimit</string>\n    <string name=\"manga_download\">Shkarko</string>\n    <string name=\"unread\">Të palexuara</string>\n    <string name=\"manga_tracking_tab\">Gjurmimi</string>\n    <string name=\"unfinished_list\">Lista e papërfunduar</string>\n    <string name=\"on_hold_list\">Në listën e pritjes</string>\n    <string name=\"track_type\">Lloji</string>\n    <string name=\"error_category_exists\">Një kategori me këtë emër ekziston tashmë!</string>\n    <string name=\"error_no_match\">Nuk u gjet asnjë përputhje</string>\n    <string name=\"dialog_with_checkbox_reset\">Rivendos të gjithë kapitujt për këtë hyrje</string>\n    <string name=\"set_as_cover\">Vendos si kopertinë</string>\n    <string name=\"viewer\">Mënyra e leximit</string>\n    <string name=\"transition_next\">Tjetra:</string>\n    <string name=\"pref_clear_history\">Pastro historinë</string>\n    <string name=\"notification_update_error\">%1$d përditësim(e) dështoi</string>\n    <string name=\"skipped_reason_completed\">U anashkalua sepse seria ka përfunduar</string>\n    <string name=\"file_select_cover\">Zgjidhni imazhin e kopertinës</string>\n    <string name=\"update_check_open\">Hapni në GitHub</string>\n    <string name=\"update_check_confirm\">Shkarko</string>\n    <string name=\"update_check_notification_download_complete\">Prekni për të instaluar përditësimin</string>\n    <string name=\"transition_no_previous\">Nuk ka kapitull të mëparshëm</string>\n    <string name=\"database_clean\">Asgjë për të pastruar</string>\n    <string name=\"notification_incognito_text\">Çaktivizo modalitetin e fshehtë</string>\n    <string name=\"logout\">Dil</string>\n    <string name=\"no_results_found\">Nuk u gjet asnjë rezultat</string>\n    <string name=\"unknown_title\">Titulli i panjohur</string>\n    <string name=\"add_tracking\">Shto gjurmimin</string>\n    <string name=\"migration_dialog_what_to_include\">Zgjidhni të dhënat për të përfshirë</string>\n    <string name=\"download_queue_error\">Kapitujt nuk mund të shkarkoheshin. Mund të provoni përsëri në seksionin e shkarkimeve</string>\n    <string name=\"notification_size_warning\">Përditësimet e mëdha dëmtojnë burimet dhe mund të çojnë në përditësime më të ngadalta dhe gjithashtu rritje të përdorimit të baterisë. Trokit për të mësuar më shumë.</string>\n    <string name=\"clear_database_completed\">Elementet u fshinë</string>\n    <string name=\"pref_disable_battery_optimization\">Çaktivizo optimizimin e baterisë</string>\n    <string name=\"email\">Adresa e emailit</string>\n    <string name=\"login_title\">Hyni në %1$s</string>\n    <string name=\"password\">Fjalëkalimi</string>\n    <string name=\"login\">Hyrje</string>\n    <string name=\"username\">Emri i përdoruesit</string>\n    <string name=\"latest\">Të fundit</string>\n    <string name=\"manga_info_expand\">Më shumë</string>\n    <string name=\"chapter_settings\">Cilësimet e kapitullit</string>\n    <string name=\"crash_screen_title\">Ups!</string>\n    <string name=\"update_check_notification_download_error\">Gabim shkarkimi</string>\n    <string name=\"pref_invalidate_download_cache\">Anuloni indeksin e shkarkimeve</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Pastro memorjen e kapitullit në mbylljen e aplikacionit</string>\n    <string name=\"pref_clear_database\">Pastro bazën e të dhënave</string>\n    <string name=\"clear_database_confirmation\">A je i sigurt? Kapitujt e lexuar dhe progresi i elementeve që nuk janë në bibliotekë do të humbasin</string>\n    <string name=\"no_pinned_sources\">Nuk ke burime të gozhduara</string>\n    <string name=\"local_filter_order_by\">Urdhër nga</string>\n    <string name=\"date\">Data</string>\n    <string name=\"ongoing\">Në vazhdim</string>\n    <string name=\"unknown\">E panjohur</string>\n    <string name=\"unknown_author\">Autor i panjohur</string>\n    <string name=\"cancelled\">Anuluar</string>\n    <string name=\"on_hiatus\">Në pauzë</string>\n    <string name=\"publishing_finished\">Botim i përfunduar</string>\n    <string name=\"manga_added_library\">Shtuar në bibliotekë</string>\n    <string name=\"manga_info_collapse\">Më pak</string>\n    <string name=\"description_placeholder\">Pa përshkrim</string>\n    <string name=\"show_chapter_number\">Numri i kapitullit</string>\n    <string name=\"status\">Statusi</string>\n    <string name=\"source_unsupported\">Burimi nuk mbështetet</string>\n    <string name=\"myanimelist_relogin\">Ju lutemi identifikohuni përsëri në MAL</string>\n    <string name=\"share_page_info\">%1$s: %2$s, faqe %3$d</string>\n    <string name=\"chapter_progress\">Faqe: %1$d</string>\n    <string name=\"no_next_chapter\">Kapitulli tjetër nuk u gjet</string>\n    <string name=\"decode_image_error\">Imazhi nuk mund të ngarkohej</string>\n    <string name=\"confirm_set_image_as_cover\">Të përdoret ky imazh si kopertinë?</string>\n    <string name=\"transition_finished\">Përfunduar:</string>\n    <string name=\"transition_current\">Aktuale:</string>\n    <string name=\"transition_previous\">E mëparshme:</string>\n    <string name=\"cant_open_last_read_chapter\">I paafte për të hapur kapitullin e lexuar së fundi</string>\n    <string name=\"clear_history_confirmation\">A je i sigurt? E gjithë historia do të humbasë.</string>\n    <string name=\"empty_screen\">Epo, kjo është e sikletshme</string>\n    <string name=\"not_installed\">Nuk është instaluar</string>\n    <string name=\"copy\">Kopjo</string>\n    <string name=\"notification_chapters_single_and_more\">Kapitulli %1$s dhe %2$d më shumë</string>\n    <string name=\"notification_chapters_multiple\">Kapitujt %1$s</string>\n    <string name=\"notification_chapters_single\">Kapitulli %1$s</string>\n    <string name=\"library_errors_help\">Për ndihmë se si të rregulloni gabimet e përditësimit të bibliotekës, shihni %1$s</string>\n    <string name=\"pref_create_backup\">Krijo kopje rezervë</string>\n    <string name=\"pref_create_backup_summ\">Mund të përdoret për të rivendosur bibliotekën aktuale</string>\n    <string name=\"pref_restore_backup\">Rivendos kopjen rezervë</string>\n    <string name=\"backup_created\">U krijua një kopje rezervë</string>\n    <string name=\"backup_restore_missing_sources\">Burimet që mungojnë:</string>\n    <string name=\"restore_completed\">Rivendosja përfundoi</string>\n    <string name=\"backup_in_progress\">Rezervimi është tashmë në proces</string>\n    <string name=\"backup_choice\">Çfarë dëshironi të bëni rezervë?</string>\n    <string name=\"creating_backup\">Duke krijuar rezervë</string>\n    <string name=\"creating_backup_error\">Rezervimi dështoi</string>\n    <string name=\"missing_storage_permission\">Lejet e ruajtjes nuk janë dhënë</string>\n    <string name=\"empty_backup_error\">Nuk ka element në bibliotekë për të rezervuar</string>\n    <string name=\"restore_in_progress\">Rivendosja është tashmë në proces</string>\n    <string name=\"restoring_backup\">Rivendosja e rezervës</string>\n    <string name=\"restoring_backup_error\">Rivendosja e rezervimit dështoi</string>\n    <string name=\"restoring_backup_canceled\">Rivendosja u anulua</string>\n    <string name=\"backup_info\">Ju duhet të mbani kopje rezervë edhe në vende të tjera.</string>\n    <string name=\"label_network\">Rrjeti</string>\n    <string name=\"pref_clear_cookies\">Pastro cookie-t</string>\n    <string name=\"pref_dns_over_https\">DNS mbi HTTPS (DoH)</string>\n    <string name=\"error_user_agent_string_blank\">Vargu i agjentit të përdoruesit nuk mund të jetë bosh</string>\n    <string name=\"error_user_agent_string_invalid\">Varg i pavlefshëm i agjentit të përdoruesit</string>\n    <string name=\"requires_app_restart\">Kërkon rinisjen e aplikacionit për të hyrë në fuqi</string>\n    <string name=\"cookies_cleared\">Cookie-t u pastruan</string>\n    <string name=\"label_data\">Të dhënat</string>\n    <string name=\"used_cache\">Përdorur: %1$s</string>\n    <string name=\"cache_deleted\">Memoria e fshehtë u pastrua. %1$d skedarë janë fshirë</string>\n    <string name=\"clear_database_source_item_count\">%1$d element jashtë bibliotekës në bazën e të dhënave</string>\n    <string name=\"pref_clear_webview_data\">Pastro të dhënat e WebView</string>\n    <string name=\"pref_refresh_library_covers\">Rifresko kopertinat e bibliotekës</string>\n    <string name=\"pref_reset_viewer_flags\">Rivendos cilësimet e lexuesit për seri</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Rivendos modalitetin e leximit dhe orientimin e të gjitha serive</string>\n    <string name=\"pref_reset_viewer_flags_error\">Cilësimet e lexuesit nuk mund të rivendoseshin</string>\n    <string name=\"pref_dump_crash_logs\">Hidh regjistrat e aksidenteve</string>\n    <string name=\"label_background_activity\">Aktiviteti në sfond</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Ndihmon me përditësimet dhe kopjet rezervë të bibliotekës në sfond</string>\n    <string name=\"pref_dump_crash_logs_summary\">Ruan regjistrat e gabimeve në një skedar për t\\'i ndarë me zhvilluesit</string>\n    <string name=\"battery_optimization_disabled\">Optimizimi i baterisë është tashmë i çaktivizuar</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Cilësimet e pajisjes nuk mund të hapeshin</string>\n    <string name=\"check_for_updates\">Kontrolloni për përditësime</string>\n    <string name=\"updated_version\">Përditësuar në v%1$s</string>\n    <string name=\"pref_enable_acra\">Dërgoni raporte përplasjesh</string>\n    <string name=\"pref_acra_summary\">Ndihmon në rregullimin e çdo defekti. Nuk do të dërgohen të dhëna sensitive</string>\n    <string name=\"fdroid_warning\">Ndërtimet e F-Droid nuk mbështeten zyrtarisht.\n\\nTrokit për të mësuar më shumë.</string>\n    <string name=\"label_downloaded_only\">Vetëm të shkarkuarat</string>\n    <string name=\"pref_incognito_mode\">Modaliteti i fshehtë</string>\n    <string name=\"pref_incognito_mode_summary\">Ndalon leximin e historisë</string>\n    <string name=\"downloaded_only_summary\">Filtro të gjitha elementet në bibliotekën tuaj</string>\n    <string name=\"logout_title\">Dil nga %1$s?</string>\n    <string name=\"logout_success\">Tani keni dalë nga llogaria</string>\n    <string name=\"unknown_error\">Gabim i panjohur</string>\n    <string name=\"updating_category\">Kategoria po përditësohet</string>\n    <string name=\"manga_from_library\">Nga biblioteka</string>\n    <string name=\"downloaded_chapters\">Kapitujt e shkarkuar</string>\n    <string name=\"tabs_header\">Skedat</string>\n    <string name=\"no_more_results\">Nuk ka më rezultate</string>\n    <string name=\"local_source\">Burimi lokal</string>\n    <string name=\"other_source\">Tjetër</string>\n    <string name=\"pinned_sources\">Fiksuar</string>\n    <string name=\"action_global_search_hint\">Kërkimi global…</string>\n    <string name=\"action_global_search_query\">Kërkoni për \\\"%1$s\\\" globalisht</string>\n    <string name=\"popular\">Popullor</string>\n    <string name=\"browse\">Shfletoni</string>\n    <string name=\"local_source_help_guide\">Udhëzues burimi lokal</string>\n    <string name=\"add_to_library\">Shto në bibliotekë</string>\n    <string name=\"in_library\">Në bibliotekë</string>\n    <string name=\"copied_to_clipboard\">Kopjuar në kujtesën e fragmenteve:\n\\n %1$s</string>\n    <string name=\"snack_add_to_library\">Të shtohet në bibliotekë?</string>\n    <string name=\"display_mode_chapter\">Kapitulli %1$s</string>\n    <string name=\"chapter_downloading_progress\">Po shkarkohet (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Gabim</string>\n    <string name=\"chapter_paused\">Ndaloi</string>\n    <string name=\"show_title\">Titulli i burimit</string>\n    <string name=\"sort_by_source\">Sipas burimit</string>\n    <string name=\"sort_by_number\">Sipas numrit të kapitullit</string>\n    <string name=\"download_unread\">Të palexuara</string>\n    <string name=\"custom_cover\">Kopertine e personalizuar</string>\n    <string name=\"manga_cover\">Kopertina</string>\n    <string name=\"cover_saved\">Kopertina u ruajt</string>\n    <string name=\"error_sharing_cover\">Gabim në ndarjen e kopertinës</string>\n    <string name=\"confirm_delete_chapters\">Jeni i sigurt që dëshironi të fshini kapitujt e zgjedhur?</string>\n    <string name=\"also_set_chapter_settings_for_library\">Aplikoni gjithashtu për të gjitha elementet në bibliotekën time</string>\n    <string name=\"set_chapter_settings_as_default\">Vendose si parësore</string>\n    <string name=\"no_chapters_error\">Nuk u gjet asnjë kapitull</string>\n    <string name=\"are_you_sure\">A je i sigurt?</string>\n    <string name=\"reading\">Leximi</string>\n    <string name=\"completed\">E përfunduar</string>\n    <string name=\"on_hold\">Ne pritje</string>\n    <string name=\"paused\">Në pauzë</string>\n    <string name=\"plan_to_read\">Planifikoni të lexoni</string>\n    <string name=\"repeating\">Rileximi</string>\n    <string name=\"dropped\">Hodhi</string>\n    <string name=\"reading_list\">Lista e leximit</string>\n    <string name=\"wish_list\">Lista e dëshirave</string>\n    <string name=\"complete_list\">Lista e plotë</string>\n    <string name=\"score\">Rezultati</string>\n    <string name=\"title\">Titulli</string>\n    <string name=\"track_started_reading_date\">Data e fillimit</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_finished_reading_date\">Data e mbarimit</string>\n    <string name=\"track_remove_date_conf_title\">Hiqni datën?</string>\n    <string name=\"track_remove_finish_date_conf_text\">Kjo do të heqë datën e përfundimit të zgjedhur më parë nga %s</string>\n    <string name=\"snack_categories_deleted\">Kategoritë u fshinë</string>\n    <string name=\"picture_saved\">Fotografia u ruajt</string>\n    <string name=\"error_saving_picture\">Gabim gjatë ruajtjes së fotografisë</string>\n    <string name=\"custom_filter\">Filtri i personalizuar</string>\n    <string name=\"cover_updated\">Kopertina u përditësua</string>\n    <string name=\"pref_category_for_this_series\">Për këtë seri</string>\n    <string name=\"transition_pages_loading\">Po ngarkon faqet…</string>\n    <string name=\"transition_pages_error\">Ngarkimi i faqeve dështoi: %1$s</string>\n    <string name=\"page_list_empty_error\">Nuk u gjet asnjë faqe</string>\n    <string name=\"loader_not_implemented_error\">Burimi nuk u gjet</string>\n    <string name=\"update_already_running\">Një përditësim po funksionon tashmë</string>\n    <string name=\"updating_library\">Biblioteka po përditësohet</string>\n    <string name=\"updates_last_update_info\">Biblioteka e përditësuar së fundi: %s</string>\n    <string name=\"updates_last_update_info_just_now\">Vetëm tani</string>\n    <string name=\"recent_manga_time\">Ch. %1$s - %2$s</string>\n    <string name=\"clear_history_completed\">Historia u fshi</string>\n    <string name=\"source_empty_screen\">Nuk u gjet asnjë burim</string>\n    <string name=\"source_filter_empty_screen\">Nuk u gjet asnjë burim i instaluar</string>\n    <string name=\"migration_help_guide\">Udhëzuesi i migrimit të burimit</string>\n    <string name=\"migration_selection_prompt\">Zgjidhni një burim për të migruar</string>\n    <string name=\"migrate\">Migroni</string>\n    <string name=\"crash_screen_description\">%s hasi në një gabim të papritur. Ne ju sugjerojmë që të fotografoni këtë mesazh, të hidhni regjistrat e aksidenteve dhe më pas ta shpërndani në kanalin tonë të mbështetjes në Discord.</string>\n    <string name=\"crash_screen_restart_application\">Rinisni aplikacionin</string>\n    <string name=\"download_insufficient_space\">Kapitujt nuk mund të shkarkoheshin për shkak të hapësirës së ulët të ruajtjes</string>\n    <string name=\"download_queue_size_warning\">Paralajmërim: shkarkimet e mëdha me shumicë mund të çojnë në ngadalësimin e burimeve dhe/ose bllokimin e Mihon. Trokit për të mësuar më shumë.</string>\n    <string name=\"notification_new_chapters\">U gjetën kapituj të rinj</string>\n    <string name=\"learn_more\">Trokit për të mësuar më shumë</string>\n    <string name=\"notification_cover_update_failed\">Përditësimi i kopertinës dështoi</string>\n    <string name=\"skipped_reason_not_caught_up\">U anashkalua sepse ka kapituj të palexuar</string>\n    <string name=\"skipped_reason_not_started\">U anashkalua sepse nuk lexohet asnjë kapitull</string>\n    <string name=\"skipped_reason_not_always_update\">U anashkalua sepse seritë nuk kërkojnë përditësime</string>\n    <string name=\"file_select_backup\">Zgjidhni skedarin rezervë</string>\n    <string name=\"update_check_no_new_updates\">Nuk disponohen përditësime të reja</string>\n    <string name=\"update_check_notification_download_in_progress\">Po shkarkohet…</string>\n    <string name=\"update_check_notification_update_available\">Versioni i ri në dispozicion!</string>\n    <string name=\"chapter_settings_updated\">Cilësimet e kapitullit të parazgjedhur të përditësuara</string>\n    <string name=\"theme_midnightdusk\">Perëndim Mesnate</string>\n    <string name=\"pref_restore_backup_summ\">Rivendosni bibliotekën nga skedari rezervë</string>\n    <string name=\"backup_restore_content_full\">Të dhënat nga skedari rezervë do të rikthehen.\n\\n\n\\n Do t\\'ju duhet të instaloni çdo shtesë që mungon dhe më pas të identifikoheni në shërbimet e gjurmimit për t\\'i përdorur ato.</string>\n    <string name=\"invalid_backup_file\">Skedar rezervë i pavlefshëm</string>\n    <string name=\"invalid_backup_file_missing_manga\">Rezervimi nuk përmban asnjë element në bibliotekë.</string>\n    <string name=\"pref_user_agent_string\">Varg i parazgjedhur i agjentit të përdoruesit</string>\n    <string name=\"pref_clear_chapter_cache\">Pastro memorien e kapitullit</string>\n    <string name=\"pref_clear_database_summary\">Fshi historikun për elementet që nuk janë ruajtur në bibliotekën tënde</string>\n    <string name=\"webview_data_deleted\">Të dhënat e WebView u pastruan</string>\n    <string name=\"pref_reset_viewer_flags_success\">Të gjitha cilësimet e lexuesit rivendosen</string>\n    <string name=\"last_used_source\">Përdorur për herë të fundit</string>\n    <string name=\"remove_from_library\">Hiqe nga biblioteka</string>\n    <string name=\"error_saving_cover\">Gabim gjatë ruajtjes së kopertinës</string>\n    <string name=\"notification_first_add_to_library\">Ju lutemi shtoni hyrjen në bibliotekën tuaj përpara se ta bëni këtë</string>\n    <string name=\"confirm_set_chapter_settings\">Jeni i sigurt që dëshironi t\\'i ruani këto cilësime si parazgjedhje?</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Kjo do të heqë datën e leximit të këtij kapitulli. A je i sigurt?</string>\n    <string name=\"track_remove_start_date_conf_text\">Kjo do të heqë datën e fillimit të zgjedhur më parë nga %s</string>\n    <string name=\"update_check_eol\">Ky version Android nuk mbështetet më</string>\n    <string name=\"website\">Faqja e internetit</string>\n    <string name=\"version\">Version</string>\n    <string name=\"whats_new\">Cfare ka te re</string>\n    <string name=\"help_translate\">Ndihmoni në përkthimin</string>\n    <string name=\"licenses\">Licencat me burim të hapur</string>\n    <string name=\"about_dont_kill_my_app\">Disa prodhues kanë kufizime shtesë të aplikacioneve që shkatërrojnë shërbimet e sfondit. Kjo faqe interneti ka më shumë informacion se si ta rregulloni atë.</string>\n    <string name=\"pref_verbose_logging\">Prerje me fjalë</string>\n    <string name=\"pref_tablet_ui_mode\">Ndërfaqja e përdoruesve të tabletit</string>\n    <string name=\"pref_verbose_logging_summary\">Printoni regjistrat me fjalë në regjistrin e sistemit (ul performancën e aplikacionit)</string>\n    <string name=\"file_picker_error\">Nuk u gjet asnjë aplikacion për përzgjedhjen e skedarëve</string>\n    <string name=\"pref_library_update_show_tab_badge\">Trego numrin e të pa lezuarave ne ikonën e Përditësimeve</string>\n    <string name=\"label_overview_section\">Pasqyrë e Përgjithshme</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"label_stats\">Statistikë</string>\n    <string name=\"label_started\">Filluar</string>\n    <string name=\"label_local\">Lokale</string>\n    <string name=\"label_downloaded\">Shkarkuar</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Detyro applikacionin te rikontrolloj kapitujtë e shkarkuar</string>\n    <string name=\"label_total_chapters\">Total</string>\n    <string name=\"label_mean_score\">Pikët mesatare</string>\n    <string name=\"label_used\">I përdorur</string>\n    <string name=\"label_read_chapters\">Lexo</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"label_tracker_section\">Gjurmuesit</string>\n    <string name=\"label_tracked_titles\">Elementet e gjurmuara</string>\n    <string name=\"action_not_now\">Jo tani</string>\n    <string name=\"label_completed_titles\">Elementet të përfunduara</string>\n    <string name=\"label_read_duration\">Koha e të lezuarit</string>\n    <string name=\"label_titles_section\">Elementet</string>\n    <string name=\"label_titles_in_global_update\">Ne përditësimin global</string>\n    <string name=\"hour_short\">%do</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"information_no_manga_category\">Kategorija është bosh</string>\n    <string name=\"enhanced_services_not_installed\">Në dispozicion, por burimi nuk është i instaluar: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Kapërceni kapitujt e kopjuar</string>\n    <string name=\"pref_hide_in_library_items\">Fshih elementet tashmë në bibliotekë</string>\n    <string name=\"action_copy_to_clipboard\">Kopjo në kujtesën e fragmenteve</string>\n    <string name=\"confirm_add_duplicate_manga\">Ju keni një hyrje në librarni me të njëjtin emër.\n\\n\n\\nDëshironi të vazhdoni?</string>\n    <string name=\"action_update_category\">Përditëso kategorinë</string>\n    <string name=\"track_error\">%1$s gabim: %2$s</string>\n    <string name=\"information_required_plain\">*kërkohet</string>\n    <string name=\"copied_to_clipboard_plain\">U kopjua në clipboard</string>\n    <string name=\"pref_storage_location\">Pika e magazinimit</string>\n    <string name=\"delete_downloaded\">Fshi shkarkimet</string>\n    <string name=\"action_sort_tracker_score\">Piket e gjurmimit</string>\n    <string name=\"track_delete_title\">Hiq %s gjurmimin?</string>\n    <string name=\"track_delete_remote_text\">Hiqe gjithashtu nga %s</string>\n    <string name=\"track_delete_text\">Kjo do te heq gjurmimn lokal.</string>\n    <string name=\"track_activity_name\">Gjurmuesi i identifikimit</string>\n    <string name=\"pref_relative_format\">Koha relative</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" në vend të \\\"%2$s\\\"</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Након %1$s минут</item>\n        <item quantity=\"few\">Након %1$s минута</item>\n        <item quantity=\"other\">Након %1$s минута</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d ново поглавље</item>\n        <item quantity=\"few\">%1$d нова поглавља</item>\n        <item quantity=\"other\">%1$d нових поглавља</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">За %d наслов</item>\n        <item quantity=\"few\">За %d наслова</item>\n        <item quantity=\"other\">За %d наслова</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Доступно је %d ново ажурирање додатака</item>\n        <item quantity=\"few\">Доступна су %d нова ажурирања додатака</item>\n        <item quantity=\"other\">Доступно је %d нових ажурирања додатака</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d категорија</item>\n        <item quantity=\"few\">%d категорије</item>\n        <item quantity=\"other\">%d категорија</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Пре %1$d дан</item>\n        <item quantity=\"few\">Пре %1$d дана</item>\n        <item quantity=\"other\">Пре %1$d дана</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Прескаче се %d поглавље, или не постоји у извору или је филтером издвојено</item>\n        <item quantity=\"few\">Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено</item>\n        <item quantity=\"other\">Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Завршено у %1$s са %2$s грешком</item>\n        <item quantity=\"few\">Завршено у %1$s са %2$s грешке</item>\n        <item quantity=\"other\">Завршено у %1$s са %2$s грешака</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d пратилац</item>\n        <item quantity=\"few\">%d пратиоца</item>\n        <item quantity=\"other\">%d пратилаца</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s поглавље</item>\n        <item quantity=\"few\">%1$s поглавља</item>\n        <item quantity=\"other\">%1$s поглавља</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Поглавља %1$s и још једно</item>\n        <item quantity=\"few\">Поглавља %1$s и још %2$d</item>\n        <item quantity=\"other\">Поглавља %1$s и још %2$d</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s преостао</item>\n        <item quantity=\"few\">%1$s преостала</item>\n        <item quantity=\"other\">%1$s преосталих</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Следеће непрочитано поглавље</item>\n        <item quantity=\"few\">Следећа %d непрочитана поглавља</item>\n        <item quantity=\"other\">Следећих %d непрочитаних поглавља</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Следеће поглавље</item>\n        <item quantity=\"few\">Следећа %d поглавља</item>\n        <item quantity=\"other\">Следећих %d поглавља</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Недостаје %1$s поглавље</item>\n        <item quantity=\"few\">Недостају %1$s поглавља</item>\n        <item quantity=\"other\">Недостаје %1$s поглавља</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 дан</item>\n        <item quantity=\"few\">%d дана</item>\n        <item quantity=\"other\">%d дана</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d репозиторија</item>\n        <item quantity=\"few\">%d репозиторија</item>\n        <item quantity=\"other\">%d репозиторија</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">За %1$d дан</item>\n        <item quantity=\"few\">За %1$d дана</item>\n        <item quantity=\"other\">За %1$d дана</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Име</string>\n    <string name=\"categories\">Категорије</string>\n    <string name=\"manga\">Наслови колекције</string>\n    <string name=\"chapters\">Поглавља</string>\n    <string name=\"track\">Праћење</string>\n    <string name=\"history\">Историја</string>\n    <string name=\"label_settings\">Подешавања</string>\n    <string name=\"label_download_queue\">Редослед преузимања</string>\n    <string name=\"label_library\">Колекција</string>\n    <string name=\"label_recent_manga\">Историја</string>\n    <string name=\"label_recent_updates\">Ново</string>\n    <string name=\"label_backup\">Резервна копија и враћање</string>\n    <string name=\"label_migration\">Миграција</string>\n    <string name=\"label_extensions\">Додаци</string>\n    <string name=\"label_extension_info\">Информације о додатку</string>\n    <string name=\"label_data_storage\">Складиштење и подаци</string>\n    <string name=\"action_settings\">Подешавања</string>\n    <string name=\"action_filter\">Филтер</string>\n    <string name=\"action_filter_bookmarked\">Забележено</string>\n    <string name=\"action_filter_unread\">Непрочитано</string>\n    <string name=\"action_filter_empty\">Уклони филтер</string>\n    <string name=\"action_sort_alpha\">Алфабетно</string>\n    <string name=\"action_sort_total\">Укупно поглавља</string>\n    <string name=\"action_sort_last_read\">Последње читано</string>\n    <string name=\"action_search\">Претражи</string>\n    <string name=\"action_global_search\">Претражи глобално</string>\n    <string name=\"action_select_all\">Изабери све</string>\n    <string name=\"action_mark_as_read\">Означи као прочитано</string>\n    <string name=\"action_mark_as_unread\">Означи као непрочитано</string>\n    <string name=\"action_mark_previous_as_read\">Означи претходно као прочитано</string>\n    <string name=\"action_download\">Преузми</string>\n    <string name=\"action_bookmark\">Забележи поглавље</string>\n    <string name=\"action_remove_bookmark\">Уклони белешку поглавља</string>\n    <string name=\"action_delete\">Обриши</string>\n    <string name=\"action_update_library\">Ажурирај колекцију</string>\n    <string name=\"action_edit\">Уреди</string>\n    <string name=\"action_add\">Додај</string>\n    <string name=\"action_add_category\">Додај категорију</string>\n    <string name=\"action_edit_categories\">Уреди категорије</string>\n    <string name=\"action_rename_category\">Преименуј категорију</string>\n    <string name=\"action_move_category\">Изабери категорије</string>\n    <string name=\"action_edit_cover\">Промени омот</string>\n    <string name=\"action_pause\">Паузирај</string>\n    <string name=\"action_previous_chapter\">Претходно поглавље</string>\n    <string name=\"action_next_chapter\">Наредно поглавље</string>\n    <string name=\"action_retry\">Покушај поново</string>\n    <string name=\"action_remove\">Уклони</string>\n    <string name=\"action_resume\">Настави</string>\n    <string name=\"action_open_in_browser\">Отвори у претраживачу</string>\n    <string name=\"action_display_mode\">Режим приказа</string>\n    <string name=\"action_display\">Екран</string>\n    <string name=\"action_display_grid\">Збијена мрежа</string>\n    <string name=\"action_display_list\">Листа</string>\n    <string name=\"action_display_download_badge\">Преузета поглавља</string>\n    <string name=\"action_cancel\">Откажи</string>\n    <string name=\"action_sort\">Сортирај</string>\n    <string name=\"action_install\">Инсталирај</string>\n    <string name=\"action_share\">Подели</string>\n    <string name=\"action_save\">Сачувај</string>\n    <string name=\"action_reset\">Ресетуј</string>\n    <string name=\"action_undo\">Врати назад</string>\n    <string name=\"action_open_log\">Отвори записник</string>\n    <string name=\"action_restore\">Врати</string>\n    <string name=\"loading\">Учитавање…</string>\n    <string name=\"app_not_available\">Апликација није доступна</string>\n    <string name=\"pref_category_general\">Опште</string>\n    <string name=\"pref_category_reader\">Читач</string>\n    <string name=\"pref_category_downloads\">Преузимања</string>\n    <string name=\"pref_category_tracking\">Праћење</string>\n    <string name=\"pref_category_advanced\">Напредно</string>\n    <string name=\"pref_category_about\">O апликацији</string>\n    <string name=\"pref_library_columns\">Величина мреже</string>\n    <string name=\"portrait\">Усправно</string>\n    <string name=\"landscape\">Хоризонтално</string>\n    <string name=\"pref_library_update_interval\">Аутоматска ажурирања</string>\n    <string name=\"update_never\">Искључено</string>\n    <string name=\"update_6hour\">Шесточасовно</string>\n    <string name=\"update_12hour\">Дванаесточасовно</string>\n    <string name=\"update_24hour\">Дневно</string>\n    <string name=\"update_48hour\">Свака 2 дана</string>\n    <string name=\"update_weekly\">Недељно</string>\n    <string name=\"all\">Све</string>\n    <string name=\"pref_library_update_restriction\">Ограничења уређаја за аутоматска ажурирања</string>\n    <string name=\"charging\">Пуњење</string>\n    <string name=\"pref_update_only_non_completed\">Прескочи уносе са статусом \\\"Завршено\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Ажурирај пратиоца након читања</string>\n    <string name=\"default_category\">Подразумевана категорија</string>\n    <string name=\"default_category_summary\">Увек питај</string>\n    <string name=\"ext_update\">Ажурирај</string>\n    <string name=\"ext_install\">Инсталирај</string>\n    <string name=\"ext_pending\">На чекању</string>\n    <string name=\"ext_downloading\">Преузима се</string>\n    <string name=\"ext_installing\">Инсталира се</string>\n    <string name=\"ext_installed\">Инсталирано</string>\n    <string name=\"ext_trust\">Веруј</string>\n    <string name=\"ext_untrusted\">Неповерљиво</string>\n    <string name=\"ext_uninstall\">Обриши</string>\n    <string name=\"untrusted_extension\">Неповерљив додатак</string>\n    <string name=\"untrusted_extension_message\">Овај додатак је потписан са непоузданим сертификатом и није активиран.\n\\n\n\\nЗлонамерни додатак може прочитати све податке за пријаву или извршити произвољни код.\n\\n\n\\nВерујући овом сертификату прихватате ове ризике.</string>\n    <string name=\"pref_fullscreen\">Цео екран</string>\n    <string name=\"pref_page_transitions\">Анимације при промени странице</string>\n    <string name=\"pref_double_tap_anim_speed\">Брзина анимације двоклика</string>\n    <string name=\"pref_show_page_number\">Прикажи број странице</string>\n    <string name=\"pref_crop_borders\">Исеци крајеве</string>\n    <string name=\"pref_custom_brightness\">Подесиво осветљење</string>\n    <string name=\"pref_custom_color_filter\">Подесиви филтер боја</string>\n    <string name=\"pref_keep_screen_on\">Остави укључен екран</string>\n    <string name=\"pref_reader_navigation\">Навигација</string>\n    <string name=\"pref_read_with_volume_keys\">Дугмићима за звук</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Обрни дугмиће за звук</string>\n    <string name=\"pref_reader_theme\">Боја позадине</string>\n    <string name=\"white_background\">Бела</string>\n    <string name=\"black_background\">Црна</string>\n    <string name=\"pref_viewer_type\">Подразумевани начин читања</string>\n    <string name=\"left_to_right_viewer\">Страница (слева надесно)</string>\n    <string name=\"right_to_left_viewer\">Страница (сдесна налево)</string>\n    <string name=\"vertical_viewer\">Страница (вертикално)</string>\n    <string name=\"webtoon_viewer\">Дуги стрип</string>\n    <string name=\"pager_viewer\">Странично</string>\n    <string name=\"pref_image_scale_type\">Тип скалирања</string>\n    <string name=\"scale_type_fit_screen\">Попуни екран</string>\n    <string name=\"scale_type_stretch\">Развуци</string>\n    <string name=\"scale_type_fit_width\">Попуни ширину</string>\n    <string name=\"scale_type_fit_height\">Попуни висину</string>\n    <string name=\"scale_type_original_size\">Оригинална величина</string>\n    <string name=\"scale_type_smart_fit\">Паметно прилагођавање</string>\n    <string name=\"pref_zoom_start\">Почетни положај зумирања</string>\n    <string name=\"zoom_start_automatic\">Аутоматски</string>\n    <string name=\"zoom_start_left\">Лево</string>\n    <string name=\"zoom_start_right\">Десно</string>\n    <string name=\"zoom_start_center\">Средина</string>\n    <string name=\"double_tap_anim_speed_0\">Без анимације</string>\n    <string name=\"double_tap_anim_speed_normal\">Нормална</string>\n    <string name=\"double_tap_anim_speed_fast\">Брзa</string>\n    <string name=\"pref_rotation_type\">Подразумевана оријентација</string>\n    <string name=\"rotation_free\">Слободно</string>\n    <string name=\"rotation_force_portrait\">Усправно закључано</string>\n    <string name=\"rotation_force_landscape\">Положено закључано</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Када су означена као прочитана</string>\n    <string name=\"pref_remove_after_read\">Аутоматски обриши након читања</string>\n    <string name=\"disabled\">Онемогућено</string>\n    <string name=\"last_read_chapter\">Последње прочитано поглавље</string>\n    <string name=\"second_to_last\">Претпоследње прочитано поглавље</string>\n    <string name=\"third_to_last\">Претпретпоследње прочитано поглавље</string>\n    <string name=\"fourth_to_last\">Четири пре прочитаног поглавља</string>\n    <string name=\"fifth_to_last\">Пет пре прочитаног поглавља</string>\n    <string name=\"pref_download_new\">Преузми нова поглавља</string>\n    <string name=\"services\">Сервиси праћења</string>\n    <string name=\"pref_create_backup\">Направи резервну копију</string>\n    <string name=\"pref_create_backup_summ\">Може се користити за враћање на тренутно стање колекције</string>\n    <string name=\"pref_restore_backup\">Врати се на резервну копију</string>\n    <string name=\"pref_restore_backup_summ\">Врати се на колекцију из резервне копије</string>\n    <string name=\"pref_backup_interval\">Учесталост прављења резервних копија</string>\n    <string name=\"backup_created\">Направљена је резервна копија</string>\n    <string name=\"restore_completed\">Враћање је завршено</string>\n    <string name=\"backup_choice\">Шта све желите да буде у резервној копији?</string>\n    <string name=\"restoring_backup\">Враћа се на резервну копију</string>\n    <string name=\"creating_backup\">Прави се резервна копија</string>\n    <string name=\"pref_clear_chapter_cache\">Испразни кеш меморију поглавља</string>\n    <string name=\"used_cache\">Искоришћено: %1$s</string>\n    <string name=\"cache_deleted\">Кеш је испражњен. Уклоњених фајлова: %1$d</string>\n    <string name=\"cache_delete_error\">Дошло је до грешке приликом брисања</string>\n    <string name=\"pref_clear_cookies\">Избриши колачиће</string>\n    <string name=\"cookies_cleared\">Колачићи су избрисани</string>\n    <string name=\"pref_clear_database\">Избриши базу података</string>\n    <string name=\"pref_clear_database_summary\">Обриши историју за наслове који нису сачувани у твојој колекцији</string>\n    <string name=\"clear_database_confirmation\">Да ли сте сигурни? Изгубићете прочитана поглавља и статус наслова који нису у колекцији</string>\n    <string name=\"clear_database_completed\">Уноси избрисани</string>\n    <string name=\"version\">Верзија</string>\n    <string name=\"pref_enable_acra\">Пошаљи извештаје грешака</string>\n    <string name=\"pref_acra_summary\">Помози у поправљању кварова. Ниједан осетљив податак неће бити послат</string>\n    <string name=\"login_title\">Пријави се у %1$s</string>\n    <string name=\"username\">Корисничко име</string>\n    <string name=\"password\">Лозинка</string>\n    <string name=\"login\">Пријави се</string>\n    <string name=\"login_success\">Пријављени сте</string>\n    <string name=\"unknown_error\">Непозната грешка</string>\n    <string name=\"updating_category\">Ажурирање категорије</string>\n    <string name=\"no_more_results\">Нема више резултата</string>\n    <string name=\"local_source\">Локални извор</string>\n    <string name=\"other_source\">Остало</string>\n    <string name=\"action_global_search_hint\">Глобално претраживање…</string>\n    <string name=\"latest\">Најновије</string>\n    <string name=\"browse\">Претражи</string>\n    <string name=\"ongoing\">У току</string>\n    <string name=\"unknown\">Непознато</string>\n    <string name=\"licensed\">Лиценсирано</string>\n    <string name=\"remove_from_library\">Обриши из колекције</string>\n    <string name=\"manga_added_library\">Додано у колекцији</string>\n    <string name=\"manga_removed_library\">Уклоњено из колекције</string>\n    <string name=\"delete_downloads_for_manga\">Обриши преузета поглавља?</string>\n    <string name=\"copied_to_clipboard\">Копирано:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Извор није инсталиран: %1$s</string>\n    <string name=\"display_mode_chapter\">Поглавље %1$s</string>\n    <string name=\"chapter_downloading_progress\">Преузима се (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Грешка</string>\n    <string name=\"chapter_paused\">Паузирано</string>\n    <string name=\"show_title\">Наслов извора</string>\n    <string name=\"show_chapter_number\">Број поглавља</string>\n    <string name=\"pref_read_with_long_tap\">Прикажи радње при дугом додиру</string>\n    <string name=\"sort_by_source\">Према извору</string>\n    <string name=\"sort_by_number\">Према броју поглавља</string>\n    <string name=\"manga_download\">Преузми</string>\n    <string name=\"download_unread\">Непрочитано</string>\n    <string name=\"confirm_delete_chapters\">Да ли сте сигурни да желите да обришете следећа поглавља?</string>\n    <string name=\"action_open_in_web_view\">Отвори у WebView</string>\n    <string name=\"pref_skip_read_chapters\">Прескочи поглавља означена као прочитана</string>\n    <string name=\"filter_mode_multiply\">Помножи</string>\n    <string name=\"filter_mode_screen\">Екран</string>\n    <string name=\"label_help\">Помоћ</string>\n    <string name=\"no_results_found\">Нема пронађених резултата</string>\n    <string name=\"action_webview_back\">Назад</string>\n    <string name=\"action_webview_forward\">Напред</string>\n    <string name=\"action_webview_refresh\">Освежи</string>\n    <string name=\"pref_category_library\">Колекција</string>\n    <string name=\"obsolete_extension_message\">Овај додатак није више доступан. Можда неће исправно функционисати и може изазвати проблеме са апликацијом. Препоручује се деинсталирање.</string>\n    <string name=\"pref_date_format\">Формат датума</string>\n    <string name=\"pref_category_library_update\">Глобално ажурирање</string>\n    <string name=\"logout_title\">Излогуј се из %1$s?</string>\n    <string name=\"logout\">Излогуј се</string>\n    <string name=\"logout_success\">Сада сте излоговани</string>\n    <string name=\"label_more\">Више</string>\n    <string name=\"action_sort_latest_chapter\">Последње поглавље</string>\n    <string name=\"action_view_chapters\">Погледај поглавља</string>\n    <string name=\"action_cancel_all\">Откажи све</string>\n    <string name=\"theme_light\">Светла</string>\n    <string name=\"theme_dark\">Тамна</string>\n    <string name=\"theme_system\">По систему</string>\n    <string name=\"pref_manage_notifications\">Управљај обавештењима</string>\n    <string name=\"pref_category_security\">Безбедност и приватност</string>\n    <string name=\"lock_when_idle\">Закључај приликом мировања</string>\n    <string name=\"lock_always\">Увек</string>\n    <string name=\"lock_never\">Никада</string>\n    <string name=\"secure_screen\">Безбедносни екран</string>\n    <string name=\"ext_updates_pending\">Ажурирања на чекању</string>\n    <string name=\"pref_category_display\">Прикажи</string>\n    <string name=\"hide_notification_content\">Сакриј обавештења</string>\n    <string name=\"pref_disable_battery_optimization\">Искључи оптимизацију коришћења батерије</string>\n    <string name=\"battery_optimization_disabled\">Оптимизација потрошње батерије је већ искључена</string>\n    <string name=\"email\">Имејл адреса</string>\n    <string name=\"information_empty_library\">Ваша колекција је празна</string>\n    <string name=\"information_no_recent_manga\">Ништа није недавно читано</string>\n    <string name=\"information_no_recent\">Нема недавних ажурирања</string>\n    <string name=\"information_no_downloads\">Нема преузимања</string>\n    <string name=\"label_sources\">Извори</string>\n    <string name=\"ext_obsolete\">Застарело</string>\n    <string name=\"secure_screen_summary\">Сакриј приказ апликације приликом пребацивања између апликација и онемогући снимке екрана</string>\n    <string name=\"lock_with_biometrics\">Захтевај закључавање</string>\n    <string name=\"action_move_to_bottom\">Премести на дно</string>\n    <string name=\"action_move_to_top\">Премести на врх</string>\n    <string name=\"action_oldest\">Најстарије</string>\n    <string name=\"action_newest\">Најновије</string>\n    <string name=\"action_unpin\">Откачи</string>\n    <string name=\"action_pin\">Закачи</string>\n    <string name=\"action_select_inverse\">Изабери обрнуто</string>\n    <string name=\"action_menu\">Мени</string>\n    <string name=\"label_downloaded_only\">Само преузето</string>\n    <string name=\"information_empty_category\">Немате категорија. Додирните дугме плус да бисте направили нову категорију за организовање колекције.</string>\n    <string name=\"notification_chapters_multiple\">Поглавља %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Поглавље %1$s и још %2$d</string>\n    <string name=\"notification_chapters_single\">Поглавље %1$s</string>\n    <string name=\"notification_new_chapters\">Пронађена су нова поглавља</string>\n    <string name=\"download_queue_error\">Неуспешно преузимање поглавља. Покушајте поново у секцији за преузимања</string>\n    <string name=\"copy\">Копирај</string>\n    <string name=\"migrate\">Мигрирај</string>\n    <string name=\"migration_selection_prompt\">Одаберите извор са којег ћете мигрирати</string>\n    <string name=\"migration_dialog_what_to_include\">Изаберите податке које желите да укључите</string>\n    <string name=\"recent_manga_time\">Погл. %1$s - %2$s</string>\n    <string name=\"updating_library\">Ажурирање колекције</string>\n    <string name=\"transition_pages_error\">Учитавање страница није успело: %1$s</string>\n    <string name=\"transition_pages_loading\">Учитавање страница…</string>\n    <string name=\"transition_no_previous\">Нема претходног поглавља</string>\n    <string name=\"transition_no_next\">Нема следећег поглавља</string>\n    <string name=\"transition_previous\">Претходно:</string>\n    <string name=\"transition_next\">Следеће:</string>\n    <string name=\"transition_current\">Тренутно:</string>\n    <string name=\"transition_finished\">Завршено:</string>\n    <string name=\"confirm_set_image_as_cover\">Користи ову слику као омот?</string>\n    <string name=\"decode_image_error\">Није могуће учитати слику</string>\n    <string name=\"no_next_chapter\">Следеће поглавље није пронађено</string>\n    <string name=\"chapter_progress\">Страница: %1$d</string>\n    <string name=\"custom_filter\">Подесиви филтер</string>\n    <string name=\"picture_saved\">Слика је сачувана</string>\n    <string name=\"dialog_with_checkbox_reset\">Ресетуј сва поглавља овог наслова</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ово ће уклонити датум читања овог поглавља. Да ли сте сигурни да то желите?</string>\n    <string name=\"snack_categories_deleted\">Категорије обрисане</string>\n    <string name=\"error_category_exists\">Категорија са овим именом већ постоји!</string>\n    <string name=\"track_type\">Врста</string>\n    <string name=\"track_status\">Статус</string>\n    <string name=\"status\">Статус</string>\n    <string name=\"title\">Наслов</string>\n    <string name=\"score\">Оцена</string>\n    <string name=\"repeating\">Поновно читање</string>\n    <string name=\"plan_to_read\">У плану</string>\n    <string name=\"paused\">Паузирано</string>\n    <string name=\"on_hold\">На паузи</string>\n    <string name=\"dropped\">Напуштено</string>\n    <string name=\"completed\">Завршено</string>\n    <string name=\"reading\">Читање</string>\n    <string name=\"add_tracking\">Додај праћење</string>\n    <string name=\"manga_tracking_tab\">Праћење</string>\n    <string name=\"snack_add_to_library\">Додати у колекцију?</string>\n    <string name=\"manga_info_collapse\">Мање</string>\n    <string name=\"manga_info_expand\">Више</string>\n    <string name=\"in_library\">У колекцији</string>\n    <string name=\"add_to_library\">Додати у колекцију</string>\n    <string name=\"local_source_help_guide\">Водич за локалне изворе</string>\n    <string name=\"pinned_sources\">Закачено</string>\n    <string name=\"last_used_source\">Последње коришћено</string>\n    <string name=\"downloaded_only_summary\">Филтрира све наслове у колекцији</string>\n    <string name=\"check_for_updates\">Провери ажурирања</string>\n    <string name=\"website\">Вебсајт</string>\n    <string name=\"restoring_backup_canceled\">Враћање је отказано</string>\n    <string name=\"restoring_backup_error\">Враћање на резервну копију није успело</string>\n    <string name=\"restore_in_progress\">Враћање је већ у току</string>\n    <string name=\"creating_backup_error\">Прављење резервне копије није успело</string>\n    <string name=\"backup_in_progress\">Прављење резервне копије је већ у току</string>\n    <string name=\"restore_duration\">%02d мин, %02d сек</string>\n    <string name=\"pref_webtoon_side_padding\">Растојање од ивице</string>\n    <string name=\"pref_category_reading\">Читање</string>\n    <string name=\"pref_always_show_chapter_transition\">Увек прикажи транзицију поглавља</string>\n    <string name=\"vertical_plus_viewer\">Дуги стрип са размацима</string>\n    <string name=\"pref_skip_filtered_chapters\">Прескочи филтрирана поглавља</string>\n    <string name=\"pref_cutout_short\">Прикажи садржај у исечку</string>\n    <string name=\"set_as_cover\">Постави као омот</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Помаже при ажурирању колекције и резервних копија</string>\n    <string name=\"download_notifier_title_error\">Грешка</string>\n    <string name=\"download_notifier_downloader_title\">Преузимања</string>\n    <string name=\"information_webview_outdated\">Ажурирајте WebView за бољу компатибилност</string>\n    <string name=\"information_webview_required\">WebView је потребан како би апликација функционисала</string>\n    <string name=\"information_cloudflare_bypass_failure\">Неуспешно заобилажење Cloudflare-а</string>\n    <string name=\"update_check_notification_update_available\">Доступно је ново ажурирање!</string>\n    <string name=\"update_check_notification_download_error\">Грешка током преузимања</string>\n    <string name=\"update_check_notification_download_complete\">Додирните за инсталирање ажурирања</string>\n    <string name=\"update_check_notification_download_in_progress\">Преузимање…</string>\n    <string name=\"update_check_no_new_updates\">Нема нових ажурирања</string>\n    <string name=\"update_check_confirm\">Преузми</string>\n    <string name=\"file_select_backup\">Изаберите датотеку резервне копије</string>\n    <string name=\"file_select_cover\">Изаберите слику за омот</string>\n    <string name=\"notification_first_add_to_library\">Морате прво додати наслов у колекцију</string>\n    <string name=\"notification_cover_update_failed\">Ажурирање омота није успјело</string>\n    <string name=\"pref_category_theme\">Тема</string>\n    <string name=\"action_disable\">Онемогући</string>\n    <string name=\"action_display_show_tabs\">Прикажи наслове категорија</string>\n    <string name=\"action_display_comfortable_grid\">Шира мрежа</string>\n    <string name=\"action_migrate\">Мигрирај</string>\n    <string name=\"action_start\">Почни</string>\n    <string name=\"action_disable_all\">Онемогући све</string>\n    <string name=\"action_enable_all\">Омогући све</string>\n    <string name=\"action_search_settings\">Подешавања претраге</string>\n    <string name=\"action_sort_date_added\">Датум додавања</string>\n    <string name=\"pref_show_reading_mode\">Прикажи начин читања</string>\n    <string name=\"ext_nsfw_warning\">Може садржати садржај за одрасле (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Провери да ли постоје нови омоти при ажурирању колекције</string>\n    <string name=\"pref_library_update_refresh_metadata\">Аутоматски освежи метаподатке</string>\n    <string name=\"parental_controls_info\">Ово не спречава незваничне или потенцијално погрешно означене додатке да прикажу садржај за одрасле (18+) унутар апликације.</string>\n    <string name=\"action_filter_tracked\">Запраћено</string>\n    <string name=\"label_warning\">Упозорење</string>\n    <string name=\"confirm_lock_change\">Оверите да бисте потврдили промене</string>\n    <string name=\"action_sort_count\">Укупно наслова</string>\n    <string name=\"action_sort_chapter_fetch_date\">Датум преузимања</string>\n    <string name=\"action_display_local_badge\">Локални извор</string>\n    <string name=\"action_order_by_upload_date\">По датуму постављања</string>\n    <string name=\"action_display_language_badge\">Језик</string>\n    <string name=\"action_order_by_chapter_number\">По броју поглавља</string>\n    <string name=\"pref_app_theme\">Тема апликације</string>\n    <string name=\"theme_greenapple\">Зелена јабука</string>\n    <string name=\"theme_yotsuba\">Јоцуба</string>\n    <string name=\"action_asc\">Растуће</string>\n    <string name=\"label_default\">Подразумевано</string>\n    <string name=\"action_start_downloading_now\">Покрени преузимање одмах</string>\n    <string name=\"action_display_show_number_of_items\">Прикажи број ставки</string>\n    <string name=\"cancel_all_for_series\">Откажи све за овај наслов</string>\n    <string name=\"action_desc\">Опадајуће</string>\n    <string name=\"action_show_errors\">Прикажи детаље</string>\n    <string name=\"pref_category_appearance\">Изглед</string>\n    <string name=\"theme_monet\">Динамично</string>\n    <string name=\"theme_midnightdusk\">Поноћни сумрак</string>\n    <string name=\"theme_strawberrydaiquiri\">Даикири јагода</string>\n    <string name=\"theme_tako\">Тако</string>\n    <string name=\"theme_tealturquoise\">Плавозелена и тиркизна</string>\n    <string name=\"theme_yinyang\">Јин и јанг</string>\n    <string name=\"pref_dark_theme_pure_black\">Потпуно црна тема</string>\n    <string name=\"pref_category_nsfw_content\">NSFW - извори за одрасле (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Покажи у листи за изворе и додатке</string>\n    <string name=\"pref_category_reading_mode\">Начин читања</string>\n    <string name=\"ext_installer_pref\">Инсталер</string>\n    <string name=\"pref_category_auto_download\">Аутоматско преузимање</string>\n    <string name=\"action_track\">Прати</string>\n    <string name=\"restore_miui_warning\">Резервна копија/враћање можда неће радити исправно ако није омогућена MIUI оптимизација.</string>\n    <string name=\"backup_info\">Чувајте резервне копије и на другим местима.</string>\n    <string name=\"pref_dns_over_https\">DNS преко HTTPS-а (DoH)</string>\n    <string name=\"pref_tablet_ui_mode\">Изглед за таблет</string>\n    <string name=\"requires_app_restart\">Захтева поновно покретање апликације</string>\n    <string name=\"pref_dump_crash_logs_summary\">Чува евиденцију грешака у датотеку за дељење са програмерима</string>\n    <string name=\"label_background_activity\">Активност у позадини</string>\n    <string name=\"pref_color_filter_mode\">Режим мешања филтера боја</string>\n    <string name=\"gray_background\">Сива</string>\n    <string name=\"nav_zone_prev\">Прет.</string>\n    <string name=\"about_dont_kill_my_app\">Неки произвођачи имају додатна ограничења за апликације која гасе сервисе које су у позадини. Овај сајт садржи више информација о могућим решењима.</string>\n    <string name=\"kindlish_nav\">Као Kindle</string>\n    <string name=\"edge_nav\">Ивица</string>\n    <string name=\"right_and_left_nav\">Десно и лево</string>\n    <string name=\"nav_zone_right\">Десно</string>\n    <string name=\"nav_zone_next\">След.</string>\n    <string name=\"pref_verbose_logging\">Детаљно извештавање</string>\n    <string name=\"pref_incognito_mode_summary\">Зауставља праћење историје читања</string>\n    <string name=\"tabs_header\">Картице</string>\n    <string name=\"unknown_status\">Непознат статус</string>\n    <string name=\"local_filter_order_by\">Поређај по</string>\n    <string name=\"enhanced_services\">Побољшани сервиси за праћење</string>\n    <string name=\"invalid_backup_file\">Неисправна датотека резервне копије</string>\n    <string name=\"backup_restore_missing_sources\">Недостају извори:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Резервна копија не садржи ниједан наслов.</string>\n    <string name=\"backup_restore_missing_trackers\">Пратиоци у које нисте пријављени:</string>\n    <string name=\"label_network\">Мрежа</string>\n    <string name=\"backup_restore_content_full\">Подаци из датотеке резервне копије ће бити враћени.\n\\n\n\\nМораћете да инсталирате све додатке које недостају и да се после тога пријавите на пратиоце да бисте их користили.</string>\n    <string name=\"enhanced_tracking_info\">Сервиси који пружају побољшане услуге за одређене изворе. Наслов се аутоматски прати када га додате у колекцију.</string>\n    <string name=\"help_translate\">Помозите у превођењу</string>\n    <string name=\"pref_dump_crash_logs\">Дели извештаје о паду</string>\n    <string name=\"pref_verbose_logging_summary\">Исписуј детаљне извештаје у системски дневник (смањује перформансе апликације)</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Није могуће отворити подешавања уређаја</string>\n    <string name=\"pref_refresh_library_covers\">Освежи омоте у колекцији</string>\n    <string name=\"whats_new\">Шта је ново</string>\n    <string name=\"notification_incognito_text\">Деактивирај инкогнито мод</string>\n    <string name=\"manga_from_library\">Из колекције</string>\n    <string name=\"downloaded_chapters\">Преузета поглавља</string>\n    <string name=\"action_global_search_query\">Претражи „%1$s” глобално</string>\n    <string name=\"no_pinned_sources\">Немате закачених извора</string>\n    <string name=\"chapter_not_found\">Поглавље није пронађено</string>\n    <string name=\"local_invalid_format\">Неважећи формат поглавља</string>\n    <string name=\"clipboard_copy_error\">Неуспешно копирање</string>\n    <string name=\"sort_by_upload_date\">Према датуму поставке</string>\n    <string name=\"error_saving_cover\">Грешка при чувању омота</string>\n    <string name=\"manga_cover\">Омот</string>\n    <string name=\"cover_saved\">Омот сачуван</string>\n    <string name=\"error_sharing_cover\">Грешка при дељењу омота</string>\n    <string name=\"set_chapter_settings_as_default\">Постави као подразумевано</string>\n    <string name=\"confirm_set_chapter_settings\">Да ли сте сигурни да желите да сачувате ова подешавања као подразумевана?</string>\n    <string name=\"also_set_chapter_settings_for_library\">Такође примени на све наслове у мојој колекцији</string>\n    <string name=\"no_chapters_error\">Није пронађено ни једно поглавље</string>\n    <string name=\"track_started_reading_date\">Датум почетка</string>\n    <string name=\"myanimelist_relogin\">Морате поново да се пријавите на MAL</string>\n    <string name=\"source_unsupported\">Извор није подржан</string>\n    <string name=\"unread\">Непрочитано</string>\n    <string name=\"channel_progress\">Напредак</string>\n    <string name=\"channel_complete\">Завршено</string>\n    <string name=\"channel_new_chapters\">Ажурирања поглавља</string>\n    <string name=\"download_insufficient_space\">Неуспешно преузимање поглавља због недовољне меморије</string>\n    <string name=\"getting_started_guide\">Почетни водич</string>\n    <string name=\"update_check_eol\">Ова Android верзија више није подржана</string>\n    <string name=\"chapter_settings_updated\">Ажурирана су подразумевана подешаваља поглавља</string>\n    <string name=\"download_notifier_unknown_error\">Није могуће преузети поглавље због неочекиване грешке</string>\n    <string name=\"download_notifier_text_only_wifi\">Нема доступне Wi-Fi везе</string>\n    <string name=\"channel_common\">Опште</string>\n    <string name=\"download_notifier_no_network\">Нема доступне интернет везе</string>\n    <string name=\"download_notifier_download_paused\">Преузимања су заустављена</string>\n    <string name=\"channel_ext_updates\">Ажурирања додатака</string>\n    <string name=\"spen_previous_page\">Претходна страница</string>\n    <string name=\"spen_next_page\">Следећа страница</string>\n    <string name=\"filter_mode_darken\">Потамни (Burn)</string>\n    <string name=\"ext_installer_legacy\">Првобитни метод</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Инсталирајте и покрените Shizuku да би користили Shizuku као инсталер додатака.</string>\n    <string name=\"filter_mode_lighten\">Посветли (Dodge)</string>\n    <string name=\"tracking_guide\">Водич за праћење</string>\n    <string name=\"pref_hide_threshold\">Осетљивост за сакривање менија при померању</string>\n    <string name=\"pref_show_navigation_mode\">Прикажи начин навигације</string>\n    <string name=\"track_finished_reading_date\">Датум завршетка</string>\n    <string name=\"automatic_background\">Аутоматски</string>\n    <string name=\"licenses\">Лиценце отвореног кода</string>\n    <string name=\"updated_version\">Ажурирано на v%1$s</string>\n    <string name=\"error_no_match\">Ништа није пронађено</string>\n    <string name=\"pref_dual_page_split\">Раздели широке странице</string>\n    <string name=\"none\">Ништа</string>\n    <string name=\"date\">Датум</string>\n    <string name=\"pref_viewer_nav\">Начин навигације</string>\n    <string name=\"unknown_author\">Непознат аутор</string>\n    <string name=\"file_picker_error\">Није пронађен програм за бирање датотека</string>\n    <string name=\"channel_errors\">Грешке</string>\n    <string name=\"chapter_settings\">Подешавања поглавља</string>\n    <string name=\"relative_time_today\">Данас</string>\n    <string name=\"nav_zone_left\">Лево</string>\n    <string name=\"information_empty_category_dialog\">Још немате категорија.</string>\n    <string name=\"ext_app_info\">Информације о апликацији</string>\n    <string name=\"update_72hour\">Свака 3 дана</string>\n    <string name=\"connected_to_wifi\">Само преко Wi-Fi-а</string>\n    <string name=\"restrictions\">Ограничења: %s</string>\n    <string name=\"categorized_display_settings\">Поставке за сортирање одвојено за сваку категорију</string>\n    <string name=\"pref_library_update_categories_details\">Наслови у искљученим категоријама се неће ажурирати иако су такође у укљученим категоријама.</string>\n    <string name=\"include\">Укључи: %s</string>\n    <string name=\"exclude\">Искључи: %s</string>\n    <string name=\"ext_install_service_notif\">Инсталирање додатка…</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku није укључен</string>\n    <string name=\"pref_show_navigation_mode_summary\">Прикажи зоне додира када се читач отвори</string>\n    <string name=\"pref_dual_page_invert\">Обрни положај подељене странице</string>\n    <string name=\"pref_dual_page_invert_summary\">Ако се положај подељених широких страница не подудара са смером читања</string>\n    <string name=\"pref_show_reading_mode_summary\">На тренутак прикажи тренутни начин читања када се читач отвори</string>\n    <string name=\"on\">Укључено</string>\n    <string name=\"off\">Искључено</string>\n    <string name=\"pref_grayscale\">Црно-бело</string>\n    <string name=\"pref_inverted_colors\">Инвертовано</string>\n    <string name=\"filter_mode_overlay\">Прекривање</string>\n    <string name=\"pref_read_with_tapping_inverted\">Обрни додире</string>\n    <string name=\"tapping_inverted_none\">Ништа</string>\n    <string name=\"tapping_inverted_horizontal\">Хоризонтално</string>\n    <string name=\"tapping_inverted_vertical\">Вертикално</string>\n    <string name=\"tapping_inverted_both\">Оба</string>\n    <string name=\"pref_reader_actions\">Радње</string>\n    <string name=\"pref_create_folder_per_manga\">Сачувај странице у засебне фолдере</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Прави датотеке по имену наслова</string>\n    <string name=\"l_nav\">У облику слова L</string>\n    <string name=\"rotation_type\">Оријентација</string>\n    <string name=\"rotation_portrait\">Усправно</string>\n    <string name=\"rotation_landscape\">Положено</string>\n    <string name=\"pref_highest\">Највиша</string>\n    <string name=\"pref_high\">Висока</string>\n    <string name=\"pref_low\">Ниска</string>\n    <string name=\"pref_lowest\">Најнижа</string>\n    <string name=\"pref_category_delete_chapters\">Избриши поглавља</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Дозволи брисање забележених поглавља</string>\n    <string name=\"pref_remove_exclude_categories\">Искључене категорије</string>\n    <string name=\"pref_download_new_categories_details\">Наслови у искљученим категоријама неће се преузимати иако су такође у укљученим категоријама.</string>\n    <string name=\"tracking_info\">Једносмерна синхронизација за ажурирање броја прочитаних поглавља у пратиоцима. За појединачно праћење наслова додирни дугме за њихово праћење.</string>\n    <string name=\"label_data\">Подаци</string>\n    <string name=\"pref_incognito_mode\">Инкогнито мод</string>\n    <string name=\"cover_updated\">Омот је ажуриран</string>\n    <string name=\"share_page_info\">%1$s: %2$s, страница %3$d</string>\n    <string name=\"pref_category_for_this_series\">За овај наслов</string>\n    <string name=\"viewer\">Режим читања</string>\n    <string name=\"page_list_empty_error\">Нема страница</string>\n    <string name=\"loader_not_implemented_error\">Извор није пронађен</string>\n    <string name=\"pref_clear_history\">Избриши историју</string>\n    <string name=\"clear_history_completed\">Историја је избрисана</string>\n    <string name=\"clear_history_confirmation\">Да ли сте сигурни? Цела историја ће бити изгубљена.</string>\n    <string name=\"migration_help_guide\">Водич за миграцију извора</string>\n    <string name=\"download_queue_size_warning\">Упозорење: велики број преузимања може довести до успоравања извора и/или блокирања Mihon-а. Додирни да сазнаш више.</string>\n    <string name=\"notification_size_warning\">Велика ажурирања штете изворима и могу довести до споријег ажурирања и повећања потрошње батерије. Кликни да сазнаш више.</string>\n    <string name=\"ext_update_all\">Ажурирај све</string>\n    <string name=\"channel_app_updates\">Ажурирања апликације</string>\n    <string name=\"clear_database_source_item_count\">Број наслова у бази података које нису у колекцији: %1$d</string>\n    <string name=\"extension_api_error\">Преузимање листе додатака није успело</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Испразни кеш меморију поглавља током покретања апликације</string>\n    <string name=\"database_clean\">Нема ништа за чишћење</string>\n    <string name=\"pref_update_only_completely_read\">Прескочи уносе са непрочитаним поглављима</string>\n    <string name=\"privacy_policy\">Политика приватности</string>\n    <string name=\"cancelled\">Отказано</string>\n    <string name=\"on_hiatus\">На паузи</string>\n    <string name=\"pref_update_only_started\">Прескочи уносе који нису започети</string>\n    <string name=\"action_show_manga\">Прикажи наслов</string>\n    <string name=\"action_move_to_top_all_for_series\">Помакни наслов на врх</string>\n    <string name=\"notification_update_error\">%1$d ажурирање није успело</string>\n    <string name=\"learn_more\">Додирните да сазнате више</string>\n    <string name=\"library_errors_help\">За помоћ о томе како да поправите грешке у ажурирању колекције, погледајте %1$s</string>\n    <string name=\"skipped_reason_not_started\">Прескочено јер ниједно поглавље није прочитано</string>\n    <string name=\"action_display_cover_only_grid\">Мрежа насловница</string>\n    <string name=\"pref_navigate_pan\">Померај широке слике</string>\n    <string name=\"pref_landscape_zoom\">Аутоматски зумирај слике у пејзажном облику</string>\n    <string name=\"save_chapter_as_cbz\">Сачувај као CBZ архиву</string>\n    <string name=\"rotation_reverse_portrait\">Обрнути портрет</string>\n    <string name=\"publishing_finished\">Издавање завршено</string>\n    <string name=\"skipped_reason_completed\">Прескочено јер је наслов завршен</string>\n    <string name=\"skipped_reason_not_caught_up\">Прескочено јер има непрочитаних поглавља</string>\n    <string name=\"disabled_nav\">Onesposobljen</string>\n    <string name=\"empty_backup_error\">Нема уноса у колекцији за прављење резервних копија</string>\n    <string name=\"update_check_open\">Отвори на GitHub-у</string>\n    <string name=\"error_saving_picture\">Грешка при чувању слике</string>\n    <string name=\"action_close\">Затвори</string>\n    <string name=\"pref_clear_webview_data\">Обриши податке WebView-a</string>\n    <string name=\"webview_data_deleted\">Подаци WebView-a су обрисани</string>\n    <string name=\"pref_library_summary\">Категорије, глобално ажурирање, листање поглавља</string>\n    <string name=\"pref_reader_summary\">Режим читања, дисплеј, навигација</string>\n    <string name=\"pref_downloads_summary\">Аутоматско преузимање, преузимање унапред</string>\n    <string name=\"pref_tracking_summary\">Једносмерна синхронизација напретка, побољшана синхронизација</string>\n    <string name=\"pref_browse_summary\">Извори, додаци, глобална претрага</string>\n    <string name=\"pref_backup_summary\">Ручне и аутоматске резервне копије</string>\n    <string name=\"auto_download_while_reading\">Преузми аутоматски током читања</string>\n    <string name=\"copied_to_clipboard_plain\">Копирано</string>\n    <string name=\"pref_reset_viewer_flags_success\">Сва подешавања читача су ресетована</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Присили апликацију да поново провери преузета поглавља</string>\n    <string name=\"not_installed\">Није инсталирано</string>\n    <string name=\"crash_screen_description\">%s је наишао на неочекивану грешку. Предлажемо да поделите запис о прекиду програма на нашем каналу за подршку на Discord-у.</string>\n    <string name=\"appwidget_unavailable_locked\">Виџет није доступан када је омогућено закључавање апликације</string>\n    <string name=\"pref_library_update_show_tab_badge\">Прокажи број непрочитаних на икони ажурирања</string>\n    <string name=\"wish_list\">Листа жеља</string>\n    <string name=\"enhanced_services_not_installed\">Доступно, али извор није преузет: %s</string>\n    <string name=\"fdroid_warning\">F-Droid верзије нису званично подржане.\n\\nДодирните да сазнате више.</string>\n    <string name=\"track_remove_date_conf_title\">Уклони датум?</string>\n    <string name=\"track_remove_start_date_conf_text\">Овим уклањате претходно изабран почетни датум од %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Овим уклањате претходно изабран завршени датум од %s</string>\n    <string name=\"updates_last_update_info\">Последње ажурирање колекције било је: %s</string>\n    <string name=\"updates_last_update_info_just_now\">Управо сада</string>\n    <string name=\"update_already_running\">Ажурирање је већ у току</string>\n    <string name=\"confirm_add_duplicate_manga\">Имате унос у колекцији са истим именом.\n\\n\n\\nДа ли још увек желите да наставите?</string>\n    <string name=\"complete_list\">Завршена листа</string>\n    <string name=\"on_hold_list\">Наслови на чекању</string>\n    <string name=\"unfinished_list\">Незавршени наслови</string>\n    <string name=\"label_stats\">Статистике</string>\n    <string name=\"label_started\">Започето</string>\n    <string name=\"label_local\">Локално</string>\n    <string name=\"label_downloaded\">Преузето</string>\n    <string name=\"theme_lavender\">Лаванда</string>\n    <string name=\"pref_app_language\">Језик апликације</string>\n    <string name=\"ext_info_version\">Верзија</string>\n    <string name=\"invalid_location\">Неважећа локација: %s</string>\n    <string name=\"unknown_title\">Непознат наслов</string>\n    <string name=\"label_overview_section\">Преглед</string>\n    <string name=\"reading_list\">Листа за читање</string>\n    <string name=\"are_you_sure\">Да ли сте сигурни?</string>\n    <string name=\"label_read_duration\">Трајање читања</string>\n    <string name=\"label_titles_in_global_update\">У глобалним ажурирањима</string>\n    <string name=\"label_titles_section\">Наслови</string>\n    <string name=\"label_total_chapters\">Укупно</string>\n    <string name=\"label_mean_score\">Просечна оцена</string>\n    <string name=\"label_read_chapters\">Прочитано</string>\n    <string name=\"label_used\">Коришћено</string>\n    <string name=\"day_short\">%d д</string>\n    <string name=\"hour_short\">%dч</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"minute_short\">%dмин</string>\n    <string name=\"seconds_short\">%dс</string>\n    <string name=\"description_placeholder\">Нема описа</string>\n    <string name=\"action_display_show_continue_reading_button\">Дугме за наставак читања</string>\n    <string name=\"internal_error\">InternalError: Провери записнике о прекиду програма за даље информације</string>\n    <string name=\"pref_skip_dupe_chapters\">Прескочи дупликатска поглавља</string>\n    <string name=\"multi_lang\">Више језика</string>\n    <string name=\"ext_info_language\">Језик</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Ресетуј режим читања и оријентацију свих серија</string>\n    <string name=\"popular\">Популарно</string>\n    <string name=\"label_completed_titles\">Завршени наслови</string>\n    <string name=\"split_tall_images_summary\">Побољшава перформансе читача</string>\n    <string name=\"network_not_metered\">Само на мрежи без ограничења</string>\n    <string name=\"missing_storage_permission\">Дозвола за меморијски простор није одобрена</string>\n    <string name=\"error_user_agent_string_invalid\">Неважећи низ корисничког агента</string>\n    <string name=\"pref_reset_viewer_flags_error\">Није могуће ресетовати подешавања читача</string>\n    <string name=\"remove_manga\">Управо ћете уклонити \\\"%s\\\" из своје колекције</string>\n    <string name=\"appwidget_updates_description\">Погледај твоје недавно ажуриране наслове у колекцији</string>\n    <string name=\"pref_invalidate_download_cache\">Поништи индекс преузимања</string>\n    <string name=\"action_sort_unread_count\">Број непрочитаних</string>\n    <string name=\"action_sort_last_manga_update\">Последња провера ажурирања</string>\n    <string name=\"delete_category\">Обриши категорију</string>\n    <string name=\"delete_category_confirmation\">Желиш ли обрисати категорију \\\"%s\\\"?</string>\n    <string name=\"action_remove_everything\">Уклони све</string>\n    <string name=\"crash_screen_title\">Упс!</string>\n    <string name=\"crash_screen_restart_application\">Поново покрени апликацију</string>\n    <string name=\"cant_open_last_read_chapter\">Није могуће отворити последње прочитано поглавље</string>\n    <string name=\"action_search_hint\">Претражи…</string>\n    <string name=\"download_ahead\">Преузми унапред</string>\n    <string name=\"empty_screen\">Е па, ово је незгодно</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Није могуће пронаћи пут датотеке странице %d</string>\n    <string name=\"skipped_reason_not_always_update\">Прескочено јер наслов не захтева ажурирање</string>\n    <string name=\"download_notifier_split_page_not_found\">Страница %d није пронађена током раздвајања</string>\n    <string name=\"download_notifier_cache_renewal\">Провера преузимања</string>\n    <string name=\"action_not_now\">Не сада</string>\n    <string name=\"pref_appearance_summary\">Формат теме, датума и времена</string>\n    <string name=\"pref_security_summary\">Закључавање апликације, сигуран екран</string>\n    <string name=\"pref_advanced_summary\">Записници гашења апликације, оптимизације батерије</string>\n    <string name=\"action_open_random_manga\">Отвори насумични наслов</string>\n    <string name=\"download_ahead_info\">Ради само ако је тренутно и следеће поглавље већ преузето.</string>\n    <string name=\"information_no_entries_found\">Нема наслова у овој категорији</string>\n    <string name=\"information_no_manga_category\">Категорија је празна</string>\n    <string name=\"error_user_agent_string_blank\">Низ корисничког агента не може бити празан</string>\n    <string name=\"pref_reset_user_agent_string\">Ресетуј подразумевани низ корисничког агента</string>\n    <string name=\"label_tracked_titles\">Праћени наслови</string>\n    <string name=\"label_tracker_section\">Пратиоци</string>\n    <string name=\"ext_info_age_rating\">Рангирање по узрасту</string>\n    <string name=\"custom_cover\">Персонализовани омот</string>\n    <string name=\"pref_reset_viewer_flags\">Ресетуј подешавања читача по наслову</string>\n    <string name=\"source_empty_screen\">Извор није пронађен</string>\n    <string name=\"source_filter_empty_screen\">Није пронађен инсталирани извор</string>\n    <string name=\"theme_tidalwave\">Цунами</string>\n    <string name=\"pref_user_agent_string\">Подразумеван низ корисничког агента</string>\n    <string name=\"track_error\">%1$s грешка: %2$s</string>\n    <string name=\"information_required_plain\">*неопходно</string>\n    <string name=\"action_update_category\">Ажурирај категорију</string>\n    <string name=\"pref_hide_in_library_items\">Сакри уносе који се већ налазе у колекцији</string>\n    <string name=\"overlay_header\">Прекривање</string>\n    <string name=\"split_tall_images\">Растави високе слике</string>\n    <string name=\"pref_chapter_swipe_end\">Превуци удесно</string>\n    <string name=\"pref_chapter_swipe_start\">Превуци улево</string>\n    <string name=\"pref_double_tap_zoom\">Додирни двапут за зумирање</string>\n    <string name=\"action_copy_to_clipboard\">Копирај</string>\n    <string name=\"pref_page_rotate_invert\">Окрени положај широких страница</string>\n    <string name=\"pref_page_rotate\">Прилагоди широке странице ротирањем</string>\n    <string name=\"pref_debug_info\">Информације за отклањање грешака</string>\n    <string name=\"create_backup_file_error\">Није могуће створити датотеку резервне копије</string>\n    <string name=\"has_results\">Има резултата</string>\n    <string name=\"skipped_reason_not_in_release_period\">Прескочено јер данас није очекивано издање</string>\n    <string name=\"pref_update_only_in_release_period\">Предвиди очекивано време изласка</string>\n    <string name=\"action_set_interval\">Постави интервал</string>\n    <string name=\"intervals_header\">Интервали</string>\n    <string name=\"track_delete_remote_text\">Такође уклони из %s</string>\n    <string name=\"track_activity_name\">Запис праћења</string>\n    <string name=\"manga_display_interval_title\">Процени сваки</string>\n    <string name=\"information_cloudflare_help\">Додирни овде за помоћ са Cloudflare-ом</string>\n    <string name=\"download_cache_invalidated\">Индекс преузимања поништен</string>\n    <string name=\"delete_downloaded\">Обриши преузет садржај</string>\n    <string name=\"action_filter_interval_custom\">Прилагођен интервал преузимања</string>\n    <string name=\"action_ok\">У реду</string>\n    <string name=\"library_sync_complete\">Синхронизовање колекције завршено</string>\n    <string name=\"manga_display_modified_interval_title\">Постави да ажурира сваки</string>\n    <string name=\"track_delete_title\">Уклони праћење %s?</string>\n    <string name=\"track_delete_text\">Ово ће уклонити локално праћење.</string>\n    <string name=\"action_sort_next_updated\">Следеће очекивано ажурирање</string>\n    <string name=\"syncing_library\">Синхронизовање колекције</string>\n    <string name=\"unlock_app_title\">Откључај %s</string>\n    <string name=\"exception_offline\">Нема везе са интернетом</string>\n    <string name=\"exception_http\">HTTP %d, погледај веб сајт у WebView</string>\n    <string name=\"exception_unknown_host\">%s је недоступан</string>\n    <string name=\"pref_relative_format\">Релативне временске ознаке</string>\n    <string name=\"pref_relative_format_summary\">„%1$s” уместо „%2$s”</string>\n    <string name=\"pref_library_update_smart_update\">Паметно ажурирање</string>\n    <string name=\"pref_flash_page\">Забљесни приликом листања</string>\n    <string name=\"pref_flash_page_summ\">Смањује артефакте на е-инк екранима</string>\n    <string name=\"label_extension_repos\">Репозиторије додатака</string>\n    <string name=\"pref_storage_location\">Место складиштења</string>\n    <string name=\"pref_storage_location_info\">Користи се за аутоматске резервне копије, преузимаље поглавља и локални извор.</string>\n    <string name=\"ext_revoke_trust\">Опозови поверење непознатим екстензијама</string>\n    <string name=\"action_sort_tracker_score\">Оцена на пратиоцу</string>\n    <string name=\"scanlator\">Аматерски преводилац</string>\n    <string name=\"no_scanlators_found\">Ниједан аматерски преводилац није пронађен</string>\n    <string name=\"exclude_scanlators\">Не укључуј аматерске преводиоце</string>\n    <string name=\"manga_interval_expected_update\">Предвиђа се да ће нова поглавља изаћи за %1$s, проверава се сваких %2$s.</string>\n    <string name=\"manga_interval_expected_update_soon\">Ускоро</string>\n    <string name=\"available_disk_space_info\">Доступно: %1$s / Укупно: %2$s</string>\n    <string name=\"information_empty_repos\">Немате додатих репозиторија.</string>\n    <string name=\"action_add_repo\">Додај репозиторију</string>\n    <string name=\"action_delete_repo\">Избриши репозиторију</string>\n    <string name=\"label_add_repo_input\">URL репозиторије</string>\n    <string name=\"action_add_repo_message\">Додај додатне репозиторије у Михон. Треба да буде URL који се завршава са „index.min.json”.</string>\n    <string name=\"invalid_repo_name\">Неисправан URL репозиторије</string>\n    <string name=\"delete_repo_confirmation\">Да ли желиш да избришеш репозиторију „%s”?</string>\n    <string name=\"private_settings\">Укључи и осетљива подешавања (нпр. токени за пријаву у пратиоце)</string>\n    <string name=\"onboarding_storage_action_select\">Изабери путању</string>\n    <string name=\"onboarding_action_finish\">Започни</string>\n    <string name=\"onboarding_storage_selection_required\">Мораш да изабереш једну путању</string>\n    <string name=\"onboarding_permission_notifications\">Дозвола за обавештења</string>\n    <string name=\"onboarding_permission_install_apps\">Дозвола за инсталацију апликација</string>\n    <string name=\"onboarding_action_skip\">Пресокочи</string>\n    <string name=\"onboarding_action_next\">Следеће</string>\n    <string name=\"onboarding_permission_install_apps_description\">За инсталирање додатака.</string>\n    <string name=\"onboarding_permission_notifications_description\">За примање обавештења о ажурурању библиотеке и др.</string>\n    <string name=\"onboarding_permission_action_grant\">Одобри</string>\n    <string name=\"onboarding_heading\">Добро дошли!</string>\n    <string name=\"pref_onboarding_guide\">Водич за прво покретање</string>\n    <string name=\"onboarding_guides_new_user\">Користш %s први пут? Препоручујемо да погледаш водич за покретање</string>\n    <string name=\"onboarding_guides_returning_user\">Поново инсталираш %s?</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Избегни прекиде при дуготрајном ажурирању колекције, преузимању и обнављању резервне копије</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Коришћење батерије у позадини</string>\n    <string name=\"onboarding_description\">Хајде да обавимо нека подешавања. Ако желиш можеш их касније променити у подешавањима.</string>\n    <string name=\"no_location_set\">Није постављена локација за складиштење</string>\n    <string name=\"onboarding_storage_info\">Одабери путању у коју ће %1$s чувати преузимања поглавља, резервне копије и друго.\n\\n\n\\nПрепоручујемо коришћење засебне путање\n\\n\n\\nОдабрана путања: %2$s</string>\n    <string name=\"theme_nord\">Норд</string>\n    <string name=\"onboarding_storage_help_info\">Ажурураш са старије верзије и не знаш шта да изабереш? Потражи информације у водичу складиштења.</string>\n    <string name=\"onboarding_storage_help_action\">Водич складиштења</string>\n    <string name=\"ext_permission_install_apps_warning\">За инсталацију додатака потребне су дозволе. Додирни овде за одобрење</string>\n    <string name=\"invalid_backup_file_error\">Грешка:</string>\n    <string name=\"error_repo_exists\">Ова репозиторија већ постоји</string>\n    <string name=\"manga_interval_custom_amount\">Прилагођена учесталост ажурирања:</string>\n    <string name=\"action_open_repo\">Отвори репозиторију</string>\n    <string name=\"not_selected\">Није одабрано</string>\n    <string name=\"selected\">Одабрано</string>\n    <string name=\"action_menu_overflow_description\">Више опција</string>\n    <string name=\"action_bar_up_description\">Навигација према горе</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Премести серију на крај</string>\n    <string name=\"app_settings\">Подешавања апликације</string>\n    <string name=\"source_settings\">Подешавања извора</string>\n    <string name=\"last_auto_backup_info\">Последња аутоматска резервна копија:%s</string>\n    <string name=\"relative_time_span_never\">Никада</string>\n    <string name=\"notification_updating_progress\">Ажурирање библиотеке... (%s)</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Онемогући умањивање</string>\n    <string name=\"action_create\">Створи</string>\n    <string name=\"pref_storage_usage\">Коришћење складишта</string>\n    <string name=\"file_null_uri_error\">Ни једна датотека није одабрана</string>\n    <string name=\"action_apply\">Примени</string>\n    <string name=\"action_revert_to_default\">Врати на подразумевано</string>\n    <string name=\"action_add_anyway\">Dodati svejedno</string>\n    <string name=\"label_upcoming\">Predstojeći</string>\n    <string name=\"action_migrate_duplicate\">Migrirajte postojeći unos</string>\n    <string name=\"action_replace_repo\">Zameniti</string>\n    <string name=\"action_replace_repo_title\">Otisak prsta za otključavanje već postoji</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sv/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Efter %1$s minut</item>\n        <item quantity=\"other\">Efter %1$s minuter</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d nytt kapitel</item>\n        <item quantity=\"other\">%1$d nya kapitel</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Kapitel %1$s och 1 till</item>\n        <item quantity=\"other\">Kapitlen %1$s och %2$d till</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">För %d post</item>\n        <item quantity=\"other\">För %d poster</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Tilläggsuppdatering tillgänglig</item>\n        <item quantity=\"other\">%d tilläggsuppdateringar tillgängliga</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s återstående</item>\n        <item quantity=\"other\">%1$s återstående</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategori</item>\n        <item quantity=\"other\">%d kategorier</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Klar på %1$s med %2$s fel</item>\n        <item quantity=\"other\">Klar på %1$s med %2$s fel</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s kapitel</item>\n        <item quantity=\"other\">%1$s kapitel</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d spårare</item>\n        <item quantity=\"other\">%d spårare</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">Hoppar över %d kapitel, antingen saknar källan det eller så har det filtrerats bort</item>\n        <item quantity=\"other\">Hoppar över %d kapitel, antingen saknar källan dem eller så har de filtrerats bort</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Igår</item>\n        <item quantity=\"other\">För %1$d dagar sedan</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Nästa olästa kapitel</item>\n        <item quantity=\"other\">Nästa %d olästa kapitel</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Saknar %1$s kapitel</item>\n        <item quantity=\"other\">Saknar %1$s kapitel</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 dag</item>\n        <item quantity=\"other\">%d dagar</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Nästa kapitel</item>\n        <item quantity=\"other\">Nästa %d kapitel</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d förråd</item>\n        <item quantity=\"other\">%d förråd</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Imorgon</item>\n        <item quantity=\"other\">Om %1$d dagar</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 sida</item>\n        <item quantity=\"other\">%1$s sidor</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/sv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Namn</string>\n    <string name=\"categories\">Kategorier</string>\n    <string name=\"manga\">Biblioteksposter</string>\n    <string name=\"chapters\">Kapitel</string>\n    <string name=\"track\">Spårning</string>\n    <string name=\"history\">Historik</string>\n    <string name=\"label_settings\">Inställningar</string>\n    <string name=\"label_download_queue\">Nedladdningskö</string>\n    <string name=\"label_library\">Bibliotek</string>\n    <string name=\"label_recent_manga\">Historik</string>\n    <string name=\"label_recent_updates\">Uppdateringar</string>\n    <string name=\"label_backup\">Säkerhetskopiera och återställ</string>\n    <string name=\"label_migration\">Migrera</string>\n    <string name=\"label_extensions\">Tillägg</string>\n    <string name=\"label_extension_info\">Tilläggsinformation</string>\n    <string name=\"action_settings\">Inställningar</string>\n    <string name=\"action_filter\">Filter</string>\n    <string name=\"action_filter_bookmarked\">Bokmärkt</string>\n    <string name=\"action_filter_unread\">Oläst</string>\n    <string name=\"action_filter_empty\">Ta bort filtret</string>\n    <string name=\"action_sort_alpha\">Alfabetiskt</string>\n    <string name=\"action_sort_total\">Totalt kapitel</string>\n    <string name=\"action_sort_last_read\">Senast läst</string>\n    <string name=\"action_search\">Sök</string>\n    <string name=\"action_global_search\">Global sökning</string>\n    <string name=\"action_select_all\">Välj alla</string>\n    <string name=\"action_mark_as_read\">Markera som läst</string>\n    <string name=\"action_mark_as_unread\">Markera som oläst</string>\n    <string name=\"action_mark_previous_as_read\">Markera tidigare som läst</string>\n    <string name=\"action_download\">Ladda ner</string>\n    <string name=\"action_bookmark\">Kapitel bokmärke</string>\n    <string name=\"action_remove_bookmark\">Radera kapitel bokmärke</string>\n    <string name=\"action_delete\">Radera</string>\n    <string name=\"action_update_library\">Uppdatera biblioteket</string>\n    <string name=\"action_edit\">Redigera</string>\n    <string name=\"action_add\">Lägg till</string>\n    <string name=\"action_add_category\">Lägg till kategori</string>\n    <string name=\"action_edit_categories\">Redigera kategorier</string>\n    <string name=\"action_rename_category\">Byt namn på kategori</string>\n    <string name=\"action_move_category\">Välj kategorier</string>\n    <string name=\"action_edit_cover\">Redigera omslaget</string>\n    <string name=\"action_pause\">Paus</string>\n    <string name=\"action_previous_chapter\">Föregående kapitel</string>\n    <string name=\"action_next_chapter\">Nästa kapitel</string>\n    <string name=\"action_retry\">Försök igen</string>\n    <string name=\"action_remove\">Ta bort</string>\n    <string name=\"action_resume\">Återuppta</string>\n    <string name=\"action_open_in_browser\">Öppna i webbläsaren</string>\n    <string name=\"action_display_mode\">Visningsläge</string>\n    <string name=\"action_display\">Visa</string>\n    <string name=\"action_display_grid\">Kompakt rutnät</string>\n    <string name=\"action_display_list\">Lista</string>\n    <string name=\"action_display_download_badge\">Nedladdade kapitel</string>\n    <string name=\"action_cancel\">Avbryt</string>\n    <string name=\"action_sort\">Sortera</string>\n    <string name=\"action_install\">Installera</string>\n    <string name=\"action_share\">Dela</string>\n    <string name=\"action_save\">Spara</string>\n    <string name=\"action_reset\">Återställ</string>\n    <string name=\"action_undo\">Ånga</string>\n    <string name=\"action_open_log\">Öppna logg</string>\n    <string name=\"action_restore\">Återställ</string>\n    <string name=\"loading\">Laddar…</string>\n    <string name=\"app_not_available\">Applikationen är inte tillgänglig</string>\n    <string name=\"pref_category_general\">Allmänt</string>\n    <string name=\"pref_category_reader\">Läsare</string>\n    <string name=\"pref_category_downloads\">Nedladdningar</string>\n    <string name=\"pref_category_tracking\">Spårning</string>\n    <string name=\"pref_category_advanced\">Avancerat</string>\n    <string name=\"pref_category_about\">Om appen</string>\n    <string name=\"pref_library_columns\">Objekt per rad</string>\n    <string name=\"portrait\">Porträtt</string>\n    <string name=\"landscape\">Landskap</string>\n    <string name=\"pref_library_update_interval\">Automatiska uppdateringar</string>\n    <string name=\"update_never\">Av</string>\n    <string name=\"update_6hour\">Var 6:e timme</string>\n    <string name=\"update_12hour\">Var 12:e timme</string>\n    <string name=\"update_24hour\">Dagligen</string>\n    <string name=\"update_48hour\">Varannan dag</string>\n    <string name=\"update_weekly\">Varje vecka</string>\n    <string name=\"all\">Alla</string>\n    <string name=\"pref_library_update_restriction\">Automatiska uppdateringar av enhetsbegränsningar</string>\n    <string name=\"charging\">Vid laddning</string>\n    <string name=\"pref_update_only_non_completed\">Hoppa över artiklar med status \\\"Avslutat\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Uppdatera förlopp efter läsning</string>\n    <string name=\"default_category\">Standardkategori</string>\n    <string name=\"default_category_summary\">Fråga alltid</string>\n    <string name=\"ext_update\">Uppdatera</string>\n    <string name=\"ext_install\">Installera</string>\n    <string name=\"ext_pending\">Väntade</string>\n    <string name=\"ext_downloading\">Laddar ner</string>\n    <string name=\"ext_installing\">Installerar</string>\n    <string name=\"ext_installed\">Installerad</string>\n    <string name=\"ext_trust\">Förtroende</string>\n    <string name=\"ext_untrusted\">Opålitlig</string>\n    <string name=\"ext_uninstall\">Avinstallera</string>\n    <string name=\"untrusted_extension\">Opålitlig extension</string>\n    <string name=\"untrusted_extension_message\">Ett skadligt tillägg kan läsa lagrade inloggningsuppgifter eller köra arbiträr kod.\n\\n\n\\nGenom att lita på detta tillägg accepterar du dessa risker.</string>\n    <string name=\"pref_fullscreen\">Fullskärm</string>\n    <string name=\"pref_page_transitions\">Animera sidbyten</string>\n    <string name=\"pref_double_tap_anim_speed\">Animationshastighet för dubbelklick</string>\n    <string name=\"pref_show_page_number\">Visa sidnummer</string>\n    <string name=\"pref_crop_borders\">Beskär kanter</string>\n    <string name=\"pref_custom_brightness\">Anpassad ljusstyrka</string>\n    <string name=\"pref_custom_color_filter\">Anpassad färgfilter</string>\n    <string name=\"pref_keep_screen_on\">Håll skärmen på</string>\n    <string name=\"pref_reader_navigation\">Navigering</string>\n    <string name=\"pref_read_with_volume_keys\">Volymknapparna</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Invertera volymknapparna</string>\n    <string name=\"pref_reader_theme\">Bakgrundsfärg</string>\n    <string name=\"white_background\">Vit</string>\n    <string name=\"black_background\">Svart</string>\n    <string name=\"pref_viewer_type\">Standardläsläge</string>\n    <string name=\"left_to_right_viewer\">Sidor (vänster till höger)</string>\n    <string name=\"right_to_left_viewer\">Sidor (höger till vänster)</string>\n    <string name=\"vertical_viewer\">Sidformat (vertikalt)</string>\n    <string name=\"webtoon_viewer\">Lång remsa</string>\n    <string name=\"pager_viewer\">Sidläsare</string>\n    <string name=\"pref_image_scale_type\">Bildanpassning</string>\n    <string name=\"scale_type_fit_screen\">Passa skärmen</string>\n    <string name=\"scale_type_stretch\">Sträck ut</string>\n    <string name=\"scale_type_fit_width\">Passa bredd</string>\n    <string name=\"scale_type_fit_height\">Passa höjd</string>\n    <string name=\"scale_type_original_size\">Originalstorlek</string>\n    <string name=\"scale_type_smart_fit\">Smart passning</string>\n    <string name=\"pref_zoom_start\">Startposition på Zoom</string>\n    <string name=\"zoom_start_automatic\">Automatisk</string>\n    <string name=\"zoom_start_left\">Vänster</string>\n    <string name=\"zoom_start_right\">Höger</string>\n    <string name=\"zoom_start_center\">Mitten</string>\n    <string name=\"double_tap_anim_speed_0\">Ingen animering</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Snabb</string>\n    <string name=\"pref_rotation_type\">Standard rotation</string>\n    <string name=\"rotation_free\">Upplåst</string>\n    <string name=\"rotation_force_portrait\">Låst porträtt</string>\n    <string name=\"rotation_force_landscape\">Låst liggande</string>\n    <string name=\"color_filter_r_value\">Röd</string>\n    <string name=\"color_filter_g_value\">Grön</string>\n    <string name=\"color_filter_b_value\">Blå</string>\n    <string name=\"color_filter_a_value\">Transparens</string>\n    <string name=\"pref_remove_after_marked_as_read\">Efter manuellt markerad som läst</string>\n    <string name=\"pref_remove_after_read\">Ta bort automatiskt efter läsning</string>\n    <string name=\"disabled\">Inaktiverad</string>\n    <string name=\"last_read_chapter\">Senaste lästa kapitel</string>\n    <string name=\"second_to_last\">Näst sist lästa kapitel</string>\n    <string name=\"third_to_last\">Tredje till sist lästa kapitlet</string>\n    <string name=\"fourth_to_last\">Fjärde till sista lästa kapitlet</string>\n    <string name=\"fifth_to_last\">Femte till sist lästa kapitlet</string>\n    <string name=\"pref_download_new\">Ladda ner nya kapitel</string>\n    <string name=\"services\">Spårare</string>\n    <string name=\"pref_create_backup\">Skapa säkerhetskopia</string>\n    <string name=\"pref_create_backup_summ\">Kan användas för att återställa biblioteket</string>\n    <string name=\"pref_restore_backup\">Återställ säkerhetskopia</string>\n    <string name=\"pref_restore_backup_summ\">Återställ biblioteket från en säkerhetskopia</string>\n    <string name=\"pref_backup_interval\">Automatisk säkerhetskopieringsfrekvens</string>\n    <string name=\"backup_created\">Säkerhetskopia skapad</string>\n    <string name=\"restore_completed\">Återställning slutförd</string>\n    <string name=\"backup_choice\">Vad vill du säkerhetskopiera?</string>\n    <string name=\"restoring_backup\">Återställer säkerhetskopia</string>\n    <string name=\"creating_backup\">Skapar säkerhetskopia</string>\n    <string name=\"pref_clear_chapter_cache\">Rensa kapitelcache</string>\n    <string name=\"used_cache\">Används: %1$s</string>\n    <string name=\"cache_deleted\">Cache rensad, %1$d filer togs bort</string>\n    <string name=\"cache_delete_error\">Fel inträffade vid rensning</string>\n    <string name=\"pref_clear_cookies\">Radera cookies</string>\n    <string name=\"cookies_cleared\">Cookies rensade</string>\n    <string name=\"pref_clear_database\">Rensa databas</string>\n    <string name=\"pref_clear_database_summary\">Ta bort historik för inlägg som inte finns i ditt bibliotek</string>\n    <string name=\"clear_database_confirmation\">Är du säker på det? Lästa kapitel och framsteg för poster som inte finns i biblioteket kommer att gå förlorade</string>\n    <string name=\"clear_database_completed\">Inlägg raderade</string>\n    <string name=\"version\">Version</string>\n    <string name=\"pref_enable_acra\">Skicka kraschrapporter</string>\n    <string name=\"pref_acra_summary\">Hjälper till att fixa eventuella buggar. Inga känsliga uppgifter skickas</string>\n    <string name=\"login_title\">Logga in för %1$s</string>\n    <string name=\"username\">Användarnamn</string>\n    <string name=\"password\">Lösenord</string>\n    <string name=\"login\">Logga in</string>\n    <string name=\"login_success\">Inloggad</string>\n    <string name=\"unknown_error\">Okänt fel</string>\n    <string name=\"updating_category\">Uppdaterar kategori</string>\n    <string name=\"no_more_results\">Inga mer resultat</string>\n    <string name=\"local_source\">Lokal källa</string>\n    <string name=\"other_source\">Andra</string>\n    <string name=\"action_global_search_hint\">Global sökning…</string>\n    <string name=\"latest\">Senaste</string>\n    <string name=\"browse\">Bläddra</string>\n    <string name=\"ongoing\">Pågående</string>\n    <string name=\"unknown\">Okänd</string>\n    <string name=\"licensed\">Licensierad</string>\n    <string name=\"remove_from_library\">Ta bort från biblioteket</string>\n    <string name=\"manga_added_library\">Lades till i biblioteket</string>\n    <string name=\"manga_removed_library\">Togs bort från biblioteket</string>\n    <string name=\"delete_downloads_for_manga\">Ta bort nedladdade kapitel?</string>\n    <string name=\"copied_to_clipboard\">Kopierat till urklipp:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Källa inte installerad: %1$s</string>\n    <string name=\"display_mode_chapter\">Kapitel %1$s</string>\n    <string name=\"chapter_downloading_progress\">Laddar ner (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Fel</string>\n    <string name=\"chapter_paused\">Pausad</string>\n    <string name=\"show_title\">Källtitel</string>\n    <string name=\"show_chapter_number\">Kapitelnummer</string>\n    <string name=\"sort_by_source\">Efter källa</string>\n    <string name=\"sort_by_number\">Efter kapitelnummer</string>\n    <string name=\"manga_download\">Ladda ner</string>\n    <string name=\"download_unread\">Olästa</string>\n    <string name=\"confirm_delete_chapters\">Är du säker på att du vill radera valda kapitel?</string>\n    <string name=\"manga_tracking_tab\">Spårning</string>\n    <string name=\"reading\">Läser</string>\n    <string name=\"completed\">Färdig</string>\n    <string name=\"dropped\">Slutat läsa</string>\n    <string name=\"on_hold\">Pausad</string>\n    <string name=\"plan_to_read\">Planerar att läsa</string>\n    <string name=\"repeating\">Läser om</string>\n    <string name=\"score\">Betyg</string>\n    <string name=\"title\">Titel</string>\n    <string name=\"status\">Status</string>\n    <string name=\"track_status\">Status</string>\n    <string name=\"track_type\">Typ</string>\n    <string name=\"error_category_exists\">En kategori med detta namn finns redan!</string>\n    <string name=\"snack_categories_deleted\">Kategorier raderade</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Detta kommer att ta bort läs datumet för detta kapitel. Är du säker?</string>\n    <string name=\"dialog_with_checkbox_reset\">Återställ alla kapitel för denna post</string>\n    <string name=\"snack_add_to_library\">Lägg till i biblioteket?</string>\n    <string name=\"picture_saved\">Bild sparad</string>\n    <string name=\"custom_filter\">Anpassat filter</string>\n    <string name=\"set_as_cover\">Ställ in som omslag</string>\n    <string name=\"cover_updated\">Omslag uppdaterad</string>\n    <string name=\"chapter_progress\">Sida: %1$d</string>\n    <string name=\"no_next_chapter\">Nästa kapitel kunde inte hittas</string>\n    <string name=\"decode_image_error\">Bilden kunde inte laddas</string>\n    <string name=\"confirm_set_image_as_cover\">Sätt bild som omslag?</string>\n    <string name=\"transition_finished\">Färdig:</string>\n    <string name=\"transition_current\">Nuvarande:</string>\n    <string name=\"transition_next\">Nästa:</string>\n    <string name=\"transition_previous\">Föregående:</string>\n    <string name=\"transition_no_next\">Det finns inget mer kapitel</string>\n    <string name=\"transition_no_previous\">Det finns inget tidigare kapitel</string>\n    <string name=\"transition_pages_loading\">Laddar sidor…</string>\n    <string name=\"transition_pages_error\">Misslyckades att ladda sidor: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Välj data som ska inkluderas</string>\n    <string name=\"migrate\">Migrera</string>\n    <string name=\"copy\">Kopiera</string>\n    <string name=\"download_queue_error\">Kunde inte ladda ned kapitlen. Du kan försöka igen i nedladdningssektionen</string>\n    <string name=\"notification_new_chapters\">Nya kapitel hittades</string>\n    <string name=\"notification_cover_update_failed\">Misslyckades att uppdatera omslag</string>\n    <string name=\"notification_first_add_to_library\">Vänligen lägg till post i ditt bibliotek innan du gör detta</string>\n    <string name=\"file_select_cover\">Välj omslagsbild</string>\n    <string name=\"file_select_backup\">Välj säkerhetskopia</string>\n    <string name=\"update_check_confirm\">Ladda ner</string>\n    <string name=\"update_check_no_new_updates\">Inga nya uppdateringar tillgängliga</string>\n    <string name=\"update_check_notification_download_in_progress\">Laddar ner…</string>\n    <string name=\"update_check_notification_download_complete\">Tryck för att installera uppdateringen</string>\n    <string name=\"update_check_notification_download_error\">Nedladdningsfel</string>\n    <string name=\"update_check_notification_update_available\">Ny version tillgänglig!</string>\n    <string name=\"information_no_downloads\">Inga nedladdningar</string>\n    <string name=\"information_no_recent\">Inga nya uppdateringar</string>\n    <string name=\"information_no_recent_manga\">Inget nyligen läst</string>\n    <string name=\"information_empty_library\">Ditt bibliotek är tomt</string>\n    <string name=\"information_empty_category\">Du har inga kategorier. Tryck på plusknappen för att skapa en för att organisera ditt bibliotek.</string>\n    <string name=\"download_notifier_downloader_title\">Nedladdare</string>\n    <string name=\"download_notifier_title_error\">Fel</string>\n    <string name=\"download_notifier_unknown_error\">Kunde inte ladda ned kapitel på grund av ett oförväntat fel</string>\n    <string name=\"download_notifier_text_only_wifi\">Ingen WiFi-anslutning tillgänglig</string>\n    <string name=\"download_notifier_no_network\">Ingen nätverksanslutning tillgänglig</string>\n    <string name=\"download_notifier_download_paused\">Nedladdningar pausade</string>\n    <string name=\"channel_common\">Vanlig</string>\n    <string name=\"action_open_in_web_view\">Öppna i WebView</string>\n    <string name=\"pref_skip_read_chapters\">Hoppa över lästa kapitel</string>\n    <string name=\"pref_read_with_long_tap\">Visa åtgärder vid lång tryckning</string>\n    <string name=\"pref_color_filter_mode\">Färgfilterblandningsläge</string>\n    <string name=\"filter_mode_overlay\">Överlägg</string>\n    <string name=\"filter_mode_multiply\">Multiplicera</string>\n    <string name=\"filter_mode_screen\">Skärm</string>\n    <string name=\"filter_mode_lighten\">Ljusna</string>\n    <string name=\"filter_mode_darken\">Mörkna</string>\n    <string name=\"label_help\">Hjälp</string>\n    <string name=\"no_results_found\">Inga resultat funna</string>\n    <string name=\"migration_selection_prompt\">Välj en källa att migrera ifrån</string>\n    <string name=\"action_webview_back\">Bakåt</string>\n    <string name=\"action_webview_forward\">Framåt</string>\n    <string name=\"action_webview_refresh\">Uppdatera</string>\n    <string name=\"pref_category_library\">Bibliotek</string>\n    <string name=\"ext_obsolete\">Obsolet</string>\n    <string name=\"obsolete_extension_message\">Detta tillägg är inte längre tillgängligt. Det kanske inte fungerar korrekt och kan orsaka problem med appen. Vi rekommenderar att du avinstallerar det.</string>\n    <string name=\"pref_date_format\">Datumformat</string>\n    <string name=\"pref_category_library_update\">Global uppdatering</string>\n    <string name=\"logout_title\">Logga ut från %1$s?</string>\n    <string name=\"logout\">Logga ut</string>\n    <string name=\"logout_success\">Du är nu utloggad</string>\n    <string name=\"paused\">Pausad</string>\n    <string name=\"label_more\">Mer</string>\n    <string name=\"action_sort_latest_chapter\">Senaste kapitel</string>\n    <string name=\"action_view_chapters\">Visa kapitel</string>\n    <string name=\"action_cancel_all\">Avbryt alla</string>\n    <string name=\"theme_light\">Ljus</string>\n    <string name=\"theme_dark\">Mörk</string>\n    <string name=\"theme_system\">System</string>\n    <string name=\"pref_manage_notifications\">Hantera aviseringar</string>\n    <string name=\"pref_category_security\">Säkerhet och integritet</string>\n    <string name=\"lock_with_biometrics\">Kräver upplåsning</string>\n    <string name=\"lock_when_idle\">Lås vid inaktivitet</string>\n    <string name=\"lock_always\">Alltid</string>\n    <string name=\"lock_never\">Aldrig</string>\n    <string name=\"secure_screen\">Säker skärm</string>\n    <string name=\"ext_updates_pending\">Uppdateringar väntar</string>\n    <string name=\"pref_cutout_short\">Visa innehåll i utskärningsområdet</string>\n    <string name=\"information_cloudflare_bypass_failure\">Det gick inte att kringgå Cloudflare</string>\n    <string name=\"information_webview_outdated\">Uppdatera WebView-appen för bättre kompatibilitet</string>\n    <string name=\"channel_new_chapters\">Kapiteluppdateringar</string>\n    <string name=\"secure_screen_summary\">Säker skärm döljer appinnehållet när du byter app och blockerar skärmdumpar</string>\n    <string name=\"pref_category_display\">Skärmvisning</string>\n    <string name=\"notification_chapters_single\">Kapitel %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Kapitel %1$s och %2$d till</string>\n    <string name=\"notification_chapters_multiple\">Kapitlen %1$s</string>\n    <string name=\"hide_notification_content\">Dölj notisinnehåll</string>\n    <string name=\"pref_disable_battery_optimization\">Inaktivera batterioptimering</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Hjälper till med uppdateringar och säkerhetskopior i bakgrunden</string>\n    <string name=\"battery_optimization_disabled\">Batterioptimering är redan inaktiverat</string>\n    <string name=\"email\">E-postadress</string>\n    <string name=\"pref_always_show_chapter_transition\">Visa alltid kapitelövergång</string>\n    <string name=\"action_menu\">Meny</string>\n    <string name=\"action_newest\">Nyaste</string>\n    <string name=\"action_oldest\">Äldsta</string>\n    <string name=\"action_move_to_top\">Flytta till toppen</string>\n    <string name=\"action_move_to_bottom\">Flytta till botten</string>\n    <string name=\"channel_ext_updates\">Tilläggsuppdateringar</string>\n    <string name=\"updating_library\">Uppdaterar biblioteket</string>\n    <string name=\"pref_category_reading\">Läser</string>\n    <string name=\"pref_skip_filtered_chapters\">Hoppa över filtrerade kapitel</string>\n    <string name=\"label_sources\">Källor</string>\n    <string name=\"add_tracking\">Lägg till spårning</string>\n    <string name=\"in_library\">I biblioteket</string>\n    <string name=\"add_to_library\">Lägg till i biblioteket</string>\n    <string name=\"pinned_sources\">Nålad</string>\n    <string name=\"pref_webtoon_side_padding\">Sidofyllning</string>\n    <string name=\"vertical_plus_viewer\">Lång remsa med mellanrum</string>\n    <string name=\"action_unpin\">Lossa</string>\n    <string name=\"action_pin\">Nåla</string>\n    <string name=\"action_select_inverse\">Välj omvänd</string>\n    <string name=\"manga_info_collapse\">Mindre</string>\n    <string name=\"manga_info_expand\">Mer</string>\n    <string name=\"information_webview_required\">WebView krävs för att appen ska fungera</string>\n    <string name=\"recent_manga_time\">Kapitel %1$s - %2$s</string>\n    <string name=\"local_source_help_guide\">Lokal källa guide</string>\n    <string name=\"last_used_source\">Senast använd</string>\n    <string name=\"check_for_updates\">Sök efter uppdateringar</string>\n    <string name=\"licenses\">Open source-licenser</string>\n    <string name=\"website\">Hemsida</string>\n    <string name=\"restoring_backup_canceled\">Avbruten återställning</string>\n    <string name=\"restoring_backup_error\">Återställning av säkerhetskopiering misslyckades</string>\n    <string name=\"restore_in_progress\">Återställningen pågår redan</string>\n    <string name=\"creating_backup_error\">Säkerhetskopiering misslyckades</string>\n    <string name=\"backup_in_progress\">Säkerhetskopiering pågår redan</string>\n    <string name=\"restore_duration\">%1$02d minuter, %2$02d sekunder</string>\n    <string name=\"label_downloaded_only\">Endast nedladdat</string>\n    <string name=\"downloaded_only_summary\">Filtrerar alla poster i ditt bibliotek</string>\n    <string name=\"viewer\">Läsläge</string>\n    <string name=\"pref_category_for_this_series\">För denna serie</string>\n    <string name=\"gray_background\">Grå</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Det gick inte att öppna enhetsinställningarna</string>\n    <string name=\"pref_refresh_library_covers\">Uppdatera bibliotekets omslag</string>\n    <string name=\"tracking_info\">Envägssynkronisering för att uppdatera kapitlets framsteg i externa spårningstjänster. Ställ in spårning för enskilda poster från deras spårningsknapp.</string>\n    <string name=\"sort_by_upload_date\">Efter uppladdningsdatum</string>\n    <string name=\"label_data\">Data</string>\n    <string name=\"backup_restore_missing_sources\">Saknade källor:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Säkerhetskopian innehåller inga biblioteksposter.</string>\n    <string name=\"invalid_backup_file\">Ogiltig säkerhetskopiafil:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Sök efter nytt omslag och detaljer när du uppdaterar biblioteket</string>\n    <string name=\"pref_library_update_refresh_metadata\">Uppdatera metadata automatiskt</string>\n    <string name=\"action_migrate\">Migrera</string>\n    <string name=\"action_disable_all\">Inaktivera alla</string>\n    <string name=\"page_list_empty_error\">Hittade inga sidor</string>\n    <string name=\"tabs_header\">Flikar</string>\n    <string name=\"pref_show_reading_mode_summary\">Visa nuvarande läge när läsaren öppnas</string>\n    <string name=\"pref_show_reading_mode\">Visa läsläge</string>\n    <string name=\"action_display_show_tabs\">Visa kategoriflikar</string>\n    <string name=\"action_display_comfortable_grid\">Komfortabelt rutnät</string>\n    <string name=\"action_enable_all\">Aktivera alla</string>\n    <string name=\"action_start\">Start</string>\n    <string name=\"tapping_inverted_both\">Både</string>\n    <string name=\"tapping_inverted_vertical\">Vertikal</string>\n    <string name=\"tapping_inverted_horizontal\">Horisontell</string>\n    <string name=\"tapping_inverted_none\">Ingen</string>\n    <string name=\"pref_read_with_tapping_inverted\">Invertera tryckzoner</string>\n    <string name=\"loader_not_implemented_error\">Källan hittades inte</string>\n    <string name=\"unknown_status\">Okänd status</string>\n    <string name=\"unknown_author\">Okänd författare</string>\n    <string name=\"requires_app_restart\">Kräver omstart av appen för att börja gälla</string>\n    <string name=\"label_network\">Nätverk</string>\n    <string name=\"action_disable\">Inaktivera</string>\n    <string name=\"download_insufficient_space\">Det gick inte att ladda ner kapitelt på grund av lågt lagringsutrymme</string>\n    <string name=\"action_global_search_query\">Sök efter \\\"%1$s\\\" globalt</string>\n    <string name=\"updated_version\">Uppdaterad till v%1$s</string>\n    <string name=\"whats_new\">Vad är nytt</string>\n    <string name=\"pref_category_reading_mode\">Läsläge</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"action_sort_date_added\">Datum tillagd</string>\n    <string name=\"channel_complete\">Färdig</string>\n    <string name=\"channel_progress\">Förlopp</string>\n    <string name=\"no_pinned_sources\">Du har inga fästa källor</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Tillåt att radera bokmärkta kapitel</string>\n    <string name=\"pref_category_delete_chapters\">Ta bort kapitel</string>\n    <string name=\"ext_nsfw_warning\">Källor från detta tillägg kan innehålla NSFW(18+) innehåll</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"backup_restore_missing_trackers\">Spårare som inte har loggats in:</string>\n    <string name=\"parental_controls_info\">Detta förhindrar inte inofficiella eller potentiellt felaktigt flaggade tillägg från att visa NSFW(18+) innehåll i appen.</string>\n    <string name=\"channel_errors\">Fel</string>\n    <string name=\"chapter_settings_updated\">Uppdaterade standardinställningar för kapitel</string>\n    <string name=\"confirm_set_chapter_settings\">Vill du spara de här inställningarna som standard?</string>\n    <string name=\"share_page_info\">%1$s: %2$s, sida %3$d</string>\n    <string name=\"no_chapters_error\">Inga kapitel hittades</string>\n    <string name=\"set_chapter_settings_as_default\">Ange som standard</string>\n    <string name=\"also_set_chapter_settings_for_library\">Gäller även alla inlägg i biblioteket</string>\n    <string name=\"chapter_settings\">Kapitelinställningar</string>\n    <string name=\"downloaded_chapters\">Nedladdade kapitel</string>\n    <string name=\"manga_from_library\">Från biblioteket</string>\n    <string name=\"pref_incognito_mode_summary\">Pausar läshistoriken</string>\n    <string name=\"pref_incognito_mode\">Inkognitoläge</string>\n    <string name=\"pref_clear_history\">Rensa historik</string>\n    <string name=\"clear_history_confirmation\">Är du säker? All historik kommer att försvinna.</string>\n    <string name=\"clear_history_completed\">Historiken har tagits bort</string>\n    <string name=\"action_search_settings\">Sök inställningar</string>\n    <string name=\"spen_next_page\">Nästa sida</string>\n    <string name=\"spen_previous_page\">Föregående sida</string>\n    <string name=\"migration_help_guide\">Migreringsguide för källor</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) källor</string>\n    <string name=\"pref_show_nsfw_source\">Visa i källor och tilläggslistor</string>\n    <string name=\"file_picker_error\">Ingen filväljare-app hittades</string>\n    <string name=\"myanimelist_relogin\">Vänligen logga in på MAL igen</string>\n    <string name=\"pref_dump_crash_logs_summary\">Sparar felloggar till en fil för delning med utvecklarna</string>\n    <string name=\"pref_dump_crash_logs\">Dela kraschloggar</string>\n    <string name=\"action_desc\">Fallande</string>\n    <string name=\"action_order_by_chapter_number\">Efter kapitelnummer</string>\n    <string name=\"action_order_by_upload_date\">Efter uppladdningsdatum</string>\n    <string name=\"action_asc\">Stigande</string>\n    <string name=\"track_finished_reading_date\">Slutdatum</string>\n    <string name=\"track_started_reading_date\">Start datum</string>\n    <string name=\"pref_viewer_nav\">Tryckzoner</string>\n    <string name=\"edge_nav\">Kant</string>\n    <string name=\"kindlish_nav\">Kindle-lik</string>\n    <string name=\"l_nav\">L-formad</string>\n    <string name=\"action_filter_tracked\">Spåras</string>\n    <string name=\"right_and_left_nav\">Höger och Vänster</string>\n    <string name=\"action_display_show_number_of_items\">Visa antal objekt</string>\n    <string name=\"pref_dual_page_split\">Delning av breda sidor</string>\n    <string name=\"backup_restore_content_full\">Du måste installera eventuella tillägg som saknas och logga in på spårningstjänster efteråt för att kunna använda dem.</string>\n    <string name=\"nav_zone_right\">Höger</string>\n    <string name=\"nav_zone_left\">Vänster</string>\n    <string name=\"nav_zone_next\">Nästa</string>\n    <string name=\"nav_zone_prev\">Föregående</string>\n    <string name=\"pref_dual_page_invert_summary\">Om placeringen av delning av breda sidor inte matchar läsriktningen</string>\n    <string name=\"pref_dual_page_invert\">Invertera placering av delad sida</string>\n    <string name=\"pref_show_navigation_mode_summary\">Visa kort när läsaren öppnas</string>\n    <string name=\"pref_show_navigation_mode\">Visa överlägg för tryckzoner</string>\n    <string name=\"pref_dns_over_https\">DNS över HTTPS (DoH)</string>\n    <string name=\"exclude\">Exkludera: %s</string>\n    <string name=\"include\">Inkludera: %s</string>\n    <string name=\"none\">Ingen</string>\n    <string name=\"action_sort_chapter_fetch_date\">Datum för hämtning av kapitel</string>\n    <string name=\"pref_download_new_categories_details\">Inlägg i uteslutna kategorier laddas inte ner även om de också ingår i inkluderade kategorier.</string>\n    <string name=\"pref_category_auto_download\">Ladda ned automatiskt</string>\n    <string name=\"pref_library_update_categories_details\">Inlägg i uteslutna kategorier uppdateras inte även om de också ingår i inkluderade kategorier.</string>\n    <string name=\"action_show_errors\">Tryck för att se detaljer</string>\n    <string name=\"update_check_eol\">Denna Android-version stöds inte längre</string>\n    <string name=\"clipboard_copy_error\">Kunde inte kopiera till urklipp</string>\n    <string name=\"rotation_landscape\">Liggande</string>\n    <string name=\"rotation_portrait\">Porträtt</string>\n    <string name=\"rotation_type\">Rotation</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Skapar mappar enligt posternas titel</string>\n    <string name=\"pref_create_folder_per_manga\">Spara sidor i separata mappar</string>\n    <string name=\"pref_reader_actions\">Åtgärder</string>\n    <string name=\"pref_grayscale\">Gråskala</string>\n    <string name=\"automatic_background\">Automatisk</string>\n    <string name=\"notification_incognito_text\">Inaktivera inkognitoläge</string>\n    <string name=\"cancel_all_for_series\">Avbryt alla för denna serie</string>\n    <string name=\"error_no_match\">Ingen matchning hittad</string>\n    <string name=\"source_unsupported\">Källan stöds inte</string>\n    <string name=\"unread\">Oläst</string>\n    <string name=\"date\">Datum</string>\n    <string name=\"local_filter_order_by\">Sortera efter</string>\n    <string name=\"local_invalid_format\">Ogiltigt kapitelformat</string>\n    <string name=\"chapter_not_found\">Kapitlet hittades inte</string>\n    <string name=\"restrictions\">Begränsningar: %s</string>\n    <string name=\"action_display_local_badge\">Lokal källa</string>\n    <string name=\"off\">Av</string>\n    <string name=\"on\">På</string>\n    <string name=\"error_sharing_cover\">Fel vid delning av omslag</string>\n    <string name=\"error_saving_cover\">Det gick inte att spara omslaget</string>\n    <string name=\"cover_saved\">Omslaget har sparats</string>\n    <string name=\"manga_cover\">Omslag</string>\n    <string name=\"tracking_guide\">Spårningsguide</string>\n    <string name=\"categorized_display_settings\">Inställningar per kategori för sortering</string>\n    <string name=\"information_empty_category_dialog\">Du har inga kategorier ännu.</string>\n    <string name=\"action_start_downloading_now\">Börja ladda ner nu</string>\n    <string name=\"restore_miui_warning\">Säkerhetskopiering/återställning kanske inte fungerar korrekt om MIUI-optimering är inaktiverat.</string>\n    <string name=\"enhanced_tracking_info\">Ger förbättrade funktioner för specifika källor. Poster spåras automatiskt när de läggs till i ditt bibliotek.</string>\n    <string name=\"enhanced_services\">Förbättrade spårare</string>\n    <string name=\"pref_dark_theme_pure_black\">Rent svart mörkt läge</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin och yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Jordgubbsdaiquiri</string>\n    <string name=\"theme_midnightdusk\">Midnattskymning</string>\n    <string name=\"theme_greenapple\">Grönt äpple</string>\n    <string name=\"theme_monet\">Dynamisk</string>\n    <string name=\"pref_app_theme\">App-tema</string>\n    <string name=\"about_dont_kill_my_app\">Vissa tillverkare har ytterligare appbegränsningar som dödar bakgrundstjänster. Denna webbplats har mer information om hur du åtgärdar det.</string>\n    <string name=\"label_background_activity\">Bakgrundsaktivitet</string>\n    <string name=\"pref_lowest\">Lägsta</string>\n    <string name=\"pref_low\">Låg</string>\n    <string name=\"pref_high\">Hög</string>\n    <string name=\"pref_highest\">Högsta</string>\n    <string name=\"pref_hide_threshold\">Känslighet för att dölja menyn vid rullning</string>\n    <string name=\"pref_inverted_colors\">Omvänd</string>\n    <string name=\"relative_time_today\">Idag</string>\n    <string name=\"theme_tealturquoise\">Teal och turkos</string>\n    <string name=\"pref_category_appearance\">Utseende</string>\n    <string name=\"confirm_lock_change\">Autentisera för att bekräfta ändringen</string>\n    <string name=\"label_default\">Standard</string>\n    <string name=\"getting_started_guide\">Komma igång guide</string>\n    <string name=\"action_track\">Spår</string>\n    <string name=\"pref_tablet_ui_mode\">Tablettgränssnitt</string>\n    <string name=\"help_translate\">Hjälp till med översättning</string>\n    <string name=\"pref_remove_exclude_categories\">Uteslutna kategorier</string>\n    <string name=\"ext_app_info\">Appinformation</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku körs inte</string>\n    <string name=\"ext_installer_legacy\">Äldre</string>\n    <string name=\"ext_installer_pref\">Installatör</string>\n    <string name=\"ext_install_service_notif\">Installerar tillägg…</string>\n    <string name=\"action_sort_count\">Totalt antal inlägg</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Installera och starta Shizuku för att använda Shizuku som tilläggsinstallationsprogram.</string>\n    <string name=\"pref_verbose_logging_summary\">Skriv ut utförliga loggar till systemloggen (minskar appprestanda)</string>\n    <string name=\"backup_info\">Du bör även spara kopior av säkerhetskopior på andra platser. Säkerhetskopior kan innehålla känsliga uppgifter, t.ex. lagrade lösenord; var försiktig om du delar dem.</string>\n    <string name=\"pref_verbose_logging\">Omfattande loggning</string>\n    <string name=\"label_warning\">Varning</string>\n    <string name=\"action_display_language_badge\">Språk</string>\n    <string name=\"connected_to_wifi\">Bara över Wi-Fi</string>\n    <string name=\"notification_size_warning\">Stora uppdateringar skadar källor och kan leda till långsammare uppdateringar samt en ökad batterianvändning. Tryck för att få veta mer.</string>\n    <string name=\"download_queue_size_warning\">Varning: stora massnerladdningar kan leda till att källor blir långsamma och/eller blockerar Mihon. Tryck för att få veta mer.</string>\n    <string name=\"update_72hour\">Var 3:e dag</string>\n    <string name=\"ext_update_all\">Uppdatera alla</string>\n    <string name=\"channel_app_updates\">Appuppdateringar</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Rensa kapitelcache när appen startas</string>\n    <string name=\"clear_database_source_item_count\">%1$d icke-biblioteksposter i databasen</string>\n    <string name=\"database_clean\">Inget att rensa</string>\n    <string name=\"library_errors_help\">För hjälp med att åtgärda fel i biblioteksuppdateringar, se %1$s</string>\n    <string name=\"cancelled\">Avbruten</string>\n    <string name=\"on_hiatus\">På uppehåll</string>\n    <string name=\"publishing_finished\">Publiceringen avslutad</string>\n    <string name=\"save_chapter_as_cbz\">Spara som CBZ-arkiv</string>\n    <string name=\"privacy_policy\">Integritetspolicy</string>\n    <string name=\"pref_update_only_completely_read\">Hoppa över artiklar med olästa kapitel</string>\n    <string name=\"extension_api_error\">Kunde inte hämta tillgängliga tillägg</string>\n    <string name=\"action_show_manga\">Visa inlägg</string>\n    <string name=\"action_display_cover_only_grid\">Endast omslags-rutnät</string>\n    <string name=\"pref_update_only_started\">Hoppa över artiklar som ej är påbörjade</string>\n    <string name=\"pref_navigate_pan\">Panorera breda sidor</string>\n    <string name=\"pref_landscape_zoom\">Automatiskt zoomning i stora bilder</string>\n    <string name=\"skipped_reason_completed\">Hoppade över eftersom serien är klar</string>\n    <string name=\"skipped_reason_not_caught_up\">Hoppade över eftersom det finns olästa kapitel</string>\n    <string name=\"skipped_reason_not_started\">Hoppade över eftersom inga kapitel läses</string>\n    <string name=\"learn_more\">Tryck på för att få veta mer</string>\n    <string name=\"notification_update_error\">%1$d uppdatering(ar) misslyckades</string>\n    <string name=\"rotation_reverse_portrait\">Omvänt porträtt</string>\n    <string name=\"action_move_to_top_all_for_series\">Flytta serien till toppen</string>\n    <string name=\"disabled_nav\">Inaktiverad</string>\n    <string name=\"error_saving_picture\">Fel vid lagring av bild</string>\n    <string name=\"empty_backup_error\">Inga biblioteksposter att säkerhetskopiera</string>\n    <string name=\"update_check_open\">Öppna på GitHub</string>\n    <string name=\"pref_clear_webview_data\">Rensa data från WebView</string>\n    <string name=\"webview_data_deleted\">WebView-data rensas</string>\n    <string name=\"action_close\">Stäng</string>\n    <string name=\"source_filter_empty_screen\">Ingen installerad källa hittades</string>\n    <string name=\"action_sort_last_manga_update\">Senaste uppdateringskontroll</string>\n    <string name=\"action_sort_unread_count\">Antal olästa</string>\n    <string name=\"split_tall_images_summary\">Förbättrar läsarens prestanda</string>\n    <string name=\"download_notifier_split_page_not_found\">Sida %d hittades inte under delning</string>\n    <string name=\"source_empty_screen\">Ingen källa hittad</string>\n    <string name=\"pref_reset_viewer_flags_error\">Kunde inte återställa läsarinställningarna</string>\n    <string name=\"pref_reset_viewer_flags\">Återställ läsinställningarna per serie</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Återställer läsläge och orientering för alla serier</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Kunde inte hitta filsökvägen för sida %d</string>\n    <string name=\"pref_reset_viewer_flags_success\">Återställning av läsarens inställningar</string>\n    <string name=\"network_not_metered\">Endast på nät utan mätning</string>\n    <string name=\"reading_list\">Läslista</string>\n    <string name=\"on_hold_list\">Väntelista</string>\n    <string name=\"unfinished_list\">Oavslutad lista</string>\n    <string name=\"empty_screen\">Det här är pinsamt</string>\n    <string name=\"wish_list\">Önskelista</string>\n    <string name=\"complete_list\">Klart lista</string>\n    <string name=\"ext_info_age_rating\">Åldersklassificering</string>\n    <string name=\"ext_info_version\">Version</string>\n    <string name=\"ext_info_language\">Språk</string>\n    <string name=\"cant_open_last_read_chapter\">Det går inte att öppna det senast lästa kapitlet</string>\n    <string name=\"not_installed\">Inte installerad</string>\n    <string name=\"custom_cover\">Anpassat omslag</string>\n    <string name=\"theme_lavender\">Lavendel</string>\n    <string name=\"description_placeholder\">Ingen beskrivning</string>\n    <string name=\"pref_app_language\">Appspråk</string>\n    <string name=\"delete_category_confirmation\">Vill du radera kategorin \\\"%s\\\"?</string>\n    <string name=\"internal_error\">Interntfel: Kontrollera kraschloggar för ytterligare information</string>\n    <string name=\"delete_category\">Ta bort kategori</string>\n    <string name=\"pref_user_agent_string\">Standardsträng för användaragent</string>\n    <string name=\"pref_reset_user_agent_string\">Återställ standardsträngen för användaragent</string>\n    <string name=\"action_remove_everything\">Ta bort allt</string>\n    <string name=\"appwidget_updates_description\">Se dina nyligen uppdaterade biblioteket inlägg</string>\n    <string name=\"appwidget_unavailable_locked\">Widget är inte tillgänglig när applåset är aktiverat</string>\n    <string name=\"update_already_running\">En uppdatering pågår redan</string>\n    <string name=\"multi_lang\">Flerspråkig</string>\n    <string name=\"error_user_agent_string_blank\">Strängen för användaragent kan inte vara tom</string>\n    <string name=\"are_you_sure\">Är du säker?</string>\n    <string name=\"updates_last_update_info\">Biblioteket uppdaterades senast: %s</string>\n    <string name=\"popular\">Populära</string>\n    <string name=\"remove_manga\">Du är på väg att ta bort \\\"%s\\\" från ditt bibliotek</string>\n    <string name=\"download_ahead\">Ladda ner i förväg</string>\n    <string name=\"theme_tidalwave\">Tidvattenvåg</string>\n    <string name=\"download_ahead_info\">Fungerar endast om det aktuella kapitlet + nästa redan har laddats ner.</string>\n    <string name=\"auto_download_while_reading\">Automatisk nedladdning under läsning</string>\n    <string name=\"pref_library_summary\">Kategorier, global uppdatering, kapitel svepning</string>\n    <string name=\"pref_reader_summary\">Läsläge, skärmvisning, navigering</string>\n    <string name=\"error_user_agent_string_invalid\">Ogiltig sträng för användaragent</string>\n    <string name=\"unknown_title\">Okänd titel</string>\n    <string name=\"updates_last_update_info_just_now\">Just nu</string>\n    <string name=\"action_search_hint\">Sök…</string>\n    <string name=\"pref_downloads_summary\">Automatisk nedladdning, ladda ned i förväg</string>\n    <string name=\"pref_tracking_summary\">Envägs synkronisering av framfart, förbättrad synkronisering</string>\n    <string name=\"pref_backup_summary\">Manuell och automatisk säkerhetskopiering, lagringsutrymme</string>\n    <string name=\"invalid_location\">Ogiltig plats: %s</string>\n    <string name=\"missing_storage_permission\">Lagrings rättigheter inte tillagda</string>\n    <string name=\"skipped_reason_not_always_update\">Hoppat över för att serien inte behöver uppdateras</string>\n    <string name=\"crash_screen_description\">%s stötte på ett oväntat fel. Vi föreslår att du delar med dig av kraschloggen i vår supportkanal på Discord.</string>\n    <string name=\"pref_appearance_summary\">Tema, datum och tids format</string>\n    <string name=\"pref_browse_summary\">Källor, tillägg, global sökning</string>\n    <string name=\"crash_screen_restart_application\">Starta om applikationen</string>\n    <string name=\"crash_screen_title\">Hoppsan!</string>\n    <string name=\"pref_advanced_summary\">Dumpa krasch logg, batterioptimering</string>\n    <string name=\"pref_security_summary\">Applikations lås, säkerhetsskärm</string>\n    <string name=\"label_stats\">Statistik</string>\n    <string name=\"label_started\">Påbörjade</string>\n    <string name=\"label_local\">Lokala</string>\n    <string name=\"label_downloaded\">Nedladdade</string>\n    <string name=\"enhanced_services_not_installed\">Tillgänglig men källan är ej installerad: %s</string>\n    <string name=\"pref_library_update_show_tab_badge\">Visa antal olästa på ikonen för Uppdateringar</string>\n    <string name=\"pref_skip_dupe_chapters\">Hoppa över duplicerade kapitel</string>\n    <string name=\"action_display_show_continue_reading_button\">Fortsätt läsa knapp</string>\n    <string name=\"action_not_now\">Inte nu</string>\n    <string name=\"action_open_random_manga\">Öppna en slumpmässig manga</string>\n    <string name=\"pref_invalidate_download_cache\">Omindexera nedladdningar</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Tvinga appen att läsa in nedladdade kapitel på nytt</string>\n    <string name=\"fdroid_warning\">F-Droid-versioner stöds inte officiellt.\n\\nTryck för att få veta mer.</string>\n    <string name=\"split_tall_images\">Dela höga bilder</string>\n    <string name=\"action_update_category\">Uppdatera kategori</string>\n    <string name=\"action_copy_to_clipboard\">Kopiera till urklipp</string>\n    <string name=\"pref_hide_in_library_items\">Dölja poster som redan finns i biblioteket</string>\n    <string name=\"download_notifier_cache_renewal\">Kontrollerar nedladdningar</string>\n    <string name=\"overlay_header\">Överlägg</string>\n    <string name=\"pref_page_rotate\">Rotera breda sidor så att de passar</string>\n    <string name=\"pref_page_rotate_invert\">Vänd orientering av roterade breda sidor</string>\n    <string name=\"information_required_plain\">*krävs</string>\n    <string name=\"information_no_entries_found\">Inga inlägg hittades i denna kategori</string>\n    <string name=\"label_mean_score\">Genomsnittlig poäng</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"label_used\">Använd</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"confirm_add_duplicate_manga\">Du har en post i ditt bibliotek med samma namn.\n\\n\n\\nVill du fortfarande fortsätta?</string>\n    <string name=\"track_remove_date_conf_title\">Ta bort datum?</string>\n    <string name=\"label_titles_section\">Inlägg</string>\n    <string name=\"label_titles_in_global_update\">I global uppdatering</string>\n    <string name=\"label_total_chapters\">Totalt</string>\n    <string name=\"label_read_chapters\">Läst</string>\n    <string name=\"manga_display_interval_title\">Uppskatta varje</string>\n    <string name=\"action_set_interval\">Ange intervall</string>\n    <string name=\"action_filter_interval_custom\">Anpassat uppdateringsintervall</string>\n    <string name=\"action_sort_next_updated\">Nästa förväntade uppdatering</string>\n    <string name=\"skipped_reason_not_in_release_period\">Hoppades över eftersom ingen publicering förväntades idag</string>\n    <string name=\"label_tracked_titles\">Spårade inlägg</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"track_error\">%1$s fel: %2$s</string>\n    <string name=\"pref_double_tap_zoom\">Dubbeltryck för att zooma</string>\n    <string name=\"track_remove_start_date_conf_text\">Detta kommer att ta bort ditt tidigare valda startdatum från %s</string>\n    <string name=\"track_delete_title\">Ta bort %s spårning?</string>\n    <string name=\"track_delete_text\">Detta kommer att ta bort spårningen lokalt.</string>\n    <string name=\"track_remove_finish_date_conf_text\">Detta kommer att ta bort ditt tidigare valda slutdatum från %s</string>\n    <string name=\"track_delete_remote_text\">Ta även bort från %s</string>\n    <string name=\"information_no_manga_category\">Kategorin är tom</string>\n    <string name=\"hour_short\">%dt</string>\n    <string name=\"syncing_library\">Synkronisering av bibliotek</string>\n    <string name=\"pref_debug_info\">Felsökningsinformation</string>\n    <string name=\"copied_to_clipboard_plain\">Kopierad till urklipp</string>\n    <string name=\"manga_display_modified_interval_title\">Ställ in för att uppdatera varje</string>\n    <string name=\"has_results\">Har resultat</string>\n    <string name=\"label_completed_titles\">Avslutade inlägg</string>\n    <string name=\"library_sync_complete\">Bibliotekssynkronisering slutförd</string>\n    <string name=\"download_cache_invalidated\">Index för nedladdningar ogiltigt</string>\n    <string name=\"label_overview_section\">Översikt</string>\n    <string name=\"delete_downloaded\">Radera nedladdat</string>\n    <string name=\"pref_chapter_swipe_end\">Svep till höger åtgärd</string>\n    <string name=\"pref_chapter_swipe_start\">Svep till vänster åtgärd</string>\n    <string name=\"label_read_duration\">Lästid</string>\n    <string name=\"label_tracker_section\">Spårare</string>\n    <string name=\"information_cloudflare_help\">Klicka här för hjälp med Cloudflare</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"pref_update_only_in_release_period\">Förutspå nästa releaseperiod</string>\n    <string name=\"intervals_header\">Intervaller</string>\n    <string name=\"create_backup_file_error\">Kunde inte skapa en backup-fil</string>\n    <string name=\"track_activity_name\">Spårar-inloggning</string>\n    <string name=\"exception_offline\">Ingen internet anslutning</string>\n    <string name=\"exception_http\">HTTP %d, kolla på webbsida i WebView</string>\n    <string name=\"exception_unknown_host\">Kunde inte nå %s</string>\n    <string name=\"unlock_app_title\">Lås upp %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Flytta serien till botten</string>\n    <string name=\"notification_updating_progress\">Uppdaterar biblioteket... (%s)</string>\n    <string name=\"source_settings\">Inställningar för källa</string>\n    <string name=\"app_settings\">Appinställningar</string>\n    <string name=\"pref_relative_format\">Relativa tidsstämplar</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" istället för \\\"%2$s\\\"</string>\n    <string name=\"action_create\">Skapa</string>\n    <string name=\"relative_time_span_never\">Aldrig</string>\n    <string name=\"pref_flash_page_summ\">Minimerar spöktext på e-papperskärmar</string>\n    <string name=\"action_apply\">Tillämpa</string>\n    <string name=\"action_revert_to_default\">Återgå till standard</string>\n    <string name=\"last_auto_backup_info\">Senaste automatiska säkerhetskopieringen: %s</string>\n    <string name=\"no_scanlators_found\">Inga scanlatorer hittades</string>\n    <string name=\"scanlator\">Översättare</string>\n    <string name=\"pref_flash_page\">Blinka vid sidbyte</string>\n    <string name=\"pref_storage_usage\">Lagringsanvändning</string>\n    <string name=\"action_sort_tracker_score\">Spårares betyg</string>\n    <string name=\"label_data_storage\">Data och lagring</string>\n    <string name=\"file_null_uri_error\">Ingen fil vald</string>\n    <string name=\"exclude_scanlators\">Exkludera scanlatorer</string>\n    <string name=\"pref_storage_location\">Lagringsplats</string>\n    <string name=\"pref_storage_location_info\">Används för automatisk säkerhetskopiering, kapitelnedladdningar och lokal källa.</string>\n    <string name=\"action_menu_overflow_description\">Mer alternativ</string>\n    <string name=\"selected\">Vald</string>\n    <string name=\"not_selected\">Inte vald</string>\n    <string name=\"action_bar_up_description\">Navigera upp</string>\n    <string name=\"onboarding_storage_action_select\">Välj en mapp</string>\n    <string name=\"pref_onboarding_guide\">Introduktionsguide</string>\n    <string name=\"onboarding_guides_new_user\">Ny till %s? Vi rekommenderar att du tar en titt på komma igång guiden.</string>\n    <string name=\"onboarding_action_finish\">Kom igång</string>\n    <string name=\"onboarding_storage_selection_required\">En mapp måste väljas</string>\n    <string name=\"onboarding_heading\">Välkommen!</string>\n    <string name=\"onboarding_guides_returning_user\">Ominstalleras %s?</string>\n    <string name=\"onboarding_action_skip\">Hoppa över</string>\n    <string name=\"onboarding_action_next\">Nästa</string>\n    <string name=\"onboarding_description\">Låt oss ställa in några saker först. Du kan alltid ändra dessa i inställningarna senare.</string>\n    <string name=\"no_location_set\">Ingen lagringsplats inställd</string>\n    <string name=\"onboarding_storage_info\">Välj en mapp där %1$s lagrar kapitelnedladdningar, säkerhetskopior och mer.\n\\n\n\\nEn dedikerad mapp rekommenderas.\n\\n\n\\nVald mapp: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Aviseringsbehörigheter</string>\n    <string name=\"onboarding_permission_install_apps\">Installera app behörigheter</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Undvik avbrott i långvariga biblioteksuppdateringar, nedladdningar och säkerhetskopieringsåterställningar.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Bakgrundsbatterianvändning</string>\n    <string name=\"onboarding_permission_install_apps_description\">För att installera källtillägg.</string>\n    <string name=\"onboarding_permission_notifications_description\">Få aviseringar om biblioteksuppdateringar och mer.</string>\n    <string name=\"onboarding_permission_action_grant\">Bevilja</string>\n    <string name=\"available_disk_space_info\">Tillgängligt: %1$s / Totalt: %2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">Behörigheter krävs för att installera tillägg. Tryck här för att bevilja.</string>\n    <string name=\"private_settings\">Inkludera känsliga inställningar (t.ex. spårningsinloggningstokens)</string>\n    <string name=\"manga_interval_expected_update\">Nya kapitel förväntas att släppas varje \\\"%1$s\\\", kontrollerar varje \\\"%2$s\\\".</string>\n    <string name=\"invalid_backup_file_error\">Fullständigt fel:</string>\n    <string name=\"onboarding_storage_help_info\">Osäker på vad du ska välja då du uppdaterar från en äldre version? Se lagerhanteringsguiden för mer information.</string>\n    <string name=\"pref_library_update_smart_update\">Smart uppdatering</string>\n    <string name=\"onboarding_storage_help_action\">Lagerhanteringsguide</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"delete_repo_confirmation\">Vill du ta bort förråd \\\"%s\\\"?</string>\n    <string name=\"ext_revoke_trust\">Återkalla tillförlitliga okända tillägg</string>\n    <string name=\"label_extension_repos\">Tilläggsförråd</string>\n    <string name=\"information_empty_repos\">Du har inga förråd inställda.</string>\n    <string name=\"action_add_repo\">Lägg till förråd</string>\n    <string name=\"label_add_repo_input\">Förråd URL</string>\n    <string name=\"action_add_repo_message\">Lägg till ytterliga förråd till Mihon. Detta ska vara en URL som slutar med \\\"index.min.json\\\".</string>\n    <string name=\"error_repo_exists\">Detta förråd existerar redan!</string>\n    <string name=\"action_delete_repo\">Ta bort förråd</string>\n    <string name=\"invalid_repo_name\">Ogiltig förråds URL</string>\n    <string name=\"action_open_repo\">Öppenkällkods förråd</string>\n    <string name=\"manga_interval_expected_update_soon\">Snart</string>\n    <string name=\"manga_interval_custom_amount\">Anpassad uppdateringsfrekvens:</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Inaktivera utzoomning</string>\n    <string name=\"action_add_anyway\">Lägg till ändå</string>\n    <string name=\"action_replace_repo\">Ersätt</string>\n    <string name=\"pref_display_profile\">Anpassad skärmprofil</string>\n    <string name=\"label_upcoming\">Kommande</string>\n    <string name=\"upcoming_calendar_prev\">Föregående månad</string>\n    <string name=\"upcoming_calendar_next\">Nästa månad</string>\n    <string name=\"action_migrate_duplicate\">Migrera existerande post</string>\n    <string name=\"action_replace_repo_title\">Signeringsnyckel-fingeravtryck finns redan</string>\n    <string name=\"action_replace_repo_message\">Förrådet %1$s har samma Signering av nyckelfingeravtryck som %2$s.\n\\nOm detta förväntas kommer %2$s att ersättas, annars kontakta den förråds-ansvarige.</string>\n    <string name=\"action_view_upcoming\">Visa kommande uppdateringar</string>\n    <string name=\"upcoming_guide\">Kommande guide</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Misslyckades med att skaffa beständig mappåtkomst. Appen kan bete sig oväntat.</string>\n    <string name=\"manga_interval_expected_update_null\">Denna manga är antingen avslutad, eller så finns inget förutsebart publiceringsdatum.</string>\n    <string name=\"pref_flash_duration\">Blink varaktighet</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Blinka var</string>\n    <string name=\"pref_flash_with\">Blinka med</string>\n    <string name=\"pref_flash_style_black\">Svart</string>\n    <string name=\"pref_flash_style_white\">Vitt</string>\n    <string name=\"pref_flash_style_white_black\">Svart och vitt</string>\n    <string name=\"invalid_backup_file_unknown\">Säkerhetskopierings fil är korrupt</string>\n    <string name=\"invalid_backup_file_json\">JSON säkerhetskopering stöds inte</string>\n    <string name=\"extensionRepo_settings\">Tilläggsförråd</string>\n    <string name=\"action_copy_link\">Kopiera länk</string>\n    <string name=\"action_sort_random\">Slumpmässigt</string>\n    <string name=\"onboarding_permission_crashlytics\">Skicka kraschloggar</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Skicka anonymiserade kraschloggar till utvecklarna.</string>\n    <string name=\"onboarding_permission_analytics_description\">Skicka anonymiserade användningsdata för att förbättra appens funktioner.</string>\n    <string name=\"pref_security\">Säkerhet</string>\n    <string name=\"add_repo_confirmation\">Vill du verkligen lägga till förrådet \\\"%s\\\"?</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Om läsaren laddar en tom bild, minska stegvis tröskelvärdet.\\nVal: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Påverkar prestandan. Aktivera endast om minskning av bitmapströskeln inte fixar problem gällande tomma bilder</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Uppdatera läsförlopp vid markering som läst</string>\n    <string name=\"ext_remove\">Ta bort</string>\n    <string name=\"ext_confirm_remove\">Ta bort tillägg?</string>\n    <string name=\"remove_private_extension_message\">Vill du verkligen ta bort tillägget \\\"%s\\\"?</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Standard (%d)</string>\n    <string name=\"onboarding_permission_analytics\">Tillåt insamling av användningsdata</string>\n    <string name=\"pref_firebase\">Användningsdata och kraschloggar</string>\n    <string name=\"non_library_settings\">Alla färdiglästa artiklar</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Pausa tilläggets läshistorik</string>\n    <string name=\"trackers_updated_summary\">Spårare har uppdaterats till kapitel %d</string>\n    <string name=\"firebase_summary\">Att skicka kraschloggar och användningsdata tillåter oss att identifiera och korrigera fel, förbättra prestanda samt göra framtida uppdateringar mer relevanta till dina behov</string>\n    <string name=\"confirm_tracker_update\">Uppdatera spårare till kapitel %d?</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Anpassad hårdvarubitmapströskel</string>\n    <string name=\"action_toggle_private_off\">Spåra offentligt</string>\n    <string name=\"theme_monochrome\">Monokrom</string>\n    <string name=\"export\">Exportera</string>\n    <string name=\"library_exported\">Bibliotek Exporterat</string>\n    <string name=\"library_list\">Bibliotekslista</string>\n    <string name=\"author\">Författare</string>\n    <string name=\"artist\">Tecknare</string>\n    <string name=\"tracked_privately\">Spåras privat</string>\n    <string name=\"action_toggle_private_on\">Spåra privat</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/ta/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"on\">ஆன்</string>\n    <string name=\"off\">அணை</string>\n    <string name=\"scanlator\">ச்கேன்லேட்டர்</string>\n    <string name=\"label_more\">மேலும்</string>\n    <string name=\"label_settings\">அமைப்புகள்</string>\n    <string name=\"label_download_queue\">வரிசையைப் பதிவிறக்கவும்</string>\n    <string name=\"label_library\">நூலகம்</string>\n    <string name=\"label_recent_updates\">புதுப்பிப்புகள்</string>\n    <string name=\"label_default\">இயல்புநிலை</string>\n    <string name=\"label_warning\">எச்சரிக்கை</string>\n    <string name=\"label_started\">தொடங்கியது</string>\n    <string name=\"label_downloaded\">பதிவிறக்கம்</string>\n    <string name=\"unlock_app_title\">%s திறக்கவும்</string>\n    <string name=\"confirm_lock_change\">மாற்றத்தை உறுதிப்படுத்த ஏற்பு</string>\n    <string name=\"action_settings\">அமைப்புகள்</string>\n    <string name=\"action_menu\">பட்டியல்</string>\n    <string name=\"action_filter\">வடிப்பி</string>\n    <string name=\"action_set_interval\">இடைவெளி அமைக்கவும்</string>\n    <string name=\"action_filter_bookmarked\">புக்மார்க்கு செய்யப்பட்டது</string>\n    <string name=\"action_filter_tracked\">கண்காணிக்கப்பட்டது</string>\n    <string name=\"action_filter_unread\">படிக்காதது</string>\n    <string name=\"selected\">தேர்ந்தெடுக்கப்பட்டது</string>\n    <string name=\"not_selected\">தேர்ந்தெடுக்கப்படவில்லை</string>\n    <string name=\"action_menu_overflow_description\">மேலும் விருப்பங்கள்</string>\n    <string name=\"action_bar_up_description\">மேலே செல்லவும்</string>\n    <string name=\"name\">பெயர்</string>\n    <string name=\"categories\">வகைகள்</string>\n    <string name=\"manga\">நூலக உள்ளீடுகள்</string>\n    <string name=\"chapters\">பாடங்கள்</string>\n    <string name=\"track\">கண்காணிப்பு</string>\n    <string name=\"delete_downloaded\">பதிவிறக்கம் செய்யப்பட்டதை நீக்கு</string>\n    <string name=\"history\">வரலாறு</string>\n    <string name=\"label_upcoming\">வரவிருக்கும்</string>\n    <string name=\"label_recent_manga\">வரலாறு</string>\n    <string name=\"label_sources\">மூலங்கள்</string>\n    <string name=\"label_backup\">காப்புப்பிரதி மற்றும் மீட்டமை</string>\n    <string name=\"label_data_storage\">தரவு மற்றும் சேமிப்பு</string>\n    <string name=\"label_stats\">புள்ளிவிவரங்கள்</string>\n    <string name=\"label_migration\">குடியேறவும்</string>\n    <string name=\"label_extensions\">நீட்டிப்புகள்</string>\n    <string name=\"label_extension_info\">நீட்டிப்பு செய்தி</string>\n    <string name=\"label_help\">உதவி</string>\n    <string name=\"label_local\">உள்ளக</string>\n    <string name=\"action_filter_empty\">வடிகட்டியை அகற்று</string>\n    <string name=\"action_sort_alpha\">அகரவரிசை</string>\n    <string name=\"action_sort_count\">மொத்த உள்ளீடுகள்</string>\n    <string name=\"action_sort_total\">மொத்த அத்தியாயங்கள்</string>\n    <string name=\"action_sort_last_read\">கடைசியாக படித்தார்</string>\n    <string name=\"action_sort_last_manga_update\">கடைசி புதுப்பிப்பு சோதனை</string>\n    <string name=\"action_sort_unread_count\">படிக்காத எண்ணிக்கை</string>\n    <string name=\"action_sort_next_updated\">அடுத்து எதிர்பார்க்கப்படும் புதுப்பிப்பு</string>\n    <string name=\"action_sort_latest_chapter\">அண்மைக் கால அத்தியாயம்</string>\n    <string name=\"action_sort_random\">சீரற்ற</string>\n    <string name=\"action_search\">தேடல்</string>\n    <string name=\"action_search_hint\">தேடுங்கள்…</string>\n    <string name=\"action_search_settings\">அமைப்புகளைத் தேடுங்கள்</string>\n    <string name=\"action_migrate\">குடியேறவும்</string>\n    <string name=\"action_display_mode\">காட்சி முறை</string>\n    <string name=\"action_display\">காட்சி</string>\n    <string name=\"action_display_grid\">கச்சிதமான கட்டம்</string>\n    <string name=\"action_display_comfortable_grid\">வசதியான கட்டம்</string>\n    <string name=\"action_display_list\">பட்டியல்</string>\n    <string name=\"action_display_cover_only_grid\">கவர்-மட்டும் கட்டம்</string>\n    <string name=\"action_display_download_badge\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்கள்</string>\n    <string name=\"action_display_local_badge\">உள்ளக மூல</string>\n    <string name=\"action_display_language_badge\">மொழி</string>\n    <string name=\"pref_category_advanced\">மேம்பட்ட</string>\n    <string name=\"pref_remove_bookmarked_chapters\">புக்மார்க்கு செய்யப்பட்ட அத்தியாயங்களை நீக்க அனுமதிக்கவும்</string>\n    <string name=\"pref_remove_exclude_categories\">விலக்கப்பட்ட பிரிவுகள்</string>\n    <string name=\"no_location_set\">சேமிப்பக இருப்பிடம் இல்லை</string>\n    <string name=\"invalid_location\">தவறான இடம்: %s</string>\n    <string name=\"disabled\">முடக்கப்பட்டது</string>\n    <string name=\"last_read_chapter\">கடைசியாக படித்த அத்தியாயம்</string>\n    <string name=\"second_to_last\">இரண்டாவது முதல் கடைசியாக படிக்க அத்தியாயம்</string>\n    <string name=\"third_to_last\">மூன்றாவது முதல் கடைசியாக படிக்க அத்தியாயம்</string>\n    <string name=\"extensionRepo_settings\">நீட்டிப்பு களஞ்சியங்கள்</string>\n    <string name=\"private_settings\">உணர்திறன் அமைப்புகளைச் சேர்க்கவும் (எ.கா., டிராக்கர் உள்நுழைவு டோக்கன்கள்)</string>\n    <string name=\"non_library_settings\">உள்ளீடுகள் அனைத்தும்</string>\n    <string name=\"creating_backup\">காப்புப்பிரதியை உருவாக்குதல்</string>\n    <string name=\"creating_backup_error\">காப்புப்பிரதி தோல்வியடைந்தது</string>\n    <string name=\"backup_info\">நீங்கள் காப்புப்பிரதிகளின் நகல்களை மற்ற இடங்களிலும் வைத்திருக்க வேண்டும். சேமிக்கப்பட்ட கடவுச்சொற்கள் உட்பட முக்கியமான தரவு காப்புப்பிரதிகளில் இருக்கலாம்; பகிர்வு செய்தால் கவனமாக இருங்கள்.</string>\n    <string name=\"last_auto_backup_info\">கடைசியாக தானாக காப்புப் பிரதி எடுக்கப்பட்டது: %s</string>\n    <string name=\"label_data\">தகவல்கள்</string>\n    <string name=\"pref_storage_usage\">சேமிப்பக பயன்பாடு</string>\n    <string name=\"pref_clear_chapter_cache\">தெளிவான அத்தியாயம் கேச்</string>\n    <string name=\"pref_debug_info\">பிழைத்திருத்த செய்தி</string>\n    <string name=\"website\">வலைத்தளம்</string>\n    <string name=\"version\">பதிப்பு</string>\n    <string name=\"whats_new\">புதியது என்ன</string>\n    <string name=\"help_translate\">மொழிபெயர்க்க உதவுங்கள்</string>\n    <string name=\"licenses\">திறந்த மூல உரிமங்கள்</string>\n    <string name=\"action_global_search_hint\">உலக தேடல்…</string>\n    <string name=\"action_global_search_query\">உலகளவில் \\\"%1$s\\\" ஐத் தேடுங்கள்</string>\n    <string name=\"latest\">அண்மைக் கால</string>\n    <string name=\"popular\">மக்கள்</string>\n    <string name=\"browse\">உலாவு</string>\n    <string name=\"manga_removed_library\">நூலகத்திலிருந்து அகற்றப்பட்டது</string>\n    <string name=\"manga_info_expand\">மேலும்</string>\n    <string name=\"manga_info_collapse\">குறைவாக</string>\n    <string name=\"delete_downloads_for_manga\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்களை நீக்கவா?</string>\n    <string name=\"updates_last_update_info\">கடைசியாக புதுப்பிக்கப்பட்டது: %s</string>\n    <string name=\"updates_last_update_info_just_now\">இப்போது</string>\n    <string name=\"relative_time_span_never\">ஒருபோதும்</string>\n    <string name=\"action_view_upcoming\">வரவிருக்கும் புதுப்பிப்புகளைக் காண்க</string>\n    <string name=\"upcoming_guide\">வரவிருக்கும் வழிகாட்டி</string>\n    <string name=\"upcoming_calendar_next\">அடுத்த மாதம்</string>\n    <string name=\"upcoming_calendar_prev\">முந்தைய மாதம்</string>\n    <string name=\"recent_manga_time\">Ch. %1$s - %2$s</string>\n    <string name=\"pref_clear_history\">வரலாற்றை அழிக்கவும்</string>\n    <string name=\"appwidget_unavailable_locked\">பயன்பாட்டு பூட்டு இயக்கப்பட்டால் விட்செட் கிடைக்கவில்லை</string>\n    <string name=\"remove_manga\">உங்கள் நூலகத்திலிருந்து \\\"%s\\\" ஐ அகற்ற உள்ளீர்கள்</string>\n    <string name=\"exception_http\">Http %d, வெப்வியூவில் வலைத்தளத்தைப் பாருங்கள்</string>\n    <string name=\"exception_offline\">இணைய இணைப்பு இல்லை</string>\n    <string name=\"exception_unknown_host\">%s ஐ அடைய முடியவில்லை</string>\n    <string name=\"pref_create_folder_per_manga_summary\">உள்ளீடுகளின் தலைப்புக்கு ஏற்ப கோப்புறைகளை உருவாக்குகிறது</string>\n    <string name=\"action_filter_interval_custom\">தனிப்பயனாக்கப்பட்ட புதுப்பிப்பு அதிர்வெண்</string>\n    <string name=\"action_sort_chapter_fetch_date\">அத்தியாயம் பெறும் தேதி</string>\n    <string name=\"action_sort_date_added\">தேதி சேர்க்கப்பட்டது</string>\n    <string name=\"action_sort_tracker_score\">டிராக்கர் மதிப்பெண்</string>\n    <string name=\"action_global_search\">உலக தேடல்</string>\n    <string name=\"action_select_all\">அனைத்தையும் தெரிவுசெய்</string>\n    <string name=\"action_select_inverse\">தலைகீழ் தேர்ந்தெடுக்கவும்</string>\n    <string name=\"action_mark_as_read\">படித்தபடி குறி</string>\n    <string name=\"action_mark_as_unread\">படிக்காத எனக் குறிக்கவும்</string>\n    <string name=\"action_mark_previous_as_read\">முந்தையதைப் படித்ததாகக் குறிக்கவும்</string>\n    <string name=\"action_download\">பதிவிறக்கம்</string>\n    <string name=\"action_bookmark\">புக்மார்க்கு அத்தியாயம்</string>\n    <string name=\"action_remove_bookmark\">Unbookmark அத்தியாயம்</string>\n    <string name=\"action_move_category\">வகைகளை அமைக்கவும்</string>\n    <string name=\"delete_category_confirmation\">\\\"%s\\\" என்ற வகையை நீக்க விரும்புகிறீர்களா?</string>\n    <string name=\"delete_category\">வகையை நீக்கு</string>\n    <string name=\"action_delete\">நீக்கு</string>\n    <string name=\"action_update_library\">நூலகத்தைப் புதுப்பிக்கவும்</string>\n    <string name=\"action_enable_all\">அனைத்தையும் இயக்கு</string>\n    <string name=\"action_disable_all\">அனைத்தையும் முடக்கு</string>\n    <string name=\"action_edit\">தொகு</string>\n    <string name=\"action_add\">கூட்டு</string>\n    <string name=\"action_update_category\">புதுப்பிப்பு வகை</string>\n    <string name=\"action_open_random_manga\">சீரற்ற நுழைவைத் திறக்கவும்</string>\n    <string name=\"action_add_category\">வகையைச் சேர்க்கவும்</string>\n    <string name=\"action_edit_categories\">வகைகளைத் திருத்து</string>\n    <string name=\"action_rename_category\">வகை மறுபெயரிடுதல்</string>\n    <string name=\"action_edit_cover\">கவர் திருத்து</string>\n    <string name=\"action_view_chapters\">அத்தியாயங்களைக் காண்க</string>\n    <string name=\"action_pause\">இடைநிறுத்தம்</string>\n    <string name=\"action_previous_chapter\">முந்தைய அத்தியாயம்</string>\n    <string name=\"action_start\">தொடங்கு</string>\n    <string name=\"action_resume\">மீண்டும் தொடங்குங்கள்</string>\n    <string name=\"action_open_in_browser\">உலாவியில் திற</string>\n    <string name=\"action_show_manga\">நுழைவு காட்டு</string>\n    <string name=\"action_copy_to_clipboard\">இடைநிலைப்பலகைக்கு நகலெடுக்கவும்</string>\n    <string name=\"action_next_chapter\">அடுத்த அத்தியாயம்</string>\n    <string name=\"action_retry\">மீண்டும் முயற்சிக்கவும்</string>\n    <string name=\"action_remove\">அகற்று</string>\n    <string name=\"action_remove_everything\">எல்லாவற்றையும் அகற்றவும்</string>\n    <string name=\"action_copy_link\">இணைப்பை நகலெடுக்கவும்</string>\n    <string name=\"action_open_in_web_view\">வெப்வியூவில் திறக்கவும்</string>\n    <string name=\"action_display_show_tabs\">வகை தாவல்களைக் காட்டு</string>\n    <string name=\"action_display_show_continue_reading_button\">படிப்பு பொத்தானைத் தொடரவும்</string>\n    <string name=\"action_disable\">முடக்கு</string>\n    <string name=\"action_pin\">முள்</string>\n    <string name=\"action_unpin\">Unpin</string>\n    <string name=\"action_apply\">இடு</string>\n    <string name=\"action_cancel\">ரத்துசெய்</string>\n    <string name=\"action_ok\">சரி</string>\n    <string name=\"action_display_show_number_of_items\">பொருட்களின் எண்ணிக்கையைக் காட்டு</string>\n    <string name=\"action_cancel_all\">அனைத்தையும் ரத்துசெய்</string>\n    <string name=\"cancel_all_for_series\">இந்த தொடருக்கு அனைத்தையும் ரத்துசெய்</string>\n    <string name=\"action_sort\">வரிசைப்படுத்து</string>\n    <string name=\"action_order_by_upload_date\">பதிவேற்றுவதன் மூலம்</string>\n    <string name=\"action_order_by_chapter_number\">அத்தியாய எண் மூலம்</string>\n    <string name=\"action_newest\">புதியது</string>\n    <string name=\"action_oldest\">பழமையானது</string>\n    <string name=\"action_asc\">ஏறுதல்</string>\n    <string name=\"action_desc\">இறங்கு</string>\n    <string name=\"action_move_to_top\">மேலே செல்லுங்கள்</string>\n    <string name=\"action_move_to_top_all_for_series\">தொடரை மேலே நகர்த்தவும்</string>\n    <string name=\"action_move_to_bottom\">கீழே செல்லுங்கள்</string>\n    <string name=\"action_move_to_bottom_all_for_series\">தொடரை கீழே நகர்த்தவும்</string>\n    <string name=\"action_install\">நிறுவவும்</string>\n    <string name=\"action_share\">பங்கு</string>\n    <string name=\"action_save\">சேமி</string>\n    <string name=\"action_reset\">மீட்டமை</string>\n    <string name=\"action_revert_to_default\">இயல்புநிலைக்கு திரும்பவும்</string>\n    <string name=\"action_undo\">செயல்தவிர்</string>\n    <string name=\"action_close\">மூடு</string>\n    <string name=\"action_open_log\">பதிவு திற</string>\n    <string name=\"action_show_errors\">விவரங்களைக் காண தட்டவும்</string>\n    <string name=\"action_restore\">மீட்டமை</string>\n    <string name=\"action_webview_back\">பின்</string>\n    <string name=\"action_webview_forward\">முன்னோக்கி</string>\n    <string name=\"action_webview_refresh\">புதுப்பிப்பு</string>\n    <string name=\"action_start_downloading_now\">இப்போது பதிவிறக்கத் தொடங்குங்கள்</string>\n    <string name=\"action_not_now\">இப்போது இல்லை</string>\n    <string name=\"action_add_anyway\">எப்படியும் சேர்க்கவும்</string>\n    <string name=\"action_migrate_duplicate\">இருக்கும் நுழைவு இடம்பெயரவும்</string>\n    <string name=\"loading\">ஏற்றுகிறது…</string>\n    <string name=\"internal_error\">இன்டர்னெர்ர்: மேலும் தகவலுக்கு செயலிழப்பு பதிவுகளை சரிபார்க்கவும்</string>\n    <string name=\"app_not_available\">பயன்பாடு கிடைக்கவில்லை</string>\n    <string name=\"pref_onboarding_guide\">ஆன் போர்டிங் வழிகாட்டி</string>\n    <string name=\"onboarding_heading\">வரவேற்கிறோம்!</string>\n    <string name=\"onboarding_description\">முதலில் சில விசயங்களை அமைப்போம். நீங்கள் எப்போதும் அமைப்புகளில் இவற்றை மாற்றலாம்.</string>\n    <string name=\"onboarding_action_next\">அடுத்தது</string>\n    <string name=\"onboarding_action_finish\">தொடங்கவும்</string>\n    <string name=\"onboarding_action_skip\">தவிர்</string>\n    <string name=\"onboarding_storage_info\">%1$s அத்தியாய பதிவிறக்கங்கள், காப்புப்பிரதிகள் மற்றும் பலவற்றை சேமிக்கும் ஒரு கோப்புறையைத் தேர்ந்தெடுக்கவும்.\\n\\n ஒரு பிரத்யேக கோப்புறை பரிந்துரைக்கப்படுகிறது.\\n\\n தேர்ந்தெடுக்கப்பட்ட கோப்புறை: %2$s</string>\n    <string name=\"onboarding_storage_action_select\">ஒரு கோப்புறையைத் தேர்ந்தெடுக்கவும்</string>\n    <string name=\"onboarding_storage_selection_required\">ஒரு கோப்புறை தேர்ந்தெடுக்கப்பட வேண்டும்</string>\n    <string name=\"onboarding_storage_help_info\">பழைய பதிப்பிலிருந்து புதுப்பித்தல் மற்றும் எதைத் தேர்ந்தெடுப்பது என்று தெரியவில்லையா? மேலும் தகவலுக்கு சேமிப்பக வழிகாட்டியைப் பார்க்கவும்.</string>\n    <string name=\"onboarding_permission_notifications\">அறிவிப்பு இசைவு</string>\n    <string name=\"onboarding_permission_notifications_description\">நூலக புதுப்பிப்புகள் மற்றும் பலவற்றிற்கு அறிவிக்கப்படுங்கள்.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">பின்னணி பேட்டரி பயன்பாடு</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">நீண்டகால நூலக புதுப்பிப்புகள், பதிவிறக்கம் மற்றும் காப்புப்பிரதி மீட்டமைப்புக்கு குறுக்கீடுகளைத் தவிர்க்கவும்.</string>\n    <string name=\"onboarding_permission_crashlytics\">செயலிழப்பு பதிவுகளை அனுப்பவும்</string>\n    <string name=\"onboarding_permission_crashlytics_description\">டெவலப்பர்களுக்கு அநாமதேய செயலிழப்பு பதிவுகளை அனுப்பவும்.</string>\n    <string name=\"onboarding_permission_analytics\">பகுப்பாய்வுகளை அனுமதிக்கவும்</string>\n    <string name=\"onboarding_permission_analytics_description\">பயன்பாட்டு அம்சங்களை மேம்படுத்த அநாமதேய பயன்பாட்டு தரவை அனுப்பவும்.</string>\n    <string name=\"onboarding_storage_help_action\">சேமிப்பக வழிகாட்டி</string>\n    <string name=\"onboarding_permission_install_apps\">பயன்பாடுகளின் அனுமதியை நிறுவவும்</string>\n    <string name=\"onboarding_permission_install_apps_description\">மூல நீட்டிப்புகளை நிறுவ.</string>\n    <string name=\"onboarding_permission_action_grant\">மானியம்</string>\n    <string name=\"pref_appearance_summary\">கருப்பொருள், தேதி மற்றும் நேர வடிவம்</string>\n    <string name=\"pref_library_summary\">வகைகள், உலகளாவிய புதுப்பிப்பு, அத்தியாயம் ச்வைப்</string>\n    <string name=\"pref_reader_summary\">படித்தல் பயன்முறை, காட்சி, வழிசெலுத்தல்</string>\n    <string name=\"pref_downloads_summary\">தானியங்கி பதிவிறக்க, முன்னால் பதிவிறக்குங்கள்</string>\n    <string name=\"pref_tracking_summary\">ஒரு வழி முன்னேற்ற ஒத்திசைவு, மேம்பட்ட ஒத்திசைவு</string>\n    <string name=\"pref_browse_summary\">ஆதாரங்கள், நீட்டிப்புகள், உலகளாவிய தேடல்</string>\n    <string name=\"pref_backup_summary\">கையேடு மற்றும் தானியங்கி காப்புப்பிரதிகள், சேமிப்பு இடம்</string>\n    <string name=\"pref_security_summary\">பயன்பாட்டு பூட்டு, பாதுகாப்பான திரை</string>\n    <string name=\"pref_advanced_summary\">செயலிழப்பு பதிவுகள், பேட்டரி மேம்படுத்தல்கள்</string>\n    <string name=\"pref_category_theme\">கருப்பொருள்</string>\n    <string name=\"pref_app_theme\">பயன்பாட்டு கருப்பொருள்</string>\n    <string name=\"theme_system\">மண்டலம்</string>\n    <string name=\"theme_light\">ஒளி</string>\n    <string name=\"theme_dark\">இருண்ட</string>\n    <string name=\"onboarding_guides_new_user\">%s க்கு புதியதா? தொடங்கும் வழிகாட்டியைப் பார்க்க பரிந்துரைக்கிறோம்.</string>\n    <string name=\"onboarding_guides_returning_user\">%s ஐ மீண்டும் நிறுவுகிறீர்களா?</string>\n    <string name=\"pref_category_general\">பொது</string>\n    <string name=\"pref_category_appearance\">தோற்றம்</string>\n    <string name=\"pref_category_library\">நூலகம்</string>\n    <string name=\"pref_category_reader\">வாசகர்</string>\n    <string name=\"pref_category_downloads\">பதிவிறக்கங்கள்</string>\n    <string name=\"pref_category_tracking\">கண்காணிப்பு</string>\n    <string name=\"pref_category_about\">பற்றி</string>\n    <string name=\"theme_tako\">என</string>\n    <string name=\"theme_tealturquoise\">டீல் &amp; டர்க்கைச்</string>\n    <string name=\"theme_yinyang\">யின் &amp; யாங்</string>\n    <string name=\"theme_yotsuba\">நான்கு இலைகள்</string>\n    <string name=\"theme_tidalwave\">அலை அலை</string>\n    <string name=\"pref_dark_theme_pure_black\">தூய கருப்பு இருண்ட பயன்முறை</string>\n    <string name=\"pref_relative_format\">உறவினர் நேர முத்திரைகள்</string>\n    <string name=\"theme_monet\">மாறும்</string>\n    <string name=\"theme_greenapple\">பச்சை ஆப்பிள்</string>\n    <string name=\"pref_relative_format_summary\">\\\"%2$s க்கு க்கு பதிலாக\\\"%1$s \\\"</string>\n    <string name=\"theme_lavender\">சுகந்தி</string>\n    <string name=\"theme_midnightdusk\">நள்ளிரவு அந்தி</string>\n    <string name=\"theme_nord\">nord</string>\n    <string name=\"theme_strawberrydaiquiri\">ச்ட்ராபெரி டாய்கிரி</string>\n    <string name=\"pref_date_format\">தேதி வடிவம்</string>\n    <string name=\"pref_manage_notifications\">அறிவிப்புகளை நிர்வகிக்கவும்</string>\n    <string name=\"pref_app_language\">பயன்பாட்டு மொழி</string>\n    <string name=\"pref_category_security\">பாதுகாப்பு மற்றும் தனியுரிமை</string>\n    <string name=\"secure_screen\">பாதுகாப்பான திரை</string>\n    <string name=\"secure_screen_summary\">பயன்பாடுகளை மாற்றும்போது பயன்பாட்டு உள்ளடக்கத்தை பாதுகாப்பான திரை மறைக்கவும், திரை சாட்களைத் தடுக்கவும்</string>\n    <string name=\"firebase_summary\">செயலிழப்பு பதிவுகள் மற்றும் பகுப்பாய்வுகளை அனுப்புவது சிக்கல்களைக் கண்டறிந்து சரிசெய்யவும், செயல்திறனை மேம்படுத்தவும், எதிர்கால புதுப்பிப்புகளை உங்கள் தேவைகளுக்கு மிகவும் பொருத்தமானதாக மாற்றவும் அனுமதிக்கும்</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) ஆதாரங்கள்</string>\n    <string name=\"pref_show_nsfw_source\">ஆதாரங்கள் மற்றும் நீட்டிப்பு பட்டியல்களில் காண்பி</string>\n    <string name=\"parental_controls_info\">இது பயன்பாட்டிற்குள் NSFW (18+) உள்ளடக்கத்தை வெளிவருவதிலிருந்து அதிகாரப்பூர்வமற்ற அல்லது தவறான கொடிய நீட்டிப்புகளைத் தடுக்காது.</string>\n    <string name=\"relative_time_today\">இன்று</string>\n    <string name=\"pref_category_display\">காட்சி</string>\n    <string name=\"pref_library_columns\">கட்டம் அளவு</string>\n    <string name=\"portrait\">உருவப்படம்</string>\n    <string name=\"landscape\">நிலப்பரப்பு</string>\n    <string name=\"pref_category_library_update\">உலகளாவிய புதுப்பிப்பு</string>\n    <string name=\"pref_library_update_interval\">தானியங்கி புதுப்பிப்புகள்</string>\n    <string name=\"update_never\">அணை</string>\n    <string name=\"update_6hour\">ஒவ்வொரு 6 மணி நேரமும்</string>\n    <string name=\"update_12hour\">ஒவ்வொரு 12 மணி நேரமும்</string>\n    <string name=\"update_24hour\">நாள்தோறும்</string>\n    <string name=\"update_48hour\">ஒவ்வொரு 2 நாட்களுக்கும்</string>\n    <string name=\"update_72hour\">ஒவ்வொரு 3 நாட்களுக்கும்</string>\n    <string name=\"update_weekly\">வாராந்திர</string>\n    <string name=\"pref_security\">பாதுகாப்பு</string>\n    <string name=\"pref_firebase\">பகுப்பாய்வு மற்றும் செயலிழப்பு பதிவுகள்</string>\n    <string name=\"lock_with_biometrics\">திறத்தல் தேவை</string>\n    <string name=\"lock_when_idle\">சும்மா இருக்கும்போது பூட்டு</string>\n    <string name=\"lock_always\">எப்போதும்</string>\n    <string name=\"lock_never\">ஒருபோதும்</string>\n    <string name=\"hide_notification_content\">அறிவிப்பு உள்ளடக்கத்தை மறைக்கவும்</string>\n    <string name=\"pref_library_update_restriction\">தானியங்கி புதுப்பிப்புகள் சாதன கட்டுப்பாடுகள்</string>\n    <string name=\"connected_to_wifi\">வைஃபை மட்டுமே</string>\n    <string name=\"network_not_metered\">அளவிடப்படாத நெட்வொர்க்கில் மட்டுமே</string>\n    <string name=\"charging\">கட்டணம் வசூலிக்கும்போது</string>\n    <string name=\"restrictions\">கட்டுப்பாடுகள்: %s</string>\n    <string name=\"pref_library_update_smart_update\">அறிவுள்ள புதுப்பிப்பு</string>\n    <string name=\"pref_update_only_completely_read\">படிக்காத அத்தியாயம் (கள்) உடன் உள்ளீடுகளைத் தவிர்க்கவும்</string>\n    <string name=\"pref_update_only_non_completed\">\\\"நிறைவு செய்யப்பட்ட\\\" நிலையுடன் உள்ளீடுகளைத் தவிர்க்கவும்</string>\n    <string name=\"pref_update_only_started\">சிக்கலற்ற உள்ளீடுகளைத் தவிர்க்கவும்</string>\n    <string name=\"pref_update_only_in_release_period\">அடுத்த வெளியீட்டு நேரத்தை கணிக்கவும்</string>\n    <string name=\"pref_library_update_show_tab_badge\">புதுப்பிப்புகள் ஐகானில் படிக்காத எண்ணிக்கையைக் காட்டுங்கள்</string>\n    <string name=\"pref_library_update_refresh_metadata\">மெட்டாடேட்டாவை தானாக புதுப்பிக்கவும்</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">நூலகத்தைப் புதுப்பிக்கும்போது புதிய கவர் மற்றும் விவரங்களைச் சரிபார்க்கவும்</string>\n    <string name=\"default_category\">இயல்புநிலை வகை</string>\n    <string name=\"default_category_summary\">எப்போதும் கேளுங்கள்</string>\n    <string name=\"categorized_display_settings\">வரிசைக்கான ஒரு வகை அமைப்புகள்</string>\n    <string name=\"pref_library_update_categories_details\">விலக்கப்பட்ட வகைகளில் உள்ளீடுகள் சேர்க்கப்பட்ட வகைகளில் இருந்தாலும் அவை புதுப்பிக்கப்படாது.</string>\n    <string name=\"all\">அனைத்தும்</string>\n    <string name=\"none\">எதுவுமில்லை</string>\n    <string name=\"include\">அடங்கும்: %s</string>\n    <string name=\"exclude\">விலக்கு: %s</string>\n    <string name=\"pref_chapter_swipe_end\">சரியான செயலுக்கு ச்வைப் செய்யுங்கள்</string>\n    <string name=\"pref_chapter_swipe_start\">இடது செயலுக்கு ச்வைப் செய்யவும்</string>\n    <string name=\"multi_lang\">பல</string>\n    <string name=\"ext_updates_pending\">புதுப்பிப்புகள் நிலுவையில் உள்ளன</string>\n    <string name=\"ext_update\">புதுப்பிப்பு</string>\n    <string name=\"ext_update_all\">அனைத்தையும் புதுப்பிக்கவும்</string>\n    <string name=\"ext_obsolete\">வழக்கற்றுப்போன</string>\n    <string name=\"ext_install\">நிறுவவும்</string>\n    <string name=\"ext_pending\">நிலுவையில் உள்ளது</string>\n    <string name=\"ext_downloading\">பதிவிறக்குகிறது</string>\n    <string name=\"ext_installing\">நிறுவுகிறது</string>\n    <string name=\"ext_installed\">நிறுவப்பட்டது</string>\n    <string name=\"ext_trust\">நம்பிக்கை</string>\n    <string name=\"ext_untrusted\">நம்பத்தகாதது</string>\n    <string name=\"ext_uninstall\">நிறுவல் நீக்க</string>\n    <string name=\"ext_remove\">அகற்று</string>\n    <string name=\"ext_confirm_remove\">நீட்டிப்பை அகற்றவா?</string>\n    <string name=\"ext_app_info\">பயன்பாட்டு செய்தி</string>\n    <string name=\"untrusted_extension\">நம்பத்தகாத நீட்டிப்பு</string>\n    <string name=\"obsolete_extension_message\">இந்த நீட்டிப்பு இனி கிடைக்காது. இது சரியாக செயல்படாது மற்றும் பயன்பாட்டில் சிக்கல்களை ஏற்படுத்தக்கூடும். அதை நிறுவல் நீக்க பரிந்துரைக்கப்படுகிறது.</string>\n    <string name=\"remove_private_extension_message\">\\\"%s\\\" நீட்டிப்பை அகற்ற விரும்புகிறீர்களா?</string>\n    <string name=\"extension_api_error\">கிடைக்கக்கூடிய நீட்டிப்புகளைப் பெறத் தவறிவிட்டது</string>\n    <string name=\"ext_info_version\">பதிப்பு</string>\n    <string name=\"ext_info_language\">மொழி</string>\n    <string name=\"ext_info_age_rating\">அகவை மதிப்பீடு</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"ext_nsfw_warning\">இந்த நீட்டிப்பின் ஆதாரங்களில் NSFW (18+) உள்ளடக்கம் இருக்கலாம்</string>\n    <string name=\"ext_permission_install_apps_warning\">நீட்டிப்புகளை நிறுவ அனுமதிகள் தேவை. வழங்க இங்கே தட்டவும்.</string>\n    <string name=\"ext_install_service_notif\">நீட்டிப்பை நிறுவுதல்…</string>\n    <string name=\"ext_installer_pref\">நிறுவி</string>\n    <string name=\"ext_installer_legacy\">மரபு</string>\n    <string name=\"ext_installer_shizuku_stopped\">சிசுகு ஓடவில்லை</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">சிசுகுவை நீட்டிப்பு நிறுவியாகப் பயன்படுத்த சிசுகுவை நிறுவி தொடங்கவும்.</string>\n    <string name=\"ext_revoke_trust\">நம்பகமான அறியப்படாத நீட்டிப்புகளைத் திரும்பப் பெறுங்கள்</string>\n    <string name=\"label_extension_repos\">நீட்டிப்பு களஞ்சியங்கள்</string>\n    <string name=\"information_empty_repos\">உங்களிடம் எந்த களஞ்சியமும் இல்லை.</string>\n    <string name=\"action_add_repo\">ரெப்போ சேர்க்கவும்</string>\n    <string name=\"label_add_repo_input\">முகவரி களஞ்சி</string>\n    <string name=\"untrusted_extension_message\">தீங்கிழைக்கும் நீட்டிப்புகள் சேமிக்கப்பட்ட உள்நுழைவு நற்சான்றிதழ்களைப் படிக்கலாம் அல்லது தன்னிச்சையான குறியீட்டை இயக்கலாம்.\\n\\n இந்த நீட்டிப்பை நம்புவதன் மூலம், இந்த அபாயங்களை நீங்கள் ஏற்றுக்கொள்கிறீர்கள்.</string>\n    <string name=\"action_add_repo_message\">மிஓனில் கூடுதல் களஞ்சியங்களைச் சேர்க்கவும். இது \\\"index.min.json\\\" உடன் முடிவடையும் முகவரி ஆக இருக்க வேண்டும்.</string>\n    <string name=\"error_repo_exists\">இந்த ரெப்போ ஏற்கனவே உள்ளது!</string>\n    <string name=\"action_delete_repo\">ரெப்போவை நீக்கு</string>\n    <string name=\"invalid_repo_name\">தவறான ரெப்போ முகவரி</string>\n    <string name=\"delete_repo_confirmation\">ரெப்போ \\\"%s\\\" ஐ நீக்க விரும்புகிறீர்களா?</string>\n    <string name=\"add_repo_confirmation\">ரெப்போ \\\"%s\\\" சேர்க்க விரும்புகிறீர்களா?</string>\n    <string name=\"action_open_repo\">திறந்த மூல ரெப்போ</string>\n    <string name=\"action_replace_repo\">மாற்றவும்</string>\n    <string name=\"action_replace_repo_title\">முக்கிய கைரேகை கையொப்பமிடுவது ஏற்கனவே உள்ளது</string>\n    <string name=\"pref_dual_page_split\">பரந்த பக்கங்களைப் பிரிக்கவும்</string>\n    <string name=\"pref_dual_page_invert\">பிளவு பக்க வேலைவாய்ப்பு தலைகீழ்</string>\n    <string name=\"pref_dual_page_invert_summary\">பிளவு அகலமான பக்கங்களின் இடம் வாசிப்பு திசையுடன் பொருந்தவில்லை என்றால்</string>\n    <string name=\"pref_page_rotate\">பொருத்தமாக பரந்த பக்கங்களை சுழற்றுங்கள்</string>\n    <string name=\"pref_page_rotate_invert\">சுழற்றப்பட்ட அகலமான பக்கங்களின் புரட்டல் நோக்குநிலை</string>\n    <string name=\"pref_double_tap_zoom\">பெரிதாக்க இரட்டை தட்டவும்</string>\n    <string name=\"pref_cutout_short\">கட்அவுட் பகுதியில் உள்ளடக்கத்தைக் காட்டு</string>\n    <string name=\"pref_page_transitions\">பக்க மாற்றங்களை உயிரூட்டவும்</string>\n    <string name=\"pref_flash_page\">பக்க மாற்றத்தில் ஃபிளாச்</string>\n    <string name=\"pref_flash_page_summ\">ஈ-மை காட்சிகளில் பேயைக் குறைக்கிறது</string>\n    <string name=\"pref_flash_duration\">ஃபிளாச் காலம்</string>\n    <string name=\"action_replace_repo_message\">களஞ்சியம் %1$s %2$s போன்ற கையொப்பமிடும் விசை கைரேகையைக் கொண்டுள்ளது.\\n இது எதிர்பார்க்கப்பட்டால், %2$s மாற்றப்படும், இல்லையெனில் உங்கள் ரெப்போ பராமரிப்பாளரைத் தொடர்பு கொள்ளுங்கள்.</string>\n    <string name=\"pref_fullscreen\">முழு திரை</string>\n    <string name=\"pref_show_navigation_mode\">குழாய் மண்டலங்கள் மேலடுக்கைக் காட்டு</string>\n    <string name=\"pref_show_navigation_mode_summary\">வாசகர் திறக்கப்படும்போது சுருக்கமாகக் காட்டுங்கள்</string>\n    <string name=\"pref_flash_duration_summary\">%1$s MS</string>\n    <string name=\"pref_flash_page_interval\">ஒவ்வொரு ஃபிளாச்</string>\n    <string name=\"pref_flash_with\">உடன் ஃபிளாச்</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">செயல்திறனை பாதிக்கிறது. பிட்மேப் வாசலைக் குறைப்பது வெற்று பட சிக்கல்களை சரிசெய்யவில்லை என்றால் மட்டுமே இயக்கவும்</string>\n    <string name=\"pref_flash_style_black\">கருப்பு</string>\n    <string name=\"pref_flash_style_white\">வெள்ளை</string>\n    <string name=\"pref_flash_style_white_black\">வெள்ளை மற்றும் கருப்பு</string>\n    <string name=\"pref_double_tap_anim_speed\">அனிமேசன் விரைவு இரட்டை தட்டவும்</string>\n    <string name=\"pref_show_page_number\">பக்க எண்ணைக் காட்டு</string>\n    <string name=\"pref_show_reading_mode\">வாசிப்பு பயன்முறையைக் காட்டு</string>\n    <string name=\"pref_show_reading_mode_summary\">வாசகர் திறக்கப்படும்போது தற்போதைய பயன்முறையை சுருக்கமாகக் காட்டு</string>\n    <string name=\"pref_hardware_bitmap_threshold\">தனிப்பயன் வன்பொருள் பிட்மேப் வாசல்</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">இயல்புநிலை (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">வாசகர் ஒரு வெற்று படத்தை ஏற்றினால், வாசலைக் குறைக்கும்.\\n தேர்ந்தெடுக்கப்பட்டது: %s</string>\n    <string name=\"pref_display_profile\">தனிப்பயன் காட்சி சுயவிவரம்</string>\n    <string name=\"filter_mode_overlay\">மேலடுக்கு</string>\n    <string name=\"pref_crop_borders\">பயிர் எல்லைகள்</string>\n    <string name=\"pref_custom_brightness\">தனிப்பயன் ஒளி</string>\n    <string name=\"pref_grayscale\">கிரேச்கேல்</string>\n    <string name=\"pref_inverted_colors\">தலைகீழ்</string>\n    <string name=\"filter_mode_multiply\">பெருக்கவும்</string>\n    <string name=\"filter_mode_screen\">திரை</string>\n    <string name=\"filter_mode_lighten\">டாட்ச் / லைட்</string>\n    <string name=\"filter_mode_darken\">எரிக்க / இருட்டாக</string>\n    <string name=\"pref_custom_color_filter\">தனிப்பயன் வண்ண வடிகட்டி</string>\n    <string name=\"pref_color_filter_mode\">வண்ண வடிகட்டி கலப்பு முறை</string>\n    <string name=\"pref_keep_screen_on\">திரையை தொடர்ந்து வைத்திருங்கள்</string>\n    <string name=\"pref_skip_read_chapters\">வாசிப்பு குறிக்கப்பட்ட அத்தியாயங்களைத் தவிர்க்கவும்</string>\n    <string name=\"pref_skip_filtered_chapters\">வடிகட்டப்பட்ட அத்தியாயங்களைத் தவிர்க்கவும்</string>\n    <string name=\"pref_skip_dupe_chapters\">நகல் அத்தியாயங்களைத் தவிர்க்கவும்</string>\n    <string name=\"pref_reader_navigation\">வானோடல்</string>\n    <string name=\"pref_read_with_volume_keys\">தொகுதி விசைகள்</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">தொகுதி விசைகள் தலைகீழ்</string>\n    <string name=\"pref_read_with_tapping_inverted\">தட்டல் மண்டலங்களைத் தலைகீழ்</string>\n    <string name=\"tapping_inverted_none\">எதுவுமில்லை</string>\n    <string name=\"tapping_inverted_horizontal\">கிடைமட்டமாக</string>\n    <string name=\"tapping_inverted_vertical\">செங்குத்து</string>\n    <string name=\"tapping_inverted_both\">இரண்டும்</string>\n    <string name=\"pref_reader_actions\">செயல்கள்</string>\n    <string name=\"pref_read_with_long_tap\">நீண்ட தட்டில் செயல்களைக் காட்டு</string>\n    <string name=\"pref_create_folder_per_manga\">பக்கங்களை தனி கோப்புறைகளில் சேமிக்கவும்</string>\n    <string name=\"pref_reader_theme\">பின்னணி நிறம்</string>\n    <string name=\"white_background\">வெள்ளை</string>\n    <string name=\"gray_background\">சாம்பல்</string>\n    <string name=\"black_background\">கருப்பு</string>\n    <string name=\"automatic_background\">தானி</string>\n    <string name=\"pref_viewer_type\">இயல்புநிலை வாசிப்பு முறை</string>\n    <string name=\"l_nav\">எல் வடிவ</string>\n    <string name=\"kindlish_nav\">கின்டெல்-இச்</string>\n    <string name=\"edge_nav\">விளிம்பு</string>\n    <string name=\"right_and_left_nav\">வலது மற்றும் இடது</string>\n    <string name=\"disabled_nav\">முடக்கப்பட்டது</string>\n    <string name=\"nav_zone_prev\">முந்தைய</string>\n    <string name=\"nav_zone_next\">அடுத்தது</string>\n    <string name=\"nav_zone_left\">இடது</string>\n    <string name=\"nav_zone_right\">வலது</string>\n    <string name=\"left_to_right_viewer\">பேச் (இடமிருந்து வலமாக)</string>\n    <string name=\"right_to_left_viewer\">பேச் (வலமிருந்து இடமாக)</string>\n    <string name=\"vertical_viewer\">பேச் செய்யப்பட்ட (செங்குத்து)</string>\n    <string name=\"webtoon_viewer\">நீண்ட துண்டு</string>\n    <string name=\"vertical_plus_viewer\">இடைவெளிகளுடன் நீண்ட துண்டு</string>\n    <string name=\"pager_viewer\">பேச்</string>\n    <string name=\"pref_viewer_nav\">மண்டலங்களைத் தட்டவும்</string>\n    <string name=\"pref_image_scale_type\">அளவிலான வகை</string>\n    <string name=\"scale_type_fit_screen\">திரை பொருத்தம்</string>\n    <string name=\"scale_type_stretch\">நீட்டிக்க</string>\n    <string name=\"scale_type_fit_width\">பொருந்தக்கூடிய அகலம்</string>\n    <string name=\"scale_type_fit_height\">பொருத்தமான உயரத்திற்கு</string>\n    <string name=\"scale_type_original_size\">அசல் அளவு</string>\n    <string name=\"scale_type_smart_fit\">அறிவுள்ள பொருத்தம்</string>\n    <string name=\"pref_navigate_pan\">பரந்த படங்களை பான்</string>\n    <string name=\"pref_landscape_zoom\">தானாகவே பரந்த படங்களாக பெரிதாக்கவும்</string>\n    <string name=\"pref_zoom_start\">சூம் தொடக்க நிலை</string>\n    <string name=\"zoom_start_automatic\">தானியங்கி</string>\n    <string name=\"zoom_start_left\">இடது</string>\n    <string name=\"zoom_start_right\">வலது</string>\n    <string name=\"zoom_start_center\">நடுவண்</string>\n    <string name=\"double_tap_anim_speed_0\">அனிமேசன் இல்லை</string>\n    <string name=\"double_tap_anim_speed_normal\">சாதாரண</string>\n    <string name=\"double_tap_anim_speed_fast\">வேகமாக</string>\n    <string name=\"pref_rotation_type\">இயல்புநிலை சுழற்சி</string>\n    <string name=\"rotation_type\">சுழற்சி</string>\n    <string name=\"rotation_free\">இலவசம்</string>\n    <string name=\"rotation_portrait\">உருவப்படம்</string>\n    <string name=\"rotation_reverse_portrait\">தலைகீழ் உருவப்படம்</string>\n    <string name=\"rotation_landscape\">நிலப்பரப்பு</string>\n    <string name=\"rotation_force_portrait\">பூட்டப்பட்ட உருவப்படம்</string>\n    <string name=\"pref_remove_after_marked_as_read\">கைமுறையாக வாசிக்கப்பட்ட பிறகு குறிக்கப்பட்ட பிறகு</string>\n    <string name=\"pref_remove_after_read\">படித்த பிறகு தானாக நீக்கவும்</string>\n    <string name=\"fourth_to_last\">நான்காவது முதல் கடைசியாக படிக்க அத்தியாயம்</string>\n    <string name=\"fifth_to_last\">ஐந்தாவது முதல் கடைசியாக படிக்க அத்தியாயம்</string>\n    <string name=\"pref_category_auto_download\">ஆட்டோ-டவுன்லோட்</string>\n    <string name=\"pref_download_new\">புதிய அத்தியாயங்களைப் பதிவிறக்கவும்</string>\n    <string name=\"pref_download_new_unread_chapters_only\">நகல் வாசிப்பு அத்தியாயங்களைப் பதிவிறக்குவதைத் தவிர்க்கவும்</string>\n    <string name=\"rotation_force_landscape\">பூட்டப்பட்ட நிலப்பரப்பு</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_always_show_chapter_transition\">எப்போதும் அத்தியாய மாற்றத்தைக் காட்டுங்கள்</string>\n    <string name=\"pref_category_reading_mode\">படித்தல் பயன்முறை</string>\n    <string name=\"pref_category_reading\">படித்தல்</string>\n    <string name=\"pref_webtoon_side_padding\">பக்க திணிப்பு</string>\n    <string name=\"pref_hide_threshold\">சுருளில் மெனுவை மறைப்பதற்கான உணர்திறன்</string>\n    <string name=\"pref_highest\">அதிகபட்சம்</string>\n    <string name=\"pref_high\">உயர்ந்த</string>\n    <string name=\"pref_low\">குறைந்த</string>\n    <string name=\"pref_lowest\">மிகக் குறைந்த</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">சூம் அவுட் முடக்கு</string>\n    <string name=\"pref_category_delete_chapters\">அத்தியாயங்களை நீக்கு</string>\n    <string name=\"save_chapter_as_cbz\">சிபிஇசட் காப்பகமாக சேமிக்கவும்</string>\n    <string name=\"split_tall_images\">உயரமான படங்களை பிரிக்கவும்</string>\n    <string name=\"split_tall_images_summary\">வாசகர் செயல்திறனை மேம்படுத்துகிறது</string>\n    <string name=\"tracking_guide\">கண்காணிப்பு வழிகாட்டி</string>\n    <string name=\"pref_auto_update_manga_sync\">படித்த பிறகு முன்னேற்றத்தைப் புதுப்பிக்கவும்</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">படிக்கும்போது முன்னேற்றத்தைப் புதுப்பிக்கவும்</string>\n    <string name=\"services\">டிராக்கர்கள்</string>\n    <string name=\"tracking_info\">வெளிப்புற டிராக்கர் சேவைகளில் அத்தியாய முன்னேற்றத்தைப் புதுப்பிக்க ஒரு வழி ஒத்திசைவு. அவற்றின் கண்காணிப்பு பொத்தானிலிருந்து தனிப்பட்ட உள்ளீடுகளுக்கான கண்காணிப்பை அமைக்கவும்.</string>\n    <string name=\"enhanced_services\">மேம்படுத்தப்பட்ட டிராக்கர்கள்</string>\n    <string name=\"enhanced_services_not_installed\">கிடைக்கிறது ஆனால் சான்று நிறுவப்படவில்லை: %s</string>\n    <string name=\"pref_download_new_categories_details\">விலக்கப்பட்ட வகைகளில் உள்ளீடுகள் சேர்க்கப்பட்ட வகைகளில் இருந்தாலும் பதிவிறக்கம் செய்யப்படாது.</string>\n    <string name=\"download_ahead\">மேலே பதிவிறக்கவும்</string>\n    <string name=\"auto_download_while_reading\">படிக்கும் போது தானாக பதிவிறக்கம்</string>\n    <string name=\"download_ahead_info\">தற்போதைய அத்தியாயம் + அடுத்தது ஏற்கனவே பதிவிறக்கம் செய்யப்பட்டால் மட்டுமே செயல்படும்.</string>\n    <string name=\"enhanced_tracking_info\">குறிப்பிட்ட மூலங்களுக்கான மேம்பட்ட அம்சங்களை வழங்குகிறது. உங்கள் நூலகத்தில் சேர்க்கும்போது உள்ளீடுகள் தானாகவே கண்காணிக்கப்படும்.</string>\n    <string name=\"action_track\">மின்தடம்</string>\n    <string name=\"track_activity_name\">டிராக்கர் உள்நுழைவு</string>\n    <string name=\"pref_hide_in_library_items\">ஏற்கனவே நூலகத்தில் உள்ளீடுகளை மறைக்கவும்</string>\n    <string name=\"pref_storage_location\">சேமிப்பக இடம்</string>\n    <string name=\"pref_storage_location_info\">தானியங்கி காப்புப்பிரதிகள், அத்தியாயம் பதிவிறக்கங்கள் மற்றும் உள்ளக மூலங்களுக்குப் பயன்படுத்தப்படுகிறது.</string>\n    <string name=\"pref_create_backup\">காப்புப்பிரதியை உருவாக்கவும்</string>\n    <string name=\"pref_create_backup_summ\">தற்போதைய நூலகத்தை மீட்டெடுக்க பயன்படுத்தலாம்</string>\n    <string name=\"pref_restore_backup\">காப்புப்பிரதியை மீட்டமைக்கவும்</string>\n    <string name=\"pref_restore_backup_summ\">காப்புப்பிரதி கோப்பிலிருந்து நூலகத்தை மீட்டெடுக்கவும்</string>\n    <string name=\"pref_backup_interval\">தானியங்கி காப்பு அதிர்வெண்</string>\n    <string name=\"action_create\">உருவாக்கு</string>\n    <string name=\"backup_created\">காப்புப்பிரதி உருவாக்கப்பட்டது</string>\n    <string name=\"invalid_backup_file\">தவறான காப்புப்பிரதி கோப்பு:</string>\n    <string name=\"invalid_backup_file_error\">முழு பிழை:</string>\n    <string name=\"invalid_backup_file_missing_manga\">காப்புப்பிரதியில் எந்த நூலக உள்ளீடுகளும் இல்லை.</string>\n    <string name=\"invalid_backup_file_json\">சாதொபொகு காப்புப்பிரதி ஆதரிக்கப்படவில்லை</string>\n    <string name=\"invalid_backup_file_unknown\">காப்பு கோப்பு சிதைந்துள்ளது</string>\n    <string name=\"backup_restore_missing_sources\">ஆதாரங்களைக் காணவில்லை:</string>\n    <string name=\"backup_restore_missing_trackers\">டிராக்கர்கள் உள்நுழையவில்லை:</string>\n    <string name=\"backup_restore_content_full\">நீங்கள் காணாமல் போன நீட்டிப்புகளை நிறுவ வேண்டும், பின்னர் அவற்றைப் பயன்படுத்த கண்காணிப்பு சேவைகளில் உள்நுழைய வேண்டும்.</string>\n    <string name=\"restore_completed\">மீட்டமை முடிந்தது</string>\n    <string name=\"restore_duration\">%1 $ 02 டி மணித்துளி, %2 $ 02 டி நொடி</string>\n    <string name=\"backup_in_progress\">காப்புப்பிரதி ஏற்கனவே நடந்து வருகிறது</string>\n    <string name=\"backup_choice\">நீங்கள் என்ன காப்புப் பிரதி எடுக்க விரும்புகிறீர்கள்?</string>\n    <string name=\"app_settings\">பயன்பாட்டு அமைப்புகள்</string>\n    <string name=\"source_settings\">மூல அமைப்புகள்</string>\n    <string name=\"missing_storage_permission\">சேமிப்பக அனுமதிகள் வழங்கப்படவில்லை</string>\n    <string name=\"empty_backup_error\">காப்புப் பிரதி எடுக்க நூலக உள்ளீடுகள் இல்லை</string>\n    <string name=\"create_backup_file_error\">காப்புப்பிரதி கோப்பை உருவாக்க முடியவில்லை</string>\n    <string name=\"restore_miui_warning\">MIUI உகப்பாக்கம் முடக்கப்பட்டிருந்தால் காப்புப்பிரதி/மீட்டமை சரியாக செயல்படாது.</string>\n    <string name=\"pref_clear_cookies\">குக்கீகளை அழிக்கவும்</string>\n    <string name=\"pref_dns_over_https\">Https (doh) க்கு மேல் dns</string>\n    <string name=\"pref_user_agent_string\">இயல்புநிலை பயனர் முகவர் சரம்</string>\n    <string name=\"error_user_agent_string_blank\">பயனர் முகவர் சரம் காலியாக இருக்க முடியாது</string>\n    <string name=\"error_user_agent_string_invalid\">தவறான பயனர் முகவர் சரம்</string>\n    <string name=\"pref_reset_user_agent_string\">இயல்புநிலை பயனர் முகவர் சரத்தை மீட்டமைக்கவும்</string>\n    <string name=\"requires_app_restart\">நடைமுறைக்கு வர பயன்பாட்டு மறுதொடக்கம் தேவை</string>\n    <string name=\"cookies_cleared\">குக்கீகள் அகற்றப்பட்டன</string>\n    <string name=\"restore_in_progress\">மீட்டமை ஏற்கனவே நடந்து வருகிறது</string>\n    <string name=\"restoring_backup\">காப்புப்பிரதியை மீட்டமைத்தல்</string>\n    <string name=\"restoring_backup_error\">காப்புப்பிரதியை மீட்டெடுப்பது தோல்வியடைந்தது</string>\n    <string name=\"restoring_backup_canceled\">ரத்து செய்யப்பட்ட மீட்டமை</string>\n    <string name=\"available_disk_space_info\">கிடைக்கிறது: %1$s / மொத்தம்: %2$s</string>\n    <string name=\"used_cache\">பயன்படுத்தப்பட்டது: %1$s</string>\n    <string name=\"cache_deleted\">கேச் அழிக்கப்பட்டது, %1$d கோப்புகள் நீக்கப்பட்டன</string>\n    <string name=\"cache_delete_error\">அழிக்கும்போது பிழை ஏற்பட்டது</string>\n    <string name=\"pref_auto_clear_chapter_cache\">பயன்பாட்டு வெளியீட்டில் அத்தியாயம் கேச் அழிக்கவும்</string>\n    <string name=\"syncing_library\">நூலகம் ஒத்திசைத்தல்</string>\n    <string name=\"library_sync_complete\">நூலக ஒத்திசைவு முடிந்தது</string>\n    <string name=\"label_network\">நெட்வொர்க்கிங்</string>\n    <string name=\"pref_invalidate_download_cache\">REINDEX பதிவிறக்கங்கள்</string>\n    <string name=\"pref_invalidate_download_cache_summary\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்களை மறுபரிசீலனை செய்ய பயன்பாடு</string>\n    <string name=\"download_cache_invalidated\">பதிவிறக்கங்கள் அட்டவணை செல்லாதது</string>\n    <string name=\"pref_clear_database\">தரவுத்தளத்தை அழிக்கவும்</string>\n    <string name=\"pref_clear_database_summary\">உங்கள் நூலகத்தில் சேமிக்கப்படாத உள்ளீடுகளுக்கான வரலாற்றை நீக்கவும்</string>\n    <string name=\"clear_database_source_item_count\">தரவுத்தளத்தில் %1$d நூலகமற்ற உள்ளீடுகள்</string>\n    <string name=\"clear_database_confirmation\">நீங்கள் உறுதியாக இருக்கிறீர்களா? அத்தியாயங்கள் மற்றும் நூலகமற்ற உள்ளீடுகளின் முன்னேற்றம் இழக்கப்படும்</string>\n    <string name=\"clear_database_completed\">உள்ளீடுகள் நீக்கப்பட்டன</string>\n    <string name=\"database_clean\">அழிக்க எதுவும் இல்லை</string>\n    <string name=\"pref_clear_webview_data\">வெப்வியூ தரவை அழிக்கவும்</string>\n    <string name=\"webview_data_deleted\">வெப்வியூ தரவு அழிக்கப்பட்டது</string>\n    <string name=\"pref_refresh_library_covers\">நூலக அட்டைகளைப் புதுப்பிக்கவும்</string>\n    <string name=\"pref_reset_viewer_flags\">ஒவ்வொரு தொடர் வாசகர் அமைப்புகளையும் மீட்டமைக்கவும்</string>\n    <string name=\"pref_reset_viewer_flags_summary\">அனைத்து தொடர்களின் வாசிப்பு முறை மற்றும் நோக்குநிலையை மீட்டமைக்கிறது</string>\n    <string name=\"pref_reset_viewer_flags_success\">அனைத்து வாசகர் அமைப்புகளும் மீட்டமைக்கப்படுகின்றன</string>\n    <string name=\"pref_reset_viewer_flags_error\">வாசகர் அமைப்புகளை மீட்டமைக்க முடியவில்லை</string>\n    <string name=\"pref_dump_crash_logs\">செயலிழப்பு பதிவுகளைப் பகிரவும்</string>\n    <string name=\"pref_dump_crash_logs_summary\">டெவலப்பர்களுடன் பகிர்வதற்காக பிழை பதிவுகளை ஒரு கோப்பில் சேமிக்கிறது</string>\n    <string name=\"label_background_activity\">பின்னணி செயல்பாடு</string>\n    <string name=\"pref_disable_battery_optimization\">பேட்டரி தேர்வுமுறை முடக்கு</string>\n    <string name=\"pref_disable_battery_optimization_summary\">பின்னணி நூலக புதுப்பிப்புகள் மற்றும் காப்புப்பிரதிகளுக்கு உதவுகிறது</string>\n    <string name=\"battery_optimization_disabled\">பேட்டரி தேர்வுமுறை ஏற்கனவே முடக்கப்பட்டுள்ளது</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">சாதன அமைப்புகளைத் திறக்க முடியவில்லை</string>\n    <string name=\"about_dont_kill_my_app\">சில உற்பத்தியாளர்களுக்கு பின்னணி சேவைகளைக் கொல்லும் கூடுதல் பயன்பாட்டு கட்டுப்பாடுகள் உள்ளன. இந்த வலைத்தளத்தை எவ்வாறு சரிசெய்வது என்பது பற்றிய கூடுதல் தகவல்கள் உள்ளன.</string>\n    <string name=\"pref_tablet_ui_mode\">டேப்லெட் இடைமுகம்</string>\n    <string name=\"pref_verbose_logging\">சொற்களஞ்சியம் பதிவு</string>\n    <string name=\"pref_verbose_logging_summary\">கணினி பதிவுக்கு வாய்மொழி பதிவுகளை அச்சிடுக (பயன்பாட்டு செயல்திறனைக் குறைக்கிறது)</string>\n    <string name=\"privacy_policy\">தனியுரிமைக் கொள்கை</string>\n    <string name=\"check_for_updates\">புதுப்பிப்புகளை சரிபார்க்கவும்</string>\n    <string name=\"updated_version\">V%1$s க்கு புதுப்பிக்கப்பட்டது</string>\n    <string name=\"pref_enable_acra\">செயலிழப்பு அறிக்கைகளை அனுப்பவும்</string>\n    <string name=\"pref_acra_summary\">எந்த பிழைகளையும் சரிசெய்ய உதவுகிறது. முக்கியமான தரவு எதுவும் அனுப்பப்படாது</string>\n    <string name=\"fdroid_warning\">எஃப்-டிராய்டு கட்டடங்கள் அதிகாரப்பூர்வமாக ஆதரிக்கப்படவில்லை.\\n மேலும் அறிய தட்டவும்.</string>\n    <string name=\"label_downloaded_only\">பதிவிறக்கம் மட்டுமே</string>\n    <string name=\"pref_incognito_mode\">மறைநிலை பயன்முறை</string>\n    <string name=\"pref_incognito_mode_summary\">வரலாற்றைப் படிப்பதை இடைநிறுத்துகிறது</string>\n    <string name=\"pref_incognito_mode_extension_summary\">நீட்டிப்புக்கு படித்தல் வரலாற்றை இடைநிறுத்துங்கள்</string>\n    <string name=\"notification_incognito_text\">மறைநிலை பயன்முறையை முடக்கு</string>\n    <string name=\"downloaded_only_summary\">உங்கள் நூலகத்தில் உள்ள அனைத்து உள்ளீடுகளையும் வடிகட்டுகிறது</string>\n    <string name=\"login_title\">%1$s இல் உள்நுழைக</string>\n    <string name=\"username\">பயனர்பெயர்</string>\n    <string name=\"email\">மின்னஞ்சல் முகவரி</string>\n    <string name=\"password\">கடவுச்சொல்</string>\n    <string name=\"login\">புகுபதிவு</string>\n    <string name=\"login_success\">உள்நுழைந்தது</string>\n    <string name=\"logout_title\">%1$s இலிருந்து வெளியேறவா?</string>\n    <string name=\"logout\">விடுபதிகை</string>\n    <string name=\"logout_success\">நீங்கள் இப்போது வெளியேறிவிட்டீர்கள்</string>\n    <string name=\"unknown_error\">தெரியாத பிழை</string>\n    <string name=\"updating_category\">வகை புதுப்பித்தல்</string>\n    <string name=\"manga_from_library\">நூலகத்திலிருந்து</string>\n    <string name=\"downloaded_chapters\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்கள்</string>\n    <string name=\"intervals_header\">இடைவெளிகள்</string>\n    <string name=\"overlay_header\">மேலடுக்கு</string>\n    <string name=\"tabs_header\">தாவல்கள்</string>\n    <string name=\"no_more_results\">இனி முடிவுகள் இல்லை</string>\n    <string name=\"no_results_found\">முடிவுகள் எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"local_source\">உள்ளக மூல</string>\n    <string name=\"other_source\">மற்றொன்று</string>\n    <string name=\"last_used_source\">கடைசியாக பயன்படுத்தப்பட்டது</string>\n    <string name=\"pinned_sources\">பின்</string>\n    <string name=\"has_results\">முடிவுகள் உள்ளன</string>\n    <string name=\"local_source_help_guide\">உள்ளக மூல வழிகாட்டி</string>\n    <string name=\"no_pinned_sources\">உங்களிடம் பின் ஆதாரங்கள் இல்லை</string>\n    <string name=\"chapter_not_found\">அத்தியாயம் காணப்படவில்லை</string>\n    <string name=\"local_invalid_format\">தவறான அத்தியாயம் வடிவம்</string>\n    <string name=\"local_filter_order_by\">வழங்கியவர்</string>\n    <string name=\"date\">திகதி</string>\n    <string name=\"ongoing\">நடந்து கொண்டிருக்கிறது</string>\n    <string name=\"unknown\">தெரியவில்லை</string>\n    <string name=\"unknown_author\">தெரியாத ஆசிரியர்</string>\n    <string name=\"unknown_status\">தெரியாத நிலை</string>\n    <string name=\"licensed\">உரிமம்</string>\n    <string name=\"publishing_finished\">வெளியீடு முடிந்தது</string>\n    <string name=\"unknown_title\">தெரியாத தலைப்பு</string>\n    <string name=\"confirm_add_duplicate_manga\">அதே பெயருடன் உங்கள் நூலகத்தில் ஒரு நுழைவு உள்ளது.\\n\\n நீங்கள் இன்னும் தொடர விரும்புகிறீர்களா?</string>\n    <string name=\"manga_added_library\">நூலகத்தில் சேர்க்கப்பட்டது</string>\n    <string name=\"cancelled\">ரத்து செய்யப்பட்டது</string>\n    <string name=\"on_hiatus\">இடைவெளியில்</string>\n    <string name=\"add_to_library\">நூலகத்தில் சேர்க்கவும்</string>\n    <string name=\"in_library\">நூலகத்தில்</string>\n    <string name=\"remove_from_library\">நூலகத்திலிருந்து அகற்று</string>\n    <string name=\"copied_to_clipboard_plain\">இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது</string>\n    <string name=\"copied_to_clipboard\">இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது:\\n %1$s</string>\n    <string name=\"clipboard_copy_error\">இடைநிலைப்பலகைக்கு நகலெடுப்பதில் தோல்வி</string>\n    <string name=\"source_not_installed\">சான்று நிறுவப்படவில்லை: %1$s</string>\n    <string name=\"snack_add_to_library\">நூலகத்தில் சேர்க்கவா?</string>\n    <string name=\"description_placeholder\">விளக்கம் இல்லை</string>\n    <string name=\"display_mode_chapter\">அத்தியாயம் %1$s</string>\n    <string name=\"manga_display_interval_title\">ஒவ்வொன்றையும் மதிப்பிடுங்கள்</string>\n    <string name=\"manga_display_modified_interval_title\">ஒவ்வொன்றையும் புதுப்பிக்க அமைக்கவும்</string>\n    <string name=\"manga_interval_expected_update\">புதிய அத்தியாயங்கள் சுமார் %1$s இல் வெளியிடப்படும் என்று கணிக்கப்பட்டுள்ளது, ஒவ்வொரு %2$s ஐச் சுற்றி உள்ளது.</string>\n    <string name=\"manga_interval_expected_update_null\">இந்த மங்கா முடிந்தது, அல்லது கணிக்கப்பட்ட வெளியீட்டு தேதி இல்லை.</string>\n    <string name=\"manga_interval_expected_update_soon\">விரைவில்</string>\n    <string name=\"manga_interval_custom_amount\">தனிப்பயன் புதுப்பிப்பு அதிர்வெண்:</string>\n    <string name=\"chapter_downloading_progress\">பதிவிறக்குதல் (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">பிழை</string>\n    <string name=\"chapter_paused\">இடைநிறுத்தப்பட்டது</string>\n    <string name=\"show_title\">மூல தலைப்பு</string>\n    <string name=\"show_chapter_number\">அத்தியாயம் எண்</string>\n    <string name=\"sort_by_source\">மூலத்தால்</string>\n    <string name=\"sort_by_number\">அத்தியாய எண் மூலம்</string>\n    <string name=\"sort_by_upload_date\">பதிவேற்றுவதன் மூலம்</string>\n    <string name=\"manga_download\">பதிவிறக்கம்</string>\n    <string name=\"download_unread\">படிக்காதது</string>\n    <string name=\"custom_cover\">தனிப்பயன் கவர்</string>\n    <string name=\"manga_cover\">கவர்</string>\n    <string name=\"cover_saved\">கவர் சேமிக்கப்பட்டது</string>\n    <string name=\"error_saving_cover\">கவர் சேமிக்கும் பிழை</string>\n    <string name=\"error_sharing_cover\">பிழை பகிர்வு கவர்</string>\n    <string name=\"confirm_delete_chapters\">தேர்ந்தெடுக்கப்பட்ட அத்தியாயங்களை நீக்க விரும்புகிறீர்களா?</string>\n    <string name=\"chapter_settings\">அத்தியாயம் அமைப்புகள்</string>\n    <string name=\"confirm_set_chapter_settings\">இந்த அமைப்புகளை இயல்புநிலையாக சேமிக்க விரும்புகிறீர்களா?</string>\n    <string name=\"also_set_chapter_settings_for_library\">எனது நூலகத்தில் உள்ள அனைத்து உள்ளீடுகளுக்கும் பொருந்தும்</string>\n    <string name=\"set_chapter_settings_as_default\">இயல்புநிலையாக அமைக்கவும்</string>\n    <string name=\"no_chapters_error\">அத்தியாயங்கள் எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"are_you_sure\">நீங்கள் உறுதியாக இருக்கிறீர்களா?</string>\n    <string name=\"exclude_scanlators\">ச்கேன்லேட்டர்களை விலக்கு</string>\n    <string name=\"no_scanlators_found\">ச்கேன்லேட்டர்கள் எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"completed\">முடிந்தது</string>\n    <string name=\"dropped\">கைவிடப்பட்டது</string>\n    <string name=\"on_hold\">நிறுத்தி</string>\n    <string name=\"paused\">இடைநிறுத்தப்பட்டது</string>\n    <string name=\"plan_to_read\">படிக்க திட்டமிடுங்கள்</string>\n    <string name=\"confirm_tracker_update\">அத்தியாயம் %d க்கு டிராக்கர்களைப் புதுப்பிக்கவா?</string>\n    <string name=\"trackers_updated_summary\">டிராக்கர்கள் அத்தியாயம் %d க்கு புதுப்பிக்கப்பட்டன</string>\n    <string name=\"manga_tracking_tab\">கண்காணிப்பு</string>\n    <string name=\"add_tracking\">கண்காணிப்பைச் சேர்க்கவும்</string>\n    <string name=\"unread\">படிக்காதது</string>\n    <string name=\"reading\">படித்தல்</string>\n    <string name=\"repeating\">மீண்டும் படிக்க</string>\n    <string name=\"reading_list\">படித்தல் பட்டியல்</string>\n    <string name=\"wish_list\">விருப்பப்பட்டியல்</string>\n    <string name=\"complete_list\">முழுமையான பட்டியல்</string>\n    <string name=\"on_hold_list\">வைத்திருக்கும் பட்டியலில்</string>\n    <string name=\"score\">கெலிப்பெண்</string>\n    <string name=\"title\">தலைப்பு</string>\n    <string name=\"status\">நிலை</string>\n    <string name=\"track_status\">நிலை</string>\n    <string name=\"track_started_reading_date\">தொடக்க தேதி</string>\n    <string name=\"track_finished_reading_date\">தேதியை முடிக்க</string>\n    <string name=\"track_type\">வகை</string>\n    <string name=\"myanimelist_relogin\">தயவுசெய்து மீண்டும் மால் இல் உள்நுழைக</string>\n    <string name=\"source_unsupported\">சான்று ஆதரிக்கப்படவில்லை</string>\n    <string name=\"unfinished_list\">முடிக்கப்படாத பட்டியல்</string>\n    <string name=\"error_no_match\">போட்டி எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"track_error\">%1$s பிழை: %2$s</string>\n    <string name=\"track_remove_date_conf_title\">தேதியை அகற்றவா?</string>\n    <string name=\"track_remove_start_date_conf_text\">இது நீங்கள் முன்னர் தேர்ந்தெடுக்கப்பட்ட தொடக்க தேதியை %s இலிருந்து அகற்றும்</string>\n    <string name=\"track_remove_finish_date_conf_text\">இது நீங்கள் முன்னர் தேர்ந்தெடுக்கப்பட்ட பூச்சு தேதியை %s இலிருந்து அகற்றும்</string>\n    <string name=\"track_delete_title\">%s கண்காணிப்பை அகற்றவா?</string>\n    <string name=\"track_delete_remote_text\">%s இலிருந்து அகற்றவும்</string>\n    <string name=\"error_category_exists\">இந்த பெயருடன் ஒரு வகை ஏற்கனவே உள்ளது!</string>\n    <string name=\"snack_categories_deleted\">வகைகள் நீக்கப்பட்டன</string>\n    <string name=\"dialog_with_checkbox_remove_description\">இது இந்த அத்தியாயத்தின் வாசிப்பு தேதியை அகற்றும். நீங்கள் உறுதியாக இருக்கிறீர்களா?</string>\n    <string name=\"dialog_with_checkbox_reset\">இந்த நுழைவுக்கான அனைத்து அத்தியாயங்களையும் மீட்டமைக்கவும்</string>\n    <string name=\"track_delete_text\">இது உள்நாட்டில் கண்காணிப்பை அகற்றும்.</string>\n    <string name=\"picture_saved\">படம் சேமிக்கப்பட்டது</string>\n    <string name=\"error_saving_picture\">படம் சேமிப்பதில் பிழை</string>\n    <string name=\"custom_filter\">தனிப்பயன் வடிகட்டி</string>\n    <string name=\"set_as_cover\">கவர் அமைக்கவும்</string>\n    <string name=\"cover_updated\">கவர் புதுப்பிக்கப்பட்டது</string>\n    <string name=\"share_page_info\">%1$s: %2$s, பக்கம் %3$d</string>\n    <string name=\"chapter_progress\">பக்கம்: %1$d</string>\n    <string name=\"no_next_chapter\">அடுத்த அத்தியாயம் காணப்படவில்லை</string>\n    <string name=\"decode_image_error\">படத்தை ஏற்ற முடியவில்லை</string>\n    <string name=\"confirm_set_image_as_cover\">இந்த படத்தை கவர் கலையாகப் பயன்படுத்தவா?</string>\n    <string name=\"pref_category_for_this_series\">இந்த தொடருக்கு</string>\n    <string name=\"viewer\">படித்தல் பயன்முறை</string>\n    <string name=\"transition_finished\">முடிந்தது:</string>\n    <string name=\"transition_current\">நடப்பு:</string>\n    <string name=\"transition_next\">அடுத்து:</string>\n    <string name=\"transition_previous\">முந்தைய:</string>\n    <string name=\"transition_no_next\">அடுத்த அத்தியாயம் இல்லை</string>\n    <string name=\"transition_no_previous\">முந்தைய அத்தியாயம் எதுவும் இல்லை</string>\n    <string name=\"transition_pages_loading\">பக்கங்களை ஏற்றுகிறது…</string>\n    <string name=\"transition_pages_error\">பக்கங்களை ஏற்றுவதில் தோல்வி: %1$s</string>\n    <string name=\"page_list_empty_error\">பக்கங்கள் எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"loader_not_implemented_error\">சான்று கிடைக்கவில்லை</string>\n    <string name=\"cant_open_last_read_chapter\">கடைசி வாசிப்பு அத்தியாயத்தைத் திறக்க முடியவில்லை</string>\n    <string name=\"clear_history_completed\">வரலாறு நீக்கப்பட்டது</string>\n    <string name=\"updating_library\">நூலகம் புதுப்பித்தல்</string>\n    <string name=\"update_already_running\">ஒரு புதுப்பிப்பு ஏற்கனவே இயங்குகிறது</string>\n    <string name=\"clear_history_confirmation\">நீங்கள் உறுதியாக இருக்கிறீர்களா? எல்லா வரலாற்றும் இழக்கப்படும்.</string>\n    <string name=\"source_empty_screen\">எந்த மூலமும் கிடைக்கவில்லை</string>\n    <string name=\"crash_screen_title\">அச்சச்சோ!</string>\n    <string name=\"crash_screen_description\">%s எதிர்பாராத பிழையில் ஓடியது. மோதல் பதிவுகளை எங்கள் உதவி சேனலில் டிச்கார்டில் பகிர்ந்து கொள்ள பரிந்துரைக்கிறோம்.</string>\n    <string name=\"crash_screen_restart_application\">விண்ணப்பத்தை மறுதொடக்கம் செய்யுங்கள்</string>\n    <string name=\"label_overview_section\">கண்ணோட்டம்</string>\n    <string name=\"source_filter_empty_screen\">நிறுவப்பட்ட மூலமும் கிடைக்கவில்லை</string>\n    <string name=\"migration_help_guide\">மூல இடம்பெயர்வு வழிகாட்டி</string>\n    <string name=\"migration_dialog_what_to_include\">சேர்க்க தரவைத் தேர்ந்தெடுக்கவும்</string>\n    <string name=\"migration_selection_prompt\">இடம்பெயர ஒரு மூலத்தைத் தேர்ந்தெடுக்கவும்</string>\n    <string name=\"label_completed_titles\">நிறைவு செய்யப்பட்ட உள்ளீடுகள்</string>\n    <string name=\"label_read_duration\">காலத்தைப் படியுங்கள்</string>\n    <string name=\"label_titles_section\">உள்ளீடுகள்</string>\n    <string name=\"label_titles_in_global_update\">உலகளாவிய புதுப்பிப்பில்</string>\n    <string name=\"migrate\">குடியேறவும்</string>\n    <string name=\"copy\">நகலெடு</string>\n    <string name=\"empty_screen\">சரி, இது மோசமானது</string>\n    <string name=\"not_installed\">நிறுவப்படவில்லை</string>\n    <string name=\"label_total_chapters\">மொத்தம்</string>\n    <string name=\"label_read_chapters\">படிக்க</string>\n    <string name=\"label_tracker_section\">டிராக்கர்கள்</string>\n    <string name=\"label_tracked_titles\">கண்காணிக்கப்பட்ட உள்ளீடுகள்</string>\n    <string name=\"label_mean_score\">சராசரி மதிப்பெண்</string>\n    <string name=\"label_used\">பயன்படுத்தப்பட்டது</string>\n    <string name=\"download_insufficient_space\">குறைந்த சேமிப்பு இடம் காரணமாக அத்தியாயங்களை பதிவிறக்கம் செய்ய முடியவில்லை</string>\n    <string name=\"download_queue_size_warning\">எச்சரிக்கை: பெரிய மொத்த பதிவிறக்கங்கள் ஆதாரங்கள் மெதுவாகவும்/அல்லது மிஓனைத் தடுக்கவும் வழிவகுக்கும். மேலும் அறிய தட்டவும்.</string>\n    <string name=\"not_applicable\">இதற்கில்லை</string>\n    <string name=\"day_short\">%d.டி.</string>\n    <string name=\"notification_updating_progress\">நூலகத்தைப் புதுப்பித்தல்… (%s)</string>\n    <string name=\"hour_short\">%d.எச்</string>\n    <string name=\"minute_short\">%d.எம்</string>\n    <string name=\"seconds_short\">%d.எச்</string>\n    <string name=\"download_queue_error\">அத்தியாயங்களை பதிவிறக்கம் செய்ய முடியவில்லை. பதிவிறக்கங்கள் பிரிவில் நீங்கள் மீண்டும் முயற்சி செய்யலாம்</string>\n    <string name=\"notification_size_warning\">பெரிய புதுப்பிப்புகள் ஆதாரங்களுக்கு தீங்கு விளைவிக்கும் மற்றும் மெதுவான புதுப்பிப்புகளுக்கு வழிவகுக்கும் மற்றும் பேட்டரி பயன்பாட்டையும் அதிகரிக்கும். மேலும் அறிய தட்டவும்.</string>\n    <string name=\"notification_new_chapters\">புதிய அத்தியாயங்கள் காணப்பட்டன</string>\n    <string name=\"notification_chapters_single\">அத்தியாயம் %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">அத்தியாயம் %1$s மற்றும் %2$d மேலும்</string>\n    <string name=\"notification_chapters_multiple\">அத்தியாயங்கள் %1$s</string>\n    <string name=\"notification_update_error\">%1$d புதுப்பிப்பு (கள்) தோல்வியடைந்தது</string>\n    <string name=\"learn_more\">மேலும் அறிய தட்டவும்</string>\n    <string name=\"notification_cover_update_failed\">அட்டையைப் புதுப்பிக்கத் தவறிவிட்டது</string>\n    <string name=\"notification_first_add_to_library\">இதைச் செய்வதற்கு முன் உங்கள் நூலகத்தில் உள்ளீட்டைச் சேர்க்கவும்</string>\n    <string name=\"library_errors_help\">நூலக புதுப்பிப்பு பிழைகளை எவ்வாறு சரிசெய்வது என்பதற்கான உதவிக்கு, %1$s ஐப் பார்க்கவும்</string>\n    <string name=\"skipped_reason_completed\">தொடர் முடிந்ததால் தவிர்க்கப்பட்டது</string>\n    <string name=\"skipped_reason_not_caught_up\">படிக்காத அத்தியாயங்கள் இருப்பதால் தவிர்க்கப்பட்டது</string>\n    <string name=\"skipped_reason_not_started\">அத்தியாயங்கள் எதுவும் படிக்காததால் தவிர்க்கப்பட்டது</string>\n    <string name=\"skipped_reason_not_always_update\">தொடருக்கு புதுப்பிப்புகள் தேவையில்லை என்பதால் தவிர்க்கப்பட்டது</string>\n    <string name=\"skipped_reason_not_in_release_period\">இன்று எந்த வெளியீடும் எதிர்பார்க்கப்படவில்லை என்பதால் தவிர்க்கப்பட்டது</string>\n    <string name=\"file_select_cover\">கவர் படத்தைத் தேர்ந்தெடுக்கவும்</string>\n    <string name=\"file_select_backup\">காப்புப்பிரதி கோப்பைத் தேர்ந்தெடுக்கவும்</string>\n    <string name=\"file_picker_error\">கோப்பு பிக்கர் பயன்பாடு எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"file_picker_uri_permission_unsupported\">தொடர்ச்சியான கோப்புறை அணுகலைப் பெறுவதில் தோல்வி. பயன்பாடு எதிர்பாராத விதமாக நடந்து கொள்ளலாம்.</string>\n    <string name=\"file_null_uri_error\">எந்த கோப்பும் தேர்ந்தெடுக்கப்படவில்லை</string>\n    <string name=\"update_check_confirm\">பதிவிறக்கம்</string>\n    <string name=\"update_check_open\">கிட்அப்பில் திறந்திருக்கும்</string>\n    <string name=\"update_check_eol\">இந்த ஆண்ட்ராய்டு பதிப்பு இனி ஆதரிக்கப்படாது</string>\n    <string name=\"update_check_no_new_updates\">புதிய புதுப்பிப்புகள் எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"update_check_notification_download_in_progress\">பதிவிறக்கம்…</string>\n    <string name=\"update_check_notification_download_complete\">புதுப்பிப்பை நிறுவ தட்டவும்</string>\n    <string name=\"update_check_notification_download_error\">பிழையைப் பதிவிறக்கவும்</string>\n    <string name=\"update_check_notification_update_available\">புதிய பதிப்பு கிடைக்கிறது!</string>\n    <string name=\"information_no_downloads\">பதிவிறக்கங்கள் இல்லை</string>\n    <string name=\"information_no_recent\">அண்மைக் கால புதுப்பிப்புகள் இல்லை</string>\n    <string name=\"information_no_recent_manga\">அண்மைக் காலத்தில் எதுவும் படிக்கவில்லை</string>\n    <string name=\"information_empty_library\">உங்கள் நூலகம் காலியாக உள்ளது</string>\n    <string name=\"information_no_manga_category\">வகை காலியாக உள்ளது</string>\n    <string name=\"information_no_entries_found\">இந்த பிரிவில் உள்ளீடுகள் எதுவும் காணப்படவில்லை</string>\n    <string name=\"getting_started_guide\">தொடங்குதல் வழிகாட்டி</string>\n    <string name=\"information_empty_category\">உங்களிடம் வகைகள் இல்லை. உங்கள் நூலகத்தை ஒழுங்கமைக்க ஒன்றை உருவாக்க பிளச் பொத்தானைத் தட்டவும்.</string>\n    <string name=\"information_empty_category_dialog\">உங்களிடம் இதுவரை எந்த வகைகளும் இல்லை.</string>\n    <string name=\"information_cloudflare_bypass_failure\">கிளவுட்ஃப்ளேரைத் தவிர்ப்பதில் தோல்வி</string>\n    <string name=\"information_cloudflare_help\">கிளவுட்ஃப்ளேர் உதவிக்கு இங்கே தட்டவும்</string>\n    <string name=\"information_required_plain\">*தேவை</string>\n    <string name=\"information_webview_required\">பயன்பாடு செயல்பட வெப்வியூ தேவை</string>\n    <string name=\"information_webview_outdated\">சிறந்த இணக்கத்தன்மைக்கு வெப்வியூ பயன்பாட்டைப் புதுப்பிக்கவும்</string>\n    <string name=\"chapter_settings_updated\">புதுப்பிக்கப்பட்ட இயல்புநிலை அத்தியாய அமைப்புகள்</string>\n    <string name=\"download_notifier_downloader_title\">பதிவிறக்குபவர்</string>\n    <string name=\"download_notifier_title_error\">பிழை</string>\n    <string name=\"download_notifier_unknown_error\">எதிர்பாராத பிழை காரணமாக அத்தியாயத்தைப் பதிவிறக்க முடியவில்லை</string>\n    <string name=\"download_notifier_text_only_wifi\">வைஃபை இணைப்பு எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"download_notifier_no_network\">பிணைய இணைப்பு எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"download_notifier_download_paused\">பதிவிறக்கங்கள் இடைநிறுத்தப்பட்டன</string>\n    <string name=\"download_notifier_split_page_not_found\">பக்கம் %d பிரிக்கும் போது காணப்படவில்லை</string>\n    <string name=\"download_notifier_split_page_path_not_found\">பக்கம் %d இன் கோப்பு பாதையை கண்டுபிடிக்க முடியவில்லை</string>\n    <string name=\"download_notifier_cache_renewal\">பதிவிறக்கங்களை சரிபார்க்கிறது</string>\n    <string name=\"channel_common\">பொது</string>\n    <string name=\"channel_progress\">முன்னேற்றம்</string>\n    <string name=\"channel_complete\">முழுமையானது</string>\n    <string name=\"channel_errors\">பிழைகள்</string>\n    <string name=\"channel_new_chapters\">அத்தியாயம் புதுப்பிப்புகள்</string>\n    <string name=\"channel_app_updates\">பயன்பாட்டு புதுப்பிப்புகள்</string>\n    <string name=\"channel_ext_updates\">நீட்டிப்பு புதுப்பிப்புகள்</string>\n    <string name=\"spen_previous_page\">முந்தைய பக்கம்</string>\n    <string name=\"spen_next_page\">அடுத்த பக்கம்</string>\n    <string name=\"appwidget_updates_description\">அண்மைக் காலத்தில் புதுப்பிக்கப்பட்ட நூலக உள்ளீடுகளைப் பார்க்கவும்</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/te/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">ఒక నిమిషము తరువాత</item>\n        <item quantity=\"other\">%1$s నిమిషముల తరువాత</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/te/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"information_no_downloads\">దిగుమతులు ఏమి లేవు</string>\n    <string name=\"label_help\">సహాయము</string>\n    <string name=\"label_extension_info\">పొడిగింపు యొక్క సమాచారము</string>\n    <string name=\"label_extensions\">పొడిగింపులు</string>\n    <string name=\"label_migration\">వలస</string>\n    <string name=\"label_backup\">భద్రపరచడము మరియు పునరుద్ధారణ</string>\n    <string name=\"label_sources\">మూలాలు</string>\n    <string name=\"label_recent_manga\">చరిత్ర</string>\n    <string name=\"label_recent_updates\">నవీకరణలు</string>\n    <string name=\"label_library\">గ్రంథాలయము</string>\n    <string name=\"label_download_queue\">దిగుమతి వరుస</string>\n    <string name=\"label_settings\">అమరికలు</string>\n    <string name=\"label_more\">మరింత</string>\n    <string name=\"name\">పేరు</string>\n    <string name=\"action_rename_category\">విభాగ పేరును మార్చుము</string>\n    <string name=\"action_edit_categories\">విభాగములను సవరించుము</string>\n    <string name=\"action_add_category\">విభాగమును జోడించుము</string>\n    <string name=\"action_add\">జోడించుము</string>\n    <string name=\"action_edit\">సవరించుము</string>\n    <string name=\"action_disable_all\">అన్నిటిని అచైతన్న పరుచుము</string>\n    <string name=\"action_enable_all\">అన్నిటిని చైతన్న పరుచుము</string>\n    <string name=\"action_update_library\">గ్రంథాలయాన్ని నవీకరించుము</string>\n    <string name=\"action_delete\">తొలగించుము</string>\n    <string name=\"action_remove_bookmark\">అధ్యాయ గుర్తు చిహ్నాన్ని తొలగించుము</string>\n    <string name=\"action_bookmark\">అధ్యాయమును గుర్తు పెట్టుకొనుము</string>\n    <string name=\"action_download\">దిగుమతి</string>\n    <string name=\"action_mark_previous_as_read\">దీని మునుపటివాటికి చదివినట్లు గుర్తును పెట్టుము</string>\n    <string name=\"action_mark_as_unread\">చదవనట్లు గుర్తును పెట్టుము</string>\n    <string name=\"action_mark_as_read\">చదివినట్లు గుర్తును పెట్టుము</string>\n    <string name=\"action_select_inverse\">ఎంపికలను విపరీతమును చేయుము</string>\n    <string name=\"action_select_all\">అన్నిటినీ ఎంచుకోండి</string>\n    <string name=\"action_global_search\">ప్రాపంచిక శోధన</string>\n    <string name=\"action_search_settings\">శోధన అమరికలు</string>\n    <string name=\"action_search\">వెతకండి</string>\n    <string name=\"action_sort_date_added\">జోడించబడిన తేదీ</string>\n    <string name=\"action_sort_latest_chapter\">నూతన అధ్యాయము</string>\n    <string name=\"action_sort_last_read\">చివరిగా చదివినది</string>\n    <string name=\"action_sort_total\">సమస్త అధ్యాయములు</string>\n    <string name=\"action_sort_alpha\">అక్షరక్రమములో</string>\n    <string name=\"action_filter_empty\">ఫిల్టర్ను తొలగించుము</string>\n    <string name=\"action_filter_unread\">చదవనివి</string>\n    <string name=\"action_filter_bookmarked\">గుర్తు ఉంచబడినవి</string>\n    <string name=\"action_filter\">శోధకము</string>\n    <string name=\"action_menu\">వివరాలపట్టిక</string>\n    <string name=\"action_settings\">అమరికలు</string>\n    <string name=\"history\">చరిత్ర</string>\n    <string name=\"track\">కంట కనిపెట్టుట</string>\n    <string name=\"chapters\">అధ్యాయాలు</string>\n    <string name=\"manga\">లైబ్రరీ ఎంట్రీలు</string>\n    <string name=\"categories\">విభాగములు</string>\n    <string name=\"information_empty_category\">మీ దగ్గర ఏ విభాగములు లేవు। మీ గ్రంథాలయాన్ని సరికూర్చుకోడానికి ప్లస్ చిహ్నాన్ని నొక్కి కొత్త దాన్ని సృష్టించుకోండి॥</string>\n    <string name=\"information_empty_library\">మీ గ్రంథాలయము ఖాళీగా ఉన్నది</string>\n    <string name=\"information_no_recent_manga\">ఈ మధ్య మీరు ఏమి చదవలేదు</string>\n    <string name=\"information_no_recent\">కొత్త నవీకరణలు లేవు</string>\n    <string name=\"action_remove\">తొలగించుము</string>\n    <string name=\"action_retry\">మళ్ళీ ప్రయత్నించుము</string>\n    <string name=\"action_next_chapter\">తదుపరి అధ్యాయము</string>\n    <string name=\"action_previous_chapter\">మునుపటి అధ్యాయము</string>\n    <string name=\"action_pause\">తాత్కాలికముగా నిలిపి వేయుము</string>\n    <string name=\"action_view_chapters\">అధ్యాయాములను చూడుము</string>\n    <string name=\"action_edit_cover\">ముఖచిత్రమును సవరించుము</string>\n    <string name=\"action_move_category\">విభాగములను క్రమీకరించుము</string>\n    <string name=\"action_sort_chapter_fetch_date\">పొందబడిన తేదీ</string>\n    <string name=\"action_filter_tracked\">కంట కనిపెట్టబడ్డవి</string>\n    <string name=\"label_default\">ప్రమాణము</string>\n    <string name=\"action_sort_count\">మొత్తం ఎంట్రీలు</string>\n    <string name=\"label_warning\">హెచ్చరిక</string>\n    <string name=\"confirm_lock_change\">మార్పును నిర్ధారించడానికి ప్రమాణీకరించండి</string>\n    <string name=\"action_open_in_browser\">జాలసంచారకములో తెరువుము</string>\n    <string name=\"action_newest\">నూతనమైనది</string>\n    <string name=\"action_webview_refresh\">నవీకరించుము</string>\n    <string name=\"pref_category_reader\">పాఠకము</string>\n    <string name=\"action_start_downloading_now\">దిగుమతిని ఇప్పుడు ప్రారంభించుము</string>\n    <string name=\"pref_category_tracking\">జాడ కనిపెట్టుట</string>\n    <string name=\"action_display_comfortable_grid\">తేలికపాటి వరుస</string>\n    <string name=\"action_display_grid\">ఇమిడ్చిన వరుస</string>\n    <string name=\"action_migrate\">వలస</string>\n    <string name=\"action_display_mode\">ప్రదర్శన ప్రణాలికము</string>\n    <string name=\"action_display_local_badge\">స్థానిక సోర్స్</string>\n    <string name=\"action_start\">మొదలు పెట్టుము</string>\n    <string name=\"action_resume\">పునఃప్రారంభించుము</string>\n    <string name=\"action_open_in_web_view\">\\\"వెబ్ వ్యూ\\\" లో తెరుము</string>\n    <string name=\"action_display\">ప్రదర్శన</string>\n    <string name=\"action_display_list\">జాబితా</string>\n    <string name=\"action_display_show_tabs\">విభాగ మీటలను చూపుము</string>\n    <string name=\"action_display_show_number_of_items\">వస్తు సంఖ్యను చూపుము</string>\n    <string name=\"action_disable\">అశక్త పరుచుము</string>\n    <string name=\"action_pin\">పిన్</string>\n    <string name=\"action_unpin\">పిన్నును తీయుము</string>\n    <string name=\"action_cancel\">రద్దు చెయ్యుము</string>\n    <string name=\"action_cancel_all\">అన్నిటి రద్దు చెయ్యుము</string>\n    <string name=\"cancel_all_for_series\">ఈ ధారావాహిక కొరకు అన్నిటిని రద్దు చెయ్యుము</string>\n    <string name=\"action_sort\">సర్దుము</string>\n    <string name=\"action_order_by_chapter_number\">అధ్యాయము సంఖ్యను బట్టి</string>\n    <string name=\"action_oldest\">అన్నిటికన్నా పురాతనమైనది</string>\n    <string name=\"action_asc\">ఆరోహికము</string>\n    <string name=\"action_move_to_top\">అగ్రమ స్థానానికి జరుపుము</string>\n    <string name=\"action_move_to_bottom\">చిట్ట చివరకు జరుపుము</string>\n    <string name=\"action_share\">పంచుకొనుము</string>\n    <string name=\"action_save\">భద్రపరుచుము</string>\n    <string name=\"action_reset\">పునః స్థాపించుము</string>\n    <string name=\"action_open_log\">విషయ చిట్టాను తెరువుము</string>\n    <string name=\"action_restore\">పునఃస్థాపనను చేయుము</string>\n    <string name=\"action_webview_back\">వెనుకకు</string>\n    <string name=\"action_webview_forward\">ముందుకు</string>\n    <string name=\"loading\">లోడ్ అవుతుంది…</string>\n    <string name=\"app_not_available\">అనువర్తనము అందుబాటులో లేదు</string>\n    <string name=\"pref_category_general\">సామాన్యము</string>\n    <string name=\"pref_category_appearance\">రూపము</string>\n    <string name=\"pref_category_library\">గ్రంథాలయము</string>\n    <string name=\"pref_category_downloads\">దిగుమతులు</string>\n    <string name=\"pref_category_advanced\">ఆధునికము</string>\n    <string name=\"action_display_download_badge\">దిగుమతి చేసిన అధ్యాయములు</string>\n    <string name=\"action_display_language_badge\">భాష</string>\n    <string name=\"pref_category_about\">గురించి</string>\n    <string name=\"pref_category_theme\">వీక్షణము</string>\n    <string name=\"theme_system\">పరికరమును అనుసరించుము</string>\n    <string name=\"theme_light\">ఆపుము</string>\n    <string name=\"theme_dark\">ప్రారంభించుము</string>\n    <string name=\"pref_app_theme\">అనువర్తన వీక్షణము</string>\n    <string name=\"action_order_by_upload_date\">ఎగుమతి తారీఖును బట్టి</string>\n    <string name=\"action_desc\">అవరోహికము</string>\n    <string name=\"action_install\">ప్రతిష్ఠాపించుము</string>\n    <string name=\"action_undo\">పూర్వ స్థితికి వెళ్ళుము</string>\n    <string name=\"theme_monet\">క్రియాశీలము</string>\n    <string name=\"action_show_errors\">తప్పిద వివరములను చూచుటకై నొక్కుము</string>\n    <string name=\"theme_greenapple\">ఆకుపచ్చ సేవఫలము</string>\n    <string name=\"theme_yinyang\">యిన్ మరియు యాంగ్</string>\n    <string name=\"lock_never\">ఎప్పుడూ వద్దు</string>\n    <string name=\"theme_midnightdusk\">సందెచీకటి</string>\n    <string name=\"secure_screen\">తెరను సంరక్షించుము</string>\n    <string name=\"secure_screen_summary\">అనువర్తనములను మారునపుడు వర్తక విషయములను దాయుము మరియు తెర యొక్క చిత్రములను తీయుటను నిరోధించుము</string>\n    <string name=\"hide_notification_content\">సూచన విషయములను దాయుము</string>\n    <string name=\"pref_category_nsfw_content\">పెద్దలకు మాత్రమే (+18) మూలాలు</string>\n    <string name=\"pref_show_nsfw_source\">మూలాలు మరియు పొడిగింపుల జాబితాలలో చూపుము</string>\n    <string name=\"theme_strawberrydaiquiri\">తుప్పపండు</string>\n    <string name=\"theme_tako\">టాకో</string>\n    <string name=\"theme_tealturquoise\">టీల్ మరియు మణి</string>\n    <string name=\"theme_yotsuba\">యోట్సూబ</string>\n    <string name=\"pref_dark_theme_pure_black\">స్వచ్ఛమైన నలుపు వీక్షణ</string>\n    <string name=\"pref_category_security\">భద్రత</string>\n    <string name=\"lock_with_biometrics\">తాళమును తెరుచుట ఆవశ్యకము</string>\n    <string name=\"lock_when_idle\">కార్యచరణము లేనిచో తాళమును వేయుము</string>\n    <string name=\"lock_always\">ఎల్లప్పుడు</string>\n    <string name=\"pref_date_format\">తారీఖు స్వరూపము</string>\n    <string name=\"pref_manage_notifications\">సూచనలను నిర్వహించుము</string>\n    <string name=\"label_stats\">గణాంకాలు</string>\n    <string name=\"label_started\">ప్రారంభించారు</string>\n    <string name=\"action_close\">బంజేయండి</string>\n    <string name=\"action_display_show_continue_reading_button\">చదవడం కొనసాగించే బటన్ చూపియండి</string>\n    <string name=\"label_local\">లోకల్</string>\n    <string name=\"label_downloaded\">డౌన్లోడ్ అయినవి</string>\n    <string name=\"on\">ఓన్</string>\n    <string name=\"action_show_manga\">ఎంట్రీ చూపియండి</string>\n    <string name=\"off\">ఆఫ్</string>\n    <string name=\"action_sort_unread_count\">చదవని లెక్క</string>\n    <string name=\"action_sort_last_manga_update\">చివరి అప్డేట్ తనిఖీ</string>\n    <string name=\"action_remove_everything\">మొత్తం తీసేయండి</string>\n    <string name=\"delete_category_confirmation\">మీరు \\\"%s\\\" క్యాటగిరీ తీసివేయాలి అనుకుంటున్నారా?</string>\n    <string name=\"delete_category\">క్యాటగిరీ తీసేయండి</string>\n    <string name=\"action_move_to_top_all_for_series\">సిరీస్ పైన పెట్టండి</string>\n    <string name=\"action_search_hint\">అన్వేషించండి…</string>\n    <string name=\"action_not_now\">ఇప్పుడు కాదు</string>\n    <string name=\"action_open_random_manga\">ఏదైనా తెరవండి</string>\n    <string name=\"internal_error\">అంతర్గత లోపం: మరింత సమాచారం కోసం క్రాష్ లాగ్‌లను తనిఖీ చేయండి</string>\n    <string name=\"pref_appearance_summary\">థీమ్, తేదీ మరియు సమయ ఆకృతి</string>\n    <string name=\"channel_errors\">లోపాలూ</string>\n    <string name=\"website\">జాలగూడు</string>\n    <string name=\"username\">వాడుకరి పేరు</string>\n    <string name=\"completed\">పూర్తయింది</string>\n    <string name=\"disabled\">అశక్తమైనది</string>\n    <string name=\"licensed\">లైసెన్స్ పొందింది</string>\n    <string name=\"browse\">విహరించండి</string>\n    <string name=\"vertical_viewer\">నిలువు</string>\n    <string name=\"services\">సేవలు</string>\n    <string name=\"password\">గుప్తపదం</string>\n    <string name=\"all\">అన్ని</string>\n    <string name=\"edge_nav\">అంచు</string>\n    <string name=\"latest\">తాజా</string>\n    <string name=\"reading\">చదువుతున్నారు</string>\n    <string name=\"title\">శీర్షిక</string>\n    <string name=\"score\">గణన</string>\n    <string name=\"kindlish_nav\">కిండల్ మాదిరి</string>\n    <string name=\"ongoing\">కొనసాగుతున్నది</string>\n    <string name=\"status\">స్థితి</string>\n    <string name=\"unknown\">తెలియదు</string>\n    <string name=\"none\">ఏమిలేదు</string>\n    <string name=\"version\">సంస్కరణ</string>\n    <string name=\"dropped\">విడిచెను</string>\n    <string name=\"portrait\">చిత్తరువు</string>\n    <string name=\"landscape\">ప్రకృతి దృశ్యం</string>\n    <string name=\"paused\">నిలిపివేయబడింది</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/th/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">หมวดหมู่ %d</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">หลังจาก %1$s นาที</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">ข้ามตอนที่ %d อาจเป็นเพราะหายมาจากแหล่งที่มาหรือถูกกรองออก</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d ตัวติดตาม</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">%1$s ตอน</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">เหลืออีก %1$s รายการ</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">ใช้เวลาไป %1$s โดยมีข้อผิดพลาด %2$s รายการ</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">ตอนที่ %1$s และอีก %2$d ตอน</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d ตอนใหม่</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">มี %d รายการ</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">มีการอัปเดตส่วนขยาย %d รายการพร้อมใช้งาน</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d วันที่ผ่านมา</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">%d ตอนที่ยังไม่ได้อ่านถัดไป</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">%d ตอนถัดไป</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">ไม่พบ %1$s ตอน</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d วัน</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d รีโพ</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/th/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">ชื่อ</string>\n    <string name=\"categories\">หมวดหมู่</string>\n    <string name=\"manga\">รายการคลัง</string>\n    <string name=\"chapters\">ตอน</string>\n    <string name=\"track\">ติดตาม</string>\n    <string name=\"history\">ประวัติ</string>\n    <string name=\"label_settings\">ตั้งค่า</string>\n    <string name=\"label_download_queue\">คิวดาวน์โหลด</string>\n    <string name=\"label_library\">คลัง</string>\n    <string name=\"label_backup\">สำรองข้อมูลและการเรียกคืน</string>\n    <string name=\"label_extensions\">ส่วนขยาย</string>\n    <string name=\"label_extension_info\">ข้อมูลส่วนขยาย</string>\n    <string name=\"action_settings\">ตั้งค่า</string>\n    <string name=\"action_filter\">ตัวกรอง</string>\n    <string name=\"label_recent_updates\">อัปเดต</string>\n    <string name=\"action_filter_unread\">ยังไม่ได้อ่าน</string>\n    <string name=\"action_filter_empty\">นำตัวกรองออก</string>\n    <string name=\"action_sort_alpha\">ตามตัวอักษร</string>\n    <string name=\"action_sort_total\">จำนวนตอน</string>\n    <string name=\"action_sort_last_read\">อ่านล่าสุด</string>\n    <string name=\"action_search\">ค้นหา</string>\n    <string name=\"action_select_all\">เลือกทั้งหมด</string>\n    <string name=\"action_mark_as_read\">ทำเครื่องหมายว่าอ่านแล้ว</string>\n    <string name=\"action_mark_as_unread\">ทำเครื่องหมายว่ายังไม่ได้อ่าน</string>\n    <string name=\"action_download\">ดาวน์โหลด</string>\n    <string name=\"action_delete\">ลบ</string>\n    <string name=\"action_update_library\">อัปเดตคลัง</string>\n    <string name=\"action_edit\">แก้ไข</string>\n    <string name=\"action_add\">เพิ่ม</string>\n    <string name=\"action_add_category\">เพิ่มหมวดหมู่</string>\n    <string name=\"action_edit_categories\">แก้ไขหมวดหมู่</string>\n    <string name=\"action_rename_category\">เปลี่ยนชื่อหมวดหมู่</string>\n    <string name=\"action_edit_cover\">แก้ไขปก</string>\n    <string name=\"action_previous_chapter\">ตอนก่อนหน้า</string>\n    <string name=\"action_next_chapter\">ตอนถัดไป</string>\n    <string name=\"action_retry\">ลองอีกครั้ง</string>\n    <string name=\"action_open_in_browser\">เปิดในเบราว์เซอร์</string>\n    <string name=\"action_display_grid\">ตารางแบบกระชับ</string>\n    <string name=\"action_display_list\">รายการ</string>\n    <string name=\"action_cancel\">ยกเลิก</string>\n    <string name=\"action_install\">ติดตั้ง</string>\n    <string name=\"action_save\">บันทึก</string>\n    <string name=\"action_reset\">รีเซ็ต</string>\n    <string name=\"loading\">กำลังโหลด…</string>\n    <string name=\"pref_category_general\">ทั่วไป</string>\n    <string name=\"pref_category_reader\">ตัวอ่าน</string>\n    <string name=\"pref_category_advanced\">ขั้นสูง</string>\n    <string name=\"pref_category_about\">เกี่ยวกับ</string>\n    <string name=\"update_6hour\">ทุก 6 ชั่วโมง</string>\n    <string name=\"update_12hour\">ทุก 12 ชั่วโมง</string>\n    <string name=\"update_24hour\">ทุกวัน</string>\n    <string name=\"update_48hour\">ทุก 2 วัน</string>\n    <string name=\"update_weekly\">ทุกสัปดาห์</string>\n    <string name=\"all\">ทั้งหมด</string>\n    <string name=\"charging\">ขณะกำลังชาร์จ</string>\n    <string name=\"default_category_summary\">ถามทุกครั้ง</string>\n    <string name=\"ext_update\">อัปเดต</string>\n    <string name=\"ext_install\">ติดตั้ง</string>\n    <string name=\"ext_pending\">รอดำเนินการ</string>\n    <string name=\"ext_downloading\">กำลังดาวน์โหลด</string>\n    <string name=\"ext_installing\">กำลังติดตั้ง</string>\n    <string name=\"ext_installed\">ติดตั้งแล้ว</string>\n    <string name=\"pref_reader_navigation\">การนำทาง</string>\n    <string name=\"pref_reader_theme\">สีพื้นหลัง</string>\n    <string name=\"white_background\">ขาว</string>\n    <string name=\"black_background\">ดำ</string>\n    <string name=\"label_recent_manga\">ประวัติ</string>\n    <string name=\"action_global_search\">ค้นหาทั้งหมด</string>\n    <string name=\"action_mark_previous_as_read\">ตั้งก่อนหน้านี้เป็นอ่านแล้ว</string>\n    <string name=\"label_help\">ช่วยเหลือ</string>\n    <string name=\"label_migration\">โยกย้าย</string>\n    <string name=\"action_filter_bookmarked\">บุ๊คมาร์ค</string>\n    <string name=\"action_bookmark\">บุ๊คมาร์คตอน</string>\n    <string name=\"action_remove_bookmark\">ยกเลิกบุ๊คมาร์คตอน</string>\n    <string name=\"action_move_category\">ตั้งหมวดหมู่</string>\n    <string name=\"action_pause\">หยุดชั่วคราว</string>\n    <string name=\"action_remove\">นำออก</string>\n    <string name=\"action_resume\">ดำเนินการต่อ</string>\n    <string name=\"action_display_mode\">โหมดการแสดงผล</string>\n    <string name=\"action_display\">การแสดงผล</string>\n    <string name=\"action_display_download_badge\">ตอนที่ดาวน์โหลดแล้ว</string>\n    <string name=\"action_sort\">การจัดเรียง</string>\n    <string name=\"action_share\">แบ่งปัน</string>\n    <string name=\"action_undo\">เลิกทำ</string>\n    <string name=\"action_open_log\">เปิดบันทึก</string>\n    <string name=\"action_restore\">เรียกคืน</string>\n    <string name=\"app_not_available\">แอพไม่พร้อมใช้งาน</string>\n    <string name=\"pref_category_downloads\">การดาวน์โหลด</string>\n    <string name=\"pref_category_tracking\">การติดตาม</string>\n    <string name=\"pref_library_columns\">ขนาดตาราง</string>\n    <string name=\"portrait\">แนวตั้ง</string>\n    <string name=\"landscape\">แนวนอน</string>\n    <string name=\"pref_library_update_interval\">การอัปเดตอัตโนมัติ</string>\n    <string name=\"update_never\">ปิด</string>\n    <string name=\"pref_library_update_restriction\">อัปเดตข้อจำกัดของอุปกรณ์โดยอัตโนมัติ</string>\n    <string name=\"pref_update_only_non_completed\">ข้ามรายการที่มีสถานะ \\\"จบแล้ว\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">อัปเดตความคืบหน้าหลังอ่าน</string>\n    <string name=\"default_category\">หมวดหมู่เริ่มต้น</string>\n    <string name=\"ext_trust\">เชื่อถือได้</string>\n    <string name=\"ext_untrusted\">ไม่น่าเชื่อถือ</string>\n    <string name=\"ext_uninstall\">ถอนการติดตั้ง</string>\n    <string name=\"untrusted_extension\">ส่วนขยายที่ไม่น่าเชื่อถือ</string>\n    <string name=\"untrusted_extension_message\">ส่วนขยายที่เป็นอันตรายสามารถอ่านข้อมูลการเข้าสู่ระบบที่จัดเก็บไว้ หรือเรียกใช้โค้ดโดยอำเภอใจ\n\\n\n\\nการเชื่อถือส่วนขยายนี้แสดงว่าคุณยอมรับความเสี่ยงเหล่านี้</string>\n    <string name=\"pref_fullscreen\">เต็มหน้าจอ</string>\n    <string name=\"pref_page_transitions\">แสดงแอนิเมชั่นเมื่อเปลี่ยนหน้า</string>\n    <string name=\"pref_double_tap_anim_speed\">ความเร็วแอนิเมชั่นเมื่อแตะ 2 ครั้ง</string>\n    <string name=\"pref_show_page_number\">แสดงหมายเลขหน้า</string>\n    <string name=\"pref_crop_borders\">ตัดขอบ</string>\n    <string name=\"pref_custom_brightness\">ความสว่างแบบกำหนดเอง</string>\n    <string name=\"pref_custom_color_filter\">ตัวกรองสีแบบกำหนดเอง</string>\n    <string name=\"pref_keep_screen_on\">เปิดหน้าจอไว้ตลอด</string>\n    <string name=\"pref_read_with_volume_keys\">ปุ่มปรับระดับเสียง</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">สลับด้านปุ่มปรับระดับเสียง</string>\n    <string name=\"pref_viewer_type\">โหมดการอ่านเริ่มต้น</string>\n    <string name=\"left_to_right_viewer\">แสดงเป็นหน้า (จากซ้ายไปขวา)</string>\n    <string name=\"right_to_left_viewer\">แสดงเป็นหน้า (จากขวาไปซ้าย)</string>\n    <string name=\"vertical_viewer\">แสดงเป็นหน้า (แนวตั้ง)</string>\n    <string name=\"webtoon_viewer\">หน้ายาว</string>\n    <string name=\"pager_viewer\">แสดงเป็นหน้า</string>\n    <string name=\"pref_image_scale_type\">ชนิดมาตราส่วน</string>\n    <string name=\"scale_type_fit_screen\">พอดีกับหน้าจอ</string>\n    <string name=\"scale_type_stretch\">ยืด</string>\n    <string name=\"scale_type_fit_width\">พอดีกับความกว้าง</string>\n    <string name=\"scale_type_fit_height\">พอดีกับความสูง</string>\n    <string name=\"scale_type_original_size\">ขนาดดั้งเดิม</string>\n    <string name=\"scale_type_smart_fit\">พอดีอัตโนมัติ</string>\n    <string name=\"pref_zoom_start\">ตำแหน่งเริ่มซูม</string>\n    <string name=\"zoom_start_automatic\">อัตโนมัติ</string>\n    <string name=\"zoom_start_left\">ซ้าย</string>\n    <string name=\"zoom_start_right\">ขวา</string>\n    <string name=\"zoom_start_center\">ตรงกลาง</string>\n    <string name=\"double_tap_anim_speed_0\">ไม่มีแอนิเมชั่น</string>\n    <string name=\"double_tap_anim_speed_normal\">ปกติ</string>\n    <string name=\"double_tap_anim_speed_fast\">เร็ว</string>\n    <string name=\"pref_rotation_type\">การหมุนเริ่มต้น</string>\n    <string name=\"rotation_free\">อิสระ</string>\n    <string name=\"rotation_force_portrait\">ล็อกแนวตั้ง</string>\n    <string name=\"rotation_force_landscape\">ล็อกแนวนอน</string>\n    <string name=\"color_filter_r_value\">แดง</string>\n    <string name=\"color_filter_g_value\">เขียว</string>\n    <string name=\"color_filter_b_value\">น้ำเงิน</string>\n    <string name=\"color_filter_a_value\">โปร่งใส</string>\n    <string name=\"pref_remove_after_marked_as_read\">หลังจากทําเครื่องหมายว่าอ่านแล้วด้วยตนเอง</string>\n    <string name=\"pref_remove_after_read\">ลบอัตโนมัติหลังจากที่อ่านแล้ว</string>\n    <string name=\"disabled\">ปิดการใช้งาน</string>\n    <string name=\"last_read_chapter\">ตอนที่อ่านล่าสุด</string>\n    <string name=\"second_to_last\">ตอนรองก่อนตอนที่อ่านล่าสุด</string>\n    <string name=\"third_to_last\">ตอนที่สามก่อนตอนที่อ่านล่าสุด</string>\n    <string name=\"fourth_to_last\">ตอนที่สี่ก่อนตอนที่อ่านล่าสุด</string>\n    <string name=\"fifth_to_last\">ตอนที่ห้าก่อนตอนที่อ่านล่าสุด</string>\n    <string name=\"pref_download_new\">ดาวน์โหลดตอนใหม่</string>\n    <string name=\"services\">ตัวติดตาม</string>\n    <string name=\"pref_create_backup\">สำรองข้อมูล</string>\n    <string name=\"pref_create_backup_summ\">สามารถใช้ในการเรียกคืนค่าคลังปัจจุบัน</string>\n    <string name=\"pref_restore_backup\">เรียกคืนค่าการสำรองข้อมูล</string>\n    <string name=\"pref_restore_backup_summ\">เรียกคืนค่าคลังจากแฟ้มข้อมูลสำรอง</string>\n    <string name=\"pref_backup_interval\">ความถี่ในการสำรองข้อมูลอัตโนมัติ</string>\n    <string name=\"backup_created\">สร้างการสำรองข้อมูลแล้ว</string>\n    <string name=\"restore_completed\">คืนค่าเสร็จสมบูรณ์</string>\n    <string name=\"backup_choice\">ต้องการสำรองข้อมูลใดบ้าง?</string>\n    <string name=\"restoring_backup\">กำลังคืนค่าการสำรองข้อมูล</string>\n    <string name=\"creating_backup\">กำลังสร้างการสำรองข้อมูล</string>\n    <string name=\"pref_clear_chapter_cache\">ล้างแคชตอน</string>\n    <string name=\"used_cache\">ใช้ไปแล้ว: %1$s</string>\n    <string name=\"cache_deleted\">ล้างแคชแล้ว %1$d แฟ้มถูกลบ</string>\n    <string name=\"cache_delete_error\">เกิดข้อผิดพลาดขณะกำลังล้าง</string>\n    <string name=\"pref_clear_cookies\">ล้างคุกกี้</string>\n    <string name=\"cookies_cleared\">ล้างคุกกี้แล้ว</string>\n    <string name=\"pref_clear_database\">ล้างฐานข้อมูล</string>\n    <string name=\"pref_clear_database_summary\">ลบประวัติรายการที่ไม่ได้บันทึกไว้ในคลัง</string>\n    <string name=\"clear_database_confirmation\">แน่ใจไหม? ข้อมูลการอ่านของรายการที่ไม่ได้อยู่ในคลังจะหายไป</string>\n    <string name=\"clear_database_completed\">ลบรายการแล้ว</string>\n    <string name=\"version\">เวอร์ชัน</string>\n    <string name=\"pref_enable_acra\">ส่งรายงานความผิดพลาด</string>\n    <string name=\"pref_acra_summary\">ช่วยแก้ไขจุดบกพร่องต่างๆ จะไม่มีการส่งข้อมูลที่สำคัญ</string>\n    <string name=\"login_title\">ลงชื่อเข้าใช้ %1$s</string>\n    <string name=\"username\">ชื่อผู้ใช้</string>\n    <string name=\"password\">รหัสผ่าน</string>\n    <string name=\"login\">ลงชื่อเข้าใช้</string>\n    <string name=\"login_success\">ลงชื่อเข้าใช้แล้ว</string>\n    <string name=\"unknown_error\">ข้อผิดพลาดที่ไม่รู้จัก</string>\n    <string name=\"updating_category\">กำลังอัปเดตหมวดหมู่</string>\n    <string name=\"no_more_results\">ไม่มีผลลัพธ์เพิ่มเติม</string>\n    <string name=\"local_source\">แหล่งที่มาภายในเครื่อง</string>\n    <string name=\"other_source\">อื่น ๆ</string>\n    <string name=\"action_global_search_hint\">ค้นหาทั้งหมด…</string>\n    <string name=\"latest\">ล่าสุด</string>\n    <string name=\"browse\">เรียกดู</string>\n    <string name=\"ongoing\">ยังไม่จบ</string>\n    <string name=\"unknown\">ไม่ระบุ</string>\n    <string name=\"licensed\">มีลิขสิทธิ์แล้ว</string>\n    <string name=\"remove_from_library\">นำออกจากคลัง</string>\n    <string name=\"manga_added_library\">เพิ่มไปยังคลังแล้ว</string>\n    <string name=\"manga_removed_library\">นำออกจากคลังแล้ว</string>\n    <string name=\"delete_downloads_for_manga\">ลบตอนที่ดาวน์โหลดแล้วหรือไม่?</string>\n    <string name=\"copied_to_clipboard\">คัดลอกไปยังคลิปบอร์ดแล้ว:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">ไม่ได้ติดตั้งแหลงที่มา: %1$s</string>\n    <string name=\"display_mode_chapter\">ตอนที่ %1$s</string>\n    <string name=\"chapter_downloading_progress\">กำลังดาวน์โหลด (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">เกิดข้อผิดพลาด</string>\n    <string name=\"chapter_paused\">หยุดชั่วคราว</string>\n    <string name=\"show_title\">ชื่อตามแหล่งที่มา</string>\n    <string name=\"show_chapter_number\">หมายเลขตอน</string>\n    <string name=\"sort_by_source\">ตามแหล่งที่มา</string>\n    <string name=\"sort_by_number\">ตามหมายเลขตอน</string>\n    <string name=\"manga_download\">ดาวน์โหลด</string>\n    <string name=\"download_unread\">ที่ยังไม่ได้อ่าน</string>\n    <string name=\"confirm_delete_chapters\">แน่ใจหรือไม่ว่าต้องการลบตอนที่เลือก?</string>\n    <string name=\"manga_tracking_tab\">การติดตาม</string>\n    <string name=\"reading\">กำลังอ่าน</string>\n    <string name=\"completed\">จบแล้ว</string>\n    <string name=\"dropped\">ดรอป</string>\n    <string name=\"on_hold\">พักไว้</string>\n    <string name=\"plan_to_read\">วางแผนที่จะอ่าน</string>\n    <string name=\"repeating\">อ่านอีกครั้ง</string>\n    <string name=\"score\">คะแนน</string>\n    <string name=\"pref_read_with_long_tap\">แสดงการกระทำเมื่อแตะค้าง</string>\n    <string name=\"action_open_in_web_view\">เปิดใน WebView</string>\n    <string name=\"pref_skip_read_chapters\">ข้ามตอนที่ทำเครื่องหมายว่าอ่านแล้ว</string>\n    <string name=\"pref_color_filter_mode\">โหมดผสมตัวกรองสี</string>\n    <string name=\"filter_mode_overlay\">ซ้อนทับ</string>\n    <string name=\"filter_mode_screen\">สกรีน</string>\n    <string name=\"filter_mode_lighten\">ดอดจ์ / สว่างขึ้น</string>\n    <string name=\"no_results_found\">ไม่พบผลลัพธ์</string>\n    <string name=\"title\">ชื่อเรื่อง</string>\n    <string name=\"status\">สถานะ</string>\n    <string name=\"track_status\">สถานะ</string>\n    <string name=\"track_type\">ประเภท</string>\n    <string name=\"error_category_exists\">หมวดหมู่ที่มีชื่อนี้มีอยู่แล้ว!</string>\n    <string name=\"snack_categories_deleted\">หมวดหมู่ถูกลบแล้ว</string>\n    <string name=\"dialog_with_checkbox_remove_description\">การดำเนินการนี้จะลบวันที่อ่านของตอนนี้ คุณแน่ใจไหม?</string>\n    <string name=\"dialog_with_checkbox_reset\">รีเซ็ตตอนทั้งหมดสำหรับรายการนี้</string>\n    <string name=\"snack_add_to_library\">เพิ่มไปยังคลัง?</string>\n    <string name=\"picture_saved\">บันทึกรูปภาพแล้ว</string>\n    <string name=\"custom_filter\">ตัวกรอง</string>\n    <string name=\"set_as_cover\">ตั้งเป็นปก</string>\n    <string name=\"cover_updated\">อัปเดตปกแล้ว</string>\n    <string name=\"chapter_progress\">หน้า: %1$d</string>\n    <string name=\"no_next_chapter\">ไม่พบตอนถัดไป</string>\n    <string name=\"decode_image_error\">ไม่สามารถโหลดภาพนี้ได้</string>\n    <string name=\"confirm_set_image_as_cover\">ใช้ภาพนี้เป็นรูปปก?</string>\n    <string name=\"transition_finished\">อ่านจบแล้ว:</string>\n    <string name=\"transition_current\">ปัจจุบัน:</string>\n    <string name=\"transition_next\">ตอนถัดไป:</string>\n    <string name=\"transition_previous\">ก่อนหน้า:</string>\n    <string name=\"transition_no_next\">ไม่มีตอนต่อไป</string>\n    <string name=\"transition_no_previous\">ไม่มีตอนก่อนหน้านี้</string>\n    <string name=\"transition_pages_loading\">กำลังโหลดหน้า …</string>\n    <string name=\"transition_pages_error\">ไม่สามารถโหลดหน้า: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">เลือกข้อมูลที่จะรวมไว้</string>\n    <string name=\"migrate\">โยกย้าย</string>\n    <string name=\"copy\">คัดลอก</string>\n    <string name=\"download_queue_error\">ไม่สามารถดาวน์โหลดตอน สามารถลองอีกครั้งได้ในส่วนการดาวน์โหลด</string>\n    <string name=\"notification_new_chapters\">พบตอนใหม่</string>\n    <string name=\"notification_cover_update_failed\">อัปเดตหน้าปกล้มเหลว</string>\n    <string name=\"notification_first_add_to_library\">เพิ่มรายการไปยังในคลังก่อนที่จะดำเนินการนี้</string>\n    <string name=\"file_select_cover\">เลือกภาพหน้าปก</string>\n    <string name=\"file_select_backup\">เลือกแฟ้มข้อมูลสำรอง</string>\n    <string name=\"update_check_confirm\">ดาวน์โหลด</string>\n    <string name=\"update_check_no_new_updates\">ไม่มีการอัปเดตใหม่</string>\n    <string name=\"update_check_notification_download_in_progress\">กำลังดาวน์โหลด…</string>\n    <string name=\"update_check_notification_download_complete\">แตะเพื่อติดตั้งการอัปเดต</string>\n    <string name=\"update_check_notification_download_error\">เกิดข้อผิดพลาดในการดาวน์โหลด</string>\n    <string name=\"update_check_notification_update_available\">มีเวอร์ชั่นใหม่!</string>\n    <string name=\"information_no_downloads\">ไม่มีการดาวน์โหลด</string>\n    <string name=\"information_no_recent\">ไม่มีอัปเดตล่าสุด</string>\n    <string name=\"information_no_recent_manga\">ไม่มีอะไรที่อ่านเมื่อเร็ว ๆ นี้</string>\n    <string name=\"information_empty_library\">คลังว่างเปล่า</string>\n    <string name=\"information_empty_category\">ไม่มีหมวดหมู่ แตะปุ่มบวกเพื่อสร้างปุ่มสำหรับจัดระเบียบคลัง</string>\n    <string name=\"download_notifier_downloader_title\">ตัวดาวน์โหลด</string>\n    <string name=\"download_notifier_title_error\">เกิดข้อผิดพลาด</string>\n    <string name=\"download_notifier_unknown_error\">ไม่สามารถดาวน์โหลดตอนได้เนื่องจากข้อผิดพลาดที่ไม่คาดคิด</string>\n    <string name=\"download_notifier_text_only_wifi\">ไม่มีการเชื่อมต่อ Wi-Fi</string>\n    <string name=\"download_notifier_no_network\">ไม่มีการเชื่อมต่อเครือข่าย</string>\n    <string name=\"download_notifier_download_paused\">การดาวน์โหลดหยุดชั่วคราว</string>\n    <string name=\"channel_common\">ทั่วไป</string>\n    <string name=\"filter_mode_multiply\">หลากหลาย</string>\n    <string name=\"filter_mode_darken\">เบิร์น / มืดขึ้น</string>\n    <string name=\"migration_selection_prompt\">เลือกแหล่งที่มาที่จะย้ายจาก</string>\n    <string name=\"pref_remove_bookmarked_chapters\">อนุญาตให้ลบตอนที่บุ๊คมาร์คไว้</string>\n    <string name=\"pref_category_delete_chapters\">การลบตอน</string>\n    <string name=\"pref_always_show_chapter_transition\">แสดงการเปลี่ยนผ่านตอนเสมอ</string>\n    <string name=\"rotation_landscape\">แนวนอน</string>\n    <string name=\"rotation_portrait\">แนวตั้ง</string>\n    <string name=\"nav_zone_left\">ซ้าย</string>\n    <string name=\"nav_zone_prev\">ก่อนหน้า</string>\n    <string name=\"right_and_left_nav\">ขวาและซ้าย</string>\n    <string name=\"kindlish_nav\">เหมือน Kindle</string>\n    <string name=\"l_nav\">รูปตัว L</string>\n    <string name=\"automatic_background\">อัตโนมัติ</string>\n    <string name=\"gray_background\">เทา</string>\n    <string name=\"pref_create_folder_per_manga_summary\">สร้างโฟลเดอร์ตามชื่อเรื่องของรายการ</string>\n    <string name=\"pref_create_folder_per_manga\">บันทึกแต่ละหน้าลงในโฟลเดอร์ที่แยกต่างหาก</string>\n    <string name=\"pref_reader_actions\">การกระทำ</string>\n    <string name=\"tapping_inverted_both\">ทั้งสอง</string>\n    <string name=\"tapping_inverted_vertical\">แนวตั้ง</string>\n    <string name=\"tapping_inverted_horizontal\">แนวนอน</string>\n    <string name=\"tapping_inverted_none\">ไม่มี</string>\n    <string name=\"pref_read_with_tapping_inverted\">กลับด้านโซนการแตะ</string>\n    <string name=\"pref_skip_filtered_chapters\">ข้ามตอนที่กรองไว้</string>\n    <string name=\"pref_grayscale\">โทนสีเทา</string>\n    <string name=\"pref_show_reading_mode_summary\">แสดงโหมดปัจจุบันสั้น ๆ เมื่อตัวอ่านเปิดขั้นมา</string>\n    <string name=\"pref_show_reading_mode\">แสดงโหมดการอ่าน</string>\n    <string name=\"pref_cutout_short\">แสดงเนื้อหาในพื้นที่ตัดออก</string>\n    <string name=\"pref_dual_page_invert_summary\">หากการจัดวางการแยกหน้ากว้างไม่ตรงกับทิศทางการอ่าน</string>\n    <string name=\"pref_dual_page_invert\">แยกส่วนหน้ากว้างแบบสลับตำแหน่ง</string>\n    <string name=\"pref_dual_page_split\">แยกส่วนหน้ากว้าง</string>\n    <string name=\"pref_show_navigation_mode_summary\">แสดงครู่หนึ่งเมื่อเปิดตัวอ่าน</string>\n    <string name=\"pref_show_navigation_mode\">แสดงตำแหน่งโซนการแตะ</string>\n    <string name=\"ext_nsfw_warning\">แหล่งที่มาจากส่วนขยายนี้อาจมีเนื้อหา NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"obsolete_extension_message\">ส่วนขยายนี้ไม่สามารถใช้ได้อีกต่อไป แอปอาจทำงานไม่ถูกต้องและอาจทำให้เกิดปัญหากับแอปได้ ขอแนะนำให้ถอนการติดตั้งออก</string>\n    <string name=\"ext_obsolete\">ล้าสมัย</string>\n    <string name=\"ext_updates_pending\">อัปเดตที่รอดำเนินการ</string>\n    <string name=\"exclude\">ที่ยกเว้นไว้: %s</string>\n    <string name=\"include\">ที่รวมไว้: %s</string>\n    <string name=\"none\">ไม่มี</string>\n    <string name=\"pref_library_update_categories_details\">รายการในหมวดหมู่ที่ยกเว้นจะไม่ได้รับการอัปเดตแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">ตรวจสอบหน้าปกและรายละเอียดใหม่เมื่ออัปเดตคลัง</string>\n    <string name=\"pref_library_update_refresh_metadata\">โหลดข้อมูลเมตาใหม่โดยอัตโนมัติ</string>\n    <string name=\"pref_category_library_update\">อัปเดตทั้งหมด</string>\n    <string name=\"pref_category_display\">การแสดงผล</string>\n    <string name=\"parental_controls_info\">นี่ไม่ได้เป็นการป้องกันไม่ให้ส่วนขยายที่ไม่เป็นทางการ หรือที่อาจถูกตั้งค่าสถานะไม่ถูกต้อง ให้แสดงเนื้อหา NSFW (18+) ภายในแอป</string>\n    <string name=\"pref_show_nsfw_source\">แสดงในรายการแหล่งข้อมูลและส่วนขยาย</string>\n    <string name=\"pref_category_nsfw_content\">แหล่งที่มา NSFW (18+)</string>\n    <string name=\"hide_notification_content\">ซ่อนเนื้อหาการแจ้งเตือน</string>\n    <string name=\"secure_screen_summary\">หน้าจอปลอดภัยจะซ่อนเนื้อหาของแอปเมื่อสลับแอปและกันไม่ให้ถ่ายภาพหน้าจอ</string>\n    <string name=\"secure_screen\">หน้าจอความปลอดภัย</string>\n    <string name=\"lock_never\">ไม่เลย</string>\n    <string name=\"lock_always\">ตลอด</string>\n    <string name=\"lock_when_idle\">ล็อกเมื่อไม่ได้ใช้งาน</string>\n    <string name=\"lock_with_biometrics\">จำเป็นต้องปลดล็อก</string>\n    <string name=\"pref_category_security\">ความปลอดภัยและความเป็นส่วนตัว</string>\n    <string name=\"pref_manage_notifications\">จัดการการแจ้งเตือน</string>\n    <string name=\"pref_date_format\">รูปแบบวันที่</string>\n    <string name=\"theme_dark\">มืด</string>\n    <string name=\"theme_light\">สว่าง</string>\n    <string name=\"theme_system\">ระบบ</string>\n    <string name=\"pref_category_theme\">ธีม</string>\n    <string name=\"pref_category_library\">คลัง</string>\n    <string name=\"action_webview_refresh\">โหลดซ้ำ</string>\n    <string name=\"action_webview_forward\">ไปข้างหน้า</string>\n    <string name=\"action_webview_back\">กลับ</string>\n    <string name=\"action_show_errors\">แตะเพื่อดูรายละเอียด</string>\n    <string name=\"action_move_to_bottom\">ย้ายไปด้านล่าง</string>\n    <string name=\"action_move_to_top\">ย้ายไปด้านบน</string>\n    <string name=\"action_desc\">มากไปน้อย</string>\n    <string name=\"action_asc\">น้อยไปมาก</string>\n    <string name=\"action_oldest\">เก่าสุด</string>\n    <string name=\"action_newest\">ล่าสุด</string>\n    <string name=\"action_order_by_chapter_number\">ตามเลขตอน</string>\n    <string name=\"action_order_by_upload_date\">ตามวันที่อัปโหลด</string>\n    <string name=\"cancel_all_for_series\">ยกเลิกทั้งหมดสำหรับเรื่องนี้</string>\n    <string name=\"action_cancel_all\">ยกเลิกทั้งหมด</string>\n    <string name=\"action_unpin\">ยกเลิกการตรึง</string>\n    <string name=\"action_pin\">ตรึง</string>\n    <string name=\"action_disable\">ปิดการใช้งาน</string>\n    <string name=\"action_display_show_number_of_items\">แสดงจำนวน</string>\n    <string name=\"action_display_show_tabs\">แสดงแท็บหมวดหมู่</string>\n    <string name=\"action_display_comfortable_grid\">ตารางแบบเต็มที</string>\n    <string name=\"action_migrate\">โยกย้าย</string>\n    <string name=\"action_start\">เริ่ม</string>\n    <string name=\"action_view_chapters\">ดูตอน</string>\n    <string name=\"action_disable_all\">ปิดใช้งานทั้งหมด</string>\n    <string name=\"action_enable_all\">เปิดใช้งานทั้งหมด</string>\n    <string name=\"action_select_inverse\">สลับการเลือก</string>\n    <string name=\"action_search_settings\">ตั้งค่าการค้นหา</string>\n    <string name=\"action_sort_date_added\">วันที่เพิ่ม</string>\n    <string name=\"action_sort_chapter_fetch_date\">วันที่ดึงข้อมูลตอน</string>\n    <string name=\"action_sort_latest_chapter\">ตอนล่าสุด</string>\n    <string name=\"action_filter_tracked\">ติดตามแล้ว</string>\n    <string name=\"action_menu\">เมนู</string>\n    <string name=\"label_sources\">แหล่งที่มา</string>\n    <string name=\"label_more\">เพิ่มเติม</string>\n    <string name=\"pref_webtoon_side_padding\">ช่องว่างด้านข้าง</string>\n    <string name=\"pref_category_reading\">การอ่าน</string>\n    <string name=\"pref_category_reading_mode\">โหมดการอ่าน</string>\n    <string name=\"rotation_type\">การหมุน</string>\n    <string name=\"pref_viewer_nav\">โซนการแตะ</string>\n    <string name=\"vertical_plus_viewer\">หน้ายาวแยกช่องว่าง</string>\n    <string name=\"nav_zone_right\">ขวา</string>\n    <string name=\"nav_zone_next\">ถัดไป</string>\n    <string name=\"edge_nav\">ขอบ</string>\n    <string name=\"migration_help_guide\">คู่มือการโยกย้ายแหล่งที่มา</string>\n    <string name=\"clear_history_confirmation\">แน่ใจไหม? ประวัติทั้งหมดจะหายไป</string>\n    <string name=\"clear_history_completed\">ลบประวัติแล้ว</string>\n    <string name=\"pref_clear_history\">ล้างประวัติ</string>\n    <string name=\"recent_manga_time\">ตอน %1$s - %2$s</string>\n    <string name=\"updating_library\">กำลังอัปเดตคลัง</string>\n    <string name=\"loader_not_implemented_error\">ไม่พบแหล่งที่มา</string>\n    <string name=\"page_list_empty_error\">ไม่พบหน้า</string>\n    <string name=\"viewer\">โหมดการอ่าน</string>\n    <string name=\"pref_category_for_this_series\">สำหรับเรื่องนี้</string>\n    <string name=\"share_page_info\">%1$s: %2$s, หน้า %3$d</string>\n    <string name=\"myanimelist_relogin\">กรุณาเข้าสู่ระบบ MAL อีกครั้ง</string>\n    <string name=\"track_finished_reading_date\">วันที่อ่านจบ</string>\n    <string name=\"track_started_reading_date\">วันที่เริ่มอ่าน</string>\n    <string name=\"paused\">หยุดชั่วคราว</string>\n    <string name=\"add_tracking\">เพิ่มการติดตาม</string>\n    <string name=\"no_chapters_error\">ไม่พบตอน</string>\n    <string name=\"set_chapter_settings_as_default\">ตั้งเป็นค่าเริ่มต้น</string>\n    <string name=\"also_set_chapter_settings_for_library\">นําไปใช้กับรายการทั้งหมดในคลังด้วย</string>\n    <string name=\"confirm_set_chapter_settings\">แน่ใจหรือไม่ว่าต้องการบันทึกการตั้งค่าเหล่านี้เป็นค่าเริ่มต้น?</string>\n    <string name=\"chapter_settings\">การตั้งค่าตอน</string>\n    <string name=\"sort_by_upload_date\">ตามวันที่อัปโหลด</string>\n    <string name=\"clipboard_copy_error\">ไม่สามารถคัดลอกไปยังคลิปบอร์ด</string>\n    <string name=\"manga_info_collapse\">น้อยลง</string>\n    <string name=\"manga_info_expand\">เพิ่มเติม</string>\n    <string name=\"in_library\">อยู่ในคลัง</string>\n    <string name=\"add_to_library\">เพิ่มไปยังคลัง</string>\n    <string name=\"unknown_status\">ไม่ระบุสถานะ</string>\n    <string name=\"unknown_author\">ไม่ทราบผู้แต่ง</string>\n    <string name=\"no_pinned_sources\">ไม่มีแหล่งที่มาที่ตรึงไว้</string>\n    <string name=\"local_source_help_guide\">คู่มือแหล่งที่มาภายในเครื่อง</string>\n    <string name=\"action_global_search_query\">ค้นหา \\\"%1$s\\\" ในทั้งหมด</string>\n    <string name=\"pinned_sources\">ที่ตรึงไว้</string>\n    <string name=\"last_used_source\">ใช้ล่าสุด</string>\n    <string name=\"tabs_header\">แท็บ</string>\n    <string name=\"downloaded_chapters\">ตอนที่ดาวน์โหลดแล้ว</string>\n    <string name=\"manga_from_library\">จากคลัง</string>\n    <string name=\"logout_success\">ออกจากระบบแล้ว</string>\n    <string name=\"logout\">ออกจากระบบ</string>\n    <string name=\"logout_title\">ออกจากระบบจาก %1$s?</string>\n    <string name=\"email\">ที่อยู่อีเมล</string>\n    <string name=\"downloaded_only_summary\">กรองรายการทั้งหมดในคลังของคุณ</string>\n    <string name=\"notification_incognito_text\">ปิดใช้งานโหมดไม่ระบุตัวตน</string>\n    <string name=\"pref_incognito_mode_summary\">หยุดประวัติการอ่านชั่วคราว</string>\n    <string name=\"pref_incognito_mode\">โหมดไม่ระบุตัวตน</string>\n    <string name=\"label_downloaded_only\">ดาวน์โหลดแล้วเท่านั้น</string>\n    <string name=\"updated_version\">อัปเดตเป็น v%1$s แล้ว</string>\n    <string name=\"check_for_updates\">ตรวจสอบการอัปเดต</string>\n    <string name=\"licenses\">ใบอนุญาตโอเพ่นซอร์ส</string>\n    <string name=\"whats_new\">มีอะไรใหม่</string>\n    <string name=\"website\">เว็บไซต์</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">ไม่สามารถเปิดการตั้งค่าอุปกรณ์</string>\n    <string name=\"battery_optimization_disabled\">การเพิ่มประสิทธิภาพแบตเตอรี่ถูกปิดใช้งานอยู่แล้ว</string>\n    <string name=\"pref_disable_battery_optimization_summary\">ช่วยในการอัปเดตและสำรองข้อมูลคลังในพื้นหลัง</string>\n    <string name=\"pref_disable_battery_optimization\">ปิดการใช้งานการเพิ่มประสิทธิภาพแบตเตอรี่</string>\n    <string name=\"pref_dump_crash_logs_summary\">บันทึกบันทึกข้อผิดพลาดลงในแฟ้มเพื่อแบ่งปันกับผู้พัฒนา</string>\n    <string name=\"pref_dump_crash_logs\">แบ่งปันบันทึกข้อขัดข้อง</string>\n    <string name=\"pref_refresh_library_covers\">โหลดปกในคลังใหม่</string>\n    <string name=\"label_data\">ข้อมูล</string>\n    <string name=\"requires_app_restart\">ต้องรีสตาร์ทแอปจึงจะมีผล</string>\n    <string name=\"pref_dns_over_https\">DNS ผ่าน HTTPS (DoH)</string>\n    <string name=\"label_network\">เครือข่าย</string>\n    <string name=\"restoring_backup_canceled\">ยกเลิกการคืนค่า</string>\n    <string name=\"restoring_backup_error\">การคืนค่าข้อมูลสำรองล้มเหลว</string>\n    <string name=\"restore_in_progress\">การคืนค่ากําลังดําเนินการอยู่แล้ว</string>\n    <string name=\"creating_backup_error\">การสำรองข้อมูลล้มเหลว</string>\n    <string name=\"backup_in_progress\">การสำรองข้อมูลกําลังดําเนินการอยู่แล้ว</string>\n    <string name=\"restore_duration\">%02d นาที %02d วินาที</string>\n    <string name=\"backup_restore_content_full\">คุณจะต้องติดตั้งส่วนขยายที่ขาดหายไปและลงชื่อเข้าใช้บริการติดตามจึงจะสามารถใช้งานได้</string>\n    <string name=\"backup_restore_missing_trackers\">ตัวติดตามไม่ได้เข้าสู่ระบบ:</string>\n    <string name=\"backup_restore_missing_sources\">แหล่งที่มาที่หายไป:</string>\n    <string name=\"invalid_backup_file_missing_manga\">แฟ้มสํารองข้อมูลไม่มีรายการคลังใด ๆ</string>\n    <string name=\"invalid_backup_file\">ข้อมูลสำรองไม่ถูกต้อง:</string>\n    <string name=\"tracking_info\">ซิงค์ทางเดียวเพื่ออัปเดตความคืบหน้าของตอนกับตัวติดตามภายนอก ตั้งค่าการติดตามรายการในแต่ละรายการได้จากปุ่มติดตาม</string>\n    <string name=\"pref_download_new_categories_details\">รายการในหมวดหมู่ที่ยกเว้นไว้จะไม่ถูกดาวน์โหลดแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม</string>\n    <string name=\"pref_category_auto_download\">ดาวน์โหลดอัตโนมัติ</string>\n    <string name=\"download_insufficient_space\">ไม่สามารถดาวน์โหลดตอนได้เนื่องจากพื้นที่จัดเก็บเหลือน้อย</string>\n    <string name=\"update_check_eol\">ไม่รองรับ Android เวอร์ชันนี้อีกต่อไป</string>\n    <string name=\"file_picker_error\">ไม่พบแอปเลือกแฟ้ม</string>\n    <string name=\"notification_chapters_multiple\">ตอนที่ %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">ตอนที่ %1$s และอีก %2$d ตอน</string>\n    <string name=\"notification_chapters_single\">ตอนที่ %1$s</string>\n    <string name=\"spen_previous_page\">หน้าก่อน</string>\n    <string name=\"channel_ext_updates\">การอัปเดตส่วนขยาย</string>\n    <string name=\"channel_new_chapters\">อัปเดตตอน</string>\n    <string name=\"channel_errors\">ข้อผิดพลาด</string>\n    <string name=\"channel_complete\">เสร็จสมบูรณ์</string>\n    <string name=\"channel_progress\">ความคืบหน้า</string>\n    <string name=\"chapter_settings_updated\">อัปเดตการตั้งค่าตอนเริ่มต้นแล้ว</string>\n    <string name=\"information_webview_outdated\">โปรดอัปเดตแอพ WebView เพื่อความเข้ากันได้ที่ดีขึ้น</string>\n    <string name=\"information_webview_required\">แอปจำเป็นต้องใช้ WebView เพื่อให้ทำงานได้</string>\n    <string name=\"information_cloudflare_bypass_failure\">ไม่สามารถเลี่ยงผ่าน Cloudflare ได้</string>\n    <string name=\"information_empty_category_dialog\">คุณยังไม่มีหมวดหมู่</string>\n    <string name=\"confirm_lock_change\">ยืนยันการเปลี่ยนแปลง</string>\n    <string name=\"relative_time_today\">วันนี้</string>\n    <string name=\"pref_update_only_completely_read\">ข้ามรายการที่มีตอนที่ยังไม่ได้อ่าน</string>\n    <string name=\"off\">ปิด</string>\n    <string name=\"on\">เปิด</string>\n    <string name=\"save_chapter_as_cbz\">บันทึกเป็นแฟ้ม CBZ</string>\n    <string name=\"privacy_policy\">นโยบายความเป็นส่วนตัว</string>\n    <string name=\"library_errors_help\">สำหรับความช่วยเหลือเกี่ยวกับวิธีการแก้ไขข้อผิดพลาดในการอัปเดตคลัง ไปยัง %1$s</string>\n    <string name=\"local_filter_order_by\">เรียงตาม</string>\n    <string name=\"date\">วันที่</string>\n    <string name=\"categorized_display_settings\">การตั้งค่าการจัดเรียงตามหมวดหมู่</string>\n    <string name=\"ext_install_service_notif\">กำลังติดตั้งส่วนขยาย…</string>\n    <string name=\"pref_hide_threshold\">ความเร็วในการซ่อนเมนูบนเมื่อเลื่อน</string>\n    <string name=\"restore_miui_warning\">การสำรอง/กู้คืนอาจทำงานไม่ถูกต้องหากปิดใช้งานการเพิ่มประสิทธิภาพ MIUI</string>\n    <string name=\"label_background_activity\">กิจกรรมเบื้องหลัง</string>\n    <string name=\"error_no_match\">ไม่พบรายการที่ตรงกัน</string>\n    <string name=\"getting_started_guide\">คู่มือเริ่มต้นใช้งาน</string>\n    <string name=\"spen_next_page\">หน้าถัดไป</string>\n    <string name=\"ext_update_all\">อัปเดตทั้งหมด</string>\n    <string name=\"ext_installer_pref\">ตัวติดตั้ง</string>\n    <string name=\"ext_installer_legacy\">แบบเก่า</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ไม่ทำงาน</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">ติดตั้งและเริ่ม Shizuku เพื่อใช้ Shizuku เป็นตัวติดตั้งส่วนขยาย</string>\n    <string name=\"action_track\">ติดตาม</string>\n    <string name=\"chapter_not_found\">ไม่พบตอน</string>\n    <string name=\"cover_saved\">บันทึกปกแล้ว</string>\n    <string name=\"error_saving_cover\">ผิดพลาดในการบันทึกปก</string>\n    <string name=\"source_unsupported\">ไม่รองรับแหล่งที่มานี้</string>\n    <string name=\"channel_app_updates\">แอพอัปเดต</string>\n    <string name=\"label_default\">ค่าเริ่มต้น</string>\n    <string name=\"error_sharing_cover\">ผิดพลาดในการแบ่งปันปก</string>\n    <string name=\"action_start_downloading_now\">เริ่มดาวน์โหลดเลย</string>\n    <string name=\"enhanced_services\">ตัวติดตามขั้นสูง</string>\n    <string name=\"backup_info\">ควรเก็บสำเนาของข้อมูลสำรองไว้ที่อื่นด้วยเช่นกัน การสำรองข้อมูลอาจมีข้อมูลที่ละเอียดอ่อนรวมถึงรหัสผ่านที่เก็บไว้ ควรระวังหากแบ่งปันสำเนา</string>\n    <string name=\"pref_verbose_logging_summary\">บันทึกบันทึกอย่างละเอียดไปยังบันทึกของระบบ (ลดประสิทธิภาพของแอป)</string>\n    <string name=\"help_translate\">แปลเป็นภาษาไทยโดย altqx</string>\n    <string name=\"local_invalid_format\">รูปแบบตอนไม่ถูกต้อง</string>\n    <string name=\"manga_cover\">ปก</string>\n    <string name=\"unread\">ยังไม่ได้อ่าน</string>\n    <string name=\"pref_inverted_colors\">สลับสี</string>\n    <string name=\"action_sort_count\">รายการทั้งหมด</string>\n    <string name=\"pref_tablet_ui_mode\">UI แท็บเล็ต</string>\n    <string name=\"clear_database_source_item_count\">มี %1$d รายการ ที่ไม่ได้อยู่ในคลังในฐานข้อมูล</string>\n    <string name=\"database_clean\">ไม่มีอะไรให้ต้องล้าง</string>\n    <string name=\"about_dont_kill_my_app\">ผู้ผลิตบางรายมีข้อจำกัดเพิ่มเติมของแอปที่ปิดบริการพื้นหลัง เว็บไซต์นี้มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไข</string>\n    <string name=\"pref_verbose_logging\">การบันทึกอย่างละเอียด</string>\n    <string name=\"pref_category_appearance\">ลักษณะ</string>\n    <string name=\"pref_app_theme\">ธีมแอพ</string>\n    <string name=\"theme_monet\">ไดนามิก</string>\n    <string name=\"theme_greenapple\">กรีนแอปเปิ้ล</string>\n    <string name=\"theme_midnightdusk\">มิดไนท์ดัสก์</string>\n    <string name=\"pref_low\">ช้า</string>\n    <string name=\"pref_lowest\">ช้ามาก</string>\n    <string name=\"pref_highest\">เร็วที่สุด</string>\n    <string name=\"pref_high\">เร็ว</string>\n    <string name=\"tracking_guide\">คู่มือการติดตาม</string>\n    <string name=\"pref_remove_exclude_categories\">หมวดหมู่ที่ยกเว้นไว้</string>\n    <string name=\"enhanced_tracking_info\">ใช้สำหรับเฉพาะบางแหล่งที่มา รายการจะถูกติดตามโดยอัตโนมัติเมื่อเพิ่มลงในคลัง</string>\n    <string name=\"ext_app_info\">ข้อมูลแอพ</string>\n    <string name=\"extension_api_error\">เกิดข้อผิดพลาดในการดึงรายการส่วนขยายที่พร้อมใช้งาน</string>\n    <string name=\"pref_auto_clear_chapter_cache\">ล้างแคชตอนในเมื่อเปิดแอพ</string>\n    <string name=\"label_warning\">คำเตือน</string>\n    <string name=\"action_display_local_badge\">แหล่งที่มาในเครื่อง</string>\n    <string name=\"action_display_language_badge\">ภาษา</string>\n    <string name=\"theme_strawberrydaiquiri\">สตรอว์เบอร์รีแด๊กเคอรี่</string>\n    <string name=\"theme_tako\">ทาโกะ</string>\n    <string name=\"theme_tealturquoise\">ทีลและเทอร์ควอยซ์</string>\n    <string name=\"theme_yinyang\">หยินหยาง</string>\n    <string name=\"theme_yotsuba\">โยทซึบะ</string>\n    <string name=\"pref_dark_theme_pure_black\">โหมดมืดดำสนิท</string>\n    <string name=\"update_72hour\">ทุก 3 วัน</string>\n    <string name=\"restrictions\">ข้อจำกัด: %s</string>\n    <string name=\"connected_to_wifi\">เฉพาะขณะเชื่อมต่อ Wi-Fi</string>\n    <string name=\"download_queue_size_warning\">คำเตือน: การดาวน์โหลดจำนวนมากอาจทำให้แหล่งที่มาทำงานช้าลงและ/หรือปิดกั้น Mihon แตะเพื่อเรียนรู้เพิ่มเติม</string>\n    <string name=\"notification_size_warning\">การอัปเดตจำนวนมากเป็นอันตรายต่อแหล่งที่มาและอาจทำให้การอัปเดตช้าลงและใช้งานแบตเตอรี่เพิ่มขึ้น แตะเพื่อเรียนรู้เพิ่มเติม</string>\n    <string name=\"publishing_finished\">เผยแพร่จบแล้ว</string>\n    <string name=\"cancelled\">ถูกยกเลิก</string>\n    <string name=\"on_hiatus\">อยู่ระหว่างพัก</string>\n    <string name=\"pref_navigate_pan\">แพนหน้ากว้าง</string>\n    <string name=\"action_display_cover_only_grid\">ตารางแสดงแค่หน้าปก</string>\n    <string name=\"pref_landscape_zoom\">ซูมภาพกว้างโดยอัตโนมัติ</string>\n    <string name=\"skipped_reason_not_caught_up\">ถูกข้ามเนื่องจากมีตอนที่ยังไม่ได้อ่าน</string>\n    <string name=\"skipped_reason_not_started\">ถูกข้ามเนื่องจากยังไม่มีตอนใด ๆ ถูกอ่าน</string>\n    <string name=\"action_show_manga\">แสดงรายการ</string>\n    <string name=\"pref_update_only_started\">ข้ามรายการที่ยังไม่ได้เริ่มอ่าน</string>\n    <string name=\"skipped_reason_completed\">ถูกข้ามเนื่องจากเรื่องนี้จบแล้ว</string>\n    <string name=\"learn_more\">แตะเพื่อเรียนรู้เพิ่มเติม</string>\n    <string name=\"notification_update_error\">อัปเดตผิดพลาด %1$d รายการ</string>\n    <string name=\"rotation_reverse_portrait\">แนวตั้งแบบกลับด้าน</string>\n    <string name=\"action_move_to_top_all_for_series\">ย้ายเรื่องไปด้านบน</string>\n    <string name=\"disabled_nav\">ปิดใช้งาน</string>\n    <string name=\"error_saving_picture\">ผิดพลาดในการบันทึกรูปภาพ</string>\n    <string name=\"update_check_open\">เปิดใน GithHub</string>\n    <string name=\"empty_backup_error\">ไม่มีรายการคลังถูกสำรองข้อมูลไว้</string>\n    <string name=\"action_close\">ปิด</string>\n    <string name=\"pref_clear_webview_data\">ล้างข้อมูล WebView</string>\n    <string name=\"webview_data_deleted\">ล้างข้อมูล WebView แล้ว</string>\n    <string name=\"source_filter_empty_screen\">ไม่พบแหล่งที่มาที่ติดตั้งแล้ว</string>\n    <string name=\"source_empty_screen\">ไม่พบแหล่งที่มาใด ๆ</string>\n    <string name=\"action_sort_unread_count\">จำนวนตอนที่ยังไม่ได้อ่าน</string>\n    <string name=\"action_sort_last_manga_update\">เช็กอัปเดตล่าสุด</string>\n    <string name=\"download_notifier_split_page_not_found\">ไม่พบหน้า %d ขณะกำลังแยกหน้า</string>\n    <string name=\"split_tall_images_summary\">เพิ่มประสิทธิภาพตัวอ่าน</string>\n    <string name=\"download_notifier_split_page_path_not_found\">ไม่พบตำแหน่งไฟล์ของหน้า %d</string>\n    <string name=\"pref_reset_viewer_flags\">รีเซ็ตค่ากำหนดตัวอ่านตามเรื่อง</string>\n    <string name=\"pref_reset_viewer_flags_summary\">รีเซ็ตโหมดการอ่านและการจัดวางของทุกเรื่อง</string>\n    <string name=\"pref_reset_viewer_flags_success\">รีเซ็ตค่ากำหนดตัวอ่านทั้งหมดแล้ว</string>\n    <string name=\"pref_reset_viewer_flags_error\">ไม่สามารถรีเซ็ตค่ากำหนดตัวอ่าน</string>\n    <string name=\"empty_screen\">เอ่อ นี้มันงี่เง่าชะมัด</string>\n    <string name=\"ext_info_version\">เวอร์ชัน</string>\n    <string name=\"ext_info_language\">ภาษา</string>\n    <string name=\"ext_info_age_rating\">ระดับความเหมาะสม</string>\n    <string name=\"wish_list\">รายการที่อยากอ่าน</string>\n    <string name=\"on_hold_list\">รายการที่พักอ่านไว้</string>\n    <string name=\"unfinished_list\">รายการที่ยังไม่จบ</string>\n    <string name=\"reading_list\">รายการที่กำลังอ่าน</string>\n    <string name=\"complete_list\">รายการที่จบแล้ว</string>\n    <string name=\"network_not_metered\">เฉพาะบนเครือข่ายที่ไม่ได้ตรวจสอบ</string>\n    <string name=\"cant_open_last_read_chapter\">ไม่สามารถเปิดตอนที่อ่านล่าสุดได้</string>\n    <string name=\"custom_cover\">กำหนดปกเอง</string>\n    <string name=\"not_installed\">ยังไม่ถูกติดตั้ง</string>\n    <string name=\"pref_app_language\">ภาษาของแอพ</string>\n    <string name=\"description_placeholder\">ไม่มีคำอธิบาย</string>\n    <string name=\"theme_lavender\">ลาเวนเดอร์</string>\n    <string name=\"delete_category_confirmation\">ต้องการจะลบหมวดหมู่ \\\"%s\\\" ไหม?</string>\n    <string name=\"delete_category\">ลบหมวดหมู่</string>\n    <string name=\"internal_error\">InternalError: ตรวจสอบบันทึกการแครชสำหรับข้อมูลเพิ่มเติม</string>\n    <string name=\"pref_user_agent_string\">ตัวแทนผู้ใช้เริ่มต้น</string>\n    <string name=\"pref_reset_user_agent_string\">รีเซ็ตตัวแทนผู้ใช้</string>\n    <string name=\"action_remove_everything\">นำทุกอย่างออก</string>\n    <string name=\"appwidget_updates_description\">แสดงรายการในคลังที่อัปเดตล่าสุดของคุณ</string>\n    <string name=\"appwidget_unavailable_locked\">วิดเจ็ตไม่พร้อมใช้งานขณะการล็อกแอปเปิดไว้</string>\n    <string name=\"error_user_agent_string_blank\">สตริงตัวแทนผู้ใช้ไม่สามารถทิ้งว่างเปล่าไว้ได้</string>\n    <string name=\"update_already_running\">กำลังอัปเดตอยู่แล้ว</string>\n    <string name=\"theme_tidalwave\">ไทเดลเวฟ</string>\n    <string name=\"download_ahead\">ดาวน์โหลดล่วงหน้า</string>\n    <string name=\"auto_download_while_reading\">ดาวน์โหลดอัตโนมัติขณะกำลังอ่าน</string>\n    <string name=\"download_ahead_info\">ใช้ได้เฉพาะกับตอนปัจจุบัน + ตอนถัด ๆ ไปดาวน์โหลดไว้อยู่แล้ว</string>\n    <string name=\"are_you_sure\">แน่ใจแล้วใช่หรือไม่?</string>\n    <string name=\"multi_lang\">หลายภาษา</string>\n    <string name=\"updates_last_update_info\">อัปเดตคลังล่าสุด: %s</string>\n    <string name=\"remove_manga\">คุณกำลังจะนำ \\\"%s\\\" ออกจากคลัง</string>\n    <string name=\"popular\">ยอดนิยม</string>\n    <string name=\"missing_storage_permission\">ไม่ได้รับการอนุญาตให้ใช้งานที่จัดเก็บ</string>\n    <string name=\"action_search_hint\">ค้นหา…</string>\n    <string name=\"skipped_reason_not_always_update\">ถูกข้ามเนื่องจากเรื่องไม่จำเป็นต้องถูกอัปเดต</string>\n    <string name=\"pref_appearance_summary\">ธีม, รูปแบบวันที่และเวลา</string>\n    <string name=\"pref_library_summary\">หมวดหมู่, การอัปเดตคลัง, การปัดรายการตอน</string>\n    <string name=\"pref_reader_summary\">โหมดการอ่าน, การแสดงผล, การนำทาง</string>\n    <string name=\"pref_downloads_summary\">การดาวน์โหลดอัตโนมัติ, การดาวน์โหลดล่วงหน้า</string>\n    <string name=\"pref_tracking_summary\">การประมวลผลซิงก์ทางเดียง, เสริมการวิงก์</string>\n    <string name=\"pref_browse_summary\">แหล่งที่มา, ส่วนขยาย, การค้นหาทั้งหมด</string>\n    <string name=\"pref_backup_summary\">การสำรองข้อมูลและพื้นที่เก็บข้อมูลด้วยตนเองและอัตโนมัติ</string>\n    <string name=\"pref_security_summary\">การล็อกแอป, หน้าจอความปลอดภัย</string>\n    <string name=\"pref_advanced_summary\">ดัมพ์บันทึกข้อขัดข้อง, การเพิ่มประสิทธิภาพแบตเตอรี่</string>\n    <string name=\"crash_screen_title\">เกิดความผิดพลาด!</string>\n    <string name=\"crash_screen_description\">%s เกิดข้อผิดพลาดอย่างไม่คาดคิด ขอแนะนำให้คุณแบ่งปันบันทึกข้อขัดข้อง แล้วส่งลงไปในช่องสนับสนุนของเราใน Discord</string>\n    <string name=\"invalid_location\">ตำแหน่งไม่ถูกต้อง: %s</string>\n    <string name=\"unknown_title\">ไม่ทราบชื่อเรื่อง</string>\n    <string name=\"crash_screen_restart_application\">เริ่มแอปพลิเคชันใหม่</string>\n    <string name=\"updates_last_update_info_just_now\">เมื่อสักครู่</string>\n    <string name=\"error_user_agent_string_invalid\">สตริงตัวแทนผู้ใช้ไม่ถูกต้อง</string>\n    <string name=\"action_open_random_manga\">สุ่มเปิดรายการ</string>\n    <string name=\"fdroid_warning\">บิลด์ F-Droid ไม่ได้ถูกรองรับอย่างเป็นทางการ\n\\nแตะเพื่อเรียนรู้เพิ่มเติม</string>\n    <string name=\"information_no_entries_found\">ไม่พบรายการใด ๆ ในหมวดหมู่นี้</string>\n    <string name=\"download_notifier_cache_renewal\">กำลังตรวจสอบการดาวน์โหลด</string>\n    <string name=\"action_display_show_continue_reading_button\">ปุ่มอ่านต่อ</string>\n    <string name=\"pref_invalidate_download_cache\">ทำดัชนีการดาวน์โหลดใหม่</string>\n    <string name=\"track_remove_start_date_conf_text\">การกระทำนี้จะเป็นการนำวันที่เริ่มอ่านของรายการที่เลือกไว้ก่อนหน้าจาก %s ออก</string>\n    <string name=\"track_remove_finish_date_conf_text\">การกระทำนี้จะเป็นการนำวันที่อ่านจบของรายการที่เลือกไว้ก่อนหน้าจาก %s ออก</string>\n    <string name=\"track_remove_date_conf_title\">นำวันที่ออก?</string>\n    <string name=\"pref_invalidate_download_cache_summary\">บังคับให้ตรวจสอบบทที่ดาวน์โหลดไว้</string>\n    <string name=\"label_started\">เริ่มต้น</string>\n    <string name=\"label_downloaded\">ดาวน์โหลดไว้แล้ว</string>\n    <string name=\"label_read_duration\">ระยะเวลาการอ่าน</string>\n    <string name=\"label_titles_section\">รายการ</string>\n    <string name=\"label_total_chapters\">รวม</string>\n    <string name=\"label_tracker_section\">ตัวติดตาม</string>\n    <string name=\"label_mean_score\">คะแนนเฉลี่ย</string>\n    <string name=\"minute_short\">%d น.</string>\n    <string name=\"label_stats\">สถิติ</string>\n    <string name=\"label_local\">ภายในเครื่อง</string>\n    <string name=\"not_applicable\">ไม่ทราบ</string>\n    <string name=\"label_tracked_titles\">รายการที่ติดตาม</string>\n    <string name=\"label_used\">ใช้แล้ว</string>\n    <string name=\"label_overview_section\">ภาพรวม</string>\n    <string name=\"label_completed_titles\">รายการที่อ่านจบแล้ว</string>\n    <string name=\"label_titles_in_global_update\">ในการอัปเดตทั้งหมด</string>\n    <string name=\"day_short\">%d วัน</string>\n    <string name=\"label_read_chapters\">อ่านแล้ว</string>\n    <string name=\"hour_short\">%d ชม.</string>\n    <string name=\"seconds_short\">%d วิ.</string>\n    <string name=\"action_not_now\">ไม่ใช่ตอนนี้</string>\n    <string name=\"pref_library_update_show_tab_badge\">แสดงจำนวนที่ยังไม่ได้อ่านบนไอคอนการอัปเดต</string>\n    <string name=\"information_no_manga_category\">หมวดหมู่ว่างเปล่า</string>\n    <string name=\"copied_to_clipboard_plain\">คัดลอกไปยังคลิปบอร์ดแล้ว</string>\n    <string name=\"pref_skip_dupe_chapters\">ข้ามตอนที่ซ้ำกัน</string>\n    <string name=\"enhanced_services_not_installed\">พร้อมใช้งานแต่ไม่ได้ติดตั้งแหล่งที่มา: %s</string>\n    <string name=\"confirm_add_duplicate_manga\">มีรายการชื่อเดียวกันอยู่ในคลัง\n\\n\n\\nต้องการดำเนินการต่อหรือไม่?</string>\n    <string name=\"track_error\">%1$s ข้อผิดพลาด: %2$s</string>\n    <string name=\"information_required_plain\">*จำเป็น</string>\n    <string name=\"pref_hide_in_library_items\">ซ่อนรายการที่มีอยู่ในคลังอยู่แล้ว</string>\n    <string name=\"action_copy_to_clipboard\">คัดลอกไปยังคลิปบอร์ด</string>\n    <string name=\"action_update_category\">อัปเดตหมวดหมู่</string>\n    <string name=\"split_tall_images\">แยกภาพสูงยาว</string>\n    <string name=\"overlay_header\">โอเวอร์เลย์</string>\n    <string name=\"pref_page_rotate\">หมุนหน้ากว้างให้พอดี</string>\n    <string name=\"pref_page_rotate_invert\">พลิกการวางแนวของหน้ากว้างที่หมุน</string>\n    <string name=\"pref_debug_info\">ข้อมูลดีบัก</string>\n    <string name=\"pref_chapter_swipe_end\">การกระทำเมื่อปัดไปทางขวา</string>\n    <string name=\"pref_chapter_swipe_start\">การกระทำเมื่อปัดไปทางซ้าย</string>\n    <string name=\"pref_double_tap_zoom\">แตะสองครั้งเพื่อซูม</string>\n    <string name=\"action_set_interval\">กำหนดช่วงเวลา</string>\n    <string name=\"action_filter_interval_custom\">กำหนดความถี่ในการอัปเดต</string>\n    <string name=\"action_sort_next_updated\">การอัปเดตที่คาดไว้ต่อไป</string>\n    <string name=\"pref_update_only_in_release_period\">คาดการณ์เวลาออกครั้งต่อไป</string>\n    <string name=\"skipped_reason_not_in_release_period\">ข้ามไปเนื่องจากคาดว่าจะไม่มีการออกในวันนี้</string>\n    <string name=\"manga_display_interval_title\">ประมาณทุกๆ</string>\n    <string name=\"manga_display_modified_interval_title\">ตั้งค่าให้อัพเดตทุกๆ</string>\n    <string name=\"intervals_header\">ช่วงเวลา</string>\n    <string name=\"action_ok\">ตกลง</string>\n    <string name=\"track_delete_title\">นำการติดตามของ %s ออกไหม?</string>\n    <string name=\"track_delete_text\">การกระทำนี้จะเป็นการลบการติดตามภายในเครื่อง</string>\n    <string name=\"track_delete_remote_text\">และลบออกจาก %s เช่นกัน</string>\n    <string name=\"library_sync_complete\">ซิงค์คลังเสร็จสมบูรณ์</string>\n    <string name=\"has_results\">มีผลลัพธ์</string>\n    <string name=\"syncing_library\">กำลังซิงค์คลัง</string>\n    <string name=\"delete_downloaded\">ลบการดาวน์โหลด</string>\n    <string name=\"download_cache_invalidated\">ดัชนีการดาวน์โหลดไม่ถูกต้อง</string>\n    <string name=\"information_cloudflare_help\">แตะที่นี่เพื่อขอความช่วยเหลือเกี่ยวกับ Cloudflare</string>\n    <string name=\"create_backup_file_error\">ไม่สามารถสร้างไฟล์สำรองข้อมูล</string>\n    <string name=\"track_activity_name\">เข้าสู่ระบบตัวติดตาม</string>\n    <string name=\"unlock_app_title\">ปลดล็อก %s</string>\n    <string name=\"exception_offline\">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</string>\n    <string name=\"exception_http\">HTTP %d, ดูเว็บไซต์ใน WebView</string>\n    <string name=\"exception_unknown_host\">ไม่สามารถเข้าถึง %s ได้</string>\n    <string name=\"action_move_to_bottom_all_for_series\">ย้ายเรื่องไปด้านล่าง</string>\n    <string name=\"pref_relative_format\">ประทับเวลาแบบสัมพันธ์กัน</string>\n    <string name=\"pref_relative_format_summary\">แสดง \\\"%1$s\\\" แทน \\\"%2$s\\\"</string>\n    <string name=\"notification_updating_progress\">กำลังอัปเดตคลัง... (%s)</string>\n    <string name=\"source_settings\">การตั้งค่าแหล่งที่มา</string>\n    <string name=\"app_settings\">การตั้งค่าแอป</string>\n    <string name=\"file_null_uri_error\">ไม่มีไฟล์ถูกเลือกไว้</string>\n    <string name=\"relative_time_span_never\">ไม่เลย</string>\n    <string name=\"pref_flash_page_summ\">ลดภาพซ้อนบนจอแสดงผล E-Ink</string>\n    <string name=\"last_auto_backup_info\">สำรองข้อมูลอัตโนมัติครั้งล่าสุด: %s</string>\n    <string name=\"pref_flash_page\">แฟลชเมื่อเปลี่ยนหน้า</string>\n    <string name=\"pref_storage_usage\">การใช้พื้นที่เก็บข้อมูล</string>\n    <string name=\"label_data_storage\">ข้อมูลและการจัดเก็บข้อมูล</string>\n    <string name=\"action_create\">สร้าง</string>\n    <string name=\"action_apply\">นำไปใช้</string>\n    <string name=\"action_revert_to_default\">ย้อนกลับไปเป็นค่าเริ่มต้น</string>\n    <string name=\"no_scanlators_found\">ไม่พบผู้แปล</string>\n    <string name=\"scanlator\">ผู้แปล</string>\n    <string name=\"action_sort_tracker_score\">คะแนนจากตัวติดตาม</string>\n    <string name=\"exclude_scanlators\">ผู้แปลที่เว้นไว้</string>\n    <string name=\"pref_storage_location\">ตำแหน่งที่จัดเก็บ</string>\n    <string name=\"pref_storage_location_info\">ใช้สำหรับการสำรองข้อมูลอัตโนมัติ การดาวน์โหลดตอน และแหล่งที่มาในเครื่อง</string>\n    <string name=\"action_menu_overflow_description\">ตัวเลือกเพิ่มเติม</string>\n    <string name=\"selected\">เลือกแล้ว</string>\n    <string name=\"not_selected\">ยังไม่ได้เลือก</string>\n    <string name=\"action_bar_up_description\">ขึ้นไปข้างบน</string>\n    <string name=\"onboarding_storage_action_select\">เลือกโฟลเดอร์</string>\n    <string name=\"pref_onboarding_guide\">คู่มือการเริ่มต้นใช้งาน</string>\n    <string name=\"onboarding_guides_new_user\">เพิ่งรู้จัก %s? เราขอแนะนำให้ดูคู่มือการเริ่มต้นใช้งาน</string>\n    <string name=\"onboarding_action_finish\">เริ่มต้น</string>\n    <string name=\"manga_interval_expected_update\">ตอนใหม่คาดว่าจะออกในอีกประมาณ %1$s จะตรวจสอบทุก ๆ %2$s</string>\n    <string name=\"onboarding_storage_selection_required\">จำเป็นต้องเลือกโฟลเดอร์</string>\n    <string name=\"onboarding_permission_notifications\">สิทธิ์ในการแจ้งเตือน</string>\n    <string name=\"onboarding_permission_install_apps\">สิทธิ์ในการติดตั้งแอป</string>\n    <string name=\"available_disk_space_info\">พร้อมใช้งาน: %1$s / ทั้งหมด: %2$s</string>\n    <string name=\"onboarding_heading\">ยินดีต้อนรับ!</string>\n    <string name=\"onboarding_guides_returning_user\">กลับมาติดตั้ง %s ใหม่?</string>\n    <string name=\"invalid_backup_file_error\">ข้อผิดพลาดเต็ม:</string>\n    <string name=\"onboarding_action_skip\">ข้าม</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">เพื่อหลีกเลี่ยงการหยุดชะงักใน การอัปเดตไลบรารี ดาวน์โหลด และการสำรองข้อมูลที่ใช้เวลานาน</string>\n    <string name=\"onboarding_action_next\">ถัดไป</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">การใช้แบตเตอรี่ในพื้นหลัง</string>\n    <string name=\"onboarding_permission_install_apps_description\">ในการติดตั้งส่วนขยายแหล่งที่มา</string>\n    <string name=\"onboarding_description\">มาตั้งค่าอะไรสักอย่างกันก่อน คุณสามารถเปลี่ยนสิ่งเหล่านี้ในการตั้งค่าในภายหลังได้</string>\n    <string name=\"no_location_set\">ไม่มีการกำหนดตำแหน่งจัดเก็บ</string>\n    <string name=\"onboarding_permission_notifications_description\">รับการแจ้งเตือนการอัปเดตคลังและอื่น ๆ</string>\n    <string name=\"ext_permission_install_apps_warning\">จำเป็นต้องมีสิทธิ์ในการติดตั้งส่วนขยาย แตะที่นี่เพื่อให้สิทธิ์</string>\n    <string name=\"private_settings\">รวมการตั้งค่าที่ละเอียดอ่อน (เช่น โทเค็นการเข้าสู่ระบบตัวติดตาม)</string>\n    <string name=\"onboarding_permission_action_grant\">อนุญาต</string>\n    <string name=\"onboarding_storage_info\">เลือกโฟลเดอร์ที่ %1$s จะจัดเก็บการดาวน์โหลดบท การสำรองข้อมูล และอื่นๆ\n\\n\n\\nแนะนำให้ใช้โฟลเดอร์เฉพาะ\n\\n\n\\nโฟลเดอร์ที่เลือก: %2$s</string>\n    <string name=\"pref_library_update_smart_update\">อัปเดตอัจฉริยะ</string>\n    <string name=\"label_extension_repos\">รีโพส่วนขยาย</string>\n    <string name=\"error_repo_exists\">มีรีโพนี้อยู่แล้ว!</string>\n    <string name=\"action_add_repo_message\">เพิ่มรีโพเพิ่มเติมให้กับ Mihon - ควรเป็น URL ที่ลงท้ายด้วย \\\"index.min.json\\\"</string>\n    <string name=\"manga_interval_custom_amount\">ความถี่ในการอัปเดตกำหนดเอง:</string>\n    <string name=\"information_empty_repos\">คุณไม่มีรีโพที่ตั้งค่าไว้</string>\n    <string name=\"onboarding_storage_help_action\">คู่มือการจัดเก็บข้อมูล</string>\n    <string name=\"ext_revoke_trust\">เพิกถอนส่วนขยายที่ไม่รู้จักที่เชื่อถือไว้</string>\n    <string name=\"action_add_repo\">เพิ่มรีโพ</string>\n    <string name=\"action_delete_repo\">ลบรีโพ</string>\n    <string name=\"invalid_repo_name\">URL ของรีโพไม่ถูกต้อง</string>\n    <string name=\"manga_interval_expected_update_soon\">เร็ว ๆ นี้</string>\n    <string name=\"onboarding_storage_help_info\">กำลังอัปเดตจากเวอร์ชันเก่าและไม่แน่ใจว่าจะเลือกอะไรใช่ไหม? โปรดดูคู่มือการจัดเก็บข้อมูลสำหรับข้อมูลเพิ่มเติม</string>\n    <string name=\"theme_nord\">นอร์ด</string>\n    <string name=\"label_add_repo_input\">URL รีโพ</string>\n    <string name=\"delete_repo_confirmation\">ต้องการจะลบรีโพ \\\"%s\\\" หรือไม่?</string>\n    <string name=\"action_open_repo\">เปิดที่มาของรีโพ</string>\n    <string name=\"action_copy_link\">คัดลอกลิงก์</string>\n    <string name=\"action_sort_random\">สุ่ม</string>\n    <string name=\"onboarding_permission_analytics\">อนุญาตให้เก็บข้อมูลไปวิเคราะห์</string>\n    <string name=\"pref_security\">ความปลอดภัย</string>\n    <string name=\"pref_firebase\">การวิเคราะห์และบันทึกข้อผิดพลาด</string>\n    <string name=\"onboarding_permission_crashlytics_description\">ส่งบันทึกข้อผิดพลาดแบบไม่เปิดเผยตัวตนให้กับนักพัฒนา</string>\n    <string name=\"onboarding_permission_crashlytics\">ส่งบันทึกข้อผิดพลาด</string>\n    <string name=\"onboarding_permission_analytics_description\">ส่งข้อมูลการใช้งานที่ไม่ระบุตัวตนเพื่อปรับปรุงคุณสมบัติของแอป</string>\n    <string name=\"firebase_summary\">การส่งบันทึกข้อผิดพลาดและการวิเคราะห์จะช่วยให้เราระบุและแก้ไขปัญหา ปรับปรุงประสิทธิภาพ และทำให้การอัปเดตในอนาคตมีความเกี่ยวข้องกับความต้องการของคุณมากขึ้น</string>\n    <string name=\"ext_remove\">นำออก</string>\n    <string name=\"ext_confirm_remove\">ต้องการนำส่วนขยายออกหรือไม่?</string>\n    <string name=\"remove_private_extension_message\">ต้องการนำส่วนขยาย \\\"%s\\\" ออกหรือไม่?</string>\n    <string name=\"label_upcoming\">ที่กำลังจะมีขึ้น</string>\n    <string name=\"action_add_anyway\">เพิ่มอยู่ดี</string>\n    <string name=\"action_migrate_duplicate\">โยกย้ายรายการที่มีอยู่</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">อัปเดตความคืบหน้าเมื่อทำเครื่องหมายว่าอ่านแล้ว</string>\n    <string name=\"invalid_backup_file_unknown\">ไฟล์สำรองข้อมูลเสียหาย</string>\n    <string name=\"non_library_settings\">รายการที่อ่านทั้งหมด</string>\n    <string name=\"trackers_updated_summary\">ตัวติดตามของบท %d ได้รับการอัปเดตแล้ว</string>\n    <string name=\"upcoming_guide\">ไกด์ที่กำลังจะมีขึ้น</string>\n    <string name=\"upcoming_calendar_next\">เดือนถัดไป</string>\n    <string name=\"pref_flash_style_white\">สีขาว</string>\n    <string name=\"pref_flash_duration\">ระยะเวลากระพริบ</string>\n    <string name=\"pref_flash_page_interval\">กระพริบทุก</string>\n    <string name=\"pref_flash_with\">กระพิบเป็น</string>\n    <string name=\"pref_flash_style_black\">สีดำ</string>\n    <string name=\"upcoming_calendar_prev\">เดือนก่อนหน้า</string>\n    <string name=\"invalid_backup_file_json\">ไม่รองรับการสำรองข้อมูลเป็น JSON</string>\n    <string name=\"extensionRepo_settings\">รีโพส่วนขยาย</string>\n    <string name=\"manga_interval_expected_update_null\">มังงะเรื่องนี้เสร็จแล้ว หรือไม่มีกำหนดวางจำหน่ายที่แน่ชัด</string>\n    <string name=\"file_picker_uri_permission_unsupported\">ไม่สามารถรับสิทธิ์การเข้าถึงโฟลเดอร์ถาวรได้ แอปอาจทำงานผิดปกติ</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_style_white_black\">สีขาวและสีดำ</string>\n    <string name=\"pref_download_new_unread_chapters_only\">ข้ามการดาวน์โหลดบทที่ซ้ำ</string>\n    <string name=\"action_replace_repo_title\">กุญแจลายเซ็นระบุตัวตนนี้มีอยู่แล้ว</string>\n    <string name=\"pref_display_profile\">โปรไฟล์การแสดงผลแบบกำหนดเอง</string>\n    <string name=\"action_replace_repo\">แทนที่</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">ปิดการใช้งานการซูมออก</string>\n    <string name=\"action_view_upcoming\">ดูการอัปเดตที่กำลังจะมีขึ้น</string>\n    <string name=\"action_replace_repo_message\">รีโพสิทอรี %1$s มีกุญแจลายเซ็นระบุตัวตนเดียวกันกับ %2$s\\nหากต้องการ %2$s จะถูกแทนที่ มิฉะนั้น โปรดติดต่อผู้ดูแลรีโพนี้</string>\n    <string name=\"add_repo_confirmation\">คุณต้องการเพิ่มรีโพ \\\"%s\\\" หรือไม่?</string>\n    <string name=\"confirm_tracker_update\">อัปเดตตัวติดตามของบท %d หรือไม่?</string>\n    <string name=\"label_auto\">อัตโนมัติ</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/tr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s dakika sonra</item>\n        <item quantity=\"other\">%1$s dakika sonra</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d yeni bölüm</item>\n        <item quantity=\"other\">%1$d yeni bölüm</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Bölüm %1$s ve 1 daha</item>\n        <item quantity=\"other\">Bölüm %1$s ve %2$d daha</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"one\">%d girdi için</item>\n        <item quantity=\"other\">%d girdi için</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"one\">Uzantı güncellemesi var</item>\n        <item quantity=\"other\">%d uzantı güncellemesi var</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s kaldı</item>\n        <item quantity=\"other\">%1$s kaldı</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d kategori</item>\n        <item quantity=\"other\">%d kategori</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">%1$s içinde %2$s hatayla tamamlandı</item>\n        <item quantity=\"other\">%1$s içinde %2$s hatayla tamamlandı</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s bölüm</item>\n        <item quantity=\"other\">%1$s bölüm</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"one\">%d izleyici</item>\n        <item quantity=\"other\">%d izleyici</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"one\">%d bölüm atlanıyor, kaynak mevcut değil veya filtrelendi</item>\n        <item quantity=\"other\">%d bölüm atlanıyor, kaynak mevcut değil veya filtrelendi</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Dün</item>\n        <item quantity=\"other\">%1$d gün önce</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Sonraki okunmayan bölüm</item>\n        <item quantity=\"other\">Sonraki %d okunmayan bölüm</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Sonraki bölüm</item>\n        <item quantity=\"other\">Sonraki %d bölüm</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">%1$s bölüm eksik</item>\n        <item quantity=\"other\">%1$s bölüm eksik</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"one\">1 gün</item>\n        <item quantity=\"other\">%d gün</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"one\">%d depo</item>\n        <item quantity=\"other\">%d depo</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Yarın</item>\n        <item quantity=\"other\">%1$d gün içinde</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"one\">1 sayfa</item>\n        <item quantity=\"other\">%1$s sayfa</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/tr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Ad</string>\n    <string name=\"categories\">Kategoriler</string>\n    <string name=\"manga\">Kitaplık girdileri</string>\n    <string name=\"chapters\">Bölümler</string>\n    <string name=\"track\">İzleme</string>\n    <string name=\"history\">Geçmiş</string>\n    <string name=\"label_settings\">Ayarlar</string>\n    <string name=\"label_download_queue\">İndirme kuyruğu</string>\n    <string name=\"label_library\">Kitaplık</string>\n    <string name=\"label_recent_manga\">Geçmiş</string>\n    <string name=\"label_recent_updates\">Güncellemeler</string>\n    <string name=\"label_backup\">Yedekle ve geri yükle</string>\n    <string name=\"label_migration\">Taşı</string>\n    <string name=\"label_extensions\">Uzantılar</string>\n    <string name=\"label_extension_info\">Uzantı bilgisi</string>\n    <string name=\"action_settings\">Ayarlar</string>\n    <string name=\"action_filter\">Filtrele</string>\n    <string name=\"action_filter_bookmarked\">Yer imli</string>\n    <string name=\"action_filter_unread\">Okunmamış</string>\n    <string name=\"action_filter_empty\">Filtreyi kaldır</string>\n    <string name=\"action_sort_alpha\">Alfabetik</string>\n    <string name=\"action_sort_total\">Toplam bölüm</string>\n    <string name=\"action_sort_last_read\">Son okunan</string>\n    <string name=\"action_search\">Ara</string>\n    <string name=\"action_global_search\">Genel arama</string>\n    <string name=\"action_select_all\">Tümünü seç</string>\n    <string name=\"action_mark_as_read\">Okundu olarak işaretle</string>\n    <string name=\"action_mark_as_unread\">Okunmadı olarak işaretle</string>\n    <string name=\"action_mark_previous_as_read\">Öncekileri okundu olarak imle</string>\n    <string name=\"action_download\">İndir</string>\n    <string name=\"action_bookmark\">Bölüme yer imi ekle</string>\n    <string name=\"action_remove_bookmark\">Bölümün yer imini kaldır</string>\n    <string name=\"action_delete\">Sil</string>\n    <string name=\"action_update_library\">Kitaplığı güncelle</string>\n    <string name=\"action_edit\">Düzenle</string>\n    <string name=\"action_add\">Ekle</string>\n    <string name=\"action_add_category\">Kategori ekle</string>\n    <string name=\"action_edit_categories\">Kategorileri düzenle</string>\n    <string name=\"action_rename_category\">Kategoriyi yeniden adlandır</string>\n    <string name=\"action_move_category\">Kategorileri ayarla</string>\n    <string name=\"action_edit_cover\">Kapağı düzenle</string>\n    <string name=\"action_pause\">Duraklat</string>\n    <string name=\"action_previous_chapter\">Önceki bölüm</string>\n    <string name=\"action_next_chapter\">Sonraki bölüm</string>\n    <string name=\"action_retry\">Tekrar dene</string>\n    <string name=\"action_remove\">Kaldır</string>\n    <string name=\"action_resume\">Devam Et</string>\n    <string name=\"action_open_in_browser\">Tarayıcıda aç</string>\n    <string name=\"action_display_mode\">Görüntüleme modu</string>\n    <string name=\"action_display\">Görüntüleme</string>\n    <string name=\"action_display_grid\">Sıkışık ızgara</string>\n    <string name=\"action_display_list\">Liste</string>\n    <string name=\"action_display_download_badge\">İndirilen bölümler</string>\n    <string name=\"action_cancel\">İptal et</string>\n    <string name=\"action_sort\">Sırala</string>\n    <string name=\"action_install\">Yükle</string>\n    <string name=\"action_share\">Paylaş</string>\n    <string name=\"action_save\">Kaydet</string>\n    <string name=\"action_reset\">Sıfırla</string>\n    <string name=\"action_undo\">Geri al</string>\n    <string name=\"action_open_log\">Günlüğü aç</string>\n    <string name=\"action_restore\">Geri yükle</string>\n    <string name=\"loading\">Yükleniyor…</string>\n    <string name=\"app_not_available\">Uygulama kullanılamıyor</string>\n    <string name=\"pref_category_general\">Genel</string>\n    <string name=\"pref_category_reader\">Okuyucu</string>\n    <string name=\"pref_category_downloads\">İndirmeler</string>\n    <string name=\"pref_category_tracking\">İzleme</string>\n    <string name=\"pref_category_advanced\">Gelişmiş</string>\n    <string name=\"pref_category_about\">Hakkında</string>\n    <string name=\"pref_library_columns\">Bir satırdaki öge sayısı</string>\n    <string name=\"portrait\">Portre</string>\n    <string name=\"landscape\">Manzara</string>\n    <string name=\"pref_library_update_interval\">Otomatik güncellemeler</string>\n    <string name=\"update_never\">Kapalı</string>\n    <string name=\"update_6hour\">6 saatte bir</string>\n    <string name=\"update_12hour\">12 saatte bir</string>\n    <string name=\"update_24hour\">Günlük</string>\n    <string name=\"update_48hour\">2 günde bir</string>\n    <string name=\"update_weekly\">Haftalık</string>\n    <string name=\"all\">Tümü</string>\n    <string name=\"pref_library_update_restriction\">Otomatik güncelleme cihaz kısıtlamaları</string>\n    <string name=\"charging\">Şarj olurken</string>\n    <string name=\"pref_update_only_non_completed\">\\\"Tamamlanmış\\\" durumda olan girdileri atla</string>\n    <string name=\"pref_auto_update_manga_sync\">Okuduktan sonra ilerlemeyi güncelle</string>\n    <string name=\"default_category\">Varsayılan kategori</string>\n    <string name=\"default_category_summary\">Her zaman sor</string>\n    <string name=\"ext_update\">Güncelle</string>\n    <string name=\"ext_install\">Yükle</string>\n    <string name=\"ext_pending\">Beklemede</string>\n    <string name=\"ext_downloading\">İndiriliyor</string>\n    <string name=\"ext_installing\">Yükleniyor</string>\n    <string name=\"ext_installed\">Yüklendi</string>\n    <string name=\"ext_trust\">Güven</string>\n    <string name=\"ext_untrusted\">Güvenilmeyen</string>\n    <string name=\"ext_uninstall\">Kaldır</string>\n    <string name=\"untrusted_extension\">Güvenilmeyen uzantı</string>\n    <string name=\"untrusted_extension_message\">Kötü niyetli uzantılar, oturum açma bilgilerini okuyabilir veya güvenilmeyen kodlar çalıştırabilir.\n\\n\n\\nBu uzantıya güvenerek bu riskleri kabul etmiş olursunuz.</string>\n    <string name=\"pref_fullscreen\">Tam ekran</string>\n    <string name=\"pref_page_transitions\">Sayfa geçişlerini animasyonla yap</string>\n    <string name=\"pref_double_tap_anim_speed\">Çift dokunma animasyon hızı</string>\n    <string name=\"pref_show_page_number\">Sayfa numarası göster</string>\n    <string name=\"pref_crop_borders\">Kenarları kırp</string>\n    <string name=\"pref_custom_brightness\">Özel parlaklık</string>\n    <string name=\"pref_custom_color_filter\">Özel renk filtresi</string>\n    <string name=\"pref_keep_screen_on\">Ekranı açık tut</string>\n    <string name=\"pref_reader_navigation\">Gezinme</string>\n    <string name=\"pref_read_with_volume_keys\">Ses tuşları</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Ses tuşlarını ters çevir</string>\n    <string name=\"pref_reader_theme\">Arka plan rengi</string>\n    <string name=\"white_background\">Beyaz</string>\n    <string name=\"black_background\">Siyah</string>\n    <string name=\"pref_viewer_type\">Varsayılan okuma modu</string>\n    <string name=\"left_to_right_viewer\">Sayfalı (soldan sağa)</string>\n    <string name=\"right_to_left_viewer\">Sayfalı (sağdan sola)</string>\n    <string name=\"vertical_viewer\">Sayfalı (dikey)</string>\n    <string name=\"webtoon_viewer\">Uzun şerit</string>\n    <string name=\"pager_viewer\">Sayfalı</string>\n    <string name=\"pref_image_scale_type\">Boyutlandırma şekli</string>\n    <string name=\"scale_type_fit_screen\">Ekrana sığdır</string>\n    <string name=\"scale_type_stretch\">Uzat</string>\n    <string name=\"scale_type_fit_width\">Genişliğe sığdır</string>\n    <string name=\"scale_type_fit_height\">Yüksekliğe sığdır</string>\n    <string name=\"scale_type_original_size\">Orijinal boyut</string>\n    <string name=\"scale_type_smart_fit\">Akıllı sığdırma</string>\n    <string name=\"pref_zoom_start\">Yakınlaştırma başlangıç konumu</string>\n    <string name=\"zoom_start_automatic\">Otomatik</string>\n    <string name=\"zoom_start_left\">Sol</string>\n    <string name=\"zoom_start_right\">Sağ</string>\n    <string name=\"zoom_start_center\">Orta</string>\n    <string name=\"double_tap_anim_speed_0\">Animasyon yok</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Hızlı</string>\n    <string name=\"pref_rotation_type\">Varsayılan yön</string>\n    <string name=\"rotation_free\">Serbest</string>\n    <string name=\"rotation_force_portrait\">Kilitli portre</string>\n    <string name=\"rotation_force_landscape\">Kilitli manzara</string>\n    <string name=\"color_filter_r_value\">Kırmızı</string>\n    <string name=\"color_filter_g_value\">Yeşil</string>\n    <string name=\"color_filter_b_value\">Mavi</string>\n    <string name=\"color_filter_a_value\">Alfa</string>\n    <string name=\"pref_remove_after_marked_as_read\">Elle okundu olarak işaretlenince</string>\n    <string name=\"pref_remove_after_read\">Okuduktan sonra otomatik sil</string>\n    <string name=\"disabled\">Devre dışı</string>\n    <string name=\"last_read_chapter\">Son okunan bölüm</string>\n    <string name=\"second_to_last\">Okunan sondan ikinci bölüm</string>\n    <string name=\"third_to_last\">Okunan sondan üçüncü bölüm</string>\n    <string name=\"fourth_to_last\">Okunan sondan dördüncü bölüm</string>\n    <string name=\"fifth_to_last\">Okunan sondan beşinci bölüm</string>\n    <string name=\"pref_download_new\">Yeni bölümleri indir</string>\n    <string name=\"services\">İzleyiciler</string>\n    <string name=\"pref_create_backup\">Yedek oluştur</string>\n    <string name=\"pref_create_backup_summ\">Şu anki kitaplığı geri yüklemek için kullanılabilir</string>\n    <string name=\"pref_restore_backup\">Yedeği geri yükle</string>\n    <string name=\"pref_restore_backup_summ\">Kitaplığı yedek dosyasından geri yükle</string>\n    <string name=\"pref_backup_interval\">Otomatik yedekleme sıklığı</string>\n    <string name=\"backup_created\">Yedek oluşturuldu</string>\n    <string name=\"restore_completed\">Geri yükleme tamamlandı</string>\n    <string name=\"backup_choice\">Neyi yedeklemek istiyorsunuz?</string>\n    <string name=\"restoring_backup\">Yedek geri yükleniyor</string>\n    <string name=\"creating_backup\">Yedek oluşturuluyor</string>\n    <string name=\"pref_clear_chapter_cache\">Bölüm önbelleğini temizle</string>\n    <string name=\"used_cache\">Kullanılan: %1$s</string>\n    <string name=\"cache_deleted\">Önbellek temizlendi, %1$d dosya silindi</string>\n    <string name=\"cache_delete_error\">Temizlenirken sorun oluştu</string>\n    <string name=\"pref_clear_cookies\">Çerezleri temizle</string>\n    <string name=\"cookies_cleared\">Çerezler temizlendi</string>\n    <string name=\"pref_clear_database\">Veritabanını temizle</string>\n    <string name=\"pref_clear_database_summary\">Kitaplığa kaydedilmeyen girdilerin geçmiş bilgisini sil</string>\n    <string name=\"clear_database_confirmation\">Emin misiniz? Kitaplıkta olmayan girdilerin okunan bölümleri ve ilerlemesi kaybolacak</string>\n    <string name=\"clear_database_completed\">Girdiler silindi</string>\n    <string name=\"version\">Sürüm</string>\n    <string name=\"pref_enable_acra\">Çökme günlüklerini gönder</string>\n    <string name=\"pref_acra_summary\">Hataların düzeltilmesine yardımcı olur. Kişisel bilgi gönderilmeyecektir</string>\n    <string name=\"login_title\">%1$s \\'e giriş yap</string>\n    <string name=\"username\">Kullanıcı adı</string>\n    <string name=\"password\">Parola</string>\n    <string name=\"login\">Giriş</string>\n    <string name=\"login_success\">Giriş yapıldı</string>\n    <string name=\"unknown_error\">Bilinmeyen sorun</string>\n    <string name=\"updating_category\">Kategori güncelleniyor</string>\n    <string name=\"no_more_results\">Başka sonuç yok</string>\n    <string name=\"local_source\">Yerel kaynak</string>\n    <string name=\"other_source\">Diğer</string>\n    <string name=\"action_global_search_hint\">Genel arama…</string>\n    <string name=\"latest\">En son</string>\n    <string name=\"browse\">Göz At</string>\n    <string name=\"ongoing\">Devam ediyor</string>\n    <string name=\"unknown\">Bilinmeyen</string>\n    <string name=\"licensed\">Lisanslı</string>\n    <string name=\"remove_from_library\">Kitaplıktan kaldır</string>\n    <string name=\"manga_added_library\">Kitaplığa eklendi</string>\n    <string name=\"manga_removed_library\">Kitaplıktan kaldırıldı</string>\n    <string name=\"delete_downloads_for_manga\">İndirilen bölümler silinsin mi?</string>\n    <string name=\"copied_to_clipboard\">Panoya kopyalandı:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Kaynak yüklenmedi: %1$s</string>\n    <string name=\"display_mode_chapter\">Bölüm %1$s</string>\n    <string name=\"chapter_downloading_progress\">İndiriliyor (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Hata</string>\n    <string name=\"chapter_paused\">Duraklatıldı</string>\n    <string name=\"show_title\">Kaynak başlığı</string>\n    <string name=\"show_chapter_number\">Bölüm numarası</string>\n    <string name=\"sort_by_source\">Kaynağa göre</string>\n    <string name=\"sort_by_number\">Bölüm numarasına göre</string>\n    <string name=\"manga_download\">İndir</string>\n    <string name=\"download_unread\">Okunmamış</string>\n    <string name=\"confirm_delete_chapters\">Seçilen bölümleri silmek istediğinize emin misiniz?</string>\n    <string name=\"manga_tracking_tab\">İzleme</string>\n    <string name=\"reading\">Okunuyor</string>\n    <string name=\"completed\">Tamamlandı</string>\n    <string name=\"dropped\">Bırakıldı</string>\n    <string name=\"on_hold\">Beklemede</string>\n    <string name=\"plan_to_read\">Planlanıyor</string>\n    <string name=\"repeating\">Yeniden okunuyor</string>\n    <string name=\"score\">Puan</string>\n    <string name=\"title\">Başlık</string>\n    <string name=\"status\">Durum</string>\n    <string name=\"track_status\">Durum</string>\n    <string name=\"track_type\">Tür</string>\n    <string name=\"error_category_exists\">Bu adda bir kategori zaten var!</string>\n    <string name=\"snack_categories_deleted\">Kategoriler silindi</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Bu, bu bölümün okunma tarihini kaldıracak. Emin misiniz?</string>\n    <string name=\"dialog_with_checkbox_reset\">Bu girdi için tüm bölümleri sıfırla</string>\n    <string name=\"snack_add_to_library\">Kitaplığa ekle?</string>\n    <string name=\"picture_saved\">Görsel kaydedildi</string>\n    <string name=\"custom_filter\">Özel filtre</string>\n    <string name=\"set_as_cover\">Kapak olarak ayarla</string>\n    <string name=\"cover_updated\">Kapak güncellendi</string>\n    <string name=\"chapter_progress\">Sayfa: %1$d</string>\n    <string name=\"no_next_chapter\">Sonraki bölüm bulunamadı</string>\n    <string name=\"decode_image_error\">Bu görsel yüklenemedi</string>\n    <string name=\"confirm_set_image_as_cover\">Bu görsel kapak resmi olarak kullanılsın mı?</string>\n    <string name=\"migration_dialog_what_to_include\">Dahil edilecek veri seç</string>\n    <string name=\"migrate\">Taşı</string>\n    <string name=\"copy\">Kopyala</string>\n    <string name=\"download_queue_error\">Bölümler indirilemedi. İndirmeler bölümünden yeniden deneyebilirsiniz</string>\n    <string name=\"notification_new_chapters\">Yeni bölümler bulundu</string>\n    <string name=\"notification_cover_update_failed\">Kapak güncellenemedi</string>\n    <string name=\"notification_first_add_to_library\">Lütfen bunu yapmadan önce girdiyi kitaplığınıza ekleyin</string>\n    <string name=\"file_select_cover\">Kapak görselini seç</string>\n    <string name=\"file_select_backup\">Yedek dosyasını seç</string>\n    <string name=\"update_check_confirm\">İndir</string>\n    <string name=\"update_check_no_new_updates\">Yeni güncelleme yok</string>\n    <string name=\"update_check_notification_download_in_progress\">İndiriliyor…</string>\n    <string name=\"update_check_notification_download_complete\">Güncellemeyi yüklemek için dokunun</string>\n    <string name=\"update_check_notification_download_error\">İndirme hatası</string>\n    <string name=\"update_check_notification_update_available\">Yeni sürüm var!</string>\n    <string name=\"information_no_downloads\">İndirme yok</string>\n    <string name=\"information_no_recent\">Yeni güncelleme yok</string>\n    <string name=\"information_no_recent_manga\">Yakında okunan yok</string>\n    <string name=\"information_empty_library\">Kitaplığınız boş</string>\n    <string name=\"information_empty_category\">Kategoriniz yok. Kitaplığınızı düzenlemek için artı düğmesine basarak bir tane oluşturun.</string>\n    <string name=\"download_notifier_downloader_title\">İndirici</string>\n    <string name=\"download_notifier_title_error\">Hata</string>\n    <string name=\"download_notifier_unknown_error\">Bölüm, beklenmeyen hata sonucu indirilemedi</string>\n    <string name=\"download_notifier_text_only_wifi\">Kablosuz ağ bağlantısı yok</string>\n    <string name=\"download_notifier_no_network\">Ağ bağlantısı yok</string>\n    <string name=\"download_notifier_download_paused\">İndirmeler duraklatıldı</string>\n    <string name=\"channel_common\">Genel</string>\n    <string name=\"transition_finished\">Tamamlandı:</string>\n    <string name=\"transition_current\">Şimdiki:</string>\n    <string name=\"transition_next\">Sıradaki:</string>\n    <string name=\"transition_previous\">Önceki:</string>\n    <string name=\"transition_no_next\">Sonraki bölüm yok</string>\n    <string name=\"transition_no_previous\">Önceki bölüm yok</string>\n    <string name=\"transition_pages_loading\">Sayfalar yükleniyor…</string>\n    <string name=\"transition_pages_error\">Sayfalar yüklenemedi: %1$s</string>\n    <string name=\"pref_read_with_long_tap\">Uzun dokununca eylemleri göster</string>\n    <string name=\"action_open_in_web_view\">WebView ile aç</string>\n    <string name=\"pref_skip_read_chapters\">Okundu olarak işaretlenmiş bölümleri atla</string>\n    <string name=\"pref_color_filter_mode\">Renk filtresi karışım modu</string>\n    <string name=\"filter_mode_overlay\">Kaplama</string>\n    <string name=\"filter_mode_multiply\">Çoğalt</string>\n    <string name=\"filter_mode_screen\">Ekran</string>\n    <string name=\"filter_mode_lighten\">Soldurma / Açıklaştırma</string>\n    <string name=\"filter_mode_darken\">Yanma / Koyulaştırma</string>\n    <string name=\"label_help\">Yardım</string>\n    <string name=\"no_results_found\">Sonuç bulunmadı</string>\n    <string name=\"migration_selection_prompt\">Taşınacak bir kaynak seçin</string>\n    <string name=\"action_webview_back\">Geri</string>\n    <string name=\"action_webview_forward\">İleri</string>\n    <string name=\"action_webview_refresh\">Yenile</string>\n    <string name=\"pref_category_library\">Kitaplık</string>\n    <string name=\"ext_obsolete\">Geçersiz</string>\n    <string name=\"obsolete_extension_message\">Bu uzantı artık kullanılamıyor. Düzgün çalışmayabilir ve uygulamada sorunlara neden olabilir. Kaldırılması önerilir.</string>\n    <string name=\"pref_date_format\">Tarih biçimi</string>\n    <string name=\"pref_category_library_update\">Genel güncelleme</string>\n    <string name=\"logout_title\">%1$s \\'den çıkılsın mı?</string>\n    <string name=\"logout\">Çıkış yap</string>\n    <string name=\"logout_success\">Çıkış yaptınız</string>\n    <string name=\"paused\">Duraklatıldı</string>\n    <string name=\"label_more\">Daha Çok</string>\n    <string name=\"action_sort_latest_chapter\">Son bölüm</string>\n    <string name=\"action_view_chapters\">Bölümleri görüntüle</string>\n    <string name=\"action_cancel_all\">Tümünü iptal et</string>\n    <string name=\"theme_light\">Açık</string>\n    <string name=\"theme_dark\">Koyu</string>\n    <string name=\"theme_system\">Sistem</string>\n    <string name=\"pref_manage_notifications\">Bildirimleri yönet</string>\n    <string name=\"pref_category_security\">Güvenlik ve gizlilik</string>\n    <string name=\"lock_with_biometrics\">Kilit açma gerektir</string>\n    <string name=\"lock_when_idle\">Boştayken kilitle</string>\n    <string name=\"lock_always\">Her zaman</string>\n    <string name=\"lock_never\">Asla</string>\n    <string name=\"secure_screen\">Güvenli ekran</string>\n    <string name=\"ext_updates_pending\">Bekleyen güncellemeler</string>\n    <string name=\"pref_cutout_short\">Ekran kesimi bölgesinde içerik göster</string>\n    <string name=\"information_cloudflare_bypass_failure\">Cloudflare geçilemedi</string>\n    <string name=\"information_webview_outdated\">Daha iyi uyumluluk için lütfen WebView uygulamasını güncelleyin</string>\n    <string name=\"channel_new_chapters\">Bölüm güncellemeleri</string>\n    <string name=\"secure_screen_summary\">Güvenli ekran, uygulamalar arasında geçiş yaparken uygulama içeriğini gizler ve ekran görüntüsü alınmasını engeller</string>\n    <string name=\"pref_category_display\">Ekran</string>\n    <string name=\"notification_chapters_single\">Bölüm %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Bölüm %1$s ve %2$d daha</string>\n    <string name=\"notification_chapters_multiple\">Bölüm %1$s</string>\n    <string name=\"hide_notification_content\">Bildirim içeriğini gizle</string>\n    <string name=\"pref_disable_battery_optimization\">Pil iyileştirmesini devre dışı bırak</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Arka plan kitaplık güncellemelerine ve yedeklemelere yardım eder</string>\n    <string name=\"battery_optimization_disabled\">Pil iyileştirmesi zaten devre dışı</string>\n    <string name=\"email\">E-posta adresi</string>\n    <string name=\"pref_always_show_chapter_transition\">Bölüm geçişini her zaman göster</string>\n    <string name=\"action_menu\">Menü</string>\n    <string name=\"action_newest\">En yeni</string>\n    <string name=\"action_oldest\">En eski</string>\n    <string name=\"action_move_to_top\">En üste taşı</string>\n    <string name=\"action_move_to_bottom\">En alta taşı</string>\n    <string name=\"channel_ext_updates\">Uzantı güncellemeleri</string>\n    <string name=\"updating_library\">Kitaplık güncelleniyor</string>\n    <string name=\"pref_category_reading\">Okuma</string>\n    <string name=\"pref_skip_filtered_chapters\">Filtrelenmiş bölümleri atla</string>\n    <string name=\"label_sources\">Kaynaklar</string>\n    <string name=\"action_select_inverse\">Tersini seç</string>\n    <string name=\"vertical_plus_viewer\">Aralıklı uzun şerit</string>\n    <string name=\"pref_webtoon_side_padding\">Kenar boşluğu</string>\n    <string name=\"pinned_sources\">Sabitlenmiş</string>\n    <string name=\"action_unpin\">Sabitlemeyi kaldır</string>\n    <string name=\"action_pin\">Sabitle</string>\n    <string name=\"add_tracking\">İzleme ekle</string>\n    <string name=\"in_library\">Kitaplıkta</string>\n    <string name=\"add_to_library\">Kitaplığa ekle</string>\n    <string name=\"manga_info_collapse\">Daha az</string>\n    <string name=\"manga_info_expand\">Daha fazla</string>\n    <string name=\"website\">Web sitesi</string>\n    <string name=\"information_webview_required\">Uygulamanın çalışabilmesi için WebView gereklidir</string>\n    <string name=\"licenses\">Açık kaynak lisansları</string>\n    <string name=\"label_downloaded_only\">Yalnızca indirilen</string>\n    <string name=\"recent_manga_time\">Böl. %1$s - %2$s</string>\n    <string name=\"restoring_backup_error\">Yedek geri yüklenemedi</string>\n    <string name=\"creating_backup_error\">Yedekleme başarısız</string>\n    <string name=\"restoring_backup_canceled\">Geri yükleme iptal edildi</string>\n    <string name=\"restore_in_progress\">Geri yükleme zaten devam ediyor</string>\n    <string name=\"backup_in_progress\">Yedekleme zaten devam ediyor</string>\n    <string name=\"check_for_updates\">Güncellemeleri kontrol et</string>\n    <string name=\"last_used_source\">Son kullanılan</string>\n    <string name=\"local_source_help_guide\">Yerel kaynak kılavuzu</string>\n    <string name=\"restore_duration\">%1$02d dk, %2$02d sn</string>\n    <string name=\"downloaded_only_summary\">Kitaplığınızdaki tüm girdileri filtreler</string>\n    <string name=\"gray_background\">Gri</string>\n    <string name=\"viewer\">Okuma modu</string>\n    <string name=\"pref_category_for_this_series\">Bu seri için</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Cihaz ayarları açılamadı</string>\n    <string name=\"tracking_info\">Bölüm ilerlemesin harici izleyici hizmetlerine güncellemek için tek yönlü eşitleme. Her girdinin izleme düğmesinden izlemeyi ayarlayın.</string>\n    <string name=\"pref_refresh_library_covers\">Kitaplıktakilerin kapaklarını yenile</string>\n    <string name=\"sort_by_upload_date\">Yükleme tarihine göre</string>\n    <string name=\"label_data\">Veri</string>\n    <string name=\"backup_restore_missing_sources\">Eksik kaynaklar:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Yedek, bir kitaplık girdisi içermiyor.</string>\n    <string name=\"invalid_backup_file\">Geçersiz yedekleme dosyası:</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Kitaplığı güncellerken yeni kapağı ve ayrıntıları kontrol et</string>\n    <string name=\"pref_library_update_refresh_metadata\">Üst veriyi otomatik yenile</string>\n    <string name=\"action_migrate\">Taşı</string>\n    <string name=\"action_display_comfortable_grid\">Rahat ızgara</string>\n    <string name=\"tabs_header\">Sekmeler</string>\n    <string name=\"action_display_show_tabs\">Kategori sekmelerini göster</string>\n    <string name=\"page_list_empty_error\">Sayfa bulunamadı</string>\n    <string name=\"action_disable_all\">Tümünü devre dışı bırak</string>\n    <string name=\"action_enable_all\">Tümünü etkinleştir</string>\n    <string name=\"pref_show_reading_mode_summary\">Okuyucu açılınca kısaca okuma modunu göster</string>\n    <string name=\"pref_show_reading_mode\">Okuma modunu göster</string>\n    <string name=\"action_start\">Başlat</string>\n    <string name=\"loader_not_implemented_error\">Kaynak bulunamadı</string>\n    <string name=\"action_disable\">Devre dışı bırak</string>\n    <string name=\"requires_app_restart\">Etkili olması için uygulamanın yeniden başlatılmasını gerektirir</string>\n    <string name=\"label_network\">Ağ</string>\n    <string name=\"tapping_inverted_none\">Hiçbiri</string>\n    <string name=\"pref_read_with_tapping_inverted\">Dokunma bölgelerini ters çevir</string>\n    <string name=\"tapping_inverted_both\">İkisi de</string>\n    <string name=\"tapping_inverted_vertical\">Dikey</string>\n    <string name=\"tapping_inverted_horizontal\">Yatay</string>\n    <string name=\"unknown_status\">Bilinmeyen durum</string>\n    <string name=\"unknown_author\">Bilinmeyen yazar</string>\n    <string name=\"updated_version\">v%1$s sürümüne güncellendi</string>\n    <string name=\"whats_new\">Yenilikler</string>\n    <string name=\"download_insufficient_space\">Depolama alanı az olduğu için bölümler indirilemedi</string>\n    <string name=\"action_sort_date_added\">Eklendiği tarih</string>\n    <string name=\"action_global_search_query\">\\\"%1$s\\\" için genel arama</string>\n    <string name=\"pref_category_reading_mode\">Okuma modu</string>\n    <string name=\"pref_category_theme\">Tema</string>\n    <string name=\"no_pinned_sources\">Sabitlenmiş kaynağınız yok</string>\n    <string name=\"channel_complete\">Tamamlandı</string>\n    <string name=\"channel_progress\">İlerleme</string>\n    <string name=\"channel_errors\">Hatalar</string>\n    <string name=\"backup_restore_missing_trackers\">Giriş yapılmamış izleyiciler:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Yer imi eklenmiş bölümleri silmeye izin ver</string>\n    <string name=\"pref_category_delete_chapters\">Bölümleri sil</string>\n    <string name=\"ext_nsfw_warning\">Bu uzantıdaki kaynaklar yetişkin içerik (18+) içerebilir</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Bu, resmî olmayan veya yanlış işaretlenmiş uzantıların uygulama içinde yetişkin içeriği (18+) göstermesini engellemez.</string>\n    <string name=\"no_chapters_error\">Bölüm bulunamadı</string>\n    <string name=\"chapter_settings_updated\">Varsayılan bölüm ayarları güncellendi</string>\n    <string name=\"set_chapter_settings_as_default\">Varsayılan olarak ayarla</string>\n    <string name=\"also_set_chapter_settings_for_library\">Ayrıca kitaplığımdaki tüm girdilere uygula</string>\n    <string name=\"confirm_set_chapter_settings\">Bu ayarları varsayılan olarak kaydetmek istediğinizden emin misiniz?</string>\n    <string name=\"chapter_settings\">Bölüm ayarları</string>\n    <string name=\"share_page_info\">%1$s: %2$s, sayfa %3$d</string>\n    <string name=\"action_search_settings\">Ayarlarda ara</string>\n    <string name=\"downloaded_chapters\">İndirilen bölümler</string>\n    <string name=\"manga_from_library\">Kitaplıktan</string>\n    <string name=\"pref_incognito_mode_summary\">Okuma geçmişini duraklatır</string>\n    <string name=\"pref_incognito_mode\">Gizli mod</string>\n    <string name=\"pref_clear_history\">Geçmişi temizle</string>\n    <string name=\"clear_history_confirmation\">Emin misiniz? Tüm geçmiş kaybolacak.</string>\n    <string name=\"clear_history_completed\">Geçmiş temizlendi</string>\n    <string name=\"spen_next_page\">Sonraki sayfa</string>\n    <string name=\"spen_previous_page\">Önceki sayfa</string>\n    <string name=\"migration_help_guide\">Kaynak taşıma kılavuzu</string>\n    <string name=\"pref_category_nsfw_content\">Yetişkin içerik (18+) kaynakları</string>\n    <string name=\"pref_show_nsfw_source\">Kaynaklar ve uzantılar listelerinde göster</string>\n    <string name=\"file_picker_error\">Dosya seçme uygulaması bulunamadı</string>\n    <string name=\"myanimelist_relogin\">Lütfen MAL\\'a tekrar giriş yapın</string>\n    <string name=\"pref_viewer_nav\">Dokunma bölgeleri</string>\n    <string name=\"edge_nav\">Kenar</string>\n    <string name=\"kindlish_nav\">Kindle gibi</string>\n    <string name=\"l_nav\">L şeklinde</string>\n    <string name=\"track_finished_reading_date\">Bitirme tarihi</string>\n    <string name=\"track_started_reading_date\">Başlama tarihi</string>\n    <string name=\"pref_dump_crash_logs_summary\">Geliştiricilerle paylaşmak için hata günlüklerini bir dosyaya kaydeder</string>\n    <string name=\"pref_dump_crash_logs\">Çökme günlüklerini paylaş</string>\n    <string name=\"action_desc\">Azalan</string>\n    <string name=\"action_asc\">Artan</string>\n    <string name=\"action_order_by_chapter_number\">Bölüm numarasına göre</string>\n    <string name=\"action_order_by_upload_date\">Yükleme tarihine göre</string>\n    <string name=\"action_filter_tracked\">İzleniyor</string>\n    <string name=\"action_display_show_number_of_items\">Öge sayısını göster</string>\n    <string name=\"right_and_left_nav\">Sağ ve Sol</string>\n    <string name=\"pref_dual_page_split\">Geniş sayfaları böl</string>\n    <string name=\"pref_dual_page_invert_summary\">Bölünmüş geniş sayfaların sırası okuma yönüyle uyuşmuyorsa</string>\n    <string name=\"pref_dual_page_invert\">Bölünmüş sayfa sırasını ters çevir</string>\n    <string name=\"backup_restore_content_full\">Daha sonra kullanmak için eksik uzantıları yüklemeniz ve izleyici hizmetlerinde oturum açmanız gerekebilir.</string>\n    <string name=\"nav_zone_right\">Sağ</string>\n    <string name=\"nav_zone_left\">Sol</string>\n    <string name=\"nav_zone_next\">Sonraki</string>\n    <string name=\"nav_zone_prev\">Önceki</string>\n    <string name=\"pref_show_navigation_mode_summary\">Okuyucu açıldığında kısaca göster</string>\n    <string name=\"pref_show_navigation_mode\">Dokunma bölgelerini göster</string>\n    <string name=\"pref_dns_over_https\">HTTPS üzerinden DNS (DoH)</string>\n    <string name=\"exclude\">Hariç tut: %s</string>\n    <string name=\"include\">Dahil et: %s</string>\n    <string name=\"none\">Hiçbiri</string>\n    <string name=\"action_sort_chapter_fetch_date\">Bölümün alındığı tarih</string>\n    <string name=\"pref_download_new_categories_details\">Hariç tutulan kategorilerdeki girdiler, dahil edilen kategorilerde olsa bile indirilmeyecektir.</string>\n    <string name=\"pref_category_auto_download\">Otomatik indir</string>\n    <string name=\"pref_library_update_categories_details\">Hariç tutulan kategorilerdeki girdiler, dahil edilen kategorilerde de olsa bile güncellenmeyecektir.</string>\n    <string name=\"action_show_errors\">Ayrıntıları görmek için dokun</string>\n    <string name=\"update_check_eol\">Bu Android sürümü artık desteklenmiyor</string>\n    <string name=\"clipboard_copy_error\">Panoya kopyalanamadı</string>\n    <string name=\"rotation_landscape\">Manzara</string>\n    <string name=\"rotation_portrait\">Portre</string>\n    <string name=\"rotation_type\">Yön</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Girdilerin başlığına göre klasör oluşturur</string>\n    <string name=\"pref_create_folder_per_manga\">Sayfaları ayrı klasörlere kaydet</string>\n    <string name=\"pref_reader_actions\">Eylemler</string>\n    <string name=\"pref_grayscale\">Gri tonlama</string>\n    <string name=\"notification_incognito_text\">Gizli modu devre dışı bırak</string>\n    <string name=\"automatic_background\">Otomatik</string>\n    <string name=\"cancel_all_for_series\">Bu seri için tümünü iptal et</string>\n    <string name=\"error_no_match\">Eşleşme bulunamadı</string>\n    <string name=\"source_unsupported\">Kaynak desteklenmiyor</string>\n    <string name=\"unread\">Okunmamış</string>\n    <string name=\"date\">Tarih</string>\n    <string name=\"local_filter_order_by\">Sıralama ölçütü</string>\n    <string name=\"local_invalid_format\">Geçersiz bölüm biçimi</string>\n    <string name=\"chapter_not_found\">Bölüm bulunamadı</string>\n    <string name=\"restrictions\">Kısıtlamalar: %s</string>\n    <string name=\"action_display_local_badge\">Yerel kaynak</string>\n    <string name=\"on\">Açık</string>\n    <string name=\"off\">Kapalı</string>\n    <string name=\"error_sharing_cover\">Kapak paylaşılamadı</string>\n    <string name=\"error_saving_cover\">Kapak kaydedilemedi</string>\n    <string name=\"cover_saved\">Kapak kaydedildi</string>\n    <string name=\"manga_cover\">Kapak</string>\n    <string name=\"categorized_display_settings\">Her kategori için ayrı sıralama ayarları</string>\n    <string name=\"tracking_guide\">İzleyici kılavuzu</string>\n    <string name=\"information_empty_category_dialog\">Henüz bir kategoriniz yok.</string>\n    <string name=\"action_start_downloading_now\">Şimdi indirmeye başla</string>\n    <string name=\"about_dont_kill_my_app\">Bazı üreticilerin arka plan hizmetlerini durduran ek uygulama kısıtlamaları vardır. Bu web sitesi bu durumun nasıl düzeltileceği hakkında daha fazla bilgi verir.</string>\n    <string name=\"restore_miui_warning\">MIUI iyileştirmesi devre dışıysa yedekleme/geri yükleme düzgün çalışmayabilir.</string>\n    <string name=\"enhanced_tracking_info\">Belirli kaynaklar için gelişmiş özellikler sağlar. Girdiler, kitaplığınıza eklendiğinde otomatik olarak izlenir.</string>\n    <string name=\"enhanced_services\">Gelişmiş izleyiciler</string>\n    <string name=\"pref_dark_theme_pure_black\">Tamamen karanlık koyu mod</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"theme_yinyang\">Yin &amp; Yang</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">Çilekli Kokteyl</string>\n    <string name=\"theme_midnightdusk\">Alacakaranlık</string>\n    <string name=\"theme_greenapple\">Yeşil Elma</string>\n    <string name=\"theme_monet\">Dinamik</string>\n    <string name=\"pref_app_theme\">Uygulama teması</string>\n    <string name=\"label_background_activity\">Arka plan etkinliği</string>\n    <string name=\"pref_lowest\">En düşük</string>\n    <string name=\"pref_low\">Düşük</string>\n    <string name=\"pref_high\">Yüksek</string>\n    <string name=\"pref_highest\">En yüksek</string>\n    <string name=\"pref_hide_threshold\">Kaydırmada menüyü gizleme hassasiyeti</string>\n    <string name=\"pref_inverted_colors\">Ters Çevrilmiş</string>\n    <string name=\"relative_time_today\">Bugün</string>\n    <string name=\"theme_tealturquoise\">Ördekbaşı &amp; Turkuaz</string>\n    <string name=\"confirm_lock_change\">Değişikliği onaylamak için kimlik doğrula</string>\n    <string name=\"label_default\">Varsayılan</string>\n    <string name=\"pref_category_appearance\">Görünüm</string>\n    <string name=\"action_track\">İzle</string>\n    <string name=\"getting_started_guide\">Başlangıç kılavuzu</string>\n    <string name=\"pref_tablet_ui_mode\">Tablet arayüzü</string>\n    <string name=\"pref_remove_exclude_categories\">Hariç tutulan kategoriler</string>\n    <string name=\"help_translate\">Çeviriye yardım edin</string>\n    <string name=\"ext_app_info\">Uygulama bilgisi</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Uzantı yükleyicisi olarak Shizuku\\'yu kullanmak için Shizuku\\'yu yükleyin ve başlatın.</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku çalışmıyor</string>\n    <string name=\"ext_installer_legacy\">Eski</string>\n    <string name=\"ext_installer_pref\">Yükleyici</string>\n    <string name=\"ext_install_service_notif\">Uzantı yükleniyor…</string>\n    <string name=\"action_sort_count\">Toplam girdi</string>\n    <string name=\"label_warning\">Uyarı</string>\n    <string name=\"action_display_language_badge\">Dil</string>\n    <string name=\"backup_info\">Yedeklerin kopyalarını başka yerlerde de tutmalısınız. Yedekler, şifreler dahil olmak üzere hassas verileri içerebilirler; paylaşıyorsanız dikkat edin.</string>\n    <string name=\"notification_size_warning\">Büyük güncellemeler kaynaklara zarar verir ve daha yavaş güncellemelere ve ayrıca pil kullanımının artmasına neden olabilir. Daha fazla bilgi için dokunun.</string>\n    <string name=\"pref_verbose_logging\">Ayrıntılı günlük kaydı</string>\n    <string name=\"pref_verbose_logging_summary\">Ayrıntılı günlükleri sistem günlüğüne yaz (uygulama performansını düşürür)</string>\n    <string name=\"connected_to_wifi\">Yalnızca kablosuz ağda</string>\n    <string name=\"download_queue_size_warning\">Uyarı: Büyük toplu indirmeler kaynakların yavaşlamasına ve/veya Mihon\\'u engellemesine neden olabilir. Daha fazla bilgi için dokunun.</string>\n    <string name=\"update_72hour\">3 günde bir</string>\n    <string name=\"ext_update_all\">Tümünü güncelle</string>\n    <string name=\"channel_app_updates\">Uygulama güncellemeleri</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Uygulama başlatıldığında bölüm önbelleğini temizle</string>\n    <string name=\"clear_database_source_item_count\">Veri tabanında %1$d kitaplık dışı girdi</string>\n    <string name=\"database_clean\">Temizlenecek bir şey yok</string>\n    <string name=\"extension_api_error\">Kullanılabilir uzantılar alınamadı</string>\n    <string name=\"save_chapter_as_cbz\">CBZ arşivi olarak kaydet</string>\n    <string name=\"publishing_finished\">Yayımı tamamlandı</string>\n    <string name=\"privacy_policy\">Gizlilik politikası</string>\n    <string name=\"cancelled\">İptal edildi</string>\n    <string name=\"on_hiatus\">Molada</string>\n    <string name=\"action_show_manga\">Girdiyi göster</string>\n    <string name=\"library_errors_help\">Kitaplık güncelleme hatalarının nasıl düzeltileceği konusunda yardım için bkz. %1$s</string>\n    <string name=\"action_display_cover_only_grid\">Izgara (Yalnızca kapak)</string>\n    <string name=\"pref_update_only_completely_read\">Okunmamış bölümü olan girdileri atla</string>\n    <string name=\"pref_update_only_started\">Başlanmamış girdileri atla</string>\n    <string name=\"skipped_reason_completed\">Seri tamamlandığı için atlandı</string>\n    <string name=\"skipped_reason_not_caught_up\">Okunmamış bölümler olduğu için atlandı</string>\n    <string name=\"skipped_reason_not_started\">Hiçbir bölüm okunmadığı için atlandı</string>\n    <string name=\"pref_navigate_pan\">Geniş görselleri kaydır</string>\n    <string name=\"pref_landscape_zoom\">Geniş görsellere otomatik yakınlaştır</string>\n    <string name=\"notification_update_error\">%1$d güncelleme başarısız oldu</string>\n    <string name=\"learn_more\">Daha fazla bilgi için dokunun</string>\n    <string name=\"rotation_reverse_portrait\">Ters portre</string>\n    <string name=\"action_move_to_top_all_for_series\">Seriyi en üste taşı</string>\n    <string name=\"disabled_nav\">Devre dışı</string>\n    <string name=\"error_saving_picture\">Görsel kaydedilirken hata oluştu</string>\n    <string name=\"empty_backup_error\">Yedeklenecek kitaplık girdisi yok</string>\n    <string name=\"update_check_open\">GitHub\\'da aç</string>\n    <string name=\"webview_data_deleted\">WebView verileri temizlendi</string>\n    <string name=\"pref_clear_webview_data\">WebView verilerini temizle</string>\n    <string name=\"action_close\">Kapat</string>\n    <string name=\"source_filter_empty_screen\">Yüklü kaynak bulunamadı</string>\n    <string name=\"source_empty_screen\">Kaynak bulunamadı</string>\n    <string name=\"action_sort_last_manga_update\">Son güncelleme kontrolü</string>\n    <string name=\"action_sort_unread_count\">Okunmamış sayısı</string>\n    <string name=\"split_tall_images_summary\">Okuyucu performansını iyileştirir</string>\n    <string name=\"download_notifier_split_page_not_found\">Bölünürken %d. sayfa bulunamadı</string>\n    <string name=\"download_notifier_split_page_path_not_found\">%d. sayfa için dosya yolu bulunamadı</string>\n    <string name=\"pref_reset_viewer_flags\">Her seri için okuyucu ayarlarını sıfırla</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Tüm serilerin okuma modunu ve yönünü sıfırlar</string>\n    <string name=\"pref_reset_viewer_flags_success\">Tüm okuyucu ayarları sıfırlandı</string>\n    <string name=\"pref_reset_viewer_flags_error\">Okuyucu ayarları sıfırlanamadı</string>\n    <string name=\"empty_screen\">Peki, bu garip</string>\n    <string name=\"ext_info_version\">Sürüm</string>\n    <string name=\"ext_info_language\">Dil</string>\n    <string name=\"ext_info_age_rating\">Yaş derecelendirmesi</string>\n    <string name=\"wish_list\">İstek Listesi</string>\n    <string name=\"on_hold_list\">Beklemede Listesi</string>\n    <string name=\"unfinished_list\">Bitirilmemiş Listesi</string>\n    <string name=\"complete_list\">Tamamlanmış Listesi</string>\n    <string name=\"reading_list\">Okuma Listesi</string>\n    <string name=\"network_not_metered\">Yalnızca tarifesiz ağda</string>\n    <string name=\"cant_open_last_read_chapter\">Son okunan bölüm açılamıyor</string>\n    <string name=\"custom_cover\">Özel kapak</string>\n    <string name=\"not_installed\">Yüklü değil</string>\n    <string name=\"pref_app_language\">Uygulama dili</string>\n    <string name=\"description_placeholder\">Açıklama yok</string>\n    <string name=\"theme_lavender\">Lavanta</string>\n    <string name=\"delete_category\">Kategoriyi sil</string>\n    <string name=\"delete_category_confirmation\">\\\"%s\\\" kategorisini silmek istiyor musunuz?</string>\n    <string name=\"internal_error\">İç Hata: Daha çok bilgi için çökme günlüklerine bakın</string>\n    <string name=\"pref_user_agent_string\">Varsayılan kullanıcı aracısı</string>\n    <string name=\"pref_reset_user_agent_string\">Varsayılan kullanıcı aracısını sıfırla</string>\n    <string name=\"action_remove_everything\">Her şeyi kaldır</string>\n    <string name=\"appwidget_unavailable_locked\">Uygulama kilidi etkinleştirildiğinde widget kullanılamıyor</string>\n    <string name=\"appwidget_updates_description\">Son güncellenen kitaplık girdilerinizi görün</string>\n    <string name=\"update_already_running\">Bir güncelleme zaten çalışıyor</string>\n    <string name=\"error_user_agent_string_blank\">Kullanıcı aracısı boş olamaz</string>\n    <string name=\"theme_tidalwave\">Gelgit Dalgası</string>\n    <string name=\"download_ahead\">Önceden indir</string>\n    <string name=\"auto_download_while_reading\">Okurken otomatik indir</string>\n    <string name=\"download_ahead_info\">Yalnızca geçerli bölüm ile bir sonraki bölüm zaten indirildiyse çalışır.</string>\n    <string name=\"are_you_sure\">Emin misiniz?</string>\n    <string name=\"remove_manga\">\\\"%s\\\" girdisini kitaplığınızdan kaldırmak üzeresiniz</string>\n    <string name=\"updates_last_update_info\">Son kitaplık güncelleme: %s</string>\n    <string name=\"multi_lang\">Çoklu</string>\n    <string name=\"popular\">Popüler</string>\n    <string name=\"missing_storage_permission\">Depolama izinleri verilmedi</string>\n    <string name=\"skipped_reason_not_always_update\">Seri güncelleme gerektirmediği için atlandı</string>\n    <string name=\"action_search_hint\">Ara…</string>\n    <string name=\"pref_backup_summary\">Elle ve otomatik yedeklemeler, depolama alanı</string>\n    <string name=\"pref_security_summary\">Uygulama kilidi, güvenli ekran</string>\n    <string name=\"pref_advanced_summary\">Çökme günlükleri dökümü, pil iyileştirmeleri</string>\n    <string name=\"pref_library_summary\">Kategoriler, genel güncelleme, kaydırma kontrolleri</string>\n    <string name=\"pref_browse_summary\">Kaynaklar, uzantılar, genel arama</string>\n    <string name=\"pref_downloads_summary\">Otomatik indirme, önceden indirme</string>\n    <string name=\"pref_reader_summary\">Okuma modu, görüntüleme, gezinme</string>\n    <string name=\"pref_appearance_summary\">Tema, tarih ve saat biçimi</string>\n    <string name=\"pref_tracking_summary\">Tek yönlü ilerleme eşitlemesi, gelişmiş eşitleme</string>\n    <string name=\"crash_screen_restart_application\">Uygulamayı yeniden başlat</string>\n    <string name=\"crash_screen_title\">Tüh!</string>\n    <string name=\"crash_screen_description\">%s beklenmeyen bir hatayla karşılaştı. Çökme günlüklerini Discord\\'daki destek kanalımızda paylaşmanızı öneririz.</string>\n    <string name=\"unknown_title\">Bilinmeyen başlık</string>\n    <string name=\"invalid_location\">Geçersiz konum: %s</string>\n    <string name=\"error_user_agent_string_invalid\">Geçersiz kullanıcı aracısı</string>\n    <string name=\"updates_last_update_info_just_now\">Şimdi</string>\n    <string name=\"download_notifier_cache_renewal\">İndirilenler kontrol ediliyor</string>\n    <string name=\"action_open_random_manga\">Rastgele girdi aç</string>\n    <string name=\"information_no_entries_found\">Bu kategoride girdi bulunamadı</string>\n    <string name=\"fdroid_warning\">F-Droid derlemeleri desteklenmemektedir.\n\\nDaha fazla bilgi için dokunun.</string>\n    <string name=\"action_display_show_continue_reading_button\">Okumaya devam et butonu</string>\n    <string name=\"track_remove_date_conf_title\">Tarih kaldırılsın mı?</string>\n    <string name=\"track_remove_start_date_conf_text\">Bu, daha önce seçtiğiniz başlangıç tarihini şuradan kaldıracak: %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Bu, daha önce seçtiğiniz bitirme tarihini şuradan kaldıracak: %s</string>\n    <string name=\"pref_invalidate_download_cache\">İndirmeleri tekrar kontrol et</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Uygulamayı indirilen bölümleri yeniden kontrol etmeye zorla</string>\n    <string name=\"label_stats\">İstatistikler</string>\n    <string name=\"label_started\">Başlandı</string>\n    <string name=\"label_downloaded\">İndirilen</string>\n    <string name=\"label_total_chapters\">Toplam</string>\n    <string name=\"label_used\">Kullanılan</string>\n    <string name=\"not_applicable\">Yok</string>\n    <string name=\"day_short\">%dg</string>\n    <string name=\"hour_short\">%dsa</string>\n    <string name=\"label_local\">Yerel</string>\n    <string name=\"label_completed_titles\">Tamamlanan girdiler</string>\n    <string name=\"label_overview_section\">Genel görünüm</string>\n    <string name=\"label_tracker_section\">İzleyiciler</string>\n    <string name=\"label_titles_section\">Girdiler</string>\n    <string name=\"label_read_chapters\">Okundu</string>\n    <string name=\"label_read_duration\">Okuma süresi</string>\n    <string name=\"label_titles_in_global_update\">Genel güncellemede</string>\n    <string name=\"label_tracked_titles\">İzlenen girdiler</string>\n    <string name=\"label_mean_score\">Ortalama puan</string>\n    <string name=\"minute_short\">%ddak</string>\n    <string name=\"seconds_short\">%dsn</string>\n    <string name=\"action_not_now\">Şimdi değil</string>\n    <string name=\"information_no_manga_category\">Kategori boş</string>\n    <string name=\"pref_library_update_show_tab_badge\">Güncellemeler simgesinde okunmayan sayısını göster</string>\n    <string name=\"copied_to_clipboard_plain\">Panoya kopyalandı</string>\n    <string name=\"enhanced_services_not_installed\">Kullanılabilir ancak kaynak yüklü değil: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Yinelenen bölümleri atla</string>\n    <string name=\"confirm_add_duplicate_manga\">Kitaplığınızda aynı ada sahip bir girdiniz var.\n\\n\n\\nYine de devam etmek istiyor musunuz?</string>\n    <string name=\"track_error\">%1$s hatası: %2$s</string>\n    <string name=\"information_required_plain\">*gerekli</string>\n    <string name=\"pref_hide_in_library_items\">Zaten kitaplıkta bulunan girdileri gizle</string>\n    <string name=\"action_copy_to_clipboard\">Panoya kopyala</string>\n    <string name=\"action_update_category\">Kategoriyi güncelle</string>\n    <string name=\"split_tall_images\">Uzun görselleri böl</string>\n    <string name=\"overlay_header\">Üstünde göster</string>\n    <string name=\"pref_page_rotate\">Geniş sayfaları sığdırmak için döndür</string>\n    <string name=\"pref_page_rotate_invert\">Döndürülen geniş sayfaların yönünü ters çevir</string>\n    <string name=\"pref_debug_info\">Hata ayıklama bilgisi</string>\n    <string name=\"pref_chapter_swipe_end\">Bölümü sağa kaydırma</string>\n    <string name=\"pref_chapter_swipe_start\">Bölümü sola kaydırma</string>\n    <string name=\"pref_double_tap_zoom\">Yakınlaştırmak için iki kez dokun</string>\n    <string name=\"action_set_interval\">Sıklığı ayarla</string>\n    <string name=\"action_filter_interval_custom\">Özel güncelleme sıklığı</string>\n    <string name=\"intervals_header\">Zaman aralıkları</string>\n    <string name=\"action_sort_next_updated\">Sonraki beklenen güncelleme</string>\n    <string name=\"pref_update_only_in_release_period\">Bir sonraki yayınlama zamanını tahmin et</string>\n    <string name=\"action_ok\">TAMAM</string>\n    <string name=\"manga_display_interval_title\">Şu sıklıkla tahmin et:</string>\n    <string name=\"track_delete_title\">%s izlemesi kaldırılsın mı?</string>\n    <string name=\"skipped_reason_not_in_release_period\">Bugün bir yayın beklenmedigi için atlandı</string>\n    <string name=\"track_delete_text\">Bu, izlemeyi yerel olarak kaldıracak.</string>\n    <string name=\"track_delete_remote_text\">Ayrıca şuradan da kaldır: %s</string>\n    <string name=\"manga_display_modified_interval_title\">Şu sıklıkla güncellemeye ayarla:</string>\n    <string name=\"has_results\">Sonuç var</string>\n    <string name=\"delete_downloaded\">İndirilenleri sil</string>\n    <string name=\"create_backup_file_error\">Yedekleme dosyası oluşturulamadı</string>\n    <string name=\"download_cache_invalidated\">İndirilenler dizini geçersiz kılındı</string>\n    <string name=\"information_cloudflare_help\">Cloudflare ile ilgili yardım için buraya dokunun</string>\n    <string name=\"exception_unknown_host\">%s verisine erişilemedi</string>\n    <string name=\"track_activity_name\">İzleyici girişi</string>\n    <string name=\"library_sync_complete\">Kitaplık eşitlemesi tamamlandı</string>\n    <string name=\"exception_http\">HTTP %d, siteyi WebView\\'de kontrol et</string>\n    <string name=\"exception_offline\">Ağ bağlantısı yok</string>\n    <string name=\"syncing_library\">Kitaplık eşitleniyor</string>\n    <string name=\"unlock_app_title\">%s Kilidini Aç</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Seriyi en alta taşı</string>\n    <string name=\"notification_updating_progress\">Kitaplık güncelleniyor… (%s)</string>\n    <string name=\"file_null_uri_error\">Dosya seçilmedi</string>\n    <string name=\"source_settings\">Kaynak ayarları</string>\n    <string name=\"app_settings\">Uygulama ayarları</string>\n    <string name=\"pref_relative_format\">Göreli zaman damgaları</string>\n    <string name=\"pref_relative_format_summary\">\\\"%2$s\\\" yerine \\\"%1$s\\\"</string>\n    <string name=\"relative_time_span_never\">Asla</string>\n    <string name=\"pref_flash_page_summ\">E-ink ekranlarda gölgelenmeyi azaltır</string>\n    <string name=\"action_apply\">Uygula</string>\n    <string name=\"action_revert_to_default\">Varsayılana dön</string>\n    <string name=\"last_auto_backup_info\">Son otomatik yedekleme: %s</string>\n    <string name=\"no_scanlators_found\">Çeviren bulunamadı</string>\n    <string name=\"scanlator\">Çeviren</string>\n    <string name=\"pref_flash_page\">Sayfa değişiminde ışık çak</string>\n    <string name=\"pref_storage_usage\">Depolama kullanımı</string>\n    <string name=\"action_sort_tracker_score\">İzleyici puanı</string>\n    <string name=\"label_data_storage\">Veri ve depolama</string>\n    <string name=\"exclude_scanlators\">Çevirenleri hariç tut</string>\n    <string name=\"action_create\">Oluştur</string>\n    <string name=\"not_selected\">Seçilmedi</string>\n    <string name=\"action_menu_overflow_description\">Daha fazla seçenek</string>\n    <string name=\"selected\">Seçili</string>\n    <string name=\"pref_storage_location\">Depolama konumu</string>\n    <string name=\"pref_storage_location_info\">Otomatik yedeklemeler, bölüm indirmeleri ve yerel kaynak için kullanılır.</string>\n    <string name=\"action_bar_up_description\">Yukarı git</string>\n    <string name=\"onboarding_storage_action_select\">Klasör seç</string>\n    <string name=\"pref_onboarding_guide\">Başlangıç rehberi</string>\n    <string name=\"onboarding_guides_new_user\">%s\\'da yeni misiniz? Başlangıç rehberine göz atmanızı tavsiye ederiz.</string>\n    <string name=\"onboarding_action_finish\">Başlayın</string>\n    <string name=\"onboarding_storage_selection_required\">Bir klasör seçilmelidir</string>\n    <string name=\"onboarding_heading\">Hoş geldiniz!</string>\n    <string name=\"onboarding_guides_returning_user\">%s\\'u yeniden mi yüklüyorsunuz?</string>\n    <string name=\"onboarding_action_skip\">Atla</string>\n    <string name=\"onboarding_action_next\">Sonraki</string>\n    <string name=\"onboarding_description\">Hadi bazı şeyleri ayarlayalım. Bunları daha sonra ayarlardan da değiştirebilirsiniz.</string>\n    <string name=\"no_location_set\">Depolama konumu ayarlanmadı</string>\n    <string name=\"onboarding_storage_info\">%1$s\\'un bölüm indirmelerini, yedeklemeleri ve daha fazlasını kaydedeceği bir klasör seçin.\n\\n\n\\nYalnızca buna ait bir klasör tavsiye edilir.\n\\n\n\\nSeçilen klasör: %2$s</string>\n    <string name=\"onboarding_permission_notifications\">Bildirim izni</string>\n    <string name=\"onboarding_permission_install_apps\">Uygulama yükleme izni</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Uzun süren kitaplık güncellemelerinin, indirmelerin, yedeklemelerin ve geri yüklemelerinin kesintiye uğramasını önleyin.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Arka planda pil kullanımı</string>\n    <string name=\"onboarding_permission_install_apps_description\">Kaynak uzantılarını yüklemek için.</string>\n    <string name=\"onboarding_permission_notifications_description\">Kitaplık güncellemeleri ve daha fazlası için bildirim alın.</string>\n    <string name=\"onboarding_permission_action_grant\">İzin Ver</string>\n    <string name=\"available_disk_space_info\">Kullanılabilir: %1$s / Toplam: %2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">Uzantıları yüklemek için izin gerekli. İzin vermek için buraya dokunun.</string>\n    <string name=\"private_settings\">Hassas ayarları dahil et (örn. izleyici oturum açma bilgileri)</string>\n    <string name=\"manga_interval_expected_update\">Sonraki bölümlerin %1$s içinde yayınlanacağı tahmin ediliyor, her %2$s içinde bir kontrol ediliyor.</string>\n    <string name=\"invalid_backup_file_error\">Tüm hata:</string>\n    <string name=\"information_empty_repos\">Hiç depo ayarlamadınız.</string>\n    <string name=\"onboarding_storage_help_action\">Depolama kılavuzu</string>\n    <string name=\"action_add_repo\">Depo ekle</string>\n    <string name=\"label_add_repo_input\">Depo bağlantısı</string>\n    <string name=\"action_add_repo_message\">Mihon\\'a ek depolar ekleyin. Bu, \\\"index.min.json\\\" ile biten bir bağlantı olmalıdır.</string>\n    <string name=\"error_repo_exists\">Bu depo zaten var!</string>\n    <string name=\"action_delete_repo\">Depoyu sil</string>\n    <string name=\"invalid_repo_name\">Geçersiz depo bağlantısı</string>\n    <string name=\"delete_repo_confirmation\">\\\"%s\\\" deposunu silmek istiyor musunuz?</string>\n    <string name=\"manga_interval_custom_amount\">Özel güncelleme sıklığı:</string>\n    <string name=\"onboarding_storage_help_info\">Eski bir sürümden güncelleme yapıyorsunuz ve neyi seçeceğinizden emin değil misiniz? Daha fazla bilgi için depolama kılavuzuna bakın.</string>\n    <string name=\"pref_library_update_smart_update\">Akıllı güncelleme</string>\n    <string name=\"label_extension_repos\">Uzantı depoları</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"ext_revoke_trust\">Güvenilmiş bilinmeyen uzantıları geri al</string>\n    <string name=\"manga_interval_expected_update_soon\">Yakında</string>\n    <string name=\"action_open_repo\">Açık kaynaklı depo</string>\n    <string name=\"action_copy_link\">Bağlantıyı kopyala</string>\n    <string name=\"pref_flash_with\">Işık rengi</string>\n    <string name=\"pref_flash_style_black\">Siyah</string>\n    <string name=\"pref_flash_style_white_black\">Beyaz ve Siyah</string>\n    <string name=\"pref_flash_style_white\">Beyaz</string>\n    <string name=\"pref_flash_duration\">Işık çakma süresi</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Işık çakma aralığı</string>\n    <string name=\"pref_display_profile\">Özel görünüm profili</string>\n    <string name=\"action_replace_repo_message\">%1$s deposunun İmzalama Anahtarı Parmak İzi %2$s deposuyla aynı.\n\\nEğer böyle olması gerekiyorsa %2$s ile değiştirilecek. Aksi takdirde depo yöneticinize ulaşın.</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Dışa yakınlaştırmayı devre dışı bırak</string>\n    <string name=\"invalid_backup_file_json\">JSON yedekleri desteklenmiyor</string>\n    <string name=\"invalid_backup_file_unknown\">Yedek dosyası bozuk</string>\n    <string name=\"manga_interval_expected_update_null\">Bu manga ya tamamlanmış ya da tahmin edilen yayımlanma tarihi yok.</string>\n    <string name=\"action_add_anyway\">Yine de ekle</string>\n    <string name=\"action_migrate_duplicate\">Zaten olan girdiyi taşı</string>\n    <string name=\"action_replace_repo\">Değiştir</string>\n    <string name=\"action_replace_repo_title\">İmzalama Anahtarı Parmak İzi Zaten Var</string>\n    <string name=\"extensionRepo_settings\">Eklenti depoları</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Stabil klasör erişimi sağlanamadı. Uygulama belirsiz çalışabilir.</string>\n    <string name=\"label_upcoming\">Takvim</string>\n    <string name=\"action_view_upcoming\">Gelecek Güncellemeleri Görüntüle</string>\n    <string name=\"upcoming_guide\">Yakında Gelecek Rehberi</string>\n    <string name=\"upcoming_calendar_next\">Gelecek Ay</string>\n    <string name=\"upcoming_calendar_prev\">Önceki Ay</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Yinelenen okunmuş bölümlerin indirilmesini atla</string>\n    <string name=\"add_repo_confirmation\">\\\"%s\\\" deposunu eklemek istiyor musunuz?</string>\n    <string name=\"confirm_tracker_update\">İzleyicileri %d. bölüme güncelle?</string>\n    <string name=\"onboarding_permission_crashlytics\">Çökme kayıtlarını gönder</string>\n    <string name=\"pref_security\">Güvenlik</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Geliştiricilere anonimleştirilmiş çökme kayıtlarını gönder.</string>\n    <string name=\"firebase_summary\">Çökme kayıtlarını ve kullanım istatistiklerini göndermek sorunları tanımlamamıza ve düzeltmemize imkan verir, performansı iyileştirmemizi sağlar ve gelecek güncellemeleri ihtiyaçlarınızla uyumlu yapmamıza olanak tanır</string>\n    <string name=\"onboarding_permission_analytics\">Kullanım istatistiklerine izin ver</string>\n    <string name=\"onboarding_permission_analytics_description\">Uygulama özelliklerini geliştirmek için anonimleştirilmiş kullanım verileri gönder.</string>\n    <string name=\"pref_firebase\">Kullanım İstatistikleri ve Çökme Kayıtları</string>\n    <string name=\"action_sort_random\">Rastgele</string>\n    <string name=\"ext_remove\">Kaldır</string>\n    <string name=\"remove_private_extension_message\">\\\"%s\\\" eklentisini kaldırmak istediğinize emin misiniz?</string>\n    <string name=\"ext_confirm_remove\">Eklentiyi Kaldır?</string>\n    <string name=\"non_library_settings\">Tüm okunmuş girdiler</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Okundu olarak işaretlendiğinde ilerlemeyi güncelle</string>\n    <string name=\"trackers_updated_summary\">İzleyiciler %d. bölüme güncellendi</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Özel bitmap donanım sınırı</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Varsayılan (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Eğer okuyucu boş bir görsel yüklerse bu sınırı kademeli olarak azaltın.\\nSeçili: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Performansı etkiler. Yalnızca bitmap sınırını düşürmek boş görsel sorunlarını çözmediğinde kullanın</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Eklenti için okuma geçmişini duraklat</string>\n    <string name=\"label_auto\">Otomatik</string>\n    <string name=\"theme_monochrome\">Monokrom</string>\n    <string name=\"tracked_privately\">Gizli olarak izlendi</string>\n    <string name=\"library_exported\">Kitaplık Dışa Aktarıldı</string>\n    <string name=\"author\">Yazar</string>\n    <string name=\"artist\">Sanatçı</string>\n    <string name=\"action_toggle_private_on\">Gizli olarak izle</string>\n    <string name=\"library_list\">Kitaplık Listesi</string>\n    <string name=\"export\">Dışa Aktar</string>\n    <string name=\"action_toggle_private_off\">Herkese açık olarak izle</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">Uzun şerit okuyucusu için eski çözümleyiciyi kullan</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">Yinelenen okunmuş bölümleri okundu olarak işaretle</string>\n    <string name=\"action_display_unread_badge\">Okunmamış bölümler</string>\n    <string name=\"pref_behavior\">Davranış</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_existing\">Bölümü okuduktan sonra</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read_new\">Yeni bir bölüm geldiğinde</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/uk/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">Після %1$s хвилини</item>\n        <item quantity=\"few\">Після %1$s хвилин</item>\n        <item quantity=\"many\">Після %1$s хвилин</item>\n        <item quantity=\"other\">Після %1$s хвилин</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"one\">%1$d новий розділ</item>\n        <item quantity=\"few\">%1$d нових розділів</item>\n        <item quantity=\"many\">%1$d нових розділів</item>\n        <item quantity=\"other\">%1$d нових розділів</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"one\">Розділ %1$s та 1 більше</item>\n        <item quantity=\"few\">Розділи %1$s та %2$d більше</item>\n        <item quantity=\"many\">Розділи %1$s та %2$d більше</item>\n        <item quantity=\"other\">Розділи %1$s та %2$d більше</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\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=\"update_check_notification_ext_updates\">\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=\"num_categories\">\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=\"download_queue_summary\">\n        <item quantity=\"one\">%1$s залишився</item>\n        <item quantity=\"few\">%1$s залишились</item>\n        <item quantity=\"many\">%1$s залишилось</item>\n        <item quantity=\"other\">%1$s залишилось</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"one\">Зроблено за %1$s з %2$s помилкою</item>\n        <item quantity=\"few\">Зроблено за %1$s з %2$s помилками</item>\n        <item quantity=\"many\">Зроблено за %1$s з %2$s помилками</item>\n        <item quantity=\"other\">Зроблено за %1$s з %2$s помилками</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"one\">%1$s розділ</item>\n        <item quantity=\"few\">%1$s розділів</item>\n        <item quantity=\"many\">%1$s розділів</item>\n        <item quantity=\"other\">%1$s розділів</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\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=\"missing_chapters_warning\">\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=\"relative_time\">\n        <item quantity=\"one\">Учора</item>\n        <item quantity=\"few\">%1$d дні тому</item>\n        <item quantity=\"many\">%1$d днів тому</item>\n        <item quantity=\"other\">%1$d днів тому</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"one\">Наступний непрочитаний розділ</item>\n        <item quantity=\"few\">Наступні %d непрочитані розділи</item>\n        <item quantity=\"many\">Наступні %d непрочитаних розділів</item>\n        <item quantity=\"other\">Наступні %d непрочитаних розділів</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"one\">Наступний розділ</item>\n        <item quantity=\"few\">Наступних %d розділи</item>\n        <item quantity=\"many\">Наступних %d розділів</item>\n        <item quantity=\"other\">Наступних %d розділів</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"one\">Відсутній %1$s розділ</item>\n        <item quantity=\"few\">Відсутні %1$s розділи</item>\n        <item quantity=\"many\">Відсутні %1$s розділів</item>\n        <item quantity=\"other\">Відсутні %1$s розділів</item>\n    </plurals>\n    <plurals name=\"day\">\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=\"num_repos\">\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=\"pref_pages\">\n        <item quantity=\"one\">%1$s сторінка</item>\n        <item quantity=\"few\">%1$s сторінки</item>\n        <item quantity=\"many\">%1$s сторінок</item>\n        <item quantity=\"other\">%1$s сторінок</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"one\">Завтра</item>\n        <item quantity=\"few\">Через %1$d дні</item>\n        <item quantity=\"many\">Через %1$d днів</item>\n        <item quantity=\"other\">Через %1$d днів</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/uk/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Назва</string>\n    <string name=\"categories\">Категорії</string>\n    <string name=\"manga\">Записи бібліотеки</string>\n    <string name=\"chapters\">Розділи</string>\n    <string name=\"track\">Відстеження</string>\n    <string name=\"history\">Історія</string>\n    <string name=\"label_settings\">Налаштування</string>\n    <string name=\"label_download_queue\">Черга завантажень</string>\n    <string name=\"label_library\">Бібліотека</string>\n    <string name=\"label_recent_manga\">Історія</string>\n    <string name=\"label_recent_updates\">Нове</string>\n    <string name=\"label_backup\">Резервування та відновлення</string>\n    <string name=\"label_migration\">Міграція</string>\n    <string name=\"label_extensions\">Розширення</string>\n    <string name=\"label_extension_info\">Інформація про розширення</string>\n    <string name=\"action_settings\">Налаштування</string>\n    <string name=\"action_filter\">Фільтр</string>\n    <string name=\"action_filter_bookmarked\">В закладках</string>\n    <string name=\"action_filter_unread\">Непрочитане</string>\n    <string name=\"action_filter_empty\">Видалити фільтр</string>\n    <string name=\"action_sort_alpha\">В алфавітному порядку</string>\n    <string name=\"action_sort_total\">За кількістю розділів</string>\n    <string name=\"action_sort_last_read\">Остання прочитана</string>\n    <string name=\"action_search\">Пошук</string>\n    <string name=\"action_global_search\">Глобальний пошук</string>\n    <string name=\"action_select_all\">Обрати все</string>\n    <string name=\"action_mark_as_read\">Позначити як прочитане</string>\n    <string name=\"action_mark_as_unread\">Позначити як непрочитане</string>\n    <string name=\"action_mark_previous_as_read\">Позначити попередні як прочитані</string>\n    <string name=\"action_download\">Завантажити</string>\n    <string name=\"action_bookmark\">Закладка розділу</string>\n    <string name=\"action_remove_bookmark\">Видалити закладку розділу</string>\n    <string name=\"action_delete\">Видалити</string>\n    <string name=\"action_update_library\">Оновити бібліотеку</string>\n    <string name=\"action_edit\">Редагувати</string>\n    <string name=\"action_add\">Додати</string>\n    <string name=\"action_add_category\">Додати категорію</string>\n    <string name=\"action_edit_categories\">Редагувати категорію</string>\n    <string name=\"action_rename_category\">Перейменувати категорію</string>\n    <string name=\"action_move_category\">Помістити в категорію</string>\n    <string name=\"action_edit_cover\">Змінити обкладинку</string>\n    <string name=\"action_pause\">Пауза</string>\n    <string name=\"action_previous_chapter\">Попередній розділ</string>\n    <string name=\"action_next_chapter\">Наступний розділ</string>\n    <string name=\"action_retry\">Повторити</string>\n    <string name=\"action_remove\">Видалити</string>\n    <string name=\"action_resume\">Продовжити</string>\n    <string name=\"action_open_in_browser\">Відкрити в браузері</string>\n    <string name=\"action_display_mode\">Режим відображення</string>\n    <string name=\"action_display\">Вигляд</string>\n    <string name=\"action_display_grid\">Компактна сітка</string>\n    <string name=\"action_display_list\">Список</string>\n    <string name=\"action_display_download_badge\">Завантажені розділи</string>\n    <string name=\"action_cancel\">Скасувати</string>\n    <string name=\"action_sort\">Сортувати</string>\n    <string name=\"action_install\">Встановити</string>\n    <string name=\"action_share\">Поділитись</string>\n    <string name=\"action_save\">Зберегти</string>\n    <string name=\"action_reset\">Скинути</string>\n    <string name=\"action_undo\">Скасувати</string>\n    <string name=\"action_open_log\">Відкрити лог</string>\n    <string name=\"action_restore\">Відновити</string>\n    <string name=\"loading\">Завантаження…</string>\n    <string name=\"app_not_available\">Застосунок не відповідає</string>\n    <string name=\"pref_category_general\">Головні</string>\n    <string name=\"pref_category_reader\">Читалка</string>\n    <string name=\"pref_category_downloads\">Завантаження</string>\n    <string name=\"pref_category_tracking\">Відстеження</string>\n    <string name=\"pref_category_advanced\">Додатково</string>\n    <string name=\"pref_category_about\">Інформація</string>\n    <string name=\"pref_library_columns\">Розмір сітки</string>\n    <string name=\"portrait\">Портретна</string>\n    <string name=\"landscape\">Альбомна</string>\n    <string name=\"pref_library_update_interval\">Автоматичне оновлення</string>\n    <string name=\"update_never\">Вимкнути</string>\n    <string name=\"update_6hour\">Кожні 6 годин</string>\n    <string name=\"update_12hour\">Кожні 12 годин</string>\n    <string name=\"update_24hour\">Щодня</string>\n    <string name=\"update_48hour\">Що 2 дні</string>\n    <string name=\"update_weekly\">Щонеділі</string>\n    <string name=\"all\">Всі</string>\n    <string name=\"pref_library_update_restriction\">Обмеження пристрою для автоматичних оновлень</string>\n    <string name=\"charging\">Коли заряджається</string>\n    <string name=\"pref_update_only_non_completed\">Пропустити глави з статусом \\\"Завершено\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Оновлювати прогрес після прочитання</string>\n    <string name=\"default_category\">Типова категорія</string>\n    <string name=\"default_category_summary\">Завжди запитувати</string>\n    <string name=\"ext_update\">Оновлення</string>\n    <string name=\"ext_install\">Встановити</string>\n    <string name=\"ext_pending\">Очікується</string>\n    <string name=\"ext_downloading\">Завантажується</string>\n    <string name=\"ext_installing\">Встановлюється</string>\n    <string name=\"ext_installed\">Встановлено</string>\n    <string name=\"ext_trust\">Довірений</string>\n    <string name=\"ext_untrusted\">Ненадійне</string>\n    <string name=\"ext_uninstall\">Видалити</string>\n    <string name=\"untrusted_extension\">Ненадійне розширення</string>\n    <string name=\"untrusted_extension_message\">Шкідливе розширення може зчитувати будь-які збережені облікові дані для входу або виконати довільний код.\n\\n\n\\nДовіряючи цьому розширенню, ви приймаєте ці ризики.</string>\n    <string name=\"pref_fullscreen\">Повноекранний режим</string>\n    <string name=\"pref_page_transitions\">Анімація переходів сторінки</string>\n    <string name=\"pref_double_tap_anim_speed\">Швидкість анімації при подвійному натиснені</string>\n    <string name=\"pref_show_page_number\">Показувати номер сторінки</string>\n    <string name=\"pref_crop_borders\">Обрізати поля</string>\n    <string name=\"pref_custom_brightness\">Користувацька яскравість</string>\n    <string name=\"pref_custom_color_filter\">Користувацький кольоровий фільтр</string>\n    <string name=\"pref_keep_screen_on\">Тримати екран ввімкненим</string>\n    <string name=\"pref_reader_navigation\">Навігація</string>\n    <string name=\"pref_read_with_volume_keys\">Клавіші гучності</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Інвертувати клавіші гучності</string>\n    <string name=\"pref_reader_theme\">Колір фону</string>\n    <string name=\"white_background\">Білий</string>\n    <string name=\"black_background\">Чорний</string>\n    <string name=\"pref_viewer_type\">Типовий напрямок читання</string>\n    <string name=\"left_to_right_viewer\">Посторінково (зліва направо)</string>\n    <string name=\"right_to_left_viewer\">Посторінково (справа наліво)</string>\n    <string name=\"vertical_viewer\">Посторінковий (вертикальний)</string>\n    <string name=\"webtoon_viewer\">Довга смуга</string>\n    <string name=\"pager_viewer\">Посторінково</string>\n    <string name=\"pref_image_scale_type\">Масштабування</string>\n    <string name=\"scale_type_fit_screen\">По екрану</string>\n    <string name=\"scale_type_stretch\">Розтягнута</string>\n    <string name=\"scale_type_fit_width\">По ширині</string>\n    <string name=\"scale_type_fit_height\">По висоті</string>\n    <string name=\"scale_type_original_size\">Оригінальний розмір</string>\n    <string name=\"scale_type_smart_fit\">Розумна</string>\n    <string name=\"pref_zoom_start\">Стартова позиція збільшення</string>\n    <string name=\"zoom_start_automatic\">Автоматична</string>\n    <string name=\"zoom_start_left\">Зліва</string>\n    <string name=\"zoom_start_right\">Справа</string>\n    <string name=\"zoom_start_center\">Центральна</string>\n    <string name=\"double_tap_anim_speed_0\">Без анімації</string>\n    <string name=\"double_tap_anim_speed_normal\">Нормальна</string>\n    <string name=\"double_tap_anim_speed_fast\">Швидка</string>\n    <string name=\"pref_rotation_type\">Орієнтація за замовчуванням</string>\n    <string name=\"rotation_free\">Вільна</string>\n    <string name=\"rotation_force_portrait\">Заблокована портретна</string>\n    <string name=\"rotation_force_landscape\">Заблокована альбомна</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Після того, як було відмічено прочитаним вручну</string>\n    <string name=\"pref_remove_after_read\">Автоматично видаляти після прочитання</string>\n    <string name=\"disabled\">Вимкнено</string>\n    <string name=\"last_read_chapter\">Останній прочитаний розділ</string>\n    <string name=\"second_to_last\">Передостанній прочитаний розділ</string>\n    <string name=\"third_to_last\">Третій від останнього прочитаного розділу</string>\n    <string name=\"fourth_to_last\">Четвертий від останнього прочитаного розділу</string>\n    <string name=\"fifth_to_last\">П\\'ятий від останнього прочитаного розділу</string>\n    <string name=\"pref_download_new\">Завантажувати нові розділи</string>\n    <string name=\"services\">Трекери</string>\n    <string name=\"pref_create_backup\">Створити резервну копію</string>\n    <string name=\"pref_create_backup_summ\">Можна використовувати для відновлення поточної бібліотеки</string>\n    <string name=\"pref_restore_backup\">Відновити резервну копію</string>\n    <string name=\"pref_restore_backup_summ\">Відновити бібліотеку з резервної копії</string>\n    <string name=\"pref_backup_interval\">Частота автоматичних бекапів</string>\n    <string name=\"backup_created\">Резервна копія створена</string>\n    <string name=\"restore_completed\">Відновлення завершено</string>\n    <string name=\"backup_choice\">Що ви хочете зберегти до резервної копії?</string>\n    <string name=\"restoring_backup\">Відновлення резервної копії</string>\n    <string name=\"creating_backup\">Створення резервної копії</string>\n    <string name=\"pref_clear_chapter_cache\">Очистити кеш розділів</string>\n    <string name=\"used_cache\">Використано: %1$s</string>\n    <string name=\"cache_deleted\">Кеш очищено, %1$d файлів видалено</string>\n    <string name=\"cache_delete_error\">Виникла помилка при видаленні кешу</string>\n    <string name=\"pref_clear_cookies\">Очистити куки</string>\n    <string name=\"cookies_cleared\">Куки очищено</string>\n    <string name=\"pref_clear_database\">Очистити базу даних</string>\n    <string name=\"pref_clear_database_summary\">Видалити історію для записів, котрі не знаходяться в вашій бібліотеці</string>\n    <string name=\"clear_database_confirmation\">Ви впевнені? Прочитані розділи та прогрес не бібліотечних записів будуть втрачені</string>\n    <string name=\"clear_database_completed\">Дані видалено</string>\n    <string name=\"version\">Версія</string>\n    <string name=\"pref_enable_acra\">Надсилати звіти про падіння</string>\n    <string name=\"pref_acra_summary\">Допомагає виправляти будь-які баги. Особисті дані не передаються</string>\n    <string name=\"login_title\">Авторизація до %1$s</string>\n    <string name=\"username\">Ім\\'я користувача</string>\n    <string name=\"password\">Пароль</string>\n    <string name=\"login\">Логін</string>\n    <string name=\"login_success\">Вхід успішний</string>\n    <string name=\"unknown_error\">Невідома помилка</string>\n    <string name=\"updating_category\">Оновлення категорії</string>\n    <string name=\"no_more_results\">Більше немає результатів</string>\n    <string name=\"local_source\">Локальне джерело</string>\n    <string name=\"other_source\">Інші</string>\n    <string name=\"action_global_search_hint\">Глобальний пошук…</string>\n    <string name=\"latest\">Новинки</string>\n    <string name=\"browse\">Огляд</string>\n    <string name=\"ongoing\">Онгоінг</string>\n    <string name=\"unknown\">Невідомо</string>\n    <string name=\"licensed\">Ліцензовано</string>\n    <string name=\"remove_from_library\">Видалити з бібліотеки</string>\n    <string name=\"manga_added_library\">Додати до бібліотеки</string>\n    <string name=\"manga_removed_library\">Видалено з бібліотеки</string>\n    <string name=\"delete_downloads_for_manga\">Видаляти завантажені розділи?</string>\n    <string name=\"copied_to_clipboard\">Скопійовано до буферу\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Джерело не встановлено: %1$s</string>\n    <string name=\"display_mode_chapter\">Розділ %1$s</string>\n    <string name=\"chapter_downloading_progress\">Завантажується (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Помилка</string>\n    <string name=\"chapter_paused\">Призупинено</string>\n    <string name=\"show_title\">Назва джерела</string>\n    <string name=\"show_chapter_number\">Номер розділу</string>\n    <string name=\"sort_by_source\">За каталогом</string>\n    <string name=\"sort_by_number\">За номером розділу</string>\n    <string name=\"manga_download\">Завантажити</string>\n    <string name=\"download_unread\">Непрочитані</string>\n    <string name=\"confirm_delete_chapters\">Ви впевнені, що бажаєте видалити вибрані розділи?</string>\n    <string name=\"manga_tracking_tab\">Стежити</string>\n    <string name=\"reading\">В процесі читання</string>\n    <string name=\"completed\">Завершене</string>\n    <string name=\"dropped\">Кинуто</string>\n    <string name=\"on_hold\">Заморожено</string>\n    <string name=\"plan_to_read\">Планую почитати</string>\n    <string name=\"repeating\">Перечитую</string>\n    <string name=\"score\">Оцінка</string>\n    <string name=\"title\">Заголовок</string>\n    <string name=\"status\">Статус</string>\n    <string name=\"track_status\">Статус</string>\n    <string name=\"track_type\">Тип</string>\n    <string name=\"error_category_exists\">Категорія з таким іменем вже існує!</string>\n    <string name=\"snack_categories_deleted\">Категорію видалено</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Ця дія видалить дату прочитання розділу. Ви впевнені?</string>\n    <string name=\"dialog_with_checkbox_reset\">Скинути всіх розділи для цього запису</string>\n    <string name=\"snack_add_to_library\">Додати до бібліотеки?</string>\n    <string name=\"picture_saved\">Картинку збережено</string>\n    <string name=\"custom_filter\">Користувацький фільтр</string>\n    <string name=\"set_as_cover\">Встановити як обкладинку</string>\n    <string name=\"cover_updated\">Обкладинку оновлено</string>\n    <string name=\"chapter_progress\">Сторінка %1$d</string>\n    <string name=\"no_next_chapter\">Наступний розділ не знайдено</string>\n    <string name=\"decode_image_error\">Зображення не вдалося завантажити</string>\n    <string name=\"confirm_set_image_as_cover\">Ви бажаєте встановити цю картинку як обкладинку?</string>\n    <string name=\"transition_finished\">Завершено:</string>\n    <string name=\"transition_current\">Поточна:</string>\n    <string name=\"transition_next\">Наступна:</string>\n    <string name=\"transition_previous\">Попередня:</string>\n    <string name=\"transition_no_next\">Наступної частини немає</string>\n    <string name=\"transition_no_previous\">Попередньої частини немає</string>\n    <string name=\"transition_pages_loading\">Завантаження сторінок…</string>\n    <string name=\"transition_pages_error\">Не вдалось завантажити сторінки %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Виберіть включені дані</string>\n    <string name=\"migrate\">Мігрувати</string>\n    <string name=\"copy\">Копіювати</string>\n    <string name=\"download_queue_error\">Не вдалося завантажити розділи. Ви можете повторити спробу в розділі завантажень</string>\n    <string name=\"notification_new_chapters\">Знайдено нові розділи</string>\n    <string name=\"notification_cover_update_failed\">Не вдалось оновити обкладинку</string>\n    <string name=\"notification_first_add_to_library\">Будь ласка, додайте запис до своєї бібліотеки перед тим як робити це</string>\n    <string name=\"file_select_cover\">Вибрати обкладинку</string>\n    <string name=\"file_select_backup\">Виберіть файл резервної копії</string>\n    <string name=\"update_check_confirm\">Завантажити</string>\n    <string name=\"update_check_no_new_updates\">Оновлень не виявлено</string>\n    <string name=\"update_check_notification_download_in_progress\">Завантаження в процесі…</string>\n    <string name=\"update_check_notification_download_complete\">Тицьніть для встановлення оновлень</string>\n    <string name=\"update_check_notification_download_error\">Помилка завантаження</string>\n    <string name=\"update_check_notification_update_available\">Доступна нова версія!</string>\n    <string name=\"information_no_downloads\">Завантажень немає</string>\n    <string name=\"information_no_recent\">Без оновлень</string>\n    <string name=\"information_no_recent_manga\">Останнім часом нічого не прочитано</string>\n    <string name=\"information_empty_library\">Ваша бібліотека порожня</string>\n    <string name=\"information_empty_category\">У вас немає категорій. Тицьніть кнопку плюс, для початку облаштування вашої бібліотеки.</string>\n    <string name=\"download_notifier_downloader_title\">Завантажувач</string>\n    <string name=\"download_notifier_title_error\">Помилка</string>\n    <string name=\"download_notifier_unknown_error\">Невідома помилка при завантаженні розділу</string>\n    <string name=\"download_notifier_text_only_wifi\">Немає Wi-Fi підключення</string>\n    <string name=\"download_notifier_no_network\">Немає мережевого з`єднання</string>\n    <string name=\"download_notifier_download_paused\">Завантаження призупинено</string>\n    <string name=\"channel_common\">Звичайний</string>\n    <string name=\"pref_read_with_long_tap\">Показувати дії при довгому натисканні</string>\n    <string name=\"action_open_in_web_view\">Відкрити у WebView</string>\n    <string name=\"pref_skip_read_chapters\">Пропускати розділи, відмічені як прочитані</string>\n    <string name=\"pref_color_filter_mode\">Режим накладання кольорового фільтру</string>\n    <string name=\"filter_mode_overlay\">Оверлей</string>\n    <string name=\"filter_mode_multiply\">множення</string>\n    <string name=\"filter_mode_screen\">Екран</string>\n    <string name=\"filter_mode_lighten\">Світліше</string>\n    <string name=\"filter_mode_darken\">Темніше</string>\n    <string name=\"label_help\">Допомога</string>\n    <string name=\"no_results_found\">Нічого не знайдено</string>\n    <string name=\"migration_selection_prompt\">Виберіть джерело, з якого потрібно мігрувати</string>\n    <string name=\"action_webview_back\">Назад</string>\n    <string name=\"action_webview_forward\">Вперед</string>\n    <string name=\"action_webview_refresh\">Оновити</string>\n    <string name=\"pref_category_library\">Бібліотека</string>\n    <string name=\"ext_obsolete\">Застарілий</string>\n    <string name=\"obsolete_extension_message\">Це розширення більше не доступне. Воно може працювати невірно, а також викликати проблеми із застосунком. Рекомендується його видалити.</string>\n    <string name=\"pref_date_format\">Формат дати</string>\n    <string name=\"pref_category_library_update\">Глобальне оновлення</string>\n    <string name=\"logout_title\">Вихід із %1$s?</string>\n    <string name=\"logout\">Вихід</string>\n    <string name=\"logout_success\">Ви вийшли з системи</string>\n    <string name=\"paused\">Призупинено</string>\n    <string name=\"label_more\">Ще</string>\n    <string name=\"action_sort_latest_chapter\">Останній розділ</string>\n    <string name=\"action_view_chapters\">Подивитись розділи</string>\n    <string name=\"action_cancel_all\">Скасувати все</string>\n    <string name=\"theme_light\">Світла</string>\n    <string name=\"theme_dark\">Темна</string>\n    <string name=\"theme_system\">Системна</string>\n    <string name=\"pref_manage_notifications\">Керування сповіщеннями</string>\n    <string name=\"pref_category_security\">Безпека і конфіденційність</string>\n    <string name=\"lock_with_biometrics\">Потрібно розблокувати</string>\n    <string name=\"lock_when_idle\">Блокувати в режимі очікування</string>\n    <string name=\"lock_always\">Завжди</string>\n    <string name=\"lock_never\">Ніколи</string>\n    <string name=\"secure_screen\">Захистити екран додатку</string>\n    <string name=\"ext_updates_pending\">Очікуються оновлення</string>\n    <string name=\"pref_cutout_short\">Відображати вміст обітнутої області</string>\n    <string name=\"information_cloudflare_bypass_failure\">Не вдалось обійти Cloudflare</string>\n    <string name=\"information_webview_outdated\">Будь ласка, оновіть WebView для кращої сумісності</string>\n    <string name=\"channel_new_chapters\">Оновлення розділів</string>\n    <string name=\"secure_screen_summary\">Ховати вміст застосунку при перемиканні застосунків та блокувати скріншоти</string>\n    <string name=\"pref_category_display\">Відображення</string>\n    <string name=\"notification_chapters_single\">Розділ %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Розділ %1$s та ще %2$d</string>\n    <string name=\"notification_chapters_multiple\">Розділи %1$s</string>\n    <string name=\"hide_notification_content\">Приховати вміст сповіщень</string>\n    <string name=\"pref_disable_battery_optimization\">Вимкнути збереження батареї</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Допомагає фоновому оновленню бібліотеки та резервним копіям</string>\n    <string name=\"battery_optimization_disabled\">Збереження батареї вже вимкнено</string>\n    <string name=\"email\">Електропошта</string>\n    <string name=\"pref_always_show_chapter_transition\">Завжди показувати перехід розділу</string>\n    <string name=\"action_menu\">Меню</string>\n    <string name=\"action_newest\">Найновіші</string>\n    <string name=\"action_oldest\">Найстаріші</string>\n    <string name=\"action_move_to_top\">Перемістити догори</string>\n    <string name=\"action_move_to_bottom\">Перемістити додолу</string>\n    <string name=\"channel_ext_updates\">Оновлення розширень</string>\n    <string name=\"pref_category_reading\">Читання</string>\n    <string name=\"label_sources\">Джерела</string>\n    <string name=\"updating_library\">Оновлення бібліотеки</string>\n    <string name=\"pref_skip_filtered_chapters\">Пропускати відфільтровані розділи</string>\n    <string name=\"pref_webtoon_side_padding\">Бічний відступ</string>\n    <string name=\"vertical_plus_viewer\">Довга смуга з проміжками</string>\n    <string name=\"action_select_inverse\">Інвертувати вибір</string>\n    <string name=\"add_tracking\">Додати відстеження</string>\n    <string name=\"pinned_sources\">Прикріплено</string>\n    <string name=\"action_unpin\">Відкріпити</string>\n    <string name=\"action_pin\">Закріпити</string>\n    <string name=\"in_library\">В бібліотеці</string>\n    <string name=\"add_to_library\">Додати до бібліотеки</string>\n    <string name=\"manga_info_collapse\">Менше</string>\n    <string name=\"manga_info_expand\">Більше</string>\n    <string name=\"information_webview_required\">WebView необхідний для роботи застосунку</string>\n    <string name=\"licenses\">Ліцензії з відкритим кодом</string>\n    <string name=\"website\">Сторінка</string>\n    <string name=\"label_downloaded_only\">Тільки завантажені</string>\n    <string name=\"gray_background\">Сірий</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Перевірити наявність нової обкладинки та подробиць при оновленні бібліотеки</string>\n    <string name=\"pref_library_update_refresh_metadata\">Автоматично оновлювати метадані</string>\n    <string name=\"action_migrate\">Мігрувати</string>\n    <string name=\"sort_by_upload_date\">За датою завантаження</string>\n    <string name=\"local_source_help_guide\">Посібник місцевого джерела</string>\n    <string name=\"last_used_source\">Останній використаний</string>\n    <string name=\"tabs_header\">Вкладки</string>\n    <string name=\"downloaded_only_summary\">Фільтрувати усі записи в вашій бібліотеці</string>\n    <string name=\"check_for_updates\">Перевірити оновлення</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Не вдалось відкрити налаштування пристрою</string>\n    <string name=\"pref_refresh_library_covers\">Оновити обкладинки в бібліотеці</string>\n    <string name=\"label_data\">Дані</string>\n    <string name=\"restoring_backup_canceled\">Відновлення відмінено</string>\n    <string name=\"restoring_backup_error\">Відновлення бекапу не вдалось</string>\n    <string name=\"restore_in_progress\">Відновлення вже відбувається</string>\n    <string name=\"creating_backup_error\">Помилка резервування</string>\n    <string name=\"backup_in_progress\">Резервне копіювання вже виконується</string>\n    <string name=\"restore_duration\">%1$02d хв, %2$02d сек</string>\n    <string name=\"backup_restore_missing_sources\">Відсутні джерела:</string>\n    <string name=\"invalid_backup_file_missing_manga\">Бекап не містить жодних записів бібліотеки.</string>\n    <string name=\"invalid_backup_file\">Невірний файл резервної копії:</string>\n    <string name=\"tracking_info\">Одностороння синхронізація для оновлення прогресу розділу у зовнішніх сервісах стеження. Налаштуйте відстеження окремих записів за допомогою кнопки відстеження.</string>\n    <string name=\"action_display_show_tabs\">Показувати вкладки категорій</string>\n    <string name=\"action_display_comfortable_grid\">Зручна сітка</string>\n    <string name=\"recent_manga_time\">Розд. %1$s - %2$s</string>\n    <string name=\"viewer\">Режим читання</string>\n    <string name=\"pref_category_for_this_series\">Для цієї серії</string>\n    <string name=\"page_list_empty_error\">Сторінки не знайдено</string>\n    <string name=\"action_disable_all\">Вимкнути все</string>\n    <string name=\"action_enable_all\">Увімкнути все</string>\n    <string name=\"pref_show_reading_mode_summary\">Стисло відобразити поточний режим, коли читалку відкрито</string>\n    <string name=\"pref_show_reading_mode\">Показати режим читання</string>\n    <string name=\"action_start\">Розпочати</string>\n    <string name=\"loader_not_implemented_error\">Джерело не знайдено</string>\n    <string name=\"action_disable\">Відключити</string>\n    <string name=\"tapping_inverted_both\">Обоє</string>\n    <string name=\"tapping_inverted_vertical\">Вертикально</string>\n    <string name=\"tapping_inverted_horizontal\">Горизонтально</string>\n    <string name=\"tapping_inverted_none\">Нічого</string>\n    <string name=\"pref_read_with_tapping_inverted\">Інвертувати зони тицяння</string>\n    <string name=\"unknown_status\">Невідомий стан</string>\n    <string name=\"unknown_author\">Невідомий автор</string>\n    <string name=\"requires_app_restart\">Потрібен перезапуск застосунку, щоб зміни вступили в дію</string>\n    <string name=\"label_network\">Мережа</string>\n    <string name=\"updated_version\">Оновлено до v%1$s</string>\n    <string name=\"whats_new\">Що новенького</string>\n    <string name=\"download_insufficient_space\">Не вдалось завантажити розділи через нестачу місця в сховищі</string>\n    <string name=\"action_global_search_query\">Шукати \\\"%1$s\\\" глобально</string>\n    <string name=\"pref_category_reading_mode\">Режим читання</string>\n    <string name=\"pref_category_theme\">Тема</string>\n    <string name=\"action_sort_date_added\">Дата додавання</string>\n    <string name=\"no_pinned_sources\">У вас немає закріплених джерел</string>\n    <string name=\"channel_errors\">Помилки</string>\n    <string name=\"channel_complete\">Завершено</string>\n    <string name=\"channel_progress\">Прогрес</string>\n    <string name=\"backup_restore_missing_trackers\">Трекери не авторизовано:</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Дозволити видалення розділів з закладок</string>\n    <string name=\"pref_category_delete_chapters\">Видалити розділи</string>\n    <string name=\"ext_nsfw_warning\">Джерела з цього розширення можуть містити контент NSFW (18+)</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">Це не заважає неофіційним або потенційно невірним розширенням розміщувати вміст NSFW (18+) у застосунку.</string>\n    <string name=\"no_chapters_error\">Немає розділів</string>\n    <string name=\"chapter_settings_updated\">Налаштування розділу оновлено</string>\n    <string name=\"share_page_info\">%1$s: %2$s, сторінка %3$d</string>\n    <string name=\"set_chapter_settings_as_default\">Зберегти налаштування</string>\n    <string name=\"also_set_chapter_settings_for_library\">Також застосувати для усіх записів в моїй бібліотеці</string>\n    <string name=\"confirm_set_chapter_settings\">Ви впевнені, що бажаєте зберегти ці налаштування як основні?</string>\n    <string name=\"chapter_settings\">Налаштування розділу</string>\n    <string name=\"downloaded_chapters\">Завантажені розділи</string>\n    <string name=\"manga_from_library\">З бібліотеки</string>\n    <string name=\"action_search_settings\">Налаштування пошуку</string>\n    <string name=\"pref_incognito_mode_summary\">Призупиняє історію читання</string>\n    <string name=\"pref_incognito_mode\">Режим інкогніто</string>\n    <string name=\"pref_clear_history\">Очистити історію</string>\n    <string name=\"clear_history_confirmation\">Ви впевнені? Всю історію буде втрачено.</string>\n    <string name=\"clear_history_completed\">Історію видалено</string>\n    <string name=\"spen_next_page\">Наступна сторінка</string>\n    <string name=\"spen_previous_page\">Попередня сторінка</string>\n    <string name=\"migration_help_guide\">Гайд по міграції джерел</string>\n    <string name=\"file_picker_error\">Застосунок вибору файлів не знайдено</string>\n    <string name=\"myanimelist_relogin\">Будь ласка, увійдіть в MAL знову</string>\n    <string name=\"pref_show_nsfw_source\">Показувати в списку джерел та розширень</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) джерела</string>\n    <string name=\"track_finished_reading_date\">Дата закінчення</string>\n    <string name=\"track_started_reading_date\">Дата початку</string>\n    <string name=\"pref_dump_crash_logs_summary\">Зберігає логи помилок до файлу для надсилання розробникам</string>\n    <string name=\"pref_dump_crash_logs\">Поділіться журналами збоїв</string>\n    <string name=\"pref_viewer_nav\">Зони тицяння</string>\n    <string name=\"edge_nav\">Межа</string>\n    <string name=\"kindlish_nav\">Kindle-подібна</string>\n    <string name=\"l_nav\">L-подібна</string>\n    <string name=\"action_desc\">За спаданням</string>\n    <string name=\"action_asc\">За зростанням</string>\n    <string name=\"action_order_by_chapter_number\">За номером розділу</string>\n    <string name=\"action_order_by_upload_date\">За датою завантаження</string>\n    <string name=\"action_filter_tracked\">Відстежуване</string>\n    <string name=\"action_display_show_number_of_items\">Показати кількість об\\'єктів</string>\n    <string name=\"right_and_left_nav\">Праворуч та ліворуч</string>\n    <string name=\"pref_dual_page_split\">Розділення широких сторінок</string>\n    <string name=\"pref_dual_page_invert_summary\">Якщо розділення широких сторінок, не відповідає напрямку читання</string>\n    <string name=\"pref_dual_page_invert\">Інвертувати розділення широких сторінок</string>\n    <string name=\"backup_restore_content_full\">Вам потрібно встановити розширення яких бракує та увійти в сервіси відстежування для їх використання.</string>\n    <string name=\"nav_zone_right\">Зправа</string>\n    <string name=\"nav_zone_left\">Зліва</string>\n    <string name=\"nav_zone_next\">Наступний</string>\n    <string name=\"nav_zone_prev\">Попередній</string>\n    <string name=\"pref_show_navigation_mode_summary\">Короткочасно відобразити, коли читалку відкрито</string>\n    <string name=\"pref_show_navigation_mode\">Оверлей зон дотику</string>\n    <string name=\"pref_dns_over_https\">DNS поверх HTTPS (DoH)</string>\n    <string name=\"pref_download_new_categories_details\">Записи в виключених категоріях не буде завантажено, навіть якщо вона також знаходиться у включених категоріях.</string>\n    <string name=\"pref_category_auto_download\">Автозавантаження</string>\n    <string name=\"exclude\">Виключати: %s</string>\n    <string name=\"include\">Включати: %s</string>\n    <string name=\"none\">Немає</string>\n    <string name=\"pref_library_update_categories_details\">Записи в виключених категоріях не буде оновлено, навіть якщо вони також знаходяться у включених категоріях.</string>\n    <string name=\"action_sort_chapter_fetch_date\">Дата отримання розділу</string>\n    <string name=\"action_show_errors\">Тицьніть для перегляду подробиць</string>\n    <string name=\"update_check_eol\">Ця версія Android більше не підтримується</string>\n    <string name=\"clipboard_copy_error\">Не вдалось скопіювати до буферу обміну</string>\n    <string name=\"rotation_landscape\">Альбомна</string>\n    <string name=\"rotation_portrait\">Портретна</string>\n    <string name=\"rotation_type\">Орієнтація</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Створювати теки в відповідності до назви записів</string>\n    <string name=\"pref_create_folder_per_manga\">Зберігати сторінки до окремих тек</string>\n    <string name=\"pref_reader_actions\">Дії</string>\n    <string name=\"pref_grayscale\">Відтінки сірого</string>\n    <string name=\"notification_incognito_text\">Вимкнути режим інкогніто</string>\n    <string name=\"automatic_background\">Авто</string>\n    <string name=\"cancel_all_for_series\">Скасувати для усієї серії</string>\n    <string name=\"error_no_match\">Збігів не знайдено</string>\n    <string name=\"source_unsupported\">Джерело не підтримується</string>\n    <string name=\"unread\">Не прочитане</string>\n    <string name=\"error_sharing_cover\">Помилка відправлення обкладинки</string>\n    <string name=\"error_saving_cover\">Помилка при збереженні обкладинки</string>\n    <string name=\"cover_saved\">Обкладинку збережено</string>\n    <string name=\"manga_cover\">Обкладинка</string>\n    <string name=\"date\">Дата</string>\n    <string name=\"local_filter_order_by\">Сортувати за</string>\n    <string name=\"local_invalid_format\">Невірний формат розділів</string>\n    <string name=\"chapter_not_found\">Розділ не знайдено</string>\n    <string name=\"tracking_guide\">Гайд відстежування</string>\n    <string name=\"off\">Вимкнено</string>\n    <string name=\"on\">Увімкнено</string>\n    <string name=\"categorized_display_settings\">Налаштування сортування для кожної категорії</string>\n    <string name=\"restrictions\">Обмеження %s</string>\n    <string name=\"action_display_local_badge\">Локальне джерело</string>\n    <string name=\"information_empty_category_dialog\">У вашій бібліотеці ще немає категорій.</string>\n    <string name=\"about_dont_kill_my_app\">У деяких виробників є додаткові обмеження застосунків, котрі вбивають фонові сервіси. На цьому сайті більше інформації з приводу того, як це виправити.</string>\n    <string name=\"label_background_activity\">Фонова активність</string>\n    <string name=\"restore_miui_warning\">Резервування/Відновлення можуть не працювати належним чином, у випадку, якщо вимкнено Оптимізацію MIUI.</string>\n    <string name=\"enhanced_tracking_info\">Надає розширені функції для конкретних джерел. Записи автоматично відстежуються при додаванні до бібліотеки.</string>\n    <string name=\"enhanced_services\">Розширені трекери</string>\n    <string name=\"pref_lowest\">Найнижча</string>\n    <string name=\"pref_low\">Низька</string>\n    <string name=\"pref_high\">Висока</string>\n    <string name=\"pref_highest\">Найвища</string>\n    <string name=\"pref_hide_threshold\">Чутливість приховування меню при прокручуванні</string>\n    <string name=\"pref_dark_theme_pure_black\">Чистий чорний темний режим</string>\n    <string name=\"theme_yotsuba\">Йоцуба</string>\n    <string name=\"theme_yinyang\">Інь та Янь</string>\n    <string name=\"theme_tako\">Тако</string>\n    <string name=\"theme_strawberrydaiquiri\">Полуничний Дайкірі</string>\n    <string name=\"theme_midnightdusk\">Опівнічні Сутінки</string>\n    <string name=\"theme_greenapple\">Зелене яблуко</string>\n    <string name=\"theme_monet\">Динамічна</string>\n    <string name=\"pref_app_theme\">Тема застосунку</string>\n    <string name=\"action_start_downloading_now\">Розпочати завантаження зараз</string>\n    <string name=\"pref_inverted_colors\">Інвертовано</string>\n    <string name=\"relative_time_today\">Сьогодні</string>\n    <string name=\"theme_tealturquoise\">Бірюзова</string>\n    <string name=\"confirm_lock_change\">Виконайте автентифікацію, щоб підтвердити зміну</string>\n    <string name=\"label_default\">Типово</string>\n    <string name=\"pref_category_appearance\">Вигляд</string>\n    <string name=\"action_track\">Стежити</string>\n    <string name=\"getting_started_guide\">Посібник з початку роботи</string>\n    <string name=\"pref_tablet_ui_mode\">Планшетний інтерфейс</string>\n    <string name=\"help_translate\">Допомогти з перекладом</string>\n    <string name=\"ext_installer_pref\">Встановлювач</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku не запущений</string>\n    <string name=\"pref_remove_exclude_categories\">Виключені категорії</string>\n    <string name=\"action_sort_count\">Всього записів</string>\n    <string name=\"ext_install_service_notif\">Встановлюю розширення…</string>\n    <string name=\"ext_app_info\">Про застосунок</string>\n    <string name=\"ext_installer_legacy\">Спадок</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Встановіть і запустіть Shizuku, щоб використовувати Shizuku як інсталятор розширення.</string>\n    <string name=\"pref_verbose_logging\">Докладне журналювання</string>\n    <string name=\"pref_verbose_logging_summary\">Записувати докладні журнали до системного журналу (знижує продуктивність застосунку)</string>\n    <string name=\"notification_size_warning\">Попередження: великі оновлення можуть призвести до сповільнення джерел або збільшити використання батареї. Тицьніть задля подробиць.</string>\n    <string name=\"channel_app_updates\">Оновлення застосунку</string>\n    <string name=\"download_queue_size_warning\">Попередження: великий об\\'єм завантажень може призвести до сповільнення роботи джерел та/або блокуванню Mihon.</string>\n    <string name=\"ext_update_all\">Оновити все</string>\n    <string name=\"backup_info\">Ви повинні зберігати декілька резервних копій в інших місцях. Резервні копії можуть містити конфіденційні дані, включно зі збереженими паролями; будьте обережні, якщо ділитеся ними.</string>\n    <string name=\"label_warning\">Попередження</string>\n    <string name=\"action_display_language_badge\">Мова</string>\n    <string name=\"update_72hour\">Що 3 дні</string>\n    <string name=\"connected_to_wifi\">Тільки через Wi-Fi</string>\n    <string name=\"extension_api_error\">Не вдалося отримати список розширень</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Очищати кеш розділів під час запуску застосунку</string>\n    <string name=\"clear_database_source_item_count\">%1$d небібліотечних записів у базі даних</string>\n    <string name=\"database_clean\">Немає чого очищувати</string>\n    <string name=\"privacy_policy\">Політика конфіденційності</string>\n    <string name=\"pref_update_only_completely_read\">Пропустити непрочитаний(ні) розділ(и)</string>\n    <string name=\"save_chapter_as_cbz\">Зберегти архів як CBZ</string>\n    <string name=\"library_errors_help\">Для допомоги в виправленні помилок оновлення бібліотеки, дивіться %1$s</string>\n    <string name=\"publishing_finished\">Публікація завершена</string>\n    <string name=\"cancelled\">Відмінено</string>\n    <string name=\"on_hiatus\">Заморожено</string>\n    <string name=\"action_show_manga\">Показати запис</string>\n    <string name=\"action_display_cover_only_grid\">Сітка тільки з обкладинками</string>\n    <string name=\"pref_update_only_started\">Пропустити непочаті глави</string>\n    <string name=\"action_move_to_top_all_for_series\">Перемістити серію на початок</string>\n    <string name=\"rotation_reverse_portrait\">Портретна навпаки</string>\n    <string name=\"notification_update_error\">%1$d оновлення(нь) не вдалось</string>\n    <string name=\"skipped_reason_completed\">Пропущено, оскільки серія завершена</string>\n    <string name=\"skipped_reason_not_caught_up\">Пропущено через те, що є непрочитані розділи</string>\n    <string name=\"skipped_reason_not_started\">Пропущено, оскільки серія не почата</string>\n    <string name=\"empty_backup_error\">Немає елементів у бібліотеці для резервування</string>\n    <string name=\"download_notifier_split_page_not_found\">Сторінку %d не знайдено, при розділенні</string>\n    <string name=\"split_tall_images_summary\">Покращує продуктивність читалки</string>\n    <string name=\"webview_data_deleted\">Дані WebView очищені</string>\n    <string name=\"pref_clear_webview_data\">Очистити дані WebView</string>\n    <string name=\"reading_list\">Читаю</string>\n    <string name=\"wish_list\">Заплановано</string>\n    <string name=\"complete_list\">Прочитано</string>\n    <string name=\"on_hold_list\">Відкладено</string>\n    <string name=\"unfinished_list\">Не закінчено</string>\n    <string name=\"action_sort_last_manga_update\">Остання перевірка оновлень</string>\n    <string name=\"action_sort_unread_count\">Кількість непрочитаного</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Скидує режим читання та орієнтацію всіх серій</string>\n    <string name=\"theme_lavender\">Лаванда</string>\n    <string name=\"description_placeholder\">Без опису</string>\n    <string name=\"pref_reset_viewer_flags\">Скинути налаштування читалки для кожної серії</string>\n    <string name=\"pref_reset_viewer_flags_success\">Скидання всіх налаштувань</string>\n    <string name=\"custom_cover\">Користувацька обкладинка</string>\n    <string name=\"pref_reset_viewer_flags_error\">Не вдалось скинути налаштування</string>\n    <string name=\"empty_screen\">Йой, трапилась халепа</string>\n    <string name=\"error_saving_picture\">Не вдалось зберегти зображення</string>\n    <string name=\"not_installed\">Не встановлено</string>\n    <string name=\"network_not_metered\">Тільки в безлімітній мережі</string>\n    <string name=\"source_filter_empty_screen\">Встановлених джерел не знайдено</string>\n    <string name=\"source_empty_screen\">Джерел не знайдено</string>\n    <string name=\"disabled_nav\">Вимкнено</string>\n    <string name=\"learn_more\">Тицьніть задля подробиць</string>\n    <string name=\"cant_open_last_read_chapter\">Не вдається відкрити останній прочитаний розділ</string>\n    <string name=\"pref_app_language\">Мова застосунку</string>\n    <string name=\"ext_info_version\">Версія</string>\n    <string name=\"ext_info_language\">Мова</string>\n    <string name=\"ext_info_age_rating\">Вікові обмеження</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Не вдалось знайти шлях сторінки %d</string>\n    <string name=\"pref_navigate_pan\">Панорамування широких зображень</string>\n    <string name=\"pref_landscape_zoom\">Автоматичне масштабування широких зображень</string>\n    <string name=\"action_close\">Закрити</string>\n    <string name=\"update_check_open\">Відкрити на GitHub</string>\n    <string name=\"internal_error\">InternalError: Перевірте журнал халеп задля додаткової інформації</string>\n    <string name=\"delete_category_confirmation\">Чи бажаєте ви видалити категорію \\\"%s\\\"?</string>\n    <string name=\"delete_category\">Видалити категорію</string>\n    <string name=\"appwidget_updates_description\">Переглянути нещодавно оновлені записи бібліотеки</string>\n    <string name=\"appwidget_unavailable_locked\">Віджет не доступний при ввімкненому блокуванні застосунку</string>\n    <string name=\"pref_user_agent_string\">Типовий user agent</string>\n    <string name=\"action_remove_everything\">Видалити все</string>\n    <string name=\"pref_reset_user_agent_string\">Скинути типовий user agent</string>\n    <string name=\"multi_lang\">Багатомовне</string>\n    <string name=\"updates_last_update_info\">Останнє оновлення бібліотеки: %s</string>\n    <string name=\"missing_storage_permission\">Доступ до файлової системи не надано</string>\n    <string name=\"download_ahead\">Завантажувати наперед</string>\n    <string name=\"download_ahead_info\">Працює, якщо поточний розділ + наступний вже завантажені.</string>\n    <string name=\"remove_manga\">Ви збираєтесь видалити \\\"%s\\\" з вашої бібліотеки</string>\n    <string name=\"theme_tidalwave\">Приливна Хвиля</string>\n    <string name=\"are_you_sure\">Ви впевнені?</string>\n    <string name=\"update_already_running\">Оновлення вже розпочато</string>\n    <string name=\"error_user_agent_string_blank\">Рядок User agent не може бути пустим</string>\n    <string name=\"popular\">Популярне</string>\n    <string name=\"auto_download_while_reading\">Автоматичне завантаження під час читання</string>\n    <string name=\"crash_screen_description\">%s зіткнулися з неочікуваною помилкою. Ми пропонуємо вам поділитися журналами збоїв у нашому каналі підтримки на Discord.</string>\n    <string name=\"pref_appearance_summary\">Тема, формат дати та часу</string>\n    <string name=\"pref_library_summary\">Категорії, глобальне оновлення, гортання розділів</string>\n    <string name=\"pref_reader_summary\">Режим читання, відображення, навігація</string>\n    <string name=\"pref_downloads_summary\">Автоматичне завантаження, завантаження наперед</string>\n    <string name=\"pref_tracking_summary\">Одностороння синхронізація прогресу, розширена синхронізація</string>\n    <string name=\"pref_browse_summary\">Джерела, розширення, глобальний пошук</string>\n    <string name=\"pref_backup_summary\">Ручне та автоматичне резервування, сховище</string>\n    <string name=\"pref_security_summary\">Блокування застосунку, захист екрану</string>\n    <string name=\"pref_advanced_summary\">Вивантаження журнала з помилками, оптимізація батареї</string>\n    <string name=\"crash_screen_title\">Ой!</string>\n    <string name=\"crash_screen_restart_application\">Перезапустити застосунок</string>\n    <string name=\"skipped_reason_not_always_update\">Пропущено, оскільки серія не потребує оновлень</string>\n    <string name=\"action_search_hint\">Шукати…</string>\n    <string name=\"invalid_location\">Неприпустиме місцезнаходження %s</string>\n    <string name=\"unknown_title\">Невідомий тайтл</string>\n    <string name=\"updates_last_update_info_just_now\">Тільки що</string>\n    <string name=\"error_user_agent_string_invalid\">Невірне значення user agent</string>\n    <string name=\"action_open_random_manga\">Відкрити випадковий запис</string>\n    <string name=\"information_no_entries_found\">В цій категорії немає записів</string>\n    <string name=\"download_notifier_cache_renewal\">Перевірка завантажень</string>\n    <string name=\"fdroid_warning\">Збірки F-Droid офіційно не підтримуються.\n\\nТицьніть для того, щоб дізнатись більше.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Змусити застосунок повторно перевірити завантажені розділи</string>\n    <string name=\"action_display_show_continue_reading_button\">Кнопка \\\"Продовжити читання\\\"</string>\n    <string name=\"track_remove_date_conf_title\">Видалити дату?</string>\n    <string name=\"track_remove_start_date_conf_text\">Це призведе до видалення вибраної раніше дати початку з %s</string>\n    <string name=\"track_remove_finish_date_conf_text\">Це призведе до видалення раніше вибраної дати завершення з %s</string>\n    <string name=\"pref_invalidate_download_cache\">Недійсний індекс завантажень</string>\n    <string name=\"label_read_duration\">Тривалість читання</string>\n    <string name=\"label_titles_section\">Записи</string>\n    <string name=\"label_total_chapters\">Всього</string>\n    <string name=\"label_tracker_section\">Відстеження</string>\n    <string name=\"label_tracked_titles\">Відстежувані записи</string>\n    <string name=\"not_applicable\">Н/П</string>\n    <string name=\"minute_short\">%dm</string>\n    <string name=\"label_stats\">Статистика</string>\n    <string name=\"label_local\">Локально</string>\n    <string name=\"label_downloaded\">Завантажене</string>\n    <string name=\"label_started\">Розпочате</string>\n    <string name=\"label_overview_section\">Огляд</string>\n    <string name=\"label_titles_in_global_update\">У глобальному оновленні</string>\n    <string name=\"label_used\">Використано</string>\n    <string name=\"label_completed_titles\">Завершені записи</string>\n    <string name=\"label_read_chapters\">Прочитано</string>\n    <string name=\"label_mean_score\">Середня оцінка</string>\n    <string name=\"day_short\">%dd</string>\n    <string name=\"hour_short\">%dh</string>\n    <string name=\"seconds_short\">%ds</string>\n    <string name=\"action_not_now\">Не зараз</string>\n    <string name=\"pref_library_update_show_tab_badge\">Відображення кількості непрочитаних на значку \\\"Нове\\\"</string>\n    <string name=\"information_no_manga_category\">Категорія порожня</string>\n    <string name=\"copied_to_clipboard_plain\">Скопійовано в буфер обміну</string>\n    <string name=\"enhanced_services_not_installed\">Доступно, але джерело не встановлене: %s</string>\n    <string name=\"pref_skip_dupe_chapters\">Пропуск повторюваних розділів</string>\n    <string name=\"confirm_add_duplicate_manga\">У бібліотеці є запис з такою ж назвою.\n\\n\n\\nВи все ще хочете продовжити?</string>\n    <string name=\"track_error\">%1$s помилка: %2$s</string>\n    <string name=\"information_required_plain\">*необхідно</string>\n    <string name=\"pref_hide_in_library_items\">Приховати записи, які вже є в бібліотеці</string>\n    <string name=\"action_copy_to_clipboard\">Копіювати в буфер обміну</string>\n    <string name=\"action_update_category\">Оновити категорію</string>\n    <string name=\"split_tall_images\">Розділяти довгі зображення</string>\n    <string name=\"overlay_header\">Оверлей</string>\n    <string name=\"pref_page_rotate\">Повернути широкі сторінки за розміром</string>\n    <string name=\"pref_page_rotate_invert\">Перевернути орієнтацію обернутих широких сторінок</string>\n    <string name=\"pref_debug_info\">Інформація для відлагодження</string>\n    <string name=\"pref_chapter_swipe_end\">Проведіть пальцем праворуч</string>\n    <string name=\"pref_chapter_swipe_start\">Проведіть пальцем ліворуч</string>\n    <string name=\"pref_double_tap_zoom\">Двічі торкніться, щоб збільшити</string>\n    <string name=\"action_set_interval\">Встановити інтервал</string>\n    <string name=\"manga_display_interval_title\">Оцініть кожну</string>\n    <string name=\"action_filter_interval_custom\">Налаштувати інтервал оновленнь</string>\n    <string name=\"pref_update_only_in_release_period\">Передбачити наступний випуск</string>\n    <string name=\"action_sort_next_updated\">Наступне очікуване оновлення</string>\n    <string name=\"intervals_header\">Інтервали</string>\n    <string name=\"manga_display_modified_interval_title\">Налаштовано на оновлення кожної</string>\n    <string name=\"skipped_reason_not_in_release_period\">Пропущено, оскільки сьогодні не очікується жодного релізу</string>\n    <string name=\"action_ok\">ОК</string>\n    <string name=\"track_delete_remote_text\">Також видалити з %s</string>\n    <string name=\"track_delete_title\">Видалити відстеження %s?</string>\n    <string name=\"track_delete_text\">Це видалить відстеження локально.</string>\n    <string name=\"delete_downloaded\">Видалити завантажене</string>\n    <string name=\"has_results\">Має результати</string>\n    <string name=\"library_sync_complete\">Синхронізацію бібліотеки завершено</string>\n    <string name=\"syncing_library\">Синхронізація бібліотеки</string>\n    <string name=\"track_activity_name\">Логін трекера</string>\n    <string name=\"download_cache_invalidated\">Індекс завантажень недійсний</string>\n    <string name=\"information_cloudflare_help\">Натисніть тут, щоб отримати допомогу з Cloudflare</string>\n    <string name=\"create_backup_file_error\">Не вдалося створити файл резервної копії</string>\n    <string name=\"unlock_app_title\">Розблокувати %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Перемістити серію вниз</string>\n    <string name=\"exception_offline\">Немає Інтернет-з\\'єднання</string>\n    <string name=\"exception_http\">Http %d, перевірте вебсайт у WebView</string>\n    <string name=\"exception_unknown_host\">Не вдалося досягти %s</string>\n    <string name=\"pref_relative_format\">Відносні позначки часу</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" замість \\\"%2$s\\\"</string>\n    <string name=\"source_settings\">Налаштування джерела</string>\n    <string name=\"app_settings\">Налаштування застосунку</string>\n    <string name=\"action_apply\">Застосувати</string>\n    <string name=\"action_revert_to_default\">Повернути за замовчуванням</string>\n    <string name=\"scanlator\">Сканлейтор</string>\n    <string name=\"action_sort_tracker_score\">Оцінка трекера</string>\n    <string name=\"label_data_storage\">Дані та сховище</string>\n    <string name=\"action_create\">Створити</string>\n    <string name=\"relative_time_span_never\">Ніколи</string>\n    <string name=\"pref_flash_page_summ\">Зменшує гостинг на e-ink екранах</string>\n    <string name=\"last_auto_backup_info\">Востаннє автоматично зарезервовано: %s</string>\n    <string name=\"no_scanlators_found\">Перекладачів не знайдено</string>\n    <string name=\"pref_flash_page\">Блимати екраном при зміні сторінки</string>\n    <string name=\"pref_storage_usage\">Використання сховища</string>\n    <string name=\"notification_updating_progress\">Оновлення бібліотеки... (%s)</string>\n    <string name=\"file_null_uri_error\">Файл не вибрано</string>\n    <string name=\"exclude_scanlators\">Виключити перекладачів</string>\n    <string name=\"onboarding_permission_install_apps_description\">Щоб встановити джерело розширеннь.</string>\n    <string name=\"onboarding_guides_returning_user\">Перевстановлюєте %s?</string>\n    <string name=\"onboarding_permission_install_apps\">Встановити дозволи додатка</string>\n    <string name=\"ext_permission_install_apps_warning\">Потребуються дозволи для встановлення додатків. Натисніть сюди для отримання.</string>\n    <string name=\"invalid_backup_file_error\">Повна помилка:</string>\n    <string name=\"private_settings\">Включати конфіденційні налаштування (наприклад, токени для входу в трекери)</string>\n    <string name=\"available_disk_space_info\">Доступні: %1$s / Усього: %2$s</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Використання батареї на фоні</string>\n    <string name=\"onboarding_storage_selection_required\">Потрібно обрати папку</string>\n    <string name=\"onboarding_permission_notifications\">Дозвіл на сповіщення</string>\n    <string name=\"onboarding_permission_notifications_description\">Отримувати сповіщення про оновлення бібліотек та інше.</string>\n    <string name=\"pref_library_update_smart_update\">Розумні оновлення</string>\n    <string name=\"information_empty_repos\">У вас нема встановлених репозиторіїв.</string>\n    <string name=\"action_add_repo\">Додати репозиторій</string>\n    <string name=\"label_extension_repos\">Репозиторії розширень</string>\n    <string name=\"error_repo_exists\">Цей репозиторій вже існує!</string>\n    <string name=\"label_add_repo_input\">Посилання на репозиторій</string>\n    <string name=\"action_add_repo_message\">Додати додаткові репозиторії до Mihon. Це повинні бути посилання які закінчуються на \\\"index.min.json\\\".</string>\n    <string name=\"manga_interval_expected_update\">Нові глави передбачено будуть випущені приблизно в %1$s, перевіряючи кожні %2$s.</string>\n    <string name=\"onboarding_storage_help_info\">Оновлюєтесь з попередньої версії і не впевнені яку обрати? Перегляньте гайд по сховищу для додаткової інформації.</string>\n    <string name=\"onboarding_storage_help_action\">Гайд по сховищу</string>\n    <string name=\"manga_interval_custom_amount\">Своя частота оновлення:</string>\n    <string name=\"theme_nord\">Північ</string>\n    <string name=\"invalid_repo_name\">Недійсне посилання на репозиторій</string>\n    <string name=\"delete_repo_confirmation\">Бажаєте видалити репозиторій \\\"%s\\\"?</string>\n    <string name=\"no_location_set\">Не встановлено місце сховища</string>\n    <string name=\"pref_storage_location\">Місце сховища</string>\n    <string name=\"onboarding_permission_action_grant\">Отримати</string>\n    <string name=\"pref_storage_location_info\">Використовується для автоматичних бекапів, завантажень глав, та локальних джерел.</string>\n    <string name=\"manga_interval_expected_update_soon\">Незабаром</string>\n    <string name=\"ext_revoke_trust\">Скинути довірені невідомі розширення</string>\n    <string name=\"action_delete_repo\">Видалити репозиторій</string>\n    <string name=\"action_open_repo\">Репозиторій з відкритим початковим кодом</string>\n    <string name=\"selected\">Обрано</string>\n    <string name=\"not_selected\">Не обрано</string>\n    <string name=\"action_menu_overflow_description\">Більше опцій</string>\n    <string name=\"action_bar_up_description\">Навігація вгору</string>\n    <string name=\"onboarding_guides_new_user\">Новачки у %s? Ми рекомендуємо переглянути стартовий гайд.</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Уникати переривань для довготривалих оновлень бібліотек, завантажень, та бекапів.</string>\n    <string name=\"onboarding_storage_action_select\">Оберіть папку</string>\n    <string name=\"onboarding_heading\">Вітаємо!</string>\n    <string name=\"onboarding_action_next\">Далі</string>\n    <string name=\"onboarding_action_skip\">Пропустити</string>\n    <string name=\"onboarding_storage_info\">Оберіть папку де %1$s буде зберігати збережені глави, бекапи, та інше.\n\\n\n\\nРекомендуємо обрати окрему папку.\n\\n\n\\nОбрана папка: %2$s</string>\n    <string name=\"onboarding_action_finish\">Почнемо</string>\n    <string name=\"onboarding_description\">Давайте для початку налаштуємо дещо. Ви завжди зможете змінити ці налаштування потім.</string>\n    <string name=\"pref_onboarding_guide\">Гайд новачка</string>\n    <string name=\"action_add_anyway\">Додати у будь-якому разі</string>\n    <string name=\"action_replace_repo_title\">Відбиток пальця для підпису ключа вже існує</string>\n    <string name=\"action_replace_repo_message\">Репозиторій %1$s має такий самий відбиток ключа підпису, як і %2$s.\n\\nЯкщо це очікувано, %2$s буде замінено, в іншому випадку зверніться до вашого обслуговуючого репозиторію.</string>\n    <string name=\"action_view_upcoming\">Переглянути майбутні оновлення</string>\n    <string name=\"upcoming_calendar_prev\">Попередній місяць</string>\n    <string name=\"action_migrate_duplicate\">Перенести існуючий запис</string>\n    <string name=\"action_replace_repo\">Замінити</string>\n    <string name=\"pref_display_profile\">Власний профіль відображення</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Вимкнути зменшення масштабу</string>\n    <string name=\"label_upcoming\">Незабаром</string>\n    <string name=\"upcoming_calendar_next\">Наступний місяць</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Оновити прогрес коли главу помічено прочитаною</string>\n    <string name=\"manga_interval_expected_update_null\">Ця манга завершена, або не має приблизної дати релізу.</string>\n    <string name=\"action_sort_random\">Випадково</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Надіслати анонімний звіт про помилку</string>\n    <string name=\"onboarding_permission_crashlytics\">Надіслати звіт про помилку</string>\n    <string name=\"onboarding_permission_analytics\">Дозволити аналітику</string>\n    <string name=\"pref_flash_duration_summary\">%1$s мс</string>\n    <string name=\"pref_firebase\">Аналітика та Звіти про помилки</string>\n    <string name=\"action_copy_link\">Копіювати посилання</string>\n    <string name=\"onboarding_permission_analytics_description\">Надсилати анонімну інформацію про використання для покращення застосунку.</string>\n    <string name=\"pref_security\">Безпека</string>\n    <string name=\"firebase_summary\">Надсилання звітів про помилки та аналітику дозволить нам ідентифікувати та виправити недоліки, покращити працездатність та зробити майбутні оновлення більш актуальними для ваших потреб</string>\n    <string name=\"ext_confirm_remove\">Видалити Розширення?</string>\n    <string name=\"ext_remove\">Видалити</string>\n    <string name=\"remove_private_extension_message\">Дійсно видалити \\\"%s\\\"?</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Пропускати завантаження копій прочитаних глав</string>\n    <string name=\"add_repo_confirmation\">Дійсно додати репозиторій \\\"%s\\\"?</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/uz/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"num_categories\">\n        <item quantity=\"one\">%d toifa</item>\n        <item quantity=\"other\">%d toifa</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"one\">Kecha</item>\n        <item quantity=\"other\">%1$d kun oldin</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"one\">%1$s daqiqadan so\\'ng</item>\n        <item quantity=\"other\">%1$s daqiqadan so\\'ng</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/uz/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_view_chapters\">Bõlimlarni kõrish</string>\n    <string name=\"action_edit_cover\">Muqovani õzgartirish</string>\n    <string name=\"action_move_category\">Kategoriyalar õrnatish</string>\n    <string name=\"action_rename_category\">Kategoriyani qayta nomlash</string>\n    <string name=\"action_edit_categories\">Kategoriyalarni õzgartirish</string>\n    <string name=\"action_add_category\">Kategoriya qõshish</string>\n    <string name=\"information_empty_category\">Kutubxonada toifalar yo\\'q. Toifalar yaratish uchun «Qo\\'shish» tugmasini bosing.</string>\n    <string name=\"action_add\">Qõshish</string>\n    <string name=\"action_edit\">Õzgartirish</string>\n    <string name=\"action_disable_all\">Hammasini õchirish</string>\n    <string name=\"action_enable_all\">Hammasini yoqish</string>\n    <string name=\"action_update_library\">Bibliotekani yangilash</string>\n    <string name=\"action_delete\">Õchirish</string>\n    <string name=\"action_remove_bookmark\">Belgini olib tashlash</string>\n    <string name=\"action_bookmark\">Xatchõp</string>\n    <string name=\"action_download\">Yuklash</string>\n    <string name=\"action_mark_previous_as_read\">Oldingisini õqilgan deb belgilash</string>\n    <string name=\"action_mark_as_unread\">Õqilmagan deb belgilash</string>\n    <string name=\"action_mark_as_read\">Õqilgan deb belgilash</string>\n    <string name=\"action_select_inverse\">Teskari tanlov</string>\n    <string name=\"action_select_all\">Hammasini tanlash</string>\n    <string name=\"action_global_search\">Global qidirish</string>\n    <string name=\"action_search_settings\">Qidirish sozlamalari</string>\n    <string name=\"action_search\">Qidirish</string>\n    <string name=\"action_sort_date_added\">Qõshilgan sana</string>\n    <string name=\"action_sort_latest_chapter\">Eng oxirgi bõlim</string>\n    <string name=\"action_sort_last_read\">Oxirgi õqilgan</string>\n    <string name=\"action_sort_total\">Umumiy bõlimlar</string>\n    <string name=\"action_sort_alpha\">Alifbo ko\\'rinishida</string>\n    <string name=\"action_filter_empty\">Filtrni o\\'chirish</string>\n    <string name=\"action_filter_unread\">O\\'qilmagan</string>\n    <string name=\"action_filter_bookmarked\">Xatchopda</string>\n    <string name=\"action_filter\">Filtr</string>\n    <string name=\"action_menu\">Menyu</string>\n    <string name=\"action_settings\">Sozlamalar</string>\n    <string name=\"history\">Tarix</string>\n    <string name=\"track\">Kuzatish</string>\n    <string name=\"chapters\">Boblar</string>\n    <string name=\"manga\">Kutubxona yozuvlari</string>\n    <string name=\"categories\">Toifalar</string>\n    <string name=\"information_empty_library\">Sizning kutubxonangiz bo\\'sh</string>\n    <string name=\"information_no_recent_manga\">Yaqin vaqtda hech narsa o\\'qilmagan</string>\n    <string name=\"information_no_recent\">Yangilanishlar yo\\'q</string>\n    <string name=\"information_no_downloads\">Yuklamalar yo\\'q</string>\n    <string name=\"label_help\">Yordam</string>\n    <string name=\"label_extension_info\">Qo\\'shimchalar haqida ma\\'lumot</string>\n    <string name=\"label_extensions\">Qo\\'shimchalar</string>\n    <string name=\"label_migration\">Kõchish</string>\n    <string name=\"label_backup\">Saqlash</string>\n    <string name=\"label_sources\">Manbalar</string>\n    <string name=\"label_recent_manga\">Tarix</string>\n    <string name=\"label_recent_updates\">Yangilanishlar</string>\n    <string name=\"label_library\">Kutubxona</string>\n    <string name=\"label_download_queue\">Yuklash navbati</string>\n    <string name=\"label_settings\">Sozlamalar</string>\n    <string name=\"label_more\">Kõproq</string>\n    <string name=\"name\">Name</string>\n    <string name=\"label_stats\">Statistika</string>\n    <string name=\"label_default\">Standart</string>\n    <string name=\"label_started\">Boshlangan</string>\n    <string name=\"label_local\">Foydalanuvchi</string>\n    <string name=\"label_downloaded\">Yuklangan</string>\n    <string name=\"off\">Oʻchiq</string>\n    <string name=\"action_sort_count\">Jami qismlar</string>\n    <string name=\"on\">Yoniq</string>\n    <string name=\"action_sort_last_manga_update\">Oxirgi yangilanish tekshiruvi</string>\n    <string name=\"label_warning\">Ogohlantirish</string>\n    <string name=\"confirm_lock_change\">O\\'zgartirishni tasdiqlash uchun autentifikatsiya qiling</string>\n    <string name=\"action_filter_tracked\">Kuzatilayotgan</string>\n    <string name=\"action_display_show_number_of_items\">Qismlar sonini ko\\'rsatish</string>\n    <string name=\"action_display_show_continue_reading_button\">«Davom ettirish» tugmasi</string>\n    <string name=\"action_pin\">Pin</string>\n    <string name=\"action_order_by_upload_date\">Yuklab olish sanasi</string>\n    <string name=\"action_oldest\">Eng eski</string>\n    <string name=\"action_asc\">Ko\\'tarilish</string>\n    <string name=\"action_desc\">Pasayish</string>\n    <string name=\"action_install\">O\\'rnatish</string>\n    <string name=\"action_save\">Saqlash</string>\n    <string name=\"app_not_available\">Hozir ilovaga kirish iloji yo\\'q</string>\n    <string name=\"pref_category_general\">Asosiy</string>\n    <string name=\"pref_category_reader\">Rider</string>\n    <string name=\"pref_appearance_summary\">Mavzu, sana va vaqt formati</string>\n    <string name=\"pref_reader_summary\">O\\'qish rejimi, ko\\'rinish, navigatsiya</string>\n    <string name=\"pref_tracking_summary\">Bir tomonlama sinxronlash, kengaytirilgan sinxronlash</string>\n    <string name=\"theme_system\">Tizimdagidek</string>\n    <string name=\"theme_lavender\">Lavanda</string>\n    <string name=\"delete_category_confirmation\">\\\"%s\\\" toifasini o\\'chirishni hohlaysizmi?</string>\n    <string name=\"action_previous_chapter\">Oldingi bob</string>\n    <string name=\"action_next_chapter\">Keyingi bob</string>\n    <string name=\"action_migrate\">Ko\\'chirish</string>\n    <string name=\"action_display_local_badge\">Foydalanuvchi manbaasi</string>\n    <string name=\"action_display_language_badge\">Til</string>\n    <string name=\"action_disable\">O\\'chirish</string>\n    <string name=\"action_sort\">Saralash</string>\n    <string name=\"action_newest\">Eng yangi</string>\n    <string name=\"loading\">Yuklanmoqda…</string>\n    <string name=\"internal_error\">InternalError: Qo\\'shimcha ma\\'lumot uchun xatolar ro\\'yhatini ko\\'ring</string>\n    <string name=\"theme_light\">O\\'chiq</string>\n    <string name=\"theme_greenapple\">Yashil olma</string>\n    <string name=\"pref_category_theme\">Mavzu</string>\n    <string name=\"pref_security_summary\">Ilova qulflanishi, ekran himoyasi</string>\n    <string name=\"pref_manage_notifications\">Bildirishnomalarni boshqarish</string>\n    <string name=\"delete_category\">Toifani o\\'chirish</string>\n    <string name=\"action_remove\">O\\'chirish</string>\n    <string name=\"action_start\">Boshlash</string>\n    <string name=\"action_open_in_browser\">Brauzerda ochish</string>\n    <string name=\"action_open_in_web_view\">WebView\\'da ochish</string>\n    <string name=\"action_webview_back\">Orqaga</string>\n    <string name=\"action_webview_forward\">Oldinga</string>\n    <string name=\"pref_browse_summary\">Manbaalar, kengaytmalar, global qidiruv</string>\n    <string name=\"pref_backup_summary\">Qo\\'lbola va avtomatik zaxira nusxalar</string>\n    <string name=\"pref_date_format\">Sana formati</string>\n    <string name=\"theme_tidalwave\">Toshgan to\\'lqin</string>\n    <string name=\"action_start_downloading_now\">Yuklashni boshlash</string>\n    <string name=\"action_display_comfortable_grid\">Qulay ko\\'rinish</string>\n    <string name=\"theme_monet\">O\\'zgaruvchan</string>\n    <string name=\"action_resume\">Davom ettirish</string>\n    <string name=\"action_sort_chapter_fetch_date\">Oxirgi bob sanasi</string>\n    <string name=\"pref_app_language\">Ilova tili</string>\n    <string name=\"action_sort_unread_count\">O\\'qilmagan boblar</string>\n    <string name=\"action_display_mode\">Ko\\'rsatish rejimi</string>\n    <string name=\"action_cancel_all\">Barchasini bekor qilish</string>\n    <string name=\"action_remove_everything\">Barchasini o\\'chirish</string>\n    <string name=\"action_display\">Ko\\'rsatish</string>\n    <string name=\"action_display_grid\">Ixcham ko\\'rinish</string>\n    <string name=\"action_cancel\">Bekor qilish</string>\n    <string name=\"theme_dark\">Yoniq</string>\n    <string name=\"action_retry\">Takrorlash</string>\n    <string name=\"action_display_show_tabs\">Toifa yorliqlarini ko\\'rish</string>\n    <string name=\"action_webview_refresh\">Yangilash</string>\n    <string name=\"pref_downloads_summary\">Avto yuklash, oldindan yuklash</string>\n    <string name=\"pref_advanced_summary\">Xatolar ro\\'yhatini yuklash, quvvat sarfini optimizatsiyalash</string>\n    <string name=\"action_pause\">Pauza</string>\n    <string name=\"action_search_hint\">Qidirish…</string>\n    <string name=\"action_unpin\">Bo\\'shatish</string>\n    <string name=\"cancel_all_for_series\">Ushbu qism uchun barchasini bekor qilish</string>\n    <string name=\"action_order_by_chapter_number\">Bob soni</string>\n    <string name=\"action_move_to_top\">Boshiga</string>\n    <string name=\"action_move_to_top_all_for_series\">Qismni boshiga ko\\'chirish</string>\n    <string name=\"pref_category_appearance\">Ko\\'rsatish</string>\n    <string name=\"pref_category_downloads\">Yuklamalar</string>\n    <string name=\"pref_category_tracking\">Kuzatilayotgan</string>\n    <string name=\"pref_category_about\">Ma\\'lumot</string>\n    <string name=\"pref_app_theme\">Ilova mavzusi</string>\n    <string name=\"theme_midnightdusk\">Yarim tungi oqshom</string>\n    <string name=\"theme_strawberrydaiquiri\">Qulupnayli Daikiri</string>\n    <string name=\"theme_yinyang\">In va Yang</string>\n    <string name=\"theme_yotsuba\">Yotsuba</string>\n    <string name=\"pref_category_library\">Kutubxona</string>\n    <string name=\"action_close\">Yopish</string>\n    <string name=\"action_show_manga\">Qismni ko\\'rsatish</string>\n    <string name=\"action_not_now\">Hozir emas</string>\n    <string name=\"theme_tealturquoise\">Firuz</string>\n    <string name=\"lock_with_biometrics\">Biometrik qulflash</string>\n    <string name=\"action_restore\">Tiklash</string>\n    <string name=\"action_move_to_bottom\">Oxiriga</string>\n    <string name=\"action_share\">Ulashish</string>\n    <string name=\"action_reset\">Tashlash</string>\n    <string name=\"action_undo\">Bekor qilish</string>\n    <string name=\"pref_category_security\">Xavfsizlik</string>\n    <string name=\"pref_dark_theme_pure_black\">Qop-qora qorong\\'u rejim</string>\n    <string name=\"action_open_random_manga\">Tasodifiy qismni ochish</string>\n    <string name=\"action_display_list\">Ro\\'yhat</string>\n    <string name=\"action_display_cover_only_grid\">Nomsiz ko\\'rinish</string>\n    <string name=\"action_display_download_badge\">Yuklab olingan boblar</string>\n    <string name=\"action_open_log\">Logni ochish</string>\n    <string name=\"action_show_errors\">Tafsilotlarni ko\\'rish uchun bosing</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"pref_category_advanced\">Qo\\'shimcha</string>\n    <string name=\"pref_library_summary\">Toifalar, global yangilanish</string>\n    <string name=\"lock_when_idle\">Ishlamayotganda qulflash</string>\n    <string name=\"lock_always\">Doim</string>\n    <string name=\"hide_notification_content\">Bildirishnoma mazmunini yashirish</string>\n    <string name=\"secure_screen\">Ilova ekrani himoyasi</string>\n    <string name=\"pref_show_nsfw_source\">Manbaa va kengaytmalar ro\\'yhatida ko\\'rsatish</string>\n    <string name=\"parental_controls_info\">Bu, ilovada norasmiy yoki noto\\'g\\'ri belgilangan kengaytmalardan NSFW (18+) kontent paydo bo\\'lishini oldini olmaydi.</string>\n    <string name=\"relative_time_today\">Bugun</string>\n    <string name=\"pref_category_display\">Ko\\'rsatish</string>\n    <string name=\"pref_library_columns\">Qismlar soni</string>\n    <string name=\"pref_update_only_started\">Qism boshlanmagan</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Kutubxona yangilanishida yangi muqova va ma\\'lumotlarni tekshirish</string>\n    <string name=\"default_category_summary\">Doim so\\'rash</string>\n    <string name=\"categorized_display_settings\">Har toifa o\\'z sozlamasiga ega</string>\n    <string name=\"pref_library_update_categories_details\">Cheklangan toifalardagi qismlar yangilanmaydi, yoniq toifalarga kirsaham.</string>\n    <string name=\"none\">Yo\\'q</string>\n    <string name=\"multi_lang\">Ko\\'p tilli</string>\n    <string name=\"ext_updates_pending\">Yangilanishlar mavjud</string>\n    <string name=\"untrusted_extension\">Ishonchsiz kengaytma</string>\n    <string name=\"ext_untrusted\">Ishonchsiz</string>\n    <string name=\"untrusted_extension_message\">Bu kengaytma ishonchsiz sertifikat tomonidan imzolangan va faollashtirilmagan.\n\\n\n\\nZararli kengaytma Mihonda saqlanadigan barcha hisobga kirish ma\\'lumotlarini o\\'qishi, yoki ixtiyoriy kodni bajarishi mumkin.\n\\n\n\\nBu sertifikatga ishonish orqali, ushbu xavflarni qabul qilasiz.</string>\n    <string name=\"pref_dual_page_invert_summary\">Agar keng sahifalarning bo\\'linishi o\\'qish yo\\'nalishiga mos kelmasa</string>\n    <string name=\"pref_fullscreen\">To\\'liq ekran rejimi</string>\n    <string name=\"pref_dual_page_split\">Keng sahifalarni bo\\'lish</string>\n    <string name=\"pref_dual_page_invert\">Keng sahifalarni teskarisiga ajratish</string>\n    <string name=\"pref_crop_borders\">Chetlarini kesish</string>\n    <string name=\"pref_color_filter_mode\">Rang filtri rejimi</string>\n    <string name=\"all\">Barchasi</string>\n    <string name=\"pref_library_update_show_tab_badge\">O\\'qilmagan boblar soni «Yangilanishlar» ikonida</string>\n    <string name=\"ext_pending\">Kutilmoqda</string>\n    <string name=\"ext_downloading\">Yuklanmoqda</string>\n    <string name=\"ext_installing\">O\\'rnatilmoqda</string>\n    <string name=\"obsolete_extension_message\">Bu kangaytma boshqa mavjud emas. U noto\\'g\\'ri ishlashi, va ilovada muammolar keltirib chiqarishi mumkin.</string>\n    <string name=\"extension_api_error\">Kengaytmalar ro\\'yhatini olib bo\\'lmadi</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) manbaalari</string>\n    <string name=\"secure_screen_summary\">Ilova himoyasi dasturlar orasida almashishda ilova ekranini yashiradi, va skrinshot qilish imkonini cheklaydi</string>\n    <string name=\"pref_update_only_completely_read\">O\\'qilmagan bob(lar) bor</string>\n    <string name=\"ext_update\">Yangilash</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_show_page_number\">Sahifa raqamini ko\\'rsatish</string>\n    <string name=\"update_6hour\">Har 6 soatda</string>\n    <string name=\"pref_reader_navigation\">Navigatsiya</string>\n    <string name=\"landscape\">Landshaft</string>\n    <string name=\"update_48hour\">Har 2 kunda</string>\n    <string name=\"ext_uninstall\">O\\'chirish</string>\n    <string name=\"restrictions\">Cheklovlar: %s</string>\n    <string name=\"update_12hour\">Har 12 soatda</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Shizukudan kengaytma o\\'rnatishda foydalanish uchun, Shizukuni o\\'rnating va ishga tushuring.</string>\n    <string name=\"ext_trust\">Ishonchli</string>\n    <string name=\"update_weekly\">Har hafta</string>\n    <string name=\"update_72hour\">HAr 3 kunda</string>\n    <string name=\"charging\">Quvvatlanayotganda</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku ishlamayapti</string>\n    <string name=\"pref_skip_filtered_chapters\">Filtrlangan boblarni o\\'tkazib yuborish</string>\n    <string name=\"pref_skip_read_chapters\">O\\'qilgan boblarni o\\'tkazib yuborish</string>\n    <string name=\"filter_mode_darken\">Qoraytirish</string>\n    <string name=\"pref_custom_color_filter\">Foydalanuvchi rang filtri</string>\n    <string name=\"lock_never\">Hech qachon</string>\n    <string name=\"pref_show_reading_mode_summary\">O\\'qish boshlanganida o\\'qish rejimini birozga ko\\'rsatish</string>\n    <string name=\"pref_update_only_non_completed\">Qism yakunlangan</string>\n    <string name=\"ext_install_service_notif\">Kengaytma o\\'rnatilmoqda…</string>\n    <string name=\"pref_category_library_update\">Global yangilanish</string>\n    <string name=\"pref_library_update_refresh_metadata\">Metama\\'lumotlarni yangilash</string>\n    <string name=\"exclude\">Istisno qilish: %s</string>\n    <string name=\"ext_installer_legacy\">Standart</string>\n    <string name=\"pref_show_navigation_mode_summary\">O\\'qish boshlanishida birozga ko\\'rsatish</string>\n    <string name=\"pref_show_navigation_mode\">Teginish hududlari</string>\n    <string name=\"ext_installer_pref\">O\\'rnatuvchi</string>\n    <string name=\"pref_page_transitions\">Sahifalar o\\'tishini animatsiyalash</string>\n    <string name=\"default_category\">Asosiy toifalar</string>\n    <string name=\"ext_update_all\">Barchasini yangilash</string>\n    <string name=\"ext_obsolete\">Eskirgan</string>\n    <string name=\"ext_install\">O\\'rnatish</string>\n    <string name=\"ext_app_info\">Ilova haqida</string>\n    <string name=\"pref_inverted_colors\">Teskari ranglar</string>\n    <string name=\"ext_nsfw_warning\">Ushbu kengaytma manbaalarida NSFW (18+) bo\\'lishi mumkin</string>\n    <string name=\"connected_to_wifi\">Faqat Wi-Fi orqali</string>\n    <string name=\"ext_info_language\">Til</string>\n    <string name=\"portrait\">Portret</string>\n    <string name=\"update_24hour\">Har kun</string>\n    <string name=\"pref_library_update_interval\">Avtomatik yangilanish</string>\n    <string name=\"update_never\">O\\'chiq</string>\n    <string name=\"pref_grayscale\">Kulrang</string>\n    <string name=\"filter_mode_lighten\">Yoritish</string>\n    <string name=\"pref_keep_screen_on\">Ekranni o\\'chirmaslik</string>\n    <string name=\"ext_installed\">O\\'rnatildi</string>\n    <string name=\"ext_info_version\">Versiya</string>\n    <string name=\"pref_double_tap_anim_speed\">Ikki marta bosilganda animatsiya tezligi</string>\n    <string name=\"pref_custom_brightness\">Foydalanuvchi tanlagan yoruqlik</string>\n    <string name=\"ext_info_age_rating\">Yosh cheklovi</string>\n    <string name=\"network_not_metered\">Faqat cheksiz tarmoq orqali</string>\n    <string name=\"include\">O\\'z ichiga oladi: %s</string>\n    <string name=\"pref_cutout_short\">Kesilgan maydondagi ma\\'lumotni ko\\'rsatish</string>\n    <string name=\"pref_show_reading_mode\">O\\'qish rejimini ko\\'rsatish</string>\n    <string name=\"filter_mode_overlay\">Qoplama</string>\n    <string name=\"filter_mode_multiply\">Ko\\'paytirish</string>\n    <string name=\"filter_mode_screen\">Ekran</string>\n    <string name=\"pref_library_update_restriction\">Uskuna uchun avtomatik yangilanishlarni cheklash</string>\n    <string name=\"pref_skip_dupe_chapters\">Takrorlanuvchi boblarni o\\'tkazib yuborish</string>\n    <string name=\"pref_create_folder_per_manga\">Sahifalarni alohida papkalarga saqlash</string>\n    <string name=\"tapping_inverted_horizontal\">Gorizontal</string>\n    <string name=\"tapping_inverted_vertical\">Vertikal</string>\n    <string name=\"tapping_inverted_both\">Ikkala taraf</string>\n    <string name=\"pref_reader_actions\">Amallar</string>\n    <string name=\"pref_read_with_long_tap\">Uzoq teginishda ko\\'rsatiladigan variantlar</string>\n    <string name=\"webtoon_viewer\">Vebtun</string>\n    <string name=\"pref_viewer_nav\">Tegish qismlari</string>\n    <string name=\"nav_zone_left\">Chap</string>\n    <string name=\"nav_zone_right\">O\\'ng</string>\n    <string name=\"right_to_left_viewer\">O\\'ngdan chapga</string>\n    <string name=\"vertical_viewer\">Vertikal</string>\n    <string name=\"l_nav\">L-simon</string>\n    <string name=\"pref_reader_theme\">Orqa fon rangi</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Teskari ovoz tugmalari</string>\n    <string name=\"black_background\">Qora</string>\n    <string name=\"automatic_background\">Avtomatik</string>\n    <string name=\"disabled_nav\">O\\'chirilgan</string>\n    <string name=\"nav_zone_prev\">Oldingi</string>\n    <string name=\"vertical_plus_viewer\">Uzluksiz vertikal</string>\n    <string name=\"pager_viewer\">Sahifabay</string>\n    <string name=\"white_background\">Oq</string>\n    <string name=\"tapping_inverted_none\">Yo\\'q</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Qism nomiga asoslanib papka yaratish</string>\n    <string name=\"nav_zone_next\">Keyingi</string>\n    <string name=\"left_to_right_viewer\">Chapdan o\\'ngga</string>\n    <string name=\"pref_read_with_volume_keys\">Ovoz tugmalari</string>\n    <string name=\"gray_background\">Kulrang</string>\n    <string name=\"pref_viewer_type\">O\\'qish rejimi</string>\n    <string name=\"kindlish_nav\">Kindle-simon</string>\n    <string name=\"edge_nav\">Chekkalar</string>\n    <string name=\"right_and_left_nav\">O\\'ng va chap</string>\n    <string name=\"scale_type_fit_screen\">Ekranga sig\\'dirish</string>\n    <string name=\"scale_type_stretch\">Cho\\'zish</string>\n    <string name=\"scale_type_fit_width\">Eniga</string>\n    <string name=\"double_tap_anim_speed_0\">Animatsiyasiz</string>\n    <string name=\"double_tap_anim_speed_normal\">Normal</string>\n    <string name=\"double_tap_anim_speed_fast\">Tez</string>\n    <string name=\"pref_rotation_type\">Standart aylanish</string>\n    <string name=\"pref_highest\">Eng baland</string>\n    <string name=\"pref_high\">Baland</string>\n    <string name=\"color_filter_b_value\">K</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"fourth_to_last\">O\\'qilgan bobdan to\\'rtinchisi</string>\n    <string name=\"fifth_to_last\">O\\'qilgan bobdan beshinchisi</string>\n    <string name=\"pref_category_auto_download\">Avto-yuklash</string>\n    <string name=\"pref_download_new\">Yangi boblarni yuklash</string>\n    <string name=\"rotation_type\">Aylanish turi</string>\n    <string name=\"rotation_free\">Tizim</string>\n    <string name=\"color_filter_r_value\">Q</string>\n    <string name=\"pref_lowest\">Eng past</string>\n    <string name=\"rotation_landscape\">Landshaft</string>\n    <string name=\"rotation_reverse_portrait\">Teskari portret</string>\n    <string name=\"pref_category_delete_chapters\">Boblarni o\\'chirish</string>\n    <string name=\"invalid_location\">Noto\\'g\\'ri joylashuv: %s</string>\n    <string name=\"pref_low\">Past</string>\n    <string name=\"pref_remove_after_marked_as_read\">«O\\'qilgan» deb belgilangandan so\\'ng o\\'chirish</string>\n    <string name=\"zoom_start_automatic\">Avtomatik</string>\n    <string name=\"rotation_portrait\">Portret</string>\n    <string name=\"rotation_force_portrait\">O\\'zgarmas portret</string>\n    <string name=\"pref_hide_threshold\">Aylantirish vaqtida menyu yashirish sezuvchanligi</string>\n    <string name=\"rotation_force_landscape\">O\\'zgarmas landshaft</string>\n    <string name=\"pref_image_scale_type\">Kattalashtirish</string>\n    <string name=\"pref_remove_after_read\">O\\'qib bo\\'lingandan so\\'ng o\\'chirish</string>\n    <string name=\"last_read_chapter\">Oxirgi o\\'qilgan bob</string>\n    <string name=\"second_to_last\">Oxiridan oldingi o\\'qilgan bob</string>\n    <string name=\"pref_landscape_zoom\">Tasvirni gorizontal kattalashtirish</string>\n    <string name=\"color_filter_g_value\">Y</string>\n    <string name=\"disabled\">O\\'chirilgan</string>\n    <string name=\"zoom_start_left\">Chapdan</string>\n    <string name=\"pref_remove_exclude_categories\">Istisno qilingan toifalar</string>\n    <string name=\"pref_navigate_pan\">Keng rasmlarga teginishda panoramalash</string>\n    <string name=\"scale_type_original_size\">Original o\\'lcham</string>\n    <string name=\"pref_zoom_start\">Kattalashtirishning boshlang\\'ich pozitsiyasi</string>\n    <string name=\"scale_type_smart_fit\">Aqlli</string>\n    <string name=\"zoom_start_right\">O\\'ngdan</string>\n    <string name=\"zoom_start_center\">Markazda</string>\n    <string name=\"pref_always_show_chapter_transition\">Boblar aro o\\'tish</string>\n    <string name=\"pref_category_reading_mode\">O\\'qish rejimi</string>\n    <string name=\"pref_category_reading\">O\\'qish</string>\n    <string name=\"scale_type_fit_height\">Uzunasiga</string>\n    <string name=\"pref_webtoon_side_padding\">Yon bo\\'shliq</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Xatchopli boblarni o\\'chirish</string>\n    <string name=\"third_to_last\">O\\'qilgan bobdan uchinchisi</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/vi/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">Có %d bản cập nhật cho các tiện ích mở rộng sẵn sàng</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d chương mới có</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">Cho %d chương</item>\n    </plurals>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">Sau %1$s phút</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d danh mục</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">Chương %1$s và %2$d</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">Đã bỏ qua %d chương, vì nguồn đang bị thiếu hoặc đã bị lọc ra</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d bộ theo dõi</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">%1$s chương</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">Còn lại %1$s</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">Hoàn tất trong %1$s với %2$s lỗi</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d ngày trước</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">%d chương chưa đọc tiếp</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">%d Chương tiếp theo</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">Đang thiếu %1$s chương</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d ngày</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d kho</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"other\">Trong %1$d ngày</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"other\">%1$s trang</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/vi/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">Tên</string>\n    <string name=\"label_settings\">Cài đặt</string>\n    <string name=\"label_download_queue\">Hàng chờ tải xuống</string>\n    <string name=\"label_library\">Thư viện</string>\n    <string name=\"label_recent_manga\">Lịch sử</string>\n    <string name=\"label_recent_updates\">Cập nhật</string>\n    <string name=\"label_backup\">Sao lưu và khôi phục</string>\n    <string name=\"action_settings\">Cài đặt</string>\n    <string name=\"action_filter\">Bộ lọc</string>\n    <string name=\"action_filter_bookmarked\">Đã đánh dấu</string>\n    <string name=\"action_filter_unread\">Chưa đọc</string>\n    <string name=\"action_filter_empty\">Bỏ bộ lọc</string>\n    <string name=\"action_sort_alpha\">Theo bảng chữ cái</string>\n    <string name=\"action_sort_last_read\">Đã đọc gần nhất</string>\n    <string name=\"action_search\">Tìm kiếm</string>\n    <string name=\"action_select_all\">Chọn tất cả</string>\n    <string name=\"action_mark_as_read\">Đánh dấu là đã đọc</string>\n    <string name=\"action_mark_as_unread\">Đánh dấu là chưa đọc</string>\n    <string name=\"action_mark_previous_as_read\">Đánh dấu các chương trước là đã đọc</string>\n    <string name=\"action_download\">Tải xuống</string>\n    <string name=\"action_bookmark\">Đánh dấu chương</string>\n    <string name=\"action_remove_bookmark\">Bỏ đánh dấu chương</string>\n    <string name=\"action_delete\">Xóa</string>\n    <string name=\"action_update_library\">Cập nhật thư viện</string>\n    <string name=\"action_edit\">Sửa</string>\n    <string name=\"action_add\">Thêm</string>\n    <string name=\"action_add_category\">Thêm danh mục</string>\n    <string name=\"action_edit_categories\">Chỉnh sửa danh mục</string>\n    <string name=\"action_rename_category\">Đổi tên danh mục</string>\n    <string name=\"action_move_category\">Đặt danh mục</string>\n    <string name=\"action_edit_cover\">Sửa ảnh bìa</string>\n    <string name=\"action_pause\">Tạm dừng</string>\n    <string name=\"action_previous_chapter\">Chương trước</string>\n    <string name=\"action_next_chapter\">Chương sau</string>\n    <string name=\"action_retry\">Thử lại</string>\n    <string name=\"action_remove\">Gỡ bỏ</string>\n    <string name=\"action_resume\">Tiếp tục</string>\n    <string name=\"action_open_in_browser\">Mở trong trình duyệt</string>\n    <string name=\"action_display_mode\">Chế độ hiển thị</string>\n    <string name=\"action_display\">Hiển thị</string>\n    <string name=\"action_display_grid\">Lưới thu gọn</string>\n    <string name=\"action_display_list\">Danh sách</string>\n    <string name=\"action_cancel\">Hủy</string>\n    <string name=\"action_sort\">Sắp xếp</string>\n    <string name=\"action_install\">Cài đặt</string>\n    <string name=\"action_share\">Chia sẻ</string>\n    <string name=\"action_save\">Lưu lại</string>\n    <string name=\"action_reset\">Làm mới</string>\n    <string name=\"action_undo\">Hoàn tác</string>\n    <string name=\"loading\">Đang tải…</string>\n    <string name=\"pref_category_general\">Chung</string>\n    <string name=\"pref_category_reader\">Trình đọc</string>\n    <string name=\"pref_category_downloads\">Tải xuống</string>\n    <string name=\"pref_category_tracking\">Theo dõi</string>\n    <string name=\"pref_category_advanced\">Nâng cao</string>\n    <string name=\"pref_category_about\">Giới thiệu</string>\n    <string name=\"pref_library_columns\">Cỡ lưới</string>\n    <string name=\"portrait\">Dọc</string>\n    <string name=\"landscape\">Ngang</string>\n    <string name=\"pref_library_update_interval\">Tự động cập nhật</string>\n    <string name=\"update_never\">Tắt</string>\n    <string name=\"update_6hour\">Mỗi 6 tiếng</string>\n    <string name=\"update_12hour\">Mỗi 12 tiếng</string>\n    <string name=\"update_24hour\">Mỗi ngày</string>\n    <string name=\"update_48hour\">Mỗi 2 ngày</string>\n    <string name=\"all\">Tất cả</string>\n    <string name=\"pref_library_update_restriction\">Những hạn chế cập nhật thiết bị tự động</string>\n    <string name=\"charging\">Khi đang sạc</string>\n    <string name=\"pref_update_only_non_completed\">Đã có trạng thái \\\"Hoàn Thành\\\"</string>\n    <string name=\"pref_auto_update_manga_sync\">Cập nhật tiến triển sau khi đọc</string>\n    <string name=\"pref_fullscreen\">Toàn màn hình</string>\n    <string name=\"pref_page_transitions\">Hoạt ảnh chuyển trang</string>\n    <string name=\"pref_show_page_number\">Hiện số trang</string>\n    <string name=\"pref_custom_brightness\">Độ sáng tùy chỉnh</string>\n    <string name=\"pref_custom_color_filter\">Bộ lọc màu tùy chỉnh</string>\n    <string name=\"pref_keep_screen_on\">Giữ màn hình bật</string>\n    <string name=\"pref_reader_navigation\">Điều hướng</string>\n    <string name=\"pref_read_with_volume_keys\">Phím âm lượng</string>\n    <string name=\"pref_reader_theme\">Màu nền</string>\n    <string name=\"white_background\">Trắng</string>\n    <string name=\"black_background\">Đen</string>\n    <string name=\"pref_viewer_type\">Kiểu đọc mặc định</string>\n    <string name=\"left_to_right_viewer\">Phân trang (trái sang phải)</string>\n    <string name=\"right_to_left_viewer\">Phân trang (phải sang trái)</string>\n    <string name=\"vertical_viewer\">Phân trang (chiều dọc)</string>\n    <string name=\"webtoon_viewer\">Cuộc dọc</string>\n    <string name=\"pref_image_scale_type\">Kiểu tỉ lệ</string>\n    <string name=\"scale_type_fit_screen\">Vừa màn hình</string>\n    <string name=\"scale_type_stretch\">Kéo dãn</string>\n    <string name=\"scale_type_fit_width\">Vừa chiều ngang</string>\n    <string name=\"scale_type_fit_height\">Vừa chiều dọc</string>\n    <string name=\"scale_type_original_size\">Kích thước gốc</string>\n    <string name=\"scale_type_smart_fit\">Tùy chỉnh thông minh</string>\n    <string name=\"pref_zoom_start\">Phóng to vị trí bắt đầu</string>\n    <string name=\"zoom_start_automatic\">Tự động</string>\n    <string name=\"zoom_start_left\">Trái</string>\n    <string name=\"zoom_start_right\">Phải</string>\n    <string name=\"zoom_start_center\">Giữa</string>\n    <string name=\"pref_rotation_type\">Kiểu xoay mặc định</string>\n    <string name=\"rotation_free\">Tự do</string>\n    <string name=\"rotation_force_portrait\">Khoá theo chiều dọc</string>\n    <string name=\"rotation_force_landscape\">Khoá theo chiều ngang</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">Sau khi đánh dấu thủ công là đã đọc</string>\n    <string name=\"pref_remove_after_read\">Tự động xóa sau khi đọc</string>\n    <string name=\"disabled\">Vô hiệu hóa</string>\n    <string name=\"last_read_chapter\">Chương đã đọc gần nhất</string>\n    <string name=\"second_to_last\">Hai chương đã đọc gần nhất</string>\n    <string name=\"third_to_last\">Ba chương đã đọc gần nhất</string>\n    <string name=\"fourth_to_last\">Bốn chương đã đọc gần nhất</string>\n    <string name=\"fifth_to_last\">Năm chương đã đọc gần nhất</string>\n    <string name=\"pref_download_new\">Tải chương mới</string>\n    <string name=\"services\">Dịch vụ</string>\n    <string name=\"pref_clear_chapter_cache\">Dọn dẹp bộ nhớ đệm</string>\n    <string name=\"used_cache\">Đã sử dụng: %1$s</string>\n    <string name=\"cache_deleted\">Bộ nhớ đệm đã được dọn dẹp, đã xoá %1$d tập tin</string>\n    <string name=\"cache_delete_error\">Lỗi xảy ra trong khi xóa</string>\n    <string name=\"pref_clear_cookies\">Dọn dẹp thông tin lưu trữ</string>\n    <string name=\"cookies_cleared\">Thông tin lưu trữ đã được xóa</string>\n    <string name=\"pref_clear_database\">Dọn dẹp cơ sở dữ liệu</string>\n    <string name=\"pref_clear_database_summary\">Xóa lịch sử đọc truyện và các chương không nằm trong thư viện</string>\n    <string name=\"clear_database_confirmation\">Bạn có chắc không? Các chương đã đọc và tiến độ đọc các truyện không nằm trong thư viện sẽ bị mất</string>\n    <string name=\"clear_database_completed\">Các mục đã bị xóa</string>\n    <string name=\"version\">Phiên bản</string>\n    <string name=\"pref_enable_acra\">Gửi báo cáo lỗi</string>\n    <string name=\"pref_acra_summary\">Giúp đỡ sửa lỗi. Sẽ không có thông tin nhạy cảm nào được gửi đi</string>\n    <string name=\"login_title\">Đăng nhập vào %1$s</string>\n    <string name=\"username\">Tên đăng nhập</string>\n    <string name=\"password\">Mật khẩu</string>\n    <string name=\"login\">Đăng nhập</string>\n    <string name=\"login_success\">Đăng nhập thành công</string>\n    <string name=\"unknown_error\">Lỗi không xác định</string>\n    <string name=\"updating_category\">Cập nhật danh mục</string>\n    <string name=\"no_more_results\">Không có thêm kết quả nào</string>\n    <string name=\"ongoing\">Đang tiến hành</string>\n    <string name=\"unknown\">Không rõ</string>\n    <string name=\"licensed\">Đã được mua bản quyền</string>\n    <string name=\"remove_from_library\">Gỡ bỏ khỏi thư viện</string>\n    <string name=\"display_mode_chapter\">Chương %1$s</string>\n    <string name=\"chapter_downloading_progress\">Đang tải xuống (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">Lỗi</string>\n    <string name=\"chapter_paused\">Đã tạm dừng</string>\n    <string name=\"show_title\">Tiêu đề nguồn</string>\n    <string name=\"show_chapter_number\">Số chương</string>\n    <string name=\"sort_by_source\">Theo nguồn truyện</string>\n    <string name=\"sort_by_number\">Theo số chương</string>\n    <string name=\"manga_download\">Tải xuống</string>\n    <string name=\"download_unread\">Chưa đọc</string>\n    <string name=\"confirm_delete_chapters\">Bạn có chắc muốn xóa các chương đã chọn?</string>\n    <string name=\"manga_tracking_tab\">Theo dõi</string>\n    <string name=\"reading\">Đang đọc</string>\n    <string name=\"completed\">Đã hoàn thành</string>\n    <string name=\"dropped\">Đã dừng</string>\n    <string name=\"on_hold\">Đang đọc</string>\n    <string name=\"plan_to_read\">Dự định sẽ đọc</string>\n    <string name=\"score\">Điểm số</string>\n    <string name=\"title\">Tiêu đề</string>\n    <string name=\"status\">Trạng thái</string>\n    <string name=\"chapters\">Các chương</string>\n    <string name=\"error_category_exists\">Tên danh mục này đã tồn tại!</string>\n    <string name=\"snack_categories_deleted\">Danh mục đã bị xóa</string>\n    <string name=\"dialog_with_checkbox_remove_description\">Sẽ xóa ngày đọc các chương. Bạn chắc chứ?</string>\n    <string name=\"dialog_with_checkbox_reset\">Làm mới mọi chương của truyện này</string>\n    <string name=\"snack_add_to_library\">Thêm truyện vào thư viện?</string>\n    <string name=\"picture_saved\">Đã lưu ảnh</string>\n    <string name=\"custom_filter\">Bộ lọc tùy chỉnh</string>\n    <string name=\"set_as_cover\">Đặt làm ảnh bìa</string>\n    <string name=\"cover_updated\">Đã cập nhật ảnh bìa</string>\n    <string name=\"chapter_progress\">Trang: %1$d</string>\n    <string name=\"no_next_chapter\">Không tìm thấy chương kế tiếp</string>\n    <string name=\"decode_image_error\">Hình ảnh không thể hiển thị được</string>\n    <string name=\"confirm_set_image_as_cover\">Bạn có chắc muốn đặt ảnh này làm ảnh bìa?</string>\n    <string name=\"download_queue_error\">Có lỗi đã xảy ra khi đang tải các chương. Bạn có thể thử lại trong phần Tải xuống</string>\n    <string name=\"notification_new_chapters\">Đã tìm thấy chương mới</string>\n    <string name=\"notification_cover_update_failed\">Cập nhật ảnh bìa thất bại</string>\n    <string name=\"notification_first_add_to_library\">Hãy thêm truyện vào thư viện trước khi thực hiện</string>\n    <string name=\"file_select_cover\">Chọn ảnh bìa</string>\n    <string name=\"file_select_backup\">Chọn file sao lưu</string>\n    <string name=\"update_check_confirm\">Tải xuống</string>\n    <string name=\"update_check_no_new_updates\">Không có cập nhật mới</string>\n    <string name=\"update_check_notification_download_in_progress\">Đang tải xuống…</string>\n    <string name=\"update_check_notification_download_complete\">Nhấn để cập nhật</string>\n    <string name=\"update_check_notification_download_error\">Lỗi khi tải xuống</string>\n    <string name=\"update_check_notification_update_available\">Có cập nhật mới!</string>\n    <string name=\"information_no_downloads\">Không có</string>\n    <string name=\"information_no_recent\">Không có cập nhật mới</string>\n    <string name=\"information_no_recent_manga\">Không có truyện đã đọc gần đây</string>\n    <string name=\"information_empty_library\">Thư viện trống</string>\n    <string name=\"download_notifier_downloader_title\">Trình tải xuống</string>\n    <string name=\"download_notifier_title_error\">Lỗi</string>\n    <string name=\"download_notifier_unknown_error\">Đã xảy ra lỗi khi tải xuống chương này</string>\n    <string name=\"download_notifier_text_only_wifi\">Không có kết nối Wi-fi</string>\n    <string name=\"download_notifier_no_network\">Không có kết nối mạng</string>\n    <string name=\"download_notifier_download_paused\">Tải xuống đã tạm dừng</string>\n    <string name=\"categories\">Hạng mục</string>\n    <string name=\"manga\">Truyện trong thư viện</string>\n    <string name=\"track\">Theo dõi</string>\n    <string name=\"history\">Lịch sử</string>\n    <string name=\"label_migration\">Di chuyển</string>\n    <string name=\"label_extensions\">Phần mở rộng</string>\n    <string name=\"label_extension_info\">Thông tin chi tiết</string>\n    <string name=\"action_sort_total\">Tổng số chương</string>\n    <string name=\"action_global_search\">Tìm kiếm toàn bộ</string>\n    <string name=\"action_display_download_badge\">Tải các chương</string>\n    <string name=\"action_open_log\">Nhật ký mở</string>\n    <string name=\"action_restore\">Khôi phục</string>\n    <string name=\"app_not_available\">Ứng dụng không có sẵn</string>\n    <string name=\"update_weekly\">Mỗi tuần</string>\n    <string name=\"default_category\">Danh mục mặc định</string>\n    <string name=\"default_category_summary\">Luôn hỏi</string>\n    <string name=\"ext_update\">Cập nhật</string>\n    <string name=\"ext_install\">Cài đặt</string>\n    <string name=\"ext_pending\">Đang chờ xử lý</string>\n    <string name=\"ext_downloading\">Đang tải</string>\n    <string name=\"ext_installing\">Đang cài đặt</string>\n    <string name=\"ext_installed\">Đã cài đặt</string>\n    <string name=\"ext_trust\">Đáng tin cậy</string>\n    <string name=\"ext_untrusted\">Không đáng tin cậy</string>\n    <string name=\"ext_uninstall\">Gỡ cài đặt</string>\n    <string name=\"untrusted_extension\">Tiện ích mở rộng không đáng tin cậy</string>\n    <string name=\"untrusted_extension_message\">Các tiện ích mở rộng độc hại có thể đọc mọi thông tin đăng nhập được lưu trữ hoặc thực thi mã tùy ý.\n\\n\n\\nBạn sẽ chấp nhận những rủi ro khi tin tưởng tiện ích mở rộng này.</string>\n    <string name=\"pref_double_tap_anim_speed\">Tốc độ nhấn đúp hình ảnh động</string>\n    <string name=\"pref_crop_borders\">Cắt viền</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">Đảo ngược phím âm lượng</string>\n    <string name=\"pager_viewer\">Trang</string>\n    <string name=\"double_tap_anim_speed_0\">Không có hiệu ứng</string>\n    <string name=\"double_tap_anim_speed_normal\">Bình thường</string>\n    <string name=\"double_tap_anim_speed_fast\">Nhanh</string>\n    <string name=\"pref_create_backup\">Tạo bản sao lưu</string>\n    <string name=\"pref_create_backup_summ\">Có thể sử dụng để khôi phục thư viện hiện tại</string>\n    <string name=\"pref_restore_backup\">Khôi phục sao lưu</string>\n    <string name=\"pref_restore_backup_summ\">Khôi phục thư viện từ tập tin sao lưu</string>\n    <string name=\"pref_backup_interval\">Lịch sao lưu</string>\n    <string name=\"backup_created\">Sao lưu đã được tạo</string>\n    <string name=\"restore_completed\">Khôi phục hoàn tất</string>\n    <string name=\"backup_choice\">Bạn có muốn sao lưu không?</string>\n    <string name=\"restoring_backup\">Khôi phục sao lưu</string>\n    <string name=\"creating_backup\">Đang tạo bản sao lưu</string>\n    <string name=\"local_source\">Nguồn cục bộ</string>\n    <string name=\"other_source\">Khác</string>\n    <string name=\"action_global_search_hint\">Tìm kiếm toàn bộ…</string>\n    <string name=\"latest\">Mới nhất</string>\n    <string name=\"browse\">Duyệt</string>\n    <string name=\"manga_added_library\">Đã thêm vào thư viện</string>\n    <string name=\"manga_removed_library\">Đã xóa khỏi thư viện</string>\n    <string name=\"delete_downloads_for_manga\">Muốn xóa các chương đã tải?</string>\n    <string name=\"copied_to_clipboard\">Đã sao chép vào bảng tạm:\n\\n%1$s</string>\n    <string name=\"source_not_installed\">Nguồn truyện không thể cài đặt: %1$s</string>\n    <string name=\"repeating\">Đọc lại</string>\n    <string name=\"track_status\">Trạng thái</string>\n    <string name=\"track_type\">Loại</string>\n    <string name=\"transition_finished\">Đã đọc xong:</string>\n    <string name=\"transition_current\">Đang đọc:</string>\n    <string name=\"transition_next\">Chương kế:</string>\n    <string name=\"transition_previous\">Chương trước:</string>\n    <string name=\"transition_no_next\">Không có chương tiếp theo</string>\n    <string name=\"transition_no_previous\">Không có chương trước đó</string>\n    <string name=\"transition_pages_loading\">Đang tải trang…</string>\n    <string name=\"transition_pages_error\">Tải trang thất bại: %1$s</string>\n    <string name=\"migration_dialog_what_to_include\">Chọn dữ liệu bao gồm</string>\n    <string name=\"migrate\">Di chuyển</string>\n    <string name=\"copy\">Sao chép</string>\n    <string name=\"information_empty_category\">Không có danh mục. Nhấn vào dấu cộng để tạo một nhóm từ thư viện.</string>\n    <string name=\"channel_common\">Thường gặp</string>\n    <string name=\"pref_read_with_long_tap\">Nhấn giữ để mở mục hành động</string>\n    <string name=\"action_open_in_web_view\">Mở bằng WebView</string>\n    <string name=\"pref_skip_read_chapters\">Bỏ qua chap đã đọc</string>\n    <string name=\"pref_color_filter_mode\">Chế độ hòa trộn bộ lọc màu</string>\n    <string name=\"filter_mode_overlay\">Phủ lên</string>\n    <string name=\"filter_mode_multiply\">Nhân</string>\n    <string name=\"label_help\">Trợ giúp</string>\n    <string name=\"no_results_found\">Không tìm thấy kết quả nào</string>\n    <string name=\"migration_selection_prompt\">Chọn 1 nguồn để di chuyển từ</string>\n    <string name=\"channel_ext_updates\">Cập nhật tiện ích mở rộng</string>\n    <string name=\"information_webview_outdated\">Vui lòng cập nhật WebView để tương thích tốt hơn</string>\n    <string name=\"information_cloudflare_bypass_failure\">Bỏ qua Cloudflare thất bại</string>\n    <string name=\"notification_chapters_single\">Chương %1$s</string>\n    <string name=\"updating_library\">Đang cập nhật thư viện</string>\n    <string name=\"paused\">Đã tạm ngưng</string>\n    <string name=\"logout_success\">Bạn đã đăng xuất</string>\n    <string name=\"logout\">Đăng xuất tài khoản</string>\n    <string name=\"logout_title\">Đăng xuất khỏi %1$s?</string>\n    <string name=\"email\">Địa chỉ email</string>\n    <string name=\"battery_optimization_disabled\">Tối ưu pin đã được tắt</string>\n    <string name=\"pref_disable_battery_optimization_summary\">Giúp cập nhật và sao lưu thư viện nền</string>\n    <string name=\"pref_disable_battery_optimization\">Tắt tối ưu pin</string>\n    <string name=\"pref_category_reading\">Đang đọc</string>\n    <string name=\"pref_always_show_chapter_transition\">Luôn hiển thị chuyển tiếp chương</string>\n    <string name=\"pref_skip_filtered_chapters\">Bỏ qua các chương đã lọc</string>\n    <string name=\"filter_mode_screen\">Màn hình</string>\n    <string name=\"pref_cutout_short\">Hiển thị nội dung ở phần rìa</string>\n    <string name=\"obsolete_extension_message\">Phần mở rộng này không khả dụng. Nó có thể không chạy và có thể gây ra lỗi với Mihon. Kiến nghị nên Gỡ cài đặt.</string>\n    <string name=\"ext_obsolete\">Lỗi thời</string>\n    <string name=\"ext_updates_pending\">Cập nhật đang chờ</string>\n    <string name=\"pref_category_library_update\">Cập nhật toàn bộ</string>\n    <string name=\"pref_category_display\">Hiển thị</string>\n    <string name=\"hide_notification_content\">Ẩn nội dung thông báo</string>\n    <string name=\"secure_screen_summary\">Bảo vệ màn hình sẽ ẩn nội dung khi chuyển đổi ứng dụng và chặn chụp màn hình</string>\n    <string name=\"secure_screen\">Bảo vệ màn hình</string>\n    <string name=\"lock_never\">Không bao giờ</string>\n    <string name=\"lock_always\">Luôn luôn</string>\n    <string name=\"lock_when_idle\">Khóa khi chạy nền</string>\n    <string name=\"lock_with_biometrics\">Khóa ứng dụng</string>\n    <string name=\"pref_category_security\">Bảo mật và quyền riêng tư</string>\n    <string name=\"pref_manage_notifications\">Quản lý thông báo</string>\n    <string name=\"pref_date_format\">Định dạng ngày</string>\n    <string name=\"theme_system\">Hệ thống</string>\n    <string name=\"theme_dark\">Tối</string>\n    <string name=\"theme_light\">Sáng</string>\n    <string name=\"pref_category_library\">Thư viện</string>\n    <string name=\"action_webview_refresh\">Làm mới</string>\n    <string name=\"action_webview_forward\">Chuyển tới trước</string>\n    <string name=\"action_webview_back\">Trở lại</string>\n    <string name=\"action_move_to_bottom\">Di chuyển xuống cuối</string>\n    <string name=\"action_move_to_top\">Di chuyển lên đầu</string>\n    <string name=\"action_oldest\">Cũ nhất</string>\n    <string name=\"action_newest\">Mới nhất</string>\n    <string name=\"action_cancel_all\">Huỷ bỏ tất cả</string>\n    <string name=\"action_view_chapters\">Xem các chương</string>\n    <string name=\"action_select_inverse\">Đảo ngược lựa chọn</string>\n    <string name=\"action_sort_latest_chapter\">Chương mới nhất</string>\n    <string name=\"action_menu\">Mục chính</string>\n    <string name=\"label_sources\">Nguồn</string>\n    <string name=\"label_more\">Thêm</string>\n    <string name=\"tracking_info\">Đồng bộ một chiều để cập nhật tiến trình chương trong các dịch vụ theo dõi. Thiết lập theo dõi cho các truyện riêng lẻ từ nút theo dõi.</string>\n    <string name=\"pref_category_reading_mode\">Kiểu đọc</string>\n    <string name=\"vertical_plus_viewer\">Cuộc dọc có khoảng cách</string>\n    <string name=\"pref_show_reading_mode_summary\">Hiển thị ngắn gọn chế độ hiện tại khi mở trang đọc truyện</string>\n    <string name=\"pref_show_reading_mode\">Hiển thị chế độ đọc</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">Kiểm tra ảnh bìa và chi tiết khi cập nhật thư viện</string>\n    <string name=\"pref_category_theme\">Chủ đề</string>\n    <string name=\"action_unpin\">Bỏ ghim</string>\n    <string name=\"action_pin\">Ghim</string>\n    <string name=\"action_disable\">Tắt</string>\n    <string name=\"action_display_show_tabs\">Hiện các thẻ danh mục</string>\n    <string name=\"action_display_comfortable_grid\">Lưới</string>\n    <string name=\"action_migrate\">Chuyển</string>\n    <string name=\"action_start\">Bắt đầu</string>\n    <string name=\"action_disable_all\">Tắt tất cả</string>\n    <string name=\"action_enable_all\">Bật tất cả</string>\n    <string name=\"action_sort_date_added\">Ngày thêm</string>\n    <string name=\"invalid_backup_file_missing_manga\">Bản sao lưu không chứa truyện nào.</string>\n    <string name=\"invalid_backup_file\">Tệp sao lưu không hợp lệ:</string>\n    <string name=\"add_to_library\">Thêm vào thư viện</string>\n    <string name=\"ext_nsfw_warning\">Nguồn truyền từ tiện ích mở rộng này có thể chứa nội dung NSFW 18+</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"pref_library_update_refresh_metadata\">Tự động làm mới bộ siêu dữ liệu</string>\n    <string name=\"parental_controls_info\">Điều này không ngăn các tiện ích mở rộng không chính thức hoặc có khả năng bị gắn cờ không chính xác hiển thị nội dung NSFW (18+) trong ứng dụng.</string>\n    <string name=\"label_downloaded_only\">Chỉ hiện truyện đã tải</string>\n    <string name=\"migration_help_guide\">Hướng dẫn di chuyển nguồn</string>\n    <string name=\"action_search_settings\">Cài đặt tìm kiếm</string>\n    <string name=\"backup_in_progress\">Sao lưu đang trong quá trình thực hiện</string>\n    <string name=\"clear_history_confirmation\">Bạn có chắc không? Tất cả lịch sử sẽ bị xoá.</string>\n    <string name=\"pref_library_update_categories_details\">Truyện trong danh mục bị loại trừ sẽ không được cập nhật.</string>\n    <string name=\"track_finished_reading_date\">Ngày kết thúc</string>\n    <string name=\"filter_mode_lighten\">Chế độ làm sáng lên</string>\n    <string name=\"filter_mode_darken\">Chế độ làm tối đi</string>\n    <string name=\"manga_from_library\">Từ thư viện</string>\n    <string name=\"downloaded_chapters\">Các chương đã tải</string>\n    <string name=\"requires_app_restart\">Yêu cầu khởi động lại ứng dụng để có hiệu lực</string>\n    <string name=\"edge_nav\">Dạng góc cạnh</string>\n    <string name=\"kindlish_nav\">Dạng giống Kindle</string>\n    <string name=\"l_nav\">Dạng chữ L</string>\n    <string name=\"pref_viewer_nav\">Khu vực nhấn</string>\n    <string name=\"clear_history_completed\">Lịch sử đã được xoá</string>\n    <string name=\"pref_clear_history\">Xoá lịch sử</string>\n    <string name=\"myanimelist_relogin\">Xin hãy đăng nhập lại MAL</string>\n    <string name=\"track_started_reading_date\">Ngày bắt đầu</string>\n    <string name=\"pref_incognito_mode\">Chế độ ẩn danh</string>\n    <string name=\"pref_refresh_library_covers\">Làm mới ảnh bìa trong thư viện</string>\n    <string name=\"pref_dump_crash_logs\">Chia sẻ tệp báo lỗi tạm</string>\n    <string name=\"pref_dump_crash_logs_summary\">Lưu thông tin lỗi và gửi về nhà phát triển</string>\n    <string name=\"pref_incognito_mode_summary\">Dừng lưu giữ lịch sử đọc</string>\n    <string name=\"file_picker_error\">Không tìm thấy ứng dụng chọn tệp</string>\n    <string name=\"spen_previous_page\">Trang trước</string>\n    <string name=\"spen_next_page\">Trang tiếp theo</string>\n    <string name=\"channel_new_chapters\">Cập nhật chương</string>\n    <string name=\"chapter_settings_updated\">Đã cập nhật tuỳ chỉnh mặc định cho chương</string>\n    <string name=\"channel_errors\">Lỗi</string>\n    <string name=\"channel_complete\">Hoàn thành</string>\n    <string name=\"channel_progress\">Quá trình</string>\n    <string name=\"information_webview_required\">Mihon yêu cầu phải có WebView</string>\n    <string name=\"update_check_eol\">Phiên bản Android này không còn được hỗ trợ</string>\n    <string name=\"notification_chapters_multiple\">Chương %1$s</string>\n    <string name=\"notification_chapters_single_and_more\">Chương %1$s và thêm %2$d</string>\n    <string name=\"download_insufficient_space\">Không thể tãi chương vì dung lượng bộ nhớ xuống thấp</string>\n    <string name=\"recent_manga_time\">Ch.%1$s-%2$s</string>\n    <string name=\"loader_not_implemented_error\">Nguồn không tìm thấy</string>\n    <string name=\"page_list_empty_error\">Trang không tìm thấy</string>\n    <string name=\"viewer\">Chế độ đọc</string>\n    <string name=\"pref_category_for_this_series\">Dành cho phần truyện này</string>\n    <string name=\"share_page_info\">%1$s:%2$s,trang %3$d</string>\n    <string name=\"add_tracking\">Thêm theo dõi</string>\n    <string name=\"no_chapters_error\">Không tìm thấy chương</string>\n    <string name=\"set_chapter_settings_as_default\">Đặt mặc định</string>\n    <string name=\"also_set_chapter_settings_for_library\">Ngoài ra có hiệu lực với tất cả truyện trong thư viện</string>\n    <string name=\"confirm_set_chapter_settings\">Bạn có chắc chắn muốn lưu lại tuỳ chỉnh này hay không?</string>\n    <string name=\"chapter_settings\">Tuỳ chỉnh chương</string>\n    <string name=\"sort_by_upload_date\">Bởi ngày đăng</string>\n    <string name=\"clipboard_copy_error\">Sao chép vào bảng tạm thất bại</string>\n    <string name=\"manga_info_collapse\">Hiện bớt</string>\n    <string name=\"manga_info_expand\">Xem thêm</string>\n    <string name=\"in_library\">Trong thư viện</string>\n    <string name=\"unknown_status\">Không rõ trạng thái</string>\n    <string name=\"unknown_author\">Không rõ tác giả</string>\n    <string name=\"pinned_sources\">Đã ghim</string>\n    <string name=\"last_used_source\">Sử dụng lần cuối</string>\n    <string name=\"no_pinned_sources\">Bạn không có nguồn được đánh dấu</string>\n    <string name=\"local_source_help_guide\">Hướng dẫn nguồn cục bộ</string>\n    <string name=\"action_global_search_query\">Tìm kiếm \\\"%1$s\\\" toàn bộ</string>\n    <string name=\"tabs_header\">Mục</string>\n    <string name=\"downloaded_only_summary\">Lọc tất cả truyện trong thư viện</string>\n    <string name=\"notification_incognito_text\">Tắt chế độ ẩn danh</string>\n    <string name=\"updated_version\">Được cập nhật đến phiên bản v%1$s</string>\n    <string name=\"check_for_updates\">Kiểm tra cập nhật</string>\n    <string name=\"licenses\">Mở giấy phép nguồn mở</string>\n    <string name=\"whats_new\">Có gì mới</string>\n    <string name=\"website\">Trang chủ</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">Không thể mở tuỳ chỉnh thiết bị</string>\n    <string name=\"label_data\">Dữ liệu</string>\n    <string name=\"pref_dns_over_https\">DNS qua HTTPS (DoH)</string>\n    <string name=\"label_network\">Mạng</string>\n    <string name=\"restoring_backup_canceled\">Quá trình khôi phục đã bị ngắt</string>\n    <string name=\"restoring_backup_error\">Khôi phục thất bại</string>\n    <string name=\"restore_in_progress\">Đang trong quá trình phục hồi</string>\n    <string name=\"creating_backup_error\">Lưu trữ thất bại</string>\n    <string name=\"restore_duration\">%1$02d phút, %2$02d giây</string>\n    <string name=\"backup_restore_content_full\">Bạn sẽ cần cài đặt bất kỳ tiện ích mở rộng nào bị thiếu rồi đăng nhập vào các dịch vụ theo dõi để sử dụng chúng.</string>\n    <string name=\"backup_restore_missing_trackers\">Bộ theo dõi chưa được đăng nhập vào :</string>\n    <string name=\"backup_restore_missing_sources\">Nguồn không tìm thấy :</string>\n    <string name=\"pref_download_new_categories_details\">Truyện trong các danh mục bị loại trừ sẽ không được tải xuống.</string>\n    <string name=\"pref_category_auto_download\">Tự động tải xuống</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Cho phép xóa các chương đã đánh dấu</string>\n    <string name=\"pref_category_delete_chapters\">Xoá chương</string>\n    <string name=\"pref_webtoon_side_padding\">Kích cỡ hai bên</string>\n    <string name=\"rotation_landscape\">Chế độ nằm ngang</string>\n    <string name=\"rotation_portrait\">Chế độ dọc</string>\n    <string name=\"rotation_type\">Kiểu xoay</string>\n    <string name=\"nav_zone_right\">Phải</string>\n    <string name=\"nav_zone_left\">Trái</string>\n    <string name=\"nav_zone_next\">Tiếp theo</string>\n    <string name=\"nav_zone_prev\">Trước</string>\n    <string name=\"right_and_left_nav\">Phải và trái</string>\n    <string name=\"automatic_background\">Tự động</string>\n    <string name=\"gray_background\">Xám</string>\n    <string name=\"pref_create_folder_per_manga_summary\">Tạo thư mục dựa theo tên truyện</string>\n    <string name=\"pref_create_folder_per_manga\">Lưu lại trang trong thư mục riêng</string>\n    <string name=\"pref_reader_actions\">Hành động</string>\n    <string name=\"tapping_inverted_both\">Cả hai</string>\n    <string name=\"tapping_inverted_vertical\">Dọc</string>\n    <string name=\"tapping_inverted_horizontal\">Ngang</string>\n    <string name=\"tapping_inverted_none\">Không</string>\n    <string name=\"pref_read_with_tapping_inverted\">Đảo ngược khu vực nhấn</string>\n    <string name=\"pref_grayscale\">Ảnh đen trắng</string>\n    <string name=\"pref_dual_page_invert_summary\">Nếu vị trí của phần tách trang rộng không khớp với hướng đọc</string>\n    <string name=\"pref_dual_page_invert\">Đảo ngược vị trí tách trang</string>\n    <string name=\"pref_dual_page_split\">Chia các trang đôi</string>\n    <string name=\"pref_show_navigation_mode_summary\">Hiển thị ngắn gọn các vùng chạm khi trình đọc được mở</string>\n    <string name=\"pref_show_navigation_mode\">Hiển thị lớp phủ khu vực nhấn</string>\n    <string name=\"exclude\">Loại trừ:%s</string>\n    <string name=\"include\">Bao gồm: %s</string>\n    <string name=\"none\">Không có</string>\n    <string name=\"action_display_show_number_of_items\">Hiện số truyện</string>\n    <string name=\"pref_category_nsfw_content\">Nguồn NSFW (18+)</string>\n    <string name=\"pref_show_nsfw_source\">Hiển thị trong các danh sách nguồn và tiện ích mở rộng</string>\n    <string name=\"action_show_errors\">Chạm để xem toàn bộ chi tiết</string>\n    <string name=\"action_desc\">Giảm dần</string>\n    <string name=\"action_asc\">Tăng dần</string>\n    <string name=\"action_order_by_chapter_number\">Theo số chương</string>\n    <string name=\"action_order_by_upload_date\">Theo ngày đăng</string>\n    <string name=\"action_sort_chapter_fetch_date\">Ngày nhập chương</string>\n    <string name=\"action_filter_tracked\">Đã theo dõi</string>\n    <string name=\"cancel_all_for_series\">Hủy bỏ tất cả cho phần truyền này</string>\n    <string name=\"action_display_local_badge\">Truyện cục bộ</string>\n    <string name=\"error_no_match\">Không tìm thấy chính sác</string>\n    <string name=\"source_unsupported\">Nguồn không còn được hỗ trợ</string>\n    <string name=\"unread\">Chưa đọc</string>\n    <string name=\"error_sharing_cover\">Lỗi khi chia sẻ ảnh bìa</string>\n    <string name=\"error_saving_cover\">Lỗi khi lưu ảnh bìa</string>\n    <string name=\"cover_saved\">Đã lưu ảnh bìa</string>\n    <string name=\"manga_cover\">Ảnh bìa</string>\n    <string name=\"date\">Ngày</string>\n    <string name=\"local_filter_order_by\">Xếp theo</string>\n    <string name=\"local_invalid_format\">Định dạng chương hợp lệ</string>\n    <string name=\"chapter_not_found\">Không tìm thấy chương</string>\n    <string name=\"on\">Bật</string>\n    <string name=\"off\">Tắt</string>\n    <string name=\"restrictions\">Hạn chế: %s</string>\n    <string name=\"information_empty_category_dialog\">Người dùng chưa có danh mục.</string>\n    <string name=\"restore_miui_warning\">Tính năng tối ưu hóa của MIUI phải được bật lên để việc sao lưu/khôi phục hoạt động tốt.</string>\n    <string name=\"theme_greenapple\">Chủ đề: Táo Xanh</string>\n    <string name=\"theme_monet\">Chủ đề: Động</string>\n    <string name=\"pref_app_theme\">Chủ đề ứng dụng</string>\n    <string name=\"action_start_downloading_now\">Bắt đầu tải xuống ngay</string>\n    <string name=\"theme_midnightdusk\">Chủ đề: Hoàng Hôn Giữa Đêm</string>\n    <string name=\"theme_strawberrydaiquiri\">Chủ đề: Daiquiri Dâu Tây</string>\n    <string name=\"theme_tako\">Chủ đề: Tako</string>\n    <string name=\"theme_yinyang\">Chủ đề: Âm &amp; Dương</string>\n    <string name=\"theme_yotsuba\">Chủ đề: Yotsuba</string>\n    <string name=\"pref_dark_theme_pure_black\">Chế độ đen tuyền</string>\n    <string name=\"categorized_display_settings\">Tùy chỉnh mỗi danh mục cho sắp xếp</string>\n    <string name=\"tracking_guide\">Hướng dẫn theo dõi</string>\n    <string name=\"enhanced_services\">Dịch vụ nâng cao</string>\n    <string name=\"enhanced_tracking_info\">Dịch vụ cung cấp các tính năng nâng cao cho các nguồn cụ thể. Truyện sẽ tự động theo dõi khi được thêm vào thư viện của bạn.</string>\n    <string name=\"about_dont_kill_my_app\">Một vài nhà sản xuất có các hạn chế về việc chạy ngầm của ứng dụng có thể gây dừng hiện thị dịch vụ nền. Xem thêm ở địa chỉ này để sửa chữa chúng.</string>\n    <string name=\"theme_tealturquoise\">Chủ đề: Xanh lam &amp; Xanh ngọc</string>\n    <string name=\"pref_category_appearance\">Giao diện</string>\n    <string name=\"confirm_lock_change\">Xác nhận thay đổi</string>\n    <string name=\"label_default\">Mặc định</string>\n    <string name=\"action_track\">Theo dõi</string>\n    <string name=\"pref_remove_exclude_categories\">Các thể loại bị loại trừ</string>\n    <string name=\"pref_hide_threshold\">Độ nhạy cho phần tự ẩn mục chính khi kéo cuộn</string>\n    <string name=\"getting_started_guide\">Hướng dẫn sử dụng khởi đầu</string>\n    <string name=\"pref_tablet_ui_mode\">Giao diện máy tính bảng</string>\n    <string name=\"label_background_activity\">Hoạt động nền</string>\n    <string name=\"pref_lowest\">Thấp nhất</string>\n    <string name=\"pref_low\">Thấp</string>\n    <string name=\"pref_high\">Cao</string>\n    <string name=\"pref_highest\">Cao nhất</string>\n    <string name=\"pref_inverted_colors\">Đảo màu</string>\n    <string name=\"relative_time_today\">Hôm nay</string>\n    <string name=\"help_translate\">Hỗ trợ dịch thuật</string>\n    <string name=\"ext_app_info\">Thông tin ứng dụng</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">Cài và chạy Shizuku để sử dụng Shizuku như một trình cài đặt tiện ích mở rộng.</string>\n    <string name=\"action_sort_count\">Tổng số truyện</string>\n    <string name=\"label_warning\">Cảnh báo</string>\n    <string name=\"ext_installer_pref\">Trình cài đặt</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku đang không chạy</string>\n    <string name=\"ext_installer_legacy\">Phần kế thừa</string>\n    <string name=\"pref_verbose_logging\">Đăng nhập tường tận</string>\n    <string name=\"action_display_language_badge\">Ngôn ngữ</string>\n    <string name=\"backup_info\">Bạn nên giữ lại bản sao của sao lưu ở các nơi khác nữa.</string>\n    <string name=\"pref_verbose_logging_summary\">In các ghi chép tường tận đến cả ghi chép hệ thống ( giảm hiệu suất ứng dụng )</string>\n    <string name=\"notification_size_warning\">Các bản cập nhật lớn sẽ gây hại cho các nguồn và có thể dẫn đến các bản cập nhật chậm hơn và cũng làm tăng mức sử dụng pin. Nhấn vào để tìm hiểu thêm.</string>\n    <string name=\"ext_install_service_notif\">Đang cài đặt tiện ích mở rộng…</string>\n    <string name=\"update_72hour\">3 ngày một lần</string>\n    <string name=\"connected_to_wifi\">Chỉ qua Wi-Fi</string>\n    <string name=\"download_queue_size_warning\">Cảnh báo: các tải xuống hàng loạt lớn có thể dẫn đến các nguồn trở nên chậm hơn và / hoặc chặn Mihon. Nhấn vào để tìm hiểu thêm.</string>\n    <string name=\"channel_app_updates\">Cập nhật ứng dụng</string>\n    <string name=\"ext_update_all\">Cập nhật tất cả</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Xóa bộ nhớ đệm các chương khi tắt ứng dụng</string>\n    <string name=\"clear_database_source_item_count\">%1$d truyện ngoài thư viện có trong cơ sở dữ liệu</string>\n    <string name=\"database_clean\">Không có gì để dọn</string>\n    <string name=\"extension_api_error\">Không tải được danh sách tiện ích mở rộng</string>\n    <string name=\"privacy_policy\">Chính sách quyền riêng tư</string>\n    <string name=\"pref_update_only_completely_read\">Có chương chưa đọc</string>\n    <string name=\"publishing_finished\">Đã hoàn thành xuất bản</string>\n    <string name=\"cancelled\">Đã ngưng</string>\n    <string name=\"on_hiatus\">Đang tạm ngưng</string>\n    <string name=\"library_errors_help\">Để được trợ giúp về cách sửa lỗi cập nhật thư viện, hãy xem %1$s</string>\n    <string name=\"save_chapter_as_cbz\">Lưu dưới dạng lưu trữ CBZ</string>\n    <string name=\"pref_update_only_started\">Chưa bắt đầu đọc</string>\n    <string name=\"learn_more\">Nhấn để tìm hiểu thêm</string>\n    <string name=\"pref_landscape_zoom\">Phóng ảnh phong cảnh tự động</string>\n    <string name=\"action_show_manga\">Hiển thị truyện</string>\n    <string name=\"pref_navigate_pan\">Xoay ảnh rộng</string>\n    <string name=\"action_display_cover_only_grid\">Lưới chỉ mỗi bìa</string>\n    <string name=\"rotation_reverse_portrait\">Đảo ngược chân dung</string>\n    <string name=\"notification_update_error\">%1$d cập nhật thất bại</string>\n    <string name=\"skipped_reason_completed\">Đã bỏ qua vì bộ truyện đã hoàn thành</string>\n    <string name=\"skipped_reason_not_caught_up\">Đã bỏ qua vì vẫn còn chương chưa đọc</string>\n    <string name=\"skipped_reason_not_started\">Đã bỏ qua vì chưa chương được đọc</string>\n    <string name=\"action_move_to_top_all_for_series\">Di chuyển bộ truyện lên đầu</string>\n    <string name=\"disabled_nav\">Tắt</string>\n    <string name=\"error_saving_picture\">Lỗi khi lưu ảnh</string>\n    <string name=\"action_close\">Đóng</string>\n    <string name=\"source_filter_empty_screen\">Không có nguồn đã cài tìm thấy</string>\n    <string name=\"source_empty_screen\">Không có nguồn nào được tìm thấy</string>\n    <string name=\"update_check_open\">Mở trên GitHub</string>\n    <string name=\"empty_backup_error\">Không có mục thư viện nào để sao lưu</string>\n    <string name=\"webview_data_deleted\">Dữ liệu WebView đã được xóa</string>\n    <string name=\"pref_clear_webview_data\">Xóa dữ liệu WebView</string>\n    <string name=\"network_not_metered\">Chỉ trên mạng lưới không hạn định</string>\n    <string name=\"action_sort_last_manga_update\">Truyện cập nhật gần đây</string>\n    <string name=\"action_sort_unread_count\">Số lượng chưa đọc</string>\n    <string name=\"split_tall_images_summary\">Cải thiện khả năng đọc bằng việc cắt nhỏ các ảnh quá dài</string>\n    <string name=\"pref_reset_viewer_flags_success\">Tất cả cài đặt đọc đã được cài lại</string>\n    <string name=\"pref_reset_viewer_flags_error\">Không thể cài lại cài đặt đọc</string>\n    <string name=\"pref_user_agent_string\">Chuỗi đại diện người dùng mặc định</string>\n    <string name=\"unfinished_list\">Danh sách chưa hoàn thành</string>\n    <string name=\"cant_open_last_read_chapter\">Không thể mở lại chương truyện trước</string>\n    <string name=\"delete_category\">Xóa thể loại</string>\n    <string name=\"internal_error\">Lỗi nội bộ: Kiểm tra nhật ký bị ngắt ứng dụng để biết thêm thông tin</string>\n    <string name=\"theme_lavender\">Oải Hương</string>\n    <string name=\"pref_app_language\">Ngôn ngữ ứng dụng</string>\n    <string name=\"ext_info_version\">Phiên bản</string>\n    <string name=\"ext_info_language\">Ngôn ngữ</string>\n    <string name=\"pref_reset_viewer_flags_summary\">Cài lại chế độ đọc và điều hướng của tất cả các bộ truyện</string>\n    <string name=\"pref_reset_viewer_flags\">Cài lại cài đặt đọc từng bộ truyện</string>\n    <string name=\"empty_screen\">Ờ thì, nó lạ lắm</string>\n    <string name=\"not_installed\">Chưa được cài</string>\n    <string name=\"reading_list\">Danh sách đang đọc</string>\n    <string name=\"complete_list\">Danh sách hoàn thành</string>\n    <string name=\"on_hold_list\">Danh sách đang chờ</string>\n    <string name=\"wish_list\">Danh sách muốn đọc</string>\n    <string name=\"download_notifier_split_page_not_found\">Trang %d không thể được tìm thấy khi chia cắt</string>\n    <string name=\"ext_info_age_rating\">Phân loại độ tuổi</string>\n    <string name=\"download_notifier_split_page_path_not_found\">Không thể tìm thấy đường dẫn của trang %d</string>\n    <string name=\"pref_reset_user_agent_string\">Cài lại chuỗi đại diện người dùng mặc định</string>\n    <string name=\"description_placeholder\">Không có mô tả</string>\n    <string name=\"delete_category_confirmation\">Bạn có muốn xóa thể loại \\\"%s\\\"?</string>\n    <string name=\"custom_cover\">Tùy chỉnh ảnh bìa</string>\n    <string name=\"appwidget_unavailable_locked\">Tiện ích không còn khả dụng khi khóa ứng dụng đang bật</string>\n    <string name=\"appwidget_updates_description\">Xem các bộ truyện được cập nhật gần đây</string>\n    <string name=\"action_remove_everything\">Loại bỏ tất cả mọi thứ</string>\n    <string name=\"update_already_running\">Có một cập nhật đang chạy sẵn</string>\n    <string name=\"theme_tidalwave\">Sóng Thủy Triều</string>\n    <string name=\"error_user_agent_string_blank\">Chuỗi đại diện người dùng không thể bỏ trống</string>\n    <string name=\"auto_download_while_reading\">Tự động tải khi đang đọc</string>\n    <string name=\"missing_storage_permission\">Quyền truy cập lưu trữ không được thông qua</string>\n    <string name=\"popular\">Nổi Tiếng</string>\n    <string name=\"are_you_sure\">Bạn chắc chứ?</string>\n    <string name=\"remove_manga\">Bạn sẽ xóa bỏ \\\"%s\\\" này ra khỏi thư viện của bạn</string>\n    <string name=\"updates_last_update_info\">Thư viện lần cuối được cập nhật:%s</string>\n    <string name=\"download_ahead\">Tải Trước</string>\n    <string name=\"download_ahead_info\">Tải trước chỉ áp dụng cho các mục ở trong thư viện và nếu chương cuối cùng đã được tải rồi.</string>\n    <string name=\"multi_lang\">Đa Ngôn Ngữ</string>\n    <string name=\"skipped_reason_not_always_update\">Bỏ qua vì loạt truyện không cần cập nhật</string>\n    <string name=\"action_search_hint\">Tìm kiếm…</string>\n    <string name=\"pref_appearance_summary\">Chủ đề, kiểu hiển thị ngày &amp; giờ</string>\n    <string name=\"pref_library_summary\">Danh mục, cập nhật toàn bộ, vuốt chương</string>\n    <string name=\"pref_reader_summary\">Dạng đọc, hiển thị, điều hướng</string>\n    <string name=\"pref_downloads_summary\">Tự động tải xuống, tải xuống trước</string>\n    <string name=\"pref_backup_summary\">Sao lưu thủ công &amp; tự động</string>\n    <string name=\"pref_security_summary\">Khoá ứng dụng, bảo vệ màn hình</string>\n    <string name=\"pref_advanced_summary\">Tệp báo lỗi tạm, tối ưu hoá pin</string>\n    <string name=\"pref_tracking_summary\">Đồng bộ tiến trình đọc, đồng bộ nâng cao</string>\n    <string name=\"pref_browse_summary\">Nguồn, tiện ích, tìm kiếm toàn bộ</string>\n    <string name=\"action_display_show_continue_reading_button\">Nút tiếp tục đọc</string>\n    <string name=\"action_open_random_manga\">Mở một truyện ngẫu nhiên</string>\n    <string name=\"invalid_location\">Vị trí không hợp lệ: %s</string>\n    <string name=\"label_stats\">Thống kê</string>\n    <string name=\"label_downloaded\">Đã tải xuống</string>\n    <string name=\"label_local\">Nội bộ</string>\n    <string name=\"label_total_chapters\">Tổng số chương</string>\n    <string name=\"label_read_chapters\">Đã đọc</string>\n    <string name=\"information_no_entries_found\">Không có gì trong danh mục này</string>\n    <string name=\"label_overview_section\">Tổng quát</string>\n    <string name=\"label_completed_titles\">Truyện đã đọc</string>\n    <string name=\"label_titles_section\">Truyện</string>\n    <string name=\"label_read_duration\">Thời gian đọc</string>\n    <string name=\"label_started\">Đang tiến hành</string>\n    <string name=\"label_mean_score\">Điểm trung bình</string>\n    <string name=\"updates_last_update_info_just_now\">Ngay bây giờ</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Buộc ứng dụng kiểm tra lại các chương đã tải xuống</string>\n    <string name=\"label_titles_in_global_update\">Tổng cập nhật</string>\n    <string name=\"label_used\">Đã theo dõi</string>\n    <string name=\"label_tracker_section\">Theo dõi</string>\n    <string name=\"label_tracked_titles\">Tổng theo dõi</string>\n    <string name=\"crash_screen_restart_application\">Khởi động lại ứng dụng</string>\n    <string name=\"pref_library_update_show_tab_badge\">Hiển thị số chương chưa đọc</string>\n    <string name=\"error_user_agent_string_invalid\">Chuỗi tác nhân người dùng không hợp lệ</string>\n    <string name=\"unknown_title\">Tiêu đề không xác định</string>\n    <string name=\"track_remove_start_date_conf_text\">Thao tác này sẽ xóa ngày bắt đầu đã chọn trước đó của bạn khỏi %s</string>\n    <string name=\"crash_screen_title\">Ôi trời!</string>\n    <string name=\"track_remove_finish_date_conf_text\">Thao tác này sẽ xóa ngày kết thúc đã chọn trước đó của bạn khỏi %s</string>\n    <string name=\"information_no_manga_category\">Hạng mục trống</string>\n    <string name=\"pref_invalidate_download_cache\">Lập chỉ mục tải xuống</string>\n    <string name=\"action_not_now\">Lúc khác</string>\n    <string name=\"fdroid_warning\">Bản dựng F-Droid không được hỗ trợ chính thức.\n\\nNhấn để tìm hiểu thêm.</string>\n    <string name=\"pref_skip_dupe_chapters\">Bỏ qua chương đúp</string>\n    <string name=\"enhanced_services_not_installed\">Có sẵn nhưng nguồn không được cài đặt: %s</string>\n    <string name=\"day_short\">Ngày %d</string>\n    <string name=\"split_tall_images\">Tách ra những hình ảnh dài</string>\n    <string name=\"pref_hide_in_library_items\">Giấu những truyện đã có trong thư viện</string>\n    <string name=\"minute_short\">%d phút</string>\n    <string name=\"download_notifier_cache_renewal\">Đang kiểm tra những truyện đã tải xuống</string>\n    <string name=\"crash_screen_description\">%s đã có lỗi. Bạn nên chia sẻ tệp báo lỗi tạm ở trong kênh hỗ trợ của chúng tôi trên Discord.</string>\n    <string name=\"action_update_category\">Cập nhật danh mục</string>\n    <string name=\"confirm_add_duplicate_manga\">Truyện này đã có sẵn trong thư viện bạn.\n\\n\n\\nBạn có muốn thêm lại không?</string>\n    <string name=\"copied_to_clipboard_plain\">Đã sao chép vào bảng tạm</string>\n    <string name=\"action_copy_to_clipboard\">Sao chép vào bảng tạm</string>\n    <string name=\"seconds_short\">%d giây</string>\n    <string name=\"hour_short\">%d giờ</string>\n    <string name=\"pref_page_rotate\">Quay những trang rộng để vừa màn hình</string>\n    <string name=\"pref_page_rotate_invert\">Lật hướng của các trang rộng đã xoay</string>\n    <string name=\"overlay_header\">Phủ lên</string>\n    <string name=\"track_remove_date_conf_title\">Loại bỏ ngày?</string>\n    <string name=\"track_error\">%1$s Lỗi: %2$s</string>\n    <string name=\"not_applicable\">N/A</string>\n    <string name=\"information_required_plain\">*bắt buộc</string>\n    <string name=\"pref_double_tap_zoom\">Nhấn đúp để phóng to</string>\n    <string name=\"pref_chapter_swipe_end\">Thao tác vuốt sang phải</string>\n    <string name=\"pref_chapter_swipe_start\">Thao tác vuốt sang trái</string>\n    <string name=\"pref_debug_info\">Thông tin gỡ lỗi</string>\n    <string name=\"create_backup_file_error\">Không thể tạo tệp sao lưu</string>\n    <string name=\"action_set_interval\">Đặt khoảng thời gian</string>\n    <string name=\"action_ok\">OK</string>\n    <string name=\"syncing_library\">Đồng bộ thư viện</string>\n    <string name=\"library_sync_complete\">Hoàn tất đồng bộ hóa thư viện</string>\n    <string name=\"delete_downloaded\">Xóa các chương đã tải xuống</string>\n    <string name=\"action_filter_interval_custom\">Khoảng thời gian cập nhật tùy chỉnh</string>\n    <string name=\"action_sort_next_updated\">Cập nhật dự kiến tiếp theo</string>\n    <string name=\"information_cloudflare_help\">Nhấn vào đây để được trợ giúp về Cloudflare</string>\n    <string name=\"pref_update_only_in_release_period\">Chưa công bố</string>\n    <string name=\"unlock_app_title\">Mở khoá %s</string>\n    <string name=\"source_settings\">Cài đặt nguồn</string>\n    <string name=\"app_settings\">Cài đặt ứng dụng</string>\n    <string name=\"pref_storage_location\">Vị trí kho chứa</string>\n    <string name=\"action_create\">Tạo</string>\n    <string name=\"relative_time_span_never\">Không bao giờ</string>\n    <string name=\"onboarding_storage_action_select\">Chọn một thư mục</string>\n    <string name=\"pref_flash_page_summ\">Giảm tình trạng bóng ma trên màn hình e-ink</string>\n    <string name=\"pref_onboarding_guide\">Hướng dẫn làm quen</string>\n    <string name=\"pref_storage_location_info\">Được sử dụng để sao lưu tự động, tải chương và nguồn cục bộ.</string>\n    <string name=\"onboarding_guides_new_user\">Mới với %s sao? Chúng tôi khuyên bạn nên xem hướng dẫn bắt đầu.</string>\n    <string name=\"onboarding_action_finish\">Bắt đầu</string>\n    <string name=\"action_apply\">Áp dụng</string>\n    <string name=\"manga_display_modified_interval_title\">Đặt để cập nhật mỗi</string>\n    <string name=\"onboarding_storage_selection_required\">Phải chọn một thư mục</string>\n    <string name=\"onboarding_permission_notifications\">Quyền thông báo</string>\n    <string name=\"intervals_header\">Đoạn thời gian</string>\n    <string name=\"action_revert_to_default\">Chỉnh về mặc định</string>\n    <string name=\"onboarding_permission_install_apps\">Cài đặt quyền ứng dụng</string>\n    <string name=\"onboarding_heading\">Xin chào!</string>\n    <string name=\"action_menu_overflow_description\">Thêm tùy chọn</string>\n    <string name=\"last_auto_backup_info\">Lần cuối cùng tự động lưu: %s</string>\n    <string name=\"onboarding_guides_returning_user\">Đã sử dụng %s từ trước rồi sao?</string>\n    <string name=\"selected\">Được chọn</string>\n    <string name=\"no_scanlators_found\">Không tìm thấy nhóm dịch nào</string>\n    <string name=\"not_selected\">Chưa chọn</string>\n    <string name=\"action_move_to_bottom_all_for_series\">Di chuyển bộ truyện xuống cuối</string>\n    <string name=\"scanlator\">Nhóm dịch</string>\n    <string name=\"onboarding_action_skip\">Bỏ qua</string>\n    <string name=\"pref_flash_page\">Làm mới màn hình khi đổi trang</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">Tránh gián đoạn quá trình cập nhật thư viện, tải xuống và khôi phục bản sao lưu trong thời gian dài.</string>\n    <string name=\"exception_offline\">Mất kết nối mạng</string>\n    <string name=\"pref_storage_usage\">Kho chứa chiếm dụng</string>\n    <string name=\"onboarding_action_next\">Tiếp</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">Sử dụng pin nền</string>\n    <string name=\"onboarding_permission_install_apps_description\">Để cài đặt nguồn mở rộng.</string>\n    <string name=\"notification_updating_progress\">Đang cập nhật thư viện… (%s)</string>\n    <string name=\"download_cache_invalidated\">Chỉ mục tải xuống bị vô hiệu</string>\n    <string name=\"action_bar_up_description\">Điều hướng trên</string>\n    <string name=\"onboarding_description\">Trước tiên hãy thiết lập một số thứ nhé. Bạn có thể tùy ý chỉnh lại những cài đặt này lại sau.</string>\n    <string name=\"action_sort_tracker_score\">Điểm bộ theo dõi</string>\n    <string name=\"no_location_set\">Chưa đặt vị trí kho chứa</string>\n    <string name=\"label_data_storage\">Dữ liệu và kho chứa</string>\n    <string name=\"skipped_reason_not_in_release_period\">Bỏ qua vì dự kiến hôm nay không có bản phát hành nào</string>\n    <string name=\"onboarding_permission_notifications_description\">Gửi thông báo khi thư viện cấp nhật và nhiều hơn thế.</string>\n    <string name=\"file_null_uri_error\">Không có tập tin được chọn</string>\n    <string name=\"track_delete_title\">Xóa bộ theo dõi %s?</string>\n    <string name=\"track_delete_remote_text\">Đồng thời xóa khỏi %s</string>\n    <string name=\"has_results\">Có kết quả</string>\n    <string name=\"manga_display_interval_title\">Ước tính mỗi</string>\n    <string name=\"track_delete_text\">Điều này sẽ loại bỏ bộ theo dõi cục bộ.</string>\n    <string name=\"track_activity_name\">Đăng nhập bộ theo dõi</string>\n    <string name=\"onboarding_permission_action_grant\">Cho phép</string>\n    <string name=\"onboarding_storage_info\">Chọn thư mục nơi mà %1$s sẽ chứa chương truyện tải xuống, sao lưu, và những thứ khác.\n\\n\n\\nKhuyến khích sử dụng một thư mục chuyên dụng.\n\\n\n\\nThư mục được chọn: %2$s</string>\n    <string name=\"pref_relative_format\">Mốc thời gian liên quan</string>\n    <string name=\"exception_http\">HTTP %d, kiểm tra trang web trong WebView</string>\n    <string name=\"pref_relative_format_summary\">\\\"%1$s\\\" thay vì là \\\"%2$s\\\"</string>\n    <string name=\"exception_unknown_host\">Không thể truy cập %s</string>\n    <string name=\"exclude_scanlators\">Loại trừ nhóm dịch</string>\n    <string name=\"manga_interval_expected_update\">Các chương mới được dự đoán sẽ phát hành trong khoảng %1$s, kiểm tra vào khoảng %2$s.</string>\n    <string name=\"available_disk_space_info\">Hiện có: %1$s / Tổng cộng: %2$s</string>\n    <string name=\"invalid_backup_file_error\">Mã lỗi đầy đủ:</string>\n    <string name=\"ext_permission_install_apps_warning\">Cần phải cấp phép để cài đặt tiện ích mở rộng. Bấm đây để cấp.</string>\n    <string name=\"private_settings\">Bao gồm những cài đặt nhạy cảm (ví dụ như token đăng nhập tracker)</string>\n    <string name=\"action_add_anyway\">Luôn luôn thêm</string>\n    <string name=\"theme_nord\">Phương bắc</string>\n    <string name=\"pref_library_update_smart_update\">Cập nhật thông minh</string>\n    <string name=\"label_upcoming\">Sắp tới</string>\n    <string name=\"action_migrate_duplicate\">Chuyển vào các mục hiện có</string>\n    <string name=\"onboarding_storage_help_info\">Cập nhật từ phiên bản cũ hơn và không biết nên chọn gì? Tham khảo hướng dẫn để biết thêm thông tin.</string>\n    <string name=\"action_add_repo_message\">Thêm nguồn bổ sung vào Mihon. Địa chỉ URL này cần phải kết thúc với \\\"index.min.json\\\".</string>\n    <string name=\"action_replace_repo_message\">Kho lưu trữ %1$s có Dấu vân tay Khóa ký giống hệt như %2$s.\n\\nNếu điều này là dự kiến, %2$s sẽ bị thay thế. Nếu không, vui lòng liên hệ với người quản lý kho lưu trữ của bạn.</string>\n    <string name=\"information_empty_repos\">Bạn chưa có nguồn nào.</string>\n    <string name=\"ext_revoke_trust\">Thu hồi quyền truy cập của tiện ích không xác định</string>\n    <string name=\"action_add_repo\">Thêm nguồn</string>\n    <string name=\"error_repo_exists\">Nguồn đã có rồi!</string>\n    <string name=\"action_delete_repo\">Xóa nguồn</string>\n    <string name=\"onboarding_storage_help_action\">Hướng dẫn</string>\n    <string name=\"label_extension_repos\">Quản lý nguồn</string>\n    <string name=\"invalid_repo_name\">URL nguồn không hợp lệ</string>\n    <string name=\"label_add_repo_input\">URL nguồn</string>\n    <string name=\"delete_repo_confirmation\">Bạn có muốn xóa nguồn \\\"%s\\\"?</string>\n    <string name=\"action_open_repo\">Mở nguồn</string>\n    <string name=\"manga_interval_expected_update_soon\">Sớm</string>\n    <string name=\"manga_interval_custom_amount\">Tần suất cập nhật tùy chỉnh:</string>\n    <string name=\"pref_display_profile\">Tùy chỉnh hồ sơ màn hình</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">Tắt thu nhỏ</string>\n    <string name=\"action_view_upcoming\">Xem các cập nhật sắp tới</string>\n    <string name=\"upcoming_guide\">Hướng dẫn sắp tới</string>\n    <string name=\"upcoming_calendar_next\">Tháng tiếp theo</string>\n    <string name=\"upcoming_calendar_prev\">Tháng trước</string>\n    <string name=\"action_replace_repo\">Thay thế</string>\n    <string name=\"action_replace_repo_title\">Dấu vân tay cho khóa ký đã được tạo trước đó</string>\n    <string name=\"action_copy_link\">Sao chép liên kết</string>\n    <string name=\"manga_interval_expected_update_null\">Manga này đã hoàn thành hoặc chưa có ngày phát hành dự kiến.</string>\n    <string name=\"pref_flash_duration_summary\">%1$s ms</string>\n    <string name=\"pref_flash_page_interval\">Làm mới sau</string>\n    <string name=\"pref_flash_with\">Làm mới bằng</string>\n    <string name=\"pref_flash_style_black\">Nền đen</string>\n    <string name=\"pref_flash_style_white\">Nền trắng</string>\n    <string name=\"pref_flash_style_white_black\">Nền trắng và Nền đen</string>\n    <string name=\"extensionRepo_settings\">Kho lưu tiện ích mở rộng (repo)</string>\n    <string name=\"add_repo_confirmation\">Bạn có muốn thêm repo \\\"%s\\\" không?</string>\n    <string name=\"pref_flash_duration\">Độ dài làm mới</string>\n    <string name=\"pref_download_new_unread_chapters_only\">Bỏ qua tải xuống các chương đã đọc bị trùng</string>\n    <string name=\"invalid_backup_file_json\">Sao lưu JSON không được hỗ trợ</string>\n    <string name=\"invalid_backup_file_unknown\">Tệp sao lưu bị hỏng</string>\n    <string name=\"confirm_tracker_update\">Cập nhật theo dõi từ chương %d?</string>\n    <string name=\"file_picker_uri_permission_unsupported\">Không thể liên tục truy cập thư mục. Ứng dụng có thể hoạt động bất thường.</string>\n    <string name=\"action_sort_random\">Ngẫu nhiên</string>\n    <string name=\"onboarding_permission_crashlytics\">Gửi nhật ký sự cố (crash log)</string>\n    <string name=\"onboarding_permission_analytics\">Cho phép phân tích dữ liệu</string>\n    <string name=\"onboarding_permission_analytics_description\">Gửi dữ liệu sử dụng ẩn danh để cải thiện các tính năng của ứng dụng.</string>\n    <string name=\"pref_security\">Bảo mật</string>\n    <string name=\"pref_firebase\">Phân tích và Nhật ký sự cố</string>\n    <string name=\"firebase_summary\">Gửi nhật ký sự cố và phân tích, giúp nhà phát triển xác định và khắc phục sự cố, cải thiện hiệu suất và thực hiện các bản cập nhật trong tương lai phù hợp hơn với nhu cầu của bạn</string>\n    <string name=\"onboarding_permission_crashlytics_description\">Gửi nhật ký sự cố ẩn danh tới nhà phát triển để giúp phát triển ứng dụng tốt hơn.</string>\n    <string name=\"ext_confirm_remove\">Gỡ tiện ích mở rộng?</string>\n    <string name=\"non_library_settings\">Tất cả các mục đã đọc</string>\n    <string name=\"ext_remove\">Gỡ</string>\n    <string name=\"remove_private_extension_message\">Bạn có thật sự muốn gỡ tiện ích mở rộng \\\"%s\\\"?</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Cập nhật tiến trình khi được đánh dấu là đã đọc</string>\n    <string name=\"trackers_updated_summary\">Trình theo dõi được cập nhật đến chương %d</string>\n    <string name=\"pref_hardware_bitmap_threshold\">Tùy chỉnh ngưỡng phần cứng bitmap</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">Mặc định (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">Nếu người đọc tải một hình ảnh trống thì hãy giảm dần ngưỡng\\nĐã chọn: %s</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">Ảnh hưởng đến hiệu suất. Chỉ bật nếu việc giảm ngưỡng bitmap không khắc phục được sự cố hình ảnh trống</string>\n    <string name=\"pref_incognito_mode_extension_summary\">Tạm dừng lịch sử đọc của phần mở rộng</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/zh-rCN/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">%1$s 分钟后</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d 个新章节</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">第 %1$s 章及另外 %2$d 章</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">共 %d 部作品</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">%d 个插件可更新</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">剩余 %1$s 章</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d 个分类</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">耗时 %1$s，出现 %2$s 个错误</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">共 %1$s 章</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d 个记录平台</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">跳过了 %d 章，可能是图源没有这些章节，或者被筛选规则排除了</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d 天前</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">后续 %d 个未读章节</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">后续 %d 章</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">缺少 %1$s 章</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d 天</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d 个仓库</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"other\">%1$d 天后</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"other\">第 %1$s 页</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/zh-rCN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"name\">名称</string>\n    <string name=\"categories\">分类</string>\n    <string name=\"manga\">书架中的作品</string>\n    <string name=\"chapters\">章节</string>\n    <string name=\"history\">历史</string>\n    <string name=\"label_settings\">设置</string>\n    <string name=\"label_download_queue\">下载队列</string>\n    <string name=\"label_library\">书架</string>\n    <string name=\"label_recent_manga\">历史</string>\n    <string name=\"label_recent_updates\">更新</string>\n    <string name=\"label_backup\">备份与还原</string>\n    <string name=\"label_extensions\">插件</string>\n    <string name=\"label_extension_info\">插件信息</string>\n    <string name=\"action_settings\">设置</string>\n    <string name=\"action_filter\">筛选</string>\n    <string name=\"action_filter_bookmarked\">已添加书签</string>\n    <string name=\"action_filter_unread\">未读</string>\n    <string name=\"action_filter_empty\">取消筛选</string>\n    <string name=\"action_sort_alpha\">名称</string>\n    <string name=\"action_sort_total\">章节数</string>\n    <string name=\"action_sort_last_read\">最近阅读</string>\n    <string name=\"action_search\">搜索</string>\n    <string name=\"action_global_search\">全局搜索</string>\n    <string name=\"action_select_all\">全选</string>\n    <string name=\"action_mark_as_read\">标记为已读</string>\n    <string name=\"action_mark_as_unread\">标记为未读</string>\n    <string name=\"action_download\">下载</string>\n    <string name=\"action_bookmark\">为章节添加书签</string>\n    <string name=\"action_remove_bookmark\">为章节删除书签</string>\n    <string name=\"action_delete\">删除</string>\n    <string name=\"action_update_library\">更新书架</string>\n    <string name=\"action_edit\">编辑</string>\n    <string name=\"action_add\">添加</string>\n    <string name=\"action_add_category\">添加分类</string>\n    <string name=\"action_edit_categories\">编辑分类</string>\n    <string name=\"action_rename_category\">重命名分类</string>\n    <string name=\"action_move_category\">设置分类</string>\n    <string name=\"action_edit_cover\">编辑封面</string>\n    <string name=\"action_pause\">暂停</string>\n    <string name=\"action_previous_chapter\">上一章</string>\n    <string name=\"action_next_chapter\">下一章</string>\n    <string name=\"action_retry\">重试</string>\n    <string name=\"action_remove\">删除</string>\n    <string name=\"action_resume\">继续</string>\n    <string name=\"action_open_in_browser\">在浏览器中打开</string>\n    <string name=\"action_display_mode\">显示模式</string>\n    <string name=\"action_display\">显示</string>\n    <string name=\"action_display_grid\">紧凑网格</string>\n    <string name=\"action_display_list\">列表</string>\n    <string name=\"action_cancel\">取消</string>\n    <string name=\"action_sort\">排序</string>\n    <string name=\"action_install\">安装</string>\n    <string name=\"action_share\">分享</string>\n    <string name=\"action_save\">保存</string>\n    <string name=\"action_reset\">重置</string>\n    <string name=\"action_undo\">撤销</string>\n    <string name=\"track\">进度记录</string>\n    <string name=\"label_migration\">迁移</string>\n    <string name=\"action_mark_previous_as_read\">标记之前章节为已读</string>\n    <string name=\"action_open_log\">打开日志</string>\n    <string name=\"action_restore\">还原</string>\n    <string name=\"loading\">正在加载…</string>\n    <string name=\"action_display_download_badge\">已下载的章节数</string>\n    <string name=\"app_not_available\">应用无法使用</string>\n    <string name=\"pref_category_general\">常规</string>\n    <string name=\"pref_category_reader\">阅读</string>\n    <string name=\"pref_category_downloads\">下载</string>\n    <string name=\"pref_category_tracking\">进度记录</string>\n    <string name=\"pref_category_advanced\">高级</string>\n    <string name=\"pref_category_about\">关于</string>\n    <string name=\"pref_library_columns\">每行数目</string>\n    <string name=\"portrait\">竖屏</string>\n    <string name=\"landscape\">横屏</string>\n    <string name=\"pref_library_update_interval\">自动更新</string>\n    <string name=\"update_never\">关闭</string>\n    <string name=\"update_6hour\">每 6 小时</string>\n    <string name=\"update_12hour\">每 12 小时</string>\n    <string name=\"update_24hour\">每天</string>\n    <string name=\"update_48hour\">每 2 天</string>\n    <string name=\"update_weekly\">每周</string>\n    <string name=\"all\">全部</string>\n    <string name=\"pref_library_update_restriction\">自动更新的系统限制</string>\n    <string name=\"charging\">充电时</string>\n    <string name=\"pref_update_only_non_completed\">跳过已完结的作品</string>\n    <string name=\"pref_auto_update_manga_sync\">阅读后更新进度</string>\n    <string name=\"default_category\">默认归入分类</string>\n    <string name=\"default_category_summary\">每次都询问</string>\n    <string name=\"ext_update\">更新</string>\n    <string name=\"ext_install\">安装</string>\n    <string name=\"ext_pending\">等待中</string>\n    <string name=\"ext_downloading\">下载中</string>\n    <string name=\"ext_installing\">安装中</string>\n    <string name=\"ext_installed\">已安装</string>\n    <string name=\"ext_trust\">信任</string>\n    <string name=\"ext_untrusted\">未信任</string>\n    <string name=\"ext_uninstall\">卸载</string>\n    <string name=\"untrusted_extension\">插件未受信任</string>\n    <string name=\"untrusted_extension_message\">恶意插件可能会读取所有登录的账号或执行任意代码。\n\\n\n\\n信任此插件即代表你愿意承担上述风险。</string>\n    <string name=\"pref_fullscreen\">全屏</string>\n    <string name=\"pref_page_transitions\">翻页动画</string>\n    <string name=\"pref_double_tap_anim_speed\">双击动画速度</string>\n    <string name=\"pref_show_page_number\">显示页码</string>\n    <string name=\"pref_crop_borders\">裁剪边缘</string>\n    <string name=\"pref_custom_brightness\">自定义亮度</string>\n    <string name=\"pref_custom_color_filter\">色彩滤镜</string>\n    <string name=\"pref_keep_screen_on\">保持屏幕常亮</string>\n    <string name=\"pref_reader_navigation\">翻页</string>\n    <string name=\"pref_read_with_volume_keys\">音量键翻页</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">反转音量键</string>\n    <string name=\"pref_reader_theme\">背景颜色</string>\n    <string name=\"white_background\">白色</string>\n    <string name=\"black_background\">黑色</string>\n    <string name=\"pref_viewer_type\">默认阅读模式</string>\n    <string name=\"left_to_right_viewer\">单页式（从左到右）</string>\n    <string name=\"right_to_left_viewer\">单页式（从右到左）</string>\n    <string name=\"vertical_viewer\">单页式（从上到下）</string>\n    <string name=\"webtoon_viewer\">条漫</string>\n    <string name=\"pager_viewer\">单页式</string>\n    <string name=\"pref_image_scale_type\">缩放模式</string>\n    <string name=\"scale_type_fit_screen\">适应屏幕</string>\n    <string name=\"scale_type_stretch\">拉伸</string>\n    <string name=\"scale_type_fit_width\">适应宽度</string>\n    <string name=\"scale_type_fit_height\">适应高度</string>\n    <string name=\"scale_type_original_size\">原始大小</string>\n    <string name=\"scale_type_smart_fit\">智能填充</string>\n    <string name=\"pref_zoom_start\">缩放位置</string>\n    <string name=\"zoom_start_automatic\">自动</string>\n    <string name=\"zoom_start_left\">左边</string>\n    <string name=\"zoom_start_right\">右边</string>\n    <string name=\"zoom_start_center\">中间</string>\n    <string name=\"double_tap_anim_speed_0\">无动画</string>\n    <string name=\"double_tap_anim_speed_normal\">正常</string>\n    <string name=\"double_tap_anim_speed_fast\">快速</string>\n    <string name=\"pref_rotation_type\">默认屏幕方向</string>\n    <string name=\"rotation_free\">跟随系统</string>\n    <string name=\"rotation_force_portrait\">锁定竖屏</string>\n    <string name=\"rotation_force_landscape\">锁定横屏</string>\n    <string name=\"color_filter_r_value\">R</string>\n    <string name=\"color_filter_g_value\">G</string>\n    <string name=\"color_filter_b_value\">B</string>\n    <string name=\"color_filter_a_value\">A</string>\n    <string name=\"pref_remove_after_marked_as_read\">手动标记为已读后</string>\n    <string name=\"pref_remove_after_read\">读完自动删除</string>\n    <string name=\"disabled\">关闭</string>\n    <string name=\"last_read_chapter\">刚才读完的章节</string>\n    <string name=\"second_to_last\">倒数第二个已读章节</string>\n    <string name=\"third_to_last\">倒数第三个已读章节</string>\n    <string name=\"fourth_to_last\">倒数第四个已读章节</string>\n    <string name=\"fifth_to_last\">倒数第五个已读章节</string>\n    <string name=\"pref_download_new\">自动下载新章节</string>\n    <string name=\"services\">平台</string>\n    <string name=\"pref_create_backup\">创建备份</string>\n    <string name=\"pref_create_backup_summ\">可以用来还原当前书架内容</string>\n    <string name=\"pref_restore_backup\">还原备份</string>\n    <string name=\"pref_restore_backup_summ\">从备份文件中还原书架内容</string>\n    <string name=\"pref_backup_interval\">自动备份频率</string>\n    <string name=\"backup_created\">已创建备份</string>\n    <string name=\"restore_completed\">还原完毕</string>\n    <string name=\"backup_choice\">想要备份什么？</string>\n    <string name=\"restoring_backup\">正在还原备份</string>\n    <string name=\"creating_backup\">正在创建备份</string>\n    <string name=\"pref_clear_chapter_cache\">清除章节缓存</string>\n    <string name=\"used_cache\">已使用：%1$s</string>\n    <string name=\"cache_deleted\">已清除缓存，删除了 %1$d 个文件</string>\n    <string name=\"cache_delete_error\">清除时发生错误</string>\n    <string name=\"pref_clear_cookies\">清除 Cookie</string>\n    <string name=\"cookies_cleared\">Cookie 已清除</string>\n    <string name=\"pref_clear_database\">清理数据库</string>\n    <string name=\"pref_clear_database_summary\">删除未添加到书架的作品记录</string>\n    <string name=\"clear_database_confirmation\">未添加到书架中的作品的阅读进度将会丢失，你确定吗？</string>\n    <string name=\"clear_database_completed\">数据已删除</string>\n    <string name=\"version\">版本</string>\n    <string name=\"pref_enable_acra\">发送错误报告</string>\n    <string name=\"pref_acra_summary\">协助我们修复错误；不会发送敏感数据</string>\n    <string name=\"login_title\">登录 %1$s</string>\n    <string name=\"username\">用户名</string>\n    <string name=\"password\">密码</string>\n    <string name=\"login\">登录</string>\n    <string name=\"login_success\">已登录</string>\n    <string name=\"unknown_error\">未知错误</string>\n    <string name=\"updating_category\">正在更新分类</string>\n    <string name=\"no_more_results\">没有更多结果</string>\n    <string name=\"local_source\">本地图源</string>\n    <string name=\"other_source\">其他</string>\n    <string name=\"action_global_search_hint\">全局搜索…</string>\n    <string name=\"latest\">最近更新</string>\n    <string name=\"browse\">浏览</string>\n    <string name=\"ongoing\">连载中</string>\n    <string name=\"unknown\">未知</string>\n    <string name=\"licensed\">版权屏蔽</string>\n    <string name=\"remove_from_library\">移出书架</string>\n    <string name=\"manga_added_library\">已添加到书架</string>\n    <string name=\"manga_removed_library\">已移出书架</string>\n    <string name=\"delete_downloads_for_manga\">要删除已下载的章节吗？</string>\n    <string name=\"copied_to_clipboard\">已复制到剪贴板：\n\\n「%1$s」</string>\n    <string name=\"source_not_installed\">未安装图源：%1$s</string>\n    <string name=\"display_mode_chapter\">第 %1$s 章</string>\n    <string name=\"chapter_downloading_progress\">正在下载 (%1$d/%2$d)</string>\n    <string name=\"chapter_error\">出错</string>\n    <string name=\"chapter_paused\">已暂停</string>\n    <string name=\"show_title\">图源标题</string>\n    <string name=\"show_chapter_number\">章节编号</string>\n    <string name=\"sort_by_source\">按图源</string>\n    <string name=\"sort_by_number\">按章节编号</string>\n    <string name=\"manga_download\">下载</string>\n    <string name=\"download_unread\">未读</string>\n    <string name=\"confirm_delete_chapters\">确定要删除所选章节吗？</string>\n    <string name=\"manga_tracking_tab\">进度记录</string>\n    <string name=\"reading\">在读</string>\n    <string name=\"completed\">已完结</string>\n    <string name=\"dropped\">抛弃</string>\n    <string name=\"on_hold\">搁置</string>\n    <string name=\"plan_to_read\">想读</string>\n    <string name=\"repeating\">重温</string>\n    <string name=\"score\">评分</string>\n    <string name=\"title\">标题</string>\n    <string name=\"status\">状态</string>\n    <string name=\"track_status\">状态</string>\n    <string name=\"track_type\">类型</string>\n    <string name=\"error_category_exists\">已存在同名分类！</string>\n    <string name=\"snack_categories_deleted\">分类已删除</string>\n    <string name=\"dialog_with_checkbox_remove_description\">将会清除此章节的阅读日期，你确定吗？</string>\n    <string name=\"dialog_with_checkbox_reset\">重置此作品的所有章节</string>\n    <string name=\"snack_add_to_library\">要添加到书架吗？</string>\n    <string name=\"picture_saved\">图片已保存</string>\n    <string name=\"custom_filter\">滤镜</string>\n    <string name=\"set_as_cover\">设为封面</string>\n    <string name=\"cover_updated\">封面已更新</string>\n    <string name=\"chapter_progress\">第 %1$d 页</string>\n    <string name=\"no_next_chapter\">后面没有啦</string>\n    <string name=\"decode_image_error\">加载图片失败</string>\n    <string name=\"confirm_set_image_as_cover\">要将此页设为封面吗？</string>\n    <string name=\"transition_finished\">已读完：</string>\n    <string name=\"transition_current\">本章：</string>\n    <string name=\"transition_next\">下一章：</string>\n    <string name=\"transition_previous\">上一章：</string>\n    <string name=\"transition_no_next\">后面没有啦</string>\n    <string name=\"transition_no_previous\">前面没有啦</string>\n    <string name=\"transition_pages_loading\">正在加载页面…</string>\n    <string name=\"transition_pages_error\">图片加载失败：%1$s</string>\n    <string name=\"migration_dialog_what_to_include\">选择需要迁移的数据</string>\n    <string name=\"migrate\">迁移</string>\n    <string name=\"copy\">共存</string>\n    <string name=\"download_queue_error\">下载章节失败，可以在下载页面中重试</string>\n    <string name=\"notification_new_chapters\">发现新章节</string>\n    <string name=\"notification_cover_update_failed\">封面更新失败</string>\n    <string name=\"notification_first_add_to_library\">请先将作品添加到书架</string>\n    <string name=\"file_select_cover\">选择封面图片</string>\n    <string name=\"file_select_backup\">选择备份文件</string>\n    <string name=\"update_check_confirm\">下载</string>\n    <string name=\"update_check_no_new_updates\">没有新版本</string>\n    <string name=\"update_check_notification_download_in_progress\">正在下载…</string>\n    <string name=\"update_check_notification_download_complete\">点击安装更新</string>\n    <string name=\"update_check_notification_download_error\">下载失败</string>\n    <string name=\"update_check_notification_update_available\">有新版本！</string>\n    <string name=\"information_no_downloads\">无下载任务</string>\n    <string name=\"information_no_recent\">最近没有更新</string>\n    <string name=\"information_no_recent_manga\">最近没有阅读</string>\n    <string name=\"information_empty_library\">书架为空</string>\n    <string name=\"information_empty_category\">尚无分类，点击加号按钮创建分类用来管理书架。</string>\n    <string name=\"download_notifier_downloader_title\">下载</string>\n    <string name=\"download_notifier_title_error\">出错</string>\n    <string name=\"download_notifier_unknown_error\">下载时发生意外错误</string>\n    <string name=\"download_notifier_text_only_wifi\">未连接 Wi-Fi</string>\n    <string name=\"download_notifier_no_network\">未连接网络</string>\n    <string name=\"download_notifier_download_paused\">下载已暂停</string>\n    <string name=\"channel_common\">通用</string>\n    <string name=\"pref_read_with_long_tap\">长按显示操作菜单</string>\n    <string name=\"action_open_in_web_view\">在 WebView 中打开</string>\n    <string name=\"pref_skip_read_chapters\">跳过已读章节</string>\n    <string name=\"pref_color_filter_mode\">滤镜混合模式</string>\n    <string name=\"label_help\">帮助</string>\n    <string name=\"filter_mode_overlay\">叠加</string>\n    <string name=\"filter_mode_multiply\">正片叠底</string>\n    <string name=\"filter_mode_screen\">滤色</string>\n    <string name=\"filter_mode_lighten\">变亮</string>\n    <string name=\"filter_mode_darken\">变暗</string>\n    <string name=\"no_results_found\">没有结果</string>\n    <string name=\"migration_selection_prompt\">选择需要迁移的图源</string>\n    <string name=\"action_webview_back\">后退</string>\n    <string name=\"action_webview_forward\">前进</string>\n    <string name=\"action_webview_refresh\">刷新</string>\n    <string name=\"pref_category_library\">书架</string>\n    <string name=\"ext_obsolete\">废弃</string>\n    <string name=\"obsolete_extension_message\">此插件已被废弃，可能无法正常运行或导致应用发生故障，建议卸载。</string>\n    <string name=\"pref_date_format\">日期格式</string>\n    <string name=\"pref_category_library_update\">全局更新</string>\n    <string name=\"logout_title\">要退出 %1$s 吗？</string>\n    <string name=\"logout\">退出</string>\n    <string name=\"logout_success\">已退出</string>\n    <string name=\"paused\">已暂停</string>\n    <string name=\"label_more\">更多</string>\n    <string name=\"action_sort_latest_chapter\">作品更新时间</string>\n    <string name=\"action_view_chapters\">查看章节</string>\n    <string name=\"action_cancel_all\">全部取消</string>\n    <string name=\"theme_light\">浅色</string>\n    <string name=\"theme_dark\">深色</string>\n    <string name=\"theme_system\">跟随系统</string>\n    <string name=\"pref_manage_notifications\">通知管理</string>\n    <string name=\"pref_category_security\">隐私</string>\n    <string name=\"lock_when_idle\">切后台时锁定</string>\n    <string name=\"lock_always\">始终开启</string>\n    <string name=\"lock_never\">关闭</string>\n    <string name=\"secure_screen\">隐私界面</string>\n    <string name=\"ext_updates_pending\">待更新</string>\n    <string name=\"information_cloudflare_bypass_failure\">无法绕过 Cloudflare</string>\n    <string name=\"information_webview_outdated\">请更新 WebView 应用提高兼容性</string>\n    <string name=\"secure_screen_summary\">阻止截屏，并在切换后台时隐藏预览图</string>\n    <string name=\"pref_category_display\">显示</string>\n    <string name=\"channel_new_chapters\">章节更新</string>\n    <string name=\"hide_notification_content\">隐藏通知内容</string>\n    <string name=\"lock_with_biometrics\">应用锁</string>\n    <string name=\"pref_cutout_short\">在屏幕刘海区域显示内容</string>\n    <string name=\"notification_chapters_single\">第 %1$s 章</string>\n    <string name=\"notification_chapters_single_and_more\">第 %1$s 章及另外 %2$d 章</string>\n    <string name=\"notification_chapters_multiple\">第 %1$s 章</string>\n    <string name=\"pref_disable_battery_optimization\">关闭电池优化</string>\n    <string name=\"pref_disable_battery_optimization_summary\">有助于后台更新书架和备份</string>\n    <string name=\"battery_optimization_disabled\">电池优化已经关闭</string>\n    <string name=\"email\">邮箱地址</string>\n    <string name=\"pref_always_show_chapter_transition\">始终显示章节间的过渡页面</string>\n    <string name=\"action_menu\">菜单</string>\n    <string name=\"action_newest\">从新到旧</string>\n    <string name=\"action_oldest\">从旧到新</string>\n    <string name=\"action_move_to_top\">移到顶部</string>\n    <string name=\"action_move_to_bottom\">移到底部</string>\n    <string name=\"channel_ext_updates\">插件更新</string>\n    <string name=\"label_sources\">图源</string>\n    <string name=\"updating_library\">正在更新书架</string>\n    <string name=\"pref_category_reading\">阅读</string>\n    <string name=\"pref_skip_filtered_chapters\">跳过筛选掉的章节</string>\n    <string name=\"pinned_sources\">已置顶</string>\n    <string name=\"action_unpin\">取消置顶</string>\n    <string name=\"action_pin\">置顶</string>\n    <string name=\"pref_webtoon_side_padding\">侧边留白</string>\n    <string name=\"vertical_plus_viewer\">条漫（页间有空隙）</string>\n    <string name=\"action_select_inverse\">反选</string>\n    <string name=\"add_tracking\">添加进度记录</string>\n    <string name=\"information_webview_required\">本应用需要 WebView 才能运行</string>\n    <string name=\"manga_info_collapse\">收起</string>\n    <string name=\"manga_info_expand\">展开</string>\n    <string name=\"licenses\">开源许可证</string>\n    <string name=\"website\">官网</string>\n    <string name=\"add_to_library\">添加到书架</string>\n    <string name=\"in_library\">在书架中</string>\n    <string name=\"label_downloaded_only\">仅限已下载内容</string>\n    <string name=\"creating_backup_error\">备份失败</string>\n    <string name=\"restoring_backup_canceled\">已取消还原</string>\n    <string name=\"restoring_backup_error\">还原备份失败</string>\n    <string name=\"restore_in_progress\">还原已在进行</string>\n    <string name=\"backup_in_progress\">备份已在进行</string>\n    <string name=\"recent_manga_time\">第 %1$s 章 - %2$s</string>\n    <string name=\"local_source_help_guide\">本地图源指南</string>\n    <string name=\"last_used_source\">最近使用</string>\n    <string name=\"downloaded_only_summary\">筛选书架里的全部作品</string>\n    <string name=\"check_for_updates\">检查更新</string>\n    <string name=\"restore_duration\">%1$02d 分， %2$02d 秒</string>\n    <string name=\"gray_background\">灰色</string>\n    <string name=\"pref_category_for_this_series\">本作品</string>\n    <string name=\"viewer\">阅读模式</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">打开系统设置失败</string>\n    <string name=\"pref_refresh_library_covers\">刷新书架封面</string>\n    <string name=\"tracking_info\">将阅读进度上传到第三方进度记录平台。在作品页面点击“进度记录”按钮即可设置。</string>\n    <string name=\"sort_by_upload_date\">按上传日期</string>\n    <string name=\"label_data\">数据</string>\n    <string name=\"backup_restore_missing_sources\">图源缺失：</string>\n    <string name=\"invalid_backup_file_missing_manga\">备份未包含任何作品。</string>\n    <string name=\"invalid_backup_file\">备份文件无效：</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">更新书架时一并检查封面和简介的变动</string>\n    <string name=\"pref_library_update_refresh_metadata\">自动刷新作品信息</string>\n    <string name=\"action_migrate\">迁移</string>\n    <string name=\"action_display_comfortable_grid\">松散网格</string>\n    <string name=\"tabs_header\">标签</string>\n    <string name=\"action_display_show_tabs\">显示分类标签</string>\n    <string name=\"page_list_empty_error\">没有图片</string>\n    <string name=\"action_disable_all\">全部关闭</string>\n    <string name=\"action_enable_all\">全部开启</string>\n    <string name=\"pref_show_reading_mode_summary\">开始阅读时，短暂显示当前阅读模式</string>\n    <string name=\"pref_show_reading_mode\">阅读模式提示</string>\n    <string name=\"action_start\">开始</string>\n    <string name=\"loader_not_implemented_error\">未找到图源</string>\n    <string name=\"action_disable\">关闭</string>\n    <string name=\"requires_app_restart\">需要重启应用才能生效</string>\n    <string name=\"label_network\">网络</string>\n    <string name=\"tapping_inverted_both\">全部</string>\n    <string name=\"tapping_inverted_vertical\">上下</string>\n    <string name=\"tapping_inverted_horizontal\">左右</string>\n    <string name=\"tapping_inverted_none\">无</string>\n    <string name=\"unknown_status\">未知状态</string>\n    <string name=\"unknown_author\">未知作者</string>\n    <string name=\"updated_version\">已更新至 v%1$s</string>\n    <string name=\"whats_new\">更新日志</string>\n    <string name=\"download_insufficient_space\">存储空间不足，无法下载章节</string>\n    <string name=\"action_global_search_query\">全局搜索 \\\"%1$s\\\"</string>\n    <string name=\"pref_category_reading_mode\">阅读模式</string>\n    <string name=\"pref_category_theme\">主题</string>\n    <string name=\"action_sort_date_added\">收藏日期</string>\n    <string name=\"pref_read_with_tapping_inverted\">反转点按区域</string>\n    <string name=\"no_pinned_sources\">没有置顶图源</string>\n    <string name=\"channel_complete\">完成</string>\n    <string name=\"channel_progress\">进度</string>\n    <string name=\"channel_errors\">错误</string>\n    <string name=\"backup_restore_missing_trackers\">尚未登录进度记录平台：</string>\n    <string name=\"pref_remove_bookmarked_chapters\">允许删除添加了书签的章节</string>\n    <string name=\"pref_category_delete_chapters\">删除章节</string>\n    <string name=\"ext_nsfw_warning\">来自此插件的图源可能包含 NSFW (18+) 内容</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">如果有插件标记错误，这项设置无法阻止它们展示 NSFW (18+) 内容。</string>\n    <string name=\"no_chapters_error\">没有章节</string>\n    <string name=\"chapter_settings_updated\">已更新默认章节设置</string>\n    <string name=\"set_chapter_settings_as_default\">设为默认</string>\n    <string name=\"also_set_chapter_settings_for_library\">同时应用到书架里的所有作品</string>\n    <string name=\"confirm_set_chapter_settings\">确定要将当前设置保存为默认吗？</string>\n    <string name=\"chapter_settings\">章节设置</string>\n    <string name=\"share_page_info\">《%1$s》%2$s，第 %3$d 页</string>\n    <string name=\"action_search_settings\">搜索设置</string>\n    <string name=\"downloaded_chapters\">已下载的章节</string>\n    <string name=\"manga_from_library\">书架中的作品</string>\n    <string name=\"pref_incognito_mode_summary\">暂停记录阅读历史</string>\n    <string name=\"pref_incognito_mode\">无痕模式</string>\n    <string name=\"pref_clear_history\">清除历史记录</string>\n    <string name=\"clear_history_confirmation\">你确定吗？所有历史记录都会丢失。</string>\n    <string name=\"clear_history_completed\">历史记录已删除</string>\n    <string name=\"spen_next_page\">下一页</string>\n    <string name=\"spen_previous_page\">上一页</string>\n    <string name=\"migration_help_guide\">图源迁移指南</string>\n    <string name=\"pref_category_nsfw_content\">NSFW (18+) 图源</string>\n    <string name=\"file_picker_error\">没有文件管理器</string>\n    <string name=\"myanimelist_relogin\">请重新登录 MAL</string>\n    <string name=\"pref_show_nsfw_source\">在图源和插件列表中显示</string>\n    <string name=\"pref_viewer_nav\">点按区域</string>\n    <string name=\"edge_nav\">两侧</string>\n    <string name=\"kindlish_nav\">Kindle</string>\n    <string name=\"l_nav\">L 形</string>\n    <string name=\"track_finished_reading_date\">阅读完毕日期</string>\n    <string name=\"track_started_reading_date\">开始阅读日期</string>\n    <string name=\"pref_dump_crash_logs_summary\">将错误日志保存到文件中，以便提供给开发者</string>\n    <string name=\"pref_dump_crash_logs\">导出崩溃日志</string>\n    <string name=\"action_desc\">降序</string>\n    <string name=\"action_asc\">升序</string>\n    <string name=\"action_order_by_chapter_number\">按章节编号</string>\n    <string name=\"action_order_by_upload_date\">按上传日期</string>\n    <string name=\"action_filter_tracked\">已记录进度</string>\n    <string name=\"action_display_show_number_of_items\">显示作品数</string>\n    <string name=\"right_and_left_nav\">左右</string>\n    <string name=\"pref_dual_page_split\">拆分双页</string>\n    <string name=\"pref_dual_page_invert\">拆分双页时交换顺序</string>\n    <string name=\"pref_dual_page_invert_summary\">拆分双页的顺序与阅读方向不符时可以开启</string>\n    <string name=\"backup_restore_content_full\">可能需要安装缺失的插件并重新登录进度记录平台。</string>\n    <string name=\"nav_zone_right\">往右</string>\n    <string name=\"nav_zone_left\">往左</string>\n    <string name=\"nav_zone_next\">下一页</string>\n    <string name=\"nav_zone_prev\">上一页</string>\n    <string name=\"pref_show_navigation_mode_summary\">开始阅读时，短暂显示点按区域</string>\n    <string name=\"pref_show_navigation_mode\">点按区域提示</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"none\">无</string>\n    <string name=\"exclude\">排除：%s</string>\n    <string name=\"include\">包含：%s</string>\n    <string name=\"action_sort_chapter_fetch_date\">章节获取时间</string>\n    <string name=\"pref_library_update_categories_details\">排除优先于包含，同时属于包含和排除分类的作品不会自动更新。</string>\n    <string name=\"pref_download_new_categories_details\">排除优先于包含，同时属于包含和排除分类的作品不会自动下载。</string>\n    <string name=\"pref_category_auto_download\">自动下载</string>\n    <string name=\"action_show_errors\">点击查看详情</string>\n    <string name=\"update_check_eol\">应用不再支持此 Android 版本</string>\n    <string name=\"clipboard_copy_error\">复制到剪贴板失败</string>\n    <string name=\"rotation_landscape\">横屏</string>\n    <string name=\"rotation_portrait\">竖屏</string>\n    <string name=\"pref_create_folder_per_manga_summary\">根据作品标题创建文件夹</string>\n    <string name=\"pref_create_folder_per_manga\">将图片保存到单独文件夹</string>\n    <string name=\"pref_reader_actions\">操作菜单</string>\n    <string name=\"rotation_type\">屏幕方向</string>\n    <string name=\"pref_grayscale\">灰度</string>\n    <string name=\"notification_incognito_text\">关闭无痕模式</string>\n    <string name=\"automatic_background\">自动</string>\n    <string name=\"cancel_all_for_series\">取消此作品</string>\n    <string name=\"error_no_match\">没有匹配项</string>\n    <string name=\"source_unsupported\">图源不受支持</string>\n    <string name=\"unread\">未读</string>\n    <string name=\"date\">日期</string>\n    <string name=\"local_filter_order_by\">排序依据</string>\n    <string name=\"local_invalid_format\">章节格式无效</string>\n    <string name=\"chapter_not_found\">未找到章节</string>\n    <string name=\"restrictions\">限制：%s</string>\n    <string name=\"action_display_local_badge\">本地图源</string>\n    <string name=\"off\">关闭</string>\n    <string name=\"on\">开启</string>\n    <string name=\"error_sharing_cover\">分享封面时出错</string>\n    <string name=\"error_saving_cover\">保存封面时出错</string>\n    <string name=\"cover_saved\">封面已保存</string>\n    <string name=\"manga_cover\">封面</string>\n    <string name=\"categorized_display_settings\">单独设置各个分类的排序</string>\n    <string name=\"tracking_guide\">进度记录指南</string>\n    <string name=\"information_empty_category_dialog\">还没有创建分类。</string>\n    <string name=\"action_start_downloading_now\">立即开始下载</string>\n    <string name=\"about_dont_kill_my_app\">部分厂商杀掉后台服务的现象比较严重，此网站提供了一些解决方法。</string>\n    <string name=\"restore_miui_warning\">如果关闭 MIUI 优化，备份与还原可能会出现问题。</string>\n    <string name=\"pref_dark_theme_pure_black\">纯黑深色模式</string>\n    <string name=\"theme_yotsuba\">四叶草</string>\n    <string name=\"theme_yinyang\">阴阳</string>\n    <string name=\"theme_tako\">Tako</string>\n    <string name=\"theme_strawberrydaiquiri\">草莓黛绮莉</string>\n    <string name=\"theme_midnightdusk\">午夜幽暗</string>\n    <string name=\"theme_greenapple\">青苹果</string>\n    <string name=\"pref_app_theme\">应用主题</string>\n    <string name=\"enhanced_tracking_info\">为特定图源提供增强功能。作品在添加到书架时会自动同步进度。</string>\n    <string name=\"enhanced_services\">增强平台</string>\n    <string name=\"theme_monet\">动态</string>\n    <string name=\"label_background_activity\">后台活动</string>\n    <string name=\"pref_lowest\">最低</string>\n    <string name=\"pref_low\">低</string>\n    <string name=\"pref_high\">高</string>\n    <string name=\"pref_highest\">最高</string>\n    <string name=\"pref_hide_threshold\">滑动时隐藏菜单的灵敏度</string>\n    <string name=\"pref_inverted_colors\">反色</string>\n    <string name=\"relative_time_today\">今天</string>\n    <string name=\"theme_tealturquoise\">青绿</string>\n    <string name=\"confirm_lock_change\">验证后完成修改</string>\n    <string name=\"label_default\">默认</string>\n    <string name=\"pref_category_appearance\">外观</string>\n    <string name=\"action_track\">记录进度</string>\n    <string name=\"getting_started_guide\">入门指南</string>\n    <string name=\"pref_tablet_ui_mode\">平板界面</string>\n    <string name=\"pref_remove_exclude_categories\">排除的分类</string>\n    <string name=\"help_translate\">协助翻译</string>\n    <string name=\"ext_app_info\">应用信息</string>\n    <string name=\"ext_installer_legacy\">旧式安装程序</string>\n    <string name=\"ext_installer_pref\">安装程序</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">安装并启动 Shizuku 后才能设置 Shizuku 为插件安装程序。</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku 未在运行</string>\n    <string name=\"ext_install_service_notif\">正在安装插件…</string>\n    <string name=\"action_sort_count\">作品总数</string>\n    <string name=\"pref_verbose_logging_summary\">将详细日志打印到系统日志（会降低应用性能）</string>\n    <string name=\"pref_verbose_logging\">详细日志记录</string>\n    <string name=\"label_warning\">警告</string>\n    <string name=\"action_display_language_badge\">语言</string>\n    <string name=\"backup_info\">你应该将备份数据保存到多个地方。备份可能含有敏感数据（例如储存的密码），分享时请留意。</string>\n    <string name=\"notification_size_warning\">大量更新会损害图源，并可能导致更新变慢、耗电增加。点击了解详情。</string>\n    <string name=\"connected_to_wifi\">仅连接 Wi-Fi 时</string>\n    <string name=\"update_72hour\">每 3 天</string>\n    <string name=\"download_queue_size_warning\">警告：批量下载可能导致图源变慢，甚至会使得它们屏蔽 Mihon。点击了解详情。</string>\n    <string name=\"ext_update_all\">全部更新</string>\n    <string name=\"channel_app_updates\">应用更新</string>\n    <string name=\"pref_auto_clear_chapter_cache\">启动时清除章节缓存</string>\n    <string name=\"database_clean\">无需清理</string>\n    <string name=\"clear_database_source_item_count\">数据库中有 %1$d 部作品未添加到书架</string>\n    <string name=\"extension_api_error\">获取插件列表失败</string>\n    <string name=\"privacy_policy\">隐私声明</string>\n    <string name=\"pref_update_only_completely_read\">跳过有未读章节的作品</string>\n    <string name=\"library_errors_help\">关于书架更新出错的解决方法，请参阅 %1$s</string>\n    <string name=\"save_chapter_as_cbz\">保存为 CBZ 压缩包</string>\n    <string name=\"publishing_finished\">出版完毕</string>\n    <string name=\"cancelled\">已中止</string>\n    <string name=\"on_hiatus\">休刊中</string>\n    <string name=\"action_show_manga\">显示作品</string>\n    <string name=\"action_display_cover_only_grid\">封面网格</string>\n    <string name=\"pref_landscape_zoom\">自动放大横向图片</string>\n    <string name=\"pref_navigate_pan\">图片放大时先平移再翻页</string>\n    <string name=\"pref_update_only_started\">跳过尚未开始阅读的作品</string>\n    <string name=\"skipped_reason_completed\">已跳过，因为作品已完结</string>\n    <string name=\"skipped_reason_not_caught_up\">已跳过，因为有未读章节</string>\n    <string name=\"skipped_reason_not_started\">已跳过，因为尚未开始阅读</string>\n    <string name=\"learn_more\">点击了解详情</string>\n    <string name=\"notification_update_error\">%1$d 个更新失败了</string>\n    <string name=\"rotation_reverse_portrait\">反向竖屏</string>\n    <string name=\"action_move_to_top_all_for_series\">将作品移到顶部</string>\n    <string name=\"disabled_nav\">关闭</string>\n    <string name=\"error_saving_picture\">保存图片出错</string>\n    <string name=\"empty_backup_error\">书架没有可备份的作品</string>\n    <string name=\"update_check_open\">打开 GitHub 页面</string>\n    <string name=\"webview_data_deleted\">已清除 WebView 数据</string>\n    <string name=\"pref_clear_webview_data\">清除 WebView 数据</string>\n    <string name=\"action_close\">关闭</string>\n    <string name=\"source_filter_empty_screen\">没有已安装的图源</string>\n    <string name=\"source_empty_screen\">没有图源</string>\n    <string name=\"action_sort_last_manga_update\">检查更新时间</string>\n    <string name=\"action_sort_unread_count\">未读章数</string>\n    <string name=\"split_tall_images_summary\">可以改善阅读器的性能</string>\n    <string name=\"download_notifier_split_page_not_found\">分割时未找到第 %d 页</string>\n    <string name=\"download_notifier_split_page_path_not_found\">未找到第 %d 页的文件路径</string>\n    <string name=\"pref_reset_viewer_flags\">重置各作品阅读器独立设置</string>\n    <string name=\"pref_reset_viewer_flags_summary\">重置所有作品的阅读模式和屏幕方向</string>\n    <string name=\"pref_reset_viewer_flags_success\">已重置所有阅读器设置</string>\n    <string name=\"pref_reset_viewer_flags_error\">重置阅读器设置失败</string>\n    <string name=\"empty_screen\">呃…尴尬了</string>\n    <string name=\"ext_info_age_rating\">分级</string>\n    <string name=\"ext_info_version\">版本</string>\n    <string name=\"ext_info_language\">语言</string>\n    <string name=\"reading_list\">在读</string>\n    <string name=\"wish_list\">想读</string>\n    <string name=\"complete_list\">读过</string>\n    <string name=\"unfinished_list\">抛弃</string>\n    <string name=\"on_hold_list\">搁置</string>\n    <string name=\"network_not_metered\">仅通过不按流量计费的网络</string>\n    <string name=\"cant_open_last_read_chapter\">无法打开上次阅读的章节</string>\n    <string name=\"custom_cover\">自定义封面</string>\n    <string name=\"not_installed\">未安装</string>\n    <string name=\"pref_app_language\">应用语言</string>\n    <string name=\"theme_lavender\">薰衣草</string>\n    <string name=\"description_placeholder\">无简介</string>\n    <string name=\"delete_category_confirmation\">确定要删除 \\\"%s\\\" 分类吗？</string>\n    <string name=\"delete_category\">删除分类</string>\n    <string name=\"internal_error\">InternalError: 内部错误，详情请见崩溃日志</string>\n    <string name=\"pref_user_agent_string\">默认 User Agent 字符串</string>\n    <string name=\"pref_reset_user_agent_string\">恢复默认 User Agent 字符串</string>\n    <string name=\"action_remove_everything\">全部删除</string>\n    <string name=\"appwidget_unavailable_locked\">应用锁开启时，小部件不能使用</string>\n    <string name=\"appwidget_updates_description\">查看最近更新的作品</string>\n    <string name=\"update_already_running\">有其他更新尚未完成</string>\n    <string name=\"error_user_agent_string_blank\">User Agent 字符串不能为空</string>\n    <string name=\"theme_tidalwave\">浪潮</string>\n    <string name=\"download_ahead\">预先下载</string>\n    <string name=\"auto_download_while_reading\">阅读时自动下载</string>\n    <string name=\"download_ahead_info\">要求当前章节和下一章节都已下载。</string>\n    <string name=\"are_you_sure\">你确定吗？</string>\n    <string name=\"multi_lang\">多语言</string>\n    <string name=\"updates_last_update_info\">书架更新时间：%s</string>\n    <string name=\"remove_manga\">即将从书架中删除 \\\"%s\\\"</string>\n    <string name=\"popular\">热门</string>\n    <string name=\"missing_storage_permission\">未授予存储权限</string>\n    <string name=\"skipped_reason_not_always_update\">已跳过，因为作品无需更新</string>\n    <string name=\"action_search_hint\">搜索…</string>\n    <string name=\"crash_screen_title\">哦豁！</string>\n    <string name=\"crash_screen_description\">%s 发生了意外错误。建议你反馈时提供崩溃日志。</string>\n    <string name=\"crash_screen_restart_application\">重启应用</string>\n    <string name=\"pref_appearance_summary\">主题 • 日期格式</string>\n    <string name=\"pref_library_summary\">分类 • 全局更新 • 目录左右滑动</string>\n    <string name=\"pref_downloads_summary\">自动下载 • 预先下载</string>\n    <string name=\"pref_tracking_summary\">阅读进度上传 • 增强同步</string>\n    <string name=\"pref_advanced_summary\">导出崩溃日志 • 电池优化</string>\n    <string name=\"pref_backup_summary\">手动备份 • 自动备份 • 存储空间</string>\n    <string name=\"pref_security_summary\">应用锁 • 隐私界面</string>\n    <string name=\"pref_browse_summary\">图源 • 插件 • 全局搜索</string>\n    <string name=\"pref_reader_summary\">阅读模式 • 显示 • 翻页</string>\n    <string name=\"unknown_title\">未知标题</string>\n    <string name=\"invalid_location\">无效位置：%s</string>\n    <string name=\"error_user_agent_string_invalid\">User Agent 字符串无效</string>\n    <string name=\"updates_last_update_info_just_now\">刚才</string>\n    <string name=\"download_notifier_cache_renewal\">正在扫描已下载章节</string>\n    <string name=\"action_open_random_manga\">随机打开作品</string>\n    <string name=\"information_no_entries_found\">此分类没有作品</string>\n    <string name=\"fdroid_warning\">F-Droid 渠道不受官方支持。\n\\n点击了解详情。</string>\n    <string name=\"action_display_show_continue_reading_button\">继续阅读按钮</string>\n    <string name=\"pref_invalidate_download_cache\">重建下载索引</string>\n    <string name=\"track_remove_date_conf_title\">要删除日期吗？</string>\n    <string name=\"track_remove_start_date_conf_text\">将会删除之前在 %s 中标记的开始日期</string>\n    <string name=\"track_remove_finish_date_conf_text\">将会删除之前在 %s 中标记的结束日期</string>\n    <string name=\"pref_invalidate_download_cache_summary\">强制重新扫描已下载的章节</string>\n    <string name=\"label_stats\">统计</string>\n    <string name=\"label_local\">本地</string>\n    <string name=\"label_downloaded\">已下载</string>\n    <string name=\"label_overview_section\">总览</string>\n    <string name=\"label_read_duration\">阅读时长</string>\n    <string name=\"label_titles_section\">作品</string>\n    <string name=\"label_completed_titles\">读完的作品数</string>\n    <string name=\"label_total_chapters\">总数</string>\n    <string name=\"label_titles_in_global_update\">在全局更新范围</string>\n    <string name=\"label_tracker_section\">进度记录</string>\n    <string name=\"label_tracked_titles\">记录的作品数</string>\n    <string name=\"label_read_chapters\">已读</string>\n    <string name=\"label_mean_score\">平均评分</string>\n    <string name=\"label_started\">阅读过</string>\n    <string name=\"action_not_now\">以后再说</string>\n    <string name=\"label_used\">平台数</string>\n    <string name=\"not_applicable\">无</string>\n    <string name=\"minute_short\">%d 分</string>\n    <string name=\"seconds_short\">%d 秒</string>\n    <string name=\"day_short\">%d 天</string>\n    <string name=\"hour_short\">%d 时</string>\n    <string name=\"pref_library_update_show_tab_badge\">在“更新”图标上显示未读章数</string>\n    <string name=\"information_no_manga_category\">分类为空</string>\n    <string name=\"copied_to_clipboard_plain\">已复制到剪贴板</string>\n    <string name=\"enhanced_services_not_installed\">支持以下平台但图源尚未安装：%s</string>\n    <string name=\"pref_skip_dupe_chapters\">跳过重复章节</string>\n    <string name=\"confirm_add_duplicate_manga\">书架中已有同名作品。\n\\n\n\\n要继续添加吗？</string>\n    <string name=\"track_error\">%1$s 发生错误：%2$s</string>\n    <string name=\"information_required_plain\">*必填</string>\n    <string name=\"pref_hide_in_library_items\">隐藏已添加到书架的作品</string>\n    <string name=\"action_copy_to_clipboard\">复制到剪贴板</string>\n    <string name=\"action_update_category\">更新分类</string>\n    <string name=\"split_tall_images\">分割长图</string>\n    <string name=\"overlay_header\">标记和按钮</string>\n    <string name=\"pref_page_rotate\">旋转横向图片</string>\n    <string name=\"pref_page_rotate_invert\">旋转横向图片时反转方向</string>\n    <string name=\"pref_debug_info\">调试信息</string>\n    <string name=\"pref_chapter_swipe_end\">向右滑动操作</string>\n    <string name=\"pref_chapter_swipe_start\">向左滑动操作</string>\n    <string name=\"pref_double_tap_zoom\">双击放大</string>\n    <string name=\"pref_update_only_in_release_period\">预测下次更新时间</string>\n    <string name=\"action_ok\">确定</string>\n    <string name=\"track_delete_title\">要删除 %s 的记录吗？</string>\n    <string name=\"track_delete_remote_text\">同时删除 %s 上的数据</string>\n    <string name=\"track_delete_text\">将会在本地删除进度记录的关联。</string>\n    <string name=\"delete_downloaded\">删除已下载章节</string>\n    <string name=\"action_filter_interval_custom\">自定义更新频率</string>\n    <string name=\"action_set_interval\">设置间隔</string>\n    <string name=\"action_sort_next_updated\">预计更新时间</string>\n    <string name=\"intervals_header\">间隔</string>\n    <string name=\"manga_display_interval_title\">估计每个</string>\n    <string name=\"manga_display_modified_interval_title\">设定更新为每</string>\n    <string name=\"skipped_reason_not_in_release_period\">已跳过，因为预计今天没有更新</string>\n    <string name=\"has_results\">有结果</string>\n    <string name=\"syncing_library\">正在同步书架</string>\n    <string name=\"library_sync_complete\">书架同步完成</string>\n    <string name=\"information_cloudflare_help\">点击这里查看 Cloudflare 帮助</string>\n    <string name=\"download_cache_invalidated\">已清除下载索引</string>\n    <string name=\"track_activity_name\">登录进度记录平台</string>\n    <string name=\"create_backup_file_error\">创建备份文件失败</string>\n    <string name=\"exception_offline\">未连接网络</string>\n    <string name=\"exception_http\">HTTP %d，请在 WebView 中检查网站</string>\n    <string name=\"exception_unknown_host\">无法连接到 %s</string>\n    <string name=\"source_settings\">图源设置</string>\n    <string name=\"app_settings\">应用设置</string>\n    <string name=\"unlock_app_title\">解锁 %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">将作品移到底部</string>\n    <string name=\"notification_updating_progress\">正在更新书架… (%s)</string>\n    <string name=\"file_null_uri_error\">未选择文件</string>\n    <string name=\"pref_relative_format\">相对时间戳</string>\n    <string name=\"pref_relative_format_summary\">显示 \\\"%1$s\\\" 而不是 \\\"%2$s\\\"</string>\n    <string name=\"relative_time_span_never\">尚未</string>\n    <string name=\"pref_flash_page_summ\">减轻墨水屏上的残影</string>\n    <string name=\"last_auto_backup_info\">上次自动备份时间：%s</string>\n    <string name=\"pref_flash_page\">翻页时闪烁</string>\n    <string name=\"label_data_storage\">数据与存储</string>\n    <string name=\"pref_storage_usage\">存储占用</string>\n    <string name=\"action_create\">创建</string>\n    <string name=\"action_apply\">应用</string>\n    <string name=\"action_revert_to_default\">恢复默认</string>\n    <string name=\"no_scanlators_found\">没有翻译组</string>\n    <string name=\"scanlator\">翻译组</string>\n    <string name=\"action_sort_tracker_score\">记录平台评分</string>\n    <string name=\"exclude_scanlators\">排除翻译组</string>\n    <string name=\"action_menu_overflow_description\">更多选项</string>\n    <string name=\"selected\">已选中</string>\n    <string name=\"not_selected\">未选中</string>\n    <string name=\"pref_onboarding_guide\">首次启动引导</string>\n    <string name=\"onboarding_action_finish\">开始使用</string>\n    <string name=\"onboarding_heading\">欢迎！</string>\n    <string name=\"onboarding_action_skip\">跳过</string>\n    <string name=\"onboarding_action_next\">下一步</string>\n    <string name=\"action_bar_up_description\">返回</string>\n    <string name=\"onboarding_description\">首先调整一些设置。稍后也可以在设置中修改。</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">避免需要长时间运行的书架更新、下载、备份恢复任务受到中断。</string>\n    <string name=\"onboarding_permission_action_grant\">允许</string>\n    <string name=\"no_location_set\">未设置存储位置</string>\n    <string name=\"invalid_backup_file_error\">完整错误信息：</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">后台运行权限</string>\n    <string name=\"ext_permission_install_apps_warning\">需要安装插件的权限，点击此处授权。</string>\n    <string name=\"action_add_repo\">添加仓库</string>\n    <string name=\"private_settings\">包含敏感设置（例如进度记录平台的账号信息）</string>\n    <string name=\"delete_repo_confirmation\">确定要删除仓库 \\\"%s\\\" 吗？</string>\n    <string name=\"error_repo_exists\">此仓库已存在！</string>\n    <string name=\"action_delete_repo\">删除仓库</string>\n    <string name=\"invalid_repo_name\">仓库网址无效</string>\n    <string name=\"pref_storage_location_info\">用于自动备份、章节下载、本地图源。</string>\n    <string name=\"manga_interval_expected_update\">预计 %1$s后更新，每 %2$s检查一次。</string>\n    <string name=\"manga_interval_custom_amount\">自定义更新频率：</string>\n    <string name=\"onboarding_permission_install_apps\">应用安装权限</string>\n    <string name=\"onboarding_permission_install_apps_description\">用来安装图源插件。</string>\n    <string name=\"onboarding_permission_notifications\">通知权限</string>\n    <string name=\"onboarding_guides_new_user\">如果你是第一次使用 %s，推荐查看入门指南。</string>\n    <string name=\"onboarding_guides_returning_user\">如果你是重新安装了 %s，可以使用以下功能。</string>\n    <string name=\"pref_library_update_smart_update\">智能更新</string>\n    <string name=\"onboarding_permission_notifications_description\">用来发送书架更新等通知。</string>\n    <string name=\"label_extension_repos\">插件仓库</string>\n    <string name=\"information_empty_repos\">尚未设置仓库</string>\n    <string name=\"label_add_repo_input\">仓库网址</string>\n    <string name=\"action_add_repo_message\">在 Mihon 中添加仓库，输入的网址结尾应为 \\\"index.min.json\\\" 。</string>\n    <string name=\"onboarding_storage_help_info\">如果你是从旧版更新而来，可以查看存储指南了解详情。</string>\n    <string name=\"onboarding_storage_help_action\">存储指南</string>\n    <string name=\"pref_storage_location\">存储位置</string>\n    <string name=\"onboarding_storage_action_select\">选择文件夹</string>\n    <string name=\"onboarding_storage_info\">选择一个文件夹供 %1$s 存放下载章节、备份文件等。\n\\n\n\\n推荐使用一个专门的文件夹。\n\\n\n\\n已选文件夹：%2$s</string>\n    <string name=\"onboarding_storage_selection_required\">必须选择一个文件夹</string>\n    <string name=\"available_disk_space_info\">%1$s / %2$s</string>\n    <string name=\"theme_nord\">Nord</string>\n    <string name=\"manga_interval_expected_update_soon\">即将更新</string>\n    <string name=\"ext_revoke_trust\">撤销已信任的未知插件</string>\n    <string name=\"action_open_repo\">打开图源仓库</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">禁用缩小</string>\n    <string name=\"action_add_anyway\">依然添加</string>\n    <string name=\"action_replace_repo\">替换</string>\n    <string name=\"pref_display_profile\">自定义校色文件</string>\n    <string name=\"action_replace_repo_message\">%1$s 仓库已经存在和 %2$s 仓库相同的签名密钥指纹。\n\\n若继续，%2$s 将被替换，否则请联系你的仓库维护员。</string>\n    <string name=\"action_replace_repo_title\">签名密钥指纹已存在</string>\n    <string name=\"action_migrate_duplicate\">迁移已存在条目</string>\n    <string name=\"action_view_upcoming\">显示即将推出的更新</string>\n    <string name=\"upcoming_guide\">即将推出的指南</string>\n    <string name=\"label_upcoming\">即将推出</string>\n    <string name=\"upcoming_calendar_next\">下个月</string>\n    <string name=\"upcoming_calendar_prev\">上个月</string>\n    <string name=\"manga_interval_expected_update_null\">此漫画或已完结，或无发行日期。</string>\n    <string name=\"pref_flash_duration_summary\">%1$s 毫秒</string>\n    <string name=\"pref_flash_duration\">闪烁时间</string>\n    <string name=\"pref_flash_style_black\">黑</string>\n    <string name=\"pref_flash_with\">闪烁于</string>\n    <string name=\"pref_flash_style_white\">白</string>\n    <string name=\"pref_flash_style_white_black\">黑白</string>\n    <string name=\"file_picker_uri_permission_unsupported\">获取永久文件存储权限失败，应用程序可能会出现异常。</string>\n    <string name=\"pref_flash_page_interval\">闪烁时间间隔</string>\n    <string name=\"invalid_backup_file_json\">不支持 JSON 备份</string>\n    <string name=\"invalid_backup_file_unknown\">备份文件已损坏</string>\n    <string name=\"action_copy_link\">复制链接</string>\n    <string name=\"extensionRepo_settings\">插件仓库</string>\n    <string name=\"add_repo_confirmation\">您想添加仓库 \\\"%s\\\" 吗？</string>\n    <string name=\"pref_download_new_unread_chapters_only\">跳过下载重复阅读的章节</string>\n    <string name=\"confirm_tracker_update\">将进度更新到第 %d 章？</string>\n    <string name=\"onboarding_permission_crashlytics\">发送崩溃日志</string>\n    <string name=\"onboarding_permission_crashlytics_description\">向开发者发送匿名的崩溃日志</string>\n    <string name=\"onboarding_permission_analytics\">数据分析</string>\n    <string name=\"pref_security\">安全</string>\n    <string name=\"onboarding_permission_analytics_description\">发送匿名的应用数据以提升用户体验</string>\n    <string name=\"pref_firebase\">数据分析与崩溃日志</string>\n    <string name=\"firebase_summary\">允许发送崩溃日志和数据分析帮助开发者辨别并修复问题，提高应用体验，以期更新符合你需要的功能</string>\n    <string name=\"action_sort_random\">随机</string>\n    <string name=\"ext_remove\">删除</string>\n    <string name=\"ext_confirm_remove\">确定删除？</string>\n    <string name=\"remove_private_extension_message\">确定要删除 \\\"%s\\\" 插件吗?</string>\n    <string name=\"non_library_settings\">所有已读作品</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">标记为已读时更新章节进度</string>\n    <string name=\"trackers_updated_summary\">进度记录平台已更新到 %d 章</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">默认 (%d)</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">如果阅读器加载空白图像，请逐步降低阈值。\\n已选择： %s</string>\n    <string name=\"pref_hardware_bitmap_threshold\">自定义硬件位图阈值</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">会影响性能。仅当降低位图阈值无法解决空白图像问题时才启用</string>\n    <string name=\"pref_incognito_mode_extension_summary\">暂停记录插件的阅读历史</string>\n    <string name=\"label_auto\">自动</string>\n    <string name=\"theme_monochrome\">单色</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">在长条阅读模式中使用旧版解码器</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">将重复的已读章节标记为已读</string>\n    <string name=\"author\">作者</string>\n    <string name=\"action_toggle_private_off\">公开记录</string>\n    <string name=\"artist\">画师</string>\n    <string name=\"export\">导出</string>\n    <string name=\"library_list\">书架列表</string>\n    <string name=\"library_exported\">已导出列表</string>\n    <string name=\"tracked_privately\">私下记录</string>\n    <string name=\"action_toggle_private_on\">私下记录</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/zh-rTW/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"lock_after_mins\">\n        <item quantity=\"other\">%1$s 分鐘後</item>\n    </plurals>\n    <plurals name=\"update_check_notification_ext_updates\">\n        <item quantity=\"other\">%d 個擴充套件可更新</item>\n    </plurals>\n    <plurals name=\"download_queue_summary\">\n        <item quantity=\"other\">剩餘 %1$s 項</item>\n    </plurals>\n    <plurals name=\"manga_num_chapters\">\n        <item quantity=\"other\">共 %1$s 章</item>\n    </plurals>\n    <plurals name=\"num_categories\">\n        <item quantity=\"other\">%d 個類別</item>\n    </plurals>\n    <plurals name=\"restore_completed_message\">\n        <item quantity=\"other\">歷時 %1$s，出現 %2$s 個錯誤</item>\n    </plurals>\n    <plurals name=\"notification_chapters_generic\">\n        <item quantity=\"other\">%1$d 篇新章節</item>\n    </plurals>\n    <plurals name=\"notification_chapters_multiple_and_more\">\n        <item quantity=\"other\">第 %1$s 章以及另外 %2$d 章</item>\n    </plurals>\n    <plurals name=\"num_trackers\">\n        <item quantity=\"other\">%d 個平臺</item>\n    </plurals>\n    <plurals name=\"missing_chapters_warning\">\n        <item quantity=\"other\">略過了 %d 章，也許是來源沒有這些章節，或其已被篩選規則排除</item>\n    </plurals>\n    <plurals name=\"notification_new_chapters_summary\">\n        <item quantity=\"other\">共 %d 部作品</item>\n    </plurals>\n    <plurals name=\"relative_time\">\n        <item quantity=\"other\">%1$d 天前</item>\n    </plurals>\n    <plurals name=\"next_unread_chapters\">\n        <item quantity=\"other\">接下來未讀的 %d 章</item>\n    </plurals>\n    <plurals name=\"download_amount\">\n        <item quantity=\"other\">後續 %d 章</item>\n    </plurals>\n    <plurals name=\"missing_chapters\">\n        <item quantity=\"other\">缺漏 %1$s 章</item>\n    </plurals>\n    <plurals name=\"day\">\n        <item quantity=\"other\">%d 天</item>\n    </plurals>\n    <plurals name=\"num_repos\">\n        <item quantity=\"other\">%d 處儲存庫</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time\">\n        <item quantity=\"other\">%1$d 天後</item>\n    </plurals>\n    <plurals name=\"pref_pages\">\n        <item quantity=\"other\">%1$s pages</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n/src/commonMain/moko-resources/zh-rTW/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"categories\">類別</string>\n    <string name=\"manga\">藏書</string>\n    <string name=\"chapters\">章節</string>\n    <string name=\"history\">記錄</string>\n    <string name=\"label_settings\">設定</string>\n    <string name=\"label_download_queue\">下載佇列</string>\n    <string name=\"label_library\">書櫃</string>\n    <string name=\"label_recent_manga\">記錄</string>\n    <string name=\"label_recent_updates\">更新</string>\n    <string name=\"label_backup\">備份與還原</string>\n    <string name=\"label_migration\">遷移</string>\n    <string name=\"label_extensions\">擴充套件</string>\n    <string name=\"label_extension_info\">擴充套件資訊</string>\n    <string name=\"label_help\">說明</string>\n    <string name=\"action_settings\">設定</string>\n    <string name=\"action_filter\">篩選</string>\n    <string name=\"action_filter_bookmarked\">已新增書籤</string>\n    <string name=\"action_filter_unread\">未讀</string>\n    <string name=\"action_filter_empty\">清除篩選器</string>\n    <string name=\"action_sort_alpha\">名稱</string>\n    <string name=\"action_sort_total\">總章節數</string>\n    <string name=\"action_sort_last_read\">最近閱讀</string>\n    <string name=\"action_search\">搜尋</string>\n    <string name=\"action_global_search\">全域搜尋</string>\n    <string name=\"action_select_all\">全選</string>\n    <string name=\"action_mark_as_read\">標示為已讀</string>\n    <string name=\"action_mark_as_unread\">標示為未讀</string>\n    <string name=\"action_mark_previous_as_read\">標示過往章節為已讀</string>\n    <string name=\"action_download\">下載</string>\n    <string name=\"action_bookmark\">將章節加上書籤</string>\n    <string name=\"action_remove_bookmark\">將章節移除書籤</string>\n    <string name=\"action_delete\">刪除</string>\n    <string name=\"action_update_library\">更新書櫃</string>\n    <string name=\"action_edit\">編輯</string>\n    <string name=\"action_add\">新增</string>\n    <string name=\"action_add_category\">新增類別</string>\n    <string name=\"action_edit_categories\">編輯類別</string>\n    <string name=\"action_rename_category\">重新命名類別</string>\n    <string name=\"action_move_category\">設定類別</string>\n    <string name=\"action_edit_cover\">編輯封面</string>\n    <string name=\"action_pause\">暫停</string>\n    <string name=\"action_previous_chapter\">上一章</string>\n    <string name=\"action_next_chapter\">下一章</string>\n    <string name=\"action_retry\">重試</string>\n    <string name=\"action_remove\">移除</string>\n    <string name=\"action_resume\">繼續</string>\n    <string name=\"action_open_in_browser\">在瀏覽器中開啟</string>\n    <string name=\"action_open_in_web_view\">在 WebView 中開啟</string>\n    <string name=\"action_display_mode\">檢視模式</string>\n    <string name=\"action_display\">檢視</string>\n    <string name=\"action_display_grid\">密集格狀</string>\n    <string name=\"action_display_list\">清單</string>\n    <string name=\"action_display_download_badge\">已下載章數</string>\n    <string name=\"action_cancel\">取消</string>\n    <string name=\"action_sort\">排序</string>\n    <string name=\"action_install\">安裝</string>\n    <string name=\"action_share\">分享</string>\n    <string name=\"action_save\">儲存</string>\n    <string name=\"action_reset\">重設</string>\n    <string name=\"action_undo\">復原</string>\n    <string name=\"action_restore\">還原</string>\n    <string name=\"loading\">正在載入…</string>\n    <string name=\"app_not_available\">應用程式無法使用</string>\n    <string name=\"pref_category_general\">一般</string>\n    <string name=\"pref_category_reader\">閱讀</string>\n    <string name=\"pref_category_downloads\">下載</string>\n    <string name=\"pref_category_advanced\">進階</string>\n    <string name=\"pref_category_about\">關於</string>\n    <string name=\"portrait\">直向</string>\n    <string name=\"landscape\">橫向</string>\n    <string name=\"pref_library_update_interval\">自動更新</string>\n    <string name=\"update_never\">關閉</string>\n    <string name=\"update_6hour\">每 6 小時</string>\n    <string name=\"update_12hour\">每 12 小時</string>\n    <string name=\"update_24hour\">每天</string>\n    <string name=\"update_48hour\">每 2 天</string>\n    <string name=\"update_weekly\">每週</string>\n    <string name=\"all\">全部</string>\n    <string name=\"pref_library_update_restriction\">自動更新的裝置限制</string>\n    <string name=\"charging\">僅充電時</string>\n    <string name=\"pref_update_only_non_completed\">略過已完結的作品</string>\n    <string name=\"default_category\">預設類別</string>\n    <string name=\"default_category_summary\">總是詢問</string>\n    <string name=\"ext_update\">更新</string>\n    <string name=\"ext_install\">安裝</string>\n    <string name=\"ext_pending\">等待中</string>\n    <string name=\"ext_downloading\">下載中</string>\n    <string name=\"ext_installing\">安裝中</string>\n    <string name=\"ext_installed\">已安裝</string>\n    <string name=\"ext_uninstall\">解除安裝</string>\n    <string name=\"pref_fullscreen\">全螢幕</string>\n    <string name=\"pref_double_tap_anim_speed\">輕觸兩下動畫速度</string>\n    <string name=\"pref_show_page_number\">顯示頁碼</string>\n    <string name=\"pref_custom_brightness\">自訂亮度</string>\n    <string name=\"pref_custom_color_filter\">色彩濾鏡</string>\n    <string name=\"pref_keep_screen_on\">保持螢幕恆亮</string>\n    <string name=\"double_tap_anim_speed_0\">停用動畫</string>\n    <string name=\"double_tap_anim_speed_normal\">正常</string>\n    <string name=\"double_tap_anim_speed_fast\">快速</string>\n    <string name=\"pref_rotation_type\">預設螢幕方向</string>\n    <string name=\"rotation_free\">自動</string>\n    <string name=\"rotation_force_portrait\">鎖定直向</string>\n    <string name=\"rotation_force_landscape\">鎖定橫向</string>\n    <string name=\"color_filter_r_value\">紅色</string>\n    <string name=\"color_filter_g_value\">綠色</string>\n    <string name=\"color_filter_b_value\">藍色</string>\n    <string name=\"color_filter_a_value\">阿爾法</string>\n    <string name=\"pref_remove_after_marked_as_read\">手動標示為已讀後</string>\n    <string name=\"disabled\">已停用</string>\n    <string name=\"pref_download_new\">自動下載新章節</string>\n    <string name=\"services\">歷程平臺</string>\n    <string name=\"pref_create_backup\">建立備份</string>\n    <string name=\"pref_restore_backup\">還原備份</string>\n    <string name=\"pref_backup_interval\">自動備份頻率</string>\n    <string name=\"backup_created\">已建立備份</string>\n    <string name=\"restore_completed\">還原成功</string>\n    <string name=\"backup_choice\">哪些項目需要備份？</string>\n    <string name=\"restoring_backup\">正在還原</string>\n    <string name=\"creating_backup\">正在建立備份</string>\n    <string name=\"pref_clear_chapter_cache\">清除章節快取</string>\n    <string name=\"pref_clear_cookies\">清除 Cookie</string>\n    <string name=\"pref_clear_database\">清除資料庫</string>\n    <string name=\"version\">版本</string>\n    <string name=\"pref_enable_acra\">傳送錯誤報告</string>\n    <string name=\"password\">密碼</string>\n    <string name=\"login\">登入</string>\n    <string name=\"login_success\">已登入</string>\n    <string name=\"manga_added_library\">已收藏至書櫃</string>\n    <string name=\"manga_removed_library\">已從書櫃中移除</string>\n    <string name=\"copied_to_clipboard\">已複製到剪貼簿： \\n「%1$s」</string>\n    <string name=\"source_not_installed\">來源未安裝：%1$s</string>\n    <string name=\"chapter_error\">錯誤</string>\n    <string name=\"chapter_paused\">已暫停</string>\n    <string name=\"manga_download\">下載</string>\n    <string name=\"snack_categories_deleted\">已刪除類別</string>\n    <string name=\"picture_saved\">圖片已儲存</string>\n    <string name=\"set_as_cover\">設為封面</string>\n    <string name=\"cover_updated\">已更新封面</string>\n    <string name=\"copy\">副本</string>\n    <string name=\"update_check_confirm\">下載</string>\n    <string name=\"update_check_no_new_updates\">沒有可用的更新</string>\n    <string name=\"update_check_notification_download_in_progress\">正在下載更新…</string>\n    <string name=\"update_check_notification_download_complete\">輕觸即可更新</string>\n    <string name=\"update_check_notification_download_error\">更新下載失敗</string>\n    <string name=\"update_check_notification_update_available\">有可用的更新！</string>\n    <string name=\"information_no_downloads\">尚無下載作業</string>\n    <string name=\"download_notifier_title_error\">錯誤</string>\n    <string name=\"download_notifier_text_only_wifi\">沒有可用的 Wi-Fi 連線</string>\n    <string name=\"download_notifier_no_network\">尚未連接至網路</string>\n    <string name=\"download_notifier_download_paused\">下載已暫停</string>\n    <string name=\"pref_library_columns\">每列數目</string>\n    <string name=\"pref_page_transitions\">翻頁轉場動畫</string>\n    <string name=\"pref_crop_borders\">邊緣裁剪</string>\n    <string name=\"pref_color_filter_mode\">濾鏡融合機制</string>\n    <string name=\"filter_mode_overlay\">覆蓋</string>\n    <string name=\"filter_mode_multiply\">色彩增值</string>\n    <string name=\"filter_mode_screen\">濾色</string>\n    <string name=\"filter_mode_lighten\">減淡/變亮</string>\n    <string name=\"filter_mode_darken\">加深/變暗</string>\n    <string name=\"pref_reader_navigation\">導覽</string>\n    <string name=\"pref_read_with_volume_keys\">音量按鈕</string>\n    <string name=\"pref_read_with_volume_keys_inverted\">反轉音量按鈕</string>\n    <string name=\"pref_read_with_long_tap\">長按時彈出快顯選單</string>\n    <string name=\"pref_reader_theme\">背景顏色</string>\n    <string name=\"white_background\">白色</string>\n    <string name=\"black_background\">黑色</string>\n    <string name=\"pref_viewer_type\">預設閱讀模式</string>\n    <string name=\"left_to_right_viewer\">單頁(左至右)</string>\n    <string name=\"right_to_left_viewer\">單頁(右至左)</string>\n    <string name=\"vertical_viewer\">單頁(上至下)</string>\n    <string name=\"webtoon_viewer\">捲動(連續)</string>\n    <string name=\"pager_viewer\">單頁</string>\n    <string name=\"pref_image_scale_type\">縮放模式</string>\n    <string name=\"scale_type_fit_screen\">符合螢幕</string>\n    <string name=\"scale_type_stretch\">延展</string>\n    <string name=\"scale_type_fit_width\">符合頁寬</string>\n    <string name=\"scale_type_fit_height\">符合頁高</string>\n    <string name=\"scale_type_original_size\">原始大小</string>\n    <string name=\"scale_type_smart_fit\">智慧填充</string>\n    <string name=\"pref_zoom_start\">縮放原點</string>\n    <string name=\"zoom_start_automatic\">自動</string>\n    <string name=\"zoom_start_left\">左邊</string>\n    <string name=\"zoom_start_right\">右邊</string>\n    <string name=\"zoom_start_center\">中間</string>\n    <string name=\"pref_restore_backup_summ\">由備份檔還原書櫃內容</string>\n    <string name=\"used_cache\">已使用：%1$s</string>\n    <string name=\"cache_deleted\">已清除快取，刪除了 %1$d 個檔案</string>\n    <string name=\"cache_delete_error\">清除時發生錯誤</string>\n    <string name=\"cookies_cleared\">已清除 Cookie</string>\n    <string name=\"pref_acra_summary\">協助我們修復錯誤，傳送的資料將不包含個人敏感資訊</string>\n    <string name=\"login_title\">登入 %1$s</string>\n    <string name=\"username\">使用者名稱</string>\n    <string name=\"updating_category\">正在更新類別</string>\n    <string name=\"action_global_search_hint\">全域搜尋…</string>\n    <string name=\"snack_add_to_library\">將作品收藏至書櫃？</string>\n    <string name=\"file_select_cover\">選擇封面圖片</string>\n    <string name=\"information_no_recent_manga\">無近期閱讀</string>\n    <string name=\"channel_common\">一般</string>\n    <string name=\"pref_create_backup_summ\">可用來儲存目前書櫃內容</string>\n    <string name=\"pref_clear_database_summary\">將未加入書櫃的作品的紀錄刪除</string>\n    <string name=\"clear_database_completed\">已刪除項目</string>\n    <string name=\"unknown_error\">不明的錯誤</string>\n    <string name=\"no_more_results\">沒有更多結果</string>\n    <string name=\"local_source\">本機來源</string>\n    <string name=\"other_source\">其他</string>\n    <string name=\"browse\">探索</string>\n    <string name=\"ongoing\">連載中</string>\n    <string name=\"unknown\">不明</string>\n    <string name=\"licensed\">已授權</string>\n    <string name=\"remove_from_library\">移出書櫃</string>\n    <string name=\"delete_downloads_for_manga\">刪除下載的章節？</string>\n    <string name=\"display_mode_chapter\">第 %1$s 章</string>\n    <string name=\"chapter_downloading_progress\">正在下載 (%1$d/%2$d)</string>\n    <string name=\"show_title\">來源標題</string>\n    <string name=\"show_chapter_number\">章節編號</string>\n    <string name=\"sort_by_source\">遵循來源</string>\n    <string name=\"sort_by_number\">章節編號</string>\n    <string name=\"completed\">已完結</string>\n    <string name=\"score\">評分</string>\n    <string name=\"title\">標題</string>\n    <string name=\"status\">狀態</string>\n    <string name=\"track_status\">狀態</string>\n    <string name=\"decode_image_error\">圖片無法載入</string>\n    <string name=\"notification_first_add_to_library\">請先將作品收藏至書櫃</string>\n    <string name=\"file_select_backup\">選擇備份檔</string>\n    <string name=\"information_empty_category\">尚無任何類別，輕觸新增按鈕即可建立類別以組織你的書櫃</string>\n    <string name=\"download_notifier_downloader_title\">下載管理員</string>\n    <string name=\"download_unread\">未讀</string>\n    <string name=\"confirm_set_image_as_cover\">要將該圖片設為封面嗎？</string>\n    <string name=\"transition_pages_loading\">正在載入頁面…</string>\n    <string name=\"information_empty_library\">尚未收藏任何作品</string>\n    <string name=\"dialog_with_checkbox_reset\">重設此作品所有章節</string>\n    <string name=\"custom_filter\">濾鏡</string>\n    <string name=\"migrate\">遷移</string>\n    <string name=\"notification_cover_update_failed\">封面更新失敗</string>\n    <string name=\"confirm_delete_chapters\">確定要刪除所選的章節嗎？</string>\n    <string name=\"error_category_exists\">已有名稱相同的類別！</string>\n    <string name=\"chapter_progress\">第 %1$d 頁</string>\n    <string name=\"no_next_chapter\">找不到下一章</string>\n    <string name=\"transition_finished\">已閱畢：</string>\n    <string name=\"transition_next\">接下來：</string>\n    <string name=\"notification_new_chapters\">發現新章節</string>\n    <string name=\"pref_skip_read_chapters\">略過已讀的章節</string>\n    <string name=\"pref_remove_after_read\">翻閱過後自動刪除</string>\n    <string name=\"transition_no_next\">以下空白</string>\n    <string name=\"transition_no_previous\">已達盡頭</string>\n    <string name=\"transition_pages_error\">頁面載入失敗：%1$s</string>\n    <string name=\"information_no_recent\">最近無更新</string>\n    <string name=\"name\">名稱</string>\n    <string name=\"track\">歷程</string>\n    <string name=\"action_open_log\">檢視記錄檔</string>\n    <string name=\"pref_category_tracking\">歷程</string>\n    <string name=\"pref_auto_update_manga_sync\">閱後自動更新章節進度</string>\n    <string name=\"ext_trust\">信任</string>\n    <string name=\"ext_untrusted\">未信任</string>\n    <string name=\"untrusted_extension\">未受信任的擴充套件</string>\n    <string name=\"untrusted_extension_message\">惡意的擴充套件可能會讀取任何已儲存的登入認證或執行任意的程式碼\\n\\n若選擇信任該擴充套件，即表示你願意承擔上述風險</string>\n    <string name=\"last_read_chapter\">最後閱畢的章節</string>\n    <string name=\"clear_database_confirmation\">未加入書櫃的作品的閱讀進度將被清除，你確定嗎？</string>\n    <string name=\"latest\">最新</string>\n    <string name=\"manga_tracking_tab\">歷程</string>\n    <string name=\"reading\">閱讀中</string>\n    <string name=\"plan_to_read\">準備中</string>\n    <string name=\"repeating\">重溫中</string>\n    <string name=\"track_type\">類型</string>\n    <string name=\"dialog_with_checkbox_remove_description\">此章節的閱讀日期將被清除，你確定嗎？</string>\n    <string name=\"transition_current\">這一章：</string>\n    <string name=\"transition_previous\">上一章：</string>\n    <string name=\"migration_dialog_what_to_include\">選擇欲處理的項目</string>\n    <string name=\"download_queue_error\">該章節無法下載，請再試一次</string>\n    <string name=\"download_notifier_unknown_error\">下載時發生不可預期的錯誤</string>\n    <string name=\"second_to_last\">倒數第二閱畢的章節</string>\n    <string name=\"third_to_last\">倒數第三閱畢的章節</string>\n    <string name=\"fourth_to_last\">倒數第四閱畢的章節</string>\n    <string name=\"fifth_to_last\">倒數第五閱畢的章節</string>\n    <string name=\"dropped\">已拋棄</string>\n    <string name=\"on_hold\">擱置中</string>\n    <string name=\"no_results_found\">找不到結果</string>\n    <string name=\"migration_selection_prompt\">請選擇檔案來源</string>\n    <string name=\"action_webview_back\">上一頁</string>\n    <string name=\"action_webview_forward\">下一頁</string>\n    <string name=\"action_webview_refresh\">重新整理</string>\n    <string name=\"pref_category_library\">書櫃</string>\n    <string name=\"ext_obsolete\">過舊</string>\n    <string name=\"obsolete_extension_message\">這個擴充套件已無法使用，其可能無法正確運作或導致本程式發生問題，建議解除安裝</string>\n    <string name=\"theme_light\">淺色</string>\n    <string name=\"theme_system\">系統</string>\n    <string name=\"theme_dark\">深色</string>\n    <string name=\"pref_date_format\">日期格式</string>\n    <string name=\"downloaded_only_summary\">將套用至你書櫃中的作品</string>\n    <string name=\"label_downloaded_only\">僅限下載內容</string>\n    <string name=\"licenses\">開放原始碼授權</string>\n    <string name=\"website\">網站</string>\n    <string name=\"check_for_updates\">檢查更新</string>\n    <string name=\"label_more\">其他</string>\n    <string name=\"manga_info_expand\">更多</string>\n    <string name=\"lock_never\">永不</string>\n    <string name=\"lock_always\">立即</string>\n    <string name=\"lock_when_idle\">閒置時鎖定</string>\n    <string name=\"lock_with_biometrics\">上鎖應用程式</string>\n    <string name=\"secure_screen_summary\">在切換應用程式時隱藏預覽，並禁止擷取螢幕畫面</string>\n    <string name=\"secure_screen\">防窺畫面</string>\n    <string name=\"pref_category_security\">隱私</string>\n    <string name=\"hide_notification_content\">隱藏通知內容</string>\n    <string name=\"pref_manage_notifications\">管理通知設定</string>\n    <string name=\"channel_ext_updates\">擴充套件更新</string>\n    <string name=\"action_display_show_tabs\">類別索引</string>\n    <string name=\"tabs_header\">頁籤</string>\n    <string name=\"gray_background\">灰色</string>\n    <string name=\"pref_category_display\">檢視</string>\n    <string name=\"action_display_comfortable_grid\">鬆散格狀</string>\n    <string name=\"pref_category_for_this_series\">套用於這部作品</string>\n    <string name=\"pref_category_reading\">翻閱</string>\n    <string name=\"pref_category_library_update\">全域更新</string>\n    <string name=\"battery_optimization_disabled\">已停用電池效能最佳化</string>\n    <string name=\"battery_optimization_setting_activity_not_found\">無法前往裝置設定</string>\n    <string name=\"pref_disable_battery_optimization\">停用電池效能最佳化</string>\n    <string name=\"manga_info_collapse\">較少</string>\n    <string name=\"updating_library\">正在更新書櫃</string>\n    <string name=\"add_to_library\">加入書櫃</string>\n    <string name=\"logout_success\">你已登出</string>\n    <string name=\"logout\">登出</string>\n    <string name=\"last_used_source\">最近使用</string>\n    <string name=\"local_source_help_guide\">本機來源指南</string>\n    <string name=\"information_webview_outdated\">請更新 WebView 以獲得更佳的相容性</string>\n    <string name=\"information_webview_required\">應用程式運作需要 WebView</string>\n    <string name=\"action_select_inverse\">反向選擇</string>\n    <string name=\"pref_library_update_refresh_metadata\">自動重新整理中繼資料</string>\n    <string name=\"pref_library_update_refresh_metadata_summary\">更新書櫃時一併檢查封面與簡介是否有更動</string>\n    <string name=\"pref_refresh_library_covers\">重新整理書櫃中的封面</string>\n    <string name=\"ext_updates_pending\">等待更新中</string>\n    <string name=\"pref_disable_battery_optimization_summary\">有助於背景更新書櫃與自動備份</string>\n    <string name=\"pinned_sources\">已釘選</string>\n    <string name=\"action_unpin\">取消釘選</string>\n    <string name=\"action_pin\">釘選</string>\n    <string name=\"action_view_chapters\">檢視章節</string>\n    <string name=\"action_disable_all\">全部停用</string>\n    <string name=\"action_enable_all\">全部啟用</string>\n    <string name=\"action_menu\">選單</string>\n    <string name=\"information_cloudflare_bypass_failure\">無法繞過 Cloudflare</string>\n    <string name=\"action_start\">開始</string>\n    <string name=\"pref_always_show_chapter_transition\">一律顯示章節間的隔頁</string>\n    <string name=\"pref_cutout_short\">使用螢幕凹口區域</string>\n    <string name=\"email\">電子郵件地址</string>\n    <string name=\"pref_skip_filtered_chapters\">略過已篩選的章節</string>\n    <string name=\"pref_show_reading_mode_summary\">開始閱讀時，快顯闡明目前的模式</string>\n    <string name=\"pref_show_reading_mode\">閱讀模式提示</string>\n    <string name=\"label_sources\">來源</string>\n    <string name=\"pref_webtoon_side_padding\">頁緣留白</string>\n    <string name=\"add_tracking\">新增閱讀歷程</string>\n    <string name=\"channel_new_chapters\">章節更新</string>\n    <string name=\"in_library\">在書櫃中</string>\n    <string name=\"viewer\">閱讀模式</string>\n    <string name=\"action_disable\">停用</string>\n    <string name=\"action_migrate\">遷移</string>\n    <string name=\"paused\">擱置中</string>\n    <string name=\"action_newest\">由新到舊</string>\n    <string name=\"action_oldest\">由舊到新</string>\n    <string name=\"action_move_to_bottom\">排至最後</string>\n    <string name=\"action_move_to_top\">排至最前</string>\n    <string name=\"action_cancel_all\">全部取消</string>\n    <string name=\"sort_by_upload_date\">上傳日期</string>\n    <string name=\"action_sort_latest_chapter\">最新章節</string>\n    <string name=\"invalid_backup_file\">無效的備份檔：</string>\n    <string name=\"backup_in_progress\">備份已在進行</string>\n    <string name=\"restore_in_progress\">還原已在進行</string>\n    <string name=\"label_data\">資料</string>\n    <string name=\"restoring_backup_canceled\">已取消還原</string>\n    <string name=\"restoring_backup_error\">還原失敗</string>\n    <string name=\"creating_backup_error\">備份失敗</string>\n    <string name=\"logout_title\">登出 %1$s？</string>\n    <string name=\"tracking_info\">將閱讀進度單向同步至外部歷程平臺，請逕行前往個別作品的「歷程」專區以設定</string>\n    <string name=\"requires_app_restart\">需要重新啟動應用程式以套用</string>\n    <string name=\"label_network\">網路</string>\n    <string name=\"tapping_inverted_both\">全部</string>\n    <string name=\"tapping_inverted_vertical\">垂直</string>\n    <string name=\"tapping_inverted_horizontal\">水平</string>\n    <string name=\"pref_read_with_tapping_inverted\">反轉輕觸區域</string>\n    <string name=\"vertical_plus_viewer\">捲動(留空)</string>\n    <string name=\"tapping_inverted_none\">無</string>\n    <string name=\"restore_duration\">%1$02d 分， %2$02d 秒</string>\n    <string name=\"recent_manga_time\">第 %1$s 章 - %2$s</string>\n    <string name=\"notification_chapters_single\">第 %1$s 章</string>\n    <string name=\"notification_chapters_multiple\">第 %1$s 章</string>\n    <string name=\"notification_chapters_single_and_more\">第 %1$s 章以及另外 %2$d 章</string>\n    <string name=\"whats_new\">更新日誌</string>\n    <string name=\"unknown_status\">連載狀態不明</string>\n    <string name=\"unknown_author\">佚名</string>\n    <string name=\"action_global_search_query\">在所有範圍內搜尋「%1$s」</string>\n    <string name=\"download_insufficient_space\">由於儲存空間不足，無法下載章節</string>\n    <string name=\"updated_version\">已更新至 v%1$s</string>\n    <string name=\"pref_category_reading_mode\">閱讀模式</string>\n    <string name=\"pref_category_theme\">主題</string>\n    <string name=\"action_sort_date_added\">收藏日期</string>\n    <string name=\"loader_not_implemented_error\">找不到來源</string>\n    <string name=\"no_pinned_sources\">你尚未釘選任何來源</string>\n    <string name=\"page_list_empty_error\">沒有任何頁面</string>\n    <string name=\"backup_restore_missing_sources\">未安裝擴充套件：</string>\n    <string name=\"backup_restore_missing_trackers\">未登入歷程平臺：</string>\n    <string name=\"channel_progress\">進度</string>\n    <string name=\"channel_errors\">錯誤</string>\n    <string name=\"channel_complete\">作業完成</string>\n    <string name=\"ext_nsfw_short\">18+</string>\n    <string name=\"parental_controls_info\">即使啟用監護限制，還是可能有漏網之魚，使用者仍可藉由第三方或未正確標幟的擴充套件在本應用程式中瀏覽 NSFW(18+) 內容</string>\n    <string name=\"ext_nsfw_warning\">來自此擴充套件的來源可能包含未滿十八歲之人不宜觀賞的內容</string>\n    <string name=\"invalid_backup_file_missing_manga\">備份檔並未包含任何書櫃中的作品</string>\n    <string name=\"pref_remove_bookmarked_chapters\">允許刪除有書籤的章節</string>\n    <string name=\"pref_category_delete_chapters\">刪除章節</string>\n    <string name=\"chapter_settings_updated\">已更新章節設定預設值</string>\n    <string name=\"action_search_settings\">搜尋設定</string>\n    <string name=\"chapter_settings\">章節設定</string>\n    <string name=\"also_set_chapter_settings_for_library\">同時套用至其餘在書櫃中的作品</string>\n    <string name=\"confirm_set_chapter_settings\">確定要將目前的選項儲存為預設值嗎？</string>\n    <string name=\"no_chapters_error\">沒有章節</string>\n    <string name=\"set_chapter_settings_as_default\">儲存為預設值</string>\n    <string name=\"clear_history_completed\">已刪除記錄</string>\n    <string name=\"clear_history_confirmation\">你確定嗎？所有的閱讀記錄將會遺失</string>\n    <string name=\"pref_clear_history\">清除閱讀記錄</string>\n    <string name=\"pref_incognito_mode_summary\">暫停閱讀記錄</string>\n    <string name=\"pref_incognito_mode\">無痕模式</string>\n    <string name=\"file_picker_error\">找不到檔案選擇器</string>\n    <string name=\"share_page_info\">《%1$s》：%2$s，第 %3$d 頁</string>\n    <string name=\"migration_help_guide\">來源遷移指南</string>\n    <string name=\"spen_next_page\">下一頁</string>\n    <string name=\"spen_previous_page\">上一頁</string>\n    <string name=\"myanimelist_relogin\">請重新登入 MAL</string>\n    <string name=\"pref_category_nsfw_content\">未滿十八歲之人不宜瀏覽的來源</string>\n    <string name=\"pref_show_nsfw_source\">在來源和擴充套件清單中顯示</string>\n    <string name=\"track_finished_reading_date\">閱讀完畢日期</string>\n    <string name=\"track_started_reading_date\">開始閱讀日期</string>\n    <string name=\"edge_nav\">邊緣式</string>\n    <string name=\"kindlish_nav\">Kindle 式</string>\n    <string name=\"l_nav\">L 式</string>\n    <string name=\"action_filter_tracked\">已登錄歷程</string>\n    <string name=\"pref_dump_crash_logs_summary\">產生錯誤記錄檔以便分享予開發人員</string>\n    <string name=\"pref_dump_crash_logs\">分享當機記錄</string>\n    <string name=\"pref_viewer_nav\">輕觸區域</string>\n    <string name=\"right_and_left_nav\">左右式</string>\n    <string name=\"action_order_by_upload_date\">依上傳日期</string>\n    <string name=\"action_desc\">遞減</string>\n    <string name=\"action_asc\">遞增</string>\n    <string name=\"action_order_by_chapter_number\">依章節編號</string>\n    <string name=\"action_display_show_number_of_items\">顯示藏書數目</string>\n    <string name=\"manga_from_library\">書櫃上的作品</string>\n    <string name=\"downloaded_chapters\">已下載的章節</string>\n    <string name=\"pref_dual_page_split\">分割寬頁</string>\n    <string name=\"pref_dual_page_invert_summary\">若分割後的排版方向與翻閱順序不符</string>\n    <string name=\"pref_dual_page_invert\">調換分割寬頁排版</string>\n    <string name=\"pref_dns_over_https\">DNS over HTTPS (DoH)</string>\n    <string name=\"pref_category_auto_download\">自動下載</string>\n    <string name=\"rotation_portrait\">直向</string>\n    <string name=\"rotation_type\">螢幕方向</string>\n    <string name=\"nav_zone_left\">左邊</string>\n    <string name=\"nav_zone_prev\">上一頁</string>\n    <string name=\"nav_zone_next\">下一頁</string>\n    <string name=\"action_sort_chapter_fetch_date\">章節擷取日期</string>\n    <string name=\"nav_zone_right\">右邊</string>\n    <string name=\"rotation_landscape\">橫向</string>\n    <string name=\"pref_reader_actions\">快顯選單</string>\n    <string name=\"exclude\">排除：%s</string>\n    <string name=\"include\">包含：%s</string>\n    <string name=\"none\">無</string>\n    <string name=\"action_show_errors\">輕觸以檢視詳細資訊</string>\n    <string name=\"update_check_eol\">不再支援此 Android 版本</string>\n    <string name=\"clipboard_copy_error\">無法複製到剪貼簿</string>\n    <string name=\"backup_restore_content_full\">你可能需要安裝任何缺少的擴充套件並重新登入各歷程平臺以開始使用</string>\n    <string name=\"pref_download_new_categories_details\">類別同時屬於「排除」及「包含」的作品，將不會自動下載</string>\n    <string name=\"pref_create_folder_per_manga\">儲存頁面至個別資料夾</string>\n    <string name=\"pref_create_folder_per_manga_summary\">根據作品標題建立資料夾</string>\n    <string name=\"pref_show_navigation_mode_summary\">開始閱讀時，短暫浮現輕觸區域</string>\n    <string name=\"pref_show_navigation_mode\">輕觸區域提示</string>\n    <string name=\"pref_library_update_categories_details\">類別同時屬於「排除」及「包含」的作品將不會自動更新</string>\n    <string name=\"cancel_all_for_series\">取消此作品</string>\n    <string name=\"automatic_background\">自動</string>\n    <string name=\"pref_grayscale\">灰階</string>\n    <string name=\"notification_incognito_text\">停用無痕模式</string>\n    <string name=\"error_no_match\">未找到匹配項</string>\n    <string name=\"source_unsupported\">不支援的來源</string>\n    <string name=\"unread\">未讀</string>\n    <string name=\"date\">日期</string>\n    <string name=\"chapter_not_found\">未找到章節</string>\n    <string name=\"off\">關閉</string>\n    <string name=\"on\">開啟</string>\n    <string name=\"restrictions\">限制：%s</string>\n    <string name=\"local_filter_order_by\">排序</string>\n    <string name=\"local_invalid_format\">無效的章節格式</string>\n    <string name=\"action_display_local_badge\">本機來源</string>\n    <string name=\"information_empty_category_dialog\">你目前沒有任何類別</string>\n    <string name=\"error_sharing_cover\">分享封面時發生錯誤</string>\n    <string name=\"error_saving_cover\">儲存封面時發生錯誤</string>\n    <string name=\"cover_saved\">已儲存封面</string>\n    <string name=\"manga_cover\">封面</string>\n    <string name=\"action_start_downloading_now\">立刻開始下載</string>\n    <string name=\"about_dont_kill_my_app\">部分裝置製造商設有額外的應用程式限制來終止背景服務，此網站提供了修復這項問題的詳細資訊</string>\n    <string name=\"label_background_activity\">背景活動</string>\n    <string name=\"restore_miui_warning\">若停用 MIUI 最佳化，備份與還原可能無法正確執行</string>\n    <string name=\"enhanced_tracking_info\">為特定來源提供增強功能，當作品被加入書櫃時，將自動登錄閱讀歷程</string>\n    <string name=\"enhanced_services\">增強式歷程平臺</string>\n    <string name=\"tracking_guide\">歷程平臺指南</string>\n    <string name=\"categorized_display_settings\">獨立各類別的排序方式</string>\n    <string name=\"pref_dark_theme_pure_black\">純黑深色模式</string>\n    <string name=\"theme_yotsuba\">四葉</string>\n    <string name=\"theme_yinyang\">陰陽</string>\n    <string name=\"theme_tako\">章魚</string>\n    <string name=\"theme_strawberrydaiquiri\">草莓黛綺莉</string>\n    <string name=\"theme_midnightdusk\">黃昏</string>\n    <string name=\"theme_greenapple\">青蘋果</string>\n    <string name=\"theme_monet\">動態</string>\n    <string name=\"pref_app_theme\">應用程式主題</string>\n    <string name=\"pref_lowest\">最低</string>\n    <string name=\"pref_low\">低</string>\n    <string name=\"pref_high\">高</string>\n    <string name=\"pref_highest\">最高</string>\n    <string name=\"pref_hide_threshold\">捲動時隱藏選單的靈敏度</string>\n    <string name=\"pref_inverted_colors\">反轉</string>\n    <string name=\"theme_tealturquoise\">綠松色</string>\n    <string name=\"confirm_lock_change\">驗證以確認變更</string>\n    <string name=\"pref_category_appearance\">外觀</string>\n    <string name=\"relative_time_today\">今天</string>\n    <string name=\"label_default\">預設</string>\n    <string name=\"pref_tablet_ui_mode\">平板電腦介面</string>\n    <string name=\"getting_started_guide\">入門指南</string>\n    <string name=\"action_track\">新增</string>\n    <string name=\"help_translate\">協助翻譯</string>\n    <string name=\"pref_remove_exclude_categories\">排除的類別</string>\n    <string name=\"ext_app_info\">程式資訊</string>\n    <string name=\"ext_installer_shizuku_unavailable_dialog\">若要使用 Shizuku 來安裝擴充套件，請先安裝 Shizuku 並開啟</string>\n    <string name=\"ext_installer_legacy\">傳統</string>\n    <string name=\"ext_installer_shizuku_stopped\">Shizuku 未執行</string>\n    <string name=\"ext_installer_pref\">套件安裝程式</string>\n    <string name=\"ext_install_service_notif\">正在安裝擴充套件…</string>\n    <string name=\"action_sort_count\">作品總數</string>\n    <string name=\"action_display_language_badge\">語言</string>\n    <string name=\"label_warning\">警告</string>\n    <string name=\"notification_size_warning\">大量更新會損害來源，並可能導致更新速度緩慢、電池用量增加，輕觸以瞭解詳情</string>\n    <string name=\"pref_verbose_logging\">錄製詳細記錄</string>\n    <string name=\"backup_info\">你應該在多處儲存備份副本，備份檔可能含有敏感資料 (包括任何已儲存的密碼)，分享時請留意</string>\n    <string name=\"pref_verbose_logging_summary\">傾印詳細記錄至系統日誌 (將降低應用程式效能)</string>\n    <string name=\"connected_to_wifi\">僅透過 Wi-Fi</string>\n    <string name=\"update_72hour\">每 3 天</string>\n    <string name=\"download_queue_size_warning\">警告：大量批次下載可能壅塞來源，甚至使其封鎖 Mihon，輕觸以瞭解詳情</string>\n    <string name=\"ext_update_all\">全部更新</string>\n    <string name=\"channel_app_updates\">應用程式更新</string>\n    <string name=\"pref_auto_clear_chapter_cache\">啟動應用程式時清除章節快取</string>\n    <string name=\"clear_database_source_item_count\">資料庫中有 %1$d 部作品未加入書櫃</string>\n    <string name=\"database_clean\">無須清理</string>\n    <string name=\"extension_api_error\">無法取得可用的擴充套件</string>\n    <string name=\"privacy_policy\">隱私權政策</string>\n    <string name=\"pref_update_only_completely_read\">略過有未讀章節的作品</string>\n    <string name=\"library_errors_help\">如欲瞭解如何修復書櫃更新失敗，請參閱 %1$s</string>\n    <string name=\"save_chapter_as_cbz\">以 CBZ 封存檔格式儲存</string>\n    <string name=\"on_hiatus\">休刊中</string>\n    <string name=\"cancelled\">已取消</string>\n    <string name=\"publishing_finished\">出版完畢</string>\n    <string name=\"action_show_manga\">顯示作品</string>\n    <string name=\"pref_landscape_zoom\">自動縮放寬頁</string>\n    <string name=\"pref_navigate_pan\">導覽寬頁時先平移後翻頁</string>\n    <string name=\"action_display_cover_only_grid\">純封面格狀</string>\n    <string name=\"pref_update_only_started\">略過無已讀章節的作品</string>\n    <string name=\"skipped_reason_completed\">由於連載已完結，因此略過</string>\n    <string name=\"skipped_reason_not_caught_up\">由於有未讀章節，因此略過</string>\n    <string name=\"skipped_reason_not_started\">由於無已讀章節，因此略過</string>\n    <string name=\"rotation_reverse_portrait\">顛倒直向</string>\n    <string name=\"learn_more\">瞭解詳情</string>\n    <string name=\"notification_update_error\">%1$d 項更新失敗</string>\n    <string name=\"action_move_to_top_all_for_series\">置頂此作品</string>\n    <string name=\"disabled_nav\">停用</string>\n    <string name=\"empty_backup_error\">書櫃中尚無作品可供備份</string>\n    <string name=\"update_check_open\">在 GitHub 上檢視</string>\n    <string name=\"error_saving_picture\">儲存圖片錯誤</string>\n    <string name=\"pref_clear_webview_data\">清除 WebView 資料</string>\n    <string name=\"webview_data_deleted\">已清除 WebView 資料</string>\n    <string name=\"action_close\">關閉</string>\n    <string name=\"source_empty_screen\">找不到來源</string>\n    <string name=\"source_filter_empty_screen\">找不到已安裝的來源</string>\n    <string name=\"action_sort_last_manga_update\">上次檢查更新</string>\n    <string name=\"action_sort_unread_count\">未讀章數</string>\n    <string name=\"download_notifier_split_page_not_found\">分割時找不到第 %d 頁</string>\n    <string name=\"split_tall_images_summary\">用以改善閱讀器效能</string>\n    <string name=\"download_notifier_split_page_path_not_found\">找不到第 %d 頁的檔案路徑</string>\n    <string name=\"pref_reset_viewer_flags\">重設個別閱讀器設定</string>\n    <string name=\"pref_reset_viewer_flags_summary\">將所有作品的閱讀模式和螢幕方向還原為預設值</string>\n    <string name=\"pref_reset_viewer_flags_success\">已重設所有閱讀器設定</string>\n    <string name=\"pref_reset_viewer_flags_error\">無法重設閱讀器設定</string>\n    <string name=\"empty_screen\">呃…尷尬了</string>\n    <string name=\"ext_info_version\">版本</string>\n    <string name=\"ext_info_language\">語言</string>\n    <string name=\"ext_info_age_rating\">分級</string>\n    <string name=\"unfinished_list\">已拋棄</string>\n    <string name=\"on_hold_list\">擱置中</string>\n    <string name=\"complete_list\">已完結</string>\n    <string name=\"wish_list\">準備中</string>\n    <string name=\"reading_list\">閱讀中</string>\n    <string name=\"network_not_metered\">僅透過吃到飽網路</string>\n    <string name=\"cant_open_last_read_chapter\">無法開啟上次閱讀章節</string>\n    <string name=\"custom_cover\">自訂封面</string>\n    <string name=\"not_installed\">未安裝</string>\n    <string name=\"pref_app_language\">應用程式語言</string>\n    <string name=\"theme_lavender\">薰衣草</string>\n    <string name=\"description_placeholder\">沒有簡介</string>\n    <string name=\"delete_category_confirmation\">確定要刪除「%s」類別嗎？</string>\n    <string name=\"internal_error\">InternalError：請檢視當機記錄以瞭解詳情</string>\n    <string name=\"delete_category\">刪除類別</string>\n    <string name=\"pref_reset_user_agent_string\">重設預設使用者代理字串</string>\n    <string name=\"pref_user_agent_string\">預設使用者代理字串</string>\n    <string name=\"action_remove_everything\">全部清除</string>\n    <string name=\"appwidget_unavailable_locked\">當需要解鎖才能存取應用程式時，無法使用小工具</string>\n    <string name=\"appwidget_updates_description\">查看書櫃中近期更新的作品</string>\n    <string name=\"update_already_running\">已在進行更新</string>\n    <string name=\"error_user_agent_string_blank\">使用者代理字串不得為空</string>\n    <string name=\"theme_tidalwave\">潮浪</string>\n    <string name=\"download_ahead\">預先下載</string>\n    <string name=\"auto_download_while_reading\">閱讀時自動下載</string>\n    <string name=\"download_ahead_info\">僅於目前章節及下一章節皆已下載時生效</string>\n    <string name=\"are_you_sure\">你確定嗎？</string>\n    <string name=\"multi_lang\">多語</string>\n    <string name=\"remove_manga\">即將從書櫃中移除《%s》</string>\n    <string name=\"updates_last_update_info\">書櫃更新於：%s</string>\n    <string name=\"popular\">熱門</string>\n    <string name=\"missing_storage_permission\">未被授予儲存空間權限</string>\n    <string name=\"skipped_reason_not_always_update\">由於作品無須更新，因此略過</string>\n    <string name=\"action_search_hint\">搜尋…</string>\n    <string name=\"pref_reader_summary\">閱讀模式、檢視、導覽</string>\n    <string name=\"pref_appearance_summary\">主題、日期格式</string>\n    <string name=\"pref_downloads_summary\">自動下載、預先下載</string>\n    <string name=\"pref_tracking_summary\">單向進度同步、增強式同步</string>\n    <string name=\"pref_backup_summary\">手動與自動備份、儲存空間</string>\n    <string name=\"pref_security_summary\">上鎖應用程式、防窺畫面</string>\n    <string name=\"pref_advanced_summary\">傾印當機記錄、電池效能最佳化</string>\n    <string name=\"crash_screen_restart_application\">重新啟動應用程式</string>\n    <string name=\"crash_screen_title\">哎呀！</string>\n    <string name=\"crash_screen_description\">「%s」發生了未預期的錯誤，我們建議你將崩潰日誌分享至我們位於 Discord 上的頻道</string>\n    <string name=\"pref_library_summary\">類別、全域更新、目錄滑動動作</string>\n    <string name=\"pref_browse_summary\">來源、擴充套件、全域搜尋</string>\n    <string name=\"invalid_location\">無效的位置：%s</string>\n    <string name=\"unknown_title\">未知的標題</string>\n    <string name=\"error_user_agent_string_invalid\">無效的使用者代理字串</string>\n    <string name=\"updates_last_update_info_just_now\">剛剛</string>\n    <string name=\"download_notifier_cache_renewal\">正在檢查下載</string>\n    <string name=\"action_open_random_manga\">開啟隨機作品</string>\n    <string name=\"information_no_entries_found\">類別沒有作品</string>\n    <string name=\"fdroid_warning\">F-Droid 的組建未被正式支援\\n輕觸以瞭解詳情</string>\n    <string name=\"action_display_show_continue_reading_button\">繼續閱讀按鈕</string>\n    <string name=\"track_remove_date_conf_title\">移除日期？</string>\n    <string name=\"track_remove_finish_date_conf_text\">從「%s」移除你先前輸入的閱讀完畢日期</string>\n    <string name=\"track_remove_start_date_conf_text\">從「%s」移除你先前輸入的開始閱讀日期</string>\n    <string name=\"pref_invalidate_download_cache\">重新索引下載</string>\n    <string name=\"pref_invalidate_download_cache_summary\">強制重新檢查已下載的章節</string>\n    <string name=\"label_downloaded\">已下載</string>\n    <string name=\"label_completed_titles\">閱畢作品</string>\n    <string name=\"label_titles_section\">作品</string>\n    <string name=\"label_total_chapters\">總數</string>\n    <string name=\"label_read_chapters\">已讀</string>\n    <string name=\"label_mean_score\">平均評分</string>\n    <string name=\"label_used\">平臺</string>\n    <string name=\"day_short\">%d天</string>\n    <string name=\"label_stats\">統計資料</string>\n    <string name=\"label_local\">本機</string>\n    <string name=\"label_overview_section\">總覽</string>\n    <string name=\"label_started\">閱讀過</string>\n    <string name=\"label_titles_in_global_update\">適用全域更新</string>\n    <string name=\"label_read_duration\">閱讀歷時</string>\n    <string name=\"label_tracker_section\">歷程平臺</string>\n    <string name=\"not_applicable\">不適用</string>\n    <string name=\"label_tracked_titles\">登錄作品</string>\n    <string name=\"hour_short\">%d時</string>\n    <string name=\"minute_short\">%d 分鐘</string>\n    <string name=\"seconds_short\">%d 秒鐘</string>\n    <string name=\"action_not_now\">暫時不要</string>\n    <string name=\"information_no_manga_category\">類別尚無作品</string>\n    <string name=\"pref_library_update_show_tab_badge\">在「更新」導覽圖示上標記未讀章數</string>\n    <string name=\"copied_to_clipboard_plain\">已複製到剪貼簿</string>\n    <string name=\"pref_skip_dupe_chapters\">略過重複的章節</string>\n    <string name=\"enhanced_services_not_installed\">可供使用但來源尚未安裝：%s</string>\n    <string name=\"confirm_add_duplicate_manga\">書櫃中已有同名作品\\n\\n仍要新增嗎？</string>\n    <string name=\"track_error\">%1$s 發生錯誤：%2$s</string>\n    <string name=\"information_required_plain\">*必填</string>\n    <string name=\"pref_hide_in_library_items\">隱藏已在書櫃的作品</string>\n    <string name=\"action_copy_to_clipboard\">複製</string>\n    <string name=\"action_update_category\">更新類別</string>\n    <string name=\"split_tall_images\">分割過高的圖片</string>\n    <string name=\"overlay_header\">封面附加元素</string>\n    <string name=\"pref_page_rotate\">旋轉寬頁以符合螢幕</string>\n    <string name=\"pref_page_rotate_invert\">調換旋轉寬頁方向</string>\n    <string name=\"pref_debug_info\">偵錯資訊</string>\n    <string name=\"pref_chapter_swipe_start\">向左滑動</string>\n    <string name=\"pref_double_tap_zoom\">輕觸兩下以縮放</string>\n    <string name=\"pref_chapter_swipe_end\">向右滑動</string>\n    <string name=\"action_ok\">確定</string>\n    <string name=\"delete_downloaded\">刪除舊有下載章節</string>\n    <string name=\"track_delete_title\">移除「%s」歷程平臺？</string>\n    <string name=\"track_delete_text\">這將在本機上解除登錄該歷程平臺</string>\n    <string name=\"track_delete_remote_text\">同時移除「%s」上的資料</string>\n    <string name=\"action_filter_interval_custom\">已自訂更新頻率</string>\n    <string name=\"action_set_interval\">設定間隔</string>\n    <string name=\"action_sort_next_updated\">下次預期更新</string>\n    <string name=\"intervals_header\">刊期</string>\n    <string name=\"manga_display_interval_title\">預計每個</string>\n    <string name=\"pref_update_only_in_release_period\">預估下次更新時間</string>\n    <string name=\"manga_display_modified_interval_title\">設定為每個</string>\n    <string name=\"skipped_reason_not_in_release_period\">由於未臨更新日，因此略過</string>\n    <string name=\"has_results\">有結果</string>\n    <string name=\"syncing_library\">正在同步書櫃</string>\n    <string name=\"library_sync_complete\">書櫃同步完成</string>\n    <string name=\"download_cache_invalidated\">已清除下載索引</string>\n    <string name=\"information_cloudflare_help\">查看 Cloudflare 相關說明</string>\n    <string name=\"track_activity_name\">登入歷程平臺</string>\n    <string name=\"create_backup_file_error\">無法建立備份檔</string>\n    <string name=\"exception_http\">HTTP %d，請在 WebView 中檢查網站</string>\n    <string name=\"exception_offline\">沒有網路連線</string>\n    <string name=\"exception_unknown_host\">無法連上 %s</string>\n    <string name=\"unlock_app_title\">解鎖 %s</string>\n    <string name=\"action_move_to_bottom_all_for_series\">置底此作品</string>\n    <string name=\"pref_relative_format\">相對時間戳記</string>\n    <string name=\"pref_relative_format_summary\">以「%1$s」表示「%2$s」</string>\n    <string name=\"app_settings\">應用程式設定</string>\n    <string name=\"notification_updating_progress\">正在更新書櫃… (%s)</string>\n    <string name=\"source_settings\">來源設定</string>\n    <string name=\"file_null_uri_error\">未選擇檔案</string>\n    <string name=\"relative_time_span_never\">永不</string>\n    <string name=\"pref_flash_page_summ\">減少電子紙顯示器上的殘影</string>\n    <string name=\"last_auto_backup_info\">上次自動備份於：%s</string>\n    <string name=\"pref_flash_page\">翻頁時閃爍畫面</string>\n    <string name=\"label_data_storage\">資料與儲存空間</string>\n    <string name=\"pref_storage_usage\">儲存空間使用情形</string>\n    <string name=\"action_sort_tracker_score\">歷程平臺評分</string>\n    <string name=\"action_apply\">套用</string>\n    <string name=\"action_revert_to_default\">還原為預設值</string>\n    <string name=\"no_scanlators_found\">沒有掃譯者</string>\n    <string name=\"scanlator\">掃譯者</string>\n    <string name=\"exclude_scanlators\">排除掃譯者</string>\n    <string name=\"action_create\">建立</string>\n    <string name=\"action_menu_overflow_description\">更多選項</string>\n    <string name=\"selected\">已勾選</string>\n    <string name=\"not_selected\">尚未勾選</string>\n    <string name=\"action_bar_up_description\">向上瀏覽</string>\n    <string name=\"pref_storage_location\">儲存位置</string>\n    <string name=\"pref_storage_location_info\">供自動備份、章節下載和本機來源使用</string>\n    <string name=\"onboarding_storage_action_select\">選擇資料夾</string>\n    <string name=\"pref_onboarding_guide\">新手上路精靈</string>\n    <string name=\"onboarding_guides_new_user\">初探 %s？我們建議你查看入門指南</string>\n    <string name=\"onboarding_action_finish\">開始使用</string>\n    <string name=\"onboarding_storage_selection_required\">必須選擇一個資料夾</string>\n    <string name=\"onboarding_heading\">歡迎！</string>\n    <string name=\"onboarding_guides_returning_user\">重新安裝 %s？</string>\n    <string name=\"onboarding_action_skip\">略過</string>\n    <string name=\"onboarding_action_next\">下一步</string>\n    <string name=\"onboarding_description\">讓我們先設定一些東西，隨後你隨時可至設定中變更這些選項</string>\n    <string name=\"no_location_set\">未設定儲存位置</string>\n    <string name=\"onboarding_storage_info\">選擇供 %1$s 存放下載的章節、備份檔等內容的資料夾 \\n \\n建議使用專屬的資料夾 \\n \\n選擇的資料夾：%2$s</string>\n    <string name=\"onboarding_permission_notifications\">通知權限</string>\n    <string name=\"onboarding_permission_install_apps\">安裝應用程式權限</string>\n    <string name=\"onboarding_permission_ignore_battery_opts_description\">避免中斷書櫃更新、章節下載和還原備份等較為費時的作業</string>\n    <string name=\"onboarding_permission_ignore_battery_opts\">背景耗電量</string>\n    <string name=\"onboarding_permission_install_apps_description\">用以安裝來源擴充套件</string>\n    <string name=\"onboarding_permission_notifications_description\">用以傳送書櫃更新等通知</string>\n    <string name=\"onboarding_permission_action_grant\">授予</string>\n    <string name=\"available_disk_space_info\">可用：%1$s / 總計：%2$s</string>\n    <string name=\"ext_permission_install_apps_warning\">缺少安裝擴充套件所需的權限，輕觸此處以授予</string>\n    <string name=\"private_settings\">包含敏感設定 (如：歷程平臺登入權杖)</string>\n    <string name=\"manga_interval_expected_update\">預計 %1$s後更新，每 %2$s檢查一次</string>\n    <string name=\"invalid_backup_file_error\">完整錯誤訊息：</string>\n    <string name=\"manga_interval_custom_amount\">自訂更新頻率：</string>\n    <string name=\"label_add_repo_input\">儲存庫網址</string>\n    <string name=\"error_repo_exists\">已有該儲存庫！</string>\n    <string name=\"pref_library_update_smart_update\">智慧更新</string>\n    <string name=\"invalid_repo_name\">無效的儲存庫網址</string>\n    <string name=\"action_add_repo_message\">將額外的擴充套件儲存庫新增至 Mihon，此處應填入一個結尾為「index.min.json」的網址</string>\n    <string name=\"delete_repo_confirmation\">確定要刪除「%s」儲存庫嗎？</string>\n    <string name=\"action_delete_repo\">刪除儲存庫</string>\n    <string name=\"action_add_repo\">新增儲存庫</string>\n    <string name=\"information_empty_repos\">尚未新增任何儲存庫</string>\n    <string name=\"label_extension_repos\">擴充套件儲存庫</string>\n    <string name=\"onboarding_storage_help_action\">儲存空間指南</string>\n    <string name=\"onboarding_storage_help_info\">從舊版升級而不確定該如何選擇嗎？請參閱儲存空間指南以取得更多資訊</string>\n    <string name=\"theme_nord\">北風</string>\n    <string name=\"ext_revoke_trust\">復原對不明擴充套件的信任</string>\n    <string name=\"manga_interval_expected_update_soon\">即將</string>\n    <string name=\"action_open_repo\">開啟來源儲存庫</string>\n    <string name=\"pref_webtoon_disable_zoom_out\">停用縮小</string>\n    <string name=\"pref_display_profile\">自訂顯示設定檔</string>\n    <string name=\"action_add_anyway\">仍要新增</string>\n    <string name=\"action_migrate_duplicate\">遷移現有作品</string>\n    <string name=\"action_replace_repo\">取代</string>\n    <string name=\"action_replace_repo_title\">已有相同的簽署金鑰指紋</string>\n    <string name=\"action_replace_repo_message\">「%1$s」儲存庫的簽署金鑰指紋與「%2$s」相同\\n若此為預期現象，則「%2$s」將被取代，否則請聯絡該儲存庫的維護者</string>\n    <string name=\"upcoming_guide\">即將推出的指南</string>\n    <string name=\"upcoming_calendar_next\">下個月</string>\n    <string name=\"upcoming_calendar_prev\">上個月</string>\n    <string name=\"label_upcoming\">即將推出</string>\n    <string name=\"action_view_upcoming\">檢視即將推出的更新</string>\n    <string name=\"file_picker_uri_permission_unsupported\">無法取得永久性資料夾存取權，應用程式可能會表現異常</string>\n    <string name=\"pref_flash_style_white\">白</string>\n    <string name=\"pref_flash_style_white_black\">黑白</string>\n    <string name=\"manga_interval_expected_update_null\">此漫畫已完結，又或尚無預發佈日</string>\n    <string name=\"pref_flash_duration\">閃爍時間</string>\n    <string name=\"pref_flash_duration_summary\">%1$s 毫秒</string>\n    <string name=\"pref_flash_page_interval\">閃爍間隔</string>\n    <string name=\"pref_flash_with\">閃爍於</string>\n    <string name=\"pref_flash_style_black\">黑</string>\n    <string name=\"invalid_backup_file_unknown\">備份檔案已損壞</string>\n    <string name=\"invalid_backup_file_json\">不支援 JSON 備份</string>\n    <string name=\"extensionRepo_settings\">擴充套件儲存庫</string>\n    <string name=\"action_copy_link\">複製連結</string>\n    <string name=\"add_repo_confirmation\">您想新增儲存庫\\\"%s\\\"嗎？</string>\n    <string name=\"pref_download_new_unread_chapters_only\">略過下載重複閱讀的章節</string>\n    <string name=\"confirm_tracker_update\">將進度更新到第 %d 章？</string>\n    <string name=\"onboarding_permission_analytics\">允許資料分析</string>\n    <string name=\"onboarding_permission_analytics_description\">傳送匿名使用資料來改進應用程式功能</string>\n    <string name=\"pref_security\">安全</string>\n    <string name=\"pref_firebase\">資料分析和崩潰日誌</string>\n    <string name=\"onboarding_permission_crashlytics\">傳送崩潰日誌</string>\n    <string name=\"onboarding_permission_crashlytics_description\">向開發人員傳送匿名崩潰日誌</string>\n    <string name=\"firebase_summary\">傳送崩潰日誌及資料分析有助於我們識別並解決問題和提升效能，並使未來的更新更貼近您的需求</string>\n    <string name=\"action_sort_random\">隨機</string>\n    <string name=\"ext_remove\">解除安裝</string>\n    <string name=\"ext_confirm_remove\">解除安裝擴充套件？</string>\n    <string name=\"remove_private_extension_message\">您真的要解除安裝「%s」擴充套件嗎？</string>\n    <string name=\"non_library_settings\">所有已閱讀的作品</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">標記為已讀時更新章節進度</string>\n    <string name=\"trackers_updated_summary\">已更新歷程到第%d章</string>\n    <string name=\"pref_hardware_bitmap_threshold\">自訂硬體點陣圖的閾值設定</string>\n    <string name=\"pref_hardware_bitmap_threshold_summary\">如果閱讀時載入的是空白影像，請逐步降低閾值\\n已選擇：%s</string>\n    <string name=\"pref_hardware_bitmap_threshold_default\">%d (預設)</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_summary\">影響效能。 僅當降低點陣圖閾值無法解決空白影象問題時才啟用</string>\n    <string name=\"pref_incognito_mode_extension_summary\">停止紀錄擴充的閱讀歷史</string>\n    <string name=\"label_auto\">自動</string>\n    <string name=\"theme_monochrome\">單色</string>\n    <string name=\"tracked_privately\">私下紀錄</string>\n    <string name=\"action_toggle_private_on\">私下紀錄</string>\n    <string name=\"action_toggle_private_off\">公開紀錄</string>\n    <string name=\"library_list\">書櫃清單</string>\n    <string name=\"library_exported\">已匯出清單</string>\n    <string name=\"export\">匯出</string>\n    <string name=\"author\">作者</string>\n    <string name=\"artist\">畫家</string>\n    <string name=\"pref_always_decode_long_strip_with_ssiv_2\">對長條閱讀模式使用舊版解碼器</string>\n    <string name=\"pref_mark_duplicate_read_chapter_read\">將重複的已讀章節標記為已讀</string>\n</resources>\n"
  },
  {
    "path": "i18n/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "i18n-aniyomi/build.gradle.kts",
    "content": "import mihon.buildlogic.generatedBuildDir\nimport mihon.buildlogic.tasks.getLocalesConfigTask\nimport org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi\n\nplugins {\n    id(\"mihon.library\")\n    kotlin(\"multiplatform\")\n    alias(libs.plugins.moko)\n}\n\nkotlin {\n    androidTarget()\n\n    applyDefaultHierarchyTemplate()\n\n    sourceSets {\n        commonMain {\n            dependencies {\n                api(libs.moko.core)\n            }\n        }\n    }\n\n    @OptIn(ExperimentalKotlinGradlePluginApi::class)\n    compilerOptions {\n        freeCompilerArgs.add(\"-Xexpect-actual-classes\")\n    }\n}\n\nval generatedAndroidResourceDir = generatedBuildDir.resolve(\"android/res\")\n\nandroid {\n    namespace = \"tachiyomi.i18n.aniyomi\"\n\n    sourceSets {\n        val main by getting\n        main.res.srcDirs(\n            \"src/commonMain/resources\",\n            generatedAndroidResourceDir,\n        )\n    }\n\n    lint {\n        disable.addAll(listOf(\"MissingTranslation\", \"ExtraTranslation\"))\n    }\n}\n\nmultiplatformResources {\n    resourcesClassName.set(\"AYMR\")\n    resourcesPackage.set(\"tachiyomi.i18n.aniyomi\")\n}\n\ntasks {\n    val localesConfigTask = project.getLocalesConfigTask(generatedAndroidResourceDir)\n    preBuild {\n        dependsOn(localesConfigTask)\n    }\n}\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/am/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">የማንጋ ምድቦች</string>\n    <string name=\"general_categories\">ምድቦች</string>\n    <string name=\"anime_categories\">የአኒሜ ምድቦች</string>\n    <string name=\"entries\">የስብስብ ግቤቶች</string>\n    <string name=\"chapters_episodes\">ምዕራፎች እና ክፍሎች</string>\n    <string name=\"episodes\">ክፍሎች</string>\n    <string name=\"backup_settings_warning\">ማስጠንቀቂያ፡ ቅንብሮችን በምትኬ ላይ ማስቀመጥ የትራኪንግ የይለፍ ቃሎችዎንም ያከማቻል፣ ይህን የምትኬ ፋይል ለሌላ አያጋሩ!</string>\n    <string name=\"label_manga_library\">ማንጋ</string>\n    <string name=\"label_anime_library\">አኒሜ</string>\n    <string name=\"label_anime\">አኒሜ</string>\n    <string name=\"label_manga\">ማንጋ</string>\n    <string name=\"label_manga_sources\">የማንጋ ምንጮች</string>\n    <string name=\"label_anime_sources\">የአኒሜ ምንጮች</string>\n    <string name=\"label_watched_duration\">የእይታ ቆይታ</string>\n    <string name=\"label_watched_episodes\">ታይቷል</string>\n    <string name=\"pref_library_manga_columns\">የማንጋ ዕቃዎች በአንድ ረድፍ</string>\n    <string name=\"pref_library_anime_columns\">የአኒም ዕቃዎች በአንድ ረድፍ</string>\n    <string name=\"pref_bottom_nav_no_history\">ታሪክን ወደ ተጨማሪ ትር ውሰድ</string>\n    <string name=\"pref_bottom_nav_no_updates\">ዝመናዎችን ወደ ተጨማሪ ትር ይውሰዱ</string>\n    <string name=\"pref_bottom_nav_no_manga\">ማንጋን ወደ ተጨማሪ ትር ይውሰዱ</string>\n    <string name=\"action_filter_unseen\">የማይታይ</string>\n    <string name=\"action_global_manga_search\">ዓለም አቀፍ ማንጋ ፍለጋ</string>\n    <string name=\"action_global_anime_search\">ዓለም አቀፍ አኒሜ ፍለጋ</string>\n    <string name=\"action_sort_total_episodes\">ጠቅላላ ክፍሎች</string>\n    <string name=\"action_sort_last_seen\">ለመጨረሻ ግዜ የታየው</string>\n    <string name=\"action_sort_last_checked\">መጨረሻ የተፈተሸ</string>\n    <string name=\"action_sort_latest_episode\">የቅርብ ጊዜ ክፍል</string>\n    <string name=\"default_manga_category\">ነባሪ ምድብ</string>\n    <string name=\"download_notifier_download_paused_chapters\">ማውረድ ለአፍታ ቆሟል</string>\n    <string name=\"channel_new_chapters_episodes\">የምዕራፍ ዝመናዎች</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ar/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"zero\">الحلقة الغير مشاهدة التالية</item>\n        <item quantity=\"one\">الحلقة الغير مشاهدة التالية</item>\n        <item quantity=\"two\">الحلقتين الغير مشاهدة التالية</item>\n        <item quantity=\"few\">بعض الحلقات %d الغير مشاهدة التالية</item>\n        <item quantity=\"many\">الحلقات %d الغير مشاهدة التالية</item>\n        <item quantity=\"other\">الحلقات %d الغير مشاهدة التالية</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"zero\">حلقة</item>\n        <item quantity=\"one\">أول حلقة</item>\n        <item quantity=\"two\">حلقتان</item>\n        <item quantity=\"few\">%1$s حلقات</item>\n        <item quantity=\"many\">%1$s حلقة</item>\n        <item quantity=\"other\">%1$s حلقة</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"zero\">لا يوجد</item>\n        <item quantity=\"one\">الحلقة التالية</item>\n        <item quantity=\"two\">الحلقتان التالية</item>\n        <item quantity=\"few\">الحلقات التالية</item>\n        <item quantity=\"many\">الحلقات التالية</item>\n        <item quantity=\"other\">الحلقات التالية</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"zero\">لعنوان واحد</item>\n        <item quantity=\"one\">لـ 1 عنوان</item>\n        <item quantity=\"two\">لعنوانين</item>\n        <item quantity=\"few\">لـ %d عناوين</item>\n        <item quantity=\"many\">لـ %d عنوان</item>\n        <item quantity=\"other\">لـ %d عناوين</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"zero\">حلقة جديدة</item>\n        <item quantity=\"one\">1 حلقة جديدة</item>\n        <item quantity=\"two\">حلقتين جديدتين</item>\n        <item quantity=\"few\">%1$d حلقات جديدة</item>\n        <item quantity=\"many\">%1$d حلقة جديدة</item>\n        <item quantity=\"other\">%1$d حلقات جديدة</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"zero\">ثانية</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=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"zero\">الحلقات %1$s و 1 أخرى</item>\n        <item quantity=\"one\">الحلقات %1$s و 1 أخرى</item>\n        <item quantity=\"two\">الحلقات %1$s و حلقتين أخرى</item>\n        <item quantity=\"few\">الحلقات %1$s و %2$d أخرى</item>\n        <item quantity=\"many\">الحلقات %1$s و %2$d أخرى</item>\n        <item quantity=\"other\">الحلقات %1$s و %2$d أخرى</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ar/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">اضغط مرة أخرى للخروج</string>\n    <string name=\"action_filter_started\">بدأت</string>\n    <string name=\"action_sort_airing_time\">وقت البث</string>\n    <string name=\"action_reorganize_by\">اعد الترتيب</string>\n    <string name=\"relative_time_now\">الآن</string>\n    <string name=\"pref_library_summary\">الفئات، التحديث الشامل، عند سحب الحلقة/الفصل</string>\n    <string name=\"pref_library_update_show_tab_badge\">إظهار عدد الغير مقروء/ الغير مشاهد على أيقونة التحديثات</string>\n    <string name=\"label_player_settings\">إعدادات المشغل</string>\n    <string name=\"action_search_player_settings\">بحث في إعدادات المشغل</string>\n    <string name=\"pref_player_internal\">مشغل داخلي</string>\n    <string name=\"pref_player_internal_summary\">التقدم، والتحكم، والإتجاه</string>\n    <string name=\"pref_progress_mark_as_seen\">في أي نسبة تحدد الحلقة كـ\\\"تم مشاهدتها\\\"</string>\n    <string name=\"pref_preserve_watching_position\">الحفاظ على موضع المشاهدة على الحلقات التي تمت مشاهدتها</string>\n    <string name=\"pref_category_player_orientation\">التوجيه</string>\n    <string name=\"rotation_video\">تدوير الفيديو</string>\n    <string name=\"rotation_reverse_landscape\">الوضع الأفقي العكسي</string>\n    <string name=\"rotation_sensor_portrait\">المستشعر الرأسي</string>\n    <string name=\"rotation_sensor_landscape\">الوضع الأفقي حسب المستشعر</string>\n    <string name=\"pref_category_controls\">عناصر التحكم</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">السماح بالإيماءات في اللوحات</string>\n    <string name=\"pref_controls_show_loading\">عرض مؤشر التحميل</string>\n    <string name=\"pref_controls_show_chapter_indicator\">عرض مؤشر الفصل</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">يظهر فقط إذا كان الفيديو لديه حلقات أخرى</string>\n    <string name=\"pref_controls_display_volume_percentage\">عرض نسبة الصوت</string>\n    <string name=\"pref_remember_brightness\">تذكر وقم بالتغيير إلى آخر سطوع تم استخدامه</string>\n    <string name=\"pref_remember_volume\">تذكر وقم بالتغيير إلى آخر مستوى صوت تم إستخدامه</string>\n    <string name=\"pref_player_fullscreen\">إظهار المحتوى في شاشة العرض المنبثقة</string>\n    <string name=\"pref_player_hide_controls\">إخفاء عناصر تحكم عند فتح مشغل الوسائط</string>\n    <string name=\"pref_show_system_bar\">عرض شريط النظام</string>\n    <string name=\"pref_reduce_motion\">تقليل الحركة</string>\n    <string name=\"pref_player_time_to_disappear\">وقت اختفاء المشغل</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s مللي ثانية</string>\n    <string name=\"pref_panel_opacity\">شفافية اللوحة</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">تفعيل التخطي التلقائي</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">تفعيل نمط Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">زر إنتهاء الوقت</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 ثواني</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 ثواني</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 ثواني</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 ثواني</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 ثواني</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 ثواني</string>\n    <string name=\"pref_category_player_aniskip_info\">إعدادات AniSkip</string>\n    <string name=\"pref_enable_aniskip\">تفعيل AniSkip</string>\n    <string name=\"pref_category_pip\">وضعية صورة داخل صورة (PiP)</string>\n    <string name=\"pref_enable_pip\">تفعيل وضعية صورة داخل صورة (PiP)</string>\n    <string name=\"pref_pip_episode_toasts\">إظهار الإخطار المنبثق عند تبديل الحلقات في وضع \\\"(PiP) صورة في صورة\\\"</string>\n    <string name=\"pref_pip_on_exit\">التبديل تلقائيا إلى وضع \\\"الصورة في الصورة\\\" عند الخروج من المشغل</string>\n    <string name=\"pref_pip_replace_with_previous\">استبدال خيار تخطي 10 ثوانٍ بالحلقة السابقة</string>\n    <string name=\"pref_category_external_player\">مشغل الوسائط الخارجي</string>\n    <string name=\"pref_always_use_external_player\">دائما إستخدام مشغل الوسائط الخارجي</string>\n    <string name=\"pref_external_player_preference\">تفضيل مشغل الوسائط الخارجي</string>\n    <string name=\"pref_player_gestures\">إيماءات المشغل</string>\n    <string name=\"pref_player_gestures_summary\">البحث، والنقر المزدوج، وعناصر التحكم في الوسائط</string>\n    <string name=\"pref_category_player_sliders\">أشرطة تمرير المشغل</string>\n    <string name=\"enable_volume_brightness_gestures\">تفعيل إيماءات الصوت والسطوع</string>\n    <string name=\"pref_controls_swap_vol_brightness\">تبديل الصوت والسطوع</string>\n    <string name=\"pref_category_player_seeking\">البحث عن</string>\n    <string name=\"enable_horizontal_seek_gesture\">تبديل إيماءة البحث الأفقية</string>\n    <string name=\"pref_show_seekbar\">عرض شريط التقديم</string>\n    <string name=\"pref_default_intro_length\">المدة الإفتراضية لتخطي المقدمة</string>\n    <string name=\"pref_intro_length\">طول مدة تخطي المقدمة</string>\n    <string name=\"pref_skip_length\">إضغط مرتين لتخطي المقدمة</string>\n    <string name=\"pref_skip_disable\">تعطيل</string>\n    <string name=\"pref_player_smooth_seek\">تمكين البحث الدقيق</string>\n    <string name=\"pref_player_smooth_seek_summary\">عند التمكين، لن يركز البحث على الإطارات المفتاحية، مما يجعل البحث أكثر دقة وأيضا ابطأ</string>\n    <string name=\"pref_category_double_tap\">النقر المزدوج</string>\n    <string name=\"pref_left_double_tap\">النقر المزدوج الأيسر</string>\n    <string name=\"pref_center_double_tap\">النقر المزدوج في الوسط</string>\n    <string name=\"pref_right_double_tap\">النقر المزدوج الأيمن</string>\n    <string name=\"pref_double_tap_info\">إعدادات النقر المزدوج للتحكم.</string>\n    <string name=\"single_action_none\">لا شيء</string>\n    <string name=\"single_action_seek\">التقديم</string>\n    <string name=\"single_action_playpause\">تشغيل/إيقاف مؤقت</string>\n    <string name=\"single_action_switch\">تبديل</string>\n    <string name=\"single_action_custom\">مخصص</string>\n    <string name=\"pref_category_media_controls\">عناصر التحكم بالوسائط</string>\n    <string name=\"pref_media_previous\">الوسائط السابقة</string>\n    <string name=\"pref_media_playpause\">تشغيل/إيقاف مؤقت</string>\n    <string name=\"pref_media_next\">الوسائط التالية</string>\n    <string name=\"pref_media_info\">عند تعيين عنصر تحكم الوسائط إلى مخصص، يمكن ربطه من خلال input.conf. رموز المفاتيح هي 0x10004 للسابق، و 0x10005 للتشغيل/الإيقاف المؤقت، و 0x10006 للتالي.</string>\n    <string name=\"pref_player_decoder\">فك الترميز</string>\n    <string name=\"pref_player_decoder_summary\">فك ترميز الأجهزة، وتنسيق البكسل، وإزالة التشفير</string>\n    <string name=\"pref_try_hw\">تجربة فك الترميز بالأجهزة</string>\n    <string name=\"pref_gpu_next_title\">تمكين gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">واجهة خلفية جديدة لعرض الفيديو</string>\n    <string name=\"pref_debanding_title\">Khalid</string>\n    <string name=\"pref_debanding_none\">بدون تنعيم</string>\n    <string name=\"pref_debanding_cpu\">وحدة المعالجة المركزية</string>\n    <string name=\"pref_debanding_gpu\">وحدة معالجة الرسوميات</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">استخدام YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">إعدادات YUV420P</string>\n    <string name=\"pref_player_subtitle\">الترجمات</string>\n    <string name=\"pref_player_subtitle_summary\">اللغات المفضلة، والقائمة البيضاء، والقائمة السوداء</string>\n    <string name=\"pref_player_subtitle_lang\">لغة الترجمة</string>\n    <string name=\"pref_player_subtitle_lang_info\">حدد اللغة الافتراضية للترجمة.</string>\n    <string name=\"pref_player_subtitle_whitelist\">قائمة الترجمات المسموح بها</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">إضافة الترجمات التي سيتم عرضها.</string>\n    <string name=\"pref_player_subtitle_blacklist\">قائمة الترجمات المحظورة</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">إدارة الترجمات المحظورة.</string>\n    <string name=\"pref_player_audio\">الصوت</string>\n    <string name=\"pref_player_audio_summary\">اللغات المفضلة، وضبط درجة الصوت، والقنوات الصوتية</string>\n    <string name=\"pref_player_audio_lang\">لغة الصوت</string>\n    <string name=\"pref_player_audio_lang_info\">حدد اللغة الافتراضية للصوت.</string>\n    <string name=\"pref_player_audio_pitch_correction\">تصحيح طبقة الصوت</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">يمنع الصوت من أن يصبح عالي النبرة عند السرعات العالية ومنخفض النبرة عند السرعات البطيئة</string>\n    <string name=\"pref_player_audio_channels\">القنوات الصوتية</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">آمنة تلقائيًا</string>\n    <string name=\"pref_player_audio_channels_auto\">آلي</string>\n    <string name=\"pref_player_audio_channels_mono\">أحادي</string>\n    <string name=\"pref_player_audio_channels_stereo\">ستيريو</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">ستيريو عكسي</string>\n    <string name=\"pref_player_audio_boost_cap\">تعزيز مستوى الصوت</string>\n    <string name=\"pref_player_custom_button\">أزرار مخصصة</string>\n    <string name=\"pref_player_custom_button_summary\">تفعيل كود لوا (lua) مع الأزرار المخصصة</string>\n    <string name=\"pref_player_custom_button_header\">تعديل الأزرار المخصصة</string>\n    <string name=\"pref_player_custom_button_guide\">دليل الأزرار المخصصة</string>\n    <string name=\"pref_player_custom_button_empty\">ليس لديك أزرار مخصصة. اضغط على علامة الزائد لإنشاء زر مخصص.</string>\n    <string name=\"pref_player_custom_button_add\">أضف زراً</string>\n    <string name=\"pref_player_custom_button_edit\">تعديل الزر</string>\n    <string name=\"pref_player_custom_button_title\">العنوان</string>\n    <string name=\"pref_player_custom_button_error_exists\">الزر موجود مسبقاً!</string>\n    <string name=\"pref_player_custom_button_content\">كود لوا (lua)</string>\n    <string name=\"pref_player_custom_button_content_long\">كود لوا (lua) (بالضغط المطول)</string>\n    <string name=\"pref_player_custom_button_optional\">(إختياري)</string>\n    <string name=\"pref_player_custom_button_delete\">زر الحذف</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">هل تريد حذف زر %s؟</string>\n    <string name=\"pref_player_advanced\">إعدادات متقدمة</string>\n    <string name=\"pref_player_advanced_summary\">البرامج النصية، mpv.conf، input.conf</string>\n    <string name=\"pref_mpv_conf\">قم بتحرير ملف تكوين MPV لمزيد من إعدادات مشغل الوسائط</string>\n    <string name=\"pref_reset_mpv_conf\">إعادة تعيين ملف تكوين MPV</string>\n    <string name=\"pref_mpv_input\">تعديل ملف إدخال MPV لتكوين تعيين لوحة المفاتيح</string>\n    <string name=\"video_fit_screen\">ملائمة للشاشة</string>\n    <string name=\"video_crop_screen\">اقتصاص على الشاشة</string>\n    <string name=\"video_stretch_screen\">تمديد العرض لتسع الشاشة</string>\n    <string name=\"mpv_media_title\">%1$s - الحلقة %2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">انتهى مؤقت النوم</string>\n    <string name=\"player_generic_unit_ms\">مللي ثانية</string>\n    <string name=\"numeric_chooser_value_too_big\">القيمة كبيرة جدًا</string>\n    <string name=\"numeric_chooser_value_too_small\">القيمة صغيرة جدًا</string>\n    <string name=\"enable_auto_play\">التشغيل التلقائي مفعل</string>\n    <string name=\"disable_auto_play\">التشغيل التلقائي متوقف</string>\n    <string name=\"player_aniskip_dontskip\">لا تتخطى</string>\n    <string name=\"player_aniskip_dontskip_toast\">تخطي %s خلال %d ثانية</string>\n    <string name=\"player_aniskip_skip\">تم تخطي %s</string>\n    <string name=\"no_next_episode\">الحلقة التالية غير موجودة!</string>\n    <string name=\"no_prev_episode\">الحلقة السابقة غير موجودة!</string>\n    <string name=\"player_sheets_delay_set_as_default\">تعيين كافتراضي</string>\n    <string name=\"player_sheets_audio_delay_title\">تأخير الصوت</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">صوت مسموع</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">تم رصد الصوت</string>\n    <string name=\"player_sheets_sub_delay_title\">تأخير الترجمة</string>\n    <string name=\"player_sheets_sub_delay_speed\">السرعة</string>\n    <string name=\"player_sheets_sub_delay_delay\">التأخير</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">الترجمة الأساسية</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">الترجمة الثانوية</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">الترجمة الأساسية والثانوية</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">تم سماع الصوت</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">تم عرض النص</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">صوت مسموع</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">تم رصد الصوت</string>\n    <string name=\"player_sheets_sub_colors_title\">ألوان الترجمة</string>\n    <string name=\"player_sheets_subtitles_color_text\">لون النص</string>\n    <string name=\"player_sheets_subtitles_color_border\">لون الإطار</string>\n    <string name=\"player_sheets_subtitles_color_background\">الخلفية</string>\n    <string name=\"player_sheets_sub_color_red\">أحمر</string>\n    <string name=\"player_sheets_sub_color_green\">أخضر</string>\n    <string name=\"player_sheets_sub_color_blue\">أزرق</string>\n    <string name=\"player_sheets_sub_color_alpha\">ألفا</string>\n    <string name=\"player_sheets_subtitles_settings_title\">إعدادات الترجمة</string>\n    <string name=\"player_sheets_sub_typography_title\">الطباعة</string>\n    <string name=\"player_sheets_sub_typography_font\">الخط</string>\n    <string name=\"player_sheets_sub_typography_font_size\">حجم الخط</string>\n    <string name=\"player_sheets_sub_typography_border_style\">نمط الإطار</string>\n    <string name=\"player_sheets_sub_typography_border_size\">حجم الإطار</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">إزاحة الظل</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">الإطار والظل</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">صندوق معتم</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">صندوق خلفي</string>\n    <string name=\"player_sheets_sub_misc_title\">إعدادات متنوعة</string>\n    <string name=\"player_sheets_sub_override_ass\">تجاوز ترجمة ASS/SSA</string>\n    <string name=\"player_sheets_sub_scale\">المقياس</string>\n    <string name=\"player_sheets_sub_position\">الموضع</string>\n    <string name=\"player_sheets_filters_title\">الفلاتر</string>\n    <string name=\"player_sheets_filters_brightness\">السطوع</string>\n    <string name=\"player_sheets_filters_contrast\">التباين</string>\n    <string name=\"player_sheets_filters_gamma\">جاما</string>\n    <string name=\"player_sheets_filters_Saturation\">التشبع</string>\n    <string name=\"player_sheets_filters_hue\">الصبغة</string>\n    <string name=\"player_sheets_filters_warning\">قد لا تعمل بعض الفلاتر على برنامج تشغيل الفيديو الحالي لديك</string>\n    <string name=\"player_sheets_add_ext_audio\">إضافة صوت خارجي</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">المزيد</string>\n    <string name=\"player_hwdec_mode\">تعيين وضع فك تشفير الأجهزة الافتراضي</string>\n    <string name=\"pref_audio_channels\">قنوات الصوت</string>\n    <string name=\"player_sheets_stats_page_title\">صفحة الإحصائيات الافتراضية</string>\n    <string name=\"player_sheets_tracks_off\">إيقاف المسارات</string>\n    <string name=\"player_sheets_stats_page_chip\">الصفحة %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">أزرار مخصصة</string>\n    <string name=\"player_seek_n_seconds\">%d ثانية</string>\n    <string name=\"timer_title\">المؤقت</string>\n    <string name=\"timer_remaining\">%s الوقت المتبقي</string>\n    <string name=\"timer_picker_enter_timer\">أدخل الوقت</string>\n    <string name=\"timer_picker_pick_time\">حدد الوقت</string>\n    <string name=\"timer_cancel_timer\">إلغاء المؤقت الحالي</string>\n    <string name=\"player_sheets_speed_slider_label\">السرعة</string>\n    <string name=\"player_sheets_speed_make_default\">تعيين كسرعة افتراضية</string>\n    <string name=\"pref_audio_pitch_correction_title\">تصحيح طبقة الصوت</string>\n    <string name=\"pref_audio_pitch_correction_summary\">يمنع الصوت من أن يصبح عالي النبرة عند السرعات العالية ومنخفض النبرة عند السرعات البطيئة</string>\n    <string name=\"player_sheets_add_ext_sub\">إضافة ترجمة خارجية</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">لن تحظى الترجمة الثانوية بانماط ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">إظهار الترجمة في لقطة الشاشة</string>\n    <string name=\"pref_general_summary\">لغة التطبيق, الاشعارات</string>\n    <string name=\"theme_cloudflare\">كلاودفلير</string>\n    <string name=\"theme_sapphire\">ياقوت</string>\n    <string name=\"theme_doom\">الهلاك</string>\n    <string name=\"theme_matrix\">ماتريكس</string>\n    <string name=\"pref_preserve_reading_position\">الحفاظ على وضع القراءة في الفصول المقروءة</string>\n    <string name=\"pref_download_slots\">الحد الأقصى للتنزيلات</string>\n    <string name=\"local_source_badge\">محلي</string>\n    <string name=\"anime_interval_expected_update\">من المتوقع إصدار حلقات جديدة بعد %1$s، سيتم التحقق كل %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">إما أن هذا الأنمي قد اكتمل، أو لا يوجد تاريخ إصدار متوقع.</string>\n    <string name=\"confirm_tracker_update_anime\">تحديث المتعقبات إلى الحلقة %d؟</string>\n    <string name=\"trackers_updated_summary_manga\">تم تحديث المتتبعات إلى الفصل %d</string>\n    <string name=\"trackers_updated_summary_anime\">تم تحديث المتتبعات إلى الحلقة %d</string>\n    <string name=\"download_notifier_download_finish\">إكتمل التنزيل</string>\n    <string name=\"action_hide\">إخفاء</string>\n    <string name=\"label_all\">الكل</string>\n    <string name=\"label_category\">فئة</string>\n    <string name=\"manga_categories\">فئات المانغا</string>\n    <string name=\"general_categories\">فئات</string>\n    <string name=\"anime_categories\">فئات الأنمي</string>\n    <string name=\"entries\">مداخل المكتبة</string>\n    <string name=\"chapters_episodes\">الفصول والحلقات</string>\n    <string name=\"episodes\">حلقات</string>\n    <string name=\"backup_settings_warning\">تحذير: ستعمل إعدادات النسخ الاحتياطي على تخزين كلمات مرور المسار أيضًا، لا تشارك ملف النسخ الاحتياطي هذا!</string>\n    <string name=\"label_manga_library\">مانغا</string>\n    <string name=\"label_anime_library\">أنمي</string>\n    <string name=\"label_anime\">أنمي</string>\n    <string name=\"label_manga\">مانغا</string>\n    <string name=\"label_recent_anime_updates\">تحديثات الأنمي</string>\n    <string name=\"label_manga_sources\">مصادر المانغا</string>\n    <string name=\"label_anime_sources\">مصادر الأنمي</string>\n    <string name=\"label_watched_duration\">مدة المشاهدة</string>\n    <string name=\"label_watched_episodes\">شاهد</string>\n    <string name=\"pref_start_screen\">شاشة البدء</string>\n    <string name=\"pref_library_manga_columns\">عناصر المانغا لكل صف</string>\n    <string name=\"pref_library_anime_columns\">عناصر الأنمي لكل صف</string>\n    <string name=\"pref_bottom_nav_no_history\">انقل \\\"السجل\\\" إلى علامة التبويب \\\"المزيد\\\"</string>\n    <string name=\"pref_bottom_nav_no_updates\">انقل \\\"التحديثات\\\" إلى علامة التبويب \\\"المزيد\\\"</string>\n    <string name=\"pref_bottom_nav_no_manga\">انقل \\\"المانغا\\\" إلى علامة التبويب \\\"المزيد\\\"</string>\n    <string name=\"pref_bottom_nav_no_browse\">انتقل إلى علامة التبويب \\\"المزيد\\\"</string>\n    <string name=\"action_filter_unseen\">غير مشاهد</string>\n    <string name=\"action_global_manga_search\">البحث العام عن المانجا</string>\n    <string name=\"action_global_anime_search\">البحث العام عن الانمي</string>\n    <string name=\"action_sort_total_episodes\">مجموع الحلقات</string>\n    <string name=\"action_sort_last_seen\">اخر ظهور</string>\n    <string name=\"action_sort_last_checked\">اخر فحص</string>\n    <string name=\"action_sort_latest_episode\">أحدث حلقة</string>\n    <string name=\"action_sort_last_anime_update\">أحدث تحديث للأنمي</string>\n    <string name=\"action_sort_unseen_count\">عدد الغير المشاهد</string>\n    <string name=\"action_sort_episode_fetch_date\">تاريخ جلب الحلقة</string>\n    <string name=\"action_mark_as_seen\">وضع علامة كـ\\\"مشاهد\\\"</string>\n    <string name=\"action_mark_as_unseen\">وضع علامة كـ\\\"غير مشاهد\\\"</string>\n    <string name=\"action_mark_previous_as_seen\">وضع علامة على السابق كـ\\\"غير مشاهد\\\"</string>\n    <string name=\"action_play_internally\">تشغيل داخليا</string>\n    <string name=\"action_play_externally\">تشغيل خارجيا</string>\n    <string name=\"action_download_unread\">تحميل الفصول الغير المقروءة</string>\n    <string name=\"action_download_unseen\">تحميل الحلقات الغير المشاهدة</string>\n    <string name=\"action_bookmark_episode\">العلامة المرجعية للحلقة</string>\n    <string name=\"action_remove_bookmark_episode\">بدون علامة مرجعية للحلقة</string>\n    <string name=\"action_edit_anime_categories\">تعديل فئات الأنمي</string>\n    <string name=\"action_edit_manga_categories\">تعديل فئات المانغا</string>\n    <string name=\"action_view_episodes\">عرض الحلقات</string>\n    <string name=\"action_previous_episode\">الحلقة السابقة</string>\n    <string name=\"action_play\">تشغيل</string>\n    <string name=\"action_next_episode\">الحلقة التالية</string>\n    <string name=\"action_screen_fit\">وضع \\\"ملاءمة الشاشة\\\"</string>\n    <string name=\"action_show_anime\">عرض الأنمي</string>\n    <string name=\"action_display_download_badge_anime\">الحلقات المحملة</string>\n    <string name=\"action_display_local_badge_manga\">المانجا المحلية</string>\n    <string name=\"action_display_local_badge_anime\">الأنمي المحلي</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">البحث عن مصادر المانجا المثبتة فقط في البحث العام</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">البحث في مصادر الأنيمي المثبتة فقط في البحث العام</string>\n    <string name=\"pref_hide_in_manga_library_items\">إخفاء عناصر المانجا الموجودة بالفعل في المكتبة</string>\n    <string name=\"pref_hide_in_anime_library_items\">تم إخفاء مدخلات المانجا بالفعل في المكتبة</string>\n    <string name=\"action_order_by_episode_number\">حسب رقم الحلقة</string>\n    <string name=\"action_start_download_externally\">استخدام أداة التحميل الخارجية</string>\n    <string name=\"action_start_download_internally\">إستخدام أداة التحميل الداخلية</string>\n    <string name=\"pref_bottom_nav_style\">نمط شريط التنقل السفلي</string>\n    <string name=\"pref_default_home_tab_library\">ضبط شاشة البداية إلى تبويب المانغاتعيين شاشة البدء إلى علامة تبويب المانغا</string>\n    <string name=\"default_manga_category\">فئة المانغا الإفتراضية</string>\n    <string name=\"default_anime_category\">تصنيف الأنمي الإفتراضي</string>\n    <string name=\"pref_manga_library_update_categories_details\">المانجا في الفئات المستبعدة لن يتم تحديثها حتى وإن كانت أيضا في الفئات المضمنة.</string>\n    <string name=\"pref_anime_library_update_categories_details\">لن يتم تحديث الأنيمي في الفئات المستبعدة حتى لو كانت في الفئات المضمنة أيضًا.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">هذا الامتداد ليس من قائمة ملحقات \\\"Aniyomi\\\" الرسمية.</string>\n    <string name=\"unofficial_anime_extension_message\">هذا الملحق ليس من قائمة ملحقات انيومي الرسمية.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">فئات المستثناة</string>\n    <string name=\"pref_remove_exclude_categories_anime\">فئات الأنمي المستبعدة</string>\n    <string name=\"pref_category_external_downloader\">برنامج التحميل الخارجي</string>\n    <string name=\"pref_use_external_downloader\">استخدم دائمًا أداة التحميل الخارجية للأنمي</string>\n    <string name=\"pref_external_downloader_selection\">تفضيل تطبيق التحميل</string>\n    <string name=\"pref_download_new_episodes\">تحميل الحلقات الجديدة</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">تنزيل الحلقات الجديدة وغير المشاهدة فقط</string>\n    <string name=\"auto_download_while_watching\">تنزيل تلقائي أثناء المشاهدة</string>\n    <string name=\"download_ahead_info_anime\">يعمل فقط على الإدخالات في المكتبة وإذا كانت الحلقة الحالية بالإضافة إلى الحلقة التالية قد تم تنزيلها بالفعل</string>\n    <string name=\"pref_track_on_add_library\">افتح قائمة التتبع عند الإضافة إلى المكتبة</string>\n    <string name=\"pref_show_next_episode_airing_time\">عرض موعد بث الحلقة القادمة</string>\n    <string name=\"pref_backup_flags_summary\">ما هي المعلومات المراد تضمينها في ملف النسخ الاحتياطي</string>\n    <string name=\"pref_anime_storage_usage\">تخزين الانمي المستخدم</string>\n    <string name=\"pref_manga_storage_usage\">تخزين المانغا المستخدم</string>\n    <string name=\"used_cache_both\">مستخدم بواسطة الأنمي: %1$s، مستخدم بواسطة المانغا: %2$s</string>\n    <string name=\"pref_clear_manga_database\">تنظيف قاعدة البيانات</string>\n    <string name=\"pref_clear_anime_database\">تنظيف قاعدة بيانات الأنمي</string>\n    <string name=\"pref_clear_manga_database_summary\">حذف سجل المانجا التي لم يتم حفظها في مكتبتك</string>\n    <string name=\"pref_clear_anime_database_summary\">حذف سجل الأنمي التي لم يتم حفظها في مكتبتك</string>\n    <string name=\"anime_from_library\">الأنمي من المكتبة</string>\n    <string name=\"downloaded_episodes\">الحلقات المحملة</string>\n    <string name=\"local_manga_source\">مصادر المانغا المحلية</string>\n    <string name=\"local_anime_source\">مصادر الأنمي المحلية</string>\n    <string name=\"episode_not_found\">الحلقة غير موجودة</string>\n    <string name=\"local_invalid_episode_format\">تنسيق الحلقة غير صالح</string>\n    <string name=\"unknown_studio\">استوديو غير معروف</string>\n    <string name=\"delete_confirmation\">هل أنت متأكد أنك تريد حذف \\\"%s\\\"؟</string>\n    <string name=\"delete_downloads_for_anime\">حذف الحلقات المحملة؟</string>\n    <string name=\"snack_add_to_manga_library\">إضافة المانجا إلى المكتبة؟</string>\n    <string name=\"snack_add_to_anime_library\">إضافة الأنمي إلى المكتبة؟</string>\n    <string name=\"display_mode_episode\">الحلقة %1$s</string>\n    <string name=\"episode_downloading_progress\">تحميل (%d%%)</string>\n    <string name=\"download_error\">خطأ</string>\n    <string name=\"download_paused\">متوقّف</string>\n    <string name=\"show_episode_number\">رقم الحلقة</string>\n    <string name=\"sort_by_episode_number\">حسب رقم الحلقة</string>\n    <string name=\"download_unseen\">غير مشاهد</string>\n    <string name=\"confirm_delete_episodes\">هل أنت متأكد من أنك تريد حذف الحلقات المحددة؟</string>\n    <string name=\"also_set_episode_settings_for_library\">تنطبق أيضا على جميع الإنميات في مكتبتي</string>\n    <string name=\"no_episodes_error\">لم يتم العثور على حلقات</string>\n    <string name=\"watching\">مشاهدة</string>\n    <string name=\"currently_reading\">يقرأ حاليا</string>\n    <string name=\"currently_watching\">يراقب حاليا</string>\n    <string name=\"plan_to_watch\">خطة لمشاهدة</string>\n    <string name=\"not_interesting\">غير مهتم</string>\n    <string name=\"want_to_read\">تريد القراءة</string>\n    <string name=\"want_to_watch\">تريد المشاهدة</string>\n    <string name=\"repeating_anime\">إعادة المشاهدة</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">سيؤدي ذلك إلى إزالة تاريخ مشاهدة هذه الحلقة. هل أنت متأكد؟</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">أعد تعيين جميع الحلقات لهذا الأنمي</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s، %3$s</string>\n    <string name=\"episode_progress\">التقدم: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">التقدم: %1$s</string>\n    <string name=\"recent_anime_time\">الحلقة. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">لا يوجد فيديو</string>\n    <string name=\"notification_new_episodes\">تم العثور على حلقات جديدة</string>\n    <string name=\"information_no_recent_anime\">لم تتم مشاهدة أي شيء مؤخرا</string>\n    <string name=\"episode_settings_updated\">تم تحديث الإعدادات الافتراضية للحلقة</string>\n    <string name=\"download_notifier_download_paused_chapters\">تم إيقاف التنزيل مؤقتاً</string>\n    <string name=\"download_notifier_download_paused_episodes\">تم إيقاف تنزيل الحلقة مؤقتا</string>\n    <string name=\"channel_new_chapters_episodes\">تحديثات الفصول</string>\n    <string name=\"label_storage\">تخزين</string>\n    <string name=\"label_history\">مانغا</string>\n    <string name=\"label_anime_history\">أنمي</string>\n    <string name=\"label_updates\">مانغا</string>\n    <string name=\"label_anime_updates\">أنمي</string>\n    <string name=\"action_change_intro_length\">تغيير طول المقدمة</string>\n    <string name=\"notification_episodes_single\">الحلقة %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">الحلقة %1$s و%2$d أخرى</string>\n    <string name=\"notification_episodes_multiple\">الحلقات %1$s</string>\n    <string name=\"episode_settings\">إعدادات الحلقة</string>\n    <string name=\"pref_backup_flags\">خيارات النسخ الاحتياطي</string>\n    <string name=\"label_manga_extensions\">ملحقات المانغا</string>\n    <string name=\"label_anime_extensions\">ملحقات الأنمي</string>\n    <string name=\"label_migration_manga\">ترحيل المانغا</string>\n    <string name=\"label_migration_anime\">ترحيل الأنمي</string>\n    <string name=\"settings\">الإعدادات</string>\n    <string name=\"copied_video_link_to_clipboard\">نسخ رابط جودة الفيديو إلى الحافظة</string>\n    <string name=\"choose_video_quality\">اختر جودة الفيديو:</string>\n    <string name=\"extension_settings\">إعدادات الامتداد</string>\n    <string name=\"theme_cottoncandy\">حلوى القطن</string>\n    <string name=\"theme_mocha\">موكا</string>\n    <string name=\"pref_episode_swipe_end\">مرر لليمين للإجراء الأيمن</string>\n    <string name=\"pref_episode_swipe_start\">مرر لليسار للإجراء الأيسر</string>\n    <string name=\"pref_category_hide_hidden\">إخفاء الفئات المخفية من شاشة الفئات</string>\n    <string name=\"pref_update_anime_release_grace_period\">فترة السماح المتوقعة لإصدار الأنمي</string>\n    <string name=\"data_saver_exclude\">تعطيل توفير البيانات</string>\n    <string name=\"data_saver_stop_exclude\">إيقاف الاستبعاد من موفر البيانات</string>\n    <string name=\"data_saver\">موفر البيانات</string>\n    <string name=\"data_saver_summary\">ضغط الصور قبل التنزيل أو التحميل في القارئ</string>\n    <string name=\"data_saver_downloader\">استخدم موفر البيانات عند التنزيل</string>\n    <string name=\"data_saver_ignore_jpeg\">تجاهل الصور التي بصيغة (Jpeg)</string>\n    <string name=\"data_saver_ignore_gif\">تجاهل مقاطع(Gif)</string>\n    <string name=\"data_saver_image_quality\">جودة الصور</string>\n    <string name=\"data_saver_image_quality_summary\">تعني أنه يتم حفظ نسبة مئوية أعلى من جودة الصورة ، ولكن هذا يعني أيضًا أن حجم الملف أكبر ، و 80% متوسط جيد بين حجم الملف وجودة الصورة</string>\n    <string name=\"data_saver_image_format\">الضغط إلى Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">حجم ملف Jpeg أصغر بكثير من حجم ملف Webp (مما يعني حفظ المزيد من البيانات) ، ولكنه يجعل الصور تفقد المزيد من الجودة أيضًا.\n\\n يضغط حاليًا على Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">حجم ملف Jpeg أصغر بكثير من حجم ملف Webp (مما يعني حفظ المزيد من البيانات) ، ولكنه يجعل الصور تفقد المزيد من الجودة أيضًا.\n\\n يضغط حاليًا على Webp</string>\n    <string name=\"data_saver_color_bw\">التحويل إلى الأبيض والأسود</string>\n    <string name=\"bandwidth_hero\">عرض نطاق الترددي (يتطلب خادم وكيل لعرض النطاق الترددي)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">خادم وكيل لعرض (Bandwidth hero)</string>\n    <string name=\"data_saver_server_summary\">ضع عنوان(url) لخادم الوكيل (Bandwidth Hero ) هنا</string>\n    <string name=\"download_slots_info\">سيتم تنزيل الملفات بشكل متزامن فقط من مصادر مستضافة ذاتية أو غير محدودة في استهلاك البيانات</string>\n    <string name=\"unseen\">إزالة المشاهدة</string>\n    <string name=\"label_manga_extension_repos\">مخزن إضافة المانغا</string>\n    <string name=\"label_anime_extension_repos\">مخزن إضافة الأنمي</string>\n    <string name=\"onboarding_storage_action_create_folder\">إنشاء مجلد Aniyomi افتراضي</string>\n    <string name=\"download_speed_limit\">حد سرعة التنزيل</string>\n    <string name=\"download_speed_limit_hint\">اضبطه على 0 لتعطيل حد السرعة.</string>\n    <string name=\"manga\">مانغا</string>\n    <string name=\"action_display_unseen_badge\">الحلقات التي لم يتم مشاهدتها</string>\n    <string name=\"pref_category_delete_chapters\">حذف الفصول/الحلقات</string>\n    <string name=\"pref_remove_after_read\">بعد قراءته/مشاهدته قم بحذفه تلقائيا</string>\n    <string name=\"action_sort_last_manga_update\">آخر تحديث للمنغا</string>\n    <string name=\"action_show_manga\">اظهار المنغا</string>\n    <string name=\"action_display_show_continue_reading_button\">متابعة القراءة/المشاهدة</string>\n    <string name=\"pref_update_only_completely_read\">تخطي الفصول والحلقات غير المرئية</string>\n    <string name=\"action_add_repo_message\">إضافة مستودعات إضافية إلى %s . يجب أن يكون هذا الرابط ينتهي بـ \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">لا يشتغل إلا حين يكون الفصل أو الحلقة الحاليِّة والتي تليها منزَّلين.</string>\n    <string name=\"non_library_settings\">جميع الفصول المقروءة أو المشاهدة</string>\n    <string name=\"pref_remove_after_marked_as_read\">بعد وضع علامة \\\"مقروءة\\\" يدوياً</string>\n    <string name=\"pref_auto_update_manga_sync\">تحديث تقدّم الفصول بعد القراءة</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">تحديث تلقائيًا عند التحديد كمقروء</string>\n    <string name=\"pref_clear_chapter_cache\">مسح الذاكرة المؤقتة للفصول</string>\n    <string name=\"pref_auto_clear_chapter_cache\">امسح ملفات التخزين المؤقت عند فتح التطبيق</string>\n    <string name=\"clear_database_confirmation\">أمتأكِّد؟ إن فعلتَ سوف تخسر الفصول المقروءة و التقدم فى المدخلات الغير محفوظة فى المكتبة</string>\n    <string name=\"manga_from_library\">من المكتبة</string>\n    <string name=\"also_set_chapter_settings_for_library\">تنطبق أيضًا على جميع الإدخالات في مكتبتي</string>\n    <string name=\"dialog_with_checkbox_reset\">إعادة تعيين جميع الفصول لهذا الإدخال</string>\n    <string name=\"download_insufficient_space\">يتعذّر تنزيل الفصول بسبب انخفاض مساحة التخزين</string>\n    <string name=\"download_queue_size_warning\">تحذير: يمكن أن تؤدِّي التنزيلات كبيرة الحجم والعدد إلى إبطاء المصادر أو/و حجز التطيق. اضغط لمعرفة المزيد۔</string>\n    <string name=\"pref_invalidate_download_cache_summary\">فرض التطبيق على إعادة التحقق من الفصول التي تم تنزيلها</string>\n    <string name=\"pref_hosters\">مواقع الاستضافة</string>\n    <string name=\"pref_hosters_show_failure\">عرض مواقع الاستضافة الفاشلة</string>\n    <string name=\"pref_hosters_show_empty\">عرض مواقع الاستضافة الفارغة</string>\n    <string name=\"pref_category_intro_skip\">تخطي المقدمة</string>\n    <string name=\"pref_enable_intro_skip\">سمح تخطي المقدمة</string>\n    <string name=\"pref_disable_aniskip_chapter\">تعطيل AniSkip إذا كان الفيديو يحتوي بالفعل على فصول</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">رمز خاطء: \\\"%s\\\"</string>\n    <string name=\"pref_player_custom_button_startup\">عند التشغيل</string>\n    <string name=\"pref_player_custom_button_id\">(المعرف: %d)</string>\n    <string name=\"pref_player_editor\">محرر السكربت</string>\n    <string name=\"pref_player_editor_summary\">تعديل وإنشاء سكربتات جديدة وخيارات السكربت</string>\n    <string name=\"pref_player_editor_script\">سكربتات</string>\n    <string name=\"pref_player_editor_script_opts\">إعدادات السكربت</string>\n    <string name=\"pref_player_no_items\">المجلد لا يحتوي على عناصر. اضغط على زر الإضافة (+) لإضافة ملف جديد.</string>\n    <string name=\"editor_unsaved_progress\">لديك تغييرات لم تُحفظ بعد. هل ترغب في الرجوع رغم ذلك؟</string>\n    <string name=\"editor_save_error\">تعذر حفظ الملف</string>\n    <string name=\"editor_save_success\">تم حفظ الملف</string>\n    <string name=\"editor_action_rename\">إعادة تسمية الملف</string>\n    <string name=\"editor_action_delete\">حذف الملف</string>\n    <string name=\"editor_file_already_exists\">الملف موجود حاليا</string>\n    <string name=\"editor_invalid_filename\">اسم ملف غير صالح</string>\n    <string name=\"editor_create_file\">إنشاء ملف</string>\n    <string name=\"editor_edit_file\">تعديل اسم الملف</string>\n    <string name=\"editor_filename\">اسم الملف</string>\n    <string name=\"editor_create_error\">تعذر إنشاء الملف</string>\n    <string name=\"editor_rename_error\">تعذرت إعادة تسمية الملف</string>\n    <string name=\"editor_delete_error\">غير قادر على حذف الملف</string>\n    <string name=\"editor_delete_file\">حذف الملف</string>\n    <string name=\"editor_delete_file_confirmation\">هل ترغب في حذف ملف \\\"%s\\\"؟</string>\n    <string name=\"pref_mpv_user_files\">استخدام ملفات MPV المستعمل</string>\n    <string name=\"pref_mpv_user_files_summary\">استخدام الملفات في مجلد mpv-config</string>\n    <string name=\"player_skip_action\">تخطّي %1$s</string>\n    <string name=\"player_chapter_type_opening\">البداية</string>\n    <string name=\"player_chapter_type_ending\">النهاية</string>\n    <string name=\"player_chapter_type_recap\">إعادة</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/as/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">বাহিৰ হ’বলৈ আকৌ পিছলৈ টিপক</string>\n    <string name=\"action_filter_started\">আৰম্ভ হৈছে</string>\n    <string name=\"action_sort_airing_time\">প্ৰচাৰৰ সময়</string>\n    <string name=\"action_reorganize_by\">পুনৰ সজোৱা</string>\n    <string name=\"relative_time_now\">এতিয়া</string>\n    <string name=\"pref_library_summary\">শ্ৰেণীসমূহ, বিশ্বজনীন আপডেট, অধ্যায়/পৰ্ব সোঁৱৰণ</string>\n    <string name=\"pref_library_update_show_tab_badge\">আপডেট আইকনত নদেখা/অপঢ়া সংখ্যা দেখুৱাওক</string>\n    <string name=\"label_player_settings\">প্লেয়াৰ সংহতি</string>\n    <string name=\"action_search_player_settings\">প্লেয়াৰ সংহতি বিচাৰক</string>\n    <string name=\"pref_player_internal\">অভ্যন্তৰীণ প্লেয়াৰ</string>\n    <string name=\"pref_player_internal_summary\">অগ্ৰগতি, নিয়ন্ত্ৰণ, দিশ</string>\n    <string name=\"pref_progress_mark_as_seen\">পৰ্বটো কেতিয়া দেখা বুলি চিহ্নিত কৰিব</string>\n    <string name=\"pref_preserve_watching_position\">দেখা পৰ্বসমূহৰ চাওঁতাৰ অৱস্থান সাঁচি ৰাখক</string>\n    <string name=\"pref_category_player_orientation\">দিশ</string>\n    <string name=\"rotation_video\">ভিডিঅ’</string>\n    <string name=\"rotation_reverse_landscape\">উলোট লেণ্ডস্কেপ</string>\n    <string name=\"rotation_sensor_portrait\">চেন্সৰ প’ৰ্ট্ৰেইট</string>\n    <string name=\"rotation_sensor_landscape\">চেন্সৰ লেণ্ডস্কেপ</string>\n    <string name=\"pref_category_controls\">নিয়ন্ত্ৰণ</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">পেনেলত অঙ্গভঙ্গিৰ অনুমতি দিয়ক</string>\n    <string name=\"pref_controls_show_loading\">ল’ডিং বৃত্ত দেখুৱাওক</string>\n    <string name=\"pref_controls_show_chapter_indicator\">বৰ্তমানৰ অধ্যায়ৰ সূচক দেখুৱাওক</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">ভিডিঅ’ত অধ্যায় থাকিলেহে দেখা যায়</string>\n    <string name=\"pref_controls_display_volume_percentage\">শতাংশ হিচাপে শব্দৰ মাত্ৰা দেখুৱাওক</string>\n    <string name=\"pref_remember_brightness\">শেষৰ ব্যৱহৃত উজ্জ্বলতা মনত ৰাখক আৰু সলনি কৰক</string>\n    <string name=\"pref_remember_volume\">শেষৰ ব্যৱহৃত শব্দৰ মাত্ৰা মনত ৰাখক আৰু সলনি কৰক</string>\n    <string name=\"pref_player_fullscreen\">প্ৰদৰ্শন কাটআউটত বিষয়বস্তু দেখুৱাওক</string>\n    <string name=\"pref_player_hide_controls\">প্লেয়াৰ খোলাৰ সময়ত নিয়ন্ত্ৰণ লুকুৱাওক</string>\n    <string name=\"pref_show_system_bar\">নিয়ন্ত্ৰণৰ সৈতে ব্যৱস্থাপনাৰ স্থিতি বাৰ দেখুৱাওক</string>\n    <string name=\"pref_reduce_motion\">প্লেয়াৰৰ এনিমেশ্যন কমাওক</string>\n    <string name=\"pref_player_time_to_disappear\">প্লেয়াৰ নিয়ন্ত্ৰণ লুকুৱাৰ সময়</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s মিলিছেকেণ্ড</string>\n    <string name=\"pref_panel_opacity\">পেনেলৰ অস্বচ্ছতা</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">স্বয়ংক্ৰিয় এৰি দিয়া সক্ৰিয় কৰক</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">নেটফ্লিক্স শৈলী সক্ৰিয় কৰক</string>\n    <string name=\"pref_waiting_time_aniskip\">বাটনৰ সময়সীমা</string>\n    <string name=\"pref_waiting_time_aniskip_5\">৫ ছেকেণ্ড</string>\n    <string name=\"pref_waiting_time_aniskip_6\">৬ ছেকেণ্ড</string>\n    <string name=\"pref_waiting_time_aniskip_7\">৭ ছেকেণ্ড</string>\n    <string name=\"pref_waiting_time_aniskip_8\">৮ ছেকেণ্ড</string>\n    <string name=\"pref_waiting_time_aniskip_9\">৯ ছেকেণ্ড</string>\n    <string name=\"pref_waiting_time_aniskip_10\">১০ ছেকেণ্ড</string>\n    <string name=\"pref_category_player_aniskip_info\">এনিস্কিপৰ কাম কৰিবলৈ এনিমে MAL বা Anilistৰ সৈতে ট্ৰেক কৰা প্ৰয়োজন</string>\n    <string name=\"pref_enable_aniskip\">এনিস্কিপ সক্ৰিয় কৰক</string>\n    <string name=\"pref_category_pip\">ছবিৰ-মাজত-ছবি (PiP)</string>\n    <string name=\"pref_enable_pip\">PiP মোডৰ ব্যৱহাৰ সক্ৰিয় কৰক</string>\n    <string name=\"pref_pip_episode_toasts\">PiP মোডত পৰ্ব সলনি কৰোঁতে পৰ্বৰ টোষ্ট দেখুৱাওক</string>\n    <string name=\"pref_pip_on_exit\">প্লেয়াৰৰ পৰা ওলাওঁতে স্বয়ংক্ৰিয়ভাৱে PiP মোডলৈ সলনি কৰক</string>\n    <string name=\"pref_pip_replace_with_previous\">১০ ছেকেণ্ড এৰি দিয়ক বিকল্পৰ ঠাইত আগৰ পৰ্ব স্থাপন কৰক</string>\n    <string name=\"pref_category_external_player\">বাহ্যিক প্লেয়াৰ</string>\n    <string name=\"pref_always_use_external_player\">সদায় বাহ্যিক প্লেয়াৰ ব্যৱহাৰ কৰক</string>\n    <string name=\"pref_external_player_preference\">বাহ্যিক প্লেয়াৰৰ পছন্দ</string>\n    <string name=\"pref_player_gestures\">অঙ্গভঙ্গি</string>\n    <string name=\"pref_player_gestures_summary\">অনুসন্ধান, দুইবাৰ টিপা, মিডিয়া নিয়ন্ত্ৰণ</string>\n    <string name=\"pref_category_player_sliders\">স্লাইডাৰ</string>\n    <string name=\"enable_volume_brightness_gestures\">শব্দ আৰু উজ্জ্বলতাৰ অঙ্গভঙ্গি সক্ৰিয় কৰক</string>\n    <string name=\"pref_controls_swap_vol_brightness\">শব্দ আৰু উজ্জ্বলতাৰ স্লাইডাৰ সলনি কৰক</string>\n    <string name=\"pref_category_player_seeking\">বিচাৰণ</string>\n    <string name=\"enable_horizontal_seek_gesture\">অনুভূমিক অনুসন্ধান অঙ্গভঙ্গি সক্ৰিয় কৰক</string>\n    <string name=\"pref_show_seekbar\">অনুসন্ধান কৰোঁতে সিকবাৰ দেখুৱাওক</string>\n    <string name=\"pref_default_intro_length\">ডিফল্ট ইন্ট্ৰ’ এৰি দিয়াৰ দৈৰ্ঘ্য</string>\n    <string name=\"pref_intro_length\">ইন্ট্ৰ’ এৰি দিয়াৰ দৈৰ্ঘ্য</string>\n    <string name=\"pref_skip_length\">দুইবাৰ টিপি এৰি দিয়াৰ দৈৰ্ঘ্য</string>\n    <string name=\"pref_skip_disable\">অক্ষম কৰক</string>\n    <string name=\"pref_player_smooth_seek\">নিখুঁত অনুসন্ধান সক্ৰিয় কৰক</string>\n    <string name=\"pref_player_smooth_seek_summary\">সক্ৰিয় কৰিলে, অনুসন্ধান কীফ্ৰেমত কেন্দ্ৰিত নহ’ব, যাৰ ফলত ধীৰ কিন্তু নিখুঁত অনুসন্ধান হ’ব</string>\n    <string name=\"pref_category_double_tap\">দুইবাৰ টিপা</string>\n    <string name=\"pref_left_double_tap\">দুইবাৰ টিপা (বাওঁ)</string>\n    <string name=\"pref_center_double_tap\">দুইবাৰ টিপা (মধ্য)</string>\n    <string name=\"pref_right_double_tap\">দুইবাৰ টিপা (সোঁ)</string>\n    <string name=\"pref_double_tap_info\">যেতিয়া এটা টিপা অঙ্গভঙ্গি কাষ্টম হিচাপে স্থাপন কৰা হয়, তেতিয়া input.conf ৰ জৰিয়তে বান্ধিব পাৰি। কী ক’ডসমূহ হ’ল বাওঁৰ বাবে 0x10001, মধ্যৰ বাবে 0x10002, আৰু সোঁৰ বাবে 0x10003।</string>\n    <string name=\"single_action_none\">কোনো নাই</string>\n    <string name=\"single_action_seek\">অনুসন্ধান</string>\n    <string name=\"single_action_playpause\">চলাওক/ৰখাওক</string>\n    <string name=\"single_action_switch\">পৰ্ব সলনি কৰক</string>\n    <string name=\"single_action_custom\">কাষ্টম</string>\n    <string name=\"pref_category_media_controls\">মিডিয়া নিয়ন্ত্ৰণ</string>\n    <string name=\"pref_media_previous\">আগৰ</string>\n    <string name=\"pref_media_playpause\">চলাওক/ৰখাওক</string>\n    <string name=\"pref_media_next\">পৰৱৰ্তী</string>\n    <string name=\"pref_media_info\">যেতিয়া মিডিয়া নিয়ন্ত্ৰণ কাষ্টম হিচাপে স্থাপন কৰা হয়, তেতিয়া input.conf ৰ জৰিয়তে বান্ধিব পাৰি। কী ক’ডসমূহ হ’ল আগৰৰ বাবে 0x10004, চলাওক/ৰখাওকৰ বাবে 0x10005, আৰু পৰৱৰ্তীৰ বাবে 0x10006।</string>\n    <string name=\"pref_player_decoder\">ডিক’ডাৰ</string>\n    <string name=\"pref_player_decoder_summary\">হাৰ্ডৱেৰ ডিক’ডিং, পিক্সেল ফৰ্মেট, ডিবেণ্ডিং</string>\n    <string name=\"pref_try_hw\">হাৰ্ডৱেৰ ডিক’ডিং চেষ্টা কৰক</string>\n    <string name=\"pref_gpu_next_title\">gpu-next সক্ৰিয় কৰক</string>\n    <string name=\"pref_gpu_next_subtitle\">এটা নতুন ভিডিঅ’ ৰেণ্ডাৰিং বেকএণ্ড</string>\n    <string name=\"pref_debanding_title\">ডিবেণ্ডিং</string>\n    <string name=\"pref_debanding_none\">কোনো নাই</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">YUV420P পিক্সেল ফৰ্মেট ব্যৱহাৰ কৰক</string>\n    <string name=\"pref_use_yuv420p_subtitle\">কিছুমান ভিডিঅ’ ক’ডেকত ক’লা পৰ্দা সমাধান কৰিব পাৰে, গুণমানৰ মূল্যত পৰিৱেশন উন্নত কৰিব পাৰে</string>\n    <string name=\"pref_player_subtitle\">উপশিৰোনামা</string>\n    <string name=\"pref_player_subtitle_summary\">পছন্দৰ ভাষা, হোৱাইটলিষ্ট, ব্লেকলিষ্ট</string>\n    <string name=\"pref_player_subtitle_lang\">পছন্দৰ ভাষা</string>\n    <string name=\"pref_player_subtitle_lang_info\">একাধিক উপশিৰোনামা থকা ভিডিঅ’ত ডিফল্ট হিচাপে নিৰ্বাচিত ভাষা(সমূহ), দুই বা তিনি আখৰৰ ভাষা ক’ড কাম কৰে। একাধিক মান কমাৰে পৃথক কৰিব পাৰি।</string>\n    <string name=\"pref_player_subtitle_whitelist\">হোৱাইটলিষ্ট</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">উপশিৰোনামাৰ বাবে হোৱাইটলিষ্ট। যদি হোৱাইটলিষ্ট নিৰ্ধাৰিত হয়, তেন্তে হোৱাইটলিষ্টৰ শব্দ থকা প্ৰথম উপশিৰোনামা ব্যৱহাৰ হ’ব। একাধিক মান কমাৰে পৃথক কৰিব পাৰি।</string>\n    <string name=\"pref_player_subtitle_blacklist\">ব্লেকলিষ্ট</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">উপশিৰোনামাৰ বাবে ব্লেকলিষ্ট। যদি ব্লেকলিষ্ট নিৰ্ধাৰিত হয়, তেন্তে ব্লেকলিষ্টৰ শব্দ থকা সকলো উপশিৰোনামা ফিল্টাৰ কৰা হ’ব। একাধিক মান কমাৰে পৃথক কৰিব পাৰি।</string>\n    <string name=\"pref_player_audio\">শব্দ</string>\n    <string name=\"pref_player_audio_summary\">পছন্দৰ ভাষা, পিচ সংশোধন, শব্দৰ চেনেল</string>\n    <string name=\"pref_player_audio_lang\">পছন্দৰ ভাষা</string>\n    <string name=\"pref_player_audio_lang_info\">একাধিক শব্দৰ স্ট্ৰিম থকা ভিডিঅ’ত ডিফল্ট হিচাপে নিৰ্বাচিত শব্দৰ ভাষা(সমূহ), দুই বা তিনি আখৰৰ ভাষা ক’ড কাম কৰে। একাধিক মান কমাৰে পৃথক কৰিব পাৰি।</string>\n    <string name=\"pref_player_audio_pitch_correction\">শব্দৰ পিচ সংশোধন সক্ৰিয় কৰক</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">দ্ৰুত গতিত শব্দ উচ্চ-পিচ হোৱা আৰু ধীৰ গতিত কম-পিচ হোৱা প্ৰতিৰোধ কৰে</string>\n    <string name=\"pref_player_audio_channels\">শব্দৰ চেনেল</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">স্বয়ংক্ৰিয়-নিৰাপদ</string>\n    <string name=\"pref_player_audio_channels_auto\">স্বয়ংক্ৰিয়</string>\n    <string name=\"pref_player_audio_channels_mono\">মনো</string>\n    <string name=\"pref_player_audio_channels_stereo\">ষ্টেৰিঅ’</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">উলোট ষ্টেৰিঅ’</string>\n    <string name=\"pref_player_audio_boost_cap\">শব্দৰ মাত্ৰা বৃদ্ধিৰ সীমা</string>\n    <string name=\"pref_player_custom_button\">কাষ্টম বাটন</string>\n    <string name=\"pref_player_custom_button_summary\">কাষ্টম বাটনৰ সৈতে Lua ক’ড চলাওক</string>\n    <string name=\"pref_player_custom_button_header\">কাষ্টম বাটন সম্পাদনা কৰক</string>\n    <string name=\"pref_player_custom_button_guide\">কাষ্টম বাটনৰ গাইড</string>\n    <string name=\"pref_player_custom_button_empty\">আপোনাৰ কোনো কাষ্টম বাটন নাই। নতুন বাটন সৃষ্টি কৰিবলৈ প্লাছ বাটনত টিপক।</string>\n    <string name=\"pref_player_custom_button_add\">বাটন যোগ কৰক</string>\n    <string name=\"pref_player_custom_button_edit\">বাটন সম্পাদনা কৰক</string>\n    <string name=\"pref_player_custom_button_title\">শিৰোনাম</string>\n    <string name=\"pref_player_custom_button_error_exists\">বাটন ইতিমধ্যে আছে!</string>\n    <string name=\"pref_player_custom_button_content\">Lua ক’ড</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua ক’ড (দীঘলীয়া টিপাৰ সময়ত)</string>\n    <string name=\"pref_player_custom_button_optional\">(বৈকল্পিক)</string>\n    <string name=\"pref_player_custom_button_delete\">বাটন মচক</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">আপুনি %s বাটনটো মচিব বিচাৰে নেকি?</string>\n    <string name=\"pref_player_custom_button_startup\">আৰম্ভণিত</string>\n    <string name=\"pref_player_custom_button_id\">(আইডি: %d)</string>\n    <string name=\"pref_player_advanced\">উন্নত</string>\n    <string name=\"pref_player_advanced_summary\">ব্যৱহাৰকাৰীৰ ফাইল, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">অধিক প্লেয়াৰ সংহতিৰ বাবে MPV কনফিগাৰেশ্যন ফাইল সম্পাদনা কৰক</string>\n    <string name=\"pref_reset_mpv_conf\">MPV কনফিগাৰেশ্যন ফাইল পুনৰ স্থাপন কৰক</string>\n    <string name=\"pref_mpv_input\">কীব’ৰ্ড মেপিং কনফিগাৰেশ্যনৰ বাবে MPV ইনপুট ফাইল সম্পাদনা কৰক</string>\n    <string name=\"video_fit_screen\">পৰ্দাত খাপ খুৱাওক</string>\n    <string name=\"video_crop_screen\">পৰ্দাত কাটি লোৱা</string>\n    <string name=\"video_stretch_screen\">পৰ্দালৈ টানি লোৱা</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">টোপনিৰ টাইমাৰ শেষ হৈছে</string>\n    <string name=\"player_generic_unit_ms\">মিলিছেকেণ্ড</string>\n    <string name=\"numeric_chooser_value_too_big\">মান অতি বেছি</string>\n    <string name=\"numeric_chooser_value_too_small\">মান অতি কম</string>\n    <string name=\"enable_auto_play\">স্বয়ংক্ৰিয় চলন সক্ৰিয়</string>\n    <string name=\"disable_auto_play\">স্বয়ংক্ৰিয় চলন অক্ষম</string>\n    <string name=\"player_aniskip_dontskip\">এৰি নিদিব</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s ৰ %d ছেকেণ্ডত এৰি দিয়া হ’ব</string>\n    <string name=\"player_aniskip_skip\">%s এৰি দিয়া হৈছে</string>\n    <string name=\"no_next_episode\">পৰৱৰ্তী পৰ্ব পোৱা নগ’ল!</string>\n    <string name=\"no_prev_episode\">আগৰ পৰ্ব পোৱা নগ’ল!</string>\n    <string name=\"player_sheets_delay_set_as_default\">ডিফল্ট হিচাপে স্থাপন কৰক</string>\n    <string name=\"player_sheets_audio_delay_title\">শব্দৰ বিলম্ব</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">শব্দ শুনা গৈছে</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">শব্দ চিনাক্ত কৰা হৈছে</string>\n    <string name=\"player_sheets_sub_delay_title\">উপশিৰোনামাৰ বিলম্ব</string>\n    <string name=\"player_sheets_sub_delay_speed\">গতি</string>\n    <string name=\"player_sheets_sub_delay_delay\">বিলম্ব</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">প্ৰাথমিক</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">গৌণ</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">দুয়োটা</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">কণ্ঠ শুনা গৈছে</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">লিখনী দেখা গৈছে</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">শব্দ শুনা গৈছে</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">শব্দ চিনাক্ত কৰা হৈছে</string>\n    <string name=\"player_sheets_sub_colors_title\">ৰং</string>\n    <string name=\"player_sheets_subtitles_color_text\">লিখনী</string>\n    <string name=\"player_sheets_subtitles_color_border\">সীমা</string>\n    <string name=\"player_sheets_subtitles_color_background\">পটভূমি</string>\n    <string name=\"player_sheets_sub_color_red\">ৰঙা</string>\n    <string name=\"player_sheets_sub_color_green\">সেউজীয়া</string>\n    <string name=\"player_sheets_sub_color_blue\">নীলা</string>\n    <string name=\"player_sheets_sub_color_alpha\">আলফা</string>\n    <string name=\"player_sheets_subtitles_settings_title\">উপশিৰোনামাৰ সংহতি</string>\n    <string name=\"player_sheets_sub_typography_title\">টাইপোগ্ৰাফী</string>\n    <string name=\"player_sheets_sub_typography_font\">ফন্ট</string>\n    <string name=\"player_sheets_sub_typography_font_size\">ফন্টৰ আকাৰ</string>\n    <string name=\"player_sheets_sub_typography_border_style\">সীমাৰ শৈলী</string>\n    <string name=\"player_sheets_sub_typography_border_size\">সীমাৰ আকাৰ</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">ছাঁৰ অফছেট</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">ৰেখা আৰু ছাঁ</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">অস্বচ্ছ বাকচ</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">পটভূমিৰ বাকচ</string>\n    <string name=\"player_sheets_sub_misc_title\">বিবিধ</string>\n    <string name=\"player_sheets_sub_override_ass\">ASS/SSA উপশিৰোনামা ওভাৰৰাইড কৰক</string>\n    <string name=\"player_sheets_sub_scale\">মাপ</string>\n    <string name=\"player_sheets_sub_position\">অৱস্থান</string>\n    <string name=\"player_sheets_filters_title\">ফিল্টাৰ</string>\n    <string name=\"player_sheets_filters_brightness\">উজ্জ্বলতা</string>\n    <string name=\"player_sheets_filters_contrast\">বৈপৰীত্য</string>\n    <string name=\"player_sheets_filters_gamma\">গামা</string>\n    <string name=\"player_sheets_filters_Saturation\">সংপৃক্তি</string>\n    <string name=\"player_sheets_filters_hue\">ৰঙৰ ছাঁ</string>\n    <string name=\"player_sheets_filters_warning\">কিছুমান ফিল্টাৰ আপোনাৰ বৰ্তমানৰ ভিডিঅ’ ড্ৰাইভাৰত কাম নকৰিব পাৰে</string>\n    <string name=\"player_sheets_add_ext_audio\">বাহ্যিক শব্দৰ ট্ৰেক যোগ কৰক</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">অধিক</string>\n    <string name=\"player_hwdec_mode\">হাৰ্ডৱেৰ ডিক’ডিং মোড</string>\n    <string name=\"pref_audio_channels\">শব্দৰ চেনেল</string>\n    <string name=\"player_sheets_stats_page_title\">ডিফল্ট পৰিসংখ্যান পৃষ্ঠা</string>\n    <string name=\"player_sheets_tracks_off\">বন্ধ</string>\n    <string name=\"player_sheets_stats_page_chip\">পৃষ্ঠা %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">কাষ্টম বাটন</string>\n    <string name=\"player_seek_n_seconds\">%d ছেকেণ্ড</string>\n    <string name=\"timer_title\">টোপনিৰ টাইমাৰ</string>\n    <string name=\"timer_remaining\">%s বাকী আছে</string>\n    <string name=\"timer_picker_enter_timer\">সময়সীমা লিখক</string>\n    <string name=\"timer_picker_pick_time\">সময়সীমা বাছক</string>\n    <string name=\"timer_cancel_timer\">বৰ্তমানৰ টাইমাৰ বাতিল কৰক</string>\n    <string name=\"player_sheets_speed_slider_label\">গতি</string>\n    <string name=\"player_sheets_speed_make_default\">ডিফল্ট গতি স্থাপন কৰক</string>\n    <string name=\"pref_audio_pitch_correction_title\">শব্দৰ পিচ সংশোধন সক্ৰিয় কৰক</string>\n    <string name=\"pref_audio_pitch_correction_summary\">দ্ৰুত গতিত শব্দ উচ্চ-পিচ আৰু ধীৰ গতিত কম-পিচ হোৱা প্ৰতিৰোধ কৰে</string>\n    <string name=\"player_sheets_add_ext_sub\">বাহ্যিক উপশিৰোনামা যোগ কৰক</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">গৌণ উপশিৰোনামাত কোনো ASS/SSA শৈলী নাথাকিব।</string>\n    <string name=\"screenshot_show_subs\">উপশিৰোনামা অন্তৰ্ভুক্ত কৰক</string>\n    <string name=\"pref_general_summary\">এপৰ ভাষা, অধিসূচনা</string>\n    <string name=\"theme_cloudflare\">ক্লাউডফ্লেয়াৰ</string>\n    <string name=\"theme_sapphire\">চফায়াৰ</string>\n    <string name=\"theme_doom\">ডুম</string>\n    <string name=\"theme_matrix\">মেট্ৰিক্স</string>\n    <string name=\"pref_library_rows\">তালিকাৰ আকাৰ</string>\n    <string name=\"pref_preserve_reading_position\">পঢ়া অধ্যায়ত পঢ়াৰ অৱস্থান সাঁচি ৰাখক</string>\n    <string name=\"pref_download_slots\">সৰ্বোচ্চ ডাউনলোড</string>\n    <string name=\"custom_button_settings\">কাষ্টম বাটন</string>\n    <string name=\"local_source_badge\">স্থানীয়</string>\n    <string name=\"anime_interval_expected_update\">নতুন পৰ্ব প্ৰায় %1$s সময়ত মুক্ত হ’ব, প্ৰতি %2$s সময়ত পৰীক্ষা কৰা হ’ব।</string>\n    <string name=\"anime_interval_expected_update_null\">এই এনিমে হয় সম্পূৰ্ণ হৈছে, নহয় মুক্তিৰ তাৰিখৰ কোনো পূৰ্বাভাস নাই।</string>\n    <string name=\"confirm_tracker_update_anime\">ট্ৰেকাৰক পৰ্ব %d লৈ আপডেট কৰিবনে?</string>\n    <string name=\"trackers_updated_summary_manga\">ট্ৰেকাৰ অধ্যায় %d লৈ আপডেট কৰা হৈছে</string>\n    <string name=\"trackers_updated_summary_anime\">ট্ৰেকাৰ পৰ্ব %d লৈ আপডেট কৰা হৈছে</string>\n    <string name=\"download_notifier_download_finish\">ডাউনলোড সম্পূৰ্ণ হৈছে</string>\n    <string name=\"action_hide\">লুকুৱাওক</string>\n    <string name=\"label_all\">সকলো</string>\n    <string name=\"label_category\">শ্ৰেণী</string>\n    <string name=\"manga_categories\">মাঙ্গাৰ শ্ৰেণী</string>\n    <string name=\"general_categories\">শ্ৰেণীসমূহ</string>\n    <string name=\"anime_categories\">এনিমেৰ শ্ৰেণী</string>\n    <string name=\"entries\">গ্ৰন্থাগাৰৰ প্ৰৱেশ</string>\n    <string name=\"chapters_episodes\">অধ্যায় আৰু পৰ্ব</string>\n    <string name=\"episodes\">পৰ্ব</string>\n    <string name=\"backup_settings_warning\">সতৰ্কবাণী: সংহতিৰ বেকআপ লওঁতে আপোনাৰ ট্ৰেকৰ গুপ্তশব্দো সাঁচি থোৱা হ’ব, এই বেকআপ ফাইল ভাগ-বতৰা নকৰিব!</string>\n    <string name=\"label_manga_library\">মাঙ্গা</string>\n    <string name=\"label_anime_library\">এনিমে</string>\n    <string name=\"label_anime\">এনিমে</string>\n    <string name=\"label_manga\">মাঙ্গা</string>\n    <string name=\"label_recent_anime_updates\">এনিমেৰ আপডেট</string>\n    <string name=\"label_manga_sources\">মাঙ্গাৰ উৎস</string>\n    <string name=\"label_anime_sources\">এনিমেৰ উৎস</string>\n    <string name=\"label_watched_duration\">দেখা সময়</string>\n    <string name=\"label_watched_episodes\">দেখা হৈছে</string>\n    <string name=\"pref_start_screen\">আৰম্ভণি পৰ্দা</string>\n    <string name=\"pref_library_manga_columns\">প্ৰতি শাৰীত মাঙ্গাৰ বস্তু</string>\n    <string name=\"pref_library_anime_columns\">প্ৰতি শাৰীত এনিমেৰ বস্তু</string>\n    <string name=\"pref_bottom_nav_no_history\">ইতিহাসক অধিক টেবলৈ স্থানান্তৰ কৰক</string>\n    <string name=\"pref_bottom_nav_no_updates\">আপডেটক অধিক টেবলৈ স্থানান্তৰ কৰক</string>\n    <string name=\"pref_bottom_nav_no_manga\">মাঙ্গাক অধিক টেবলৈ স্থানান্তৰ কৰক</string>\n    <string name=\"pref_bottom_nav_no_browse\">ব্ৰাউজক অধিক টেবলৈ স্থানান্তৰ কৰক</string>\n    <string name=\"action_filter_unseen\">নদেখা</string>\n    <string name=\"action_global_manga_search\">বিশ্বজনীন মাঙ্গা অনুসন্ধান</string>\n    <string name=\"action_global_anime_search\">বিশ্বজনীন এনিমে অনুসন্ধান</string>\n    <string name=\"action_sort_total_episodes\">মুঠ পৰ্ব</string>\n    <string name=\"action_sort_last_seen\">শেষবাৰ দেখা</string>\n    <string name=\"action_sort_last_checked\">শেষবাৰ পৰীক্ষা কৰা</string>\n    <string name=\"action_sort_latest_episode\">সৰ্বশেষ পৰ্ব</string>\n    <string name=\"action_sort_last_anime_update\">শেষ এনিমে আপডেট</string>\n    <string name=\"action_sort_unseen_count\">নদেখাৰ সংখ্যা</string>\n    <string name=\"action_sort_episode_fetch_date\">পৰ্ব প্ৰাপ্তিৰ তাৰিখ</string>\n    <string name=\"action_mark_as_seen\">দেখা বুলি চিহ্নিত কৰক</string>\n    <string name=\"action_mark_as_unseen\">নদেখা বুলি চিহ্নিত কৰক</string>\n    <string name=\"action_mark_previous_as_seen\">আগৰটো দেখা বুলি চিহ্নিত কৰক</string>\n    <string name=\"action_play_internally\">অভ্যন্তৰীণভাৱে চলাওক</string>\n    <string name=\"action_play_externally\">বাহ্যিকভাৱে চলাওক</string>\n    <string name=\"action_download_unread\">অপঢ়া অধ্যায় ডাউনলোড কৰক</string>\n    <string name=\"action_download_unseen\">নদেখা পৰ্ব ডাউনলোড কৰক</string>\n    <string name=\"action_bookmark_episode\">পৰ্ব বুকমাৰ্ক কৰক</string>\n    <string name=\"action_remove_bookmark_episode\">পৰ্বৰ বুকমাৰ্ক আঁতৰাওক</string>\n    <string name=\"action_edit_anime_categories\">এনিমেৰ শ্ৰেণী সম্পাদনা কৰক</string>\n    <string name=\"action_edit_manga_categories\">মাঙ্গাৰ শ্ৰেণী সম্পাদনা কৰক</string>\n    <string name=\"action_view_episodes\">পৰ্ব চাওক</string>\n    <string name=\"action_previous_episode\">আগৰ পৰ্ব</string>\n    <string name=\"action_play\">চলাওক</string>\n    <string name=\"action_next_episode\">পৰৱৰ্তী পৰ্ব</string>\n    <string name=\"action_screen_fit\">পৰ্দাৰ খাপ মোড</string>\n    <string name=\"action_show_anime\">এনিমে দেখুৱাওক</string>\n    <string name=\"action_display_download_badge_anime\">ডাউনলোড কৰা পৰ্ব</string>\n    <string name=\"action_display_local_badge_manga\">স্থানীয় মাঙ্গা</string>\n    <string name=\"action_display_local_badge_anime\">স্থানীয় এনিমে</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">বিশ্বজনীন অনুসন্ধানত কেৱল পিন কৰা মাঙ্গাৰ উৎস অনুসন্ধান কৰক</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">বিশ্বজনীন অনুসন্ধানত কেৱল পিন কৰা এনিমেৰ উৎস অনুসন্ধান কৰক</string>\n    <string name=\"pref_hide_in_manga_library_items\">গ্ৰন্থাগাৰত ইতিমধ্যে থকা মাঙ্গাৰ প্ৰৱেশ লুকুৱাওক</string>\n    <string name=\"pref_hide_in_anime_library_items\">গ্ৰন্থাগাৰত ইতিমধ্যে থকা এনিমেৰ প্ৰৱেশ লুকুৱাওক</string>\n    <string name=\"action_order_by_episode_number\">পৰ্বৰ সংখ্যা অনুসৰি</string>\n    <string name=\"action_start_download_externally\">বাহ্যিক ডাউনলোডাৰ ব্যৱহাৰ কৰক</string>\n    <string name=\"action_start_download_internally\">অভ্যন্তৰীণ ডাউনলোডাৰ ব্যৱহাৰ কৰক</string>\n    <string name=\"pref_bottom_nav_style\">তলৰ নেভিগেশ্যন শৈলী</string>\n    <string name=\"pref_default_home_tab_library\">আৰম্ভণি পৰ্দা মাঙ্গা টেবত স্থাপন কৰক</string>\n    <string name=\"default_manga_category\">ডিফল্ট মাঙ্গা শ্ৰেণী</string>\n    <string name=\"default_anime_category\">ডিফল্ট এনিমে শ্ৰেণী</string>\n    <string name=\"pref_manga_library_update_categories_details\">বাদ দিয়া শ্ৰেণীত থকা মাঙ্গা, অন্তৰ্ভুক্ত শ্ৰেণীত থাকিলেও আপডেট নহ’ব।</string>\n    <string name=\"pref_anime_library_update_categories_details\">বাদ দিয়া শ্ৰেণীত থকা এনিমে, অন্তৰ্ভুক্ত শ্ৰেণীত থাকিলেও আপডেট নহ’ব।</string>\n    <string name=\"unofficial_extension_message_aniyomi\">এই এক্সটেনশ্যন আনুষ্ঠানিক তালিকাৰ পৰা নহয়।</string>\n    <string name=\"unofficial_anime_extension_message\">এই এনিমে এক্সটেনশ্যন আনুষ্ঠানিক তালিকাৰ পৰা নহয়।</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">বাদ দিয়া মাঙ্গা শ্ৰেণী</string>\n    <string name=\"pref_remove_exclude_categories_anime\">বাদ দিয়া এনিমে শ্ৰেণী</string>\n    <string name=\"pref_category_external_downloader\">বাহ্যিক ডাউনলোডাৰ</string>\n    <string name=\"pref_use_external_downloader\">এনিমেৰ বাবে সদায় বাহ্যিক ডাউনলোডাৰ ব্যৱহাৰ কৰক</string>\n    <string name=\"pref_external_downloader_selection\">ডাউনলোডাৰ এপৰ পছন্দ</string>\n    <string name=\"pref_download_new_episodes\">নতুন পৰ্ব ডাউনলোড কৰক</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">দেখা পৰ্বৰ পুনৰাবৃত্তি ডাউনলোড এৰি দিয়ক</string>\n    <string name=\"auto_download_while_watching\">চোৱাৰ সময়ত স্বয়ংক্ৰিয় ডাউনলোড</string>\n    <string name=\"download_ahead_info_anime\">কেৱল গ্ৰন্থাগাৰৰ প্ৰৱেশত কাম কৰে আৰু যদি বৰ্তমানৰ পৰ্ব আৰু পৰৱৰ্তী পৰ্ব ইতিমধ্যে ডাউনলোড কৰা হৈছে</string>\n    <string name=\"pref_track_on_add_library\">গ্ৰন্থাগাৰত যোগ কৰোঁতে ট্ৰেক মেনু খোলক</string>\n    <string name=\"pref_show_next_episode_airing_time\">পৰৱৰ্তী পৰ্বৰ প্ৰচাৰৰ সময় দেখুৱাওক</string>\n    <string name=\"pref_backup_flags_summary\">বেকআপ ফাইলত কি তথ্য অন্তৰ্ভুক্ত কৰিব</string>\n    <string name=\"pref_anime_storage_usage\">এনিমেৰ সঞ্চয় ব্যৱহাৰ</string>\n    <string name=\"pref_manga_storage_usage\">মাঙ্গাৰ সঞ্চয় ব্যৱহাৰ</string>\n    <string name=\"used_cache_both\">এনিমেৰ দ্বাৰা ব্যৱহৃত: %1$s, মাঙ্গাৰ দ্বাৰা ব্যৱহৃত: %2$s</string>\n    <string name=\"pref_clear_manga_database\">মাঙ্গাৰ ডেটাবেছ খালি কৰক</string>\n    <string name=\"pref_clear_anime_database\">এনিমেৰ ডেটাবেছ খালি কৰক</string>\n    <string name=\"pref_clear_manga_database_summary\">গ্ৰন্থাগাৰত সাঁচি নথকা মাঙ্গাৰ ইতিহাস মচক</string>\n    <string name=\"pref_clear_anime_database_summary\">গ্ৰন্থাগাৰত সাঁচি নথকা এনিমেৰ ইতিহাস মচক</string>\n    <string name=\"anime_from_library\">গ্ৰন্থাগাৰৰ পৰা এনিমে</string>\n    <string name=\"downloaded_episodes\">ডাউনলোড কৰা পৰ্ব</string>\n    <string name=\"local_manga_source\">স্থানীয় মাঙ্গাৰ উৎস</string>\n    <string name=\"local_anime_source\">স্থানীয় এনিমেৰ উৎস</string>\n    <string name=\"episode_not_found\">পৰ্বটো বিচাৰি পোৱা নগ’ল</string>\n    <string name=\"local_invalid_episode_format\">অবৈধ পৰ্বৰ ফৰ্মেট</string>\n    <string name=\"unknown_studio\">অজ্ঞাত ষ্টুডিঅ’</string>\n    <string name=\"delete_confirmation\">আপুনি নিশ্চিত নেকি যে %s মচিব বিচাৰে?</string>\n    <string name=\"delete_downloads_for_anime\">ডাউনলোড কৰা পৰ্ব মচিবনে?</string>\n    <string name=\"snack_add_to_manga_library\">মাঙ্গা গ্ৰন্থাগাৰত যোগ কৰিবনে?</string>\n    <string name=\"snack_add_to_anime_library\">এনিমে গ্ৰন্থাগাৰত যোগ কৰিবনে?</string>\n    <string name=\"display_mode_episode\">পৰ্ব %1$s</string>\n    <string name=\"episode_downloading_progress\">ডাউনলোড হৈছে (%d%%)</string>\n    <string name=\"download_error\">ত্ৰুটি</string>\n    <string name=\"download_paused\">ৰখোৱা হৈছে</string>\n    <string name=\"show_episode_number\">পৰ্বৰ সংখ্যা</string>\n    <string name=\"sort_by_episode_number\">পৰ্বৰ সংখ্যা অনুসৰি</string>\n    <string name=\"download_unseen\">নদেখা</string>\n    <string name=\"confirm_delete_episodes\">আপুনি নিশ্চিত নেকি যে নিৰ্বাচিত পৰ্বসমূহ মচিব বিচাৰে?</string>\n    <string name=\"also_set_episode_settings_for_library\">মোৰ গ্ৰন্থাগাৰৰ সকলো এনিমেৰ বাবেও প্ৰয়োগ কৰক</string>\n    <string name=\"no_episodes_error\">কোনো পৰ্ব পোৱা নগ’ল</string>\n    <string name=\"watching\">চাই আছে</string>\n    <string name=\"currently_reading\">বৰ্তমান পঢ়ি আছে</string>\n    <string name=\"currently_watching\">বৰ্তমান চাই আছে</string>\n    <string name=\"plan_to_watch\">চাবলৈ পৰিকল্পনা</string>\n    <string name=\"not_interesting\">আকৰ্ষণীয় নহয়</string>\n    <string name=\"want_to_read\">পঢ়িব বিচাৰে</string>\n    <string name=\"want_to_watch\">চাবলৈ বিচাৰে</string>\n    <string name=\"repeating_anime\">পুনৰ চোৱা</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">এই পৰ্বৰ চোৱাৰ তাৰিখ মচি পেলাব। আপুনি নিশ্চিত নেকি?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">এই এনিমেৰ সকলো পৰ্ব পুনৰ স্থাপন কৰক</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">অগ্ৰগতি: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">অগ্ৰগতি: %1$s</string>\n    <string name=\"recent_anime_time\">পৰ্ব %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">কোনো ভিডিঅ’ পোৱা নগ’ল</string>\n    <string name=\"notification_new_episodes\">নতুন পৰ্ব পোৱা গৈছে</string>\n    <string name=\"information_no_recent_anime\">সম্প্ৰতি কিবা চোৱা হোৱা নাই</string>\n    <string name=\"episode_settings_updated\">ডিফল্ট পৰ্বৰ সংহতি আপডেট কৰা হৈছে</string>\n    <string name=\"download_notifier_download_paused_chapters\">অধ্যায়ৰ ডাউনলোড ৰখোৱা হৈছে</string>\n    <string name=\"download_notifier_download_paused_episodes\">পৰ্বৰ ডাউনলোড ৰখোৱা হৈছে</string>\n    <string name=\"channel_new_chapters_episodes\">অধ্যায়/পৰ্বৰ আপডেট</string>\n    <string name=\"label_storage\">সঞ্চয়</string>\n    <string name=\"label_history\">মাঙ্গা</string>\n    <string name=\"label_anime_history\">এনিমে</string>\n    <string name=\"label_updates\">মাঙ্গা</string>\n    <string name=\"label_anime_updates\">এনিমে</string>\n    <string name=\"action_change_intro_length\">ইন্ট্ৰ’ৰ দৈৰ্ঘ্য সলনি কৰক</string>\n    <string name=\"notification_episodes_single\">পৰ্ব %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">পৰ্ব %1$s আৰু %2$d অধিক</string>\n    <string name=\"notification_episodes_multiple\">পৰ্বসমূহ %1$s</string>\n    <string name=\"episode_settings\">পৰ্বৰ সংহতি</string>\n    <string name=\"pref_backup_flags\">বেকআপৰ বিকল্প</string>\n    <string name=\"label_manga_extensions\">মাঙ্গাৰ এক্সটেনশ্যন</string>\n    <string name=\"label_anime_extensions\">এনিমেৰ এক্সটেনশ্যন</string>\n    <string name=\"label_migration_manga\">মাঙ্গা স্থানান্তৰ</string>\n    <string name=\"label_migration_anime\">এনিমে স্থানান্তৰ</string>\n    <string name=\"settings\">সংহতি</string>\n    <string name=\"copied_video_link_to_clipboard\">ভিডিঅ’ৰ গুণমানৰ লিংক ক্লিপব’ৰ্ডত কপি কৰা হৈছে</string>\n    <string name=\"choose_video_quality\">ভিডিঅ’ৰ গুণমান বাছক:</string>\n    <string name=\"extension_settings\">এক্সটেনশ্যনৰ সংহতি</string>\n    <string name=\"theme_cottoncandy\">কটন কেণ্ডি</string>\n    <string name=\"theme_mocha\">ম’কা</string>\n    <string name=\"pref_episode_swipe_end\">সোঁৱৰণৰ সোঁ দিশৰ কাৰ্য</string>\n    <string name=\"pref_episode_swipe_start\">সোঁৱৰণৰ বাওঁ দিশৰ কাৰ্য</string>\n    <string name=\"pref_category_hide_hidden\">শ্ৰেণী আৰু সঞ্চয় পৰ্দাৰ পৰা লুকুৱা শ্ৰেণী লুকুৱাওক</string>\n    <string name=\"pref_update_anime_release_grace_period\">প্ৰত্যাশিত এনিমে মুক্তিৰ অনুমোদন সময়</string>\n    <string name=\"data_saver_exclude\">ডাটা সঞ্চয়কাৰীৰ পৰা বাদ দিয়ক</string>\n    <string name=\"data_saver_stop_exclude\">ডাটা সঞ্চয়কাৰীৰ পৰা বাদ দিয়া বন্ধ কৰক</string>\n    <string name=\"data_saver\">ডাটা সঞ্চয়কাৰী</string>\n    <string name=\"data_saver_summary\">ডাউনলোড বা পঢ়াৰ সময়ত ছবি সংকোচন কৰক</string>\n    <string name=\"data_saver_downloader\">ডাউনলোডাৰত ডাটা সঞ্চয়কাৰী ব্যৱহাৰ কৰক</string>\n    <string name=\"data_saver_ignore_jpeg\">JPEG ছবি উপেক্ষা কৰক</string>\n    <string name=\"data_saver_ignore_gif\">GIF এনিমেশ্যন উপেক্ষা কৰক</string>\n    <string name=\"data_saver_image_quality\">ছবিৰ গুণমান</string>\n    <string name=\"data_saver_image_quality_summary\">উচ্চ মান মানে ছবিৰ গুণমানৰ অধিক শতাংশ সাঁচি থোৱা হয়, কিন্তু ফাইলৰ আকাৰো বাঢ়ে, ৮০ শতাংশ ফাইলৰ আকাৰ আৰু ছবিৰ গুণমানৰ মাজত এক ভাল মধ্যমান</string>\n    <string name=\"data_saver_image_format\">JPEG-লৈ সংকোচন কৰক</string>\n    <string name=\"data_saver_image_format_summary_on\">JPEG ফাইলৰ আকাৰ WebPতকৈ যথেষ্ট সৰু (অধিক ডাটা সঞ্চয় হয়), কিন্তু ছবিৰ গুণমানো অধিক হেৰায়।\\nবৰ্তমান JPEG-লৈ সংকোচন কৰা হৈছে</string>\n    <string name=\"data_saver_image_format_summary_off\">JPEG ফাইলৰ আকাৰ WebPতকৈ যথেষ্ট সৰু (অধিক ডাটা সঞ্চয় হয়), কিন্তু ছবিৰ গুণমানো অধিক হেৰায়।\\nবৰ্তমান WebP-লৈ সংকোচন কৰা হৈছে</string>\n    <string name=\"data_saver_color_bw\">ক’লা আৰু বগাৰ বাবে ৰূপান্তৰ কৰক</string>\n    <string name=\"bandwidth_hero\">বেণ্ডউইড্থ হিৰ’ (বেণ্ডউইড্থ হিৰ’ প্ৰক্সি ছাৰ্ভাৰৰ প্ৰয়োজন)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">বেণ্ডউইড্থ হিৰ’ প্ৰক্সি ছাৰ্ভাৰ</string>\n    <string name=\"data_saver_server_summary\">বেণ্ডউইড্থ হিৰ’ প্ৰক্সি ছাৰ্ভাৰৰ URL ইয়াত দিয়ক</string>\n    <string name=\"download_slots_info\">কেৱল আত্ম-হ’ষ্টেড বা মিটাৰ নথকা উৎসৰ পৰা একে সময়ত ডাউনলোড কৰিব</string>\n    <string name=\"unseen\">নদেখা</string>\n    <string name=\"label_manga_extension_repos\">মাঙ্গাৰ এক্সটেনশ্যন ৰেপ’</string>\n    <string name=\"label_anime_extension_repos\">এনিমেৰ এক্সটেনশ্যন ৰেপ’</string>\n    <string name=\"onboarding_storage_action_create_folder\">ডিফল্ট Aniyomi ফ’ল্ডাৰ সৃষ্টি কৰক</string>\n    <string name=\"download_speed_limit\">অধ্যায় ডাউনলোডৰ গতি সীমা</string>\n    <string name=\"download_speed_limit_hint\">গতিৰ সীমা অক্ষম কৰিবলৈ ০ ত স্থাপন কৰক।</string>\n    <string name=\"action_display_unseen_badge\">নদেখা এপিচোড</string>\n    <string name=\"action_stop\">থমক</string>\n    <string name=\"action_continue\">চালাই যাওক</string>\n    <string name=\"manga\">মান্গা</string>\n    <string name=\"pref_behavior\">অধ্যায়ৰ আচৰণ</string>\n    <string name=\"action_add_repo_message\">%s\\'ত অতিৰিক্ত ৰেপ’ যোগ কৰক। এইটো এটা URL হ’ব লাগে যি \\\"index.min.json\\\"ৰে শেষ হয়।</string>\n    <string name=\"download_ahead_info\">শুধুমাত্ৰ তেতিয়া কাম কৰিব যদি বৰ্তমান চেপ্টাৰ/এপিচ\\'ড + পৰৱৰ্তীটো ইতিমধ্যে ডাউনলোড কৰা থাকে।</string>\n    <string name=\"non_library_settings\">সকলো পঢ়া/পৰিসমাপ্ত দ্ৰব্য</string>\n    <string name=\"action_sort_last_manga_update\">শেষ মাঙ্গা আপডেট</string>\n    <string name=\"action_show_manga\">মাঙ্গা দেখুৱাওক</string>\n    <string name=\"action_display_show_continue_reading_button\">চলোৱা/পঢ়া বুটাম</string>\n    <string name=\"pref_update_only_completely_read\">অদেখা এপিচ\\'ড(ছ)/অপঢ়া অধ্যায়(সমূহ) থকা প্ৰৱেশসমূহ এৰাইচোন</string>\n    <string name=\"pref_category_delete_chapters\">অধ্যায়/এপিছোড মচি পেলাওক</string>\n    <string name=\"pref_remove_after_marked_as_read\">হাতৰ দ্বাৰা পঢ়া/দেখা হিচাপে চিহ্নিত কৰাৰ পাছত</string>\n    <string name=\"pref_remove_after_read\">পঢ়া/দেখাৰ পাছত স্বয়ংক্ৰিয়ভাৱে মচি পেলাওক</string>\n    <string name=\"pref_remove_bookmarked_chapters\">বুকমাৰ্ক কৰা অধ্যায়/এপিছোড মচিবলৈ অনুমতি দিয়ক</string>\n    <string name=\"pref_auto_update_manga_sync\">পঢ়াৰ/দেখাৰ পাছত অগ্ৰগতি আপডেট কৰক</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">পঢ়া/পৰিসমাপ্ত চিহ্নিত কৰিলে অগ্ৰগতি আপডেট কৰক</string>\n    <string name=\"pref_clear_chapter_cache\">অধ্যায় আৰু এপিছোড কেচ ক্লিয়াৰ কৰক</string>\n    <string name=\"pref_auto_clear_chapter_cache\">অ্যাপ খোলাৰ সময়ত এপিছোড/অধ্যায় কেচ ক্লিয়াৰ কৰক</string>\n    <string name=\"clear_database_confirmation\">আপোনাৰ নিশ্চিত? সম্পূৰ্ণ হোৱা এপিছোড আৰু অধ্যায় আৰু পুথিভঁৰালত নথকা প্রবৃদ্ধি হেৰুৱা যাব</string>\n    <string name=\"pref_incognito_mode_summary\">আপোনাৰ ইতিহাস অস্থায়ীভাবে ৰখে</string>\n    <string name=\"manga_from_library\">পুথিভঁৰালৰ পৰা মাঙ্গা</string>\n    <string name=\"also_set_chapter_settings_for_library\">মোৰ পুথিভঁৰালৰ সকলো মাঙ্গাৰ বাবেো প্ৰযোজ্য কৰক</string>\n    <string name=\"dialog_with_checkbox_reset\">এই মাংগাৰ সকলো অধ্যায় ৰিছেট কৰক</string>\n    <string name=\"download_insufficient_space\">নিৰ্ধাৰিত স্থলাভাবে ডাউনলোড কৰিব পৰা নগ\\'ল</string>\n    <string name=\"download_queue_size_warning\">সতর্কতা: বৃহৎ মাচৰ ডাউনলোডে উৎসবোৰ ধীৰ আৰু/অথবা Aniyomi বন্ধ কৰিব পাৰে। অধিক জানিবলৈ টেপ কৰক।</string>\n    <string name=\"pref_invalidate_download_cache_summary\">এপ্লিকেচনক ডাউনলোড কৰা অধ্যায় আৰু এপিচ\\'ড পুনৰ পৰীক্ষা কৰিবলৈ মন্না কৰক</string>\n    <string name=\"label_player\">খেলোৱা</string>\n    <string name=\"pref_player_settings_summary\">অভ্যন্তৰীণ প্লেয়াৰ, অঙ্গভঙ্গি, ডিক’ডাৰ, ছাবটাইটেল</string>\n    <string name=\"pref_hosters\">হ’ষ্টাৰ</string>\n    <string name=\"pref_hosters_show_failure\">বিফল হ’ষ্টাৰ প্ৰদৰ্শন কৰক</string>\n    <string name=\"pref_hosters_show_empty\">খালী হ’ষ্টাৰ প্ৰদৰ্শন কৰক</string>\n    <string name=\"pref_category_intro_skip\">ইন্ট্ৰ’ এৰি দিয়া</string>\n    <string name=\"pref_enable_intro_skip\">ইন্ট্ৰ’ এৰি দিয়া সক্ৰিয় কৰক</string>\n    <string name=\"pref_disable_aniskip_chapter\">ভিডিঅ’ত ইতিমধ্যে অধ্যায় থাকিলে এনিস্কিপ অক্ষম কৰক</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">অবৈধ ক’ড: %s</string>\n    <string name=\"pref_player_editor\">স্ক্ৰিপ্ট সম্পাদক</string>\n    <string name=\"pref_player_editor_summary\">নতুন স্ক্ৰিপ্ট আৰু স্ক্ৰিপ্ট বিকল্প সম্পাদনা আৰু সৃষ্টি কৰক</string>\n    <string name=\"pref_player_editor_script\">স্ক্ৰিপ্টসমূহ</string>\n    <string name=\"pref_player_editor_script_opts\">স্ক্ৰিপ্ট বিকল্পসমূহ</string>\n    <string name=\"pref_player_no_items\">ডাইৰেক্টৰিত কোনো আইটেম নাই। নতুন ফাইল যোগ কৰিবলৈ প্লাছ বাটনত টিপক।</string>\n    <string name=\"editor_unsaved_progress\">আপোনাৰ সাঁচি নথকা পৰিবৰ্তন আছে। আপুনি তথাপিও পিছলৈ যাব বিচাৰে নেকি?</string>\n    <string name=\"editor_save_error\">ফাইল সাঁচিব পৰা নগ’ল</string>\n    <string name=\"editor_save_success\">ফাইল সাঁচি থোৱা হ’ল</string>\n    <string name=\"editor_action_rename\">ফাইলৰ নাম সলনি কৰক</string>\n    <string name=\"editor_action_delete\">ফাইল মচক</string>\n    <string name=\"editor_file_already_exists\">ফাইল ইতিমধ্যে আছে</string>\n    <string name=\"editor_invalid_filename\">অবৈধ ফাইলৰ নাম</string>\n    <string name=\"editor_create_file\">ফাইল সৃষ্টি কৰক</string>\n    <string name=\"editor_edit_file\">ফাইলৰ নাম সম্পাদনা কৰক</string>\n    <string name=\"editor_filename\">ফাইলৰ নাম</string>\n    <string name=\"editor_create_error\">ফাইল সৃষ্টি কৰিব পৰা নগ’ল</string>\n    <string name=\"editor_rename_error\">ফাইলৰ নাম সলনি কৰিব পৰা নগ’ল</string>\n    <string name=\"editor_delete_error\">ফাইল মচিব পৰা নগ’ল</string>\n    <string name=\"editor_delete_file\">ফাইল মচক</string>\n    <string name=\"editor_delete_file_confirmation\">আপুনি নিশ্চিতভাৱে %s ফাইল মচিব বিচাৰে নেকি?</string>\n    <string name=\"pref_mpv_user_files\">ব্যৱহাৰকাৰীৰ MPV ফাইল ব্যৱহাৰ কৰক</string>\n    <string name=\"pref_mpv_user_files_summary\">mpv-config ডাইৰেক্টৰিত থকা ফাইলসমূহ ব্যৱহাৰ কৰক</string>\n    <string name=\"player_skip_action\">%1$s এৰি দিয়ক</string>\n    <string name=\"player_intro_skipped\">%1$s এৰি দিয়া হ’ল</string>\n    <string name=\"player_chapter_type_opening\">আৰম্ভণি</string>\n    <string name=\"player_chapter_type_ending\">শেষ</string>\n    <string name=\"player_chapter_type_recap\">পুনৰাবৃত্তি</string>\n    <string name=\"player_chapter_type_mixedop\">মিশ্ৰিত আৰম্ভণি</string>\n    <string name=\"no_available_videos\">কোনো ভিডিঅ’ উপলব্ধ নাই</string>\n    <string name=\"no_hosters\">হ’ষ্টাৰৰ তালিকা খালী</string>\n    <string name=\"no_episode_loaded\">কোনো এপিচ’ড ল’ড হোৱা নাই</string>\n    <string name=\"select_hoster_from_empty_list\">খালী তালিকাৰ পৰা হ’ষ্টাৰ নিৰ্বাচিত</string>\n    <string name=\"player_sheets_track_delay\">বিলম্ব</string>\n    <string name=\"player_sheets_track_palette\">পেলেট</string>\n    <string name=\"player_hoster_tap_to_load\">ভিডিঅ’ ল’ড কৰিবলৈ টিপক</string>\n    <string name=\"player_hoster_failed\">ভিডিঅ’ ল’ড কৰাত বিফল</string>\n    <string name=\"player_sheets_qualities_title\">গুণমান</string>\n    <string name=\"player_sheets_chapters_title\">অধ্যায়সমূহ</string>\n    <string name=\"type\">প্ৰকাৰ</string>\n    <string name=\"pref_behavior_episode\">এপিচ’ডৰ আচৰণ</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">ডুপ্লিকেট দেখা এপিচ’ডক দেখা বুলি চিহ্নিত কৰক</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">এপিচ’ড চোৱাৰ পিছত</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">নতুন এপিচ’ড আনাৰ পিছত</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/base/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"relative_time_hours\">\n        <item quantity=\"one\">1 hour ago</item>\n        <item quantity=\"other\">%1$d hours ago</item>\n    </plurals>\n    <plurals name=\"relative_time_minutes\">\n        <item quantity=\"one\">1 minute ago</item>\n        <item quantity=\"other\">%1$d minutes ago</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time_hours\">\n        <item quantity=\"one\">In 1 hour</item>\n        <item quantity=\"other\">In %1$d hours</item>\n    </plurals>\n    <plurals name=\"upcoming_relative_time_minutes\">\n        <item quantity=\"one\">In 1 minute</item>\n        <item quantity=\"other\">In %1$d minutes</item>\n    </plurals>\n    <plurals name=\"missing_items\">\n        <item quantity=\"one\">Missing %1$s item</item>\n        <item quantity=\"other\">Missing %1$s items</item>\n    </plurals>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Next unseen episode</item>\n        <item quantity=\"other\">Next %d unseen episodes</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s episode</item>\n        <item quantity=\"other\">%1$s episodes</item>\n    </plurals>\n    <plurals name=\"anime_num_seasons\">\n        <item quantity=\"one\">%d season</item>\n        <item quantity=\"other\">%d seasons</item>\n    </plurals>\n    <plurals name=\"anime_num_entries\">\n        <item quantity=\"one\">%d entry</item>\n        <item quantity=\"other\">%d entries</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Next episode</item>\n        <item quantity=\"other\">Next %d episodes</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">For %d title</item>\n        <item quantity=\"other\">For %d titles</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">%d new episode</item>\n        <item quantity=\"other\">%1$d new episodes</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d second</item>\n        <item quantity=\"other\">%d seconds</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Episodes %1$s and %2$d more</item>\n        <item quantity=\"other\">Episodes %1$s and %2$d more</item>\n    </plurals>\n    <plurals name=\"hoster_video_count\">\n        <item quantity=\"one\">%d video</item>\n        <item quantity=\"other\">%d videos</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/base/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Generic strings -->\n    <string name=\"confirm_exit\">Enable Horizontal Seek</string>\n    <string name=\"action_filter_started\">Started</string>\n    <string name=\"action_sort_airing_time\">Airing time</string>\n    <string name=\"action_display_unseen_badge\">Unseen episodes</string>\n    <string name=\"action_reorganize_by\">Reorder</string>\n    <string name=\"relative_time_now\">Now</string>\n    <string name=\"action_stop\">Stop</string>\n    <string name=\"action_continue\">Continue</string>\n    <!-- Changed from mihon -->\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_library_summary\">Categories, global update, chapter/episode swipe</string>\n    <string name=\"pref_behavior\">Chapter behavior</string>\n    <string name=\"action_add_repo_message\">Add additional repos to %s. This should be a URL that ends with \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Only works if the current chapter/episode + the next one are already downloaded.</string>\n    <string name=\"non_library_settings\">All read/watched entries</string>\n    <string name=\"action_sort_last_manga_update\">Last manga update</string>\n    <string name=\"action_show_manga\">Show manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Continue watching/reading button</string>\n    <string name=\"pref_update_only_completely_read\">Skip entries with unseen episode(s)/unread chapter(s)</string>\n    <string name=\"pref_library_update_show_tab_badge\">Show unseen/unread count on Updates icon</string>\n    <string name=\"pref_category_delete_chapters\">Delete chapters/episodes</string>\n    <string name=\"pref_remove_after_marked_as_read\">After manually marked as read/watched</string>\n    <string name=\"pref_remove_after_read\">After reading/watching automatically delete</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Allow deleting bookmarked chapters/episodes</string>\n    <string name=\"pref_auto_update_manga_sync\">Update progress after reading/watching</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Update progress when marked as read/watched</string>\n    <string name=\"pref_clear_chapter_cache\">Clear chapter and episode cache</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Clear episode/chapter cache on app launch</string>\n    <string name=\"clear_database_confirmation\">Are you sure? Completed episodes and chapters and progress of non-library entries will be lost</string>\n    <string name=\"pref_incognito_mode_summary\">Pauses your history</string>\n    <string name=\"manga_from_library\">Manga from library</string>\n    <string name=\"also_set_chapter_settings_for_library\">Also apply to all manga in my library</string>\n    <string name=\"dialog_with_checkbox_reset\">Reset all chapters for this manga</string>\n    <string name=\"download_insufficient_space\">Couldn\\'t download due to low storage space</string>\n    <string name=\"download_queue_size_warning\">Warning: large bulk downloads may lead to sources becoming slower and/or blocking Aniyomi. Tap to learn more.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Force app to recheck downloaded chapters and episodes</string>\n    <!-- Player settings -->\n    <string name=\"label_player_settings\">Player settings</string>\n    <string name=\"label_player\">Player</string>\n    <string name=\"action_search_player_settings\">Search player settings</string>\n    <string name=\"pref_player_settings_summary\">Internal player, gestures, decoders, subtitles</string>\n    <!-- Player settings - internal player -->\n    <string name=\"pref_player_internal\">Internal player</string>\n    <string name=\"pref_player_internal_summary\">Progress, controls, orientation</string>\n    <string name=\"pref_progress_mark_as_seen\">At what point to mark the episode as seen</string>\n    <string name=\"pref_progress_70\" translatable=\"false\">70%</string>\n    <string name=\"pref_progress_75\" translatable=\"false\">75%</string>\n    <string name=\"pref_progress_80\" translatable=\"false\">80%</string>\n    <string name=\"pref_progress_85\" translatable=\"false\">85%</string>\n    <string name=\"pref_progress_90\" translatable=\"false\">90%</string>\n    <string name=\"pref_progress_95\" translatable=\"false\">95%</string>\n    <string name=\"pref_progress_100\" translatable=\"false\">100%</string>\n    <string name=\"pref_preserve_watching_position\">Preserve watch position on seen episodes</string>\n    <string name=\"pref_category_player_orientation\">Orientation</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Reverse landscape</string>\n    <string name=\"rotation_sensor_portrait\">Sensor portrait</string>\n    <string name=\"rotation_sensor_landscape\">Sensor landscape</string>\n    <string name=\"pref_category_controls\">Controls</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Allow gesture in panels</string>\n    <string name=\"pref_controls_show_loading\">Show loading circle</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Show current chapter indicator</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Only appears if the video has chapters</string>\n    <string name=\"pref_controls_display_volume_percentage\">Display volume as percentage</string>\n    <string name=\"pref_remember_brightness\">Remember and switch to the last used brightness</string>\n    <string name=\"pref_remember_volume\">Remember and switch to the last used volume</string>\n    <string name=\"pref_hosters\">Hosters</string>\n    <string name=\"pref_hosters_show_failure\">Display failed hosters</string>\n    <string name=\"pref_hosters_show_empty\">Display empty hosters</string>\n    <string name=\"pref_player_fullscreen\">Show content in display cutout</string>\n    <string name=\"pref_player_hide_controls\">Hide player controls when opening the player</string>\n    <string name=\"pref_show_system_bar\">Show system status bar with controls</string>\n    <string name=\"pref_reduce_motion\">Reduce player animation</string>\n    <string name=\"pref_player_time_to_disappear\">Hide player controls time</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Panel opacity</string>\n    <string name=\"pref_category_intro_skip\">Intro skip</string>\n    <string name=\"pref_enable_intro_skip\">Enable intro skip</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Enable auto skip</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Enable Netflix style</string>\n    <string name=\"pref_waiting_time_aniskip\">Button timeout</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 seconds</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 seconds</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 seconds</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 seconds</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 seconds</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 seconds</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip requires the anime to be tracked with MAL or Anilist to work</string>\n    <string name=\"pref_enable_aniskip\">Enable AniSkip</string>\n    <string name=\"pref_disable_aniskip_chapter\">Disable AniSkip if video already contains chapters</string>\n    <string name=\"pref_category_pip\">Picture-in-Picture (PiP)</string>\n    <string name=\"pref_enable_pip\">Enable the use of PiP mode</string>\n    <string name=\"pref_pip_episode_toasts\">Show episode toasts when switching episodes in PiP mode</string>\n    <string name=\"pref_pip_on_exit\">Automatically switch to PiP mode on exiting the player</string>\n    <string name=\"pref_pip_replace_with_previous\">Replaces the \"Skip 10 seconds\" option with \"Previous episode\"</string>\n    <string name=\"pref_category_external_player\">External player</string>\n    <string name=\"pref_always_use_external_player\">Always use external player</string>\n    <string name=\"pref_external_player_preference\">External player preference</string>\n    <!-- Player Settings - Gestures -->\n    <string name=\"pref_player_gestures\">Gestures</string>\n    <string name=\"pref_player_gestures_summary\">Seeking, double tap, media controls</string>\n    <string name=\"pref_category_player_sliders\">Sliders</string>\n    <string name=\"enable_volume_brightness_gestures\">Enable Volume and Brightness Gestures</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Swap volume and brightness slider</string>\n    <string name=\"pref_category_player_seeking\">Seeking</string>\n    <string name=\"enable_horizontal_seek_gesture\">Enable Horizontal Seek Gesture</string>\n    <string name=\"enable_horizontal_seek_gesture_summary\">Swipe left or right to rewind or fast-forward</string>\n    <string name=\"pref_show_seekbar\">Show seekbar when seeking</string>\n    <string name=\"pref_default_intro_length\">Default skip intro length</string>\n    <string name=\"pref_intro_length\">Skip intro length</string>\n    <string name=\"pref_skip_length\">Double tap to skip length</string>\n    <string name=\"pref_skip_30\" translatable=\"false\">30s</string>\n    <string name=\"pref_skip_20\" translatable=\"false\">20s</string>\n    <string name=\"pref_skip_10\" translatable=\"false\">10s</string>\n    <string name=\"pref_skip_5\" translatable=\"false\">5s</string>\n    <string name=\"pref_skip_3\" translatable=\"false\">3s</string>\n    <string name=\"pref_skip_disable\">Disable</string>\n    <string name=\"pref_player_smooth_seek\">Enable precise seeking</string>\n    <string name=\"pref_player_smooth_seek_summary\">When enabled, seeking will not focus on keyframes, leading to slower but precise seeking</string>\n    <string name=\"pref_category_double_tap\">Double tap</string>\n    <string name=\"pref_left_double_tap\">Double tap (left)</string>\n    <string name=\"pref_center_double_tap\">Double tap (center)</string>\n    <string name=\"pref_right_double_tap\">Double tap (right)</string>\n    <string name=\"pref_double_tap_info\">When a tap gesture is set to \"Custom\", it can be bound through input.conf. The key codes are 0x10001 for left, 0x10002 for center, and 0x10003 for right.</string>\n    <string name=\"single_action_none\">None</string>\n    <string name=\"single_action_seek\">Seek</string>\n    <string name=\"single_action_playpause\">Play/Pause</string>\n    <string name=\"single_action_switch\">Change episode</string>\n    <string name=\"single_action_custom\">Custom</string>\n    <string name=\"pref_category_media_controls\">Media controls</string>\n    <string name=\"pref_media_previous\">Previous</string>\n    <string name=\"pref_media_playpause\">Play/Pause</string>\n    <string name=\"pref_media_next\">Next</string>\n    <string name=\"pref_media_info\">When a media control is set to \"Custom\", it can be bound through input.conf. The key codes are 0x10004 for previous, 0x10005 for play/pause, and 0x10006 for next.</string>\n    <!-- Player Settings - Decoder -->\n    <string name=\"pref_player_decoder\">Decoder</string>\n    <string name=\"pref_player_decoder_summary\">Hardware decoding, pixel format, debanding</string>\n    <string name=\"pref_try_hw\">Try hardware decoding</string>\n    <string name=\"pref_gpu_next_title\">Enable gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">A new video rendering backend</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">None</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Use YUV420P pixel format</string>\n    <string name=\"pref_use_yuv420p_subtitle\">May fix black screens on some video codecs, can also improve performance at the cost of quality</string>\n    <!-- Player settings - Subtitles -->\n    <string name=\"pref_player_subtitle\">Subtitles</string>\n    <string name=\"pref_player_subtitle_summary\">Preferred languages, whitelist, blacklist</string>\n    <string name=\"pref_player_subtitle_lang\">Preferred languages</string>\n    <string name=\"pref_player_subtitle_lang_info\">Subtitle language(s) to be selected by default on a video with multiple subtitles, Two- or three-letter languages codes work. Multiple values can be delimited by a comma.</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Invalid code: \\\"%s\\\"</string>\n    <string name=\"pref_player_subtitle_whitelist\">Whitelist</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Whitelist for subtitles. If a whitelist is defined, the first subtitle that contains a whitelisted word will be used. Multiple values can be delimited by a comma.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Blacklist</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Blacklist for subtitles. If a blacklist is defined, all subtitles that contains a blacklisted word will be filtered out. Multiple values can be delimited by a comma.</string>\n    <!-- Player settings - Audio -->\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Preferred languages, pitch correction, audio channels</string>\n    <string name=\"pref_player_audio_lang\">Preferred languages</string>\n    <string name=\"pref_player_audio_lang_info\">Audio language(s) to be selected by default on a video with multiple audio streams, Two- or three-letter languages codes work. Multiple values can be delimited by a comma.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Enable audio pitch correction</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Prevents the audio from becoming high-pitched at faster speeds and low-pitched at slower speeds</string>\n    <string name=\"pref_player_audio_channels\">Audio channels</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Auto-safe</string>\n    <string name=\"pref_player_audio_channels_auto\">Auto</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Reverse stereo</string>\n    <string name=\"pref_player_audio_boost_cap\">Volume boost cap</string>\n    <!-- Player settings - Custom Buttons -->\n    <string name=\"pref_player_custom_button\">Custom buttons</string>\n    <string name=\"pref_player_custom_button_summary\">Execute lua code with custom buttons</string>\n    <string name=\"pref_player_custom_button_header\">Edit custom buttons</string>\n    <string name=\"pref_player_custom_button_guide\">Custom buttons guide</string>\n    <string name=\"pref_player_custom_button_empty\">You have no custom buttons. Tap the plus button to create a custom button.</string>\n    <string name=\"pref_player_custom_button_add\">Add button</string>\n    <string name=\"pref_player_custom_button_edit\">Edit button</string>\n    <string name=\"pref_player_custom_button_title\">Title</string>\n    <string name=\"pref_player_custom_button_error_exists\">Button already exists!</string>\n    <string name=\"pref_player_custom_button_content\">Lua code</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua code (on long press)</string>\n    <string name=\"pref_player_custom_button_optional\">(optional)</string>\n    <string name=\"pref_player_custom_button_delete\">Delete button</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Do you wish to delete the button \"%s\"?</string>\n    <string name=\"pref_player_custom_button_startup\">On startup</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <!-- Player settings - Script editor -->\n    <string name=\"pref_player_editor\">Script editor</string>\n    <string name=\"pref_player_editor_summary\">Edit and create new scripts and script options</string>\n    <string name=\"pref_player_editor_script\">Scripts</string>\n    <string name=\"pref_player_editor_script_opts\">Script options</string>\n    <string name=\"pref_player_no_items\">Directory contains no items. Tap the plus button to add a new file.</string>\n    <string name=\"editor_unsaved_progress\">You have unsaved changes. Do you still wish to go back?</string>\n    <string name=\"editor_save_error\">Unable to save file</string>\n    <string name=\"editor_save_success\">File saved</string>\n    <string name=\"editor_action_rename\">Rename file</string>\n    <string name=\"editor_action_delete\">Delete file</string>\n    <string name=\"editor_file_already_exists\">File already exists</string>\n    <string name=\"editor_invalid_filename\">Invalid filename</string>\n    <string name=\"editor_create_file\">Create file</string>\n    <string name=\"editor_edit_file\">Edit filename</string>\n    <string name=\"editor_filename\">Filename</string>\n    <string name=\"editor_create_error\">Unable to create file</string>\n    <string name=\"editor_rename_error\">Unable to rename file</string>\n    <string name=\"editor_delete_error\">Unable to delete file</string>\n    <string name=\"editor_delete_file\">Delete file</string>\n    <string name=\"editor_delete_file_confirmation\">Do you wish to delete the file \\\"%s\\\"?</string>\n    <!-- Player settings - Advanced -->\n    <string name=\"pref_player_advanced\">Advanced</string>\n    <string name=\"pref_player_advanced_summary\">User files, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_user_files\">Use user MPV files</string>\n    <string name=\"pref_mpv_user_files_summary\">Use files in mpv-config directory</string>\n    <string name=\"pref_mpv_conf\">Edit MPV configuration file for further player settings</string>\n    <string name=\"pref_reset_mpv_conf\">Reset MPV configuration file</string>\n    <string name=\"pref_mpv_input\">Edit MPV input file for keyboard mapping configuration</string>\n    <!-- Player -->\n\n    <!-- Player - skip intro button -->\n    <string name=\"player_skip_action\">Skip %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s skipped</string>\n    <string name=\"player_chapter_type_opening\">Opening</string>\n    <string name=\"player_chapter_type_ending\">Ending</string>\n    <string name=\"player_chapter_type_recap\">Recap</string>\n    <string name=\"player_chapter_type_mixedop\">Mixed opening</string>\n    <!-- Player - Bottom left -->\n    <string name=\"player_speed\" translatable=\"false\">%.2fx</string>\n    <!-- Player - Bottom right -->\n    <string name=\"video_fit_screen\">Fit to screen</string>\n    <string name=\"video_crop_screen\">Cropped to screen</string>\n    <string name=\"video_stretch_screen\">Stretched to screen</string>\n    <!-- Other -->\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Sleep timer ended</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Value too big</string>\n    <string name=\"numeric_chooser_value_too_small\">Value too small</string>\n    <string name=\"enable_auto_play\">Auto-play is on</string>\n    <string name=\"disable_auto_play\">Auto-play is off</string>\n    <string name=\"player_aniskip_dontskip\">Don\\'t skip</string>\n    <string name=\"player_aniskip_dontskip_toast\">Skipping %s in %d seconds</string>\n    <string name=\"player_aniskip_skip\">%s skipped</string>\n    <!-- Errors -->\n    <string name=\"no_next_episode\">Next Episode not found!</string>\n    <string name=\"no_prev_episode\">Previous Episode not found!</string>\n    <string name=\"no_available_videos\">No available videos</string>\n    <string name=\"no_hosters\">Hoster list is empty</string>\n    <string name=\"no_episode_loaded\">No episode loaded</string>\n    <string name=\"select_hoster_from_empty_list\">Hoster selected from empty list</string>\n    <!-- Sheets -->\n    <string name=\"player_sheets_delay_set_as_default\">Set as default</string>\n    <string name=\"player_sheets_track_title_w_lang\" translatable=\"false\">#%d: %s (%s)</string>\n    <string name=\"player_sheets_track_title_wo_lang\" translatable=\"false\">#%d: %s</string>\n    <string name=\"player_sheets_track_lang_wo_title\" translatable=\"false\">#%d: %s</string>\n    <string name=\"player_sheets_track_delay\">Delay</string>\n    <string name=\"player_sheets_track_palette\">Palette</string>\n    <!-- Sheets - Audio delay -->\n    <string name=\"player_sheets_audio_delay_title\">Audio delay</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Sound heard</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Sound spotted</string>\n    <!-- Sheets - Sub delay -->\n    <string name=\"player_sheets_sub_delay_title\">Subtitle delay</string>\n    <string name=\"player_sheets_sub_delay_speed\">Speed</string>\n    <string name=\"player_sheets_sub_delay_delay\">Delay</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primary</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Secondary</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Both</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Voice heard</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Text seen</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Sound heard</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Sound spotted</string>\n    <!-- Sheets - Subtitle colors -->\n    <string name=\"player_sheets_sub_colors_title\">Colors</string>\n    <string name=\"player_sheets_subtitles_color_text\">Text</string>\n    <string name=\"player_sheets_subtitles_color_border\">Border</string>\n    <string name=\"player_sheets_subtitles_color_background\">Background</string>\n    <string name=\"player_sheets_sub_color_red\">Red</string>\n    <string name=\"player_sheets_sub_color_green\">Green</string>\n    <string name=\"player_sheets_sub_color_blue\">Blue</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alpha</string>\n    <!-- Sheets - Subtitle settings -->\n    <string name=\"player_sheets_subtitles_settings_title\">Subtitles settings</string>\n    <!-- Sheets - Subtitle Typography settings -->\n    <string name=\"player_sheets_sub_typography_title\">Typography</string>\n    <string name=\"player_sheets_sub_typography_font\">Font</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Font size</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Border style</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Border size</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Shadow offset</string>\n    <!-- Sheets - Miscellaneous -->\n    <string name=\"player_sheets_sub_misc_title\">Miscellaneous</string>\n    <string name=\"player_sheets_sub_override_ass\">Override ASS/SSA subtitles</string>\n    <string name=\"player_sheets_sub_scale\">Scale</string>\n    <string name=\"player_sheets_sub_position\">Position</string>\n    <!-- Sheets - Subtitles -->\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Outline and shadow</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Opaque box</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Background box</string>\n    <!-- Sheets - Video filters -->\n    <string name=\"player_sheets_filters_title\">Filters</string>\n    <string name=\"player_sheets_filters_brightness\">Brightness</string>\n    <string name=\"player_sheets_filters_contrast\">Contrast</string>\n    <string name=\"player_sheets_filters_gamma\">Gamma</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturation</string>\n    <string name=\"player_sheets_filters_hue\">Hue</string>\n    <string name=\"player_sheets_filters_warning\">Some filters may not work on your current video driver</string>\n    <!-- Sheets - Audio tracks -->\n    <string name=\"player_sheets_add_ext_audio\">Add external audio tracks</string>\n    <!-- Sheets - Quality list -->\n    <string name=\"player_hoster_tap_to_load\">Tap to load videos</string>\n    <string name=\"player_hoster_failed\">Failed to load videos</string>\n    <string name=\"player_sheets_qualities_title\">Qualities</string>\n    <!-- Sheets - Decoders -->\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <!-- Sheets - More Sheet -->\n    <string name=\"player_sheets_more_title\">More</string>\n    <string name=\"player_hwdec_mode\">Hardware decoding mode</string>\n    <string name=\"pref_audio_channels\">Audio channels</string>\n    <string name=\"player_sheets_stats_page_title\">Default statistics page</string>\n    <string name=\"player_sheets_tracks_off\">Off</string>\n    <string name=\"player_sheets_stats_page_chip\">Page %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Custom buttons</string>\n    <string name=\"player_seek_n_seconds\">%d seconds</string>\n    <string name=\"player_gesture_seek_indicator\" translatable=\"false\">%c%s\\n[%s]</string>\n    <string name=\"timer_title\">Sleep Timer</string>\n    <string name=\"timer_remaining\">%s remaining</string>\n    <string name=\"timer_picker_enter_timer\">Enter duration</string>\n    <string name=\"timer_picker_pick_time\">Pick duration</string>\n    <string name=\"timer_cancel_timer\">Cancel current timer</string>\n    <!-- Sheets - Playback Speed -->\n    <string name=\"player_sheets_speed_slider_label\">Speed</string>\n    <string name=\"player_sheets_speed_make_default\">Make default speed</string>\n    <string name=\"pref_audio_pitch_correction_title\">Enable audio pitch correction</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Prevents the audio from becoming high-pitched at faster speeds and low-pitched at slower speeds</string>\n    <!-- Sheets - Subtitle tracks -->\n    <string name=\"player_sheets_add_ext_sub\">Add external subtitles</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Secondary subtitles will have no ASS/SSA Styling.</string>\n    <!-- Sheets - screenshot -->\n    <string name=\"screenshot_show_subs\">Include Subtitles</string>\n    <!-- Sheets - Chapters -->\n    <string name=\"player_sheets_chapters_title\">Chapters</string>\n    <!-- Subsections -->\n    <string name=\"pref_general_summary\">App language, notifications</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_library_rows\">List size</string>\n    <!-- Reader section -->\n    <string name=\"pref_preserve_reading_position\">Preserve reading position on read chapters</string>\n    <string name=\"pref_download_slots\">Maximum downloads</string>\n    <string name=\"custom_button_settings\">Custom buttons</string>\n    <string name=\"local_source_badge\">Local</string>\n    <string name=\"type\">Type</string>\n    <string name=\"anime_interval_expected_update\">New episodes predicted to be released in around %1$s, checking around every %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">This anime is either completed, or there is no predicted release date.</string>\n    <string name=\"confirm_tracker_update_anime\">Update trackers to episode %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Trackers updated to chapter %d</string>\n    <string name=\"trackers_updated_summary_anime\">Trackers updated to episode %d</string>\n    <!-- Migrate dialog -->\n    <string name=\"label_cant_migrate_episode\">Unable to migrate episode to season, select season to continue</string>\n    <string name=\"label_cant_migrate_season\">Unable to migrate season to episode</string>\n    <string name=\"label_show_seasons\">Show seasons</string>\n    <!-- Other -->\n    <string name=\"download_notifier_download_finish\">Download completed</string>\n    <string name=\"action_hide\">Hide</string>\n    <string name=\"label_all\">All</string>\n    <string name=\"label_category\">Category</string>\n    <string name=\"manga_categories\">Manga Categories</string>\n    <string name=\"general_categories\">Categories</string>\n    <string name=\"anime_categories\">Anime Categories</string>\n    <string name=\"entries\">Library entries</string>\n    <string name=\"chapters_episodes\">Chapters and episodes</string>\n    <string name=\"episodes\">Episodes</string>\n    <string name=\"backup_settings_warning\">Warning: Backing up settings will store your track passwords as well, do not share this backup file!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Anime Updates</string>\n    <string name=\"label_manga_sources\">Manga Sources</string>\n    <string name=\"label_anime_sources\">Anime Sources</string>\n    <string name=\"label_watched_duration\">Watched duration</string>\n    <string name=\"label_watched_episodes\">Watched</string>\n    <string name=\"pref_start_screen\">Start Screen</string>\n    <string name=\"pref_library_manga_columns\">Manga items per row</string>\n    <string name=\"pref_library_anime_columns\">Anime items per row</string>\n    <string name=\"pref_bottom_nav_no_history\">Move History to the More tab</string>\n    <string name=\"pref_bottom_nav_no_updates\">Move Updates to the More tab</string>\n    <string name=\"pref_bottom_nav_no_manga\">Move Manga to the More tab</string>\n    <string name=\"pref_bottom_nav_no_browse\">Move Browse to the More tab</string>\n    <string name=\"action_filter_unseen\">Unseen</string>\n    <string name=\"action_global_manga_search\">Global Manga Search</string>\n    <string name=\"action_global_anime_search\">Global Anime Search</string>\n    <string name=\"action_sort_total_episodes\">Total episodes</string>\n    <string name=\"action_sort_last_seen\">Last seen</string>\n    <string name=\"action_sort_last_checked\">Last checked</string>\n    <string name=\"action_sort_latest_episode\">Latest episode</string>\n    <string name=\"action_sort_last_anime_update\">Last anime update</string>\n    <string name=\"action_sort_unseen_count\">Unseen count</string>\n    <string name=\"action_sort_episode_fetch_date\">Episode fetch date</string>\n    <string name=\"action_mark_as_seen\">Mark as watched</string>\n    <string name=\"action_mark_as_unseen\">Mark as unwatched</string>\n    <string name=\"action_mark_previous_as_seen\">Mark previous as seen</string>\n    <string name=\"action_play_internally\">Play internally</string>\n    <string name=\"action_play_externally\">Play externally</string>\n    <string name=\"action_download_unread\">Download unread chapters</string>\n    <string name=\"action_download_unseen\">Download unseen episodes</string>\n    <string name=\"action_bookmark_episode\">Bookmark episode</string>\n    <string name=\"action_remove_bookmark_episode\">Unbookmark episode</string>\n    <string name=\"action_edit_anime_categories\">Edit anime categories</string>\n    <string name=\"action_edit_manga_categories\">Edit manga categories</string>\n    <string name=\"action_view_episodes\">View episodes</string>\n    <string name=\"action_previous_episode\">Previous episode</string>\n    <string name=\"action_play\">Play</string>\n    <string name=\"action_next_episode\">Next episode</string>\n    <string name=\"action_screen_fit\">Screen fit mode</string>\n    <string name=\"action_show_anime\">Show anime</string>\n    <string name=\"action_display_download_badge_anime\">Downloaded episodes</string>\n    <string name=\"action_display_show_continue_watching_button\">Continue watching button</string>\n    <string name=\"action_display_grid_mode\">Grid display mode</string>\n    <string name=\"action_display_local_badge_manga\">Local manga</string>\n    <string name=\"action_display_local_badge_anime\">Local anime</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Only search pinned manga sources in global search</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Only search pinned anime sources in global search</string>\n    <string name=\"pref_hide_in_manga_library_items\">Hide manga entries already in library</string>\n    <string name=\"pref_hide_in_anime_library_items\">Hide anime entries already in library</string>\n    <string name=\"action_order_by_episode_number\">By episode number</string>\n    <string name=\"action_start_download_externally\">Use external downloader</string>\n    <string name=\"action_start_download_internally\">Use internal downloader</string>\n    <string name=\"pref_bottom_nav_style\">Bottom navigation style</string>\n    <string name=\"pref_default_home_tab_library\">Set start screen to Manga Tab</string>\n    <string name=\"default_manga_category\">Default manga category</string>\n    <string name=\"default_anime_category\">Default anime category</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga in excluded categories will not be updated even if they are also in included categories.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime in excluded categories will not be updated even if they are also in included categories.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">This extension is not from the official list.</string>\n    <string name=\"unofficial_anime_extension_message\">This extension is not from the official list.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Excluded manga categories</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Excluded anime categories</string>\n    <string name=\"pref_category_external_downloader\">External downloader</string>\n    <string name=\"pref_use_external_downloader\">Always use external downloader for anime</string>\n    <string name=\"pref_external_downloader_selection\">Downloader app preference</string>\n    <string name=\"pref_download_new_episodes\">Download new episodes</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Skip downloading duplicate seen episodes</string>\n    <string name=\"auto_download_while_watching\">Auto download while watching</string>\n    <string name=\"download_ahead_info_anime\">Only works on entries in library and if the current episode plus the next one are already downloaded</string>\n    <string name=\"pref_track_on_add_library\">Open track menu on adding to library</string>\n    <string name=\"pref_show_next_episode_airing_time\">Show next episode\\'s airing time </string>\n    <string name=\"pref_backup_flags_summary\">What information to include in the backup file</string>\n    <string name=\"pref_anime_storage_usage\">Anime Storage usage</string>\n    <string name=\"pref_manga_storage_usage\">Manga Storage usage</string>\n    <string name=\"used_cache_both\">Used by anime: %1$s, used by manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Clear Manga database</string>\n    <string name=\"pref_clear_anime_database\">Clear Anime database</string>\n    <string name=\"pref_clear_manga_database_summary\">Delete history for manga that are not saved in your library</string>\n    <string name=\"pref_clear_anime_database_summary\">Delete history for anime that are not saved in your library</string>\n    <string name=\"anime_from_library\">Anime from library</string>\n    <string name=\"downloaded_episodes\">Downloaded episodes</string>\n    <string name=\"local_manga_source\">Local manga source</string>\n    <string name=\"local_anime_source\">Local anime source</string>\n    <string name=\"episode_not_found\">Episode not found</string>\n    <string name=\"local_invalid_episode_format\">Invalid episode format</string>\n    <string name=\"unknown_studio\">Unknown studio</string>\n    <string name=\"delete_confirmation\">Are you sure you wish to delete \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Delete downloaded episodes?</string>\n    <string name=\"snack_add_to_manga_library\">Add manga to library?</string>\n    <string name=\"snack_add_to_anime_library\">Add anime to library?</string>\n    <string name=\"display_mode_episode\">Episode %1$s</string>\n    <string name=\"display_mode_season\">Season %1$s</string>\n    <string name=\"episode_downloading_progress\">Downloading (%d%%)</string>\n    <string name=\"download_error\">Error</string>\n    <string name=\"download_paused\">Paused</string>\n    <string name=\"show_episode_number\">Episode number</string>\n    <string name=\"show_season_number\">Season number</string>\n    <string name=\"sort_by_episode_number\">By episode number</string>\n    <string name=\"sort_by_season_number\">By season number</string>\n    <string name=\"download_unseen\">Unseen</string>\n    <string name=\"confirm_delete_episodes\">Are you sure you want to delete the selected episodes?</string>\n    <string name=\"also_set_episode_settings_for_library\">Also apply to all anime in my library</string>\n    <string name=\"no_episodes_error\">No episodes found</string>\n    <string name=\"no_seasons_error\">No seasons found</string>\n    <string name=\"watching\">Watching</string>\n    <string name=\"currently_reading\">Currently reading</string>\n    <string name=\"currently_watching\">Currently watching</string>\n    <string name=\"plan_to_watch\">Plan to watch</string>\n    <string name=\"not_interesting\">Not interesting</string>\n    <string name=\"want_to_read\">Want to read</string>\n    <string name=\"want_to_watch\">Want to watch</string>\n    <string name=\"repeating_anime\">Rewatching</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">This will remove the watch date of this episode. Are you sure?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Reset all episodes for this anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">No video found</string>\n    <string name=\"notification_new_episodes\">New episodes found</string>\n    <string name=\"information_no_recent_anime\">Nothing watched recently</string>\n    <string name=\"episode_settings_updated\">Updated default episode settings</string>\n    <string name=\"season_settings_updated\">Updated default season settings</string>\n    <string name=\"download_notifier_download_paused_chapters\">Chapter download paused</string>\n    <string name=\"download_notifier_download_paused_episodes\">Episode download paused</string>\n    <string name=\"channel_new_chapters_episodes\">Chapter/Episode updates</string>\n    <string name=\"label_storage\">Storage</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Change intro length</string>\n    <string name=\"notification_episodes_single\">Episode %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episode %1$s and %2$d more</string>\n    <string name=\"notification_episodes_multiple\">Episodes %1$s</string>\n    <string name=\"episode_settings\">Episode settings</string>\n    <string name=\"season_settings\">Season settings</string>\n    <string name=\"pref_backup_flags\">Backup options</string>\n    <string name=\"label_manga_extensions\">Manga Extensions</string>\n    <string name=\"label_anime_extensions\">Anime Extensions</string>\n    <string name=\"label_migration_manga\">Migrate Manga</string>\n    <string name=\"label_migration_anime\">Migrate Anime</string>\n    <string name=\"settings\">Settings</string>\n    <string name=\"copied_video_link_to_clipboard\">Copied video quality link to clipboard</string>\n    <string name=\"choose_video_quality\">Choose video quality:</string>\n    <string name=\"extension_settings\">Extension settings</string>\n    <string name=\"theme_cottoncandy\">Cotton Candy</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_behavior_episode\">Episode behavior</string>\n    <string name=\"pref_episode_swipe_end\">Episode on swipe to right</string>\n    <string name=\"pref_episode_swipe_start\">Episode on swipe to left</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Mark duplicate seen episode as seen</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">After watching an episode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">After fetching new episode</string>\n    <string name=\"pref_library_season\">Season</string>\n    <string name=\"pref_update_seasons_refresh\">Update seasons with episodes on refresh</string>\n    <string name=\"pref_update_seasons_update\">Update seasons with episodes on library update</string>\n    <string name=\"pref_category_hide_hidden\">Hide hidden categories from categories and storage screen</string>\n    <string name=\"pref_update_anime_release_grace_period\">Expected anime release grace period</string>\n    <string name=\"data_saver_exclude\">Exclude from data saver</string>\n    <string name=\"data_saver_stop_exclude\">Stop excluding from data saver</string>\n    <string name=\"data_saver\">Data Saver</string>\n    <string name=\"data_saver_summary\">Compress images before downloading or loading in reader</string>\n    <string name=\"data_saver_downloader\">Use data saver in the downloader</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignore Jpeg Images</string>\n    <string name=\"data_saver_ignore_gif\">Ignore Gif Animations</string>\n    <string name=\"data_saver_image_quality\">Image Quality</string>\n    <string name=\"data_saver_image_quality_summary\">Higher values mean that a higher percentage of the image quality is saved, but it also means the file size is larger, 80 percent is a good median between file size and image quality</string>\n    <string name=\"data_saver_image_format\">Compress to Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">The Jpeg file size is considerably smaller then Webp is(meaning more data is saved), but it makes the images lose more quality as well.\\nCurrently compresses to Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">The Jpeg file size is considerably smaller then Webp is(meaning more data is saved), but it makes the images lose more quality as well.\\nCurrently compresses to Webp</string>\n    <string name=\"data_saver_color_bw\">Convert to Black And White</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (requires a Bandwidth Hero Proxy server)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy Server</string>\n    <string name=\"data_saver_server_summary\">Put Bandwidth Hero Proxy server url here</string>\n    <string name=\"download_slots_info\">Will only download concurrently from self-hosted or unmetered sources</string>\n    <string name=\"unseen\">Unseen</string>\n    <string name=\"label_manga_extension_repos\">Manga extension repos</string>\n    <string name=\"label_anime_extension_repos\">Anime extension repos</string>\n    <string name=\"onboarding_storage_action_create_folder\">Create default Aniyomi folder</string>\n    <string name=\"download_speed_limit\">Chapter download speed limit</string>\n    <string name=\"download_speed_limit_hint\">Set to 0 to disable the speed limit.</string>\n    <string name=\"filler\">Filler</string>\n    <string name=\"action_filter_fillermarked\">Fillermarked</string>\n    <string name=\"action_edit_background\">Edit background</string>\n    <string name=\"custom_background\">Custom background</string>\n    <string name=\"background_saved\">Background saved</string>\n    <string name=\"error_saving_background\">Error saving background</string>\n    <string name=\"error_sharing_background\">Error sharing background</string>\n    <string name=\"set_as_background\">Set as background</string>\n    <string name=\"set_as_thumbnail\">Set as thumbnail</string>\n    <string name=\"background_updated\">Background updated</string>\n    <string name=\"thumbnail_updated\">Thumbnail updated</string>\n    <string name=\"notification_background_update_failed\">Failed to update background</string>\n    <string name=\"action_fillermark_episode\">Fillermark episode</string>\n    <string name=\"action_remove_fillermark_episode\">Unfillermark episode</string>\n    <string name=\"pref_download_fillermarked_items\">Allow downloading of fillermarked episodes</string>\n    <string name=\"show_episode_previews\">Episode thumbnails</string>\n    <string name=\"show_episode_summaries\">Episode summaries</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/be/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_update_show_tab_badge\">Паказваць непрачытаныя главы ў укладцы \\\"Абнаўленні\\\"</string>\n    <string name=\"manga_categories\">Катэгорыі</string>\n    <string name=\"action_display_local_badge_manga\">Значкі лакальных</string>\n    <string name=\"default_manga_category\">Катэгорыя па змаўчанні</string>\n    <string name=\"pref_manga_library_update_categories_details\">Манга ў выключаных катэгорыях не будзе абнаўляцца, нават калі яны таксама знаходзяцца ў уключаных катэгорыях.</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/bg/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Категории, глобални обновления</string>\n    <string name=\"pref_library_update_show_tab_badge\">Покажи броя на непрочетените в иконата за ъпдейти</string>\n    <string name=\"manga_categories\">Категории</string>\n    <string name=\"action_display_local_badge_manga\">Локална манга</string>\n    <string name=\"default_manga_category\">Категория по подразбиране</string>\n    <string name=\"pref_manga_library_update_categories_details\">Манга в изключените категории няма да бъде обновявана дори ако се намира във включените категории.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Изключени категории</string>\n    <string name=\"pref_clear_manga_database\">Изчисти базата данни</string>\n    <string name=\"pref_clear_manga_database_summary\">Изтрий историята на манги, които не са запазени в библиотеката</string>\n    <string name=\"snack_add_to_manga_library\">Добавяне на мангата към библиотеката?</string>\n    <string name=\"download_error\">Грешка</string>\n    <string name=\"download_paused\">На пауза</string>\n    <string name=\"download_notifier_download_paused_chapters\">Изтеглянето спряно</string>\n    <string name=\"channel_new_chapters_episodes\">Нови глави</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/bn/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">ব্যাক এ আবার চাপ দিন বেরোবার জন্য</string>\n    <string name=\"pref_library_summary\">বিভাগসমূহ, সার্বজনীন হালনাগাদ</string>\n    <string name=\"pref_library_update_show_tab_badge\">অপঠিত গণনা আপডেট আইকন এ দেখাও</string>\n    <string name=\"manga_categories\">বিভাগসমূহ</string>\n    <string name=\"general_categories\">ক্যাটাগরি</string>\n    <string name=\"anime_categories\">এনিমে বিভাগ</string>\n    <string name=\"entries\">লাইব্রেরি এন্ট্রি</string>\n    <string name=\"chapters_episodes\">অধ্যায় এবং পর্ব</string>\n    <string name=\"episodes\">পর্বগুলি</string>\n    <string name=\"backup_settings_warning\">সতর্কতা: ব্যাক আপ সেটিংস আপনার ট্র্যাক পাসওয়ার্ডগুলিও সংরক্ষণ করবে, এই ব্যাকআপ ফাইলটি শেয়ার করবেন না!</string>\n    <string name=\"label_manga_library\">মাঙ্গা</string>\n    <string name=\"label_anime_library\">এনিমে</string>\n    <string name=\"label_anime\">এনিমে</string>\n    <string name=\"label_manga\">মাঙ্গা</string>\n    <string name=\"label_manga_sources\">মাঙ্গা সূত্র</string>\n    <string name=\"label_anime_sources\">Anime Sources</string>\n    <string name=\"label_watched_duration\">দেখার সময়কাল</string>\n    <string name=\"label_watched_episodes\">দেখেছে</string>\n    <string name=\"pref_library_manga_columns\">সারি প্রতি Manga আইটেম</string>\n    <string name=\"pref_library_anime_columns\">প্রতি সারি এনিমে আইটেম</string>\n    <string name=\"pref_bottom_nav_no_history\">আরও ট্যাবে ইতিহাস সরান</string>\n    <string name=\"pref_bottom_nav_no_updates\">আরও ট্যাবে আপডেটগুলি সরান</string>\n    <string name=\"pref_bottom_nav_no_manga\">মাঙ্গাকে আরও ট্যাবে সরান</string>\n    <string name=\"action_filter_unseen\">অদেখা</string>\n    <string name=\"action_global_manga_search\">গ্লোবাল মাঙ্গা অনুসন্ধান</string>\n    <string name=\"action_global_anime_search\">গ্লোবাল অ্যানিমে অনুসন্ধান</string>\n    <string name=\"action_sort_total_episodes\">মোট পর্ব</string>\n    <string name=\"action_sort_last_seen\">শেষ দেখা</string>\n    <string name=\"action_sort_last_checked\">শেষ চেক করা হয়েছে</string>\n    <string name=\"action_sort_latest_episode\">সর্বশেষ পর্ব</string>\n    <string name=\"action_sort_last_anime_update\">শেষ অ্যানিমে আপডেট</string>\n    <string name=\"action_sort_unseen_count\">অদেখা গণনা</string>\n    <string name=\"action_sort_episode_fetch_date\">পর্ব আনার তারিখ</string>\n    <string name=\"action_mark_as_seen\">দেখা হয়েছে হিসাবে চিহ্নিত করুন</string>\n    <string name=\"action_mark_as_unseen\">অদেখা হিসেবে চিহ্নিত করুন</string>\n    <string name=\"action_mark_previous_as_seen\">আগের দেখা হিসাবে চিহ্নিত করুন</string>\n    <string name=\"action_play_internally\">অভ্যন্তরীণভাবে খেলুন</string>\n    <string name=\"action_play_externally\">বাহ্যিকভাবে খেলুন</string>\n    <string name=\"action_download_unread\">অপঠিত অধ্যায় ডাউনলোড করুন</string>\n    <string name=\"action_download_unseen\">অদেখা পর্ব ডাউনলোড করুন</string>\n    <string name=\"action_bookmark_episode\">বুকমার্ক পর্ব</string>\n    <string name=\"action_remove_bookmark_episode\">আনবুকমার্ক পর্ব</string>\n    <string name=\"action_display_local_badge_manga\">স্থানীয় মাঙ্গা</string>\n    <string name=\"default_manga_category\">সাধারণ বিভাগ</string>\n    <string name=\"pref_manga_library_update_categories_details\">বাদ দেওয়া ক্যাটাগরিতে মঙ্গা আপডেট করা হবে না যদিও সেগুলি অন্তর্ভুক্ত ক্যাটাগরিতেও থাকে।</string>\n    <string name=\"pref_remove_exclude_categories_manga\">বর্জিত বিভাগ গুলি</string>\n    <string name=\"pref_clear_manga_database\">ডাটাবেজ পরিষ্কার করুন</string>\n    <string name=\"pref_clear_manga_database_summary\">আপনার সংগ্রহশালাতে যেসব মাংগা সংরক্ষিত নেই সেগুলোর ইতিহাস মুছে ফেলুন</string>\n    <string name=\"snack_add_to_manga_library\">সংগ্রহশালায় মাঙ্গা যোগ করবেন?</string>\n    <string name=\"download_error\">ত্রুটি</string>\n    <string name=\"download_paused\">থেমে আছে</string>\n    <string name=\"download_notifier_download_paused_chapters\">ডাউনলোড বিরতি</string>\n    <string name=\"channel_new_chapters_episodes\">অধ্যায়ের হালনাগাদগুলো</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ca/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Següent episodi pendent de visualització</item>\n        <item quantity=\"other\">Següents episodis %d pendents de visualització</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s episodi</item>\n        <item quantity=\"other\">%1$s episodis</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Per 1 títol</item>\n        <item quantity=\"other\">Per %d títols</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 nou episodi</item>\n        <item quantity=\"other\">%1$d nous episodis</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d segon</item>\n        <item quantity=\"other\">%d segons</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Episodis %1$s i 1 més</item>\n        <item quantity=\"other\">Episodis %1$s i %2$d més</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ca/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Torneu a prémer endarrere per a sortir</string>\n    <string name=\"action_filter_started\">Començat</string>\n    <string name=\"action_sort_airing_time\">Hora d’emissió</string>\n    <string name=\"action_reorganize_by\">Reordena</string>\n    <string name=\"pref_library_summary\">Categories, actualitzacions globals i lliscament en capítols</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostra el comptador de no llegits a la icona d\\'actualitzacions</string>\n    <string name=\"pref_progress_mark_as_seen\">Punt on marcar l\\'episodi com a vist</string>\n    <string name=\"pref_preserve_watching_position\">Mantindre la posició de visionat als capítols finalitzats</string>\n    <string name=\"pref_category_player_orientation\">Orientació</string>\n    <string name=\"rotation_reverse_landscape\">Format apaisat invertit</string>\n    <string name=\"rotation_sensor_portrait\">Sensor vertical</string>\n    <string name=\"rotation_sensor_landscape\">Sensor apaisat</string>\n    <string name=\"pref_remember_brightness\">Recorda i canvia l\\'última brillantor utilitzada</string>\n    <string name=\"pref_remember_volume\">Recorda i canvia l\\'últim volum usat</string>\n    <string name=\"pref_player_fullscreen\">Mostra contingut a la part superior de la pantalla</string>\n    <string name=\"pref_player_hide_controls\">Amaga els controls quan s\\'obre el reproductor de vídeo</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Activa salt automàtic</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Activar estil Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Botó del temps d\\'espera</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 segons</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 segons</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 segons</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 segons</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 segons</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 segons</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip requereix que l\\'anime sigui rastrejat amb MAL o Anilist perquè funcioni</string>\n    <string name=\"pref_enable_aniskip\">Activar AniSkip</string>\n    <string name=\"pref_category_pip\">Imatge inserida a la pantalla (PiP)</string>\n    <string name=\"pref_enable_pip\">Activa l\\'ús del mode d\\'imatge a imatge</string>\n    <string name=\"pref_pip_episode_toasts\">Mostrar notificació emergent al canviar d\\'episodi en mode PiP</string>\n    <string name=\"pref_pip_on_exit\">Canvi automàtic a mode PiP al sortir del reproductor</string>\n    <string name=\"pref_pip_replace_with_previous\">Substitueix l’opció de saltar 10 segons amb la de capítol anterior</string>\n    <string name=\"pref_category_external_player\">Reproductor extern</string>\n    <string name=\"pref_always_use_external_player\">Utilitza sempre un reproductor extern</string>\n    <string name=\"pref_external_player_preference\">Preferències del reproductor extern</string>\n    <string name=\"enable_volume_brightness_gestures\">Activa els gestos per controlar el volum i la lluentor</string>\n    <string name=\"pref_category_player_seeking\">Buscant</string>\n    <string name=\"enable_horizontal_seek_gesture\">Activa la búsqueda horitzontal per gestos</string>\n    <string name=\"pref_default_intro_length\">Salta la introducció per defecte</string>\n    <string name=\"pref_intro_length\">Omet la introducció</string>\n    <string name=\"pref_skip_length\">Doble click per ometre</string>\n    <string name=\"pref_skip_disable\">Deshabilitar</string>\n    <string name=\"pref_player_smooth_seek\">Activa la búsqueda de precisió</string>\n    <string name=\"pref_player_smooth_seek_summary\">Quan s\\'activa, la cerca es fa per fotogrames clau, això fa una cerca més lenta però precisa</string>\n    <string name=\"pref_gpu_next_title\">Activa gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Un nou backend de renderització de vídeo</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_mpv_conf\">Edita el fitxer de configuració MPV per futures configuracions del reproductor</string>\n    <string name=\"pref_reset_mpv_conf\">Restableix el fitxer de configuració MPV</string>\n    <string name=\"pref_mpv_input\">Edita el fitxer d\\'entrada MPV per a la configuració de mapes del teclat</string>\n    <string name=\"video_fit_screen\">Ajusta a la pantalla</string>\n    <string name=\"video_crop_screen\">Retall a la pantalla</string>\n    <string name=\"video_stretch_screen\">Omplir la pantalla</string>\n    <string name=\"enable_auto_play\">Reproducció automàtica activada</string>\n    <string name=\"disable_auto_play\">Reproducció automàtica desactivada</string>\n    <string name=\"player_aniskip_dontskip\">No saltar</string>\n    <string name=\"player_aniskip_dontskip_toast\">Salta %s en %d segons</string>\n    <string name=\"player_aniskip_skip\">%s saltats</string>\n    <string name=\"no_next_episode\">No s\\'ha trobat el següent episodi!</string>\n    <string name=\"player_hwdec_mode\">Establir per defecte el mode decodificació per hardware</string>\n    <string name=\"screenshot_show_subs\">Mostra els subtítols a la captura de pantalla</string>\n    <string name=\"pref_general_summary\">Llengua de l’aplicació, notificacions</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Safir</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_preserve_reading_position\">Conserva la posició de lectura en el capítols llegits</string>\n    <string name=\"pref_download_slots\">Màxim de baixades</string>\n    <string name=\"local_source_badge\">Local</string>\n    <string name=\"anime_interval_expected_update\">Es preveu que hi haurà nous capítols d’aquí a aproximadament %1$s, es comprova cada %2$s.</string>\n    <string name=\"download_notifier_download_finish\">Baixada completada</string>\n    <string name=\"action_hide\">Amaga</string>\n    <string name=\"label_all\">Tot</string>\n    <string name=\"label_category\">Categoria</string>\n    <string name=\"manga_categories\">Categories de manga</string>\n    <string name=\"general_categories\">Categories</string>\n    <string name=\"anime_categories\">Categories d\\'anime</string>\n    <string name=\"entries\">Entrades de biblioteca</string>\n    <string name=\"chapters_episodes\">Capítols i episodis</string>\n    <string name=\"episodes\">Episodis</string>\n    <string name=\"backup_settings_warning\">Precaució: crear una còpia de seguretat desarà informació confidencial, com la teva clau d\\'accès, no comparteixis l\\'arxiu de còpia de seguretat!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Actualitzacions d’anime</string>\n    <string name=\"label_manga_sources\">Fonts Manga</string>\n    <string name=\"label_anime_sources\">Fonts Anime</string>\n    <string name=\"label_watched_duration\">Duració de reproducció</string>\n    <string name=\"label_watched_episodes\">Reproduït</string>\n    <string name=\"pref_start_screen\">Pantalla d’inici</string>\n    <string name=\"pref_library_manga_columns\">Ítems Manga per línia</string>\n    <string name=\"pref_library_anime_columns\">Ítems Anime per línia</string>\n    <string name=\"pref_bottom_nav_no_history\">Moure Història a la pestanya Més</string>\n    <string name=\"pref_bottom_nav_no_updates\">Moure Actualitzacions a la pestanya Més</string>\n    <string name=\"pref_bottom_nav_no_manga\">Moure Manga a la pestanya Més</string>\n    <string name=\"action_filter_unseen\">No llegit</string>\n    <string name=\"action_global_manga_search\">Cerca de Manga Global</string>\n    <string name=\"action_global_anime_search\">Cerca de Anime Global</string>\n    <string name=\"action_sort_total_episodes\">Total d\\'episodis</string>\n    <string name=\"action_sort_last_seen\">Últim vist</string>\n    <string name=\"action_sort_last_checked\">Últim comprovat</string>\n    <string name=\"action_sort_latest_episode\">Últim episodi</string>\n    <string name=\"action_sort_last_anime_update\">Darrera actualització d\\'Anime</string>\n    <string name=\"action_sort_unseen_count\">Conta no llegida</string>\n    <string name=\"action_sort_episode_fetch_date\">Data d\\'obtenció de l\\'episodi</string>\n    <string name=\"action_mark_as_seen\">Marcar com llegit</string>\n    <string name=\"action_mark_as_unseen\">Marcar com no mirat</string>\n    <string name=\"action_mark_previous_as_seen\">Marcar previ com llegit</string>\n    <string name=\"action_play_internally\">Reproduir internament</string>\n    <string name=\"action_play_externally\">Reproduir externament</string>\n    <string name=\"action_download_unread\">Descarregar capítols no llegits</string>\n    <string name=\"action_download_unseen\">Descarregar episodis no visibles</string>\n    <string name=\"action_bookmark_episode\">Marca de llibre de l\\'episodi</string>\n    <string name=\"action_remove_bookmark_episode\">Treure marca de llibre de l\\'episodi</string>\n    <string name=\"action_edit_anime_categories\">Editar categories d\\'Anime</string>\n    <string name=\"action_edit_manga_categories\">Editar categories de Manga</string>\n    <string name=\"action_view_episodes\">Mirar episodis</string>\n    <string name=\"action_previous_episode\">Episodi anterior</string>\n    <string name=\"action_play\">Iniciar</string>\n    <string name=\"action_next_episode\">Episodi següent</string>\n    <string name=\"action_screen_fit\">Mode ajustament de pantalla</string>\n    <string name=\"action_show_anime\">Mostra Anime</string>\n    <string name=\"action_display_download_badge_anime\">Episodis descarregats</string>\n    <string name=\"action_display_local_badge_manga\">Manga local</string>\n    <string name=\"action_display_local_badge_anime\">Anime local</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Inclou només fonts de manga anclades a la recerca global</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Incloure només fonts d\\'anime anclades a la recerca global</string>\n    <string name=\"pref_hide_in_manga_library_items\">Amaga les entrades dels mangas que ja siguin a la biblioteca</string>\n    <string name=\"pref_hide_in_anime_library_items\">Amaga les entrades dels animes que ja siguin a la biblioteca</string>\n    <string name=\"action_order_by_episode_number\">Per número d\\'espisodi</string>\n    <string name=\"action_start_download_externally\">Utilitza descarregador extern</string>\n    <string name=\"action_start_download_internally\">Utilitza descarregador intern</string>\n    <string name=\"pref_bottom_nav_style\">Estil de navegació inferior</string>\n    <string name=\"pref_default_home_tab_library\">Estableix la pestanya Manga com a pantalla d\\'inici</string>\n    <string name=\"default_manga_category\">Categoria per defecte</string>\n    <string name=\"default_anime_category\">Categoria anime per defecte</string>\n    <string name=\"pref_manga_library_update_categories_details\">Els elements de les categories excloses no s\\'actualitzaran encara que també siguin a les categories incloses.</string>\n    <string name=\"pref_anime_library_update_categories_details\">L\\'anime de categories excloses no serà actualitzat tot i que esiguin dins les categories incloses.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Aquesta extensió no és de la llista oficial d\\'extensions d\\'Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Aquesta extensió no és del llistat d\\'extensions oficials d\\'Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categories excloses</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Categories d\\'anime excloses</string>\n    <string name=\"pref_category_external_downloader\">Descarregador extern</string>\n    <string name=\"pref_use_external_downloader\">Utilitza sempre un gestor de descàrregues extern per l\\'anime</string>\n    <string name=\"pref_external_downloader_selection\">App de descàrregues preferida</string>\n    <string name=\"pref_download_new_episodes\">Descarrega nous episodis</string>\n    <string name=\"auto_download_while_watching\">Descàrrega automàtica durant la visualització</string>\n    <string name=\"download_ahead_info_anime\">Només funciona per entrades de la biblioteca, i si l\\'episodi actual i el següent ja han estat descarregats</string>\n    <string name=\"pref_track_on_add_library\">Obrir el menú de rastreig al afegir a la biblioteca</string>\n    <string name=\"pref_show_next_episode_airing_time\">Mostra l\\'hora d\\'emissió del proper episodi</string>\n    <string name=\"pref_backup_flags_summary\">Informació inclosa al fitxer de còpia de seguretat</string>\n    <string name=\"pref_anime_storage_usage\">Ús d\\'emmagatzematge d\\'anime</string>\n    <string name=\"pref_manga_storage_usage\">Ús d\\'emmagatzematge de manga</string>\n    <string name=\"used_cache_both\">Utilitzat per l\\'anime: %1$s, utilitzat pel manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Buida la base de dades</string>\n    <string name=\"pref_clear_anime_database\">Neteja la base de dades de l\\'anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Suprimeix l\\'historial dels elements que no siguin a la biblioteca</string>\n    <string name=\"pref_clear_anime_database_summary\">Elimina l\\'historial per l\\'anime que no desat a la teva col·lecció</string>\n    <string name=\"anime_from_library\">Anime de la col·lecció</string>\n    <string name=\"downloaded_episodes\">Episodis descarregats</string>\n    <string name=\"local_manga_source\">Manga en font local</string>\n    <string name=\"local_anime_source\">Font local d\\'anime</string>\n    <string name=\"episode_not_found\">Episodi no trobat</string>\n    <string name=\"local_invalid_episode_format\">Format d\\'episodi no vàlid</string>\n    <string name=\"unknown_studio\">Estudi desconegut</string>\n    <string name=\"delete_confirmation\">Esteu segur de que voleu suprimir \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Eliminar els episodis descarregats?</string>\n    <string name=\"snack_add_to_manga_library\">Voleu afegir-lo a la biblioteca?</string>\n    <string name=\"snack_add_to_anime_library\">Afegir l\\'anime a la llibreria?</string>\n    <string name=\"display_mode_episode\">Episodi %1$s</string>\n    <string name=\"episode_downloading_progress\">Descarregant (%d%%)</string>\n    <string name=\"download_error\">Error</string>\n    <string name=\"download_paused\">Pausat</string>\n    <string name=\"show_episode_number\">Número d\\'episodi</string>\n    <string name=\"sort_by_episode_number\">Per número d\\'episodi</string>\n    <string name=\"download_unseen\">No vist</string>\n    <string name=\"confirm_delete_episodes\">Vols eliminar els episodis sel·leccionats?</string>\n    <string name=\"also_set_episode_settings_for_library\">Aplicar a tots els anime de la meva llibreria</string>\n    <string name=\"no_episodes_error\">No s\\'han trobat capítols</string>\n    <string name=\"watching\">Visualitzant</string>\n    <string name=\"currently_reading\">Actualment llegint</string>\n    <string name=\"currently_watching\">Actualment veient</string>\n    <string name=\"plan_to_watch\">Pendent de visualitzar</string>\n    <string name=\"not_interesting\">No interessat</string>\n    <string name=\"want_to_read\">Pendent de llegir</string>\n    <string name=\"want_to_watch\">Pendent de visualitzar</string>\n    <string name=\"repeating_anime\">Tornat a veure</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Això eliminarà la data de visualització del capítol. Estàs segur?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Reseteja tots els episodis per aquest anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Progrés: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Progrés: %1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">No s\\'ha trobat cap vídeo</string>\n    <string name=\"notification_new_episodes\">Nou episodi trobat</string>\n    <string name=\"information_no_recent_anime\">Cap visualització recent</string>\n    <string name=\"episode_settings_updated\">Actualitzada configuració per defecte dels episodis</string>\n    <string name=\"download_notifier_download_paused_chapters\">Baixada pausada</string>\n    <string name=\"download_notifier_download_paused_episodes\">Atura la descàrrega d\\'episodis</string>\n    <string name=\"channel_new_chapters_episodes\">Novetats de capítols</string>\n    <string name=\"label_storage\">Emmagatzematge</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Canviar la duració de la introducció</string>\n    <string name=\"notification_episodes_single\">Episodi %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episodi %1$s i %2$d més</string>\n    <string name=\"notification_episodes_multiple\">Episodis %1$s</string>\n    <string name=\"episode_settings\">Ajustos del episodi</string>\n    <string name=\"pref_backup_flags\">Opcions de còpia de seguretat</string>\n    <string name=\"label_manga_extensions\">Extensions del manga</string>\n    <string name=\"label_anime_extensions\">Extensions d\\'anime</string>\n    <string name=\"label_migration_manga\">Migrar el manga</string>\n    <string name=\"label_migration_anime\">Migrar l\\'anime</string>\n    <string name=\"settings\">Ajustaments</string>\n    <string name=\"copied_video_link_to_clipboard\">Nexe de qualitat de vídeo copiat a portapapers</string>\n    <string name=\"choose_video_quality\">Tria la qualitat del vídeo:</string>\n    <string name=\"extension_settings\">Configuració de l\\'extensió</string>\n    <string name=\"theme_cottoncandy\">Caramel de cotó</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Acció en lliscar cap a la dreta</string>\n    <string name=\"pref_episode_swipe_start\">Acció en lliscar cap a l’esquerra</string>\n    <string name=\"pref_category_hide_hidden\">Amaga les categories ocultes de categories i pantalla d\\'emmagatzematge</string>\n    <string name=\"data_saver\">Estalviador de dades</string>\n    <string name=\"data_saver_summary\">Comprimeix les imatges abans de descarregar o carregar al lector</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignorar imatges Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Ignora animacions GIF</string>\n    <string name=\"data_saver_image_quality\">Qualitat d\\'imatge</string>\n    <string name=\"data_saver_image_format\">Comprimeix a Jpeg</string>\n    <string name=\"data_saver_color_bw\">Converteix a Negre I Blanc</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy Server</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ceb/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_update_show_tab_badge\">Ipakita ang wala pa mabasa nga ihap sa icon sa Updates</string>\n    <string name=\"manga_categories\">Mga Kategoriya</string>\n    <string name=\"default_manga_category\">Default nga kategorya</string>\n    <string name=\"pref_manga_library_update_categories_details\">Ang manga sa wala iapil nga mga kategorya dili ma-update bisan kung naa usab sila sa mga gilakip nga kategorya.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Wala iapil nga mga kategorya</string>\n    <string name=\"pref_clear_manga_database\">Klaro nga database</string>\n    <string name=\"pref_clear_manga_database_summary\">I-delete ang history para sa manga nga wala ma-save sa imong library</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/cs/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Další nezhlédnuté epizody</item>\n        <item quantity=\"few\">Další %d nezhlédnuté epizody</item>\n        <item quantity=\"other\">Dalších %d nezhlédnutých epizod</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">1 epizoda</item>\n        <item quantity=\"few\">%1$s epizody</item>\n        <item quantity=\"other\">%1$s epizod</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Pro 1 titul</item>\n        <item quantity=\"few\">Pro %d tituly</item>\n        <item quantity=\"other\">Pro %d titulů</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 nová epizoda</item>\n        <item quantity=\"few\">%1$d nové epizody</item>\n        <item quantity=\"other\">%1$d nových epizod</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d sekunda</item>\n        <item quantity=\"few\">%d sekundy</item>\n        <item quantity=\"other\">%d sekund</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Epizody %1$s a 1 další</item>\n        <item quantity=\"few\">Epizody %1$s a další %2$d</item>\n        <item quantity=\"other\">Epizody %1$s a dalších %2$d</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/cs/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Zmáčknete zpátky znovu aby jste odešli</string>\n    <string name=\"action_filter_started\">Začal</string>\n    <string name=\"action_sort_airing_time\">Čas vysílání</string>\n    <string name=\"action_reorganize_by\">Seřadit</string>\n    <string name=\"relative_time_now\">Teď</string>\n    <string name=\"pref_library_summary\">Kategorie, globální aktualizace, přejetí po kapitole</string>\n    <string name=\"pref_library_update_show_tab_badge\">Zobrazit počet nepřečtených kapitol na ikoně Aktualizace</string>\n    <string name=\"label_player_settings\">Nastavení přehrávače</string>\n    <string name=\"action_search_player_settings\">Hledat v nastavení přehrávače</string>\n    <string name=\"pref_player_internal\">Vnitřní přehrávač</string>\n    <string name=\"pref_progress_mark_as_seen\">Od jakého okamžiku označovat epizodu jako viděnou</string>\n    <string name=\"pref_preserve_watching_position\">Zachovat pozici přehrávání u zhlédnutých epizod</string>\n    <string name=\"pref_category_player_orientation\">Orientace</string>\n    <string name=\"rotation_reverse_landscape\">Obrácená rotace na šířku</string>\n    <string name=\"rotation_sensor_portrait\">Snímek na výšku</string>\n    <string name=\"rotation_sensor_landscape\">Snímek na šířku</string>\n    <string name=\"pref_remember_brightness\">Zapamatovat si naposledy použitou úroveň jasu a automaticky na ni přepnout</string>\n    <string name=\"pref_remember_volume\">Zapamatovat si naposledy použitou hlasitost a automaticky na ni přepnout</string>\n    <string name=\"pref_player_fullscreen\">Zobrazit obsah v oblasti výřezu displeje</string>\n    <string name=\"pref_player_hide_controls\">Skrýt ovládání přehrávače při jeho otevření</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Zapnout automatické přeskakování</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Zapnout styl Netflixu</string>\n    <string name=\"pref_waiting_time_aniskip\">Časový limit tlačítka</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 sekund</string>\n    <string name=\"pref_category_player_aniskip_info\">Nastavení AniSkip</string>\n    <string name=\"pref_enable_aniskip\">Zapnout AniSkip</string>\n    <string name=\"pref_category_pip\">Miniokno</string>\n    <string name=\"pref_enable_pip\">Povolit použití režimu PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Zobrazovat ukázky epizody při přepínání v režimu obrazu v obrazu</string>\n    <string name=\"pref_pip_on_exit\">Automatické přepnutí do režimu obraazu v obrazu po opuštění přehrávače</string>\n    <string name=\"pref_category_external_player\">Externí přehrávač</string>\n    <string name=\"pref_always_use_external_player\">Vždy použít externí přehrávač</string>\n    <string name=\"pref_external_player_preference\">Preference externího přehrávače</string>\n    <string name=\"pref_player_gestures\">Gesta</string>\n    <string name=\"enable_volume_brightness_gestures\">Přepnutí gest pro hlasitost a jas</string>\n    <string name=\"enable_horizontal_seek_gesture\">Přepnutí gesta pro horizontální posun</string>\n    <string name=\"pref_default_intro_length\">Výchozí délka přeskakování intra</string>\n    <string name=\"pref_intro_length\">Délka přeskočení intra</string>\n    <string name=\"pref_skip_length\">Délka přeskočení při dvojkliku</string>\n    <string name=\"pref_skip_disable\">Vypnout</string>\n    <string name=\"pref_player_smooth_seek\">Povolit přesné vyhledávání</string>\n    <string name=\"pref_player_smooth_seek_summary\">Pokud je zapnuté, vyhledávání nebude zaměřeno na klíčové snímky, což způsobuje pomalejší, ale přesnější vyhledávání</string>\n    <string name=\"pref_category_double_tap\">Dvojité kliknutí</string>\n    <string name=\"pref_left_double_tap\">Dvojité kliknutí (vlevo)</string>\n    <string name=\"pref_center_double_tap\">Dvojité kliknutí (střed)</string>\n    <string name=\"pref_right_double_tap\">Dvojité kliknutí (vpravo)</string>\n    <string name=\"single_action_none\">Nic</string>\n    <string name=\"single_action_playpause\">Přehrát/Pauza</string>\n    <string name=\"single_action_switch\">Změnit epizodu</string>\n    <string name=\"pref_category_media_controls\">Ovládání médií</string>\n    <string name=\"pref_media_previous\">Minulý</string>\n    <string name=\"pref_media_playpause\">Přehrát/Pauza</string>\n    <string name=\"pref_media_next\">Další</string>\n    <string name=\"pref_player_decoder\">Dekódovač</string>\n    <string name=\"pref_player_decoder_summary\">Hardwarové dekódování, formát pixelů, debandovaní</string>\n    <string name=\"pref_try_hw\">Zkuste hardwarové dekódování</string>\n    <string name=\"pref_debanding_title\">Debandovaní</string>\n    <string name=\"pref_debanding_none\">Nic</string>\n    <string name=\"pref_debanding_cpu\">Procesor</string>\n    <string name=\"pref_debanding_gpu\">Grafická karta</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Použít YUV420P formát pixelů</string>\n    <string name=\"pref_player_subtitle\">Titulky</string>\n    <string name=\"pref_player_subtitle_summary\">Preferované jazyky, whitelist, blacklist</string>\n    <string name=\"pref_player_subtitle_lang\">Preferované jazyky</string>\n    <string name=\"pref_player_audio\">Zvuk</string>\n    <string name=\"pref_player_audio_lang\">Preferované jazyky</string>\n    <string name=\"pref_player_audio_channels\">Zvukové kanály</string>\n    <string name=\"pref_player_audio_channels_auto\">Automatické</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Reverzní stereo</string>\n    <string name=\"pref_player_advanced\">Pokročilé</string>\n    <string name=\"pref_mpv_conf\">Upravit konfigurační soubor MPV pro další nastavení přehrávače</string>\n    <string name=\"video_fit_screen\">Přizpůsobit obraz obrazovce</string>\n    <string name=\"video_crop_screen\">Oříznuto na obrazovku</string>\n    <string name=\"video_stretch_screen\">Roztaženo na obrazovku</string>\n    <string name=\"enable_auto_play\">Automatické přerávání je zapnuté</string>\n    <string name=\"disable_auto_play\">Automatické přerávání je vypnuté</string>\n    <string name=\"player_aniskip_dontskip\">Nepřeskakovat</string>\n    <string name=\"player_aniskip_dontskip_toast\">Přeskočí %s za %d sekund</string>\n    <string name=\"player_aniskip_skip\">Přeskočeno %s</string>\n    <string name=\"no_next_episode\">Další epizoda nenalezena!</string>\n    <string name=\"player_hwdec_mode\">Nastavit výchozí hardwarový dekódovací režim</string>\n    <string name=\"screenshot_show_subs\">Zobrazit titulky ve snímku obrazovky</string>\n    <string name=\"pref_general_summary\">Jazyk aplikace, notifikace</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Safír</string>\n    <string name=\"theme_doom\">Peklo</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"local_source_badge\">Lokální</string>\n    <string name=\"download_notifier_download_finish\">Stahování dokončeno</string>\n    <string name=\"action_hide\">Schovat</string>\n    <string name=\"label_all\">Vše</string>\n    <string name=\"label_category\">Kategorie</string>\n    <string name=\"manga_categories\">Manga Kategorie</string>\n    <string name=\"general_categories\">Kategorie</string>\n    <string name=\"anime_categories\">Anime kategorie</string>\n    <string name=\"entries\">Položky knihovny</string>\n    <string name=\"chapters_episodes\">Kapitoly a epizody</string>\n    <string name=\"episodes\">Epizody</string>\n    <string name=\"backup_settings_warning\">Varování: Zálohování nastavení uloží také vaše stopovací hesla, neposkytujte tento záložní soubor ostatním!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_manga_sources\">Zdroje mangy</string>\n    <string name=\"label_anime_sources\">Zdroje anime</string>\n    <string name=\"label_watched_duration\">Doba sledování</string>\n    <string name=\"label_watched_episodes\">Zhlédnuto</string>\n    <string name=\"pref_library_manga_columns\">Mangy na řádek</string>\n    <string name=\"pref_library_anime_columns\">Anime na řádek</string>\n    <string name=\"pref_bottom_nav_no_history\">Přesunout historii do záložky Více</string>\n    <string name=\"pref_bottom_nav_no_updates\">Přesunout aktualitace do záložky Více</string>\n    <string name=\"pref_bottom_nav_no_manga\">Přesunout Mangy do záložky Více</string>\n    <string name=\"action_filter_unseen\">Nezhlédnuto</string>\n    <string name=\"action_global_manga_search\">Globální vyhledávání mangy</string>\n    <string name=\"action_global_anime_search\">Globální vyhledávání anime</string>\n    <string name=\"action_sort_total_episodes\">Celkem epizod</string>\n    <string name=\"action_sort_last_seen\">Naposledy sledované</string>\n    <string name=\"action_sort_last_checked\">Naposledy zkontrolované</string>\n    <string name=\"action_sort_latest_episode\">Nejnovější epizoda</string>\n    <string name=\"action_sort_last_anime_update\">Poslední aktualizace anime</string>\n    <string name=\"action_sort_unseen_count\">Počet nezhlédnutých epizod</string>\n    <string name=\"action_sort_episode_fetch_date\">Datum načtení epizody</string>\n    <string name=\"action_mark_as_seen\">Označit jako zhlédnuté</string>\n    <string name=\"action_mark_as_unseen\">Označit jako nezhlédnuté</string>\n    <string name=\"action_mark_previous_as_seen\">Označit předchozí jako zhlédnuté</string>\n    <string name=\"action_play_internally\">Hrát uvnitř aplikace</string>\n    <string name=\"action_play_externally\">Hrát mimio aplikaci</string>\n    <string name=\"action_download_unread\">Stáhnout nepřečtené kapitoly</string>\n    <string name=\"action_download_unseen\">Stáhnout nezhlédnuté epizody</string>\n    <string name=\"action_bookmark_episode\">Přidat záložku</string>\n    <string name=\"action_remove_bookmark_episode\">Odebrat záložku</string>\n    <string name=\"action_edit_anime_categories\">Upravit kategorie anime</string>\n    <string name=\"action_edit_manga_categories\">Upravit kategorie mangy</string>\n    <string name=\"action_view_episodes\">Zobrazit epizody</string>\n    <string name=\"action_previous_episode\">Předchozí epizoda</string>\n    <string name=\"action_play\">Přehrát</string>\n    <string name=\"action_next_episode\">Následující epizoda</string>\n    <string name=\"action_screen_fit\">Režim přizpůsobení obrazovky</string>\n    <string name=\"action_show_anime\">Zobrazit anime</string>\n    <string name=\"action_display_download_badge_anime\">Stažené epizody</string>\n    <string name=\"action_display_local_badge_manga\">Lokální zdroj</string>\n    <string name=\"action_display_local_badge_anime\">Lokální anime</string>\n    <string name=\"action_order_by_episode_number\">Podle čísla epizody</string>\n    <string name=\"action_start_download_externally\">Použít stahovač mimo aplikaci</string>\n    <string name=\"action_start_download_internally\">Použít stahovač uvnitř aplikace</string>\n    <string name=\"pref_bottom_nav_style\">Styl spodní navigace</string>\n    <string name=\"default_manga_category\">Výchozí kategorie mangy</string>\n    <string name=\"default_anime_category\">Výchozí kategorie anime</string>\n    <string name=\"pref_manga_library_update_categories_details\">Položky ve vynechaných kategoriích nebudou aktualizovány, i kdyby byly také v zahrnutých kategoriích.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime odebrané z kategorií nebudou aktualizována, ani když jsou zároveň v zahrnutých kategoriích.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Toto rozšíření není z oficiálního seznamu Aniyomi rozšíření.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Vyloučené manga kategorie</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Vyloučené kategorie anime</string>\n    <string name=\"pref_category_external_downloader\">Externí stahovač</string>\n    <string name=\"pref_use_external_downloader\">Vždy používat externí stahovač pro anime</string>\n    <string name=\"pref_external_downloader_selection\">Preference aplikace pro stahování</string>\n    <string name=\"pref_download_new_episodes\">Stáhnout nové epizody</string>\n    <string name=\"auto_download_while_watching\">Automaticky stahovat při sledování</string>\n    <string name=\"download_ahead_info_anime\">Funguje pouze u záznamů v knihovně a pokud je již stažena aktuální a následující epizoda</string>\n    <string name=\"pref_track_on_add_library\">Otevřít nabídku stopování při přidávání do knihovny</string>\n    <string name=\"pref_backup_flags_summary\">Které informace zahrnout v zálohovací složce</string>\n    <string name=\"used_cache_both\">Použito pro anime: %1$s, použito pro mangu: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Vyčistit manga databázi</string>\n    <string name=\"pref_clear_anime_database\">Vyčistit databázi anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Smazat historii položek, které nejsou uloženy ve vaší knihovně</string>\n    <string name=\"pref_clear_anime_database_summary\">Smazat historii anime, které nejsou uložené ve vaší knihovně</string>\n    <string name=\"anime_from_library\">Anime z knihovny</string>\n    <string name=\"downloaded_episodes\">Stažené epizody</string>\n    <string name=\"local_manga_source\">Lokální zdroj mangy</string>\n    <string name=\"local_anime_source\">Lokální zdroj anime</string>\n    <string name=\"episode_not_found\">Epizoda nenalezena</string>\n    <string name=\"local_invalid_episode_format\">Neplatný formát epizody</string>\n    <string name=\"unknown_studio\">Neznámé studio</string>\n    <string name=\"delete_downloads_for_anime\">Smazat stažené epizody?</string>\n    <string name=\"snack_add_to_manga_library\">Přidat do knihovny?</string>\n    <string name=\"snack_add_to_anime_library\">Přidat anime do knihovny?</string>\n    <string name=\"display_mode_episode\">Epizoda %1$s</string>\n    <string name=\"episode_downloading_progress\">Stahování (%d%%)</string>\n    <string name=\"download_error\">Chyba</string>\n    <string name=\"download_paused\">Pozastaveno</string>\n    <string name=\"show_episode_number\">Číslo epizody</string>\n    <string name=\"sort_by_episode_number\">Podle čísla epizody</string>\n    <string name=\"download_unseen\">Neshlédnuto</string>\n    <string name=\"confirm_delete_episodes\">Jste si jistí, že chcete smazat vybrané epizody?</string>\n    <string name=\"also_set_episode_settings_for_library\">Aplijovat také na všechny anime v mé knihovně</string>\n    <string name=\"no_episodes_error\">Nenalezeny žádné epizody</string>\n    <string name=\"watching\">Sleduji</string>\n    <string name=\"currently_reading\">Právě čtené</string>\n    <string name=\"currently_watching\">Právě sledované</string>\n    <string name=\"plan_to_watch\">Plánuji sledovat</string>\n    <string name=\"not_interesting\">Nezajímá mě</string>\n    <string name=\"want_to_read\">Chci přečíst</string>\n    <string name=\"want_to_watch\">Chci sledovat</string>\n    <string name=\"repeating_anime\">Sleduji znovu</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Toto smaže datum sledování této epizody. Jste si jistí?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Resetuje všechny epizody pro toto anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Nenalezeno žádné video</string>\n    <string name=\"notification_new_episodes\">Nalezeny nové epizody</string>\n    <string name=\"information_no_recent_anime\">Nedávno nic nebylo sledováno</string>\n    <string name=\"episode_settings_updated\">Aktualizováno výchozí nastavení epizod</string>\n    <string name=\"download_notifier_download_paused_chapters\">Stahování kapitoly pozastaveno</string>\n    <string name=\"download_notifier_download_paused_episodes\">Stahování epizody pozastaveno</string>\n    <string name=\"channel_new_chapters_episodes\">Aktualizace kapitol/epizod</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Změnit délku intra</string>\n    <string name=\"notification_episodes_single\">Epizoda %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Epizoda %1$s a dalších %2$d</string>\n    <string name=\"notification_episodes_multiple\">Epizody %1$s</string>\n    <string name=\"episode_settings\">Nastavení epizody</string>\n    <string name=\"pref_backup_flags\">Možnosti zálohování</string>\n    <string name=\"label_manga_extensions\">Manga rozšíření</string>\n    <string name=\"label_anime_extensions\">Anime rozšíření</string>\n    <string name=\"label_migration_manga\">Přenést manga</string>\n    <string name=\"label_migration_anime\">Přenést anime</string>\n    <string name=\"settings\">Nastavení</string>\n    <string name=\"download_speed_limit\">Limit rychlosti stahování</string>\n    <string name=\"download_speed_limit_hint\">Nastavte na 0 pro deaktivaci limitu rychlosti.</string>\n    <string name=\"action_display_unseen_badge\">Neviděné epizody</string>\n    <string name=\"action_stop\">Zastavit</string>\n    <string name=\"action_continue\">Pokračovat</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"download_ahead_info\">Funguje pouze v případě, že aktuální kapitola/epizoda + ta následující jsou již staženy.</string>\n    <string name=\"non_library_settings\">Všechny přečtené/shlédnuté položky</string>\n    <string name=\"action_sort_last_manga_update\">Poslední aktualizace mangy</string>\n    <string name=\"action_show_manga\">Zobrazit mangu</string>\n    <string name=\"action_display_show_continue_reading_button\">Pokračovat ve sledování/čtení tlačítko</string>\n    <string name=\"pref_update_only_completely_read\">Přeskočit položky s neviděnými epizodami/nečtenými kapitolami</string>\n    <string name=\"pref_category_delete_chapters\">Smazat kapitoly/epizody</string>\n    <string name=\"pref_remove_after_marked_as_read\">Po ručním označení jako přečtené/shlédnuté</string>\n    <string name=\"pref_remove_after_read\">Po přečtení/shlédnutí automaticky smazat</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Povolit mazání kapitol/epizod uložených do záložek</string>\n    <string name=\"pref_auto_update_manga_sync\">Aktualizovat progres po přečtení/shlédnutí</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aktualizovat progres, když je označeno jako přečtené/shlédnuté</string>\n    <string name=\"pref_clear_chapter_cache\">Vymazat mezipaměť kapitol a epizod</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Vymazat mezipaměť epizod/kapitol při spuštění aplikace</string>\n    <string name=\"clear_database_confirmation\">Jste si jistí? Dokončené epizody a kapitoly a progres u položek, které nejsou v knihovně, budou ztraceny</string>\n    <string name=\"pref_incognito_mode_summary\">Pozastaví vaši historii</string>\n    <string name=\"manga_from_library\">Manga z knihovny</string>\n    <string name=\"also_set_chapter_settings_for_library\">Použít také na všechny mangy v mé knihovně</string>\n    <string name=\"dialog_with_checkbox_reset\">Resetovat všechny kapitoly této mangy</string>\n    <string name=\"download_insufficient_space\">Nelze stáhnout kvůli nedostatku místa v úložisti</string>\n    <string name=\"download_queue_size_warning\">Upozornění: stahování velkých objemů dat může zpomalit zdroje a/nebo blokovat Aniyomi. Klepnutím se dozvíte více.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Vynutit aplikaci, aby znovu zkontrolovala stažené kapitoly a epizody</string>\n    <string name=\"label_player\">Přehrávač</string>\n    <string name=\"pref_player_settings_summary\">Interní přehrávač, gesta, dekodéry, titulky</string>\n    <string name=\"pref_player_internal_summary\">Progres, ovládání, orientace</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"pref_category_controls\">Ovládání</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Povolit gesta v panelech</string>\n    <string name=\"pref_controls_show_loading\">Zobrazit kruh načítání</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Zobrazit ukazatel aktuální kapitoly</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Zobrazí se pouze v případě, že video obsahuje kapitoly</string>\n    <string name=\"pref_controls_display_volume_percentage\">Zobrazit hlasitost jako procento</string>\n    <string name=\"pref_hosters\">Hostitelé</string>\n    <string name=\"pref_hosters_show_failure\">Zobrazit nefunkční hostitele</string>\n    <string name=\"pref_hosters_show_empty\">Zobrazit prázdné hostitele</string>\n    <string name=\"pref_show_system_bar\">Zobrazit stavový řádek systému s ovládacími prvky</string>\n    <string name=\"pref_reduce_motion\">Omezit animace přehrávače</string>\n    <string name=\"pref_player_time_to_disappear\">Skrýt ovládací prvky přehrávače času</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Neprůhlednost panelu</string>\n    <string name=\"pref_category_intro_skip\">Přeskočit úvod</string>\n    <string name=\"pref_enable_intro_skip\">Povolit přeskočení úvodu</string>\n    <string name=\"pref_behavior\">Chování kapitoly</string>\n    <string name=\"action_add_repo_message\">Přidejte další repozitáře do %s. Měla by to být URL adresa končící na „index.min.json“.</string>\n    <string name=\"pref_disable_aniskip_chapter\">Zakázat AniSkip, pokud video již obsahuje kapitoly</string>\n    <string name=\"pref_pip_replace_with_previous\">Nahrazuje možnost Přeskočit 10 sekund možností Předchozí epizoda</string>\n    <string name=\"pref_player_gestures_summary\">Vyhledávání, dvojité klepnutí, ovládání médií</string>\n    <string name=\"pref_category_player_sliders\">Posuvníky</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Vyměnit posuvník hlasitosti a jasu</string>\n    <string name=\"pref_category_player_seeking\">Vyhledávání</string>\n    <string name=\"pref_show_seekbar\">Zobrazit vyhledávací lištu při vyhledávání</string>\n    <string name=\"pref_double_tap_info\">Pokud je gesto klepnutí nastaveno na Vlastní, lze jej přiřadit prostřednictvím input.conf. Kódy kláves jsou 0x10001 pro levou stranu, 0x10002 pro střed a 0x10003 pro pravou stranu.</string>\n    <string name=\"single_action_seek\">Vyhledat</string>\n    <string name=\"single_action_custom\">Vlastní</string>\n    <string name=\"pref_media_info\">Pokud je ovládání médií nastaveno na Vlastní, lze jej přiřadit prostřednictvím input.conf. Kód kláves je 0x10004 pro předchozí, 0x10005 pro přehrávání/pozastavení a 0x10006 pro další.</string>\n    <string name=\"pref_gpu_next_title\">Povolit gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Nové video renderovací backend</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Může opravit černé obrazovky u některých video kodeků, může také zlepšit výkon na úkor kvality</string>\n    <string name=\"pref_player_subtitle_lang_info\">Jazyk(y) titulků, který se má automaticky vybrat u videa s více titulky. Lze použít u dvou- nebo třípísmenných kódů jazyků. Více hodnot lze oddělit čárkou.</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Neplatný kód: \\\"%s\\\"</string>\n    <string name=\"pref_player_subtitle_whitelist\">Seznam povolených</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Seznam povolených titulků. Pokud je definován seznam povolených titulků, použije se první titulek, který obsahuje slovo ze seznamu. Více hodnot lze oddělit čárkou.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Seznam zakázaných</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Seznam zakázaných titulků. Pokud je definován seznam zakázaných, budou všechny titulky obsahující slovo ze seznam zakázaných odfiltrovány. Více hodnot lze oddělit čárkou.</string>\n    <string name=\"pref_player_audio_summary\">Preferované jazyky, korekce výšky tónu, zvukové kanály</string>\n    <string name=\"pref_player_audio_lang_info\">Jazyk(y) zvuku, který se má vybrat jako výchozí u videa s více zvukovými stopami. Lze použít u dvou- nebo třípísmenných kódů jazyků. Více hodnot lze oddělit čárkou.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Povolit korekci výšky tónu</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Zabraňuje tomu, aby se zvuk při vyšších rychlostech stal vysokým a při nižších rychlostech nízkým</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Automatické uložení</string>\n    <string name=\"pref_player_audio_boost_cap\">Limit zvýšení hlasitosti</string>\n    <string name=\"pref_player_custom_button\">Vlastní tlačítka</string>\n    <string name=\"pref_player_custom_button_summary\">Spouštění kódu lua pomocí vlastních tlačítek</string>\n    <string name=\"pref_player_custom_button_header\">Upravit vlastní tlačítka</string>\n    <string name=\"pref_player_custom_button_guide\">Průvodce vlastními tlačítky</string>\n    <string name=\"pref_player_custom_button_empty\">Nemáte žádná vlastní tlačítka. Klepnutím na tlačítko plus vytvořte vlastní tlačítko.</string>\n    <string name=\"pref_player_custom_button_add\">Přidat tlačítko</string>\n    <string name=\"pref_player_custom_button_edit\">Upravit tlačítko</string>\n    <string name=\"pref_player_custom_button_title\">Název</string>\n    <string name=\"pref_player_custom_button_error_exists\">Tlačítko již existuje!</string>\n    <string name=\"pref_player_custom_button_content\">Kód lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Kód lua (při dlouhém stisknutí)</string>\n    <string name=\"pref_player_custom_button_optional\">(volitelné)</string>\n    <string name=\"pref_player_custom_button_delete\">Odstranit tlačítko</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Chcete odstranit tlačítko %s?</string>\n    <string name=\"pref_player_custom_button_startup\">Při spuštění</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_editor\">Editor skriptů</string>\n    <string name=\"pref_player_editor_summary\">Upravujte a vytvářejte nové skripty a možnosti skriptů</string>\n    <string name=\"pref_player_editor_script\">Skripty</string>\n    <string name=\"pref_player_editor_script_opts\">Možnosti skriptu</string>\n    <string name=\"pref_player_no_items\">Adresář neobsahuje žádné položky. Klepnutím na tlačítko plus přidejte nový soubor.</string>\n    <string name=\"editor_unsaved_progress\">Máte neuložené změny. Opravdu se chcete vrátit?</string>\n    <string name=\"editor_save_error\">Nelze uložit soubor</string>\n    <string name=\"editor_save_success\">Soubor uložen</string>\n    <string name=\"editor_action_rename\">Přejmenovat soubor</string>\n    <string name=\"editor_action_delete\">Smazat soubor</string>\n    <string name=\"editor_file_already_exists\">Soubor již existuje</string>\n    <string name=\"editor_invalid_filename\">Neplatný název souboru</string>\n    <string name=\"editor_create_file\">Vytvořit soubor</string>\n    <string name=\"editor_edit_file\">Upravit název souboru</string>\n    <string name=\"editor_filename\">Název souboru</string>\n    <string name=\"editor_create_error\">Nelze vytvořit soubor</string>\n    <string name=\"editor_rename_error\">Nelze přejmenovat soubor</string>\n    <string name=\"editor_delete_error\">Nelze smazat soubor</string>\n    <string name=\"editor_delete_file\">Smazat soubor</string>\n    <string name=\"editor_delete_file_confirmation\">Chcete smazat soubor \\\"%s\\\"?</string>\n    <string name=\"pref_player_advanced_summary\">Uživatelské soubory, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_user_files\">Použít uživatelské soubory MPV</string>\n    <string name=\"pref_mpv_user_files_summary\">Použít soubory v adresáři mpv-config</string>\n    <string name=\"pref_reset_mpv_conf\">Resetovat konfigurační soubor MPV</string>\n    <string name=\"pref_mpv_input\">Upravit vstupní soubor MPV pro konfiguraci mapování klávesnice</string>\n    <string name=\"player_skip_action\">Přeskočit %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s přeskočeno</string>\n    <string name=\"player_chapter_type_opening\">Úvod</string>\n    <string name=\"player_chapter_type_ending\">Závěr</string>\n    <string name=\"player_chapter_type_recap\">Shrnutí</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Časovač spánku skončil</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Hodnota příliš velká</string>\n    <string name=\"numeric_chooser_value_too_small\">Hodnota příliš malá</string>\n    <string name=\"no_prev_episode\">Předchozí epizoda nebyla nalezena!</string>\n    <string name=\"no_available_videos\">Žádná dostupná videa</string>\n    <string name=\"no_hosters\">Hoster seznam je prázdný</string>\n    <string name=\"no_episode_loaded\">Žádná epizoda načtena</string>\n    <string name=\"select_hoster_from_empty_list\">Hoster vybrán z prázdného seznamu</string>\n    <string name=\"player_sheets_delay_set_as_default\">Nastavit jako výchozí</string>\n    <string name=\"player_sheets_track_delay\">Zpoždění</string>\n    <string name=\"player_sheets_track_palette\">Paleta</string>\n    <string name=\"player_sheets_audio_delay_title\">Zpoždění zvuku</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Zvuk slyšen</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Zvuk zaznamenán</string>\n    <string name=\"player_sheets_sub_delay_title\">Zpoždění titulků</string>\n    <string name=\"player_sheets_sub_delay_speed\">Rychlost</string>\n    <string name=\"player_sheets_sub_delay_delay\">Zpoždění</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primární</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Sekundární</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Obě</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Hlas slyšen</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Text viděn</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Zvuk slyšen</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Zvuk zaznamenán</string>\n    <string name=\"player_sheets_sub_colors_title\">Barvy</string>\n    <string name=\"player_sheets_subtitles_color_text\">Text</string>\n    <string name=\"player_sheets_subtitles_color_border\">Okraj</string>\n    <string name=\"player_sheets_subtitles_color_background\">Pozadí</string>\n    <string name=\"player_sheets_sub_color_red\">Červená</string>\n    <string name=\"player_sheets_sub_color_green\">Zelená</string>\n    <string name=\"player_sheets_sub_color_blue\">Modrá</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alfa</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Nastavení titulků</string>\n    <string name=\"player_sheets_sub_typography_title\">Typografie</string>\n    <string name=\"player_sheets_sub_typography_font\">Písmo</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Velikost písma</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Styl okraje</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Velikost okraje</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Posun stínu</string>\n    <string name=\"player_chapter_type_mixedop\">Smíšený úvod</string>\n    <string name=\"player_sheets_sub_misc_title\">Různé</string>\n    <string name=\"player_sheets_sub_override_ass\">Přepsat ASS/SSA titulky</string>\n    <string name=\"player_sheets_sub_scale\">Měřítko</string>\n    <string name=\"player_sheets_sub_position\">Pozice</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Obrys a stín</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Neprůhledný rámeček</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Pozadí rámečku</string>\n    <string name=\"player_sheets_filters_title\">Filtry</string>\n    <string name=\"player_sheets_filters_brightness\">Jas</string>\n    <string name=\"player_sheets_filters_contrast\">Kontrast</string>\n    <string name=\"player_sheets_filters_gamma\">Gamma</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturace</string>\n    <string name=\"player_sheets_filters_hue\">Odstín</string>\n    <string name=\"player_sheets_filters_warning\">Některé filtry nemusí fungovat s vaším aktuálním ovladačem videa</string>\n    <string name=\"player_sheets_add_ext_audio\">Přidat externí zvukové stopy</string>\n    <string name=\"player_hoster_tap_to_load\">Stisknutím načtete videa</string>\n    <string name=\"player_hoster_failed\">Nepodařilo se načíst videa</string>\n    <string name=\"player_sheets_qualities_title\">Kvality</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Více</string>\n    <string name=\"pref_audio_channels\">Audio kanály</string>\n    <string name=\"player_sheets_stats_page_title\">Stránka výchozích statistik</string>\n    <string name=\"player_sheets_tracks_off\">Vypnuto</string>\n    <string name=\"player_sheets_stats_page_chip\">Strana %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Vlastní tlačítka</string>\n    <string name=\"player_seek_n_seconds\">%d sekund</string>\n    <string name=\"timer_title\">Časovač vypnutí</string>\n    <string name=\"timer_remaining\">%s zbývá</string>\n    <string name=\"timer_picker_enter_timer\">Zadat délku trvání</string>\n    <string name=\"timer_picker_pick_time\">Vybrat délku</string>\n    <string name=\"timer_cancel_timer\">Zrušit aktuální časovač</string>\n    <string name=\"player_sheets_speed_slider_label\">Rychlost</string>\n    <string name=\"player_sheets_speed_make_default\">Nastavit výchozí rychlost</string>\n    <string name=\"pref_audio_pitch_correction_title\">Povolit korekci výšky tónu</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Zabraňuje tomu, aby se zvuk při vyšších rychlostech stal vysokým a při nižších rychlostech nízkým</string>\n    <string name=\"player_sheets_add_ext_sub\">Přidat externí titulky</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Sekundární titulky nebudou mít styl ASS/SSA.</string>\n    <string name=\"player_sheets_chapters_title\">Kapitoly</string>\n    <string name=\"pref_library_rows\">Velikost seznamu</string>\n    <string name=\"pref_preserve_reading_position\">Zachovat pozici čtení v přečtených kapitolách</string>\n    <string name=\"pref_download_slots\">Maximální počet stahování</string>\n    <string name=\"custom_button_settings\">Vlastní tlačítka</string>\n    <string name=\"type\">Typ</string>\n    <string name=\"anime_interval_expected_update\">Nové epizody budou podle předpokladu vydány přibližně za %1$s, kontrolovat to každých %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Toto anime je buď dokončeno, nebo není známo datum vydání.</string>\n    <string name=\"confirm_tracker_update_anime\">Aktualizovat sledovače na epizodu %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Sledovače aktualizovány na kapitolu %d</string>\n    <string name=\"trackers_updated_summary_anime\">Sledovače aktualizovány na epizodu %d</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/cv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Пухмӑшсем, пӗтӗмӗшле ҫӗнетӳ, сыпӑксене туртни</string>\n    <string name=\"manga_categories\">Пухмӑшсем</string>\n    <string name=\"action_display_local_badge_manga\">Вырӑнти ҫӑл куҫран</string>\n    <string name=\"default_manga_category\">Яланхилле пухмӑш</string>\n    <string name=\"pref_clear_manga_database\">Пӗлӗмсен кӗлете тасат</string>\n    <string name=\"pref_clear_manga_database_summary\">Санӑн вулавӑшра упранман манкӑн вуланӑ кун-ҫулне катерт</string>\n    <string name=\"snack_add_to_manga_library\">Манкка вулавăша хушмалла-и?</string>\n    <string name=\"download_error\">Йӑнӑш</string>\n    <string name=\"download_paused\">Вӑхӑтлӑха чарнӑ</string>\n    <string name=\"download_notifier_download_paused_chapters\">Тиеве вӑхӑтлӑха чарнӑ</string>\n    <string name=\"channel_new_chapters_episodes\">Сыпӑксен ҫӗнетӗвӗсем</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/da/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">Kategorier</string>\n    <string name=\"action_display_local_badge_manga\">Lokale manga</string>\n    <string name=\"default_manga_category\">Standard kategori</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga i ekskluderede kategorier vil ikke blive opdateret selv hvis de også er i inkluderede kategorier.</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/de/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Nächste ungesehene Folgen</item>\n        <item quantity=\"other\">Nächste %d Folgen</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">1 Folge</item>\n        <item quantity=\"other\">%1$s Folgen</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Nächste Folge</item>\n        <item quantity=\"other\">Nächste %d Folgen</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Für 1 Titel</item>\n        <item quantity=\"other\">Für %d Titel</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 neue Folge</item>\n        <item quantity=\"other\">%1$d neue Folgen</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d Sekunde</item>\n        <item quantity=\"other\">%d Sekunden</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Folgen %1$s und 1 mehr</item>\n        <item quantity=\"other\">Folgen %1$s und %2$d mehr</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/de/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Zum Beenden erneut auf „Zurück“ drücken</string>\n    <string name=\"action_filter_started\">Gestartet</string>\n    <string name=\"action_sort_airing_time\">Sendezeit</string>\n    <string name=\"action_reorganize_by\">Sortieren nach</string>\n    <string name=\"relative_time_now\">Jetzt</string>\n    <string name=\"pref_library_summary\">Kategorien, globale Aktualisierungen, Kapitelaktionen</string>\n    <string name=\"pref_library_update_show_tab_badge\">Anzahl von Ungelesenem auf dem „Neues“-Symbol anzeigen</string>\n    <string name=\"label_player_settings\">Videoplayer Einstellungen</string>\n    <string name=\"action_search_player_settings\">Videoplayer Einstellungen durchsuchen</string>\n    <string name=\"pref_player_internal\">Interner Videoplayer</string>\n    <string name=\"pref_player_internal_summary\">Videofortschritt, Steuerung, Geräteausrichtung</string>\n    <string name=\"pref_progress_mark_as_seen\">Ab welchem Zeitpunkt die Folge als gesehen markieren</string>\n    <string name=\"pref_preserve_watching_position\">Wiedergabeposition bei gesehenen Folgen erhalten</string>\n    <string name=\"pref_category_player_orientation\">Orientierung</string>\n    <string name=\"rotation_reverse_landscape\">Umgekehrtes Querformat</string>\n    <string name=\"rotation_sensor_portrait\">Sensor-Hochformat</string>\n    <string name=\"rotation_sensor_landscape\">Sensor-Querformat</string>\n    <string name=\"pref_remember_brightness\">Die zuletzt eingestellte Helligkeit merken</string>\n    <string name=\"pref_remember_volume\">Die zuletzt eingestellte Lautstärke merken</string>\n    <string name=\"pref_player_fullscreen\">Inhalte in Bildschirmaussparung anzeigen</string>\n    <string name=\"pref_player_hide_controls\">Player-Bedienelemente beim Öffnen verstecken</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Automatisches Überspringen aktivieren</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Netflix-Stil aktivieren</string>\n    <string name=\"pref_waiting_time_aniskip\">Knopf-Wartezeit</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 Sekunden</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 Sekunden</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 Sekunden</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 Sekunden</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 Sekunden</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 Sekunden</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip-Einstellungen</string>\n    <string name=\"pref_enable_aniskip\">AniSkip aktivieren</string>\n    <string name=\"pref_category_pip\">Bild-im-Bild (PiP)</string>\n    <string name=\"pref_enable_pip\">Aktiviere Nutzung des Bild-im-Bild (PiP) Modus</string>\n    <string name=\"pref_pip_episode_toasts\">Popupbenachrichtigung beim Folgenwechsel im PiP-Modus anzeigen</string>\n    <string name=\"pref_pip_on_exit\">Automatisch in den PiP-Modus wechseln, wenn der Player verlassen wird</string>\n    <string name=\"pref_pip_replace_with_previous\">Ersetzt den 10-Sekunden-überspringen-Knopf mit \\\"Vorherige Folge\\\"</string>\n    <string name=\"pref_category_external_player\">Externer Player</string>\n    <string name=\"pref_always_use_external_player\">Immer externen Player benutzen</string>\n    <string name=\"pref_external_player_preference\">Bevorzugter externer Player</string>\n    <string name=\"pref_player_gestures\">Gesten</string>\n    <string name=\"pref_player_gestures_summary\">Vorspulen, Doppeltippen, Media Steuerung</string>\n    <string name=\"enable_volume_brightness_gestures\">Lautstärke- und Helligkeitsgesten aktivieren</string>\n    <string name=\"pref_category_player_seeking\">Suchen</string>\n    <string name=\"enable_horizontal_seek_gesture\">Horizontale Spul-Geste aktivieren</string>\n    <string name=\"pref_default_intro_length\">Standard-Intro-Überspringungszeit</string>\n    <string name=\"pref_intro_length\">Intro-Überspringungszeit</string>\n    <string name=\"pref_skip_length\">Länge zu überspringen durch doppeltes Tippen</string>\n    <string name=\"pref_skip_disable\">Deaktivieren</string>\n    <string name=\"pref_player_smooth_seek\">Präzises Spulen aktivieren</string>\n    <string name=\"pref_player_smooth_seek_summary\">Falls aktiviert, wird das Spulen auf Keyframes fokussieren, was zu langsamerem, aber präziserem Spulen führt</string>\n    <string name=\"pref_category_double_tap\">Doppeltippen</string>\n    <string name=\"pref_left_double_tap\">Doppeltippen (links)</string>\n    <string name=\"pref_center_double_tap\">Doppeltippen (mitte)</string>\n    <string name=\"pref_right_double_tap\">Doppeltippen (rechts)</string>\n    <string name=\"pref_double_tap_info\">Wenn eine Tippgeste auf individuell eingestellt ist, kann sie durch input.conf bearbeitet werden. Die Schlüsselcodes sind 0x10001 für links, 0x10002 für mittig und 0x10003 für rechts.</string>\n    <string name=\"single_action_none\">Keine</string>\n    <string name=\"single_action_seek\">Vorspulen</string>\n    <string name=\"single_action_playpause\">Wiedergabe/Pause</string>\n    <string name=\"single_action_switch\">Folge wechseln</string>\n    <string name=\"single_action_custom\">Benutzerdefiniert</string>\n    <string name=\"pref_category_media_controls\">Mediensteuerung</string>\n    <string name=\"pref_media_previous\">Vorherige</string>\n    <string name=\"pref_media_playpause\">Wiedergabe/Pause</string>\n    <string name=\"pref_media_next\">Nächste</string>\n    <string name=\"pref_media_info\">Wenn eine Media Steuerung auf individuell eingestellt ist, kann man sie in input.conf bearbeiten. Die Schlüsselcodes sind 0x10004 für \\\"vorherige\\\", 0x10005 für Abspielen/Pausieren und 0x10006 für \\\"nächste\\\".</string>\n    <string name=\"pref_player_decoder\">Decodierer</string>\n    <string name=\"pref_player_decoder_summary\">Hardwaredekodierung, Pixelformat, debanding</string>\n    <string name=\"pref_try_hw\">Hardwaredekodierung versuchen</string>\n    <string name=\"pref_gpu_next_title\">GPU-Next aktivieren</string>\n    <string name=\"pref_gpu_next_subtitle\">Ein neues Video-Rendering-Backend</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Keine</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">YUV420P-Pixelformat verwenden</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Kann ein schwarzes Bild bei manchen Codierungen beheben, kann außerdem Leistung erhöhen, jedoch wird die Qualität verschlechtert</string>\n    <string name=\"pref_player_subtitle\">Untertitel</string>\n    <string name=\"pref_player_subtitle_summary\">Bevorzugte Sprachen, Whitelist, Blacklist</string>\n    <string name=\"pref_player_subtitle_lang\">Bevorzugte Sprachen</string>\n    <string name=\"pref_player_subtitle_lang_info\">Untertitel Sprache(n), die standardmäßig bei einem Video mit mehreren Untertitelsprachen ausgewählt werden. Sprachen mit zwei oder drei Buchstabencodes sind möglich. Mehrere Werte müssen mit einem Komma getrennt sein.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Whitelist</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Whitelist für Untertitel. Wenn eine Whitelist existiert, wird der erste Untertitel, der ein Wort aus der Whitelist enthält, ausgewählt. Mehrere Angaben müssen mit einem Komma getrennt sein.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Blacklist</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Blacklist für Untertitel. Wenn eine Blacklist existiert, werden alle Untertitel, die ein Wort aus der Blacklist enthalten, ausgeblendet. Mehrere Angaben müssen mit einem Komma getrennt sein.</string>\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Bevorzugte Sprachen, Tonhöhenanpassung, Audiokanäle</string>\n    <string name=\"pref_player_audio_lang\">Bevorzugte Sprachen</string>\n    <string name=\"pref_player_audio_lang_info\">Audiosprache(n), die standardmäßig bei einem Video mit mehreren Audiospracheb ausgewählt werden. Sprachen mit Zwei- oder Drei-Buchstabencodes sind möglich. Mehrere Angaben müssen mit einem Komma getrennt sein.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Tonhöhenanpassung aktivieren</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Verhindert, dass Audio durch schnellere Videogeschwindigkeiten in einer höheren Tonlage abgespielt werden und durch langsamere Geschwindigkeiten in einer tieferen.</string>\n    <string name=\"pref_player_audio_channels\">Audiokanäle</string>\n    <string name=\"pref_player_audio_channels_auto\">Automatisch</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Stereo (Umgekehrt)</string>\n    <string name=\"pref_player_audio_boost_cap\">Lautstärkenboostlimit</string>\n    <string name=\"pref_player_advanced\">Erweiterte Einstellungen</string>\n    <string name=\"pref_player_advanced_summary\">Skripte, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">MPV-Konfigurationsdatei für weitere Player-Einstellungen bearbeiten</string>\n    <string name=\"pref_reset_mpv_conf\">MPV-Konfigurationsdatei zurücksetzen</string>\n    <string name=\"pref_mpv_input\">MPV-Eingabedatei für Tastaturbelegung bearbeiten</string>\n    <string name=\"video_fit_screen\">Dem Bildschirm anpassen</string>\n    <string name=\"video_crop_screen\">Auf Bildschirm zuschneiden</string>\n    <string name=\"video_stretch_screen\">Auf den Bildschirm strecken</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"enable_auto_play\">Automatische Wiedergabe ist an</string>\n    <string name=\"disable_auto_play\">Automatische Wiedergabe ist aus</string>\n    <string name=\"player_aniskip_dontskip\">Nicht überspringen</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s wird in %d Sekunden übersprungen</string>\n    <string name=\"player_aniskip_skip\">%s übersprungen</string>\n    <string name=\"no_next_episode\">Nächste Folge nicht gefunden!</string>\n    <string name=\"player_hwdec_mode\">Standard Hardware-Dekodierung wählen</string>\n    <string name=\"screenshot_show_subs\">Untertitel in Bildschirmfoto zeigen</string>\n    <string name=\"pref_general_summary\">App-Sprache, Benachrichtigungen</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Saphir</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_preserve_reading_position\">Lesefortschritt bei gelesenen Kapiteln speichern</string>\n    <string name=\"pref_download_slots\">Maximale Downloads</string>\n    <string name=\"local_source_badge\">Lokal</string>\n    <string name=\"anime_interval_expected_update\">Voraussichtliche Veröffentlichung einer neuen Episode in %1$s, Aktualisierung alle %2$s</string>\n    <string name=\"anime_interval_expected_update_null\">Der Anime ist entweder beendet oder es gibt kein vorhergesehendes Veröffentlichungsdatum.</string>\n    <string name=\"confirm_tracker_update_anime\">Tracker auf Folge %d aktuellisieren?</string>\n    <string name=\"trackers_updated_summary_manga\">Tracker wurden auf Kapitel %d aktuellisiert</string>\n    <string name=\"trackers_updated_summary_anime\">Tracker wurden auf Folge %d aktuellisiert</string>\n    <string name=\"download_notifier_download_finish\">Download abgeschlossen</string>\n    <string name=\"action_hide\">Ausblenden</string>\n    <string name=\"label_all\">Alle</string>\n    <string name=\"label_category\">Kategorie</string>\n    <string name=\"manga_categories\">Manga-Kategorien</string>\n    <string name=\"general_categories\">Kategorien</string>\n    <string name=\"anime_categories\">Anime-Kategorien</string>\n    <string name=\"entries\">Bibliothekseinträge</string>\n    <string name=\"chapters_episodes\">Kapitel und Folgen</string>\n    <string name=\"episodes\">Folgen</string>\n    <string name=\"backup_settings_warning\">Warnung: Wenn du die Einstellungen sicherst, werden auch deine Passwörter zu Trackingdiensten gespeichert, teile deine Sicherungsdatei mit niemandem!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Anime-Aktualisierungen</string>\n    <string name=\"label_manga_sources\">Manga-Quellen</string>\n    <string name=\"label_anime_sources\">Anime-Quellen</string>\n    <string name=\"label_watched_duration\">Gesehene Dauer</string>\n    <string name=\"label_watched_episodes\">Gesehen</string>\n    <string name=\"pref_start_screen\">Startbildschirm</string>\n    <string name=\"pref_library_manga_columns\">Mangaeinträge pro Zeile</string>\n    <string name=\"pref_library_anime_columns\">Animeeinträge pro Zeile</string>\n    <string name=\"pref_bottom_nav_no_history\">Verschiebe Verlauf in den Mehr-Tab</string>\n    <string name=\"pref_bottom_nav_no_updates\">Verschiebe Neues in den Mehr-Tab</string>\n    <string name=\"pref_bottom_nav_no_manga\">Verschiebe Manga in den Mehr-Tab</string>\n    <string name=\"pref_bottom_nav_no_browse\">Verschieben Sie „Durchsuchen“ auf die Registerkarte „Mehr“</string>\n    <string name=\"action_filter_unseen\">Ungesehen</string>\n    <string name=\"action_global_manga_search\">Globale Mangasuche</string>\n    <string name=\"action_global_anime_search\">Globale Animesuche</string>\n    <string name=\"action_sort_total_episodes\">Folgenanzahl</string>\n    <string name=\"action_sort_last_seen\">Zuletzt gesehen</string>\n    <string name=\"action_sort_last_checked\">Zuletzt überprüft</string>\n    <string name=\"action_sort_latest_episode\">Neueste Folge</string>\n    <string name=\"action_sort_last_anime_update\">Letzte Anime-Aktualisierung</string>\n    <string name=\"action_sort_unseen_count\">Anzahl ungesehener Folgen</string>\n    <string name=\"action_sort_episode_fetch_date\">Aubrufdatum der Folge</string>\n    <string name=\"action_mark_as_seen\">Als gesehen markieren</string>\n    <string name=\"action_mark_as_unseen\">Als ungesehen markieren</string>\n    <string name=\"action_mark_previous_as_seen\">Vorherige Folgen als gesehen markieren</string>\n    <string name=\"action_play_internally\">Mit internem Player abspielen</string>\n    <string name=\"action_play_externally\">Mit externem Player abspielen</string>\n    <string name=\"action_download_unread\">Ungelesene Kapitel herunterladen</string>\n    <string name=\"action_download_unseen\">Ungesehene Folgen herunterladen</string>\n    <string name=\"action_bookmark_episode\">Lesezeichen setzen</string>\n    <string name=\"action_remove_bookmark_episode\">Lesezeichen entfernen</string>\n    <string name=\"action_edit_anime_categories\">Anime-Kategorien bearbeiten</string>\n    <string name=\"action_edit_manga_categories\">Manga-Kategorien bearbeiten</string>\n    <string name=\"action_view_episodes\">Folgen anzeigen</string>\n    <string name=\"action_previous_episode\">Vorherige Folge</string>\n    <string name=\"action_play\">Abspielen</string>\n    <string name=\"action_next_episode\">Nächste Folge</string>\n    <string name=\"action_screen_fit\">Bildschirmanpassungsmodus</string>\n    <string name=\"action_show_anime\">Anime anzeigen</string>\n    <string name=\"action_display_download_badge_anime\">Heruntergeladene Folgen</string>\n    <string name=\"action_display_local_badge_manga\">Lokale Quelle</string>\n    <string name=\"action_display_local_badge_anime\">Lokale Animequelle</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">In der globalen Suche nur angeheftete Mangaquellen durchsuchen</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">In der globalen Suche nur angeheftete Animequellen durchsuchen</string>\n    <string name=\"pref_hide_in_manga_library_items\">Mangaeinträge verstecken, die schon in der Bibliothek sind</string>\n    <string name=\"pref_hide_in_anime_library_items\">Animeeinträge verstecken, die schon in der Bibliothek sind</string>\n    <string name=\"action_order_by_episode_number\">Nach Folgennummer</string>\n    <string name=\"action_start_download_externally\">Externen Downloader benutzen</string>\n    <string name=\"action_start_download_internally\">Internen Downloader benutzen</string>\n    <string name=\"pref_bottom_nav_style\">Stil der unteren Navigation</string>\n    <string name=\"pref_default_home_tab_library\">Startbildschirm zum Manga-Tab setzen</string>\n    <string name=\"default_manga_category\">Standard-Mangakategorie</string>\n    <string name=\"default_anime_category\">Standard-Animekategorie</string>\n    <string name=\"pref_manga_library_update_categories_details\">Einträge in ausgeschlossenen Kategorien werden nicht aktualisiert, auch wenn sie in eingeschlossenen Kategorien vorhanden sind.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime in ausgeschlossenen Kategorien werden nicht aktualisiert, auch wenn sie in eingeschlossenen Kategorien vorhanden sind.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Diese Erweiterung stammt nicht von der offiziellen Aniyomi-Erweiterungsliste.</string>\n    <string name=\"unofficial_anime_extension_message\">Diese Erweiterung kommt nicht von der offiziellen Aniyomi Erweiterungs Liste.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Ausgeschlossene Kategorien</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Ausgeschlossene Anime-Kategorien</string>\n    <string name=\"pref_category_external_downloader\">Externer Downloader</string>\n    <string name=\"pref_use_external_downloader\">Immer externen Downloader zum Herunterladen von Anime benutzen</string>\n    <string name=\"pref_external_downloader_selection\">Bevorzugte Downloader-App</string>\n    <string name=\"pref_download_new_episodes\">Neue Folgen herunterladen</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Verhindere das doppelte Herunterladen von gesehen Folgen</string>\n    <string name=\"auto_download_while_watching\">Beim Schauen automatisch herunterladen</string>\n    <string name=\"download_ahead_info_anime\">Funktioniert nur mit Bibliothekseinträgen und wenn die aktuelle Folge und die nächste bereits heruntergeladen sind</string>\n    <string name=\"pref_track_on_add_library\">Beim Hinzufügen zur Bibliothek das Tracking-Menü öffnen</string>\n    <string name=\"pref_show_next_episode_airing_time\">Sendezeit der nächsten Folge anzeigen</string>\n    <string name=\"pref_backup_flags_summary\">Welche Informationen in der Sicherungsdatei enthalten sind</string>\n    <string name=\"pref_anime_storage_usage\">Anime-Speicherverbrauch</string>\n    <string name=\"pref_manga_storage_usage\">Manga-Speicherverbrauch</string>\n    <string name=\"used_cache_both\">Von Anime verwendet: %1$s, von Manga verwendet: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Datenbank leeren</string>\n    <string name=\"pref_clear_anime_database\">Anime-Datenbank leeren</string>\n    <string name=\"pref_clear_manga_database_summary\">Verlauf für Einträge löschen, die nicht in deiner Bibliothek gespeichert sind</string>\n    <string name=\"pref_clear_anime_database_summary\">Verlauf für Anime-Einträge löschen, die nicht in deiner Bibliothek gespeichert sind</string>\n    <string name=\"anime_from_library\">Anime aus der Bibliothek</string>\n    <string name=\"downloaded_episodes\">Heruntergeladene Folgen</string>\n    <string name=\"local_manga_source\">Lokale Manga-Quelle</string>\n    <string name=\"local_anime_source\">Lokale Anime-Quelle</string>\n    <string name=\"episode_not_found\">Folge nicht gefunden</string>\n    <string name=\"local_invalid_episode_format\">Ungültiges Folgen-Format</string>\n    <string name=\"unknown_studio\">Unbekanntes Studio</string>\n    <string name=\"delete_confirmation\">Sind Sie sicher, dass Sie \\\"%s\\\" löschen möchten?</string>\n    <string name=\"delete_downloads_for_anime\">Heruntergeladene Folgen löschen?</string>\n    <string name=\"snack_add_to_manga_library\">Zur Bibliothek hinzufügen?</string>\n    <string name=\"snack_add_to_anime_library\">Anime zur Bibliothek hinzufügen?</string>\n    <string name=\"display_mode_episode\">Folge %1$s</string>\n    <string name=\"episode_downloading_progress\">Lädt herunter (%d%%)</string>\n    <string name=\"download_error\">Fehler</string>\n    <string name=\"download_paused\">Pausiert</string>\n    <string name=\"show_episode_number\">Folgennummer</string>\n    <string name=\"sort_by_episode_number\">Nach Folgennummer</string>\n    <string name=\"download_unseen\">Ungesehene</string>\n    <string name=\"confirm_delete_episodes\">Bist du sicher, dass du die ausgewählten Folgen löschen willst?</string>\n    <string name=\"also_set_episode_settings_for_library\">Auch für alle Anime in meiner Bibliothek anwenden</string>\n    <string name=\"no_episodes_error\">Keine Folgen gefunden</string>\n    <string name=\"watching\">Am Schauen</string>\n    <string name=\"currently_reading\">Am Lesen</string>\n    <string name=\"currently_watching\">Am Schauen</string>\n    <string name=\"plan_to_watch\">Plane ich zu schauen</string>\n    <string name=\"not_interesting\">Nicht interessant</string>\n    <string name=\"want_to_read\">Will ich lesen</string>\n    <string name=\"want_to_watch\">Will ich schauen</string>\n    <string name=\"repeating_anime\">Am Wiederschauen</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Das Datum dieser Folge wird gelöscht. Bist du sicher?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Alle Folgen dieses Animes zurücksetzen</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Fortschritt: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Fortschritt: %1$s</string>\n    <string name=\"recent_anime_time\">Flg. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Kein Video gefunden</string>\n    <string name=\"notification_new_episodes\">Neue Folgen gefunden</string>\n    <string name=\"information_no_recent_anime\">Nichts kürzlich geschaut</string>\n    <string name=\"episode_settings_updated\">Standard-Folgeneinstellungen aktualisiert</string>\n    <string name=\"download_notifier_download_paused_chapters\">Download pausiert</string>\n    <string name=\"download_notifier_download_paused_episodes\">Folgendownload pausiert</string>\n    <string name=\"channel_new_chapters_episodes\">Kapitelaktualisierungen</string>\n    <string name=\"label_storage\">Speicher</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Intro-Länge ändern</string>\n    <string name=\"notification_episodes_single\">Folge %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Folge %1$s und %2$d mehr</string>\n    <string name=\"notification_episodes_multiple\">Folgen %1$s</string>\n    <string name=\"episode_settings\">Folgeneinstellungen</string>\n    <string name=\"pref_backup_flags\">Sicherungsoptionen</string>\n    <string name=\"label_manga_extensions\">Manga-Erweiterungen</string>\n    <string name=\"label_anime_extensions\">Anime-Erweiterungen</string>\n    <string name=\"label_migration_manga\">Manga migrieren</string>\n    <string name=\"label_migration_anime\">Anime migrieren</string>\n    <string name=\"settings\">Einstellungen</string>\n    <string name=\"copied_video_link_to_clipboard\">Videolink in die Zwischenablage kopiert</string>\n    <string name=\"choose_video_quality\">Videoqualität auswählen:</string>\n    <string name=\"extension_settings\">Erweiterungs-Einstellungen</string>\n    <string name=\"theme_cottoncandy\">Zuckerwatte</string>\n    <string name=\"theme_mocha\">Mokka</string>\n    <string name=\"pref_episode_swipe_end\">Aktion beim Streichen nach rechts</string>\n    <string name=\"pref_episode_swipe_start\">Aktion beim Streichen nach links</string>\n    <string name=\"pref_category_hide_hidden\">Versteckte Kategorien in den Kategorien und auf dem Speicher-Bildschirm ausblenden</string>\n    <string name=\"pref_update_anime_release_grace_period\">Gnadenfrist für die erwartete Veröffentlichung von Anime</string>\n    <string name=\"data_saver_exclude\">Vom Datensparer ausschließen</string>\n    <string name=\"data_saver_stop_exclude\">Nicht vom Datensparer ausschließen</string>\n    <string name=\"data_saver\">Datensparer</string>\n    <string name=\"data_saver_summary\">Bilder komprimieren, bevor sie heruntergeladen oder im Leser angezeigt werden</string>\n    <string name=\"data_saver_downloader\">Datensparer im Downloader verwenden</string>\n    <string name=\"data_saver_ignore_jpeg\">Jpeg-Bilder ignorieren</string>\n    <string name=\"data_saver_ignore_gif\">Gif-Animationen ignorieren</string>\n    <string name=\"data_saver_image_quality\">Bildqualität</string>\n    <string name=\"data_saver_image_quality_summary\">Höhere Werte bedeuten, dass ein höherer Prozentsatz der Bildqualität erhalten bleibt, aber gleichzeitig wird die Dateigröße größer. 80 Prozent ist ein guter Kompromiss aus Dateigröße und Bildqualität</string>\n    <string name=\"data_saver_image_format\">Zu Jpeg komprimieren</string>\n    <string name=\"data_saver_image_format_summary_on\">Die Jpeg-Datei ist wesentlich kleiner als die Webp-Datei (das heißt es werden mehr Daten gespeichert), aber die Qualität der Bilder nimmt dadurch auch zu.\n\\nDerzeit komprimiert zu Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Die Jpeg-Datei ist wesentlich kleiner als die Webp-Datei (d. h. es werden mehr Daten gespeichert), aber die Bilder verlieren dadurch auch an Qualität.\n\\nDerzeit komprimiert zu Webp</string>\n    <string name=\"data_saver_color_bw\">In Schwarz-Weiß konvertieren</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (erfordert einen Bandwidth Hero Proxy-Server)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy-Server</string>\n    <string name=\"data_saver_server_summary\">Bandwidth Hero Proxy-Server-URL hier eingeben</string>\n    <string name=\"download_slots_info\">Gleichzeitiges Herunterladen nur von selbst gehosteten oder ungetakteten Quellen</string>\n    <string name=\"unseen\">Ungesehen</string>\n    <string name=\"label_manga_extension_repos\">Manga-Erweiterungs-Bibliotheken</string>\n    <string name=\"label_anime_extension_repos\">Anime-Erweiterungs-Bibliotheken</string>\n    <string name=\"onboarding_storage_action_create_folder\">Standard-Aniyomi-Ordner erstellen</string>\n    <string name=\"download_speed_limit\">Download-Geschwindigkeitsbegrenzung</string>\n    <string name=\"download_speed_limit_hint\">Auf 0 setzen, um Geschwindigkeitsbegrenzung zu deaktivieren.</string>\n    <string name=\"action_display_unseen_badge\">Ungesehene Folgen</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Kapitelverhalten</string>\n    <string name=\"action_add_repo_message\">Füge zusätzliche Repositorys zu %s hinzu. Deren URLs sollten mit „index.min.json“ enden.</string>\n    <string name=\"download_ahead_info\">Funktioniert nur, wenn das/die aktuelle Kapitel/Folge sowie das/die darauf folgende bereits heruntergeladen sind.</string>\n    <string name=\"non_library_settings\">Alle gelesenen/gesehenen Einträge</string>\n    <string name=\"action_sort_last_manga_update\">Letzte Manga-Aktualisierungsprüfung</string>\n    <string name=\"action_show_manga\">Manga anzeigen</string>\n    <string name=\"action_display_show_continue_reading_button\">Weiterlesen/Weiterschauen-Button</string>\n    <string name=\"pref_update_only_completely_read\">Einträge mit ungelesen Kapiteln/ungesehenen Folgen überspringen</string>\n    <string name=\"pref_category_delete_chapters\">Kapitel/Folgen löschen</string>\n    <string name=\"pref_remove_after_marked_as_read\">Nachdem manuell als gelesen/gesehen markiert</string>\n    <string name=\"pref_remove_after_read\">Automatisch nach dem Lesen/Schauen löschen</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Erlauben, mit Lesezeichen versehene Kapitel/Folgen zu löschen</string>\n    <string name=\"pref_auto_update_manga_sync\">Fortschritt nach dem Lesen/Schauen aktualisieren</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Fortschritt aktualisieren, wenn als gelesen/gesehen markiert wird</string>\n    <string name=\"pref_clear_chapter_cache\">Kapitel- und Folgen-Zwischenspeicher leeren</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Kapitel- und Folgen-Zwischenspeicher beim Öffnen der App löschen</string>\n    <string name=\"clear_database_confirmation\">Bist du dir sicher? Die gelesenen Kapitel/gesehenen Folgen und Fortschritte von Einträgen, die nicht in deiner Bibliothek sind, werden gelöscht</string>\n    <string name=\"pref_incognito_mode_summary\">Verlauf pausieren</string>\n    <string name=\"manga_from_library\">Manga aus der Bibliothek</string>\n    <string name=\"also_set_chapter_settings_for_library\">Auch für alle Mangas in meiner Bibliothek anwenden</string>\n    <string name=\"dialog_with_checkbox_reset\">Alle Kapitel dieses Mangas zurücksetzen</string>\n    <string name=\"download_insufficient_space\">Herunterladen aufgrund von zu wenig Speicherplatz nicht möglich</string>\n    <string name=\"download_queue_size_warning\">Achtung: Große Downloads könnten dazu führen, dass Quellen langsamer werden und/oder Aniyomi blockieren. Tippe, um mehr zu erfahren.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">App zwingen, heruntergeladene Kapitel und Folgen erneut zu überprüfen</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"pref_category_controls\">Bedienelemente</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Gesten in Einstellungs-Panels erlauben</string>\n    <string name=\"pref_controls_show_loading\">Ladekreis anzeigen</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Aktuelles Kapitel anzeigen</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Ist nur sichtbar, wenn das Video Kapitel hat</string>\n    <string name=\"pref_controls_display_volume_percentage\">Lautstärke in Prozent anzeigen</string>\n    <string name=\"pref_hosters\">Hoster</string>\n    <string name=\"pref_hosters_show_failure\">Fehlerhafte Hoster anzeigen</string>\n    <string name=\"pref_hosters_show_empty\">Leere Hoster anzeigen</string>\n    <string name=\"pref_show_system_bar\">System-Statusleiste mit den Bedienelementen anzeigen</string>\n    <string name=\"pref_reduce_motion\">Player-Animationen reduzieren</string>\n    <string name=\"pref_player_time_to_disappear\">Einblendedauer Player-Bedienelemente</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_category_intro_skip\">Intros überspringen</string>\n    <string name=\"pref_enable_intro_skip\">Intros überspringen aktivieren</string>\n    <string name=\"pref_disable_aniskip_chapter\">AniSkip deaktivieren, falls das Video schon Kapitel enthält</string>\n    <string name=\"pref_behavior_episode\">Episoden-Verhalten</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Doppelt gesehene Episode als gesehen markieren</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Nach dem schauen einer Episode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Nach dem Abrufen einer neuen Episode</string>\n    <string name=\"pref_panel_opacity\">Deckkraft des Panels</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Lautstärke- und Helligkeitsregler tauschen</string>\n    <string name=\"action_stop\">Stop</string>\n    <string name=\"action_continue\">Fortfahren</string>\n    <string name=\"pref_category_player_sliders\">Schieberegler</string>\n    <string name=\"pref_show_seekbar\">Suchleiste beim Suchen anzeigen</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Ungültiger Code: \\\"%s\\\"</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Auto-Speichern</string>\n    <string name=\"pref_player_custom_button\">Benutzerdefinierte Schaltflächen</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/el/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Κατηγορίες, καθολική ενημέρωση, σύρσιμο κεφαλαίου</string>\n    <string name=\"pref_library_update_show_tab_badge\">Εμφάνιση του αριθμού των μη αναγνωσμένων στο εικονίδιο Ενημερώσεις</string>\n    <string name=\"manga_categories\">Κατηγορίες</string>\n    <string name=\"action_display_local_badge_manga\">Τοπική πηγή</string>\n    <string name=\"default_manga_category\">Προεπιλεγμένη κατηγορία</string>\n    <string name=\"pref_manga_library_update_categories_details\">Οι καταχωρίσεις σε εξαιρούμενες κατηγορίες δε θα ενημερώνονται ακόμη και αν περιλαμβάνονται επίσης σε κατηγορίες που περιλαμβάνονται.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Εξαιρούμενες κατηγορίες</string>\n    <string name=\"pref_clear_manga_database\">Καθαρισμός βάσης δεδομένων</string>\n    <string name=\"pref_clear_manga_database_summary\">Διαγραφή ιστορικού για καταχωρήσεις που δεν έχουν αποθηκευτεί στη βιβλιοθήκη σας</string>\n    <string name=\"snack_add_to_manga_library\">Προσθήκη στη βιβλιοθήκη;</string>\n    <string name=\"download_error\">Σφάλμα</string>\n    <string name=\"download_paused\">Παύση</string>\n    <string name=\"download_notifier_download_paused_chapters\">Λήψη σε παύση</string>\n    <string name=\"channel_new_chapters_episodes\">Ενημερώσεις κεφαλαίων</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/eo/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">Kategorioj</string>\n    <string name=\"action_display_local_badge_manga\">Lokaj ŝildoj</string>\n    <string name=\"default_manga_category\">Defaŭlta kategorio</string>\n    <string name=\"pref_clear_manga_database\">Viŝi datumbazon</string>\n    <string name=\"snack_add_to_manga_library\">Ĉu aldoni mangaon al biblioteko?</string>\n    <string name=\"download_error\">Eraro</string>\n    <string name=\"download_paused\">Paŭzigita</string>\n    <string name=\"download_notifier_download_paused_chapters\">Elŝutito paŭzigita</string>\n    <string name=\"channel_new_chapters_episodes\">Ĉapitraj ĝisdatigoj</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/es/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Siguiente episodio sin ver</item>\n        <item quantity=\"many\">Siguientes %d episodios sin ver</item>\n        <item quantity=\"other\">Siguientes %d episodios sin ver</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s episodio</item>\n        <item quantity=\"many\">%1$s episodios</item>\n        <item quantity=\"other\">%1$s episodios</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Siguiente episodio</item>\n        <item quantity=\"many\">Próximos %d episodios</item>\n        <item quantity=\"other\">Próximos %d episodios</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Para 1 título</item>\n        <item quantity=\"many\">Para %d títulos</item>\n        <item quantity=\"other\">Para %d títulos</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 nuevo episodio</item>\n        <item quantity=\"many\">%1$d nuevos episodios</item>\n        <item quantity=\"other\">%1$d nuevos episodios</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d segundo</item>\n        <item quantity=\"many\">%d segundos</item>\n        <item quantity=\"other\">%d segundos</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Episodios %1$s y 1 más</item>\n        <item quantity=\"many\">Episodios %1$s y %2$d más</item>\n        <item quantity=\"other\">Episodios %1$s y %2$d más</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/es/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Presione Atrás nuevamente para salir</string>\n    <string name=\"action_filter_started\">Iniciado</string>\n    <string name=\"action_sort_airing_time\">Fecha de retransmisión</string>\n    <string name=\"action_reorganize_by\">Reordenar</string>\n    <string name=\"relative_time_now\">Ahora</string>\n    <string name=\"pref_library_summary\">Categorías, actualizaciones generales y acciones al deslizar el dedo</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostrar el recuento de no vistos/no leídos en el icono actualizaciones</string>\n    <string name=\"label_player_settings\">Ajustes del reproductor</string>\n    <string name=\"action_search_player_settings\">Buscar ajustes del reproductor</string>\n    <string name=\"pref_player_internal\">Reproductor interno</string>\n    <string name=\"pref_player_internal_summary\">Progreso, controles, orientación</string>\n    <string name=\"pref_progress_mark_as_seen\">A qué punto marcar el episodio como visto</string>\n    <string name=\"pref_preserve_watching_position\">Obtener la posición de reproducción en los episodios vistos</string>\n    <string name=\"pref_category_player_orientation\">Orientación</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Paisaje invertido</string>\n    <string name=\"rotation_sensor_portrait\">Retrato del sensor</string>\n    <string name=\"rotation_sensor_landscape\">Paisaje de sensores</string>\n    <string name=\"pref_category_controls\">Controles</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Permitir gestos en paneles</string>\n    <string name=\"pref_controls_show_loading\">Mostrar círculo de carga</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Mostrar indicador de capítulo actual</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Solo aparece si el vídeo tiene capítulos</string>\n    <string name=\"pref_controls_display_volume_percentage\">Mostrar el volumen como porcentaje</string>\n    <string name=\"pref_remember_brightness\">Recordar y cambiar al último brillo utilizado</string>\n    <string name=\"pref_remember_volume\">Recordar y cambiar al último volumen utilizado</string>\n    <string name=\"pref_player_fullscreen\">Mostrar contenido en el área recortada de la pantalla</string>\n    <string name=\"pref_player_hide_controls\">Ocultar los controles del reproducción cuando se abre el reproductor</string>\n    <string name=\"pref_show_system_bar\">Mostrar la barra de estado del sistema con controles</string>\n    <string name=\"pref_reduce_motion\">Reducir la animación del reproductor</string>\n    <string name=\"pref_player_time_to_disappear\">Ocultar los controles de tiempo del reproductor</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Opacidad del panel</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Activar el salto automático</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Activar el estilo Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Tiempo de espera del botón</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 segundos</string>\n    <string name=\"pref_category_player_aniskip_info\">Ajustes de AniSkip</string>\n    <string name=\"pref_enable_aniskip\">Activar AniSkip</string>\n    <string name=\"pref_category_pip\">Imagen en imagen (PiP)</string>\n    <string name=\"pref_enable_pip\">Habilitar el uso del modo PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Mostrar una notificación emergente al cambiar de episodio en el modo PiP</string>\n    <string name=\"pref_pip_on_exit\">Automáticamente cambiar al modo PIP al salir del reproductor</string>\n    <string name=\"pref_pip_replace_with_previous\">Sustituir la opción saltar 10 segundos por episodio anterior</string>\n    <string name=\"pref_category_external_player\">Reproductor externo</string>\n    <string name=\"pref_always_use_external_player\">Siempre usar reproductor externo</string>\n    <string name=\"pref_external_player_preference\">Preferencia de reproductor externo</string>\n    <string name=\"pref_player_gestures\">Gestos</string>\n    <string name=\"pref_player_gestures_summary\">Búsqueda, doble toque, controles multimedia</string>\n    <string name=\"pref_category_player_sliders\">Controles deslizantes</string>\n    <string name=\"enable_volume_brightness_gestures\">Gestos para cambiar el volumen y el brillo</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Intercambiar el control deslizante de volumen y brillo</string>\n    <string name=\"pref_category_player_seeking\">En curso</string>\n    <string name=\"enable_horizontal_seek_gesture\">Alternar con el gesto de la búsqueda horizontal</string>\n    <string name=\"pref_show_seekbar\">Mostrar barra de búsqueda al buscar</string>\n    <string name=\"pref_default_intro_length\">Duración predeterminada de salto de introducción</string>\n    <string name=\"pref_intro_length\">Duración de salto para la introducción</string>\n    <string name=\"pref_skip_length\">Duración de salto con doble toque</string>\n    <string name=\"pref_skip_disable\">Desactivar</string>\n    <string name=\"pref_player_smooth_seek\">Activar búsqueda precisa</string>\n    <string name=\"pref_player_smooth_seek_summary\">Cuando está habilitado, la búsqueda no se enfocará en los fotogramas clave, lo que resulta en una búsqueda más lenta pero precisa</string>\n    <string name=\"pref_category_double_tap\">Pulsación doble</string>\n    <string name=\"pref_left_double_tap\">Doble toque (izquierda)</string>\n    <string name=\"pref_center_double_tap\">Doble toque (centro)</string>\n    <string name=\"pref_right_double_tap\">Doble toque (derecha)</string>\n    <string name=\"pref_double_tap_info\">Cuando un gesto de toque se configura como personalizado, se puede vincular a través de input.conf. Los códigos de tecla son 0x10001 para izquierda, 0x10002 para centro y 0x10003 para derecha.</string>\n    <string name=\"single_action_none\">Ninguna</string>\n    <string name=\"single_action_seek\">Buscar</string>\n    <string name=\"single_action_playpause\">Reproducir/Pausar</string>\n    <string name=\"single_action_switch\">Cambiar episodio</string>\n    <string name=\"single_action_custom\">Personalizado</string>\n    <string name=\"pref_category_media_controls\">Controles de medios</string>\n    <string name=\"pref_media_previous\">Anterior</string>\n    <string name=\"pref_media_playpause\">Reproducir/Pausar</string>\n    <string name=\"pref_media_next\">Siguiente</string>\n    <string name=\"pref_media_info\">Cuando un control multimedia está configurado como Personalizado, se puede vincular a través de input.conf. Los códigos de tecla son 0x10004 para anterior, 0x10005 para reproducir/pausar y 0x10006 para siguiente.</string>\n    <string name=\"pref_player_decoder\">Descodificador</string>\n    <string name=\"pref_player_decoder_summary\">Descodificación por hardware, formato de píxel, debanding</string>\n    <string name=\"pref_try_hw\">Pruebe la decodificación de hardware</string>\n    <string name=\"pref_gpu_next_title\">Activar gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Un nuevo backend de renderizado de video</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Ninguna</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Utilice el formato de píxeles YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Puede arreglar las pantallas negras en algunos códecs de vídeo, también puede mejorar el rendimiento a costa de la calidad</string>\n    <string name=\"pref_player_subtitle\">Subtítulos</string>\n    <string name=\"pref_player_subtitle_summary\">Idiomas preferidos, lista blanca, lista negra</string>\n    <string name=\"pref_player_subtitle_lang\">Idiomas preferidos</string>\n    <string name=\"pref_player_subtitle_lang_info\">Idioma(s) de subtítulo(s) a seleccionar por defecto en un vídeo con múltiples subtítulos, funcionan códigos de idioma de dos o tres letras. Los valores múltiples pueden delimitarse con una coma.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Lista blanca</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Lista blanca de subtítulos. Si se define una lista blanca, se utilizará el primer subtítulo que contenga una palabra de la lista blanca. Los valores múltiples pueden delimitarse con una coma.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Lista negra</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Lista negra de subtítulos. Si se define una lista negra, se filtrarán todos los subtítulos que contengan una palabra de la lista negra. Los valores múltiples pueden delimitarse con una coma.</string>\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Idiomas preferidos, corrección de tono, canales de audio</string>\n    <string name=\"pref_player_audio_lang\">Idiomas preferidos</string>\n    <string name=\"pref_player_audio_lang_info\">Idioma(s) de audio a seleccionar por defecto en un vídeo con múltiples flujos de audio, Funcionan códigos de idioma de dos o tres letras. Los valores múltiples pueden delimitarse con una coma.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Activar la corrección del tono de audio</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Evita que el audio se vuelva agudo a velocidades más rápidas y grave a velocidades más lentas</string>\n    <string name=\"pref_player_audio_channels\">Canales de audio</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Seguridad automática</string>\n    <string name=\"pref_player_audio_channels_auto\">Automático</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Estéreo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Revertir estéreo</string>\n    <string name=\"pref_player_audio_boost_cap\">Límite de aumento de volumen</string>\n    <string name=\"pref_player_custom_button\">Botones personalizados</string>\n    <string name=\"pref_player_custom_button_summary\">Ejecutar código lua con botones personalizados</string>\n    <string name=\"pref_player_custom_button_header\">Editar botones personalizados</string>\n    <string name=\"pref_player_custom_button_guide\">Guía de botones personalizados</string>\n    <string name=\"pref_player_custom_button_empty\">No tienes botones personalizados. Pulsa el botón más para crear un botón personalizado.</string>\n    <string name=\"pref_player_custom_button_add\">Añadir botón</string>\n    <string name=\"pref_player_custom_button_edit\">Editar botón</string>\n    <string name=\"pref_player_custom_button_title\">Título</string>\n    <string name=\"pref_player_custom_button_error_exists\">El botón ya existe!</string>\n    <string name=\"pref_player_custom_button_content\">Código Lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Código Lua (al presionar prolongadamente)</string>\n    <string name=\"pref_player_custom_button_optional\">(opcional)</string>\n    <string name=\"pref_player_custom_button_delete\">Eliminar botón</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">¿Desea eliminar el botón %s?</string>\n    <string name=\"pref_player_custom_button_startup\">Al iniciar</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Avanzado</string>\n    <string name=\"pref_player_advanced_summary\">Archivos de usuario, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Edita el archivo de configuración MPV para más ajustes de reproducción</string>\n    <string name=\"pref_reset_mpv_conf\">Restablecer el archivo de configuración MPV</string>\n    <string name=\"pref_mpv_input\">Editar el archivo de entrada MPV para la configuración de la asignación del teclado</string>\n    <string name=\"video_fit_screen\">Ajustar a la pantalla</string>\n    <string name=\"video_crop_screen\">Recortado a la pantalla</string>\n    <string name=\"video_stretch_screen\">Extender a la pantalla</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Valor demasiado grande</string>\n    <string name=\"numeric_chooser_value_too_small\">Valor demasiado pequeño</string>\n    <string name=\"enable_auto_play\">Reproducción automática activada</string>\n    <string name=\"disable_auto_play\">Reproducción automática desactivada</string>\n    <string name=\"player_aniskip_dontskip\">No te lo saltes</string>\n    <string name=\"player_aniskip_dontskip_toast\">Omitiendo %s en %d segundos</string>\n    <string name=\"player_aniskip_skip\">%s omitidos</string>\n    <string name=\"no_next_episode\">¡Próximo episodio no encontrado!</string>\n    <string name=\"no_prev_episode\">Episodio anterior no encontrado!</string>\n    <string name=\"player_sheets_delay_set_as_default\">Establecer como predeterminado</string>\n    <string name=\"player_sheets_audio_delay_title\">Retraso de audio</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Sonido detectado</string>\n    <string name=\"player_sheets_sub_delay_title\">Retraso de subtítulos</string>\n    <string name=\"player_sheets_sub_delay_speed\">Velocidad</string>\n    <string name=\"player_sheets_sub_delay_delay\">Demora</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primario</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Secundario</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Ambos</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Voz escuchada</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Texto visto</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Sonido escuchado</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Sonido detectado</string>\n    <string name=\"player_sheets_sub_colors_title\">Colores</string>\n    <string name=\"player_sheets_subtitles_color_text\">Texto</string>\n    <string name=\"player_sheets_subtitles_color_border\">Borde</string>\n    <string name=\"player_sheets_subtitles_color_background\">Fondo</string>\n    <string name=\"player_sheets_sub_color_red\">Rojo</string>\n    <string name=\"player_sheets_sub_color_green\">Verde</string>\n    <string name=\"player_sheets_sub_color_blue\">Azul</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alfa</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Configuración de subtítulos</string>\n    <string name=\"player_sheets_sub_typography_title\">Tipografía</string>\n    <string name=\"player_sheets_sub_typography_font\">Fuente</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Tamaño de fuente</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Estilo de borde</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Tamaño del borde</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Desplazamiento de sombra</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Contorno y sombra</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Caja de opacidad</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Cuadro de fondo</string>\n    <string name=\"player_sheets_sub_misc_title\">Misceláneos</string>\n    <string name=\"player_sheets_sub_scale\">Escalar</string>\n    <string name=\"player_sheets_sub_position\">Posición</string>\n    <string name=\"player_sheets_filters_title\">Filtros</string>\n    <string name=\"player_sheets_filters_brightness\">Brillo</string>\n    <string name=\"player_sheets_filters_contrast\">Contraste</string>\n    <string name=\"player_sheets_filters_gamma\">Gama</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturación</string>\n    <string name=\"player_sheets_filters_warning\">Es posible que algunos filtros no funcionen en su controlador de video actual</string>\n    <string name=\"player_sheets_add_ext_audio\">Agregar pistas de audio externas</string>\n    <string name=\"player_hwdec_mode\">Establecer el modo de descodificación por hardware por defecto</string>\n    <string name=\"timer_cancel_timer\">Cancelar tenporizador actual</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Subtitulos secundarios no tendrán formato ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">Mostrar subtítulos en captura de pantalla</string>\n    <string name=\"pref_general_summary\">Idioma de la aplicación, notificaciones</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Zafiro</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_preserve_reading_position\">Conservar la posición de lectura en los capítulos leídos</string>\n    <string name=\"pref_download_slots\">Descargas máximas</string>\n    <string name=\"local_source_badge\">Local</string>\n    <string name=\"anime_interval_expected_update\">Se espera que haya nuevos episodios en alrededor de %1$s y se comprobará aproximadamente cada %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Este anime ya está finalizado o no hay fecha de estreno prevista.</string>\n    <string name=\"confirm_tracker_update_anime\">¿Actualizar rastreadores al episodio %d ?</string>\n    <string name=\"trackers_updated_summary_manga\">Rastreadores actualizados al capítulo %d</string>\n    <string name=\"trackers_updated_summary_anime\">Rastreadores actualizados al episodio %d</string>\n    <string name=\"download_notifier_download_finish\">Descarga finalizada</string>\n    <string name=\"action_hide\">Ocultar</string>\n    <string name=\"label_all\">Todo</string>\n    <string name=\"label_category\">Categoría</string>\n    <string name=\"manga_categories\">Categorías de los mangas</string>\n    <string name=\"general_categories\">Categorías</string>\n    <string name=\"anime_categories\">Categorías de Anime</string>\n    <string name=\"entries\">Entradas de la biblioteca</string>\n    <string name=\"chapters_episodes\">Capítulos y episodios</string>\n    <string name=\"episodes\">Episodios</string>\n    <string name=\"backup_settings_warning\">Advertencia: La copia de seguridad de la configuración también almacenará tus contraseñas, ¡no compartas este archivo de la copia de seguridad!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Actualizaciones del anime</string>\n    <string name=\"label_manga_sources\">Fuentes de Manga</string>\n    <string name=\"label_anime_sources\">Fuentes de Anime</string>\n    <string name=\"label_watched_duration\">Duración de la reproducción</string>\n    <string name=\"label_watched_episodes\">Visto</string>\n    <string name=\"pref_start_screen\">Pantalla de inicio</string>\n    <string name=\"pref_library_manga_columns\">Manga por fila</string>\n    <string name=\"pref_library_anime_columns\">Elementos del anime por fila</string>\n    <string name=\"pref_bottom_nav_no_history\">Mover historial a la pestaña Más</string>\n    <string name=\"pref_bottom_nav_no_updates\">Mover las actualizaciones a la pestaña Más</string>\n    <string name=\"pref_bottom_nav_no_manga\">Desplazar Manga a la pestaña Más</string>\n    <string name=\"pref_bottom_nav_no_browse\">Mover la navegación a más opciones</string>\n    <string name=\"action_filter_unseen\">Sin ver</string>\n    <string name=\"action_global_manga_search\">Búsqueda global del manga</string>\n    <string name=\"action_global_anime_search\">Búsqueda global del anime</string>\n    <string name=\"action_sort_total_episodes\">Episodios totales</string>\n    <string name=\"action_sort_last_seen\">Último visto</string>\n    <string name=\"action_sort_last_checked\">Última comprobación</string>\n    <string name=\"action_sort_latest_episode\">Último episodio</string>\n    <string name=\"action_sort_last_anime_update\">Ultima actualización de Anime</string>\n    <string name=\"action_sort_unseen_count\">Número de episodios no vistos</string>\n    <string name=\"action_sort_episode_fetch_date\">Fecha de lanzamiento del episodio</string>\n    <string name=\"action_mark_as_seen\">Marcar como visto</string>\n    <string name=\"action_mark_as_unseen\">Marcar como no visto</string>\n    <string name=\"action_mark_previous_as_seen\">Marcar anteriores como vistos</string>\n    <string name=\"action_play_internally\">Reproducir internamente</string>\n    <string name=\"action_play_externally\">Reproducir externamente</string>\n    <string name=\"action_download_unread\">Descargar capítulos sin leer</string>\n    <string name=\"action_download_unseen\">Descargar episodios sin ver</string>\n    <string name=\"action_bookmark_episode\">Agregar episodio a marcadores</string>\n    <string name=\"action_remove_bookmark_episode\">Quitar episodio de marcadores</string>\n    <string name=\"action_edit_anime_categories\">Editar categorías de anime</string>\n    <string name=\"action_edit_manga_categories\">Editar categorías de manga</string>\n    <string name=\"action_view_episodes\">Ver episodios</string>\n    <string name=\"action_previous_episode\">Episodio anterior</string>\n    <string name=\"action_play\">Reproducir</string>\n    <string name=\"action_next_episode\">Siguiente episodio</string>\n    <string name=\"action_screen_fit\">Modo ajustar a pantalla</string>\n    <string name=\"action_show_anime\">Mostrar anime</string>\n    <string name=\"action_display_download_badge_anime\">Episodios descargados</string>\n    <string name=\"action_display_local_badge_manga\">Fuente local</string>\n    <string name=\"action_display_local_badge_anime\">Anime local</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Buscar sólo fuentes de manga incrustadas en la búsqueda global</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Buscar solo fuentes del anime incrustadas en la búsqueda global</string>\n    <string name=\"pref_hide_in_manga_library_items\">Ocultar las entradas del manga que ya están en la biblioteca</string>\n    <string name=\"pref_hide_in_anime_library_items\">Ocultar las entradas del anime que ya están en la biblioteca</string>\n    <string name=\"action_order_by_episode_number\">Por número de episodio</string>\n    <string name=\"action_start_download_externally\">Usar descargador externo</string>\n    <string name=\"action_start_download_internally\">Usar descargador interno</string>\n    <string name=\"pref_bottom_nav_style\">Estilo inferior de navegación</string>\n    <string name=\"pref_default_home_tab_library\">Configure la pantalla de inicio en la pestaña Manga</string>\n    <string name=\"default_manga_category\">Categoría predeterminada de manga</string>\n    <string name=\"default_anime_category\">Categoría predeterminada de anime</string>\n    <string name=\"pref_manga_library_update_categories_details\">El manga de las categorías excluidas no se actualizará, ni siquiera si pertenece a alguna de las categorías que sí estén incluidas.</string>\n    <string name=\"pref_anime_library_update_categories_details\">El anime de las categorías excluidas no se actualizará, ni siquiera si pertenece a alguna de las categorías que sí estén incluidas.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Esta extensión no es de la lista oficial de extensiones de Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Esta extensión no pertenece a la lista oficial de extensiones de Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categorías excluidas de manga</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Categorías excluidas de anime</string>\n    <string name=\"pref_category_external_downloader\">Administrador de descargas externo</string>\n    <string name=\"pref_use_external_downloader\">Siempre usar el administrador de descargas externo para anime</string>\n    <string name=\"pref_external_downloader_selection\">Preferencia para el administrador de descargas</string>\n    <string name=\"pref_download_new_episodes\">Descargar nuevos episodios</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Omitir la descarga de episodios vistos duplicados</string>\n    <string name=\"auto_download_while_watching\">Descarga automática mientras se reproduce</string>\n    <string name=\"download_ahead_info_anime\">Solo funciona en elementos de la biblioteca y si el episodio actual más el siguiente ya están descargados</string>\n    <string name=\"pref_track_on_add_library\">Abrir menú de seguimiento al agregar a la biblioteca</string>\n    <string name=\"pref_show_next_episode_airing_time\">Mostrar la hora de emisión del próximo episodio</string>\n    <string name=\"pref_backup_flags_summary\">Que información incluir en el archivo de respaldo</string>\n    <string name=\"pref_anime_storage_usage\">Uso del espacio de almacenamiento del anime</string>\n    <string name=\"pref_manga_storage_usage\">Uso del espacio de almacenamiento del manga</string>\n    <string name=\"used_cache_both\">Usado por anime: %1$s, usado por manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Borrar la base de datos de manga</string>\n    <string name=\"pref_clear_anime_database\">Borrar la base de datos de anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Borrar el historial del manga que no esté guardado en tu biblioteca</string>\n    <string name=\"pref_clear_anime_database_summary\">Borrar el historial del anime que no esté guardado en tu biblioteca</string>\n    <string name=\"anime_from_library\">Anime en la biblioteca</string>\n    <string name=\"downloaded_episodes\">Episodios descargados</string>\n    <string name=\"local_manga_source\">Fuente local de manga</string>\n    <string name=\"local_anime_source\">Fuente local de anime</string>\n    <string name=\"episode_not_found\">Episodio no encontrado</string>\n    <string name=\"local_invalid_episode_format\">Formato de episodio no válido</string>\n    <string name=\"unknown_studio\">Estudio desconocido</string>\n    <string name=\"delete_confirmation\">¿Seguro que desea borrar \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">¿Borrar episodios descargados?</string>\n    <string name=\"snack_add_to_manga_library\">¿Añadir manga a la biblioteca?</string>\n    <string name=\"snack_add_to_anime_library\">¿Agregar anime a la biblioteca?</string>\n    <string name=\"display_mode_episode\">Episodio %1$s</string>\n    <string name=\"episode_downloading_progress\">Descargando (%d%%)</string>\n    <string name=\"download_error\">Error</string>\n    <string name=\"download_paused\">Pausado</string>\n    <string name=\"show_episode_number\">Número de episodio</string>\n    <string name=\"sort_by_episode_number\">Por número de episodio</string>\n    <string name=\"download_unseen\">Sin ver</string>\n    <string name=\"confirm_delete_episodes\">¿Seguro que quieres eliminar los episodios seleccionados?</string>\n    <string name=\"also_set_episode_settings_for_library\">Aplicar también a todo el anime en mi biblioteca</string>\n    <string name=\"no_episodes_error\">No se han encontrado episodios</string>\n    <string name=\"watching\">Viendo</string>\n    <string name=\"currently_reading\">Actualmente leyendo</string>\n    <string name=\"currently_watching\">Actualmente viendo</string>\n    <string name=\"plan_to_watch\">Planear para ver</string>\n    <string name=\"not_interesting\">No es interesante</string>\n    <string name=\"want_to_read\">Quiero leer</string>\n    <string name=\"want_to_watch\">Quiero ver</string>\n    <string name=\"repeating_anime\">Volviendo a ver</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Esto eliminará la fecha de visualización de este episodio. ¿Seguro?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Restablecer todos los episodios de este anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Episodio %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">No se encontró ningún vídeo</string>\n    <string name=\"notification_new_episodes\">Nuevos episodios encontrados</string>\n    <string name=\"information_no_recent_anime\">No he visto nada recientemente</string>\n    <string name=\"episode_settings_updated\">Actualizados los ajustes por defecto de los episodios</string>\n    <string name=\"download_notifier_download_paused_chapters\">Descarga pausada</string>\n    <string name=\"download_notifier_download_paused_episodes\">Descarga del episodio en pausa</string>\n    <string name=\"channel_new_chapters_episodes\">Nuevos episodios y capítulos</string>\n    <string name=\"label_storage\">Almacenamiento</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Cambiar la duración de la introducción</string>\n    <string name=\"notification_episodes_single\">Episodio %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episodio %1$s y %2$d más</string>\n    <string name=\"notification_episodes_multiple\">Episodios %1$s</string>\n    <string name=\"episode_settings\">Ajustes del episodio</string>\n    <string name=\"pref_backup_flags\">Opciones de la copia de seguridad</string>\n    <string name=\"label_manga_extensions\">Extensiones del manga</string>\n    <string name=\"label_anime_extensions\">Extensiones del anime</string>\n    <string name=\"label_migration_manga\">Migrar el manga</string>\n    <string name=\"label_migration_anime\">Migrar el anime</string>\n    <string name=\"settings\">Ajustes</string>\n    <string name=\"copied_video_link_to_clipboard\">Enlace de calidad del video copiado al portapapeles</string>\n    <string name=\"choose_video_quality\">Elige la calidad del vídeo:</string>\n    <string name=\"extension_settings\">Configuración de las extensiones</string>\n    <string name=\"theme_cottoncandy\">Algodón de azúcar</string>\n    <string name=\"theme_mocha\">Moca</string>\n    <string name=\"pref_episode_swipe_end\">Deslizar a la derecha</string>\n    <string name=\"pref_episode_swipe_start\">Deslizar a la izquierda</string>\n    <string name=\"pref_category_hide_hidden\">Ocultar las categorías de la pantalla de las categorías</string>\n    <string name=\"pref_update_anime_release_grace_period\">Período de gracia previsto para el lanzamiento del anime</string>\n    <string name=\"data_saver_exclude\">Excluir del protector de datos</string>\n    <string name=\"data_saver_stop_exclude\">Detener la excepción del protector de datos</string>\n    <string name=\"data_saver\">Ahorro de datos</string>\n    <string name=\"data_saver_summary\">Comprimir las imágenes antes de descargarlas o cargarlas en el lector</string>\n    <string name=\"data_saver_downloader\">Usar el ahorrador de datos en el descargador</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignorar las imágenes JPEG</string>\n    <string name=\"data_saver_ignore_gif\">Ignorar las imágenes GIF</string>\n    <string name=\"data_saver_image_quality\">Calidad de la imagen</string>\n    <string name=\"data_saver_image_quality_summary\">Valores más altos significan que un mayor porcentaje de la calidad de la imagen es guardada, pero también significa que el tamaño del archivo es mayor, el 80 por ciento es un buen término medio entre el tamaño del archivo y la calidad de la imagen</string>\n    <string name=\"data_saver_image_format\">Comprimir a Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">El tamaño del archivo JPEG es menor que el de WEBP (lo que significa que más datos son guardados), pero también hace que las imágenes pierdan más calidad.\n\\nActualmente comprime a JPEG</string>\n    <string name=\"data_saver_image_format_summary_off\">El tamaño del archivo JPEG es considerablemente más pequeño que el del WEBP (lo que significa que se más datos son salvados), pero también hace que las imágenes pierdan más calidad.\n\\nActualmente comprime a WEBP</string>\n    <string name=\"data_saver_color_bw\">Convertir a blanco y negro</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (requiere un servidor proxy Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Servidor de Bandwidth Hero Proxy</string>\n    <string name=\"data_saver_server_summary\">Poner la URL del servidor de Bandwith Hero Proxy aquí</string>\n    <string name=\"download_slots_info\">Solo se descargará simultáneamente desde las fuentes autoalojadas o sin contador</string>\n    <string name=\"unseen\">Sin ver</string>\n    <string name=\"label_manga_extension_repos\">Repositorios de extensiones de manga</string>\n    <string name=\"label_anime_extension_repos\">Repositorios de extensiones de anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Crear carpeta de Aniyomi por defecto</string>\n    <string name=\"download_speed_limit\">Límite de velocidad de la descarga</string>\n    <string name=\"download_speed_limit_hint\">Establezca en 0 para desactivar el límite de velocidad de descarga.</string>\n    <string name=\"action_display_unseen_badge\">Episodios sin ver</string>\n    <string name=\"action_stop\">Parar</string>\n    <string name=\"action_continue\">Continuar</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Comportamiento del capítulo</string>\n    <string name=\"action_add_repo_message\">Añade más repositorios a %s; la dirección URL debería de terminar en \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Solo funciona si el capítulo/episodio actual y el siguiente ya están descargados.</string>\n    <string name=\"non_library_settings\">Todas las entradas leídas/miradas</string>\n    <string name=\"action_sort_last_manga_update\">Última actualización del manga</string>\n    <string name=\"action_show_manga\">Mostrar manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Botón de continuar viendo/leyendo</string>\n    <string name=\"pref_update_only_completely_read\">Saltar entradas con episodio(s) no visto(s)/capítulo(s) no leído(s)</string>\n    <string name=\"pref_category_delete_chapters\">Borrar capítulos</string>\n    <string name=\"pref_remove_after_marked_as_read\">Tras haberlos marcado manualmente como leídos/vistos</string>\n    <string name=\"pref_remove_after_read\">Después de leer/ver borrar automáticamente</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir el borrado de capítulos/episodios marcados como favoritos</string>\n    <string name=\"pref_auto_update_manga_sync\">Actualizar progreso al terminar de leer/ver</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Actualizar el progreso cuando se marca como leído/visto</string>\n    <string name=\"pref_clear_chapter_cache\">Vaciar la caché de los capítulos y episodios</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Limpiar la caché del capítulo/episodio al abrir la app</string>\n    <string name=\"clear_database_confirmation\">¿Estás seguro? Episodios y capítulos completados y progreso que no esté en la biblioteca se perderá</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa el historial</string>\n    <string name=\"manga_from_library\">Manga en la biblioteca</string>\n    <string name=\"also_set_chapter_settings_for_library\">Aplicar también a todo el manga en mi biblioteca</string>\n    <string name=\"dialog_with_checkbox_reset\">Reiniciar todos los capítulos de este manga</string>\n    <string name=\"download_insufficient_space\">No se podía descargar debido al poco espacio de almacenamiento</string>\n    <string name=\"download_queue_size_warning\">Advertencia: Las descargas grandes pueden llevar a que las fuentes se vuelvan cada vez más lentas y en casos extremos que los servidores limiten o impidan el acceso a Aniyomi. Toca aquí para más información.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forzar a la aplicación a volver a comprobar los capítulos descargados</string>\n    <string name=\"label_player\">Reproductor</string>\n    <string name=\"pref_player_settings_summary\">Reproductor interno, gestos, decodificadores, subtítulos</string>\n    <string name=\"pref_hosters\">Hosters</string>\n    <string name=\"pref_hosters_show_failure\">Mostrar hosts fallidos</string>\n    <string name=\"pref_hosters_show_empty\">Mostrar hosts vacíos</string>\n    <string name=\"pref_category_intro_skip\">Omitir introducción</string>\n    <string name=\"pref_enable_intro_skip\">Habilitar \\\"Omitir introducción\\\"</string>\n    <string name=\"pref_disable_aniskip_chapter\">Desactivar AniSkip si el vídeo ya contiene capítulos</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Código inválido: \\\"%s\\\"</string>\n    <string name=\"pref_player_editor\">Editor de scripts</string>\n    <string name=\"pref_player_editor_summary\">Editar y crear nuevos scripts y opciones de script</string>\n    <string name=\"pref_player_editor_script\">Scripts</string>\n    <string name=\"pref_player_editor_script_opts\">Opciones de script</string>\n    <string name=\"pref_player_no_items\">Directorio no contiene elementos. Pulse el botón más(+) para añadir un nuevo archivo.</string>\n    <string name=\"editor_unsaved_progress\">Tienes cambios sin guardar. ¿Deseas volver?</string>\n    <string name=\"editor_save_error\">No se pudo guardar el archivo</string>\n    <string name=\"editor_save_success\">Archivo guardado</string>\n    <string name=\"editor_action_rename\">Renombrar archivo</string>\n    <string name=\"editor_action_delete\">Eliminar archivo</string>\n    <string name=\"editor_file_already_exists\">El archivo ya existe</string>\n    <string name=\"editor_invalid_filename\">Nombre de archivo inválido</string>\n    <string name=\"editor_create_file\">Crear archivo</string>\n    <string name=\"editor_edit_file\">Editar nombre de archivo</string>\n    <string name=\"editor_filename\">Nombre de archivo</string>\n    <string name=\"editor_create_error\">No se pudo guardar el archivo</string>\n    <string name=\"editor_rename_error\">No se pudo renombrar el archivo</string>\n    <string name=\"editor_delete_error\">No se pudo eliminar el archivo</string>\n    <string name=\"editor_delete_file\">Eliminar archivo</string>\n    <string name=\"editor_delete_file_confirmation\">¿Desea borrar el archivo \\\"%s\\\"?</string>\n    <string name=\"pref_mpv_user_files\">Usar archivos MPV de usuario</string>\n    <string name=\"pref_mpv_user_files_summary\">Usar archivos en el directorio mpv-config</string>\n    <string name=\"player_skip_action\">Omitir %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s omitido</string>\n    <string name=\"player_chapter_type_opening\">Opening</string>\n    <string name=\"player_chapter_type_ending\">Ending</string>\n    <string name=\"player_chapter_type_recap\">Recapitulación</string>\n    <string name=\"player_chapter_type_mixedop\">Opening mixto</string>\n    <string name=\"toast_sleep_timer_ended\">Temporizador de sueño terminado</string>\n    <string name=\"no_available_videos\">No hay videos disponibles</string>\n    <string name=\"no_hosters\">Lista de hoster vacia</string>\n    <string name=\"no_episode_loaded\">Ningún episodio cargado</string>\n    <string name=\"select_hoster_from_empty_list\">Hoster Seleccionado de lista vacía</string>\n    <string name=\"player_sheets_track_delay\">Retraso</string>\n    <string name=\"player_sheets_track_palette\">Palette</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Sonido escuchado</string>\n    <string name=\"player_sheets_sub_override_ass\">Sobreescribir subtítulos ASS/SSA</string>\n    <string name=\"player_sheets_filters_hue\">Matiz</string>\n    <string name=\"player_hoster_tap_to_load\">Toca para cargar vídeos</string>\n    <string name=\"player_hoster_failed\">Error al cargar videos</string>\n    <string name=\"player_sheets_qualities_title\">Calidades</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Más</string>\n    <string name=\"pref_audio_channels\">Canales de audio</string>\n    <string name=\"player_sheets_stats_page_title\">Pagina de estadísticas predeterminada</string>\n    <string name=\"player_sheets_tracks_off\">Desactivado</string>\n    <string name=\"player_sheets_stats_page_chip\">Página %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Botones personalizados</string>\n    <string name=\"player_seek_n_seconds\">%d segundos</string>\n    <string name=\"timer_title\">Temporizador de apagado</string>\n    <string name=\"timer_remaining\">%s restantes</string>\n    <string name=\"timer_picker_enter_timer\">Introduce la duración</string>\n    <string name=\"timer_picker_pick_time\">Elige la duración</string>\n    <string name=\"player_sheets_speed_slider_label\">Velocidad</string>\n    <string name=\"player_sheets_speed_make_default\">Marcar velocidad como predeterminada</string>\n    <string name=\"pref_audio_pitch_correction_title\">Habilitar la corrección del tono de audio</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Evita que el audio se vuelva agudo a velocidades más rápidas y grave a velocidades más lentas</string>\n    <string name=\"player_sheets_add_ext_sub\">Añadir subtítulos externos</string>\n    <string name=\"player_sheets_chapters_title\">Capítulos</string>\n    <string name=\"pref_library_rows\">Tamaño de la lista</string>\n    <string name=\"custom_button_settings\">Botones personalizados</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"label_cant_migrate_episode\">Incapaz de migrar el episodio a la temporada, seleccione la temporada para continuar</string>\n    <string name=\"label_cant_migrate_season\">Incapaz de migrar temporada a episodio</string>\n    <string name=\"label_show_seasons\">Mostrar temporadas</string>\n    <string name=\"action_display_show_continue_watching_button\">Botón continuar viendo</string>\n    <string name=\"action_display_grid_mode\">Modo de visualización en cuadrícula</string>\n    <string name=\"display_mode_season\">Temporada %1$s</string>\n    <string name=\"show_season_number\">Número de temporada</string>\n    <string name=\"sort_by_season_number\">Por número de temporada</string>\n    <string name=\"no_seasons_error\">No se encontraron temporadas</string>\n    <string name=\"season_settings_updated\">Configuración por defecto actualizada de la temporada</string>\n    <string name=\"season_settings\">Ajustes de la temporada</string>\n    <string name=\"pref_behavior_episode\">Comportamiento del episodio</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Marca múltiples episodios vistos como vistos</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Después de ver un episodio</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Después de buscar nuevo episodio</string>\n    <string name=\"pref_library_season\">Temporada</string>\n    <string name=\"pref_update_seasons_refresh\">Actualizar temporada al refrescar episodios</string>\n    <string name=\"pref_update_seasons_update\">Actualizar temporadas con cada actualización de la librería</string>\n    <string name=\"filler\">Relleno</string>\n    <string name=\"action_filter_fillermarked\">Marcados con relleno</string>\n    <string name=\"action_edit_background\">Editar fondo</string>\n    <string name=\"custom_background\">Fondo personalizado</string>\n    <string name=\"background_saved\">Fondo guardado</string>\n    <string name=\"error_saving_background\">Error al guardar el fondo</string>\n    <string name=\"error_sharing_background\">Error al compartir el fondo</string>\n    <string name=\"set_as_background\">Establecer como fondo</string>\n    <string name=\"set_as_thumbnail\">Establecer como miniatura</string>\n    <string name=\"background_updated\">Fondo actualizado</string>\n    <string name=\"thumbnail_updated\">Miniatura actualizada</string>\n    <string name=\"notification_background_update_failed\">Error al actualizar el fondo</string>\n    <string name=\"action_fillermark_episode\">Episodio marcado con relleno</string>\n    <string name=\"action_remove_fillermark_episode\">Episodio marcado sin relleno</string>\n    <string name=\"pref_download_fillermarked_items\">Permitir la descarga de episodios de relleno</string>\n    <string name=\"show_episode_previews\">Miniaturas de episodio</string>\n    <string name=\"show_episode_summaries\">Resúmenes de episodio</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/eu/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_update_show_tab_badge\">Erakutsi irakurri gabekoen kopurua Eguneraketak ikonoan</string>\n    <string name=\"manga_categories\">Kategoriak</string>\n    <string name=\"action_display_local_badge_manga\">Manga lokala</string>\n    <string name=\"default_manga_category\">Kategoria lehentsia</string>\n    <string name=\"pref_manga_library_update_categories_details\">Baztertutako kategorietako mangak ez dira eguneratuko, sarturiko kategorietan egon arren.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Baztertutako kategoriak</string>\n    <string name=\"pref_clear_manga_database\">Garbitu datu-basea</string>\n    <string name=\"pref_clear_manga_database_summary\">Ezabatu zure liburutegian gordeta ez dauden mangen historia</string>\n    <string name=\"snack_add_to_manga_library\">Manga liburutegira gehitu?</string>\n    <string name=\"download_error\">Errorea</string>\n    <string name=\"download_paused\">Gelditurik</string>\n    <string name=\"download_notifier_download_paused_chapters\">Deskarga pausatu da</string>\n    <string name=\"channel_new_chapters_episodes\">Kapituluaren eguneraketak</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fa/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">قسمت‌های دیده نشده بعدی</item>\n        <item quantity=\"other\">%d قسمت دیده نشده بعدی</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s قسمت</item>\n        <item quantity=\"other\">%1$s قسمت</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">قسمت بعدی</item>\n        <item quantity=\"other\">%d قسمت بعدی</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">برای 1 عنوان</item>\n        <item quantity=\"other\">برای %d عنوان</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 قسمت جدید</item>\n        <item quantity=\"other\">%1$d قسمت جدید</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d ثانیه</item>\n        <item quantity=\"other\">%d ثانیه</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">قسمت‌های %1$s و 1 قسمت دیگر</item>\n        <item quantity=\"other\">قسمت‌های %1$s و %2$d قسمت دیگر</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fa/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">دسته‌ها، به روز رسانی سراسری</string>\n    <string name=\"pref_library_update_show_tab_badge\">تعداد خوانده‌نشده را بر روی آیکون به‌روزرسانی نشان بده</string>\n    <string name=\"pref_progress_mark_as_seen\">در چه نقطه ای اپیزود بعنوان مشاهده شده علامت‌گذاری شود</string>\n    <string name=\"pref_preserve_watching_position\">حفظ موقعیت مشاهده در قسمت‌های دیده شده</string>\n    <string name=\"pref_category_player_orientation\">جهت</string>\n    <string name=\"rotation_reverse_landscape\">دورنما برعکس</string>\n    <string name=\"rotation_sensor_portrait\">حسگر پرتره</string>\n    <string name=\"rotation_sensor_landscape\">حسگر دورنما</string>\n    <string name=\"pref_remember_brightness\">ذخیره و تغییر به آخرین روشنایی استفاده شده</string>\n    <string name=\"pref_remember_volume\">ذخیره و تغییر به آخرین درجه صدای استفاده شده</string>\n    <string name=\"pref_player_fullscreen\">نمایش محتوا در برش صفحه</string>\n    <string name=\"pref_player_hide_controls\">مخفی کردن کنترل‌های نمایشگر هنگام باز کردن پخش‌ کننده</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">فعالسازی گذر خودکار</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">فعالسازی سبک Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">اتمام مهلت</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 ثانیه</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 ثانیه</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 ثانیه</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 ثانیه</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 ثانیه</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 ثانیه</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip برای کار کردن نیاز به پیگیری شدن انیمه توسط MAL یا Anilist دارد</string>\n    <string name=\"pref_enable_aniskip\">فعالسازی AniSkip</string>\n    <string name=\"pref_category_pip\">تصویر در تصویر</string>\n    <string name=\"pref_enable_pip\">فعالسازی استفاده از حالت تصویر در تصویر</string>\n    <string name=\"pref_pip_episode_toasts\">نمایش تِست قسمت‌ها بهنگام تغییر به حالت تصویر در تصویر</string>\n    <string name=\"pref_pip_on_exit\">تغییر خودکار به حالت تصویر در تصویر هنگام خروج از پخش کننده</string>\n    <string name=\"pref_category_external_player\">پخش کننده خارجی</string>\n    <string name=\"pref_always_use_external_player\">استفاده همیشگی از پخش کننده خارجی</string>\n    <string name=\"pref_external_player_preference\">ترجیحات پخش کننده خارجی</string>\n    <string name=\"enable_volume_brightness_gestures\">فعالسازی میانبر لمسی روشنایی و صدا</string>\n    <string name=\"pref_category_player_seeking\">جستجو</string>\n    <string name=\"enable_horizontal_seek_gesture\">فعالسازی میانبر لمسی افقی جستجو</string>\n    <string name=\"pref_default_intro_length\">طول پیشفرض پرش مقدمه</string>\n    <string name=\"pref_intro_length\">طول پرش مقدمه</string>\n    <string name=\"pref_skip_length\">طول گذر دو ضرب</string>\n    <string name=\"pref_skip_disable\">غیرفعال کردن</string>\n    <string name=\"pref_player_smooth_seek\">فعالسازی جستجو دقیق</string>\n    <string name=\"pref_player_smooth_seek_summary\">بهنگام فعالسازی، جستجو بر فریم‌های کلیدی تمرکز نمی‌کند، منجر به کندی اما دقت بالاتر میشود</string>\n    <string name=\"pref_mpv_conf\">ویرایش فایل پیکربندی MPV برای تنظیمات بیشتر پخش کننده</string>\n    <string name=\"video_fit_screen\">متناسب با صفحه نمایش</string>\n    <string name=\"video_crop_screen\">برش به صفحه نمایش</string>\n    <string name=\"video_stretch_screen\">کشش به صفحه نمایش</string>\n    <string name=\"enable_auto_play\">پخش خودکار فعال است</string>\n    <string name=\"disable_auto_play\">پخش خودکار فعال نیست</string>\n    <string name=\"player_aniskip_dontskip\">گذر نکن</string>\n    <string name=\"player_aniskip_dontskip_toast\">گذر از %s در %d ثانیه</string>\n    <string name=\"player_aniskip_skip\">%s گذشت شد</string>\n    <string name=\"no_next_episode\">قسمت‌ بعدی پیدا نشد!</string>\n    <string name=\"player_hwdec_mode\">تنظیم حالت پیشفرض رمزگشایی سخت افزاری</string>\n    <string name=\"screenshot_show_subs\">نمایش زیرنویس در اسکرین‌شات</string>\n    <string name=\"manga_categories\">دسته بندی مانگا ها</string>\n    <string name=\"general_categories\">دسته بندی ها</string>\n    <string name=\"anime_categories\">دسته بندی انیمه ها</string>\n    <string name=\"entries\">ورودی‌های کتابخانه</string>\n    <string name=\"chapters_episodes\">چپترها و قسمت‌ها</string>\n    <string name=\"episodes\">قسمت‌ها</string>\n    <string name=\"backup_settings_warning\">اخطار: فایل بکاپ تنظیمات شامل رمز عبور اکانت‌های پیگیر نیز می‌باشد، فایل بکاپ را انتشار ندهید!</string>\n    <string name=\"label_manga_library\">مانگا</string>\n    <string name=\"label_anime_library\">انیمه</string>\n    <string name=\"label_anime\">انیمه</string>\n    <string name=\"label_manga\">مانگا</string>\n    <string name=\"label_manga_sources\">منابع مانگا</string>\n    <string name=\"label_anime_sources\">منابع انیمه</string>\n    <string name=\"label_watched_duration\">زمان مشاهده</string>\n    <string name=\"label_watched_episodes\">مشاهده شده</string>\n    <string name=\"pref_library_manga_columns\">آیتم‌های مانگا در هر ردیف</string>\n    <string name=\"pref_library_anime_columns\">آیتم‌های انیمه در هر ردیف</string>\n    <string name=\"pref_bottom_nav_no_history\">انتقال تاریخچه به برگه \\\"بیشتر\\\"</string>\n    <string name=\"pref_bottom_nav_no_updates\">انتقال آپدیت‌ها به برگه \\\"بیشتر\\\"</string>\n    <string name=\"pref_bottom_nav_no_manga\">انتقال مانگا به برگه \\\"بیشتر\\\"</string>\n    <string name=\"action_filter_unseen\">دیده نشده</string>\n    <string name=\"action_global_manga_search\">جستجو کلی مانگا</string>\n    <string name=\"action_global_anime_search\">جستجو کلی انیمه</string>\n    <string name=\"action_sort_total_episodes\">تمام قسمت‌ها</string>\n    <string name=\"action_sort_last_seen\">آخرین مشاهده</string>\n    <string name=\"action_sort_last_checked\">آخرین بررسی</string>\n    <string name=\"action_sort_latest_episode\">آخرین قسمت</string>\n    <string name=\"action_sort_last_anime_update\">آخرین بروزرسانی انیمه</string>\n    <string name=\"action_sort_unseen_count\">مقدار دیده نشده</string>\n    <string name=\"action_sort_episode_fetch_date\">تاریخ واکشی قسمت</string>\n    <string name=\"action_mark_as_seen\">نشانه گذاری دیده شده</string>\n    <string name=\"action_mark_as_unseen\">نشانه گذاری دیده نشده</string>\n    <string name=\"action_mark_previous_as_seen\">نشانه گذاری قبلی بعنوان دیده شده</string>\n    <string name=\"action_play_internally\">پخش داخلی</string>\n    <string name=\"action_play_externally\">پخش خارجی</string>\n    <string name=\"action_download_unread\">دانلود چپترهای نخوانده</string>\n    <string name=\"action_download_unseen\">دانلود قسمت‌های دیده نشده</string>\n    <string name=\"action_bookmark_episode\">نشانه‌گذاری قسمت</string>\n    <string name=\"action_remove_bookmark_episode\">لغو نشانه قسمت</string>\n    <string name=\"action_edit_anime_categories\">ویرایش دسته‌بندی انیمه</string>\n    <string name=\"action_edit_manga_categories\">ویرایش دسته‌بندی مانگا</string>\n    <string name=\"action_view_episodes\">نمایش قسمت‌ها</string>\n    <string name=\"action_previous_episode\">قسمت قبلی</string>\n    <string name=\"action_play\">پخش</string>\n    <string name=\"action_next_episode\">قسمت بعدی</string>\n    <string name=\"action_screen_fit\">حالت تناسب صفحه نمایش</string>\n    <string name=\"action_show_anime\">نمایش انیمه</string>\n    <string name=\"action_display_download_badge_anime\">قسمت‌های دانلود شده</string>\n    <string name=\"action_display_local_badge_manga\">مانگای محلی</string>\n    <string name=\"action_display_local_badge_anime\">انیمه داخلی</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">فقط منابع مانگا پین شده را در جستجو کلی، جستجو کن</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">فقط منابع انیمه پین شده را در جستجو کلی، جستجو کن</string>\n    <string name=\"pref_hide_in_manga_library_items\">مخفی کردن ورودی‌های مانگا فعلی در کتابخانه</string>\n    <string name=\"pref_hide_in_anime_library_items\">مخفی کردن ورودی‌های انیمه فعلی در کتابخانه</string>\n    <string name=\"action_order_by_episode_number\">بر اساس شماره قسمت</string>\n    <string name=\"action_start_download_externally\">استفاده از دانلودر خارجی</string>\n    <string name=\"action_start_download_internally\">استفاده از دانلودر داخلی</string>\n    <string name=\"pref_bottom_nav_style\">سبک ناوبری پایینی</string>\n    <string name=\"pref_default_home_tab_library\">تنظیم صفحه شروع به برگه مانگا</string>\n    <string name=\"default_manga_category\">دسته بندی پیشفرض</string>\n    <string name=\"default_anime_category\">دسته‌بندی پیشفرض انیمه</string>\n    <string name=\"pref_manga_library_update_categories_details\">مانگاهایی که در دسته‌بندی های حذف‌شده هستند، حتی اگر هم‌زمان در دسته‌بندی های مشمول باشند به‌روزرسانی نمی‌شوند.</string>\n    <string name=\"pref_anime_library_update_categories_details\">انیمه‌های دسته‌‌بندی‌های حذف شده به‌روزرسانی نمی‌شوند، حتی اگر در دسته‌‌بندی گنجانده شده باشند.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">این افزونه از لیست افزونه‌های رسمی آنی‌یومی نیست.</string>\n    <string name=\"unofficial_anime_extension_message\">این افزونه از لیست افزونه‌های رسمی آنی‌یومی نیست.</string>\n    <string name=\"episode_download_progress\">%1$d %</string>\n    <string name=\"pref_remove_exclude_categories_manga\">دسته‌بندی‌های محذوف</string>\n    <string name=\"pref_remove_exclude_categories_anime\">دسته بندی‌های جدا شده انیمه</string>\n    <string name=\"pref_category_external_downloader\">دانلودر خارجی</string>\n    <string name=\"pref_use_external_downloader\">استفاده همیشگی از دانلودر خارجی برای انیمه</string>\n    <string name=\"pref_external_downloader_selection\">ترجیح برنامه دانلودر</string>\n    <string name=\"pref_download_new_episodes\">دانلود قسمت‌های جدید</string>\n    <string name=\"auto_download_while_watching\">دانلود خودکار هنگام مشاهده</string>\n    <string name=\"download_ahead_info_anime\">فقط بر ورودی‌های کتابخانه عمل میکند و اگر قسمت فعلی و بعدی دانلود شده باشند</string>\n    <string name=\"pref_track_on_add_library\">باز کردن منوی پیگیری هنگام افزودن به کتابخانه</string>\n    <string name=\"pref_show_next_episode_airing_time\">نمایش زمان انتشار قسمت بعدی</string>\n    <string name=\"pref_backup_flags_summary\">چه اطلاعاتی در فایل بکاپ اضافه شود</string>\n    <string name=\"used_cache_both\">اشغال توسط انیمه: %1$s، اشغال توسط مانگا: %2$s</string>\n    <string name=\"pref_clear_manga_database\">پاک کردن پایگاه داده</string>\n    <string name=\"pref_clear_anime_database\">پاکسازی دیتابیس انیمه</string>\n    <string name=\"pref_clear_manga_database_summary\">حذف سابقه برای مانگاهایی که در کتابخانه ذخیره نشده اند</string>\n    <string name=\"pref_clear_anime_database_summary\">حذف تاریخچه برای انیمه‌هایی که در کتابخانه ذخیره نشده‌اند</string>\n    <string name=\"anime_from_library\">انیمه از کتابخانه</string>\n    <string name=\"downloaded_episodes\">قسمت‌های دانلود شده</string>\n    <string name=\"local_manga_source\">منبع داخلی مانگا</string>\n    <string name=\"local_anime_source\">منبع داخلی انیمه</string>\n    <string name=\"episode_not_found\">قسمت پیدا نشد</string>\n    <string name=\"local_invalid_episode_format\">ساختار نامعتبر قسمت</string>\n    <string name=\"unknown_studio\">استودیو ناشناخته</string>\n    <string name=\"delete_downloads_for_anime\">حذف قسمت‌های دانلود شده؟</string>\n    <string name=\"snack_add_to_manga_library\">مانگا به کتابخانه اضافه شود؟</string>\n    <string name=\"snack_add_to_anime_library\">افزودن انیمه به کتابخانه؟</string>\n    <string name=\"display_mode_episode\">قسمت %1$s</string>\n    <string name=\"episode_downloading_progress\">در حال دانلود (%%%d)</string>\n    <string name=\"download_error\">خطا</string>\n    <string name=\"download_paused\">متوقف</string>\n    <string name=\"show_episode_number\">شماره قسمت</string>\n    <string name=\"sort_by_episode_number\">بر اساس تعداد قسمت</string>\n    <string name=\"download_unseen\">دیده نشده</string>\n    <string name=\"confirm_delete_episodes\">از حذف قسمت‌های انتخاب شده مطمئمن هستید؟</string>\n    <string name=\"also_set_episode_settings_for_library\">همچنین بر همه انیمه‌های کتابخانه اعمال کن</string>\n    <string name=\"no_episodes_error\">هیچ قسمتی پیدا نشد</string>\n    <string name=\"watching\">در حال مشاهده</string>\n    <string name=\"currently_reading\">در حال خواندن</string>\n    <string name=\"currently_watching\">در حال دیدن</string>\n    <string name=\"plan_to_watch\">برنامه برای مشاهده</string>\n    <string name=\"not_interesting\">غیر جالب</string>\n    <string name=\"want_to_read\">خواهان خواندن</string>\n    <string name=\"want_to_watch\">خواهان مشاهده</string>\n    <string name=\"repeating_anime\">مشاهده مجدد</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">این باعث حذف تاریخ مشاهده قسمت میشود. مطمئنید؟</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">بازنشانی همه قسمت‌های مشاهده شده برای این انیمه</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s، %3$s</string>\n    <string name=\"episode_progress\">پیشرفت: %1$s از %2$s</string>\n    <string name=\"episode_progress_no_total\">پیشرفت: %1$s</string>\n    <string name=\"recent_anime_time\">قسمت %1$s - %2$s‮‮</string>\n    <string name=\"video_list_empty_error\">ویدیویی پیدا نشد</string>\n    <string name=\"notification_new_episodes\">قسمت‌های جدید پیدا شد</string>\n    <string name=\"information_no_recent_anime\">اخیرا چیزی مشاهده نشده</string>\n    <string name=\"episode_settings_updated\">تنظیمات پیشفرض قسمت‌‌ها بروزرسانی شد</string>\n    <string name=\"download_notifier_download_paused_chapters\">دانلود متوقف شد</string>\n    <string name=\"download_notifier_download_paused_episodes\">دانلود قسمت متوقف شد</string>\n    <string name=\"channel_new_chapters_episodes\">به روزرسانی قسمت‌ها</string>\n    <string name=\"label_history\">مانگا</string>\n    <string name=\"label_anime_history\">انیمه</string>\n    <string name=\"label_updates\">مانگا</string>\n    <string name=\"label_anime_updates\">انیمه</string>\n    <string name=\"action_change_intro_length\">تغییر طول مقدمه</string>\n    <string name=\"notification_episodes_single\">قسمت %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">قسمت %1$s و %2$d قسمت دیگر</string>\n    <string name=\"notification_episodes_multiple\">قسمت‌های %1$s</string>\n    <string name=\"episode_settings\">تنظیمات قسمت</string>\n    <string name=\"pref_backup_flags\">تنظیمات بکاپ</string>\n    <string name=\"label_manga_extensions\">افزونه‌های مانگا</string>\n    <string name=\"label_anime_extensions\">افزونه‌های انیمه</string>\n    <string name=\"label_migration_manga\">انتقال مانگا</string>\n    <string name=\"label_migration_anime\">انتقال انیمه</string>\n    <string name=\"settings\">تنظیمات</string>\n    <string name=\"copied_video_link_to_clipboard\">لینک کیفیت ویدئو در کلیپ‌بورد کپی شد</string>\n    <string name=\"choose_video_quality\">انتخاب کیفیت ویدیو:</string>\n    <string name=\"extension_settings\">تنظیمات افزونه‌ها</string>\n    <string name=\"pref_episode_swipe_end\">کارکرد کشیدن به راست</string>\n    <string name=\"pref_episode_swipe_start\">کارکرد کشیدن به چپ</string>\n    <string name=\"data_saver_exclude\">استثناء از صرفه‌جویی داده</string>\n    <string name=\"data_saver_stop_exclude\">توقف استثناء از صرفه‌جویی داده</string>\n    <string name=\"data_saver\">صرفه‌جویی داده</string>\n    <string name=\"data_saver_summary\">فشرده‌سازی عکس‌ها قبل از دانلود یا بارگیری در ریدر</string>\n    <string name=\"data_saver_downloader\">صرفه‌جویی داده در دانلود</string>\n    <string name=\"data_saver_ignore_jpeg\">نادیده گرفتن تصاویر Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">نادیده گرفتن انیمیشن‌های Gif</string>\n    <string name=\"data_saver_image_quality\">کیفیت تصویر</string>\n    <string name=\"data_saver_image_quality_summary\">مقدار بالاتر به معنی درصد ذخیره بالاتر کیفیت عکس میباشد، ولی فایل‌ها حجیم تر میشوند، 80 درصد میانه خوبی بین اندازه فایل و کیفیت تصویر است</string>\n    <string name=\"data_saver_image_format\">فشرده‌سازی به Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">اندازه فایل Jpeg به مراتب از فایل Webp کمتر از (به معنی صرفه جویی بیشتر داده) ولی منجر به از دست رفتن کیفیت بیشتر عکس‌ها میشود.\n\\nفعلا به Jpeg فشرده‌سازی شد</string>\n    <string name=\"data_saver_image_format_summary_off\">اندازه فایل Jpeg به مراتب از فایل Webp کمتر از (به معنی صرفه جویی بیشتر داده) ولی منجر به از دست رفتن کیفیت بیشتر عکس‌ها میشود.\n\\nفعلا به Jpeg فشرده‌سازی شد</string>\n    <string name=\"data_saver_color_bw\">تبدیل به سیاه و سفید</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (نیازمند یک سرور پروکسی Bandwidth Hero میباشد)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">سرور پروکسی Bandwidth Hero</string>\n    <string name=\"data_saver_server_summary\">آدرس سرور پروکسی Bandwidth Hero را اینجا قرار دهید</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fi/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s jakso</item>\n        <item quantity=\"other\">%1$s jaksoa</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 uusi jakso</item>\n        <item quantity=\"other\">%1$d uutta jaksoa</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d sekunti</item>\n        <item quantity=\"other\">%d sekuntia</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fi/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Paina takaisin uudelleen poistuaksesi</string>\n    <string name=\"action_filter_started\">Aloitettu</string>\n    <string name=\"action_sort_airing_time\">Tuuletusaika</string>\n    <string name=\"action_reorganize_by\">Järjestä uudelleen</string>\n    <string name=\"relative_time_now\">Nyt</string>\n    <string name=\"pref_library_update_show_tab_badge\">Näytä lukemattomien määrä päivitys ikoneissa</string>\n    <string name=\"label_player_settings\">Soittimen asetukset</string>\n    <string name=\"action_search_player_settings\">Soittimen hakuasetukset</string>\n    <string name=\"pref_player_internal\">Sisäinen soitin</string>\n    <string name=\"pref_player_internal_summary\">Edistyminen, säätimet, asettelu</string>\n    <string name=\"pref_progress_mark_as_seen\">Missä vaiheessa jakso merkitään katsotuksi</string>\n    <string name=\"pref_preserve_watching_position\">Säilytä katselusijainti katsotuissa jaksoissa</string>\n    <string name=\"pref_category_player_orientation\">Suunta</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Käänteinen maisema</string>\n    <string name=\"rotation_sensor_portrait\">Anturin muotokuva</string>\n    <string name=\"rotation_sensor_landscape\">Anturin maisema</string>\n    <string name=\"pref_category_controls\">Säätimet</string>\n    <string name=\"pref_remember_brightness\">Muista viimeksi käytetty kirkkaus ja käytä sitä</string>\n    <string name=\"pref_remember_volume\">Muista viimeksi käytetty äänenvoimakkuus ja käytä sitä</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Ota automaattinen ohitus käyttöön</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Ota Netflix-tyyli käyttöön</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 sekuntia</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 sekuntia</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 sekuntia</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 sekuntia</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 sekuntia</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 sekuntia</string>\n    <string name=\"pref_enable_aniskip\">Ota AniSkip käyttöön</string>\n    <string name=\"pref_category_pip\">Kuva kuvassa (PiP)</string>\n    <string name=\"pref_enable_pip\">Ota PiP-tila käyttöön</string>\n    <string name=\"pref_category_external_player\">Ulkoinen toisto-ohjelma</string>\n    <string name=\"pref_always_use_external_player\">Käytä aina ulkoista toisto-ohjelmaa</string>\n    <string name=\"pref_default_intro_length\">Esittelyn ohituksen oletuspituus</string>\n    <string name=\"pref_intro_length\">Esittelyn ohituksen pituus</string>\n    <string name=\"pref_skip_disable\">Poista käytöstä</string>\n    <string name=\"pref_player_smooth_seek\">Ota tarkka haku käyttöön</string>\n    <string name=\"video_fit_screen\">Sovita näyttöön</string>\n    <string name=\"video_crop_screen\">Leikattu näyttöön</string>\n    <string name=\"video_stretch_screen\">Venytetty näyttöön</string>\n    <string name=\"enable_auto_play\">Automaattinen toisto on käytössä</string>\n    <string name=\"disable_auto_play\">Automaattinen toisto on poissa käytöstä</string>\n    <string name=\"player_aniskip_dontskip\">Älä ohita</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s ohitetaan %d sekunnin kuluttua</string>\n    <string name=\"player_aniskip_skip\">%s ohitettu</string>\n    <string name=\"no_next_episode\">Seuraavaa jaksoa ei löytynyt!</string>\n    <string name=\"screenshot_show_subs\">Näytä tekstitys näyttökuvassa</string>\n    <string name=\"manga_categories\">Kategoriat</string>\n    <string name=\"general_categories\">Luokat</string>\n    <string name=\"anime_categories\">Animeluokat</string>\n    <string name=\"chapters_episodes\">Luvut ja jaksot</string>\n    <string name=\"episodes\">Jaksot</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_manga_sources\">Mangalähteet</string>\n    <string name=\"label_anime_sources\">Animelähteet</string>\n    <string name=\"label_watched_episodes\">Katsottu</string>\n    <string name=\"action_filter_unseen\">Ei katsottu</string>\n    <string name=\"action_global_manga_search\">Yleinen mangahaku</string>\n    <string name=\"action_global_anime_search\">Yleinen animehaku</string>\n    <string name=\"action_sort_total_episodes\">Jaksoja yhteensä</string>\n    <string name=\"action_sort_last_seen\">Katsottu viimeksi</string>\n    <string name=\"action_sort_last_checked\">Tarkistettu viimeksi</string>\n    <string name=\"action_sort_latest_episode\">Uusin jakso</string>\n    <string name=\"action_sort_last_anime_update\">Viimeisin animepäivitys</string>\n    <string name=\"action_mark_as_seen\">Merkitse katsotuksi</string>\n    <string name=\"action_mark_as_unseen\">Merkitse katsomattomaksi</string>\n    <string name=\"action_play_internally\">Toista sisäisesti</string>\n    <string name=\"action_play_externally\">Toista ulkoisesti</string>\n    <string name=\"action_download_unread\">Lataa lukemattomat luvut</string>\n    <string name=\"action_download_unseen\">Lataa katsomattomat jaksot</string>\n    <string name=\"action_bookmark_episode\">Lisää jakso kirjanmerkkeihin</string>\n    <string name=\"action_remove_bookmark_episode\">Poista jakso kirjanmerkeistä</string>\n    <string name=\"action_edit_anime_categories\">Muokkaa animeluokkia</string>\n    <string name=\"action_edit_manga_categories\">Muokkaa mangaluokkia</string>\n    <string name=\"action_previous_episode\">Edellinen jakso</string>\n    <string name=\"action_play\">Toista</string>\n    <string name=\"action_next_episode\">Seuraava jakso</string>\n    <string name=\"action_show_anime\">Näytä anime</string>\n    <string name=\"action_display_download_badge_anime\">Lataa jaksot</string>\n    <string name=\"action_display_local_badge_manga\">Laitteelle tallennettu manga</string>\n    <string name=\"action_display_local_badge_anime\">Paikallinen anime</string>\n    <string name=\"action_order_by_episode_number\">Jaksonumeroiden mukaisesti</string>\n    <string name=\"default_manga_category\">Oletus kategoria</string>\n    <string name=\"pref_manga_library_update_categories_details\">Poissuljettuihin kategorioihin sisältyvää mangaa ei päivitetä, vaikka ne olisivat myös sisällytetyissä kategorioissa.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Poissuljetut kategoriat</string>\n    <string name=\"pref_download_new_episodes\">Lataa uudet jaksot</string>\n    <string name=\"auto_download_while_watching\">Lataa automaattisesti katselun aikana</string>\n    <string name=\"pref_backup_flags_summary\">Varmuuskopiotiedostoon sisällytettävät tiedot</string>\n    <string name=\"pref_clear_manga_database\">Tyhjennä tietokanta</string>\n    <string name=\"pref_clear_anime_database\">Tyhjennä animetietokanta</string>\n    <string name=\"pref_clear_manga_database_summary\">Poista mangan historia, jota ei ole tallennettu kirjastoosi</string>\n    <string name=\"downloaded_episodes\">Ladatut jaksot</string>\n    <string name=\"local_manga_source\">Paikallinen mangalähde</string>\n    <string name=\"local_anime_source\">Paikallinen animelähde</string>\n    <string name=\"episode_not_found\">Jaksoa ei löytynyt</string>\n    <string name=\"local_invalid_episode_format\">Virheellinen jakson muoto</string>\n    <string name=\"unknown_studio\">Tuntematon studio</string>\n    <string name=\"delete_downloads_for_anime\">Poistetaanko ladatut jaksot?</string>\n    <string name=\"snack_add_to_manga_library\">Lisää sarja kirjastoon?</string>\n    <string name=\"snack_add_to_anime_library\">Lisätäänkö anime kirjastoon?</string>\n    <string name=\"display_mode_episode\">Jakso %1$s</string>\n    <string name=\"episode_downloading_progress\">Ladataan (%d%%)</string>\n    <string name=\"download_error\">Virhe</string>\n    <string name=\"download_paused\">Pysäytetty</string>\n    <string name=\"show_episode_number\">Jakson numero</string>\n    <string name=\"sort_by_episode_number\">Jaksojen numeroiden mukaisesti</string>\n    <string name=\"download_unseen\">Katsomatta</string>\n    <string name=\"confirm_delete_episodes\">Haluatko varmasti poistaa valitut jaksot?</string>\n    <string name=\"also_set_episode_settings_for_library\">Käytä myös kaikkiin kirjastossani oleviin animeihin</string>\n    <string name=\"no_episodes_error\">Jaksoja ei löytynyt</string>\n    <string name=\"watching\">Katsellaan</string>\n    <string name=\"currently_reading\">Luetaan parhaillaan</string>\n    <string name=\"currently_watching\">Katsellaan parhaillaan</string>\n    <string name=\"not_interesting\">Ei kiinnostava</string>\n    <string name=\"want_to_read\">Haluan lukea</string>\n    <string name=\"want_to_watch\">Haluan katsoa</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Tämä poistaa jakson katselupäivän. Oletko varma?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Nollaa kaikki tämän animen jaksot</string>\n    <string name=\"video_list_empty_error\">Videoita ei löytynyt</string>\n    <string name=\"notification_new_episodes\">Uusia jaksoja löytyi</string>\n    <string name=\"information_no_recent_anime\">Mitään ei ole katseltu viime aikoina</string>\n    <string name=\"episode_settings_updated\">Jaksojen oletusasetukset on päivitetty</string>\n    <string name=\"download_notifier_download_paused_chapters\">Lataus pysäytetty</string>\n    <string name=\"download_notifier_download_paused_episodes\">Jakson lataus on keskeytetty</string>\n    <string name=\"channel_new_chapters_episodes\">Lukujen päivitykset</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_display_unseen_badge\">Näkemättömät jaksot</string>\n    <string name=\"action_stop\">Pysäytä</string>\n    <string name=\"action_continue\">Jatkaa</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_library_summary\">Luokat, yleinen päivitys, luvun/jakson pyyhkäisy</string>\n    <string name=\"pref_behavior\">Luvun käyttäytyminen</string>\n    <string name=\"action_add_repo_message\">Lisää tietovarastot kohteeseen %s. Tämän URL-osoitteen tulisi päättyä \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Toimii vain, jos nykyinen luku/jakso + seuraava on jo ladattu.</string>\n    <string name=\"non_library_settings\">Kaikki luetut/katsotut merkinnät</string>\n    <string name=\"action_sort_last_manga_update\">Viimeinen manga-päivitys</string>\n    <string name=\"action_show_manga\">Näytä manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Jatka katselua/lukemista -painike</string>\n    <string name=\"pref_update_only_completely_read\">Ohita merkinnät, joissa on lukemattomia jaksoja ja lukuja</string>\n    <string name=\"pref_category_delete_chapters\">Poista luvut/jaksot</string>\n    <string name=\"pref_remove_after_marked_as_read\">Sen jälkeen, kun se on merkitty manuaalisesti luetuksi/katselluksi</string>\n    <string name=\"pref_remove_after_read\">Poista automaattisesti lukemisen/katselun jälkeen</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Salli kirjanmerkkeihin merkittyjen lukujen/jaksojen poistaminen</string>\n    <string name=\"pref_auto_update_manga_sync\">Päivitä edistymistä lukemisen/katsomisen jälkeen</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Päivitä edistyminen, kun merkitty luetuksi/katsotuksi</string>\n    <string name=\"pref_clear_chapter_cache\">Tyhjennä lukujen ja jaksojen välimuisti</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Tyhjennä jaksojen/lukujen välimuisti sovelluksen käynnistyksen yhteydessä</string>\n    <string name=\"clear_database_confirmation\">Oletko varma? Valmiit jaksot ja luvut sekä muiden kuin kirjastomerkintöjen edistyminen menetetään.</string>\n    <string name=\"pref_incognito_mode_summary\">Keskeyttää historian tallentamisen</string>\n    <string name=\"manga_from_library\">Manga kirjastosta</string>\n    <string name=\"also_set_chapter_settings_for_library\">Koskee myös kaikkia kirjastossani olevia mangoja</string>\n    <string name=\"dialog_with_checkbox_reset\">Nollaa kaikki luvut tälle mangalle</string>\n    <string name=\"download_insufficient_space\">Lataaminen epäonnistui tallennustilan puutteen vuoksi</string>\n    <string name=\"download_queue_size_warning\">Varoitus: Suuret joukkolataukset voivat hidastaa lähteitä ja/tai estää Aniyomin toiminnan. Napauta saadaksesi lisätietoja.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Pakota sovellus tarkistamaan ladatut luvut ja jaksot uudelleen</string>\n    <string name=\"label_player\">Soitin</string>\n    <string name=\"pref_player_settings_summary\">Sisäinen soitin, eleet, dekooderit, tekstitykset</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Salli eleet paneeleissa</string>\n    <string name=\"pref_controls_show_loading\">Näytä lastausympyrän kuvake</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Näytä nykyisen luvun ilmaisin</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Näkyy vain, jos videossa on lukuja</string>\n    <string name=\"pref_controls_display_volume_percentage\">Näytä äänenvoimakkuus prosentteina</string>\n    <string name=\"pref_hosters\">Isännöitsijät</string>\n    <string name=\"pref_hosters_show_failure\">Näytä epäonnistuneet isännöitsijät</string>\n    <string name=\"pref_hosters_show_empty\">Näytä tyhjät isännöitsijät</string>\n    <string name=\"pref_player_fullscreen\">Näytä sisältö näytön leikkauksessa</string>\n    <string name=\"pref_player_hide_controls\">Piilota soittimen säätimet, kun soitin avataan</string>\n    <string name=\"pref_show_system_bar\">Näytä järjestelmän tilarivi säätimineen</string>\n    <string name=\"pref_reduce_motion\">Vähennä soittimen animaatiota</string>\n    <string name=\"pref_player_time_to_disappear\">Piilota soittimen säätimien aika</string>\n    <string name=\"pref_panel_opacity\">Paneelin läpinäkymättömyys</string>\n    <string name=\"pref_category_intro_skip\">Esittelyn ohitus</string>\n    <string name=\"pref_enable_intro_skip\">Ota esittelyn ohitus käyttöön</string>\n    <string name=\"pref_waiting_time_aniskip\">Painikkeen aikakatkaisu</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip vaatii toimiakseen animeen seurannan MAL:lla tai Anilistilla</string>\n    <string name=\"pref_disable_aniskip_chapter\">Poista AniSkip käytöstä, jos videossa on jo lukuja</string>\n    <string name=\"pref_pip_episode_toasts\">Näytä jaksojen aloitusnäytöt, kun vaihdat jaksoja PiP-tilassa</string>\n    <string name=\"pref_pip_on_exit\">Vaihda automaattisesti PiP-tilaan soittimesta poistuttaessa</string>\n    <string name=\"pref_pip_replace_with_previous\">Korvaa \\\"Ohita kymmenen sekuntia\\\" -vaihtoehdon edellisellä jaksolla</string>\n    <string name=\"pref_external_player_preference\">Ulkoisen soittimen asetus</string>\n    <string name=\"pref_player_gestures\">Eleet</string>\n    <string name=\"pref_player_gestures_summary\">Haku, kaksoisnapautus, mediasäätimet</string>\n    <string name=\"pref_category_player_sliders\">Liukusäätimet</string>\n    <string name=\"enable_volume_brightness_gestures\">Ota äänenvoimakkuuden ja kirkkauden eleet käyttöön</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Vaihda äänenvoimakkuus ja kirkkauden liukusäätin</string>\n    <string name=\"pref_category_player_seeking\">Etsitään</string>\n    <string name=\"enable_horizontal_seek_gesture\">Ota vaakasuuntainen hakuele käyttöön</string>\n    <string name=\"pref_show_seekbar\">Näytä hakupalkki haettaessa</string>\n    <string name=\"pref_skip_length\">Kaksoisnapauta ohittaaksesi pituuden</string>\n    <string name=\"pref_player_smooth_seek_summary\">Kun otettuna käyttöön, haku ei keskity avainruutuihin, mikä johtaa hitaampaan mutta tarkempaan hakuun</string>\n    <string name=\"pref_category_double_tap\">Kaksoisnapautus</string>\n    <string name=\"pref_left_double_tap\">Kaksoisnapautus (vasen)</string>\n    <string name=\"pref_center_double_tap\">Kaksoisnapautus (keskellä)</string>\n    <string name=\"pref_right_double_tap\">Kaksoisnapautus (oikea)</string>\n    <string name=\"pref_double_tap_info\">Kun napautusele on asetettu arvoon Mukautettu, se voidaan sitoa input.conf-tiedoston kautta. Näppäinkoodit ovat 0x10001 vasemmalle, 0x10002 keskelle ja 0x10003 oikealle.</string>\n    <string name=\"single_action_none\">Ei mitään</string>\n    <string name=\"single_action_seek\">Etsi</string>\n    <string name=\"single_action_playpause\">Toista/Tauko</string>\n    <string name=\"single_action_switch\">Vaihda jaksoa</string>\n    <string name=\"single_action_custom\">Mukautettu</string>\n    <string name=\"pref_category_media_controls\">Median säätimet</string>\n    <string name=\"pref_media_previous\">Edellinen</string>\n    <string name=\"pref_media_playpause\">Toista/Tauko</string>\n    <string name=\"pref_media_next\">Seuraava</string>\n    <string name=\"pref_media_info\">Kun median säädin on asetettu \\\"Mukautettu\\\":ksi, se voidaan sitoa input.conf-tiedoston kautta. Avainkoodit ovat 0x10004 edelliselle, 0x10005 toistolle/taukolle ja 0x10006 seuraavalle.</string>\n    <string name=\"pref_player_decoder\">Dekooderi</string>\n    <string name=\"pref_player_decoder_summary\">Laitteistodekoodaus, pikselimuoto, kaistanleveyden poisto</string>\n    <string name=\"pref_try_hw\">Kokeile laitteistodekoodausta</string>\n    <string name=\"pref_gpu_next_title\">Ota gpu-next käyttöön</string>\n    <string name=\"pref_gpu_next_subtitle\">Uusi videoiden hahmonnustaustapää</string>\n    <string name=\"pref_debanding_title\">Kaistan purkaminen</string>\n    <string name=\"pref_debanding_none\">Ei mitään</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Käytä YUV420P-pikselimuotoa</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Saattaa korjata joidenkin videokoodekkien mustat ruudut, mutta voi myös parantaa suorituskykyä laadun kustannuksella.</string>\n    <string name=\"pref_player_subtitle\">Tekstitykset</string>\n    <string name=\"pref_player_subtitle_summary\">Ensisijaiset kielet, sallittujen lista, kiellettyjen lista</string>\n    <string name=\"pref_player_subtitle_lang\">Ensisijaiset kielet</string>\n    <string name=\"pref_player_subtitle_lang_info\">Useita tekstityksiä sisältävien videoiden tekstityskielet valitaan oletuksena. Kaksi- tai kolmikirjaimiset kielikoodit kelpaavat. Useita arvoja voidaan erottaa pilkulla.</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Epäkelvollinen koodi: \\\"%s\\\"</string>\n    <string name=\"pref_player_subtitle_whitelist\">Sallittujen lista</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Sallittujen lista tekstityksille. Jos sallittujen sanojen lista on määritelty, käytetään ensimmäistä tekstitystä, joka sisältää sallittujen sanojen listalla olevan sanan. Useita arvoja voidaan erottaa pilkulla.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Kiellettyjen lista</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Kiellettyjen lista tekstityksille. Kun kiellettyjen lista on määritelty, kaikki kielletyllä listalla olevan sanan sisältävät tekstitykset suodatetaan pois. Useita arvoja voidaan erottaa pilkulla.</string>\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Ensisijaiset kielet, äänenkorkeuden korjaus, äänikanavat</string>\n    <string name=\"pref_player_audio_lang\">Ensisijaiset kielet</string>\n    <string name=\"pref_player_audio_lang_info\">Oletusarvoisesti valittavat äänikielet videossa, jossa on useita äänivirtoja. Kaksi- tai kolmikirjaimiset kielikoodit kelpaavat. Useita arvoja voidaan erottaa pilkulla.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Ota äänenkorkeuden korjaus käyttöön</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Estää äänen muuttumisen korkeaksi suuremmilla nopeuksilla ja matalaksi hitaammilla nopeuksilla</string>\n    <string name=\"pref_player_audio_channels\">Äänikanavat</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Käänteinen stereo</string>\n    <string name=\"pref_player_audio_boost_cap\">Äänenvoimakkuuden tehosteraja</string>\n    <string name=\"pref_player_custom_button\">Mukautetut painikkeet</string>\n    <string name=\"pref_player_custom_button_summary\">Suorita lua-koodi mukautetuilla painikkeilla</string>\n    <string name=\"pref_player_custom_button_header\">Muokkaa mukautettuja painikkeita</string>\n    <string name=\"pref_player_custom_button_guide\">Mukautettujen painikkeiden opas</string>\n    <string name=\"pref_player_custom_button_empty\">Sinulla ei ole mukautettuja painikkeita. Napauta plus-painiketta luodaksesi mukautetun painikkeen.</string>\n    <string name=\"pref_player_custom_button_add\">Lisää-painike</string>\n    <string name=\"pref_player_custom_button_edit\">Muokkaa-painike</string>\n    <string name=\"pref_player_custom_button_title\">Otsikko</string>\n    <string name=\"pref_player_custom_button_error_exists\">Painike on jo olemassa!</string>\n    <string name=\"pref_player_custom_button_content\">Lua-koodi</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua-koodi (pitkällä painalluksella)</string>\n    <string name=\"pref_player_custom_button_optional\">(valinnainen)</string>\n    <string name=\"pref_player_custom_button_delete\">Poista-painike</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Haluatko poistaa painikkeen %s?</string>\n    <string name=\"pref_player_custom_button_startup\">Käynnistyksen yhteydessä</string>\n    <string name=\"pref_player_editor\">Skriptimuokkain</string>\n    <string name=\"pref_player_editor_summary\">Muokkaa ja luo uusia skriptejä ja skriptivaihtoehtoja</string>\n    <string name=\"pref_player_editor_script\">Skriptit</string>\n    <string name=\"pref_player_editor_script_opts\">Skriptivaihtoehdot</string>\n    <string name=\"pref_player_no_items\">Hakemisto ei sisällä kohteita. Lisää uusi tiedosto napauttamalla plus-merkki-painiketta.</string>\n    <string name=\"editor_unsaved_progress\">Sinulla on tallentamattomia muutoksia. Haluatko silti palata takaisin?</string>\n    <string name=\"editor_save_error\">Tiedostoa ei voitu tallentaa</string>\n    <string name=\"editor_save_success\">Tiedosto tallennettu</string>\n    <string name=\"editor_action_rename\">Nimeä tiedosto uudelleen</string>\n    <string name=\"editor_action_delete\">Poista tiedosto</string>\n    <string name=\"editor_file_already_exists\">Tiedosto on jo olemassa</string>\n    <string name=\"editor_invalid_filename\">Epäkelvollinen tiedostonimi</string>\n    <string name=\"editor_create_file\">Luo tiedosto</string>\n    <string name=\"editor_edit_file\">Muokkaa tiedoston nimeä</string>\n    <string name=\"editor_filename\">Tiedoston nimi</string>\n    <string name=\"editor_create_error\">Tiedostoa ei voida luoda</string>\n    <string name=\"editor_rename_error\">Tiedostoa ei voi nimetä uudelleen</string>\n    <string name=\"editor_delete_error\">Tiedostoa ei voida poistaa</string>\n    <string name=\"editor_delete_file\">Poista tiedosto</string>\n    <string name=\"editor_delete_file_confirmation\">Haluatko poistaa tiedoston \\\"%s\\\"?</string>\n    <string name=\"pref_player_advanced\">Edistynyt</string>\n    <string name=\"pref_player_advanced_summary\">Käyttäjätiedostot, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_user_files\">Käytä käyttäjän MPV-tiedostoja</string>\n    <string name=\"pref_mpv_user_files_summary\">Käytä tiedostoja mpv-config-hakemistossa</string>\n    <string name=\"pref_mpv_conf\">Muokkaa MPV-määritystiedostoa saadaksesi lisää soittimen asetuksia</string>\n    <string name=\"pref_reset_mpv_conf\">Nollaa MPV-määritystiedosto</string>\n    <string name=\"player_skip_action\">Ohita %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s ohitettu</string>\n    <string name=\"player_chapter_type_opening\">Avaaminen</string>\n    <string name=\"player_chapter_type_ending\">Päättyminen</string>\n    <string name=\"pref_mpv_input\">Muokkaa MPV-syöttötiedostoa näppäimistökartoituksen määritystä varten</string>\n    <string name=\"toast_sleep_timer_ended\">Uniajastin päättynyt</string>\n    <string name=\"numeric_chooser_value_too_big\">Arvo liian suuri</string>\n    <string name=\"numeric_chooser_value_too_small\">Arvo liian pieni</string>\n    <string name=\"no_prev_episode\">Edellistä jaksoa ei löytynyt!</string>\n    <string name=\"no_available_videos\">Ei saatavilla olevia videoita</string>\n    <string name=\"no_hosters\">Isännöitsijöiden lista on tyhjä</string>\n    <string name=\"no_episode_loaded\">Yhtään jaksoa ei ladattu</string>\n    <string name=\"select_hoster_from_empty_list\">Isännöitsijä valittu tyhjästä listasta</string>\n    <string name=\"player_sheets_delay_set_as_default\">Aseta oletukseksi</string>\n    <string name=\"player_sheets_track_delay\">Viive</string>\n    <string name=\"player_sheets_track_palette\">Paletti</string>\n    <string name=\"player_sheets_audio_delay_title\">Äänen viive</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Ääni kuultu</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Ääni havaittu</string>\n    <string name=\"player_sheets_sub_delay_title\">Tekstityksen viive</string>\n    <string name=\"player_sheets_sub_delay_speed\">Nopeus</string>\n    <string name=\"player_sheets_sub_delay_delay\">Viive</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Ensisijainen</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Toissijainen</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Molemmat</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Puheen ääni kuultu</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Teksti nähty</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Ääni kuultu</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Ääni havaittu</string>\n    <string name=\"player_sheets_sub_colors_title\">Värit</string>\n    <string name=\"player_sheets_subtitles_color_text\">Teksti</string>\n    <string name=\"player_sheets_subtitles_color_border\">Reuna</string>\n    <string name=\"player_sheets_subtitles_color_background\">Tausta</string>\n    <string name=\"player_sheets_sub_color_red\">Punainen</string>\n    <string name=\"player_sheets_sub_color_green\">Vihreä</string>\n    <string name=\"player_sheets_sub_color_blue\">Sininen</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Tekstitysasetukset</string>\n    <string name=\"player_sheets_sub_typography_title\">Typografia</string>\n    <string name=\"player_sheets_sub_typography_font\">Kirjasin</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Kirjasimen koko</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Reunuksen tyyli</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Reunuksen koko</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fil/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Susunod na hindi nakitang episode</item>\n        <item quantity=\"other\">Susunod na %d hindi nakitang mga episode</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s na episode</item>\n        <item quantity=\"other\">%1$s na mga episode</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Susunod na episode</item>\n        <item quantity=\"other\">Susunod na %d (mga) episode</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Para sa 1 palabas</item>\n        <item quantity=\"other\">Para sa %d na mga palabas</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 bagong episode</item>\n        <item quantity=\"other\">%1$d (na) mga bagong episode</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d segundo</item>\n        <item quantity=\"other\">%d (mga) segundo</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Mga Episode %1$s at 1 pa</item>\n        <item quantity=\"other\">Mga Episode %1$s at %2$d pa</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fil/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Pindutin ulit ang back para umalis</string>\n    <string name=\"action_filter_started\">Nagsimula</string>\n    <string name=\"action_sort_airing_time\">Oras ng pagpapalabas</string>\n    <string name=\"action_reorganize_by\">Muling ayusin</string>\n    <string name=\"relative_time_now\">Ngayon</string>\n    <string name=\"pref_library_summary\">Mga kategorya, panlahatang update, pag-swipe ng kabanata</string>\n    <string name=\"pref_library_update_show_tab_badge\">Ipakita ang bilang ng di pa nakita/nabasa sa Bago</string>\n    <string name=\"label_player_settings\">Mga setting sa player</string>\n    <string name=\"action_search_player_settings\">Maghanap sa mga setting ng player</string>\n    <string name=\"pref_player_internal\">Internal na player</string>\n    <string name=\"pref_player_internal_summary\">Progress, mga kontrol, oryentasyon</string>\n    <string name=\"pref_progress_mark_as_seen\">Sa anong punto upang markahan ang episode bilang nakita</string>\n    <string name=\"pref_preserve_watching_position\">Panatilihin ang posisyon ng panonood sa mga nakitang episode</string>\n    <string name=\"pref_category_player_orientation\">Oryentasyon</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Baliktad na landscape</string>\n    <string name=\"rotation_sensor_portrait\">Sensor na portrait</string>\n    <string name=\"rotation_sensor_landscape\">Sensor na landscape</string>\n    <string name=\"pref_category_controls\">Mga kontrol</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Payagan ang mga gesture sa mga panel</string>\n    <string name=\"pref_controls_show_loading\">Ipakita ng loading circle</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Ipakita ang indicator ng kasalukuyang kabanata</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Lumalabas lang kung may mga kabanata ang video</string>\n    <string name=\"pref_controls_display_volume_percentage\">Ipakita ang volume bilang porsyento</string>\n    <string name=\"pref_remember_brightness\">Tandaan at lumipat sa huling ginamit na liwanag</string>\n    <string name=\"pref_remember_volume\">Tandaan at lumipat sa huling ginamit na volume</string>\n    <string name=\"pref_player_fullscreen\">Ipakita ang nilalaman sa display cutout</string>\n    <string name=\"pref_player_hide_controls\">Itago ang mga kontrol ng player kapag binubuksan ang player</string>\n    <string name=\"pref_show_system_bar\">Ipakita ang system status bar na may mga kontrol</string>\n    <string name=\"pref_reduce_motion\">Bawasan ang animation ng player</string>\n    <string name=\"pref_player_time_to_disappear\">Oras ng pagtatago ng mga kontrol ng player</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Kalabuan (opacity) ng panel</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Paganahin ang auto skip</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Paganahin ang istilo ng Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Timeout ng button</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 segundo</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 na segundo</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 segundo</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 segundo</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 segundo</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 segundo</string>\n    <string name=\"pref_category_player_aniskip_info\">Kinakailangan ng AniSkip na masubaybayan ang anime sa MAL o Anilist upang gumana</string>\n    <string name=\"pref_enable_aniskip\">Paganahin ang AniSkip</string>\n    <string name=\"pref_category_pip\">Picture-in-Picture (PiP)</string>\n    <string name=\"pref_enable_pip\">Paganahin ang paggamit ng PiP mode</string>\n    <string name=\"pref_pip_episode_toasts\">Ipakita ang mga toast ng episode kapag nagpapalit ng mga episode sa PiP mode</string>\n    <string name=\"pref_pip_on_exit\">Awtomatikong lumipat sa PiP mode sa paglabas ng player</string>\n    <string name=\"pref_pip_replace_with_previous\">Pinapalitan ang \\\"Skip 10 seconds option\\\" ng huling episode</string>\n    <string name=\"pref_category_external_player\">Panlabas na player</string>\n    <string name=\"pref_always_use_external_player\">Palaging gumamit ng panlabas na player</string>\n    <string name=\"pref_external_player_preference\">Kagustuhan sa panlabas na player</string>\n    <string name=\"pref_player_gestures\">Mga gesture</string>\n    <string name=\"pref_player_gestures_summary\">Pagse-seek, doubleng pag-tap, mga kontrol sa media</string>\n    <string name=\"pref_category_player_sliders\">Mga slider</string>\n    <string name=\"enable_volume_brightness_gestures\">Paganahin ang mga gesture ng Volume at Linawag</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Ipagpalit ang volume at brightness slider</string>\n    <string name=\"pref_category_player_seeking\">Pagse-seek</string>\n    <string name=\"enable_horizontal_seek_gesture\">Paganahin ang Pahalang na Hanapin ang Gesture</string>\n    <string name=\"pref_show_seekbar\">Ipakita ang seekbar kapag nag-seseek</string>\n    <string name=\"pref_default_intro_length\">Default na laktawan ang haba ng intro</string>\n    <string name=\"pref_intro_length\">Laktawan ang haba ng intro</string>\n    <string name=\"pref_skip_length\">I-double tap para laktawan ang haba</string>\n    <string name=\"pref_skip_disable\">Isara</string>\n    <string name=\"pref_player_smooth_seek\">Paganahin ang saktong pagse-seek</string>\n    <string name=\"pref_player_smooth_seek_summary\">Kapag pinagana, ang paghahanap ay hindi tumutok sa mga keyframe, na humahantong sa mas mabagal ngunit mas maayos na paghahanap</string>\n    <string name=\"pref_category_double_tap\">Doubleng pag-tap</string>\n    <string name=\"pref_left_double_tap\">Doubleng pag-tap (kaliwa)</string>\n    <string name=\"pref_center_double_tap\">Doubleng pag-tap (gitna)</string>\n    <string name=\"pref_right_double_tap\">Doubleng pag-tap (kanan)</string>\n    <string name=\"pref_double_tap_info\">Kapag ang isang tap gesture ay nakatakda sa Custom, maaari itong itakda sa pamamagitan ng input.conf. Ang mga pangunahing code ay 0x10001 para sa kaliwa, 0x10002 para sa gitna, at 0x10003 para sa kanan.</string>\n    <string name=\"single_action_none\">Wala</string>\n    <string name=\"single_action_seek\">I-seek</string>\n    <string name=\"single_action_playpause\">Mag-play/Mag-Pause</string>\n    <string name=\"single_action_switch\">Magpalit ng episode</string>\n    <string name=\"single_action_custom\">Custom</string>\n    <string name=\"pref_category_media_controls\">Mga kontrol sa media</string>\n    <string name=\"pref_media_previous\">Nakaraan</string>\n    <string name=\"pref_media_playpause\">Mag-play/Mag-pause</string>\n    <string name=\"pref_media_next\">Susunod</string>\n    <string name=\"pref_media_info\">Kapag ang isang tap gesture ay nakatakda sa Custom, maaari itong itakda sa pamamagitan ng input.conf. Ang mga pangunahing code ay 0x10004 para sa nakaraan, 0x10005 para sa pag-play/pag-pause, at 0x10006 para sa susunod.</string>\n    <string name=\"pref_player_decoder\">Decoder</string>\n    <string name=\"pref_player_decoder_summary\">Hardware decoding, pixel format, debanding</string>\n    <string name=\"pref_try_hw\">Subukan ang hardware decoding</string>\n    <string name=\"pref_gpu_next_title\">Paganahin ang gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Isang bagong video rendering backend</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Wala</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Gamitin ang YUV420P na pixel format</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Maaaring ayusin ang mga itim na screen sa ilang video codec, maaari ring mapabuti ang performance sa halaga ng kalidad</string>\n    <string name=\"pref_player_subtitle\">Mga subtitle</string>\n    <string name=\"pref_player_subtitle_summary\">Mga napiling wika, whitelist, blacklist</string>\n    <string name=\"pref_player_subtitle_lang\">Mga napiling wika</string>\n    <string name=\"pref_player_subtitle_lang_info\">Ang (mga) subtitle na wika na pipiliin bilang default sa isang video na may maraming subtitle, gumagana ang dalawa o tatlong titik na code ng mga wika. Maaaring i-delimite ng kuwit (comma) kung marami ang value.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Whitelist</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Whitelist para sa mga subtitle.Kung natukoy ang isang whitelist, gagamitin ang unang subtitle na naglalaman ng naka-whitelist na salita. Maaaring i-delimite ng kuwit (comma) kung marami ang value.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Blacklist</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Blacklist para sa mga subtitle. Kung tinukoy ang isang blacklist, ang lahat ng mga subtitle na naglalaman ng isang naka-blacklist na salita ay sasalain. Maaaring i-delimite ng kuwit (comma) kung marami ang value.</string>\n    <string name=\"pref_player_audio\">Tunog</string>\n    <string name=\"pref_player_audio_summary\">Mga napiling wika, pitch correction, mga audio channel</string>\n    <string name=\"pref_player_audio_lang\">Mga napiling wika</string>\n    <string name=\"pref_player_audio_lang_info\">Ang (mga) wika ng audio na pipiliin bilang default sa isang video na may maraming audio stream, gumagana ang dalawa o tatlong titik na code ng mga wika. Maaaring i-delimite ng kuwit (comma) kung marami ang value.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Paganahin ang audio pitch correction</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Pinipigilan ang audio na maging mataas na tono sa mas mabilis na bilis at mahina na tono sa mas mabagal na bilis</string>\n    <string name=\"pref_player_audio_channels\">Mga audio channel</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Awto-safe</string>\n    <string name=\"pref_player_audio_channels_auto\">Awto</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Baliktad na stereo</string>\n    <string name=\"pref_player_audio_boost_cap\">Volume boost cap</string>\n    <string name=\"pref_player_advanced\">Karagdagan</string>\n    <string name=\"pref_player_advanced_summary\">Mga script, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">I-edit ang MPV configuration file para sa karagdagang mga setting ng player</string>\n    <string name=\"pref_reset_mpv_conf\">Ibalik sa dati ang MPV configuration file</string>\n    <string name=\"pref_mpv_input\">I-edit ang MPV input file para sa keyboard mapping configuration</string>\n    <string name=\"video_fit_screen\">Pagkasyahin sa screen</string>\n    <string name=\"video_crop_screen\">Na-crop sa screen</string>\n    <string name=\"video_stretch_screen\">Naka-stretch sa screen</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Natapos na ang sleep timer</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Masyadong malaki ang value</string>\n    <string name=\"numeric_chooser_value_too_small\">Masyadong maliit ang value</string>\n    <string name=\"enable_auto_play\">Naka-on ang auto-play</string>\n    <string name=\"disable_auto_play\">Naka-off ang auto-play</string>\n    <string name=\"player_aniskip_dontskip\">Huwag laktawan</string>\n    <string name=\"player_aniskip_dontskip_toast\">Laktawan ang %s sa loob ng %d segundo</string>\n    <string name=\"player_aniskip_skip\">Nilaktawan ng %s</string>\n    <string name=\"no_next_episode\">Hindi nahanap ang Susunod na Episode!</string>\n    <string name=\"no_prev_episode\">Hindi nahanap ang Nakaraang Episode!</string>\n    <string name=\"player_sheets_delay_set_as_default\">I-set bilang default</string>\n    <string name=\"player_sheets_audio_delay_title\">Tagal ng audio</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Narinig ang tunog</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Nahanap ang tunog</string>\n    <string name=\"player_sheets_sub_delay_title\">Tagal sa subtitle</string>\n    <string name=\"player_sheets_sub_delay_speed\">Bilis</string>\n    <string name=\"player_sheets_sub_delay_delay\">Tagal</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Pangunahin</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Pangalawa</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Pareho</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Narinig ang boses</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Nakita ang text</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Narinig ang tunog</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Nahanap ang tunog</string>\n    <string name=\"player_sheets_sub_colors_title\">Mga kulay</string>\n    <string name=\"player_sheets_subtitles_color_text\">Text</string>\n    <string name=\"player_sheets_subtitles_color_border\">Border</string>\n    <string name=\"player_sheets_subtitles_color_background\">Background</string>\n    <string name=\"player_sheets_sub_color_red\">Pula</string>\n    <string name=\"player_sheets_sub_color_green\">Berde</string>\n    <string name=\"player_sheets_sub_color_blue\">Asul</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alpha</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Mga setting sa mga subtitle</string>\n    <string name=\"player_sheets_sub_typography_title\">Typography</string>\n    <string name=\"player_sheets_sub_typography_font\">Font</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Laki ng font</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Estilo ng border</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Laki ng border</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Shadow offset</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Opaque na kahon</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Background box</string>\n    <string name=\"player_sheets_sub_misc_title\">At iba pa</string>\n    <string name=\"player_sheets_sub_override_ass\">I-override ang ASS/SSA na subtitle</string>\n    <string name=\"player_sheets_sub_scale\">Scale</string>\n    <string name=\"player_sheets_sub_position\">Posisyon</string>\n    <string name=\"player_sheets_filters_title\">Mga filter</string>\n    <string name=\"player_sheets_filters_brightness\">Brightness</string>\n    <string name=\"player_sheets_filters_contrast\">Contrast</string>\n    <string name=\"player_sheets_filters_gamma\">Gamma</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturation</string>\n    <string name=\"player_sheets_filters_hue\">Hue</string>\n    <string name=\"player_sheets_filters_warning\">Maaaring hindi gumana ang ilang filter sa iyong kasalukuyang video driver</string>\n    <string name=\"player_sheets_add_ext_audio\">Magdagdag ng mga external na audio track</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Higit pa</string>\n    <string name=\"player_hwdec_mode\">Itakda ang default na hardware decoding mode</string>\n    <string name=\"pref_audio_channels\">Mga channel ng audio</string>\n    <string name=\"player_sheets_stats_page_title\">Default na pahina ng mga statistika</string>\n    <string name=\"player_sheets_tracks_off\">Naka-off</string>\n    <string name=\"player_sheets_stats_page_chip\">Pahina %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Custom na mga button</string>\n    <string name=\"player_seek_n_seconds\">%d segundo</string>\n    <string name=\"timer_title\">Sleep Timer</string>\n    <string name=\"timer_remaining\">%s ang natitira</string>\n    <string name=\"timer_picker_enter_timer\">Ipasok ang tagal sa oras</string>\n    <string name=\"timer_picker_pick_time\">Pumili ng tagal sa oras</string>\n    <string name=\"timer_cancel_timer\">Kanselahin ang kasalukuyang timer</string>\n    <string name=\"player_sheets_speed_slider_label\">Bilis</string>\n    <string name=\"player_sheets_speed_make_default\">Gawing default na bilis</string>\n    <string name=\"pref_audio_pitch_correction_title\">Paganahin ang audio pitch correction</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Pinipigilan ang audio na maging mataas ang tono sa mas mabilis na bilis at mahina ang tono sa mas mabagal na bilis</string>\n    <string name=\"player_sheets_add_ext_sub\">Magdagdag ng mga external na subtitle</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Ang mga pangalawang subtitle ay walang ASS/SSA Styling.</string>\n    <string name=\"screenshot_show_subs\">Ipakita ang mga subtitle sa screenshot</string>\n    <string name=\"pref_general_summary\">Lenguwahe ng app, mga notification</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matris</string>\n    <string name=\"pref_preserve_reading_position\">Panatiliin ang posisyon ng pahina kapag nabasa na</string>\n    <string name=\"pref_download_slots\">Pinakamataas na download</string>\n    <string name=\"local_source_badge\">Lokal</string>\n    <string name=\"anime_interval_expected_update\">Mga bago na episode ay lalabas sa %1$s, i-check kada %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Ang anime na ito ay nakumpleto na, o walang nahulaang petsa ng paglabas.</string>\n    <string name=\"confirm_tracker_update_anime\">I-update ang mga tracker sa episode %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Na-update ang mga tracker sa kabanata %d</string>\n    <string name=\"trackers_updated_summary_anime\">Na-update ang mga tracker sa episode %d</string>\n    <string name=\"download_notifier_download_finish\">Nakumpleto ang download</string>\n    <string name=\"action_hide\">Itago</string>\n    <string name=\"label_all\">Lahat</string>\n    <string name=\"label_category\">Kategorya</string>\n    <string name=\"manga_categories\">Kategorya ng Manga</string>\n    <string name=\"general_categories\">Mga kategorya</string>\n    <string name=\"anime_categories\">Mga Kategorya ng Anime</string>\n    <string name=\"entries\">Mga entry ng aklatan</string>\n    <string name=\"chapters_episodes\">Mga kabanata at episode</string>\n    <string name=\"episodes\">Mga Episode</string>\n    <string name=\"backup_settings_warning\">Babala: Ang pag-back up ng mga setting ay mag-iimbak din ng iyong mga track password, huwag ibahagi ang backup na file na ito!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Mga Update sa Anime</string>\n    <string name=\"label_manga_sources\">Mga Source ng Manga</string>\n    <string name=\"label_anime_sources\">Mga Source ng Anime</string>\n    <string name=\"label_watched_duration\">Tagal ng panonood</string>\n    <string name=\"label_watched_episodes\">Napanood</string>\n    <string name=\"pref_start_screen\">Simulang Pahina</string>\n    <string name=\"pref_library_manga_columns\">Mga item ng manga bawat hilera</string>\n    <string name=\"pref_library_anime_columns\">Mga item sa anime bawat hilera</string>\n    <string name=\"pref_bottom_nav_no_history\">Ilipat ang Nakaraan sa Higit Pa na tab</string>\n    <string name=\"pref_bottom_nav_no_updates\">Ilipat ang Bago sa Higit Pa na tab</string>\n    <string name=\"pref_bottom_nav_no_manga\">Ilipat ang Manga sa Higit Pa na tab</string>\n    <string name=\"pref_bottom_nav_no_browse\">Ilipat ang Maghanap sa Iba pa na tab</string>\n    <string name=\"action_filter_unseen\">Hindi pa nakita</string>\n    <string name=\"action_global_manga_search\">Pangkahalatang Paghahanap ng Manga</string>\n    <string name=\"action_global_anime_search\">Pangkahalatang Paghahanap ng Anime</string>\n    <string name=\"action_sort_total_episodes\">Kabuuang mga episode</string>\n    <string name=\"action_sort_last_seen\">Huling nakita</string>\n    <string name=\"action_sort_last_checked\">Huling sinuri</string>\n    <string name=\"action_sort_latest_episode\">Pinakabagong episode</string>\n    <string name=\"action_sort_last_anime_update\">Huling update ng anime</string>\n    <string name=\"action_sort_unseen_count\">Bilang na hindi napanood</string>\n    <string name=\"action_sort_episode_fetch_date\">Petsa ng pagkuha ng episode</string>\n    <string name=\"action_mark_as_seen\">Markahan bilang napanood na</string>\n    <string name=\"action_mark_as_unseen\">Markahan bilang di pa napanood</string>\n    <string name=\"action_mark_previous_as_seen\">Markahan ang nakaraan bilang nakita na</string>\n    <string name=\"action_play_internally\">I-play sa loob</string>\n    <string name=\"action_play_externally\">I-Play sa labas</string>\n    <string name=\"action_download_unread\">Mag-download ng mga hindi pa nababasang kabanata</string>\n    <string name=\"action_download_unseen\">Mag-download ng mga hindi nakikitang episode</string>\n    <string name=\"action_bookmark_episode\">I-bookmark ang episode</string>\n    <string name=\"action_remove_bookmark_episode\">I-unbookmark ang episode</string>\n    <string name=\"action_edit_anime_categories\">I-edit ang mga kategorya ng anime</string>\n    <string name=\"action_edit_manga_categories\">I-edit ang mga kategorya ng manga</string>\n    <string name=\"action_view_episodes\">Tingnan ang mga episode</string>\n    <string name=\"action_previous_episode\">Nakaraang episode</string>\n    <string name=\"action_play\">I-Play</string>\n    <string name=\"action_next_episode\">Susunod na episode</string>\n    <string name=\"action_screen_fit\">Screen fit mode</string>\n    <string name=\"action_show_anime\">Ipakita ang anime</string>\n    <string name=\"action_display_download_badge_anime\">Mga na-download na episode</string>\n    <string name=\"action_display_local_badge_manga\">Lokal na pinanggagalingan</string>\n    <string name=\"action_display_local_badge_anime\">Lokal na anime</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Isama lang ang mga naka-pin na mga manga source</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Isama lang ang mga naka-pin na mga anime source</string>\n    <string name=\"pref_hide_in_manga_library_items\">Itago ang mga entry na nasa library na</string>\n    <string name=\"pref_hide_in_anime_library_items\">Itago ang mga entry na nasa library</string>\n    <string name=\"action_order_by_episode_number\">Ayon sa bilang ng episode</string>\n    <string name=\"action_start_download_externally\">Gumamit ng external downloader</string>\n    <string name=\"action_start_download_internally\">Gumamit ng internal na downloader</string>\n    <string name=\"pref_bottom_nav_style\">Estilo ng nabigasyon sa ibaba</string>\n    <string name=\"pref_default_home_tab_library\">Itakda ang panimulang screen sa Manga Tab</string>\n    <string name=\"default_manga_category\">Panimulang lagayan</string>\n    <string name=\"default_anime_category\">Default na kategorya ng anime</string>\n    <string name=\"pref_manga_library_update_categories_details\">Ang mga entry sa mga ibinukod na kategorya ay hindi maa-update kahit na sila ay kasama rin sa mga kategoryang kasama.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Ang mga anime sa mga ibinukod na kategorya ay hindi maa-update kahit na sila ay kasama rin sa mga kategoryang kasama.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Ang extension na ito ay hindi mula sa opisyal na listahan ng mga extension ng Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Ang extension na ito ay hindi mula sa opisyal na listahan ng mga extension ng Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Kategoryang di-kasama</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Hindi kasama ang mga kategorya ng anime</string>\n    <string name=\"pref_category_external_downloader\">Panlabas na downloader</string>\n    <string name=\"pref_use_external_downloader\">Palaging gumamit ng panlabas na downloader para sa anime</string>\n    <string name=\"pref_external_downloader_selection\">Kagustuhan sa downloader app</string>\n    <string name=\"pref_download_new_episodes\">Mag-download ng mga bagong episode</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Laktawan ang mga magkaparehong nakita na mga episode</string>\n    <string name=\"auto_download_while_watching\">Automatikong mag-download habang nanonood</string>\n    <string name=\"download_ahead_info_anime\">Gumagana lamang sa mga entry sa aklatan at kung ang kasalukuyang episode at ang susunod na episode ay na-download na</string>\n    <string name=\"pref_track_on_add_library\">Buksan ang track menu sa pagdaragdag sa library</string>\n    <string name=\"pref_show_next_episode_airing_time\">Ipakita ang oras ng pag-ere ng susunod na episode</string>\n    <string name=\"pref_backup_flags_summary\">Anong impormasyon ang isama sa backup file</string>\n    <string name=\"pref_anime_storage_usage\">Espasyo na nagagamit ng Anime</string>\n    <string name=\"pref_manga_storage_usage\">Espasyo na nagagamit ng Manga</string>\n    <string name=\"used_cache_both\">Ginamit ng anime: %1$s, ginamit ng manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Linisin ang database</string>\n    <string name=\"pref_clear_anime_database\">Linisin ang database ng Anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Burahin ang nakaraan para sa mga entry na hindi naka-save sa iyong library</string>\n    <string name=\"pref_clear_anime_database_summary\">Burahin ang nakaraan para sa anime na hindi naka-save sa iyong aklatan</string>\n    <string name=\"anime_from_library\">Anime mula sa aklatan</string>\n    <string name=\"downloaded_episodes\">Mga na-download na episode</string>\n    <string name=\"local_manga_source\">Lokal na manga source</string>\n    <string name=\"local_anime_source\">Lokal na anime source</string>\n    <string name=\"episode_not_found\">Hindi nahanap ang episode</string>\n    <string name=\"local_invalid_episode_format\">Di-wastong format ng episode</string>\n    <string name=\"unknown_studio\">Hindi kilalang studio</string>\n    <string name=\"delete_confirmation\">Sigurado ka ba na alisin ang \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Tanggalin ang mga na-download na episode?</string>\n    <string name=\"snack_add_to_manga_library\">Idagdag sa library?</string>\n    <string name=\"snack_add_to_anime_library\">Magdagdag ng anime sa aklatan?</string>\n    <string name=\"display_mode_episode\">Episode %1$s</string>\n    <string name=\"episode_downloading_progress\">Nagda-download (%d%%)</string>\n    <string name=\"download_error\">Nagka-error</string>\n    <string name=\"download_paused\">Nakahinto</string>\n    <string name=\"show_episode_number\">Bilang ng episode</string>\n    <string name=\"sort_by_episode_number\">Ayon sa bilang ng episode</string>\n    <string name=\"download_unseen\">Hindi pa nakita</string>\n    <string name=\"confirm_delete_episodes\">Sigurado ka bang gusto mong tanggalin ang mga napiling episode?</string>\n    <string name=\"also_set_episode_settings_for_library\">Ilapat din sa lahat ng mga anime sa aking aklatan</string>\n    <string name=\"no_episodes_error\">Walang nakitang mga episode</string>\n    <string name=\"watching\">Nanonood</string>\n    <string name=\"currently_reading\">Kasalukuyang nagbabasa</string>\n    <string name=\"currently_watching\">Kasalukuyang nanonood</string>\n    <string name=\"plan_to_watch\">Planuhing panoorin</string>\n    <string name=\"not_interesting\">Hindi interesado</string>\n    <string name=\"want_to_read\">Gustong basahin</string>\n    <string name=\"want_to_watch\">Gustong manood</string>\n    <string name=\"repeating_anime\">Muling papanoorin</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Aalisin nito ang petsa ng panonood ng episode na ito. Sigurado ka ba?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">I-reset ang lahat ng episode para sa anime na ito</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Progress: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Progress: %1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Walang nakitang video</string>\n    <string name=\"notification_new_episodes\">May nakitang mga bagong episode</string>\n    <string name=\"information_no_recent_anime\">Walang napanood kamakailan</string>\n    <string name=\"episode_settings_updated\">Na-update ang mga default na setting ng episode</string>\n    <string name=\"download_notifier_download_paused_chapters\">Nakahinto ang pag-download</string>\n    <string name=\"download_notifier_download_paused_episodes\">Na-pause ang pag-download ng episode</string>\n    <string name=\"channel_new_chapters_episodes\">Mga update sa kabanata</string>\n    <string name=\"label_storage\">Espasyo</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Baguhin ang haba ng intro</string>\n    <string name=\"notification_episodes_single\">Episode %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episode %1$s at %2$d pa</string>\n    <string name=\"notification_episodes_multiple\">Mga Episode %1$s</string>\n    <string name=\"episode_settings\">Mga setting ng episode</string>\n    <string name=\"pref_backup_flags\">Mga opsyon sa pag-backup</string>\n    <string name=\"label_manga_extensions\">Mga Extension ng Manga</string>\n    <string name=\"label_anime_extensions\">Mga Extension ng Anime</string>\n    <string name=\"label_migration_manga\">Lumipat ng Manga</string>\n    <string name=\"label_migration_anime\">Ilipat ang Anime</string>\n    <string name=\"settings\">Mga setting</string>\n    <string name=\"copied_video_link_to_clipboard\">Kopyahin ang quality ng video link sa clipboard</string>\n    <string name=\"choose_video_quality\">Pumili ng quality ng video:</string>\n    <string name=\"extension_settings\">Mga Setting ng extension</string>\n    <string name=\"theme_cottoncandy\">Koton Kendi</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Mag-swipe ng pakanang pagkilos</string>\n    <string name=\"pref_episode_swipe_start\">Mag-swipe ng pakaliwang pagkilos</string>\n    <string name=\"pref_category_hide_hidden\">Itago ang nakatagong kategorya mula sa screen ng mga kategorya</string>\n    <string name=\"pref_update_anime_release_grace_period\">Inaasahan na paglabas ng anime</string>\n    <string name=\"data_saver_exclude\">Hindi isali sa data saver</string>\n    <string name=\"data_saver_stop_exclude\">Itigil ang di-pagsali mula sa data saver</string>\n    <string name=\"data_saver\">Data Saver</string>\n    <string name=\"data_saver_summary\">I-compress ang mga imahe bago mag-download o mag-load sa reader</string>\n    <string name=\"data_saver_downloader\">Gumamit ng data saver sa downloader</string>\n    <string name=\"data_saver_ignore_jpeg\">Di-pansinin ang mga imaheng Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Di-pansinin ang mga Gif Animation</string>\n    <string name=\"data_saver_image_quality\">Quality ng Imahe</string>\n    <string name=\"data_saver_image_quality_summary\">Ang mas mataas na halaga ay nangangahulugan na ang isang mas mataas na porsyento ng kalidad ng imahe ay nai-save, ngunit nangangahulugan din ito na ang laki ng file ay mas malaki, 80 porsyento ay isang magandang median sa pagitan ng laki ng file at kalidad ng imahe</string>\n    <string name=\"data_saver_image_format\">I-compress sa Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Ang laki ng file na Jpeg ay mas maliit kaysa sa Webp ay (ibig sabihin, mas maraming data ang nai-save), ngunit ginagawa nitong mas mawalan din ng kalidad ang mga imahe.\n\\nKasalukuyang nag-compress sa Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Ang laki ng file na Jpeg ay mas maliit kaysa sa Webp ay (ibig sabihin, mas maraming data ang nai-save), ngunit ginagawa nitong mas mawalan din ng kalidad ang mga imahe.\n\\nKasalukuyang nagko-compress sa Webp</string>\n    <string name=\"data_saver_color_bw\">I-convert sa Itim at Puti</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (kinakailangan ng Bandwidth Hero Proxy server)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy Server</string>\n    <string name=\"data_saver_server_summary\">Ilagay ang server url ng Bandwidth Hero Proxy dito</string>\n    <string name=\"download_slots_info\">Magda-download lang nang sabay-sabay mula sa self-host o hindi nasusukat na mga source</string>\n    <string name=\"unseen\">Hindi pa nakikita</string>\n    <string name=\"label_manga_extension_repos\">Extension repo ng manga</string>\n    <string name=\"label_anime_extension_repos\">Extension repo ng anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Lumikha ng default na Aniyomi folder</string>\n    <string name=\"download_speed_limit\">Limito ng bilis ng pag-download</string>\n    <string name=\"download_speed_limit_hint\">Ilagay ay 0 para tanggalin ang limitadong bilis.</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Épisode non vu suivant</item>\n        <item quantity=\"many\">%d épisodes non vus suivants</item>\n        <item quantity=\"other\">%d épisodes non vus suivants</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s épisode</item>\n        <item quantity=\"many\">%1$s épisodes</item>\n        <item quantity=\"other\">%1$s épisodes</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Pour 1 titre</item>\n        <item quantity=\"many\">Pour %d titres</item>\n        <item quantity=\"other\">Pour %d titres</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 nouvel épisode</item>\n        <item quantity=\"many\">%1$d nouveaux épisodes</item>\n        <item quantity=\"other\">%1$d nouveaux épisodes</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d seconde</item>\n        <item quantity=\"many\">%d secondes</item>\n        <item quantity=\"other\">%d secondes</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Épisodes %1$s et 1 autre</item>\n        <item quantity=\"many\">Épisodes %1$s et %2$d autres</item>\n        <item quantity=\"other\">Épisodes %1$s et %2$d autres</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/fr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Appuyez à nouveau pour quitter</string>\n    <string name=\"action_filter_started\">Commencés</string>\n    <string name=\"action_sort_airing_time\">Période de diffusion</string>\n    <string name=\"action_reorganize_by\">Réorganiser</string>\n    <string name=\"relative_time_now\">Maintenant</string>\n    <string name=\"pref_library_summary\">Catégories, mise à jour globale, faire glisser le chapitre</string>\n    <string name=\"pref_library_update_show_tab_badge\">Afficher le nombre de messages non lus sur l\\'icône des mises à jour</string>\n    <string name=\"label_player_settings\">Paramètres du Player</string>\n    <string name=\"action_search_player_settings\">Rechercher des paramètres du Player</string>\n    <string name=\"pref_player_internal\">Player Interne</string>\n    <string name=\"pref_player_internal_summary\">Progrès, controles, orientation</string>\n    <string name=\"pref_progress_mark_as_seen\">À quel moment marquer l\\'épisode comme vu</string>\n    <string name=\"pref_preserve_watching_position\">Conserver la position de veille sur les épisodes vus</string>\n    <string name=\"pref_category_player_orientation\">Orientation</string>\n    <string name=\"rotation_reverse_landscape\">Paysage inversé</string>\n    <string name=\"rotation_sensor_portrait\">Portrait du capteur</string>\n    <string name=\"rotation_sensor_landscape\">Pysage du capteur</string>\n    <string name=\"pref_remember_brightness\">Appliquer la dernière luminosité utilisée</string>\n    <string name=\"pref_remember_volume\">Appliquer le dernier volume utilisé</string>\n    <string name=\"pref_player_fullscreen\">Ignorer les entailles en plein écran</string>\n    <string name=\"pref_player_hide_controls\">Cacher les contrôles à l\\'ouverture du lecteur</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Activer le passage d\\'intro automatique</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Activer le mode Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Délai d\\'expiration du bouton</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 secondes</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 secondes</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 secondes</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 secondes</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 secondes</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 secondes</string>\n    <string name=\"pref_category_player_aniskip_info\">Paramètres AniSkip</string>\n    <string name=\"pref_enable_aniskip\">Activer AniSkip</string>\n    <string name=\"pref_category_pip\">Incrustation vidéo (PiP)</string>\n    <string name=\"pref_enable_pip\">Permettre l\\'utilisation du mode PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Afficher les toasts d’épisode lors du passage d\\'un épisode à l\\'autre en mode PiP</string>\n    <string name=\"pref_pip_on_exit\">Passer automatiquement en mode PiP en quittant le lecteur</string>\n    <string name=\"pref_pip_replace_with_previous\">Remplace l\\'option passer 10 secondes par épisode précédent</string>\n    <string name=\"pref_category_external_player\">Lecteur externe</string>\n    <string name=\"pref_always_use_external_player\">Utiliser toujours un lecteur externe</string>\n    <string name=\"pref_external_player_preference\">Préférence pour les lecteurs externes</string>\n    <string name=\"pref_player_gestures\">Gestes</string>\n    <string name=\"pref_player_gestures_summary\">Chercher, double tap, controles</string>\n    <string name=\"enable_volume_brightness_gestures\">Gestes de basculement du volume et de la luminosité</string>\n    <string name=\"pref_category_player_seeking\">Recherche en cours</string>\n    <string name=\"enable_horizontal_seek_gesture\">Activer le geste de recherche horizontale</string>\n    <string name=\"pref_default_intro_length\">Longueur par défaut du saut d\\'intro</string>\n    <string name=\"pref_intro_length\">Durée des intros à sauter</string>\n    <string name=\"pref_skip_length\">Durée de saut par double tap</string>\n    <string name=\"pref_skip_disable\">Désactiver</string>\n    <string name=\"pref_player_smooth_seek\">Activer la recherche précise</string>\n    <string name=\"pref_player_smooth_seek_summary\">Si activé, la recherche ne va pas se concentrer sur les images-clés, permettant de faire une recherche plus précise mais plus lente</string>\n    <string name=\"pref_category_double_tap\">Double Tap</string>\n    <string name=\"pref_left_double_tap\">Double tap (gauche)</string>\n    <string name=\"pref_center_double_tap\">Double tap (centre)</string>\n    <string name=\"pref_right_double_tap\">Double tap (droite)</string>\n    <string name=\"pref_double_tap_info\">Lorsqu\\'un geste de pression est défini sur Personnalisé, il peut être lié via input.conf. Les codes clés sont 0x10001 pour la gauche, 0x10002 pour le centre et 0x10003 pour la droite.</string>\n    <string name=\"single_action_none\">Aucun(e)</string>\n    <string name=\"single_action_seek\">Chercher</string>\n    <string name=\"single_action_playpause\">Lecture/Pause</string>\n    <string name=\"single_action_switch\">Changer d\\'épisode</string>\n    <string name=\"single_action_custom\">Custom</string>\n    <string name=\"pref_category_media_controls\">Controles</string>\n    <string name=\"pref_media_previous\">Précédent</string>\n    <string name=\"pref_media_playpause\">Lecture/Pause</string>\n    <string name=\"pref_media_next\">Suivant</string>\n    <string name=\"pref_gpu_next_title\">Activer gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Un nouveau backend de rendu vidéo</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_player_audio_channels\">Chaines audio</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Auto-safe</string>\n    <string name=\"pref_player_audio_channels_auto\">Auto</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stéréo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Stéréo inversée</string>\n    <string name=\"pref_mpv_conf\">Modifier le fichier de configuration MPV pour d\\'autres paramètres du lecteur</string>\n    <string name=\"pref_reset_mpv_conf\">Réinitialiser le fichier de configuration MPV</string>\n    <string name=\"pref_mpv_input\">Modifier le fichier d\\'entrée MPV pour la configuration de l\\'affectation du clavier</string>\n    <string name=\"video_fit_screen\">Ajuster à l\\'écran</string>\n    <string name=\"video_crop_screen\">Recadrer à l\\'écran</string>\n    <string name=\"video_stretch_screen\">Étirer à l\\'écran</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"enable_auto_play\">La lecture automatique est activée</string>\n    <string name=\"disable_auto_play\">La lecture automatique est désactivée</string>\n    <string name=\"player_aniskip_dontskip\">Ne pas passer</string>\n    <string name=\"player_aniskip_dontskip_toast\">Passage de %s dans %d secondes</string>\n    <string name=\"player_aniskip_skip\">%s passer</string>\n    <string name=\"no_next_episode\">L\\'épisode suivant n\\'a pas été trouvé !</string>\n    <string name=\"player_hwdec_mode\">Définir le mode de décodage matériel par défaut</string>\n    <string name=\"screenshot_show_subs\">Afficher les sous-titres dans la capture d\\'écran</string>\n    <string name=\"pref_general_summary\">Langue, notifications</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Saphir</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_preserve_reading_position\">Conserver la position de lecture sur les chapitres lus</string>\n    <string name=\"pref_download_slots\">Nombre maximal de téléchargements</string>\n    <string name=\"local_source_badge\">Local</string>\n    <string name=\"anime_interval_expected_update\">Le prochain épisodes devrait être publié vers %1$s, avec une vérification tous les %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Cet anime est soit fini, ou il n\\'ya pas de date de sortie prédit.</string>\n    <string name=\"download_notifier_download_finish\">Téléchargement terminé</string>\n    <string name=\"action_hide\">Cacher</string>\n    <string name=\"label_all\">Tout</string>\n    <string name=\"label_category\">Catégorie</string>\n    <string name=\"manga_categories\">Catégories Manga</string>\n    <string name=\"general_categories\">Catégories</string>\n    <string name=\"anime_categories\">Catégories animés</string>\n    <string name=\"entries\">Entrées de la bibliothèque</string>\n    <string name=\"chapters_episodes\">Chapitres et épisodes</string>\n    <string name=\"episodes\">Épisodes</string>\n    <string name=\"backup_settings_warning\">Avertissement : La sauvegarde des paramètres stocke également les mots de passe de vos pistes, ne partagez pas ce fichier de sauvegarde !</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Animé</string>\n    <string name=\"label_anime\">Animé</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Mise à jour des animes</string>\n    <string name=\"label_manga_sources\">Sources des mangas</string>\n    <string name=\"label_anime_sources\">Sources d\\'animés</string>\n    <string name=\"label_watched_duration\">Durée de visionnage</string>\n    <string name=\"label_watched_episodes\">Visionné</string>\n    <string name=\"pref_start_screen\">Menu au démarrage</string>\n    <string name=\"pref_library_manga_columns\">Nombre de mangas par lignes</string>\n    <string name=\"pref_library_anime_columns\">Nombre d\\'animés par lignes</string>\n    <string name=\"pref_bottom_nav_no_history\">Déplacer l\\'historique vers l\\'onglet Plus</string>\n    <string name=\"pref_bottom_nav_no_updates\">Déplacer les mises à jour vers l\\'onglet Plus</string>\n    <string name=\"pref_bottom_nav_no_manga\">Déplacer le Manga vers l\\'onglet Plus</string>\n    <string name=\"pref_bottom_nav_no_browse\">Déplacer Explorer vers l\\'onglet Plus</string>\n    <string name=\"action_filter_unseen\">Non vus</string>\n    <string name=\"action_global_manga_search\">Recherche de Manga Globale</string>\n    <string name=\"action_global_anime_search\">Recherche d\\'Anime Globale</string>\n    <string name=\"action_sort_total_episodes\">Nombre d\\'épisodes</string>\n    <string name=\"action_sort_last_seen\">Dernier vu</string>\n    <string name=\"action_sort_last_checked\">Dernière vérification</string>\n    <string name=\"action_sort_latest_episode\">Dernier épisode</string>\n    <string name=\"action_sort_last_anime_update\">Dernière mise à jour d\\'animé</string>\n    <string name=\"action_sort_unseen_count\">Nombre de non-vus</string>\n    <string name=\"action_sort_episode_fetch_date\">Date de récupération d\\'épisode</string>\n    <string name=\"action_mark_as_seen\">Marquer comme vu</string>\n    <string name=\"action_mark_as_unseen\">Marquer comme non vu</string>\n    <string name=\"action_mark_previous_as_seen\">Marquer les précédents comme vus</string>\n    <string name=\"action_play_internally\">Lire avec le lecteur interne</string>\n    <string name=\"action_play_externally\">Lire avec le lecteur externe</string>\n    <string name=\"action_download_unread\">Télécharger les chapitres non lus</string>\n    <string name=\"action_download_unseen\">Télécharger les épisodes inédits</string>\n    <string name=\"action_bookmark_episode\">Marquer L\\'épisode</string>\n    <string name=\"action_remove_bookmark_episode\">Enlever le marque-page</string>\n    <string name=\"action_edit_anime_categories\">Modifier les catégories d\\'animé</string>\n    <string name=\"action_edit_manga_categories\">Modifier les catégories de mangas</string>\n    <string name=\"action_view_episodes\">Voir les épisodes</string>\n    <string name=\"action_previous_episode\">Épisode précédent</string>\n    <string name=\"action_play\">Lire</string>\n    <string name=\"action_next_episode\">Épisode suivant</string>\n    <string name=\"action_screen_fit\">Mode d\\'ajustement de l\\'écran</string>\n    <string name=\"action_show_anime\">Afficher l\\'animé</string>\n    <string name=\"action_display_download_badge_anime\">Épisodes téléchargés</string>\n    <string name=\"action_display_local_badge_manga\">Source locale</string>\n    <string name=\"action_display_local_badge_anime\">Animé local</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">N\\'inclure que les sources de manga épinglées dans la recherche globale</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">N\\'inclure que les sources d\\'anime épinglées dans la recherche globale</string>\n    <string name=\"pref_hide_in_manga_library_items\">Cacher les mangas déjà présents dans la bibliothèque</string>\n    <string name=\"pref_hide_in_anime_library_items\">Cacher les entrées d\\'animes déjà dans la bibliothèque</string>\n    <string name=\"action_order_by_episode_number\">Par numéro d\\'épisode</string>\n    <string name=\"action_start_download_externally\">Utiliser un téléchargeur externe</string>\n    <string name=\"action_start_download_internally\">Utiliser un téléchargeur interne</string>\n    <string name=\"pref_bottom_nav_style\">Style de navigation en bas de page</string>\n    <string name=\"pref_default_home_tab_library\">Définir l\\'écran de démarrage sur l\\'onglet Manga</string>\n    <string name=\"default_manga_category\">Catégorie par défaut</string>\n    <string name=\"default_anime_category\">Catégorie d\\'animé par défaut</string>\n    <string name=\"pref_manga_library_update_categories_details\">Les entrées dans les catégories exclues ne seront pas mises à jour même si elles sont aussi dans les catégories inclues.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Les animés dans les catégories exclues ne seront pas mis à jour même s\\'ils sont aussi dans les catégories incluses.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Cette extension ne fait pas partie de la liste officielle des extensions d\\'Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Cette extension ne fait pas partie de la liste officielle des extensions Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Catégories exclues</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Catégories d\\'animé exclues</string>\n    <string name=\"pref_category_external_downloader\">Téléchargeur externe</string>\n    <string name=\"pref_use_external_downloader\">Toujours utiliser un outil de téléchargement externe pour les animés</string>\n    <string name=\"pref_external_downloader_selection\">App de téléchargements préférés</string>\n    <string name=\"pref_download_new_episodes\">Télécharger les nouveaux épisodes</string>\n    <string name=\"auto_download_while_watching\">Télécharger automatiquement pendant le visionnage</string>\n    <string name=\"download_ahead_info_anime\">Ne fonctionne que sur les entrées de la bibliothèque et si l\\'épisode actuel et le suivant sont déjà téléchargés</string>\n    <string name=\"pref_track_on_add_library\">Ouvrir le menu de pistes lors d’un ajout à la bibliothèque</string>\n    <string name=\"pref_show_next_episode_airing_time\">Afficher l\\'heure de diffusion du prochain épisode</string>\n    <string name=\"pref_backup_flags_summary\">Quelle information inclure dans le fichier de sauvegarde</string>\n    <string name=\"pref_anime_storage_usage\">Utilisation de l\\'espace de stockage d\\'anime</string>\n    <string name=\"pref_manga_storage_usage\">Utilisation de l\\'espace de stockage de manga</string>\n    <string name=\"used_cache_both\">Utilisé par les animé : %1$s, utilisé par les mangas : %2$s</string>\n    <string name=\"pref_clear_manga_database\">Effacer la base de données</string>\n    <string name=\"pref_clear_anime_database\">Effacer la base de données des animés</string>\n    <string name=\"pref_clear_manga_database_summary\">Supprimer l\\'historique des entrées qui ne sont pas enregistrées dans votre bibliothèque</string>\n    <string name=\"pref_clear_anime_database_summary\">Supprimer l\\'historique des animés qui ne sont pas sauvegardés dans votre bibliothèque</string>\n    <string name=\"anime_from_library\">Animés de la bibliothèque</string>\n    <string name=\"downloaded_episodes\">Épisodes téléchargés</string>\n    <string name=\"local_manga_source\">Source locale de mangas</string>\n    <string name=\"local_anime_source\">Source locale d\\'animés</string>\n    <string name=\"episode_not_found\">Épisode non trouvé</string>\n    <string name=\"local_invalid_episode_format\">Format d\\'épisode invalide</string>\n    <string name=\"unknown_studio\">Studio inconnu</string>\n    <string name=\"delete_confirmation\">Êtes-vous sûr de vouloir supprimer \\\"%s\\\" ?</string>\n    <string name=\"delete_downloads_for_anime\">Supprimer les épisodes téléchargés ?</string>\n    <string name=\"snack_add_to_manga_library\">Ajouter à la bibliothèque ?</string>\n    <string name=\"snack_add_to_anime_library\">Ajouter un animé à la bibliothèque ?</string>\n    <string name=\"display_mode_episode\">Épisode %1$s</string>\n    <string name=\"episode_downloading_progress\">Téléchargement (%d%%)</string>\n    <string name=\"download_error\">Erreur</string>\n    <string name=\"download_paused\">En pause</string>\n    <string name=\"show_episode_number\">Numéro de l\\'épisode</string>\n    <string name=\"sort_by_episode_number\">Par numéro d\\'épisode</string>\n    <string name=\"download_unseen\">Non vus</string>\n    <string name=\"confirm_delete_episodes\">Êtes-vous sûr·e de vouloir supprimer les épisodes sélectionnés ?</string>\n    <string name=\"also_set_episode_settings_for_library\">S\\'applique également à tous les animés de ma bibliothèque</string>\n    <string name=\"no_episodes_error\">Aucun épisode trouvé</string>\n    <string name=\"watching\">En lecture</string>\n    <string name=\"currently_reading\">Lecture en cours</string>\n    <string name=\"currently_watching\">Vissionage en cours</string>\n    <string name=\"plan_to_watch\">À regarder</string>\n    <string name=\"not_interesting\">Pas intéressant</string>\n    <string name=\"want_to_read\">Envie de le lire</string>\n    <string name=\"want_to_watch\">Envie de le regarder</string>\n    <string name=\"repeating_anime\">Revisionnage</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Ceci supprimera la date de visionnage de cet épisode. Êtes-vous sûr·e ?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Réinitialiser tous les épisodes de cet animé</string>\n    <string name=\"share_screenshot_info\">%1$s : %2$s, %3$s</string>\n    <string name=\"episode_progress\">Progression : %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Progression : %1$s</string>\n    <string name=\"recent_anime_time\">Ép. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Aucune vidéo trouvée</string>\n    <string name=\"notification_new_episodes\">Nouveaux épisodes trouvés</string>\n    <string name=\"information_no_recent_anime\">Rien regardé récemment</string>\n    <string name=\"episode_settings_updated\">Mise à jour des paramètres par défaut des épisodes</string>\n    <string name=\"download_notifier_download_paused_chapters\">Téléchargement en pause</string>\n    <string name=\"download_notifier_download_paused_episodes\">Téléchargement d\\'épisodes en pause</string>\n    <string name=\"channel_new_chapters_episodes\">Mises à jour des chapitres</string>\n    <string name=\"label_storage\">Stockage</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Animé</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Animé</string>\n    <string name=\"action_change_intro_length\">Modifier la durée de l\\'intro</string>\n    <string name=\"notification_episodes_single\">Épisode %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Épisode %1$s et %2$d autres</string>\n    <string name=\"notification_episodes_multiple\">Épisodes %1$s</string>\n    <string name=\"episode_settings\">Paramètres des épisodes</string>\n    <string name=\"pref_backup_flags\">Options de sauvegarde</string>\n    <string name=\"label_manga_extensions\">Extensions des mangas</string>\n    <string name=\"label_anime_extensions\">Extensions d\\'animés</string>\n    <string name=\"label_migration_manga\">Migrer les mangas</string>\n    <string name=\"label_migration_anime\">Migrer les animés</string>\n    <string name=\"settings\">Paramètres</string>\n    <string name=\"copied_video_link_to_clipboard\">Lien de qualité vidéo copié vers le presse-papiers</string>\n    <string name=\"choose_video_quality\">Choisir la qualité de la vidéo :</string>\n    <string name=\"extension_settings\">Paramètres d\\'extension</string>\n    <string name=\"theme_cottoncandy\">Barbe à papa</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Action balayée vers la droite</string>\n    <string name=\"pref_episode_swipe_start\">Episode lors du balayage vers la gauche</string>\n    <string name=\"pref_category_hide_hidden\">Masquer les catégories cachées de l\\'écran des catégories et du stockage</string>\n    <string name=\"pref_update_anime_release_grace_period\">Délai de grâce prévu pour la sortie de l’anime</string>\n    <string name=\"data_saver_exclude\">Exclure de l’économiseur de données</string>\n    <string name=\"data_saver_stop_exclude\">Stopper l\\'exclusion de l’économiseur de données</string>\n    <string name=\"data_saver\">Économiseur de données</string>\n    <string name=\"data_saver_summary\">Compresser les images avant de les télécharger ou de les charger dans le lecteur</string>\n    <string name=\"data_saver_downloader\">Utiliser l\\'économiseur de données dans le téléchargeur</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignorer le format d\\'image Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Ignorer les GiF</string>\n    <string name=\"data_saver_image_quality\">Qualité d\\'image</string>\n    <string name=\"data_saver_image_quality_summary\">Une plus grande valeur signifie une meilleure qualité d\\'image mais les fichiers enregistrés seront plus gros. 80% est un bon compromis entre taille du fichier et qualité d\\'image.</string>\n    <string name=\"data_saver_image_format\">Compresser en Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">La taille des fichiers Jpeg est considérablement plus basse qu\\'en Webp (il y a donc moins de données utilisées) mais les images sont de moins bonne qualité.\n\\nCompresse actuellement en Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">La taille des fichiers Jpeg est considérablement plus basse qu\\'en Webp (il y a donc moins de données utilisées) mais les images sont de moins bonne qualité.\n\\nCompresse actuellement en Webp</string>\n    <string name=\"data_saver_color_bw\">Convertir en noir et blanc</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (nécessite un serveur proxy Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero avec bande passante</string>\n    <string name=\"data_saver_server_summary\">Insérez l\\'URL du serveur Bandwidth Hero Proxy ici</string>\n    <string name=\"download_slots_info\">Ne sera téléchargé simultanément qu\\'à partir de sources auto-hébergées ou non mesurées</string>\n    <string name=\"unseen\">Non-vu</string>\n    <string name=\"label_manga_extension_repos\">Repos d\\'extensions de manga</string>\n    <string name=\"label_anime_extension_repos\">Repos d\\'extensions d\\'anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Créer le dossier par défaut d\\'Aniyomi</string>\n    <string name=\"download_speed_limit\">Limite de vitesse de téléchargement</string>\n    <string name=\"download_speed_limit_hint\">Mettre à 0 pour désactiver la limite.</string>\n    <string name=\"action_display_unseen_badge\">Épisodes non vus</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Comportement du chapitre</string>\n    <string name=\"action_add_repo_message\">Ajouter un répertoire additionnel à %s. L\\'URL devrait se terminer par « index.min.json ».</string>\n    <string name=\"download_ahead_info\">Fonctionne seulement si le chapitre actuel et le suivant sont déjà téléchargés.</string>\n    <string name=\"non_library_settings\">Toutes les entrées lues/regardées</string>\n    <string name=\"action_sort_last_manga_update\">Dernière verification de mise à jour</string>\n    <string name=\"action_show_manga\">Montrer le manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Bouton \\\"Reprendre\\\"</string>\n    <string name=\"pref_update_only_completely_read\">Exclure s\\'il reste un/des chapitre(s) ou un/des épisode(s) à lire</string>\n    <string name=\"pref_category_delete_chapters\">Suppression des chapitres/épisodes</string>\n    <string name=\"pref_remove_after_marked_as_read\">Après avoir été marqué comme lu/regardé</string>\n    <string name=\"pref_remove_after_read\">Suppression automatique après lecture/vue</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permettre la suppression des chapitres/épisodes marqués d\\'un marque-page</string>\n    <string name=\"pref_auto_update_manga_sync\">Synchroniser la progression après lecture/vue</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Mise à jour de la progression quand marqué comme lu/vu</string>\n    <string name=\"pref_clear_chapter_cache\">Effacer le cache des chapitres et des épisodes</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Vider le cache de chapitre/épisode au lancement de l\\'application</string>\n    <string name=\"clear_database_confirmation\">Êtes-vous sûr(e) ? Les épisodes et chapitres lus et la progression des entrées hors de la bibliothèque seront perdues</string>\n    <string name=\"pref_incognito_mode_summary\">Suspend l\\'historique de lecture</string>\n    <string name=\"manga_from_library\">Manga de la bibliothèque</string>\n    <string name=\"also_set_chapter_settings_for_library\">S\\'applique également à toutes les manga de ma bibliothèque</string>\n    <string name=\"dialog_with_checkbox_reset\">Réinitialiser tous les chapitres de ce manga</string>\n    <string name=\"download_insufficient_space\">Impossible de télécharger les chapitres, l\\'espace de stockage est insuffisant</string>\n    <string name=\"download_queue_size_warning\">Attention : les téléchargements massifs peuvent entraîner un ralentissement des sources ou le blocage de Aniyomi. Appuyez pour en savoir plus.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forcer l\\'application à revérifier les chapitres et épisodes téléchargés</string>\n    <string name=\"label_player\">Lecteur</string>\n    <string name=\"pref_player_settings_summary\">Lecteur interne, gestes, décodeurs, sous-titres</string>\n    <string name=\"rotation_video\">Vidéo</string>\n    <string name=\"pref_category_controls\">Contrôles</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Autoriser les gestes dans les panneaux</string>\n    <string name=\"pref_controls_show_loading\">Afficher le cercle de chargement</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Afficher l’indicateur du chapitre actuel</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">N’apparaît que si la vidéo a des chapitres</string>\n    <string name=\"pref_controls_display_volume_percentage\">Afficher le volume en pourcentage</string>\n    <string name=\"pref_hosters\">Hébergeurs</string>\n    <string name=\"pref_hosters_show_failure\">Afficher les hébergeurs en échec</string>\n    <string name=\"pref_hosters_show_empty\">Afficher les hébergeurs vides</string>\n    <string name=\"pref_show_system_bar\">Afficher la barre d’état avec les contrôles</string>\n    <string name=\"pref_reduce_motion\">Réduire les animations du lecteur</string>\n    <string name=\"pref_player_time_to_disappear\">Délai avant de cacher les contrôles du lecteur</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Opacité du panneau</string>\n    <string name=\"pref_category_intro_skip\">Passer l’introduction</string>\n    <string name=\"pref_enable_intro_skip\">Activer le saut de l’intro</string>\n    <string name=\"pref_disable_aniskip_chapter\">Désactiver AniSkip si la vidéo contient déjà des chapitres</string>\n    <string name=\"pref_category_player_sliders\">Curseurs</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Échanger les curseurs de volume et de luminosité</string>\n    <string name=\"pref_show_seekbar\">Afficher la barre de recherche lors de la recherche</string>\n    <string name=\"pref_media_info\">Lorsqu’un contrôle de média est réglé sur personnalisé, il peut être associé à une touche dans input.conf. Les codes des touches sont 0x10004 pour précédant, 0x10005 pour lecture/pause et 0x10006 pour suivant.</string>\n    <string name=\"pref_player_decoder\">Décodeur</string>\n    <string name=\"pref_player_decoder_summary\">Décodage matériel, format de pixel, désentrelacement</string>\n    <string name=\"pref_try_hw\">Essayer le décodage matériel</string>\n    <string name=\"pref_debanding_none\">Aucun</string>\n    <string name=\"pref_use_yuv420p_title\">Utiliser le format de pixel YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Peut résoudre les problèmes d’écran noir pour certains codecs vidéo, peut aussi améliorer les performances au détriment de la qualité</string>\n    <string name=\"pref_player_subtitle\">Sous-titres</string>\n    <string name=\"pref_player_subtitle_summary\">Langages préférés, liste blanche, liste noire</string>\n    <string name=\"pref_player_subtitle_lang\">Langages préférés</string>\n    <string name=\"pref_player_subtitle_lang_info\">Langage(s) de sous-titre à sélectionner par défaut sur une vidéo ayant plusieurs pistes de sous-titre, les codes de langages à deux ou trois lettres fonctionnent. Plusieurs valeurs peuvent être séparées par une virgule.</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Code invalide : \\\"%s\\\"</string>\n    <string name=\"pref_player_subtitle_whitelist\">Liste blanche</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Liste blanche pour les sous-titres. Si définie, la première piste de sous-titre contenant un mot sur liste blanche sera utilisée. Plusieurs valeurs peuvent être séparées par une virgule.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Liste noire</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Liste noire pour les sous-titres. Si définie, toutes les pistes de sous-titre contenant un mot sur liste noire seront exclues. Plusieurs valeurs peuvent être séparées par une virgule.</string>\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Langues préférées, correction de la hauteur, canaux audio</string>\n    <string name=\"pref_player_audio_lang\">Langues préférées</string>\n    <string name=\"pref_player_audio_lang_info\">Langue audio à sélectionner par défaut sur une vidéo ayant plusieurs pistes audio, les codes de langues à deux ou trois chiffres fonctionnent. Plusieurs valeurs peuvent être séparées par une virgule.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Activer la correction de la hauteur de l’audio</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Empêche l’audio devenir plus aiguë à vitesse élevée et plus grave à vitesse réduite</string>\n    <string name=\"pref_player_audio_boost_cap\">Limite de l’amplification du volume</string>\n    <string name=\"pref_player_custom_button\">Boutons personnalisés</string>\n    <string name=\"pref_player_custom_button_summary\">Exécuter du code lua avec des boutons personnalisés</string>\n    <string name=\"pref_player_custom_button_header\">Modifier les boutons personnalisés</string>\n    <string name=\"pref_player_custom_button_guide\">Guide des boutons personnalisés</string>\n    <string name=\"pref_player_custom_button_empty\">Vous n\\'avez pas de boutons personnalisés. Appuyez sur le bouton plus pour en créer un.</string>\n    <string name=\"pref_player_custom_button_add\">Ajouter un bouton</string>\n    <string name=\"pref_player_custom_button_edit\">Modifier le bouton</string>\n    <string name=\"pref_player_custom_button_title\">Titre</string>\n    <string name=\"pref_player_custom_button_error_exists\">Le bouton existe déjà !</string>\n    <string name=\"pref_player_custom_button_content\">Code lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Code Lua (après appuie long)</string>\n    <string name=\"pref_player_custom_button_optional\">(optionnel)</string>\n    <string name=\"pref_player_custom_button_delete\">Bouton supprimer</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Voulez-vous supprimer le bouton %s ?</string>\n    <string name=\"pref_player_custom_button_startup\">Au démarrage</string>\n    <string name=\"pref_player_custom_button_id\">(ID : %d)</string>\n    <string name=\"pref_player_editor\">Éditeur de scripts</string>\n    <string name=\"pref_player_editor_summary\">Modifier et créer de nouveaux scripts et options de script</string>\n    <string name=\"pref_player_editor_script\">Scripts</string>\n    <string name=\"pref_player_editor_script_opts\">Options de script</string>\n    <string name=\"pref_player_no_items\">Le dossier ne contient aucun élément. Appuyez sur le bouton plus pour ajouter un fichier.</string>\n    <string name=\"editor_unsaved_progress\">Vous avez des changements non sauvegardés. Voulez-vous quand même revenir en arrière ?</string>\n    <string name=\"editor_save_error\">Impossible de sauvegarder le fichier</string>\n    <string name=\"editor_save_success\">Fichier sauvegardé</string>\n    <string name=\"editor_action_rename\">Renommer le fichier</string>\n    <string name=\"editor_action_delete\">Supprimer le fichier</string>\n    <string name=\"editor_file_already_exists\">Le fichier existe déjà</string>\n    <string name=\"editor_invalid_filename\">Nom de fichier invalide</string>\n    <string name=\"editor_create_file\">Créer un fichier</string>\n    <string name=\"editor_edit_file\">Modifier le nom du fichier</string>\n    <string name=\"editor_filename\">Nom du fichier</string>\n    <string name=\"editor_create_error\">Impossible de créer le fichier</string>\n    <string name=\"editor_rename_error\">Impossible de renommer le fichier</string>\n    <string name=\"editor_delete_error\">Impossible de supprimer le fichier</string>\n    <string name=\"editor_delete_file\">Supprimer le fichier</string>\n    <string name=\"editor_delete_file_confirmation\">Voulez-vous supprimer le fichier « %s » ?</string>\n    <string name=\"pref_player_advanced\">Avancé</string>\n    <string name=\"pref_player_advanced_summary\">Fichiers utilisateur, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_user_files\">Utiliser les fichiers MPV de l\\'utilisateur</string>\n    <string name=\"pref_mpv_user_files_summary\">Utiliser les fichiers dans le dossier mpv-config</string>\n    <string name=\"player_skip_action\">Passer %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s passé</string>\n    <string name=\"player_chapter_type_opening\">Introduction</string>\n    <string name=\"player_chapter_type_ending\">Fin</string>\n    <string name=\"player_chapter_type_recap\">Récapitulatif</string>\n    <string name=\"player_chapter_type_mixedop\">Introduction mixte</string>\n    <string name=\"toast_sleep_timer_ended\">Minuterie de mise en veille terminée</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Valeur trop grande</string>\n    <string name=\"numeric_chooser_value_too_small\">Valeur trop petite</string>\n    <string name=\"no_prev_episode\">Épisode précédant introuvable !</string>\n    <string name=\"no_available_videos\">Aucune vidéo disponible</string>\n    <string name=\"no_hosters\">La liste de l\\'hébergeur est vide</string>\n    <string name=\"no_episode_loaded\">Aucun épisode chargé</string>\n    <string name=\"select_hoster_from_empty_list\">Hébergeur sélectionné depuis la liste vide</string>\n    <string name=\"player_sheets_delay_set_as_default\">Définir par défaut</string>\n    <string name=\"player_sheets_track_delay\">Délai</string>\n    <string name=\"player_sheets_track_palette\">Palette</string>\n    <string name=\"player_sheets_audio_delay_title\">Délai audio</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Son entendu</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Son repéré</string>\n    <string name=\"player_sheets_sub_delay_title\">Délai des sous-titres</string>\n    <string name=\"player_sheets_sub_delay_speed\">Vitesse</string>\n    <string name=\"player_sheets_sub_delay_delay\">Délai</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primaire</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Secondaire</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Les deux</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Voix entendue</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Texte vu</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Son entendu</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Son repéré</string>\n    <string name=\"player_sheets_sub_colors_title\">Couleurs</string>\n    <string name=\"player_sheets_subtitles_color_text\">Texte</string>\n    <string name=\"player_sheets_subtitles_color_border\">Bordure</string>\n    <string name=\"player_sheets_subtitles_color_background\">Arrière-plan</string>\n    <string name=\"player_sheets_sub_color_red\">Rouge</string>\n    <string name=\"player_sheets_sub_color_green\">Vert</string>\n    <string name=\"player_sheets_sub_color_blue\">Bleu</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alpha</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Paramètre des sous-titres</string>\n    <string name=\"player_sheets_sub_typography_title\">Typographie</string>\n    <string name=\"player_sheets_sub_typography_font\">Police</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Taille de la police</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Style de la bordure</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Taille de la bordure</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Décalage de l\\'ombre</string>\n    <string name=\"player_sheets_sub_misc_title\">Divers</string>\n    <string name=\"player_sheets_sub_override_ass\">Passer outre les sous-titres ASS/SSA</string>\n    <string name=\"player_sheets_sub_scale\">Échelle</string>\n    <string name=\"player_sheets_sub_position\">Position</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Contour et ombre</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Boîte opaque</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Boîte d\\'arrière-plan</string>\n    <string name=\"player_sheets_filters_title\">Filtres</string>\n    <string name=\"player_sheets_filters_brightness\">Luminosité</string>\n    <string name=\"player_sheets_filters_contrast\">Contraste</string>\n    <string name=\"player_sheets_filters_gamma\">Gamma</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturation</string>\n    <string name=\"player_sheets_filters_hue\">Teinte</string>\n    <string name=\"player_sheets_filters_warning\">Certains filtres peuvent ne pas fonctionner avec votre pilote vidéo actuel</string>\n    <string name=\"player_sheets_add_ext_audio\">Ajouter des pistes audio externes</string>\n    <string name=\"player_hoster_tap_to_load\">Appuyer pour charger les vidéos</string>\n    <string name=\"player_hoster_failed\">Impossible de charger les vidéos</string>\n    <string name=\"player_sheets_qualities_title\">Qualités</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Plus</string>\n    <string name=\"pref_audio_channels\">Canaux audio</string>\n    <string name=\"player_sheets_stats_page_title\">Page des statistiques par défaut</string>\n    <string name=\"player_sheets_tracks_off\">Éteint</string>\n    <string name=\"player_sheets_stats_page_chip\">Page %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Boutons personnalisés</string>\n    <string name=\"player_seek_n_seconds\">%d secondes</string>\n    <string name=\"timer_title\">Délai de mise en veille</string>\n    <string name=\"timer_remaining\">%s restant</string>\n    <string name=\"timer_picker_enter_timer\">Entrer une durée</string>\n    <string name=\"timer_picker_pick_time\">Choisir une durée</string>\n    <string name=\"timer_cancel_timer\">Annuler le délai actuel</string>\n    <string name=\"player_sheets_speed_slider_label\">Vitesse</string>\n    <string name=\"player_sheets_speed_make_default\">Définir comme vitesse par défaut</string>\n    <string name=\"pref_audio_pitch_correction_title\">Activer la correction de la hauteur de l\\'audio</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Empêche l\\'audio de devenir trop aiguë à vitesse élevée et trop grave à faible vitesse</string>\n    <string name=\"player_sheets_add_ext_sub\">Ajouter des sous-titres externes</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Les sous-titres secondaires n\\'auront pas de style ASS/SSA.</string>\n    <string name=\"player_sheets_chapters_title\">Chapitres</string>\n    <string name=\"pref_library_rows\">Taille de la liste</string>\n    <string name=\"custom_button_settings\">Boutons personnalisés</string>\n    <string name=\"type\">Type</string>\n    <string name=\"confirm_tracker_update_anime\">Mettre à jour les traqueurs à l\\'épisode %d ?</string>\n    <string name=\"trackers_updated_summary_manga\">Traqueurs mis à jour au chapitre %d</string>\n    <string name=\"trackers_updated_summary_anime\">Traqueurs mis à jour à l\\'épisode %d</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Passer le téléchargement des épisodes en double déjà vus</string>\n    <string name=\"pref_behavior_episode\">Comportement de l\\'épisode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Marquer les épisode en double déjà vus comme vus</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Après avoir vu un épisode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Après avoir récupéré un nouvel épisode</string>\n    <string name=\"action_stop\">Arrêter</string>\n    <string name=\"action_continue\">Continuer</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/gl/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Categorías, actualización global, accións ao arrastrar</string>\n    <string name=\"manga_categories\">Categorías</string>\n    <string name=\"default_manga_category\">Categoría por defecto</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/he/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">הפרק הבא שלא נצפה</item>\n        <item quantity=\"two\">ה-%d פרקים הבאים שלא נצפו</item>\n        <item quantity=\"many\"/>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">פרק %1$s</item>\n        <item quantity=\"two\">%1$s פרקים</item>\n        <item quantity=\"many\">%1$s פרקים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">הפרק הבא</item>\n        <item quantity=\"two\">הפרקים הבאים</item>\n        <item quantity=\"many\">הפרקים הבאים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">לסדרה אחת</item>\n        <item quantity=\"two\">ל-%d סדרות</item>\n        <item quantity=\"many\">ל-%d סדרות</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">פרק אחד חדש</item>\n        <item quantity=\"two\">%1$d פרקים חדשים</item>\n        <item quantity=\"many\">%1$d פרקים חדשים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d שנייה</item>\n        <item quantity=\"two\">%d שניות</item>\n        <item quantity=\"many\">%d שניות</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">פרקים %1$s ועוד 1</item>\n        <item quantity=\"two\">פרקים %1$s ו-%2$d נוספים</item>\n        <item quantity=\"many\">פרקים %1$s ו-%2$d נוספים</item>\n        <item quantity=\"other\"/>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/he/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">לחץ \\\"חזור\\\" שוב על מנת לצאת</string>\n    <string name=\"action_filter_started\">התחלתי</string>\n    <string name=\"action_sort_airing_time\">זמן שידור</string>\n    <string name=\"pref_library_summary\">קטגוריות, עדכון כללי, החלקת פרק</string>\n    <string name=\"pref_library_update_show_tab_badge\">הצג מספור של פרקים לצפייה/לקריאה שלא נצפו/נקראו באייקון ה- \\\"עדכונים\\\"</string>\n    <string name=\"pref_progress_mark_as_seen\">באיזו נקודה לסמן את הפרק כנצפה</string>\n    <string name=\"pref_preserve_watching_position\">שמור על עמדת הצפייה בפרקים שנראו</string>\n    <string name=\"pref_category_player_orientation\">אוריינטציה</string>\n    <string name=\"rotation_reverse_landscape\">תצוגה הפוכה לרוחב</string>\n    <string name=\"rotation_sensor_portrait\">חיישן תצוגת דיוקן</string>\n    <string name=\"rotation_sensor_landscape\">חיישן תצוגת רוחב</string>\n    <string name=\"pref_remember_brightness\">זכור ועבור לבהירות האחרונה שבה נעשה שימוש</string>\n    <string name=\"pref_remember_volume\">זכור ועבור לעוצמת הקול האחרונה שבה השתמשת</string>\n    <string name=\"pref_player_fullscreen\">הצג תוכן בחתך תצוגה</string>\n    <string name=\"pref_player_hide_controls\">הסתר את פקדי הנגן בעת פתיחת הנגן</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">אפשר דילוג אוטומטי</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">אפשר סגנון נטפליקס</string>\n    <string name=\"pref_waiting_time_aniskip\">טיימאאוט</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 שניות</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 שניות</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 שניות</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 שניות</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 שניות</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 שניות</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip דורש מעקב אחר האנימה עם MAL או Anilist כדי לעבוד</string>\n    <string name=\"pref_enable_aniskip\">הפעל את AniSkip</string>\n    <string name=\"pref_category_pip\">תמונה בתוך תמונה (PiP)</string>\n    <string name=\"pref_enable_pip\">אפשר את השימוש במצב תמונה בתוך תמונה (PiP)</string>\n    <string name=\"pref_pip_episode_toasts\">הצגת פריטים מוקפצים של פרקים בעת החלפת פרקים במצב תמונה בתוך תמונה (PiP)</string>\n    <string name=\"pref_pip_on_exit\">עבור אוטומטית למצב תמונה בתוך תמונה (PiP) בעת יציאה מהנגן</string>\n    <string name=\"pref_category_external_player\">נגן חיצוני</string>\n    <string name=\"pref_always_use_external_player\">השתמש תמיד בנגן חיצוני</string>\n    <string name=\"pref_external_player_preference\">העדפת נגן חיצוני</string>\n    <string name=\"enable_volume_brightness_gestures\">הפעל מחוות עוצמת הקול והבהירות</string>\n    <string name=\"pref_category_player_seeking\">מחפש</string>\n    <string name=\"enable_horizontal_seek_gesture\">אפשר מחוות חיפוש אופקי</string>\n    <string name=\"pref_default_intro_length\">אורך ברירת מחדל לדילוג על מבוא</string>\n    <string name=\"pref_intro_length\">אורך הדילוג על המבוא</string>\n    <string name=\"pref_skip_length\">אורך הדילוג עם לחצה כפולה</string>\n    <string name=\"pref_skip_disable\">השבת</string>\n    <string name=\"pref_player_smooth_seek\">אפשר חיפוש מדויק</string>\n    <string name=\"pref_player_smooth_seek_summary\">כשזה מופעל, החיפוש לא יתמקד ברגעי מפתח, מה שיוביל לחיפוש איטי יותר אך מדויק</string>\n    <string name=\"pref_mpv_conf\">ערוך קובץ תצורת MPV להגדרות נגן נוספות</string>\n    <string name=\"video_fit_screen\">התאם לגודל מסך</string>\n    <string name=\"video_crop_screen\">חתוך לגודל המסך</string>\n    <string name=\"video_stretch_screen\">מתיחה לגודל המסך</string>\n    <string name=\"enable_auto_play\">נגינה אוטומטית מופעלת</string>\n    <string name=\"disable_auto_play\">נגינה אוטומטית כבויה</string>\n    <string name=\"player_aniskip_dontskip\">אל תדלג</string>\n    <string name=\"player_aniskip_dontskip_toast\">דלג %s בעוד %d שניות</string>\n    <string name=\"player_aniskip_skip\">%s דולג</string>\n    <string name=\"no_next_episode\">הפרק הבא לא נמצא!</string>\n    <string name=\"player_hwdec_mode\">הגדר מצב פענוח חומרה ברירת מחדל</string>\n    <string name=\"screenshot_show_subs\">הצג כתוביות בצילום מסך</string>\n    <string name=\"pref_general_summary\">שפת האפליקציה, התרעות</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"manga_categories\">קטגוריות מנגה</string>\n    <string name=\"general_categories\">קטגוריות</string>\n    <string name=\"anime_categories\">קטגוריות אנימה</string>\n    <string name=\"entries\">ערכים בספרייה</string>\n    <string name=\"chapters_episodes\">חלקים ופרקים</string>\n    <string name=\"episodes\">פרקים</string>\n    <string name=\"backup_settings_warning\">אזהרה: גיבוי הגדרות יאחסן גם את סיסמאות המעקב שלך, אל תשתף קובץ גיבוי זה!</string>\n    <string name=\"label_manga_library\">מאנגה</string>\n    <string name=\"label_anime_library\">אנימה</string>\n    <string name=\"label_anime\">אנימה</string>\n    <string name=\"label_manga\">מאנגה</string>\n    <string name=\"label_manga_sources\">מקורות מאנגה</string>\n    <string name=\"label_anime_sources\">מקורות אנימה</string>\n    <string name=\"label_watched_duration\">זמן שנצפה</string>\n    <string name=\"label_watched_episodes\">נצפה</string>\n    <string name=\"pref_library_manga_columns\">פריטי מנגה בכל שורה</string>\n    <string name=\"pref_library_anime_columns\">פריטי אנימה בכל שורה</string>\n    <string name=\"pref_bottom_nav_no_history\">העברת היסטוריה לכרטיסיה \\'עוד\\'</string>\n    <string name=\"pref_bottom_nav_no_updates\">העברת עדכונים לכרטיסיה \\'עוד\\'</string>\n    <string name=\"pref_bottom_nav_no_manga\">העברת מנגה לכרטיסיה \\'עוד\\'</string>\n    <string name=\"action_filter_unseen\">לא נצפה</string>\n    <string name=\"action_global_manga_search\">חיפוש מנגה גלובלי</string>\n    <string name=\"action_global_anime_search\">חיפוש אנימה גלובלי</string>\n    <string name=\"action_sort_total_episodes\">סה\\\"כ פרקים</string>\n    <string name=\"action_sort_last_seen\">נצפה לאחרונה</string>\n    <string name=\"action_sort_last_checked\">נבדק לאחרונה</string>\n    <string name=\"action_sort_latest_episode\">פרק הכי חדש</string>\n    <string name=\"action_sort_last_anime_update\">עדכון אנימה אחרון</string>\n    <string name=\"action_sort_unseen_count\">כמות שלא נצפו</string>\n    <string name=\"action_sort_episode_fetch_date\">תאריך לקיחת פרק</string>\n    <string name=\"action_mark_as_seen\">סמן כנצפה</string>\n    <string name=\"action_mark_as_unseen\">סמן כלא נצפה</string>\n    <string name=\"action_mark_previous_as_seen\">סמן פרק קודם כנצפה</string>\n    <string name=\"action_play_internally\">נגן בנגן פנימי</string>\n    <string name=\"action_play_externally\">נגן בנגן חיצוני</string>\n    <string name=\"action_download_unread\">הורד חלקים שלא נקראו</string>\n    <string name=\"action_download_unseen\">הורדת פרקים שלא נראו</string>\n    <string name=\"action_bookmark_episode\">סמן פרק בסימנייה</string>\n    <string name=\"action_remove_bookmark_episode\">הורדת סימנייה מפרק</string>\n    <string name=\"action_edit_anime_categories\">עריכת קטגוריות אנימה</string>\n    <string name=\"action_edit_manga_categories\">עריכת קטגוריות מאנגה</string>\n    <string name=\"action_view_episodes\">צפו בפרקים</string>\n    <string name=\"action_previous_episode\">הפרק הקודם</string>\n    <string name=\"action_play\">נגן</string>\n    <string name=\"action_next_episode\">הפרק הבא</string>\n    <string name=\"action_screen_fit\">מצב התאמת מסך</string>\n    <string name=\"action_show_anime\">הצג אנימה</string>\n    <string name=\"action_display_download_badge_anime\">פרקים שהורדו</string>\n    <string name=\"action_display_local_badge_manga\">מקור מאנגה מקומי</string>\n    <string name=\"action_display_local_badge_anime\">מקור אנימה מקומית</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">חפש רק מקורות מאנגה מוצמדים בחיפוש גלובלי</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">חפש רק מקורות אנימה מוצמדים בחיפוש גלובלי</string>\n    <string name=\"pref_hide_in_manga_library_items\">הסתרת ערכי מנגה שכבר נמצאים בספריה</string>\n    <string name=\"pref_hide_in_anime_library_items\">הסתרת ערכי אנימה שכבר נמצאים בספריה</string>\n    <string name=\"action_order_by_episode_number\">לפי מספר פרק</string>\n    <string name=\"action_start_download_externally\">שימוש במנוע הורדה חיצוני</string>\n    <string name=\"action_start_download_internally\">שימוש במנוע הורדה פנימי</string>\n    <string name=\"pref_bottom_nav_style\">סגנון ניווט תחתון</string>\n    <string name=\"pref_default_home_tab_library\">הגדר את מסך התחל לכרטיסיית מנגה</string>\n    <string name=\"default_manga_category\">קטגוריית ברירת המחדל מאנגה</string>\n    <string name=\"default_anime_category\">קטגוריית ברירת מחדל אנימה</string>\n    <string name=\"pref_manga_library_update_categories_details\">מנגה בקטגוריות שאינן נכללות לא יעודכנו גם אם הן נמצאות גם בקטגוריות כלולות.</string>\n    <string name=\"pref_anime_library_update_categories_details\">אנימה בקטגוריות שאינן נכללות לא יעודכנו גם אם הן נמצאות גם בקטגוריות כלולות.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">הרחבה זו אינה מרשימת ההרחבות הרשמית של אניומי (Aniyomi).</string>\n    <string name=\"unofficial_anime_extension_message\">הרחבה זו אינה מרשימת ההרחבות הרשמית של אניומי (Aniyomi).</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">קטגוריות מאנגה שאינן נכללות</string>\n    <string name=\"pref_remove_exclude_categories_anime\">קטגוריות אנימה לא נכללות</string>\n    <string name=\"pref_category_external_downloader\">מנוע הורדה חיצוני</string>\n    <string name=\"pref_use_external_downloader\">השתמש תמיד במנוע הורדה חיצוני עבור אנימה</string>\n    <string name=\"pref_external_downloader_selection\">העדפת אפליקציית מנוע הורדות</string>\n    <string name=\"pref_download_new_episodes\">הורד פרקים חדשים</string>\n    <string name=\"auto_download_while_watching\">הורדה אוטומטית תוך כדי צפייה</string>\n    <string name=\"download_ahead_info_anime\">עובד רק על ערכים בספרייה ואם הפרק הנוכחי בתוספת הפרק הבא כבר הורדו</string>\n    <string name=\"pref_track_on_add_library\">פתח את תפריט המעקב בהוספה לספרייה</string>\n    <string name=\"pref_backup_flags_summary\">איזה מידע לכלול בקובץ הגיבוי</string>\n    <string name=\"used_cache_both\">בשימוש על ידי אנימה: %1$s, בשימוש על ידי מאנגה: %2$s</string>\n    <string name=\"pref_clear_manga_database\">נקה מסד הנתונים של מאנגה</string>\n    <string name=\"pref_clear_anime_database\">נקה מסד נתונים של אנימה</string>\n    <string name=\"pref_clear_manga_database_summary\">מחק את היסטוריית המנגה שאינם שמורים בספריה שלך</string>\n    <string name=\"pref_clear_anime_database_summary\">מחק היסטוריה עבור אנימה שאינה נשמרת בספרייה שלך</string>\n    <string name=\"anime_from_library\">אנימה מתוך הספרייה</string>\n    <string name=\"downloaded_episodes\">פרקים שהורדו</string>\n    <string name=\"local_manga_source\">מקור מנגה מקומי</string>\n    <string name=\"local_anime_source\">מקור אנימה מקומי</string>\n    <string name=\"episode_not_found\">הפרק לא נמצא</string>\n    <string name=\"local_invalid_episode_format\">פורמט פרק לא תקין</string>\n    <string name=\"unknown_studio\">סטודיו לא ידוע</string>\n    <string name=\"delete_downloads_for_anime\">למחוק פרקים שהורדת\\?</string>\n    <string name=\"snack_add_to_manga_library\">להוסיף מאנגה לספרייה?</string>\n    <string name=\"snack_add_to_anime_library\">להוסיף אנימה לספרייה?</string>\n    <string name=\"display_mode_episode\">פרק %1$s</string>\n    <string name=\"episode_downloading_progress\">מוריד (%d%%)</string>\n    <string name=\"download_error\">שגיאה</string>\n    <string name=\"download_paused\">מושהה</string>\n    <string name=\"show_episode_number\">מספר פרק</string>\n    <string name=\"sort_by_episode_number\">לפי מספר פרק</string>\n    <string name=\"download_unseen\">לא נצפה</string>\n    <string name=\"confirm_delete_episodes\">האם אתה בטוח שברצונך למחוק את הפרקים שנבחרו?</string>\n    <string name=\"also_set_episode_settings_for_library\">החל גם על כל האנימה בספרייה שלי</string>\n    <string name=\"no_episodes_error\">לא נמצאו פרקים</string>\n    <string name=\"watching\">צופה</string>\n    <string name=\"currently_reading\">כרגע קורא</string>\n    <string name=\"currently_watching\">כרגע צופה</string>\n    <string name=\"plan_to_watch\">מתכננים לצפות</string>\n    <string name=\"not_interesting\">לא מעניין</string>\n    <string name=\"want_to_read\">רוצה לקרוא</string>\n    <string name=\"want_to_watch\">רוצה לצפות</string>\n    <string name=\"repeating_anime\">צופה מחדש</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">פעולה זו תסיר את תאריך הצפייה של הפרק הזה. האם אתה בטוח?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">אפס את כל הפרקים עבור האנימה הזו</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">התקדמות: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">התקדמות: %1$s</string>\n    <string name=\"recent_anime_time\">פרק %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">לא נמצא סרטון</string>\n    <string name=\"notification_new_episodes\">נמצאו פרקים חדשים</string>\n    <string name=\"information_no_recent_anime\">שום דבר לא נצפה לאחרונה</string>\n    <string name=\"episode_settings_updated\">הגדרות ברירת המחדל המעודכנות של פרק</string>\n    <string name=\"download_notifier_download_paused_chapters\">הורדת החלק מושהית</string>\n    <string name=\"download_notifier_download_paused_episodes\">הורדת הפרק מושהית</string>\n    <string name=\"channel_new_chapters_episodes\">עדכונים לפרק/חלק</string>\n    <string name=\"label_history\">מאנגה</string>\n    <string name=\"label_anime_history\">אנימה</string>\n    <string name=\"label_updates\">מאנגה</string>\n    <string name=\"label_anime_updates\">אנימה</string>\n    <string name=\"action_change_intro_length\">שינוי אורך המבוא</string>\n    <string name=\"notification_episodes_single\">פרק %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">פרק %1$s ועוד %2$d</string>\n    <string name=\"notification_episodes_multiple\">פרקים %1$s</string>\n    <string name=\"episode_settings\">הגדרות פרק</string>\n    <string name=\"pref_backup_flags\">אפשרויות גיבוי</string>\n    <string name=\"label_manga_extensions\">הרחבות מנגה</string>\n    <string name=\"label_anime_extensions\">הרחבות אנימה</string>\n    <string name=\"label_migration_manga\">הגירת מנגה</string>\n    <string name=\"label_migration_anime\">העבר אנימה</string>\n    <string name=\"settings\">הגדרות</string>\n    <string name=\"copied_video_link_to_clipboard\">הועתק קישור לאיכות וידאו ללוח</string>\n    <string name=\"choose_video_quality\">בחר איכות וידאו:</string>\n    <string name=\"extension_settings\">הגדרות הרחבה</string>\n    <string name=\"action_display_unseen_badge\">פרקים שלא נצפו</string>\n    <string name=\"action_reorganize_by\">סדר מחדש</string>\n    <string name=\"relative_time_now\">עכשיו</string>\n    <string name=\"action_stop\">עצור</string>\n    <string name=\"action_continue\">המשך</string>\n    <string name=\"manga\">מנגה</string>\n    <string name=\"pref_behavior\">התנהגות פרק</string>\n    <string name=\"action_add_repo_message\">הוסף/י ספריות נוספות ל- %s. כתובת ה- URL אמורה להסתיים ב- \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">עובד רק כאשר הפרק קריאה/צפייה + הבא כבר הורד.</string>\n    <string name=\"non_library_settings\">כל הערכים שנקראו/נצפו</string>\n    <string name=\"action_sort_last_manga_update\">עדכון המנגה האחרון</string>\n    <string name=\"action_show_manga\">הצג מנגה</string>\n    <string name=\"action_display_show_continue_reading_button\">כפתור המשך/י לצפות/לקרוא</string>\n    <string name=\"pref_update_only_completely_read\">דלג/י על ערכים עם פרקים לצפייה או לקריאה שלא נצפו</string>\n    <string name=\"pref_category_delete_chapters\">מחק/י פרקים</string>\n    <string name=\"pref_remove_after_marked_as_read\">לאחר סימון ידני כ- נקרא/נצפה</string>\n    <string name=\"pref_remove_after_read\">לאחר קריאה/צפייה מחק/י אוטומטית</string>\n    <string name=\"pref_remove_bookmarked_chapters\">אשר/י מחיקת פרקים (לקריאה/צפייה) מסומנים בסימנית</string>\n    <string name=\"pref_auto_update_manga_sync\">עדכן/י התקדמות לאחר קריאה/צפייה</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">עדכן/י התקדמות כאשר מסומן כ- נקרא/נצפה</string>\n    <string name=\"pref_clear_chapter_cache\">נקה/י מטמון פרק קריאה</string>\n    <string name=\"pref_auto_clear_chapter_cache\">נקה/י מטמון פרק (צפייה/קריאה) בעת הפעלת האפליקציה</string>\n    <string name=\"clear_database_confirmation\">את/ה בטוח/ה? פרקים (לקריאה/לצפייה) שהושלמו והתקדמות ערכים לא ספריתיים יאבדו</string>\n    <string name=\"pref_incognito_mode_summary\">עוצר/ת את תיעוד ההיסטוריה</string>\n    <string name=\"manga_from_library\">מנגה מהספרייה</string>\n    <string name=\"also_set_chapter_settings_for_library\">החל/י גם לכל המנגה בספרייה שלי</string>\n    <string name=\"dialog_with_checkbox_reset\">אפס/י את כל הפרקים עבור מנגה זו</string>\n    <string name=\"download_insufficient_space\">לא ניתן להוריד בעקבות מחסור בשטח אחסון</string>\n    <string name=\"download_queue_size_warning\">אזהרה: תפזורת גדולה של הורדות עלולה לגרום למקורות להיות איטיים יותר ו/או חסימת Aniyomi. לחץ/י כדי ללמוד עוד.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">הכרח/י את האפליקציה לאמת פרקים (לקריאה/צפייה) מורדים.</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/hi/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">बाहर निकलने के लिए फिर से दबाएं</string>\n    <string name=\"pref_library_summary\">श्रेणियाँ, सब कुछ अपडेट करें, अध्याय स्वाइप</string>\n    <string name=\"pref_library_update_show_tab_badge\">अपडेट आइकन पर अपठित संख्या दिखाएं</string>\n    <string name=\"action_hide\">छुपाएँ</string>\n    <string name=\"label_all\">सभी</string>\n    <string name=\"label_category\">श्रेणी</string>\n    <string name=\"manga_categories\">मंगा श्रेणियां</string>\n    <string name=\"general_categories\">श्रेणियाँ</string>\n    <string name=\"anime_categories\">एनीमे श्रेणियाँ</string>\n    <string name=\"entries\">लाइब्रेरी प्रविष्टियों</string>\n    <string name=\"chapters_episodes\">अध्याय और एपिसोड</string>\n    <string name=\"episodes\">एपिसोड</string>\n    <string name=\"backup_settings_warning\">चेतावनी: सेटिंग्स का बैकअप लेने से आपके ट्रैक पासवर्ड भी संग्रहीत हो जाएंगे, इस बैकअप फ़ाइल को साझा न करें!</string>\n    <string name=\"label_manga_library\">मंगा</string>\n    <string name=\"label_anime_library\">एनिमे</string>\n    <string name=\"label_anime\">एनिमे</string>\n    <string name=\"label_manga\">मंगा</string>\n    <string name=\"label_manga_sources\">मंगा स्रोत</string>\n    <string name=\"label_anime_sources\">एनीमे स्रोत</string>\n    <string name=\"label_watched_duration\">देखी गई अवधि</string>\n    <string name=\"label_watched_episodes\">देखा है</string>\n    <string name=\"pref_library_manga_columns\">प्रति पंक्ति मंगा आइटम</string>\n    <string name=\"pref_library_anime_columns\">प्रति पंक्ति एनीमे आइटम</string>\n    <string name=\"pref_bottom_nav_no_history\">हिस्ट्री टैब के स्थान पर मोर टैब ले जाएं</string>\n    <string name=\"pref_bottom_nav_no_updates\">अपडेट टैब के स्थान पर मोर टैब ले जाएं</string>\n    <string name=\"pref_bottom_nav_no_manga\">मंगा टैब के स्थान पर मोर टैब को स्थानांतरित करें</string>\n    <string name=\"action_filter_unseen\">अनदेखे</string>\n    <string name=\"action_global_manga_search\">वैश्विक मंगा खोज</string>\n    <string name=\"action_global_anime_search\">वैश्विक एनीमे खोज</string>\n    <string name=\"action_sort_total_episodes\">कुल एपिसोड</string>\n    <string name=\"action_sort_last_seen\">अंतिम बार देखा गया</string>\n    <string name=\"action_sort_latest_episode\">नवीनतम कड़ी</string>\n    <string name=\"action_sort_last_anime_update\">अंतिम एनीमे अपडेट</string>\n    <string name=\"action_sort_unseen_count\">अनदेखे की संख्या</string>\n    <string name=\"action_sort_episode_fetch_date\">एपिसोड लाने की तारीख</string>\n    <string name=\"action_display_local_badge_manga\">स्थानीय स्रोत</string>\n    <string name=\"default_manga_category\">डिफ़ॉल्ट श्रेणी</string>\n    <string name=\"pref_manga_library_update_categories_details\">बहिष्कृत श्रेणियों की पुस्तकें अपडेट नहीं की जाएंगी, भले ही वे भी शामिल श्रेणियों में हों।</string>\n    <string name=\"pref_remove_exclude_categories_manga\">बहिष्कृत श्रेणियां</string>\n    <string name=\"pref_clear_manga_database\">डेटाबेस साफ़ करें</string>\n    <string name=\"pref_clear_manga_database_summary\">मैंगा जो आपकी लाइब्रेरी में सहेजे नहीं हैं उनका इतिहास हटाएं</string>\n    <string name=\"snack_add_to_manga_library\">लाइब्रेरी में मंगा जोड़ें?</string>\n    <string name=\"download_error\">त्रुटि</string>\n    <string name=\"download_paused\">रोके गए</string>\n    <string name=\"download_notifier_download_paused_chapters\">डाउनलोड रोक दिया है</string>\n    <string name=\"channel_new_chapters_episodes\">अध्याय अद्यतन</string>\n    <string name=\"action_filter_started\">शुरू हो गया</string>\n    <string name=\"action_sort_airing_time\">प्रसारण का समय</string>\n    <string name=\"action_display_unseen_badge\">अनदेखे एपिसोड</string>\n    <string name=\"action_reorganize_by\">पुनः क्रमित करें</string>\n    <string name=\"action_continue\">जारी रखे</string>\n    <string name=\"manga\">Manga</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/hr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Sljedeće nepogledane epizode</item>\n        <item quantity=\"few\">Sljedeće %d nepogledane epizode</item>\n        <item quantity=\"other\">Sljedećih %d nepogledanih epizoda</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s epizoda</item>\n        <item quantity=\"few\">%1$s epizode</item>\n        <item quantity=\"other\">%1$s epizoda</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Sljedeća epizoda</item>\n        <item quantity=\"few\">Sljedeće %d epizode</item>\n        <item quantity=\"other\">Sljedećih %d epizoda</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Za jedan naslov</item>\n        <item quantity=\"few\">Za %d naslova</item>\n        <item quantity=\"other\">Za %d naslova</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">Jedna nova epizoda</item>\n        <item quantity=\"few\">%1$d nove epizode</item>\n        <item quantity=\"other\">%1$d novih epizoda</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d sekunda</item>\n        <item quantity=\"few\">%d sekunde</item>\n        <item quantity=\"other\">%d sekunda</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Epizode %1$s i još jedna</item>\n        <item quantity=\"few\">Epizode %1$s i još %2$d</item>\n        <item quantity=\"other\">Epizode %1$s i još %2$d</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/hr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Ponovo pritisni natrag za zatvarnje</string>\n    <string name=\"action_filter_started\">Započeto</string>\n    <string name=\"action_sort_airing_time\">Vrijeme emitiranja</string>\n    <string name=\"action_reorganize_by\">Promjieni redoslijed</string>\n    <string name=\"relative_time_now\">Sada</string>\n    <string name=\"pref_library_summary\">Kategorije, globalno ažuriranje, prelistavanje poglavlja</string>\n    <string name=\"pref_library_update_show_tab_badge\">Prikaži broj nepročitanih na ikoni „Aktualiziranja”</string>\n    <string name=\"label_player_settings\">Postavke playera</string>\n    <string name=\"action_search_player_settings\">Pretraži postavke playera</string>\n    <string name=\"pref_player_internal\">Interni player</string>\n    <string name=\"pref_player_internal_summary\">Napredak, kontrole, položaj</string>\n    <string name=\"pref_progress_mark_as_seen\">U kojem trenutku označiti epizodu kao pogledanu</string>\n    <string name=\"pref_preserve_watching_position\">Zadrži poziciju gledanja za pogledane epizode</string>\n    <string name=\"pref_category_player_orientation\">Položaj</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Preokreni ležeći format</string>\n    <string name=\"rotation_sensor_portrait\">Uspravni format</string>\n    <string name=\"rotation_sensor_landscape\">Ležeći format</string>\n    <string name=\"pref_category_controls\">Kontrole</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Dozvoli geste u pločama</string>\n    <string name=\"pref_controls_show_loading\">Prikaži krug pri učitavanju</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Prikaži indikator trenutačnog poglavlja</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Pojavljuje se samo ako video ima poglavlja</string>\n    <string name=\"pref_controls_display_volume_percentage\">Prikaži glasnoću kao postotak</string>\n    <string name=\"pref_remember_brightness\">Zapamti i prebaci na zadnju korištenu svjetlinu</string>\n    <string name=\"pref_remember_volume\">Zapamti i prebaci na zadnju korištenu glasnoću</string>\n    <string name=\"pref_player_fullscreen\">Prikaži sadržaj u izresku ekrana</string>\n    <string name=\"pref_player_hide_controls\">Sakrij kontrole playera pri otvaranju playera</string>\n    <string name=\"pref_show_system_bar\">Prikaži statusnu traku sustava s kontrolama</string>\n    <string name=\"pref_reduce_motion\">Smanji animaciju playera</string>\n    <string name=\"pref_player_time_to_disappear\">Vrijeme do skrivanja kontrola playera</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Prozirnost ploče</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Aktiviraj automatsko preskakanje</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Aktiviraj stil Netflixa</string>\n    <string name=\"pref_waiting_time_aniskip\">Gumb za istek vremena</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 sekunda</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 sekunda</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 sekunda</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 sekunda</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 sekunda</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 sekunda</string>\n    <string name=\"pref_category_player_aniskip_info\">Da bi radio, AniSkip zahtijeva da se anime prati pomoću usluga MAL ili Anilist</string>\n    <string name=\"pref_enable_aniskip\">Aktiviraj AniSkip</string>\n    <string name=\"pref_category_pip\">Slika-u-slici (PiP)</string>\n    <string name=\"pref_enable_pip\">Aktiviraj korištenje modusa slika-u-slici</string>\n    <string name=\"pref_pip_episode_toasts\">Prikaži obavijesti o epizodama prilikom mijenjanju epizoda u modusu slika-u-slici</string>\n    <string name=\"pref_pip_on_exit\">Automatski prebaci u modus slika-u-slici pri zatvaranju playera</string>\n    <string name=\"pref_pip_replace_with_previous\">Zamjenjuje opciju Preskoči 10 sekundi s prethodnom epizodom</string>\n    <string name=\"pref_category_external_player\">Eksterni player</string>\n    <string name=\"pref_always_use_external_player\">Uvijek koristi eksterni player</string>\n    <string name=\"pref_external_player_preference\">Postavke eksternog playera</string>\n    <string name=\"pref_player_gestures\">Geste</string>\n    <string name=\"pref_player_gestures_summary\">Prematanje, dvostruki dodir, medijske kontrole</string>\n    <string name=\"pref_category_player_sliders\">Klizači</string>\n    <string name=\"enable_volume_brightness_gestures\">Aktiviraj geste za glasnoću i svjetlinu</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Zamijeni klizač za glasnoću i svjetlinu</string>\n    <string name=\"pref_category_player_seeking\">Prematanje</string>\n    <string name=\"enable_horizontal_seek_gesture\">Aktiviraj geste za vodoravno prematanje</string>\n    <string name=\"pref_show_seekbar\">Prikaži traku prematanja tijekom prematanja</string>\n    <string name=\"pref_default_intro_length\">Standardno vrijeme preskakanja uvoda</string>\n    <string name=\"pref_intro_length\">Preskoči vrijeme uvoda</string>\n    <string name=\"pref_skip_length\">Dodirni dvaput za preskakanje vremena</string>\n    <string name=\"pref_skip_disable\">Deaktiviraj</string>\n    <string name=\"pref_player_smooth_seek\">Aktiviraj točno prematanje</string>\n    <string name=\"pref_player_smooth_seek_summary\">Kada je aktivirano, prematanje se neće fokusirati na ključne kadrove, što dovodi do sporijeg ali točnijeg prematanja</string>\n    <string name=\"pref_category_double_tap\">Dvostruki dodir</string>\n    <string name=\"pref_left_double_tap\">Dvostruki dodir (lijevo)</string>\n    <string name=\"pref_center_double_tap\">Dvostruki dodir (sredina)</string>\n    <string name=\"pref_right_double_tap\">Dvostruki dodir (desno)</string>\n    <string name=\"pref_double_tap_info\">Kada je gesta dodira postavljena na „Prilagođeno”, može se vezati putem input.conf. Kodovi tipki su 0x10001 za lijevo, 0x10002 za sredinu i 0x10003 za desno.</string>\n    <string name=\"single_action_none\">Ništa</string>\n    <string name=\"single_action_seek\">Premotaj</string>\n    <string name=\"single_action_playpause\">Pokreni/Pauza</string>\n    <string name=\"single_action_switch\">Promijeni epizodu</string>\n    <string name=\"single_action_custom\">Prilagođeno</string>\n    <string name=\"pref_category_media_controls\">Kontrole za medije</string>\n    <string name=\"pref_media_previous\">Prethodni</string>\n    <string name=\"pref_media_playpause\">Pokreni/Pauza</string>\n    <string name=\"pref_media_next\">Sljedeći</string>\n    <string name=\"pref_media_info\">Kada je kontrola medija postavljena na „Prilagođeno”, može se vezati putem input.conf. Kodovi tipki su 0x10004 za prethodno, 0x10005 za pokreni/pauza i 0x10006 za sljedeće.</string>\n    <string name=\"pref_player_decoder\">Dekoder</string>\n    <string name=\"pref_player_decoder_summary\">Hardversko dekodiranje, format piksela, uklanjanje artefakata</string>\n    <string name=\"pref_try_hw\">Pokušaj hardversko dekodiranje</string>\n    <string name=\"pref_gpu_next_title\">Aktiviraj gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Nov pozadinski sustav za iscrtavanje videa</string>\n    <string name=\"pref_debanding_title\">Uklanjanje artefakata</string>\n    <string name=\"pref_debanding_none\">Ništa</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Koristi YUV420P format piksela</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Može popraviti crne ekrane na nekim video kodecima, također može poboljšati performanse nauštrb kvalitete</string>\n    <string name=\"pref_player_subtitle\">Titlovi</string>\n    <string name=\"pref_player_subtitle_summary\">Preferirani jezici, bijela lista, crna lista</string>\n    <string name=\"pref_player_subtitle_lang\">Preferirani jezici</string>\n    <string name=\"pref_player_subtitle_lang_info\">Jezici titlova koji se standardno biraju za video s više titlova. Dvo- ili troslovni kodovi jezika funkcioniraju. Višestruke vrijednosti se mogu odvojiti zarezima.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Bijela lista</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Bijela lista titlova. Ako je bijela lista definirana, koristit će se prvi titl koji sadrži riječ u bijeloj listi. Višestruke vrijednosti se mogu odvojiti zarezima.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Crna lista</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Crna lista za titlove. Ako je crna lista definirana, svi titlovi koji sadrže riječ u crnoj liste će se izdvojiti. Višestruke vrijednosti se mogu odvojiti zarezima.</string>\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Preferirani jezici, korekcija visine tona, audio kanali</string>\n    <string name=\"pref_player_audio_lang\">Preferirani jezici</string>\n    <string name=\"pref_player_audio_lang_info\">Audio jezici koji se standardno biraju za video s višestrukim audio streamovima. Dvo- ili troslovni kodovi jezika funkcioniraju. Višestruke vrijednosti se mogu odvojiti zarezima.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Aktiviraj ispravljanje visine tona</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Sprečava visoki ton pri većim brzinama i niski pri sporijim brzinama</string>\n    <string name=\"pref_player_audio_channels\">Audio kanali</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Automatsko spremanje</string>\n    <string name=\"pref_player_audio_channels_auto\">Automatski</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Preokrenuti stereo</string>\n    <string name=\"pref_player_audio_boost_cap\">Ograničenje pojačavanja glasnoće</string>\n    <string name=\"pref_player_custom_button\">Prilagođeni gumbi</string>\n    <string name=\"pref_player_custom_button_summary\">Izvrši lua kod s prilagođenim gumbima</string>\n    <string name=\"pref_player_custom_button_header\">Uredi prilagođene gumbe</string>\n    <string name=\"pref_player_custom_button_guide\">Vodič za prilagođene gumbe</string>\n    <string name=\"pref_player_custom_button_empty\">Nemaš prilagođene gumbe. Dodirni gumb plus za izradu prilagođenog gumba.</string>\n    <string name=\"pref_player_custom_button_add\">Dodaj gumb</string>\n    <string name=\"pref_player_custom_button_edit\">Uredi gumb</string>\n    <string name=\"pref_player_custom_button_title\">Naslov</string>\n    <string name=\"pref_player_custom_button_error_exists\">Gumb već postoji!</string>\n    <string name=\"pref_player_custom_button_content\">Lua kod</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua kod (pri dugom pritisku)</string>\n    <string name=\"pref_player_custom_button_optional\">(opcionalno)</string>\n    <string name=\"pref_player_custom_button_delete\">Izbriši gumb</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Želiš izbrisati gumb %s?</string>\n    <string name=\"pref_player_custom_button_startup\">Prilikom pokretanja</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Napredno</string>\n    <string name=\"pref_player_advanced_summary\">Korisničke datoteke, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Uredi MPV konfiguracijsku datoteku za daljnje postavke playera</string>\n    <string name=\"pref_reset_mpv_conf\">Obnovi MPV konfiguracijsku datoteku</string>\n    <string name=\"pref_mpv_input\">Uredi MPV ulaznu datoteku za konfiguraciju mapiranja tipkovnice</string>\n    <string name=\"video_fit_screen\">Prilagođeno na veličinu ekrana</string>\n    <string name=\"video_crop_screen\">Odrezano na veličinu ekrana</string>\n    <string name=\"video_stretch_screen\">Rastegnuto na veličinu ekrana</string>\n    <string name=\"mpv_media_title\">%1$s – E%2$s – %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Timer odbrojavanja je završio</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Vrijednost je prevelika</string>\n    <string name=\"numeric_chooser_value_too_small\">Vrijednost je premalena</string>\n    <string name=\"enable_auto_play\">Automatska reprodukcija je aktivirana</string>\n    <string name=\"disable_auto_play\">Automatska reprodukcija je deaktivirana</string>\n    <string name=\"player_aniskip_dontskip\">Nemoj preskočiti</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s se preskače za %d sekunde</string>\n    <string name=\"player_aniskip_skip\">%s preskočeno</string>\n    <string name=\"no_next_episode\">Sljedeća epizoda nije pronađena!</string>\n    <string name=\"no_prev_episode\">Prethodna epizoda nije pronađena!</string>\n    <string name=\"player_sheets_delay_set_as_default\">Postavi kao standardno</string>\n    <string name=\"player_sheets_audio_delay_title\">Kašnjenje zvuka</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Čujeni zvuk</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Uočeni zvuk</string>\n    <string name=\"player_sheets_sub_delay_title\">Kašnjenje titlova</string>\n    <string name=\"player_sheets_sub_delay_speed\">Brzina</string>\n    <string name=\"player_sheets_sub_delay_delay\">Kašnjenje</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primarni</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Sekundarni</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Oboje</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Čujeni glas</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Viđeni tekst</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Čujeni zvuk</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Uočeni zvuk</string>\n    <string name=\"player_sheets_sub_colors_title\">Boje</string>\n    <string name=\"player_sheets_subtitles_color_text\">Tekst</string>\n    <string name=\"player_sheets_subtitles_color_border\">Rub</string>\n    <string name=\"player_sheets_subtitles_color_background\">Pozadina</string>\n    <string name=\"player_sheets_sub_color_red\">Crvena</string>\n    <string name=\"player_sheets_sub_color_green\">Zelena</string>\n    <string name=\"player_sheets_sub_color_blue\">Plava</string>\n    <string name=\"player_sheets_sub_color_alpha\">Prozirnost</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Postavke titlova</string>\n    <string name=\"player_sheets_sub_typography_title\">Tipografija</string>\n    <string name=\"player_sheets_sub_typography_font\">Font</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Veličina fonta</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Stil ruba</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Veličina ruba</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Odmak sjene</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Kontura i sjena</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Neprozirni okvir</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Pozadinski okvir</string>\n    <string name=\"player_sheets_sub_misc_title\">Razno</string>\n    <string name=\"player_sheets_sub_override_ass\">Prepiši ASS/SSA titlove</string>\n    <string name=\"player_sheets_sub_scale\">Uvećanje</string>\n    <string name=\"player_sheets_sub_position\">Pozicija</string>\n    <string name=\"player_sheets_filters_title\">Filtri</string>\n    <string name=\"player_sheets_filters_brightness\">Svjetlina</string>\n    <string name=\"player_sheets_filters_contrast\">Kontrast</string>\n    <string name=\"player_sheets_filters_gamma\">Gamut</string>\n    <string name=\"player_sheets_filters_Saturation\">Zasićenost</string>\n    <string name=\"player_sheets_filters_hue\">Nijansa</string>\n    <string name=\"player_sheets_filters_warning\">Neki filtri možda neće raditi s tvojim trenutačnim upravljačkim programom za videa</string>\n    <string name=\"player_sheets_add_ext_audio\">Dodaj vanjske audio snimke</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Više</string>\n    <string name=\"player_hwdec_mode\">Modus hardverskog dekodiranja</string>\n    <string name=\"pref_audio_channels\">Audio kanali</string>\n    <string name=\"player_sheets_stats_page_title\">Standardna stranica statistike</string>\n    <string name=\"player_sheets_tracks_off\">Isključeno</string>\n    <string name=\"player_sheets_stats_page_chip\">Stranica %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Prilagođeni gumbi</string>\n    <string name=\"player_seek_n_seconds\">%d sekunde</string>\n    <string name=\"timer_title\">Timer odbrojavanja</string>\n    <string name=\"timer_remaining\">%s preostalo</string>\n    <string name=\"timer_picker_enter_timer\">Upiši trajanje</string>\n    <string name=\"timer_picker_pick_time\">Odaberi trajanje</string>\n    <string name=\"timer_cancel_timer\">Prekini aktualni timer</string>\n    <string name=\"player_sheets_speed_slider_label\">Brzina</string>\n    <string name=\"player_sheets_speed_make_default\">Postavi kao standardnu brzinu</string>\n    <string name=\"pref_audio_pitch_correction_title\">Aktiviraj ispravljanje visine tona</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Sprečava visoki ton pri većim brzinama i niski pri sporijim brzinama</string>\n    <string name=\"player_sheets_add_ext_sub\">Dodaj eksterne titlove</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Sekundarni titlovi neće imati ASS/SSA stil.</string>\n    <string name=\"screenshot_show_subs\">Prikaži titlove</string>\n    <string name=\"pref_general_summary\">Jezik aplikacije, obavijesti</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_library_rows\">Veličina popisa</string>\n    <string name=\"pref_preserve_reading_position\">Sačuvaj poziciju čitanja u čitanim poglavljima</string>\n    <string name=\"pref_download_slots\">Maksimalni broj preuzimanja</string>\n    <string name=\"custom_button_settings\">Prilagođeni gumbi</string>\n    <string name=\"local_source_badge\">Lokalno</string>\n    <string name=\"anime_interval_expected_update\">Predviđa se da će nove epizode biti objavljene u roku od %1$s, provjera svakih %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Ovaj je anime gotov ili nema predviđeni datum izdavanja.</string>\n    <string name=\"confirm_tracker_update_anime\">Aktualizirati usluge praćenja do epizode %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Usluge praćenja su aktualizirani do poglavlja %d</string>\n    <string name=\"trackers_updated_summary_anime\">Usluge praćenja su aktualizirani do epizode %d</string>\n    <string name=\"download_notifier_download_finish\">Preuzimanje dovršeno</string>\n    <string name=\"action_hide\">Sakrij</string>\n    <string name=\"label_all\">Sve</string>\n    <string name=\"label_category\">Kategorija</string>\n    <string name=\"manga_categories\">Manga kategorije</string>\n    <string name=\"general_categories\">Kategorije</string>\n    <string name=\"anime_categories\">Anime kategorije</string>\n    <string name=\"entries\">Unosi u biblioteci</string>\n    <string name=\"chapters_episodes\">Poglavlja i epizode</string>\n    <string name=\"episodes\">Epizode</string>\n    <string name=\"backup_settings_warning\">Upozorenje: Sigurnosno kopiranje postavki također će spremiti tvoje lozinke. Nemoj dijeliti ovu datoteku sigurnosne kopije!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Anime aktualiziranja</string>\n    <string name=\"label_manga_sources\">Manga izvori</string>\n    <string name=\"label_anime_sources\">Anime izvori</string>\n    <string name=\"label_watched_duration\">Trajanje gledanja</string>\n    <string name=\"label_watched_episodes\">Pogledano</string>\n    <string name=\"pref_start_screen\">Početni ekran</string>\n    <string name=\"pref_library_manga_columns\">Broj manga po retku</string>\n    <string name=\"pref_library_anime_columns\">Broj animeova po retku</string>\n    <string name=\"pref_bottom_nav_no_history\">Premjesti „Povijest” na karticu „Više”</string>\n    <string name=\"pref_bottom_nav_no_updates\">Premjesti „Aktualiziranja” na karticu „Više”</string>\n    <string name=\"pref_bottom_nav_no_manga\">Premjesti „Manga” na karticu „Više”</string>\n    <string name=\"pref_bottom_nav_no_browse\">Premjesti „Pretraživanje” na karticu „Više”</string>\n    <string name=\"action_filter_unseen\">Nepogledano</string>\n    <string name=\"action_global_manga_search\">Globalna pretraga manga</string>\n    <string name=\"action_global_anime_search\">Globalna pretraga animea</string>\n    <string name=\"action_sort_total_episodes\">Ukupni broj epizoda</string>\n    <string name=\"action_sort_last_seen\">Zadnje gledano</string>\n    <string name=\"action_sort_last_checked\">Zadnje provjereno</string>\n    <string name=\"action_sort_latest_episode\">Zadnja epizoda</string>\n    <string name=\"action_sort_last_anime_update\">Zadnje aktualiziranje animea</string>\n    <string name=\"action_sort_unseen_count\">Broj nepogledanih</string>\n    <string name=\"action_sort_episode_fetch_date\">Datum preuzimanja epizode</string>\n    <string name=\"action_mark_as_seen\">Označi kao pogledano</string>\n    <string name=\"action_mark_as_unseen\">Označi kao nepogledano</string>\n    <string name=\"action_mark_previous_as_seen\">Označi prethodno kao pogledano</string>\n    <string name=\"action_play_internally\">Reproduciraj s internim playerom</string>\n    <string name=\"action_play_externally\">Reproduciraj s eksternim playerom</string>\n    <string name=\"action_download_unread\">Preuzmi nepročitana poglavlja</string>\n    <string name=\"action_download_unseen\">Preuzmi nepogledane epizode</string>\n    <string name=\"action_bookmark_episode\">Zabilježi epizodu</string>\n    <string name=\"action_remove_bookmark_episode\">Izbriši zabilješku epizode</string>\n    <string name=\"action_edit_anime_categories\">Uredi anime kategorije</string>\n    <string name=\"action_edit_manga_categories\">Uredi manga kategorije</string>\n    <string name=\"action_view_episodes\">Pogledaj epizode</string>\n    <string name=\"action_previous_episode\">Prethodna epizoda</string>\n    <string name=\"action_play\">Reproduciraj</string>\n    <string name=\"action_next_episode\">Sljedeća epizoda</string>\n    <string name=\"action_screen_fit\">Modus prilagođavanja veličini ekrana</string>\n    <string name=\"action_show_anime\">Prikaži anime</string>\n    <string name=\"action_display_download_badge_anime\">Preuzete epizode</string>\n    <string name=\"action_display_local_badge_manga\">Lokalna manga</string>\n    <string name=\"action_display_local_badge_anime\">Lokalni anime</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Traži samo prikvačene manga izvore u globalnoj pretrazi</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Traži samo prikvačene anime izvore u globalnoj pretrazi</string>\n    <string name=\"pref_hide_in_manga_library_items\">Sakrij manga unose koji se već nalaze u biblioteci</string>\n    <string name=\"pref_hide_in_anime_library_items\">Sakrij anime unose koji se već nalaze u biblioteci</string>\n    <string name=\"action_order_by_episode_number\">Po broju epizode</string>\n    <string name=\"action_start_download_externally\">Koristi eksterno preuzimanje</string>\n    <string name=\"action_start_download_internally\">Koristi interno preuzimanje</string>\n    <string name=\"pref_bottom_nav_style\">Stil donje navigacije</string>\n    <string name=\"pref_default_home_tab_library\">Postavi početni ekran na manga karticu</string>\n    <string name=\"default_manga_category\">Standardna manga kategorija</string>\n    <string name=\"default_anime_category\">Standardna anime kategorija</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga u isključenim kategorijama neće se aktualizirati čak niti ako se također nalaze u uključenim kategorijama.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime u isključenim kategorijama se neće aktualizirati čak i ako se također nalaze u uključenim kategorijama.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Ovo proširenje nije sa službenog popisa Aniyomi proširenja.</string>\n    <string name=\"unofficial_anime_extension_message\">Ovo proširenje nije službeno Aniyomi proširenje.</string>\n    <string name=\"episode_download_progress\">%1$d% %</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Isključene manga kategorije</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Isključene anime kategorije</string>\n    <string name=\"pref_category_external_downloader\">Eksterni upravljač preuzimanja</string>\n    <string name=\"pref_use_external_downloader\">Uvijek koristi eksterni upravljač preuzimanja za anime</string>\n    <string name=\"pref_external_downloader_selection\">Postavke aplikacije preuzimanja</string>\n    <string name=\"pref_download_new_episodes\">Preuzmi nove epizode</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Preskoči preuzimanje duplikata pogledanih epizoda</string>\n    <string name=\"auto_download_while_watching\">Automatski preuzmi tijekom gledanja</string>\n    <string name=\"download_ahead_info_anime\">Radi samo za unose u biblioteci te ako su trenutačna i sljedeća epizoda već preuzete</string>\n    <string name=\"pref_track_on_add_library\">Otvori izbornik zapisa prilikom dodavanja u biblioteku</string>\n    <string name=\"pref_show_next_episode_airing_time\">Prikaži vrijeme emitiranja sljedeće epizode</string>\n    <string name=\"pref_backup_flags_summary\">Koje podatke uključiti u datoteku sigurnosne kopije</string>\n    <string name=\"pref_anime_storage_usage\">Korištenje Anime spremišta</string>\n    <string name=\"pref_manga_storage_usage\">Korištenje Manga spremišta</string>\n    <string name=\"used_cache_both\">Korišteno za anime: %1$s, korišteno za manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Isprazni manga bazu podataka</string>\n    <string name=\"pref_clear_anime_database\">Isprazni anime bazu podataka</string>\n    <string name=\"pref_clear_manga_database_summary\">Izbriši povijest za manga koji nisu spremljeni u tvojoj biblioteci</string>\n    <string name=\"pref_clear_anime_database_summary\">Izbriši povijest za anime koji nisu spremljeni u tvojoj biblioteci</string>\n    <string name=\"anime_from_library\">Anime iz biblioteke</string>\n    <string name=\"downloaded_episodes\">Preuzete epizode</string>\n    <string name=\"local_manga_source\">Izvor lokalnog manga</string>\n    <string name=\"local_anime_source\">Izvor lokalnog animea</string>\n    <string name=\"episode_not_found\">Epizoda nije pronađena</string>\n    <string name=\"local_invalid_episode_format\">Neispravan format epizode</string>\n    <string name=\"unknown_studio\">Nepoznat studio</string>\n    <string name=\"delete_confirmation\">Stvarno želiš izbrisati „%s”?</string>\n    <string name=\"delete_downloads_for_anime\">Izbrisati preuzete epizode?</string>\n    <string name=\"snack_add_to_manga_library\">Dodati manga u biblioteku?</string>\n    <string name=\"snack_add_to_anime_library\">Dodati anime u biblioteku?</string>\n    <string name=\"display_mode_episode\">Epizoda %1$s</string>\n    <string name=\"episode_downloading_progress\">Preuzimanje (%d% %)</string>\n    <string name=\"download_error\">Greška</string>\n    <string name=\"download_paused\">Zaustavljeno</string>\n    <string name=\"show_episode_number\">Broj epizode</string>\n    <string name=\"sort_by_episode_number\">Po broju epizode</string>\n    <string name=\"download_unseen\">Nepogledano</string>\n    <string name=\"confirm_delete_episodes\">Stvarno želiš izbrisati odabrane epizode?</string>\n    <string name=\"also_set_episode_settings_for_library\">Također primijeni na sve anime u mojoj biblioteci</string>\n    <string name=\"no_episodes_error\">Nijedna epizoda nije pronađena</string>\n    <string name=\"watching\">Gledam</string>\n    <string name=\"currently_reading\">Trenutačno čitam</string>\n    <string name=\"currently_watching\">Trenutačno gledam</string>\n    <string name=\"plan_to_watch\">Planiram gledati</string>\n    <string name=\"not_interesting\">Nezanimljivo</string>\n    <string name=\"want_to_read\">Želim čitati</string>\n    <string name=\"want_to_watch\">Želim gledati</string>\n    <string name=\"repeating_anime\">Ponovno gledanje</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Ovo će ukloniti datum gledanja ove epizode. Stvarno to želiš?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Obnovi sve epizode za ovaj anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Napredak: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Napredak: %1$s</string>\n    <string name=\"recent_anime_time\">Epizoda %1$s – %2$s</string>\n    <string name=\"video_list_empty_error\">Nije pronađen nijedan video</string>\n    <string name=\"notification_new_episodes\">Pronađene su nove epizode</string>\n    <string name=\"information_no_recent_anime\">Ništa nije nedavno gledano</string>\n    <string name=\"episode_settings_updated\">Potavke standardnih epizoda su aktualizirane</string>\n    <string name=\"download_notifier_download_paused_chapters\">Preuzimanje poglavlja je zaustavljeno</string>\n    <string name=\"download_notifier_download_paused_episodes\">Preuzimanje epizode zaustavljeno</string>\n    <string name=\"channel_new_chapters_episodes\">Ažuriranja poglavlja</string>\n    <string name=\"label_storage\">Memorija</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Promijeni duljinu uvoda</string>\n    <string name=\"notification_episodes_single\">Epizoda %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Epizoda %1$s i još %2$d</string>\n    <string name=\"notification_episodes_multiple\">Epizode %1$s</string>\n    <string name=\"episode_settings\">Postavke epizode</string>\n    <string name=\"pref_backup_flags\">Opcije za sigurnosne kopije</string>\n    <string name=\"label_manga_extensions\">Manga proširenja</string>\n    <string name=\"label_anime_extensions\">Anime proširenja</string>\n    <string name=\"label_migration_manga\">Migriraj manga</string>\n    <string name=\"label_migration_anime\">Migriraj anime</string>\n    <string name=\"settings\">Postavke</string>\n    <string name=\"copied_video_link_to_clipboard\">Poveznica kvalitete videa je kopirana u međuspremnik</string>\n    <string name=\"choose_video_quality\">Odaberi kvalitetu videa:</string>\n    <string name=\"extension_settings\">Postavke proširenja</string>\n    <string name=\"theme_cottoncandy\">Cotton Candy</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Epizoda pri povlačenju prema desno</string>\n    <string name=\"pref_episode_swipe_start\">Epizoda pri povlačenju prema lijevo</string>\n    <string name=\"pref_category_hide_hidden\">Sakrij skrivene kategorije s ekrana kategorija</string>\n    <string name=\"pref_update_anime_release_grace_period\">Očekivano razdoblje odgode izdavanje animea</string>\n    <string name=\"data_saver_exclude\">Isključi iz uštede podataka</string>\n    <string name=\"data_saver_stop_exclude\">Prestani isključivati iz uštede podataka</string>\n    <string name=\"data_saver\">Uštede podataka</string>\n    <string name=\"data_saver_summary\">Komprimiraj slike prije preuzimanja ili učitavanja u čitač</string>\n    <string name=\"data_saver_downloader\">Koristi uštedu podataka u programu za preuzimanje</string>\n    <string name=\"data_saver_ignore_jpeg\">Zanemari Jpeg slike</string>\n    <string name=\"data_saver_ignore_gif\">Zanemari Gif animacije</string>\n    <string name=\"data_saver_image_quality\">Kvaliteta slike</string>\n    <string name=\"data_saver_image_quality_summary\">Veće vrijednosti znače da je spremljen veći postotak kvalitete slike, ali to također znači da je veličina datoteke veća. 80 posto je dobra srednja vrijednost između veličine datoteke i kvalitete slike</string>\n    <string name=\"data_saver_image_format\">Komprimiraj u Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Veličina Jpeg datoteke je znatno manja od Webp formata (što znači da se sprema više podataka), ali zbog toga slike gube i na kvaliteti.\n\\nTrenutačno se komprimira u Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Veličina Jpeg datoteke je znatno manja od Webp formata (što znači da se sprema više podataka), ali zbog toga slike gube i na kvaliteti.\n\\nTrenutačno se komprimira u Webp</string>\n    <string name=\"data_saver_color_bw\">Konvertiraj u crno-bijelo</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (potreban je Bandwidth Hero Proxy server)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy Server</string>\n    <string name=\"data_saver_server_summary\">Ovdje navedi URL Bandwidth Hero Proxy servera</string>\n    <string name=\"download_slots_info\">Istodobno će se preuzimati samo iz izvora koji se sami hostiraju ili bez mjerenja</string>\n    <string name=\"unseen\">Nepogledano</string>\n    <string name=\"label_manga_extension_repos\">Repozitoriji Manga proširenja</string>\n    <string name=\"label_anime_extension_repos\">Repozitoriji Anime proširenja</string>\n    <string name=\"onboarding_storage_action_create_folder\">Stvori standardnu mapu za Aniyomi</string>\n    <string name=\"download_speed_limit\">Ograničenje brzine preuzimanja</string>\n    <string name=\"download_speed_limit_hint\">Postavi na 0 za deaktiviranje ograničenja brzine.</string>\n    <string name=\"pref_behavior_episode\">Ponašanje epizoda</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Označi duplikat gledane epizode kao gledanu</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Nakon gledanja epizode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Nakon dohvaćanja nove epizode</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"action_add_repo_message\">Dodaj dodatne repozitorije u %s. To bi trebao biti URL koji završava s „index.min.json”.</string>\n    <string name=\"download_ahead_info\">Radi samo ako je trenutačno i sljedeće poglavlje/epizoda već preuzeto.</string>\n    <string name=\"non_library_settings\">Svi pročitani/gledani unosi</string>\n    <string name=\"action_sort_last_manga_update\">Zadnje aktualiziranje mange</string>\n    <string name=\"action_show_manga\">Prikaži manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Gumb za nastavljanje gledanja/čitanja</string>\n    <string name=\"pref_update_only_completely_read\">Preskoči unose s nepogledanim epizodama/nepročitanim poglavljima</string>\n    <string name=\"pref_category_delete_chapters\">Izbriši poglavlja/epizode</string>\n    <string name=\"pref_remove_after_marked_as_read\">Nakon ručnog označavanja kao pročitano/pogledano</string>\n    <string name=\"pref_remove_after_read\">Automatski izbriši nakon čitanja/gledanja</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Dozvoli brisanje zabilježenih poglavlja/epizoda</string>\n    <string name=\"pref_auto_update_manga_sync\">Aktualiziraj napredak nakon čitanja/gledanja</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aktualiziraj napredak kada je manga označen kao pročitan/pogledan</string>\n    <string name=\"pref_clear_chapter_cache\">Izbriši predmemoriju poglavlja i epizoda</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Izbriši predmemoriju poglavlja/epizoda prilikom otvaranja aplikacije</string>\n    <string name=\"clear_database_confirmation\">Sigurno? Pročitane epizode i poglavlja i napredak unosa koji nisu u biblioteci će se izgubiti</string>\n    <string name=\"action_display_unseen_badge\">Negledane epizode</string>\n    <string name=\"action_stop\">Zaustavi</string>\n    <string name=\"action_continue\">Nastavi</string>\n    <string name=\"pref_behavior\">Ponašanje poglavlja</string>\n    <string name=\"pref_incognito_mode_summary\">Pauzira tvoju povijesti</string>\n    <string name=\"manga_from_library\">Manga iz biblioteke</string>\n    <string name=\"also_set_chapter_settings_for_library\">Također primijeni na sve mange u mojoj biblioteci</string>\n    <string name=\"dialog_with_checkbox_reset\">Obnovi sva poglavlja za ovaj manga</string>\n    <string name=\"download_insufficient_space\">Neuspjelo preuzimanje zbog nedovoljne memorije</string>\n    <string name=\"download_queue_size_warning\">Upozorenje: velika skupna preuzimanja mogu dovesti do usporavanja izvora i/ili blokiranja Aniyomia. Dodirni za daljnje informacije.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Prisili aplikaciju da ponovo provjeri preuzeta poglavlja i epizode</string>\n    <string name=\"label_player\">Player</string>\n    <string name=\"pref_player_settings_summary\">Interni player, geste, dekoderi, titlovi</string>\n    <string name=\"pref_hosters\">Pružatelji hosting usluge</string>\n    <string name=\"pref_hosters_show_failure\">Prikaži neuspjele hosting usluge</string>\n    <string name=\"pref_hosters_show_empty\">Prikaži prazne hosting usluge</string>\n    <string name=\"pref_category_intro_skip\">Preskakanje uvoda</string>\n    <string name=\"pref_enable_intro_skip\">Aktiviraj preskakanje uvoda</string>\n    <string name=\"pref_disable_aniskip_chapter\">Deaktiviraj AniSkip ako video već sadrži poglavlja</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Neispravan kod: „%s”</string>\n    <string name=\"pref_player_editor\">Uređivač skripta</string>\n    <string name=\"pref_player_editor_summary\">Uredi i stvaraj nova skripta i opcija skripta</string>\n    <string name=\"pref_player_editor_script\">Skripta</string>\n    <string name=\"pref_player_editor_script_opts\">Opcije skripta</string>\n    <string name=\"pref_player_no_items\">Direktorij ne sadrži stavke. Dodirni gumb s plusom za dodavanje nove datoteke.</string>\n    <string name=\"editor_unsaved_progress\">Imaš nespremljene promjene. Želiš li i dalje ići natrag?</string>\n    <string name=\"editor_save_error\">Nije moguće spremiti datoteku</string>\n    <string name=\"editor_save_success\">Datoteka je spremljena</string>\n    <string name=\"editor_action_rename\">Preimenuj datoteku</string>\n    <string name=\"editor_action_delete\">Izbriši datoteku</string>\n    <string name=\"editor_delete_file\">Izbriši datoteku</string>\n    <string name=\"editor_file_already_exists\">Datoteka već postoji</string>\n    <string name=\"editor_invalid_filename\">Neispravno ime datoteke</string>\n    <string name=\"editor_create_file\">Stvori datoteku</string>\n    <string name=\"editor_edit_file\">Uredi ime datoteke</string>\n    <string name=\"editor_filename\">Ime datoteke</string>\n    <string name=\"editor_create_error\">Nije moguće stvoriti datoteku</string>\n    <string name=\"editor_rename_error\">Nije moguće preimenovati datoteku</string>\n    <string name=\"editor_delete_error\">Nije moguće izbrisati datoteku</string>\n    <string name=\"editor_delete_file_confirmation\">Želiš li izbrisati datoteku „%s”?</string>\n    <string name=\"pref_mpv_user_files\">Koristi korisničke MPV datoteke</string>\n    <string name=\"pref_mpv_user_files_summary\">Koristi datoteke u mpv-config mapi</string>\n    <string name=\"player_skip_action\">Preskoči %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s preskočen</string>\n    <string name=\"player_chapter_type_recap\">Sažetak</string>\n    <string name=\"no_available_videos\">Nema dostupnih videa</string>\n    <string name=\"no_hosters\">Popis usluga hostinga je prazan</string>\n    <string name=\"player_chapter_type_opening\">Uvod</string>\n    <string name=\"player_chapter_type_ending\">Kraj</string>\n    <string name=\"player_chapter_type_mixedop\">Miješani uvod</string>\n    <string name=\"no_episode_loaded\">Nijedna epizoda nije učitana</string>\n    <string name=\"player_sheets_track_delay\">Kašnjenje</string>\n    <string name=\"player_sheets_track_palette\">Paleta</string>\n    <string name=\"player_hoster_tap_to_load\">Dodirni za učitavanje videa</string>\n    <string name=\"player_hoster_failed\">Neuspjelo učitavanje videa</string>\n    <string name=\"player_sheets_qualities_title\">Kvalitete</string>\n    <string name=\"player_sheets_chapters_title\">Poglavlja</string>\n    <string name=\"type\">Vrsta</string>\n    <string name=\"select_hoster_from_empty_list\">Usluga hostinga odabrana iz praznog popisa</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/hu/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Kategóriák, globális frissítés, fejezet csúsztatás</string>\n    <string name=\"pref_library_update_show_tab_badge\">Az olvasatlanok számának megjelnítése a Frissítések ikonon</string>\n    <string name=\"manga_categories\">Kategóriák</string>\n    <string name=\"action_display_local_badge_manga\">Helyi manga</string>\n    <string name=\"default_manga_category\">Alapértelmezett kategória</string>\n    <string name=\"pref_manga_library_update_categories_details\">Mangák a tiltott kategóriákban nem lesznek frissítve, még akkor se, ha a kedvelt kategóriákban is vannak.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Tiltott kategóriák</string>\n    <string name=\"pref_clear_manga_database\">Adatbázis törlése</string>\n    <string name=\"pref_clear_manga_database_summary\">Nem könyvtári elemek előzményeinek törlése</string>\n    <string name=\"snack_add_to_manga_library\">Manga könyvtárhoz adása?</string>\n    <string name=\"download_error\">Hiba</string>\n    <string name=\"download_paused\">Szünetel</string>\n    <string name=\"download_notifier_download_paused_chapters\">Letöltés szüneteltetve</string>\n    <string name=\"channel_new_chapters_episodes\">Fejezetfrissítések</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/in/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"other\">Berikut %d episode yang belum dilihat</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"other\">%1$s episode</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"other\">%d Episode selanjutnya</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"other\">Untuk judul %d</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"other\">episode baru %1$d</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"other\">%d detik</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"other\">Episode %1$s dan %2$d lainnya</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/in/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Tekan kembali sekali lagi untuk keluar</string>\n    <string name=\"action_filter_started\">Memulai</string>\n    <string name=\"action_sort_airing_time\">Waktu tayang</string>\n    <string name=\"action_reorganize_by\">Atur ulang</string>\n    <string name=\"relative_time_now\">Sekarang</string>\n    <string name=\"pref_library_summary\">Kategori, pembaruan global, geser chapter</string>\n    <string name=\"pref_library_update_show_tab_badge\">Tampilkan jumlah yang belum dilihat/dibaca pada ikon Pembaruan</string>\n    <string name=\"label_player_settings\">Pengaturan pemutar</string>\n    <string name=\"action_search_player_settings\">Cari pengaturan pemutar</string>\n    <string name=\"pref_player_internal\">Pemutar internal</string>\n    <string name=\"pref_player_internal_summary\">Kemajuan, kontrol, orientasi</string>\n    <string name=\"pref_progress_mark_as_seen\">kapan menandai episode telah dilihat</string>\n    <string name=\"pref_preserve_watching_position\">Posisi menonton episode terlihat</string>\n    <string name=\"pref_category_player_orientation\">Orientasi/arah</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Lanskap terbalik</string>\n    <string name=\"rotation_sensor_portrait\">Sensor potret</string>\n    <string name=\"rotation_sensor_landscape\">Sensor pemandangan</string>\n    <string name=\"pref_category_controls\">Kontrol</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Izinkan gerakan di panel</string>\n    <string name=\"pref_controls_show_loading\">Tampilkan lingkaran memuat</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Tampilkan indikator bab saat ini</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Hanya tampilkan jika video mempunyai bab</string>\n    <string name=\"pref_controls_display_volume_percentage\">Tampilkan volume sebagai presentase</string>\n    <string name=\"pref_remember_brightness\">Ingat dan beralih ke kecerahan terakhir yang digunakan</string>\n    <string name=\"pref_remember_volume\">Ingat dan beralih ke volume terakhir yang digunakan</string>\n    <string name=\"pref_player_fullscreen\">tampilkan konten di tampilan pemetikan</string>\n    <string name=\"pref_player_hide_controls\">Hilangkan kontrol saat membuka pemutaran</string>\n    <string name=\"pref_show_system_bar\">Tampilkan bilah status sistem dengan kontrol</string>\n    <string name=\"pref_reduce_motion\">Kurangi animasi pemain</string>\n    <string name=\"pref_player_time_to_disappear\">Sembunyikan kontrol waktu pemain</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$sms</string>\n    <string name=\"pref_panel_opacity\">Opasitas panel</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Aktifkan otomatis skip</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Aktifkan tampilan Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Tombol waktu habis</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 detik</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 detik</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 detik</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 detik</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 detik</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 detik</string>\n    <string name=\"pref_category_player_aniskip_info\">Agar AniSkip berfungsi, anime harus disinkronisasi menggunakan MAL atau Anilist</string>\n    <string name=\"pref_enable_aniskip\">Aktifkan AniSkip</string>\n    <string name=\"pref_category_pip\">Picture-in-Picture (PiP)</string>\n    <string name=\"pref_enable_pip\">Aktifkan penggunaan mode PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Tampilkan episode timbul jika pergantian episode di mode PiP</string>\n    <string name=\"pref_pip_on_exit\">Otomatis beralih ke mode PiP jika keluar pemutaran</string>\n    <string name=\"pref_pip_replace_with_previous\">Mengganti opsi Lewati 10 detik dengan Episode sebelumnya</string>\n    <string name=\"pref_category_external_player\">pemutaran eksternal</string>\n    <string name=\"pref_always_use_external_player\">Selalu gunakan pemutaran eksternal</string>\n    <string name=\"pref_external_player_preference\">Pemilihan pemutaran eksternal</string>\n    <string name=\"pref_player_gestures\">Gestur</string>\n    <string name=\"pref_player_gestures_summary\">Mencari, ketuk dua kali, kontrol media</string>\n    <string name=\"pref_category_player_sliders\">Penggeser</string>\n    <string name=\"enable_volume_brightness_gestures\">Ubah volume dan gestur kecerahan</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Tukar penggeser volume dan kecerahan</string>\n    <string name=\"pref_category_player_seeking\">Pencarian</string>\n    <string name=\"enable_horizontal_seek_gesture\">ubah gestur gerakan horisontal</string>\n    <string name=\"pref_show_seekbar\">Tampilkan bar pencarian ketika pencari</string>\n    <string name=\"pref_default_intro_length\">standar lewati intro</string>\n    <string name=\"pref_intro_length\">lewati intro</string>\n    <string name=\"pref_skip_length\">tekan dua kali untuk skip</string>\n    <string name=\"pref_skip_disable\">batal skip</string>\n    <string name=\"pref_player_smooth_seek\">aktifkan pencarian akurat</string>\n    <string name=\"pref_player_smooth_seek_summary\">Jika diaktifkan, pencarian tidak fokus pada keyframe, pencarian akan lambat tapi akurat</string>\n    <string name=\"pref_category_double_tap\">Ketuk dua kali</string>\n    <string name=\"pref_left_double_tap\">Ketuk dua kali (kiri)</string>\n    <string name=\"pref_center_double_tap\">Ketuk dua kali (tengah)</string>\n    <string name=\"pref_right_double_tap\">Ketuk dua kali (kanan)</string>\n    <string name=\"pref_double_tap_info\">Bila gerakan ketuk diatur ke Kustom, gerakan tersebut dapat dikaitkan melalui input.conf. Kode kuncinya adalah 0x10001 untuk kiri, 0x10002 untuk tengah, dan 0x10003 untuk kanan.</string>\n    <string name=\"single_action_none\">Tidak ada</string>\n    <string name=\"single_action_seek\">Mencari</string>\n    <string name=\"single_action_playpause\">Putar/Jeda</string>\n    <string name=\"single_action_switch\">Ganti episode</string>\n    <string name=\"single_action_custom\">Kustom</string>\n    <string name=\"pref_category_media_controls\">Kontrol media</string>\n    <string name=\"pref_media_previous\">Sebelumnya</string>\n    <string name=\"pref_media_playpause\">Putar/Jeda</string>\n    <string name=\"pref_media_next\">Selanjutnya</string>\n    <string name=\"pref_media_info\">Bila kontrol media diatur ke Kustom, kontrol tersebut dapat dihubungkan melalui input.conf. Kode kuncinya adalah 0x10004 untuk sebelumnya, 0x10005 untuk putar/jeda, dan 0x10006 untuk berikutnya.</string>\n    <string name=\"pref_player_decoder\">Dekoder</string>\n    <string name=\"pref_player_decoder_summary\">Dekode perangkat keras, format piksel, debanding</string>\n    <string name=\"pref_try_hw\">Coba dekoding hardware</string>\n    <string name=\"pref_gpu_next_title\">Aktifkan gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Backend rendering video baru</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Tidak ada</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Gunakan format piksel YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Mungkin memperbaiki layar hitam pada beberapa codec video, juga dapat meningkatkan kinerja dengan mengorbankan kualitas</string>\n    <string name=\"pref_player_subtitle\">Subtitel</string>\n    <string name=\"pref_player_subtitle_summary\">Bahasa pilihan, daftar putih, daftar hitam</string>\n    <string name=\"pref_player_subtitle_lang\">Bahasa pilihan</string>\n    <string name=\"pref_player_subtitle_lang_info\">Bahasa subtitel akan dipilih secara default pada video dengan beberapa subtitel. Kode bahasa dua atau tiga huruf berfungsi. Beberapa nilai dapat dibatasi dengan koma.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Daftar putih</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Daftar putih untuk subtitel. Jika daftar putih ditetapkan, subtitel pertama yang berisi kata yang masuk daftar putih akan digunakan. Beberapa nilai dapat dibatasi oleh koma.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Daftar hitam</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Daftar hitam untuk subtitel. Jika daftar hitam ditetapkan, semua subtitel yang berisi kata yang masuk daftar hitam akan disaring. Beberapa nilai dapat dibatasi dengan koma.</string>\n    <string name=\"pref_player_audio\">Suara</string>\n    <string name=\"pref_player_audio_summary\">Bahasa pilihan, koreksi nada, saluran audio</string>\n    <string name=\"pref_player_audio_lang\">Bahasa pilihan</string>\n    <string name=\"pref_player_audio_lang_info\">Bahasa audio akan dipilih secara default pada video dengan beberapa aliran audio. Kode bahasa dua atau tiga huruf berfungsi. Beberapa nilai dapat dibatasi dengan koma.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Aktifkan koreksi nada audio</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Mencegah audio menjadi nada tinggi pada kecepatan lebih tinggi dan nada rendah pada kecepatan lebih lambat</string>\n    <string name=\"pref_player_audio_channels\">Saluran audio</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Otomatis-mengamankan</string>\n    <string name=\"pref_player_audio_channels_auto\">Otomatis</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Stereo terbalik</string>\n    <string name=\"pref_player_audio_boost_cap\">Batasan penguat volume</string>\n    <string name=\"pref_player_custom_button\">Tombol kustom</string>\n    <string name=\"pref_player_custom_button_summary\">Eksekusi kode lua dengan tombol kustom</string>\n    <string name=\"pref_player_custom_button_header\">Ubah tombol kustom</string>\n    <string name=\"pref_player_custom_button_guide\">Ubah tombol guide</string>\n    <string name=\"pref_player_custom_button_empty\">Kamu tidak memiliki tombol kustom. Tekan tombol plus untuk membuat tombol kustom.</string>\n    <string name=\"pref_player_custom_button_add\">Tambah tombol</string>\n    <string name=\"pref_player_custom_button_edit\">Ubah tombol</string>\n    <string name=\"pref_player_custom_button_title\">Judul</string>\n    <string name=\"pref_player_custom_button_error_exists\">Tombol sudah ada!</string>\n    <string name=\"pref_player_custom_button_content\">Kode lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Kode lua (tekan tahan)</string>\n    <string name=\"pref_player_custom_button_optional\">(opsional)</string>\n    <string name=\"pref_player_custom_button_delete\">Hapus tombol</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Apa kamu ingin menghapus tombol %s?</string>\n    <string name=\"pref_player_custom_button_startup\">Saat memulai</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Lanjutan</string>\n    <string name=\"pref_player_advanced_summary\">Berkas pengguna, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">ubah konfigurasi MPV file untuk lebih lanjut di pengaturan pemutaran</string>\n    <string name=\"pref_reset_mpv_conf\">Setel ulang file konfigurasi MPV</string>\n    <string name=\"pref_mpv_input\">Edit file input MPV untuk konfigurasi pemetaan keyboard</string>\n    <string name=\"video_fit_screen\">Sesuaikan dengan layar</string>\n    <string name=\"video_crop_screen\">Dipotong dengan layar</string>\n    <string name=\"video_stretch_screen\">Perluas ke layar</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Pengatur waktu tidur berakhir</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Nilai terlalu besar</string>\n    <string name=\"numeric_chooser_value_too_small\">Nilai terlalu kecil</string>\n    <string name=\"enable_auto_play\">Otomatis memutar menyala</string>\n    <string name=\"disable_auto_play\">Otomatis memutar mati</string>\n    <string name=\"player_aniskip_dontskip\">Jangan di skip</string>\n    <string name=\"player_aniskip_dontskip_toast\">Melewatkan %s dalam %d detik</string>\n    <string name=\"player_aniskip_skip\">%s lewati</string>\n    <string name=\"no_next_episode\">episode selanjutnya tidak ditemukan!</string>\n    <string name=\"no_prev_episode\">Episode sebelumnya tidak ditemukan!</string>\n    <string name=\"player_sheets_delay_set_as_default\">Tandai sebagai default</string>\n    <string name=\"player_sheets_audio_delay_title\">Penundaan audio</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Suara terdengar</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Suara terpantau</string>\n    <string name=\"player_sheets_sub_delay_title\">Penundaan subtitle</string>\n    <string name=\"player_sheets_sub_delay_speed\">Kecepatan</string>\n    <string name=\"player_sheets_sub_delay_delay\">Penundaan</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Utama</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Kedua</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Keduanya</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Suara terdengar</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Teks terlihat</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Suara terdengar</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Suara terpantau</string>\n    <string name=\"player_sheets_sub_colors_title\">Warna</string>\n    <string name=\"player_sheets_subtitles_color_text\">Teks</string>\n    <string name=\"player_sheets_subtitles_color_border\">Border</string>\n    <string name=\"player_sheets_subtitles_color_background\">Latar</string>\n    <string name=\"player_sheets_sub_color_red\">Merah</string>\n    <string name=\"player_sheets_sub_color_green\">Hijau</string>\n    <string name=\"player_sheets_sub_color_blue\">Biru</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alpha</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Pengaturan subtitles</string>\n    <string name=\"player_sheets_sub_typography_title\">Tipografi</string>\n    <string name=\"player_sheets_sub_typography_font\">Jenis huruf</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Ukuran huruf</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Jenis border</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Ukuran border</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Offset bayangan</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Garis besar dan bayangan</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Kotak buram</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Latar kotak</string>\n    <string name=\"player_sheets_sub_misc_title\">Lain-lain</string>\n    <string name=\"player_sheets_sub_override_ass\">Timpa ASS/SAA subtitles</string>\n    <string name=\"player_sheets_sub_scale\">Skala</string>\n    <string name=\"player_sheets_sub_position\">Posisi</string>\n    <string name=\"player_sheets_filters_title\">Filters</string>\n    <string name=\"player_sheets_filters_brightness\">Pencahayaan</string>\n    <string name=\"player_sheets_filters_contrast\">Kontras</string>\n    <string name=\"player_sheets_filters_gamma\">Gamma</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturasi</string>\n    <string name=\"player_sheets_filters_hue\">Hue</string>\n    <string name=\"player_sheets_filters_warning\">Beberapa filter kemungkinan tidak bekerja pada driver video saat ini</string>\n    <string name=\"player_sheets_add_ext_audio\">Tambahkan trek audio eksternal</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Lebih lanjut</string>\n    <string name=\"player_hwdec_mode\">Pengaturan standar mode decoding hardware</string>\n    <string name=\"pref_audio_channels\">Saluran audio</string>\n    <string name=\"player_sheets_stats_page_title\">Halaman stastistik default</string>\n    <string name=\"player_sheets_tracks_off\">Mati</string>\n    <string name=\"player_sheets_stats_page_chip\">Halaman %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Tombol kustom</string>\n    <string name=\"player_seek_n_seconds\">%d detik</string>\n    <string name=\"timer_title\">Pengatur Waktu Tidur</string>\n    <string name=\"timer_remaining\">%s tersisa</string>\n    <string name=\"timer_picker_enter_timer\">Masukan durasi</string>\n    <string name=\"timer_picker_pick_time\">Pilih durasi</string>\n    <string name=\"timer_cancel_timer\">Batalkan pengatur waktu saat ini</string>\n    <string name=\"player_sheets_speed_slider_label\">Kecepatan</string>\n    <string name=\"player_sheets_speed_make_default\">Buat kecepatan default</string>\n    <string name=\"pref_audio_pitch_correction_title\">Aktifkan koresi nada audio</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Hindari audio menjadi terlalu bernada tinggi pada kecepatan cepat dan bernada rendah pada kecepatan lambat</string>\n    <string name=\"player_sheets_add_ext_sub\">Tambahkan subtitles eksternal</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Subtitles kedua tidak akan mempunyai penataan ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">Tampilkan subtitel di tangkap layar</string>\n    <string name=\"pref_general_summary\">Bahasa aplikasi, Notifikasi</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Safir</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_library_rows\">Daftar ukuran</string>\n    <string name=\"pref_preserve_reading_position\">Pertahankan posisi membaca pada bab yang dibaca</string>\n    <string name=\"pref_download_slots\">Unduhan maksimal</string>\n    <string name=\"custom_button_settings\">Tombol kustom</string>\n    <string name=\"local_source_badge\">Lokal</string>\n    <string name=\"anime_interval_expected_update\">Episode baru diperkirakan akan dirilis sekitar %1$s, diperiksa setiap %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Anime ini sudah selesai, atau belum ada tanggal rilis yang diprediksi.</string>\n    <string name=\"confirm_tracker_update_anime\">Perbarui pelacak ke episode %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Pelacak diperbarui ke bab %d</string>\n    <string name=\"trackers_updated_summary_anime\">Pelacak diperbarui ke episode %d</string>\n    <string name=\"download_notifier_download_finish\">Pengunduhan selesai</string>\n    <string name=\"action_hide\">Bersembunyi</string>\n    <string name=\"label_all\">Seluruh</string>\n    <string name=\"label_category\">Kategori</string>\n    <string name=\"manga_categories\">Kategori Manga</string>\n    <string name=\"general_categories\">Kategori</string>\n    <string name=\"anime_categories\">Kategori Anime</string>\n    <string name=\"entries\">Entri pustaka</string>\n    <string name=\"chapters_episodes\">chapter dan episode</string>\n    <string name=\"episodes\">Episode</string>\n    <string name=\"backup_settings_warning\">Peringatan: Mencadangkan pengaturan akan menyimpan kata sandi anda juga, jangan bagikan file cadangan ini!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Pembaruan Anime</string>\n    <string name=\"label_manga_sources\">Sumber Manga</string>\n    <string name=\"label_anime_sources\">Sumber Anime</string>\n    <string name=\"label_watched_duration\">Durasi telah ditonton</string>\n    <string name=\"label_watched_episodes\">Ditonton</string>\n    <string name=\"pref_start_screen\">Start Screen</string>\n    <string name=\"pref_library_manga_columns\">Manga perbaris</string>\n    <string name=\"pref_library_anime_columns\">Anime perbaris</string>\n    <string name=\"pref_bottom_nav_no_history\">Pindahkan Riwayat ke tab Lainnya</string>\n    <string name=\"pref_bottom_nav_no_updates\">Pindahkan Update ke tab Lainnya</string>\n    <string name=\"pref_bottom_nav_no_manga\">Pindahkan Manga ke tab Lainnya</string>\n    <string name=\"pref_bottom_nav_no_browse\">Pindahkan Telusuri ke tab Lainnya</string>\n    <string name=\"action_filter_unseen\">Belum dilihat</string>\n    <string name=\"action_global_manga_search\">Pencarian Manga Global</string>\n    <string name=\"action_global_anime_search\">Pencarian Anime Global</string>\n    <string name=\"action_sort_total_episodes\">total episode</string>\n    <string name=\"action_sort_last_seen\">Terakhir dilihat</string>\n    <string name=\"action_sort_last_checked\">terakhir di cek</string>\n    <string name=\"action_sort_latest_episode\">episode terbaru</string>\n    <string name=\"action_sort_last_anime_update\">Update anime terbaru</string>\n    <string name=\"action_sort_unseen_count\">belum dilihat</string>\n    <string name=\"action_sort_episode_fetch_date\">Tanggal pengambilan episode</string>\n    <string name=\"action_mark_as_seen\">Tandai sudah ditonton</string>\n    <string name=\"action_mark_as_unseen\">tandai belum ditonton</string>\n    <string name=\"action_mark_previous_as_seen\">Tandai sebelumnya telah dilihat</string>\n    <string name=\"action_play_internally\">Mulai secara internal</string>\n    <string name=\"action_play_externally\">Mulai secara eksternal</string>\n    <string name=\"action_download_unread\">Unduh chapter yang tidak terbaca</string>\n    <string name=\"action_download_unseen\">Unduh episode yang belum dilihat</string>\n    <string name=\"action_bookmark_episode\">tandai episode</string>\n    <string name=\"action_remove_bookmark_episode\">hapus tanda di episode</string>\n    <string name=\"action_edit_anime_categories\">Ubah kategori anime</string>\n    <string name=\"action_edit_manga_categories\">ubah kategori manga</string>\n    <string name=\"action_view_episodes\">Lihat Episode</string>\n    <string name=\"action_previous_episode\">Episode sebelumnya</string>\n    <string name=\"action_play\">Putar</string>\n    <string name=\"action_next_episode\">Episode berikutnya</string>\n    <string name=\"action_screen_fit\">Mode ukuran layar</string>\n    <string name=\"action_show_anime\">Tampilkan anime</string>\n    <string name=\"action_display_download_badge_anime\">Episode diunduh</string>\n    <string name=\"action_display_local_badge_manga\">Lokal manga</string>\n    <string name=\"action_display_local_badge_anime\">Anime lokal</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Hanya cari sumber manga tersemat di pencarian global</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Hanya cari sumber anime tersemat di pencarian global</string>\n    <string name=\"pref_hide_in_manga_library_items\">Sembunyikan entri manga yang sudah ada di pustaka</string>\n    <string name=\"pref_hide_in_anime_library_items\">Sembunyikan entri anime yang sudah ada di pustaka</string>\n    <string name=\"action_order_by_episode_number\">Dengan jumlah episode</string>\n    <string name=\"action_start_download_externally\">Gunakan pengunduhan eksternal</string>\n    <string name=\"action_start_download_internally\">Gunakan pengunduhan internal</string>\n    <string name=\"pref_bottom_nav_style\">Gaya tombol navigasi</string>\n    <string name=\"pref_default_home_tab_library\">Atur layar awal ke Tab Manga</string>\n    <string name=\"default_manga_category\">Kategori bawaan</string>\n    <string name=\"default_anime_category\">Kategori anime standar default</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga dalam kategori yang dikecualikan tidak akan diperbarui meskipun masuk dalam kategori yang disertakan.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime dalam kategori yang dikecualikan tidak akan diperbarui meskipun masuk dalam kategori yang disertakan.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Ektension ini bukan dari daftar ekstension official Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Ekstensi ini bukan dari daftar ekstensi resmi Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Kategori yang dikecualikan</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Kategori anime yang dikecualikan</string>\n    <string name=\"pref_category_external_downloader\">Pengunduhan eksternal</string>\n    <string name=\"pref_use_external_downloader\">Selalu gunakan pengunduh eksternal untuk anime</string>\n    <string name=\"pref_external_downloader_selection\">Pemilihan app pengunduhan yang digunakan</string>\n    <string name=\"pref_download_new_episodes\">Unduh episode terbaru</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Lewati pengunduhan episode duplikat yang sudah dilihat</string>\n    <string name=\"auto_download_while_watching\">Otomatis mengunduh saat sedang menonton</string>\n    <string name=\"download_ahead_info_anime\">Hanya bekerja pada entri di perpustakaan dan jika episode saat ini ditambah yang berikutnya sudah diunduh</string>\n    <string name=\"pref_track_on_add_library\">Buka menu sinkronisasi saat menambahkan ke pustaka</string>\n    <string name=\"pref_show_next_episode_airing_time\">Tampilkan waktu tayang episode berikutnya</string>\n    <string name=\"pref_backup_flags_summary\">Informasi yang akan dimasukkan ke dalam file cadangan</string>\n    <string name=\"pref_anime_storage_usage\">Penggunaan penyimpanan Anime</string>\n    <string name=\"pref_manga_storage_usage\">Penggunaan Penyimpanan Manga</string>\n    <string name=\"used_cache_both\">Digunakan oleh anime: %1$s, digunakan oleh manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Hapus database Manga</string>\n    <string name=\"pref_clear_anime_database\">Bersihkan database Anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Hapus riwayat manga yang tidak disimpan di pustaka Anda</string>\n    <string name=\"pref_clear_anime_database_summary\">Hapus riwayat anime yang tidak disimpan di pustaka Anda</string>\n    <string name=\"anime_from_library\">Anime dari pustaka</string>\n    <string name=\"downloaded_episodes\">Unduh episode</string>\n    <string name=\"local_manga_source\">Sumber lokal manga</string>\n    <string name=\"local_anime_source\">Sumber lokal anime</string>\n    <string name=\"episode_not_found\">episode tidak ditemukan</string>\n    <string name=\"local_invalid_episode_format\">format episode tidak ditemukan</string>\n    <string name=\"unknown_studio\">Studio tidak diketahui</string>\n    <string name=\"delete_confirmation\">Apakah kau yakin ingin menghapus \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Hapus episode yang sudah diunduh?</string>\n    <string name=\"snack_add_to_manga_library\">Tambahkan manga ke pustaka?</string>\n    <string name=\"snack_add_to_anime_library\">Tambahkan anime ke pustaka?</string>\n    <string name=\"display_mode_episode\">Episode %1$s</string>\n    <string name=\"episode_downloading_progress\">Sedang mengunduh (%d%%)</string>\n    <string name=\"download_error\">Kesalahan</string>\n    <string name=\"download_paused\">Jeda</string>\n    <string name=\"show_episode_number\">Nomor episode</string>\n    <string name=\"sort_by_episode_number\">Berdasarkan jumlah episode</string>\n    <string name=\"download_unseen\">Belum dilihat</string>\n    <string name=\"confirm_delete_episodes\">Apa kamu yakin akan menghapus episode yang dipilih?</string>\n    <string name=\"also_set_episode_settings_for_library\">Terapkan juga ke semua anime di pustaka saya</string>\n    <string name=\"no_episodes_error\">Tidak ada episode yang ditemukan</string>\n    <string name=\"watching\">Menonton</string>\n    <string name=\"currently_reading\">Sedang membaca</string>\n    <string name=\"currently_watching\">Sedang menonton</string>\n    <string name=\"plan_to_watch\">Rencana untuk menonton</string>\n    <string name=\"not_interesting\">Tidak menarik</string>\n    <string name=\"want_to_read\">Ingin membaca</string>\n    <string name=\"want_to_watch\">Ingin menonton</string>\n    <string name=\"repeating_anime\">Menonton ulang</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Aksi ini akan menghapus tanggal menonton episode ini. Anda yakin?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Reset semua episode anime ini</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Proses: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Proses: %1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Video tidak ditemukan</string>\n    <string name=\"notification_new_episodes\">Ada episode baru nihh</string>\n    <string name=\"information_no_recent_anime\">Tidak ada yang ditonton baru-baru ini</string>\n    <string name=\"episode_settings_updated\">Ubah pengaturan standar episode</string>\n    <string name=\"download_notifier_download_paused_chapters\">Pengunduhan dijeda</string>\n    <string name=\"download_notifier_download_paused_episodes\">Unduhan episode dijeda</string>\n    <string name=\"channel_new_chapters_episodes\">Pembaruan chapter/episode</string>\n    <string name=\"label_storage\">Penyimpanan</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Ubah panjang intro</string>\n    <string name=\"notification_episodes_single\">Episode %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episode %1$s dan %2$d lainnya</string>\n    <string name=\"notification_episodes_multiple\">Episode %1$s</string>\n    <string name=\"episode_settings\">Pengaturan episode</string>\n    <string name=\"pref_backup_flags\">Opsi cadangan</string>\n    <string name=\"label_manga_extensions\">Manga Ekstension</string>\n    <string name=\"label_anime_extensions\">Ekstensi Anime</string>\n    <string name=\"label_migration_manga\">Migrasi Manga</string>\n    <string name=\"label_migration_anime\">Migrasi Anime</string>\n    <string name=\"settings\">Pengaturan</string>\n    <string name=\"copied_video_link_to_clipboard\">Tautan kualitas video yang disalin ke papan klip</string>\n    <string name=\"choose_video_quality\">Pilih kualitas video:</string>\n    <string name=\"extension_settings\">Pengaturan ekstensi</string>\n    <string name=\"theme_cottoncandy\">Permen Kapas</string>\n    <string name=\"theme_mocha\">Moka</string>\n    <string name=\"pref_episode_swipe_end\">Geser ke Kanan</string>\n    <string name=\"pref_episode_swipe_start\">Episode di gesek ke kiri</string>\n    <string name=\"pref_category_hide_hidden\">Sembunyikan kategori tersembunyi dari layar kategori dan penyimpanan</string>\n    <string name=\"pref_update_anime_release_grace_period\">Masa waktu rilis anime yang diharapkan</string>\n    <string name=\"data_saver_exclude\">Mengecualikan dari penghemat data</string>\n    <string name=\"data_saver_stop_exclude\">Menghentikan pengecualian dari penghemat data</string>\n    <string name=\"data_saver\">Penghemat Data</string>\n    <string name=\"data_saver_summary\">Kompres gambar sebelum mengunduh atau memuat di pembaca</string>\n    <string name=\"data_saver_downloader\">Gunakan penghemat data pada pengunduh</string>\n    <string name=\"data_saver_ignore_jpeg\">Abaikan Gambar Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Abaikan Animasi Gif</string>\n    <string name=\"data_saver_image_quality\">Kualitas Gambar</string>\n    <string name=\"data_saver_image_quality_summary\">Nilai yang lebih tinggi berarti bahwa persentase kualitas gambar yang lebih tinggi disimpan, tetapi ini juga berarti ukuran file lebih besar, 80 persen adalah median yang baik antara ukuran file dan kualitas gambar</string>\n    <string name=\"data_saver_image_format\">Mengompres ke Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Ukuran file Jpeg jauh lebih kecil daripada Webp (artinya lebih banyak data yang disimpan), tetapi itu membuat gambar kehilangan lebih banyak kualitas.\n\\nSaat ini kompres ke Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Ukuran file Jpeg jauh lebih kecil daripada Webp (artinya lebih banyak data yang disimpan), tetapi itu membuat gambar kehilangan lebih banyak kualitas.\n\\nSaat ini kompres ke Webp</string>\n    <string name=\"data_saver_color_bw\">Konversi ke Hitam Putih</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (membutuhkan server Proxy Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Server Proxy Bandwidth Hero</string>\n    <string name=\"data_saver_server_summary\">Letakkan url server Bandwidth Hero Proxy di sini</string>\n    <string name=\"download_slots_info\">Hanya akan mengunduh secara bersamaan dari sumber yang dihosting sendiri atau tidak diukur</string>\n    <string name=\"unseen\">Tak terlihat</string>\n    <string name=\"label_manga_extension_repos\">Repo ekstensi manga</string>\n    <string name=\"label_anime_extension_repos\">Repo ekstensi anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Buat folder Aniyomi bawaan</string>\n    <string name=\"download_speed_limit\">Batas kecepatan unduh</string>\n    <string name=\"download_speed_limit_hint\">Setel ke 0 untuk menonaktifkan batas kecepatan.</string>\n    <string name=\"action_display_unseen_badge\">Episode yang tidak terlihat</string>\n    <string name=\"action_stop\">Berhenti</string>\n    <string name=\"action_continue\">Melanjutkan</string>\n    <string name=\"download_ahead_info\">Hanya berfungsi jika bab/episode saat ini + episode berikutnya sudah diunduh.</string>\n    <string name=\"non_library_settings\">Semua entri telah dibaca/ditonton</string>\n    <string name=\"action_add_repo_message\">Tambahkan repo ke %s. Ini harus berupa URL yang diakhiri dengan \\\"index.min.json\\\".</string>\n    <string name=\"action_sort_last_manga_update\">Pembaruan manga terakhir</string>\n    <string name=\"pref_behavior\">Perilaku bab</string>\n    <string name=\"manga\">Komik</string>\n    <string name=\"action_show_manga\">Tampilkan manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Tombol Lanjutkan untuk menonton/membaca</string>\n    <string name=\"pref_update_only_completely_read\">Lewati entri dengan episode yang belum dilihat/bab yang belum dibaca</string>\n    <string name=\"pref_category_delete_chapters\">Hapus bab/episode</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Paksa aplikasi untuk memeriksa ulang bab dan episode yang diunduh</string>\n    <string name=\"pref_remove_after_marked_as_read\">Setelah ditandai secara manual sebagai telah dibaca/ditonton</string>\n    <string name=\"pref_remove_after_read\">Setelah membaca/menonton otomatis terhapus</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Izinkan penghapusan bab/episode yang ditandai</string>\n    <string name=\"pref_auto_update_manga_sync\">Perbarui kemajuan setelah membaca/menonton</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Perbarui kemajuan ketika ditandai sebagai telah dibaca/ditonton</string>\n    <string name=\"pref_clear_chapter_cache\">Hapus cache bab dan episode</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Hapus cache episode/bab saat peluncuran aplikasi</string>\n    <string name=\"clear_database_confirmation\">Apa kamu yakin? Episode dan bab yang telah selesai serta kemajuan entri non-perpustakaan akan hilang</string>\n    <string name=\"pref_incognito_mode_summary\">Menjeda riwayat Anda</string>\n    <string name=\"manga_from_library\">Komik dari perpustakaan</string>\n    <string name=\"also_set_chapter_settings_for_library\">Juga berlaku untuk semua manga di perpustakaan saya</string>\n    <string name=\"dialog_with_checkbox_reset\">Reset semua bab untuk komik ini</string>\n    <string name=\"download_insufficient_space\">Tidak dapat mengunduh dengan ruang penyimpanan yang hampir habis</string>\n    <string name=\"download_queue_size_warning\">Peringatan: Unduhan massal dalam jumlah besar dapat menyebabkan sumber menjadi lebih lambat dan/atau memblokir Aniyomi. Ketuk untuk mengetahui lebih lanjut.</string>\n    <string name=\"pref_player_settings_summary\">bawahan player, gestur, dekoder, teks terjemahan</string>\n    <string name=\"pref_hosters_show_failure\">Tampilan host gagal</string>\n    <string name=\"pref_hosters_show_empty\">Tampilan host kosong</string>\n    <string name=\"pref_category_intro_skip\">Lewati Intro</string>\n    <string name=\"pref_enable_intro_skip\">Aktifkan fitur lewati intro</string>\n    <string name=\"pref_disable_aniskip_chapter\">­Nonaktifkan AniSkip jika video sudah mengandung bab</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Kode tidak valid: “%s”</string>\n    <string name=\"pref_player_editor\">Editor skrip</string>\n    <string name=\"pref_player_editor_summary\">Edit dan buat skrip baru serta opsi skrip</string>\n    <string name=\"pref_player_editor_script_opts\">Opsi skrip</string>\n    <string name=\"pref_player_no_items\">Direktori tidak berisi item apa pun. Ketuk tombol plus untuk menambahkan file baru.</string>\n    <string name=\"editor_unsaved_progress\">Anda memiliki perubahan yang belum disimpan. Apakah Anda tetap ingin kembali?</string>\n    <string name=\"editor_edit_file\">Ubah nama file</string>\n    <string name=\"editor_delete_error\">Tidak dapat menghapus file</string>\n    <string name=\"editor_action_rename\">Ganti nama file</string>\n    <string name=\"editor_save_error\">Tidak dapat menyimpan file</string>\n    <string name=\"pref_player_editor_script\">Skrip</string>\n    <string name=\"editor_save_success\">Berkas telah disimpan</string>\n    <string name=\"editor_action_delete\">Hapus Berkas</string>\n    <string name=\"editor_file_already_exists\">File sudah ada</string>\n    <string name=\"editor_invalid_filename\">Nama file tidak valid</string>\n    <string name=\"editor_create_file\">Buat file</string>\n    <string name=\"editor_filename\">Nama berkas</string>\n    <string name=\"editor_create_error\">Tidak dapat membuat file</string>\n    <string name=\"editor_rename_error\">Tidak dapat mengganti nama file</string>\n    <string name=\"editor_delete_file\">Hapus Berkas</string>\n    <string name=\"editor_delete_file_confirmation\">Apakah Anda ingin menghapus file “%s”?</string>\n    <string name=\"pref_mpv_user_files\">Gunakan berkas MPV pengguna</string>\n    <string name=\"pref_mpv_user_files_summary\">Gunakan berkas-berkas di direktori mpv-config</string>\n    <string name=\"player_skip_action\">Melewati %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s dilewati</string>\n    <string name=\"player_chapter_type_opening\">Pembukaan</string>\n    <string name=\"player_chapter_type_ending\">Akhir</string>\n    <string name=\"player_chapter_type_recap\">Rekap</string>\n    <string name=\"player_chapter_type_mixedop\">Pembukaan campuran</string>\n    <string name=\"no_available_videos\">Tidak ada video yang tersedia</string>\n    <string name=\"no_episode_loaded\">Tidak ada episode yang dimuat</string>\n    <string name=\"select_hoster_from_empty_list\">Hoster dipilih dari daftar kosong</string>\n    <string name=\"no_hosters\">Daftar Hoster kosong</string>\n    <string name=\"player_sheets_track_delay\">Menunda</string>\n    <string name=\"player_sheets_track_palette\">Palet</string>\n    <string name=\"pref_hosters\">Host</string>\n    <string name=\"player_hoster_tap_to_load\">Ketuk untuk memuat video</string>\n    <string name=\"player_hoster_failed\">Gagal memuat video</string>\n    <string name=\"player_sheets_qualities_title\">Kualitas</string>\n    <string name=\"label_player\">Player</string>\n    <string name=\"player_sheets_chapters_title\">Bab</string>\n    <string name=\"type\">Jenis</string>\n    <string name=\"pref_behavior_episode\">Perilaku episode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Tandai episode yang sudah ditonton sebagai sudah ditonton</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Setelah menonton episode</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Setelah mengambil episode baru</string>\n    <string name=\"label_cant_migrate_episode\">Tidak dapat memigrasikan episode ke musim, pilih musim untuk melanjutkan</string>\n    <string name=\"label_cant_migrate_season\">Tidak dapat memigrasikan musim ke episode</string>\n    <string name=\"label_show_seasons\">Tunjukkan musim</string>\n    <string name=\"action_display_show_continue_watching_button\">Lanjutkan menonton tombol</string>\n    <string name=\"action_display_grid_mode\">Mode tampilan kisi</string>\n    <string name=\"display_mode_season\">Musim %1$s</string>\n    <string name=\"show_season_number\">Nomor musim</string>\n    <string name=\"sort_by_season_number\">Dengan nomor musim</string>\n    <string name=\"no_seasons_error\">Tidak ada musim yang ditemukan</string>\n    <string name=\"season_settings_updated\">Pengaturan musim default yang diperbarui</string>\n    <string name=\"season_settings\">Pengaturan musim</string>\n    <string name=\"pref_library_season\">Musim</string>\n    <string name=\"pref_update_seasons_refresh\">Perbarui musim dengan episode tentang penyegaran</string>\n    <string name=\"pref_update_seasons_update\">Perbarui Musim dengan Episode tentang Pembaruan Perpustakaan</string>\n    <string name=\"filler\">Pengisi</string>\n    <string name=\"action_filter_fillermarked\">Fillermarked</string>\n    <string name=\"action_edit_background\">Ubah latar belakang</string>\n    <string name=\"custom_background\">Latar Belakang Kustom</string>\n    <string name=\"background_saved\">Latar belakang disimpan</string>\n    <string name=\"error_saving_background\">Latar Belakang Menghemat Kesalahan</string>\n    <string name=\"error_sharing_background\">Latar Belakang Berbagi Kesalahan</string>\n    <string name=\"set_as_background\">Setel sebagai latar belakang</string>\n    <string name=\"set_as_thumbnail\">Ditetapkan sebagai thumbnail</string>\n    <string name=\"background_updated\">Latar belakang diperbarui</string>\n    <string name=\"thumbnail_updated\">Thumbnail diperbarui</string>\n    <string name=\"notification_background_update_failed\">Gagal memperbarui latar belakang</string>\n    <string name=\"action_fillermark_episode\">Fillermark episode</string>\n    <string name=\"action_remove_fillermark_episode\">Unfillermark episode</string>\n    <string name=\"pref_download_fillermarked_items\">Izinkan pengunduhan episode fillermarked</string>\n    <string name=\"show_episode_previews\">Thumbnail Episode</string>\n    <string name=\"show_episode_summaries\">Episode ringkasan</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/it/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Prossima puntata non vista</item>\n        <item quantity=\"many\">Prossime %d puntate non viste</item>\n        <item quantity=\"other\">Prossime %d puntate non viste</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">1 episodio</item>\n        <item quantity=\"many\">%1$s episodi</item>\n        <item quantity=\"other\">%1$s episodi</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Prossimo episodio</item>\n        <item quantity=\"many\">Prossimi %d episodi</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Per 1 titolo</item>\n        <item quantity=\"many\">Per %d titoli</item>\n        <item quantity=\"other\">Per %d titoli</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 nuovo episodio</item>\n        <item quantity=\"many\">%1$d nuovi episodi</item>\n        <item quantity=\"other\">%1$d nuovi episodi</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d secondo</item>\n        <item quantity=\"many\">%d secondi</item>\n        <item quantity=\"other\">%d secondi</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Episodi %1$s e 1 altro</item>\n        <item quantity=\"many\">Episodi %1$s e altri %2$d</item>\n        <item quantity=\"other\">Episodi %1$s e altri %2$d</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/it/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Premi di nuovo indietro per uscire</string>\n    <string name=\"action_filter_started\">Iniziato</string>\n    <string name=\"action_sort_airing_time\">Orario di messa in onda</string>\n    <string name=\"action_reorganize_by\">Riordina</string>\n    <string name=\"relative_time_now\">Ora</string>\n    <string name=\"pref_library_summary\">Categorie, aggiornamenti globali, azioni di scorrimento capitoli</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostra numero di elementi non letti/visti nell\\'icona degli aggiornamenti</string>\n    <string name=\"label_player_settings\">Impostazioni del Player</string>\n    <string name=\"action_search_player_settings\">Cerca impostazioni del player</string>\n    <string name=\"pref_player_internal\">Player interno</string>\n    <string name=\"pref_player_internal_summary\">Progresso, controlli, orientamento</string>\n    <string name=\"pref_progress_mark_as_seen\">L\\'episodio viene considerato come visto al seguente livello di progressione</string>\n    <string name=\"pref_preserve_watching_position\">Mantieni la posizione di visualizzazione sugli episodi visti</string>\n    <string name=\"pref_category_player_orientation\">Orientamento</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Orizzontale inverso</string>\n    <string name=\"rotation_sensor_portrait\">Sensore portrait</string>\n    <string name=\"rotation_sensor_landscape\">Sensore landscape</string>\n    <string name=\"pref_category_controls\">Controlli</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Consenti gesti nei pannelli</string>\n    <string name=\"pref_controls_show_loading\">Mostra cerchio di caricamento</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Mostra indicatore capitolo corrente</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Appare solo se il video hai capitoli</string>\n    <string name=\"pref_controls_display_volume_percentage\">Visualizza volume come percentuale</string>\n    <string name=\"pref_remember_brightness\">Salva e utilizza l\\'ultimo livello di retroilluminazione impostato</string>\n    <string name=\"pref_remember_volume\">Salva e utilizza l\\'ultimo livello di volume impostato</string>\n    <string name=\"pref_hosters\">Hoster</string>\n    <string name=\"pref_hosters_show_failure\">Visualizza hoster falliti</string>\n    <string name=\"pref_hosters_show_empty\">Visualizza hoster vuoti</string>\n    <string name=\"pref_player_fullscreen\">Mostra contenuti nel display cutout</string>\n    <string name=\"pref_player_hide_controls\">Nascondi i controlli del player quando lo avvii</string>\n    <string name=\"pref_show_system_bar\">Mostra la barra di stato di sistema con i controlli</string>\n    <string name=\"pref_reduce_motion\">Riduci animatore del player</string>\n    <string name=\"pref_player_time_to_disappear\">Tempo di scomparsa dei controlli del player</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Opacità pannello</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Attiva auto skip</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Attiva lo stile Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Pulsante timeout</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 secondi</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 secondi</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 secondi</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 secondi</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 secondi</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 secondi</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip per funzionare richiede che l\\'anime sia tracciato con MAL o Anilist</string>\n    <string name=\"pref_enable_aniskip\">Attiva AniSkip</string>\n    <string name=\"pref_category_pip\">Picture in Picture (PiP)</string>\n    <string name=\"pref_enable_pip\">Abilita l\\'uso della modalità PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Mostra gli \\\"episode toasts\\\" quando passi alla modalità PiP</string>\n    <string name=\"pref_pip_on_exit\">Passa in modalità PiP quando esci dal player</string>\n    <string name=\"pref_pip_replace_with_previous\">Sostituisce l\\'opzione Salta 10 secondi con Episodio precedente</string>\n    <string name=\"pref_category_external_player\">Player esterno</string>\n    <string name=\"pref_always_use_external_player\">Usa sempre un player esterno</string>\n    <string name=\"pref_external_player_preference\">Player esterno scelto</string>\n    <string name=\"pref_player_gestures\">Gesti</string>\n    <string name=\"pref_player_gestures_summary\">Scorrimento, doppio tocco, controlli multimediali</string>\n    <string name=\"pref_category_player_sliders\">Cursori</string>\n    <string name=\"enable_volume_brightness_gestures\">Attiva regolazione Volume e Retroilluminazione attraverso i gesti</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Scambia i cursori del volume e della luminosità</string>\n    <string name=\"pref_category_player_seeking\">Scorrimento</string>\n    <string name=\"enable_horizontal_seek_gesture\">Attiva il gesto di scorrimento orizzontale</string>\n    <string name=\"pref_show_seekbar\">Mostra la barra durante lo scorrimento</string>\n    <string name=\"pref_default_intro_length\">Lunghezza skip intro predefinita</string>\n    <string name=\"pref_intro_length\">Salta lunghezza dell\\'intro</string>\n    <string name=\"pref_skip_length\">Doppio clic salta di</string>\n    <string name=\"pref_skip_disable\">Disabilitato</string>\n    <string name=\"pref_player_smooth_seek\">Abilita scorrimento di precisione</string>\n    <string name=\"pref_player_smooth_seek_summary\">Se abilitata, lo scorrimento non si concentrerà sui fotogrammi chiave, rendendo la ricerca più lenta ma precisa</string>\n    <string name=\"pref_category_double_tap\">Doppio tocco</string>\n    <string name=\"pref_left_double_tap\">Doppio tocco (sinistra)</string>\n    <string name=\"pref_center_double_tap\">Doppio tocco (centro)</string>\n    <string name=\"pref_right_double_tap\">Doppio tocco (destra)</string>\n    <string name=\"pref_double_tap_info\">Quando un gesto tap è impostato su Personalizzato, può essere vincolato tramite input.conf. I codici delle chiavi sono 0x10001 per la sinistra, 0x10002 per il centro, 0x10003 per la destra.</string>\n    <string name=\"single_action_none\">Nessuna</string>\n    <string name=\"single_action_seek\">Scorri</string>\n    <string name=\"single_action_playpause\">Riproduci/Pausa</string>\n    <string name=\"single_action_switch\">Cambia episodio</string>\n    <string name=\"single_action_custom\">Personalizzato</string>\n    <string name=\"pref_category_media_controls\">Controlli multimediali</string>\n    <string name=\"pref_media_previous\">Precedente</string>\n    <string name=\"pref_media_playpause\">Riproduci/Pausa</string>\n    <string name=\"pref_media_next\">Successivo</string>\n    <string name=\"pref_media_info\">Quando un controllo multimediale è impostato su Personalizzato, può essere vincolato tramite input.conf. I codici chiave sono 0x10004 per precedente, 0x10005 per riproduci/pausa, e 0x10006 per successivo.</string>\n    <string name=\"pref_player_decoder\">Decoder</string>\n    <string name=\"pref_player_decoder_summary\">Decodifica hardware, formato pixel, debanding</string>\n    <string name=\"pref_try_hw\">Prova decodifica hardware</string>\n    <string name=\"pref_gpu_next_title\">Abilita il rendering dell\\'anteprima</string>\n    <string name=\"pref_gpu_next_subtitle\">Viene eseguito il rendering di un nuovo video in background</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Nessuno</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Utilizza il formato pixel YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Può risolvere le schermate nere in alcuni codec video e anche migliorare le prestazioni a scapito della qualità</string>\n    <string name=\"pref_player_subtitle\">Sottotitoli</string>\n    <string name=\"pref_player_subtitle_summary\">Lingue preferite, whitelist, blacklist</string>\n    <string name=\"pref_player_subtitle_lang\">Lingue preferite</string>\n    <string name=\"pref_player_subtitle_lang_info\">Lingua/e dei sottotitoli da selezionare per impostazione predefinita su un video con sottotitoli multipli; funzionano i codici delle lingue a due o tre lettere. I valori multipli possono essere delimitati da una virgola.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Whitelist</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Whitelist per i sottotitoli. Se viene definita una whitelist, verrà utilizzato il primo sottotitolo che contiene una parola inserita nella whitelist. Più valori possono essere delimitati da una virgola.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Blacklist</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Lista nera per i sottotitoli. Se viene definita una lista nera, tutti i sottotitoli che contengono una parola inserita nella lista nera verranno filtrati. Più valori possono essere delimitati da una virgola.</string>\n    <string name=\"pref_player_audio\">Audio</string>\n    <string name=\"pref_player_audio_summary\">Lingue preferite, correzione pitch, canali audio</string>\n    <string name=\"pref_player_audio_lang\">Lingue preferite</string>\n    <string name=\"pref_player_audio_lang_info\">Lingua/e audio da selezionare per impostazione predefinita su un video con più flussi audio, funzionano codici di due o tre lettere. I valori multipli possono essere delimitati da una virgola.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Abilita correzione pitch audio</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Impedisce che l\\'audio diventi acuto alle velocità più elevate e basso alle velocità più basse</string>\n    <string name=\"pref_player_audio_channels\">Canali audio</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Protezione automatica</string>\n    <string name=\"pref_player_audio_channels_auto\">Auto</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Stereo invertito</string>\n    <string name=\"pref_player_audio_boost_cap\">Limite aumento del volume</string>\n    <string name=\"pref_player_custom_button\">Pulsanti personalizzati</string>\n    <string name=\"pref_player_custom_button_summary\">Esegui codice lua con pulsanti personalizzati</string>\n    <string name=\"pref_player_custom_button_header\">Modifica pulsanti personalizzati</string>\n    <string name=\"pref_player_custom_button_guide\">Guida pulsanti personalizzati</string>\n    <string name=\"pref_player_custom_button_empty\">Non esistono pulsanti personalizzati. Tocca il pulsante più per creare un pulsante personalizzato.</string>\n    <string name=\"pref_player_custom_button_add\">Aggiungi pulsante</string>\n    <string name=\"pref_player_custom_button_edit\">Modifica pulsante</string>\n    <string name=\"pref_player_custom_button_title\">Titolo</string>\n    <string name=\"pref_player_custom_button_error_exists\">Il pulsante esistente già!</string>\n    <string name=\"pref_player_custom_button_content\">Codice lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Codice lua (tenendo premuto)</string>\n    <string name=\"pref_player_custom_button_optional\">(opzionale)</string>\n    <string name=\"pref_player_custom_button_delete\">Elimina pulsante</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Vuoi eliminare il pulsante %s?</string>\n    <string name=\"pref_player_custom_button_startup\">All\\'avvio</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Avanzate</string>\n    <string name=\"pref_player_advanced_summary\">File utente, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Modifica il file di configurazione MPV per ulteriori impostazioni del player</string>\n    <string name=\"pref_reset_mpv_conf\">Reimposta configurazione MPV</string>\n    <string name=\"pref_mpv_input\">Modifica mappa dei tasti del file di input MPV</string>\n    <string name=\"video_fit_screen\">Adatta allo schermo</string>\n    <string name=\"video_crop_screen\">Centrato</string>\n    <string name=\"video_stretch_screen\">Allungato</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Timer sospensione terminato</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Valore troppo grande</string>\n    <string name=\"numeric_chooser_value_too_small\">Valore troppo piccolo</string>\n    <string name=\"enable_auto_play\">Auto-play è attivo</string>\n    <string name=\"disable_auto_play\">Auto-play è disattivato</string>\n    <string name=\"player_aniskip_dontskip\">Non saltare</string>\n    <string name=\"player_aniskip_dontskip_toast\">Salto di %s in %d secondi</string>\n    <string name=\"player_aniskip_skip\">%s saltati</string>\n    <string name=\"no_next_episode\">Episodio successivo non trovato!</string>\n    <string name=\"no_prev_episode\">Episodio precedente non trovato!</string>\n    <string name=\"no_available_videos\">Nessun video disponibile</string>\n    <string name=\"no_hosters\">La lista hoster è vuota</string>\n    <string name=\"no_episode_loaded\">Nessun episodio caricato</string>\n    <string name=\"select_hoster_from_empty_list\">Hosters selezionato da lista vuota</string>\n    <string name=\"player_sheets_delay_set_as_default\">Imposta come predefinito</string>\n    <string name=\"player_sheets_audio_delay_title\">Ritardo audio</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Suono udito</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Suono individuato</string>\n    <string name=\"player_sheets_sub_delay_title\">Ritardo sottotitoli</string>\n    <string name=\"player_sheets_sub_delay_speed\">Velocità</string>\n    <string name=\"player_sheets_sub_delay_delay\">Ritardo</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primario</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Secondario</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Entrambi</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Voce udita</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Testo visto</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Suono udito</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Suono individuato</string>\n    <string name=\"player_sheets_sub_colors_title\">Colori</string>\n    <string name=\"player_sheets_subtitles_color_text\">Testo</string>\n    <string name=\"player_sheets_subtitles_color_border\">Bordo</string>\n    <string name=\"player_sheets_subtitles_color_background\">Sfondo</string>\n    <string name=\"player_sheets_sub_color_red\">Rosso</string>\n    <string name=\"player_sheets_sub_color_green\">Verde</string>\n    <string name=\"player_sheets_sub_color_blue\">Blu</string>\n    <string name=\"player_sheets_sub_color_alpha\">Trasparenza</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Impostazioni sottotitoli</string>\n    <string name=\"player_sheets_sub_typography_title\">Tipografia</string>\n    <string name=\"player_sheets_sub_typography_font\">Carattere</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Dimensione carattere</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Stile bordo</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Dimensione bordo</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Sfasamento ombra</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Contorno e ombra</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Riquadro opaco</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Riquadro di sfondo</string>\n    <string name=\"player_sheets_sub_misc_title\">Varie</string>\n    <string name=\"player_sheets_sub_override_ass\">Sovrascrivi i sottotitoli ASS/SSA</string>\n    <string name=\"player_sheets_sub_scale\">Scala</string>\n    <string name=\"player_sheets_sub_position\">Posizione</string>\n    <string name=\"player_sheets_filters_title\">Filtri</string>\n    <string name=\"player_sheets_filters_brightness\">Luminosità</string>\n    <string name=\"player_sheets_filters_contrast\">Contrasto</string>\n    <string name=\"player_sheets_filters_gamma\">Gamma</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturazione</string>\n    <string name=\"player_sheets_filters_hue\">Tonalità</string>\n    <string name=\"player_sheets_filters_warning\">Alcuni filtri potrebbero non funzionare nel tuo attuale driver video</string>\n    <string name=\"player_sheets_add_ext_audio\">Aggiungi tracce audio esterne</string>\n    <string name=\"player_hoster_tap_to_load\">Tocca per caricare i video</string>\n    <string name=\"player_hoster_failed\">Caricamento video fallito</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Altro</string>\n    <string name=\"player_hwdec_mode\">Imposta la modalità di decodifica hardware predefinita</string>\n    <string name=\"pref_audio_channels\">Canali audio</string>\n    <string name=\"player_sheets_stats_page_title\">Pagina statistiche predefinita</string>\n    <string name=\"player_sheets_tracks_off\">Disattivato</string>\n    <string name=\"player_sheets_stats_page_chip\">Pagina %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Pulsanti personalizzati</string>\n    <string name=\"player_seek_n_seconds\">%d secondi</string>\n    <string name=\"timer_title\">Timer di sospensione</string>\n    <string name=\"timer_remaining\">%s rimanenti</string>\n    <string name=\"timer_picker_enter_timer\">Inserisci durata</string>\n    <string name=\"timer_picker_pick_time\">Scegli durata</string>\n    <string name=\"timer_cancel_timer\">Annulla timer attuale</string>\n    <string name=\"player_sheets_speed_slider_label\">Velocità</string>\n    <string name=\"player_sheets_speed_make_default\">Rendi velocità predefinita</string>\n    <string name=\"pref_audio_pitch_correction_title\">Abilita correzione pitch audio</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Impedisci che l\\'audio diventi acuto alle velocità più elevate e basso alle velocità più basse</string>\n    <string name=\"player_sheets_add_ext_sub\">Aggiungi sottotitoli esterni</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">I sottotitoli secondari non avranno lo stile ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">Mostra i sottotitoli negli screenshot</string>\n    <string name=\"pref_general_summary\">Lingua dell\\'app, notifiche</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Zaffiro</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_library_rows\">Dimensione lista</string>\n    <string name=\"pref_preserve_reading_position\">Ricorda l\\'ultima pagina letta nei capitoli già letti</string>\n    <string name=\"pref_download_slots\">Numero di download massimo</string>\n    <string name=\"custom_button_settings\">Pulsanti personalizzati</string>\n    <string name=\"local_source_badge\">Locale</string>\n    <string name=\"anime_interval_expected_update\">Nuovi episodi dovrebbero essere rilasciati fra %1$s, verranno controllati ogni %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Questo anime è stato completato o non c\\'è una data di uscita prevista.</string>\n    <string name=\"confirm_tracker_update_anime\">Aggiornare i tracker all\\'episodio %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Tracker aggiornati al capitolo %d</string>\n    <string name=\"trackers_updated_summary_anime\">Tracker aggiornati all\\'episodio %d</string>\n    <string name=\"download_notifier_download_finish\">Download completato</string>\n    <string name=\"action_hide\">Nascondi</string>\n    <string name=\"label_all\">Tutti</string>\n    <string name=\"label_category\">Categoria</string>\n    <string name=\"manga_categories\">Categorie Manga</string>\n    <string name=\"general_categories\">Categorie</string>\n    <string name=\"anime_categories\">Categorie Anime</string>\n    <string name=\"entries\">Elementi della libreria</string>\n    <string name=\"chapters_episodes\">Capitoli ed episodi</string>\n    <string name=\"episodes\">Episodi</string>\n    <string name=\"backup_settings_warning\">Avviso: Il file backup contiene anche password dei servizi tracking, non condividere questo file!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Novità Anime</string>\n    <string name=\"label_manga_sources\">Fonti Manga</string>\n    <string name=\"label_anime_sources\">Fonti Anime</string>\n    <string name=\"label_watched_duration\">Tempo di visione</string>\n    <string name=\"label_watched_episodes\">Visti</string>\n    <string name=\"pref_start_screen\">Schermata di avvio</string>\n    <string name=\"pref_library_manga_columns\">Manga per riga</string>\n    <string name=\"pref_library_anime_columns\">Anime per riga</string>\n    <string name=\"pref_bottom_nav_no_history\">Sposta Cronologia nella scheda Altro</string>\n    <string name=\"pref_bottom_nav_no_updates\">Sposta Aggiornamenti nella scheda Altro</string>\n    <string name=\"pref_bottom_nav_no_manga\">Sposta Manga nella scheda Altro</string>\n    <string name=\"pref_bottom_nav_no_browse\">Sposta Sfoglia nella tab Altro</string>\n    <string name=\"action_filter_unseen\">Non visti</string>\n    <string name=\"action_global_manga_search\">Ricerca Manga Globale</string>\n    <string name=\"action_global_anime_search\">Ricerca Anime Globale</string>\n    <string name=\"action_sort_total_episodes\">Episodi totali</string>\n    <string name=\"action_sort_last_seen\">Ultimi visti</string>\n    <string name=\"action_sort_last_checked\">Ultimi visionati</string>\n    <string name=\"action_sort_latest_episode\">Episodio recente</string>\n    <string name=\"action_sort_last_anime_update\">Ultimo aggiornamento anime</string>\n    <string name=\"action_sort_unseen_count\">Conteggio di non visti</string>\n    <string name=\"action_sort_episode_fetch_date\">Data episodio</string>\n    <string name=\"action_mark_as_seen\">Segna come visto</string>\n    <string name=\"action_mark_as_unseen\">Segna come non visto</string>\n    <string name=\"action_mark_previous_as_seen\">Segna i precedenti come visti</string>\n    <string name=\"action_play_internally\">Riproduci internamente</string>\n    <string name=\"action_play_externally\">Riproduci esternamente</string>\n    <string name=\"action_download_unread\">Scarica i capitoli non letti</string>\n    <string name=\"action_download_unseen\">Scarica gli episodi non visti</string>\n    <string name=\"action_bookmark_episode\">Contrassegna l\\'episodio</string>\n    <string name=\"action_remove_bookmark_episode\">Rimuovi segnalibro</string>\n    <string name=\"action_edit_anime_categories\">Modifica categorie anime</string>\n    <string name=\"action_edit_manga_categories\">Modifica categorie manga</string>\n    <string name=\"action_view_episodes\">Guarda gli episodi</string>\n    <string name=\"action_previous_episode\">Episodio precedente</string>\n    <string name=\"action_play\">Play</string>\n    <string name=\"action_next_episode\">Prossimo episodio</string>\n    <string name=\"action_screen_fit\">Modalità adatta allo schermo</string>\n    <string name=\"action_show_anime\">Mostra anime</string>\n    <string name=\"action_display_download_badge_anime\">Episodi scaricati</string>\n    <string name=\"action_display_local_badge_manga\">Manga locali</string>\n    <string name=\"action_display_local_badge_anime\">Anime locali</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Cerca globalmente solo nelle fonti manga appuntate</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Ricerca globalmente solo nelle fonti anime appuntate</string>\n    <string name=\"pref_hide_in_manga_library_items\">Nascondi manga già in libreria</string>\n    <string name=\"pref_hide_in_anime_library_items\">Nascondi anime già in libreria</string>\n    <string name=\"action_order_by_episode_number\">Numero dell\\'episodio</string>\n    <string name=\"action_start_download_externally\">Usa un downloader esterno</string>\n    <string name=\"action_start_download_internally\">Usa un downloader interno</string>\n    <string name=\"pref_bottom_nav_style\">Stile barra di navigazione</string>\n    <string name=\"pref_default_home_tab_library\">Imposta la schermata iniziale su Manga</string>\n    <string name=\"default_manga_category\">Categoria manga predefinita</string>\n    <string name=\"default_anime_category\">Categoria anime predefinita</string>\n    <string name=\"pref_manga_library_update_categories_details\">I manga nelle categorie escluse non verranno aggiornati anche se sono anche nelle categorie incluse.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Gli anime nelle categorie escluse non verranno aggiornati anche se sono anche nelle categorie incluse.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Questa estensione non proviene dalla lista di estensioni ufficiali Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Questa estensione non è dall\\'elenco ufficiale delle estensioni Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categorie manga escluse</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Categorie anime escluse</string>\n    <string name=\"pref_category_external_downloader\">Downloader esterno</string>\n    <string name=\"pref_use_external_downloader\">Usa sempre un downloader esterno per gli anime</string>\n    <string name=\"pref_external_downloader_selection\">Downloader app scelto</string>\n    <string name=\"pref_download_new_episodes\">Scarica i nuovi episodi</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Salta il download dei doppi episodi visti</string>\n    <string name=\"auto_download_while_watching\">Scarica automaticamente mentre stai guardando</string>\n    <string name=\"download_ahead_info_anime\">Funziona solo sugli elementi della libreria e se l\\'episodio corrente più il prossimo sono già stati scaricati</string>\n    <string name=\"pref_track_on_add_library\">Apri il track menu quando aggiungi elementi alla libreria</string>\n    <string name=\"pref_show_next_episode_airing_time\">Mostra la messa in onda del prossimo episodio</string>\n    <string name=\"pref_backup_flags_summary\">Quali informazioni sono contenute nel file di backup</string>\n    <string name=\"pref_anime_storage_usage\">Utilizzo memoria Anime</string>\n    <string name=\"pref_manga_storage_usage\">Utilizzo memoria Manga</string>\n    <string name=\"used_cache_both\">Spazio occupato dagli anime: %1$s, spazio occupato dai manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Pulisci database manga</string>\n    <string name=\"pref_clear_anime_database\">Pulisci database anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Elimina la cronologia dei manga che non sono presenti nella libreria</string>\n    <string name=\"pref_clear_anime_database_summary\">Elimina la cronologia degli anime che non sono presenti nella libreria</string>\n    <string name=\"anime_from_library\">Anime dalla libreria</string>\n    <string name=\"downloaded_episodes\">Episodi scaricati</string>\n    <string name=\"local_manga_source\">Sorgente manga locali</string>\n    <string name=\"local_anime_source\">Sorgente anime locali</string>\n    <string name=\"episode_not_found\">Episodio non trovato</string>\n    <string name=\"local_invalid_episode_format\">Formato episodio non valido</string>\n    <string name=\"unknown_studio\">Studio sconosciuto</string>\n    <string name=\"delete_confirmation\">Sei sicuro di voler eliminare \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Eliminare gli episodi scaricati?</string>\n    <string name=\"snack_add_to_manga_library\">Aggiungere manga alla libreria?</string>\n    <string name=\"snack_add_to_anime_library\">Aggiungere anime alla libreria?</string>\n    <string name=\"display_mode_episode\">Episodio %1$s</string>\n    <string name=\"episode_downloading_progress\">Scaricamento (%d%%)</string>\n    <string name=\"download_error\">Errore</string>\n    <string name=\"download_paused\">In pausa</string>\n    <string name=\"show_episode_number\">Numero episodio</string>\n    <string name=\"sort_by_episode_number\">Per numero di episodi</string>\n    <string name=\"download_unseen\">Non visto</string>\n    <string name=\"confirm_delete_episodes\">Sei sicuro di voler eliminare gli episodi selezionati?</string>\n    <string name=\"also_set_episode_settings_for_library\">Applica anche a tutti gli anime nella mia libreria</string>\n    <string name=\"no_episodes_error\">Nessun episodio trovato</string>\n    <string name=\"watching\">Guardando</string>\n    <string name=\"currently_reading\">Leggendo</string>\n    <string name=\"currently_watching\">Guardando</string>\n    <string name=\"plan_to_watch\">Da guardare</string>\n    <string name=\"not_interesting\">Non interessanti</string>\n    <string name=\"want_to_read\">Da leggere</string>\n    <string name=\"want_to_watch\">Da guardare</string>\n    <string name=\"repeating_anime\">Da riguardare</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Questa operazione rimuoverà la data di visione di questo episodio. Vuoi proseguire?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Reimposta tutti gli episodi di questo anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Nessun video trovato</string>\n    <string name=\"notification_new_episodes\">Nuovi episodi trovati</string>\n    <string name=\"information_no_recent_anime\">Nulla è stato guardato di recente</string>\n    <string name=\"episode_settings_updated\">Aggiornate le impostazioni di default per gli episodi</string>\n    <string name=\"download_notifier_download_paused_chapters\">Scaricamento capitolo in pausa</string>\n    <string name=\"download_notifier_download_paused_episodes\">Scaricamento episodio in pausa</string>\n    <string name=\"channel_new_chapters_episodes\">Aggiornamenti capitoli/episodi</string>\n    <string name=\"label_storage\">Memoria</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Cambia la lunghezza dell\\'intro</string>\n    <string name=\"notification_episodes_single\">Episodio %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episodio %1$s e altri %2$d</string>\n    <string name=\"notification_episodes_multiple\">Episodi %1$s</string>\n    <string name=\"episode_settings\">Impostazioni episodio</string>\n    <string name=\"pref_backup_flags\">Opzioni di backup</string>\n    <string name=\"label_manga_extensions\">Estensioni Manga</string>\n    <string name=\"label_anime_extensions\">Estensioni Anime</string>\n    <string name=\"label_migration_manga\">Migra Manga</string>\n    <string name=\"label_migration_anime\">Migra Anime</string>\n    <string name=\"settings\">Impostazioni</string>\n    <string name=\"copied_video_link_to_clipboard\">Link al video copiato negli appunti</string>\n    <string name=\"choose_video_quality\">Scegli la qualità video:</string>\n    <string name=\"extension_settings\">Impostazioni dell\\'estensione</string>\n    <string name=\"theme_cottoncandy\">Zucchero filato</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Episodio con swipe verso destra</string>\n    <string name=\"pref_episode_swipe_start\">Episodio con swipe verso sinistra</string>\n    <string name=\"pref_category_hide_hidden\">Nasconi le categorie nascoste dalla schermata delle categorie</string>\n    <string name=\"pref_update_anime_release_grace_period\">Finestra di rilascio stimata per l\\'anime</string>\n    <string name=\"data_saver_exclude\">Escludi dal risparmio dati</string>\n    <string name=\"data_saver_stop_exclude\">Non escludere più dal risparmio dati</string>\n    <string name=\"data_saver\">Risparmio dati</string>\n    <string name=\"data_saver_summary\">Comprimi le immagini prima di scaricarle o mostrarle nel lettore</string>\n    <string name=\"data_saver_downloader\">Usa il risparmio dati nel downloader</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignora le immagini Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Ignora le animazioni GIF</string>\n    <string name=\"data_saver_image_quality\">Qualità delle immagini</string>\n    <string name=\"data_saver_image_quality_summary\">Valori alti si traducono in una maggiore qualità dell\\'immagine, ma questo implica file di dimensione più grande, 80 per cento è una buona media tra dimensione e qualità</string>\n    <string name=\"data_saver_image_format\">Comprimi in JPEG</string>\n    <string name=\"data_saver_image_format_summary_on\">La dimensione di un file JPEG e considerevole minore di un WEBP(quindi si risparmiano più dato), ma questo vuole dire che si perde più qualità.\n\\nAttualmente comprime in un JPEG</string>\n    <string name=\"data_saver_image_format_summary_off\">Salvare le immagini come Jpeg permette di risparmiare spazio rispetto a Webp, ma la qualità è minore.\n\\nAttualmente viene utilizzata la compressione Webp</string>\n    <string name=\"data_saver_color_bw\">Converte in bianco e nero</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (richiede il Bandwidth Hero server Proxy)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy Server</string>\n    <string name=\"data_saver_server_summary\">Scrivi qui l\\'url del Bandwidth Hero Proxy Server</string>\n    <string name=\"download_slots_info\">Scaricherà in modo concorrenziale solo da fonti self-hosted o unmetered</string>\n    <string name=\"unseen\">Non visto</string>\n    <string name=\"label_manga_extension_repos\">Repo delle estensioni manga</string>\n    <string name=\"label_anime_extension_repos\">Repo delle estensioni anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Crea una cartella default per Aniyomi</string>\n    <string name=\"download_speed_limit\">Limite velocità di download dei capitoli</string>\n    <string name=\"download_speed_limit_hint\">Imposta a 0 per disattivare il limite di velocità.</string>\n    <string name=\"action_display_unseen_badge\">Episodi non visti</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"action_show_manga\">Mostra manga</string>\n    <string name=\"pref_category_delete_chapters\">Elimina capitoli/episodi</string>\n    <string name=\"pref_remove_after_marked_as_read\">Dopo averli contrassegnati manualmente come letti/visti</string>\n    <string name=\"pref_remove_after_read\">Cancella automaticamente dopo la lettura/visione</string>\n    <string name=\"manga_from_library\">Manga dalla libreria</string>\n    <string name=\"non_library_settings\">Tutte le voci lette/viste</string>\n    <string name=\"pref_behavior\">Comportamento del capitolo</string>\n    <string name=\"action_add_repo_message\">Aggiungi altre repository a %s. Dovrebbe essere un URL che finisce con \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Funziona solo se il capitolo/episodio corrente e il successivo sono già stati scaricati.</string>\n    <string name=\"action_sort_last_manga_update\">Ultimo aggiornamento manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Pulsante Continua a guardare/leggere</string>\n    <string name=\"pref_update_only_completely_read\">Salta le voci con episodi non visti o capitoli non letti</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Consenti l\\'eliminazione dei capitoli/episodi con segnalibro</string>\n    <string name=\"pref_auto_update_manga_sync\">Aggiorna il tracking dopo la lettura/visione</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Aggiorna l\\'avanzamento quando viene contrassegnato come letto/visto</string>\n    <string name=\"pref_clear_chapter_cache\">Cancella cache capitoli e episodi</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Cancella la cache capitoli/episodi all\\'avvio dell\\'app</string>\n    <string name=\"clear_database_confirmation\">Sei sicuro? Gli episodi e i capitoli completati e il progresso delle voci non presenti in libreria andranno persi</string>\n    <string name=\"pref_incognito_mode_summary\">Sospendi la cronologia</string>\n    <string name=\"also_set_chapter_settings_for_library\">Applica anche a tutti i manga nella mia libreria</string>\n    <string name=\"dialog_with_checkbox_reset\">Reimposta tutti i capitoli di questo manga</string>\n    <string name=\"download_insufficient_space\">Impossibile scaricare a causa dello spazio di archiviazione insufficiente</string>\n    <string name=\"download_queue_size_warning\">Attenzione: download massivi di grandi dimensioni possono rallentare le fonti e/o portare al blocco di Aniyomi. Tocca per saperne di più.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forza l\\'app a ricontrollare i capitoli e gli episodi scaricati</string>\n    <string name=\"label_player\">Lettore</string>\n    <string name=\"pref_player_settings_summary\">Lettore interno, gesti, decoder, sottotitoli</string>\n    <string name=\"pref_category_intro_skip\">Salto dell\\'introduzione</string>\n    <string name=\"pref_enable_intro_skip\">Abilita salto dell\\'introduzione</string>\n    <string name=\"pref_disable_aniskip_chapter\">Disabilita AniSkip se il video contiene già i capitoli</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Codice non valido: \\\"%s\\\"</string>\n    <string name=\"pref_player_editor\">Editor script</string>\n    <string name=\"pref_player_editor_summary\">Modifica e crea nuovi script e opzioni per gli script</string>\n    <string name=\"pref_player_editor_script\">Script</string>\n    <string name=\"pref_player_editor_script_opts\">Opzioni script</string>\n    <string name=\"pref_player_no_items\">La cartella non contiene elementi. Tocca il pulsante più per aggiungere un nuovo file.</string>\n    <string name=\"editor_unsaved_progress\">Sono presenti modifiche non salvate. Vuoi ancora tornare indietro?</string>\n    <string name=\"editor_save_error\">Impossibile salvare il file</string>\n    <string name=\"editor_save_success\">File salvato</string>\n    <string name=\"editor_action_rename\">Rinomina file</string>\n    <string name=\"editor_action_delete\">Elimina file</string>\n    <string name=\"editor_file_already_exists\">Il file esiste già</string>\n    <string name=\"editor_invalid_filename\">Nome file non valido</string>\n    <string name=\"editor_create_file\">Crea file</string>\n    <string name=\"editor_edit_file\">Modifica nome file</string>\n    <string name=\"editor_filename\">Nome file</string>\n    <string name=\"editor_create_error\">Impossibile creare il file</string>\n    <string name=\"editor_rename_error\">Impossibile rinominare il file</string>\n    <string name=\"editor_delete_error\">Impossibile eliminare il file</string>\n    <string name=\"editor_delete_file\">Elimina file</string>\n    <string name=\"editor_delete_file_confirmation\">Vuoi eliminare il file \\\"%s\\\"?</string>\n    <string name=\"pref_mpv_user_files\">Usa i file MPV utente</string>\n    <string name=\"pref_mpv_user_files_summary\">Usa i file nella directory mpv-config</string>\n    <string name=\"player_skip_action\">Salta %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s saltato</string>\n    <string name=\"player_chapter_type_opening\">Sigla iniziale</string>\n    <string name=\"player_chapter_type_ending\">Sigla finale</string>\n    <string name=\"player_chapter_type_recap\">Riassunto</string>\n    <string name=\"player_chapter_type_mixedop\">Sigla iniziale mista</string>\n    <string name=\"player_sheets_track_delay\">Ritardo</string>\n    <string name=\"player_sheets_qualities_title\">Qualità</string>\n    <string name=\"player_sheets_chapters_title\">Capitoli</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"pref_behavior_episode\">Comportamento dell\\'episodio</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Segna come visto l\\'episodio duplicato già visto</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Dopo aver guardato un episodio</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Dopo aver recuperato un nuovo episodio</string>\n    <string name=\"player_sheets_track_palette\">Schema</string>\n    <string name=\"action_continue\">Continua</string>\n    <string name=\"action_stop\">Interrompi</string>\n    <string name=\"sort_by_season_number\">Per numero di stagione</string>\n    <string name=\"no_seasons_error\">Nessuna stagione trovata</string>\n    <string name=\"season_settings_updated\">Impostazioni predefinite della stagione aggiornate</string>\n    <string name=\"season_settings\">Impostazioni stagione</string>\n    <string name=\"pref_library_season\">Stagione</string>\n    <string name=\"pref_update_seasons_refresh\">Aggiorna le stagioni con gli episodi al refresh</string>\n    <string name=\"label_cant_migrate_episode\">Impossibile migrare l’episodio alla stagione, seleziona una stagione per continuare</string>\n    <string name=\"label_cant_migrate_season\">Impossibile migrare la stagione a episodio</string>\n    <string name=\"label_show_seasons\">Mostra stagioni</string>\n    <string name=\"action_display_show_continue_watching_button\">Pulsante continua a guardare</string>\n    <string name=\"action_display_grid_mode\">Modalità di visualizzazione a griglia</string>\n    <string name=\"display_mode_season\">Stagione %1$s</string>\n    <string name=\"show_season_number\">Numero stagione</string>\n    <string name=\"pref_update_seasons_update\">Aggiorna le stagioni con gli episodi all’aggiornamento della libreria</string>\n    <string name=\"filler\">Filler</string>\n    <string name=\"action_filter_fillermarked\">Contrassegnato come filler</string>\n    <string name=\"action_edit_background\">Modifica sfondo</string>\n    <string name=\"custom_background\">Sfondo personalizzato</string>\n    <string name=\"background_saved\">Sfondo salvato</string>\n    <string name=\"error_saving_background\">Errore durante il salvataggio dello sfondo</string>\n    <string name=\"error_sharing_background\">Errore durante la condivisione dello sfondo</string>\n    <string name=\"set_as_background\">Imposta come sfondo</string>\n    <string name=\"set_as_thumbnail\">Imposta come miniatura</string>\n    <string name=\"background_updated\">Sfondo aggiornato</string>\n    <string name=\"thumbnail_updated\">Miniatura aggiornata</string>\n    <string name=\"notification_background_update_failed\">Aggiornamento dello sfondo non riuscito</string>\n    <string name=\"action_fillermark_episode\">Segna episodio come filler</string>\n    <string name=\"action_remove_fillermark_episode\">Rimuovi segnalazione filler</string>\n    <string name=\"pref_download_fillermarked_items\">Consenti il download degli episodi segnati come filler</string>\n    <string name=\"show_episode_previews\">Miniature episodi</string>\n    <string name=\"show_episode_summaries\">Riepiloghi episodi</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ja/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">もう一度戻るを押して終了します</string>\n    <string name=\"action_filter_started\">開始済み</string>\n    <string name=\"action_sort_airing_time\">放送時間</string>\n    <string name=\"action_reorganize_by\">再注文</string>\n    <string name=\"relative_time_now\">いま</string>\n    <string name=\"pref_library_summary\">カテゴリ、グローバル アップデート、章の間のスワイプ</string>\n    <string name=\"pref_library_update_show_tab_badge\">更新アイコンで未読カウンターを表示</string>\n    <string name=\"label_player_settings\">プレイヤー設定</string>\n    <string name=\"action_search_player_settings\">検索、サーチ設定</string>\n    <string name=\"pref_player_internal\">内蔵プレイヤー</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5秒</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6秒</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7秒</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8秒</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9秒</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10秒</string>\n    <string name=\"pref_pip_episode_toasts\">PiP モードでエピソードを切り替えるときにエピソード トーストを表示する</string>\n    <string name=\"pref_general_summary\">アプリの言語、通知</string>\n    <string name=\"theme_cloudflare\">クラウドフレア</string>\n    <string name=\"theme_sapphire\">サファイア</string>\n    <string name=\"theme_doom\">ドム</string>\n    <string name=\"theme_matrix\">マトリックス</string>\n    <string name=\"pref_preserve_reading_position\">読み取ったチャプターの読み取り位置を保持する</string>\n    <string name=\"pref_download_slots\">最大ダウンロード数</string>\n    <string name=\"local_source_badge\">ローカル</string>\n    <string name=\"anime_interval_expected_update\">新しいエピソードは %1$s 頃にリリースされると予測されており、%2$s ごとにチェックしています。</string>\n    <string name=\"anime_interval_expected_update_null\">このアニメは完成しました、または、リリーズ日はありません.</string>\n    <string name=\"download_notifier_download_finish\">ダウンロード完了</string>\n    <string name=\"action_hide\">隠す</string>\n    <string name=\"label_all\">全て</string>\n    <string name=\"label_category\">カテゴリー</string>\n    <string name=\"manga_categories\">漫画のカテゴリー</string>\n    <string name=\"general_categories\">カテゴリー</string>\n    <string name=\"anime_categories\">アニメのカテゴリー</string>\n    <string name=\"chapters_episodes\">章と話</string>\n    <string name=\"episodes\">話</string>\n    <string name=\"backup_settings_warning\">警告: 設定をバックアップすると、トラックのパスワードも保存されるため、このバックアップ ファイルを共有しないでください。</string>\n    <string name=\"label_manga_library\">漫画</string>\n    <string name=\"label_anime_library\">アニメ</string>\n    <string name=\"label_anime\">アニメ</string>\n    <string name=\"label_manga\">漫画</string>\n    <string name=\"label_recent_anime_updates\">アニメの更新(直近)</string>\n    <string name=\"label_manga_sources\">漫画のソース</string>\n    <string name=\"label_anime_sources\">アニメのソース</string>\n    <string name=\"label_watched_duration\">視聴時間</string>\n    <string name=\"label_watched_episodes\">見た</string>\n    <string name=\"pref_library_manga_columns\">行あたりの漫画</string>\n    <string name=\"pref_library_anime_columns\">行あたりのアニメ</string>\n    <string name=\"action_sort_total_episodes\">全エピソード</string>\n    <string name=\"action_sort_latest_episode\">最新のエピソード</string>\n    <string name=\"action_display_local_badge_manga\">ローカル ソース</string>\n    <string name=\"default_manga_category\">デフォルトカテゴリー</string>\n    <string name=\"pref_manga_library_update_categories_details\">含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。</string>\n    <string name=\"pref_remove_exclude_categories_manga\">除外されるカテゴリー</string>\n    <string name=\"download_ahead_info_anime\">ライブラリ内のエントリに対してのみ機能し、現在のエピソードと次のエピソードがすでにダウンロードされている場合にのみ機能します</string>\n    <string name=\"pref_clear_manga_database\">データベースをクリア</string>\n    <string name=\"pref_clear_manga_database_summary\">ライブラリにない項目の履歴を削除</string>\n    <string name=\"snack_add_to_manga_library\">ライブラリに追加しますか？</string>\n    <string name=\"download_error\">エラー</string>\n    <string name=\"download_paused\">一時停止済み</string>\n    <string name=\"download_notifier_download_paused_chapters\">ダウンロード一時停止済み</string>\n    <string name=\"channel_new_chapters_episodes\">章の更新</string>\n    <string name=\"notification_episodes_single\">第%1$s話</string>\n    <string name=\"notification_episodes_multiple\">第%1$s話</string>\n    <string name=\"episode_settings\">話の設定</string>\n    <string name=\"label_manga_extensions\">漫画の拡張機能</string>\n    <string name=\"label_anime_extensions\">アニメの拡張機能</string>\n    <string name=\"label_migration_manga\">漫画を移行</string>\n    <string name=\"label_migration_anime\">アニメを移行</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/jv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_filter_started\">Mulai</string>\n    <string name=\"pref_library_update_show_tab_badge\">Tampilake itungan kang durung diwaca ing ikon nganyari</string>\n    <string name=\"local_source_badge\">Lokal</string>\n    <string name=\"manga_categories\">Kategori</string>\n    <string name=\"action_display_local_badge_manga\">Lokal manga</string>\n    <string name=\"default_manga_category\">kategori gawan</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga ing kategori sing ora kalebu ora bakal dianyari sanajan uga ana ing kategori sing kalebu.</string>\n    <string name=\"download_notifier_download_paused_chapters\">Donlotan mandheg</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ka-rGE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">კატეგორიები</string>\n    <string name=\"default_manga_category\">ნაგულისხმევი კატეგორია</string>\n    <string name=\"pref_clear_manga_database\">მონაცემთა ბაზის გასუფთავება</string>\n    <string name=\"pref_clear_manga_database_summary\">ბიბლიოთეკაში შეუნახავი მანგების ისტორიის წაშლა</string>\n    <string name=\"snack_add_to_manga_library\">დავამატო მანგა ბიბლიოთეკაში?</string>\n    <string name=\"download_error\">შეცდომა</string>\n    <string name=\"download_paused\">დაპაუზებულია</string>\n    <string name=\"download_notifier_download_paused_chapters\">გადმოწერა დაპაუზებულია</string>\n    <string name=\"channel_new_chapters_episodes\">თავების განახლებები</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/kk/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Шығу үшін тағы да артқа басыңыз</string>\n    <string name=\"action_filter_started\">Басталды</string>\n    <string name=\"action_sort_airing_time\">Шыққан уақыты</string>\n    <string name=\"action_reorganize_by\">Қайта реттеу</string>\n    <string name=\"relative_time_now\">Қазір</string>\n    <string name=\"pref_library_summary\">Санаттар, ауқымды жаңарту, бөлімдерді парақтау</string>\n    <string name=\"pref_library_update_show_tab_badge\">Жаңартулар белгішесінде оқылмағандар/көрілмегендер санын көрсету</string>\n    <string name=\"label_player_settings\">Ойнатқышты баптау</string>\n    <string name=\"action_search_player_settings\">Ойнатқыш баптауында іздеу</string>\n    <string name=\"pref_player_internal\">Қолданба ойнатқышы</string>\n    <string name=\"pref_progress_mark_as_seen\">Қай кезде бөлімді көрілген деп есептеу керек</string>\n    <string name=\"pref_preserve_watching_position\">Көрілген бөлімдерде де тоқтаған кезді есте сақтау</string>\n    <string name=\"pref_category_external_player\">Сыртқы ойнатқыш</string>\n    <string name=\"pref_general_summary\">Қолданба тілі, хабарландырулар</string>\n    <string name=\"theme_sapphire\">Жақұт</string>\n    <string name=\"manga_categories\">Санаттар</string>\n    <string name=\"action_display_local_badge_manga\">Локалды дереккөз</string>\n    <string name=\"default_manga_category\">Әдепкі санат</string>\n    <string name=\"pref_manga_library_update_categories_details\">Шығарылған санаттардағы жазбалар енгізілген санаттарда болса да жаңартылмайды.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Саналмайтын санаттар</string>\n    <string name=\"pref_clear_manga_database\">Дерекқорды тазалау</string>\n    <string name=\"pref_clear_manga_database_summary\">Кітапханада жоқ жазбалардың тарихын жою</string>\n    <string name=\"snack_add_to_manga_library\">Кітапханаға қосайық па?</string>\n    <string name=\"action_display_unseen_badge\">Көрілмеген бөлімдер</string>\n    <string name=\"action_stop\">Тоқтату</string>\n    <string name=\"action_continue\">Жалғастыру</string>\n    <string name=\"manga\">Манга</string>\n    <string name=\"action_add_repo_message\">%s қолданбасына қосымша репозиторий қосыңыз. Ол \\\"index.min.json\\\" деп бітетін URL пішімінде болуы керек.</string>\n    <string name=\"download_ahead_info\">Ағымдағы және келесі тарау/бөлім әлдеқашан жүктелген болса ғана.</string>\n    <string name=\"non_library_settings\">Көрілген/Оқылғандардың бәрі</string>\n    <string name=\"action_sort_last_manga_update\">Манғаның соңғы жаңартпа тексеруі</string>\n    <string name=\"action_show_manga\">Манганы көрсету</string>\n    <string name=\"action_display_show_continue_reading_button\">Жалғастыру батырмасы</string>\n    <string name=\"pref_update_only_completely_read\">Тарауы оқылмаған/Бөлімі көрілмеген топтаманы өткізе беру</string>\n    <string name=\"pref_category_delete_chapters\">Тарауларды/Бөлімдерді жою</string>\n    <string name=\"pref_remove_after_marked_as_read\">Қолмен оқылған/көрілген деп белгілегеннен кейін</string>\n    <string name=\"pref_remove_after_read\">Оқығаннан/Көргеннен кейін автоматты түрде жою</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Бетбелгіленген тарауларды/бөлімдерді жоюға рұқсат беру</string>\n    <string name=\"pref_auto_update_manga_sync\">Оқығаннан/Көргеннен кейін прогрессті жаңарту</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Оқылған/Көрілген деп белгіленгенде прогрессті жаңарту</string>\n    <string name=\"pref_clear_chapter_cache\">Тарау және бөлім кешін тазалау</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Қолданба жабылғанда тараулар/бөлімдер кешін тазалау</string>\n    <string name=\"clear_database_confirmation\">Сенімдісіз бе? Кітапханадағы емес жазбалардың оқылған тараулары/көрілген бөлімдері мен прогрессі жоғалады</string>\n    <string name=\"pref_incognito_mode_summary\">Тарихыңызды кідіртеді</string>\n    <string name=\"manga_from_library\">Кітапханадағы мангалар</string>\n    <string name=\"also_set_chapter_settings_for_library\">Сонымен қоса кітапханадағы мангаларға қолдану</string>\n    <string name=\"dialog_with_checkbox_reset\">Бұл манга үшін түгел тарауларды қалпына келтіру</string>\n    <string name=\"download_insufficient_space\">Жадта орын аз болған соң жүктелмеді</string>\n    <string name=\"download_queue_size_warning\">Ескерту: Көп жүктеулер саны дереккөздер жұмысын баяулата алады және/немесе Aniyomi бұғатталына алады. Толығырақ оқу үшін басыңыз</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Қолданбаны жүктеп алынған тарауларды/бөлімдерді қайта тексеруге мәжбүрлеу</string>\n    <string name=\"label_player\">Ойнатқыш</string>\n    <string name=\"pref_player_settings_summary\">Қолданба ойнатқышы, ымдар, декодерлер, субтитр</string>\n    <string name=\"pref_player_internal_summary\">Прогресс, басқару батырмалары, бағдар</string>\n    <string name=\"pref_category_player_orientation\">Бағдар</string>\n    <string name=\"rotation_video\">Бейне</string>\n    <string name=\"rotation_reverse_landscape\">Кері ландшафт</string>\n    <string name=\"rotation_sensor_portrait\">Сенсор портрет</string>\n    <string name=\"rotation_sensor_landscape\">Сенсор ландшафт</string>\n    <string name=\"pref_category_controls\">Басқару</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/km/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">ការតម្រៀបថ្នាក់</string>\n    <string name=\"action_display_local_badge_manga\">ម៊េងហ្គាដែលមានស្រាប់ក្នុងឧបករណ៍</string>\n    <string name=\"default_manga_category\">ថ្នាក់ធម្មតា</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/kn/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">ವರ್ಗಗಳು</string>\n    <string name=\"action_display_local_badge_manga\">ಸ್ಥಳೀಯ ಬ್ಯಾಡ್ಜ್ ಗಳು</string>\n    <string name=\"default_manga_category\">ಡೀಫಾಲ್ಟ್ ವರ್ಗ</string>\n    <string name=\"pref_manga_library_update_categories_details\">ಹೊರಗಿಡಲಾದ ವರ್ಗಗಳಲ್ಲಿನ ಮಾಂಗಾ ಸೇರಿಸಿದ ವಿಭಾಗಗಳಲ್ಲಿದ್ದರೂ ನವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ.</string>\n    <string name=\"pref_clear_manga_database\">ಡೇಟಾಬೇಸ್ ತೆರವುಗೊಳಿಸಿ</string>\n    <string name=\"pref_clear_manga_database_summary\">ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ಇಲ್ಲದ ಮಾಂಗಾದ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಿ</string>\n    <string name=\"snack_add_to_manga_library\">ಮಾಂಗಾವನ್ನು ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸುವುದೇ?</string>\n    <string name=\"download_error\">ದೋಷ</string>\n    <string name=\"download_paused\">ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"download_notifier_download_paused_chapters\">ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</string>\n    <string name=\"channel_new_chapters_episodes\">ಅಧ್ಯಾಯ ನವೀಕರಣಗಳು</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ko/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"other\">보지 않은 다음 %d 에피소드</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"other\">%1$s개의 에피소드</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"other\">다음 %d 에피스드</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"other\">%d개의 애니메이션</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"other\">%1$d개의 새로운 에피소드</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"other\">%d 초</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"other\">에피소드 %1$s와 그 외 %2$d</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ko/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">종료하려면 뒤로버튼을 다시 누르세요</string>\n    <string name=\"action_filter_started\">시작됨</string>\n    <string name=\"action_sort_airing_time\">방영시간</string>\n    <string name=\"action_reorganize_by\">재정렬</string>\n    <string name=\"pref_library_summary\">카테고리, 전역 업데이트, 회차 스와이프</string>\n    <string name=\"pref_library_update_show_tab_badge\">업데이트 아이콘에 읽지 않은 횟수 표시</string>\n    <string name=\"pref_progress_mark_as_seen\">에피소드를 본 것으로 표시할 시점</string>\n    <string name=\"pref_preserve_watching_position\">시청한 에피소드의 마지막 위치 기억</string>\n    <string name=\"pref_category_player_orientation\">방향</string>\n    <string name=\"rotation_reverse_landscape\">가로 반전</string>\n    <string name=\"rotation_sensor_portrait\">자동 세로</string>\n    <string name=\"rotation_sensor_landscape\">자동 가로</string>\n    <string name=\"pref_remember_brightness\">마지막으로 사용한 밝기를 기억하고 전환</string>\n    <string name=\"pref_remember_volume\">마지막으로 사용한 볼륨을 기억하고 전환</string>\n    <string name=\"pref_player_fullscreen\">디스플레이 컷아웃에 콘텐츠 표시</string>\n    <string name=\"pref_player_hide_controls\">플레이어를 열 때 플레이어 조작 숨기기</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">자동 건너뛰기 사용</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">넷플릭스 스타일 사용</string>\n    <string name=\"pref_waiting_time_aniskip\">버튼 시간 초과</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5초</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6초</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7초</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8초</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9초</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10초</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip이 작동하려면 애니메이션이 MAL 또는 Anilist의 트래커가 작동되어야 합니다</string>\n    <string name=\"pref_enable_aniskip\">AniSkip 사용</string>\n    <string name=\"pref_category_pip\">Picture-in-Picture (PiP)</string>\n    <string name=\"pref_enable_pip\">PiP 모드 사용 활성화</string>\n    <string name=\"pref_pip_episode_toasts\">PiP 모드에서 에피소드를 전환할 때 에피소드 알림 표시</string>\n    <string name=\"pref_pip_on_exit\">플레이어를 종료할 때 자동으로 PiP 모드로 전환</string>\n    <string name=\"pref_pip_replace_with_previous\">10초 건너뛰기 옵션을 이전 에피소드로 대체</string>\n    <string name=\"pref_category_external_player\">외부 플레이어</string>\n    <string name=\"pref_always_use_external_player\">항상 외부 플레이어 사용</string>\n    <string name=\"pref_external_player_preference\">외부 플레이어 기본 설정</string>\n    <string name=\"enable_volume_brightness_gestures\">볼륨 및 밝기 제스처 활성화</string>\n    <string name=\"pref_category_player_seeking\">찾기</string>\n    <string name=\"enable_horizontal_seek_gesture\">가로 탐색 제스처 활성화</string>\n    <string name=\"pref_default_intro_length\">기본 건너뛸 인트로 길이</string>\n    <string name=\"pref_intro_length\">건너뛸 인트로 길이</string>\n    <string name=\"pref_skip_length\">두 번 탭하여 건너뛸 길이</string>\n    <string name=\"pref_skip_disable\">끄기</string>\n    <string name=\"pref_player_smooth_seek\">정확한 검색 사용</string>\n    <string name=\"pref_player_smooth_seek_summary\">활성화되면 검색이 키프레임에 초점을 맞추지 않아 느리지만 정확한 검색이 가능함</string>\n    <string name=\"pref_gpu_next_title\">gpu-next 활성화</string>\n    <string name=\"pref_gpu_next_subtitle\">새로운 비디오 렌더링 백엔드</string>\n    <string name=\"pref_debanding_title\">Debanding 필터</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_player_audio_channels\">오디오 채널</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Auto-safe</string>\n    <string name=\"pref_player_audio_channels_auto\">자동</string>\n    <string name=\"pref_player_audio_channels_mono\">모노</string>\n    <string name=\"pref_player_audio_channels_stereo\">스테레오</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">스테레오(반대로)</string>\n    <string name=\"pref_mpv_conf\">추가 플레이어 설정을 위해 MPV 구성 파일 편집</string>\n    <string name=\"pref_reset_mpv_conf\">MPV 구성 파일 초기화</string>\n    <string name=\"pref_mpv_input\">키보드 매핑 구성을 위한 MPV 입력 파일 편집</string>\n    <string name=\"video_fit_screen\">화면에 맞추기</string>\n    <string name=\"video_crop_screen\">화면에 맞게 자르기</string>\n    <string name=\"video_stretch_screen\">화면에 맞게 늘림</string>\n    <string name=\"enable_auto_play\">자동 재생 사용 중</string>\n    <string name=\"disable_auto_play\">자동 재생이 사용 중지됨</string>\n    <string name=\"player_aniskip_dontskip\">건너뛰지 않기</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s을 %d초 후에 건너뛰기</string>\n    <string name=\"player_aniskip_skip\">%s 건너뜀</string>\n    <string name=\"no_next_episode\">다음 에피소드를 찾을 수 없습니다!</string>\n    <string name=\"player_hwdec_mode\">기본 하드웨어 디코딩 모드 설정</string>\n    <string name=\"screenshot_show_subs\">스크린 샷에 자막 표시</string>\n    <string name=\"pref_general_summary\">앱 언어, 알림</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">사파이어</string>\n    <string name=\"theme_doom\">둠</string>\n    <string name=\"theme_matrix\">매트릭스</string>\n    <string name=\"pref_preserve_reading_position\">읽은 회차의 위치를 유지</string>\n    <string name=\"pref_download_slots\">최대 다운로드</string>\n    <string name=\"local_source_badge\">로컬</string>\n    <string name=\"anime_interval_expected_update\">새 에피소드는 약 %1$s 후에 공개될 것으로 예상되며 매 %2$s마다 확인됩니다.</string>\n    <string name=\"download_notifier_download_finish\">다운로드 완료</string>\n    <string name=\"action_hide\">숨기기</string>\n    <string name=\"label_all\">전체</string>\n    <string name=\"label_category\">카테고리</string>\n    <string name=\"manga_categories\">만화 카테고리</string>\n    <string name=\"general_categories\">카테고리</string>\n    <string name=\"anime_categories\">애니메이션 카테고리</string>\n    <string name=\"entries\">서재 항목</string>\n    <string name=\"chapters_episodes\">회차와 에피소드</string>\n    <string name=\"episodes\">에피소드</string>\n    <string name=\"backup_settings_warning\">경고: 설정을 백업하면 동기화 암호와 같은 민감한 정보도 저장됩니다, 이 백업 파일을 공유하지 마십시오!</string>\n    <string name=\"label_manga_library\">만화</string>\n    <string name=\"label_anime_library\">애니메이션</string>\n    <string name=\"label_anime\">애니메이션</string>\n    <string name=\"label_manga\">만화</string>\n    <string name=\"label_recent_anime_updates\">애니메이션 업데이트</string>\n    <string name=\"label_manga_sources\">만화 소스</string>\n    <string name=\"label_anime_sources\">애니메이션 소스</string>\n    <string name=\"label_watched_duration\">시청 시간</string>\n    <string name=\"label_watched_episodes\">시청함</string>\n    <string name=\"pref_start_screen\">시작화면</string>\n    <string name=\"pref_library_manga_columns\">만화 정렬</string>\n    <string name=\"pref_library_anime_columns\">애니메이션 정렬</string>\n    <string name=\"pref_bottom_nav_no_history\">기록을 더 보기 탭으로 이동</string>\n    <string name=\"pref_bottom_nav_no_updates\">업데이트를 더 보기 탭으로 이동</string>\n    <string name=\"pref_bottom_nav_no_manga\">만화를 더 보기 탭으로 이동</string>\n    <string name=\"pref_bottom_nav_no_browse\">\\\"추가\\\" 탭으로 이동</string>\n    <string name=\"action_filter_unseen\">보기 전</string>\n    <string name=\"action_global_manga_search\">전체 만화 검색</string>\n    <string name=\"action_global_anime_search\">전체 애니메이션 검색</string>\n    <string name=\"action_sort_total_episodes\">전체 에피소드</string>\n    <string name=\"action_sort_last_seen\">마지막으로 봄</string>\n    <string name=\"action_sort_last_checked\">마지막으로 확인</string>\n    <string name=\"action_sort_latest_episode\">마지막 에피소드</string>\n    <string name=\"action_sort_last_anime_update\">마지막 애니메이션 업데이트</string>\n    <string name=\"action_sort_unseen_count\">보지 않음 수</string>\n    <string name=\"action_sort_episode_fetch_date\">에피소드 가져오기 날짜</string>\n    <string name=\"action_mark_as_seen\">시청함으로 표시</string>\n    <string name=\"action_mark_as_unseen\">시청하지 않음으로 표시</string>\n    <string name=\"action_mark_previous_as_seen\">항목 바로 전까지 시청함으로 표시</string>\n    <string name=\"action_play_internally\">내부에서 재생</string>\n    <string name=\"action_play_externally\">외부에서 재생</string>\n    <string name=\"action_download_unread\">읽지 않은 회차 다운로드</string>\n    <string name=\"action_download_unseen\">보지 않은 에피소드 다운로드</string>\n    <string name=\"action_bookmark_episode\">에피소드 북마크</string>\n    <string name=\"action_remove_bookmark_episode\">에피소드 북마크 해제</string>\n    <string name=\"action_edit_anime_categories\">애니메이션 카테고리 수정</string>\n    <string name=\"action_edit_manga_categories\">만화 카테고리 수정</string>\n    <string name=\"action_view_episodes\">에피소드 보기</string>\n    <string name=\"action_previous_episode\">이전 에피소드</string>\n    <string name=\"action_play\">재생</string>\n    <string name=\"action_next_episode\">다음 에피소드</string>\n    <string name=\"action_screen_fit\">화면 맞춤 모드</string>\n    <string name=\"action_show_anime\">애니메이션 표시</string>\n    <string name=\"action_display_download_badge_anime\">다운로드된 에피소드</string>\n    <string name=\"action_display_local_badge_manga\">로컬 소스</string>\n    <string name=\"action_display_local_badge_anime\">로컬 애니메이션</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">전체 검색에서 핀 설정된 만화 소스만 검색</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">전체 검색에서 핀 설정된 애니메이션 소스만 검색</string>\n    <string name=\"pref_hide_in_manga_library_items\">이미 서재에 있는 만화 항목 숨기기</string>\n    <string name=\"pref_hide_in_anime_library_items\">이미 서재에 있는 애니메이션 항목 숨기기</string>\n    <string name=\"action_order_by_episode_number\">에피소드 번호 순</string>\n    <string name=\"action_start_download_externally\">외부 다운로더 사용</string>\n    <string name=\"action_start_download_internally\">내부 다운로더 사용</string>\n    <string name=\"pref_bottom_nav_style\">하단 탐색 스타일</string>\n    <string name=\"pref_default_home_tab_library\">만화 탭을 시작화면으로 설정</string>\n    <string name=\"default_manga_category\">기본 카테고리</string>\n    <string name=\"default_anime_category\">기본 애니메이션 카테고리</string>\n    <string name=\"pref_manga_library_update_categories_details\">카테고리가 업데이트에서 제외된 경우 다른 카테고리에 포함되어 있어도 업데이트 되지 않습니다.</string>\n    <string name=\"pref_anime_library_update_categories_details\">제외된 카테고리의 애니메이션은 포함된 카테고리에 있어도 업데이트되지 않습니다.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">이 확장 앱은 Aniyomi의 공식 확장 앱이 아닙니다.</string>\n    <string name=\"unofficial_anime_extension_message\">이 확장 앱은 Aniyomi의 공식 확장 앱이 아닙니다.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">제외된 카테고리</string>\n    <string name=\"pref_remove_exclude_categories_anime\">제외된 애니메이션 카테고리</string>\n    <string name=\"pref_category_external_downloader\">외부 다운로더</string>\n    <string name=\"pref_use_external_downloader\">애니메이션에는 항상 외부 다운로더 사용</string>\n    <string name=\"pref_external_downloader_selection\">다운로더 앱 기본 설정</string>\n    <string name=\"pref_download_new_episodes\">새로운 에피소드 다운로드</string>\n    <string name=\"auto_download_while_watching\">시청 중 자동 다운로드</string>\n    <string name=\"download_ahead_info_anime\">항목이 내 서재에 추가되어 있고, 현재 에피소드와 다음 에피소드가 이미 다운로드된 경우에만 작동됩니다</string>\n    <string name=\"pref_track_on_add_library\">서재에 추가할 때 동기화 메뉴 열기</string>\n    <string name=\"pref_show_next_episode_airing_time\">다음 에피소드 방송일 표시</string>\n    <string name=\"pref_backup_flags_summary\">백업 파일에 포함할 정보</string>\n    <string name=\"pref_anime_storage_usage\">애니메이션 저장공간 사용량</string>\n    <string name=\"pref_manga_storage_usage\">만화 저장공간 사용량</string>\n    <string name=\"used_cache_both\">애니메이션에서 사용: %1$s, 만화에서 사용: %2$s</string>\n    <string name=\"pref_clear_manga_database\">데이터베이스 삭제</string>\n    <string name=\"pref_clear_anime_database\">애니메이션 데이터베이스 삭제</string>\n    <string name=\"pref_clear_manga_database_summary\">서재에 추가되지 않은 항목의 기록을 삭제합니다</string>\n    <string name=\"pref_clear_anime_database_summary\">서재에 추가되지 않은 애니메이션의 기록을 삭제합니다</string>\n    <string name=\"anime_from_library\">서재의 애니메이션</string>\n    <string name=\"downloaded_episodes\">다운로드된 에피소드</string>\n    <string name=\"local_manga_source\">로컬 만화 소스</string>\n    <string name=\"local_anime_source\">로컬 애니메이션 소스</string>\n    <string name=\"episode_not_found\">에피소드를 찾을 수 없음</string>\n    <string name=\"local_invalid_episode_format\">잘못된 에피소드 형식</string>\n    <string name=\"unknown_studio\">알 수없는 스튜디오</string>\n    <string name=\"delete_confirmation\">정말로 \\\"%s\\\"을/를 삭제하시겠습니까?</string>\n    <string name=\"delete_downloads_for_anime\">다운로드한 에피소드를 삭제하시겠습니까?</string>\n    <string name=\"snack_add_to_manga_library\">서재에 추가합니까?</string>\n    <string name=\"snack_add_to_anime_library\">서재에 애니메이션을 추가하시겠습니까?</string>\n    <string name=\"display_mode_episode\">에피소드 %1$s</string>\n    <string name=\"episode_downloading_progress\">다운로드 중 (%d%%)</string>\n    <string name=\"download_error\">오류</string>\n    <string name=\"download_paused\">일시중지됨</string>\n    <string name=\"show_episode_number\">에피소드 번호</string>\n    <string name=\"sort_by_episode_number\">에피소드 번호 순</string>\n    <string name=\"download_unseen\">안봄</string>\n    <string name=\"confirm_delete_episodes\">선택된 에피소드를 삭제하시겠습니까?</string>\n    <string name=\"also_set_episode_settings_for_library\">서재의 모든 애니메이션에 적용</string>\n    <string name=\"no_episodes_error\">에피소드 없음</string>\n    <string name=\"watching\">시청 중</string>\n    <string name=\"currently_reading\">현재 읽는 중</string>\n    <string name=\"currently_watching\">현재 시청 중</string>\n    <string name=\"plan_to_watch\">시청할 예정</string>\n    <string name=\"not_interesting\">관심 없음</string>\n    <string name=\"want_to_read\">읽고 싶음</string>\n    <string name=\"want_to_watch\">보고 싶음</string>\n    <string name=\"repeating_anime\">다시보기</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">이 에피소드의 시청 날짜가 삭제됩니다. 확실합니까?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">이 애니메이션의 모든 에피소드 초기화</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">진행 상황: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">진행 상황: %1$s</string>\n    <string name=\"recent_anime_time\">%1$s ‐ %2$s화</string>\n    <string name=\"video_list_empty_error\">비디오를 찾을 수 없음</string>\n    <string name=\"notification_new_episodes\">새로운 에피소드 발견</string>\n    <string name=\"information_no_recent_anime\">최근에 본 동영상이 없습니다</string>\n    <string name=\"episode_settings_updated\">업데이트된 기본 에피소드 설정</string>\n    <string name=\"download_notifier_download_paused_chapters\">다운로드 일시중지됨</string>\n    <string name=\"download_notifier_download_paused_episodes\">에피소드 다운로드가 일시 중지됨</string>\n    <string name=\"channel_new_chapters_episodes\">회차 업데이트</string>\n    <string name=\"label_storage\">저장공간</string>\n    <string name=\"label_history\">만화</string>\n    <string name=\"label_anime_history\">애니메이션</string>\n    <string name=\"label_updates\">만화</string>\n    <string name=\"label_anime_updates\">애니메이션</string>\n    <string name=\"action_change_intro_length\">인트로 길이 변경</string>\n    <string name=\"notification_episodes_single\">에피소드 %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">에피소드 %1$s와 그 외 %2$d</string>\n    <string name=\"notification_episodes_multiple\">에피소드 %1$s</string>\n    <string name=\"episode_settings\">에피소드 설정</string>\n    <string name=\"pref_backup_flags\">백업 옵션</string>\n    <string name=\"label_manga_extensions\">만화 확장 앱</string>\n    <string name=\"label_anime_extensions\">애니메이션 확장 앱</string>\n    <string name=\"label_migration_manga\">만화 데이터 이전</string>\n    <string name=\"label_migration_anime\">애니메이션 데이터 이전</string>\n    <string name=\"settings\">설정</string>\n    <string name=\"copied_video_link_to_clipboard\">영상 화질 링크 주소가 클립보드에 복사되었습니다</string>\n    <string name=\"choose_video_quality\">동영상 화질 선택:</string>\n    <string name=\"extension_settings\">확장 앱 설정</string>\n    <string name=\"theme_cottoncandy\">솜사탕</string>\n    <string name=\"theme_mocha\">모카</string>\n    <string name=\"pref_episode_swipe_end\">오른쪽으로 스와이프</string>\n    <string name=\"pref_episode_swipe_start\">왼쪽으로 스와이프</string>\n    <string name=\"pref_category_hide_hidden\">카테고리 화면에서 카테고리 숨기기</string>\n    <string name=\"pref_update_anime_release_grace_period\">예상 애니메이션 예정 기간</string>\n    <string name=\"data_saver_exclude\">데이터 절약에서 제외</string>\n    <string name=\"data_saver_stop_exclude\">데이터 절약에서 제외 중지</string>\n    <string name=\"data_saver\">데이터 절약</string>\n    <string name=\"data_saver_summary\">다운로드/로딩 시 이미지 압축</string>\n    <string name=\"data_saver_downloader\">다운로드 시 데이터 절약 사용</string>\n    <string name=\"data_saver_ignore_jpeg\">Jpeg 이미지 무시</string>\n    <string name=\"data_saver_ignore_gif\">Gif 애니메이션 무시</string>\n    <string name=\"data_saver_image_quality\">이미지 품질</string>\n    <string name=\"data_saver_image_quality_summary\">값이 높으면 이미지 품질이 좋게 저장되지만 파일 크기가 커지게 됩니다. 80%는 좋은 파일 크기와 이미지 품질 사이의 중간값입니다</string>\n    <string name=\"data_saver_image_format\">Jpeg로 압축</string>\n    <string name=\"data_saver_image_format_summary_on\">Jpeg 파일은 Webp보다 파일 사이즈가 작지만(더 많은 데이터가 절약), 이미지의 품질이 더 떨어집니다.\n\\nJpeg로 압축을 진행합니다</string>\n    <string name=\"data_saver_image_format_summary_off\">Jpeg 파일은 Webp보다 파일 사이즈가 작지만(더 많은 데이터가 절약), 이미지의 품질이 더 떨어집니다.\n\\nWebp로 압축을 진행합니다</string>\n    <string name=\"data_saver_color_bw\">흑백으로 변환</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (Bandwidth Hero 프록시 서버가 필요합니다)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero 프록시 서버</string>\n    <string name=\"data_saver_server_summary\">Bandwidth Hero 프록시 서버 URL 주소를 입력해 주세요</string>\n    <string name=\"download_slots_info\">자체 호스팅 또는 무제한 소스에서만 동시에 다운로드됩니다</string>\n    <string name=\"unseen\">보지 않음</string>\n    <string name=\"label_manga_extension_repos\">만화 확장앱 저장소</string>\n    <string name=\"label_anime_extension_repos\">애니메이션 확장앱 저장소</string>\n    <string name=\"onboarding_storage_action_create_folder\">기본 Aniyomi 폴더 생성</string>\n    <string name=\"download_speed_limit\">다운로드 속도 제한</string>\n    <string name=\"download_speed_limit_hint\">속도 제한을 비활성화하려면 0으로 설정하세요.</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/lt/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Paspauskite atgal dar kartą, kad išeitumėte</string>\n    <string name=\"pref_library_summary\">Kategorijos, visuotinis atnaujinimas</string>\n    <string name=\"pref_library_update_show_tab_badge\">Rodyti neperskaitytų skyrių skaičių prie \\\"Naujiniai\\\" ikonos</string>\n    <string name=\"manga_categories\">Kategorijos</string>\n    <string name=\"action_sort_last_seen\">Paskiausiai žiurėtas</string>\n    <string name=\"action_sort_unseen_count\">Neperžiūrėtų skaičius</string>\n    <string name=\"action_mark_as_seen\">Pažymėti kaip peržiūrėtą</string>\n    <string name=\"action_mark_as_unseen\">Pažymėti kaip nežiūrėtą</string>\n    <string name=\"action_display_local_badge_manga\">Vietinis šaltinis</string>\n    <string name=\"default_manga_category\">Numatyta kategorija</string>\n    <string name=\"pref_manga_library_update_categories_details\">Įrašai, kurie yra įtraukti į neįtraukiamas kategorijas, nebus atnaujinami, net jei yra įtraukti į įtrauktąsias kategorijas.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Neįtrauktos kategorijos</string>\n    <string name=\"pref_clear_manga_database\">Išvalyti duomenų bazę</string>\n    <string name=\"pref_clear_manga_database_summary\">Ištrinkite įrašų istoriją, kurie nėra išsaugoti jūsų bibliotekoje</string>\n    <string name=\"snack_add_to_manga_library\">Pridėti į biblioteką?</string>\n    <string name=\"download_error\">Klaida</string>\n    <string name=\"download_paused\">Pristabdyta</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/lv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Kategorijas, globāli atjauninājumi, nodaļu vilkšana</string>\n    <string name=\"action_hide\">Paslēpt</string>\n    <string name=\"label_all\">Visi</string>\n    <string name=\"label_category\">Kategorija</string>\n    <string name=\"manga_categories\">Manga Kategorijas</string>\n    <string name=\"general_categories\">Kategorijas</string>\n    <string name=\"anime_categories\">Anime Kategorijas</string>\n    <string name=\"chapters_episodes\">Nodaļas un epizodes</string>\n    <string name=\"episodes\">Epizodes</string>\n    <string name=\"action_display_local_badge_manga\">Lokālais avots</string>\n    <string name=\"default_manga_category\">Noklusētā kategorija</string>\n    <string name=\"pref_manga_library_update_categories_details\">Izslēgto kategoriju manga netiks atjaunināta, pat ja tās ir arī iekļautajās kategorijās.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Izslēgtās kategorijas</string>\n    <string name=\"pref_clear_manga_database\">Notīrīt datu bāzi</string>\n    <string name=\"pref_clear_manga_database_summary\">Dzēst vēsturi preikš manga, kas nav saglabāta bibliotēkā</string>\n    <string name=\"snack_add_to_manga_library\">Pievienot manga bibliotēkai?</string>\n    <string name=\"download_notifier_download_paused_chapters\">Lejuplāde pauzēta</string>\n    <string name=\"channel_new_chapters_episodes\">Nodaļu atjauninājumi</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ml/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">പുറത്തുകടക്കാൻ വീണ്ടും പിന്‍ ബട്ടൺ അമർത്തുക</string>\n    <string name=\"action_filter_started\">ആരംഭിച്ചു</string>\n    <string name=\"action_sort_airing_time\">സംപ്രേഷണ സമയം</string>\n    <string name=\"action_reorganize_by\">പുനഃക്രമീകരിക്കുക</string>\n    <string name=\"download_speed_limit_hint\">വേഗപരിധി അപ്രാപ്തമാക്കാൻ 0 ആയി സജ്ജമാക്കുക.</string>\n    <string name=\"action_display_unseen_badge\">കാണാത്ത എപ്പിസോഡുകൾ</string>\n    <string name=\"relative_time_now\">ഇപ്പോൾ</string>\n    <string name=\"download_ahead_info\">നിലവിലെ അദ്ധ്യായം/എപ്പിസോഡ് + അടുത്തത് ഡൗൺലോഡ് ചെയ്‌തിട്ടുണ്ടെങ്കിൽ മാത്രമേ പ്രവർത്തിക്കൂ.</string>\n    <string name=\"non_library_settings\">വായിച്ച/കണ്ട എല്ലാ എൻട്രികളും</string>\n    <string name=\"action_sort_last_manga_update\">അവസാന മാംഗ അപ്‌ഡേറ്റ്</string>\n    <string name=\"manga\">മാംഗ</string>\n    <string name=\"action_show_manga\">മാംഗയെ കാണിക്കൂ</string>\n    <string name=\"action_display_show_continue_reading_button\">കാണുന്നത്/വായന തുടരുക ബട്ടൺ</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/mr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_filter_started\">चालु केले</string>\n    <string name=\"manga_categories\">श्रेण्या</string>\n    <string name=\"default_manga_category\">मूलभूत श्रेणी</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ms/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_reorganize_by\">Susun semula</string>\n    <string name=\"pref_library_summary\">Kategori, Kemas kini keseluruhan, leret bab</string>\n    <string name=\"pref_library_update_show_tab_badge\">Tunjuk bilangan belum dibaca pada ikon Kemas kini</string>\n    <string name=\"pref_general_summary\">Bahasa apl, pemberitahuan</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">nilam</string>\n    <string name=\"theme_doom\">azab</string>\n    <string name=\"theme_matrix\">Matriks</string>\n    <string name=\"manga_categories\">Kategori</string>\n    <string name=\"action_display_local_badge_manga\">Sumber setempat</string>\n    <string name=\"default_manga_category\">Kategori lalai</string>\n    <string name=\"pref_manga_library_update_categories_details\">Entri di dalam kategori berkecuali tidak akan dikemas kini walaupun ianya ada di dalam kategori hanya.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Kategori dikecualikan</string>\n    <string name=\"pref_clear_manga_database\">Hapus pangkalan data</string>\n    <string name=\"pref_clear_manga_database_summary\">Hapus sejarah entri yang tidak disimpan di dalam pustaka</string>\n    <string name=\"snack_add_to_manga_library\">Tambah ke pustaka?</string>\n    <string name=\"download_error\">Ralat</string>\n    <string name=\"download_paused\">Ditangguh</string>\n    <string name=\"download_notifier_download_paused_chapters\">Muat turun dihentikan sebentar</string>\n    <string name=\"channel_new_chapters_episodes\">Pengemaskinian bab</string>\n    <string name=\"manga\">Komik</string>\n    <string name=\"action_add_repo_message\">Tambahkan repo pada %s. Ini mestilah URL yang berakhir dengan \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Hanya berfungsi jika bab/episod semasa + yang seterusnya telah dimuat turun.</string>\n    <string name=\"action_sort_last_manga_update\">Kemas kini komik terakhir</string>\n    <string name=\"action_show_manga\">Tunjukkan komik</string>\n    <string name=\"action_display_show_continue_reading_button\">Butang teruskan menonton/membaca</string>\n    <string name=\"pref_update_only_completely_read\">Langkau penyertaan dengan episod yang tidak dilihat/bab yang belum dibaca</string>\n    <string name=\"pref_category_delete_chapters\">Padamkan bab/episod</string>\n    <string name=\"pref_remove_after_marked_as_read\">Selepas ditanda secara manual sebagai dibaca/dilihat</string>\n    <string name=\"pref_remove_after_read\">Selepas ditanda secara manual sebagai dibaca/dilihat</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Benarkan pemadaman bab/episod yang ditanda halaman</string>\n    <string name=\"pref_auto_update_manga_sync\">Kemas kini kemajuan selepas membaca/menonton</string>\n    <string name=\"pref_clear_chapter_cache\">Kosongkan cache bab dan episod</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Kosongkan cache episod/bab semasa pelancaran apl</string>\n    <string name=\"clear_database_confirmation\">Adakah anda pasti? Episod dan bab yang lengkap serta kemajuan entri bukan perpustakaan akan hilang</string>\n    <string name=\"pref_incognito_mode_summary\">Menjeda sejarah anda</string>\n    <string name=\"manga_from_library\">Komik dari perpustakaan</string>\n    <string name=\"also_set_chapter_settings_for_library\">Juga digunakan untuk semua komik di perpustakaan saya</string>\n    <string name=\"dialog_with_checkbox_reset\">Tetapkan semula semua bab untuk komik ini</string>\n    <string name=\"download_insufficient_space\">Tidak dapat memuat turun kerana ruang storan yang rendah</string>\n    <string name=\"download_queue_size_warning\">Amaran: muat turun pukal yang besar boleh menyebabkan sumber menjadi lebih perlahan dan/atau menyekat Aniyomi. Ketik untuk mengetahui lebih lanjut.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Paksa apl menyemak semula bab dan episod yang dimuat turun</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/my/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">စာကြည့်တိုက်အနှစ်ချုပ်</string>\n    <string name=\"pref_library_update_show_tab_badge\">အိုင်ကွန်ပေါ်တွင် မဖတ်ရသေးတဲ့ အရေအတွက်ကို ပြသပါ</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/nb-rNO/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Kategorier, global oppdatering, kapittelsveip</string>\n    <string name=\"pref_library_update_show_tab_badge\">Vis antall uleste på oppdateringsikonet</string>\n    <string name=\"manga_categories\">Kategorier</string>\n    <string name=\"action_display_local_badge_manga\">Lokal kilde</string>\n    <string name=\"default_manga_category\">Standard kategori</string>\n    <string name=\"pref_manga_library_update_categories_details\">Oppførninger i utelukkede kategorier vil ikke bli oppdatert selv om de også er i inkluderte kategorier.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Utelukkede kategorier</string>\n    <string name=\"pref_clear_manga_database\">Tøm database</string>\n    <string name=\"pref_clear_manga_database_summary\">Slett historikk for oppføringer som ikke er lagret i biblioteket ditt</string>\n    <string name=\"snack_add_to_manga_library\">Legg til i bibliotek?</string>\n    <string name=\"download_error\">Feil</string>\n    <string name=\"download_paused\">Pauset</string>\n    <string name=\"download_notifier_download_paused_chapters\">Nedlasting pauset</string>\n    <string name=\"channel_new_chapters_episodes\">Kapitteloppdateringer</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ne/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">वर्गहरू, ग्लोबल अपडेट, अध्याय स्वाइप</string>\n    <string name=\"pref_library_update_show_tab_badge\">अपडेट आइकनमा नपढिएको संख्या देखाउनुहोस्</string>\n    <string name=\"manga_categories\">वर्गहरू</string>\n    <string name=\"action_display_local_badge_manga\">लोकल माङ्गा</string>\n    <string name=\"default_manga_category\">पूर्वनिर्धारित वर्ग</string>\n    <string name=\"pref_manga_library_update_categories_details\">\\\"बहिष्कृत\\\" वर्गहरूमा रहेका माङ्गा \\\"समावेश गरिएका\\\" वर्गहरूमा भए पनि अपडेट हुने छैनन्।</string>\n    <string name=\"pref_remove_exclude_categories_manga\">बहिष्कृत वर्गहरू</string>\n    <string name=\"pref_clear_manga_database\">डाटाबेस खाली गर्नुहोस्</string>\n    <string name=\"pref_clear_manga_database_summary\">पुस्तकालयमा नभएका माङ्गाको इतिहास हटाउनुहोस्</string>\n    <string name=\"snack_add_to_manga_library\">माङ्गा पुस्तकालयमा राख्ने?</string>\n    <string name=\"download_error\">त्रुटि</string>\n    <string name=\"download_paused\">रोकिएको</string>\n    <string name=\"download_notifier_download_paused_chapters\">डाउनलोडहरु रोकियो</string>\n    <string name=\"channel_new_chapters_episodes\">अध्याय अपडेटहरू</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/nl/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Druk opnieuw op terug om te sluiten</string>\n    <string name=\"action_filter_started\">Begonnen</string>\n    <string name=\"action_sort_airing_time\">Uitzendtijd</string>\n    <string name=\"pref_library_summary\">Categorieën, globaal bijwerken</string>\n    <string name=\"pref_library_update_show_tab_badge\">Geef ongelezen aantal weer op het Update icoon</string>\n    <string name=\"manga_categories\">Manga Categorieën</string>\n    <string name=\"general_categories\">Categorieën</string>\n    <string name=\"anime_categories\">Anime Categorieën</string>\n    <string name=\"chapters_episodes\">Hoofdstukken en afleveringen</string>\n    <string name=\"episodes\">Afleveringen</string>\n    <string name=\"backup_settings_warning\">Let op! Een back-up van je instellingen bevat ook de tracker wachtwoorden. Deel dit back-upbestand niet!</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"pref_bottom_nav_no_history\">Verplaats Geschiedenis naar Meer</string>\n    <string name=\"pref_bottom_nav_no_updates\">Verplaats Updates naar Meer</string>\n    <string name=\"pref_bottom_nav_no_manga\">Verplaats Manga naar Meer</string>\n    <string name=\"pref_bottom_nav_no_browse\">Verplaats Bladeren naar Meer</string>\n    <string name=\"action_filter_unseen\">Onbekeken</string>\n    <string name=\"action_display_local_badge_manga\">Lokale manga</string>\n    <string name=\"default_manga_category\">Standaard categorie</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga in uitgesloten categorieën worden niet bijgewerkt, zelfs niet als ze onder opgenomen categorieën vallen.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Uitgesloten categoriën</string>\n    <string name=\"pref_clear_manga_database\">Database leegmaken</string>\n    <string name=\"pref_clear_manga_database_summary\">Verwijder geschiedenis voor manga die niet in je bibliotheek zijn opgeslagen</string>\n    <string name=\"snack_add_to_manga_library\">Manga toevoegen aan bibliotheek?</string>\n    <string name=\"download_error\">Fout</string>\n    <string name=\"download_paused\">Gepauzeerd</string>\n    <string name=\"download_unseen\">Onbekeken</string>\n    <string name=\"confirm_delete_episodes\">Weet je zeker dat je de geselecteerde afleveringen wilt verwijderen?</string>\n    <string name=\"download_notifier_download_paused_chapters\">Download gepauzeerd</string>\n    <string name=\"channel_new_chapters_episodes\">Hoofdstukupdates</string>\n    <string name=\"data_saver_exclude\">Uitsluiten van databesparing</string>\n    <string name=\"data_saver_stop_exclude\">Stop met uitsluiten van databesparing</string>\n    <string name=\"data_saver\">Databesparing</string>\n    <string name=\"data_saver_summary\">Afbeeldingen comprimeren voordat je ze downloadt of in de reader laadt</string>\n    <string name=\"data_saver_downloader\">Gebruik databespaarder voor downloads</string>\n    <string name=\"data_saver_ignore_jpeg\">Negeer JPEG-afbeeldingen</string>\n    <string name=\"data_saver_ignore_gif\">Negeer GIF-animaties</string>\n    <string name=\"data_saver_image_quality\">Afbeeldingskwaliteit</string>\n    <string name=\"data_saver_image_quality_summary\">Hogere waarden resulteren in een hogere beeldkwaliteit, maar ook in een grotere bestandsgrootte. 80% is een goed compromis tussen bestandsgrootte en beeldkwaliteit</string>\n    <string name=\"data_saver_image_format\">Comprimeren naar JPEG</string>\n    <string name=\"data_saver_image_format_summary_on\">JPEG-bestanden zijn aanzienlijk kleiner dan WebP (waardoor je data bespaart), maar ten koste van de beeldkwaliteit.\n\\nMomenteel wordt er gecomprimeerd naar JPEG</string>\n    <string name=\"data_saver_image_format_summary_off\">JPEG-bestanden zijn aanzienlijk kleiner dan WebP (waardoor je data bespaart), maar ten koste van de beeldkwaliteit.\n\\nMomenteel wordt er gecomprimeerd naar WebP</string>\n    <string name=\"data_saver_color_bw\">Omzetten naar zwart-wit</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (vereist een Bandwidth Hero Proxy server)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy Server</string>\n    <string name=\"data_saver_server_summary\">Voer hier de URL van de Bandwidth Hero Proxy server in</string>\n    <string name=\"download_slots_info\">Downloadt alleen gelijktijdig van zelf gehoste of onbeperkte bronnen</string>\n    <string name=\"unseen\">Onbekeken</string>\n    <string name=\"label_manga_extension_repos\">Bronnen voor Manga extensies</string>\n    <string name=\"label_anime_extension_repos\">Bronnen voor Anime extensies</string>\n    <string name=\"onboarding_storage_action_create_folder\">Maak standaard Aniyomi-map</string>\n    <string name=\"download_speed_limit\">Beperk downloadsnelheid</string>\n    <string name=\"download_speed_limit_hint\">Zet op 0 voor onbeperkte downloadsnelheid.</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/nn/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Trykk tilbake igjen for å gå ut</string>\n    <string name=\"action_filter_started\">Starta</string>\n    <string name=\"action_sort_airing_time\">Kringkastingstid</string>\n    <string name=\"local_source_badge\">Lokal</string>\n    <string name=\"manga_categories\">Manga Kategoriar</string>\n    <string name=\"action_edit_manga_categories\">Endra manga kategoriar</string>\n    <string name=\"action_display_local_badge_manga\">Lokal manga</string>\n    <string name=\"default_manga_category\">Standard kategori</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga i utelatne kategoriar vil ikkje bli oppdatert sjølv om dei òg er i inkluderte kategoriar.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Utelatne kategoriar</string>\n    <string name=\"snack_add_to_manga_library\">Legg manga til i bibliotek?</string>\n    <string name=\"download_error\">Feil</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/pl/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Następny nieobejrzany odcinek</item>\n        <item quantity=\"few\">Następne %d nieobejrzane odcinki</item>\n        <item quantity=\"many\">Następne %d nieobejrzane odcinki</item>\n        <item quantity=\"other\">Następne %d nieobejrzane odcinki</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s odcinek</item>\n        <item quantity=\"few\">%1$s odcinki</item>\n        <item quantity=\"many\">%1$s odcinków</item>\n        <item quantity=\"other\">%1$s odcinków</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Następny odcinek</item>\n        <item quantity=\"few\">Następne %d odcinki</item>\n        <item quantity=\"many\">Następnych %d odcinków</item>\n        <item quantity=\"other\">Następnych %d odcinków</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Dla 1 tytuł</item>\n        <item quantity=\"few\">Dla %d tytułów</item>\n        <item quantity=\"many\">Dla %d tytułów</item>\n        <item quantity=\"other\">Dla %d tytułów</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 Nowy odcinek</item>\n        <item quantity=\"few\">%1$d Nowy odcinki</item>\n        <item quantity=\"many\">%1$d Nowych odcinków</item>\n        <item quantity=\"other\">%1$d Nowych odcinków</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d sekunda</item>\n        <item quantity=\"few\">%d sekundy</item>\n        <item quantity=\"many\">%d sekund</item>\n        <item quantity=\"other\">%d sekund</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Odcinki %1$s i 1 więcej</item>\n        <item quantity=\"few\">Odcinki %1$s i %2$d więcej</item>\n        <item quantity=\"many\">Odcinki %1$s i %2$d więcej</item>\n        <item quantity=\"other\">Odcinki %1$s i %2$d więcej</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/pl/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Naciśnij do tyłu jeszcze raz aby wyjść</string>\n    <string name=\"action_filter_started\">Zaczęte</string>\n    <string name=\"action_sort_airing_time\">Data wydania/transmisji</string>\n    <string name=\"action_reorganize_by\">Reorganizuj</string>\n    <string name=\"relative_time_now\">Teraz</string>\n    <string name=\"pref_library_summary\">Kategorie, aktualizacja globalna, przesunięcie rozdziału</string>\n    <string name=\"pref_library_update_show_tab_badge\">Pokaż wskaźnik nieprzeczytanych na ikonie Aktualizacje</string>\n    <string name=\"pref_progress_mark_as_seen\">W jakim momencie oznaczyć odcinek jako obejrzany</string>\n    <string name=\"pref_preserve_watching_position\">Zachowaj postęp oglądania na obejrzanych odcinkach</string>\n    <string name=\"pref_category_player_orientation\">Orientacja odtwarzacza</string>\n    <string name=\"rotation_reverse_landscape\">Odwrotny tryb krajobrazowy</string>\n    <string name=\"rotation_sensor_portrait\">Sensor portret</string>\n    <string name=\"rotation_sensor_landscape\">Sensor krajobrazowa</string>\n    <string name=\"pref_remember_brightness\">Pamiętaj i przełącz się na ostatnio użyty poziom jasności</string>\n    <string name=\"pref_remember_volume\">Pamiętaj i przełącz się na ostatnio użyty poziom głośnośći</string>\n    <string name=\"pref_player_fullscreen\">Pokaż zawartość w wycięciu ekranu</string>\n    <string name=\"pref_player_hide_controls\">Ukryj kontrolki odtwarzacza podczas otwierania odtwarzacza</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Włącz automatyczne pomijanie</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Włącz styl Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Limit czasu przycisku</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 sekund</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 sekund</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip wymaga aby anime było śledzone przez MAL lub Anilist aby działało</string>\n    <string name=\"pref_enable_aniskip\">Włącz AniSkip</string>\n    <string name=\"pref_category_pip\">Obraz-w-obrazie</string>\n    <string name=\"pref_enable_pip\">Włącz tryb obrazu w obrazie</string>\n    <string name=\"pref_pip_episode_toasts\">Wyświetl komunikaty odcinków podczas przełączania się między odcinkami w trybie obrazu w obrazie</string>\n    <string name=\"pref_pip_on_exit\">Automatycznie przełączaj się w tryb obrazu w obrazie po wyjściu z odtwarzacza</string>\n    <string name=\"pref_category_external_player\">Odtwarzacz zewnętrzny</string>\n    <string name=\"pref_always_use_external_player\">Zawsze używaj zewnętrznego odtwarzacza</string>\n    <string name=\"pref_external_player_preference\">Preferencja zewnętrznego odtwarzacza</string>\n    <string name=\"enable_volume_brightness_gestures\">Włącz gesty głośności i jasności</string>\n    <string name=\"pref_category_player_seeking\">Pzewijanie</string>\n    <string name=\"enable_horizontal_seek_gesture\">Włącz gest przewijania poziomego</string>\n    <string name=\"pref_default_intro_length\">Domyślna długość pomijania wstępu</string>\n    <string name=\"pref_intro_length\">Długość pomijania wstępu</string>\n    <string name=\"pref_skip_length\">Czas przewinięcia po dwukrotnym kliknięciu do pominięcia</string>\n    <string name=\"pref_skip_disable\">Wyłącz</string>\n    <string name=\"pref_player_smooth_seek\">Włącz precyzyjne przeszukiwanie</string>\n    <string name=\"pref_player_smooth_seek_summary\">Po włączeniu, przeszukiwanie nie będzie się koncentrować na klatkach kluczowych, co prowadzi do wolniejszego, ale precyzyjnego przeszukiwania</string>\n    <string name=\"pref_debanding_title\">Usuwanie artefaktów</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_mpv_conf\">Edytuj plik konfiguracyjny MPV w celu dalszej konfiguracji odtwarzacza</string>\n    <string name=\"video_fit_screen\">Dopasuj do ekranu</string>\n    <string name=\"video_crop_screen\">Przycięte do ekranu</string>\n    <string name=\"video_stretch_screen\">Rozciągnięte</string>\n    <string name=\"enable_auto_play\">Auto-play jest włączone</string>\n    <string name=\"disable_auto_play\">Auto-play jest wyłączone</string>\n    <string name=\"player_aniskip_dontskip\">Nie pomiń</string>\n    <string name=\"player_aniskip_dontskip_toast\">Pomijanie %s za %d sekund</string>\n    <string name=\"player_aniskip_skip\">Pominięto %s</string>\n    <string name=\"no_next_episode\">Następny odcinek nie został znaleziony!</string>\n    <string name=\"player_hwdec_mode\">Ustaw domyślny tryb dekodowania sprzętowego</string>\n    <string name=\"screenshot_show_subs\">Pokaż napisy na zrzucie ekranu</string>\n    <string name=\"pref_general_summary\">Język aplikacji, powiadomienia</string>\n    <string name=\"theme_sapphire\">Szafir</string>\n    <string name=\"theme_doom\">Zagłada</string>\n    <string name=\"theme_matrix\">Matryca</string>\n    <string name=\"action_hide\">Ukryj</string>\n    <string name=\"label_all\">Wszystkie</string>\n    <string name=\"label_category\">Kategorie</string>\n    <string name=\"manga_categories\">Kategorie</string>\n    <string name=\"general_categories\">Kategorie</string>\n    <string name=\"anime_categories\">Kategorie anime</string>\n    <string name=\"entries\">Pozycje w bibliotece</string>\n    <string name=\"chapters_episodes\">Rozdziały i odcinki</string>\n    <string name=\"episodes\">Odcinki</string>\n    <string name=\"backup_settings_warning\">Ostrzeżenie: Tworzenie kopii zapasowej ustawień spowoduje zapisanie również haseł do ścieżek, nie udostępniaj tego pliku nikomu!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Aktualizacje Anime</string>\n    <string name=\"label_manga_sources\">Źródła Mangi</string>\n    <string name=\"label_anime_sources\">Źródła Anime</string>\n    <string name=\"label_watched_duration\">Czas oglądania</string>\n    <string name=\"label_watched_episodes\">Obejrzane</string>\n    <string name=\"pref_library_manga_columns\">Liczba mang w rzędzie</string>\n    <string name=\"pref_library_anime_columns\">Liczba anime w rzędzie</string>\n    <string name=\"pref_bottom_nav_no_history\">Przenieś Historię to zakładki Więcej</string>\n    <string name=\"pref_bottom_nav_no_updates\">Przenieś Aktualizacje do zakładki Więcej</string>\n    <string name=\"pref_bottom_nav_no_manga\">Przenieś Manga do zakładki Więcej</string>\n    <string name=\"action_filter_unseen\">Nie obejrzane</string>\n    <string name=\"action_global_manga_search\">Globalne wyszukiwanie mangi</string>\n    <string name=\"action_global_anime_search\">Globalne wyszukiwanie Anime</string>\n    <string name=\"action_sort_total_episodes\">Liczba odcinków</string>\n    <string name=\"action_sort_last_seen\">Ostatnio widziany</string>\n    <string name=\"action_sort_last_checked\">Ostatnio sprawdzony</string>\n    <string name=\"action_sort_latest_episode\">Najnowszy odcinek</string>\n    <string name=\"action_sort_last_anime_update\">Ostatnia aktualizacja anime</string>\n    <string name=\"action_sort_unseen_count\">Liczba nie obejrzanych</string>\n    <string name=\"action_sort_episode_fetch_date\">Data pobrania odcinka</string>\n    <string name=\"action_mark_as_seen\">Oznacz jako obejrzane</string>\n    <string name=\"action_mark_as_unseen\">Oznacz jako nieobejrzane</string>\n    <string name=\"action_mark_previous_as_seen\">Oznacz jako widziane wcześniej</string>\n    <string name=\"action_play_internally\">Odtwórz wewnętrznie</string>\n    <string name=\"action_play_externally\">Odtwórz zewnętrznie</string>\n    <string name=\"action_download_unread\">Pobierz nieprzeczytane rozdziały</string>\n    <string name=\"action_download_unseen\">Pobierz nieobejrzane odcinki</string>\n    <string name=\"action_bookmark_episode\">Dodaj odcinek do zakładek</string>\n    <string name=\"action_remove_bookmark_episode\">Usuń odcinek z zakładek</string>\n    <string name=\"action_edit_anime_categories\">Edytuj kategorie anime</string>\n    <string name=\"action_edit_manga_categories\">Edytuj kategorie mangi</string>\n    <string name=\"action_view_episodes\">Zobacz odcinki</string>\n    <string name=\"action_previous_episode\">Poprzedni odcinek</string>\n    <string name=\"action_play\">Odtwórz</string>\n    <string name=\"action_next_episode\">Następny odcinek</string>\n    <string name=\"action_screen_fit\">Tryb dopasowania do ekranu</string>\n    <string name=\"action_show_anime\">Pokaż anime</string>\n    <string name=\"action_display_download_badge_anime\">Pobrane odcinki</string>\n    <string name=\"action_display_local_badge_manga\">Manga lokalne</string>\n    <string name=\"action_display_local_badge_anime\">Anime lokalne</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Tylko przeszukaj przypięte źródła mangi w globalnym wyszukiwaniu</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Tylko przeszukaj przypięte źródła anime w globalnym wyszukiwaniu</string>\n    <string name=\"pref_hide_in_manga_library_items\">Ukryj wpisy mangi już w bibliotece</string>\n    <string name=\"pref_hide_in_anime_library_items\">Ukryj wpisy anime już w bibliotece</string>\n    <string name=\"action_order_by_episode_number\">Według numeru odcinka</string>\n    <string name=\"action_start_download_externally\">Użyj zewnętrznego programu do pobierania</string>\n    <string name=\"action_start_download_internally\">Użyj wewnętrznego programu do pobierania</string>\n    <string name=\"pref_bottom_nav_style\">Styl dolnej nawigacji</string>\n    <string name=\"pref_default_home_tab_library\">Ustaw stronę startową na zakładke mangi</string>\n    <string name=\"default_manga_category\">Domyślna kategoria</string>\n    <string name=\"default_anime_category\">Domyślna kategoria anime</string>\n    <string name=\"pref_manga_library_update_categories_details\">Tytuły w wykluczonych kategoriach nie będą aktualizowane, nawet jeśli są również w uwzględnionych kategoriach.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime w wykluczonych kategoriach nie będzie aktualizowane, nawet jeśli znajdują się również w uwzględnionych kategoriach.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">To rozszerzenie nie pochodzi z oficjalnej listy rozszerzeń Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">To rozszerzenie nie pochodzi z oficjalnej listy rozszerzeń Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Wykluczone kategorie</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Wyłączone kategorie anime</string>\n    <string name=\"pref_category_external_downloader\">Zewnętrzny program do pobierania</string>\n    <string name=\"pref_use_external_downloader\">Zawsze używaj zewnętrznego programu do pobierania dla anime</string>\n    <string name=\"pref_external_downloader_selection\">Preferowana aplikacja do pobierania</string>\n    <string name=\"pref_download_new_episodes\">Pobierz nowe odcinki</string>\n    <string name=\"auto_download_while_watching\">Automatycznie pobieraj podczas oglądania</string>\n    <string name=\"download_ahead_info_anime\">Działa tylko na wpisy w bibliotece jeśli obecny odcinek oraz następny są już pobrane</string>\n    <string name=\"pref_track_on_add_library\">Otwórz menu po dodaniu do biblioteki</string>\n    <string name=\"pref_show_next_episode_airing_time\">Pokaż czas emisji następnego odcinka</string>\n    <string name=\"pref_backup_flags_summary\">Jakie informacje zawrzeć w pliku kopii zapasowej</string>\n    <string name=\"used_cache_both\">Używane przez anime: %1$s, używane przez manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Wyczyść bazę danych</string>\n    <string name=\"pref_clear_anime_database\">Wyczyść bazę danych Anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Usuń historię mang, których nie ma w twojej bibliotece</string>\n    <string name=\"pref_clear_anime_database_summary\">Usuń historię dla anime które nie są zapisane w twojej bibliotece</string>\n    <string name=\"anime_from_library\">Anime z biblioteki</string>\n    <string name=\"downloaded_episodes\">Pobrane odcinki</string>\n    <string name=\"local_manga_source\">Lokalne źródło mangi</string>\n    <string name=\"local_anime_source\">Lokalne źródło anime</string>\n    <string name=\"episode_not_found\">Odcinek nie znaleziony</string>\n    <string name=\"local_invalid_episode_format\">Nieprawidłowy format odcinka</string>\n    <string name=\"unknown_studio\">Nieznane studio</string>\n    <string name=\"delete_downloads_for_anime\">Usunąć pobrane odcinki?</string>\n    <string name=\"snack_add_to_manga_library\">Dodać mangę do biblioteki?</string>\n    <string name=\"snack_add_to_anime_library\">Dodaj anime do biblioteki?</string>\n    <string name=\"display_mode_episode\">Odcinek %1$s</string>\n    <string name=\"episode_downloading_progress\">Pobieranie (%d%%)</string>\n    <string name=\"download_error\">Błąd</string>\n    <string name=\"download_paused\">Wstrzymane</string>\n    <string name=\"show_episode_number\">Numer odcinka</string>\n    <string name=\"sort_by_episode_number\">Według numeru odcinka</string>\n    <string name=\"download_unseen\">Nieobejrzany</string>\n    <string name=\"confirm_delete_episodes\">Czy na pewno chcesz usunąć wybrane odcinki?</string>\n    <string name=\"also_set_episode_settings_for_library\">zastosuj również do wszystkie anime w mojej bibliotece</string>\n    <string name=\"no_episodes_error\">Nie znaleziono odcinków</string>\n    <string name=\"watching\">Oglądanie</string>\n    <string name=\"currently_reading\">W trakcie czytania</string>\n    <string name=\"currently_watching\">W trakcie Oglądania</string>\n    <string name=\"plan_to_watch\">Planowane do obejrzenia</string>\n    <string name=\"not_interesting\">Nieinteresujące</string>\n    <string name=\"want_to_read\">Chcę przeczytać</string>\n    <string name=\"want_to_watch\">Chcę obejrzeć</string>\n    <string name=\"repeating_anime\">Ponowne oglądanie</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Spowoduje to usunięcie daty oglądania tego odcinka. Jesteś pewny?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Zresetuj wszystkie odcinki dla tego anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Postęp: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Postęp: %1$s</string>\n    <string name=\"recent_anime_time\">Odc. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Nie znaleziono wideo</string>\n    <string name=\"notification_new_episodes\">Znaleziono nowe odcinki</string>\n    <string name=\"information_no_recent_anime\">Nic niedawno nie oglądane</string>\n    <string name=\"episode_settings_updated\">Aktualizowane domyślne ustawienia odcinków</string>\n    <string name=\"download_notifier_download_paused_chapters\">Pobieranie wstrzymane</string>\n    <string name=\"download_notifier_download_paused_episodes\">Pobieranie odcinka zostało wstrzymane</string>\n    <string name=\"channel_new_chapters_episodes\">Aktualizacje rozdziałów</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Zmień długość intro</string>\n    <string name=\"notification_episodes_single\">Odcinek %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Odcinek %1$s i jeszcze %2$d</string>\n    <string name=\"notification_episodes_multiple\">Odcinki %1$s</string>\n    <string name=\"episode_settings\">Ustawienia odcinka</string>\n    <string name=\"pref_backup_flags\">Opcje kopii zapasowej</string>\n    <string name=\"label_manga_extensions\">Rozszerzenia mangi</string>\n    <string name=\"label_anime_extensions\">Rozszerzenia anime</string>\n    <string name=\"label_migration_manga\">Migruj Manga</string>\n    <string name=\"label_migration_anime\">Migruj Anime</string>\n    <string name=\"settings\">Ustawienia</string>\n    <string name=\"copied_video_link_to_clipboard\">Skopiowany link jakośc wideo do schowka</string>\n    <string name=\"choose_video_quality\">Wybierz jakość wideo:</string>\n    <string name=\"extension_settings\">Ustawienia rozszerzeń</string>\n    <string name=\"pref_episode_swipe_end\">Akcja przesunięcia w prawo</string>\n    <string name=\"pref_episode_swipe_start\">Odcinek po przesunięciu w lewo</string>\n    <string name=\"data_saver_summary\">Kompresuj obrazy przed pobraniem lub załadowaniem do czytnika</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignoruj obrazy JPEG</string>\n    <string name=\"data_saver_ignore_gif\">Ignoruj animacje GIF</string>\n    <string name=\"data_saver_image_quality\">Jakość Obrazu</string>\n    <string name=\"data_saver_image_quality_summary\">Wyższe wartości oznaczają, że zapisywany jest wyższy procent jakości obrazu, ale też oznacza że rozmiar pliku jest większy. 80 procent to dobra mediana między rozmiarem pliku a jakością obrazu</string>\n    <string name=\"data_saver_image_format\">Kompresuj jako Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Rozmiar pliku JPEG jest znacznie mniejszy niż rozmiar pliku WebP (co oznacza że jest oszczędzane więcej danych), ale powoduje to również większą utratę jakości obrazów.\n\\nObecnie kompresowane jako Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Rozmiar pliku JPEG jest znacznie mniejszy niż rozmiar pliku WebP (co oznacza że jest oszczędzane więcej danych), ale powoduje to również większą utratę jakości obrazów\n\\nObecnie kompresowane jako Webp</string>\n    <string name=\"data_saver_color_bw\">Konwertuj na czarno-białe</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (Wymaga serwera Proxy Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Serwer Proxy Bandwidth Hero</string>\n    <string name=\"data_saver_server_summary\">wpisz adres URL z serwera Bandwidth Hero Proxy</string>\n    <string name=\"action_display_unseen_badge\">Nieobejrzane odcinki</string>\n    <string name=\"action_stop\">Zatrzymaj</string>\n    <string name=\"action_continue\">Kontynuuj</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Zachowanie rozdziału</string>\n    <string name=\"action_add_repo_message\">Dodaj dodatkowe repozytoria do %s. Powinien to być adres URL kończący się na „index.min.json”.</string>\n    <string name=\"download_ahead_info\">Działa jedynie, gdy obecny odcinek/rodział i następny są już pobrane.</string>\n    <string name=\"non_library_settings\">Wszystkie przeczytane/obejrzane wpisy</string>\n    <string name=\"action_sort_last_manga_update\">Ostatnia aktualizacja mangi</string>\n    <string name=\"action_show_manga\">Pokaż mangę</string>\n    <string name=\"action_display_show_continue_reading_button\">Przycisk kontynuacji oglądania/czytania</string>\n    <string name=\"pref_update_only_completely_read\">Pomiń wpisy z nieobejrzanymi odcinkami/nieprzeczytanymi rozdziałami</string>\n    <string name=\"pref_category_delete_chapters\">Usuń rozdziały/odcinki</string>\n    <string name=\"pref_remove_after_marked_as_read\">Po manualnym oznaczeniu jako przeczytane/obejrzane</string>\n    <string name=\"pref_remove_after_read\">Po przeczytaniu/obejrzeniu automatycznie usuń</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Zezwól na usuwanie rozdziałów/odcinków dodanych do zakładek</string>\n    <string name=\"pref_auto_update_manga_sync\">Uaktualnij postęp po czytaniu/oglądaniu</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Uaktualnij postęp po oznaczeniu jako przeczytane/obejrzane</string>\n    <string name=\"pref_clear_chapter_cache\">Wyczyść pamięć podręczną rozdziałów i odcinków</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Wyczyść pamięć podręczną odcinków/rozdziałów przy uruchamianiu aplikacji</string>\n    <string name=\"clear_database_confirmation\">Na pewno? Obejrzane odcinki, przeczytane rozdziały i postęp wpisów spoza biblioteki zostaną usunięte</string>\n    <string name=\"pref_incognito_mode_summary\">Wstrzymuje historię</string>\n    <string name=\"manga_from_library\">Manga z biblioteki</string>\n    <string name=\"also_set_chapter_settings_for_library\">Odnosi się też do wszystkich mang w mojej bibliotece</string>\n    <string name=\"dialog_with_checkbox_reset\">Zresetuj wszystkie rozdziały dla tej mangi</string>\n    <string name=\"no_prev_episode\">Poprzedni odcinek nie został znaleziony!</string>\n    <string name=\"no_available_videos\">Brak dostępnych filmów</string>\n    <string name=\"no_hosters\">Lista hostów jest pusta</string>\n    <string name=\"no_episode_loaded\">Nie załadowano odcinka</string>\n    <string name=\"select_hoster_from_empty_list\">Host wybrany z pustej listy</string>\n    <string name=\"player_sheets_delay_set_as_default\">Ustawiony jako domyślny</string>\n    <string name=\"player_sheets_track_delay\">Opóźnienie</string>\n    <string name=\"player_sheets_track_palette\">Paleta</string>\n    <string name=\"player_sheets_audio_delay_title\">Opóźnienie dźwięku</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Słyszany dźwięk</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Dźwięk dostrzeżony</string>\n    <string name=\"player_sheets_sub_delay_title\">Opóźnienie napisów</string>\n    <string name=\"player_sheets_sub_delay_speed\">Prędkość</string>\n    <string name=\"player_sheets_sub_delay_delay\">Opóźnienie</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Główny</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Dodatkowy</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Oba</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Słyszany głos</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Widziany tekst</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Słyszany dźwięk</string>\n    <string name=\"download_insufficient_space\">Nie można pobrać z powodu małej ilości miejsca na dysku</string>\n    <string name=\"download_queue_size_warning\">Ostrzeżenie: masowe pobieranie dużych plików może prowadzić do spowolnienia i/lub zablokowania źródeł Aniyomi. Dotknij, aby dowiedzieć się więcej.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Wymuś ponowne sprawdzenie pobranych rozdziałów i odcinków przez aplikację</string>\n    <string name=\"label_player_settings\">Ustawienia odtwarzacza</string>\n    <string name=\"label_player\">Odtwarzacz</string>\n    <string name=\"action_search_player_settings\">Wyszukaj ustawień odtwarzacza</string>\n    <string name=\"pref_player_settings_summary\">Wbudowany odtwarzacz, gesty, dekodery, napisy</string>\n    <string name=\"pref_player_internal\">Wbudowany odtwarzacz</string>\n    <string name=\"pref_player_internal_summary\">Postęp, kontrolki, orientacja</string>\n    <string name=\"rotation_video\">Wideo</string>\n    <string name=\"pref_category_controls\">Kontrolki</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Zezwól na użycie gestów w panelach</string>\n    <string name=\"pref_controls_show_loading\">Pokaż kółko ładowania</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Pokaż wskaźnik bieżącego rozdziału</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Pojawia się tylko wtedy, gdy wideo ma rozdziały</string>\n    <string name=\"pref_controls_display_volume_percentage\">Wyświetlaj głośność w procentach</string>\n    <string name=\"pref_hosters\">Hosterzy</string>\n    <string name=\"pref_hosters_show_failure\">Wyświetlaj nieudanych hosterów</string>\n    <string name=\"pref_hosters_show_empty\">Wyświetlaj pustych hosterów</string>\n    <string name=\"pref_show_system_bar\">Wyświetlanie paska stanu systemu z elementami sterującymi</string>\n    <string name=\"pref_reduce_motion\">Ogranicz animacje odtwarzacza</string>\n    <string name=\"pref_player_time_to_disappear\">Czas do ukrycia kontrolek odtwarzacza</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Przezroczystość panela</string>\n    <string name=\"pref_category_intro_skip\">Pomiń wstęp</string>\n    <string name=\"pref_enable_intro_skip\">Włącz pomijanie wstępu</string>\n    <string name=\"pref_disable_aniskip_chapter\">Wyłącz AniSkip, jeśli wideo zawiera rozdziały</string>\n    <string name=\"pref_pip_replace_with_previous\">Zastępuje przycisk pominięcia dziesięciu sekund przyciskiem poprzedniego odcinka</string>\n    <string name=\"pref_player_gestures\">Gesty</string>\n    <string name=\"pref_player_gestures_summary\">Szukanie, podwójne dotknięcie, kontrolki mediów</string>\n    <string name=\"pref_category_player_sliders\">Suwaki</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Zamień miejscami suwaki głośności i jasności</string>\n    <string name=\"pref_show_seekbar\">Pokaż pasek wyszukiwania podczas wyszukiwania</string>\n    <string name=\"pref_category_double_tap\">Podwójne dotknięcie</string>\n    <string name=\"pref_left_double_tap\">Podwójne dotknięcie (lewa)</string>\n    <string name=\"pref_center_double_tap\">Podwójne dotknięcie (środek)</string>\n    <string name=\"pref_right_double_tap\">Podwójne dotknięcie (prawa)</string>\n    <string name=\"pref_double_tap_info\">Gdy gest stuknięcia jest ustawiony jako niestandardowy, można go powiązać za pomocą input.conf. Kody klawiszy to 0x10001 dla lewej, 0x10002 dla środka i 0x10003 dla prawej.</string>\n    <string name=\"single_action_none\">Brak</string>\n    <string name=\"single_action_seek\">Szukaj</string>\n    <string name=\"single_action_playpause\">Odtwórz/Zatrzymaj</string>\n    <string name=\"single_action_switch\">Zmień odcinek</string>\n    <string name=\"single_action_custom\">Niestandardowa</string>\n    <string name=\"pref_category_media_controls\">Kontrolki mediów</string>\n    <string name=\"pref_media_previous\">Poprzedni</string>\n    <string name=\"pref_media_playpause\">Odtwórz/Zatrzymaj</string>\n    <string name=\"pref_media_next\">Następny</string>\n    <string name=\"pref_media_info\">Gdy sterowanie multimediami jest ustawione jako niestandardowe, można je powiązać za pomocą input.conf. Kody klawiszy to 0x10004 dla poprzedniego, 0x10005 dla odtwarzania/pauzy i 0x10006 dla następnego.</string>\n    <string name=\"pref_player_decoder\">Dekoder</string>\n    <string name=\"pref_player_decoder_summary\">Dekodowanie sprzętowe, format pikseli, debanding</string>\n    <string name=\"pref_try_hw\">Spróbuj dekodować sprzętowo</string>\n    <string name=\"pref_gpu_next_title\">Włącz gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Nowy backend renderowania wideo</string>\n    <string name=\"pref_debanding_none\">Brak</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Użyj formatu pikseli YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Może naprawić czarny ekran na niektórych kodekach wideo, może również poprawić wydajność kosztem jakości</string>\n    <string name=\"pref_player_subtitle\">Napisy</string>\n    <string name=\"pref_player_subtitle_summary\">Preferowane języki, biała lista, czarna lista</string>\n    <string name=\"pref_player_subtitle_lang\">Preferowane języki</string>\n    <string name=\"pref_player_subtitle_lang_info\">Język lub języki napisów, które mają być domyślnie wybierane w wideo z wieloma napisami, użyj dwu- lub trzyliterowych kodów języków. Przy wyborze wielu należy je oddzielić przecinkami.</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Nieprawidłowy kod: %s</string>\n    <string name=\"pref_player_subtitle_whitelist\">Biała lista</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Biała lista napisów. Jeśli zdefiniowano białą listę, użyty zostanie pierwszy napis zawierający słowo z białej listy. Przy wyborze wielu należy je oddzielić przecinkami.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Czarna lista</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Czarna lista napisów. Jeśli zdefiniowano czarną listę, wszystkie napisy zawierające słowo z czarnej listy zostaną odfiltrowane. Przy wyborze wielu należy je oddzielić przecinkami.</string>\n    <string name=\"pref_player_audio\">Dźwięk</string>\n    <string name=\"pref_player_audio_summary\">Preferowane języki, korekcja wysokości dźwięku, kanały dźwiękowe</string>\n    <string name=\"pref_player_audio_lang\">Preferowane języki</string>\n    <string name=\"pref_player_audio_channels\">Kanały audio</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_custom_button_add\">Dodaj przycisk</string>\n    <string name=\"pref_player_custom_button_edit\">Zmień przycisk</string>\n    <string name=\"pref_player_custom_button_title\">Tytuł</string>\n    <string name=\"pref_player_custom_button_error_exists\">Przycisk już istnieje!</string>\n    <string name=\"pref_player_custom_button_optional\">(opcjonalne)</string>\n    <string name=\"pref_player_custom_button_delete\">Usuń przycisk</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Czy chcesz usunąć przycisk %s?</string>\n    <string name=\"pref_player_custom_button_startup\">Po włączeniu</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/pt/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Próximos episódios não vistos</item>\n        <item quantity=\"many\">Próximos %d episódios não vistos</item>\n        <item quantity=\"other\">Próximos %d episódios não vistos</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s episódio</item>\n        <item quantity=\"many\">%1$s episódios</item>\n        <item quantity=\"other\">%1$s episódios</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Próximo episódio</item>\n        <item quantity=\"many\">Próximos %d episódios</item>\n        <item quantity=\"other\"/>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Para 1 título</item>\n        <item quantity=\"many\">Para %d títulos</item>\n        <item quantity=\"other\">Para %d títulos</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 novo episódio</item>\n        <item quantity=\"many\">%1$d novos episódios</item>\n        <item quantity=\"other\">%1$d novos episódios</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d segundo</item>\n        <item quantity=\"many\">%d segundos</item>\n        <item quantity=\"other\">%d segundos</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Episódios %1$s e mais 1</item>\n        <item quantity=\"many\">Episódios %1$s e %2$d mais</item>\n        <item quantity=\"other\">Episódios %1$s e %2$d mais</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/pt/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Pressione Voltar para sair</string>\n    <string name=\"action_filter_started\">Começar</string>\n    <string name=\"action_sort_airing_time\">Horário de exibição</string>\n    <string name=\"action_reorganize_by\">Reordenar</string>\n    <string name=\"relative_time_now\">Novo</string>\n    <string name=\"pref_library_summary\">Categorias, atualização global, trocar de capítulo</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostrar número de capítulos não lidos no ícone de Atualizações</string>\n    <string name=\"pref_progress_mark_as_seen\">Em que ponto marcar o episódio como visto</string>\n    <string name=\"pref_preserve_watching_position\">Lembrar a posição de reprodução nos episódios vistos</string>\n    <string name=\"pref_category_player_orientation\">Orientação</string>\n    <string name=\"rotation_reverse_landscape\">Paisagem reversa</string>\n    <string name=\"rotation_sensor_portrait\">Retrato (Sensor)</string>\n    <string name=\"rotation_sensor_landscape\">Paisagem (Sensor)</string>\n    <string name=\"pref_remember_brightness\">Lembrar e mudar para o último brilho usado</string>\n    <string name=\"pref_remember_volume\">Lembrar e mudar para o último volume usado</string>\n    <string name=\"pref_player_fullscreen\">Mostrar conteúdo no recorte de exibição</string>\n    <string name=\"pref_player_hide_controls\">Ocultar os controlos de reprodução ao abrir o reprodutor</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Ativar ignorar automático</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Ativar estilo da Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Tempo limite do botão</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 segundos</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip requer a animação para ser rastreado com MAL ou Anilist para funcionar</string>\n    <string name=\"pref_enable_aniskip\">Ativar AniSkip</string>\n    <string name=\"pref_category_pip\">Imagem-sobre-Imagem (PiP)</string>\n    <string name=\"pref_enable_pip\">Ativar o uso do modo PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Mostrar toasts de episódios ao alternar episódios no modo PiP</string>\n    <string name=\"pref_pip_on_exit\">Mudar automaticamente para o modo PiP ao sair do reprodutor</string>\n    <string name=\"pref_pip_replace_with_previous\">Substitui a opção de Ignorar 10 segundos com o episódio Anterior</string>\n    <string name=\"pref_category_external_player\">Reprodutor externo</string>\n    <string name=\"pref_always_use_external_player\">Usar sempre o reprodutor externo</string>\n    <string name=\"pref_external_player_preference\">Preferência do reprodutor externo</string>\n    <string name=\"enable_volume_brightness_gestures\">Ativar Gestos de Volume e Brilho</string>\n    <string name=\"pref_category_player_seeking\">A procurar</string>\n    <string name=\"enable_horizontal_seek_gesture\">Ativar Gesto de Procurar Horizontal</string>\n    <string name=\"pref_default_intro_length\">Duração predefinida de ignorar a introdução</string>\n    <string name=\"pref_intro_length\">Duração de ignorar a introdução</string>\n    <string name=\"pref_skip_length\">Duração do toque duplo para ignorar</string>\n    <string name=\"pref_skip_disable\">Desativar</string>\n    <string name=\"pref_player_smooth_seek\">Ativar procura precisa</string>\n    <string name=\"pref_player_smooth_seek_summary\">Quando ativado, a busca não será limitada aos quadros-chave, resultando em uma busca mais lenta, porém precisa</string>\n    <string name=\"pref_gpu_next_title\">Ativar renderização prévia</string>\n    <string name=\"pref_gpu_next_subtitle\">Nova renderização de vídeo em segundo-plano</string>\n    <string name=\"pref_debanding_title\">Remoção de faixas</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_player_audio_channels\">Canais de Áudio</string>\n    <string name=\"pref_player_audio_channels_stereo\">Estéreo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Estéreo Invertido</string>\n    <string name=\"pref_mpv_conf\">Editar o ficheiro de configuração MPV para obter mais definições do reprodutor</string>\n    <string name=\"pref_reset_mpv_conf\">Reiniciar o ficheiro de configuração MPV</string>\n    <string name=\"pref_mpv_input\">Editar o ficheiro de entrada MPV para a configuração de mapeamento de teclado</string>\n    <string name=\"video_fit_screen\">Ajustar ao ecrã</string>\n    <string name=\"video_crop_screen\">Cortado ao ecrã</string>\n    <string name=\"video_stretch_screen\">Esticado ao ecrã</string>\n    <string name=\"enable_auto_play\">A reprodução automática está ativada</string>\n    <string name=\"disable_auto_play\">A reprodução automática está desativada</string>\n    <string name=\"player_aniskip_dontskip\">Não saltar</string>\n    <string name=\"player_aniskip_dontskip_toast\">Saltar %s em %d segundos</string>\n    <string name=\"player_aniskip_skip\">%s saltado</string>\n    <string name=\"no_next_episode\">Episódio seguinte não encontrado!</string>\n    <string name=\"player_hwdec_mode\">Modo de descodificação por hardware</string>\n    <string name=\"screenshot_show_subs\">Mostrar legendas na captura de ecrã</string>\n    <string name=\"pref_general_summary\">Linguagem do aplicativo, notificações</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Safira</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_preserve_reading_position\">Preservar a posição de leitura nos capítulos lidos</string>\n    <string name=\"pref_download_slots\">Máximo de downloads</string>\n    <string name=\"local_source_badge\">Local</string>\n    <string name=\"anime_interval_expected_update\">Novos episódios previstos para serem lançados em torno de %1$s, verificando a cada %2$s.</string>\n    <string name=\"download_notifier_download_finish\">Download concluído</string>\n    <string name=\"action_hide\">Ocultar</string>\n    <string name=\"label_all\">Todos</string>\n    <string name=\"label_category\">Categoria</string>\n    <string name=\"manga_categories\">Categorias de Mangá</string>\n    <string name=\"general_categories\">Categorias</string>\n    <string name=\"anime_categories\">Categorias de Anime</string>\n    <string name=\"entries\">Entradas da biblioteca</string>\n    <string name=\"chapters_episodes\">Capítulos e episódios</string>\n    <string name=\"episodes\">Episódios</string>\n    <string name=\"backup_settings_warning\">Aviso: o backup das configurações também armazenará as suas palavras-passe de rasteamento, então não compartilhe este ficheiro de backup!</string>\n    <string name=\"label_manga_library\">Mangá</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Mangá</string>\n    <string name=\"label_recent_anime_updates\">Atualizações de anime</string>\n    <string name=\"label_manga_sources\">Fontes de Mangá</string>\n    <string name=\"label_anime_sources\">Fontes de Anime</string>\n    <string name=\"label_watched_duration\">Duração assistida</string>\n    <string name=\"label_watched_episodes\">Visto</string>\n    <string name=\"pref_start_screen\">Tela inicial</string>\n    <string name=\"pref_library_manga_columns\">Mangás por linha</string>\n    <string name=\"pref_library_anime_columns\">Anime por fileira</string>\n    <string name=\"pref_bottom_nav_no_history\">Mover Histórico para o separador Mais</string>\n    <string name=\"pref_bottom_nav_no_updates\">Mover Atualizações para o separador Mais</string>\n    <string name=\"pref_bottom_nav_no_manga\">Mover Mangá para o separador Mais</string>\n    <string name=\"action_filter_unseen\">Não visto</string>\n    <string name=\"action_global_manga_search\">Pesquisa Global de Mangás</string>\n    <string name=\"action_global_anime_search\">Pesquisa Global de Animes</string>\n    <string name=\"action_sort_total_episodes\">Total de episódios</string>\n    <string name=\"action_sort_last_seen\">Visto da última vez</string>\n    <string name=\"action_sort_last_checked\">Última verificação</string>\n    <string name=\"action_sort_latest_episode\">Último episódio</string>\n    <string name=\"action_sort_last_anime_update\">Última atualização de anime</string>\n    <string name=\"action_sort_unseen_count\">Itens não vistos</string>\n    <string name=\"action_sort_episode_fetch_date\">Data de episódios</string>\n    <string name=\"action_mark_as_seen\">Marcar como assistido</string>\n    <string name=\"action_mark_as_unseen\">Marcar como não assistido</string>\n    <string name=\"action_mark_previous_as_seen\">Marcar anterior como visto</string>\n    <string name=\"action_play_internally\">Reproduzir internamente</string>\n    <string name=\"action_play_externally\">Reproduzir externamente</string>\n    <string name=\"action_download_unread\">Descarregar capítulos não lidos</string>\n    <string name=\"action_download_unseen\">Descarregar episódios não assistidos</string>\n    <string name=\"action_bookmark_episode\">Marcar episódio</string>\n    <string name=\"action_remove_bookmark_episode\">Desmarcar episódio</string>\n    <string name=\"action_edit_anime_categories\">Editar categorias de animes</string>\n    <string name=\"action_edit_manga_categories\">Editar categorias de mangás</string>\n    <string name=\"action_view_episodes\">Ver episódios</string>\n    <string name=\"action_previous_episode\">Episódio anterior</string>\n    <string name=\"action_play\">Reproduzir</string>\n    <string name=\"action_next_episode\">Próximo episódio</string>\n    <string name=\"action_screen_fit\">Modo de ajuste de ecrã</string>\n    <string name=\"action_show_anime\">Mostrar anime</string>\n    <string name=\"action_display_download_badge_anime\">Episódios descarregados</string>\n    <string name=\"action_display_local_badge_manga\">Mangás locais</string>\n    <string name=\"action_display_local_badge_anime\">Anime local</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Pesquisar apenas em fontes de manga fixadas na pesquisa global</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Pesquisar apenas em fontes de anime fixadas na pesquisa global</string>\n    <string name=\"pref_hide_in_manga_library_items\">Ocultar entradas de manga já na biblioteca</string>\n    <string name=\"pref_hide_in_anime_library_items\">Ocultar entradas de anime já na biblioteca</string>\n    <string name=\"action_order_by_episode_number\">Por número do episódio</string>\n    <string name=\"action_start_download_externally\">Usar downloader externo</string>\n    <string name=\"action_start_download_internally\">Usar downloader interno</string>\n    <string name=\"pref_bottom_nav_style\">Estilo de navegação inferior</string>\n    <string name=\"pref_default_home_tab_library\">Definir o ecrã inicial para o separador Mangá</string>\n    <string name=\"default_manga_category\">Categoria de mangá padrão</string>\n    <string name=\"default_anime_category\">Categoria de anime padrão</string>\n    <string name=\"pref_manga_library_update_categories_details\">Os mangás nas categorias excluídas não serão atualizados, mesmo que também estejam nas categorias incluídas.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Os animes nas categorias excluídas não serão atualizados, mesmo que também estejam nas categorias incluídas.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Esta extensão não está na lista oficial de extensões do Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Esta extensão não está na lista oficial de extensões do Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categorias de mangá excluídas</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Categorias de anime excluídas</string>\n    <string name=\"pref_category_external_downloader\">Downloader externo</string>\n    <string name=\"pref_use_external_downloader\">Sempre usar downloader externo para anime</string>\n    <string name=\"pref_external_downloader_selection\">App de download preferido</string>\n    <string name=\"pref_download_new_episodes\">Descarregar novos episódios</string>\n    <string name=\"auto_download_while_watching\">Descarregar automaticamente enquanto assiste</string>\n    <string name=\"download_ahead_info_anime\">Funciona apenas em entradas na biblioteca e se o episódio atual e o próximo já estiverem descarregados</string>\n    <string name=\"pref_track_on_add_library\">Abrir o menu de rastreadores ao adicionar à biblioteca</string>\n    <string name=\"pref_show_next_episode_airing_time\">Mostrar horário de exibição do próximo episódio</string>\n    <string name=\"pref_backup_flags_summary\">Quais informações incluir no ficheiro de backup</string>\n    <string name=\"pref_anime_storage_usage\">Uso de armazenamento de anime</string>\n    <string name=\"pref_manga_storage_usage\">Uso de armazenamento de mangá</string>\n    <string name=\"used_cache_both\">Usado por anime: %1$s, usado por mangá: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Limpar base de dados de mangá</string>\n    <string name=\"pref_clear_anime_database\">Limpar base de dados de anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Eliminar o histórico de mangás não guardados na biblioteca</string>\n    <string name=\"pref_clear_anime_database_summary\">Eliminar o histórico de animes não guardados na biblioteca</string>\n    <string name=\"anime_from_library\">Animes da biblioteca</string>\n    <string name=\"downloaded_episodes\">Episódios descarregados</string>\n    <string name=\"local_manga_source\">Fonte local de mangá</string>\n    <string name=\"local_anime_source\">Fonte local de anime</string>\n    <string name=\"episode_not_found\">Episódio não encontrado</string>\n    <string name=\"local_invalid_episode_format\">Formato de episódio inválido</string>\n    <string name=\"unknown_studio\">Estúdio desconhecido</string>\n    <string name=\"delete_confirmation\">Tem certeza de que deseja excluir \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Apagar episódios descarregados?</string>\n    <string name=\"snack_add_to_manga_library\">Adicionar mangá à biblioteca?</string>\n    <string name=\"snack_add_to_anime_library\">Adicionar anime à biblioteca?</string>\n    <string name=\"display_mode_episode\">Episódio %1$s</string>\n    <string name=\"episode_downloading_progress\">A descarregar (%d%%)</string>\n    <string name=\"download_error\">Erro</string>\n    <string name=\"download_paused\">Pausado</string>\n    <string name=\"show_episode_number\">Número do episódio</string>\n    <string name=\"sort_by_episode_number\">Por número de episódio</string>\n    <string name=\"download_unseen\">Não visto</string>\n    <string name=\"confirm_delete_episodes\">Tens a certeza de que desejas apagar os episódios selecionados?</string>\n    <string name=\"also_set_episode_settings_for_library\">Também aplicar a todos os animes na minha biblioteca</string>\n    <string name=\"no_episodes_error\">Nenhum episódio encontrado</string>\n    <string name=\"watching\">Assistindo</string>\n    <string name=\"currently_reading\">Lendo atualmente</string>\n    <string name=\"currently_watching\">Assistindo atualmente</string>\n    <string name=\"plan_to_watch\">Pretendo assistir</string>\n    <string name=\"not_interesting\">Desinteressante</string>\n    <string name=\"want_to_read\">Quero ler</string>\n    <string name=\"want_to_watch\">Quero assistir</string>\n    <string name=\"repeating_anime\">Reassistir</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Isto removerá a data de exibição deste episódio. Tens a certeza?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Repor todos os episódios deste anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Progresso: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Progresso: %1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Nenhum vídeo encontrado</string>\n    <string name=\"notification_new_episodes\">Novos episódios encontrados</string>\n    <string name=\"information_no_recent_anime\">Nada assistido recentemente</string>\n    <string name=\"episode_settings_updated\">Configurações de episódio padrão atualizadas</string>\n    <string name=\"download_notifier_download_paused_chapters\">Descargas pausados</string>\n    <string name=\"download_notifier_download_paused_episodes\">Download de episódio pausado</string>\n    <string name=\"channel_new_chapters_episodes\">Atualizações de capítulos/episódios</string>\n    <string name=\"label_storage\">Armazenamento</string>\n    <string name=\"label_history\">Mangá</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Mangá</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Alterar a duração da abertura</string>\n    <string name=\"notification_episodes_single\">Episódio %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episódio %1$s e %2$d mais</string>\n    <string name=\"notification_episodes_multiple\">Episódios %1$s</string>\n    <string name=\"episode_settings\">Configurações do episódio</string>\n    <string name=\"pref_backup_flags\">Opções de backup</string>\n    <string name=\"label_manga_extensions\">Extensões de Mangá</string>\n    <string name=\"label_anime_extensions\">Extensões de Anime</string>\n    <string name=\"label_migration_manga\">Migrar Mangás</string>\n    <string name=\"label_migration_anime\">Migrar Animes</string>\n    <string name=\"settings\">Configurações</string>\n    <string name=\"copied_video_link_to_clipboard\">Ligação de qualidade de vídeo copiada para a área de transferência</string>\n    <string name=\"choose_video_quality\">Escolha a qualidade do vídeo:</string>\n    <string name=\"extension_settings\">Configurações de extensão</string>\n    <string name=\"theme_cottoncandy\">Algodão doce</string>\n    <string name=\"theme_mocha\">Café</string>\n    <string name=\"pref_episode_swipe_end\">deslize para a direita</string>\n    <string name=\"pref_episode_swipe_start\">Avançar para o episódio ao deslizar para a esquerda</string>\n    <string name=\"pref_category_hide_hidden\">Ocultar Categorias Ocultas das categorias e da tela de armazenamento</string>\n    <string name=\"pref_update_anime_release_grace_period\">Período de tempo previsto para lançamento</string>\n    <string name=\"data_saver_exclude\">Retirar da economia de dados</string>\n    <string name=\"data_saver_stop_exclude\">Parar exclusão da economia de dados</string>\n    <string name=\"data_saver\">Economia de dados</string>\n    <string name=\"data_saver_summary\">Comprimir imagens antes de baixar ou carregar no leitor</string>\n    <string name=\"data_saver_downloader\">Usar a economia de dados ao transferir</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignorar imagens Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Ignorar animações GIF</string>\n    <string name=\"data_saver_image_quality\">Qualidade de imagem</string>\n    <string name=\"data_saver_image_quality_summary\">Valores mais altos significam que uma porcentagem maior da qualidade da imagem é salva, mas também significa que o tamanho do arquivo é maior, 80% é uma boa mediana entre o tamanho do arquivo e a qualidade da imagem</string>\n    <string name=\"data_saver_image_format\">Comprimir para Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">O tamanho do ficheiro Jpeg é consideravelmente menor do que o Webp (o que significa que são guardados mais dados), mas faz com que as imagens percam mais qualidade. \\nAtualmente comprimido para Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">O tamanho do ficheiro Jpeg é consideravelmente menor do que o Webp (o que significa que são guardados mais dados), mas faz com que as imagens percam mais qualidade. \\nAtualmente comprimido para Webp</string>\n    <string name=\"data_saver_color_bw\">Converter para Preto e Branco</string>\n    <string name=\"bandwidth_hero\">Largura da Banda de Hero (requer um servidor Proxy da Largura da Banda de Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Servidor Proxy da Largura de Banda de Hero</string>\n    <string name=\"data_saver_server_summary\">Coloque o URL do servidor Proxy da Largura de Banda de Hero aqui</string>\n    <string name=\"download_slots_info\">Só será transferido simultaneamente das fontes auto hospedadas ou ilimitadas</string>\n    <string name=\"unseen\">Não visto</string>\n    <string name=\"label_manga_extension_repos\">Repositórios de extensão da manga</string>\n    <string name=\"label_anime_extension_repos\">Repositórios de extensão de anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Criar a pasta padrão para Aniyomi</string>\n    <string name=\"download_speed_limit\">Limite da velocidade de transferência do capítulo</string>\n    <string name=\"download_speed_limit_hint\">Defina para 0 para desativar o limite de velocidade.</string>\n    <string name=\"action_display_show_continue_reading_button\">Botão de continuar a ver/ler</string>\n    <string name=\"pref_remove_after_read\">Eliminar automaticamente depois de ler/ver</string>\n    <string name=\"pref_auto_update_manga_sync\">Atualizar progresso depois de ler/ver</string>\n    <string name=\"pref_category_delete_chapters\">Eliminar capítulos/episódios</string>\n    <string name=\"pref_remove_after_marked_as_read\">Depois de marcado manualmente como lido/visto</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir a eliminação de capítulos/episódios nos marcadores</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Atualizar progresso quando marcado como lido/visto</string>\n    <string name=\"pref_clear_chapter_cache\">Limpar a cache do capítulo e episódio</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Limpar a cache do episódio/capítulo ao iniciar a aplicação</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa o seu histórico</string>\n    <string name=\"manga_from_library\">Manga da biblioteca</string>\n    <string name=\"also_set_chapter_settings_for_library\">Também aplicar a todos os manga na minha biblioteca</string>\n    <string name=\"dialog_with_checkbox_reset\">Reiniciar todos os capítulos para esta manga</string>\n    <string name=\"label_player_settings\">Definições do reprodutor</string>\n    <string name=\"download_insufficient_space\">Não foi possível transferir devido à falta de espaço de armazenamento</string>\n    <string name=\"label_player\">Reprodutor</string>\n    <string name=\"action_search_player_settings\">Procurar definições do reprodutor</string>\n    <string name=\"pref_player_settings_summary\">Reprodutor interno, gestos, descodificadores, legendas</string>\n    <string name=\"pref_player_internal\">Reprodutor interno</string>\n    <string name=\"pref_player_internal_summary\">Progresso, controlos, orientação</string>\n    <string name=\"rotation_video\">Vídeo</string>\n    <string name=\"pref_category_controls\">Controlos</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Permitir gestos nos painéis</string>\n    <string name=\"pref_controls_show_loading\">Mostrar circulo de carregar</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Mostrar indicador do capítulo atual</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Só aparece se o vídeo tiver capítulos</string>\n    <string name=\"pref_controls_display_volume_percentage\">Exibir volume como percentagem</string>\n    <string name=\"pref_show_system_bar\">Mostrar a barra do estado do sistema com controlos</string>\n    <string name=\"pref_reduce_motion\">Reduzir a animação do reprodutor</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Opacidade do painel</string>\n    <string name=\"pref_category_intro_skip\">Ignorar introdução</string>\n    <string name=\"pref_enable_intro_skip\">Ativar ignorar introdução</string>\n    <string name=\"pref_disable_aniskip_chapter\">Desativar AniSkip se o vídeo já tiver capítulos</string>\n    <string name=\"pref_player_gestures\">Gestos</string>\n    <string name=\"pref_player_gestures_summary\">Procurar, toque duplo, controlos de multimédia</string>\n    <string name=\"pref_category_player_sliders\">Cursores</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Trocar cursor do volume e brilho</string>\n    <string name=\"pref_show_seekbar\">Mostrar barra de procurar quando pesquisar</string>\n    <string name=\"pref_category_double_tap\">Toque duplo</string>\n    <string name=\"pref_left_double_tap\">Toque duplo (esquerda)</string>\n    <string name=\"pref_center_double_tap\">Toque duplo (centro)</string>\n    <string name=\"pref_right_double_tap\">Toque duplo (direita)</string>\n    <string name=\"single_action_none\">Nenhuma</string>\n    <string name=\"single_action_seek\">Procurar</string>\n    <string name=\"single_action_playpause\">Reproduzir/Pausar</string>\n    <string name=\"single_action_switch\">Mudar episódio</string>\n    <string name=\"single_action_custom\">Personalizado</string>\n    <string name=\"pref_category_media_controls\">Controlos de multimédia</string>\n    <string name=\"pref_media_previous\">Anterior</string>\n    <string name=\"pref_media_playpause\">Reproduzir/Pausar</string>\n    <string name=\"pref_media_next\">Seguinte</string>\n    <string name=\"pref_player_decoder\">Descodificador</string>\n    <string name=\"pref_try_hw\">Tentar descodificação por hardware</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_player_subtitle\">Legendas</string>\n    <string name=\"pref_player_subtitle_summary\">Idiomas preferidos, lista branca, lista negra</string>\n    <string name=\"pref_player_subtitle_lang\">Idiomas preferidos</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Código inválido: \\\"%s\\\"</string>\n    <string name=\"pref_player_subtitle_whitelist\">Lista branca</string>\n    <string name=\"pref_player_subtitle_blacklist\">Lista negra</string>\n    <string name=\"pref_player_audio\">Áudio</string>\n    <string name=\"pref_player_audio_lang\">Idiomas preferidos</string>\n    <string name=\"pref_player_audio_channels_auto\">Automático</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_custom_button\">Botões personalizados</string>\n    <string name=\"pref_player_custom_button_header\">Editar botões personalizados</string>\n    <string name=\"pref_player_custom_button_add\">Adicionar botão</string>\n    <string name=\"pref_player_custom_button_edit\">Editar botão</string>\n    <string name=\"pref_player_custom_button_title\">Título</string>\n    <string name=\"pref_player_custom_button_error_exists\">O botão já existe!</string>\n    <string name=\"pref_player_custom_button_content\">Código da Lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Código da Lua (com pressionar longo)</string>\n    <string name=\"pref_player_custom_button_optional\">(opcional)</string>\n    <string name=\"pref_player_custom_button_delete\">Botão de Eliminar</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Deseja eliminar o botão %s?</string>\n    <string name=\"pref_player_custom_button_startup\">No arranque</string>\n    <string name=\"pref_player_custom_button_id\">(Id.: %d)</string>\n    <string name=\"pref_player_editor\">Editor de Script</string>\n    <string name=\"pref_player_editor_script\">Scripts</string>\n    <string name=\"pref_player_editor_script_opts\">Opções de Script</string>\n    <string name=\"editor_save_error\">Não é possível guardar o ficheiro</string>\n    <string name=\"editor_save_success\">Ficheiro guardado</string>\n    <string name=\"editor_action_rename\">Renomear ficheiro</string>\n    <string name=\"editor_action_delete\">Eliminar ficheiro</string>\n    <string name=\"editor_file_already_exists\">O ficheiro já existe</string>\n    <string name=\"editor_invalid_filename\">Nome de ficheiro inválido</string>\n    <string name=\"editor_create_file\">Criar ficheiro</string>\n    <string name=\"editor_edit_file\">Editar nome do ficheiro</string>\n    <string name=\"editor_filename\">Nome do ficheiro</string>\n    <string name=\"editor_create_error\">Não é possível criar o ficheiro</string>\n    <string name=\"editor_rename_error\">Não é possível renomear o ficheiro</string>\n    <string name=\"editor_delete_error\">Não é possível eliminar o ficheiro</string>\n    <string name=\"editor_delete_file\">Eliminar ficheiro</string>\n    <string name=\"editor_delete_file_confirmation\">Deseja eliminar o ficheiro \\\"%s\\\"?</string>\n    <string name=\"pref_player_advanced\">Avançado</string>\n    <string name=\"pref_player_advanced_summary\">Ficheiros do utilizador, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_user_files\">Usar ficheiros do utilizador MPV</string>\n    <string name=\"pref_mpv_user_files_summary\">Usar ficheiros na diretoria mpv-config</string>\n    <string name=\"player_skip_action\">Saltar %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s saltado</string>\n    <string name=\"player_chapter_type_opening\">Abertura</string>\n    <string name=\"player_chapter_type_ending\">Encerramento</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Valor muito grande</string>\n    <string name=\"numeric_chooser_value_too_small\">Valor muito pequeno</string>\n    <string name=\"no_prev_episode\">Episódio anterior não encontrado!</string>\n    <string name=\"no_available_videos\">Sem vídeos disponíveis</string>\n    <string name=\"player_sheets_delay_set_as_default\">Definir como predefinição</string>\n    <string name=\"player_sheets_track_delay\">Atraso</string>\n    <string name=\"player_sheets_track_palette\">Paleta</string>\n    <string name=\"player_sheets_audio_delay_title\">Atraso de áudio</string>\n    <string name=\"player_sheets_sub_delay_speed\">Velocidade</string>\n    <string name=\"player_sheets_sub_delay_delay\">Atraso</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primário</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Secundário</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Ambos</string>\n    <string name=\"player_sheets_sub_colors_title\">Cores</string>\n    <string name=\"player_sheets_subtitles_color_text\">Texto</string>\n    <string name=\"player_sheets_subtitles_color_border\">Margem</string>\n    <string name=\"player_sheets_subtitles_color_background\">Fundo</string>\n    <string name=\"player_sheets_sub_color_red\">Vermelho</string>\n    <string name=\"player_sheets_sub_color_green\">Verde</string>\n    <string name=\"player_sheets_sub_color_blue\">Azul</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alfa</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Definições das legendas</string>\n    <string name=\"player_sheets_sub_typography_title\">Tipografia</string>\n    <string name=\"player_sheets_sub_typography_font\">Tipo de letra</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Tamanho da letra</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Estilo da margem</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Tamanho da margem</string>\n    <string name=\"player_sheets_sub_misc_title\">Diversos</string>\n    <string name=\"player_sheets_sub_position\">Posição</string>\n    <string name=\"player_sheets_filters_title\">Filtros</string>\n    <string name=\"player_sheets_filters_brightness\">Brilho</string>\n    <string name=\"player_sheets_filters_contrast\">Contraste</string>\n    <string name=\"player_sheets_filters_gamma\">Gama</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturação</string>\n    <string name=\"player_sheets_filters_hue\">Tonalidade</string>\n    <string name=\"player_sheets_qualities_title\">Qualidades</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Mais</string>\n    <string name=\"pref_audio_channels\">Canais de áudio</string>\n    <string name=\"player_sheets_stats_page_chip\">Página %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Botões personalizados</string>\n    <string name=\"player_seek_n_seconds\">%d segundos</string>\n    <string name=\"timer_picker_enter_timer\">Inserir duração</string>\n    <string name=\"timer_remaining\">%s restante</string>\n    <string name=\"timer_picker_pick_time\">Escolher duração</string>\n    <string name=\"player_sheets_speed_slider_label\">Velocidade</string>\n    <string name=\"player_sheets_speed_make_default\">Criar velocidade predefinida</string>\n    <string name=\"player_sheets_add_ext_sub\">Adicionar legendas externas</string>\n    <string name=\"action_display_unseen_badge\">Episódios não vistos</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Comportamento do capítulo</string>\n    <string name=\"non_library_settings\">Todas as entradas lidas/vistas</string>\n    <string name=\"action_sort_last_manga_update\">Última atualização da manga</string>\n    <string name=\"action_show_manga\">Mostrar manga</string>\n    <string name=\"action_stop\">Parar</string>\n    <string name=\"action_continue\">Continuar</string>\n    <string name=\"action_add_repo_message\">Adicione repositórios a %s. Deve ser uma URL que termine com \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Só funciona se o capítulo/episódio atual + o próximo já tiverem sido baixados.</string>\n    <string name=\"pref_update_only_completely_read\">Pular entradas com episódios não vistos/capítulos não lidos</string>\n    <string name=\"clear_database_confirmation\">Tem certeza? Episódios completos, capítulos e progresso de entradas fora da biblioteca serão perdidos</string>\n    <string name=\"download_queue_size_warning\">Aviso: downloads em massa podem fazer com que as fontes fiquem mais lentas e/ou bloqueiem o Aniyomi. Toque para saber mais.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forçar o aplicativo a verificar novamente os capítulos e episódios baixados</string>\n    <string name=\"pref_hosters_show_failure\">Exibir hosters com falha</string>\n    <string name=\"pref_player_time_to_disappear\">Tempo até ocultar controle do player</string>\n    <string name=\"pref_double_tap_info\">Quando um gesto de toque é definido como Personalizado, ele pode ser vinculado por meio do arquivo input.conf. Os códigos de tecla são 0x10001 para esquerda, 0x10002 para centro e 0x10003 para direita.</string>\n    <string name=\"pref_media_info\">Quando um controle de mídia é definido como Personalizado, ele pode ser vinculado por meio do arquivo input.conf. Os códigos de tecla são 0x10004 para anterior, 0x10005 para reproduzir/pausar e 0x10006 para próximo.</string>\n    <string name=\"pref_player_decoder_summary\">Decodificação por hardware, Formato de pixel, Remoção de faixas</string>\n    <string name=\"pref_debanding_none\">Nenhum</string>\n    <string name=\"pref_use_yuv420p_title\">Usar o formato de pixel YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Pode corrigir telas pretas em alguns codecs de vídeo e também melhorar o desempenho, com possível perda de qualidade</string>\n    <string name=\"pref_player_subtitle_lang_info\">Idioma(s) da legenda a ser selecionado por padrão em vídeos com múltiplas legendas. Códigos de idioma de duas ou três letras funcionam. Múltiplos valores podem ser separados por vírgula.</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Filtro para legendas: se ativado, será usada a primeira legenda que contenha alguma palavra da lista autorizada. Você pode separar várias palavras com vírgulas.</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Filtro negativo para legendas: se configurado, todas as legendas que contiverem alguma palavra da lista proibida serão excluídas. Você pode separar várias palavras com vírgulas.</string>\n    <string name=\"pref_player_audio_summary\">Idiomas preferidos, correção de afinação, canais de áudio</string>\n    <string name=\"pref_player_audio_lang_info\">Idioma(s) do áudio selecionado por padrão em vídeos com várias faixas de áudio. Use códigos de idioma de duas ou três letras. Vários valores podem ser separados por vírgula.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Ativar correção de afinação do áudio</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Impede que o áudio se torne agudo em velocidades mais rápidas e grave em velocidades mais lentas</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Auto-salvar</string>\n    <string name=\"pref_player_custom_button_summary\">Execute código lua com botões personalizados</string>\n    <string name=\"player_sheets_sub_scale\">Escala</string>\n    <string name=\"player_hoster_failed\">Falha ao carregar vídeos</string>\n    <string name=\"player_sheets_tracks_off\">Desativado</string>\n    <string name=\"timer_title\">Temporizador de desligamento</string>\n    <string name=\"player_sheets_chapters_title\">Capítulos</string>\n    <string name=\"pref_library_rows\">Tamanho da lista</string>\n    <string name=\"custom_button_settings\">Botões personalizados</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"player_sheets_add_ext_audio\">Adicionar faixas de áudio externas</string>\n    <string name=\"player_hoster_tap_to_load\">Toque para carregar vídeos</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/pt-rBR/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Próximos episódios não vistos</item>\n        <item quantity=\"many\">Próximos %d episódios não vistos</item>\n        <item quantity=\"other\">Próximos %d episódios não vistos</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s episódio</item>\n        <item quantity=\"many\">%1$s episódios</item>\n        <item quantity=\"other\">%1$s episódios</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Próximo episódio</item>\n        <item quantity=\"many\">Próximos %d episódios</item>\n        <item quantity=\"other\">Próximos %d episódios</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Para 1 título</item>\n        <item quantity=\"many\">Para %d títulos</item>\n        <item quantity=\"other\">Para %d títulos</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 novo episódio</item>\n        <item quantity=\"many\">%1$d novos episódios</item>\n        <item quantity=\"other\">%1$d novos episódios</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d segundo</item>\n        <item quantity=\"many\">%d segundos</item>\n        <item quantity=\"other\">%d segundos</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Episódios %1$s e mais 1</item>\n        <item quantity=\"many\">Episódios %1$s e %2$d mais</item>\n        <item quantity=\"other\">Episódios %1$s e %2$d mais</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/pt-rBR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Ativar busca horizontal</string>\n    <string name=\"action_filter_started\">Começou</string>\n    <string name=\"action_sort_airing_time\">No ar</string>\n    <string name=\"action_reorganize_by\">Reordenar</string>\n    <string name=\"relative_time_now\">Novo</string>\n    <string name=\"pref_library_summary\">Categorias, atualização global, ações do capítulo</string>\n    <string name=\"pref_library_update_show_tab_badge\">Mostrar a contagem de não vistos/lidos no ícone de Atualizações</string>\n    <string name=\"label_player_settings\">Configurações do Player</string>\n    <string name=\"action_search_player_settings\">Procurar configurações do Player</string>\n    <string name=\"pref_player_internal\">Player interno</string>\n    <string name=\"pref_player_internal_summary\">Progresso, controles, orientação</string>\n    <string name=\"pref_progress_mark_as_seen\">Em que ponto marcar o episódio como visto</string>\n    <string name=\"pref_preserve_watching_position\">Lembrar a posição de reprodução nos episódios vistos</string>\n    <string name=\"pref_category_player_orientation\">Orientação</string>\n    <string name=\"rotation_video\">Vídeo</string>\n    <string name=\"rotation_reverse_landscape\">Paisagem reversa</string>\n    <string name=\"rotation_sensor_portrait\">Retrato (Sensor)</string>\n    <string name=\"rotation_sensor_landscape\">Paisagem (Sensor)</string>\n    <string name=\"pref_category_controls\">Controles</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Permitir gestos em painéis</string>\n    <string name=\"pref_controls_show_loading\">Mostrar circulo de carregamento</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Mostrar indicador de capítulo atual</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Apenas aparece se o vídeo tem capítulos</string>\n    <string name=\"pref_controls_display_volume_percentage\">Mostrar volume como uma porcentagem</string>\n    <string name=\"pref_remember_brightness\">Lembrar e mudar para o último brilho usado</string>\n    <string name=\"pref_remember_volume\">Lembrar e mudar para o último volume usado</string>\n    <string name=\"pref_player_fullscreen\">Mostrar conteúdo no recorte de exibição</string>\n    <string name=\"pref_player_hide_controls\">Ocultar os controles de reprodução ao abrir o player</string>\n    <string name=\"pref_show_system_bar\">Mostrar barra de status do sistema com controles</string>\n    <string name=\"pref_reduce_motion\">Reduzir animações do Player</string>\n    <string name=\"pref_player_time_to_disappear\">Esconder o tempo dos controles do Player</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Opacidade do painel</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Ativar pulo automático</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Ativar estilo Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Tempo limite do botão</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 segundos</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 segundos</string>\n    <string name=\"pref_category_player_aniskip_info\">Configurações do AniSkip</string>\n    <string name=\"pref_enable_aniskip\">Habilitar o AniSkip</string>\n    <string name=\"pref_category_pip\">Picture-in-Picture (PiP)</string>\n    <string name=\"pref_enable_pip\">Ativar o uso do modo PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Mostrar toasts de episódios ao alternar episódios no modo PiP</string>\n    <string name=\"pref_pip_on_exit\">Mude automaticamente para o modo PiP ao sair do reprodutor</string>\n    <string name=\"pref_pip_replace_with_previous\">Substitui a opção Pular 10 segundos pelo episódio anterior</string>\n    <string name=\"pref_category_external_player\">Player externo</string>\n    <string name=\"pref_always_use_external_player\">Sempre usar player externo</string>\n    <string name=\"pref_external_player_preference\">Preferência do player externo</string>\n    <string name=\"pref_player_gestures\">Gestos</string>\n    <string name=\"pref_player_gestures_summary\">Busca, toque duplo, controle de mídia</string>\n    <string name=\"pref_category_player_sliders\">Sliders</string>\n    <string name=\"enable_volume_brightness_gestures\">Ativar Gestos de Volume e Brilho</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Trocar slider de volume e brilho</string>\n    <string name=\"pref_category_player_seeking\">Busca</string>\n    <string name=\"enable_horizontal_seek_gesture\">Ativar Gesto de Busca Horizontal</string>\n    <string name=\"pref_show_seekbar\">Mostrar barra de busca enquanto buscando</string>\n    <string name=\"pref_default_intro_length\">Duração padrão do pulo de abertura</string>\n    <string name=\"pref_intro_length\">Tamanho do pulo de abertura</string>\n    <string name=\"pref_skip_length\">Tamanho do toque duas vezes para pular</string>\n    <string name=\"pref_skip_disable\">Desativar</string>\n    <string name=\"pref_player_smooth_seek\">Ativar busca precisa</string>\n    <string name=\"pref_player_smooth_seek_summary\">Quando ativado, a busca não se concentrará nos quadros-chave, levando a uma busca mais lenta mas mais precisa</string>\n    <string name=\"pref_category_double_tap\">Toque duplo</string>\n    <string name=\"pref_left_double_tap\">Toque duplo (esquerda)</string>\n    <string name=\"pref_center_double_tap\">Toque duplo (centro)</string>\n    <string name=\"pref_right_double_tap\">Toque duplo (direita)</string>\n    <string name=\"pref_double_tap_info\">Quando um gesto de toque é colocado para Customizado, ele pode ser vinculado pelo input.conf. Os códigos são 0x10001 para esquerda, 0x10002 para centro e 0x10003 para direita.</string>\n    <string name=\"single_action_none\">Nenhum</string>\n    <string name=\"single_action_seek\">Buscar</string>\n    <string name=\"single_action_playpause\">Play/Pause</string>\n    <string name=\"single_action_switch\">Mudar episódio</string>\n    <string name=\"single_action_custom\">Customizado</string>\n    <string name=\"pref_category_media_controls\">Controles de mídia</string>\n    <string name=\"pref_media_previous\">Anterior</string>\n    <string name=\"pref_media_playpause\">Play/Pause</string>\n    <string name=\"pref_media_next\">Próximo</string>\n    <string name=\"pref_media_info\">Quando o controle de mídia é colocado para Customizado, ele pode ser vinculado pelo input.conf. Os códigos são 0x10004 para anterior, 0x10005 para play/pause e 0x10006 para próximo.</string>\n    <string name=\"pref_player_decoder\">Decodificador</string>\n    <string name=\"pref_player_decoder_summary\">Decodificação por Hardware, formato de pixel, debandar</string>\n    <string name=\"pref_try_hw\">Tentar decodificação por hardware</string>\n    <string name=\"pref_gpu_next_title\">Ativar gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Um novo backend para renderização de vídeo</string>\n    <string name=\"pref_debanding_title\">Debandar</string>\n    <string name=\"pref_debanding_none\">Nenhum</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Use o formato de pixel YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Pode arrumar telas pretas em alguns codecs de vídeo, também pode melhor performance pelo custo de qualidade</string>\n    <string name=\"pref_player_subtitle\">Legendas</string>\n    <string name=\"pref_player_subtitle_summary\">Preferências de linguagem, whitelist, blacklist</string>\n    <string name=\"pref_player_subtitle_lang\">Preferência de linguagens</string>\n    <string name=\"pref_player_subtitle_lang_info\">Linguagem(ns) de legenda que serão selecionadas por padrão num vídeo com múltiplas legendas, códigos de linguagem de duas ou três letras funcionam. Múltiplos valores podem ser delimitados por vírgulas.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Whitelist</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Whitelist para legendas. Se uma whitelist for definida, a primeira legenda que contem uma palavra da lista será usada. Múltiplos valores podem ser delimitados por vírgulas.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Blacklist</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Blacklist para legendas. Se uma blacklist for definida, todas as legendas que contem uma palavra da lista serão filtradas. Múltiplos valores podem ser delimitados por vírgulas.</string>\n    <string name=\"pref_player_audio\">Áudio</string>\n    <string name=\"pref_player_audio_summary\">Preferências de linguagem, correção de tom, canais de áudio</string>\n    <string name=\"pref_player_audio_lang\">Preferência de linguagens</string>\n    <string name=\"pref_player_audio_lang_info\">Linguagem(ns) de áudio que serão selecionadas por padrão num vídeo com múltiplas faixas de áudio, códigos de linguagem de duas ou três letras funcionam. Múltiplos valores podem ser delimitados por vírgulas.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Habilitar correção de tom do áudio</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Impede o áudio de se tornar agudo a velocidades mais altas e grave a velocidades mais baixas</string>\n    <string name=\"pref_player_audio_channels\">Canais de áudio</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Auto-seguro</string>\n    <string name=\"pref_player_audio_channels_auto\">Automático</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Estéreo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Estéreo reverso</string>\n    <string name=\"pref_player_audio_boost_cap\">Limite do boost de volume</string>\n    <string name=\"pref_player_custom_button\">Botões customizados</string>\n    <string name=\"pref_player_custom_button_summary\">Execute código Lua com botões customizados</string>\n    <string name=\"pref_player_custom_button_header\">Editar botões customizados</string>\n    <string name=\"pref_player_custom_button_guide\">Guia dos botões customizados</string>\n    <string name=\"pref_player_custom_button_empty\">Você não tem botões customizados. Toque o botão de mais para criar um botão customizado.</string>\n    <string name=\"pref_player_custom_button_add\">Botão de adicionar</string>\n    <string name=\"pref_player_custom_button_edit\">Botão de edição</string>\n    <string name=\"pref_player_custom_button_title\">Titulo</string>\n    <string name=\"pref_player_custom_button_error_exists\">Botão já existe!</string>\n    <string name=\"pref_player_custom_button_content\">Código Lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Código Lua (ao segurar)</string>\n    <string name=\"pref_player_custom_button_optional\">(opcional)</string>\n    <string name=\"pref_player_custom_button_delete\">Botão de Apagar</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Você deseja apagar o botão %s?</string>\n    <string name=\"pref_player_custom_button_startup\">No inicio</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Avançado</string>\n    <string name=\"pref_player_advanced_summary\">Arquivos do usuário, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Editar o arquivo de configuração do MPV para obter mais configurações do reprodutor</string>\n    <string name=\"pref_reset_mpv_conf\">Redefinir arquivo de configuração do MPV</string>\n    <string name=\"pref_mpv_input\">Edite o arquivo de entrada MPV para configuração de mapeamento de teclado</string>\n    <string name=\"video_fit_screen\">Ajustar a tela</string>\n    <string name=\"video_crop_screen\">Cortado para a tela</string>\n    <string name=\"video_stretch_screen\">Esticado para a tela</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Temporizador de sono terminou</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Valor muito grande</string>\n    <string name=\"numeric_chooser_value_too_small\">Valor muito pequeno</string>\n    <string name=\"enable_auto_play\">A reprodução automática está ativada</string>\n    <string name=\"disable_auto_play\">A reprodução automática está desativada</string>\n    <string name=\"player_aniskip_dontskip\">Não pular</string>\n    <string name=\"player_aniskip_dontskip_toast\">Pular %s em %d segundos</string>\n    <string name=\"player_aniskip_skip\">%s pulou</string>\n    <string name=\"no_next_episode\">Próximo episódio não encontrado!</string>\n    <string name=\"no_prev_episode\">Episódio anterior não foi encontrado!</string>\n    <string name=\"player_sheets_delay_set_as_default\">Defina como padrão</string>\n    <string name=\"player_sheets_audio_delay_title\">Atraso de áudio</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Som ouvido</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Som encontrado</string>\n    <string name=\"player_sheets_sub_delay_title\">Atraso da legenda</string>\n    <string name=\"player_sheets_sub_delay_speed\">Velocidade</string>\n    <string name=\"player_sheets_sub_delay_delay\">Atraso</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Primária</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Segundaria</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Ambos</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Voz ouvida</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Texto visto</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Som ouvido</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Som escutado</string>\n    <string name=\"player_sheets_sub_colors_title\">Cores</string>\n    <string name=\"player_sheets_subtitles_color_text\">Texto</string>\n    <string name=\"player_sheets_subtitles_color_border\">Borda</string>\n    <string name=\"player_sheets_subtitles_color_background\">Fundo</string>\n    <string name=\"player_sheets_sub_color_red\">Vermelho</string>\n    <string name=\"player_sheets_sub_color_green\">Verde</string>\n    <string name=\"player_sheets_sub_color_blue\">Azul</string>\n    <string name=\"player_sheets_sub_color_alpha\">Transparência</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Configurações das legendas</string>\n    <string name=\"player_sheets_sub_typography_title\">Tipografia</string>\n    <string name=\"player_sheets_sub_typography_font\">Fonte</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Tamanho da fonte</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Estilo da borda</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Tamanho da borda</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Posição da sombra</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Contorno e sombra</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Caixa opaca</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Caixa do fundo</string>\n    <string name=\"player_sheets_sub_misc_title\">Diversos</string>\n    <string name=\"player_sheets_sub_override_ass\">Sobrescrever legendas ASS/SSA</string>\n    <string name=\"player_sheets_sub_scale\">Escala</string>\n    <string name=\"player_sheets_sub_position\">Posição</string>\n    <string name=\"player_sheets_filters_title\">Filtros</string>\n    <string name=\"player_sheets_filters_brightness\">Brilho</string>\n    <string name=\"player_sheets_filters_contrast\">Contraste</string>\n    <string name=\"player_sheets_filters_gamma\">Gama</string>\n    <string name=\"player_sheets_filters_Saturation\">Saturação</string>\n    <string name=\"player_sheets_filters_hue\">Matiz</string>\n    <string name=\"player_sheets_filters_warning\">Alguns filtros podem não funcionar no seu driver de vídeo</string>\n    <string name=\"player_sheets_add_ext_audio\">Adicione faixas de áudio externas</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Mais</string>\n    <string name=\"player_hwdec_mode\">Definir o modo de decodificação de hardware padrão</string>\n    <string name=\"pref_audio_channels\">Canais de áudio</string>\n    <string name=\"player_sheets_stats_page_title\">Pagina padrão de estatísticas</string>\n    <string name=\"player_sheets_tracks_off\">Desligado</string>\n    <string name=\"player_sheets_stats_page_chip\">Pagina %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Botões Customizados</string>\n    <string name=\"player_seek_n_seconds\">%d segundos</string>\n    <string name=\"timer_title\">Temporizador de Sono</string>\n    <string name=\"timer_remaining\">Faltam %s</string>\n    <string name=\"timer_picker_enter_timer\">Coloque duração</string>\n    <string name=\"timer_picker_pick_time\">Escolha duração</string>\n    <string name=\"timer_cancel_timer\">Cancele temporizador atual</string>\n    <string name=\"player_sheets_speed_slider_label\">Velocidade</string>\n    <string name=\"player_sheets_speed_make_default\">Definir velocidade padrão</string>\n    <string name=\"pref_audio_pitch_correction_title\">Habilitar correção de tom do áudio</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Impede o áudio de se tornar agudo a velocidades mais altas e grave a velocidades mais baixas</string>\n    <string name=\"player_sheets_add_ext_sub\">Adicionar legendas externas</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Legendas segundarias não terão estilos ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">Mostrar legendas na captura de tela</string>\n    <string name=\"pref_general_summary\">Idioma do aplicativo, notificações</string>\n    <string name=\"theme_cloudflare\">Núvem</string>\n    <string name=\"theme_sapphire\">Safira</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_library_rows\">Tamanho da lista</string>\n    <string name=\"pref_preserve_reading_position\">Preservar a posição de leitura nos capítulos lidos</string>\n    <string name=\"pref_download_slots\">Máximo de downloads</string>\n    <string name=\"custom_button_settings\">Botões customizados</string>\n    <string name=\"local_source_badge\">Local</string>\n    <string name=\"anime_interval_expected_update\">Novos episódios previstos para serem lançados em torno de %1$s, verificando a cada %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Este anime já foi concluído ou não há data de lançamento prevista.</string>\n    <string name=\"confirm_tracker_update_anime\">Atualizar rastreadores para o episódio %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Rastreador atualizado para o capitulo %d</string>\n    <string name=\"trackers_updated_summary_anime\">Rastreador atualizado para o episódio %d</string>\n    <string name=\"download_notifier_download_finish\">Download concluído</string>\n    <string name=\"action_hide\">Esconder</string>\n    <string name=\"label_all\">Todos</string>\n    <string name=\"label_category\">Categoria</string>\n    <string name=\"manga_categories\">Categorias de Mangá</string>\n    <string name=\"general_categories\">Categorias</string>\n    <string name=\"anime_categories\">Categorias de Anime</string>\n    <string name=\"entries\">Entradas da biblioteca</string>\n    <string name=\"chapters_episodes\">Capítulos e episódios</string>\n    <string name=\"episodes\">Episódios</string>\n    <string name=\"backup_settings_warning\">Aviso: o backup das configurações também armazenará suas senhas de rastreamento, então não compartilhe este arquivo de backup!</string>\n    <string name=\"label_manga_library\">Mangá</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Mangá</string>\n    <string name=\"label_recent_anime_updates\">Atualização de animes</string>\n    <string name=\"label_manga_sources\">Fontes de Mangá</string>\n    <string name=\"label_anime_sources\">Fontes de Anime</string>\n    <string name=\"label_watched_duration\">Duração assistida</string>\n    <string name=\"label_watched_episodes\">Assistido</string>\n    <string name=\"pref_start_screen\">Tela inicial</string>\n    <string name=\"pref_library_manga_columns\">Mangás por linha</string>\n    <string name=\"pref_library_anime_columns\">Animes por linha</string>\n    <string name=\"pref_bottom_nav_no_history\">Mover Histórico para a guia Mais</string>\n    <string name=\"pref_bottom_nav_no_updates\">Mover Atualizações para a guia Mais</string>\n    <string name=\"pref_bottom_nav_no_manga\">Mover Mangá para a guia Mais</string>\n    <string name=\"pref_bottom_nav_no_browse\">Mover Navegar para a guia Mais</string>\n    <string name=\"action_filter_unseen\">Não visto</string>\n    <string name=\"action_global_manga_search\">Pesquisa Global de Mangás</string>\n    <string name=\"action_global_anime_search\">Pesquisa Global de Animes</string>\n    <string name=\"action_sort_total_episodes\">Total de episódios</string>\n    <string name=\"action_sort_last_seen\">Visto da última vez</string>\n    <string name=\"action_sort_last_checked\">Última verificação</string>\n    <string name=\"action_sort_latest_episode\">Último episódio</string>\n    <string name=\"action_sort_last_anime_update\">Última atualização do anime</string>\n    <string name=\"action_sort_unseen_count\">Contagem de não vistos</string>\n    <string name=\"action_sort_episode_fetch_date\">Data de busca do episódio</string>\n    <string name=\"action_mark_as_seen\">Marcar como assistido</string>\n    <string name=\"action_mark_as_unseen\">Marcar como não assistido</string>\n    <string name=\"action_mark_previous_as_seen\">Marcar anterior como visto</string>\n    <string name=\"action_play_internally\">Reproduzir internamente</string>\n    <string name=\"action_play_externally\">Reproduzir externamente</string>\n    <string name=\"action_download_unread\">Baixar capítulos não lidos</string>\n    <string name=\"action_download_unseen\">Baixar episódios não assistidos</string>\n    <string name=\"action_bookmark_episode\">Marcar episódio</string>\n    <string name=\"action_remove_bookmark_episode\">Desmarcar episódio</string>\n    <string name=\"action_edit_anime_categories\">Editar categorias de animes</string>\n    <string name=\"action_edit_manga_categories\">Editar categorias de mangás</string>\n    <string name=\"action_view_episodes\">Ver episódios</string>\n    <string name=\"action_previous_episode\">Episódio anterior</string>\n    <string name=\"action_play\">Play</string>\n    <string name=\"action_next_episode\">Próximo episódio</string>\n    <string name=\"action_screen_fit\">Modo de ajuste de tela</string>\n    <string name=\"action_show_anime\">Mostrar anime</string>\n    <string name=\"action_display_download_badge_anime\">Episódios baixados</string>\n    <string name=\"action_display_local_badge_manga\">Mangá local</string>\n    <string name=\"action_display_local_badge_anime\">Anime local</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Pesquisar apenas fontes de mangá fixadas na pesquisa global</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Pesquisar apenas fontes de anime fixadas na pesquisa global</string>\n    <string name=\"pref_hide_in_manga_library_items\">Ocultar entradas de mangá já na biblioteca</string>\n    <string name=\"pref_hide_in_anime_library_items\">Ocultar entradas de anime já na biblioteca</string>\n    <string name=\"action_order_by_episode_number\">Por número do episódios</string>\n    <string name=\"action_start_download_externally\">Usar downloader externo</string>\n    <string name=\"action_start_download_internally\">Usar downloader interno</string>\n    <string name=\"pref_bottom_nav_style\">Estilo de navegação inferior</string>\n    <string name=\"pref_default_home_tab_library\">Defina a tela inicial para a guia Mangá</string>\n    <string name=\"default_manga_category\">Categoria de mangá padrão</string>\n    <string name=\"default_anime_category\">Categoria de anime padrão</string>\n    <string name=\"pref_manga_library_update_categories_details\">Os mangás nas categorias excluídas não serão atualizados, mesmo que também estejam nas categorias incluídas.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Os animes nas categorias excluídas não serão atualizados, mesmo que também estejam nas categorias incluídas.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Esta extensão não está na lista oficial de extensões do Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Esta extensão não está na lista oficial de extensões do Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categorias de mangá excluídas</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Categorias de anime excluídas</string>\n    <string name=\"pref_category_external_downloader\">Downloader externo</string>\n    <string name=\"pref_use_external_downloader\">Sempre usar downloader externo para anime</string>\n    <string name=\"pref_external_downloader_selection\">App de download preferido</string>\n    <string name=\"pref_download_new_episodes\">Baixar novos episódios</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Não baixar episódios assistidos duplicados</string>\n    <string name=\"auto_download_while_watching\">Baixar automaticamente enquanto assiste</string>\n    <string name=\"download_ahead_info_anime\">Funciona apenas em entradas na biblioteca e se o episódio atual e o próximo já estiverem baixados</string>\n    <string name=\"pref_track_on_add_library\">Abra o menu de rastreadores ao adicionar à biblioteca</string>\n    <string name=\"pref_show_next_episode_airing_time\">Mostrar horário de exibição do próximo episódio</string>\n    <string name=\"pref_backup_flags_summary\">Quais informações incluir no arquivo de backup</string>\n    <string name=\"pref_anime_storage_usage\">Uso de armazenamento de anime</string>\n    <string name=\"pref_manga_storage_usage\">Uso de armazenamento de mangá</string>\n    <string name=\"used_cache_both\">Usado por anime: %1$s, usado por mangá: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Limpar banco de dados de mangá</string>\n    <string name=\"pref_clear_anime_database\">Limpar banco de dados de anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Excluir histórico de mangás que não estão salvos em sua biblioteca</string>\n    <string name=\"pref_clear_anime_database_summary\">Excluir histórico de animes que não estão salvos em sua biblioteca</string>\n    <string name=\"anime_from_library\">Anime da biblioteca</string>\n    <string name=\"downloaded_episodes\">Episódios baixados</string>\n    <string name=\"local_manga_source\">Fonte local de mangá</string>\n    <string name=\"local_anime_source\">Fonte local de anime</string>\n    <string name=\"episode_not_found\">Episódio não encontrado</string>\n    <string name=\"local_invalid_episode_format\">Formato de episódio inválido</string>\n    <string name=\"unknown_studio\">Estúdio desconhecido</string>\n    <string name=\"delete_confirmation\">Tem certeza de que deseja excluir \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Excluir episódios baixados?</string>\n    <string name=\"snack_add_to_manga_library\">Adicionar mangá à biblioteca?</string>\n    <string name=\"snack_add_to_anime_library\">Adicionar anime à biblioteca?</string>\n    <string name=\"display_mode_episode\">Episódio %1$s</string>\n    <string name=\"episode_downloading_progress\">Baixando (%d%%)</string>\n    <string name=\"download_error\">Erro</string>\n    <string name=\"download_paused\">Pausado</string>\n    <string name=\"show_episode_number\">Número do episódio</string>\n    <string name=\"sort_by_episode_number\">Por número de episódios</string>\n    <string name=\"download_unseen\">Não visto</string>\n    <string name=\"confirm_delete_episodes\">Tem certeza de que deseja excluir os episódios selecionados?</string>\n    <string name=\"also_set_episode_settings_for_library\">Também se aplica a todos os animes da minha biblioteca</string>\n    <string name=\"no_episodes_error\">Nenhum episódio encontrado</string>\n    <string name=\"watching\">Assistindo</string>\n    <string name=\"currently_reading\">Lendo atualmente</string>\n    <string name=\"currently_watching\">Assistindo atualmente</string>\n    <string name=\"plan_to_watch\">Pretendo assistir</string>\n    <string name=\"not_interesting\">Desinteressante</string>\n    <string name=\"want_to_read\">Quero ler</string>\n    <string name=\"want_to_watch\">Quero assistir</string>\n    <string name=\"repeating_anime\">Reassistir</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Isso removerá a data de exibição deste episódio. Você tem certeza?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Redefinir todos os episódios deste anime</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Ep. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Nenhum vídeo encontrado</string>\n    <string name=\"notification_new_episodes\">Novos episódios encontrados</string>\n    <string name=\"information_no_recent_anime\">Nada assistido recentemente</string>\n    <string name=\"episode_settings_updated\">Configurações de episódio padrão atualizadas</string>\n    <string name=\"download_notifier_download_paused_chapters\">Download pausado</string>\n    <string name=\"download_notifier_download_paused_episodes\">Download de episódio pausado</string>\n    <string name=\"channel_new_chapters_episodes\">Atualizações de capítulo/episódio</string>\n    <string name=\"label_storage\">Armazenamento</string>\n    <string name=\"label_history\">Mangá</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Mangá</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Alterar a duração da abertura</string>\n    <string name=\"notification_episodes_single\">Episódio %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Episódio %1$s e %2$d mais</string>\n    <string name=\"notification_episodes_multiple\">Episódios %1$s</string>\n    <string name=\"episode_settings\">Configurações do episódio</string>\n    <string name=\"pref_backup_flags\">Opções de backup</string>\n    <string name=\"label_manga_extensions\">Extensões de Mangá</string>\n    <string name=\"label_anime_extensions\">Extensões de Anime</string>\n    <string name=\"label_migration_manga\">Migrar Mangás</string>\n    <string name=\"label_migration_anime\">Migrar Animes</string>\n    <string name=\"settings\">Configurações</string>\n    <string name=\"copied_video_link_to_clipboard\">Link de qualidade de vídeo copiado para a área de transferência</string>\n    <string name=\"choose_video_quality\">Escolher qualidade do vídeo:</string>\n    <string name=\"extension_settings\">Configurações da extensão</string>\n    <string name=\"theme_cottoncandy\">Algodão doce</string>\n    <string name=\"theme_mocha\">Café</string>\n    <string name=\"pref_episode_swipe_end\">Deslize para a direita para ação</string>\n    <string name=\"pref_episode_swipe_start\">Deslize para a esquerda para ação</string>\n    <string name=\"pref_category_hide_hidden\">Ocultar Categorias Ocultas das categorias e da tela de armazenamento</string>\n    <string name=\"pref_update_anime_release_grace_period\">Período de tempo esperado para lançamento do anime</string>\n    <string name=\"data_saver_exclude\">Excluir da economia de dados</string>\n    <string name=\"data_saver_stop_exclude\">Parar exclusão da economia de dados</string>\n    <string name=\"data_saver\">Economia de dados</string>\n    <string name=\"data_saver_summary\">Compactar imagens antes de baixar ou carregar no leitor</string>\n    <string name=\"data_saver_downloader\">Usar a economia de dados nos downloads</string>\n    <string name=\"data_saver_ignore_jpeg\">Ignorar imagens JPEG</string>\n    <string name=\"data_saver_ignore_gif\">Ignorar animações GIF</string>\n    <string name=\"data_saver_image_quality\">Qualidade da imagem</string>\n    <string name=\"data_saver_image_quality_summary\">Valores mais altos significam que uma porcentagem maior da qualidade da imagem é salva, mas também significa que o tamanho do arquivo é maior, 80% é uma boa mediana entre o tamanho do arquivo e a qualidade da imagem</string>\n    <string name=\"data_saver_image_format\">Comprimir para JPEG</string>\n    <string name=\"data_saver_image_format_summary_on\">O tamanho do arquivo JPEG é consideravelmente menor que o Webp (o que significa que mais dados são salvos), mas também faz com que as imagens percam mais qualidade.\n\\nAtualmente compacta para Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">O tamanho do arquivo JPEG é consideravelmente menor que o Webp (o que significa que mais dados são salvos), mas também faz com que as imagens percam mais qualidade.\n\\nAtualmente compacta para Webp</string>\n    <string name=\"data_saver_color_bw\">Converter para Preto e Branco</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (requer um servidor proxy Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Servidor Hero Proxy Server</string>\n    <string name=\"data_saver_server_summary\">Coloque o URL do servidor Bandwidth Hero Proxy aqui</string>\n    <string name=\"download_slots_info\">Só fará download simultaneamente de fontes auto-hospedadas ou ilimitadas</string>\n    <string name=\"unseen\">Desver</string>\n    <string name=\"label_manga_extension_repos\">Repositório de extensões de mangás</string>\n    <string name=\"label_anime_extension_repos\">Repositório de extensões de anime</string>\n    <string name=\"onboarding_storage_action_create_folder\">Crie a pasta Aniyomi padrão</string>\n    <string name=\"download_speed_limit\">Limite de velocidade de download</string>\n    <string name=\"download_speed_limit_hint\">Defina como 0 para desativar o limite de velocidade.</string>\n    <string name=\"action_add_repo_message\">Adicione repositórios adicionais ao %s. Deve ser uma URL que termine com “index.min.json”.</string>\n    <string name=\"download_ahead_info\">Só funciona se o capítulo/episódio atual + o próximo já estiverem baixados.</string>\n    <string name=\"non_library_settings\">Todas as entradas lidas/assistidas</string>\n    <string name=\"action_sort_last_manga_update\">Última atualização do mangá</string>\n    <string name=\"action_show_manga\">Mostrar mangá</string>\n    <string name=\"action_display_show_continue_reading_button\">Botão Continuar assistindo/lendo</string>\n    <string name=\"pref_update_only_completely_read\">Pular itens com episódios/capítulos não lidos</string>\n    <string name=\"pref_category_delete_chapters\">Excluir capítulos/episódios</string>\n    <string name=\"pref_remove_after_marked_as_read\">Após marcado como lido/assitido manualmente</string>\n    <string name=\"pref_remove_after_read\">Excluir automaticamente após ler/assistir</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Permitir a exclusão de capítulos/episódios favoritos</string>\n    <string name=\"pref_auto_update_manga_sync\">Atualizar o progresso após ler/assistir</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Atualizar progresso quando marcado como lido/assistido</string>\n    <string name=\"pref_clear_chapter_cache\">Limpar o cache de capítulos e episódios</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Limpar o cache de episódios/capítulos ao abrir o aplicativo</string>\n    <string name=\"clear_database_confirmation\">Tem certeza? Os capítulos lidos, episódios assistidos e o progresso em itens que não estão na sua biblioteca serão perdidos</string>\n    <string name=\"pref_incognito_mode_summary\">Pausa o histórico</string>\n    <string name=\"manga_from_library\">Mangás da biblioteca</string>\n    <string name=\"also_set_chapter_settings_for_library\">Aplicar também a todos os mangás da minha biblioteca</string>\n    <string name=\"dialog_with_checkbox_reset\">Redefinir todos os capítulos deste item</string>\n    <string name=\"action_stop\">Parar</string>\n    <string name=\"action_continue\">Continuar</string>\n    <string name=\"manga\">Mangá</string>\n    <string name=\"download_insufficient_space\">O download não pôde ser feito devido à pouco espaço de armazenamento</string>\n    <string name=\"label_player\">Reprodutor</string>\n    <string name=\"pref_category_intro_skip\">Pular introdução</string>\n    <string name=\"editor_unsaved_progress\">Você tem alterações não salvas. Você quer mesmo voltar?</string>\n    <string name=\"editor_save_success\">Arquivo salvo</string>\n    <string name=\"editor_action_rename\">Renomear arquivo</string>\n    <string name=\"editor_action_delete\">Deletar arquivo</string>\n    <string name=\"editor_file_already_exists\">Arquivo já existente</string>\n    <string name=\"editor_invalid_filename\">Nome de arquivo inválido</string>\n    <string name=\"editor_create_file\">Criar arquivo</string>\n    <string name=\"editor_edit_file\">Editar nome do arquivo</string>\n    <string name=\"editor_filename\">Nome do arquivo</string>\n    <string name=\"action_display_unseen_badge\">Episódios não vistos</string>\n    <string name=\"pref_behavior\">Comportamento do capítulo</string>\n    <string name=\"download_queue_size_warning\">Aviso: downloads em grande volume podem tornar as fontes mais lentas e/ou bloquear o Aniyomi. Toque para saber mais.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Forçar o aplicativo a verificar novamente os capítulos e episódios baixados</string>\n    <string name=\"pref_player_settings_summary\">Reprodutor interno, gestos, decodificadores, legendas</string>\n    <string name=\"pref_hosters_show_failure\">Exibir hosts com falha</string>\n    <string name=\"pref_hosters_show_empty\">Exibir hosters vazios</string>\n    <string name=\"pref_enable_intro_skip\">Ativar pular introdução</string>\n    <string name=\"pref_disable_aniskip_chapter\">Desative o AniSkip se o vídeo já contiver capítulos</string>\n    <string name=\"enable_horizontal_seek_gesture_summary\">Deslize para a esquerda ou para a direita para retroceder ou avançar</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Código inválido: \\\"%s\\\"</string>\n    <string name=\"pref_player_editor\">Editor de script</string>\n    <string name=\"pref_player_editor_summary\">Edite e crie novos scripts e opções de script</string>\n    <string name=\"pref_player_editor_script\">Scripts</string>\n    <string name=\"pref_player_editor_script_opts\">Opções de script</string>\n    <string name=\"pref_player_no_items\">O diretório não contém itens. Toque no botão de adição para adicionar um novo arquivo.</string>\n    <string name=\"editor_save_error\">Não é possível salvar o arquivo</string>\n    <string name=\"editor_create_error\">Não foi possível criar o arquivo</string>\n    <string name=\"editor_rename_error\">Não é possível renomear o arquivo</string>\n    <string name=\"editor_delete_error\">Não é possível excluir o arquivo</string>\n    <string name=\"editor_delete_file\">Excluir arquivo</string>\n    <string name=\"editor_delete_file_confirmation\">Deseja excluir o arquivo \\\"%s\\\"?</string>\n    <string name=\"pref_mpv_user_files\">Use arquivos MPV do usuário</string>\n    <string name=\"pref_mpv_user_files_summary\">Use os arquivos no diretório mpv-config</string>\n    <string name=\"player_skip_action\">Pular %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s pulado</string>\n    <string name=\"player_chapter_type_opening\">Abrindo</string>\n    <string name=\"player_chapter_type_ending\">Editando</string>\n    <string name=\"player_chapter_type_recap\">Resumo</string>\n    <string name=\"no_available_videos\">Não há vídeos disponíveis</string>\n    <string name=\"no_hosters\">A lista de hoster está vazia</string>\n    <string name=\"no_episode_loaded\">Nenhum episódio carregado</string>\n    <string name=\"select_hoster_from_empty_list\">Hoster selecionado a partir de uma lista vazia</string>\n    <string name=\"player_sheets_track_delay\">Atraso</string>\n    <string name=\"player_sheets_track_palette\">Paleta</string>\n    <string name=\"player_hoster_tap_to_load\">Toque para carregar vídeos</string>\n    <string name=\"player_hoster_failed\">Falha ao carregar vídeos</string>\n    <string name=\"player_sheets_qualities_title\">Qualidades</string>\n    <string name=\"player_sheets_chapters_title\">Capítulos</string>\n    <string name=\"type\">Tipo</string>\n    <string name=\"label_cant_migrate_episode\">Não foi possível migrar o episódio para a temporada. Selecione a temporada para continuar</string>\n    <string name=\"label_cant_migrate_season\">Não foi possível migrar a temporada para o episódio</string>\n    <string name=\"label_show_seasons\">Mostrar temporadas</string>\n    <string name=\"action_display_show_continue_watching_button\">Botão continuar assistindo</string>\n    <string name=\"action_display_grid_mode\">Modo de exibição em grade</string>\n    <string name=\"display_mode_season\">Temporada %1$s</string>\n    <string name=\"show_season_number\">Número da temporada</string>\n    <string name=\"sort_by_season_number\">Por número da temporada</string>\n    <string name=\"no_seasons_error\">Nenhuma temporada encontrada</string>\n    <string name=\"season_settings_updated\">Configurações padrão da temporada atualizadas</string>\n    <string name=\"season_settings\">Configurações da temporada</string>\n    <string name=\"pref_behavior_episode\">Comportamento do episódio</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Marcar episódio duplicado como visto</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Depois de assistir a um episódio</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Após buscar o novo episódio</string>\n    <string name=\"pref_library_season\">Temporada</string>\n    <string name=\"pref_update_seasons_refresh\">Atualize as temporadas com episódios na atualização</string>\n    <string name=\"pref_update_seasons_update\">Atualize temporadas com episódios na atualização da biblioteca</string>\n    <string name=\"filler\">Preenchimento</string>\n    <string name=\"action_filter_fillermarked\">Marcado com preenchimento</string>\n    <string name=\"action_edit_background\">Editar plano de fundo</string>\n    <string name=\"custom_background\">Plano de fundo personalizado</string>\n    <string name=\"background_saved\">Plano de fundo salvo</string>\n    <string name=\"error_saving_background\">Erro ao salvar o plano de fundo</string>\n    <string name=\"error_sharing_background\">Erro ao compartilhar o plano de fundo</string>\n    <string name=\"set_as_background\">Definir como plano de fundo</string>\n    <string name=\"set_as_thumbnail\">Definir como miniatura</string>\n    <string name=\"background_updated\">Plano de fundo atualizado</string>\n    <string name=\"thumbnail_updated\">Miniatura atualizada</string>\n    <string name=\"notification_background_update_failed\">Falha ao atualizar o plano de fundo</string>\n    <string name=\"pref_download_fillermarked_items\">Permitir o download de episódios com marcações de preenchimento</string>\n    <string name=\"show_episode_previews\">Miniaturas dos episódios</string>\n    <string name=\"show_episode_summaries\">Resumos dos episódios</string>\n    <string name=\"pref_hosters\">Hosters</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ro/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Categorii, actualizări globale</string>\n    <string name=\"pref_library_update_show_tab_badge\">Afișați numărul de necitite pe pictograma Actualizări</string>\n    <string name=\"manga_categories\">Categorii</string>\n    <string name=\"action_display_local_badge_manga\">Manga local</string>\n    <string name=\"default_manga_category\">Categorie implicită</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga din categoriile excluse nu vor fi actualizate, chiar dacă se află și în categoriile incluse.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categorii excluse</string>\n    <string name=\"pref_clear_manga_database\">Curățați baza de date</string>\n    <string name=\"pref_clear_manga_database_summary\">Ștergeți istoricul pentru manga care nu sunt salvate în bibliotecă</string>\n    <string name=\"snack_add_to_manga_library\">Adaugă manga în bibliotecă?</string>\n    <string name=\"download_error\">Eroare</string>\n    <string name=\"download_paused\">Întrerupt</string>\n    <string name=\"download_notifier_download_paused_chapters\">Descărcare întreruptă</string>\n    <string name=\"channel_new_chapters_episodes\">Actualizări de capitole</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ru/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Нажмите кнопку назад ещё раз, чтобы выйти</string>\n    <string name=\"action_filter_started\">Начато</string>\n    <string name=\"action_sort_airing_time\">По времени выпуска</string>\n    <string name=\"action_reorganize_by\">Изменение порядка</string>\n    <string name=\"relative_time_now\">Сейчас</string>\n    <string name=\"pref_library_summary\">Категории, глобальное обновление, смахивание глав/эпизодов</string>\n    <string name=\"pref_library_update_show_tab_badge\">Показывать количество непросмотренных/непрочитанных на значке обновлений</string>\n    <string name=\"label_player_settings\">Настройки проигрывателя</string>\n    <string name=\"action_search_player_settings\">Поиск по настройкам проигрывателя</string>\n    <string name=\"pref_player_internal\">Внутренний проигрыватель</string>\n    <string name=\"pref_player_internal_summary\">Прогресс, управление, ориентация</string>\n    <string name=\"pref_progress_mark_as_seen\">В какой момент пометить эпизод как просмотренный</string>\n    <string name=\"pref_preserve_watching_position\">Сохранять положение времени на просмотренных эпизодах</string>\n    <string name=\"pref_category_player_orientation\">Ориентация</string>\n    <string name=\"rotation_video\">Видео</string>\n    <string name=\"rotation_reverse_landscape\">Обратный альбомный режим</string>\n    <string name=\"rotation_sensor_portrait\">Вертикальное изображение</string>\n    <string name=\"rotation_sensor_landscape\">Горизонтальное изображение</string>\n    <string name=\"pref_category_controls\">Управление</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Разрешить жесты в панелях</string>\n    <string name=\"pref_controls_show_loading\">Показывать значок загрузки</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Показывать указатель текущего эпизода</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Появляется лишь при наличии эпизодов у видео</string>\n    <string name=\"pref_controls_display_volume_percentage\">Показывать громкость в виде процентов</string>\n    <string name=\"pref_remember_brightness\">Запомнить и переключиться на последнюю использованную яркость</string>\n    <string name=\"pref_remember_volume\">Запомнить и переключиться на последнюю использованную громкость</string>\n    <string name=\"pref_player_fullscreen\">Показывать материал в вырезе дисплея</string>\n    <string name=\"pref_player_hide_controls\">Скрывать элементы управления проигрывателем при открытии</string>\n    <string name=\"pref_show_system_bar\">Показать строку состояния системы с элементами управления</string>\n    <string name=\"pref_reduce_motion\">Уменьшить анимацию проигрывателя</string>\n    <string name=\"pref_player_time_to_disappear\">Скрыть время управления проигрывателем</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s мс</string>\n    <string name=\"pref_panel_opacity\">Полупрозрачность панели</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Включить автопропуск</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Включить стиль Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Время ожидания кнопки</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 секунд</string>\n    <string name=\"pref_category_player_aniskip_info\">Для работы AniSkip необходимо, чтобы аниме отслеживалось с помощью MAL или Anilist</string>\n    <string name=\"pref_enable_aniskip\">Включить AniSkip</string>\n    <string name=\"pref_category_pip\">Картинка в картинке</string>\n    <string name=\"pref_enable_pip\">Разрешить использование режима «картинка в картинке»</string>\n    <string name=\"pref_pip_episode_toasts\">Показывать уведомление эпизода при переходе на другой эпизод в режиме «картинка в картинке»</string>\n    <string name=\"pref_pip_on_exit\">Автоматическое переключение в режим «картинка в картинке» при выходе из проигрывателя</string>\n    <string name=\"pref_pip_replace_with_previous\">Заменяет параметр «Пропустить 10 секунд» на «Предыдущий эпизод»</string>\n    <string name=\"pref_category_external_player\">Внешний проигрыватель</string>\n    <string name=\"pref_always_use_external_player\">Всегда использовать внешний проигрыватель</string>\n    <string name=\"pref_external_player_preference\">Настройка внешнего проигрывателя</string>\n    <string name=\"pref_player_gestures\">Жесты</string>\n    <string name=\"pref_player_gestures_summary\">Перемотка, двойное касание, элементы управления медиа</string>\n    <string name=\"pref_category_player_sliders\">Ползунки</string>\n    <string name=\"enable_volume_brightness_gestures\">Включить жесты управления громкостью и яркостью</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Поменять местами ползунки громкости и яркости</string>\n    <string name=\"pref_category_player_seeking\">Перемотка</string>\n    <string name=\"enable_horizontal_seek_gesture\">Включить горизонтальный жест перемотки</string>\n    <string name=\"pref_show_seekbar\">Показывать панель перемотки при перемотке</string>\n    <string name=\"pref_default_intro_length\">Перемотка опенинга по умолчанию</string>\n    <string name=\"pref_intro_length\">Перемотка опенинга</string>\n    <string name=\"pref_skip_length\">Перемотка при двойном нажатии</string>\n    <string name=\"pref_skip_disable\">Отключить</string>\n    <string name=\"pref_player_smooth_seek\">Включить точную перемотку</string>\n    <string name=\"pref_player_smooth_seek_summary\">Если этот параметр включён, перемотка не будет фокусироваться на ключевых кадрах, что приведёт к более медленной, но точной перемотке</string>\n    <string name=\"pref_category_double_tap\">Двойное касание</string>\n    <string name=\"pref_left_double_tap\">Двойное касание (слева)</string>\n    <string name=\"pref_center_double_tap\">Двойное касание (по центру)</string>\n    <string name=\"pref_right_double_tap\">Двойное касание (справа)</string>\n    <string name=\"pref_double_tap_info\">Если для жеста касания установлено значение «Своё», его можно привязать через input.conf. Коды клавиш: 0x10001 для левого, 0x10002 для центра и 0x10003 для правого.</string>\n    <string name=\"single_action_none\">Пусто</string>\n    <string name=\"single_action_seek\">Перемотать</string>\n    <string name=\"single_action_playpause\">Воспроизведение/Пауза</string>\n    <string name=\"single_action_switch\">Поменять эпизод</string>\n    <string name=\"single_action_custom\">Своё</string>\n    <string name=\"pref_category_media_controls\">Элементы управления медиа</string>\n    <string name=\"pref_media_previous\">Предыдущее</string>\n    <string name=\"pref_media_playpause\">Воспроизведение/Пауза</string>\n    <string name=\"pref_media_next\">Следующий</string>\n    <string name=\"pref_media_info\">Если для элементов управления медиа установлено значение «Своё», его можно привязать через input.conf. Коды клавиш: 0x10004 для предыдущего, 0x10005 для воспроизведения/паузы и 0x10006 для следующего.</string>\n    <string name=\"pref_player_decoder\">Декодер</string>\n    <string name=\"pref_player_decoder_summary\">Аппаратное декодирование, формат пикселей, откладка</string>\n    <string name=\"pref_try_hw\">Попробовать аппаратное декодирование</string>\n    <string name=\"pref_gpu_next_title\">Включить gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Новый сервер для рендеринга видео</string>\n    <string name=\"pref_debanding_title\">Отладка</string>\n    <string name=\"pref_debanding_none\">Нет</string>\n    <string name=\"pref_debanding_cpu\">ЦП</string>\n    <string name=\"pref_debanding_gpu\">ГП</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Использовать формат пикселей YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Может исправить чёрный экран на некоторых кодеках видео, а также улучшить производительность за счёт качества</string>\n    <string name=\"pref_player_subtitle\">Субтитры</string>\n    <string name=\"pref_player_subtitle_summary\">Предпочитаемые языки, белый и чёрный список</string>\n    <string name=\"pref_player_subtitle_lang\">Предпочитаемые языки</string>\n    <string name=\"pref_player_subtitle_lang_info\">Язык субтитров выбирается автоматически на видео со множеством субтитров, работает двух или трёхбуквенный код языка. Несколько значений можно разделить запятой.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Белый список</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Белый список для субтитров. Если использован белый список, то будут использованы первые субтитры содержащие слово из списка. Несколько значений можно разделить запятой.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Чёрный список</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Чёрный список для субтитров. Если использован чёрный список, то все субтитры содержащие слово из списка будут отфильтрованы. Несколько значений можно разделить запятой.</string>\n    <string name=\"pref_player_audio\">Аудио</string>\n    <string name=\"pref_player_audio_summary\">Предпочитаемые языки, коррекция тональности звука, каналы аудио</string>\n    <string name=\"pref_player_audio_lang\">Предпочитаемые языки</string>\n    <string name=\"pref_player_audio_lang_info\">Язык аудио будет выбран по умолчанию на видео со множеством аудио дорожек, работают двух или трёхбуквенные коды языков. Несколько значений можно разделить запятой.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Включить коррекцию тональности звука</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Предотвращает очень высокую или очень низкую тональность аудио при ускорении или замедлении</string>\n    <string name=\"pref_player_audio_channels\">Звуковые каналы</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Автосохранение</string>\n    <string name=\"pref_player_audio_channels_auto\">Авто</string>\n    <string name=\"pref_player_audio_channels_mono\">Моно</string>\n    <string name=\"pref_player_audio_channels_stereo\">Стерео</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Обратное стерео</string>\n    <string name=\"pref_player_audio_boost_cap\">Ограничение громкости</string>\n    <string name=\"pref_player_custom_button\">Настраиваемые кнопки</string>\n    <string name=\"pref_player_custom_button_summary\">Выполнение lua-кода с помощью настраиваемых кнопок</string>\n    <string name=\"pref_player_custom_button_header\">Изменить настраиваемые кнопки</string>\n    <string name=\"pref_player_custom_button_guide\">Руководство по настраиваемым кнопкам</string>\n    <string name=\"pref_player_custom_button_empty\">Нет настраиваемых кнопок. Коснитесь кнопки «Добавить» для создания своей кнопки.</string>\n    <string name=\"pref_player_custom_button_add\">Добавить кнопку</string>\n    <string name=\"pref_player_custom_button_edit\">Изменить кнопку</string>\n    <string name=\"pref_player_custom_button_title\">Название</string>\n    <string name=\"pref_player_custom_button_error_exists\">Данная кнопка уже существует!</string>\n    <string name=\"pref_player_custom_button_content\">Lua-код</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua-код (при длительном нажатии)</string>\n    <string name=\"pref_player_custom_button_optional\">(необязательно)</string>\n    <string name=\"pref_player_custom_button_delete\">Удалить кнопку</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Вы хотите удалить кнопку: %s?</string>\n    <string name=\"pref_player_custom_button_startup\">При запуске</string>\n    <string name=\"pref_player_custom_button_id\">(Код: %d)</string>\n    <string name=\"pref_player_advanced\">Расширенные</string>\n    <string name=\"pref_player_advanced_summary\">Файлы пользователя, mvp.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Редактировать файл конфигурации MPV для дальнейших настроек проигрывателя</string>\n    <string name=\"pref_reset_mpv_conf\">Сброс файла конфигурации MPV</string>\n    <string name=\"pref_mpv_input\">Редактировать входной файл MPV для настройки отображения клавиатуры</string>\n    <string name=\"video_fit_screen\">По размеру экрана</string>\n    <string name=\"video_crop_screen\">Обрезано по ширине экрана</string>\n    <string name=\"video_stretch_screen\">Растянуто на экране</string>\n    <string name=\"mpv_media_title\">%1$s - Э%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Время спать</string>\n    <string name=\"player_generic_unit_ms\">мс</string>\n    <string name=\"numeric_chooser_value_too_big\">Значение слишком велико</string>\n    <string name=\"numeric_chooser_value_too_small\">Значение слишком мало</string>\n    <string name=\"enable_auto_play\">Автовоспроизведение включено</string>\n    <string name=\"disable_auto_play\">Автовоспроизведение отключено</string>\n    <string name=\"player_aniskip_dontskip\">Не пропускать</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s: будет пропущено через %d сек</string>\n    <string name=\"player_aniskip_skip\">%s: пропущено</string>\n    <string name=\"no_next_episode\">Следующий эпизод не найден!</string>\n    <string name=\"no_prev_episode\">Предыдущий эпизод не найден!</string>\n    <string name=\"player_sheets_delay_set_as_default\">Установить по умолчанию</string>\n    <string name=\"player_sheets_audio_delay_title\">Звуковая задержка</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Услышанный звук</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Замеченный звук</string>\n    <string name=\"player_sheets_sub_delay_title\">Задержка субтитров</string>\n    <string name=\"player_sheets_sub_delay_speed\">Скорость</string>\n    <string name=\"player_sheets_sub_delay_delay\">Задержка</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Основной</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Дополнительный</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Оба</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Услышанный голос</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Увиденный текст</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Услышанный звук</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Замеченный звук</string>\n    <string name=\"player_sheets_sub_colors_title\">Цвета</string>\n    <string name=\"player_sheets_subtitles_color_text\">Текст</string>\n    <string name=\"player_sheets_subtitles_color_border\">Края</string>\n    <string name=\"player_sheets_subtitles_color_background\">Фон</string>\n    <string name=\"player_sheets_sub_color_red\">Красный</string>\n    <string name=\"player_sheets_sub_color_green\">Зелёный</string>\n    <string name=\"player_sheets_sub_color_blue\">Синий</string>\n    <string name=\"player_sheets_sub_color_alpha\">Альфа</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Настройки субтитров</string>\n    <string name=\"player_sheets_sub_typography_title\">Оформление</string>\n    <string name=\"player_sheets_sub_typography_font\">Шрифт</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Размер шрифта</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Стиль краёв</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Размер краёв</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Смещение тени</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Контур и тень</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Прозрачная коробка</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Фоновая коробка</string>\n    <string name=\"player_sheets_sub_misc_title\">Разное</string>\n    <string name=\"player_sheets_sub_override_ass\">Заменить субтитры ASS/SSA</string>\n    <string name=\"player_sheets_sub_scale\">Масштаб</string>\n    <string name=\"player_sheets_sub_position\">Положение</string>\n    <string name=\"player_sheets_filters_title\">Фильтры</string>\n    <string name=\"player_sheets_filters_brightness\">Яркость</string>\n    <string name=\"player_sheets_filters_contrast\">Контрастность</string>\n    <string name=\"player_sheets_filters_gamma\">Гамма</string>\n    <string name=\"player_sheets_filters_Saturation\">Насыщенность</string>\n    <string name=\"player_sheets_filters_hue\">Оттенок</string>\n    <string name=\"player_sheets_filters_warning\">Некоторые фильтры могут не работать на вашем текущем видеодрайвере</string>\n    <string name=\"player_sheets_add_ext_audio\">Добавить внешние звуковые дорожки</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Ещё</string>\n    <string name=\"player_hwdec_mode\">Режим аппаратного декодирования</string>\n    <string name=\"pref_audio_channels\">Звуковые каналы</string>\n    <string name=\"player_sheets_stats_page_title\">Страница статистики</string>\n    <string name=\"player_sheets_tracks_off\">Откл.</string>\n    <string name=\"player_sheets_stats_page_chip\">Стр. %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Настраиваемые кнопки</string>\n    <string name=\"player_seek_n_seconds\">%d сек</string>\n    <string name=\"timer_title\">Автоотключение</string>\n    <string name=\"timer_remaining\">%s осталось</string>\n    <string name=\"timer_picker_enter_timer\">Введите длительность</string>\n    <string name=\"timer_picker_pick_time\">Выбор длительности</string>\n    <string name=\"timer_cancel_timer\">Отмена текущего таймера</string>\n    <string name=\"player_sheets_speed_slider_label\">Скорость</string>\n    <string name=\"player_sheets_speed_make_default\">Задать нормальную скорость</string>\n    <string name=\"pref_audio_pitch_correction_title\">Включить коррекцию тональности звука</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Предотвращает появление высоких тональностей на высоких скоростях и низких тональностей на низких скоростях</string>\n    <string name=\"player_sheets_add_ext_sub\">Добавить внешние субтитры</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Дополнительные субтитры не будут иметь стиля ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">Включить субтитры</string>\n    <string name=\"pref_general_summary\">Язык приложения, уведомления</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Сапфир</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Матрица</string>\n    <string name=\"pref_library_rows\">Размер списка</string>\n    <string name=\"pref_preserve_reading_position\">Сохранение позиции чтения в прочитанных главах</string>\n    <string name=\"pref_download_slots\">Максимум загрузок</string>\n    <string name=\"custom_button_settings\">Настраиваемые кнопки</string>\n    <string name=\"local_source_badge\">На устройстве</string>\n    <string name=\"anime_interval_expected_update\">Выход новых эпизодов ожидается примерно через [%1$s], проверка - каждые [%2$s].</string>\n    <string name=\"anime_interval_expected_update_null\">Это аниме либо завершено, либо не имеет прогнозируемой даты выхода.</string>\n    <string name=\"confirm_tracker_update_anime\">Обновить отслеживание до эпизода %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Сервисы отслеживания обновлены до %d-й главы</string>\n    <string name=\"trackers_updated_summary_anime\">Сервисы отслеживания обновлены до %d-го эпизода</string>\n    <string name=\"download_notifier_download_finish\">Загрузка завершена</string>\n    <string name=\"action_hide\">Скрыть</string>\n    <string name=\"label_all\">Все</string>\n    <string name=\"label_category\">Категория</string>\n    <string name=\"manga_categories\">Категории манги</string>\n    <string name=\"general_categories\">Категории</string>\n    <string name=\"anime_categories\">Категории аниме</string>\n    <string name=\"entries\">Тайтлы в библиотеке</string>\n    <string name=\"chapters_episodes\">Главы и эпизоды</string>\n    <string name=\"episodes\">Эпизоды</string>\n    <string name=\"backup_settings_warning\">Предупреждение: резервная копия настроек также сохранит ваши пароли к отслеживаемым, не передавайте этот файл резервной копии!</string>\n    <string name=\"label_manga_library\">Манга</string>\n    <string name=\"label_anime_library\">Аниме</string>\n    <string name=\"label_anime\">Аниме</string>\n    <string name=\"label_manga\">Манга</string>\n    <string name=\"label_recent_anime_updates\">Обновления аниме</string>\n    <string name=\"label_manga_sources\">Источники манги</string>\n    <string name=\"label_anime_sources\">Источники аниме</string>\n    <string name=\"label_watched_duration\">Длительность просмотра</string>\n    <string name=\"label_watched_episodes\">Просмотрено</string>\n    <string name=\"pref_start_screen\">Начальный экран</string>\n    <string name=\"pref_library_manga_columns\">Элементы манги в строке</string>\n    <string name=\"pref_library_anime_columns\">Элементы аниме в строке</string>\n    <string name=\"pref_bottom_nav_no_history\">Переместить вкладку «История» на вкладку «Ещё»</string>\n    <string name=\"pref_bottom_nav_no_updates\">Переместить вкладку «Обновления» на вкладку «Ещё»</string>\n    <string name=\"pref_bottom_nav_no_manga\">Переместить вкладку «Манга» на вкладку «Ещё»</string>\n    <string name=\"pref_bottom_nav_no_browse\">Переместить вкладку «Поисковик» на вкладку «Ещё»</string>\n    <string name=\"action_filter_unseen\">Не просмотрено</string>\n    <string name=\"action_global_manga_search\">Глобальный поиск манги</string>\n    <string name=\"action_global_anime_search\">Глобальный поиск аниме</string>\n    <string name=\"action_sort_total_episodes\">Всего эпизодов</string>\n    <string name=\"action_sort_last_seen\">Последнее просмотреное</string>\n    <string name=\"action_sort_last_checked\">Последняя проверка</string>\n    <string name=\"action_sort_latest_episode\">Последний эпизод</string>\n    <string name=\"action_sort_last_anime_update\">Последнее обновление аниме</string>\n    <string name=\"action_sort_unseen_count\">Оставшиеся эпизоды</string>\n    <string name=\"action_sort_episode_fetch_date\">Дата получения эпизода</string>\n    <string name=\"action_mark_as_seen\">Пометить как просмотренное</string>\n    <string name=\"action_mark_as_unseen\">Пометить как непросмотренное</string>\n    <string name=\"action_mark_previous_as_seen\">Пометить предыдущее как просмотренное</string>\n    <string name=\"action_play_internally\">Смотреть в приложении</string>\n    <string name=\"action_play_externally\">Смотреть в другом плеере</string>\n    <string name=\"action_download_unread\">Скачать непрочитанные главы</string>\n    <string name=\"action_download_unseen\">Скачать непросмотренные эпизоды</string>\n    <string name=\"action_bookmark_episode\">Добавить эпизод в закладки</string>\n    <string name=\"action_remove_bookmark_episode\">Удалить эпизод из закладок</string>\n    <string name=\"action_edit_anime_categories\">Редактировать категории аниме</string>\n    <string name=\"action_edit_manga_categories\">Редактировать категории манги</string>\n    <string name=\"action_view_episodes\">Просмотреть эпизоды</string>\n    <string name=\"action_previous_episode\">Предыдущий эпизод</string>\n    <string name=\"action_play\">Смотреть</string>\n    <string name=\"action_next_episode\">Следующий эпизод</string>\n    <string name=\"action_screen_fit\">Растянуть во весь экран</string>\n    <string name=\"action_show_anime\">Показать аниме</string>\n    <string name=\"action_display_download_badge_anime\">Скачанные эпизоды</string>\n    <string name=\"action_display_local_badge_manga\">Локальная манга</string>\n    <string name=\"action_display_local_badge_anime\">Локальное аниме</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Искать мангу в глобальном поиске только по закреплённым источникам</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Искать аниме в глобальном поиске только по закреплённым источникам</string>\n    <string name=\"pref_hide_in_manga_library_items\">Скрыть мангу, которая уже есть в библиотеке</string>\n    <string name=\"pref_hide_in_anime_library_items\">Скрыть аниме, которое уже есть в библиотеке</string>\n    <string name=\"action_order_by_episode_number\">По номеру эпизода</string>\n    <string name=\"action_start_download_externally\">Использовать внешний загрузчик</string>\n    <string name=\"action_start_download_internally\">Использовать внутренний загрузчик</string>\n    <string name=\"pref_bottom_nav_style\">Стиль нижней панели навигации</string>\n    <string name=\"pref_default_home_tab_library\">Сделать вкладку манги начальным экраном</string>\n    <string name=\"default_manga_category\">Категория манги по умолчанию</string>\n    <string name=\"default_anime_category\">Категория аниме по умолчанию</string>\n    <string name=\"pref_manga_library_update_categories_details\">Манга в исключённых категориях не обновляется, даже если она также находится во включённых категориях.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Аниме в исключённых категориях не обновляется, даже если она также находится во включённых категориях.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Это расширение не входит в официальный список расширений Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Это расширение не входит в официальный список расширений Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Исключённые категории манги</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Исключённые категории аниме</string>\n    <string name=\"pref_category_external_downloader\">Внешний загрузчик</string>\n    <string name=\"pref_use_external_downloader\">Всегда использовать внешний загрузчик для аниме</string>\n    <string name=\"pref_external_downloader_selection\">Настройка загрузчика</string>\n    <string name=\"pref_download_new_episodes\">Скачать новые эпизоды</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Пропуск загрузки дублированных просмотренных эпизодов</string>\n    <string name=\"auto_download_while_watching\">Автоматическая загрузка во время просмотра</string>\n    <string name=\"download_ahead_info_anime\">Работает только для эпизодов в библиотеке и если текущий и следующий эпизоды уже загружены</string>\n    <string name=\"pref_track_on_add_library\">Открывать меню отслеживания при добавлении в библиотеку</string>\n    <string name=\"pref_show_next_episode_airing_time\">Показать время показа следующего эпизода</string>\n    <string name=\"pref_backup_flags_summary\">Какую информацию следует включить в файл резервной копии</string>\n    <string name=\"pref_anime_storage_usage\">Использование хранилища аниме</string>\n    <string name=\"pref_manga_storage_usage\">Использование хранилища манги</string>\n    <string name=\"used_cache_both\">Используется аниме: %1$s, используется мангой: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Очистить базу данных манги</string>\n    <string name=\"pref_clear_anime_database\">Очистить базу данных аниме</string>\n    <string name=\"pref_clear_manga_database_summary\">Удалить историю для манги, которая не находится в вашей библиотеке</string>\n    <string name=\"pref_clear_anime_database_summary\">Удалить историю для аниме, которое не находится в вашей библиотеке</string>\n    <string name=\"anime_from_library\">Аниме из библиотеки</string>\n    <string name=\"downloaded_episodes\">Загруженные эпизоды</string>\n    <string name=\"local_manga_source\">Локальный источник манги</string>\n    <string name=\"local_anime_source\">Локальный источник аниме</string>\n    <string name=\"episode_not_found\">Эпизод не найден</string>\n    <string name=\"local_invalid_episode_format\">Недопустимый формат эпизода</string>\n    <string name=\"unknown_studio\">Неизвестная студия</string>\n    <string name=\"delete_confirmation\">Вы уверены, что хотите удалить «%s»?</string>\n    <string name=\"delete_downloads_for_anime\">Удалить загруженные эпизоды?</string>\n    <string name=\"snack_add_to_manga_library\">Добавить мангу в библиотеку?</string>\n    <string name=\"snack_add_to_anime_library\">Добавить аниме в библиотеку?</string>\n    <string name=\"display_mode_episode\">Эпизод %1$s</string>\n    <string name=\"episode_downloading_progress\">Скачивание (%d%%)</string>\n    <string name=\"download_error\">Ошибка</string>\n    <string name=\"download_paused\">Пауза</string>\n    <string name=\"show_episode_number\">Номер эпизода</string>\n    <string name=\"sort_by_episode_number\">По номеру эпизода</string>\n    <string name=\"download_unseen\">Не просмотрено</string>\n    <string name=\"confirm_delete_episodes\">Вы уверены, что хотите удалить выбранные эпизоды?</string>\n    <string name=\"also_set_episode_settings_for_library\">Также применить ко всем аниме в моей библиотеке</string>\n    <string name=\"no_episodes_error\">Эпизоды не найдены</string>\n    <string name=\"watching\">Смотрю</string>\n    <string name=\"currently_reading\">Сейчас читается</string>\n    <string name=\"currently_watching\">Сейчас смотрю</string>\n    <string name=\"plan_to_watch\">Планирую смотреть</string>\n    <string name=\"not_interesting\">Не интересно</string>\n    <string name=\"want_to_read\">Хочу прочитать</string>\n    <string name=\"want_to_watch\">Хочу посмотреть</string>\n    <string name=\"repeating_anime\">Пересматриваю</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Это приведёт к удалению даты просмотра этого эпизода. Вы уверены?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Сбросить все эпизоды для этого аниме</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Эп. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Видео не найдено</string>\n    <string name=\"notification_new_episodes\">Найдены новые эпизоды</string>\n    <string name=\"information_no_recent_anime\">В последнее время ничего не смотрели</string>\n    <string name=\"episode_settings_updated\">Обновлены настройки эпизодов по умолчанию</string>\n    <string name=\"download_notifier_download_paused_chapters\">Загрузка главы приостановлена</string>\n    <string name=\"download_notifier_download_paused_episodes\">Загрузка эпизода приостановлена</string>\n    <string name=\"channel_new_chapters_episodes\">Обновления глав/эпизодов</string>\n    <string name=\"label_storage\">Хранилище</string>\n    <string name=\"label_history\">Манга</string>\n    <string name=\"label_anime_history\">Аниме</string>\n    <string name=\"label_updates\">Манга</string>\n    <string name=\"label_anime_updates\">Аниме</string>\n    <string name=\"action_change_intro_length\">Изменить длину опенинга</string>\n    <string name=\"notification_episodes_single\">Эпизод %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Эпизод %1$s и ещё %2$d</string>\n    <string name=\"notification_episodes_multiple\">Эпизоды %1$s</string>\n    <string name=\"episode_settings\">Настройка эпизода</string>\n    <string name=\"pref_backup_flags\">Варианты резервного копирования</string>\n    <string name=\"label_manga_extensions\">Расширения манги</string>\n    <string name=\"label_anime_extensions\">Расширения аниме</string>\n    <string name=\"label_migration_manga\">Перенести мангу</string>\n    <string name=\"label_migration_anime\">Перенести аниме</string>\n    <string name=\"settings\">Настройки</string>\n    <string name=\"copied_video_link_to_clipboard\">Скопирована ссылка на качество видео в буфер обмена</string>\n    <string name=\"choose_video_quality\">Выберите качество видео:</string>\n    <string name=\"extension_settings\">Настройки расширений</string>\n    <string name=\"theme_cottoncandy\">Сахарная вата</string>\n    <string name=\"theme_mocha\">Мокко</string>\n    <string name=\"pref_episode_swipe_end\">Проведите пальцем вправо</string>\n    <string name=\"pref_episode_swipe_start\">Для включения серии проведите пальцем влево</string>\n    <string name=\"pref_category_hide_hidden\">Скрыть скрытые категории из экране категорий и хранилища</string>\n    <string name=\"pref_update_anime_release_grace_period\">Ожидаемый период отсрочки выпуска аниме</string>\n    <string name=\"data_saver_exclude\">Исключить из сохранения данных</string>\n    <string name=\"data_saver_stop_exclude\">Остановить исключение из сохранения данных</string>\n    <string name=\"data_saver\">Сохранение данных</string>\n    <string name=\"data_saver_summary\">Сжимать изображения перед скачиванием или загрузкой в читалке</string>\n    <string name=\"data_saver_downloader\">Использовать сохранение данных в загрузчике</string>\n    <string name=\"data_saver_ignore_jpeg\">Игнорировать JPEG-изображения</string>\n    <string name=\"data_saver_ignore_gif\">Игнорировать GIF-анимации</string>\n    <string name=\"data_saver_image_quality\">Качество изображения</string>\n    <string name=\"data_saver_image_quality_summary\">Более высокие значения означают, что сохраняется более высокий процент качества изображения, но это также означает, что размер файла больше, 80 процентов – хорошее среднее значение между размером файла и качеством изображения</string>\n    <string name=\"data_saver_image_format\">Сжатие в JPEG</string>\n    <string name=\"data_saver_image_format_summary_on\">Размер файла JPEG значительно меньше, чем у Webp (это означает, что сохраняется больше данных), но это также приводит к потере качества изображений. \\nВ настоящий момент сжимает в формат JPEG</string>\n    <string name=\"data_saver_image_format_summary_off\">Размер файла JPEG значительно меньше, чем у Webp (это означает, что сохраняется больше данных), но это также приводит к потере качества изображений. \\nВ настоящий момент сжимает в формат Webp</string>\n    <string name=\"data_saver_color_bw\">Преобразовать в чёрно-белый</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (требуется прокси-сервер Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Прокси-сервер Bandwidth Hero</string>\n    <string name=\"data_saver_server_summary\">Укажите URL прокси-сервера Bandwidth Hero здесь</string>\n    <string name=\"download_slots_info\">Одновременная загрузка будет осуществляться только из источников с собственным хостингом или без ограничений</string>\n    <string name=\"unseen\">Не просмотрено</string>\n    <string name=\"label_manga_extension_repos\">Репозитории расширений манги</string>\n    <string name=\"label_anime_extension_repos\">Репозитории расширений аниме</string>\n    <string name=\"onboarding_storage_action_create_folder\">Создать папку Aniyomi по умолчанию</string>\n    <string name=\"download_speed_limit\">Ограничение скорости загрузки</string>\n    <string name=\"download_speed_limit_hint\">Установите значение 0, чтобы отключить ограничение скорости.</string>\n    <string name=\"action_stop\">Стоп</string>\n    <string name=\"action_continue\">Продолжить</string>\n    <string name=\"manga\">Манга</string>\n    <string name=\"action_add_repo_message\">Добавьте дополнительные репозитории к %s. Должно быть URL на окончании которого будет \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Работает только если нынешняя и следующая глава/серия уже скачана.</string>\n    <string name=\"non_library_settings\">Все прочитанные/просмотренные тайтлы</string>\n    <string name=\"action_sort_last_manga_update\">Последнему обновленному тайтлу</string>\n    <string name=\"action_show_manga\">Показать мангу</string>\n    <string name=\"action_display_show_continue_reading_button\">Показать кнопку «продолжить смотреть/читать»</string>\n    <string name=\"pref_update_only_completely_read\">Пропускать тайтлы с не просмотренными сериями/не прочитанными главами</string>\n    <string name=\"pref_category_delete_chapters\">Удалить главы/серии</string>\n    <string name=\"pref_remove_after_marked_as_read\">Удалять после вручную помеченного как прочитанный/просмотреный</string>\n    <string name=\"pref_remove_after_read\">Автоматически удалять после прочтения/просмотра</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Разрешить удаление глав/серий с закладками</string>\n    <string name=\"pref_auto_update_manga_sync\">Обновлять прогресс после прочтения/просмотра</string>\n    <string name=\"action_display_unseen_badge\">Не просмотренные серии</string>\n    <string name=\"pref_hosters_show_failure\">Хосты выдающие ошибку</string>\n    <string name=\"pref_hosters_show_empty\">Отобразить пустые хосты</string>\n    <string name=\"pref_category_intro_skip\">Пропустить вступление</string>\n    <string name=\"pref_enable_intro_skip\">Включить пропуск вступления</string>\n    <string name=\"pref_disable_aniskip_chapter\">Выключить AniSkip если в видео уже есть главы</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Неверный код: \\\"%s\\\"</string>\n    <string name=\"pref_player_editor\">Редактор скриптов</string>\n    <string name=\"pref_player_editor_summary\">Редактировать/создавать новые скрипты и настройки скриптов</string>\n    <string name=\"pref_player_editor_script\">Скрипты</string>\n    <string name=\"pref_player_editor_script_opts\">Настройки скриптов</string>\n    <string name=\"pref_player_no_items\">Директория ничего не содержит. Нажмите на плюсик чтобы добавить новый файл.</string>\n    <string name=\"editor_unsaved_progress\">Изменения не сохранены. Вы все еще желаете вернутся?</string>\n    <string name=\"editor_save_error\">Ошибка сохранения файла</string>\n    <string name=\"editor_save_success\">Файл сохранен</string>\n    <string name=\"editor_action_rename\">Переименовать файл</string>\n    <string name=\"editor_action_delete\">Удалить файл</string>\n    <string name=\"editor_file_already_exists\">Файл уже существует</string>\n    <string name=\"editor_invalid_filename\">Ошибка в имени файла</string>\n    <string name=\"editor_create_file\">Создать файл</string>\n    <string name=\"editor_edit_file\">Редактировать имя файла</string>\n    <string name=\"editor_filename\">Имя файла</string>\n    <string name=\"editor_create_error\">Ошибка создания файла</string>\n    <string name=\"editor_rename_error\">Ошибка переименования файла</string>\n    <string name=\"editor_delete_error\">Ошибка удаления файла</string>\n    <string name=\"editor_delete_file\">Удалить файл</string>\n    <string name=\"editor_delete_file_confirmation\">Вы точно хотите удалить файл \\\"%s\\\"?</string>\n    <string name=\"player_skip_action\">Пропустить %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s пропущено</string>\n    <string name=\"player_chapter_type_opening\">Опенинг</string>\n    <string name=\"player_chapter_type_mixedop\">Смешанные опенинги</string>\n    <string name=\"no_available_videos\">Нет доступных видео</string>\n    <string name=\"no_hosters\">Список хостов пуст</string>\n    <string name=\"no_episode_loaded\">Серии не загружены</string>\n    <string name=\"select_hoster_from_empty_list\">Хост выбран из пустого списка</string>\n    <string name=\"player_sheets_track_delay\">Задержка</string>\n    <string name=\"player_hoster_tap_to_load\">Нажмите чтобы загрузить видео</string>\n    <string name=\"player_hoster_failed\">Ошибка в загрузке видео</string>\n    <string name=\"player_sheets_chapters_title\">Главы</string>\n    <string name=\"type\">Тип</string>\n    <string name=\"label_cant_migrate_episode\">Ошибка миграции серии в сезон, выберите сезон чтобы продолжить</string>\n    <string name=\"label_show_seasons\">Показать сезоны</string>\n    <string name=\"action_display_show_continue_watching_button\">Продолжить просмотр</string>\n    <string name=\"action_display_grid_mode\">Режим отображения сеткой</string>\n    <string name=\"display_mode_season\">Сезон %1$s</string>\n    <string name=\"show_season_number\">Номер сезона</string>\n    <string name=\"sort_by_season_number\">По номеру сезона</string>\n    <string name=\"no_seasons_error\">Сезоны не найдены</string>\n    <string name=\"season_settings_updated\">Обновить стандартные настройки сезона</string>\n    <string name=\"season_settings\">Настройки сезона</string>\n    <string name=\"pref_behavior_episode\">Поведение серии</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Пометить дупликаты просмотренных серий как просмотренные</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">После просмотра серии</string>\n    <string name=\"pref_library_season\">Сезон</string>\n    <string name=\"pref_update_seasons_refresh\">Обновить сезоны сериями во время рефрэша</string>\n    <string name=\"pref_update_seasons_update\">Обновить сезоны сериями во время обновления библиотеки</string>\n    <string name=\"action_edit_background\">Редактировать фон</string>\n    <string name=\"custom_background\">Пользовательский фон</string>\n    <string name=\"background_saved\">Фон сохранён</string>\n    <string name=\"error_saving_background\">Ошибка сохранения фона</string>\n    <string name=\"error_sharing_background\">Ошибка поделиться фоном</string>\n    <string name=\"set_as_background\">Поставить как фон</string>\n    <string name=\"set_as_thumbnail\">Поставить как превью</string>\n    <string name=\"background_updated\">Фон обновлен</string>\n    <string name=\"notification_background_update_failed\">Ошибка в обновлении фона</string>\n    <string name=\"show_episode_previews\">Превью серии</string>\n    <string name=\"show_episode_summaries\">Итоги серии</string>\n    <string name=\"pref_behavior\">Поведение главы</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Обновлять прогресс, когда отмечено как Прочитано/Просмотрено</string>\n    <string name=\"pref_clear_chapter_cache\">Очистить кэш глав и серий</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Очистить кэш глав/серий при запуске приложения</string>\n    <string name=\"clear_database_confirmation\">Вы уверены? Завершенные серии и главы а также прогресс не библиотечного контента будет потерян</string>\n    <string name=\"pref_incognito_mode_summary\">Приостанавливает историю чтения</string>\n    <string name=\"manga_from_library\">Из библиотеки</string>\n    <string name=\"also_set_chapter_settings_for_library\">Также применить ко всем сериям в моей библиотеке</string>\n    <string name=\"dialog_with_checkbox_reset\">Сбросить все главы для этого тайтла</string>\n    <string name=\"download_insufficient_space\">Не удалось загрузить из-за малого объема хранилища</string>\n    <string name=\"download_queue_size_warning\">Предупреждение: Большое количество загрузок может привести к замедлению работы источников и/или блокировке Aniyomi. Нажмите для подробностей.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Принуждает приложение перепроверить загруженные главы и серии</string>\n    <string name=\"pref_player_settings_summary\">Внутренний плеер, жесты, декодировщики, субтитры</string>\n    <string name=\"pref_hosters\">Хосты</string>\n    <string name=\"pref_mpv_user_files\">Использовать файлы MPV пользователя</string>\n    <string name=\"pref_mpv_user_files_summary\">Использовать файлы в директории mpv-config</string>\n    <string name=\"player_chapter_type_ending\">Эндинг</string>\n    <string name=\"player_chapter_type_recap\">Краткий пересказ</string>\n    <string name=\"player_sheets_track_palette\">Палитра</string>\n    <string name=\"player_sheets_qualities_title\">Качества</string>\n    <string name=\"label_cant_migrate_season\">Ошибка миграции сезона в серию</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">После получения новой серии</string>\n    <string name=\"filler\">Филлер</string>\n    <string name=\"action_filter_fillermarked\">Помеченный филлер</string>\n    <string name=\"thumbnail_updated\">Превью обновлено</string>\n    <string name=\"action_fillermark_episode\">Пометить серию как филлер</string>\n    <string name=\"action_remove_fillermark_episode\">Снять пометку филлера с серии</string>\n    <string name=\"pref_download_fillermarked_items\">Разрешить загрузку серий помеченных как филлер</string>\n    <string name=\"label_player\">Плеер</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sa/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_update_show_tab_badge\">नवीकरणचित्रकस्य उपरि अपठितसङ्ख्यां दर्शयतु</string>\n    <string name=\"manga_categories\">वर्गाः</string>\n    <string name=\"action_display_local_badge_manga\">स्थानीयाः माङ्गाः</string>\n    <string name=\"default_manga_category\">प्राथमिकवर्गः</string>\n    <string name=\"pref_manga_library_update_categories_details\">माङ्गाः याः वर्जितवर्गेषु सन्ति ताः अन्तर्भूतवर्गेषु सन्ति चेदपि तासां नवीकरणं न भविष्यति।</string>\n    <string name=\"pref_remove_exclude_categories_manga\">वर्जितवर्गाः</string>\n    <string name=\"pref_clear_manga_database\">दत्तनिधिं मार्जयतु</string>\n    <string name=\"pref_clear_manga_database_summary\">तव ग्रन्थालये न रक्षितानां माङ्गानां चरित्रं नाशय</string>\n    <string name=\"snack_add_to_manga_library\">माङ्गां ग्रन्थालये योजयानि किम्</string>\n    <string name=\"download_error\">दोषः</string>\n    <string name=\"download_paused\">विरमितम्</string>\n    <string name=\"download_notifier_download_paused_chapters\">अवारोपणं विरमितम्</string>\n    <string name=\"channel_new_chapters_episodes\">अध्यायनवीकरणानि</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sah/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">Бөлөхтөр</string>\n    <string name=\"default_manga_category\">Куолутунан бөлөх</string>\n    <string name=\"pref_manga_library_update_categories_details\">Сотуллубут категориялар маангалара саҥардыллыа суоҕа, холбоммут категорияларга баарын үрдүнэн.</string>\n    <string name=\"pref_clear_manga_database\">Билим олоҕо ыраастааһына</string>\n    <string name=\"pref_clear_manga_database_summary\">Эн бэбэлэтиэкэҕэр суох маанга остуоруйатын сотторуу</string>\n    <string name=\"snack_add_to_manga_library\">Маанганы Бэбэлэтиэкэҕэ киллэрэбит дуу?</string>\n    <string name=\"download_error\">Сыыһааһын</string>\n    <string name=\"download_paused\">Тохтотулунна</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sc/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"action_filter_started\">Incumintzados</string>\n    <string name=\"action_reorganize_by\">Torra a ordinare</string>\n    <string name=\"relative_time_now\">Como</string>\n    <string name=\"pref_library_summary\">Categorias, agiornamentos globales, iscurrimentu de capìtulos</string>\n    <string name=\"pref_library_update_show_tab_badge\">Ammustra su nùmeru de capìtulos non lèghidos in s\\'icona de sos agiornamentos</string>\n    <string name=\"pref_category_player_orientation\">Orientamentu</string>\n    <string name=\"pref_player_audio_channels\">Canales àudio</string>\n    <string name=\"pref_player_audio_channels_auto\">Automàticu</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Istèreu</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Istèreu furriadu</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"pref_general_summary\">Limba de s\\'aplicatzione, notìficas</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Zafiru</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"local_source_badge\">In locale</string>\n    <string name=\"download_notifier_download_finish\">Iscarrigamentu acabadu</string>\n    <string name=\"action_hide\">Cua</string>\n    <string name=\"label_all\">Totu</string>\n    <string name=\"label_category\">Categoria</string>\n    <string name=\"manga_categories\">Categorias de manga</string>\n    <string name=\"general_categories\">Categorias</string>\n    <string name=\"anime_categories\">Categorias de ànime</string>\n    <string name=\"entries\">Elementos de sa biblioteca</string>\n    <string name=\"chapters_episodes\">Capìtulos e episòdios</string>\n    <string name=\"episodes\">Episòdios</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Ànime</string>\n    <string name=\"label_anime\">Ànime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_watched_episodes\">Pompiadu</string>\n    <string name=\"pref_start_screen\">Ischermada de incumintzu</string>\n    <string name=\"action_filter_unseen\">Non bìdidos</string>\n    <string name=\"action_sort_last_seen\">Ùrtimos bìdidos</string>\n    <string name=\"action_sort_last_checked\">Ùrtima verìfica</string>\n    <string name=\"action_mark_as_seen\">Marca comente pompiadu</string>\n    <string name=\"action_mark_as_unseen\">Marca comente non pompiadu</string>\n    <string name=\"action_download_unread\">Iscàrriga sos capìtulos non lèghidos</string>\n    <string name=\"action_next_episode\">Episòdiu imbeniente</string>\n    <string name=\"action_display_download_badge_anime\">Episòdios iscarrigados</string>\n    <string name=\"action_display_local_badge_manga\">Fontes locales</string>\n    <string name=\"default_manga_category\">Categoria predefinida</string>\n    <string name=\"pref_manga_library_update_categories_details\">Sos elementos in sas categorias esclùdidas non s\\'ant a agiornare nemmancu si sunt fintzas in categorias inclùdidas.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Custa estensione non benit dae sa lista ufitziale.</string>\n    <string name=\"unofficial_anime_extension_message\">Custa estensione non benit dae sa lista ufitziale.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Categorias esclùdidas</string>\n    <string name=\"pref_clear_manga_database\">Isbòida sa base de datos</string>\n    <string name=\"pref_clear_manga_database_summary\">Iscantzella sa cronologia pro sos elementos chi non sunt sarvados in sa biblioteca tua</string>\n    <string name=\"snack_add_to_manga_library\">Annànghere a sa biblioteca?</string>\n    <string name=\"download_error\">Errore</string>\n    <string name=\"download_paused\">In pàusa</string>\n    <string name=\"download_notifier_download_paused_chapters\">Iscarrigamentu in pàusa</string>\n    <string name=\"channel_new_chapters_episodes\">Agiornamentos de sos capìtulos</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sdh/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">کاتیگۆرییەکان</string>\n    <string name=\"action_display_local_badge_manga\">مانگای ناوخۆیی</string>\n    <string name=\"snack_add_to_manga_library\">زیادکردنی مانگا بۆ کۆکراوەکان؟</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sk/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Pre opustenie aplikácie, stačte znova tlačidlo späť</string>\n    <string name=\"action_sort_airing_time\">Čas vysielania</string>\n    <string name=\"action_reorganize_by\">Znovuorganizovať</string>\n    <string name=\"pref_library_update_show_tab_badge\">Zobraziť počet neprečítaných kapitol na ikone Aktualizácie</string>\n    <string name=\"manga_categories\">Kategórie Mangy</string>\n    <string name=\"action_display_local_badge_manga\">Lokálna manga</string>\n    <string name=\"default_manga_category\">Predvolená kategória</string>\n    <string name=\"pref_manga_library_update_categories_details\">Mangy vo vylúčených kategóriách nebudú aktualizované, aj keď sú tiež v zahrnutých kategóriách.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Vylúčené kategórie</string>\n    <string name=\"pref_clear_manga_database\">Vymazať databázu</string>\n    <string name=\"pref_clear_manga_database_summary\">Odstránenie histórie mangy, ktorá nie je uložená vo vašej knižnici</string>\n    <string name=\"snack_add_to_manga_library\">Pridať mangu do knižnice?</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sq/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Kategoritë, përditësimi global</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Притисните назад поново да изађете</string>\n    <string name=\"action_filter_started\">Стартовано</string>\n    <string name=\"action_sort_airing_time\">Време емитовања</string>\n    <string name=\"action_reorganize_by\">Промени редослед</string>\n    <string name=\"relative_time_now\">Сада</string>\n    <string name=\"pref_library_summary\">Категорије, глобално ажурирање, листање поглавља</string>\n    <string name=\"pref_library_update_show_tab_badge\">Прикажи број непрочитаних на икони \\\"Ново\\\"</string>\n    <string name=\"label_player_settings\">Подешавања плејера</string>\n    <string name=\"action_search_player_settings\">Подешавања плејера претраге</string>\n    <string name=\"pref_player_internal\">Интерни плејер</string>\n    <string name=\"pref_player_internal_summary\">Напредак, контроле, оријентација</string>\n    <string name=\"pref_progress_mark_as_seen\">У ком тренутку означити епизоду као виђену</string>\n    <string name=\"pref_preserve_watching_position\">Сачувај позицију гледања на виђеним епизодама</string>\n    <string name=\"pref_category_player_orientation\">Оријентација</string>\n    <string name=\"rotation_video\">Видео</string>\n    <string name=\"rotation_reverse_landscape\">Обрнути пејзаж</string>\n    <string name=\"rotation_sensor_portrait\">Сензор портрет</string>\n    <string name=\"rotation_sensor_landscape\">Сензор пејзаж</string>\n    <string name=\"pref_category_controls\">Контроле</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Дозволи гестове у панелима</string>\n    <string name=\"pref_controls_show_loading\">Прикажи круг учитавања</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Прикажи индикатор тренутног поглавља</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Појављује се само ако видео има поглавља</string>\n    <string name=\"pref_controls_display_volume_percentage\">Прикажи јачину звука као проценат</string>\n    <string name=\"pref_remember_brightness\">Запамти и пребаци на последње коришћену осветљеност</string>\n    <string name=\"pref_remember_volume\">Запамти и пребаци на последње коришћену јачину звука</string>\n    <string name=\"pref_player_fullscreen\">Прикажи садржај у исечку екрана</string>\n    <string name=\"pref_player_hide_controls\">Сакриј контроле плејера при отварању плејера</string>\n    <string name=\"pref_show_system_bar\">Прикажи статусну траку система са контролама</string>\n    <string name=\"pref_reduce_motion\">Смањи анимацију плејера</string>\n    <string name=\"pref_player_time_to_disappear\">Сакриј време контроле плејера</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s мс</string>\n    <string name=\"pref_panel_opacity\">Прозирност панела</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Омогући аутоматско прескакање</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Омогући Netflix стил</string>\n    <string name=\"pref_waiting_time_aniskip\">Време истека дугмета</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 секунди</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 секунди</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 секунди</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 секунди</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 секунди</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 секунди</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip захтева да аниме буде праћен са MAL или Anilist да би радио</string>\n    <string name=\"pref_enable_aniskip\">Омогући AniSkip</string>\n    <string name=\"pref_category_pip\">Слика у слици (PiP)</string>\n    <string name=\"pref_enable_pip\">Омогући коришћење PiP режима</string>\n    <string name=\"pref_pip_episode_toasts\">Прикажи обавештења о епизодама при преласку на следећу епизоду у PiP режиму</string>\n    <string name=\"pref_pip_on_exit\">Аутоматски прелазак у PiP режим при изласку из плејера</string>\n    <string name=\"pref_pip_replace_with_previous\">Замени опцију Прескочи 10 секунди са Претходна епизода</string>\n    <string name=\"pref_category_external_player\">Екстерни плејер</string>\n    <string name=\"pref_always_use_external_player\">Увек користи екстерни плејер</string>\n    <string name=\"pref_external_player_preference\">Преференција екстерног плејера</string>\n    <string name=\"pref_player_gestures\">Гестови</string>\n    <string name=\"pref_player_gestures_summary\">Претраживање, двоструки тап, контроле медија</string>\n    <string name=\"pref_category_player_sliders\">Клизачи</string>\n    <string name=\"enable_volume_brightness_gestures\">Омогући гестове за јачину звука и осветљеност</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Размените клизач јачине звука и осветљености</string>\n    <string name=\"pref_category_player_seeking\">Претраживање</string>\n    <string name=\"enable_horizontal_seek_gesture\">Омогући хоризонтални гест за претраживање</string>\n    <string name=\"pref_show_seekbar\">Прикажи траку за претраживање када се претражује</string>\n    <string name=\"pref_default_intro_length\">Подразумевана дужина прескакања увода</string>\n    <string name=\"pref_intro_length\">Дужина прескакања увода</string>\n    <string name=\"pref_skip_length\">Дупли тап за прескакање дужине</string>\n    <string name=\"pref_skip_disable\">Онемогући</string>\n    <string name=\"pref_player_smooth_seek\">Омогући прецизно тражење</string>\n    <string name=\"pref_player_smooth_seek_summary\">Када је омогућено, тражење неће бити фокусирано на кључне кадрове, што доводи до споријег али прецизног тражења</string>\n    <string name=\"pref_category_double_tap\">Двоструки тап</string>\n    <string name=\"pref_left_double_tap\">Двоструки тап (лево)</string>\n    <string name=\"pref_center_double_tap\">Двоструки тап (центар)</string>\n    <string name=\"pref_right_double_tap\">Двоструки тап (десно)</string>\n    <string name=\"pref_double_tap_info\">Када је тап жест означен као прилагођен, може се везати преко input.conf. Кодови кључева су 0x10001 за лево, 0x10002 за центар и 0x10003 за десно.</string>\n    <string name=\"single_action_none\">Нема</string>\n    <string name=\"single_action_seek\">Тражење</string>\n    <string name=\"single_action_playpause\">Пуштање/Паузирање</string>\n    <string name=\"single_action_switch\">Промени епизоду</string>\n    <string name=\"single_action_custom\">Прилагођен</string>\n    <string name=\"pref_category_media_controls\">Контроле медија</string>\n    <string name=\"pref_media_previous\">Претходни</string>\n    <string name=\"pref_media_playpause\">Пуштање/Паузирање</string>\n    <string name=\"pref_media_next\">Следећи</string>\n    <string name=\"pref_media_info\">Када је контрола медија означена као прилагођена, може се везати преко input.conf. Кодови кључева су 0x10004 за претходно, 0x10005 за пуштање/паузирање и 0x10006 за следеће.</string>\n    <string name=\"pref_player_decoder\">Декодер</string>\n    <string name=\"pref_player_decoder_summary\">Хардверско декодирање, формат пиксела, дебандинг</string>\n    <string name=\"pref_try_hw\">Покушајте хардверско декодирање</string>\n    <string name=\"pref_gpu_next_title\">Омогући gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Нови позадински систем за рендеровање видеа</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Нема</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Употребите YUV420P формат пиксела</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Може исправити црне екране на неким видео кодецима, такође може побољшати перформансе на рачун квалитета</string>\n    <string name=\"pref_player_subtitle\">Титлови</string>\n    <string name=\"pref_player_subtitle_summary\">Пожељни језици, бела листа, црна листа</string>\n    <string name=\"pref_player_subtitle_lang\">Пожељни језици</string>\n    <string name=\"pref_player_subtitle_lang_info\">Језици титла које треба преферирати на видеу са вишеструким титловима. Двословни или трословни кодови језика раде. Више вредности може бити одвојено запетом.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Бела листа</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Бела листа за титлове. Ако је бела листа дефинисана, први титл који садржи реч са беле листе биће коришћен. Више вредности може бити одвојено запетом.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Црна листа</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Црна листа за титлове. Ако је црна листа дефинисана, сви титлови који садрже реч са црне листе биће филтрирани. Више вредности може бити одвојено запетом.</string>\n    <string name=\"pref_player_audio\">Аудио</string>\n    <string name=\"pref_player_audio_summary\">Пожељни језици, корекција тона, аудио канали</string>\n    <string name=\"pref_player_audio_lang\">Пожељни језици</string>\n    <string name=\"pref_player_audio_lang_info\">Аудио језик(и) који треба изабрати по подразумеваним вредностима на видеу са вишеструким аудио токовима. Двословни или трословни кодови језика раде. Више вредности може бити одвојено запетом.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Омогући корекцију висине звука</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Спречава да звук постане висок при већим брзинама и низак при нижим брзинама</string>\n    <string name=\"pref_player_audio_channels\">Аудио канали</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Ауто-безбедно</string>\n    <string name=\"pref_player_audio_channels_auto\">Ауто</string>\n    <string name=\"pref_player_audio_channels_mono\">Моно</string>\n    <string name=\"pref_player_audio_channels_stereo\">Стерео</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Обрнути стерео</string>\n    <string name=\"pref_player_audio_boost_cap\">Ограничење појачавања звука</string>\n    <string name=\"pref_player_advanced\">Напредно</string>\n    <string name=\"pref_player_advanced_summary\">Скрипте, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Уреди MPV конфигурациони фајл за додатна подешавања плејера</string>\n    <string name=\"pref_reset_mpv_conf\">Ресетуј MPV конфигурациони фајл</string>\n    <string name=\"pref_mpv_input\">Уреди MPV уносни фајл за конфигурацију мапирања тастатуре</string>\n    <string name=\"video_fit_screen\">Прилагоди екрану</string>\n    <string name=\"video_crop_screen\">Исеци на екран</string>\n    <string name=\"video_stretch_screen\">Растегни на екран</string>\n    <string name=\"mpv_media_title\">%1$s - Е%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Пауза тајмера завршена</string>\n    <string name=\"player_generic_unit_ms\">мс</string>\n    <string name=\"numeric_chooser_value_too_big\">Вредност превелика</string>\n    <string name=\"numeric_chooser_value_too_small\">Вредност премала</string>\n    <string name=\"enable_auto_play\">Аутоматска репродукција је укључена</string>\n    <string name=\"disable_auto_play\">Аутоматска репродукција је искључена</string>\n    <string name=\"player_aniskip_dontskip\">Не прескачи</string>\n    <string name=\"player_aniskip_dontskip_toast\">Прескочи %s у %d секунди</string>\n    <string name=\"player_aniskip_skip\">%s прескочено</string>\n    <string name=\"no_next_episode\">Следећа епизода није пронађена!</string>\n    <string name=\"no_prev_episode\">Претходна епизода није пронађена!</string>\n    <string name=\"player_sheets_delay_set_as_default\">Постави као подразумевано</string>\n    <string name=\"player_sheets_audio_delay_title\">Кашњење звука</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Звук чујем</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Звук примећен</string>\n    <string name=\"player_sheets_sub_delay_title\">Кашњење титлова</string>\n    <string name=\"player_sheets_sub_delay_speed\">Брзина</string>\n    <string name=\"player_sheets_sub_delay_delay\">Кашњење</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Примарно</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Секундарно</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Оба</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Глас чујем</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Текст виђен</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Звук чујем</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Звук примећен</string>\n    <string name=\"player_sheets_sub_colors_title\">Боје</string>\n    <string name=\"player_sheets_subtitles_color_text\">Текст</string>\n    <string name=\"player_sheets_subtitles_color_border\">Граница</string>\n    <string name=\"player_sheets_subtitles_color_background\">Позадина</string>\n    <string name=\"player_sheets_sub_color_red\">Црвена</string>\n    <string name=\"player_sheets_sub_color_green\">Зелена</string>\n    <string name=\"player_sheets_sub_color_blue\">Плава</string>\n    <string name=\"player_sheets_sub_color_alpha\">Алфа</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Подешавања титлова</string>\n    <string name=\"player_sheets_sub_typography_title\">Типографија</string>\n    <string name=\"player_sheets_sub_typography_font\">Фонт</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Величина фонта</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Стил ивице</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Величина границе</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Померање сенке</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Оквир и сенка</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Непровидна кутија</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Кутија позадине</string>\n    <string name=\"player_sheets_sub_misc_title\">Разно</string>\n    <string name=\"player_sheets_sub_override_ass\">Препиши ASS/SSA титлове</string>\n    <string name=\"player_sheets_sub_scale\">Скала</string>\n    <string name=\"player_sheets_sub_position\">Позиција</string>\n    <string name=\"player_sheets_filters_title\">Филтери</string>\n    <string name=\"player_sheets_filters_brightness\">Осветљеност</string>\n    <string name=\"player_sheets_filters_contrast\">Контраст</string>\n    <string name=\"player_sheets_filters_gamma\">Гама</string>\n    <string name=\"player_sheets_filters_Saturation\">Засићеност</string>\n    <string name=\"player_sheets_filters_hue\">Нијанса</string>\n    <string name=\"player_sheets_filters_warning\">Неки филтери можда неће радити на вашим тренутним видео драјверима</string>\n    <string name=\"player_sheets_add_ext_audio\">Додајте спољне аудио траке</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Више</string>\n    <string name=\"player_hwdec_mode\">Режим хардверског декодирања</string>\n    <string name=\"pref_audio_channels\">Аудио канали</string>\n    <string name=\"player_sheets_stats_page_title\">Подразумевана страница статистике</string>\n    <string name=\"player_sheets_tracks_off\">Искључено</string>\n    <string name=\"player_sheets_stats_page_chip\">Страница %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Прилагођена дугмад</string>\n    <string name=\"player_seek_n_seconds\">%d секунде</string>\n    <string name=\"timer_title\">Тајмера спавања</string>\n    <string name=\"timer_remaining\">%s преостало</string>\n    <string name=\"timer_picker_enter_timer\">Унесите трајање</string>\n    <string name=\"timer_picker_pick_time\">Изаберите трајање</string>\n    <string name=\"timer_cancel_timer\">Откажите тренутни тајмер</string>\n    <string name=\"player_sheets_speed_slider_label\">Брзина</string>\n    <string name=\"player_sheets_speed_make_default\">Подеси као подразумевану брзину</string>\n    <string name=\"pref_audio_pitch_correction_title\">Омогућите корекцију тона аудио записа</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Спречава да звук добије високи тон на већим брзинама и дубок тон на мањим брзинама</string>\n    <string name=\"player_sheets_add_ext_sub\">Додај спољашње титлове</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Секундарни титлови неће имати ASS/SSA стилове.</string>\n    <string name=\"screenshot_show_subs\">Укључи титлове</string>\n    <string name=\"pref_general_summary\">Језик апликације, обавештења</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_preserve_reading_position\">Сачувај позицију читања на прочитаним поглављима</string>\n    <string name=\"pref_download_slots\">Максимално преузимање</string>\n    <string name=\"local_source_badge\">Локално</string>\n    <string name=\"anime_interval_expected_update\">Нове епизоде се предвиђају да ће бити објављене за око %1$s, проверавајући око сваких %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Овај аниме је или завршен, или нема предвиђен датум изласка.</string>\n    <string name=\"confirm_tracker_update_anime\">Ажурирајте пратитеље до епизоде %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Пратитељи ажурирани до поглавља %d</string>\n    <string name=\"trackers_updated_summary_anime\">Пратитељи ажурирани до епизоде %d</string>\n    <string name=\"download_notifier_download_finish\">Преузимање завршено</string>\n    <string name=\"action_hide\">Сакриј</string>\n    <string name=\"label_all\">Сви</string>\n    <string name=\"label_category\">Категорија</string>\n    <string name=\"manga_categories\">Kategorije</string>\n    <string name=\"general_categories\">Категорије</string>\n    <string name=\"anime_categories\">Аниме категорије</string>\n    <string name=\"entries\">Уноси у библиотеку</string>\n    <string name=\"chapters_episodes\">Поглавља и епизоде</string>\n    <string name=\"episodes\">Епизоде</string>\n    <string name=\"backup_settings_warning\">Упозорење: Прављење резервне копије подешавања ће такође сачувати ваше лозинке за праћење, не делите овај резервни фајл!</string>\n    <string name=\"label_manga_library\">Манга</string>\n    <string name=\"label_anime_library\">Аниме</string>\n    <string name=\"label_anime\">Аниме</string>\n    <string name=\"label_manga\">Манга</string>\n    <string name=\"label_recent_anime_updates\">Аниме ажурирања</string>\n    <string name=\"label_manga_sources\">Извори манге</string>\n    <string name=\"label_anime_sources\">Извори анимеа</string>\n    <string name=\"label_watched_duration\">Гледано трајање</string>\n    <string name=\"label_watched_episodes\">Гледано</string>\n    <string name=\"pref_start_screen\">Почетни екран</string>\n    <string name=\"pref_library_manga_columns\">Ставке манге по реду</string>\n    <string name=\"pref_library_anime_columns\">Ставке анимеа по реду</string>\n    <string name=\"pref_bottom_nav_no_history\">Премести Историју на још картицу</string>\n    <string name=\"pref_bottom_nav_no_updates\">Премести Ажурирања на још картицу</string>\n    <string name=\"pref_bottom_nav_no_manga\">Премести Мангу на још картицу</string>\n    <string name=\"pref_bottom_nav_no_browse\">Помери Претраживање на картицу Више</string>\n    <string name=\"action_filter_unseen\">Невидљиво</string>\n    <string name=\"action_global_manga_search\">Глобална претрага манге</string>\n    <string name=\"action_global_anime_search\">Глобална претрага анимеа</string>\n    <string name=\"action_sort_total_episodes\">Укупно епизода</string>\n    <string name=\"action_sort_last_seen\">Последњи пут виђено</string>\n    <string name=\"action_sort_last_checked\">Последњи пут проверено</string>\n    <string name=\"action_sort_latest_episode\">Најновија епизода</string>\n    <string name=\"action_sort_last_anime_update\">Последње ажурирање анимеа</string>\n    <string name=\"action_sort_unseen_count\">Број невидљивих</string>\n    <string name=\"action_sort_episode_fetch_date\">Датум преузимања епизоде</string>\n    <string name=\"action_mark_as_seen\">Означи као гледано</string>\n    <string name=\"action_mark_as_unseen\">Означи као негледано</string>\n    <string name=\"action_mark_previous_as_seen\">Означи претходно као виђено</string>\n    <string name=\"action_play_internally\">Пуштај интерно</string>\n    <string name=\"action_play_externally\">Пуштај екстерно</string>\n    <string name=\"action_download_unread\">Преузми непрочитана поглавља</string>\n    <string name=\"action_download_unseen\">Преузми невидљиве епизоде</string>\n    <string name=\"action_bookmark_episode\">Обележи епизоду</string>\n    <string name=\"action_remove_bookmark_episode\">Уклони обележавање епизоде</string>\n    <string name=\"action_edit_anime_categories\">Уреди аниме категорије</string>\n    <string name=\"action_edit_manga_categories\">Уреди манга категорије</string>\n    <string name=\"action_view_episodes\">Прикажи епизоде</string>\n    <string name=\"action_previous_episode\">Претходна епизода</string>\n    <string name=\"action_play\">Пуштај</string>\n    <string name=\"action_next_episode\">Следећа епизода</string>\n    <string name=\"action_screen_fit\">Режим прилагођавања екрана</string>\n    <string name=\"action_show_anime\">Прикажи аниме</string>\n    <string name=\"action_display_download_badge_anime\">Преузете епизоде</string>\n    <string name=\"action_display_local_badge_manga\">Lokalne mange</string>\n    <string name=\"action_display_local_badge_anime\">Локални аниме</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Претражуј само закачене изворе манге у глобалној претрази</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Претражуј само закачене изворе анимеа у глобалној претрази</string>\n    <string name=\"pref_hide_in_manga_library_items\">Сакриј уносе манге који су већ у библиотеци</string>\n    <string name=\"pref_hide_in_anime_library_items\">Сакриј уносе анимеа који су већ у библиотеци</string>\n    <string name=\"action_order_by_episode_number\">По броју епизоде</string>\n    <string name=\"action_start_download_externally\">Користи екстерни преузимач</string>\n    <string name=\"action_start_download_internally\">Користи интерни преузимач</string>\n    <string name=\"pref_bottom_nav_style\">Стил доње навигације</string>\n    <string name=\"pref_default_home_tab_library\">Постави почетни екран на картицу Манга</string>\n    <string name=\"default_manga_category\">Podrazumevana kategorija</string>\n    <string name=\"default_anime_category\">Подразумевана аниме категорија</string>\n    <string name=\"pref_manga_library_update_categories_details\">Манге у искљученим категоријама се неће ажурирати иако су такође у укљученим категоријама.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Аниме у искљученим категоријама неће бити ажурирани чак и ако су такође у укљученим категоријама.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Ово проширење није са званичне листе.</string>\n    <string name=\"unofficial_anime_extension_message\">Ово проширење није са званичне листе.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Искључене категорије</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Искључене аниме категорије</string>\n    <string name=\"pref_category_external_downloader\">Екстерни преузимач</string>\n    <string name=\"pref_use_external_downloader\">Увек користи екстерни преузимач за аниме</string>\n    <string name=\"pref_external_downloader_selection\">Преференција апликације за преузимање</string>\n    <string name=\"pref_download_new_episodes\">Преузми нове епизоде</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Прескочите преузимање дуплих виђених епизода</string>\n    <string name=\"auto_download_while_watching\">Аутоматско преузимање док гледате</string>\n    <string name=\"download_ahead_info_anime\">Ради само на уносима у библиотеци и ако су тренутна епизода и следећа већ преузете</string>\n    <string name=\"pref_track_on_add_library\">Отвори мени за праћење при додавању у библиотеку</string>\n    <string name=\"pref_show_next_episode_airing_time\">Прикажи време емитовања следеће епизоде</string>\n    <string name=\"pref_backup_flags_summary\">Које информације укључити у резервну копију</string>\n    <string name=\"pref_anime_storage_usage\">Коришћење складишта за аниме</string>\n    <string name=\"pref_manga_storage_usage\">Коришћење складишта за мангу</string>\n    <string name=\"used_cache_both\">Користи од анимеа: %1$s, користи од манге: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Избриши базу података</string>\n    <string name=\"pref_clear_anime_database\">Очисти базу података анимеа</string>\n    <string name=\"pref_clear_manga_database_summary\">Избриши историју манги које нису сачуване у колекцији</string>\n    <string name=\"pref_clear_anime_database_summary\">Обриши историју за аниме који нису сачувани у вашој библиотеци</string>\n    <string name=\"anime_from_library\">Аниме из библиотеке</string>\n    <string name=\"downloaded_episodes\">Преузете епизоде</string>\n    <string name=\"local_manga_source\">Локални извор манге</string>\n    <string name=\"local_anime_source\">Локални извор анимеа</string>\n    <string name=\"episode_not_found\">Епизода није пронађена</string>\n    <string name=\"local_invalid_episode_format\">Неважећи формат епизоде</string>\n    <string name=\"unknown_studio\">Непознато студио</string>\n    <string name=\"delete_confirmation\">Да ли сте сигурни да желите да обришете \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Обриши преузете епизоде?</string>\n    <string name=\"snack_add_to_manga_library\">Додај мангу у колекцију?</string>\n    <string name=\"snack_add_to_anime_library\">Додати аниме у библиотеку?</string>\n    <string name=\"display_mode_episode\">Епизода %1$s</string>\n    <string name=\"episode_downloading_progress\">Преузимање (%d%%)</string>\n    <string name=\"download_error\">Greška</string>\n    <string name=\"download_paused\">Pauzirano</string>\n    <string name=\"show_episode_number\">Број епизоде</string>\n    <string name=\"sort_by_episode_number\">По броју епизоде</string>\n    <string name=\"download_unseen\">Невидљиво</string>\n    <string name=\"confirm_delete_episodes\">Да ли сте сигурни да желите да обришете изабране епизоде?</string>\n    <string name=\"also_set_episode_settings_for_library\">Такође примени на све аниме у мојој библиотеци</string>\n    <string name=\"no_episodes_error\">Нису пронађене епизоде</string>\n    <string name=\"watching\">Гледање</string>\n    <string name=\"currently_reading\">Тренутно читам</string>\n    <string name=\"currently_watching\">Тренутно гледам</string>\n    <string name=\"plan_to_watch\">Планирам да гледам</string>\n    <string name=\"not_interesting\">Није занимљиво</string>\n    <string name=\"want_to_read\">Желим да читам</string>\n    <string name=\"want_to_watch\">Желим да гледам</string>\n    <string name=\"repeating_anime\">Поново гледам</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Ово ће уклонити датум гледања ове епизоде. Да ли сте сигурни?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Ресетуј све епизоде за овај аниме</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Напредак: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Напредак: %1$s</string>\n    <string name=\"recent_anime_time\">Еп. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Видео није пронађен</string>\n    <string name=\"notification_new_episodes\">Пронађене нове епизоде</string>\n    <string name=\"information_no_recent_anime\">Ништа није гледано недавно</string>\n    <string name=\"episode_settings_updated\">Ажурирана подразумевана подешавања епизоде</string>\n    <string name=\"download_notifier_download_paused_chapters\">Преузимање заустављено</string>\n    <string name=\"download_notifier_download_paused_episodes\">Преузимање епизоде је паузирано</string>\n    <string name=\"channel_new_chapters_episodes\">Ажурирања поглавља</string>\n    <string name=\"label_storage\">Складиште</string>\n    <string name=\"label_history\">Манга</string>\n    <string name=\"label_anime_history\">Аниме</string>\n    <string name=\"label_updates\">Манга</string>\n    <string name=\"label_anime_updates\">Аниме</string>\n    <string name=\"action_change_intro_length\">Промени дужину увода</string>\n    <string name=\"notification_episodes_single\">Епизода %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Епизода %1$s и још %2$d</string>\n    <string name=\"notification_episodes_multiple\">Епизоде %1$s</string>\n    <string name=\"episode_settings\">Подешавања епизоде</string>\n    <string name=\"pref_backup_flags\">Опције резервне копије</string>\n    <string name=\"label_manga_extensions\">Манга екстензије</string>\n    <string name=\"label_anime_extensions\">Аниме екстензије</string>\n    <string name=\"label_migration_manga\">Мигрирај мангу</string>\n    <string name=\"label_migration_anime\">Мигрирај аниме</string>\n    <string name=\"settings\">Подешавања</string>\n    <string name=\"copied_video_link_to_clipboard\">Линк за квалитет видеа копиран у клипборд</string>\n    <string name=\"choose_video_quality\">Изабери квалитет видеа:</string>\n    <string name=\"extension_settings\">Подешавања екстензије</string>\n    <string name=\"theme_cottoncandy\">Шећерна вуна</string>\n    <string name=\"theme_mocha\">Мока</string>\n    <string name=\"pref_episode_swipe_end\">Превлачење десно</string>\n    <string name=\"pref_episode_swipe_start\">Превлачење лево</string>\n    <string name=\"pref_category_hide_hidden\">Сакриј скривене категорије са екрана категорија и складишта</string>\n    <string name=\"pref_update_anime_release_grace_period\">Очекујени период милости за издавање анимеа</string>\n    <string name=\"data_saver_exclude\">Искључи из уштеде података</string>\n    <string name=\"data_saver_stop_exclude\">Престани са искључивањем из уштеде података</string>\n    <string name=\"data_saver\">Уштеда података</string>\n    <string name=\"data_saver_summary\">Компресуј слике пре преузимања или учитавања у читачу</string>\n    <string name=\"data_saver_downloader\">Користи уштеду података у преузимачу</string>\n    <string name=\"data_saver_ignore_jpeg\">Игнориши Jpeg слике</string>\n    <string name=\"data_saver_ignore_gif\">Игнориши Gif анимације</string>\n    <string name=\"data_saver_image_quality\">Квалитет слике</string>\n    <string name=\"data_saver_image_quality_summary\">Више вредности значе да је већи проценат квалитета слике сачуван, али то такође значи да је величина фајла већа, 80 процената је добра средина између величине фајла и квалитета слике</string>\n    <string name=\"data_saver_image_format\">Компресуј у Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Величина Jpeg фајла је знатно мања него Webp (што значи да се више података штеди), али то такође значи да слике губе више на квалитету.\n\\nТренутно компресује у Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Величина Jpeg фајла је знатно мања него Webp (што значи да се више података штеди), али то такође значи да слике губе више на квалитету.\n\\nТренутно компресује у Webp</string>\n    <string name=\"data_saver_color_bw\">Претвори у црно-бело</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (захтева Bandwidth Hero Proxy сервер)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Proxy сервер</string>\n    <string name=\"data_saver_server_summary\">Унесите Bandwidth Hero Proxy сервер URL овде</string>\n    <string name=\"download_slots_info\">Преузимаће истовремено само са самостално хостованих или неограничених извора</string>\n    <string name=\"unseen\">Невидљиво</string>\n    <string name=\"label_manga_extension_repos\">Репозиторијуми манга екстензија</string>\n    <string name=\"label_anime_extension_repos\">Репозиторијуми аниме екстензија</string>\n    <string name=\"onboarding_storage_action_create_folder\">Креирај подразумевану Aniyomi фасциклу</string>\n    <string name=\"download_speed_limit\">Ограничење брзине преузимања</string>\n    <string name=\"download_speed_limit_hint\">Поставите на 0 да бисте онемогућили ограничење брзине.</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/sv/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Tryck tillbaka igen för att lämna</string>\n    <string name=\"action_filter_started\">Börjat</string>\n    <string name=\"relative_time_now\">Nu</string>\n    <string name=\"pref_library_summary\">Kategorier, global uppdatering, kapitel svepning</string>\n    <string name=\"pref_library_update_show_tab_badge\">Visa antalet olästa på ikonen Uppdateringar</string>\n    <string name=\"label_player_settings\">Player inställningar</string>\n    <string name=\"pref_player_internal_summary\">Framsteg, kontroll, orientering</string>\n    <string name=\"manga_categories\">Kategorier</string>\n    <string name=\"action_display_local_badge_manga\">Lokal manga</string>\n    <string name=\"default_manga_category\">Standardkategori</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga i uteslutna kategorier uppdateras inte även om de också ingår i inkluderade kategorier.</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Uteslutna kategorier</string>\n    <string name=\"pref_clear_manga_database\">Rensa databas</string>\n    <string name=\"pref_clear_manga_database_summary\">Ta bort historik för manga som inte finns i ditt bibliotek</string>\n    <string name=\"snack_add_to_manga_library\">Lägg till manga i biblioteket?</string>\n    <string name=\"download_error\">Fel</string>\n    <string name=\"download_paused\">Pausad</string>\n    <string name=\"download_notifier_download_paused_chapters\">Nedladdning pausad</string>\n    <string name=\"channel_new_chapters_episodes\">Kapiteluppdateringar</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ta/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">வெளியேற மீண்டும் அழுத்தவும்</string>\n    <string name=\"action_filter_started\">தொடங்கியது</string>\n    <string name=\"action_sort_airing_time\">ஒளிபரப்பும் நேரம்</string>\n    <string name=\"action_reorganize_by\">மறுவரிசை</string>\n    <string name=\"relative_time_now\">இப்போது</string>\n    <string name=\"pref_library_summary\">வகைகள், உலகளாவிய புதுப்பிப்பு, அத்தியாயம்/எபிசோட் ச்வைப்</string>\n    <string name=\"pref_library_update_show_tab_badge\">புதுப்பிப்புகள் ஐகானில் காணப்படாத/படிக்காத எண்ணிக்கையைக் காட்டுங்கள்</string>\n    <string name=\"label_player_settings\">பிளேயர் அமைப்புகள்</string>\n    <string name=\"action_search_player_settings\">பிளேயர் அமைப்புகளைத் தேடுங்கள்</string>\n    <string name=\"pref_player_internal\">உள் வீரர்</string>\n    <string name=\"pref_player_internal_summary\">முன்னேற்றம், கட்டுப்பாடுகள், நோக்குநிலை</string>\n    <string name=\"pref_progress_mark_as_seen\">எபிசோடைக் காண எந்த கட்டத்தில்</string>\n    <string name=\"pref_preserve_watching_position\">பார்த்த அத்தியாயங்களில் வாட்ச் நிலையைப் பாதுகாக்கவும்</string>\n    <string name=\"pref_category_player_orientation\">நோக்குநிலை</string>\n    <string name=\"rotation_reverse_landscape\">தலைகீழ் நிலப்பரப்பு</string>\n    <string name=\"rotation_sensor_portrait\">சென்சார் உருவப்படம்</string>\n    <string name=\"rotation_sensor_landscape\">சென்சார் நிலப்பரப்பு</string>\n    <string name=\"pref_remember_brightness\">நினைவில் வைத்துக் கொள்ளுங்கள் மற்றும் கடைசியாக பயன்படுத்தப்பட்ட பிரகாசத்திற்கு மாறவும்</string>\n    <string name=\"pref_remember_volume\">கடைசியாக பயன்படுத்தப்பட்ட தொகுதிக்கு நினைவில் வைத்துக் கொள்ளுங்கள்</string>\n    <string name=\"pref_player_fullscreen\">காட்சி கட்அவுட்டில் உள்ளடக்கத்தைக் காட்டு</string>\n    <string name=\"pref_player_hide_controls\">பிளேயரைத் திறக்கும்போது பிளேயர் கட்டுப்பாடுகளை மறைக்கவும்</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">ஆட்டோ ச்கிப்பை இயக்கவும்</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">நெட்ஃபிக்ச் பாணியை இயக்கவும்</string>\n    <string name=\"pref_waiting_time_aniskip\">பொத்தான் நேரம் முடிந்தது</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 விநாடிகள்</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 விநாடிகள்</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 விநாடிகள்</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 விநாடிகள்</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 விநாடிகள்</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 வினாடிகள்</string>\n    <string name=\"pref_category_player_aniskip_info\">அனிச்கிப் அனிமேசை மால் அல்லது அனிலிச்ட்டுடன் கண்காணிக்க வேண்டும்</string>\n    <string name=\"pref_enable_aniskip\">அனிச்கிப்பை இயக்கவும்</string>\n    <string name=\"pref_category_pip\">படம்-படம் (பிஐபி)</string>\n    <string name=\"pref_enable_pip\">பிஐபி பயன்முறையின் பயன்பாட்டை இயக்கவும்</string>\n    <string name=\"pref_pip_episode_toasts\">பிஐபி பயன்முறையில் அத்தியாயங்களை மாற்றும்போது எபிசோட் டோச்ட்களைக் காட்டு</string>\n    <string name=\"pref_pip_on_exit\">பிளேயரை விட்டு வெளியேறும்போது தானாகவே பிஐபி பயன்முறைக்கு மாறவும்</string>\n    <string name=\"pref_pip_replace_with_previous\">தவிர் 10 விநாடிகள் விருப்பத்தை முந்தைய அத்தியாயத்துடன் மாற்றுகிறது</string>\n    <string name=\"pref_category_external_player\">வெளிப்புற பிளேயர்</string>\n    <string name=\"pref_always_use_external_player\">எப்போதும் வெளிப்புற பிளேயரைப் பயன்படுத்துங்கள்</string>\n    <string name=\"pref_external_player_preference\">வெளிப்புற பிளேயர் விருப்பம்</string>\n    <string name=\"pref_player_gestures\">சைகைகள்</string>\n    <string name=\"pref_player_gestures_summary\">தேடுவது, இரட்டை குழாய், ஊடக கட்டுப்பாடுகள்</string>\n    <string name=\"enable_volume_brightness_gestures\">தொகுதி மற்றும் பிரகாச சைகைகளை இயக்கவும்</string>\n    <string name=\"pref_category_player_seeking\">தேடுவது</string>\n    <string name=\"enable_horizontal_seek_gesture\">கிடைமட்ட தேடல் சைகையை இயக்கவும்</string>\n    <string name=\"pref_default_intro_length\">இயல்புநிலை அறிமுகம் நீளம்</string>\n    <string name=\"pref_intro_length\">அறிமுக நீளத்தைத் தவிர்க்கவும்</string>\n    <string name=\"pref_skip_length\">நீளத்தைத் தவிர்க்க இரட்டை தட்டவும்</string>\n    <string name=\"pref_skip_disable\">முடக்கு</string>\n    <string name=\"pref_player_smooth_seek\">துல்லியமான தேடலை இயக்கவும்</string>\n    <string name=\"pref_player_smooth_seek_summary\">இயக்கப்பட்டால், தேடுவது கீஃப்ரேம்களில் கவனம் செலுத்தாது, இது மெதுவான ஆனால் துல்லியமான தேடலுக்கு வழிவகுக்கும்</string>\n    <string name=\"pref_category_double_tap\">இரட்டை குழாய்</string>\n    <string name=\"pref_left_double_tap\">இரட்டை குழாய் (இடது)</string>\n    <string name=\"pref_center_double_tap\">இரட்டை குழாய் (மையம்)</string>\n    <string name=\"pref_right_double_tap\">இரட்டை குழாய் (வலது)</string>\n    <string name=\"pref_double_tap_info\">ஒரு குழாய் சைகை தனிப்பயன் என அமைக்கப்படும்போது, அதை input.conf மூலம் பிணைக்க முடியும். முக்கிய குறியீடுகள் இடதுபுறத்தில் 0x10001, மையத்திற்கு 0x10002, மற்றும் வலதுபுறத்தில் 0x10003.</string>\n    <string name=\"single_action_none\">எதுவுமில்லை</string>\n    <string name=\"single_action_seek\">தேடுங்கள்</string>\n    <string name=\"single_action_playpause\">விளையாடு/இடைநிறுத்தம்</string>\n    <string name=\"single_action_switch\">மாறும் அத்தியாயம்</string>\n    <string name=\"single_action_custom\">தனிப்பயன்</string>\n    <string name=\"pref_category_media_controls\">ஊடக கட்டுப்பாடுகள்</string>\n    <string name=\"pref_media_previous\">முந்தைய</string>\n    <string name=\"pref_media_playpause\">விளையாடு/இடைநிறுத்தம்</string>\n    <string name=\"pref_media_next\">அடுத்தது</string>\n    <string name=\"pref_media_info\">ஒரு ஊடகக் கட்டுப்பாடு தனிப்பயன் என அமைக்கப்பட்டால், அதை input.conf மூலம் பிணைக்க முடியும். முக்கிய குறியீடுகள் முந்தையவர்களுக்கு 0x10004, PLAY/PAUS க்கு 0x10005, மற்றும் அடுத்ததாக 0x10006.</string>\n    <string name=\"pref_player_decoder\">டிகோடர்</string>\n    <string name=\"pref_player_decoder_summary\">வன்பொருள் டிகோடிங், படப்புள்ளி வடிவம், குறைத்தல்</string>\n    <string name=\"pref_try_hw\">வன்பொருள் டிகோடிங்கை முயற்சிக்கவும்</string>\n    <string name=\"pref_gpu_next_title\">GPU-next ஐ இயக்கவும்</string>\n    <string name=\"pref_gpu_next_subtitle\">பின்தளத்தில் வழங்கும் புதிய வீடியோ</string>\n    <string name=\"pref_debanding_title\">குறைப்பு</string>\n    <string name=\"pref_debanding_none\">எதுவுமில்லை</string>\n    <string name=\"pref_debanding_cpu\">சிபியு</string>\n    <string name=\"pref_debanding_gpu\">சி.பீ.யூ</string>\n    <string name=\"pref_debanding_yuv420p\">SE420p</string>\n    <string name=\"pref_use_yuv420p_title\">YUV420P படப்புள்ளி வடிவமைப்பைப் பயன்படுத்தவும்</string>\n    <string name=\"pref_use_yuv420p_subtitle\">சில வீடியோ கோடெக்குகளில் கருப்பு திரையை சரிசெய்யலாம், தரத்தின் விலையில் செயல்திறனை மேம்படுத்தலாம்</string>\n    <string name=\"pref_player_subtitle\">வசன வரிகள்</string>\n    <string name=\"pref_player_subtitle_summary\">விருப்பமான மொழிகள், அனுமதிப்பட்டாளர், தடுப்புப்பட்டியல்</string>\n    <string name=\"pref_player_subtitle_lang\">விருப்பமான மொழிகள்</string>\n    <string name=\"pref_player_subtitle_lang_info\">பல வசன வரிகள் கொண்ட வீடியோவில் இயல்புநிலையாக தேர்ந்தெடுக்கப்பட வேண்டிய வசன மொழி (கள்), இரண்டு அல்லது மூன்று எழுத்து மொழிகள் குறியீடுகள் வேலை செய்கின்றன. பல மதிப்புகளை கமாவால் பிரிக்க முடியும்.</string>\n    <string name=\"pref_player_subtitle_whitelist\">அனுமதிப்பட்டியலாளர்</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">வசன வரிகளுக்கான அனுமதிப்பட்டியலாளர். ஒரு அனுமதிப்பட்டியலாளர் வரையறுக்கப்பட்டால், அனுமதிப்பட்டிய வார்த்தையைக் கொண்ட முதல் வசன வரிகள் பயன்படுத்தப்படும். பல மதிப்புகளை கமாவால் பிரிக்க முடியும்.</string>\n    <string name=\"pref_player_subtitle_blacklist\">தடுப்புப்பட்டியல்</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">வசன வரிகளுக்கான தடுப்புப்பட்டியல். ஒரு தடுப்புப்பட்டியல் வரையறுக்கப்பட்டால், ஒரு தடுப்புப்பட்டியலில் உள்ள அனைத்து வசன வரிகள் வடிகட்டப்படும். பல மதிப்புகளை கமாவால் பிரிக்க முடியும்.</string>\n    <string name=\"pref_player_audio\">ஆடியோ</string>\n    <string name=\"pref_player_audio_summary\">விருப்பமான மொழிகள், சுருதி திருத்தம், ஆடியோ சேனல்கள்</string>\n    <string name=\"pref_player_audio_lang\">விருப்பமான மொழிகள்</string>\n    <string name=\"pref_player_audio_lang_info\">ஆடியோ மொழி (கள்) இயல்புநிலையாக பல ஆடியோ ச்ட்ரீம்கள் கொண்ட வீடியோவில் தேர்ந்தெடுக்கப்பட வேண்டும், இரண்டு அல்லது மூன்று எழுத்து மொழிகள் குறியீடுகள் வேலை செய்கின்றன. பல மதிப்புகளை கமாவால் பிரிக்க முடியும்.</string>\n    <string name=\"pref_player_audio_pitch_correction\">ஆடியோ சுருதி திருத்தத்தை இயக்கவும்</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">ஆடியோ வேகமான வேகத்தில் அதிக அளவில் மாறுவதைத் தடுக்கிறது மற்றும் மெதுவான வேகத்தில் குறைந்தது</string>\n    <string name=\"pref_player_audio_channels\">ஆடியோ சேனல்கள்</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">ஆட்டோ-பாதுகாப்பானது</string>\n    <string name=\"pref_player_audio_channels_auto\">தானி</string>\n    <string name=\"pref_player_audio_channels_mono\">மோனோ</string>\n    <string name=\"pref_player_audio_channels_stereo\">ச்டீரியோ</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">தலைகீழ் ச்டீரியோ</string>\n    <string name=\"pref_player_audio_boost_cap\">தொகுதி பூச்ட் தொப்பி</string>\n    <string name=\"pref_player_advanced\">மேம்பட்ட</string>\n    <string name=\"pref_player_advanced_summary\">ச்கிரிப்ட்கள், MPV.Conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">மேலும் பிளேயர் அமைப்புகளுக்கு MPV உள்ளமைவு கோப்பைத் திருத்தவும்</string>\n    <string name=\"pref_reset_mpv_conf\">MPV உள்ளமைவு கோப்பை மீட்டமைக்கவும்</string>\n    <string name=\"pref_mpv_input\">விசைப்பலகை மேப்பிங் உள்ளமைவுக்கு MPV உள்ளீட்டு கோப்பைத் திருத்து</string>\n    <string name=\"video_fit_screen\">திரைக்கு பொருந்தும்</string>\n    <string name=\"video_crop_screen\">திரைக்கு வெட்டப்பட்டது</string>\n    <string name=\"video_stretch_screen\">திரைக்கு நீட்டப்பட்டது</string>\n    <string name=\"mpv_media_title\">%1$s - இ %2$s - %3$s</string>\n    <string name=\"enable_auto_play\">ஆட்டோ-பிளே இயக்கத்தில் உள்ளது</string>\n    <string name=\"disable_auto_play\">ஆட்டோ-பிளே முடக்கப்பட்டுள்ளது</string>\n    <string name=\"player_aniskip_dontskip\">தவிர்க்க வேண்டாம்</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s ஐ %d வினாடிகளில் தவிர்க்கவும்</string>\n    <string name=\"player_aniskip_skip\">%s தவிர்க்கப்பட்டன</string>\n    <string name=\"no_next_episode\">அடுத்த அத்தியாயம் கிடைக்கவில்லை!</string>\n    <string name=\"player_hwdec_mode\">வன்பொருள் டிகோடிங் பயன்முறை</string>\n    <string name=\"screenshot_show_subs\">வசன வரிகள் சேர்க்கவும்</string>\n    <string name=\"pref_general_summary\">பயன்பாட்டு மொழி, அறிவிப்புகள்</string>\n    <string name=\"theme_cloudflare\">கிளவுட்ஃப்ளேர்</string>\n    <string name=\"theme_sapphire\">சபையர்</string>\n    <string name=\"theme_doom\">டூம்</string>\n    <string name=\"theme_matrix\">அணி</string>\n    <string name=\"pref_preserve_reading_position\">வாசிப்பு அத்தியாயங்களில் வாசிப்பு நிலையைப் பாதுகாக்கவும்</string>\n    <string name=\"pref_download_slots\">அதிகபட்ச பதிவிறக்கங்கள்</string>\n    <string name=\"local_source_badge\">உள்ளக</string>\n    <string name=\"anime_interval_expected_update\">புதிய அத்தியாயங்கள் சுமார் %1$s இல் வெளியிடப்படும் என்று கணிக்கப்பட்டுள்ளது, ஒவ்வொரு %2$s ஐச் சுற்றி வருகிறது.</string>\n    <string name=\"anime_interval_expected_update_null\">இந்த அனிம் முடிந்தது, அல்லது கணிக்கப்பட்ட வெளியீட்டு தேதி எதுவும் இல்லை.</string>\n    <string name=\"confirm_tracker_update_anime\">எபிசோட் %d க்கு டிராக்கர்களைப் புதுப்பிக்கவா?</string>\n    <string name=\"trackers_updated_summary_manga\">டிராக்கர்கள் அத்தியாயம் %d க்கு புதுப்பிக்கப்பட்டன</string>\n    <string name=\"trackers_updated_summary_anime\">டிராக்கர்கள் எபிசோட் %க்கு புதுப்பிக்கப்பட்டன</string>\n    <string name=\"download_notifier_download_finish\">பதிவிறக்கம் முடிந்தது</string>\n    <string name=\"action_hide\">மறை</string>\n    <string name=\"label_all\">அனைத்தும்</string>\n    <string name=\"label_category\">வகை</string>\n    <string name=\"manga_categories\">மங்கா பிரிவுகள்</string>\n    <string name=\"general_categories\">வகைகள்</string>\n    <string name=\"anime_categories\">அனிம் பிரிவுகள்</string>\n    <string name=\"entries\">நூலக உள்ளீடுகள்</string>\n    <string name=\"chapters_episodes\">அத்தியாயங்கள் மற்றும் அத்தியாயங்கள்</string>\n    <string name=\"episodes\">அத்தியாயங்கள்</string>\n    <string name=\"backup_settings_warning\">எச்சரிக்கை: காப்புப்பிரதி அமைப்புகள் உங்கள் டிராக் கடவுச்சொற்களையும் சேமிக்கும், இந்த காப்புப்பிரதி கோப்பைப் பகிர வேண்டாம்!</string>\n    <string name=\"label_manga_library\">மங்கா</string>\n    <string name=\"label_anime_library\">அனிம்</string>\n    <string name=\"label_anime\">அனிம்</string>\n    <string name=\"label_manga\">மங்கா</string>\n    <string name=\"label_recent_anime_updates\">அனிம் புதுப்பிப்புகள்</string>\n    <string name=\"label_manga_sources\">மங்கா ஆதாரங்கள்</string>\n    <string name=\"label_anime_sources\">அனிம் ஆதாரங்கள்</string>\n    <string name=\"label_watched_duration\">பார்த்த காலம்</string>\n    <string name=\"label_watched_episodes\">பார்த்தேன்</string>\n    <string name=\"pref_start_screen\">திரை தொடக்க</string>\n    <string name=\"pref_library_manga_columns\">ஒரு வரிசையில் மங்கா உருப்படிகள்</string>\n    <string name=\"pref_library_anime_columns\">ஒரு வரிசையில் அனிம் உருப்படிகள்</string>\n    <string name=\"pref_bottom_nav_no_history\">வரலாற்றை மேலும் தாவலுக்கு நகர்த்தவும்</string>\n    <string name=\"pref_bottom_nav_no_updates\">புதுப்பிப்புகளை மேலும் தாவலுக்கு நகர்த்தவும்</string>\n    <string name=\"pref_bottom_nav_no_manga\">மங்காவை மேலும் தாவலுக்கு நகர்த்தவும்</string>\n    <string name=\"pref_bottom_nav_no_browse\">மேலும் தாவலுக்கு உலாவவும்</string>\n    <string name=\"action_filter_unseen\">காணப்படாதது</string>\n    <string name=\"action_global_manga_search\">உலகளாவிய மங்கா தேடல்</string>\n    <string name=\"action_global_anime_search\">உலகளாவிய அனிம் தேடல்</string>\n    <string name=\"action_sort_total_episodes\">மொத்த அத்தியாயங்கள்</string>\n    <string name=\"action_sort_last_seen\">கடைசியாக பார்த்தேன்</string>\n    <string name=\"action_sort_last_checked\">கடைசியாக சரிபார்க்கப்பட்டது</string>\n    <string name=\"action_sort_latest_episode\">அண்மைக் கால அத்தியாயம்</string>\n    <string name=\"action_sort_last_anime_update\">கடைசி அனிம் புதுப்பிப்பு</string>\n    <string name=\"action_sort_unseen_count\">காணப்படாத எண்ணிக்கை</string>\n    <string name=\"action_sort_episode_fetch_date\">எபிசோட் பெறப்பட்ட தேதி</string>\n    <string name=\"action_mark_as_seen\">பார்த்தபடி குறி</string>\n    <string name=\"action_mark_as_unseen\">குறிக்கப்படாத எனக் குறிக்கவும்</string>\n    <string name=\"action_mark_previous_as_seen\">பார்த்தபடி முந்தையதைக் குறிக்கவும்</string>\n    <string name=\"action_play_internally\">உள்நாட்டில் விளையாடுங்கள்</string>\n    <string name=\"action_play_externally\">வெளிப்புறமாக விளையாடுங்கள்</string>\n    <string name=\"action_download_unread\">படிக்காத அத்தியாயங்களைப் பதிவிறக்கவும்</string>\n    <string name=\"action_download_unseen\">காணப்படாத அத்தியாயங்களைப் பதிவிறக்கவும்</string>\n    <string name=\"action_bookmark_episode\">புக்மார்க்கு அத்தியாயம்</string>\n    <string name=\"action_remove_bookmark_episode\">UNBOOKMARK அத்தியாயம்</string>\n    <string name=\"action_edit_anime_categories\">அனிம் வகைகளைத் திருத்தவும்</string>\n    <string name=\"action_edit_manga_categories\">மங்கா வகைகளைத் திருத்து</string>\n    <string name=\"action_view_episodes\">அத்தியாயங்களைக் காண்க</string>\n    <string name=\"action_previous_episode\">முந்தைய அத்தியாயம்</string>\n    <string name=\"action_play\">விளையாடுங்கள்</string>\n    <string name=\"action_next_episode\">அடுத்த அத்தியாயம்</string>\n    <string name=\"action_screen_fit\">திரை ஃபிட் பயன்முறை</string>\n    <string name=\"action_show_anime\">அனிமேசைக் காட்டு</string>\n    <string name=\"action_display_download_badge_anime\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்கள்</string>\n    <string name=\"action_display_local_badge_manga\">உள்ளக மங்கா</string>\n    <string name=\"action_display_local_badge_anime\">உள்ளக அனிம்</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">உலகளாவிய தேடலில் தேடல் பொருத்தப்பட்ட மங்கா ஆதாரங்கள் மட்டுமே</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">உலகளாவிய தேடலில் தேடல் பொருத்தப்பட்ட அனிம் ஆதாரங்கள் மட்டுமே</string>\n    <string name=\"pref_hide_in_manga_library_items\">ஏற்கனவே நூலகத்தில் மங்கா உள்ளீடுகளை மறைக்கவும்</string>\n    <string name=\"pref_hide_in_anime_library_items\">ஏற்கனவே நூலகத்தில் அனிம் உள்ளீடுகளை மறைக்கவும்</string>\n    <string name=\"action_order_by_episode_number\">அத்தியாயம் எண் மூலம்</string>\n    <string name=\"action_start_download_externally\">வெளிப்புற பதிவிறக்கத்தைப் பயன்படுத்தவும்</string>\n    <string name=\"action_start_download_internally\">உள் பதிவிறக்கத்தைப் பயன்படுத்தவும்</string>\n    <string name=\"pref_bottom_nav_style\">கீழே உள்ள வழிசெலுத்தல் நடை</string>\n    <string name=\"pref_default_home_tab_library\">தொடக்கத் திரையை மங்கா தாவலுக்கு அமைக்கவும்</string>\n    <string name=\"default_manga_category\">இயல்புநிலை மங்கா வகை</string>\n    <string name=\"default_anime_category\">இயல்புநிலை அனிம் வகை</string>\n    <string name=\"pref_manga_library_update_categories_details\">மங்கா விலக்கப்பட்ட வகைகளில் சேர்க்கப்பட்ட வகைகளில் இருந்தாலும் அவை புதுப்பிக்கப்படாது.</string>\n    <string name=\"pref_anime_library_update_categories_details\">விலக்கப்பட்ட வகைகளில் அனிம் சேர்க்கப்பட்ட வகைகளில் இருந்தாலும் அவை புதுப்பிக்கப்படாது.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">இந்த நீட்டிப்பு அதிகாரப்பூர்வ பட்டியலிலிருந்து அல்ல.</string>\n    <string name=\"unofficial_anime_extension_message\">இந்த நீட்டிப்பு அதிகாரப்பூர்வ பட்டியலிலிருந்து அல்ல.</string>\n    <string name=\"episode_download_progress\">%1$d %%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">விலக்கப்பட்ட மங்கா வகைகள்</string>\n    <string name=\"pref_remove_exclude_categories_anime\">விலக்கப்பட்ட அனிம் வகைகள்</string>\n    <string name=\"pref_category_external_downloader\">வெளிப்புற பதிவிறக்குபவர்</string>\n    <string name=\"pref_use_external_downloader\">அனிமேசுக்கு எப்போதும் வெளிப்புற பதிவிறக்கத்தைப் பயன்படுத்துங்கள்</string>\n    <string name=\"pref_external_downloader_selection\">பதிவிறக்குதல் பயன்பாட்டு விருப்பம்</string>\n    <string name=\"pref_download_new_episodes\">புதிய அத்தியாயங்களைப் பதிவிறக்கவும்</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">பதிவிறக்கம் செய்வதைத் தவிர்க்கவும் நகல் பார்த்த அத்தியாயங்கள்</string>\n    <string name=\"auto_download_while_watching\">பார்க்கும்போது தானாக பதிவிறக்கம்</string>\n    <string name=\"download_ahead_info_anime\">நூலகத்தில் உள்ளீடுகளில் மட்டுமே வேலை செய்கிறது மற்றும் தற்போதைய எபிசோட் மற்றும் அடுத்தது ஏற்கனவே பதிவிறக்கம் செய்யப்பட்டால்</string>\n    <string name=\"pref_track_on_add_library\">நூலகத்தில் சேர்ப்பதில் டிராக் மெனுவைத் திறக்கவும்</string>\n    <string name=\"pref_show_next_episode_airing_time\">அடுத்த அத்தியாயத்தை ஒளிபரப்பும் நேரத்தைக் காட்டு</string>\n    <string name=\"pref_backup_flags_summary\">காப்புப்பிரதி கோப்பில் என்ன செய்தி சேர்க்க வேண்டும்</string>\n    <string name=\"pref_anime_storage_usage\">அனிம் சேமிப்பு பயன்பாடு</string>\n    <string name=\"pref_manga_storage_usage\">மங்கா சேமிப்பு பயன்பாடு</string>\n    <string name=\"used_cache_both\">அனிம் பயன்படுத்துகிறது: %1$s, மங்கா பயன்படுத்துகிறது: %2$s</string>\n    <string name=\"pref_clear_manga_database\">மங்கா தரவுத்தளத்தை அழிக்கவும்</string>\n    <string name=\"pref_clear_anime_database\">அனிம் தரவுத்தளத்தை அழிக்கவும்</string>\n    <string name=\"pref_clear_manga_database_summary\">உங்கள் நூலகத்தில் சேமிக்கப்படாத மங்காவிற்கான வரலாற்றை நீக்கவும்</string>\n    <string name=\"pref_clear_anime_database_summary\">உங்கள் நூலகத்தில் சேமிக்கப்படாத அனிமேசிற்கான வரலாற்றை நீக்கவும்</string>\n    <string name=\"anime_from_library\">நூலகத்திலிருந்து அனிம்</string>\n    <string name=\"downloaded_episodes\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்கள்</string>\n    <string name=\"local_manga_source\">உள்ளக மங்கா சான்று</string>\n    <string name=\"local_anime_source\">உள்ளக அனிம் சான்று</string>\n    <string name=\"episode_not_found\">அத்தியாயம் கிடைக்கவில்லை</string>\n    <string name=\"local_invalid_episode_format\">தவறான அத்தியாயம் வடிவம்</string>\n    <string name=\"unknown_studio\">தெரியாத ச்டுடியோ</string>\n    <string name=\"delete_confirmation\">\\\"%s\\\" ஐ நீக்க விரும்புகிறீர்களா?</string>\n    <string name=\"delete_downloads_for_anime\">பதிவிறக்கம் செய்யப்பட்ட அத்தியாயங்களை நீக்கவா?</string>\n    <string name=\"snack_add_to_manga_library\">நூலகத்தில் மங்காவைச் சேர்க்கவா?</string>\n    <string name=\"snack_add_to_anime_library\">நூலகத்தில் அனிம் சேர்க்கவா?</string>\n    <string name=\"display_mode_episode\">எபிசோட் %1$s</string>\n    <string name=\"episode_downloading_progress\">பதிவிறக்குதல் (%d %%)</string>\n    <string name=\"download_error\">பிழை</string>\n    <string name=\"download_paused\">இடைநிறுத்தப்பட்டது</string>\n    <string name=\"show_episode_number\">அத்தியாயம் எண்</string>\n    <string name=\"sort_by_episode_number\">அத்தியாயம் எண் மூலம்</string>\n    <string name=\"download_unseen\">காணப்படாதது</string>\n    <string name=\"confirm_delete_episodes\">தேர்ந்தெடுக்கப்பட்ட அத்தியாயங்களை நீக்க விரும்புகிறீர்களா?</string>\n    <string name=\"also_set_episode_settings_for_library\">எனது நூலகத்தில் உள்ள அனைத்து அனிமேசிற்கும் பொருந்தும்</string>\n    <string name=\"no_episodes_error\">அத்தியாயங்கள் எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"watching\">பார்ப்பது</string>\n    <string name=\"currently_reading\">தற்போது படிக்கிறது</string>\n    <string name=\"currently_watching\">தற்போது பார்க்கிறது</string>\n    <string name=\"plan_to_watch\">பார்க்க திட்டமிடுங்கள்</string>\n    <string name=\"not_interesting\">சுவாரச்யமானதல்ல</string>\n    <string name=\"want_to_read\">படிக்க விரும்புகிறேன்</string>\n    <string name=\"want_to_watch\">பார்க்க விரும்புகிறேன்</string>\n    <string name=\"repeating_anime\">மறுபரிசீலனை</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">இது இந்த அத்தியாயத்தின் கண்காணிப்பு தேதியை அகற்றும். நீங்கள் உறுதியாக இருக்கிறீர்களா?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">இந்த அனிமேசிற்கான அனைத்து அத்தியாயங்களையும் மீட்டமைக்கவும்</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">முன்னேற்றம்: %1$s/ %2$s</string>\n    <string name=\"episode_progress_no_total\">முன்னேற்றம்: %1$s</string>\n    <string name=\"recent_anime_time\">ஈ.பி. %1 $ C - %$ 2 s</string>\n    <string name=\"video_list_empty_error\">வீடியோ எதுவும் கிடைக்கவில்லை</string>\n    <string name=\"notification_new_episodes\">புதிய அத்தியாயங்கள் காணப்பட்டன</string>\n    <string name=\"information_no_recent_anime\">அண்மைக் காலத்தில் எதுவும் பார்க்கவில்லை</string>\n    <string name=\"episode_settings_updated\">புதுப்பிக்கப்பட்ட இயல்புநிலை அத்தியாயம் அமைப்புகள்</string>\n    <string name=\"download_notifier_download_paused_chapters\">அத்தியாயம் பதிவிறக்கம் இடைநிறுத்தப்பட்டது</string>\n    <string name=\"download_notifier_download_paused_episodes\">எபிசோட் பதிவிறக்கம் இடைநிறுத்தப்பட்டது</string>\n    <string name=\"channel_new_chapters_episodes\">அத்தியாயம்/அத்தியாயம் புதுப்பிப்புகள்</string>\n    <string name=\"label_storage\">சேமிப்பு</string>\n    <string name=\"label_history\">மங்கா</string>\n    <string name=\"label_anime_history\">அனிம்</string>\n    <string name=\"label_updates\">மங்கா</string>\n    <string name=\"label_anime_updates\">அனிம்</string>\n    <string name=\"action_change_intro_length\">அறிமுக நீளத்தை மாற்றவும்</string>\n    <string name=\"notification_episodes_single\">எபிசோட் %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">எபிசோட் %1$s மற்றும் %2$d மேலும்</string>\n    <string name=\"notification_episodes_multiple\">அத்தியாயங்கள் %1$s</string>\n    <string name=\"episode_settings\">அத்தியாயம் அமைப்புகள்</string>\n    <string name=\"pref_backup_flags\">காப்பு விருப்பங்கள்</string>\n    <string name=\"label_manga_extensions\">மங்கா நீட்டிப்புகள்</string>\n    <string name=\"label_anime_extensions\">அனிம் நீட்டிப்புகள்</string>\n    <string name=\"label_migration_manga\">மங்காவை குடியேறவும்</string>\n    <string name=\"label_migration_anime\">அனிமேசன் இடம்பெயரவும்</string>\n    <string name=\"settings\">அமைப்புகள்</string>\n    <string name=\"copied_video_link_to_clipboard\">கிளிப்போர்டுக்கு வீடியோ தர இணைப்பை நகலெடுத்தது</string>\n    <string name=\"choose_video_quality\">வீடியோ தரத்தைத் தேர்வுசெய்க:</string>\n    <string name=\"extension_settings\">நீட்டிப்பு அமைப்புகள்</string>\n    <string name=\"theme_cottoncandy\">பருத்தி மிட்டாய்</string>\n    <string name=\"theme_mocha\">மோச்சா</string>\n    <string name=\"pref_episode_swipe_end\">சரியான செயலுக்கு ச்வைப் செய்யுங்கள்</string>\n    <string name=\"pref_episode_swipe_start\">இடது செயலுக்கு ச்வைப் செய்யவும்</string>\n    <string name=\"pref_category_hide_hidden\">வகைகள் மற்றும் சேமிப்பக திரையில் இருந்து மறைக்கப்பட்ட வகைகளை மறைக்கவும்</string>\n    <string name=\"pref_update_anime_release_grace_period\">அனிம் வெளியீட்டு சலுகை காலம் என்று எதிர்பார்க்கப்படுகிறது</string>\n    <string name=\"data_saver_exclude\">தரவு சேமிப்பாளரிடமிருந்து விலக்கு</string>\n    <string name=\"data_saver_stop_exclude\">தரவு சேமிப்பாளரிடமிருந்து விலக்குவதை நிறுத்துங்கள்</string>\n    <string name=\"data_saver\">தரவு சேமிப்பாளர்</string>\n    <string name=\"data_saver_summary\">வாசகரில் பதிவிறக்குவதற்கு அல்லது ஏற்றுவதற்கு முன் படங்களை சுருக்கவும்</string>\n    <string name=\"data_saver_downloader\">பதிவிறக்கத்தில் தரவு சேமிப்பாளரைப் பயன்படுத்தவும்</string>\n    <string name=\"data_saver_ignore_jpeg\">JPEG படங்களை புறக்கணிக்கவும்</string>\n    <string name=\"data_saver_ignore_gif\">GIF அனிமேசன்களை புறக்கணிக்கவும்</string>\n    <string name=\"data_saver_image_quality\">பட தகுதி</string>\n    <string name=\"data_saver_image_quality_summary\">அதிக மதிப்புகள் என்பது படத் தரத்தின் அதிக விழுக்காடு சேமிக்கப்படுகிறது என்பதையும் குறிக்கிறது, ஆனால் இதன் பொருள் கோப்பு அளவு பெரியது, 80 விழுக்காடு கோப்பு அளவு மற்றும் படத் தரத்திற்கு இடையில் ஒரு நல்ல சராசரி</string>\n    <string name=\"data_saver_image_format\">JPEG க்கு சுருக்கவும்</string>\n    <string name=\"data_saver_image_format_summary_on\">JPEG கோப்பு அளவு கணிசமாக சிறியது, பின்னர் Webp ஆகும் (அதாவது அதிக தரவு சேமிக்கப்படுகிறது), ஆனால் இது படங்களையும் அதிக தரத்தையும் இழக்கச் செய்கிறது.\\n தற்போது JPEG க்கு சுருக்கப்படுகிறது</string>\n    <string name=\"data_saver_image_format_summary_off\">JPEG கோப்பு அளவு கணிசமாக சிறியது, பின்னர் Webp ஆகும் (அதாவது அதிக தரவு சேமிக்கப்படுகிறது), ஆனால் இது படங்களையும் அதிக தரத்தையும் இழக்கச் செய்கிறது.\\n தற்போது WEBP க்கு சுருக்கப்படுகிறது</string>\n    <string name=\"data_saver_color_bw\">கருப்பு மற்றும் வெள்ளை நிறமாக மாற்றவும்</string>\n    <string name=\"bandwidth_hero\">அலைவரிசை ஈரோ (ஒரு அலைவரிசை ஈரோ பதிலாள் சேவையகம் தேவை)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">அலைவரிசை ஈரோ பதிலாள் சேவையகம்</string>\n    <string name=\"data_saver_server_summary\">அலைவரிசை ஈரோ பதிலாள் சேவையக முகவரி ஐ இங்கே வைக்கவும்</string>\n    <string name=\"download_slots_info\">சுய-ஓச்ட் செய்யப்பட்ட அல்லது அளவிடப்படாத மூலங்களிலிருந்து மட்டுமே ஒரே நேரத்தில் பதிவிறக்கம் செய்யும்</string>\n    <string name=\"unseen\">காணப்படாதது</string>\n    <string name=\"label_manga_extension_repos\">மங்கா நீட்டிப்பு களஞ்சியங்கள்</string>\n    <string name=\"label_anime_extension_repos\">அனிம் நீட்டிப்பு களஞ்சியங்கள்</string>\n    <string name=\"onboarding_storage_action_create_folder\">இயல்புநிலை அனியோமி கோப்புறையை உருவாக்கவும்</string>\n    <string name=\"download_speed_limit\">வேக வரம்பைப் பதிவிறக்கவும்</string>\n    <string name=\"download_speed_limit_hint\">வேக வரம்பை முடக்க 0 ஆக அமைக்கவும்.</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/te/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"manga_categories\">విభాగములు</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/th/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">หมวดหมู่, การอัปเดตคลัง, การปัดรายการตอน</string>\n    <string name=\"pref_library_update_show_tab_badge\">แสดงไอคอนจำนวนตอนที่ยังไม่ได้อ่าน</string>\n    <string name=\"manga_categories\">หมวดหมู่</string>\n    <string name=\"action_display_local_badge_manga\">มังงะในเครื่อง</string>\n    <string name=\"default_manga_category\">หมวดหมู่เริ่มต้น</string>\n    <string name=\"pref_manga_library_update_categories_details\">มังงะในหมวดหมู่ที่ยกเว้นจะไม่ได้รับการอัปเดตแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม</string>\n    <string name=\"pref_remove_exclude_categories_manga\">หมวดหมู่ที่ยกเว้น</string>\n    <string name=\"pref_clear_manga_database\">ล้างฐานข้อมูล</string>\n    <string name=\"pref_clear_manga_database_summary\">ลบประวัติมังงะที่ไม่ได้บันทึกไว้ในคลัง</string>\n    <string name=\"snack_add_to_manga_library\">เพิ่มมังงะไปยังคลัง?</string>\n    <string name=\"download_error\">เกิดข้อผิดพลาด</string>\n    <string name=\"download_paused\">หยุดชั่วคราว</string>\n    <string name=\"download_notifier_download_paused_chapters\">การดาวน์โหลดหยุดชั่วคราว</string>\n    <string name=\"channel_new_chapters_episodes\">อัปเดตตอน</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/tr/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Bir Sonraki İzlenmemiş Bölüm</item>\n        <item quantity=\"other\">Sonraki İzlenmemiş %d Bölüm</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s bölüm</item>\n        <item quantity=\"other\">%1$s bölümler</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Sıradaki bölüm</item>\n        <item quantity=\"other\">Sıradaki %d bölüm</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">1 seri için</item>\n        <item quantity=\"other\">%d seri için</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 yeni bölüm</item>\n        <item quantity=\"other\">%1$d yeni bölüm</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"one\">%d saniye</item>\n        <item quantity=\"other\">%d saniyeler</item>\n    </plurals>\n    <plurals name=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">%1$s bölüm ve 1 tane daha</item>\n        <item quantity=\"other\">%1$s bölüm ve %2$d tane daha</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/tr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Yatay Kaydırmayı Etkinleştir</string>\n    <string name=\"action_filter_started\">Başlandı</string>\n    <string name=\"action_sort_airing_time\">Yayınlama tarihi</string>\n    <string name=\"action_reorganize_by\">Yeniden sırala</string>\n    <string name=\"relative_time_now\">Şimdi</string>\n    <string name=\"pref_library_summary\">Kategoriler, genel güncelleme, bölüm kaydırma</string>\n    <string name=\"pref_library_update_show_tab_badge\">Güncellemeler simgesinde izlenmemiş/okunmamış sayısını göster</string>\n    <string name=\"label_player_settings\">Oynatıcı ayarları</string>\n    <string name=\"action_search_player_settings\">Oynatıcı ayarlarında ara</string>\n    <string name=\"pref_player_internal\">Dahili oynatıcı</string>\n    <string name=\"pref_player_internal_summary\">İlerleme, kontroller, yönlendirme</string>\n    <string name=\"pref_progress_mark_as_seen\">Bölüm hangi noktada izlendi olarak işaretlenmeli</string>\n    <string name=\"pref_preserve_watching_position\">İzlenen bölümlerde izleme konumunu koru</string>\n    <string name=\"pref_category_player_orientation\">Yön</string>\n    <string name=\"rotation_video\">Video</string>\n    <string name=\"rotation_reverse_landscape\">Ters manzara</string>\n    <string name=\"rotation_sensor_portrait\">Sensör portre</string>\n    <string name=\"rotation_sensor_landscape\">Sensör manzara</string>\n    <string name=\"pref_category_controls\">Kontroller</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Panellerde hareketle izin ver</string>\n    <string name=\"pref_controls_show_loading\">Yüklenme çemberini göster</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Şu anki bölümü göster</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Yalnızca videoda bölümler varsa görünür</string>\n    <string name=\"pref_controls_display_volume_percentage\">Ses seviyesini yüzde olarak göster</string>\n    <string name=\"pref_remember_brightness\">Son kullanılan parlaklığı hatırla ve kullan</string>\n    <string name=\"pref_remember_volume\">Son kullanılan ses yüksekliğini hatırla ve kullan</string>\n    <string name=\"pref_hosters\">Sunucular</string>\n    <string name=\"pref_hosters_show_failure\">Başarısız sunucuları göster</string>\n    <string name=\"pref_hosters_show_empty\">Boş sunucuları göster</string>\n    <string name=\"pref_player_fullscreen\">Ekran kesimi bölgesinde içerik göster</string>\n    <string name=\"pref_player_hide_controls\">Oynatıcıyı açarken kontrolleri gizle</string>\n    <string name=\"pref_show_system_bar\">Sistem durum çubuğunu kontrollerle göster</string>\n    <string name=\"pref_reduce_motion\">Oynatıcı animasyonlarını azalt</string>\n    <string name=\"pref_player_time_to_disappear\">Oynatıcı kontrollerini gizleme süresi</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s ms</string>\n    <string name=\"pref_panel_opacity\">Panel opaklığı</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Otomatik atlamayı etkinleştir</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Netflix tarzını etkinleştir</string>\n    <string name=\"pref_waiting_time_aniskip\">Buton zaman aşımı</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 saniye</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 saniye</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 saniye</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 saniye</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 saniye</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 saniye</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip\\'in çalışması için animenin MAL veya AniList izleyicileri ile izleniyor olması gerekir</string>\n    <string name=\"pref_enable_aniskip\">AniSkip\\'i etkinleştir</string>\n    <string name=\"pref_category_pip\">Resim İçinde Resim</string>\n    <string name=\"pref_enable_pip\">Resim İçinde Resim modunu etkinleştir</string>\n    <string name=\"pref_pip_episode_toasts\">Resim İçinde Resim modunda bölüm değiştirirken bölüm bildirimlerini göster</string>\n    <string name=\"pref_pip_on_exit\">Oynatıcıdan çıkarken otomatik olarak Resim İçinde Resim moduna geç</string>\n    <string name=\"pref_pip_replace_with_previous\">10 saniye atlama seçeneğini önceki bölüme geç seçeneği ile değiştirir</string>\n    <string name=\"pref_category_external_player\">Harici oynatıcı</string>\n    <string name=\"pref_always_use_external_player\">Her zaman harici oynatıcıyı kullan</string>\n    <string name=\"pref_external_player_preference\">Harici oynatıcı tercihi</string>\n    <string name=\"pref_player_gestures\">Hareketler</string>\n    <string name=\"pref_player_gestures_summary\">Kaydırma, çift dokunma, medya kontrolleri</string>\n    <string name=\"pref_category_player_sliders\">Kaydırıcılar</string>\n    <string name=\"enable_volume_brightness_gestures\">Ses ve Parlaklık Hareketlerini Etkinleştir</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Ses ve parlaklık kaydırıcılarının yerini değiştir</string>\n    <string name=\"pref_category_player_seeking\">Kaydırma</string>\n    <string name=\"enable_horizontal_seek_gesture\">Yatay Kaydırma Hareketini Etkinleştir</string>\n    <string name=\"pref_show_seekbar\">Kaydırırken zaman çubuğunu göster</string>\n    <string name=\"pref_default_intro_length\">Giriş kısmı için varsayılan atlama süresi</string>\n    <string name=\"pref_intro_length\">Giriş atlama süresi</string>\n    <string name=\"pref_skip_length\">Çift dokunmayla atlama süresi</string>\n    <string name=\"pref_skip_disable\">Devre Dışı</string>\n    <string name=\"pref_player_smooth_seek\">Hassas kaydırmayı etkinleştir</string>\n    <string name=\"pref_player_smooth_seek_summary\">Etkinleştirildiğinde kaydırma ana karelere odaklanmaz ve daha yavaş ancak hassas kaydırma sağlar</string>\n    <string name=\"pref_category_double_tap\">Çift dokunma</string>\n    <string name=\"pref_left_double_tap\">Çift dokunma (sol)</string>\n    <string name=\"pref_center_double_tap\">Çift dokunma (merkez)</string>\n    <string name=\"pref_right_double_tap\">Çift dokunma (sağ)</string>\n    <string name=\"pref_double_tap_info\">Bir dokunma hareketi Özel olarak ayarlandığında input.conf içerisinden atanabilir. Tuş kodları sol için 0x10001, merkez için 0x10002, sağ için 0x10003 değerleridir.</string>\n    <string name=\"single_action_none\">Hiçbiri</string>\n    <string name=\"single_action_seek\">Kaydır</string>\n    <string name=\"single_action_playpause\">Oynat/Duraklat</string>\n    <string name=\"single_action_switch\">Bölümü değiştir</string>\n    <string name=\"single_action_custom\">Özel</string>\n    <string name=\"pref_category_media_controls\">Medya kontrolleri</string>\n    <string name=\"pref_media_previous\">Önceki</string>\n    <string name=\"pref_media_playpause\">Oynat/Duraklat</string>\n    <string name=\"pref_media_next\">Sonraki</string>\n    <string name=\"pref_media_info\">Bir medya kontrolü Özel olarak ayarlandığında input.conf içerisinden atanabilir. Tuş kodları önceki için 0x10004, oynat/duraklat için 0x10005, sonraki için 0x10006 değerleridir.</string>\n    <string name=\"pref_player_decoder\">Kod çözücü</string>\n    <string name=\"pref_player_decoder_summary\">Donanım kod çözme, piksel biçim, bantlaşma azaltma</string>\n    <string name=\"pref_try_hw\">Donanım kod çözmeyi dene</string>\n    <string name=\"pref_gpu_next_title\">gpu-next\\'i etkinleştir</string>\n    <string name=\"pref_gpu_next_subtitle\">Yeni bir video işleme arka ucu</string>\n    <string name=\"pref_debanding_title\">Debanding</string>\n    <string name=\"pref_debanding_none\">Hiçbiri</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">YUV420P piksel biçimi kullan</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Bazı video kodeklerinde siyah ekran sorunlarını düzeltebilir ve ayrıca kaliteden kısarak performansı geliştirebilir</string>\n    <string name=\"pref_player_subtitle\">Alt yazılar</string>\n    <string name=\"pref_player_subtitle_summary\">Tercih edilen diller, beyaz liste, kara liste</string>\n    <string name=\"pref_player_subtitle_lang\">Tercih edilen diller</string>\n    <string name=\"pref_player_subtitle_lang_info\">Birden fazla alt yazı içeren videolarda varsayılan olarak seçilecek alt yazı dilleri, iki -ya da üç- harfli dil kodları kullanılabilir. Birden fazla değer virgülle ayrılabilir.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Beyaz liste</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Alt yazılar için beyaz liste. Eğer bir beyaz liste ayarlanmışsa beyaz listedeki kelimelerden birini içeren ilk alt yazı kullanılacaktır. Birden fazla değer virgülle ayrılabilir.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Kara liste</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Alt yazılar için kara liste. Eğer bir kara liste ayarlanmışsa kara listeden bir kelime içeren tüm alt yazılar filtrelenecektir. Birden fazla değer virgülle ayrılabilir.</string>\n    <string name=\"pref_player_audio\">Ses</string>\n    <string name=\"pref_player_audio_summary\">Tercih edilen diller, yükseklik düzeltme, ses kanalları</string>\n    <string name=\"pref_player_audio_lang\">Tercih edilen diller</string>\n    <string name=\"pref_player_audio_lang_info\">Birden fazla ses parçası içeren videolarda varsayılan olarak seçilecek ses dilleri. İki -ya da üç- harfli dil kodları kullanılabilir. Birden fazla değer virgülle ayrılabilir.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Ses yüksekliği düzeltmeyi kullan</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Sesin yüksek hızlarda tizleşmesini ve düşük hızlarda kalınlaşmasını önler</string>\n    <string name=\"pref_player_audio_channels\">Ses kanalları</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Oto-güvenli</string>\n    <string name=\"pref_player_audio_channels_auto\">Otomatik</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Ters stereo</string>\n    <string name=\"pref_player_audio_boost_cap\">Ses güçlendirme sınırı</string>\n    <string name=\"pref_player_custom_button\">Özel butonlar</string>\n    <string name=\"pref_player_custom_button_summary\">Özel butonlarla lua kodları çalıştırın</string>\n    <string name=\"pref_player_custom_button_header\">Özel butonları düzenle</string>\n    <string name=\"pref_player_custom_button_guide\">Özel butonlar rehberi</string>\n    <string name=\"pref_player_custom_button_empty\">Özel buton ayarlamadınız. Bir özel buton oluşturmak için artı butonuna dokunun.</string>\n    <string name=\"pref_player_custom_button_add\">Buton ekle</string>\n    <string name=\"pref_player_custom_button_edit\">Butonu düzenle</string>\n    <string name=\"pref_player_custom_button_title\">Başlık</string>\n    <string name=\"pref_player_custom_button_error_exists\">Buton zaten var!</string>\n    <string name=\"pref_player_custom_button_content\">Lua kodu</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua kodu (uzun dokunma)</string>\n    <string name=\"pref_player_custom_button_optional\">(isteğe bağlı)</string>\n    <string name=\"pref_player_custom_button_delete\">Butonu sil</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">%s butonunu silmek istediğinize emin misiniz?</string>\n    <string name=\"pref_player_custom_button_startup\">Başlangıçta</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Gelişmiş</string>\n    <string name=\"pref_player_advanced_summary\">Kullanıcı dosyaları, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Daha fazla oynatıcı ayarı için MPV yapılandırma dosyasını düzenleyin</string>\n    <string name=\"pref_reset_mpv_conf\">MPV yapılandırma dosyasını sıfırla</string>\n    <string name=\"pref_mpv_input\">Tuş atamaları için MPV giriş dosyasını düzenle</string>\n    <string name=\"video_fit_screen\">Ekrana sığdır</string>\n    <string name=\"video_crop_screen\">Ekrana göre kırp</string>\n    <string name=\"video_stretch_screen\">Ekrana göre uzat</string>\n    <string name=\"toast_sleep_timer_ended\">Uyku zamanlayıcısı doldu</string>\n    <string name=\"player_generic_unit_ms\">ms</string>\n    <string name=\"numeric_chooser_value_too_big\">Değer çok büyük</string>\n    <string name=\"numeric_chooser_value_too_small\">Değer çok küçük</string>\n    <string name=\"enable_auto_play\">Otomatik oynatma açık</string>\n    <string name=\"disable_auto_play\">Otomatik oynatma kapalı</string>\n    <string name=\"player_aniskip_dontskip\">Atlama</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s, %d saniye içinde atlanacak</string>\n    <string name=\"player_aniskip_skip\">%s atlandı</string>\n    <string name=\"no_next_episode\">Sonraki bölüm bulunamadı!</string>\n    <string name=\"no_prev_episode\">Önceki Bölüm bulunamadı!</string>\n    <string name=\"no_available_videos\">Mevcut video yok</string>\n    <string name=\"no_hosters\">Sunucu listesi boş</string>\n    <string name=\"no_episode_loaded\">Herhangi bir bölüm yüklenmedi</string>\n    <string name=\"select_hoster_from_empty_list\">Sunucular boş listeden seçildi</string>\n    <string name=\"player_sheets_delay_set_as_default\">Varsayılan olarak ayarla</string>\n    <string name=\"player_sheets_audio_delay_title\">Ses gecikmesi</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Duyulan ses</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Algılanan ses</string>\n    <string name=\"player_sheets_sub_delay_title\">Alt yazı gecikmesi</string>\n    <string name=\"player_sheets_sub_delay_speed\">Hız</string>\n    <string name=\"player_sheets_sub_delay_delay\">Gecikme</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Birincil</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">İkincil</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">İkisi de</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Duyulan ses</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Görülen metin</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Duyulan ses</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Algılanan ses</string>\n    <string name=\"player_sheets_sub_colors_title\">Renkler</string>\n    <string name=\"player_sheets_subtitles_color_text\">Metin</string>\n    <string name=\"player_sheets_subtitles_color_border\">Sınır</string>\n    <string name=\"player_sheets_subtitles_color_background\">Arkaplan</string>\n    <string name=\"player_sheets_sub_color_red\">Kırmızı</string>\n    <string name=\"player_sheets_sub_color_green\">Yeşil</string>\n    <string name=\"player_sheets_sub_color_blue\">Mavi</string>\n    <string name=\"player_sheets_sub_color_alpha\">Alfa</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Alt yazı ayarları</string>\n    <string name=\"player_sheets_sub_typography_title\">Topografi</string>\n    <string name=\"player_sheets_sub_typography_font\">Yazı tipi</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Yazı tipi boyutu</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Sınır şekli</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Kenar boyutu</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Gölge uzaklığı</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Dış hat ve gölge</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Opak kutu</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Arkaplan kutusu</string>\n    <string name=\"player_sheets_sub_misc_title\">Diğer</string>\n    <string name=\"player_sheets_sub_override_ass\">ASS/SSA alt yazılarını geçersiz kıl</string>\n    <string name=\"player_sheets_sub_scale\">Boyut</string>\n    <string name=\"player_sheets_sub_position\">Konum</string>\n    <string name=\"player_sheets_filters_title\">Filtreler</string>\n    <string name=\"player_sheets_filters_brightness\">Parlaklık</string>\n    <string name=\"player_sheets_filters_contrast\">Kontrast</string>\n    <string name=\"player_sheets_filters_gamma\">Gama</string>\n    <string name=\"player_sheets_filters_Saturation\">Doygunluk</string>\n    <string name=\"player_sheets_filters_hue\">Ton</string>\n    <string name=\"player_sheets_filters_warning\">Bazı filtreler şu anki video sürücünüzde çalışmayabilir</string>\n    <string name=\"player_sheets_add_ext_audio\">Harici ses kaynakları ekle</string>\n    <string name=\"player_hoster_tap_to_load\">Videoları yüklemek için dokunun</string>\n    <string name=\"player_hoster_failed\">Videolar yüklenemedi</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">Daha fazla</string>\n    <string name=\"player_hwdec_mode\">Donanım kod çözme modu</string>\n    <string name=\"pref_audio_channels\">Ses kanalları</string>\n    <string name=\"player_sheets_stats_page_title\">Varsayılan istatistik sayfası</string>\n    <string name=\"player_sheets_tracks_off\">Kapalı</string>\n    <string name=\"player_sheets_stats_page_chip\">Sayfa %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Özel butonlar</string>\n    <string name=\"player_seek_n_seconds\">%d saniye</string>\n    <string name=\"timer_title\">Uyku Zamanlayıcısı</string>\n    <string name=\"timer_remaining\">%s kaldı</string>\n    <string name=\"timer_picker_enter_timer\">Süreyi girin</string>\n    <string name=\"timer_picker_pick_time\">Süreyi seçin</string>\n    <string name=\"timer_cancel_timer\">Şu anki zamanlayıcıyı kapat</string>\n    <string name=\"player_sheets_speed_slider_label\">Hız</string>\n    <string name=\"player_sheets_speed_make_default\">Varsayılan hız yap</string>\n    <string name=\"pref_audio_pitch_correction_title\">Ses yüksekliği düzeltmeyi etkinleştir</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Sesin yüksek hızlarda yüksek sesli olmasını ve düşük hızlarda düşük sesli olmasını önler</string>\n    <string name=\"player_sheets_add_ext_sub\">Harici alt yazılar ekle</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">İkincil alt yazılarda ASS/SSA stilleri uygulanmayacaktır.</string>\n    <string name=\"screenshot_show_subs\">Alt Yazıları Dahil Et</string>\n    <string name=\"pref_general_summary\">Uygulama dili, bildirimler</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Matrix</string>\n    <string name=\"pref_library_rows\">Liste boyutu</string>\n    <string name=\"pref_preserve_reading_position\">Okunmuş bölümlerde okuma pozisyonunu sakla</string>\n    <string name=\"pref_download_slots\">Maksimum indirme sayısı</string>\n    <string name=\"custom_button_settings\">Özel butonlar</string>\n    <string name=\"local_source_badge\">Yerel</string>\n    <string name=\"anime_interval_expected_update\">Yeni bölümlerin %1$s içinde yayınlanacağı tahmin ediliyor. %2$s aralıklarla ediliyor.</string>\n    <string name=\"anime_interval_expected_update_null\">Bu anime ya tamamlanmış ya da tahmin edilen bir yayınlanma tarihi yok.</string>\n    <string name=\"confirm_tracker_update_anime\">İzleyicileri %d. bölüme güncelle?</string>\n    <string name=\"trackers_updated_summary_manga\">İzleyiciler %d. bölüme güncellendi</string>\n    <string name=\"trackers_updated_summary_anime\">İzleyiciler %d. bölüme güncellendi</string>\n    <string name=\"download_notifier_download_finish\">İndirme tamamlandı</string>\n    <string name=\"action_hide\">Gizle</string>\n    <string name=\"label_all\">Hepsi</string>\n    <string name=\"label_category\">Kategori</string>\n    <string name=\"manga_categories\">Manga kategorileri</string>\n    <string name=\"general_categories\">Kategoriler</string>\n    <string name=\"anime_categories\">Anime Kategorileri</string>\n    <string name=\"entries\">Kitaplık girdileri</string>\n    <string name=\"chapters_episodes\">Manga ve Anime bölümleri</string>\n    <string name=\"episodes\">Bölümler</string>\n    <string name=\"backup_settings_warning\">Uyarı: Ayarları yedeklemek izleyici şifrelerinizi de saklayacaktır. Bu yedekleme dosyasını asla paylaşmayın!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Anime güncellemeleri</string>\n    <string name=\"label_manga_sources\">Manga Kaynakları</string>\n    <string name=\"label_anime_sources\">Anime Kaynakları</string>\n    <string name=\"label_watched_duration\">İzleme süresi</string>\n    <string name=\"label_watched_episodes\">İzlenen</string>\n    <string name=\"pref_start_screen\">Başlangıç Ekranı</string>\n    <string name=\"pref_library_manga_columns\">Satır başına manga sayısı</string>\n    <string name=\"pref_library_anime_columns\">Satır başına anime sayısı</string>\n    <string name=\"pref_bottom_nav_no_history\">Geçmiş sekmesini Daha Fazla bölümüne taşı</string>\n    <string name=\"pref_bottom_nav_no_updates\">Güncellemeler sekmesini Daha Fazla bölümüne taşı</string>\n    <string name=\"pref_bottom_nav_no_manga\">Manga sekmesini Daha Fazla bölümüne taşı</string>\n    <string name=\"pref_bottom_nav_no_browse\">Göz At sekmesini Daha Fazla bölümüne taşı</string>\n    <string name=\"action_filter_unseen\">İzlenmemiş</string>\n    <string name=\"action_global_manga_search\">Genel Manga Arama</string>\n    <string name=\"action_global_anime_search\">Genel Anime Arama</string>\n    <string name=\"action_sort_total_episodes\">Toplam bölüm sayısı</string>\n    <string name=\"action_sort_last_seen\">Son görülen</string>\n    <string name=\"action_sort_last_checked\">Son kontrol edilen</string>\n    <string name=\"action_sort_latest_episode\">En son bölüm</string>\n    <string name=\"action_sort_last_anime_update\">En son anime güncellemesi</string>\n    <string name=\"action_sort_unseen_count\">İzlenmemiş sayısı</string>\n    <string name=\"action_sort_episode_fetch_date\">Bölüm kontrol etme tarihi</string>\n    <string name=\"action_mark_as_seen\">İzlenmiş olarak işaretle</string>\n    <string name=\"action_mark_as_unseen\">İzlenmemiş olarak işaretle</string>\n    <string name=\"action_mark_previous_as_seen\">Öncekini izlenmiş olarak işaretle</string>\n    <string name=\"action_play_internally\">Dahili olarak oynat</string>\n    <string name=\"action_play_externally\">Harici olarak oynat</string>\n    <string name=\"action_download_unread\">Okunmamış bölümleri indir</string>\n    <string name=\"action_download_unseen\">İzlenmemiş bölümleri indir</string>\n    <string name=\"action_bookmark_episode\">Bölüme yer imi ekle</string>\n    <string name=\"action_remove_bookmark_episode\">Bölümün yer imini kaldır</string>\n    <string name=\"action_edit_anime_categories\">Anime kategorilerini düzenle</string>\n    <string name=\"action_edit_manga_categories\">Manga kategorilerini düzenle</string>\n    <string name=\"action_view_episodes\">Bölümleri görüntüle</string>\n    <string name=\"action_previous_episode\">Önceki bölüm</string>\n    <string name=\"action_play\">Oynat</string>\n    <string name=\"action_next_episode\">Sonraki bölüm</string>\n    <string name=\"action_screen_fit\">Ekrana sığdırma modu</string>\n    <string name=\"action_show_anime\">Animeyi göster</string>\n    <string name=\"action_display_download_badge_anime\">İndirilmiş bölümler</string>\n    <string name=\"action_display_local_badge_manga\">Yerel manga</string>\n    <string name=\"action_display_local_badge_anime\">Yerel anime</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Genel aramada yalnızca sabitlenmiş manga kaynaklarını ara</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Genel aramada yalnızca sabitlenmiş anime kaynaklarını ara</string>\n    <string name=\"pref_hide_in_manga_library_items\">Zaten kitaplıkta bulunan manga girdilerini gizle</string>\n    <string name=\"pref_hide_in_anime_library_items\">Zaten kitaplıkta bulunan anime girdilerini gizle</string>\n    <string name=\"action_order_by_episode_number\">Bölüm numarasına göre</string>\n    <string name=\"action_start_download_externally\">Harici indirme yöneticisi kullan</string>\n    <string name=\"action_start_download_internally\">Dahili indirme yöneticisi kullan</string>\n    <string name=\"pref_bottom_nav_style\">Alt gezinme çubuğu stili</string>\n    <string name=\"pref_default_home_tab_library\">Başlangıç ekranını Manga Sekmesi olarak ayarla</string>\n    <string name=\"default_manga_category\">Varsayılan manga kategorisi</string>\n    <string name=\"default_anime_category\">Varsayılan anime kategorisi</string>\n    <string name=\"pref_manga_library_update_categories_details\">Hariç tutulan kategorilerdeki girdiler, dahil edilen kategorilerde olsa bile güncellenmeyecektir.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Hariç tutulan kategorilerdeki animeler, dahil edilen kategorilerde de olsalar dahi güncellenmeyecektir.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Bu uzantı, resmi Aniyomi uzantıları listesinden değildir.</string>\n    <string name=\"unofficial_anime_extension_message\">Bu uzantı, resmi Aniyomi uzantıları listesinden değil.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Hariç tutulan manga kategorileri</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Hariç tutulan anime kategorileri</string>\n    <string name=\"pref_category_external_downloader\">Harici indirme yöneticisi</string>\n    <string name=\"pref_use_external_downloader\">Anime için her zaman harici indirme yöneticisi kullan</string>\n    <string name=\"pref_external_downloader_selection\">Harici indirme yöneticisi tercihi</string>\n    <string name=\"pref_download_new_episodes\">Yeni bölümleri indir</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Birden fazla olan izlenmiş bölümlerin indirilmesini atla</string>\n    <string name=\"auto_download_while_watching\">İzlerken otomatik olarak indir</string>\n    <string name=\"download_ahead_info_anime\">Yalnızca kitaplıktaki girdilerde ve mevcut bölüm ile bir sonraki bölüm zaten indirilmişse çalışır</string>\n    <string name=\"pref_track_on_add_library\">Kitaplığa eklerken izleyici menüsünü aç</string>\n    <string name=\"pref_show_next_episode_airing_time\">Sıradaki bölümün yayınlanma tarihini göster</string>\n    <string name=\"pref_backup_flags_summary\">Yedekleme dosyasına hangi bilgiler dahil edilecek</string>\n    <string name=\"pref_anime_storage_usage\">Anime Depolama kullanımı</string>\n    <string name=\"pref_manga_storage_usage\">Manga Depolama kullanımı</string>\n    <string name=\"used_cache_both\">Anime tarafından kullanılan: %1$s, manga tarafından kullanılan: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Manga veritabanını temizle</string>\n    <string name=\"pref_clear_anime_database\">Anime veritabanını temizle</string>\n    <string name=\"pref_clear_manga_database_summary\">Kitaplığınıza kaydedilmemiş manga girdilerinin geçmiş bilgilerini sil</string>\n    <string name=\"pref_clear_anime_database_summary\">Kitaplığınıza kaydedilmemiş anime girdilerinin geçmiş bilgilerini sil</string>\n    <string name=\"anime_from_library\">Kitaplıktaki animeler</string>\n    <string name=\"downloaded_episodes\">İndirilen bölümler</string>\n    <string name=\"local_manga_source\">Yerel manga kaynağı</string>\n    <string name=\"local_anime_source\">Yerel anime kaynağı</string>\n    <string name=\"episode_not_found\">Bölüm bulunamadı</string>\n    <string name=\"local_invalid_episode_format\">Geçersiz bölüm biçimi</string>\n    <string name=\"unknown_studio\">Bilinmeyen stüdyo</string>\n    <string name=\"delete_confirmation\">\\\"%s\\\" ögesini silmek istediğinize emin misiniz?</string>\n    <string name=\"delete_downloads_for_anime\">İndirilen bölümler silinsin mi?</string>\n    <string name=\"snack_add_to_manga_library\">Mangayı kitaplığa ekle?</string>\n    <string name=\"snack_add_to_anime_library\">Animeyi kitaplığa ekle?</string>\n    <string name=\"display_mode_episode\">Bölüm %1$s</string>\n    <string name=\"episode_downloading_progress\">İndiriliyor (%d%%)</string>\n    <string name=\"download_error\">Hata</string>\n    <string name=\"download_paused\">Duraklatıldı</string>\n    <string name=\"show_episode_number\">Bölüm sayısı</string>\n    <string name=\"sort_by_episode_number\">Bölüm sayısına göre</string>\n    <string name=\"download_unseen\">İzlenmeyen</string>\n    <string name=\"confirm_delete_episodes\">Seçilen bölümleri silmek istediğinize emin misiniz?</string>\n    <string name=\"also_set_episode_settings_for_library\">Kitaplığımdaki tüm animelere uygula</string>\n    <string name=\"no_episodes_error\">Hiç bölüm bulunamadı</string>\n    <string name=\"watching\">İzleniyor</string>\n    <string name=\"currently_reading\">Şu anda okunuyor</string>\n    <string name=\"currently_watching\">Şu anda izleniyor</string>\n    <string name=\"plan_to_watch\">Planlanıyor</string>\n    <string name=\"not_interesting\">İlginç değil</string>\n    <string name=\"want_to_read\">Okumak isteniyor</string>\n    <string name=\"want_to_watch\">İzlemek isteniyor</string>\n    <string name=\"repeating_anime\">Tekrar izleniyor</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Bu, bölümün izlenme tarihini kaldırır. Emin misiniz?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Bu anime için tüm bölümleri sıfırla</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Bölüm %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Video bulunamadı</string>\n    <string name=\"notification_new_episodes\">Yeni bölümler bulundu</string>\n    <string name=\"information_no_recent_anime\">Yakın zamanda hiçbir şey izlenmedi</string>\n    <string name=\"episode_settings_updated\">Varsayılan bölüm ayarları güncellendi</string>\n    <string name=\"download_notifier_download_paused_chapters\">İndirme duraklatıldı</string>\n    <string name=\"download_notifier_download_paused_episodes\">İndirme duraklatıldı</string>\n    <string name=\"channel_new_chapters_episodes\">Bölüm güncellemeleri</string>\n    <string name=\"label_storage\">Depolama</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Giriş süresini değiştir</string>\n    <string name=\"notification_episodes_single\">Bölüm %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Bölüm %1$s ve %2$d daha fazlası</string>\n    <string name=\"notification_episodes_multiple\">%1$s bölüm</string>\n    <string name=\"episode_settings\">Bölüm ayarları</string>\n    <string name=\"pref_backup_flags\">Yedekleme seçenekleri</string>\n    <string name=\"label_manga_extensions\">Manga Uzantıları</string>\n    <string name=\"label_anime_extensions\">Anime Uzantıları</string>\n    <string name=\"label_migration_manga\">Manga\\'yı Taşı</string>\n    <string name=\"label_migration_anime\">Anime\\'yi Taşı</string>\n    <string name=\"settings\">Ayarlar</string>\n    <string name=\"copied_video_link_to_clipboard\">Video kalitesi bağlantısı panoya kopyalandı</string>\n    <string name=\"choose_video_quality\">Video kalitesini seçin:</string>\n    <string name=\"extension_settings\">Uzantı ayarları</string>\n    <string name=\"theme_cottoncandy\">Pamuk şekeri</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Sağa kaydırma işlevi</string>\n    <string name=\"pref_episode_swipe_start\">Anime bölümünü sola kaydırma</string>\n    <string name=\"pref_category_hide_hidden\">Gizli kategorileri kategoriler menüsünde ve depolama ekranında gizle</string>\n    <string name=\"pref_update_anime_release_grace_period\">Animenin tahmini çıkış tarihi</string>\n    <string name=\"data_saver_exclude\">Veri tasarrufundan hariç tut</string>\n    <string name=\"data_saver_stop_exclude\">Veri tasarrufuna dahil et</string>\n    <string name=\"data_saver\">Veri Tasarrufu</string>\n    <string name=\"data_saver_summary\">Okuyucuda göstermeden veya indirmeden önce resimleri sıkıştır</string>\n    <string name=\"data_saver_downloader\">İndiricide veri tasarrufunu kullan</string>\n    <string name=\"data_saver_ignore_jpeg\">Jpeg resimleri görmezden gel</string>\n    <string name=\"data_saver_ignore_gif\">Gif animasyonlarını görmezden gel</string>\n    <string name=\"data_saver_image_quality\">Resim kalitesi</string>\n    <string name=\"data_saver_image_quality_summary\">Daha yüksek değerler resim kalitesinin daha yüksek olduğu anlamına gelir ancak dosya boyutu daha büyük olur, %80 değeri dosya büyüklüğü ve resim kalitesi açısından iyi bir denge sağlar</string>\n    <string name=\"data_saver_image_format\">Jpeg\\'e sıkıştır</string>\n    <string name=\"data_saver_image_format_summary_on\">Jpeg dosya büyüklüğü Webp formatına göre ciddi anlamda daha küçüktür (daha fazla veri tasarrufu sağlar), ancak resimlerin daha fazla kalite kaybetmesine neden olur.\n\\nŞu anda Jpeg\\'e sıkıştırılıyor</string>\n    <string name=\"data_saver_image_format_summary_off\">Jpeg dosya büyüklüğü Webp\\'e göre ciddi anlamda daha küçüktur ancak resimler daha fazla kalite kaybeder(yani daha fazla veri tasarrufu sağlar)\n\\nŞu anda Webp\\'e sıkıştırıyor</string>\n    <string name=\"data_saver_color_bw\">Siyah ve Beyaza Çevir</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (Bandwidth Hero ara sunucusu gerektirir)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero Ara Sunucusu</string>\n    <string name=\"data_saver_server_summary\">Buraya Bandwidth Hero ara sunucusu bağlantısını koyun</string>\n    <string name=\"download_slots_info\">Aynı anda indirmeler yalnızca tarifesiz veya kendinde barındırılan kaynaklardan yapılacaktır</string>\n    <string name=\"unseen\">İzlenmemiş</string>\n    <string name=\"label_manga_extension_repos\">Manga uzantı depoları</string>\n    <string name=\"label_anime_extension_repos\">Anime uzantı depoları</string>\n    <string name=\"onboarding_storage_action_create_folder\">Varsayılan Aniyomi klasörünü oluştur</string>\n    <string name=\"download_speed_limit\">Bölüm indirme hızı sınırı</string>\n    <string name=\"download_speed_limit_hint\">Hız sınırını devre dışı bırakmak için 0 olarak ayarlayın.</string>\n    <string name=\"action_display_unseen_badge\">Görülmemiş bölümler</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Manga bölüm davranışı</string>\n    <string name=\"action_add_repo_message\">%s\\'ye ek depolar ekleyin. Bu, \\\"index.min.json\\\" ile biten bir URL olmalıdır.</string>\n    <string name=\"download_ahead_info\">Yalnızca manganın/animenin şu anki bölümü ve sonraki bölümü indirilmişse çalışır.</string>\n    <string name=\"non_library_settings\">Tüm okunmuş/izlenmiş girdiler</string>\n    <string name=\"action_sort_last_manga_update\">Son manga güncellemesi</string>\n    <string name=\"action_show_manga\">Mangaları göster</string>\n    <string name=\"action_display_show_continue_reading_button\">İzlemeye/okumaya devam et butonu</string>\n    <string name=\"pref_update_only_completely_read\">İzlenmemiş/okunmamış bölümleri olan girdileri atla</string>\n    <string name=\"pref_category_delete_chapters\">Manga/anime bölümlerini sil</string>\n    <string name=\"pref_remove_after_marked_as_read\">Manuel olarak okundu/izlendi olarak işaretlenince</string>\n    <string name=\"pref_remove_after_read\">Okuduktan/izledikten sonra otomatik olarak sil</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Yer imi olan manga/anime bölümlerinin silinmesine izin ver</string>\n    <string name=\"pref_auto_update_manga_sync\">Okuduktan/izledikten sonra ilerlemeyi güncelle</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Okundu/izlendi olarak işaretlenince ilerlemeyi güncelle</string>\n    <string name=\"pref_clear_chapter_cache\">Manga ve anime bölümleri önbelleğini temizle</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Uygulama başlatıldığına manga ve anime bölümleri önbelleğini temizle</string>\n    <string name=\"clear_database_confirmation\">Emin misiniz? Tamamlanmış manga ve anime bölümleri ile kitaplıkta olmayan girdilerin ilerlemeleri kaybolacaktır</string>\n    <string name=\"pref_incognito_mode_summary\">Geçmişi duraklatır</string>\n    <string name=\"manga_from_library\">Kitaplıktaki mangalar</string>\n    <string name=\"also_set_chapter_settings_for_library\">Kitaplığımda bulununan tüm mangalara uygula</string>\n    <string name=\"dialog_with_checkbox_reset\">Bu manga için tüm bölümleri sıfırla</string>\n    <string name=\"download_insufficient_space\">Düşük depolama alanı nedeniyle indirilemedi</string>\n    <string name=\"download_queue_size_warning\">Uyarı: büyük toplu indirmeler, kaynakların daha yavaş çalışmasına ve/veya Aniyomi uygulamasını engellemesine neden olabilir. Daha fazla bilgi için dokunun.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Uygulamayı indirilmiş manga ve anime bölümlerini tekrar kontrol etmeye zorla</string>\n    <string name=\"pref_category_intro_skip\">Giriş atlama</string>\n    <string name=\"pref_enable_intro_skip\">Giriş atlamayı etkinleştir</string>\n    <string name=\"pref_disable_aniskip_chapter\">Videoda zaten bölümler varsa AniSkip\\'i devre dışı bırak</string>\n    <string name=\"pref_player_editor\">Kod düzenleyici</string>\n    <string name=\"pref_player_editor_summary\">Yeni kod ve kod seçenekleri oluşturun ve düzenleyin</string>\n    <string name=\"pref_player_editor_script\">Kodlar</string>\n    <string name=\"pref_player_editor_script_opts\">Kod seçenekleri</string>\n    <string name=\"pref_player_no_items\">Dosya konumu herhangi bir şey içermiyor. Yeni bir dosya eklemek için artı butonuna dokunun.</string>\n    <string name=\"editor_unsaved_progress\">Kaydedilmemiş değişiklikleriniz var. Yine de geri gitmek istiyor musunuz?</string>\n    <string name=\"editor_save_error\">Dosya kaydedilemedi</string>\n    <string name=\"editor_save_success\">Dosya kaydedildi</string>\n    <string name=\"editor_action_rename\">Dosyayı yeniden adlandır</string>\n    <string name=\"editor_action_delete\">Dosyayı sil</string>\n    <string name=\"editor_file_already_exists\">Dosya zaten var</string>\n    <string name=\"editor_invalid_filename\">Geçersiz dosya adı</string>\n    <string name=\"editor_create_file\">Dosya oluştur</string>\n    <string name=\"editor_edit_file\">Dosya adını düzenle</string>\n    <string name=\"editor_filename\">Dosya adı</string>\n    <string name=\"editor_create_error\">Dosya oluşturulamadı</string>\n    <string name=\"editor_rename_error\">Dosya yeniden adlandırılamadı</string>\n    <string name=\"editor_delete_error\">Dosya silinemedi</string>\n    <string name=\"editor_delete_file\">Dosyayı sil</string>\n    <string name=\"editor_delete_file_confirmation\">\\\"%s\\\" dosyasını silmek istediğinize emin misiniz?</string>\n    <string name=\"player_skip_action\">Atla: %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s atlandı</string>\n    <string name=\"player_chapter_type_opening\">Açılış</string>\n    <string name=\"player_chapter_type_ending\">Kapanış</string>\n    <string name=\"player_chapter_type_recap\">Özet</string>\n    <string name=\"player_chapter_type_mixedop\">Karışık açılış</string>\n    <string name=\"mpv_media_title\">%1$s - BÖL%2$s - %3$s</string>\n    <string name=\"player_sheets_track_delay\">Gecikme</string>\n    <string name=\"player_sheets_track_palette\">Palet</string>\n    <string name=\"player_sheets_qualities_title\">Kalite</string>\n    <string name=\"player_sheets_chapters_title\">Bölümler</string>\n    <string name=\"type\">Tür</string>\n    <string name=\"pref_behavior_episode\">Anime bölüm davranışı</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Yinelenen izlenmiş bölümü izlendi olarak işaretle</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Bir bölüm izledikten sonra</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Yeni bir bölüm geldiğinde</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Geçersiz kod: \\\"%s\\\"</string>\n    <string name=\"pref_mpv_user_files\">Kullanıcı MPV dosyalarını kullan</string>\n    <string name=\"pref_mpv_user_files_summary\">mpv-config dosya konumundaki dosyaları kullan</string>\n    <string name=\"label_player\">Oynatıcı</string>\n    <string name=\"pref_player_settings_summary\">Dahili oynatıcı, hareketler, çözümleyiciler, alt yazılar</string>\n    <string name=\"action_stop\">Dur</string>\n    <string name=\"action_continue\">Devam Et</string>\n    <string name=\"label_cant_migrate_episode\">Bölüm, sezona taşınamadı; devam etmek için sezon seçin</string>\n    <string name=\"label_cant_migrate_season\">Sezon, bölüme taşınamadı</string>\n    <string name=\"label_show_seasons\">Sezonları göster</string>\n    <string name=\"action_display_show_continue_watching_button\">İzlemeye devam et butonu</string>\n    <string name=\"action_display_grid_mode\">Izgara görünüm modu</string>\n    <string name=\"display_mode_season\">Sezon %1$s</string>\n    <string name=\"show_season_number\">Sezon numarası</string>\n    <string name=\"sort_by_season_number\">Sezon numarasına göre</string>\n    <string name=\"no_seasons_error\">Sezon bulunamadı</string>\n    <string name=\"season_settings_updated\">Varsayılan sezon ayarı güncellendi</string>\n    <string name=\"season_settings\">Sezon ayarları</string>\n    <string name=\"pref_library_season\">Sezon</string>\n    <string name=\"pref_update_seasons_refresh\">Yenileme sırasında sezonları bölümlerle güncelle</string>\n    <string name=\"pref_update_seasons_update\">Kitaplık güncellemesi sırasında sezonları bölümlerle güncelle</string>\n    <string name=\"filler\">Hikâye Dışı</string>\n    <string name=\"action_filter_fillermarked\">Hikâye dışı işaretlendi</string>\n    <string name=\"action_edit_background\">Arka planı düzenle</string>\n    <string name=\"custom_background\">Özel arka planlar</string>\n    <string name=\"background_saved\">Arka plan kaydedildi</string>\n    <string name=\"error_saving_background\">Arka plan kaydedilemedi</string>\n    <string name=\"error_sharing_background\">Arka plan paylaşılamadı</string>\n    <string name=\"set_as_background\">Arka plan olarak ayarla</string>\n    <string name=\"set_as_thumbnail\">Küçük resim olarak ayarla</string>\n    <string name=\"background_updated\">Arka plan güncellendi</string>\n    <string name=\"thumbnail_updated\">Küçük resim güncellendi</string>\n    <string name=\"notification_background_update_failed\">Arka plan güncellenemedi</string>\n    <string name=\"action_fillermark_episode\">Hikâye dışı işaretle</string>\n    <string name=\"action_remove_fillermark_episode\">Hikâye dışı işaretini kaldır</string>\n    <string name=\"pref_download_fillermarked_items\">Hikâye dışı olarak işaretlenmiş bölümlerin indirilmesine izin ver</string>\n    <string name=\"show_episode_previews\">Bölüm küçük resimleri</string>\n    <string name=\"show_episode_summaries\">Bölüm özetleri</string>\n    <string name=\"enable_horizontal_seek_gesture_summary\">Geri almak veya ilerletmek için sola veya sağa kaydır</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/uk/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"next_unseen_episodes\">\n        <item quantity=\"one\">Наступна не переглянута серія</item>\n        <item quantity=\"few\">Наступні %d не переглянуті епізоди</item>\n        <item quantity=\"many\">Наступні %d не переглянутих епізодів</item>\n        <item quantity=\"other\">Наступні %d не переглянутих епізодів</item>\n    </plurals>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"one\">%1$s епізод</item>\n        <item quantity=\"few\">%1$s епізоди</item>\n        <item quantity=\"many\">%1$s епізодів</item>\n        <item quantity=\"other\">%1$s епізодів</item>\n    </plurals>\n    <plurals name=\"download_amount_anime\">\n        <item quantity=\"one\">Наступний епізод</item>\n        <item quantity=\"few\">Наступні %d епізоди</item>\n        <item quantity=\"many\">Наступні %d епізодів</item>\n        <item quantity=\"other\">Наступні %d епізодів</item>\n    </plurals>\n    <plurals name=\"notification_new_episodes_summary\">\n        <item quantity=\"one\">Для 1 тайтлу</item>\n        <item quantity=\"few\">Для %d тайтлів</item>\n        <item quantity=\"many\">Для %d тайтлів</item>\n        <item quantity=\"other\">Для %d тайтлів</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"one\">1 новий епізод</item>\n        <item quantity=\"few\">%1$d нові епізоди</item>\n        <item quantity=\"many\">%1$d нових епізодів</item>\n        <item quantity=\"other\">%1$d нових епізодів</item>\n    </plurals>\n    <plurals name=\"seconds\">\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=\"notification_episodes_multiple_and_more\">\n        <item quantity=\"one\">Епізоди %1$s та ще 1</item>\n        <item quantity=\"few\">Епізоди %1$s та інші %2$d</item>\n        <item quantity=\"many\">Епізоди %1$s та інші %2$d</item>\n        <item quantity=\"other\">Епізоди %1$s та інші %2$d</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/uk/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Увімкнути горизонтальний пошук</string>\n    <string name=\"action_filter_started\">Розпочато</string>\n    <string name=\"action_sort_airing_time\">Час виходу</string>\n    <string name=\"action_reorganize_by\">Змінити порядок</string>\n    <string name=\"relative_time_now\">Зараз</string>\n    <string name=\"pref_library_summary\">Категорії, глобальне оновлення, гортання розділів</string>\n    <string name=\"pref_library_update_show_tab_badge\">Показувати кількість непрочитаних на значку оновлення</string>\n    <string name=\"label_player_settings\">Налаштування плеєра</string>\n    <string name=\"action_search_player_settings\">Пошук налаштувань плеєра</string>\n    <string name=\"pref_player_internal\">Внутрішній програвач</string>\n    <string name=\"pref_player_internal_summary\">Прогрес, контроль, орієнтація</string>\n    <string name=\"pref_progress_mark_as_seen\">В який момент позначити епізод як переглянутий</string>\n    <string name=\"pref_preserve_watching_position\">Зберігати положення перегляду на переглянутих епізодах</string>\n    <string name=\"pref_category_player_orientation\">Орієнтація</string>\n    <string name=\"rotation_video\">відео</string>\n    <string name=\"rotation_reverse_landscape\">Зворотний ландшафт</string>\n    <string name=\"rotation_sensor_portrait\">Вертикальне зображення</string>\n    <string name=\"rotation_sensor_landscape\">Горизонтальне зображення</string>\n    <string name=\"pref_category_controls\">Елементи керування</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">Дозволити жести на панелях</string>\n    <string name=\"pref_controls_show_loading\">Показати коло завантаження</string>\n    <string name=\"pref_controls_show_chapter_indicator\">Показати індикатор поточного розділу</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">Відображається, лише якщо у відео є розділи</string>\n    <string name=\"pref_controls_display_volume_percentage\">Показати гучність у відсотках</string>\n    <string name=\"pref_remember_brightness\">Запам\\'ятати та переключитися на останню використану яскравість</string>\n    <string name=\"pref_remember_volume\">Запам\\'ятати та переключитися на останню використану гучність</string>\n    <string name=\"pref_hosters\">Хостери</string>\n    <string name=\"pref_hosters_show_failure\">Показати невдалих хостерів</string>\n    <string name=\"pref_hosters_show_empty\">Показати порожні хостери</string>\n    <string name=\"pref_player_fullscreen\">Показати контент у вирізі дисплея</string>\n    <string name=\"pref_player_hide_controls\">Приховувати елементи керування плеєром під час відкриття плеєра</string>\n    <string name=\"pref_show_system_bar\">Показати рядок стану системи з елементами керування</string>\n    <string name=\"pref_reduce_motion\">Зменшити анімацію гравця</string>\n    <string name=\"pref_player_time_to_disappear\">Сховати гравця контролює час</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s мс</string>\n    <string name=\"pref_panel_opacity\">Непрозорість панелі</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Ввімкнути авто пропуск</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Ввімкнути стиль Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Час очікування кнопки</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 секунд</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 секунд</string>\n    <string name=\"pref_category_player_aniskip_info\">Для роботи AniSkip потрібно, щоб аніме відстежувалося за допомогою MAL або Anilist</string>\n    <string name=\"pref_enable_aniskip\">Ввімкнути AniSkip</string>\n    <string name=\"pref_category_pip\">Картинка в картинці (PiP)</string>\n    <string name=\"pref_enable_pip\">Ввімкнути використання режиму PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Показувати сповіщення епізоду під час переходу на інший епізод у режимі PiP</string>\n    <string name=\"pref_pip_on_exit\">Автоматичний перехід у режим PiP при виході з плеєра</string>\n    <string name=\"pref_pip_replace_with_previous\">Замінює параметр «Пропустити 10 секунд» на «Попередній епізод»</string>\n    <string name=\"pref_category_external_player\">Зовнішній плеєр</string>\n    <string name=\"pref_always_use_external_player\">Завжди використовувати зовнішній плеєр</string>\n    <string name=\"pref_external_player_preference\">Налаштування зовнішнього плеєра</string>\n    <string name=\"pref_player_gestures\">Жести</string>\n    <string name=\"pref_player_gestures_summary\">Пошук, подвійне торкання, керування медіа</string>\n    <string name=\"pref_category_player_sliders\">Повзунки</string>\n    <string name=\"enable_volume_brightness_gestures\">Ввімкнути жести гучності та яскравості</string>\n    <string name=\"pref_controls_swap_vol_brightness\">Поміняти повзунок гучності та яскравості</string>\n    <string name=\"pref_category_player_seeking\">Пошук</string>\n    <string name=\"enable_horizontal_seek_gesture\">Ввімкнути жест горизонтального пошуку</string>\n    <string name=\"pref_show_seekbar\">Показувати панель пошуку під час пошуку</string>\n    <string name=\"pref_default_intro_length\">Тривалість пропуску інтро за замовчуванням</string>\n    <string name=\"pref_intro_length\">Пропустити тривалість вступу</string>\n    <string name=\"pref_skip_length\">Двічі торкніться, щоб пропустити інтро</string>\n    <string name=\"pref_skip_disable\">Вимкнути</string>\n    <string name=\"pref_player_smooth_seek\">Увімкнути точний пошук</string>\n    <string name=\"pref_player_smooth_seek_summary\">Якщо увімкнено, пошук не зосереджуватиметься на ключових кадрах, що призводить до повільнішого, але точнішого пошуку</string>\n    <string name=\"pref_category_double_tap\">Двічі торкніться</string>\n    <string name=\"pref_left_double_tap\">Двічі торкніться (ліворуч)</string>\n    <string name=\"pref_center_double_tap\">Двічі торкніться (у центрі)</string>\n    <string name=\"pref_right_double_tap\">Двічі торкніться (праворуч)</string>\n    <string name=\"pref_double_tap_info\">Якщо для жесту торкання встановлено значення Custom, його можна прив’язати через input.conf. Коди клавіш: 0x10001 для лівої, 0x10002 для центральної та 0x10003 для правої.</string>\n    <string name=\"single_action_none\">Жодного</string>\n    <string name=\"single_action_seek\">шукати</string>\n    <string name=\"single_action_playpause\">Відтворення/Пауза</string>\n    <string name=\"single_action_switch\">Змінити епізод</string>\n    <string name=\"single_action_custom\">Кастом</string>\n    <string name=\"pref_category_media_controls\">Елементи керування медіа</string>\n    <string name=\"pref_media_previous\">попередній</string>\n    <string name=\"pref_media_playpause\">Відтворення/Пауза</string>\n    <string name=\"pref_media_next\">Далі</string>\n    <string name=\"pref_media_info\">Якщо для елемента керування медіа встановлено значення Custom, його можна прив’язати через input.conf. Ключові коди: 0x10004 для попереднього, 0x10005 для відтворення/паузи та 0x10006 для наступного.</string>\n    <string name=\"pref_player_decoder\">Декодер</string>\n    <string name=\"pref_player_decoder_summary\">Апаратне декодування, піксельний формат, дебандування</string>\n    <string name=\"pref_try_hw\">Спробуйте апаратне декодування</string>\n    <string name=\"pref_gpu_next_title\">Увімкнути gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Новий сервер обробки відео</string>\n    <string name=\"pref_debanding_title\">Налагодження</string>\n    <string name=\"pref_debanding_none\">Жодного</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">Використовуйте піксельний формат YUV420P</string>\n    <string name=\"pref_use_yuv420p_subtitle\">Може виправити чорні екрани на деяких відеокодеках, а також покращити продуктивність за рахунок погіршення якості</string>\n    <string name=\"pref_player_subtitle\">субтитри</string>\n    <string name=\"pref_player_subtitle_summary\">Бажані мови, білий список, чорний список</string>\n    <string name=\"pref_player_subtitle_lang\">Бажані мови</string>\n    <string name=\"pref_player_subtitle_lang_info\">Мови субтитрів, які вибираються за замовчуванням у відео з декількома субтитрами. Дво- або трибуквені коди мов працюють. Кілька значень можна розділити комою.</string>\n    <string name=\"pref_player_subtitle_whitelist\">Білий список</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">Білий список для субтитрів. Якщо визначено білий список, використовуватиметься перший субтитр, який містить слово з білого списку. Кілька значень можна розділити комою.</string>\n    <string name=\"pref_player_subtitle_blacklist\">Чорний список</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">Чорний список для субтитрів. Якщо визначено чорний список, усі субтитри, які містять слово з чорного списку, буде відфільтровано. Кілька значень можна розділити комою.</string>\n    <string name=\"pref_player_audio\">Аудіо</string>\n    <string name=\"pref_player_audio_summary\">Бажані мови, корекція висоти, звукові канали</string>\n    <string name=\"pref_player_audio_lang\">Бажані мови</string>\n    <string name=\"pref_player_audio_lang_info\">Мова(-и) аудіо, які вибираються за замовчуванням для відео з кількома аудіопотоками. Дво- або трилітерні коди мов працюють. Кілька значень можна розділити комою.</string>\n    <string name=\"pref_player_audio_pitch_correction\">Увімкнути корекцію висоти звуку</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">Запобігає тому, щоб звук став високим на вищих швидкостях і низьким на низьких швидкостях</string>\n    <string name=\"pref_player_audio_channels\">Аудіо канали</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Автосейф</string>\n    <string name=\"pref_player_audio_channels_auto\">Авто</string>\n    <string name=\"pref_player_audio_channels_mono\">Мононуклеоз</string>\n    <string name=\"pref_player_audio_channels_stereo\">Стерео</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Зворотне стерео</string>\n    <string name=\"pref_player_audio_boost_cap\">Кришка збільшення гучності</string>\n    <string name=\"pref_player_custom_button\">Спеціальні кнопки</string>\n    <string name=\"pref_player_custom_button_summary\">Виконайте код lua за допомогою спеціальних кнопок</string>\n    <string name=\"pref_player_custom_button_header\">Редагувати спеціальні кнопки</string>\n    <string name=\"pref_player_custom_button_guide\">Керівництво по власним кнопкам</string>\n    <string name=\"pref_player_custom_button_empty\">У вас немає спеціальних кнопок. Торкніться кнопки з плюсом, щоб створити спеціальну кнопку.</string>\n    <string name=\"pref_player_custom_button_add\">Додати кнопку</string>\n    <string name=\"pref_player_custom_button_edit\">Кнопка редагування</string>\n    <string name=\"pref_player_custom_button_title\">Назва</string>\n    <string name=\"pref_player_custom_button_error_exists\">Кнопка вже існує!</string>\n    <string name=\"pref_player_custom_button_content\">Код Lua</string>\n    <string name=\"pref_player_custom_button_content_long\">Код Lua (при тривалому натисканні)</string>\n    <string name=\"pref_player_custom_button_optional\">(необов\\'язковий)</string>\n    <string name=\"pref_player_custom_button_delete\">Видалити кнопку</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">Ви бажаєте видалити кнопку %s?</string>\n    <string name=\"pref_player_custom_button_startup\">При запуску</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">Просунутий</string>\n    <string name=\"pref_player_advanced_summary\">Файли користувача, mpv.conf, input.conf</string>\n    <string name=\"pref_mpv_conf\">Редагувати файл конфігурації MPV для подальших налаштувань плеєра</string>\n    <string name=\"pref_reset_mpv_conf\">Скинути конфігураційний файл MPV</string>\n    <string name=\"pref_mpv_input\">Відредагуйте вхідний файл MPV для конфігурації розкладки клавіатури</string>\n    <string name=\"video_fit_screen\">За розміром екрана</string>\n    <string name=\"video_crop_screen\">Обрізано по ширині екрана</string>\n    <string name=\"video_stretch_screen\">Розтягнуто на екрані</string>\n    <string name=\"mpv_media_title\">%1$s - E%2$s - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">Таймер сну закінчився</string>\n    <string name=\"player_generic_unit_ms\">мс</string>\n    <string name=\"numeric_chooser_value_too_big\">Завелике значення</string>\n    <string name=\"numeric_chooser_value_too_small\">Замале значення</string>\n    <string name=\"enable_auto_play\">Ввімкнено автовідтворення</string>\n    <string name=\"disable_auto_play\">Автовідтворення вимкнено</string>\n    <string name=\"player_aniskip_dontskip\">Не пропускати</string>\n    <string name=\"player_aniskip_dontskip_toast\">Пропуск %s через %d секунд</string>\n    <string name=\"player_aniskip_skip\">%s пропущено</string>\n    <string name=\"no_next_episode\">Наступний епізод не знайдено!</string>\n    <string name=\"no_prev_episode\">Попередній епізод не знайдено!</string>\n    <string name=\"no_available_videos\">Немає доступних відео</string>\n    <string name=\"no_hosters\">Список хостерів порожній</string>\n    <string name=\"no_episode_loaded\">Епізод не завантажено</string>\n    <string name=\"select_hoster_from_empty_list\">Хостер обрано з порожнього списку</string>\n    <string name=\"player_sheets_delay_set_as_default\">Встановити за умовчанням</string>\n    <string name=\"player_sheets_audio_delay_title\">Затримка звуку</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">Чути звук</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">Звук помічений</string>\n    <string name=\"player_sheets_sub_delay_title\">Затримка субтитрів</string>\n    <string name=\"player_sheets_sub_delay_speed\">швидкість</string>\n    <string name=\"player_sheets_sub_delay_delay\">Затримка</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">Первинний</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">Вторинний</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">Обидва</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">Чути голос</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">Текст побачено</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">Чути звук</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">Звук помічений</string>\n    <string name=\"player_sheets_sub_colors_title\">Кольори</string>\n    <string name=\"player_sheets_subtitles_color_text\">текст</string>\n    <string name=\"player_sheets_subtitles_color_border\">Кордон</string>\n    <string name=\"player_sheets_subtitles_color_background\">Фон</string>\n    <string name=\"player_sheets_sub_color_red\">Червоний</string>\n    <string name=\"player_sheets_sub_color_green\">Зелений</string>\n    <string name=\"player_sheets_sub_color_blue\">Синій</string>\n    <string name=\"player_sheets_sub_color_alpha\">Альфа</string>\n    <string name=\"player_sheets_subtitles_settings_title\">Налаштування субтитрів</string>\n    <string name=\"player_sheets_sub_typography_title\">Типографіка</string>\n    <string name=\"player_sheets_sub_typography_font\">Шрифт</string>\n    <string name=\"player_sheets_sub_typography_font_size\">Розмір шрифту</string>\n    <string name=\"player_sheets_sub_typography_border_style\">Стиль кордону</string>\n    <string name=\"player_sheets_sub_typography_border_size\">Розмір рамки</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">Зсув тіні</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">Контур і тінь</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">Непрозора коробка</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">Фон коробки</string>\n    <string name=\"player_sheets_sub_misc_title\">Різне</string>\n    <string name=\"player_sheets_sub_override_ass\">Заміна субтитрів ASS/SSA</string>\n    <string name=\"player_sheets_sub_scale\">масштаб</string>\n    <string name=\"player_sheets_sub_position\">Позиція</string>\n    <string name=\"player_sheets_filters_title\">Фільтри</string>\n    <string name=\"player_sheets_filters_brightness\">Яскравість</string>\n    <string name=\"player_sheets_filters_contrast\">Контраст</string>\n    <string name=\"player_sheets_filters_gamma\">Гамма</string>\n    <string name=\"player_sheets_filters_Saturation\">насиченість</string>\n    <string name=\"player_sheets_filters_hue\">Відтінок</string>\n    <string name=\"player_sheets_filters_warning\">Деякі фільтри можуть не працювати з поточним відеодрайвером</string>\n    <string name=\"player_sheets_add_ext_audio\">Додати зовнішні звукові доріжки</string>\n    <string name=\"player_hoster_tap_to_load\">Торкніться, щоб завантажити відео</string>\n    <string name=\"player_hoster_failed\">Не вдалося завантажити відео</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">більше</string>\n    <string name=\"player_hwdec_mode\">Встановити режим апаратного декодування за замовчуванням</string>\n    <string name=\"pref_audio_channels\">Аудіо канали</string>\n    <string name=\"player_sheets_stats_page_title\">Сторінка статистики за замовчуванням</string>\n    <string name=\"player_sheets_tracks_off\">Вимкнено</string>\n    <string name=\"player_sheets_stats_page_chip\">Сторінка %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">Спеціальні кнопки</string>\n    <string name=\"player_seek_n_seconds\">%d секунд</string>\n    <string name=\"timer_title\">Таймер сну</string>\n    <string name=\"timer_remaining\">Залишилося %s</string>\n    <string name=\"timer_picker_enter_timer\">Введіть тривалість</string>\n    <string name=\"timer_picker_pick_time\">Виберіть тривалість</string>\n    <string name=\"timer_cancel_timer\">Скасувати поточний таймер</string>\n    <string name=\"player_sheets_speed_slider_label\">швидкість</string>\n    <string name=\"player_sheets_speed_make_default\">Зробити швидкість за замовчуванням</string>\n    <string name=\"pref_audio_pitch_correction_title\">Увімкнути корекцію висоти звуку</string>\n    <string name=\"pref_audio_pitch_correction_summary\">Запобігає тому, щоб звук став високим на вищих швидкостях і низьким на низьких швидкостях</string>\n    <string name=\"player_sheets_add_ext_sub\">Додайте зовнішні субтитри</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">Додаткові субтитри не матимуть стилю ASS/SSA.</string>\n    <string name=\"screenshot_show_subs\">Показати субтитри на знімку екрана</string>\n    <string name=\"pref_general_summary\">Мова застосунку, сповіщення</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Сапфір</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Матриця</string>\n    <string name=\"pref_library_rows\">Розмір списку</string>\n    <string name=\"pref_preserve_reading_position\">Зберігати позицію читання на прочитаних розділах</string>\n    <string name=\"pref_download_slots\">Максимальний обсяг завантаження</string>\n    <string name=\"custom_button_settings\">Спеціальні кнопки</string>\n    <string name=\"local_source_badge\">Місцевий</string>\n    <string name=\"anime_interval_expected_update\">Очікується, що нові епізоди вийдуть приблизно через %1$s, перевіряються кожні %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Це аніме або завершено, або немає передбачуваної дати випуску.</string>\n    <string name=\"confirm_tracker_update_anime\">Оновити трекери до епізоду %d?</string>\n    <string name=\"trackers_updated_summary_manga\">Трекери оновлено до розділу %d</string>\n    <string name=\"trackers_updated_summary_anime\">Трекери оновлено до епізоду %d</string>\n    <string name=\"download_notifier_download_finish\">Завантаження завершено</string>\n    <string name=\"action_hide\">Приховати</string>\n    <string name=\"label_all\">всі</string>\n    <string name=\"label_category\">Категорія</string>\n    <string name=\"manga_categories\">Категорії манґи</string>\n    <string name=\"general_categories\">Категорії</string>\n    <string name=\"anime_categories\">Категорії аніме</string>\n    <string name=\"entries\">Записи в бібліотеці</string>\n    <string name=\"chapters_episodes\">Розділи та епізоди</string>\n    <string name=\"episodes\">Епізоди</string>\n    <string name=\"backup_settings_warning\">Попередження: Резервна копія налаштувань також збереже ваші паролі до треків, не поширюйте цей файл резервної копії!</string>\n    <string name=\"label_manga_library\">Манґа</string>\n    <string name=\"label_anime_library\">Аніме</string>\n    <string name=\"label_anime\">Аніме</string>\n    <string name=\"label_manga\">Манґа</string>\n    <string name=\"label_recent_anime_updates\">Оновлення аніме</string>\n    <string name=\"label_manga_sources\">Джерела манґи</string>\n    <string name=\"label_anime_sources\">Джерела аніме</string>\n    <string name=\"label_watched_duration\">Тривалість перегляду</string>\n    <string name=\"label_watched_episodes\">Переглянуто</string>\n    <string name=\"pref_start_screen\">Початковий екран</string>\n    <string name=\"pref_library_manga_columns\">Елементи манґи в рядку</string>\n    <string name=\"pref_library_anime_columns\">Елементи аніме на рядок</string>\n    <string name=\"pref_bottom_nav_no_history\">Перемістити історію на вкладку Детальніше</string>\n    <string name=\"pref_bottom_nav_no_updates\">Перемістити оновлення в вкладку Детальніше</string>\n    <string name=\"pref_bottom_nav_no_manga\">Перемістити Манґа в вкладку Детальніше</string>\n    <string name=\"pref_bottom_nav_no_browse\">Перемістіть Огляд на вкладку Більше</string>\n    <string name=\"action_filter_unseen\">Не переглянуто</string>\n    <string name=\"action_global_manga_search\">Глобальний пошук манґи</string>\n    <string name=\"action_global_anime_search\">Глобальний пошук аніме</string>\n    <string name=\"action_sort_total_episodes\">Всього епізодів</string>\n    <string name=\"action_sort_last_seen\">Останній раз бачили</string>\n    <string name=\"action_sort_last_checked\">Останній раз перевірено</string>\n    <string name=\"action_sort_latest_episode\">Останній епізод</string>\n    <string name=\"action_sort_last_anime_update\">Останнє оновлення аніме</string>\n    <string name=\"action_sort_unseen_count\">Кількість не переглянутого</string>\n    <string name=\"action_sort_episode_fetch_date\">Дата отримання епізоду</string>\n    <string name=\"action_mark_as_seen\">Позначити як переглянуте</string>\n    <string name=\"action_mark_as_unseen\">Позначити як не переглянуте</string>\n    <string name=\"action_mark_previous_as_seen\">Позначити попереднє як переглянуте</string>\n    <string name=\"action_play_internally\">Дивитися в застосунку</string>\n    <string name=\"action_play_externally\">Дивитися іншому плеєрі</string>\n    <string name=\"action_download_unread\">Завантажити непрочитані розділи</string>\n    <string name=\"action_download_unseen\">Завантажити не переглянуті епізоди</string>\n    <string name=\"action_bookmark_episode\">Додати епізод до закладок</string>\n    <string name=\"action_remove_bookmark_episode\">Видалити епізод із закладок</string>\n    <string name=\"action_edit_anime_categories\">Редагувати категорії аніме</string>\n    <string name=\"action_edit_manga_categories\">Редагувати категорії манґи</string>\n    <string name=\"action_view_episodes\">Переглянути епізоди</string>\n    <string name=\"action_previous_episode\">Попередній епізод</string>\n    <string name=\"action_play\">Дивитися</string>\n    <string name=\"action_next_episode\">Наступний епізод</string>\n    <string name=\"action_screen_fit\">Підгонка екрану</string>\n    <string name=\"action_show_anime\">Показати аніме</string>\n    <string name=\"action_display_download_badge_anime\">Завантажені епізоди</string>\n    <string name=\"action_display_local_badge_manga\">Локальна манґа</string>\n    <string name=\"action_display_local_badge_anime\">Локальне аніме</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">У глобальному пошуку шукайте лише закріплені джерела манґи</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">У глобальному пошуку шукайте лише закріплені джерела аніме</string>\n    <string name=\"pref_hide_in_manga_library_items\">Приховати записи манґи, які вже є в бібліотеці</string>\n    <string name=\"pref_hide_in_anime_library_items\">Приховати записи про аніме, які вже є в бібліотеці</string>\n    <string name=\"action_order_by_episode_number\">За номером епізоду</string>\n    <string name=\"action_start_download_externally\">Використати зовнішній завантажувач</string>\n    <string name=\"action_start_download_internally\">Використати внутрішній завантажувач</string>\n    <string name=\"pref_bottom_nav_style\">Стиль нижньої навігації</string>\n    <string name=\"pref_default_home_tab_library\">Встановіть стартовий екран на вкладку Манґа</string>\n    <string name=\"default_manga_category\">Категорія манґи за замовчуванням</string>\n    <string name=\"default_anime_category\">Категорія аніме за замовчуванням</string>\n    <string name=\"pref_manga_library_update_categories_details\">Манґу в виключених категоріях не буде оновлено, навіть якщо вона також знаходиться у включених категоріях.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Аніме у виключених категоріях не оновлюватимуться, навіть якщо вони є у включених категоріях.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Це розширення не входить до переліку офіційних розширень Aniyomi.</string>\n    <string name=\"unofficial_anime_extension_message\">Це розширення не входить до офіційного списку розширень Aniyomi.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Виключені категорії</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Виключені категорії аніме</string>\n    <string name=\"pref_category_external_downloader\">Зовнішній завантажувач</string>\n    <string name=\"pref_use_external_downloader\">Завжди використовувати зовнішній завантажувач для аніме</string>\n    <string name=\"pref_external_downloader_selection\">Налаштування застосунку для завантаження</string>\n    <string name=\"pref_download_new_episodes\">Завантажити нові епізоди</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">Пропустіть завантаження дублікатів переглянутих епізодів</string>\n    <string name=\"auto_download_while_watching\">Автоматичне завантаження під час перегляду</string>\n    <string name=\"download_ahead_info_anime\">Працює лише для епізодів у бібліотеці та якщо поточний і наступний епізоди вже завантажено</string>\n    <string name=\"pref_track_on_add_library\">Відкрити меню доріжки при додаванні до бібліотеки</string>\n    <string name=\"pref_show_next_episode_airing_time\">Показати час показу наступного епізоду</string>\n    <string name=\"pref_backup_flags_summary\">Яку інформацію включити у файл резервної копії</string>\n    <string name=\"pref_anime_storage_usage\">Використання сховища аніме</string>\n    <string name=\"pref_manga_storage_usage\">Використання сховища манґи</string>\n    <string name=\"used_cache_both\">Використовується в аніме: %1$s, використовується в манзі: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Очистити базу даних</string>\n    <string name=\"pref_clear_anime_database\">Очистити базу даних аніме</string>\n    <string name=\"pref_clear_manga_database_summary\">Видалити історію для манґи, котра не знаходиться в вашій бібліотеці</string>\n    <string name=\"pref_clear_anime_database_summary\">Видалення історії для аніме, які не зберігаються у вашій бібліотеці</string>\n    <string name=\"anime_from_library\">Аніме з бібліотеки</string>\n    <string name=\"downloaded_episodes\">Завантажені епізоди</string>\n    <string name=\"local_manga_source\">Локальне джерело манґи</string>\n    <string name=\"local_anime_source\">Локальне джерело аніме</string>\n    <string name=\"episode_not_found\">Епізод не знайдено</string>\n    <string name=\"local_invalid_episode_format\">Неправильний формат епізоду</string>\n    <string name=\"unknown_studio\">Невідома студія</string>\n    <string name=\"delete_confirmation\">Ви впевнені, що бажаєте видалити \\\"%s\\\"?</string>\n    <string name=\"delete_downloads_for_anime\">Видалити завантажені епізоди?</string>\n    <string name=\"snack_add_to_manga_library\">Додати манґу до бібліотеки?</string>\n    <string name=\"snack_add_to_anime_library\">Додати аніме до бібліотеки?</string>\n    <string name=\"display_mode_episode\">Епізод %1$s</string>\n    <string name=\"episode_downloading_progress\">Завантаження (%d%%)</string>\n    <string name=\"download_error\">Помилка</string>\n    <string name=\"download_paused\">Пауза</string>\n    <string name=\"show_episode_number\">Номер епізоду</string>\n    <string name=\"sort_by_episode_number\">За номером епізоду</string>\n    <string name=\"download_unseen\">Не переглянуто</string>\n    <string name=\"confirm_delete_episodes\">Ви впевнені, що хочете видалити вибрані епізоди?</string>\n    <string name=\"also_set_episode_settings_for_library\">Також застосувати до всіх аніме в моїй бібліотеці</string>\n    <string name=\"no_episodes_error\">Епізодів не знайдено</string>\n    <string name=\"watching\">Переглядаю</string>\n    <string name=\"currently_reading\">Зараз читається</string>\n    <string name=\"currently_watching\">Зараз переглядається</string>\n    <string name=\"plan_to_watch\">Заплановано</string>\n    <string name=\"not_interesting\">Не цікаво</string>\n    <string name=\"want_to_read\">Хочу прочитати</string>\n    <string name=\"want_to_watch\">Хочу подивитися</string>\n    <string name=\"repeating_anime\">Повторний перегляд</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Це призведе до видалення дати перегляду цього епізоду. Ви впевнені?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Скинути всі епізоди для цього аніме</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">%1$s</string>\n    <string name=\"recent_anime_time\">Еп. %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Відео не знайдено</string>\n    <string name=\"notification_new_episodes\">Знайдено нові епізоди</string>\n    <string name=\"information_no_recent_anime\">Останнім часом нічого не дивилися</string>\n    <string name=\"episode_settings_updated\">Оновлено налаштування епізодів за умовчанням</string>\n    <string name=\"download_notifier_download_paused_chapters\">Завантаження призупинено</string>\n    <string name=\"download_notifier_download_paused_episodes\">Завантаження епізоду призупинено</string>\n    <string name=\"channel_new_chapters_episodes\">Оновлення розділів/епізодів</string>\n    <string name=\"label_storage\">Зберігання</string>\n    <string name=\"label_history\">Манґа</string>\n    <string name=\"label_anime_history\">Аніме</string>\n    <string name=\"label_updates\">Манґа</string>\n    <string name=\"label_anime_updates\">Аніме</string>\n    <string name=\"action_change_intro_length\">Змінити довжину інтро</string>\n    <string name=\"notification_episodes_single\">Епізод %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Епізод %1$s та інші %2$d</string>\n    <string name=\"notification_episodes_multiple\">Епізоди %1$s</string>\n    <string name=\"episode_settings\">Налаштування епізоду</string>\n    <string name=\"pref_backup_flags\">Варіанти резервного копіювання</string>\n    <string name=\"label_manga_extensions\">Розширення манґи</string>\n    <string name=\"label_anime_extensions\">Розширення аніме</string>\n    <string name=\"label_migration_manga\">Перенести манґу</string>\n    <string name=\"label_migration_anime\">Перенести аніме</string>\n    <string name=\"settings\">Налаштування</string>\n    <string name=\"copied_video_link_to_clipboard\">Скопійоване якісне посилання на відео в буфер обміну</string>\n    <string name=\"choose_video_quality\">Виберіть якість відео:</string>\n    <string name=\"extension_settings\">Налаштування розширення</string>\n    <string name=\"theme_cottoncandy\">Бавовняні цукерки</string>\n    <string name=\"theme_mocha\">Моча</string>\n    <string name=\"pref_episode_swipe_end\">Проведіть пальцем праворуч</string>\n    <string name=\"pref_episode_swipe_start\">Епізод при проведенні пальцем ліворуч</string>\n    <string name=\"pref_category_hide_hidden\">Сховати приховані категорії з екрану категорій</string>\n    <string name=\"pref_update_anime_release_grace_period\">Очікуваний пільговий період випуску аніме</string>\n    <string name=\"data_saver_exclude\">Виключити зі зберігача даних</string>\n    <string name=\"data_saver_stop_exclude\">Зупинити виключення зі зберігача даних</string>\n    <string name=\"data_saver\">Зберігач даних</string>\n    <string name=\"data_saver_summary\">Стисніть зображення перед завантаженням або завантаженням у читачі</string>\n    <string name=\"data_saver_downloader\">Використовувати зберігач даних у завантажувачі</string>\n    <string name=\"data_saver_ignore_jpeg\">Ігнорувати зображення Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Ігнорувати Gif анімації</string>\n    <string name=\"data_saver_image_quality\">Якість зображення</string>\n    <string name=\"data_saver_image_quality_summary\">Більші значення означають, що зберігається більший відсоток якості зображення, але це також означає, що розмір файлу більший, 80 відсотків — хороша середина між розміром файлу та якістю зображення</string>\n    <string name=\"data_saver_image_format\">Стиснути до Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Розмір файлу Jpeg значно менший, ніж Webp (тобто зберігається більше даних), але це також робить зображення якіснішими.\n\\nВ даний час стискає до Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Розмір файлу Jpeg значно менший, ніж Webp (тобто зберігається більше даних), але це також робить зображення якіснішими.\n\\nВ даний час стискає Webp</string>\n    <string name=\"data_saver_color_bw\">Перетворити на чорно-білий</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (потрібен проксі-сервер Bandwidth Hero)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Проксі-сервер Bandwidth Hero</string>\n    <string name=\"data_saver_server_summary\">Помістіть URL-адресу проксі-сервера Bandwidth Hero тут</string>\n    <string name=\"download_slots_info\">Буде завантажувати тільки з власному хості або не лімітованих джерел</string>\n    <string name=\"unseen\">Небачений</string>\n    <string name=\"label_manga_extension_repos\">Сховища розширення манґи</string>\n    <string name=\"label_anime_extension_repos\">Repos розширення аніме</string>\n    <string name=\"onboarding_storage_action_create_folder\">Створіть папку Aniyomi за замовчуванням</string>\n    <string name=\"download_speed_limit\">Обмеження швидкості завантаження розділу</string>\n    <string name=\"download_speed_limit_hint\">Встановіть значення 0, щоб вимкнути обмеження швидкості.</string>\n    <string name=\"action_display_unseen_badge\">Непереглянуті епізоди</string>\n    <string name=\"manga\">Манґа</string>\n    <string name=\"pref_behavior\">Поведінка розділу</string>\n    <string name=\"action_add_repo_message\">Додайте додаткові репозиторії до %s. Це має бути URL-адреса, яка закінчується на \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Працює лише якщо поточний розділ/епізод + наступний вже завантажені.</string>\n    <string name=\"non_library_settings\">Усі прочитані/переглянуті записи</string>\n    <string name=\"action_sort_last_manga_update\">Останнє оновлення манґи</string>\n    <string name=\"action_show_manga\">Показати манґу</string>\n    <string name=\"action_display_show_continue_reading_button\">Кнопка «Продовжити перегляд/читання»</string>\n    <string name=\"pref_update_only_completely_read\">Пропустити записи з непереглянутими епізодами/непрочитаними розділами</string>\n    <string name=\"pref_category_delete_chapters\">Видалити розділи/епізоди</string>\n    <string name=\"pref_remove_after_marked_as_read\">Після ручної позначки як прочитане/переглянуте</string>\n    <string name=\"pref_remove_after_read\">Після прочитання/перегляду автоматично видаляти</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Дозволити видалення розділів/епізодів із закладками</string>\n    <string name=\"pref_auto_update_manga_sync\">Оновлення прогресу після прочитання/перегляду</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Оновити прогрес, коли позначено як прочитане/переглянуте</string>\n    <string name=\"pref_clear_chapter_cache\">Очистити кеш розділів та епізодів</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Очищати кеш епізодів/розділів під час запуску програми</string>\n    <string name=\"clear_database_confirmation\">Ви впевнені? Завершені епізоди та розділи, а також прогрес записів, що не належать до бібліотеки, будуть втрачені</string>\n    <string name=\"pref_incognito_mode_summary\">Призупиняє вашу історію</string>\n    <string name=\"manga_from_library\">Манґа з бібліотеки</string>\n    <string name=\"also_set_chapter_settings_for_library\">Також застосовувати до всієї манґи в моїй бібліотеці</string>\n    <string name=\"dialog_with_checkbox_reset\">Скинути всі розділи цієї манґи</string>\n    <string name=\"download_insufficient_space\">Не вдалося завантажити через брак місця</string>\n    <string name=\"download_queue_size_warning\">Попередження: великі масові завантаження можуть призвести до уповільнення роботи джерел та/або блокування Aniyomi. Натисніть, щоб дізнатися більше.</string>\n    <string name=\"pref_invalidate_download_cache_summary\">Примусово перевіряти завантажені розділи та епізоди за допомогою програми</string>\n    <string name=\"pref_category_intro_skip\">Пропустити вступ</string>\n    <string name=\"pref_enable_intro_skip\">Увімкнути пропуск вступу</string>\n    <string name=\"pref_disable_aniskip_chapter\">Вимкнути AniSkip, якщо відео вже містить розділи</string>\n    <string name=\"pref_player_editor\">Редактор сценаріїв</string>\n    <string name=\"pref_player_editor_summary\">Редагування та створення нових скриптів і параметрів скриптів</string>\n    <string name=\"pref_player_editor_script\">Скрипти</string>\n    <string name=\"pref_player_editor_script_opts\">Параметри скриптів</string>\n    <string name=\"pref_player_no_items\">Каталог не містить елементів. Натисніть кнопку з плюсом, щоб додати новий файл.</string>\n    <string name=\"editor_unsaved_progress\">У вас є незбережені зміни. Ви все ще хочете повернутися?</string>\n    <string name=\"editor_save_error\">Не вдалося зберегти файл</string>\n    <string name=\"editor_save_success\">Файл збережено</string>\n    <string name=\"editor_action_rename\">Перейменувати файл</string>\n    <string name=\"editor_action_delete\">Видалити файл</string>\n    <string name=\"editor_file_already_exists\">Файл вже існує</string>\n    <string name=\"editor_invalid_filename\">Недійсне ім\\'я файлу</string>\n    <string name=\"editor_create_file\">Створити файл</string>\n    <string name=\"editor_edit_file\">Редагувати назву файлу</string>\n    <string name=\"editor_filename\">Ім\\'я файлу</string>\n    <string name=\"editor_create_error\">Не вдалося створити файл</string>\n    <string name=\"editor_rename_error\">Не вдалося перейменувати файл</string>\n    <string name=\"editor_delete_error\">Не вдалося видалити файл</string>\n    <string name=\"editor_delete_file\">Видалити файл</string>\n    <string name=\"editor_delete_file_confirmation\">Ви бажаєте видалити файл \\\"%s\\\"?</string>\n    <string name=\"player_skip_action\">Пропустити %1$s</string>\n    <string name=\"player_intro_skipped\">%1$s пропущено</string>\n    <string name=\"player_chapter_type_opening\">Відкриття</string>\n    <string name=\"player_chapter_type_ending\">Кінець</string>\n    <string name=\"player_chapter_type_recap\">Підсумок</string>\n    <string name=\"player_chapter_type_mixedop\">Змішане відкриття</string>\n    <string name=\"player_sheets_track_delay\">Затримка</string>\n    <string name=\"player_sheets_track_palette\">Палітра</string>\n    <string name=\"player_sheets_qualities_title\">Якості</string>\n    <string name=\"player_sheets_chapters_title\">Розділи</string>\n    <string name=\"type\">Тип</string>\n    <string name=\"pref_behavior_episode\">Поведінка епізоду</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">Позначити дублікат переглянутого епізоду як переглянуте</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">Після перегляду епізоду</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">Після отримання нового епізоду</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">Недійсний код: \\\"%s\\\"</string>\n    <string name=\"pref_mpv_user_files\">Використовувати MPV-файли користувача</string>\n    <string name=\"pref_mpv_user_files_summary\">Використовувати файли з каталогу mpv-config</string>\n    <string name=\"label_player\">Гравець</string>\n    <string name=\"pref_player_settings_summary\">Вбудований програвач, жести, декодери, субтитри</string>\n    <string name=\"action_stop\">Стій</string>\n    <string name=\"action_continue\">Продовжити</string>\n    <string name=\"label_cant_migrate_episode\">Не вдалося перенести епізод у сезон, виберіть сезон для продовження</string>\n    <string name=\"label_cant_migrate_season\">Не вдалося перенести сезон в епізод</string>\n    <string name=\"label_show_seasons\">Показати сезони</string>\n    <string name=\"action_display_show_continue_watching_button\">Кнопка «Продовжити перегляд»</string>\n    <string name=\"action_display_grid_mode\">Режим відображення сітки</string>\n    <string name=\"display_mode_season\">Сезон %1$s</string>\n    <string name=\"show_season_number\">Номер сезону</string>\n    <string name=\"sort_by_season_number\">За номером сезону</string>\n    <string name=\"no_seasons_error\">Сезонів не знайдено</string>\n    <string name=\"season_settings_updated\">Оновлені налаштування сезону за замовчуванням</string>\n    <string name=\"season_settings\">Налаштування сезону</string>\n    <string name=\"pref_library_season\">Сезон</string>\n    <string name=\"pref_update_seasons_refresh\">Оновлення сезонів епізодами під час оновлення</string>\n    <string name=\"pref_update_seasons_update\">Оновлення сезонів епізодами під час оновлення бібліотеки</string>\n    <string name=\"filler\">Наповнювач</string>\n    <string name=\"action_filter_fillermarked\">Філлермаркований</string>\n    <string name=\"action_edit_background\">Редагувати фон</string>\n    <string name=\"custom_background\">Власний фон</string>\n    <string name=\"background_saved\">Фон збережено</string>\n    <string name=\"error_saving_background\">Помилка збереження фону</string>\n    <string name=\"error_sharing_background\">Помилка спільного доступу до фону</string>\n    <string name=\"set_as_background\">Встановити як фон</string>\n    <string name=\"set_as_thumbnail\">Встановити як мініатюру</string>\n    <string name=\"background_updated\">Фон оновлено</string>\n    <string name=\"thumbnail_updated\">Мініатюру оновлено</string>\n    <string name=\"notification_background_update_failed\">Не вдалося оновити фон</string>\n    <string name=\"action_fillermark_episode\">Епізод «Філлермарк»</string>\n    <string name=\"action_remove_fillermark_episode\">Епізод Unfillermark</string>\n    <string name=\"pref_download_fillermarked_items\">Дозволити завантаження епізодів із позначкою «філлер»</string>\n    <string name=\"show_episode_previews\">Мініатюри епізодів</string>\n    <string name=\"show_episode_summaries\">Короткий зміст епізодів</string>\n    <string name=\"enable_horizontal_seek_gesture_summary\">Проведіть пальцем ліворуч або праворуч, щоб перемотати назад або вперед</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/ur/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/uz/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"pref_library_summary\">Toifalar, global yangilanish</string>\n    <string name=\"manga_categories\">Kategoriyalar</string>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/vi/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">Hãy nhấn lại nút quay lại để thoát</string>\n    <string name=\"action_filter_started\">Bắt đầu</string>\n    <string name=\"action_sort_airing_time\">Ngày phát hành</string>\n    <string name=\"action_reorganize_by\">Sắp xếp lại</string>\n    <string name=\"relative_time_now\">Bây giờ</string>\n    <string name=\"pref_library_summary\">Danh mục, cập nhật toàn bộ, vuốt chương</string>\n    <string name=\"pref_library_update_show_tab_badge\">Hiển thị số lượng chưa đọc ở phần biểu tượng Cập nhật</string>\n    <string name=\"pref_progress_mark_as_seen\">Thời điểm tính để đánh dấu tập đã xem</string>\n    <string name=\"pref_preserve_watching_position\">Lưu vị trí đang xem tại tập đã xem</string>\n    <string name=\"pref_category_player_orientation\">Hướng</string>\n    <string name=\"rotation_reverse_landscape\">Màn hình ngang (ngược)</string>\n    <string name=\"rotation_sensor_portrait\">Cảm biến màn hình dọc</string>\n    <string name=\"rotation_sensor_landscape\">Cảm biến màn hình ngang</string>\n    <string name=\"pref_remember_brightness\">Lưu và sửa dụng độ sáng lưu gần nhất</string>\n    <string name=\"pref_remember_volume\">Lưu và sử dụng âm lượng lưu gần nhất</string>\n    <string name=\"pref_player_fullscreen\">Hiển thị nội dung trong phần màn hình khuyết</string>\n    <string name=\"pref_player_hide_controls\">Ẩn điều khiển trình phát khi khởi động trình phát</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">Bật tự động skip</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">Bật style Netflix</string>\n    <string name=\"pref_waiting_time_aniskip\">Thời gian nút reset</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 giây</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 giây</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 giây</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 giây</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 giây</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 giây</string>\n    <string name=\"pref_category_player_aniskip_info\">Để AniSkip hoạt động, yêu cầu anime phải được theo dõi bằng MAL hoặc Anilist</string>\n    <string name=\"pref_enable_aniskip\">Bật AniSkip</string>\n    <string name=\"pref_category_pip\">Cửa sổ nổi (PiP)</string>\n    <string name=\"pref_enable_pip\">Bật chế độ này để dùng PiP</string>\n    <string name=\"pref_pip_episode_toasts\">Hiển thị tập khi chuyển tập trong chế độ PiP</string>\n    <string name=\"pref_pip_on_exit\">Tự động chuyển sang chế độ PiP khi thoát trình phát</string>\n    <string name=\"pref_pip_replace_with_previous\">Thay tua 10 giây bằng Tập trước</string>\n    <string name=\"pref_category_external_player\">Trình phát ngoài</string>\n    <string name=\"pref_always_use_external_player\">Luôn dùng trình phát ngoài</string>\n    <string name=\"pref_external_player_preference\">Tuỳ chọn trình phát ngoài</string>\n    <string name=\"enable_volume_brightness_gestures\">Bật cử chỉ Âm lượng và Độ sáng</string>\n    <string name=\"pref_category_player_seeking\">Lướt tua</string>\n    <string name=\"enable_horizontal_seek_gesture\">Bật cử chỉ Tua chiều ngang</string>\n    <string name=\"pref_default_intro_length\">Thời gian bỏ qua intro mặc định</string>\n    <string name=\"pref_intro_length\">Thời gian bỏ qua intro</string>\n    <string name=\"pref_skip_length\">Thời gian tua khi nhấp đúp</string>\n    <string name=\"pref_skip_disable\">Tắt</string>\n    <string name=\"pref_player_smooth_seek\">Bật tua chính xác</string>\n    <string name=\"pref_player_smooth_seek_summary\">Khi bật, tua sẽ không tập trung vào khung chính, tua sẽ chậm hơn nhưng sẽ chuẩn xác hơn</string>\n    <string name=\"pref_gpu_next_title\">Bật gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">Một video mới đang xử lí trong nền</string>\n    <string name=\"pref_debanding_title\">Khử dải màu</string>\n    <string name=\"pref_debanding_cpu\">Dùng CPU</string>\n    <string name=\"pref_debanding_gpu\">Dùng GPU</string>\n    <string name=\"pref_debanding_yuv420p\">Dùng YUV420P</string>\n    <string name=\"pref_player_audio_channels\">Kênh âm thanh</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">Tự động - Khuyến nghị</string>\n    <string name=\"pref_player_audio_channels_auto\">Tự động</string>\n    <string name=\"pref_player_audio_channels_mono\">Mono</string>\n    <string name=\"pref_player_audio_channels_stereo\">Stereo</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">Stereo đảo ngược</string>\n    <string name=\"pref_mpv_conf\">Sửa file cấu hình MPV để cài đặt chi tiết trình phát</string>\n    <string name=\"pref_reset_mpv_conf\">Đặt lại file cấu hình MPV</string>\n    <string name=\"pref_mpv_input\">Sửa file MVP input để chỉnh sửa map bàn phím</string>\n    <string name=\"video_fit_screen\">Vừa màn hình</string>\n    <string name=\"video_crop_screen\">Tràn màn hình</string>\n    <string name=\"video_stretch_screen\">Dãn theo màn hình</string>\n    <string name=\"mpv_media_title\">%1$s - T%2$s - %3$s</string>\n    <string name=\"enable_auto_play\">Tự động phát đang bật</string>\n    <string name=\"disable_auto_play\">Tự động phát đang tắt</string>\n    <string name=\"player_aniskip_dontskip\">Không skip</string>\n    <string name=\"player_aniskip_dontskip_toast\">Skip %s sau %d giây</string>\n    <string name=\"player_aniskip_skip\">bỏ qua %s giây</string>\n    <string name=\"no_next_episode\">Không tìm thấy tập tiếp theo!</string>\n    <string name=\"player_hwdec_mode\">Chế độ giải mã phần cứng</string>\n    <string name=\"screenshot_show_subs\">Bao gồm phụ đề</string>\n    <string name=\"pref_general_summary\">Ngôn ngữ ứng dụng, thông báo</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">Sapphire</string>\n    <string name=\"theme_doom\">Doom</string>\n    <string name=\"theme_matrix\">Ma trận</string>\n    <string name=\"pref_preserve_reading_position\">Lưu vị trí đang đọc ở các chương đang đọc</string>\n    <string name=\"pref_download_slots\">Số lượng tải về tối đa</string>\n    <string name=\"local_source_badge\">Trên thiết bị</string>\n    <string name=\"anime_interval_expected_update\">Tập mới dự kiến sẽ ra mắt vào %1$s, kiểm tra mỗi %2$s.</string>\n    <string name=\"anime_interval_expected_update_null\">Anime này đã hoàn thành hoặc chưa có ngày phát hành dự kiến.</string>\n    <string name=\"download_notifier_download_finish\">Tài xuống hoàn tất</string>\n    <string name=\"action_hide\">Ẩn</string>\n    <string name=\"label_all\">Tất cả</string>\n    <string name=\"label_category\">Thể loại</string>\n    <string name=\"manga_categories\">Hạng mục</string>\n    <string name=\"general_categories\">Thể loại</string>\n    <string name=\"anime_categories\">Thể loại Anime</string>\n    <string name=\"entries\">Thư viện</string>\n    <string name=\"chapters_episodes\">Chương và tập</string>\n    <string name=\"episodes\">Tập</string>\n    <string name=\"backup_settings_warning\">Cảnh báo: Sao lưu cài đặt cũng sẽ lưu trữ mật khẩu trang theo dõi quá trình của bạn, không chia sẻ tệp sao lưu này!</string>\n    <string name=\"label_manga_library\">Manga</string>\n    <string name=\"label_anime_library\">Anime</string>\n    <string name=\"label_anime\">Anime</string>\n    <string name=\"label_manga\">Manga</string>\n    <string name=\"label_recent_anime_updates\">Anime Mới Cập Nhật</string>\n    <string name=\"label_manga_sources\">Nguồn Manga</string>\n    <string name=\"label_anime_sources\">Nguồn Anime</string>\n    <string name=\"label_watched_duration\">Thời lượng đã xem</string>\n    <string name=\"label_watched_episodes\">Đã xem</string>\n    <string name=\"pref_start_screen\">Màn hình bắt đầu</string>\n    <string name=\"pref_library_manga_columns\">Số manga mỗi hàng</string>\n    <string name=\"pref_library_anime_columns\">Số anime mỗi dòng</string>\n    <string name=\"pref_bottom_nav_no_history\">Chuyển Lịch sử vào tab Thêm</string>\n    <string name=\"pref_bottom_nav_no_updates\">Chuyển Cập Nhật vào tab Thêm</string>\n    <string name=\"pref_bottom_nav_no_manga\">Chuyển Manga vào tab Thêm</string>\n    <string name=\"pref_bottom_nav_no_browse\">Chuyển Duyệt vào tab Thêm</string>\n    <string name=\"action_filter_unseen\">Bỏ đã xem</string>\n    <string name=\"action_global_manga_search\">Tìm Manga (Global)</string>\n    <string name=\"action_global_anime_search\">Tìm Anime (Global)</string>\n    <string name=\"action_sort_total_episodes\">Tổng số tập</string>\n    <string name=\"action_sort_last_seen\">Xem gần nhất</string>\n    <string name=\"action_sort_last_checked\">Kiểm tra gần nhất</string>\n    <string name=\"action_sort_latest_episode\">Tập mới nhất</string>\n    <string name=\"action_sort_last_anime_update\">Cập nhật anime mới nhất</string>\n    <string name=\"action_sort_unseen_count\">Đếm bỏ đã xem</string>\n    <string name=\"action_sort_episode_fetch_date\">Ngày kểm tra tập</string>\n    <string name=\"action_mark_as_seen\">Đánh dấu đã xem</string>\n    <string name=\"action_mark_as_unseen\">Đánh dấu chưa xem</string>\n    <string name=\"action_mark_previous_as_seen\">Đánh dấu tập trước đã xem</string>\n    <string name=\"action_play_internally\">Mở trong ứng dụng</string>\n    <string name=\"action_play_externally\">Mở ngoài ứng dụng</string>\n    <string name=\"action_download_unread\">Tải xuống chương chưa đọc</string>\n    <string name=\"action_download_unseen\">Tải xuống tập chưa xem</string>\n    <string name=\"action_bookmark_episode\">Đánh dấu tập</string>\n    <string name=\"action_remove_bookmark_episode\">Bỏ đánh dấu tập</string>\n    <string name=\"action_edit_anime_categories\">Sửa thể loại anime</string>\n    <string name=\"action_edit_manga_categories\">Sửa thể loại manga</string>\n    <string name=\"action_view_episodes\">Xem tập</string>\n    <string name=\"action_previous_episode\">Tập trước</string>\n    <string name=\"action_play\">Phát</string>\n    <string name=\"action_next_episode\">Tập tiếp theo</string>\n    <string name=\"action_screen_fit\">Chế độ vừa màn hình</string>\n    <string name=\"action_show_anime\">Hiện anime</string>\n    <string name=\"action_display_download_badge_anime\">Tập đã tải xuống</string>\n    <string name=\"action_display_local_badge_manga\">Số truyện cục bộ</string>\n    <string name=\"action_display_local_badge_anime\">Anime trên thiết bị</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">Chỉ tìm kiếm từ các nguồn manga đã ghim trong tìm Global</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">Chỉ tìm kiếm từ các nguồn anime đã ghim trong tìm Global</string>\n    <string name=\"pref_hide_in_manga_library_items\">Ẩn manga đã có trong thư viện</string>\n    <string name=\"pref_hide_in_anime_library_items\">Ẩn anime đã có trong thư viện</string>\n    <string name=\"action_order_by_episode_number\">Theo số tập</string>\n    <string name=\"action_start_download_externally\">Dùng trình tải xuống khác</string>\n    <string name=\"action_start_download_internally\">Dùng trình tải xuống của ứng dụng</string>\n    <string name=\"pref_bottom_nav_style\">Kiểu điều hướng bên dưới</string>\n    <string name=\"pref_default_home_tab_library\">Đặt màn hình khởi động là tab Manga</string>\n    <string name=\"default_manga_category\">Danh mục mặc định</string>\n    <string name=\"default_anime_category\">Thể loại anime mặc định</string>\n    <string name=\"pref_manga_library_update_categories_details\">Manga trong danh mục bị loại trừ sẽ không được cập nhật.</string>\n    <string name=\"pref_anime_library_update_categories_details\">Anime thuộc danh mục bị loại trừ sẽ không được cập nhật.</string>\n    <string name=\"unofficial_extension_message_aniyomi\">Tiện ích mở rộng này không có trong danh sách chính thức.</string>\n    <string name=\"unofficial_anime_extension_message\">Tiện ích mở rộng này không có trong danh sách chính thức.</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">Các thể loại bị loại trừ</string>\n    <string name=\"pref_remove_exclude_categories_anime\">Thể loại anime bị ngoại trừ</string>\n    <string name=\"pref_category_external_downloader\">Trình tải xuống ngoài</string>\n    <string name=\"pref_use_external_downloader\">Luôn dùng trình tải xuống ngoài cho anime</string>\n    <string name=\"pref_external_downloader_selection\">Tuỳ chọn trình tải xuống ngoài</string>\n    <string name=\"pref_download_new_episodes\">Tải xuống tập mới</string>\n    <string name=\"auto_download_while_watching\">Tự động tải xuống khi đang xem</string>\n    <string name=\"download_ahead_info_anime\">Chỉ hoạt động với các bộ có trong thư viện và nếu tập hiện tại và tập kế tiếp đã tải xuống rồi</string>\n    <string name=\"pref_track_on_add_library\">Mở menu theo dõi khi thêm vào thư viện</string>\n    <string name=\"pref_show_next_episode_airing_time\">Hiện thời gian ra mắt tập tiếp theo</string>\n    <string name=\"pref_backup_flags_summary\">Thông tin gì sẽ có trong file sao lưu</string>\n    <string name=\"pref_anime_storage_usage\">Mức sử dụng Bộ nhớ cho anime</string>\n    <string name=\"pref_manga_storage_usage\">Mức sử dụng Bộ nhớ cho manga</string>\n    <string name=\"used_cache_both\">Đã dùng cho anime: %1$s, đã dùng cho manga: %2$s</string>\n    <string name=\"pref_clear_manga_database\">Dọn dẹp cơ sở dữ liệu</string>\n    <string name=\"pref_clear_anime_database\">Xoá dữ liệu Anime</string>\n    <string name=\"pref_clear_manga_database_summary\">Xóa truyện và các chương không nằm trong thư viện</string>\n    <string name=\"pref_clear_anime_database_summary\">Xoá lịch sử của anime bạn không lưu vào thư viện</string>\n    <string name=\"anime_from_library\">Anime trong thư viện</string>\n    <string name=\"downloaded_episodes\">Tập đã tải</string>\n    <string name=\"local_manga_source\">Nguồn manga trên thiết bị</string>\n    <string name=\"local_anime_source\">Nguồn anime trên thiết bị</string>\n    <string name=\"episode_not_found\">Không tìm được tập</string>\n    <string name=\"local_invalid_episode_format\">Định dạng tập không hợp lệ</string>\n    <string name=\"unknown_studio\">Chưa rõ Studio</string>\n    <string name=\"delete_confirmation\">Bạn có chắc chắn muốn xóa \\\"%s\\\" không?</string>\n    <string name=\"delete_downloads_for_anime\">Xóa các tập đã tải xuống?</string>\n    <string name=\"snack_add_to_manga_library\">Thêm truyện vào thư viện?</string>\n    <string name=\"snack_add_to_anime_library\">Thêm anime vào thư viện?</string>\n    <string name=\"display_mode_episode\">Tập %1$s</string>\n    <string name=\"episode_downloading_progress\">Đang tải xuống (%d%%)</string>\n    <string name=\"download_error\">Lỗi</string>\n    <string name=\"download_paused\">Đã tạm dừng</string>\n    <string name=\"show_episode_number\">Số tập</string>\n    <string name=\"sort_by_episode_number\">Theo số tập</string>\n    <string name=\"download_unseen\">Chưa xem</string>\n    <string name=\"confirm_delete_episodes\">Bạn có chắc chắn muốn xóa các tập đã chọn không?</string>\n    <string name=\"also_set_episode_settings_for_library\">Cũng áp dụng cho tất cả anime trong thư viện của tôi</string>\n    <string name=\"no_episodes_error\">Không tìm thấy tập nào</string>\n    <string name=\"watching\">Đang xem</string>\n    <string name=\"currently_reading\">Hiện đang đọc</string>\n    <string name=\"currently_watching\">Hiện đang xem</string>\n    <string name=\"plan_to_watch\">Dự định xem</string>\n    <string name=\"not_interesting\">Không quan tâm</string>\n    <string name=\"want_to_read\">Muốn đọc</string>\n    <string name=\"want_to_watch\">Muốn xem</string>\n    <string name=\"repeating_anime\">Đang xem lại</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">Thao tác này sẽ xóa ngày xem của tập này. Bạn có chắc không?</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">Đặt lại mọi tập cho anime này</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">Đã xem: %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">Đã xem: %1$s</string>\n    <string name=\"recent_anime_time\">Tập %1$s - %2$s</string>\n    <string name=\"video_list_empty_error\">Không tìm thấy video</string>\n    <string name=\"notification_new_episodes\">Tìm thấy tập mới</string>\n    <string name=\"information_no_recent_anime\">Không xem gì gần đây</string>\n    <string name=\"episode_settings_updated\">Cập nhật cài đặt gốc cho tập</string>\n    <string name=\"download_notifier_download_paused_chapters\">Tải xuống đã tạm dừng</string>\n    <string name=\"download_notifier_download_paused_episodes\">Tạm dừng tải tập xuống</string>\n    <string name=\"channel_new_chapters_episodes\">Cập nhật chương</string>\n    <string name=\"label_storage\">Bộ nhớ</string>\n    <string name=\"label_history\">Manga</string>\n    <string name=\"label_anime_history\">Anime</string>\n    <string name=\"label_updates\">Manga</string>\n    <string name=\"label_anime_updates\">Anime</string>\n    <string name=\"action_change_intro_length\">Thay đổi độ dài intro</string>\n    <string name=\"notification_episodes_single\">Tập %1$s</string>\n    <string name=\"notification_episodes_single_and_more\">Tập %1$s và %2$d tập khác</string>\n    <string name=\"notification_episodes_multiple\">Tập %1$s</string>\n    <string name=\"episode_settings\">Tuỳ chỉnh tập</string>\n    <string name=\"pref_backup_flags\">Tùy chọn sao lưu</string>\n    <string name=\"label_manga_extensions\">Manga Extensions</string>\n    <string name=\"label_anime_extensions\">Anime Extensions</string>\n    <string name=\"label_migration_manga\">Di chuyển Manga</string>\n    <string name=\"label_migration_anime\">Di chuyển Anime</string>\n    <string name=\"settings\">Cài đặt</string>\n    <string name=\"copied_video_link_to_clipboard\">Đã sao chép liên kết chất lượng video vào bảng nhớ tạm</string>\n    <string name=\"choose_video_quality\">Chọn chất lượng video:</string>\n    <string name=\"extension_settings\">Cài đặt Extension</string>\n    <string name=\"theme_cottoncandy\">Cotton Candy</string>\n    <string name=\"theme_mocha\">Mocha</string>\n    <string name=\"pref_episode_swipe_end\">Hành động cho vuốt sang phải</string>\n    <string name=\"pref_episode_swipe_start\">Hành động cho vuốt sang trái</string>\n    <string name=\"pref_category_hide_hidden\">Ẩn danh mục ẩn khỏi danh mục và mục bộ nhớ</string>\n    <string name=\"pref_update_anime_release_grace_period\">Thời gian ân hạn phát hành anime dự kiến</string>\n    <string name=\"data_saver_exclude\">Loại trừ khỏi trình tiết kiệm dữ liệu</string>\n    <string name=\"data_saver_stop_exclude\">Dừng loại trừ khỏi trình tiết kiệm dữ liệu</string>\n    <string name=\"data_saver\">Trình tiết kiệm dữ liệu</string>\n    <string name=\"data_saver_summary\">Nén hình ảnh trước khi tải xuống hoặc tải vào trình đọc</string>\n    <string name=\"data_saver_downloader\">Sử dụng trình tiết kiệm dữ liệu trong trình tải xuống</string>\n    <string name=\"data_saver_ignore_jpeg\">Bỏ qua ảnh Jpeg</string>\n    <string name=\"data_saver_ignore_gif\">Bỏ qua ảnh động Gif</string>\n    <string name=\"data_saver_image_quality\">Chất lượng hình ảnh</string>\n    <string name=\"data_saver_image_quality_summary\">Giá trị cao hơn có nghĩa là phần trăm chất lượng hình ảnh được lưu cao hơn nhưng cũng có nghĩa là kích thước tệp lớn hơn, 80 phần trăm là mức trung bình tốt giữa kích thước tệp và chất lượng hình ảnh</string>\n    <string name=\"data_saver_image_format\">Nén thành Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Kích thước tệp Jpeg nhỏ hơn đáng kể so với Webp (có nghĩa là lưu được nhiều dữ liệu hơn), nhưng nó cũng khiến hình ảnh mất chất lượng nhiều hơn.\n\\nHiện đang nén thành Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Kích thước tệp Jpeg nhỏ hơn đáng kể so với Webp (có nghĩa là lưu được nhiều dữ liệu hơn), nhưng nó cũng khiến hình ảnh mất chất lượng nhiều hơn.\n\\nHiện đang nén thành Webp</string>\n    <string name=\"data_saver_color_bw\">Chuyển đổi sang Đen Trắng</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero (yêu cầu máy chủ Bandwidth Hero Proxy)</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Máy chủ Bandwidth Hero Proxy</string>\n    <string name=\"data_saver_server_summary\">Điền url máy chủ Bandwidth Hero Proxy tại đây</string>\n    <string name=\"download_slots_info\">Sẽ chỉ tải xuống đồng thời từ các nguồn tự lưu trữ hoặc không được kiểm soát</string>\n    <string name=\"unseen\">Bỏ đã xem</string>\n    <string name=\"label_manga_extension_repos\">Repo Manga Extension</string>\n    <string name=\"label_anime_extension_repos\">Repo Anime Extension</string>\n    <string name=\"onboarding_storage_action_create_folder\">Tạo thư mục Aniyomi mặc định</string>\n    <string name=\"download_speed_limit\">Giới hạn tốc độ tải xuống</string>\n    <string name=\"download_speed_limit_hint\">Đặt thành 0 để tắt giới hạn tốc độ.</string>\n    <string name=\"action_display_unseen_badge\">Tập chưa xem</string>\n    <string name=\"action_stop\">Dừng</string>\n    <string name=\"action_continue\">Tiếp tục</string>\n    <string name=\"manga\">Manga</string>\n    <string name=\"pref_behavior\">Biểu hiện chương</string>\n    <string name=\"action_add_repo_message\">Thêm các repo vào %s. Đây là nơi nhập các URL có kết thúc như \\\"index.min.json\\\".</string>\n    <string name=\"download_ahead_info\">Chỉ áp dụng với chương/tập hiện tại và các chương/tập tiếp theo đã tải xuống.</string>\n    <string name=\"non_library_settings\">Tất cả mục đã đọc/xem</string>\n    <string name=\"action_sort_last_manga_update\">Manga mới cập nhật</string>\n    <string name=\"action_show_manga\">Hiện Manga</string>\n    <string name=\"action_display_show_continue_reading_button\">Nút tiếp tục đọc/tiếp tục xem</string>\n    <string name=\"pref_update_only_completely_read\">Bỏ qua các mục chưa xem/ chưa đọc</string>\n    <string name=\"pref_category_delete_chapters\">Xoá chương/tập</string>\n    <string name=\"pref_remove_after_marked_as_read\">Sau khi đánh dấu thủ công là đã đọc/đã xem</string>\n    <string name=\"pref_remove_after_read\">Tự động xóa sau khi đọc/xem</string>\n    <string name=\"pref_remove_bookmarked_chapters\">Cho phép xóa các chương/các tập đã đánh dấu</string>\n    <string name=\"pref_auto_update_manga_sync\">Cập nhật tiến độ sau khi đọc/xem</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">Cập nhật tiến độ khi được đánh dấu là đã đọc</string>\n    <string name=\"pref_clear_chapter_cache\">Dọn dẹp bộ nhớ đệm của chương/tập</string>\n    <string name=\"pref_auto_clear_chapter_cache\">Xóa bộ nhớ đệm của chương/tập mỗi lần mở ứng dụng</string>\n    <string name=\"clear_database_confirmation\">Bạn có chắc không? Các chương/tập đã đọc/xem và tiến độ đọc/xem của các mục không nằm trong thư viện sẽ bị mất</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/zh-rCN/plurals.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <plurals name=\"anime_num_episodes\">\n        <item quantity=\"other\">%1$s个剧集</item>\n    </plurals>\n    <plurals name=\"notification_episodes_generic\">\n        <item quantity=\"other\">有%1$d个新的剧集</item>\n    </plurals>\n    <plurals name=\"seconds\">\n        <item quantity=\"other\">%d秒</item>\n    </plurals>\n</resources>"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/zh-rCN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">再按一次返回键退出</string>\n    <string name=\"action_filter_started\">已开始观看/阅读</string>\n    <string name=\"action_sort_airing_time\">播放时间</string>\n    <string name=\"action_reorganize_by\">重新排序</string>\n    <string name=\"relative_time_now\">现在</string>\n    <string name=\"pref_library_summary\">分类 • 全局更新 • 章节/剧集目录左右滑动</string>\n    <string name=\"pref_library_update_show_tab_badge\">在更新中显示未看/未读数量</string>\n    <string name=\"label_player_settings\">播放器设置</string>\n    <string name=\"action_search_player_settings\">搜索播放器设置</string>\n    <string name=\"pref_player_internal\">内置播放器</string>\n    <string name=\"pref_player_internal_summary\">进度条、控制器、屏幕方向</string>\n    <string name=\"pref_progress_mark_as_seen\">在观看进度为多少时将剧集标记为已看</string>\n    <string name=\"pref_preserve_watching_position\">记住已看剧集的上次观看位置</string>\n    <string name=\"pref_category_player_orientation\">播放器方向</string>\n    <string name=\"rotation_video\">视频</string>\n    <string name=\"rotation_reverse_landscape\">翻转横屏</string>\n    <string name=\"rotation_sensor_portrait\">感应竖屏</string>\n    <string name=\"rotation_sensor_landscape\">感应横屏</string>\n    <string name=\"pref_category_controls\">控制</string>\n    <string name=\"pref_controls_allow_gestures_in_panels\">允许在面板中使用手势</string>\n    <string name=\"pref_controls_show_loading\">显示加载圆圈</string>\n    <string name=\"pref_controls_show_chapter_indicator\">显示当前章节指示器</string>\n    <string name=\"pref_controls_show_chapter_indicator_info\">仅当视频包含章节时显示</string>\n    <string name=\"pref_controls_display_volume_percentage\">以百分比形式显示音量</string>\n    <string name=\"pref_remember_brightness\">保持并切换到最近使用的亮度</string>\n    <string name=\"pref_remember_volume\">保持并切换到最近使用的音量</string>\n    <string name=\"pref_player_fullscreen\">在屏幕边栏中显示内容</string>\n    <string name=\"pref_player_hide_controls\">在启动播放器时隐藏播放器控制界面</string>\n    <string name=\"pref_show_system_bar\">显示带控件的系统状态栏</string>\n    <string name=\"pref_reduce_motion\">减少播放器动画</string>\n    <string name=\"pref_player_time_to_disappear\">隐藏播放器控制时间</string>\n    <string name=\"pref_player_time_to_disappear_summary\">%1$s 毫秒</string>\n    <string name=\"pref_panel_opacity\">面板不透明度</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">开启自动跳过</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">开启奈飞风格</string>\n    <string name=\"pref_waiting_time_aniskip\">按钮延时</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 秒</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 秒</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 秒</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 秒</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 秒</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 秒</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip 需要你在 MyAnimeList 或 Anilist 上标记进度记录后才能使用</string>\n    <string name=\"pref_enable_aniskip\">开启 AniSkip</string>\n    <string name=\"pref_category_pip\">小窗模式</string>\n    <string name=\"pref_enable_pip\">开启小窗模式</string>\n    <string name=\"pref_pip_episode_toasts\">小窗模式下切换剧集时显示剧集信息</string>\n    <string name=\"pref_pip_on_exit\">在退出播放器时自动使用小窗播放</string>\n    <string name=\"pref_pip_replace_with_previous\">将快进 10 秒选项替换为上一集</string>\n    <string name=\"pref_category_external_player\">外置播放器</string>\n    <string name=\"pref_always_use_external_player\">总是使用外部播放器</string>\n    <string name=\"pref_external_player_preference\">外部播放器首选项</string>\n    <string name=\"pref_player_gestures\">手势</string>\n    <string name=\"pref_player_gestures_summary\">划动、双击、媒体控制</string>\n    <string name=\"pref_category_player_sliders\">滑 块</string>\n    <string name=\"enable_volume_brightness_gestures\">开启音量和亮度手势</string>\n    <string name=\"pref_controls_swap_vol_brightness\">交换音量和亮度滑块</string>\n    <string name=\"pref_category_player_seeking\">定位</string>\n    <string name=\"enable_horizontal_seek_gesture\">开启左右滑动定位手势</string>\n    <string name=\"pref_show_seekbar\">搜索时显示搜索栏</string>\n    <string name=\"pref_default_intro_length\">默认跳过开头的时长</string>\n    <string name=\"pref_intro_length\">跳过开头的时长</string>\n    <string name=\"pref_skip_length\">双击时快进的时长</string>\n    <string name=\"pref_skip_disable\">禁用</string>\n    <string name=\"pref_player_smooth_seek\">开启进度条精准调节</string>\n    <string name=\"pref_player_smooth_seek_summary\">开启后，定位将不会关注关键帧，使其更慢但更精确</string>\n    <string name=\"pref_category_double_tap\">双击</string>\n    <string name=\"pref_left_double_tap\">双击（屏幕左侧）</string>\n    <string name=\"pref_center_double_tap\">双击（屏幕中心）</string>\n    <string name=\"pref_right_double_tap\">双击（屏幕右侧）</string>\n    <string name=\"pref_double_tap_info\">设置自定义点击手势后，可在 input.conf 找到配置文件，代码0x10001代表屏幕左侧，0x10002代表屏幕中心，0x10003代表屏幕右侧。</string>\n    <string name=\"single_action_none\">无</string>\n    <string name=\"single_action_seek\">划动定位</string>\n    <string name=\"single_action_playpause\">播放/暂停</string>\n    <string name=\"single_action_switch\">切换剧集</string>\n    <string name=\"single_action_custom\">自定义</string>\n    <string name=\"pref_category_media_controls\">媒体控制</string>\n    <string name=\"pref_media_previous\">上一集</string>\n    <string name=\"pref_media_playpause\">播放/暂停</string>\n    <string name=\"pref_media_next\">下一集</string>\n    <string name=\"pref_media_info\">设置自定义媒体控制器后，可在 input.conf 找到配置文件，代码0x10004代表上一集，0x10002代表播放/暂停，0x10003代表下一集。</string>\n    <string name=\"pref_player_decoder\">解码器</string>\n    <string name=\"pref_player_decoder_summary\">硬解、像素格式、去色带</string>\n    <string name=\"pref_try_hw\">尝试硬解</string>\n    <string name=\"pref_gpu_next_title\">开启 GPU-Next</string>\n    <string name=\"pref_gpu_next_subtitle\">一种新的视频渲染后端方式</string>\n    <string name=\"pref_debanding_title\">去除色带</string>\n    <string name=\"pref_debanding_none\">无</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_use_yuv420p_title\">使用 VUV420P 像素格式</string>\n    <string name=\"pref_use_yuv420p_subtitle\">可修复某些视频解码时的黑屏问题，也可提高性能但会降低画质</string>\n    <string name=\"pref_player_subtitle\">字幕</string>\n    <string name=\"pref_player_subtitle_summary\">语言偏好、白名单、黑名单</string>\n    <string name=\"pref_player_subtitle_lang\">语言偏好</string>\n    <string name=\"pref_player_subtitle_lang_info\">在有多个字幕的视频中选择默认的字幕语言，双字或三字语言代码均可，多个语言值以逗号分开。</string>\n    <string name=\"pref_player_subtitle_whitelist\">白名单</string>\n    <string name=\"pref_player_subtitle_whitelist_info\">字幕白名单，如果设置了白名单，则将使用包含白名单的第一个字幕，多个语言值以逗号分开。</string>\n    <string name=\"pref_player_subtitle_blacklist\">黑名单</string>\n    <string name=\"pref_player_subtitle_blacklist_info\">字幕黑名单，如果设置了黑名单，所有包含黑名单的字幕都将被过滤，多个语言值以逗号分开。</string>\n    <string name=\"pref_player_audio\">音频</string>\n    <string name=\"pref_player_audio_summary\">偏好语言、音调校正、声道</string>\n    <string name=\"pref_player_audio_lang\">语言偏好</string>\n    <string name=\"pref_player_audio_lang_info\">要在具有多个音频流的视频上默认选择音频语言，则可以使用两个或三个字母的语言代码。多个值可以用逗号分隔。</string>\n    <string name=\"pref_player_audio_pitch_correction\">启用音频音高校正</string>\n    <string name=\"pref_player_audio_pitch_correction_summary\">防止音频在较快的速度下变为高音调，在较慢的速度下变为低音调</string>\n    <string name=\"pref_player_audio_channels\">音频声道</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">自动保护</string>\n    <string name=\"pref_player_audio_channels_auto\">自动选择</string>\n    <string name=\"pref_player_audio_channels_mono\">单声道</string>\n    <string name=\"pref_player_audio_channels_stereo\">立体声</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">反转立体声</string>\n    <string name=\"pref_player_audio_boost_cap\">音量提升上限</string>\n    <string name=\"pref_player_custom_button\">自定义按钮</string>\n    <string name=\"pref_player_custom_button_summary\">使用自定义按钮执行 lua 代码</string>\n    <string name=\"pref_player_custom_button_header\">编辑自定义按钮</string>\n    <string name=\"pref_player_custom_button_guide\">自定义按钮指南</string>\n    <string name=\"pref_player_custom_button_empty\">您没有自定义按钮。点按加号按钮以创建自定义按钮。</string>\n    <string name=\"pref_player_custom_button_add\">添加按钮</string>\n    <string name=\"pref_player_custom_button_edit\">编辑按钮</string>\n    <string name=\"pref_player_custom_button_title\">标题</string>\n    <string name=\"pref_player_custom_button_error_exists\">按钮已存在！</string>\n    <string name=\"pref_player_custom_button_content\">Lua 代码</string>\n    <string name=\"pref_player_custom_button_content_long\">Lua 代码（长按）</string>\n    <string name=\"pref_player_custom_button_optional\">（可选）</string>\n    <string name=\"pref_player_custom_button_delete\">删除按钮</string>\n    <string name=\"pref_player_custom_button_delete_confirm\">是否要删除按钮 %s？</string>\n    <string name=\"pref_player_custom_button_startup\">启动时</string>\n    <string name=\"pref_player_custom_button_id\">(ID: %d)</string>\n    <string name=\"pref_player_advanced\">高级</string>\n    <string name=\"pref_player_advanced_summary\">用户脚本、mpv.conf、input.conf</string>\n    <string name=\"pref_mpv_conf\">编辑 MPV 配置文件以进一步调节播放器相关设置</string>\n    <string name=\"pref_reset_mpv_conf\">重置 MPV 设置</string>\n    <string name=\"pref_mpv_input\">为键盘映射配置编辑 MPV 输入文档</string>\n    <string name=\"video_fit_screen\">适应</string>\n    <string name=\"video_crop_screen\">裁剪</string>\n    <string name=\"video_stretch_screen\">拉伸</string>\n    <string name=\"mpv_media_title\">%1$s - %2$s集 - %3$s</string>\n    <string name=\"toast_sleep_timer_ended\">睡眠定时器结束</string>\n    <string name=\"player_generic_unit_ms\">毫秒</string>\n    <string name=\"numeric_chooser_value_too_big\">值太大</string>\n    <string name=\"numeric_chooser_value_too_small\">值太小</string>\n    <string name=\"enable_auto_play\">自动连播已开启</string>\n    <string name=\"disable_auto_play\">自动连播已关闭</string>\n    <string name=\"player_aniskip_dontskip\">不跳过</string>\n    <string name=\"player_aniskip_dontskip_toast\">%s 将在 %d 秒内跳过</string>\n    <string name=\"player_aniskip_skip\">已跳过 %s</string>\n    <string name=\"no_next_episode\">没有下一集！</string>\n    <string name=\"no_prev_episode\">未找到上一集！</string>\n    <string name=\"player_sheets_delay_set_as_default\">设为默认值</string>\n    <string name=\"player_sheets_audio_delay_title\">音频延迟</string>\n    <string name=\"player_sheets_audio_delay_audio_sound_heard\">听到声音</string>\n    <string name=\"player_sheets_audio_delay_sound_sound_spotted\">发现声音</string>\n    <string name=\"player_sheets_sub_delay_title\">字幕延迟</string>\n    <string name=\"player_sheets_sub_delay_speed\">速度</string>\n    <string name=\"player_sheets_sub_delay_delay\">延迟</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary\">主要</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_secondary\">二 次</string>\n    <string name=\"player_sheets_sub_delay_subtitle_type_primary_and_secondary\">两个</string>\n    <string name=\"player_sheets_sub_delay_subtitle_voice_heard\">听到的声音</string>\n    <string name=\"player_sheets_sub_delay_subtitle_text_seen\">看到的文本</string>\n    <string name=\"player_sheets_sub_delay_audio_sound_heard\">听到声音</string>\n    <string name=\"player_sheets_sub_delay_sound_sound_spotted\">发现声音</string>\n    <string name=\"player_sheets_sub_colors_title\">颜色</string>\n    <string name=\"player_sheets_subtitles_color_text\">文本</string>\n    <string name=\"player_sheets_subtitles_color_border\">边界</string>\n    <string name=\"player_sheets_subtitles_color_background\">背景</string>\n    <string name=\"player_sheets_sub_color_red\">红色</string>\n    <string name=\"player_sheets_sub_color_green\">绿色</string>\n    <string name=\"player_sheets_sub_color_blue\">蓝色</string>\n    <string name=\"player_sheets_sub_color_alpha\">阿尔法</string>\n    <string name=\"player_sheets_subtitles_settings_title\">字幕设置</string>\n    <string name=\"player_sheets_sub_typography_title\">字体设计</string>\n    <string name=\"player_sheets_sub_typography_font\">字体</string>\n    <string name=\"player_sheets_sub_typography_font_size\">字体大小</string>\n    <string name=\"player_sheets_sub_typography_border_style\">边框样式</string>\n    <string name=\"player_sheets_sub_typography_border_size\">边框大小</string>\n    <string name=\"player_sheets_subtitles_shadow_offset\">阴影偏移</string>\n    <string name=\"player_sheets_subtitles_border_style_outline_and_shadow\">轮廓和阴影</string>\n    <string name=\"player_sheets_subtitles_border_style_opaque_box\">不透明框</string>\n    <string name=\"player_sheets_subtitles_border_style_background_box\">背景框</string>\n    <string name=\"player_sheets_sub_misc_title\">杂项</string>\n    <string name=\"player_sheets_sub_override_ass\">覆盖 ASS/SSA 字幕</string>\n    <string name=\"player_sheets_sub_scale\">规模</string>\n    <string name=\"player_sheets_sub_position\">位置</string>\n    <string name=\"player_sheets_filters_title\">过滤</string>\n    <string name=\"player_sheets_filters_brightness\">亮度</string>\n    <string name=\"player_sheets_filters_contrast\">反差</string>\n    <string name=\"player_sheets_filters_gamma\">伽马</string>\n    <string name=\"player_sheets_filters_Saturation\">饱和</string>\n    <string name=\"player_sheets_filters_hue\">色调</string>\n    <string name=\"player_sheets_filters_warning\">某些过滤器可能无法在您当前的视频驱动程序上运行</string>\n    <string name=\"player_sheets_add_ext_audio\">添加外部音轨</string>\n    <string name=\"player_sheets_decoder_formatted\">%s (%s)</string>\n    <string name=\"player_sheets_more_title\">更多</string>\n    <string name=\"player_hwdec_mode\">解码模式</string>\n    <string name=\"pref_audio_channels\">音频通道</string>\n    <string name=\"player_sheets_stats_page_title\">默认统计信息页面</string>\n    <string name=\"player_sheets_tracks_off\">关闭</string>\n    <string name=\"player_sheets_stats_page_chip\">页面 %d</string>\n    <string name=\"player_sheets_custom_buttons_title\">自定义按钮</string>\n    <string name=\"player_seek_n_seconds\">%d 秒</string>\n    <string name=\"timer_title\">休眠定时器</string>\n    <string name=\"timer_remaining\">剩余 %s</string>\n    <string name=\"timer_picker_enter_timer\">输入持续时间</string>\n    <string name=\"timer_picker_pick_time\">选取持续时间</string>\n    <string name=\"timer_cancel_timer\">取消当前计时器</string>\n    <string name=\"player_sheets_speed_slider_label\">速度</string>\n    <string name=\"player_sheets_speed_make_default\">设为默认速度</string>\n    <string name=\"pref_audio_pitch_correction_title\">启用音频音高校正</string>\n    <string name=\"pref_audio_pitch_correction_summary\">防止音频在较快的速度下变为高音调，在较慢的速度下变为低音调</string>\n    <string name=\"player_sheets_add_ext_sub\">添加外部字幕</string>\n    <string name=\"player_sheets_subtitles_footer_secondary_sid_no_styles\">辅助字幕将没有 ASS/SSA 样式。</string>\n    <string name=\"screenshot_show_subs\">在截图中包含字幕</string>\n    <string name=\"pref_general_summary\">应用语言 • 通知</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">蓝宝石</string>\n    <string name=\"theme_doom\">腥红</string>\n    <string name=\"theme_matrix\">黑客</string>\n    <string name=\"pref_library_rows\">列表大小</string>\n    <string name=\"pref_preserve_reading_position\">记住已读章节的上次阅读位置</string>\n    <string name=\"pref_download_slots\">最大下载数</string>\n    <string name=\"custom_button_settings\">自定义按钮</string>\n    <string name=\"local_source_badge\">本地</string>\n    <string name=\"anime_interval_expected_update\">新剧集预计在%1$s后发布，每隔%2$s检查一次。</string>\n    <string name=\"anime_interval_expected_update_null\">这个漫画没有完结，或没有确定的连载日。</string>\n    <string name=\"confirm_tracker_update_anime\">确定要更新进度到第 %d 集吗？</string>\n    <string name=\"trackers_updated_summary_manga\">已将进度更新至第 %d 章</string>\n    <string name=\"trackers_updated_summary_anime\">已将进度更新至第 %d 集</string>\n    <string name=\"download_notifier_download_finish\">下载已完成</string>\n    <string name=\"action_hide\">隐藏</string>\n    <string name=\"label_all\">所有分类</string>\n    <string name=\"label_category\">所有分类</string>\n    <string name=\"manga_categories\">漫画分类</string>\n    <string name=\"general_categories\">分类</string>\n    <string name=\"anime_categories\">动画分类</string>\n    <string name=\"entries\">仓库中的作品</string>\n    <string name=\"chapters_episodes\">章节与选集</string>\n    <string name=\"episodes\">选集</string>\n    <string name=\"backup_settings_warning\">警告：备份设置的同时会存储您的跟踪码，因此不要与他人分享此备份文件！</string>\n    <string name=\"label_manga_library\">漫画</string>\n    <string name=\"label_anime_library\">动画</string>\n    <string name=\"label_anime\">动画</string>\n    <string name=\"label_manga\">漫画</string>\n    <string name=\"label_recent_anime_updates\">动画更新</string>\n    <string name=\"label_manga_sources\">漫画源</string>\n    <string name=\"label_anime_sources\">动画源</string>\n    <string name=\"label_watched_duration\">观看时长</string>\n    <string name=\"label_watched_episodes\">已看</string>\n    <string name=\"pref_start_screen\">启动界面</string>\n    <string name=\"pref_library_manga_columns\">每行漫画数目</string>\n    <string name=\"pref_library_anime_columns\">每行动画数目</string>\n    <string name=\"pref_bottom_nav_no_history\">将历史记录移至更多选项</string>\n    <string name=\"pref_bottom_nav_no_updates\">将更新移至更多选项</string>\n    <string name=\"pref_bottom_nav_no_manga\">将漫画移至更多选项</string>\n    <string name=\"pref_bottom_nav_no_browse\">将浏览移至更多选项</string>\n    <string name=\"action_filter_unseen\">未看</string>\n    <string name=\"action_global_manga_search\">全局漫画搜索</string>\n    <string name=\"action_global_anime_search\">全局动画搜索</string>\n    <string name=\"action_sort_total_episodes\">剧集数</string>\n    <string name=\"action_sort_last_seen\">最近观看</string>\n    <string name=\"action_sort_last_checked\">上次检查</string>\n    <string name=\"action_sort_latest_episode\">动画更新时间</string>\n    <string name=\"action_sort_last_anime_update\">检查动画更新时间</string>\n    <string name=\"action_sort_unseen_count\">未看集数</string>\n    <string name=\"action_sort_episode_fetch_date\">剧集获取时间</string>\n    <string name=\"action_mark_as_seen\">标记为已看</string>\n    <string name=\"action_mark_as_unseen\">标记为未看</string>\n    <string name=\"action_mark_previous_as_seen\">标记前一个为已观看</string>\n    <string name=\"action_play_internally\">使用内置播放器播放</string>\n    <string name=\"action_play_externally\">使用外置播放器播放</string>\n    <string name=\"action_download_unread\">下载未阅读章节</string>\n    <string name=\"action_download_unseen\">下载未观看剧集</string>\n    <string name=\"action_bookmark_episode\">为剧集添加书签</string>\n    <string name=\"action_remove_bookmark_episode\">为剧集删除书签</string>\n    <string name=\"action_edit_anime_categories\">编辑动画分类</string>\n    <string name=\"action_edit_manga_categories\">编辑漫画分类</string>\n    <string name=\"action_view_episodes\">查看选集</string>\n    <string name=\"action_previous_episode\">上一集</string>\n    <string name=\"action_play\">播放</string>\n    <string name=\"action_next_episode\">下一集</string>\n    <string name=\"action_screen_fit\">适应屏幕大小</string>\n    <string name=\"action_show_anime\">显示动画</string>\n    <string name=\"action_display_download_badge_anime\">已下载的剧集数</string>\n    <string name=\"action_display_local_badge_manga\">本地漫画</string>\n    <string name=\"action_display_local_badge_anime\">本地动画</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">全局搜索仅限置顶漫画源</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">全局搜索仅限置顶动画源</string>\n    <string name=\"pref_hide_in_manga_library_items\">隐藏已添加到仓库中的漫画作品</string>\n    <string name=\"pref_hide_in_anime_library_items\">隐藏已添加到仓库中的动画作品</string>\n    <string name=\"action_order_by_episode_number\">根据剧集序号</string>\n    <string name=\"action_start_download_externally\">使用外置下载器</string>\n    <string name=\"action_start_download_internally\">使用内置下载器</string>\n    <string name=\"pref_bottom_nav_style\">底部导航栏设置</string>\n    <string name=\"pref_default_home_tab_library\">将启动界面设置到漫画栏</string>\n    <string name=\"default_manga_category\">默认漫画分类</string>\n    <string name=\"default_anime_category\">默认动画分类</string>\n    <string name=\"pref_manga_library_update_categories_details\">排除优先于包含，同时属于包含和排除分类的漫画不会自动更新。</string>\n    <string name=\"pref_anime_library_update_categories_details\">排除优先于包含，同时属于包含和排除分类的动画不会自动更新。</string>\n    <string name=\"unofficial_extension_message_aniyomi\">此插件不是 Aniyomi 官方插件。</string>\n    <string name=\"unofficial_anime_extension_message\">此插件不是Aniyomi官方插件。</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">排除的漫画分类</string>\n    <string name=\"pref_remove_exclude_categories_anime\">排除的动画分类</string>\n    <string name=\"pref_category_external_downloader\">外置下载器</string>\n    <string name=\"pref_use_external_downloader\">总是在下载动画时使用外置下载器</string>\n    <string name=\"pref_external_downloader_selection\">下载器应用偏好</string>\n    <string name=\"pref_download_new_episodes\">自动下载新剧集</string>\n    <string name=\"pref_download_new_unseen_episodes_only\">跳过已看剧集</string>\n    <string name=\"auto_download_while_watching\">观看时自动下载</string>\n    <string name=\"download_ahead_info_anime\">仅对仓库中的作品有效，并且要求当前剧集和下一剧集都已下载</string>\n    <string name=\"pref_track_on_add_library\">添加到仓库时打开进度记录菜单</string>\n    <string name=\"pref_show_next_episode_airing_time\">显示下一集的播放时间</string>\n    <string name=\"pref_backup_flags_summary\">哪些信息将被包含在备份文件内</string>\n    <string name=\"pref_anime_storage_usage\">动画存储占用</string>\n    <string name=\"pref_manga_storage_usage\">漫画存储占用</string>\n    <string name=\"used_cache_both\">被动画占用：%1$s，被漫画占用：%2$s</string>\n    <string name=\"pref_clear_manga_database\">清除漫画数据库</string>\n    <string name=\"pref_clear_anime_database\">清除动画数据库</string>\n    <string name=\"pref_clear_manga_database_summary\">清除未保存在仓库中的漫画历史记录</string>\n    <string name=\"pref_clear_anime_database_summary\">清除未保存在仓库中的动画历史记录</string>\n    <string name=\"anime_from_library\">仓库里的动画</string>\n    <string name=\"downloaded_episodes\">已下载的剧集</string>\n    <string name=\"local_manga_source\">本地漫画资源</string>\n    <string name=\"local_anime_source\">本地动画资源</string>\n    <string name=\"episode_not_found\">没有剧集</string>\n    <string name=\"local_invalid_episode_format\">剧集文件格式无效</string>\n    <string name=\"unknown_studio\">未知工作室</string>\n    <string name=\"delete_confirmation\">确定删除\\\"%s\\\"？</string>\n    <string name=\"delete_downloads_for_anime\">要删除已下载的剧集吗？</string>\n    <string name=\"snack_add_to_manga_library\">要将漫画添加到仓库吗？</string>\n    <string name=\"snack_add_to_anime_library\">要将动画添加至仓库吗？</string>\n    <string name=\"display_mode_episode\">第 %1$s 集</string>\n    <string name=\"episode_downloading_progress\">下载中（%d%%）</string>\n    <string name=\"download_error\">错误</string>\n    <string name=\"download_paused\">下载已暂停</string>\n    <string name=\"show_episode_number\">剧集序号</string>\n    <string name=\"sort_by_episode_number\">根据剧集序号排序</string>\n    <string name=\"download_unseen\">未看</string>\n    <string name=\"confirm_delete_episodes\">确定要删除选中的剧集吗？</string>\n    <string name=\"also_set_episode_settings_for_library\">同时应用于仓库中的所有动画</string>\n    <string name=\"no_episodes_error\">没有剧集</string>\n    <string name=\"watching\">在看</string>\n    <string name=\"currently_reading\">当前在读</string>\n    <string name=\"currently_watching\">当前在看</string>\n    <string name=\"plan_to_watch\">想看</string>\n    <string name=\"not_interesting\">不感兴趣</string>\n    <string name=\"want_to_read\">想读</string>\n    <string name=\"want_to_watch\">想看</string>\n    <string name=\"repeating_anime\">重看</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">这将会移除这一集的观看日期。确定吗？</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">重置此动画所有剧集</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">观看进度： %1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">观看进度：%1$s</string>\n    <string name=\"recent_anime_time\">第 %1$s 集- %2$s</string>\n    <string name=\"video_list_empty_error\">没有视频</string>\n    <string name=\"notification_new_episodes\">发现新的剧集</string>\n    <string name=\"information_no_recent_anime\">暂无观看记录</string>\n    <string name=\"episode_settings_updated\">已更新默认剧集设置</string>\n    <string name=\"download_notifier_download_paused_chapters\">章节下载已暂停</string>\n    <string name=\"download_notifier_download_paused_episodes\">剧集下载已暂停</string>\n    <string name=\"channel_new_chapters_episodes\">章节/剧集更新</string>\n    <string name=\"label_storage\">分类存储占用</string>\n    <string name=\"label_history\">漫画</string>\n    <string name=\"label_anime_history\">动画</string>\n    <string name=\"label_updates\">漫画</string>\n    <string name=\"label_anime_updates\">动画</string>\n    <string name=\"action_change_intro_length\">更改跳过开头时间</string>\n    <string name=\"notification_episodes_single\">第 %1$s 集</string>\n    <string name=\"notification_episodes_single_and_more\">第 %1$s 集及另外 %2$d 集</string>\n    <string name=\"notification_episodes_multiple\">第 %1$s 集</string>\n    <string name=\"episode_settings\">剧集设置</string>\n    <string name=\"pref_backup_flags\">备份设置</string>\n    <string name=\"label_manga_extensions\">漫画插件</string>\n    <string name=\"label_anime_extensions\">动画插件</string>\n    <string name=\"label_migration_manga\">漫画迁移</string>\n    <string name=\"label_migration_anime\">动画迁移</string>\n    <string name=\"settings\">设置</string>\n    <string name=\"copied_video_link_to_clipboard\">已将视频画质链接复制到剪贴板</string>\n    <string name=\"choose_video_quality\">选择画质：</string>\n    <string name=\"extension_settings\">插件设置</string>\n    <string name=\"theme_cottoncandy\">棉花糖</string>\n    <string name=\"theme_mocha\">摩卡</string>\n    <string name=\"pref_episode_swipe_end\">向右滑动操作</string>\n    <string name=\"pref_episode_swipe_start\">向左滑动操作</string>\n    <string name=\"pref_category_hide_hidden\">将分类及分类存储占用中的隐藏分类完全隐藏</string>\n    <string name=\"pref_update_anime_release_grace_period\">预期动画播出截止时间</string>\n    <string name=\"data_saver_exclude\">从流量节省程序中排除</string>\n    <string name=\"data_saver_stop_exclude\">停止从流量节省程序中排除</string>\n    <string name=\"data_saver\">流量节省程序</string>\n    <string name=\"data_saver_summary\">在阅读器下载或加载图片前压缩图片</string>\n    <string name=\"data_saver_downloader\">在下载器中开启流量节省程序</string>\n    <string name=\"data_saver_ignore_jpeg\">忽略 Jpeg 图片</string>\n    <string name=\"data_saver_ignore_gif\">忽略 Gif 动图</string>\n    <string name=\"data_saver_image_quality\">图片质量</string>\n    <string name=\"data_saver_image_quality_summary\">数字越高代表存储的图片质量越好，同时文件会变大，80% 是控制文件大小和图片质量之间不错的中间数</string>\n    <string name=\"data_saver_image_format\">压缩为 Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Jpeg 文件大小比 Webp 更小 （可以保存更多资料），但它会使图片损失更多质量。\n\\n目前压缩为 Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Jpeg 文件大小比 Webp 更小 （可以保存更多资料），但它会使图片损失更多质量。\n\\n目前压缩为 Webp</string>\n    <string name=\"data_saver_color_bw\">转换为黑白图片</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero（需要 Bandwidth Hero 代理服务器）</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero 代理服务器</string>\n    <string name=\"data_saver_server_summary\">在此处输入 Bandwidth Hero 代理服务器地址</string>\n    <string name=\"download_slots_info\">仅同时从自建或无限制资源下载</string>\n    <string name=\"unseen\">未看</string>\n    <string name=\"label_manga_extension_repos\">漫画插件仓库</string>\n    <string name=\"label_anime_extension_repos\">动画插件仓库</string>\n    <string name=\"onboarding_storage_action_create_folder\">创建默认 Aniyomi 文件夹</string>\n    <string name=\"download_speed_limit\">限速下载</string>\n    <string name=\"download_speed_limit_hint\">归零则取消限速。</string>\n    <string name=\"action_display_unseen_badge\">未观看剧集</string>\n    <string name=\"action_stop\">暂停</string>\n    <string name=\"action_continue\">继续</string>\n    <string name=\"manga\">漫画</string>\n    <string name=\"pref_behavior\">章节行为</string>\n    <string name=\"action_add_repo_message\">在 %s 中添加仓库，输入的网址结尾应为 \\\"index.min.json\\\" 。</string>\n    <string name=\"download_ahead_info\">要求当前章节/剧集和下一章/集都已下载。</string>\n    <string name=\"non_library_settings\">所有已读/看的作品</string>\n    <string name=\"action_sort_last_manga_update\">最新漫画更新</string>\n    <string name=\"action_show_manga\">显示作品</string>\n    <string name=\"action_display_show_continue_reading_button\">继续观看/阅读按钮</string>\n    <string name=\"pref_update_only_completely_read\">跳过有未看剧集/未读章节的作品</string>\n    <string name=\"pref_category_delete_chapters\">删除章节/剧集</string>\n    <string name=\"pref_remove_after_marked_as_read\">手动标记为已读/已看后</string>\n    <string name=\"pref_remove_after_read\">阅读/观看完自动删除</string>\n    <string name=\"pref_remove_bookmarked_chapters\">允许删除添加了书签的章节/剧集</string>\n    <string name=\"pref_auto_update_manga_sync\">阅读/观看后更新进度</string>\n    <string name=\"pref_auto_update_manga_on_mark_read\">标记为已读/已看时更新进度</string>\n    <string name=\"pref_clear_chapter_cache\">清除章节和剧集缓存</string>\n    <string name=\"pref_auto_clear_chapter_cache\">启动时清除章节和剧集缓存</string>\n    <string name=\"clear_database_confirmation\">已完成的和未添加到库中的作品的进度都将会丢失，你确定吗？</string>\n    <string name=\"pref_incognito_mode_summary\">暂停历史记录</string>\n    <string name=\"manga_from_library\">库中的漫画</string>\n    <string name=\"also_set_chapter_settings_for_library\">同时应用到库中的所有漫画</string>\n    <string name=\"dialog_with_checkbox_reset\">重置此漫画的所有章节</string>\n    <string name=\"download_insufficient_space\">存储空间不足，无法下载</string>\n    <string name=\"download_queue_size_warning\">警告：批量下载可能导致插件变慢，甚至会使站点屏蔽 Aniyomi。点击了解详情。</string>\n    <string name=\"pref_invalidate_download_cache_summary\">强制重新扫描已下载的章节和剧集</string>\n    <string name=\"label_player\">播放器</string>\n    <string name=\"pref_player_settings_summary\">内置播放器，手势，解码器，字幕</string>\n    <string name=\"pref_hosters\">主机提供商</string>\n    <string name=\"pref_hosters_show_failure\">显示失效的主机提供商</string>\n    <string name=\"pref_hosters_show_empty\">显示空的主机提供商</string>\n    <string name=\"pref_disable_aniskip_chapter\">如果视频已经包含章节，请禁用 AniSkip</string>\n    <string name=\"pref_player_subtitle_invalid_lang\">无效代码：“%s”</string>\n    <string name=\"pref_player_editor\">脚本编辑器</string>\n    <string name=\"pref_player_editor_summary\">编辑和创建新脚本和脚本选项</string>\n    <string name=\"pref_player_editor_script\">脚本</string>\n    <string name=\"pref_player_editor_script_opts\">脚本选项</string>\n    <string name=\"pref_player_no_items\">目录中没有项目。点击加号按钮添加新文件。</string>\n    <string name=\"editor_unsaved_progress\">有更改还未保存，您确定要返回吗？</string>\n    <string name=\"editor_save_error\">无法保存文件</string>\n    <string name=\"editor_save_success\">文件已保存</string>\n    <string name=\"editor_action_rename\">重命名文件</string>\n    <string name=\"editor_action_delete\">删除文件</string>\n    <string name=\"editor_file_already_exists\">文件已存在</string>\n    <string name=\"editor_invalid_filename\">无效文件名</string>\n    <string name=\"editor_create_file\">创建文件</string>\n    <string name=\"editor_edit_file\">编辑文件名</string>\n    <string name=\"editor_filename\">文件名</string>\n    <string name=\"editor_create_error\">无法创建文件</string>\n    <string name=\"editor_rename_error\">无法重命名文件</string>\n    <string name=\"editor_delete_error\">无法删除文件</string>\n    <string name=\"editor_delete_file\">删除文件</string>\n    <string name=\"editor_delete_file_confirmation\">您确定要删除文件“%s”吗？</string>\n    <string name=\"pref_mpv_user_files\">使用用户 MPV 文件</string>\n    <string name=\"pref_mpv_user_files_summary\">使用 mpv-config 目录中的文件</string>\n    <string name=\"player_skip_action\">跳过 %1$s</string>\n    <string name=\"player_intro_skipped\">已跳过 %1$s</string>\n    <string name=\"player_chapter_type_opening\">片头</string>\n    <string name=\"player_chapter_type_ending\">片尾</string>\n    <string name=\"no_available_videos\">没有可用的视频</string>\n    <string name=\"no_episode_loaded\">未加载任何剧集</string>\n    <string name=\"player_sheets_track_delay\">延迟</string>\n    <string name=\"player_sheets_track_palette\">调色板</string>\n    <string name=\"player_hoster_tap_to_load\">点击加载视频</string>\n    <string name=\"player_hoster_failed\">无法加载视频</string>\n    <string name=\"player_sheets_qualities_title\">画质</string>\n    <string name=\"player_sheets_chapters_title\">章节</string>\n    <string name=\"type\">类型</string>\n    <string name=\"pref_behavior_episode\">剧集行为</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen\">将重复的已看剧集标记为已看</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_existing\">看完一集后</string>\n    <string name=\"pref_mark_duplicate_seen_episode_seen_new\">获取新剧集后</string>\n    <string name=\"pref_category_intro_skip\">跳过片头/片尾</string>\n    <string name=\"pref_enable_intro_skip\">启用跳过片头/片尾</string>\n    <string name=\"player_chapter_type_recap\">概览</string>\n    <string name=\"player_chapter_type_mixedop\">混合播放</string>\n    <string name=\"action_display_show_continue_watching_button\">继续观看按钮</string>\n    <string name=\"action_display_grid_mode\">网格显示模式</string>\n    <string name=\"display_mode_season\">第 %1$s 季</string>\n</resources>\n"
  },
  {
    "path": "i18n-aniyomi/src/commonMain/moko-resources/zh-rTW/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"confirm_exit\">再按一次以離開</string>\n    <string name=\"action_filter_started\">啟用</string>\n    <string name=\"action_sort_airing_time\">播放時間</string>\n    <string name=\"action_reorganize_by\">重新排序</string>\n    <string name=\"relative_time_now\">現在</string>\n    <string name=\"pref_library_summary\">類別、全域更新、章節/劇集滑動</string>\n    <string name=\"pref_library_update_show_tab_badge\">在「新刊」導覽圖示上標記未看/未讀章數</string>\n    <string name=\"pref_progress_mark_as_seen\">要在何時標記該集為已看</string>\n    <string name=\"pref_preserve_watching_position\">保留已看集數的進度</string>\n    <string name=\"pref_category_player_orientation\">方向</string>\n    <string name=\"rotation_reverse_landscape\">橫向反轉</string>\n    <string name=\"rotation_sensor_portrait\">豎向感測器</string>\n    <string name=\"rotation_sensor_landscape\">橫向感測器</string>\n    <string name=\"pref_remember_brightness\">記住並切換到上次使用的亮度</string>\n    <string name=\"pref_remember_volume\">記住並切換至上次使用的音量</string>\n    <string name=\"pref_player_fullscreen\">顯示切割區內容</string>\n    <string name=\"pref_player_hide_controls\">打開播放器時隱藏播放器控制</string>\n    <string name=\"pref_enable_auto_skip_ani_skip\">啟用自動跳過</string>\n    <string name=\"pref_enable_netflix_style_aniskip\">啟用 Netflix 風格</string>\n    <string name=\"pref_waiting_time_aniskip\">按鈕逾時</string>\n    <string name=\"pref_waiting_time_aniskip_5\">5 秒</string>\n    <string name=\"pref_waiting_time_aniskip_6\">6 秒</string>\n    <string name=\"pref_waiting_time_aniskip_7\">7 秒</string>\n    <string name=\"pref_waiting_time_aniskip_8\">8 秒</string>\n    <string name=\"pref_waiting_time_aniskip_9\">9 秒</string>\n    <string name=\"pref_waiting_time_aniskip_10\">10 秒</string>\n    <string name=\"pref_category_player_aniskip_info\">AniSkip 需要使用 MAL 或 Anilist 追蹤動畫才能運作</string>\n    <string name=\"pref_enable_aniskip\">啟用 AniSkip</string>\n    <string name=\"pref_category_pip\">畫中畫 (PiP)</string>\n    <string name=\"pref_enable_pip\">啟用畫中畫模式</string>\n    <string name=\"pref_pip_episode_toasts\">在畫中畫模式下切換集數時顯示劇集資訊</string>\n    <string name=\"pref_pip_on_exit\">在退出播放器時自動切換到畫中畫模式</string>\n    <string name=\"pref_pip_replace_with_previous\">將跳過10秒選項替換為上一集</string>\n    <string name=\"pref_category_external_player\">外部播放器</string>\n    <string name=\"pref_always_use_external_player\">始終使用外部播放器</string>\n    <string name=\"pref_external_player_preference\">外部播放器偏好</string>\n    <string name=\"enable_volume_brightness_gestures\">啟用音量和亮度手勢</string>\n    <string name=\"pref_category_player_seeking\">尋找</string>\n    <string name=\"enable_horizontal_seek_gesture\">啟用水平定位手勢</string>\n    <string name=\"pref_default_intro_length\">預設跳過開頭時長</string>\n    <string name=\"pref_intro_length\">跳過開頭時長</string>\n    <string name=\"pref_skip_length\">雙擊可跳過的時長</string>\n    <string name=\"pref_skip_disable\">停用</string>\n    <string name=\"pref_player_smooth_seek\">啟用播放器精確搜尋</string>\n    <string name=\"pref_player_smooth_seek_summary\">啟用時，搜尋不會專注於關鍵幀，導致搜尋速度較慢但更精確</string>\n    <string name=\"pref_gpu_next_title\">啟用 gpu-next</string>\n    <string name=\"pref_gpu_next_subtitle\">一個新的影片渲染後端</string>\n    <string name=\"pref_debanding_title\">去除色帶</string>\n    <string name=\"pref_debanding_cpu\">CPU</string>\n    <string name=\"pref_debanding_gpu\">GPU</string>\n    <string name=\"pref_debanding_yuv420p\">YUV420P</string>\n    <string name=\"pref_player_audio_channels\">音訊頻道</string>\n    <string name=\"pref_player_audio_channels_auto_safe\">自動安全</string>\n    <string name=\"pref_player_audio_channels_auto\">自動</string>\n    <string name=\"pref_player_audio_channels_mono\">單聲道</string>\n    <string name=\"pref_player_audio_channels_stereo\">立體聲</string>\n    <string name=\"pref_player_audio_channels_reverse_stereo\">反向立體聲</string>\n    <string name=\"pref_mpv_conf\">編輯 MPV 設定檔以進一步設定播放器</string>\n    <string name=\"pref_reset_mpv_conf\">重置 MPV 設定檔</string>\n    <string name=\"pref_mpv_input\">編輯 MPV 輸入文件以進行鍵盤映射配置</string>\n    <string name=\"video_fit_screen\">適應螢幕</string>\n    <string name=\"video_crop_screen\">裁切至螢幕</string>\n    <string name=\"video_stretch_screen\">拉伸至螢幕</string>\n    <string name=\"mpv_media_title\">%1$s - %2$s集 - %3$s</string>\n    <string name=\"enable_auto_play\">自動播放已開啟</string>\n    <string name=\"disable_auto_play\">自動播放已關閉</string>\n    <string name=\"player_aniskip_dontskip\">不要跳過</string>\n    <string name=\"player_aniskip_dontskip_toast\">跳過 %s 在 %d 秒後</string>\n    <string name=\"player_aniskip_skip\">%s 已跳過</string>\n    <string name=\"no_next_episode\">未找到下一集！</string>\n    <string name=\"player_hwdec_mode\">硬體解碼模式</string>\n    <string name=\"screenshot_show_subs\">包含字幕</string>\n    <string name=\"pref_general_summary\">應用程式語言、通知</string>\n    <string name=\"theme_cloudflare\">Cloudflare</string>\n    <string name=\"theme_sapphire\">藍寶石</string>\n    <string name=\"theme_doom\">腥紅</string>\n    <string name=\"theme_matrix\">駭客</string>\n    <string name=\"pref_preserve_reading_position\">保留已讀章節的閱讀位置</string>\n    <string name=\"pref_download_slots\">下載最大值</string>\n    <string name=\"local_source_badge\">本地</string>\n    <string name=\"anime_interval_expected_update\">新集數預計將在 %1$s 左右發布，大約每 %2$s 檢查一次。</string>\n    <string name=\"anime_interval_expected_update_null\">該動畫要么已經完成，要么沒有預計的發布日期。</string>\n    <string name=\"download_notifier_download_finish\">下載完成</string>\n    <string name=\"action_hide\">隱藏</string>\n    <string name=\"label_all\">所有標籤</string>\n    <string name=\"label_category\">所有分類</string>\n    <string name=\"manga_categories\">類別</string>\n    <string name=\"general_categories\">分類</string>\n    <string name=\"anime_categories\">動漫分類</string>\n    <string name=\"entries\">媒體櫃目錄</string>\n    <string name=\"chapters_episodes\">章節和集數</string>\n    <string name=\"episodes\">集數</string>\n    <string name=\"backup_settings_warning\">警告：備份設定將同時存儲您的軌跡密碼，不要分享此備份文件！</string>\n    <string name=\"label_manga_library\">漫畫</string>\n    <string name=\"label_anime_library\">動漫</string>\n    <string name=\"label_anime\">動漫</string>\n    <string name=\"label_manga\">漫畫</string>\n    <string name=\"label_recent_anime_updates\">動漫更新</string>\n    <string name=\"label_manga_sources\">漫畫源</string>\n    <string name=\"label_anime_sources\">動漫源</string>\n    <string name=\"label_watched_duration\">觀看時長</string>\n    <string name=\"label_watched_episodes\">看過</string>\n    <string name=\"pref_start_screen\">開始放映</string>\n    <string name=\"pref_library_manga_columns\">每行漫畫數量</string>\n    <string name=\"pref_library_anime_columns\">每行動漫數量</string>\n    <string name=\"pref_bottom_nav_no_history\">將歷史記錄移至“更多”選項</string>\n    <string name=\"pref_bottom_nav_no_updates\">將更新移至“更多”選項</string>\n    <string name=\"pref_bottom_nav_no_manga\">將漫畫移至“更多”選項</string>\n    <string name=\"pref_bottom_nav_no_browse\">將「瀏覽」移至「更多」分頁</string>\n    <string name=\"action_filter_unseen\">未看</string>\n    <string name=\"action_global_manga_search\">全域漫畫搜尋</string>\n    <string name=\"action_global_anime_search\">全域動漫搜尋</string>\n    <string name=\"action_sort_total_episodes\">總集數</string>\n    <string name=\"action_sort_last_seen\">最後觀看</string>\n    <string name=\"action_sort_last_checked\">最後檢查</string>\n    <string name=\"action_sort_latest_episode\">最新一集</string>\n    <string name=\"action_sort_last_anime_update\">最新動漫更新</string>\n    <string name=\"action_sort_unseen_count\">未看數</string>\n    <string name=\"action_sort_episode_fetch_date\">該集取得日期</string>\n    <string name=\"action_mark_as_seen\">標記為已看</string>\n    <string name=\"action_mark_as_unseen\">標記為未看</string>\n    <string name=\"action_mark_previous_as_seen\">將上一個標記為已看</string>\n    <string name=\"action_play_internally\">內部播放</string>\n    <string name=\"action_play_externally\">外部播放</string>\n    <string name=\"action_download_unread\">下載未讀章節</string>\n    <string name=\"action_download_unseen\">下載未看的集數</string>\n    <string name=\"action_bookmark_episode\">收藏此集</string>\n    <string name=\"action_remove_bookmark_episode\">取消收藏此集</string>\n    <string name=\"action_edit_anime_categories\">編輯動漫類別</string>\n    <string name=\"action_edit_manga_categories\">編輯漫畫類別</string>\n    <string name=\"action_view_episodes\">查看集數</string>\n    <string name=\"action_previous_episode\">上一集</string>\n    <string name=\"action_play\">播放</string>\n    <string name=\"action_next_episode\">下一集</string>\n    <string name=\"action_screen_fit\">螢幕適配模式</string>\n    <string name=\"action_show_anime\">顯示動漫</string>\n    <string name=\"action_display_download_badge_anime\">已下載的集數</string>\n    <string name=\"action_display_local_badge_manga\">本機來源</string>\n    <string name=\"action_display_local_badge_anime\">本土動漫</string>\n    <string name=\"pref_search_pinned_manga_sources_only\">僅在全域搜尋中搜尋已釘選的漫畫來源</string>\n    <string name=\"pref_search_pinned_anime_sources_only\">僅在全域搜尋中搜尋以釘選的動漫來源</string>\n    <string name=\"pref_hide_in_manga_library_items\">隱藏已在媒體櫃中的漫畫</string>\n    <string name=\"pref_hide_in_anime_library_items\">隱藏已在媒體櫃中的動漫</string>\n    <string name=\"action_order_by_episode_number\">按集數</string>\n    <string name=\"action_start_download_externally\">使用外部下載器</string>\n    <string name=\"action_start_download_internally\">使用內部下載器</string>\n    <string name=\"pref_bottom_nav_style\">底部導航樣式</string>\n    <string name=\"pref_default_home_tab_library\">將起始畫面設定為漫畫分頁</string>\n    <string name=\"default_manga_category\">預設類別</string>\n    <string name=\"default_anime_category\">預設動漫類別</string>\n    <string name=\"pref_manga_library_update_categories_details\">類別同時屬於「排除」及「包含」的作品，將不會自動更新。</string>\n    <string name=\"pref_anime_library_update_categories_details\">同時出現在包含的/被排除的分類中，則不會進行更新。</string>\n    <string name=\"unofficial_extension_message_aniyomi\">此擴充功能不是來自官方列表。</string>\n    <string name=\"unofficial_anime_extension_message\">此擴充套件不屬於官方清單內。</string>\n    <string name=\"episode_download_progress\">%1$d%%</string>\n    <string name=\"pref_remove_exclude_categories_manga\">排除的類別</string>\n    <string name=\"pref_remove_exclude_categories_anime\">被排除的動漫類別</string>\n    <string name=\"pref_category_external_downloader\">外部下載器</string>\n    <string name=\"pref_use_external_downloader\">總是對動漫使用外部下載程式</string>\n    <string name=\"pref_external_downloader_selection\">下載應用程式偏好設定</string>\n    <string name=\"pref_download_new_episodes\">下載新集數</string>\n    <string name=\"auto_download_while_watching\">邊看邊自動下載</string>\n    <string name=\"download_ahead_info_anime\">僅適用於媒體櫃中的條目，且在本集與下一集皆下載時生效</string>\n    <string name=\"pref_track_on_add_library\">添加至媒體櫃時打開歷程清單</string>\n    <string name=\"pref_show_next_episode_airing_time\">顯示下一集的播放時間</string>\n    <string name=\"pref_backup_flags_summary\">備份檔案應包含什麼資訊</string>\n    <string name=\"pref_anime_storage_usage\">動漫儲存空間使用量</string>\n    <string name=\"pref_manga_storage_usage\">漫畫儲存使用量</string>\n    <string name=\"used_cache_both\">動漫中使用：%1$s，漫畫中使用：%2$s</string>\n    <string name=\"pref_clear_manga_database\">清除資料庫</string>\n    <string name=\"pref_clear_anime_database\">刪除動漫資料庫</string>\n    <string name=\"pref_clear_manga_database_summary\">將未收藏於媒體櫃的作品記錄刪除</string>\n    <string name=\"pref_clear_anime_database_summary\">刪除未保存在您的媒體櫃中的動漫歷史記錄</string>\n    <string name=\"anime_from_library\">媒體櫃裡的動漫</string>\n    <string name=\"downloaded_episodes\">已下載的集數</string>\n    <string name=\"local_manga_source\">本地漫畫源</string>\n    <string name=\"local_anime_source\">本地動漫源</string>\n    <string name=\"episode_not_found\">未找到該集</string>\n    <string name=\"local_invalid_episode_format\">無效的劇集格式</string>\n    <string name=\"unknown_studio\">未知工作室</string>\n    <string name=\"delete_confirmation\">您確定要刪除 \\\"%s\\\" 嗎？</string>\n    <string name=\"delete_downloads_for_anime\">刪除已下載的集數嗎？</string>\n    <string name=\"snack_add_to_manga_library\">將漫畫收藏至媒體櫃？</string>\n    <string name=\"snack_add_to_anime_library\">將動漫加入媒體櫃嗎？</string>\n    <string name=\"display_mode_episode\">第 %1$s 集</string>\n    <string name=\"episode_downloading_progress\">下載中（%d%%）</string>\n    <string name=\"download_error\">錯誤</string>\n    <string name=\"download_paused\">已暫停</string>\n    <string name=\"show_episode_number\">集數</string>\n    <string name=\"sort_by_episode_number\">按集數</string>\n    <string name=\"download_unseen\">未看</string>\n    <string name=\"confirm_delete_episodes\">您確定要刪除所選集數嗎？</string>\n    <string name=\"also_set_episode_settings_for_library\">同樣適用於我收藏的所有動漫</string>\n    <string name=\"no_episodes_error\">找不到任何集數</string>\n    <string name=\"watching\">觀看中</string>\n    <string name=\"currently_reading\">目前閱讀中</string>\n    <string name=\"currently_watching\">目前觀看中</string>\n    <string name=\"plan_to_watch\">計劃觀看</string>\n    <string name=\"not_interesting\">沒興趣</string>\n    <string name=\"want_to_read\">想讀</string>\n    <string name=\"want_to_watch\">想看</string>\n    <string name=\"repeating_anime\">重看</string>\n    <string name=\"dialog_with_checkbox_remove_description_anime\">這將刪除該集的觀看日期。你確定嗎？</string>\n    <string name=\"dialog_with_checkbox_reset_anime\">重置該動漫的所有集數</string>\n    <string name=\"share_screenshot_info\">%1$s: %2$s, %3$s</string>\n    <string name=\"episode_progress\">進度：%1$s/%2$s</string>\n    <string name=\"episode_progress_no_total\">進度：%1$s</string>\n    <string name=\"recent_anime_time\">第%1$s - %2$s集</string>\n    <string name=\"video_list_empty_error\">未找到影片</string>\n    <string name=\"notification_new_episodes\">發現新集數</string>\n    <string name=\"information_no_recent_anime\">最近未觀看</string>\n    <string name=\"episode_settings_updated\">已更新預設劇集設定</string>\n    <string name=\"download_notifier_download_paused_chapters\">下載已暫停</string>\n    <string name=\"download_notifier_download_paused_episodes\">劇集下載已暫停</string>\n    <string name=\"channel_new_chapters_episodes\">章節/劇集更新</string>\n    <string name=\"label_storage\">存儲</string>\n    <string name=\"label_history\">漫畫</string>\n    <string name=\"label_anime_history\">動漫</string>\n    <string name=\"label_updates\">漫畫</string>\n    <string name=\"label_anime_updates\">動漫</string>\n    <string name=\"action_change_intro_length\">更改簡介長度</string>\n    <string name=\"notification_episodes_single\">第 %1$s 集</string>\n    <string name=\"notification_episodes_single_and_more\">第 %1$s 集和另外 %2$d 集</string>\n    <string name=\"notification_episodes_multiple\">第 %1$s 集</string>\n    <string name=\"episode_settings\">劇集設定</string>\n    <string name=\"pref_backup_flags\">備份選項</string>\n    <string name=\"label_manga_extensions\">漫畫擴展</string>\n    <string name=\"label_anime_extensions\">動漫擴展</string>\n    <string name=\"label_migration_manga\">遷移漫畫</string>\n    <string name=\"label_migration_anime\">遷移動漫</string>\n    <string name=\"settings\">設置</string>\n    <string name=\"copied_video_link_to_clipboard\">已將影片品質連結複製到剪貼簿</string>\n    <string name=\"choose_video_quality\">選擇影片品質：</string>\n    <string name=\"extension_settings\">擴充設定</string>\n    <string name=\"theme_cottoncandy\">棉花糖</string>\n    <string name=\"theme_mocha\">摩卡</string>\n    <string name=\"pref_episode_swipe_end\">向右滑動操作</string>\n    <string name=\"pref_episode_swipe_start\">向左滑動操作</string>\n    <string name=\"pref_category_hide_hidden\">隱藏類別和儲存畫面中的隱藏類別</string>\n    <string name=\"pref_update_anime_release_grace_period\">預計動漫發行截止日</string>\n    <string name=\"data_saver_exclude\">從資料保護程序中排除</string>\n    <string name=\"data_saver_stop_exclude\">停止從資料保護程序中排除</string>\n    <string name=\"data_saver\">資料保護程式</string>\n    <string name=\"data_saver_summary\">在閱讀器中下載或載入之前壓縮圖片</string>\n    <string name=\"data_saver_downloader\">在下載器中使用資料保護程序</string>\n    <string name=\"data_saver_ignore_jpeg\">忽略 Jpeg 圖片</string>\n    <string name=\"data_saver_ignore_gif\">忽略 Gif 動畫</string>\n    <string name=\"data_saver_image_quality\">影像品質</string>\n    <string name=\"data_saver_image_quality_summary\">數值越高代表已儲存的影像品質百分比越高，但也代表檔案大小越大，80% 是檔案大小和影像品質之間的良好中位數</string>\n    <string name=\"data_saver_image_format\">壓縮為 Jpeg</string>\n    <string name=\"data_saver_image_format_summary_on\">Jpeg 檔案大小比 Webp 小得多（意味著保存更多資料），但它也會使影像損失更多品質。\n\\n目前壓縮為 Jpeg</string>\n    <string name=\"data_saver_image_format_summary_off\">Jpeg 檔案大小比 Webp 小得多（意味著保存更多資料），但它也會使影像損失更多品質。\n\\n目前壓縮為 Webp</string>\n    <string name=\"data_saver_color_bw\">轉換為黑白</string>\n    <string name=\"bandwidth_hero\">Bandwidth Hero（需要 Bandwidth Hero 代理伺服器）</string>\n    <string name=\"wsrv\">wsrv.nl</string>\n    <string name=\"resmush\">resmush.it</string>\n    <string name=\"bandwidth_data_saver_server\">Bandwidth Hero 代理伺服器</string>\n    <string name=\"data_saver_server_summary\">在此輸入 Bandwidth Hero 代理伺服器 URL</string>\n    <string name=\"download_slots_info\">只會同時從自架或不計量來源下載</string>\n    <string name=\"unseen\">未看</string>\n    <string name=\"label_manga_extension_repos\">漫畫擴充庫</string>\n    <string name=\"label_anime_extension_repos\">動漫擴充庫</string>\n    <string name=\"onboarding_storage_action_create_folder\">建立預設的 Aniyomi 資料夾</string>\n    <string name=\"download_speed_limit\">下載速度限制</string>\n    <string name=\"download_speed_limit_hint\">設定為 0 以停用速度限制。</string>\n</resources>\n"
  },
  {
    "path": "macrobenchmark/README.md",
    "content": "# Baseline profiles\n\nThe baseline profile for this app is located at [`app/src/main/baseline-prof.txt`](../app/src/main/baseline-prof.txt).\nIt contains rules that enable AOT compilation of the critical user path taken during app launch.\nFor more information on baseline profiles, read [this document](https://developer.android.com/studio/profile/baselineprofiles).\n\n> Note: The baseline profile needs to be re-generated for release builds that touch code which changes app startup.\n\nTo generate the baseline profile, select the `devBenchmark` build variant and run the\n`BaselineProfileGenerator` benchmark test on an AOSP Android Emulator.\nThen copy the resulting baseline profile from the emulator to [`app/src/main/baseline-prof.txt`](../app/src/main/baseline-prof.txt)."
  },
  {
    "path": "macrobenchmark/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.benchmark\")\n}\n\nandroid {\n    namespace = \"tachiyomi.macrobenchmark\"\n\n    defaultConfig {\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        testInstrumentationRunnerArguments[\"androidx.benchmark.enabledRules\"] = \"BaselineProfile\"\n    }\n\n    buildTypes {\n        // This benchmark buildType is used for benchmarking, and should function like your\n        // release build (for example, with minification on). It's signed with a debug key\n        // for easy local/CI testing.\n        create(\"benchmark\") {\n            isDebuggable = true\n            signingConfig = getByName(\"debug\").signingConfig\n            matchingFallbacks.add(\"release\")\n        }\n    }\n\n    targetProjectPath = \":app\"\n    experimentalProperties[\"android.experimental.self-instrumenting\"] = true\n}\n\ndependencies {\n    implementation(androidx.test.ext)\n    implementation(androidx.test.espresso.core)\n    implementation(androidx.test.uiautomator)\n    implementation(androidx.benchmark.macro)\n}\n\nandroidComponents {\n    beforeVariants(selector().all()) {\n        it.enable = it.buildType == \"benchmark\"\n    }\n}\n"
  },
  {
    "path": "macrobenchmark/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "macrobenchmark/src/main/java/tachiyomi/macrobenchmark/BaselineProfileGenerator.kt",
    "content": "package tachiyomi.macrobenchmark\n\nimport androidx.benchmark.macro.junit4.BaselineProfileRule\nimport androidx.test.uiautomator.By\nimport org.junit.Rule\nimport org.junit.Test\n\nclass BaselineProfileGenerator {\n\n    @get:Rule\n    val baselineProfileRule = BaselineProfileRule()\n\n    @Test\n    fun generate() = baselineProfileRule.collect(\n        packageName = \"xyz.jmir.tachiyomi.mi.benchmark\",\n        profileBlock = {\n            pressHome()\n            startActivityAndWait()\n\n            device.findObject(By.text(\"Manga\")).click()\n            device.findObject(By.text(\"Updates\")).click()\n\n            device.findObject(By.text(\"History\")).click()\n\n            // TODO: automate storage permissions and possibly open manga details screen too?\n            // device.findObject(By.text(\"Browse\")).click()\n            // device.findObject(By.text(\"Extensions\")).click()\n            // device.swipe(150, 150, 50, 150, 1)\n\n            device.findObject(By.text(\"More\")).click()\n            device.findObject(By.text(\"Settings\")).click()\n        },\n    )\n}\n"
  },
  {
    "path": "macrobenchmark/src/main/java/tachiyomi/macrobenchmark/StartupBenchmark.kt",
    "content": "/*\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\npackage tachiyomi.macrobenchmark\n\nimport androidx.benchmark.macro.BaselineProfileMode\nimport androidx.benchmark.macro.CompilationMode\nimport androidx.benchmark.macro.StartupMode\nimport androidx.benchmark.macro.StartupTimingMetric\nimport androidx.benchmark.macro.junit4.MacrobenchmarkRule\nimport androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner\nimport org.junit.Rule\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\n/**\n * Run this benchmark from Studio to see startup measurements, and captured system traces\n * for investigating your app's performance from a cold state.\n */\n@RunWith(AndroidJUnit4ClassRunner::class)\nclass ColdStartupBenchmark : AbstractStartupBenchmark(StartupMode.COLD)\n\n/**\n * Run this benchmark from Studio to see startup measurements, and captured system traces\n * for investigating your app's performance from a warm state.\n */\n@RunWith(AndroidJUnit4ClassRunner::class)\nclass WarmStartupBenchmark : AbstractStartupBenchmark(StartupMode.WARM)\n\n/**\n * Run this benchmark from Studio to see startup measurements, and captured system traces\n * for investigating your app's performance from a hot state.\n */\n@RunWith(AndroidJUnit4ClassRunner::class)\nclass HotStartupBenchmark : AbstractStartupBenchmark(StartupMode.HOT)\n\n/**\n * Base class for benchmarks with different startup modes.\n * Enables app startups from various states of baseline profile or [CompilationMode]s.\n */\nabstract class AbstractStartupBenchmark(private val startupMode: StartupMode) {\n    @get:Rule\n    val benchmarkRule = MacrobenchmarkRule()\n\n    @Test\n    fun startupNoCompilation() = startup(CompilationMode.None())\n\n    @Test\n    fun startupBaselineProfileDisabled() = startup(\n        CompilationMode.Partial(\n            baselineProfileMode = BaselineProfileMode.Disable,\n            warmupIterations = 1,\n        ),\n    )\n\n    @Test\n    fun startupBaselineProfile() = startup(\n        CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require),\n    )\n\n    @Test\n    fun startupFullCompilation() = startup(CompilationMode.Full())\n\n    private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(\n        packageName = \"xyz.jmir.tachiyomi.mibenchmark\",\n        metrics = listOf(StartupTimingMetric()),\n        compilationMode = compilationMode,\n        iterations = 10,\n        startupMode = startupMode,\n        setupBlock = {\n            pressHome()\n        },\n    ) {\n        startActivityAndWait()\n    }\n}\n"
  },
  {
    "path": "presentation-core/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    id(\"mihon.library.compose\")\n    kotlin(\"android\")\n}\n\nandroid {\n    namespace = \"tachiyomi.presentation.core\"\n\n    defaultConfig {\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n}\n\nkotlin {\n    compilerOptions {\n        freeCompilerArgs.addAll(\n            \"-opt-in=androidx.compose.animation.ExperimentalAnimationApi\",\n            \"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi\",\n            \"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi\",\n            \"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi\",\n            \"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api\",\n            \"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi\",\n            \"-opt-in=kotlinx.coroutines.FlowPreview\",\n        )\n    }\n}\n\ndependencies {\n    api(projects.core.common)\n    api(projects.i18n)\n\n    // Compose\n    implementation(compose.activity)\n    implementation(compose.foundation)\n    implementation(compose.material3.core)\n    implementation(compose.material.icons)\n    implementation(compose.animation)\n    implementation(compose.animation.graphics)\n    debugImplementation(compose.ui.tooling)\n    implementation(compose.ui.tooling.preview)\n    implementation(compose.ui.util)\n\n    implementation(androidx.paging.runtime)\n    implementation(androidx.paging.compose)\n    implementation(kotlinx.immutables)\n}\n"
  },
  {
    "path": "presentation-core/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "presentation-core/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "presentation-core/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "presentation-core/src/main/java/mihon/presentation/core/util/PagingDataUtil.kt",
    "content": "package mihon.presentation.core.util\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.paging.PagingData\nimport androidx.paging.compose.LazyPagingItems\nimport androidx.paging.compose.collectAsLazyPagingItems\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.StateFlow\n\n@Composable\nfun <T : Any> StateFlow<Flow<PagingData<T>>>.collectAsLazyPagingItems(): LazyPagingItems<T> {\n    val flow by collectAsState()\n    return flow.collectAsLazyPagingItems()\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/ActionButton.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\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.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.text.style.TextAlign\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun ActionButton(\n    title: String,\n    icon: ImageVector,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n) {\n    TextButton(\n        modifier = modifier,\n        onClick = onClick,\n    ) {\n        Column(\n            verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            horizontalAlignment = Alignment.CenterHorizontally,\n        ) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n            )\n            Text(\n                text = title,\n                textAlign = TextAlign.Center,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/AdaptiveSheet.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport android.content.res.Configuration.ORIENTATION_LANDSCAPE\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.rememberSplineBasedDecay\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.gestures.AnchoredDraggableState\nimport androidx.compose.foundation.gestures.DraggableAnchors\nimport androidx.compose.foundation.gestures.Orientation\nimport androidx.compose.foundation.gestures.anchoredDraggable\nimport androidx.compose.foundation.gestures.animateTo\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.navigationBarsPadding\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.requiredWidthIn\nimport androidx.compose.foundation.layout.statusBarsPadding\nimport androidx.compose.foundation.layout.systemBarsPadding\nimport androidx.compose.foundation.layout.widthIn\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableFloatStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.snapshotFlow\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.geometry.Offset\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.layout.onSizeChanged\nimport androidx.compose.ui.platform.LocalConfiguration\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.IntOffset\nimport androidx.compose.ui.unit.Velocity\nimport androidx.compose.ui.unit.dp\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.drop\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.launch\nimport kotlin.math.roundToInt\n\nprivate val sheetAnimationSpec = tween<Float>(durationMillis = 350)\n\n@Composable\nfun AdaptiveSheet(\n    isTabletUi: Boolean,\n    enableSwipeDismiss: Boolean,\n    onDismissRequest: () -> Unit,\n    modifier: Modifier = Modifier,\n    content: @Composable () -> Unit,\n) {\n    val density = LocalDensity.current\n    val scope = rememberCoroutineScope()\n    val maxWidth = if (LocalConfiguration.current.orientation == ORIENTATION_LANDSCAPE) {\n        600.dp\n    } else {\n        460.dp\n    }\n\n    if (isTabletUi) {\n        var targetAlpha by remember { mutableFloatStateOf(0f) }\n        val alpha by animateFloatAsState(\n            targetValue = targetAlpha,\n            animationSpec = sheetAnimationSpec,\n            label = \"alpha\",\n        )\n        val internalOnDismissRequest: () -> Unit = {\n            scope.launch {\n                targetAlpha = 0f\n                onDismissRequest()\n            }\n        }\n        Box(\n            modifier = Modifier\n                .clickable(\n                    interactionSource = null,\n                    indication = null,\n                    onClick = internalOnDismissRequest,\n                )\n                .fillMaxSize()\n                .alpha(alpha),\n            contentAlignment = Alignment.Center,\n        ) {\n            Surface(\n                modifier = Modifier\n                    .requiredWidthIn(max = maxWidth)\n                    .clickable(\n                        interactionSource = null,\n                        indication = null,\n                        onClick = {},\n                    )\n                    .systemBarsPadding()\n                    .padding(vertical = 16.dp)\n                    .then(modifier),\n                shape = MaterialTheme.shapes.extraLarge,\n                color = MaterialTheme.colorScheme.surfaceContainerHigh,\n                content = {\n                    BackHandler(enabled = alpha > 0f, onBack = internalOnDismissRequest)\n                    content()\n                },\n            )\n\n            LaunchedEffect(Unit) {\n                targetAlpha = 1f\n            }\n        }\n    } else {\n        val decayAnimationSpec = rememberSplineBasedDecay<Float>()\n        val anchoredDraggableState = remember {\n            AnchoredDraggableState(\n                initialValue = 1,\n                positionalThreshold = { with(density) { 56.dp.toPx() } },\n                velocityThreshold = { with(density) { 125.dp.toPx() } },\n                snapAnimationSpec = sheetAnimationSpec,\n                decayAnimationSpec = decayAnimationSpec,\n            )\n        }\n        val internalOnDismissRequest = {\n            if (anchoredDraggableState.settledValue == 0) {\n                scope.launch { anchoredDraggableState.animateTo(1) }\n            }\n        }\n        Box(\n            modifier = Modifier\n                .clickable(\n                    interactionSource = null,\n                    indication = null,\n                    onClick = internalOnDismissRequest,\n                )\n                .fillMaxSize()\n                .onSizeChanged {\n                    val anchors = DraggableAnchors {\n                        0 at 0f\n                        1 at it.height.toFloat()\n                    }\n                    anchoredDraggableState.updateAnchors(anchors)\n                },\n            contentAlignment = Alignment.BottomCenter,\n        ) {\n            Surface(\n                modifier = Modifier\n                    .widthIn(max = maxWidth)\n                    .clickable(\n                        interactionSource = null,\n                        indication = null,\n                        onClick = {},\n                    )\n                    .then(\n                        if (enableSwipeDismiss) {\n                            Modifier.nestedScroll(\n                                remember(anchoredDraggableState) {\n                                    anchoredDraggableState.preUpPostDownNestedScrollConnection(\n                                        onFling = { scope.launch { anchoredDraggableState.settle(it) } },\n                                    )\n                                },\n                            )\n                        } else {\n                            Modifier\n                        },\n                    )\n                    .then(modifier)\n                    .offset {\n                        IntOffset(\n                            0,\n                            anchoredDraggableState.offset\n                                .takeIf { it.isFinite() }\n                                ?.roundToInt()\n                                ?: 0,\n                        )\n                    }\n                    .anchoredDraggable(\n                        state = anchoredDraggableState,\n                        orientation = Orientation.Vertical,\n                        enabled = enableSwipeDismiss,\n                    )\n                    .navigationBarsPadding()\n                    .statusBarsPadding(),\n                shape = MaterialTheme.shapes.extraLarge,\n                color = MaterialTheme.colorScheme.surfaceContainerHigh,\n                content = {\n                    BackHandler(\n                        enabled = anchoredDraggableState.targetValue == 0,\n                        onBack = internalOnDismissRequest,\n                    )\n                    content()\n                },\n            )\n\n            LaunchedEffect(anchoredDraggableState) {\n                scope.launch { anchoredDraggableState.animateTo(0) }\n                snapshotFlow { anchoredDraggableState.settledValue }\n                    .drop(1)\n                    .filter { it == 1 }\n                    .collectLatest {\n                        onDismissRequest()\n                    }\n            }\n        }\n    }\n}\n\nprivate fun <T> AnchoredDraggableState<T>.preUpPostDownNestedScrollConnection(\n    onFling: (velocity: Float) -> Unit,\n) = object : NestedScrollConnection {\n    override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {\n        val delta = available.toFloat()\n        return if (delta < 0 && source == NestedScrollSource.UserInput) {\n            dispatchRawDelta(delta).toOffset()\n        } else {\n            Offset.Zero\n        }\n    }\n\n    override fun onPostScroll(\n        consumed: Offset,\n        available: Offset,\n        source: NestedScrollSource,\n    ): Offset {\n        return if (source == NestedScrollSource.UserInput) {\n            dispatchRawDelta(available.toFloat()).toOffset()\n        } else {\n            Offset.Zero\n        }\n    }\n\n    override suspend fun onPreFling(available: Velocity): Velocity {\n        val toFling = available.toFloat()\n        return if (toFling < 0 && offset > anchors.minAnchor()) {\n            onFling(toFling)\n            // since we go to the anchor with tween settling, consume all for the best UX\n            available\n        } else {\n            Velocity.Zero\n        }\n    }\n\n    override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {\n        onFling(available.toFloat())\n        return available\n    }\n\n    private fun Float.toOffset(): Offset = Offset(0f, this)\n\n    @JvmName(\"velocityToFloat\")\n    private fun Velocity.toFloat() = this.y\n\n    @JvmName(\"offsetToFloat\")\n    private fun Offset.toFloat(): Float = this.y\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/Badges.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.text.InlineTextContent\nimport androidx.compose.foundation.text.appendInlineContent\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.RectangleShape\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.text.Placeholder\nimport androidx.compose.ui.text.PlaceholderVerticalAlign\nimport androidx.compose.ui.text.buildAnnotatedString\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.dp\nimport kotlinx.collections.immutable.persistentMapOf\n\n@Composable\nfun BadgeGroup(\n    modifier: Modifier = Modifier,\n    shape: Shape = MaterialTheme.shapes.extraSmall,\n    content: @Composable RowScope.() -> Unit,\n) {\n    Row(modifier = modifier.clip(shape)) {\n        content()\n    }\n}\n\n@Composable\nfun Badge(\n    text: String,\n    modifier: Modifier = Modifier,\n    color: Color = MaterialTheme.colorScheme.secondary,\n    textColor: Color = MaterialTheme.colorScheme.onSecondary,\n    shape: Shape = RectangleShape,\n) {\n    Text(\n        text = text,\n        modifier = modifier\n            .clip(shape)\n            .background(color)\n            .padding(horizontal = 3.dp, vertical = 1.dp),\n        color = textColor,\n        fontWeight = FontWeight.Medium,\n        maxLines = 1,\n        style = MaterialTheme.typography.bodySmall,\n    )\n}\n\n@Composable\nfun Badge(\n    imageVector: ImageVector,\n    modifier: Modifier = Modifier,\n    color: Color = MaterialTheme.colorScheme.secondary,\n    iconColor: Color = MaterialTheme.colorScheme.onSecondary,\n    shape: Shape = RectangleShape,\n) {\n    val iconContentPlaceholder = \"[icon]\"\n    val text = buildAnnotatedString {\n        appendInlineContent(iconContentPlaceholder)\n    }\n    val inlineContent = persistentMapOf(\n        Pair(\n            iconContentPlaceholder,\n            InlineTextContent(\n                Placeholder(\n                    width = MaterialTheme.typography.bodySmall.fontSize,\n                    height = MaterialTheme.typography.bodySmall.fontSize,\n                    placeholderVerticalAlign = PlaceholderVerticalAlign.Center,\n                ),\n            ) {\n                Icon(\n                    imageVector = imageVector,\n                    tint = iconColor,\n                    contentDescription = null,\n                )\n            },\n        ),\n    )\n\n    Text(\n        text = text,\n        inlineContent = inlineContent,\n        modifier = modifier\n            .clip(shape)\n            .background(color)\n            .padding(horizontal = 3.dp, vertical = 1.dp),\n        color = iconColor,\n        fontWeight = FontWeight.Medium,\n        maxLines = 1,\n        style = MaterialTheme.typography.bodySmall,\n    )\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/CircularProgressIndicator.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.core.LinearEasing\nimport androidx.compose.animation.core.RepeatMode\nimport androidx.compose.animation.core.animateFloat\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.infiniteRepeatable\nimport androidx.compose.animation.core.rememberInfiniteTransition\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.togetherWith\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProgressIndicatorDefaults\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableFloatStateOf\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.rotate\nimport androidx.compose.ui.tooling.preview.Preview\n\n/**\n * A combined [CircularProgressIndicator] that always rotates.\n *\n * By always rotating we give the feedback to the user that the application isn't 'stuck'.\n */\n@Composable\nfun CombinedCircularProgressIndicator(\n    progress: () -> Float,\n    modifier: Modifier = Modifier,\n) {\n    AnimatedContent(\n        targetState = progress() == 0f,\n        transitionSpec = { fadeIn() togetherWith fadeOut() },\n        label = \"progressState\",\n        modifier = modifier,\n    ) { indeterminate ->\n        if (indeterminate) {\n            // Indeterminate\n            CircularProgressIndicator()\n        } else {\n            // Determinate\n            val infiniteTransition = rememberInfiniteTransition(label = \"infiniteRotation\")\n            val rotation by infiniteTransition.animateFloat(\n                initialValue = 0f,\n                targetValue = 360f,\n                animationSpec = infiniteRepeatable(\n                    animation = tween(2000, easing = LinearEasing),\n                    repeatMode = RepeatMode.Restart,\n                ),\n                label = \"rotation\",\n            )\n            val animatedProgress by animateFloatAsState(\n                targetValue = progress(),\n                animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec,\n                label = \"progress\",\n            )\n            CircularProgressIndicator(\n                progress = { animatedProgress },\n                modifier = Modifier.rotate(rotation),\n            )\n        }\n    }\n}\n\n@Preview\n@Composable\nprivate fun CombinedCircularProgressIndicatorPreview() {\n    var progress by remember { mutableFloatStateOf(0f) }\n    MaterialTheme {\n        Scaffold(\n            bottomBar = {\n                Button(\n                    modifier = Modifier.fillMaxWidth(),\n                    onClick = {\n                        progress = when (progress) {\n                            0f -> 0.15f\n                            0.15f -> 0.25f\n                            0.25f -> 0.5f\n                            0.5f -> 0.75f\n                            0.75f -> 0.95f\n                            else -> 0f\n                        }\n                    },\n                ) {\n                    Text(\"change\")\n                }\n            },\n        ) {\n            Box(\n                contentAlignment = Alignment.Center,\n                modifier = Modifier\n                    .fillMaxSize()\n                    .padding(it),\n            ) {\n                CombinedCircularProgressIndicator(progress = { progress })\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/CollapsibleBox.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.clickable\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.material.icons.Icons\nimport androidx.compose.material.icons.filled.ExpandLess\nimport androidx.compose.material.icons.filled.ExpandMore\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\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.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.presentation.core.theme.header\n\n@Composable\nfun CollapsibleBox(\n    heading: String,\n    content: @Composable () -> Unit,\n) {\n    var expanded by remember { mutableStateOf(false) }\n\n    Column {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .clickable { expanded = !expanded }\n                .padding(horizontal = 24.dp, vertical = 12.dp),\n        ) {\n            Text(\n                text = heading,\n                style = MaterialTheme.typography.header,\n            )\n\n            Spacer(modifier = Modifier.weight(1f))\n\n            Icon(\n                imageVector = if (expanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore,\n                contentDescription = null,\n            )\n        }\n\n        AnimatedVisibility(visible = expanded) {\n            content()\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/LabeledCheckbox.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.heightIn\nimport androidx.compose.material3.Checkbox\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.semantics.Role\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun LabeledCheckbox(\n    label: String,\n    checked: Boolean,\n    onCheckedChange: (Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n) {\n    Row(\n        modifier = modifier\n            .clip(MaterialTheme.shapes.small)\n            .fillMaxWidth()\n            .heightIn(min = 48.dp)\n            .clickable(\n                role = Role.Checkbox,\n                onClick = {\n                    if (enabled) {\n                        onCheckedChange(!checked)\n                    }\n                },\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n    ) {\n        Checkbox(\n            checked = checked,\n            onCheckedChange = null,\n            enabled = enabled,\n        )\n\n        Text(text = label)\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/LazyColumnWithAction.kt",
    "content": "package tachiyomi.presentation.core.components\n\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.LazyListScope\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun LazyColumnWithAction(\n    contentPadding: PaddingValues,\n    actionLabel: String,\n    onClickAction: () -> Unit,\n    modifier: Modifier = Modifier,\n    actionEnabled: Boolean = true,\n    content: LazyListScope.() -> Unit,\n) {\n    Column(\n        modifier = modifier\n            .padding(contentPadding)\n            .fillMaxSize(),\n    ) {\n        LazyColumn(\n            modifier = Modifier.weight(1f),\n            content = content,\n        )\n\n        HorizontalDivider()\n\n        Button(\n            modifier = Modifier\n                .padding(horizontal = 16.dp, vertical = 8.dp)\n                .fillMaxWidth(),\n            enabled = actionEnabled,\n            onClick = onClickAction,\n        ) {\n            Text(\n                text = actionLabel,\n                color = MaterialTheme.colorScheme.onPrimary,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/LazyGrid.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.LazyGridScope\nimport androidx.compose.foundation.lazy.grid.LazyGridState\nimport androidx.compose.foundation.lazy.grid.LazyVerticalGrid\nimport androidx.compose.foundation.lazy.grid.rememberLazyGridState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun FastScrollLazyVerticalGrid(\n    columns: GridCells,\n    modifier: Modifier = Modifier,\n    state: LazyGridState = rememberLazyGridState(),\n    thumbAllowed: () -> Boolean = { true },\n    thumbColor: Color = MaterialTheme.colorScheme.primary,\n    contentPadding: PaddingValues = PaddingValues(0.dp),\n    topContentPadding: Dp = Dp.Hairline,\n    bottomContentPadding: Dp = Dp.Hairline,\n    endContentPadding: Dp = Dp.Hairline,\n    reverseLayout: Boolean = false,\n    verticalArrangement: Arrangement.Vertical =\n        if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,\n    horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,\n    userScrollEnabled: Boolean = true,\n    content: LazyGridScope.() -> Unit,\n) {\n    VerticalGridFastScroller(\n        state = state,\n        columns = columns,\n        arrangement = horizontalArrangement,\n        contentPadding = contentPadding,\n        modifier = modifier,\n        thumbAllowed = thumbAllowed,\n        thumbColor = thumbColor,\n        topContentPadding = topContentPadding,\n        bottomContentPadding = bottomContentPadding,\n        endContentPadding = endContentPadding,\n    ) {\n        LazyVerticalGrid(\n            columns = columns,\n            state = state,\n            contentPadding = contentPadding,\n            reverseLayout = reverseLayout,\n            verticalArrangement = verticalArrangement,\n            horizontalArrangement = horizontalArrangement,\n            userScrollEnabled = userScrollEnabled,\n            content = content,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/LazyList.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\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.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.unit.dp\nimport tachiyomi.presentation.core.util.drawVerticalScrollbar\n\n/**\n * LazyColumn with scrollbar.\n */\n@Composable\nfun ScrollbarLazyColumn(\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    userScrollEnabled: Boolean = true,\n    content: LazyListScope.() -> Unit,\n) {\n    val direction = LocalLayoutDirection.current\n    val density = LocalDensity.current\n    val positionOffset = remember(contentPadding) {\n        with(density) { contentPadding.calculateEndPadding(direction).toPx() }\n    }\n    LazyColumn(\n        modifier = modifier\n            .drawVerticalScrollbar(\n                state = state,\n                reverseScrolling = reverseLayout,\n                positionOffsetPx = positionOffset,\n            ),\n        state = state,\n        contentPadding = contentPadding,\n        reverseLayout = reverseLayout,\n        verticalArrangement = verticalArrangement,\n        horizontalAlignment = horizontalAlignment,\n        userScrollEnabled = userScrollEnabled,\n        content = content,\n    )\n}\n\n/**\n * LazyColumn with fast scroller.\n */\n@Composable\nfun FastScrollLazyColumn(\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    userScrollEnabled: Boolean = true,\n    content: LazyListScope.() -> Unit,\n) {\n    VerticalFastScroller(\n        listState = state,\n        modifier = modifier,\n        topContentPadding = contentPadding.calculateTopPadding(),\n        endContentPadding = contentPadding.calculateEndPadding(LocalLayoutDirection.current),\n    ) {\n        LazyColumn(\n            state = state,\n            contentPadding = contentPadding,\n            reverseLayout = reverseLayout,\n            verticalArrangement = verticalArrangement,\n            horizontalAlignment = horizontalAlignment,\n            userScrollEnabled = userScrollEnabled,\n            content = content,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/LinkIcon.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun LinkIcon(\n    label: String,\n    icon: ImageVector,\n    url: String,\n    modifier: Modifier = Modifier,\n) {\n    val uriHandler = LocalUriHandler.current\n    IconButton(\n        modifier = modifier.padding(4.dp),\n        onClick = { uriHandler.openUri(url) },\n    ) {\n        Icon(\n            imageVector = icon,\n            tint = MaterialTheme.colorScheme.primary,\n            contentDescription = label,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/ListGroupHeader.kt",
    "content": "package tachiyomi.presentation.core.components\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.text.font.FontWeight\nimport tachiyomi.presentation.core.components.material.padding\n\n@Composable\nfun ListGroupHeader(\n    text: String,\n    modifier: Modifier = Modifier,\n) {\n    Text(\n        text = text,\n        modifier = modifier\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        color = MaterialTheme.colorScheme.onSurfaceVariant,\n        fontWeight = FontWeight.SemiBold,\n        style = MaterialTheme.typography.bodyMedium,\n    )\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/Pill.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\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.Color\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.unit.TextUnit\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun Pill(\n    text: String,\n    modifier: Modifier = Modifier,\n    color: Color = MaterialTheme.colorScheme.surfaceContainerHigh,\n    contentColor: Color = MaterialTheme.colorScheme.onSurface,\n    style: TextStyle = LocalTextStyle.current,\n) {\n    Surface(\n        modifier = modifier\n            .padding(start = 4.dp),\n        shape = MaterialTheme.shapes.extraLarge,\n        color = color,\n        contentColor = contentColor,\n    ) {\n        Box(\n            modifier = Modifier\n                .padding(6.dp, 1.dp),\n            contentAlignment = Alignment.Center,\n        ) {\n            Text(\n                text = text,\n                maxLines = 1,\n                style = style,\n            )\n        }\n    }\n}\n\n@Composable\nfun Pill(\n    text: String,\n    modifier: Modifier = Modifier,\n    color: Color = MaterialTheme.colorScheme.surfaceContainerHigh,\n    contentColor: Color = MaterialTheme.colorScheme.onSurface,\n    fontSize: TextUnit = LocalTextStyle.current.fontSize,\n) {\n    val style = LocalTextStyle.current\n    Pill(\n        text = text,\n        modifier = modifier,\n        color = color,\n        contentColor = contentColor,\n        style = MaterialTheme.typography.bodyMedium.copy(fontSize = fontSize),\n    )\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/SectionCard.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyItemScope\nimport androidx.compose.material3.ElevatedCard\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun LazyItemScope.SectionCard(\n    titleRes: StringResource? = null,\n    content: @Composable ColumnScope.() -> Unit,\n) {\n    if (titleRes != null) {\n        Text(\n            modifier = Modifier.padding(horizontal = MaterialTheme.padding.extraLarge),\n            text = stringResource(titleRes),\n            style = MaterialTheme.typography.titleSmall,\n        )\n    }\n\n    ElevatedCard(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(\n                horizontal = MaterialTheme.padding.medium,\n                vertical = MaterialTheme.padding.small,\n            ),\n        shape = MaterialTheme.shapes.extraLarge,\n    ) {\n        Column(modifier = Modifier.padding(MaterialTheme.padding.medium)) {\n            content()\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport android.view.MotionEvent\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.FlowRowScope\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\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.foundation.layout.widthIn\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.LazyGridScope\nimport androidx.compose.foundation.lazy.grid.LazyVerticalGrid\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ArrowDownward\nimport androidx.compose.material.icons.filled.ArrowUpward\nimport androidx.compose.material.icons.outlined.AddCircle\nimport androidx.compose.material.icons.outlined.RemoveCircle\nimport androidx.compose.material.icons.rounded.CheckBox\nimport androidx.compose.material.icons.rounded.CheckBoxOutlineBlank\nimport androidx.compose.material.icons.rounded.DisabledByDefault\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.ExposedDropdownMenuBox\nimport androidx.compose.material3.ExposedDropdownMenuDefaults\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MenuAnchorType\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.RadioButton\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.runtime.Composable\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.rememberUpdatedState\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.graphics.vector.ImageVector\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.input.pointer.pointerInteropFilter\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.input.KeyboardType\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.dp\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.coroutines.delay\nimport tachiyomi.core.common.preference.Preference\nimport tachiyomi.core.common.preference.TriState\nimport tachiyomi.core.common.preference.toggle\nimport tachiyomi.presentation.core.components.material.DISABLED_ALPHA\nimport tachiyomi.presentation.core.components.material.Slider\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.theme.header\nimport tachiyomi.presentation.core.util.collectAsState\n\nobject SettingsItemsPaddings {\n    val Horizontal = 24.dp\n    val Vertical = 10.dp\n}\n\n@Composable\nfun HeadingItem(\n    labelRes: StringResource,\n) {\n    HeadingItem(stringResource(labelRes))\n}\n\n@Composable\nfun HeadingItem(\n    text: String,\n) {\n    Text(\n        text = text,\n        style = MaterialTheme.typography.header,\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(\n                horizontal = SettingsItemsPaddings.Horizontal,\n                vertical = SettingsItemsPaddings.Vertical,\n            ),\n    )\n}\n\n@Composable\nfun IconItem(\n    label: String,\n    icon: ImageVector,\n    onClick: () -> Unit,\n) {\n    BaseSettingsItem(\n        label = label,\n        widget = {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                tint = MaterialTheme.colorScheme.primary,\n            )\n        },\n        onClick = onClick,\n    )\n}\n\n@Composable\nfun SortItem(\n    label: String,\n    sortDescending: Boolean?,\n    onClick: () -> Unit,\n) {\n    val arrowIcon = when (sortDescending) {\n        true -> Icons.Default.ArrowDownward\n        false -> Icons.Default.ArrowUpward\n        null -> null\n    }\n\n    BaseSortItem(\n        label = label,\n        icon = arrowIcon,\n        onClick = onClick,\n    )\n}\n\n@Composable\nfun BaseSortItem(label: String, icon: ImageVector?, onClick: () -> Unit) {\n    BaseSettingsItem(\n        label = label,\n        widget = {\n            if (icon != null) {\n                Icon(\n                    imageVector = icon,\n                    contentDescription = null,\n                    tint = MaterialTheme.colorScheme.primary,\n                )\n            } else {\n                Spacer(modifier = Modifier.size(24.dp))\n            }\n        },\n        onClick = onClick,\n    )\n}\n\n@Composable\nfun CheckboxItem(\n    label: String,\n    pref: Preference<Boolean>,\n) {\n    val checked by pref.collectAsState()\n    CheckboxItem(\n        label = label,\n        checked = checked,\n        onClick = { pref.toggle() },\n    )\n}\n\n@Composable\nfun CheckboxItem(\n    label: String,\n    checked: Boolean,\n    onClick: () -> Unit,\n) {\n    BaseSettingsItem(\n        label = label,\n        widget = {\n            Checkbox(\n                checked = checked,\n                onCheckedChange = null,\n            )\n        },\n        onClick = onClick,\n    )\n}\n\n@Composable\nfun RadioItem(\n    label: String,\n    selected: Boolean,\n    onClick: () -> Unit,\n) {\n    BaseSettingsItem(\n        label = label,\n        widget = {\n            RadioButton(\n                selected = selected,\n                onClick = null,\n            )\n        },\n        onClick = onClick,\n    )\n}\n\n@Composable\nfun SliderItem(\n    value: Int,\n    valueRange: IntProgression,\n    label: String,\n    onChange: (Int) -> Unit,\n    steps: Int = with(valueRange) { (last - first) - 1 },\n    valueText: String = value.toString(),\n    labelStyle: TextStyle = MaterialTheme.typography.bodyMedium,\n    pillColor: Color = MaterialTheme.colorScheme.surfaceContainerHigh,\n) {\n    BaseSliderItem(\n        value = value,\n        valueRange = valueRange,\n        steps = steps,\n        label = label,\n        valueText = valueText,\n        onChange = onChange,\n        labelStyle = labelStyle,\n        pillColor = pillColor,\n        modifier = Modifier.padding(\n            horizontal = SettingsItemsPaddings.Horizontal,\n            vertical = SettingsItemsPaddings.Vertical,\n        ),\n    )\n}\n\n@Composable\nfun BaseSliderItem(\n    value: Int,\n    valueRange: IntProgression,\n    label: String,\n    onChange: (Int) -> Unit,\n    modifier: Modifier = Modifier,\n    steps: Int = with(valueRange) { (last - first) - 1 },\n    valueText: String = value.toString(),\n    labelStyle: TextStyle = MaterialTheme.typography.bodyMedium,\n    pillColor: Color = MaterialTheme.colorScheme.surfaceContainerHigh,\n) {\n    val haptic = LocalHapticFeedback.current\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .then(modifier),\n        verticalArrangement = Arrangement.spacedBy(2.dp),\n    ) {\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n        ) {\n            Text(\n                text = label,\n                style = labelStyle,\n                modifier = Modifier.weight(1f),\n            )\n            Pill(\n                text = valueText,\n                style = MaterialTheme.typography.bodyMedium,\n                color = pillColor,\n            )\n        }\n\n        Slider(\n            value = value,\n            onValueChange = f@{\n                if (it == value) return@f\n                onChange(it)\n                haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n            },\n            valueRange = valueRange,\n            steps = steps,\n        )\n    }\n}\n\n@Composable\n@PreviewLightDark\nfun SliderItemPreview() {\n    MaterialTheme(if (isSystemInDarkTheme()) darkColorScheme() else lightColorScheme()) {\n        var value by remember { mutableIntStateOf(0) }\n        Surface {\n            SliderItem(\n                value = value,\n                valueRange = 0..10,\n                label = \"Item per row\",\n                valueText = if (value == 0) \"Auto\" else value.toString(),\n                onChange = { value = it },\n            )\n        }\n    }\n}\n\n@Composable\nfun SelectItem(\n    label: String,\n    options: Array<out Any?>,\n    selectedIndex: Int,\n    onSelect: (Int) -> Unit,\n) {\n    var expanded by remember { mutableStateOf(false) }\n\n    ExposedDropdownMenuBox(\n        expanded = expanded,\n        onExpandedChange = { expanded = !expanded },\n    ) {\n        OutlinedTextField(\n            modifier = Modifier\n                .menuAnchor(MenuAnchorType.PrimaryNotEditable)\n                .fillMaxWidth()\n                .padding(\n                    horizontal = SettingsItemsPaddings.Horizontal,\n                    vertical = SettingsItemsPaddings.Vertical,\n                ),\n            label = { Text(text = label) },\n            value = options[selectedIndex].toString(),\n            onValueChange = {},\n            readOnly = true,\n            singleLine = true,\n            trailingIcon = {\n                ExposedDropdownMenuDefaults.TrailingIcon(\n                    expanded = expanded,\n                )\n            },\n            colors = ExposedDropdownMenuDefaults.textFieldColors(),\n        )\n\n        ExposedDropdownMenu(\n            modifier = Modifier.exposedDropdownSize(matchTextFieldWidth = true),\n            expanded = expanded,\n            onDismissRequest = { expanded = false },\n        ) {\n            options.forEachIndexed { index, text ->\n                DropdownMenuItem(\n                    text = { Text(text.toString()) },\n                    onClick = {\n                        onSelect(index)\n                        expanded = false\n                    },\n                    contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding,\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun TriStateItem(\n    label: String,\n    state: TriState,\n    enabled: Boolean = true,\n    onClick: ((TriState) -> Unit)?,\n) {\n    Row(\n        modifier = Modifier\n            .clickable(\n                enabled = enabled && onClick != null,\n                onClick = {\n                    when (state) {\n                        TriState.DISABLED -> onClick?.invoke(TriState.ENABLED_IS)\n                        TriState.ENABLED_IS -> onClick?.invoke(TriState.ENABLED_NOT)\n                        TriState.ENABLED_NOT -> onClick?.invoke(TriState.DISABLED)\n                    }\n                },\n            )\n            .fillMaxWidth()\n            .padding(\n                horizontal = SettingsItemsPaddings.Horizontal,\n                vertical = SettingsItemsPaddings.Vertical,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.large),\n    ) {\n        val stateAlpha = if (enabled && onClick != null) 1f else DISABLED_ALPHA\n\n        Icon(\n            imageVector = when (state) {\n                TriState.DISABLED -> Icons.Rounded.CheckBoxOutlineBlank\n                TriState.ENABLED_IS -> Icons.Rounded.CheckBox\n                TriState.ENABLED_NOT -> Icons.Rounded.DisabledByDefault\n            },\n            contentDescription = null,\n            tint = if (!enabled || state == TriState.DISABLED) {\n                MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = stateAlpha)\n            } else {\n                when (onClick) {\n                    null -> MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA)\n                    else -> MaterialTheme.colorScheme.primary\n                }\n            },\n        )\n        Text(\n            text = label,\n            color = MaterialTheme.colorScheme.onSurface.copy(alpha = stateAlpha),\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n\n@Composable\nfun <T> SelectItem(\n    label: String,\n    options: Array<T>,\n    selectedIndex: Int,\n    modifier: Modifier = Modifier,\n    onSelect: (Int) -> Unit,\n    toString: (T) -> String = { it.toString() },\n) {\n    var expanded by remember { mutableStateOf(false) }\n\n    ExposedDropdownMenuBox(\n        modifier = modifier,\n        expanded = expanded,\n        onExpandedChange = { expanded = !expanded },\n    ) {\n        OutlinedTextField(\n            modifier = Modifier\n                .menuAnchor(MenuAnchorType.PrimaryNotEditable)\n                .fillMaxWidth()\n                .padding(\n                    horizontal = SettingsItemsPaddings.Horizontal,\n                    vertical = SettingsItemsPaddings.Vertical,\n                ),\n            label = { Text(text = label) },\n            value = toString(options[selectedIndex]),\n            onValueChange = {},\n            readOnly = true,\n            singleLine = true,\n            trailingIcon = {\n                ExposedDropdownMenuDefaults.TrailingIcon(\n                    expanded = expanded,\n                )\n            },\n            colors = ExposedDropdownMenuDefaults.textFieldColors(),\n        )\n\n        ExposedDropdownMenu(\n            modifier = Modifier.exposedDropdownSize(),\n            expanded = expanded,\n            onDismissRequest = { expanded = false },\n        ) {\n            options.forEachIndexed { index, option ->\n                DropdownMenuItem(\n                    text = { Text(toString(option)) },\n                    onClick = {\n                        onSelect(index)\n                        expanded = false\n                    },\n                )\n            }\n        }\n    }\n}\n\n@Composable\nfun RepeatingIconButton(\n    modifier: Modifier = Modifier,\n    onClick: () -> Unit,\n    enabled: Boolean = true,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    maxDelayMillis: Long = 750,\n    minDelayMillis: Long = 5,\n    delayDecayFactor: Float = .25f,\n    content: @Composable () -> Unit,\n) {\n    val currentClickListener by rememberUpdatedState(onClick)\n    var pressed by remember { mutableStateOf(false) }\n\n    IconButton(\n        modifier = modifier.pointerInteropFilter {\n            pressed = when (it.action) {\n                MotionEvent.ACTION_DOWN -> true\n\n                else -> false\n            }\n\n            true\n        },\n        onClick = {},\n        enabled = enabled,\n        interactionSource = interactionSource,\n        content = content,\n    )\n\n    LaunchedEffect(pressed, enabled) {\n        var currentDelayMillis = maxDelayMillis\n\n        while (enabled && pressed) {\n            currentClickListener()\n            delay(currentDelayMillis)\n            currentDelayMillis =\n                (currentDelayMillis - (currentDelayMillis * delayDecayFactor))\n                    .toLong().coerceAtLeast(minDelayMillis)\n        }\n    }\n}\n\n@Composable\nfun OutlinedNumericChooser(\n    label: String,\n    placeholder: String,\n    suffix: String,\n    value: Int,\n    step: Int,\n    min: Int? = null,\n    onValueChanged: (Int) -> Unit,\n) {\n    var currentValue = value\n\n    val updateValue: (Boolean) -> Unit = {\n        currentValue += if (it) step else -step\n\n        if (min != null) currentValue = if (currentValue < min) min else currentValue\n\n        onValueChanged(currentValue)\n    }\n\n    Row(verticalAlignment = Alignment.CenterVertically) {\n        RepeatingIconButton(\n            onClick = { updateValue(false) },\n        ) { Icon(imageVector = Icons.Outlined.RemoveCircle, contentDescription = null) }\n\n        OutlinedTextField(\n            value = \"%d\".format(currentValue),\n            modifier = Modifier.widthIn(min = 140.dp),\n\n            onValueChange = {\n                // Don't allow multiple decimal points, non-numeric characters, or leading zeros\n                currentValue = it.trim().replace(Regex(\"[^-\\\\d.]\"), \"\").toIntOrNull()\n                    ?: currentValue\n                onValueChanged(currentValue)\n            },\n\n            label = { Text(text = label) },\n            placeholder = { Text(text = placeholder) },\n            suffix = { Text(text = suffix) },\n\n            singleLine = true,\n            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),\n        )\n\n        RepeatingIconButton(\n            onClick = { updateValue(true) },\n        ) { Icon(imageVector = Icons.Outlined.AddCircle, contentDescription = null) }\n    }\n}\n\n@Composable\nfun TextItem(\n    label: String,\n    value: String,\n    onChange: (String) -> Unit,\n) {\n    OutlinedTextField(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(horizontal = SettingsItemsPaddings.Horizontal, vertical = 4.dp),\n        label = { Text(text = label) },\n        value = value,\n        onValueChange = onChange,\n        singleLine = true,\n    )\n}\n\n@Composable\nfun SettingsChipRow(\n    labelRes: StringResource,\n    content: @Composable FlowRowScope.() -> Unit,\n) {\n    Column {\n        HeadingItem(labelRes)\n        FlowRow(\n            modifier = Modifier.padding(\n                start = SettingsItemsPaddings.Horizontal,\n                top = 0.dp,\n                end = SettingsItemsPaddings.Horizontal,\n                bottom = SettingsItemsPaddings.Vertical,\n            ),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            content = content,\n        )\n    }\n}\n\n@Composable\nfun SettingsIconGrid(labelRes: StringResource, content: LazyGridScope.() -> Unit) {\n    Column {\n        HeadingItem(labelRes)\n        LazyVerticalGrid(\n            columns = GridCells.Adaptive(128.dp),\n            modifier = Modifier.padding(\n                start = SettingsItemsPaddings.Horizontal,\n                end = SettingsItemsPaddings.Horizontal,\n                bottom = SettingsItemsPaddings.Vertical,\n            ),\n            verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall),\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            content = content,\n        )\n    }\n}\n\n@Composable\nprivate fun BaseSettingsItem(\n    label: String,\n    widget: @Composable RowScope.() -> Unit,\n    onClick: () -> Unit,\n) {\n    Row(\n        modifier = Modifier\n            .clickable(onClick = onClick)\n            .fillMaxWidth()\n            .padding(\n                horizontal = SettingsItemsPaddings.Horizontal,\n                vertical = SettingsItemsPaddings.Vertical,\n            ),\n        verticalAlignment = Alignment.CenterVertically,\n        horizontalArrangement = Arrangement.spacedBy(24.dp),\n    ) {\n        widget(this)\n        Text(\n            text = label,\n            style = MaterialTheme.typography.bodyMedium,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/TwoPanelBox.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxScope\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.asPaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun TwoPanelBox(\n    startContent: @Composable BoxScope.() -> Unit,\n    endContent: @Composable BoxScope.() -> Unit,\n    modifier: Modifier = Modifier,\n    contentWindowInsets: WindowInsets = WindowInsets(0),\n) {\n    val direction = LocalLayoutDirection.current\n    val padding = contentWindowInsets.asPaddingValues()\n    val startPadding = padding.calculateStartPadding(direction)\n    val endPadding = padding.calculateEndPadding(direction)\n    BoxWithConstraints(modifier = modifier.fillMaxSize()) {\n        val width = maxWidth - startPadding - endPadding\n        val firstWidth = (width / 2).coerceAtMost(450.dp)\n        val secondWidth = width - firstWidth\n        Box(\n            modifier = Modifier\n                .align(Alignment.TopStart)\n                .width(firstWidth + startPadding),\n            content = startContent,\n        )\n        Box(\n            modifier = Modifier\n                .align(Alignment.TopEnd)\n                .width(secondWidth + endPadding),\n            content = endContent,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/VerticalFastScroller.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport android.view.ViewConfiguration\nimport androidx.compose.animation.core.Animatable\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.gestures.Orientation\nimport androidx.compose.foundation.gestures.draggable\nimport androidx.compose.foundation.gestures.rememberDraggableState\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.interaction.collectIsDraggedAsState\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyListItemInfo\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.grid.GridCells\nimport androidx.compose.foundation.lazy.grid.LazyGridState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.systemGestureExclusion\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableFloatStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.layout.SubcomposeLayout\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.Constraints\nimport androidx.compose.ui.unit.Density\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.IntOffset\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastFirstOrNull\nimport androidx.compose.ui.util.fastForEach\nimport androidx.compose.ui.util.fastMaxBy\nimport kotlinx.coroutines.FlowPreview\nimport kotlinx.coroutines.channels.BufferOverflow\nimport kotlinx.coroutines.flow.MutableSharedFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.sample\nimport tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX\nimport kotlin.math.abs\nimport kotlin.math.max\nimport kotlin.math.min\nimport kotlin.math.roundToInt\n\n/**\n * Draws vertical fast scroller to a lazy list\n *\n * Set key with [STICKY_HEADER_KEY_PREFIX] prefix to any sticky header item in the list.\n */\n@OptIn(FlowPreview::class)\n@Composable\nfun VerticalFastScroller(\n    listState: LazyListState,\n    modifier: Modifier = Modifier,\n    thumbAllowed: () -> Boolean = { true },\n    thumbColor: Color = MaterialTheme.colorScheme.primary,\n    topContentPadding: Dp = Dp.Hairline,\n    bottomContentPadding: Dp = Dp.Hairline,\n    endContentPadding: Dp = Dp.Hairline,\n    content: @Composable () -> Unit,\n) {\n    SubcomposeLayout(modifier = modifier) { constraints ->\n        val contentPlaceable = subcompose(\"content\", content).map { it.measure(constraints) }\n        val contentHeight = contentPlaceable.fastMaxBy { it.height }?.height ?: 0\n        val contentWidth = contentPlaceable.fastMaxBy { it.width }?.width ?: 0\n\n        val scrollerConstraints = constraints.copy(minWidth = 0, minHeight = 0)\n        val scrollerPlaceable = subcompose(\"scroller\") {\n            val layoutInfo = listState.layoutInfo\n            val showScroller = layoutInfo.visibleItemsInfo.size < layoutInfo.totalItemsCount\n            if (!showScroller) return@subcompose\n\n            val thumbTopPadding = with(LocalDensity.current) { topContentPadding.toPx() }\n            var thumbOffsetY by remember(thumbTopPadding) { mutableFloatStateOf(thumbTopPadding) }\n\n            val dragInteractionSource = remember { MutableInteractionSource() }\n            val isThumbDragged by dragInteractionSource.collectIsDraggedAsState()\n            val scrolled = remember {\n                MutableSharedFlow<Unit>(\n                    extraBufferCapacity = 1,\n                    onBufferOverflow = BufferOverflow.DROP_OLDEST,\n                )\n            }\n\n            val thumbBottomPadding = with(LocalDensity.current) { bottomContentPadding.toPx() }\n            val heightPx = contentHeight.toFloat() - thumbTopPadding -\n                thumbBottomPadding - listState.layoutInfo.afterContentPadding\n            val thumbHeightPx = with(LocalDensity.current) { ThumbLength.toPx() }\n            val trackHeightPx = heightPx - thumbHeightPx\n\n            // When thumb dragged\n            LaunchedEffect(thumbOffsetY) {\n                if (layoutInfo.totalItemsCount == 0 || !isThumbDragged) return@LaunchedEffect\n                val scrollRatio = (thumbOffsetY - thumbTopPadding) / trackHeightPx\n                val scrollItem = layoutInfo.totalItemsCount * scrollRatio\n                val scrollItemRounded = scrollItem.roundToInt()\n                val scrollItemSize = layoutInfo.visibleItemsInfo.find { it.index == scrollItemRounded }?.size ?: 0\n                val scrollItemOffset = scrollItemSize * (scrollItem - scrollItemRounded)\n                listState.scrollToItem(\n                    index = scrollItemRounded,\n                    scrollOffset = scrollItemOffset.roundToInt(),\n                )\n                scrolled.tryEmit(Unit)\n            }\n\n            // When list scrolled\n            LaunchedEffect(listState.firstVisibleItemScrollOffset) {\n                if (listState.layoutInfo.totalItemsCount == 0 || isThumbDragged) return@LaunchedEffect\n                val scrollOffset = computeScrollOffset(state = listState)\n                val scrollRange = computeScrollRange(state = listState)\n                val proportion = scrollOffset.toFloat() / (scrollRange.toFloat() - heightPx)\n                thumbOffsetY = trackHeightPx * proportion + thumbTopPadding\n                scrolled.tryEmit(Unit)\n            }\n\n            // Thumb alpha\n            val alpha = remember { Animatable(0f) }\n            val isThumbVisible = alpha.value > 0f\n            LaunchedEffect(scrolled, alpha) {\n                scrolled\n                    .sample(100)\n                    .collectLatest {\n                        if (thumbAllowed()) {\n                            alpha.snapTo(1f)\n                            alpha.animateTo(0f, animationSpec = FadeOutAnimationSpec)\n                        } else {\n                            alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec)\n                        }\n                    }\n            }\n\n            Box(\n                modifier = Modifier\n                    .offset { IntOffset(0, thumbOffsetY.roundToInt()) }\n                    .then(\n                        // Recompose opts\n                        if (isThumbVisible && !listState.isScrollInProgress) {\n                            Modifier.draggable(\n                                interactionSource = dragInteractionSource,\n                                orientation = Orientation.Vertical,\n                                state = rememberDraggableState { delta ->\n                                    val newOffsetY = thumbOffsetY + delta\n                                    thumbOffsetY = newOffsetY.coerceIn(\n                                        thumbTopPadding,\n                                        thumbTopPadding + trackHeightPx,\n                                    )\n                                },\n                            )\n                        } else {\n                            Modifier\n                        },\n                    )\n                    .then(\n                        // Exclude thumb from gesture area only when needed\n                        if (isThumbVisible && !isThumbDragged && !listState.isScrollInProgress) {\n                            Modifier.systemGestureExclusion()\n                        } else {\n                            Modifier\n                        },\n                    )\n                    .height(ThumbLength)\n                    .padding(horizontal = 8.dp)\n                    .padding(end = endContentPadding)\n                    .width(ThumbThickness)\n                    .alpha(alpha.value)\n                    .background(color = thumbColor, shape = ThumbShape),\n            )\n        }.map { it.measure(scrollerConstraints) }\n        val scrollerWidth = scrollerPlaceable.fastMaxBy { it.width }?.width ?: 0\n\n        layout(contentWidth, contentHeight) {\n            contentPlaceable.fastForEach {\n                it.place(0, 0)\n            }\n            scrollerPlaceable.fastForEach {\n                it.placeRelative(contentWidth - scrollerWidth, 0)\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun rememberColumnWidthSums(\n    columns: GridCells,\n    horizontalArrangement: Arrangement.Horizontal,\n    contentPadding: PaddingValues,\n) = remember<Density.(Constraints) -> List<Int>>(\n    columns,\n    horizontalArrangement,\n    contentPadding,\n) {\n    { constraints ->\n        require(constraints.maxWidth != Constraints.Infinity) {\n            \"LazyVerticalGrid's width should be bound by parent\"\n        }\n        val horizontalPadding = contentPadding.calculateStartPadding(LayoutDirection.Ltr) +\n            contentPadding.calculateEndPadding(LayoutDirection.Ltr)\n        val gridWidth = constraints.maxWidth - horizontalPadding.roundToPx()\n        with(columns) {\n            calculateCrossAxisCellSizes(\n                gridWidth,\n                horizontalArrangement.spacing.roundToPx(),\n            ).toMutableList().apply {\n                for (i in 1..<size) {\n                    this[i] += this[i - 1]\n                }\n            }\n        }\n    }\n}\n\n@OptIn(FlowPreview::class)\n@Composable\nfun VerticalGridFastScroller(\n    state: LazyGridState,\n    columns: GridCells,\n    arrangement: Arrangement.Horizontal,\n    contentPadding: PaddingValues,\n    modifier: Modifier = Modifier,\n    thumbAllowed: () -> Boolean = { true },\n    thumbColor: Color = MaterialTheme.colorScheme.primary,\n    topContentPadding: Dp = Dp.Hairline,\n    bottomContentPadding: Dp = Dp.Hairline,\n    endContentPadding: Dp = Dp.Hairline,\n    content: @Composable () -> Unit,\n) {\n    val slotSizesSums = rememberColumnWidthSums(\n        columns = columns,\n        horizontalArrangement = arrangement,\n        contentPadding = contentPadding,\n    )\n\n    SubcomposeLayout(modifier = modifier) { constraints ->\n        val contentPlaceable = subcompose(\"content\", content).map { it.measure(constraints) }\n        val contentHeight = contentPlaceable.fastMaxBy { it.height }?.height ?: 0\n        val contentWidth = contentPlaceable.fastMaxBy { it.width }?.width ?: 0\n\n        val scrollerConstraints = constraints.copy(minWidth = 0, minHeight = 0)\n        val scrollerPlaceable = subcompose(\"scroller\") {\n            val layoutInfo = state.layoutInfo\n            val showScroller = layoutInfo.visibleItemsInfo.size < layoutInfo.totalItemsCount\n            if (!showScroller) return@subcompose\n            val thumbTopPadding = with(LocalDensity.current) { topContentPadding.toPx() }\n            var thumbOffsetY by remember(thumbTopPadding) { mutableFloatStateOf(thumbTopPadding) }\n\n            val dragInteractionSource = remember { MutableInteractionSource() }\n            val isThumbDragged by dragInteractionSource.collectIsDraggedAsState()\n            val scrolled = remember {\n                MutableSharedFlow<Unit>(\n                    extraBufferCapacity = 1,\n                    onBufferOverflow = BufferOverflow.DROP_OLDEST,\n                )\n            }\n\n            val thumbBottomPadding = with(LocalDensity.current) { bottomContentPadding.toPx() }\n            val heightPx =\n                contentHeight.toFloat() - thumbTopPadding - thumbBottomPadding - state.layoutInfo.afterContentPadding\n            val thumbHeightPx = with(LocalDensity.current) { ThumbLength.toPx() }\n            val trackHeightPx = heightPx - thumbHeightPx\n\n            val columnCount = remember { slotSizesSums(constraints).size }\n\n            // When thumb dragged\n            LaunchedEffect(thumbOffsetY) {\n                if (layoutInfo.totalItemsCount == 0 || !isThumbDragged) return@LaunchedEffect\n                val scrollRatio = (thumbOffsetY - thumbTopPadding) / trackHeightPx\n                val scrollItem = layoutInfo.totalItemsCount * scrollRatio\n                // I can't think of anything else rn but this'll do\n                val scrollItemWhole = scrollItem.toInt()\n                val columnNum = ((scrollItemWhole + 1) % columnCount).takeIf { it != 0 } ?: columnCount\n                val scrollItemFraction = if (scrollItemWhole == 0) scrollItem else scrollItem % scrollItemWhole\n                val offsetPerItem = 1f / columnCount\n                val offsetRatio = (offsetPerItem * scrollItemFraction) + (offsetPerItem * (columnNum - 1))\n\n                // TODO: Sometimes item height is not available when scrolling up\n                val scrollItemSize = (1..columnCount).maxOf { num ->\n                    val actualIndex = if (num != columnNum) {\n                        scrollItemWhole + num - columnCount\n                    } else {\n                        scrollItemWhole\n                    }\n                    layoutInfo.visibleItemsInfo.find { it.index == actualIndex }?.size?.height ?: 0\n                }\n                val scrollItemOffset = scrollItemSize * offsetRatio\n\n                state.scrollToItem(\n                    index = scrollItemWhole,\n                    scrollOffset = scrollItemOffset.roundToInt(),\n                )\n                scrolled.tryEmit(Unit)\n            }\n\n            // When list scrolled\n            LaunchedEffect(state.firstVisibleItemScrollOffset) {\n                if (state.layoutInfo.totalItemsCount == 0 || isThumbDragged) return@LaunchedEffect\n                val scrollOffset = computeScrollOffset(state = state)\n                val scrollRange = computeScrollRange(state = state)\n                val proportion = scrollOffset.toFloat() / (scrollRange.toFloat() - heightPx)\n                thumbOffsetY = trackHeightPx * proportion + thumbTopPadding\n                scrolled.tryEmit(Unit)\n            }\n\n            // Thumb alpha\n            val alpha = remember { Animatable(0f) }\n            val isThumbVisible = alpha.value > 0f\n            LaunchedEffect(scrolled, alpha) {\n                scrolled\n                    .sample(100)\n                    .collectLatest {\n                        if (thumbAllowed()) {\n                            alpha.snapTo(1f)\n                            alpha.animateTo(0f, animationSpec = FadeOutAnimationSpec)\n                        } else {\n                            alpha.animateTo(0f, animationSpec = ImmediateFadeOutAnimationSpec)\n                        }\n                    }\n            }\n\n            Box(\n                modifier = Modifier\n                    .offset { IntOffset(0, thumbOffsetY.roundToInt()) }\n                    .then(\n                        // Recompose opts\n                        if (isThumbVisible && !state.isScrollInProgress) {\n                            Modifier.draggable(\n                                interactionSource = dragInteractionSource,\n                                orientation = Orientation.Vertical,\n                                state = rememberDraggableState { delta ->\n                                    val newOffsetY = thumbOffsetY + delta\n                                    thumbOffsetY = newOffsetY.coerceIn(\n                                        thumbTopPadding,\n                                        thumbTopPadding + trackHeightPx,\n                                    )\n                                },\n                            )\n                        } else {\n                            Modifier\n                        },\n                    )\n                    .then(\n                        // Exclude thumb from gesture area only when needed\n                        if (isThumbVisible && !isThumbDragged && !state.isScrollInProgress) {\n                            Modifier.systemGestureExclusion()\n                        } else {\n                            Modifier\n                        },\n                    )\n                    .height(ThumbLength)\n                    .padding(end = endContentPadding)\n                    .width(ThumbThickness)\n                    .alpha(alpha.value)\n                    .background(color = thumbColor, shape = ThumbShape),\n            )\n        }.map { it.measure(scrollerConstraints) }\n        val scrollerWidth = scrollerPlaceable.fastMaxBy { it.width }?.width ?: 0\n\n        layout(contentWidth, contentHeight) {\n            contentPlaceable.fastForEach {\n                it.place(0, 0)\n            }\n            scrollerPlaceable.fastForEach {\n                it.placeRelative(contentWidth - scrollerWidth, 0)\n            }\n        }\n    }\n}\n\nprivate fun computeScrollOffset(state: LazyGridState): Int {\n    if (state.layoutInfo.totalItemsCount == 0) return 0\n    val visibleItems = state.layoutInfo.visibleItemsInfo\n    val startChild = visibleItems.first()\n    val endChild = visibleItems.last()\n    val minPosition = min(startChild.index, endChild.index)\n    val maxPosition = max(startChild.index, endChild.index)\n    val itemsBefore = minPosition.coerceAtLeast(0)\n    val startDecoratedTop = startChild.offset.y\n    val laidOutArea = abs((endChild.offset.y + endChild.size.height) - startDecoratedTop)\n    val itemRange = abs(minPosition - maxPosition) + 1\n    val avgSizePerRow = laidOutArea.toFloat() / itemRange\n    return (itemsBefore * avgSizePerRow + (0 - startDecoratedTop)).roundToInt()\n}\n\nprivate fun computeScrollRange(state: LazyGridState): Int {\n    if (state.layoutInfo.totalItemsCount == 0) return 0\n    val visibleItems = state.layoutInfo.visibleItemsInfo\n    val startChild = visibleItems.first()\n    val endChild = visibleItems.last()\n    val laidOutArea = (endChild.offset.y + endChild.size.height) - startChild.offset.y\n    val laidOutRange = abs(startChild.index - endChild.index) + 1\n    return (laidOutArea.toFloat() / laidOutRange * state.layoutInfo.totalItemsCount).roundToInt()\n}\n\nprivate fun computeScrollOffset(state: LazyListState): Int {\n    if (state.layoutInfo.totalItemsCount == 0) return 0\n    val visibleItems = state.layoutInfo.visibleItemsInfo\n    val startChild = visibleItems\n        .fastFirstOrNull { (it.key as? String)?.startsWith(STICKY_HEADER_KEY_PREFIX)?.not() ?: true }!!\n    val endChild = visibleItems.last()\n    val minPosition = min(startChild.index, endChild.index)\n    val maxPosition = max(startChild.index, endChild.index)\n    val itemsBefore = minPosition.coerceAtLeast(0)\n    val startDecoratedTop = startChild.top\n    val laidOutArea = abs(endChild.bottom - startDecoratedTop)\n    val itemRange = abs(minPosition - maxPosition) + 1\n    val avgSizePerRow = laidOutArea.toFloat() / itemRange\n    return (itemsBefore * avgSizePerRow + (0 - startDecoratedTop)).roundToInt()\n}\n\nprivate fun computeScrollRange(state: LazyListState): Int {\n    if (state.layoutInfo.totalItemsCount == 0) return 0\n    val visibleItems = state.layoutInfo.visibleItemsInfo\n    val startChild = visibleItems\n        .fastFirstOrNull { (it.key as? String)?.startsWith(STICKY_HEADER_KEY_PREFIX)?.not() ?: true }!!\n    val endChild = visibleItems.last()\n    val laidOutArea = endChild.bottom - startChild.top\n    val laidOutRange = abs(startChild.index - endChild.index) + 1\n    return (laidOutArea.toFloat() / laidOutRange * state.layoutInfo.totalItemsCount).roundToInt()\n}\n\nobject Scroller {\n    const val STICKY_HEADER_KEY_PREFIX = \"sticky:\"\n}\n\nprivate val ThumbLength = 48.dp\nprivate val ThumbThickness = 12.dp\nprivate val ThumbShape = RoundedCornerShape(ThumbThickness / 2)\nprivate val FadeOutAnimationSpec = tween<Float>(\n    durationMillis = ViewConfiguration.getScrollBarFadeDuration(),\n    delayMillis = 2000,\n)\nprivate val ImmediateFadeOutAnimationSpec = tween<Float>(\n    durationMillis = ViewConfiguration.getScrollBarFadeDuration(),\n)\n\nprivate val LazyListItemInfo.top: Int\n    get() = offset\n\nprivate val LazyListItemInfo.bottom: Int\n    get() = offset + size\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/WheelPicker.kt",
    "content": "package tachiyomi.presentation.core.components\n\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyItemScope\nimport androidx.compose.foundation.lazy.LazyListItemInfo\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.text.BasicTextField\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.foundation.text.input.TextFieldLineLimits\nimport androidx.compose.foundation.text.input.TextFieldState\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.mutableIntStateOf\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.runtime.snapshotFlow\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.hapticfeedback.HapticFeedbackType\nimport androidx.compose.ui.platform.LocalHapticFeedback\nimport androidx.compose.ui.text.TextRange\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.input.ImeAction\nimport androidx.compose.ui.text.input.KeyboardType\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.DpSize\nimport androidx.compose.ui.unit.dp\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide\nimport tachiyomi.presentation.core.util.clickableNoIndication\nimport tachiyomi.presentation.core.util.showSoftKeyboard\nimport kotlin.math.absoluteValue\n\n@Composable\nfun WheelNumberPicker(\n    items: ImmutableList<Number>,\n    modifier: Modifier = Modifier,\n    startIndex: Int = 0,\n    size: DpSize = DpSize(128.dp, 128.dp),\n    onSelectionChanged: (index: Int) -> Unit = {},\n    backgroundContent: (@Composable (size: DpSize) -> Unit)? = {\n        WheelPickerDefaults.Background(size = it)\n    },\n) {\n    WheelPicker(\n        modifier = modifier,\n        startIndex = startIndex,\n        items = items,\n        size = size,\n        onSelectionChanged = onSelectionChanged,\n        manualInputType = KeyboardType.Number,\n        backgroundContent = backgroundContent,\n    ) {\n        WheelPickerDefaults.Item(text = \"$it\")\n    }\n}\n\n@Composable\nfun WheelTextPicker(\n    items: ImmutableList<String>,\n    modifier: Modifier = Modifier,\n    startIndex: Int = 0,\n    size: DpSize = DpSize(128.dp, 128.dp),\n    onSelectionChanged: (index: Int) -> Unit = {},\n    backgroundContent: (@Composable (size: DpSize) -> Unit)? = {\n        WheelPickerDefaults.Background(size = it)\n    },\n) {\n    WheelPicker(\n        modifier = modifier,\n        startIndex = startIndex,\n        items = items,\n        size = size,\n        onSelectionChanged = onSelectionChanged,\n        backgroundContent = backgroundContent,\n    ) {\n        WheelPickerDefaults.Item(text = it)\n    }\n}\n\n@Composable\nprivate fun <T> WheelPicker(\n    items: ImmutableList<T>,\n    modifier: Modifier = Modifier,\n    startIndex: Int = 0,\n    size: DpSize = DpSize(128.dp, 128.dp),\n    onSelectionChanged: (index: Int) -> Unit = {},\n    manualInputType: KeyboardType? = null,\n    backgroundContent: (@Composable (size: DpSize) -> Unit)? = {\n        WheelPickerDefaults.Background(size = it)\n    },\n    itemContent: @Composable LazyItemScope.(item: T) -> Unit,\n) {\n    val haptic = LocalHapticFeedback.current\n    val lazyListState = rememberLazyListState(startIndex)\n\n    var internalIndex by remember { mutableIntStateOf(startIndex) }\n    val internalOnSelectionChanged: (Int) -> Unit = {\n        internalIndex = it\n        onSelectionChanged(it)\n    }\n\n    LaunchedEffect(lazyListState, onSelectionChanged) {\n        snapshotFlow { lazyListState.firstVisibleItemScrollOffset }\n            .map { calculateSnappedItemIndex(lazyListState) }\n            .distinctUntilChanged()\n            .collectLatest {\n                haptic.performHapticFeedback(HapticFeedbackType.TextHandleMove)\n                internalOnSelectionChanged(it)\n            }\n    }\n\n    Box(\n        modifier = modifier\n            .height(size.height)\n            .width(size.width),\n        contentAlignment = Alignment.Center,\n    ) {\n        backgroundContent?.invoke(size)\n\n        var showManualInput by remember { mutableStateOf(false) }\n        if (showManualInput) {\n            val value = rememberSaveable(saver = TextFieldState.Saver) {\n                val currentString = items[internalIndex].toString()\n                TextFieldState(initialText = currentString, initialSelection = TextRange(currentString.length))\n            }\n\n            val scope = rememberCoroutineScope()\n            val processManualInput: () -> Unit = {\n                scope.launch {\n                    items\n                        .indexOfFirst { it.toString() == value.text }\n                        .takeIf { it >= 0 }\n                        ?.apply {\n                            internalOnSelectionChanged(this)\n                            lazyListState.scrollToItem(this)\n                        }\n                    showManualInput = false\n                }\n            }\n\n            BasicTextField(\n                modifier = Modifier\n                    .align(Alignment.Center)\n                    .showSoftKeyboard(true)\n                    .clearFocusOnSoftKeyboardHide(processManualInput),\n                onKeyboardAction = { processManualInput() },\n                state = value,\n                lineLimits = TextFieldLineLimits.SingleLine,\n                keyboardOptions = KeyboardOptions(\n                    keyboardType = manualInputType!!,\n                    imeAction = ImeAction.Done,\n                ),\n                textStyle = MaterialTheme.typography.titleMedium +\n                    TextStyle(\n                        color = MaterialTheme.colorScheme.onSurface,\n                        textAlign = TextAlign.Center,\n                    ),\n                cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),\n            )\n        } else {\n            LazyColumn(\n                modifier = Modifier\n                    .let {\n                        if (manualInputType != null) {\n                            it.clickableNoIndication { showManualInput = true }\n                        } else {\n                            it\n                        }\n                    },\n                state = lazyListState,\n                contentPadding = PaddingValues(\n                    vertical = size.height / ROW_COUNT * ((ROW_COUNT - 1) / 2),\n                ),\n                flingBehavior = rememberSnapFlingBehavior(lazyListState = lazyListState),\n            ) {\n                itemsIndexed(items) { index, item ->\n                    Box(\n                        modifier = Modifier\n                            .height(size.height / ROW_COUNT)\n                            .width(size.width)\n                            .alpha(\n                                calculateAnimatedAlpha(\n                                    lazyListState = lazyListState,\n                                    index = index,\n                                ),\n                            ),\n                        contentAlignment = Alignment.Center,\n                    ) {\n                        itemContent(item)\n                    }\n                }\n            }\n        }\n    }\n}\n\nprivate fun LazyListState.snapOffsetForItem(itemInfo: LazyListItemInfo): Int {\n    val startScrollOffset = 0\n    val endScrollOffset = layoutInfo.let { it.viewportEndOffset - it.afterContentPadding }\n    return startScrollOffset + (endScrollOffset - startScrollOffset - itemInfo.size) / 2\n}\n\nprivate fun LazyListState.distanceToSnapForIndex(index: Int): Int {\n    val itemInfo = layoutInfo.visibleItemsInfo.firstOrNull { it.index == index }\n    if (itemInfo != null) {\n        return itemInfo.offset - snapOffsetForItem(itemInfo)\n    }\n    return 0\n}\n\nprivate fun calculateAnimatedAlpha(\n    lazyListState: LazyListState,\n    index: Int,\n): Float {\n    val distanceToIndexSnap = lazyListState.distanceToSnapForIndex(index).absoluteValue\n    val viewPortHeight = lazyListState.layoutInfo.viewportSize.height.toFloat()\n    val singleViewPortHeight = viewPortHeight / ROW_COUNT\n    return if (distanceToIndexSnap in 0..singleViewPortHeight.toInt()) {\n        1.2f - (distanceToIndexSnap / singleViewPortHeight)\n    } else {\n        0.2f\n    }\n}\n\nprivate fun calculateSnappedItemIndex(lazyListState: LazyListState): Int {\n    return lazyListState.layoutInfo.visibleItemsInfo\n        .maxBy { calculateAnimatedAlpha(lazyListState, it.index) }\n        .index\n}\n\nobject WheelPickerDefaults {\n    @Composable\n    fun Background(size: DpSize) {\n        androidx.compose.material3.Surface(\n            modifier = Modifier\n                .size(size.width, size.height / ROW_COUNT),\n            shape = RoundedCornerShape(MaterialTheme.padding.medium),\n            color = MaterialTheme.colorScheme.primary.copy(alpha = 0.2f),\n            border = BorderStroke(1.dp, MaterialTheme.colorScheme.primary),\n            content = {},\n        )\n    }\n\n    @Composable\n    fun Item(text: String) {\n        Text(\n            text = text,\n            style = MaterialTheme.typography.titleMedium,\n            maxLines = 1,\n        )\n    }\n}\n\nprivate const val ROW_COUNT = 3\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/AlertDialog.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.layout.Box\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.foundation.layout.sizeIn\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.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun AlertDialogContent(\n    buttons: @Composable () -> Unit,\n    modifier: Modifier = Modifier,\n    icon: (@Composable () -> Unit)? = null,\n    title: (@Composable () -> Unit)? = null,\n    text: @Composable () -> Unit,\n) {\n    AlertDialogContent(\n        modifier = modifier,\n        icon = icon,\n        title = title,\n        content = {\n            Column {\n                CompositionLocalProvider(\n                    LocalContentColor provides MaterialTheme.colorScheme.onSurfaceVariant,\n                ) {\n                    val textStyle = MaterialTheme.typography.bodyMedium\n                    ProvideTextStyle(textStyle) {\n                        Box(\n                            Modifier\n                                .weight(weight = 1f, fill = false)\n                                .padding(horizontal = DialogPadding)\n                                .padding(TextPadding)\n                                .align(Alignment.Start),\n                        ) {\n                            text()\n                        }\n                    }\n                }\n                Box(\n                    modifier = Modifier\n                        .padding(\n                            start = DialogPadding,\n                            end = DialogPadding,\n                            bottom = DialogPadding,\n                        )\n                        .align(Alignment.End),\n                ) {\n                    CompositionLocalProvider(\n                        LocalContentColor provides MaterialTheme.colorScheme.primary,\n                    ) {\n                        val textStyle = MaterialTheme.typography.labelLarge\n                        ProvideTextStyle(value = textStyle, content = buttons)\n                    }\n                }\n            }\n        },\n    )\n}\n\n@Composable\nfun AlertDialogContent(\n    modifier: Modifier = Modifier,\n    icon: (@Composable () -> Unit)? = null,\n    title: (@Composable () -> Unit)? = null,\n    content: @Composable (ColumnScope.() -> Unit)? = null,\n) {\n    Column(\n        modifier = modifier\n            .sizeIn(minWidth = MinWidth, maxWidth = MaxWidth),\n    ) {\n        if (icon != null || title != null) {\n            Column(\n                modifier = Modifier\n                    .padding(\n                        start = DialogPadding,\n                        top = DialogPadding,\n                        end = DialogPadding,\n                    )\n                    .fillMaxWidth(),\n            ) {\n                icon?.let {\n                    CompositionLocalProvider(\n                        LocalContentColor provides MaterialTheme.colorScheme.secondary,\n                    ) {\n                        Box(\n                            Modifier\n                                .padding(IconPadding)\n                                .align(Alignment.CenterHorizontally),\n                        ) {\n                            icon()\n                        }\n                    }\n                }\n                title?.let {\n                    CompositionLocalProvider(\n                        LocalContentColor provides MaterialTheme.colorScheme.onSurface,\n                    ) {\n                        val textStyle = MaterialTheme.typography.headlineSmall\n                        ProvideTextStyle(textStyle) {\n                            Box(\n                                // Align the title to the center when an icon is present.\n                                Modifier\n                                    .padding(TitlePadding)\n                                    .align(\n                                        if (icon == null) {\n                                            Alignment.Start\n                                        } else {\n                                            Alignment.CenterHorizontally\n                                        },\n                                    ),\n                            ) {\n                                title()\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        content?.invoke(this)\n    }\n}\n\n// Paddings for each of the dialog's parts.\nprivate val DialogPadding = 24.dp\nprivate val IconPadding = PaddingValues(bottom = 16.dp)\nprivate val TitlePadding = PaddingValues(bottom = 16.dp)\nprivate val TextPadding = PaddingValues(bottom = 24.dp)\n\nprivate val MinWidth = 280.dp\nprivate val MaxWidth = 560.dp\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Button.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.animation.core.Animatable\nimport androidx.compose.animation.core.VectorConverter\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.interaction.FocusInteraction\nimport androidx.compose.foundation.interaction.HoverInteraction\nimport androidx.compose.foundation.interaction.Interaction\nimport androidx.compose.foundation.interaction.InteractionSource\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.interaction.PressInteraction\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.defaultMinSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ColorScheme\nimport androidx.compose.material3.ElevatedButton\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.Stable\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.mutableStateListOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberUpdatedState\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport kotlinx.coroutines.InternalCoroutinesApi\nimport tachiyomi.presentation.core.util.animateElevation\nimport androidx.compose.material3.ButtonDefaults as M3ButtonDefaults\n\n/**\n * TextButton with additional onLongClick functionality.\n *\n * @see androidx.compose.material3.TextButton\n */\n@Composable\nfun TextButton(\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    onLongClick: (() -> Unit)? = null,\n    enabled: Boolean = true,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    elevation: ButtonElevation? = null,\n    shape: Shape = M3ButtonDefaults.textShape,\n    border: BorderStroke? = null,\n    colors: ButtonColors = ButtonColors(\n        containerColor = Color.Transparent,\n        contentColor = MaterialTheme.colorScheme.primary,\n        disabledContainerColor = Color.Transparent,\n        disabledContentColor = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA),\n    ),\n    contentPadding: PaddingValues = M3ButtonDefaults.TextButtonContentPadding,\n    content: @Composable RowScope.() -> Unit,\n) =\n    Button(\n        onClick = onClick,\n        modifier = modifier,\n        onLongClick = onLongClick,\n        enabled = enabled,\n        interactionSource = interactionSource,\n        elevation = elevation,\n        shape = shape,\n        border = border,\n        colors = colors,\n        contentPadding = contentPadding,\n        content = content,\n    )\n\n/**\n * Button with additional onLongClick functionality.\n *\n * @see androidx.compose.material3.TextButton\n */\n@Composable\nfun Button(\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    onLongClick: (() -> Unit)? = null,\n    enabled: Boolean = true,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),\n    shape: Shape = M3ButtonDefaults.textShape,\n    border: BorderStroke? = null,\n    colors: ButtonColors = ButtonDefaults.buttonColors(),\n    contentPadding: PaddingValues = M3ButtonDefaults.ContentPadding,\n    content: @Composable RowScope.() -> Unit,\n) {\n    val containerColor = colors.containerColor(enabled).value\n    val contentColor = colors.contentColor(enabled).value\n    val shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp\n\n    Surface(\n        onClick = onClick,\n        modifier = modifier,\n        onLongClick = onLongClick,\n        shape = shape,\n        color = containerColor,\n        contentColor = contentColor,\n        shadowElevation = shadowElevation,\n        border = border,\n        interactionSource = interactionSource,\n        enabled = enabled,\n    ) {\n        CompositionLocalProvider(LocalContentColor provides contentColor) {\n            ProvideTextStyle(value = MaterialTheme.typography.labelLarge) {\n                Row(\n                    Modifier.defaultMinSize(\n                        minWidth = M3ButtonDefaults.MinWidth,\n                        minHeight = M3ButtonDefaults.MinHeight,\n                    )\n                        .padding(contentPadding),\n                    horizontalArrangement = Arrangement.Center,\n                    verticalAlignment = Alignment.CenterVertically,\n                    content = content,\n                )\n            }\n        }\n    }\n}\n\nobject ButtonDefaults {\n    /**\n     * Creates a [ButtonColors] that represents the default container and content colors used in a\n     * [Button].\n     *\n     * @param containerColor the container color of this [Button] when enabled.\n     * @param contentColor the content color of this [Button] when enabled.\n     * @param disabledContainerColor the container color of this [Button] when not enabled.\n     * @param disabledContentColor the content color of this [Button] when not enabled.\n     */\n    @Composable\n    fun buttonColors(\n        containerColor: Color = MaterialTheme.colorScheme.primary,\n        contentColor: Color = MaterialTheme.colorScheme.onPrimary,\n        disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.12f),\n        disabledContentColor: Color = MaterialTheme.colorScheme.onSurface.copy(alpha = DISABLED_ALPHA),\n    ): ButtonColors = ButtonColors(\n        containerColor = containerColor,\n        contentColor = contentColor,\n        disabledContainerColor = disabledContainerColor,\n        disabledContentColor = disabledContentColor,\n    )\n\n    /**\n     * Creates a [ButtonElevation] that will animate between the provided values according to the\n     * Material specification for a [Button].\n     *\n     * @param defaultElevation the elevation used when the [Button] is enabled, and has no other\n     * [Interaction]s.\n     * @param pressedElevation the elevation used when this [Button] is enabled and pressed.\n     * @param focusedElevation the elevation used when the [Button] is enabled and focused.\n     * @param hoveredElevation the elevation used when the [Button] is enabled and hovered.\n     * @param disabledElevation the elevation used when the [Button] is not enabled.\n     */\n    @Composable\n    fun buttonElevation(\n        defaultElevation: Dp = 0.dp,\n        pressedElevation: Dp = 0.dp,\n        focusedElevation: Dp = 0.dp,\n        hoveredElevation: Dp = 1.dp,\n        disabledElevation: Dp = 0.dp,\n    ): ButtonElevation = ButtonElevation(\n        defaultElevation = defaultElevation,\n        pressedElevation = pressedElevation,\n        focusedElevation = focusedElevation,\n        hoveredElevation = hoveredElevation,\n        disabledElevation = disabledElevation,\n    )\n}\n\n/**\n * Represents the elevation for a button in different states.\n *\n * - See [M3ButtonDefaults.buttonElevation] for the default elevation used in a [Button].\n * - See [M3ButtonDefaults.elevatedButtonElevation] for the default elevation used in a\n * [ElevatedButton].\n */\n@Stable\nclass ButtonElevation internal constructor(\n    private val defaultElevation: Dp,\n    private val pressedElevation: Dp,\n    private val focusedElevation: Dp,\n    private val hoveredElevation: Dp,\n    private val disabledElevation: Dp,\n) {\n    /**\n     * Represents the tonal elevation used in a button, depending on its [enabled] state and\n     * [interactionSource]. This should typically be the same value as the [shadowElevation].\n     *\n     * Tonal elevation is used to apply a color shift to the surface to give the it higher emphasis.\n     * When surface's color is [ColorScheme.surface], a higher elevation will result in a darker\n     * color in light theme and lighter color in dark theme.\n     *\n     * See [shadowElevation] which controls the elevation of the shadow drawn around the button.\n     *\n     * @param enabled whether the button is enabled\n     * @param interactionSource the [InteractionSource] for this button\n     */\n    @Composable\n    internal fun tonalElevation(enabled: Boolean, interactionSource: InteractionSource): State<Dp> {\n        return animateElevation(enabled = enabled, interactionSource = interactionSource)\n    }\n\n    /**\n     * Represents the shadow elevation used in a button, depending on its [enabled] state and\n     * [interactionSource]. This should typically be the same value as the [tonalElevation].\n     *\n     * Shadow elevation is used to apply a shadow around the button to give it higher emphasis.\n     *\n     * See [tonalElevation] which controls the elevation with a color shift to the surface.\n     *\n     * @param enabled whether the button is enabled\n     * @param interactionSource the [InteractionSource] for this button\n     */\n    @Composable\n    internal fun shadowElevation(\n        enabled: Boolean,\n        interactionSource: InteractionSource,\n    ): State<Dp> {\n        return animateElevation(enabled = enabled, interactionSource = interactionSource)\n    }\n\n    @OptIn(InternalCoroutinesApi::class)\n    @Composable\n    private fun animateElevation(\n        enabled: Boolean,\n        interactionSource: InteractionSource,\n    ): State<Dp> {\n        val interactions = remember { mutableStateListOf<Interaction>() }\n        LaunchedEffect(interactionSource) {\n            interactionSource.interactions.collect { interaction ->\n                when (interaction) {\n                    is HoverInteraction.Enter -> {\n                        interactions.add(interaction)\n                    }\n                    is HoverInteraction.Exit -> {\n                        interactions.remove(interaction.enter)\n                    }\n                    is FocusInteraction.Focus -> {\n                        interactions.add(interaction)\n                    }\n                    is FocusInteraction.Unfocus -> {\n                        interactions.remove(interaction.focus)\n                    }\n                    is PressInteraction.Press -> {\n                        interactions.add(interaction)\n                    }\n                    is PressInteraction.Release -> {\n                        interactions.remove(interaction.press)\n                    }\n                    is PressInteraction.Cancel -> {\n                        interactions.remove(interaction.press)\n                    }\n                }\n            }\n        }\n\n        val interaction = interactions.lastOrNull()\n\n        val target =\n            if (!enabled) {\n                disabledElevation\n            } else {\n                when (interaction) {\n                    is PressInteraction.Press -> pressedElevation\n                    is HoverInteraction.Enter -> hoveredElevation\n                    is FocusInteraction.Focus -> focusedElevation\n                    else -> defaultElevation\n                }\n            }\n\n        val animatable = remember { Animatable(target, Dp.VectorConverter) }\n\n        if (!enabled) {\n            // No transition when moving to a disabled state\n            LaunchedEffect(target) { animatable.snapTo(target) }\n        } else {\n            LaunchedEffect(target) {\n                val lastInteraction = when (animatable.targetValue) {\n                    pressedElevation -> PressInteraction.Press(Offset.Zero)\n                    hoveredElevation -> HoverInteraction.Enter()\n                    focusedElevation -> FocusInteraction.Focus()\n                    else -> null\n                }\n                animatable.animateElevation(\n                    from = lastInteraction,\n                    to = interaction,\n                    target = target,\n                )\n            }\n        }\n\n        return animatable.asState()\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other == null || other !is ButtonElevation) return false\n\n        if (defaultElevation != other.defaultElevation) return false\n        if (pressedElevation != other.pressedElevation) return false\n        if (focusedElevation != other.focusedElevation) return false\n        if (hoveredElevation != other.hoveredElevation) return false\n        if (disabledElevation != other.disabledElevation) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = defaultElevation.hashCode()\n        result = 31 * result + pressedElevation.hashCode()\n        result = 31 * result + focusedElevation.hashCode()\n        result = 31 * result + hoveredElevation.hashCode()\n        result = 31 * result + disabledElevation.hashCode()\n        return result\n    }\n}\n\n/**\n * Represents the container and content colors used in a button in different states.\n *\n * - See [M3ButtonDefaults.buttonColors] for the default colors used in a [Button].\n * - See [M3ButtonDefaults.elevatedButtonColors] for the default colors used in a [ElevatedButton].\n * - See [M3ButtonDefaults.textButtonColors] for the default colors used in a [TextButton].\n */\n@Immutable\nclass ButtonColors internal constructor(\n    private val containerColor: Color,\n    private val contentColor: Color,\n    private val disabledContainerColor: Color,\n    private val disabledContentColor: Color,\n) {\n    /**\n     * Represents the container color for this button, depending on [enabled].\n     *\n     * @param enabled whether the button is enabled\n     */\n    @Composable\n    internal fun containerColor(enabled: Boolean): State<Color> {\n        return rememberUpdatedState(if (enabled) containerColor else disabledContainerColor)\n    }\n\n    /**\n     * Represents the content color for this button, depending on [enabled].\n     *\n     * @param enabled whether the button is enabled\n     */\n    @Composable\n    internal fun contentColor(enabled: Boolean): State<Color> {\n        return rememberUpdatedState(if (enabled) contentColor else disabledContentColor)\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other == null || other !is ButtonColors) return false\n\n        if (containerColor != other.containerColor) return false\n        if (contentColor != other.contentColor) return false\n        if (disabledContainerColor != other.disabledContainerColor) return false\n        if (disabledContentColor != other.disabledContentColor) return false\n\n        return true\n    }\n\n    override fun hashCode(): Int {\n        var result = containerColor.hashCode()\n        result = 31 * result + contentColor.hashCode()\n        result = 31 * result + disabledContainerColor.hashCode()\n        result = 31 * result + disabledContentColor.hashCode()\n        return result\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Constants.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.ui.unit.dp\n\nval topSmallPaddingValues = PaddingValues(top = MaterialTheme.padding.small)\n\nconst val DISABLED_ALPHA = .38f\nconst val SECONDARY_ALPHA = .78f\n\nclass Padding {\n\n    val extraLarge = 32.dp\n\n    val large = 24.dp\n\n    val medium = 16.dp\n\n    val mediumSmall = 12.dp\n\n    val small = 8.dp\n\n    val extraSmall = 4.dp\n}\n\nval MaterialTheme.padding: Padding\n    get() = Padding()\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/FloatingActionButton.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.core.CubicBezierEasing\nimport androidx.compose.animation.core.animateDpAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.expandHorizontally\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.shrinkHorizontally\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.material3.FloatingActionButton\nimport androidx.compose.material3.FloatingActionButtonDefaults\nimport androidx.compose.material3.FloatingActionButtonElevation\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\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.Color\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.unit.dp\n\n/**\n * ExtendedFloatingActionButton with custom transition between collapsed/expanded state.\n *\n * @see androidx.compose.material3.ExtendedFloatingActionButton\n */\n@Composable\nfun ExtendedFloatingActionButton(\n    text: @Composable () -> Unit,\n    icon: @Composable () -> Unit,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    expanded: Boolean = true,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    shape: Shape = MaterialTheme.shapes.large,\n    containerColor: Color = MaterialTheme.colorScheme.primaryContainer,\n    contentColor: Color = contentColorFor(containerColor),\n    elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),\n) {\n    FloatingActionButton(\n        modifier = modifier,\n        onClick = onClick,\n        interactionSource = interactionSource,\n        shape = shape,\n        containerColor = containerColor,\n        contentColor = contentColor,\n        elevation = elevation,\n    ) {\n        val minWidth by animateDpAsState(\n            targetValue = if (expanded) ExtendedFabMinimumWidth else FabContainerWidth,\n            animationSpec = tween(\n                durationMillis = 500,\n                easing = EasingEmphasizedCubicBezier,\n            ),\n            label = \"minWidth\",\n        )\n        val startPadding by animateDpAsState(\n            targetValue = if (expanded) ExtendedFabIconSize / 2 else 0.dp,\n            animationSpec = tween(\n                durationMillis = if (expanded) 300 else 900,\n                easing = EasingEmphasizedCubicBezier,\n            ),\n            label = \"startPadding\",\n        )\n\n        Row(\n            modifier = Modifier\n                .sizeIn(minWidth = minWidth)\n                .padding(start = startPadding),\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.Center,\n        ) {\n            icon()\n            AnimatedVisibility(\n                visible = expanded,\n                enter = ExtendedFabExpandAnimation,\n                exit = ExtendedFabCollapseAnimation,\n            ) {\n                Box(modifier = Modifier.padding(start = ExtendedFabIconPadding, end = ExtendedFabTextPadding)) {\n                    text()\n                }\n            }\n        }\n    }\n}\n\nprivate val EasingLinearCubicBezier = CubicBezierEasing(0.0f, 0.0f, 1.0f, 1.0f)\nprivate val EasingEmphasizedCubicBezier = CubicBezierEasing(0.2f, 0.0f, 0.0f, 1.0f)\n\nprivate val ExtendedFabMinimumWidth = 80.dp\nprivate val ExtendedFabIconSize = 24.0.dp\nprivate val ExtendedFabIconPadding = 12.dp\nprivate val ExtendedFabTextPadding = 20.dp\n\nprivate val ExtendedFabCollapseAnimation = fadeOut(\n    animationSpec = tween(\n        durationMillis = 100,\n        easing = EasingLinearCubicBezier,\n    ),\n) + shrinkHorizontally(\n    animationSpec = tween(\n        durationMillis = 500,\n        easing = EasingEmphasizedCubicBezier,\n    ),\n    shrinkTowards = Alignment.Start,\n)\n\nprivate val ExtendedFabExpandAnimation = fadeIn(\n    animationSpec = tween(\n        durationMillis = 200,\n        delayMillis = 100,\n        easing = EasingLinearCubicBezier,\n    ),\n) + expandHorizontally(\n    animationSpec = tween(\n        durationMillis = 500,\n        easing = EasingEmphasizedCubicBezier,\n    ),\n    expandFrom = Alignment.Start,\n)\n\nprivate val FabContainerWidth = 56.0.dp\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/IconButtonTokens.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.ui.unit.dp\n\n/**\n * Exposing some internal tokens.\n *\n * @see androidx.compose.material3.tokens.IconButtonTokens\n */\nobject IconButtonTokens {\n    val StateLayerSize = 40.0.dp\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/IconToggleButton.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.FilledIconToggleButton\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.style.TextOverflow\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun IconToggleButton(\n    checked: Boolean,\n    onCheckedChange: (Boolean) -> Unit,\n    imageVector: ImageVector,\n    title: String,\n    modifier: Modifier = Modifier,\n) {\n    FilledIconToggleButton(\n        checked = checked,\n        onCheckedChange = onCheckedChange,\n        modifier = modifier\n            .height(48.dp),\n    ) {\n        Row(\n            horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            verticalAlignment = Alignment.CenterVertically,\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(MaterialTheme.padding.small),\n        ) {\n            Icon(\n                imageVector = imageVector,\n                contentDescription = null,\n            )\n\n            Text(\n                text = title,\n                maxLines = 2,\n                overflow = TextOverflow.Ellipsis,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/NavigationBar.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.selection.selectableGroup\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.NavigationBarDefaults\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\n/**\n * M3 Navbar with no horizontal spacer\n *\n * @see [androidx.compose.material3.NavigationBar]\n */\n@Composable\nfun NavigationBar(\n    modifier: Modifier = Modifier,\n    containerColor: Color = NavigationBarDefaults.containerColor,\n    contentColor: Color = MaterialTheme.colorScheme.contentColorFor(containerColor),\n    tonalElevation: Dp = NavigationBarDefaults.Elevation,\n    windowInsets: WindowInsets = NavigationBarDefaults.windowInsets,\n    content: @Composable RowScope.() -> Unit,\n) {\n    androidx.compose.material3.Surface(\n        color = containerColor,\n        contentColor = contentColor,\n        tonalElevation = tonalElevation,\n        modifier = modifier,\n    ) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .windowInsetsPadding(windowInsets)\n                .height(80.dp)\n                .selectableGroup(),\n            content = content,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/NavigationRail.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\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.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.widthIn\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.selection.selectableGroup\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.NavigationRailDefaults\nimport androidx.compose.material3.contentColorFor\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.unit.dp\n\n/**\n * Center-aligned M3 Navigation rail\n *\n * @see [androidx.compose.material3.NavigationRail]\n */\n@Composable\nfun NavigationRail(\n    modifier: Modifier = Modifier,\n    containerColor: Color = NavigationRailDefaults.ContainerColor,\n    contentColor: Color = contentColorFor(containerColor),\n    header: @Composable (ColumnScope.() -> Unit)? = null,\n    windowInsets: WindowInsets = NavigationRailDefaults.windowInsets,\n    content: @Composable ColumnScope.() -> Unit,\n) {\n    androidx.compose.material3.Surface(\n        color = containerColor,\n        contentColor = contentColor,\n        modifier = modifier,\n        tonalElevation = 3.dp,\n    ) {\n        Column(\n            Modifier\n                .fillMaxHeight()\n                .windowInsetsPadding(windowInsets)\n                .widthIn(min = 80.dp)\n                .padding(vertical = MaterialTheme.padding.extraSmall)\n                .selectableGroup(),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.spacedBy(\n                MaterialTheme.padding.extraSmall,\n                alignment = Alignment.CenterVertically,\n            ),\n        ) {\n            if (header != null) {\n                header()\n                Spacer(Modifier.height(MaterialTheme.padding.small))\n            }\n            content()\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/PullRefresh.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.pulltorefresh.PullToRefreshDefaults\nimport androidx.compose.material3.pulltorefresh.pullToRefresh\nimport androidx.compose.material3.pulltorefresh.rememberPullToRefreshState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n/**\n * @param refreshing Whether the layout is currently refreshing\n * @param onRefresh Lambda which is invoked when a swipe to refresh gesture is completed.\n * @param enabled Whether the the layout should react to swipe gestures or not.\n * @param indicatorPadding Content padding for the indicator, to inset the indicator in if required.\n * @param content The content containing a vertically scrollable composable.\n */\n@Composable\nfun PullRefresh(\n    refreshing: Boolean,\n    enabled: Boolean,\n    onRefresh: () -> Unit,\n    modifier: Modifier = Modifier,\n    indicatorPadding: PaddingValues = PaddingValues(0.dp),\n    content: @Composable () -> Unit,\n) {\n    val state = rememberPullToRefreshState()\n    Box(\n        modifier = modifier\n            .pullToRefresh(\n                isRefreshing = refreshing,\n                state = state,\n                enabled = enabled,\n                onRefresh = onRefresh,\n            ),\n    ) {\n        content()\n\n        PullToRefreshDefaults.Indicator(\n            modifier = Modifier\n                .align(Alignment.TopCenter)\n                .padding(indicatorPadding),\n            isRefreshing = refreshing,\n            state = state,\n            containerColor = MaterialTheme.colorScheme.surfaceVariant,\n            color = MaterialTheme.colorScheme.onSurfaceVariant,\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Scaffold.kt",
    "content": "/*\n * Copyright 2021 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 *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@file:Suppress(\"KDocUnresolvedReference\")\n\npackage tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.layout.MutableWindowInsets\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.asPaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.foundation.layout.exclude\nimport androidx.compose.foundation.layout.onConsumedWindowInsetsChanged\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ScaffoldDefaults\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.layout.SubcomposeLayout\nimport androidx.compose.ui.unit.Constraints\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.max\nimport androidx.compose.ui.util.fastForEach\nimport androidx.compose.ui.util.fastMap\nimport androidx.compose.ui.util.fastMaxBy\nimport kotlin.math.max\n\n/**\n * <a href=\"https://material.io/design/layout/understanding-layout.html\" class=\"external\" target=\"_blank\">Material Design layout</a>.\n *\n * Scaffold implements the basic material design visual layout structure.\n *\n * This component provides API to put together several material components to construct your\n * screen, by ensuring proper layout strategy for them and collecting necessary data so these\n * components will work together correctly.\n *\n * Simple example of a Scaffold with [SmallTopAppBar], [FloatingActionButton]:\n *\n * @sample androidx.compose.material3.samples.SimpleScaffoldWithTopBar\n *\n * To show a [Snackbar], use [SnackbarHostState.showSnackbar].\n *\n * @sample androidx.compose.material3.samples.ScaffoldWithSimpleSnackbar\n *\n * Tachiyomi changes:\n * * Pass scroll behavior to top bar by default\n * * Remove height constraint for expanded app bar\n * * Also take account of fab height when providing inner padding\n * * Fixes for fab and snackbar horizontal placements when [contentWindowInsets] is used\n * * Handle consumed window insets\n * * Add startBar slot for Navigation Rail\n *\n * @param modifier the [Modifier] to be applied to this scaffold\n * @param topBar top app bar of the screen, typically a [SmallTopAppBar]\n * @param startBar side bar on the start of the screen, typically a [NavigationRail]\n * @param bottomBar bottom bar of the screen, typically a [NavigationBar]\n * @param snackbarHost component to host [Snackbar]s that are pushed to be shown via\n * [SnackbarHostState.showSnackbar], typically a [SnackbarHost]\n * @param floatingActionButton Main action button of the screen, typically a [FloatingActionButton]\n * @param floatingActionButtonPosition position of the FAB on the screen. See [FabPosition].\n * @param containerColor the color used for the background of this scaffold. Use [Color.Transparent]\n * to have no color.\n * @param contentColor the preferred color for content inside this scaffold. Defaults to either the\n * matching content color for [containerColor], or to the current [LocalContentColor] if\n * [containerColor] is not a color from the theme.\n * @param contentWindowInsets window insets to be passed to content slot via PaddingValues params.\n * Scaffold will take the insets into account from the top/bottom only if the topBar/ bottomBar\n * are not present, as the scaffold expect topBar/bottomBar to handle insets instead\n * @param content content of the screen. The lambda receives a [PaddingValues] that should be\n * applied to the content root via [Modifier.padding] and [Modifier.consumeWindowInsets] to\n * properly offset top and bottom bars. If using [Modifier.verticalScroll], apply this modifier to\n * the child of the scroll, and not on the scroll itself.\n */\n@ExperimentalMaterial3Api\n@Composable\nfun Scaffold(\n    modifier: Modifier = Modifier,\n    topBarScrollBehavior: TopAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(\n        rememberTopAppBarState(),\n    ),\n    topBar: @Composable (TopAppBarScrollBehavior) -> Unit = {},\n    bottomBar: @Composable () -> Unit = {},\n    startBar: @Composable () -> Unit = {},\n    snackbarHost: @Composable () -> Unit = {},\n    floatingActionButton: @Composable () -> Unit = {},\n    floatingActionButtonPosition: FabPosition = FabPosition.End,\n    containerColor: Color = MaterialTheme.colorScheme.background,\n    contentColor: Color = contentColorFor(containerColor),\n    contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,\n    content: @Composable (PaddingValues) -> Unit,\n) {\n    // Tachiyomi: Handle consumed window insets\n    val remainingWindowInsets = remember { MutableWindowInsets() }\n    androidx.compose.material3.Surface(\n        modifier = Modifier\n            .nestedScroll(topBarScrollBehavior.nestedScrollConnection)\n            .onConsumedWindowInsetsChanged {\n                remainingWindowInsets.insets = contentWindowInsets.exclude(\n                    it,\n                )\n            }\n            .then(modifier),\n        color = containerColor,\n        contentColor = contentColor,\n    ) {\n        ScaffoldLayout(\n            fabPosition = floatingActionButtonPosition,\n            topBar = { topBar(topBarScrollBehavior) },\n            startBar = startBar,\n            bottomBar = bottomBar,\n            content = content,\n            snackbar = snackbarHost,\n            contentWindowInsets = remainingWindowInsets,\n            fab = floatingActionButton,\n        )\n    }\n}\n\n/**\n * Layout for a [Scaffold]'s content.\n *\n * @param fabPosition [FabPosition] for the FAB (if present)\n * @param topBar the content to place at the top of the [Scaffold], typically a [SmallTopAppBar]\n * @param content the main 'body' of the [Scaffold]\n * @param snackbar the [Snackbar] displayed on top of the [content]\n * @param fab the [FloatingActionButton] displayed on top of the [content], below the [snackbar]\n * and above the [bottomBar]\n * @param bottomBar the content to place at the bottom of the [Scaffold], on top of the\n * [content], typically a [NavigationBar].\n */\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nprivate fun ScaffoldLayout(\n    fabPosition: FabPosition,\n    topBar: @Composable () -> Unit,\n    startBar: @Composable () -> Unit,\n    content: @Composable (PaddingValues) -> Unit,\n    snackbar: @Composable () -> Unit,\n    fab: @Composable () -> Unit,\n    contentWindowInsets: WindowInsets,\n    bottomBar: @Composable () -> Unit,\n) {\n    SubcomposeLayout { constraints ->\n        val layoutWidth = constraints.maxWidth\n        val layoutHeight = constraints.maxHeight\n\n        val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0)\n\n        /**\n         * Tachiyomi: Remove height constraint for expanded app bar\n         */\n        val topBarConstraints = looseConstraints.copy(maxHeight = Constraints.Infinity)\n\n        layout(layoutWidth, layoutHeight) {\n            val leftInset = contentWindowInsets.getLeft(this@SubcomposeLayout, layoutDirection)\n            val rightInset = contentWindowInsets.getRight(this@SubcomposeLayout, layoutDirection)\n            val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)\n\n            // Tachiyomi: Add startBar slot for Navigation Rail\n            val startBarPlaceables = subcompose(ScaffoldLayoutContent.StartBar, startBar).fastMap {\n                it.measure(looseConstraints)\n            }\n            val startBarWidth = startBarPlaceables.fastMaxBy { it.width }?.width ?: 0\n\n            // Tachiyomi: layoutWidth after horizontal insets\n            val insetLayoutWidth = layoutWidth - leftInset - rightInset - startBarWidth\n\n            val topBarPlaceables = subcompose(ScaffoldLayoutContent.TopBar, topBar).fastMap {\n                it.measure(topBarConstraints)\n            }\n\n            val topBarHeight = topBarPlaceables.fastMaxBy { it.height }?.height ?: 0\n\n            val snackbarPlaceables = subcompose(ScaffoldLayoutContent.Snackbar, snackbar).fastMap {\n                it.measure(looseConstraints)\n            }\n\n            val snackbarHeight = snackbarPlaceables.fastMaxBy { it.height }?.height ?: 0\n            val snackbarWidth = snackbarPlaceables.fastMaxBy { it.width }?.width ?: 0\n\n            // Tachiyomi: Calculate insets for snackbar placement offset\n            val snackbarLeft = if (snackbarPlaceables.isNotEmpty()) {\n                (insetLayoutWidth - snackbarWidth) / 2 + leftInset\n            } else {\n                0\n            }\n\n            val fabPlaceables =\n                subcompose(ScaffoldLayoutContent.Fab, fab).fastMap { measurable ->\n                    measurable.measure(looseConstraints)\n                }\n\n            val fabWidth = fabPlaceables.fastMaxBy { it.width }?.width ?: 0\n            val fabHeight = fabPlaceables.fastMaxBy { it.height }?.height ?: 0\n\n            val fabPlacement = if (fabPlaceables.isNotEmpty() && fabWidth != 0 && fabHeight != 0) {\n                // FAB distance from the left of the layout, taking into account LTR / RTL\n                // Tachiyomi: Calculate insets for fab placement offset\n                val fabLeftOffset = if (fabPosition == FabPosition.End) {\n                    if (layoutDirection == LayoutDirection.Ltr) {\n                        layoutWidth - FabSpacing.roundToPx() - fabWidth - rightInset\n                    } else {\n                        FabSpacing.roundToPx() + leftInset\n                    }\n                } else {\n                    leftInset + ((insetLayoutWidth - fabWidth) / 2)\n                }\n\n                FabPlacement(\n                    left = fabLeftOffset,\n                    width = fabWidth,\n                    height = fabHeight,\n                )\n            } else {\n                null\n            }\n\n            val bottomBarPlaceables = subcompose(ScaffoldLayoutContent.BottomBar) {\n                bottomBar()\n            }.fastMap { it.measure(looseConstraints) }\n\n            val bottomBarHeight = bottomBarPlaceables\n                .fastMaxBy { it.height }\n                ?.height\n                ?.takeIf { it != 0 }\n            val fabOffsetFromBottom = fabPlacement?.let {\n                max(bottomBarHeight ?: 0, bottomInset) + it.height + FabSpacing.roundToPx()\n            }\n\n            val snackbarOffsetFromBottom = if (snackbarHeight != 0) {\n                snackbarHeight + (fabOffsetFromBottom ?: max(bottomBarHeight ?: 0, bottomInset))\n            } else {\n                0\n            }\n\n            val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) {\n                val insets = contentWindowInsets.asPaddingValues(this@SubcomposeLayout)\n                val fabOffsetDp = fabOffsetFromBottom?.toDp() ?: 0.dp\n                val bottomBarHeightPx = bottomBarHeight ?: 0\n                val innerPadding = PaddingValues(\n                    top =\n                    if (topBarPlaceables.isEmpty()) {\n                        insets.calculateTopPadding()\n                    } else {\n                        topBarHeight.toDp()\n                    },\n                    // Tachiyomi: Also take account of fab height when providing inner padding\n                    bottom = if (bottomBarPlaceables.isEmpty() || bottomBarHeightPx == 0) {\n                        max(insets.calculateBottomPadding(), fabOffsetDp)\n                    } else {\n                        max(bottomBarHeightPx.toDp(), fabOffsetDp)\n                    },\n                    start = max(\n                        insets.calculateStartPadding((this@SubcomposeLayout).layoutDirection),\n                        startBarWidth.toDp(),\n                    ),\n                    end = insets.calculateEndPadding((this@SubcomposeLayout).layoutDirection),\n                )\n                content(innerPadding)\n            }.fastMap { it.measure(looseConstraints) }\n\n            // Placing to control drawing order to match default elevation of each placeable\n\n            bodyContentPlaceables.fastForEach {\n                it.place(0, 0)\n            }\n            startBarPlaceables.fastForEach {\n                it.placeRelative(0, 0)\n            }\n            topBarPlaceables.fastForEach {\n                it.place(0, 0)\n            }\n            snackbarPlaceables.fastForEach {\n                it.place(\n                    snackbarLeft,\n                    layoutHeight - snackbarOffsetFromBottom,\n                )\n            }\n            // The bottom bar is always at the bottom of the layout\n            bottomBarPlaceables.fastForEach {\n                it.place(0, layoutHeight - (bottomBarHeight ?: 0))\n            }\n            // Explicitly not using placeRelative here as `leftOffset` already accounts for RTL\n            fabPlaceables.fastForEach {\n                it.place(fabPlacement?.left ?: 0, layoutHeight - (fabOffsetFromBottom ?: 0))\n            }\n        }\n    }\n}\n\n/**\n * The possible positions for a [FloatingActionButton] attached to a [Scaffold].\n */\n@ExperimentalMaterial3Api\n@JvmInline\nvalue class FabPosition internal constructor(@Suppress(\"unused\") private val value: Int) {\n    companion object {\n        /**\n         * Position FAB at the bottom of the screen in the center, above the [NavigationBar] (if it\n         * exists)\n         */\n        val Center = FabPosition(0)\n\n        /**\n         * Position FAB at the bottom of the screen at the end, above the [NavigationBar] (if it\n         * exists)\n         */\n        val End = FabPosition(1)\n    }\n\n    override fun toString(): String {\n        return when (this) {\n            Center -> \"FabPosition.Center\"\n            else -> \"FabPosition.End\"\n        }\n    }\n}\n\n/**\n * Placement information for a [FloatingActionButton] inside a [Scaffold].\n *\n * @property left the FAB's offset from the left edge of the bottom bar, already adjusted for RTL\n * support\n * @property width the width of the FAB\n * @property height the height of the FAB\n */\n@Immutable\ninternal class FabPlacement(\n    val left: Int,\n    val width: Int,\n    val height: Int,\n)\n\n// FAB spacing above the bottom bar / bottom of the Scaffold\nprivate val FabSpacing = 16.dp\n\nprivate enum class ScaffoldLayoutContent { TopBar, MainContent, Snackbar, Fab, BottomBar, StartBar }\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Slider.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.annotation.IntRange\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.Slider\nimport androidx.compose.material3.SliderColors\nimport androidx.compose.material3.SliderDefaults\nimport androidx.compose.material3.SliderState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport kotlin.math.roundToInt\n\n@Composable\nfun Slider(\n    value: Int,\n    onValueChange: (Int) -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    valueRange: IntProgression = 0..1,\n    @IntRange(from = 0) steps: Int = with(valueRange) { (last - first) - 1 },\n    onValueChangeFinished: (() -> Unit)? = null,\n    colors: SliderColors = SliderDefaults.colors(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    thumb: @Composable (SliderState) -> Unit = {\n        SliderDefaults.Thumb(\n            interactionSource = interactionSource,\n            colors = colors,\n            enabled = enabled,\n        )\n    },\n    track: @Composable (SliderState) -> Unit = { sliderState ->\n        SliderDefaults.Track(colors = colors, enabled = enabled, sliderState = sliderState)\n    },\n) {\n    Slider(\n        value = value.toFloat(),\n        onValueChange = { onValueChange(it.roundToInt()) },\n        modifier = modifier,\n        enabled = enabled,\n        valueRange = with(valueRange) { first.toFloat()..last.toFloat() },\n        steps = steps,\n        onValueChangeFinished = onValueChangeFinished,\n        colors = colors,\n        interactionSource = interactionSource,\n        thumb = thumb,\n        track = track,\n    )\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Surface.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.material3.ColorScheme\nimport androidx.compose.material3.LocalAbsoluteTonalElevation\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.material3.minimumInteractiveComponentSize\nimport androidx.compose.material3.ripple\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.NonRestartableComposable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.draw.shadow\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.RectangleShape\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.graphics.compositeOver\nimport androidx.compose.ui.semantics.Role\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport kotlin.math.ln\n\n/**\n * Surface with additional onLongClick functionality.\n *\n * @see androidx.compose.material3.Surface\n */\n@Composable\n@NonRestartableComposable\nfun Surface(\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    onLongClick: (() -> Unit)? = null,\n    enabled: Boolean = true,\n    shape: Shape = RectangleShape,\n    color: Color = MaterialTheme.colorScheme.surface,\n    contentColor: Color = contentColorFor(color),\n    tonalElevation: Dp = 0.dp,\n    shadowElevation: Dp = 0.dp,\n    border: BorderStroke? = null,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    content: @Composable () -> Unit,\n) {\n    val absoluteElevation = LocalAbsoluteTonalElevation.current + tonalElevation\n    CompositionLocalProvider(\n        LocalContentColor provides contentColor,\n        LocalAbsoluteTonalElevation provides absoluteElevation,\n    ) {\n        Box(\n            modifier = modifier\n                .minimumInteractiveComponentSize()\n                .surface(\n                    shape = shape,\n                    backgroundColor = surfaceColorAtElevation(\n                        color = color,\n                        elevation = absoluteElevation,\n                    ),\n                    border = border,\n                    shadowElevation = shadowElevation,\n                )\n                .combinedClickable(\n                    interactionSource = interactionSource,\n                    indication = ripple(),\n                    enabled = enabled,\n                    role = Role.Button,\n                    onLongClick = onLongClick,\n                    onClick = onClick,\n                ),\n            propagateMinConstraints = true,\n        ) {\n            content()\n        }\n    }\n}\n\nprivate fun Modifier.surface(\n    shape: Shape,\n    backgroundColor: Color,\n    border: BorderStroke?,\n    shadowElevation: Dp,\n) = this\n    .shadow(shadowElevation, shape, clip = false)\n    .then(if (border != null) Modifier.border(border, shape) else Modifier)\n    .background(color = backgroundColor, shape = shape)\n    .clip(shape)\n\n@Composable\n@ReadOnlyComposable\nprivate fun surfaceColorAtElevation(color: Color, elevation: Dp): Color {\n    return if (color == MaterialTheme.colorScheme.surface) {\n        MaterialTheme.colorScheme.surfaceColorAtElevation(elevation)\n    } else {\n        color\n    }\n}\n\nprivate fun ColorScheme.surfaceColorAtElevation(\n    elevation: Dp,\n): Color {\n    if (elevation == 0.dp) return surface\n    val alpha = ((4.5f * ln(elevation.value + 1)) + 2f) / 100f\n    return surfaceTint.copy(alpha = alpha).compositeOver(surface)\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/components/material/Tabs.kt",
    "content": "package tachiyomi.presentation.core.components.material\n\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.sp\nimport tachiyomi.presentation.core.components.Pill\n\n@Composable\nfun TabText(\n    text: String,\n    badgeCount: Int? = null,\n) {\n    val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f\n\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Text(\n            text = text,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n        )\n        if (badgeCount != null) {\n            Pill(\n                text = \"$badgeCount\",\n                color = MaterialTheme.colorScheme.onBackground.copy(alpha = pillAlpha),\n                fontSize = 10.sp,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt",
    "content": "package tachiyomi.presentation.core.i18n\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.platform.LocalContext\nimport dev.icerock.moko.resources.PluralsResource\nimport dev.icerock.moko.resources.StringResource\nimport tachiyomi.core.common.i18n.pluralStringResource\nimport tachiyomi.core.common.i18n.stringResource\n\n@Composable\n@ReadOnlyComposable\nfun stringResource(resource: StringResource): String {\n    return LocalContext.current.stringResource(resource)\n}\n\n@Composable\n@ReadOnlyComposable\nfun stringResource(resource: StringResource, vararg args: Any): String {\n    return LocalContext.current.stringResource(resource, *args)\n}\n\n@Composable\n@ReadOnlyComposable\nfun pluralStringResource(resource: PluralsResource, count: Int): String {\n    return LocalContext.current.pluralStringResource(resource, count)\n}\n\n@Composable\n@ReadOnlyComposable\nfun pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String {\n    return LocalContext.current.pluralStringResource(resource, count, *args)\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/icons/CustomIcons.kt",
    "content": "package tachiyomi.presentation.core.icons\n\n/**\n * Icons imported from https://simpleicons.org using\n * https://github.com/DevSrSouza/svg-to-compose\n */\nobject CustomIcons\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/icons/Discord.kt",
    "content": "package tachiyomi.presentation.core.icons\n\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.PathFillType.Companion.NonZero\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.graphics.StrokeCap.Companion.Butt\nimport androidx.compose.ui.graphics.StrokeJoin.Companion.Miter\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.graphics.vector.path\nimport androidx.compose.ui.unit.dp\n\n@Suppress(\"UnusedReceiverParameter\", \"BooleanLiteralArgument\")\nval CustomIcons.Discord: ImageVector\n    get() {\n        if (_discord != null) {\n            return _discord!!\n        }\n        _discord = ImageVector.Builder(\n            name = \"Discord\",\n            defaultWidth = 24.0.dp,\n            defaultHeight = 24.0.dp,\n            viewportWidth = 24.0f,\n            viewportHeight = 24.0f,\n        ).apply {\n            path(\n                fill = SolidColor(Color(0xFF000000)),\n                stroke = null,\n                strokeLineWidth = 0.0f,\n                strokeLineCap = Butt,\n                strokeLineJoin = Miter,\n                strokeLineMiter = 4.0f,\n                pathFillType = NonZero,\n            ) {\n                moveTo(20.317f, 4.3698f)\n                arcToRelative(19.7913f, 19.7913f, 0.0f, false, false, -4.8851f, -1.5152f)\n                arcToRelative(0.0741f, 0.0741f, 0.0f, false, false, -0.0785f, 0.0371f)\n                curveToRelative(-0.211f, 0.3753f, -0.4447f, 0.8648f, -0.6083f, 1.2495f)\n                curveToRelative(-1.8447f, -0.2762f, -3.68f, -0.2762f, -5.4868f, 0.0f)\n                curveToRelative(-0.1636f, -0.3933f, -0.4058f, -0.8742f, -0.6177f, -1.2495f)\n                arcToRelative(0.077f, 0.077f, 0.0f, false, false, -0.0785f, -0.037f)\n                arcToRelative(19.7363f, 19.7363f, 0.0f, false, false, -4.8852f, 1.515f)\n                arcToRelative(0.0699f, 0.0699f, 0.0f, false, false, -0.0321f, 0.0277f)\n                curveTo(0.5334f, 9.0458f, -0.319f, 13.5799f, 0.0992f, 18.0578f)\n                arcToRelative(0.0824f, 0.0824f, 0.0f, false, false, 0.0312f, 0.0561f)\n                curveToRelative(2.0528f, 1.5076f, 4.0413f, 2.4228f, 5.9929f, 3.0294f)\n                arcToRelative(0.0777f, 0.0777f, 0.0f, false, false, 0.0842f, -0.0276f)\n                curveToRelative(0.4616f, -0.6304f, 0.8731f, -1.2952f, 1.226f, -1.9942f)\n                arcToRelative(0.076f, 0.076f, 0.0f, false, false, -0.0416f, -0.1057f)\n                curveToRelative(-0.6528f, -0.2476f, -1.2743f, -0.5495f, -1.8722f, -0.8923f)\n                arcToRelative(0.077f, 0.077f, 0.0f, false, true, -0.0076f, -0.1277f)\n                curveToRelative(0.1258f, -0.0943f, 0.2517f, -0.1923f, 0.3718f, -0.2914f)\n                arcToRelative(0.0743f, 0.0743f, 0.0f, false, true, 0.0776f, -0.0105f)\n                curveToRelative(3.9278f, 1.7933f, 8.18f, 1.7933f, 12.0614f, 0.0f)\n                arcToRelative(0.0739f, 0.0739f, 0.0f, false, true, 0.0785f, 0.0095f)\n                curveToRelative(0.1202f, 0.099f, 0.246f, 0.1981f, 0.3728f, 0.2924f)\n                arcToRelative(0.077f, 0.077f, 0.0f, false, true, -0.0066f, 0.1276f)\n                arcToRelative(12.2986f, 12.2986f, 0.0f, false, true, -1.873f, 0.8914f)\n                arcToRelative(0.0766f, 0.0766f, 0.0f, false, false, -0.0407f, 0.1067f)\n                curveToRelative(0.3604f, 0.698f, 0.7719f, 1.3628f, 1.225f, 1.9932f)\n                arcToRelative(0.076f, 0.076f, 0.0f, false, false, 0.0842f, 0.0286f)\n                curveToRelative(1.961f, -0.6067f, 3.9495f, -1.5219f, 6.0023f, -3.0294f)\n                arcToRelative(0.077f, 0.077f, 0.0f, false, false, 0.0313f, -0.0552f)\n                curveToRelative(0.5004f, -5.177f, -0.8382f, -9.6739f, -3.5485f, -13.6604f)\n                arcToRelative(0.061f, 0.061f, 0.0f, false, false, -0.0312f, -0.0286f)\n                close()\n                moveTo(8.02f, 15.3312f)\n                curveToRelative(-1.1825f, 0.0f, -2.1569f, -1.0857f, -2.1569f, -2.419f)\n                curveToRelative(0.0f, -1.3332f, 0.9555f, -2.4189f, 2.157f, -2.4189f)\n                curveToRelative(1.2108f, 0.0f, 2.1757f, 1.0952f, 2.1568f, 2.419f)\n                curveToRelative(0.0f, 1.3332f, -0.9555f, 2.4189f, -2.1569f, 2.4189f)\n                close()\n                moveTo(15.9948f, 15.3312f)\n                curveToRelative(-1.1825f, 0.0f, -2.1569f, -1.0857f, -2.1569f, -2.419f)\n                curveToRelative(0.0f, -1.3332f, 0.9554f, -2.4189f, 2.1569f, -2.4189f)\n                curveToRelative(1.2108f, 0.0f, 2.1757f, 1.0952f, 2.1568f, 2.419f)\n                curveToRelative(0.0f, 1.3332f, -0.946f, 2.4189f, -2.1568f, 2.4189f)\n                close()\n            }\n        }\n            .build()\n        return _discord!!\n    }\n\n@Suppress(\"ObjectPropertyName\")\nprivate var _discord: ImageVector? = null\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/icons/Github.kt",
    "content": "package tachiyomi.presentation.core.icons\n\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.PathFillType.Companion.NonZero\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.graphics.StrokeCap.Companion.Butt\nimport androidx.compose.ui.graphics.StrokeJoin.Companion.Miter\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.graphics.vector.ImageVector.Builder\nimport androidx.compose.ui.graphics.vector.path\nimport androidx.compose.ui.unit.dp\n\n@Suppress(\"UnusedReceiverParameter\")\nval CustomIcons.Github: ImageVector\n    get() {\n        if (_github != null) {\n            return _github!!\n        }\n        _github = Builder(\n            name = \"Github\",\n            defaultWidth = 24.0.dp,\n            defaultHeight = 24.0.dp,\n            viewportWidth = 24.0f,\n            viewportHeight = 24.0f,\n        ).apply {\n            path(\n                fill = SolidColor(Color(0xFF000000)),\n                stroke = null,\n                strokeLineWidth = 0.0f,\n                strokeLineCap = Butt,\n                strokeLineJoin = Miter,\n                strokeLineMiter = 4.0f,\n                pathFillType = NonZero,\n            ) {\n                moveTo(12.0f, 0.297f)\n                curveToRelative(-6.63f, 0.0f, -12.0f, 5.373f, -12.0f, 12.0f)\n                curveToRelative(0.0f, 5.303f, 3.438f, 9.8f, 8.205f, 11.385f)\n                curveToRelative(0.6f, 0.113f, 0.82f, -0.258f, 0.82f, -0.577f)\n                curveToRelative(0.0f, -0.285f, -0.01f, -1.04f, -0.015f, -2.04f)\n                curveToRelative(-3.338f, 0.724f, -4.042f, -1.61f, -4.042f, -1.61f)\n                curveTo(4.422f, 18.07f, 3.633f, 17.7f, 3.633f, 17.7f)\n                curveToRelative(-1.087f, -0.744f, 0.084f, -0.729f, 0.084f, -0.729f)\n                curveToRelative(1.205f, 0.084f, 1.838f, 1.236f, 1.838f, 1.236f)\n                curveToRelative(1.07f, 1.835f, 2.809f, 1.305f, 3.495f, 0.998f)\n                curveToRelative(0.108f, -0.776f, 0.417f, -1.305f, 0.76f, -1.605f)\n                curveToRelative(-2.665f, -0.3f, -5.466f, -1.332f, -5.466f, -5.93f)\n                curveToRelative(0.0f, -1.31f, 0.465f, -2.38f, 1.235f, -3.22f)\n                curveToRelative(-0.135f, -0.303f, -0.54f, -1.523f, 0.105f, -3.176f)\n                curveToRelative(0.0f, 0.0f, 1.005f, -0.322f, 3.3f, 1.23f)\n                curveToRelative(0.96f, -0.267f, 1.98f, -0.399f, 3.0f, -0.405f)\n                curveToRelative(1.02f, 0.006f, 2.04f, 0.138f, 3.0f, 0.405f)\n                curveToRelative(2.28f, -1.552f, 3.285f, -1.23f, 3.285f, -1.23f)\n                curveToRelative(0.645f, 1.653f, 0.24f, 2.873f, 0.12f, 3.176f)\n                curveToRelative(0.765f, 0.84f, 1.23f, 1.91f, 1.23f, 3.22f)\n                curveToRelative(0.0f, 4.61f, -2.805f, 5.625f, -5.475f, 5.92f)\n                curveToRelative(0.42f, 0.36f, 0.81f, 1.096f, 0.81f, 2.22f)\n                curveToRelative(0.0f, 1.606f, -0.015f, 2.896f, -0.015f, 3.286f)\n                curveToRelative(0.0f, 0.315f, 0.21f, 0.69f, 0.825f, 0.57f)\n                curveTo(20.565f, 22.092f, 24.0f, 17.592f, 24.0f, 12.297f)\n                curveToRelative(0.0f, -6.627f, -5.373f, -12.0f, -12.0f, -12.0f)\n            }\n        }\n            .build()\n        return _github!!\n    }\n\n@Suppress(\"ObjectPropertyName\")\nprivate var _github: ImageVector? = null\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt",
    "content": "package tachiyomi.presentation.core.screens\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.paddingFromBaseline\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\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.platform.LocalLayoutDirection\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastForEach\nimport dev.icerock.moko.resources.StringResource\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.presentation.core.components.ActionButton\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\nimport kotlin.random.Random\n\ndata class EmptyScreenAction(\n    val stringRes: StringResource,\n    val icon: ImageVector,\n    val onClick: () -> Unit,\n)\n\n@Composable\nfun EmptyScreen(\n    stringRes: StringResource,\n    modifier: Modifier = Modifier,\n    actions: ImmutableList<EmptyScreenAction>? = null,\n) {\n    EmptyScreen(\n        message = stringResource(stringRes),\n        modifier = modifier,\n        actions = actions,\n    )\n}\n\n@Composable\nfun EmptyScreen(\n    message: String,\n    modifier: Modifier = Modifier,\n    actions: ImmutableList<EmptyScreenAction>? = null,\n) {\n    val face = remember { getRandomErrorFace() }\n    Column(\n        modifier = modifier\n            .fillMaxSize()\n            .verticalScroll(rememberScrollState())\n            .padding(horizontal = 24.dp),\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.Center,\n    ) {\n        CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) {\n            Text(\n                text = face,\n                modifier = Modifier.secondaryItemAlpha(),\n                style = MaterialTheme.typography.displayMedium,\n            )\n        }\n\n        Text(\n            text = message,\n            modifier = Modifier\n                .paddingFromBaseline(top = 24.dp)\n                .secondaryItemAlpha(),\n            style = MaterialTheme.typography.bodyMedium,\n            textAlign = TextAlign.Center,\n        )\n\n        if (!actions.isNullOrEmpty()) {\n            Row(\n                modifier = Modifier\n                    .padding(top = 24.dp),\n                horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),\n            ) {\n                actions.fastForEach {\n                    ActionButton(\n                        modifier = Modifier.weight(1f),\n                        title = stringResource(it.stringRes),\n                        icon = it.icon,\n                        onClick = it.onClick,\n                    )\n                }\n            }\n        }\n    }\n}\n\nprivate val ErrorFaces = listOf(\n    \"(･o･;)\",\n    \"Σ(ಠ_ಠ)\",\n    \"ಥ_ಥ\",\n    \"(˘･_･˘)\",\n    \"(；￣Д￣)\",\n    \"(･Д･。\",\n    \"(╬ಠ益ಠ)\",\n    \"(╥﹏╥)\",\n    \"(⋟﹏⋞)\",\n    \"Ò︵Ó\",\n    \" ˙ᯅ˙)\",\n    \"(¬_¬)\",\n)\n\nprivate fun getRandomErrorFace(): String {\n    return ErrorFaces[Random.nextInt(ErrorFaces.size)]\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/screens/InfoScreen.kt",
    "content": "package tachiyomi.presentation.core.screens\n\nimport androidx.compose.foundation.background\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.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Newspaper\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.NavigationBarDefaults\nimport androidx.compose.material3.OutlinedButton\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.drawBehind\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.tooling.preview.PreviewLightDark\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.zIndex\nimport tachiyomi.presentation.core.components.material.Scaffold\nimport tachiyomi.presentation.core.components.material.padding\nimport tachiyomi.presentation.core.util.secondaryItemAlpha\n\n@Composable\nfun InfoScreen(\n    icon: ImageVector,\n    headingText: String,\n    subtitleText: String,\n    acceptText: String,\n    onAcceptClick: () -> Unit,\n    canAccept: Boolean = true,\n    rejectText: String? = null,\n    onRejectClick: (() -> Unit)? = null,\n    content: @Composable ColumnScope.() -> Unit,\n) {\n    Scaffold(\n        bottomBar = {\n            val strokeWidth = Dp.Hairline\n            val borderColor = MaterialTheme.colorScheme.outline\n            Column(\n                modifier = Modifier\n                    .background(MaterialTheme.colorScheme.background)\n                    .drawBehind {\n                        drawLine(\n                            borderColor,\n                            Offset(0f, 0f),\n                            Offset(size.width, 0f),\n                            strokeWidth.value,\n                        )\n                    }\n                    .windowInsetsPadding(NavigationBarDefaults.windowInsets)\n                    .padding(\n                        horizontal = MaterialTheme.padding.medium,\n                        vertical = MaterialTheme.padding.small,\n                    ),\n            ) {\n                Button(\n                    modifier = Modifier.fillMaxWidth(),\n                    enabled = canAccept,\n                    onClick = onAcceptClick,\n                ) {\n                    Text(text = acceptText)\n                }\n                if (rejectText != null && onRejectClick != null) {\n                    OutlinedButton(\n                        modifier = Modifier.fillMaxWidth(),\n                        onClick = onRejectClick,\n                    ) {\n                        Text(text = rejectText)\n                    }\n                }\n            }\n        },\n    ) { paddingValues ->\n        // Status bar scrim\n        Box(\n            modifier = Modifier\n                .zIndex(2f)\n                .secondaryItemAlpha()\n                .background(MaterialTheme.colorScheme.background)\n                .fillMaxWidth()\n                .height(paddingValues.calculateTopPadding()),\n        )\n\n        Column(\n            modifier = Modifier\n                .verticalScroll(rememberScrollState())\n                .fillMaxWidth()\n                .padding(paddingValues)\n                .padding(top = 48.dp)\n                .padding(horizontal = MaterialTheme.padding.medium),\n        ) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                modifier = Modifier\n                    .padding(bottom = MaterialTheme.padding.small)\n                    .size(48.dp),\n                tint = MaterialTheme.colorScheme.primary,\n            )\n            Text(\n                text = headingText,\n                style = MaterialTheme.typography.headlineLarge,\n            )\n            Text(\n                text = subtitleText,\n                modifier = Modifier\n                    .secondaryItemAlpha()\n                    .padding(vertical = MaterialTheme.padding.small),\n                style = MaterialTheme.typography.titleSmall,\n            )\n\n            content()\n        }\n    }\n}\n\n@PreviewLightDark\n@Composable\nprivate fun InfoScaffoldPreview() {\n    InfoScreen(\n        icon = Icons.Outlined.Newspaper,\n        headingText = \"Heading\",\n        subtitleText = \"Subtitle\",\n        acceptText = \"Accept\",\n        onAcceptClick = {},\n        rejectText = \"Reject\",\n        onRejectClick = {},\n    ) {\n        Text(\"Hello world\")\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/screens/LoadingScreen.kt",
    "content": "package tachiyomi.presentation.core.screens\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\n\n@Composable\nfun LoadingScreen(modifier: Modifier = Modifier) {\n    Box(\n        modifier = modifier.fillMaxSize(),\n        contentAlignment = Alignment.Center,\n    ) {\n        CircularProgressIndicator()\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/theme/Color.kt",
    "content": "package tachiyomi.presentation.core.theme\n\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.material3.ColorScheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.graphics.Color\n\nval ColorScheme.active: Color\n    @Composable\n    get() {\n        return if (isSystemInDarkTheme()) Color(255, 235, 59) else Color(255, 193, 7)\n    }\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/theme/Typography.kt",
    "content": "package tachiyomi.presentation.core.theme\n\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Typography\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontWeight\n\nval Typography.header: TextStyle\n    @Composable\n    get() = bodyMedium.copy(\n        color = MaterialTheme.colorScheme.onSurfaceVariant,\n        fontWeight = FontWeight.SemiBold,\n    )\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/Elevation.kt",
    "content": "/*\n * Copyright 2021 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 *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Straight copy from Compose M3 for Button fork\n */\n\npackage tachiyomi.presentation.core.util\n\nimport androidx.compose.animation.core.Animatable\nimport androidx.compose.animation.core.AnimationSpec\nimport androidx.compose.animation.core.CubicBezierEasing\nimport androidx.compose.animation.core.Easing\nimport androidx.compose.animation.core.FastOutSlowInEasing\nimport androidx.compose.animation.core.TweenSpec\nimport androidx.compose.foundation.interaction.DragInteraction\nimport androidx.compose.foundation.interaction.FocusInteraction\nimport androidx.compose.foundation.interaction.HoverInteraction\nimport androidx.compose.foundation.interaction.Interaction\nimport androidx.compose.foundation.interaction.PressInteraction\nimport androidx.compose.ui.unit.Dp\n\n/**\n * Animates the [Dp] value of [this] between [from] and [to] [Interaction]s, to [target]. The\n * [AnimationSpec] used depends on the values for [from] and [to], see\n * [ElevationDefaults.incomingAnimationSpecForInteraction] and\n * [ElevationDefaults.outgoingAnimationSpecForInteraction] for more details.\n *\n * @param target the [Dp] target elevation for this component, corresponding to the elevation\n * desired for the [to] state.\n * @param from the previous [Interaction] that was used to calculate elevation. `null` if there\n * was no previous [Interaction], such as when the component is in its default state.\n * @param to the [Interaction] that this component is moving to, such as [PressInteraction.Press]\n * when this component is being pressed. `null` if this component is moving back to its default\n * state.\n */\nsuspend fun Animatable<Dp, *>.animateElevation(\n    target: Dp,\n    from: Interaction? = null,\n    to: Interaction? = null,\n) {\n    val spec = when {\n        // Moving to a new state\n        to != null -> ElevationDefaults.incomingAnimationSpecForInteraction(to)\n        // Moving to default, from a previous state\n        from != null -> ElevationDefaults.outgoingAnimationSpecForInteraction(from)\n        // Loading the initial state, or moving back to the baseline state from a disabled /\n        // unknown state, so just snap to the final value.\n        else -> null\n    }\n    if (spec != null) animateTo(target, spec) else snapTo(target)\n}\n\n/**\n * Contains default [AnimationSpec]s used for animating elevation between different [Interaction]s.\n *\n * Typically you should use [animateElevation] instead, which uses these [AnimationSpec]s\n * internally. [animateElevation] in turn is used by the defaults for cards and buttons.\n *\n * @see animateElevation\n */\nprivate object ElevationDefaults {\n    /**\n     * Returns the [AnimationSpec]s used when animating elevation to [interaction], either from a\n     * previous [Interaction], or from the default state. If [interaction] is unknown, then\n     * returns `null`.\n     *\n     * @param interaction the [Interaction] that is being animated to\n     */\n    fun incomingAnimationSpecForInteraction(interaction: Interaction): AnimationSpec<Dp>? {\n        return when (interaction) {\n            is PressInteraction.Press -> DefaultIncomingSpec\n            is DragInteraction.Start -> DefaultIncomingSpec\n            is HoverInteraction.Enter -> DefaultIncomingSpec\n            is FocusInteraction.Focus -> DefaultIncomingSpec\n            else -> null\n        }\n    }\n\n    /**\n     * Returns the [AnimationSpec]s used when animating elevation away from [interaction], to the\n     * default state. If [interaction] is unknown, then returns `null`.\n     *\n     * @param interaction the [Interaction] that is being animated away from\n     */\n    fun outgoingAnimationSpecForInteraction(interaction: Interaction): AnimationSpec<Dp>? {\n        return when (interaction) {\n            is PressInteraction.Press -> DefaultOutgoingSpec\n            is DragInteraction.Start -> DefaultOutgoingSpec\n            is HoverInteraction.Enter -> HoveredOutgoingSpec\n            is FocusInteraction.Focus -> DefaultOutgoingSpec\n            else -> null\n        }\n    }\n}\n\nprivate val OutgoingSpecEasing: Easing = CubicBezierEasing(0.40f, 0.00f, 0.60f, 1.00f)\n\nprivate val DefaultIncomingSpec = TweenSpec<Dp>(\n    durationMillis = 120,\n    easing = FastOutSlowInEasing,\n)\n\nprivate val DefaultOutgoingSpec = TweenSpec<Dp>(\n    durationMillis = 150,\n    easing = OutgoingSpecEasing,\n)\n\nprivate val HoveredOutgoingSpec = TweenSpec<Dp>(\n    durationMillis = 120,\n    easing = OutgoingSpecEasing,\n)\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/LazyListState.kt",
    "content": "package tachiyomi.presentation.core.util\n\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.grid.LazyGridState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.remember\n\n@Composable\nfun LazyListState.shouldExpandFAB(): Boolean {\n    return remember {\n        derivedStateOf {\n            (firstVisibleItemIndex == 0 && firstVisibleItemScrollOffset == 0) ||\n                lastScrolledBackward ||\n                !canScrollForward\n        }\n    }\n        .value\n}\n\n@Composable\nfun LazyGridState.shouldExpandFAB(): Boolean {\n    return remember {\n        derivedStateOf {\n            (firstVisibleItemIndex == 0 && firstVisibleItemScrollOffset == 0) ||\n                lastScrolledBackward ||\n                !canScrollForward\n        }\n    }\n        .value\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/Modifier.kt",
    "content": "package tachiyomi.presentation.core.util\n\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.isImeVisible\nimport androidx.compose.material3.MaterialTheme\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.Modifier\nimport androidx.compose.ui.composed\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.draw.drawBehind\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.focus.onFocusChanged\nimport androidx.compose.ui.input.key.Key\nimport androidx.compose.ui.input.key.key\nimport androidx.compose.ui.input.key.onPreviewKeyEvent\nimport androidx.compose.ui.platform.LocalFocusManager\nimport tachiyomi.presentation.core.components.material.SECONDARY_ALPHA\n\nfun Modifier.selectedBackground(isSelected: Boolean): Modifier = if (isSelected) {\n    composed {\n        val alpha = if (isSystemInDarkTheme()) 0.16f else 0.22f\n        val color = MaterialTheme.colorScheme.secondary.copy(alpha = alpha)\n        Modifier.drawBehind {\n            drawRect(color)\n        }\n    }\n} else {\n    this\n}\n\nfun Modifier.secondaryItemAlpha(): Modifier = this.alpha(SECONDARY_ALPHA)\n\nfun Modifier.clickableNoIndication(\n    onLongClick: (() -> Unit)? = null,\n    onClick: () -> Unit,\n) = this.combinedClickable(\n    interactionSource = null,\n    indication = null,\n    onLongClick = onLongClick,\n    onClick = onClick,\n)\n\n/**\n * For TextField, the provided [action] will be invoked when\n * physical enter key is pressed.\n *\n * Naturally, the TextField should be set to single line only.\n */\nfun Modifier.runOnEnterKeyPressed(action: () -> Unit): Modifier = this.onPreviewKeyEvent {\n    when (it.key) {\n        Key.Enter, Key.NumPadEnter -> {\n            action()\n            true\n        }\n        else -> false\n    }\n}\n\n/**\n * For TextField on AppBar, this modifier will request focus\n * to the element the first time it's composed.\n */\nfun Modifier.showSoftKeyboard(show: Boolean): Modifier = if (show) {\n    composed {\n        val focusRequester = remember { FocusRequester() }\n        var openKeyboard by rememberSaveable { mutableStateOf(show) }\n        LaunchedEffect(focusRequester) {\n            if (openKeyboard) {\n                focusRequester.requestFocus()\n                openKeyboard = false\n            }\n        }\n\n        Modifier.focusRequester(focusRequester)\n    }\n} else {\n    this\n}\n\n/**\n * For TextField, this modifier will clear focus when soft\n * keyboard is hidden.\n */\nfun Modifier.clearFocusOnSoftKeyboardHide(\n    onFocusCleared: (() -> Unit)? = null,\n): Modifier = composed {\n    var isFocused by remember { mutableStateOf(false) }\n    var keyboardShowedSinceFocused by remember { mutableStateOf(false) }\n    if (isFocused) {\n        val imeVisible = WindowInsets.isImeVisible\n        val focusManager = LocalFocusManager.current\n        LaunchedEffect(imeVisible) {\n            if (imeVisible) {\n                keyboardShowedSinceFocused = true\n            } else if (keyboardShowedSinceFocused) {\n                focusManager.clearFocus()\n                onFocusCleared?.invoke()\n            }\n        }\n    }\n\n    Modifier.onFocusChanged {\n        if (isFocused != it.isFocused) {\n            if (isFocused) {\n                keyboardShowedSinceFocused = false\n            }\n            isFocused = it.isFocused\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/PaddingValues.kt",
    "content": "package tachiyomi.presentation.core.util\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.calculateEndPadding\nimport androidx.compose.foundation.layout.calculateStartPadding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.ui.platform.LocalLayoutDirection\n\n@Composable\n@ReadOnlyComposable\noperator fun PaddingValues.plus(other: PaddingValues): PaddingValues {\n    val layoutDirection = LocalLayoutDirection.current\n    return PaddingValues(\n        start = calculateStartPadding(layoutDirection) +\n            other.calculateStartPadding(layoutDirection),\n        end = calculateEndPadding(layoutDirection) +\n            other.calculateEndPadding(layoutDirection),\n        top = calculateTopPadding() + other.calculateTopPadding(),\n        bottom = calculateBottomPadding() + other.calculateBottomPadding(),\n    )\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/Preference.kt",
    "content": "package tachiyomi.presentation.core.util\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.remember\nimport tachiyomi.core.common.preference.Preference\n\n@Composable\nfun <T> Preference<T>.collectAsState(): State<T> {\n    val flow = remember(this) { changes() }\n    return flow.collectAsState(initial = get())\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/Scrollbar.kt",
    "content": "package tachiyomi.presentation.core.util\n\n/*\n * MIT License\n *\n * Copyright (c) 2022 Albert Chang\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Code taken from https://gist.github.com/mxalbert1996/33a360fcab2105a31e5355af98216f5a\n * with some modifications to handle contentPadding.\n *\n * Modifiers for regular scrollable list is omitted.\n */\n\nimport android.view.ViewConfiguration\nimport androidx.compose.animation.core.Animatable\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.gestures.Orientation\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.composed\nimport androidx.compose.ui.draw.drawWithContent\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.geometry.Size\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.drawscope.ContentDrawScope\nimport androidx.compose.ui.graphics.drawscope.DrawScope\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.LocalContext\nimport androidx.compose.ui.platform.LocalLayoutDirection\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.LayoutDirection\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.fastFirstOrNull\nimport androidx.compose.ui.util.fastSumBy\nimport kotlinx.coroutines.FlowPreview\nimport kotlinx.coroutines.channels.BufferOverflow\nimport kotlinx.coroutines.flow.MutableSharedFlow\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.sample\nimport tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX\n\n/**\n * Draws horizontal scrollbar to a LazyList.\n *\n * Set key with [STICKY_HEADER_KEY_PREFIX] prefix to any sticky header item in the list.\n */\nfun Modifier.drawHorizontalScrollbar(\n    state: LazyListState,\n    reverseScrolling: Boolean = false,\n    // The amount of offset the scrollbar position towards the top of the layout\n    positionOffsetPx: Float = 0f,\n): Modifier = drawScrollbar(state, Orientation.Horizontal, reverseScrolling, positionOffsetPx)\n\n/**\n * Draws vertical scrollbar to a LazyList.\n *\n * Set key with [STICKY_HEADER_KEY_PREFIX] prefix to any sticky header item in the list.\n */\nfun Modifier.drawVerticalScrollbar(\n    state: LazyListState,\n    reverseScrolling: Boolean = false,\n    // The amount of offset the scrollbar position towards the start of the layout\n    positionOffsetPx: Float = 0f,\n): Modifier = drawScrollbar(state, Orientation.Vertical, reverseScrolling, positionOffsetPx)\n\nprivate fun Modifier.drawScrollbar(\n    state: LazyListState,\n    orientation: Orientation,\n    reverseScrolling: Boolean,\n    positionOffset: Float,\n): Modifier = drawScrollbar(\n    orientation,\n    reverseScrolling,\n) { reverseDirection, atEnd, thickness, color, alpha ->\n    val layoutInfo = state.layoutInfo\n    val viewportSize = if (orientation == Orientation.Horizontal) {\n        layoutInfo.viewportSize.width\n    } else {\n        layoutInfo.viewportSize.height\n    } - layoutInfo.beforeContentPadding - layoutInfo.afterContentPadding\n    val items = layoutInfo.visibleItemsInfo\n    val itemsSize = items.fastSumBy { it.size }\n    val showScrollbar = items.size < layoutInfo.totalItemsCount || itemsSize > viewportSize\n    val estimatedItemSize = if (items.isEmpty()) 0f else itemsSize.toFloat() / items.size\n    val totalSize = estimatedItemSize * layoutInfo.totalItemsCount\n    val thumbSize = viewportSize / totalSize * viewportSize\n    val startOffset = if (items.isEmpty()) {\n        0f\n    } else {\n        items\n            .fastFirstOrNull { (it.key as? String)?.startsWith(STICKY_HEADER_KEY_PREFIX)?.not() ?: true }\n            ?.run {\n                val startPadding =\n                    if (reverseDirection) layoutInfo.afterContentPadding else layoutInfo.beforeContentPadding\n                startPadding + ((estimatedItemSize * index - offset) / totalSize * viewportSize)\n            } ?: 0f\n    }\n    val drawScrollbar = onDrawScrollbar(\n        orientation, reverseDirection, atEnd, showScrollbar,\n        thickness, color, alpha, thumbSize, startOffset, positionOffset,\n    )\n    drawContent()\n    drawScrollbar()\n}\n\nprivate fun ContentDrawScope.onDrawScrollbar(\n    orientation: Orientation,\n    reverseDirection: Boolean,\n    atEnd: Boolean,\n    showScrollbar: Boolean,\n    thickness: Float,\n    color: Color,\n    alpha: () -> Float,\n    thumbSize: Float,\n    scrollOffset: Float,\n    positionOffset: Float,\n): DrawScope.() -> Unit {\n    val topLeft = if (orientation == Orientation.Horizontal) {\n        Offset(\n            if (reverseDirection) size.width - scrollOffset - thumbSize else scrollOffset,\n            if (atEnd) size.height - positionOffset - thickness else positionOffset,\n        )\n    } else {\n        Offset(\n            if (atEnd) size.width - positionOffset - thickness else positionOffset,\n            if (reverseDirection) size.height - scrollOffset - thumbSize else scrollOffset,\n        )\n    }\n    val size = if (orientation == Orientation.Horizontal) {\n        Size(thumbSize, thickness)\n    } else {\n        Size(thickness, thumbSize)\n    }\n\n    return {\n        if (showScrollbar) {\n            drawRect(\n                color = color,\n                topLeft = topLeft,\n                size = size,\n                alpha = alpha(),\n            )\n        }\n    }\n}\n\n@OptIn(FlowPreview::class)\nprivate fun Modifier.drawScrollbar(\n    orientation: Orientation,\n    reverseScrolling: Boolean,\n    onDraw: ContentDrawScope.(\n        reverseDirection: Boolean,\n        atEnd: Boolean,\n        thickness: Float,\n        color: Color,\n        alpha: () -> Float,\n    ) -> Unit,\n): Modifier = composed {\n    val scrolled = remember {\n        MutableSharedFlow<Unit>(\n            extraBufferCapacity = 1,\n            onBufferOverflow = BufferOverflow.DROP_OLDEST,\n        )\n    }\n    val nestedScrollConnection = remember(orientation, scrolled) {\n        object : NestedScrollConnection {\n            override fun onPostScroll(\n                consumed: Offset,\n                available: Offset,\n                source: NestedScrollSource,\n            ): Offset {\n                val delta = if (orientation == Orientation.Horizontal) consumed.x else consumed.y\n                if (delta != 0f) scrolled.tryEmit(Unit)\n                return Offset.Zero\n            }\n        }\n    }\n\n    val alpha = remember { Animatable(0f) }\n    LaunchedEffect(scrolled, alpha) {\n        scrolled\n            .sample(100)\n            .collectLatest {\n                alpha.snapTo(1f)\n                alpha.animateTo(0f, animationSpec = FadeOutAnimationSpec)\n            }\n    }\n\n    val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr\n    val reverseDirection = if (orientation == Orientation.Horizontal) {\n        if (isLtr) reverseScrolling else !reverseScrolling\n    } else {\n        reverseScrolling\n    }\n    val atEnd = if (orientation == Orientation.Vertical) isLtr else true\n\n    val context = LocalContext.current\n    val thickness = remember { ViewConfiguration.get(context).scaledScrollBarSize.toFloat() }\n    val color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.364f)\n    Modifier\n        .nestedScroll(nestedScrollConnection)\n        .drawWithContent {\n            onDraw(reverseDirection, atEnd, thickness, color, alpha::value)\n        }\n}\n\nprivate val FadeOutAnimationSpec = tween<Float>(\n    durationMillis = ViewConfiguration.getScrollBarFadeDuration(),\n    delayMillis = ViewConfiguration.getScrollDefaultDelay(),\n)\n\n@Preview(widthDp = 400, heightDp = 400, showBackground = true)\n@Composable\nfun LazyListScrollbarPreview() {\n    val state = rememberLazyListState()\n    LazyColumn(\n        modifier = Modifier.drawVerticalScrollbar(state),\n        state = state,\n    ) {\n        items(50) {\n            Text(\n                text = \"Item ${it + 1}\",\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(16.dp),\n            )\n        }\n    }\n}\n\n@Preview(widthDp = 400, showBackground = true)\n@Composable\nfun LazyListHorizontalScrollbarPreview() {\n    val state = rememberLazyListState()\n    LazyRow(\n        modifier = Modifier.drawHorizontalScrollbar(state),\n        state = state,\n    ) {\n        items(50) {\n            Text(\n                text = (it + 1).toString(),\n                modifier = Modifier\n                    .padding(horizontal = 8.dp, vertical = 16.dp),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-core/src/main/java/tachiyomi/presentation/core/util/ThemePreviews.kt",
    "content": "package tachiyomi.presentation.core.util\n\nimport android.content.res.Configuration\nimport androidx.compose.ui.tooling.preview.Preview\n\n@Preview(\n    name = \"Light\",\n    showBackground = true,\n)\n@Preview(\n    name = \"Dark\",\n    showBackground = true,\n    uiMode = Configuration.UI_MODE_NIGHT_YES,\n)\nannotation class ThemePreviews\n"
  },
  {
    "path": "presentation-core/src/main/res/values/color_cloudflare.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Cloudflare theme\n  ~\n  ~ Key colors:\n  ~ Primary #F38020\n  ~ Secondary #F38020\n  ~ Tertiary #EFF2F5\n  ~ Neutral #EFF2F5\n-->\n<resources>\n    <color name=\"cloudflare_primary\">#F38020</color>\n    <color name=\"cloudflare_onPrimary\">#EFF2F5</color>\n    <color name=\"cloudflare_primaryContainer\">#F38020</color>\n    <color name=\"cloudflare_onPrimaryContainer\">#EFF2F5</color>\n    <color name=\"cloudflare_secondary\">#F38020</color>\n    <color name=\"cloudflare_onSecondary\">#EFF2F5</color>\n    <color name=\"cloudflare_secondaryContainer\">#F38020</color>\n    <color name=\"cloudflare_onSecondaryContainer\">#EFF2F5</color>\n    <color name=\"cloudflare_tertiary\">#EFF2F5</color>\n    <color name=\"cloudflare_onTertiary\">#F38020</color>\n    <color name=\"cloudflare_tertiaryContainer\">#EFF2F5</color>\n    <color name=\"cloudflare_onTertiaryContainer\">#F38020</color>\n    <color name=\"cloudflare_background\">#EFF2F5</color>\n    <color name=\"cloudflare_onBackground\">#1B1B22</color>\n    <color name=\"cloudflare_surface\">#EFF2F5</color>\n    <color name=\"cloudflare_onSurface\">#1B1B22</color>\n    <color name=\"cloudflare_surfaceVariant\">#B9B0CC</color>\n    <color name=\"cloudflare_onSurfaceVariant\">#D849454E</color>\n    <color name=\"cloudflare_outline\">#F38020</color>\n    <color name=\"cloudflare_inverseOnSurface\">#F3EFF4</color>\n    <color name=\"cloudflare_inverseSurface\">#313033</color>\n    <color name=\"cloudflare_primaryInverse\">#D6BAFF</color>\n    <color name=\"cloudflare_elevationOverlay\">@color/cloudflare_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/color_doom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Doom theme\n  ~\n  ~ Key colors:\n  ~ Primary #FF5722\n  ~ Secondary #FF5722\n  ~ Tertiary #FFECE4\n  ~ Neutral #FFFFFF\n-->\n<resources>\n    <color name=\"doom_primary\">#FF0000</color>\n    <color name=\"doom_onPrimary\">#FFFFFF</color>\n    <color name=\"doom_primaryContainer\">#FF0000</color>\n    <color name=\"doom_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"doom_secondary\">#FF0000</color>\n    <color name=\"doom_onSecondary\">#FFFFFF</color>\n    <color name=\"doom_secondaryContainer\">#FF0000</color>\n    <color name=\"doom_onSecondaryContainer\">#FFFFFF</color>\n    <color name=\"doom_tertiary\">#BFBFBF</color>\n    <color name=\"doom_onTertiary\">#FF0000</color>\n    <color name=\"doom_tertiaryContainer\">#BFBFBF</color>\n    <color name=\"doom_onTertiaryContainer\">#FF0000</color>\n    <color name=\"doom_background\">#212121</color>\n    <color name=\"doom_onBackground\">#FFFFFF</color>\n    <color name=\"doom_surface\">#212121</color>\n    <color name=\"doom_onSurface\">#FFFFFF</color>\n    <color name=\"doom_surfaceVariant\">#4D4D4D</color>\n    <color name=\"doom_onSurfaceVariant\">#D849454E</color>\n    <color name=\"doom_outline\">#FF0000</color>\n    <color name=\"doom_inverseOnSurface\">#FAFAFA</color>\n    <color name=\"doom_inverseSurface\">#424242</color>\n    <color name=\"doom_primaryInverse\">#6D0D0B</color>\n    <color name=\"doom_elevationOverlay\">@color/doom_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/color_lavender.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Lavender theme\n  ~ Original color scheme by CrepeTF\n  ~\n  ~ Key colors:\n  ~ Primary #7B46AF\n  ~ Secondary #7B46AF\n  ~ Tertiary #EDE2FF\n  ~ Neutral #EDE2FF\n-->\n<resources>\n    <color name=\"lavender_primary\">#6D41C8</color>\n    <color name=\"lavender_onPrimary\">#FFFFFF</color>\n    <color name=\"lavender_primaryContainer\">#7B46AF</color>\n    <color name=\"lavender_onPrimaryContainer\">#130038</color>\n    <color name=\"lavender_secondary\">#7B46AF</color>\n    <color name=\"lavender_onSecondary\">#EDE2FF</color>\n    <color name=\"lavender_secondaryContainer\">#C9B0E6</color>\n    <color name=\"lavender_onSecondaryContainer\">#7B46AF</color>\n    <color name=\"lavender_tertiary\">#EDE2FF</color>\n    <color name=\"lavender_onTertiary\">#7B46AF</color>\n    <color name=\"lavender_tertiaryContainer\">#6D3BF0</color>\n    <color name=\"lavender_onTertiaryContainer\">#FFFFFF</color>\n    <color name=\"lavender_error\">#BA1A1A</color>\n    <color name=\"lavender_onError\">#FFFFFF</color>\n    <color name=\"lavender_errorContainer\">#FFDAD6</color>\n    <color name=\"lavender_onErrorContainer\">#410002</color>\n    <color name=\"lavender_background\">#EDE2FF</color>\n    <color name=\"lavender_onBackground\">#1D1A22</color>\n    <color name=\"lavender_surface\">#EDE2FF</color>\n    <color name=\"lavender_onSurface\">#1D1A22</color>\n    <color name=\"lavender_surfaceVariant\">#E4D5F8</color>\n    <color name=\"lavender_onSurfaceVariant\">#4A4453</color>\n    <color name=\"lavender_outline\">#7B7485</color>\n    <color name=\"lavender_outlineVariant\">#CBC3D6</color>\n    <color name=\"lavender_scrim\">#000000</color>\n    <color name=\"lavender_inverseSurface\">#322F38</color>\n    <color name=\"lavender_inverseOnSurface\">#F5EEFA</color>\n    <color name=\"lavender_inversePrimary\">#A177FF</color>\n    <color name=\"lavender_surfaceDim\">#DED7E3</color>\n    <color name=\"lavender_surfaceBright\">#EDE2FF</color>\n    <color name=\"lavender_surfaceContainerLowest\">#DACCEC</color>\n    <color name=\"lavender_surfaceContainerLow\">#DED0F1</color>\n    <color name=\"lavender_surfaceContainer\">#E4D5F8</color>\n    <color name=\"lavender_surfaceContainerHigh\">#EADCFD</color>\n    <color name=\"lavender_surfaceContainerHighest\">#EEE2FF</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/color_matrix.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Doom theme\n  ~\n  ~ Key colors:\n  ~ Primary #FF5722\n  ~ Secondary #FF5722\n  ~ Tertiary #FFECE4\n  ~ Neutral #FFFFFF\n-->\n<resources>\n    <color name=\"matrix_primary\">#00FF00</color>\n    <color name=\"matrix_onPrimary\">#000000</color>\n    <color name=\"matrix_primaryContainer\">#00FF00</color>\n    <color name=\"matrix_onPrimaryContainer\">#000000</color>\n    <color name=\"matrix_secondary\">#00FF00</color>\n    <color name=\"matrix_onSecondary\">#000000</color>\n    <color name=\"matrix_secondaryContainer\">#00FF00</color>\n    <color name=\"matrix_onSecondaryContainer\">#000000</color>\n    <color name=\"matrix_tertiary\">#000000</color>\n    <color name=\"matrix_onTertiary\">#00FF00</color>\n    <color name=\"matrix_tertiaryContainer\">#000000</color>\n    <color name=\"matrix_onTertiaryContainer\">#00FF00</color>\n    <color name=\"matrix_background\">#000000</color>\n    <color name=\"matrix_onBackground\">#FFFFFF</color>\n    <color name=\"matrix_surface\">#000000</color>\n    <color name=\"matrix_onSurface\">#FFFFFF</color>\n    <color name=\"matrix_surfaceVariant\">#111111</color>\n    <color name=\"matrix_onSurfaceVariant\">#D849454E</color>\n    <color name=\"matrix_outline\">#00FF00</color>\n    <color name=\"matrix_inverseOnSurface\">#FAFAFA</color>\n    <color name=\"matrix_inverseSurface\">#424242</color>\n    <color name=\"matrix_primaryInverse\">#007700</color>\n    <color name=\"matrix_elevationOverlay\">@color/matrix_primary</color>\n\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/color_sapphire.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Sapphire theme\n  ~\n  ~ Key colors:\n  ~ Primary #FF5722\n  ~ Secondary #FF5722\n  ~ Tertiary #FFECE4\n  ~ Neutral #FFFFFF\n-->\n<resources>\n    <color name=\"sapphire_primary\">#1E88E5</color>\n    <color name=\"sapphire_onPrimary\">#FFFFFF</color>\n    <color name=\"sapphire_primaryContainer\">#1E88E5</color>\n    <color name=\"sapphire_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"sapphire_secondary\">#1E88E5</color>\n    <color name=\"sapphire_onSecondary\">#FFFFFF</color>\n    <color name=\"sapphire_secondaryContainer\">#1E88E5</color>\n    <color name=\"sapphire_onSecondaryContainer\">#FFFFFF</color>\n    <color name=\"sapphire_tertiary\">#E1F5FE</color>\n    <color name=\"sapphire_onTertiary\">#1E88E5</color>\n    <color name=\"sapphire_tertiaryContainer\">#E1F5FE</color>\n    <color name=\"sapphire_onTertiaryContainer\">#1E88E5</color>\n    <color name=\"sapphire_background\">#FFFFFF</color>\n    <color name=\"sapphire_onBackground\">#212121</color>\n    <color name=\"sapphire_surface\">#FFFFFF</color>\n    <color name=\"sapphire_onSurface\">#212121</color>\n    <color name=\"sapphire_surfaceVariant\">#B3E5FC</color>\n    <color name=\"sapphire_onSurfaceVariant\">#D849454E</color>\n    <color name=\"sapphire_outline\">#1E88E5</color>\n    <color name=\"sapphire_inverseOnSurface\">#FAFAFA</color>\n    <color name=\"sapphire_inverseSurface\">#424242</color>\n    <color name=\"sapphire_primaryInverse\">#2979FF</color>\n    <color name=\"sapphire_elevationOverlay\">@color/sapphire_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"splash\">@color/accent_blue</color>\n\n    <color name=\"cover_placeholder\">#1F888888</color>\n\n    <!-- Default Theme -->\n    <color name=\"divider_default\">@color/md_black_1000_12</color>\n\n    <!-- Blue Theme -->\n    <color name=\"accent_blue\">#54759E</color>\n\n    <!-- AMOLED Mode -->\n    <color name=\"amoled_background\">#000000</color>\n    <color name=\"amoled_onBackground\">#FFFFFF</color>\n    <color name=\"amoled_surface\">#000000</color>\n    <color name=\"amoled_onSurface\">#FFFFFF</color>\n    <color name=\"amoled_surfaceContainer\">#0C0C0C</color>\n    <color name=\"amoled_surfaceContainerHigh\">#131313</color>\n    <color name=\"amoled_surfaceContainerHighest\">#1B1B1B</color>\n\n    <!-- Material Design Colors -->\n    <color name=\"md_black_1000_12\">#1F000000</color>\n    <color name=\"md_white_1000_12\">#1FFFFFFF</color>\n\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_greenapple.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Green Apple theme\n  ~ Original color scheme by CarlosEsco, Jays2Kings and CrepeTF\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #188140\n  ~ Secondary #188140\n  ~ Tertiary #D33131\n  ~ Neutral #5D5F5B\n-->\n<resources>\n    <color name=\"greenapple_primary\">#005927</color>\n    <color name=\"greenapple_onPrimary\">#FFFFFF</color>\n    <color name=\"greenapple_primaryContainer\">#188140</color>\n    <color name=\"greenapple_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"greenapple_secondary\">#005927</color>\n    <color name=\"greenapple_onSecondary\">#FFFFFF</color>\n    <color name=\"greenapple_secondaryContainer\">#97f7a9</color>\n    <color name=\"greenapple_onSecondaryContainer\">#000000</color>\n    <color name=\"greenapple_tertiary\">#9D0012</color>\n    <color name=\"greenapple_onTertiary\">#FFFFFF</color>\n    <color name=\"greenapple_tertiaryContainer\">#D33131</color>\n    <color name=\"greenapple_onTertiaryContainer\">#FFFFFF</color>\n    <color name=\"greenapple_error\">#BA1A1A</color>\n    <color name=\"greenapple_onError\">#FFFFFF</color>\n    <color name=\"greenapple_errorContainer\">#FFDAD6</color>\n    <color name=\"greenapple_onErrorContainer\">#410002</color>\n    <color name=\"greenapple_background\">#F6FBF2</color>\n    <color name=\"greenapple_onBackground\">#181D18</color>\n    <color name=\"greenapple_surface\">#F6FBF2</color>\n    <color name=\"greenapple_onSurface\">#181D18</color>\n    <color name=\"greenapple_surfaceVariant\">#DAE6D7</color>\n    <color name=\"greenapple_onSurfaceVariant\">#3F493F</color>\n    <color name=\"greenapple_outline\">#6F7A6E</color>\n    <color name=\"greenapple_outlineVariant\">#BECABC</color>\n    <color name=\"greenapple_scrim\">#000000</color>\n    <color name=\"greenapple_inverseSurface\">#2C322C</color>\n    <color name=\"greenapple_inverseOnSurface\">#EDF2E9</color>\n    <color name=\"greenapple_inversePrimary\">#7ADB8F</color>\n    <color name=\"greenapple_surfaceDim\">#D6DCD3</color>\n    <color name=\"greenapple_surfaceBright\">#F6FBF2</color>\n    <color name=\"greenapple_surfaceContainerLowest\">#FFFFFF</color>\n    <color name=\"greenapple_surfaceContainerLow\">#F0F5EC</color>\n    <color name=\"greenapple_surfaceContainer\">#EAEFE6</color>\n    <color name=\"greenapple_surfaceContainerHigh\">#E4EAE1</color>\n    <color name=\"greenapple_surfaceContainerHighest\">#DFE4DB</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_midnightdusk.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Midnight Dusk theme\n  ~ Original color scheme by CrepeTF\n  ~ M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #F02475\n  ~ Secondary #F02475\n  ~ Tertiary #7A5733\n  ~ Neutral #16151D\n-->\n<resources>\n    <color name=\"midnightdusk_primary\">#BB0054</color>\n    <color name=\"midnightdusk_onPrimary\">#FFFFFF</color>\n    <color name=\"midnightdusk_primaryContainer\">#FFD9E1</color>\n    <color name=\"midnightdusk_onPrimaryContainer\">#3F0017</color>\n    <color name=\"midnightdusk_inversePrimary\">#FFB1C4</color>\n    <color name=\"midnightdusk_secondary\">#BB0054</color>\n    <color name=\"midnightdusk_onSecondary\">#FFFFFF</color>\n    <color name=\"midnightdusk_secondaryContainer\">#EFBAD4</color>\n    <color name=\"midnightdusk_onSecondaryContainer\">#D1377C</color>\n    <color name=\"midnightdusk_tertiary\">#006638</color>\n    <color name=\"midnightdusk_onTertiary\">#FFFFFF</color>\n    <color name=\"midnightdusk_tertiaryContainer\">#00894b</color>\n    <color name=\"midnightdusk_onTertiaryContainer\">#2D1600</color>\n    <color name=\"midnightdusk_background\">#FFFBFF</color>\n    <color name=\"midnightdusk_onBackground\">#1C1B1F</color>\n    <color name=\"midnightdusk_surface\">#FFFBFF</color>\n    <color name=\"midnightdusk_onSurface\">#1C1B1F</color>\n    <color name=\"midnightdusk_surfaceVariant\">#F9E6F1</color>\n    <color name=\"midnightdusk_onSurfaceVariant\">#524346</color>\n    <color name=\"midnightdusk_surfaceTint\">#BB0054</color>\n    <color name=\"midnightdusk_inverseSurface\">#313033</color>\n    <color name=\"midnightdusk_inverseOnSurface\">#F4F0F4</color>\n    <color name=\"midnightdusk_outline\">#847376</color>\n    <color name=\"midnightdusk_surfaceContainerLowest\">#DAC0CD</color>\n    <color name=\"midnightdusk_surfaceContainerLow\">#E8D1DD</color>\n    <color name=\"midnightdusk_surfaceContainer\">#F9E6F1</color>\n    <color name=\"midnightdusk_surfaceContainerHigh\">#FCF3F8</color>\n    <color name=\"midnightdusk_surfaceContainerHighest\">#FEF9FC</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_monochrome.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"monochrome_primary\">#000000</color>\n    <color name=\"monochrome_onPrimary\">#FFFFFF</color>\n    <color name=\"monochrome_primaryContainer\">#000000</color>\n    <color name=\"monochrome_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"monochrome_secondary\">#000000</color>\n    <color name=\"monochrome_onSecondary\">#FFFFFF</color>\n    <color name=\"monochrome_secondaryContainer\">#888888</color>\n    <color name=\"monochrome_onSecondaryContainer\">#FFFFFF</color>\n    <color name=\"monochrome_tertiary\">#888888</color>\n    <color name=\"monochrome_onTertiary\">#FFFFFF</color>\n    <color name=\"monochrome_tertiaryContainer\">#000000</color>\n    <color name=\"monochrome_onTertiaryContainer\">#FFFFFF</color>\n    <color name=\"monochrome_error\">#000000</color>\n    <color name=\"monochrome_onError\">#FFFFFF</color>\n    <color name=\"monochrome_errorContainer\">#000000</color>\n    <color name=\"monochrome_onErrorContainer\">#FFFFFF</color>\n    <color name=\"monochrome_background\">#FFFFFF</color>\n    <color name=\"monochrome_onBackground\">#000000</color>\n    <color name=\"monochrome_surface\">#FFFFFF</color>\n    <color name=\"monochrome_onSurface\">#000000</color>\n    <color name=\"monochrome_surfaceVariant\">#FFFFFF</color>\n    <color name=\"monochrome_onSurfaceVariant\">#000000</color>\n    <color name=\"monochrome_outline\">#000000</color>\n    <color name=\"monochrome_outlineVariant\">#000000</color>\n    <color name=\"monochrome_scrim\">#000000</color>\n    <color name=\"monochrome_inverseSurface\">#000000</color>\n    <color name=\"monochrome_inverseOnSurface\">#FFFFFF</color>\n    <color name=\"monochrome_inversePrimary\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceDim\">#000000</color>\n    <color name=\"monochrome_surfaceBright\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceContainerLowest\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceContainerLow\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceContainer\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceContainerHigh\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceContainerHighest\">#FFFFFF</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_nord.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--https://www.nordtheme.com/docs/colors-and-palettes-->\n<!--for the light theme, the primary color is switched with the tertiary for better contrast in some case-->\n<resources>\n    <color name=\"nord_primary\">#5E81AC</color>\n    <color name=\"nord_onPrimary\">#000000</color>\n    <color name=\"nord_primaryContainer\">#5E81AC</color>\n    <color name=\"nord_onPrimaryContainer\">#000000</color>\n    <color name=\"nord_inversePrimary\">#8CA8CD</color>\n    <color name=\"nord_secondary\">#81A1C1</color>\n    <color name=\"nord_onSecondary\">#2E3440</color>\n    <color name=\"nord_secondaryContainer\">#91B4D7</color>\n    <color name=\"nord_onSecondaryContainer\">#2E3440</color>\n    <color name=\"nord_tertiary\">#88C0D0</color>\n    <color name=\"nord_onTertiary\">#2E3440</color>\n    <color name=\"nord_tertiaryContainer\">#88C0D0</color>\n    <color name=\"nord_onTertiaryContainer\">#2E3440</color>\n    <color name=\"nord_background\">#ECEFF4</color>\n    <color name=\"nord_onBackground\">#2E3440</color>\n    <color name=\"nord_surface\">#E5E9F0</color>\n    <color name=\"nord_onSurface\">#2E3440</color>\n    <color name=\"nord_surfaceVariant\">#DAE0EA</color>\n    <color name=\"nord_onSurfaceVariant\">#2E3440</color>\n    <color name=\"nord_surfaceTint\">#5E81AC</color>\n    <color name=\"nord_inverseSurface\">#3B4252</color>\n    <color name=\"nord_inverseOnSurface\">#ECEFF4</color>\n    <color name=\"nord_outline\">#2E3440</color>\n    <color name=\"nord_onError\">#ECEFF4</color>\n    <color name=\"nord_errorContainer\">#BF616A</color>\n    <color name=\"nord_onErrorContainer\">#000000</color>\n    <color name=\"nord_surfaceContainerLowest\">#D1D7E0</color>\n    <color name=\"nord_surfaceContainerLow\">#D6DCE6</color>\n    <color name=\"nord_surfaceContainer\">#DAE0EA</color>\n    <color name=\"nord_surfaceContainerHigh\">#E9EDF3</color>\n    <color name=\"nord_surfaceContainerHighest\">#F2F4F8</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_strawberry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Strawberry Daiquiri theme\n  ~ Original color scheme by Soitora\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #ED4A65\n  ~ Secondary #ED4A65\n  ~ Tertiary #775930\n  ~ Neutral #655C5C\n-->\n<resources>\n    <color name=\"strawberry_primary\">#A10833</color>\n    <color name=\"strawberry_onPrimary\">#FFFFFF</color>\n    <color name=\"strawberry_primaryContainer\">#D53855</color>\n    <color name=\"strawberry_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"strawberry_secondary\">#A10833</color>\n    <color name=\"strawberry_onSecondary\">#FFFFFF</color>\n    <color name=\"strawberry_secondaryContainer\">#D53855</color>\n    <color name=\"strawberry_onSecondaryContainer\">#F6EAED</color>\n    <color name=\"strawberry_tertiary\">#5F441D</color>\n    <color name=\"strawberry_onTertiary\">#FFFFFF</color>\n    <color name=\"strawberry_tertiaryContainer\">#87683D</color>\n    <color name=\"strawberry_onTertiaryContainer\">#FFFFFF</color>\n    <color name=\"strawberry_error\">#BA1A1A</color>\n    <color name=\"strawberry_onError\">#FFFFFF</color>\n    <color name=\"strawberry_errorContainer\">#FFDAD6</color>\n    <color name=\"strawberry_onErrorContainer\">#410002</color>\n    <color name=\"strawberry_background\">#FAFAFA</color>\n    <color name=\"strawberry_onBackground\">#261819</color>\n    <color name=\"strawberry_surface\">#FAFAFA</color>\n    <color name=\"strawberry_onSurface\">#261819</color>\n    <color name=\"strawberry_surfaceVariant\">#F6EAED</color>\n    <color name=\"strawberry_onSurfaceVariant\">#594042</color>\n    <color name=\"strawberry_outline\">#8D7071</color>\n    <color name=\"strawberry_outlineVariant\">#E1BEC0</color>\n    <color name=\"strawberry_scrim\">#000000</color>\n    <color name=\"strawberry_inverseSurface\">#3D2C2D</color>\n    <color name=\"strawberry_inverseOnSurface\">#FFECED</color>\n    <color name=\"strawberry_inversePrimary\">#FFB2B8</color>\n    <color name=\"strawberry_surfaceDim\">#EED4D5</color>\n    <color name=\"strawberry_surfaceBright\">#FFF8F7</color>\n    <color name=\"strawberry_surfaceContainerLowest\">#F7DCDD</color>\n    <color name=\"strawberry_surfaceContainerLow\">#FDE2E3</color>\n    <color name=\"strawberry_surfaceContainer\">#F6EAED</color>\n    <color name=\"strawberry_surfaceContainerHigh\">#FFF0F0</color>\n    <color name=\"strawberry_surfaceContainerHighest\">#FFFFFF</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_tachiyomi.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Default theme\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #2979FF\n  ~ Secondary #2979FF\n  ~ Tertiary #47A84A\n  ~ Neutral #5E5E62\n-->\n<resources>\n    <color name=\"tachiyomi_primary\">#0058CA</color>\n    <color name=\"tachiyomi_onPrimary\">#FFFFFF</color>\n    <color name=\"tachiyomi_primaryContainer\">#D9E2FF</color>\n    <color name=\"tachiyomi_onPrimaryContainer\">#001945</color>\n    <color name=\"tachiyomi_inversePrimary\">#B0C6FF</color>\n    <color name=\"tachiyomi_secondary\">#0058CA</color>\n    <color name=\"tachiyomi_onSecondary\">#FFFFFF</color>\n    <color name=\"tachiyomi_secondaryContainer\">#D9E2FF</color>\n    <color name=\"tachiyomi_onSecondaryContainer\">#001945</color>\n    <color name=\"tachiyomi_tertiary\">#006E1B</color>\n    <color name=\"tachiyomi_onTertiary\">#FFFFFF</color>\n    <color name=\"tachiyomi_tertiaryContainer\">#95F990</color>\n    <color name=\"tachiyomi_onTertiaryContainer\">#002203</color>\n    <color name=\"tachiyomi_background\">#FEFBFF</color>\n    <color name=\"tachiyomi_onBackground\">#1B1B1F</color>\n    <color name=\"tachiyomi_surface\">#FEFBFF</color>\n    <color name=\"tachiyomi_onSurface\">#1B1B1F</color>\n    <color name=\"tachiyomi_surfaceVariant\">#F3EDF7</color>\n    <color name=\"tachiyomi_onSurfaceVariant\">#44464F</color>\n    <color name=\"tachiyomi_surfaceTint\">#0058CA</color>\n    <color name=\"tachiyomi_inverseSurface\">#303034</color>\n    <color name=\"tachiyomi_inverseOnSurface\">#F2F0F4</color>\n    <color name=\"tachiyomi_error\">#BA1A1A</color>\n    <color name=\"tachiyomi_onError\">#FFFFFF</color>\n    <color name=\"tachiyomi_errorContainer\">#FFDAD6</color>\n    <color name=\"tachiyomi_onErrorContainer\">#410002</color>\n    <color name=\"tachiyomi_outline\">#757780</color>\n    <color name=\"tachiyomi_outlineVariant\">#C5C6D0</color>\n    <color name=\"tachiyomi_surfaceContainerLowest\">#F5F1F8</color>\n    <color name=\"tachiyomi_surfaceContainerLow\">#F7F2FA</color>\n    <color name=\"tachiyomi_surfaceContainer\">#F3EDF7</color>\n    <color name=\"tachiyomi_surfaceContainerHigh\">#FCF7FF</color>\n    <color name=\"tachiyomi_surfaceContainerHighest\">#FCF7FF</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_tako.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Tako theme\n  ~ Original color scheme by ghostbear\n  ~ M3 colors generated by yours truly\n  ~\n  ~ Key colors:\n  ~ Primary #66577E\n  ~ Secondary #66577E\n  ~ Tertiary #F3B375\n  ~ Neutral #F7F5FF\n-->\n<resources>\n    <color name=\"tako_primary\">#66577E</color>\n    <color name=\"tako_onPrimary\">#F3B375</color>\n    <color name=\"tako_primaryContainer\">#66577E</color>\n    <color name=\"tako_onPrimaryContainer\">#F3B375</color>\n    <color name=\"tako_inversePrimary\">#D6BAFF</color>\n    <color name=\"tako_secondary\">#66577E</color>\n    <color name=\"tako_onSecondary\">#F3B375</color>\n    <color name=\"tako_secondaryContainer\">#C8BED0</color>\n    <color name=\"tako_onSecondaryContainer\">#66577E</color>\n    <color name=\"tako_tertiary\">#F3B375</color>\n    <color name=\"tako_onTertiary\">#574360</color>\n    <color name=\"tako_tertiaryContainer\">#FDD6B0</color>\n    <color name=\"tako_onTertiaryContainer\">#221437</color>\n    <color name=\"tako_background\">#F7F5FF</color>\n    <color name=\"tako_onBackground\">#1B1B22</color>\n    <color name=\"tako_surface\">#F7F5FF</color>\n    <color name=\"tako_onSurface\">#1B1B22</color>\n    <color name=\"tako_surfaceVariant\">#E8E0EB</color>\n    <color name=\"tako_onSurfaceVariant\">#49454E</color>\n    <color name=\"tako_surfaceTint\">#66577E</color>\n    <color name=\"tako_inverseSurface\">#313033</color>\n    <color name=\"tako_inverseOnSurface\">#F3EFF4</color>\n    <color name=\"tako_outline\">#7A757E</color>\n    <color name=\"tako_surfaceContainerLowest\">#D7D0DA</color>\n    <color name=\"tako_surfaceContainerLow\">#DFD8E2</color>\n    <color name=\"tako_surfaceContainer\">#E8E0EB</color>\n    <color name=\"tako_surfaceContainerHigh\">#EEE6F1</color>\n    <color name=\"tako_surfaceContainerHighest\">#F7EEFA</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_tealturqoise.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"tealturquoise_primary\">#008080</color>\n    <color name=\"tealturquoise_onPrimary\">#FFFFFF</color>\n    <color name=\"tealturquoise_primaryContainer\">#008080</color>\n    <color name=\"tealturquoise_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"tealturquoise_inversePrimary\">#40E0D0</color>\n    <color name=\"tealturquoise_secondary\">#008080</color>\n    <color name=\"tealturquoise_onSecondary\">#FFFFFF</color>\n    <color name=\"tealturquoise_secondaryContainer\">#CFE5E4</color>\n    <color name=\"tealturquoise_onSecondaryContainer\">#008080</color>\n    <color name=\"tealturquoise_tertiary\">#FF7F7F</color>\n    <color name=\"tealturquoise_onTertiary\">#000000</color>\n    <color name=\"tealturquoise_tertiaryContainer\">#2A1616</color>\n    <color name=\"tealturquoise_onTertiaryContainer\">#FF7F7F</color>\n    <color name=\"tealturquoise_background\">#FAFAFA</color>\n    <color name=\"tealturquoise_onBackground\">#050505</color>\n    <color name=\"tealturquoise_surface\">#FAFAFA</color>\n    <color name=\"tealturquoise_onSurface\">#050505</color>\n    <color name=\"tealturquoise_surfaceVariant\">#EBF3F1</color>\n    <color name=\"tealturquoise_onSurfaceVariant\">#050505</color>\n    <color name=\"tealturquoise_surfaceTint\">#BFDFDF</color>\n    <color name=\"tealturquoise_inverseSurface\">#050505</color>\n    <color name=\"tealturquoise_inverseOnSurface\">#FAFAFA</color>\n    <color name=\"tealturquoise_outline\">#6F7977</color>\n    <color name=\"tealturquoise_surfaceContainerLowest\">#E1E9E7</color>\n    <color name=\"tealturquoise_surfaceContainerLow\">#E6EEEC</color>\n    <color name=\"tealturquoise_surfaceContainer\">#EBF3F1</color>\n    <color name=\"tealturquoise_surfaceContainerHigh\">#F0F8F6</color>\n    <color name=\"tealturquoise_surfaceContainerHighest\">#F7FFFD</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_tidalwave.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!--\n  ~ Colors for Tidal Wave theme\n  ~ Original color scheme by NahutabDevelop\n  ~\n  ~ Key colors:\n  ~ Primary #006780\n  ~ Secondary #004152\n  ~ Tertiary #92f7bc\n  ~ Neutral #b6b5b8\n-->\n<resources>\n    <color name=\"tidalwave_primary\">#006780</color>\n    <color name=\"tidalwave_onPrimary\">#ffffff</color>\n    <color name=\"tidalwave_primaryContainer\">#B4D4DF</color>\n    <color name=\"tidalwave_onPrimaryContainer\">#001f28</color>\n    <color name=\"tidalwave_inversePrimary\">#ff987f</color>\n    <color name=\"tidalwave_secondary\">#006780</color>\n    <color name=\"tidalwave_onSecondary\">#ffffff</color>\n    <color name=\"tidalwave_secondaryContainer\">#9AE1FF</color>\n    <color name=\"tidalwave_onSecondaryContainer\">#001f28</color>\n    <color name=\"tidalwave_tertiary\">#92f7bc</color>\n    <color name=\"tidalwave_onTertiary\">#001c3b</color>\n    <color name=\"tidalwave_tertiaryContainer\">#c3fada</color>\n    <color name=\"tidalwave_onTertiaryContainer\">#78ffd6</color>\n    <color name=\"tidalwave_background\">#fdfbff</color>\n    <color name=\"tidalwave_onBackground\">#001c3b</color>\n    <color name=\"tidalwave_surface\">#fdfbff</color>\n    <color name=\"tidalwave_onSurface\">#001c3b</color>\n    <color name=\"tidalwave_surfaceVariant\">#e8eff5</color>\n    <color name=\"tidalwave_onSurfaceVariant\">#40484c</color>\n    <color name=\"tidalwave_surfaceTint\">#006780</color>\n    <color name=\"tidalwave_inverseSurface\">#020400</color>\n    <color name=\"tidalwave_inverseOnSurface\">#ffe3c4</color>\n    <color name=\"tidalwave_outline\">#70787c</color>\n    <color name=\"tidalwave_surfaceContainerLowest\">#e2e8ec</color>\n    <color name=\"tidalwave_surfaceContainerLow\">#e5ecf1</color>\n    <color name=\"tidalwave_surfaceContainer\">#e8eff5</color>\n    <color name=\"tidalwave_surfaceContainerHigh\">#edf4fA</color>\n    <color name=\"tidalwave_surfaceContainerHighest\">#f5faff</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_yinyang.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Yin & Yang theme\n  ~ Original color scheme by Riztard\n  ~ M3 colors generated by yours truly + tweaked manually\n-->\n<resources>\n    <color name=\"yinyang_primary\">#000000</color>\n    <color name=\"yinyang_onPrimary\">#FFFFFF</color>\n    <color name=\"yinyang_primaryContainer\">#000000</color>\n    <color name=\"yinyang_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"yinyang_inversePrimary\">#A6A6A6</color>\n    <color name=\"yinyang_secondary\">#000000</color>\n    <color name=\"yinyang_onSecondary\">#FFFFFF</color>\n    <color name=\"yinyang_secondaryContainer\">#DDDDDD</color>\n    <color name=\"yinyang_onSecondaryContainer\">#0C0C0C</color>\n    <color name=\"yinyang_tertiary\">#FFFFFF</color>\n    <color name=\"yinyang_onTertiary\">#000000</color>\n    <color name=\"yinyang_tertiaryContainer\">#D8E2FF</color>\n    <color name=\"yinyang_onTertiaryContainer\">#001947</color>\n    <color name=\"yinyang_background\">#FDFDFD</color>\n    <color name=\"yinyang_onBackground\">#222222</color>\n    <color name=\"yinyang_surface\">#FDFDFD</color>\n    <color name=\"yinyang_onSurface\">#222222</color>\n    <color name=\"yinyang_surfaceVariant\">#E8E8E8</color>\n    <color name=\"yinyang_onSurfaceVariant\">#515151</color>\n    <color name=\"yinyang_surfaceTint\">#000000</color>\n    <color name=\"yinyang_inverseSurface\">#333333</color>\n    <color name=\"yinyang_inverseOnSurface\">#F4F4F4</color>\n    <color name=\"yinyang_outline\">#838383</color>\n    <color name=\"yinyang_surfaceContainerLowest\">#CFCFCF</color>\n    <color name=\"yinyang_surfaceContainerLow\">#DADADA</color>\n    <color name=\"yinyang_surfaceContainer\">#E8E8E8</color>\n    <color name=\"yinyang_surfaceContainerHigh\">#ECECEC</color>\n    <color name=\"yinyang_surfaceContainerHighest\">#EFEFEF</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values/colors_yotsuba.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Yotsuba theme\n  ~ Original color scheme by ztimms73\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #AE3200\n  ~ Secondary #AE3200\n  ~ Tertiary #6B5E2F\n  ~ Neutral #655C5A\n-->\n<resources>\n    <color name=\"yotsuba_primary\">#AE3200</color>\n    <color name=\"yotsuba_onPrimary\">#FFFFFF</color>\n    <color name=\"yotsuba_primaryContainer\">#FFDBCF</color>\n    <color name=\"yotsuba_onPrimaryContainer\">#3B0A00</color>\n    <color name=\"yotsuba_inversePrimary\">#FFB59D</color>\n    <color name=\"yotsuba_secondary\">#AE3200</color>\n    <color name=\"yotsuba_onSecondary\">#FFFFFF</color>\n    <color name=\"yotsuba_secondaryContainer\">#EBCDC2</color>\n    <color name=\"yotsuba_onSecondaryContainer\">#3B0A00</color>\n    <color name=\"yotsuba_tertiary\">#6B5E2F</color>\n    <color name=\"yotsuba_onTertiary\">#FFFFFF</color>\n    <color name=\"yotsuba_tertiaryContainer\">#F5E2A7</color>\n    <color name=\"yotsuba_onTertiaryContainer\">#231B00</color>\n    <color name=\"yotsuba_background\">#FCFCFC</color>\n    <color name=\"yotsuba_onBackground\">#211A18</color>\n    <color name=\"yotsuba_surface\">#FCFCFC</color>\n    <color name=\"yotsuba_onSurface\">#211A18</color>\n    <color name=\"yotsuba_surfaceVariant\">#F6EBE7</color>\n    <color name=\"yotsuba_onSurfaceVariant\">#53433F</color>\n    <color name=\"yotsuba_surfaceTint\">#AE3200</color>\n    <color name=\"yotsuba_inverseSurface\">#362F2D</color>\n    <color name=\"yotsuba_inverseOnSurface\">#FBEEEB</color>\n    <color name=\"yotsuba_outline\">#85736E</color>\n    <color name=\"yotsuba_surfaceContainerLowest\">#ECE3E0</color>\n    <color name=\"yotsuba_surfaceContainerLow\">#F1E7E4</color>\n    <color name=\"yotsuba_surfaceContainer\">#F6EBE7</color>\n    <color name=\"yotsuba_surfaceContainerHigh\">#FAF4F2</color>\n    <color name=\"yotsuba_surfaceContainerHighest\">#FBF6F4</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/color_cloudflare.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Cloudflare theme (Dark Mode)\n  ~\n  ~ Key colors:\n  ~ Primary #F38020\n  ~ Secondary #F38020\n  ~ Tertiary #1B1B22\n  ~ Neutral #1B1B22\n-->\n<resources>\n    <color name=\"cloudflare_primary\">#F38020</color>\n    <color name=\"cloudflare_onPrimary\">#1B1B22</color>\n    <color name=\"cloudflare_primaryContainer\">#F38020</color>\n    <color name=\"cloudflare_onPrimaryContainer\">#1B1B22</color>\n    <color name=\"cloudflare_secondary\">#F38020</color>\n    <color name=\"cloudflare_onSecondary\">#1B1B22</color>\n    <color name=\"cloudflare_secondaryContainer\">#F38020</color>\n    <color name=\"cloudflare_onSecondaryContainer\">#1B1B22</color>\n    <color name=\"cloudflare_tertiary\">#1B1B22</color>\n    <color name=\"cloudflare_onTertiary\">#F38020</color>\n    <color name=\"cloudflare_tertiaryContainer\">#1B1B22</color>\n    <color name=\"cloudflare_onTertiaryContainer\">#F38020</color>\n    <color name=\"cloudflare_background\">#1B1B22</color>\n    <color name=\"cloudflare_onBackground\">#EFF2F5</color>\n    <color name=\"cloudflare_surface\">#1B1B22</color>\n    <color name=\"cloudflare_onSurface\">#EFF2F5</color>\n    <color name=\"cloudflare_surfaceVariant\">#3F3F46</color>\n    <color name=\"cloudflare_onSurfaceVariant\">#D8FFFFFF</color>\n    <color name=\"cloudflare_outline\">#F38020</color>\n    <color name=\"cloudflare_inverseOnSurface\">#313033</color>\n    <color name=\"cloudflare_inverseSurface\">#F3EFF4</color>\n    <color name=\"cloudflare_primaryInverse\">#D6BAFF</color>\n    <color name=\"cloudflare_elevationOverlay\">@color/cloudflare_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/color_doom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Doom theme\n  ~\n  ~ Key colors:\n  ~ Primary #FF5722\n  ~ Secondary #FF5722\n  ~ Tertiary #FFECE4\n  ~ Neutral #FFFFFF\n-->\n<resources>\n    <color name=\"doom_primary\">#FF0000</color>\n    <color name=\"doom_onPrimary\">#FAFAFA</color>\n    <color name=\"doom_primaryContainer\">#FF0000</color>\n    <color name=\"doom_onPrimaryContainer\">#FAFAFA</color>\n    <color name=\"doom_secondary\">#FF0000</color>\n    <color name=\"doom_onSecondary\">#FAFAFA</color>\n    <color name=\"doom_secondaryContainer\">#FF0000</color>\n    <color name=\"doom_onSecondaryContainer\">#FAFAFA</color>\n    <color name=\"doom_tertiary\">#BFBFBF</color>\n    <color name=\"doom_onTertiary\">#FF0000</color>\n    <color name=\"doom_tertiaryContainer\">#BFBFBF</color>\n    <color name=\"doom_onTertiaryContainer\">#FF0000</color>\n    <color name=\"doom_background\">#1B1B1B</color>\n    <color name=\"doom_onBackground\">#FFFFFF</color>\n    <color name=\"doom_surface\">#1B1B1B</color>\n    <color name=\"doom_onSurface\">#FFFFFF</color>\n    <color name=\"doom_surfaceVariant\">#303030</color>\n    <color name=\"doom_onSurfaceVariant\">#D8FFFFFF</color>\n    <color name=\"doom_outline\">#FF0000</color>\n    <color name=\"doom_inverseOnSurface\">#313131</color>\n    <color name=\"doom_inverseSurface\">#FAFAFA</color>\n    <color name=\"doom_primaryInverse\">#6D0D0B</color>\n    <color name=\"doom_elevationOverlay\">@color/doom_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/color_lavender.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Lavender theme\n  ~\n  ~ Color scheme by Osyx\n  ~\n  ~ Key colors:\n  ~ Primary #A177FF\n  ~ Secondary #A177FF\n  ~ Tertiary #5E25E1\n  ~ Neutral #111129\n-->\n<resources>\n    <color name=\"lavender_primary\">#A177FF</color>\n    <color name=\"lavender_onPrimary\">#3D0090</color>\n    <color name=\"lavender_primaryContainer\">#A177FF</color>\n    <color name=\"lavender_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"lavender_secondary\">#A177FF</color>\n    <color name=\"lavender_onSecondary\">#FFFFFF</color>\n    <color name=\"lavender_secondaryContainer\">#423271</color>\n    <color name=\"lavender_onSecondaryContainer\">#A177FF</color>\n    <color name=\"lavender_tertiary\">#CDBDFF</color>\n    <color name=\"lavender_onTertiary\">#360096</color>\n    <color name=\"lavender_tertiaryContainer\">#5512D8</color>\n    <color name=\"lavender_onTertiaryContainer\">#EFE6FF</color>\n    <color name=\"lavender_error\">#FFB4AB</color>\n    <color name=\"lavender_onError\">#690005</color>\n    <color name=\"lavender_errorContainer\">#93000A</color>\n    <color name=\"lavender_onErrorContainer\">#FFDAD6</color>\n    <color name=\"lavender_background\">#111129</color>\n    <color name=\"lavender_onBackground\">#E7E0EC</color>\n    <color name=\"lavender_surface\">#111129</color>\n    <color name=\"lavender_onSurface\">#E7E0EC</color>\n    <color name=\"lavender_surfaceVariant\">#3D2F6B</color>\n    <color name=\"lavender_onSurfaceVariant\">#CBC3D6</color>\n    <color name=\"lavender_outline\">#958E9F</color>\n    <color name=\"lavender_outlineVariant\">#4A4453</color>\n    <color name=\"lavender_scrim\">#000000</color>\n    <color name=\"lavender_inverseSurface\">#E7E0EC</color>\n    <color name=\"lavender_inverseOnSurface\">#322F38</color>\n    <color name=\"lavender_inversePrimary\">#6D41C8</color>\n    <color name=\"lavender_surfaceDim\">#111129</color>\n    <color name=\"lavender_surfaceBright\">#3B3841</color>\n    <color name=\"lavender_surfaceContainerLowest\">#15132d</color>\n    <color name=\"lavender_surfaceContainerLow\">#171531</color>\n    <color name=\"lavender_surfaceContainer\">#1D193B</color>\n    <color name=\"lavender_surfaceContainerHigh\">#241f41</color>\n    <color name=\"lavender_surfaceContainerHighest\">#282446</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/color_matrix.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Doom theme\n  ~\n  ~ Key colors:\n  ~ Primary #FF5722\n  ~ Secondary #FF5722\n  ~ Tertiary #FFECE4\n  ~ Neutral #FFFFFF\n-->\n<resources>\n    <color name=\"matrix_primary\">#00FF00</color>\n    <color name=\"matrix_onPrimary\">#FAFAFA</color>\n    <color name=\"matrix_primaryContainer\">#00FF00</color>\n    <color name=\"matrix_onPrimaryContainer\">#FAFAFA</color>\n    <color name=\"matrix_secondary\">#00FF00</color>\n    <color name=\"matrix_onSecondary\">#FAFAFA</color>\n    <color name=\"matrix_secondaryContainer\">#00FF00</color>\n    <color name=\"matrix_onSecondaryContainer\">#FAFAFA</color>\n    <color name=\"matrix_tertiary\">#FFFFFF</color>\n    <color name=\"matrix_onTertiary\">#00FF00</color>\n    <color name=\"matrix_tertiaryContainer\">#FFFFFF</color>\n    <color name=\"matrix_onTertiaryContainer\">#00FF00</color>\n    <color name=\"matrix_background\">#111111</color>\n    <color name=\"matrix_onBackground\">#FFFFFF</color>\n    <color name=\"matrix_surface\">#111111</color>\n    <color name=\"matrix_onSurface\">#FFFFFF</color>\n    <color name=\"matrix_surfaceVariant\">#212121</color>\n    <color name=\"matrix_onSurfaceVariant\">#D8FFFFFF</color>\n    <color name=\"matrix_outline\">#00FF00</color>\n    <color name=\"matrix_inverseOnSurface\">#313131</color>\n    <color name=\"matrix_inverseSurface\">#FAFAFA</color>\n    <color name=\"matrix_primaryInverse\">#007700</color>\n    <color name=\"matrix_elevationOverlay\">@color/matrix_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/color_sapphire.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Sapphire theme\n  ~\n  ~ Key colors:\n  ~ Primary #FF5722\n  ~ Secondary #FF5722\n  ~ Tertiary #FFECE4\n  ~ Neutral #FFFFFF\n-->\n<resources>\n    <color name=\"sapphire_primary\">#1E88E5</color>\n    <color name=\"sapphire_onPrimary\">#FAFAFA</color>\n    <color name=\"sapphire_primaryContainer\">#1E88E5</color>\n    <color name=\"sapphire_onPrimaryContainer\">#FAFAFA</color>\n    <color name=\"sapphire_secondary\">#1E88E5</color>\n    <color name=\"sapphire_onSecondary\">#FAFAFA</color>\n    <color name=\"sapphire_secondaryContainer\">#1E88E5</color>\n    <color name=\"sapphire_onSecondaryContainer\">#FAFAFA</color>\n    <color name=\"sapphire_tertiary\">#212121</color>\n    <color name=\"sapphire_onTertiary\">#1E88E5</color>\n    <color name=\"sapphire_tertiaryContainer\">#212121</color>\n    <color name=\"sapphire_onTertiaryContainer\">#1E88E5</color>\n    <color name=\"sapphire_background\">#212121</color>\n    <color name=\"sapphire_onBackground\">#FFFFFF</color>\n    <color name=\"sapphire_surface\">#212121</color>\n    <color name=\"sapphire_onSurface\">#FFFFFF</color>\n    <color name=\"sapphire_surfaceVariant\">#424242</color>\n    <color name=\"sapphire_onSurfaceVariant\">#D8FFFFFF</color>\n    <color name=\"sapphire_outline\">#1E88E5</color>\n    <color name=\"sapphire_inverseOnSurface\">#313131</color>\n    <color name=\"sapphire_inverseSurface\">#FAFAFA</color>\n    <color name=\"sapphire_primaryInverse\">#2979FF</color>\n    <color name=\"sapphire_elevationOverlay\">@color/sapphire_primary</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"splash\">#202125</color>\n\n    <!-- Default Theme -->\n    <color name=\"divider_default\">@color/md_white_1000_12</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_greenapple.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Green Apple theme\n  ~ Original color scheme by CarlosEsco, Jays2Kings and CrepeTF\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #188140\n  ~ Secondary #188140\n  ~ Tertiary #D33131\n  ~ Neutral #5D5F5B\n-->\n<resources>\n    <color name=\"greenapple_primary\">#7ADB8F</color>\n    <color name=\"greenapple_onPrimary\">#003917</color>\n    <color name=\"greenapple_primaryContainer\">#017737</color>\n    <color name=\"greenapple_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"greenapple_secondary\">#7ADB8F</color>\n    <color name=\"greenapple_onSecondary\">#003917</color>\n    <color name=\"greenapple_secondaryContainer\">#017737</color>\n    <color name=\"greenapple_onSecondaryContainer\">#FFFFFF</color>\n    <color name=\"greenapple_tertiary\">#FFB3AC</color>\n    <color name=\"greenapple_onTertiary\">#680008</color>\n    <color name=\"greenapple_tertiaryContainer\">#C7282A</color>\n    <color name=\"greenapple_onTertiaryContainer\">#FFFFFF</color>\n    <color name=\"greenapple_error\">#FFB4AB</color>\n    <color name=\"greenapple_onError\">#690005</color>\n    <color name=\"greenapple_errorContainer\">#93000A</color>\n    <color name=\"greenapple_onErrorContainer\">#FFDAD6</color>\n    <color name=\"greenapple_background\">#0F1510</color>\n    <color name=\"greenapple_onBackground\">#DFE4DB</color>\n    <color name=\"greenapple_surface\">#0F1510</color>\n    <color name=\"greenapple_onSurface\">#DFE4DB</color>\n    <color name=\"greenapple_surfaceVariant\">#3F493F</color>\n    <color name=\"greenapple_onSurfaceVariant\">#BECABC</color>\n    <color name=\"greenapple_outline\">#889487</color>\n    <color name=\"greenapple_outlineVariant\">#3F493F</color>\n    <color name=\"greenapple_scrim\">#000000</color>\n    <color name=\"greenapple_inverseSurface\">#DFE4DB</color>\n    <color name=\"greenapple_inverseOnSurface\">#2C322C</color>\n    <color name=\"greenapple_inversePrimary\">#006D32</color>\n    <color name=\"greenapple_surfaceDim\">#0F1510</color>\n    <color name=\"greenapple_surfaceBright\">#353B35</color>\n    <color name=\"greenapple_surfaceContainerLowest\">#0A0F0B</color>\n    <color name=\"greenapple_surfaceContainerLow\">#181D18</color>\n    <color name=\"greenapple_surfaceContainer\">#1C211C</color>\n    <color name=\"greenapple_surfaceContainerHigh\">#262B26</color>\n    <color name=\"greenapple_surfaceContainerHighest\">#313630</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_midnightdusk.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Midnight Dusk theme\n  ~ Original color scheme by CrepeTF\n  ~ M3 color scheme generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #F02475\n  ~ Secondary #F02475\n  ~ Tertiary #7A5733\n  ~ Neutral #16151D\n-->\n<resources>\n    <color name=\"midnightdusk_primary\">#F02475</color>\n    <color name=\"midnightdusk_onPrimary\">#FFFFFF</color>\n    <color name=\"midnightdusk_primaryContainer\">#BD1C5C</color>\n    <color name=\"midnightdusk_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"midnightdusk_inversePrimary\">#F02475</color>\n    <color name=\"midnightdusk_secondary\">#F02475</color>\n    <color name=\"midnightdusk_onSecondary\">#16151D</color>\n    <color name=\"midnightdusk_secondaryContainer\">#66183C</color>\n    <color name=\"midnightdusk_onSecondaryContainer\">#F02475</color>\n    <color name=\"midnightdusk_tertiary\">#55971C</color>\n    <color name=\"midnightdusk_onTertiary\">#16151D</color>\n    <color name=\"midnightdusk_tertiaryContainer\">#386412</color>\n    <color name=\"midnightdusk_onTertiaryContainer\">#E5E1E5</color>\n    <color name=\"midnightdusk_background\">#16151D</color>\n    <color name=\"midnightdusk_onBackground\">#E5E1E5</color>\n    <color name=\"midnightdusk_surface\">#16151D</color>\n    <color name=\"midnightdusk_onSurface\">#E5E1E5</color>\n    <color name=\"midnightdusk_surfaceVariant\">#281624</color>\n    <color name=\"midnightdusk_onSurfaceVariant\">#D6C1C4</color>\n    <color name=\"midnightdusk_surfaceTint\">#F02475</color>\n    <color name=\"midnightdusk_inverseSurface\">#333043</color>\n    <color name=\"midnightdusk_inverseOnSurface\">#FFFFFF</color>\n    <color name=\"midnightdusk_outline\">#9F8C8F</color>\n    <color name=\"midnightdusk_surfaceContainerLowest\">#221320</color>\n    <color name=\"midnightdusk_surfaceContainerLow\">#251522</color>\n    <color name=\"midnightdusk_surfaceContainer\">#281624</color>\n    <color name=\"midnightdusk_surfaceContainerHigh\">#2D1C2A</color>\n    <color name=\"midnightdusk_surfaceContainerHighest\">#2F1F2C</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_monochrome.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"monochrome_primary\">#FFFFFF</color>\n    <color name=\"monochrome_onPrimary\">#000000</color>\n    <color name=\"monochrome_primaryContainer\">#FFFFFF</color>\n    <color name=\"monochrome_onPrimaryContainer\">#000000</color>\n    <color name=\"monochrome_secondary\">#FFFFFF</color>\n    <color name=\"monochrome_onSecondary\">#000000</color>\n    <color name=\"monochrome_secondaryContainer\">#777777</color>\n    <color name=\"monochrome_onSecondaryContainer\">#000000</color>\n    <color name=\"monochrome_tertiary\">#777777</color>\n    <color name=\"monochrome_onTertiary\">#FFFFFF</color>\n    <color name=\"monochrome_tertiaryContainer\">#FFFFFF</color>\n    <color name=\"monochrome_onTertiaryContainer\">#000000</color>\n    <color name=\"monochrome_error\">#FFFFFF</color>\n    <color name=\"monochrome_onError\">#000000</color>\n    <color name=\"monochrome_errorContainer\">#FFFFFF</color>\n    <color name=\"monochrome_onErrorContainer\">#000000</color>\n    <color name=\"monochrome_background\">#000000</color>\n    <color name=\"monochrome_onBackground\">#FFFFFF</color>\n    <color name=\"monochrome_surface\">#000000</color>\n    <color name=\"monochrome_onSurface\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceVariant\">#000000</color>\n    <color name=\"monochrome_onSurfaceVariant\">#FFFFFF</color>\n    <color name=\"monochrome_outline\">#FFFFFF</color>\n    <color name=\"monochrome_outlineVariant\">#FFFFFF</color>\n    <color name=\"monochrome_scrim\">#000000</color>\n    <color name=\"monochrome_inverseSurface\">#FFFFFF</color>\n    <color name=\"monochrome_inverseOnSurface\">#000000</color>\n    <color name=\"monochrome_inversePrimary\">#000000</color>\n    <color name=\"monochrome_surfaceDim\">#000000</color>\n    <color name=\"monochrome_surfaceBright\">#FFFFFF</color>\n    <color name=\"monochrome_surfaceContainerLowest\">#000000</color>\n    <color name=\"monochrome_surfaceContainerLow\">#000000</color>\n    <color name=\"monochrome_surfaceContainer\">#000000</color>\n    <color name=\"monochrome_surfaceContainerHigh\">#000000</color>\n    <color name=\"monochrome_surfaceContainerHighest\">#000000</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_nord.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--https://www.nordtheme.com/docs/colors-and-palettes-->\n<resources>\n    <color name=\"nord_primary\">#88C0D0</color>\n    <color name=\"nord_onPrimary\">#2E3440</color>\n    <color name=\"nord_primaryContainer\">#88C0D0</color>\n    <color name=\"nord_onPrimaryContainer\">#2E3440</color>\n    <color name=\"nord_inversePrimary\">#397E91</color>\n    <color name=\"nord_secondary\">#81A1C1</color>\n    <color name=\"nord_onSecondary\">#2E3440</color>\n    <color name=\"nord_secondaryContainer\">#506275</color>\n    <color name=\"nord_onSecondaryContainer\">#88C0D0</color>\n    <color name=\"nord_tertiary\">#5E81AC</color>\n    <color name=\"nord_onTertiary\">#000000</color>\n    <color name=\"nord_tertiaryContainer\">#5E81AC</color>\n    <color name=\"nord_onTertiaryContainer\">#000000</color>\n    <color name=\"nord_background\">#2E3440</color>\n    <color name=\"nord_onBackground\">#ECEFF4</color>\n    <color name=\"nord_surface\">#2E3440</color>\n    <color name=\"nord_onSurface\">#ECEFF4</color>\n    <color name=\"nord_surfaceVariant\">#414C5C</color>\n    <color name=\"nord_onSurfaceVariant\">#ECEFF4</color>\n    <color name=\"nord_surfaceTint\">#88C0D0</color>\n    <color name=\"nord_inverseSurface\">#D8DEE9</color>\n    <color name=\"nord_inverseOnSurface\">#2E3440</color>\n    <color name=\"nord_outline\">#6d717b</color>\n    <color name=\"nord_outlineVariant\">#90939a</color>\n    <color name=\"nord_onError\">#2E3440</color>\n    <color name=\"nord_errorContainer\">#BF616A</color>\n    <color name=\"nord_onErrorContainer\">#000000</color>\n    <color name=\"nord_surfaceContainerLowest\">#373F4D</color>\n    <color name=\"nord_surfaceContainerLow\">#3E4756</color>\n    <color name=\"nord_surfaceContainer\">#414C5C</color>\n    <color name=\"nord_surfaceContainerHigh\">#4E5766</color>\n    <color name=\"nord_surfaceContainerHighest\">#505968</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_strawberry.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Strawberry Daiquiri theme\n  ~ Original color scheme by Soitora\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #ED4A65\n  ~ Secondary #ED4A65\n  ~ Tertiary #775930\n  ~ Neutral #655C5C\n-->\n<resources>\n    <color name=\"strawberry_primary\">#FFB2B8</color>\n    <color name=\"strawberry_onPrimary\">#67001D</color>\n    <color name=\"strawberry_primaryContainer\">#D53855</color>\n    <color name=\"strawberry_onPrimaryContainer\">#FFFFFF</color>\n    <color name=\"strawberry_secondary\">#ED4A65</color>\n    <color name=\"strawberry_onSecondary\">#201A1A</color>\n    <color name=\"strawberry_secondaryContainer\">#91002A</color>\n    <color name=\"strawberry_onSecondaryContainer\">#FFFFFF</color>\n    <color name=\"strawberry_tertiary\">#E8C08E</color>\n    <color name=\"strawberry_onTertiary\">#201A1A</color>\n    <color name=\"strawberry_tertiaryContainer\">#775930</color>\n    <color name=\"strawberry_onTertiaryContainer\">#FFF7F1</color>\n    <color name=\"strawberry_error\">#FFB4AB</color>\n    <color name=\"strawberry_onError\">#690005</color>\n    <color name=\"strawberry_errorContainer\">#93000A</color>\n    <color name=\"strawberry_onErrorContainer\">#FFDAD6</color>\n    <color name=\"strawberry_background\">#201A1A</color>\n    <color name=\"strawberry_onBackground\">#F7DCDD</color>\n    <color name=\"strawberry_surface\">#201A1A</color>\n    <color name=\"strawberry_onSurface\">#F7DCDD</color>\n    <color name=\"strawberry_surfaceVariant\">#322727</color>\n    <color name=\"strawberry_onSurfaceVariant\">#E1BEC0</color>\n    <color name=\"strawberry_outline\">#A9898B</color>\n    <color name=\"strawberry_outlineVariant\">#594042</color>\n    <color name=\"strawberry_scrim\">#000000</color>\n    <color name=\"strawberry_inverseSurface\">#F7DCDD</color>\n    <color name=\"strawberry_inverseOnSurface\">#3D2C2D</color>\n    <color name=\"strawberry_inversePrimary\">#B61F40</color>\n    <color name=\"strawberry_surfaceDim\">#1D1011</color>\n    <color name=\"strawberry_surfaceBright\">#463536</color>\n    <color name=\"strawberry_surfaceContainerLowest\">#2C2222</color>\n    <color name=\"strawberry_surfaceContainerLow\">#302525</color>\n    <color name=\"strawberry_surfaceContainer\">#322727</color>\n    <color name=\"strawberry_surfaceContainerHigh\">#3C2F2F</color>\n    <color name=\"strawberry_surfaceContainerHighest\">#463737</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_tachiyomi.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Default theme\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #2979FF\n  ~ Secondary #2979FF\n  ~ Tertiary #47A84A\n  ~ Neutral #5E5E62\n-->\n<resources>\n    <color name=\"tachiyomi_primary\">#B0C6FF</color>\n    <color name=\"tachiyomi_onPrimary\">#002D6E</color>\n    <color name=\"tachiyomi_primaryContainer\">#00429B</color>\n    <color name=\"tachiyomi_onPrimaryContainer\">#D9E2FF</color>\n    <color name=\"tachiyomi_inversePrimary\">#0058CA</color>\n    <color name=\"tachiyomi_secondary\">#B0C6FF</color>\n    <color name=\"tachiyomi_onSecondary\">#002D6E</color>\n    <color name=\"tachiyomi_secondaryContainer\">#00429B</color>\n    <color name=\"tachiyomi_onSecondaryContainer\">#D9E2FF</color>\n    <color name=\"tachiyomi_tertiary\">#7ADC77</color>\n    <color name=\"tachiyomi_onTertiary\">#003909</color>\n    <color name=\"tachiyomi_tertiaryContainer\">#005312</color>\n    <color name=\"tachiyomi_onTertiaryContainer\">#95F990</color>\n    <color name=\"tachiyomi_background\">#1B1B1F</color>\n    <color name=\"tachiyomi_onBackground\">#E3E2E6</color>\n    <color name=\"tachiyomi_surface\">#1B1B1F</color>\n    <color name=\"tachiyomi_onSurface\">#E3E2E6</color>\n    <color name=\"tachiyomi_surfaceVariant\">#211F26</color>\n    <color name=\"tachiyomi_onSurfaceVariant\">#C5C6D0</color>\n    <color name=\"tachiyomi_surfaceTint\">#B0C6FF</color>\n    <color name=\"tachiyomi_inverseSurface\">#E3E2E6</color>\n    <color name=\"tachiyomi_inverseOnSurface\">#1B1B1F</color>\n    <color name=\"tachiyomi_error\">#FFB4AB</color>\n    <color name=\"tachiyomi_onError\">#690005</color>\n    <color name=\"tachiyomi_errorContainer\">#93000A</color>\n    <color name=\"tachiyomi_onErrorContainer\">#FFDAD6</color>\n    <color name=\"tachiyomi_outline\">#8F9099</color>\n    <color name=\"tachiyomi_outlineVariant\">#44464F</color>\n    <color name=\"tachiyomi_surfaceContainerLowest\">#1A181D</color>\n    <color name=\"tachiyomi_surfaceContainerLow\">#1E1C22</color>\n    <color name=\"tachiyomi_surfaceContainer\">#211F26</color>\n    <color name=\"tachiyomi_surfaceContainerHigh\">#292730</color>\n    <color name=\"tachiyomi_surfaceContainerHighest\">#302E38</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_tako.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Tako theme\n  ~ Original color scheme by ghostbear\n  ~ M3 color scheme generated by yours truly\n  ~\n  ~ Key colors:\n  ~ Primary #F3B375\n  ~ Secondary #F3B375\n  ~ Tertiary #66577E\n  ~ Neutral #21212E\n-->\n<resources>\n    <color name=\"tako_primary\">#F3B375</color>\n    <color name=\"tako_onPrimary\">#38294E</color>\n    <color name=\"tako_primaryContainer\">#F3B375</color>\n    <color name=\"tako_onPrimaryContainer\">#38294E</color>\n    <color name=\"tako_inversePrimary\">#84531E</color>\n    <color name=\"tako_secondary\">#F3B375</color>\n    <color name=\"tako_onSecondary\">#38294E</color>\n    <color name=\"tako_secondaryContainer\">#5C4D4B</color>\n    <color name=\"tako_onSecondaryContainer\">#F3B375</color>\n    <color name=\"tako_tertiary\">#66577E</color>\n    <color name=\"tako_onTertiary\">#F3B375</color>\n    <color name=\"tako_tertiaryContainer\">#4E4065</color>\n    <color name=\"tako_onTertiaryContainer\">#EDDCFF</color>\n    <color name=\"tako_background\">#21212E</color>\n    <color name=\"tako_onBackground\">#E3E0F2</color>\n    <color name=\"tako_surface\">#21212E</color>\n    <color name=\"tako_onSurface\">#E3E0F2</color>\n    <color name=\"tako_surfaceVariant\">#2A2A3C</color>\n    <color name=\"tako_onSurfaceVariant\">#CBC4CE</color>\n    <color name=\"tako_surfaceTint\">#66577E</color>\n    <color name=\"tako_inverseSurface\">#E5E1E6</color>\n    <color name=\"tako_inverseOnSurface\">#1B1B1E</color>\n    <color name=\"tako_outline\">#958F99</color>\n    <color name=\"tako_surfaceContainerLowest\">#20202E</color>\n    <color name=\"tako_surfaceContainerLow\">#262636</color>\n    <color name=\"tako_surfaceContainer\">#2A2A3C</color>\n    <color name=\"tako_surfaceContainerHigh\">#303044</color>\n    <color name=\"tako_surfaceContainerHighest\">#36364D</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_tealturqoise.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"tealturquoise_primary\">#40E0D0</color>\n    <color name=\"tealturquoise_onPrimary\">#000000</color>\n    <color name=\"tealturquoise_primaryContainer\">#40E0D0</color>\n    <color name=\"tealturquoise_onPrimaryContainer\">#000000</color>\n    <color name=\"tealturquoise_inversePrimary\">#008080</color>\n    <color name=\"tealturquoise_secondary\">#40E0D0</color>\n    <color name=\"tealturquoise_onSecondary\">#000000</color>\n    <color name=\"tealturquoise_secondaryContainer\">#18544E</color>\n    <color name=\"tealturquoise_onSecondaryContainer\">#40E0D0</color>\n    <color name=\"tealturquoise_tertiary\">#BF1F2F</color>\n    <color name=\"tealturquoise_onTertiary\">#FFFFFF</color>\n    <color name=\"tealturquoise_tertiaryContainer\">#200508</color>\n    <color name=\"tealturquoise_onTertiaryContainer\">#BF1F2F</color>\n    <color name=\"tealturquoise_background\">#202125</color>\n    <color name=\"tealturquoise_onBackground\">#DFDEDA</color>\n    <color name=\"tealturquoise_surface\">#202125</color>\n    <color name=\"tealturquoise_onSurface\">#DFDEDA</color>\n    <color name=\"tealturquoise_surfaceVariant\">#233133</color>\n    <color name=\"tealturquoise_onSurfaceVariant\">#DFDEDA</color>\n    <color name=\"tealturquoise_surfaceTint\">#40E0D0</color>\n    <color name=\"tealturquoise_inverseSurface\">#DFDEDA</color>\n    <color name=\"tealturquoise_inverseOnSurface\">#202125</color>\n    <color name=\"tealturquoise_outline\">#899391</color>\n    <color name=\"tealturquoise_surfaceContainerLowest\">#202C2E</color>\n    <color name=\"tealturquoise_surfaceContainerLow\">#222F31</color>\n    <color name=\"tealturquoise_surfaceContainer\">#233133</color>\n    <color name=\"tealturquoise_surfaceContainerHigh\">#28383A</color>\n    <color name=\"tealturquoise_surfaceContainerHighest\">#2F4244</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_tidalwave.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Tidal Wave theme\n  ~ Original color scheme by NahutabDevelop\n  ~\n  ~ Key colors:\n  ~ Primary #004152\n  ~ Secondary #5ed4fc\n  ~ Tertiary #92f7bc\n  ~ Neutral #16151D\n-->\n<resources>\n    <color name=\"tidalwave_primary\">#5ed4fc</color>\n    <color name=\"tidalwave_onPrimary\">#003544</color>\n    <color name=\"tidalwave_primaryContainer\">#004d61</color>\n    <color name=\"tidalwave_onPrimaryContainer\">#b8eaff</color>\n    <color name=\"tidalwave_inversePrimary\">#a12b03</color>\n    <color name=\"tidalwave_secondary\">#5ed4fc</color>\n    <color name=\"tidalwave_onSecondary\">#003544</color>\n    <color name=\"tidalwave_secondaryContainer\">#004d61</color>\n    <color name=\"tidalwave_onSecondaryContainer\">#b8eaff</color>\n    <color name=\"tidalwave_tertiary\">#92f7bc</color>\n    <color name=\"tidalwave_onTertiary\">#001c3b</color>\n    <color name=\"tidalwave_tertiaryContainer\">#c3fada</color>\n    <color name=\"tidalwave_onTertiaryContainer\">#78ffd6</color>\n    <color name=\"tidalwave_background\">#001c3b</color>\n    <color name=\"tidalwave_onBackground\">#d5e3ff</color>\n    <color name=\"tidalwave_surface\">#001c3b</color>\n    <color name=\"tidalwave_onSurface\">#d5e3ff</color>\n    <color name=\"tidalwave_surfaceVariant\">#082b4b</color>\n    <color name=\"tidalwave_onSurfaceVariant\">#bfc8cc</color>\n    <color name=\"tidalwave_surfaceTint\">#5ed4fc</color>\n    <color name=\"tidalwave_inverseSurface\">#ffe3c4</color>\n    <color name=\"tidalwave_inverseOnSurface\">#001c3b</color>\n    <color name=\"tidalwave_outline\">#8a9296</color>\n    <color name=\"tidalwave_surfaceContainerLowest\">#072642</color>\n    <color name=\"tidalwave_surfaceContainerLow\">#072947</color>\n    <color name=\"tidalwave_surfaceContainer\">#082b4b</color>\n    <color name=\"tidalwave_surfaceContainerHigh\">#093257</color>\n    <color name=\"tidalwave_surfaceContainerHighest\">#0A3861</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_yinyang.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Yin & Yang theme\n  ~ Original color scheme by Riztard\n  ~ M3 colors generated by yours truly + tweaked manually\n-->\n<resources>\n    <color name=\"yinyang_primary\">#FFFFFF</color>\n    <color name=\"yinyang_onPrimary\">#5A5A5A</color>\n    <color name=\"yinyang_primaryContainer\">#FFFFFF</color>\n    <color name=\"yinyang_onPrimaryContainer\">#000000</color>\n    <color name=\"yinyang_inversePrimary\">#CECECE</color>\n    <color name=\"yinyang_secondary\">#FFFFFF</color>\n    <color name=\"yinyang_onSecondary\">#5A5A5A</color>\n    <color name=\"yinyang_secondaryContainer\">#717171</color>\n    <color name=\"yinyang_onSecondaryContainer\">#E4E4E4</color>\n    <color name=\"yinyang_tertiary\">#000000</color>\n    <color name=\"yinyang_onTertiary\">#FFFFFF</color>\n    <color name=\"yinyang_tertiaryContainer\">#00419E</color>\n    <color name=\"yinyang_onTertiaryContainer\">#D8E2FF</color>\n    <color name=\"yinyang_background\">#1E1E1E</color>\n    <color name=\"yinyang_onBackground\">#E6E6E6</color>\n    <color name=\"yinyang_surface\">#1E1E1E</color>\n    <color name=\"yinyang_onSurface\">#E6E6E6</color>\n    <color name=\"yinyang_surfaceVariant\">#313131</color>\n    <color name=\"yinyang_onSurfaceVariant\">#D1D1D1</color>\n    <color name=\"yinyang_surfaceTint\">#FFFFFF</color>\n    <color name=\"yinyang_inverseSurface\">#E6E6E6</color>\n    <color name=\"yinyang_inverseOnSurface\">#1E1E1E</color>\n    <color name=\"yinyang_outline\">#999999</color>\n    <color name=\"yinyang_surfaceContainerLowest\">#2A2A2A</color>\n    <color name=\"yinyang_surfaceContainerLow\">#2D2D2D</color>\n    <color name=\"yinyang_surfaceContainer\">#313131</color>\n    <color name=\"yinyang_surfaceContainerHigh\">#383838</color>\n    <color name=\"yinyang_surfaceContainerHighest\">#3F3F3F</color>\n</resources>\n"
  },
  {
    "path": "presentation-core/src/main/res/values-night/colors_yotsuba.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n  ~ Colors for Yotsuba theme\n  ~ Original color scheme by ztimms73\n  ~ M3 colors generated by Material Theme Builder (https://goo.gle/material-theme-builder-web)\n  ~\n  ~ Key colors:\n  ~ Primary #AE3200\n  ~ Secondary #AE3200\n  ~ Tertiary #6B5E2F\n  ~ Neutral #655C5A\n-->\n<resources>\n    <color name=\"yotsuba_primary\">#FFB59D</color>\n    <color name=\"yotsuba_onPrimary\">#5F1600</color>\n    <color name=\"yotsuba_primaryContainer\">#862200</color>\n    <color name=\"yotsuba_onPrimaryContainer\">#FFDBCF</color>\n    <color name=\"yotsuba_inversePrimary\">#AE3200</color>\n    <color name=\"yotsuba_secondary\">#FFB59D</color>\n    <color name=\"yotsuba_onSecondary\">#5F1600</color>\n    <color name=\"yotsuba_secondaryContainer\">#862200</color>\n    <color name=\"yotsuba_onSecondaryContainer\">#FFDBCF</color>\n    <color name=\"yotsuba_tertiary\">#D7C68D</color>\n    <color name=\"yotsuba_onTertiary\">#3A2F05</color>\n    <color name=\"yotsuba_tertiaryContainer\">#524619</color>\n    <color name=\"yotsuba_onTertiaryContainer\">#F5E2A7</color>\n    <color name=\"yotsuba_background\">#211A18</color>\n    <color name=\"yotsuba_onBackground\">#EDE0DD</color>\n    <color name=\"yotsuba_surface\">#211A18</color>\n    <color name=\"yotsuba_onSurface\">#EDE0DD</color>\n    <color name=\"yotsuba_surfaceVariant\">#332723</color>\n    <color name=\"yotsuba_onSurfaceVariant\">#D8C2BC</color>\n    <color name=\"yotsuba_surfaceTint\">#FFB59D</color>\n    <color name=\"yotsuba_inverseSurface\">#EDE0DD</color>\n    <color name=\"yotsuba_inverseOnSurface\">#211A18</color>\n    <color name=\"yotsuba_outline\">#A08C87</color>\n    <color name=\"yotsuba_surfaceContainerLowest\">#2E221F</color>\n    <color name=\"yotsuba_surfaceContainerLow\">#312521</color>\n    <color name=\"yotsuba_surfaceContainer\">#332723</color>\n    <color name=\"yotsuba_surfaceContainerHigh\">#413531</color>\n    <color name=\"yotsuba_surfaceContainerHighest\">#4C403D</color>\n</resources>\n"
  },
  {
    "path": "presentation-widget/build.gradle.kts",
    "content": "plugins {\n    id(\"mihon.library\")\n    id(\"mihon.library.compose\")\n    kotlin(\"android\")\n}\n\nandroid {\n    namespace = \"tachiyomi.presentation.widget\"\n\n    defaultConfig {\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n}\n\ndependencies {\n    implementation(projects.core.common)\n    implementation(projects.domain)\n    implementation(projects.presentationCore)\n    api(projects.i18n)\n    api(projects.i18nAniyomi)\n\n    implementation(compose.glance)\n    implementation(libs.material)\n\n    implementation(kotlinx.immutables)\n\n    implementation(platform(libs.coil.bom))\n    implementation(libs.coil.core)\n\n    api(libs.injekt)\n}\n"
  },
  {
    "path": "presentation-widget/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "presentation-widget/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "presentation-widget/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <application>\n\n        <receiver\n            android:name=\"tachiyomi.presentation.widget.entries.manga.MangaUpdatesGridGlanceReceiver\"\n            android:enabled=\"@bool/glance_appwidget_available\"\n            android:exported=\"false\"\n            android:label=\"@string/label_recent_updates\">\n            <intent-filter>\n                <action android:name=\"android.appwidget.action.APPWIDGET_UPDATE\" />\n            </intent-filter>\n\n            <meta-data\n                android:name=\"android.appwidget.provider\"\n                android:resource=\"@xml/updates_grid_homescreen_widget_info\" />\n        </receiver>\n\n        <receiver\n            android:name=\"tachiyomi.presentation.widget.entries.anime.AnimeUpdatesGridGlanceReceiver\"\n            android:enabled=\"@bool/glance_appwidget_available\"\n            android:exported=\"false\"\n            android:label=\"@string/label_recent_anime_updates\">\n            <intent-filter>\n                <action android:name=\"android.appwidget.action.APPWIDGET_UPDATE\" />\n            </intent-filter>\n            <meta-data\n                android:name=\"android.appwidget.provider\"\n                android:resource=\"@xml/updates_grid_homescreen_widget_info\" />\n        </receiver>\n\n        <receiver\n            android:name=\"tachiyomi.presentation.widget.entries.manga.MangaUpdatesGridCoverScreenGlanceReceiver\"\n            android:enabled=\"@bool/glance_appwidget_available\"\n            android:exported=\"false\"\n            android:label=\"@string/label_recent_updates\">\n            <intent-filter>\n                <action android:name=\"android.appwidget.action.APPWIDGET_UPDATE\" />\n            </intent-filter>\n\n            <meta-data\n                android:name=\"android.appwidget.provider\"\n                android:resource=\"@xml/updates_grid_lockscreen_widget_info\" />\n            <meta-data\n                android:name=\"com.samsung.android.appwidget.provider\"\n                android:resource=\"@xml/updates_grid_samsung_cover_widget_info\" />\n            <meta-data\n                android:name=\"com.samsung.android.sdk.subscreen.widget.support_visibility_callback\"\n                android:value=\"true\" />\n        </receiver>\n\n        <receiver\n            android:name=\"tachiyomi.presentation.widget.entries.anime.AnimeUpdatesGridCoverScreenGlanceReceiver\"\n            android:enabled=\"@bool/glance_appwidget_available\"\n            android:exported=\"false\"\n            android:label=\"@string/label_recent_anime_updates\">\n            <intent-filter>\n                <action android:name=\"android.appwidget.action.APPWIDGET_UPDATE\" />\n            </intent-filter>\n\n            <meta-data\n                android:name=\"android.appwidget.provider\"\n                android:resource=\"@xml/updates_grid_lockscreen_widget_info\" />\n            <meta-data\n                android:name=\"com.samsung.android.appwidget.provider\"\n                android:resource=\"@xml/updates_grid_samsung_cover_widget_info\" />\n            <meta-data\n                android:name=\"com.samsung.android.sdk.subscreen.widget.support_visibility_callback\"\n                android:value=\"true\" />\n        </receiver>\n\n    </application>\n</manifest>\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/LockedAnimeWidget.kt",
    "content": "package tachiyomi.presentation.widget.components.anime\n\nimport android.content.Intent\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport androidx.glance.GlanceModifier\nimport androidx.glance.LocalContext\nimport androidx.glance.action.clickable\nimport androidx.glance.appwidget.action.actionStartActivity\nimport androidx.glance.layout.Alignment\nimport androidx.glance.layout.Box\nimport androidx.glance.layout.padding\nimport androidx.glance.text.Text\nimport androidx.glance.text.TextAlign\nimport androidx.glance.text.TextStyle\nimport androidx.glance.unit.ColorProvider\nimport eu.kanade.tachiyomi.core.common.Constants\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun LockedAnimeWidget(\n    foreground: ColorProvider,\n    modifier: GlanceModifier = GlanceModifier,\n) {\n    val intent = Intent(LocalContext.current, Class.forName(Constants.MAIN_ACTIVITY)).apply {\n        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n    }\n    Box(\n        modifier = modifier\n            .clickable(actionStartActivity(intent))\n            .padding(8.dp),\n        contentAlignment = Alignment.Center,\n    ) {\n        Text(\n            text = stringResource(MR.strings.appwidget_unavailable_locked),\n            style = TextStyle(\n                color = foreground,\n                fontSize = 12.sp,\n                textAlign = TextAlign.Center,\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/UpdatesAnimeCover.kt",
    "content": "package tachiyomi.presentation.widget.components.anime\n\nimport android.graphics.Bitmap\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.GlanceModifier\nimport androidx.glance.Image\nimport androidx.glance.ImageProvider\nimport androidx.glance.layout.Box\nimport androidx.glance.layout.ContentScale\nimport androidx.glance.layout.fillMaxSize\nimport androidx.glance.layout.size\nimport tachiyomi.presentation.widget.R\nimport tachiyomi.presentation.widget.util.appWidgetInnerRadius\n\nval CoverWidth = 58.dp\nval CoverHeight = 87.dp\n\n@Composable\nfun UpdatesAnimeCover(\n    cover: Bitmap?,\n    modifier: GlanceModifier = GlanceModifier,\n) {\n    Box(\n        modifier = modifier\n            .size(width = CoverWidth, height = CoverHeight)\n            .appWidgetInnerRadius(),\n    ) {\n        if (cover != null) {\n            Image(\n                provider = ImageProvider(cover),\n                contentDescription = null,\n                modifier = GlanceModifier\n                    .fillMaxSize()\n                    .appWidgetInnerRadius(),\n                contentScale = ContentScale.Crop,\n            )\n        } else {\n            // Enjoy placeholder\n            Image(\n                provider = ImageProvider(R.drawable.appwidget_cover_error),\n                contentDescription = null,\n                modifier = GlanceModifier.fillMaxSize(),\n                contentScale = ContentScale.Crop,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/UpdatesAnimeWidget.kt",
    "content": "package tachiyomi.presentation.widget.components.anime\n\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.GlanceModifier\nimport androidx.glance.LocalContext\nimport androidx.glance.LocalSize\nimport androidx.glance.action.clickable\nimport androidx.glance.appwidget.CircularProgressIndicator\nimport androidx.glance.appwidget.action.actionStartActivity\nimport androidx.glance.layout.Alignment\nimport androidx.glance.layout.Box\nimport androidx.glance.layout.Column\nimport androidx.glance.layout.Row\nimport androidx.glance.layout.fillMaxHeight\nimport androidx.glance.layout.fillMaxWidth\nimport androidx.glance.layout.padding\nimport androidx.glance.text.Text\nimport androidx.glance.text.TextStyle\nimport androidx.glance.unit.ColorProvider\nimport eu.kanade.tachiyomi.core.common.Constants\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.widget.util.calculateRowAndColumnCount\n\n@Composable\nfun UpdatesAnimeWidget(\n    data: ImmutableList<Pair<Long, Bitmap?>>?,\n    contentColor: ColorProvider,\n    topPadding: Dp,\n    bottomPadding: Dp,\n    modifier: GlanceModifier = GlanceModifier,\n) {\n    Box(\n        contentAlignment = Alignment.Center,\n        modifier = modifier,\n    ) {\n        if (data == null) {\n            CircularProgressIndicator(color = contentColor)\n        } else if (data.isEmpty()) {\n            Text(\n                text = stringResource(MR.strings.information_no_recent),\n                style = TextStyle(color = contentColor),\n            )\n        } else {\n            val (rowCount, columnCount) = LocalSize.current.calculateRowAndColumnCount(topPadding, bottomPadding)\n            Column(\n                modifier = GlanceModifier.fillMaxHeight(),\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalAlignment = Alignment.CenterHorizontally,\n            ) {\n                (0..<rowCount).forEach { i ->\n                    val coverRow = (0..<columnCount).mapNotNull { j ->\n                        data.getOrNull(j + (i * columnCount))\n                    }\n                    if (coverRow.isNotEmpty()) {\n                        Row(\n                            modifier = GlanceModifier\n                                .padding(vertical = 4.dp)\n                                .fillMaxWidth(),\n                            horizontalAlignment = Alignment.CenterHorizontally,\n                            verticalAlignment = Alignment.CenterVertically,\n                        ) {\n                            coverRow.forEach { (animeId, cover) ->\n                                Box(\n                                    modifier = GlanceModifier\n                                        .padding(horizontal = 3.dp),\n                                    contentAlignment = Alignment.Center,\n                                ) {\n                                    val intent = Intent(\n                                        LocalContext.current,\n                                        Class.forName(Constants.MAIN_ACTIVITY),\n                                    ).apply {\n                                        action = Constants.SHORTCUT_ANIME\n                                        putExtra(Constants.ANIME_EXTRA, animeId)\n                                        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                                        addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n\n                                        // https://issuetracker.google.com/issues/238793260\n                                        addCategory(animeId.toString())\n                                    }\n                                    UpdatesAnimeCover(\n                                        cover = cover,\n                                        modifier = GlanceModifier.clickable(actionStartActivity(intent)),\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/LockedMangaWidget.kt",
    "content": "package tachiyomi.presentation.widget.components.manga\n\nimport android.content.Intent\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport androidx.glance.GlanceModifier\nimport androidx.glance.LocalContext\nimport androidx.glance.action.clickable\nimport androidx.glance.appwidget.action.actionStartActivity\nimport androidx.glance.layout.Alignment\nimport androidx.glance.layout.Box\nimport androidx.glance.layout.padding\nimport androidx.glance.text.Text\nimport androidx.glance.text.TextAlign\nimport androidx.glance.text.TextStyle\nimport androidx.glance.unit.ColorProvider\nimport eu.kanade.tachiyomi.core.common.Constants\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\n\n@Composable\nfun LockedMangaWidget(\n    foreground: ColorProvider,\n    modifier: GlanceModifier = GlanceModifier,\n) {\n    val intent = Intent(LocalContext.current, Class.forName(Constants.MAIN_ACTIVITY)).apply {\n        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n    }\n    Box(\n        modifier = modifier\n            .clickable(actionStartActivity(intent))\n            .padding(8.dp),\n        contentAlignment = Alignment.Center,\n    ) {\n        Text(\n            text = stringResource(MR.strings.appwidget_unavailable_locked),\n            style = TextStyle(\n                color = foreground,\n                fontSize = 12.sp,\n                textAlign = TextAlign.Center,\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/UpdatesMangaCover.kt",
    "content": "package tachiyomi.presentation.widget.components.manga\n\nimport android.graphics.Bitmap\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.GlanceModifier\nimport androidx.glance.Image\nimport androidx.glance.ImageProvider\nimport androidx.glance.layout.Box\nimport androidx.glance.layout.ContentScale\nimport androidx.glance.layout.fillMaxSize\nimport androidx.glance.layout.size\nimport tachiyomi.presentation.widget.R\nimport tachiyomi.presentation.widget.util.appWidgetInnerRadius\n\nval CoverWidth = 58.dp\nval CoverHeight = 87.dp\n\n@Composable\nfun UpdatesMangaCover(\n    cover: Bitmap?,\n    modifier: GlanceModifier = GlanceModifier,\n) {\n    Box(\n        modifier = modifier\n            .size(width = CoverWidth, height = CoverHeight)\n            .appWidgetInnerRadius(),\n    ) {\n        if (cover != null) {\n            Image(\n                provider = ImageProvider(cover),\n                contentDescription = null,\n                modifier = GlanceModifier\n                    .fillMaxSize()\n                    .appWidgetInnerRadius(),\n                contentScale = ContentScale.Crop,\n            )\n        } else {\n            // Enjoy placeholder\n            Image(\n                provider = ImageProvider(R.drawable.appwidget_cover_error),\n                contentDescription = null,\n                modifier = GlanceModifier.fillMaxSize(),\n                contentScale = ContentScale.Crop,\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/UpdatesMangaWidget.kt",
    "content": "package tachiyomi.presentation.widget.components.manga\n\nimport android.content.Intent\nimport android.graphics.Bitmap\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.GlanceModifier\nimport androidx.glance.LocalContext\nimport androidx.glance.LocalSize\nimport androidx.glance.action.clickable\nimport androidx.glance.appwidget.CircularProgressIndicator\nimport androidx.glance.appwidget.action.actionStartActivity\nimport androidx.glance.layout.Alignment\nimport androidx.glance.layout.Box\nimport androidx.glance.layout.Column\nimport androidx.glance.layout.Row\nimport androidx.glance.layout.fillMaxHeight\nimport androidx.glance.layout.fillMaxWidth\nimport androidx.glance.layout.padding\nimport androidx.glance.text.Text\nimport androidx.glance.text.TextStyle\nimport androidx.glance.unit.ColorProvider\nimport eu.kanade.tachiyomi.core.common.Constants\nimport kotlinx.collections.immutable.ImmutableList\nimport tachiyomi.i18n.MR\nimport tachiyomi.presentation.core.i18n.stringResource\nimport tachiyomi.presentation.widget.util.calculateRowAndColumnCount\n\n@Composable\nfun UpdatesMangaWidget(\n    data: ImmutableList<Pair<Long, Bitmap?>>?,\n    contentColor: ColorProvider,\n    topPadding: Dp,\n    bottomPadding: Dp,\n    modifier: GlanceModifier = GlanceModifier,\n) {\n    Box(\n        contentAlignment = Alignment.Center,\n        modifier = modifier,\n    ) {\n        if (data == null) {\n            CircularProgressIndicator(color = contentColor)\n        } else if (data.isEmpty()) {\n            Text(\n                text = stringResource(MR.strings.information_no_recent),\n                style = TextStyle(color = contentColor),\n            )\n        } else {\n            val (rowCount, columnCount) = LocalSize.current.calculateRowAndColumnCount(topPadding, bottomPadding)\n            Column(\n                modifier = GlanceModifier.fillMaxHeight(),\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalAlignment = Alignment.CenterHorizontally,\n            ) {\n                (0..<rowCount).forEach { i ->\n                    val coverRow = (0..<columnCount).mapNotNull { j ->\n                        data.getOrNull(j + (i * columnCount))\n                    }\n                    if (coverRow.isNotEmpty()) {\n                        Row(\n                            modifier = GlanceModifier\n                                .padding(vertical = 4.dp)\n                                .fillMaxWidth(),\n                            horizontalAlignment = Alignment.CenterHorizontally,\n                            verticalAlignment = Alignment.CenterVertically,\n                        ) {\n                            coverRow.forEach { (mangaId, cover) ->\n                                Box(\n                                    modifier = GlanceModifier\n                                        .padding(horizontal = 3.dp),\n                                    contentAlignment = Alignment.Center,\n                                ) {\n                                    val intent = Intent(\n                                        LocalContext.current,\n                                        Class.forName(Constants.MAIN_ACTIVITY),\n                                    ).apply {\n                                        action = Constants.SHORTCUT_MANGA\n                                        putExtra(Constants.MANGA_EXTRA, mangaId)\n                                        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                                        addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)\n\n                                        // https://issuetracker.google.com/issues/238793260\n                                        addCategory(mangaId.toString())\n                                    }\n                                    UpdatesMangaCover(\n                                        cover = cover,\n                                        modifier = GlanceModifier.clickable(actionStartActivity(intent)),\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridCoverScreenGlanceReceiver.kt",
    "content": "package tachiyomi.presentation.widget.entries.anime\n\nimport androidx.glance.appwidget.GlanceAppWidget\nimport androidx.glance.appwidget.GlanceAppWidgetReceiver\n\nclass AnimeUpdatesGridCoverScreenGlanceReceiver : GlanceAppWidgetReceiver() {\n    override val glanceAppWidget: GlanceAppWidget\n        get() = AnimeUpdatesGridCoverScreenGlanceWidget()\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridCoverScreenGlanceWidget.kt",
    "content": "package tachiyomi.presentation.widget.entries.anime\n\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.ImageProvider\nimport androidx.glance.unit.ColorProvider\nimport tachiyomi.presentation.widget.R\n\nclass AnimeUpdatesGridCoverScreenGlanceWidget : BaseAnimeUpdatesGridGlanceWidget() {\n    override val foreground = ColorProvider(Color.White)\n    override val background = ImageProvider(R.drawable.appwidget_coverscreen_background)\n    override val topPadding = 0.dp\n    override val bottomPadding = 24.dp\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridGlanceReceiver.kt",
    "content": "package tachiyomi.presentation.widget.entries.anime\n\nimport androidx.glance.appwidget.GlanceAppWidget\nimport androidx.glance.appwidget.GlanceAppWidgetReceiver\n\nclass AnimeUpdatesGridGlanceReceiver : GlanceAppWidgetReceiver() {\n    override val glanceAppWidget: GlanceAppWidget\n        get() = AnimeUpdatesGridGlanceWidget()\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridGlanceWidget.kt",
    "content": "package tachiyomi.presentation.widget.entries.anime\n\nimport android.annotation.SuppressLint\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.ImageProvider\nimport androidx.glance.unit.ColorProvider\nimport tachiyomi.presentation.widget.R\n\nclass AnimeUpdatesGridGlanceWidget : BaseAnimeUpdatesGridGlanceWidget() {\n    @SuppressLint(\"RestrictedApi\")\n    override val foreground = ColorProvider(R.color.appwidget_on_secondary_container)\n    override val background = ImageProvider(R.drawable.appwidget_background)\n    override val topPadding = 0.dp\n    override val bottomPadding = 0.dp\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeWidgetManager.kt",
    "content": "package tachiyomi.presentation.widget.entries.anime\n\nimport android.content.Context\nimport androidx.glance.appwidget.updateAll\nimport androidx.lifecycle.LifecycleCoroutineScope\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.updates.anime.interactor.GetAnimeUpdates\n\nclass AnimeWidgetManager(\n    private val getUpdates: GetAnimeUpdates,\n    private val securityPreferences: SecurityPreferences,\n) {\n\n    fun Context.init(scope: LifecycleCoroutineScope) {\n        combine(\n            getUpdates.subscribe(seen = false, after = BaseAnimeUpdatesGridGlanceWidget.DateLimit.toEpochMilli()),\n            securityPreferences.useAuthenticator().changes(),\n            transform = { a, b -> a to b },\n        )\n            .distinctUntilChanged { old, new ->\n                old.second == new.second &&\n                    old.first.map { it.episodeId }.toSet() == new.first.map { it.episodeId }.toSet()\n            }\n            .onEach {\n                try {\n                    AnimeUpdatesGridGlanceWidget().updateAll(this)\n                    AnimeUpdatesGridCoverScreenGlanceWidget().updateAll(this)\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to update widget\" }\n                }\n            }\n            .flowOn(Dispatchers.Default)\n            .launchIn(scope)\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/BaseAnimeUpdatesGridGlanceWidget.kt",
    "content": "package tachiyomi.presentation.widget.entries.anime\n\nimport android.app.Application\nimport android.content.Context\nimport android.graphics.Bitmap\nimport android.os.Build\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.unit.Dp\nimport androidx.core.graphics.drawable.toBitmap\nimport androidx.glance.GlanceId\nimport androidx.glance.GlanceModifier\nimport androidx.glance.ImageProvider\nimport androidx.glance.appwidget.GlanceAppWidget\nimport androidx.glance.appwidget.GlanceAppWidgetManager\nimport androidx.glance.appwidget.SizeMode\nimport androidx.glance.appwidget.appWidgetBackground\nimport androidx.glance.appwidget.provideContent\nimport androidx.glance.background\nimport androidx.glance.layout.fillMaxSize\nimport androidx.glance.layout.padding\nimport androidx.glance.unit.ColorProvider\nimport coil3.annotation.ExperimentalCoilApi\nimport coil3.asDrawable\nimport coil3.executeBlocking\nimport coil3.imageLoader\nimport coil3.request.CachePolicy\nimport coil3.request.ImageRequest\nimport coil3.request.transformations\nimport coil3.size.Precision\nimport coil3.size.Scale\nimport coil3.transform.RoundedCornersTransformation\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.util.system.dpToPx\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.entries.anime.model.AnimeCover\nimport tachiyomi.domain.updates.anime.interactor.GetAnimeUpdates\nimport tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations\nimport tachiyomi.presentation.widget.R\nimport tachiyomi.presentation.widget.components.anime.CoverHeight\nimport tachiyomi.presentation.widget.components.anime.CoverWidth\nimport tachiyomi.presentation.widget.components.anime.LockedAnimeWidget\nimport tachiyomi.presentation.widget.components.anime.UpdatesAnimeWidget\nimport tachiyomi.presentation.widget.util.appWidgetBackgroundRadius\nimport tachiyomi.presentation.widget.util.calculateRowAndColumnCount\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.ZonedDateTime\n\nabstract class BaseAnimeUpdatesGridGlanceWidget(\n    private val context: Context = Injekt.get<Application>(),\n    private val getUpdates: GetAnimeUpdates = Injekt.get(),\n    private val preferences: SecurityPreferences = Injekt.get(),\n) : GlanceAppWidget() {\n\n    override val sizeMode = SizeMode.Exact\n\n    abstract val foreground: ColorProvider\n    abstract val background: ImageProvider\n    abstract val topPadding: Dp\n    abstract val bottomPadding: Dp\n\n    override suspend fun provideGlance(context: Context, id: GlanceId) {\n        val locked = preferences.useAuthenticator().get()\n        val containerModifier = GlanceModifier\n            .fillMaxSize()\n            .background(background)\n            .appWidgetBackground()\n            .padding(top = topPadding, bottom = bottomPadding)\n            .appWidgetBackgroundRadius()\n\n        val manager = GlanceAppWidgetManager(context)\n        val ids = manager.getGlanceIds(javaClass)\n        val (rowCount, columnCount) = ids\n            .flatMap { manager.getAppWidgetSizes(it) }\n            .maxBy { it.height.value * it.width.value }\n            .calculateRowAndColumnCount(topPadding, bottomPadding)\n\n        provideContent {\n            // If app lock enabled, don't do anything\n            if (locked) {\n                LockedAnimeWidget(\n                    foreground = foreground,\n                    modifier = containerModifier,\n                )\n                return@provideContent\n            }\n\n            val flow = remember {\n                getUpdates\n                    .subscribe(false, DateLimit.toEpochMilli())\n                    .map { rawData ->\n                        rawData.prepareData(rowCount, columnCount)\n                    }\n            }\n            val data by flow.collectAsState(initial = null)\n            UpdatesAnimeWidget(\n                data = data,\n                contentColor = foreground,\n                topPadding = topPadding,\n                bottomPadding = bottomPadding,\n                modifier = containerModifier,\n            )\n        }\n    }\n\n    @OptIn(ExperimentalCoilApi::class)\n    private suspend fun List<AnimeUpdatesWithRelations>.prepareData(\n        rowCount: Int,\n        columnCount: Int,\n    ): ImmutableList<Pair<Long, Bitmap?>> {\n        // Resize to cover size\n        val widthPx = CoverWidth.value.toInt().dpToPx\n        val heightPx = CoverHeight.value.toInt().dpToPx\n        val roundPx = context.resources.getDimension(R.dimen.appwidget_inner_radius)\n        return withIOContext {\n            this@prepareData\n                .distinctBy { it.animeId }\n                .take(rowCount * columnCount)\n                .map { updatesView ->\n                    val request = ImageRequest.Builder(context)\n                        .data(\n                            AnimeCover(\n                                animeId = updatesView.animeId,\n                                sourceId = updatesView.sourceId,\n                                isAnimeFavorite = true,\n                                url = updatesView.coverData.url,\n                                lastModified = updatesView.coverData.lastModified,\n                            ),\n                        )\n                        .memoryCachePolicy(CachePolicy.DISABLED)\n                        .precision(Precision.EXACT)\n                        .size(widthPx, heightPx)\n                        .scale(Scale.FILL)\n                        .let {\n                            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {\n                                it.transformations(RoundedCornersTransformation(roundPx))\n                            } else {\n                                it // Handled by system\n                            }\n                        }\n                        .build()\n                    val bitmap = context.imageLoader.executeBlocking(request)\n                        .image\n                        ?.asDrawable(context.resources)\n                        ?.toBitmap()\n                    Pair(updatesView.animeId, bitmap)\n                }\n                .toImmutableList()\n        }\n    }\n\n    companion object {\n        val DateLimit: Instant\n            get() = ZonedDateTime.now().minusMonths(3).toInstant()\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/manga/BaseMangaUpdatesGridGlanceWidget.kt",
    "content": "package tachiyomi.presentation.widget.entries.manga\n\nimport android.app.Application\nimport android.content.Context\nimport android.graphics.Bitmap\nimport android.os.Build\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.unit.Dp\nimport androidx.core.graphics.drawable.toBitmap\nimport androidx.glance.GlanceId\nimport androidx.glance.GlanceModifier\nimport androidx.glance.ImageProvider\nimport androidx.glance.appwidget.GlanceAppWidget\nimport androidx.glance.appwidget.GlanceAppWidgetManager\nimport androidx.glance.appwidget.SizeMode\nimport androidx.glance.appwidget.appWidgetBackground\nimport androidx.glance.appwidget.provideContent\nimport androidx.glance.background\nimport androidx.glance.layout.fillMaxSize\nimport androidx.glance.layout.padding\nimport androidx.glance.unit.ColorProvider\nimport coil3.annotation.ExperimentalCoilApi\nimport coil3.asDrawable\nimport coil3.executeBlocking\nimport coil3.imageLoader\nimport coil3.request.CachePolicy\nimport coil3.request.ImageRequest\nimport coil3.request.transformations\nimport coil3.size.Precision\nimport coil3.size.Scale\nimport coil3.transform.RoundedCornersTransformation\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport eu.kanade.tachiyomi.util.system.dpToPx\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.coroutines.flow.map\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.domain.entries.manga.model.MangaCover\nimport tachiyomi.domain.updates.manga.interactor.GetMangaUpdates\nimport tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations\nimport tachiyomi.presentation.widget.R\nimport tachiyomi.presentation.widget.components.manga.CoverHeight\nimport tachiyomi.presentation.widget.components.manga.CoverWidth\nimport tachiyomi.presentation.widget.components.manga.LockedMangaWidget\nimport tachiyomi.presentation.widget.components.manga.UpdatesMangaWidget\nimport tachiyomi.presentation.widget.util.appWidgetBackgroundRadius\nimport tachiyomi.presentation.widget.util.calculateRowAndColumnCount\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\nimport java.time.Instant\nimport java.time.ZonedDateTime\n\nabstract class BaseMangaUpdatesGridGlanceWidget(\n    private val context: Context = Injekt.get<Application>(),\n    private val getUpdates: GetMangaUpdates = Injekt.get(),\n    private val preferences: SecurityPreferences = Injekt.get(),\n) : GlanceAppWidget() {\n\n    override val sizeMode = SizeMode.Exact\n\n    abstract val foreground: ColorProvider\n    abstract val background: ImageProvider\n    abstract val topPadding: Dp\n    abstract val bottomPadding: Dp\n\n    override suspend fun provideGlance(context: Context, id: GlanceId) {\n        val locked = preferences.useAuthenticator().get()\n        val containerModifier = GlanceModifier\n            .fillMaxSize()\n            .background(background)\n            .appWidgetBackground()\n            .padding(top = topPadding, bottom = bottomPadding)\n            .appWidgetBackgroundRadius()\n\n        val manager = GlanceAppWidgetManager(context)\n        val ids = manager.getGlanceIds(javaClass)\n        val (rowCount, columnCount) = ids\n            .flatMap { manager.getAppWidgetSizes(it) }\n            .maxBy { it.height.value * it.width.value }\n            .calculateRowAndColumnCount(topPadding, bottomPadding)\n\n        provideContent {\n            // If app lock enabled, don't do anything\n            if (locked) {\n                LockedMangaWidget(\n                    foreground = foreground,\n                    modifier = containerModifier,\n                )\n                return@provideContent\n            }\n\n            val flow = remember {\n                getUpdates\n                    .subscribe(false, DateLimit.toEpochMilli())\n                    .map { rawData ->\n                        rawData.prepareData(rowCount, columnCount)\n                    }\n            }\n            val data by flow.collectAsState(initial = null)\n            UpdatesMangaWidget(\n                data = data,\n                contentColor = foreground,\n                topPadding = topPadding,\n                bottomPadding = bottomPadding,\n                modifier = containerModifier,\n            )\n        }\n    }\n\n    @OptIn(ExperimentalCoilApi::class)\n    private suspend fun List<MangaUpdatesWithRelations>.prepareData(\n        rowCount: Int,\n        columnCount: Int,\n    ): ImmutableList<Pair<Long, Bitmap?>> {\n        // Resize to cover size\n        val widthPx = CoverWidth.value.toInt().dpToPx\n        val heightPx = CoverHeight.value.toInt().dpToPx\n        val roundPx = context.resources.getDimension(R.dimen.appwidget_inner_radius)\n        return withIOContext {\n            this@prepareData\n                .distinctBy { it.mangaId }\n                .take(rowCount * columnCount)\n                .map { updatesView ->\n                    val request = ImageRequest.Builder(context)\n                        .data(\n                            MangaCover(\n                                mangaId = updatesView.mangaId,\n                                sourceId = updatesView.sourceId,\n                                isMangaFavorite = true,\n                                url = updatesView.coverData.url,\n                                lastModified = updatesView.coverData.lastModified,\n                            ),\n                        )\n                        .memoryCachePolicy(CachePolicy.DISABLED)\n                        .precision(Precision.EXACT)\n                        .size(widthPx, heightPx)\n                        .scale(Scale.FILL)\n                        .let {\n                            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {\n                                it.transformations(RoundedCornersTransformation(roundPx))\n                            } else {\n                                it // Handled by system\n                            }\n                        }\n                        .build()\n                    val bitmap = context.imageLoader.executeBlocking(request)\n                        .image\n                        ?.asDrawable(context.resources)\n                        ?.toBitmap()\n                    Pair(updatesView.mangaId, bitmap)\n                }\n                .toImmutableList()\n        }\n    }\n\n    companion object {\n        val DateLimit: Instant\n            get() = ZonedDateTime.now().minusMonths(3).toInstant()\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/manga/MangaUpdatesGridCoverScreenGlanceReceiver.kt",
    "content": "package tachiyomi.presentation.widget.entries.manga\n\nimport androidx.glance.appwidget.GlanceAppWidget\nimport androidx.glance.appwidget.GlanceAppWidgetReceiver\n\nclass MangaUpdatesGridCoverScreenGlanceReceiver : GlanceAppWidgetReceiver() {\n    override val glanceAppWidget: GlanceAppWidget\n        get() = MangaUpdatesGridCoverScreenGlanceWidget()\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/manga/MangaUpdatesGridCoverScreenGlanceWidget.kt",
    "content": "package tachiyomi.presentation.widget.entries.manga\n\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.ImageProvider\nimport androidx.glance.unit.ColorProvider\nimport tachiyomi.presentation.widget.R\n\nclass MangaUpdatesGridCoverScreenGlanceWidget : BaseMangaUpdatesGridGlanceWidget() {\n    override val foreground = ColorProvider(Color.White)\n    override val background = ImageProvider(R.drawable.appwidget_coverscreen_background)\n    override val topPadding = 0.dp\n    override val bottomPadding = 24.dp\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/manga/MangaUpdatesGridGlanceReceiver.kt",
    "content": "package tachiyomi.presentation.widget.entries.manga\n\nimport androidx.glance.appwidget.GlanceAppWidget\nimport androidx.glance.appwidget.GlanceAppWidgetReceiver\n\nclass MangaUpdatesGridGlanceReceiver : GlanceAppWidgetReceiver() {\n    override val glanceAppWidget: GlanceAppWidget\n        get() = MangaUpdatesGridGlanceWidget()\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/manga/MangaUpdatesGridGlanceWidget.kt",
    "content": "package tachiyomi.presentation.widget.entries.manga\n\nimport android.annotation.SuppressLint\nimport androidx.compose.ui.unit.dp\nimport androidx.glance.ImageProvider\nimport androidx.glance.unit.ColorProvider\nimport tachiyomi.presentation.widget.R\n\nclass MangaUpdatesGridGlanceWidget : BaseMangaUpdatesGridGlanceWidget() {\n    @SuppressLint(\"RestrictedApi\")\n    override val foreground = ColorProvider(R.color.appwidget_on_secondary_container)\n    override val background = ImageProvider(R.drawable.appwidget_background)\n    override val topPadding = 0.dp\n    override val bottomPadding = 0.dp\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/manga/MangaWidgetManager.kt",
    "content": "package tachiyomi.presentation.widget.entries.manga\n\nimport android.content.Context\nimport androidx.glance.appwidget.updateAll\nimport androidx.lifecycle.LifecycleCoroutineScope\nimport eu.kanade.tachiyomi.core.security.SecurityPreferences\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.launchIn\nimport kotlinx.coroutines.flow.onEach\nimport logcat.LogPriority\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.domain.updates.manga.interactor.GetMangaUpdates\n\nclass MangaWidgetManager(\n    private val getUpdates: GetMangaUpdates,\n    private val securityPreferences: SecurityPreferences,\n) {\n\n    fun Context.init(scope: LifecycleCoroutineScope) {\n        combine(\n            getUpdates.subscribe(\n                read = false,\n                after = BaseMangaUpdatesGridGlanceWidget.DateLimit.toEpochMilli(),\n            ),\n            securityPreferences.useAuthenticator().changes(),\n            transform = { a, b -> a to b },\n        )\n            .distinctUntilChanged { old, new ->\n                old.second == new.second &&\n                    old.first.map { it.chapterId }.toSet() == new.first.map { it.chapterId }.toSet()\n            }\n            .onEach {\n                try {\n                    MangaUpdatesGridGlanceWidget().updateAll(this)\n                    MangaUpdatesGridCoverScreenGlanceWidget().updateAll(this)\n                } catch (e: Exception) {\n                    logcat(LogPriority.ERROR, e) { \"Failed to update widget\" }\n                }\n            }\n            .flowOn(Dispatchers.Default)\n            .launchIn(scope)\n    }\n}\n"
  },
  {
    "path": "presentation-widget/src/main/java/tachiyomi/presentation/widget/util/GlanceUtils.kt",
    "content": "package tachiyomi.presentation.widget.util\n\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.DpSize\nimport androidx.glance.GlanceModifier\nimport androidx.glance.appwidget.cornerRadius\nimport tachiyomi.presentation.widget.R\n\nfun GlanceModifier.appWidgetBackgroundRadius(): GlanceModifier {\n    return this.cornerRadius(R.dimen.appwidget_background_radius)\n}\nfun GlanceModifier.appWidgetInnerRadius(): GlanceModifier {\n    return this.cornerRadius(R.dimen.appwidget_inner_radius)\n}\n\n/**\n * Calculates row-column count.\n *\n * Row\n * Numerator: Container height - container vertical padding\n * Denominator: Cover height + cover vertical padding\n *\n * Column\n * Numerator: Container width - container horizontal padding\n * Denominator: Cover width + cover horizontal padding\n *\n * @return pair of row and column count\n */\nfun DpSize.calculateRowAndColumnCount(\n    topPadding: Dp,\n    bottomPadding: Dp,\n): Pair<Int, Int> {\n    // Hack: Size provided by Glance manager is not reliable so take at least 1 row and 1 column\n    // Set max to 10 children each direction because of Glance limitation\n    val height = this.height - topPadding - bottomPadding\n    val rowCount = (height.value / 95).toInt().coerceIn(1, 10)\n    val columnCount = (width.value / 64).toInt().coerceIn(1, 10)\n    return Pair(rowCount, columnCount)\n}\n"
  },
  {
    "path": "presentation-widget/src/main/res/drawable/appwidget_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <solid android:color=\"@color/appwidget_secondary_container\" />\n    <corners android:radius=\"@dimen/appwidget_background_radius\" />\n</shape>\n"
  },
  {
    "path": "presentation-widget/src/main/res/drawable/appwidget_cover_error.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item>\n        <shape android:shape=\"rectangle\">\n            <solid android:color=\"@color/cover_placeholder\" />\n            <corners android:radius=\"@dimen/appwidget_inner_radius\" />\n        </shape>\n    </item>\n    <item\n        android:top=\"24dp\"\n        android:bottom=\"24dp\"\n        android:left=\"24dp\"\n        android:right=\"24dp\">\n        <vector\n            android:width=\"24dp\"\n            android:height=\"24dp\"\n            android:viewportWidth=\"24\"\n            android:viewportHeight=\"24\">\n            <path\n                android:fillColor=\"@color/cover_placeholder\"\n                android:pathData=\"M21,5v6.59l-2.29,-2.3c-0.39,-0.39 -1.03,-0.39 -1.42,0L14,12.59 10.71,9.3c-0.39,-0.39 -1.02,-0.39 -1.41,0L6,12.59 3,9.58L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l2.29,2.29c0.39,0.39 1.02,0.39 1.41,0l3.3,-3.3 3.29,3.29c0.39,0.39 1.02,0.39 1.41,0l3.3,-3.28z\"/>\n        </vector>\n    </item>\n</layer-list>\n"
  },
  {
    "path": "presentation-widget/src/main/res/drawable/appwidget_coverscreen_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <solid android:color=\"@color/appwidget_coverscreen_background\" />\n</shape>\n"
  },
  {
    "path": "presentation-widget/src/main/res/layout/appwidget_coverscreen_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@drawable/appwidget_coverscreen_background\">\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:text=\"@string/loading\"\n        android:textColor=\"@android:color/white\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "presentation-widget/src/main/res/layout/appwidget_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@drawable/appwidget_background\">\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:text=\"@string/loading\"\n        android:textColor=\"?android:attr/textColorPrimary\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "presentation-widget/src/main/res/values/colors_appwidget.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"appwidget_background\">@color/tachiyomi_surface</color>\n    <color name=\"appwidget_coverscreen_background\">#00000000</color>\n    <color name=\"appwidget_on_background\">@color/tachiyomi_onSurface</color>\n    <color name=\"appwidget_surface_variant\">@color/tachiyomi_surfaceVariant</color>\n    <color name=\"appwidget_on_surface_variant\">@color/tachiyomi_onSurfaceVariant</color>\n    <color name=\"appwidget_secondary_container\">@color/tachiyomi_secondaryContainer</color>\n    <color name=\"appwidget_on_secondary_container\">@color/tachiyomi_onSecondaryContainer</color>\n</resources>\n"
  },
  {
    "path": "presentation-widget/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"appwidget_background_radius\">16dp</dimen>\n    <dimen name=\"appwidget_inner_radius\">12dp</dimen>\n</resources>\n"
  },
  {
    "path": "presentation-widget/src/main/res/values-night-v31/colors_appwidget.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"appwidget_background\">@color/m3_sys_color_dynamic_dark_surface</color>\n    <color name=\"appwidget_on_background\">@color/m3_sys_color_dynamic_dark_on_surface</color>\n    <color name=\"appwidget_surface_variant\">@color/m3_sys_color_dynamic_dark_surface_variant</color>\n    <color name=\"appwidget_on_surface_variant\">@color/m3_sys_color_dynamic_dark_on_surface_variant</color>\n    <color name=\"appwidget_secondary_container\">@color/m3_sys_color_dynamic_dark_secondary_container</color>\n    <color name=\"appwidget_on_secondary_container\">@color/m3_sys_color_dynamic_dark_on_secondary_container</color>\n</resources>\n"
  },
  {
    "path": "presentation-widget/src/main/res/values-v31/colors_appwidget.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"appwidget_background\">@color/m3_sys_color_dynamic_light_surface</color>\n    <color name=\"appwidget_on_background\">@color/m3_sys_color_dynamic_light_on_surface</color>\n    <color name=\"appwidget_surface_variant\">@color/m3_sys_color_dynamic_light_surface_variant</color>\n    <color name=\"appwidget_on_surface_variant\">@color/m3_sys_color_dynamic_light_on_surface_variant</color>\n    <color name=\"appwidget_secondary_container\">@color/m3_sys_color_dynamic_light_secondary_container</color>\n    <color name=\"appwidget_on_secondary_container\">@color/m3_sys_color_dynamic_light_on_secondary_container</color>\n</resources>\n"
  },
  {
    "path": "presentation-widget/src/main/res/values-v31/dimens.xml",
    "content": "<resources>\n    <dimen name=\"appwidget_background_radius\">@android:dimen/system_app_widget_background_radius</dimen>\n</resources>\n"
  },
  {
    "path": "presentation-widget/src/main/res/xml/updates_grid_homescreen_widget_info.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<appwidget-provider xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:description=\"@string/appwidget_updates_description\"\n    android:previewImage=\"@drawable/updates_grid_widget_preview\"\n    android:initialLayout=\"@layout/appwidget_loading\"\n    android:minWidth=\"240dp\"\n    android:minHeight=\"80dp\"\n    android:minResizeWidth=\"80dp\"\n    android:minResizeHeight=\"110dp\"\n    android:maxResizeWidth=\"600dp\"\n    android:maxResizeHeight=\"600dp\"\n    android:targetCellWidth=\"4\"\n    android:targetCellHeight=\"2\"\n    android:resizeMode=\"horizontal|vertical\"\n    android:widgetCategory=\"home_screen\" />\n"
  },
  {
    "path": "presentation-widget/src/main/res/xml/updates_grid_lockscreen_widget_info.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<appwidget-provider xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:description=\"@string/appwidget_updates_description\"\n    android:previewImage=\"@drawable/updates_grid_coverscreen_widget_preview\"\n    android:initialLayout=\"@layout/appwidget_coverscreen_loading\"\n    android:resizeMode=\"horizontal|vertical\"\n    android:widgetCategory=\"keyguard\" />\n"
  },
  {
    "path": "presentation-widget/src/main/res/xml/updates_grid_samsung_cover_widget_info.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<samsung-appwidget-provider\n    display=\"sub_screen\"\n    privacyWidget=\"true\" />\n"
  },
  {
    "path": "settings.gradle.kts",
    "content": "pluginManagement {\n    resolutionStrategy {\n        eachPlugin {\n            val regex = \"com.android.(library|application)\".toRegex()\n            if (regex matches requested.id.id) {\n                useModule(\"com.android.tools.build:gradle:${requested.version}\")\n            }\n        }\n    }\n    repositories {\n        gradlePluginPortal()\n        google()\n        mavenCentral()\n        maven(url = \"https://www.jitpack.io\")\n    }\n}\n\ndependencyResolutionManagement {\n    versionCatalogs {\n        create(\"kotlinx\") {\n            from(files(\"gradle/kotlinx.versions.toml\"))\n        }\n        create(\"androidx\") {\n            from(files(\"gradle/androidx.versions.toml\"))\n        }\n        create(\"compose\") {\n            from(files(\"gradle/compose.versions.toml\"))\n        }\n        create(\"aniyomilibs\") {\n            from(files(\"gradle/aniyomi.versions.toml\"))\n        }\n    }\n    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n    repositories {\n        mavenCentral()\n        google()\n        maven(url = \"https://www.jitpack.io\")\n    }\n}\n\nplugins {\n    id(\"org.gradle.toolchains.foojay-resolver-convention\") version \"0.9.0\"\n}\n\nenableFeaturePreview(\"TYPESAFE_PROJECT_ACCESSORS\")\n\nrootProject.name = \"Aniyomi\"\ninclude(\":app\")\ninclude(\":core-metadata\")\ninclude(\":core:archive\")\ninclude(\":core:common\")\ninclude(\":data\")\ninclude(\":domain\")\ninclude(\":i18n\")\ninclude(\":i18n-aniyomi\")\ninclude(\":macrobenchmark\")\ninclude(\":presentation-core\")\ninclude(\":presentation-widget\")\ninclude(\":source-api\")\ninclude(\":source-local\")\n"
  },
  {
    "path": "source-api/build.gradle.kts",
    "content": "import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi\n\nplugins {\n    id(\"mihon.library\")\n    kotlin(\"multiplatform\")\n    kotlin(\"plugin.serialization\")\n}\n\nkotlin {\n    androidTarget()\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                api(kotlinx.serialization.json)\n                api(libs.injekt)\n                api(libs.rxjava)\n                api(libs.jsoup)\n\n                implementation(project.dependencies.platform(compose.bom))\n                implementation(compose.runtime)\n            }\n        }\n        val androidMain by getting {\n            dependencies {\n                implementation(projects.core.common)\n                api(libs.preferencektx)\n\n                // Workaround for https://youtrack.jetbrains.com/issue/KT-57605\n                implementation(kotlinx.coroutines.android)\n                implementation(project.dependencies.platform(kotlinx.coroutines.bom))\n            }\n        }\n    }\n\n    @OptIn(ExperimentalKotlinGradlePluginApi::class)\n    compilerOptions {\n        freeCompilerArgs.add(\"-Xexpect-actual-classes\")\n    }\n}\n\nandroid {\n    namespace = \"eu.kanade.tachiyomi.source\"\n\n    defaultConfig {\n        consumerProguardFile(\"consumer-proguard.pro\")\n    }\n}\n"
  },
  {
    "path": "source-api/consumer-proguard.pro",
    "content": "-keep class eu.kanade.tachiyomi.source.model.** { public protected *; }\n-keep class eu.kanade.tachiyomi.source.online.** { public protected *; }\n-keep class eu.kanade.tachiyomi.source.** extends eu.kanade.tachiyomi.source.MangaSource { public protected *; }\n\n-keep class eu.kanade.tachiyomi.animesource.model.** { public protected *; }\n-keep class eu.kanade.tachiyomi.animesource.online.** { public protected *; }\n-keep class eu.kanade.tachiyomi.animesource.** extends eu.kanade.tachiyomi.animesource.AnimeSource { public protected *; }\n\n-keep,allowoptimization class eu.kanade.tachiyomi.util.JsoupExtensionsKt { public protected *; }\n"
  },
  {
    "path": "source-api/src/androidMain/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "source-api/src/androidMain/kotlin/eu/kanade/tachiyomi/animesource/PreferenceScreen.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\nactual typealias PreferenceScreen = androidx.preference.PreferenceScreen\n"
  },
  {
    "path": "source-api/src/androidMain/kotlin/eu/kanade/tachiyomi/source/PreferenceScreen.kt",
    "content": "package eu.kanade.tachiyomi.source\n\nactual typealias PreferenceScreen = androidx.preference.PreferenceScreen\n"
  },
  {
    "path": "source-api/src/androidMain/kotlin/eu/kanade/tachiyomi/util/RxExtension.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport rx.Observable\nimport tachiyomi.core.common.util.lang.awaitSingle\n\nactual suspend fun <T> Observable<T>.awaitSingle(): T = awaitSingle()\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeCatalogueSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.animesource.model.AnimesPage\nimport rx.Observable\nimport tachiyomi.core.common.util.lang.awaitSingle\n\ninterface AnimeCatalogueSource : AnimeSource {\n\n    /**\n     * An ISO 639-1 compliant language code (two letters in lower case).\n     */\n    override val lang: String\n\n    /**\n     * Whether the source has support for latest updates.\n     */\n    val supportsLatest: Boolean\n\n    /**\n     * Get a page with a list of anime.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page number to retrieve.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getPopularAnime(page: Int): AnimesPage {\n        return fetchPopularAnime(page).awaitSingle()\n    }\n\n    /**\n     * Get a page with a list of anime.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page number to retrieve.\n     * @param query the search query.\n     * @param filters the list of filters to apply.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getSearchAnime(page: Int, query: String, filters: AnimeFilterList): AnimesPage {\n        return fetchSearchAnime(page, query, filters).awaitSingle()\n    }\n\n    /**\n     * Get a page with a list of latest anime updates.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page number to retrieve.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getLatestUpdates(page: Int): AnimesPage {\n        return fetchLatestUpdates(page).awaitSingle()\n    }\n\n    /**\n     * Returns the list of filters for the source.\n     */\n    fun getFilterList(): AnimeFilterList\n\n    // Should be replaced as soon as Anime Extension reach 1.5\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getPopularAnime\"),\n    )\n    fun fetchPopularAnime(page: Int): Observable<AnimesPage>\n\n    // Should be replaced as soon as Anime Extension reach 1.5\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getSearchAnime\"),\n    )\n    fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable<AnimesPage>\n\n    // Should be replaced as soon as Anime Extension reach 1.5\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getLatestUpdates\"),\n    )\n    fun fetchLatestUpdates(page: Int): Observable<AnimesPage>\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.util.awaitSingle\nimport rx.Observable\n\n/**\n * A basic interface for creating a source. It could be an online source, a local source, etc.\n */\ninterface AnimeSource {\n\n    /**\n     * ID for the source. Must be unique.\n     */\n    val id: Long\n\n    /**\n     * Name of the source.\n     */\n    val name: String\n\n    val lang: String\n        get() = \"\"\n\n    /**\n     * Get the updated details for a anime.\n     *\n     * @since extensions-lib 1.5\n     * @param anime the anime to update.\n     * @return the updated anime.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getAnimeDetails(anime: SAnime): SAnime {\n        return fetchAnimeDetails(anime).awaitSingle()\n    }\n\n    /**\n     * Get all the available episodes for a anime.\n     *\n     * @since extensions-lib 1.5\n     * @param anime the anime to update.\n     * @return the episodes for the anime.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getEpisodeList(anime: SAnime): List<SEpisode> {\n        return fetchEpisodeList(anime).awaitSingle()\n    }\n\n    /**\n     * Get all the available seasons for an anime\n     *\n     * @since extensions-lib 16\n     * @param anime the anime to fetch seasons for.\n     * @return the anime list for the anime.\n     */\n    suspend fun getSeasonList(anime: SAnime): List<SAnime>\n\n    /**\n     * Get the list of hoster for an episode. The first hoster in the list should\n     * be the preferred hoster.\n     *\n     * @since extensions-lib 16\n     * @param episode the episode.\n     * @return the hosters for the episode.\n     */\n    suspend fun getHosterList(episode: SEpisode): List<Hoster> = throw IllegalStateException(\"Not used\")\n\n    /**\n     * Get the list of videos for a hoster.\n     *\n     * @since extensions-lib 16\n     * @param hoster the hoster.\n     * @return the videos for the hoster.\n     */\n    suspend fun getVideoList(hoster: Hoster): List<Video> = throw IllegalStateException(\"Not used\")\n\n    /**\n     * Get the list of videos a episode has. Pages should be returned\n     * in the expected order; the index is ignored.\n     *\n     * @since extensions-lib 1.5\n     * @param episode the episode.\n     * @return the videos for the episode.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getVideoList(episode: SEpisode): List<Video> {\n        return fetchVideoList(episode).awaitSingle()\n    }\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getAnimeDetails\"),\n    )\n    fun fetchAnimeDetails(anime: SAnime): Observable<SAnime> =\n        throw IllegalStateException(\"Not used\")\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getEpisodeList\"),\n    )\n    fun fetchEpisodeList(anime: SAnime): Observable<List<SEpisode>> =\n        throw IllegalStateException(\"Not used\")\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getVideoList\"),\n    )\n    fun fetchVideoList(episode: SEpisode): Observable<List<Video>> =\n        throw IllegalStateException(\"Not used\")\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/AnimeSourceFactory.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\n/**\n * A factory for creating sources at runtime.\n */\ninterface AnimeSourceFactory {\n    /**\n     * Create a new copy of the sources\n     * @return The created sources\n     */\n    fun createSources(): List<AnimeSource>\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/ConfigurableAnimeSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\nimport android.app.Application\nimport android.content.Context\nimport android.content.SharedPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ninterface ConfigurableAnimeSource : AnimeSource {\n\n    /**\n     * Gets instance of [SharedPreferences] scoped to the specific source.\n     *\n     * @since extensions-lib 1.5\n     */\n    fun getSourcePreferences(): SharedPreferences =\n        Injekt.get<Application>().getSharedPreferences(preferenceKey(), Context.MODE_PRIVATE)\n\n    fun setupPreferenceScreen(screen: PreferenceScreen)\n}\n\nfun ConfigurableAnimeSource.preferenceKey(): String = \"source_$id\"\n\n// TODO: use getSourcePreferences once all extensions are on ext-lib 1.5\nfun ConfigurableAnimeSource.sourcePreferences(): SharedPreferences =\n    Injekt.get<Application>().getSharedPreferences(preferenceKey(), Context.MODE_PRIVATE)\n\nfun sourcePreferences(key: String): SharedPreferences =\n    Injekt.get<Application>().getSharedPreferences(key, Context.MODE_PRIVATE)\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/PreferenceScreen.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\nexpect class PreferenceScreen\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/UnmeteredSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource\n\n/**\n * A source that explicitly doesn't require traffic considerations.\n *\n * This typically applies for self-hosted sources.\n */\ninterface UnmeteredSource\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimeFilter.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\nsealed class AnimeFilter<T>(val name: String, var state: T) {\n    open class Header(name: String) : AnimeFilter<Any>(name, 0)\n    open class Separator(name: String = \"\") : AnimeFilter<Any>(name, 0)\n    abstract class Select<V>(name: String, val values: Array<V>, state: Int = 0) : AnimeFilter<Int>(\n        name,\n        state,\n    )\n    abstract class Text(name: String, state: String = \"\") : AnimeFilter<String>(name, state)\n    abstract class CheckBox(name: String, state: Boolean = false) : AnimeFilter<Boolean>(\n        name,\n        state,\n    )\n    abstract class TriState(name: String, state: Int = STATE_IGNORE) : AnimeFilter<Int>(name, state) {\n        fun isIgnored() = state == STATE_IGNORE\n        fun isIncluded() = state == STATE_INCLUDE\n        fun isExcluded() = state == STATE_EXCLUDE\n\n        companion object {\n            const val STATE_IGNORE = 0\n            const val STATE_INCLUDE = 1\n            const val STATE_EXCLUDE = 2\n        }\n    }\n\n    abstract class Group<V>(name: String, state: List<V>) : AnimeFilter<List<V>>(name, state)\n\n    abstract class Sort(name: String, val values: Array<String>, state: Selection? = null) :\n        AnimeFilter<Sort.Selection?>(name, state) {\n        data class Selection(val index: Int, val ascending: Boolean)\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other !is AnimeFilter<*>) return false\n\n        return name == other.name && state == other.state\n    }\n\n    override fun hashCode(): Int {\n        var result = name.hashCode()\n        result = 31 * result + (state?.hashCode() ?: 0)\n        return result\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimeFilterList.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\nimport androidx.compose.runtime.Stable\n\n@Stable\ndata class AnimeFilterList(val list: List<AnimeFilter<*>>) : List<AnimeFilter<*>> by list {\n\n    constructor(vararg fs: AnimeFilter<*>) : this(if (fs.isNotEmpty()) fs.asList() else emptyList())\n\n    override fun equals(other: Any?): Boolean {\n        return false\n    }\n\n    override fun hashCode(): Int {\n        return list.hashCode()\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimeUpdateStrategy.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\n/**\n * Define the update strategy for a single SAnime.\n * The strategy used will only take effect on the library update.\n *\n * @since extensions-lib 1.4\n */\n@Suppress(\"UNUSED\")\nenum class AnimeUpdateStrategy {\n    /**\n     * Series marked as always update will be included in the library\n     * update if they aren't excluded by additional restrictions.\n     */\n    ALWAYS_UPDATE,\n\n    /**\n     * Series marked as only fetch once will be automatically skipped\n     * during library updates. Useful for cases where the series is previously\n     * known to be finished and have only a single chapter, for example.\n     */\n    ONLY_FETCH_ONCE,\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/AnimesPage.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\ndata class AnimesPage(val animes: List<SAnime>, val hasNextPage: Boolean)\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/FetchType.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\n/**\n * Define what type of content the anime should fetch.\n * The fetch type for a [SAnime] will not update after it's been initialized\n * to either Seasons or Episodes\n *\n * @since extensions-lib 16\n */\nenum class FetchType {\n    /**\n     * [SAnime] will only call `getSeasonList`.\n     */\n    Seasons,\n\n    /**\n     * [SAnime] will only call `getEpisodeList`.\n     */\n    Episodes,\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/Hoster.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\nimport eu.kanade.tachiyomi.animesource.model.SerializableVideo.Companion.serialize\nimport eu.kanade.tachiyomi.animesource.model.SerializableVideo.Companion.toVideoList\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\n\nopen class Hoster(\n    val hosterUrl: String = \"\",\n    val hosterName: String = \"\",\n    val videoList: List<Video>? = null,\n    val internalData: String = \"\",\n    val lazy: Boolean = false,\n) {\n    @Transient\n    @Volatile\n    var status: State = State.IDLE\n\n    enum class State {\n        IDLE,\n        LOADING,\n        READY,\n        ERROR,\n    }\n\n    fun copy(\n        hosterUrl: String = this.hosterUrl,\n        hosterName: String = this.hosterName,\n        videoList: List<Video>? = this.videoList,\n        internalData: String = this.internalData,\n        lazy: Boolean = this.lazy,\n    ): Hoster {\n        return Hoster(hosterUrl, hosterName, videoList, internalData, lazy)\n    }\n\n    companion object {\n        const val NO_HOSTER_LIST = \"no_hoster_list\"\n\n        fun List<Video>.toHosterList(): List<Hoster> {\n            return listOf(\n                Hoster(\n                    hosterUrl = \"\",\n                    hosterName = NO_HOSTER_LIST,\n                    videoList = this,\n                ),\n            )\n        }\n    }\n}\n\n@Serializable\ndata class SerializableHoster(\n    val hosterUrl: String = \"\",\n    val hosterName: String = \"\",\n    val videoList: String? = null,\n    val internalData: String = \"\",\n    val lazy: Boolean = false,\n) {\n    companion object {\n        fun List<Hoster>.serialize(): String =\n            Json.encodeToString(\n                this.map { host ->\n                    SerializableHoster(\n                        host.hosterUrl,\n                        host.hosterName,\n                        host.videoList?.serialize(),\n                        host.internalData,\n                        host.lazy,\n                    )\n                },\n            )\n\n        fun String.toHosterList(): List<Hoster> =\n            Json.decodeFromString<List<SerializableHoster>>(this)\n                .map { sHost ->\n                    Hoster(\n                        sHost.hosterUrl,\n                        sHost.hosterName,\n                        sHost.videoList?.toVideoList(),\n                        sHost.internalData,\n                        sHost.lazy,\n                    )\n                }\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SAnime.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.animesource.model\n\nimport java.io.Serializable\n\ninterface SAnime : Serializable {\n\n    var url: String\n\n    var title: String\n\n    var artist: String?\n\n    var author: String?\n\n    var description: String?\n\n    var genre: String?\n\n    var status: Int\n\n    var thumbnail_url: String?\n\n    var background_url: String?\n\n    var update_strategy: AnimeUpdateStrategy\n\n    var fetch_type: FetchType\n\n    var season_number: Double\n\n    var initialized: Boolean\n\n    fun getGenres(): List<String>? {\n        if (genre.isNullOrBlank()) return null\n        return genre?.split(\", \")?.map { it.trim() }?.filterNot { it.isBlank() }?.distinct()\n    }\n\n    fun copy() = create().also {\n        it.url = url\n        it.title = title\n        it.artist = artist\n        it.author = author\n        it.description = description\n        it.genre = genre\n        it.status = status\n        it.thumbnail_url = thumbnail_url\n        it.background_url = background_url\n        it.update_strategy = update_strategy\n        it.fetch_type = fetch_type\n        it.season_number = season_number\n        it.initialized = initialized\n    }\n\n    companion object {\n        const val UNKNOWN = 0\n        const val ONGOING = 1\n        const val COMPLETED = 2\n        const val LICENSED = 3\n        const val PUBLISHING_FINISHED = 4\n        const val CANCELLED = 5\n        const val ON_HIATUS = 6\n\n        fun create(): SAnime {\n            return SAnimeImpl()\n        }\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SAnimeImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.animesource.model\n\nclass SAnimeImpl : SAnime {\n\n    override lateinit var url: String\n\n    override lateinit var title: String\n\n    override var artist: String? = null\n\n    override var author: String? = null\n\n    override var description: String? = null\n\n    override var genre: String? = null\n\n    override var status: Int = 0\n\n    override var thumbnail_url: String? = null\n\n    override var background_url: String? = null\n\n    override var initialized: Boolean = false\n\n    override var update_strategy: AnimeUpdateStrategy = AnimeUpdateStrategy.ALWAYS_UPDATE\n\n    override var fetch_type: FetchType = FetchType.Episodes\n\n    override var season_number: Double = -1.0\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SEpisode.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.animesource.model\n\nimport java.io.Serializable\n\ninterface SEpisode : Serializable {\n\n    var url: String\n\n    var name: String\n\n    var date_upload: Long\n\n    var episode_number: Float\n\n    var fillermark: Boolean\n\n    var scanlator: String?\n\n    var summary: String?\n\n    var preview_url: String?\n\n    fun copyFrom(other: SEpisode) {\n        name = other.name\n        url = other.url\n        date_upload = other.date_upload\n        episode_number = other.episode_number\n        fillermark = other.fillermark\n        scanlator = other.scanlator\n        summary = other.summary\n        preview_url = other.preview_url\n    }\n\n    companion object {\n        fun create(): SEpisode {\n            return SEpisodeImpl()\n        }\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/SEpisodeImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.animesource.model\n\nclass SEpisodeImpl : SEpisode {\n\n    override lateinit var url: String\n\n    override lateinit var name: String\n\n    override var date_upload: Long = 0\n\n    override var episode_number: Float = -1f\n\n    override var fillermark: Boolean = false\n\n    override var scanlator: String? = null\n\n    override var summary: String? = null\n\n    override var preview_url: String? = null\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/model/Video.kt",
    "content": "package eu.kanade.tachiyomi.animesource.model\n\nimport android.net.Uri\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.encodeToString\nimport kotlinx.serialization.json.Json\nimport okhttp3.Headers\n\n@Serializable\ndata class Track(val url: String, val lang: String)\n\n@Serializable\nenum class ChapterType {\n    Opening,\n    Ending,\n    Recap,\n    MixedOp,\n    Other,\n}\n\n@Serializable\ndata class TimeStamp(\n    val start: Double,\n    val end: Double,\n    val name: String,\n    val type: ChapterType = ChapterType.Other,\n)\n\ndata class Video(\n    var videoUrl: String = \"\",\n    val videoTitle: String = \"\",\n    val resolution: Int? = null,\n    val bitrate: Int? = null,\n    val headers: Headers? = null,\n    val preferred: Boolean = false,\n    val subtitleTracks: List<Track> = emptyList(),\n    val audioTracks: List<Track> = emptyList(),\n    val timestamps: List<TimeStamp> = emptyList(),\n    val mpvArgs: List<Pair<String, String>> = emptyList(),\n    val ffmpegStreamArgs: List<Pair<String, String>> = emptyList(),\n    val ffmpegVideoArgs: List<Pair<String, String>> = emptyList(),\n    val internalData: String = \"\",\n    val initialized: Boolean = false,\n) {\n\n    // TODO(1.6): Remove after ext lib bump\n    @Deprecated(\"Use videoTitle instead\", ReplaceWith(\"videoTitle\"))\n    val quality: String\n        get() = videoTitle\n\n    // TODO(1.6): Remove after ext lib bump\n    val url: String\n        get() = videoPageUrl\n\n    // TODO(1.6): Remove after ext lib bump\n    private var videoPageUrl: String = \"\"\n\n    // TODO(1.6): Remove after ext lib bump\n    constructor(\n        url: String,\n        quality: String,\n        videoUrl: String?,\n        headers: Headers? = null,\n        subtitleTracks: List<Track> = emptyList(),\n        audioTracks: List<Track> = emptyList(),\n    ) : this(\n        videoTitle = quality,\n        videoUrl = videoUrl ?: \"null\",\n        headers = headers,\n        subtitleTracks = subtitleTracks,\n        audioTracks = audioTracks,\n    ) {\n        this.videoPageUrl = url\n    }\n\n    // TODO(1.6): Remove after ext lib bump\n    @Suppress(\"UNUSED_PARAMETER\")\n    constructor(\n        url: String,\n        quality: String,\n        videoUrl: String?,\n        uri: Uri? = null,\n        headers: Headers? = null,\n    ) : this(url, quality, videoUrl, headers)\n\n    @Transient\n    @Volatile\n    var status: State = State.QUEUE\n        set(value) {\n            field = value\n        }\n\n    enum class State {\n        QUEUE,\n        LOAD_VIDEO,\n        READY,\n        ERROR,\n    }\n\n    companion object {\n        const val MPV_ARGS_TAG = \"ANIYOMI_MPV_ARGS\"\n    }\n}\n\n@Serializable\ndata class SerializableVideo(\n    val videoUrl: String = \"\",\n    val videoTitle: String = \"\",\n    val resolution: Int? = null,\n    val bitrate: Int? = null,\n    val headers: List<Pair<String, String>>? = null,\n    val preferred: Boolean = false,\n    val subtitleTracks: List<Track> = emptyList(),\n    val audioTracks: List<Track> = emptyList(),\n    val timestamps: List<TimeStamp> = emptyList(),\n    val mpvArgs: List<Pair<String, String>> = emptyList(),\n    val ffmpegStreamArgs: List<Pair<String, String>> = emptyList(),\n    val ffmpegVideoArgs: List<Pair<String, String>> = emptyList(),\n    val internalData: String = \"\",\n    val initialized: Boolean = false,\n) {\n\n    companion object {\n        fun List<Video>.serialize(): String =\n            Json.encodeToString(\n                this.map { vid ->\n                    SerializableVideo(\n                        vid.videoUrl,\n                        vid.videoTitle,\n                        vid.resolution,\n                        vid.bitrate,\n                        vid.headers?.toList(),\n                        vid.preferred,\n                        vid.subtitleTracks,\n                        vid.audioTracks,\n                        vid.timestamps,\n                        vid.mpvArgs,\n                        vid.ffmpegStreamArgs,\n                        vid.ffmpegVideoArgs,\n                        vid.internalData,\n                        vid.initialized,\n                    )\n                },\n            )\n\n        fun String.toVideoList(): List<Video> =\n            Json.decodeFromString<List<SerializableVideo>>(this)\n                .map { sVid ->\n                    Video(\n                        sVid.videoUrl,\n                        sVid.videoTitle,\n                        sVid.resolution,\n                        sVid.bitrate,\n                        sVid.headers\n                            ?.flatMap { it.toList() }\n                            ?.let { Headers.headersOf(*it.toTypedArray()) },\n                        sVid.preferred,\n                        sVid.subtitleTracks,\n                        sVid.audioTracks,\n                        sVid.timestamps,\n                        sVid.mpvArgs,\n                        sVid.ffmpegStreamArgs,\n                        sVid.ffmpegVideoArgs,\n                        sVid.internalData,\n                        sVid.initialized,\n                    )\n                }\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/online/AnimeHttpSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource.online\n\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.animesource.model.AnimesPage\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.ProgressListener\nimport eu.kanade.tachiyomi.network.asObservableSuccess\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.newCachelessCallWithProgress\nimport okhttp3.Headers\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.Response\nimport rx.Observable\nimport tachiyomi.core.common.util.lang.awaitSingle\nimport uy.kohesive.injekt.injectLazy\nimport java.net.URI\nimport java.net.URISyntaxException\nimport java.security.MessageDigest\n\n/**\n * A simple implementation for sources from a website.\n */\n@Suppress(\"unused\")\nabstract class AnimeHttpSource : AnimeCatalogueSource {\n    /**\n     * Network service.\n     */\n    protected val network: NetworkHelper by injectLazy()\n\n    /**\n     * Base url of the website without the trailing slash, like: http://mysite.com\n     */\n    abstract val baseUrl: String\n\n    /**\n     * Version id used to generate the source id. If the site completely changes and urls are\n     * incompatible, you may increase this value and it'll be considered as a new source.\n     */\n    open val versionId = 1\n\n    /**\n     * ID of the source. By default it uses a generated id using the first 16 characters (64 bits)\n     * of the MD5 of the string `\"${name.lowercase()}/$lang/$versionId\"`.\n     *\n     * The ID is generated by the [generateId] function, which can be reused if needed\n     * to generate outdated IDs for cases where the source name or language needs to\n     * be changed but migrations can be avoided.\n     *\n     * Note: the generated ID sets the sign bit to `0`.\n     */\n    override val id by lazy { generateId(name, lang, versionId) }\n\n    /**\n     * Headers used for requests.\n     */\n    val headers: Headers by lazy { headersBuilder().build() }\n\n    /**\n     * Default network client for doing requests.\n     */\n    open val client: OkHttpClient\n        get() = network.client\n\n    /**\n     * Generates a unique ID for the source based on the provided [name], [lang] and\n     * [versionId]. It will use the first 16 characters (64 bits) of the MD5 of the string\n     * `\"${name.lowercase()}/$lang/$versionId\"`.\n     *\n     * Note: the generated ID sets the sign bit to `0`.\n     *\n     * Can be used to generate outdated IDs, such as when the source name or language\n     * needs to be changed but migrations can be avoided.\n     *\n     * @since extensions-lib 1.5\n     * @param name [String] the name of the source\n     * @param lang [String] the language of the source\n     * @param versionId [Int] the version ID of the source\n     * @return a unique ID for the source\n     */\n    @Suppress(\"MemberVisibilityCanBePrivate\")\n    protected fun generateId(name: String, lang: String, versionId: Int): Long {\n        val key = \"${name.lowercase()}/$lang/$versionId\"\n        val bytes = MessageDigest.getInstance(\"MD5\").digest(key.toByteArray())\n        return (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE\n    }\n\n    /**\n     * Headers builder for requests. Implementations can override this method for custom headers.\n     */\n    protected open fun headersBuilder() = Headers.Builder().apply {\n        add(\"User-Agent\", network.defaultUserAgentProvider())\n    }\n\n    /**\n     * Visible name of the source.\n     */\n    override fun toString() = \"$name (${lang.uppercase()})\"\n\n    /**\n     * Returns an observable containing a page with a list of anime. Normally it's not needed to\n     * override this method.\n     *\n     * @param page the page number to retrieve.\n     */\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getPopularAnime\"),\n    )\n    override fun fetchPopularAnime(page: Int): Observable<AnimesPage> {\n        return client.newCall(popularAnimeRequest(page))\n            .asObservableSuccess()\n            .map { response ->\n                popularAnimeParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for the popular anime given the page.\n     *\n     * @param page the page number to retrieve.\n     */\n    protected abstract fun popularAnimeRequest(page: Int): Request\n\n    /**\n     * Parses the response from the site and returns a [AnimesPage] object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun popularAnimeParse(response: Response): AnimesPage\n\n    /**\n     * Returns an observable containing a page with a list of anime. Normally it's not needed to\n     * override this method.\n     *\n     * @param page the page number to retrieve.\n     * @param query the search query.\n     * @param filters the list of filters to apply.\n     */\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getSearchAnime\"),\n    )\n    override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable<AnimesPage> {\n        return Observable.defer {\n            try {\n                client.newCall(searchAnimeRequest(page, query, filters)).asObservableSuccess()\n            } catch (e: NoClassDefFoundError) {\n                // RxJava doesn't handle Errors, which tends to happen during global searches\n                // if an old extension using non-existent classes is still around\n                throw RuntimeException(e)\n            }\n        }\n            .map { response ->\n                searchAnimeParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for the search anime given the page.\n     *\n     * @param page the page number to retrieve.\n     * @param query the search query.\n     * @param filters the list of filters to apply.\n     */\n    protected abstract fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request\n\n    /**\n     * Parses the response from the site and returns a [AnimesPage] object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun searchAnimeParse(response: Response): AnimesPage\n\n    /**\n     * Returns an observable containing a page with a list of latest anime updates.\n     *\n     * @param page the page number to retrieve.\n     */\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getLatestUpdates\"),\n    )\n    override fun fetchLatestUpdates(page: Int): Observable<AnimesPage> {\n        return client.newCall(latestUpdatesRequest(page))\n            .asObservableSuccess()\n            .map { response ->\n                latestUpdatesParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for latest anime given the page.\n     *\n     * @param page the page number to retrieve.\n     */\n    protected abstract fun latestUpdatesRequest(page: Int): Request\n\n    /**\n     * Parses the response from the site and returns a [AnimesPage] object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun latestUpdatesParse(response: Response): AnimesPage\n\n    /**\n     * Get the updated details for a anime.\n     * Normally it's not needed to override this method.\n     *\n     * @param anime the anime to be updated.\n     * @return the updated anime.\n     */\n    @Suppress(\"DEPRECATION\")\n    override suspend fun getAnimeDetails(anime: SAnime): SAnime {\n        return fetchAnimeDetails(anime).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getAnimeDetails\"))\n    override fun fetchAnimeDetails(anime: SAnime): Observable<SAnime> {\n        return client.newCall(animeDetailsRequest(anime))\n            .asObservableSuccess()\n            .map { response ->\n                animeDetailsParse(response).apply { initialized = true }\n            }\n    }\n\n    /**\n     * Returns the request for the details of an anime. Override only if it's needed to change the\n     * url, send different headers or request method like POST.\n     *\n     * @param anime the anime to be updated.\n     */\n    open fun animeDetailsRequest(anime: SAnime): Request {\n        return GET(baseUrl + anime.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns the details of an anime.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun animeDetailsParse(response: Response): SAnime\n\n    /**\n     * Get all the available episodes for an anime.\n     * Normally it's not needed to override this method.\n     *\n     * @param anime the anime to update.\n     * @return the chapters for the manga.\n     */\n    @Suppress(\"DEPRECATION\")\n    override suspend fun getEpisodeList(anime: SAnime): List<SEpisode> {\n        return fetchEpisodeList(anime).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getEpisodeList\"))\n    override fun fetchEpisodeList(anime: SAnime): Observable<List<SEpisode>> {\n        return client.newCall(episodeListRequest(anime))\n            .asObservableSuccess()\n            .map { response ->\n                episodeListParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for updating the episode list. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @param anime the anime to look for episodes.\n     */\n    protected open fun episodeListRequest(anime: SAnime): Request {\n        return GET(baseUrl + anime.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns a list of episodes.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun episodeListParse(response: Response): List<SEpisode>\n\n    /**\n     * Parses the response from the site and returns a SEpisode Object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun episodeVideoParse(response: Response): SEpisode\n\n    /**\n     * Get all the available seasons for an anime.\n     * Normally it's not needed to override this method.\n     *\n     * @since extensions-lib 16\n     * @param anime the anime to look for seasons.\n     * @return the seasons for the anime.\n     */\n    override suspend fun getSeasonList(anime: SAnime): List<SAnime> {\n        return client.newCall(seasonListRequest(anime))\n            .awaitSuccess()\n            .let { response ->\n                seasonListParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for updating the season list. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @since extensions-lib 16\n     * @param anime the anime to look for seasons.\n     * @return the request for getting the seasons.\n     */\n    protected open fun seasonListRequest(anime: SAnime): Request {\n        return GET(baseUrl + anime.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns a list of episodes.\n     *\n     * @since extensions-lib 16\n     * @param response the response from the site.\n     * @return the list of seasons.\n     */\n    protected abstract fun seasonListParse(response: Response): List<SAnime>\n\n    /**\n     * Get the list of hoster for an episode. The first hoster in the list should\n     * be the preferred hoster.\n     *\n     * @since extensions-lib 16\n     * @param episode the episode.\n     * @return the hosters for the episode.\n     */\n    override suspend fun getHosterList(episode: SEpisode): List<Hoster> {\n        return client.newCall(hosterListRequest(episode))\n            .awaitSuccess()\n            .let { response ->\n                hosterListParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for getting the hosters. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @since extensions-lib 16\n     * @param episode the episode to look for hosters.\n     * @return the request for getting the hosters.\n     */\n    protected open fun hosterListRequest(episode: SEpisode): Request {\n        return GET(baseUrl + episode.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns a list of hosters.\n     *\n     * @since extensions-lib 16\n     * @param response the response from the site.\n     * @return the list of hosters.\n     */\n    protected abstract fun hosterListParse(response: Response): List<Hoster>\n\n    /**\n     * Get the list of videos for a hoster.\n     *\n     * @since extensions-lib 16\n     * @param hoster the hoster.\n     * @return the videos for the hoster.\n     */\n    override suspend fun getVideoList(hoster: Hoster): List<Video> {\n        return client.newCall(videoListRequest(hoster))\n            .awaitSuccess()\n            .let { response ->\n                videoListParse(response, hoster)\n            }\n    }\n\n    /**\n     * Returns the request for getting the hosters. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @since extensions-lib 16\n     * @param hoster the hoster to look for videos.\n     * @return the request for getting the videos.\n     */\n    protected open fun videoListRequest(hoster: Hoster): Request {\n        return GET(hoster.hosterUrl, headers)\n    }\n\n    /**\n     * Parses the response from the hoster and returns a list of videos.\n     *\n     * @since extensions-lib 16\n     * @param response the response from the hoster.\n     * @param hoster the hoster.\n     * @return the list of videos.\n     */\n    protected abstract fun videoListParse(response: Response, hoster: Hoster): List<Video>\n\n    /**\n     * Returns the resolved video of the episode link. Override only if it's needed to resolve\n     * the video.\n     *\n     * @since extensions-lib 16\n     * @param video the video information.\n     * @return the resolved video, or null on failure\n     */\n    open suspend fun resolveVideo(video: Video): Video? {\n        return video\n    }\n\n    /**\n     * Get the list of videos a episode has. Videos should be returned\n     * in the expected order; the index is ignored.\n     *\n     * @param episode the episode.\n     * @return the videos for the episode.\n     */\n    override suspend fun getVideoList(episode: SEpisode): List<Video> {\n        @Suppress(\"DEPRECATION\")\n        return fetchVideoList(episode).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getVideoList\"))\n    override fun fetchVideoList(episode: SEpisode): Observable<List<Video>> {\n        return client.newCall(videoListRequest(episode))\n            .asObservableSuccess()\n            .map { response ->\n                videoListParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for getting the episode link. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @param episode the episode to look for links.\n     */\n    protected open fun videoListRequest(episode: SEpisode): Request {\n        return GET(baseUrl + episode.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns a list of pages.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun videoListParse(response: Response): List<Video>\n\n    /**\n     * Sorts the hoster list. Override this according to the user's preference.\n     *\n     * @since extensions-lib 16\n     */\n    open fun List<Hoster>.sortHosters(): List<Hoster> {\n        return this\n    }\n\n    /**\n     * Sorts the video list. Override this according to the user's preference.\n     *\n     * @since extensions-lib 16\n     */\n    open fun List<Video>.sortVideos(): List<Video> {\n        @Suppress(\"DEPRECATION\")\n        return sort()\n    }\n\n    /**\n     * Sorts the video list. Override this according to the user's preference.\n     */\n    @Deprecated(\"Use .sortVideos() instead\", replaceWith = ReplaceWith(\"sortVideos\"))\n    protected open fun List<Video>.sort(): List<Video> {\n        return this\n    }\n\n    /**\n     * Returns an observable with the page containing the source url of the image. If there's any\n     * error, it will return null instead of throwing an exception.\n     *\n     * @since extensions-lib 1.5\n     * @param video the video whose source image has to be fetched.\n     */\n    @Suppress(\"DEPRECATION\")\n    open suspend fun getVideoUrl(video: Video): String {\n        return fetchVideoUrl(video).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getVideoUrl\"))\n    open fun fetchVideoUrl(video: Video): Observable<String> {\n        return client.newCall(videoUrlRequest(video))\n            .asObservableSuccess()\n            .map { videoUrlParse(it) }\n    }\n\n    /**\n     * Returns the request for getting the url to the source image. Override only if it's needed to\n     * override the url, send different headers or request method like POST.\n     *\n     * @param video the chapter whose page list has to be fetched\n     */\n    protected open fun videoUrlRequest(video: Video): Request {\n        return GET(video.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns the absolute url to the source image.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun videoUrlParse(response: Response): String\n\n    /**\n     * Returns the response of the source video.\n     * Typically does not need to be overridden.\n     *\n     * @since extensions-lib 1.5\n     * @param request the http request for the video that has to be downloaded.\n     * @param listener the progress listener that has to be attached to the http request\n     */\n    suspend fun getVideo(\n        request: Request,\n        listener: ProgressListener,\n    ): Response {\n        return client.newCachelessCallWithProgress(request, listener)\n            .awaitSuccess()\n    }\n\n    fun getVideoSize(\n        video: Video,\n        tries: Int,\n    ): Long {\n        val headers = Headers.Builder().addAll(video.headers ?: headers).add(\"Range\", \"bytes=0-1\").build()\n        val request = GET(video.videoUrl!!, headers)\n        val response = client.newCall(request).execute()\n        // parse the response headers to get the size of the video, in particular the content-range header\n        val contentRange = response.header(\"Content-Range\")\n        if (contentRange != null) {\n            return contentRange.split(\"/\")[1].toLong()\n        }\n        if (tries > 0) {\n            return getVideoSize(video, tries - 1)\n        }\n        return -1L\n    }\n\n    /**\n     * Returns the request for getting the source image, with range header attributes. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * If end is over start than the request is a range request\n     * If end if equal or less than start then the request is initial-point request\n     *\n     * @param video the video whose link has to be fetched\n     * @param start starting byte of chunk\n     * @param end   ending byte of chunk\n     */\n    fun videoRequest(\n        video: Video,\n        start: Long,\n        end: Long,\n    ): Request {\n        val headers = video.headers ?: headers\n        val newHeaders =\n            if (end - start > 0L) {\n                Headers.Builder().addAll(headers).add(\"Range\", \"bytes=$start-$end\").build()\n            } else if (start >= 0L) {\n                Headers.Builder().addAll(headers).add(\"Range\", \"bytes=$start-\").build()\n            } else {\n                // logcat(LogPriority.ERROR) { \"Error: end-start is less than 0\" }\n                null\n            }\n        return GET(video.videoUrl!!, newHeaders ?: headers)\n    }\n\n    /**\n     * Returns the request for getting the source image without range header attributes. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     *\n     * @param video the video whose link has to be fetched\n     */\n\n    fun safeVideoRequest(\n        video: Video,\n    ): Request {\n        return GET(video.videoUrl!!, video.headers ?: headers)\n    }\n\n    /**\n     * Assigns the url of the episode without the scheme and domain. It saves some redundancy from\n     * database and the urls could still work after a domain change.\n     *\n     * @param url the full url to the episode.\n     */\n    fun SEpisode.setUrlWithoutDomain(url: String) {\n        this.url = getUrlWithoutDomain(url)\n    }\n\n    /**\n     * Assigns the url of the anime without the scheme and domain. It saves some redundancy from\n     * database and the urls could still work after a domain change.\n     *\n     * @param url the full url to the anime.\n     */\n    fun SAnime.setUrlWithoutDomain(url: String) {\n        this.url = getUrlWithoutDomain(url)\n    }\n\n    /**\n     * Returns the url of the given string without the scheme and domain.\n     *\n     * @param orig the full url.\n     */\n    private fun getUrlWithoutDomain(orig: String): String {\n        return try {\n            val uri = URI(orig)\n            var out = uri.path\n            if (uri.query != null) {\n                out += \"?\" + uri.query\n            }\n            if (uri.fragment != null) {\n                out += \"#\" + uri.fragment\n            }\n            out\n        } catch (e: URISyntaxException) {\n            orig\n        }\n    }\n\n    /**\n     * Returns the url of the provided anime\n     *\n     * @since extensions-lib 14\n     * @param anime the anime\n     * @return url of the anime\n     */\n    open fun getAnimeUrl(anime: SAnime): String {\n        return animeDetailsRequest(anime).url.toString()\n    }\n\n    /**\n     * Returns the url of the provided episode\n     *\n     * @since extensions-lib 14\n     * @param episode the episode\n     * @return url of the episode\n     */\n    open fun getEpisodeUrl(episode: SEpisode): String {\n        return episode.url\n    }\n\n    /**\n     * Called before inserting a new episode into database. Use it if you need to override episode\n     * fields, like the title or the episode number. Do not change anything to [anime].\n     *\n     * @param episode the episode to be added.\n     * @param anime the anime of the episode.\n     */\n    open fun prepareNewEpisode(episode: SEpisode, anime: SAnime) {}\n\n    /**\n     * Returns the list of filters for the source.\n     */\n    override fun getFilterList() = AnimeFilterList()\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/online/ParsedAnimeHttpSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource.online\n\nimport eu.kanade.tachiyomi.animesource.model.AnimesPage\nimport eu.kanade.tachiyomi.animesource.model.Hoster\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.util.asJsoup\nimport okhttp3.Response\nimport org.jsoup.nodes.Document\nimport org.jsoup.nodes.Element\n\n/**\n * A simple implementation for sources from a website using Jsoup, an HTML parser.\n */\n@Suppress(\"unused\")\nabstract class ParsedAnimeHttpSource : AnimeHttpSource() {\n\n    /**\n     * Parses the response from the site and returns a [AnimesPage] object.\n     *\n     * @param response the response from the site.\n     */\n    override fun popularAnimeParse(response: Response): AnimesPage {\n        val document = response.asJsoup()\n\n        val animes = document.select(popularAnimeSelector()).map { element ->\n            popularAnimeFromElement(element)\n        }\n\n        val hasNextPage = popularAnimeNextPageSelector()?.let { selector ->\n            document.select(selector).first()\n        } != null\n\n        return AnimesPage(animes, hasNextPage)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each anime.\n     */\n    protected abstract fun popularAnimeSelector(): String\n\n    /**\n     * Returns an anime from the given [element]. Most sites only show the title and the url, it's\n     * totally fine to fill only those two values.\n     *\n     * @param element an element obtained from [popularAnimeSelector].\n     */\n    protected abstract fun popularAnimeFromElement(element: Element): SAnime\n\n    /**\n     * Returns the Jsoup selector that returns the <a> tag linking to the next page, or null if\n     * there's no next page.\n     */\n    protected abstract fun popularAnimeNextPageSelector(): String?\n\n    /**\n     * Parses the response from the site and returns a [AnimesPage] object.\n     *\n     * @param response the response from the site.\n     */\n    override fun searchAnimeParse(response: Response): AnimesPage {\n        val document = response.asJsoup()\n\n        val animes = document.select(searchAnimeSelector()).map { element ->\n            searchAnimeFromElement(element)\n        }\n\n        val hasNextPage = searchAnimeNextPageSelector()?.let { selector ->\n            document.select(selector).first()\n        } != null\n\n        return AnimesPage(animes, hasNextPage)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each anime.\n     */\n    protected abstract fun searchAnimeSelector(): String\n\n    /**\n     * Returns an anime from the given [element]. Most sites only show the title and the url, it's\n     * totally fine to fill only those two values.\n     *\n     * @param element an element obtained from [searchAnimeSelector].\n     */\n    protected abstract fun searchAnimeFromElement(element: Element): SAnime\n\n    /**\n     * Returns the Jsoup selector that returns the <a> tag linking to the next page, or null if\n     * there's no next page.\n     */\n    protected abstract fun searchAnimeNextPageSelector(): String?\n\n    /**\n     * Parses the response from the site and returns a [AnimesPage] object.\n     *\n     * @param response the response from the site.\n     */\n    override fun latestUpdatesParse(response: Response): AnimesPage {\n        val document = response.asJsoup()\n\n        val animes = document.select(latestUpdatesSelector()).map { element ->\n            latestUpdatesFromElement(element)\n        }\n\n        val hasNextPage = latestUpdatesNextPageSelector()?.let { selector ->\n            document.select(selector).first()\n        } != null\n\n        return AnimesPage(animes, hasNextPage)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each anime.\n     */\n    protected abstract fun latestUpdatesSelector(): String\n\n    /**\n     * Returns an anime from the given [element]. Most sites only show the title and the url, it's\n     * totally fine to fill only those two values.\n     *\n     * @param element an element obtained from [latestUpdatesSelector].\n     */\n    protected abstract fun latestUpdatesFromElement(element: Element): SAnime\n\n    /**\n     * Returns the Jsoup selector that returns the <a> tag linking to the next page, or null if\n     * there's no next page.\n     */\n    protected abstract fun latestUpdatesNextPageSelector(): String?\n\n    /**\n     * Parses the response from the site and returns the details of an anime.\n     *\n     * @param response the response from the site.\n     */\n    override fun animeDetailsParse(response: Response): SAnime {\n        return animeDetailsParse(response.asJsoup())\n    }\n\n    /**\n     * Returns the details of the anime from the given [document].\n     *\n     * @param document the parsed document.\n     */\n    protected abstract fun animeDetailsParse(document: Document): SAnime\n\n    /**\n     * Parses the response from the site and returns a list of episodes.\n     *\n     * @param response the response from the site.\n     */\n    override fun episodeListParse(response: Response): List<SEpisode> {\n        val document = response.asJsoup()\n        return document.select(episodeListSelector()).map { episodeFromElement(it) }\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each episode.\n     */\n    protected abstract fun episodeListSelector(): String\n\n    /**\n     * Returns an episode from the given element.\n     *\n     * @param element an element obtained from [episodeListSelector].\n     */\n    protected abstract fun episodeFromElement(element: Element): SEpisode\n\n    /**\n     * Parses the response from the site and returns a list of seasons.\n     *\n     * @since extensions-lib 16\n     * @param response the response from the site.\n     */\n    override fun seasonListParse(response: Response): List<SAnime> {\n        val document = response.asJsoup()\n        return document.select(seasonListSelector()).map { seasonFromElement(it) }\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each season.\n     *\n     * @since extensions-lib 16\n     */\n    protected abstract fun seasonListSelector(): String\n\n    /**\n     * Returns a season from the given element.\n     *\n     * @since extensions-lib 16\n     * @param element an element obtained from [seasonListSelector].\n     */\n    protected abstract fun seasonFromElement(element: Element): SAnime\n\n    /**\n     * Parses the response from the site and returns the hoster list.\n     *\n     * @since extensions-lib 16\n     * @param response the response from the site.\n     * @return the list of hosters.\n     */\n    override fun hosterListParse(response: Response): List<Hoster> {\n        val document = response.asJsoup()\n        return document.select(hosterListSelector()).map(::hosterFromElement)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each hoster.\n     *\n     * @since extensions-lib 16\n     */\n    protected abstract fun hosterListSelector(): String\n\n    /**\n     * Returns a hoster from the given element.\n     *\n     * @since extensions-lib 16\n     * @param element an element obtained from [hosterListSelector].\n     */\n    protected abstract fun hosterFromElement(element: Element): Hoster\n\n    /**\n     * Parses the response from the site and returns the page list.\n     *\n     * @param response the response from the site.\n     */\n    override fun videoListParse(response: Response): List<Video> {\n        val document = response.asJsoup()\n        return document.select(videoListSelector()).map { videoFromElement(it) }\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each video.\n     */\n    protected abstract fun videoListSelector(): String\n\n    /**\n     * Returns a video from the given element.\n     *\n     * @param element an element obtained from [videoListSelector].\n     */\n    protected abstract fun videoFromElement(element: Element): Video\n\n    /**\n     * Parse the response from the site and returns the absolute url to the source video.\n     *\n     * @param response the response from the site.\n     */\n    override fun videoUrlParse(response: Response): String {\n        return videoUrlParse(response.asJsoup())\n    }\n\n    /**\n     * Returns the absolute url to the source image from the document.\n     *\n     * @param document the parsed document.\n     */\n    protected abstract fun videoUrlParse(document: Document): String\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/online/ResolvableAnimeSource.kt",
    "content": "package eu.kanade.tachiyomi.animesource.online\n\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\n\n/**\n * A source that may handle opening an SAnime or SEpisode for a given URI.\n *\n * @since extensions-lib 1.5\n */\ninterface ResolvableAnimeSource : AnimeSource {\n\n    /**\n     * Returns what the given URI may open.\n     * Returns [UriType.Unknown] if the source is not able to resolve the URI.\n     *\n     * @since extensions-lib 1.5\n     */\n    fun getUriType(uri: String): UriType\n\n    /**\n     * Called if [getUriType] is [UriType.Anime].\n     * Returns the corresponding SManga, if possible.\n     *\n     * @since extensions-lib 1.5\n     */\n    suspend fun getAnime(uri: String): SAnime?\n\n    /**\n     * Called if [getUriType] is [UriType.Episode].\n     * Returns the corresponding SChapter, if possible.\n     *\n     * @since extensions-lib 1.5\n     */\n    suspend fun getEpisode(uri: String): SEpisode?\n}\n\nsealed interface UriType {\n    data object Anime : UriType\n    data object Episode : UriType\n    data object Unknown : UriType\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/animesource/utils/Preferences.kt",
    "content": "package eu.kanade.tachiyomi.animesource.utils\n\nimport android.app.Application\nimport android.content.Context\nimport android.content.SharedPreferences\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * Gets preference key for source with [id].\n */\nfun preferencesKey(id: Long) = \"source_$id\"\n\n/**\n * Gets preference key for source.\n */\nfun AnimeSource.preferencesKey(): String = preferencesKey(id)\n\n/**\n * Gets instance of [SharedPreferences] scoped to the specific source key.\n */\nfun sourcePreferences(key: String): SharedPreferences =\n    Injekt.get<Application>().getSharedPreferences(key, Context.MODE_PRIVATE)\n\n/**\n * Gets instance of [SharedPreferences] scoped to the specific source.\n *\n * @since extensions-lib 16\n */\nfun AnimeSource.sourcePreferences(): SharedPreferences = sourcePreferences(preferencesKey())\n\n/**\n * Gets instance of [SharedPreferences] scoped to the specific source id.\n *\n * @since extensions-lib 16\n *\n * @param id source id which the [SharedPreferences] is scoped to.\n */\nfun sourcePreferences(id: Long): SharedPreferences = sourcePreferences(preferencesKey(id))\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/CatalogueSource.kt",
    "content": "package eu.kanade.tachiyomi.source\n\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.source.model.MangasPage\nimport rx.Observable\nimport tachiyomi.core.common.util.lang.awaitSingle\n\ninterface CatalogueSource : MangaSource {\n\n    /**\n     * An ISO 639-1 compliant language code (two letters in lower case).\n     */\n    override val lang: String\n\n    /**\n     * Whether the source has support for latest updates.\n     */\n    val supportsLatest: Boolean\n\n    /**\n     * Get a page with a list of manga.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page number to retrieve.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getPopularManga(page: Int): MangasPage {\n        return fetchPopularManga(page).awaitSingle()\n    }\n\n    /**\n     * Get a page with a list of manga.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page number to retrieve.\n     * @param query the search query.\n     * @param filters the list of filters to apply.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getSearchManga(page: Int, query: String, filters: FilterList): MangasPage {\n        return fetchSearchManga(page, query, filters).awaitSingle()\n    }\n\n    /**\n     * Get a page with a list of latest manga updates.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page number to retrieve.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getLatestUpdates(page: Int): MangasPage {\n        return fetchLatestUpdates(page).awaitSingle()\n    }\n\n    /**\n     * Returns the list of filters for the source.\n     */\n    fun getFilterList(): FilterList\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getPopularManga\"),\n    )\n    fun fetchPopularManga(page: Int): Observable<MangasPage> =\n        throw IllegalStateException(\"Not used\")\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getSearchManga\"),\n    )\n    fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> =\n        throw IllegalStateException(\"Not used\")\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getLatestUpdates\"),\n    )\n    fun fetchLatestUpdates(page: Int): Observable<MangasPage> =\n        throw IllegalStateException(\"Not used\")\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/ConfigurableSource.kt",
    "content": "package eu.kanade.tachiyomi.source\n\nimport android.app.Application\nimport android.content.Context\nimport android.content.SharedPreferences\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\ninterface ConfigurableSource : MangaSource {\n\n    /**\n     * Gets instance of [SharedPreferences] scoped to the specific source.\n     *\n     * @since extensions-lib 1.5\n     */\n    fun getSourcePreferences(): SharedPreferences =\n        Injekt.get<Application>().getSharedPreferences(preferenceKey(), Context.MODE_PRIVATE)\n\n    fun setupPreferenceScreen(screen: PreferenceScreen)\n}\n\nfun ConfigurableSource.preferenceKey(): String = \"source_$id\"\n\n// TODO: use getSourcePreferences once all extensions are on ext-lib 1.5\nfun ConfigurableSource.sourcePreferences(): SharedPreferences =\n    Injekt.get<Application>().getSharedPreferences(preferenceKey(), Context.MODE_PRIVATE)\n\nfun sourcePreferences(key: String): SharedPreferences =\n    Injekt.get<Application>().getSharedPreferences(key, Context.MODE_PRIVATE)\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/MangaSource.kt",
    "content": "package eu.kanade.tachiyomi.source\n\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.util.awaitSingle\nimport rx.Observable\n\n/**\n * A basic interface for creating a source. It could be an online source, a local source, etc.\n */\ninterface MangaSource {\n\n    /**\n     * ID for the source. Must be unique.\n     */\n    val id: Long\n\n    /**\n     * Name of the source.\n     */\n    val name: String\n\n    val lang: String\n        get() = \"\"\n\n    /**\n     * Get the updated details for a manga.\n     *\n     * @since extensions-lib 1.5\n     * @param manga the manga to update.\n     * @return the updated manga.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getMangaDetails(manga: SManga): SManga {\n        return fetchMangaDetails(manga).awaitSingle()\n    }\n\n    /**\n     * Get all the available chapters for a manga.\n     *\n     * @since extensions-lib 1.5\n     * @param manga the manga to update.\n     * @return the chapters for the manga.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getChapterList(manga: SManga): List<SChapter> {\n        return fetchChapterList(manga).awaitSingle()\n    }\n\n    /**\n     * Get the list of pages a chapter has. Pages should be returned\n     * in the expected order; the index is ignored.\n     *\n     * @since extensions-lib 1.5\n     * @param chapter the chapter.\n     * @return the pages for the chapter.\n     */\n    @Suppress(\"DEPRECATION\")\n    suspend fun getPageList(chapter: SChapter): List<Page> {\n        return fetchPageList(chapter).awaitSingle()\n    }\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getMangaDetails\"),\n    )\n    fun fetchMangaDetails(manga: SManga): Observable<SManga> =\n        throw IllegalStateException(\"Not used\")\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getChapterList\"),\n    )\n    fun fetchChapterList(manga: SManga): Observable<List<SChapter>> =\n        throw IllegalStateException(\"Not used\")\n\n    @Deprecated(\n        \"Use the non-RxJava API instead\",\n        ReplaceWith(\"getPageList\"),\n    )\n    fun fetchPageList(chapter: SChapter): Observable<List<Page>> =\n        throw IllegalStateException(\"Not used\")\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/PreferenceScreen.kt",
    "content": "package eu.kanade.tachiyomi.source\n\nexpect class PreferenceScreen\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/SourceFactory.kt",
    "content": "package eu.kanade.tachiyomi.source\n\n/**\n * A factory for creating sources at runtime.\n */\ninterface SourceFactory {\n    /**\n     * Create a new copy of the sources\n     * @return The created sources\n     */\n    fun createSources(): List<MangaSource>\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/UnmeteredSource.kt",
    "content": "package eu.kanade.tachiyomi.source\n\n/**\n * A source that explicitly doesn't require traffic considerations.\n *\n * This typically applies for self-hosted sources.\n */\ninterface UnmeteredSource\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/Filter.kt",
    "content": "package eu.kanade.tachiyomi.source.model\n\nsealed class Filter<T>(val name: String, var state: T) {\n    open class Header(name: String) : Filter<Any>(name, 0)\n    open class Separator(name: String = \"\") : Filter<Any>(name, 0)\n    abstract class Select<V>(name: String, val values: Array<V>, state: Int = 0) : Filter<Int>(\n        name,\n        state,\n    )\n    abstract class Text(name: String, state: String = \"\") : Filter<String>(name, state)\n    abstract class CheckBox(name: String, state: Boolean = false) : Filter<Boolean>(name, state)\n    abstract class TriState(name: String, state: Int = STATE_IGNORE) : Filter<Int>(name, state) {\n        fun isIgnored() = state == STATE_IGNORE\n        fun isIncluded() = state == STATE_INCLUDE\n        fun isExcluded() = state == STATE_EXCLUDE\n\n        companion object {\n            const val STATE_IGNORE = 0\n            const val STATE_INCLUDE = 1\n            const val STATE_EXCLUDE = 2\n        }\n    }\n\n    abstract class Group<V>(name: String, state: List<V>) : Filter<List<V>>(name, state)\n\n    abstract class Sort(name: String, val values: Array<String>, state: Selection? = null) :\n        Filter<Sort.Selection?>(name, state) {\n        data class Selection(val index: Int, val ascending: Boolean)\n    }\n\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other !is Filter<*>) return false\n\n        return name == other.name && state == other.state\n    }\n\n    override fun hashCode(): Int {\n        var result = name.hashCode()\n        result = 31 * result + (state?.hashCode() ?: 0)\n        return result\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/FilterList.kt",
    "content": "package eu.kanade.tachiyomi.source.model\n\nimport androidx.compose.runtime.Stable\n\n@Stable\ndata class FilterList(val list: List<Filter<*>>) : List<Filter<*>> by list {\n\n    constructor(vararg fs: Filter<*>) : this(if (fs.isNotEmpty()) fs.asList() else emptyList())\n\n    override fun equals(other: Any?): Boolean {\n        return false\n    }\n\n    override fun hashCode(): Int {\n        return list.hashCode()\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/MangasPage.kt",
    "content": "package eu.kanade.tachiyomi.source.model\n\ndata class MangasPage(val mangas: List<SManga>, val hasNextPage: Boolean)\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/Page.kt",
    "content": "package eu.kanade.tachiyomi.source.model\n\nimport android.net.Uri\nimport eu.kanade.tachiyomi.network.ProgressListener\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.Transient\n\n@Serializable\nopen class Page(\n    val index: Int,\n    val url: String = \"\",\n    var imageUrl: String? = null,\n    @Transient var uri: Uri? = null, // Deprecated but can't be deleted due to extensions\n) : ProgressListener {\n\n    val number: Int\n        get() = index + 1\n\n    @Transient\n    private val _statusFlow = MutableStateFlow(State.QUEUE)\n\n    @Transient\n    val statusFlow = _statusFlow.asStateFlow()\n    var status: State\n        get() = _statusFlow.value\n        set(value) {\n            _statusFlow.value = value\n        }\n\n    @Transient\n    private val _progressFlow = MutableStateFlow(0)\n\n    @Transient\n    val progressFlow = _progressFlow.asStateFlow()\n    var progress: Int\n        get() = _progressFlow.value\n        set(value) {\n            _progressFlow.value = value\n        }\n\n    override fun update(bytesRead: Long, contentLength: Long, done: Boolean) {\n        progress = if (contentLength > 0) {\n            (100 * bytesRead / contentLength).toInt()\n        } else {\n            -1\n        }\n    }\n\n    enum class State {\n        QUEUE,\n        LOAD_PAGE,\n        DOWNLOAD_IMAGE,\n        READY,\n        ERROR,\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SChapter.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.source.model\n\nimport java.io.Serializable\n\ninterface SChapter : Serializable {\n\n    var url: String\n\n    var name: String\n\n    var date_upload: Long\n\n    var chapter_number: Float\n\n    var scanlator: String?\n\n    fun copyFrom(other: SChapter) {\n        name = other.name\n        url = other.url\n        date_upload = other.date_upload\n        chapter_number = other.chapter_number\n        scanlator = other.scanlator\n    }\n\n    companion object {\n        fun create(): SChapter {\n            return SChapterImpl()\n        }\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SChapterImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.source.model\n\nclass SChapterImpl : SChapter {\n\n    override lateinit var url: String\n\n    override lateinit var name: String\n\n    override var date_upload: Long = 0\n\n    override var chapter_number: Float = -1f\n\n    override var scanlator: String? = null\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SManga.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.source.model\n\nimport java.io.Serializable\n\ninterface SManga : Serializable {\n\n    var url: String\n\n    var title: String\n\n    var artist: String?\n\n    var author: String?\n\n    var description: String?\n\n    var genre: String?\n\n    var status: Int\n\n    var thumbnail_url: String?\n\n    var update_strategy: UpdateStrategy\n\n    var initialized: Boolean\n\n    fun getGenres(): List<String>? {\n        if (genre.isNullOrBlank()) return null\n        return genre?.split(\", \")?.map { it.trim() }?.filterNot { it.isBlank() }?.distinct()\n    }\n\n    fun copy() = create().also {\n        it.url = url\n        it.title = title\n        it.artist = artist\n        it.author = author\n        it.description = description\n        it.genre = genre\n        it.status = status\n        it.thumbnail_url = thumbnail_url\n        it.update_strategy = update_strategy\n        it.initialized = initialized\n    }\n\n    companion object {\n        const val UNKNOWN = 0\n        const val ONGOING = 1\n        const val COMPLETED = 2\n        const val LICENSED = 3\n        const val PUBLISHING_FINISHED = 4\n        const val CANCELLED = 5\n        const val ON_HIATUS = 6\n\n        fun create(): SManga {\n            return SMangaImpl()\n        }\n    }\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/SMangaImpl.kt",
    "content": "@file:Suppress(\"PropertyName\")\n\npackage eu.kanade.tachiyomi.source.model\n\nclass SMangaImpl : SManga {\n\n    override lateinit var url: String\n\n    override lateinit var title: String\n\n    override var artist: String? = null\n\n    override var author: String? = null\n\n    override var description: String? = null\n\n    override var genre: String? = null\n\n    override var status: Int = 0\n\n    override var thumbnail_url: String? = null\n\n    override var update_strategy: UpdateStrategy = UpdateStrategy.ALWAYS_UPDATE\n\n    override var initialized: Boolean = false\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/model/UpdateStrategy.kt",
    "content": "package eu.kanade.tachiyomi.source.model\n\n/**\n * Define the update strategy for a single SManga or SAnime.\n * The strategy used will only take effect on the library update.\n *\n * @since extensions-lib 1.4\n */\n@Suppress(\"UNUSED\")\nenum class UpdateStrategy {\n    /**\n     * Series marked as always update will be included in the library\n     * update if they aren't excluded by additional restrictions.\n     */\n    ALWAYS_UPDATE,\n\n    /**\n     * Series marked as only fetch once will be automatically skipped\n     * during library updates. Useful for cases where the series is previously\n     * known to be finished and have only a single chapter, for example.\n     */\n    ONLY_FETCH_ONCE,\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/HttpSource.kt",
    "content": "package eu.kanade.tachiyomi.source.online\n\nimport eu.kanade.tachiyomi.network.GET\nimport eu.kanade.tachiyomi.network.NetworkHelper\nimport eu.kanade.tachiyomi.network.asObservableSuccess\nimport eu.kanade.tachiyomi.network.awaitSuccess\nimport eu.kanade.tachiyomi.network.newCachelessCallWithProgress\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.source.model.MangasPage\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\nimport okhttp3.Headers\nimport okhttp3.OkHttpClient\nimport okhttp3.Request\nimport okhttp3.Response\nimport rx.Observable\nimport tachiyomi.core.common.util.lang.awaitSingle\nimport uy.kohesive.injekt.injectLazy\nimport java.net.URI\nimport java.net.URISyntaxException\nimport java.security.MessageDigest\n\n/**\n * A simple implementation for sources from a website.\n */\n@Suppress(\"unused\")\nabstract class HttpSource : CatalogueSource {\n\n    /**\n     * Network service.\n     */\n    protected val network: NetworkHelper by injectLazy()\n\n    /**\n     * Base url of the website without the trailing slash, like: http://mysite.com\n     */\n    abstract val baseUrl: String\n\n    /**\n     * Version id used to generate the source id. If the site completely changes and urls are\n     * incompatible, you may increase this value and it'll be considered as a new source.\n     */\n    open val versionId = 1\n\n    /**\n     * ID of the source. By default it uses a generated id using the first 16 characters (64 bits)\n     * of the MD5 of the string `\"${name.lowercase()}/$lang/$versionId\"`.\n     *\n     * The ID is generated by the [generateId] function, which can be reused if needed\n     * to generate outdated IDs for cases where the source name or language needs to\n     * be changed but migrations can be avoided.\n     *\n     * Note: the generated ID sets the sign bit to `0`.\n     */\n    override val id by lazy { generateId(name, lang, versionId) }\n\n    /**\n     * Headers used for requests.\n     */\n    val headers: Headers by lazy { headersBuilder().build() }\n\n    /**\n     * Default network client for doing requests.\n     */\n    open val client: OkHttpClient\n        get() = network.client\n\n    /**\n     * Generates a unique ID for the source based on the provided [name], [lang] and\n     * [versionId]. It will use the first 16 characters (64 bits) of the MD5 of the string\n     * `\"${name.lowercase()}/$lang/$versionId\"`.\n     *\n     * Note: the generated ID sets the sign bit to `0`.\n     *\n     * Can be used to generate outdated IDs, such as when the source name or language\n     * needs to be changed but migrations can be avoided.\n     *\n     * @since extensions-lib 1.5\n     * @param name [String] the name of the source\n     * @param lang [String] the language of the source\n     * @param versionId [Int] the version ID of the source\n     * @return a unique ID for the source\n     */\n    @Suppress(\"MemberVisibilityCanBePrivate\")\n    protected fun generateId(name: String, lang: String, versionId: Int): Long {\n        val key = \"${name.lowercase()}/$lang/$versionId\"\n        val bytes = MessageDigest.getInstance(\"MD5\").digest(key.toByteArray())\n        return (0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE\n    }\n\n    /**\n     * Headers builder for requests. Implementations can override this method for custom headers.\n     */\n    protected open fun headersBuilder() = Headers.Builder().apply {\n        add(\"User-Agent\", network.defaultUserAgentProvider())\n    }\n\n    /**\n     * Visible name of the source.\n     */\n    override fun toString() = \"$name (${lang.uppercase()})\"\n\n    /**\n     * Returns an observable containing a page with a list of manga. Normally it's not needed to\n     * override this method.\n     *\n     * @param page the page number to retrieve.\n     */\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getPopularManga\"))\n    override fun fetchPopularManga(page: Int): Observable<MangasPage> {\n        return client.newCall(popularMangaRequest(page))\n            .asObservableSuccess()\n            .map { response ->\n                popularMangaParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for the popular manga given the page.\n     *\n     * @param page the page number to retrieve.\n     */\n    protected abstract fun popularMangaRequest(page: Int): Request\n\n    /**\n     * Parses the response from the site and returns a [MangasPage] object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun popularMangaParse(response: Response): MangasPage\n\n    /**\n     * Returns an observable containing a page with a list of manga. Normally it's not needed to\n     * override this method.\n     *\n     * @param page the page number to retrieve.\n     * @param query the search query.\n     * @param filters the list of filters to apply.\n     */\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getSearchManga\"))\n    override fun fetchSearchManga(\n        page: Int,\n        query: String,\n        filters: FilterList,\n    ): Observable<MangasPage> {\n        return Observable.defer {\n            try {\n                client.newCall(searchMangaRequest(page, query, filters)).asObservableSuccess()\n            } catch (e: NoClassDefFoundError) {\n                // RxJava doesn't handle Errors, which tends to happen during global searches\n                // if an old extension using non-existent classes is still around\n                throw RuntimeException(e)\n            }\n        }\n            .map { response ->\n                searchMangaParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for the search manga given the page.\n     *\n     * @param page the page number to retrieve.\n     * @param query the search query.\n     * @param filters the list of filters to apply.\n     */\n    protected abstract fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request\n\n    /**\n     * Parses the response from the site and returns a [MangasPage] object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun searchMangaParse(response: Response): MangasPage\n\n    /**\n     * Returns an observable containing a page with a list of latest manga updates.\n     *\n     * @param page the page number to retrieve.\n     */\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getLatestUpdates\"))\n    override fun fetchLatestUpdates(page: Int): Observable<MangasPage> {\n        return client.newCall(latestUpdatesRequest(page))\n            .asObservableSuccess()\n            .map { response ->\n                latestUpdatesParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for latest manga given the page.\n     *\n     * @param page the page number to retrieve.\n     */\n    protected abstract fun latestUpdatesRequest(page: Int): Request\n\n    /**\n     * Parses the response from the site and returns a [MangasPage] object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun latestUpdatesParse(response: Response): MangasPage\n\n    /**\n     * Get the updated details for a manga.\n     * Normally it's not needed to override this method.\n     *\n     * @param manga the manga to be updated.\n     * @return the updated manga.\n     */\n    @Suppress(\"DEPRECATION\")\n    override suspend fun getMangaDetails(manga: SManga): SManga {\n        return fetchMangaDetails(manga).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getMangaDetails\"))\n    override fun fetchMangaDetails(manga: SManga): Observable<SManga> {\n        return client.newCall(mangaDetailsRequest(manga))\n            .asObservableSuccess()\n            .map { response ->\n                mangaDetailsParse(response).apply { initialized = true }\n            }\n    }\n\n    /**\n     * Returns the request for the details of a manga. Override only if it's needed to change the\n     * url, send different headers or request method like POST.\n     *\n     * @param manga the manga to be updated.\n     */\n    open fun mangaDetailsRequest(manga: SManga): Request {\n        return GET(baseUrl + manga.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns the details of a manga.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun mangaDetailsParse(response: Response): SManga\n\n    /**\n     * Get all the available chapters for a manga.\n     * Normally it's not needed to override this method.\n     *\n     * @param manga the manga to update.\n     * @return the chapters for the manga.\n     */\n    @Suppress(\"DEPRECATION\")\n    override suspend fun getChapterList(manga: SManga): List<SChapter> {\n        return fetchChapterList(manga).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getChapterList\"))\n    override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {\n        return client.newCall(chapterListRequest(manga))\n            .asObservableSuccess()\n            .map { response ->\n                chapterListParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for updating the chapter list. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @param manga the manga to look for chapters.\n     */\n    protected open fun chapterListRequest(manga: SManga): Request {\n        return GET(baseUrl + manga.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns a list of chapters.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun chapterListParse(response: Response): List<SChapter>\n\n    /**\n     * Parses the response from the site and returns a SChapter Object.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun chapterPageParse(response: Response): SChapter\n\n    /**\n     * Get the list of pages a chapter has. Pages should be returned\n     * in the expected order; the index is ignored.\n     *\n     * @param chapter the chapter.\n     * @return the pages for the chapter.\n     */\n    @Suppress(\"DEPRECATION\")\n    override suspend fun getPageList(chapter: SChapter): List<Page> {\n        return fetchPageList(chapter).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getPageList\"))\n    override fun fetchPageList(chapter: SChapter): Observable<List<Page>> {\n        return client.newCall(pageListRequest(chapter))\n            .asObservableSuccess()\n            .map { response ->\n                pageListParse(response)\n            }\n    }\n\n    /**\n     * Returns the request for getting the page list. Override only if it's needed to override the\n     * url, send different headers or request method like POST.\n     *\n     * @param chapter the chapter whose page list has to be fetched.\n     */\n    protected open fun pageListRequest(chapter: SChapter): Request {\n        return GET(baseUrl + chapter.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns a list of pages.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun pageListParse(response: Response): List<Page>\n\n    /**\n     * Returns an observable with the page containing the source url of the image. If there's any\n     * error, it will return null instead of throwing an exception.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page whose source image has to be fetched.\n     */\n    @Suppress(\"DEPRECATION\")\n    open suspend fun getImageUrl(page: Page): String {\n        return fetchImageUrl(page).awaitSingle()\n    }\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getImageUrl\"))\n    open fun fetchImageUrl(page: Page): Observable<String> {\n        return client.newCall(imageUrlRequest(page))\n            .asObservableSuccess()\n            .map { imageUrlParse(it) }\n    }\n\n    /**\n     * Returns the request for getting the url to the source image. Override only if it's needed to\n     * override the url, send different headers or request method like POST.\n     *\n     * @param page the chapter whose page list has to be fetched\n     */\n    protected open fun imageUrlRequest(page: Page): Request {\n        return GET(page.url, headers)\n    }\n\n    /**\n     * Parses the response from the site and returns the absolute url to the source image.\n     *\n     * @param response the response from the site.\n     */\n    protected abstract fun imageUrlParse(response: Response): String\n\n    /**\n     * Returns the response of the source image.\n     * Typically does not need to be overridden.\n     *\n     * @since extensions-lib 1.5\n     * @param page the page whose source image has to be downloaded.\n     */\n    open suspend fun getImage(page: Page): Response {\n        return client.newCachelessCallWithProgress(imageRequest(page), page)\n            .awaitSuccess()\n    }\n\n    /**\n     * Returns the request for getting the source image. Override only if it's needed to override\n     * the url, send different headers or request method like POST.\n     *\n     * @param page the chapter whose page list has to be fetched\n     */\n    protected open fun imageRequest(page: Page): Request {\n        return GET(page.imageUrl!!, headers)\n    }\n\n    /**\n     * Assigns the url of the chapter without the scheme and domain. It saves some redundancy from\n     * database and the urls could still work after a domain change.\n     *\n     * @param url the full url to the chapter.\n     */\n    fun SChapter.setUrlWithoutDomain(url: String) {\n        this.url = getUrlWithoutDomain(url)\n    }\n\n    /**\n     * Assigns the url of the manga without the scheme and domain. It saves some redundancy from\n     * database and the urls could still work after a domain change.\n     *\n     * @param url the full url to the manga.\n     */\n    fun SManga.setUrlWithoutDomain(url: String) {\n        this.url = getUrlWithoutDomain(url)\n    }\n\n    /**\n     * Returns the url of the given string without the scheme and domain.\n     *\n     * @param orig the full url.\n     */\n    private fun getUrlWithoutDomain(orig: String): String {\n        return try {\n            val uri = URI(orig.replace(\" \", \"%20\"))\n            var out = uri.path\n            if (uri.query != null) {\n                out += \"?\" + uri.query\n            }\n            if (uri.fragment != null) {\n                out += \"#\" + uri.fragment\n            }\n            out\n        } catch (e: URISyntaxException) {\n            orig\n        }\n    }\n\n    /**\n     * Returns the url of the provided manga\n     *\n     * @since extensions-lib 1.4\n     * @param manga the manga\n     * @return url of the manga\n     */\n    open fun getMangaUrl(manga: SManga): String {\n        return mangaDetailsRequest(manga).url.toString()\n    }\n\n    /**\n     * Returns the url of the provided chapter\n     *\n     * @since extensions-lib 1.4\n     * @param chapter the chapter\n     * @return url of the chapter\n     */\n    open fun getChapterUrl(chapter: SChapter): String {\n        return pageListRequest(chapter).url.toString()\n    }\n\n    /**\n     * Called before inserting a new chapter into database. Use it if you need to override chapter\n     * fields, like the title or the chapter number. Do not change anything to [manga].\n     *\n     * @param chapter the chapter to be added.\n     * @param manga the manga of the chapter.\n     */\n    open fun prepareNewChapter(chapter: SChapter, manga: SManga) {}\n\n    /**\n     * Returns the list of filters for the source.\n     */\n    override fun getFilterList() = FilterList()\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/ParsedHttpSource.kt",
    "content": "package eu.kanade.tachiyomi.source.online\n\nimport eu.kanade.tachiyomi.source.model.MangasPage\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.util.asJsoup\nimport okhttp3.Response\nimport org.jsoup.nodes.Document\nimport org.jsoup.nodes.Element\n\n/**\n * A simple implementation for sources from a website using Jsoup, an HTML parser.\n */\n@Suppress(\"unused\")\nabstract class ParsedHttpSource : HttpSource() {\n\n    /**\n     * Parses the response from the site and returns a [MangasPage] object.\n     *\n     * @param response the response from the site.\n     */\n    override fun popularMangaParse(response: Response): MangasPage {\n        val document = response.asJsoup()\n\n        val mangas = document.select(popularMangaSelector()).map { element ->\n            popularMangaFromElement(element)\n        }\n\n        val hasNextPage = popularMangaNextPageSelector()?.let { selector ->\n            document.select(selector).first()\n        } != null\n\n        return MangasPage(mangas, hasNextPage)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each manga.\n     */\n    protected abstract fun popularMangaSelector(): String\n\n    /**\n     * Returns a manga from the given [element]. Most sites only show the title and the url, it's\n     * totally fine to fill only those two values.\n     *\n     * @param element an element obtained from [popularMangaSelector].\n     */\n    protected abstract fun popularMangaFromElement(element: Element): SManga\n\n    /**\n     * Returns the Jsoup selector that returns the <a> tag linking to the next page, or null if\n     * there's no next page.\n     */\n    protected abstract fun popularMangaNextPageSelector(): String?\n\n    /**\n     * Parses the response from the site and returns a [MangasPage] object.\n     *\n     * @param response the response from the site.\n     */\n    override fun searchMangaParse(response: Response): MangasPage {\n        val document = response.asJsoup()\n\n        val mangas = document.select(searchMangaSelector()).map { element ->\n            searchMangaFromElement(element)\n        }\n\n        val hasNextPage = searchMangaNextPageSelector()?.let { selector ->\n            document.select(selector).first()\n        } != null\n\n        return MangasPage(mangas, hasNextPage)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each manga.\n     */\n    protected abstract fun searchMangaSelector(): String\n\n    /**\n     * Returns a manga from the given [element]. Most sites only show the title and the url, it's\n     * totally fine to fill only those two values.\n     *\n     * @param element an element obtained from [searchMangaSelector].\n     */\n    protected abstract fun searchMangaFromElement(element: Element): SManga\n\n    /**\n     * Returns the Jsoup selector that returns the <a> tag linking to the next page, or null if\n     * there's no next page.\n     */\n    protected abstract fun searchMangaNextPageSelector(): String?\n\n    /**\n     * Parses the response from the site and returns a [MangasPage] object.\n     *\n     * @param response the response from the site.\n     */\n    override fun latestUpdatesParse(response: Response): MangasPage {\n        val document = response.asJsoup()\n\n        val mangas = document.select(latestUpdatesSelector()).map { element ->\n            latestUpdatesFromElement(element)\n        }\n\n        val hasNextPage = latestUpdatesNextPageSelector()?.let { selector ->\n            document.select(selector).first()\n        } != null\n\n        return MangasPage(mangas, hasNextPage)\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each manga.\n     */\n    protected abstract fun latestUpdatesSelector(): String\n\n    /**\n     * Returns a manga from the given [element]. Most sites only show the title and the url, it's\n     * totally fine to fill only those two values.\n     *\n     * @param element an element obtained from [latestUpdatesSelector].\n     */\n    protected abstract fun latestUpdatesFromElement(element: Element): SManga\n\n    /**\n     * Returns the Jsoup selector that returns the <a> tag linking to the next page, or null if\n     * there's no next page.\n     */\n    protected abstract fun latestUpdatesNextPageSelector(): String?\n\n    /**\n     * Parses the response from the site and returns the details of a manga.\n     *\n     * @param response the response from the site.\n     */\n    override fun mangaDetailsParse(response: Response): SManga {\n        return mangaDetailsParse(response.asJsoup())\n    }\n\n    /**\n     * Returns the details of the manga from the given [document].\n     *\n     * @param document the parsed document.\n     */\n    protected abstract fun mangaDetailsParse(document: Document): SManga\n\n    /**\n     * Parses the response from the site and returns a list of chapters.\n     *\n     * @param response the response from the site.\n     */\n    override fun chapterListParse(response: Response): List<SChapter> {\n        val document = response.asJsoup()\n        return document.select(chapterListSelector()).map { chapterFromElement(it) }\n    }\n\n    /**\n     * Returns the Jsoup selector that returns a list of [Element] corresponding to each chapter.\n     */\n    protected abstract fun chapterListSelector(): String\n\n    /**\n     * Returns a chapter from the given element.\n     *\n     * @param element an element obtained from [chapterListSelector].\n     */\n    protected abstract fun chapterFromElement(element: Element): SChapter\n\n    /**\n     * Parses the response from the site and returns the page list.\n     *\n     * @param response the response from the site.\n     */\n    override fun pageListParse(response: Response): List<Page> {\n        return pageListParse(response.asJsoup())\n    }\n\n    /**\n     * Returns a page list from the given document.\n     *\n     * @param document the parsed document.\n     */\n    protected abstract fun pageListParse(document: Document): List<Page>\n\n    /**\n     * Parse the response from the site and returns the absolute url to the source image.\n     *\n     * @param response the response from the site.\n     */\n    override fun imageUrlParse(response: Response): String {\n        return imageUrlParse(response.asJsoup())\n    }\n\n    /**\n     * Returns the absolute url to the source image from the document.\n     *\n     * @param document the parsed document.\n     */\n    protected abstract fun imageUrlParse(document: Document): String\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/source/online/ResolvableSource.kt",
    "content": "package eu.kanade.tachiyomi.source.online\n\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\n\n/**\n * A source that may handle opening an SManga or SChapter for a given URI.\n *\n * @since extensions-lib 1.5\n */\ninterface ResolvableSource : MangaSource {\n\n    /**\n     * Returns what the given URI may open.\n     * Returns [UriType.Unknown] if the source is not able to resolve the URI.\n     *\n     * @since extensions-lib 1.5\n     */\n    fun getUriType(uri: String): UriType\n\n    /**\n     * Called if [getUriType] is [UriType.Manga].\n     * Returns the corresponding SManga, if possible.\n     *\n     * @since extensions-lib 1.5\n     */\n    suspend fun getManga(uri: String): SManga?\n\n    /**\n     * Called if [getUriType] is [UriType.Chapter].\n     * Returns the corresponding SChapter, if possible.\n     *\n     * @since extensions-lib 1.5\n     */\n    suspend fun getChapter(uri: String): SChapter?\n}\n\nsealed interface UriType {\n    data object Manga : UriType\n    data object Chapter : UriType\n    data object Unknown : UriType\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/util/JsonExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport kotlinx.serialization.json.Json\nimport uy.kohesive.injekt.Injekt\nimport uy.kohesive.injekt.api.get\n\n/**\n * App provided default [Json] instance. Configured as\n * ```\n * Json {\n *     ignoreUnknownKeys = true\n *     explicitNulls = false\n * }\n * ```\n *\n * @since extensions-lib 16\n */\nval defaultJson: Json = Injekt.get<Json>()\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/util/JsoupExtensions.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport okhttp3.Response\nimport org.jsoup.Jsoup\nimport org.jsoup.nodes.Document\nimport org.jsoup.nodes.Element\n\nfun Element.selectText(css: String, defaultValue: String? = null): String? {\n    return select(css).first()?.text() ?: defaultValue\n}\n\nfun Element.selectInt(css: String, defaultValue: Int = 0): Int {\n    return select(css).first()?.text()?.toInt() ?: defaultValue\n}\n\nfun Element.attrOrText(css: String): String {\n    return if (css != \"text\") attr(css) else text()\n}\n\n/**\n * Returns a Jsoup document for this response.\n * @param html the body of the response. Use only if the body was read before calling this method.\n */\nfun Response.asJsoup(html: String? = null): Document {\n    return Jsoup.parse(html ?: body.string(), request.url.toString())\n}\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/util/RxExtension.kt",
    "content": "package eu.kanade.tachiyomi.util\n\nimport rx.Observable\n\nexpect suspend fun <T> Observable<T>.awaitSingle(): T\n"
  },
  {
    "path": "source-api/src/commonMain/kotlin/eu/kanade/tachiyomi/util/VideoInfo.kt",
    "content": "\nsealed class Video\n\ndata class VideoUrl(val url: String) : Video()\n"
  },
  {
    "path": "source-local/build.gradle.kts",
    "content": "import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi\n\nplugins {\n    id(\"mihon.library\")\n    kotlin(\"multiplatform\")\n}\n\nkotlin {\n    androidTarget()\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                implementation(projects.sourceApi)\n                api(projects.i18n)\n                api(projects.i18nAniyomi)\n\n                implementation(libs.unifile)\n            }\n        }\n        val androidMain by getting {\n            dependencies {\n                implementation(projects.core.archive)\n                implementation(projects.core.common)\n                implementation(projects.coreMetadata)\n\n                // Move ChapterRecognition to separate module?\n                implementation(projects.domain)\n\n                implementation(kotlinx.bundles.serialization)\n            }\n        }\n    }\n\n    @OptIn(ExperimentalKotlinGradlePluginApi::class)\n    compilerOptions {\n        freeCompilerArgs.addAll(\n            \"-Xexpect-actual-classes\",\n            \"-opt-in=kotlinx.serialization.ExperimentalSerializationApi\",\n        )\n    }\n}\n\nandroid {\n    namespace = \"tachiyomi.source.local\"\n\n    defaultConfig {\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n\n    dependencies {\n        // FFmpeg-kit\n        implementation(aniyomilibs.ffmpeg.kit)\n    }\n}\n"
  },
  {
    "path": "source-local/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "source-local/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "source-local/src/androidMain/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeFetchTypeManager.kt",
    "content": "package tachiyomi.source.local.entries.anime\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.animesource.model.FetchType\nimport tachiyomi.source.local.io.ArchiveAnime\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\n\nactual class LocalAnimeFetchTypeManager(\n    private val context: Context,\n    private val fileSystem: LocalAnimeSourceFileSystem,\n) {\n    actual fun find(animeUrl: String): FetchType {\n        val files = fileSystem.getFilesInAnimeDirectory(animeUrl)\n\n        return when {\n            files.any { ArchiveAnime.isSupported(it) } -> FetchType.Episodes\n            files.any { it.isDirectory } -> FetchType.Seasons\n            else -> FetchType.Episodes\n        }\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeSource.kt",
    "content": "package tachiyomi.source.local.entries.anime\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\nimport eu.kanade.tachiyomi.animesource.AnimeSource\nimport eu.kanade.tachiyomi.animesource.UnmeteredSource\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilterList\nimport eu.kanade.tachiyomi.animesource.model.AnimesPage\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.animesource.model.Video\nimport eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder\nimport eu.kanade.tachiyomi.util.storage.toFFmpegString\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.decodeFromStream\nimport logcat.LogPriority\nimport rx.Observable\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.core.metadata.tachiyomi.AnimeDetails\nimport tachiyomi.core.metadata.tachiyomi.EpisodeDetails\nimport tachiyomi.domain.entries.anime.model.Anime\nimport tachiyomi.domain.items.episode.service.EpisodeRecognition\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.source.local.filter.anime.AnimeOrderBy\nimport tachiyomi.source.local.image.anime.LocalAnimeBackgroundManager\nimport tachiyomi.source.local.image.anime.LocalAnimeCoverManager\nimport tachiyomi.source.local.image.anime.LocalEpisodeThumbnailManager\nimport tachiyomi.source.local.io.ArchiveAnime\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport uy.kohesive.injekt.injectLazy\nimport java.io.File\nimport java.io.InputStream\nimport java.text.SimpleDateFormat\nimport java.util.Locale\nimport java.util.concurrent.TimeUnit\nimport kotlin.math.abs\n\nactual class LocalAnimeSource(\n    private val context: Context,\n    private val fileSystem: LocalAnimeSourceFileSystem,\n    private val coverManager: LocalAnimeCoverManager,\n    private val backgroundManager: LocalAnimeBackgroundManager,\n    private val thumbnailManager: LocalEpisodeThumbnailManager,\n    private val fetchTypeManager: LocalAnimeFetchTypeManager,\n) : AnimeCatalogueSource, UnmeteredSource {\n\n    private val json: Json by injectLazy()\n\n    @Suppress(\"PrivatePropertyName\")\n    private val PopularFilters = AnimeFilterList(AnimeOrderBy.Popular(context))\n\n    @Suppress(\"PrivatePropertyName\")\n    private val LatestFilters = AnimeFilterList(AnimeOrderBy.Latest(context))\n\n    override val name = context.stringResource(AYMR.strings.local_anime_source)\n\n    override val id: Long = ID\n\n    override val lang = \"other\"\n\n    override fun toString() = name\n\n    override val supportsLatest = true\n\n    // Browse related\n    override suspend fun getPopularAnime(page: Int) = getSearchAnime(page, \"\", PopularFilters)\n\n    override suspend fun getLatestUpdates(page: Int) = getSearchAnime(page, \"\", LatestFilters)\n\n    override suspend fun getSearchAnime(\n        page: Int,\n        query: String,\n        filters: AnimeFilterList,\n    ): AnimesPage = withIOContext {\n        val lastModifiedLimit = if (filters === LatestFilters) {\n            System.currentTimeMillis() - LATEST_THRESHOLD\n        } else {\n            0L\n        }\n\n        var animeDirs = fileSystem.getFilesInBaseDirectory()\n            // Filter out files that are hidden and is not a folder\n            .filter { it.isDirectory && !it.name.orEmpty().startsWith('.') }\n            .distinctBy { it.name }\n            .filter {\n                if (lastModifiedLimit == 0L && query.isBlank()) {\n                    true\n                } else if (lastModifiedLimit == 0L) {\n                    it.name.orEmpty().contains(query, ignoreCase = true)\n                } else {\n                    it.lastModified() >= lastModifiedLimit\n                }\n            }\n\n        filters.forEach { filter ->\n            when (filter) {\n                is AnimeOrderBy.Popular -> {\n                    animeDirs = if (filter.state!!.ascending) {\n                        animeDirs.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name.orEmpty() })\n                    } else {\n                        animeDirs.sortedWith(\n                            compareByDescending(String.CASE_INSENSITIVE_ORDER) { it.name.orEmpty() },\n                        )\n                    }\n                }\n                is AnimeOrderBy.Latest -> {\n                    animeDirs = if (filter.state!!.ascending) {\n                        animeDirs.sortedBy(UniFile::lastModified)\n                    } else {\n                        animeDirs.sortedByDescending(UniFile::lastModified)\n                    }\n                }\n                else -> {\n                    /* Do nothing */\n                }\n            }\n        }\n\n        // Transform animeDirs to list of SAnime\n        val animes = animeDirs\n            .map { animeDir ->\n                async {\n                    getSAnime(animeDir.name)\n                }\n            }\n            .awaitAll()\n\n        AnimesPage(animes.toList(), false)\n    }\n\n    private fun getSAnime(animeDir: String?): SAnime {\n        return SAnime.create().apply {\n            title = animeDir.orEmpty().substringAfterLast(File.separator)\n            url = animeDir.orEmpty()\n            fetch_type = fetchTypeManager.find(animeDir.orEmpty())\n\n            // Try to find the cover\n            coverManager.find(animeDir.orEmpty())?.let {\n                thumbnail_url = it.uri.toString()\n            }\n\n            // Try to find the background\n            backgroundManager.find(animeDir.orEmpty())?.let {\n                background_url = it.uri.toString()\n            }\n        }\n    }\n\n    // Old fetch functions\n\n    // TODO: Should be replaced when Anime Extensions get to 1.15\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getPopularAnime\"))\n    override fun fetchPopularAnime(page: Int) = fetchSearchAnime(page, \"\", PopularFilters)\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getLatestUpdates\"))\n    override fun fetchLatestUpdates(page: Int) = fetchSearchAnime(page, \"\", LatestFilters)\n\n    @Deprecated(\"Use the non-RxJava API instead\", replaceWith = ReplaceWith(\"getSearchAnime\"))\n    override fun fetchSearchAnime(page: Int, query: String, filters: AnimeFilterList): Observable<AnimesPage> {\n        return runBlocking {\n            Observable.just(getSearchAnime(page, query, filters))\n        }\n    }\n\n    // Anime details related\n    override suspend fun getAnimeDetails(anime: SAnime): SAnime = withIOContext {\n        coverManager.find(anime.url)?.let {\n            anime.thumbnail_url = it.uri.toString()\n        }\n\n        backgroundManager.find(anime.url)?.let {\n            anime.background_url = it.uri.toString()\n        }\n\n        val animeDirFiles = fileSystem.getFilesInAnimeDirectory(anime.url)\n\n        animeDirFiles\n            .firstOrNull { it.extension == \"json\" && it.nameWithoutExtension == \"details\" }\n            ?.let { file ->\n                json.decodeFromStream<AnimeDetails>(file.openInputStream()).run {\n                    title?.let { anime.title = it }\n                    author?.let { anime.author = it }\n                    artist?.let { anime.artist = it }\n                    description?.let { anime.description = it }\n                    genre?.let { anime.genre = it.joinToString() }\n                    status?.let { anime.status = it }\n                }\n            }\n\n        return@withIOContext anime\n    }\n\n    // Seasons\n    override suspend fun getSeasonList(anime: SAnime): List<SAnime> = withIOContext {\n        val animeDirs = fileSystem.getFilesInAnimeDirectory(anime.url)\n            // Filter out files that are hidden and is not a folder\n            .filter { it.isDirectory && !it.name.orEmpty().startsWith('.') }\n            .distinctBy { it.name }\n\n        animeDirs\n            .map { animeDir ->\n                async {\n                    val url = animeDir.name?.let { season ->\n                        buildString {\n                            append(anime.url)\n                            append(File.separator)\n                            append(season)\n                        }\n                    }\n                    getSAnime(url)\n                }\n            }\n            .awaitAll()\n            .toList()\n    }\n\n    // Episodes\n    override suspend fun getEpisodeList(anime: SAnime): List<SEpisode> = withIOContext {\n        val episodesData = fileSystem.getFilesInAnimeDirectory(anime.url)\n            .firstOrNull {\n                it.extension == \"json\" && it.nameWithoutExtension == \"episodes\"\n            }?.let { file ->\n                json.decodeFromStream<List<EpisodeDetails>>(file.openInputStream())\n            }\n\n        val episodes = fileSystem.getFilesInAnimeDirectory(anime.url)\n            // Only keep supported formats\n            .filterNot { it.name.orEmpty().startsWith('.') }\n            .filter { ArchiveAnime.isSupported(it) }\n            .map { episodeFile ->\n                SEpisode.create().apply {\n                    url = \"${anime.url}/${episodeFile.name}\"\n                    name = episodeFile.nameWithoutExtension.orEmpty()\n                    date_upload = episodeFile.lastModified()\n\n                    val episodeNumber = EpisodeRecognition.parseEpisodeNumber(\n                        anime.title,\n                        this.name,\n                        this.episode_number.toDouble(),\n                    ).toFloat()\n                    episode_number = episodeNumber\n\n                    // Overwrite data from episodes.json file\n                    episodesData?.also { dataList ->\n                        dataList.firstOrNull { it.episode_number.equalsTo(episodeNumber) }?.also { data ->\n                            data.name?.also { name = it }\n                            data.date_upload?.also { date_upload = parseDate(it) }\n                            scanlator = data.scanlator\n                            summary = data.summary\n                        }\n                    }\n\n                    // Generate the preview from the episode if not available\n                    if (this.preview_url == null) {\n                        try {\n                            val tempFileSuffix = anime.title + this.name + DEFAULT_THUMBNAIL_NAME\n                            val updateThumbnail: (InputStream) -> Unit = { thumbnailManager.update(anime, this, it) }\n                            updateImageFromVideo(this, anime, tempFileSuffix, updateThumbnail)\n                        } catch (e: Exception) {\n                            logcat(LogPriority.ERROR) { \"Couldn't extract thumbnail from video: $e\" }\n                        }\n                    }\n                }\n            }\n            .sortedWith { e1, e2 ->\n                val e = e2.episode_number.compareTo(e1.episode_number)\n                if (e == 0) e2.name.compareToCaseInsensitiveNaturalOrder(e1.name) else e\n            }\n\n        // Generate the cover from the first episode found if not available\n        if (anime.thumbnail_url == null || coverManager.find(anime.url) == null) {\n            try {\n                episodes.lastOrNull()?.let { episode ->\n                    val tempFileSuffix = anime.title + DEFAULT_COVER_NAME\n                    val updateCover: (InputStream) -> Unit = { coverManager.update(anime, it) }\n                    updateImageFromVideo(episode, anime, tempFileSuffix, updateCover)\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR) { \"Couldn't extract cover from video: $e\" }\n            }\n        }\n\n        // Generate the background from the first episode found if not available\n        if (anime.background_url == null || backgroundManager.find(anime.url) == null) {\n            try {\n                episodes.lastOrNull()?.let { episode ->\n                    val tempFileSuffix = anime.title + DEFAULT_BACKGROUND_NAME\n                    val updateBackground: (InputStream) -> Unit = { backgroundManager.update(anime, it) }\n                    updateImageFromVideo(episode, anime, tempFileSuffix, updateBackground)\n                }\n            } catch (e: Exception) {\n                logcat(LogPriority.ERROR) { \"Couldn't extract background from video: $e\" }\n            }\n        }\n\n        episodes\n    }\n\n    private fun parseDate(isoDate: String): Long {\n        return SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss\", Locale.getDefault()).parse(isoDate)?.time ?: 0L\n    }\n\n    private fun Float.equalsTo(other: Float): Boolean {\n        return abs(this - other) < 0.0001\n    }\n\n    // Filters\n    override fun getFilterList() = AnimeFilterList(AnimeOrderBy.Popular(context))\n\n    // Unused stuff\n    override suspend fun getVideoList(episode: SEpisode): List<Video> = throw UnsupportedOperationException(\"Unused\")\n\n    private fun updateImageFromVideo(\n        episode: SEpisode,\n        anime: SAnime,\n        tempFileSuffix: String,\n        updateImage: (InputStream) -> Unit,\n    ) {\n        val tempFile = File.createTempFile(\n            \"tmp_\",\n            tempFileSuffix,\n        )\n        val outFile = tempFile.path\n\n        val episodeName = episode.url.split('/', limit = 2).last()\n        val animeDir = fileSystem.getAnimeDirectory(anime.url)!!\n        val episodeFile = animeDir.findFile(episodeName)!!\n        val episodeFilename = { episodeFile.toFFmpegString(context) }\n\n        val ffProbe = com.arthenica.ffmpegkit.FFprobeKit.execute(\n            \"-v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 \\\"${episodeFilename()}\\\"\",\n        )\n        val duration = ffProbe.allLogsAsString.trim().toFloat()\n        val second = duration.toInt() / 2\n\n        com.arthenica.ffmpegkit.FFmpegKit.execute(\n            \"-ss $second -i \\\"${episodeFilename()}\\\" -frames:v 1 -update true \\\"$outFile\\\" -y\",\n        )\n\n        if (tempFile.length() > 0L) {\n            updateImage(tempFile.inputStream())\n        }\n    }\n\n    companion object {\n        const val ID = 0L\n        const val HELP_URL = \"https://aniyomi.org/help/guides/local-anime/\"\n\n        private const val DEFAULT_COVER_NAME = \"cover.jpg\"\n        private const val DEFAULT_BACKGROUND_NAME = \"background.jpg\"\n        private const val DEFAULT_THUMBNAIL_NAME = \"thumbnail.jpg\"\n        private val LATEST_THRESHOLD = TimeUnit.MILLISECONDS.convert(7, TimeUnit.DAYS)\n    }\n}\n\nfun Anime.isLocal(): Boolean = source == LocalAnimeSource.ID\n\nfun AnimeSource.isLocal(): Boolean = id == LocalAnimeSource.ID\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/manga/LocalMangaSource.kt",
    "content": "package tachiyomi.source.local.entries.manga\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.MangaSource\nimport eu.kanade.tachiyomi.source.UnmeteredSource\nimport eu.kanade.tachiyomi.source.model.FilterList\nimport eu.kanade.tachiyomi.source.model.MangasPage\nimport eu.kanade.tachiyomi.source.model.Page\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.util.lang.compareToCaseInsensitiveNaturalOrder\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.decodeFromStream\nimport logcat.LogPriority\nimport mihon.core.archive.archiveReader\nimport mihon.core.archive.epubReader\nimport nl.adaptivity.xmlutil.core.AndroidXmlReader\nimport nl.adaptivity.xmlutil.serialization.XML\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.lang.withIOContext\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.core.common.util.system.logcat\nimport tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE\nimport tachiyomi.core.metadata.comicinfo.ComicInfo\nimport tachiyomi.core.metadata.comicinfo.copyFromComicInfo\nimport tachiyomi.core.metadata.comicinfo.getComicInfo\nimport tachiyomi.core.metadata.tachiyomi.ChapterDetails\nimport tachiyomi.core.metadata.tachiyomi.MangaDetails\nimport tachiyomi.domain.entries.manga.model.Manga\nimport tachiyomi.domain.items.chapter.service.ChapterRecognition\nimport tachiyomi.i18n.MR\nimport tachiyomi.i18n.aniyomi.AYMR\nimport tachiyomi.source.local.filter.manga.MangaOrderBy\nimport tachiyomi.source.local.image.manga.LocalMangaCoverManager\nimport tachiyomi.source.local.io.ArchiveManga\nimport tachiyomi.source.local.io.Format\nimport tachiyomi.source.local.io.manga.LocalMangaSourceFileSystem\nimport tachiyomi.source.local.metadata.fillMetadata\nimport uy.kohesive.injekt.injectLazy\nimport java.io.InputStream\nimport java.nio.charset.StandardCharsets\nimport java.text.SimpleDateFormat\nimport java.util.Locale\nimport java.util.concurrent.TimeUnit\nimport kotlin.math.abs\n\nactual class LocalMangaSource(\n    private val context: Context,\n    private val fileSystem: LocalMangaSourceFileSystem,\n    private val coverManager: LocalMangaCoverManager,\n) : CatalogueSource, UnmeteredSource {\n\n    private val json: Json by injectLazy()\n    private val xml: XML by injectLazy()\n\n    @Suppress(\"PrivatePropertyName\")\n    private val PopularFilters = FilterList(MangaOrderBy.Popular(context))\n\n    @Suppress(\"PrivatePropertyName\")\n    private val LatestFilters = FilterList(MangaOrderBy.Latest(context))\n\n    override val name: String = context.stringResource(AYMR.strings.local_manga_source)\n\n    override val id: Long = ID\n\n    override val lang: String = \"other\"\n\n    override fun toString() = name\n\n    override val supportsLatest: Boolean = true\n\n    // Browse related\n    override suspend fun getPopularManga(page: Int) = getSearchManga(page, \"\", PopularFilters)\n\n    override suspend fun getLatestUpdates(page: Int) = getSearchManga(page, \"\", LatestFilters)\n\n    override suspend fun getSearchManga(page: Int, query: String, filters: FilterList): MangasPage = withIOContext {\n        val lastModifiedLimit = if (filters === LatestFilters) {\n            System.currentTimeMillis() - LATEST_THRESHOLD\n        } else {\n            0L\n        }\n\n        var mangaDirs = fileSystem.getFilesInBaseDirectory()\n            // Filter out files that are hidden and is not a folder\n            .filter { it.isDirectory && !it.name.orEmpty().startsWith('.') }\n            .distinctBy { it.name }\n            .filter {\n                if (lastModifiedLimit == 0L && query.isBlank()) {\n                    true\n                } else if (lastModifiedLimit == 0L) {\n                    it.name.orEmpty().contains(query, ignoreCase = true)\n                } else {\n                    it.lastModified() >= lastModifiedLimit\n                }\n            }\n\n        filters.forEach { filter ->\n            when (filter) {\n                is MangaOrderBy.Popular -> {\n                    mangaDirs = if (filter.state!!.ascending) {\n                        mangaDirs.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name.orEmpty() })\n                    } else {\n                        mangaDirs.sortedWith(compareByDescending(String.CASE_INSENSITIVE_ORDER) { it.name.orEmpty() })\n                    }\n                }\n                is MangaOrderBy.Latest -> {\n                    mangaDirs = if (filter.state!!.ascending) {\n                        mangaDirs.sortedBy(UniFile::lastModified)\n                    } else {\n                        mangaDirs.sortedByDescending(UniFile::lastModified)\n                    }\n                }\n                else -> {\n                    /* Do nothing */\n                }\n            }\n        }\n\n        val mangas = mangaDirs\n            .map { mangaDir ->\n                async {\n                    SManga.create().apply {\n                        title = mangaDir.name.orEmpty()\n                        url = mangaDir.name.orEmpty()\n\n                        // Try to find the cover\n                        coverManager.find(mangaDir.name.orEmpty())?.let {\n                            thumbnail_url = it.uri.toString()\n                        }\n                    }\n                }\n            }\n            .awaitAll()\n\n        MangasPage(mangas, false)\n    }\n\n    // Manga details related\n    override suspend fun getMangaDetails(manga: SManga): SManga = withIOContext {\n        coverManager.find(manga.url)?.let {\n            manga.thumbnail_url = it.uri.toString()\n        }\n\n        // Augment manga details based on metadata files\n        try {\n            val mangaDir = fileSystem.getMangaDirectory(manga.url) ?: error(\"${manga.url} is not a valid directory\")\n            val mangaDirFiles = mangaDir.listFiles().orEmpty()\n\n            val comicInfoFile = mangaDirFiles\n                .firstOrNull { it.name == COMIC_INFO_FILE }\n            val noXmlFile = mangaDirFiles\n                .firstOrNull { it.name == \".noxml\" }\n            val legacyJsonDetailsFile = mangaDirFiles\n                .firstOrNull { it.extension == \"json\" && it.nameWithoutExtension == \"details\" }\n\n            when {\n                // Top level ComicInfo.xml\n                comicInfoFile != null -> {\n                    noXmlFile?.delete()\n                    setMangaDetailsFromComicInfoFile(comicInfoFile.openInputStream(), manga)\n                }\n\n                // Old custom JSON format\n                // TODO: remove support for this entirely after a while\n                legacyJsonDetailsFile != null -> {\n                    json.decodeFromStream<MangaDetails>(legacyJsonDetailsFile.openInputStream()).run {\n                        title?.let { manga.title = it }\n                        author?.let { manga.author = it }\n                        artist?.let { manga.artist = it }\n                        description?.let { manga.description = it }\n                        genre?.let { manga.genre = it.joinToString() }\n                        status?.let { manga.status = it }\n                    }\n                    // Replace with ComicInfo.xml file\n                    val comicInfo = manga.getComicInfo()\n                    mangaDir\n                        .createFile(COMIC_INFO_FILE)\n                        ?.openOutputStream()\n                        ?.use {\n                            val comicInfoString = xml.encodeToString(ComicInfo.serializer(), comicInfo)\n                            it.write(comicInfoString.toByteArray())\n                            legacyJsonDetailsFile.delete()\n                        }\n                }\n\n                // Copy ComicInfo.xml from chapter archive to top level if found\n                noXmlFile == null -> {\n                    val chapterArchives = mangaDirFiles.filter(ArchiveManga::isSupported)\n\n                    val copiedFile = copyComicInfoFileFromArchive(chapterArchives, mangaDir)\n                    if (copiedFile != null) {\n                        setMangaDetailsFromComicInfoFile(copiedFile.openInputStream(), manga)\n                    } else {\n                        // Avoid re-scanning\n                        mangaDir.createFile(\".noxml\")\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logcat(\n                LogPriority.ERROR,\n                e,\n            ) { \"Error setting manga details from local metadata for ${manga.title}\" }\n        }\n\n        return@withIOContext manga\n    }\n\n    private fun copyComicInfoFileFromArchive(chapterArchives: List<UniFile>, folder: UniFile): UniFile? {\n        for (chapter in chapterArchives) {\n            chapter.archiveReader(context).use { reader ->\n                reader.getInputStream(COMIC_INFO_FILE)?.use { stream ->\n                    return copyComicInfoFile(stream, folder)\n                }\n            }\n        }\n        return null\n    }\n\n    private fun copyComicInfoFile(comicInfoFileStream: InputStream, folder: UniFile): UniFile? {\n        return folder.createFile(COMIC_INFO_FILE)?.apply {\n            openOutputStream().use { outputStream ->\n                comicInfoFileStream.use { it.copyTo(outputStream) }\n            }\n        }\n    }\n\n    private fun setMangaDetailsFromComicInfoFile(stream: InputStream, manga: SManga) {\n        val comicInfo = AndroidXmlReader(stream, StandardCharsets.UTF_8.name()).use {\n            xml.decodeFromReader<ComicInfo>(it)\n        }\n\n        manga.copyFromComicInfo(comicInfo)\n    }\n\n    // Chapters\n    override suspend fun getChapterList(manga: SManga): List<SChapter> = withIOContext {\n        val chaptersData = fileSystem.getFilesInMangaDirectory(manga.url)\n            .firstOrNull {\n                it.extension == \"json\" && it.nameWithoutExtension == \"chapters\"\n            }?.let { file ->\n                runCatching {\n                    json.decodeFromStream<List<ChapterDetails>>(file.openInputStream())\n                }.getOrNull()\n            }\n\n        val chapters = fileSystem.getFilesInMangaDirectory(manga.url)\n            // Only keep supported formats\n            .filterNot { it.name.orEmpty().startsWith('.') }\n            .filter { it.isDirectory || ArchiveManga.isSupported(it) || it.extension.equals(\"epub\", true) }\n            .map { chapterFile ->\n                SChapter.create().apply {\n                    url = \"${manga.url}/${chapterFile.name}\"\n                    name = if (chapterFile.isDirectory) {\n                        chapterFile.name\n                    } else {\n                        chapterFile.nameWithoutExtension\n                    }.orEmpty()\n                    date_upload = chapterFile.lastModified()\n\n                    val chapterNumber = ChapterRecognition\n                        .parseChapterNumber(manga.title, this.name, this.chapter_number.toDouble())\n                        .toFloat()\n                    chapter_number = chapterNumber\n\n                    val format = Format.valueOf(chapterFile)\n                    if (format is Format.Epub) {\n                        format.file.epubReader(context).use { epub ->\n                            epub.fillMetadata(manga, this)\n                        }\n                    }\n\n                    // Overwrite data from chapters.json file\n                    chaptersData?.also { dataList ->\n                        dataList.firstOrNull { it.chapter_number.equalsTo(chapterNumber) }?.also { data ->\n                            data.name?.also { name = it }\n                            data.date_upload?.also { date_upload = parseDate(it) }\n                            scanlator = data.scanlator\n                        }\n                    }\n                }\n            }\n            .sortedWith { c1, c2 ->\n                val c = c2.chapter_number.compareTo(c1.chapter_number)\n                if (c == 0) c2.name.compareToCaseInsensitiveNaturalOrder(c1.name) else c\n            }\n\n        // Copy the cover from the first chapter found if not available\n        if (manga.thumbnail_url.isNullOrBlank()) {\n            chapters.lastOrNull()?.let { chapter ->\n                updateCover(chapter, manga)\n            }\n        }\n\n        chapters\n    }\n\n    private fun parseDate(isoDate: String): Long {\n        return SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss\", Locale.getDefault()).parse(isoDate)?.time ?: 0L\n    }\n\n    private fun Float.equalsTo(other: Float): Boolean {\n        return abs(this - other) < 0.0001\n    }\n\n    // Filters\n    override fun getFilterList() = FilterList(MangaOrderBy.Popular(context))\n\n    // Unused stuff\n    override suspend fun getPageList(chapter: SChapter): List<Page> = throw UnsupportedOperationException(\n        \"Unused\",\n    )\n\n    fun getFormat(chapter: SChapter): Format {\n        try {\n            val (mangaDirName, chapterName) = chapter.url.split('/', limit = 2)\n            return fileSystem.getBaseDirectory()\n                ?.findFile(mangaDirName)\n                ?.findFile(chapterName)\n                ?.let(Format.Companion::valueOf)\n                ?: throw Exception(context.stringResource(MR.strings.chapter_not_found))\n        } catch (e: Format.UnknownFormatException) {\n            throw Exception(context.stringResource(MR.strings.local_invalid_format))\n        } catch (e: Exception) {\n            throw e\n        }\n    }\n\n    private fun updateCover(chapter: SChapter, manga: SManga): UniFile? {\n        return try {\n            when (val format = getFormat(chapter)) {\n                is Format.Directory -> {\n                    val entry = format.file.listFiles()\n                        ?.sortedWith { f1, f2 ->\n                            f1.name.orEmpty().compareToCaseInsensitiveNaturalOrder(\n                                f2.name.orEmpty(),\n                            )\n                        }\n                        ?.find {\n                            !it.isDirectory && ImageUtil.isImage(it.name) { it.openInputStream() }\n                        }\n\n                    entry?.let { coverManager.update(manga, it.openInputStream()) }\n                }\n                is Format.Archive -> {\n                    format.file.archiveReader(context).use { reader ->\n                        val entry = reader.useEntries { entries ->\n                            entries\n                                .sortedWith { f1, f2 -> f1.name.compareToCaseInsensitiveNaturalOrder(f2.name) }\n                                .find { it.isFile && ImageUtil.isImage(it.name) { reader.getInputStream(it.name)!! } }\n                        }\n\n                        entry?.let { coverManager.update(manga, reader.getInputStream(it.name)!!) }\n                    }\n                }\n                is Format.Epub -> {\n                    format.file.epubReader(context).use { epub ->\n                        val entry = epub.getImagesFromPages().firstOrNull()\n\n                        entry?.let { coverManager.update(manga, epub.getInputStream(it)!!) }\n                    }\n                }\n            }\n        } catch (e: Throwable) {\n            logcat(LogPriority.ERROR, e) { \"Error updating cover for ${manga.title}\" }\n            null\n        }\n    }\n\n    companion object {\n        const val ID = 0L\n        const val HELP_URL = \"https://aniyomi.org/help/guides/local-manga/\"\n\n        private val LATEST_THRESHOLD = TimeUnit.MILLISECONDS.convert(7, TimeUnit.DAYS)\n    }\n}\n\nfun Manga.isLocal(): Boolean = source == LocalMangaSource.ID\n\nfun MangaSource.isLocal(): Boolean = id == LocalMangaSource.ID\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/anime/AnimeOrderBy.kt",
    "content": "package tachiyomi.source.local.filter.anime\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.animesource.model.AnimeFilter\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\n\nsealed class AnimeOrderBy(context: Context, selection: Selection) : AnimeFilter.Sort(\n    context.stringResource(MR.strings.local_filter_order_by),\n    arrayOf(context.stringResource(MR.strings.title), context.stringResource(MR.strings.date)),\n    selection,\n) {\n    class Popular(context: Context) : AnimeOrderBy(context, Selection(0, true))\n    class Latest(context: Context) : AnimeOrderBy(context, Selection(1, false))\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/manga/MangaOrderBy.kt",
    "content": "package tachiyomi.source.local.filter.manga\n\nimport android.content.Context\nimport eu.kanade.tachiyomi.source.model.Filter\nimport tachiyomi.core.common.i18n.stringResource\nimport tachiyomi.i18n.MR\n\nsealed class MangaOrderBy(context: Context, selection: Selection) : Filter.Sort(\n    context.stringResource(MR.strings.local_filter_order_by),\n    arrayOf(context.stringResource(MR.strings.title), context.stringResource(MR.strings.date)),\n    selection,\n) {\n    class Popular(context: Context) : MangaOrderBy(context, Selection(0, true))\n    class Latest(context: Context) : MangaOrderBy(context, Selection(1, false))\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/image/anime/LocalAnimeBackgroundManager.kt",
    "content": "package tachiyomi.source.local.image.anime\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport java.io.InputStream\n\nprivate const val DEFAULT_BACKGROUND_NAME = \"background.jpg\"\n\nactual class LocalAnimeBackgroundManager(\n    private val context: Context,\n    private val fileSystem: LocalAnimeSourceFileSystem,\n) {\n\n    actual fun find(animeUrl: String): UniFile? {\n        return fileSystem.getFilesInAnimeDirectory(animeUrl)\n            // Get all file whose names start with 'background'\n            .filter { it.isFile && it.nameWithoutExtension.equals(\"background\", ignoreCase = true) }\n            // Get the first actual image\n            .firstOrNull { ImageUtil.isImage(it.name) { it.openInputStream() } }\n    }\n\n    actual fun update(anime: SAnime, inputStream: InputStream): UniFile? {\n        val directory = fileSystem.getAnimeDirectory(anime.url)\n        if (directory == null) {\n            inputStream.close()\n            return null\n        }\n\n        val targetFile = find(anime.url) ?: directory.createFile(DEFAULT_BACKGROUND_NAME)!!\n\n        inputStream.use { input ->\n            targetFile.openOutputStream().use { output ->\n                input.copyTo(output)\n            }\n        }\n\n        DiskUtil.createNoMediaFile(directory, context)\n\n        anime.background_url = targetFile.uri.toString()\n        return targetFile\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/image/anime/LocalAnimeCoverManager.kt",
    "content": "package tachiyomi.source.local.image.anime\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport java.io.InputStream\n\nprivate const val DEFAULT_COVER_NAME = \"cover.jpg\"\n\nactual class LocalAnimeCoverManager(\n    private val context: Context,\n    private val fileSystem: LocalAnimeSourceFileSystem,\n) {\n\n    actual fun find(animeUrl: String): UniFile? {\n        return fileSystem.getFilesInAnimeDirectory(animeUrl)\n            // Get all file whose names start with 'cover'\n            .filter { it.isFile && it.nameWithoutExtension.equals(\"cover\", ignoreCase = true) }\n            // Get the first actual image\n            .firstOrNull { ImageUtil.isImage(it.name) { it.openInputStream() } }\n    }\n\n    actual fun update(anime: SAnime, inputStream: InputStream): UniFile? {\n        val directory = fileSystem.getAnimeDirectory(anime.url)\n        if (directory == null) {\n            inputStream.close()\n            return null\n        }\n\n        val targetFile = find(anime.url) ?: directory.createFile(DEFAULT_COVER_NAME)!!\n\n        inputStream.use { input ->\n            targetFile.openOutputStream().use { output ->\n                input.copyTo(output)\n            }\n        }\n\n        DiskUtil.createNoMediaFile(directory, context)\n\n        anime.thumbnail_url = targetFile.uri.toString()\n        return targetFile\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/image/anime/LocalEpisodeThumbnailManager.kt",
    "content": "package tachiyomi.source.local.image.anime\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem\nimport java.io.InputStream\n\nprivate const val DEFAULT_THUMBNAIL_NAME = \"thumbnail.jpg\"\n\nactual class LocalEpisodeThumbnailManager(\n    private val context: Context,\n    private val fileSystem: LocalAnimeSourceFileSystem,\n) {\n\n    actual fun find(animeUrl: String, fileName: String): UniFile? {\n        return fileSystem.getFilesInAnimeDirectory(animeUrl)\n            // Get all file whose names contain the episode name and the word 'thumbnail'\n            .filter { it.isFile && it.nameWithoutExtension.equals(fileName, ignoreCase = true) }\n            // Get the first actual image\n            .firstOrNull { ImageUtil.isImage(it.name) { it.openInputStream() } }\n    }\n\n    actual fun update(anime: SAnime, episode: SEpisode, inputStream: InputStream): UniFile? {\n        val directory = fileSystem.getAnimeDirectory(anime.url)\n        if (directory == null) {\n            inputStream.close()\n            return null\n        }\n\n        val fileName = \"${episode.name}-$DEFAULT_THUMBNAIL_NAME\"\n        val targetFile = find(anime.url, fileName) ?: directory.createFile(fileName)!!\n\n        inputStream.use { input ->\n            targetFile.openOutputStream().use { output ->\n                input.copyTo(output)\n            }\n        }\n\n        DiskUtil.createNoMediaFile(directory, context)\n\n        episode.preview_url = targetFile.uri.toString()\n        return targetFile\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/image/manga/LocalMangaCoverManager.kt",
    "content": "package tachiyomi.source.local.image.manga\n\nimport android.content.Context\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.source.model.SManga\nimport eu.kanade.tachiyomi.util.storage.DiskUtil\nimport tachiyomi.core.common.storage.nameWithoutExtension\nimport tachiyomi.core.common.util.system.ImageUtil\nimport tachiyomi.source.local.io.manga.LocalMangaSourceFileSystem\nimport java.io.InputStream\n\nprivate const val DEFAULT_COVER_NAME = \"cover.jpg\"\n\nactual class LocalMangaCoverManager(\n    private val context: Context,\n    private val fileSystem: LocalMangaSourceFileSystem,\n) {\n\n    actual fun find(mangaUrl: String): UniFile? {\n        return fileSystem.getFilesInMangaDirectory(mangaUrl)\n            // Get all file whose names start with \"cover\"\n            .filter { it.isFile && it.nameWithoutExtension.equals(\"cover\", ignoreCase = true) }\n            // Get the first actual image\n            .firstOrNull { ImageUtil.isImage(it.name) { it.openInputStream() } }\n    }\n\n    actual fun update(\n        manga: SManga,\n        inputStream: InputStream,\n    ): UniFile? {\n        val directory = fileSystem.getMangaDirectory(manga.url)\n        if (directory == null) {\n            inputStream.close()\n            return null\n        }\n\n        val targetFile = find(manga.url) ?: directory.createFile(DEFAULT_COVER_NAME)!!\n\n        inputStream.use { input ->\n            targetFile.openOutputStream().use { output ->\n                input.copyTo(output)\n            }\n        }\n\n        DiskUtil.createNoMediaFile(directory, context)\n\n        manga.thumbnail_url = targetFile.uri.toString()\n        return targetFile\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/io/anime/LocalAnimeSourceFileSystem.kt",
    "content": "package tachiyomi.source.local.io.anime\n\nimport com.hippo.unifile.UniFile\nimport tachiyomi.domain.storage.service.StorageManager\n\nactual class LocalAnimeSourceFileSystem(\n    private val storageManager: StorageManager,\n) {\n\n    actual fun getBaseDirectory(): UniFile? {\n        return storageManager.getLocalAnimeSourceDirectory()\n    }\n\n    actual fun getFilesInBaseDirectory(): List<UniFile> {\n        return getBaseDirectory()?.listFiles().orEmpty().toList()\n    }\n\n    actual fun getAnimeDirectory(name: String): UniFile? {\n        return getBaseDirectory()\n            ?.findFile(name)\n            ?.takeIf { it.isDirectory }\n    }\n\n    actual fun getFilesInAnimeDirectory(name: String): List<UniFile> {\n        return getBaseDirectory()\n            ?.findFile(name)\n            ?.takeIf { it.isDirectory }\n            ?.listFiles().orEmpty().toList()\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/io/manga/LocalMangaSourceFileSystem.kt",
    "content": "package tachiyomi.source.local.io.manga\n\nimport com.hippo.unifile.UniFile\nimport tachiyomi.domain.storage.service.StorageManager\n\nactual class LocalMangaSourceFileSystem(\n    private val storageManager: StorageManager,\n) {\n\n    actual fun getBaseDirectory(): UniFile? {\n        return storageManager.getLocalMangaSourceDirectory()\n    }\n\n    actual fun getFilesInBaseDirectory(): List<UniFile> {\n        return getBaseDirectory()?.listFiles().orEmpty().toList()\n    }\n\n    actual fun getMangaDirectory(name: String): UniFile? {\n        return getBaseDirectory()\n            ?.findFile(name)\n            ?.takeIf { it.isDirectory }\n    }\n\n    actual fun getFilesInMangaDirectory(name: String): List<UniFile> {\n        return getMangaDirectory(name)?.listFiles().orEmpty().toList()\n    }\n}\n"
  },
  {
    "path": "source-local/src/androidMain/kotlin/tachiyomi/source/local/metadata/EpubReaderExtensions.kt",
    "content": "package tachiyomi.source.local.metadata\n\nimport eu.kanade.tachiyomi.source.model.SChapter\nimport eu.kanade.tachiyomi.source.model.SManga\nimport mihon.core.archive.EpubReader\nimport java.text.ParseException\nimport java.text.SimpleDateFormat\nimport java.util.Locale\n\n/**\n * Fills manga and chapter metadata using this epub file's metadata.\n */\nfun EpubReader.fillMetadata(manga: SManga, chapter: SChapter) {\n    val ref = getPackageHref()\n    val doc = getPackageDocument(ref)\n\n    val title = doc.getElementsByTag(\"dc:title\").first()\n    val publisher = doc.getElementsByTag(\"dc:publisher\").first()\n    val creator = doc.getElementsByTag(\"dc:creator\").first()\n    val description = doc.getElementsByTag(\"dc:description\").first()\n    var date = doc.getElementsByTag(\"dc:date\").first()\n    if (date == null) {\n        date = doc.select(\"meta[property=dcterms:modified]\").first()\n    }\n\n    creator?.text()?.let { manga.author = it }\n    description?.text()?.let { manga.description = it }\n\n    title?.text()?.let { chapter.name = it }\n\n    if (publisher != null) {\n        chapter.scanlator = publisher.text()\n    } else if (creator != null) {\n        chapter.scanlator = creator.text()\n    }\n\n    if (date != null) {\n        val dateFormat = SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ssZ\", Locale.getDefault())\n        try {\n            val parsedDate = dateFormat.parse(date.text())\n            if (parsedDate != null) {\n                chapter.date_upload = parsedDate.time\n            }\n        } catch (e: ParseException) {\n            // Empty\n        }\n    }\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeFetchTypeManager.kt",
    "content": "package tachiyomi.source.local.entries.anime\n\nimport eu.kanade.tachiyomi.animesource.model.FetchType\n\nexpect class LocalAnimeFetchTypeManager {\n    fun find(animeUrl: String): FetchType\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeSource.kt",
    "content": "package tachiyomi.source.local.entries.anime\n\nimport eu.kanade.tachiyomi.animesource.AnimeCatalogueSource\n\nexpect class LocalAnimeSource : AnimeCatalogueSource\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/entries/manga/LocalMangaSource.kt",
    "content": "package tachiyomi.source.local.entries.manga\n\nimport eu.kanade.tachiyomi.source.CatalogueSource\nimport eu.kanade.tachiyomi.source.UnmeteredSource\n\nexpect class LocalMangaSource : CatalogueSource, UnmeteredSource\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/image/anime/LocalAnimeBackgroundManager.kt",
    "content": "package tachiyomi.source.local.image.anime\n\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport java.io.InputStream\n\nexpect class LocalAnimeBackgroundManager {\n\n    fun find(animeUrl: String): UniFile?\n\n    fun update(anime: SAnime, inputStream: InputStream): UniFile?\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/image/anime/LocalAnimeCoverManager.kt",
    "content": "package tachiyomi.source.local.image.anime\n\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport java.io.InputStream\n\nexpect class LocalAnimeCoverManager {\n\n    fun find(animeUrl: String): UniFile?\n\n    fun update(anime: SAnime, inputStream: InputStream): UniFile?\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/image/anime/LocalEpisodeThumbnailManager.kt",
    "content": "package tachiyomi.source.local.image.anime\n\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.animesource.model.SAnime\nimport eu.kanade.tachiyomi.animesource.model.SEpisode\nimport java.io.InputStream\n\nexpect class LocalEpisodeThumbnailManager {\n\n    fun find(animeUrl: String, fileName: String): UniFile?\n\n    fun update(anime: SAnime, episode: SEpisode, inputStream: InputStream): UniFile?\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/image/manga/LocalMangaCoverManager.kt",
    "content": "package tachiyomi.source.local.image.manga\n\nimport com.hippo.unifile.UniFile\nimport eu.kanade.tachiyomi.source.model.SManga\nimport java.io.InputStream\n\nexpect class LocalMangaCoverManager {\n\n    fun find(mangaUrl: String): UniFile?\n\n    fun update(manga: SManga, inputStream: InputStream): UniFile?\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/io/Archive.kt",
    "content": "package tachiyomi.source.local.io\n\nimport com.hippo.unifile.UniFile\nimport tachiyomi.core.common.storage.extension\n\nobject ArchiveAnime {\n\n    private val SUPPORTED_ARCHIVE_TYPES = listOf(\"avi\", \"flv\", \"mkv\", \"mov\", \"mp4\", \"webm\", \"wmv\")\n\n    fun isSupported(file: UniFile): Boolean = with(file) {\n        return file.extension in SUPPORTED_ARCHIVE_TYPES\n    }\n}\n\nobject ArchiveManga {\n\n    private val SUPPORTED_ARCHIVE_TYPES = listOf(\"zip\", \"cbz\", \"rar\", \"cbr\", \"7z\", \"cb7\", \"tar\", \"cbt\")\n\n    fun isSupported(file: UniFile): Boolean {\n        return file.extension?.lowercase() in SUPPORTED_ARCHIVE_TYPES\n    }\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/io/Format.kt",
    "content": "package tachiyomi.source.local.io\n\nimport com.hippo.unifile.UniFile\nimport tachiyomi.core.common.storage.extension\nimport tachiyomi.source.local.io.ArchiveManga.isSupported as isArchiveSupported\n\nsealed interface Format {\n    data class Directory(val file: UniFile) : Format\n    data class Archive(val file: UniFile) : Format\n    data class Epub(val file: UniFile) : Format\n\n    class UnknownFormatException : Exception()\n\n    companion object {\n\n        fun valueOf(file: UniFile) = when {\n            file.isDirectory -> Directory(file)\n            file.extension.equals(\"epub\", true) -> Epub(file)\n            isArchiveSupported(file) -> Archive(file)\n            else -> throw UnknownFormatException()\n        }\n    }\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/io/anime/LocalAnimeSourceFileSystem.kt",
    "content": "package tachiyomi.source.local.io.anime\n\nimport com.hippo.unifile.UniFile\n\nexpect class LocalAnimeSourceFileSystem {\n\n    fun getBaseDirectory(): UniFile?\n\n    fun getFilesInBaseDirectory(): List<UniFile>\n\n    fun getAnimeDirectory(name: String): UniFile?\n\n    fun getFilesInAnimeDirectory(name: String): List<UniFile>\n}\n"
  },
  {
    "path": "source-local/src/commonMain/kotlin/tachiyomi/source/local/io/manga/LocalMangaSourceFileSystem.kt",
    "content": "package tachiyomi.source.local.io.manga\n\nimport com.hippo.unifile.UniFile\n\nexpect class LocalMangaSourceFileSystem {\n\n    fun getBaseDirectory(): UniFile?\n\n    fun getFilesInBaseDirectory(): List<UniFile>\n\n    fun getMangaDirectory(name: String): UniFile?\n\n    fun getFilesInMangaDirectory(name: String): List<UniFile>\n}\n"
  }
]